mirror of
https://github.com/OOOO00000000OOOO/80O08
synced 2026-09-21 23:34:48 +00:00
11 lines
407 KiB
HTML
11 lines
407 KiB
HTML
<!DOCTYPE html> <html lang=en><!--
|
||
Page saved with SingleFile
|
||
url: https://cryptii.com/pipes/reverse-text/
|
||
saved date: Sun Sep 06 2026 06:53:12 GMT+0300 (GMT+03:00)
|
||
--><meta charset=utf-8><meta name=viewport content="width=device-width"><title>Reverse text: Spell text backwards online - cryptii</title><link rel=canonical href=https://cryptii.com/pipes/reverse-text><meta name=description content="Type in text and easily reverse it, flip it, spell it backwards. As it makes the text much more difficult to read, it is a useful technique to hide content, similar to a magazine printing an answer to a quiz upside down."><style data-sf-original-href=https://cdn.wierk.net/projects/cryptii-com/releases/v4.0.11/assets/index-BRhFX4Wq.css>.field-enum--radio .field-enum__option-label,.brick__status,.pipe__description,.footer__description,.footer__brand,button,input,textarea{font-family:Roboto,sans-serif;font-weight:400;font-size:16px;line-height:1.5}.footer__description>a,.link-list{font-family:Roboto,sans-serif;font-weight:500;font-size:16px;line-height:1.8}.header__brand{font-family:Roboto,sans-serif;font-weight:500;font-size:32px}.pipe__title{font-family:Roboto,sans-serif;font-weight:500;font-size:21px;line-height:1.5}.brick__action{font-family:Roboto,sans-serif;font-weight:500;font-size:15px;text-transform:uppercase;letter-spacing:1px}.brick__title-inner{font-family:Roboto,sans-serif;font-weight:500;font-size:24px;line-height:28px}.field__label{font-family:Roboto,sans-serif;font-weight:500;font-size:12px;line-height:10px;text-transform:uppercase;letter-spacing:1px}.field-enum--radio .field-enum__option-radio:checked+.field-enum__option-label{font-family:Roboto,sans-serif;font-weight:500;font-size:16px}.viewer-text__textarea{font-family:Source Code Pro,monospace;font-weight:400;font-size:16px;line-height:1.5}.brick{box-shadow:0 1px 3px #00000024;border-radius:2px;background:#fff}/*! normalize-scss | MIT/GPLv2 License | bit.ly/normalize-scss */html{line-height:1.15;-webkit-text-size-adjust:100%}a{background-color:transparent}button,input,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button{overflow:visible}button{text-transform:none}button{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText}input{overflow:visible}[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}@font-face{font-family:Source Code Pro;font-style:normal;font-weight:400;src:/* original URL: https://cdn.wierk.net/projects/cryptii-com/releases/v4.0.11/assets/source-code-pro-v23-latin-regular-BUJ3hEal.woff2 */url(data:font/woff2;base64,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)format("woff2")}@font-face{font-family:Roboto;font-style:normal;font-weight:400;src:/* original URL: https://cdn.wierk.net/projects/cryptii-com/releases/v4.0.11/assets/roboto-v32-latin-regular-DXyFPIdK.woff2 */url(data:font/woff2;base64,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)format("woff2")}@font-face{font-family:Roboto;font-style:normal;font-weight:500;src:/* original URL: https://cdn.wierk.net/projects/cryptii-com/releases/v4.0.11/assets/roboto-v32-latin-500-C6iW8rdg.woff2 */url(data:font/woff2;base64,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)format("woff2")}*{outline:0;box-sizing:border-box;transition-timing-function:ease;flex-shrink:0;flex-grow:0;flex-basis:auto}html,body{min-height:100%;margin:0;padding:0}body{overflow-x:hidden;overflow-y:auto;background:#fff;font-size:16px;line-height:1.15}body,button,input,textarea{color:#272727;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}button:disabled,input:disabled,select:disabled,textarea:disabled{-webkit-text-fill-color:#272727}button{padding:0;border:0;text-align:left;cursor:pointer;background:0;color:inherit;font:inherit}textarea{margin:0}textarea{resize:none}h1,h2,h3,p,ul{margin:0;padding:0}ul{list-style-type:none;font:inherit}li{font:inherit}a{text-decoration:inherit;color:inherit}.container,.header{padding:0 16px}@media screen and (min-width:768px) and (max-width:999px){.container,.header{padding:0 32px}}@media screen and (min-width:1000px) and (max-width:1399px){.container,.header{padding:0 48px}}@media screen and (min-width:1400px){.container,.header{padding:0 64px}}.link-list{display:flex;flex-direction:row;flex-wrap:wrap;margin:0-16px}@media screen and (min-width:768px) and (max-width:999px){.link-list{justify-content:center}}@media screen and (min-width:0) and (max-width:767px){.link-list{flex-direction:column;margin:0;border:1px solid #e3e8ec;border-radius:2px}}@media screen and (min-width:0) and (max-width:767px){.link-list__item{border-bottom:1px solid #e3e8ec}.link-list__item:last-child{border-bottom:0}}.link-list__link{padding:0 16px}.link-list__link:hover{color:#00a3cc}@media screen and (min-width:0) and (max-width:767px){.link-list__link{display:block;padding:8px 16px;text-align:left}}.app{display:flex;flex-direction:column;width:100%}.header{position:relative;z-index:10}@media screen and (min-width:0) and (max-width:767px){.header{padding:24px 0}}.header__inner{display:flex;margin:-8px 0;justify-content:center;align-items:center;flex-direction:column}@media screen and (min-width:768px){.header__inner{flex-direction:row;justify-content:flex-start;height:96px;margin:0-8px}}.header__item,.header__featured{padding:8px 0}@media screen and (min-width:768px){.header__item,.header__featured{padding:0 8px}}@media screen and (min-width:0) and (max-width:767px){.header__featured{margin-bottom:-24px}}.header__brand{display:block;line-height:0}@media screen and (min-width:768px){.header__flexible-space{flex-grow:1;flex-basis:0}}.modal__btn-close:hover{color:#272727}.menu__button:hover{background:#f2f4f6}.content a:hover{text-decoration:underline}.footer{padding:32px 0;border-top:2px solid #e3e8ec;color:#8898aa}@media screen and (min-width:0) and (max-width:999px){.footer{text-align:center}}.footer__inner{max-width:600px}@media screen and (min-width:0) and (max-width:999px){.footer__inner{margin:0 auto}}@media screen and (min-width:1000px){.footer__inner{max-width:896px}}.footer__brand,.footer__description{display:inline}.footer__description>a:hover{color:#00a3cc}.footer__description:before{content:"– "}.footer__link-list{margin-top:16px}@media screen and (min-width:0) and (max-width:767px){.footer__link-list{margin-top:24px}}.pipe{display:flex;flex-direction:column;flex-grow:1}@media screen and (min-width:1000px){.pipe{min-height:calc(100vh - 96px)}}.pipe__scrollable{position:relative;background:#f2f4f6}@media screen and (min-width:1000px){.pipe__scrollable{flex-grow:1;order:1;overflow:hidden}}.pipe__scroll-handle{position:absolute;top:0;left:0;bottom:0;width:100px;z-index:50}@media screen and (min-width:0) and (max-width:999px){.pipe__scroll-handle{display:none}}.pipe__scroll-handle--right{left:auto;right:0}.pipe__scroll-handle--disabled{display:none}.pipe__content{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:96px 0}@media screen and (min-width:1000px){.pipe__content{flex-direction:row;align-items:flex-start;float:left;padding:48px;min-width:100%}}@media screen and (min-width:1000px) and (min-width:0) and (max-width:767px){.pipe__content{padding-left:16px;padding-right:16px}}@media screen and (min-width:1000px) and (min-width:768px) and (max-width:999px){.pipe__content{padding-left:32px;padding-right:32px}}@media screen and (min-width:1000px) and (min-width:1000px) and (max-width:1399px){.pipe__content{padding-left:48px;padding-right:48px}}@media screen and (min-width:1000px) and (min-width:1400px){.pipe__content{padding-left:64px;padding-right:64px}}.pipe__part-pipe{position:relative;width:96px;height:56px;background:#00b1d1;border-color:#00b1d1}@media screen and (min-width:1000px){.pipe__part-pipe{width:56px;height:96px;margin-top:8px;margin-bottom:8px}}.pipe__part-pipe:first-child:after,.pipe__part-pipe:last-child:after{content:"";display:block;position:absolute;left:0;right:0;border-width:24px 48px 0 48px;border-style:solid;border-color:inherit}@media screen and (min-width:1000px){.pipe__part-pipe:first-child:after,.pipe__part-pipe:last-child:after{top:0;bottom:0;border-width:48px 0 48px 24px}}.pipe__part-pipe:first-child:after{top:-24px;border-top-color:transparent}@media screen and (min-width:1000px){.pipe__part-pipe:first-child:after{top:auto;border-top-color:inherit;left:-24px;border-left-color:transparent}}.pipe__part-pipe:last-child:after{bottom:-24px;border-left-color:transparent;border-right-color:transparent}@media screen and (min-width:1000px){.pipe__part-pipe:last-child:after{bottom:0;left:auto;right:-24px;border-top-color:transparent;border-right-color:inherit;border-bottom-color:transparent;border-left-color:inherit}}.pipe__part-brick{width:100%;min-width:320px;max-width:448px;flex-grow:1}@media screen and (min-width:1000px){.pipe__part-brick{max-width:576px}}@media screen and (min-width:1000px){.pipe__part-brick--encoder{max-width:368px}}@media screen and (min-width:768px) and (max-width:999px){.pipe__part-brick{width:448px}}@media screen and (min-width:1000px){.pipe__part-brick{width:auto;flex-basis:0}}.pipe__header{order:2;padding-top:36px;padding-bottom:32px}@media screen and (min-width:0) and (max-width:999px){.pipe__header{text-align:center}}.pipe__title,.pipe__description,.pipe__link-list{max-width:600px}@media screen and (min-width:0) and (max-width:999px){.pipe__title,.pipe__description,.pipe__link-list{margin:0 auto}}@media screen and (min-width:1000px){.pipe__title,.pipe__description,.pipe__link-list{max-width:896px}}.pipe__title{display:block;padding:0 0 14px}.pipe__link-list{margin-top:16px}@media screen and (min-width:0) and (max-width:767px){.pipe__link-list{margin-top:24px}}.pipe__btn-add{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:24px;height:24px;border:2px solid #fff;border-radius:13px;text-indent:-1000px;z-index:1;opacity:.4;overflow:hidden}.pipe__btn-add:before,.pipe__btn-add:after{content:"";display:block;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:12px;height:2px;background:#fff}.pipe__btn-add:after{transform:translate(-50%,-50%) rotate(90deg)}.pipe__part-pipe:hover .pipe__btn-add{opacity:1}.pipe__drop-handle{position:absolute;top:50%;left:0;right:0;height:11px;background:#f2f4f6;transform:translateY(-50%) translateY(-.5px);z-index:1;visibility:hidden}@media screen and (min-width:1000px){.pipe__drop-handle{top:0;left:50%;bottom:0;right:auto;height:auto;width:11px;transform:translate(-50%) translate(-.5px)}}.pipe__drop-handle:before,.pipe__drop-handle:after{content:"";display:block;position:absolute}.pipe__drop-handle:before{background:#00b1d1}@media screen and (min-width:0) and (max-width:999px){.pipe__drop-handle:before{top:4px;left:-16px;right:-14px;height:3px}}@media screen and (min-width:1000px){.pipe__drop-handle:before{left:4px;top:-16px;bottom:-14px;width:3px}}.pipe__drop-handle:after{width:7px;height:7px;border-radius:16px;border:3px solid #00b1d1;background:#f2f4f6}@media screen and (min-width:0) and (max-width:999px){.pipe__drop-handle:after{top:-1px;left:-24px}}@media screen and (min-width:1000px){.pipe__drop-handle:after{left:-1px;top:-24px}}.modal-library__brick:before{content:"";display:inline-block;width:8px;height:8px;margin:0 8px 1px 0;border-radius:4px;background:#00b1d1}.modal-library__brick--encoder:before{background:#f90}.form{display:flex;flex-direction:row;flex-wrap:wrap}.brick{display:flex;position:relative;flex-direction:column;-webkit-user-select:none;user-select:none}@media screen and (max-width:448px){.brick{border-radius:0}}.brick__header{position:relative;padding:16px;height:104px;border-bottom:1px solid #e3e8ec;cursor:-moz-grab}.brick__btn-menu{display:flex;justify-content:center;align-items:center;position:absolute;top:0;right:0;width:36px;height:48px;color:#90999e}.brick__btn-menu:hover{color:#272727}.brick__btn-menu svg{width:16px;height:16px;fill:currentColor}.brick__actions{display:flex;flex-direction:row;margin:0-6px}.brick__action{display:block;padding:0 6px;color:#90999e}.brick__action--active{color:inherit}.brick__title{display:flex;flex-direction:row;margin-top:24px;max-width:100%}.brick__title-inner{flex-basis:0;flex-grow:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.brick__title-caret{margin-top:4px;margin-left:4px;pointer-events:none}.brick__title-caret svg{width:20px;height:20px;fill:currentColor}.brick__content{line-height:0}.brick__status{padding:13px 16px;min-height:48px;word-break:break-word;color:#90999e;transition-property:color}.brick__status--hidden{display:none}.brick__status-icon{display:inline-block;position:relative;top:2px;width:16px;height:16px;margin-right:8px;background-repeat:no-repeat;background-size:100%auto}.brick__status-message{display:inline;-webkit-user-select:auto;user-select:auto}.viewer{color:#00b1d1}.encoder{color:#f90}.viewer-text__textarea{width:100%;padding:16px;border:0;overflow:hidden;background:transparent}.field{display:flex;position:relative;flex-direction:column;border-bottom:1px solid #e3e8ec;min-height:57px;width:100%}.field__label{display:block;padding:12px 12px 0 16px;border-right:1px solid #e3e8ec;color:#90999e;align-self:flex-start;-webkit-user-select:auto;user-select:auto}.field-enum--radio .field-enum__field{position:relative;margin:12px 16px;min-height:22px;-webkit-user-select:auto;user-select:auto}.field__message:before{content:"";display:block;position:absolute;top:-7px;left:50%;transform:translate(-50%);border-width:7px;border-style:solid;border-color:transparent;border-top-width:0;border-bottom-color:inherit}.field--first{border-left:0}.field--invalid:before{content:"";display:block;width:3px;background:#ff6940;position:absolute;top:4px;left:4px;bottom:4px}.field-boolean__input:checked+.field-boolean__toggle .field-boolean__choice:first-child{color:#272727}.field-boolean__input:checked+.field-boolean__toggle .field-boolean__choice:last-child{color:inherit}.field-enum--default .field-enum__field:before,.field-enum--default .field-enum__field:after{content:"";display:block;position:absolute;top:50%;right:14px;height:2px;width:8px;transform:translate(-.5px,2px) rotate(-45deg);transform-origin:left center;background:#90999e;pointer-events:none}.field-enum--default .field-enum__field:after{transform:translate(.5px,2px) rotate(-135deg)}.field-enum--radio .field-enum__option{position:relative}.field-enum--radio .field-enum__option-radio{position:absolute;top:6px;left:0;z-index:-1;opacity:0}.field-enum--radio .field-enum__option-label{display:block;padding:4px 0 4px 24px;line-height:22px;color:#90999e;-webkit-user-select:none;user-select:none;cursor:pointer}.field-enum--radio .field-enum__option-label:before{content:"";position:absolute;top:6px;left:0;width:12px;height:12px;background:#fff;border:2px solid #90999e;border-radius:8px;pointer-events:none}.field-enum--radio .field-enum__option-label:after{content:"";position:absolute;top:11px;left:5px;width:6px;height:6px;border-radius:8px;pointer-events:none}.field-enum--radio .field-enum__option-radio:checked+.field-enum__option-label{color:#272727}.field-enum--radio .field-enum__option-radio:checked+.field-enum__option-label:before{border-color:#272727}.field-enum--radio .field-enum__option-radio:checked+.field-enum__option-label:after{background:#272727}.field-number__input::-webkit-inner-spin-button,.field-number__input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.field-number__input:focus+.field-number__display{visibility:hidden}.field-number__btn-step-down:before,.field-number__btn-step-down:after,.field-number__btn-step-up:before,.field-number__btn-step-up:after{content:"";display:block;position:absolute;top:50%;left:20px;transform:translate(-50%,-50%);width:10px;height:2px;background:#90999e}.field-number__btn-step-down:hover:before,.field-number__btn-step-down:hover:after,.field-number__btn-step-up:hover:before,.field-number__btn-step-up:hover:after{background:#00b1d1}.field-number__btn-step-down:before{content:none}.field-number__btn-step-up:before,.field-number__btn-step-up:after{left:12px}.field-number__btn-step-up:after{transform:translate(-50%,-50%) rotate(90deg)}</style><style>.header__badge--pride::before{content:"";display:block;position:absolute;right:0;bottom:0;left:0;height:4px;background:repeating-linear-gradient(to right,#ef4514 0,#ef4514 16.66667%,#ffa600 16.66667%,#ffa600 33.33333%,#fbcb00 33.33333%,#fbcb00 50%,#38be65 50%,#38be65 66.66667%,#288af6 66.66667%,#288af6 83.33333%,#8e00a2 83.33333%,#8e00a2 100%)}.pipe__header{position:relative}@media screen and (min-width:1000px){.pipe__title,.pipe__description,.pipe__link-list{margin-right:284px}}</style><meta property=og:type content=website><meta property=og:url content=https://cryptii.com/pipes/reverse-text><meta property=og:site_name content=cryptii><meta property=og:title content="Reverse text: Spell text backwards online"><meta property=og:description content="Type in text and easily reverse it, flip it, spell it backwards. As it makes the text much more difficult to read, it is a useful technique to hide content, similar to a magazine printing an answer to a quiz upside down."><meta property=og:image content=https://cdn.wierk.net/projects/cryptii-com/assets/images/og-cryptii-default.png><meta property=og:image:type content=image/png><meta property=og:image:width content=1200><meta property=og:image:height content=630><script type=application/ld+json>{"@context":"https://schema.org","@type":"WebSite","name":"cryptii","description":"A web app for modular conversion, encoding, and encryption, all performed directly in your browser with no server interaction. This Open Source project is licensed under the MIT License.","url":"/","image":"//assets/icons/icon-512px.png","sameAs":["https://bsky.app/profile/cryptii.com","https://discord.gg/v5wNewjdxm","https://github.com/cryptii/cryptii"],"hasPart":{"@type":"SoftwareApplication","name":"cryptii","description":"A web app for modular conversion, encoding, and encryption, all performed directly in your browser with no server interaction. This Open Source project is licensed under the MIT License.","url":"/","applicationCategory":"Utility, Education, Cryptographic software","image":"//assets/icons/icon-512px.png","publisher":{"@type":"Corporation","name":"wierk","url":"https://wierk.lu/?utm_source=cryptii.com&utm_medium=referral&utm_campaign=products"}},"publisher":{"@type":"Corporation","name":"wierk","url":"https://wierk.lu/?utm_source=cryptii.com&utm_medium=referral&utm_campaign=products"}}</script><script type=application/json data-cryptii-config>
|
||
{}
|
||
</script><script type=application/vnd.cryptii.pipe+json data-cryptii-pipe=true>{"$schema":"https://cryptii.com/schemas/pipe.json","id":1055536693,"url":"/pipes/reverse-text","title":"Reverse text: Spell text backwards online","description":"Type in text and easily reverse it, flip it, spell it backwards. As it makes the text much more difficult to read, it is a useful technique to hide content, similar to a magazine printing an answer to a quiz upside down.","items":[{"name":"text"},{"name":"reverse","settings":{"type":"character"}},{"name":"text","title":"Reversed text"}],"content":{"data":"The quick brown fox jumps over 13 lazy dogs."},"createdAt":1517577662,"updatedAt":1558258847,"slug":"reverse-text","shortTitle":"Reverse text"}</script><script async data-sf-original-src=https://cdn.wierk.net/projects/cryptii-com/releases/v4.0.11/assets/index-B4bqQR14.js src="data:application/javascript;base64,KGZ1bmN0aW9uKCl7Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIikucmVsTGlzdDtpZihlJiZlLnN1cHBvcnRzJiZlLnN1cHBvcnRzKCJtb2R1bGVwcmVsb2FkIikpcmV0dXJuO2Zvcihjb25zdCBzIG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpbmtbcmVsPSJtb2R1bGVwcmVsb2FkIl0nKSlpKHMpO25ldyBNdXRhdGlvbk9ic2VydmVyKHM9Pntmb3IoY29uc3QgbiBvZiBzKWlmKG4udHlwZT09PSJjaGlsZExpc3QiKWZvcihjb25zdCByIG9mIG4uYWRkZWROb2RlcylyLnRhZ05hbWU9PT0iTElOSyImJnIucmVsPT09Im1vZHVsZXByZWxvYWQiJiZpKHIpfSkub2JzZXJ2ZShkb2N1bWVudCx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITB9KTtmdW5jdGlvbiB0KHMpe2NvbnN0IG49e307cmV0dXJuIHMuaW50ZWdyaXR5JiYobi5pbnRlZ3JpdHk9cy5pbnRlZ3JpdHkpLHMucmVmZXJyZXJQb2xpY3kmJihuLnJlZmVycmVyUG9saWN5PXMucmVmZXJyZXJQb2xpY3kpLHMuY3Jvc3NPcmlnaW49PT0idXNlLWNyZWRlbnRpYWxzIj9uLmNyZWRlbnRpYWxzPSJpbmNsdWRlIjpzLmNyb3NzT3JpZ2luPT09ImFub255bW91cyI/bi5jcmVkZW50aWFscz0ib21pdCI6bi5jcmVkZW50aWFscz0ic2FtZS1vcmlnaW4iLG59ZnVuY3Rpb24gaShzKXtpZihzLmVwKXJldHVybjtzLmVwPSEwO2NvbnN0IG49dChzKTtmZXRjaChzLmhyZWYsbil9fSkoKTtjb25zdCBjdD17cm9sZToicm9sZSIsYXJpYUhpZGRlbjoiYXJpYS1oaWRkZW4iLGFyaWFMYWJlbDoiYXJpYS1sYWJlbCJ9O2NsYXNzIG17c3RhdGljIGNyZWF0ZUVsZW1lbnQoZSx0PXt9LGk9bnVsbCl7Y29uc3Qgcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGUpO2lmKE9iamVjdC5rZXlzKHQpLmZvckVhY2gobj0+e2NvbnN0IHI9dFtuXTtpZihjdFtuXT09PXZvaWQgMCl7Y29uc3QgYT1uLmluZGV4T2YoIm9uIik9PT0wP24udG9Mb3dlckNhc2UoKTpuO3NbYV09cn1lbHNlIHMuc2V0QXR0cmlidXRlKGN0W25dLHIpfSksaSE9PW51bGwpc3dpdGNoKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpKSl7Y2FzZSJbb2JqZWN0IFN0cmluZ10iOnMuaW5uZXJUZXh0PWk7YnJlYWs7Y2FzZSJbb2JqZWN0IEFycmF5XSI6aS5mb3JFYWNoKG49Pm4mJnMuYXBwZW5kQ2hpbGQobikpO2JyZWFrO2RlZmF1bHQ6cy5hcHBlbmRDaGlsZChpKX1yZXR1cm4gc31jb25zdHJ1Y3Rvcigpe3RoaXMuXyRyb290PW51bGwsdGhpcy5fc3VwZXJ2aWV3PW51bGwsdGhpcy5fc3Vidmlld3M9W10sdGhpcy5fbW9kZWw9bnVsbCx0aGlzLl9mb2N1cz0hMSx0aGlzLl9uZWVkc1VwZGF0ZT0hMX1nZXRFbGVtZW50KCl7cmV0dXJuIHRoaXMuXyRyb290PT09bnVsbCYmKHRoaXMud2lsbFJlbmRlcigpLHRoaXMuXyRyb290PXRoaXMucmVuZGVyKCksdGhpcy5kaWRSZW5kZXIoKSksdGhpcy5fJHJvb3R9cmVmcmVzaCgpe2NvbnN0IGU9dGhpcy5fJHJvb3Q7cmV0dXJuIGU9PT1udWxsP3RoaXM6KHRoaXMuXyRyb290PW51bGwsdGhpcy53aWxsUmVuZGVyKCksdGhpcy5fJHJvb3Q9dGhpcy5yZW5kZXIoKSx0aGlzLmRpZFJlbmRlcigpLHRoaXMuZ2V0U3Vidmlld3MoKS5mb3JFYWNoKHRoaXMuYXBwZW5kU3Vidmlld0VsZW1lbnQpLGUmJmUucGFyZW50Tm9kZSYmZS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZCh0aGlzLl8kcm9vdCxlKSx0aGlzKX1yZW5kZXIoKXtyZXR1cm4gbS5jcmVhdGVFbGVtZW50KCJkaXYiKX1zZXROZWVkc1VwZGF0ZSgpe3JldHVybiB0aGlzLl9uZWVkc1VwZGF0ZXx8KHRoaXMuX25lZWRzVXBkYXRlPSEwLHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLl9uZWVkc1VwZGF0ZT0hMSx0aGlzLnVwZGF0ZSgpfSkpLHRoaXN9dXBkYXRlKCl7fXdpbGxSZW5kZXIoKXt9ZGlkUmVuZGVyKCl7dGhpcy51cGRhdGUoKX1sYXlvdXQoKXtyZXR1cm4gdGhpcy5fc3Vidmlld3MuZm9yRWFjaChlPT5lLmxheW91dCgpKSx0aGlzfWFkZFN1YnZpZXcoZSl7ZS5yZW1vdmVGcm9tU3VwZXJ2aWV3KCksdGhpcy5hcHBlbmRTdWJ2aWV3RWxlbWVudChlKSxlLnNldFN1cGVydmlldyh0aGlzKSx0aGlzLl9zdWJ2aWV3cy5wdXNoKGUpfWdldFN1YnZpZXdzKCl7cmV0dXJuIHRoaXMuX3N1YnZpZXdzfWFwcGVuZFN1YnZpZXdFbGVtZW50KGUpe3JldHVybiBlLmdldEVsZW1lbnQoKS5wYXJlbnROb2RlIT09dGhpcy5nZXRFbGVtZW50KCkmJnRoaXMuZ2V0RWxlbWVudCgpLmFwcGVuZENoaWxkKGUuZ2V0RWxlbWVudCgpKSx0aGlzfXJlbW92ZVN1YnZpZXcoZSl7Y29uc3QgdD10aGlzLl9zdWJ2aWV3cy5pbmRleE9mKGUpO3QhPT0tMSYmKHRoaXMuX3N1YnZpZXdzLnNwbGljZSh0LDEpLGUuc2V0U3VwZXJ2aWV3KG51bGwpLHRoaXMucmVtb3ZlU3Vidmlld0VsZW1lbnQoZSkpfXJlbW92ZVN1YnZpZXdFbGVtZW50KGUpe2NvbnN0IHQ9ZS5nZXRFbGVtZW50KCk7cmV0dXJuIHQucGFyZW50Tm9kZSE9PW51bGwmJnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlLmdldEVsZW1lbnQoKSksdGhpc31yZW1vdmVGcm9tU3VwZXJ2aWV3KCl7cmV0dXJuIHRoaXMuX3N1cGVydmlldyE9PW51bGwmJnRoaXMuX3N1cGVydmlldy5yZW1vdmVTdWJ2aWV3KHRoaXMpLHRoaXN9Z2V0U3VwZXJ2aWV3KCl7cmV0dXJuIHRoaXMuX3N1cGVydmlld31zZXRTdXBlcnZpZXcoZSl7cmV0dXJuIHRoaXMuX3N1cGVydmlldz1lLHRoaXN9Zm9jdXMoKXtyZXR1cm4gdGhpcy5zZXRGb2N1cyghMCl9Ymx1cigpe3JldHVybiB0aGlzLnNldEZvY3VzKCExKX1zZXRGb2N1cyhlKXtyZXR1cm4gZSE9PXRoaXMuX2ZvY3VzJiYodGhpcy5fZm9jdXM9ZSxlPyh0aGlzLl9zdXBlcnZpZXchPT1udWxsJiZ0aGlzLl9zdXBlcnZpZXcuc3Vidmlld0RpZEZvY3VzKHRoaXMpLHRoaXMuZGlkRm9jdXMoKSk6KHRoaXMuX3N1YnZpZXdzLmZvckVhY2godD0+dC5ibHVyKCkpLHRoaXMuZGlkQmx1cigpKSksdGhpc31oYXNGb2N1cygpe3JldHVybiB0aGlzLl9mb2N1c31zdWJ2aWV3RGlkRm9jdXMoZSl7dGhpcy5oYXNGb2N1cygpP3RoaXMuX3N1YnZpZXdzLmZpbHRlcih0PT50IT09ZSkuZm9yRWFjaCh0PT50LmJsdXIoKSk6dGhpcy5mb2N1cygpfWRpZEZvY3VzKCl7fWRpZEJsdXIoKXt9Z2V0TW9kZWwoKXtyZXR1cm4gdGhpcy5fbW9kZWx9aGFzTW9kZWwoKXtyZXR1cm4gdGhpcy5fbW9kZWwhPT1udWxsfXNldE1vZGVsKGUpe3JldHVybiB0aGlzLl9tb2RlbD1lLHRoaXN9fWNsYXNzIEx0IGV4dGVuZHMgbXtyZW5kZXIoKXtjb25zdCBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5hcHAiKTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy53aW5kb3dEaWRSZXNpemUuYmluZCh0aGlzKSwhMSksZX13aW5kb3dEaWRSZXNpemUoZSl7dGhpcy5sYXlvdXQoKX19Y2xhc3MgSXR7Y29uc3RydWN0b3IoKXt0aGlzLl9pZGVudGlmaWVycz1bXSx0aGlzLl9pbnZva2FibGVzPVtdfWdldElkZW50aWZpZXJzKCl7cmV0dXJuIHRoaXMuX2lkZW50aWZpZXJzfWdldEludm9rYWJsZShlKXtjb25zdCB0PXRoaXMuX2lkZW50aWZpZXJzLmluZGV4T2YoZSk7aWYodD09PS0xKXRocm93IG5ldyBFcnJvcihgSW52b2thYmxlIGZvciAnJHtlfScgaGFzIG5vdCBiZWVuIHJlZ2lzdGVyZWQgeWV0LmApO3JldHVybiB0aGlzLl9pbnZva2FibGVzW3RdfXJlZ2lzdGVyKGUsdCl7aWYodGhpcy5leGlzdHMoZSkpdGhyb3cgbmV3IEVycm9yKGBJbnZva2FibGUgY2FuJ3QgYmUgcmVnaXN0ZXJlZC4gSWRlbnRpZmllciAke2V9IGFscmVhZHkgZXhpc3RzLmApO3JldHVybiB0aGlzLl9pZGVudGlmaWVycy5wdXNoKGUpLHRoaXMuX2ludm9rYWJsZXMucHVzaCh0KSx0aGlzfWV4aXN0cyhlKXtyZXR1cm4gdGhpcy5faWRlbnRpZmllcnMuaW5kZXhPZihlKSE9PS0xfWNyZWF0ZShlLC4uLnQpe2lmKCF0aGlzLmV4aXN0cyhlKSl0aHJvdyBuZXcgRXJyb3IoYENhbid0IGNyZWF0ZSAnJHtlfScsIGludm9rYWJsZSBoYXMgbm90IGJlZW4gcmVnaXN0ZXJlZC5gKTtjb25zdCBpPXRoaXMuX2lkZW50aWZpZXJzLmluZGV4T2YoZSkscz10aGlzLl9pbnZva2FibGVzW2ldO3JldHVybiB0LnNwbGljZSgwLDAscyksbmV3KEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KHMsdCkpfXN0YXRpYyBnZXRJbnN0YW5jZSgpe319bGV0IGplPW51bGw7Y2xhc3MgUmV7Y29uc3RydWN0b3IoZT1udWxsKXt0aGlzLl9zZWVkPWUsdGhpcy5fY3J5cHRvPXR5cGVvZiB3aW5kb3c8InUiJiYod2luZG93LmNyeXB0b3x8d2luZG93Lm1zQ3J5cHRvKXx8bnVsbH1uZXh0KCl7aWYodGhpcy5fY3J5cHRvKXtjb25zdCBlPW5ldyBVaW50MzJBcnJheSgxKTtyZXR1cm4gdGhpcy5fY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhlKSxlLzQyOTQ5NjcyOTZ9cmV0dXJuIE1hdGgucmFuZG9tKCl9bmV4dEZsb2F0KGUsdCl7cmV0dXJuIHRoaXMubmV4dCgpKih0LWUpK2V9bmV4dEludGVnZXIoZSx0KXtyZXR1cm4gTWF0aC5mbG9vcih0aGlzLm5leHQoKSoodC1lKzEpKStlfW5leHRCeXRlcyhlKXtjb25zdCB0PW5ldyBVaW50OEFycmF5KGUpO2lmKHRoaXMuX2NyeXB0byl0aGlzLl9jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKHQpO2Vsc2UgZm9yKGxldCBpPTA7aTxlO2krKyl0W2ldPXRoaXMubmV4dEludGVnZXIoMCwyNTUpO3JldHVybiB0fW5leHRCb29sZWFuKCl7cmV0dXJuIHRoaXMubmV4dCgpPj0uNX1uZXh0Q2hvaWNlKGUpe3JldHVybiBlW3RoaXMubmV4dEludGVnZXIoMCxlLmxlbmd0aC0xKV19c3RhdGljIGdldEluc3RhbmNlKCl7cmV0dXJuIGplPT09bnVsbCYmKGplPW5ldyBSZSksamV9fWNsYXNzIEV7c3RhdGljIGlzRXF1YWwoZSx0KXtpZihlPT09dHx8ZT09PW51bGwmJnQ9PT1udWxsKXJldHVybiEwO2lmKGU9PT1udWxsfHx0PT09bnVsbHx8dHlwZW9mIGUhPXR5cGVvZiB0KXJldHVybiExO2lmKGUgaW5zdGFuY2VvZiBBcnJheSl7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtsZXQgaT0tMSxzPSEwO2Zvcig7cyYmKytpPGUubGVuZ3RoOylzPUUuaXNFcXVhbChlW2ldLHRbaV0pO3JldHVybiBzfWlmKGUgaW5zdGFuY2VvZiBPYmplY3Qpe2lmKHR5cGVvZiBlLmlzRXF1YWxUbz09ImZ1bmN0aW9uIilyZXR1cm4gZS5pc0VxdWFsVG8odCk7aWYodHlwZW9mIHQuaXNFcXVhbFRvPT0iZnVuY3Rpb24iKXJldHVybiB0LmlzRXF1YWxUbyhlKTtjb25zdCBpPUUudW5pcXVlKE9iamVjdC5rZXlzKGUpLmNvbmNhdChPYmplY3Qua2V5cyh0KSkpO2xldCBzPS0xLG49ITA7Zm9yKDtuJiYrK3M8aS5sZW5ndGg7KXtjb25zdCByPWlbc107bj1FLmlzRXF1YWwoZVtyXSx0W3JdKX1yZXR1cm4gbn1yZXR1cm4gZSBpbnN0YW5jZW9mIERhdGU/ZS5nZXRUaW1lKCk9PT10LmdldFRpbWUoKTohMX1zdGF0aWMgaXNVbmlxdWUoZSl7cmV0dXJuIGUuZmluZEluZGV4KCh0LGkpPT5lLmluZGV4T2YodCkhPT1pKT09PS0xfXN0YXRpYyB1bmlxdWUoZSl7cmV0dXJuIGUuZmlsdGVyKCh0LGkpPT5lLmluZGV4T2YodCk9PT1pKX1zdGF0aWMgc2h1ZmZsZShlLHQ9bnVsbCl7dD10fHxSZS5nZXRJbnN0YW5jZSgpO2NvbnN0IGk9ZS5zbGljZSgpO2xldCBzLG47Zm9yKHM9aS5sZW5ndGgtMTtzPjA7cy0tKW49dC5uZXh0SW50ZWdlcigwLHMpLFtpW3NdLGlbbl1dPVtpW25dLGlbc11dO3JldHVybiBpfXN0YXRpYyBjaHVuayhlLHQpe2NvbnN0IGk9TWF0aC5jZWlsKGUubGVuZ3RoL3QpLHM9bmV3IEFycmF5KGkpO2ZvcihsZXQgbj0wO248aTtuKyspc1tuXT1lLnNsaWNlKG4qdCwobisxKSp0KTtyZXR1cm4gc31zdGF0aWMgam9pblNsaWNlcyhlLHQ9W10pe2NvbnN0IGk9ZS5sZW5ndGgscz10Lmxlbmd0aDtsZXQgbj1bXTtmb3IobGV0IHI9MDtyPGk7cisrKXM+MCYmcj4wJiYobj1uLmNvbmNhdCh0KSksbj1uLmNvbmNhdChlW3JdKTtyZXR1cm4gbn1zdGF0aWMgaW5kZXhPZlNsaWNlKGUsdCxpPTApe2lmKHQubGVuZ3RoPT09MClyZXR1cm4tMTtsZXQgcz0tMSxuPWktMTtmb3IoO3M9PT0tMSYmKG49ZS5pbmRleE9mKHRbMF0sbisxKSkhPT0tMTspdGhpcy5pc0VxdWFsKGUuc2xpY2UobixuK3QubGVuZ3RoKSx0KSYmKHM9bik7cmV0dXJuIHN9c3RhdGljIHJlcGxhY2VTbGljZShlLHQsaT1bXSl7bGV0IHM9MCxuPS0xLHI9W107Zm9yKDsobj10aGlzLmluZGV4T2ZTbGljZShlLHQsbisxKSkhPT0tMTspcj1yLmNvbmNhdChlLnNsaWNlKHMsbikpLHI9ci5jb25jYXQoaSkscz1uK3QubGVuZ3RoO3JldHVybiByPXIuY29uY2F0KGUuc2xpY2UocykpLHJ9c3RhdGljIHJlc2l6ZUJpdFNpemVkQXJyYXkoZSx0LGkscz0hMSl7Y29uc3Qgbj1NYXRoLmNlaWwoZS5sZW5ndGgqdC9pKSxyPWk9PT04P25ldyBVaW50OEFycmF5KG4pOm5ldyBBcnJheShuKS5maWxsKDApLGE9KDE8PGkpLTE7bGV0IGwsbyxjLHUsaCxkLGYscDtmb3IobGV0IGI9MDtiPGUubGVuZ3RoO2IrKylmb3IobD1lW2JdLG89Yip0LGM9KGIrMSkqdCx1PU1hdGguZmxvb3Ioby9pKSxoPU1hdGguZmxvb3IoYy9pKSxkPWktYyVpLHJbaF18PWw8PGQmYSxmPWw+PmktZCxwPWg7LS1wPj11JiZmPjA7KXJbcF18PWYmYSxmPWY+Pmk7aWYocyl7bGV0IGI9ci5sZW5ndGgtMTtmb3IoO3JbYl09PT0wOyliLS07cmV0dXJuIHIuc2xpY2UoMCxiKzEpfXJldHVybiByfX1sZXQgenQ9MDtjbGFzcyBMe3N0YXRpYyBjYW1lbENhc2VUb1JlZ3VsYXIoZSl7cmV0dXJuIGUucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywiJDEgJDIiKS5yZXBsYWNlKC9cYihbQS1aXSspKFtBLVpdKShbYS16XSkvLCIkMSAkMiQzIikucmVwbGFjZSgvXi4vLHQ9PnQudG9VcHBlckNhc2UoKSl9c3RhdGljIHVuaXF1ZUlkKCl7cmV0dXJuInUiKygrK3p0KS50b1N0cmluZygxNil9c3RhdGljIGNodW5rKGUsdCl7cmV0dXJuIGUhPT0iIj9lLm1hdGNoKG5ldyBSZWdFeHAoYC57MSwke3R9fWAsImciKSk6W119c3RhdGljIGlzV2hpdGVzcGFjZShlLHQ9MCl7Y29uc3QgaT1lW3RdO3JldHVybiBpP2kubWF0Y2goL1xzLykhPT1udWxsOiExfXN0YXRpYyByZW1vdmVXaGl0ZXNwYWNlcyhlKXtyZXR1cm4gdGhpcy5yZXBsYWNlV2hpdGVzcGFjZXMoZSwiIiwhMCl9c3RhdGljIG5vcm1hbGl6ZVdoaXRlc3BhY2VzKGUsdD0hMSl7cmV0dXJuIHRoaXMucmVwbGFjZVdoaXRlc3BhY2VzKGUsIiAiLHQpfXN0YXRpYyByZXBsYWNlV2hpdGVzcGFjZXMoZSx0LGk9ITEpe3JldHVybiBpP2UucmVwbGFjZSgvXHMrL2csdCk6ZS5yZXBsYWNlKC9ccy9nLHQpfX1jbGFzcyBBdCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLHRoaXMubmFtZT10aGlzLmNvbnN0cnVjdG9yLm5hbWUsdHlwZW9mIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlPT0iZnVuY3Rpb24iP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcik6dGhpcy5zdGFjaz1uZXcgRXJyb3IoZSkuc3RhY2t9fWNsYXNzIHggZXh0ZW5kcyBBdHt9Y2xhc3MgaGUgZXh0ZW5kcyB4e2NvbnN0cnVjdG9yKGUsdD1udWxsKXtzdXBlcihlKSx0aGlzLmluZGV4PXR9fWNvbnN0IGh0PXthbHBoYWJldDoiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIscGFkZGluZzoiPSIscGFkZGluZ09wdGlvbmFsOiExLGZvcmVpZ25DaGFyYWN0ZXJzOiExLG1heExpbmVMZW5ndGg6bnVsbCxsaW5lU2VwYXJhdG9yOmBccgpgfTtjbGFzcyBEe3N0YXRpYyBoZXhTdHJpbmdGcm9tQnl0ZXMoZSl7cmV0dXJuIEFycmF5LmZyb20oZSkubWFwKHQ9PigiMCIrdC50b1N0cmluZygxNikpLnNsaWNlKC0yKSkuam9pbigiIil9c3RhdGljIGJ5dGVzRnJvbUhleFN0cmluZyhlKXtlPUwucmVtb3ZlV2hpdGVzcGFjZXMoZSksZS5sZW5ndGglMj09PTEmJihlPWUrIjAiKTtjb25zdCB0PUwuY2h1bmsoZSwyKS5tYXAoKGkscyk9Pntjb25zdCBuPXBhcnNlSW50KGksMTYpO2lmKGkubWF0Y2goL1swLTlhLWZdezJ9L2kpPT09bnVsbHx8aXNOYU4obikpdGhyb3cgbmV3IGhlKGBJbnZhbGlkIGhleCBlbmNvZGVkIGJ5dGUgJyR7aX0nYCk7cmV0dXJuIG59KTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkodCl9c3RhdGljIGJpbmFyeVN0cmluZ0Zyb21CeXRlcyhlKXtyZXR1cm4gQXJyYXkuZnJvbShlKS5tYXAodD0+KCIwMDAwMDAwIit0LnRvU3RyaW5nKDIpKS5zbGljZSgtOCkpLmpvaW4oIiIpfXN0YXRpYyBieXRlc0Zyb21CaW5hcnlTdHJpbmcoZSl7ZT1MLnJlbW92ZVdoaXRlc3BhY2VzKGUpLGUubGVuZ3RoJTg+MCYmKGU9ZS5wYWRFbmQoZS5sZW5ndGgtZS5sZW5ndGglOCs4LCIwIikpO2NvbnN0IHQ9TC5jaHVuayhlLDgpLm1hcCgoaSxzKT0+e2NvbnN0IG49cGFyc2VJbnQoaSwyKTtpZihpLm1hdGNoKC9bMC0xXXs4fS8pPT09bnVsbHx8aXNOYU4obikpdGhyb3cgbmV3IGhlKGBJbnZhbGlkIGJpbmFyeSBlbmNvZGVkIGJ5dGUgJyR7aX0nYCk7cmV0dXJuIG59KTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkodCl9c3RhdGljIGJhc2U2NFN0cmluZ0Zyb21CeXRlcyhlLHQ9e30pe2NvbnN0e2FscGhhYmV0OmkscGFkZGluZzpzLHBhZGRpbmdPcHRpb25hbDpuLG1heExpbmVMZW5ndGg6cixsaW5lU2VwYXJhdG9yOmF9PU9iamVjdC5hc3NpZ24oe30saHQsdCksbD0hbiYmcz9zOiIiO2xldCBvPSIiLGMsdSxoLGQsZixwLGI7Zm9yKGxldCBfPTA7XzxlLmxlbmd0aDtfKz0zKWM9ZVtfXSx1PV8rMTxlLmxlbmd0aD9lW18rMV06TmFOLGg9XysyPGUubGVuZ3RoP2VbXysyXTpOYU4sZD1jPj4yLGY9KGMmMyk8PDR8dT4+NCxwPSh1JjE1KTw8MnxoPj42LGI9aCY2MyxvKz1pW2RdK2lbZl0rKGlzTmFOKHUpP2w6aVtwXSkrKGlzTmFOKGgpP2w6aVtiXSk7aWYocil7bGV0IF89IiI7Zm9yKGxldCBTPTA7UzxvLmxlbmd0aDtTKz1yKV8rPShfIT09IiI/YToiIikrby5zdWJzdHIoUyxyKTtvPV99cmV0dXJuIG99c3RhdGljIGJ5dGVzRnJvbUJhc2U2NFN0cmluZyhlLHQ9e30pe2NvbnN0e2FscGhhYmV0OmkscGFkZGluZzpzLGZvcmVpZ25DaGFyYWN0ZXJzOm4sbWF4TGluZUxlbmd0aDpyLGxpbmVTZXBhcmF0b3I6YX09T2JqZWN0LmFzc2lnbih7fSxodCx0KSxsPWUubGVuZ3RoLG89W107bGV0IGMsdSxoPS0xO2Zvcig7KytoPGw7KWlmKGM9ZVtoXSxyIT09bnVsbCYmYSYmYz09PWFbMF0mJmUuc3Vic3RyKGgsYS5sZW5ndGgpPT09YSloPWgrYS5sZW5ndGgtMTtlbHNlIGlmKGMhPT1zKXtpZih1PWkuaW5kZXhPZihjKSx1IT09LTEpby5wdXNoKHUpO2Vsc2UgaWYoIW4pdGhyb3cgbmV3IGhlKGBGb3JiaWRkZW4gY2hhcmFjdGVyICcke2N9JyBhdCBpbmRleCAke2h9YCl9Y29uc3QgZD0oNC1vLmxlbmd0aCU0KSU0O2lmKGQ9PT0zKXRocm93IG5ldyBoZSgiQSBzaW5nbGUgcmVtYWluaW5nIGVuY29kZWQgY2hhcmFjdGVyIGluIHRoZSBsYXN0IHF1YWRydXBsZSBvciBhIHBhZGRpbmcgb2YgMyBjaGFyYWN0ZXJzIGlzIG5vdCBhbGxvd2VkIik7Zm9yKGg9MDtoPGQ7aCsrKW8ucHVzaCgwKTtjb25zdCBmPW8ubGVuZ3RoLzQqMyxwPW5ldyBVaW50OEFycmF5KGYpO2xldCBiO2ZvcihoPTA7aDxvLmxlbmd0aDtoKz00KWI9aC80KjMscFtiXT1vW2hdPDwyfG9baCsxXT4+NCxwW2IrMV09KG9baCsxXSYxNSk8PDR8b1toKzJdPj4yLHBbYisyXT0ob1toKzJdJjMpPDw2fG9baCszXTtyZXR1cm4gcC5zbGljZSgwLGYtZCl9fWNsYXNzIGVlIGV4dGVuZHMgeHtjb25zdHJ1Y3RvcihlLHQ9bnVsbCl7c3VwZXIoZSksdGhpcy5ieXRlSW5kZXg9dH19Y2xhc3MgRntzdGF0aWMgdmFsaWRhdGVDb2RlUG9pbnQoZSl7cmV0dXJuIGlzRmluaXRlKGUpJiZlPj0wJiZlPD0xMTE0MTExJiZNYXRoLmZsb29yKGUpPT09ZX1zdGF0aWMgdmFsaWRhdGVDb2RlUG9pbnRzKGUpe2xldCB0PSEwLGk9MDtmb3IoO3QmJmk8ZS5sZW5ndGg7KXQ9Ri52YWxpZGF0ZUNvZGVQb2ludChlW2ldKSxpKys7cmV0dXJuIHR9c3RhdGljIHN0cmluZ0Zyb21Db2RlUG9pbnRzKGUpe2NvbnN0IHQ9bmV3IEFycmF5KGUubGVuZ3RoKjIpO2xldCBpPTAscyxuO2ZvcihzPTA7czxlLmxlbmd0aDtzKyspbj1lW3NdLG48NjU1MzY/dFtpKytdPVN0cmluZy5mcm9tQ2hhckNvZGUobik6KG4tPTY1NTM2LHRbaSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKChuPj4xMCkrNTUyOTYpLHRbaSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKG4lMTAyNCs1NjMyMCkpO3JldHVybiB0LnNsaWNlKDAsaSkuam9pbigiIil9c3RhdGljIGNvZGVQb2ludHNGcm9tU3RyaW5nKGUpe2NvbnN0IHQ9ZS5sZW5ndGgsaT1uZXcgQXJyYXkodCk7bGV0IHMsbixyPTAsYT0wO2Zvcig7YTx0OylzPWUuY2hhckNvZGVBdChhKyspLHM+PTU1Mjk2JiZzPD01NjMxOSYmYTx0PyhuPWUuY2hhckNvZGVBdChhKyspLChuJjY0NTEyKT09PTU2MzIwP2lbcisrXT0oKHMmMTAyMyk8PDEwKSsobiYxMDIzKSs2NTUzNjooaVtyKytdPXMsYS0tKSk6aVtyKytdPXM7cmV0dXJuIGkuc2xpY2UoMCxyKX1zdGF0aWMgYnl0ZXNGcm9tQ29kZVBvaW50cyhlLHQ9InV0ZjgiKXtzd2l0Y2godCl7Y2FzZSJ1dGY4IjpyZXR1cm4gRi5fZW5jb2RlQ29kZVBvaW50c1RvVVRGOEJ5dGVzKGUpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBFbmNvZGluZyB0byAnJHt0fScgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQuYCl9fXN0YXRpYyBjb2RlUG9pbnRzRnJvbUJ5dGVzKGUsdD0idXRmOCIpe3N3aXRjaCh0KXtjYXNlInV0ZjgiOnJldHVybiBGLl9kZWNvZGVDb2RlUG9pbnRzRnJvbVVURjhCeXRlcyhlKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgRGVjb2RpbmcgZnJvbSAnJHt0fScgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQuYCl9fXN0YXRpYyBfZW5jb2RlQ29kZVBvaW50c1RvVVRGOEJ5dGVzKGUpe2NvbnN0IHQ9bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgqNCk7bGV0IGk9MCxzLG47Zm9yKHM9MDtzPGUubGVuZ3RoO3MrKyluPWVbc10sbjw9MTI3P3RbaSsrXT1uOm48PTIwNDc/KHRbaSsrXT0xOTJ8bj4+Nix0W2krK109MTI4fG4mNjMpOm48PTY1NTM1Pyh0W2krK109MjI0fG4+PjEyLHRbaSsrXT0xMjh8KG4mNDA5NSk+PjYsdFtpKytdPTEyOHxuJjYzKToodFtpKytdPTI0MHxuPj4xOCx0W2krK109MTI4fChuJjI2MjE0Myk+PjEyLHRbaSsrXT0xMjh8KG4mNDA5NSk+PjYsdFtpKytdPTEyOHxuJjYzKTtyZXR1cm4gdC5zbGljZSgwLGkpfXN0YXRpYyBfZGVjb2RlQ29kZVBvaW50c0Zyb21VVEY4Qnl0ZXMoZSl7Y29uc3QgdD1lLmxlbmd0aCxpPW5ldyBBcnJheSh0KTtsZXQgcz0wLG49LTEscj0wLGEsbDtmb3IoOysrbjx0OylpZihhPWVbbl0sYT4xMjcmJmE8PTE5MSl7aWYoLS1zPDApdGhyb3cgbmV3IGVlKGBJbnZhbGlkIFVURi04IGVuY29kZWQgdGV4dDogVW5leHBlY3RlZCBjb250aW51YXRpb24gYnl0ZSBhdCAweCR7bi50b1N0cmluZygxNil9YCxuKTtsPWw8PDZ8YSY2MyxzPT09MCYmKGlbcisrXT1sKX1lbHNle2lmKHM+MCl0aHJvdyBuZXcgZWUoYEludmFsaWQgVVRGLTggZW5jb2RlZCB0ZXh0OiBDb250aW51YXRpb24gYnl0ZSBleHBlY3RlZCBhdCAweCR7bi50b1N0cmluZygxNil9YCxuKTtpZihhPD0xMjcpaVtyKytdPWE7ZWxzZSBpZihhPD0yMjMpbD1hJjMxLHM9MTtlbHNlIGlmKGE8PTIzOSlsPWEmMTUscz0yO2Vsc2UgaWYoYTw9MjQ3KWw9YSY3LHM9MztlbHNlIHRocm93IG5ldyBlZShgSW52YWxpZCBVVEYtOCBlbmNvZGVkIHRleHQ6IEludmFsaWQgYnl0ZSAke2F9IGF0IDB4JHtuLnRvU3RyaW5nKDE2KX1gLG4pfWlmKHMhPT0wKXRocm93IG5ldyBlZSgiSW52YWxpZCBVVEYtOCBlbmNvZGVkIHRleHQ6IFVuZXhwZWN0ZWQgZW5kIG9mIGJ5dGVzIik7cmV0dXJuIGkuc2xpY2UoMCxyKX19bGV0IHVlPW51bGw7Y2xhc3MgeXtjb25zdHJ1Y3RvcihlPW51bGwsdD0idXRmOCIpe2lmKHRoaXMuX2NvZGVQb2ludHM9bnVsbCx0aGlzLl9zdHJpbmc9bnVsbCx0aGlzLl9ieXRlcz1udWxsLHRoaXMuX2VuY29kaW5nPXQsZT09PW51bGwpdGhpcy5fY29kZVBvaW50cz1bXSx0aGlzLl9zdHJpbmc9IiIsdGhpcy5fYnl0ZXM9bmV3IFVpbnQ4QXJyYXkoMCk7ZWxzZXtjb25zdCBpPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKTtzd2l0Y2goaSl7Y2FzZSJbb2JqZWN0IEFycmF5XSI6aWYoIUYudmFsaWRhdGVDb2RlUG9pbnRzKGUpKXRocm93IG5ldyBFcnJvcigiQ2hhaW4gY29uc3RydWN0b3IgZXhwZWN0cyBhIHZhbGlkIGFycmF5IG9mIGNvZGUgcG9pbnRzLiIpO3RoaXMuX2NvZGVQb2ludHM9ZTticmVhaztjYXNlIltvYmplY3QgU3RyaW5nXSI6dGhpcy5fc3RyaW5nPWU7YnJlYWs7Y2FzZSJbb2JqZWN0IFVpbnQ4QXJyYXldIjp0aGlzLl9ieXRlcz1lO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBDaGFpbiBjb25zdHJ1Y3RvciBleHBlY3RzIG9uZSBvcHRpb25hbCBwYXJhbWV0ZXIgb2YgdHlwZSBBcnJheSwgU3RyaW5nIG9yIFVpbnQ4QXJyYXkuIFJlY2VpdmVkIHVuZXhwZWN0ZWQgJHtpfS5gKX19fWdldENvZGVQb2ludHMoKXtyZXR1cm4gdGhpcy5fY29kZVBvaW50cz09PW51bGwmJih0aGlzLl9zdHJpbmchPT1udWxsP3RoaXMuX2NvZGVQb2ludHM9Ri5jb2RlUG9pbnRzRnJvbVN0cmluZyh0aGlzLl9zdHJpbmcpOnRoaXMuX2NvZGVQb2ludHM9Ri5jb2RlUG9pbnRzRnJvbUJ5dGVzKHRoaXMuX2J5dGVzLHRoaXMuX2VuY29kaW5nKSksdGhpcy5fY29kZVBvaW50c31nZXRDaGFycygpe3JldHVybiB0aGlzLmdldENvZGVQb2ludHMoKS5tYXAoZT0+Ri5zdHJpbmdGcm9tQ29kZVBvaW50cyhbZV0pKX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiB0aGlzLmdldENvZGVQb2ludHMoKS52YWx1ZXN9Z2V0Q29kZVBvaW50QXQoZSl7cmV0dXJuIHRoaXMuZ2V0Q29kZVBvaW50cygpW2VdfWdldENoYXJBdChlKXtyZXR1cm4gRi5zdHJpbmdGcm9tQ29kZVBvaW50cyhbdGhpcy5nZXRDb2RlUG9pbnRBdChlKV0pfWdldENoYXJCeXRlc0F0KGUpe3JldHVybiBGLmJ5dGVzRnJvbUNvZGVQb2ludHMoW3RoaXMuZ2V0Q29kZVBvaW50QXQoZSldKX1nZXRMZW5ndGgoKXtyZXR1cm4gdGhpcy5nZXRDb2RlUG9pbnRzKCkubGVuZ3RofWdldFN0cmluZygpe3JldHVybiB0aGlzLl9zdHJpbmc9PT1udWxsJiYodGhpcy5fc3RyaW5nPUYuc3RyaW5nRnJvbUNvZGVQb2ludHModGhpcy5nZXRDb2RlUG9pbnRzKCkpKSx0aGlzLl9zdHJpbmd9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5nZXRTdHJpbmcoKX10b0xvd2VyQ2FzZSgpe3JldHVybiB5LndyYXAodGhpcy5nZXRTdHJpbmcoKS50b0xvd2VyQ2FzZSgpLHRoaXMuX2VuY29kaW5nKX10b1VwcGVyQ2FzZSgpe3JldHVybiB5LndyYXAodGhpcy5nZXRTdHJpbmcoKS50b1VwcGVyQ2FzZSgpLHRoaXMuX2VuY29kaW5nKX1zcGxpdChlPXZvaWQgMCx0PXZvaWQgMCl7cmV0dXJuIGU9ZSBpbnN0YW5jZW9mIHk/ZS50b1N0cmluZygpOmUsdGhpcy5nZXRTdHJpbmcoKS5zcGxpdChlLHQpLm1hcChpPT55LndyYXAoaSx0aGlzLl9lbmNvZGluZykpfXN1YnN0cihlLHQ9dm9pZCAwKXtpZih0PD0wfHxlPj10aGlzLmdldExlbmd0aCgpKXJldHVybiB5LmVtcHR5KCk7ZTwwJiYoZT1NYXRoLm1heCh0aGlzLmdldExlbmd0aCgpK2UsMCkpO2NvbnN0IGk9dGhpcy5nZXRDb2RlUG9pbnRzKCkuc2xpY2UoZSx0P2UrdDp2b2lkIDApO3JldHVybiB5LndyYXAoaSx0aGlzLl9lbmNvZGluZyl9dHJ1bmNhdGUoZSl7cmV0dXJuIHRoaXMuZ2V0TGVuZ3RoKCk+ZT95LndyYXAodGhpcy5zdWJzdHIoMCxlKS5nZXRTdHJpbmcoKSsi4oCmIix0aGlzLl9lbmNvZGluZyk6dGhpc31leHRlbmQoZSl7Y29uc3QgdD10aGlzLmdldENvZGVQb2ludHMoKSxpPXkud3JhcChlKS5nZXRDb2RlUG9pbnRzKCkscz10LnNsaWNlKCk7bGV0IG4scj0wO2Zvcig7cy5sZW5ndGg8aS5sZW5ndGgmJnI8aS5sZW5ndGg7KW49aVtyKytdLHQuaW5kZXhPZihuKT09PS0xJiZzLnB1c2gobik7cmV0dXJuIHkud3JhcChzKX1tYXRjaChlKXtyZXR1cm4gdGhpcy5nZXRTdHJpbmcoKS5tYXRjaChlKX1nZXREZXNjcmlwdGlvbigpe3JldHVybiB0aGlzLl9zdHJpbmchPT1udWxsP2BTdHJpbmcoJHt0aGlzLl9zdHJpbmd9KWA6dGhpcy5fY29kZVBvaW50cyE9PW51bGw/YENvZGVQb2ludHMoJHt0aGlzLl9jb2RlUG9pbnRzLmpvaW4oIiwgIil9KWA6YEJ5dGVzKCR7RC5oZXhTdHJpbmdGcm9tQnl0ZXModGhpcy5fYnl0ZXMpfSlgfWNvbnRhaW5zKGUpe3JldHVybiB0aGlzLmdldFN0cmluZygpLmluZGV4T2YoZS50b1N0cmluZygpKSE9PS0xfWluZGV4T2ZDb2RlUG9pbnQoZSx0PXZvaWQgMCl7cmV0dXJuIHRoaXMuZ2V0Q29kZVBvaW50cygpLmluZGV4T2YoZSx0KX1pbmRleE9mKGUsdD12b2lkIDApe2NvbnN0IGk9dGhpcy5nZXRTdHJpbmcoKSxzPWkuaW5kZXhPZihlLnRvU3RyaW5nKCksdCk7aWYocz09PS0xKXJldHVybi0xO3tjb25zdCBuPWkuc3Vic3RyKDAscyk7cmV0dXJuIEYuY29kZVBvaW50c0Zyb21TdHJpbmcobikubGVuZ3RofX1nZXRCeXRlcygpe3JldHVybiB0aGlzLl9ieXRlcz09PW51bGwmJih0aGlzLl9ieXRlcz1GLmJ5dGVzRnJvbUNvZGVQb2ludHModGhpcy5nZXRDb2RlUG9pbnRzKCksdGhpcy5fZW5jb2RpbmcpKSx0aGlzLl9ieXRlc31nZXRCeXRlQXQoZSl7cmV0dXJuIHRoaXMuZ2V0Qnl0ZXMoKVtlXX1nZXRTaXplKCl7cmV0dXJuIHRoaXMuZ2V0Qnl0ZXMoKS5sZW5ndGh9bmVlZHNUZXh0RW5jb2RpbmcoKXtyZXR1cm4gdGhpcy5fY29kZVBvaW50cz09PW51bGwmJnRoaXMuX3N0cmluZz09PW51bGx9bmVlZHNCeXRlRW5jb2RpbmcoKXtyZXR1cm4gdGhpcy5fYnl0ZXM9PT1udWxsfWlzRW1wdHkoKXtyZXR1cm4gdGhpcz09PXVlfHx0aGlzLl9jb2RlUG9pbnRzIT09bnVsbCYmdGhpcy5fY29kZVBvaW50cy5sZW5ndGg9PT0wfHx0aGlzLl9zdHJpbmchPT1udWxsJiZ0aGlzLl9zdHJpbmc9PT0iInx8dGhpcy5fYnl0ZXMhPT1udWxsJiZ0aGlzLl9ieXRlcy5sZW5ndGg9PT0wfWlzRXF1YWxUbyhlKXtpZihlPT09dGhpcylyZXR1cm4hMDtpZighKGUgaW5zdGFuY2VvZiB5KSlyZXR1cm4hMTtpZih0aGlzLmlzRW1wdHkoKSYmZS5pc0VtcHR5KCkpcmV0dXJuITA7aWYoZS5nZXRFbmNvZGluZygpIT09dGhpcy5fZW5jb2RpbmcpcmV0dXJuITE7aWYodGhpcy5fc3RyaW5nIT09bnVsbCYmdGhpcy5fc3RyaW5nPT09ZS5fc3RyaW5nKXJldHVybiEwO2lmKHRoaXMuX2J5dGVzIT09bnVsbCYmZS5fYnl0ZXMhPT1udWxsKXJldHVybiBFLmlzRXF1YWwodGhpcy5fYnl0ZXMsZS5fYnl0ZXMpO3RyeXtyZXR1cm4gRS5pc0VxdWFsKHRoaXMuZ2V0Q29kZVBvaW50cygpLGUuZ2V0Q29kZVBvaW50cygpKX1jYXRjaCh0KXtpZih0IGluc3RhbmNlb2YgZWUpcmV0dXJuITE7dGhyb3cgdH19Z2V0RW5jb2RpbmcoKXtyZXR1cm4gdGhpcy5fZW5jb2Rpbmd9c3RhdGljIGlzRXF1YWwoLi4uZSl7aWYoZS5sZW5ndGg8MilyZXR1cm4hMDtjb25zdCB0PWVbMF07aWYoISh0IGluc3RhbmNlb2YgeSkpcmV0dXJuITE7bGV0IGk9ITAscz0wO2Zvcig7aSYmKytzPGUubGVuZ3RoOylpPXQuaXNFcXVhbFRvKGVbc10pO3JldHVybiBpfXN0YXRpYyB3cmFwKGUsdD0idXRmOCIpe3JldHVybiBlIGluc3RhbmNlb2YgeT9lOmU9PT1udWxsfHxlLmxlbmd0aD09PTA/eS5lbXB0eSgpOm5ldyB5KGUsdCl9c3RhdGljIGpvaW4oZSx0PXZvaWQgMCl7cmV0dXJuIHkud3JhcChlLm1hcChpPT5pLnRvU3RyaW5nKCkpLmpvaW4odCkpfXN0YXRpYyBlbXB0eSgpe3JldHVybiB1ZT09PW51bGwmJih1ZT1uZXcgeSksdWV9fWNsYXNzIEggZXh0ZW5kcyBte2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl8kbWVzc2FnZT1udWxsLHRoaXMuX21lc3NhZ2U9bnVsbCx0aGlzLl9pZD1MLnVuaXF1ZUlkKCksdGhpcy5fZmlyc3Q9ITF9aXNGaXJzdCgpe3JldHVybiB0aGlzLl9maXJzdH1zZXRGaXJzdChlKXtyZXR1cm4gdGhpcy5fZmlyc3QhPT1lJiYodGhpcy5fZmlyc3Q9ZSxlP3RoaXMuZ2V0RWxlbWVudCgpLmNsYXNzTGlzdC5hZGQoImZpZWxkLS1maXJzdCIpOnRoaXMuZ2V0RWxlbWVudCgpLmNsYXNzTGlzdC5yZW1vdmUoImZpZWxkLS1maXJzdCIpKSx0aGlzfWdldE1lc3NhZ2UoKXtyZXR1cm4gdGhpcy5fbWVzc2FnZX1zZXRNZXNzYWdlKGUpe3JldHVybiB0aGlzLl9tZXNzYWdlPWUsdGhpcy51cGRhdGUoKX1jbGVhck1lc3NhZ2UoKXtyZXR1cm4gdGhpcy5zZXRNZXNzYWdlKG51bGwpfWdldElkKCl7cmV0dXJuIHRoaXMuX2lkfXJlbmRlcigpe3JldHVybiBtLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToiZmllbGQiKyh0aGlzLl9maXJzdD8iIGZpZWxkLS1maXJzdCI6IiIpfSxbdGhpcy5yZW5kZXJMYWJlbCgpLHRoaXMucmVuZGVyRmllbGQoKV0pfXJlbmRlckxhYmVsKCl7cmV0dXJuIG0uY3JlYXRlRWxlbWVudCgibGFiZWwiLHtjbGFzc05hbWU6ImZpZWxkX19sYWJlbCIsaHRtbEZvcjp0aGlzLmdldElkKCl9LHRoaXMuZ2V0TW9kZWwoKS5nZXRMYWJlbCgpKX1yZW5kZXJGaWVsZCgpe3JldHVybiBtLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToiZmllbGRfX2ZpZWxkIn0pfXJlbmRlck1lc3NhZ2UoKXtyZXR1cm4gdGhpcy5nZXRNZXNzYWdlKCkhPT1udWxsP20uY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJmaWVsZF9fbWVzc2FnZSJ9LHRoaXMuZ2V0TWVzc2FnZSgpKTpudWxsfWRpZFJlbmRlcigpe3N1cGVyLmRpZFJlbmRlcigpLHRoaXMudXBkYXRlVmFsdWUoKX11cGRhdGUoKXtjb25zdCBlPXRoaXMuZ2V0RWxlbWVudCgpO3JldHVybiBlLmRhdGFzZXQud2lkdGg9dGhpcy5nZXRNb2RlbCgpLmdldFdpZHRoKCksdGhpcy5oYXNGb2N1cygpP2UuY2xhc3NMaXN0LmFkZCgiZmllbGQtLWZvY3VzIik6ZS5jbGFzc0xpc3QucmVtb3ZlKCJmaWVsZC0tZm9jdXMiKSwhdGhpcy5nZXRNb2RlbCgpLmlzVmFsaWQoKXx8dGhpcy5nZXRNZXNzYWdlKCkhPT1udWxsP2UuY2xhc3NMaXN0LmFkZCgiZmllbGQtLWludmFsaWQiKTplLmNsYXNzTGlzdC5yZW1vdmUoImZpZWxkLS1pbnZhbGlkIiksdGhpcy5fJG1lc3NhZ2UhPT1udWxsJiZ0aGlzLl8kbWVzc2FnZS5wYXJlbnROb2RlIT09bnVsbCYmdGhpcy5fJG1lc3NhZ2UucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl8kbWVzc2FnZSksdGhpcy5fJG1lc3NhZ2U9bnVsbCx0aGlzLl8kbWVzc2FnZT10aGlzLnJlbmRlck1lc3NhZ2UoKSx0aGlzLl8kbWVzc2FnZSE9PW51bGwmJnRoaXMuZ2V0RWxlbWVudCgpLmFwcGVuZENoaWxkKHRoaXMuXyRtZXNzYWdlKSx0aGlzfWRpZEZvY3VzKCl7dGhpcy5nZXRFbGVtZW50KCkuY2xhc3NMaXN0LmFkZCgiZmllbGQtLWZvY3VzIil9ZGlkQmx1cigpe3RoaXMuZ2V0RWxlbWVudCgpLmNsYXNzTGlzdC5yZW1vdmUoImZpZWxkLS1mb2N1cyIpfXVwZGF0ZVZhbHVlKCl7cmV0dXJuIHRoaXN9fWNsYXNzIGt0IGV4dGVuZHMgbXtyZW5kZXIoKXtyZXR1cm4gbS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ImZvcm0ifSl9YXBwZW5kU3Vidmlld0VsZW1lbnQoZSl7aWYoZSBpbnN0YW5jZW9mIEgpe3RoaXMuZ2V0RWxlbWVudCgpO2NvbnN0IHQ9dGhpcy5nZXRTdWJ2aWV3cygpLmZpbHRlcihhPT5hIGluc3RhbmNlb2YgSCk7dC5wdXNoKGUpO2NvbnN0IGk9dGhpcy5nZXRNb2RlbCgpLmdldEZpZWxkcygpO3Quc29ydCgoYSxsKT0+aS5pbmRleE9mKGEuZ2V0TW9kZWwoKSktaS5pbmRleE9mKGwuZ2V0TW9kZWwoKSkpO2NvbnN0IHM9dC5pbmRleE9mKGUpLG49czx0Lmxlbmd0aC0xP3RbcysxXS5nZXRFbGVtZW50KCk6bnVsbDt0aGlzLmdldEVsZW1lbnQoKS5pbnNlcnRCZWZvcmUoZS5nZXRFbGVtZW50KCksbik7bGV0IHI9MDtyZXR1cm4gdC5mb3JFYWNoKGE9Pntjb25zdCBsPWEuZ2V0TW9kZWwoKS5nZXRXaWR0aCgpO3IrPWwscj09PWx8fHI+MTI/KHI9bCxhLnNldEZpcnN0KCEwKSk6YS5zZXRGaXJzdCghMSl9KSx0aGlzfXJldHVybiBzdXBlci5hcHBlbmRTdWJ2aWV3RWxlbWVudChlKX19Y29uc3QgdXQ9Jzxzdmcgdmlld0JveD0iMCAwIDE2IDE2Ij48cG9seWdvbiBwb2ludHM9IjE2IDcgMy44MyA3IDcuNDEgMy40MSA2IDIgMCA4IDYgMTQgNy40MSAxMi41OSAzLjgzIDkgMTYgOSIvPjwvc3ZnPicsVHQ9Jzxzdmcgdmlld0JveD0iMCAwIDE2IDE2Ij48cG9seWdvbiBwb2ludHM9IjMgNiA4IDExIDEzIDYiLz48L3N2Zz4nLFB0PSc8c3ZnIHZpZXdCb3g9IjAgMCAxNiAxNiI+PHBvbHlnb24gcG9pbnRzPSIxNSAyLjQxIDEzLjU5IDEgOCA2LjU5IDIuNDEgMSAxIDIuNDEgNi41OSA4IDEgMTMuNTkgMi40MSAxNSA4IDkuNDEgMTMuNTkgMTUgMTUgMTMuNTkgOS40MSA4Ii8+PC9zdmc+JyxGdD0nPHN2ZyB2aWV3Qm94PSIwIDAgMTYgMTYiIGZpbGw9IiMwMDAiIHRpdGxlPSJNZW51Ij48Y2lyY2xlIGN4PSI4IiBjeT0iMiIgcj0iMS41Ii8+PGNpcmNsZSBjeD0iOCIgY3k9IjgiIHI9IjEuNSIvPjxjaXJjbGUgY3g9IjgiIGN5PSIxNCIgcj0iMS41Ii8+PC9zdmc+JyxEdD17Zm9yd2FyZDp1dCxiYWNrd2FyZDp1dCxlcnJvcjpQdH07Y2xhc3MgYWUgZXh0ZW5kcyBte2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl8kbWVudT1udWxsLHRoaXMuXyRib2R5PW51bGwsdGhpcy5fJHNldHRpbmdzPW51bGwsdGhpcy5fJGhlYWRlcj1udWxsLHRoaXMuXyRzdGF0dXM9bnVsbCx0aGlzLl8kc3RhdHVzSWNvbj1udWxsLHRoaXMuXyRzdGF0dXNNZXNzYWdlPW51bGwsdGhpcy5fbWVudVZpc2libGU9ITEsdGhpcy5fbWVudUhpZGVIYW5kbGVyPXRoaXMudG9nZ2xlTWVudS5iaW5kKHRoaXMpfXJlbmRlcigpe3RoaXMuXyRzZXR0aW5ncz10aGlzLnJlbmRlclNldHRpbmdzKCksdGhpcy5fJGhlYWRlcj10aGlzLnJlbmRlckhlYWRlcigpO2NvbnN0IGU9dGhpcy5nZXRNb2RlbCgpLmdldE1ldGEoKTtyZXR1cm4gbS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ImJyaWNrIixyb2xlOiJyZWdpb24iLGFyaWFMYWJlbDpgJHtlLnRpdGxlfSAke2UudHlwZX1gfSxbdGhpcy5fJGhlYWRlcix0aGlzLl8kc2V0dGluZ3MsdGhpcy5yZW5kZXJDb250ZW50KCksdGhpcy5yZW5kZXJTdGF0dXMoKV0pfXJlbmRlckhlYWRlcigpe3RoaXMuXyRtZW51PXRoaXMucmVuZGVyTWVudSgpO2NvbnN0IGU9bS5jcmVhdGVFbGVtZW50KCJidXR0b24iLHtjbGFzc05hbWU6ImJyaWNrX19idG4tbWVudSIsb25DbGljazppPT57aS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMudG9nZ2xlTWVudSgpfX0pO2UuaW5uZXJIVE1MPUZ0O2NvbnN0IHQ9bS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ImJyaWNrX190aXRsZS1jYXJldCJ9KTtyZXR1cm4gdC5pbm5lckhUTUw9VHQsbS5jcmVhdGVFbGVtZW50KCJoZWFkZXIiLHtjbGFzc05hbWU6ImJyaWNrX19oZWFkZXIifSxbbS5jcmVhdGVFbGVtZW50KCJidXR0b24iLHtjbGFzc05hbWU6ImJyaWNrX190aXRsZSIsb25DbGljazppPT57aS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuZ2V0TW9kZWwoKS52aWV3UmVwbGFjZUJ1dHRvbkRpZENsaWNrKHRoaXMpfX0sW20uY3JlYXRlRWxlbWVudCgiaDMiLHtjbGFzc05hbWU6ImJyaWNrX190aXRsZS1pbm5lciJ9LHRoaXMuZ2V0TW9kZWwoKS5nZXRUaXRsZSgpKSx0XSksZV0pfXJlbmRlck1lbnUoKXtjb25zdCBlPVtdO3JldHVybiB0aGlzLmdldE1vZGVsKCkuaGFzUGlwZSgpJiYoZS5wdXNoKHtsYWJlbDoiUmVtb3ZlIixuYW1lOiJyZW1vdmUifSksZS5wdXNoKHtsYWJlbDoiSGlkZSIsbmFtZToiaGlkZSJ9KSxlLnB1c2goe2xhYmVsOiJEdXBsaWNhdGUiLG5hbWU6ImR1cGxpY2F0ZSJ9KSksdGhpcy5nZXRNb2RlbCgpLmlzUmFuZG9taXphYmxlKCkmJmUucHVzaCh7bGFiZWw6IlJhbmRvbWl6ZSIsbmFtZToicmFuZG9taXplIn0pLG0uY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJicmlja19fbWVudSBtZW51In0sW20uY3JlYXRlRWxlbWVudCgidWwiLHtjbGFzc05hbWU6Im1lbnVfX2xpc3QifSxlLm1hcCh0PT5tLmNyZWF0ZUVsZW1lbnQoImxpIix7Y2xhc3NOYW1lOiJtZW51X19pdGVtIn0sW20uY3JlYXRlRWxlbWVudCgiYnV0dG9uIix7Y2xhc3NOYW1lOiJtZW51X19idXR0b24iLG9uQ2xpY2s6aT0+e2kucHJldmVudERlZmF1bHQoKSx0aGlzLmdldE1vZGVsKCkudmlld01lbnVJdGVtRGlkQ2xpY2sodGhpcyx0Lm5hbWUpfX0sdC5sYWJlbCldKSkpXSl9cmVuZGVyU2V0dGluZ3MoKXtyZXR1cm4gbS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ImJyaWNrX19zZXR0aW5ncyJ9KX1yZW5kZXJDb250ZW50KCl7cmV0dXJuIG0uY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJicmlja19fY29udGVudCJ9KX1yZW5kZXJTdGF0dXMoKXtyZXR1cm4gdGhpcy5fJHN0YXR1c0ljb249bS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ImJyaWNrX19zdGF0dXMtaWNvbiJ9KSx0aGlzLl8kc3RhdHVzTWVzc2FnZT1tLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToiYnJpY2tfX3N0YXR1cy1tZXNzYWdlIn0pLHRoaXMuXyRzdGF0dXM9bS5jcmVhdGVFbGVtZW50KCJmb290ZXIiLHtjbGFzc05hbWU6ImJyaWNrX19zdGF0dXMgYnJpY2tfX3N0YXR1cy0taGlkZGVuIn0sW3RoaXMuXyRzdGF0dXNJY29uLHRoaXMuXyRzdGF0dXNNZXNzYWdlXSksdGhpcy5fJHN0YXR1c31hcHBlbmRTdWJ2aWV3RWxlbWVudChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGt0Pyh0aGlzLmdldEVsZW1lbnQoKSx0aGlzLl8kc2V0dGluZ3MuYXBwZW5kQ2hpbGQoZS5nZXRFbGVtZW50KCkpLHRoaXMpOnN1cGVyLmFwcGVuZFN1YnZpZXdFbGVtZW50KGUpfWRpZEZvY3VzKCl7dGhpcy5nZXRFbGVtZW50KCkuY2xhc3NMaXN0LmFkZCgiYnJpY2stLWZvY3VzIil9ZGlkQmx1cigpe3RoaXMuZ2V0RWxlbWVudCgpLmNsYXNzTGlzdC5yZW1vdmUoImJyaWNrLS1mb2N1cyIpfXRvZ2dsZU1lbnUoKXt0aGlzLl9tZW51VmlzaWJsZT0hdGhpcy5fbWVudVZpc2libGUsdGhpcy5fbWVudVZpc2libGU/KHRoaXMuXyRoZWFkZXIuYXBwZW5kQ2hpbGQodGhpcy5fJG1lbnUpLHRoaXMuXyRtZW51LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuXyRtZW51LmNsYXNzTGlzdC5hZGQoIm1lbnUtLXZpc2libGUiKSx3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl9tZW51SGlkZUhhbmRsZXIpfSkpOih0aGlzLl8kaGVhZGVyLnJlbW92ZUNoaWxkKHRoaXMuXyRtZW51KSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX21lbnVIaWRlSGFuZGxlcikpfXVwZGF0ZVN0YXR1cyhlLHQ9bnVsbCl7cmV0dXJuIGU9PT1udWxsPyh0aGlzLl8kc3RhdHVzLmNsYXNzTGlzdC5hZGQoImJyaWNrX19zdGF0dXMtLWhpZGRlbiIpLHRoaXMuXyRzdGF0dXNJY29uLmlubmVySFRNTD1udWxsLHRoaXMuXyRzdGF0dXNNZXNzYWdlLmlubmVyVGV4dD1udWxsKToodGhpcy5fJHN0YXR1cy5jbGFzc05hbWU9YGJyaWNrX19zdGF0dXMgYnJpY2tfX3N0YXR1cy0tJHtlfWAsdGhpcy5fJHN0YXR1c0ljb24uaW5uZXJIVE1MPUR0W2VdfHwiIix0aGlzLl8kc3RhdHVzTWVzc2FnZS5pbm5lclRleHQ9dHx8IiIsKGU9PT0iZm9yd2FyZCJ8fGU9PT0iYmFja3dhcmQiKSYmKHRoaXMuXyRzdGF0dXMuY2xhc3NMaXN0LmFkZCgiYnJpY2tfX3N0YXR1cy0tZmxhc2giKSx0aGlzLl8kc3RhdHVzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuXyRzdGF0dXMuY2xhc3NMaXN0LnJlbW92ZSgiYnJpY2tfX3N0YXR1cy0tZmxhc2giKSkpLHRoaXN9fWxldCBVZT1udWxsO2NsYXNzIE57Y29uc3RydWN0b3IoKXt0aGlzLl9vYnNlcnZlck5hbWVzPVtdLHRoaXMuX29ic2VydmVyQ2FsbGJhY2tzPVtdfXRyaWdnZXIoZSx0PW51bGwpe2xldCBpPTA7Zm9yKDsoaT10aGlzLl9vYnNlcnZlck5hbWVzLmluZGV4T2YoZSxpKSkhPT0tMTspdGhpcy5fb2JzZXJ2ZXJDYWxsYmFja3NbaV0oZSx0KSxpKys7cmV0dXJuIHRoaXN9c3Vic2NyaWJlKGUsdCl7cmV0dXJuIHRoaXMuX29ic2VydmVyTmFtZXMucHVzaChlKSx0aGlzLl9vYnNlcnZlckNhbGxiYWNrcy5wdXNoKHQpLHRoaXN9dW5zdWJzY3JpYmUoZSx0KXtsZXQgaT0wO2Zvcig7KGk9dGhpcy5fb2JzZXJ2ZXJOYW1lcy5pbmRleE9mKGUsaSkpIT09LTE7KXRoaXMuX29ic2VydmVyQ2FsbGJhY2tzW2ldPT09dD8odGhpcy5fb2JzZXJ2ZXJOYW1lcy5zcGxpY2UoaSwxKSx0aGlzLl9vYnNlcnZlckNhbGxiYWNrcy5zcGxpY2UoaSwxKSk6aSsrO3JldHVybiB0aGlzfXN0YXRpYyBnZXRTaGFyZWRJbnN0YW5jZSgpe3JldHVybiBVZT09PW51bGwmJihVZT1uZXcgTiksVWV9c3RhdGljIHRyaWdnZXIoZSx0PW51bGwpe3JldHVybiBOLmdldFNoYXJlZEluc3RhbmNlKCkudHJpZ2dlcihlLHQpfX1jbGFzcyBsZXtjb25zdHJ1Y3Rvcigpe3RoaXMuX3ZpZXc9bnVsbCx0aGlzLl92aWV3UHJvdG90eXBlPW19aGFzVmlldygpe3JldHVybiB0aGlzLl92aWV3IT09bnVsbH1nZXRWaWV3KCl7cmV0dXJuIHRoaXMuX3ZpZXc9PT1udWxsJiYodGhpcy5fdmlldz1uZXcgdGhpcy5fdmlld1Byb3RvdHlwZSx0aGlzLl92aWV3LnNldE1vZGVsKHRoaXMpLHRoaXMuZGlkQ3JlYXRlVmlldyh0aGlzLl92aWV3KSksdGhpcy5fdmlld311cGRhdGVWaWV3KCl7cmV0dXJuIHRoaXMuaGFzVmlldygpJiZ0aGlzLmdldFZpZXcoKS5zZXROZWVkc1VwZGF0ZSgpLHRoaXN9ZGlkQ3JlYXRlVmlldyhlKXt9fWNsYXNzIGllIGV4dGVuZHMgbGV7Y29uc3RydWN0b3IoZSx0PXt9KXtzdXBlcigpLHRoaXMuX3ZpZXdQcm90b3R5cGU9SCx0aGlzLl9uYW1lPWUsdGhpcy5fdmFsdWU9dC52YWx1ZSE9PXZvaWQgMD90LnZhbHVlOm51bGwsdGhpcy5fZGVsZWdhdGU9dC5kZWxlZ2F0ZXx8bnVsbCx0aGlzLl9yYW5kb21pemFibGU9dC5yYW5kb21pemFibGUhPT0hMSx0aGlzLl92YWxpZD0hMCx0aGlzLl9tZXNzYWdlPW51bGwsdGhpcy5fbWVzc2FnZUtleT1udWxsLHRoaXMuX3ZhbGlkYXRlVmFsdWVDYWxsYmFjaz10LnZhbGlkYXRlVmFsdWV8fG51bGwsdGhpcy5fZmlsdGVyVmFsdWVDYWxsYmFjaz10LmZpbHRlclZhbHVlfHxudWxsLHRoaXMuX3JhbmRvbWl6ZVZhbHVlQ2FsbGJhY2s9dC5yYW5kb21pemVWYWx1ZXx8bnVsbCx0aGlzLl9sYWJlbD10LmxhYmVsfHxMLmNhbWVsQ2FzZVRvUmVndWxhcihlKSx0aGlzLl92aXNpYmxlPXQudmlzaWJsZSE9PSExLHRoaXMuX3ByaW9yaXR5PXQucHJpb3JpdHkhPT12b2lkIDA/dC5wcmlvcml0eTowLHRoaXMuX3dpZHRoPXQud2lkdGh8fDEyfWdldE5hbWUoKXtyZXR1cm4gdGhpcy5fbmFtZX1nZXRMYWJlbCgpe3JldHVybiB0aGlzLl9sYWJlbH1pc1Zpc2libGUoKXtyZXR1cm4gdGhpcy5fdmlzaWJsZX1zZXRWaXNpYmxlKGUpe3JldHVybiB0aGlzLl92aXNpYmxlPWUsdGhpcy5fZGVsZWdhdGUmJnRoaXMuX2RlbGVnYXRlLmZpZWxkTmVlZHNMYXlvdXQmJnRoaXMuX2RlbGVnYXRlLmZpZWxkTmVlZHNMYXlvdXQodGhpcyksdGhpc31nZXRQcmlvcml0eSgpe3JldHVybiB0aGlzLl9wcmlvcml0eX1zZXRQcmlvcml0eShlKXtyZXR1cm4gdGhpcy5fcHJpb3JpdHk9ZSx0aGlzLl9kZWxlZ2F0ZSYmdGhpcy5fZGVsZWdhdGUuZmllbGRQcmlvcml0eURpZENoYW5nZSYmdGhpcy5fZGVsZWdhdGUuZmllbGRQcmlvcml0eURpZENoYW5nZSh0aGlzLGUpLHRoaXMuX2RlbGVnYXRlJiZ0aGlzLl9kZWxlZ2F0ZS5maWVsZE5lZWRzTGF5b3V0JiZ0aGlzLl9kZWxlZ2F0ZS5maWVsZE5lZWRzTGF5b3V0KHRoaXMpLHRoaXN9Z2V0V2lkdGgoKXtyZXR1cm4gdGhpcy5fd2lkdGh9c2V0V2lkdGgoZSl7cmV0dXJuIHRoaXMuX3dpZHRoPWUsdGhpcy51cGRhdGVWaWV3KCksdGhpcy5fZGVsZWdhdGUmJnRoaXMuX2RlbGVnYXRlLmZpZWxkTmVlZHNMYXlvdXQmJnRoaXMuX2RlbGVnYXRlLmZpZWxkTmVlZHNMYXlvdXQodGhpcyksdGhpc31nZXREZWxlZ2F0ZSgpe3JldHVybiB0aGlzLl9kZWxlZ2F0ZX1zZXREZWxlZ2F0ZShlKXtyZXR1cm4gdGhpcy5fZGVsZWdhdGU9ZSx0aGlzfWlzVmFsaWQoKXtyZXR1cm4gdGhpcy5fdmFsaWR9Z2V0TWVzc2FnZSgpe3JldHVybiB0aGlzLl9tZXNzYWdlfWdldE1lc3NhZ2VLZXkoKXtyZXR1cm4gdGhpcy5fbWVzc2FnZUtleX1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLl92YWx1ZX1zZXRWYWx1ZShlLHQ9bnVsbCl7Y29uc3QgaT10aGlzLnZhbGlkYXRlVmFsdWUoZSk7aWYodGhpcy5fdmFsaWQ9aT09PSEwLHRoaXMuX3ZhbGlkPyh0aGlzLl9tZXNzYWdlPW51bGwsdGhpcy5fbWVzc2FnZUtleT1udWxsKTp0eXBlb2YgaT09Im9iamVjdCI/KHRoaXMuX21lc3NhZ2U9aS5tZXNzYWdlLHRoaXMuX21lc3NhZ2VLZXk9aS5rZXkpOih0aGlzLl9tZXNzYWdlPSJUaGUgdmFsdWUgaXMgaW52YWxpZCIsdGhpcy5fbWVzc2FnZUtleT0iaW52YWxpZCIpLHRoaXMuaGFzVmlldygpJiZ0aGlzLmdldFZpZXcoKS5zZXRNZXNzYWdlKHRoaXMuZ2V0TWVzc2FnZSgpKSwhdGhpcy5fdmFsaWQpcmV0dXJuIHRoaXMuX3ZhbHVlPWUsdGhpcztjb25zdCBzPXRoaXMuZmlsdGVyVmFsdWUoZSk7cmV0dXJuKHMgaW5zdGFuY2VvZiB5P3MuaXNFcXVhbFRvKHRoaXMuX3ZhbHVlKTp0aGlzLl92YWx1ZT09PXMpfHwodGhpcy5fdmFsdWU9cyx0aGlzLmhhc1ZpZXcoKSYmdGhpcy5nZXRWaWV3KCkhPT10JiZ0aGlzLmdldFZpZXcoKS51cGRhdGVWYWx1ZSgpLHRoaXMuX2RlbGVnYXRlJiZ0aGlzLl9kZWxlZ2F0ZSE9PXQmJnRoaXMuX2RlbGVnYXRlLmZpZWxkVmFsdWVEaWRDaGFuZ2UhPT12b2lkIDAmJnRoaXMuZ2V0RGVsZWdhdGUoKS5maWVsZFZhbHVlRGlkQ2hhbmdlKHRoaXMscykpLHRoaXN9cmV2YWxpZGF0ZVZhbHVlKCl7cmV0dXJuIHRoaXMuc2V0VmFsdWUodGhpcy5nZXRWYWx1ZSgpKX12YWxpZGF0ZVZhbHVlKGUpe3JldHVybiB0aGlzLl92YWxpZGF0ZVZhbHVlQ2FsbGJhY2shPT1udWxsP3RoaXMuX3ZhbGlkYXRlVmFsdWVDYWxsYmFjayhlLHRoaXMpOiEwfWZpbHRlclZhbHVlKGUpe3JldHVybiB0aGlzLl9maWx0ZXJWYWx1ZUNhbGxiYWNrIT09bnVsbD90aGlzLl9maWx0ZXJWYWx1ZUNhbGxiYWNrKGUsdGhpcyk6ZX1pc1JhbmRvbWl6YWJsZSgpe3JldHVybiB0aGlzLl9yYW5kb21pemFibGV9cmFuZG9taXplKGU9bnVsbCl7aWYoIXRoaXMuaXNSYW5kb21pemFibGUoKSlyZXR1cm4gdGhpcztjb25zdCB0PXRoaXMucmFuZG9taXplVmFsdWUoZXx8bmV3IFJlKTtyZXR1cm4gdCE9PW51bGw/dGhpcy5zZXRWYWx1ZSh0KTp0aGlzfXJhbmRvbWl6ZVZhbHVlKGUpe3JldHVybiB0aGlzLnJhbmRvbWl6ZVZhbHVlV2l0aENhbGxiYWNrKGUpfXJhbmRvbWl6ZVZhbHVlV2l0aENhbGxiYWNrKGUpe3JldHVybiB0aGlzLl9yYW5kb21pemVWYWx1ZUNhbGxiYWNrIT09bnVsbD90aGlzLl9yYW5kb21pemVWYWx1ZUNhbGxiYWNrKGUsdGhpcyk6bnVsbH1pc0N1c3RvbVJhbmRvbWl6YXRpb25TZXQoKXtyZXR1cm4gdGhpcy5fcmFuZG9taXplVmFsdWVDYWxsYmFjayE9PW51bGx9c2VyaWFsaXplVmFsdWUoKXtpZighdGhpcy5pc1ZhbGlkKCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGZpZWxkIHZhbHVlcyBjYW4ndCBiZSBzZXJpYWxpemVkLiIpO2NvbnN0IGU9dGhpcy5nZXRWYWx1ZSgpO2lmKHR5cGVvZiBlIT0iYm9vbGVhbiImJnR5cGVvZiBlIT0ibnVtYmVyIiYmdHlwZW9mIGUhPSJzdHJpbmciJiZlIT09bnVsbCl0aHJvdyBuZXcgRXJyb3IoYEZpZWxkIHZhbHVlIHNlcmlhbGl6YXRpb24gaXMgbm90IHBvc3NpYmxlLiBHZW5lcmljIGZpZWxkcyBjYW4gb25seSBzZXJpYWxpemUgYm9vbGVhbiwgbnVtYmVyLCBzdHJpbmcgb3IgbnVsbCB2YWx1ZXMgc2FmZWx5LiBSZWNlaXZlZCB2YWx1ZSB0eXBlICcke3R5cGVvZiBlfScuYCk7cmV0dXJuIGV9ZXh0cmFjdChlKXtyZXR1cm4gdGhpcy5zZXRWYWx1ZSh0aGlzLmV4dHJhY3RWYWx1ZShlKSksdGhpc31leHRyYWN0VmFsdWUoZSl7cmV0dXJuIGV9ZGlkQ3JlYXRlVmlldyhlKXt0aGlzLmdldFZpZXcoKS5zZXRNZXNzYWdlKHRoaXMuZ2V0TWVzc2FnZSgpKX19Y2xhc3MgTnQgZXh0ZW5kcyBIe2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl8kaW5wdXQ9bnVsbH11cGRhdGVWYWx1ZSgpe3JldHVybiB0aGlzLl8kaW5wdXQuY2hlY2tlZD10aGlzLmdldE1vZGVsKCkuZ2V0VmFsdWUoKSx0aGlzfXJlbmRlcigpe2NvbnN0IGU9c3VwZXIucmVuZGVyKCk7cmV0dXJuIGUuY2xhc3NMaXN0LmFkZCgiZmllbGQtYm9vbGVhbiIpLGV9cmVuZGVyRmllbGQoKXt0aGlzLl8kaW5wdXQ9bS5jcmVhdGVFbGVtZW50KCJpbnB1dCIse2NsYXNzTmFtZToiZmllbGQtYm9vbGVhbl9faW5wdXQiLHR5cGU6ImNoZWNrYm94IixpZDp0aGlzLmdldElkKCksb25DaGFuZ2U6dGhpcy5pbnB1dFZhbHVlRGlkQ2hhbmdlLmJpbmQodGhpcyksY2hlY2tlZDp0aGlzLmdldE1vZGVsKCkuZ2V0VmFsdWUoKSxvbkZvY3VzOmk9PnRoaXMuZm9jdXMoKSxvbkJsdXI6aT0+dGhpcy5ibHVyKCl9KTtjb25zdCBlPW0uY3JlYXRlRWxlbWVudCgibGFiZWwiLHtjbGFzc05hbWU6ImZpZWxkLWJvb2xlYW5fX3RvZ2dsZSIsaHRtbEZvcjp0aGlzLmdldElkKCl9LFttLmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6ImZpZWxkLWJvb2xlYW5fX2Nob2ljZSJ9LHRoaXMuZ2V0TW9kZWwoKS5nZXRUcnVlTGFiZWwoKSksbS5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOiJmaWVsZC1ib29sZWFuX19jaG9pY2UifSx0aGlzLmdldE1vZGVsKCkuZ2V0RmFsc2VMYWJlbCgpKV0pLHQ9c3VwZXIucmVuZGVyRmllbGQoKTtyZXR1cm4gdC5hcHBlbmRDaGlsZCh0aGlzLl8kaW5wdXQpLHQuYXBwZW5kQ2hpbGQoZSksdH1pbnB1dFZhbHVlRGlkQ2hhbmdlKGUpe3RoaXMuZ2V0TW9kZWwoKS52aWV3VmFsdWVEaWRDaGFuZ2UodGhpcyx0aGlzLl8kaW5wdXQuY2hlY2tlZCl9fWNvbnN0IGR0PVshMCwxLCIxIiwidHJ1ZSJdLFJ0PVshMSwwLCIwIiwiZmFsc2UiXTtjbGFzcyBxdCBleHRlbmRzIGlle2NvbnN0cnVjdG9yKGUsdD17fSl7c3VwZXIoZSx0KSx0aGlzLl92aWV3UHJvdG90eXBlPU50LHRoaXMuX3RydWVMYWJlbD10LnRydWVMYWJlbHx8IlllcyIsdGhpcy5fZmFsc2VMYWJlbD10LmZhbHNlTGFiZWx8fCJObyJ9Z2V0VHJ1ZUxhYmVsKCl7cmV0dXJuIHRoaXMuX3RydWVMYWJlbH1nZXRGYWxzZUxhYmVsKCl7cmV0dXJuIHRoaXMuX2ZhbHNlTGFiZWx9dmFsaWRhdGVWYWx1ZShlKXtyZXR1cm4gZHQuaW5kZXhPZihlKT09PS0xJiZSdC5pbmRleE9mKGUpPT09LTE/e2tleToiYm9vbGVhbkludmFsaWQiLG1lc3NhZ2U6IlRoZSB2YWx1ZSBpcyBub3QgYSBib29sZWFuIn06c3VwZXIudmFsaWRhdGVWYWx1ZShlKX1maWx0ZXJWYWx1ZShlKXtyZXR1cm4gc3VwZXIuZmlsdGVyVmFsdWUoZHQuaW5kZXhPZihlKSE9PS0xKX1yYW5kb21pemVWYWx1ZShlKXtjb25zdCB0PXN1cGVyLnJhbmRvbWl6ZVZhbHVlKGUpO3JldHVybiB0IT09bnVsbD90OmUubmV4dEJvb2xlYW4oKX12aWV3VmFsdWVEaWRDaGFuZ2UoZSx0KXt0aGlzLnNldFZhbHVlKHQsZSl9fWNsYXNzIE90IGV4dGVuZHMgSHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fJGlucHV0PW51bGx9dXBkYXRlVmFsdWUoKXtjb25zdCBlPXRoaXMuZ2V0TW9kZWwoKS5nZXRWYWx1ZSgpO2xldCB0PUQuaGV4U3RyaW5nRnJvbUJ5dGVzKGUpO3JldHVybiB0PUwuY2h1bmsodCwyKS5qb2luKCIgIiksdGhpcy5fJGlucHV0LnZhbHVlPXQsdGhpc31yZW5kZXIoKXtjb25zdCBlPXN1cGVyLnJlbmRlcigpO3JldHVybiBlLmNsYXNzTGlzdC5hZGQoImZpZWxkLWJ5dGUiKSxlfXJlbmRlckZpZWxkKCl7dGhpcy5fJGlucHV0PW0uY3JlYXRlRWxlbWVudCgiaW5wdXQiLHtjbGFzc05hbWU6ImZpZWxkLWJ5dGVfX2lucHV0IixpZDp0aGlzLmdldElkKCksdHlwZToidGV4dCIsc3BlbGxjaGVjazohMSxvbklucHV0OnRoaXMuaW5wdXRWYWx1ZURpZENoYW5nZS5iaW5kKHRoaXMpLG9uRm9jdXM6dD0+dGhpcy5mb2N1cygpLG9uQmx1cjp0PT50aGlzLmJsdXIoKX0pO2NvbnN0IGU9c3VwZXIucmVuZGVyRmllbGQoKTtyZXR1cm4gZS5jbGFzc0xpc3QucmVtb3ZlKCJmaWVsZF9fZmllbGQiKSxlLmNsYXNzTGlzdC5hZGQoImZpZWxkLWJ5dGVfX2ZpZWxkIiksZS5hcHBlbmRDaGlsZCh0aGlzLl8kaW5wdXQpLGV9aW5wdXRWYWx1ZURpZENoYW5nZShlKXtjb25zdCB0PUwucmVtb3ZlV2hpdGVzcGFjZXModGhpcy5fJGlucHV0LnZhbHVlKTtpZih0Lm1hdGNoKC9eWzAtOWEtZl0rJC9naSk9PT1udWxsKXJldHVybiB0aGlzLnNldE1lc3NhZ2UoIlRoZSB2YWx1ZSBjb250YWlucyBub24taGV4YWRlY2ltYWwgY2hhcmFjdGVycyIpO3RoaXMuY2xlYXJNZXNzYWdlKCk7Y29uc3QgaT1ELmJ5dGVzRnJvbUhleFN0cmluZyh0KTt0aGlzLmdldE1vZGVsKCkudmlld1ZhbHVlRGlkQ2hhbmdlKHRoaXMsaSl9fWNsYXNzIGp0IGV4dGVuZHMgaWV7Y29uc3RydWN0b3IoZSx0PXt9KXtzdXBlcihlLHQpLHRoaXMuX3ZpZXdQcm90b3R5cGU9T3QsdGhpcy5fdmFsdWU9dC52YWx1ZXx8bmV3IFVpbnQ4QXJyYXksdGhpcy5fbWluU2l6ZT1udWxsLHRoaXMuX21heFNpemU9bnVsbCx0aGlzLl9yYW5kb21pemVTaXplPXQucmFuZG9taXplU2l6ZXx8bnVsbCx0aGlzLnNldE1pblNpemUodC5taW5TaXplfHxudWxsLCExKSx0aGlzLnNldE1heFNpemUodC5tYXhTaXplfHxudWxsLCExKX1nZXRNaW5TaXplKCl7cmV0dXJuIHRoaXMuX21pblNpemV9c2V0TWluU2l6ZShlLHQ9ITApe3JldHVybiB0aGlzLl9taW5TaXplPT09ZT90aGlzOih0aGlzLl9taW5TaXplPWUhPT1udWxsP3BhcnNlSW50KGUpOm51bGwsdD90aGlzLnJldmFsaWRhdGVWYWx1ZSgpOnRoaXMpfWdldE1heFNpemUoKXtyZXR1cm4gdGhpcy5fbWF4U2l6ZX1zZXRNYXhTaXplKGUsdD0hMCl7cmV0dXJuIHRoaXMuX21heFNpemU9PT1lP3RoaXM6KHRoaXMuX21heFNpemU9ZSE9PW51bGw/cGFyc2VJbnQoZSk6bnVsbCx0P3RoaXMucmV2YWxpZGF0ZVZhbHVlKCk6dGhpcyl9dmFsaWRhdGVWYWx1ZShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXk/dGhpcy5fbWluU2l6ZSE9PW51bGwmJmUubGVuZ3RoPHRoaXMuX21pblNpemU/e2tleToiYnl0ZVNpemVUb29TaG9ydCIsbWVzc2FnZTpgVGhlIHZhbHVlIG11c3QgYmUgYXQgbGVhc3QgJHt0aGlzLl9taW5TaXplfSAke3RoaXMuX21pblNpemU9PT0xPyJieXRlIjoiYnl0ZXMifSBsb25nLCBmb3VuZCAke2UubGVuZ3RofSAke2UubGVuZ3RoPT09MT8iYnl0ZSI6ImJ5dGVzIn1gfTp0aGlzLl9tYXhTaXplIT09bnVsbCYmZS5sZW5ndGg+dGhpcy5fbWF4U2l6ZT97a2V5OiJieXRlU2l6ZVRvb0xvbmciLG1lc3NhZ2U6YFRoZSB2YWx1ZSBtdXN0IG5vdCBleGNlZWQgJHt0aGlzLl9tYXhTaXplfSAke3RoaXMuX21heFNpemU9PT0xPyJieXRlIjoiYnl0ZXMifSBpbiBsZW5ndGgsIGZvdW5kICR7ZS5sZW5ndGh9ICR7ZS5sZW5ndGg9PT0xPyJieXRlIjoiYnl0ZXMifWB9OnN1cGVyLnZhbGlkYXRlVmFsdWUoZSk6e2tleToiYnl0ZVVuZXhwZWN0ZWRUeXBlIixtZXNzYWdlOiJUaGUgdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgb2YgdHlwZSBVaW50OEFycmF5In19cmFuZG9taXplVmFsdWUoZSl7Y29uc3QgdD1zdXBlci5yYW5kb21pemVWYWx1ZShlKTtyZXR1cm4gdCE9PW51bGw/dDp0aGlzLl9yYW5kb21pemVTaXplIT09bnVsbD9lLm5leHRCeXRlcyh0aGlzLl9yYW5kb21pemVTaXplKTp0aGlzLmdldE1pblNpemUoKSE9PW51bGw/ZS5uZXh0Qnl0ZXModGhpcy5nZXRNaW5TaXplKCkpOnRoaXMuaXNWYWxpZCgpP2UubmV4dEJ5dGVzKHRoaXMuZ2V0VmFsdWUoKS5sZW5ndGgpOm51bGx9c2VyaWFsaXplVmFsdWUoKXtyZXR1cm4gRC5iYXNlNjRTdHJpbmdGcm9tQnl0ZXModGhpcy5nZXRWYWx1ZSgpKX1leHRyYWN0VmFsdWUoZSl7aWYodHlwZW9mIGUhPSJzdHJpbmciKXRocm93IG5ldyBFcnJvcihgVmFsdWUgb2YgZmllbGQgJyR7dGhpcy5nZXROYW1lKCl9JyBpcyBleHBlY3RlZCB0byBiZSBhIHZhbGlkIGJhc2U2NCBzdHJpbmcuYCk7cmV0dXJuIEQuYnl0ZXNGcm9tQmFzZTY0U3RyaW5nKGUpfXZpZXdWYWx1ZURpZENoYW5nZShlLHQpe3RoaXMuc2V0VmFsdWUodCxlKX19Y2xhc3MgVXQgZXh0ZW5kcyBIe2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9zdHlsZT0iZGVmYXVsdCIsdGhpcy5fJHNlbGVjdD1udWxsLHRoaXMuXyQkcmFkaW89W119Z2V0U3R5bGUoKXtyZXR1cm4gdGhpcy5fc3R5bGV9c2V0U3R5bGUoZSl7cmV0dXJuIHRoaXMuX3N0eWxlIT09ZSYmKHRoaXMuX3N0eWxlPWUsdGhpcy5yZWZyZXNoKCkpLHRoaXN9dXBkYXRlVmFsdWUoKXtjb25zdCBlPXRoaXMuZ2V0TW9kZWwoKS5nZXRTZWxlY3RlZEluZGV4KCk7cmV0dXJuIHRoaXMuZ2V0U3R5bGUoKT09PSJyYWRpbyI/dGhpcy5fJCRyYWRpby5mb3JFYWNoKCh0LGkpPT57dC5jaGVja2VkPWk9PT1lfSk6dGhpcy5fJHNlbGVjdC52YWx1ZT1lLHRoaXN9cmVuZGVyKCl7Y29uc3QgZT1zdXBlci5yZW5kZXIoKTtyZXR1cm4gZS5jbGFzc05hbWUrPWAgZmllbGQtZW51bSBmaWVsZC1lbnVtLS0ke3RoaXMuZ2V0U3R5bGUoKX1gLGV9cmVuZGVyRmllbGQoKXtjb25zdCBlPXRoaXMuZ2V0TW9kZWwoKS5nZXRFbGVtZW50TGFiZWxzKCksdD10aGlzLmdldE1vZGVsKCkuZ2V0RWxlbWVudERlc2NyaXB0aW9ucygpLGk9c3VwZXIucmVuZGVyRmllbGQoKTtpZihpLmNsYXNzTGlzdC5yZW1vdmUoImZpZWxkX19maWVsZCIpLGkuY2xhc3NMaXN0LmFkZCgiZmllbGQtZW51bV9fZmllbGQiKSx0aGlzLmdldFN0eWxlKCk9PT0icmFkaW8iKXt0aGlzLl8kJHJhZGlvPVtdO2NvbnN0IHM9bS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ImZpZWxkLWVudW1fX29wdGlvbnMiLHJvbGU6InJhZGlvZ3JvdXAiLGlkOnRoaXMuZ2V0SWQoKX0pO2kuYXBwZW5kQ2hpbGQocyksZS5mb3JFYWNoKChuLHIpPT57Y29uc3QgYT1gJHt0aGlzLmdldElkKCl9LSR7cisxfWAsbD1tLmNyZWF0ZUVsZW1lbnQoImlucHV0Iix7dHlwZToicmFkaW8iLGNsYXNzTmFtZToiZmllbGQtZW51bV9fb3B0aW9uLXJhZGlvIixpZDphLG9uQ2hhbmdlOnRoaXMudmFsdWVEaWRDaGFuZ2UuYmluZCh0aGlzKSxuYW1lOnRoaXMuZ2V0SWQoKX0pLG89bS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ImZpZWxkLWVudW1fX29wdGlvbiJ9LFtsLG0uY3JlYXRlRWxlbWVudCgibGFiZWwiLHtodG1sRm9yOmEsY2xhc3NOYW1lOiJmaWVsZC1lbnVtX19vcHRpb24tbGFiZWwifSxuKV0pO3RoaXMuXyQkcmFkaW8ucHVzaChsKSxzLmFwcGVuZENoaWxkKG8pfSl9ZWxzZXtjb25zdCBzPWUubWFwKChuLHIpPT5tLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIse3ZhbHVlOnIsdGl0bGU6dFtyXXx8IiJ9LG4pKTt0aGlzLl8kc2VsZWN0PW0uY3JlYXRlRWxlbWVudCgic2VsZWN0Iix7Y2xhc3NOYW1lOiJmaWVsZC1lbnVtX19zZWxlY3QiLGlkOnRoaXMuZ2V0SWQoKSxvbkNoYW5nZTp0aGlzLnZhbHVlRGlkQ2hhbmdlLmJpbmQodGhpcyksb25Gb2N1czpuPT50aGlzLmZvY3VzKCksb25CbHVyOm49PnRoaXMuYmx1cigpfSxzKSxpLmFwcGVuZENoaWxkKHRoaXMuXyRzZWxlY3QpfXJldHVybiBpfXZhbHVlRGlkQ2hhbmdlKGUpe2NvbnN0IHQ9dGhpcy5nZXRTdHlsZSgpPT09InJhZGlvIj90aGlzLl8kJHJhZGlvLmZpbmRJbmRleChzPT5zLmNoZWNrZWQpOnBhcnNlSW50KHRoaXMuXyRzZWxlY3QudmFsdWUpLGk9dGhpcy5nZXRNb2RlbCgpLmdldEVsZW1lbnRBdCh0KTt0aGlzLmdldE1vZGVsKCkudmlld1ZhbHVlRGlkQ2hhbmdlKHRoaXMsaSl9fWNsYXNzIFd0IGV4dGVuZHMgaWV7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlLHQpLHRoaXMuX3ZpZXdQcm90b3R5cGU9VXQsdGhpcy5fZWxlbWVudHM9W10sdGhpcy5fbGFiZWxzPVtdLHRoaXMuX2Rlc2NyaXB0aW9ucz1bXSx0aGlzLl9zdHlsZT10LnN0eWxlfHwiZGVmYXVsdCIsdGhpcy5zZXRFbGVtZW50cyh0LmVsZW1lbnRzLHQubGFiZWxzfHxudWxsLHQuZGVzY3JpcHRpb25zfHxudWxsLCExKX1nZXRFbGVtZW50cygpe3JldHVybiB0aGlzLl9lbGVtZW50c31nZXRFbGVtZW50TGFiZWxzKCl7cmV0dXJuIHRoaXMuX2xhYmVsc31nZXRFbGVtZW50RGVzY3JpcHRpb25zKCl7cmV0dXJuIHRoaXMuX2Rlc2NyaXB0aW9uc31zZXRFbGVtZW50cyhlLHQ9bnVsbCxpPW51bGwscz0hMCl7aWYoZS5sZW5ndGg9PT0wKXRocm93IG5ldyBFcnJvcigiQXJyYXkgb2YgZWxlbWVudHMgY2FuJ3QgYmUgZW1wdHkuIik7aWYodCE9PW51bGwmJmUubGVuZ3RoIT09dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJFbGVtZW50IGFuZCBsYWJlbCBhcnJheXMgcmVxdWlyZSB0aGUgc2FtZSBsZW5ndGguIik7aWYoaSE9PW51bGwmJmUubGVuZ3RoIT09aS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJFbGVtZW50IGFuZCBkZXNjcmlwdGlvbiBhcnJheXMgcmVxdWlyZSB0aGUgc2FtZSBsZW5ndGguIik7cmV0dXJuIHRoaXMuX2VsZW1lbnRzPWUsdGhpcy5fbGFiZWxzPXQhPT1udWxsP3Q6ZSx0aGlzLl9kZXNjcmlwdGlvbnM9aSE9PW51bGw/aTplLm1hcCgoKT0+bnVsbCksdGhpcy5fdmFsdWU9PT1udWxsJiYodGhpcy5fdmFsdWU9dGhpcy5fZWxlbWVudHNbMF0pLHRoaXMuaGFzVmlldygpJiZ0aGlzLmdldFZpZXcoKS5yZWZyZXNoKCkscz90aGlzLnJldmFsaWRhdGVWYWx1ZSgpOnRoaXN9Z2V0RWxlbWVudEF0KGUpe3JldHVybiBlPHRoaXMuX2VsZW1lbnRzLmxlbmd0aD90aGlzLl9lbGVtZW50c1tlXTpudWxsfWdldFNlbGVjdGVkSW5kZXgoKXtyZXR1cm4gdGhpcy5fZWxlbWVudHMuaW5kZXhPZih0aGlzLmdldFZhbHVlKCkpfXNldFNlbGVjdGVkSW5kZXgoZSl7Y29uc3QgdD10aGlzLl9lbGVtZW50c1tlXTtyZXR1cm4gdGhpcy5zZXRWYWx1ZSh0KX1nZXRTdHlsZSgpe3JldHVybiB0aGlzLl9zdHlsZX1zZXRTdHlsZShlKXtyZXR1cm4gdGhpcy5fc3R5bGU9ZSx0aGlzLmhhc1ZpZXcoKSYmdGhpcy5nZXRWaWV3KCkuc2V0U3R5bGUoZSksdGhpc312YWxpZGF0ZVZhbHVlKGUpe3JldHVybiB0aGlzLl9lbGVtZW50cy5pbmRleE9mKGUpPT09LTE/e2tleToiZW51bU5vdEluSGF5c3RhY2siLG1lc3NhZ2U6IlRoZSB2YWx1ZSBtdXN0IGJlIG9jY3VyIGluIHRoZSBsaXN0IG9mIGVsZW1lbnRzIn06c3VwZXIudmFsaWRhdGVWYWx1ZShlKX1yYW5kb21pemVWYWx1ZShlKXtjb25zdCB0PXN1cGVyLnJhbmRvbWl6ZVZhbHVlKGUpO3JldHVybiB0IT09bnVsbD90OmUubmV4dENob2ljZSh0aGlzLl9lbGVtZW50cyl9dmlld1ZhbHVlRGlkQ2hhbmdlKGUsdCl7dGhpcy5zZXRWYWx1ZSh0LGUpfWRpZENyZWF0ZVZpZXcoZSl7c3VwZXIuZGlkQ3JlYXRlVmlldyhlKSx0aGlzLmdldFZpZXcoKS5zZXRTdHlsZSh0aGlzLmdldFN0eWxlKCkpfX1jbGFzcyBIdCBleHRlbmRzIEh7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuXyRpbnB1dD1udWxsLHRoaXMuX2Rpc3BsYXlFbmFibGVkPSExLHRoaXMuXyRkaXNwbGF5PW51bGwsdGhpcy5fJGRpc3BsYXlWYWx1ZT1udWxsLHRoaXMuXyRkaXNwbGF5RGVzY3JpcHRpb249bnVsbH11cGRhdGVWYWx1ZSgpe2NvbnN0IGU9dGhpcy5nZXRNb2RlbCgpLmdldFZhbHVlKCk7cmV0dXJuIHRoaXMuXyRpbnB1dC52YWx1ZT1lLnRvU3RyaW5nKCksdGhpcy5fdXBkYXRlVmFsdWVEaXNwbGF5KCksdGhpc31fdXBkYXRlVmFsdWVEaXNwbGF5KCl7Y29uc3QgZT10aGlzLmdldE1vZGVsKCkuZ2V0VmFsdWUoKSx0PXRoaXMuZ2V0TW9kZWwoKS5nZXRWYWx1ZURlc2NyaXB0aW9uKCksaT10IT09bnVsbDtyZXR1cm4gdGhpcy5fZGlzcGxheUVuYWJsZWQhPT1pJiYodGhpcy5fZGlzcGxheUVuYWJsZWQ9aSxpP3RoaXMuXyRkaXNwbGF5LmNsYXNzTGlzdC5hZGQoImZpZWxkLW51bWJlcl9fZGlzcGxheS0tZW5hYmxlZCIpOih0aGlzLl8kZGlzcGxheS5jbGFzc0xpc3QucmVtb3ZlKCJmaWVsZC1udW1iZXJfX2Rpc3BsYXktLWVuYWJsZWQiKSx0aGlzLl8kZGlzcGxheVZhbHVlLmlubmVyVGV4dD0iIix0aGlzLl8kZGlzcGxheURlc2NyaXB0aW9uLmlubmVyVGV4dD0iIikpLGkmJih0aGlzLl8kZGlzcGxheVZhbHVlLmlubmVyVGV4dD1lLnRvU3RyaW5nKCksdGhpcy5fJGRpc3BsYXlEZXNjcmlwdGlvbi5pbm5lclRleHQ9dCksdGhpc31yZW5kZXIoKXtjb25zdCBlPXN1cGVyLnJlbmRlcigpO3JldHVybiBlLmNsYXNzTGlzdC5hZGQoImZpZWxkLW51bWJlciIpLGV9cmVuZGVyRmllbGQoKXt0aGlzLl8kaW5wdXQ9bS5jcmVhdGVFbGVtZW50KCJpbnB1dCIse2NsYXNzTmFtZToiZmllbGQtbnVtYmVyX19pbnB1dCIsaWQ6dGhpcy5nZXRJZCgpLHR5cGU6Im51bWJlciIsb25JbnB1dDp0aGlzLmlucHV0VmFsdWVEaWRDaGFuZ2UuYmluZCh0aGlzKSxvbkZvY3VzOm49PnRoaXMuZm9jdXMoKSxvbkJsdXI6bj0+dGhpcy5ibHVyKCl9KSx0aGlzLl8kZGlzcGxheVZhbHVlPW0uY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZToiZmllbGQtbnVtYmVyX19kaXNwbGF5LXZhbHVlIn0pLHRoaXMuXyRkaXNwbGF5RGVzY3JpcHRpb249bS5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOiJmaWVsZC1udW1iZXJfX2Rpc3BsYXktZGVzY3JpcHRpb24ifSksdGhpcy5fJGRpc3BsYXk9bS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ImZpZWxkLW51bWJlcl9fZGlzcGxheSJ9LFt0aGlzLl8kZGlzcGxheVZhbHVlLHRoaXMuXyRkaXNwbGF5RGVzY3JpcHRpb25dKTtjb25zdCBlPW0uY3JlYXRlRWxlbWVudCgiYnV0dG9uIix7Y2xhc3NOYW1lOiJmaWVsZC1udW1iZXJfX2J0bi1zdGVwLWRvd24iLG9uQ2xpY2s6dGhpcy5zdGVwRG93bkJ1dHRvbkRpZENsaWNrLmJpbmQodGhpcyl9LCJTdGVwIERvd24iKSx0PW0uY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJmaWVsZC1udW1iZXJfX3ZhbHVlIn0sW3RoaXMuXyRpbnB1dCx0aGlzLl8kZGlzcGxheV0pLGk9bS5jcmVhdGVFbGVtZW50KCJidXR0b24iLHtjbGFzc05hbWU6ImZpZWxkLW51bWJlcl9fYnRuLXN0ZXAtdXAiLG9uQ2xpY2s6dGhpcy5zdGVwVXBCdXR0b25EaWRDbGljay5iaW5kKHRoaXMpfSwiU3RlcCBVcCIpLHM9c3VwZXIucmVuZGVyRmllbGQoKTtyZXR1cm4gcy5jbGFzc0xpc3QucmVtb3ZlKCJmaWVsZF9fZmllbGQiKSxzLmNsYXNzTGlzdC5hZGQoImZpZWxkLW51bWJlcl9fZmllbGQiKSxzLmFwcGVuZENoaWxkKGUpLHMuYXBwZW5kQ2hpbGQodCkscy5hcHBlbmRDaGlsZChpKSxzfWlucHV0VmFsdWVEaWRDaGFuZ2UoZSl7dGhpcy5nZXRNb2RlbCgpLnZpZXdWYWx1ZURpZENoYW5nZSh0aGlzLHRoaXMuXyRpbnB1dC52YWx1ZSksdGhpcy5fdXBkYXRlVmFsdWVEaXNwbGF5KCl9c3RlcERvd25CdXR0b25EaWRDbGljayhlKXtyZXR1cm4gdGhpcy5nZXRNb2RlbCgpLnN0ZXBEb3duKCksZS5wcmV2ZW50RGVmYXVsdCgpLCExfXN0ZXBVcEJ1dHRvbkRpZENsaWNrKGUpe3JldHVybiB0aGlzLmdldE1vZGVsKCkuc3RlcFVwKCksZS5wcmV2ZW50RGVmYXVsdCgpLCExfX1jbGFzcyBHdCBleHRlbmRzIGlle2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSx0KSx0aGlzLl92aWV3UHJvdG90eXBlPUh0LHRoaXMuX2ludGVnZXI9dC5pbnRlZ2VyfHwhMSx0aGlzLl91c2VCaWdJbnQ9dC51c2VCaWdJbnQmJnRoaXMuX2ludGVnZXIsdGhpcy5fc3RlcD10LnN0ZXB8fDEsdGhpcy5fbWluPXQubWluIT09dm9pZCAwP3QubWluOnRoaXMuX2ludGVnZXImJiF0aGlzLl91c2VCaWdJbnQ/TnVtYmVyLk1JTl9TQUZFX0lOVEVHRVI6bnVsbCx0aGlzLl9tYXg9dC5tYXghPT12b2lkIDA/dC5tYXg6dGhpcy5faW50ZWdlciYmIXRoaXMuX3VzZUJpZ0ludD9OdW1iZXIuTUFYX1NBRkVfSU5URUdFUjpudWxsLHRoaXMuX3JvdGF0ZT10LnJvdGF0ZSE9PXZvaWQgMD90LnJvdGF0ZTp0Lm1pbiE9PXZvaWQgMCYmdC5tYXghPT12b2lkIDAsdGhpcy5fZGVzY3JpYmVWYWx1ZUNhbGxiYWNrPXQuZGVzY3JpYmVWYWx1ZXx8bnVsbH1pc0ludGVnZXIoKXtyZXR1cm4gdGhpcy5faW50ZWdlcn1zZXRJbnRlZ2VyKGUpe3JldHVybiB0aGlzLl9pbnRlZ2VyPWUsdGhpcy5yZXZhbGlkYXRlVmFsdWUoKX1nZXRTdGVwKCl7cmV0dXJuIHRoaXMuX3N0ZXB9c2V0U3RlcChlKXtyZXR1cm4gdGhpcy5fc3RlcD1lLHRoaXN9c3RlcFZhbHVlKGUsdD0xMDApe2xldCBpPXRoaXMuZ2V0VmFsdWUoKSxzPTAsbj0hMTtmb3IoKHR5cGVvZiBpPT0iYmlnaW50Inx8dHlwZW9mIGU9PSJiaWdpbnQiKSYmKGk9QmlnSW50KGkpLGU9QmlnSW50KGUpKTshbiYmcysrPHQmJih0aGlzLl9yb3RhdGV8fGU+MHx8aSE9PXRoaXMuX21pbikmJih0aGlzLl9yb3RhdGV8fGU8MHx8aSE9PXRoaXMuX21heCk7KWkrPWUsdGhpcy5fcm90YXRlJiZpPnRoaXMuX21heCYmdGhpcy5fcm90YXRlP2k9dGhpcy5fbWluOnRoaXMuX3JvdGF0ZSYmaTx0aGlzLl9taW4mJnRoaXMuX3JvdGF0ZSYmKGk9dGhpcy5fbWF4K2UpLG49dGhpcy52YWxpZGF0ZVZhbHVlKGkpPT09ITA7cmV0dXJuIG4/aTpudWxsfXN0ZXBVcCgpe2NvbnN0IGU9dGhpcy5zdGVwVmFsdWUodGhpcy5fc3RlcCk7cmV0dXJuIGUhPT1udWxsP3RoaXMuc2V0VmFsdWUoZSk6dGhpc31zdGVwRG93bigpe2NvbnN0IGU9dGhpcy5zdGVwVmFsdWUoLXRoaXMuX3N0ZXApO3JldHVybiBlIT09bnVsbD90aGlzLnNldFZhbHVlKGUpOnRoaXN9Z2V0TWluKCl7cmV0dXJuIHRoaXMuX21pbn1zZXRNaW4oZSl7cmV0dXJuIHRoaXMuX21pbj1lLHRoaXMucmV2YWxpZGF0ZVZhbHVlKCl9Z2V0TWF4KCl7cmV0dXJuIHRoaXMuX21heH1zZXRNYXgoZSl7cmV0dXJuIHRoaXMuX21heD1lLHRoaXMucmV2YWxpZGF0ZVZhbHVlKCl9aXNSb3RhdGUoKXtyZXR1cm4gdGhpcy5fcm90YXRlfXNldFJvdGF0ZShlKXtyZXR1cm4gdGhpcy5fcm90YXRlPWUmJnRoaXMuX21pbiE9PW51bGwmJnRoaXMuX21heCE9PW51bGwsdGhpc31nZXRWYWx1ZURlc2NyaXB0aW9uKCl7cmV0dXJuIXRoaXMuaXNWYWxpZCgpfHx0aGlzLl9kZXNjcmliZVZhbHVlQ2FsbGJhY2s9PT1udWxsP251bGw6dGhpcy5fZGVzY3JpYmVWYWx1ZUNhbGxiYWNrKHRoaXMuZ2V0VmFsdWUoKSx0aGlzKX1zZXROZWVkc1ZhbHVlRGVzY3JpcHRpb25VcGRhdGUoKXt0aGlzLmhhc1ZpZXcoKSYmdGhpcy5nZXRWaWV3KCkudXBkYXRlVmFsdWUoKX12YWxpZGF0ZVZhbHVlKGUpe2NvbnN0IHQ9dGhpcy5maWx0ZXJWYWx1ZShlKTtyZXR1cm4gdHlwZW9mIHQhPSJiaWdpbnQiJiYoaXNOYU4odCl8fCFpc0Zpbml0ZSh0KSk/e2tleToibnVtYmVyTm90TnVtZXJpYyIsbWVzc2FnZToiVGhlIHZhbHVlIGlzIG5vdCBudW1lcmljIn06dGhpcy5fbWluIT09bnVsbCYmdDx0aGlzLl9taW4/e2tleToibnVtYmVyVG9vU21hbGwiLG1lc3NhZ2U6YFRoZSB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAke3RoaXMuX21pbn1gfTp0aGlzLl9tYXghPT1udWxsJiZ0Pj10aGlzLl9tYXg/e2tleToibnVtYmVyVG9vTGFyZ2UiLG1lc3NhZ2U6YFRoZSB2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAke3RoaXMuX21heH1gfTpzdXBlci52YWxpZGF0ZVZhbHVlKHQpfWZpbHRlclZhbHVlKGUpe2lmKCEodGhpcy5fdXNlQmlnSW50JiZ0eXBlb2YgZT09ImJpZ2ludCIpKWlmKHRoaXMuX3VzZUJpZ0ludCYmdHlwZW9mIGUhPSJiaWdpbnQiKXtjb25zdCB0PXBhcnNlSW50KGUpO3Q+PU51bWJlci5NSU5fU0FGRV9JTlRFR0VSJiZ0PD1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUj9lPXQ6aXNOYU4odCl8fChlPUJpZ0ludChlKSl9ZWxzZSB0aGlzLl9pbnRlZ2VyP2U9cGFyc2VJbnQoZSk6ZT1wYXJzZUZsb2F0KGUpO3JldHVybiBzdXBlci5maWx0ZXJWYWx1ZShlKX1yYW5kb21pemVWYWx1ZShlKXtjb25zdCB0PXN1cGVyLnJhbmRvbWl6ZVZhbHVlKGUpO3JldHVybiB0IT09bnVsbD90OnRoaXMuX21pbiE9PW51bGwmJnRoaXMuX21heCE9PW51bGw/dGhpcy5faW50ZWdlcj9lLm5leHRJbnRlZ2VyKHRoaXMuX21pbixNYXRoLmNlaWwodGhpcy5fbWF4KS0xKTplLm5leHRGbG9hdCh0aGlzLl9taW4sdGhpcy5fbWF4KTpudWxsfXNlcmlhbGl6ZVZhbHVlKCl7Y29uc3QgZT10aGlzLmdldFZhbHVlKCk7cmV0dXJuIHR5cGVvZiBlPT0iYmlnaW50Ij9lLnRvU3RyaW5nKCk6ZX12aWV3VmFsdWVEaWRDaGFuZ2UoZSx0KXt0aGlzLnNldFZhbHVlKHQsZSl9fWNsYXNzIEt0IGV4dGVuZHMgSHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fJGlucHV0PW51bGx9dXBkYXRlVmFsdWUoKXtyZXR1cm4gdGhpcy5fJGlucHV0LnZhbHVlPXRoaXMuZ2V0TW9kZWwoKS5nZXRWYWx1ZSgpLmdldFN0cmluZygpLHRoaXN9cmVuZGVyKCl7Y29uc3QgZT1zdXBlci5yZW5kZXIoKTtyZXR1cm4gZS5jbGFzc0xpc3QuYWRkKCJmaWVsZC10ZXh0IiksZX1yZW5kZXJGaWVsZCgpe3RoaXMuXyRpbnB1dD1tLmNyZWF0ZUVsZW1lbnQoImlucHV0Iix7Y2xhc3NOYW1lOiJmaWVsZC10ZXh0X19pbnB1dCIsaWQ6dGhpcy5nZXRJZCgpLHR5cGU6InRleHQiLHNwZWxsY2hlY2s6ITEsb25JbnB1dDp0aGlzLmlucHV0VmFsdWVEaWRDaGFuZ2UuYmluZCh0aGlzKSxvbkZvY3VzOnQ9PnRoaXMuZm9jdXMoKSxvbkJsdXI6dD0+dGhpcy5ibHVyKCl9KTtjb25zdCBlPXN1cGVyLnJlbmRlckZpZWxkKCk7cmV0dXJuIGUuY2xhc3NMaXN0LnJlbW92ZSgiZmllbGRfX2ZpZWxkIiksZS5jbGFzc0xpc3QuYWRkKCJmaWVsZC10ZXh0X19maWVsZCIpLGUuYXBwZW5kQ2hpbGQodGhpcy5fJGlucHV0KSxlfWlucHV0VmFsdWVEaWRDaGFuZ2UoZSl7dGhpcy5nZXRNb2RlbCgpLnZpZXdWYWx1ZURpZENoYW5nZSh0aGlzLHRoaXMuXyRpbnB1dC52YWx1ZSl9fWNsYXNzIFp0IGV4dGVuZHMgaWV7Y29uc3RydWN0b3IoZSx0PXt9KXtzdXBlcihlLHQpLHRoaXMuX3ZpZXdQcm90b3R5cGU9S3QsdGhpcy5fdmFsdWU9eS53cmFwKHQudmFsdWV8fG51bGwpLHRoaXMuX21pbkxlbmd0aD1udWxsLHRoaXMuX21heExlbmd0aD1udWxsLHRoaXMuX3doaXRlbGlzdENoYXJzPW51bGwsdGhpcy5fYmxhY2tsaXN0Q2hhcnM9bnVsbCx0aGlzLl91bmlxdWVDaGFycz0hMSx0aGlzLl9jYXNlU2Vuc2l0aXZpdHk9bnVsbCx0aGlzLnNldE1pbkxlbmd0aCh0Lm1pbkxlbmd0aCE9PXZvaWQgMD90Lm1pbkxlbmd0aDpudWxsLCExKSx0aGlzLnNldE1heExlbmd0aCh0Lm1heExlbmd0aCE9PXZvaWQgMD90Lm1heExlbmd0aDpudWxsLCExKSx0aGlzLnNldFdoaXRlbGlzdENoYXJzKHQud2hpdGVsaXN0Q2hhcnN8fG51bGwsITEpLHRoaXMuc2V0QmxhY2tsaXN0Q2hhcnModC5ibGFja2xpc3RDaGFyc3x8bnVsbCwhMSksdGhpcy5zZXRVbmlxdWVDaGFycyh0LnVuaXF1ZUNoYXJzfHwhMSwhMSksdGhpcy5zZXRDYXNlU2Vuc2l0aXZpdHkodC5jYXNlU2Vuc2l0aXZpdHkhPT0hMSwhMSl9Z2V0TWluTGVuZ3RoKCl7cmV0dXJuIHRoaXMuX21pbkxlbmd0aH1zZXRNaW5MZW5ndGgoZSx0PSEwKXtyZXR1cm4gdGhpcy5fbWluTGVuZ3RoPT09ZT90aGlzOih0aGlzLl9taW5MZW5ndGg9ZSE9PW51bGw/cGFyc2VJbnQoZSk6bnVsbCx0P3RoaXMucmV2YWxpZGF0ZVZhbHVlKCk6dGhpcyl9Z2V0TWF4TGVuZ3RoKCl7cmV0dXJuIHRoaXMuX21heExlbmd0aH1zZXRNYXhMZW5ndGgoZSx0PSEwKXtyZXR1cm4gdGhpcy5fbWF4TGVuZ3RoPT09ZT90aGlzOih0aGlzLl9tYXhMZW5ndGg9ZSE9PW51bGw/cGFyc2VJbnQoZSk6bnVsbCx0P3RoaXMucmV2YWxpZGF0ZVZhbHVlKCk6dGhpcyl9Z2V0V2hpdGVsaXN0Q2hhcnMoKXtyZXR1cm4gdGhpcy5fd2hpdGVsaXN0Q2hhcnN9c2V0V2hpdGVsaXN0Q2hhcnMoZSx0PSEwKXtyZXR1cm4gdGhpcy5fd2hpdGVsaXN0Q2hhcnM9ZSE9PW51bGw/eS53cmFwKGUpLmdldENvZGVQb2ludHMoKTpudWxsLHQ/dGhpcy5yZXZhbGlkYXRlVmFsdWUoKTp0aGlzfWdldEJsYWNrbGlzdENoYXJzKCl7cmV0dXJuIHRoaXMuX2JsYWNrbGlzdENoYXJzfXNldEJsYWNrbGlzdENoYXJzKGUsdD0hMCl7cmV0dXJuIHRoaXMuX2JsYWNrbGlzdENoYXJzPWUhPT1udWxsP3kud3JhcChlKS5nZXRDb2RlUG9pbnRzKCk6bnVsbCx0P3RoaXMucmV2YWxpZGF0ZVZhbHVlKCk6dGhpc31pc1VuaXF1ZUNoYXJzKCl7cmV0dXJuIHRoaXMuX3VuaXF1ZUNoYXJzfXNldFVuaXF1ZUNoYXJzKGUsdD0hMCl7cmV0dXJuIHRoaXMuX3VuaXF1ZUNoYXJzPT09ZT90aGlzOih0aGlzLl91bmlxdWVDaGFycz1lLHQ/dGhpcy5yZXZhbGlkYXRlVmFsdWUoKTp0aGlzKX1pc0Nhc2VTZW5zaXRpdmUoKXtyZXR1cm4gdGhpcy5fY2FzZVNlbnNpdGl2aXR5fXNldENhc2VTZW5zaXRpdml0eShlLHQ9ITApe3JldHVybiB0aGlzLl9jYXNlU2Vuc2l0aXZpdHk9PT1lP3RoaXM6KHRoaXMuX2Nhc2VTZW5zaXRpdml0eT1lLHQ/dGhpcy5yZXZhbGlkYXRlVmFsdWUoKTp0aGlzKX12YWxpZGF0ZVZhbHVlKGUpe2lmKHR5cGVvZiBlLnRvU3RyaW5nIT0iZnVuY3Rpb24iKXJldHVybntrZXk6InRleHRJbnZhbGlkU3RyaW5nIixtZXNzYWdlOiJUaGUgdmFsdWUgY2FuJ3QgYmUgY2FzdGVkIHRvIGEgc3RyaW5nIn07Y29uc3QgdD10aGlzLmZpbHRlclZhbHVlKGUpO2lmKHRoaXMuX21pbkxlbmd0aCE9PW51bGwmJnQuZ2V0TGVuZ3RoKCk8dGhpcy5fbWluTGVuZ3RoKXJldHVybntrZXk6InRleHRMZW5ndGhUb29TaG9ydCIsbWVzc2FnZTpgVGhlIHZhbHVlIG11c3QgYmUgYXQgbGVhc3QgJHt0aGlzLl9taW5MZW5ndGh9ICR7dGhpcy5fbWluTGVuZ3RoPT09MT8iY2hhcmFjdGVyIjoiY2hhcmFjdGVycyJ9IGxvbmdgfTtpZih0aGlzLl9tYXhMZW5ndGghPT1udWxsJiZ0LmdldExlbmd0aCgpPnRoaXMuX21heExlbmd0aClyZXR1cm57a2V5OiJ0ZXh0TGVuZ3RoVG9vTG9uZyIsbWVzc2FnZTpgVGhlIHZhbHVlIG11c3Qgbm90IGV4Y2VlZCAke3RoaXMuX21heExlbmd0aH0gJHt0aGlzLl9tYXhMZW5ndGg9PT0xPyJjaGFyYWN0ZXIiOiJjaGFyYWN0ZXJzIn0gaW4gbGVuZ3RoYH07aWYodGhpcy5fdW5pcXVlQ2hhcnMmJiFFLmlzVW5pcXVlKHQuZ2V0Q29kZVBvaW50cygpKSlyZXR1cm57a2V5OiJ0ZXh0Q2hhcmFjdGVyc05vdFVuaXF1ZSIsbWVzc2FnZToiVGhlIHZhbHVlIG11c3Qgbm90IGNvbnRhaW4gZHVwbGljYXRlIGNoYXJhY3RlcnMifTtpZih0aGlzLl93aGl0ZWxpc3RDaGFycyE9PW51bGx8fHRoaXMuX2JsYWNrbGlzdENoYXJzIT09bnVsbCl7Y29uc3QgaT10aGlzLl93aGl0ZWxpc3RDaGFycyxzPXRoaXMuX2JsYWNrbGlzdENoYXJzO2xldCBuPVtdLHI7Zm9yKGxldCBhPTA7YTx0LmdldExlbmd0aCgpO2ErKylyPXQuZ2V0Q29kZVBvaW50QXQoYSksKGkhPT1udWxsJiZpLmluZGV4T2Yocik9PT0tMXx8cyE9PW51bGwmJnMuaW5kZXhPZihyKSE9PS0xKSYmbi5wdXNoKHQuZ2V0Q2hhckF0KGEpKTtpZihuLmxlbmd0aD4wKXJldHVybiBuPUUudW5pcXVlKG4pLHtrZXk6InRleHRGb3JiaWRkZW5DaGFyYWN0ZXIiLG1lc3NhZ2U6YFRoZSB2YWx1ZSBjb250YWlucyBmb3JiaWRkZW4gY2hhcmFjdGVyczogJyR7bi5qb2luKCIiKX0nYH19cmV0dXJuIHN1cGVyLnZhbGlkYXRlVmFsdWUodCl9ZmlsdGVyVmFsdWUoZSl7cmV0dXJuIGU9eS53cmFwKGUpLHRoaXMuX2Nhc2VTZW5zaXRpdml0eT09PSExJiYoZT1lLnRvTG93ZXJDYXNlKCkpLHkud3JhcChzdXBlci5maWx0ZXJWYWx1ZShlKSl9cmFuZG9taXplVmFsdWUoZSl7Y29uc3QgdD1zdXBlci5yYW5kb21pemVWYWx1ZShlKTtpZih0IT09bnVsbClyZXR1cm4gdDtpZih0aGlzLmlzVmFsaWQoKSl7aWYodGhpcy5pc1VuaXF1ZUNoYXJzKCkpe2NvbnN0IGk9dGhpcy5nZXRWYWx1ZSgpLmdldENvZGVQb2ludHMoKTtyZXR1cm4geS53cmFwKEUuc2h1ZmZsZShpLGUpKX1lbHNlIGlmKHRoaXMuZ2V0V2hpdGVsaXN0Q2hhcnMoKSE9PW51bGwpe2NvbnN0IGk9dGhpcy5nZXRWYWx1ZSgpLmdldExlbmd0aCgpLHM9W107Zm9yKGxldCBuPTA7bjxpO24rKylzLnB1c2goZS5uZXh0Q2hvaWNlKHRoaXMuZ2V0V2hpdGVsaXN0Q2hhcnMoKSkpO3JldHVybiB5LndyYXAocyl9fXJldHVybiBudWxsfXNlcmlhbGl6ZVZhbHVlKCl7cmV0dXJuIHRoaXMuZ2V0VmFsdWUoKS5nZXRTdHJpbmcoKX1leHRyYWN0VmFsdWUoZSl7aWYodHlwZW9mIGUhPSJzdHJpbmciKXRocm93IG5ldyBFcnJvcihgVmFsdWUgb2YgZmllbGQgJyR7dGhpcy5nZXROYW1lKCl9JyBpcyBleHBlY3RlZCB0byBiZSBhIHN0cmluZy5gKTtyZXR1cm4geS53cmFwKGUpfXZpZXdWYWx1ZURpZENoYW5nZShlLHQpe3RoaXMuc2V0VmFsdWUodCxlKX19bGV0IFdlPW51bGw7Y2xhc3Mgb3QgZXh0ZW5kcyBJdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCk7Y29uc3QgZT17Ym9vbGVhbjpxdCxieXRlczpqdCxlbnVtOld0LG51bWJlcjpHdCx0ZXh0Olp0fTtmb3IoY29uc3QgdCBpbiBlKXRoaXMucmVnaXN0ZXIodCxlW3RdKX1jcmVhdGUoZSl7aWYoIWUubmFtZSl0aHJvdyBuZXcgRXJyb3IoIkZpZWxkIHNwZWNpZmljYXRpb24gcmVxdWlyZXMgYSAnbmFtZScgZmllbGQuIik7aWYoZS50eXBlKXtpZighdGhpcy5leGlzdHMoZS50eXBlKSl0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gRmllbGQgdHlwZSAnJHtlLnR5cGV9Jy5gKX1lbHNlIHRocm93IG5ldyBFcnJvcigiRmllbGQgc3BlY2lmaWNhdGlvbiByZXF1aXJlcyBhICd0eXBlJyBmaWVsZC4iKTtyZXR1cm4gc3VwZXIuY3JlYXRlKGUudHlwZSxlLm5hbWUsZSl9c3RhdGljIGdldEluc3RhbmNlKCl7cmV0dXJuIFdlPT09bnVsbCYmKFdlPW5ldyBvdCksV2V9fWNsYXNzIFh0IGV4dGVuZHMgbGV7Y29uc3RydWN0b3IoZT1bXSx0PW51bGwpe3N1cGVyKCksdGhpcy5fdmlld1Byb3RvdHlwZT1rdCx0aGlzLl9kZWxlZ2F0ZT1udWxsLHRoaXMuX2ZpZWxkRmFjdG9yeT10LHRoaXMuX2ZpZWxkcz1bXSx0aGlzLmFkZEZpZWxkcyhlKX1nZXRGaWVsZHMoKXtyZXR1cm4gdGhpcy5fZmllbGRzLnNsaWNlKCl9Z2V0SW52YWxpZEZpZWxkcygpe3JldHVybiB0aGlzLl9maWVsZHMuZmlsdGVyKGU9PiFlLmlzVmFsaWQoKSl9Z2V0VmlzaWJsZUZpZWxkcygpe3JldHVybiB0aGlzLl9maWVsZHMuZmlsdGVyKGU9PmUuaXNWaXNpYmxlKCkpfWFkZEZpZWxkcyhlKXtyZXR1cm4gZS5mb3JFYWNoKHRoaXMuYWRkRmllbGQuYmluZCh0aGlzKSksdGhpc31nZXRGaWVsZChlKXtyZXR1cm4gdGhpcy5fZmllbGRzLmZpbmQodD0+dC5nZXROYW1lKCk9PT1lKXx8bnVsbH1hZGRGaWVsZChlKXtsZXQgdD1lO2lmKCEoZSBpbnN0YW5jZW9mIGllKSl7Y29uc3QgaT1lO2kucHJpb3JpdHk9PT12b2lkIDAmJihpLnByaW9yaXR5PXRoaXMuX2NhbGN1bGF0ZURlZmF1bHRQcmlvcml0eSgpKSx0PXRoaXMuZ2V0RmllbGRGYWN0b3J5KCkuY3JlYXRlKGkpfWlmKHRoaXMuZ2V0RmllbGQodC5nZXROYW1lKCkpKXRocm93IG5ldyBFcnJvcihgTmFtZSAnJHt0LmdldE5hbWUoKX0nIGlzIGFscmVhZHkgYXNzaWduZWQgdG8gYSBmaWVsZC5gKTtyZXR1cm4gdGhpcy5fZmllbGRzLnB1c2godCksdC5zZXREZWxlZ2F0ZSh0aGlzKSx0aGlzLl9zb3J0RmllbGRzKCksdC5pc1Zpc2libGUoKSYmdGhpcy5oYXNWaWV3KCkmJnRoaXMuZ2V0VmlldygpLmFkZFN1YnZpZXcodC5nZXRWaWV3KCkpLHRoaXN9Z2V0RmllbGRWYWx1ZShlKXtjb25zdCB0PXRoaXMuZ2V0RmllbGQoZSk7aWYodD09PW51bGwpdGhyb3cgbmV3IEVycm9yKGBUaGVyZSBpcyBubyBmaWVsZCBhc3NpZ25lZCB0byB0aGUgbmFtZSAnJHtlfScuYCk7cmV0dXJuIHQuZ2V0VmFsdWUoKX1zZXRGaWVsZFZhbHVlKGUsdCl7Y29uc3QgaT10aGlzLmdldEZpZWxkKGUpO2lmKGk9PT1udWxsKXRocm93IG5ldyBFcnJvcihgVGhlcmUgaXMgbm8gZmllbGQgYXNzaWduZWQgdG8gdGhlIG5hbWUgJyR7ZX0nLmApO3JldHVybiBpLnNldFZhbHVlKHQpLHRoaXN9Z2V0RmllbGRWYWx1ZXMoKXtjb25zdCBlPXt9O3JldHVybiB0aGlzLmdldFZpc2libGVGaWVsZHMoKS5mb3JFYWNoKHQ9PntlW3QuZ2V0TmFtZSgpXT10LmdldFZhbHVlKCl9KSxlfXNldEZpZWxkVmFsdWVzKGUpe2Zvcihjb25zdCB0IGluIGUpdGhpcy5zZXRGaWVsZFZhbHVlKHQsZVt0XSk7cmV0dXJuIHRoaXN9Z2V0RmllbGRGYWN0b3J5KCl7cmV0dXJuIHRoaXMuX2ZpZWxkRmFjdG9yeT09PW51bGwmJih0aGlzLl9maWVsZEZhY3Rvcnk9b3QuZ2V0SW5zdGFuY2UoKSksdGhpcy5fZmllbGRGYWN0b3J5fXNldEZpZWxkRmFjdG9yeShlKXtyZXR1cm4gdGhpcy5fZmllbGRGYWN0b3J5PWUsdGhpc31pc1ZhbGlkKCl7cmV0dXJuIHRoaXMuZ2V0SW52YWxpZEZpZWxkcygpLmxlbmd0aD09PTB9aXNSYW5kb21pemFibGUoKXtyZXR1cm4gdGhpcy5fZmllbGRzLmZpbmQoZT0+ZS5pc1JhbmRvbWl6YWJsZSgpKSE9PXZvaWQgMH1yYW5kb21pemUoKXtyZXR1cm4gdGhpcy5fZmllbGRzLmZpbHRlcihlPT5lLmlzVmlzaWJsZSgpJiZlLmlzUmFuZG9taXphYmxlKCkpLmZvckVhY2goZT0+ZS5yYW5kb21pemUoKSksdGhpc31nZXREZWxlZ2F0ZSgpe3JldHVybiB0aGlzLl9kZWxlZ2F0ZX1zZXREZWxlZ2F0ZShlKXtyZXR1cm4gdGhpcy5fZGVsZWdhdGU9ZSx0aGlzfXNlcmlhbGl6ZVZhbHVlcygpe2NvbnN0IGU9e307cmV0dXJuIHRoaXMuZ2V0VmlzaWJsZUZpZWxkcygpLmZvckVhY2godD0+e2VbdC5nZXROYW1lKCldPXQuc2VyaWFsaXplVmFsdWUoKX0pLGV9ZXh0cmFjdChlKXtyZXR1cm4gdGhpcy5zZXRGaWVsZFZhbHVlcyh0aGlzLmV4dHJhY3RWYWx1ZXMoZSkpfWV4dHJhY3RWYWx1ZXMoZSl7aWYodHlwZW9mIGUhPSJvYmplY3QiKXRocm93IG5ldyBFcnJvcihgU2VyaWFsaXplZCBmb3JtIHZhbHVlcyBpcyBleHBlY3RlZCB0byBiZSBhbiBvYmplY3QgbWFwcGluZyBmaWVsZCBuYW1lcyB0byB0aGVpciByZXNwZWN0aXZlIHNlcmlhbGl6ZWQgdmFsdWVzLiBSZWNlaXZlZCB2YWx1ZSB0eXBlICcke3R5cGVvZiBlfScuYCk7Y29uc3QgdD17fTtmb3IoY29uc3QgaSBpbiBlKXtpZih0eXBlb2YgaSE9InN0cmluZyIpdGhyb3cgbmV3IEVycm9yKGBGaWVsZCBuYW1lIGlzIGV4cGVjdGVkIHRvIGJlIGEgc3RyaW5nLiBSZWNlaXZlZCB0eXBlICcke3R5cGVvZiBpfScuYCk7Y29uc3Qgcz10aGlzLmdldEZpZWxkKGkpO2lmKHM9PT1udWxsKXRocm93IG5ldyBFcnJvcihgVGhlcmUgaXMgbm8gZmllbGQgYXNzaWduZWQgdG8gdGhlIG5hbWUgJyR7aX0nLmApO3RbaV09cy5leHRyYWN0VmFsdWUoZVtpXSl9cmV0dXJuIHR9X2NhbGN1bGF0ZURlZmF1bHRQcmlvcml0eSgpe2lmKHRoaXMuX2ZpZWxkcy5sZW5ndGg9PT0wKXJldHVybiAwO2xldCBlPXRoaXMuX2ZpZWxkc1swXS5nZXRQcmlvcml0eSgpO2ZvcihsZXQgdD0xO3Q8dGhpcy5fZmllbGRzLmxlbmd0aDt0KyspZT1NYXRoLm1pbihlLHRoaXMuX2ZpZWxkc1t0XS5nZXRQcmlvcml0eSgpKTtyZXR1cm4gZS0xfV9zb3J0RmllbGRzKCl7dGhpcy5fZmllbGRzLnNvcnQoKGUsdCk9PnQuZ2V0UHJpb3JpdHkoKS1lLmdldFByaW9yaXR5KCkpfWRpZENyZWF0ZVZpZXcoZSl7dGhpcy5fZmllbGRzLmZvckVhY2godD0+dGhpcy5maWVsZE5lZWRzTGF5b3V0KHQpKX1maWVsZFByaW9yaXR5RGlkQ2hhbmdlKGUsdCl7dGhpcy5fc29ydEZpZWxkcygpfWZpZWxkTmVlZHNMYXlvdXQoZSl7dGhpcy5oYXNWaWV3KCkmJihlLmdldFZpZXcoKS5yZW1vdmVGcm9tU3VwZXJ2aWV3KCksZS5pc1Zpc2libGUoKSYmdGhpcy5nZXRWaWV3KCkuYWRkU3VidmlldyhlLmdldFZpZXcoKSkpfWZpZWxkVmFsdWVEaWRDaGFuZ2UoZSx0KXt0aGlzLl9kZWxlZ2F0ZSYmdGhpcy5fZGVsZWdhdGUuZm9ybVZhbHVlRGlkQ2hhbmdlJiZ0aGlzLmdldERlbGVnYXRlKCkuZm9ybVZhbHVlRGlkQ2hhbmdlKHRoaXMsZSx0KX19Y2xhc3MgWCBleHRlbmRzIGxle3N0YXRpYyBnZXRNZXRhKCl7dGhyb3cgbmV3IEVycm9yKCJCcmljayBzdGF0aWMgbWV0aG9kICdnZXRNZXRhJyBoYXMgbm90IGJlZW4gb3ZlcnJpZGRlbi4iKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fcGlwZT1udWxsLHRoaXMuX3ZpZXdQcm90b3R5cGU9YWUsdGhpcy5fc2V0dGluZ3NGb3JtPW5ldyBYdCx0aGlzLl9zZXR0aW5nc0Zvcm0uc2V0RGVsZWdhdGUodGhpcyksdGhpcy5fdGl0bGU9bnVsbCx0aGlzLl9oaWRkZW49ITF9Z2V0UGlwZSgpe3JldHVybiB0aGlzLl9waXBlfWhhc1BpcGUoKXtyZXR1cm4gdGhpcy5fcGlwZSE9PW51bGx9c2V0UGlwZShlKXtyZXR1cm4gdGhpcy5fcGlwZT1lLHRoaXN9Z2V0TWV0YSgpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLmdldE1ldGEoKX1nZXROYW1lKCl7cmV0dXJuIHRoaXMuZ2V0TWV0YSgpLm5hbWV9Z2V0VGl0bGUoKXtyZXR1cm4gdGhpcy5fdGl0bGU9PT1udWxsP3RoaXMuZ2V0TWV0YSgpLnRpdGxlOnRoaXMuX3RpdGxlfXNldFRpdGxlKGUpe3JldHVybiB0aGlzLl90aXRsZT1lJiZlIT09dGhpcy5nZXRNZXRhKCkudGl0bGU/ZTpudWxsLHRoaXN9aXNIaWRkZW4oKXtyZXR1cm4gdGhpcy5faGlkZGVufXNldEhpZGRlbihlPSEwKXtyZXR1cm4gdGhpcy5faGlkZGVuIT09ZSYmKHRoaXMuX2hpZGRlbj1lLHRoaXMuaGFzUGlwZSgpJiZ0aGlzLmdldFBpcGUoKS5icmlja1Zpc2liaWxpdHlEaWRDaGFuZ2UodGhpcyxlKSksdGhpc31nZXRTZXR0aW5nc0Zvcm0oKXtyZXR1cm4gdGhpcy5fc2V0dGluZ3NGb3JtfWdldFNldHRpbmdzKCl7cmV0dXJuIHRoaXMuX3NldHRpbmdzRm9ybS5nZXRGaWVsZHMoKX1hZGRTZXR0aW5ncyhlKXtyZXR1cm4gdGhpcy5fc2V0dGluZ3NGb3JtLmFkZEZpZWxkcyhlKSx0aGlzfWdldFNldHRpbmcoZSl7cmV0dXJuIHRoaXMuX3NldHRpbmdzRm9ybS5nZXRGaWVsZChlKX1hZGRTZXR0aW5nKGUpe3JldHVybiB0aGlzLl9zZXR0aW5nc0Zvcm0uYWRkRmllbGQoZSksdGhpc31nZXRTZXR0aW5nVmFsdWUoZSl7cmV0dXJuIHRoaXMuX3NldHRpbmdzRm9ybS5nZXRGaWVsZFZhbHVlKGUpfXNldFNldHRpbmdWYWx1ZShlLHQpe3JldHVybiB0aGlzLl9zZXR0aW5nc0Zvcm0uc2V0RmllbGRWYWx1ZShlLHQpLHRoaXN9Z2V0U2V0dGluZ1ZhbHVlcygpe3JldHVybiB0aGlzLl9zZXR0aW5nc0Zvcm0uZ2V0RmllbGRWYWx1ZXMoKX1zZXRTZXR0aW5nVmFsdWVzKGUpe3JldHVybiB0aGlzLl9zZXR0aW5nc0Zvcm0uc2V0RmllbGRWYWx1ZXMoZSksdGhpc31pc1ZhbGlkKCl7cmV0dXJuIHRoaXMuX3NldHRpbmdzRm9ybS5pc1ZhbGlkKCl9aXNTZXR0aW5nVmFsaWQoLi4uZSl7cmV0dXJuIGUuZmluZCh0PT4hdGhpcy5nZXRTZXR0aW5nKHQpLmlzVmFsaWQoKSk9PT12b2lkIDB9aXNSYW5kb21pemFibGUoKXtyZXR1cm4gdGhpcy5fc2V0dGluZ3NGb3JtLmlzUmFuZG9taXphYmxlKCl9cmFuZG9taXplKCl7cmV0dXJuIHRoaXMuX3NldHRpbmdzRm9ybS5yYW5kb21pemUoKSx0aGlzfWZvcm1WYWx1ZURpZENoYW5nZShlLHQsaSl7ZT09PXRoaXMuX3NldHRpbmdzRm9ybSYmKHRoaXMuc2V0dGluZ1ZhbHVlRGlkQ2hhbmdlKHQsaSksdGhpcy5oYXNQaXBlKCkmJnRoaXMuZ2V0UGlwZSgpLmJyaWNrU2V0dGluZ0RpZENoYW5nZSh0aGlzKSl9c2V0dGluZ1ZhbHVlRGlkQ2hhbmdlKGUsdCl7fWRpZENyZWF0ZVZpZXcoZSl7ZS5hZGRTdWJ2aWV3KHRoaXMuX3NldHRpbmdzRm9ybS5nZXRWaWV3KCkpfXZpZXdNZW51SXRlbURpZENsaWNrKGUsdCl7c3dpdGNoKE4udHJpZ2dlcigiYnJpY2tNZW51SXRlbUNsaWNrIix7YnJpY2s6dGhpcyxtZW51SXRlbTp0fSksdCl7Y2FzZSJyZW1vdmUiOnRoaXMuZ2V0UGlwZSgpLnJlbW92ZUJyaWNrKHRoaXMpO2JyZWFrO2Nhc2UiaGlkZSI6dGhpcy5zZXRIaWRkZW4oITApO2JyZWFrO2Nhc2UiZHVwbGljYXRlIjp0aGlzLmlzVmFsaWQoKSYmdGhpcy5nZXRQaXBlKCkuZHVwbGljYXRlQnJpY2sodGhpcyk7YnJlYWs7Y2FzZSJyYW5kb21pemUiOnRoaXMucmFuZG9taXplKCk7YnJlYWt9fXZpZXdSZXBsYWNlQnV0dG9uRGlkQ2xpY2soZSl7dGhpcy5oYXNQaXBlKCkmJihOLnRyaWdnZXIoImJyaWNrUmVwbGFjZUJ1dHRvbkNsaWNrIix7YnJpY2s6dGhpc30pLHRoaXMuZ2V0UGlwZSgpLmJyaWNrUmVwbGFjZUJ1dHRvbkRpZENsaWNrKHRoaXMpKX1zZXJpYWxpemUoKXtjb25zdCBlPXt9O2UubmFtZT10aGlzLmdldE5hbWUoKSx0aGlzLl90aXRsZSE9PW51bGwmJihlLnRpdGxlPXRoaXMuX3RpdGxlKSx0aGlzLmlzSGlkZGVuKCkmJihlLmhpZGRlbj0hMCk7Y29uc3QgdD10aGlzLl9zZXR0aW5nc0Zvcm0uc2VyaWFsaXplVmFsdWVzKCk7cmV0dXJuIE9iamVjdC5rZXlzKHQpLmxlbmd0aD4wJiYoZS5zZXR0aW5ncz10KSxlfWNvcHkoKXtpZighdGhpcy5pc1ZhbGlkKCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGJyaWNrcyBjYW4ndCBiZSBjb3BpZWQuIik7Y29uc3QgZT1uZXcgdGhpcy5jb25zdHJ1Y3RvcjtyZXR1cm4gZS5zZXRUaXRsZSh0aGlzLmdldFRpdGxlKCkpLGUuc2V0SGlkZGVuKHRoaXMuaXNIaWRkZW4oKSksZS5zZXRTZXR0aW5nVmFsdWVzKHRoaXMuZ2V0U2V0dGluZ1ZhbHVlcygpKSxlfXN0YXRpYyBleHRyYWN0KGUsdCl7aWYodHlwZW9mIGUubmFtZSE9InN0cmluZyIpdGhyb3cgbmV3IEVycm9yKCJCcmljayBwcm9wZXJ0eSAnbmFtZScgaXMgZXhwZWN0ZWQgdG8gYmUgb2YgdHlwZSAnc3RyaW5nJyIpO2NvbnN0IGk9ZS5uYW1lO2lmKCF0LmV4aXN0cyhpKSl0aHJvdyBuZXcgRXJyb3IoYEJyaWNrIHByb3BlcnR5ICduYW1lJyByZWZlcnMgdG8gYW4gdW5rbm93biBicmljayAnJHtpfSdgKTtjb25zdCBzPXQuY3JlYXRlKGkpO2lmKGUudGl0bGUhPT12b2lkIDApe2lmKHR5cGVvZiBlLnRpdGxlIT0ic3RyaW5nIil0aHJvdyBuZXcgRXJyb3IoIk9wdGlvbmFsIGJyaWNrIHByb3BlcnR5ICd0aXRsZScgaXMgZXhwZWN0ZWQgdG8gYmUgb2YgdHlwZSAnc3RyaW5nJyIpO3Muc2V0VGl0bGUoZS50aXRsZSl9aWYoZS5oaWRkZW4hPT12b2lkIDApe2lmKHR5cGVvZiBlLmhpZGRlbiE9ImJvb2xlYW4iKXRocm93IG5ldyBFcnJvcigiT3B0aW9uYWwgYnJpY2sgcHJvcGVydHkgJ2hpZGRlbicgaXMgZXhwZWN0ZWQgdG8gYmUgb2YgdHlwZSAnYm9vbGVhbiciKTtzLnNldEhpZGRlbihlLmhpZGRlbil9aWYoZS5yZXZlcnNlIT09dm9pZCAwKXtpZih0eXBlb2Ygcy5zZXRSZXZlcnNlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiT3B0aW9uYWwgYnJpY2sgcHJvcGVydHkgJ3JldmVyc2UnIGNhbiBvbmx5IGJlIHNldCBvbiBlbmNvZGVyIGJyaWNrcyIpO2lmKHR5cGVvZiBlLnJldmVyc2UhPSJib29sZWFuIil0aHJvdyBuZXcgRXJyb3IoIk9wdGlvbmFsIGJyaWNrIHByb3BlcnR5ICdyZXZlcnNlJyBpcyBleHBlY3RlZCB0byBiZSBvZiB0eXBlICdib29sZWFuJyIpO3Muc2V0UmV2ZXJzZShlLnJldmVyc2UpfXJldHVybiBlLnNldHRpbmdzIT09dm9pZCAwJiZzLmdldFNldHRpbmdzRm9ybSgpLmV4dHJhY3QoZS5zZXR0aW5ncyksc319Y2xhc3MgSnQgZXh0ZW5kcyBhZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fJGVuY29kZUFjdGlvbj1udWxsLHRoaXMuXyRkZWNvZGVBY3Rpb249bnVsbH1yZW5kZXIoKXtjb25zdCBlPXN1cGVyLnJlbmRlcigpO3JldHVybiBlLmNsYXNzTGlzdC5hZGQoImVuY29kZXIiKSxlfXJlbmRlckhlYWRlcigpe3RoaXMuXyRlbmNvZGVBY3Rpb249bS5jcmVhdGVFbGVtZW50KCJhIix7Y2xhc3NOYW1lOiJicmlja19fYWN0aW9uIGJyaWNrX19hY3Rpb24tLWFjdGl2ZSIsaHJlZjoiIyIsb25DbGljazp0aGlzLmFjdGlvbkRpZENsaWNrLmJpbmQodGhpcywiZW5jb2RlIiksZHJhZ2dhYmxlOiExfSwiRW5jb2RlIiksdGhpcy5fJGRlY29kZUFjdGlvbj1tLmNyZWF0ZUVsZW1lbnQoImEiLHtjbGFzc05hbWU6ImJyaWNrX19hY3Rpb24iLGhyZWY6IiMiLG9uQ2xpY2s6dGhpcy5hY3Rpb25EaWRDbGljay5iaW5kKHRoaXMsImRlY29kZSIpLGRyYWdnYWJsZTohMX0sIkRlY29kZSIpO2NvbnN0IGU9bS5jcmVhdGVFbGVtZW50KCJ1bCIse2NsYXNzTmFtZToiYnJpY2tfX2FjdGlvbnMifSxbbS5jcmVhdGVFbGVtZW50KCJsaSIse2NsYXNzTmFtZToiYnJpY2tfX2FjdGlvbi1pdGVtIn0sdGhpcy5fJGVuY29kZUFjdGlvbiksbS5jcmVhdGVFbGVtZW50KCJsaSIse2NsYXNzTmFtZToiYnJpY2tfX2FjdGlvbi1pdGVtIn0sdGhpcy5fJGRlY29kZUFjdGlvbildKSx0PXN1cGVyLnJlbmRlckhlYWRlcigpO3JldHVybiB0Lmluc2VydEJlZm9yZShlLHQuZmlyc3RDaGlsZCksdH1yZW5kZXJDb250ZW50KCl7cmV0dXJuIG51bGx9YWN0aW9uRGlkQ2xpY2soZSx0KXt0LnByZXZlbnREZWZhdWx0KCk7Y29uc3QgaT1lPT09ImRlY29kZSI7dGhpcy5nZXRNb2RlbCgpLmlzUmV2ZXJzZSgpIT09aSYmdGhpcy5nZXRNb2RlbCgpLnZpZXdEaWRSZXZlcnNlKHRoaXMpfXVwZGF0ZSgpe2NvbnN0IGU9dGhpcy5nZXRNb2RlbCgpLmlzUmV2ZXJzZSgpO2U/KHRoaXMuXyRlbmNvZGVBY3Rpb24uY2xhc3NMaXN0LnJlbW92ZSgiYnJpY2tfX2FjdGlvbi0tYWN0aXZlIiksdGhpcy5fJGRlY29kZUFjdGlvbiYmdGhpcy5fJGRlY29kZUFjdGlvbi5jbGFzc0xpc3QuYWRkKCJicmlja19fYWN0aW9uLS1hY3RpdmUiKSk6KHRoaXMuXyRlbmNvZGVBY3Rpb24uY2xhc3NMaXN0LmFkZCgiYnJpY2tfX2FjdGlvbi0tYWN0aXZlIiksdGhpcy5fJGRlY29kZUFjdGlvbiYmdGhpcy5fJGRlY29kZUFjdGlvbi5jbGFzc0xpc3QucmVtb3ZlKCJicmlja19fYWN0aW9uLS1hY3RpdmUiKSk7Y29uc3QgdD10aGlzLmdldE1vZGVsKCkuZ2V0TGFzdEVycm9yKCksaT10aGlzLmdldE1vZGVsKCkuZ2V0TGFzdFRyYW5zbGF0aW9uTWV0YSgpO2lmKGkhPT1udWxsKXtjb25zdCBzPWkuaXNFbmNvZGU/ImZvcndhcmQiOiJiYWNrd2FyZCI7bGV0IG49YCR7aS5pc0VuY29kZSE9PWU/IkVuY29kZWQiOiJEZWNvZGVkIn0gYDtyZXR1cm4gaS5jaGFyQ291bnQhPT1udWxsP24rPWAke2kuY2hhckNvdW50fSAke2kuY2hhckNvdW50PT09MT8iY2hhciI6ImNoYXJzIn1gOm4rPWAke2kuYnl0ZUNvdW50fSAke2kuYnl0ZUNvdW50PT09MT8iYnl0ZSI6ImJ5dGVzIn1gLHRoaXMudXBkYXRlU3RhdHVzKHMsbil9cmV0dXJuIHQhPT1udWxsP3RoaXMudXBkYXRlU3RhdHVzKCJlcnJvciIsdC5tZXNzYWdlKTp0aGlzfX1jbGFzcyB2e3N0YXRpYyBtb2QoZSx0KXt0PXQ8MD8tdDp0O2NvbnN0IGk9ZSV0O3JldHVybiBpPDA/aSt0Oml9c3RhdGljIGRpdihlLHQpe3JldHVybiBNYXRoLmZsb29yKGUvdCl9c3RhdGljIGlzQ29wcmltZShlLHQpe3JldHVybiB2LmdjZChlLHQpPT09MX1zdGF0aWMgZ2NkKGUsdCl7Zm9yKDt0IT09MDspe2NvbnN0IGk9ZSV0O2U9dCx0PWl9cmV0dXJuIGV9c3RhdGljIHhnY2QoZSx0KXtpZih0PT09MClyZXR1cm5bMSwwLGVdO3tjb25zdFtpLHMsbl09di54Z2NkKHQsZSV0KTtyZXR1cm5bcyxpLXMqdi5kaXYoZSx0KSxuXX19c3RhdGljIHRpbWUoKXtyZXR1cm4gdHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cucGVyZm9ybWFuY2U8InUiP3dpbmRvdy5wZXJmb3JtYW5jZS5ub3coKTp0eXBlb2YgcHJvY2VzczwidSI/cHJvY2Vzcy5ocnRpbWUoKVsxXS8xZTY6cGFyc2VGbG9hdChuZXcgRGF0ZSgpLmdldFRpbWUoKSl9fWNsYXNzIHcgZXh0ZW5kcyBYe2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl92aWV3UHJvdG90eXBlPUp0LHRoaXMuX3JldmVyc2U9ITEsdGhpcy5fZW5jb2RlT25seT0hMSx0aGlzLl9sYXN0RXJyb3I9bnVsbCx0aGlzLl9sYXN0VHJhbnNsYXRpb25NZXRhPW51bGx9YXN5bmMgZW5jb2RlKGUpe3JldHVybiB0aGlzLnRyYW5zbGF0ZShlLCEwKX1hc3luYyBkZWNvZGUoZSl7cmV0dXJuIHRoaXMudHJhbnNsYXRlKGUsITEpfWFzeW5jIHRyYW5zbGF0ZShlLHQpe3RyeXtjb25zdCBpPXYudGltZSgpO2lmKHQ9PT10aGlzLl9yZXZlcnNlJiZ0aGlzLmlzRW5jb2RlT25seSgpKXRocm93IG5ldyB4KGBEZWNvZGluZyBpcyBub3QgZGVmaW5lZCBpbiBicmljayAnJHt0aGlzLmdldE1ldGEoKS50aXRsZX0nYCk7Y29uc3Qgcz10aGlzLmdldFNldHRpbmdzRm9ybSgpLmdldEludmFsaWRGaWVsZHMoKTtpZihzLmxlbmd0aD4wKXRocm93IG5ldyB4KGBDYW4ndCAke3Q/ImVuY29kZSI6ImRlY29kZSJ9IHdpdGggaW52YWxpZCBzZXR0aW5nczogYCtzLm1hcChuPT5uLmdldExhYmVsKCkrIiAoIisobi5nZXRNZXNzYWdlKCl8fCJub25lIikrIikiKS5qb2luKCIsICIpKTtyZXR1cm4gZT15LndyYXAoZSksdCE9PXRoaXMuX3JldmVyc2U/KGU9eS53cmFwKGF3YWl0IHRoaXMud2lsbEVuY29kZShlKSksZT15LndyYXAoYXdhaXQgdGhpcy5wZXJmb3JtRW5jb2RlKGUpKSxlPXkud3JhcChhd2FpdCB0aGlzLmRpZEVuY29kZShlKSkpOihlPXkud3JhcChhd2FpdCB0aGlzLndpbGxEZWNvZGUoZSkpLGU9eS53cmFwKGF3YWl0IHRoaXMucGVyZm9ybURlY29kZShlKSksZT15LndyYXAoYXdhaXQgdGhpcy5kaWREZWNvZGUoZSkpKSx0aGlzLl9sYXN0RXJyb3I9bnVsbCx0aGlzLl9sYXN0VHJhbnNsYXRpb25NZXRhPXtpc0VuY29kZTp0LGR1cmF0aW9uOnYudGltZSgpLWksYnl0ZUNvdW50OmUubmVlZHNCeXRlRW5jb2RpbmcoKT9udWxsOmUuZ2V0U2l6ZSgpLGNoYXJDb3VudDplLm5lZWRzVGV4dEVuY29kaW5nKCk/bnVsbDplLmdldExlbmd0aCgpfSx0aGlzLnVwZGF0ZVZpZXcoKSxlfWNhdGNoKGkpe3Rocm93IHRoaXMuX2xhc3RFcnJvcj1pLHRoaXMuX2xhc3RUcmFuc2xhdGlvbk1ldGE9bnVsbCx0aGlzLnVwZGF0ZVZpZXcoKSxpfX1pc1JldmVyc2UoKXtyZXR1cm4gdGhpcy5fcmV2ZXJzZX1zZXRSZXZlcnNlKGUpe3JldHVybiB0aGlzLl9yZXZlcnNlIT09ZSYmKHRoaXMuX3JldmVyc2U9ZSx0aGlzLnVwZGF0ZVZpZXcoKSx0aGlzLmhhc1BpcGUoKSYmdGhpcy5nZXRQaXBlKCkuZW5jb2RlckRpZFJldmVyc2UodGhpcyxlKSksdGhpc31pc0VuY29kZU9ubHkoKXtyZXR1cm4gdGhpcy5fZW5jb2RlT25seX1zZXRFbmNvZGVPbmx5KGUpe3JldHVybiB0aGlzLl9lbmNvZGVPbmx5PWUsdGhpc31nZXRMYXN0RXJyb3IoKXtyZXR1cm4gdGhpcy5fbGFzdEVycm9yfWdldExhc3RUcmFuc2xhdGlvbk1ldGEoKXtyZXR1cm4gdGhpcy5fbGFzdFRyYW5zbGF0aW9uTWV0YX1zZXJpYWxpemUoKXtjb25zdCBlPXN1cGVyLnNlcmlhbGl6ZSgpO3JldHVybiB0aGlzLmlzUmV2ZXJzZSgpJiYoZS5yZXZlcnNlPSEwKSxlfWNvcHkoKXtjb25zdCBlPXN1cGVyLmNvcHkoKTtyZXR1cm4gZS5zZXRSZXZlcnNlKHRoaXMuaXNSZXZlcnNlKCkpLGV9d2lsbEVuY29kZShlKXtyZXR1cm4gdGhpcy53aWxsVHJhbnNsYXRlKGUsITApfXBlcmZvcm1FbmNvZGUoZSl7cmV0dXJuIHRoaXMucGVyZm9ybVRyYW5zbGF0ZShlLCEwKX1kaWRFbmNvZGUoZSl7cmV0dXJuIHRoaXMuZGlkVHJhbnNsYXRlKGUsITApfXdpbGxEZWNvZGUoZSl7cmV0dXJuIHRoaXMud2lsbFRyYW5zbGF0ZShlLCExKX1wZXJmb3JtRGVjb2RlKGUpe3JldHVybiB0aGlzLnBlcmZvcm1UcmFuc2xhdGUoZSwhMSl9ZGlkRGVjb2RlKGUpe3JldHVybiB0aGlzLmRpZFRyYW5zbGF0ZShlLCExKX13aWxsVHJhbnNsYXRlKGUsdCl7cmV0dXJuIGV9cGVyZm9ybVRyYW5zbGF0ZShlLHQpe3JldHVybiBlfWRpZFRyYW5zbGF0ZShlLHQpe3JldHVybiBlfXZpZXdEaWRSZXZlcnNlKGUpe3RoaXMuc2V0UmV2ZXJzZSghdGhpcy5pc1JldmVyc2UoKSksTi50cmlnZ2VyKCJlbmNvZGVyUmV2ZXJzZSIse2VuY29kZXI6dGhpcyxyZXZlcnNlOnRoaXMuaXNSZXZlcnNlKCl9KX19Y29uc3QgZGU9MCxIZT0xO2NsYXNzIEV0IGV4dGVuZHMgd3tjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fbW9kZT1kZSx0aGlzLnJlZ2lzdGVyU2VwYXJhdG9yU2V0dGluZygpfXNldENoYXJhY3RlclRvQmxvY2tNb2RlKCl7cmV0dXJuIHRoaXMuX21vZGU9ZGUsdGhpc31zZXRCbG9ja1RvQ2hhcmFjdGVyTW9kZSgpe3JldHVybiB0aGlzLl9tb2RlPUhlLHRoaXN9cmVnaXN0ZXJTZXBhcmF0b3JTZXR0aW5nKCl7cmV0dXJuIHRoaXMuYWRkU2V0dGluZyh7bmFtZToic2VwYXJhdG9yIix0eXBlOiJ0ZXh0Iix2YWx1ZToiICIsbWluTGVuZ3RoOjEscmFuZG9taXphYmxlOiExLHByaW9yaXR5Oi0xMH0pfWdldFNlcGFyYXRvcigpe3JldHVybiB0aGlzLmdldFNldHRpbmdWYWx1ZSgic2VwYXJhdG9yIil9cGVyZm9ybUVuY29kZShlKXtzd2l0Y2godGhpcy5fbW9kZSl7Y2FzZSBkZTp7Y29uc3QgdD1lLmdldENvZGVQb2ludHMoKS5tYXAoKGkscyk9PnRoaXMucGVyZm9ybUNoYXJFbmNvZGVUb0Jsb2NrKGkscyxlKSkuZmlsdGVyKGk9PmkhPT1udWxsKS5tYXAoeS53cmFwKTtyZXR1cm4geS5qb2luKHQsdGhpcy5nZXRTZXBhcmF0b3IoKSl9Y2FzZSBIZTpyZXR1cm4gZS5zcGxpdCh0aGlzLmdldFNlcGFyYXRvcigpKS5tYXAoKHQsaSxzKT0+dGhpcy5wZXJmb3JtQmxvY2tFbmNvZGVUb0NoYXIodCxpLHMsZSkpLmZpbHRlcih0PT50IT09bnVsbCl9fXBlcmZvcm1EZWNvZGUoZSl7c3dpdGNoKHRoaXMuX21vZGUpe2Nhc2UgZGU6cmV0dXJuIGUuc3BsaXQodGhpcy5nZXRTZXBhcmF0b3IoKSkubWFwKCh0LGkscyk9PnRoaXMucGVyZm9ybUJsb2NrRGVjb2RlVG9DaGFyKHQsaSxzLGUpKS5maWx0ZXIodD0+dCE9PW51bGwpO2Nhc2UgSGU6e2NvbnN0IHQ9ZS5nZXRDb2RlUG9pbnRzKCkubWFwKChpLHMpPT50aGlzLnBlcmZvcm1DaGFyRGVjb2RlVG9CbG9jayhpLHMsZSkpLmZpbHRlcihpPT5pIT09bnVsbCkubWFwKHkud3JhcCk7cmV0dXJuIHkuam9pbih0LHRoaXMuZ2V0U2VwYXJhdG9yKCkpfX19cGVyZm9ybUNoYXJFbmNvZGVUb0Jsb2NrKGUsdCxpKXt9cGVyZm9ybUJsb2NrRW5jb2RlVG9DaGFyKGUsdCxpLHMpe31wZXJmb3JtQ2hhckRlY29kZVRvQmxvY2soZSx0LGkpe31wZXJmb3JtQmxvY2tEZWNvZGVUb0NoYXIoZSx0LGkscyl7fX1jb25zdCBRdD17bmFtZToiYTF6MjYiLHRpdGxlOiJBMVoyNiIsY2F0ZWdvcnk6IkNpcGhlcnMiLHR5cGU6ImVuY29kZXIifTtjbGFzcyBZdCBleHRlbmRzIEV0e3N0YXRpYyBnZXRNZXRhKCl7cmV0dXJuIFF0fWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLmFkZFNldHRpbmdzKFt7bmFtZToiYWxwaGFiZXQiLHR5cGU6InRleHQiLHZhbHVlOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsdW5pcXVlQ2hhcnM6ITAsbWluTGVuZ3RoOjJ9LHtuYW1lOiJjYXNlU2Vuc2l0aXZpdHkiLHR5cGU6ImJvb2xlYW4iLHZhbHVlOiExLHJhbmRvbWl6YWJsZTohMX1dKX13aWxsRW5jb2RlKGUpe3JldHVybiB0aGlzLmdldFNldHRpbmdWYWx1ZSgiY2FzZVNlbnNpdGl2aXR5Iik/ZTplLnRvTG93ZXJDYXNlKCl9cGVyZm9ybUNoYXJFbmNvZGVUb0Jsb2NrKGUsdCxpKXtjb25zdCBzPXRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJjYXNlU2Vuc2l0aXZpdHkiKTtsZXQgbj10aGlzLmdldFNldHRpbmdWYWx1ZSgiYWxwaGFiZXQiKTtzfHwobj1uLnRvTG93ZXJDYXNlKCkpO2xldCByPW4uaW5kZXhPZkNvZGVQb2ludChlKTtyZXR1cm4gcj09PS0xP251bGw6KHIrPTEsci50b1N0cmluZygpKX1wZXJmb3JtQmxvY2tEZWNvZGVUb0NoYXIoZSx0LGkscyl7Y29uc3Qgbj10aGlzLmdldFNldHRpbmdWYWx1ZSgiY2FzZVNlbnNpdGl2aXR5Iik7bGV0IHI9dGhpcy5nZXRTZXR0aW5nVmFsdWUoImFscGhhYmV0Iik7bnx8KHI9ci50b0xvd2VyQ2FzZSgpKTtjb25zdCBhPXBhcnNlSW50KGUpO3JldHVybiBpc05hTihhKXx8YTwxfHxhPnIuZ2V0TGVuZ3RoKCk/bnVsbDpyLmdldENvZGVQb2ludEF0KGEtMSl9fWNvbnN0IGVpPXtuYW1lOiJwb2x5Yml1cy1zcXVhcmUiLHRpdGxlOiJQb2x5Yml1cyBzcXVhcmUiLGNhdGVnb3J5OiJQb2x5Yml1cyBzcXVhcmUgY2lwaGVycyIsdHlwZToiZW5jb2RlciJ9O2NsYXNzIG9lIGV4dGVuZHMgd3tzdGF0aWMgZ2V0TWV0YSgpe3JldHVybiBlaX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5hZGRTZXR0aW5ncyhbe25hbWU6ImFscGhhYmV0Iix0eXBlOiJ0ZXh0Iix2YWx1ZToiYWJjZGVmZ2hpa2xtbm9wcXJzdHV2d3h5eiIsdW5pcXVlQ2hhcnM6ITAsbWluTGVuZ3RoOjIsdmFsaWRhdGVWYWx1ZTp0aGlzLnZhbGlkYXRlQWxwaGFiZXRWYWx1ZS5iaW5kKHRoaXMpLGNhc2VTZW5zaXRpdml0eTohMX0se25hbWU6InJvd3MiLHR5cGU6InRleHQiLHZhbHVlOiIxMjM0NSIsdW5pcXVlQ2hhcnM6ITAsbWluTGVuZ3RoOjIsd2lkdGg6NixyYW5kb21pemFibGU6ITEsY2FzZVNlbnNpdGl2aXR5OiExfSx7bmFtZToiY29sdW1ucyIsdHlwZToidGV4dCIsdmFsdWU6IjEyMzQ1Iix1bmlxdWVDaGFyczohMCxtaW5MZW5ndGg6Mix3aWR0aDo2LHJhbmRvbWl6YWJsZTohMSxjYXNlU2Vuc2l0aXZpdHk6ITF9LHtuYW1lOiJzZXBhcmF0b3IiLHR5cGU6InRleHQiLHZhbHVlOiIiLHJhbmRvbWl6YWJsZTohMSxjYXNlU2Vuc2l0aXZpdHk6ITEsdmFsaWRhdGVWYWx1ZTp0aGlzLnZhbGlkYXRlU2VwYXJhdG9yVmFsdWUuYmluZCh0aGlzKX0se25hbWU6ImNhc2VTZW5zaXRpdml0eSIsdHlwZToiYm9vbGVhbiIsd2lkdGg6Nix2YWx1ZTohMSxyYW5kb21pemFibGU6ITF9LHtuYW1lOiJpbmNsdWRlRm9yZWlnbkNoYXJzIix0eXBlOiJib29sZWFuIixsYWJlbDoiRm9yZWlnbiBDaGFycyIsd2lkdGg6Nix2YWx1ZTohMSxyYW5kb21pemFibGU6ITEsdHJ1ZUxhYmVsOiJJbmNsdWRlIixmYWxzZUxhYmVsOiJJZ25vcmUifV0pfXdpbGxUcmFuc2xhdGUoZSx0KXtpZih0aGlzLmdldFNldHRpbmdWYWx1ZSgiY2FzZVNlbnNpdGl2aXR5Iil8fChlPWUudG9Mb3dlckNhc2UoKSksdCl7Y29uc3QgaT10aGlzLmdldFNldHRpbmdWYWx1ZSgiYWxwaGFiZXQiKS5nZXRDb2RlUG9pbnRzKCk7aS5pbmRleE9mKDEwNSkhPT0tMSYmaS5pbmRleE9mKDEwNik9PT0tMSYmKGU9ZS5nZXRTdHJpbmcoKS5yZXBsYWNlKC9qL2csImkiKSl9cmV0dXJuIGV9cGVyZm9ybUVuY29kZShlKXtjb25zdCB0PXRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJhbHBoYWJldCIpLmdldENvZGVQb2ludHMoKSxpPXRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJzZXBhcmF0b3IiKS5nZXRDb2RlUG9pbnRzKCkscz10aGlzLmdldFNldHRpbmdWYWx1ZSgiaW5jbHVkZUZvcmVpZ25DaGFycyIpLG49dGhpcy5nZXRTZXR0aW5nVmFsdWUoInJvd3MiKS5nZXRDb2RlUG9pbnRzKCkscj10aGlzLmdldFNldHRpbmdWYWx1ZSgiY29sdW1ucyIpLmdldENvZGVQb2ludHMoKSxhPXIubGVuZ3RoLGw9ZS5nZXRDb2RlUG9pbnRzKCksbz1pLmxlbmd0aCxjPWwubGVuZ3RoLHU9bmV3IEFycmF5KGMqKG8rMikpO2xldCBoLGQsZixwPTAsYj0hMTtmb3IobGV0IF89MDtfPGM7XysrKXtpZihoPWxbX10sZD10LmluZGV4T2YoaCkscD4wJiYoZCE9PS0xfHxzJiYhYikpZm9yKGY9MDtmPG87ZisrKXVbcCsrXT1pW2ZdO2I9ITEsZCE9PS0xPyh1W3ArK109bltNYXRoLmZsb29yKGQvYSldLHVbcCsrXT1yW2QlYV0pOnMmJih1W3ArK109aCxiPSEwKX1yZXR1cm4gdS5zbGljZSgwLHApfXBlcmZvcm1EZWNvZGUoZSl7Y29uc3QgdD10aGlzLmdldFNldHRpbmdWYWx1ZSgiYWxwaGFiZXQiKS5nZXRDb2RlUG9pbnRzKCksaT10aGlzLmdldFNldHRpbmdWYWx1ZSgic2VwYXJhdG9yIikuZ2V0Q29kZVBvaW50cygpLHM9dGhpcy5nZXRTZXR0aW5nVmFsdWUoImluY2x1ZGVGb3JlaWduQ2hhcnMiKSxuPXRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJyb3dzIikuZ2V0Q29kZVBvaW50cygpLHI9dGhpcy5nZXRTZXR0aW5nVmFsdWUoImNvbHVtbnMiKS5nZXRDb2RlUG9pbnRzKCksYT1FLnJlcGxhY2VTbGljZShlLmdldENvZGVQb2ludHMoKSxpKSxsPXQubGVuZ3RoLG89ci5sZW5ndGgsYz1hLmxlbmd0aCx1PW5ldyBBcnJheShjKTtsZXQgaD0wLGQ9MCxmLHAsYjtmb3IoO2g8Yzspe2ZvcihmPW51bGw7Zj09PW51bGwmJmg8YzspYj1uLmluZGV4T2YoYVtoXSksYiE9PS0xP2Y9YjpzJiYodVtkKytdPWFbaF0pLGgrKztmb3IocD1udWxsO3A9PT1udWxsJiZoPGM7KWI9bi5pbmRleE9mKGFbaF0pLGIhPT0tMT9wPWI6cyYmKHVbZCsrXT1hW2hdKSxoKys7aWYoZiE9PW51bGwmJnAhPT1udWxsKXtpZihiPWYqbytwLGI+PWwpdGhyb3cgbmV3IHgoYFBvbHliaXVzIHNxdWFyZSBjZWxsIGF0IGNvb3JkaW5hdGVzICR7Zn0sJHtwfSBhcmUgbm90IGRlZmluZWQgYnkgdGhlIGFscGhhYmV0LmApO3VbZCsrXT10W2JdfWVsc2UgaWYoZiE9PW51bGx8fHAhPT1udWxsKXRocm93IG5ldyB4KCJSZWFjaGVkIHVuZXhwZWN0ZWQgZW5kIG9mIGNvbnRlbnQuIFRoZSBsYXN0IHNldCBvZiBQb2x5Yml1cyBzcXVhcmUgY29vcmRpbmF0ZXMgaXMgaW5jb21wbGV0ZS4iKX1yZXR1cm4gdS5zbGljZSgwLGQpfXNldHRpbmdWYWx1ZURpZENoYW5nZShlLHQpe3N3aXRjaChlLmdldE5hbWUoKSl7Y2FzZSJjYXNlU2Vuc2l0aXZpdHkiOnRoaXMuZ2V0U2V0dGluZygiYWxwaGFiZXQiKS5zZXRDYXNlU2Vuc2l0aXZpdHkodCksdGhpcy5nZXRTZXR0aW5nKCJyb3dzIikuc2V0Q2FzZVNlbnNpdGl2aXR5KHQpLHRoaXMuZ2V0U2V0dGluZygiY29sdW1ucyIpLnNldENhc2VTZW5zaXRpdml0eSh0KSx0aGlzLmdldFNldHRpbmcoInNlcGFyYXRvciIpLnNldENhc2VTZW5zaXRpdml0eSh0KTticmVhaztjYXNlImNvbHVtbnMiOmNhc2Uicm93cyI6dGhpcy5nZXRTZXR0aW5nKCJhbHBoYWJldCIpLnJldmFsaWRhdGVWYWx1ZSgpO2JyZWFrfX12YWxpZGF0ZUFscGhhYmV0VmFsdWUoZSx0KXtjb25zdCBpPWUuZ2V0TGVuZ3RoKCkscz10aGlzLmdldFNldHRpbmdWYWx1ZSgiY29sdW1ucyIpLmdldExlbmd0aCgpLG49dGhpcy5nZXRTZXR0aW5nVmFsdWUoInJvd3MiKS5nZXRMZW5ndGgoKTtyZXR1cm4gaT5uKnM/e2tleToicG9seWJpdXNTcXVhcmVBbHBoYWJldFRvb0xvbmciLG1lc3NhZ2U6YFRoZSBhbHBoYWJldCBzaXplICR7aX0gaXMgdG9vIGJpZyBmb3IgdGhlIGdpdmVuICR7bn3DlyR7c30gUG9seWJpdXMgc3F1YXJlIGRlZmluZWQgYnkgdGhlIHNldHRpbmdzICdjb2x1bW5zJyBhbmQgJ3Jvd3MnLmB9Omk8PShuLTEpKnM/e2tleToicG9seWJpdXNTcXVhcmVBbHBoYWJldFRvb1Nob3J0IixtZXNzYWdlOmBUaGUgYWxwaGFiZXQgc2l6ZSAke2l9IGlzIHRvbyBzaG9ydCBmb3IgdGhlIGdpdmVuICR7bn3DlyR7c30gUG9seWJpdXMgc3F1YXJlIGRlZmluZWQgYnkgdGhlIHNldHRpbmdzICdjb2x1bW5zJyBhbmQgJ3Jvd3MnLmB9OiEwfXZhbGlkYXRlU2VwYXJhdG9yVmFsdWUoZSx0KXtjb25zdCBpPXRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJyb3dzIikuZ2V0Q29kZVBvaW50cygpO3JldHVybiBpLmNvbmNhdCh0aGlzLmdldFNldHRpbmdWYWx1ZSgiY29sdW1ucyIpLmdldENvZGVQb2ludHMoKSksZS5nZXRDb2RlUG9pbnRzKCkuZmluZChuPT5pLmluZGV4T2YobikhPT0tMSkhPT12b2lkIDA/e2tleToicG9seWJpdXNTcXVhcmVTZXBhcmF0b3JJbnZhbGlkIixtZXNzYWdlOiJUaGUgc2VwYXJhdG9yIHNoYWxsIG5vdCBjb250YWluIGNoYXJhY3RlcnMgZnJvbSB0aGUgUG9seWJpdXMgc3F1YXJlIHJvd3Mgb3IgY29sdW1ucyJ9OiEwfX1jb25zdCB0aT17bmFtZToiYWRmZ3gtY2lwaGVyIix0aXRsZToiQURGR1ggY2lwaGVyIixjYXRlZ29yeToiUG9seWJpdXMgc3F1YXJlIGNpcGhlcnMiLHR5cGU6ImVuY29kZXIifSxndD0iYWRmZ3giLEdlPVt7bmFtZToiYWRmZ3giLGxhYmVsOiJBREZHWCIsc3F1YXJlUG9zaXRpb25zOiJhZGZneCIsYWxwaGFiZXQ6Inp5eHd2dXRzcnFwb25tbGtpaGdmZWRjYmEifSx7bmFtZToiYWRmZ3Z4IixsYWJlbDoiQURGR1ZYIixzcXVhcmVQb3NpdGlvbnM6ImFkZmd2eCIsYWxwaGFiZXQ6Ijk4NzY1NDMyMTB6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYSJ9XSxwdD0iYWJjZGVmZ2hpa2xtbm9wcXJzdHV2d3h5eiI7Y2xhc3MgaWkgZXh0ZW5kcyB3e3N0YXRpYyBnZXRNZXRhKCl7cmV0dXJuIHRpfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLmFkZFNldHRpbmdzKFt7bmFtZToidmFyaWFudCIsdHlwZToiZW51bSIsdmFsdWU6Z3QsZWxlbWVudHM6R2UubWFwKHQ9PnQubmFtZSksbGFiZWxzOkdlLm1hcCh0PT50LmxhYmVsKSxyYW5kb21pemFibGU6ITF9LHtuYW1lOiJhbHBoYWJldCIsdHlwZToidGV4dCIsdmFsdWU6cHQsdW5pcXVlQ2hhcnM6ITAsYmxhY2tsaXN0Q2hhcnM6IiAiLG1pbkxlbmd0aDowLG1heExlbmd0aDoyNSxjYXNlU2Vuc2l0aXZpdHk6ITF9LHtuYW1lOiJrZXkiLHR5cGU6InRleHQiLHZhbHVlOiJjYXJnbyIsbWluTGVuZ3RoOjIsbWF4TGVuZ3RoOjI0LGNhc2VTZW5zaXRpdml0eTohMX1dKTtjb25zdCBlPXRoaXMuY29uc3RydWN0b3IuZ2V0VmFyaWFudChndCk7dGhpcy5fcG9seWJpdXNTcXVhcmU9bmV3IG9lLHRoaXMuX3BvbHliaXVzU3F1YXJlLnNldFNldHRpbmdWYWx1ZXMoe2FscGhhYmV0OnB0LHJvd3M6ZS5zcXVhcmVQb3NpdGlvbnMsY29sdW1uczplLnNxdWFyZVBvc2l0aW9ucyxzZXBhcmF0b3I6IiIsY2FzZVNlbnNpdGl2aXR5OiExLGluY2x1ZGVGb3JlaWduQ2hhcnM6ITF9KX1hc3luYyBwZXJmb3JtRW5jb2RlKGUpe2xldCB0PWUuZ2V0U3RyaW5nKCk7dGhpcy5nZXRTZXR0aW5nVmFsdWUoInZhcmlhbnQiKT09PSJhZGZneCImJih0PXQucmVwbGFjZSgvai9naSwiaSIpKTtjb25zdCBzPXRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJrZXkiKSxuPXMuZ2V0TGVuZ3RoKCkscj10aGlzLm1hcEVsZW1lbnRzVG9Tb3J0ZWRQb3NpdGlvbihzLmdldENoYXJzKCkpLGE9YXdhaXQgdGhpcy5fcG9seWJpdXNTcXVhcmUuZW5jb2RlKHQpLGw9YS5nZXRMZW5ndGgoKSxvPW5ldyBBcnJheShsK24pO2xldCBjLHUsaCxkLGY9MDtmb3IoYz0wO2M8bjtjKyspZm9yKHU9cltjXSxoPTA7aCpuK3U8bDtoKyspZD1oKm4rdSxvW2YrK109YS5nZXRDb2RlUG9pbnRBdChkKTtyZXR1cm4gRS5qb2luU2xpY2VzKEUuY2h1bmsoby5zbGljZSgwLGYpLDUpLFszMl0pfXBlcmZvcm1EZWNvZGUoZSl7Y29uc3QgdD10aGlzLmdldFNldHRpbmdWYWx1ZSgidmFyaWFudCIpLGk9dGhpcy5jb25zdHJ1Y3Rvci5nZXRWYXJpYW50KHQpLHM9eS53cmFwKGkuc3F1YXJlUG9zaXRpb25zKS5nZXRDb2RlUG9pbnRzKCksbj1lLmdldENvZGVQb2ludHMoKS5maWx0ZXIoUz0+cy5pbmRleE9mKFMpIT09LTEpLHI9bi5sZW5ndGgsYT10aGlzLmdldFNldHRpbmdWYWx1ZSgia2V5IiksbD1hLmdldExlbmd0aCgpLG89dGhpcy5tYXBFbGVtZW50c1RvU29ydGVkUG9zaXRpb24oYS5nZXRDaGFycygpKSxjPXIlbHx8bCx1PU1hdGguY2VpbChyL2wpLGg9bmV3IEFycmF5KHIpO2xldCBkPTAsZixwLGIsXztmb3IoZj0wO2Y8bDtmKyspZm9yKHA9b1tmXSxfPXA+PWM/dS0xOnUsYj0wO2I8XztiKyspaFtiKmwrcF09bltkKytdO3JldHVybiB0aGlzLl9wb2x5Yml1c1NxdWFyZS5kZWNvZGUoaCl9bWFwRWxlbWVudHNUb1NvcnRlZFBvc2l0aW9uKGUpe2NvbnN0IHQ9ZS5sZW5ndGgsaT1uZXcgQXJyYXkodCkscz1lLnNsaWNlKCksbj1lLnNsaWNlKCkuc29ydCgpO2xldCByO2ZvcihsZXQgYT0wO2E8dDthKyspcj1zLmluZGV4T2YoblthXSksaVthXT1yLGRlbGV0ZSBzW3JdO3JldHVybiBpfXNldHRpbmdWYWx1ZURpZENoYW5nZShlLHQpe3N3aXRjaChlLmdldE5hbWUoKSl7Y2FzZSJ2YXJpYW50Ijp7Y29uc3QgaT10aGlzLmNvbnN0cnVjdG9yLmdldFZhcmlhbnQodCk7dGhpcy5fcG9seWJpdXNTcXVhcmUuc2V0U2V0dGluZ1ZhbHVlcyh7cm93czppLnNxdWFyZVBvc2l0aW9ucyxjb2x1bW5zOmkuc3F1YXJlUG9zaXRpb25zfSk7Y29uc3Qgcz10aGlzLmdldFNldHRpbmcoImFscGhhYmV0Iik7cy5pc1ZhbGlkKCkmJnRoaXMuX3BvbHliaXVzU3F1YXJlLnNldFNldHRpbmdWYWx1ZSgiYWxwaGFiZXQiLHMuZ2V0VmFsdWUoKS5leHRlbmQoaS5hbHBoYWJldCkpLHRoaXMuZ2V0U2V0dGluZygiYWxwaGFiZXQiKS5zZXRNYXhMZW5ndGgoaS5hbHBoYWJldC5sZW5ndGgpLHRoaXMuZ2V0U2V0dGluZygia2V5Iikuc2V0TWF4TGVuZ3RoKGkuYWxwaGFiZXQubGVuZ3RoLTEpO2JyZWFrfWNhc2UiYWxwaGFiZXQiOntjb25zdCBpPXRoaXMuY29uc3RydWN0b3IuZ2V0VmFyaWFudCh0aGlzLmdldFNldHRpbmdWYWx1ZSgidmFyaWFudCIpKTt0aGlzLl9wb2x5Yml1c1NxdWFyZS5zZXRTZXR0aW5nVmFsdWUoImFscGhhYmV0Iix0LmV4dGVuZChpLmFscGhhYmV0KSk7YnJlYWt9fX1zdGF0aWMgZ2V0VmFyaWFudChlKXtyZXR1cm4gR2UuZmluZCh0PT50Lm5hbWU9PT1lKXx8bnVsbH19Y29uc3Qgc2k9e25hbWU6ImFmZmluZS1jaXBoZXIiLHRpdGxlOiJBZmZpbmUgY2lwaGVyIixjYXRlZ29yeToiQ2lwaGVycyIsdHlwZToiZW5jb2RlciJ9LG5pPSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI7Y2xhc3MgcmkgZXh0ZW5kcyB3e3N0YXRpYyBnZXRNZXRhKCl7cmV0dXJuIHNpfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLmFkZFNldHRpbmdzKFt7bmFtZToiYSIsdHlwZToibnVtYmVyIixsYWJlbDoiU2xvcGUgLyBhIix2YWx1ZTo1LGludGVnZXI6ITAsbWluOjEsdmFsaWRhdGVWYWx1ZTp0aGlzLnZhbGlkYXRlU2xvcGVWYWx1ZS5iaW5kKHRoaXMpLHJhbmRvbWl6ZVZhbHVlOnRoaXMucmFuZG9taXplU2xvcGVWYWx1ZS5iaW5kKHRoaXMpLHdpZHRoOjZ9LHtuYW1lOiJiIix0eXBlOiJudW1iZXIiLGxhYmVsOiJJbnRlcmNlcHQgLyBiIix2YWx1ZTo4LGludGVnZXI6ITAsbWluOjEscmFuZG9taXplVmFsdWU6dGhpcy5yYW5kb21pemVJbnRlcmNlcHRWYWx1ZS5iaW5kKHRoaXMpLHdpZHRoOjZ9LHtuYW1lOiJhbHBoYWJldCIsdHlwZToidGV4dCIsdmFsdWU6bmksdW5pcXVlQ2hhcnM6ITAsbWluTGVuZ3RoOjIscmFuZG9taXphYmxlOiExLGNhc2VTZW5zaXRpdml0eTohMX0se25hbWU6ImNhc2VTdHJhdGVneSIsdHlwZToiZW51bSIsdmFsdWU6Im1haW50YWluIixlbGVtZW50czpbIm1haW50YWluIiwiaWdub3JlIiwic3RyaWN0Il0sbGFiZWxzOlsiTWFpbnRhaW4gY2FzZSIsIklnbm9yZSBjYXNlIiwiU3RyaWN0IChBIOKJoCBhKSJdLHdpZHRoOjYscmFuZG9taXphYmxlOiExfSx7bmFtZToiaW5jbHVkZUZvcmVpZ25DaGFycyIsdHlwZToiYm9vbGVhbiIsbGFiZWw6IkZvcmVpZ24gQ2hhcnMiLHZhbHVlOiEwLHdpZHRoOjYsdHJ1ZUxhYmVsOiJJbmNsdWRlIixmYWxzZUxhYmVsOiJJZ25vcmUiLHJhbmRvbWl6YWJsZTohMX1dKX1wZXJmb3JtVHJhbnNsYXRlKGUsdCl7Y29uc3R7YTppLGI6cyxjYXNlU3RyYXRlZ3k6bixpbmNsdWRlRm9yZWlnbkNoYXJzOnJ9PXRoaXMuZ2V0U2V0dGluZ1ZhbHVlcygpO2xldCBhPXRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJhbHBoYWJldCIpLGw7biE9PSJzdHJpY3QiJiYoYT1hLnRvTG93ZXJDYXNlKCksbD1hLnRvVXBwZXJDYXNlKCkpO2NvbnN0IG89YS5nZXRMZW5ndGgoKSxjPWUuZ2V0TGVuZ3RoKCksdT1uZXcgQXJyYXkoYykuZmlsbCgwKTtsZXQgaCxkLGYscCxiLF8sUz0wO2ZvcihmPTA7ZjxjO2YrKyloPWUuZ2V0Q29kZVBvaW50QXQoZiksYj1hLmluZGV4T2ZDb2RlUG9pbnQoaCksZD0hMSxiPT09LTEmJm4hPT0ic3RyaWN0IiYmKGI9bC5pbmRleE9mQ29kZVBvaW50KGgpLGQ9ITApLGI9PT0tMT9yJiYodVtTKytdPWgpOih0P189di5tb2QoaSpiK3Msbyk6KHA9di54Z2NkKGksbylbMF0sXz12Lm1vZChwKihiLXMpLG8pKSxuPT09Im1haW50YWluIiYmZD91W1MrK109bC5nZXRDb2RlUG9pbnRBdChfKTp1W1MrK109YS5nZXRDb2RlUG9pbnRBdChfKSk7cmV0dXJuIHUuc2xpY2UoMCxTKX1zZXR0aW5nVmFsdWVEaWRDaGFuZ2UoZSx0KXtzd2l0Y2goZS5nZXROYW1lKCkpe2Nhc2UiYWxwaGFiZXQiOnRoaXMuZ2V0U2V0dGluZygiYSIpLnJldmFsaWRhdGVWYWx1ZSgpO2JyZWFrO2Nhc2UiY2FzZVN0cmF0ZWd5Ijp0aGlzLmdldFNldHRpbmcoImFscGhhYmV0Iikuc2V0Q2FzZVNlbnNpdGl2aXR5KHQ9PT0ic3RyaWN0Iik7YnJlYWt9fXZhbGlkYXRlU2xvcGVWYWx1ZShlKXtjb25zdCB0PXRoaXMuZ2V0U2V0dGluZygiYWxwaGFiZXQiKTtpZighdC5pc1ZhbGlkKCkpcmV0dXJuITE7Y29uc3QgaT10LmdldFZhbHVlKCkuZ2V0TGVuZ3RoKCk7cmV0dXJuIHYuaXNDb3ByaW1lKGUsaSk/ITA6e2tleToiYWZmaW5lQ2lwaGVyRnVuY3Rpb25JbnZhbGlkIixtZXNzYWdlOmBUaGUgdmFsdWUgbXVzdCBiZSBjaG9zZW4gc3VjaCB0aGF0IGl0IGlzIGNvcHJpbWUgdG8gdGhlIHNpemUgb2YgdGhlIGFscGhhYmV0ICgke2l9KWB9fXJhbmRvbWl6ZVNsb3BlVmFsdWUoZSx0KXtjb25zdCBpPXRoaXMuZ2V0U2V0dGluZygiYWxwaGFiZXQiKTtpZihpLmlzVmFsaWQoKSl7Y29uc3Qgcz1pLmdldFZhbHVlKCksbj1zLmdldExlbmd0aCgpLGE9cy5nZXRDb2RlUG9pbnRzKCkubWFwKChsLG8pPT5vKzEpLmZpbHRlcihsPT5sPjEmJnYuaXNDb3ByaW1lKGwsbikpO3JldHVybiBhLmxlbmd0aD4wP2UubmV4dENob2ljZShhKToxfXJldHVybiBudWxsfXJhbmRvbWl6ZUludGVyY2VwdFZhbHVlKGUsdCl7aWYodGhpcy5nZXRTZXR0aW5nKCJhbHBoYWJldCIpLmlzVmFsaWQoKSl7Y29uc3Qgcz10aGlzLmdldFNldHRpbmcoImFscGhhYmV0IikuZ2V0VmFsdWUoKS5nZXRMZW5ndGgoKTtyZXR1cm4gZS5uZXh0SW50ZWdlcigxLHMtMSl9cmV0dXJuIG51bGx9fWNvbnN0IGFpPXtuYW1lOiJhbHBoYWJldGljYWwtc3Vic3RpdHV0aW9uIix0aXRsZToiQWxwaGFiZXRpY2FsIHN1YnN0aXR1dGlvbiIsY2F0ZWdvcnk6IkNpcGhlcnMiLHR5cGU6ImVuY29kZXIifSxsaT0iYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLG9pPSJ6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYSI7Y2xhc3MgY2kgZXh0ZW5kcyB3e3N0YXRpYyBnZXRNZXRhKCl7cmV0dXJuIGFpfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLmFkZFNldHRpbmdzKFt7bmFtZToicGxhaW50ZXh0QWxwaGFiZXQiLHR5cGU6InRleHQiLHZhbHVlOmxpLHVuaXF1ZUNoYXJzOiEwLG1pbkxlbmd0aDoyLGNhc2VTZW5zaXRpdml0eTohMSxyYW5kb21pemFibGU6ITF9LHtuYW1lOiJjaXBoZXJ0ZXh0QWxwaGFiZXQiLHR5cGU6InRleHQiLHZhbHVlOm9pLHVuaXF1ZUNoYXJzOiEwLG1pbkxlbmd0aDowLGNhc2VTZW5zaXRpdml0eTohMSx2YWxpZGF0ZVZhbHVlOnRoaXMudmFsaWRhdGVDaXBoZXJ0ZXh0VmFsdWUuYmluZCh0aGlzKSxyYW5kb21pemVWYWx1ZTp0aGlzLnJhbmRvbWl6ZUNpcGhlcnRleHRWYWx1ZS5iaW5kKHRoaXMpfSx7bmFtZToiY2FzZVN0cmF0ZWd5Iix0eXBlOiJlbnVtIix2YWx1ZToibWFpbnRhaW4iLGVsZW1lbnRzOlsibWFpbnRhaW4iLCJpZ25vcmUiLCJzdHJpY3QiXSxsYWJlbHM6WyJNYWludGFpbiBjYXNlIiwiSWdub3JlIGNhc2UiLCJTdHJpY3QgKEEg4omgIGEpIl0sd2lkdGg6NixyYW5kb21pemFibGU6ITF9LHtuYW1lOiJpbmNsdWRlRm9yZWlnbkNoYXJzIix0eXBlOiJib29sZWFuIixsYWJlbDoiRm9yZWlnbiBDaGFycyIsdmFsdWU6ITAsdHJ1ZUxhYmVsOiJJbmNsdWRlIixmYWxzZUxhYmVsOiJJZ25vcmUiLHdpZHRoOjYscmFuZG9taXphYmxlOiExfV0pfXBlcmZvcm1UcmFuc2xhdGUoZSx0KXtjb25zdCBpPXRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJjYXNlU3RyYXRlZ3kiKSxzPXRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJpbmNsdWRlRm9yZWlnbkNoYXJzIik7bGV0IG49dGhpcy5nZXRTZXR0aW5nVmFsdWUoInBsYWludGV4dEFscGhhYmV0Iikscj10aGlzLmdldFNldHRpbmdWYWx1ZSgiY2lwaGVydGV4dEFscGhhYmV0IikuZXh0ZW5kKG4pO3R8fChbcixuXT1bbixyXSk7bGV0IGEsbDtpIT09InN0cmljdCImJihuPW4udG9Mb3dlckNhc2UoKSxyPXIudG9Mb3dlckNhc2UoKSxhPW4udG9VcHBlckNhc2UoKSxsPXIudG9VcHBlckNhc2UoKSk7Y29uc3Qgbz1lLmdldENvZGVQb2ludHMoKSxjPW5ldyBBcnJheShvLmxlbmd0aCkuZmlsbCgwKTtsZXQgdSxoLGQsZj0wO2ZvcihsZXQgcD0wO3A8by5sZW5ndGg7cCsrKXU9b1twXSxoPW4uaW5kZXhPZkNvZGVQb2ludCh1KSxkPSExLGg9PT0tMSYmaSE9PSJzdHJpY3QiJiYoaD1hLmluZGV4T2ZDb2RlUG9pbnQodSksZD0hMCksaCE9PS0xP2k9PT0ibWFpbnRhaW4iJiZkP2NbZisrXT1sLmdldENvZGVQb2ludEF0KGgpOmNbZisrXT1yLmdldENvZGVQb2ludEF0KGgpOnMmJihjW2YrK109dSk7cmV0dXJuIGMuc2xpY2UoMCxmKX1zZXR0aW5nVmFsdWVEaWRDaGFuZ2UoZSx0KXtzd2l0Y2goZS5nZXROYW1lKCkpe2Nhc2UicGxhaW50ZXh0QWxwaGFiZXQiOnRoaXMuZ2V0U2V0dGluZygiY2lwaGVydGV4dEFscGhhYmV0IikucmV2YWxpZGF0ZVZhbHVlKCk7YnJlYWs7Y2FzZSJjYXNlU3RyYXRlZ3kiOnRoaXMuZ2V0U2V0dGluZygicGxhaW50ZXh0QWxwaGFiZXQiKS5zZXRDYXNlU2Vuc2l0aXZpdHkodD09PSJzdHJpY3QiKSx0aGlzLmdldFNldHRpbmcoImNpcGhlcnRleHRBbHBoYWJldCIpLnNldENhc2VTZW5zaXRpdml0eSh0PT09InN0cmljdCIpO2JyZWFrfX12YWxpZGF0ZUNpcGhlcnRleHRWYWx1ZShlLHQpe2lmKCF0aGlzLmlzU2V0dGluZ1ZhbGlkKCJwbGFpbnRleHRBbHBoYWJldCIpKXJldHVybiExO2NvbnN0IGk9dGhpcy5nZXRTZXR0aW5nVmFsdWUoInBsYWludGV4dEFscGhhYmV0Iik7cmV0dXJuIGUuZ2V0TGVuZ3RoKCk+aS5nZXRMZW5ndGgoKT97a2V5OiJhbHBoYWJldENvbnRhaW5zVW51c2VkQ2hhcmFjdGVycyIsbWVzc2FnZToiVGhlIGNpcGhlcnRleHQgYWxwaGFiZXQgaXMgbG9uZ2VyIHRoYW4gdGhlIHBsYWludGV4dCBhbHBoYWJldCJ9OiEwfXJhbmRvbWl6ZUNpcGhlcnRleHRWYWx1ZShlLHQpe2lmKCF0aGlzLmdldFNldHRpbmcoInBsYWludGV4dEFscGhhYmV0IikuaXNWYWxpZCgpKXJldHVybiBudWxsO2NvbnN0IGk9dGhpcy5nZXRTZXR0aW5nVmFsdWUoInBsYWludGV4dEFscGhhYmV0Iik7cmV0dXJuIHkud3JhcChFLnNodWZmbGUoaS5nZXRDb2RlUG9pbnRzKCkpKX19Y29uc3QgaGk9e25hbWU6ImFzY2lpODUiLHRpdGxlOiJBc2NpaTg1IixjYXRlZ29yeToiRW5jb2RpbmciLHR5cGU6ImVuY29kZXIifSxnZT1be25hbWU6Im9yaWdpbmFsIixsYWJlbDoiT3JpZ2luYWwiLGFscGhhYmV0Om51bGwsemVyb1R1cGxlQ2hhcjoieiJ9LHtuYW1lOiJaODUiLGxhYmVsOiJaODUgKFplcm9NUSkiLGFscGhhYmV0OiIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi4tOis9XiEvKj8mPD4oKVtde31AJSQjIix6ZXJvVHVwbGVDaGFyOm51bGx9XTtjbGFzcyB1aSBleHRlbmRzIHd7c3RhdGljIGdldE1ldGEoKXtyZXR1cm4gaGl9Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuYWRkU2V0dGluZyh7bmFtZToidmFyaWFudCIsdHlwZToiZW51bSIsbGFiZWw6IlZhcmlhbnQiLHZhbHVlOiJvcmlnaW5hbCIsZWxlbWVudHM6Z2UubWFwKGU9PmUubmFtZSksbGFiZWxzOmdlLm1hcChlPT5lLmxhYmVsKSxyYW5kb21pemFibGU6ITF9KX1wZXJmb3JtRW5jb2RlKGUpe2NvbnN0IHQ9ZS5nZXRCeXRlcygpLGk9Z2UuZmluZChvPT5vLm5hbWU9PT10aGlzLmdldFNldHRpbmdWYWx1ZSgidmFyaWFudCIpKSxzPXQubGVuZ3RoO2xldCBuPSIiLHIsYSxsO2ZvcihsZXQgbz0wO288cztvKz00KWlmKGw9KHRbb108PDI0KSsoKHRbbysxXXx8MCk8PDE2KSsoKHRbbysyXXx8MCk8PDgpKyh0W28rM118fDApPj4+MCxpLnplcm9UdXBsZUNoYXI9PT1udWxsfHxsPjApe2ZvcihyPVtdLGE9MDthPDU7YSsrKXIucHVzaChsJTg1KSxsPU1hdGguZmxvb3IobC84NSk7cj1yLnJldmVyc2UoKSxzPG8rNCYmci5zcGxpY2Uocy0obys0KSw0KSxuKz1yLm1hcChjPT5pLmFscGhhYmV0PT09bnVsbD9TdHJpbmcuZnJvbUNoYXJDb2RlKGMrMzMpOmkuYWxwaGFiZXRbY10pLmpvaW4oIiIpfWVsc2Ugbis9aS56ZXJvVHVwbGVDaGFyO3JldHVybiBufXdpbGxEZWNvZGUoZSl7Y29uc3QgdD1lLmdldFN0cmluZygpLm1hdGNoKC88figuKz8pfj4vKTtyZXR1cm4gdCE9PW51bGw/dFsxXTplfXBlcmZvcm1EZWNvZGUoZSl7Y29uc3QgdD1MLnJlbW92ZVdoaXRlc3BhY2VzKGUuZ2V0U3RyaW5nKCkpLGk9Z2UuZmluZChjPT5jLm5hbWU9PT10aGlzLmdldFNldHRpbmdWYWx1ZSgidmFyaWFudCIpKSxzPXQubGVuZ3RoLG49W107bGV0IHI9MCxhLGwsbztmb3IoO3I8czspdFtyXT09PWkuemVyb1R1cGxlQ2hhcj8obi5wdXNoKDAsMCwwLDApLHIrKyk6KGE9dC5zdWJzdHIociw1KS5zcGxpdCgiIikubWFwKChjLHUpPT57Y29uc3QgaD1pLmFscGhhYmV0PT09bnVsbD9jLmNoYXJDb2RlQXQoMCktMzM6aS5hbHBoYWJldC5pbmRleE9mKGMpO2lmKGg8MHx8aD44NCl0aHJvdyBuZXcgeChgSW52YWxpZCBjaGFyYWN0ZXIgJyR7Y30nIGF0IGluZGV4ICR7dX1gKTtyZXR1cm4gaH0pLGw9YVswXSo1MjIwMDYyNSthWzFdKjYxNDEyNSsocisyPHM/YVsyXTo4NCkqNzIyNSsociszPHM/YVszXTo4NCkqODUrKHIrNDxzP2FbNF06ODQpLG89W2w+PjI0JjI1NSxsPj4xNiYyNTUsbD4+OCYyNTUsbCYyNTVdLHM8cis1JiZvLnNwbGljZShzLShyKzUpLDUpLG4ucHVzaC5hcHBseShuLG8pLHIrPTUpO3JldHVybiBuZXcgVWludDhBcnJheShuKX19Y29uc3QgZGk9e25hbWU6ImJhY29uLWNpcGhlciIsdGl0bGU6IkJhY29uIGNpcGhlciIsY2F0ZWdvcnk6IkNpcGhlcnMiLHR5cGU6ImVuY29kZXIifSxLZT1be25hbWU6Im9yaWdpbmFsIixsYWJlbDoiT3JpZ2luYWwiLGFscGhhYmV0OiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsY29kZUFscGhhYmV0OiJhYWFhYWFhYWFiYWFhYmFhYWFiYmFhYmFhYWFiYWJhYWJiYWFhYmJiYWJhYWFhYmFhYWFiYWFiYWJhYmFhYmFiYmFiYmFhYWJiYWJhYmJiYWFiYmJiYmFhYWFiYWFhYmJhYWJhYmFhYmJiYWFiYmJhYmFhYmFiYWJiYWJiYWJhYmJiIn0se25hbWU6InVuaXF1ZSIsbGFiZWw6IlVuaXF1ZSBjb2RlcyBmb3IgZWFjaCBsZXR0ZXIiLGFscGhhYmV0OiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsY29kZUFscGhhYmV0OiJhYWFhYWFhYWFiYWFhYmFhYWFiYmFhYmFhYWFiYWJhYWJiYWFhYmJiYWJhYWFhYmFhYmFiYWJhYWJhYmJhYmJhYWFiYmFiYWJiYmFhYmJiYmJhYWFhYmFhYWJiYWFiYWJhYWJiYmFiYWFiYWJhYmJhYmJhYmFiYmJiYmFhYWJiYWFiIn1dO2NsYXNzIGdpIGV4dGVuZHMgd3tzdGF0aWMgZ2V0TWV0YSgpe3JldHVybiBkaX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5hZGRTZXR0aW5ncyhbe25hbWU6InZhcmlhbnQiLHR5cGU6ImVudW0iLGxhYmVsOiJWYXJpYW50Iix2YWx1ZToib3JpZ2luYWwiLGVsZW1lbnRzOktlLm1hcChlPT5lLm5hbWUpLGxhYmVsczpLZS5tYXAoZT0+ZS5sYWJlbCkscmFuZG9taXphYmxlOiExfSx7bmFtZToiYU1hcmsiLGxhYmVsOiJMZXR0ZXIgMSIsdHlwZToidGV4dCIsd2lkdGg6Nix2YWx1ZToiYSIsbWluTGVuZ3RoOjEsbWF4TGVuZ3RoOjEscmFuZG9taXphYmxlOiExLHZhbGlkYXRlVmFsdWU6dGhpcy52YWxpZGF0ZUxldHRlclNldHRpbmdWYWx1ZS5iaW5kKHRoaXMpfSx7bmFtZToiYk1hcmsiLGxhYmVsOiJMZXR0ZXIgMiIsdHlwZToidGV4dCIsd2lkdGg6Nix2YWx1ZToiYiIsbWluTGVuZ3RoOjEsbWF4TGVuZ3RoOjEscmFuZG9taXphYmxlOiExLHZhbGlkYXRlVmFsdWU6dGhpcy52YWxpZGF0ZUxldHRlclNldHRpbmdWYWx1ZS5iaW5kKHRoaXMpfV0pfXZhbGlkYXRlTGV0dGVyU2V0dGluZ1ZhbHVlKGUsdCl7Y29uc3QgaT10aGlzLmdldFNldHRpbmcodC5nZXROYW1lKCk9PT0iYU1hcmsiPyJiTWFyayI6ImFNYXJrIik7cmV0dXJuIGkuaXNWYWxpZCgpJiYhZS5pc0VxdWFsVG8oaS5nZXRWYWx1ZSgpKX1wZXJmb3JtRW5jb2RlKGUpe2NvbnN0e2FscGhhYmV0OnQsY29kZXM6aSxjb2RlTGVuZ3RoOnN9PXRoaXMuX2dldFZhcmlhbnQoKSxuPXRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJhTWFyayIpLmdldENoYXJBdCgwKSxyPXRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJiTWFyayIpLmdldENoYXJBdCgwKSxhPWUudG9Mb3dlckNhc2UoKTtsZXQgbD0iIixvO2ZvcihsZXQgYz0wO2M8YS5nZXRMZW5ndGgoKTtjKyspbz10LmluZGV4T2YoYS5nZXRDaGFyQXQoYykpLG8hPT0tMSYmKGwrPWlbb10pO3JldHVybihuIT09ImEifHxyIT09ImIiKSYmKGw9bC5zcGxpdCgiIikubWFwKGM9PmM9PT0iYSI/bjpyKS5qb2luKCIiKSksRS5jaHVuayh5LndyYXAobCkuZ2V0Q2hhcnMoKSxzKS5tYXAoYz0+Yy5qb2luKCIiKSkuam9pbigiICIpfXBlcmZvcm1EZWNvZGUoZSl7Y29uc3R7YWxwaGFiZXQ6dCxjb2RlczppLGNvZGVMZW5ndGg6c309dGhpcy5fZ2V0VmFyaWFudCgpLG49dGhpcy5nZXRTZXR0aW5nVmFsdWUoImFNYXJrIikuZ2V0Q29kZVBvaW50QXQoMCkscj10aGlzLmdldFNldHRpbmdWYWx1ZSgiYk1hcmsiKS5nZXRDb2RlUG9pbnRBdCgwKSxhPWUuZ2V0Q29kZVBvaW50cygpO2xldCBsPSIiLG87Zm9yKG89MDtvPGEubGVuZ3RoO28rKylzd2l0Y2goYVtvXSl7Y2FzZSBuOmwrPSJhIjticmVhaztjYXNlIHI6bCs9ImIiO2JyZWFrfWNvbnN0IGM9TC5jaHVuayhsLHMpO2xldCB1PSIiLGg7Zm9yKG89MDtvPGMubGVuZ3RoO28rKyloPWkuaW5kZXhPZihjW29dKSxoIT09LTEmJih1Kz10W2hdKTtyZXR1cm4gdX1fZ2V0VmFyaWFudCgpe2NvbnN0IGU9dGhpcy5nZXRTZXR0aW5nVmFsdWUoInZhcmlhbnQiKSx7YWxwaGFiZXQ6dCxjb2RlQWxwaGFiZXQ6aX09S2UuZmluZChyPT5yLm5hbWU9PT1lKSxzPWkubGVuZ3RoL3QubGVuZ3RoLG49TC5jaHVuayhpLHMpO3JldHVybnthbHBoYWJldDp0LGNvZGVzOm4sY29kZUxlbmd0aDpzfX19Y29uc3QgcGk9e25hbWU6ImJhc2UzMiIsdGl0bGU6IkJhc2UzMiIsY2F0ZWdvcnk6IkVuY29kaW5nIix0eXBlOiJlbmNvZGVyIn0sWT1be25hbWU6ImJhc2UzMiIsbGFiZWw6IkJhc2UzMiAoUkZDIDM1NDgsIFJGQyA0NjQ4KSIsYWxwaGFiZXQ6IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMjM0NTY3IixwYWRkaW5nOjYxLGRlY29kZU1hcDp7NDg6MTQsNDk6OH19LHtuYW1lOiJiYXNlMzJoZXgiLGxhYmVsOiJCYXNlMzJoZXggKFJGQyA0NjQ4KSIsYWxwaGFiZXQ6IjAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWIixwYWRkaW5nOjYxfSx7bmFtZToiei1iYXNlLTMyIixsYWJlbDoiei1iYXNlLTMyIixhbHBoYWJldDoieWJuZHJmZzhlamttY3BxeG90MXV3aXN6YTM0NWg3NjkiLHBhZGRpbmc6bnVsbH0se25hbWU6ImNyb2NrZm9yZC1iYXNlMzIiLGxhYmVsOiJDcm9ja2ZvcmQncyBCYXNlMzIiLGFscGhhYmV0OiIwMTIzNDU2Nzg5QUJDREVGR0hKS01OUFFSU1RWV1hZWiIscGFkZGluZzpudWxsLGRlY29kZUNvbnRlbnRGaWx0ZXI6InVwcGVyY2FzZSIsZGVjb2RlTWFwOns3OTowLDczOjEsNzY6MX19LHtuYW1lOiJjdXN0b20iLGxhYmVsOiJDdXN0b20ifV07Y2xhc3MgZmkgZXh0ZW5kcyB3e3N0YXRpYyBnZXRNZXRhKCl7cmV0dXJuIHBpfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLmFkZFNldHRpbmdzKFt7bmFtZToidmFyaWFudCIsdHlwZToiZW51bSIsdmFsdWU6WVswXS5uYW1lLGVsZW1lbnRzOlkubWFwKGU9PmUubmFtZSksbGFiZWxzOlkubWFwKGU9PmUubGFiZWwpLHJhbmRvbWl6YWJsZTohMX0se25hbWU6ImFscGhhYmV0Iix0eXBlOiJ0ZXh0Iix2YWx1ZTpZWzBdLmFscGhhYmV0LHVuaXF1ZUNoYXJzOiEwLG1pbkxlbmd0aDozMixtYXhMZW5ndGg6MzIsY2FzZVNlbnNpdGl2aXR5OiEwLHZpc2libGU6ITF9LHtuYW1lOiJwYWRkaW5nIix0eXBlOiJ0ZXh0Iix2YWx1ZToiPSIsYmxhY2tsaXN0Q2hhcnM6WVswXS5hbHBoYWJldCxtaW5MZW5ndGg6MCxtYXhMZW5ndGg6MSxyYW5kb21pemFibGU6ITEsdmlzaWJsZTohMX1dKX1wZXJmb3JtRW5jb2RlKGUpe2NvbnN0e2FscGhhYmV0OnQscGFkZGluZzppfT10aGlzLmdldFZhcmlhbnRPcHRpb25zKCkscz10LmdldENvZGVQb2ludHMoKSxuPWUuZ2V0Qnl0ZXMoKSxyPW4ubGVuZ3RoLGE9TWF0aC5jZWlsKHIvNSkqOCxsPW5ldyBBcnJheShhKTtsZXQgbz0wLGM9Myx1PTAsaCxkO2ZvcihsZXQgZj0wO2Y8cjtmKyspaD1uW2ZdLGQ9dXxoPj5jLGxbbysrXT1zW2QmMzFdLGM+NSYmKGMtPTUsZD1oPj5jLGxbbysrXT1zW2QmMzFdKSxjPTUtYyx1PWg8PGMsYz04LWM7aWYoYyE9PTMmJihsW28rK109c1t1JjMxXSksaSE9PW51bGwpe2Zvcig7bzxhOylsW28rK109aTtyZXR1cm4gbH1lbHNlIHJldHVybiBsLnNsaWNlKDAsbyl9cGVyZm9ybURlY29kZShlKXtjb25zdHthbHBoYWJldDp0LGRlY29kZU1hcDppLHBhZGRpbmc6cyxkZWNvZGVDb250ZW50RmlsdGVyOm59PXRoaXMuZ2V0VmFyaWFudE9wdGlvbnMoKTtuPT09InVwcGVyY2FzZSImJihlPWUudG9VcHBlckNhc2UoKSk7Zm9yKGxldCBwPTA7cDx0LmdldExlbmd0aCgpO3ArKylpW3QuZ2V0Q29kZVBvaW50QXQocCldPXA7Y29uc3Qgcj1lLmdldENvZGVQb2ludHMoKSxhPXIubGVuZ3RoLGw9TWF0aC5jZWlsKGEvOCkqNSxvPW5ldyBVaW50OEFycmF5KGwpO2xldCBjPTAsdT04LGg9MCxkLGY7Zm9yKGxldCBwPTA7cDxhO3ArKylpZihkPXJbcF0sZCE9PXMpe2lmKGlbZF09PT12b2lkIDApdGhyb3cgbmV3IHgoYFVuZXhwZWN0ZWQgY29kZSBwb2ludCBhdCBpbmRleCAke3B9YCk7Zj1pW2RdJjI1NSx1LT01LHU+MD9ofD1mPDx1OnU8MD8ob1tjKytdPWh8Zj4+LXUsdSs9OCxoPWY8PHUmMjU1KToob1tjKytdPWh8Zix1PTgsaD0wKX1yZXR1cm4gby5zbGljZSgwLGMpfXNldHRpbmdWYWx1ZURpZENoYW5nZShlLHQpe3N3aXRjaChlLmdldE5hbWUoKSl7Y2FzZSJ2YXJpYW50Ijp7dGhpcy5nZXRTZXR0aW5nKCJhbHBoYWJldCIpLnNldFZpc2libGUodD09PSJjdXN0b20iKSx0aGlzLmdldFNldHRpbmcoInBhZGRpbmciKS5zZXRWaXNpYmxlKHQ9PT0iY3VzdG9tIik7YnJlYWt9Y2FzZSJhbHBoYWJldCI6e3RoaXMuZ2V0U2V0dGluZygicGFkZGluZyIpLnNldEJsYWNrbGlzdENoYXJzKHQpO2JyZWFrfX19Z2V0VmFyaWFudE9wdGlvbnMoKXtjb25zdCBlPXRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJ2YXJpYW50Iik7aWYoZT09PSJjdXN0b20iKXtjb25zdCBpPXRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJwYWRkaW5nIik7cmV0dXJue2FscGhhYmV0OnRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJhbHBoYWJldCIpLHBhZGRpbmc6aS5nZXRMZW5ndGgoKT09PTE/aS5nZXRDb2RlUG9pbnRBdCgwKTpudWxsLGRlY29kZUNvbnRlbnRGaWx0ZXI6bnVsbCxkZWNvZGVNYXA6e319fWNvbnN0IHQ9WS5maW5kKGk9PmkubmFtZT09PWUpO3JldHVybiB0LmFscGhhYmV0PXkud3JhcCh0LmFscGhhYmV0KSx0LmRlY29kZU1hcD10LmRlY29kZU1hcHx8e30sdH19Y29uc3QgbWk9e25hbWU6ImJhc2U2NCIsdGl0bGU6IkJhc2U2NCIsY2F0ZWdvcnk6IkVuY29kaW5nIix0eXBlOiJlbmNvZGVyIn0scGU9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5IixHPVt7bmFtZToiYmFzZTY0IixsYWJlbDoiQmFzZTY0IChSRkMgMzU0OCwgUkZDIDQ2NDgpIixkZXNjcmlwdGlvbjpudWxsLGFscGhhYmV0OmAke3BlfSsvYH0se25hbWU6ImJhc2U2NHVybCIsbGFiZWw6IkJhc2U2NHVybCAoUkZDIDQ2NDggwqc1KSIsZGVzY3JpcHRpb246IlVSTCBhbmQgRmlsZW5hbWUgU2FmZSBBbHBoYWJldCIsYWxwaGFiZXQ6YCR7cGV9LV9gLHBhZGRpbmdPcHRpb25hbDohMH0se25hbWU6InJmYzIwNDUiLGxhYmVsOiJUcmFuc2ZlciBlbmNvZGluZyBmb3IgTUlNRSAoUkZDIDIwNDUpIixkZXNjcmlwdGlvbjpudWxsLGFscGhhYmV0OmAke3BlfSsvYCxmb3JlaWduQ2hhcmFjdGVyczohMCxtYXhMaW5lTGVuZ3RoOjc2fSx7bmFtZToicmZjMTQyMSIsbGFiZWw6Ik9yaWdpbmFsIEJhc2U2NCAoUkZDIDE0MjEpIixkZXNjcmlwdGlvbjoiUHJpdmFjeS1FbmhhbmNlZCBNYWlsIChQRU0pIixhbHBoYWJldDpgJHtwZX0rL2AsbWF4TGluZUxlbmd0aDo2NH0se25hbWU6ImN1c3RvbSIsbGFiZWw6IkN1c3RvbSJ9XTtjbGFzcyBiaSBleHRlbmRzIHd7c3RhdGljIGdldE1ldGEoKXtyZXR1cm4gbWl9Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuYWRkU2V0dGluZ3MoW3tuYW1lOiJ2YXJpYW50Iix0eXBlOiJlbnVtIix2YWx1ZTpHWzBdLm5hbWUsZWxlbWVudHM6Ry5tYXAoZT0+ZS5uYW1lKSxsYWJlbHM6Ry5tYXAoZT0+ZS5sYWJlbCksZGVzY3JpcHRpb25zOkcubWFwKGU9PmUuZGVzY3JpcHRpb24pLHJhbmRvbWl6YWJsZTohMX0se25hbWU6ImFscGhhYmV0Iix0eXBlOiJ0ZXh0Iix2YWx1ZTpHWzBdLmFscGhhYmV0LHVuaXF1ZUNoYXJzOiEwLG1pbkxlbmd0aDo2NCxtYXhMZW5ndGg6NjQsY2FzZVNlbnNpdGl2aXR5OiEwLHZpc2libGU6ITF9LHtuYW1lOiJwYWRkaW5nIix0eXBlOiJ0ZXh0Iix2YWx1ZToiPSIsYmxhY2tsaXN0Q2hhcnM6R1swXS5hbHBoYWJldCxtaW5MZW5ndGg6MSxtYXhMZW5ndGg6MSxyYW5kb21pemFibGU6ITEsdmlzaWJsZTohMSx3aWR0aDo2fSx7bmFtZToicGFkZGluZ09wdGlvbmFsIix0eXBlOiJib29sZWFuIix2YWx1ZTohMSxyYW5kb21pemFibGU6ITEsdmlzaWJsZTohMSx3aWR0aDo2fV0pfXBlcmZvcm1FbmNvZGUoZSl7cmV0dXJuIEQuYmFzZTY0U3RyaW5nRnJvbUJ5dGVzKGUuZ2V0Qnl0ZXMoKSx0aGlzLmdldFZhcmlhbnRPcHRpb25zKCkpfXBlcmZvcm1EZWNvZGUoZSl7cmV0dXJuIEQuYnl0ZXNGcm9tQmFzZTY0U3RyaW5nKGUuZ2V0U3RyaW5nKCksdGhpcy5nZXRWYXJpYW50T3B0aW9ucygpKX1zZXR0aW5nVmFsdWVEaWRDaGFuZ2UoZSx0KXtzd2l0Y2goZS5nZXROYW1lKCkpe2Nhc2UidmFyaWFudCI6e3RoaXMuZ2V0U2V0dGluZygiYWxwaGFiZXQiKS5zZXRWaXNpYmxlKHQ9PT0iY3VzdG9tIiksdGhpcy5nZXRTZXR0aW5nKCJwYWRkaW5nIikuc2V0VmlzaWJsZSh0PT09ImN1c3RvbSIpLHRoaXMuZ2V0U2V0dGluZygicGFkZGluZ09wdGlvbmFsIikuc2V0VmlzaWJsZSh0PT09ImN1c3RvbSIpO2JyZWFrfWNhc2UiYWxwaGFiZXQiOnt0aGlzLmdldFNldHRpbmcoInBhZGRpbmciKS5zZXRCbGFja2xpc3RDaGFycyh0KTticmVha319fWdldFZhcmlhbnRPcHRpb25zKCl7Y29uc3QgZT10aGlzLmdldFNldHRpbmdWYWx1ZSgidmFyaWFudCIpO3JldHVybiBlPT09ImN1c3RvbSI/e2FscGhhYmV0OnRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJhbHBoYWJldCIpLmdldFN0cmluZygpLHBhZGRpbmc6dGhpcy5nZXRTZXR0aW5nVmFsdWUoInBhZGRpbmciKS5nZXRDaGFyQXQoMCkscGFkZGluZ09wdGlvbmFsOnRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJwYWRkaW5nT3B0aW9uYWwiKX06Ry5maW5kKHQ9PnQubmFtZT09PWUpfX1jb25zdCB5aT17bmFtZToiYmF1ZG90LWNvZGUiLHRpdGxlOiJCYXVkb3QgY29kZSIsY2F0ZWdvcnk6IkVuY29kaW5nIix0eXBlOiJlbmNvZGVyIn0sWmU9W3tuYW1lOiJpdGExIixsYWJlbDoiT3JpZ2luYWwgQmF1ZG90IC0gSVRBIDEiLGNoYXJhY3RlclNldDpbMCwiQSIsIkUiLCJcciIsIlkiLCJVIiwiSSIsIk8iLCJGUyIsIkoiLCJHIiwiSCIsIkIiLCJDIiwiRiIsIkQiLCIgIixgCmAsIlgiLCJaIiwiUyIsIlQiLCJXIiwiViIsMTI3LCJLIiwiTSIsIkwiLCJSIiwiUSIsIk4iLCJQIiwwLCIxIiwiMiIsIlxyIiwiMyIsIjQiLG51bGwsIjUiLCIgIiwiNiIsIjciLCIrIiwiOCIsIjkiLG51bGwsIjAiLCJMUyIsYApgLCIsIiwiOiIsIi4iLG51bGwsIj8iLCInIiwxMjcsIigiLCIpIiwiPSIsIi0iLCIvIixudWxsLCIlIl19LHtuYW1lOiJvcmlnaW5hbC1ldSIsbGFiZWw6Ik9yaWdpbmFsIEJhdWRvdCAtIENvbnRpbmVudGFsIEV1cm9wZWFuIixleHRlbmRzOiJpdGExIixvdmVycmlkZXM6ezM6IsOJIiwxNzoiVCIsMzU6IiYiLDM4OiLCuiIsNDM6ImgiLDQ2OiJmIiw0OToiLiIsNTI6IjsiLDUzOiIhIiw2Mjoi4oSWIn19LHtuYW1lOiJvcmlnaW5hbC11ayIsbGFiZWw6Ik9yaWdpbmFsIEJhdWRvdCAtIERvbWVzdGljIFVLIixleHRlbmRzOiJpdGExIixvdmVycmlkZXM6ezM6Ii8iLDE4OiItIiwzNToi4oWfIiwzODoiwrMiLDQzOiLCuSIsNDY6IuKBtSIsNDk6Ii4iLDUwOiLigbkiLDUyOiLigbciLDUzOiLCsiIsNjI6IsKjIiw2MzoiKyJ9fSx7bmFtZToiaXRhMiIsbGFiZWw6IkJhdWRvdC1NdXJyYXkgLSBJVEEgMiIsY2hhcmFjdGVyU2V0OlswLCJFIixgCmAsIkEiLCIgIiwiUyIsIkkiLCJVIiwiXHIiLCJEIiwiUiIsIkoiLCJOIiwiRiIsIkMiLCJLIiwiVCIsIloiLCJMIiwiVyIsIkgiLCJZIiwiUCIsIlEiLCJPIiwiQiIsIkciLCJGUyIsIk0iLCJYIiwiViIsMTUsMCwiMyIsYApgLCItIiwiICIsIiciLCI4IiwiNyIsIlxyIiw1LCI0Iiw3LCIsIiwiISIsIjoiLCIoIiwiNSIsIisiLCIpIiwiMiIsIsKjIiwiNiIsIjAiLCIxIiwiOSIsIj8iLCImIiwxNCwiLiIsIi8iLCI9IiwiTFMiXX0se25hbWU6InVzLXR0eSIsbGFiZWw6IkJhdWRvdC1NdXJyYXkgLSBVUy1UVFkiLGV4dGVuZHM6Iml0YTIiLG92ZXJyaWRlczp7Mzc6IiciLDQxOjUsNDM6Nyw0OToiKyIsNTI6IsKjIiw2MjoiPSJ9fSx7bmFtZToibXVycmF5LWNvZGUiLGxhYmVsOiJCYXVkb3QtTXVycmF5IC0gTXVycmF5IENvZGUiLGV4dGVuZHM6Iml0YTIiLG92ZXJyaWRlczp7MDoiICIsMjpudWxsLDQ6MTUsODpgCmAsMzE6IioiLDMyOiIgIiwzNDpudWxsLDM1Om51bGwsMzY6IkxTIiw0MDpgCmAsNDE6IsKyIiw0Mzoi4oG3Iiw0NDoiLSIsNDU6IuKFnyIsNDY6IigiLDQ3OiLigbkiLDQ5OiIuIiw1MDoiLyIsNTI6IuKBtSIsNTg6IsKzIiw2MDoiLCIsNjE6IsKjIiw2MjoiKSIsNjM6IioifX1dO2xldCBfaT1jbGFzcyBleHRlbmRzIHd7c3RhdGljIGdldE1ldGEoKXtyZXR1cm4geWl9Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX3ZhcmlhbnRDaGFyYWN0ZXJTZXQ9W10sdGhpcy5hZGRTZXR0aW5nKHtuYW1lOiJ2YXJpYW50Iix0eXBlOiJlbnVtIix2YWx1ZToiaXRhMiIsZWxlbWVudHM6WmUubWFwKGU9PmUubmFtZSksbGFiZWxzOlplLm1hcChlPT5lLmxhYmVsKSxyYW5kb21pemFibGU6ITF9KX1wZXJmb3JtRW5jb2RlKGUpe2NvbnN0IHQ9dGhpcy5nZXRTZXR0aW5nVmFsdWUoInZhcmlhbnQiKSxpPXRoaXMuZ2V0VmFyaWFudENoYXJhY3RlclNldCh0KSxzPWkuaW5kZXhPZigiRlMiKSUzMixuPWkuaW5kZXhPZigiTFMiKSUzMixyPWUuZ2V0Q29kZVBvaW50cygpLGE9ci5sZW5ndGgsbD1bXTtsZXQgbyxjLHU9ITE7Zm9yKGxldCBoPTA7aDxhO2grKyljPXJbaF0sbz1pLmluZGV4T2YoYyksbz09PS0xJiZjPj05NyYmYzw9MTIyJiYobz1pLmluZGV4T2YoYy0zMikpLG8+PTAmJm88MzI/KHUmJihsLnB1c2gobiksdT0hMSksbC5wdXNoKG8pKTpvPj0zMiYmKHV8fChsLnB1c2gocyksdT0hMCksbC5wdXNoKG8tMzIpKTtyZXR1cm4gRS5yZXNpemVCaXRTaXplZEFycmF5KGwsNSw4KX1wZXJmb3JtRGVjb2RlKGUpe2NvbnN0IHQ9dGhpcy5nZXRTZXR0aW5nVmFsdWUoInZhcmlhbnQiKSxpPXRoaXMuZ2V0VmFyaWFudENoYXJhY3RlclNldCh0KSxzPWkuaW5kZXhPZigiRlMiKSUzMixuPWkuaW5kZXhPZigiTFMiKSUzMixyPUUucmVzaXplQml0U2l6ZWRBcnJheShlLmdldEJ5dGVzKCksOCw1LCEwKSxhPW5ldyBBcnJheShyLmxlbmd0aCk7bGV0IGwsbyxjPSExLHU9MDtmb3IobGV0IGg9MDtoPHIubGVuZ3RoO2grKylsPXJbaF0sIWMmJmw9PT1zP2M9ITA6YyYmbD09PW4/Yz0hMToobz1pW2wrKGM/MzI6MCldLG8hPT1udWxsJiYoYVt1KytdPW8pKTtyZXR1cm4gYS5zbGljZSgwLHUpfWdldFZhcmlhbnRDaGFyYWN0ZXJTZXQoZSl7aWYodGhpcy5fdmFyaWFudENoYXJhY3RlclNldFtlXSE9PXZvaWQgMClyZXR1cm4gdGhpcy5fdmFyaWFudENoYXJhY3RlclNldFtlXTtjb25zdCB0PVplLmZpbmQocz0+cy5uYW1lPT09ZSk7aWYodD09PXZvaWQgMClyZXR1cm4gbnVsbDtsZXQgaT0odC5jaGFyYWN0ZXJTZXR8fFtdKS5zbGljZSgpO2lmKHQuZXh0ZW5kcyl7Y29uc3Qgcz10aGlzLmdldFZhcmlhbnRDaGFyYWN0ZXJTZXQodC5leHRlbmRzKTtzIT09bnVsbCYmKGk9cy5zbGljZSgpKX1pZih0Lm92ZXJyaWRlcylmb3IoY29uc3QgcyBpbiB0Lm92ZXJyaWRlcylpW3NdPXQub3ZlcnJpZGVzW3NdO2ZvcihsZXQgcz0wO3M8aS5sZW5ndGg7cysrKXtjb25zdCBuPWlbc107biE9PSJGUyImJm4hPT0iTFMiJiZuIT09bnVsbCYmKGlbc109dHlwZW9mIG49PSJzdHJpbmciP0YuY29kZVBvaW50c0Zyb21TdHJpbmcobilbMF06bil9cmV0dXJuIHRoaXMuX3ZhcmlhbnRDaGFyYWN0ZXJTZXRbZV09aSxpfX07Y29uc3Qgd2k9e25hbWU6ImJpZmlkLWNpcGhlciIsdGl0bGU6IkJpZmlkIGNpcGhlciIsY2F0ZWdvcnk6IlBvbHliaXVzIHNxdWFyZSBjaXBoZXJzIix0eXBlOiJlbmNvZGVyIn0sZnQ9ImFiY2RlZmdoaWtsbW5vcHFyc3R1dnd4eXoiO2NsYXNzIHZpIGV4dGVuZHMgd3tzdGF0aWMgZ2V0TWV0YSgpe3JldHVybiB3aX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5hZGRTZXR0aW5nKHtuYW1lOiJrZXkiLHR5cGU6InRleHQiLHZhbHVlOiIiLHVuaXF1ZUNoYXJzOiEwLG1pbkxlbmd0aDowLGNhc2VTZW5zaXRpdml0eTohMX0pLHRoaXMuX3BvbHliaXVzU3F1YXJlPW5ldyBvZSx0aGlzLl9wb2x5Yml1c1NxdWFyZS5zZXRTZXR0aW5nVmFsdWVzKHthbHBoYWJldDpmdCxyb3dzOiIxMjM0NSIsY29sdW1uczoiMTIzNDUiLHNlcGFyYXRvcjoiIixjYXNlU2Vuc2l0aXZpdHk6ITEsaW5jbHVkZUZvcmVpZ25DaGFyczohMX0pfWFzeW5jIHBlcmZvcm1FbmNvZGUoZSl7Y29uc3QgdD1hd2FpdCB0aGlzLl9wb2x5Yml1c1NxdWFyZS5lbmNvZGUoZS5nZXRTdHJpbmcoKS5yZXBsYWNlKC9qL2dpLCJpIikpLGk9dC5nZXRMZW5ndGgoKSxzPW5ldyBBcnJheShpKTtmb3IobGV0IG49MDtuPGkvMjtuKyspc1tuXT10LmdldENvZGVQb2ludEF0KG4qMiksc1tpLzIrbl09dC5nZXRDb2RlUG9pbnRBdChuKjIrMSk7cmV0dXJuIHRoaXMuX3BvbHliaXVzU3F1YXJlLmRlY29kZShzKX1hc3luYyBwZXJmb3JtRGVjb2RlKGUpe2NvbnN0IHQ9YXdhaXQgdGhpcy5fcG9seWJpdXNTcXVhcmUuZW5jb2RlKGUpLGk9dC5nZXRMZW5ndGgoKSxzPW5ldyBBcnJheShpKTtmb3IobGV0IG49MDtuPGkvMjtuKyspc1tuKjJdPXQuZ2V0Q29kZVBvaW50QXQobiksc1tuKjIrMV09dC5nZXRDb2RlUG9pbnRBdChpLzIrbik7cmV0dXJuIHRoaXMuX3BvbHliaXVzU3F1YXJlLmRlY29kZShzKX1zZXR0aW5nVmFsdWVEaWRDaGFuZ2UoZSx0KXtzd2l0Y2goZS5nZXROYW1lKCkpe2Nhc2Uia2V5Ijp0aGlzLl9wb2x5Yml1c1NxdWFyZS5zZXRTZXR0aW5nVmFsdWUoImFscGhhYmV0Iix0LmV4dGVuZChmdCkpO2JyZWFrfX19Y29uc3QgU2k9e25hbWU6ImJpdHdpc2Utb3BlcmF0aW9uIix0aXRsZToiQml0d2lzZSBvcGVyYXRpb24iLGNhdGVnb3J5OiJUcmFuc2Zvcm0iLHR5cGU6ImVuY29kZXIifSx4aT17Tk9UOiJOT1QiLEFORDoiTkFORCIsT1I6Ik5PUiIsWE9SOiJOWE9SIixOQU5EOiJBTkQiLE5PUjoiT1IiLE5YT1I6IlhPUiJ9O2NsYXNzIENpIGV4dGVuZHMgd3tzdGF0aWMgZ2V0TWV0YSgpe3JldHVybiBTaX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5hZGRTZXR0aW5ncyhbe25hbWU6Im9wZXJhdGlvbiIsdHlwZToiZW51bSIsdmFsdWU6Ik5PVCIsZWxlbWVudHM6WyJOT1QiLCJBTkQiLCJPUiIsIlhPUiIsIk5BTkQiLCJOT1IiLCJOWE9SIl0sbGFiZWxzOlsiTk9UIH5hIiwiQU5EIChhICYgYikiLCJPUiAoYSB8IGIpIiwiWE9SIChhIF4gYikiLCJOQU5EIH4oYSAmIGIpIiwiTk9SIH4oYSB8IGIpIiwiTlhPUiB+KGEgXiBiKSJdLHJhbmRvbWl6YWJsZTohMSxzdHlsZToicmFkaW8ifSx7bmFtZToib3BlcmFuZCIsbGFiZWw6Ik9wZXJhbmQgQiAoUmVwZWF0aW5nKSIsdHlwZToiYnl0ZXMiLHZhbHVlOm5ldyBVaW50OEFycmF5KFsxNV0pLG1pblNpemU6MSx2aXNpYmxlOiExfV0pfXBlcmZvcm1UcmFuc2xhdGUoZSx0KXtjb25zdCBpPWUuZ2V0Qnl0ZXMoKSxzPXRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJvcGVyYW5kIik7bGV0IG49dGhpcy5nZXRTZXR0aW5nVmFsdWUoIm9wZXJhdGlvbiIpO3JldHVybiB0fHwobj14aVtuXSksaS5tYXAoKHIsYSk9PnRoaXMucGVyZm9ybUJ5dGVPcGVyYXRpb24ocixuLHNbYSVzLmxlbmd0aF0pKX1wZXJmb3JtQnl0ZU9wZXJhdGlvbihlLHQsaT0wKXtzd2l0Y2godCl7Y2FzZSJOT1QiOnJldHVybn5lO2Nhc2UiQU5EIjpyZXR1cm4gZSZpO2Nhc2UiT1IiOnJldHVybiBlfGk7Y2FzZSJYT1IiOnJldHVybiBlXmk7Y2FzZSJOQU5EIjpyZXR1cm5+KGUmaSk7Y2FzZSJOT1IiOnJldHVybn4oZXxpKTtjYXNlIk5YT1IiOnJldHVybn4oZV5pKTtkZWZhdWx0OnJldHVybiBlfX1zZXR0aW5nVmFsdWVEaWRDaGFuZ2UoZSx0KXtlLmdldE5hbWUoKT09PSJvcGVyYXRpb24iJiZ0aGlzLmdldFNldHRpbmcoIm9wZXJhbmQiKS5zZXRWaXNpYmxlKHQhPT0iTk9UIil9fWNsYXNzIFV7c3RhdGljIGlzTm9kZSgpe3JldHVybiF0aGlzLmlzQnJvd3NlcigpfXN0YXRpYyBpc0Jyb3dzZXIoKXtyZXR1cm4gdHlwZW9mIHdpbmRvdzwidSJ9fWNvbnN0IGx0PXt9LFZpPXtuYW1lOiJibG9jay1jaXBoZXIiLHRpdGxlOiJCbG9jayBDaXBoZXIiLGNhdGVnb3J5OiJNb2Rlcm4gY3J5cHRvZ3JhcGh5Iix0eXBlOiJlbmNvZGVyIn0sbXQ9W3tuYW1lOiJhZXMtMTI4IixsYWJlbDoiQUVTLTEyOCIsYmxvY2tTaXplOjE2LGtleVNpemU6MTYsYnJvd3NlckFsZ29yaXRobToiYWVzIixub2RlQWxnb3JpdGhtOiJhZXMtMTI4In0se25hbWU6ImFlcy0xOTIiLGxhYmVsOiJBRVMtMTkyIixibG9ja1NpemU6MTYsa2V5U2l6ZToyNCxicm93c2VyQWxnb3JpdGhtOiExLG5vZGVBbGdvcml0aG06ImFlcy0xOTIifSx7bmFtZToiYWVzLTI1NiIsbGFiZWw6IkFFUy0yNTYiLGJsb2NrU2l6ZToxNixrZXlTaXplOjMyLGJyb3dzZXJBbGdvcml0aG06ImFlcyIsbm9kZUFsZ29yaXRobToiYWVzLTI1NiJ9XSxidD1be25hbWU6ImVjYiIsbGFiZWw6IkVDQiAoRWxlY3Ryb25pYyBDb2RlIEJvb2spIixoYXNJVjohMSxicm93c2VyTW9kZTohMSxub2RlTW9kZTohMH0se25hbWU6ImNiYyIsbGFiZWw6IkNCQyAoQ2lwaGVyIEJsb2NrIENoYWluaW5nKSIsaGFzSVY6ITAsYnJvd3Nlck1vZGU6ITAsbm9kZU1vZGU6ITB9LHtuYW1lOiJjdHIiLGxhYmVsOiJDVFIgKENvdW50ZXIpIixoYXNJVjohMCxicm93c2VyTW9kZTohMCxub2RlTW9kZTohMH1dO2NsYXNzIFIgZXh0ZW5kcyB3e3N0YXRpYyBnZXRNZXRhKCl7cmV0dXJuIFZpfWNvbnN0cnVjdG9yKCl7c3VwZXIoKTtjb25zdCBlPVIuZ2V0QWxnb3JpdGhtcygpLHQ9ZVswXSxpPVIuZ2V0TW9kZXMoKSxzPVIuaXNQYWRkaW5nQXZhaWxhYmxlKCk7dGhpcy5hZGRTZXR0aW5ncyhbe25hbWU6ImFsZ29yaXRobSIsdHlwZToiZW51bSIsdmFsdWU6dC5uYW1lLGVsZW1lbnRzOmUubWFwKG49Pm4ubmFtZSksbGFiZWxzOmUubWFwKG49Pm4ubGFiZWwpLHJhbmRvbWl6YWJsZTohMSx3aWR0aDpzPzg6MTJ9LHtuYW1lOiJwYWRkaW5nIix0eXBlOiJib29sZWFuIix2YWx1ZTohMSxyYW5kb21pemFibGU6ITEsd2lkdGg6cz80OjEyLHZpc2libGU6c30se25hbWU6Im1vZGUiLHR5cGU6ImVudW0iLHZhbHVlOiJjYmMiLGVsZW1lbnRzOmkubWFwKG49Pm4ubmFtZSksbGFiZWxzOmkubWFwKG49Pm4ubGFiZWwpLHJhbmRvbWl6YWJsZTohMX0se25hbWU6ImtleSIsdHlwZToiYnl0ZXMiLHZhbHVlOm5ldyBVaW50OEFycmF5KFs0MywxMjYsMjEsMjIsNDAsMTc0LDIxMCwxNjYsMTcxLDI0NywyMSwxMzYsOSwyMDcsNzksNjBdKSxtaW5TaXplOnQua2V5U2l6ZSxtYXhTaXplOnQua2V5U2l6ZX0se25hbWU6Iml2IixsYWJlbDoiSVYiLHR5cGU6ImJ5dGVzIix2YWx1ZTpuZXcgVWludDhBcnJheShbMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNV0pLG1pblNpemU6dC5ibG9ja1NpemUsbWF4U2l6ZTp0LmJsb2NrU2l6ZX1dKX1zZXR0aW5nVmFsdWVEaWRDaGFuZ2UoZSx0KXtzd2l0Y2goZS5nZXROYW1lKCkpe2Nhc2UiYWxnb3JpdGhtIjp7Y29uc3R7a2V5U2l6ZTppfT1SLmdldEFsZ29yaXRobSh0KTt0aGlzLmdldFNldHRpbmcoImtleSIpLnNldE1pblNpemUoaSkuc2V0TWF4U2l6ZShpKTticmVha31jYXNlIm1vZGUiOntjb25zdCBpPXRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJhbGdvcml0aG0iKSx7YmxvY2tTaXplOnN9PVIuZ2V0QWxnb3JpdGhtKGkpLHtoYXNJVjpufT1SLmdldE1vZGUodCk7dGhpcy5nZXRTZXR0aW5nKCJpdiIpLnNldFZpc2libGUobikuc2V0TWluU2l6ZShzKS5zZXRNYXhTaXplKHMpO2JyZWFrfX19YXN5bmMgcGVyZm9ybVRyYW5zbGF0ZShlLHQpe2NvbnN0IGk9ZS5nZXRCeXRlcygpLHthbGdvcml0aG06cyxtb2RlOm4sa2V5OnIscGFkZGluZzphLGl2Omx9PXRoaXMuZ2V0U2V0dGluZ1ZhbHVlcygpO3RyeXtyZXR1cm4gYXdhaXQgdGhpcy5jcmVhdGVDaXBoZXIocyxuLHIsbCxhLHQsaSl9Y2F0Y2h7dGhyb3cgdD9uZXcgeChgJHtzfSBlbmNyeXB0aW9uIGZhaWxlZGApOm5ldyB4KGAke3N9IGRlY3J5cHRpb24gZmFpbGVkLCB0aGlzIG1heSBiZSBkdWUgdG8gbWFsZm9ybWVkIGNvbnRlbnRgKX19YXN5bmMgY3JlYXRlQ2lwaGVyKGUsdCxpLHMsbixyLGEpe2NvbnN0IGw9Ui5nZXRBbGdvcml0aG0oZSkse2hhc0lWOm99PVIuZ2V0TW9kZSh0KTtpZihvfHwocz1uZXcgVWludDhBcnJheShbXSkpLFUuaXNOb2RlKCkpe2NvbnN0IGM9bC5ub2RlQWxnb3JpdGhtKyItIit0O3JldHVybiBzPWdsb2JhbC5CdWZmZXIuZnJvbShzKSxhPWdsb2JhbC5CdWZmZXIuZnJvbShhKSxuZXcgUHJvbWlzZSgodSxoKT0+e2NvbnN0IGQ9cj9sdC5jcmVhdGVDaXBoZXJpdihjLGkscyk6bHQuY3JlYXRlRGVjaXBoZXJpdihjLGkscyk7ZC5zZXRBdXRvUGFkZGluZyhuKTtjb25zdCBmPUJ1ZmZlci5jb25jYXQoW2QudXBkYXRlKGEpLGQuZmluYWwoKV0pO3UobmV3IFVpbnQ4QXJyYXkoZikpfSl9ZWxzZXtjb25zdCBjPWwuYnJvd3NlckFsZ29yaXRobSsiLSIrdCx1PXdpbmRvdy5jcnlwdG98fHdpbmRvdy5tc0NyeXB0byxoPXUuc3VidGxlfHx1LndlYmtpdFN1YnRsZSxkPWF3YWl0IGguaW1wb3J0S2V5KCJyYXciLGkse25hbWU6Y30sITEsWyJlbmNyeXB0IiwiZGVjcnlwdCJdKSxmPXtuYW1lOmMsaXY6cyxjb3VudGVyOnMsbGVuZ3RoOmwuYmxvY2tTaXplfTtsZXQgcD1yP2guZW5jcnlwdChmLGQsYSk6aC5kZWNyeXB0KGYsZCxhKTtyZXR1cm4gcC5vbmNvbXBsZXRlIT09dm9pZCAwJiYocD1uZXcgUHJvbWlzZSgoYixfKT0+e3Aub25jb21wbGV0ZT1iLmJpbmQodGhpcyxwLnJlc3VsdCkscC5vbmVycm9yPV99KSkscC50aGVuKGI9Pm5ldyBVaW50OEFycmF5KGIpKX19c3RhdGljIGlzUGFkZGluZ0F2YWlsYWJsZSgpe3JldHVybiBVLmlzTm9kZSgpfXN0YXRpYyBnZXRBbGdvcml0aG0oZSl7cmV0dXJuIG10LmZpbmQodD0+dC5uYW1lPT09ZSl9c3RhdGljIGdldEFsZ29yaXRobXMoKXtjb25zdCBlPVUuaXNOb2RlKCk7cmV0dXJuIG10LmZpbHRlcih0PT50LmJyb3dzZXJBbGdvcml0aG0mJiFlfHx0Lm5vZGVBbGdvcml0aG0mJmUpfXN0YXRpYyBnZXRNb2RlKGUpe3JldHVybiBidC5maW5kKHQ9PnQubmFtZT09PWUpfXN0YXRpYyBnZXRNb2Rlcygpe2NvbnN0IGU9VS5pc05vZGUoKTtyZXR1cm4gYnQuZmlsdGVyKHQ9PnQuYnJvd3Nlck1vZGUmJiFlfHx0Lm5vZGVNb2RlJiZlKX19Y29uc3QgSWk9e25hbWU6ImJvb3RzdHJpbmciLHRpdGxlOiJCb290c3RyaW5nIixjYXRlZ29yeToiRW5jb2RpbmciLHR5cGU6ImVuY29kZXIifSxmZT0yLHNlPSJJbnRlZ2VyIG92ZXJmbG93OiBJbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzIjtjbGFzcyAkdCBleHRlbmRzIHd7c3RhdGljIGdldE1ldGEoKXtyZXR1cm4gSWl9Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuYWRkU2V0dGluZ3MoW3tuYW1lOiJiYXNpY1JhbmdlU3RhcnQiLGxhYmVsOiJCYXNpYyBTdGFydCIsdHlwZToibnVtYmVyIix2YWx1ZTowLGludGVnZXI6ITAscm90YXRlOiExLG1pbjowLG1heDoxMjctZmUsd2lkdGg6NixyYW5kb21pemFibGU6ITF9LHtuYW1lOiJiYXNpY1JhbmdlRW5kIixsYWJlbDoiQmFzaWMgRW5kIix0eXBlOiJudW1iZXIiLHZhbHVlOjEyNyxpbnRlZ2VyOiEwLHJvdGF0ZTohMSxtaW46ZmUsbWF4OjExMTQxMTEsd2lkdGg6NixyYW5kb21pemFibGU6ITF9LHtuYW1lOiJkaWdpdE1hcHBpbmciLHR5cGU6InRleHQiLHZhbHVlOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkiLHVuaXF1ZUNoYXJzOiEwLG1pbkxlbmd0aDoyLGNhc2VTZW5zaXRpdml0eTohMSx2YWxpZGF0ZVZhbHVlOnRoaXMudmFsaWRhdGVEaWdpdE1hcHBpbmdWYWx1ZS5iaW5kKHRoaXMpLHJhbmRvbWl6YWJsZTohMX0se25hbWU6ImRlbGltaXRlciIsdHlwZToidGV4dCIsdmFsdWU6Ii0iLHdpZHRoOjYsbWluTGVuZ3RoOjEsbWF4TGVuZ3RoOjEsY2FzZVNlbnNpdGl2aXR5OiExLHZhbGlkYXRlVmFsdWU6dGhpcy52YWxpZGF0ZURlbGltaXRlclZhbHVlLmJpbmQodGhpcykscmFuZG9taXphYmxlOiExfSx7bmFtZToiY2FzZVNlbnNpdGl2aXR5Iix0eXBlOiJib29sZWFuIix2YWx1ZTohMSx3aWR0aDo2LHJhbmRvbWl6YWJsZTohMX0se25hbWU6ImluaXRpYWxCaWFzIix0eXBlOiJudW1iZXIiLHZhbHVlOjcyLGludGVnZXI6ITAsd2lkdGg6Nix2YWxpZGF0ZVZhbHVlOnRoaXMudmFsaWRhdGVJbml0aWFsQmlhc1ZhbHVlLmJpbmQodGhpcykscmFuZG9taXphYmxlOiExfSx7bmFtZToiaW5pdGlhbE4iLHR5cGU6Im51bWJlciIsdmFsdWU6MTI4LGludGVnZXI6ITAsbWluOjAsd2lkdGg6NixyYW5kb21pemFibGU6ITF9LHtuYW1lOiJ0bWluIix0eXBlOiJudW1iZXIiLHZhbHVlOjEsaW50ZWdlcjohMCxyb3RhdGU6ITEsbWluOjAsbWF4OjI2LHdpZHRoOjYscmFuZG9taXphYmxlOiExfSx7bmFtZToidG1heCIsdHlwZToibnVtYmVyIix2YWx1ZToyNixpbnRlZ2VyOiEwLHJvdGF0ZTohMSxtaW46MCxtYXg6MzUsd2lkdGg6NixyYW5kb21pemFibGU6ITF9LHtuYW1lOiJza2V3Iix0eXBlOiJudW1iZXIiLHZhbHVlOjM4LGludGVnZXI6ITAsbWluOjEsd2lkdGg6NixyYW5kb21pemFibGU6ITF9LHtuYW1lOiJkYW1wIix0eXBlOiJudW1iZXIiLHZhbHVlOjcwMCxpbnRlZ2VyOiEwLG1pbjoyLHdpZHRoOjYscmFuZG9taXphYmxlOiExfV0pfXBlcmZvcm1FbmNvZGUoZSl7Y29uc3R7aW5pdGlhbEJpYXM6dCxpbml0aWFsTjppLHRtaW46cyx0bWF4Om4sY2FzZVNlbnNpdGl2aXR5OnJ9PXRoaXMuZ2V0U2V0dGluZ1ZhbHVlcygpLGE9dGhpcy5nZXRTZXR0aW5nVmFsdWUoImRlbGltaXRlciIpLmdldENvZGVQb2ludEF0KDApLGw9dGhpcy5nZXRTZXR0aW5nVmFsdWUoImRpZ2l0TWFwcGluZyIpLmdldExlbmd0aCgpO3J8fChlPWUudG9Mb3dlckNhc2UoKSk7Y29uc3Qgbz1lLmdldENvZGVQb2ludHMoKSxjPW8ubGVuZ3RoO2xldCB1PWksaD10LGQ9MDtjb25zdCBmPVtdO2ZvcihsZXQgQz0wO0M8by5sZW5ndGg7QysrKWlmKHRoaXMuX2lzQmFzaWMob1tDXSkpZi5wdXNoKG9bQ10pO2Vsc2UgaWYob1tDXTx1KXRocm93IG5ldyB4KGBVbmV4cGVjdGVkIGNvZGUgcG9pbnQgYXQgaW5kZXggJHtDfSwgY29uc2lkZXIgY2hhbmdpbmcgaW5pdGlhbCBuIHRvIGluY2x1ZGUgdGhpcyBjb2RlIHBvaW50YCk7bGV0IHA9Zi5sZW5ndGg7Y29uc3QgYj1mLmxlbmd0aDtiPjAmJmYucHVzaChhKTtsZXQgXyxTLEIsSSxWO2Zvcig7cDxjOyl7Xz1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtmb3IoViBvZiBvKVY+PXUmJlY8XyYmIXRoaXMuX2lzQmFzaWMoVikmJihfPVYpO2lmKF8tdT52LmRpdihOdW1iZXIuTUFYX1NBRkVfSU5URUdFUi1kLHArMSkpdGhyb3cgbmV3IHgoc2UpO2QrPShfLXUpKihwKzEpLHU9Xztmb3IoViBvZiBvKXtpZigoVjx1fHx0aGlzLl9pc0Jhc2ljKFYpKSYmKytkPk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKXRocm93IG5ldyB4KHNlKTtpZihWPT09dSl7Zm9yKFM9ZCxCPWw7ST10aGlzLl9jYWxjVChCLGgscyxuKSwhKFM8SSk7Qis9bClmLnB1c2godGhpcy5fYmFzaWNDb2RlUG9pbnRGcm9tRGlnaXQoSSt2Lm1vZChTLUksbC1JKSkpLFM9di5kaXYoUy1JLGwtSSk7Zi5wdXNoKHRoaXMuX2Jhc2ljQ29kZVBvaW50RnJvbURpZ2l0KFMpKSxoPXRoaXMuX2FkYXB0QmlhcyhkLHArMSxwPT09YiksZD0wLHArK319ZCsrLHUrK31yZXR1cm4gZn1wZXJmb3JtRGVjb2RlKGUpe2NvbnN0e2luaXRpYWxCaWFzOnQsaW5pdGlhbE46aSx0bWluOnMsdG1heDpuLGNhc2VTZW5zaXRpdml0eTpyfT10aGlzLmdldFNldHRpbmdWYWx1ZXMoKSxhPXRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJkZWxpbWl0ZXIiKS5nZXRDb2RlUG9pbnRBdCgwKSxsPXRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJkaWdpdE1hcHBpbmciKS5nZXRMZW5ndGgoKTtyfHwoZT1lLnRvTG93ZXJDYXNlKCkpO2NvbnN0IG89ZS5nZXRDb2RlUG9pbnRzKCksYz1vLmxlbmd0aDtsZXQgdT1pLGg9dDtjb25zdCBkPU1hdGgubWF4KG8ubGFzdEluZGV4T2YoYSksMCksZj1bXTtmb3IobGV0IEM9MDtDPGQ7QysrKXtpZighdGhpcy5faXNCYXNpYyhvW0NdKSl0aHJvdyBuZXcgeChgRm91bmQgdW5leHBlY3RlZCBub24tYmFzaWMgY29kZSBwb2ludCBhdCAke0N9YCk7Zi5wdXNoKG9bQ10pfWxldCBwPTAsYj1kPjA/ZCsxOjAsXyxTLEIsSSxWO2Zvcig7YjxjOyl7Zm9yKF89cCxTPTEsQj1sOztCKz1sKXtpZihiPj1jKXRocm93IG5ldyB4KCJUaGUgaW5wdXQgZW5kcyB1bmV4cGVjdGVkbHkiKTtpZihJPXRoaXMuX2RpZ2l0RnJvbUJhc2ljQ29kZVBvaW50KG9bYisrXSksST09PS0xKXRocm93IG5ldyB4KGBGb3VuZCB1bmV4cGVjdGVkIG5vbi1iYXNpYyBjb2RlIHBvaW50IGF0ICR7Yi0xfWApO2lmKEk+di5kaXYoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVItcCxTKSl0aHJvdyBuZXcgeChzZSk7aWYocCs9SSpTLFY9dGhpcy5fY2FsY1QoQixoLHMsbiksSTxWKWJyZWFrO2lmKFM+di5kaXYoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsbC1WKSl0aHJvdyBuZXcgeChzZSk7Uyo9bC1WfWlmKGg9dGhpcy5fYWRhcHRCaWFzKHAtXyxmLmxlbmd0aCsxLF89PT0wKSx2LmRpdihwLGYubGVuZ3RoKzEpPk51bWJlci5NQVhfU0FGRV9JTlRFR0VSLXUpdGhyb3cgbmV3IHgoc2UpO2lmKHUrPXYuZGl2KHAsZi5sZW5ndGgrMSkscD12Lm1vZChwLGYubGVuZ3RoKzEpLHRoaXMuX2lzQmFzaWModSkpdGhyb3cgbmV3IHgoIlVuZXhwZWN0ZWRseSB1bndyYXBwZWQgYmFzaWMgY29kZSBwb2ludCIpO2Yuc3BsaWNlKHAsMCx1KSxwKyt9cmV0dXJuIGZ9X2FkYXB0QmlhcyhlLHQsaSl7Y29uc3R7ZGlnaXRNYXBwaW5nOnMsdG1pbjpuLHRtYXg6cixza2V3OmF9PXRoaXMuZ2V0U2V0dGluZ1ZhbHVlcygpLGw9cy5nZXRMZW5ndGgoKTtpZihpKXtjb25zdCBjPXRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJkYW1wIik7ZT12LmRpdihlLGMpfWVsc2UgZT12LmRpdihlLDIpO2UrPXYuZGl2KGUsdCk7bGV0IG89MDtmb3IoO2U+di5kaXYoKGwtbikqciwyKTspZT12LmRpdihlLGwtbiksbys9bDtyZXR1cm4gbyt2LmRpdigobC1uKzEpKmUsZSthKX1fY2FsY1QoZSx0LGkscyl7cmV0dXJuIGU8PXQraT9pOmU+PXQrcz9zOmUtdH1faXNCYXNpYyhlKXtjb25zdHtiYXNpY1JhbmdlU3RhcnQ6dCxiYXNpY1JhbmdlRW5kOml9PXRoaXMuZ2V0U2V0dGluZ1ZhbHVlcygpO3JldHVybiBlPj10JiZlPD1pfV9kaWdpdEZyb21CYXNpY0NvZGVQb2ludChlKXtyZXR1cm4gdGhpcy5nZXRTZXR0aW5nVmFsdWUoImRpZ2l0TWFwcGluZyIpLmluZGV4T2ZDb2RlUG9pbnQoZSl9X2Jhc2ljQ29kZVBvaW50RnJvbURpZ2l0KGUpe3JldHVybiB0aGlzLmdldFNldHRpbmdWYWx1ZSgiZGlnaXRNYXBwaW5nIikuZ2V0Q29kZVBvaW50QXQoZSl9c2V0dGluZ1ZhbHVlRGlkQ2hhbmdlKGUsdCl7c3dpdGNoKGUuZ2V0TmFtZSgpKXtjYXNlImJhc2ljUmFuZ2VTdGFydCI6e3RoaXMuZ2V0U2V0dGluZygiYmFzaWNSYW5nZUVuZCIpLnNldE1pbihlLmdldFZhbHVlKCkrZmUpLHRoaXMuZ2V0U2V0dGluZygiZGlnaXRNYXBwaW5nIikucmV2YWxpZGF0ZVZhbHVlKCksdGhpcy5nZXRTZXR0aW5nKCJkZWxpbWl0ZXIiKS5yZXZhbGlkYXRlVmFsdWUoKTticmVha31jYXNlImJhc2ljUmFuZ2VFbmQiOnt0aGlzLmdldFNldHRpbmcoImJhc2ljUmFuZ2VTdGFydCIpLnNldE1heChlLmdldFZhbHVlKCktZmUpLHRoaXMuZ2V0U2V0dGluZygiZGlnaXRNYXBwaW5nIikucmV2YWxpZGF0ZVZhbHVlKCksdGhpcy5nZXRTZXR0aW5nKCJkZWxpbWl0ZXIiKS5yZXZhbGlkYXRlVmFsdWUoKTticmVha31jYXNlImRpZ2l0TWFwcGluZyI6e2NvbnN0IGk9ZS5nZXRWYWx1ZSgpLmdldExlbmd0aCgpO3RoaXMuZ2V0U2V0dGluZygidG1heCIpLnNldE1heChpLTEpLHRoaXMuZ2V0U2V0dGluZygiZGVsaW1pdGVyIikucmV2YWxpZGF0ZVZhbHVlKCksdGhpcy5nZXRTZXR0aW5nKCJpbml0aWFsQmlhcyIpLnJldmFsaWRhdGVWYWx1ZSgpO2JyZWFrfWNhc2UidG1pbiI6e3RoaXMuZ2V0U2V0dGluZygiaW5pdGlhbEJpYXMiKS5yZXZhbGlkYXRlVmFsdWUoKTticmVha31jYXNlInRtYXgiOnt0aGlzLmdldFNldHRpbmcoInRtaW4iKS5zZXRNYXgoZS5nZXRWYWx1ZSgpKTticmVha31jYXNlImNhc2VTZW5zaXRpdml0eSI6e3RoaXMuZ2V0U2V0dGluZygiZGlnaXRNYXBwaW5nIikuc2V0Q2FzZVNlbnNpdGl2aXR5KHQpLHRoaXMuZ2V0U2V0dGluZygiZGVsaW1pdGVyIikuc2V0Q2FzZVNlbnNpdGl2aXR5KHQpO2JyZWFrfX19dmFsaWRhdGVEaWdpdE1hcHBpbmdWYWx1ZShlLHQpe2lmKCF0aGlzLmlzU2V0dGluZ1ZhbGlkKCJiYXNpY1JhbmdlU3RhcnQiLCJiYXNpY1JhbmdlRW5kIikpcmV0dXJuITE7Y29uc3QgaT10aGlzLmdldFNldHRpbmdWYWx1ZSgiYmFzaWNSYW5nZVN0YXJ0Iikscz10aGlzLmdldFNldHRpbmdWYWx1ZSgiYmFzaWNSYW5nZUVuZCIpLG49ZS5nZXRDb2RlUG9pbnRzKCkuZmluZEluZGV4KHI9PnI8aXx8cj5zKTtyZXR1cm4gbiE9PS0xP3trZXk6ImJvb3RzdHJpbmdEaWdpdE1hcHBpbmdJbnZhbGlkIixtZXNzYWdlOmBDaGFyYWN0ZXIgYXQgaW5kZXggJHtufSBuZWVkcyB0byBiZSBwYXJ0IG9mIHRoZSBnaXZlbiBiYXNpYyBjb2RlIHBvaW50IHJhbmdlYH06ITB9dmFsaWRhdGVEZWxpbWl0ZXJWYWx1ZShlLHQpe2lmKCF0aGlzLmlzU2V0dGluZ1ZhbGlkKCJiYXNpY1JhbmdlU3RhcnQiLCJiYXNpY1JhbmdlRW5kIiwiZGlnaXRNYXBwaW5nIikpcmV0dXJuITE7Y29uc3R7YmFzaWNSYW5nZVN0YXJ0OmksYmFzaWNSYW5nZUVuZDpzLGRpZ2l0TWFwcGluZzpufT10aGlzLmdldFNldHRpbmdWYWx1ZXMoKSxyPWUuZ2V0Q29kZVBvaW50QXQoMCk7cmV0dXJuIHI8aXx8cj5zfHxuLmluZGV4T2ZDb2RlUG9pbnQocikhPT0tMT97a2V5OiJib290c3RyaW5nRGVsaW1pdGVySW52YWxpZCIsbWVzc2FnZToiVGhlIHZhbHVlIG11c3QgYmUgcGFydCBvZiB0aGUgYmFzaWMgY29kZSBwb2ludCByYW5nZSB3aGlsZSBub3QgaGF2aW5nIGEgZGlnaXQgbWFwcGVkIHRvIGl0In06ITB9dmFsaWRhdGVJbml0aWFsQmlhc1ZhbHVlKGUsdCl7aWYoIXRoaXMuaXNTZXR0aW5nVmFsaWQoImRpZ2l0TWFwcGluZyIsInRtaW4iKSlyZXR1cm4hMTtjb25zdCBpPXRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJkaWdpdE1hcHBpbmciKS5nZXRMZW5ndGgoKSxzPXRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJ0bWluIik7cmV0dXJuIHYubW9kKGUsaSk+aS1zP3trZXk6ImJvb3RzdHJpbmdJbml0aWFsQmlhc0ludmFsaWQiLG1lc3NhZ2U6IlRoZSB2YWx1ZSBtdXN0IGJlIGNob3NlbiBzdWNoIHRoYXQgaW5pdGlhbF9iaWFzIG1vZCBiYXNlIDw9IGJhc2UgLSB0bWluIn06ITB9fWNsYXNzIE10IGV4dGVuZHMgYWV7cmVuZGVyKCl7Y29uc3QgZT1zdXBlci5yZW5kZXIoKTtyZXR1cm4gZS5jbGFzc0xpc3QuYWRkKCJ2aWV3ZXIiKSxlfXJlbmRlckhlYWRlcigpe2NvbnN0IGU9bS5jcmVhdGVFbGVtZW50KCJ1bCIse2NsYXNzTmFtZToiYnJpY2tfX2FjdGlvbnMifSxbbS5jcmVhdGVFbGVtZW50KCJsaSIse2NsYXNzTmFtZToiYnJpY2tfX2FjdGlvbi1pdGVtIn0sW20uY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZToiYnJpY2tfX2FjdGlvbiBicmlja19fYWN0aW9uLS1hY3RpdmUifSwiVmlldyIpXSldKSx0PXN1cGVyLnJlbmRlckhlYWRlcigpO3JldHVybiB0Lmluc2VydEJlZm9yZShlLHQuZmlyc3RDaGlsZCksdH19Y2xhc3MgQnQgZXh0ZW5kcyBNdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fdGV4dD0iIix0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl8kdGV4dGFyZWE9bnVsbH1nZXRUZXh0KCl7cmV0dXJuIHRoaXMuX3RleHR9c2V0VGV4dChlKXtyZXR1cm4gdGhpcy5fdGV4dCE9PWUmJih0aGlzLl90ZXh0PWUsdGhpcy5fJHRleHRhcmVhIT09bnVsbCYmKHRoaXMuXyR0ZXh0YXJlYS52YWx1ZT1lLHRoaXMubGF5b3V0VGV4dGFyZWEoKSkpLHRoaXN9aXNEaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXREaXNhYmxlZChlKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWQ9ZSx0aGlzLl8kdGV4dGFyZWEhPT1udWxsJiYoZT90aGlzLl8kdGV4dGFyZWEuZGlzYWJsZWQ9ImRpc2FibGVkIjp0aGlzLl8kdGV4dGFyZWEucmVtb3ZlQXR0cmlidXRlKCJkaXNhYmxlZCIpKSx0aGlzfXJlbmRlcigpe2NvbnN0IGU9c3VwZXIucmVuZGVyKCk7cmV0dXJuIGUuY2xhc3NMaXN0LmFkZCgidmlld2VyLXRleHQiKSxlfXJlbmRlckNvbnRlbnQoKXt0aGlzLl8kdGV4dGFyZWE9bS5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIse2NsYXNzTmFtZToidmlld2VyLXRleHRfX3RleHRhcmVhIixhcmlhTGFiZWw6IkNvbnRlbnQiLHNwZWxsY2hlY2s6ITEsdmFsdWU6dGhpcy5fdGV4dCxvbklucHV0OnRoaXMudGV4dGFyZWFWYWx1ZURpZENoYW5nZS5iaW5kKHRoaXMpLG9uRm9jdXM6dD0+dGhpcy5mb2N1cygpLG9uQmx1cjp0PT50aGlzLmJsdXIoKX0pLHRoaXMuaXNEaXNhYmxlZCgpJiYodGhpcy5fJHRleHRhcmVhLmRpc2FibGVkPSJkaXNhYmxlZCIpO2NvbnN0IGU9c3VwZXIucmVuZGVyQ29udGVudCgpO3JldHVybiBlLmFwcGVuZENoaWxkKHRoaXMuXyR0ZXh0YXJlYSksZX10ZXh0YXJlYVZhbHVlRGlkQ2hhbmdlKGUpe2lmKHRoaXMuaXNEaXNhYmxlZCgpKXJldHVybiBlLnByZXZlbnREZWZhdWx0KCksITE7Y29uc3QgdD10aGlzLl8kdGV4dGFyZWEudmFsdWU7dGhpcy5fdGV4dCE9PXQmJih0aGlzLl90ZXh0PXQsdGhpcy5nZXRNb2RlbCgpLnZpZXdUZXh0RGlkQ2hhbmdlKHRoaXMsdGhpcy5fdGV4dCksdGhpcy5sYXlvdXRUZXh0YXJlYSgpKX1sYXlvdXQoKXtyZXR1cm4gdGhpcy5sYXlvdXRUZXh0YXJlYSgpLHN1cGVyLmxheW91dCgpfWxheW91dFRleHRhcmVhKCl7cmV0dXJuIHRoaXMuXyR0ZXh0YXJlYS5zdHlsZS5oZWlnaHQ9IiIsdGhpcy5fJHRleHRhcmVhLnN0eWxlLmhlaWdodD1gJHt0aGlzLl8kdGV4dGFyZWEuc2Nyb2xsSGVpZ2h0fXB4YCx0aGlzfXVwZGF0ZSgpe2NvbnN0IGU9dGhpcy5nZXRNb2RlbCgpLmdldEVycm9yKCk7cmV0dXJuIGUhPT1udWxsP3RoaXMudXBkYXRlU3RhdHVzKCJlcnJvciIsIkJpbmFyeSBjb250ZW50IGNhbid0IGJlIGludGVycHJldGVkIGFzIHRleHQuIFRyeSBzd2l0Y2hpbmcgdG8gdGhlIGJ5dGVzIHZpZXcuICIrZS5tZXNzYWdlKTp0aGlzLnVwZGF0ZVN0YXR1cyhudWxsKX19Y2xhc3MgcWUgZXh0ZW5kcyBYe2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9xdWV1ZWRDb250ZW50PW51bGwsdGhpcy5fZXJyb3I9bnVsbH1hc3luYyB2aWV3KGUpe3RyeXtjb25zdCB0PXRoaXMuZ2V0U2V0dGluZ3NGb3JtKCkuZ2V0SW52YWxpZEZpZWxkcygpO2lmKHQubGVuZ3RoPjApdGhyb3cgbmV3IHgoIkNhbid0IHZpZXcgY29udGVudCB3aXRoIGludmFsaWQgc2V0dGluZ3M6ICIrdC5tYXAoaT0+aS5nZXRMYWJlbCgpKS5qb2luKCIsICIpKTtpZighdGhpcy5oYXNWaWV3KCkpe3RoaXMuX3F1ZXVlZENvbnRlbnQ9ZTtyZXR1cm59ZT1hd2FpdCB0aGlzLndpbGxWaWV3KGUpLGF3YWl0IHRoaXMucGVyZm9ybVZpZXcoZSksYXdhaXQgdGhpcy5kaWRWaWV3KGUpLHRoaXMuX2Vycm9yIT09bnVsbCYmKHRoaXMuX2Vycm9yPW51bGwsdGhpcy51cGRhdGVWaWV3KCkpfWNhdGNoKHQpe3Rocm93IHRoaXMuX2Vycm9yPXQsdGhpcy51cGRhdGVWaWV3KCksdH19YXN5bmMgd2lsbFZpZXcoZSl7cmV0dXJuIGV9YXN5bmMgcGVyZm9ybVZpZXcoZSl7fWFzeW5jIGRpZFZpZXcoZSl7fWFzeW5jIGRhcmUoZSx0PSExKXt0cnl7YXdhaXQgZSgpLHRoaXMuX2Vycm9yIT09bnVsbCYmKHRoaXMuX2Vycm9yPW51bGwsdGhpcy51cGRhdGVWaWV3KCkpfWNhdGNoKGkpe2lmKHRoaXMuX2Vycm9yPWksdGhpcy51cGRhdGVWaWV3KCksdHx8IShpIGluc3RhbmNlb2YgeCkpdGhyb3cgaX1yZXR1cm4gdGhpc31nZXRFcnJvcigpe3JldHVybiB0aGlzLl9lcnJvcn1kaWRDcmVhdGVWaWV3KGUpe3N1cGVyLmRpZENyZWF0ZVZpZXcoZSksdGhpcy5fcXVldWVkQ29udGVudCE9PW51bGwmJih0aGlzLnZpZXcodGhpcy5fcXVldWVkQ29udGVudCksdGhpcy5fcXVldWVkQ29udGVudD1udWxsKX1jb250ZW50RGlkQ2hhbmdlKGUpe3RoaXMuaGFzUGlwZSgpJiZ0aGlzLmdldFBpcGUoKS52aWV3ZXJDb250ZW50RGlkQ2hhbmdlKHRoaXMsZSl9fWNvbnN0IGtpPXtuYW1lOiJieXRlcyIsdGl0bGU6IkJ5dGVzIixjYXRlZ29yeToiVmlldyIsdHlwZToidmlld2VyIn07Y2xhc3MgRWkgZXh0ZW5kcyBxZXtzdGF0aWMgZ2V0TWV0YSgpe3JldHVybiBraX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fdmlld1Byb3RvdHlwZT1CdCx0aGlzLmFkZFNldHRpbmdzKFt7bmFtZToiZm9ybWF0Iix0eXBlOiJlbnVtIix3aWR0aDo2LHZhbHVlOiJoZXhhZGVjaW1hbCIsZWxlbWVudHM6WyJoZXhhZGVjaW1hbCIsImJpbmFyeSJdLGxhYmVsczpbIkhleGFkZWNpbWFsIiwiQmluYXJ5Il0scmFuZG9taXphYmxlOiExfSx7bmFtZToiZ3JvdXBCaXRzIixsYWJlbDoiR3JvdXAgYnkiLHR5cGU6ImVudW0iLHdpZHRoOjYsdmFsdWU6OCxlbGVtZW50czpbbnVsbCw0LDUsNiw4LDE2LDI0LDMyXSxsYWJlbHM6WyJOb25lIiwiNCBCaXRzIiwiNSBCaXRzIiwiNiBCaXRzIiwiQnl0ZSIsIjIgQnl0ZXMiLCIzIEJ5dGVzIiwiNCBCeXRlcyJdLHJhbmRvbWl6YWJsZTohMX1dKX1hc3luYyBwZXJmb3JtVmlldyhlKXtjb25zdCB0PWUuZ2V0Qnl0ZXMoKSxpPXRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJmb3JtYXQiKTtsZXQgcyxuO3N3aXRjaChpKXtjYXNlImhleGFkZWNpbWFsIjpzPUQuaGV4U3RyaW5nRnJvbUJ5dGVzKHQpLG49NDticmVhaztjYXNlImJpbmFyeSI6cz1ELmJpbmFyeVN0cmluZ0Zyb21CeXRlcyh0KSxuPTF9Y29uc3Qgcj10aGlzLmdldFNldHRpbmdWYWx1ZSgiZ3JvdXBCaXRzIik7aWYociE9PW51bGwpe2NvbnN0IGE9ci9uO3M9TC5jaHVuayhzLGEpLmpvaW4oIiAiKX10aGlzLmdldFZpZXcoKS5zZXRUZXh0KHMpfXZpZXdUZXh0RGlkQ2hhbmdlKGUsdCl7dGhpcy5kYXJlKCgpPT57Y29uc3QgaT10aGlzLmdldFNldHRpbmdWYWx1ZSgiZm9ybWF0Iik7bGV0IHM9dDtzPXMucmVwbGFjZSgvXHMvZywiIik7bGV0IG47c3dpdGNoKGkpe2Nhc2UiaGV4YWRlY2ltYWwiOm49RC5ieXRlc0Zyb21IZXhTdHJpbmcocyk7YnJlYWs7Y2FzZSJiaW5hcnkiOm49RC5ieXRlc0Zyb21CaW5hcnlTdHJpbmcocyk7YnJlYWt9dGhpcy5jb250ZW50RGlkQ2hhbmdlKHkud3JhcChuKSl9KX1zZXR0aW5nVmFsdWVEaWRDaGFuZ2UoZSx0KXtpZihlLmdldE5hbWUoKT09PSJncm91cEJpdHMiKXtjb25zdCBpPXRoaXMuZ2V0U2V0dGluZygiZm9ybWF0Iikscz1bImJpbmFyeSJdLG49WyJCaW5hcnkiXTsodD09PW51bGx8fHQlND09PTApJiYocy5wdXNoKCJoZXhhZGVjaW1hbCIpLG4ucHVzaCgiSGV4YWRlY2ltYWwiKSkscy5pbmRleE9mKGkuZ2V0VmFsdWUoKSk9PT0tMSYmaS5zZXRWYWx1ZShzWzBdKSxpLnNldEVsZW1lbnRzKHMsbil9fX1jb25zdCAkaT17bmFtZToiY2Flc2FyLWNpcGhlciIsdGl0bGU6IkNhZXNhciBjaXBoZXIiLGNhdGVnb3J5OiJDaXBoZXJzIix0eXBlOiJlbmNvZGVyIn0sTWk9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IixCaT03O2NsYXNzIExpIGV4dGVuZHMgd3tzdGF0aWMgZ2V0TWV0YSgpe3JldHVybiAkaX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5hZGRTZXR0aW5ncyhbe25hbWU6InNoaWZ0Iix0eXBlOiJudW1iZXIiLGxhYmVsOiJTaGlmdCIscHJpb3JpdHk6MTAsdmFsdWU6QmksaW50ZWdlcjohMCx1c2VCaWdJbnQ6ITAsZGVzY3JpYmVWYWx1ZTp0aGlzLmRlc2NyaWJlU2hpZnRWYWx1ZS5iaW5kKHRoaXMpLHJhbmRvbWl6ZVZhbHVlOnRoaXMucmFuZG9taXplU2hpZnRWYWx1ZS5iaW5kKHRoaXMpfSx7bmFtZToiYWxwaGFiZXQiLHR5cGU6InRleHQiLHZhbHVlOk1pLHVuaXF1ZUNoYXJzOiEwLG1pbkxlbmd0aDoyLGNhc2VTZW5zaXRpdml0eTohMSxyYW5kb21pemFibGU6ITF9LHtuYW1lOiJjYXNlU3RyYXRlZ3kiLHR5cGU6ImVudW0iLHZhbHVlOiJtYWludGFpbiIsZWxlbWVudHM6WyJtYWludGFpbiIsImlnbm9yZSIsInN0cmljdCJdLGxhYmVsczpbIk1haW50YWluIGNhc2UiLCJJZ25vcmUgY2FzZSIsIlN0cmljdCAoQSDiiaAgYSkiXSx3aWR0aDo2LHJhbmRvbWl6YWJsZTohMX0se25hbWU6ImluY2x1ZGVGb3JlaWduQ2hhcnMiLHR5cGU6ImJvb2xlYW4iLGxhYmVsOiJGb3JlaWduIENoYXJzIix3aWR0aDo2LHZhbHVlOiEwLHRydWVMYWJlbDoiSW5jbHVkZSIsZmFsc2VMYWJlbDoiSWdub3JlIixyYW5kb21pemFibGU6ITF9XSl9cGVyZm9ybVRyYW5zbGF0ZShlLHQpe2NvbnN0e3NoaWZ0OmksY2FzZVN0cmF0ZWd5OnMsaW5jbHVkZUZvcmVpZ25DaGFyczpufT10aGlzLmdldFNldHRpbmdWYWx1ZXMoKTtsZXQgcj10aGlzLmdldFNldHRpbmdWYWx1ZSgiYWxwaGFiZXQiKSxhO3MhPT0ic3RyaWN0IiYmKHI9ci50b0xvd2VyQ2FzZSgpLGE9ci50b1VwcGVyQ2FzZSgpKTtjb25zdCBsPXIuZ2V0TGVuZ3RoKCksbz1lLmdldExlbmd0aCgpLGM9bmV3IEFycmF5KG8pO2xldCB1LGgsZCxmLHA9MDtmb3IobGV0IGI9MDtiPG87YisrKXU9ZS5nZXRDb2RlUG9pbnRBdChiKSxoPXIuaW5kZXhPZkNvZGVQb2ludCh1KSxmPSExLGg9PT0tMSYmcyE9PSJzdHJpY3QiJiYoaD1hLmluZGV4T2ZDb2RlUG9pbnQodSksZj0hMCksaD09PS0xP24mJihjW3ArK109dSk6KHR5cGVvZiBpIT0iYmlnaW50Ij9kPXYubW9kKGgraSoodD8xOi0xKSxsKTpkPU51bWJlcih2Lm1vZChCaWdJbnQoaCkraSpCaWdJbnQodD8xOi0xKSxCaWdJbnQobCkpKSxzPT09Im1haW50YWluIiYmZj9jW3ArK109YS5nZXRDb2RlUG9pbnRBdChkKTpjW3ArK109ci5nZXRDb2RlUG9pbnRBdChkKSk7cmV0dXJuIGMuc2xpY2UoMCxwKX1zZXR0aW5nVmFsdWVEaWRDaGFuZ2UoZSx0KXtzd2l0Y2goZS5nZXROYW1lKCkpe2Nhc2UiY2FzZVN0cmF0ZWd5Ijp0aGlzLmdldFNldHRpbmcoImFscGhhYmV0Iikuc2V0Q2FzZVNlbnNpdGl2aXR5KHQ9PT0ic3RyaWN0Iik7YnJlYWs7Y2FzZSJhbHBoYWJldCI6dGhpcy5nZXRTZXR0aW5nKCJzaGlmdCIpLnNldE5lZWRzVmFsdWVEZXNjcmlwdGlvblVwZGF0ZSgpO2JyZWFrfX1yYW5kb21pemVTaGlmdFZhbHVlKGUsdCl7Y29uc3QgaT10aGlzLmdldFNldHRpbmcoImFscGhhYmV0Iik7cmV0dXJuIGkuaXNWYWxpZCgpP2UubmV4dEludGVnZXIoMSxpLmdldFZhbHVlKCkuZ2V0TGVuZ3RoKCktMSk6bnVsbH1kZXNjcmliZVNoaWZ0VmFsdWUoZSx0KXtpZighdGhpcy5nZXRTZXR0aW5nKCJhbHBoYWJldCIpLmlzVmFsaWQoKSlyZXR1cm4gbnVsbDtjb25zdHthbHBoYWJldDppLHNoaWZ0OnN9PXRoaXMuZ2V0U2V0dGluZ1ZhbHVlcygpLG49aS5nZXRDaGFyQXQoMCkscj12Lm1vZChzLHR5cGVvZiBzIT0iYmlnaW50Ij9pLmdldExlbmd0aCgpOkJpZ0ludChpLmdldExlbmd0aCgpKSksYT1pLmdldENoYXJBdChyKTtyZXR1cm5gJHtufeKGkiR7YX1gfX1jb25zdCB6aT17bmFtZToiY2FzZS10cmFuc2Zvcm0iLHRpdGxlOiJDYXNlIHRyYW5zZm9ybSIsY2F0ZWdvcnk6IlRyYW5zZm9ybSIsdHlwZToiZW5jb2RlciJ9O2NsYXNzIEFpIGV4dGVuZHMgd3tzdGF0aWMgZ2V0TWV0YSgpe3JldHVybiB6aX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5hZGRTZXR0aW5nKHtuYW1lOiJjYXNlIix0eXBlOiJlbnVtIix2YWx1ZToibG93ZXIiLGVsZW1lbnRzOlsibG93ZXIiLCJ1cHBlciIsImNhcGl0YWxpemUiLCJhbHRlcm5hdGluZyIsImludmVyc2UiXSxsYWJlbHM6WyJMb3dlciBjYXNlIiwiVXBwZXIgY2FzZSIsIkNhcGl0YWxpemUiLCJBbHRlcm5hdGluZyBjYXNlIiwiSW52ZXJzZSBjYXNlIl0scmFuZG9taXphYmxlOiExLHN0eWxlOiJyYWRpbyJ9KX1wZXJmb3JtRW5jb2RlKGUpe3N3aXRjaCh0aGlzLmdldFNldHRpbmdWYWx1ZSgiY2FzZSIpKXtjYXNlImxvd2VyIjpyZXR1cm4gZS50b0xvd2VyQ2FzZSgpO2Nhc2UidXBwZXIiOnJldHVybiBlLnRvVXBwZXJDYXNlKCk7Y2FzZSJjYXBpdGFsaXplIjpyZXR1cm4geS53cmFwKGUuZ2V0U3RyaW5nKCkucmVwbGFjZSgvXHdcUyovdWcsdD0+dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt0LnN1YnN0cigxKS50b0xvd2VyQ2FzZSgpKSk7Y2FzZSJhbHRlcm5hdGluZyI6cmV0dXJuIHkud3JhcChlLmdldENoYXJzKCkubWFwKCh0LGkpPT5pJTI9PT0wP3QudG9Mb3dlckNhc2UoKTp0LnRvVXBwZXJDYXNlKCkpLmpvaW4oIiIpKTtjYXNlImludmVyc2UiOnJldHVybiB0aGlzLl9pbnZlcnNlQ2FzZShlKTtkZWZhdWx0OnJldHVybiBlfX1wZXJmb3JtRGVjb2RlKGUpe3N3aXRjaCh0aGlzLmdldFNldHRpbmdWYWx1ZSgiY2FzZSIpKXtjYXNlImludmVyc2UiOnJldHVybiB0aGlzLl9pbnZlcnNlQ2FzZShlKTtkZWZhdWx0OnJldHVybiBlfX1faW52ZXJzZUNhc2UoZSl7cmV0dXJuIHkud3JhcChlLmdldENoYXJzKCkubWFwKHQ9Pntjb25zdCBpPXQudG9Mb3dlckNhc2UoKTtyZXR1cm4gdCE9PWk/aTp0LnRvVXBwZXJDYXNlKCl9KS5qb2luKCIiKSl9fWNvbnN0IFRpPXtuYW1lOiJlbmlnbWEiLHRpdGxlOiJFbmlnbWEgbWFjaGluZSIsY2F0ZWdvcnk6IkNpcGhlcnMiLHR5cGU6ImVuY29kZXIifSxYZT0iYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLG5lPVt7bmFtZToiSSIsbGFiZWw6IkVuaWdtYSBJIixkZXNjcmlwdGlvbjoiR2VybWFuIEFybXkgJiBBaXIgRm9yY2UiLGNoYXJhY3Rlckdyb3VwU2l6ZTo1LHBsdWdib2FyZDohMCxlbnRyeVJvdG9yOiJFVFctQUJDREVGIixyZWZsZWN0b3JSb3RvcnM6WyJVS1ctQSIsIlVLVy1CIiwiVUtXLUMiXSxyZWZsZWN0b3JUaHVtYndoZWVsOiExLHNsb3RzOlt7cm90b3JzOlsiSSIsIklJIiwiSUlJIiwiSVYiLCJWIl19LHtyb3RvcnM6WyJJIiwiSUkiLCJJSUkiLCJJViIsIlYiXX0se3JvdG9yczpbIkkiLCJJSSIsIklJSSIsIklWIiwiViJdfV19LHtuYW1lOiJOIixsYWJlbDonRW5pZ21hIEkgIk5vcmVuaWdtYSInLGRlc2NyaXB0aW9uOiJOb3J3ZWdpYW4gUG9saWNlIFNlY3VyaXR5IFNlcnZpY2UiLGNoYXJhY3Rlckdyb3VwU2l6ZTo1LHBsdWdib2FyZDohMCxlbnRyeVJvdG9yOiJFVFctQUJDREVGIixyZWZsZWN0b3JSb3RvcnM6WyJVS1ctTiJdLHJlZmxlY3RvclRodW1id2hlZWw6ITEsc2xvdHM6W3tyb3RvcnM6WyJJLU4iLCJJSS1OIiwiSUlJLU4iLCJJVi1OIiwiVi1OIl19LHtyb3RvcnM6WyJJLU4iLCJJSS1OIiwiSUlJLU4iLCJJVi1OIiwiVi1OIl19LHtyb3RvcnM6WyJJLU4iLCJJSS1OIiwiSUlJLU4iLCJJVi1OIiwiVi1OIl19XX0se25hbWU6IlMiLGxhYmVsOidFbmlnbWEgSSAiU29uZGVybWFzY2hpbmUiJyxkZXNjcmlwdGlvbjoiR2VybWFuIEludGVsbGlnZW5jZSIsY2hhcmFjdGVyR3JvdXBTaXplOjUscGx1Z2JvYXJkOiEwLGVudHJ5Um90b3I6IkVUVy1BQkNERUYiLHJlZmxlY3RvclJvdG9yczpbIlVLVy1TIl0scmVmbGVjdG9yVGh1bWJ3aGVlbDohMSxzbG90czpbe3JvdG9yczpbIkktUyIsIklJLVMiLCJJSUktUyJdfSx7cm90b3JzOlsiSS1TIiwiSUktUyIsIklJSS1TIl19LHtyb3RvcnM6WyJJLVMiLCJJSS1TIiwiSUlJLVMiXX1dfSx7bmFtZToiTTMiLGxhYmVsOiJFbmlnbWEgTTMiLGRlc2NyaXB0aW9uOiJHZXJtYW4gQXJteSAmIE5hdnkiLGNoYXJhY3Rlckdyb3VwU2l6ZTo1LHBsdWdib2FyZDohMCxlbnRyeVJvdG9yOiJFVFctQUJDREVGIixyZWZsZWN0b3JSb3RvcnM6WyJVS1ctQiIsIlVLVy1DIl0scmVmbGVjdG9yVGh1bWJ3aGVlbDohMSxzbG90czpbe3JvdG9yczpbIkkiLCJJSSIsIklJSSIsIklWIiwiViIsIlZJIiwiVklJIiwiVklJSSJdfSx7cm90b3JzOlsiSSIsIklJIiwiSUlJIiwiSVYiLCJWIiwiVkkiLCJWSUkiLCJWSUlJIl19LHtyb3RvcnM6WyJJIiwiSUkiLCJJSUkiLCJJViIsIlYiLCJWSSIsIlZJSSIsIlZJSUkiXX1dfSx7bmFtZToiTTQiLGxhYmVsOidFbmlnbWEgTTQgIlNoYXJrIicsZGVzY3JpcHRpb246Ikdlcm1hbiBTdWJtYXJpbmVzIixjaGFyYWN0ZXJHcm91cFNpemU6NCxwbHVnYm9hcmQ6ITAsZW50cnlSb3RvcjoiRVRXLUFCQ0RFRiIscmVmbGVjdG9yUm90b3JzOlsiVUtXLUItdGhpbiIsIlVLVy1DLXRoaW4iXSxyZWZsZWN0b3JUaHVtYndoZWVsOiExLHNsb3RzOlt7cm90b3JzOlsiYmV0YSIsImdhbW1hIl0scm90YXRpbmc6ITF9LHtyb3RvcnM6WyJJIiwiSUkiLCJJSUkiLCJJViIsIlYiLCJWSSIsIlZJSSIsIlZJSUkiXX0se3JvdG9yczpbIkkiLCJJSSIsIklJSSIsIklWIiwiViIsIlZJIiwiVklJIiwiVklJSSJdfSx7cm90b3JzOlsiSSIsIklJIiwiSUlJIiwiSVYiLCJWIiwiVkkiLCJWSUkiLCJWSUlJIl19XX0se25hbWU6IkQiLGxhYmVsOiJFbmlnbWEgRCAvIEsiLGRlc2NyaXB0aW9uOiJDb21tZXJjaWFsIEVuaWdtYSIsY2hhcmFjdGVyR3JvdXBTaXplOjUscGx1Z2JvYXJkOiExLGVudHJ5Um90b3I6IkVUVy1RV0VSVFoiLHJlZmxlY3RvclJvdG9yczpbIlVLVy1DT00iXSxyZWZsZWN0b3JUaHVtYndoZWVsOiEwLHNsb3RzOlt7cm90b3JzOlsiSS1EIiwiSUktRCIsIklJSS1EIl19LHtyb3RvcnM6WyJJLUQiLCJJSS1EIiwiSUlJLUQiXX0se3JvdG9yczpbIkktRCIsIklJLUQiLCJJSUktRCJdfV19LHtuYW1lOiJUIixsYWJlbDonRW5pZ21hIFQgIlRpcnBpdHoiJyxkZXNjcmlwdGlvbjoiSmFwYW5lc2UgQXJteSIsY2hhcmFjdGVyR3JvdXBTaXplOjUscGx1Z2JvYXJkOiExLGVudHJ5Um90b3I6IkVUVy1UIixyZWZsZWN0b3JSb3RvcnM6WyJVS1ctVCJdLHJlZmxlY3RvclRodW1id2hlZWw6ITAsc2xvdHM6W3tyb3RvcnM6WyJJLVQiLCJJSS1UIiwiSUlJLVQiLCJJVi1UIiwiVi1UIiwiVkktVCIsIlZJSS1UIiwiVklJSS1UIl19LHtyb3RvcnM6WyJJLVQiLCJJSS1UIiwiSUlJLVQiLCJJVi1UIiwiVi1UIiwiVkktVCIsIlZJSS1UIiwiVklJSS1UIl19LHtyb3RvcnM6WyJJLVQiLCJJSS1UIiwiSUlJLVQiLCJJVi1UIiwiVi1UIiwiVkktVCIsIlZJSS1UIiwiVklJSS1UIl19XX0se25hbWU6IktTIixsYWJlbDoiU3dpc3MtSyIsZGVzY3JpcHRpb246IlN3aXNzIEFybXkgJiBBaXIgRm9yY2UiLGNoYXJhY3Rlckdyb3VwU2l6ZTo1LHBsdWdib2FyZDohMSxlbnRyeVJvdG9yOiJFVFctUVdFUlRaIixyZWZsZWN0b3JSb3RvcnM6WyJVS1ctQ09NIl0scmVmbGVjdG9yVGh1bWJ3aGVlbDohMCxzbG90czpbe3JvdG9yczpbIkktS1MiLCJJSS1LUyIsIklJSS1LUyJdfSx7cm90b3JzOlsiSS1LUyIsIklJLUtTIiwiSUlJLUtTIl19LHtyb3RvcnM6WyJJLUtTIiwiSUktS1MiLCJJSUktS1MiXX1dfSx7bmFtZToiS1IiLGxhYmVsOidSYWlsd2F5IEVuaWdtYSAiUm9ja2V0IEkiJyxkZXNjcmlwdGlvbjoiR2VybWFuIFJhaWx3YXkiLGNoYXJhY3Rlckdyb3VwU2l6ZTo1LHBsdWdib2FyZDohMSxlbnRyeVJvdG9yOiJFVFctUVdFUlRaIixyZWZsZWN0b3JSb3RvcnM6WyJVS1ctS1IiXSxyZWZsZWN0b3JUaHVtYndoZWVsOiEwLHNsb3RzOlt7cm90b3JzOlsiSS1LUiIsIklJLUtSIiwiSUlJLUtSIl19LHtyb3RvcnM6WyJJLUtSIiwiSUktS1IiLCJJSUktS1IiXX0se3JvdG9yczpbIkktS1IiLCJJSS1LUiIsIklJSS1LUiJdfV19LHtuYW1lOiJaIixsYWJlbDoiWsOkaGx3ZXJrIEVuaWdtYSBBLTg2NSIsZGVzY3JpcHRpb246bnVsbCxjaGFyYWN0ZXJHcm91cFNpemU6NSxwbHVnYm9hcmQ6ITEsZW50cnlSb3RvcjoiRVRXLVFXRVJUWiIscmVmbGVjdG9yUm90b3JzOlsiVUtXLUNPTSJdLHJlZmxlY3RvclRodW1id2hlZWw6ITAscmVmbGVjdG9yUm90YXRpbmc6ITAsdHVybm92ZXJNZWNoYW5pc206ImNvZyIsc2xvdHM6W3tyb3RvcnM6WyJJLVoiLCJJSS1aIiwiSUlJLVoiXX0se3JvdG9yczpbIkktWiIsIklJLVoiLCJJSUktWiJdfSx7cm90b3JzOlsiSS1aIiwiSUktWiIsIklJSS1aIl19XX0se25hbWU6IkcxMTEiLGxhYmVsOiJBYndlaHIgRW5pZ21hIEctMTExIixkZXNjcmlwdGlvbjpudWxsLGNoYXJhY3Rlckdyb3VwU2l6ZTo1LHBsdWdib2FyZDohMSxlbnRyeVJvdG9yOiJFVFctUVdFUlRaIixyZWZsZWN0b3JSb3RvcnM6WyJVS1ctQ09NIl0scmVmbGVjdG9yVGh1bWJ3aGVlbDohMCxyZWZsZWN0b3JSb3RhdGluZzohMCx0dXJub3Zlck1lY2hhbmlzbToiY29nIixzbG90czpbe3JvdG9yczpbIkktRzExMSIsIklJLUcxMTEiLCJWLUcxMTEiXX0se3JvdG9yczpbIkktRzExMSIsIklJLUcxMTEiLCJWLUcxMTEiXX0se3JvdG9yczpbIkktRzExMSIsIklJLUcxMTEiLCJWLUcxMTEiXX1dfSx7bmFtZToiRzMxMiIsbGFiZWw6IkFid2VociBFbmlnbWEgRy0zMTIiLGRlc2NyaXB0aW9uOiJHZXJtYW4gU2VyZXQgU2VydmljZSIsY2hhcmFjdGVyR3JvdXBTaXplOjUscGx1Z2JvYXJkOiExLGVudHJ5Um90b3I6IkVUVy1RV0VSVFoiLHJlZmxlY3RvclJvdG9yczpbIlVLVy1HMzEyIl0scmVmbGVjdG9yVGh1bWJ3aGVlbDohMCxyZWZsZWN0b3JSb3RhdGluZzohMCx0dXJub3Zlck1lY2hhbmlzbToiY29nIixzbG90czpbe3JvdG9yczpbIkktRzMxMiIsIklJLUczMTIiLCJJSUktRzMxMiJdfSx7cm90b3JzOlsiSS1HMzEyIiwiSUktRzMxMiIsIklJSS1HMzEyIl19LHtyb3RvcnM6WyJJLUczMTIiLCJJSS1HMzEyIiwiSUlJLUczMTIiXX1dfSx7bmFtZToiRzI2MCIsbGFiZWw6IkFid2VociBFbmlnbWEgRy0yNjAiLGRlc2NyaXB0aW9uOiJHZXJtYW4gU2VyZXQgU2VydmljZSBpbiBBcmdlbnRpbmEiLGNoYXJhY3Rlckdyb3VwU2l6ZTo1LHBsdWdib2FyZDohMSxlbnRyeVJvdG9yOiJFVFctUVdFUlRaIixyZWZsZWN0b3JSb3RvcnM6WyJVS1ctQ09NIl0scmVmbGVjdG9yVGh1bWJ3aGVlbDohMCxyZWZsZWN0b3JSb3RhdGluZzohMCx0dXJub3Zlck1lY2hhbmlzbToiY29nIixzbG90czpbe3JvdG9yczpbIkktRzI2MCIsIklJLUcyNjAiLCJJSUktRzI2MCJdfSx7cm90b3JzOlsiSS1HMjYwIiwiSUktRzI2MCIsIklJSS1HMjYwIl19LHtyb3RvcnM6WyJJLUcyNjAiLCJJSS1HMjYwIiwiSUlJLUcyNjAiXX1dfV0sSmU9WyJuYW1lIiwibGFiZWwiLCJ3aXJpbmciLCJ0dXJub3ZlcnMiXSx5dD1bIkVUVy1BQkNERUYiLCJBbHBoYWJldCIsImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IiwiIiwiRVRXLVFXRVJUWiIsIktleWJvYXJkIiwiand1bGNtbm9ocHF6eXhpcmFka2VndmJ0c2YiLCIiLCJJIiwiSSIsImVrbWZsZ2RxdnpudG93eWh4dXNwYWlicmNqIiwicSIsIklJIiwiSUkiLCJhamRrc2lydXhibGh3dG1jcWd6bnB5ZnZvZSIsImUiLCJJSUkiLCJJSUkiLCJiZGZoamxjcHJ0eHZ6bnllaXdnYWttdXNxbyIsInYiLCJJViIsIklWIiwiZXNvdnB6amF5cXVpcmh4bG5mdGdrZGNtd2IiLCJqIiwiViIsIlYiLCJ2emJyZ2l0eXVwc2RuaGx4YXdtanFvZmVjayIsInoiLCJWSSIsIlZJIiwianBndm91bWZ5cWJlbmh6cmRrYXN4bGljdHciLCJ6bSIsIlZJSSIsIlZJSSIsIm56amhncmN4bXlzd2JvdWZhaXZscGVrcWR0Iiwiem0iLCJWSUlJIiwiVklJSSIsImZrcWh0bHhvY2Jqc3BkenJhbWV3bml1eWd2Iiwiem0iLCJiZXRhIiwiQmV0YSIsImxleWp2Y25peHdwYnFtZHJ0YWt6Z2Z1aG9zIiwiIiwiZ2FtbWEiLCJHYW1tYSIsImZzb2thbnVlcmhtYnRpeWN3bHFwenh2Z2pkIiwiIiwiVUtXLUEiLCJVS1cgQSIsImVqbXphbHl4dmJ3ZmNycXVvbnRzcGlraGdkIiwiIiwiVUtXLUIiLCJVS1cgQiIsInlydWhxc2xkcHhuZ29rbWllYmZ6Y3d2amF0IiwiIiwiVUtXLUMiLCJVS1cgQyIsImZ2cGppYW95ZWRyenh3Z2N0a3Vxc2JubWhsIiwiIiwiVUtXLUItdGhpbiIsIlVLVyBCIHRoaW4iLCJlbmtxYXV5d2ppY29wYmxtZHh6dmZ0aHJncyIsIiIsIlVLVy1DLXRoaW4iLCJVS1cgQyB0aGluIiwicmRvYmpudGt2ZWhtbGZjd3pheGd5aXBzdXEiLCIiLCJJLU4iLCJJIiwid3Rva2FzdXl2cmJ4amhxY3B6ZWZtZGlubGciLCJxIiwiSUktTiIsIklJIiwiZ2pscHVic3dlbWN0cXZoeGFvZnpkcmt5bmkiLCJlIiwiSUlJLU4iLCJJSUkiLCJqd2ZtaG5icHVzZHl0aXh2emdycWxhb2VrYyIsInYiLCJJVi1OIiwiSVYiLCJmZ3pqbXZ4ZXBid3NocXRsaXVkeWtjbnJhbyIsImoiLCJWLU4iLCJWIiwiaGVqeHFvdHpidmZkYXNjaWx3cGd5bm11cmsiLCJ6IiwiVUtXLU4iLCJVS1ciLCJtb3dqeXB1eG5kc3JhaWJmdmxremdxY2hldCIsIiIsIkktUyIsIkkiLCJ2ZW9zaXJ6dWpkcWNrZ3d5cG54YWZsdGhtYiIsInEiLCJJSS1TIiwiSUkiLCJ1ZW1vYXRxbHNocGtjeWZ3anpiZ3Z4aWRuciIsImUiLCJJSUktUyIsIklJSSIsInR6aHhtYnNpcG51cmpmZGtlcXZjd2dsYW95IiwidiIsIlVLVy1TIiwiVUtXIiwiY2lhZ3NuZHJieXRwemZ1bHZoZWtvcXh3am0iLCIiLCJJLUQiLCJJIiwibHBnc3ptaGFlb3FrdnhyZnlidXRuaWNqZHciLCJ5IiwiSUktRCIsIklJIiwic2x2Z2J0ZnhqcW9oZXdpcnp5YW1rcGNuZHUiLCJlIiwiSUlJLUQiLCJJSUkiLCJjamdkcHNoa3R1cmF3enhmbXlucW9idmxpZSIsIm4iLCJVS1ctQ09NIiwiVUtXIiwiaW1ldGNnZnJheXNxYnp4d2xoa2R2dXBvam4iLCIiLCJFVFctVCIsIkVUVyIsImlseHJ6dGtnanlhbXd2ZHVmY3BxZW9uc2hiIiwiIiwiSS1UIiwiSSIsImtwdHl1ZWxvY3ZncmZxZGFuam1ic3doenhpIiwid3pla3EiLCJJSS1UIiwiSUkiLCJ1cGh6bHdlcW10ZGp4Y2Frc29pZ3ZieWZuciIsInd6ZmxyIiwiSUlJLVQiLCJJSUkiLCJxdWRseXJmZWtvbnZ6YXh3aG1ncGpic2ljdCIsInd6ZWtxIiwiSVYtVCIsIklWIiwiY2l3dGJreG5yZXNwZmx5ZGFndmhxdW9qem0iLCJ3emZsciIsIlYtVCIsIlYiLCJ1YXhnaXNuamJ2ZXJkeWxmend0cGNrb2htcSIsInljZmtyIiwiVkktVCIsIlZJIiwieGZ1emdhbHZoY255c2V3cXRkbXJia3Bpb2oiLCJ4ZWltcSIsIlZJSS1UIiwiVklJIiwiYmp2ZnR4cGxuYXlvemlrd2dkcWVydWNoc20iLCJ5Y2ZrciIsIlZJSUktVCIsIlZJSUkiLCJ5bXRwbnpod2tvZGFqeGVsdXF2Z2NiaXNmciIsInhlaW1xIiwiVUtXLVQiLCJVS1ciLCJnZWtwYnRhdW1vY25pbGpkeHp5Zmh3dnFzciIsIiIsIkktS1MiLCJJIiwicGV6dW9oeHNjdmZtdGJnbHJpbnFqd2F5ZGsiLCJ5IiwiSUktS1MiLCJJSSIsInpvdWVzeWRrZndwY2lxeGhtdmJsZ25qcmF0IiwiZSIsIklJSS1LUyIsIklJSSIsImVocnZ4Z2FvYnF1c2ltemZseW53a3RwZGpjIiwibiIsIkktS1IiLCJJIiwiamdkcW94dXNjYW1pZnJ2dHBuZXdrYmx6eWgiLCJuIiwiSUktS1IiLCJJSSIsIm50enBzZmJva213cmNqZGl2bGFleXV4aGdxIiwiZSIsIklJSS1LUiIsIklJSSIsImp2aXViaHRjZHlha2VxenBvc2d4bnJtd2ZsIiwieSIsIlVLVy1LUiIsIlVLVyIsInF5aG9nbmVjdnB1enRmZGpheHdta2lzcmJsIiwiIiwiSS1aIiwiSSIsImxwZ3N6bWhhZW9xa3Z4cmZ5YnV0bmljamR3Iiwic3V2d3phYmNlZmdpa2xvcHEiLCJJSS1aIiwiSUkiLCJzbHZnYnRmeGpxb2hld2lyenlhbWtwY25kdSIsInN0dnl6YWNkZmdoa21ucSIsIklJSS1aIiwiSUlJIiwiY2pnZHBzaGt0dXJhd3p4Zm15bnFvYnZsaWUiLCJ1d3hhZWZoa21uciIsIkktRzExMSIsIkkiLCJ3bHJoYnF1bmRramN6c2V4b3RtYWd5ZnB2aSIsInN1dnd6YWJjZWZnaWtsb3BxIiwiSUktRzExMSIsIklJIiwidGZqcWF6d21obGN1aXhyZHlnb2V2Ym5za3AiLCJzdHZ5emFjZGZnaGttbnEiLCJWLUcxMTEiLCJWIiwicXRwaXh3dmRmcm11c2xqb2hjYW5lemt5YmciLCJzd3pmaG1xIiwiSS1HMzEyIiwiSSIsImRtdHdzaWxydXlxbmtmZWpjYXpicGd4b2h2Iiwic3V2d3phYmNlZmdpa2xvcHEiLCJJSS1HMzEyIiwiSUkiLCJocXpncGp0bW9ibG5jaWZkeWF3dmV1c3JreCIsInN0dnl6YWNkZmdoa21ucSIsIklJSS1HMzEyIiwiSUlJIiwidXFudGxzemZtcmVoZHB4a2lidnlnamN3b2EiLCJ1d3hhZWZoa21uciIsIlVLVy1HMzEyIiwiVUtXIiwicnVscW16anN5Z29jZXRrd2RhaG5ieHB2aWYiLCIiLCJJLUcyNjAiLCJJIiwicmNzcGJsa3FhdW1od3l0aWZ6dmdvam5leGQiLCJzdXZ3emFiY2VmZ2lrbG9wcSIsIklJLUcyNjAiLCJJSSIsIndjbWlidnBqeGFyb3NnbmRsemtleWh1ZnF0Iiwic3R2eXphY2RmZ2hrbW5xIiwiSUlJLUcyNjAiLCJJSUkiLCJmdmRoemVsc3FtYXhva3lpd3BnY2J1anRuciIsInV3eGFlZmhrbW5yIl07bGV0IG1lPW51bGwsYmU9bnVsbDtjbGFzcyBNIGV4dGVuZHMgd3tzdGF0aWMgZ2V0TWV0YSgpe3JldHVybiBUaX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCk7Y29uc3QgZT1NLmdldE1vZGVsKCJNMyIpLHQ9TS5nZXRSb3RvcnMoZS5zbG90c1swXS5yb3RvcnMpLGk9dC5tYXAocj0+ci5uYW1lKSxzPXQubWFwKHI9PnIubGFiZWwpLG49TS5nZXRSb3RvcnMoZS5yZWZsZWN0b3JSb3RvcnMpO3RoaXMuYWRkU2V0dGluZyh7bmFtZToibW9kZWwiLHR5cGU6ImVudW0iLHZhbHVlOmUubmFtZSxlbGVtZW50czpuZS5tYXAocj0+ci5uYW1lKSxsYWJlbHM6bmUubWFwKHI9PnIubGFiZWwpLGRlc2NyaXB0aW9uczpuZS5tYXAocj0+ci5kZXNjcmlwdGlvbikscmFuZG9taXphYmxlOiExfSksdGhpcy5hZGRTZXR0aW5nKHtuYW1lOiJyZWZsZWN0b3IiLHR5cGU6ImVudW0iLHZhbHVlOm5bMF0ubmFtZSxlbGVtZW50czpuLm1hcChyPT5yLm5hbWUpLGxhYmVsczpuLm1hcChyPT5yLmxhYmVsKSx3aWR0aDo0fSksdGhpcy5hZGRTZXR0aW5nKHtuYW1lOiJwb3NpdGlvblJlZmxlY3RvciIsbGFiZWw6IlBvc2l0aW9uIix0eXBlOiJudW1iZXIiLHZhbHVlOjEsaW50ZWdlcjohMCxtaW46MSxtYXg6MjcsZGVzY3JpYmVWYWx1ZTp0aGlzLmRlc2NyaWJlUG9zaXRpb25WYWx1ZS5iaW5kKHRoaXMpLHdpZHRoOjR9KSx0aGlzLmFkZFNldHRpbmcoe25hbWU6InJpbmdSZWZsZWN0b3IiLGxhYmVsOiJSaW5nIix0eXBlOiJudW1iZXIiLHZhbHVlOjEsaW50ZWdlcjohMCxtaW46MSxtYXg6MjcsZGVzY3JpYmVWYWx1ZTp0aGlzLmRlc2NyaWJlUG9zaXRpb25WYWx1ZS5iaW5kKHRoaXMpLHdpZHRoOjR9KTtmb3IobGV0IHI9MDtyPE0uZ2V0TWF4U2xvdENvdW50KCk7cisrKXRoaXMuYWRkU2V0dGluZyh7bmFtZTpgcm90b3Ike3IrMX1gLGxhYmVsOmBSb3RvciAke3IrMX1gLHR5cGU6ImVudW0iLHZhbHVlOmlbMF0sZWxlbWVudHM6aSxsYWJlbHM6cyxyYW5kb21pemFibGU6ITEsd2lkdGg6NH0pLHRoaXMuYWRkU2V0dGluZyh7bmFtZTpgcG9zaXRpb24ke3IrMX1gLGxhYmVsOiJQb3NpdGlvbiIsdHlwZToibnVtYmVyIix2YWx1ZToxLGludGVnZXI6ITAsbWluOjEsbWF4OjI3LGRlc2NyaWJlVmFsdWU6dGhpcy5kZXNjcmliZVBvc2l0aW9uVmFsdWUuYmluZCh0aGlzKSx3aWR0aDo0fSksdGhpcy5hZGRTZXR0aW5nKHtuYW1lOmByaW5nJHtyKzF9YCxsYWJlbDoiUmluZyIsdHlwZToibnVtYmVyIix2YWx1ZToxLGludGVnZXI6ITAsbWluOjEsbWF4OjI3LGRlc2NyaWJlVmFsdWU6dGhpcy5kZXNjcmliZVBvc2l0aW9uVmFsdWUuYmluZCh0aGlzKSx3aWR0aDo0fSk7dGhpcy5hZGRTZXR0aW5nKHtuYW1lOiJwbHVnYm9hcmQiLHR5cGU6InRleHQiLHZhbHVlOiIiLGNhc2VTZW5zaXRpdml0eTohMSx2YWxpZGF0ZVZhbHVlOnRoaXMudmFsaWRhdGVQbHVnYm9hcmRWYWx1ZS5iaW5kKHRoaXMpLGZpbHRlclZhbHVlOnI9PnIuZ2V0U3RyaW5nKCkudHJpbSgpLnRvTG93ZXJDYXNlKCkscmFuZG9taXplVmFsdWU6dGhpcy5yYW5kb21pemVQbHVnYm9hcmRWYWx1ZS5iaW5kKHRoaXMpfSksdGhpcy5hZGRTZXR0aW5nKHtuYW1lOiJpbmNsdWRlRm9yZWlnbkNoYXJzIix0eXBlOiJib29sZWFuIixsYWJlbDoiRm9yZWlnbiBDaGFycyIsdmFsdWU6ITEsdHJ1ZUxhYmVsOiJJbmNsdWRlIixmYWxzZUxhYmVsOiJJZ25vcmUiLHJhbmRvbWl6YWJsZTohMX0pLHRoaXMuYXBwbHlNb2RlbChlLm5hbWUpfXNldHRpbmdWYWx1ZURpZENoYW5nZShlLHQpe3N1cGVyLnNldHRpbmdWYWx1ZURpZENoYW5nZShlLHQpLGUuZ2V0TmFtZSgpPT09Im1vZGVsIiYmdGhpcy5hcHBseU1vZGVsKHQpfWFwcGx5TW9kZWwoZSl7Y29uc3QgdD1NLmdldE1vZGVsKGUpLGk9TS5nZXRNYXhTbG90Q291bnQoKTtmb3IobGV0IHI9MDtyPGk7cisrKXtjb25zdCBhPXI8dC5zbG90cy5sZW5ndGg/dC5zbG90c1tyXTpudWxsLGw9YSE9PW51bGwsbz10aGlzLmdldFNldHRpbmcoYHJvdG9yJHtyKzF9YCksYz10aGlzLmdldFNldHRpbmcoYHJpbmcke3IrMX1gKSx1PXRoaXMuZ2V0U2V0dGluZyhgcG9zaXRpb24ke3IrMX1gKTtpZihvLnNldFZpc2libGUobCksYy5zZXRWaXNpYmxlKGwpLHUuc2V0VmlzaWJsZShsKSxsKXtjb25zdCBoPU0uZ2V0Um90b3JzKGEucm90b3JzKTtvLnNldEVsZW1lbnRzKGgubWFwKGQ9PmQubmFtZSksaC5tYXAoZD0+ZC5sYWJlbCksbnVsbCwhMSksby52YWxpZGF0ZVZhbHVlKG8uZ2V0VmFsdWUoKSkhPT0hMCYmby5zZXRWYWx1ZShoWzBdLm5hbWUpfX1jb25zdCBzPU0uZ2V0Um90b3JzKHQucmVmbGVjdG9yUm90b3JzKSxuPXRoaXMuZ2V0U2V0dGluZygicmVmbGVjdG9yIik7bi5zZXRFbGVtZW50cyhzLm1hcChyPT5yLm5hbWUpLHMubWFwKHI9PnIubGFiZWwpLG51bGwsITEpLG4udmFsaWRhdGVWYWx1ZShuLmdldFZhbHVlKCkpIT09ITAmJm4uc2V0VmFsdWUoc1swXS5uYW1lKSxuLnNldFdpZHRoKHQucmVmbGVjdG9yVGh1bWJ3aGVlbD80OjEyKSxuLnNldFZpc2libGUodC5yZWZsZWN0b3JUaHVtYndoZWVsfHxzLmxlbmd0aD4xKSx0aGlzLmdldFNldHRpbmcoInBvc2l0aW9uUmVmbGVjdG9yIikuc2V0VmlzaWJsZSh0LnJlZmxlY3RvclRodW1id2hlZWwpLHRoaXMuZ2V0U2V0dGluZygicmluZ1JlZmxlY3RvciIpLnNldFZpc2libGUodC5yZWZsZWN0b3JUaHVtYndoZWVsKSx0aGlzLmdldFNldHRpbmcoInBsdWdib2FyZCIpLnNldFZpc2libGUodC5wbHVnYm9hcmQpfXBlcmZvcm1UcmFuc2xhdGUoZSx0KXtjb25zdCBpPXRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJpbmNsdWRlRm9yZWlnbkNoYXJzIikscz1NLmdldE1vZGVsKHRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJtb2RlbCIpKTtsZXQgbj0wO2NvbnN0IHI9cy5zbG90cyxhPXIubGVuZ3RoLGw9ci5tYXAoaz0+ay5yb3RhdGluZyE9PSExKSxvPVtdLGM9W10sdT1bXSxoPW5ldyBBcnJheShhKTtmb3Iobj0wO248YTtuKyspe2NvbnN0IGs9dGhpcy5nZXRTZXR0aW5nVmFsdWUoYHJvdG9yJHtuKzF9YCk7by5wdXNoKE0uZ2V0Um90b3IoaykpLGMucHVzaCh0aGlzLmdldFNldHRpbmdWYWx1ZShgcG9zaXRpb24ke24rMX1gKS0xKSx1LnB1c2godGhpcy5nZXRTZXR0aW5nVmFsdWUoYHJpbmcke24rMX1gKS0xKX1jb25zdCBkPU0uZ2V0Um90b3Iocy5lbnRyeVJvdG9yKSxmPTAscD0wLGI9cy5yZWZsZWN0b3JSb3RhdGluZz09PSEwLF89TS5nZXRSb3Rvcih0aGlzLmdldFNldHRpbmdWYWx1ZSgicmVmbGVjdG9yIikpO2xldCBTPXMucmVmbGVjdG9yVGh1bWJ3aGVlbD90aGlzLmdldFNldHRpbmdWYWx1ZSgicG9zaXRpb25SZWZsZWN0b3IiKTowO2NvbnN0IEI9cy5yZWZsZWN0b3JUaHVtYndoZWVsP3RoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJyaW5nUmVmbGVjdG9yIik6MDtsZXQgSSxWPW51bGw7aWYocy5wbHVnYm9hcmQpe2NvbnN0IGs9dGhpcy5nZXRTZXR0aW5nVmFsdWUoInBsdWdib2FyZCIpO1Y9dGhpcy53aXJpbmdGcm9tUGx1Z2JvYXJkVmFsdWUoay50b1N0cmluZygpKX1jb25zdCBDPU0ucm90b3JNYXBDaGFyO2xldCBxPWUuZ2V0Q29kZVBvaW50cygpLm1hcCgoayxPKT0+e2xldCAkPW51bGw7aWYoaz49NjUmJms8PTkwKSQ9ay02NTtlbHNlIGlmKGs+PTk3JiZrPD0xMjIpJD1rLTk3O2Vsc2UgcmV0dXJuIGk/azohMTtpZihoLmZpbGwoITEpLEk9ITEscy50dXJub3Zlck1lY2hhbmlzbT09PSJjb2ciKXtsZXQgY2U9ITA7Zm9yKG49YTtjZSYmLS1uPj0wOylsW25dPyhjZT1NLnJvdG9yQXRUdXJub3ZlcihvW25dLGNbbl0pLGhbbl09ITApOmNlPSExO0k9YiYmY2V9ZWxzZXtmb3Iobj0wO248YTtuKyspbFtuXSYmKGImJm49PT0wfHxsW24tMV0pJiZNLnJvdG9yQXRUdXJub3ZlcihvW25dLGNbbl0pJiYoaFtuXT0hMCxuPjA/aFtuLTFdPSEwOkk9ITApO2hbYS0xXT1sW2EtMV19Zm9yKG49MDtuPGE7bisrKWhbbl0mJmNbbl0rKztmb3IoSSYmUysrLFYhPT1udWxsJiYoJD1DKCQsViwwLDAsITEpKSwkPUMoJCxkLGYscCwhMSksbj1vLmxlbmd0aC0xO24+PTA7bi0tKSQ9QygkLG9bbl0sY1tuXSx1W25dLCExKTtmb3IoJD1DKCQsXyxTLEIsITEpLG49MDtuPG8ubGVuZ3RoO24rKykkPUMoJCxvW25dLGNbbl0sdVtuXSwhMCk7cmV0dXJuICQ9QygkLGQsZixwLCEwKSxWIT09bnVsbCYmKCQ9QygkLFYsMCwwLCEwKSksJCs5N30pO2lmKCFpKXtjb25zdCBrPVtdO3EuZm9yRWFjaChPPT57TyE9PSExJiYoKGsubGVuZ3RoKzEpJShzLmNoYXJhY3Rlckdyb3VwU2l6ZSsxKT09PTAmJmsucHVzaCgzMiksay5wdXNoKE8pKX0pLHE9a31yZXR1cm4gcX1zdGF0aWMgcm90b3JBdFR1cm5vdmVyKGUsdCl7aWYoZS50dXJub3ZlcnM9PT12b2lkIDApcmV0dXJuITE7Y29uc3QgaT1TdHJpbmcuZnJvbUNoYXJDb2RlKDk3K3YubW9kKHQsMjYpKTtyZXR1cm4gZS50dXJub3ZlcnMuaW5kZXhPZihpKSE9PS0xfXN0YXRpYyByb3Rvck1hcENoYXIoZSx0LGkscyxuKXtjb25zdCByPXR5cGVvZiB0PT0ic3RyaW5nIj90OnQud2lyaW5nO3JldHVybiBpPXYubW9kKGktcywyNiksZT12Lm1vZChlK2ksMjYpLGU9bj9yLmluZGV4T2YoU3RyaW5nLmZyb21DaGFyQ29kZSg5NytlKSk6ci5jaGFyQ29kZUF0KGUpLTk3LGU9di5tb2QoZS1pLDI2KSxlfWRlc2NyaWJlUG9zaXRpb25WYWx1ZShlLHQpe3JldHVybiBYZVtlLTFdLnRvVXBwZXJDYXNlKCl9dmFsaWRhdGVQbHVnYm9hcmRWYWx1ZShlLHQpe2NvbnN0IGk9ZS5nZXRTdHJpbmcoKTtyZXR1cm4gaT09PSIiPyEwOmkubWF0Y2goL14oW2Etel17Mn1ccykqKFthLXpdezJ9KSQvKT09PW51bGw/e2tleToiZW5pZ21hUGx1Z2JvYXJkSW52YWxpZEZvcm1hdCIsbWVzc2FnZToiSW52YWxpZCBwbHVnYm9hcmQgZm9ybWF0OiBwYWlycyBvZiBsZXR0ZXJzIHRvIGJlIHN3YXBwZWQgZXhwZWN0ZWQgKGUuZy4gJ2FiIGNkIGVmJykifTpFLmlzVW5pcXVlKGkucmVwbGFjZSgvXHMvZywiIikuc3BsaXQoIiIpKT8hMDp7a2V5OiJlbmlnbWFQbHVnYm9hcmRQYWlyc05vdFVuaXF1ZSIsbWVzc2FnZToiUGFpcnMgb2YgbGV0dGVycyB0byBiZSBzd2FwcGVkIG5lZWQgdG8gYmUgdW5pcXVlIn19d2lyaW5nRnJvbVBsdWdib2FyZFZhbHVlKGUpe2NvbnN0IHQ9WGUuc3BsaXQoIiIpO3JldHVybiBlLnNwbGl0KCIgIikuZm9yRWFjaChpPT57dFtpLmNoYXJDb2RlQXQoMCktOTddPWlbMV0sdFtpLmNoYXJDb2RlQXQoMSktOTddPWlbMF19KSx0LmpvaW4oIiIpfWlzUmFuZG9taXphYmxlKCl7cmV0dXJuITB9cmFuZG9taXplKCl7Y29uc3QgZT1NLmdldE1vZGVsKHRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJtb2RlbCIpKTtsZXQgdCxpLHMsbj1lLnJlZmxlY3RvclJvdG9ycztmb3IodD0wO3Q8ZS5zbG90cy5sZW5ndGg7dCsrKW49bi5jb25jYXQoZS5zbG90c1t0XS5yb3RvcnMpO2ZvcihuPUUudW5pcXVlKG4pLG49RS5zaHVmZmxlKG4pLGk9bi5maW5kSW5kZXgocj0+ZS5yZWZsZWN0b3JSb3RvcnMuaW5kZXhPZihyKSE9PS0xKSxpIT09LTEmJihzPW4uc3BsaWNlKGksMSlbMF0sdGhpcy5zZXRTZXR0aW5nVmFsdWUoInJlZmxlY3RvciIscykpLHQ9MDt0PGUuc2xvdHMubGVuZ3RoO3QrKylpPW4uZmluZEluZGV4KHI9PmUuc2xvdHNbdF0ucm90b3JzLmluZGV4T2YocikhPT0tMSksaSE9PS0xJiYocz1uLnNwbGljZShpLDEpWzBdLHRoaXMuc2V0U2V0dGluZ1ZhbHVlKGByb3RvciR7dCsxfWAscykpO3JldHVybiBzdXBlci5yYW5kb21pemUoKSx0aGlzfXJhbmRvbWl6ZVBsdWdib2FyZFZhbHVlKGUsdCl7Y29uc3QgaT1FLnNodWZmbGUoWGUuc3BsaXQoIiIpLGUpLmpvaW4oIiIpLnN1YnN0cigwLDIwKTtyZXR1cm4gTC5jaHVuayhpLDIpLmpvaW4oIiAiKX1zdGF0aWMgZ2V0TW9kZWwoZSl7cmV0dXJuIG1lPT09bnVsbCYmKG1lPXt9LG5lLmZvckVhY2godD0+e21lW3QubmFtZV09dH0pKSxtZVtlXXx8bnVsbH1zdGF0aWMgZ2V0TWF4U2xvdENvdW50KCl7cmV0dXJuIG5lLnJlZHVjZSgoZSx0KT0+TWF0aC5tYXgoZSx0LnNsb3RzLmxlbmd0aCksMCl9c3RhdGljIGdldFJvdG9yKGUpe2lmKGJlPT09bnVsbCl7YmU9e307bGV0IHQsaSxzO2Zvcih0PTA7dDx5dC5sZW5ndGg7dCs9SmUubGVuZ3RoKXtmb3Iocz17fSxpPTA7aTxKZS5sZW5ndGg7aSsrKXNbSmVbaV1dPXl0W3QraV07YmVbcy5uYW1lXT1zfX1yZXR1cm4gYmVbZV18fG51bGx9c3RhdGljIGdldFJvdG9ycyhlKXtyZXR1cm4gZS5tYXAodD0+TS5nZXRSb3Rvcih0KSl9fWNvbnN0IFBpPTE3MzI1ODQxOTMsRmk9NDAyMzIzMzQxNyxEaT0yNTYyMzgzMTAyLE5pPTI3MTczMzg3OCx5ZT03LF9lPTEyLHdlPTE3LHZlPTIyLFNlPTUseGU9OSxDZT0xNCxWZT0yMCxJZT00LGtlPTExLEVlPTE2LCRlPTIzLE1lPTYsQmU9MTAsTGU9MTUsemU9MjE7ZnVuY3Rpb24gUmkoZyl7Zz1BcnJheS5mcm9tKGcpO2NvbnN0IGU9Zy5sZW5ndGg7Zm9yKGcucHVzaCgxMjgpO2cubGVuZ3RoJTY0IT09NTY7KWcucHVzaCgwKTtsZXQgdDtmb3IobGV0IGE9MDthPDg7YSsrKWE9PT0wP2cucHVzaCgoZSYzMSk8PDMpOih0PWEqOC0zLGcucHVzaCh0PDMyP2U+PnQmMjU1OjApKTtjb25zdCBpPWcubGVuZ3RoLzQscz1uZXcgQXJyYXkoaSk7Zm9yKGxldCBhPTA7YTxpO2ErKylzW2FdPShnW2EqNCszXTw8MjQpKyhnW2EqNCsyXTw8MTYpKyhnW2EqNCsxXTw8OCkrZ1thKjRdO2NvbnN0IG49W1BpLEZpLERpLE5pXTtmb3IobGV0IGE9MDthPGk7YSs9MTYpcWkobixzLnNsaWNlKGEsYSsxNikpO2NvbnN0IHI9bmV3IEFycmF5KDE2KTtmb3IobGV0IGE9MCxsPTA7bDwxNjthKyssbCs9NClyW2xdPW5bYV0mMjU1LHJbbCsxXT1uW2FdPj44JjI1NSxyW2wrMl09blthXT4+MTYmMjU1LHJbbCszXT1uW2FdPj4yNCYyNTU7cmV0dXJuIG5ldyBVaW50OEFycmF5KHIpfWZ1bmN0aW9uIHFpKGcsZSl7bGV0W3QsaSxzLG5dPWc7dD16KHQsaSxzLG4sZVswXSx5ZSwzNjE0MDkwMzYwKSxuPXoobix0LGkscyxlWzFdLF9lLDM5MDU0MDI3MTApLHM9eihzLG4sdCxpLGVbMl0sd2UsNjA2MTA1ODE5KSxpPXooaSxzLG4sdCxlWzNdLHZlLDMyNTA0NDE5NjYpLHQ9eih0LGkscyxuLGVbNF0seWUsNDExODU0ODM5OSksbj16KG4sdCxpLHMsZVs1XSxfZSwxMjAwMDgwNDI2KSxzPXoocyxuLHQsaSxlWzZdLHdlLDI4MjE3MzU5NTUpLGk9eihpLHMsbix0LGVbN10sdmUsNDI0OTI2MTMxMyksdD16KHQsaSxzLG4sZVs4XSx5ZSwxNzcwMDM1NDE2KSxuPXoobix0LGkscyxlWzldLF9lLDIzMzY1NTI4NzkpLHM9eihzLG4sdCxpLGVbMTBdLHdlLDQyOTQ5MjUyMzMpLGk9eihpLHMsbix0LGVbMTFdLHZlLDIzMDQ1NjMxMzQpLHQ9eih0LGkscyxuLGVbMTJdLHllLDE4MDQ2MDM2ODIpLG49eihuLHQsaSxzLGVbMTNdLF9lLDQyNTQ2MjYxOTUpLHM9eihzLG4sdCxpLGVbMTRdLHdlLDI3OTI5NjUwMDYpLGk9eihpLHMsbix0LGVbMTVdLHZlLDEyMzY1MzUzMjkpLHQ9QSh0LGkscyxuLGVbMV0sU2UsNDEyOTE3MDc4Niksbj1BKG4sdCxpLHMsZVs2XSx4ZSwzMjI1NDY1NjY0KSxzPUEocyxuLHQsaSxlWzExXSxDZSw2NDM3MTc3MTMpLGk9QShpLHMsbix0LGVbMF0sVmUsMzkyMTA2OTk5NCksdD1BKHQsaSxzLG4sZVs1XSxTZSwzNTkzNDA4NjA1KSxuPUEobix0LGkscyxlWzEwXSx4ZSwzODAxNjA4Mykscz1BKHMsbix0LGksZVsxNV0sQ2UsMzYzNDQ4ODk2MSksaT1BKGkscyxuLHQsZVs0XSxWZSwzODg5NDI5NDQ4KSx0PUEodCxpLHMsbixlWzldLFNlLDU2ODQ0NjQzOCksbj1BKG4sdCxpLHMsZVsxNF0seGUsMzI3NTE2MzYwNikscz1BKHMsbix0LGksZVszXSxDZSw0MTA3NjAzMzM1KSxpPUEoaSxzLG4sdCxlWzhdLFZlLDExNjM1MzE1MDEpLHQ9QSh0LGkscyxuLGVbMTNdLFNlLDI4NTAyODU4MjkpLG49QShuLHQsaSxzLGVbMl0seGUsNDI0MzU2MzUxMikscz1BKHMsbix0LGksZVs3XSxDZSwxNzM1MzI4NDczKSxpPUEoaSxzLG4sdCxlWzEyXSxWZSwyMzY4MzU5NTYyKSx0PVQodCxpLHMsbixlWzVdLEllLDQyOTQ1ODg3MzgpLG49VChuLHQsaSxzLGVbOF0sa2UsMjI3MjM5MjgzMykscz1UKHMsbix0LGksZVsxMV0sRWUsMTgzOTAzMDU2MiksaT1UKGkscyxuLHQsZVsxNF0sJGUsNDI1OTY1Nzc0MCksdD1UKHQsaSxzLG4sZVsxXSxJZSwyNzYzOTc1MjM2KSxuPVQobix0LGkscyxlWzRdLGtlLDEyNzI4OTMzNTMpLHM9VChzLG4sdCxpLGVbN10sRWUsNDEzOTQ2OTY2NCksaT1UKGkscyxuLHQsZVsxMF0sJGUsMzIwMDIzNjY1NiksdD1UKHQsaSxzLG4sZVsxM10sSWUsNjgxMjc5MTc0KSxuPVQobix0LGkscyxlWzBdLGtlLDM5MzY0MzAwNzQpLHM9VChzLG4sdCxpLGVbM10sRWUsMzU3MjQ0NTMxNyksaT1UKGkscyxuLHQsZVs2XSwkZSw3NjAyOTE4OSksdD1UKHQsaSxzLG4sZVs5XSxJZSwzNjU0NjAyODA5KSxuPVQobix0LGkscyxlWzEyXSxrZSwzODczMTUxNDYxKSxzPVQocyxuLHQsaSxlWzE1XSxFZSw1MzA3NDI1MjApLGk9VChpLHMsbix0LGVbMl0sJGUsMzI5OTYyODY0NSksdD1QKHQsaSxzLG4sZVswXSxNZSw0MDk2MzM2NDUyKSxuPVAobix0LGkscyxlWzddLEJlLDExMjY4OTE0MTUpLHM9UChzLG4sdCxpLGVbMTRdLExlLDI4Nzg2MTIzOTEpLGk9UChpLHMsbix0LGVbNV0semUsNDIzNzUzMzI0MSksdD1QKHQsaSxzLG4sZVsxMl0sTWUsMTcwMDQ4NTU3MSksbj1QKG4sdCxpLHMsZVszXSxCZSwyMzk5OTgwNjkwKSxzPVAocyxuLHQsaSxlWzEwXSxMZSw0MjkzOTE1NzczKSxpPVAoaSxzLG4sdCxlWzFdLHplLDIyNDAwNDQ0OTcpLHQ9UCh0LGkscyxuLGVbOF0sTWUsMTg3MzMxMzM1OSksbj1QKG4sdCxpLHMsZVsxNV0sQmUsNDI2NDM1NTU1Mikscz1QKHMsbix0LGksZVs2XSxMZSwyNzM0NzY4OTE2KSxpPVAoaSxzLG4sdCxlWzEzXSx6ZSwxMzA5MTUxNjQ5KSx0PVAodCxpLHMsbixlWzRdLE1lLDQxNDk0NDQyMjYpLG49UChuLHQsaSxzLGVbMTFdLEJlLDMxNzQ3NTY5MTcpLHM9UChzLG4sdCxpLGVbMl0sTGUsNzE4Nzg3MjU5KSxpPVAoaSxzLG4sdCxlWzldLHplLDM5NTE0ODE3NDUpLGdbMF09Vyh0LGdbMF0pLGdbMV09VyhpLGdbMV0pLGdbMl09VyhzLGdbMl0pLGdbM109VyhuLGdbM10pfWZ1bmN0aW9uIFcoZyxlKXtyZXR1cm4gZytlJjQyOTQ5NjcyOTV9ZnVuY3Rpb24gT2UoZyxlLHQsaSxzLG4pe3JldHVybiBlPVcoVyhlLGcpLFcoaSxuKSksVyhlPDxzfGU+Pj4zMi1zLHQpfWZ1bmN0aW9uIHooZyxlLHQsaSxzLG4scil7cmV0dXJuIE9lKGUmdHx+ZSZpLGcsZSxzLG4scil9ZnVuY3Rpb24gQShnLGUsdCxpLHMsbixyKXtyZXR1cm4gT2UoZSZpfHQmfmksZyxlLHMsbixyKX1mdW5jdGlvbiBUKGcsZSx0LGkscyxuLHIpe3JldHVybiBPZShlXnReaSxnLGUscyxuLHIpfWZ1bmN0aW9uIFAoZyxlLHQsaSxzLG4scil7cmV0dXJuIE9lKHReKGV8fmkpLGcsZSxzLG4scil9Y29uc3QgT2k9e25hbWU6Imhhc2giLHRpdGxlOiJIYXNoIGZ1bmN0aW9uIixjYXRlZ29yeToiTW9kZXJuIGNyeXB0b2dyYXBoeSIsdHlwZToiZW5jb2RlciJ9LFFlPVt7bmFtZToibWQ1IixsYWJlbDoiTUQ1IixibG9ja1NpemU6NjQsYXZhaWxhYmxlOiEwfSx7bmFtZToic2hhMSIsbGFiZWw6IlNIQS0xIixibG9ja1NpemU6NjQsYnJvd3NlckFsZ29yaXRobToiU0hBLTEiLG5vZGVBbGdvcml0aG06InNoYTEifSx7bmFtZToic2hhMjU2IixsYWJlbDoiU0hBLTI1NiIsYmxvY2tTaXplOjY0LGJyb3dzZXJBbGdvcml0aG06IlNIQS0yNTYiLG5vZGVBbGdvcml0aG06InNoYTI1NiJ9LHtuYW1lOiJzaGEzODQiLGxhYmVsOiJTSEEtMzg0IixibG9ja1NpemU6MTI4LGJyb3dzZXJBbGdvcml0aG06IlNIQS0zODQiLG5vZGVBbGdvcml0aG06InNoYTM4NCJ9LHtuYW1lOiJzaGE1MTIiLGxhYmVsOiJTSEEtNTEyIixibG9ja1NpemU6MTI4LGJyb3dzZXJBbGdvcml0aG06IlNIQS01MTIiLG5vZGVBbGdvcml0aG06InNoYTUxMiJ9XTtjbGFzcyB0ZSBleHRlbmRzIHd7c3RhdGljIGdldE1ldGEoKXtyZXR1cm4gT2l9Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuc2V0RW5jb2RlT25seSghMCk7Y29uc3QgZT10ZS5maWx0ZXJBdmFpbGFibGVBbGdvcml0aG1zKCk7dGhpcy5hZGRTZXR0aW5nKHtuYW1lOiJhbGdvcml0aG0iLHR5cGU6ImVudW0iLHZhbHVlOiJzaGEyNTYiLGVsZW1lbnRzOmUubWFwKHQ9PnQubmFtZSksbGFiZWxzOmUubWFwKHQ9PnQubGFiZWwpLHJhbmRvbWl6YWJsZTohMSxzdHlsZToicmFkaW8ifSl9cGVyZm9ybUVuY29kZShlKXtjb25zdCB0PXRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJhbGdvcml0aG0iKTtyZXR1cm4gdGhpcy5jcmVhdGVEaWdlc3QodCxlLmdldEJ5dGVzKCkpfWNyZWF0ZURpZ2VzdChlLHQpe2NvbnN0IGk9UWUuZmluZChzPT5zLm5hbWU9PT1lKTtzd2l0Y2goZSl7Y2FzZSJtZDUiOnJldHVybiBuZXcgUHJvbWlzZShzPT5zKFJpKHQpKSl9aWYoVS5pc05vZGUoKSlyZXR1cm4gbmV3IFByb21pc2UoKHMsbik9Pntjb25zdCByPWx0LmNyZWF0ZUhhc2goaS5ub2RlQWxnb3JpdGhtKS51cGRhdGUoZ2xvYmFsLkJ1ZmZlci5mcm9tKHQpKS5kaWdlc3QoKTtzKG5ldyBVaW50OEFycmF5KHIpKX0pO3tjb25zdCBzPXdpbmRvdy5jcnlwdG98fHdpbmRvdy5tc0NyeXB0bztsZXQgcj0ocy5zdWJ0bGV8fHMud2Via2l0U3VidGxlKS5kaWdlc3QoaS5icm93c2VyQWxnb3JpdGhtLHQpO3JldHVybiByLm9uY29tcGxldGUhPT12b2lkIDAmJihyPW5ldyBQcm9taXNlKChhLGwpPT57ci5vbmNvbXBsZXRlPWEuYmluZCh0aGlzLHIucmVzdWx0KSxyLm9uZXJyb3I9bH0pKSxyLnRoZW4oYT0+bmV3IFVpbnQ4QXJyYXkoYSkpfX1zdGF0aWMgZmlsdGVyQXZhaWxhYmxlQWxnb3JpdGhtcygpe2NvbnN0IGU9VS5pc05vZGUoKTtyZXR1cm4gUWUuZmlsdGVyKHQ9PiEhKHQuYXZhaWxhYmxlPT09ITB8fCFlJiZ0LmJyb3dzZXJBbGdvcml0aG0hPT12b2lkIDB8fGUmJnQubm9kZUFsZ29yaXRobSE9PXZvaWQgMCkpfXN0YXRpYyBnZXRBbGdvcml0aG1CbG9ja1NpemUoZSl7Y29uc3QgdD1RZS5maW5kKGk9PmkubmFtZT09PWUpO3JldHVybiB0IT09dm9pZCAwP3QuYmxvY2tTaXplOm51bGx9fWNvbnN0IGppPXtuYW1lOiJobWFjIix0aXRsZToiSE1BQyIsY2F0ZWdvcnk6Ik1vZGVybiBjcnlwdG9ncmFwaHkiLHR5cGU6ImVuY29kZXIifTtjbGFzcyBVaSBleHRlbmRzIHd7c3RhdGljIGdldE1ldGEoKXtyZXR1cm4gaml9Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuc2V0RW5jb2RlT25seSghMCksdGhpcy5faGFzaEVuY29kZXI9bmV3IHRlO2NvbnN0IGU9dGhpcy5faGFzaEVuY29kZXIuZ2V0U2V0dGluZygiYWxnb3JpdGhtIik7dGhpcy5hZGRTZXR0aW5ncyhbe25hbWU6ImtleSIsdHlwZToiYnl0ZXMiLHZhbHVlOm5ldyBVaW50OEFycmF5KFs5OSwxMTQsMTIxLDExMiwxMTYsMTA1LDEwNV0pfSx7bmFtZToiYWxnb3JpdGhtIix0eXBlOiJlbnVtIix2YWx1ZTplLmdldFZhbHVlKCksZWxlbWVudHM6ZS5nZXRFbGVtZW50cygpLGxhYmVsczplLmdldEVsZW1lbnRMYWJlbHMoKSxyYW5kb21pemFibGU6ITEsc3R5bGU6InJhZGlvIn1dKX1hc3luYyBwZXJmb3JtRW5jb2RlKGUpe2NvbnN0IHQ9ZS5nZXRCeXRlcygpLGk9dGhpcy5nZXRTZXR0aW5nVmFsdWUoImFsZ29yaXRobSIpLHM9dGUuZ2V0QWxnb3JpdGhtQmxvY2tTaXplKGkpO2xldCBuPXRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJrZXkiKTtuLmxlbmd0aD5zJiYobj1hd2FpdCB0aGlzLmNyZWF0ZURpZ2VzdChpLG4pKTtjb25zdCByPW5ldyBVaW50OEFycmF5KHMpO3Iuc2V0KG4sMCk7Y29uc3QgYT1uZXcgVWludDhBcnJheShzK3QubGVuZ3RoKTthLnNldChyLDApLGEuc2V0KHQscyk7Zm9yKGxldCBjPTA7YzxzO2MrKylhW2NdXj01NCxyW2NdXj05Mjtjb25zdCBsPWF3YWl0IHRoaXMuY3JlYXRlRGlnZXN0KGksYSksbz1uZXcgVWludDhBcnJheShzK2wubGVuZ3RoKTtyZXR1cm4gby5zZXQociwwKSxvLnNldChsLHMpLHRoaXMuY3JlYXRlRGlnZXN0KGksbyl9YXN5bmMgY3JlYXRlRGlnZXN0KGUsdCl7cmV0dXJuIHRoaXMuX2hhc2hFbmNvZGVyPT09bnVsbCYmKHRoaXMuX2hhc2hFbmNvZGVyPW5ldyB0ZSksdGhpcy5faGFzaEVuY29kZXIuc2V0U2V0dGluZ1ZhbHVlKCJhbGdvcml0aG0iLGUpLChhd2FpdCB0aGlzLl9oYXNoRW5jb2Rlci5lbmNvZGUodCkpLmdldEJ5dGVzKCl9fWNvbnN0IFdpPXtuYW1lOiJpbnRlZ2VyIix0aXRsZToiSW50ZWdlciIsY2F0ZWdvcnk6IkVuY29kaW5nIix0eXBlOiJlbmNvZGVyIn0sQWU9WyJVOCIsIkk4IiwiVTE2IiwiSTE2IiwiVTMyIiwiSTMyIl0sWWU9WzEsMSwyLDIsNCw0XSxIaT1bIjgtYml0IHVuc2lnbmVkIGludGVnZXIgKFU4KSIsIjgtYml0IHNpZ25lZCBpbnRlZ2VyIChJOCkiLCIxNi1iaXQgdW5zaWduZWQgaW50ZWdlciAoVTE2KSIsIjE2LWJpdCBzaWduZWQgaW50ZWdlciAoSTE2KSIsIjMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyIChVMzIpIiwiMzItYml0IHNpZ25lZCBpbnRlZ2VyIChJMzIpIl07Y2xhc3MgR2kgZXh0ZW5kcyB3e3N0YXRpYyBnZXRNZXRhKCl7cmV0dXJuIFdpfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLmFkZFNldHRpbmdzKFt7bmFtZToiZm9ybWF0Iix0eXBlOiJlbnVtIix2YWx1ZToiZGVjaW1hbCIsZWxlbWVudHM6WyJiaW5hcnkiLCJvY3RhbCIsImRlY2ltYWwiLCJoZXhhZGVjaW1hbCJdLGxhYmVsczpbIkJpbmFyeSIsIk9jdGFsIiwiRGVjaW1hbCIsIkhleGFkZWNpbWFsIl0scmFuZG9taXphYmxlOiExLHByaW9yaXR5OjMwfSx7bmFtZToidHlwZSIsdHlwZToiZW51bSIsdmFsdWU6IlU4IixlbGVtZW50czpBZSxsYWJlbHM6SGkscmFuZG9taXphYmxlOiExLHN0eWxlOiJyYWRpbyIscHJpb3JpdHk6MjB9LHtuYW1lOiJieXRlT3JkZXIiLHR5cGU6ImVudW0iLHZhbHVlOiJiaWctZW5kaWFuIixlbGVtZW50czpbImxpdHRsZS1lbmRpYW4iLCJiaWctZW5kaWFuIl0sbGFiZWxzOlsiTGl0dGxlLWVuZGlhbiIsIkJpZy1lbmRpYW4iXSxyYW5kb21pemFibGU6ITEsdmlzaWJsZTohMSxwcmlvcml0eToxMH1dKX1wZXJmb3JtRW5jb2RlKGUpe2NvbnN0IHQ9dGhpcy5nZXRTZXR0aW5nVmFsdWUoInR5cGUiKSxpPUFlLmluZGV4T2YodCkscz1ZZVtpXSxuPXRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJieXRlT3JkZXIiKT09PSJiaWctZW5kaWFuIjtsZXQgcj1lLmdldFNpemUoKTtyJXMhPT0wJiYocis9cy1yJXMpO2NvbnN0IGE9bmV3IFVpbnQ4QXJyYXkocik7YS5zZXQoZS5nZXRCeXRlcygpKTtjb25zdCBsPXRoaXMuY3JlYXRlSW50ZWdlclR5cGVBcnJheShyL3MsdCk7bGV0IG89MCxjPTA7Zm9yKDtjPGEubGVuZ3RoOyluP289bzw8OHxhW2NdOm89b3xhW2NdPDxjJXMqOCwrK2Mlcz09PTAmJihsW2Mvcy0xXT1vLG89MCk7Y29uc3QgdT10aGlzLmdldFNldHRpbmdWYWx1ZSgiZm9ybWF0IiksaD1bXTtmb3IoYz0wO2M8bC5sZW5ndGg7YysrKXN3aXRjaCh1KXtjYXNlImJpbmFyeSI6aC5wdXNoKGxbY10udG9TdHJpbmcoMikpO2JyZWFrO2Nhc2Uib2N0YWwiOmgucHVzaChsW2NdLnRvU3RyaW5nKDgpKTticmVhaztjYXNlImRlY2ltYWwiOmgucHVzaChsW2NdLnRvU3RyaW5nKDEwKSk7YnJlYWs7ZGVmYXVsdDpoLnB1c2gobFtjXS50b1N0cmluZygxNikpfXJldHVybiBoLmpvaW4oIiAiKX1wZXJmb3JtRGVjb2RlKGUpe2NvbnN0IHQ9dGhpcy5nZXRTZXR0aW5nVmFsdWUoInR5cGUiKSxpPUFlLmluZGV4T2YodCkscz1ZZVtpXSxuPXRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJieXRlT3JkZXIiKT09PSJiaWctZW5kaWFuIixyPXRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJmb3JtYXQiKSxhPWUuZ2V0U3RyaW5nKCkuc3BsaXQoL1xzKy8pLGw9dGhpcy5jcmVhdGVJbnRlZ2VyVHlwZUFycmF5KGEubGVuZ3RoLHQpO2xldCBvLGMsdTtmb3Iobz0wO288YS5sZW5ndGg7bysrKXtzd2l0Y2godT1hW29dLHU9PT0iIiYmKHU9IjAiKSxyKXtjYXNlImJpbmFyeSI6Yz1wYXJzZUludCh1LDIpO2JyZWFrO2Nhc2Uib2N0YWwiOmM9cGFyc2VJbnQodSw4KTticmVhaztjYXNlImRlY2ltYWwiOmM9cGFyc2VJbnQodSwxMCk7YnJlYWs7ZGVmYXVsdDpjPXBhcnNlSW50KHUsMTYpfWlmKGlzTmFOKGMpKXRocm93IG5ldyB4KGBJbnZhbGlkIGludGVnZXIgJyR7dX0nIGF0IGluZGV4ICR7b31gKTtsW29dPWN9Y29uc3QgaD1uZXcgVWludDhBcnJheShsLmxlbmd0aCpzKTtsZXQgZDtmb3Iobz0wO288aC5sZW5ndGg7bysrKWM9bFtwYXJzZUludChvL3MpXSxkPW4/cy1vJXMtMTpvJXMsaFtvXT1jPj5kKjgmMjU1O3JldHVybiBofWNyZWF0ZUludGVnZXJUeXBlQXJyYXkoZSx0KXtzd2l0Y2godCl7Y2FzZSJJOCI6cmV0dXJuIG5ldyBJbnQ4QXJyYXkoZSk7Y2FzZSJVOCI6cmV0dXJuIG5ldyBVaW50OEFycmF5KGUpO2Nhc2UiSTE2IjpyZXR1cm4gbmV3IEludDE2QXJyYXkoZSk7Y2FzZSJVMTYiOnJldHVybiBuZXcgVWludDE2QXJyYXkoZSk7Y2FzZSJJMzIiOnJldHVybiBuZXcgSW50MzJBcnJheShlKTtkZWZhdWx0OnJldHVybiBuZXcgVWludDMyQXJyYXkoZSl9fXNldHRpbmdWYWx1ZURpZENoYW5nZShlLHQpe3N3aXRjaChlLmdldE5hbWUoKSl7Y2FzZSJ0eXBlIjp7Y29uc3QgaT1BZS5pbmRleE9mKHRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJ0eXBlIikpO3RoaXMuZ2V0U2V0dGluZygiYnl0ZU9yZGVyIikuc2V0VmlzaWJsZShZZVtpXT4xKX19fX1jb25zdCBLaT17bmFtZToibW9yc2UtY29kZSIsdGl0bGU6Ik1vcnNlIGNvZGUiLGNhdGVnb3J5OiJBbHBoYWJldHMiLHR5cGU6ImVuY29kZXIifSxfdD1gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Liw/JyEvKCkmOjs9Ky1fIiRAYCx3dD1bIi4tIiwiLS4uLiIsIi0uLS4iLCItLi4iLCIuIiwiLi4tLiIsIi0tLiIsIi4uLi4iLCIuLiIsIi4tLS0iLCItLi0iLCIuLS4uIiwiLS0iLCItLiIsIi0tLSIsIi4tLS4iLCItLS4tIiwiLi0uIiwiLi4uIiwiLSIsIi4uLSIsIi4uLi0iLCIuLS0iLCItLi4tIiwiLS4tLSIsIi0tLi4iLCItLS0tLSIsIi4tLS0tIiwiLi4tLS0iLCIuLi4tLSIsIi4uLi4tIiwiLi4uLi4iLCItLi4uLiIsIi0tLi4uIiwiLS0tLi4iLCItLS0tLiIsIi4tLi0uLSIsIi0tLi4tLSIsIi4uLS0uLiIsIi4tLS0tLiIsIi0uLS4tLSIsIi0uLi0uIiwiLS4tLS4iLCItLi0tLi0iLCIuLS4uLiIsIi0tLS4uLiIsIi0uLS4tLiIsIi0uLi4tIiwiLi0uLS4iLCItLi4uLi0iLCIuLi0tLi0iLCIuLS4uLS4iLCIuLi5fLi5fIiwiLi0tLi0uIl07Y2xhc3MgSiBleHRlbmRzIHd7c3RhdGljIGdldE1ldGEoKXtyZXR1cm4gS2l9Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuYWRkU2V0dGluZ3MoW3tuYW1lOiJ2YXJpYW50Iix0eXBlOiJlbnVtIix2YWx1ZToiZW5nbGlzaCIsZWxlbWVudHM6WyJlbmdsaXNoIl0sbGFiZWxzOlsiRW5nbGlzaCJdLHJhbmRvbWl6YWJsZTohMX0se25hbWU6InJlcHJlc2VudGF0aW9uIix0eXBlOiJlbnVtIix2YWx1ZToiY29kZSIsZWxlbWVudHM6WyJjb2RlIiwidGltaW5nIl0sbGFiZWxzOlsiQ29kZSIsIlRpbWluZyJdLHJhbmRvbWl6YWJsZTohMX0se25hbWU6InNob3J0TWFyayIsbGFiZWw6IlNob3J0Iix0eXBlOiJ0ZXh0Iix3aWR0aDo0LHZhbHVlOiIuIixtaW5MZW5ndGg6MSxyYW5kb21pemFibGU6ITEsdmFsaWRhdGVWYWx1ZTp0aGlzLnZhbGlkYXRlQ29kZU1hcmtTZXR0aW5nVmFsdWUuYmluZCh0aGlzKX0se25hbWU6Imxvbmdlck1hcmsiLGxhYmVsOiJMb25nIix0eXBlOiJ0ZXh0Iix3aWR0aDo0LHZhbHVlOiItIixtaW5MZW5ndGg6MSxyYW5kb21pemFibGU6ITEsdmFsaWRhdGVWYWx1ZTp0aGlzLnZhbGlkYXRlQ29kZU1hcmtTZXR0aW5nVmFsdWUuYmluZCh0aGlzKX0se25hbWU6InNwYWNlTWFyayIsbGFiZWw6IlNwYWNlIix0eXBlOiJ0ZXh0Iix3aWR0aDo0LHZhbHVlOiIvIixtaW5MZW5ndGg6MSxyYW5kb21pemFibGU6ITEsdmFsaWRhdGVWYWx1ZTp0aGlzLnZhbGlkYXRlQ29kZU1hcmtTZXR0aW5nVmFsdWUuYmluZCh0aGlzKX0se25hbWU6InNpZ25hbE9uTWFyayIsbGFiZWw6IlNpZ25hbCBPbiIsdHlwZToidGV4dCIsd2lkdGg6Nix2aXNpYmxlOiExLHZhbHVlOiI9IixtaW5MZW5ndGg6MSxyYW5kb21pemFibGU6ITEsdmFsaWRhdGVWYWx1ZTp0aGlzLnZhbGlkYXRlVGltaW5nTWFya1NldHRpbmdWYWx1ZS5iaW5kKHRoaXMpfSx7bmFtZToic2lnbmFsT2ZmTWFyayIsbGFiZWw6IlNpZ25hbCBPZmYiLHR5cGU6InRleHQiLHdpZHRoOjYsdmlzaWJsZTohMSx2YWx1ZToiLiIsbWluTGVuZ3RoOjEscmFuZG9taXphYmxlOiExLHZhbGlkYXRlVmFsdWU6dGhpcy52YWxpZGF0ZVRpbWluZ01hcmtTZXR0aW5nVmFsdWUuYmluZCh0aGlzKX1dKX1wZXJmb3JtRW5jb2RlKGUpe2NvbnN0IHQ9dGhpcy5nZXRTZXR0aW5nVmFsdWUoInJlcHJlc2VudGF0aW9uIik7bGV0IGk9Ii4iLHM9Ii0iLG49Ii8iO3Q9PT0iY29kZSImJihpPXRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJzaG9ydE1hcmsiKS5nZXRTdHJpbmcoKSxzPXRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJsb25nZXJNYXJrIikuZ2V0U3RyaW5nKCksbj10aGlzLmdldFNldHRpbmdWYWx1ZSgic3BhY2VNYXJrIikuZ2V0U3RyaW5nKCkpO2xldCByPWUudG9Mb3dlckNhc2UoKS5nZXRDaGFycygpLm1hcChhPT57Y29uc3QgbD1KLmVuY29kZUNoYXJhY3RlcihhLGkscyxuKTtpZihsPT09bnVsbCl0aHJvdyBuZXcgeChgQ2hhciAnJHthfScgaXMgbm90IGRlZmluZWQgaW4gbW9yc2UgY29kZWApO3JldHVybiBsfSkuam9pbigiICIpO2lmKHQ9PT0idGltaW5nIil7Y29uc3QgYT10aGlzLmdldFNldHRpbmdWYWx1ZSgic2lnbmFsT25NYXJrIikuZ2V0U3RyaW5nKCksbD10aGlzLmdldFNldHRpbmdWYWx1ZSgic2lnbmFsT2ZmTWFyayIpLmdldFN0cmluZygpO3I9ci5zcGxpdCgiIikubWFwKG89Pntzd2l0Y2gobyl7Y2FzZSIuIjpyZXR1cm4gYTtjYXNlIi0iOnJldHVybiBhLnJlcGVhdCgzKTtkZWZhdWx0OnJldHVybiBsfX0pLmpvaW4obCl9cmV0dXJuIHJ9cGVyZm9ybURlY29kZShlKXtjb25zdCB0PXRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJyZXByZXNlbnRhdGlvbiIpO2xldCBpPWUuZ2V0U3RyaW5nKCkscz0iLiIsbj0iLSIscj0iLyI7aWYodD09PSJjb2RlIiYmKHM9dGhpcy5nZXRTZXR0aW5nVmFsdWUoInNob3J0TWFyayIpLmdldFN0cmluZygpLG49dGhpcy5nZXRTZXR0aW5nVmFsdWUoImxvbmdlck1hcmsiKS5nZXRTdHJpbmcoKSxyPXRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJzcGFjZU1hcmsiKS5nZXRTdHJpbmcoKSksdD09PSJ0aW1pbmciKXtjb25zdCBhPVt0aGlzLmdldFNldHRpbmdWYWx1ZSgic2lnbmFsT25NYXJrIikuZ2V0U3RyaW5nKCksdGhpcy5nZXRTZXR0aW5nVmFsdWUoInNpZ25hbE9mZk1hcmsiKS5nZXRTdHJpbmcoKV07aT1KLnRyYW5zbGF0ZU1hcmtzKGksYSxbIj0iLCIuIl0pLGk9aS5yZXBsYWNlKC89PT0vZywiLSIpLnJlcGxhY2UoL1wuezd9L2csIiAvICIpLnJlcGxhY2UoL1wuezN9L2csIiAiKS5yZXBsYWNlKC9cLi9nLCIiKS5yZXBsYWNlKC89L2csIi4iKX1yZXR1cm4gaT1pLnNwbGl0KCIgIikubWFwKGE9PntpZihhPT09IiIpcmV0dXJuIG51bGw7Y29uc3QgbD1KLmRlY29kZUNvZGUoYSxzLG4scik7aWYobD09PW51bGwpdGhyb3cgbmV3IHgoYENvZGUgJyR7YX0nIGlzIG5vdCBkZWZpbmVkIGluIG1vcnNlIGNvZGVgKTtyZXR1cm4gbH0pLmZpbHRlcihhPT5hIT09bnVsbCkuam9pbigiIiksaX12YWxpZGF0ZUNvZGVNYXJrU2V0dGluZ1ZhbHVlKGUsdCl7Y29uc3QgaT10LmZpbHRlclZhbHVlKGUpO3JldHVybiBpLm1hdGNoKC9ccy8pIT09bnVsbD97a2V5OiJtb3JzZUNvZGVNYXJrV2hpdGVzcGFjZU5vdEFsbG93ZWQiLG1lc3NhZ2U6IldoaXRlc3BhY2VzIGFyZSBub3QgYWxsb3dlZCBpbnNpZGUgbW9yc2UgY29kZSBtYXJrcyJ9Olsic2hvcnRNYXJrIiwibG9uZ2VyTWFyayIsInNwYWNlTWFyayJdLmZpbHRlcihuPT5uIT09dC5nZXROYW1lKCkpLmZpbmQobj0+aS5pc0VxdWFsVG8odGhpcy5nZXRTZXR0aW5nVmFsdWUobikpKSE9PXZvaWQgMD97a2V5OiJtb3JzZUNvZGVNYXJrTm90VW5pcXVlIixtZXNzYWdlOiJNb3JzZSBjb2RlIG1hcmtzIG5lZWQgdG8gYmUgZGlmZmVyZW50IGZyb20gZWFjaCBvdGhlciJ9OiEwfXZhbGlkYXRlVGltaW5nTWFya1NldHRpbmdWYWx1ZShlLHQpe2NvbnN0IGk9dC5maWx0ZXJWYWx1ZShlKTtyZXR1cm5bInNpZ25hbE9uTWFyayIsInNpZ25hbE9mZk1hcmsiXS5maWx0ZXIobj0+biE9PXQuZ2V0TmFtZSgpKS5maW5kKG49PmkuaW5kZXhPZih0aGlzLmdldFNldHRpbmdWYWx1ZShuKSk9PT0wKSE9PXZvaWQgMD97a2V5OiJtb3JzZUNvZGVNYXJrTm90VW5pcXVlIixtZXNzYWdlOiJUaW1pbmcgbWFya3MgbmVlZCB0byBiZSBkaWZmZXJlbnQgZnJvbSBlYWNoIG90aGVyIn06ITB9c2V0dGluZ1ZhbHVlRGlkQ2hhbmdlKGUsdCl7c3dpdGNoKGUuZ2V0TmFtZSgpKXtjYXNlInNob3J0TWFyayI6Y2FzZSJsb25nZXJNYXJrIjpjYXNlInNwYWNlTWFyayI6WyJzaG9ydE1hcmsiLCJsb25nZXJNYXJrIiwic3BhY2VNYXJrIl0uZmlsdGVyKGk9PmkhPT1lLmdldE5hbWUoKSkuZm9yRWFjaChpPT50aGlzLmdldFNldHRpbmcoaSkucmV2YWxpZGF0ZVZhbHVlKCkpO2JyZWFrO2Nhc2Uic2lnbmFsT25NYXJrIjpjYXNlInNpZ25hbE9mZk1hcmsiOlsic2lnbmFsT25NYXJrIiwic2lnbmFsT2ZmTWFyayJdLmZpbHRlcihpPT5pIT09ZS5nZXROYW1lKCkpLmZvckVhY2goaT0+dGhpcy5nZXRTZXR0aW5nKGkpLnJldmFsaWRhdGVWYWx1ZSgpKTticmVhaztjYXNlInJlcHJlc2VudGF0aW9uIjp0aGlzLmdldFNldHRpbmcoInNob3J0TWFyayIpLnNldFZpc2libGUodD09PSJjb2RlIiksdGhpcy5nZXRTZXR0aW5nKCJsb25nZXJNYXJrIikuc2V0VmlzaWJsZSh0PT09ImNvZGUiKSx0aGlzLmdldFNldHRpbmcoInNwYWNlTWFyayIpLnNldFZpc2libGUodD09PSJjb2RlIiksdGhpcy5nZXRTZXR0aW5nKCJzaWduYWxPbk1hcmsiKS5zZXRWaXNpYmxlKHQ9PT0idGltaW5nIiksdGhpcy5nZXRTZXR0aW5nKCJzaWduYWxPZmZNYXJrIikuc2V0VmlzaWJsZSh0PT09InRpbWluZyIpO2JyZWFrfX1zdGF0aWMgZW5jb2RlQ2hhcmFjdGVyKGUsdCxpLHMpe2lmKEwuaXNXaGl0ZXNwYWNlKGUpKXJldHVybiBzO2NvbnN0IG49X3QuaW5kZXhPZihlKTtpZihuPT09LTEpcmV0dXJuIG51bGw7Y29uc3Qgcj13dFtuXTtyZXR1cm4gSi50cmFuc2xhdGVNYXJrcyhyLFsiLiIsIi0iXSxbdCxpXSl9c3RhdGljIGRlY29kZUNvZGUoZSx0LGkscyl7aWYoZT09PXMpcmV0dXJuIiAiO2NvbnN0IG49Si50cmFuc2xhdGVNYXJrcyhlLFt0LGldLFsiLiIsIi0iXSkscj13dC5pbmRleE9mKG4pO3JldHVybiByIT09LTE/X3Rbcl06bnVsbH1zdGF0aWMgdHJhbnNsYXRlTWFya3MoZSx0LGkpe2xldCBzPSIiLG49LTEscixhLGw7Zm9yKDsrK248ZS5sZW5ndGg7KWZvcihsPSExLHI9LTE7IWwmJisrcjx0Lmxlbmd0aDspYT10W3JdLGw9ZS5zdWJzdHIobixhLmxlbmd0aCk9PT1hLGwmJihzKz1pW3JdLG4rPWEubGVuZ3RoLTEpO3JldHVybiBzfX1jb25zdCBaaT17bmFtZToibmloaWxpc3QtY2lwaGVyIix0aXRsZToiTmloaWxpc3QgY2lwaGVyIixjYXRlZ29yeToiUG9seWJpdXMgc3F1YXJlIGNpcGhlcnMiLHR5cGU6ImVuY29kZXIifSxYaT0iY3J5cHRpaSIsVGU9ImFiY2RlZmdoaWtsbW5vcHFyc3R1dnd4eXoiO2NsYXNzIEppIGV4dGVuZHMgd3tzdGF0aWMgZ2V0TWV0YSgpe3JldHVybiBaaX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5hZGRTZXR0aW5ncyhbe25hbWU6ImFscGhhYmV0Iix0eXBlOiJ0ZXh0Iix2YWx1ZTpUZSx1bmlxdWVDaGFyczohMCxtaW5MZW5ndGg6MCxtYXhMZW5ndGg6MjUsY2FzZVNlbnNpdGl2aXR5OiExfSx7bmFtZToia2V5Iix0eXBlOiJ0ZXh0Iix2YWx1ZTpYaSx3aGl0ZWxpc3RDaGFyczpUZSxtaW5MZW5ndGg6MixjYXNlU2Vuc2l0aXZpdHk6ITF9LHtuYW1lOiJzZXBhcmF0b3IiLHR5cGU6InRleHQiLHZhbHVlOiIgIixyYW5kb21pemFibGU6ITEsYmxhY2tsaXN0Q2hhcnM6IjAxMjM0NTY3ODkiLG1pbkxlbmd0aDoxLGNhc2VTZW5zaXRpdml0eTohMX1dKSx0aGlzLl9wb2x5Yml1c1NxdWFyZT1uZXcgb2UsdGhpcy5fcG9seWJpdXNTcXVhcmUuc2V0U2V0dGluZ1ZhbHVlcyh7YWxwaGFiZXQ6VGUscm93czoiMTIzNDUiLGNvbHVtbnM6IjEyMzQ1IixzZXBhcmF0b3I6IiIsY2FzZVNlbnNpdGl2aXR5OiExLGluY2x1ZGVGb3JlaWduQ2hhcnM6ITF9KX1hc3luYyBwZXJmb3JtRW5jb2RlKGUpe2NvbnN0IHQ9dGhpcy5nZXRTZXR0aW5nVmFsdWUoImtleSIpLGk9dGhpcy5nZXRTZXR0aW5nVmFsdWUoInNlcGFyYXRvciIpLHM9YXdhaXQgdGhpcy5fcG9seWJpdXNTcXVhcmUuZW5jb2RlKGUuZ2V0U3RyaW5nKCkucmVwbGFjZSgvai9naSwiaSIpKSxuPWF3YWl0IHRoaXMuX3BvbHliaXVzU3F1YXJlLmVuY29kZSh0KSxyPXMuZ2V0TGVuZ3RoKCkvMixhPXQuZ2V0TGVuZ3RoKCksbD1uZXcgQXJyYXkocik7bGV0IG8sYyx1O2ZvcihsZXQgaD0wO2g8cjtoKyspbz1wYXJzZUludChzLmdldENoYXJBdChoKjIpK3MuZ2V0Q2hhckF0KGgqMisxKSksYz12Lm1vZChoLGEpKjIsdT1wYXJzZUludChuLmdldENoYXJBdChjKStuLmdldENoYXJBdChjKzEpKSxsW2hdPW8rdTtyZXR1cm4geS5qb2luKGwsaSl9YXN5bmMgcGVyZm9ybURlY29kZShlKXtjb25zdCB0PXRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJrZXkiKSxpPXRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJzZXBhcmF0b3IiKSxzPWUuZ2V0U3RyaW5nKCkuc3BsaXQoaSksbj1zLmxlbmd0aCxyPXQuZ2V0TGVuZ3RoKCksYT1hd2FpdCB0aGlzLl9wb2x5Yml1c1NxdWFyZS5lbmNvZGUodCk7bGV0IGwsbyxjLHUsaD0iIjtmb3IobGV0IGQ9MDtkPG47ZCsrKXtpZihsPXBhcnNlSW50KHNbZF0pLGlzTmFOKGwpKXRocm93IG5ldyB4KGBCbG9jayBhdCBpbmRleCAke2QrMX0gaXMgbm90IGEgbnVtYmVyLmApO2lmKGM9di5tb2QoZCxyKSoyLHU9cGFyc2VJbnQoYS5nZXRDaGFyQXQoYykrYS5nZXRDaGFyQXQoYysxKSksbz1sLXUsIW8udG9TdHJpbmcoKS5tYXRjaCgvXlsxLTVdezJ9JC8pKXRocm93IG5ldyB4KGBCbG9jayBhdCBpbmRleCAke2QrMX0gcmVzdWx0cyBpbiBpbnZhbGlkIFBvbHliaXVzIHNxdWFyZSBjb29yZGluYXRlcyAnJHtvfScuYCk7aCs9by50b1N0cmluZygpfXJldHVybiB0aGlzLl9wb2x5Yml1c1NxdWFyZS5kZWNvZGUoaCl9c2V0dGluZ1ZhbHVlRGlkQ2hhbmdlKGUsdCl7c3dpdGNoKGUuZ2V0TmFtZSgpKXtjYXNlImFscGhhYmV0Ijp7Y29uc3QgaT10LmV4dGVuZChUZSk7dGhpcy5fcG9seWJpdXNTcXVhcmUuc2V0U2V0dGluZ1ZhbHVlKCJhbHBoYWJldCIsaSksdGhpcy5nZXRTZXR0aW5nKCJrZXkiKS5zZXRXaGl0ZWxpc3RDaGFycyhpKTticmVha319fX1jb25zdCBRaT17bmFtZToibnVtZXJhbC1zeXN0ZW0iLHRpdGxlOiJOdW1lcmFsIHN5c3RlbSIsY2F0ZWdvcnk6IlRyYW5zZm9ybSIsdHlwZToiZW5jb2RlciJ9LGV0PVsiYmluYXJ5Iiwib2N0YWwiLCJkZWNpbWFsIiwiaGV4YWRlY2ltYWwiLCJyb21hbi1udW1lcmFscyJdLHZ0PVsiQmluYXJ5ICgyKSIsIk9jdGFsICg4KSIsIkRlY2ltYWwgKDEwKSIsIkhleGFkZWNpbWFsICgxNikiLCJSb21hbiBudW1lcmFscyJdLFlpPVsvKFswMV0rKS9nLC8oWzAtN10rKS9nLC8oXGQrKS9nLC8oWzAtOWEtZl0rKS9naSwvKFtJVlhMQ0RNXSspL2dpXSx0dD1bIk0iLCJDTSIsIkQiLCJDRCIsIkMiLCJYQyIsIkwiLCJYTCIsIlgiLCJJWCIsIlYiLCJJViIsIkkiXSxpdD1bMWUzLDkwMCw1MDAsNDAwLDEwMCw5MCw1MCw0MCwxMCw5LDUsNCwxXTtjbGFzcyBRIGV4dGVuZHMgd3tzdGF0aWMgZ2V0TWV0YSgpe3JldHVybiBRaX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5hZGRTZXR0aW5ncyhbe25hbWU6ImZyb20iLGxhYmVsOiJSZWFkIix0eXBlOiJlbnVtIix2YWx1ZToiZGVjaW1hbCIsZWxlbWVudHM6ZXQsbGFiZWxzOnZ0LHJhbmRvbWl6YWJsZTohMSxzdHlsZToicmFkaW8ifSx7bmFtZToidG8iLGxhYmVsOiJDb252ZXJ0IHRvIix0eXBlOiJlbnVtIix2YWx1ZToiaGV4YWRlY2ltYWwiLGVsZW1lbnRzOmV0LGxhYmVsczp2dCxyYW5kb21pemFibGU6ITEsc3R5bGU6InJhZGlvIn1dKX1wZXJmb3JtVHJhbnNsYXRlKGUsdCl7Y29uc3QgaT1lLnRvU3RyaW5nKCkscz10aGlzLmdldFNldHRpbmdWYWx1ZSh0PyJmcm9tIjoidG8iKSxuPXRoaXMuZ2V0U2V0dGluZ1ZhbHVlKHQ/InRvIjoiZnJvbSIpLHI9WWlbZXQuaW5kZXhPZihzKV07cmV0dXJuIGkucmVwbGFjZShyLChsLG8sYyk9PntpZighKChjPT09MHx8TC5pc1doaXRlc3BhY2UoaSxjLTEpKSYmKGkubGVuZ3RoPT09YytvLmxlbmd0aHx8TC5pc1doaXRlc3BhY2UoaSxjK28ubGVuZ3RoKSkpKXJldHVybiBvO2NvbnN0IGg9US5kZWNvZGVOdW1iZXIocyxvKTtyZXR1cm4oaCE9PW51bGw/US5lbmNvZGVOdW1iZXIobixoKTpudWxsKXx8b30pfXN0YXRpYyBkZWNvZGVOdW1iZXIoZSx0KXtpZih0eXBlb2YgQmlnSW50PCJ1Iilzd2l0Y2goZSl7Y2FzZSJiaW5hcnkiOnJldHVybiBCaWdJbnQoYDBiJHt0fWApO2Nhc2Uib2N0YWwiOnJldHVybiBCaWdJbnQoYDBvJHt0fWApO2Nhc2UiZGVjaW1hbCI6cmV0dXJuIEJpZ0ludCh0KTtjYXNlImhleGFkZWNpbWFsIjpyZXR1cm4gQmlnSW50KGAweCR7dH1gKX1sZXQgaT1udWxsO3N3aXRjaChlKXtjYXNlImJpbmFyeSI6aT1wYXJzZUludCh0LDIpO2JyZWFrO2Nhc2Uib2N0YWwiOmk9cGFyc2VJbnQodCw4KTticmVhaztjYXNlImRlY2ltYWwiOmk9cGFyc2VJbnQodCwxMCk7YnJlYWs7Y2FzZSJoZXhhZGVjaW1hbCI6aT1wYXJzZUludCh0LDE2KTticmVhaztjYXNlInJvbWFuLW51bWVyYWxzIjppPVEucm9tYW5OdW1lcmFsc1RvRGVjaW1hbCh0KTticmVha31pZihpPT09bnVsbHx8aXNOYU4oaSkpcmV0dXJuIG51bGw7aWYoIVEuaXNTYWZlSW50ZWdlcihpKSl0aHJvdyBuZXcgeChgQ2FuJ3QgcmVhZCAnJHt0fScgYmVjYXVzZSB0aGUgY3VycmVudCBlbnZpcm9ubWVudCBkb2VzIG5vdCBzdXBwb3J0IGFyYml0cmFyaWx5IGxhcmdlIGludGVnZXJzLmApO3JldHVybiBpfXN0YXRpYyBlbmNvZGVOdW1iZXIoZSx0KXtzd2l0Y2goZSl7Y2FzZSJiaW5hcnkiOnJldHVybiB0LnRvU3RyaW5nKDIpO2Nhc2Uib2N0YWwiOnJldHVybiB0LnRvU3RyaW5nKDgpO2Nhc2UiZGVjaW1hbCI6cmV0dXJuIHQudG9TdHJpbmcoMTApO2Nhc2UiaGV4YWRlY2ltYWwiOnJldHVybiB0LnRvU3RyaW5nKDE2KTtjYXNlInJvbWFuLW51bWVyYWxzIjpyZXR1cm4gUS5kZWNpbWFsVG9Sb21hbk51bWVyYWxzKHQpO2RlZmF1bHQ6cmV0dXJuIG51bGx9fXN0YXRpYyBpc1NhZmVJbnRlZ2VyKGUpe2lmKE51bWJlci5pc1NhZmVJbnRlZ2VyPT09dm9pZCAwKXtjb25zdCB0PU51bWJlci5NQVhfU0FGRV9JTlRFR0VSfHw5MDA3MTk5MjU0NzQwOTkxO3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpJiZNYXRoLmFicyhlKTw9dH1yZXR1cm4gTnVtYmVyLmlzU2FmZUludGVnZXIoZSl9c3RhdGljIGRlY2ltYWxUb1JvbWFuTnVtZXJhbHMoZSl7aWYoZTw9MHx8ZT49NGUzKXJldHVybiBudWxsO2xldCB0PU51bWJlcihlKSxpPSIiLHM7Zm9yKDt0PjA7KXM9aXQuZmluZEluZGV4KG49PnQ+PW4pLGkrPXR0W3NdLHQtPWl0W3NdO3JldHVybiBpfXN0YXRpYyByb21hbk51bWVyYWxzVG9EZWNpbWFsKGUpe2U9ZS50b1N0cmluZygpLnRvVXBwZXJDYXNlKCk7bGV0IHQ9MCxpPTAscz0hMSxuPTAscjtmb3IoOyFzJiZ0PGUubGVuZ3RoOylyPXR0LmZpbmRJbmRleChhPT5lLnN1YnN0cih0LGEubGVuZ3RoKT09PWEpLHIhPT0tMSYmcj49bj8oaSs9aXRbcl0sdCs9dHRbcl0ubGVuZ3RoLG49cik6cz0hMDtyZXR1cm4gcz9udWxsOml9fWNvbnN0IGVzPTE2LEs9MTYsUGU9MTEsdHM9OCxzdD02LHJlPTMsWj0xMztjbGFzcyBpcyBleHRlbmRzIE10e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl90YXBlPVtdLHRoaXMuX3Jvd3M9OCx0aGlzLl8kY2FudmFzPW51bGwsdGhpcy5fJHRhcGVzPW51bGwsdGhpcy5fJG1hcmtzPW51bGwsdGhpcy5fJGhvbGVzPW51bGx9c2V0VGFwZShlLHQpe3JldHVybiB0aGlzLl90YXBlPWUsdGhpcy5fcm93cz10LHRoaXMuc2V0TmVlZHNVcGRhdGUoKX1yZW5kZXIoKXtjb25zdCBlPXN1cGVyLnJlbmRlcigpO3JldHVybiBlLmNsYXNzTGlzdC5hZGQoInZpZXdlci1wYXBlci10YXBlIiksZX1yZW5kZXJDb250ZW50KCl7dGhpcy5fJHRhcGVzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJwYXRoIiksdGhpcy5fJHRhcGVzLmNsYXNzTGlzdC5hZGQoInZpZXdlci1wdW5jaGVkLXRhcGVfX3RhcGUiKSx0aGlzLl8kbWFya3M9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInBhdGgiKSx0aGlzLl8kbWFya3MuY2xhc3NMaXN0LmFkZCgidmlld2VyLXB1bmNoZWQtdGFwZV9fbWFyayIpLHRoaXMuXyRob2xlcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicGF0aCIpLHRoaXMuXyRob2xlcy5jbGFzc0xpc3QuYWRkKCJ2aWV3ZXItcHVuY2hlZC10YXBlX19ob2xlIiksdGhpcy5fJGNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwic3ZnIiksdGhpcy5fJGNhbnZhcy5jbGFzc0xpc3QuYWRkKCJ2aWV3ZXItcHVuY2hlZC10YXBlX19jYW52YXMiKSx0aGlzLl8kY2FudmFzLmFwcGVuZENoaWxkKHRoaXMuXyR0YXBlcyksdGhpcy5fJGNhbnZhcy5hcHBlbmRDaGlsZCh0aGlzLl8kbWFya3MpLHRoaXMuXyRjYW52YXMuYXBwZW5kQ2hpbGQodGhpcy5fJGhvbGVzKSx0aGlzLnNldE5lZWRzVXBkYXRlKCk7Y29uc3QgZT1zdXBlci5yZW5kZXJDb250ZW50KCk7cmV0dXJuIGUuYXBwZW5kQ2hpbGQodGhpcy5fJGNhbnZhcyksZX1sYXlvdXQoKXtyZXR1cm4gdGhpcy5zZXROZWVkc1VwZGF0ZSgpLHN1cGVyLmxheW91dCgpfXVwZGF0ZSgpe2NvbnN0IGU9dGhpcy5fdGFwZSx0PXRoaXMuX3RhcGUubGVuZ3RoO2xldCBpPXRoaXMuX3Jvd3M7Y29uc3Qgcz1NYXRoLmZsb29yKChpLTEpLzIpO2krKztjb25zdCBuPXRoaXMuXyRjYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgscj1zdCouNSxhPXJlKi41LGw9bi1LKjIsbz1NYXRoLmZsb29yKChsLVBlKjIpL1opKzEsYz0obC0oby0xKSpaKS8yLHU9TWF0aC5jZWlsKHQvbyksaD1aKihpLTEpK1BlKjIsZD1oK2VzLGY9dSooaCtLKStLLHA9W10sYj1bXTtsZXQgXyxTLEIsSSxWO2ZvcihJPTA7STx0O0krKyl7Zm9yKF89ZVtJXSxTPUsrYytJJW8qWixCPUsrUGUrTWF0aC5mbG9vcihJL28pKmQsVj0wO1Y8aTtWKyspVj09PXM/KGIucHVzaChgTSAke1MtYX0gJHtCK1YqWn1gKSxiLnB1c2goYGEgJHthfSwke2F9IDAgMSwwICR7cmV9LDBgKSxiLnB1c2goYGEgJHthfSwke2F9IDAgMSwwICR7LXJlfSwwYCkpOihfJjEmJihiLnB1c2goYE0gJHtTLXJ9ICR7QitWKlp9YCksYi5wdXNoKGBhICR7cn0sJHtyfSAwIDEsMCAke3N0fSwwYCksYi5wdXNoKGBhICR7cn0sJHtyfSAwIDEsMCAkey1zdH0sMGApKSxfPV8+PjEpO0klaT09PTAmJmk+PTUmJihwLnB1c2goYE0gJHtTLWF9LCR7Qi1QZStoK3RzfWApLHAucHVzaChgYSAke2F9LCR7YX0gMCAxLDAgJHtyZX0sMGApLHAucHVzaChgYSAke2F9LCR7YX0gMCAxLDAgJHstcmV9LDBgKSl9Y29uc3QgQz1bXTtsZXQgcSxrLE8sJDtmb3IocT0wO3E8dTtxKyspaz1LLE89SytxKmQsJD1xPHUtMXx8dCVvPT09MD9sOnQlbypaKzIqYyxDLnB1c2goYE0gJHtrfSwke08rcn1gKSxDLnB1c2goYGEgJHtyfSwke3J9IDAgMCAxICR7cn0sJHstcn1gKSxDLnB1c2goYEwgJHtrKyQtcn0sJHtPfWApLEMucHVzaChgYSAke3J9LCR7cn0gMCAwIDEgJHtyfSwke3J9YCksQy5wdXNoKGBMICR7ayskfSwke08raC1yfWApLEMucHVzaChgYSAke3J9LCR7cn0gMCAwIDEgJHstcn0sJHtyfWApLEMucHVzaChgTCAke2srcn0sJHtPK2h9YCksQy5wdXNoKGBhICR7cn0sJHtyfSAwIDAgMSAkey1yfSwkey1yfWApLEMucHVzaCgiWiIpO3RoaXMuXyRjYW52YXMuc3R5bGUuaGVpZ2h0PWAke2Z9cHhgLHRoaXMuXyR0YXBlcy5zZXRBdHRyaWJ1dGUoImQiLEMuam9pbigiICIpKSx0aGlzLl8kbWFya3Muc2V0QXR0cmlidXRlKCJkIixwLmpvaW4oIiAiKSksdGhpcy5fJGhvbGVzLnNldEF0dHJpYnV0ZSgiZCIsYi5qb2luKCIgIikpfX1jb25zdCBzcz17bmFtZToicHVuY2hlZC10YXBlIix0aXRsZToiUHVuY2hlZCB0YXBlIixjYXRlZ29yeToiVmlldyIsdHlwZToidmlld2VyIn07Y2xhc3MgbnMgZXh0ZW5kcyBxZXtzdGF0aWMgZ2V0TWV0YSgpe3JldHVybiBzc31jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fdmlld1Byb3RvdHlwZT1pcyx0aGlzLmFkZFNldHRpbmcoe25hbWU6InJvd3MiLHR5cGU6Im51bWJlciIsdmFsdWU6OCxtaW46MyxtYXg6MjUscmFuZG9taXphYmxlOiExfSl9YXN5bmMgcGVyZm9ybVZpZXcoZSl7Y29uc3QgdD10aGlzLmdldFNldHRpbmdWYWx1ZSgicm93cyIpLGk9ZS5nZXRCeXRlcygpLHM9RS5yZXNpemVCaXRTaXplZEFycmF5KGksOCx0LCEwKTt0aGlzLmdldFZpZXcoKS5zZXRUYXBlKHMsdCl9fWNvbnN0IHJzPXtuYW1lOiJwdW55Y29kZSIsdGl0bGU6IlB1bnljb2RlIixjYXRlZ29yeToiRW5jb2RpbmciLHR5cGU6ImVuY29kZXIifSxhcz17YmFzaWNSYW5nZVN0YXJ0OjAsYmFzaWNSYW5nZUVuZDoxMjcsZGlnaXRNYXBwaW5nOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkiLGRlbGltaXRlcjoiLSIsY2FzZVNlbnNpdGl2aXR5OiExLGluaXRpYWxCaWFzOjcyLGluaXRpYWxOOjEyOCx0bWluOjEsdG1heDoyNixza2V3OjM4LGRhbXA6NzAwfSxudD0ieG4tLSI7Y2xhc3MgbHMgZXh0ZW5kcyB3e3N0YXRpYyBnZXRNZXRhKCl7cmV0dXJuIHJzfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9ib290c3RyaW5nRW5jb2Rlcj1uZXcgJHQsdGhpcy5fYm9vdHN0cmluZ0VuY29kZXIuc2V0U2V0dGluZ1ZhbHVlcyhhcyl9YXN5bmMgcGVyZm9ybUVuY29kZShlKXtlPWUudG9Mb3dlckNhc2UoKTtjb25zdCB0PWUuc3BsaXQoIi4iKSxpPW5ldyBBcnJheSh0Lmxlbmd0aCk7Zm9yKGxldCBzPTA7czx0Lmxlbmd0aDtzKyspaWYodGhpcy5fbm9uQmFzaWNDb2RlUG9pbnRJbmRleCh0W3NdLmdldENvZGVQb2ludHMoKSk9PT0tMSlpW3NdPXRbc107ZWxzZXtjb25zdCBuPWF3YWl0IHRoaXMuX2Jvb3RzdHJpbmdFbmNvZGVyLmVuY29kZSh0W3NdKTtpW3NdPW50K24uZ2V0U3RyaW5nKCl9cmV0dXJuIHkuam9pbihpLCIuIil9YXN5bmMgcGVyZm9ybURlY29kZShlKXtjb25zdCB0PXRoaXMuX25vbkJhc2ljQ29kZVBvaW50SW5kZXgoZS5nZXRDb2RlUG9pbnRzKCkpO2lmKHQhPT0tMSl0aHJvdyBuZXcgeChgSW52YWxpZCBQdW55Y29kZSBjaGFyYWN0ZXIgYXQgaW5kZXggJHt0fWApO2NvbnN0IGk9ZS5zcGxpdCgiLiIpLHM9bmV3IEFycmF5KGkubGVuZ3RoKTtmb3IobGV0IG49MDtuPGkubGVuZ3RoO24rKylpZihpW25dLmluZGV4T2YobnQpIT09MClzW25dPWlbbl07ZWxzZXtjb25zdCByPWlbbl0uc3Vic3RyKG50Lmxlbmd0aCk7c1tuXT1hd2FpdCB0aGlzLl9ib290c3RyaW5nRW5jb2Rlci5kZWNvZGUocil9cmV0dXJuIHkuam9pbihzLCIuIil9X25vbkJhc2ljQ29kZVBvaW50SW5kZXgoZSl7cmV0dXJuIGUuZmluZEluZGV4KHQ9PnQ+PTEyOCl9fWNvbnN0IG9zPXtuYW1lOiJyYWlsLWZlbmNlLWNpcGhlciIsdGl0bGU6IlJhaWwgZmVuY2UgY2lwaGVyIixjYXRlZ29yeToiQ2lwaGVycyIsdHlwZToiZW5jb2RlciJ9O2NsYXNzIGNzIGV4dGVuZHMgd3tzdGF0aWMgZ2V0TWV0YSgpe3JldHVybiBvc31jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5hZGRTZXR0aW5ncyhbe25hbWU6ImtleSIsdHlwZToibnVtYmVyIix2YWx1ZToyLGludGVnZXI6ITAsbWluOjIsbWF4Ojk5LHJhbmRvbWl6ZVZhbHVlOmU9PmUubmV4dEludGVnZXIoMiw4KX0se25hbWU6Im9mZnNldCIsdHlwZToibnVtYmVyIix2YWx1ZTowLGludGVnZXI6ITAsbWluOjAscmFuZG9taXphYmxlOiExfV0pfXBlcmZvcm1FbmNvZGUoZSl7Y29uc3R7a2V5OnQsb2Zmc2V0Oml9PXRoaXMuZ2V0U2V0dGluZ1ZhbHVlcygpLHM9ZS5nZXRMZW5ndGgoKSxuPXQqMi0yLHI9bmV3IEFycmF5KHQpLmZpbGwoIiIpO2xldCBhLGw7Zm9yKGE9MDthPHM7YSsrKWw9dC0xLU1hdGguYWJzKG4vMi0oYStpKSVuKSxyW2xdKz1lLmdldENoYXJBdChhKTtyZXR1cm4gci5qb2luKCIiKX1wZXJmb3JtRGVjb2RlKGUpe2NvbnN0e2tleTp0LG9mZnNldDppfT10aGlzLmdldFNldHRpbmdWYWx1ZXMoKSxzPWUuZ2V0TGVuZ3RoKCksbj10KjItMixyPW5ldyBBcnJheShzKTtsZXQgYT0tMSxsLG87Zm9yKG89MDtvPHQ7bysrKWZvcihsPTA7bDxzO2wrKykoKG8rbCtpKSVuPT09MHx8KG8tbC1pKSVuPT09MCkmJihyW2xdPWUuZ2V0Q29kZVBvaW50QXQoKythKSk7cmV0dXJuIHJ9fWNvbnN0IGhzPXtuYW1lOiJyYzQiLHRpdGxlOiJSQzQiLGNhdGVnb3J5OiJNb2Rlcm4gY3J5cHRvZ3JhcGh5Iix0eXBlOiJlbmNvZGVyIn07Y2xhc3MgdXMgZXh0ZW5kcyB3e3N0YXRpYyBnZXRNZXRhKCl7cmV0dXJuIGhzfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLmFkZFNldHRpbmdzKFt7bmFtZToia2V5Iix0eXBlOiJieXRlcyIsdmFsdWU6bmV3IFVpbnQ4QXJyYXkoWzk5LDExNCwxMjEsMTEyLDExNiwxMDUsMTA1XSksbWluU2l6ZToxLG1heFNpemU6MzIscmFuZG9taXplU2l6ZTo4fSx7bmFtZToiZHJvcCIsdHlwZToibnVtYmVyIixsYWJlbDoiRHJvcCBieXRlcyIsdmFsdWU6MCxpbnRlZ2VyOiEwLG1pbjowLHJhbmRvbWl6YWJsZTohMX1dKX1wZXJmb3JtVHJhbnNsYXRlKGUsdCl7Y29uc3QgaT10aGlzLmdldFNldHRpbmdWYWx1ZSgia2V5Iikscz10aGlzLmdldFNldHRpbmdWYWx1ZSgiZHJvcCIpLG49aS5sZW5ndGgscj1lLmdldEJ5dGVzKCksYT1yLmxlbmd0aCxsPW5ldyBVaW50OEFycmF5KGEpLG89bmV3IFVpbnQ4QXJyYXkoMjU2KTtmb3IobGV0IGQ9MDtkPDI1NjtkKyspb1tkXT1kO2xldCBjPTA7Zm9yKGxldCBkPTA7ZDwyNTY7ZCsrKWM9KGMrb1tkXStpW2Qlbl0pJTI1Nixbb1tkXSxvW2NdXT1bb1tjXSxvW2RdXTtsZXQgdT0wO2M9MDtsZXQgaDtmb3IobGV0IGQ9MDtkPHMrYTtkKyspdT0odSsxKSUyNTYsYz0oYytvW3VdKSUyNTYsW29bdV0sb1tjXV09W29bY10sb1t1XV0saD1vWyhvW3VdK29bY10pJTI1Nl0sZD49cyYmKGxbZC1zXT1yW2Qtc11eaCk7cmV0dXJuIGx9fWNvbnN0IGRzPXtuYW1lOiJyZXBsYWNlIix0aXRsZToiUmVwbGFjZSIsY2F0ZWdvcnk6IlRyYW5zZm9ybSIsdHlwZToiZW5jb2RlciJ9O2NsYXNzIGdzIGV4dGVuZHMgd3tzdGF0aWMgZ2V0TWV0YSgpe3JldHVybiBkc31jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5hZGRTZXR0aW5ncyhbe25hbWU6ImZpbmQiLHR5cGU6InRleHQiLHZhbHVlOiIiLHJhbmRvbWl6YWJsZTohMX0se25hbWU6InJlcGxhY2UiLHR5cGU6InRleHQiLHZhbHVlOiIiLHJhbmRvbWl6YWJsZTohMX0se25hbWU6ImNhc2VTZW5zaXRpdml0eSIsdHlwZToiYm9vbGVhbiIsdmFsdWU6ITEscmFuZG9taXphYmxlOiExfV0pfXBlcmZvcm1UcmFuc2xhdGUoZSx0KXtjb25zdCBpPXRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJjYXNlU2Vuc2l0aXZpdHkiKTtsZXR7ZmluZDpzLHJlcGxhY2U6bn09dGhpcy5nZXRTZXR0aW5nVmFsdWVzKCk7dHx8KFtzLG5dPVtuLHNdKTtsZXQgcj1lO2l8fChyPXIudG9Mb3dlckNhc2UoKSxzPXMudG9Mb3dlckNhc2UoKSkscj1yLmdldENvZGVQb2ludHMoKSxlPWUuZ2V0Q29kZVBvaW50cygpLHM9cy5nZXRDb2RlUG9pbnRzKCksbj1uLmdldENvZGVQb2ludHMoKTtsZXQgYT0wLGw9LTEsbz1bXTtmb3IoOyhsPUUuaW5kZXhPZlNsaWNlKHIscyxsKzEpKSE9PS0xOylvPW8uY29uY2F0KGUuc2xpY2UoYSxsKSksbz1vLmNvbmNhdChuKSxhPWwrcy5sZW5ndGg7cmV0dXJuIG8uY29uY2F0KGUuc2xpY2UoYSkpfX1jb25zdCBwcz17bmFtZToicmV2ZXJzZSIsdGl0bGU6IlJldmVyc2UiLGNhdGVnb3J5OiJUcmFuc2Zvcm0iLHR5cGU6ImVuY29kZXIifTtjbGFzcyBmcyBleHRlbmRzIHd7c3RhdGljIGdldE1ldGEoKXtyZXR1cm4gcHN9Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuYWRkU2V0dGluZyh7bmFtZToidHlwZSIsbGFiZWw6IkJ5Iix0eXBlOiJlbnVtIix2YWx1ZToiY2hhcmFjdGVyIixlbGVtZW50czpbImJ5dGUiLCJjaGFyYWN0ZXIiLCJsaW5lIl0sbGFiZWxzOlsiQnl0ZSIsIkNoYXJhY3RlciIsIkxpbmUiXSxyYW5kb21pemFibGU6ITEsc3R5bGU6InJhZGlvIn0pfXBlcmZvcm1UcmFuc2xhdGUoZSx0KXtzd2l0Y2godGhpcy5nZXRTZXR0aW5nVmFsdWUoInR5cGUiKSl7Y2FzZSJieXRlIjpyZXR1cm4gZS5nZXRCeXRlcygpLnJldmVyc2UoKTtjYXNlImNoYXJhY3RlciI6cmV0dXJuIHkuam9pbihlLmdldENoYXJzKCkucmV2ZXJzZSgpLCIiKTtjYXNlImxpbmUiOnJldHVybiB5LmpvaW4oZS5zcGxpdCgvXHI/XG4vKS5yZXZlcnNlKCksYApgKX19fWNvbnN0IG1zPXtuYW1lOiJyb3QxMyIsdGl0bGU6IlJPVDEzIixjYXRlZ29yeToiQ2lwaGVycyIsdHlwZToiZW5jb2RlciJ9O2NsYXNzIGJzIGV4dGVuZHMgd3tzdGF0aWMgZ2V0TWV0YSgpe3JldHVybiBtc31jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5hZGRTZXR0aW5nKHtuYW1lOiJ2YXJpYW50Iix0eXBlOiJlbnVtIix2YWx1ZToicm90MTMiLGVsZW1lbnRzOlsicm90NSIsInJvdDEzIiwicm90MTgiLCJyb3Q0NyJdLGxhYmVsczpbIlJPVDUgKDAtOSkiLCJST1QxMyAoQS1aLCBhLXopIiwiUk9UMTggKDAtOSwgQS1aLCBhLXopIiwiUk9UNDcgKCEtfikiXSxyYW5kb21pemFibGU6ITEsc3R5bGU6InJhZGlvIn0pfXBlcmZvcm1UcmFuc2xhdGUoZSx0KXtjb25zdCBpPXRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJ2YXJpYW50Iik7cmV0dXJuIGUuZ2V0Q29kZVBvaW50cygpLm1hcChzPT4oKGk9PT0icm90NSJ8fGk9PT0icm90MTgiKSYmKHM9dGhpcy5fcm90YXRlQ29kZVBvaW50KHMsNDgsNTcpKSwoaT09PSJyb3QxMyJ8fGk9PT0icm90MTgiKSYmKHM9dGhpcy5fcm90YXRlQ29kZVBvaW50KHMsOTcsMTIyKSxzPXRoaXMuX3JvdGF0ZUNvZGVQb2ludChzLDY1LDkwKSksaT09PSJyb3Q0NyImJihzPXRoaXMuX3JvdGF0ZUNvZGVQb2ludChzLDMzLDEyNikpLHMpKX1fcm90YXRlQ29kZVBvaW50KGUsdCxpKXtpZihlPj10JiZlPD1pKXtjb25zdCBzPWktdCsxO2UrPXMvMixlPmkmJihlLT1zKX1yZXR1cm4gZX19Y29uc3QgeXM9e25hbWU6InNwZWxsaW5nLWFscGhhYmV0Iix0aXRsZToiU3BlbGxpbmcgYWxwaGFiZXQiLGNhdGVnb3J5OiJBbHBoYWJldHMiLHR5cGU6ImVuY29kZXIifSxydD1be25hbWU6Im5hdG8iLGxhYmVsOiJOQVRPL0lDQU8gcGhvbmV0aWMgYWxwaGFiZXQiLGNoYXJhY3RlcnM6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHh5ejAxMjM0NTY3ODkuIix3b3JkczpbIkFsZmEiLCJCcmF2byIsIkNoYXJsaWUiLCJEZWx0YSIsIkVjaG8iLCJGb3h0cm90IiwiR29sZiIsIkhvdGVsIiwiSW5kaWEiLCJKdWxpZXR0IiwiS2lsbyIsIkxpbWEiLCJNaWtlIiwiTm92ZW1iZXIiLCJPc2NhciIsIlBhcGEiLCJRdWViZWMiLCJSb21lbyIsIlNpZXJyYSIsIlRhbmdvIiwiVW5pZm9ybSIsIlZpY3RvciIsIldoaXNrZXkiLCJYLXJheSIsIlhyYXkiLCJZYW5rZWUiLCJadWx1IiwiWmVybyIsIk9uZSIsIlR3byIsIlRocmVlIiwiRm91ciIsIkZpdmUiLCJTaXgiLCJTZXZlbiIsIkVpZ2h0IiwiTmluZSIsIlN0b3AiXSxzcGFjZVdvcmQ6IihzcGFjZSkifSx7bmFtZToiZHV0Y2giLGxhYmVsOiJEdXRjaCBzcGVsbGluZyBhbHBoYWJldCIsY2hhcmFjdGVyczpbImEiLCJiIiwiYyIsImQiLCJlIiwiZiIsImciLCJoIiwiaWoiLCJpaiIsImkiLCJqIiwiaiIsImsiLCJsIiwibCIsIm0iLCJuIiwibyIsInAiLCJxIiwicSIsInIiLCJyIiwicyIsInQiLCJ1IiwidiIsInciLCJ4IiwieSIsInoiLCIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5Il0sd29yZHM6WyJBbnRvbiIsIkJlcm5oYXJkIiwiQ29ybmVsaXMiLCJEaXJrIiwiRWR1YXJkIiwiRmVyZGluYW5kIiwiR2VyYXJkIiwiSGVuZHJpayIsIklKbXVpZGVuIiwiSUpzYnJhbmQiLCJJemFhayIsIkpvaGFuIiwiSmFjb2IiLCJLYXJlbCIsIkxvZGV3aWprIiwiTGVvIiwiTWFyaWEiLCJOaWNvIiwiT3R0byIsIlBpZXRlciIsIlF1aXJpbml1cyIsIlF1aW50ZW4iLCJSaWNoYXJkIiwiUnVkb2xmIiwiU2ltb24iLCJUaGVvZG9vciIsIlV0cmVjaHQiLCJWaWN0b3IiLCJXaWxsZW0iLCJYYW50aXBwZSIsIllwc2lsb24iLCJaYWNoYXJpYXMiLCJOdWwiLCJFZW4iLCJUd2VlIiwiRHJpZSIsIlZpZXIiLCJWaWpmIiwiWmVzIiwiWmV2ZW4iLCJBY2h0IiwiTmVnZW4iXSxzcGFjZVdvcmQ6IihzcGF0aWViYWxrKSJ9LHtuYW1lOiJnZXJtYW4iLGxhYmVsOiJHZXJtYW4gc3BlbGxpbmcgYWxwaGFiZXQiLGNoYXJhY3RlcnM6ImFiY2RlZmdoaWpra2xtbm9wcXJzc3R1dnd4eHl6esOkw7bDtsO8w7zDn8OfMDEyMzQ1Njc4OSIsd29yZHM6WyJBbnRvbiIsIkJlcnRhIiwiQ8Okc2FyIiwiRG9yYSIsIkVtaWwiLCJGcmllZHJpY2giLCJHdXN0YXYiLCJIZWlucmljaCIsIklkYSIsIkp1bGl1cyIsIkthdWZtYW5uIiwiS29ucmFkIiwiTHVkd2lnIiwiTWFydGhhIiwiTm9yZHBvbCIsIk90dG8iLCJQYXVsYSIsIlF1ZWxsZSIsIlJpY2hhcmQiLCJTYW11ZWwiLCJTaWVnZnJpZWQiLCJUaGVvZG9yIiwiVWxyaWNoIiwiVmlrdG9yIiwiV2lsaGVsbSIsIlhhbnRoaXBwZSIsIlhhdmVyIiwiWXBzaWxvbiIsIlphY2hhcmlhcyIsIlrDvHJpY2giLCLDhHJnZXIiLCLDlmtvbm9tIiwiw5ZzdGVycmVpY2giLCLDnGJlcm11dCIsIsOcYmVsIiwiRXN6ZXR0IiwiU2NoYXJmZXMgUyIsIk51bGwiLCJFaW5zIiwiWndlaSIsIkRyZWkiLCJWaWVyIiwiRsO8bmYiLCJTZWNocyIsIlNpZWJlbiIsIkFjaHQiLCJOZXVuIl0sc3BhY2VXb3JkOiIoTGVlcnRhc3RlKSJ9LHtuYW1lOiJzd2VkaXNoIixsYWJlbDoiU3dlZGlzaCBBcm1lZCBGb3JjZXMnIHJhZGlvIGFscGhhYmV0IixjaGFyYWN0ZXJzOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5esOlw6TDtjAxMjM0NTY3ODkiLHdvcmRzOlsiQWRhbSIsIkJlcnRpbCIsIkNhZXNhciIsIkRhdmlkIiwiRXJpayIsIkZpbGlwIiwiR3VzdGF2IiwiSGVsZ2UiLCJJdmFyIiwiSm9oYW4iLCJLYWxsZSIsIkx1ZHZpZyIsIk1hcnRpbiIsIk5pa2xhcyIsIk9sb2YiLCJQZXR0ZXIiLCJRdmludHVzIiwiUnVkb2xmIiwiU2lndXJkIiwiVG9yZSIsIlVyYmFuIiwiVmlrdG9yIiwiV2lsaGVsbSIsIlhlcnhlcyIsIlluZ3ZlIiwiWsOkdGEiLCLDhWtlIiwiw4RybGlnIiwiw5ZzdGVuIiwiTm9sbGEiLCJFdHQiLCJUdsOlYSIsIlRyZWEiLCJGeXJhIiwiRmVtbWEiLCJTZXhhIiwiU2p1Iiwiw4V0dGEiLCJOaWEiXSxzcGFjZVdvcmQ6IihtZWxsYW5zbGFnKSJ9LHtuYW1lOiJydXNzaWFuIixsYWJlbDoiUnVzc2lhbiBzcGVsbGluZyBhbHBoYWJldCAob2ZmaWNpYWwsIGV4Y2x1ZGVzINCBKSIsY2hhcmFjdGVyczoi0LDQsdCy0LPQtNC10LbQt9C40LnQutC70LzQvdC+0L/RgNGB0YLRg9GE0YXRhtGH0YjRidGK0YvRjNGN0Y7RjzAxMjM0NTY3ODkuIix3b3JkczpbItCQ0L3QvdCwIiwi0JHQvtGA0LjRgSIsItCS0LDRgdC40LvQuNC5Iiwi0JPRgNC40LPQvtGA0LjQuSIsItCU0LzQuNGC0YDQuNC5Iiwi0JXQu9C10L3QsCIsItCW0LXQvdGPIiwi0JfQuNC90LDQuNC00LAiLCLQmNCy0LDQvSIsItCY0LLQsNC9INC60YDQsNGC0LrQuNC5Iiwi0JrQvtC90YHRgtCw0L3RgtC40L0iLCLQm9C10L7QvdC40LQiLCLQnNC40YXQsNC40LsiLCLQndC40LrQvtC70LDQuSIsItCe0LvRjNCz0LAiLCLQn9Cw0LLQtdC7Iiwi0KDQvtC80LDQvSIsItCh0LXQvNGR0L0iLCLQotCw0YLRjNGP0L3QsCIsItCj0LvRjNGP0L3QsCIsItCk0ZHQtNC+0YAiLCLQpdCw0YDQuNGC0L7QvSIsItCm0LDQv9C70Y8iLCLQp9C10LvQvtCy0LXQuiIsItCo0YPRgNCwIiwi0KnRg9C60LAiLCLQotCy0ZHRgNC00YvQuSDQt9C90LDQuiIsItCV0YDRiyIsItCc0Y/Qs9C60LjQuSDQt9C90LDQuiIsItCt0YXQviIsItCu0YDQuNC5Iiwi0K/QutC+0LIiLCLQndC+0LvRjCIsItCe0LTQuNC9Iiwi0JTQstCwIiwi0KLRgNC4Iiwi0KfQtdGC0YvRgNC1Iiwi0J/Rj9GC0YwiLCLQqNC10YHRgtGMIiwi0KHQtdC80YwiLCLQktC+0YHQtdC80YwiLCLQlNC10LLRj9GC0YwiLCLQotC+0YfQutCwIl0sc3BhY2VXb3JkOiIo0L/RgNC+0LHQtdC7KSJ9LHtuYW1lOiJydXNzaWFuLXVub2ZmaWNpYWwiLGxhYmVsOiJSdXNzaWFuIHNwZWxsaW5nIGFscGhhYmV0ICh1bm9mZmljaWFsLCBpbmNsdWRlcyDQgSkiLGNoYXJhY3RlcnM6ItCw0LHQstCz0LTQtdGR0LbQt9C40LnQutC70LzQvdC+0L/RgNGB0YLRg9GE0YXRhtGH0YjRidGK0YvRjNGN0Y7RjzAxMjM0NTY3ODkuIix3b3JkczpbItCQ0L3RgtC+0L0iLCLQkdC+0YDQuNGBIiwi0JLQsNGB0LjQu9C40LkiLCLQk9Cw0LvQuNC90LAiLCLQlNC80LjRgtGA0LjQuSIsItCV0LvQtdC90LAiLCLQgdC70LrQsCIsItCW0YPQuiIsItCX0L7RjyIsItCY0LLQsNC9Iiwi0JnQvtGCIiwi0JrQuNC70L7QstCw0YLRgiIsItCb0LXQvtC90LjQtCIsItCc0LDRgNC40Y8iLCLQndC40LrQvtC70LDQuSIsItCe0LvRjNCz0LAiLCLQn9Cw0LLQtdC7Iiwi0KDQsNC00LjQviIsItCh0LXRgNCz0LXQuSIsItCi0LDQvNCw0YDQsCIsItCj0LvRjNGP0L3QsCIsItCk0ZHQtNC+0YAiLCLQpdCw0YDQuNGC0L7QvSIsItCm0LXQvdGC0YAiLCLQp9C10LvQvtCy0LXQuiIsItCo0YPRgNCwIiwi0KnRg9C60LAiLCLQotCy0ZHRgNC00YvQuSDQt9C90LDQuiIsItCY0LPRgNC10LoiLCLQnNGP0LPQutC40Lkg0LfQvdCw0LoiLCLQrdC80LzQsCIsItCu0YDQuNC5Iiwi0K/QutC+0LIiLCLQndC+0LvRjCIsItCe0LTQuNC9Iiwi0JTQstCwIiwi0KLRgNC4Iiwi0KfQtdGC0YvRgNC1Iiwi0J/Rj9GC0YwiLCLQqNC10YHRgtGMIiwi0KHQtdC80YwiLCLQktC+0YHQtdC80YwiLCLQlNC10LLRj9GC0YwiLCLQotC+0YfQutCwIl0sc3BhY2VXb3JkOiIo0L/RgNC+0LHQtdC7KSJ9XSxfcz0iKHNwYWNlKSI7Y2xhc3Mgd3MgZXh0ZW5kcyB3e3N0YXRpYyBnZXRNZXRhKCl7cmV0dXJuIHlzfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9jaGFyYWN0ZXJNYXA9e30sdGhpcy5fd29yZE1hcD17fSx0aGlzLmFkZFNldHRpbmcoe25hbWU6ImFscGhhYmV0Iix0eXBlOiJlbnVtIixlbGVtZW50czpydC5tYXAoZT0+ZS5uYW1lKSxsYWJlbHM6cnQubWFwKGU9PmUubGFiZWwpLHJhbmRvbWl6YWJsZTohMSxzdHlsZToicmFkaW8ifSksdGhpcy5idWlsZFRyYW5zbGF0aW9uTWFwKCl9cGVyZm9ybVRyYW5zbGF0ZShlLHQpe2NvbnN0IGk9TC5ub3JtYWxpemVXaGl0ZXNwYWNlcyhlLmdldFN0cmluZygpKSxzPXQ/dGhpcy5fY2hhcmFjdGVyTWFwOnRoaXMuX3dvcmRNYXAsbj1PYmplY3Qua2V5cyhzKS5zb3J0KChsLG8pPT5vLmxlbmd0aC1sLmxlbmd0aCk7bGV0IHI9MDtjb25zdCBhPVtdO2Zvcig7cjxpLmxlbmd0aDspe2NvbnN0IGw9bi5maW5kKG89Pmkuc3Vic3RyKHIsby5sZW5ndGgpLnRvTG93ZXJDYXNlKCk9PT1vLnRvTG93ZXJDYXNlKCkpO2lmKGwhPT12b2lkIDApYS5wdXNoKHNbbF0pLHIrPWwubGVuZ3RoO2Vsc2V7Y29uc3Qgbz1pLnN1YnN0cihyLDEpOyh0fHxvIT09IiAiKSYmYS5wdXNoKG8pLHIrK319cmV0dXJuIGEuam9pbih0PyIgIjoiIil9c2V0dGluZ1ZhbHVlRGlkQ2hhbmdlKGUsdCl7c3dpdGNoKGUuZ2V0TmFtZSgpKXtjYXNlImFscGhhYmV0Ijp0aGlzLmJ1aWxkVHJhbnNsYXRpb25NYXAoKTticmVha319YnVpbGRUcmFuc2xhdGlvbk1hcCgpe2NvbnN0IGU9dGhpcy5nZXRTZXR0aW5nVmFsdWUoImFscGhhYmV0IiksdD1ydC5maW5kKGw9PmwubmFtZT09PWUpO2lmKHQ9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBBbHBoYWJldCB3aXRoIG5hbWUgJyR7ZX0nIGlzIG5vdCBkZWZpbmVkYCk7Y29uc3QgaT10eXBlb2YgdC5jaGFyYWN0ZXJzPT0ic3RyaW5nIj90LmNoYXJhY3RlcnMuc3BsaXQoIiIpOnQuY2hhcmFjdGVycyxzPXQud29yZHMsbj17fTtpLmZvckVhY2goKGwsbyk9PntuW2xdPT09dm9pZCAwJiYobltsXT1zW29dKX0pO2NvbnN0IHI9e307cy5mb3JFYWNoKChsLG8pPT57bD1sLnRvTG93ZXJDYXNlKCkscltsXT09PXZvaWQgMCYmKHJbbF09aVtvXSl9KTtjb25zdCBhPXQuc3BhY2VXb3JkfHxfcztyZXR1cm4gblsiICJdPWEsclthXT0iICIsdGhpcy5fY2hhcmFjdGVyTWFwPW4sdGhpcy5fd29yZE1hcD1yLHRoaXN9fWNvbnN0IHZzPXtuYW1lOiJ0YXAtY29kZSIsdGl0bGU6IlRhcCBjb2RlIixjYXRlZ29yeToiUG9seWJpdXMgc3F1YXJlIGNpcGhlcnMiLHR5cGU6ImVuY29kZXIifSxTcz0iYWJjZGVmZ2hpamxtbm9wcXJzdHV2d3h5eiI7Y2xhc3MgeHMgZXh0ZW5kcyB3e3N0YXRpYyBnZXRNZXRhKCl7cmV0dXJuIHZzfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLmFkZFNldHRpbmdzKFt7bmFtZToidGFwTWFyayIsbGFiZWw6IlRhcCIsdHlwZToidGV4dCIsd2lkdGg6NCx2YWx1ZToiLiIsbWluTGVuZ3RoOjEscmFuZG9taXphYmxlOiExfSx7bmFtZToiZ3JvdXBNYXJrIixsYWJlbDoiR3JvdXAiLHR5cGU6InRleHQiLHdpZHRoOjQsdmFsdWU6IiAiLG1pbkxlbmd0aDoxLHJhbmRvbWl6YWJsZTohMX0se25hbWU6ImxldHRlck1hcmsiLGxhYmVsOiJMZXR0ZXIiLHR5cGU6InRleHQiLHdpZHRoOjQsdmFsdWU6IiAgIixtaW5MZW5ndGg6MSxyYW5kb21pemFibGU6ITF9XSksdGhpcy5fcG9seWJpdXNTcXVhcmU9bmV3IG9lLHRoaXMuX3BvbHliaXVzU3F1YXJlLnNldFNldHRpbmdWYWx1ZXMoe2FscGhhYmV0OlNzLHJvd3M6IjEyMzQ1Iixjb2x1bW5zOiIxMjM0NSIsc2VwYXJhdG9yOiIiLGNhc2VTZW5zaXRpdml0eTohMSxpbmNsdWRlRm9yZWlnbkNoYXJzOiExfSl9YXN5bmMgcGVyZm9ybUVuY29kZShlKXtjb25zdCB0PXRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJ0YXBNYXJrIikuZ2V0U3RyaW5nKCksaT10aGlzLmdldFNldHRpbmdWYWx1ZSgiZ3JvdXBNYXJrIikuZ2V0U3RyaW5nKCkscz10aGlzLmdldFNldHRpbmdWYWx1ZSgibGV0dGVyTWFyayIpLmdldFN0cmluZygpLG49YXdhaXQgdGhpcy5fcG9seWJpdXNTcXVhcmUuZW5jb2RlKGUuZ2V0U3RyaW5nKCkucmVwbGFjZSgvay9naSwiYyIpKSxyPW4uZ2V0TGVuZ3RoKCkvMjtsZXQgYSxsLG89IiI7Zm9yKGxldCBjPTA7YzxyO2MrKylhPXBhcnNlSW50KG4uZ2V0Q2hhckF0KGMqMikpLGw9cGFyc2VJbnQobi5nZXRDaGFyQXQoYyoyKzEpKSxvKz0oYz4wP3M6IiIpK3QucmVwZWF0KGEpK2krdC5yZXBlYXQobCk7cmV0dXJuIG99cGVyZm9ybURlY29kZShlKXtjb25zdCB0PXRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJ0YXBNYXJrIikuZ2V0Q29kZVBvaW50cygpLGk9dC5sZW5ndGgscz1lLmdldENvZGVQb2ludHMoKTtsZXQgbj0iIixyPTAsYT0tMSxsPTA7Zm9yKDsoYT1FLmluZGV4T2ZTbGljZShzLHQsYSsxKSkhPT0tMTspcj09PTB8fGE9PT1yK2k/bCsrOihuKz1sLnRvU3RyaW5nKCksbD0xKSxyPWE7cmV0dXJuIG4rPWwudG9TdHJpbmcoKSx0aGlzLl9wb2x5Yml1c1NxdWFyZS5kZWNvZGUobil9fWNvbnN0IENzPXtuYW1lOiJ0ZXh0Iix0aXRsZToiVGV4dCIsY2F0ZWdvcnk6IlZpZXciLHR5cGU6InZpZXdlciJ9O2NsYXNzIFZzIGV4dGVuZHMgcWV7c3RhdGljIGdldE1ldGEoKXtyZXR1cm4gQ3N9Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX3ZpZXdQcm90b3R5cGU9QnR9YXN5bmMgcGVyZm9ybVZpZXcoZSl7dGhpcy5nZXRWaWV3KCkuc2V0VGV4dChlLmdldFN0cmluZygpKX12aWV3VGV4dERpZENoYW5nZShlLHQpe3RoaXMuZGFyZSgoKT0+e3RoaXMuY29udGVudERpZENoYW5nZSh5LndyYXAodCkpfSl9fWNvbnN0IElzPXtuYW1lOiJ0cmlmaWQtY2lwaGVyIix0aXRsZToiVHJpZmlkIGNpcGhlciIsY2F0ZWdvcnk6IlBvbHliaXVzIHNxdWFyZSBjaXBoZXJzIix0eXBlOiJlbmNvZGVyIn0sU3Q9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6KyI7Y2xhc3Mga3MgZXh0ZW5kcyB3e3N0YXRpYyBnZXRNZXRhKCl7cmV0dXJuIElzfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLmFkZFNldHRpbmdzKFt7bmFtZToia2V5Iix0eXBlOiJ0ZXh0Iix2YWx1ZToiIix1bmlxdWVDaGFyczohMCxtaW5MZW5ndGg6MCxtYXhMZW5ndGg6MjcsY2FzZVNlbnNpdGl2aXR5OiExfSx7bmFtZToiZ3JvdXBTaXplIix0eXBlOiJudW1iZXIiLHZhbHVlOjUsbWluOjJ9XSl9YXN5bmMgcGVyZm9ybUVuY29kZShlKXtjb25zdHtrZXk6dCxncm91cFNpemU6aX09dGhpcy5nZXRTZXR0aW5nVmFsdWVzKCkscz15LndyYXAodCkuZXh0ZW5kKFN0KS5nZXRDb2RlUG9pbnRzKCksbj1lLnRvTG93ZXJDYXNlKCkuZ2V0Q29kZVBvaW50cygpLm1hcChwPT5zLmluZGV4T2YocCkpLmZpbHRlcihwPT5wIT09LTEpLHI9bi5sZW5ndGgsYT1uZXcgQXJyYXkociozKTtsZXQgbCxvLGMsdSxoLGQ7Zm9yKGw9MDtsPHI7bCsrKWZvcih1PU1hdGguZmxvb3IobC9pKSxoPWwtdSppLGQ9TWF0aC5taW4oaSxyLXUqaSksYz10aGlzLmNhcnRlc2lhbkNvb3JkaW5hdGVzRnJvbUluZGV4KG5bbF0pLG89MDtvPDM7bysrKWFbaCt1KmkqMytkKm9dPWNbb107Y29uc3QgZj1uZXcgQXJyYXkocik7Zm9yKGw9MDtsPHI7bCsrKWM9YS5zbGljZShsKjMsKGwrMSkqMyksaD10aGlzLmluZGV4RnJvbUNhcnRlc2lhbkNvb3JkaW5hdGVzKGMpLGZbbF09c1toXTtyZXR1cm4gZn1hc3luYyBwZXJmb3JtRGVjb2RlKGUpe2NvbnN0e2tleTp0LGdyb3VwU2l6ZTppfT10aGlzLmdldFNldHRpbmdWYWx1ZXMoKSxzPXkud3JhcCh0KS5leHRlbmQoU3QpLmdldENvZGVQb2ludHMoKSxuPWUudG9Mb3dlckNhc2UoKS5nZXRDb2RlUG9pbnRzKCkubWFwKHA9PnMuaW5kZXhPZihwKSkuZmlsdGVyKHA9PnAhPT0tMSkscj1uLmxlbmd0aCxhPW5ldyBBcnJheShyKjMpO2xldCBsLG8sYztmb3IobD0wO2w8cjtsKyspZm9yKGM9dGhpcy5jYXJ0ZXNpYW5Db29yZGluYXRlc0Zyb21JbmRleChuW2xdKSxvPTA7bzwzO28rKylhW2wqMytvXT1jW29dO2NvbnN0IHU9bmV3IEFycmF5KHIpO2xldCBoLGQsZjtmb3IobD0wO2w8cjtsKyspe2ZvcihoPU1hdGguZmxvb3IobC9pKSxkPWwtaCppLGY9TWF0aC5taW4oaSxyLWgqaSksbz0wO288MztvKyspY1tvXT1hW2QraCppKjMrZipvXTtkPXRoaXMuaW5kZXhGcm9tQ2FydGVzaWFuQ29vcmRpbmF0ZXMoYyksdVtsXT1zW2RdfXJldHVybiB1fWNhcnRlc2lhbkNvb3JkaW5hdGVzRnJvbUluZGV4KGUpe2NvbnN0IHQ9TWF0aC5mbG9vcihlLzkpLGk9TWF0aC5mbG9vcigoZS10KjkpLzMpLHM9ZS10KjktaSozO3JldHVyblt0KzEsaSsxLHMrMV19aW5kZXhGcm9tQ2FydGVzaWFuQ29vcmRpbmF0ZXMoW2UsdCxpXSl7cmV0dXJuKGUtMSkqOSsodC0xKSozKyhpLTEpfX1jb25zdCBFcz17bmFtZToidW5pY29kZS1jb2RlLXBvaW50cyIsdGl0bGU6IlVuaWNvZGUgY29kZSBwb2ludHMiLGNhdGVnb3J5OiJFbmNvZGluZyIsdHlwZToiZW5jb2RlciJ9O2NsYXNzICRzIGV4dGVuZHMgRXR7c3RhdGljIGdldE1ldGEoKXtyZXR1cm4gRXN9Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuc2V0Q2hhcmFjdGVyVG9CbG9ja01vZGUoKSx0aGlzLmFkZFNldHRpbmcoe25hbWU6ImZvcm1hdCIsdHlwZToiZW51bSIsdmFsdWU6InVuaWNvZGUiLGVsZW1lbnRzOlsidW5pY29kZSIsImRlY2ltYWwiLCJoZXhhZGVjaW1hbCIsImJpbmFyeSIsIm9jdGFsIiwibmNyLWRlY2ltYWwiLCJuY3ItaGV4YWRlY2ltYWwiXSxsYWJlbHM6WyJVbmljb2RlIG5vdGF0aW9uIiwiRGVjaW1hbCIsIkhleGFkZWNpbWFsIiwiQmluYXJ5IiwiT2N0YWwiLCJOQ1IgKERlY2ltYWwpIiwiTkNSIChIZXhhZGVjaW1hbCkiXSxyYW5kb21pemFibGU6ITEsc3R5bGU6InJhZGlvIn0pfXBlcmZvcm1DaGFyRW5jb2RlVG9CbG9jayhlLHQsaSl7c3dpdGNoKHRoaXMuZ2V0U2V0dGluZ1ZhbHVlKCJmb3JtYXQiKSl7Y2FzZSJ1bmljb2RlIjpyZXR1cm4iVSsiK2UudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7Y2FzZSJkZWNpbWFsIjpyZXR1cm4gZS50b1N0cmluZygxMCk7Y2FzZSJoZXhhZGVjaW1hbCI6cmV0dXJuIGUudG9TdHJpbmcoMTYpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gZS50b1N0cmluZygyKTtjYXNlIm9jdGFsIjpyZXR1cm4gZS50b1N0cmluZyg4KTtjYXNlIm5jci1kZWNpbWFsIjpyZXR1cm5gJiMke2UudG9TdHJpbmcoMTApfTtgO2Nhc2UibmNyLWhleGFkZWNpbWFsIjpyZXR1cm5gJiN4JHtlLnRvU3RyaW5nKDE2KX07YH19cGVyZm9ybUJsb2NrRGVjb2RlVG9DaGFyKGUsdCxpLHMpe2xldCBuPTAscjtzd2l0Y2godGhpcy5nZXRTZXR0aW5nVmFsdWUoImZvcm1hdCIpKXtjYXNlInVuaWNvZGUiOnI9ZS5tYXRjaCgvXlVcKyhbMC05QS1GXSspJC9pKSxyIT09bnVsbCYmKG49cGFyc2VJbnQoclsxXSwxNikpO2JyZWFrO2Nhc2UiZGVjaW1hbCI6bj1wYXJzZUludChlLDEwKTticmVhaztjYXNlImhleGFkZWNpbWFsIjpuPXBhcnNlSW50KGUsMTYpO2JyZWFrO2Nhc2UiYmluYXJ5IjpuPXBhcnNlSW50KGUsMik7YnJlYWs7Y2FzZSJvY3RhbCI6bj1wYXJzZUludChlLDgpO2JyZWFrO2Nhc2UibmNyLWRlY2ltYWwiOmNhc2UibmNyLWhleGFkZWNpbWFsIjpyPWUubWF0Y2goL14mI3goWzAtOUEtRl0rKTskL2kpLHIhPT1udWxsP249cGFyc2VJbnQoclsxXSwxNik6KHI9ZS5tYXRjaCgvXiYjKFswLTldKyk7JC8pLHIhPT1udWxsJiYobj1wYXJzZUludChyWzFdLDEwKSkpO2JyZWFrfWlmKCFGLnZhbGlkYXRlQ29kZVBvaW50KG4pKXRocm93IG5ldyB4KGBJbnZhbGlkIGNvZGUgcG9pbnQgYXQgaW5kZXggJHt0fWApO3JldHVybiBufX1jb25zdCBNcz17bmFtZToidXJsLWVuY29kaW5nIix0aXRsZToiVVJMIGVuY29kaW5nIixjYXRlZ29yeToiRW5jb2RpbmciLHR5cGU6ImVuY29kZXIifSx4dD0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODktXy5+IjtjbGFzcyBCcyBleHRlbmRzIHd7c3RhdGljIGdldE1ldGEoKXtyZXR1cm4gTXN9cGVyZm9ybUVuY29kZShlKXt0cnl7Y29uc3QgdD1lLmdldENoYXJzKCk7bGV0IGk9IiIscztmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKylzPXRbbl0saSs9eHQuaW5kZXhPZihzKT09PS0xP3RoaXMuZW5jb2RlQnl0ZXMoZS5nZXRDaGFyQnl0ZXNBdChuKSk6cztyZXR1cm4gaX1jYXRjaCh0KXtpZih0IGluc3RhbmNlb2YgZWUpcmV0dXJuIHRoaXMuZW5jb2RlQnl0ZXMoZS5nZXRCeXRlcygpKTt0aHJvdyB0fX1lbmNvZGVCeXRlcyhlKXtsZXQgdD0iIjtmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyl0Kz0iJSIrKCIwIitlW2ldLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpO3JldHVybiB0fXBlcmZvcm1EZWNvZGUoZSl7Y29uc3QgdD1lLmdldFN0cmluZygpLGk9W107bGV0IHM9MCxuLHI7Zm9yKDtzPHQubGVuZ3RoOylpZihuPXRbc10sbj09PSIlIil7aWYocj10LnN1YnN0cihzKzEsMiksci5tYXRjaCgvWzAtOWEtZl17Mn0vaSk9PT1udWxsKXRocm93IG5ldyB4KGBJbnZhbGlkIHBlcmNlbnQtZW5jb2RlZCBieXRlICclJHtyfScgYXQgaW5kZXggJHtzfWApO2kucHVzaChwYXJzZUludChyLDE2KSkscys9M31lbHNlIGlmKG49PT0iKyIpaS5wdXNoKDMyKSxzKys7ZWxzZSBpZih4dC5pbmRleE9mKG4pIT09LTEpaS5wdXNoKG4uY2hhckNvZGVBdCgwKSkscysrO2Vsc2UgdGhyb3cgbmV3IHgoYEludmFsaWQgY2hhcmFjdGVyICcke259JyBhdCBpbmRleCAke3N9YCk7cmV0dXJuIG5ldyBVaW50OEFycmF5KGkpfX1jb25zdCBMcz17bmFtZToidmlnZW5lcmUtY2lwaGVyIix0aXRsZToiVmlnZW7DqHJlIGNpcGhlciIsY2F0ZWdvcnk6IkNpcGhlcnMiLHR5cGU6ImVuY29kZXIifSxDdD0iYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiO2NsYXNzIHpzIGV4dGVuZHMgd3tzdGF0aWMgZ2V0TWV0YSgpe3JldHVybiBMc31jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5hZGRTZXR0aW5ncyhbe25hbWU6InZhcmlhbnQiLHR5cGU6ImVudW0iLHZhbHVlOiJzdGFuZGFyZCIsZWxlbWVudHM6WyJzdGFuZGFyZCIsImJlYXVmb3J0LWNpcGhlciIsInZhcmlhbnQtYmVhdWZvcnQtY2lwaGVyIiwidHJpdGhlbWl1cy1jaXBoZXIiXSxsYWJlbHM6WyJTdGFuZGFyZCBWaWdlbsOocmUgY2lwaGVyIiwiQmVhdWZvcnQgY2lwaGVyIiwiVmFyaWFudCBCZWF1Zm9ydCBjaXBoZXIiLCJUcml0aGVtaXVzIGNpcGhlciJdLHJhbmRvbWl6YWJsZTohMX0se25hbWU6ImtleSIsdHlwZToidGV4dCIsdmFsdWU6ImNyeXB0aWkiLHdoaXRlbGlzdENoYXJzOkN0LG1pbkxlbmd0aDoyLGNhc2VTZW5zaXRpdml0eTohMX0se25hbWU6ImtleU1vZGUiLHR5cGU6ImVudW0iLHZhbHVlOiJyZXBlYXQiLGVsZW1lbnRzOlsicmVwZWF0IiwiYXV0b2tleSJdLGxhYmVsczpbIlJlcGVhdCIsIkF1dG9rZXkiXSxyYW5kb21pemFibGU6ITF9LHtuYW1lOiJhbHBoYWJldCIsdHlwZToidGV4dCIsdmFsdWU6Q3QsdW5pcXVlQ2hhcnM6ITAsbWluTGVuZ3RoOjIsY2FzZVNlbnNpdGl2aXR5OiExLHJhbmRvbWl6YWJsZTohMX0se25hbWU6ImNhc2VTdHJhdGVneSIsdHlwZToiZW51bSIsdmFsdWU6Im1haW50YWluIixlbGVtZW50czpbIm1haW50YWluIiwiaWdub3JlIiwic3RyaWN0Il0sbGFiZWxzOlsiTWFpbnRhaW4gY2FzZSIsIklnbm9yZSBjYXNlIiwiU3RyaWN0IChBIOKJoCBhKSJdLHdpZHRoOjYscmFuZG9taXphYmxlOiExfSx7bmFtZToiaW5jbHVkZUZvcmVpZ25DaGFycyIsdHlwZToiYm9vbGVhbiIsbGFiZWw6IkZvcmVpZ24gQ2hhcnMiLHdpZHRoOjYsdmFsdWU6ITAscmFuZG9taXphYmxlOiExLHRydWVMYWJlbDoiSW5jbHVkZSIsZmFsc2VMYWJlbDoiSWdub3JlIn1dKX1wZXJmb3JtVHJhbnNsYXRlKGUsdCl7Y29uc3R7dmFyaWFudDppLGNhc2VTdHJhdGVneTpzLGluY2x1ZGVGb3JlaWduQ2hhcnM6bn09dGhpcy5nZXRTZXR0aW5nVmFsdWVzKCk7bGV0IHI9dGhpcy5nZXRTZXR0aW5nVmFsdWUoImFscGhhYmV0IiksYTtzIT09InN0cmljdCImJihyPXIudG9Mb3dlckNhc2UoKSxhPXIudG9VcHBlckNhc2UoKSk7bGV0e2tleTpsLGtleU1vZGU6b309dGhpcy5nZXRTZXR0aW5nVmFsdWVzKCk7aT09PSJ0cml0aGVtaXVzLWNpcGhlciImJihsPXIsbz0icmVwZWF0Iik7Y29uc3QgYz1lLmdldExlbmd0aCgpLHU9bmV3IEFycmF5KGMpO2xldCBoLGQsZixwLGIsXz0wLFM9MDtmb3IobGV0IEI9MDtCPGM7QisrKWlmKGQ9ZS5nZXRDb2RlUG9pbnRBdChCKSxoPXIuaW5kZXhPZkNvZGVQb2ludChkKSxmPSExLGg9PT0tMSYmcyE9PSJzdHJpY3QiJiYoaD1hLmluZGV4T2ZDb2RlUG9pbnQoZCksZj0hMCksaCE9PS0xKXtzd2l0Y2gocD1sLmdldENvZGVQb2ludEF0KHYubW9kKFMsbC5nZXRMZW5ndGgoKSkpLGI9ci5pbmRleE9mQ29kZVBvaW50KHApLGkpe2Nhc2UiYmVhdWZvcnQtY2lwaGVyIjpoPWItaDticmVhaztjYXNlInZhcmlhbnQtYmVhdWZvcnQtY2lwaGVyIjpoPXQ/aC1iOmgrYjticmVhaztkZWZhdWx0Omg9dD9oK2I6aC1ifWg9di5tb2QoaCxyLmdldExlbmd0aCgpKSxzPT09Im1haW50YWluIiYmZj91W18rK109YS5nZXRDb2RlUG9pbnRBdChoKTp1W18rK109ci5nZXRDb2RlUG9pbnRBdChoKSxvPT09ImF1dG9rZXkiJiYocD10P2Q6ci5nZXRDb2RlUG9pbnRBdChoKSxsPXkuam9pbihbbCx5LndyYXAoW3BdKS50b0xvd2VyQ2FzZSgpXSwiIikpLFMrK31lbHNlIG4mJih1W18rK109ZCk7cmV0dXJuIHUuc2xpY2UoMCxfKX1zZXR0aW5nVmFsdWVEaWRDaGFuZ2UoZSx0KXtzd2l0Y2goZS5nZXROYW1lKCkpe2Nhc2UidmFyaWFudCI6dGhpcy5nZXRTZXR0aW5nKCJrZXkiKS5zZXRWaXNpYmxlKHQhPT0idHJpdGhlbWl1cy1jaXBoZXIiKSx0aGlzLmdldFNldHRpbmcoImtleU1vZGUiKS5zZXRWaXNpYmxlKHQhPT0idHJpdGhlbWl1cy1jaXBoZXIiKTticmVhaztjYXNlImFscGhhYmV0Ijp0aGlzLmdldFNldHRpbmcoImtleSIpLnNldFdoaXRlbGlzdENoYXJzKHQpO2JyZWFrO2Nhc2UiY2FzZVN0cmF0ZWd5Ijp0aGlzLmdldFNldHRpbmcoImFscGhhYmV0Iikuc2V0Q2FzZVNlbnNpdGl2aXR5KHQ9PT0ic3RyaWN0IiksdGhpcy5nZXRTZXR0aW5nKCJrZXkiKS5zZXRDYXNlU2Vuc2l0aXZpdHkodD09PSJzdHJpY3QiKTticmVha319fWxldCBhdD1udWxsO2NsYXNzIERlIGV4dGVuZHMgSXR7Y29uc3RydWN0b3IoKXtzdXBlcigpLFtWcyxFaSxucyxncyxmcyxBaSxRLENpLEosd3MsTSxMaSxyaSxicyxZdCx6cyxnaSxjaSxjcyxvZSxpaSx2aSxKaSx4cyxrcyxmaSxiaSx1aSxfaSwkcyxCcyxscywkdCxHaSxSLHVzLHRlLFVpXS5mb3JFYWNoKHRoaXMucmVnaXN0ZXIuYmluZCh0aGlzKSl9cmVnaXN0ZXIoZSl7Y29uc3QgdD1lLmdldE1ldGEoKS5uYW1lO3JldHVybiBzdXBlci5yZWdpc3Rlcih0LGUpfWdldE1ldGEoZSl7cmV0dXJuIHRoaXMuZ2V0SW52b2thYmxlKGUpLmdldE1ldGEoKX1nZXRMaWJyYXJ5KCl7cmV0dXJuIHRoaXMuZ2V0SWRlbnRpZmllcnMoKS5tYXAoZT0+dGhpcy5nZXRNZXRhKGUpKX1zdGF0aWMgZ2V0SW5zdGFuY2UoKXtyZXR1cm4gYXQ9PT1udWxsJiYoYXQ9bmV3IERlKSxhdH19Y29uc3QgQXM9Jzxzdmcgdmlld0JveD0iMCAwIDE2IDE2Ij48cG9seWdvbiBwb2ludHM9IjE1IDIuNDEgMTMuNTkgMSA4IDYuNTkgMi40MSAxIDEgMi40MSA2LjU5IDggMSAxMy41OSAyLjQxIDE1IDggOS40MSAxMy41OSAxNSAxNSAxMy41OSA5LjQxIDgiLz48L3N2Zz4nO2NsYXNzIFRzIGV4dGVuZHMgbXtjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMuX3RpdGxlPWUsdGhpcy5fJHRyaWdnZXI9bnVsbCx0aGlzLl92aXNpYmxlPSExLHRoaXMuX3ZhbHVlPW51bGwsdGhpcy5fZmluaXNoQ2FsbGJhY2s9bnVsbCx0aGlzLl9jYW5jZWxDYWxsYmFjaz1udWxsLHRoaXMuX2tleVVwSGFuZGxlcj10aGlzLmtleURpZFByZXNzLmJpbmQodGhpcyksdGhpcy5fJG91dGVyPW51bGwsdGhpcy5fJGRpYWxvZz1udWxsfWlzVmlzaWJsZSgpe3JldHVybiB0aGlzLl92aXNpYmxlfXNldFZpc2libGUoZT0hMCx0PSExKXtpZih0aGlzLl92aXNpYmxlIT09ZSl7dGhpcy5fdmlzaWJsZT1lO2NvbnN0IGk9dGhpcy5nZXRFbGVtZW50KCk7ZSYmKGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaSksdGhpcy5fJHRyaWdnZXI9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7Y29uc3Qgcz10aGlzLl8kZGlhbG9nLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtlP3RoaXMuXyRkaWFsb2cuc3R5bGUuaGVpZ2h0PSIwcHgiOih0aGlzLl8kZGlhbG9nLnN0eWxlLmhlaWdodD1gJHtzfXB4YCx0aGlzLl8kb3V0ZXIuc3R5bGUuaGVpZ2h0PWAke3N9cHhgKSxpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGkuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsKCk9PntzZXRUaW1lb3V0KHRoaXMudmlzaWJpbGl0eURpZENoYW5nZS5iaW5kKHRoaXMsZSx0KSwxMDApfSx7b25jZTohMH0pLGU/KGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgibW9kYWwtdmlzaWJsZSIpLGkuY2xhc3NMaXN0LmFkZCgibW9kYWwtLXZpc2libGUiKSx0aGlzLl8kZGlhbG9nLnN0eWxlLmhlaWdodD1gJHtzfXB4YCx0aGlzLl9rZXlVcEhhbmRsZXImJmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIix0aGlzLl9rZXlVcEhhbmRsZXIpKTooZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCJtb2RhbC12aXNpYmxlIiksaS5jbGFzc0xpc3QucmVtb3ZlKCJtb2RhbC0tdmlzaWJsZSIpLHRoaXMuXyRkaWFsb2cuc3R5bGUuaGVpZ2h0PSIwcHgiLHRoaXMuX2tleVVwSGFuZGxlciYmZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLHRoaXMuX2tleVVwSGFuZGxlcikpfXJldHVybiB0aGlzfXZpc2liaWxpdHlEaWRDaGFuZ2UoZSx0KXtlPyh0aGlzLl8kZGlhbG9nLnJlbW92ZUF0dHJpYnV0ZSgic3R5bGUiKSx0aGlzLmdldEVsZW1lbnQoKS5mb2N1cygpKTooc2V0VGltZW91dCgoKT0+e3RoaXMuXyRkaWFsb2cucmVtb3ZlQXR0cmlidXRlKCJzdHlsZSIpLHRoaXMuXyRvdXRlci5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIik7Y29uc3QgaT10aGlzLmdldEVsZW1lbnQoKTtpLnBhcmVudE5vZGUhPT1udWxsJiZpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaSl9LDEwMCksdD09PSExJiZ0aGlzLl9maW5pc2hDYWxsYmFjayE9PW51bGw/dGhpcy5fZmluaXNoQ2FsbGJhY2sodGhpcy5fdmFsdWUpOnQ9PT0hMCYmdGhpcy5fY2FuY2VsQ2FsbGJhY2shPT1udWxsJiZ0aGlzLl9jYW5jZWxDYWxsYmFjaygpLHRoaXMuXyR0cmlnZ2VyJiYodGhpcy5fJHRyaWdnZXIuZm9jdXMoKSx0aGlzLl8kdHJpZ2dlcj1udWxsKSx0aGlzLl9maW5pc2hDYWxsYmFjaz1udWxsLHRoaXMuX2NhbmNlbENhbGxiYWNrPW51bGwpfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMuX3ZhbHVlfXNldFZhbHVlKGUpe3JldHVybiB0aGlzLl92YWx1ZSE9PWUmJih0aGlzLl92YWx1ZT1lLHRoaXMudmFsdWVEaWRDaGFuZ2UoZSkpLHRoaXN9dmFsdWVEaWRDaGFuZ2UoZSl7fXByb21wdChlPXZvaWQgMCl7cmV0dXJuIGUhPT12b2lkIDAmJnRoaXMuc2V0VmFsdWUoZSksbmV3IFByb21pc2UoKHQsaSk9Pnt0aGlzLl9maW5pc2hDYWxsYmFjaz10LHRoaXMuX2NhbmNlbENhbGxiYWNrPWksdGhpcy5vcGVuKCl9KX1vcGVuKCl7cmV0dXJuIHRoaXMuc2V0VmlzaWJsZSghMCl9Y2FuY2VsKCl7cmV0dXJuIHRoaXMuc2V0VmlzaWJsZSghMSwhMCl9ZmluaXNoKGU9dm9pZCAwKXtyZXR1cm4gZSE9PXZvaWQgMCYmdGhpcy5zZXRWYWx1ZShlKSx0aGlzLnNldFZpc2libGUoITEsITEpfXJlbmRlcigpe3JldHVybiB0aGlzLl8kZGlhbG9nPXRoaXMucmVuZGVyRGlhbG9nKCksdGhpcy5fJG91dGVyPW0uY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJtb2RhbF9fb3V0ZXIifSxbdGhpcy5fJGRpYWxvZ10pLG0uY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJtb2RhbCIscm9sZToiZGlhbG9nIix0YWJJbmRleDotMX0sW20uY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJtb2RhbF9fYmFja2Ryb3AifSksbS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6Im1vZGFsX19zY3JvbGxhYmxlIixyb2xlOiJkb2N1bWVudCIsb25DbGljazplPT57ZS50YXJnZXQ9PT1lLmN1cnJlbnRUYXJnZXQmJihlLnByZXZlbnREZWZhdWx0KCksdGhpcy5jYW5jZWwoKSl9fSxbdGhpcy5fJG91dGVyXSldKX1yZW5kZXJEaWFsb2coKXtyZXR1cm4gbS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6Im1vZGFsX19kaWFsb2cifSxbdGhpcy5yZW5kZXJIZWFkZXIoKSx0aGlzLnJlbmRlckNvbnRlbnQoKV0pfXJlbmRlckhlYWRlcigpe2NvbnN0IGU9bS5jcmVhdGVFbGVtZW50KCJidXR0b24iLHtjbGFzc05hbWU6Im1vZGFsX19idG4tY2xvc2UiLG9uQ2xpY2s6dD0+e3QucHJldmVudERlZmF1bHQoKSx0aGlzLmNhbmNlbCgpfX0pO3JldHVybiBlLmlubmVySFRNTD1BcyxtLmNyZWF0ZUVsZW1lbnQoImhlYWRlciIse2NsYXNzTmFtZToibW9kYWxfX2hlYWRlciJ9LFttLmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6Im1vZGFsX190aXRsZSJ9LHRoaXMuX3RpdGxlKSxlXSl9cmVuZGVyQ29udGVudCgpe31rZXlEaWRQcmVzcyhlKXtlLmtleUNvZGU9PT0yNyYmKGUucHJldmVudERlZmF1bHQoKSx0aGlzLmNhbmNlbCgpKX19Y2xhc3MgUHMgZXh0ZW5kcyBUc3tjb25zdHJ1Y3RvcihlKXtzdXBlcigiTGlicmFyeSIpLHRoaXMuX2xpYnJhcnk9ZSx0aGlzLl9maWx0ZXJlZExpYnJhcnk9ZSx0aGlzLl9jYXRlZ29yaWVzPXt9fWNsZWFyRmlsdGVyKCl7cmV0dXJuIHRoaXMuX2ZpbHRlcmVkTGlicmFyeT10aGlzLl9saWJyYXJ5LHRoaXMucmVmcmVzaCgpLHRoaXN9YXBwbHlGaWx0ZXIoZSl7cmV0dXJuIHRoaXMuX2ZpbHRlcmVkTGlicmFyeT10aGlzLl9saWJyYXJ5LmZpbHRlcihlKSx0aGlzLnJlZnJlc2goKSx0aGlzfXJlbmRlcigpe2NvbnN0IGU9c3VwZXIucmVuZGVyKCk7cmV0dXJuIGUuY2xhc3NMaXN0LmFkZCgibW9kYWwtbGlicmFyeSIpLGV9cmVuZGVyQ29udGVudCgpe3JldHVybiBtLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToibW9kYWxfX2NvbnRlbnQifSxbdGhpcy5yZW5kZXJCcmlja3MoKV0pfXJlbmRlckJyaWNrcygpe2NvbnN0IGU9W10sdD1bXTtyZXR1cm4gdGhpcy5fZmlsdGVyZWRMaWJyYXJ5LmZvckVhY2goaT0+e2NvbnN0IHM9ZS5pbmRleE9mKGkuY2F0ZWdvcnkpO3M9PT0tMT8oZS5wdXNoKGkuY2F0ZWdvcnkpLHQucHVzaChbaV0pKTp0W3NdLnB1c2goaSl9KSxtLmNyZWF0ZUVsZW1lbnQoInVsIix7Y2xhc3NOYW1lOiJtb2RhbC1saWJyYXJ5X19jYXRlZ29yaWVzIn0sZS5tYXAoKGkscyk9Pm0uY3JlYXRlRWxlbWVudCgibGkiLHtjbGFzc05hbWU6Im1vZGFsLWxpYnJhcnlfX2NhdGVnb3J5In0sW20uY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZToibW9kYWwtbGlicmFyeV9fY2F0ZWdvcnktdGl0bGUifSxpKSxtLmNyZWF0ZUVsZW1lbnQoInVsIix7Y2xhc3NOYW1lOiJtb2RhbC1saWJyYXJ5X19icmlja3MifSx0W3NdLm1hcCh0aGlzLnJlbmRlckJyaWNrLmJpbmQodGhpcykpKV0pKSl9cmVuZGVyQnJpY2soZSl7cmV0dXJuIG0uY3JlYXRlRWxlbWVudCgibGkiLHt9LFttLmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIse2NsYXNzTmFtZToibW9kYWwtbGlicmFyeV9fYnJpY2sgbW9kYWwtbGlicmFyeV9fYnJpY2stLSIrZS50eXBlLG9uQ2xpY2s6dD0+e3QucHJldmVudERlZmF1bHQoKSx0aGlzLmZpbmlzaChlLm5hbWUpfX0sW20uY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZToibW9kYWwtbGlicmFyeV9fYnJpY2stdGl0bGUifSxlLnRpdGxlKV0pXSl9fWNvbnN0IEZzPTFlMyxqPSJwaXBlX19zY3JvbGwtaGFuZGxlLS1kaXNhYmxlZCIsRmU9ImFwcGxpY2F0aW9uL3ZuZC5jcnlwdGlpLmJyaWNrK2pzb24iO2NsYXNzIERzIGV4dGVuZHMgbXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fJHNjcm9sbGFibGU9bnVsbCx0aGlzLl8kY29udGVudD1udWxsLHRoaXMuX2RyYWdnaW5nQnJpY2tWaWV3PW51bGwsdGhpcy5fZHJhZ2dpbmdUYXJnZXRJbmRleD1udWxsLHRoaXMuXyRwaXBlUGFydHM9W10sdGhpcy5fcGlwZVBhcnRQb3NpdGlvbnM9W10sdGhpcy5fcGlwZVBhcnRJbmRleD1bXSx0aGlzLl9zY3JvbGxNYXg9MCx0aGlzLl9zY3JvbGxQb3NpdGlvbj0wLHRoaXMuX3Njcm9sbEhhbmRsZUluZGV4PW51bGwsdGhpcy5fc2Nyb2xsSGFuZGxlU3RhcnRQb3NpdGlvbj1udWxsLHRoaXMuX3Njcm9sbEhhbmRsZVN0YXJ0VGltZT1udWxsfXJlbmRlcigpe3RoaXMuXyRjb250ZW50PW0uY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJwaXBlX19jb250ZW50In0pLHRoaXMuXyRzY3JvbGxIYW5kbGVMZWZ0PW0uY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJwaXBlX19zY3JvbGwtaGFuZGxlIHBpcGVfX3Njcm9sbC1oYW5kbGUtLWxlZnQgcGlwZV9fc2Nyb2xsLWhhbmRsZS0tZGlzYWJsZWQiLG9uTW91c2VFbnRlcjp0aGlzLnNjcm9sbEhhbmRsZURpZFN0YXJ0LmJpbmQodGhpcywwKSxvbkRyYWdFbnRlcjp0aGlzLnNjcm9sbEhhbmRsZURpZFN0YXJ0LmJpbmQodGhpcywwKSxvbk1vdXNlTGVhdmU6dGhpcy5zY3JvbGxIYW5kbGVEaWRTdG9wLmJpbmQodGhpcyksb25EcmFnTGVhdmU6dGhpcy5zY3JvbGxIYW5kbGVEaWRTdG9wLmJpbmQodGhpcyl9KSx0aGlzLl8kc2Nyb2xsSGFuZGxlUmlnaHQ9bS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InBpcGVfX3Njcm9sbC1oYW5kbGUgcGlwZV9fc2Nyb2xsLWhhbmRsZS0tcmlnaHQiLG9uTW91c2VFbnRlcjp0aGlzLnNjcm9sbEhhbmRsZURpZFN0YXJ0LmJpbmQodGhpcywxKSxvbkRyYWdFbnRlcjp0aGlzLnNjcm9sbEhhbmRsZURpZFN0YXJ0LmJpbmQodGhpcywxKSxvbk1vdXNlTGVhdmU6dGhpcy5zY3JvbGxIYW5kbGVEaWRTdG9wLmJpbmQodGhpcyksb25EcmFnTGVhdmU6dGhpcy5zY3JvbGxIYW5kbGVEaWRTdG9wLmJpbmQodGhpcyl9KTtsZXQgZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIucGlwZSIpO3JldHVybiBlPT09bnVsbCYmKGU9bS5jcmVhdGVFbGVtZW50KCJkaXYiKSxlLmNsYXNzTGlzdC5hZGQoInBpcGUiKSksZS5vbmRyb3A9dGhpcy5kcmFnRGlkRHJvcC5iaW5kKHRoaXMpLGUub25kcmFnZW50ZXI9dGhpcy5kcmFnRGlkRW50ZXJQaXBlLmJpbmQodGhpcyksZS5vbmRyYWdvdmVyPXRoaXMuZHJhZ0RpZE92ZXJQaXBlLmJpbmQodGhpcyksdGhpcy5fJHNjcm9sbGFibGU9ZS5xdWVyeVNlbGVjdG9yKCIucGlwZV9fc2Nyb2xsYWJsZSIpLHRoaXMuXyRzY3JvbGxhYmxlPT09bnVsbCYmKHRoaXMuXyRzY3JvbGxhYmxlPW0uY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJwaXBlX19zY3JvbGxhYmxlIn0pKSx0aGlzLl8kc2Nyb2xsYWJsZS5hcHBlbmRDaGlsZCh0aGlzLl8kY29udGVudCksdGhpcy5fJHNjcm9sbGFibGUuYXBwZW5kQ2hpbGQodGhpcy5fJHNjcm9sbEhhbmRsZUxlZnQpLHRoaXMuXyRzY3JvbGxhYmxlLmFwcGVuZENoaWxkKHRoaXMuXyRzY3JvbGxIYW5kbGVSaWdodCksZS5hcHBlbmRDaGlsZCh0aGlzLl8kc2Nyb2xsYWJsZSksZS5hZGRFdmVudExpc3RlbmVyKCJ3aGVlbCIsdGhpcy5tb3VzZURpZFdoZWVsLmJpbmQodGhpcykpLGV9YXBwZW5kU3Vidmlld0VsZW1lbnQoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBhZT8odGhpcy51cGRhdGUoKSx0aGlzKTpzdXBlci5hcHBlbmRTdWJ2aWV3RWxlbWVudChlKX1yZW1vdmVTdWJ2aWV3RWxlbWVudChlKXtyZXR1cm4gc3VwZXIucmVtb3ZlU3Vidmlld0VsZW1lbnQoZSksZSBpbnN0YW5jZW9mIGFlJiZ0aGlzLnVwZGF0ZSgpLHRoaXN9dXBkYXRlKCl7Y29uc3QgZT10aGlzLmdldE1vZGVsKCkuZ2V0QnJpY2tzKCksdD1lLm1hcChyPT5yLmdldFZpZXcoKSk7dGhpcy5nZXRFbGVtZW50KCk7Y29uc3QgaT10aGlzLl8kY29udGVudDt0LmZvckVhY2gocj0+e2NvbnN0IGE9ci5nZXRFbGVtZW50KCk7YS5wYXJlbnROb2RlJiZhLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYSl9KSxpLmlubmVySFRNTD0iIix0aGlzLl8kcGlwZVBhcnRzPVtdLHRoaXMuX3BpcGVQYXJ0SW5kZXg9W107bGV0IHMsbj1bXTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKylpZighZVtyXS5pc0hpZGRlbigpKXM9dGhpcy5fY3JlYXRlUGlwZVBhcnQociksdGhpcy5fJHBpcGVQYXJ0cy5wdXNoKHMpLHRoaXMuX3BpcGVQYXJ0SW5kZXgucHVzaChyKSxpLmFwcGVuZENoaWxkKHMpLGkuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlQnJpY2tQYXJ0KHRbcl0pKTtlbHNlIGlmKG4ucHVzaChlW3JdKSxyKzE9PT1lLmxlbmd0aHx8IWVbcisxXS5pc0hpZGRlbigpKXtjb25zdCBhPXItbi5sZW5ndGgrMTtzPXRoaXMuX2NyZWF0ZVBpcGVQYXJ0KGEpLHRoaXMuXyRwaXBlUGFydHMucHVzaChzKSx0aGlzLl9waXBlUGFydEluZGV4LnB1c2goYSksaS5hcHBlbmRDaGlsZChzKSxpLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZUNvbGxhcHNlZFBhcnQobikpLG49W119cmV0dXJuIHM9dGhpcy5fY3JlYXRlUGlwZVBhcnQodC5sZW5ndGgpLHRoaXMuXyRwaXBlUGFydHMucHVzaChzKSx0aGlzLl9waXBlUGFydEluZGV4LnB1c2godC5sZW5ndGgpLGkuYXBwZW5kQ2hpbGQocyksdGhpcy5sYXlvdXQoKSx0aGlzfV9jcmVhdGVQaXBlUGFydChlKXtyZXR1cm4gbS5jcmVhdGVFbGVtZW50KCJidXR0b24iLHtjbGFzc05hbWU6InBpcGVfX3BhcnQtcGlwZSIsb25DbGljazp0PT57dGhpcy5nZXRNb2RlbCgpLnZpZXdBZGRCdXR0b25EaWRDbGljayh0aGlzLGUpLHQucHJldmVudERlZmF1bHQoKX19LFttLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToicGlwZV9fYnRuLWFkZCJ9LCJBZGQgZW5jb2RlciBvciB2aWV3ZXIiKSxtLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToicGlwZV9fZHJvcC1oYW5kbGUifSldKX1fY3JlYXRlQnJpY2tQYXJ0KGUpe2NvbnN0IHQ9ZS5nZXRNb2RlbCgpaW5zdGFuY2VvZiB3PyJlbmNvZGVyIjoidmlld2VyIjtyZXR1cm4gbS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6YHBpcGVfX3BhcnQtYnJpY2sgcGlwZV9fcGFydC1icmljay0tJHt0fWAsZHJhZ2dhYmxlOiEwLG9uTW91c2VEb3duOnRoaXMuYnJpY2tEcmFnV2lsbFN0YXJ0LmJpbmQodGhpcyxlKSxvbkRyYWdTdGFydDp0aGlzLmJyaWNrRHJhZ0RpZFN0YXJ0LmJpbmQodGhpcyxlKSxvbkRyYWdFbmQ6dGhpcy5icmlja0RyYWdEaWRFbmQuYmluZCh0aGlzLGUpfSxlLmdldEVsZW1lbnQoKSl9X2NyZWF0ZUNvbGxhcHNlZFBhcnQoZSl7cmV0dXJuIG0uY3JlYXRlRWxlbWVudCgiYnV0dG9uIix7Y2xhc3NOYW1lOiJwaXBlX19wYXJ0LWNvbGxhcHNlZCIsb25DbGljazp0PT57dGhpcy5nZXRNb2RlbCgpLnZpZXdIaWRkZW5Ccmlja0dyb3VwRGlkQ2xpY2sodGhpcyxlKSx0LnByZXZlbnREZWZhdWx0KCl9fSxlLm1hcCgoKT0+bS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InBpcGVfX3BhcnQtY29sbGFwc2VkLWZvbGQifSkpKX1pc0JyaWNrRHJhZ0V2ZW50KGUpe2NvbnN0IHQ9ZS5kYXRhVHJhbnNmZXIudHlwZXM7cmV0dXJuIHQuY29udGFpbnMhPT12b2lkIDA/dC5jb250YWlucyhGZSk6dC5pbmRleE9mKEZlKSE9PS0xfWlzRmllbGRNb3VzZUV2ZW50KGUpe2NvbnN0IHQ9ZS50YXJnZXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm5bInRleHRhcmVhIiwiaW5wdXQiXS5pbmRleE9mKHQpIT09LTF9YnJpY2tEcmFnV2lsbFN0YXJ0KGUsdCl7aWYodGhpcy5pc0ZpZWxkTW91c2VFdmVudCh0KXx8IWUuZ2V0TW9kZWwoKS5pc1ZhbGlkKCkpe2NvbnN0IGk9ZS5nZXRFbGVtZW50KCkucGFyZW50Tm9kZTtpJiYoaS5kcmFnZ2FibGU9ITEsc2V0VGltZW91dCgoKT0+e2kuZHJhZ2dhYmxlPSEwfSw1MDApKX19YnJpY2tEcmFnRGlkU3RhcnQoZSx0KXtpZih0aGlzLmlzRmllbGRNb3VzZUV2ZW50KHQpfHwhZS5nZXRNb2RlbCgpLmlzVmFsaWQoKSlyZXR1cm47dGhpcy5fZHJhZ2dpbmdCcmlja1ZpZXc9ZTtjb25zdCBpPUpTT04uc3RyaW5naWZ5KGUuZ2V0TW9kZWwoKS5zZXJpYWxpemUoKSk7dC5kYXRhVHJhbnNmZXIuc2V0RGF0YShGZSxpKSx0LmRhdGFUcmFuc2Zlci5zZXREYXRhKCJhcHBsaWNhdGlvbi9qc29uIixpKSx0LmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkPSJjb3B5TW92ZSJ9YnJpY2tEcmFnRGlkRW5kKGUsdCl7dGhpcy5fZHJhZ2dpbmdCcmlja1ZpZXc9bnVsbCx0aGlzLnNldERyYWdnaW5nUGlwZVBhcnRJbmRleChudWxsKX1kcmFnRGlkRW50ZXJQaXBlKGUpe3RoaXMuaXNCcmlja0RyYWdFdmVudChlKSYmZS5wcmV2ZW50RGVmYXVsdCgpfWRyYWdEaWRPdmVyUGlwZShlKXtpZih0aGlzLmlzQnJpY2tEcmFnRXZlbnQoZSkpe2UucHJldmVudERlZmF1bHQoKTtjb25zdCB0PWUucGFnZVgrdGhpcy5fc2Nyb2xsUG9zaXRpb24saT1lLnBhZ2VZO2xldCBzPW51bGwsbj0wO3RoaXMuX3BpcGVQYXJ0UG9zaXRpb25zLmZvckVhY2goKHIsYSk9Pntjb25zdCBsPU1hdGguc3FydChNYXRoLnBvdyh0LXIueCwyKStNYXRoLnBvdyhpLXIueSwyKSk7KHM9PT1udWxsfHxsPHMpJiYocz1sLG49YSl9KSx0aGlzLnNldERyYWdnaW5nUGlwZVBhcnRJbmRleChuKX19ZHJhZ0RpZERyb3AoZSl7aWYodGhpcy5pc0JyaWNrRHJhZ0V2ZW50KGUpKXtlLnByZXZlbnREZWZhdWx0KCk7Y29uc3QgdD1lLmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkPT09ImNvcHkiLGk9dGhpcy5fcGlwZVBhcnRJbmRleFt0aGlzLl9kcmFnZ2luZ1RhcmdldEluZGV4XTtpZih0aGlzLnNldERyYWdnaW5nUGlwZVBhcnRJbmRleChudWxsKSx0aGlzLl9kcmFnZ2luZ0JyaWNrVmlldyE9PW51bGwpe2NvbnN0IHM9dGhpcy5fZHJhZ2dpbmdCcmlja1ZpZXcuZ2V0TW9kZWwoKTt0aGlzLmdldE1vZGVsKCkudmlld0JyaWNrRGlkRHJvcCh0aGlzLGkscyx0KX1lbHNle2NvbnN0IHM9SlNPTi5wYXJzZShlLmRhdGFUcmFuc2Zlci5nZXREYXRhKEZlKSk7dGhpcy5nZXRNb2RlbCgpLnZpZXdCcmlja0RpZERyb3AodGhpcyxpLHMsdCl9fX1zZXREcmFnZ2luZ1BpcGVQYXJ0SW5kZXgoZSl7dGhpcy5fZHJhZ2dpbmdUYXJnZXRJbmRleCE9PWUmJih0aGlzLl9kcmFnZ2luZ1RhcmdldEluZGV4IT09bnVsbCYmdGhpcy5fJHBpcGVQYXJ0c1t0aGlzLl9kcmFnZ2luZ1RhcmdldEluZGV4XS5jbGFzc0xpc3QucmVtb3ZlKCJwaXBlX19wYXJ0LXBpcGUtLWRyYWdnaW5nIiksdGhpcy5fZHJhZ2dpbmdUYXJnZXRJbmRleD1lLGUhPT1udWxsPyh0aGlzLl8kcGlwZVBhcnRzW3RoaXMuX2RyYWdnaW5nVGFyZ2V0SW5kZXhdLmNsYXNzTGlzdC5hZGQoInBpcGVfX3BhcnQtcGlwZS0tZHJhZ2dpbmciKSx0aGlzLmdldEVsZW1lbnQoKS5jbGFzc0xpc3QuYWRkKCJwaXBlLS1kcmFnZ2luZyIpKTp0aGlzLmdldEVsZW1lbnQoKS5jbGFzc0xpc3QucmVtb3ZlKCJwaXBlLS1kcmFnZ2luZyIpKX1tb3VzZURpZFdoZWVsKGUpe2NvbnN0IHQ9ZS5kZWx0YVgsaT1lLmRlbHRhWTtNYXRoLmFicyh0KTw9TWF0aC5hYnMoaSl8fChlLnByZXZlbnREZWZhdWx0KCksdGhpcy5zY3JvbGxUbyh0aGlzLl9zY3JvbGxQb3NpdGlvbit0KSl9c2Nyb2xsSGFuZGxlRGlkU3RhcnQoZSl7dGhpcy5fc2Nyb2xsSGFuZGxlSW5kZXg9ZSx0aGlzLl9zY3JvbGxIYW5kbGVTdGFydFBvc2l0aW9uPXRoaXMuX3Njcm9sbFBvc2l0aW9uLHRoaXMuX3Njcm9sbEhhbmRsZVN0YXJ0VGltZT1uZXcgRGF0ZSgpLmdldFRpbWUoKSx3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuc2Nyb2xsSGFuZGxlRGlkU2Nyb2xsLmJpbmQodGhpcykpfXNjcm9sbEhhbmRsZURpZFNjcm9sbCgpe2lmKHRoaXMuX3Njcm9sbEhhbmRsZUluZGV4PT09bnVsbClyZXR1cm47Y29uc3QgZT10aGlzLl9zY3JvbGxIYW5kbGVJbmRleD09PTA/LTE6MSx0PShuZXcgRGF0ZSgpLmdldFRpbWUoKS10aGlzLl9zY3JvbGxIYW5kbGVTdGFydFRpbWUpLzFlMyxpPWUqTWF0aC5wb3codCwyKSpGczt0aGlzLnNjcm9sbFRvKHRoaXMuX3Njcm9sbEhhbmRsZVN0YXJ0UG9zaXRpb24raSksd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLnNjcm9sbEhhbmRsZURpZFNjcm9sbC5iaW5kKHRoaXMpKX1zY3JvbGxIYW5kbGVEaWRTdG9wKCl7dGhpcy5fc2Nyb2xsSGFuZGxlSW5kZXg9bnVsbCx0aGlzLl9zY3JvbGxIYW5kbGVTdGFydFBvc2l0aW9uPW51bGwsdGhpcy5fc2Nyb2xsSGFuZGxlU3RhcnRUaW1lPW51bGx9bGF5b3V0KCl7c3VwZXIubGF5b3V0KCksdGhpcy5fc2Nyb2xsTWF4PXRoaXMuXyRjb250ZW50Lm9mZnNldFdpZHRoLXRoaXMuXyRzY3JvbGxhYmxlLm9mZnNldFdpZHRoLHRoaXMuc2Nyb2xsVG8odGhpcy5fc2Nyb2xsUG9zaXRpb24pLHRoaXMuX3Njcm9sbFBvc2l0aW9uPT09MD90aGlzLl8kc2Nyb2xsSGFuZGxlTGVmdC5jbGFzc0xpc3QuYWRkKGopOnRoaXMuXyRzY3JvbGxIYW5kbGVMZWZ0LmNsYXNzTGlzdC5yZW1vdmUoaiksdGhpcy5fc2Nyb2xsUG9zaXRpb249PT10aGlzLl9zY3JvbGxNYXg/dGhpcy5fJHNjcm9sbEhhbmRsZVJpZ2h0LmNsYXNzTGlzdC5hZGQoaik6dGhpcy5fJHNjcm9sbEhhbmRsZVJpZ2h0LmNsYXNzTGlzdC5yZW1vdmUoaik7Y29uc3QgZT13aW5kb3cuc2Nyb2xsWTt0aGlzLl9waXBlUGFydFBvc2l0aW9ucz10aGlzLl8kcGlwZVBhcnRzLm1hcCh0PT57Y29uc3QgaT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt4OmkubGVmdCtpLndpZHRoKi41K3RoaXMuX3Njcm9sbFBvc2l0aW9uLHk6aS50b3AraS5oZWlnaHQqLjUrZX19KX1zY3JvbGxUbyhlPTApe3JldHVybiBlPXBhcnNlSW50KGUpLGU9TWF0aC5tYXgoTWF0aC5taW4oZSx0aGlzLl9zY3JvbGxNYXgpLDApLHRoaXMuX3Njcm9sbFBvc2l0aW9uIT09ZSYmKGU9PT0wPyh0aGlzLl8kc2Nyb2xsSGFuZGxlTGVmdC5jbGFzc0xpc3QuYWRkKGopLHRoaXMuc2Nyb2xsSGFuZGxlRGlkU3RvcCgpKTp0aGlzLl9zY3JvbGxQb3NpdGlvbj09PTAmJnRoaXMuXyRzY3JvbGxIYW5kbGVMZWZ0LmNsYXNzTGlzdC5yZW1vdmUoaiksZT09PXRoaXMuX3Njcm9sbE1heD8odGhpcy5fJHNjcm9sbEhhbmRsZVJpZ2h0LmNsYXNzTGlzdC5hZGQoaiksdGhpcy5zY3JvbGxIYW5kbGVEaWRTdG9wKCkpOnRoaXMuX3Njcm9sbFBvc2l0aW9uPT09dGhpcy5fc2Nyb2xsTWF4JiZ0aGlzLl8kc2Nyb2xsSGFuZGxlUmlnaHQuY2xhc3NMaXN0LnJlbW92ZShqKSx0aGlzLl8kY29udGVudC5zdHlsZS50cmFuc2Zvcm09ZT4wP2B0cmFuc2xhdGUoJHstZX1weCwgMClgOiIiLHRoaXMuX3Njcm9sbFBvc2l0aW9uPWUpLHRoaXN9fWNsYXNzIE5lIGV4dGVuZHMgbGV7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX3ZpZXdQcm90b3R5cGU9RHMsdGhpcy5fYnJpY2tGYWN0b3J5PW51bGwsdGhpcy5fc2VydmljZT1udWxsLHRoaXMuX2lkPW51bGwsdGhpcy5fdXJsPW51bGwsdGhpcy5fdGl0bGU9bnVsbCx0aGlzLl9kZXNjcmlwdGlvbj1udWxsLHRoaXMuX2JyaWNrcz1bXSx0aGlzLl9icmlja1N0YXRlPVtdLHRoaXMuX2J1Y2tldENvbnRlbnQ9W3kuZW1wdHkoKV0sdGhpcy5fYnVja2V0TGlzdGVuZXJzPVtbXV0sdGhpcy5fc2VsZWN0ZWRCdWNrZXQ9MCx0aGlzLl9saWJyYXJ5TW9kYWxWaWV3PW51bGx9Z2V0SWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0SWQoZSl7cmV0dXJuIHRoaXMuX2lkPWUsdGhpc31nZXRVcmwoKXtyZXR1cm4gdGhpcy5fdXJsfXNldFVybChlKXtyZXR1cm4gdGhpcy5fdXJsPWUsdGhpc31nZXRUaXRsZSgpe3JldHVybiB0aGlzLl90aXRsZX1zZXRUaXRsZShlKXtyZXR1cm4gdGhpcy5fdGl0bGU9ZSx0aGlzfWdldERlc2NyaXB0aW9uKCl7cmV0dXJuIHRoaXMuX2Rlc2NyaXB0aW9ufXNldERlc2NyaXB0aW9uKGUpe3JldHVybiB0aGlzLl9kZXNjcmlwdGlvbj1lLHRoaXN9Z2V0QnJpY2tGYWN0b3J5KCl7cmV0dXJuIHRoaXMuX2JyaWNrRmFjdG9yeX1zZXRCcmlja0ZhY3RvcnkoZSl7cmV0dXJuIHRoaXMuX2JyaWNrRmFjdG9yeT1lLHRoaXN9Z2V0U2VydmljZSgpe3JldHVybiB0aGlzLl9zZXJ2aWNlfXNldFNlcnZpY2UoZSl7cmV0dXJuIHRoaXMuX3NlcnZpY2U9ZSx0aGlzfWdldExpYnJhcnlNb2RhbFZpZXcoKXtpZih0aGlzLl9saWJyYXJ5TW9kYWxWaWV3PT09bnVsbCl7Y29uc3QgZT10aGlzLmdldEJyaWNrRmFjdG9yeSgpLmdldExpYnJhcnkoKTt0aGlzLl9saWJyYXJ5TW9kYWxWaWV3PW5ldyBQcyhlKX1yZXR1cm4gdGhpcy5fbGlicmFyeU1vZGFsVmlld31nZXRMZW5ndGgoKXtyZXR1cm4gdGhpcy5fYnJpY2tzLmxlbmd0aH1nZXRCcmlja3MoKXtyZXR1cm4gdGhpcy5fYnJpY2tzLnNsaWNlKCl9Z2V0QnJpY2soZSl7aWYoZTwwfHxlPnRoaXMuX2JyaWNrcy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJCcmljayBpbmRleCBpcyBvdXQgb2YgYm91bmRzLiIpO3JldHVybiB0aGlzLl9icmlja3NbZV19Y29udGFpbnNCcmljayhlKXtyZXR1cm4gdGhpcy5fYnJpY2tzLmluZGV4T2YoZSkhPT0tMX1hZGRCcmljayhlKXtyZXR1cm4gdGhpcy5zcGxpY2VCcmlja3MoLTEsMCxbZV0pLHRoaXN9YWRkQnJpY2tzKGUpe3JldHVybiB0aGlzLnNwbGljZUJyaWNrcygtMSwwLGUpLHRoaXN9ZHVwbGljYXRlQnJpY2soZSx0PW51bGwpe2lmKCF0aGlzLmNvbnRhaW5zQnJpY2soZSkpdGhyb3cgbmV3IEVycm9yKCJCcmljayBpcyBub3QgcGFydCBvZiB0aGUgcGlwZS4iKTtyZXR1cm4gdD09PW51bGwmJih0PXRoaXMuX2JyaWNrcy5pbmRleE9mKGUpKSx0aGlzLnNwbGljZUJyaWNrcyh0LDAsW2UuY29weSgpXSksdGhpc31tb3ZlQnJpY2soZSx0KXtjb25zdCBpPXRoaXMuX2JyaWNrcy5pbmRleE9mKGUpO2lmKGk9PT0tMSl0aHJvdyBuZXcgRXJyb3IoIkJyaWNrIGlzIG5vdCBwYXJ0IG9mIHRoZSBwaXBlLiIpO3JldHVybiB0PmkmJnQtLSx0aGlzLnNwbGljZUJyaWNrcyhpLDEpLHRoaXMuc3BsaWNlQnJpY2tzKHQsMCxbZV0pLHRoaXN9cmVtb3ZlQnJpY2soZSl7bGV0IHQ9ZTtpZihlIGluc3RhbmNlb2YgWCYmKHQ9dGhpcy5fYnJpY2tzLmluZGV4T2YoZSksdD09PS0xKSl0aHJvdyBuZXcgRXJyb3IoIkJyaWNrIGlzIG5vdCBwYXJ0IG9mIHRoZSBwaXBlIGFuZCB0aHVzIGNhbid0IGJlIHJlbW92ZWQuIik7cmV0dXJuIHRoaXMuc3BsaWNlQnJpY2tzKHQsMSksdGhpc31yZW1vdmVCcmlja3MoZSl7cmV0dXJuIGUubWFwKHQ9PntsZXQgaT10O2lmKHQgaW5zdGFuY2VvZiBYJiYoaT10aGlzLl9icmlja3MuaW5kZXhPZih0KSxpPT09LTEpKXRocm93IG5ldyBFcnJvcigiQnJpY2sgaXMgbm90IHBhcnQgb2YgdGhlIHBpcGUgYW5kIHRodXMgY2FuJ3QgYmUgcmVtb3ZlZC4iKTtyZXR1cm4gaX0pLnNvcnQoKHQsaSk9PmktdCkuZm9yRWFjaCh0PT50aGlzLnNwbGljZUJyaWNrcyh0LDEpKSx0aGlzfXJlcGxhY2VCcmljayhlLHQpe2NvbnN0IGk9dGhpcy5fYnJpY2tzLmluZGV4T2YoZSk7aWYoaT09PS0xKXRocm93IG5ldyBFcnJvcigiQ2FuJ3QgcmVwbGFjZSBhIGJyaWNrIG5vdCBiZWluZyBwYXJ0IG9mIHRoZSBwaXBlLiIpO3JldHVybiB0aGlzLnNwbGljZUJyaWNrcyhpLDEsW3RdKSx0aGlzfXNwbGljZUJyaWNrcyhlLHQsaT1bXSl7ZT1lPj0wP2U6TWF0aC5tYXgodGhpcy5fYnJpY2tzLmxlbmd0aCtlKzEsMCksdGhpcy5fYnVja2V0TGlzdGVuZXJzLm1hcChhPT4oYS5mb3JFYWNoKGw9PmwucmVqZWN0KCJQaXBlIGJyaWNrcyBoYXZlIGJlZW4gY2hhbmdlZC4iKSksW10pKSxpPWkubWFwKGE9PmEgaW5zdGFuY2VvZiBYP2E6WC5leHRyYWN0KGEsdGhpcy5nZXRCcmlja0ZhY3RvcnkoKSkpO2NvbnN0IHM9dGhpcy5fYnJpY2tzLnNwbGljZS5hcHBseSh0aGlzLl9icmlja3MsW2UsdF0uY29uY2F0KGkpKTt0aGlzLl9icmlja1N0YXRlLnNwbGljZS5hcHBseSh0aGlzLl9icmlja1N0YXRlLFtlLHRdLmNvbmNhdChpLm1hcCgoKT0+KHtzZXR0aW5nc1ZlcnNpb246MSxidXN5OiExfSkpKSk7bGV0IG49MCxyPTA7aWYoaS5mb3JFYWNoKGE9PnthLnNldFBpcGUodGhpcyksdGhpcy5oYXNWaWV3KCkmJnRoaXMuZ2V0VmlldygpLmFkZFN1YnZpZXcoYS5nZXRWaWV3KCkpLGEgaW5zdGFuY2VvZiB3JiZuKyssTi50cmlnZ2VyKCJwaXBlQWRkQnJpY2siLHtwaXBlOnRoaXMsYnJpY2s6YX0pfSkscy5mb3JFYWNoKGE9Pnt0aGlzLmhhc1ZpZXcoKSYmdGhpcy5nZXRWaWV3KCkucmVtb3ZlU3VidmlldyhhLmdldFZpZXcoKSksYS5zZXRQaXBlKG51bGwpLGEgaW5zdGFuY2VvZiB3JiZyKyssTi50cmlnZ2VyKCJwaXBlUmVtb3ZlQnJpY2siLHtwaXBlOnRoaXMsYnJpY2s6YX0pfSksbj4wfHxyPjApe2xldCBhPXRoaXMuX2JyaWNrcy5yZWR1Y2UoKGMsdSxoKT0+YysodSBpbnN0YW5jZW9mIHcmJmg8PWU/MTowKSwwKTthPT09MCYmKGE9MSk7Y29uc3QgbD1uZXcgQXJyYXkobikuZmlsbCgpLm1hcCgoKT0+eS5lbXB0eSgpKSxvPXRoaXMuX2J1Y2tldENvbnRlbnQuc3BsaWNlLmFwcGx5KHRoaXMuX2J1Y2tldENvbnRlbnQsW2Escl0uY29uY2F0KGwpKTtpZih0aGlzLl9idWNrZXRMaXN0ZW5lcnMuc3BsaWNlLmFwcGx5KHRoaXMuX2J1Y2tldExpc3RlbmVycyxbYSxyXS5jb25jYXQobC5tYXAoYz0+W10pKSksdGhpcy5fc2VsZWN0ZWRCdWNrZXQ8PWEtMSl0aGlzLl9wcm9wYWdhdGVDb250ZW50KGEtMSwhMCk7ZWxzZSBpZih0aGlzLl9zZWxlY3RlZEJ1Y2tldD09PWEmJnI9PT0xJiZuPT09MSl0aGlzLl9idWNrZXRDb250ZW50W3RoaXMuX3NlbGVjdGVkQnVja2V0XT1vWzBdLHRoaXMuX3Byb3BhZ2F0ZUNvbnRlbnQodGhpcy5fc2VsZWN0ZWRCdWNrZXQsITEpO2Vsc2UgaWYodGhpcy5fc2VsZWN0ZWRCdWNrZXQ8PWEtMStyKXRoaXMuX3NlbGVjdGVkQnVja2V0PWEtMSx0aGlzLl9wcm9wYWdhdGVDb250ZW50KHRoaXMuX3NlbGVjdGVkQnVja2V0LCEwKTtlbHNle2NvbnN0IGM9bi1yO3RoaXMuX3NlbGVjdGVkQnVja2V0Kz1jLHRoaXMuX3Byb3BhZ2F0ZUNvbnRlbnQoYStuLCExKX19ZWxzZSBpLmZvckVhY2goYT0+dGhpcy5fdHJpZ2dlclZpZXdlclZpZXcoYSkpO3JldHVybiB0aGlzLmhhc1ZpZXcoKSYmdGhpcy5nZXRWaWV3KCkubGF5b3V0KCksc31nZXRCdWNrZXRMZW5ndGgoKXtyZXR1cm4gdGhpcy5fYnVja2V0Q29udGVudC5sZW5ndGh9Z2V0Q29udGVudChlPTAsdD0hMCl7aWYoZT49dGhpcy5fYnVja2V0Q29udGVudC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBCdWNrZXQgaW5kZXggJHtlfSBpcyBvdXQgb2YgYm91bmRzLmApO3JldHVybiB0JiZ0aGlzLmlzQnVzeSgpP25ldyBQcm9taXNlKChpLHMpPT57dGhpcy5fYnVja2V0TGlzdGVuZXJzW2VdLnB1c2goe3Jlc29sdmU6aSxyZWplY3Q6c30pfSk6dGhpcy5fYnVja2V0Q29udGVudFtlXX1zZXRDb250ZW50KGUsdD0wLGk9bnVsbCl7cmV0dXJuIGU9eS53cmFwKGUpLHRoaXMuZ2V0Q29udGVudCh0LCExKS5pc0VxdWFsVG8oZSk/dGhpczoodGhpcy5fYnVja2V0Q29udGVudFt0XT1lLChpPT09bnVsbHx8aSBpbnN0YW5jZW9mIHFlKSYmKHRoaXMuX3NlbGVjdGVkQnVja2V0PXQpLHRoaXMuX3Byb3BhZ2F0ZUNvbnRlbnQodCxpKSx0aGlzKX1fcHJvcGFnYXRlQ29udGVudChlLHQ9bnVsbCl7Y29uc3R7bG93ZXJFbmNvZGVyOmksdXBwZXJFbmNvZGVyOnMsdmlld2VyczpufT10aGlzLmdldEJyaWNrc0F0dGFjaGVkVG9CdWNrZXQoZSk7cmV0dXJuIG4uZmlsdGVyKHI9PnIhPT10KS5mb3JFYWNoKHRoaXMuX3RyaWdnZXJWaWV3ZXJWaWV3LmJpbmQodGhpcykpLGkhPT1udWxsJiZ0IT09ITAmJmkhPT10JiZ0aGlzLl90cmlnZ2VyRW5jb2RlclRyYW5zbGF0aW9uKGksITEpLHMhPT1udWxsJiZ0IT09ITEmJnMhPT10JiZ0aGlzLl90cmlnZ2VyRW5jb2RlclRyYW5zbGF0aW9uKHMsITApLHRoaXN9YXN5bmMgX3RyaWdnZXJWaWV3ZXJWaWV3KGUpe2lmKHRoaXMuX2dldEJyaWNrU3RhdGUoZSwiYnVzeSIpKXJldHVybiB0aGlzO3RoaXMuX3NldEJyaWNrU3RhdGUoZSwiYnVzeSIsITApO2NvbnN0IHQ9dGhpcy5nZXRCdWNrZXRJbmRleEZvckJyaWNrKGUpLGk9dGhpcy5nZXRDb250ZW50KHQsITEpLHM9dGhpcy5fZ2V0QnJpY2tTdGF0ZShlLCJzZXR0aW5nc1ZlcnNpb24iKTtsZXQgbjt0cnl7YXdhaXQgZS52aWV3KGkpfWNhdGNoKGwpe249bH1pZighdGhpcy5jb250YWluc0JyaWNrKGUpKXJldHVybjt0aGlzLl9zZXRCcmlja1N0YXRlKGUsImJ1c3kiLCExKTtjb25zdCByPXRoaXMuX2dldEJyaWNrU3RhdGUoZSwic2V0dGluZ3NWZXJzaW9uIiksYT10aGlzLmdldEJ1Y2tldEluZGV4Rm9yQnJpY2soZSk7aWYoKCF0aGlzLmdldENvbnRlbnQoYSwhMSkuaXNFcXVhbFRvKGkpfHxzIT09cikmJnRoaXMuX3RyaWdnZXJWaWV3ZXJWaWV3KGUpLHRoaXMuYnJpY2tEaWRGaW5pc2goZSxuKSxuJiYhKG4gaW5zdGFuY2VvZiB4KSl0aHJvdyBufWFzeW5jIF90cmlnZ2VyRW5jb2RlclRyYW5zbGF0aW9uKGUsdCl7aWYodGhpcy5fZ2V0QnJpY2tTdGF0ZShlLCJidXN5IikpcmV0dXJuIHRoaXM7dGhpcy5fc2V0QnJpY2tTdGF0ZShlLCJidXN5IiwhMCk7Y29uc3QgaT10aGlzLmdldEJ1Y2tldEluZGV4Rm9yQnJpY2soZSkscz10aGlzLmdldENvbnRlbnQoaSsodD8wOjEpLCExKSxuPXRoaXMuX2dldEJyaWNrU3RhdGUoZSwic2V0dGluZ3NWZXJzaW9uIik7bGV0IHIsYTt0cnl7cj1hd2FpdCBlLnRyYW5zbGF0ZShzLHQpfWNhdGNoKGQpe2E9ZH1pZighdGhpcy5jb250YWluc0JyaWNrKGUpKXJldHVybjt0aGlzLl9zZXRCcmlja1N0YXRlKGUsImJ1c3kiLCExKTtjb25zdCBsPXRoaXMuX2dldEJyaWNrU3RhdGUoZSwic2V0dGluZ3NWZXJzaW9uIiksbz10aGlzLmdldEJ1Y2tldEluZGV4Rm9yQnJpY2soZSksYz1vKyh0PzA6MSksdT10aGlzLmdldENvbnRlbnQoYywhMSksaD1vKyh0PzE6MCk7aWYodCYmdGhpcy5fc2VsZWN0ZWRCdWNrZXQ+PWh8fCF0JiZ0aGlzLl9zZWxlY3RlZEJ1Y2tldDw9aCl7dGhpcy5fdHJpZ2dlckVuY29kZXJUcmFuc2xhdGlvbihlLCF0KTtyZXR1cm59aWYoYXx8dGhpcy5zZXRDb250ZW50KHIsaCxlKSwoIXUuaXNFcXVhbFRvKHMpfHxuIT09bCkmJnRoaXMuX3RyaWdnZXJFbmNvZGVyVHJhbnNsYXRpb24oZSx0KSx0aGlzLmJyaWNrRGlkRmluaXNoKGUsYSksYSYmIShhIGluc3RhbmNlb2YgeCkpdGhyb3cgYX1fZ2V0QnJpY2tTdGF0ZShlLHQpe2NvbnN0IGk9dGhpcy5fYnJpY2tzLmluZGV4T2YoZSk7aWYoaT09PS0xKXRocm93IG5ldyBFcnJvcigiQnJpY2sgaXMgbm90IHBhcnQgb2YgdGhlIHBpcGUgYW5kIHRodXMgaGFzIG5vIHN0YXRlLiIpO3JldHVybiB0aGlzLl9icmlja1N0YXRlW2ldW3RdfV9zZXRCcmlja1N0YXRlKGUsdCxpKXtjb25zdCBzPXRoaXMuX2JyaWNrcy5pbmRleE9mKGUpO2lmKHM9PT0tMSl0aHJvdyBuZXcgRXJyb3IoIkJyaWNrIGlzIG5vdCBwYXJ0IG9mIHRoZSBwaXBlIGFuZCB0aHVzIGhhcyBubyBzdGF0ZS4iKTtyZXR1cm4gdGhpcy5fYnJpY2tTdGF0ZVtzXVt0XT1pLHRoaXN9aXNCdXN5KCl7cmV0dXJuIHRoaXMuX2JyaWNrcy5yZWR1Y2UoKGUsdCk9PmV8fHRoaXMuX2dldEJyaWNrU3RhdGUodCwiYnVzeSIpLCExKX1nZXRCdWNrZXRJbmRleEZvckJyaWNrKGUpe2xldCB0PSExLGk9MCxzPS0xO2Zvcig7IXQmJisrczx0aGlzLl9icmlja3MubGVuZ3RoOyl0aGlzLl9icmlja3Nbc109PT1lP3Q9ITA6dGhpcy5fYnJpY2tzW3NdaW5zdGFuY2VvZiB3JiZpKys7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJDYW4ndCBmaW5kIGJ1Y2tldCBmb3IgYnJpY2suIEJyaWNrIGlzIG5vdCBwYXJ0IG9mIFBpcGUuIik7cmV0dXJuIGl9Z2V0QnJpY2tzQXR0YWNoZWRUb0J1Y2tldChlKXtsZXQgdD1udWxsLGk9bnVsbDtjb25zdCBzPVtdO2xldCBuPTAscj0tMSxhO2Zvcig7KytyPHRoaXMuX2JyaWNrcy5sZW5ndGgmJm48PWU7KWE9dGhpcy5fYnJpY2tzW3JdLGEgaW5zdGFuY2VvZiB3PyhuPT09ZS0xP3Q9YTpuPT09ZSYmKGk9YSksbisrKTpuPT09ZSYmcy5wdXNoKGEpO3JldHVybntsb3dlckVuY29kZXI6dCx1cHBlckVuY29kZXI6aSx2aWV3ZXJzOnN9fXZpZXdlckNvbnRlbnREaWRDaGFuZ2UoZSx0KXtpZighdGhpcy5jb250YWluc0JyaWNrKGUpKXJldHVybjtjb25zdCBpPXRoaXMuZ2V0QnVja2V0SW5kZXhGb3JCcmljayhlKTt0aGlzLnNldENvbnRlbnQodCxpLGUpfWJyaWNrVmlzaWJpbGl0eURpZENoYW5nZShlLHQpe3RoaXMudXBkYXRlVmlldygpfWJyaWNrU2V0dGluZ0RpZENoYW5nZShlKXtpZih0aGlzLmNvbnRhaW5zQnJpY2soZSkpaWYodGhpcy5fc2V0QnJpY2tTdGF0ZShlLCJzZXR0aW5nc1ZlcnNpb24iLHRoaXMuX2dldEJyaWNrU3RhdGUoZSwic2V0dGluZ3NWZXJzaW9uIikrMSksZSBpbnN0YW5jZW9mIHcpe2NvbnN0IHQ9dGhpcy5nZXRCdWNrZXRJbmRleEZvckJyaWNrKGUpLGk9dGhpcy5fc2VsZWN0ZWRCdWNrZXQ8PXQ7dGhpcy5fdHJpZ2dlckVuY29kZXJUcmFuc2xhdGlvbihlLGkpfWVsc2UgdGhpcy5fdHJpZ2dlclZpZXdlclZpZXcoZSl9ZW5jb2RlckRpZFJldmVyc2UoZSx0KXtpZih0aGlzLl9icmlja3MubGVuZ3RoPT09MyYmdGhpcy5fYnJpY2tzWzBdLmdldE1ldGEoKS50eXBlPT09InZpZXdlciImJnRoaXMuX2JyaWNrc1sxXS5nZXRNZXRhKCkudHlwZT09PSJlbmNvZGVyIiYmdGhpcy5fYnJpY2tzWzJdLmdldE1ldGEoKS50eXBlPT09InZpZXdlciIpe2NvbnN0IGk9dGhpcy5nZXRDb250ZW50KDEsITEpLHM9dGhpcy5zcGxpY2VCcmlja3MoMCwzKTtzLnJldmVyc2UoKSx0aGlzLnNldENvbnRlbnQoaSwwKSx0aGlzLnNwbGljZUJyaWNrcygwLDAscyl9ZWxzZSB0aGlzLmJyaWNrU2V0dGluZ0RpZENoYW5nZShlKX1icmlja0RpZEZpbmlzaChlLHQpe3RoaXMuaXNCdXN5KCl8fHRoaXMuX2J1Y2tldExpc3RlbmVycy5tYXAoKGkscyk9PihpLmZvckVhY2gobj0+dCE9PW51bGw/bi5yZXNvbHZlKHRoaXMuZ2V0Q29udGVudChzLCExKSk6bi5yZWplY3QodCkpLFtdKSl9YXN5bmMgYnJpY2tSZXBsYWNlQnV0dG9uRGlkQ2xpY2soZSl7Y29uc3QgdD10aGlzLmdldExpYnJhcnlNb2RhbFZpZXcoKTtpZih0LmFwcGx5RmlsdGVyKHM9PnMudHlwZT09PWUuZ2V0TWV0YSgpLnR5cGUpLHQuaXNWaXNpYmxlKCkpcmV0dXJuO2xldCBpPWUuZ2V0TWV0YSgpLm5hbWU7dHJ5e2k9YXdhaXQgdC5wcm9tcHQoaSl9Y2F0Y2h7cmV0dXJufWlmKGkhPT1lLmdldE1ldGEoKS5uYW1lKXtjb25zdCBzPXRoaXMuZ2V0QnJpY2tGYWN0b3J5KCkuY3JlYXRlKGkpO2UgaW5zdGFuY2VvZiB3JiZzIGluc3RhbmNlb2YgdyYmcy5zZXRSZXZlcnNlKGUuaXNSZXZlcnNlKCkpLHRoaXMucmVwbGFjZUJyaWNrKGUscyl9fWFzeW5jIHZpZXdBZGRCdXR0b25EaWRDbGljayhlLHQpe04udHJpZ2dlcigicGlwZUFkZEJ1dHRvbkNsaWNrIix7cGlwZTp0aGlzLGluZGV4OnR9KTtjb25zdCBpPXRoaXMuZ2V0TGlicmFyeU1vZGFsVmlldygpO2kuY2xlYXJGaWx0ZXIoKTtsZXQgczt0cnl7cz1hd2FpdCBpLnByb21wdCgpfWNhdGNoe3JldHVybn1jb25zdCBuPXRoaXMuZ2V0QnJpY2tGYWN0b3J5KCkuY3JlYXRlKHMpO3RoaXMuc3BsaWNlQnJpY2tzKHQsMCxbbl0pfXZpZXdCcmlja0RpZERyb3AoZSx0LGkscz0hMSl7aSBpbnN0YW5jZW9mIFg/cz90aGlzLmR1cGxpY2F0ZUJyaWNrKGksdCk6dGhpcy5tb3ZlQnJpY2soaSx0KTp0aGlzLnNwbGljZUJyaWNrcyh0LDAsW2ldKSxOLnRyaWdnZXIoInBpcGVCcmlja0Ryb3AiLHtwaXBlOnRoaXMsaW5kZXg6dCxicmljazppLGNvcHk6c30pfXZpZXdIaWRkZW5Ccmlja0dyb3VwRGlkQ2xpY2soZSx0KXt0LmZvckVhY2goaT0+aS5zZXRIaWRkZW4oITEpKSxOLnRyaWdnZXIoInBpcGVIaWRkZW5Ccmlja0dyb3VwQ2xpY2siLHtwaXBlOnRoaXMsYnJpY2tzOnR9KX1kaWRDcmVhdGVWaWV3KGUpe3RoaXMuX2JyaWNrcy5mb3JFYWNoKHQ9PmUuYWRkU3Vidmlldyh0LmdldFZpZXcoKSkpfWFzeW5jIHN0b3JlKCl7cmV0dXJuKGF3YWl0IHRoaXMuZ2V0U2VydmljZSgpLnN0b3JlUGlwZSh0aGlzKSkudXJsfXNlcmlhbGl6ZSgpe2NvbnN0IGU9e307dGhpcy5faWQhPT1udWxsJiYoZS5pZD10aGlzLl9pZCksdGhpcy5fdXJsIT09bnVsbCYmKGUudXJsPXRoaXMuX3VybCksdGhpcy5fdGl0bGUhPT1udWxsJiYoZS50aXRsZT10aGlzLl90aXRsZSksdGhpcy5fZGVzY3JpcHRpb24hPT1udWxsJiYoZS5kZXNjcmlwdGlvbj10aGlzLl9kZXNjcmlwdGlvbiksZS5pdGVtcz10aGlzLl9icmlja3MubWFwKHM9PnMuc2VyaWFsaXplKCkpO2NvbnN0IHQ9dGhpcy5fc2VsZWN0ZWRCdWNrZXQsaT10aGlzLl9idWNrZXRDb250ZW50W3RdO2lmKCFpLmlzRW1wdHkoKXx8dD4wKXtlLmNvbnRlbnQ9e30saS5uZWVkc1RleHRFbmNvZGluZygpPyhlLmNvbnRlbnQuZGF0YT1ELmJhc2U2NFN0cmluZ0Zyb21CeXRlcyhpLmdldEJ5dGVzKCkpLGUuY29udGVudC5lbmNvZGluZz0iYmFzZTY0Iik6ZS5jb250ZW50LmRhdGE9aS5nZXRTdHJpbmcoKTtjb25zdHtsb3dlckVuY29kZXI6c309dGhpcy5nZXRCcmlja3NBdHRhY2hlZFRvQnVja2V0KHQpO3MhPT1udWxsJiYoZS5jb250ZW50LmluZGV4PXRoaXMuX2JyaWNrcy5pbmRleE9mKHMpKzEpfXJldHVybiBlfXN0YXRpYyBleHRyYWN0KGUsdCl7aWYoIUFycmF5LmlzQXJyYXkoZS5pdGVtcyl8fGUuaXRlbXMubGVuZ3RoPT09MCl0aHJvdyBuZXcgRXJyb3IoIlBpcGUgcHJvcGVydHkgJ2l0ZW1zJyBpcyBleHBlY3RlZCB0byBiZSBvZiB0eXBlICdhcnJheScgYW5kIG11c3Qgbm90IGJlIGVtcHR5Iik7Y29uc3QgaT1uZXcgTmU7aWYoaS5zZXRCcmlja0ZhY3RvcnkodCksaS5hZGRCcmlja3MoZS5pdGVtcyksZS5pZCE9PXZvaWQgMCYmZS5pZCE9PW51bGwpe2lmKHR5cGVvZiBlLmlkIT0ibnVtYmVyIil0aHJvdyBuZXcgRXJyb3IoIk9wdGlvbmFsIHBpcGUgcHJvcGVydHkgJ2lkJyBpcyBleHBlY3RlZCB0byBiZSBvZiB0eXBlICdudW1iZXInIik7aS5zZXRJZChlLmlkKX1pZihlLnVybCE9PXZvaWQgMCYmZS51cmwhPT1udWxsKXtpZih0eXBlb2YgZS51cmwhPSJzdHJpbmciKXRocm93IG5ldyBFcnJvcigiT3B0aW9uYWwgcGlwZSBwcm9wZXJ0eSAndXJsJyBpcyBleHBlY3RlZCB0byBiZSBvZiB0eXBlICdzdHJpbmcnIik7aS5zZXRVcmwoZS51cmwpfWlmKGUudGl0bGUhPT12b2lkIDAmJmUudGl0bGUhPT1udWxsKXtpZih0eXBlb2YgZS50aXRsZSE9InN0cmluZyIpdGhyb3cgbmV3IEVycm9yKCJPcHRpb25hbCBwaXBlIHByb3BlcnR5ICd0aXRsZScgaXMgZXhwZWN0ZWQgdG8gYmUgb2YgdHlwZSAnc3RyaW5nJyIpO2kuc2V0VGl0bGUoZS50aXRsZSl9aWYoZS5kZXNjcmlwdGlvbiE9PXZvaWQgMCYmZS5kZXNjcmlwdGlvbiE9PW51bGwpe2lmKHR5cGVvZiBlLmRlc2NyaXB0aW9uIT0ic3RyaW5nIil0aHJvdyBuZXcgRXJyb3IoIk9wdGlvbmFsIHBpcGUgcHJvcGVydHkgJ2Rlc2NyaXB0aW9uJyBpcyBleHBlY3RlZCB0byBiZSBvZiB0eXBlICdzdHJpbmcnIik7aS5zZXREZXNjcmlwdGlvbihlLmRlc2NyaXB0aW9uKX1sZXQgcz0iIixuPTA7aWYoZS5jb250ZW50IT09dm9pZCAwJiZlLmNvbnRlbnQhPT1udWxsKXtpZih0eXBlb2YgZS5jb250ZW50IT0ib2JqZWN0Iil0aHJvdyBuZXcgRXJyb3IoIk9wdGlvbmFsIHBpcGUgcHJvcGVydHkgJ2NvbnRlbnQnIGlzIGV4cGVjdGVkIHRvIGJlIG9mIHR5cGUgJ29iamVjdCciKTtpZihlLmNvbnRlbnQuZGF0YT09PXZvaWQgMHx8dHlwZW9mIGUuY29udGVudC5kYXRhIT0ic3RyaW5nIil0aHJvdyBuZXcgRXJyb3IoIlBpcGUgcHJvcGVydHkgJ2NvbnRlbnQuZGF0YScgaXMgZXhwZWN0ZWQgdG8gYmUgb2YgdHlwZSAnc3RyaW5nJyIpO2lmKGUuY29udGVudC5lbmNvZGluZyE9PXZvaWQgMCYmdHlwZW9mIGUuY29udGVudC5lbmNvZGluZyE9InN0cmluZyIpdGhyb3cgbmV3IEVycm9yKCJPcHRpb25hbCBwaXBlIHByb3BlcnR5ICdjb250ZW50LmVuY29kaW5nJyBpcyBleHBlY3RlZCB0byBiZSBvZiB0eXBlICdzdHJpbmcnIik7aWYoZS5jb250ZW50LmluZGV4IT09dm9pZCAwJiZ0eXBlb2YgZS5jb250ZW50LmluZGV4IT0ibnVtYmVyIil0aHJvdyBuZXcgRXJyb3IoIk9wdGlvbmFsIHBpcGUgcHJvcGVydHkgJ2NvbnRlbnQuaW5kZXgnIGlzIGV4cGVjdGVkIHRvIGJlIG9mIHR5cGUgJ251bWJlciciKTtjb25zdCByPWUuY29udGVudC5lbmNvZGluZ3x8InRleHQiO3N3aXRjaChyKXtjYXNlInRleHQiOnM9ZS5jb250ZW50LmRhdGE7YnJlYWs7Y2FzZSJiYXNlNjQiOnM9RC5ieXRlc0Zyb21CYXNlNjRTdHJpbmcoZS5jb250ZW50LmRhdGEpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBPcHRpb25hbCBwaXBlIHByb3BlcnR5ICdjb250ZW50LmVuY29kaW5nJyBpcyBzZXQgdG8gYW4gdW5zdXBwb3J0ZWQgZW5jb2RpbmcgJyR7cn0nOyBTdXBwb3J0ZWQgdmFsdWVzOiB0ZXh0LCBiYXNlNjRgKX1jb25zdCBhPWUuY29udGVudC5pbmRleHx8MDtpZihhPT09aS5nZXRMZW5ndGgoKSluPWkuZ2V0QnVja2V0TGVuZ3RoKCktMTtlbHNlIGlmKGE+PTAmJmE8aS5nZXRMZW5ndGgoKSluPWkuZ2V0QnVja2V0SW5kZXhGb3JCcmljayhpLmdldEJyaWNrKGEpKTtlbHNlIHRocm93IG5ldyBFcnJvcihgT3B0aW9uYWwgcGlwZSBwcm9wZXJ0eSAnY29udGVudC5pbmRleCcgaXMgZXhwZWN0ZWQgdG8gYmUgYSBudW1iZXIgcmFuZ2luZyBmcm9tIDAgdG8gJHtpLmdldEJ1Y2tldExlbmd0aCgpLTF9YCl9cmV0dXJuIGkuc2V0Q29udGVudChzLG4pLGl9fWNvbnN0IE5zPSJ2MSI7Y2xhc3MgUnN7Y29uc3RydWN0b3IoZSl7dGhpcy5fcm9vdEVuZHBvaW50PWAke2V9LyR7TnN9YH1hc3luYyBjcmVhdGVTZXNzaW9uKCl7Y29uc3QgZT1hd2FpdCB3aW5kb3cuZmV0Y2goYCR7dGhpcy5fcm9vdEVuZHBvaW50fS9zZXNzaW9uYCk7aWYoIWUub2spdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gY3JlYXRlIGEgc2Vzc2lvbiIpO3JldHVybiBlLmpzb24oKX1hc3luYyBzdG9yZVBpcGUoZSl7Y29uc3QgdD1hd2FpdCB0aGlzLmNyZWF0ZVNlc3Npb24oKSxpPWF3YWl0IHdpbmRvdy5mZXRjaChgJHt0aGlzLl9yb290RW5kcG9pbnR9L3BpcGVzYCx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC10eXBlIjoiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCIsQXV0aG9yaXphdGlvbjpgQmVhcmVyICR7dC50b2tlbn1gfSxib2R5OkpTT04uc3RyaW5naWZ5KGUuc2VyaWFsaXplKCkpfSk7aWYoIWkub2spdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gc3RvcmUgdGhpcyBwaXBlIik7Y29uc3Qgcz1hd2FpdCBpLmpzb24oKTtpZihzLmVycm9yIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIHN0b3JlIHRoaXMgcGlwZTogIitzLmVycm9yLm1lc3NhZ2UpO3JldHVybiBzfX1jb25zdCBxcz17dmVyc2lvbjoidW5rbm93biIsc2NvcGU6Ii8iLHNlcnZpY2VFbmRwb2ludDoiaHR0cHM6Ly9jcnlwdGlpLmNvbS9hcGkiLHNlcnZpY2VXb3JrZXJVcmw6bnVsbH07bGV0IFZ0PW51bGw7Y2xhc3MgT3MgZXh0ZW5kcyBsZXtjb25zdHJ1Y3RvcihlPXt9KXtzdXBlcigpLHRoaXMuX3ZpZXdQcm90b3R5cGU9THQsdGhpcy5fcGlwZT1udWxsLHRoaXMuX2NvbmZpZz1PYmplY3QuYXNzaWduKHFzLGUpLHRoaXMuX3NlcnZpY2U9bmV3IFJzKHRoaXMuX2NvbmZpZy5zZXJ2aWNlRW5kcG9pbnQpLFZ0PXRoaXN9cnVuKGU9bnVsbCl7ZSE9PW51bGw/dGhpcy5fcGlwZT1OZS5leHRyYWN0KGUsRGUuZ2V0SW5zdGFuY2UoKSk6KHRoaXMuX3BpcGU9bmV3IE5lLHRoaXMuX3BpcGUuc2V0QnJpY2tGYWN0b3J5KERlLmdldEluc3RhbmNlKCkpKSx0aGlzLl9waXBlLnNldFNlcnZpY2UodGhpcy5fc2VydmljZSk7Y29uc3QgdD10aGlzLmdldFZpZXcoKTtyZXR1cm4gdC5sYXlvdXQoKSxzZXRUaW1lb3V0KHQubGF5b3V0LmJpbmQodCksMTAwKSx0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmInNlcnZpY2VXb3JrZXIiaW4gbmF2aWdhdG9yJiYodGhpcy5fY29uZmlnLnNlcnZpY2VXb3JrZXJVcmw/bmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVnaXN0ZXIodGhpcy5fY29uZmlnLnNlcnZpY2VXb3JrZXJVcmwse3Njb3BlOnRoaXMuX2NvbmZpZy5zY29wZX0pOm5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLmdldFJlZ2lzdHJhdGlvbnMoKS50aGVuKGk9PmkuZm9yRWFjaChzPT5zLnVucmVnaXN0ZXIoKSkpKSxVLmlzQnJvd3NlcigpJiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixpPT57aS5jdHJsS2V5JiZpLmtleT09PSJpIiYmKGkucHJldmVudERlZmF1bHQoKSx3aW5kb3cuYWxlcnQodGhpcy5kZWJ1ZygpKSl9KSx0aGlzfWRlYnVnKCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHt2ZXJzaW9uOnRoaXMuX2NvbmZpZy52ZXJzaW9uLHBpcGU6dGhpcy5nZXRQaXBlKCkuc2VyaWFsaXplKCl9KX1nZXRQaXBlKCl7cmV0dXJuIHRoaXMuX3BpcGV9ZGlkQ3JlYXRlVmlldyhlKXtlLmFkZFN1YnZpZXcodGhpcy5fcGlwZS5nZXRWaWV3KCkpfXN0YXRpYyBnZXRJbnN0YW5jZSgpe3JldHVybiBWdH19aWYoVS5pc0Jyb3dzZXIoKSYmZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic2NyaXB0W2RhdGEtY3J5cHRpaS1jb25maWddIikhPT1udWxsKXtjb25zdCBnPSgpPT57Y29uc3QgZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJzY3JpcHRbZGF0YS1jcnlwdGlpLXBpcGVdIiksdD1lIT09bnVsbD9KU09OLnBhcnNlKGUuaW5uZXJIVE1MKTpudWxsLGk9ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic2NyaXB0W2RhdGEtY3J5cHRpaS1jb25maWddIikscz1pIT09bnVsbD9KU09OLnBhcnNlKGkuaW5uZXJIVE1MKTp7fTtuZXcgT3MocykucnVuKHQpfTtkb2N1bWVudC5yZWFkeVN0YXRlIT09ImxvYWRpbmciP2coKTp3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsZyl9Cg=="></script><meta name=referrer content=no-referrer><link type=image/x-icon rel="shortcut icon" href="data:image/vnd.microsoft.icon;base64,AAABAAQAEBAAAAEAIABoBAAARgAAABgYAAABACAAiAkAAK4EAAAgIAAAAQAgAKgQAAA2DgAAQEAAAAEAIAAoQgAA3h4AACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAABMLAAATCwAAAAAAAAAAAAD///9g////3////////////////////////////////////////////////////////////////////+////9g////7///////////////////////////////////////////////////////////////////////////////3/////////////////3y4v/87NP///////748f/++PH//vjx//748f/++PH//fLi//3y4v////////////////////////////758P/wpzL/7ZoV//XGfP/54Lb/8a1B//CnMv/537b/9L9t/+2aFf/tmhX//fLi///////////////////////75sT/7ZoV/+2aFf/zuV///fLi/+6gI//uoCT//vjx//S/bf/tmhX/7ZoV//3y4v////////////////////////////bMiv/ys1D//OzT//rmxP/30pn/+NOZ//vlxP/42af/9MBt//TAbf/++fH///////////////////////758P/54Lb//vnw//vmxf//////////////////////////////////////////////////////////////////////8K1B/+6hI//305n//////////////////////////////////////////////////////////////////vnw//CnMv/vpzL/+NOZ//////////////////////////////////////////////////////////////////758P/537b//vnw//vmxP//////////////////////////////////////////////////////////////////////////////////////++bE//TAbf/0wG3/++XE//zs0//ytFD/9s2K//////////////////////////////////////////////////jZp//tmhX/7ZoV//jZp//zul//7ZoV/+2aFf/75sT////////////////////////////////////////////42af/7ZoV/+2aFf/42af/9cZ7/+2aFf/vpzL//vnx/////////////////////////////////////////////vnw//3y4v/98uL//vnw///////869P//fPi/////////////////////9///////////////////////////////////////////////////////////////////////////////+////9f////7////////////////////////////////////////////////////////////////////9////9fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAYAAAAMAAAAAEAIAAAAAAAAAkAABMLAAATCwAAAAAAAAAAAAAAAAAA////kP///+/////////////////////////////////////////////////////////////////////////////////////////////////////v////gAAAAAD///+A/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////5D////v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////fLi//O6X//vpzL/9s2K////////////9MBt//3y4v/98uL/9MBt///////637b/9MBt//TAbf/0wG3/+dmn////////////////////////////////////////////8rRQ/+2aFf/tmhX/7ZoV//nZp///////8K1B//CnMv/wpzL/8K1B///////2zIr/7ZoV/+2aFf/tmhX/9L9t////////////////////////////////////////////76cy/+2aFf/tmhX/7ZoV//S/bf///////OzT/+2aFf/tmhX//OzT///////2zIr/7ZoV/+2aFf/tmhX/9L9t////////////////////////////////////////////9cZ7/+2aFf/tmhX/7ZoV//jZp///////8Kcy//CtQf/wrUH/8Kcy///////2zIr/7ZoV/+2aFf/tmhX/9L9t//////////////////////////////////////////////////bMiv/0wG3/+Nmn////////////9syK//758f/++fD/9syK///////75sT/9syK//bMiv/2zIr/+eC2////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9L9t//GtQf/87NP/8Kcy//jZp////////////////////////////////////////////////////////////////////////////////////////////////////////fPh/++nMv/tmhX/8K1B//758f///////////////////////////////////////////////////////////////////////////////////////////////////////fLi//CnMv/tmhX/8a1B//748f//////////////////////////////////////////////////////////////////////////////////////////////////////9L9t//CtQf/87dP/76cy//jZp///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+Nqn//jap//42qf/+Nqn////////////+dmn//TAbf/2zYr/////////////////////////////////////////////////////////////////////////////////7ZoV/+2aFf/tmhX/7ZoV///////52af/7ZoV/+2aFf/tmhX/9cZ8////////////////////////////////////////////////////////////////////////////7ZoV/+2aFf/tmhX/7ZoV///////0v23/7ZoV/+2aFf/tmhX/76cy////////////////////////////////////////////////////////////////////////////7ZoV/+2aFf/tmhX/7ZoV///////42af/7ZoV/+2aFf/tmhX/8rNQ////////////////////////////////////////////////////////////////////////////9MBt//TAbf/0wG3/9MBt////////////9syK/++nMv/0wG3//fPi///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+////+P/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////4AAAAAA////f////+/////////////////////////////////////////////////////////////////////////////////////////////////////v////jwAAAACAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAQAoAAAAIAAAAEAAAAABACAAAAAAAAAQAAATCwAAEwsAAAAAAAAAAAAAAAAAAP///yD///+v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+////+/////IAAAAAD///8g////7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v////IP///7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+w////7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////52af/9syK//ngtv/////////////////87NP//OzT/////////////OzT//zs0////////vnw//vmxP/75sT/++bE//vmxP/75sT//vjx////////////////////////////////////////////////////////////8rRQ/+2aFf/tmhX/7ZoV//GtQf////////////K0UP/tmhX/+dmo//nZp//tmhX/8rNQ///////75sT/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/75sT///////////////////////////////////////////////////////rgtv/tmhX/7ZoV/+2aFf/tmhX/7ZoV//nZp///////+dmo/+2aFf/tmhX/7ZoV/+2aFf/52af///////vmxP/tmhX/7ZoV/+2aFf/tmhX/7ZoV//vmxP//////////////////////////////////////////////////////9syK/+2aFf/tmhX/7ZoV/+2aFf/tmhX/9syK////////////9MBt/+2aFf/tmhX/982K////////////++bE/+2aFf/tmhX/7ZoV/+2aFf/tmhX/++bE///////////////////////////////////////////////////////42af/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/30pn///////nZp//tmhX/7ZoV/+2aFf/uoSP//OzT///////75sT/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/75sT////////////////////////////////////////////////////////////wrUH/7ZoV/+2aFf/tmhX/8K1B////////////8rRQ/+2aFf/52af/+dmo/+2aFf/ys1D///////vmxP/tmhX/7ZoV/+2aFf/tmhX/7ZoV//vmxP/////////////////////////////////////////////////////////////////637b/9syK//jZp//////////////////869P//OzT/////////////OvT//zs0////////vnw//vlxP/75cT/++XE//vlxP/75cT//vnx//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////zs0//ytFD/+dmo///////87NP/8rRQ//zs0////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////fPh/+6hI//tmhX/9s2K/+6gI//tmhX//OzT/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////O3T/+6hI//tmhX/7ZoV//nZp//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////52af/7ZoV/+2aFf/tmhX/+dmo/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////OzT/+2aFf/tmhX/9s2K/+6hI//tmhX//OzT///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////87NP/8rNQ//nZp////////O3T//KzUP/87NP////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////87NP/++bE//vmxP/75sT/++bE//zs0//////////////////52af/9syK//jTmP////////////////////////////////////////////////////////////////////////////////////////////////////////////K0UP/tmhX/7ZoV/+2aFf/tmhX/8rNQ////////////8a1B/+2aFf/tmhX/7ZoV//GtQf//////////////////////////////////////////////////////////////////////////////////////////////////////8rRQ/+2aFf/tmhX/7ZoV/+2aFf/ys1D///////jTmf/tmhX/7ZoV/+2aFf/tmhX/7ZoV//nZp//////////////////////////////////////////////////////////////////////////////////////////////////ytFD/7ZoV/+2aFf/tmhX/7ZoV//KzUP//////9syK/+2aFf/tmhX/7ZoV/+2aFf/tmhX/9syK//////////////////////////////////////////////////////////////////////////////////////////////////K0UP/tmhX/7ZoV/+2aFf/tmhX/8rNQ///////42af/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/537b/////////////////////////////////////////////////////////////////////////////////////////////////8rRQ/+2aFf/tmhX/7ZoV/+2aFf/ys1D////////////ys1D/7ZoV/+2aFf/tmhX/8rNQ///////////////////////////////////////////////////////////////////////////////////////////////////////869P/++XE//vlxP/75cT/++XE//zs0//////////////////637b/9syK//jZp///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7////7D///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/////IP///+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7////yAAAAAA////IP///7/////v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////6////8gAAAAAIAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABKAAAAEAAAACAAAAAAQAgAAAAAAAAQAAAEwsAABMLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8g////oP///8///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9////+Q////QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///xD///+Q//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+Q////EAAAAAAAAAAAAAAAAP///xD////P/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9D///8QAAAAAAAAAAD///+Q////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////kAAAAAD///9A//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8g////kP//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////n////9///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////748f////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////3y4v/2zYr/8Kcy/+2aFf/tmhX/76cy//bNiv/++PH////////////////////////////75sT/9syK//bMiv/98uL///////////////////////3y4v/2zIr/9syK//vmxP/////////////////75sT/9syK//bMiv/2zIr/9syK//bMiv/2zIr/9syK//bMiv/2zIr/9syK//zs0/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////3y4v/wpzL/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/8Kcy//3y4v//////////////////////9syK/+2aFf/tmhX/8Kcy//3y4v////////////3y4v/wpzL/7ZoV/+2aFf/2zIr/////////////////9syK/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/42af///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////758P/wpzL/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/wpzL//fLi//////////////////bMiv/tmhX/7ZoV/+2aFf/wpzL//fLi//3y4v/wpzL/7ZoV/+2aFf/tmhX/9syK//////////////////bMiv/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/+Nmn///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////2zYr/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV//TAbf/////////////////98+H/76cy/+2aFf/tmhX/7ZoV//CnMv/wpzL/7ZoV/+2aFf/tmhX/76cy//3z4v/////////////////2zIr/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV//jZp///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////76cy/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/wpzL///////////////////////3z4f/vpzL/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/76cy//3z4v//////////////////////9syK/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/42af//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV//758f///////////////////////fPh/++nMv/tmhX/7ZoV/+2aFf/tmhX/76cy//3z4v////////////////////////////bMiv/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/+Nmn///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/98uL///////////////////////3y4v/wpzL/7ZoV/+2aFf/tmhX/7ZoV//CnMv/98uL////////////////////////////2zIr/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV//jZp///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8K1A/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/uoCT///////////////////////3y4v/wpzL/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/8Kcy//3y4v//////////////////////9syK/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/42af///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////bNiv/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/9syK//////////////////3y4v/wpzL/7ZoV/+2aFf/tmhX/76cy/++nMv/tmhX/7ZoV/+2aFf/wpzL//fLi//////////////////bMiv/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/+Nmn///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////98+H/76cy/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/76cy//758f/////////////////2zIr/7ZoV/+2aFf/tmhX/76cy//3z4v/98+H/76cy/+2aFf/tmhX/7ZoV//bMiv/////////////////2zIr/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV//jZp/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////3z4f/vpzL/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/76cy//zs0///////////////////////9syK/+2aFf/tmhX/76cy//3z4v////////////3z4f/vpzL/7ZoV/+2aFf/2zIr/////////////////9syK/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/42af//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////vnw//bMiv/uoSP/7ZoV/+2aFf/vpzL/9MBt//3z4v////////////////////////////vmxP/2zIr/9syK//3z4v///////////////////////fPh//bMiv/2zIr/++bE//////////////////vmxP/2zIr/9syK//bMiv/2zIr/9syK//bMiv/2zIr/9syK//bMiv/2zIr//OzT//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////758P/++fD////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////75sT/9syK//bMiv/98uL///////////////////////3y4v/2zIr/9syK//vmxP//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9syK/+2aFf/tmhX/8Kcy//3y4v////////////3y4v/wpzL/7ZoV/+2aFf/2zIr///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////bMiv/tmhX/7ZoV/+2aFf/wpzL//fLi//3y4v/wpzL/7ZoV/+2aFf/tmhX/9syK///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////98+H/76cy/+2aFf/tmhX/7ZoV//CnMv/wpzL/7ZoV/+2aFf/tmhX/76cy//3z4v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////3z4f/vpzL/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/76cy//3z4v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////fPh/++nMv/tmhX/7ZoV/+2aFf/tmhX/76cy//3z4v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////3y4v/wpzL/7ZoV/+2aFf/tmhX/7ZoV//CnMv/98uL///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////3y4v/wpzL/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/8Kcy//3y4v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////3y4v/wpzL/7ZoV/+2aFf/tmhX/76cy/++nMv/tmhX/7ZoV/+2aFf/wpzL//fLi///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////2zIr/7ZoV/+2aFf/tmhX/76cy//3z4v/98+H/76cy/+2aFf/tmhX/7ZoV//bMiv//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9syK/+2aFf/tmhX/76cy//3z4v////////////3z4f/vpzL/7ZoV/+2aFf/2zIr///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////vmxP/2zIr/9syK//3z4v///////////////////////fPh//bMiv/2zIr/++bE/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////fLi//3y4v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////75sT/9syK//bMiv/2zIr/9syK//bMiv/2zIr/9syK//bMiv/2zIr/9syK//vmxP////////////////////////////3y4v/0wG3/8Kcy/+2aFf/tmhX/7qEj//bNiv/++PH/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9syK/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/2zIr///////////////////////zs0//wpzL/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/8Kcy//3y4v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////bMiv/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/9syK//////////////////758P/uoCP/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/wpzL//fLi///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////2zIr/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV//bMiv/////////////////1xnv/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV//TAbf//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9syK/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/2zIr/////////////////7qAj/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/wpzL///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////bMiv/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/9syK/////////////fLi/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////2zIr/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV//bMiv////////////758P/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9syK/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/2zIr/////////////////76cy/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/vpzL///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////bMiv/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/9syK//////////////////TAbf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/9syK///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////2zIr/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV//bMiv/////////////////98+H/76cy/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/76cy//758f//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9syK/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/2zIr///////////////////////3z4f/vpzL/7ZoV/+2aFf/tmhX/7ZoV/+2aFf/tmhX/76cy//3z4v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////vmxP/2zIr/9syK//bMiv/2zIr/9syK//bMiv/2zIr/9syK//bMiv/2zIr/++bE/////////////////////////////vnw//bMiv/vpzL/7ZoV/+2aFf/wrUH/99KZ//758f///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9////+g//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+Q////IP//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////QAAAAAD///+P////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////jwAAAAAAAAAA////EP///9D/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////z////xAAAAAAAAAAAAAAAAD///8Q////j///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////j////xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///9A////kP///9///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8////+f////IAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAD8AAAAAAAAADgAAAAAAAAAGAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAYAAAAAAAAABwAAAAAAAAAPwAAAAAAAADw==" data-sf-original-href=https://cryptii.com/favicon.ico><style data-single-file-movable-style>[data-ea-publisher]:not(.loaded){visibility:hidden}[data-ea-publisher].loaded .ea-content a:link{display:block}[data-ea-publisher].loaded .ea-callout a:link{font-size:inherit}</style></head> <body><script type=application/json data-single-file-options>{"saveUrl":"https://cryptii.com/pipes/reverse-text/","saveDate":1788666792830,"visitDate":1788666787937,"filenameTemplate":"𐄪/{bookmark-pathname}/{url-href}/{page-title} {year-utc}.{month-utc}.{day-utc}-{hours-utc}.{minutes-utc}.{seconds-utc}.{filename-extension}","filenameReplacedCharacters":["~","+","?","%","*",":","|","\"","<",">","\\\\","\u0000-\u001f",""],"filenameReplacementCharacter":"_","filenameReplacementCharacters":["~","+","?","%","*",":","|",""","<",">","\"],"filenameMaxLengthUnit":"chars","filenameMaxLength":"65536","replaceEmojisInFilename":false,"compressContent":false,"selfExtractingArchive":false,"disableCompression":false,"extractDataFromPage":true,"referrer":"","title":"Reverse text: Spell text backwards online - cryptii","info":{"description":"Type in text and easily reverse it, flip it, spell it backwards. As it makes the text much more difficult to read, it is a useful technique to hide content, similar to a magazine printing an answer to a quiz upside down.","lang":"en","author":"","creator":"","publisher":"","heading":"Reverse text: Spell text backwards online"}}</script> <div class=app> <header class="app__header header"> <div class=header__inner> <div class=header__item> <a class=header__brand href=https://cryptii.com/> <svg width=114 height=36 viewBox="0 0 114 36" fill=none aria-labelledby=app_logo> <title id=app_logo>cryptii</title> <path fill-rule=evenodd clip-rule=evenodd d="M102.803 7.40977C101.817 7.40977 101.005 8.22217 101.005 9.20866C101.005 10.1951 101.817 11.0075 102.803 11.0075C103.79 11.0075 104.602 10.1951 104.602 9.20866C104.602 8.22217 103.79 7.40977 102.803 7.40977ZM93.9832 10.0791H96.9426V12.8645H99.2057V15.5048H96.9426V23.8319H93.9832V15.5048H91.9231V12.8645H93.9832V10.0791ZM63.9533 12.6323C63.402 12.6323 62.8798 12.7774 62.3575 13.0385C61.8353 13.2997 61.4 13.6768 61.0519 14.1411C60.9387 14.2543 60.8431 14.4028 60.7515 14.5454L60.7514 14.5454L60.7512 14.5457L60.7511 14.5459C60.7254 14.5858 60.7001 14.6253 60.6747 14.6633L60.6167 12.8644H57.7733V23.8319H60.7327V18.1451C60.7327 17.7969 60.7907 17.4777 60.9068 17.1876C61.0229 16.8974 61.1969 16.6363 61.4 16.4332C61.6031 16.2301 61.8643 16.056 62.1254 15.94C62.4155 15.8239 62.7057 15.7659 63.0539 15.7659C63.315 15.7659 63.5471 15.7949 63.7792 15.8529C64.0113 15.911 64.2144 15.998 64.3595 16.085L65.1429 12.8644C64.9978 12.8064 64.7947 12.7484 64.5916 12.7194C64.5279 12.7103 64.4642 12.6983 64.3996 12.6862C64.2582 12.6597 64.1126 12.6323 63.9533 12.6323ZM50.0845 15.6208C50.5197 15.3597 51.0129 15.2146 51.5932 15.2146C51.9414 15.2146 52.2896 15.2726 52.6377 15.3887C52.9859 15.5048 53.276 15.6788 53.5952 15.911C53.8853 16.1141 54.1175 16.3752 54.3206 16.6363L55.9454 14.6924C55.4811 14.054 54.8428 13.5608 54.0304 13.2126C53.218 12.8645 52.3186 12.6614 51.3321 12.6614C50.2876 12.6614 49.3301 12.9225 48.5177 13.4157C47.6763 13.909 47.038 14.5763 46.5447 15.4467C46.0805 16.3172 45.8194 17.2746 45.8194 18.3772C45.8194 19.4797 46.0515 20.4372 46.5447 21.3076C47.009 22.1781 47.6763 22.8454 48.5177 23.3386C49.3591 23.8319 50.2876 24.093 51.3321 24.093C52.2605 24.093 53.131 23.9189 53.9724 23.5417C54.8138 23.1645 55.4521 22.7003 55.9164 22.091L54.3206 20.1471C54.0884 20.4372 53.8273 20.6983 53.5372 20.9014C53.247 21.1045 52.9569 21.2496 52.6377 21.3657C52.5399 21.3745 52.4393 21.3862 52.3368 21.398C52.105 21.4248 51.8636 21.4527 51.6222 21.4527C51.071 21.4527 50.5777 21.3076 50.1425 21.0465C49.7073 20.7564 49.3591 20.4082 49.098 19.9149C48.8369 19.4507 48.7208 18.9284 48.7208 18.3482C48.7208 17.7389 48.8369 17.1876 49.098 16.7234C49.3011 16.2591 49.6493 15.8819 50.0845 15.6208ZM72.1372 19.594C72.1644 19.5107 72.1924 19.4246 72.2224 19.3347L74.5145 12.8935H77.8802L73.2669 23.8609L71.381 28.6192H68.3925L70.4525 23.8029L65.4911 12.8645H68.8277L71.497 19.1896C71.5932 19.3819 71.6694 19.5941 71.7587 19.8427C71.7772 19.8942 71.7963 19.9472 71.8162 20.002L71.9033 20.2631C71.9893 20.048 72.0594 19.8328 72.1372 19.594ZM88.2963 13.3867C87.542 12.8935 86.7006 12.6614 85.7431 12.6614C85.1338 12.6614 84.5245 12.7774 83.9732 13.0095C83.3929 13.2416 82.9287 13.5608 82.5515 13.909C82.4645 13.996 82.4064 14.0831 82.3484 14.1701L82.2904 12.8354H79.447V28.3871H82.4064V22.5843C82.4161 22.5939 82.4226 22.6036 82.429 22.6133C82.4419 22.6326 82.4548 22.652 82.4935 22.6713C82.8997 23.0775 83.3639 23.3967 83.9442 23.6288C84.5245 23.8609 85.1338 24.006 85.7721 24.006C86.7296 24.006 87.571 23.7738 88.3254 23.2806C89.0797 22.7874 89.66 22.12 90.0952 21.2496C90.5304 20.3792 90.7335 19.4217 90.7335 18.3191C90.7335 17.2166 90.5304 16.2301 90.0952 15.3887C89.631 14.5473 89.0507 13.88 88.2963 13.3867ZM87.4839 20.002C87.2518 20.4662 86.9327 20.8434 86.4975 21.1045C86.0912 21.3657 85.598 21.5107 85.0758 21.5107C84.5245 21.5107 84.0312 21.3657 83.625 21.1045C83.2188 20.8434 82.8997 20.4662 82.6385 20.002C82.4064 19.5378 82.2904 18.9865 82.2904 18.3482C82.2904 17.7389 82.4064 17.1876 82.6385 16.6943C82.8707 16.2301 83.1898 15.8529 83.625 15.5918C84.0312 15.3307 84.5245 15.2146 85.0758 15.2146C85.627 15.2146 86.1203 15.3597 86.5265 15.6208C86.9327 15.8819 87.2518 16.2591 87.4839 16.7234C87.7161 17.1876 87.8321 17.7389 87.8321 18.3482C87.8611 18.9575 87.7451 19.5087 87.4839 20.002ZM104.283 12.8645H101.353V23.8319H104.283V12.8645ZM107.707 12.8645H110.637V23.8319H107.707V12.8645ZM110.957 9.23765C110.957 10.2241 110.144 11.0365 109.158 11.0365C108.171 11.0365 107.359 10.2241 107.359 9.23765C107.359 8.25117 108.171 7.43877 109.158 7.43877C110.144 7.43877 110.957 8.25117 110.957 9.23765Z" fill=#002F6D></path> <path d="M33 25H25V33H33V25Z" fill=#159AED></path> <path d="M17.9856 27.1661L15.8484 25H14V26.8484L16.1661 28.9856L14 31.1516V33H15.8484L17.9856 30.8339L20.1516 33H22V31.1516L19.8339 28.9856L22 26.8484V25H20.1516L17.9856 27.1661Z" fill=#159AED></path> <path d="M7 24.535C4.5361 24.535 2.536 26.5421 2.536 28.9855C2.536 31.4288 4.5361 33.465 7 33.465C9.46389 33.465 11.464 31.4579 11.464 28.9855C11.464 26.513 9.43491 24.535 7 24.535Z" fill=#159AED></path> <path d="M7.01444 19.8339L9.15162 22H11V20.1516L8.83393 17.9856L11 15.8484V14H9.15162L7.01444 16.1661L4.84838 14H3V15.8484L5.16606 17.9856L3 20.1516V22H4.84838L7.01444 19.8339Z" fill=#159AED></path> <path d="M29 2.54275C26.5361 2.54275 24.536 4.54982 24.536 6.9932C24.536 9.43659 26.5361 11.4727 29 11.4727C31.4639 11.4727 33.464 9.46568 33.464 6.9932C33.464 4.52073 31.4349 2.54275 29 2.54275Z" fill=#159AED></path> <path d="M22.0117 3H13.9884V11.0155H22.0117V3Z" fill=#159AED></path> </svg> </a> </div> <div class=header__flexible-space></div>
|
||
<div class=header__featured><div class=horizontal data-ea-publisher=cryptiicom data-ea-type=image id=ea_cryptii_com_header></div><script async data-sf-original-src=https://media.ethicalads.io/media/client/ethicalads.min.js src="data:application/javascript;base64,dmFyIGV0aGljYWxhZHM9ZnVuY3Rpb24oZSl7dmFyIHQ9e307ZnVuY3Rpb24gYShvKXtpZih0W29dKXJldHVybiB0W29dLmV4cG9ydHM7dmFyIHI9dFtvXT17aTpvLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIGVbb10uY2FsbChyLmV4cG9ydHMscixyLmV4cG9ydHMsYSksci5sPSEwLHIuZXhwb3J0c31yZXR1cm4gYS5tPWUsYS5jPXQsYS5kPWZ1bmN0aW9uKGUsdCxvKXthLm8oZSx0KXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7ZW51bWVyYWJsZTohMCxnZXQ6b30pfSxhLnI9ZnVuY3Rpb24oZSl7InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sYS50PWZ1bmN0aW9uKGUsdCl7aWYoMSZ0JiYoZT1hKGUpKSw4JnQpcmV0dXJuIGU7aWYoNCZ0JiYib2JqZWN0Ij09dHlwZW9mIGUmJmUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgbz1PYmplY3QuY3JlYXRlKG51bGwpO2lmKGEucihvKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobywiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6ZX0pLDImdCYmInN0cmluZyIhPXR5cGVvZiBlKWZvcih2YXIgciBpbiBlKWEuZChvLHIsZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19LmJpbmQobnVsbCxyKSk7cmV0dXJuIG99LGEubj1mdW5jdGlvbihlKXt2YXIgdD1lJiZlLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gZS5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiBlfTtyZXR1cm4gYS5kKHQsImEiLHQpLHR9LGEubz1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KX0sYS5wPSIiLGEoYS5zPTEpfShbZnVuY3Rpb24oZSx0LGEpe3ZhciBvLHI7bz10aGlzLHI9ZnVuY3Rpb24oKXt2YXIgZT17fSx0PSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3csYT0idW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50JiZkb2N1bWVudCxvPWEmJmEuZG9jdW1lbnRFbGVtZW50LHI9dC5tYXRjaE1lZGlhfHx0Lm1zTWF0Y2hNZWRpYSxuPXI/ZnVuY3Rpb24oZSl7cmV0dXJuISFyLmNhbGwodCxlKS5tYXRjaGVzfTpmdW5jdGlvbigpe3JldHVybiExfSxpPWUudmlld3BvcnRXPWZ1bmN0aW9uKCl7dmFyIGU9by5jbGllbnRXaWR0aCxhPXQuaW5uZXJXaWR0aDtyZXR1cm4gZTxhP2E6ZX0sbD1lLnZpZXdwb3J0SD1mdW5jdGlvbigpe3ZhciBlPW8uY2xpZW50SGVpZ2h0LGE9dC5pbm5lckhlaWdodDtyZXR1cm4gZTxhP2E6ZX07ZnVuY3Rpb24gZCgpe3JldHVybnt3aWR0aDppKCksaGVpZ2h0OmwoKX19ZnVuY3Rpb24gYyhlLHQpe3JldHVybiEoIShlPWUmJiFlLm5vZGVUeXBlP2VbMF06ZSl8fDEhPT1lLm5vZGVUeXBlKSYmZnVuY3Rpb24oZSx0KXt2YXIgYT17fTtyZXR1cm4gdD0rdHx8MCxhLndpZHRoPShhLnJpZ2h0PWUucmlnaHQrdCktKGEubGVmdD1lLmxlZnQtdCksYS5oZWlnaHQ9KGEuYm90dG9tPWUuYm90dG9tK3QpLShhLnRvcD1lLnRvcC10KSxhfShlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHQpfXJldHVybiBlLm1xPW4sZS5tYXRjaE1lZGlhPXI/ZnVuY3Rpb24oKXtyZXR1cm4gci5hcHBseSh0LGFyZ3VtZW50cyl9OmZ1bmN0aW9uKCl7cmV0dXJue319LGUudmlld3BvcnQ9ZCxlLnNjcm9sbFg9ZnVuY3Rpb24oKXtyZXR1cm4gdC5wYWdlWE9mZnNldHx8by5zY3JvbGxMZWZ0fSxlLnNjcm9sbFk9ZnVuY3Rpb24oKXtyZXR1cm4gdC5wYWdlWU9mZnNldHx8by5zY3JvbGxUb3B9LGUucmVjdGFuZ2xlPWMsZS5hc3BlY3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9KGU9bnVsbD09ZT9kKCk6MT09PWUubm9kZVR5cGU/YyhlKTplKS5oZWlnaHQsYT1lLndpZHRoO3JldHVybiB0PSJmdW5jdGlvbiI9PXR5cGVvZiB0P3QuY2FsbChlKTp0LChhPSJmdW5jdGlvbiI9PXR5cGVvZiBhP2EuY2FsbChlKTphKS90fSxlLmluWD1mdW5jdGlvbihlLHQpe3ZhciBhPWMoZSx0KTtyZXR1cm4hIWEmJmEucmlnaHQ+PTAmJmEubGVmdDw9aSgpfSxlLmluWT1mdW5jdGlvbihlLHQpe3ZhciBhPWMoZSx0KTtyZXR1cm4hIWEmJmEuYm90dG9tPj0wJiZhLnRvcDw9bCgpfSxlLmluVmlld3BvcnQ9ZnVuY3Rpb24oZSx0KXt2YXIgYT1jKGUsdCk7cmV0dXJuISFhJiZhLmJvdHRvbT49MCYmYS5yaWdodD49MCYmYS50b3A8PWwoKSYmYS5sZWZ0PD1pKCl9LGV9LGUuZXhwb3J0cz9lLmV4cG9ydHM9cigpOm8udmVyZ2U9cigpfSxmdW5jdGlvbihlLHQsYSl7InVzZSBzdHJpY3QiO2Eucih0KSxhLmQodCwiUGxhY2VtZW50IiwoZnVuY3Rpb24oKXtyZXR1cm4geH0pKSxhLmQodCwiY2hlY2tfZGVwZW5kZW5jaWVzIiwoZnVuY3Rpb24oKXtyZXR1cm4ga30pKSxhLmQodCwibG9hZF9wbGFjZW1lbnRzIiwoZnVuY3Rpb24oKXtyZXR1cm4gX30pKSxhLmQodCwidW5sb2FkX3BsYWNlbWVudHMiLChmdW5jdGlvbigpe3JldHVybiBqfSkpLGEuZCh0LCJzZXRfdmVyYm9zaXR5IiwoZnVuY3Rpb24oKXtyZXR1cm4gU30pKSxhLmQodCwid2FpdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEF9KSksYS5kKHQsImxvYWQiLChmdW5jdGlvbigpe3JldHVybiBFfSkpLGEuZCh0LCJyZWxvYWQiLChmdW5jdGlvbigpe3JldHVybiB6fSkpLGEuZCh0LCJ1cGxpZnRlZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIE99KSksYS5kKHQsImRldGVjdGVkS2V5d29yZHMiLChmdW5jdGlvbigpe3JldHVybiBDfSkpO3ZhciBvPWEoMCkscj1hLm4obyk7YSgyKTtmdW5jdGlvbiBuKGUpe3JldHVybihuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gaShlLHQsYSl7cmV0dXJuIHQ9dSh0KSxmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0oZSxjKCk/UmVmbGVjdC5jb25zdHJ1Y3QodCxhfHxbXSx1KGUpLmNvbnN0cnVjdG9yKTp0LmFwcGx5KGUsYSkpfWZ1bmN0aW9uIGwoZSl7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIE1hcD9uZXcgTWFwOnZvaWQgMDtyZXR1cm4obD1mdW5jdGlvbihlKXtpZihudWxsPT09ZXx8IWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4tMSE9PUZ1bmN0aW9uLnRvU3RyaW5nLmNhbGwoZSkuaW5kZXhPZigiW25hdGl2ZSBjb2RlXSIpfWNhdGNoKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlfX0oZSkpcmV0dXJuIGU7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtpZih2b2lkIDAhPT10KXtpZih0LmhhcyhlKSlyZXR1cm4gdC5nZXQoZSk7dC5zZXQoZSxhKX1mdW5jdGlvbiBhKCl7cmV0dXJuIGQoZSxhcmd1bWVudHMsdSh0aGlzKS5jb25zdHJ1Y3Rvcil9cmV0dXJuIGEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTphLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHMoYSxlKX0pKGUpfWZ1bmN0aW9uIGQoZSx0LGEpe2lmKGMoKSlyZXR1cm4gUmVmbGVjdC5jb25zdHJ1Y3QuYXBwbHkobnVsbCxhcmd1bWVudHMpO3ZhciBvPVtudWxsXTtvLnB1c2guYXBwbHkobyx0KTt2YXIgcj1uZXcoZS5iaW5kLmFwcGx5KGUsbykpO3JldHVybiBhJiZzKHIsYS5wcm90b3R5cGUpLHJ9ZnVuY3Rpb24gYygpe3RyeXt2YXIgZT0hQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKX1jYXRjaChlKXt9cmV0dXJuKGM9ZnVuY3Rpb24oKXtyZXR1cm4hIWV9KSgpfWZ1bmN0aW9uIHMoZSx0KXtyZXR1cm4ocz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfWZ1bmN0aW9uIHUoZSl7cmV0dXJuKHU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX1mdW5jdGlvbiBwKGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBmKGUpfShlKXx8ZnVuY3Rpb24oZSl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9ZVsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8ZnVuY3Rpb24oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGYoZSx0KTt2YXIgYT17fS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09YSYmZS5jb25zdHJ1Y3RvciYmKGE9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PWF8fCJTZXQiPT09YT9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09YXx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QoYSk/ZihlLHQpOnZvaWQgMH19KGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIGYoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIGE9MCxvPUFycmF5KHQpO2E8dDthKyspb1thXT1lW2FdO3JldHVybiBvfWZ1bmN0aW9uIG0oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBoKGUsdCl7Zm9yKHZhciBhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBvPXRbYV07by5lbnVtZXJhYmxlPW8uZW51bWVyYWJsZXx8ITEsby5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG8mJihvLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx5KG8ua2V5KSxvKX19ZnVuY3Rpb24gZyhlLHQsYSl7cmV0dXJuIHQmJmgoZS5wcm90b3R5cGUsdCksYSYmaChlLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9ZnVuY3Rpb24geShlKXt2YXIgdD1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT1uKGUpfHwhZSlyZXR1cm4gZTt2YXIgYT1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIG89YS5jYWxsKGUsdHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9bihvKSlyZXR1cm4gbzt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikoZSl9KGUsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT1uKHQpP3Q6dCsiIn12YXIgdj17cXVpZXQ6MCxub3JtYWw6MSx2ZXJib3NlOjJ9LGI9e3ZlcmJvc2l0eTp2Lm5vcm1hbCxkZWJ1ZzpmdW5jdGlvbihlKXtpZih0aGlzLnZlcmJvc2l0eT49di52ZXJib3NlKXtmb3IodmFyIHQsYT1hcmd1bWVudHMubGVuZ3RoLG89bmV3IEFycmF5KGE+MT9hLTE6MCkscj0xO3I8YTtyKyspb1tyLTFdPWFyZ3VtZW50c1tyXTsodD1jb25zb2xlKS5kZWJ1Zy5hcHBseSh0LFtlXS5jb25jYXQobykpfX0saW5mbzpmdW5jdGlvbihlKXtpZih0aGlzLnZlcmJvc2l0eT49di52ZXJib3NlKXtmb3IodmFyIHQsYT1hcmd1bWVudHMubGVuZ3RoLG89bmV3IEFycmF5KGE+MT9hLTE6MCkscj0xO3I8YTtyKyspb1tyLTFdPWFyZ3VtZW50c1tyXTsodD1jb25zb2xlKS5pbmZvLmFwcGx5KHQsW2VdLmNvbmNhdChvKSl9fSx3YXJuOmZ1bmN0aW9uKGUpe2lmKHRoaXMudmVyYm9zaXR5Pj12Lm5vcm1hbCl7Zm9yKHZhciB0LGE9YXJndW1lbnRzLmxlbmd0aCxvPW5ldyBBcnJheShhPjE/YS0xOjApLHI9MTtyPGE7cisrKW9bci0xXT1hcmd1bWVudHNbcl07KHQ9Y29uc29sZSkud2Fybi5hcHBseSh0LFtlXS5jb25jYXQobykpfX0sZXJyb3I6ZnVuY3Rpb24oZSl7aWYodGhpcy52ZXJib3NpdHk+PXYucXVpZXQpe2Zvcih2YXIgdCxhPWFyZ3VtZW50cy5sZW5ndGgsbz1uZXcgQXJyYXkoYT4xP2EtMTowKSxyPTE7cjxhO3IrKylvW3ItMV09YXJndW1lbnRzW3JdOyh0PWNvbnNvbGUpLmVycm9yLmFwcGx5KHQsW2VdLmNvbmNhdChvKSl9fX0sdz1uZXcgU2V0KFsiMmZhIiwiYWkiLCJhaXJmbG93IiwiYWxnb2xpYSIsImFuZHJvaWQiLCJhbmd1bGFyIiwiYW5ndWxhcmpzIiwiYW5zaWJsZSIsImFwaSIsImFwcGVuZ2luZSIsImFwcC1lbmdpbmUiLCJhcmFuZ29kYiIsImFydGlmaWNpYWwtaW50ZWxsaWdlbmNlIiwiYXNwLW5ldCIsImF1dGgwIiwiYXV0aGVudGljYXRpb24iLCJhdXRob3JpemF0aW9uIiwiYXdzIiwiYXp1cmUiLCJiYWJlbCIsImJhY2tlbmQiLCJiYWNrZW5kLXdlYiIsImJheWVzIiwiYmF5ZXNpYW4iLCJiaWxsaW5nIiwiYml0Y29pbiIsImJsZW5kZXIiLCJibG9ja2NoYWluIiwiY2VsZXJ5IiwiY2hhcnRqcyIsImNoYXRib3QiLCJjaGF0Ym90cyIsImNoYXRncHQiLCJjaGF0Z3B0MyIsImNoYXRncHQ0IiwiY2kiLCJjaWNkIiwiY2ktY2QiLCJjbGFzc2lmaWVyIiwiY2xvdWQiLCJjbG91ZGZvcm1hdGlvbiIsImNsb3VkLWZvcm1hdGlvbiIsImNsb3VkZnJvbnQiLCJjbHVzdGVyaW5nIiwiY29ja3JvYWNoZGIiLCJjb21tb25qcyIsImNvbXB1dGVyLXZpc2lvbiIsImNvbnRhaW5lciIsImNvbnRhaW5lcnMiLCJjb250aW51b3VzZGVwbG95bWVudCIsImNvbnRpbnVvdXMtZGVwbG95bWVudCIsImNvbnRpbnVvdXNpbnRlZ3JhdGlvbiIsImNvbnRpbnVvdXMtaW50ZWdyYXRpb24iLCJjb3Jkb3ZhIiwiY3BsdXNwbHVzIiwiY3J5cHRvY3VycmVuY3kiLCJjcnlwdG9ncmFwaHkiLCJjc2hhcnAiLCJjLXNoYXJwIiwiY3NzIiwiY3NzaW5qcyIsImN1ZGEiLCJjdmUiLCJjeWJlci1hdHRhY2siLCJjeWJlcnNlY3VyaXR5IiwiY3liZXItc2VjdXJpdHkiLCJkM2pzIiwiZGFsbGUiLCJkYWxsLWUiLCJkYW8iLCJkYXBwIiwiZGF0YWFuYWx5dGljcyIsImRhdGEtYW5hbHl0aWNzIiwiZGF0YWJhc2UiLCJkYXRhZG9nIiwiZGF0YWxha2UiLCJkYXRhLWxha2UiLCJkYXRhbWVzaCIsImRhdGEtbWVzaCIsImRhdGFzY2llbmNlIiwiZGF0YS1zY2llbmNlIiwiZGF0YXNjaWVudGlzdCIsImRhdGEtc2NpZW50aXN0IiwiZGF0YS12aXN1YWxpemF0aW9uIiwiZGF0YS13YXJlaG91c2UiLCJkZWNyeXB0aW9uIiwiZGVlcGxlYXJuaW5nIiwiZGVlcC1sZWFybmluZyIsImRlZXByZWluZm9yY2VtZW50IiwiZGVlcC1yZWluZm9yY2VtZW50IiwiZGVmaSIsImRldm9wcyIsImRqYW5nbyIsImRqYW5nb3Jlc3RmcmFtZXdvcmsiLCJkamFuZ28tcmVzdC1mcmFtZXdvcmsiLCJkbnNzZWMiLCJkb2NrZXIiLCJkb2NrZXJodWIiLCJkb2NrZXItaHViIiwiZG9ja2VyaXppbmciLCJkb2dlY29pbiIsImRvdG5ldCIsImR1Y2tkYiIsImVsYXN0aWNzZWFyY2giLCJlbGFzdGljLXNlYXJjaCIsImVtYmVyanMiLCJlcmxhbmciLCJlczYiLCJlc2xpbnQiLCJldGhlcmV1bSIsImV4cHJlc3MiLCJmYWNlZGV0ZWN0aW9uIiwiZmFjZS1kZXRlY3Rpb24iLCJmaWRkbGVyIiwiZmlyZWJhc2UiLCJmaXJld2FsbCIsImZsYXNrIiwiZnJvbnRlbmQiLCJmcm9udGVuZC13ZWIiLCJmc2hhcnAiLCJmdWxsLXN0YWNrIiwiZ2FtZSIsImdhbWVkZXYiLCJnYXRzYnlqcyIsImdjcCIsImdpdGd1YXJkaWFuIiwiZ29kb3QiLCJnb2xhbmciLCJnb29nbGUtY2xvdWQiLCJncHQiLCJncmFmYW5hIiwiZ3JhaWxzIiwiZ3JhcGhxbCIsImhhY2tpbmciLCJoYXNrZWxsIiwiaGVyb2t1IiwiaHlwZXJsZWRnZXIiLCJpbmRpZWdhbWUiLCJpbmRpZS1nYW1lIiwiaW5mbHV4ZGIiLCJpbmZvc2VjIiwiaW52b2ljZSIsImlvbmljIiwiaW9zIiwiaXBmcyIsImlwaG9uZSIsImphdmEiLCJqYXZhc2NyaXB0IiwiamVua2lucyIsImpmcm9nIiwiamluamEiLCJqcXVlcnkiLCJqdWxpYSIsImp1cHl0ZXIiLCJqdm0iLCJrYWZrYSIsImstbWVhbnMtY2x1c3RlcmluZyIsImtvdGxpbiIsImt1YmVybmV0ZXMiLCJsYXJhdmVsIiwibGludCIsImxpbnV4IiwibGxtIiwibGxtcyIsImxvZzRqIiwibHVjZW5lIiwibWFjaGluZWxlYXJuaW5nIiwibWFjaGluZS1sZWFybmluZyIsIm1hcmlhZGIiLCJtYXRsYWIiLCJtYXRwbG90bGliIiwibWF2ZW4iLCJtZXRhYmFzZSIsIm1mYSIsIm1pZGpvdXJuZXkiLCJtaW5lY3JhZnQiLCJta2RvY3MiLCJtbCIsIm1vYmlsZSIsIm1vZGVsLXRyYWluaW5nIiwibW9uZ29kYiIsIm1vbml0b3JpbmciLCJtb250ZWNhcmxvIiwibW9udGUtY2FybG8iLCJteXNxbCIsIm5haXZlYmF5ZXMiLCJuYWl2ZS1iYXllcyIsIm5lbzRqIiwibmV1cmFsbmV0IiwibmV1cmFsLW5ldCIsIm5ldXJhbC1uZXRzIiwibmV1cmFsbmV0d29ya3MiLCJuZXVyYWwtbmV0d29ya3MiLCJuZXdyZWxpYyIsIm5ldy1yZWxpYyIsIm5mdCIsIm5naW54IiwibmxwIiwibm9kZSIsIm5vZGVqcyIsIm5vc3FsIiwibnVtcHkiLCJudXh0IiwibnV4dGpzIiwib2F1dGgiLCJvYmotYyIsIm9iamVjdGRldGVjdGlvbiIsIm9iamVjdC1kZXRlY3Rpb24iLCJvcGVuYWkiLCJvcGVuY3YtcHl0aG9uLWxpYnJhcnkiLCJvcGVuaWQiLCJvcGVuaWQtY29ubmVjdCIsIm9wZW5qZGsiLCJvcGVuc2hpZnQiLCJvcGVuc3NsIiwib3RwIiwib3ZlcmZpdHRpbmciLCJvd2FzcCIsInBhbmRhcyIsInBheW1lbnQiLCJwYXltZW50cyIsInBheXBhbCIsInBlbmV0cmF0aW9uLXRlc3QiLCJwZW50ZXN0IiwicGVybCIsInBoaXNoaW5nIiwicGhvbmVnYXAiLCJwaHAiLCJwaXAiLCJwb3N0Y3NzIiwicG9zdGdyZXMiLCJwb3N0Z3Jlc3FsIiwicHJpdmFjeSIsInBzZiIsInB3YSIsInB5ZGF0YSIsInB5Z2FtZSIsInB5bGludCIsInB5cGkiLCJweXRlc3QiLCJweXRob24iLCJweXRvcmNoIiwicHl0b3JjaDNkIiwicmFiYml0bXEiLCJyYWlscyIsInJkYm1zIiwicmRzIiwicmVhY3QiLCJyZWFjdGpzIiwicmVhY3QtbmF0aXZlIiwicmVkaXMiLCJyZWR1eCIsInJlZ3Jlc3Npb24iLCJyZWdyZXNzaW9ubW9kZWwiLCJyZWdyZXNzaW9uLW1vZGVsIiwicmVpbmZvcmNlbWVudC1sZWFybmluZyIsInJvbGxiYXIiLCJydWJ5IiwicnVzdCIsInNhbHRzdGFjayIsInNjYWxhIiwic2Npa2l0bGVhcm4iLCJzY2lraXQtbGVhcm4iLCJzY2lweSIsInNjc3MiLCJzZWN1cml0eSIsInNlY3VyaXR5dnVsbmVyYWJpbGl0aWVzIiwic2VjdXJpdHktdnVsbmVyYWJpbGl0aWVzIiwic2VsZW5pdW0iLCJzZWxpbnV4Iiwic2VuY2hhIiwic2VudGltZW50LWFuYWx5c2lzIiwic2VudHJ5Iiwic2VydmVybGVzcyIsInNpbmdsZS1wYWdlLWFwcGxpY2F0aW9uIiwic2tsZWFybiIsInNtYXJ0cGhvbmUiLCJzbXMiLCJzbm93Zmxha2UiLCJzbnlrIiwic29sYW5hIiwic29saWRpdHkiLCJzb2xyIiwic3BhIiwic3BhY3kiLCJzcGhpbngiLCJzcGhpbngtZG9jIiwic3ByaW5nIiwic3FsIiwic3FsaXRlIiwic3Fsc2VydmVyIiwic3FsLXNlcnZlciIsInN0cmlwZSIsInN0cnV0cyIsInN1YnNjcmlwdGlvbnMiLCJzdmVsdGUiLCJzdmVsdGVqcyIsInN3aWZ0Iiwic3ltZm9ueSIsInRhYmxlYXUiLCJ0YWlsd2luZCIsInRhaWx3aW5kY3NzIiwidGFpbHdpbmQtY3NzIiwidGRkIiwidGVjaG5pY2FsLXdyaXRpbmciLCJ0ZW5zb3IiLCJ0ZW5zb3JmbG93IiwidGVuc29yZmxvd2pzIiwidGVycmFmb3JtIiwidGVzdC1kcml2ZW4tZGV2ZWxvcG1lbnQiLCJ0ZXN0aW5nIiwidGVzdHMiLCJ0ZXh0YWN5IiwidGltZXNjYWxlIiwidGltZXNlcmllcyIsInRyYWluaW5nLWRhdGEiLCJ0cmFuc2Zvcm1lcnMiLCJ0cmF2aXNjaSIsInR3aWxpbyIsInR3by1mYWN0b3ItYXV0aCIsInR3by1mYWN0b3ItYXV0aGVudGljYXRpb24iLCJ0eXBlc2NyaXB0IiwidWJ1bnR1IiwidW5pdHRlc3QiLCJ1bml0eSIsInZpc2lvbi1hcGkiLCJ2aXN1YWxpemF0aW9uIiwidnVlIiwidnVlanMiLCJ2dWV0aWZ5IiwidnVleCIsInZ1bG5lcmFiaWxpdHkiLCJ3YWYiLCJ3ZWIzIiwid2ViYXBwLWZpcmV3YWxsIiwid2ViYXBwbGljYXRpb25maXJld2FsbCIsIndlYi1hcHBsaWNhdGlvbi1maXJld2FsbCIsIndlYmNvbXBvbmVudHMiLCJ3ZWItY29tcG9uZW50cyIsIndlYnBhY2siLCJ3ZWJzZWN1cml0eSIsIndlYi1zZWN1cml0eSIsIndlcmt6ZXVnIiwid2lyZXNoYXJrIiwid3NnaSIsInlhcm4iLCJ6YXBpZXIiXSkseD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxhLG8scil7bSh0aGlzLGUpLHRoaXMucHVibGlzaGVyPXQsdGhpcy5hZF90eXBlPWEsdGhpcy50YXJnZXQ9byx0aGlzLm9wdGlvbnM9cix0aGlzLnN0eWxlPXIuc3R5bGUsdGhpcy5rZXl3b3Jkcz1yLmtleXdvcmRzfHxbXSx0aGlzLmxvYWRfbWFudWFsbHk9ci5sb2FkX21hbnVhbGx5LHRoaXMuZm9yY2VfYWQ9ci5mb3JjZV9hZCx0aGlzLmZvcmNlX2NhbXBhaWduPXIuZm9yY2VfY2FtcGFpZ24sdGhpcy5jYW1wYWlnbl90eXBlcz1yLmNhbXBhaWduX3R5cGVzfHxbXSx0aGlzLmNhbXBhaWduX3R5cGVzLmxlbmd0aHx8KHRoaXMuY2FtcGFpZ25fdHlwZXM9WyJwYWlkIiwicHVibGlzaGVyLWhvdXNlIiwiY29tbXVuaXR5IiwiaG91c2UiXSksdGhpcy5wcmlvcml0eT1yLnByaW9yaXR5fHxudWxsLHRoaXMuZGl2X2lkPW8uaWR8fCJhZF8iK0RhdGUubm93KCkrIl8iK01hdGguZmxvb3IoMWU5Kk1hdGgucmFuZG9tKCkpLHRoaXMudmlld190aW1lPTAsdGhpcy52aWV3X3RpbWVfc2VudD0hMSx0aGlzLnJlc3BvbnNlPW51bGwsdGhpcy50YWJfaGlkZGVuPSExLHRoaXMucm90YXRpb25zPTEsdGhpcy5pbmRleD1udWxsfXJldHVybiBnKGUsW3trZXk6ImxvYWQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO3JldHVybiB0aGlzLmtleXdvcmRzPXRoaXMua2V5d29yZHMuY29uY2F0KHRoaXMuZGV0ZWN0S2V5d29yZHMoKSksKHQ9dHx8dGhpcy5mZXRjaCgpKS50aGVuKChmdW5jdGlvbih0KXtpZih2b2lkIDA9PT10KXRocm93IG5ldyBNKCJBZCBkZWNpc2lvbiByZXF1ZXN0IGJsb2NrZWQgb3IgaW52YWxpZC4iKTtpZighdCl0aHJvdyBuZXcgTSgiTm8gYWRzIHRvIHNob3cuIik7dmFyIGE9ZS50YXJnZXQuY2xhc3NOYW1lfHwiIjtmb3IoYSs9IiBsb2FkZWQiLGUudGFyZ2V0LmNsYXNzTmFtZT1hLnRyaW0oKTtlLnRhcmdldC5maXJzdENoaWxkOyllLnRhcmdldC5yZW1vdmVDaGlsZChlLnRhcmdldC5maXJzdENoaWxkKTtyZXR1cm4gZS5hcHBseVN0eWxlcyh0KSxlLnRhcmdldC5hcHBlbmRDaGlsZCh0KSxlfSkpLnRoZW4oKGZ1bmN0aW9uKHQpe3ZhciBhPXNldEludGVydmFsKChmdW5jdGlvbihlKXtpZih0LmluVmlld3BvcnQoZSkpe3ZhciBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpO28uc3JjPXQucmVzcG9uc2Uudmlld191cmwsTyYmKG8uc3JjKz0iP3VwbGlmdD10cnVlIiksby5jbGFzc05hbWU9ImVhLXBpeGVsIixlLmFwcGVuZENoaWxkKG8pLGNsZWFySW50ZXJ2YWwoYSl9fSksMTAwLHQudGFyZ2V0KTtyZXR1cm4gdC52aWV3X3RpbWVfY291bnRlcj1zZXRJbnRlcnZhbCgoZnVuY3Rpb24oZSl7ITE9PT10LnRhYl9oaWRkZW4mJnQuaW5WaWV3cG9ydChlKSYmKHQudmlld190aW1lKz0xLHQudmlld190aW1lPj0zMDAmJmNsZWFySW50ZXJ2YWwodC52aWV3X3RpbWVfY291bnRlcikpfSksMWUzLHQudGFyZ2V0KSx0Lmhhc2hjaGFuZ2VfbGlzdGVuZXI9ZnVuY3Rpb24oKXt0LmNhblJvdGF0ZSgpJiYodC5zZW5kVmlld1RpbWUoKSx0LnJvdGF0ZSgpKX0sd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImhhc2hjaGFuZ2UiLHQuaGFzaGNoYW5nZV9saXN0ZW5lciksdC52aXNpYmlsaXR5Y2hhbmdlX2xpc3RlbmVyPWZ1bmN0aW9uKCl7ImhpZGRlbiIhPT1kb2N1bWVudC52aXNpYmlsaXR5U3RhdGUmJiJ1bmxvYWRlZCIhPT1kb2N1bWVudC52aXNpYmlsaXR5U3RhdGV8fCh0LnRhYl9oaWRkZW49ITAsdC5zZW5kVmlld1RpbWUoKSksITA9PT10LnRhYl9oaWRkZW4mJiJ2aXNpYmxlIj09PWRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSYmKHQudGFiX2hpZGRlbj0hMSx0LmNhblJvdGF0ZSgpJiYodC5zZW5kVmlld1RpbWUoKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe3Qucm90YXRlKCl9KSwzZTMpKSl9LGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHQudmlzaWJpbGl0eWNoYW5nZV9saXN0ZW5lciksZX0pKX19LHtrZXk6ImNsZWFyTGlzdGVuZXJzIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMudmlld190aW1lX2NvdW50ZXImJmNsZWFySW50ZXJ2YWwodGhpcy52aWV3X3RpbWVfY291bnRlciksdGhpcy5oYXNoY2hhbmdlX2xpc3RlbmVyJiZ3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsdGhpcy5oYXNoY2hhbmdlX2xpc3RlbmVyKSx0aGlzLnZpc2liaWxpdHljaGFuZ2VfbGlzdGVuZXImJmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHRoaXMudmlzaWJpbGl0eWNoYW5nZV9saXN0ZW5lcil9fSx7a2V5OiJjYW5Sb3RhdGUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuISghdGhpcy5pblZpZXdwb3J0KHRoaXMudGFyZ2V0KXx8dGhpcy52aWV3X3RpbWU8NDV8fHRoaXMucm90YXRpb25zPj0zKX19LHtrZXk6InJvdGF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmNhblJvdGF0ZSgpKXJldHVybiBiLmRlYnVnKCJSb3RhdGluZyBhZCIpLHRoaXMuY2xlYXJMaXN0ZW5lcnMoKSx0aGlzLnZpZXdfdGltZT0wLHRoaXMudmlld190aW1lX3NlbnQ9ITEsdGhpcy5yZXNwb25zZT1udWxsLHRoaXMudGFiX2hpZGRlbj0hMSx0aGlzLnJvdGF0aW9ucys9MSx0aGlzLmxvYWQoKX19LHtrZXk6ImluVmlld3BvcnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiEhKHRoaXMucmVzcG9uc2UmJnRoaXMucmVzcG9uc2Uudmlld191cmwmJnIuYS5pblZpZXdwb3J0KGUsLTMpJiYidmlzaWJsZSI9PT1kb2N1bWVudC52aXNpYmlsaXR5U3RhdGUpfX0se2tleToiZmV0Y2giLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PSJhZF8iK0RhdGUubm93KCkrIl8iK01hdGguZmxvb3IoMWU2Kk1hdGgucmFuZG9tKCkpLGE9dGhpcy5kaXZfaWQsbz17cHVibGlzaGVyOnRoaXMucHVibGlzaGVyLGFkX3R5cGVzOnRoaXMuYWRfdHlwZSxkaXZfaWRzOmEsY2FsbGJhY2s6dCxrZXl3b3Jkczp0aGlzLmtleXdvcmRzLmpvaW4oInwiKSxjYW1wYWlnbl90eXBlczp0aGlzLmNhbXBhaWduX3R5cGVzLmpvaW4oInwiKSxmb3JtYXQ6Impzb25wIixjbGllbnRfdmVyc2lvbjoiMi40LjAiLHBsYWNlbWVudF9pbmRleDp0aGlzLmluZGV4LHVybDood2luZG93LmxvY2F0aW9uLm9yaWdpbit3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUpLnNsaWNlKDAsMjU2KX07dGhpcy5mb3JjZV9hZCYmKG8uZm9yY2VfYWQ9dGhpcy5mb3JjZV9hZCksdGhpcy5mb3JjZV9jYW1wYWlnbiYmKG8uZm9yY2VfY2FtcGFpZ249dGhpcy5mb3JjZV9jYW1wYWlnbiksdGhpcy5yb3RhdGlvbnM+MSYmKG8ucm90YXRpb25zPXRoaXMucm90YXRpb25zKTt2YXIgcj1uZXcgVVJMU2VhcmNoUGFyYW1zKG8pLG49bmV3IFVSTCgiaHR0cHM6Ly9zZXJ2ZXIuZXRoaWNhbGFkcy5pby9hcGkvdjEvZGVjaXNpb24vPyIrci50b1N0cmluZygpKTtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGEsbyl7d2luZG93W3RdPWZ1bmN0aW9uKHQpe2lmKHQmJnQuaHRtbCYmdC52aWV3X3VybCl7ZS5yZXNwb25zZT10O3ZhciBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBvLmlubmVySFRNTD10Lmh0bWwsYShvLmZpcnN0Q2hpbGQpfXJldHVybiBhKG51bGwpfTt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtyLnNyYz1uLHIudHlwZT0idGV4dC9qYXZhc2NyaXB0IixyLmFzeW5jPSEwLHIuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLChmdW5jdGlvbihlKXtyZXR1cm4gYSgpfSkpLGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0uYXBwZW5kQ2hpbGQocil9KSl9fSx7a2V5OiJzZW5kVmlld1RpbWUiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoISh0aGlzLnZpZXdfdGltZTw9MHx8dGhpcy52aWV3X3RpbWVfc2VudCkmJnRoaXMucmVzcG9uc2UmJnRoaXMucmVzcG9uc2Uudmlld190aW1lX3VybCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7ZS5zcmM9dGhpcy5yZXNwb25zZS52aWV3X3RpbWVfdXJsKyI/dmlld190aW1lPSIrdGhpcy52aWV3X3RpbWUsZS5jbGFzc05hbWU9ImVhLXBpeGVsIix0aGlzLnRhcmdldC5hcHBlbmRDaGlsZChlKSx0aGlzLnZpZXdfdGltZV9zZW50PSEwfX19LHtrZXk6ImRldGVjdEFCUCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgYT0hMSxvPTIscj0hMSxuPSExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KXtlKz0iP2NoPSomcm49KiI7dmFyIGk9MTEqTWF0aC5yYW5kb20oKSxsPW5ldyBJbWFnZTtsLm9ubG9hZD1jLGwub25lcnJvcj1mdW5jdGlvbigpe3I9ITAsYygpfSxsLnNyYz1lLnJlcGxhY2UoL1wqLywxKS5yZXBsYWNlKC9cKi8saSk7dmFyIGQ9bmV3IEltYWdlO2Qub25sb2FkPWMsZC5vbmVycm9yPWZ1bmN0aW9uKCl7bj0hMCxjKCl9LGQuc3JjPWUucmVwbGFjZSgvXCovLDIpLnJlcGxhY2UoL1wqLyxpKSxmdW5jdGlvbiBlKHQscil7MD09b3x8cj4xZTM/dCgwPT1vJiZhKTpzZXRUaW1lb3V0KChmdW5jdGlvbigpe2UodCwyKnIpfSksMipyKX0odCwyNTApfWZ1bmN0aW9uIGMoKXstLW98fChhPSFyJiZuKX19fSx7a2V5OiJkZXRlY3RLZXl3b3JkcyIsdmFsdWU6ZnVuY3Rpb24oKXtpZihDKXJldHVybiBDO2Zvcih2YXIgZT17fSx0PShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJbcm9sZT0nbWFpbiddIil8fGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIm1haW4iKXx8ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiYm9keSIpKS50ZXh0Q29udGVudC5zcGxpdCgvXHMrLyksYT0vXltcKCciXT8oLio/KVssXC5cP1whOjtcKSciXT8kL2csbz0wO288dC5sZW5ndGgmJm88OTk5OTtvKyspe3ZhciByPXRbb10ucmVwbGFjZShhLCIkMSIpLnRvTG93ZXJDYXNlKCk7dy5oYXMocikmJihlW3JdPShlW3JdfHwwKSsxKX12YXIgbj1PYmplY3QuZW50cmllcyhlKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlWzFdPj0yfSkpLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbMV0+dFsxXT8tMTplWzFdPHRbMV0/MTowfSkpLnNsaWNlKDAsMykubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZVswXX0pKTtyZXR1cm4gQz1uLG59fSx7a2V5OiJhcHBseVN0eWxlcyIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoInN0aWNreWJveCI9PT10aGlzLnN0eWxlKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0LnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJlYS1zdGlja3lib3gtaGlkZSIpLHQuaW5uZXJIVE1MPSImIzIxNTsiLHQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLChmdW5jdGlvbigpe2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIltkYXRhLWVhLXB1Ymxpc2hlcl0iKS5yZW1vdmUoKX0pKSxlLmFwcGVuZENoaWxkKHQpfWlmKCJmaXhlZGZvb3RlciI9PT10aGlzLnN0eWxlKXt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTthLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJlYS1maXhlZGZvb3Rlci1oaWRlIiksZS5hcHBlbmRDaGlsZChhKTt2YXIgbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7by5hcHBlbmQoIkNsb3NlIEFkIiksby5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKGZ1bmN0aW9uKCl7ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiW2RhdGEtZWEtcHVibGlzaGVyXSIpLnJlbW92ZSgpfSkpLGEuYXBwZW5kQ2hpbGQobyl9fX1dLFt7a2V5OiJmcm9tX2VsZW1lbnQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBhPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWVhLXB1Ymxpc2hlciIpO2lmKCFhKXJldHVybiBiLmRlYnVnKCJNaXNzaW5nIHB1Ymxpc2hlciB2YWx1ZS4gU2tpcHBpbmcuLi4iKSxudWxsO3ZhciBvPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWVhLXR5cGUiKTtvfHwobz0iaW1hZ2UiLHQuc2V0QXR0cmlidXRlKCJkYXRhLWVhLXR5cGUiLCJpbWFnZSIpKTt2YXIgcixuPSh0LmdldEF0dHJpYnV0ZSgiZGF0YS1lYS1rZXl3b3JkcyIpfHwiIikuc3BsaXQoInwiKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmxlbmd0aD4xfSkpLGk9KHQuZ2V0QXR0cmlidXRlKCJkYXRhLWVhLWNhbXBhaWduLXR5cGVzIil8fCIiKS5zcGxpdCgifCIpLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUubGVuZ3RoPjF9KSksbD0idHJ1ZSI9PT10LmdldEF0dHJpYnV0ZSgiZGF0YS1lYS1tYW51YWwiKSxkPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWVhLXN0eWxlIiksYz10LmdldEF0dHJpYnV0ZSgiZGF0YS1lYS1mb3JjZS1hZCIpLHM9dC5nZXRBdHRyaWJ1dGUoImRhdGEtZWEtZm9yY2UtY2FtcGFpZ24iKSx1PXQuZ2V0QXR0cmlidXRlKCJkYXRhLWVhLXByaW9yaXR5Iik7aWYobnVsbCE9PXUmJiIiIT09dSl7dmFyIHA9cGFyc2VJbnQodSwxMCk7IU51bWJlci5pc05hTihwKSYmcD49MSYmcDw9MTA/cj1wOmIud2FybigiRXRoaWNhbEFkOiBJbnZhbGlkIG51bWVyaWNhbCBwcmlvcml0eSAnJXMnIHByb3ZpZGVkOyBpZ25vcmluZy4iLHUpfWlmKCJpbWFnZSIhPT1vJiYidGV4dCIhPT1vfHwobys9Ii12MSIpLCh0LmNsYXNzTmFtZXx8IiIpLnNwbGl0KCIgIikuaW5kZXhPZigibG9hZGVkIik+PTApcmV0dXJuIGIud2FybigiRXRoaWNhbEFkIGFscmVhZHkgbG9hZGVkLiIpLG51bGw7dmFyIGY9dC5nZXRBdHRyaWJ1dGUoImRhdGEtZWEtcGxhY2VtZW50LWJvdHRvbSIpO3JldHVybiBmJiZ0LnN0eWxlLnNldFByb3BlcnR5KCJib3R0b20iLGYpLG5ldyBlKGEsbyx0LHtrZXl3b3JkczpuLHN0eWxlOmQsY2FtcGFpZ25fdHlwZXM6aSxsb2FkX21hbnVhbGx5OmwsZm9yY2VfYWQ6Yyxmb3JjZV9jYW1wYWlnbjpzLHByaW9yaXR5OnJ9KX19LHtrZXk6ImxvYWRHcm91cCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQsYTtpZighZXx8IWUubGVuZ3RoKXJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO3ZhciBvPWVbMF0ucHVibGlzaGVyO2lmKCFlLmV2ZXJ5KChmdW5jdGlvbihlKXtyZXR1cm4gZS5wdWJsaXNoZXI9PT1vfSkpKXRocm93IG5ldyBFcnJvcigiTXVsdGlwbGUgYWQgcGxhY2VtZW50cyB3aXRoIGRpZmZlcmVudCBwdWJsaXNoZXJzIGFyZSBub3QgYWxsb3dlZC4iKTt2YXIgcj0iYWRfIitEYXRlLm5vdygpKyJfIitNYXRoLmZsb29yKDFlOSpNYXRoLnJhbmRvbSgpKSxuPVtdO2UuZm9yRWFjaCgoZnVuY3Rpb24oZSl7QXJyYXkuaXNBcnJheShlLmtleXdvcmRzKXx8KGUua2V5d29yZHM9W10pLDA9PT1lLmtleXdvcmRzLmxlbmd0aCYmKGUua2V5d29yZHM9ZS5rZXl3b3Jkcy5jb25jYXQoZS5kZXRlY3RLZXl3b3JkcygpKSksbj1uLmNvbmNhdChlLmtleXdvcmRzKX0pKSxuPXAobmV3IFNldChuKSk7dmFyIGk9e3B1Ymxpc2hlcjpvLGFkX3R5cGVzOmUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5hZF90eXBlfSkpLmpvaW4oInwiKSxkaXZfaWRzOmUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kaXZfaWR9KSkuam9pbigifCIpLHByaW9yaXRpZXM6ZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnByaW9yaXR5fSkpLmpvaW4oInwiKSxjYWxsYmFjazpyLGtleXdvcmRzOm4uam9pbigifCIpLGNhbXBhaWduX3R5cGVzOnAobmV3IFNldChlLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb25jYXQodC5jYW1wYWlnbl90eXBlcyl9KSxbXSkpKS5qb2luKCJ8IiksZm9ybWF0OiJqc29ucCIsY2xpZW50X3ZlcnNpb246IjIuNC4wIix1cmw6KHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4rd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lKS5zbGljZSgwLDI1Nil9LGw9bnVsbD09PSh0PWUuZmluZCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZm9yY2VfYWR9KSkpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmZvcmNlX2FkO2wmJihpLmZvcmNlX2FkPWwpO3ZhciBkPW51bGw9PT0oYT1lLmZpbmQoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmZvcmNlX2NhbXBhaWdufSkpKXx8dm9pZCAwPT09YT92b2lkIDA6YS5mb3JjZV9jYW1wYWlnbjtkJiYoaS5mb3JjZV9jYW1wYWlnbj1kKTt2YXIgYz1NYXRoLm1heC5hcHBseShNYXRoLHAoZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJvdGF0aW9uc30pKSkpO2M+MSYmKGkucm90YXRpb25zPWMpO3ZhciBzPW5ldyBVUkxTZWFyY2hQYXJhbXMoaSksdT1uZXcgVVJMKCJodHRwczovL3NlcnZlci5ldGhpY2FsYWRzLmlvL2FwaS92MS9kZWNpc2lvbi8/IitzLnRvU3RyaW5nKCkpLGY9bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsdCl7d2luZG93W3JdPWZ1bmN0aW9uKHQpe2UodCl9O3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2Euc3JjPXUsYS50eXBlPSJ0ZXh0L2phdmFzY3JpcHQiLGEuYXN5bmM9ITAsYS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsKGZ1bmN0aW9uKHQpe2UoKX0pKSxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLmFwcGVuZENoaWxkKGEpfSkpLG09ITE7cmV0dXJuIFByb21pc2UuYWxsKGUubWFwKChmdW5jdGlvbihlLHQpe3ZhciBhPWYudGhlbigoZnVuY3Rpb24oYSl7dmFyIG89ITE7aWYoYSYmYS5odG1sJiZhLnZpZXdfdXJsJiYobT0hMCxvPWEuZGl2X2lkP2EuZGl2X2lkPT09ZS5kaXZfaWQ6MD09PXQpLG8pe2UucmVzcG9uc2U9YTt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gci5pbm5lckhUTUw9YS5odG1sLHIuZmlyc3RDaGlsZH1yZXR1cm4gbnVsbH0pKTtyZXR1cm4gZS5sb2FkKGEpLmNhdGNoKChmdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIE0/bXx8Yi53YXJuKGUubWVzc2FnZSk6Yi5lcnJvcihlLm1lc3NhZ2UpLG51bGx9KSl9KSkpfX1dKX0oKTtmdW5jdGlvbiBrKCl7cmV0dXJuISEoT2JqZWN0LmVudHJpZXMmJndpbmRvdy5VUkwmJndpbmRvdy5VUkxTZWFyY2hQYXJhbXMmJndpbmRvdy5Qcm9taXNlKXx8KGIuZXJyb3IoIkJyb3dzZXIgZG9lcyBub3QgbWVldCBldGhpY2FsIGFkIGNsaWVudCBkZXBlbmRlbmNpZXMuIE5vdCBzaG93aW5nIGFkcyIpLCExKX1mdW5jdGlvbiBfKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSx0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLWVhLXB1Ymxpc2hlcl0iKSxhPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpLG89bmV3IFNldDtpZihhLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0QXR0cmlidXRlKCJkYXRhLWVhLXB1Ymxpc2hlciIpO3QmJm8uYWRkKHQpfSkpLG8uc2l6ZT4xKXRocm93IG5ldyBFcnJvcigiTXVsdGlwbGUgYWQgcGxhY2VtZW50cyB3aXRoIGRpZmZlcmVudCBwdWJsaXNoZXJzIGFyZSBub3QgYWxsb3dlZC4iKTswPT09YS5sZW5ndGgmJmIud2FybigiTm8gYWQgcGxhY2VtZW50cyBmb3VuZC4iKTt2YXIgcj1hLm1hcCgoZnVuY3Rpb24oZSx0KXt2YXIgYT14LmZyb21fZWxlbWVudChlKTtyZXR1cm4gYT8oYS5pbmRleD10LGEpOm51bGx9KSksbj1yLmZpbmQoKGZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZX0pKTtuJiYhZSYmbi5kZXRlY3RBQlAoImh0dHBzOi8vbWVkaWEuZXRoaWNhbGFkcy5pby9hYnAvcHguZ2lmIiwoZnVuY3Rpb24oZSl7Tz1lLGUmJmIuZGVidWcoIkFjY2VwdGFibGUgQWRzIGVuYWJsZWQuIFRoYW5rcyBmb3IgYWxsb3dpbmcgb3VyIG5vbi10cmFja2luZyBhZHMgOikiKX0pKTt2YXIgaT1yLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBlJiZudWxsIT09ZS5wcmlvcml0eX0pKTtpZihpKXt2YXIgbD1bXTtyZXR1cm4gci5mb3JFYWNoKChmdW5jdGlvbih0KXshdHx8IWUmJnQubG9hZF9tYW51YWxseXx8KG51bGw9PT10LnByaW9yaXR5JiYodC5wcmlvcml0eT0xKSxsLnB1c2godCkpfSkpLGwubGVuZ3RoPjA/eC5sb2FkR3JvdXAobCk6UHJvbWlzZS5yZXNvbHZlKFtdKX1yZXR1cm4gUHJvbWlzZS5hbGwoci5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiF0fHwhZSYmdC5sb2FkX21hbnVhbGx5P251bGw6dC5sb2FkKCkuY2F0Y2goKGZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgTT9iLndhcm4oZS5tZXNzYWdlKTpiLmVycm9yKGUubWVzc2FnZSksbnVsbH0pKX0pKSl9ZnVuY3Rpb24gaigpe3ZhciBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLWVhLXB1Ymxpc2hlcl0iKTtBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlKS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmlubmVySFRNTD0iIixlLmNsYXNzTGlzdC5yZW1vdmUoImxvYWRlZCIpfSkpfWZ1bmN0aW9uIFMoKXt2YXIgZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJbZGF0YS1lYS1wdWJsaXNoZXJdIik7aWYoZSl7dmFyIHQ9ZS5nZXRBdHRyaWJ1dGUoImRhdGEtZWEtdmVyYm9zaXR5Iik7di5oYXNPd25Qcm9wZXJ0eSh0KSYmKGIudmVyYm9zaXR5PXZbdF0pfX12YXIgQSxFLHosTT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIG0odGhpcyx0KSxpKHRoaXMsdCxhcmd1bWVudHMpfXJldHVybiBmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZzKGUsdCl9KHQsZSksZyh0KX0obChFcnJvcikpLE89ITEsQz1udWxsO2lmKHdpbmRvdy5ldGhpY2FsYWRzJiZjb25zb2xlLndhcm4oIkRvdWJsZS1sb2FkaW5nIHRoZSBFdGhpY2FsQWRzIGNsaWVudC4gVXNlIHJlbG9hZCgpIGluc3RlYWQuIGh0dHBzOi8vZXRoaWNhbC1hZC1jbGllbnQucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0LyNzaW5nbGUtcGFnZS1hcHBzIiksaygpKXtTKCk7dmFyIFA9bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe2lmKCJpbnRlcmFjdGl2ZSI9PT1kb2N1bWVudC5yZWFkeVN0YXRlfHwiY29tcGxldGUiPT09ZG9jdW1lbnQucmVhZHlTdGF0ZSlyZXR1cm4gZSgpO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLChmdW5jdGlvbigpe2UoKX0pLHtjYXB0dXJlOiEwLG9uY2U6ITAscGFzc2l2ZTohMH0pfSkpO0E9bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe1AudGhlbigoZnVuY3Rpb24oKXtfKCkudGhlbigoZnVuY3Rpb24odCl7ZSh0LmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWV9KSkpfSkpLmNhdGNoKChmdW5jdGlvbih0KXtlKFtdKSx0IGluc3RhbmNlb2YgTT9iLndhcm4odC5tZXNzYWdlKTpiLmVycm9yKHQubWVzc2FnZSl9KSl9KSl9KSksRT1mdW5jdGlvbigpe2IuZGVidWcoIkxvYWRpbmcgcGxhY2VtZW50cyBtYW51YWxseSIpLF8oITApLmNhdGNoKChmdW5jdGlvbihlKXtlIGluc3RhbmNlb2YgTT9iLndhcm4oZS5tZXNzYWdlKTpiLmVycm9yKGUubWVzc2FnZSl9KSl9LHo9ZnVuY3Rpb24oKXtiLmRlYnVnKCJSZWxvYWRpbmcgYWQgcGxhY2VtZW50IiksQz1udWxsLGooKSxfKCkuY2F0Y2goKGZ1bmN0aW9uKGUpe2UgaW5zdGFuY2VvZiBNP2Iud2FybihlLm1lc3NhZ2UpOmIuZXJyb3IoZS5tZXNzYWdlKX0pKX19fSxmdW5jdGlvbihlLHQsYSl7dmFyIG89YSgzKSxyPWEoNCk7InN0cmluZyI9PXR5cGVvZihyPXIuX19lc01vZHVsZT9yLmRlZmF1bHQ6cikmJihyPVtbZS5pLHIsIiJdXSk7dmFyIG49e2luc2VydDoiaGVhZCIsc2luZ2xldG9uOiExfTtvKHIsbik7ZS5leHBvcnRzPXIubG9jYWxzfHx7fX0sZnVuY3Rpb24oZSx0LGEpeyJ1c2Ugc3RyaWN0Ijt2YXIgbyxyPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PW8mJihvPUJvb2xlYW4od2luZG93JiZkb2N1bWVudCYmZG9jdW1lbnQuYWxsJiYhd2luZG93LmF0b2IpKSxvfSxuPWZ1bmN0aW9uKCl7dmFyIGU9e307cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09PWVbdF0pe3ZhciBhPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCk7aWYod2luZG93LkhUTUxJRnJhbWVFbGVtZW50JiZhIGluc3RhbmNlb2Ygd2luZG93LkhUTUxJRnJhbWVFbGVtZW50KXRyeXthPWEuY29udGVudERvY3VtZW50LmhlYWR9Y2F0Y2goZSl7YT1udWxsfWVbdF09YX1yZXR1cm4gZVt0XX19KCksaT1bXTtmdW5jdGlvbiBsKGUpe2Zvcih2YXIgdD0tMSxhPTA7YTxpLmxlbmd0aDthKyspaWYoaVthXS5pZGVudGlmaWVyPT09ZSl7dD1hO2JyZWFrfXJldHVybiB0fWZ1bmN0aW9uIGQoZSx0KXtmb3IodmFyIGE9e30sbz1bXSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl0sZD10LmJhc2U/blswXSt0LmJhc2U6blswXSxjPWFbZF18fDAscz0iIi5jb25jYXQoZCwiICIpLmNvbmNhdChjKTthW2RdPWMrMTt2YXIgdT1sKHMpLHA9e2NzczpuWzFdLG1lZGlhOm5bMl0sc291cmNlTWFwOm5bM119Oy0xIT09dT8oaVt1XS5yZWZlcmVuY2VzKyssaVt1XS51cGRhdGVyKHApKTppLnB1c2goe2lkZW50aWZpZXI6cyx1cGRhdGVyOmcocCx0KSxyZWZlcmVuY2VzOjF9KSxvLnB1c2gocyl9cmV0dXJuIG99ZnVuY3Rpb24gYyhlKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpLG89ZS5hdHRyaWJ1dGVzfHx7fTtpZih2b2lkIDA9PT1vLm5vbmNlKXt2YXIgcj1hLm5jO3ImJihvLm5vbmNlPXIpfWlmKE9iamVjdC5rZXlzKG8pLmZvckVhY2goKGZ1bmN0aW9uKGUpe3Quc2V0QXR0cmlidXRlKGUsb1tlXSl9KSksImZ1bmN0aW9uIj09dHlwZW9mIGUuaW5zZXJ0KWUuaW5zZXJ0KHQpO2Vsc2V7dmFyIGk9bihlLmluc2VydHx8ImhlYWQiKTtpZighaSl0aHJvdyBuZXcgRXJyb3IoIkNvdWxkbid0IGZpbmQgYSBzdHlsZSB0YXJnZXQuIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgdmFsdWUgZm9yIHRoZSAnaW5zZXJ0JyBwYXJhbWV0ZXIgaXMgaW52YWxpZC4iKTtpLmFwcGVuZENoaWxkKHQpfXJldHVybiB0fXZhciBzLHU9KHM9W10sZnVuY3Rpb24oZSx0KXtyZXR1cm4gc1tlXT10LHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oIlxuIil9KTtmdW5jdGlvbiBwKGUsdCxhLG8pe3ZhciByPWE/IiI6by5tZWRpYT8iQG1lZGlhICIuY29uY2F0KG8ubWVkaWEsIiB7IikuY29uY2F0KG8uY3NzLCJ9Iik6by5jc3M7aWYoZS5zdHlsZVNoZWV0KWUuc3R5bGVTaGVldC5jc3NUZXh0PXUodCxyKTtlbHNle3ZhciBuPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHIpLGk9ZS5jaGlsZE5vZGVzO2lbdF0mJmUucmVtb3ZlQ2hpbGQoaVt0XSksaS5sZW5ndGg/ZS5pbnNlcnRCZWZvcmUobixpW3RdKTplLmFwcGVuZENoaWxkKG4pfX1mdW5jdGlvbiBmKGUsdCxhKXt2YXIgbz1hLmNzcyxyPWEubWVkaWEsbj1hLnNvdXJjZU1hcDtpZihyP2Uuc2V0QXR0cmlidXRlKCJtZWRpYSIscik6ZS5yZW1vdmVBdHRyaWJ1dGUoIm1lZGlhIiksbiYmInVuZGVmaW5lZCIhPXR5cGVvZiBidG9hJiYobys9IlxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCwiLmNvbmNhdChidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShuKSkpKSwiICovIikpLGUuc3R5bGVTaGVldCllLnN0eWxlU2hlZXQuY3NzVGV4dD1vO2Vsc2V7Zm9yKDtlLmZpcnN0Q2hpbGQ7KWUucmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKTtlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG8pKX19dmFyIG09bnVsbCxoPTA7ZnVuY3Rpb24gZyhlLHQpe3ZhciBhLG8scjtpZih0LnNpbmdsZXRvbil7dmFyIG49aCsrO2E9bXx8KG09Yyh0KSksbz1wLmJpbmQobnVsbCxhLG4sITEpLHI9cC5iaW5kKG51bGwsYSxuLCEwKX1lbHNlIGE9Yyh0KSxvPWYuYmluZChudWxsLGEsdCkscj1mdW5jdGlvbigpeyFmdW5jdGlvbihlKXtpZihudWxsPT09ZS5wYXJlbnROb2RlKXJldHVybiExO2UucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKX0oYSl9O3JldHVybiBvKGUpLGZ1bmN0aW9uKHQpe2lmKHQpe2lmKHQuY3NzPT09ZS5jc3MmJnQubWVkaWE9PT1lLm1lZGlhJiZ0LnNvdXJjZU1hcD09PWUuc291cmNlTWFwKXJldHVybjtvKGU9dCl9ZWxzZSByKCl9fWUuZXhwb3J0cz1mdW5jdGlvbihlLHQpeyh0PXR8fHt9KS5zaW5nbGV0b258fCJib29sZWFuIj09dHlwZW9mIHQuc2luZ2xldG9ufHwodC5zaW5nbGV0b249cigpKTt2YXIgYT1kKGU9ZXx8W10sdCk7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKGU9ZXx8W10sIltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSl7Zm9yKHZhciBvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciByPWwoYVtvXSk7aVtyXS5yZWZlcmVuY2VzLS19Zm9yKHZhciBuPWQoZSx0KSxjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciBzPWwoYVtjXSk7MD09PWlbc10ucmVmZXJlbmNlcyYmKGlbc10udXBkYXRlcigpLGkuc3BsaWNlKHMsMSkpfWE9bn19fX0sZnVuY3Rpb24oZSx0LGEpeyh0PWEoNSkoITEpKS5wdXNoKFtlLmksJ0BsYXllciBkZWZhdWx0c3s6cm9vdHstLWVhLWNvbnRhaW5lci1tZDogNzIwcHg7LS1lYS1jb250YWluZXItbGc6IDk2MHB4Oy0tZWEtY29udGFpbmVyLXhsOiAxMDQwcHg7LS1lYS1pbWFnZS13aWR0aDogMTIwcHg7LS1lYS1pbWFnZS13aWR0aC14czogNDRweDstLWVhLWltYWdlLXBsYWNlbWVudC13aWR0aDogMTgwcHg7LS1lYS1pbWFnZS1wbGFjZW1lbnQtd2lkdGgtaG9yaXpvbnRhbDogMzIwcHg7LS1lYS1pbWFnZS1sb2dvLXdpZHRoOiA4MHB4Oy0tZWEtZml4ZWRoZWFkZXItaGVpZ2h0OiA1MHB4Oy0tZWEtZm9udC1zaXplOiAxNHB4Oy0tZWEtZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgU2Vnb2UgVUksIFJvYm90bywgSGVsdmV0aWNhIE5ldWUsIEFyaWFsLCBOb3RvIFNhbnMsIHNhbnMtc2VyaWYsIEFwcGxlIENvbG9yIEVtb2ppLCBTZWdvZSBVSSBFbW9qaSwgU2Vnb2UgVUkgU3ltYm9sLCBOb3RvIENvbG9yIEVtb2ppOy0tZWEtYmdjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjAzKTstLWVhLWJnY29sb3ItZGFyazogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KTstLWVhLWZvbnQtc2l6ZS10ZXh0LW9ubHktaGVhZGVyOiAxOHB4Oy0tZWEtc3R5bGVmaXhlZC1iZ2NvbG9yOiByZ2IoMjIwLCAyMjAsIDIyMCk7LS1lYS1zdHlsZWZpeGVkLWJnY29sb3ItZGFyazogcmdiKDgwLCA4MCwgODApOy0tZWEtY29sb3ItbGluazogcmdiKDgwLCA4MCwgODApOy0tZWEtY29sb3ItbGluay1kYXJrOiByZ2IoMjIwLCAyMjAsIDIyMCk7LS1lYS1jb2xvci1saW5rLWFjdGl2ZTogcmdiKDU0LjUsIDU0LjUsIDU0LjUpOy0tZWEtY29sb3ItbGluay1kYXJrLWFjdGl2ZTogcmdiKDI0NS41LCAyNDUuNSwgMjQ1LjUpOy0tZWEtY29sb3ItbGluay1jYWxsb3V0OiByZ2IoMTA1LjUsIDEwNS41LCAxMDUuNSk7LS1lYS1jb2xvci1saW5rLWNhbGxvdXQtZGFyazogcmdiKDE5NC41LCAxOTQuNSwgMTk0LjUpOy0tZWEtY29sb3ItbGluay1jYWxsb3V0LWFjdGl2ZTogIzUwNTA1MDstLWVhLWNvbG9yLWxpbmstY2FsbG91dC1kYXJrLWFjdGl2ZTogZ2FpbnNib3JvOy0tZWEtY29sb3ItbGluay1ib2xkOiAjMDg4Y2RiOy0tZWEtY29sb3ItbGluay1ib2xkLWRhcms6IHJnYig4MC4zNzg4NTQ2MjU2LCAxODUuNjI5OTU1OTQ3MSwgMjQ4LjYyMTE0NTM3NDQpOy0tZWEtY29sb3ItZG9tYWluOiByZ2IoMTU2LjUsIDE1Ni41LCAxNTYuNSk7LS1lYS1jb2xvci1kb21haW4tZGFyazogcmdiKDE0My41LCAxNDMuNSwgMTQzLjUpOy0tZWEtaW1hZ2UtbG9nby1maWx0ZXI6IGdyYXlzY2FsZSgxKTstLWVhLWltYWdlLWxvZ28tZmlsdGVyLWRhcms6IGdyYXlzY2FsZSgxKSBpbnZlcnQoMSl9fVtkYXRhLWVhLXB1Ymxpc2hlcl0ubG9hZGVke2ZvbnQtc2l6ZTp2YXIoLS1lYS1mb250LXNpemUpO2ZvbnQtZmFtaWx5OnZhcigtLWVhLWZvbnQtZmFtaWx5KTtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zdHlsZTpub3JtYWw7bGV0dGVyLXNwYWNpbmc6MHB4O3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2xpbmUtaGVpZ2h0OjEuM2VtfVtkYXRhLWVhLXB1Ymxpc2hlcl0ubG9hZGVkIGF7dGV4dC1kZWNvcmF0aW9uOm5vbmV9W2RhdGEtZWEtcHVibGlzaGVyXS5sb2FkZWQgLmVhLXBpeGVse2Rpc3BsYXk6bm9uZX1bZGF0YS1lYS1wdWJsaXNoZXJdLmxvYWRlZCAuZWEtY29udGVudHttYXJnaW46MWVtIDFlbSAuNWVtIDFlbTtwYWRkaW5nOjFlbTtiYWNrZ3JvdW5kOnZhcigtLWVhLWJnY29sb3IpO2NvbG9yOnZhcigtLWVhLWNvbG9yLWxpbmspO2NvbG9yOnZhcigtLWVhLWNvbG9yLWxpbmspfVtkYXRhLWVhLXB1Ymxpc2hlcl0ubG9hZGVkIC5lYS1jb250ZW50IGE6bGlua3tjb2xvcjp2YXIoLS1lYS1jb2xvci1saW5rKX1bZGF0YS1lYS1wdWJsaXNoZXJdLmxvYWRlZCAuZWEtY29udGVudCBhOnZpc2l0ZWR7Y29sb3I6dmFyKC0tZWEtY29sb3ItbGluayl9W2RhdGEtZWEtcHVibGlzaGVyXS5sb2FkZWQgLmVhLWNvbnRlbnQgYTpob3Zlcntjb2xvcjp2YXIoLS1lYS1jb2xvci1saW5rLWFjdGl2ZSl9W2RhdGEtZWEtcHVibGlzaGVyXS5sb2FkZWQgLmVhLWNvbnRlbnQgYTphY3RpdmV7Y29sb3I6dmFyKC0tZWEtY29sb3ItbGluay1hY3RpdmUpfVtkYXRhLWVhLXB1Ymxpc2hlcl0ubG9hZGVkIC5lYS1jb250ZW50IGEgc3Ryb25nLFtkYXRhLWVhLXB1Ymxpc2hlcl0ubG9hZGVkIC5lYS1jb250ZW50IGEgYntjb2xvcjp2YXIoLS1lYS1jb2xvci1saW5rLWJvbGQpfVtkYXRhLWVhLXB1Ymxpc2hlcl0ubG9hZGVkIC5lYS1jYWxsb3V0e2NvbG9yOnZhcigtLWVhLWNvbG9yLWxpbmstY2FsbG91dCl9W2RhdGEtZWEtcHVibGlzaGVyXS5sb2FkZWQgLmVhLWNhbGxvdXQgYXtmb250LXNpemU6LjhlbX1bZGF0YS1lYS1wdWJsaXNoZXJdLmxvYWRlZCAuZWEtY2FsbG91dCBhOmxpbmt7Y29sb3I6dmFyKC0tZWEtY29sb3ItbGluay1jYWxsb3V0KX1bZGF0YS1lYS1wdWJsaXNoZXJdLmxvYWRlZCAuZWEtY2FsbG91dCBhOnZpc2l0ZWR7Y29sb3I6dmFyKC0tZWEtY29sb3ItbGluay1jYWxsb3V0KX1bZGF0YS1lYS1wdWJsaXNoZXJdLmxvYWRlZCAuZWEtY2FsbG91dCBhOmhvdmVye2NvbG9yOnZhcigtLWVhLWNvbG9yLWxpbmstY2FsbG91dC1hY3RpdmUpfVtkYXRhLWVhLXB1Ymxpc2hlcl0ubG9hZGVkIC5lYS1jYWxsb3V0IGE6YWN0aXZle2NvbG9yOnZhcigtLWVhLWNvbG9yLWxpbmstY2FsbG91dC1hY3RpdmUpfVtkYXRhLWVhLXB1Ymxpc2hlcl0ubG9hZGVkIC5lYS1jYWxsb3V0IGEgc3Ryb25nLFtkYXRhLWVhLXB1Ymxpc2hlcl0ubG9hZGVkIC5lYS1jYWxsb3V0IGEgYntjb2xvcjp2YXIoLS1lYS1jb2xvci1saW5rLWNhbGxvdXQpfVtkYXRhLWVhLXB1Ymxpc2hlcl0ubG9hZGVkIC5lYS1kb21haW57bWFyZ2luLXRvcDouNzVlbTtmb250LXNpemU6LjhlbTt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjp2YXIoLS1lYS1jb2xvci1kb21haW4pfVtkYXRhLWVhLXB1Ymxpc2hlcl0ubG9hZGVkLmRhcmt7LS1lYS1iZ2NvbG9yOiB2YXIoLS1lYS1iZ2NvbG9yLWRhcmspOy0tZWEtc3R5bGVmaXhlZC1iZ2NvbG9yOiB2YXIoLS1lYS1zdHlsZWZpeGVkLWJnY29sb3ItZGFyayk7LS1lYS1jb2xvci1saW5rOiB2YXIoLS1lYS1jb2xvci1saW5rLWRhcmspOy0tZWEtY29sb3ItbGluay1hY3RpdmU6IHZhcigtLWVhLWNvbG9yLWxpbmstZGFyay1hY3RpdmUpOy0tZWEtY29sb3ItbGluay1jYWxsb3V0OiB2YXIoLS1lYS1jb2xvci1saW5rLWNhbGxvdXQtZGFyayk7LS1lYS1jb2xvci1saW5rLWNhbGxvdXQtYWN0aXZlOiB2YXIoLS1lYS1jb2xvci1saW5rLWNhbGxvdXQtZGFyay1hY3RpdmUpOy0tZWEtY29sb3ItbGluay1ib2xkOiB2YXIoLS1lYS1jb2xvci1saW5rLWJvbGQtZGFyayk7LS1lYS1jb2xvci1kb21haW46IHZhcigtLWVhLWNvbG9yLWRvbWFpbi1kYXJrKTstLWVhLWltYWdlLWxvZ28tZmlsdGVyOiB2YXIoLS1lYS1pbWFnZS1sb2dvLWZpbHRlci1kYXJrKX1AbWVkaWEocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspe1tkYXRhLWVhLXB1Ymxpc2hlcl0ubG9hZGVkLmFkYXB0aXZley0tZWEtYmdjb2xvcjogdmFyKC0tZWEtYmdjb2xvci1kYXJrKTstLWVhLXN0eWxlZml4ZWQtYmdjb2xvcjogdmFyKC0tZWEtc3R5bGVmaXhlZC1iZ2NvbG9yLWRhcmspOy0tZWEtY29sb3ItbGluazogdmFyKC0tZWEtY29sb3ItbGluay1kYXJrKTstLWVhLWNvbG9yLWxpbmstYWN0aXZlOiB2YXIoLS1lYS1jb2xvci1saW5rLWRhcmstYWN0aXZlKTstLWVhLWNvbG9yLWxpbmstY2FsbG91dDogdmFyKC0tZWEtY29sb3ItbGluay1jYWxsb3V0LWRhcmspOy0tZWEtY29sb3ItbGluay1jYWxsb3V0LWFjdGl2ZTogdmFyKC0tZWEtY29sb3ItbGluay1jYWxsb3V0LWRhcmstYWN0aXZlKTstLWVhLWNvbG9yLWxpbmstYm9sZDogdmFyKC0tZWEtY29sb3ItbGluay1ib2xkLWRhcmspOy0tZWEtY29sb3ItZG9tYWluOiB2YXIoLS1lYS1jb2xvci1kb21haW4tZGFyayk7LS1lYS1pbWFnZS1sb2dvLWZpbHRlcjogdmFyKC0tZWEtaW1hZ2UtbG9nby1maWx0ZXItZGFyayl9fWh0bWwuZGFyayBbZGF0YS1lYS1wdWJsaXNoZXJdLmxvYWRlZC5hZGFwdGl2ZS1jc3MsYm9keS5kYXJrIFtkYXRhLWVhLXB1Ymxpc2hlcl0ubG9hZGVkLmFkYXB0aXZlLWNzcyxodG1sW2RhdGEtdGhlbWU9ZGFya10gW2RhdGEtZWEtcHVibGlzaGVyXS5sb2FkZWQuYWRhcHRpdmUtY3NzLGJvZHlbZGF0YS10aGVtZT1kYXJrXSBbZGF0YS1lYS1wdWJsaXNoZXJdLmxvYWRlZC5hZGFwdGl2ZS1jc3MsaHRtbFtkYXRhLWJzLXRoZW1lPWRhcmtdIFtkYXRhLWVhLXB1Ymxpc2hlcl0ubG9hZGVkLmFkYXB0aXZlLWNzcyxib2R5W2RhdGEtYnMtdGhlbWU9ZGFya10gW2RhdGEtZWEtcHVibGlzaGVyXS5sb2FkZWQuYWRhcHRpdmUtY3Nzey0tZWEtYmdjb2xvcjogdmFyKC0tZWEtYmdjb2xvci1kYXJrKTstLWVhLXN0eWxlZml4ZWQtYmdjb2xvcjogdmFyKC0tZWEtc3R5bGVmaXhlZC1iZ2NvbG9yLWRhcmspOy0tZWEtY29sb3ItbGluazogdmFyKC0tZWEtY29sb3ItbGluay1kYXJrKTstLWVhLWNvbG9yLWxpbmstYWN0aXZlOiB2YXIoLS1lYS1jb2xvci1saW5rLWRhcmstYWN0aXZlKTstLWVhLWNvbG9yLWxpbmstY2FsbG91dDogdmFyKC0tZWEtY29sb3ItbGluay1jYWxsb3V0LWRhcmspOy0tZWEtY29sb3ItbGluay1jYWxsb3V0LWFjdGl2ZTogdmFyKC0tZWEtY29sb3ItbGluay1jYWxsb3V0LWRhcmstYWN0aXZlKTstLWVhLWNvbG9yLWxpbmstYm9sZDogdmFyKC0tZWEtY29sb3ItbGluay1ib2xkLWRhcmspOy0tZWEtY29sb3ItZG9tYWluOiB2YXIoLS1lYS1jb2xvci1kb21haW4tZGFyayk7LS1lYS1pbWFnZS1sb2dvLWZpbHRlcjogdmFyKC0tZWEtaW1hZ2UtbG9nby1maWx0ZXItZGFyayl9QG1lZGlhKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKXtodG1sLmF1dG8gW2RhdGEtZWEtcHVibGlzaGVyXS5sb2FkZWQuYWRhcHRpdmUtY3NzLGJvZHkuYXV0byBbZGF0YS1lYS1wdWJsaXNoZXJdLmxvYWRlZC5hZGFwdGl2ZS1jc3MsaHRtbC5zeXN0ZW0gW2RhdGEtZWEtcHVibGlzaGVyXS5sb2FkZWQuYWRhcHRpdmUtY3NzLGJvZHkuc3lzdGVtIFtkYXRhLWVhLXB1Ymxpc2hlcl0ubG9hZGVkLmFkYXB0aXZlLWNzcyxodG1sW2RhdGEtdGhlbWU9YXV0b10gW2RhdGEtZWEtcHVibGlzaGVyXS5sb2FkZWQuYWRhcHRpdmUtY3NzLGJvZHlbZGF0YS10aGVtZT1hdXRvXSBbZGF0YS1lYS1wdWJsaXNoZXJdLmxvYWRlZC5hZGFwdGl2ZS1jc3MsaHRtbFtkYXRhLWJzLXRoZW1lPWF1dG9dIFtkYXRhLWVhLXB1Ymxpc2hlcl0ubG9hZGVkLmFkYXB0aXZlLWNzcyxib2R5W2RhdGEtYnMtdGhlbWU9YXV0b10gW2RhdGEtZWEtcHVibGlzaGVyXS5sb2FkZWQuYWRhcHRpdmUtY3Nzey0tZWEtYmdjb2xvcjogdmFyKC0tZWEtYmdjb2xvci1kYXJrKTstLWVhLXN0eWxlZml4ZWQtYmdjb2xvcjogdmFyKC0tZWEtc3R5bGVmaXhlZC1iZ2NvbG9yLWRhcmspOy0tZWEtY29sb3ItbGluazogdmFyKC0tZWEtY29sb3ItbGluay1kYXJrKTstLWVhLWNvbG9yLWxpbmstYWN0aXZlOiB2YXIoLS1lYS1jb2xvci1saW5rLWRhcmstYWN0aXZlKTstLWVhLWNvbG9yLWxpbmstY2FsbG91dDogdmFyKC0tZWEtY29sb3ItbGluay1jYWxsb3V0LWRhcmspOy0tZWEtY29sb3ItbGluay1jYWxsb3V0LWFjdGl2ZTogdmFyKC0tZWEtY29sb3ItbGluay1jYWxsb3V0LWRhcmstYWN0aXZlKTstLWVhLWNvbG9yLWxpbmstYm9sZDogdmFyKC0tZWEtY29sb3ItbGluay1ib2xkLWRhcmspOy0tZWEtY29sb3ItZG9tYWluOiB2YXIoLS1lYS1jb2xvci1kb21haW4tZGFyayk7LS1lYS1pbWFnZS1sb2dvLWZpbHRlcjogdmFyKC0tZWEtaW1hZ2UtbG9nby1maWx0ZXItZGFyayl9fVtkYXRhLWVhLXB1Ymxpc2hlcl0ubG9hZGVkIC5lYS1jb250ZW50e2JvcmRlcjowcHg7Ym9yZGVyLXJhZGl1czozcHg7Ym94LXNoYWRvdzowcHggMnB4IDNweCByZ2JhKDAsMCwwLC4xNSl9W2RhdGEtZWEtcHVibGlzaGVyXS5sb2FkZWQucmFpc2VkIC5lYS1jb250ZW50e2JvcmRlcjowcHg7Ym9yZGVyLXJhZGl1czozcHg7Ym94LXNoYWRvdzowcHggMnB4IDNweCByZ2JhKDAsMCwwLC4xNSl9W2RhdGEtZWEtcHVibGlzaGVyXS5sb2FkZWQuYm9yZGVyZWQgLmVhLWNvbnRlbnR7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4wNCk7Ym9yZGVyLXJhZGl1czozcHg7Ym94LXNoYWRvdzpub25lfVtkYXRhLWVhLXB1Ymxpc2hlcl0ubG9hZGVkLmJvcmRlcmVkLmRhcmsgLmVhLWNvbnRlbnR7Ym9yZGVyOjFweCBzb2xpZCBoc2xhKDAsMCUsMTAwJSwuMDcpfUBtZWRpYShwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyayl7W2RhdGEtZWEtcHVibGlzaGVyXS5sb2FkZWQuYm9yZGVyZWQuYWRhcHRpdmUgLmVhLWNvbnRlbnR7Ym9yZGVyOjFweCBzb2xpZCBoc2xhKDAsMCUsMTAwJSwuMDcpfX1bZGF0YS1lYS1wdWJsaXNoZXJdLmxvYWRlZC5mbGF0IC5lYS1jb250ZW50e2JvcmRlcjowcHg7Ym9yZGVyLXJhZGl1czozcHg7Ym94LXNoYWRvdzpub25lfVtkYXRhLWVhLXR5cGU9aW1hZ2VdLmxvYWRlZCxbZGF0YS1lYS1wdWJsaXNoZXJdOm5vdChbZGF0YS1lYS10eXBlXSkubG9hZGVkLC5lYS10eXBlLWltYWdle2Rpc3BsYXk6aW5saW5lLWJsb2NrfVtkYXRhLWVhLXR5cGU9aW1hZ2VdLmxvYWRlZCAuZWEtY29udGVudCxbZGF0YS1lYS1wdWJsaXNoZXJdOm5vdChbZGF0YS1lYS10eXBlXSkubG9hZGVkIC5lYS1jb250ZW50LC5lYS10eXBlLWltYWdlIC5lYS1jb250ZW50e21heC13aWR0aDp2YXIoLS1lYS1pbWFnZS1wbGFjZW1lbnQtd2lkdGgpO292ZXJmbG93OmF1dG87dGV4dC1hbGlnbjpjZW50ZXJ9W2RhdGEtZWEtdHlwZT1pbWFnZV0ubG9hZGVkIC5lYS1jb250ZW50PmE+aW1nLFtkYXRhLWVhLXB1Ymxpc2hlcl06bm90KFtkYXRhLWVhLXR5cGVdKS5sb2FkZWQgLmVhLWNvbnRlbnQ+YT5pbWcsLmVhLXR5cGUtaW1hZ2UgLmVhLWNvbnRlbnQ+YT5pbWd7d2lkdGg6dmFyKC0tZWEtaW1hZ2Utd2lkdGgpO2hlaWdodDphdXRvO2Rpc3BsYXk6aW5saW5lLWJsb2NrfVtkYXRhLWVhLXR5cGU9aW1hZ2VdLmxvYWRlZCAuZWEtY29udGVudD4uZWEtdGV4dCxbZGF0YS1lYS1wdWJsaXNoZXJdOm5vdChbZGF0YS1lYS10eXBlXSkubG9hZGVkIC5lYS1jb250ZW50Pi5lYS10ZXh0LC5lYS10eXBlLWltYWdlIC5lYS1jb250ZW50Pi5lYS10ZXh0e21hcmdpbi10b3A6MWVtO2ZvbnQtc2l6ZToxZW07dGV4dC1hbGlnbjpjZW50ZXJ9W2RhdGEtZWEtdHlwZT1pbWFnZV0ubG9hZGVkIC5lYS1jYWxsb3V0LFtkYXRhLWVhLXB1Ymxpc2hlcl06bm90KFtkYXRhLWVhLXR5cGVdKS5sb2FkZWQgLmVhLWNhbGxvdXQsLmVhLXR5cGUtaW1hZ2UgLmVhLWNhbGxvdXR7bWF4LXdpZHRoOnZhcigtLWVhLWltYWdlLXBsYWNlbWVudC13aWR0aCk7bWFyZ2luOjBlbSAxZW0gMWVtIDFlbTtwYWRkaW5nLWxlZnQ6MWVtO3BhZGRpbmctcmlnaHQ6MWVtO2ZvbnQtc3R5bGU6aXRhbGljO3RleHQtYWxpZ246cmlnaHR9W2RhdGEtZWEtdHlwZT1pbWFnZV0ubG9hZGVkLmhvcml6b250YWwgLmVhLWNvbnRlbnQsW2RhdGEtZWEtcHVibGlzaGVyXTpub3QoW2RhdGEtZWEtdHlwZV0pLmxvYWRlZC5ob3Jpem9udGFsIC5lYS1jb250ZW50LC5lYS10eXBlLWltYWdlLmhvcml6b250YWwgLmVhLWNvbnRlbnR7bWF4LXdpZHRoOnZhcigtLWVhLWltYWdlLXBsYWNlbWVudC13aWR0aC1ob3Jpem9udGFsKX1bZGF0YS1lYS10eXBlPWltYWdlXS5sb2FkZWQuaG9yaXpvbnRhbCAuZWEtY29udGVudD5hPmltZyxbZGF0YS1lYS1wdWJsaXNoZXJdOm5vdChbZGF0YS1lYS10eXBlXSkubG9hZGVkLmhvcml6b250YWwgLmVhLWNvbnRlbnQ+YT5pbWcsLmVhLXR5cGUtaW1hZ2UuaG9yaXpvbnRhbCAuZWEtY29udGVudD5hPmltZ3tmbG9hdDpsZWZ0O21hcmdpbi1yaWdodDoxZW19W2RhdGEtZWEtdHlwZT1pbWFnZV0ubG9hZGVkLmhvcml6b250YWwgLmVhLWNvbnRlbnQgLmVhLXRleHQsW2RhdGEtZWEtcHVibGlzaGVyXTpub3QoW2RhdGEtZWEtdHlwZV0pLmxvYWRlZC5ob3Jpem9udGFsIC5lYS1jb250ZW50IC5lYS10ZXh0LC5lYS10eXBlLWltYWdlLmhvcml6b250YWwgLmVhLWNvbnRlbnQgLmVhLXRleHR7bWFyZ2luLXRvcDowZW07dGV4dC1hbGlnbjpsZWZ0O292ZXJmbG93OmF1dG99W2RhdGEtZWEtdHlwZT1pbWFnZV0ubG9hZGVkLmhvcml6b250YWwgLmVhLWNhbGxvdXQsW2RhdGEtZWEtcHVibGlzaGVyXTpub3QoW2RhdGEtZWEtdHlwZV0pLmxvYWRlZC5ob3Jpem9udGFsIC5lYS1jYWxsb3V0LC5lYS10eXBlLWltYWdlLmhvcml6b250YWwgLmVhLWNhbGxvdXR7bWF4LXdpZHRoOnZhcigtLWVhLWltYWdlLXBsYWNlbWVudC13aWR0aC1ob3Jpem9udGFsKTt0ZXh0LWFsaWduOnJpZ2h0fVtkYXRhLWVhLXR5cGU9dGV4dF0ubG9hZGVkLC5lYS10eXBlLXRleHR7Zm9udC1zaXplOnZhcigtLWVhLWZvbnQtc2l6ZSl9W2RhdGEtZWEtdHlwZT10ZXh0XS5sb2FkZWQgLmVhLWNvbnRlbnQsLmVhLXR5cGUtdGV4dCAuZWEtY29udGVudHt0ZXh0LWFsaWduOmxlZnR9W2RhdGEtZWEtdHlwZT10ZXh0XS5sb2FkZWQgLmVhLWNhbGxvdXQsLmVhLXR5cGUtdGV4dCAuZWEtY2FsbG91dHttYXJnaW46LjVlbSAxZW0gMWVtIDFlbTtwYWRkaW5nLWxlZnQ6MWVtO3BhZGRpbmctcmlnaHQ6MWVtO3RleHQtYWxpZ246cmlnaHQ7Zm9udC1zdHlsZTppdGFsaWN9W2RhdGEtZWEtdHlwZT10ZXh0LW9ubHktbGFyZ2UtdjFdLmxvYWRlZCxbZGF0YS1lYS10eXBlPWxvZ28tbGFyZ2UtdjFdLmxvYWRlZCwuZWEtdHlwZS10ZXh0LWxhcmdle2ZvbnQtc2l6ZTp2YXIoLS1lYS1mb250LXNpemUpO21hcmdpbjoxZW0gMH1bZGF0YS1lYS10eXBlPXRleHQtb25seS1sYXJnZS12MV0ubG9hZGVkIC5lYS1sb2dvLFtkYXRhLWVhLXR5cGU9bG9nby1sYXJnZS12MV0ubG9hZGVkIC5lYS1sb2dvLC5lYS10eXBlLXRleHQtbGFyZ2UgLmVhLWxvZ297ZmxvYXQ6cmlnaHQ7bWFyZ2luLWxlZnQ6MWVtO21hcmdpbi1ib3R0b206MWVtfVtkYXRhLWVhLXR5cGU9dGV4dC1vbmx5LWxhcmdlLXYxXS5sb2FkZWQgaW1nLFtkYXRhLWVhLXR5cGU9bG9nby1sYXJnZS12MV0ubG9hZGVkIGltZywuZWEtdHlwZS10ZXh0LWxhcmdlIGltZ3t3aWR0aDp2YXIoLS1lYS1pbWFnZS1sb2dvLXdpZHRoKTtoZWlnaHQ6YXV0bztmaWx0ZXI6dmFyKC0tZWEtaW1hZ2UtbG9nby1maWx0ZXIpfVtkYXRhLWVhLXR5cGU9dGV4dC1vbmx5LWxhcmdlLXYxXS5sb2FkZWQgLmVhLWhlYWRsaW5lLFtkYXRhLWVhLXR5cGU9bG9nby1sYXJnZS12MV0ubG9hZGVkIC5lYS1oZWFkbGluZSwuZWEtdHlwZS10ZXh0LWxhcmdlIC5lYS1oZWFkbGluZXtmb250LXNpemU6dmFyKC0tZWEtZm9udC1zaXplLXRleHQtb25seS1oZWFkZXIpO2ZvbnQtd2VpZ2h0OmJvbGQ7bWFyZ2luLWJvdHRvbTouNWVtO3RleHQtYWxpZ246bGVmdH1bZGF0YS1lYS10eXBlPXRleHQtb25seS1sYXJnZS12MV0ubG9hZGVkIC5lYS1ib2R5LFtkYXRhLWVhLXR5cGU9bG9nby1sYXJnZS12MV0ubG9hZGVkIC5lYS1ib2R5LC5lYS10eXBlLXRleHQtbGFyZ2UgLmVhLWJvZHl7bWFyZ2luLWJvdHRvbTouNWVtO3RleHQtYWxpZ246bGVmdH1bZGF0YS1lYS10eXBlPXRleHQtb25seS1sYXJnZS12MV0ubG9hZGVkIC5lYS1jdGEsW2RhdGEtZWEtdHlwZT1sb2dvLWxhcmdlLXYxXS5sb2FkZWQgLmVhLWN0YSwuZWEtdHlwZS10ZXh0LWxhcmdlIC5lYS1jdGF7Ym9yZGVyLXJhZGl1czouNWVtO2JvcmRlcjoxcHggc29saWQgdmFyKC0tZWEtY29sb3ItbGluayk7Y29sb3I6dmFyKC0tZWEtY29sb3ItbGluayk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC13ZWlnaHQ6Ym9sZDtwYWRkaW5nOi4yNWVtIC41ZW19W2RhdGEtZWEtdHlwZT10ZXh0LW9ubHktbGFyZ2UtdjFdLmxvYWRlZCAuZWEtY3RhOjphZnRlcixbZGF0YS1lYS10eXBlPWxvZ28tbGFyZ2UtdjFdLmxvYWRlZCAuZWEtY3RhOjphZnRlciwuZWEtdHlwZS10ZXh0LWxhcmdlIC5lYS1jdGE6OmFmdGVye2NvbnRlbnQ6IiDihpcifVtkYXRhLWVhLXR5cGU9dGV4dC1vbmx5LWxhcmdlLXYxXS5sb2FkZWQgLmVhLWNhbGxvdXQsW2RhdGEtZWEtdHlwZT1sb2dvLWxhcmdlLXYxXS5sb2FkZWQgLmVhLWNhbGxvdXQsLmVhLXR5cGUtdGV4dC1sYXJnZSAuZWEtY2FsbG91dHttYXJnaW46LjVlbSAxZW0gMWVtIDFlbTtwYWRkaW5nLWxlZnQ6MWVtO3BhZGRpbmctcmlnaHQ6MWVtO3RleHQtYWxpZ246cmlnaHQ7Zm9udC1zdHlsZTppdGFsaWN9W2RhdGEtZWEtc3R5bGU9c3RpY2t5Ym94XS5sb2FkZWR7cG9zaXRpb246Zml4ZWQ7Ym90dG9tOjIwcHg7cmlnaHQ6MjBweDt6LWluZGV4OjEwMH1bZGF0YS1lYS1zdHlsZT1zdGlja3lib3hdLmxvYWRlZCAuZWEtdHlwZS1pbWFnZSAuZWEtc3RpY2t5Ym94LWhpZGV7Y3Vyc29yOnBvaW50ZXI7cG9zaXRpb246YWJzb2x1dGU7dG9wOi43NWVtO3JpZ2h0Oi43NWVtO2JhY2tncm91bmQtY29sb3I6I2ZlZmVmZTtib3JkZXI6MXB4IHNvbGlkICMwODhjZGI7Ym9yZGVyLXJhZGl1czo1MCU7Y29sb3I6IzA4OGNkYjtmb250LXNpemU6MWVtO3RleHQtYWxpZ246Y2VudGVyO2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbTtsaW5lLWhlaWdodDoxLjR9W2RhdGEtZWEtc3R5bGU9c3RpY2t5Ym94XS5sb2FkZWQgLmVhLXR5cGUtdGV4dHtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH1AbWVkaWEobWF4LXdpZHRoOiAxMzAwcHgpe1tkYXRhLWVhLXN0eWxlPXN0aWNreWJveF0ubG9hZGVke3Bvc2l0aW9uOnN0YXRpYztib3R0b206MDtyaWdodDowO21hcmdpbjphdXRvO3RleHQtYWxpZ246Y2VudGVyfVtkYXRhLWVhLXN0eWxlPXN0aWNreWJveF0ubG9hZGVkIC5lYS1zdGlja3lib3gtaGlkZXtkaXNwbGF5Om5vbmV9fUBtZWRpYShtaW4td2lkdGg6IDEzMDFweCl7W2RhdGEtZWEtc3R5bGU9c3RpY2t5Ym94XS5sb2FkZWQgLmVhLXR5cGUtaW1hZ2UgLmVhLWNvbnRlbnR7YmFja2dyb3VuZDp2YXIoLS1lYS1zdHlsZWZpeGVkLWJnY29sb3IpfX1bZGF0YS1lYS1zdHlsZT1maXhlZGZvb3Rlcl0ubG9hZGVke3Bvc2l0aW9uOmZpeGVkO2JvdHRvbTowO2xlZnQ6MDt6LWluZGV4OjIwMDt3aWR0aDoxMDAlO21heC13aWR0aDoxMDAlfVtkYXRhLWVhLXN0eWxlPWZpeGVkZm9vdGVyXS5sb2FkZWQgLmVhLXR5cGUtdGV4dHt3aWR0aDoxMDAlO21heC13aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleDt6LWluZGV4OjIwMDtiYWNrZ3JvdW5kOnZhcigtLWVhLXN0eWxlZml4ZWQtYmdjb2xvcil9W2RhdGEtZWEtc3R5bGU9Zml4ZWRmb290ZXJdLmxvYWRlZCAuZWEtdHlwZS10ZXh0IC5lYS1jb250ZW50e2JvcmRlcjowcHg7Ym9yZGVyLXJhZGl1czozcHg7Ym94LXNoYWRvdzpub25lfVtkYXRhLWVhLXN0eWxlPWZpeGVkZm9vdGVyXS5sb2FkZWQgLmVhLXR5cGUtdGV4dCAuZWEtY29udGVudHtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXQ7bWF4LXdpZHRoOjEwMCU7bWFyZ2luOjA7cGFkZGluZzoxZW07ZmxleDphdXRvfVtkYXRhLWVhLXN0eWxlPWZpeGVkZm9vdGVyXS5sb2FkZWQgLmVhLXR5cGUtdGV4dCAuZWEtY2FsbG91dHttYXgtd2lkdGg6MTAwJTttYXJnaW46MDtwYWRkaW5nOjFlbTtmbGV4OmluaXRpYWx9QG1lZGlhKG1heC13aWR0aDogNTc2cHgpe1tkYXRhLWVhLXN0eWxlPWZpeGVkZm9vdGVyXS5sb2FkZWQgLmVhLXR5cGUtdGV4dCAuZWEtY2FsbG91dHtkaXNwbGF5Om5vbmV9fVtkYXRhLWVhLXN0eWxlPWZpeGVkZm9vdGVyXS5sb2FkZWQgLmVhLXR5cGUtdGV4dCAuZWEtZml4ZWRmb290ZXItaGlkZXtjdXJzb3I6cG9pbnRlcjtjb2xvcjp2YXIoLS1lYS1jb2xvci1saW5rKTtwYWRkaW5nOjFlbTtmbGV4OmluaXRpYWw7bWFyZ2luOmF1dG8gMH1bZGF0YS1lYS1zdHlsZT1maXhlZGZvb3Rlcl0ubG9hZGVkIC5lYS10eXBlLXRleHQgLmVhLWZpeGVkZm9vdGVyLWhpZGUgc3BhbntwYWRkaW5nOi4yNWVtO2ZvbnQtc2l6ZTouOGVtO2ZvbnQtd2VpZ2h0OmJvbGQ7Ym9yZGVyOi4xNWVtIHNvbGlkIHZhcigtLWVhLWNvbG9yLWxpbmspO2JvcmRlci1yYWRpdXM6LjVlbTt3aGl0ZS1zcGFjZTpub3dyYXB9W2RhdGEtZWEtc3R5bGU9Zml4ZWRmb290ZXJdLmxvYWRlZCAuZWEtdHlwZS1pbWFnZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH1bZGF0YS1lYS1zdHlsZT1maXhlZGhlYWRlcl17aGVpZ2h0OnZhcigtLWVhLWZpeGVkaGVhZGVyLWhlaWdodCk7d2lkdGg6MTAwJTttYXgtd2lkdGg6MTAwJTtiYWNrZ3JvdW5kOnZhcigtLWVhLXN0eWxlZml4ZWQtYmdjb2xvcik7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tZWEtYmFja2dyb3VuZC1jb2xvcil9QG1lZGlhKG1heC13aWR0aDogNzY4cHgpe1tkYXRhLWVhLXN0eWxlPWZpeGVkaGVhZGVyXXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH19W2RhdGEtZWEtc3R5bGU9Zml4ZWRoZWFkZXJdLmxvYWRlZCAuZWEtdHlwZS1pbWFnZSxbZGF0YS1lYS1zdHlsZT1maXhlZGhlYWRlcl0ubG9hZGVkIC5lYS10eXBlLXRleHR7d2lkdGg6dmFyKC0tZWEtY29udGFpbmVyLXhsKTttYXJnaW46MCBhdXRvO2Rpc3BsYXk6ZmxleH1AbWVkaWEobWF4LXdpZHRoOiA5OTJweCl7W2RhdGEtZWEtc3R5bGU9Zml4ZWRoZWFkZXJdLmxvYWRlZCAuZWEtdHlwZS1pbWFnZSxbZGF0YS1lYS1zdHlsZT1maXhlZGhlYWRlcl0ubG9hZGVkIC5lYS10eXBlLXRleHR7d2lkdGg6dmFyKC0tZWEtY29udGFpbmVyLW1kKX19QG1lZGlhKG1heC13aWR0aDogMTIwMHB4KXtbZGF0YS1lYS1zdHlsZT1maXhlZGhlYWRlcl0ubG9hZGVkIC5lYS10eXBlLWltYWdlLFtkYXRhLWVhLXN0eWxlPWZpeGVkaGVhZGVyXS5sb2FkZWQgLmVhLXR5cGUtdGV4dHt3aWR0aDp2YXIoLS1lYS1jb250YWluZXItbGcpfX1bZGF0YS1lYS1zdHlsZT1maXhlZGhlYWRlcl0ubG9hZGVkIC5lYS10eXBlLWltYWdlIC5lYS1jb250ZW50LFtkYXRhLWVhLXN0eWxlPWZpeGVkaGVhZGVyXS5sb2FkZWQgLmVhLXR5cGUtdGV4dCAuZWEtY29udGVudHtib3JkZXI6MHB4O2JvcmRlci1yYWRpdXM6M3B4O2JveC1zaGFkb3c6bm9uZX1bZGF0YS1lYS1zdHlsZT1maXhlZGhlYWRlcl0ubG9hZGVkIC5lYS10eXBlLWltYWdlIC5lYS1jb250ZW50LFtkYXRhLWVhLXN0eWxlPWZpeGVkaGVhZGVyXS5sb2FkZWQgLmVhLXR5cGUtdGV4dCAuZWEtY29udGVudHtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXQ7bWF4LXdpZHRoOjEwMCU7bWFyZ2luOjA7cGFkZGluZzowO2ZsZXg6YXV0bztkaXNwbGF5OmZsZXh9W2RhdGEtZWEtc3R5bGU9Zml4ZWRoZWFkZXJdLmxvYWRlZCAuZWEtdHlwZS1pbWFnZSAuZWEtY29udGVudCAuZWEtdGV4dCxbZGF0YS1lYS1zdHlsZT1maXhlZGhlYWRlcl0ubG9hZGVkIC5lYS10eXBlLXRleHQgLmVhLWNvbnRlbnQgLmVhLXRleHR7bWFyZ2luLXRvcDowO3BhZGRpbmc6MWVtO2ZsZXg6YXV0bzt0ZXh0LWFsaWduOmxlZnR9W2RhdGEtZWEtc3R5bGU9Zml4ZWRoZWFkZXJdLmxvYWRlZCAuZWEtdHlwZS1pbWFnZSAuZWEtY2FsbG91dCxbZGF0YS1lYS1zdHlsZT1maXhlZGhlYWRlcl0ubG9hZGVkIC5lYS10eXBlLXRleHQgLmVhLWNhbGxvdXR7bWF4LXdpZHRoOjEwMCU7bWFyZ2luOjA7cGFkZGluZzoxZW07ZmxleDppbml0aWFsfUBtZWRpYShtYXgtd2lkdGg6IDU3NnB4KXtbZGF0YS1lYS1zdHlsZT1maXhlZGhlYWRlcl0ubG9hZGVkIC5lYS10eXBlLWltYWdlIC5lYS1jYWxsb3V0LFtkYXRhLWVhLXN0eWxlPWZpeGVkaGVhZGVyXS5sb2FkZWQgLmVhLXR5cGUtdGV4dCAuZWEtY2FsbG91dHtkaXNwbGF5Om5vbmV9fVtkYXRhLWVhLXN0eWxlPWZpeGVkaGVhZGVyXS5sb2FkZWQgLmVhLXR5cGUtaW1hZ2UgaW1ne3dpZHRoOnZhcigtLWVhLWltYWdlLXdpZHRoLXhzKSAhaW1wb3J0YW50O21hcmdpbjouNmVtfVtkYXRhLWVhLXN0eWxlPWZpeGVkaGVhZGVyXS5sb2FkZWQgLmVhLXR5cGUtaW1hZ2UgLmVhLWRvbWFpbntkaXNwbGF5Om5vbmV9JywiIl0pLGUuZXhwb3J0cz10fSxmdW5jdGlvbihlLHQsYSl7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcCgoZnVuY3Rpb24odCl7dmFyIGE9ZnVuY3Rpb24oZSx0KXt2YXIgYT1lWzFdfHwiIixvPWVbM107aWYoIW8pcmV0dXJuIGE7aWYodCYmImZ1bmN0aW9uIj09dHlwZW9mIGJ0b2Epe3ZhciByPShpPW8sbD1idG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShpKSkpKSxkPSJzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCwiLmNvbmNhdChsKSwiLyojICIuY29uY2F0KGQsIiAqLyIpKSxuPW8uc291cmNlcy5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiIvKiMgc291cmNlVVJMPSIuY29uY2F0KG8uc291cmNlUm9vdHx8IiIpLmNvbmNhdChlLCIgKi8iKX0pKTtyZXR1cm5bYV0uY29uY2F0KG4pLmNvbmNhdChbcl0pLmpvaW4oIlxuIil9dmFyIGksbCxkO3JldHVyblthXS5qb2luKCJcbiIpfSh0LGUpO3JldHVybiB0WzJdPyJAbWVkaWEgIi5jb25jYXQodFsyXSwiIHsiKS5jb25jYXQoYSwifSIpOmF9KSkuam9pbigiIil9LHQuaT1mdW5jdGlvbihlLGEsbyl7InN0cmluZyI9PXR5cGVvZiBlJiYoZT1bW251bGwsZSwiIl1dKTt2YXIgcj17fTtpZihvKWZvcih2YXIgbj0wO248dGhpcy5sZW5ndGg7bisrKXt2YXIgaT10aGlzW25dWzBdO251bGwhPWkmJihyW2ldPSEwKX1mb3IodmFyIGw9MDtsPGUubGVuZ3RoO2wrKyl7dmFyIGQ9W10uY29uY2F0KGVbbF0pO28mJnJbZFswXV18fChhJiYoZFsyXT9kWzJdPSIiLmNvbmNhdChhLCIgYW5kICIpLmNvbmNhdChkWzJdKTpkWzJdPWEpLHQucHVzaChkKSl9fSx0fX1dKTs="></script></div> </div> </header> <article class="app__pipe pipe"> <header class=pipe__header> <div class=container> <h1 class=pipe__title> Reverse text: Spell text backwards online </h1> <p class=pipe__description> Type in text and easily reverse it, flip it, spell it backwards. As it makes the text much more difficult to read, it is a useful technique to hide content, similar to a magazine printing an answer to a quiz upside down. </p> <ul class="pipe__link-list link-list"> <li class=link-list__item> <a class=link-list__link href=https://cryptii.com/pipes/hex-to-text> Hex to text </a> <li class=link-list__item> <a class=link-list__link href=https://cryptii.com/pipes/integer-converter> Integer converter </a> <li class=link-list__item> <a class=link-list__link href=https://cryptii.com/pipes/binary-to-base64> Binary to base64 </a> <li class=link-list__item> <a class=link-list__link href=https://cryptii.com/pipes/roman-numerals> Roman numerals </a> <li class=link-list__item> <a class=link-list__link href=https://cryptii.com/pipes/caesar-cipher-decoder> Caesar cipher decoder </a> </li> </ul> </div> </header> <div class=pipe__scrollable><div class=pipe__content><button class=pipe__part-pipe><div class=pipe__btn-add>Add encoder or viewer</div><div class=pipe__drop-handle></div></button><div class="pipe__part-brick pipe__part-brick--viewer" draggable=true><div class="brick viewer viewer-text" role=region aria-label="Text viewer"><header class=brick__header><ul class=brick__actions><li class=brick__action-item><span class="brick__action brick__action--active">View</span></ul><button class=brick__title><h3 class=brick__title-inner>Text</h3><div class=brick__title-caret><svg viewBox="0 0 16 16"><polygon points="3 6 8 11 13 6"></polygon></svg></div></button><button class=brick__btn-menu><svg viewBox="0 0 16 16" fill=#000 title=Menu><circle cx=8 cy=2 r=1.5></circle><circle cx=8 cy=8 r=1.5></circle><circle cx=8 cy=14 r=1.5></circle></svg></button></header><div class=brick__settings><div class=form></div></div><div class=brick__content><textarea class=viewer-text__textarea aria-label=Content spellcheck=false style=height:200px>The quick brown fox jumps over 13 lazy dogs.</textarea></div><footer class="brick__status brick__status--hidden"><div class=brick__status-icon></div><div class=brick__status-message></div></footer></div></div><button class=pipe__part-pipe><div class=pipe__btn-add>Add encoder or viewer</div><div class=pipe__drop-handle></div></button><div class="pipe__part-brick pipe__part-brick--encoder" draggable=true><div class="brick encoder" role=region aria-label="Reverse encoder"><header class=brick__header><ul class=brick__actions><li class=brick__action-item><a class="brick__action brick__action--active" href=https://cryptii.com/pipes/reverse-text/# draggable=false>Encode</a><li class=brick__action-item><a class=brick__action href=https://cryptii.com/pipes/reverse-text/# draggable=false>Decode</a></ul><button class=brick__title><h3 class=brick__title-inner>Reverse</h3><div class=brick__title-caret><svg viewBox="0 0 16 16"><polygon points="3 6 8 11 13 6"></polygon></svg></div></button><button class=brick__btn-menu><svg viewBox="0 0 16 16" fill=#000 title=Menu><circle cx=8 cy=2 r=1.5></circle><circle cx=8 cy=8 r=1.5></circle><circle cx=8 cy=14 r=1.5></circle></svg></button></header><div class=brick__settings><div class=form><div class="field field-enum field-enum--radio field--first" data-width=12><label class=field__label for=u1>By</label><div class=field-enum__field><div class=field-enum__options role=radiogroup id=u1><div class=field-enum__option><input type=radio class=field-enum__option-radio id=u1-1 name=u1 value=on><label for=u1-1 class=field-enum__option-label>Byte</label></div><div class=field-enum__option><input type=radio class=field-enum__option-radio id=u1-2 name=u1 value=on checked><label for=u1-2 class=field-enum__option-label>Character</label></div><div class=field-enum__option><input type=radio class=field-enum__option-radio id=u1-3 name=u1 value=on><label for=u1-3 class=field-enum__option-label>Line</label></div></div></div></div></div></div><footer class="brick__status brick__status--hidden"><div class=brick__status-icon></div><div class=brick__status-message></div></footer></div></div><button class=pipe__part-pipe><div class=pipe__btn-add>Add encoder or viewer</div><div class=pipe__drop-handle></div></button><div class="pipe__part-brick pipe__part-brick--viewer" draggable=true><div class="brick viewer viewer-text" role=region aria-label="Text viewer"><header class=brick__header><ul class=brick__actions><li class=brick__action-item><span class="brick__action brick__action--active">View</span></ul><button class=brick__title><h3 class=brick__title-inner>Reversed text</h3><div class=brick__title-caret><svg viewBox="0 0 16 16"><polygon points="3 6 8 11 13 6"></polygon></svg></div></button><button class=brick__btn-menu><svg viewBox="0 0 16 16" fill=#000 title=Menu><circle cx=8 cy=2 r=1.5></circle><circle cx=8 cy=8 r=1.5></circle><circle cx=8 cy=14 r=1.5></circle></svg></button></header><div class=brick__settings><div class=form></div></div><div class=brick__content><textarea class=viewer-text__textarea aria-label=Content spellcheck=false style=height:200px>.sgod yzal 31 revo spmuj xof nworb kciuq ehT</textarea></div><footer class="brick__status brick__status--hidden"><div class=brick__status-icon></div><div class=brick__status-message></div></footer></div></div><button class=pipe__part-pipe><div class=pipe__btn-add>Add encoder or viewer</div><div class=pipe__drop-handle></div></button></div><div class="pipe__scroll-handle pipe__scroll-handle--left pipe__scroll-handle--disabled"></div><div class="pipe__scroll-handle pipe__scroll-handle--right"></div></div></article> <footer class="app__footer footer"> <div class=container> <div class=footer__inner> <h2 class=footer__brand><a href=https://cryptii.com/>cryptii</a></h2> <p class=footer__description> A web app for modular conversion, encoding, and encryption, all performed directly in your browser with no server interaction. This Open Source project is licensed under the MIT License. <a href="https://wierk.lu/?utm_source=cryptii.com&utm_medium=referral&utm_campaign=products" target=_blank rel=noopener>
|
||
Operated by wierk
|
||
</a>.
|
||
</p> <ul class="footer__link-list link-list"> <li class=link-list__item> <a class=link-list__link href=https://bsky.app/profile/cryptii.com target=_blank rel=noopener> Bluesky </a> <li class=link-list__item> <a class=link-list__link href=https://discord.gg/v5wNewjdxm target=_blank rel=noopener> Discord </a> <li class=link-list__item> <a class=link-list__link href=https://github.com/cryptii/cryptii target=_blank rel=noopener> GitHub </a> <li class=link-list__item> <a class=link-list__link href=https://ciphereditor.com/about target=_blank rel=noopener> About </a> <li class=link-list__item> <a class=link-list__link href=https://wierk.lu/contact target=_blank rel=noopener> Contact </a> <li class=link-list__item> <a class=link-list__link href=https://wierk.lu/privacy target=_blank rel=noopener> Privacy policy </a> <li class=link-list__item> <a class=link-list__link href="https://ciphereditor.com/?utm_campaign=cryptii_try_new_experience&utm_source=cryptii&utm_medium=referral" target=_blank rel=noopener> Try ciphereditor </a> </li> </ul> </div> </div> </footer> </div> |