(()=>{var __webpack_modules__={389:(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__)=>{"use strict";eval("\n;// CONCATENATED MODULE: ./src/utils/dom.js\nconst ROOT = document.body || document || window;\nconst domUtils = {\n selectElement: (selector, node) => {\n return (node || ROOT).querySelector(selector);\n },\n selectElements: (selectors, node) => {\n return Array.from((node || ROOT).querySelectorAll(selectors));\n },\n createElement: ({\n tag,\n appendTo,\n prependTo,\n children = [],\n attributes = {},\n events = {},\n innerHTML = null\n }) => {\n const element = document.createElement(tag);\n Object.entries(attributes).forEach(([key, value]) => {\n element[key] = value;\n element.setAttribute(key, value);\n });\n Object.entries(events).forEach(([key, value]) => {\n element.addEventListener(key, value);\n });\n children.forEach(child => element.appendChild(child));\n if (appendTo) {\n appendTo.appendChild(element);\n }\n if (prependTo) {\n prependTo.prepend(element);\n }\n if (innerHTML) {\n element.innerHTML = innerHTML;\n }\n return element;\n }\n};\n/* harmony default export */ const dom = (domUtils);\n;// CONCATENATED MODULE: ./src/style.js\nconst globalStyles = `\n.progress {\n width: 20px;\n height: 20px;\n min-width: 20px;\n min-height: 20px;\n color: #fff;\n border-radius: 50%;\n overflow: hidden;\n position: absolute;\n text-align: center;\n line-height: 200px;\n left: -10px;\n top: -10px;\n /*background: #f6f6f6;*/\n}\n\n.progress .overlay {\n width: 50%;\n height: 100%;\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1;\n background-color: #f6f6f6;\n}\n\n.progress .left, .progress .right {\n width: 50%;\n height: 100%;\n position: absolute;\n top: 0;\n left: 0;\n border: 10px solid #191824;\n border-radius: 100px 0px 0px 100px;\n border-right: 0;\n transform-origin: right;\n}\n\n.progress .left {animation: load1 .05s linear forwards;}\n\n.progress:nth-of-type(2) .right, .progress:nth-of-type(3) .right {animation: load2 .25s linear forwards .05s;}\n\n.progress:last-of-type .right, .progress:first-of-type .right {animation: load3 .25s linear forwards .05s;}\n\n@keyframes load1 {\n 0% {transform: rotate(0deg);}\n\n 100% {transform: rotate(180deg);}\n}\n\n@keyframes load2 {\n 0% {z-index: 100;transform: rotate(180deg);}\n\n 100% {z-index: 100;transform: rotate(270deg);}\n}\n\n@keyframes load3 {\n 0% {z-index: 100;transform: rotate(180deg);}\n\n 100% {\n z-index: 100;transform: rotate(360deg);}\n}\n`;\n/* harmony default export */ const style = (globalStyles);\n;// CONCATENATED MODULE: ./configuration/constants.js\n/* harmony default export */ const constants = ({\n classes: {\n wrapper: '__paged-toggle',\n toggle: '__paged-toggle',\n overlay: '__paged-overlay',\n input: '__paged-input',\n account: '__paged-account',\n alert: '__paged-alert',\n mask: '__paged-reading-mask',\n reader: '__paged-screen_reader'\n }\n});\n;// CONCATENATED MODULE: ./src/components/toggle/style.js\nconst styles = `\n :host {\n width: 50px;\n height: fit-content;\n background: #222D39;\n position: fixed;\n display: flex;\n cursor: pointer;\n // transition: all 200ms ease-in;\n z-index: 999;\n padding: 8px !important;\n -webkit-tap-highlight-color: transparent;\n width: fit-content;\n }\n\n :host(.right) {\n top: 0;\n right: 0px;\n bottom: 0;\n margin: auto !important;\n border-top-left-radius: 5px;\n border-bottom-left-radius: 5px;\n color: white;\n box-shadow: -3px 0px 16px 0px rgba(0,0,0,0.15);\n -webkit-box-shadow: -3px 0px 16px 0px rgba(0,0,0,0.15);\n -moz-box-shadow: -3px 0px 16px 0px rgba(0,0,0,0.15);\n }\n :host(.right.open) {\n // right: 300px;\n }\n :host(.right) .__paged_toggle_icon {\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n font-size: 18px;\n border-radius: 50%;\n padding: 3px;\n border: 2px solid white;\n max-height: 24px;\n max-width: 24px;\n margin-left: 3px;\n }\n :host(.right) .__paged_toggle_icon svg {\n margin: 0;\n }\n :host(.right) span.__paged_tryit {\n transform: rotate(90deg);\n }\n :host(.right) span.__paged_tryit h1 {\n transform: rotateZ(-90deg);\n left: -100px;\n position: fixed;\n color: #222D39;\n top: 100px;\n font-size: 26px;\n text-shadow: 4px 4px 5px 0px rgba(0,0,0,0.75);\n }\n :host(.right) span > svg {\n margin-right: 6px;\n }\n :host(.right):hover {\n box-shadow: -3px 0px 16px 0px rgba(0,0,0,0.35);\n -webkit-box-shadow: -3px 0px 16px 0px rgba(0,0,0,0.35);\n -moz-box-shadow: -3px 0px 16px 0px rgba(0,0,0,0.35);\n }\n\n :host(.left) {\n top: 0;\n left: 0;\n bottom: 0;\n margin: auto !important;\n border-top-right-radius: 5px;\n border-bottom-right-radius: 5px;\n color: white;\n box-shadow: -3px 0px 16px 0px rgba(0,0,0,0.15);\n -webkit-box-shadow: -3px 0px 16px 0px rgba(0,0,0,0.15);\n -moz-box-shadow: -3px 0px 16px 0px rgba(0,0,0,0.15);\n }\n :host(.left.open) {\n // left: 300px;\n }\n :host(.left) .__paged_toggle_icon {\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n font-size: 18px;\n border-radius: 50%;\n padding: 3px;\n border: 2px solid white;\n max-height: 24px;\n max-width: 24px;\n margin-left: 3px;\n }\n :host(.left) .__paged_toggle_icon svg {\n margin: 0;\n }\n :host(.left) span.__paged_tryit {\n transform: rotate(90deg);\n }\n :host(.left) span.__paged_tryit h1 {\n transform: rotateZ(-90deg);\n left: -100px;\n position: fixed;\n color: #222D39;\n top: 100px;\n font-size: 26px;\n text-shadow: 4px 4px 5px 0px rgba(0,0,0,0.75);\n }\n :host(.left) span > svg {\n margin-right: 6px;\n }\n :host(.left):hover {\n box-shadow: -3px 0px 16px 0px rgba(0,0,0,0.35);\n -webkit-box-shadow: -3px 0px 16px 0px rgba(0,0,0,0.35);\n -moz-box-shadow: -3px 0px 16px 0px rgba(0,0,0,0.35);\n }\n`;\n/* harmony default export */ const toggle_style = (styles);\n;// CONCATENATED MODULE: ./src/components/icons.js\nconst icons = {\n eye: ``,\n revert: ``,\n cancel: ``,\n minus: ``,\n plus: ``,\n profile: ``,\n arrow: `\n `,\n paged: `\n\n\n\n\n`,\n accessibility: ``,\n logoBlack: `\n \n \n \n \n \n \n \n `,\n play: `\n \n \n `,\n pause: `\n \n `,\n forward: `\n \n `,\n backward: `\n \n `,\n settings: `\n \n \n `\n};\n/* harmony default export */ const components_icons = (icons);\n;// CONCATENATED MODULE: ./src/components/toggle/index.js\n\n\n\n\nclass Toggle {\n _root = null;\n _rootShadow = null;\n _open = false;\n _position = 'right';\n _color = '#222d39';\n _clickEvent = new CustomEvent('onClick');\n constructor(position, color) {\n this._position = position || 'right';\n this._color = color || '#222d39';\n this.__init__();\n }\n get open() {\n return this._open;\n }\n set open(value) {\n this._open = value;\n this._open ? this._root.classList.add('open') : this._root.classList.remove('open');\n if (value) {\n //const width = getComputedStyle(document.querySelector('.__paged-overlay')).width;\n //this._root.style.right = width;\n //this._root.style.left = width;\n\n const widgetWidth = getComputedStyle(document.querySelector('.__paged-overlay')).width.slice(0, -2);\n const widthWithScrollbar = parseInt(widgetWidth) + (document.querySelector('.__paged-overlay').offsetWidth - document.querySelector('.__paged-overlay').clientWidth);\n const width = widthWithScrollbar + 'px';\n this._position === 'left' ? this._root.style.left = width : this._root.style.right = width;\n } else {\n //this._root.style.left = '0';\n this._position === 'left' ? this._root.style.left = 0 : this._root.style.right = 0;\n }\n }\n __init__() {\n this._root = dom.createElement({\n tag: 'div',\n appendTo: document.body,\n attributes: {\n class: `${constants.classes.toggle} ${this._position}`,\n style: `background: ${this._color}`\n }\n });\n this._rootShadow = this._root.attachShadow({\n mode: 'closed'\n });\n dom.createElement({\n tag: 'style',\n innerHTML: toggle_style,\n appendTo: this._rootShadow\n });\n dom.createElement({\n tag: 'span',\n attributes: {\n class: '__paged_toggle_icon'\n },\n innerHTML: components_icons.accessibility,\n appendTo: this._rootShadow\n });\n /*dom.createElement({\n tag: 'span',\n attributes: {\n class: '__paged_tryit'\n },\n innerHTML: window.innerWidth > 800 ? window.location.pathname === '/' ? `

Try It!

${icons.arrow}` : null : null,\n appendTo: this._rootShadow,\n });*/\n this._root.addEventListener('click', this._onClick.bind(this));\n }\n _onClick(event) {\n this.open = !this._open;\n //Hide Try-it-sign when widget is open\n /*this._rootShadow.querySelector('.__paged_tryit')\n .setAttribute('style', `visibility: ${this.open ? 'hidden' : 'visible'}`);*/\n /*this._rootShadow.querySelector('.__paged_tryit')\n .setAttribute('style', `visibility: ${'hidden'}`);*/\n this._root.dispatchEvent(this._clickEvent);\n }\n}\n;// CONCATENATED MODULE: ./src/components/overlay/style.js\nconst style_styles = `\n :host {\n width: fit-content;\n height: fit-content;\n max-width: calc(100vw - 70px);\n max-height: calc(100% - 70px);\n min-width: 360px;\n background: white;\n position: fixed;\n display: flex;\n transition: right 200ms ease-in;\n flex-direction: column;\n align-items: center;\n flex-direction: space-between;\n z-index: 999;\n overflow-y: auto;\n overflow-x: hidden;\n user-select: none;\n opacity: 0;\n }\n :host(.right) {\n top: 0;\n bottom: 0;\n margin: auto !important;\n border-top-left-radius: 5px;\n border-bottom-left-radius: 5px;\n color: #222D39;\n box-shadow: -3px 0px 16px 0px rgba(0,0,0,0.15);\n -webkit-box-shadow: -3px 0px 16px 0px rgba(0,0,0,0.15);\n -moz-box-shadow: -3px 0px 16px 0px rgba(0,0,0,0.15);\n }\n :host(.right.open) {\n right: 0;\n }\n :host(.left) {\n top: 0;\n bottom: 0;\n margin: auto !important;\n border-top-right-radius: 5px;\n border-bottom-right-radius: 5px;\n color: #222D39;\n box-shadow: -3px 0px 16px 0px rgba(0,0,0,0.15);\n -webkit-box-shadow: -3px 0px 16px 0px rgba(0,0,0,0.15);\n -moz-box-shadow: -3px 0px 16px 0px rgba(0,0,0,0.15);\n }\n :host(.left.open) {\n left: 0;\n }\n :host .header {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n padding: 12px;\n width: calc(100% - 20px);\n margin-bottom: 12px;\n position: sticky;\n top: 0;\n background: white;\n z-index: 9999;\n }\n :host .header h1 {\n font-size: 24px;\n font-weight: 500;\n margin: 0;\n display: flex;\n }\n :host .header span {\n max-height: 24px;\n cursor: pointer;\n display: flex;\n }\n :host .__paged-input:nth-of-type(1) {\n margin-top: 6px;\n }\n :host .tabs {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n width: 100%;\n flex-wrap: wrap;\n margin-bottom: 12px;\n position: sticky;\n top: 70px;\n background: white;\n box-shadow: 1px 2px 5px 0px rgba(0,0,0,0.15);\n -webkit-box-shadow: 1px 2px 5px 0px rgba(0,0,0,0.15);\n -moz-box-shadow: 1px 2px 5px 0px rgba(0,0,0,0.15);\n z-index: 9999;\n }\n :host .tabs button {\n border: none;\n background: none;\n color: #222D39;\n font-weight: 500;\n font-size: 16px;\n text-align: center;\n width: calc(50% - 6px);\n cursor: pointer;\n padding: 12px 0;\n border-top-left-radius: 5px;\n border-top-right-radius: 5px;\n outline: none;\n overflow: hidden;\n }\n :host .tabs button:hover {\n background: rgba(0, 0, 0, 0.04);\n }\n :host .tabs button.active {\n border-bottom: 2px solid var(--paged-color);\n background: rgba(0, 0, 0, 0.04);\n }\n :host .__paged-resize-handler {\n position: sticky;\n width: 20px;\n height: 20px;\n min-width: 20px;\n min-height: 20px;\n background: black;\n color: white;\n left: 0;\n bottom: 0;\n cursor: col-resize;\n border-radius: 1px;\n align-self: flex-start;\n }\n\n :host .__paged-screen_reader {\n min-height: fit-content;\n }\n`;\n/* harmony default export */ const overlay_style = (style_styles);\n;// CONCATENATED MODULE: ./src/components/overlay/components/input/style.js\nconst input_style_styles = `\n :host {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n flex-wrap: nowrap;\n width: calc(100% - 50px);\n margin: 0 12px 12px 12px;\n background: rgba(0, 0, 0, 0.04);\n padding: 12px;\n user-select: none;\n min-width: 280px;\n //gap: 12px;\n //width: fit-content;\n }\n\n :host label {\n font-size: 16px;\n margin: auto 0;\n white-space: nowrap;\n }\n\n :host .__paged-input-switch {\n display: flex;\n }\n :host .__paged-input-switch input[type=checkbox]{\n height: 0;\n width: 0;\n visibility: hidden;\n }\n\n :host .__paged-input-switch label {\n cursor: pointer;\n text-indent: -9999px;\n width: 46px;\n height: 24px;\n background: rgba(0, 0, 0, 0.1);\n display: block;\n border-radius: 5px;\n position: relative;\n }\n\n :host .__paged-input-switch label:after {\n content: '';\n position: absolute;\n top: 3px;\n left: 3px;\n width: 18px;\n height: 18px;\n background: var(--paged-color);\n border-radius: 5px;\n transition: 0.3s;\n }\n\n :host .__paged-input-switch input:checked + label {\n background: var(--paged-color);\n }\n\n :host .__paged-input-switch input:checked + label:after {\n left: calc(100% - 3px);\n transform: translateX(-100%);\n background: white;\n }\n\n :host .__paged-input-switch label:active:after {\n width: 20px;\n }\n\n :host .__paged-input-increment {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n background: rgba(0, 0, 0, 0.1);\n border-radius: 5px;\n max-height: 30px;\n //width: -webkit-fill-available;\n }\n :host .__paged-input-increment input[type=\"number\"] {\n width: 40px;\n margin: 0 4px;\n background: none;\n border: none;\n color: #222D39;\n font-size: 16px;\n text-align: center;\n //width: -webkit-fill-available;\n }\n :host .__paged-input-increment input[type=\"number\"]:focus {\n background: none;\n border: none;\n outline: none;\n }\n :host .__paged-input-increment input[type=\"number\"]::-webkit-outer-spin-button,\n :host .__paged-input-increment input[type=\"number\"]::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n :host .__paged-input-increment span {\n display: flex;\n max-height: 20px;\n cursor: pointer;\n padding: 4px;\n }\n :host .__paged-input-select {\n color: #222D39;\n background: rgba(0, 0, 0, 0.1);\n font-size: 15px;\n border: none;\n padding: 4px;\n border-radius: 5px;\n min-height: fit-content;\n //max-height: 30px;\n //width: -webkit-fill-available;\n width: fit-content;\n }\n :host .__paged-input-select:focus {\n outline: none;\n }\n`;\n/* harmony default export */ const input_style = (input_style_styles);\n;// CONCATENATED MODULE: ./src/components/overlay/components/input/index.js\n\n\n\n\nclass Input {\n _root = null;\n _rootShadow = null;\n _parent = null;\n _text = null;\n _type = null;\n _uniqId = null;\n _options = null;\n _key = null;\n _value = null;\n _validations = null;\n _widget = null;\n onChange = () => {};\n inputEvent = new CustomEvent('input', {\n details: {\n text: () => text.value\n }\n });\n constructor(options) {\n if (options) {\n this._widget = options.widget;\n this._key = options.key;\n this._parent = options.parent ? options.parent : undefined;\n this._text = options.label ? options.label : undefined;\n this._type = options.type ? options.type : undefined;\n this._options = options.options ? options.options : undefined;\n this._validations = options.validations ? options.validations : undefined;\n this._value = typeof options.value !== undefined ? options.value : undefined;\n if (options.onChange) {\n this.onChange = options.onChange;\n }\n this._uniqId = this._genId();\n }\n this.__init__();\n }\n set value(val) {\n this._value = val;\n this._rootShadow.removeChild(this._rootShadow.childNodes[2]);\n this._rootShadow.appendChild(this._content);\n }\n get _label() {\n if (this._text) {\n return dom.createElement({\n tag: 'label',\n attributes: {\n class: '__paged-input-label'\n },\n innerHTML: this._text\n });\n }\n return undefined;\n }\n getWithFormat(value) {\n if (this._validations && this._validations.format) {\n return this._validations.format(value);\n }\n return value;\n }\n get _content() {\n if (this._type) {\n switch (this._type) {\n case 'switch':\n return dom.createElement({\n tag: 'div',\n attributes: {\n class: '__paged-input-switch'\n },\n children: [dom.createElement({\n tag: 'input',\n attributes: {\n type: 'checkbox',\n id: this._uniqId,\n checked: this._value\n },\n events: {\n input: this._onChange.bind(this)\n }\n }), dom.createElement({\n tag: 'label',\n attributes: {\n type: 'checkbox',\n for: this._uniqId\n }\n })]\n });\n case 'increment':\n return dom.createElement({\n tag: 'div',\n attributes: {\n class: '__paged-input-increment'\n },\n children: [dom.createElement({\n tag: 'span',\n innerHTML: components_icons.minus,\n events: {\n click: this._stepDown.bind(this)\n }\n }), dom.createElement({\n tag: 'input',\n attributes: {\n type: 'number',\n value: 0,\n min: this._validations && typeof this._validations.min === 'number' ? this.getWithFormat(this._validations.min) : 0,\n max: this._validations && typeof this._validations.max === 'number' ? this.getWithFormat(this._validations.max) : this._isMobile() ? 5 : 15,\n step: this._validations && typeof this._validations.step === 'number' ? this.getWithFormat(this._validations.step) : 1,\n value: this.getWithFormat(this._value)\n },\n events: {\n keyup: ev => {\n const input = this._rootShadow.querySelector('input[type=\"number\"]');\n const maxValue = this._validations && typeof this._validations.max === 'number' ? this._validations.max : this._isMobile() ? 5 : 15;\n const minValue = this._validations && typeof this._validations.min === 'number' ? this._validations.min : 0;\n if (parseInt(input.value) >= maxValue) {\n ev.preventDefault();\n input.value = this.getWithFormat(15);\n input.dispatchEvent(this.inputEvent);\n }\n if (parseInt(input.value) <= minValue) {\n ev.preventDefault();\n input.value = this.getWithFormat(0);\n input.dispatchEvent(this.inputEvent);\n }\n },\n input: this._onChange.bind(this)\n }\n }), dom.createElement({\n tag: 'span',\n innerHTML: components_icons.plus,\n events: {\n click: this._stepUp.bind(this)\n }\n })]\n });\n case 'select':\n return dom.createElement({\n tag: 'select',\n attributes: {\n class: '__paged-input-select',\n id: this._key\n },\n events: {\n input: this._onChange.bind(this)\n },\n children: (this._options || []).map(option => {\n return dom.createElement({\n tag: 'option',\n attributes: {\n value: option.value,\n selected: option.value === this._value\n },\n innerHTML: option.label\n });\n })\n });\n default:\n return this._type;\n }\n }\n return undefined;\n }\n get _children() {\n return [this._label, this._content];\n }\n __init__() {\n this._root = dom.createElement({\n tag: 'div',\n appendTo: this._parent ? this._parent : undefined,\n attributes: {\n class: constants.classes.input,\n labelKey: this._key\n }\n });\n this._rootShadow = this._root.attachShadow({\n mode: 'open'\n });\n dom.createElement({\n tag: 'style',\n innerHTML: input_style,\n appendTo: this._rootShadow\n });\n this._children.filter(child => child).forEach(child => this._rootShadow.appendChild(child));\n }\n _genId() {\n const ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n const ID_LENGTH = 8;\n var rtn = '';\n for (var i = 0; i < ID_LENGTH; i++) {\n rtn += ALPHABET.charAt(Math.floor(Math.random() * ALPHABET.length));\n }\n return rtn;\n }\n _stepDown() {\n const input = this._rootShadow.querySelector('input[type=\"number\"]');\n if (input) {\n input.stepDown();\n input.dispatchEvent(this.inputEvent);\n }\n }\n _stepUp() {\n const input = this._rootShadow.querySelector('input[type=\"number\"]');\n if (input) {\n input.stepUp();\n input.dispatchEvent(this.inputEvent);\n }\n }\n _isMobile() {\n return window.matchMedia('(max-width: 767px)').matches;\n }\n _onChange(event) {\n let value;\n switch (this._type) {\n case 'select':\n const select = this._rootShadow.querySelector('select');\n value = select.value;\n break;\n case 'switch':\n const checkbox = this._rootShadow.querySelector('input[type=\"checkbox\"]');\n value = checkbox.checked || false;\n\n //Check for close widget on mobile (Screenreader)\n const switchElement = checkbox.parentElement;\n const label = switchElement.previousElementSibling.innerHTML;\n if (this._isMobile() && label === 'Screen Reader' && value) {\n this._widget._close();\n }\n break;\n case 'increment':\n const number = this._rootShadow.querySelector('input[type=\"number\"]');\n if (this._validations && this._validations.format) {\n value = Number(number.value || 0) / 100;\n } else {\n value = Number(number.value || 0);\n }\n break;\n }\n this.onChange(value);\n }\n}\n;// CONCATENATED MODULE: ./src/components/overlay/components/account/style.js\nconst account_style_styles = `\n \n :host .__paged-account-form input[type=\"checkbox\"] {\n width: auto;\n height: auto;\n position: relative;\n margin-bottom: 0;\n }\n\n :host {\n width: fit-content;\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n align-items: center;\n min-height: 300px;\n position: relative;\n }\n\n :host label {\n margin: 16px 12px;\n }\n\n :host .__paged-account-form {\n width: 100%;\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n align-items: center;\n }\n\n :host .__paged-account-form input {\n width: calc(100% - 42px);\n margin-bottom: 12px;\n outline: none;\n border-radius: 5px;\n border: none;\n background: rgba(0, 0, 0, 0.04);\n color: #222D39;\n padding: 12px 8px;\n min-width: 280px;\n margin-right: 16px;\n margin-left: 16px;\n }\n\n :host .__paged-account-form button[type=\"submit\"] {\n border-radius: 5px;\n background: var(--paged-color);\n padding: 12px 8px;\n width: calc(100% - 28px);\n outline: none;\n border: none;\n cursor: pointer;\n font-weight: 600;\n color: white;\n }\n\n :host .__paged-account-form span {\n color: #222D39;\n padding: 12px;\n position: relative;\n background: white;\n }\n\n :host .__paged-account-form span:after {\n content: '';\n width: 100px;\n height: 2px;\n background: #222D39;\n position: absolute;\n top: 0;\n left: -25px;\n right: 0;\n bottom: 0;\n margin: auto;\n z-index: -1;\n }\n\n :host .__paged-account-form button[type=\"link\"] {\n border-radius: 5px;\n background: none;\n border: 2px solid var(--paged-color);\n padding: 10px 8px;\n width: calc(100% - 28px);\n color: var(--paged-color);\n outline: none;\n cursor: pointer;\n margin-bottom: 12px;\n font-weight: 600;\n }\n\n :host .__paged-account-form a {\n color: #222D39;\n text-decoration: underline;\n margin-bottom: 12px;\n }\n\n /*:host .__paged-account-form a:hover {\n text-decoration: underline;\n }*/\n\n :host .__paged-form-error {\n color: red;\n margin: 0 12px 12px 12px;\n }\n\n :host .__paged-profile {\n width: 60px;\n height: 60px;\n background: rgba(255, 255, 255, 0.03);\n border-radius: 50%;\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n }\n\n :host .__paged-profile span {\n padding 0;\n background: none;\n }\n\n :host .__paged-profile span::after {\n display: none;\n }\n\n :host h1 {\n margin: 12px auto;\n font-weight: 500;\n margin-bottom: 24px;\n }\n\n :host h3 {\n text-align: start;\n font-weight: 400;\n width: calc(100% - 24px);\n margin: 0 0 12px 0;\n }\n :host h3:last-of-type {\n margin-bottom: 24px;\n }\n :host button:nth-of-type(1) {\n margin-bottom: 12px;\n }\n`;\n/* harmony default export */ const account_style = (account_style_styles);\n;// CONCATENATED MODULE: ./src/components/fetch/index.js\nclass Fetch {\n static fixUrl(url) {\n return true ? `https://paged.ai${url}` : 0;\n }\n static get(url, options) {\n return fetch(Fetch.fixUrl(url), {\n method: 'GET',\n ...options\n });\n }\n static post(url, options) {\n return fetch(Fetch.fixUrl(url), {\n method: 'POST',\n ...options\n });\n }\n}\n;// CONCATENATED MODULE: ./src/components/overlay/components/alert/style.js\nconst alert_style_styles = `\n :host .__paged-alert {\n width: calc(100% - 50px);\n padding: 12px;\n border-radius: 5px;\n background: rgba(255, 255, 255, 0.5);\n color: black;\n position: absolute;\n top: 12px;\n left: 0;\n right: 0;\n margin: auto;\n mix-blend-mode: difference !important;\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n box-shadow: 0 2px 4px 0 rgb(0 0 0 / 20%);\n }\n`;\n/* harmony default export */ const alert_style = (alert_style_styles);\n;// CONCATENATED MODULE: ./src/components/overlay/components/alert/index.js\n\n\n\n\n\nclass Alert {\n _root = null;\n _rootShadow = null;\n _parent = null;\n _text = null;\n _id = null;\n constructor(options) {\n if (options) {\n this._parent = options.parent ? options.parent : undefined;\n this._text = options.text ? options.text : undefined;\n }\n this.__init__();\n }\n get _content() {\n const content = dom.createElement({\n tag: 'div',\n attributes: {\n class: '__paged-alert'\n },\n innerHTML: this._text,\n events: {\n click: () => console.log('clicked')\n }\n });\n return content;\n }\n get _children() {\n return [this._content];\n }\n __init__() {\n this._id = this._genId();\n this._root = dom.createElement({\n tag: 'div',\n appendTo: this._parent ? this._parent : undefined,\n attributes: {\n id: this._id\n }\n });\n this._rootShadow = this._root.attachShadow({\n mode: 'closed'\n });\n dom.createElement({\n tag: 'style',\n innerHTML: alert_style,\n appendTo: this._rootShadow\n });\n this._children.filter(child => child).forEach(child => this._rootShadow.appendChild(child));\n setTimeout(() => {\n const element = this._parent.getElementById(this._id);\n if (element) {\n element.remove();\n }\n }, 3000);\n }\n _genId() {\n const ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n const ID_LENGTH = 8;\n var rtn = '';\n for (var i = 0; i < ID_LENGTH; i++) {\n rtn += ALPHABET.charAt(Math.floor(Math.random() * ALPHABET.length));\n }\n return rtn;\n }\n}\n;// CONCATENATED MODULE: ./src/components/overlay/components/account/index.js\n\n\n\n\n\n\nclass Account {\n _root = null;\n _rootShadow = null;\n _parent = null;\n _mode = 'login';\n _user = null;\n _store = null;\n _translation = null;\n _onUserLogin = () => {};\n _onAccountViewChange = () => {};\n constructor(options) {\n if (options) {\n this._parent = options.parent ? options.parent : undefined;\n this._store = options.store ? options.store : undefined;\n this._translation = options.translation ? options.translation : undefined;\n if (options.onUserLogin) {\n this._onUserLogin = options.onUserLogin;\n }\n if (options.onAccountViewChange) {\n this._onAccountViewChange = options.onAccountViewChange;\n }\n }\n this.__init__();\n }\n get _label() {\n return dom.createElement({\n tag: 'label',\n innerHTML: this._mode === 'login' ? this._translation.get('signIn') : this._mode === 'register' ? this._translation.get('signUp') : null\n });\n }\n get _content() {\n const content = dom.createElement({\n tag: 'form',\n attributes: {\n class: '__paged-account-form'\n },\n innerHTML: this._mode === 'login' ? `\n \n \n ${this._translation.get('forgotCredentials')}\n \n ${this._translation.get('orText')}\n ` : this._mode === 'register' ? `\n \n \n \n \n \n \n \n ${this._translation.get('orText')}\n ` : `\n
\n ${components_icons.profile}\n
\n

${this._user.username}

\n

${this._translation.get('fullName')}: ${this._user.name}

\n

${this._translation.get('email')}: ${this._user.email}

\n

${this._translation.get('lastSaved')}: ${new Date().toLocaleDateString('en-us', {\n weekday: \"long\",\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\"\n })}

\n \n `,\n events: {\n submit: this._onSubmit.bind(this)\n }\n });\n dom.createElement({\n tag: 'button',\n appendTo: content,\n attributes: {\n type: 'link'\n },\n events: {\n click: e => {\n if (this._mode !== 'profile') {\n this._onViewChange(e, this._mode === 'login' ? 'register' : 'login');\n return;\n }\n this._user = null;\n this._mode = 'login';\n this._store.remove('auth_token');\n this._store.remove('user_settings');\n this._onViewChange(e, 'login');\n }\n },\n innerHTML: this._mode === 'login' ? this._translation.get('openAccount') : this._mode === 'register' ? this._translation.get('signIn') : this._translation.get('signOut')\n });\n return content;\n }\n get _children() {\n return [this._label, this._content];\n }\n __init__() {\n this._getSession().then(data => {\n if (data && data.user) {\n this._mode = 'profile';\n this._user = data.user;\n }\n const exists = dom.selectElement(`.${constants.classes.account}`, this._parent);\n this._root = exists ? exists : dom.createElement({\n tag: 'div',\n appendTo: this._parent ? this._parent : undefined,\n attributes: {\n class: constants.classes.account\n }\n });\n if (!exists) {\n this._rootShadow = this._root.attachShadow({\n mode: 'open'\n });\n }\n dom.createElement({\n tag: 'style',\n innerHTML: account_style,\n appendTo: this._rootShadow\n });\n this._children.filter(child => child).forEach(child => this._rootShadow.appendChild(child));\n });\n }\n _onViewChange(event, mode) {\n if (event) {\n event.preventDefault();\n }\n this._mode = mode;\n this._rootShadow.innerHTML = '';\n this.__init__();\n this._onAccountViewChange(mode);\n }\n _onSubmit(event) {\n event.preventDefault();\n const form = event.path ? Array.from(event.path).find(el => el.tagName === 'FORM') : this._rootShadow.querySelector('.__paged-account-form');\n const inputs = Array.from(form.childNodes).filter(el => el.tagName === 'INPUT');\n const errors = Array.from(form.childNodes).filter(el => el.tagName === 'P').filter(el => el.className === '__paged-form-error');\n const value = inputs.reduce((payload, input) => {\n const key = input.getAttribute('dataId');\n if (key && input.value) {\n payload[key] = input.value;\n }\n return payload;\n }, {});\n errors.forEach(error => error.remove());\n switch (this._mode) {\n case 'login':\n this._login(value, form);\n break;\n case 'register':\n this._register(value, form);\n break;\n case 'profile':\n this._saveSettings(value);\n break;\n }\n }\n _login(value, form) {\n Fetch.post('/api/auth/signin', {\n body: JSON.stringify(value || {})\n }).then(response => {\n if (response.status === 200) {\n response.json().then(token => {\n this._store.set('auth_token', token.token);\n this._getSession().then(data => {\n if (data && data.user) {\n if (data.user.settings) {\n this._store.set('config', data.user.settings);\n this._store.set('user_settings', data.user.settings);\n }\n this._user = data.user;\n this._onViewChange(null, 'profile');\n this._onUserLogin();\n } else {\n form.insertBefore(dom.createElement({\n tag: 'p',\n attributes: {\n class: '__paged-form-error'\n },\n innerHTML: 'Incorrect username or password. Check your credentials are correct and try again'\n }), form.querySelector('button[type=\"submit\"]'));\n }\n });\n });\n } else {\n form.insertBefore(dom.createElement({\n tag: 'p',\n attributes: {\n class: '__paged-form-error'\n },\n innerHTML: 'Incorrect username or password. Check your credentials are correct and try again'\n }), form.querySelector('button[type=\"submit\"]'));\n }\n });\n }\n _register(value, form) {\n if (form.querySelector('input[type=\"checkbox\"]').checked === false) {\n form.insertBefore(dom.createElement({\n tag: 'p',\n attributes: {\n class: '__paged-form-error'\n },\n innerHTML: \"Please accept our terms!\"\n }), form.querySelector('button[type=\"submit\"]'));\n return;\n }\n Fetch.post('/api/auth/register', {\n body: JSON.stringify(value || {})\n }).then(response => response.json().then(data => {\n if (data && data.code !== 200) {\n form.insertBefore(dom.createElement({\n tag: 'p',\n attributes: {\n class: '__paged-form-error'\n },\n innerHTML: data.message\n }), form.querySelector('button[type=\"submit\"]'));\n return;\n } else {\n this._onViewChange(undefined, 'login');\n new Alert({\n parent: this._rootShadow,\n text: data.message\n });\n }\n }));\n }\n _saveSettings(value) {\n Fetch.post('/api/user/settings', {\n headers: {\n Authorization: this._store.get('auth_token')\n },\n body: JSON.stringify(this._store.get('config') || {})\n }).then(response => response.json()).then(data => {\n this._store.set('user_settings', data.settings || {});\n new Alert({\n parent: this._rootShadow,\n text: data.message\n });\n });\n }\n async _getSession() {\n return await Fetch.get('/api/auth/session', {\n headers: {\n Authorization: this._store.get('auth_token')\n }\n }).then(response => response.json());\n }\n}\n;// CONCATENATED MODULE: ./src/components/overlay/components/reader/style.js\nconst reader_style_styles = `\n :host {\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n flex-wrap: wrap;\n position: fixed;\n border-radius: 5px;\n width: fit-content;\n min-width: 300px;\n /*max-width: 430px;*/\n max-width: 550px;\n z-index: 1000;\n top: auto;\n bottom: 0;\n left: 20px;\n box-shadow: -3px 0px 16px 0px rgba(0, 0, 0, 0.15);\n -webkit-box-shadow: -3px 0px 16px 0px rgba(0, 0, 0, 0.15);\n color: #222D39;\n background: white;\n user-select: none;\n height: fit-content;\n // min-height: fit-content;\n // max-height: 95px;\n overflow: hidden;\n }\n\n :host .paged-reader-dragger {\n width: 100%;\n border-bottom: 2px solid #222D39;\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n padding: 0 12px;\n cursor: grab;\n margin-bottom: 12px\n }\n\n :host .paged-reader-dragger h1 {\n font-size: 22px;\n margin: 0;\n margin-right: 100px;\n }\n \n :host .paged-reader-dragger button {\n margin: 0;\n padding: 0;\n border: none;\n background: none;\n margin: auto 0;\n height: 24px;\n cursor: pointer;\n }\n\n :host .__paged_reader_play, :host .__paged_reader_forward, :host .__paged_reader_backward, :host .__paged_reader_settings {\n width: fit-content;\n background: #222D39;\n color: white;\n border: none;\n outline: none;\n margin: 0 auto;\n border-radius: 8px;\n margin-bottom: 12px;\n cursor: pointer;\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n padding: 6px;\n }\n\n :host .__paged_reader_play svg, :host .__paged_reader_forward svg, :host .__paged_reader_backward svg, :host .__paged_reader_settings svg {\n width: 24px;\n height: 24px;\n margin: 0;\n }\n\n :host .__paged_reader_cursor {\n position: relative;\n display: inline-block;\n width: 60px;\n height: 34px;\n border-radius: 5px;\n overflow: hidden;\n margin-left: 14px;\n }\n\n\n :host .__paged_reader_cursor input { \n opacity: 0;\n width: 0;\n height: 0;\n }\n\n :host .__paged_reader_cursor .slider {\n position: absolute;\n cursor: pointer;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: #ccc;\n -webkit-transition: .4s;\n transition: .4s;\n border-radius: 5px;\n }\n\n :host .__paged_reader_cursor .slider:before {\n position: absolute;\n content: \"\";\n height: 26px;\n width: 26px;\n left: 4px;\n bottom: 4px;\n background-color: white;\n -webkit-transition: .4s;\n transition: .4s;\n border-radius: 5px;\n }\n\n :host .__paged_reader_cursor input:checked + .slider {\n background-color: #222D39;\n }\n\n :host .__paged_reader_cursor input:focus + .slider {\n box-shadow: 0 0 1px #222D39;\n }\n\n :host .__paged_reader_cursor input:checked + .slider:before {\n -webkit-transform: translateX(26px);\n -ms-transform: translateX(26px);\n transform: translateX(26px);\n }\n \n :host .paged_popUp {\n display: flex;\n flex-direction: column;\n position: fixed;\n bottom: 150px;\n padding: 10px;\n width: 410px;\n z-index: 99;\n background: white;\n border: 1px solid black;\n border-radius: 30px;\n }\n \n :host .paged_popUp button {\n width: fit-content;\n align-self: center;\n background: #222D39;\n color: white;\n border: none;\n outline: none;\n margin: 0 auto;\n border-radius: 8px;\n margin-bottom: 12px;\n cursor: pointer;\n padding: 6px;\n } \n`;\n/* harmony default export */ const reader_style = (reader_style_styles);\n;// CONCATENATED MODULE: ./src/components/translation/index.js\nclass Translation {\n _language = 'EN';\n _languages = ['EN', 'DE'];\n _data = new Map();\n constructor(lng) {\n this._language = lng;\n this._languages.forEach(language => {\n const translations = this.get_translation_file(language);\n Object.keys(translations).forEach(key => {\n if (!this._data.has(language)) {\n this._data.set(language, new Map());\n }\n this._data.get(language).set(key, translations[key]);\n });\n });\n }\n get_translation_file(key) {\n const imported = __webpack_require__(913)(\"./\" + key.toLowerCase() + \".js\");\n if (imported && imported.default) {\n return imported.default;\n }\n return {};\n }\n set_language(language) {\n this._language = language;\n }\n get(key) {\n if (!this._data.has(this._language)) {\n return key;\n }\n if (!this._data.get(this._language).has(key)) {\n return key;\n }\n return this._data.get(this._language).get(key);\n }\n}\n;// CONCATENATED MODULE: ./src/components/overlay/components/reader/index.js\n\n\n\n\n\n\nclass Reader {\n _root = null;\n _rootShadow = null;\n _parent = null;\n _isEnabled = false;\n _isHovered = false;\n _isDragging = false;\n _synth = null;\n _dragger = null;\n _draggerPosition = {\n pos1: 0,\n pos2: 0,\n pos3: 0,\n pos4: 0\n };\n _popUp = null;\n _isAutoPlay = false;\n _isSpeaking = false;\n _currentParent = null;\n _currentText = null;\n _currentLine = 0;\n _readingLines = [];\n _currentElement = null;\n _languageChanger = null;\n _autoPlayButton = null;\n _cursorEnabled = false;\n _translation = null;\n _readerInputs = [];\n _settings = {\n rate: 1,\n pitch: 1,\n volume: 1,\n lang: 'EN'\n };\n constructor(options) {\n if (!this._parent) {\n this._parent = document.body;\n }\n this._translation = new Translation(this._settings.lang);\n this.__init__();\n }\n set enabled(value) {\n if (value) {\n if (!this._isEnabled) {\n this._parent.addEventListener('mousemove', this._readEvent);\n this._root.style.display = 'flex';\n }\n } else {\n this._parent.removeEventListener('mousemove', this._readEvent);\n this._root.style.display = 'none';\n this._synth.cancel();\n window.isAutoPlay = false;\n this._autoPlayButton.innerHTML = components_icons.play;\n }\n this._isEnabled = value;\n }\n set language(value) {\n this._settings.lang = value;\n this._languageChanger.value = value;\n this._translation.set_language(value);\n this._changeLanguage();\n }\n _changeLanguage() {\n //Change elements-innerHtml\n const tabs = Array.from(this._rootShadow.querySelectorAll('[dataId]'));\n tabs.forEach(tab => {\n tab.innerHTML = this._translation.get(tab.getAttribute('dataid'));\n });\n\n //Change input-labels\n const inputs = Array.from(this._rootShadow.querySelectorAll('.__paged-input'));\n inputs.forEach(input => {\n const searchModuleRoot = input && input.shadowRoot;\n const label = searchModuleRoot.querySelector('label');\n label.innerHTML = this._translation.get(input.getAttribute('labelKey'));\n });\n }\n __init__() {\n this._createSettingsDialog();\n this._readEvent = this._readEvent.bind(this);\n this._translation.set_language(this._settings.lang);\n this._synth = window.speechSynthesis;\n this._synth.resume();\n this._synth.cancel();\n }\n _createSettingsDialog() {\n this._root = dom.createElement({\n tag: 'div',\n appendTo: this._parent ? this._parent : undefined,\n attributes: {\n class: constants.classes.reader\n }\n });\n this._rootShadow = this._root.attachShadow({\n mode: 'open'\n });\n this._rootShadow.innerHTML = ``;\n this._dragger = dom.createElement({\n tag: 'div',\n appendTo: this._rootShadow,\n /*innerHTML: `\n

Screen Reader

\n `,*/\n attributes: {\n class: 'paged-reader-dragger'\n //dataId: 'screenReader'\n },\n events: {\n mousedown: this._mouseDownEvent.bind(this)\n }\n });\n dom.createElement({\n tag: 'h1',\n appendTo: this._dragger,\n /*innerHTML: `\n

Screen Reader

\n `,*/\n innerHTML: this._translation.get('screenReader'),\n attributes: {\n dataId: 'screenReader'\n }\n });\n\n /*const { height } = window.getComputedStyle(this._rootShadow.querySelector('.paged-reader-dragger'));\n const headerHeight = Number(height.split('px')[0]);\n this._root.style.maxHeight = `${headerHeight + 80}px`;*/\n\n dom.createElement({\n tag: 'button',\n appendTo: this._dragger,\n innerHTML: components_icons.cancel,\n events: {\n click: () => this._root.style.display = 'none'\n }\n });\n\n /*this._popUp = dom.createElement({\n tag: 'div',\n appendTo: this._rootShadow,\n attributes: {\n class: 'paged_popUp'\n },\n innerHTML: '

Voice quality can suffer, if preferred language of your system is not the same as the language of the screen reader.

'\n });\n dom.createElement({\n tag: 'button',\n appendTo: this._popUp,\n innerHTML: 'Okay',\n attributes: {\n class: 'button'\n },\n events: {\n click: () => this._popUp.style.display = 'none',\n },\n });*/\n\n dom.createElement({\n tag: 'style',\n innerHTML: reader_style,\n appendTo: this._rootShadow\n });\n const cursor_switch = dom.createElement({\n tag: 'label',\n appendTo: this._rootShadow,\n attributes: {\n class: '__paged_reader_cursor'\n }\n });\n dom.createElement({\n tag: 'input',\n attributes: {\n type: 'checkbox'\n },\n appendTo: cursor_switch,\n events: {\n change: event => {\n this._cursorEnabled = event.target.checked;\n this._rootShadow.querySelector('.__paged_reader_play').innerHTML = components_icons.play;\n if (this._readingLines[this._currentLine]) {\n this._mouseReaderEventStyleContrast(this._readingLines[this._currentLine].elem, false);\n }\n window.isAutoPlay = false;\n this._synth.cancel();\n }\n }\n });\n dom.createElement({\n tag: 'div',\n attributes: {\n class: 'slider'\n },\n appendTo: cursor_switch\n });\n dom.createElement({\n tag: 'button',\n appendTo: this._rootShadow,\n innerHTML: components_icons.backward,\n attributes: {\n class: '__paged_reader_backward'\n },\n events: {\n click: this._onBackward.bind(this)\n }\n });\n this._autoPlayButton = dom.createElement({\n tag: 'button',\n appendTo: this._rootShadow,\n innerHTML: window.isAutoPlay ? components_icons.pause : components_icons.play,\n attributes: {\n class: '__paged_reader_play'\n },\n events: {\n click: this._onPlay.bind(this)\n }\n });\n dom.createElement({\n tag: 'button',\n appendTo: this._rootShadow,\n innerHTML: components_icons.forward,\n attributes: {\n class: '__paged_reader_forward'\n },\n events: {\n click: this._onForward.bind(this)\n }\n });\n dom.createElement({\n tag: 'button',\n appendTo: this._rootShadow,\n innerHTML: components_icons.settings,\n attributes: {\n class: '__paged_reader_settings'\n },\n events: {\n click: () => {\n if (inputDiv.style.display === 'none') {\n inputDiv.style.display = 'block';\n } else {\n inputDiv.style.display = 'none';\n }\n\n /*const { maxHeight } = getComputedStyle(this._root);\n if (maxHeight !== 'fit-content') {\n this._root.style.maxHeight = 'fit-content';\n } else {\n const { height } = window.getComputedStyle(this._rootShadow.querySelector('.paged-reader-dragger'));\n const headerHeight = Number(height.split('px')[0]);\n this._root.style.maxHeight = `${headerHeight + 100}px`;\n }*/\n }\n }\n });\n const labelDiv = dom.createElement({\n tag: 'div',\n appendTo: this._rootShadow,\n attributes: {\n class: 'paged-reader-labels',\n style: 'display: flex;flex-direction: row;justify-content:space-between;width: -webkit-fill-available;padding: 0 12px 12px 12px;'\n }\n /*innerHTML: `\n
Cursor mode
\n
Website mode
\n
Settings
\n `,*/\n });\n const cursorDiv = dom.createElement({\n tag: 'div',\n appendTo: labelDiv,\n attributes: {\n style: 'width: calc(100% / 3);margin-bottom: 8px'\n }\n });\n dom.createElement({\n tag: 'p',\n appendTo: cursorDiv,\n attributes: {\n dataId: 'cursor',\n style: 'margin: 0;'\n },\n innerHTML: this._translation.get('cursor')\n });\n const websiteDiv = dom.createElement({\n tag: 'div',\n appendTo: labelDiv,\n attributes: {\n style: 'width: calc(100% / 3);margin-bottom: 8px;display: flex;justify-content: center; text-align: center'\n }\n });\n dom.createElement({\n tag: 'p',\n appendTo: websiteDiv,\n attributes: {\n dataId: 'website',\n style: 'margin: 0;'\n },\n innerHTML: this._translation.get('website')\n });\n const settingsDiv = dom.createElement({\n tag: 'div',\n appendTo: labelDiv,\n attributes: {\n style: 'width: calc(100% / 3);margin-bottom: 8px;display: flex;justify-content: flex-end;'\n }\n });\n dom.createElement({\n tag: 'p',\n appendTo: settingsDiv,\n attributes: {\n dataId: 'settings',\n style: 'margin: 0;'\n },\n innerHTML: this._translation.get('settings')\n });\n const inputDiv = dom.createElement({\n tag: 'div',\n appendTo: this._rootShadow,\n attributes: {\n class: 'settings',\n style: 'display: none; width: 100%'\n }\n });\n const rateInput = new Input({\n key: 'rate',\n parent: inputDiv,\n value: 1,\n label: this._translation.get('rate'),\n type: 'increment',\n base: 1,\n default: 1,\n validations: {\n max: 2,\n min: 0.5,\n step: 0.1\n },\n onChange: value => {\n const wasPlaying = window.isAutoPlay;\n window.isAutoPlay = false;\n this._rootShadow.querySelector('.__paged_reader_play').innerHTML = components_icons.play;\n this._settings.rate = value;\n this._synth.cancel();\n if (wasPlaying) {\n this._onPlay(undefined);\n }\n }\n });\n const pitchInput = new Input({\n key: 'pitch',\n parent: inputDiv,\n value: 1,\n label: this._translation.get('pitch'),\n type: 'increment',\n base: 1,\n default: 1,\n validations: {\n max: 2,\n min: 0,\n step: 0.1\n },\n onChange: value => {\n const wasPlaying = window.isAutoPlay;\n window.isAutoPlay = false;\n this._rootShadow.querySelector('.__paged_reader_play').innerHTML = components_icons.play;\n this._settings.pitch = value;\n this._synth.cancel();\n if (wasPlaying) {\n this._onPlay(undefined);\n }\n }\n });\n const volumeInput = new Input({\n key: 'volume',\n parent: inputDiv,\n value: 1,\n label: this._translation.get('volume'),\n type: 'increment',\n base: 1,\n default: 1,\n validations: {\n max: 1,\n min: 0,\n step: 0.05,\n format: n => n * 100\n },\n onChange: value => {\n const wasPlaying = window.isAutoPlay;\n window.isAutoPlay = false;\n this._rootShadow.querySelector('.__paged_reader_play').innerHTML = components_icons.play;\n this._settings.volume = value;\n this._synth.cancel();\n if (wasPlaying) {\n this._onPlay(undefined);\n }\n }\n });\n this._languageChanger = new Input({\n key: 'lang',\n parent: inputDiv,\n value: 1,\n label: this._translation.get('lang'),\n type: 'select',\n default: 'EN',\n options: [{\n label: 'English',\n value: 'EN'\n }, {\n label: 'Deutsch',\n value: 'DE'\n }],\n onChange: value => {\n const wasPlaying = window.isAutoPlay;\n window.isAutoPlay = false;\n this._rootShadow.querySelector('.__paged_reader_play').innerHTML = components_icons.play;\n this._settings.lang = value;\n this._translation.set_language(value);\n this._synth.cancel();\n if (wasPlaying) {\n this._onPlay(undefined);\n }\n this._changeLanguage();\n }\n });\n this._readerInputs.push(rateInput, pitchInput, volumeInput, this._languageChanger);\n this._root.style.display = 'none';\n }\n _checkForPlatfrom() {\n /*if (window.navigator.platform.indexOf(\"Win\") != -1) {\n console.log(\"The user is running Windows\");\n } else if (window.navigator.platform.indexOf(\"Mac\") != -1) {\n console.log(\"The user is running Mac OS\");\n } else if (window.navigator.platform.indexOf(\"Linux\") != -1) {\n console.log(\"The user is running Linux\");\n } else {\n console.log(\"The user's operating system could not be determined\");\n }*/\n //var isIOS = /(iPhone|iPod|iPad)/i.test(navigator.platform);\n\n return window.navigator.platform.indexOf(\"Mac\") !== -1;\n }\n _checkParentElement(element) {\n for (; element && element !== document; element = element.parentNode) {\n let list = element.classList.value.split(' ').filter(cls => cls.toLocaleLowerCase().includes('footer') /* || cls.toLocaleLowerCase().includes('header')*/);\n if (element.parentNode.tagName === 'HEADER' || element.parentNode.tagName === 'FOOTER' || list.length > 0) {\n return true;\n }\n }\n return false;\n }\n _checkForElementorAttributeOnBody() {\n return !!document.body.className.match(/elementor/);\n }\n _onPlay(event) {\n if (this._currentElement) {\n this._mouseReaderEventStyleContrast(this._currentElement, false);\n }\n window.isAutoPlay = window.isAutoPlay ? false : true;\n this._cursorEnabled = false;\n this._rootShadow.querySelector('.__paged_reader_cursor').querySelector('input').checked = false;\n const button = this._rootShadow.querySelector('.__paged_reader_play');\n if (window.isAutoPlay) {\n button.innerHTML = components_icons.pause;\n this._synth.cancel();\n //const elements = Array.from(document.querySelector('main').querySelectorAll('p, span, h1, h2, h3, h4, h5, h6, li, td'));\n let elements;\n if (this._checkForElementorAttributeOnBody()) {\n elements = Array.from(document.querySelector(\"[data-elementor-type='wp-post']\").querySelectorAll('p/*, span*/, h1, h2, h3, h4, h5, h6, li, td'));\n } else {\n elements = Array.from(document.querySelectorAll('p/*, span*/, h1, h2, h3, h4, h5, h6, li, td')).filter(elem => this._checkParentElement(elem) !== true);\n }\n const allElements = elements.filter(text => text.innerText);\n let textElements = [];\n for (let i = 0; i < allElements.length; i++) {\n if (i > 0 && allElements[i].innerText === allElements[i - 1].innerText) {\n textElements.pop();\n }\n textElements.push(allElements[i]);\n }\n const lines = textElements.map(element => {\n const {\n backgroundColor\n } = getComputedStyle(element);\n const {\n color\n } = getComputedStyle(element);\n element.setAttribute('bg-color', backgroundColor);\n element.setAttribute('font-color', color);\n return {\n elem: element,\n text: element.textContent.trim()\n };\n });\n const htmlTagRegex = /<[^>]+>/;\n this._readingLines = lines.filter(line => !htmlTagRegex.test(line.text));\n for (let i = this._currentLine; i < this._readingLines.length; i++) {\n const utterance = new SpeechSynthesisUtterance(this._readingLines[i].text);\n utterance.onend = () => {\n //this._readingLines[i].elem.style.backgroundColor = 'transparent';\n this._mouseReaderEventStyleContrast(this._readingLines[i].elem, false);\n };\n utterance.onstart = () => {\n //this._readingLines[i].elem.style.backgroundColor = 'rgba(255, 255, 0, 0.6)';\n this._mouseReaderEventStyleContrast(this._readingLines[i].elem, true);\n this._currentLine = i;\n };\n Object.keys(this._settings).forEach(key => {\n utterance[key] = this._settings[key];\n });\n\n //Set special voice for MacOs\n if (this._checkForPlatfrom() && this._settings.lang === 'EN') {\n const voices = window.speechSynthesis.getVoices();\n utterance.voice = voices[5];\n }\n this._synth.speak(utterance);\n }\n } else {\n this._mouseReaderEventStyleContrast(this._readingLines[this._currentLine].elem, false);\n this._synth.cancel();\n button.innerHTML = components_icons.play;\n }\n }\n _onForward(event) {\n if (this._readingLines.length) {\n const wasPlaying = window.isAutoPlay;\n if (window.isAutoPlay) {\n this._onPlay(undefined);\n }\n if (this._currentLine + 1 <= this._readingLines.length - 1) {\n //this._readingLines[this._currentLine].elem.style.backgroundColor = 'transparent';\n //this._mouseReaderEventStyleContrast(this._readingLines[this._currentLine].elem, false);\n this._currentLine++;\n //this._readingLines[this._currentLine].elem.style.backgroundColor = 'rgba(255, 255, 0, 0.6)';\n //this._mouseReaderEventStyleContrast(this._readingLines[this._currentLine].elem, false);\n if (wasPlaying) {\n this._onPlay(undefined);\n }\n }\n }\n }\n _onBackward(event) {\n if (this._readingLines.length) {\n const wasPlaying = window.isAutoPlay;\n if (window.isAutoPlay) {\n this._onPlay(undefined);\n }\n if (this._currentLine - 1 >= 0) {\n //this._readingLines[this._currentLine].elem.style.backgroundColor = 'transparent';\n //this._mouseReaderEventStyleContrast(this._readingLines[this._currentLine].elem, false);\n this._currentLine--;\n //this._readingLines[this._currentLine].elem.style.backgroundColor = 'rgba(255, 255, 0, 0.6)';\n //this._mouseReaderEventStyleContrast(this._readingLines[this._currentLine].elem, true);\n if (wasPlaying) {\n this._onPlay(undefined);\n }\n }\n }\n }\n _onStop(event) {\n if (this._readingLines.length) {\n const wasPlaying = window.isAutoPlay;\n /*if (window.isAutoPlay) {\n // pause if its playing\n this._onPlay(undefined);\n }*/\n //this._readingLines[this._currentLine].elem.style.backgroundColor = 'transparent';\n //this._mouseReaderEventStyleContrast(this._readingLines[this._currentLine].elem, false);\n //this._currentLine--;\n //this._readingLines[this._currentLine].elem.style.backgroundColor = 'rgba(255, 255, 0, 0.6)';\n //this._mouseReaderEventStyleContrast(this._readingLines[this._currentLine].elem, true);\n if (wasPlaying) {\n this._onPlay(undefined);\n }\n this._currentLine = 0;\n }\n if (this._cursorEnabled) {\n this._isHovered = false;\n this._currentElement = null;\n this._currentText = null;\n }\n this._parent.addEventListener('mousemove', this._readEvent);\n }\n _mouseDownEvent(event) {\n event.preventDefault();\n this._draggerPosition.pos3 = event.clientX;\n this._draggerPosition.pos4 = event.clientY;\n this._isDragging = true;\n document.addEventListener('mousemove', this._mouseMoveEvent.bind(this));\n document.addEventListener('mouseup', this._mouseUpEvent.bind(this));\n }\n _mouseMoveEvent(event) {\n if (!this._isDragging) return;\n event.preventDefault();\n this._draggerPosition.pos1 = this._draggerPosition.pos3 - event.clientX;\n this._draggerPosition.pos2 = this._draggerPosition.pos4 - event.clientY;\n this._draggerPosition.pos3 = event.clientX;\n this._draggerPosition.pos4 = event.clientY;\n this._root.style.top = this._root.offsetTop - this._draggerPosition.pos2 + 'px';\n this._root.style.left = this._root.offsetLeft - this._draggerPosition.pos1 + 'px';\n }\n _mouseUpEvent(event) {\n this._isDragging = false;\n document.removeEventListener('mousemove', this._mouseMoveEvent.bind(this));\n document.removeEventListener('mouseup', this._mouseUpEvent.bind(this));\n }\n _mouseReaderEventStyleContrast(element, active) {\n //#191824\n //rgb(34, 45, 57)\n if (active) {\n //element.style.background = 'rgba(34, 45, 57, 1)';\n element.style.background = '#222d39';\n element.style.color = '#ffffff';\n } else {\n element.style.background = element.getAttribute('bg-color') || 'transparent';\n element.style.color = element.getAttribute('font-color') || '#000';\n }\n }\n _readEvent(event) {\n if (!this._cursorEnabled) {\n return;\n }\n if (!this._isEnabled) {\n return;\n }\n if (window.isAutoPlay) {\n return;\n }\n\n //const element = event.target;\n\n if (!this._isHovered) {\n const element = event.target;\n if (['SPAN', 'P', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'LI', 'TD', 'TH', 'A', 'BUTTON', 'LABEL', 'INPUT'].includes(element.nodeName)) {\n //if (this._synth.speaking && this._currentText === element.innerText) return;\n\n if (this._currentText !== element.innerText) {\n const {\n backgroundColor\n } = getComputedStyle(element);\n const {\n color\n } = getComputedStyle(element);\n element.setAttribute('bg-color', backgroundColor);\n element.setAttribute('font-color', color);\n element.style.position = 'relative';\n this._mouseReaderEventStyleContrast(element, true);\n this._parent.removeEventListener('mousemove', this._readEvent);\n const readTimeout = setTimeout(() => {\n this._currentText = element.innerText;\n //this._isHovered = true;\n this._synth.cancel();\n const message = new SpeechSynthesisUtterance(this._currentText);\n message.onstart = () => {\n const loader = element.querySelector('.progress');\n if (loader) loader.remove();\n this._isSpeaking = true;\n if (this._currentParent !== null) {\n this._mouseReaderEventStyleContrast(this._currentParent, false);\n this._currentParent = null;\n }\n this._currentParent = element;\n };\n message.onend = () => {\n this._isSpeaking = false;\n this._mouseReaderEventStyleContrast(this._currentParent, false);\n };\n message.error = () => console.log('paused', element);\n Object.keys(this._settings).forEach(key => {\n message[key] = this._settings[key];\n });\n\n //Set special voice for MacOs\n if (this._checkForPlatfrom() && this._settings.lang === 'EN') {\n const voices = window.speechSynthesis.getVoices();\n message.voice = voices[5];\n }\n this._currentElement = element;\n this._synth.speak(message);\n /*if (!element.querySelector('.progress')) {\n dom.createElement({\n tag: 'div',\n appendTo: element,\n innerHTML: `\n
\n
\n
\n `,\n attributes: {\n class: 'progress',\n },\n });\n }*/\n }, 800);\n element.addEventListener('mouseout', () => {\n const loader = element.querySelector('.progress');\n if (loader) loader.remove();\n this._isHovered = false;\n clearTimeout(readTimeout);\n this._parent.addEventListener('mousemove', this._readEvent);\n if (element !== this._currentParent) {\n element.style.background = element.getAttribute('bg-color') || 'transparent';\n element.style.color = element.getAttribute('font-color') || '#000';\n }\n if (!this._synth.speaking) {\n element.style.background = element.getAttribute('bg-color') || 'transparent';\n element.style.color = element.getAttribute('font-color') || '#000';\n }\n });\n }\n }\n }\n }\n}\n;// CONCATENATED MODULE: ./src/components/overlay/settings.js\nconst settings = (() => [{\n id: 'fontFamily',\n label: 'Font type',\n type: 'select',\n options: [{\n label: '-- Select --',\n value: 'default'\n }, {\n label: 'Roboto',\n value: JSON.stringify({\n url: `${\"https://paged.ai\"}/fonts/Roboto-${\"prod\"}.css`,\n css: `font-family: 'Roboto', sans-serif !important`\n })\n }, {\n label: 'Outfit',\n value: JSON.stringify({\n url: `${\"https://paged.ai\"}/fonts/Outfit-${\"prod\"}.css`,\n css: `font-family: 'Outfit', sans-serif !important`\n })\n }, {\n label: 'Open Sans',\n value: JSON.stringify({\n url: `${\"https://paged.ai\"}/fonts/OpenSans-${\"prod\"}.css`,\n css: `font-family: 'Open Sans', sans-serif !important`\n })\n }, {\n label: 'Lato',\n value: JSON.stringify({\n url: `${\"https://paged.ai\"}/fonts/Lato-${\"prod\"}.css`,\n css: `font-family: 'Lato', sans-serif !important`\n })\n }, {\n label: 'Oswald',\n value: JSON.stringify({\n url: `${\"https://paged.ai\"}/fonts/Oswald-${\"prod\"}.css`,\n css: `font-family: 'Oswald', sans-serif !important`\n })\n }, {\n label: 'Playfair',\n value: JSON.stringify({\n url: `${\"https://paged.ai\"}/fonts/Playfair-${\"prod\"}.css`,\n css: `font-family: 'Playfair Display', serif !important`\n })\n }, {\n label: 'Ubuntu',\n value: JSON.stringify({\n url: `${\"https://paged.ai\"}/fonts/Ubuntu-${\"prod\"}.css`,\n css: `font-family: 'Ubuntu', sans-serif !important`\n })\n }, {\n label: 'Garamond',\n value: JSON.stringify({\n url: `${\"https://paged.ai\"}/fonts/Garamond-${\"prod\"}.css`,\n css: `font-family: 'EB Garamond', serif !important`\n })\n }, {\n label: 'Open-Dyslexic',\n value: JSON.stringify({\n url: `${\"https://paged.ai\"}/fonts/OpenDyslexic-${\"prod\"}.css`,\n css: `font-family: 'OpenDyslexic', serif !important`\n })\n }, {\n label: 'Times New Roman',\n value: JSON.stringify({\n url: `${\"https://paged.ai\"}/fonts/TimesNewRoman-${\"prod\"}.css`,\n css: `font-family: 'TimesNewRoman', serif !important`\n })\n }, {\n label: 'Arial',\n value: JSON.stringify({\n url: `${\"https://paged.ai\"}/fonts/Arial-${\"prod\"}.css`,\n css: `font-family: 'Arial', serif !important`\n })\n }, {\n label: 'Cambria',\n value: JSON.stringify({\n url: `${\"https://paged.ai\"}/fonts/Cambria-${\"prod\"}.css`,\n css: `font-family: 'Cambria', serif !important`\n })\n }, {\n label: 'Merriweather',\n value: JSON.stringify({\n url: `${\"https://paged.ai\"}/fonts/merriweather-${\"prod\"}.css`,\n css: `font-family: 'Merriweather', serif !important`\n })\n }, {\n label: 'Inter',\n value: JSON.stringify({\n url: `${\"https://paged.ai\"}/fonts/Inter-${\"prod\"}.css`,\n css: `font-family: 'Inter', serif !important`\n })\n }, {\n label: 'Jost',\n value: JSON.stringify({\n url: `${\"https://paged.ai\"}/fonts/Jost-${\"prod\"}.css`,\n css: `font-family: 'Jost', serif !important`\n })\n }, {\n label: 'Rokkitt',\n value: JSON.stringify({\n url: `${\"https://paged.ai\"}/fonts/rokkitt-${\"prod\"}.css`,\n css: `font-family: 'Rokkitt', serif !important`\n })\n }],\n apply: 'text',\n default: 'default'\n}, {\n id: 'fontSize',\n label: 'Font size',\n type: 'increment',\n apply: 'text',\n unit: 'px',\n base: 0,\n increment: 1,\n default: 0\n}, {\n id: 'lineHeight',\n label: 'Line height',\n type: 'increment',\n apply: 'text',\n unit: 'px',\n base: 1,\n increment: 1,\n default: 0\n}, {\n id: 'wordSpacing',\n label: 'Word spacing',\n type: 'increment',\n apply: 'text',\n base: 0,\n increment: 0.1,\n default: 0\n}, {\n id: 'letterSpacing',\n label: 'Letter spacing',\n type: 'increment',\n apply: 'text',\n base: 0,\n increment: 0.05,\n default: 0\n}, {\n id: 'contrast',\n label: 'Contrast',\n type: 'switch',\n apply: undefined,\n default: false\n}, {\n id: 'hidePictures',\n label: 'Hide pictures',\n type: 'switch',\n apply: 'global',\n default: false\n}, {\n id: 'readingMask',\n label: 'Reading Mask',\n type: 'switch',\n apply: undefined,\n default: false,\n mobile: false\n}, {\n id: 'monochrome',\n label: 'Monochrome',\n type: 'switch',\n apply: undefined,\n default: false\n}, {\n id: 'screenReader',\n label: 'Screen Reader',\n type: 'switch',\n apply: undefined,\n default: false\n}].filter(setting => {\n const isMobile = window.matchMedia('(max-width: 767px)').matches;\n if (typeof setting.mobile === 'boolean') {\n if (!setting.mobile && isMobile) {\n return false;\n }\n return true;\n }\n return true;\n}))();\n/* harmony default export */ const overlay_settings = (settings);\n;// CONCATENATED MODULE: ./src/components/overlay/personas.js\nconst personas = [{\n id: 'adhs',\n type: 'switch',\n apply: undefined,\n settings: {},\n default: false\n}, {\n id: 'parkinson',\n type: 'switch',\n apply: undefined,\n settings: {},\n default: false\n}, {\n id: 'lowVision',\n type: 'switch',\n apply: undefined,\n settings: {},\n default: false\n}, {\n id: 'dyslexia',\n type: 'switch',\n apply: undefined,\n settings: {},\n default: false\n}];\n/* harmony default export */ const overlay_personas = (personas);\n;// CONCATENATED MODULE: ./src/components/overlay/index.js\n\n\n\n\n\n\n\n\n\n\n// DENIZ: Add recursive function to detect background color of images\nfunction getInheritedBackgroundColor(el) {\n // get default style for current browser\n var defaultStyle = getDefaultBackground(); // typically \"rgba(0, 0, 0, 0)\"\n\n // get computed color for el\n var backgroundColor = window.getComputedStyle(el).backgroundColor;\n\n // if we got a real value, return it\n if (backgroundColor != defaultStyle) return backgroundColor;\n\n // if we've reached the top parent el without getting an explicit color, return default\n if (!el.parentElement) return defaultStyle;\n\n // otherwise, recurse and try again on parent element\n return getInheritedBackgroundColor(el.parentElement);\n}\nfunction getDefaultBackground() {\n // have to add to the document in order to use getComputedStyle\n var div = document.createElement(\"div\");\n document.head.appendChild(div);\n var bg = window.getComputedStyle(div).backgroundColor;\n document.head.removeChild(div);\n return bg;\n}\nconst textNodes = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'a', 'li', 'mark', 'ins', 'del', 'sup', 'sub', 'small', 'i', 'b', 'code', 'pre', 'span', 'textarea', 'button', 'label', 'form', 'select', 'input', 'td'];\nclass Overlay {\n _root = null;\n _rootShadow = null;\n _toggle = null;\n _open = false;\n _account = true;\n _position = 'right';\n _color = '#222D39';\n _model = {};\n _store = null;\n _inputs = [];\n _readerInputs = [];\n _oldRef = null;\n _translation = null;\n _mask = null;\n _reader = null;\n _fontFamilyReference = null;\n constructor(options) {\n this._toggle = options && options.toggle ? options.toggle : undefined;\n this._mask = options && options.mask ? options.mask : undefined;\n this._reader = options && options.reader ? options.reader : undefined;\n this._model = options && Object.keys(options.model || {}).length ? options.model : this.defaultModel;\n this._position = options && options.position ? options.position : 'right';\n this._color = options && options.color ? options.color : '#222D39';\n this._color = !options.color.includes('#') ? '#' + options.color : '#222d39';\n this._account = options && typeof options.account !== 'undefined' ? options.account === 'false' ? false : true : true;\n this._store = options.store;\n this._translation = options.translation;\n this.__init__();\n }\n set open(value) {\n this._open = value;\n this._open ? this._root.classList.add('open') : this._root.classList.remove('open');\n if (!value) {\n //const width = getComputedStyle(this._root).width;\n\n const widgetWidth = getComputedStyle(this._root).width.slice(0, -2);\n const widthWithScrollbar = parseInt(widgetWidth) + (this._root.offsetWidth - this._root.clientWidth);\n const width = widthWithScrollbar + 'px';\n\n //this._root.style.right = `-${width}`;\n //this._root.style.left = `-${width}`;\n this._position === 'left' ? this._root.style.left = `-${width}` : this._root.style.right = `-${width}`;\n } else {\n //this._root.style.right = '0';\n //this._root.style.left = '0';\n this._position === 'left' ? this._root.style.left = 0 : this._root.style.right = 0;\n }\n }\n get defaultModel() {\n return overlay_settings.reduce((m, cfg) => {\n if (cfg.default !== null && typeof cfg.default !== undefined) {\n m[cfg.id] = cfg.default;\n }\n return m;\n }, {});\n }\n get _header() {\n return dom.createElement({\n tag: 'div',\n attributes: {\n class: 'header'\n },\n children: [dom.createElement({\n tag: 'div',\n attributes: {\n style: 'display: flex;align-items: middle'\n },\n children: [dom.createElement({\n tag: 'span',\n innerHTML: components_icons.revert,\n events: {\n click: this._revert.bind(this)\n }\n }), dom.createElement({\n tag: 'select',\n attributes: {\n style: 'margin: auto 8px',\n class: '__paged_language_changer'\n },\n innerHTML: `\n \n \n `,\n events: {\n change: this._changeLanguage.bind(this)\n }\n })]\n }), dom.createElement({\n tag: 'a',\n attributes: {\n href: 'https://paged.ai',\n target: '_blank'\n },\n innerHTML: components_icons.logoBlack\n }), dom.createElement({\n tag: 'div',\n attributes: {\n style: 'width: 70px;display: flex;justify-content: flex-end;'\n },\n children: [dom.createElement({\n tag: 'span',\n innerHTML: components_icons.cancel,\n events: {\n click: this._close.bind(this)\n }\n })]\n })]\n });\n }\n get _tabs() {\n return dom.createElement({\n tag: 'div',\n attributes: {\n class: 'tabs'\n },\n children: [dom.createElement({\n tag: 'button',\n innerHTML: this._translation.get('settings'),\n attributes: {\n dataId: 'settings'\n },\n events: {\n click: () => this._setTab('settings')\n }\n })].concat(this._account ? [dom.createElement({\n tag: 'button',\n innerHTML: this._translation.get('account'),\n attributes: {\n dataId: 'account'\n },\n events: {\n click: () => this._setTab('account')\n }\n })] : []).concat([dom.createElement({\n tag: 'button',\n innerHTML: this._translation.get('individual'),\n attributes: {\n dataId: 'individual'\n },\n events: {\n click: () => this._setTab('settings')\n }\n }), dom.createElement({\n tag: 'button',\n innerHTML: this._translation.get('personas'),\n attributes: {\n dataId: 'personas'\n },\n events: {\n click: () => this._setTab('personas')\n }\n })])\n });\n }\n hidePictures(active) {\n const divs = Array.from(document.querySelectorAll('div'));\n divs.forEach(div => {\n let bg = window.getComputedStyle(div).background;\n let bgImg = window.getComputedStyle(div).backgroundImage;\n const previousStyles = div.getAttribute('style');\n const isImgUrl = str => new RegExp(/url\\(\".+\"\\)$/gm).test(str);\n if (isImgUrl(bg)) {\n if (active) {\n if (!div.getAttribute('bg')) {\n div.setAttribute('bg', bg);\n }\n div.setAttribute('style', previousStyles ? `${previousStyles};background: none !important;` : 'background: none !important');\n } else {\n if (isImgUrl(div.getAttribute('bg'))) {\n div.setAttribute('style', previousStyles ? `${previousStyles};background: ${div.getAttribute('bg')} !important;` : `background: ${div.getAttribute('bg')} !important`);\n }\n }\n }\n if (isImgUrl(bgImg)) {\n if (active) {\n if (!div.getAttribute('bgImg')) {\n div.setAttribute('bgImg', bgImg);\n }\n div.setAttribute('style', previousStyles ? `${previousStyles};background-image: none !important;` : `background-image: none !important`);\n } else {\n if (isImgUrl(div.getAttribute('bgImg'))) {\n div.setAttribute('style', previousStyles ? `${previousStyles};background-image: ${div.getAttribute('bgImg')} !important;` : `background-image: ${div.getAttribute('bgImg')} !important`);\n }\n }\n }\n });\n const imgs = Array.from(document.querySelectorAll('img'));\n imgs.forEach(img => {\n if (img.parentNode.closest('header')) {\n return;\n }\n const previousStyles = img.getAttribute('style');\n if (active) {\n const formattedStyles = previousStyles.replace(/visibility: (visible|hidden);;?/gm, '');\n img.setAttribute('style', previousStyles ? `${formattedStyles}visibility: hidden;` : 'visibility: hidden;');\n } else {\n const formattedStyles = previousStyles.replace(/visibility: (visible|hidden);;?/gm, '');\n img.setAttribute('style', previousStyles ? `${formattedStyles}visibility: visible;` : `visibility: visible;`);\n }\n });\n return `\n img {\n visibility: hidden;\n }\n \n video {\n display: none;\n }\n \n * {\n background-image: none;\n }\n `;\n }\n readingMask(active) {\n if (!this._mask.enabled && active) {\n this._mask.enabled = active;\n } else {\n this._mask.enabled = false;\n }\n return '';\n }\n monochrome(active) {\n return `\n html {\n filter: grayscale(${!active ? 0 : 1});\n }\n `;\n }\n parkinson(active) {\n if (active) {\n document.querySelectorAll('button').forEach(button => {\n button.style.padding = '24px';\n button.setAttribute('data-padding', window.getComputedStyle(button).padding);\n });\n } else {\n document.querySelectorAll('button').forEach(button => {\n button.style.padding = button.getAttribute('data-padding') || 0;\n });\n }\n return `h1, h2, h3, h4, h5, h6, p, a, button, span, li { padding: 24px }`;\n }\n adhs(active) {\n if (active) {\n if (!this._mask.enabled) {\n if (!this._isMobile()) {\n this.readingMask(true);\n this._model.readingMask = true;\n }\n this.monochrome(true);\n this._model.monochrome = true;\n }\n } else {\n if (!this._isMobile()) {\n this.readingMask(false);\n this._model.readingMask = false;\n }\n this.monochrome(false);\n this._model.monochrome = false;\n this._mask.enabled = false;\n }\n return ``;\n }\n lowVision(active) {\n this._model.fontSize = active ? 5 : 0;\n //this._model.fontFamily = active ? \"{\\\"url\\\":\\\"https://paged.ai/fonts/OpenSans-prod.css\\\",\\\"css\\\":\\\"font-family: 'Open Sans', sans-serif !important\\\"}\" : null;\n if (this._fontFamilyReference) {\n const currentOption = Array.from(this._fontFamilyReference.options).filter(option => option.value.includes('OpenSans'))[0];\n this._model.fontFamily = active ? currentOption.value : null;\n }\n return ``;\n }\n dyslexia(active) {\n if (active) {\n if (!this._mask.enabled) {\n if (!this._isMobile()) {\n this.readingMask(true);\n this._model.readingMask = true;\n }\n }\n } else {\n if (!this._isMobile()) {\n this.readingMask(false);\n this._model.readingMask = false;\n }\n\n //this._model.fontFamily = null;\n }\n //const font = \"{\\\"url\\\":\\\"https://paged.ai/fonts/OpenDyslexic-prod.css\\\",\\\"css\\\":\\\"font-family: 'OpenDyslexic', serif !important\\\"}\";\n //this._model.fontFamily = active ? font : null;\n\n //this._model.fontFamily = active ? \"{\\\"url\\\":\\\"http://localhost:3000/fonts/OpenDyslexic-dev.css\\\",\\\"css\\\":\\\"font-family: 'OpenDyslexic', serif !important\\\"}\" : null;\n\n //if(this._fontFamilyReference)\n //this._fontFamilyReference.value = active ? font : '';\n\n if (this._fontFamilyReference) {\n const currentOption = Array.from(this._fontFamilyReference.options).filter(option => option.value.includes('OpenDyslexic'))[0];\n this._model.fontFamily = active ? currentOption.value : null;\n }\n return ``;\n }\n screenReader(active) {\n if (!this._reader.enabled && active) {\n this._reader.enabled = active;\n } else {\n this._reader.enabled = false;\n }\n return '';\n }\n contrast(active) {\n const divs = Array.from(document.querySelectorAll('div'));\n divs.forEach(div => {\n let bg = window.getComputedStyle(div).background;\n let bgImg = window.getComputedStyle(div).backgroundImage;\n let previousStyles = div.getAttribute('style');\n const rgs = new RegExp(/background(-image)?:\\s?.*;\\s?/gm);\n const isImgUrl = str => new RegExp(/url\\(\".+\"\\)$/gm).test(str);\n if (isImgUrl(bg) || div.getAttribute('bgImg')) {\n if (active) {\n if (!div.getAttribute('bgImg')) {\n div.setAttribute('bgImg', bg);\n }\n } else {\n div.setAttribute('style', previousStyles ? `${previousStyles};background: ${div.getAttribute('bgImg')} !important;` : `background: ${div.getAttribute('bgImg')} !important`);\n }\n }\n if (isImgUrl(bgImg) || div.getAttribute('bgImg')) {\n if (active) {\n if (!div.getAttribute('bgImg')) {\n div.setAttribute('bgImg', bgImg);\n }\n } else {\n div.setAttribute('style', previousStyles ? `${previousStyles};background-image: ${div.getAttribute('bgImg')} !important;` : `background-image: ${div.getAttribute('bgImg')} !important`);\n }\n }\n });\n const imgs = Array.from(document.querySelectorAll('img'));\n imgs.forEach(img => {\n const previousStyles = img.getAttribute('style');\n img.setAttribute('style', previousStyles ? `${previousStyles};visibility: visible;` : `visibility: visible;`);\n\n // check for background\n if (!img.getAttribute('defaultBg')) {\n if (img.style.background) {\n img.setAttribute('defaultBg', img.style.background);\n } else {\n img.setAttribute('noInlineBg', '1');\n }\n } else {\n img.style.background = img.getAttribute('defaultBg');\n }\n\n // check for background-color\n\n if (!img.getAttribute('defaultBgColor')) {\n if (img.style.backgroundColor) {\n img.setAttribute('defaultBgColor', img.style.backgroundColor);\n } else {\n img.setAttribute('noInlineBgColor', '1');\n }\n } else {\n img.style.backgroundColor = img.getAttribute('defaultBgColor');\n }\n\n // check for background-size\n\n if (!img.getAttribute('defaultBgSize')) {\n if (img.style.backgroundSize) {\n img.setAttribute('defaultBgSize', img.style.backgroundSize);\n } else {\n img.setAttribute('noInlineBgSize', '1');\n }\n } else {\n img.style.backgroundSize = img.getAttribute('defaultBgSize');\n }\n\n // check for background-position\n\n if (!img.getAttribute('defaultBgPosition')) {\n if (img.style.backgroundPosition) {\n img.setAttribute('defaultBgPosition', img.style.backgroundPosition);\n } else {\n img.setAttribute('noInlineBgPosition', '1');\n }\n } else {\n img.style.backgroundPosition = img.getAttribute('defaultBgPosition');\n }\n if (!img.getAttribute('defaultBgRepeat')) {\n if (img.style.backgroundRepeat) {\n img.setAttribute('defaultBgRepeat', img.style.backgroundRepeat);\n } else {\n img.setAttribute('noInlineBgRepeat', '1');\n }\n } else {\n img.style.backgroundRepeat = img.getAttribute('defaultBgRepeat');\n }\n if (active) {\n var bgColor = getInheritedBackgroundColor(img);\n img.style.setProperty('background', bgColor);\n } else {\n if (img.getAttribute('noInlineBg') === '1' || img.getAttribute('noInlineBgColor') === '1') {\n img.style.removeProperty('background');\n }\n if (!(img.getAttribute('noInlineBg') === '1')) {\n img.style.background = img.getAttribute('defaultBg');\n }\n if (!(img.getAttribute('noInlineBgColor') === '1')) {\n img.style.backgroundColor = img.getAttribute('defaultBgColor');\n }\n if (!(img.getAttribute('noInlineBgSize') === '1')) {\n img.style.backgroundSize = img.getAttribute('defaultBgSize');\n }\n if (!(img.getAttribute('noInlineBgPosition') === '1')) {\n img.style.backgroundPosition = img.getAttribute('defaultBgPosition');\n }\n if (!(img.getAttribute('noInlineBgRepeat') === '1')) {\n img.style.backgroundRepeat = img.getAttribute('defaultBgRepeat');\n }\n }\n });\n const texts = [].concat(...['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'a', 'span', 'time', 'li'].map(selector => Array.from(document.querySelectorAll(selector))));\n texts.forEach(textNode => {\n // check for color\n if (!textNode.getAttribute('defaultColor')) {\n if (textNode.style.color) {\n textNode.setAttribute('defaultColor', textNode.style.color);\n } else {\n textNode.setAttribute('noInlineColor', '1');\n }\n } else {\n textNode.style.color = textNode.getAttribute('defaultColor');\n }\n\n // check for background\n if (!textNode.getAttribute('defaultBg')) {\n if (textNode.style.background) {\n textNode.setAttribute('defaultBg', textNode.style.background);\n } else {\n textNode.setAttribute('noInlineBg', '1');\n }\n } else {\n textNode.style.background = textNode.getAttribute('defaultBg');\n }\n\n // check for background-color\n\n if (!textNode.getAttribute('defaultBgColor')) {\n if (textNode.style.backgroundColor) {\n textNode.setAttribute('defaultBgColor', textNode.style.backgroundColor);\n } else {\n textNode.setAttribute('noInlineBgColor', '1');\n }\n } else {\n textNode.style.backgroundColor = textNode.getAttribute('defaultBgColor');\n }\n\n // check for background-image\n\n if (!textNode.getAttribute('defaultBgImage')) {\n if (textNode.style.backgroundImage) {\n textNode.setAttribute('defaultBgImage', textNode.style.backgroundImage);\n } else {\n textNode.setAttribute('noInlineBgImage', '1');\n }\n } else {\n textNode.style.backgroundImage = textNode.getAttribute('defaultBgImage');\n }\n\n // check for background-size\n\n if (!textNode.getAttribute('defaultBgSize')) {\n if (textNode.style.backgroundSize) {\n textNode.setAttribute('defaultBgSize', textNode.style.backgroundSize);\n } else {\n textNode.setAttribute('noInlineBgSize', '1');\n }\n } else {\n textNode.style.backgroundSize = textNode.getAttribute('defaultBgSize');\n }\n\n // check for background-position\n\n if (!textNode.getAttribute('defaultBgPosition')) {\n if (textNode.style.backgroundPosition) {\n textNode.setAttribute('defaultBgPosition', textNode.style.backgroundPosition);\n } else {\n textNode.setAttribute('noInlineBgPosition', '1');\n }\n } else {\n textNode.style.backgroundPosition = textNode.getAttribute('defaultBgPosition');\n }\n if (!textNode.getAttribute('defaultBgRepeat')) {\n if (textNode.style.backgroundRepeat) {\n textNode.setAttribute('defaultBgRepeat', textNode.style.backgroundRepeat);\n } else {\n textNode.setAttribute('noInlineBgRepeat', '1');\n }\n } else {\n textNode.style.backgroundRepeat = textNode.getAttribute('defaultBgRepeat');\n }\n if (active) {\n textNode.style.setProperty('background', 'rgba(0, 0, 0, 1)', 'important');\n textNode.style.setProperty('color', '#ffffff', 'important');\n } else {\n if (textNode.getAttribute('noInlineColor') === '1') {\n textNode.style.removeProperty('color');\n }\n if (textNode.getAttribute('noInlineBg') === '1' || textNode.getAttribute('noInlineBgColor') === '1' || textNode.getAttribute('noInlineBgImage') === '1') {\n textNode.style.removeProperty('background');\n }\n if (!textNode.getAttribute('noInlineBg') === '1') {\n textNode.style.background = textNode.getAttribute('defaultBg');\n }\n if (!(textNode.getAttribute('noInlineBgColor') === '1')) {\n textNode.style.backgroundColor = textNode.getAttribute('defaultBgColor');\n }\n if (!(textNode.getAttribute('noInlineBgImage') === '1')) {\n textNode.style.backgroundImage = textNode.getAttribute('defaultBgImage');\n }\n if (!(textNode.getAttribute('noInlineBgSize') === '1')) {\n textNode.style.backgroundSize = textNode.getAttribute('defaultBgSize');\n }\n if (!(textNode.getAttribute('noInlineBgPosition') === '1')) {\n textNode.style.backgroundPosition = textNode.getAttribute('defaultBgPosition');\n }\n if (!(textNode.getAttribute('noInlineBgRepeat') === '1')) {\n textNode.style.backgroundRepeat = textNode.getAttribute('defaultBgRepeat');\n }\n }\n ;\n });\n let globalStyles = `\n img, figure {\n mix-blend-mode: unset !important;\n }\n `;\n globalStyles += `\n body, main, section {\n background: black !important;\n color: white !important;\n }\n `;\n return globalStyles;\n }\n isFirefox() {\n return new RegExp(/Firefox/gm).test(navigator.userAgent);\n }\n colorAnalyzer(color) {\n var r, g, b, hsp;\n if (color.match(/^rgb/)) {\n color = color.match(/^rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)(?:,\\s*(\\d+(?:\\.\\d+)?))?\\)$/);\n r = color[1];\n g = color[2];\n b = color[3];\n } else {\n color = +(\"0x\" + color.slice(1).replace(color.length < 5 && /./g, '$&$&'));\n r = color >> 16;\n g = color >> 8 & 255;\n b = color & 255;\n }\n hsp = Math.sqrt(0.299 * (r * r) + 0.587 * (g * g) + 0.114 * (b * b));\n if (hsp > 127.5) {\n return 'light';\n } else {\n return 'dark';\n }\n }\n __init__() {\n this._root = dom.createElement({\n tag: 'div',\n appendTo: document.body,\n attributes: {\n class: `${constants.classes.overlay} ${this._position}`\n }\n });\n this._rootShadow = this._root.attachShadow({\n mode: 'open'\n });\n dom.createElement({\n tag: 'style',\n innerHTML: overlay_style,\n appendTo: this._rootShadow\n });\n this._rootShadow.appendChild(this._header);\n this._rootShadow.appendChild(this._tabs);\n this._store.set('config', this._model);\n this._applyStyles();\n const fn = () => this._applyStyles();\n const obs = new MutationObserver(fn.bind(this));\n obs.observe(document.querySelector('body'), {\n childList: true,\n subtree: true\n });\n this._setTab('settings');\n setTimeout(() => {\n if (!this._open) {\n //const width = getComputedStyle(this._root).width;\n //this._root.style.left = `-${width}`;\n\n const widgetWidth = getComputedStyle(this._root).width.slice(0, -2);\n const widthWithScrollbar = parseInt(widgetWidth) + (this._root.offsetWidth - this._root.clientWidth);\n const width = widthWithScrollbar + 'px';\n this._position === 'left' ? this._root.style.left = `-${width}` : this._root.style.right = `-${width}`;\n this._root.style.opacity = '1';\n this._root.style.boxSizing = 'content-box';\n }\n }, 100);\n let lastLocation;\n setInterval(() => {\n if (window.location.href !== lastLocation) {\n if (this._reader && this._reader._isEnabled) {\n /*this._reader.enabled = false;\n const readerElement = document.querySelector('.__paged-screen_reader');\n if (readerElement) {\n readerElement.remove();\n }\n this._reader = new Reader();\n this._reader.enabled = true;*/\n //this._reader._synth.cancel();\n this._reader._onStop();\n this._reader.isAutoPlay = false;\n }\n lastLocation = window.location.href;\n }\n }, 100);\n if (!this._fontFamilyReference) {\n const fontFamilyInput = Array.from(this._rootShadow.children).filter(element => element.labelKey === 'fontFamily')[0];\n this._fontFamilyReference = Array.from(fontFamilyInput.shadowRoot.children).filter(element => element.id === 'fontFamily')[0];\n }\n }\n _addResizeHandler() {\n if (!this._isMobile()) {\n let x = 0;\n let y = 0;\n let dx = 0;\n let dy = 0;\n let width = Number(getComputedStyle(this._root).width.split('px')[0]);\n let height = Number(getComputedStyle(this._root).height.split('px')[0]);\n function resize(event) {\n dx = event.screenX - x;\n dy = event.screenY - y;\n x = event.screenX;\n y = event.screenY;\n width -= dx;\n height += dy;\n if (width >= 360 && width <= 1200) {\n this._root.style.width = width + 'px';\n }\n if (height > 300) {\n this._root.style.height = height + 'px';\n }\n }\n const bound = resize.bind(this);\n const handler = dom.createElement({\n tag: 'div',\n attributes: {\n class: '__paged-resize-handler'\n },\n innerHTML: '',\n appendTo: this._rootShadow,\n events: {\n mousedown: event => {\n event.preventDefault();\n x = event.screenX;\n y = event.screenY;\n document.addEventListener('mousemove', bound);\n document.addEventListener('mouseup', () => {\n document.removeEventListener('mousemove', bound);\n });\n }\n }\n });\n const overlayObserver = new ResizeObserver(entries => {\n const toggle = document.querySelector('.' + constants.classes.toggle);\n //const width = getComputedStyle(this._root).width;\n\n const widgetWidth = getComputedStyle(this._root).width.slice(0, -2);\n const widthWithScrollbar = parseInt(widgetWidth) + (this._root.offsetWidth - this._root.clientWidth);\n const width = widthWithScrollbar + 'px';\n if (toggle && this._open) {\n //toggle.style.right = width;\n this._position === 'left' ? toggle.style.left = width : toggle.style.right = width;\n }\n });\n overlayObserver.observe(this._root);\n }\n }\n _minifyStyles(styles) {\n return styles.replace(/([^0-9a-zA-Z\\.#])\\s+/g, \"$1\").replace(/\\s([^0-9a-zA-Z\\.#]+)/g, \"$1\").replace(/;}/g, \"}\").replace(/\\/\\*.*?\\*\\//g, \"\");\n }\n qsa(node, selector) {\n const nodes = [...node.querySelectorAll(selector)];\n const nodeIterator = document.createNodeIterator(node, Node.ELEMENT_NODE);\n let currentNode;\n while (currentNode = nodeIterator.nextNode()) {\n if (Array.from(currentNode.classList).includes('__paged-account')) {}\n if (currentNode.shadowRoot) {\n nodes.push(...this.qsa(currentNode.shadowRoot, selector));\n }\n }\n return nodes;\n }\n accountSelector(selector) {\n return new Promise(r => {\n setTimeout(() => {\n const account = this._rootShadow.querySelector('.__paged-account');\n if (account) {\n r(Array.from(account.shadowRoot.querySelectorAll(selector)));\n } else {\n r([]);\n }\n }, 100);\n });\n }\n _applyStyles() {\n const toCssProp = str => str.replace(/[A-Z]/g, letter => `-${letter.toLowerCase()}`);\n const globalStyles = dom.selectElements('.__paged-global-style', document.head);\n globalStyles.forEach(child => document.head.removeChild(child));\n let styleConfig = '';\n Object.keys(this._model).filter(styleKey => {\n const cfg = [...overlay_settings, ...overlay_personas].find(s => s.id === styleKey);\n return cfg && cfg.apply !== 'text';\n }).forEach(styleKey => {\n const cfg = [...overlay_settings, ...overlay_personas].find(s => s.id === styleKey);\n switch (cfg.type) {\n case 'switch':\n if (this._model[styleKey]) {\n styleConfig += this[styleKey](this._model[styleKey]);\n } else {\n if (styleKey === 'adhs') {\n this.adhs(false);\n delete this._model.adhs;\n }\n if (styleKey === 'lowVision') {\n this.lowVision(false);\n delete this._model.lowVision;\n }\n if (styleKey === 'dyslexia') {\n this.dyslexia(false);\n delete this._model.dyslexia;\n }\n if (styleKey === 'contrast') {\n this.contrast(this._model[styleKey]);\n }\n if (styleKey === 'readingMask') {\n this.readingMask(false);\n }\n if (styleKey === 'monochrome') {\n this.monochrome(false);\n }\n if (styleKey === 'screenReader') {\n this.screenReader(false);\n }\n }\n break;\n default:\n break;\n }\n });\n styleConfig = `\n :root {\n --paged-color: ${this._color};\n }\n h1:not([isNonText=\"1\"]), h2:not([isNonText=\"1\"]), h3:not([isNonText=\"1\"]), h4:not([isNonText=\"1\"]), h5:not([isNonText=\"1\"]), h6:not([isNonText=\"1\"]), p:not([isNonText=\"1\"]), a:not([isNonText=\"1\"]), li:not([isNonText=\"1\"]), mark:not([isNonText=\"1\"]), ins:not([isNonText=\"1\"]), del:not([isNonText=\"1\"]), sup:not([isNonText=\"1\"]), sub:not([isNonText=\"1\"]), small:not([isNonText=\"1\"]), i:not([isNonText=\"1\"]), b:not([isNonText=\"1\"]), code:not([isNonText=\"1\"]), pre:not([isNonText=\"1\"]), label:not([isNonText=\"1\"]), input:not([isNonText=\"1\"]), textarea:not([isNonText=\"1\"]), button:not([isNonText=\"1\"]), span:not([isNonText=\"1\"]), select:not([isNonText=\"1\"]), td:not([isNonText=\"1\"]) {\n ${Object.keys(this._model).filter(styleKey => {\n const cfg = overlay_settings.find(s => s.id === styleKey);\n return cfg && cfg.apply === 'text';\n }).map(styleKey => {\n const cfg = overlay_settings.find(s => s.id === styleKey);\n switch (cfg.type) {\n case 'increment':\n if (cfg.unit && cfg.unit === 'px') {\n Promise.all([].concat(...textNodes.map(async selector => {\n return [...this.qsa(document, selector), ...(await this.accountSelector(selector))];\n }))).then(texts => {\n const allTexts = texts.flat(Infinity);\n allTexts.forEach(textElem => {\n // Flag non-text\n if (textElem.textContent == '') {\n textElem.setAttribute(`isNonText`, '1' || 0);\n }\n let currentValue = Number(window.getComputedStyle(textElem)[cfg.id].split('px')[0] || 0);\n const basePx = textElem.getAttribute(`basePx${styleKey}`);\n if (!basePx) {\n // DENIZ\n if (textElem.classList.contains('as-link')) {\n if (styleKey === 'fontSize') {\n currentValue = Number(textElem.firstElementChild.style.fontSize.split('px')[0]);\n }\n }\n if (textElem.classList.contains('nav-link')) {\n if (styleKey === 'lineHeight') {\n currentValue = Number(getComputedStyle(textElem.parentElement).lineHeight.split('px')[0]);\n }\n }\n\n // fix tablepress issue\n\n if (textElem.textContent != '' && currentValue == 0) {\n if (styleKey === 'lineHeight') {\n currentValue = null;\n }\n if (styleKey === 'fontSize') {\n currentValue = null;\n }\n console.log(\"Start\");\n console.log(textElem);\n console.log(textElem.closest(\".tablepress\"));\n console.log(\"End\");\n }\n\n // if(textElem.closest(\".tablepress\") != null){\n // console.log(textElem)\n // currentValue = Number(getComputedStyle(textElem.closest(\".tablepress\"))[cfg.id].split('px')[0]);\n // console.log(currentValue)\n // }\n\n textElem.setAttribute(`basePx${styleKey}`, currentValue);\n }\n let previousStyles = textElem.getAttribute('style');\n const newStyle = `;${toCssProp(styleKey)}: ${Number(textElem.getAttribute(`basePx${styleKey}`)) + this._model[styleKey]}px`;\n if (previousStyles) {\n const replacer = new RegExp(`\\\\s?${toCssProp(styleKey)}:\\\\s?.+px;?`, 'gm');\n previousStyles = previousStyles.replace(replacer, '');\n }\n textElem.setAttribute('style', previousStyles ? `${previousStyles}${newStyle}` : newStyle);\n });\n });\n } else {\n const baseEm = cfg && cfg.base ? cfg.base : 0;\n const addEm = this._model[styleKey] * (cfg && cfg.increment ? cfg.increment : 0.1);\n return `${toCssProp(styleKey)}: ${baseEm + addEm}rem !important`;\n }\n case 'select':\n switch (cfg.id) {\n case 'fontFamily':\n const parsedValue = this._model[styleKey] !== cfg.default ? JSON.parse(this._model[styleKey]) : undefined;\n if (!parsedValue) {\n break;\n }\n dom.createElement({\n tag: 'link',\n attributes: {\n href: parsedValue.url,\n rel: 'stylesheet'\n },\n appendTo: document.head\n });\n return parsedValue.css;\n default:\n break;\n }\n break;\n default:\n break;\n }\n }).filter(style => style && style.length).join(';')}\n }`;\n Object.keys(this._model).filter(styleKey => {\n const cfg = [...overlay_settings, ...overlay_personas].find(s => s.id === styleKey);\n return cfg && cfg.apply !== 'text';\n }).forEach(styleKey => {\n const cfg = [...overlay_settings, ...overlay_personas].find(s => s.id === styleKey);\n switch (cfg.type) {\n case 'switch':\n if (this._model[styleKey]) {\n styleConfig += this[styleKey](this._model[styleKey]);\n } else {\n if (styleKey === 'adhs') {\n this.adhs(false);\n delete this._model.adhs;\n }\n if (styleKey === 'lowVision') {\n this.lowVision(false);\n delete this._model.lowVision;\n }\n if (styleKey === 'dyslexia') {\n this.dyslexia(false);\n delete this._model.dyslexia;\n }\n if (styleKey === 'contrast') {\n this.contrast(this._model[styleKey]);\n }\n if (styleKey === 'readingMask') {\n this.readingMask(false);\n }\n if (styleKey === 'monochrome') {\n this.monochrome(false);\n }\n if (styleKey === 'screenReader') {\n this.screenReader(false);\n }\n }\n break;\n default:\n break;\n }\n });\n const widgetStyle = dom.selectElement('style[class=\"__paged-widget-style\"]', this._rootShadow);\n if (!widgetStyle) {\n dom.createElement({\n tag: 'style',\n innerHTML: this._minifyStyles(styleConfig),\n attributes: {\n class: '__paged-widget-style'\n },\n appendTo: this._rootShadow\n });\n } else {\n widgetStyle.innerHTML = this._minifyStyles(styleConfig);\n }\n if (this._reader) {\n const reader_root = this._reader._rootShadow;\n if (reader_root) {\n const style = reader_root.querySelector('style');\n if (!style.getAttribute('pre')) {\n style.setAttribute('pre', style.innerHTML);\n }\n style.innerHTML = style.getAttribute('pre') + styleConfig;\n }\n }\n this._reader._readerInputs.forEach(readerInput => {\n if (this._inputs.length > 0) {\n this._inputs.push(readerInput);\n }\n });\n if (Array.isArray(this._inputs)) {\n (this._inputs || []).forEach(input => {\n const input_root = input._rootShadow;\n if (input_root) {\n const style = input_root.querySelector('style');\n if (!style.getAttribute('pre')) {\n style.setAttribute('pre', style.innerHTML);\n }\n style.innerHTML = style.getAttribute('pre') + styleConfig;\n }\n });\n } else {\n const check_account_ready = setInterval(() => {\n if (this._inputs._rootShadow) {\n this._inputs._rootShadow.querySelector('style').innerHTML += styleConfig;\n clearInterval(check_account_ready);\n }\n }, 1);\n }\n const existsStyle = document.head.querySelector('.__paged-global-style');\n if (existsStyle) {\n existsStyle.remove();\n }\n dom.createElement({\n tag: 'style',\n innerHTML: this._minifyStyles(styleConfig),\n attributes: {\n class: '__paged-global-style'\n },\n appendTo: document.head\n });\n }\n _revert() {\n this._model = this.defaultModel;\n if (this._store.get('user_settings')) {\n const settings = this._store.get('user_settings');\n this._model = typeof settings === 'string' ? JSON.parse(settings) : settings || {};\n }\n this._store.set('config', this._model);\n const globalStyles = dom.selectElements('.__paged-global-style', document.head);\n globalStyles.forEach(child => document.head.removeChild(child));\n if (this._inputs instanceof Account === false) {\n (this._inputs || []).forEach(input => {\n input.value = this._model[input._key];\n });\n }\n this._applyStyles();\n this._reader = new Reader();\n }\n _changeLanguage(event) {\n const tabs = Array.from(this._rootShadow.querySelectorAll('[dataId]'));\n const activeTab = tabs.find(t => Array.from(t.classList).includes('active')).getAttribute('dataid');\n const select = this._rootShadow.querySelector('.__paged_language_changer');\n //this._reader.language = select.value.toLowerCase();\n this._translation.set_language(select.value);\n this._reader.language = select.value;\n this._reader._translation = this._translation;\n this._setTab(activeTab);\n tabs.forEach(tab => {\n tab.innerHTML = this._translation.get(tab.getAttribute('dataid'));\n });\n }\n _isMobile() {\n return window.matchMedia('(max-width: 767px)').matches;\n }\n _close() {\n if (this._toggle) {\n this.open = false;\n this._toggle.open = false;\n }\n }\n _setTab(tab) {\n const tabs = Array.from(this._rootShadow.querySelectorAll('[dataId]'));\n tabs.forEach(t => {\n if (['individual', 'personas'].includes(t.getAttribute('dataId'))) {\n if (tab === 'account') {\n t.setAttribute('style', 'display: none');\n } else {\n t.setAttribute('style', 'display: block');\n }\n }\n });\n tabs.forEach(t => {\n if (t.getAttribute('dataId') === tab) {\n t.classList.add('active');\n } else {\n t.classList.remove('active');\n }\n if (tab === 'settings' && t.getAttribute('dataId') === 'individual') {\n t.classList.add('active');\n }\n if (tab === 'personas' && t.getAttribute('dataId') === 'settings') {\n t.classList.add('active');\n }\n });\n this._inputs = [];\n const content = Array.from(this._rootShadow.childNodes).filter(child => {\n return child.tagName === 'DIV' && !Array.from(child.classList).includes('header') && !Array.from(child.classList).includes('tabs');\n });\n content.forEach(node => node.remove());\n switch (tab) {\n case 'settings':\n this._inputs = overlay_settings.map(setting => {\n return new Input({\n key: setting.id,\n parent: this._rootShadow,\n value: this._model[setting.id],\n label: this._translation.get(setting.id),\n type: setting.type,\n options: setting.options,\n widget: this,\n onChange: value => {\n Object.assign(this._model, {\n [setting.id]: value\n });\n this._store.set('config', Object.keys(this._model).filter(key => !overlay_personas.map(p => p.id).includes(key)).reduce((mod, key) => {\n mod[key] = this._model[key];\n return mod;\n }, {}));\n this._applyStyles();\n }\n });\n });\n this._applyStyles();\n this._addResizeHandler();\n break;\n case 'account':\n this._inputs = new Account({\n parent: this._rootShadow,\n store: this._store,\n translation: this._translation,\n onUserLogin: () => {\n this._revert();\n },\n onAccountViewChange: () => {\n setTimeout(() => {\n this._applyStyles();\n }, 100);\n }\n });\n this._applyStyles();\n setTimeout(() => {\n this._addResizeHandler();\n }, 200);\n break;\n case 'personas':\n this._inputs = overlay_personas.map(persona => {\n return new Input({\n key: persona.id,\n parent: this._rootShadow,\n value: this._model[persona.id],\n label: this._translation.get(persona.id),\n type: persona.type,\n onChange: value => {\n Object.assign(this._model, {\n [persona.id]: value\n });\n this._store.set('config', this._model);\n //this._setTab('settings');\n this._applyStyles();\n }\n });\n });\n this._applyStyles();\n this._addResizeHandler();\n break;\n }\n }\n}\n;// CONCATENATED MODULE: ./node_modules/js-cookie/dist/js.cookie.mjs\n/*! js-cookie v3.0.5 | MIT */\n/* eslint-disable no-var */\nfunction js_cookie_assign (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n target[key] = source[key];\n }\n }\n return target\n}\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\nvar defaultConverter = {\n read: function (value) {\n if (value[0] === '\"') {\n value = value.slice(1, -1);\n }\n return value.replace(/(%[\\dA-F]{2})+/gi, decodeURIComponent)\n },\n write: function (value) {\n return encodeURIComponent(value).replace(\n /%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,\n decodeURIComponent\n )\n }\n};\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\n\nfunction init (converter, defaultAttributes) {\n function set (name, value, attributes) {\n if (typeof document === 'undefined') {\n return\n }\n\n attributes = js_cookie_assign({}, defaultAttributes, attributes);\n\n if (typeof attributes.expires === 'number') {\n attributes.expires = new Date(Date.now() + attributes.expires * 864e5);\n }\n if (attributes.expires) {\n attributes.expires = attributes.expires.toUTCString();\n }\n\n name = encodeURIComponent(name)\n .replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent)\n .replace(/[()]/g, escape);\n\n var stringifiedAttributes = '';\n for (var attributeName in attributes) {\n if (!attributes[attributeName]) {\n continue\n }\n\n stringifiedAttributes += '; ' + attributeName;\n\n if (attributes[attributeName] === true) {\n continue\n }\n\n // Considers RFC 6265 section 5.2:\n // ...\n // 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n // character:\n // Consume the characters of the unparsed-attributes up to,\n // not including, the first %x3B (\";\") character.\n // ...\n stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n }\n\n return (document.cookie =\n name + '=' + converter.write(value, name) + stringifiedAttributes)\n }\n\n function get (name) {\n if (typeof document === 'undefined' || (arguments.length && !name)) {\n return\n }\n\n // To prevent the for loop in the first place assign an empty array\n // in case there are no cookies at all.\n var cookies = document.cookie ? document.cookie.split('; ') : [];\n var jar = {};\n for (var i = 0; i < cookies.length; i++) {\n var parts = cookies[i].split('=');\n var value = parts.slice(1).join('=');\n\n try {\n var found = decodeURIComponent(parts[0]);\n jar[found] = converter.read(value, found);\n\n if (name === found) {\n break\n }\n } catch (e) {}\n }\n\n return name ? jar[name] : jar\n }\n\n return Object.create(\n {\n set,\n get,\n remove: function (name, attributes) {\n set(\n name,\n '',\n js_cookie_assign({}, attributes, {\n expires: -1\n })\n );\n },\n withAttributes: function (attributes) {\n return init(this.converter, js_cookie_assign({}, this.attributes, attributes))\n },\n withConverter: function (converter) {\n return init(js_cookie_assign({}, this.converter, converter), this.attributes)\n }\n },\n {\n attributes: { value: Object.freeze(defaultAttributes) },\n converter: { value: Object.freeze(converter) }\n }\n )\n}\n\nvar api = init(defaultConverter, { path: '/' });\n/* eslint-enable no-var */\n\n\n\n;// CONCATENATED MODULE: ./src/utils/permissions.js\n//Request, if localStorage is available\n\nconst permissionUtils = {\n getPermissionState: () => {\n //return true;\n },\n /*isPaged: () => {\n return (location.host === \"localhost:3000\" || location.hostname === \"paged.website\");\n },*/\n getCookie: () => {\n return api.get(\"__paged.consent\");\n },\n getBrowserPermission: () => {\n let test = 'test';\n try {\n localStorage.setItem(test, test);\n localStorage.removeItem(test);\n return true;\n } catch (e) {\n return false;\n }\n },\n //setExternalPermission: () => {},\n //getCookiePermission: () => true,\n\n setExternalPermission: permission => {\n api.set(\"__paged.consent\", permission, {\n sameSite: \"strict\",\n expires: 365\n });\n }\n};\n/* harmony default export */ const permissions = (permissionUtils);\n;// CONCATENATED MODULE: ./src/utils/CookiePermissions.js\n\nconst cookiePermissions = {\n getCookiePermission: () => {\n if (!permissions.getBrowserPermission()) {\n return false;\n }\n\n /*if(permissions.isPaged() && permissions.getCookie() == null) {\n return false;\n }*/\n\n return permissions.getCookie();\n }\n};\n/* harmony default export */ const CookiePermissions = (cookiePermissions);\n;// CONCATENATED MODULE: ./src/components/store/index.js\n//import permission from '../../utils/permissions.js'; //Import js-file with the localStorage-function\n\nclass Store {\n NS = '__paged.';\n _data = new Map();\n _match = new RegExp(/__paged\\./);\n constructor() {\n // condition, if localStorage is available\n if (CookiePermissions.getCookiePermission() !== false) {\n Object.keys(localStorage).filter(key => this._match.test(key)).forEach(key => {\n this._data.set(key.split(this.NS)[1], localStorage.getItem(key));\n });\n }\n }\n set(key, value) {\n this._data.set(key, value);\n // condition, if localStorage is available\n if (CookiePermissions.getCookiePermission() === \"true\") {\n localStorage.setItem(`${this.NS}${key}`, typeof value === 'object' ? JSON.stringify(value) : value);\n }\n }\n get(key) {\n return this._data.get(key);\n }\n remove(key) {\n if (CookiePermissions.getCookiePermission()) {\n localStorage.removeItem(`${this.NS}${key}`);\n }\n this._data.delete(key);\n }\n}\n;// CONCATENATED MODULE: ./src/components/overlay/components/mask/style.js\nconst mask_style_styles = `\n :host {\n display: flex;\n flex-direction: column;\n justify-content: flex-between;\n }\n :host .__paged-reading-mask-top {\n width: 100vw;\n height: 43%;\n background: rgba(0, 0, 0, 0.3);\n position: fixed;\n top: 0;\n left: 0;\n z-index: 100;\n }\n :host .__paged-reading-mask-bottom {\n width: 100vw;\n height: 43%;\n background: rgba(0, 0, 0, 0.3);\n position: fixed;\n bottom: 0;\n left: 0;\n z-index: 100;\n }\n`;\n/* harmony default export */ const mask_style = (mask_style_styles);\n;// CONCATENATED MODULE: ./src/components/overlay/components/mask/index.js\n\n\n\nclass Mask {\n _root = null;\n _rootShadow = null;\n _parent = null;\n _isEnabled = false;\n constructor(options) {\n if (!this._parent) {\n this._parent = document.body;\n }\n this.__init__();\n }\n set enabled(value) {\n if (value) {\n if (!this._isEnabled) {\n this._children.filter(child => child).forEach(child => this._rootShadow.appendChild(child));\n this._parent.addEventListener(this._isMobile ? 'touchmove' : 'mousemove', this._onMouseMove);\n }\n } else {\n if (this._rootShadow.childNodes.length > 1) {\n this._rootShadow.querySelector('.__paged-reading-mask-top').remove();\n this._rootShadow.querySelector('.__paged-reading-mask-bottom').remove();\n this._parent.removeEventListener(this._isMobile ? 'touchmove' : 'mousemove', this._onMouseMove);\n }\n }\n this._isEnabled = value;\n }\n get _topMask() {\n const exists = (this._rootShadow.childNotes || []).find(node => Array.from(node.classList).includes('__paged-reading-mask-top'));\n const initialHeight = window.innerHeight / 2 - 50;\n return dom.createElement({\n tag: 'div',\n attributes: {\n class: '__paged-reading-mask-top',\n style: `height: ${initialHeight}px`\n }\n });\n }\n get _bottomMask() {\n const initialHeight = window.innerHeight / 2 - 50;\n return dom.createElement({\n tag: 'div',\n attributes: {\n class: '__paged-reading-mask-bottom',\n style: `height: ${initialHeight}px`\n }\n });\n }\n get _children() {\n return [this._topMask, this._bottomMask];\n }\n get _isMobile() {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n }\n __init__() {\n const exists = dom.selectElement(`.${constants.classes.mask}`, this._parent);\n this._onMouseMove = this._onMouseMove.bind(this);\n this._root = exists ? exists : dom.createElement({\n tag: 'div',\n appendTo: this._parent ? this._parent : undefined,\n attributes: {\n class: constants.classes.mask\n }\n });\n if (!exists) {\n this._rootShadow = this._root.attachShadow({\n mode: 'open'\n });\n }\n this._rootShadow.innerHTML = '';\n dom.createElement({\n tag: 'style',\n innerHTML: mask_style,\n appendTo: this._rootShadow\n });\n }\n _onMouseMove(event) {\n event.preventDefault();\n const windowHeight = window.innerHeight - 100;\n const distanceFromTop = this._isMobile ? event.touches[0].clientY : event.clientY - 50;\n const distanceFromBottom = windowHeight - distanceFromTop;\n this._rootShadow.querySelector('.__paged-reading-mask-top').setAttribute('style', `height: ${distanceFromTop >= 0 ? distanceFromTop : 0}px`);\n this._rootShadow.querySelector('.__paged-reading-mask-bottom').setAttribute('style', `height: ${distanceFromBottom >= 0 ? distanceFromBottom : 0}px`);\n }\n}\n;// CONCATENATED MODULE: ./src/app.js\n\n\n\n\n\n\n\n\n\nlet Loaded = false;\nwindow.onload = () => {\n if (!isInElementorEditMode()) app_init();\n};\nconst isInElementorEditMode = () => {\n const searchParams = new URLSearchParams(window.location.search);\n return searchParams.has('elementor-preview');\n\n //return window.location.href.indexOf('action=elementor') > -1;\n};\nconst checkInitted = setInterval(() => {\n if (!Loaded) {\n if (!isInElementorEditMode()) app_init();\n } else {\n clearInterval(checkInitted);\n }\n}, 1000);\nlet position = 'right';\nlet color = '#222D39';\nlet account = true;\nlet language = 'EN';\n\n/* DYNAMIC VARS */\nposition='right'\n// {{COLOR}}\n// {{ACCOUNT}}\n// {{LANGUAGE}}\n\nconst app_init = () => {\n if (!document) {\n return;\n }\n dom.createElement({\n tag: 'style',\n appendTo: document.head,\n innerHTML: style\n });\n const toggle = dom.selectElement(`.${constants.classes.toggle}`);\n if (!toggle) {\n const tIns = new Toggle(position, color);\n window.pagedToggle = tIns;\n const sIns = new Store();\n const translateIns = new Translation(language);\n const maskIns = new Mask();\n const readerIns = new Reader();\n const oIns = new Overlay({\n toggle: tIns,\n store: sIns,\n translation: translateIns,\n model: sIns.get('config') ? JSON.parse(sIns.get('config')) : {},\n position,\n color,\n account,\n mask: maskIns,\n reader: readerIns\n });\n tIns._root.addEventListener('onClick', () => oIns.open = tIns.open);\n Loaded = true;\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzg5LmpzIiwibWFwcGluZ3MiOiI7O0FBQUEsTUFBTUEsSUFBSSxHQUFHQyxRQUFRLENBQUNDLElBQUksSUFBSUQsUUFBUSxJQUFJRSxNQUFNO0FBRWhELE1BQU1DLFFBQVEsR0FBRztFQUNmQyxhQUFhLEVBQUVBLENBQUNDLFFBQVEsRUFBRUMsSUFBSSxLQUFLO0lBQ2pDLE9BQU8sQ0FBQ0EsSUFBSSxJQUFJUCxJQUFJLEVBQUVRLGFBQWEsQ0FBQ0YsUUFBUSxDQUFDO0VBQy9DLENBQUM7RUFDREcsY0FBYyxFQUFFQSxDQUFDQyxTQUFTLEVBQUVILElBQUksS0FBSztJQUNuQyxPQUFPSSxLQUFLLENBQUNDLElBQUksQ0FBQyxDQUFDTCxJQUFJLElBQUlQLElBQUksRUFBRWEsZ0JBQWdCLENBQUNILFNBQVMsQ0FBQyxDQUFDO0VBQy9ELENBQUM7RUFDREksYUFBYSxFQUFFQSxDQUFDO0lBQ2RDLEdBQUc7SUFDSEMsUUFBUTtJQUNSQyxTQUFTO0lBQ1RDLFFBQVEsR0FBRyxFQUFFO0lBQ2JDLFVBQVUsR0FBRyxDQUFDLENBQUM7SUFDZkMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNYQyxTQUFTLEdBQUc7RUFDZCxDQUFDLEtBQUs7SUFDSixNQUFNQyxPQUFPLEdBQUdyQixRQUFRLENBQUNhLGFBQWEsQ0FBQ0MsR0FBRyxDQUFDO0lBRTNDUSxNQUFNLENBQUNDLE9BQU8sQ0FBQ0wsVUFBVSxDQUFDLENBQUNNLE9BQU8sQ0FBQyxDQUFDLENBQUNDLEdBQUcsRUFBRUMsS0FBSyxDQUFDLEtBQUs7TUFDbkRMLE9BQU8sQ0FBQ0ksR0FBRyxDQUFDLEdBQUdDLEtBQUs7TUFDcEJMLE9BQU8sQ0FBQ00sWUFBWSxDQUFDRixHQUFHLEVBQUVDLEtBQUssQ0FBQztJQUNsQyxDQUFDLENBQUM7SUFFRkosTUFBTSxDQUFDQyxPQUFPLENBQUNKLE1BQU0sQ0FBQyxDQUFDSyxPQUFPLENBQUMsQ0FBQyxDQUFDQyxHQUFHLEVBQUVDLEtBQUssQ0FBQyxLQUFLO01BQy9DTCxPQUFPLENBQUNPLGdCQUFnQixDQUFDSCxHQUFHLEVBQUVDLEtBQUssQ0FBQztJQUN0QyxDQUFDLENBQUM7SUFFRlQsUUFBUSxDQUFDTyxPQUFPLENBQUNLLEtBQUssSUFBSVIsT0FBTyxDQUFDUyxXQUFXLENBQUNELEtBQUssQ0FBQyxDQUFDO0lBRXJELElBQUlkLFFBQVEsRUFBRTtNQUNaQSxRQUFRLENBQUNlLFdBQVcsQ0FBQ1QsT0FBTyxDQUFDO0lBQy9CO0lBRUEsSUFBSUwsU0FBUyxFQUFFO01BQ2JBLFNBQVMsQ0FBQ2UsT0FBTyxDQUFDVixPQUFPLENBQUM7SUFDNUI7SUFFQSxJQUFJRCxTQUFTLEVBQUU7TUFDYkMsT0FBTyxDQUFDRCxTQUFTLEdBQUdBLFNBQVM7SUFDL0I7SUFFQSxPQUFPQyxPQUFPO0VBQ2hCO0FBQ0YsQ0FBQztBQUVELDBDQUFlbEIsUUFBUSxFOztBQy9DdkIsTUFBTTZCLFlBQVksR0FBRztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELDRDQUFlQSxZQUFZLEU7O0FDaEUzQixnREFBZTtFQUNiQyxPQUFPLEVBQUU7SUFDUEMsT0FBTyxFQUFFLGdCQUFnQjtJQUN6QkMsTUFBTSxFQUFFLGdCQUFnQjtJQUN4QkMsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQkMsS0FBSyxFQUFFLGVBQWU7SUFDdEJDLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUJDLEtBQUssRUFBRSxlQUFlO0lBQ3RCQyxJQUFJLEVBQUUsc0JBQXNCO0lBQzVCQyxNQUFNLEVBQUU7RUFDVjtBQUNGLENBQUMsRTs7QUNYRCxNQUFNQyxNQUFNLEdBQUc7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsbURBQWVBLE1BQU0sRTs7QUN2SHJCLE1BQU1DLEtBQUssR0FBRztFQUNaQyxHQUFHLEVBQUUsZ1hBQWdYO0VBQ3JYQyxNQUFNLEVBQUUsK1FBQStRO0VBQ3ZSQyxNQUFNLEVBQUUseVZBQXlWO0VBQ2pXQyxLQUFLLEVBQUUsNFBBQTRQO0VBQ25RQyxJQUFJLEVBQUUsOFFBQThRO0VBQ3BSQyxPQUFPLEVBQUUscVpBQXFaO0VBQzlaQyxLQUFLLEVBQUU7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtFQUNmQyxLQUFLLEVBQUU7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0VBQ0xDLGFBQWEsRUFBRSx5VEFBeVQ7RUFDeFVDLFNBQVMsRUFBRTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0VBQ1BDLElBQUksRUFBRTtBQUNSO0FBQ0E7QUFDQSxTQUFTO0VBQ1BDLEtBQUssRUFBRTtBQUNUO0FBQ0EsU0FBUztFQUNQQyxPQUFPLEVBQUU7QUFDWDtBQUNBLFNBQVM7RUFDUEMsUUFBUSxFQUFFO0FBQ1o7QUFDQSxTQUFTO0VBQ1BDLFFBQVEsRUFBRTtBQUNaO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCx1REFBZWYsS0FBSyxFOztBQ2pIUTtBQUNNO0FBQ2lCO0FBQ3RCO0FBRWQsTUFBTW1CLE1BQU0sQ0FBQztFQUMxQkMsS0FBSyxHQUFHLElBQUk7RUFDWkMsV0FBVyxHQUFHLElBQUk7RUFDbEJDLEtBQUssR0FBRyxLQUFLO0VBQ2JDLFNBQVMsR0FBRyxPQUFPO0VBQ25CQyxNQUFNLEdBQUcsU0FBUztFQUVsQkMsV0FBVyxHQUFHLElBQUlDLFdBQVcsQ0FBQyxTQUFTLENBQUM7RUFFeENDLFdBQVdBLENBQUNDLFFBQVEsRUFBRUMsS0FBSyxFQUFFO0lBQzNCLElBQUksQ0FBQ04sU0FBUyxHQUFHSyxRQUFRLElBQUksT0FBTztJQUNwQyxJQUFJLENBQUNKLE1BQU0sR0FBR0ssS0FBSyxJQUFJLFNBQVM7SUFDaEMsSUFBSSxDQUFDQyxRQUFRLENBQUMsQ0FBQztFQUNqQjtFQUVBLElBQUlDLElBQUlBLENBQUEsRUFBRztJQUNULE9BQU8sSUFBSSxDQUFDVCxLQUFLO0VBQ25CO0VBRUEsSUFBSVMsSUFBSUEsQ0FBQ2hELEtBQUssRUFBRTtJQUNkLElBQUksQ0FBQ3VDLEtBQUssR0FBR3ZDLEtBQUs7SUFDbEIsSUFBSSxDQUFDdUMsS0FBSyxHQUFHLElBQUksQ0FBQ0YsS0FBSyxDQUFDWSxTQUFTLENBQUNDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FDekMsSUFBSSxDQUFDYixLQUFLLENBQUNZLFNBQVMsQ0FBQ0UsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUN2QyxJQUFJbkQsS0FBSyxFQUFFO01BQ1Q7TUFDQTtNQUNBOztNQUVBLE1BQU1vRCxXQUFXLEdBQUdDLGdCQUFnQixDQUFDL0UsUUFBUSxDQUFDTyxhQUFhLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDeUUsS0FBSyxDQUFDQyxLQUFLLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDO01BQ2xHLE1BQU1DLGtCQUFrQixHQUFHQyxRQUFRLENBQUNMLFdBQVcsQ0FBQyxJQUFJOUUsUUFBUSxDQUFDTyxhQUFhLENBQUMsa0JBQWtCLENBQUMsQ0FBQzZFLFdBQVcsR0FBR3BGLFFBQVEsQ0FBQ08sYUFBYSxDQUFDLGtCQUFrQixDQUFDLENBQUM4RSxXQUFXLENBQUM7TUFFcEssTUFBTUwsS0FBSyxHQUFHRSxrQkFBa0IsR0FBRyxJQUFJO01BRXZDLElBQUksQ0FBQ2hCLFNBQVMsS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDSCxLQUFLLENBQUNKLEtBQUssQ0FBQzJCLElBQUksR0FBR04sS0FBSyxHQUFHLElBQUksQ0FBQ2pCLEtBQUssQ0FBQ0osS0FBSyxDQUFDNEIsS0FBSyxHQUFHUCxLQUFLO0lBQzVGLENBQUMsTUFBTTtNQUNMO01BQ0EsSUFBSSxDQUFDZCxTQUFTLEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQ0gsS0FBSyxDQUFDSixLQUFLLENBQUMyQixJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQ3ZCLEtBQUssQ0FBQ0osS0FBSyxDQUFDNEIsS0FBSyxHQUFHLENBQUM7SUFDcEY7RUFDRjtFQUVBZCxRQUFRQSxDQUFBLEVBQUc7SUFDVCxJQUFJLENBQUNWLEtBQUssR0FBR0gsR0FBRyxDQUFDL0MsYUFBYSxDQUFDO01BQzdCQyxHQUFHLEVBQUUsS0FBSztNQUNWQyxRQUFRLEVBQUVmLFFBQVEsQ0FBQ0MsSUFBSTtNQUN2QmlCLFVBQVUsRUFBRTtRQUNWc0UsS0FBSyxFQUFFLEdBQUczQixTQUFHLENBQUM1QixPQUFPLENBQUNFLE1BQU0sSUFBSSxJQUFJLENBQUMrQixTQUFTLEVBQUU7UUFDaERQLEtBQUssRUFBRSxlQUFlLElBQUksQ0FBQ1EsTUFBTTtNQUNuQztJQUNGLENBQUMsQ0FBQztJQUVGLElBQUksQ0FBQ0gsV0FBVyxHQUFHLElBQUksQ0FBQ0QsS0FBSyxDQUFDMEIsWUFBWSxDQUFDO01BQ3pDQyxJQUFJLEVBQUU7SUFDUixDQUFDLENBQUM7SUFFRjlCLEdBQUcsQ0FBQy9DLGFBQWEsQ0FBQztNQUNoQkMsR0FBRyxFQUFFLE9BQU87TUFDWk0sU0FBUyxFQUFFdUMsWUFBSztNQUNoQjVDLFFBQVEsRUFBRSxJQUFJLENBQUNpRDtJQUNqQixDQUFDLENBQUM7SUFDRkosR0FBRyxDQUFDL0MsYUFBYSxDQUFDO01BQ2hCQyxHQUFHLEVBQUUsTUFBTTtNQUNYSSxVQUFVLEVBQUU7UUFDVnNFLEtBQUssRUFBRTtNQUNULENBQUM7TUFDRHBFLFNBQVMsRUFBRXVCLGdCQUFLLENBQUNTLGFBQWE7TUFDOUJyQyxRQUFRLEVBQUUsSUFBSSxDQUFDaUQ7SUFDakIsQ0FBQyxDQUFDO0lBQ0Y7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNJLElBQUksQ0FBQ0QsS0FBSyxDQUFDbkMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQytELFFBQVEsQ0FBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ2hFO0VBRUFELFFBQVFBLENBQUNFLEtBQUssRUFBRTtJQUNkLElBQUksQ0FBQ25CLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQ1QsS0FBSztJQUN2QjtJQUNBO0FBQ0o7SUFDSTtBQUNKO0lBQ0ksSUFBSSxDQUFDRixLQUFLLENBQUMrQixhQUFhLENBQUMsSUFBSSxDQUFDMUIsV0FBVyxDQUFDO0VBQzVDO0FBQ0YsQzs7QUM1RkEsTUFBTTFCLFlBQU0sR0FBRztBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUVELG9EQUFlQSxZQUFNLEU7O0FDcklyQixNQUFNQSxrQkFBTSxHQUFHO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Qsa0RBQWVBLGtCQUFNLEU7O0FDeEhPO0FBQ1k7QUFDaUI7QUFDdEI7QUFFcEIsTUFBTXFELEtBQUssQ0FBQztFQUN6QmhDLEtBQUssR0FBRyxJQUFJO0VBQ1pDLFdBQVcsR0FBRyxJQUFJO0VBQ2xCZ0MsT0FBTyxHQUFHLElBQUk7RUFDZEMsS0FBSyxHQUFHLElBQUk7RUFDWkMsS0FBSyxHQUFHLElBQUk7RUFDWkMsT0FBTyxHQUFHLElBQUk7RUFDZEMsUUFBUSxHQUFHLElBQUk7RUFDZkMsSUFBSSxHQUFHLElBQUk7RUFDWEMsTUFBTSxHQUFHLElBQUk7RUFDYkMsWUFBWSxHQUFHLElBQUk7RUFDbkJDLE9BQU8sR0FBRyxJQUFJO0VBQ2RDLFFBQVEsR0FBR0EsQ0FBQSxLQUFNLENBQUMsQ0FBQztFQUNuQkMsVUFBVSxHQUFHLElBQUlyQyxXQUFXLENBQUMsT0FBTyxFQUFFO0lBQ3BDc0MsT0FBTyxFQUFFO01BQ1BDLElBQUksRUFBRUEsQ0FBQSxLQUFNQSxJQUFJLENBQUNsRjtJQUNuQjtFQUNGLENBQUMsQ0FBQztFQUVGNEMsV0FBV0EsQ0FBQ3VDLE9BQU8sRUFBRTtJQUNuQixJQUFJQSxPQUFPLEVBQUU7TUFDWCxJQUFJLENBQUNMLE9BQU8sR0FBR0ssT0FBTyxDQUFDQyxNQUFNO01BQzdCLElBQUksQ0FBQ1QsSUFBSSxHQUFHUSxPQUFPLENBQUNwRixHQUFHO01BQ3ZCLElBQUksQ0FBQ3VFLE9BQU8sR0FBR2EsT0FBTyxDQUFDRSxNQUFNLEdBQ3pCRixPQUFPLENBQUNFLE1BQU0sR0FBR0MsU0FBUztNQUM5QixJQUFJLENBQUNmLEtBQUssR0FBR1ksT0FBTyxDQUFDSSxLQUFLLEdBQ3RCSixPQUFPLENBQUNJLEtBQUssR0FBR0QsU0FBUztNQUM3QixJQUFJLENBQUNkLEtBQUssR0FBR1csT0FBTyxDQUFDSyxJQUFJLEdBQ3JCTCxPQUFPLENBQUNLLElBQUksR0FBR0YsU0FBUztNQUM1QixJQUFJLENBQUNaLFFBQVEsR0FBR1MsT0FBTyxDQUFDQSxPQUFPLEdBQzNCQSxPQUFPLENBQUNBLE9BQU8sR0FBR0csU0FBUztNQUMvQixJQUFJLENBQUNULFlBQVksR0FBR00sT0FBTyxDQUFDTSxXQUFXLEdBQ25DTixPQUFPLENBQUNNLFdBQVcsR0FBR0gsU0FBUztNQUNuQyxJQUFJLENBQUNWLE1BQU0sR0FBRyxPQUFPTyxPQUFPLENBQUNuRixLQUFLLEtBQUtzRixTQUFTLEdBQzVDSCxPQUFPLENBQUNuRixLQUFLLEdBQUdzRixTQUFTO01BQzdCLElBQUlILE9BQU8sQ0FBQ0osUUFBUSxFQUFFO1FBQ3BCLElBQUksQ0FBQ0EsUUFBUSxHQUFHSSxPQUFPLENBQUNKLFFBQVE7TUFDbEM7TUFDQSxJQUFJLENBQUNOLE9BQU8sR0FBRyxJQUFJLENBQUNpQixNQUFNLENBQUMsQ0FBQztJQUM5QjtJQUNBLElBQUksQ0FBQzNDLFFBQVEsQ0FBQyxDQUFDO0VBQ2pCO0VBRUEsSUFBSS9DLEtBQUtBLENBQUMyRixHQUFHLEVBQUU7SUFDYixJQUFJLENBQUNmLE1BQU0sR0FBR2UsR0FBRztJQUNqQixJQUFJLENBQUNyRCxXQUFXLENBQUNzRCxXQUFXLENBQUMsSUFBSSxDQUFDdEQsV0FBVyxDQUFDdUQsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVELElBQUksQ0FBQ3ZELFdBQVcsQ0FBQ2xDLFdBQVcsQ0FBQyxJQUFJLENBQUMwRixRQUFRLENBQUM7RUFDN0M7RUFFQSxJQUFJQyxNQUFNQSxDQUFBLEVBQUc7SUFDWCxJQUFJLElBQUksQ0FBQ3hCLEtBQUssRUFBRTtNQUNkLE9BQU9yQyxHQUFHLENBQUMvQyxhQUFhLENBQUM7UUFDdkJDLEdBQUcsRUFBRSxPQUFPO1FBQ1pJLFVBQVUsRUFBRTtVQUNWc0UsS0FBSyxFQUFFO1FBQ1QsQ0FBQztRQUNEcEUsU0FBUyxFQUFFLElBQUksQ0FBQzZFO01BQ2xCLENBQUMsQ0FBQztJQUNKO0lBQ0EsT0FBT2UsU0FBUztFQUNsQjtFQUVBVSxhQUFhQSxDQUFDaEcsS0FBSyxFQUFFO0lBQ25CLElBQUksSUFBSSxDQUFDNkUsWUFBWSxJQUFJLElBQUksQ0FBQ0EsWUFBWSxDQUFDb0IsTUFBTSxFQUFFO01BQ2pELE9BQU8sSUFBSSxDQUFDcEIsWUFBWSxDQUFDb0IsTUFBTSxDQUFDakcsS0FBSyxDQUFDO0lBQ3hDO0lBQ0EsT0FBT0EsS0FBSztFQUNkO0VBRUEsSUFBSThGLFFBQVFBLENBQUEsRUFBRztJQUNiLElBQUksSUFBSSxDQUFDdEIsS0FBSyxFQUFFO01BQ2QsUUFBUSxJQUFJLENBQUNBLEtBQUs7UUFDaEIsS0FBSyxRQUFRO1VBQ1gsT0FBT3RDLEdBQUcsQ0FBQy9DLGFBQWEsQ0FBQztZQUN2QkMsR0FBRyxFQUFFLEtBQUs7WUFDVkksVUFBVSxFQUFFO2NBQ1ZzRSxLQUFLLEVBQUU7WUFDVCxDQUFDO1lBQ0R2RSxRQUFRLEVBQUUsQ0FDUjJDLEdBQUcsQ0FBQy9DLGFBQWEsQ0FBQztjQUNoQkMsR0FBRyxFQUFFLE9BQU87Y0FDWkksVUFBVSxFQUFFO2dCQUNWZ0csSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCVSxFQUFFLEVBQUUsSUFBSSxDQUFDekIsT0FBTztnQkFDaEIwQixPQUFPLEVBQUUsSUFBSSxDQUFDdkI7Y0FDaEIsQ0FBQztjQUNEbkYsTUFBTSxFQUFFO2dCQUNOa0IsS0FBSyxFQUFFLElBQUksQ0FBQ3lGLFNBQVMsQ0FBQ2xDLElBQUksQ0FBQyxJQUFJO2NBQ2pDO1lBQ0YsQ0FBQyxDQUFDLEVBQ0ZoQyxHQUFHLENBQUMvQyxhQUFhLENBQUM7Y0FDaEJDLEdBQUcsRUFBRSxPQUFPO2NBQ1pJLFVBQVUsRUFBRTtnQkFDVmdHLElBQUksRUFBRSxVQUFVO2dCQUNoQmEsR0FBRyxFQUFFLElBQUksQ0FBQzVCO2NBQ1o7WUFDRixDQUFDLENBQUM7VUFFTixDQUFDLENBQUM7UUFDSixLQUFLLFdBQVc7VUFDZCxPQUFPdkMsR0FBRyxDQUFDL0MsYUFBYSxDQUFDO1lBQ3ZCQyxHQUFHLEVBQUUsS0FBSztZQUNWSSxVQUFVLEVBQUU7Y0FDVnNFLEtBQUssRUFBRTtZQUNULENBQUM7WUFDRHZFLFFBQVEsRUFBRSxDQUNSMkMsR0FBRyxDQUFDL0MsYUFBYSxDQUFDO2NBQ2hCQyxHQUFHLEVBQUUsTUFBTTtjQUNYTSxTQUFTLEVBQUV1QixnQkFBSyxDQUFDSSxLQUFLO2NBQ3RCNUIsTUFBTSxFQUFFO2dCQUNONkcsS0FBSyxFQUFFLElBQUksQ0FBQ0MsU0FBUyxDQUFDckMsSUFBSSxDQUFDLElBQUk7Y0FDakM7WUFDRixDQUFDLENBQUMsRUFDRmhDLEdBQUcsQ0FBQy9DLGFBQWEsQ0FBQztjQUNoQkMsR0FBRyxFQUFFLE9BQU87Y0FDWkksVUFBVSxFQUFFO2dCQUNWZ0csSUFBSSxFQUFFLFFBQVE7Z0JBQ2R4RixLQUFLLEVBQUUsQ0FBQztnQkFDUndHLEdBQUcsRUFBRyxJQUFJLENBQUMzQixZQUFZLElBQUksT0FBTyxJQUFJLENBQUNBLFlBQVksQ0FBQzJCLEdBQUcsS0FBSyxRQUFRLEdBQUcsSUFBSSxDQUFDUixhQUFhLENBQUMsSUFBSSxDQUFDbkIsWUFBWSxDQUFDMkIsR0FBRyxDQUFDLEdBQUcsQ0FBRTtnQkFDckhDLEdBQUcsRUFBRyxJQUFJLENBQUM1QixZQUFZLElBQUksT0FBTyxJQUFJLENBQUNBLFlBQVksQ0FBQzRCLEdBQUcsS0FBSyxRQUFRLEdBQUcsSUFBSSxDQUFDVCxhQUFhLENBQUMsSUFBSSxDQUFDbkIsWUFBWSxDQUFDNEIsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFHO2dCQUM3SUMsSUFBSSxFQUFHLElBQUksQ0FBQzlCLFlBQVksSUFBSSxPQUFPLElBQUksQ0FBQ0EsWUFBWSxDQUFDOEIsSUFBSSxLQUFLLFFBQVEsR0FBRyxJQUFJLENBQUNYLGFBQWEsQ0FBQyxJQUFJLENBQUNuQixZQUFZLENBQUM4QixJQUFJLENBQUMsR0FBRyxDQUFFO2dCQUN4SDNHLEtBQUssRUFBRSxJQUFJLENBQUNnRyxhQUFhLENBQUMsSUFBSSxDQUFDcEIsTUFBTTtjQUN2QyxDQUFDO2NBQ0RuRixNQUFNLEVBQUU7Z0JBQ05tSCxLQUFLLEVBQUVDLEVBQUUsSUFBSTtrQkFDWCxNQUFNbEcsS0FBSyxHQUFHLElBQUksQ0FBQzJCLFdBQVcsQ0FBQ3pELGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQztrQkFDcEUsTUFBTWlJLFFBQVEsR0FBRyxJQUFJLENBQUNqQyxZQUFZLElBQUksT0FBTyxJQUFJLENBQUNBLFlBQVksQ0FBQzRCLEdBQUcsS0FBSyxRQUFRLEdBQUcsSUFBSSxDQUFDNUIsWUFBWSxDQUFDNEIsR0FBRyxHQUFHLElBQUksQ0FBQ0MsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtrQkFDbkksTUFBTUssUUFBUSxHQUFHLElBQUksQ0FBQ2xDLFlBQVksSUFBSSxPQUFPLElBQUksQ0FBQ0EsWUFBWSxDQUFDMkIsR0FBRyxLQUFLLFFBQVEsR0FBRyxJQUFJLENBQUMzQixZQUFZLENBQUMyQixHQUFHLEdBQUcsQ0FBQztrQkFDM0csSUFBSS9DLFFBQVEsQ0FBQzlDLEtBQUssQ0FBQ1gsS0FBSyxDQUFDLElBQUk4RyxRQUFRLEVBQUU7b0JBQ3JDRCxFQUFFLENBQUNHLGNBQWMsQ0FBQyxDQUFDO29CQUNuQnJHLEtBQUssQ0FBQ1gsS0FBSyxHQUFHLElBQUksQ0FBQ2dHLGFBQWEsQ0FBQyxFQUFFLENBQUM7b0JBQ3BDckYsS0FBSyxDQUFDeUQsYUFBYSxDQUFDLElBQUksQ0FBQ1ksVUFBVSxDQUFDO2tCQUN0QztrQkFDQSxJQUFJdkIsUUFBUSxDQUFDOUMsS0FBSyxDQUFDWCxLQUFLLENBQUMsSUFBSStHLFFBQVEsRUFBRTtvQkFDckNGLEVBQUUsQ0FBQ0csY0FBYyxDQUFDLENBQUM7b0JBQ25CckcsS0FBSyxDQUFDWCxLQUFLLEdBQUcsSUFBSSxDQUFDZ0csYUFBYSxDQUFDLENBQUMsQ0FBQztvQkFDbkNyRixLQUFLLENBQUN5RCxhQUFhLENBQUMsSUFBSSxDQUFDWSxVQUFVLENBQUM7a0JBQ3RDO2dCQUNGLENBQUM7Z0JBQ0RyRSxLQUFLLEVBQUUsSUFBSSxDQUFDeUYsU0FBUyxDQUFDbEMsSUFBSSxDQUFDLElBQUk7Y0FDakM7WUFDRixDQUFDLENBQUMsRUFDRmhDLEdBQUcsQ0FBQy9DLGFBQWEsQ0FBQztjQUNoQkMsR0FBRyxFQUFFLE1BQU07Y0FDWE0sU0FBUyxFQUFFdUIsZ0JBQUssQ0FBQ0ssSUFBSTtjQUNyQjdCLE1BQU0sRUFBRTtnQkFDTjZHLEtBQUssRUFBRSxJQUFJLENBQUNXLE9BQU8sQ0FBQy9DLElBQUksQ0FBQyxJQUFJO2NBQy9CO1lBQ0YsQ0FBQyxDQUFDO1VBRU4sQ0FBQyxDQUFDO1FBQ0osS0FBSyxRQUFRO1VBQ1gsT0FBT2hDLEdBQUcsQ0FBQy9DLGFBQWEsQ0FBQztZQUN2QkMsR0FBRyxFQUFFLFFBQVE7WUFDYkksVUFBVSxFQUFFO2NBQ1ZzRSxLQUFLLEVBQUUsc0JBQXNCO2NBQzdCb0MsRUFBRSxFQUFFLElBQUksQ0FBQ3ZCO1lBQ1gsQ0FBQztZQUNEbEYsTUFBTSxFQUFFO2NBQ05rQixLQUFLLEVBQUUsSUFBSSxDQUFDeUYsU0FBUyxDQUFDbEMsSUFBSSxDQUFDLElBQUk7WUFDakMsQ0FBQztZQUNEM0UsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDbUYsUUFBUSxJQUFJLEVBQUUsRUFBRXdDLEdBQUcsQ0FBQ0MsTUFBTSxJQUFJO2NBQzVDLE9BQU9qRixHQUFHLENBQUMvQyxhQUFhLENBQUM7Z0JBQ3ZCQyxHQUFHLEVBQUUsUUFBUTtnQkFDYkksVUFBVSxFQUFFO2tCQUNWUSxLQUFLLEVBQUVtSCxNQUFNLENBQUNuSCxLQUFLO2tCQUNuQm9ILFFBQVEsRUFBRUQsTUFBTSxDQUFDbkgsS0FBSyxLQUFLLElBQUksQ0FBQzRFO2dCQUNsQyxDQUFDO2dCQUNEbEYsU0FBUyxFQUFFeUgsTUFBTSxDQUFDNUI7Y0FDcEIsQ0FBQyxDQUFDO1lBQ0osQ0FBQztVQUNILENBQUMsQ0FBQztRQUNKO1VBQ0UsT0FBTyxJQUFJLENBQUNmLEtBQUs7TUFDckI7SUFDRjtJQUNBLE9BQU9jLFNBQVM7RUFDbEI7RUFFQSxJQUFJK0IsU0FBU0EsQ0FBQSxFQUFHO0lBQ2QsT0FBTyxDQUNMLElBQUksQ0FBQ3RCLE1BQU0sRUFDWCxJQUFJLENBQUNELFFBQVEsQ0FDZDtFQUNIO0VBRUEvQyxRQUFRQSxDQUFBLEVBQUc7SUFDVCxJQUFJLENBQUNWLEtBQUssR0FBR0gsR0FBRyxDQUFDL0MsYUFBYSxDQUFDO01BQzdCQyxHQUFHLEVBQUUsS0FBSztNQUNWQyxRQUFRLEVBQUUsSUFBSSxDQUFDaUYsT0FBTyxHQUFHLElBQUksQ0FBQ0EsT0FBTyxHQUFHZ0IsU0FBUztNQUNqRDlGLFVBQVUsRUFBRTtRQUNWc0UsS0FBSyxFQUFFM0IsU0FBRyxDQUFDNUIsT0FBTyxDQUFDSSxLQUFLO1FBQ3hCMkcsUUFBUSxFQUFFLElBQUksQ0FBQzNDO01BQ2pCO0lBQ0YsQ0FBQyxDQUFDO0lBRUYsSUFBSSxDQUFDckMsV0FBVyxHQUFHLElBQUksQ0FBQ0QsS0FBSyxDQUFDMEIsWUFBWSxDQUFDO01BQ3pDQyxJQUFJLEVBQUU7SUFDUixDQUFDLENBQUM7SUFFRjlCLEdBQUcsQ0FBQy9DLGFBQWEsQ0FBQztNQUNoQkMsR0FBRyxFQUFFLE9BQU87TUFDWk0sU0FBUyxFQUFFdUMsV0FBSztNQUNoQjVDLFFBQVEsRUFBRSxJQUFJLENBQUNpRDtJQUNqQixDQUFDLENBQUM7SUFFRixJQUFJLENBQUMrRSxTQUFTLENBQ1hFLE1BQU0sQ0FBQ3BILEtBQUssSUFBSUEsS0FBSyxDQUFDLENBQ3RCTCxPQUFPLENBQUNLLEtBQUssSUFBSSxJQUFJLENBQUNtQyxXQUFXLENBQUNsQyxXQUFXLENBQUNELEtBQUssQ0FBQyxDQUFDO0VBQzFEO0VBRUF1RixNQUFNQSxDQUFBLEVBQUc7SUFDUCxNQUFNOEIsUUFBUSxHQUFHLGdFQUFnRTtJQUNqRixNQUFNQyxTQUFTLEdBQUcsQ0FBQztJQUNuQixJQUFJQyxHQUFHLEdBQUcsRUFBRTtJQUNaLEtBQUssSUFBSUMsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHRixTQUFTLEVBQUVFLENBQUMsRUFBRSxFQUFFO01BQ2xDRCxHQUFHLElBQUlGLFFBQVEsQ0FBQ0ksTUFBTSxDQUFDQyxJQUFJLENBQUNDLEtBQUssQ0FBQ0QsSUFBSSxDQUFDRSxNQUFNLENBQUMsQ0FBQyxHQUFHUCxRQUFRLENBQUNRLE1BQU0sQ0FBQyxDQUFDO0lBQ3JFO0lBQ0EsT0FBT04sR0FBRztFQUNaO0VBRUFuQixTQUFTQSxDQUFBLEVBQUc7SUFDVixNQUFNNUYsS0FBSyxHQUFHLElBQUksQ0FBQzJCLFdBQVcsQ0FBQ3pELGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQztJQUNwRSxJQUFJOEIsS0FBSyxFQUFFO01BQ1RBLEtBQUssQ0FBQ3NILFFBQVEsQ0FBQyxDQUFDO01BQ2hCdEgsS0FBSyxDQUFDeUQsYUFBYSxDQUFDLElBQUksQ0FBQ1ksVUFBVSxDQUFDO0lBQ3RDO0VBQ0Y7RUFFQWlDLE9BQU9BLENBQUEsRUFBRztJQUNSLE1BQU10RyxLQUFLLEdBQUcsSUFBSSxDQUFDMkIsV0FBVyxDQUFDekQsYUFBYSxDQUFDLHNCQUFzQixDQUFDO0lBQ3BFLElBQUk4QixLQUFLLEVBQUU7TUFDVEEsS0FBSyxDQUFDdUgsTUFBTSxDQUFDLENBQUM7TUFDZHZILEtBQUssQ0FBQ3lELGFBQWEsQ0FBQyxJQUFJLENBQUNZLFVBQVUsQ0FBQztJQUN0QztFQUNGO0VBRUEwQixTQUFTQSxDQUFBLEVBQUc7SUFDVixPQUFPbEksTUFBTSxDQUFDMkosVUFBVSxDQUFDLG9CQUFvQixDQUFDLENBQUNDLE9BQU87RUFDeEQ7RUFFQWhDLFNBQVNBLENBQUNqQyxLQUFLLEVBQUU7SUFDZixJQUFJbkUsS0FBSztJQUNULFFBQVEsSUFBSSxDQUFDd0UsS0FBSztNQUNoQixLQUFLLFFBQVE7UUFDWCxNQUFNNkQsTUFBTSxHQUFHLElBQUksQ0FBQy9GLFdBQVcsQ0FBQ3pELGFBQWEsQ0FBQyxRQUFRLENBQUM7UUFDdkRtQixLQUFLLEdBQUdxSSxNQUFNLENBQUNySSxLQUFLO1FBQ3BCO01BQ0YsS0FBSyxRQUFRO1FBQ1gsTUFBTXNJLFFBQVEsR0FBRyxJQUFJLENBQUNoRyxXQUFXLENBQUN6RCxhQUFhLENBQUMsd0JBQXdCLENBQUM7UUFDekVtQixLQUFLLEdBQUdzSSxRQUFRLENBQUNuQyxPQUFPLElBQUksS0FBSzs7UUFFakM7UUFDQSxNQUFNb0MsYUFBYSxHQUFHRCxRQUFRLENBQUNFLGFBQWE7UUFDNUMsTUFBTWpELEtBQUssR0FBR2dELGFBQWEsQ0FBQ0Usc0JBQXNCLENBQUMvSSxTQUFTO1FBRTVELElBQUcsSUFBSSxDQUFDZ0gsU0FBUyxDQUFDLENBQUMsSUFBSW5CLEtBQUssS0FBSyxlQUFlLElBQUl2RixLQUFLLEVBQUU7VUFDekQsSUFBSSxDQUFDOEUsT0FBTyxDQUFDNEQsTUFBTSxDQUFDLENBQUM7UUFDdkI7UUFFQTtNQUNGLEtBQUssV0FBVztRQUNkLE1BQU1DLE1BQU0sR0FBRyxJQUFJLENBQUNyRyxXQUFXLENBQUN6RCxhQUFhLENBQUMsc0JBQXNCLENBQUM7UUFDckUsSUFBSSxJQUFJLENBQUNnRyxZQUFZLElBQUksSUFBSSxDQUFDQSxZQUFZLENBQUNvQixNQUFNLEVBQUU7VUFDakRqRyxLQUFLLEdBQUc0SSxNQUFNLENBQUNELE1BQU0sQ0FBQzNJLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHO1FBQ3pDLENBQUMsTUFBTTtVQUNMQSxLQUFLLEdBQUc0SSxNQUFNLENBQUNELE1BQU0sQ0FBQzNJLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDbkM7UUFDQTtJQUNKO0lBQ0EsSUFBSSxDQUFDK0UsUUFBUSxDQUFDL0UsS0FBSyxDQUFDO0VBQ3RCO0FBQ0YsQzs7QUNyUkEsTUFBTWdCLG9CQUFNLEdBQUc7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELG9EQUFlQSxvQkFBTSxFOztBQ2pKZCxNQUFNNkgsS0FBSyxDQUFDO0VBQ2pCLE9BQU9DLE1BQU1BLENBQUNDLEdBQUcsRUFBRTtJQUNqQixPQUFPQyxLQUFvQixHQUN2QixtQkFBbUJELEdBQUcsRUFBRSxHQUN4QixDQUE2QjtFQUNuQztFQUVBLE9BQU9FLEdBQUdBLENBQUNGLEdBQUcsRUFBRTVELE9BQU8sRUFBRTtJQUN2QixPQUFPK0QsS0FBSyxDQUFDTCxLQUFLLENBQUNDLE1BQU0sQ0FBQ0MsR0FBRyxDQUFDLEVBQUU7TUFDOUJJLE1BQU0sRUFBRSxLQUFLO01BQ2IsR0FBR2hFO0lBQ0wsQ0FBQyxDQUFDO0VBQ0o7RUFFQSxPQUFPaUUsSUFBSUEsQ0FBQ0wsR0FBRyxFQUFFNUQsT0FBTyxFQUFFO0lBQ3hCLE9BQU8rRCxLQUFLLENBQUNMLEtBQUssQ0FBQ0MsTUFBTSxDQUFDQyxHQUFHLENBQUMsRUFBRTtNQUM5QkksTUFBTSxFQUFFLE1BQU07TUFDZCxHQUFHaEU7SUFDTCxDQUFDLENBQUM7RUFDSjtBQUNGLEM7O0FDcEJBLE1BQU1uRSxrQkFBTSxHQUFHO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxrREFBZUEsa0JBQU0sRTs7QUNuQk87QUFDWTtBQUNpQjtBQUNsQjtBQUNKO0FBRXBCLE1BQU1xSSxLQUFLLENBQUM7RUFDekJoSCxLQUFLLEdBQUcsSUFBSTtFQUNaQyxXQUFXLEdBQUcsSUFBSTtFQUNsQmdDLE9BQU8sR0FBRyxJQUFJO0VBQ2RDLEtBQUssR0FBRyxJQUFJO0VBQ1orRSxHQUFHLEdBQUcsSUFBSTtFQUVWMUcsV0FBV0EsQ0FBQ3VDLE9BQU8sRUFBRTtJQUNuQixJQUFJQSxPQUFPLEVBQUU7TUFDWCxJQUFJLENBQUNiLE9BQU8sR0FBR2EsT0FBTyxDQUFDRSxNQUFNLEdBQ3pCRixPQUFPLENBQUNFLE1BQU0sR0FBR0MsU0FBUztNQUM5QixJQUFJLENBQUNmLEtBQUssR0FBR1ksT0FBTyxDQUFDRCxJQUFJLEdBQ3JCQyxPQUFPLENBQUNELElBQUksR0FBR0ksU0FBUztJQUM5QjtJQUVBLElBQUksQ0FBQ3ZDLFFBQVEsQ0FBQyxDQUFDO0VBQ2pCO0VBRUEsSUFBSStDLFFBQVFBLENBQUEsRUFBRztJQUNiLE1BQU15RCxPQUFPLEdBQUdySCxHQUFHLENBQUMvQyxhQUFhLENBQUM7TUFDaENDLEdBQUcsRUFBRSxLQUFLO01BQ1ZJLFVBQVUsRUFBRTtRQUNWc0UsS0FBSyxFQUFFO01BQ1QsQ0FBQztNQUNEcEUsU0FBUyxFQUFFLElBQUksQ0FBQzZFLEtBQUs7TUFDckI5RSxNQUFNLEVBQUU7UUFDTjZHLEtBQUssRUFBRUEsQ0FBQSxLQUFNa0QsT0FBTyxDQUFDQyxHQUFHLENBQUMsU0FBUztNQUNwQztJQUNGLENBQUMsQ0FBQztJQUVGLE9BQU9GLE9BQU87RUFDaEI7RUFFQSxJQUFJbEMsU0FBU0EsQ0FBQSxFQUFHO0lBQ2QsT0FBTyxDQUNMLElBQUksQ0FBQ3ZCLFFBQVEsQ0FDZDtFQUNIO0VBRUEvQyxRQUFRQSxDQUFBLEVBQUc7SUFDVCxJQUFJLENBQUN1RyxHQUFHLEdBQUcsSUFBSSxDQUFDNUQsTUFBTSxDQUFDLENBQUM7SUFDeEIsSUFBSSxDQUFDckQsS0FBSyxHQUFHSCxHQUFHLENBQUMvQyxhQUFhLENBQUM7TUFDN0JDLEdBQUcsRUFBRSxLQUFLO01BQ1ZDLFFBQVEsRUFBRSxJQUFJLENBQUNpRixPQUFPLEdBQUcsSUFBSSxDQUFDQSxPQUFPLEdBQUdnQixTQUFTO01BQ2pEOUYsVUFBVSxFQUFFO1FBQ1YwRyxFQUFFLEVBQUUsSUFBSSxDQUFDb0Q7TUFDWDtJQUNGLENBQUMsQ0FBQztJQUVGLElBQUksQ0FBQ2hILFdBQVcsR0FBRyxJQUFJLENBQUNELEtBQUssQ0FBQzBCLFlBQVksQ0FBQztNQUN6Q0MsSUFBSSxFQUFFO0lBQ1IsQ0FBQyxDQUFDO0lBRUY5QixHQUFHLENBQUMvQyxhQUFhLENBQUM7TUFDaEJDLEdBQUcsRUFBRSxPQUFPO01BQ1pNLFNBQVMsRUFBRXVDLFdBQUs7TUFDaEI1QyxRQUFRLEVBQUUsSUFBSSxDQUFDaUQ7SUFDakIsQ0FBQyxDQUFDO0lBRUYsSUFBSSxDQUFDK0UsU0FBUyxDQUNYRSxNQUFNLENBQUNwSCxLQUFLLElBQUlBLEtBQUssQ0FBQyxDQUN0QkwsT0FBTyxDQUFDSyxLQUFLLElBQUksSUFBSSxDQUFDbUMsV0FBVyxDQUFDbEMsV0FBVyxDQUFDRCxLQUFLLENBQUMsQ0FBQztJQUV4RHVKLFVBQVUsQ0FBQyxNQUFNO01BQ2YsTUFBTS9KLE9BQU8sR0FBRyxJQUFJLENBQUMyRSxPQUFPLENBQUNxRixjQUFjLENBQUMsSUFBSSxDQUFDTCxHQUFHLENBQUM7TUFDckQsSUFBSTNKLE9BQU8sRUFBRTtRQUNYQSxPQUFPLENBQUN3RCxNQUFNLENBQUMsQ0FBQztNQUNsQjtJQUNGLENBQUMsRUFBRSxJQUFJLENBQUM7RUFDVjtFQUVBdUMsTUFBTUEsQ0FBQSxFQUFHO0lBQ1AsTUFBTThCLFFBQVEsR0FBRyxnRUFBZ0U7SUFDakYsTUFBTUMsU0FBUyxHQUFHLENBQUM7SUFDbkIsSUFBSUMsR0FBRyxHQUFHLEVBQUU7SUFDWixLQUFLLElBQUlDLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR0YsU0FBUyxFQUFFRSxDQUFDLEVBQUUsRUFBRTtNQUNsQ0QsR0FBRyxJQUFJRixRQUFRLENBQUNJLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDQyxLQUFLLENBQUNELElBQUksQ0FBQ0UsTUFBTSxDQUFDLENBQUMsR0FBR1AsUUFBUSxDQUFDUSxNQUFNLENBQUMsQ0FBQztJQUNyRTtJQUNBLE9BQU9OLEdBQUc7RUFDWjtBQUdGLEM7O0FDeEY0QjtBQUNZO0FBQ2lCO0FBQ2xCO0FBQ0o7QUFDTjtBQUVkLE1BQU1rQyxPQUFPLENBQUM7RUFDM0J2SCxLQUFLLEdBQUcsSUFBSTtFQUNaQyxXQUFXLEdBQUcsSUFBSTtFQUNsQmdDLE9BQU8sR0FBRyxJQUFJO0VBQ2R1RixLQUFLLEdBQUcsT0FBTztFQUNmQyxLQUFLLEdBQUcsSUFBSTtFQUNaQyxNQUFNLEdBQUcsSUFBSTtFQUNiQyxZQUFZLEdBQUcsSUFBSTtFQUNuQkMsWUFBWSxHQUFHQSxDQUFBLEtBQU0sQ0FBQyxDQUFDO0VBQ3ZCQyxvQkFBb0IsR0FBR0EsQ0FBQSxLQUFNLENBQUMsQ0FBQztFQUUvQnRILFdBQVdBLENBQUN1QyxPQUFPLEVBQUU7SUFDbkIsSUFBSUEsT0FBTyxFQUFFO01BQ1gsSUFBSSxDQUFDYixPQUFPLEdBQUdhLE9BQU8sQ0FBQ0UsTUFBTSxHQUN6QkYsT0FBTyxDQUFDRSxNQUFNLEdBQUdDLFNBQVM7TUFDOUIsSUFBSSxDQUFDeUUsTUFBTSxHQUFHNUUsT0FBTyxDQUFDZ0YsS0FBSyxHQUN2QmhGLE9BQU8sQ0FBQ2dGLEtBQUssR0FBRzdFLFNBQVM7TUFDN0IsSUFBSSxDQUFDMEUsWUFBWSxHQUFHN0UsT0FBTyxDQUFDaUYsV0FBVyxHQUNuQ2pGLE9BQU8sQ0FBQ2lGLFdBQVcsR0FBRzlFLFNBQVM7TUFDbkMsSUFBSUgsT0FBTyxDQUFDa0YsV0FBVyxFQUFFO1FBQ3ZCLElBQUksQ0FBQ0osWUFBWSxHQUFHOUUsT0FBTyxDQUFDa0YsV0FBVztNQUN6QztNQUNBLElBQUlsRixPQUFPLENBQUNtRixtQkFBbUIsRUFBRTtRQUMvQixJQUFJLENBQUNKLG9CQUFvQixHQUFHL0UsT0FBTyxDQUFDbUYsbUJBQW1CO01BQ3pEO0lBQ0Y7SUFFQSxJQUFJLENBQUN2SCxRQUFRLENBQUMsQ0FBQztFQUNqQjtFQUVBLElBQUlnRCxNQUFNQSxDQUFBLEVBQUc7SUFDWCxPQUFPN0QsR0FBRyxDQUFDL0MsYUFBYSxDQUFDO01BQ3ZCQyxHQUFHLEVBQUUsT0FBTztNQUNaTSxTQUFTLEVBQUUsSUFBSSxDQUFDbUssS0FBSyxLQUFLLE9BQU8sR0FDN0IsSUFBSSxDQUFDRyxZQUFZLENBQUNmLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUNZLEtBQUssS0FBSyxVQUFVLEdBQUcsSUFBSSxDQUFDRyxZQUFZLENBQUNmLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRztJQUN0RyxDQUFDLENBQUM7RUFDSjtFQUVBLElBQUluRCxRQUFRQSxDQUFBLEVBQUc7SUFDYixNQUFNeUQsT0FBTyxHQUFHckgsR0FBRyxDQUFDL0MsYUFBYSxDQUFDO01BQ2hDQyxHQUFHLEVBQUUsTUFBTTtNQUNYSSxVQUFVLEVBQUU7UUFDVnNFLEtBQUssRUFBRTtNQUNULENBQUM7TUFDRHBFLFNBQVMsRUFBRSxJQUFJLENBQUNtSyxLQUFLLEtBQUssT0FBTyxHQUFHO0FBQzFDLDBDQUEwQyxJQUFJLENBQUNHLFlBQVksQ0FBQ2YsR0FBRyxDQUFDLGlCQUFpQixDQUFDO0FBQ2xGLDhDQUE4QyxJQUFJLENBQUNlLFlBQVksQ0FBQ2YsR0FBRyxDQUFDLFVBQVUsQ0FBQztBQUMvRSxzQkFBc0IsSUFBSSxDQUFDZSxZQUFZLENBQUNmLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQztBQUNoRSxnQ0FBZ0MsSUFBSSxDQUFDZSxZQUFZLENBQUNmLEdBQUcsQ0FBQyxRQUFRLENBQUM7QUFDL0QsZ0JBQWdCLElBQUksQ0FBQ2UsWUFBWSxDQUFDZixHQUFHLENBQUMsUUFBUSxDQUFDO0FBQy9DLE9BQU8sR0FBRyxJQUFJLENBQUNZLEtBQUssS0FBSyxVQUFVLEdBQUc7QUFDdEMsMENBQTBDLElBQUksQ0FBQ0csWUFBWSxDQUFDZixHQUFHLENBQUMsVUFBVSxDQUFDO0FBQzNFLDJDQUEyQyxJQUFJLENBQUNlLFlBQVksQ0FBQ2YsR0FBRyxDQUFDLE9BQU8sQ0FBQztBQUN6RSwwQ0FBMEMsSUFBSSxDQUFDZSxZQUFZLENBQUNmLEdBQUcsQ0FBQyxVQUFVLENBQUM7QUFDM0UsOENBQThDLElBQUksQ0FBQ2UsWUFBWSxDQUFDZixHQUFHLENBQUMsVUFBVSxDQUFDO0FBQy9FLDhDQUE4QyxJQUFJLENBQUNlLFlBQVksQ0FBQ2YsR0FBRyxDQUFDLGlCQUFpQixDQUFDO0FBQ3RGO0FBQ0EsZ0NBQWdDLElBQUksQ0FBQ2UsWUFBWSxDQUFDZixHQUFHLENBQUMsVUFBVSxDQUFDO0FBQ2pFLGdCQUFnQixJQUFJLENBQUNlLFlBQVksQ0FBQ2YsR0FBRyxDQUFDLFFBQVEsQ0FBQztBQUMvQyxPQUFPLEdBQUc7QUFDVjtBQUNBLGtCQUFrQmhJLGdCQUFLLENBQUNNLE9BQU87QUFDL0I7QUFDQSxjQUFjLElBQUksQ0FBQ3VJLEtBQUssQ0FBQ1MsUUFBUTtBQUNqQyxpQkFBaUIsSUFBSSxDQUFDUCxZQUFZLENBQUNmLEdBQUcsQ0FBQyxVQUFVLENBQUMsU0FBUyxJQUFJLENBQUNhLEtBQUssQ0FBQ1UsSUFBSTtBQUMxRSxpQkFBaUIsSUFBSSxDQUFDUixZQUFZLENBQUNmLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxJQUFJLENBQUNhLEtBQUssQ0FBQ1csS0FBSztBQUN4RSxpQkFBaUIsSUFBSSxDQUFDVCxZQUFZLENBQUNmLEdBQUcsQ0FBQyxXQUFXLENBQUMsU0FBUyxJQUFJeUIsSUFBSSxDQUFDLENBQUMsQ0FBQ0Msa0JBQWtCLENBQUMsT0FBTyxFQUFFO1FBQUVDLE9BQU8sRUFBQyxNQUFNO1FBQUVDLElBQUksRUFBQyxTQUFTO1FBQUVDLEtBQUssRUFBQyxPQUFPO1FBQUVDLEdBQUcsRUFBQztNQUFTLENBQUMsQ0FBQztBQUNuSyxnQ0FBZ0MsSUFBSSxDQUFDZixZQUFZLENBQUNmLEdBQUcsQ0FBQyxjQUFjLENBQUM7QUFDckUsT0FBTztNQUNEeEosTUFBTSxFQUFFO1FBQ051TCxNQUFNLEVBQUUsSUFBSSxDQUFDQyxTQUFTLENBQUMvRyxJQUFJLENBQUMsSUFBSTtNQUNsQztJQUNGLENBQUMsQ0FBQztJQUVGaEMsR0FBRyxDQUFDL0MsYUFBYSxDQUFDO01BQ2hCQyxHQUFHLEVBQUUsUUFBUTtNQUNiQyxRQUFRLEVBQUVrSyxPQUFPO01BQ2pCL0osVUFBVSxFQUFFO1FBQ1ZnRyxJQUFJLEVBQUU7TUFDUixDQUFDO01BQ0QvRixNQUFNLEVBQUU7UUFDTjZHLEtBQUssRUFBRTRFLENBQUMsSUFBSTtVQUNWLElBQUksSUFBSSxDQUFDckIsS0FBSyxLQUFLLFNBQVMsRUFBRTtZQUM1QixJQUFJLENBQUNzQixhQUFhLENBQUNELENBQUMsRUFBRSxJQUFJLENBQUNyQixLQUFLLEtBQUssT0FBTyxHQUFHLFVBQVUsR0FBRyxPQUFPLENBQUM7WUFDcEU7VUFDRjtVQUNBLElBQUksQ0FBQ0MsS0FBSyxHQUFHLElBQUk7VUFDakIsSUFBSSxDQUFDRCxLQUFLLEdBQUcsT0FBTztVQUNwQixJQUFJLENBQUNFLE1BQU0sQ0FBQzVHLE1BQU0sQ0FBQyxZQUFZLENBQUM7VUFDaEMsSUFBSSxDQUFDNEcsTUFBTSxDQUFDNUcsTUFBTSxDQUFDLGVBQWUsQ0FBQztVQUNuQyxJQUFJLENBQUNnSSxhQUFhLENBQUNELENBQUMsRUFBRSxPQUFPLENBQUM7UUFDaEM7TUFDRixDQUFDO01BQ0R4TCxTQUFTLEVBQUUsSUFBSSxDQUFDbUssS0FBSyxLQUFLLE9BQU8sR0FBRyxJQUFJLENBQUNHLFlBQVksQ0FBQ2YsR0FBRyxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQ1ksS0FBSyxLQUFLLFVBQVUsR0FBRyxJQUFJLENBQUNHLFlBQVksQ0FBQ2YsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQ2UsWUFBWSxDQUFDZixHQUFHLENBQUMsU0FBUztJQUMxSyxDQUFDLENBQUM7SUFFRixPQUFPTSxPQUFPO0VBQ2hCO0VBRUEsSUFBSWxDLFNBQVNBLENBQUEsRUFBRztJQUNkLE9BQU8sQ0FDTCxJQUFJLENBQUN0QixNQUFNLEVBQ1gsSUFBSSxDQUFDRCxRQUFRLENBQ2Q7RUFDSDtFQUVBL0MsUUFBUUEsQ0FBQSxFQUFHO0lBQ1QsSUFBSSxDQUFDcUksV0FBVyxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFDQyxJQUFJLElBQUk7TUFDOUIsSUFBSUEsSUFBSSxJQUFJQSxJQUFJLENBQUNDLElBQUksRUFBRTtRQUNyQixJQUFJLENBQUMxQixLQUFLLEdBQUcsU0FBUztRQUN0QixJQUFJLENBQUNDLEtBQUssR0FBR3dCLElBQUksQ0FBQ0MsSUFBSTtNQUN4QjtNQUNBLE1BQU1DLE1BQU0sR0FBR3RKLEdBQUcsQ0FBQ3hELGFBQWEsQ0FBQyxJQUFJeUQsU0FBRyxDQUFDNUIsT0FBTyxDQUFDSyxPQUFPLEVBQUUsRUFBRSxJQUFJLENBQUMwRCxPQUFPLENBQUM7TUFDekUsSUFBSSxDQUFDakMsS0FBSyxHQUFHbUosTUFBTSxHQUFHQSxNQUFNLEdBQUd0SixHQUFHLENBQUMvQyxhQUFhLENBQUM7UUFDL0NDLEdBQUcsRUFBRSxLQUFLO1FBQ1ZDLFFBQVEsRUFBRSxJQUFJLENBQUNpRixPQUFPLEdBQUcsSUFBSSxDQUFDQSxPQUFPLEdBQUdnQixTQUFTO1FBQ2pEOUYsVUFBVSxFQUFFO1VBQ1ZzRSxLQUFLLEVBQUUzQixTQUFHLENBQUM1QixPQUFPLENBQUNLO1FBQ3JCO01BQ0YsQ0FBQyxDQUFDO01BRUYsSUFBSSxDQUFDNEssTUFBTSxFQUFFO1FBQ1gsSUFBSSxDQUFDbEosV0FBVyxHQUFHLElBQUksQ0FBQ0QsS0FBSyxDQUFDMEIsWUFBWSxDQUFDO1VBQ3pDQyxJQUFJLEVBQUU7UUFDUixDQUFDLENBQUM7TUFDSjtNQUVBOUIsR0FBRyxDQUFDL0MsYUFBYSxDQUFDO1FBQ2hCQyxHQUFHLEVBQUUsT0FBTztRQUNaTSxTQUFTLEVBQUV1QyxhQUFLO1FBQ2hCNUMsUUFBUSxFQUFFLElBQUksQ0FBQ2lEO01BQ2pCLENBQUMsQ0FBQztNQUVGLElBQUksQ0FBQytFLFNBQVMsQ0FDWEUsTUFBTSxDQUFDcEgsS0FBSyxJQUFJQSxLQUFLLENBQUMsQ0FDdEJMLE9BQU8sQ0FBQ0ssS0FBSyxJQUFJLElBQUksQ0FBQ21DLFdBQVcsQ0FBQ2xDLFdBQVcsQ0FBQ0QsS0FBSyxDQUFDLENBQUM7SUFDeEQsQ0FBQyxDQUFDO0VBQ047RUFFQWdMLGFBQWFBLENBQUNoSCxLQUFLLEVBQUVILElBQUksRUFBRTtJQUN6QixJQUFJRyxLQUFLLEVBQUU7TUFDVEEsS0FBSyxDQUFDNkMsY0FBYyxDQUFDLENBQUM7SUFDeEI7SUFFQSxJQUFJLENBQUM2QyxLQUFLLEdBQUc3RixJQUFJO0lBQ2pCLElBQUksQ0FBQzFCLFdBQVcsQ0FBQzVDLFNBQVMsR0FBRyxFQUFFO0lBQy9CLElBQUksQ0FBQ3FELFFBQVEsQ0FBQyxDQUFDO0lBQ2YsSUFBSSxDQUFDbUgsb0JBQW9CLENBQUNsRyxJQUFJLENBQUM7RUFDakM7RUFFQWlILFNBQVNBLENBQUM5RyxLQUFLLEVBQUU7SUFDZkEsS0FBSyxDQUFDNkMsY0FBYyxDQUFDLENBQUM7SUFDdEIsTUFBTXlFLElBQUksR0FBR3RILEtBQUssQ0FBQ3VILElBQUksR0FBRzFNLEtBQUssQ0FBQ0MsSUFBSSxDQUFDa0YsS0FBSyxDQUFDdUgsSUFBSSxDQUFDLENBQUNDLElBQUksQ0FBQ0MsRUFBRSxJQUFJQSxFQUFFLENBQUNDLE9BQU8sS0FBSyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUN2SixXQUFXLENBQUN6RCxhQUFhLENBQUMsdUJBQXVCLENBQUM7SUFDNUksTUFBTWlOLE1BQU0sR0FBRzlNLEtBQUssQ0FBQ0MsSUFBSSxDQUFDd00sSUFBSSxDQUFDNUYsVUFBVSxDQUFDLENBQUMwQixNQUFNLENBQUNxRSxFQUFFLElBQUlBLEVBQUUsQ0FBQ0MsT0FBTyxLQUFLLE9BQU8sQ0FBQztJQUMvRSxNQUFNRSxNQUFNLEdBQUcvTSxLQUFLLENBQUNDLElBQUksQ0FBQ3dNLElBQUksQ0FBQzVGLFVBQVUsQ0FBQyxDQUN2QzBCLE1BQU0sQ0FBQ3FFLEVBQUUsSUFBSUEsRUFBRSxDQUFDQyxPQUFPLEtBQUssR0FBRyxDQUFDLENBQ2hDdEUsTUFBTSxDQUFDcUUsRUFBRSxJQUFJQSxFQUFFLENBQUNJLFNBQVMsS0FBSyxvQkFBb0IsQ0FBQztJQUV0RCxNQUFNaE0sS0FBSyxHQUFHOEwsTUFBTSxDQUFDRyxNQUFNLENBQUMsQ0FBQ0MsT0FBTyxFQUFFdkwsS0FBSyxLQUFLO01BQzlDLE1BQU1aLEdBQUcsR0FBR1ksS0FBSyxDQUFDd0wsWUFBWSxDQUFDLFFBQVEsQ0FBQztNQUN4QyxJQUFJcE0sR0FBRyxJQUFJWSxLQUFLLENBQUNYLEtBQUssRUFBRTtRQUN0QmtNLE9BQU8sQ0FBQ25NLEdBQUcsQ0FBQyxHQUFHWSxLQUFLLENBQUNYLEtBQUs7TUFDNUI7TUFDQSxPQUFPa00sT0FBTztJQUNoQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFTkgsTUFBTSxDQUFDak0sT0FBTyxDQUFDc00sS0FBSyxJQUFJQSxLQUFLLENBQUNqSixNQUFNLENBQUMsQ0FBQyxDQUFDO0lBRXZDLFFBQVEsSUFBSSxDQUFDMEcsS0FBSztNQUNoQixLQUFLLE9BQU87UUFDVixJQUFJLENBQUN3QyxNQUFNLENBQUNyTSxLQUFLLEVBQUV5TCxJQUFJLENBQUM7UUFDeEI7TUFDRixLQUFLLFVBQVU7UUFDYixJQUFJLENBQUNhLFNBQVMsQ0FBQ3RNLEtBQUssRUFBRXlMLElBQUksQ0FBQztRQUMzQjtNQUNGLEtBQUssU0FBUztRQUNaLElBQUksQ0FBQ2MsYUFBYSxDQUFDdk0sS0FBSyxDQUFDO1FBQ3pCO0lBQ0o7RUFDRjtFQUVBcU0sTUFBTUEsQ0FBQ3JNLEtBQUssRUFBRXlMLElBQUksRUFBRTtJQUNoQjVDLEtBQUssQ0FBQ08sSUFBSSxDQUFDLGtCQUFrQixFQUFFO01BQzdCN0ssSUFBSSxFQUFFaU8sSUFBSSxDQUFDQyxTQUFTLENBQUN6TSxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUMsQ0FBQyxDQUFDcUwsSUFBSSxDQUFDcUIsUUFBUSxJQUFJO01BQ2xCLElBQUlBLFFBQVEsQ0FBQ0MsTUFBTSxLQUFLLEdBQUcsRUFBRTtRQUN6QkQsUUFBUSxDQUFDRSxJQUFJLENBQUMsQ0FBQyxDQUFDdkIsSUFBSSxDQUFDd0IsS0FBSyxJQUFJO1VBQzVCLElBQUksQ0FBQzlDLE1BQU0sQ0FBQytDLEdBQUcsQ0FBQyxZQUFZLEVBQUVELEtBQUssQ0FBQ0EsS0FBSyxDQUFDO1VBQzFDLElBQUksQ0FBQ3pCLFdBQVcsQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBQ0MsSUFBSSxJQUFJO1lBQzlCLElBQUlBLElBQUksSUFBSUEsSUFBSSxDQUFDQyxJQUFJLEVBQUU7Y0FDckIsSUFBSUQsSUFBSSxDQUFDQyxJQUFJLENBQUN2SixRQUFRLEVBQUU7Z0JBQ3RCLElBQUksQ0FBQytILE1BQU0sQ0FBQytDLEdBQUcsQ0FBQyxRQUFRLEVBQUV4QixJQUFJLENBQUNDLElBQUksQ0FBQ3ZKLFFBQVEsQ0FBQztnQkFDN0MsSUFBSSxDQUFDK0gsTUFBTSxDQUFDK0MsR0FBRyxDQUFDLGVBQWUsRUFBRXhCLElBQUksQ0FBQ0MsSUFBSSxDQUFDdkosUUFBUSxDQUFDO2NBQ3REO2NBQ0EsSUFBSSxDQUFDOEgsS0FBSyxHQUFHd0IsSUFBSSxDQUFDQyxJQUFJO2NBQ3RCLElBQUksQ0FBQ0osYUFBYSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUM7Y0FDbkMsSUFBSSxDQUFDbEIsWUFBWSxDQUFDLENBQUM7WUFDckIsQ0FBQyxNQUFNO2NBQ0x3QixJQUFJLENBQUNzQixZQUFZLENBQUM3SyxHQUFHLENBQUMvQyxhQUFhLENBQUM7Z0JBQ2xDQyxHQUFHLEVBQUUsR0FBRztnQkFDUkksVUFBVSxFQUFFO2tCQUNWc0UsS0FBSyxFQUFFO2dCQUNULENBQUM7Z0JBQ0RwRSxTQUFTLEVBQUU7Y0FDYixDQUFDLENBQUMsRUFBRStMLElBQUksQ0FBQzVNLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1lBQ2xEO1VBQ0YsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDO01BQ04sQ0FBQyxNQUFNO1FBQ0w0TSxJQUFJLENBQUNzQixZQUFZLENBQUM3SyxHQUFHLENBQUMvQyxhQUFhLENBQUM7VUFDbENDLEdBQUcsRUFBRSxHQUFHO1VBQ1JJLFVBQVUsRUFBRTtZQUNWc0UsS0FBSyxFQUFFO1VBQ1QsQ0FBQztVQUNEcEUsU0FBUyxFQUFFO1FBQ2IsQ0FBQyxDQUFDLEVBQUUrTCxJQUFJLENBQUM1TSxhQUFhLENBQUMsdUJBQXVCLENBQUMsQ0FBQztNQUNsRDtJQUNGLENBQUMsQ0FBQztFQUNOO0VBRUF5TixTQUFTQSxDQUFDdE0sS0FBSyxFQUFFeUwsSUFBSSxFQUFFO0lBRW5CLElBQUdBLElBQUksQ0FBQzVNLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDc0gsT0FBTyxLQUFLLEtBQUssRUFBRTtNQUMvRHNGLElBQUksQ0FBQ3NCLFlBQVksQ0FBQzdLLEdBQUcsQ0FBQy9DLGFBQWEsQ0FBQztRQUNoQ0MsR0FBRyxFQUFFLEdBQUc7UUFDUkksVUFBVSxFQUFFO1VBQ1JzRSxLQUFLLEVBQUU7UUFDWCxDQUFDO1FBQ0RwRSxTQUFTLEVBQUU7TUFDZixDQUFDLENBQUMsRUFBRStMLElBQUksQ0FBQzVNLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO01BQ2hEO0lBQ0o7SUFFRmdLLEtBQUssQ0FBQ08sSUFBSSxDQUFDLG9CQUFvQixFQUFFO01BQy9CN0ssSUFBSSxFQUFFaU8sSUFBSSxDQUFDQyxTQUFTLENBQUN6TSxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUMsQ0FBQyxDQUFDcUwsSUFBSSxDQUFDcUIsUUFBUSxJQUFJQSxRQUFRLENBQUNFLElBQUksQ0FBQyxDQUFDLENBQUN2QixJQUFJLENBQUNDLElBQUksSUFBSTtNQUMvQyxJQUFJQSxJQUFJLElBQUlBLElBQUksQ0FBQzBCLElBQUksS0FBSyxHQUFHLEVBQUU7UUFDN0J2QixJQUFJLENBQUNzQixZQUFZLENBQUM3SyxHQUFHLENBQUMvQyxhQUFhLENBQUM7VUFDbENDLEdBQUcsRUFBRSxHQUFHO1VBQ1JJLFVBQVUsRUFBRTtZQUNWc0UsS0FBSyxFQUFFO1VBQ1QsQ0FBQztVQUNEcEUsU0FBUyxFQUFFNEwsSUFBSSxDQUFDMkI7UUFDbEIsQ0FBQyxDQUFDLEVBQUV4QixJQUFJLENBQUM1TSxhQUFhLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUNoRDtNQUNGLENBQUMsTUFBTTtRQUNMLElBQUksQ0FBQ3NNLGFBQWEsQ0FBQzdGLFNBQVMsRUFBRSxPQUFPLENBQUM7UUFDdEMsSUFBSStELEtBQUssQ0FBQztVQUFFaEUsTUFBTSxFQUFFLElBQUksQ0FBQy9DLFdBQVc7VUFBRTRDLElBQUksRUFBRW9HLElBQUksQ0FBQzJCO1FBQVEsQ0FBQyxDQUFDO01BQzdEO0lBQ0YsQ0FBQyxDQUFDLENBQUM7RUFDTDtFQUVBVixhQUFhQSxDQUFDdk0sS0FBSyxFQUFFO0lBQ25CNkksS0FBSyxDQUFDTyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7TUFDL0I4RCxPQUFPLEVBQUU7UUFDUEMsYUFBYSxFQUFFLElBQUksQ0FBQ3BELE1BQU0sQ0FBQ2QsR0FBRyxDQUFDLFlBQVk7TUFDN0MsQ0FBQztNQUNEMUssSUFBSSxFQUFFaU8sSUFBSSxDQUFDQyxTQUFTLENBQUMsSUFBSSxDQUFDMUMsTUFBTSxDQUFDZCxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RELENBQUMsQ0FBQyxDQUFDb0MsSUFBSSxDQUFDcUIsUUFBUSxJQUFJQSxRQUFRLENBQUNFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQ3ZCLElBQUksQ0FBQ0MsSUFBSSxJQUFJO01BQ2hELElBQUksQ0FBQ3ZCLE1BQU0sQ0FBQytDLEdBQUcsQ0FBQyxlQUFlLEVBQUV4QixJQUFJLENBQUN0SixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUM7TUFDckQsSUFBSXFILEtBQUssQ0FBQztRQUFFaEUsTUFBTSxFQUFFLElBQUksQ0FBQy9DLFdBQVc7UUFBRTRDLElBQUksRUFBRW9HLElBQUksQ0FBQzJCO01BQVEsQ0FBQyxDQUFDO0lBQzdELENBQUMsQ0FBQztFQUNKO0VBRUEsTUFBTTdCLFdBQVdBLENBQUEsRUFBRztJQUNsQixPQUFPLE1BQU12QyxLQUFLLENBQUNJLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRTtNQUMxQ2lFLE9BQU8sRUFBRTtRQUNQQyxhQUFhLEVBQUUsSUFBSSxDQUFDcEQsTUFBTSxDQUFDZCxHQUFHLENBQUMsWUFBWTtNQUM3QztJQUNGLENBQUMsQ0FBQyxDQUFDb0MsSUFBSSxDQUFDcUIsUUFBUSxJQUFJQSxRQUFRLENBQUNFLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDdEM7QUFDRixDOztBQ3RSQSxNQUFNNUwsbUJBQU0sR0FBRztBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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L3dpZGdldC8uL3NyYy9zdHlsZS5qcz81YjdiIiwid2VicGFjazovL3dpZGdldC8uL2NvbmZpZ3VyYXRpb24vY29uc3RhbnRzLmpzPzUzMGIiLCJ3ZWJwYWNrOi8vd2lkZ2V0Ly4vc3JjL2NvbXBvbmVudHMvdG9nZ2xlL3N0eWxlLmpzP2U0NDMiLCJ3ZWJwYWNrOi8vd2lkZ2V0Ly4vc3JjL2NvbXBvbmVudHMvaWNvbnMuanM/ZDc0MCIsIndlYnBhY2s6Ly93aWRnZXQvLi9zcmMvY29tcG9uZW50cy90b2dnbGUvaW5kZXguanM/NTgxYSIsIndlYnBhY2s6Ly93aWRnZXQvLi9zcmMvY29tcG9uZW50cy9vdmVybGF5L3N0eWxlLmpzPzc2MDIiLCJ3ZWJwYWNrOi8vd2lkZ2V0Ly4vc3JjL2NvbXBvbmVudHMvb3ZlcmxheS9jb21wb25lbnRzL2lucHV0L3N0eWxlLmpzPzY4ZDkiLCJ3ZWJwYWNrOi8vd2lkZ2V0Ly4vc3JjL2NvbXBvbmVudHMvb3ZlcmxheS9jb21wb25lbnRzL2lucHV0L2luZGV4LmpzPzYyNWEiLCJ3ZWJwYWNrOi8vd2lkZ2V0Ly4vc3JjL2NvbXBvbmVudHMvb3ZlcmxheS9jb21wb25lbnRzL2FjY291bnQvc3R5bGUuanM/NjZlNSIsIndlYnBhY2s6Ly93aWRnZXQvLi9zcmMvY29tcG9uZW50cy9mZXRjaC9pbmRleC5qcz9kN2MyIiwid2VicGFjazovL3dpZGdldC8uL3NyYy9jb21wb25lbnRzL292ZXJsYXkvY29tcG9uZW50cy9hbGVydC9zdHlsZS5qcz82MzE4Iiwid2VicGFjazovL3dpZGdldC8uL3NyYy9jb21wb25lbnRzL292ZXJsYXkvY29tcG9uZW50cy9hbGVydC9pbmRleC5qcz80NWVjIiwid2VicGFjazovL3dpZGdldC8uL3NyYy9jb21wb25lbnRzL292ZXJsYXkvY29tcG9uZW50cy9hY2NvdW50L2luZGV4LmpzPzkzYTkiLCJ3ZWJwYWNrOi8vd2lkZ2V0Ly4vc3JjL2NvbXBvbmVudHMvb3ZlcmxheS9jb21wb25lbnRzL3JlYWRlci9zdHlsZS5qcz81MTNlIiwid2VicGFjazovL3dpZGdldC8uL3NyYy9jb21wb25lbnRzL3RyYW5zbGF0aW9uL2luZGV4LmpzP2NhYWEiLCJ3ZWJwYWNrOi8vd2lkZ2V0Ly4vc3JjL2NvbXBvbmVudHMvb3ZlcmxheS9jb21wb25lbnRzL3JlYWRlci9pbmRleC5qcz85ZDI3Iiwid2VicGFjazovL3dpZGdldC8uL3NyYy9jb21wb25lbnRzL292ZXJsYXkvc2V0dGluZ3MuanM/ZDNkZCIsIndlYnBhY2s6Ly93aWRnZXQvLi9zcmMvY29tcG9uZW50cy9vdmVybGF5L3BlcnNvbmFzLmpzP2FlZDUiLCJ3ZWJwYWNrOi8vd2lkZ2V0Ly4vc3JjL2NvbXBvbmVudHMvb3ZlcmxheS9pbmRleC5qcz8wZjA4Iiwid2VicGFjazovL3dpZGdldC8uL25vZGVfbW9kdWxlcy9qcy1jb29raWUvZGlzdC9qcy5jb29raWUubWpzPzA2NTgiLCJ3ZWJwYWNrOi8vd2lkZ2V0Ly4vc3JjL3V0aWxzL3Blcm1pc3Npb25zLmpzP2JhZGUiLCJ3ZWJwYWNrOi8vd2lkZ2V0Ly4vc3JjL3V0aWxzL0Nvb2tpZVBlcm1pc3Npb25zLmpzPzMwNWMiLCJ3ZWJwYWNrOi8vd2lkZ2V0Ly4vc3JjL2NvbXBvbmVudHMvc3RvcmUvaW5kZXguanM/ZTY3MCIsIndlYnBhY2s6Ly93aWRnZXQvLi9zcmMvY29tcG9uZW50cy9vdmVybGF5L2NvbXBvbmVudHMvbWFzay9zdHlsZS5qcz8xOGI2Iiwid2VicGFjazovL3dpZGdldC8uL3NyYy9jb21wb25lbnRzL292ZXJsYXkvY29tcG9uZW50cy9tYXNrL2luZGV4LmpzPzE4ZjUiLCJ3ZWJwYWNrOi8vd2lkZ2V0Ly4vc3JjL2FwcC5qcz8xMTEyIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IFJPT1QgPSBkb2N1bWVudC5ib2R5IHx8IGRvY3VtZW50IHx8IHdpbmRvdztcblxuY29uc3QgZG9tVXRpbHMgPSB7XG4gIHNlbGVjdEVsZW1lbnQ6IChzZWxlY3Rvciwgbm9kZSkgPT4ge1xuICAgIHJldHVybiAobm9kZSB8fCBST09UKS5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcbiAgfSxcbiAgc2VsZWN0RWxlbWVudHM6IChzZWxlY3RvcnMsIG5vZGUpID0+IHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSgobm9kZSB8fCBST09UKS5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9ycykpO1xuICB9LFxuICBjcmVhdGVFbGVtZW50OiAoe1xuICAgIHRhZyxcbiAgICBhcHBlbmRUbyxcbiAgICBwcmVwZW5kVG8sXG4gICAgY2hpbGRyZW4gPSBbXSxcbiAgICBhdHRyaWJ1dGVzID0ge30sXG4gICAgZXZlbnRzID0ge30sXG4gICAgaW5uZXJIVE1MID0gbnVsbCxcbiAgfSkgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7XG5cbiAgICBPYmplY3QuZW50cmllcyhhdHRyaWJ1dGVzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGVsZW1lbnRba2V5XSA9IHZhbHVlO1xuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZW50cmllcyhldmVudHMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGtleSwgdmFsdWUpO1xuICAgIH0pO1xuXG4gICAgY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiBlbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkKSk7XG5cbiAgICBpZiAoYXBwZW5kVG8pIHtcbiAgICAgIGFwcGVuZFRvLmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIGlmIChwcmVwZW5kVG8pIHtcbiAgICAgIHByZXBlbmRUby5wcmVwZW5kKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIGlmIChpbm5lckhUTUwpIHtcbiAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gaW5uZXJIVE1MO1xuICAgIH1cblxuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBkb21VdGlscztcbiIsImNvbnN0IGdsb2JhbFN0eWxlcyA9IGBcbi5wcm9ncmVzcyB7XG4gICAgd2lkdGg6IDIwcHg7XG4gICAgaGVpZ2h0OiAyMHB4O1xuICAgIG1pbi13aWR0aDogMjBweDtcbiAgICBtaW4taGVpZ2h0OiAyMHB4O1xuICAgIGNvbG9yOiAjZmZmO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgbGluZS1oZWlnaHQ6IDIwMHB4O1xuICAgIGxlZnQ6IC0xMHB4O1xuICAgIHRvcDogLTEwcHg7XG4gICAgLypiYWNrZ3JvdW5kOiAjZjZmNmY2OyovXG59XG5cbi5wcm9ncmVzcyAub3ZlcmxheSB7XG4gICAgd2lkdGg6IDUwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHotaW5kZXg6IDE7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2Y2ZjZmNjtcbn1cblxuLnByb2dyZXNzIC5sZWZ0LCAucHJvZ3Jlc3MgLnJpZ2h0IHtcbiAgICB3aWR0aDogNTAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgYm9yZGVyOiAxMHB4IHNvbGlkICMxOTE4MjQ7XG4gICAgYm9yZGVyLXJhZGl1czogMTAwcHggMHB4IDBweCAxMDBweDtcbiAgICBib3JkZXItcmlnaHQ6IDA7XG4gICAgdHJhbnNmb3JtLW9yaWdpbjogcmlnaHQ7XG59XG5cbi5wcm9ncmVzcyAubGVmdCB7YW5pbWF0aW9uOiBsb2FkMSAuMDVzIGxpbmVhciBmb3J3YXJkczt9XG5cbi5wcm9ncmVzczpudGgtb2YtdHlwZSgyKSAucmlnaHQsIC5wcm9ncmVzczpudGgtb2YtdHlwZSgzKSAucmlnaHQge2FuaW1hdGlvbjogbG9hZDIgLjI1cyBsaW5lYXIgZm9yd2FyZHMgLjA1czt9XG5cbi5wcm9ncmVzczpsYXN0LW9mLXR5cGUgLnJpZ2h0LCAucHJvZ3Jlc3M6Zmlyc3Qtb2YtdHlwZSAucmlnaHQge2FuaW1hdGlvbjogbG9hZDMgLjI1cyBsaW5lYXIgZm9yd2FyZHMgLjA1czt9XG5cbkBrZXlmcmFtZXMgbG9hZDEge1xuICAgIDAlIHt0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTt9XG5cbiAgICAxMDAlIHt0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO31cbn1cblxuQGtleWZyYW1lcyBsb2FkMiB7XG4gICAgMCUge3otaW5kZXg6IDEwMDt0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO31cblxuICAgIDEwMCUge3otaW5kZXg6IDEwMDt0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpO31cbn1cblxuQGtleWZyYW1lcyBsb2FkMyB7XG4gICAgMCUge3otaW5kZXg6IDEwMDt0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO31cblxuICAgIDEwMCUge1xuICAgICAgICB6LWluZGV4OiAxMDA7dHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTt9XG59XG5gO1xuZXhwb3J0IGRlZmF1bHQgZ2xvYmFsU3R5bGVzO1xuIiwiZXhwb3J0IGRlZmF1bHQge1xuICBjbGFzc2VzOiB7XG4gICAgd3JhcHBlcjogJ19fcGFnZWQtdG9nZ2xlJyxcbiAgICB0b2dnbGU6ICdfX3BhZ2VkLXRvZ2dsZScsXG4gICAgb3ZlcmxheTogJ19fcGFnZWQtb3ZlcmxheScsXG4gICAgaW5wdXQ6ICdfX3BhZ2VkLWlucHV0JyxcbiAgICBhY2NvdW50OiAnX19wYWdlZC1hY2NvdW50JyxcbiAgICBhbGVydDogJ19fcGFnZWQtYWxlcnQnLFxuICAgIG1hc2s6ICdfX3BhZ2VkLXJlYWRpbmctbWFzaycsXG4gICAgcmVhZGVyOiAnX19wYWdlZC1zY3JlZW5fcmVhZGVyJ1xuICB9LFxufTtcbiIsImNvbnN0IHN0eWxlcyA9IGBcbiAgOmhvc3Qge1xuICAgIHdpZHRoOiA1MHB4O1xuICAgIGhlaWdodDogZml0LWNvbnRlbnQ7XG4gICAgYmFja2dyb3VuZDogIzIyMkQzOTtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgLy8gdHJhbnNpdGlvbjogYWxsIDIwMG1zIGVhc2UtaW47XG4gICAgei1pbmRleDogOTk5O1xuICAgIHBhZGRpbmc6IDhweCAhaW1wb3J0YW50O1xuICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgd2lkdGg6IGZpdC1jb250ZW50O1xuICB9XG5cbiAgOmhvc3QoLnJpZ2h0KSB7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAwcHg7XG4gICAgYm90dG9tOiAwO1xuICAgIG1hcmdpbjogYXV0byAhaW1wb3J0YW50O1xuICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDVweDtcbiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA1cHg7XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIGJveC1zaGFkb3c6IC0zcHggMHB4IDE2cHggMHB4IHJnYmEoMCwwLDAsMC4xNSk7XG4gICAgLXdlYmtpdC1ib3gtc2hhZG93OiAtM3B4IDBweCAxNnB4IDBweCByZ2JhKDAsMCwwLDAuMTUpO1xuICAgIC1tb3otYm94LXNoYWRvdzogLTNweCAwcHggMTZweCAwcHggcmdiYSgwLDAsMCwwLjE1KTtcbiAgfVxuICA6aG9zdCgucmlnaHQub3Blbikge1xuICAgIC8vIHJpZ2h0OiAzMDBweDtcbiAgfVxuICA6aG9zdCgucmlnaHQpIC5fX3BhZ2VkX3RvZ2dsZV9pY29uIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBmb250LXNpemU6IDE4cHg7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIHBhZGRpbmc6IDNweDtcbiAgICBib3JkZXI6IDJweCBzb2xpZCB3aGl0ZTtcbiAgICBtYXgtaGVpZ2h0OiAyNHB4O1xuICAgIG1heC13aWR0aDogMjRweDtcbiAgICBtYXJnaW4tbGVmdDogM3B4O1xuICB9XG4gIDpob3N0KC5yaWdodCkgLl9fcGFnZWRfdG9nZ2xlX2ljb24gc3ZnIHtcbiAgICBtYXJnaW46IDA7XG4gIH1cbiAgOmhvc3QoLnJpZ2h0KSBzcGFuLl9fcGFnZWRfdHJ5aXQge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcbiAgfVxuICA6aG9zdCgucmlnaHQpIHNwYW4uX19wYWdlZF90cnlpdCBoMSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGVaKC05MGRlZyk7XG4gICAgbGVmdDogLTEwMHB4O1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICBjb2xvcjogIzIyMkQzOTtcbiAgICB0b3A6IDEwMHB4O1xuICAgIGZvbnQtc2l6ZTogMjZweDtcbiAgICB0ZXh0LXNoYWRvdzogNHB4IDRweCA1cHggMHB4IHJnYmEoMCwwLDAsMC43NSk7XG4gIH1cbiAgOmhvc3QoLnJpZ2h0KSBzcGFuID4gc3ZnIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDZweDtcbiAgfVxuICA6aG9zdCgucmlnaHQpOmhvdmVyIHtcbiAgICBib3gtc2hhZG93OiAtM3B4IDBweCAxNnB4IDBweCByZ2JhKDAsMCwwLDAuMzUpO1xuICAgIC13ZWJraXQtYm94LXNoYWRvdzogLTNweCAwcHggMTZweCAwcHggcmdiYSgwLDAsMCwwLjM1KTtcbiAgICAtbW96LWJveC1zaGFkb3c6IC0zcHggMHB4IDE2cHggMHB4IHJnYmEoMCwwLDAsMC4zNSk7XG4gIH1cblxuICA6aG9zdCgubGVmdCkge1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBtYXJnaW46IGF1dG8gIWltcG9ydGFudDtcbiAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNXB4O1xuICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA1cHg7XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIGJveC1zaGFkb3c6IC0zcHggMHB4IDE2cHggMHB4IHJnYmEoMCwwLDAsMC4xNSk7XG4gICAgLXdlYmtpdC1ib3gtc2hhZG93OiAtM3B4IDBweCAxNnB4IDBweCByZ2JhKDAsMCwwLDAuMTUpO1xuICAgIC1tb3otYm94LXNoYWRvdzogLTNweCAwcHggMTZweCAwcHggcmdiYSgwLDAsMCwwLjE1KTtcbiAgfVxuICA6aG9zdCgubGVmdC5vcGVuKSB7XG4gICAgLy8gbGVmdDogMzAwcHg7XG4gIH1cbiAgOmhvc3QoLmxlZnQpIC5fX3BhZ2VkX3RvZ2dsZV9pY29uIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBmb250LXNpemU6IDE4cHg7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIHBhZGRpbmc6IDNweDtcbiAgICBib3JkZXI6IDJweCBzb2xpZCB3aGl0ZTtcbiAgICBtYXgtaGVpZ2h0OiAyNHB4O1xuICAgIG1heC13aWR0aDogMjRweDtcbiAgICBtYXJnaW4tbGVmdDogM3B4O1xuICB9XG4gIDpob3N0KC5sZWZ0KSAuX19wYWdlZF90b2dnbGVfaWNvbiBzdmcge1xuICAgIG1hcmdpbjogMDtcbiAgfVxuICA6aG9zdCgubGVmdCkgc3Bhbi5fX3BhZ2VkX3RyeWl0IHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7XG4gIH1cbiAgOmhvc3QoLmxlZnQpIHNwYW4uX19wYWdlZF90cnlpdCBoMSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGVaKC05MGRlZyk7XG4gICAgbGVmdDogLTEwMHB4O1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICBjb2xvcjogIzIyMkQzOTtcbiAgICB0b3A6IDEwMHB4O1xuICAgIGZvbnQtc2l6ZTogMjZweDtcbiAgICB0ZXh0LXNoYWRvdzogNHB4IDRweCA1cHggMHB4IHJnYmEoMCwwLDAsMC43NSk7XG4gIH1cbiAgOmhvc3QoLmxlZnQpIHNwYW4gPiBzdmcge1xuICAgIG1hcmdpbi1yaWdodDogNnB4O1xuICB9XG4gIDpob3N0KC5sZWZ0KTpob3ZlciB7XG4gICAgYm94LXNoYWRvdzogLTNweCAwcHggMTZweCAwcHggcmdiYSgwLDAsMCwwLjM1KTtcbiAgICAtd2Via2l0LWJveC1zaGFkb3c6IC0zcHggMHB4IDE2cHggMHB4IHJnYmEoMCwwLDAsMC4zNSk7XG4gICAgLW1vei1ib3gtc2hhZG93OiAtM3B4IDBweCAxNnB4IDBweCByZ2JhKDAsMCwwLDAuMzUpO1xuICB9XG5gO1xuZXhwb3J0IGRlZmF1bHQgc3R5bGVzO1xuIiwiY29uc3QgaWNvbnMgPSB7XG4gIGV5ZTogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGhlaWdodD1cIjI0cHhcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgd2lkdGg9XCIyNHB4XCIgZmlsbD1cIiNmZmZmZmZcIj48cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiIGZpbGw9XCJub25lXCIvPjxwYXRoIGQ9XCJNMTIgNC41QzcgNC41IDIuNzMgNy42MSAxIDEyYzEuNzMgNC4zOSA2IDcuNSAxMSA3LjVzOS4yNy0zLjExIDExLTcuNWMtMS43My00LjM5LTYtNy41LTExLTcuNXpNMTIgMTdjLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNS0yLjI0IDUtNSA1em0wLThjLTEuNjYgMC0zIDEuMzQtMyAzczEuMzQgMyAzIDMgMy0xLjM0IDMtMy0xLjM0LTMtMy0zelwiLz48L3N2Zz5gLFxuICByZXZlcnQ6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBoZWlnaHQ9XCIyNHB4XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHdpZHRoPVwiMjRweFwiIGZpbGw9XCJ2YXIoLS1wYWdlZC1jb2xvcilcIj48cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiIGZpbGw9XCJub25lXCIvPjxwYXRoIGQ9XCJNMTIgNVYxTDcgNmw1IDVWN2MzLjMxIDAgNiAyLjY5IDYgNnMtMi42OSA2LTYgNi02LTIuNjktNi02SDRjMCA0LjQyIDMuNTggOCA4IDhzOC0zLjU4IDgtOC0zLjU4LTgtOC04elwiLz48L3N2Zz5gLFxuICBjYW5jZWw6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBoZWlnaHQ9XCIyNHB4XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHdpZHRoPVwiMjRweFwiIGZpbGw9XCJ2YXIoLS1wYWdlZC1jb2xvcilcIj48cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiIGZpbGw9XCJub25lXCIvPjxwYXRoIGQ9XCJNMTIgMkM2LjQ3IDIgMiA2LjQ3IDIgMTJzNC40NyAxMCAxMCAxMCAxMC00LjQ3IDEwLTEwUzE3LjUzIDIgMTIgMnptNSAxMy41OUwxNS41OSAxNyAxMiAxMy40MSA4LjQxIDE3IDcgMTUuNTkgMTAuNTkgMTIgNyA4LjQxIDguNDEgNyAxMiAxMC41OSAxNS41OSA3IDE3IDguNDEgMTMuNDEgMTIgMTcgMTUuNTl6XCIvPjwvc3ZnPmAsXG4gIG1pbnVzOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgaGVpZ2h0PVwiMjBweFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB3aWR0aD1cIjIwcHhcIiBmaWxsPVwidmFyKC0tcGFnZWQtY29sb3IpXCI+PHBhdGggZD1cIk0wIDBoMjR2MjRIMHpcIiBmaWxsPVwibm9uZVwiLz48cGF0aCBkPVwiTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTUgMTFIN3YtMmgxMHYyelwiLz48L3N2Zz5gLFxuICBwbHVzOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgaGVpZ2h0PVwiMjBweFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB3aWR0aD1cIjIwcHhcIiBmaWxsPVwidmFyKC0tcGFnZWQtY29sb3IpXCI+PHBhdGggZD1cIk0wIDBoMjR2MjRIMHpcIiBmaWxsPVwibm9uZVwiLz48cGF0aCBkPVwiTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTUgMTFoLTR2NGgtMnYtNEg3di0yaDRWN2gydjRoNHYyelwiLz48L3N2Zz5gLFxuICBwcm9maWxlOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgaGVpZ2h0PVwiMjRweFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB3aWR0aD1cIjI0cHhcIiBmaWxsPVwiIzIyMkQzOVwiPjxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCIgZmlsbD1cIm5vbmVcIi8+PHBhdGggZD1cIk0xMiA1LjljMS4xNiAwIDIuMS45NCAyLjEgMi4xcy0uOTQgMi4xLTIuMSAyLjFTOS45IDkuMTYgOS45IDhzLjk0LTIuMSAyLjEtMi4xbTAgOWMyLjk3IDAgNi4xIDEuNDYgNi4xIDIuMXYxLjFINS45VjE3YzAtLjY0IDMuMTMtMi4xIDYuMS0yLjFNMTIgNEM5Ljc5IDQgOCA1Ljc5IDggOHMxLjc5IDQgNCA0IDQtMS43OSA0LTQtMS43OS00LTQtNHptMCA5Yy0yLjY3IDAtOCAxLjM0LTggNHYzaDE2di0zYzAtMi42Ni01LjMzLTQtOC00elwiLz48L3N2Zz5gLFxuICBhcnJvdzogYDxzdmdcbiAgICB2ZXJzaW9uPVwiMS4xXCJcbiAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIlxuICAgIHZpZXdCb3g9XCIwIDAgMTgzLjcgMTc4LjFcIlxuICAgIHN0eWxlPVwiZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAxODMuNyAxNzguMTt3aWR0aDogNjBweDtoZWlnaHQ6IDYwcHg7bGVmdDogLTQwcHg7dG9wOiA3MHB4O3Bvc2l0aW9uOiBmaXhlZDt0cmFuc2Zvcm06IHJvdGF0ZVooLTkwZGVnKVwiXG4gICAgeG1sOnNwYWNlPVwicHJlc2VydmVcIj5cbiAgICA8cGF0aCBmaWxsPVwiIzIyMkQzOVwiIGQ9XCJNMTI5LjIsMTczLjhjLTAuOCwwLTEuNi0wLjEtMi40LTAuM2MtMy44LTAuOC03LTMuNS05LjEtNi43Yy0yLjItMy40LTMuMi03LjctMi4xLTExLjdcbiAgICAgIGMxLjEtMy45LDQuNi03LjIsOC43LTcuNWM0LjEtMC4zLDguMiwzLjEsOC4zLDcuMWM4LjQtOC41LDE2LjgtMTcuMSwyNS4yLTI1LjZjMS43LTEuOCwzLjUtMy43LDQtNi4xYzAuOC00LjEtMi4zLTcuOC01LjMtMTAuN1xuICAgICAgbC0xNS44LTE2Yy0xLjYtMS42LTMuOC0yLjQtNi0xLjljLTQsMC45LTQuMyw0LjktNC4zLDguMmMwLDYuMiwwLDEyLjUsMCwxOC43YzAsMS43LDAsMy40LTAuOCw0LjljLTEuNCwyLjUtNC43LDMuMi03LjUsM1xuICAgICAgYy0zMy4xLTIuMi02NS43LTExLjMtODguNS0zN0M3LjUsNjIuOCw0LjgsMjQuOCw0LjgsMTBjMC0zLjQsMi45LTYsNi4yLTUuN0wyMiw1LjJsLTguNS0wLjdsMy4xLDAuMmMzLDAuMiw1LjMsMi43LDUuMyw1LjdcbiAgICAgIGMwLjEsMTIuNywyLjYsNDUuOSwyNC41LDcwLjdjMTQuNCwxNi4yLDM0LjcsMjYuMSw2MC41LDI5LjZjMy40LDAuNSw2LjUtMi4yLDYuNS01LjZjMC03LjYtMi4xLTE4LjMsMS4zLTI1LjJcbiAgICAgIGMxLjktMy43LDUuNi02LjMsOS43LTcuM2MxMS4yLTMsMjEuMyw0LjQsMjguNSwxMi4yYzcsNy42LDE1LjcsMTMuNywyMS4zLDIyLjVjNC4yLDYuNyw2LjIsMTUuMiwzLjUsMjIuNlxuICAgICAgYy0xLjksNS4xLTUuOCw5LjItOS43LDEzLjFjLTYuNSw2LjYtMTMsMTMuMi0xOS41LDE5LjhDMTQzLjEsMTY4LjMsMTM2LjUsMTc0LjEsMTI5LjIsMTczLjh6IE0xMzIuOSwxNTkuMUwxMzIuOSwxNTkuMUwxMzIuOSwxNTkuMVxuICAgICAgelwiLz48L3N2Zz5gLFxuICBwYWdlZDogYDxzdmcgdmVyc2lvbj1cIjEuMVwiIGlkPVwiTGF5ZXJfMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIiB4PVwiMHB4XCIgeT1cIjBweFwiXG5cdCB2aWV3Qm94PVwiMCAwIDI2Ni44IDM3MVwiIHN0eWxlPVwiZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAyNjYuOCAzNzE7d2lkdGg6IDI0cHg7aGVpZ2h0OiAyNHB4XCIgeG1sOnNwYWNlPVwicHJlc2VydmVcIj5cbjxzdHlsZSB0eXBlPVwidGV4dC9jc3NcIj5cblx0LnN0MHtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjAuNztzdHJva2U6I2ZmZmZmZjtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9XG5cdC5zdDF7ZmlsbDojZmZmZmZmO3N0cm9rZTojZmZmZmZmO3N0cm9rZS1taXRlcmxpbWl0OjEwO31cbjwvc3R5bGU+XG48cGF0aCBjbGFzcz1cInN0MFwiIGQ9XCJNMTU1LjksNzMuOGMtMTkuMSwwLTM4LDUuMi01NC40LDE1bC0xLDAuNmwwLDBjLTMuMiwxLjktNi4zLDQuMS05LjIsNi4zTDIuNiwxNTUuOWwzMC4yLDI4LjVsODEuNS01NS40bDEtMC43XG5cdGMyLjEtMS43LDQuNC0zLjIsNi43LTQuNmwwLjEtMC4xYzEwLjItNi4xLDIyLTkuMywzMy45LTkuM2MzNy41LDAsNjgsMzEuNCw2OCw3MGMwLDM4LjYtMzAuNSw3MC02OCw3MGMtMTEuOSwwLTIzLjUtMy4yLTMzLjgtOS4yXG5cdGwtMC4yLTAuMWMtMi4zLTEuNC00LjYtMi45LTYuNy00LjZsLTAuNS0wLjRsLTgyLTU1LjdMMi42LDIxM2w4OC43LDYwLjNjMy4zLDIuNSw2LjcsNC44LDEwLjIsNi45bDAuMywwLjJcblx0YzE2LjQsOS43LDM1LjEsMTQuOCw1NC4xLDE0LjhjNTkuNywwLDEwOC4zLTQ5LjcsMTA4LjMtMTEwLjdTMjE1LjcsNzMuOCwxNTUuOSw3My44elwiLz5cbjxwYXRoIGNsYXNzPVwic3QwXCIgZD1cIk0yMzQuOSwxMDguOWwtODUuMy04Mi4xbC0yOC43LDI4LjdsODUuMyw4Mi4xYzAsMCwzOS4yLDQwLjYsMSw5My41bC04Ni45LDgzLjdsMjguNiwyOC42bDg2LjktODMuN1xuXHRDMjM1LjgsMjU5LjYsMzAxLDE4Ny42LDIzNC45LDEwOC45elwiLz5cbjxjaXJjbGUgY2xhc3M9XCJzdDFcIiBjeD1cIjE1My4zXCIgY3k9XCIxODQuNVwiIHI9XCIzMi45XCIvPlxuPC9zdmc+YCxcbiAgYWNjZXNzaWJpbGl0eTogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGhlaWdodD1cIjI0cHhcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgd2lkdGg9XCIyNHB4XCIgZmlsbD1cIiNmZmZmZmZcIj48cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiIGZpbGw9XCJub25lXCIvPjxwYXRoIGQ9XCJNMjAuNSA2Yy0yLjYxLjctNS42NyAxLTguNSAxcy01Ljg5LS4zLTguNS0xTDMgOGMxLjg2LjUgNCAuODMgNiAxdjEzaDJ2LTZoMnY2aDJWOWMyLS4xNyA0LjE0LS41IDYtMWwtLjUtMnpNMTIgNmMxLjEgMCAyLS45IDItMnMtLjktMi0yLTItMiAuOS0yIDIgLjkgMiAyIDJ6XCIvPjwvc3ZnPmAsXG4gIGxvZ29CbGFjazogYDxzdmcgdmVyc2lvbj1cIjEuMVwiIGlkPVwiTGF5ZXJfMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIiB4PVwiMHB4XCIgeT1cIjBweFwiXG4gICAgIHZpZXdCb3g9XCIwIDAgMjE4LjkgMTUwLjhcIiB3aWR0aD1cIjgwcHhcIiBoZWlnaHQ9XCI0MHB4XCIgc3R5bGU9XCJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDIxOC45IDE1MC44O1wiIHhtbDpzcGFjZT1cInByZXNlcnZlXCI+XG4gIDxzdHlsZSB0eXBlPVwidGV4dC9jc3NcIj5cbiAgICAuc3Qwe2ZpbGw6dmFyKC0tcGFnZWQtY29sb3IpO31cbiAgPC9zdHlsZT5cbiAgPHBhdGggZmlsbD1cInZhcigtLXBhZ2VkLWNvbG9yKVwiIGQ9XCJNMjkuOCwxMDIuN2MtMC41LDIuOC0yLjUsNi44LTUuOSw5LjdjLTIuNiwyLjItNi4zLDMuMS0xMC4yLDMuOWMtMiwwLjUtMi45LDAuNS00LjYsMC4zYy0wLjItMC4yLTAuNS0wLjItMC42LTAuMlxuICAgIGMtMC4yLDEuOS0wLjIsNC42LDAsNS4zTDgsMTMwLjV2MS41YzAsMC4yLDAuMiw2LjUsMC4yLDYuOGMwLDEuNSwwLDEuNy0wLjIsMy42YzAsMiwwLjIsNi4yLDAuMiw2LjJjLTAuMiwzLjEtNy40LDMuNC03LjQsMC4zdi0xMFxuICAgIGMwLTEuMiwwLTQuMiwwLjItNC44di0yLjVjMC0wLjMsMC4yLTUuMywwLjItNS42YzAtNS40LTAuMi02LjUtMC4zLTkuNHYtMS4xYzAtMC4yLTAuMi00LjktMC4yLTUuM3YtMC44bC0wLjMtNC4zdi0xLjlcbiAgICBjMC0xLjQsMC0zLjYsMC4yLTQuOGMwLjItMS40LDAuMy0zLjYsMC4yLTQuOGwtMC4yLTUuMWMwLTAuNi0wLjItNS42LTAuMi02VjcwLjNjMC0xLjIsMC0yLjgtMC4yLTMuOXYtNC41YzAtMC41LDAtMS45LDAuMi0yLjhcbiAgICBjMC4yLTAuOSwwLjMtMi41LDAuMy00YzAuNi0yLjUsMi45LTMuNyw0LjktMy4yYzEuMSwwLDMuMS0wLjMsMy43LTAuNmwwLjUtMC4yYzIuMi0wLjUsNC41LTAuOCw4LjMsMC4zYzYuNSwyLDkuOSw4LjUsMTEuNCwxMlxuICAgIGMwLDAuMiwwLjIsMC41LDAuMywwLjZsMC44LDEuN2MwLjgsMS45LDEuNSw0LjIsMS43LDZjMC42LDQuNiwxLjEsMTAsMS4xLDEzLjRDMzMuNCw5MSwzMiw5Ny40LDI5LjgsMTAyLjd6IE03LjksNzhcbiAgICBjLTAuMiwyLTAuMiwzLjcsMCw0LjN2My40YzAsMC4zLDAuMiwzLjcsMC4yLDR2My43Yy0wLjIsMC44LDAsNC44LDAuMiw2LjhjMC4yLDEuMiwwLjIsMy4yLDAuMiw0LjN2My4xYzAsMC41LTAuMiwwLjksMCwxLjJcbiAgICBjMC4zLDAsMS4xLDAsMS40LDAuMmMwLjIsMCwwLjMsMC4yLDAuNiwwLjJjMC41LDAuMiwwLjksMC4zLDIuNS0wLjJjMi0wLjMsNC4zLTAuOSw1LjYtMS45YzEuNC0xLjIsMy40LTQuOCw0LTcuMVxuICAgIGMyLjYtNi42LDMuNy0xMS45LDMuNy0xNi41YzAtNC44LTEuNS0xMS0zLjItMTUuOGMtMS40LTQuNi0zLjctOC41LTYtOC44Yy0zLjktMC44LTQuNi0wLjYtNy40LDBjLTAuNSwwLjMtMS4yLDAuMy0xLjIsMC4zXG4gICAgQzgsNjEuOCw3LjksNjYuMiw4LDY3LjhDOC4yLDY5LjksOCw3NS41LDcuOSw3OHpcIi8+XG4gIDxwYXRoIGNsYXNzPVwic3QwXCIgZD1cIk01NC4yLDc2LjhjMC41LDAsMC44LTAuMiwxLjEtMC4yaDAuOWMxLjEtMC4yLDIuMy0wLjIsMy40LDB2LTUuMWMtMC4xLTAuNS0wLjEtMSwwLTEuNVxuICAgIGMtMC4xLTAuOC0wLjItMS41LTAuMi0yLjNWNjZjLTAuMS0xLjUtMC40LTMtMC44LTQuNWwtMC4yLTAuNmMtMC4yLTAuOS0wLjctMS44LTEuNC0yLjVjLTEuMi0wLjItMi41LTAuMy0zLjctMC4zXG4gICAgYy0xLjQsMC4yLTQuNiwyLjMtNi4zLDMuOWwtMS4yLDEuNWMtMC45LDAuOC0xLjUsMS44LTIsMi45Yy0xLjcsMi4zLTYuMy0xLjYtNS43LTQuM2MwLTAuMiwwLjMtMC41LDAuMy0wLjZjMC40LTEsMS0xLjksMS43LTIuOFxuICAgIGwwLjMtMC4zYzAuNC0wLjksMC45LTEuNywxLjUtMi41bDAuNi0wLjhjNC44LTMuOSw3LjYtNC4yLDExLjYtNC4zaDEuNmMyLjQsMC4xLDQuNywwLjksNi41LDIuNWwxLjcsMi40bDAuOSwyLjNsMC41LDEuNGwwLjMsMS4yXG4gICAgYzAsMC4yLDAuMiwwLjUsMC4yLDAuNmMwLjIsMC43LDAuNCwxLjQsMC41LDIuMmMwLjIsMSwwLjQsMS45LDAuNSwyLjl2MTIuNWMwLjIsMi4zLDAsNy42LTAuMiwxMC4zYzAsMS4zLDAsMi42LDAuMiwzLjl2OC4yXG4gICAgYy0wLjIsMi4yLTAuMiw0LjQsMCw2LjZ2Mi4yYzAsMC4zLDAuMiwyLDAuMiwyLjJjMCwyLTAuOSwyLjMtMi4zLDIuNmMtMi4zLDAuNi0zLjEsMC44LTQuOSwxLjJjLTEuNSwwLjUtMy4yLDAuOC00LjgsMC44XG4gICAgYy04LDAtMTcuOS01LjctMTcuOS0xOUMzNi45LDg0LjgsNDQuOSw3Ny43LDU0LjIsNzYuOHogTTU4LjgsODQuMmMtMS4yLTAuMi0yLjQtMC4yLTMuNiwwYy01LjcsMC45LTEwLjgsNC41LTEwLjgsMTQuMlxuICAgIGMwLDguNSw2LjUsMTEsMTAuNSwxMWMyLjMsMCwzLjctMC41LDQuNS0xLjF2LTIuMmMtMC4xLTEuMS0wLjItMi4zLTAuMi0zLjRjMC0wLjItMC4yLTItMC4yLTIuM1Y5OWwwLjItNy45di0wLjZcbiAgICBjMC0wLjUsMC4yLTEuMiwwLjItMi4ydi00LjJINTguOHpcIi8+XG4gIDxwYXRoIGNsYXNzPVwic3QwXCIgZD1cIk0xMDUuMiw1MS41YzEuOSwwLjUsMy45LDAuOSw0LjIsMi45bDAuMiw1Ljd2OC4zYy0wLjIsMS42LTAuMywzLjItMC4yLDQuOGwwLjIsNS42djE0LjdsMC4xLDMuNHYyXG4gICAgYzAuMSwxLjIsMCwyLjQtMC4xLDMuNnYwLjZsLTAuMywzLjZ2NC4yYzAsMC41LDAuMSw1LjYsMC4xLDZjMC4yLDQuNiwwLjIsNy45LDAuMiw5LjZjMCwwLjMtMC4yLDUuOS0wLjIsNi4yXG4gICAgYy0wLjEsMC43LTAuMiwxLjQtMC4xLDIuMmMwLjEsMS45LTAuMSwzLjctMC41LDUuNmMtMiw2LjYtMTAsMTEuNi0xNy4zLDEwLjRjLTQtMC41LTcuOS0zLjYtOS45LTYuOWMtMS42LTIuNiw0LTYuOCw1LjYtNC44XG4gICAgYzEuNSwyLjIsMi42LDMuMiw0LDMuOWMwLjYsMC4yLDIuMiwwLjksMy40LDAuOGMyLjMtMC4xLDQuNi0xLjUsNS40LTMuMWwxLjEtMi4yYzAuOC0xLjksMC45LTkuOSwwLjktMTYuMmMwLTIuMiwwLTQuMi0wLjItNS43XG4gICAgYy0xLjQsMC44LTIuOCwwLjYtNi4yLDAuNmMtOS4xLDAtMTIuNS01LjQtMTMuNi04bC0wLjktMi4zYy0xLjItMi4zLTIuMi00LjgtMi45LTcuM2wtMC42LTUuMWMtMC42LTQuMS0wLjktOC4zLTAuOS0xMi41XG4gICAgYzAuMS01LjksMS4zLTExLjgsMy42LTE3LjNjMS4yLTIuOSw1LjEtNy42LDcuNi05LjdjMy4yLTIuMyw2LjMtMy45LDEwLjctMy45aDJjMS40LTAuMSwyLjgsMC4xLDQuMiwwLjVcbiAgICBDMTA0LjcsNTEuMywxMDQuOCw1MS41LDEwNS4yLDUxLjV6IE0xMDEuMywxMDguNnYtMy4xYzAuMi0wLjgsMC41LTYuNSwwLjYtOS43Yy0wLjItMS4xLTAuMi0yLjMsMC0zLjRsMC4yLTEuNFxuICAgIGMwLjItMS43LDAuMi0zLjUsMC01LjJ2LTMuMWMwLTAuMy0wLjItMy43LTAuMi00di0wLjlsMC4yLTIuNmMwLTEsMC0yLTAuMi0yLjljMC0xLjEsMC0zLjEtMC4yLTUuN2MwLTAuMi0wLjItMS42LTAuMi0yLjJ2LTEuNlxuICAgIGMwLTEuNC0wLjEtMi45LTAuMy00LjNjLTAuNCwwLTAuOCwwLTEuMi0wLjJoLTJjLTEuOCwwLjMtMy41LDEuMS00LjksMi4zTDkxLjYsNjJsLTIuMywyLjJjLTAuMywwLjUtMC42LDEuMS0wLjksMS42bC0wLjksMS4xXG4gICAgYy0wLjIsMC4zLTAuNSwxLjEtMC41LDEuMWMtMi4xLDQuOS0zLjEsMTAuMS0zLjEsMTUuNGMwLjIsNi45LDEuNSwxMy43LDMuOCwyMC4xYzEuNiwzLjcsNi41LDYsOC41LDZcbiAgICBDOTksMTA5LjQsMTAxLjMsMTA5LjEsMTAxLjMsMTA4LjZ6XCIvPlxuICA8cGF0aCBjbGFzcz1cInN0MFwiIGQ9XCJNMTUxLjksNjMuOGMwLjksMy40LDEuMSw2LjUsMS4xLDEzLjNjLTAuMiwyLjEtMC41LDQuMi0xLjEsNi4zYy0yLjMsMC44LTQuOCwxLjMtNy4yLDEuNmgtMS40XG4gICAgYy0wLjIsMC0xLjItMC4yLTEuNC0wLjJIMTQxYy0yLjEtMC4yLTQuMi0wLjEtNi4zLDAuM2MtMS44LDAuMy0zLjcsMC40LTUuNiwwLjNoLTEuMnYzLjljMC4yLDEuNiwwLjUsMy45LDEuMSw3LjFsMC4zLDJsMC41LDEuN1xuICAgIGMwLjEsMS45LDAuOCwzLjgsMS45LDUuNGMxLjIsMi4yLDEuOSwyLjUsMi42LDIuOWMxLjQsMC42LDIuOSwwLjksNC41LDAuOWMxLjgtMC4yLDMuNi0wLjgsNS4xLTEuOWMwLjUtMC4zLDIuMy0xLjQsMi4zLTEuNFxuICAgIGMyLjMtMS43LDYuMywyLjYsNC4zLDUuOWwtMC42LDAuNmMtMy4zLDIuOC03LjQsNC4zLTExLjcsNC41Yy0xLjgsMC4xLTMuNi0wLjItNS4zLTAuOWMtMC41LTAuMi0wLjUtMC4zLTEuMS0wLjZcbiAgICBjLTEuMy0wLjctMi41LTEuNC0zLjctMi4ybC0yLjMtMi41bC0wLjktMS43Yy0wLjYtMS0xLTItMS4yLTMuMWMtMC40LTAuOS0wLjctMS44LTAuOS0yLjhsLTAuNi0zLjFjLTAuOS0zLjMtMS41LTYuNi0xLjctMTBcbiAgICBsLTAuMi00LjJ2LTYuOGMwLjEtNS43LDEuMS0xMS4zLDIuOS0xNi43YzEuNS0zLjQsMy43LTYuNSw2LjUtOS4xYzEuNi0xLjIsNi4yLTIuOCwxMC40LTIuNmMzLjYsMC41LDcuNCwzLjQsOS40LDcuNkwxNTEuOSw2My44elxuICAgICBNMTI3LjksNzcuOWMxLjYsMC4yLDMuMywwLjEsNC45LTAuMmMyLjItMC40LDQuNC0wLjQsNi42LTAuMmMxLjQsMC4yLDIuOCwwLjIsNC4yLDBsMS4xLTAuM2gwLjh2LTEuOWMwLTAuMy0wLjItMS41LTAuMi0yLjJ2LTEuMVxuICAgIGMwLjEtMS42LDAtMy4yLTAuMy00LjhjLTAuNS0yLjEtMS4zLTQuMi0yLjMtNi4ybC0xLjQtMS4yYy0wLjgtMS0yLjEtMS42LTMuNC0xLjZjLTIsMC4yLTMuNywxLjctNC42LDIuOGMtMS4zLDEuMi0yLjMsMi43LTMuMSw0LjNcbiAgICBsLTAuOSwyLjNjLTAuNSwxLjYtMC45LDMuMi0xLjEsNC44YzAsMC4zLDAsMC42LTAuMSwwLjljMCwwLjItMC4yLDAuNi0wLjIsMC44djAuNmMtMC4xLDAuNS0wLjIsMC45LTAuMSwxLjRMMTI3LjksNzcuOXpcIi8+XG4gIDxwYXRoIGNsYXNzPVwic3QwXCIgZD1cIk0xNzIuOCw1My4xYzIuOS0yLDYuNS0yLjUsMTAtMi41aDAuNmMxLjUtMC4xLDMsMC4yLDQuNSwwLjhjMC4yLTQsMC4yLTguOCwwLjItOS43bDAuMy0xMy4xdi0xLjJcbiAgICBjMC0wLjEtMC4yLTUuNi0wLjItNS43di0wLjhjLTAuMi0yLjctMC4xLTUuNSwwLjItOC4yYzAtMi41LTAuMi03LjYtMC4yLTcuNmMwLTMuNSw2LjgtNC4yLDcuMy0wLjh2MTYuOGMwLDAuNS0wLjEsNy42LTAuMSw4djEuMlxuICAgIGMtMC4yLDIuNi0wLjIsNS4yLTAuMiw3LjNjMCw1LjQsMC4yLDEzLDAuMywxNy4xYzAsMC4zLDAuMiwyLjIsMC4yLDIuNXYyLjNsMC4zLDIuOXYxLjdjMCwxLjQsMCwzLjYtMC4xLDQuOFxuICAgIGMtMC4yLDEuNi0wLjMsMy4zLTAuMSw0LjlsMC4xLDUuNmMwLDAuNSwwLjEsMC45LDAuMSwxLjJ2Mi41YzAuMiwxLjcsMC4yLDMuNSwwLDUuMnY1LjdsMC4yLDEuNGwwLjEsNmMwLDAuOSwwLDEuOS0wLjEsMi44djAuNlxuICAgIGMtMC4xLDAuMy0wLjIsMC42LTAuMiwwLjljLTAuMSwxLjctMC4zLDMuNC0wLjMsNS4xYy0wLjUsMS44LTIsMy4xLTMuOSwzLjRjLTMuMiwyLjItNS40LDIuNS0xMi41LDIuNWMtOCwwLTExLjQtNy0xMy4xLTkuOVxuICAgIGMtMC40LTAuNi0wLjctMS4zLTAuOC0yYy0xLTIuNS0xLjctNS4xLTIuMi03LjdsLTAuNi00LjZjLTAuNS00LjItMC45LTkuMy0wLjktMTIuOGMtMC4xLTYuMSwxLjItMTIuMSwzLjctMTcuNlxuICAgIEMxNjUuOCw1OSwxNzAsNTUuMiwxNzIuOCw1My4xeiBNMTg4LjYsODkuNHYtNS45YzAtMC42LTAuMS0xLjItMC4xLTEuOGwwLjMtNS43di0wLjZjMC0xLTAuMS0yLTAuMy0yLjljLTAuMi0xLjYtMC4yLTMuMi0wLjItNC44XG4gICAgVjY3YzAtMC4zLTAuMS0wLjYtMC4xLTAuOXYtMS43bC0wLjItNC4zbC0xLjQtMC43Yy0wLjgtMC44LTEuMS0wLjItMi45LTEuMWMtMC4zLDAtMC45LDAtMS4xLTAuMmMtMS4yLTAuMi0zLjYsMC00LjMsMC44XG4gICAgYy0wLjMsMC4zLTAuNywwLjUtMS4xLDAuNmMtMC40LDAuMy0wLjgsMC43LTEuMiwxYy0xLDAuOS0yLDEuOC0yLjgsMi44YzAsMC42LTAuOCwxLjEtMC45LDEuN2MtMi4xLDUuMy0zLjIsMTEtMy4zLDE2LjhcbiAgICBjMCw1LjEsMiwxNCwzLjQsMTkuOWwwLjUsMS43YzEuNiw0LjIsNC42LDUuOSw3LDUuOWM0LjgsMCw1LjctMC41LDcuMS0xLjRsMS4yLTAuNXYtMS44YzAtMC41LDAuMS0wLjksMC4xLTEuNVxuICAgIGMwLjItMi40LDAuMy00LjgsMC4yLTcuM0MxODguMiw5NC40LDE4OC4zLDkxLjksMTg4LjYsODkuNHpcIi8+XG4gIDxwYXRoIGNsYXNzPVwic3QwXCIgZD1cIk0yMTguMiwxMTAuMWwwLjUsMC44YzAuMywwLjgsMC4zLDEuOCwwLjIsMi42Yy0wLjIsMS43LTEuMSwyLjMtMi4zLDMuMWMwLDAtMiwwLjMtMi41LDAuM2gtMS4yXG4gICAgYy0xLjYtMC41LTIuOS0xLjgtMy40LTMuNGMwLDAsMS41LTUuNiw0LjMtNS45QzIxNi4yLDEwNy4yLDIxNy43LDEwOC40LDIxOC4yLDExMC4xelwiLz5cbiAgPC9zdmc+YCxcbiAgcGxheTogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGZpbGw9XCJub25lXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIGNsYXNzPVwidy02IGgtNlwiPlxuICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIGQ9XCJNMjEgMTJhOSA5IDAgMTEtMTggMCA5IDkgMCAwMTE4IDB6XCIgLz5cbiAgICA8cGF0aCBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBkPVwiTTE1LjkxIDExLjY3MmEuMzc1LjM3NSAwIDAxMCAuNjU2bC01LjYwMyAzLjExM2EuMzc1LjM3NSAwIDAxLS41NTctLjMyOFY4Ljg4N2MwLS4yODYuMzA3LS40NjYuNTU3LS4zMjdsNS42MDMgMy4xMTJ6XCIgLz5cbiAgPC9zdmc+YCxcbiAgcGF1c2U6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBmaWxsPVwibm9uZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBjbGFzcz1cInctNiBoLTZcIj5cbiAgICA8cGF0aCBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBkPVwiTTE0LjI1IDl2Nm0tNC41IDBWOU0yMSAxMmE5IDkgMCAxMS0xOCAwIDkgOSAwIDAxMTggMHpcIiAvPlxuICA8L3N2Zz5gLFxuICBmb3J3YXJkOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgZmlsbD1cIm5vbmVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgY2xhc3M9XCJ3LTYgaC02XCI+XG4gICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgZD1cIk0zIDguNjg4YzAtLjg2NC45MzMtMS40MDUgMS42ODMtLjk3N2w3LjEwOCA0LjA2MmExLjEyNSAxLjEyNSAwIDAxMCAxLjk1M2wtNy4xMDggNC4wNjJBMS4xMjUgMS4xMjUgMCAwMTMgMTYuODFWOC42ODh6TTEyLjc1IDguNjg4YzAtLjg2NC45MzMtMS40MDUgMS42ODMtLjk3N2w3LjEwOCA0LjA2MmExLjEyNSAxLjEyNSAwIDAxMCAxLjk1M2wtNy4xMDggNC4wNjJhMS4xMjUgMS4xMjUgMCAwMS0xLjY4My0uOTc3VjguNjg4elwiIC8+XG4gIDwvc3ZnPmAsXG4gIGJhY2t3YXJkOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgZmlsbD1cIm5vbmVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgY2xhc3M9XCJ3LTYgaC02XCI+XG4gICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgZD1cIk0yMSAxNi44MTFjMCAuODY0LS45MzMgMS40MDUtMS42ODMuOTc3bC03LjEwOC00LjA2MmExLjEyNSAxLjEyNSAwIDAxMC0xLjk1M2w3LjEwOC00LjA2MkExLjEyNSAxLjEyNSAwIDAxMjEgOC42ODh2OC4xMjN6TTExLjI1IDE2LjgxMWMwIC44NjQtLjkzMyAxLjQwNS0xLjY4My45NzdsLTcuMTA4LTQuMDYyYTEuMTI1IDEuMTI1IDAgMDEwLTEuOTUzTDkuNTY3IDcuNzFhMS4xMjUgMS4xMjUgMCAwMTEuNjgzLjk3N3Y4LjEyM3pcIiAvPlxuICA8L3N2Zz5gLFxuICBzZXR0aW5nczogYFxuICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGZpbGw9XCJub25lXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIGNsYXNzPVwidy02IGgtNlwiPlxuICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIGQ9XCJNMTAuNSA2aDkuNzVNMTAuNSA2YTEuNSAxLjUgMCAxMS0zIDBtMyAwYTEuNSAxLjUgMCAxMC0zIDBNMy43NSA2SDcuNW0zIDEyaDkuNzVtLTkuNzUgMGExLjUgMS41IDAgMDEtMyAwbTMgMGExLjUgMS41IDAgMDAtMyAwbS0zLjc1IDBINy41bTktNmgzLjc1bS0zLjc1IDBhMS41IDEuNSAwIDAxLTMgMG0zIDBhMS41IDEuNSAwIDAwLTMgMG0tOS43NSAwaDkuNzVcIiAvPlxuICA8L3N2Zz5gLFxufTtcbmV4cG9ydCBkZWZhdWx0IGljb25zO1xuIiwiaW1wb3J0IHN0eWxlIGZyb20gJy4vc3R5bGUnO1xuaW1wb3J0IGRvbSBmcm9tICcuLi8uLi91dGlscy9kb20nO1xuaW1wb3J0IGVudiBmcm9tICcuLi8uLi8uLi9jb25maWd1cmF0aW9uL2NvbnN0YW50cyc7XG5pbXBvcnQgaWNvbnMgZnJvbSAnLi4vaWNvbnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb2dnbGUge1xuICBfcm9vdCA9IG51bGw7XG4gIF9yb290U2hhZG93ID0gbnVsbDtcbiAgX29wZW4gPSBmYWxzZTtcbiAgX3Bvc2l0aW9uID0gJ3JpZ2h0JztcbiAgX2NvbG9yID0gJyMyMjJkMzknO1xuXG4gIF9jbGlja0V2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdvbkNsaWNrJyk7XG5cbiAgY29uc3RydWN0b3IocG9zaXRpb24sIGNvbG9yKSB7XG4gICAgdGhpcy5fcG9zaXRpb24gPSBwb3NpdGlvbiB8fCAncmlnaHQnO1xuICAgIHRoaXMuX2NvbG9yID0gY29sb3IgfHwgJyMyMjJkMzknO1xuICAgIHRoaXMuX19pbml0X18oKTtcbiAgfVxuXG4gIGdldCBvcGVuKCkge1xuICAgIHJldHVybiB0aGlzLl9vcGVuO1xuICB9XG5cbiAgc2V0IG9wZW4odmFsdWUpIHtcbiAgICB0aGlzLl9vcGVuID0gdmFsdWU7XG4gICAgdGhpcy5fb3BlbiA/IHRoaXMuX3Jvb3QuY2xhc3NMaXN0LmFkZCgnb3BlbicpXG4gICAgICA6IHRoaXMuX3Jvb3QuY2xhc3NMaXN0LnJlbW92ZSgnb3BlbicpO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgLy9jb25zdCB3aWR0aCA9IGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLl9fcGFnZWQtb3ZlcmxheScpKS53aWR0aDtcbiAgICAgIC8vdGhpcy5fcm9vdC5zdHlsZS5yaWdodCA9IHdpZHRoO1xuICAgICAgLy90aGlzLl9yb290LnN0eWxlLmxlZnQgPSB3aWR0aDtcblxuICAgICAgY29uc3Qgd2lkZ2V0V2lkdGggPSBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5fX3BhZ2VkLW92ZXJsYXknKSkud2lkdGguc2xpY2UoMCwtMik7ICAgICAgXG4gICAgICBjb25zdCB3aWR0aFdpdGhTY3JvbGxiYXIgPSBwYXJzZUludCh3aWRnZXRXaWR0aCkgKyAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLl9fcGFnZWQtb3ZlcmxheScpLm9mZnNldFdpZHRoIC0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLl9fcGFnZWQtb3ZlcmxheScpLmNsaWVudFdpZHRoKTtcblxuICAgICAgY29uc3Qgd2lkdGggPSB3aWR0aFdpdGhTY3JvbGxiYXIgKyAncHgnO1xuXG4gICAgICB0aGlzLl9wb3NpdGlvbiA9PT0gJ2xlZnQnID8gdGhpcy5fcm9vdC5zdHlsZS5sZWZ0ID0gd2lkdGggOiB0aGlzLl9yb290LnN0eWxlLnJpZ2h0ID0gd2lkdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vdGhpcy5fcm9vdC5zdHlsZS5sZWZ0ID0gJzAnO1xuICAgICAgdGhpcy5fcG9zaXRpb24gPT09ICdsZWZ0JyA/IHRoaXMuX3Jvb3Quc3R5bGUubGVmdCA9IDAgOiB0aGlzLl9yb290LnN0eWxlLnJpZ2h0ID0gMDtcbiAgICB9XG4gIH1cblxuICBfX2luaXRfXygpIHtcbiAgICB0aGlzLl9yb290ID0gZG9tLmNyZWF0ZUVsZW1lbnQoe1xuICAgICAgdGFnOiAnZGl2JyxcbiAgICAgIGFwcGVuZFRvOiBkb2N1bWVudC5ib2R5LFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBjbGFzczogYCR7ZW52LmNsYXNzZXMudG9nZ2xlfSAke3RoaXMuX3Bvc2l0aW9ufWAsXG4gICAgICAgIHN0eWxlOiBgYmFja2dyb3VuZDogJHt0aGlzLl9jb2xvcn1gXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5fcm9vdFNoYWRvdyA9IHRoaXMuX3Jvb3QuYXR0YWNoU2hhZG93KHtcbiAgICAgIG1vZGU6ICdjbG9zZWQnLFxuICAgIH0pO1xuXG4gICAgZG9tLmNyZWF0ZUVsZW1lbnQoe1xuICAgICAgdGFnOiAnc3R5bGUnLFxuICAgICAgaW5uZXJIVE1MOiBzdHlsZSxcbiAgICAgIGFwcGVuZFRvOiB0aGlzLl9yb290U2hhZG93LFxuICAgIH0pO1xuICAgIGRvbS5jcmVhdGVFbGVtZW50KHtcbiAgICAgIHRhZzogJ3NwYW4nLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBjbGFzczogJ19fcGFnZWRfdG9nZ2xlX2ljb24nLFxuICAgICAgfSxcbiAgICAgIGlubmVySFRNTDogaWNvbnMuYWNjZXNzaWJpbGl0eSxcbiAgICAgIGFwcGVuZFRvOiB0aGlzLl9yb290U2hhZG93LFxuICAgIH0pO1xuICAgIC8qZG9tLmNyZWF0ZUVsZW1lbnQoe1xuICAgICAgdGFnOiAnc3BhbicsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGNsYXNzOiAnX19wYWdlZF90cnlpdCdcbiAgICAgIH0sXG4gICAgICBpbm5lckhUTUw6IHdpbmRvdy5pbm5lcldpZHRoID4gODAwID8gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lID09PSAnLycgPyBgPGgxPlRyeSBJdCE8L2gxPiR7aWNvbnMuYXJyb3d9YCA6IG51bGwgOiBudWxsLFxuICAgICAgYXBwZW5kVG86IHRoaXMuX3Jvb3RTaGFkb3csXG4gICAgfSk7Ki9cbiAgICB0aGlzLl9yb290LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fb25DbGljay5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIF9vbkNsaWNrKGV2ZW50KSB7XG4gICAgdGhpcy5vcGVuID0gIXRoaXMuX29wZW47XG4gICAgLy9IaWRlIFRyeS1pdC1zaWduIHdoZW4gd2lkZ2V0IGlzIG9wZW5cbiAgICAvKnRoaXMuX3Jvb3RTaGFkb3cucXVlcnlTZWxlY3RvcignLl9fcGFnZWRfdHJ5aXQnKVxuICAgICAgLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBgdmlzaWJpbGl0eTogJHt0aGlzLm9wZW4gPyAnaGlkZGVuJyA6ICd2aXNpYmxlJ31gKTsqL1xuICAgIC8qdGhpcy5fcm9vdFNoYWRvdy5xdWVyeVNlbGVjdG9yKCcuX19wYWdlZF90cnlpdCcpXG4gICAgICAgIC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgYHZpc2liaWxpdHk6ICR7J2hpZGRlbid9YCk7Ki9cbiAgICB0aGlzLl9yb290LmRpc3BhdGNoRXZlbnQodGhpcy5fY2xpY2tFdmVudCk7XG4gIH1cbn1cbiIsImNvbnN0IHN0eWxlcyA9IGBcbiAgOmhvc3Qge1xuICAgIHdpZHRoOiBmaXQtY29udGVudDtcbiAgICBoZWlnaHQ6IGZpdC1jb250ZW50O1xuICAgIG1heC13aWR0aDogY2FsYygxMDB2dyAtIDcwcHgpO1xuICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwJSAtIDcwcHgpO1xuICAgIG1pbi13aWR0aDogMzYwcHg7XG4gICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgdHJhbnNpdGlvbjogcmlnaHQgMjAwbXMgZWFzZS1pbjtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZmxleC1kaXJlY3Rpb246IHNwYWNlLWJldHdlZW47XG4gICAgei1pbmRleDogOTk5O1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbiAgOmhvc3QoLnJpZ2h0KSB7XG4gICAgdG9wOiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBtYXJnaW46IGF1dG8gIWltcG9ydGFudDtcbiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA1cHg7XG4gICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNXB4O1xuICAgIGNvbG9yOiAjMjIyRDM5O1xuICAgIGJveC1zaGFkb3c6IC0zcHggMHB4IDE2cHggMHB4IHJnYmEoMCwwLDAsMC4xNSk7XG4gICAgLXdlYmtpdC1ib3gtc2hhZG93OiAtM3B4IDBweCAxNnB4IDBweCByZ2JhKDAsMCwwLDAuMTUpO1xuICAgIC1tb3otYm94LXNoYWRvdzogLTNweCAwcHggMTZweCAwcHggcmdiYSgwLDAsMCwwLjE1KTtcbiAgfVxuICA6aG9zdCgucmlnaHQub3Blbikge1xuICAgIHJpZ2h0OiAwO1xuICB9XG4gIDpob3N0KC5sZWZ0KSB7XG4gICAgdG9wOiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBtYXJnaW46IGF1dG8gIWltcG9ydGFudDtcbiAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNXB4O1xuICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA1cHg7XG4gICAgY29sb3I6ICMyMjJEMzk7XG4gICAgYm94LXNoYWRvdzogLTNweCAwcHggMTZweCAwcHggcmdiYSgwLDAsMCwwLjE1KTtcbiAgICAtd2Via2l0LWJveC1zaGFkb3c6IC0zcHggMHB4IDE2cHggMHB4IHJnYmEoMCwwLDAsMC4xNSk7XG4gICAgLW1vei1ib3gtc2hhZG93OiAtM3B4IDBweCAxNnB4IDBweCByZ2JhKDAsMCwwLDAuMTUpO1xuICB9XG4gIDpob3N0KC5sZWZ0Lm9wZW4pIHtcbiAgICBsZWZ0OiAwO1xuICB9XG4gIDpob3N0IC5oZWFkZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBwYWRkaW5nOiAxMnB4O1xuICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAyMHB4KTtcbiAgICBtYXJnaW4tYm90dG9tOiAxMnB4O1xuICAgIHBvc2l0aW9uOiBzdGlja3k7XG4gICAgdG9wOiAwO1xuICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgIHotaW5kZXg6IDk5OTk7XG4gIH1cbiAgOmhvc3QgLmhlYWRlciBoMSB7XG4gICAgZm9udC1zaXplOiAyNHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgbWFyZ2luOiAwO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gIH1cbiAgOmhvc3QgLmhlYWRlciBzcGFuIHtcbiAgICBtYXgtaGVpZ2h0OiAyNHB4O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICB9XG4gIDpob3N0IC5fX3BhZ2VkLWlucHV0Om50aC1vZi10eXBlKDEpIHtcbiAgICBtYXJnaW4tdG9wOiA2cHg7XG4gIH1cbiAgOmhvc3QgLnRhYnMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgbWFyZ2luLWJvdHRvbTogMTJweDtcbiAgICBwb3NpdGlvbjogc3RpY2t5O1xuICAgIHRvcDogNzBweDtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICBib3gtc2hhZG93OiAxcHggMnB4IDVweCAwcHggcmdiYSgwLDAsMCwwLjE1KTtcbiAgICAtd2Via2l0LWJveC1zaGFkb3c6IDFweCAycHggNXB4IDBweCByZ2JhKDAsMCwwLDAuMTUpO1xuICAgIC1tb3otYm94LXNoYWRvdzogMXB4IDJweCA1cHggMHB4IHJnYmEoMCwwLDAsMC4xNSk7XG4gICAgei1pbmRleDogOTk5OTtcbiAgfVxuICA6aG9zdCAudGFicyBidXR0b24ge1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIGNvbG9yOiAjMjIyRDM5O1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB3aWR0aDogY2FsYyg1MCUgLSA2cHgpO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBwYWRkaW5nOiAxMnB4IDA7XG4gICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogNXB4O1xuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA1cHg7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICB9XG4gIDpob3N0IC50YWJzIGJ1dHRvbjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjA0KTtcbiAgfVxuICA6aG9zdCAudGFicyBidXR0b24uYWN0aXZlIHtcbiAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgdmFyKC0tcGFnZWQtY29sb3IpO1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4wNCk7XG4gIH1cbiAgOmhvc3QgLl9fcGFnZWQtcmVzaXplLWhhbmRsZXIge1xuICAgIHBvc2l0aW9uOiBzdGlja3k7XG4gICAgd2lkdGg6IDIwcHg7XG4gICAgaGVpZ2h0OiAyMHB4O1xuICAgIG1pbi13aWR0aDogMjBweDtcbiAgICBtaW4taGVpZ2h0OiAyMHB4O1xuICAgIGJhY2tncm91bmQ6IGJsYWNrO1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICBsZWZ0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBjdXJzb3I6IGNvbC1yZXNpemU7XG4gICAgYm9yZGVyLXJhZGl1czogMXB4O1xuICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7XG4gIH1cblxuICA6aG9zdCAuX19wYWdlZC1zY3JlZW5fcmVhZGVyIHtcbiAgICBtaW4taGVpZ2h0OiBmaXQtY29udGVudDtcbiAgfVxuYDtcblxuZXhwb3J0IGRlZmF1bHQgc3R5bGVzO1xuIiwiY29uc3Qgc3R5bGVzID0gYFxuICA6aG9zdCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBmbGV4LXdyYXA6IG5vd3JhcDtcbiAgICB3aWR0aDogY2FsYygxMDAlIC0gNTBweCk7XG4gICAgbWFyZ2luOiAwIDEycHggMTJweCAxMnB4O1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4wNCk7XG4gICAgcGFkZGluZzogMTJweDtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICBtaW4td2lkdGg6IDI4MHB4O1xuICAgIC8vZ2FwOiAxMnB4O1xuICAgIC8vd2lkdGg6IGZpdC1jb250ZW50O1xuICB9XG5cbiAgOmhvc3QgbGFiZWwge1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBtYXJnaW46IGF1dG8gMDtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB9XG5cbiAgOmhvc3QgLl9fcGFnZWQtaW5wdXQtc3dpdGNoIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICB9XG4gIDpob3N0IC5fX3BhZ2VkLWlucHV0LXN3aXRjaCBpbnB1dFt0eXBlPWNoZWNrYm94XXtcbiAgICBoZWlnaHQ6IDA7XG4gICAgd2lkdGg6IDA7XG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICB9XG5cbiAgOmhvc3QgLl9fcGFnZWQtaW5wdXQtc3dpdGNoIGxhYmVsIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgdGV4dC1pbmRlbnQ6IC05OTk5cHg7XG4gICAgd2lkdGg6IDQ2cHg7XG4gICAgaGVpZ2h0OiAyNHB4O1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBib3JkZXItcmFkaXVzOiA1cHg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB9XG5cbiAgOmhvc3QgLl9fcGFnZWQtaW5wdXQtc3dpdGNoIGxhYmVsOmFmdGVyIHtcbiAgICBjb250ZW50OiAnJztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAzcHg7XG4gICAgbGVmdDogM3B4O1xuICAgIHdpZHRoOiAxOHB4O1xuICAgIGhlaWdodDogMThweDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wYWdlZC1jb2xvcik7XG4gICAgYm9yZGVyLXJhZGl1czogNXB4O1xuICAgIHRyYW5zaXRpb246IDAuM3M7XG4gIH1cblxuICA6aG9zdCAuX19wYWdlZC1pbnB1dC1zd2l0Y2ggaW5wdXQ6Y2hlY2tlZCArIGxhYmVsIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wYWdlZC1jb2xvcik7XG4gIH1cblxuICA6aG9zdCAuX19wYWdlZC1pbnB1dC1zd2l0Y2ggaW5wdXQ6Y2hlY2tlZCArIGxhYmVsOmFmdGVyIHtcbiAgICBsZWZ0OiBjYWxjKDEwMCUgLSAzcHgpO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTAwJSk7XG4gICAgYmFja2dyb3VuZDogd2hpdGU7XG4gIH1cblxuICA6aG9zdCAuX19wYWdlZC1pbnB1dC1zd2l0Y2ggbGFiZWw6YWN0aXZlOmFmdGVyIHtcbiAgICB3aWR0aDogMjBweDtcbiAgfVxuXG4gIDpob3N0IC5fX3BhZ2VkLWlucHV0LWluY3JlbWVudCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgICBib3JkZXItcmFkaXVzOiA1cHg7XG4gICAgbWF4LWhlaWdodDogMzBweDtcbiAgICAvL3dpZHRoOiAtd2Via2l0LWZpbGwtYXZhaWxhYmxlO1xuICB9XG4gIDpob3N0IC5fX3BhZ2VkLWlucHV0LWluY3JlbWVudCBpbnB1dFt0eXBlPVwibnVtYmVyXCJdIHtcbiAgICB3aWR0aDogNDBweDtcbiAgICBtYXJnaW46IDAgNHB4O1xuICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGNvbG9yOiAjMjIyRDM5O1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgLy93aWR0aDogLXdlYmtpdC1maWxsLWF2YWlsYWJsZTtcbiAgfVxuICA6aG9zdCAuX19wYWdlZC1pbnB1dC1pbmNyZW1lbnQgaW5wdXRbdHlwZT1cIm51bWJlclwiXTpmb2N1cyB7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgfVxuICA6aG9zdCAuX19wYWdlZC1pbnB1dC1pbmNyZW1lbnQgaW5wdXRbdHlwZT1cIm51bWJlclwiXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbixcbiAgOmhvc3QgLl9fcGFnZWQtaW5wdXQtaW5jcmVtZW50IGlucHV0W3R5cGU9XCJudW1iZXJcIl06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24ge1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgICBtYXJnaW46IDA7XG4gIH1cbiAgOmhvc3QgLl9fcGFnZWQtaW5wdXQtaW5jcmVtZW50IHNwYW4ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgbWF4LWhlaWdodDogMjBweDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgcGFkZGluZzogNHB4O1xuICB9XG4gIDpob3N0IC5fX3BhZ2VkLWlucHV0LXNlbGVjdCB7XG4gICAgY29sb3I6ICMyMjJEMzk7XG4gICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjEpO1xuICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgcGFkZGluZzogNHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgICBtaW4taGVpZ2h0OiBmaXQtY29udGVudDtcbiAgICAvL21heC1oZWlnaHQ6IDMwcHg7XG4gICAgLy93aWR0aDogLXdlYmtpdC1maWxsLWF2YWlsYWJsZTtcbiAgICB3aWR0aDogZml0LWNvbnRlbnQ7XG4gIH1cbiAgOmhvc3QgLl9fcGFnZWQtaW5wdXQtc2VsZWN0OmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuICB9XG5gO1xuZXhwb3J0IGRlZmF1bHQgc3R5bGVzO1xuIiwiaW1wb3J0IHN0eWxlIGZyb20gJy4vc3R5bGUnO1xuaW1wb3J0IGRvbSBmcm9tICcuLi8uLi8uLi8uLi91dGlscy9kb20nO1xuaW1wb3J0IGVudiBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb25maWd1cmF0aW9uL2NvbnN0YW50cyc7XG5pbXBvcnQgaWNvbnMgZnJvbSAnLi4vLi4vLi4vaWNvbnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbnB1dCB7XG4gIF9yb290ID0gbnVsbDtcbiAgX3Jvb3RTaGFkb3cgPSBudWxsO1xuICBfcGFyZW50ID0gbnVsbDtcbiAgX3RleHQgPSBudWxsO1xuICBfdHlwZSA9IG51bGw7XG4gIF91bmlxSWQgPSBudWxsO1xuICBfb3B0aW9ucyA9IG51bGw7XG4gIF9rZXkgPSBudWxsO1xuICBfdmFsdWUgPSBudWxsO1xuICBfdmFsaWRhdGlvbnMgPSBudWxsO1xuICBfd2lkZ2V0ID0gbnVsbDtcbiAgb25DaGFuZ2UgPSAoKSA9PiB7fTtcbiAgaW5wdXRFdmVudCA9IG5ldyBDdXN0b21FdmVudCgnaW5wdXQnLCB7XG4gICAgZGV0YWlsczoge1xuICAgICAgdGV4dDogKCkgPT4gdGV4dC52YWx1ZSxcbiAgICB9LFxuICB9KTtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIHRoaXMuX3dpZGdldCA9IG9wdGlvbnMud2lkZ2V0O1xuICAgICAgdGhpcy5fa2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgICB0aGlzLl9wYXJlbnQgPSBvcHRpb25zLnBhcmVudFxuICAgICAgICA/IG9wdGlvbnMucGFyZW50IDogdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fdGV4dCA9IG9wdGlvbnMubGFiZWxcbiAgICAgICAgPyBvcHRpb25zLmxhYmVsIDogdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fdHlwZSA9IG9wdGlvbnMudHlwZVxuICAgICAgICA/IG9wdGlvbnMudHlwZSA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zLm9wdGlvbnNcbiAgICAgICAgPyBvcHRpb25zLm9wdGlvbnMgOiB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl92YWxpZGF0aW9ucyA9IG9wdGlvbnMudmFsaWRhdGlvbnNcbiAgICAgICAgPyBvcHRpb25zLnZhbGlkYXRpb25zIDogdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fdmFsdWUgPSB0eXBlb2Ygb3B0aW9ucy52YWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gb3B0aW9ucy52YWx1ZSA6IHVuZGVmaW5lZDtcbiAgICAgIGlmIChvcHRpb25zLm9uQ2hhbmdlKSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBvcHRpb25zLm9uQ2hhbmdlO1xuICAgICAgfVxuICAgICAgdGhpcy5fdW5pcUlkID0gdGhpcy5fZ2VuSWQoKTtcbiAgICB9XG4gICAgdGhpcy5fX2luaXRfXygpO1xuICB9XG5cbiAgc2V0IHZhbHVlKHZhbCkge1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsO1xuICAgIHRoaXMuX3Jvb3RTaGFkb3cucmVtb3ZlQ2hpbGQodGhpcy5fcm9vdFNoYWRvdy5jaGlsZE5vZGVzWzJdKTtcbiAgICB0aGlzLl9yb290U2hhZG93LmFwcGVuZENoaWxkKHRoaXMuX2NvbnRlbnQpO1xuICB9XG5cbiAgZ2V0IF9sYWJlbCgpIHtcbiAgICBpZiAodGhpcy5fdGV4dCkge1xuICAgICAgcmV0dXJuIGRvbS5jcmVhdGVFbGVtZW50KHtcbiAgICAgICAgdGFnOiAnbGFiZWwnLFxuICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgY2xhc3M6ICdfX3BhZ2VkLWlucHV0LWxhYmVsJyxcbiAgICAgICAgfSxcbiAgICAgICAgaW5uZXJIVE1MOiB0aGlzLl90ZXh0LFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRXaXRoRm9ybWF0KHZhbHVlKSB7XG4gICAgaWYgKHRoaXMuX3ZhbGlkYXRpb25zICYmIHRoaXMuX3ZhbGlkYXRpb25zLmZvcm1hdCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRpb25zLmZvcm1hdCh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGdldCBfY29udGVudCgpIHtcbiAgICBpZiAodGhpcy5fdHlwZSkge1xuICAgICAgc3dpdGNoICh0aGlzLl90eXBlKSB7XG4gICAgICAgIGNhc2UgJ3N3aXRjaCc6XG4gICAgICAgICAgcmV0dXJuIGRvbS5jcmVhdGVFbGVtZW50KHtcbiAgICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAgIGNsYXNzOiAnX19wYWdlZC1pbnB1dC1zd2l0Y2gnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIGRvbS5jcmVhdGVFbGVtZW50KHtcbiAgICAgICAgICAgICAgICB0YWc6ICdpbnB1dCcsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgICAgdHlwZTogJ2NoZWNrYm94JyxcbiAgICAgICAgICAgICAgICAgIGlkOiB0aGlzLl91bmlxSWQsXG4gICAgICAgICAgICAgICAgICBjaGVja2VkOiB0aGlzLl92YWx1ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgICAgaW5wdXQ6IHRoaXMuX29uQ2hhbmdlLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIGRvbS5jcmVhdGVFbGVtZW50KHtcbiAgICAgICAgICAgICAgICB0YWc6ICdsYWJlbCcsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgICAgdHlwZTogJ2NoZWNrYm94JyxcbiAgICAgICAgICAgICAgICAgIGZvcjogdGhpcy5fdW5pcUlkLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgY2FzZSAnaW5jcmVtZW50JzpcbiAgICAgICAgICByZXR1cm4gZG9tLmNyZWF0ZUVsZW1lbnQoe1xuICAgICAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgY2xhc3M6ICdfX3BhZ2VkLWlucHV0LWluY3JlbWVudCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgZG9tLmNyZWF0ZUVsZW1lbnQoe1xuICAgICAgICAgICAgICAgIHRhZzogJ3NwYW4nLFxuICAgICAgICAgICAgICAgIGlubmVySFRNTDogaWNvbnMubWludXMsXG4gICAgICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgICAgICBjbGljazogdGhpcy5fc3RlcERvd24uYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgZG9tLmNyZWF0ZUVsZW1lbnQoe1xuICAgICAgICAgICAgICAgIHRhZzogJ2lucHV0JyxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiAwLFxuICAgICAgICAgICAgICAgICAgbWluOiAodGhpcy5fdmFsaWRhdGlvbnMgJiYgdHlwZW9mIHRoaXMuX3ZhbGlkYXRpb25zLm1pbiA9PT0gJ251bWJlcicgPyB0aGlzLmdldFdpdGhGb3JtYXQodGhpcy5fdmFsaWRhdGlvbnMubWluKSA6IDApLFxuICAgICAgICAgICAgICAgICAgbWF4OiAodGhpcy5fdmFsaWRhdGlvbnMgJiYgdHlwZW9mIHRoaXMuX3ZhbGlkYXRpb25zLm1heCA9PT0gJ251bWJlcicgPyB0aGlzLmdldFdpdGhGb3JtYXQodGhpcy5fdmFsaWRhdGlvbnMubWF4KSA6IHRoaXMuX2lzTW9iaWxlKCkgPyA1IDogMTUpLFxuICAgICAgICAgICAgICAgICAgc3RlcDogKHRoaXMuX3ZhbGlkYXRpb25zICYmIHR5cGVvZiB0aGlzLl92YWxpZGF0aW9ucy5zdGVwID09PSAnbnVtYmVyJyA/IHRoaXMuZ2V0V2l0aEZvcm1hdCh0aGlzLl92YWxpZGF0aW9ucy5zdGVwKSA6IDEpLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuZ2V0V2l0aEZvcm1hdCh0aGlzLl92YWx1ZSksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICAgIGtleXVwOiBldiA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5fcm9vdFNoYWRvdy5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPVwibnVtYmVyXCJdJyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heFZhbHVlID0gdGhpcy5fdmFsaWRhdGlvbnMgJiYgdHlwZW9mIHRoaXMuX3ZhbGlkYXRpb25zLm1heCA9PT0gJ251bWJlcicgPyB0aGlzLl92YWxpZGF0aW9ucy5tYXggOiB0aGlzLl9pc01vYmlsZSgpID8gNSA6IDE1O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtaW5WYWx1ZSA9IHRoaXMuX3ZhbGlkYXRpb25zICYmIHR5cGVvZiB0aGlzLl92YWxpZGF0aW9ucy5taW4gPT09ICdudW1iZXInID8gdGhpcy5fdmFsaWRhdGlvbnMubWluIDogMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlSW50KGlucHV0LnZhbHVlKSA+PSBtYXhWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgaW5wdXQudmFsdWUgPSB0aGlzLmdldFdpdGhGb3JtYXQoMTUpO1xuICAgICAgICAgICAgICAgICAgICAgIGlucHV0LmRpc3BhdGNoRXZlbnQodGhpcy5pbnB1dEV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoaW5wdXQudmFsdWUpIDw9IG1pblZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICBpbnB1dC52YWx1ZSA9IHRoaXMuZ2V0V2l0aEZvcm1hdCgwKTtcbiAgICAgICAgICAgICAgICAgICAgICBpbnB1dC5kaXNwYXRjaEV2ZW50KHRoaXMuaW5wdXRFdmVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBpbnB1dDogdGhpcy5fb25DaGFuZ2UuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgZG9tLmNyZWF0ZUVsZW1lbnQoe1xuICAgICAgICAgICAgICAgIHRhZzogJ3NwYW4nLFxuICAgICAgICAgICAgICAgIGlubmVySFRNTDogaWNvbnMucGx1cyxcbiAgICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICAgIGNsaWNrOiB0aGlzLl9zdGVwVXAuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICAgICAgcmV0dXJuIGRvbS5jcmVhdGVFbGVtZW50KHtcbiAgICAgICAgICAgIHRhZzogJ3NlbGVjdCcsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAgIGNsYXNzOiAnX19wYWdlZC1pbnB1dC1zZWxlY3QnLFxuICAgICAgICAgICAgICBpZDogdGhpcy5fa2V5LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICBpbnB1dDogdGhpcy5fb25DaGFuZ2UuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjaGlsZHJlbjogKHRoaXMuX29wdGlvbnMgfHwgW10pLm1hcChvcHRpb24gPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gZG9tLmNyZWF0ZUVsZW1lbnQoe1xuICAgICAgICAgICAgICAgIHRhZzogJ29wdGlvbicsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgICAgdmFsdWU6IG9wdGlvbi52YWx1ZSxcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBvcHRpb24udmFsdWUgPT09IHRoaXMuX3ZhbHVlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaW5uZXJIVE1MOiBvcHRpb24ubGFiZWwsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXQgX2NoaWxkcmVuKCkge1xuICAgIHJldHVybiBbXG4gICAgICB0aGlzLl9sYWJlbCxcbiAgICAgIHRoaXMuX2NvbnRlbnQsXG4gICAgXTtcbiAgfVxuXG4gIF9faW5pdF9fKCkge1xuICAgIHRoaXMuX3Jvb3QgPSBkb20uY3JlYXRlRWxlbWVudCh7XG4gICAgICB0YWc6ICdkaXYnLFxuICAgICAgYXBwZW5kVG86IHRoaXMuX3BhcmVudCA/IHRoaXMuX3BhcmVudCA6IHVuZGVmaW5lZCxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgY2xhc3M6IGVudi5jbGFzc2VzLmlucHV0LFxuICAgICAgICBsYWJlbEtleTogdGhpcy5fa2V5XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5fcm9vdFNoYWRvdyA9IHRoaXMuX3Jvb3QuYXR0YWNoU2hhZG93KHtcbiAgICAgIG1vZGU6ICdvcGVuJyxcbiAgICB9KTtcblxuICAgIGRvbS5jcmVhdGVFbGVtZW50KHtcbiAgICAgIHRhZzogJ3N0eWxlJyxcbiAgICAgIGlubmVySFRNTDogc3R5bGUsXG4gICAgICBhcHBlbmRUbzogdGhpcy5fcm9vdFNoYWRvdyxcbiAgICB9KTtcblxuICAgIHRoaXMuX2NoaWxkcmVuXG4gICAgICAuZmlsdGVyKGNoaWxkID0+IGNoaWxkKVxuICAgICAgLmZvckVhY2goY2hpbGQgPT4gdGhpcy5fcm9vdFNoYWRvdy5hcHBlbmRDaGlsZChjaGlsZCkpO1xuICB9XG5cbiAgX2dlbklkKCkge1xuICAgIGNvbnN0IEFMUEhBQkVUID0gJzAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJztcbiAgICBjb25zdCBJRF9MRU5HVEggPSA4O1xuICAgIHZhciBydG4gPSAnJztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IElEX0xFTkdUSDsgaSsrKSB7XG4gICAgICBydG4gKz0gQUxQSEFCRVQuY2hhckF0KE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIEFMUEhBQkVULmxlbmd0aCkpO1xuICAgIH1cbiAgICByZXR1cm4gcnRuO1xuICB9XG5cbiAgX3N0ZXBEb3duKCkge1xuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5fcm9vdFNoYWRvdy5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPVwibnVtYmVyXCJdJyk7XG4gICAgaWYgKGlucHV0KSB7XG4gICAgICBpbnB1dC5zdGVwRG93bigpO1xuICAgICAgaW5wdXQuZGlzcGF0Y2hFdmVudCh0aGlzLmlucHV0RXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIF9zdGVwVXAoKSB7XG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLl9yb290U2hhZG93LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9XCJudW1iZXJcIl0nKTtcbiAgICBpZiAoaW5wdXQpIHtcbiAgICAgIGlucHV0LnN0ZXBVcCgpO1xuICAgICAgaW5wdXQuZGlzcGF0Y2hFdmVudCh0aGlzLmlucHV0RXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIF9pc01vYmlsZSgpIHtcbiAgICByZXR1cm4gd2luZG93Lm1hdGNoTWVkaWEoJyhtYXgtd2lkdGg6IDc2N3B4KScpLm1hdGNoZXM7XG4gIH1cblxuICBfb25DaGFuZ2UoZXZlbnQpIHtcbiAgICBsZXQgdmFsdWU7XG4gICAgc3dpdGNoICh0aGlzLl90eXBlKSB7XG4gICAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgICBjb25zdCBzZWxlY3QgPSB0aGlzLl9yb290U2hhZG93LnF1ZXJ5U2VsZWN0b3IoJ3NlbGVjdCcpO1xuICAgICAgICB2YWx1ZSA9IHNlbGVjdC52YWx1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzd2l0Y2gnOlxuICAgICAgICBjb25zdCBjaGVja2JveCA9IHRoaXMuX3Jvb3RTaGFkb3cucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdJyk7XG4gICAgICAgIHZhbHVlID0gY2hlY2tib3guY2hlY2tlZCB8fCBmYWxzZTtcblxuICAgICAgICAvL0NoZWNrIGZvciBjbG9zZSB3aWRnZXQgb24gbW9iaWxlIChTY3JlZW5yZWFkZXIpXG4gICAgICAgIGNvbnN0IHN3aXRjaEVsZW1lbnQgPSBjaGVja2JveC5wYXJlbnRFbGVtZW50O1xuICAgICAgICBjb25zdCBsYWJlbCA9IHN3aXRjaEVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZy5pbm5lckhUTUw7XG5cbiAgICAgICAgaWYodGhpcy5faXNNb2JpbGUoKSAmJiBsYWJlbCA9PT0gJ1NjcmVlbiBSZWFkZXInICYmIHZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5fd2lkZ2V0Ll9jbG9zZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdpbmNyZW1lbnQnOlxuICAgICAgICBjb25zdCBudW1iZXIgPSB0aGlzLl9yb290U2hhZG93LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9XCJudW1iZXJcIl0nKTtcbiAgICAgICAgaWYgKHRoaXMuX3ZhbGlkYXRpb25zICYmIHRoaXMuX3ZhbGlkYXRpb25zLmZvcm1hdCkge1xuICAgICAgICAgIHZhbHVlID0gTnVtYmVyKG51bWJlci52YWx1ZSB8fCAwKSAvIDEwMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZSA9IE51bWJlcihudW1iZXIudmFsdWUgfHwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICB9XG59XG4iLCJjb25zdCBzdHlsZXMgPSBgXG4gICAgICBcbiAgOmhvc3QgLl9fcGFnZWQtYWNjb3VudC1mb3JtIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XG4gICAgd2lkdGg6IGF1dG87XG4gICAgaGVpZ2h0OiBhdXRvO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICB9XG5cbiAgOmhvc3Qge1xuICAgIHdpZHRoOiBmaXQtY29udGVudDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgbWluLWhlaWdodDogMzAwcHg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB9XG5cbiAgOmhvc3QgbGFiZWwge1xuICAgIG1hcmdpbjogMTZweCAxMnB4O1xuICB9XG5cbiAgOmhvc3QgLl9fcGFnZWQtYWNjb3VudC1mb3JtIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIH1cblxuICA6aG9zdCAuX19wYWdlZC1hY2NvdW50LWZvcm0gaW5wdXQge1xuICAgIHdpZHRoOiBjYWxjKDEwMCUgLSA0MnB4KTtcbiAgICBtYXJnaW4tYm90dG9tOiAxMnB4O1xuICAgIG91dGxpbmU6IG5vbmU7XG4gICAgYm9yZGVyLXJhZGl1czogNXB4O1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMDQpO1xuICAgIGNvbG9yOiAjMjIyRDM5O1xuICAgIHBhZGRpbmc6IDEycHggOHB4O1xuICAgIG1pbi13aWR0aDogMjgwcHg7XG4gICAgbWFyZ2luLXJpZ2h0OiAxNnB4O1xuICAgIG1hcmdpbi1sZWZ0OiAxNnB4O1xuICB9XG5cbiAgOmhvc3QgLl9fcGFnZWQtYWNjb3VudC1mb3JtIGJ1dHRvblt0eXBlPVwic3VibWl0XCJdIHtcbiAgICBib3JkZXItcmFkaXVzOiA1cHg7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tcGFnZWQtY29sb3IpO1xuICAgIHBhZGRpbmc6IDEycHggOHB4O1xuICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAyOHB4KTtcbiAgICBvdXRsaW5lOiBub25lO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBjb2xvcjogd2hpdGU7XG4gIH1cblxuICA6aG9zdCAuX19wYWdlZC1hY2NvdW50LWZvcm0gc3BhbiB7XG4gICAgY29sb3I6ICMyMjJEMzk7XG4gICAgcGFkZGluZzogMTJweDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgYmFja2dyb3VuZDogd2hpdGU7XG4gIH1cblxuICA6aG9zdCAuX19wYWdlZC1hY2NvdW50LWZvcm0gc3BhbjphZnRlciB7XG4gICAgY29udGVudDogJyc7XG4gICAgd2lkdGg6IDEwMHB4O1xuICAgIGhlaWdodDogMnB4O1xuICAgIGJhY2tncm91bmQ6ICMyMjJEMzk7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAtMjVweDtcbiAgICByaWdodDogMDtcbiAgICBib3R0b206IDA7XG4gICAgbWFyZ2luOiBhdXRvO1xuICAgIHotaW5kZXg6IC0xO1xuICB9XG5cbiAgOmhvc3QgLl9fcGFnZWQtYWNjb3VudC1mb3JtIGJ1dHRvblt0eXBlPVwibGlua1wiXSB7XG4gICAgYm9yZGVyLXJhZGl1czogNXB4O1xuICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tcGFnZWQtY29sb3IpO1xuICAgIHBhZGRpbmc6IDEwcHggOHB4O1xuICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAyOHB4KTtcbiAgICBjb2xvcjogdmFyKC0tcGFnZWQtY29sb3IpO1xuICAgIG91dGxpbmU6IG5vbmU7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIG1hcmdpbi1ib3R0b206IDEycHg7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgfVxuXG4gIDpob3N0IC5fX3BhZ2VkLWFjY291bnQtZm9ybSBhIHtcbiAgICBjb2xvcjogIzIyMkQzOTtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgICBtYXJnaW4tYm90dG9tOiAxMnB4O1xuICB9XG5cbiAgLyo6aG9zdCAuX19wYWdlZC1hY2NvdW50LWZvcm0gYTpob3ZlciB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gIH0qL1xuXG4gIDpob3N0IC5fX3BhZ2VkLWZvcm0tZXJyb3Ige1xuICAgIGNvbG9yOiByZWQ7XG4gICAgbWFyZ2luOiAwIDEycHggMTJweCAxMnB4O1xuICB9XG5cbiAgOmhvc3QgLl9fcGFnZWQtcHJvZmlsZSB7XG4gICAgd2lkdGg6IDYwcHg7XG4gICAgaGVpZ2h0OiA2MHB4O1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMyk7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICB9XG5cbiAgOmhvc3QgLl9fcGFnZWQtcHJvZmlsZSBzcGFuIHtcbiAgICBwYWRkaW5nIDA7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgfVxuXG4gIDpob3N0IC5fX3BhZ2VkLXByb2ZpbGUgc3Bhbjo6YWZ0ZXIge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICA6aG9zdCBoMSB7XG4gICAgbWFyZ2luOiAxMnB4IGF1dG87XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICBtYXJnaW4tYm90dG9tOiAyNHB4O1xuICB9XG5cbiAgOmhvc3QgaDMge1xuICAgIHRleHQtYWxpZ246IHN0YXJ0O1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgd2lkdGg6IGNhbGMoMTAwJSAtIDI0cHgpO1xuICAgIG1hcmdpbjogMCAwIDEycHggMDtcbiAgfVxuICA6aG9zdCBoMzpsYXN0LW9mLXR5cGUge1xuICAgIG1hcmdpbi1ib3R0b206IDI0cHg7XG4gIH1cbiAgOmhvc3QgYnV0dG9uOm50aC1vZi10eXBlKDEpIHtcbiAgICBtYXJnaW4tYm90dG9tOiAxMnB4O1xuICB9XG5gO1xuZXhwb3J0IGRlZmF1bHQgc3R5bGVzO1xuIiwiZXhwb3J0IGNsYXNzIEZldGNoIHtcbiAgc3RhdGljIGZpeFVybCh1cmwpIHtcbiAgICByZXR1cm4gUEFHRURfRU5WID09PSAncHJvZCdcbiAgICAgID8gYGh0dHBzOi8vcGFnZWQuYWkke3VybH1gXG4gICAgICA6IGBodHRwOi8vbG9jYWxob3N0OjMwMDAke3VybH1gO1xuICB9XG5cbiAgc3RhdGljIGdldCh1cmwsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gZmV0Y2goRmV0Y2guZml4VXJsKHVybCksIHtcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIHBvc3QodXJsLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGZldGNoKEZldGNoLmZpeFVybCh1cmwpLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG4gIH1cbn1cbiIsImNvbnN0IHN0eWxlcyA9IGBcbiAgOmhvc3QgLl9fcGFnZWQtYWxlcnQge1xuICAgIHdpZHRoOiBjYWxjKDEwMCUgLSA1MHB4KTtcbiAgICBwYWRkaW5nOiAxMnB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG4gICAgY29sb3I6IGJsYWNrO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDEycHg7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcbiAgICBtYXJnaW46IGF1dG87XG4gICAgbWl4LWJsZW5kLW1vZGU6IGRpZmZlcmVuY2UgIWltcG9ydGFudDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAgIGJveC1zaGFkb3c6IDAgMnB4IDRweCAwIHJnYigwIDAgMCAvIDIwJSk7XG4gIH1cbmA7XG5leHBvcnQgZGVmYXVsdCBzdHlsZXM7XG4iLCJpbXBvcnQgc3R5bGUgZnJvbSAnLi9zdHlsZSc7XG5pbXBvcnQgZG9tIGZyb20gJy4uLy4uLy4uLy4uL3V0aWxzL2RvbSc7XG5pbXBvcnQgZW52IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvbmZpZ3VyYXRpb24vY29uc3RhbnRzJztcbmltcG9ydCB7IEZldGNoIH0gZnJvbSAnLi4vLi4vLi4vZmV0Y2gnO1xuaW1wb3J0IGljb25zIGZyb20gJy4uLy4uLy4uL2ljb25zJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWxlcnQge1xuICBfcm9vdCA9IG51bGw7XG4gIF9yb290U2hhZG93ID0gbnVsbDtcbiAgX3BhcmVudCA9IG51bGw7XG4gIF90ZXh0ID0gbnVsbDtcbiAgX2lkID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIHRoaXMuX3BhcmVudCA9IG9wdGlvbnMucGFyZW50XG4gICAgICAgID8gb3B0aW9ucy5wYXJlbnQgOiB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl90ZXh0ID0gb3B0aW9ucy50ZXh0XG4gICAgICAgID8gb3B0aW9ucy50ZXh0IDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRoaXMuX19pbml0X18oKTtcbiAgfVxuXG4gIGdldCBfY29udGVudCgpIHtcbiAgICBjb25zdCBjb250ZW50ID0gZG9tLmNyZWF0ZUVsZW1lbnQoe1xuICAgICAgdGFnOiAnZGl2JyxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgY2xhc3M6ICdfX3BhZ2VkLWFsZXJ0JyxcbiAgICAgIH0sXG4gICAgICBpbm5lckhUTUw6IHRoaXMuX3RleHQsXG4gICAgICBldmVudHM6IHtcbiAgICAgICAgY2xpY2s6ICgpID0+IGNvbnNvbGUubG9nKCdjbGlja2VkJyksXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBnZXQgX2NoaWxkcmVuKCkge1xuICAgIHJldHVybiBbXG4gICAgICB0aGlzLl9jb250ZW50LFxuICAgIF07XG4gIH1cblxuICBfX2luaXRfXygpIHtcbiAgICB0aGlzLl9pZCA9IHRoaXMuX2dlbklkKCk7XG4gICAgdGhpcy5fcm9vdCA9IGRvbS5jcmVhdGVFbGVtZW50KHtcbiAgICAgIHRhZzogJ2RpdicsXG4gICAgICBhcHBlbmRUbzogdGhpcy5fcGFyZW50ID8gdGhpcy5fcGFyZW50IDogdW5kZWZpbmVkLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBpZDogdGhpcy5faWQsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5fcm9vdFNoYWRvdyA9IHRoaXMuX3Jvb3QuYXR0YWNoU2hhZG93KHtcbiAgICAgIG1vZGU6ICdjbG9zZWQnLFxuICAgIH0pO1xuXG4gICAgZG9tLmNyZWF0ZUVsZW1lbnQoe1xuICAgICAgdGFnOiAnc3R5bGUnLFxuICAgICAgaW5uZXJIVE1MOiBzdHlsZSxcbiAgICAgIGFwcGVuZFRvOiB0aGlzLl9yb290U2hhZG93LFxuICAgIH0pO1xuXG4gICAgdGhpcy5fY2hpbGRyZW5cbiAgICAgIC5maWx0ZXIoY2hpbGQgPT4gY2hpbGQpXG4gICAgICAuZm9yRWFjaChjaGlsZCA9PiB0aGlzLl9yb290U2hhZG93LmFwcGVuZENoaWxkKGNoaWxkKSk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9wYXJlbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5faWQpO1xuICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmUoKTtcbiAgICAgIH1cbiAgICB9LCAzMDAwKTtcbiAgfVxuXG4gIF9nZW5JZCgpIHtcbiAgICBjb25zdCBBTFBIQUJFVCA9ICcwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWic7XG4gICAgY29uc3QgSURfTEVOR1RIID0gODtcbiAgICB2YXIgcnRuID0gJyc7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBJRF9MRU5HVEg7IGkrKykge1xuICAgICAgcnRuICs9IEFMUEhBQkVULmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBBTFBIQUJFVC5sZW5ndGgpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJ0bjtcbiAgfVxuXG5cbn1cbiIsImltcG9ydCBzdHlsZSBmcm9tICcuL3N0eWxlJztcbmltcG9ydCBkb20gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbHMvZG9tJztcbmltcG9ydCBlbnYgZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29uZmlndXJhdGlvbi9jb25zdGFudHMnO1xuaW1wb3J0IHsgRmV0Y2ggfSBmcm9tICcuLi8uLi8uLi9mZXRjaCc7XG5pbXBvcnQgaWNvbnMgZnJvbSAnLi4vLi4vLi4vaWNvbnMnO1xuaW1wb3J0IEFsZXJ0IGZyb20gJy4uL2FsZXJ0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWNjb3VudCB7XG4gIF9yb290ID0gbnVsbDtcbiAgX3Jvb3RTaGFkb3cgPSBudWxsO1xuICBfcGFyZW50ID0gbnVsbDtcbiAgX21vZGUgPSAnbG9naW4nO1xuICBfdXNlciA9IG51bGw7XG4gIF9zdG9yZSA9IG51bGw7XG4gIF90cmFuc2xhdGlvbiA9IG51bGw7XG4gIF9vblVzZXJMb2dpbiA9ICgpID0+IHt9O1xuICBfb25BY2NvdW50Vmlld0NoYW5nZSA9ICgpID0+IHt9O1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgdGhpcy5fcGFyZW50ID0gb3B0aW9ucy5wYXJlbnRcbiAgICAgICAgPyBvcHRpb25zLnBhcmVudCA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX3N0b3JlID0gb3B0aW9ucy5zdG9yZVxuICAgICAgICA/IG9wdGlvbnMuc3RvcmUgOiB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl90cmFuc2xhdGlvbiA9IG9wdGlvbnMudHJhbnNsYXRpb25cbiAgICAgICAgPyBvcHRpb25zLnRyYW5zbGF0aW9uIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKG9wdGlvbnMub25Vc2VyTG9naW4pIHtcbiAgICAgICAgdGhpcy5fb25Vc2VyTG9naW4gPSBvcHRpb25zLm9uVXNlckxvZ2luO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMub25BY2NvdW50Vmlld0NoYW5nZSkge1xuICAgICAgICB0aGlzLl9vbkFjY291bnRWaWV3Q2hhbmdlID0gb3B0aW9ucy5vbkFjY291bnRWaWV3Q2hhbmdlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX19pbml0X18oKTtcbiAgfVxuXG4gIGdldCBfbGFiZWwoKSB7XG4gICAgcmV0dXJuIGRvbS5jcmVhdGVFbGVtZW50KHtcbiAgICAgIHRhZzogJ2xhYmVsJyxcbiAgICAgIGlubmVySFRNTDogdGhpcy5fbW9kZSA9PT0gJ2xvZ2luJ1xuICAgICAgICA/IHRoaXMuX3RyYW5zbGF0aW9uLmdldCgnc2lnbkluJykgOiB0aGlzLl9tb2RlID09PSAncmVnaXN0ZXInID8gdGhpcy5fdHJhbnNsYXRpb24uZ2V0KCdzaWduVXAnKSA6IG51bGwsXG4gICAgfSk7XG4gIH1cblxuICBnZXQgX2NvbnRlbnQoKSB7XG4gICAgY29uc3QgY29udGVudCA9IGRvbS5jcmVhdGVFbGVtZW50KHtcbiAgICAgIHRhZzogJ2Zvcm0nLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBjbGFzczogJ19fcGFnZWQtYWNjb3VudC1mb3JtJyxcbiAgICAgIH0sXG4gICAgICBpbm5lckhUTUw6IHRoaXMuX21vZGUgPT09ICdsb2dpbicgPyBgXG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiJHt0aGlzLl90cmFuc2xhdGlvbi5nZXQoJ3VzZXJuYW1lT3JFbWFpbCcpfVwiIGRhdGFJZD1cInVzZXJuYW1lXCIvPlxuICAgICAgICA8aW5wdXQgdHlwZT1cInBhc3N3b3JkXCIgcGxhY2Vob2xkZXI9XCIke3RoaXMuX3RyYW5zbGF0aW9uLmdldCgncGFzc3dvcmQnKX1cIiBkYXRhSWQ9XCJwYXNzd29yZFwiLz5cbiAgICAgICAgPGEgaHJlZj1cIiNcIj4ke3RoaXMuX3RyYW5zbGF0aW9uLmdldCgnZm9yZ290Q3JlZGVudGlhbHMnKX08L2E+XG4gICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiPiR7dGhpcy5fdHJhbnNsYXRpb24uZ2V0KCdzaWduSW4nKX08L2J1dHRvbj5cbiAgICAgICAgPHNwYW4+JHt0aGlzLl90cmFuc2xhdGlvbi5nZXQoJ29yVGV4dCcpfTwvc3Bhbj5cbiAgICAgIGAgOiB0aGlzLl9tb2RlID09PSAncmVnaXN0ZXInID8gYFxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIiR7dGhpcy5fdHJhbnNsYXRpb24uZ2V0KCdmdWxsTmFtZScpfVwiIGRhdGFJZD1cIm5hbWVcIi8+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwiZW1haWxcIiBwbGFjZWhvbGRlcj1cIiR7dGhpcy5fdHJhbnNsYXRpb24uZ2V0KCdlbWFpbCcpfVwiIGRhdGFJZD1cImVtYWlsXCIvPlxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIiR7dGhpcy5fdHJhbnNsYXRpb24uZ2V0KCd1c2VybmFtZScpfVwiIGRhdGFJZD1cInVzZXJuYW1lXCIvPlxuICAgICAgICA8aW5wdXQgdHlwZT1cInBhc3N3b3JkXCIgcGxhY2Vob2xkZXI9XCIke3RoaXMuX3RyYW5zbGF0aW9uLmdldCgncGFzc3dvcmQnKX1cIiBkYXRhSWQ9XCJwYXNzd29yZFwiLz5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJwYXNzd29yZFwiIHBsYWNlaG9sZGVyPVwiJHt0aGlzLl90cmFuc2xhdGlvbi5nZXQoJ2NvbmZpcm1QYXNzd29yZCcpfVwiIGRhdGFJZD1cImNvbmZpcm1QYXNzd29yZFwiLz5cbiAgICAgICAgPGxhYmVsIHN0eWxlPVwibWF4LXdpZHRoOiAzMDBweFwiIGZvcj1cInBvbGljeUNvbnNlbnRcIj48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJwb2xpY3lDb25zZW50XCI+WWVzLCBJIHdvdWxkIGxpa2UgdG8gcmVnaXN0ZXIgd2l0aCBwYWdlZC4gVGhlIHRlcm1zIG9mIHVzZSBhcHBseSB0byB0aGUgdXNlIG9mIHRoZSBhY2NvdW50LiBSZWFkIHRoZSA8YSBocmVmPVwiaHR0cHM6Ly9wYWdlZC5haS91c2VUZXJtUHJvZmlsZVwiPlRlcm1zIG9mIFVzZTwvYT4gYW5kIDxhIGhyZWY9XCJodHRwczovL3BhZ2VkLmFpL3ByaXZhY3lQb2xpY3lcIj4gUHJpdmFjeSBQb2xpY3kgPC9hPiBoZXJlLjwvYT48L2xhYmVsPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIj4ke3RoaXMuX3RyYW5zbGF0aW9uLmdldCgncmVnaXN0ZXInKX08L2J1dHRvbj5cbiAgICAgICAgPHNwYW4+JHt0aGlzLl90cmFuc2xhdGlvbi5nZXQoJ29yVGV4dCcpfTwvc3Bhbj5cbiAgICAgIGAgOiBgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJfX3BhZ2VkLXByb2ZpbGVcIj5cbiAgICAgICAgICA8c3Bhbj4ke2ljb25zLnByb2ZpbGV9PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGgxPiR7dGhpcy5fdXNlci51c2VybmFtZX08L2gxPlxuICAgICAgICA8aDM+PGI+JHt0aGlzLl90cmFuc2xhdGlvbi5nZXQoJ2Z1bGxOYW1lJyl9OjwvYj4gJHt0aGlzLl91c2VyLm5hbWV9PC9oMz5cbiAgICAgICAgPGgzPjxiPiR7dGhpcy5fdHJhbnNsYXRpb24uZ2V0KCdlbWFpbCcpfTo8L2I+ICR7dGhpcy5fdXNlci5lbWFpbH08L2gzPlxuICAgICAgICA8aDM+PGI+JHt0aGlzLl90cmFuc2xhdGlvbi5nZXQoJ2xhc3RTYXZlZCcpfTo8L2I+ICR7bmV3IERhdGUoKS50b0xvY2FsZURhdGVTdHJpbmcoJ2VuLXVzJywgeyB3ZWVrZGF5OlwibG9uZ1wiLCB5ZWFyOlwibnVtZXJpY1wiLCBtb250aDpcInNob3J0XCIsIGRheTpcIm51bWVyaWNcIn0pIH08L2gzPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIj4ke3RoaXMuX3RyYW5zbGF0aW9uLmdldCgnc2F2ZVNldHRpbmdzJyl9PC9idXR0b24+XG4gICAgICBgLFxuICAgICAgZXZlbnRzOiB7XG4gICAgICAgIHN1Ym1pdDogdGhpcy5fb25TdWJtaXQuYmluZCh0aGlzKSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBkb20uY3JlYXRlRWxlbWVudCh7XG4gICAgICB0YWc6ICdidXR0b24nLFxuICAgICAgYXBwZW5kVG86IGNvbnRlbnQsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIHR5cGU6ICdsaW5rJyxcbiAgICAgIH0sXG4gICAgICBldmVudHM6IHtcbiAgICAgICAgY2xpY2s6IGUgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9tb2RlICE9PSAncHJvZmlsZScpIHtcbiAgICAgICAgICAgIHRoaXMuX29uVmlld0NoYW5nZShlLCB0aGlzLl9tb2RlID09PSAnbG9naW4nID8gJ3JlZ2lzdGVyJyA6ICdsb2dpbicpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuX3VzZXIgPSBudWxsO1xuICAgICAgICAgIHRoaXMuX21vZGUgPSAnbG9naW4nO1xuICAgICAgICAgIHRoaXMuX3N0b3JlLnJlbW92ZSgnYXV0aF90b2tlbicpO1xuICAgICAgICAgIHRoaXMuX3N0b3JlLnJlbW92ZSgndXNlcl9zZXR0aW5ncycpO1xuICAgICAgICAgIHRoaXMuX29uVmlld0NoYW5nZShlLCAnbG9naW4nKTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBpbm5lckhUTUw6IHRoaXMuX21vZGUgPT09ICdsb2dpbicgPyB0aGlzLl90cmFuc2xhdGlvbi5nZXQoJ29wZW5BY2NvdW50JykgOiB0aGlzLl9tb2RlID09PSAncmVnaXN0ZXInID8gdGhpcy5fdHJhbnNsYXRpb24uZ2V0KCdzaWduSW4nKSA6IHRoaXMuX3RyYW5zbGF0aW9uLmdldCgnc2lnbk91dCcpLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBnZXQgX2NoaWxkcmVuKCkge1xuICAgIHJldHVybiBbXG4gICAgICB0aGlzLl9sYWJlbCxcbiAgICAgIHRoaXMuX2NvbnRlbnQsXG4gICAgXTtcbiAgfVxuXG4gIF9faW5pdF9fKCkge1xuICAgIHRoaXMuX2dldFNlc3Npb24oKS50aGVuKGRhdGEgPT4ge1xuICAgICAgaWYgKGRhdGEgJiYgZGF0YS51c2VyKSB7XG4gICAgICAgIHRoaXMuX21vZGUgPSAncHJvZmlsZSc7XG4gICAgICAgIHRoaXMuX3VzZXIgPSBkYXRhLnVzZXI7XG4gICAgICB9XG4gICAgICBjb25zdCBleGlzdHMgPSBkb20uc2VsZWN0RWxlbWVudChgLiR7ZW52LmNsYXNzZXMuYWNjb3VudH1gLCB0aGlzLl9wYXJlbnQpO1xuICAgICAgdGhpcy5fcm9vdCA9IGV4aXN0cyA/IGV4aXN0cyA6IGRvbS5jcmVhdGVFbGVtZW50KHtcbiAgICAgICAgdGFnOiAnZGl2JyxcbiAgICAgICAgYXBwZW5kVG86IHRoaXMuX3BhcmVudCA/IHRoaXMuX3BhcmVudCA6IHVuZGVmaW5lZCxcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgIGNsYXNzOiBlbnYuY2xhc3Nlcy5hY2NvdW50LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGlmICghZXhpc3RzKSB7XG4gICAgICAgIHRoaXMuX3Jvb3RTaGFkb3cgPSB0aGlzLl9yb290LmF0dGFjaFNoYWRvdyh7XG4gICAgICAgICAgbW9kZTogJ29wZW4nLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZG9tLmNyZWF0ZUVsZW1lbnQoe1xuICAgICAgICB0YWc6ICdzdHlsZScsXG4gICAgICAgIGlubmVySFRNTDogc3R5bGUsXG4gICAgICAgIGFwcGVuZFRvOiB0aGlzLl9yb290U2hhZG93LFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuX2NoaWxkcmVuXG4gICAgICAgIC5maWx0ZXIoY2hpbGQgPT4gY2hpbGQpXG4gICAgICAgIC5mb3JFYWNoKGNoaWxkID0+IHRoaXMuX3Jvb3RTaGFkb3cuYXBwZW5kQ2hpbGQoY2hpbGQpKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgX29uVmlld0NoYW5nZShldmVudCwgbW9kZSkge1xuICAgIGlmIChldmVudCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9tb2RlID0gbW9kZTtcbiAgICB0aGlzLl9yb290U2hhZG93LmlubmVySFRNTCA9ICcnO1xuICAgIHRoaXMuX19pbml0X18oKTtcbiAgICB0aGlzLl9vbkFjY291bnRWaWV3Q2hhbmdlKG1vZGUpO1xuICB9XG5cbiAgX29uU3VibWl0KGV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCBmb3JtID0gZXZlbnQucGF0aCA/IEFycmF5LmZyb20oZXZlbnQucGF0aCkuZmluZChlbCA9PiBlbC50YWdOYW1lID09PSAnRk9STScpIDogdGhpcy5fcm9vdFNoYWRvdy5xdWVyeVNlbGVjdG9yKCcuX19wYWdlZC1hY2NvdW50LWZvcm0nKTtcbiAgICBjb25zdCBpbnB1dHMgPSBBcnJheS5mcm9tKGZvcm0uY2hpbGROb2RlcykuZmlsdGVyKGVsID0+IGVsLnRhZ05hbWUgPT09ICdJTlBVVCcpO1xuICAgIGNvbnN0IGVycm9ycyA9IEFycmF5LmZyb20oZm9ybS5jaGlsZE5vZGVzKVxuICAgICAgLmZpbHRlcihlbCA9PiBlbC50YWdOYW1lID09PSAnUCcpXG4gICAgICAuZmlsdGVyKGVsID0+IGVsLmNsYXNzTmFtZSA9PT0gJ19fcGFnZWQtZm9ybS1lcnJvcicpO1xuXG4gICAgY29uc3QgdmFsdWUgPSBpbnB1dHMucmVkdWNlKChwYXlsb2FkLCBpbnB1dCkgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gaW5wdXQuZ2V0QXR0cmlidXRlKCdkYXRhSWQnKTtcbiAgICAgIGlmIChrZXkgJiYgaW5wdXQudmFsdWUpIHtcbiAgICAgICAgcGF5bG9hZFtrZXldID0gaW5wdXQudmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9LCB7fSk7XG5cbiAgICBlcnJvcnMuZm9yRWFjaChlcnJvciA9PiBlcnJvci5yZW1vdmUoKSk7XG5cbiAgICBzd2l0Y2ggKHRoaXMuX21vZGUpIHtcbiAgICAgIGNhc2UgJ2xvZ2luJzpcbiAgICAgICAgdGhpcy5fbG9naW4odmFsdWUsIGZvcm0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3JlZ2lzdGVyJzpcbiAgICAgICAgdGhpcy5fcmVnaXN0ZXIodmFsdWUsIGZvcm0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3Byb2ZpbGUnOlxuICAgICAgICB0aGlzLl9zYXZlU2V0dGluZ3ModmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBfbG9naW4odmFsdWUsIGZvcm0pIHtcbiAgICAgIEZldGNoLnBvc3QoJy9hcGkvYXV0aC9zaWduaW4nLCB7XG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHZhbHVlIHx8IHt9KSxcbiAgICAgIH0pLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJlc3BvbnNlLmpzb24oKS50aGVuKHRva2VuID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fc3RvcmUuc2V0KCdhdXRoX3Rva2VuJywgdG9rZW4udG9rZW4pO1xuICAgICAgICAgICAgICB0aGlzLl9nZXRTZXNzaW9uKCkudGhlbihkYXRhID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLnVzZXIpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChkYXRhLnVzZXIuc2V0dGluZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RvcmUuc2V0KCdjb25maWcnLCBkYXRhLnVzZXIuc2V0dGluZ3MpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdG9yZS5zZXQoJ3VzZXJfc2V0dGluZ3MnLCBkYXRhLnVzZXIuc2V0dGluZ3MpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgdGhpcy5fdXNlciA9IGRhdGEudXNlcjtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX29uVmlld0NoYW5nZShudWxsLCAncHJvZmlsZScpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5fb25Vc2VyTG9naW4oKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgZm9ybS5pbnNlcnRCZWZvcmUoZG9tLmNyZWF0ZUVsZW1lbnQoe1xuICAgICAgICAgICAgICAgICAgICB0YWc6ICdwJyxcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiAnX19wYWdlZC1mb3JtLWVycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJIVE1MOiAnSW5jb3JyZWN0IHVzZXJuYW1lIG9yIHBhc3N3b3JkLiBDaGVjayB5b3VyIGNyZWRlbnRpYWxzIGFyZSBjb3JyZWN0IGFuZCB0cnkgYWdhaW4nLFxuICAgICAgICAgICAgICAgICAgfSksIGZvcm0ucXVlcnlTZWxlY3RvcignYnV0dG9uW3R5cGU9XCJzdWJtaXRcIl0nKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvcm0uaW5zZXJ0QmVmb3JlKGRvbS5jcmVhdGVFbGVtZW50KHtcbiAgICAgICAgICAgIHRhZzogJ3AnLFxuICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICBjbGFzczogJ19fcGFnZWQtZm9ybS1lcnJvcicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5uZXJIVE1MOiAnSW5jb3JyZWN0IHVzZXJuYW1lIG9yIHBhc3N3b3JkLiBDaGVjayB5b3VyIGNyZWRlbnRpYWxzIGFyZSBjb3JyZWN0IGFuZCB0cnkgYWdhaW4nLFxuICAgICAgICAgIH0pLCBmb3JtLnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvblt0eXBlPVwic3VibWl0XCJdJykpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIF9yZWdpc3Rlcih2YWx1ZSwgZm9ybSkge1xuXG4gICAgICBpZihmb3JtLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9XCJjaGVja2JveFwiXScpLmNoZWNrZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgZm9ybS5pbnNlcnRCZWZvcmUoZG9tLmNyZWF0ZUVsZW1lbnQoe1xuICAgICAgICAgICAgICB0YWc6ICdwJyxcbiAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgICAgY2xhc3M6ICdfX3BhZ2VkLWZvcm0tZXJyb3InLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBpbm5lckhUTUw6IFwiUGxlYXNlIGFjY2VwdCBvdXIgdGVybXMhXCIsXG4gICAgICAgICAgfSksIGZvcm0ucXVlcnlTZWxlY3RvcignYnV0dG9uW3R5cGU9XCJzdWJtaXRcIl0nKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgRmV0Y2gucG9zdCgnL2FwaS9hdXRoL3JlZ2lzdGVyJywge1xuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkodmFsdWUgfHwge30pLFxuICAgIH0pLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2UuanNvbigpLnRoZW4oZGF0YSA9PiB7XG4gICAgICBpZiAoZGF0YSAmJiBkYXRhLmNvZGUgIT09IDIwMCkge1xuICAgICAgICBmb3JtLmluc2VydEJlZm9yZShkb20uY3JlYXRlRWxlbWVudCh7XG4gICAgICAgICAgdGFnOiAncCcsXG4gICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgY2xhc3M6ICdfX3BhZ2VkLWZvcm0tZXJyb3InLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5uZXJIVE1MOiBkYXRhLm1lc3NhZ2UsXG4gICAgICAgIH0pLCBmb3JtLnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvblt0eXBlPVwic3VibWl0XCJdJykpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9vblZpZXdDaGFuZ2UodW5kZWZpbmVkLCAnbG9naW4nKTtcbiAgICAgICAgbmV3IEFsZXJ0KHsgcGFyZW50OiB0aGlzLl9yb290U2hhZG93LCB0ZXh0OiBkYXRhLm1lc3NhZ2UgfSlcbiAgICAgIH1cbiAgICB9KSk7XG4gIH1cblxuICBfc2F2ZVNldHRpbmdzKHZhbHVlKSB7XG4gICAgRmV0Y2gucG9zdCgnL2FwaS91c2VyL3NldHRpbmdzJywge1xuICAgICAgaGVhZGVyczoge1xuICAgICAgICBBdXRob3JpemF0aW9uOiB0aGlzLl9zdG9yZS5nZXQoJ2F1dGhfdG9rZW4nKSxcbiAgICAgIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh0aGlzLl9zdG9yZS5nZXQoJ2NvbmZpZycpIHx8IHt9KSxcbiAgICB9KS50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLmpzb24oKSkudGhlbihkYXRhID0+IHtcbiAgICAgIHRoaXMuX3N0b3JlLnNldCgndXNlcl9zZXR0aW5ncycsIGRhdGEuc2V0dGluZ3MgfHwge30pO1xuICAgICAgbmV3IEFsZXJ0KHsgcGFyZW50OiB0aGlzLl9yb290U2hhZG93LCB0ZXh0OiBkYXRhLm1lc3NhZ2UgfSlcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIF9nZXRTZXNzaW9uKCkge1xuICAgIHJldHVybiBhd2FpdCBGZXRjaC5nZXQoJy9hcGkvYXV0aC9zZXNzaW9uJywge1xuICAgICAgaGVhZGVyczoge1xuICAgICAgICBBdXRob3JpemF0aW9uOiB0aGlzLl9zdG9yZS5nZXQoJ2F1dGhfdG9rZW4nKSxcbiAgICAgIH0sXG4gICAgfSkudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS5qc29uKCkpO1xuICB9XG59XG4iLCJjb25zdCBzdHlsZXMgPSBgXG4gIDpob3N0IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgYm9yZGVyLXJhZGl1czogNXB4O1xuICAgIHdpZHRoOiBmaXQtY29udGVudDtcbiAgICBtaW4td2lkdGg6IDMwMHB4O1xuICAgIC8qbWF4LXdpZHRoOiA0MzBweDsqL1xuICAgIG1heC13aWR0aDogNTUwcHg7XG4gICAgei1pbmRleDogMTAwMDtcbiAgICB0b3A6IGF1dG87XG4gICAgYm90dG9tOiAwO1xuICAgIGxlZnQ6IDIwcHg7XG4gICAgYm94LXNoYWRvdzogLTNweCAwcHggMTZweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE1KTtcbiAgICAtd2Via2l0LWJveC1zaGFkb3c6IC0zcHggMHB4IDE2cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7XG4gICAgY29sb3I6ICMyMjJEMzk7XG4gICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgaGVpZ2h0OiBmaXQtY29udGVudDtcbiAgICAvLyBtaW4taGVpZ2h0OiBmaXQtY29udGVudDtcbiAgICAvLyBtYXgtaGVpZ2h0OiA5NXB4O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gIH1cblxuICA6aG9zdCAucGFnZWQtcmVhZGVyLWRyYWdnZXIge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjMjIyRDM5O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBwYWRkaW5nOiAwIDEycHg7XG4gICAgY3Vyc29yOiBncmFiO1xuICAgIG1hcmdpbi1ib3R0b206IDEycHhcbiAgfVxuXG4gIDpob3N0IC5wYWdlZC1yZWFkZXItZHJhZ2dlciBoMSB7XG4gICAgZm9udC1zaXplOiAyMnB4O1xuICAgIG1hcmdpbjogMDtcbiAgICBtYXJnaW4tcmlnaHQ6IDEwMHB4O1xuICB9XG4gIFxuICA6aG9zdCAucGFnZWQtcmVhZGVyLWRyYWdnZXIgYnV0dG9uIHtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICBtYXJnaW46IGF1dG8gMDtcbiAgICBoZWlnaHQ6IDI0cHg7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG5cbiAgOmhvc3QgLl9fcGFnZWRfcmVhZGVyX3BsYXksIDpob3N0IC5fX3BhZ2VkX3JlYWRlcl9mb3J3YXJkLCA6aG9zdCAuX19wYWdlZF9yZWFkZXJfYmFja3dhcmQsIDpob3N0IC5fX3BhZ2VkX3JlYWRlcl9zZXR0aW5ncyB7XG4gICAgd2lkdGg6IGZpdC1jb250ZW50O1xuICAgIGJhY2tncm91bmQ6ICMyMjJEMzk7XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBvdXRsaW5lOiBub25lO1xuICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICBtYXJnaW4tYm90dG9tOiAxMnB4O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBwYWRkaW5nOiA2cHg7XG4gIH1cblxuICA6aG9zdCAuX19wYWdlZF9yZWFkZXJfcGxheSBzdmcsIDpob3N0IC5fX3BhZ2VkX3JlYWRlcl9mb3J3YXJkIHN2ZywgOmhvc3QgLl9fcGFnZWRfcmVhZGVyX2JhY2t3YXJkIHN2ZywgOmhvc3QgLl9fcGFnZWRfcmVhZGVyX3NldHRpbmdzIHN2ZyB7XG4gICAgd2lkdGg6IDI0cHg7XG4gICAgaGVpZ2h0OiAyNHB4O1xuICAgIG1hcmdpbjogMDtcbiAgfVxuXG4gIDpob3N0IC5fX3BhZ2VkX3JlYWRlcl9jdXJzb3Ige1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2lkdGg6IDYwcHg7XG4gICAgaGVpZ2h0OiAzNHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIG1hcmdpbi1sZWZ0OiAxNHB4O1xuICB9XG5cblxuICA6aG9zdCAuX19wYWdlZF9yZWFkZXJfY3Vyc29yIGlucHV0IHsgXG4gICAgb3BhY2l0eTogMDtcbiAgICB3aWR0aDogMDtcbiAgICBoZWlnaHQ6IDA7XG4gIH1cblxuICA6aG9zdCAuX19wYWdlZF9yZWFkZXJfY3Vyc29yIC5zbGlkZXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNjY2M7XG4gICAgLXdlYmtpdC10cmFuc2l0aW9uOiAuNHM7XG4gICAgdHJhbnNpdGlvbjogLjRzO1xuICAgIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgfVxuXG4gIDpob3N0IC5fX3BhZ2VkX3JlYWRlcl9jdXJzb3IgLnNsaWRlcjpiZWZvcmUge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBjb250ZW50OiBcIlwiO1xuICAgIGhlaWdodDogMjZweDtcbiAgICB3aWR0aDogMjZweDtcbiAgICBsZWZ0OiA0cHg7XG4gICAgYm90dG9tOiA0cHg7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgLXdlYmtpdC10cmFuc2l0aW9uOiAuNHM7XG4gICAgdHJhbnNpdGlvbjogLjRzO1xuICAgIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgfVxuXG4gIDpob3N0IC5fX3BhZ2VkX3JlYWRlcl9jdXJzb3IgaW5wdXQ6Y2hlY2tlZCArIC5zbGlkZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICMyMjJEMzk7XG4gIH1cblxuICA6aG9zdCAuX19wYWdlZF9yZWFkZXJfY3Vyc29yIGlucHV0OmZvY3VzICsgLnNsaWRlciB7XG4gICAgYm94LXNoYWRvdzogMCAwIDFweCAjMjIyRDM5O1xuICB9XG5cbiAgOmhvc3QgLl9fcGFnZWRfcmVhZGVyX2N1cnNvciBpbnB1dDpjaGVja2VkICsgLnNsaWRlcjpiZWZvcmUge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDI2cHgpO1xuICAgIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMjZweCk7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDI2cHgpO1xuICB9XG4gIFxuICA6aG9zdCAucGFnZWRfcG9wVXAge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgYm90dG9tOiAxNTBweDtcbiAgICBwYWRkaW5nOiAxMHB4O1xuICAgIHdpZHRoOiA0MTBweDtcbiAgICB6LWluZGV4OiA5OTtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCBibGFjaztcbiAgICBib3JkZXItcmFkaXVzOiAzMHB4O1xuICB9XG4gIFxuICA6aG9zdCAucGFnZWRfcG9wVXAgYnV0dG9uIHtcbiAgICB3aWR0aDogZml0LWNvbnRlbnQ7XG4gICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgIGJhY2tncm91bmQ6ICMyMjJEMzk7XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBvdXRsaW5lOiBub25lO1xuICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICBtYXJnaW4tYm90dG9tOiAxMnB4O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBwYWRkaW5nOiA2cHg7XG4gIH0gXG5gO1xuXG5leHBvcnQgZGVmYXVsdCBzdHlsZXM7XG4iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBUcmFuc2xhdGlvbiB7XG4gIF9sYW5ndWFnZSA9ICdFTic7XG4gIF9sYW5ndWFnZXMgPSBbJ0VOJywgJ0RFJ107XG4gIF9kYXRhID0gbmV3IE1hcCgpO1xuXG4gIGNvbnN0cnVjdG9yKGxuZykge1xuICAgIHRoaXMuX2xhbmd1YWdlID0gbG5nO1xuICAgIHRoaXMuX2xhbmd1YWdlcy5mb3JFYWNoKGxhbmd1YWdlID0+IHtcbiAgICAgIGNvbnN0IHRyYW5zbGF0aW9ucyA9IHRoaXMuZ2V0X3RyYW5zbGF0aW9uX2ZpbGUobGFuZ3VhZ2UpO1xuICAgICAgT2JqZWN0LmtleXModHJhbnNsYXRpb25zKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5fZGF0YS5oYXMobGFuZ3VhZ2UpKSB7XG4gICAgICAgICAgdGhpcy5fZGF0YS5zZXQobGFuZ3VhZ2UsIG5ldyBNYXAoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZGF0YS5nZXQobGFuZ3VhZ2UpLnNldChrZXksIHRyYW5zbGF0aW9uc1trZXldKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0X3RyYW5zbGF0aW9uX2ZpbGUoa2V5KSB7XG4gICAgY29uc3QgaW1wb3J0ZWQgPSByZXF1aXJlKCcuL2kxOG4vJyArIGtleS50b0xvd2VyQ2FzZSgpICsgJy5qcycpO1xuICAgIGlmIChpbXBvcnRlZCAmJiBpbXBvcnRlZC5kZWZhdWx0KSB7XG4gICAgICByZXR1cm4gaW1wb3J0ZWQuZGVmYXVsdDtcbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgc2V0X2xhbmd1YWdlKGxhbmd1YWdlKSB7XG4gICAgdGhpcy5fbGFuZ3VhZ2UgPSBsYW5ndWFnZTtcbiAgfVxuXG4gIGdldChrZXkpIHtcbiAgICBpZiAoIXRoaXMuX2RhdGEuaGFzKHRoaXMuX2xhbmd1YWdlKSkge1xuICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9kYXRhLmdldCh0aGlzLl9sYW5ndWFnZSkuaGFzKGtleSkpIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9kYXRhLmdldCh0aGlzLl9sYW5ndWFnZSkuZ2V0KGtleSk7XG4gIH1cblxufVxuIiwiaW1wb3J0IHN0eWxlIGZyb20gJy4vc3R5bGUnO1xuaW1wb3J0IGRvbSBmcm9tICcuLi8uLi8uLi8uLi91dGlscy9kb20nO1xuaW1wb3J0IGVudiBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb25maWd1cmF0aW9uL2NvbnN0YW50cyc7XG5pbXBvcnQgaWNvbnMgZnJvbSAnLi4vLi4vLi4vaWNvbnMnO1xuaW1wb3J0IElucHV0IGZyb20gJy4uL2lucHV0JztcbmltcG9ydCBUcmFuc2xhdGUgZnJvbSAnLi4vLi4vLi4vdHJhbnNsYXRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFkZXIge1xuICBfcm9vdCA9IG51bGw7XG4gIF9yb290U2hhZG93ID0gbnVsbDtcbiAgX3BhcmVudCA9IG51bGw7XG4gIF9pc0VuYWJsZWQgPSBmYWxzZTtcbiAgX2lzSG92ZXJlZCA9IGZhbHNlO1xuICBfaXNEcmFnZ2luZyA9IGZhbHNlO1xuICBfc3ludGggPSBudWxsO1xuICBfZHJhZ2dlciA9IG51bGw7XG4gIF9kcmFnZ2VyUG9zaXRpb24gPSB7IHBvczE6IDAsIHBvczI6IDAsIHBvczM6IDAsIHBvczQ6IDAgfTtcbiAgX3BvcFVwID0gbnVsbDtcbiAgX2lzQXV0b1BsYXkgPSBmYWxzZTtcbiAgX2lzU3BlYWtpbmcgPSBmYWxzZTtcbiAgX2N1cnJlbnRQYXJlbnQgPSBudWxsO1xuICBfY3VycmVudFRleHQgPSBudWxsO1xuICBfY3VycmVudExpbmUgPSAwO1xuICBfcmVhZGluZ0xpbmVzID0gW107XG4gIF9jdXJyZW50RWxlbWVudCA9IG51bGw7XG4gIF9sYW5ndWFnZUNoYW5nZXIgPSBudWxsO1xuICBfYXV0b1BsYXlCdXR0b24gPSBudWxsO1xuICBfY3Vyc29yRW5hYmxlZCA9IGZhbHNlO1xuICBfdHJhbnNsYXRpb24gPSBudWxsO1xuICBfcmVhZGVySW5wdXRzID0gW107XG4gIF9zZXR0aW5ncyA9IHtcbiAgICByYXRlOiAxLFxuICAgIHBpdGNoOiAxLFxuICAgIHZvbHVtZTogMSxcbiAgICBsYW5nOiAnRU4nLFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICBpZiAoIXRoaXMuX3BhcmVudCkge1xuICAgICAgdGhpcy5fcGFyZW50ID0gZG9jdW1lbnQuYm9keTtcbiAgICB9XG4gICAgdGhpcy5fdHJhbnNsYXRpb24gPSBuZXcgVHJhbnNsYXRlKHRoaXMuX3NldHRpbmdzLmxhbmcpO1xuICAgIHRoaXMuX19pbml0X18oKTtcbiAgfVxuXG4gIHNldCBlbmFibGVkKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBpZiAoIXRoaXMuX2lzRW5hYmxlZCkge1xuICAgICAgICB0aGlzLl9wYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fcmVhZEV2ZW50KTtcbiAgICAgICAgdGhpcy5fcm9vdC5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9wYXJlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fcmVhZEV2ZW50KTtcbiAgICAgIHRoaXMuX3Jvb3Quc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgIHRoaXMuX3N5bnRoLmNhbmNlbCgpO1xuICAgICAgd2luZG93LmlzQXV0b1BsYXkgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2F1dG9QbGF5QnV0dG9uLmlubmVySFRNTCA9IGljb25zLnBsYXk7XG4gICAgfVxuICAgIHRoaXMuX2lzRW5hYmxlZCA9IHZhbHVlO1xuICB9XG5cbiAgc2V0IGxhbmd1YWdlKHZhbHVlKSB7XG4gICAgdGhpcy5fc2V0dGluZ3MubGFuZyA9IHZhbHVlO1xuICAgIHRoaXMuX2xhbmd1YWdlQ2hhbmdlci52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuX3RyYW5zbGF0aW9uLnNldF9sYW5ndWFnZSh2YWx1ZSk7XG4gICAgdGhpcy5fY2hhbmdlTGFuZ3VhZ2UoKTtcbiAgfVxuXG4gIF9jaGFuZ2VMYW5ndWFnZSgpIHtcbiAgICAvL0NoYW5nZSBlbGVtZW50cy1pbm5lckh0bWxcbiAgICBjb25zdCB0YWJzID0gQXJyYXkuZnJvbSh0aGlzLl9yb290U2hhZG93LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhSWRdJykpO1xuICAgIHRhYnMuZm9yRWFjaCh0YWIgPT4ge1xuICAgICAgdGFiLmlubmVySFRNTCA9IHRoaXMuX3RyYW5zbGF0aW9uLmdldCh0YWIuZ2V0QXR0cmlidXRlKCdkYXRhaWQnKSk7XG4gICAgfSlcblxuICAgIC8vQ2hhbmdlIGlucHV0LWxhYmVsc1xuICAgIGNvbnN0IGlucHV0cyA9IEFycmF5LmZyb20odGhpcy5fcm9vdFNoYWRvdy5xdWVyeVNlbGVjdG9yQWxsKCcuX19wYWdlZC1pbnB1dCcpKTtcbiAgICBpbnB1dHMuZm9yRWFjaChpbnB1dCA9PiB7XG4gICAgICBjb25zdCBzZWFyY2hNb2R1bGVSb290ID0gaW5wdXQgJiYgaW5wdXQuc2hhZG93Um9vdDtcbiAgICAgIGNvbnN0IGxhYmVsID0gc2VhcmNoTW9kdWxlUm9vdC5xdWVyeVNlbGVjdG9yKCdsYWJlbCcpO1xuICAgICAgbGFiZWwuaW5uZXJIVE1MID0gdGhpcy5fdHJhbnNsYXRpb24uZ2V0KGlucHV0LmdldEF0dHJpYnV0ZSgnbGFiZWxLZXknKSk7XG4gICAgfSlcbiAgfVxuXG4gIF9faW5pdF9fKCkge1xuICAgIHRoaXMuX2NyZWF0ZVNldHRpbmdzRGlhbG9nKCk7XG4gICAgdGhpcy5fcmVhZEV2ZW50ID0gdGhpcy5fcmVhZEV2ZW50LmJpbmQodGhpcyk7XG4gICAgdGhpcy5fdHJhbnNsYXRpb24uc2V0X2xhbmd1YWdlKHRoaXMuX3NldHRpbmdzLmxhbmcpO1xuICAgIHRoaXMuX3N5bnRoID0gd2luZG93LnNwZWVjaFN5bnRoZXNpcztcbiAgICB0aGlzLl9zeW50aC5yZXN1bWUoKTtcbiAgICB0aGlzLl9zeW50aC5jYW5jZWwoKTtcbiAgfVxuXG4gIF9jcmVhdGVTZXR0aW5nc0RpYWxvZygpIHtcbiAgICB0aGlzLl9yb290ID0gZG9tLmNyZWF0ZUVsZW1lbnQoe1xuICAgICAgdGFnOiAnZGl2JyxcbiAgICAgIGFwcGVuZFRvOiB0aGlzLl9wYXJlbnQgPyB0aGlzLl9wYXJlbnQgOiB1bmRlZmluZWQsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGNsYXNzOiBlbnYuY2xhc3Nlcy5yZWFkZXIsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5fcm9vdFNoYWRvdyA9IHRoaXMuX3Jvb3QuYXR0YWNoU2hhZG93KHtcbiAgICAgIG1vZGU6ICdvcGVuJyxcbiAgICB9KTtcblxuICAgIHRoaXMuX3Jvb3RTaGFkb3cuaW5uZXJIVE1MID0gYGA7XG5cbiAgICB0aGlzLl9kcmFnZ2VyID0gZG9tLmNyZWF0ZUVsZW1lbnQoe1xuICAgICAgdGFnOiAnZGl2JyxcbiAgICAgIGFwcGVuZFRvOiB0aGlzLl9yb290U2hhZG93LFxuICAgICAgLyppbm5lckhUTUw6IGBcbiAgICAgICAgPGgxPlNjcmVlbiBSZWFkZXI8L2gxPlxuICAgICAgYCwqL1xuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBjbGFzczogJ3BhZ2VkLXJlYWRlci1kcmFnZ2VyJyxcbiAgICAgICAgLy9kYXRhSWQ6ICdzY3JlZW5SZWFkZXInXG4gICAgICB9LFxuICAgICAgZXZlbnRzOiB7XG4gICAgICAgIG1vdXNlZG93bjogdGhpcy5fbW91c2VEb3duRXZlbnQuYmluZCh0aGlzKSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBkb20uY3JlYXRlRWxlbWVudCh7XG4gICAgICB0YWc6ICdoMScsXG4gICAgICBhcHBlbmRUbzogdGhpcy5fZHJhZ2dlcixcbiAgICAgIC8qaW5uZXJIVE1MOiBgXG4gICAgICAgIDxoMT5TY3JlZW4gUmVhZGVyPC9oMT5cbiAgICAgIGAsKi9cbiAgICAgIGlubmVySFRNTDogdGhpcy5fdHJhbnNsYXRpb24uZ2V0KCdzY3JlZW5SZWFkZXInKSxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgZGF0YUlkOiAnc2NyZWVuUmVhZGVyJ1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8qY29uc3QgeyBoZWlnaHQgfSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuX3Jvb3RTaGFkb3cucXVlcnlTZWxlY3RvcignLnBhZ2VkLXJlYWRlci1kcmFnZ2VyJykpO1xuICAgIGNvbnN0IGhlYWRlckhlaWdodCA9IE51bWJlcihoZWlnaHQuc3BsaXQoJ3B4JylbMF0pO1xuICAgIHRoaXMuX3Jvb3Quc3R5bGUubWF4SGVpZ2h0ID0gYCR7aGVhZGVySGVpZ2h0ICsgODB9cHhgOyovXG5cblxuICAgIGRvbS5jcmVhdGVFbGVtZW50KHtcbiAgICAgIHRhZzogJ2J1dHRvbicsXG4gICAgICBhcHBlbmRUbzogdGhpcy5fZHJhZ2dlcixcbiAgICAgIGlubmVySFRNTDogaWNvbnMuY2FuY2VsLFxuICAgICAgZXZlbnRzOiB7XG4gICAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLl9yb290LnN0eWxlLmRpc3BsYXkgPSAnbm9uZScsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLyp0aGlzLl9wb3BVcCA9IGRvbS5jcmVhdGVFbGVtZW50KHtcbiAgICAgIHRhZzogJ2RpdicsXG4gICAgICBhcHBlbmRUbzogdGhpcy5fcm9vdFNoYWRvdyxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgY2xhc3M6ICdwYWdlZF9wb3BVcCdcbiAgICAgIH0sXG4gICAgICBpbm5lckhUTUw6ICc8cD5Wb2ljZSBxdWFsaXR5IGNhbiBzdWZmZXIsIGlmIHByZWZlcnJlZCBsYW5ndWFnZSBvZiB5b3VyIHN5c3RlbSBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIGxhbmd1YWdlIG9mIHRoZSBzY3JlZW4gcmVhZGVyLjwvcD4nXG4gICAgfSk7XG5cbiAgICBkb20uY3JlYXRlRWxlbWVudCh7XG4gICAgICB0YWc6ICdidXR0b24nLFxuICAgICAgYXBwZW5kVG86IHRoaXMuX3BvcFVwLFxuICAgICAgaW5uZXJIVE1MOiAnT2theScsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGNsYXNzOiAnYnV0dG9uJ1xuICAgICAgfSxcbiAgICAgIGV2ZW50czoge1xuICAgICAgICBjbGljazogKCkgPT4gdGhpcy5fcG9wVXAuc3R5bGUuZGlzcGxheSA9ICdub25lJyxcbiAgICAgIH0sXG4gICAgfSk7Ki9cblxuICAgIGRvbS5jcmVhdGVFbGVtZW50KHtcbiAgICAgIHRhZzogJ3N0eWxlJyxcbiAgICAgIGlubmVySFRNTDogc3R5bGUsXG4gICAgICBhcHBlbmRUbzogdGhpcy5fcm9vdFNoYWRvdyxcbiAgICB9KTtcblxuICAgIGNvbnN0IGN1cnNvcl9zd2l0Y2ggPSBkb20uY3JlYXRlRWxlbWVudCh7XG4gICAgICB0YWc6ICdsYWJlbCcsXG4gICAgICBhcHBlbmRUbzogdGhpcy5fcm9vdFNoYWRvdyxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgY2xhc3M6ICdfX3BhZ2VkX3JlYWRlcl9jdXJzb3InLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGRvbS5jcmVhdGVFbGVtZW50KHtcbiAgICAgIHRhZzogJ2lucHV0JyxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgdHlwZTogJ2NoZWNrYm94JyxcbiAgICAgIH0sXG4gICAgICBhcHBlbmRUbzogY3Vyc29yX3N3aXRjaCxcbiAgICAgIGV2ZW50czoge1xuICAgICAgICBjaGFuZ2U6IChldmVudCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2N1cnNvckVuYWJsZWQgPSBldmVudC50YXJnZXQuY2hlY2tlZDtcbiAgICAgICAgICB0aGlzLl9yb290U2hhZG93LnF1ZXJ5U2VsZWN0b3IoJy5fX3BhZ2VkX3JlYWRlcl9wbGF5JykuaW5uZXJIVE1MID0gaWNvbnMucGxheTtcbiAgICAgICAgICBpZih0aGlzLl9yZWFkaW5nTGluZXNbdGhpcy5fY3VycmVudExpbmVdKSB7XG4gICAgICAgICAgICB0aGlzLl9tb3VzZVJlYWRlckV2ZW50U3R5bGVDb250cmFzdCh0aGlzLl9yZWFkaW5nTGluZXNbdGhpcy5fY3VycmVudExpbmVdLmVsZW0sIGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgd2luZG93LmlzQXV0b1BsYXkgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9zeW50aC5jYW5jZWwoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZG9tLmNyZWF0ZUVsZW1lbnQoe1xuICAgICAgdGFnOiAnZGl2JyxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgY2xhc3M6ICdzbGlkZXInLFxuICAgICAgfSxcbiAgICAgIGFwcGVuZFRvOiBjdXJzb3Jfc3dpdGNoLFxuICAgIH0pO1xuXG4gICAgZG9tLmNyZWF0ZUVsZW1lbnQoe1xuICAgICAgdGFnOiAnYnV0dG9uJyxcbiAgICAgIGFwcGVuZFRvOiB0aGlzLl9yb290U2hhZG93LFxuICAgICAgaW5uZXJIVE1MOiBpY29ucy5iYWNrd2FyZCxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgY2xhc3M6ICdfX3BhZ2VkX3JlYWRlcl9iYWNrd2FyZCcsXG4gICAgICB9LFxuICAgICAgZXZlbnRzOiB7XG4gICAgICAgIGNsaWNrOiB0aGlzLl9vbkJhY2t3YXJkLmJpbmQodGhpcyksXG4gICAgICB9LFxuICAgIH0pO1xuICAgIFxuICAgIHRoaXMuX2F1dG9QbGF5QnV0dG9uID0gZG9tLmNyZWF0ZUVsZW1lbnQoe1xuICAgICAgdGFnOiAnYnV0dG9uJyxcbiAgICAgIGFwcGVuZFRvOiB0aGlzLl9yb290U2hhZG93LFxuICAgICAgaW5uZXJIVE1MOiB3aW5kb3cuaXNBdXRvUGxheSA/IGljb25zLnBhdXNlIDogaWNvbnMucGxheSxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgY2xhc3M6ICdfX3BhZ2VkX3JlYWRlcl9wbGF5JyxcbiAgICAgIH0sXG4gICAgICBldmVudHM6IHtcbiAgICAgICAgY2xpY2s6IHRoaXMuX29uUGxheS5iaW5kKHRoaXMpLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGRvbS5jcmVhdGVFbGVtZW50KHtcbiAgICAgIHRhZzogJ2J1dHRvbicsXG4gICAgICBhcHBlbmRUbzogdGhpcy5fcm9vdFNoYWRvdyxcbiAgICAgIGlubmVySFRNTDogaWNvbnMuZm9yd2FyZCxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgY2xhc3M6ICdfX3BhZ2VkX3JlYWRlcl9mb3J3YXJkJyxcbiAgICAgIH0sXG4gICAgICBldmVudHM6IHtcbiAgICAgICAgY2xpY2s6IHRoaXMuX29uRm9yd2FyZC5iaW5kKHRoaXMpLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGRvbS5jcmVhdGVFbGVtZW50KHtcbiAgICAgIHRhZzogJ2J1dHRvbicsXG4gICAgICBhcHBlbmRUbzogdGhpcy5fcm9vdFNoYWRvdyxcbiAgICAgIGlubmVySFRNTDogaWNvbnMuc2V0dGluZ3MsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGNsYXNzOiAnX19wYWdlZF9yZWFkZXJfc2V0dGluZ3MnLFxuICAgICAgfSxcbiAgICAgIGV2ZW50czoge1xuICAgICAgICBjbGljazogKCkgPT4ge1xuICAgICAgICAgIGlmKGlucHV0RGl2LnN0eWxlLmRpc3BsYXkgPT09ICdub25lJykge1xuICAgICAgICAgICAgaW5wdXREaXYuc3R5bGUuZGlzcGxheSA9ICdibG9jaydcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5wdXREaXYuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8qY29uc3QgeyBtYXhIZWlnaHQgfSA9IGdldENvbXB1dGVkU3R5bGUodGhpcy5fcm9vdCk7XG4gICAgICAgICAgaWYgKG1heEhlaWdodCAhPT0gJ2ZpdC1jb250ZW50Jykge1xuICAgICAgICAgICAgdGhpcy5fcm9vdC5zdHlsZS5tYXhIZWlnaHQgPSAnZml0LWNvbnRlbnQnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB7IGhlaWdodCB9ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5fcm9vdFNoYWRvdy5xdWVyeVNlbGVjdG9yKCcucGFnZWQtcmVhZGVyLWRyYWdnZXInKSk7XG4gICAgICAgICAgICBjb25zdCBoZWFkZXJIZWlnaHQgPSBOdW1iZXIoaGVpZ2h0LnNwbGl0KCdweCcpWzBdKTtcbiAgICAgICAgICAgIHRoaXMuX3Jvb3Quc3R5bGUubWF4SGVpZ2h0ID0gYCR7aGVhZGVySGVpZ2h0ICsgMTAwfXB4YDtcbiAgICAgICAgICB9Ki9cbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBsYWJlbERpdiA9IGRvbS5jcmVhdGVFbGVtZW50KHtcbiAgICAgIHRhZzogJ2RpdicsXG4gICAgICBhcHBlbmRUbzogdGhpcy5fcm9vdFNoYWRvdyxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgY2xhc3M6ICdwYWdlZC1yZWFkZXItbGFiZWxzJyxcbiAgICAgICAgc3R5bGU6ICdkaXNwbGF5OiBmbGV4O2ZsZXgtZGlyZWN0aW9uOiByb3c7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47d2lkdGg6IC13ZWJraXQtZmlsbC1hdmFpbGFibGU7cGFkZGluZzogMCAxMnB4IDEycHggMTJweDsnLFxuICAgICAgfSxcbiAgICAgIC8qaW5uZXJIVE1MOiBgXG4gICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDogY2FsYygxMDAlIC8gMyk7bWFyZ2luLWJvdHRvbTogOHB4XCI+Q3Vyc29yIG1vZGU8L2Rpdj5cbiAgICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOiBjYWxjKDEwMCUgLyAzKTttYXJnaW4tYm90dG9tOiA4cHg7ZGlzcGxheTogZmxleDtqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcIj48c3Bhbj5XZWJzaXRlIG1vZGU8L3NwYW4+PC9kaXY+XG4gICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDogY2FsYygxMDAlIC8gMyk7bWFyZ2luLWJvdHRvbTogOHB4O2Rpc3BsYXk6IGZsZXg7anVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcIj48c3Bhbj5TZXR0aW5nczwvc3Bhbj48L2Rpdj5cbiAgICAgIGAsKi9cbiAgICB9KTtcblxuICAgIGNvbnN0IGN1cnNvckRpdiA9IGRvbS5jcmVhdGVFbGVtZW50KHtcbiAgICAgIHRhZzogJ2RpdicsXG4gICAgICBhcHBlbmRUbzogbGFiZWxEaXYsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIHN0eWxlOiAnd2lkdGg6IGNhbGMoMTAwJSAvIDMpO21hcmdpbi1ib3R0b206IDhweCdcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGRvbS5jcmVhdGVFbGVtZW50KHtcbiAgICAgIHRhZzogJ3AnLFxuICAgICAgYXBwZW5kVG86IGN1cnNvckRpdixcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgZGF0YUlkOiAnY3Vyc29yJyxcbiAgICAgICAgc3R5bGU6ICdtYXJnaW46IDA7J1xuICAgICAgfSxcbiAgICAgIGlubmVySFRNTDogdGhpcy5fdHJhbnNsYXRpb24uZ2V0KCdjdXJzb3InKVxuICAgIH0pXG5cbiAgICBjb25zdCB3ZWJzaXRlRGl2ID0gZG9tLmNyZWF0ZUVsZW1lbnQoe1xuICAgICAgdGFnOiAnZGl2JyxcbiAgICAgIGFwcGVuZFRvOiBsYWJlbERpdixcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgc3R5bGU6ICd3aWR0aDogY2FsYygxMDAlIC8gMyk7bWFyZ2luLWJvdHRvbTogOHB4O2Rpc3BsYXk6IGZsZXg7anVzdGlmeS1jb250ZW50OiBjZW50ZXI7IHRleHQtYWxpZ246IGNlbnRlcidcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGRvbS5jcmVhdGVFbGVtZW50KHtcbiAgICAgIHRhZzogJ3AnLFxuICAgICAgYXBwZW5kVG86IHdlYnNpdGVEaXYsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGRhdGFJZDogJ3dlYnNpdGUnLFxuICAgICAgICBzdHlsZTogJ21hcmdpbjogMDsnXG4gICAgICB9LFxuICAgICAgaW5uZXJIVE1MOiB0aGlzLl90cmFuc2xhdGlvbi5nZXQoJ3dlYnNpdGUnKVxuICAgIH0pXG5cbiAgICBjb25zdCBzZXR0aW5nc0RpdiA9IGRvbS5jcmVhdGVFbGVtZW50KHtcbiAgICAgIHRhZzogJ2RpdicsXG4gICAgICBhcHBlbmRUbzogbGFiZWxEaXYsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIHN0eWxlOiAnd2lkdGg6IGNhbGMoMTAwJSAvIDMpO21hcmdpbi1ib3R0b206IDhweDtkaXNwbGF5OiBmbGV4O2p1c3RpZnktY29udGVudDogZmxleC1lbmQ7J1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZG9tLmNyZWF0ZUVsZW1lbnQoe1xuICAgICAgdGFnOiAncCcsXG4gICAgICBhcHBlbmRUbzogc2V0dGluZ3NEaXYsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGRhdGFJZDogJ3NldHRpbmdzJyxcbiAgICAgICAgc3R5bGU6ICdtYXJnaW46IDA7J1xuICAgICAgfSxcbiAgICAgIGlubmVySFRNTDogdGhpcy5fdHJhbnNsYXRpb24uZ2V0KCdzZXR0aW5ncycpXG4gICAgfSk7XG5cbiAgICBjb25zdCBpbnB1dERpdiA9IGRvbS5jcmVhdGVFbGVtZW50KHtcbiAgICAgIHRhZzogJ2RpdicsXG4gICAgICBhcHBlbmRUbzogdGhpcy5fcm9vdFNoYWRvdyxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgY2xhc3M6ICdzZXR0aW5ncycsXG4gICAgICAgIHN0eWxlOiAnZGlzcGxheTogbm9uZTsgd2lkdGg6IDEwMCUnXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCByYXRlSW5wdXQgPSBuZXcgSW5wdXQoe1xuICAgICAga2V5OiAncmF0ZScsXG4gICAgICBwYXJlbnQ6IGlucHV0RGl2LFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBsYWJlbDogdGhpcy5fdHJhbnNsYXRpb24uZ2V0KCdyYXRlJyksXG4gICAgICB0eXBlOiAnaW5jcmVtZW50JyxcbiAgICAgIGJhc2U6IDEsXG4gICAgICBkZWZhdWx0OiAxLFxuICAgICAgdmFsaWRhdGlvbnM6IHtcbiAgICAgICAgbWF4OiAyLFxuICAgICAgICBtaW46IDAuNSxcbiAgICAgICAgc3RlcDogMC4xLFxuICAgICAgfSxcbiAgICAgIG9uQ2hhbmdlOiB2YWx1ZSA9PiB7XG4gICAgICAgIGNvbnN0IHdhc1BsYXlpbmcgPSB3aW5kb3cuaXNBdXRvUGxheTtcbiAgICAgICAgd2luZG93LmlzQXV0b1BsYXkgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcm9vdFNoYWRvdy5xdWVyeVNlbGVjdG9yKCcuX19wYWdlZF9yZWFkZXJfcGxheScpLmlubmVySFRNTCA9IGljb25zLnBsYXk7XG4gICAgICAgIHRoaXMuX3NldHRpbmdzLnJhdGUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fc3ludGguY2FuY2VsKCk7XG4gICAgICAgIGlmICh3YXNQbGF5aW5nKSB7XG4gICAgICAgICAgdGhpcy5fb25QbGF5KHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBwaXRjaElucHV0ID0gbmV3IElucHV0KHtcbiAgICAgIGtleTogJ3BpdGNoJyxcbiAgICAgIHBhcmVudDogaW5wdXREaXYsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIGxhYmVsOiB0aGlzLl90cmFuc2xhdGlvbi5nZXQoJ3BpdGNoJyksXG4gICAgICB0eXBlOiAnaW5jcmVtZW50JyxcbiAgICAgIGJhc2U6IDEsXG4gICAgICBkZWZhdWx0OiAxLFxuICAgICAgdmFsaWRhdGlvbnM6IHtcbiAgICAgICAgbWF4OiAyLFxuICAgICAgICBtaW46IDAsXG4gICAgICAgIHN0ZXA6IDAuMSxcbiAgICAgIH0sXG4gICAgICBvbkNoYW5nZTogdmFsdWUgPT4ge1xuICAgICAgICBjb25zdCB3YXNQbGF5aW5nID0gd2luZG93LmlzQXV0b1BsYXk7XG4gICAgICAgIHdpbmRvdy5pc0F1dG9QbGF5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3Jvb3RTaGFkb3cucXVlcnlTZWxlY3RvcignLl9fcGFnZWRfcmVhZGVyX3BsYXknKS5pbm5lckhUTUwgPSBpY29ucy5wbGF5O1xuICAgICAgICB0aGlzLl9zZXR0aW5ncy5waXRjaCA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9zeW50aC5jYW5jZWwoKTtcbiAgICAgICAgaWYgKHdhc1BsYXlpbmcpIHtcbiAgICAgICAgICB0aGlzLl9vblBsYXkodW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHZvbHVtZUlucHV0ID0gbmV3IElucHV0KHtcbiAgICAgIGtleTogJ3ZvbHVtZScsXG4gICAgICBwYXJlbnQ6IGlucHV0RGl2LFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBsYWJlbDogdGhpcy5fdHJhbnNsYXRpb24uZ2V0KCd2b2x1bWUnKSxcbiAgICAgIHR5cGU6ICdpbmNyZW1lbnQnLFxuICAgICAgYmFzZTogMSxcbiAgICAgIGRlZmF1bHQ6IDEsXG4gICAgICB2YWxpZGF0aW9uczoge1xuICAgICAgICBtYXg6IDEsXG4gICAgICAgIG1pbjogMCxcbiAgICAgICAgc3RlcDogMC4wNSxcbiAgICAgICAgZm9ybWF0OiAobikgPT4gbiAqIDEwMCxcbiAgICAgIH0sXG4gICAgICBvbkNoYW5nZTogdmFsdWUgPT4ge1xuICAgICAgICBjb25zdCB3YXNQbGF5aW5nID0gd2luZG93LmlzQXV0b1BsYXk7XG4gICAgICAgIHdpbmRvdy5pc0F1dG9QbGF5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3Jvb3RTaGFkb3cucXVlcnlTZWxlY3RvcignLl9fcGFnZWRfcmVhZGVyX3BsYXknKS5pbm5lckhUTUwgPSBpY29ucy5wbGF5O1xuICAgICAgICB0aGlzLl9zZXR0aW5ncy52b2x1bWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fc3ludGguY2FuY2VsKCk7XG4gICAgICAgIGlmICh3YXNQbGF5aW5nKSB7XG4gICAgICAgICAgdGhpcy5fb25QbGF5KHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sYW5ndWFnZUNoYW5nZXIgPSBuZXcgSW5wdXQoe1xuICAgICAga2V5OiAnbGFuZycsXG4gICAgICBwYXJlbnQ6IGlucHV0RGl2LFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBsYWJlbDogdGhpcy5fdHJhbnNsYXRpb24uZ2V0KCdsYW5nJyksXG4gICAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICAgIGRlZmF1bHQ6ICdFTicsXG4gICAgICBvcHRpb25zOiBbXG4gICAgICAgIHsgbGFiZWw6ICdFbmdsaXNoJywgdmFsdWU6ICdFTicgfSxcbiAgICAgICAgeyBsYWJlbDogJ0RldXRzY2gnLCB2YWx1ZTogJ0RFJyB9LFxuICAgICAgXSxcbiAgICAgIG9uQ2hhbmdlOiB2YWx1ZSA9PiB7XG4gICAgICAgIGNvbnN0IHdhc1BsYXlpbmcgPSB3aW5kb3cuaXNBdXRvUGxheTtcbiAgICAgICAgd2luZG93LmlzQXV0b1BsYXkgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcm9vdFNoYWRvdy5xdWVyeVNlbGVjdG9yKCcuX19wYWdlZF9yZWFkZXJfcGxheScpLmlubmVySFRNTCA9IGljb25zLnBsYXk7XG4gICAgICAgIHRoaXMuX3NldHRpbmdzLmxhbmcgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fdHJhbnNsYXRpb24uc2V0X2xhbmd1YWdlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5fc3ludGguY2FuY2VsKCk7XG4gICAgICAgIGlmICh3YXNQbGF5aW5nKSB7XG4gICAgICAgICAgdGhpcy5fb25QbGF5KHVuZGVmaW5lZCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jaGFuZ2VMYW5ndWFnZSgpO1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRoaXMuX3JlYWRlcklucHV0cy5wdXNoKHJhdGVJbnB1dCwgcGl0Y2hJbnB1dCwgdm9sdW1lSW5wdXQsIHRoaXMuX2xhbmd1YWdlQ2hhbmdlcik7XG5cbiAgICB0aGlzLl9yb290LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgfVxuXG4gIF9jaGVja0ZvclBsYXRmcm9tKCkge1xuICAgIC8qaWYgKHdpbmRvdy5uYXZpZ2F0b3IucGxhdGZvcm0uaW5kZXhPZihcIldpblwiKSAhPSAtMSkge1xuICAgICAgY29uc29sZS5sb2coXCJUaGUgdXNlciBpcyBydW5uaW5nIFdpbmRvd3NcIik7XG4gICAgfSBlbHNlIGlmICh3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLmluZGV4T2YoXCJNYWNcIikgIT0gLTEpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiVGhlIHVzZXIgaXMgcnVubmluZyBNYWMgT1NcIik7XG4gICAgfSBlbHNlIGlmICh3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLmluZGV4T2YoXCJMaW51eFwiKSAhPSAtMSkge1xuICAgICAgY29uc29sZS5sb2coXCJUaGUgdXNlciBpcyBydW5uaW5nIExpbnV4XCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhcIlRoZSB1c2VyJ3Mgb3BlcmF0aW5nIHN5c3RlbSBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZFwiKTtcbiAgICB9Ki9cbiAgICAvL3ZhciBpc0lPUyA9IC8oaVBob25lfGlQb2R8aVBhZCkvaS50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSk7XG5cblxuICAgIHJldHVybiB3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLmluZGV4T2YoXCJNYWNcIikgIT09IC0xO1xuICB9XG5cbiAgX2NoZWNrUGFyZW50RWxlbWVudChlbGVtZW50KSB7XG4gICAgZm9yKDsgZWxlbWVudCAmJiBlbGVtZW50ICE9PSBkb2N1bWVudDsgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZSkge1xuXG4gICAgICBsZXQgbGlzdCA9IGVsZW1lbnQuY2xhc3NMaXN0LnZhbHVlLnNwbGl0KCcgJykuZmlsdGVyKGNscyA9PiBjbHMudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcygnZm9vdGVyJykvKiB8fCBjbHMudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcygnaGVhZGVyJykqLyk7XG5cbiAgICAgIGlmKGVsZW1lbnQucGFyZW50Tm9kZS50YWdOYW1lID09PSAnSEVBREVSJyB8fFxuICAgICAgICAgIGVsZW1lbnQucGFyZW50Tm9kZS50YWdOYW1lID09PSAnRk9PVEVSJyB8fFxuICAgICAgICAgIGxpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgX2NoZWNrRm9yRWxlbWVudG9yQXR0cmlidXRlT25Cb2R5KCkge1xuICAgIHJldHVybiAhIWRvY3VtZW50LmJvZHkuY2xhc3NOYW1lLm1hdGNoKC9lbGVtZW50b3IvKTtcbiAgfVxuXG4gIF9vblBsYXkoZXZlbnQpIHtcbiAgICBpZih0aGlzLl9jdXJyZW50RWxlbWVudCkge1xuICAgICAgdGhpcy5fbW91c2VSZWFkZXJFdmVudFN0eWxlQ29udHJhc3QodGhpcy5fY3VycmVudEVsZW1lbnQsIGZhbHNlKTtcbiAgICB9XG4gICAgd2luZG93LmlzQXV0b1BsYXkgPSB3aW5kb3cuaXNBdXRvUGxheSA/IGZhbHNlIDogdHJ1ZTtcbiAgICB0aGlzLl9jdXJzb3JFbmFibGVkID0gZmFsc2U7XG4gICAgdGhpcy5fcm9vdFNoYWRvdy5xdWVyeVNlbGVjdG9yKCcuX19wYWdlZF9yZWFkZXJfY3Vyc29yJykucXVlcnlTZWxlY3RvcignaW5wdXQnKS5jaGVja2VkID0gZmFsc2U7XG4gICAgY29uc3QgYnV0dG9uID0gdGhpcy5fcm9vdFNoYWRvdy5xdWVyeVNlbGVjdG9yKCcuX19wYWdlZF9yZWFkZXJfcGxheScpO1xuXG4gICAgaWYgKHdpbmRvdy5pc0F1dG9QbGF5KSB7XG4gICAgICBidXR0b24uaW5uZXJIVE1MID0gaWNvbnMucGF1c2U7XG4gICAgICB0aGlzLl9zeW50aC5jYW5jZWwoKTtcbiAgICAgIC8vY29uc3QgZWxlbWVudHMgPSBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21haW4nKS5xdWVyeVNlbGVjdG9yQWxsKCdwLCBzcGFuLCBoMSwgaDIsIGgzLCBoNCwgaDUsIGg2LCBsaSwgdGQnKSk7XG4gICAgICBsZXQgZWxlbWVudHM7XG4gICAgICBpZih0aGlzLl9jaGVja0ZvckVsZW1lbnRvckF0dHJpYnV0ZU9uQm9keSgpKSB7XG4gICAgICAgIGVsZW1lbnRzID0gQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiW2RhdGEtZWxlbWVudG9yLXR5cGU9J3dwLXBvc3QnXVwiKS5xdWVyeVNlbGVjdG9yQWxsKCdwLyosIHNwYW4qLywgaDEsIGgyLCBoMywgaDQsIGg1LCBoNiwgbGksIHRkJykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudHMgPSBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3AvKiwgc3BhbiovLCBoMSwgaDIsIGgzLCBoNCwgaDUsIGg2LCBsaSwgdGQnKSkuZmlsdGVyKChlbGVtKSA9PiB0aGlzLl9jaGVja1BhcmVudEVsZW1lbnQoZWxlbSkgIT09IHRydWUpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhbGxFbGVtZW50cyA9IGVsZW1lbnRzLmZpbHRlcih0ZXh0ID0+IHRleHQuaW5uZXJUZXh0KTtcblxuXG4gICAgICBsZXQgdGV4dEVsZW1lbnRzID0gW107XG5cbiAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBhbGxFbGVtZW50cy5sZW5ndGg7IGkrKykge1xuXG4gICAgICAgIGlmKGkgPiAwICYmIGFsbEVsZW1lbnRzW2ldLmlubmVyVGV4dCA9PT0gYWxsRWxlbWVudHNbaS0xXS5pbm5lclRleHQpIHtcbiAgICAgICAgICB0ZXh0RWxlbWVudHMucG9wKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGV4dEVsZW1lbnRzLnB1c2goYWxsRWxlbWVudHNbaV0pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsaW5lcyA9IHRleHRFbGVtZW50cy5tYXAoZWxlbWVudCA9PiB7XG5cbiAgICAgICAgY29uc3QgeyBiYWNrZ3JvdW5kQ29sb3IgfSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gICAgICAgIGNvbnN0IHtjb2xvcn0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnYmctY29sb3InLCBiYWNrZ3JvdW5kQ29sb3IpO1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZm9udC1jb2xvcicsIGNvbG9yKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGVsZW06IGVsZW1lbnQsXG4gICAgICAgICAgdGV4dDogZWxlbWVudC50ZXh0Q29udGVudC50cmltKClcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBodG1sVGFnUmVnZXggPSAvPFtePl0rPi87XG4gICAgICB0aGlzLl9yZWFkaW5nTGluZXMgPSBsaW5lcy5maWx0ZXIobGluZSA9PiAhaHRtbFRhZ1JlZ2V4LnRlc3QobGluZS50ZXh0KSk7XG4gICAgICBmb3IgKGxldCBpID0gdGhpcy5fY3VycmVudExpbmU7IGkgPCB0aGlzLl9yZWFkaW5nTGluZXMubGVuZ3RoOyBpKyspIHtcblxuICAgICAgICBjb25zdCB1dHRlcmFuY2UgPSBuZXcgU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKHRoaXMuX3JlYWRpbmdMaW5lc1tpXS50ZXh0KTtcblxuICAgICAgICB1dHRlcmFuY2Uub25lbmQgPSAoKSA9PiB7XG4gICAgICAgICAgLy90aGlzLl9yZWFkaW5nTGluZXNbaV0uZWxlbS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAndHJhbnNwYXJlbnQnO1xuICAgICAgICAgIHRoaXMuX21vdXNlUmVhZGVyRXZlbnRTdHlsZUNvbnRyYXN0KHRoaXMuX3JlYWRpbmdMaW5lc1tpXS5lbGVtLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgdXR0ZXJhbmNlLm9uc3RhcnQgPSAoKSA9PiB7XG4gICAgICAgICAgLy90aGlzLl9yZWFkaW5nTGluZXNbaV0uZWxlbS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAncmdiYSgyNTUsIDI1NSwgMCwgMC42KSc7XG4gICAgICAgICAgdGhpcy5fbW91c2VSZWFkZXJFdmVudFN0eWxlQ29udHJhc3QodGhpcy5fcmVhZGluZ0xpbmVzW2ldLmVsZW0sIHRydWUpO1xuICAgICAgICAgIHRoaXMuX2N1cnJlbnRMaW5lID0gaTtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLl9zZXR0aW5ncykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIHV0dGVyYW5jZVtrZXldID0gdGhpcy5fc2V0dGluZ3Nba2V5XTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy9TZXQgc3BlY2lhbCB2b2ljZSBmb3IgTWFjT3NcbiAgICAgICAgaWYodGhpcy5fY2hlY2tGb3JQbGF0ZnJvbSgpICYmIHRoaXMuX3NldHRpbmdzLmxhbmcgPT09ICdFTicpIHtcbiAgICAgICAgICBjb25zdCB2b2ljZXMgPSB3aW5kb3cuc3BlZWNoU3ludGhlc2lzLmdldFZvaWNlcygpO1xuICAgICAgICAgIHV0dGVyYW5jZS52b2ljZSA9IHZvaWNlc1s1XTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zeW50aC5zcGVhayh1dHRlcmFuY2UpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9tb3VzZVJlYWRlckV2ZW50U3R5bGVDb250cmFzdCh0aGlzLl9yZWFkaW5nTGluZXNbdGhpcy5fY3VycmVudExpbmVdLmVsZW0sIGZhbHNlKTtcbiAgICAgIHRoaXMuX3N5bnRoLmNhbmNlbCgpO1xuICAgICAgYnV0dG9uLmlubmVySFRNTCA9IGljb25zLnBsYXk7XG4gICAgfVxuICB9XG5cbiAgX29uRm9yd2FyZChldmVudCkge1xuICAgIGlmICh0aGlzLl9yZWFkaW5nTGluZXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCB3YXNQbGF5aW5nID0gd2luZG93LmlzQXV0b1BsYXk7XG4gICAgICBpZiAod2luZG93LmlzQXV0b1BsYXkpIHtcbiAgICAgICAgdGhpcy5fb25QbGF5KHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgICBpZiAoKHRoaXMuX2N1cnJlbnRMaW5lICsgMSkgPD0gKHRoaXMuX3JlYWRpbmdMaW5lcy5sZW5ndGggLSAxKSkge1xuICAgICAgICAvL3RoaXMuX3JlYWRpbmdMaW5lc1t0aGlzLl9jdXJyZW50TGluZV0uZWxlbS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAndHJhbnNwYXJlbnQnO1xuICAgICAgICAvL3RoaXMuX21vdXNlUmVhZGVyRXZlbnRTdHlsZUNvbnRyYXN0KHRoaXMuX3JlYWRpbmdMaW5lc1t0aGlzLl9jdXJyZW50TGluZV0uZWxlbSwgZmFsc2UpO1xuICAgICAgICB0aGlzLl9jdXJyZW50TGluZSsrO1xuICAgICAgICAvL3RoaXMuX3JlYWRpbmdMaW5lc1t0aGlzLl9jdXJyZW50TGluZV0uZWxlbS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAncmdiYSgyNTUsIDI1NSwgMCwgMC42KSc7XG4gICAgICAgIC8vdGhpcy5fbW91c2VSZWFkZXJFdmVudFN0eWxlQ29udHJhc3QodGhpcy5fcmVhZGluZ0xpbmVzW3RoaXMuX2N1cnJlbnRMaW5lXS5lbGVtLCBmYWxzZSk7XG4gICAgICAgIGlmICh3YXNQbGF5aW5nKSB7XG4gICAgICAgICAgdGhpcy5fb25QbGF5KHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfb25CYWNrd2FyZChldmVudCkge1xuICAgIGlmICh0aGlzLl9yZWFkaW5nTGluZXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCB3YXNQbGF5aW5nID0gd2luZG93LmlzQXV0b1BsYXk7XG4gICAgICBpZiAod2luZG93LmlzQXV0b1BsYXkpIHtcbiAgICAgICAgdGhpcy5fb25QbGF5KHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgICBpZiAoKHRoaXMuX2N1cnJlbnRMaW5lIC0gMSkgPj0gMCkge1xuICAgICAgICAvL3RoaXMuX3JlYWRpbmdMaW5lc1t0aGlzLl9jdXJyZW50TGluZV0uZWxlbS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAndHJhbnNwYXJlbnQnO1xuICAgICAgICAvL3RoaXMuX21vdXNlUmVhZGVyRXZlbnRTdHlsZUNvbnRyYXN0KHRoaXMuX3JlYWRpbmdMaW5lc1t0aGlzLl9jdXJyZW50TGluZV0uZWxlbSwgZmFsc2UpO1xuICAgICAgICB0aGlzLl9jdXJyZW50TGluZS0tO1xuICAgICAgICAvL3RoaXMuX3JlYWRpbmdMaW5lc1t0aGlzLl9jdXJyZW50TGluZV0uZWxlbS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAncmdiYSgyNTUsIDI1NSwgMCwgMC42KSc7XG4gICAgICAgIC8vdGhpcy5fbW91c2VSZWFkZXJFdmVudFN0eWxlQ29udHJhc3QodGhpcy5fcmVhZGluZ0xpbmVzW3RoaXMuX2N1cnJlbnRMaW5lXS5lbGVtLCB0cnVlKTtcbiAgICAgICAgaWYgKHdhc1BsYXlpbmcpIHtcbiAgICAgICAgICB0aGlzLl9vblBsYXkodW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9vblN0b3AoZXZlbnQpIHtcbiAgICBpZiAodGhpcy5fcmVhZGluZ0xpbmVzLmxlbmd0aCkge1xuICAgICAgY29uc3Qgd2FzUGxheWluZyA9IHdpbmRvdy5pc0F1dG9QbGF5O1xuICAgICAgLyppZiAod2luZG93LmlzQXV0b1BsYXkpIHtcbiAgICAgICAgLy8gcGF1c2UgaWYgaXRzIHBsYXlpbmdcbiAgICAgICAgdGhpcy5fb25QbGF5KHVuZGVmaW5lZCk7XG4gICAgICB9Ki9cbiAgICAgIC8vdGhpcy5fcmVhZGluZ0xpbmVzW3RoaXMuX2N1cnJlbnRMaW5lXS5lbGVtLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICd0cmFuc3BhcmVudCc7XG4gICAgICAvL3RoaXMuX21vdXNlUmVhZGVyRXZlbnRTdHlsZUNvbnRyYXN0KHRoaXMuX3JlYWRpbmdMaW5lc1t0aGlzLl9jdXJyZW50TGluZV0uZWxlbSwgZmFsc2UpO1xuICAgICAgLy90aGlzLl9jdXJyZW50TGluZS0tO1xuICAgICAgLy90aGlzLl9yZWFkaW5nTGluZXNbdGhpcy5fY3VycmVudExpbmVdLmVsZW0uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJ3JnYmEoMjU1LCAyNTUsIDAsIDAuNiknO1xuICAgICAgLy90aGlzLl9tb3VzZVJlYWRlckV2ZW50U3R5bGVDb250cmFzdCh0aGlzLl9yZWFkaW5nTGluZXNbdGhpcy5fY3VycmVudExpbmVdLmVsZW0sIHRydWUpO1xuICAgICAgaWYgKHdhc1BsYXlpbmcpIHtcbiAgICAgICAgdGhpcy5fb25QbGF5KHVuZGVmaW5lZCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2N1cnJlbnRMaW5lID0gMDtcbiAgICB9XG5cbiAgICBpZih0aGlzLl9jdXJzb3JFbmFibGVkKSB7XG4gICAgICB0aGlzLl9pc0hvdmVyZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2N1cnJlbnRFbGVtZW50ID1udWxsO1xuICAgICAgdGhpcy5fY3VycmVudFRleHQgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLl9wYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fcmVhZEV2ZW50KTtcbiAgfVxuXG4gIF9tb3VzZURvd25FdmVudChldmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5fZHJhZ2dlclBvc2l0aW9uLnBvczMgPSBldmVudC5jbGllbnRYO1xuICAgIHRoaXMuX2RyYWdnZXJQb3NpdGlvbi5wb3M0ID0gZXZlbnQuY2xpZW50WTtcbiAgICB0aGlzLl9pc0RyYWdnaW5nID0gdHJ1ZTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9tb3VzZU1vdmVFdmVudC5iaW5kKHRoaXMpKTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5fbW91c2VVcEV2ZW50LmJpbmQodGhpcykpO1xuICB9XG5cbiAgX21vdXNlTW92ZUV2ZW50KGV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLl9pc0RyYWdnaW5nKSByZXR1cm47XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIHRoaXMuX2RyYWdnZXJQb3NpdGlvbi5wb3MxID0gdGhpcy5fZHJhZ2dlclBvc2l0aW9uLnBvczMgLSBldmVudC5jbGllbnRYO1xuICAgIHRoaXMuX2RyYWdnZXJQb3NpdGlvbi5wb3MyID0gdGhpcy5fZHJhZ2dlclBvc2l0aW9uLnBvczQgLSBldmVudC5jbGllbnRZO1xuICAgIHRoaXMuX2RyYWdnZXJQb3NpdGlvbi5wb3MzID0gZXZlbnQuY2xpZW50WDtcbiAgICB0aGlzLl9kcmFnZ2VyUG9zaXRpb24ucG9zNCA9IGV2ZW50LmNsaWVudFk7XG5cbiAgICB0aGlzLl9yb290LnN0eWxlLnRvcCA9ICh0aGlzLl9yb290Lm9mZnNldFRvcCAtIHRoaXMuX2RyYWdnZXJQb3NpdGlvbi5wb3MyKSArICdweCc7XG4gICAgdGhpcy5fcm9vdC5zdHlsZS5sZWZ0ID0gKHRoaXMuX3Jvb3Qub2Zmc2V0TGVmdCAtIHRoaXMuX2RyYWdnZXJQb3NpdGlvbi5wb3MxKSArICdweCc7XG4gIH1cblxuICBfbW91c2VVcEV2ZW50KGV2ZW50KSB7XG4gICAgdGhpcy5faXNEcmFnZ2luZyA9IGZhbHNlO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX21vdXNlTW92ZUV2ZW50LmJpbmQodGhpcykpO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLl9tb3VzZVVwRXZlbnQuYmluZCh0aGlzKSk7XG4gIH1cblxuICBfbW91c2VSZWFkZXJFdmVudFN0eWxlQ29udHJhc3QoZWxlbWVudCwgYWN0aXZlKSB7XG4gICAgLy8jMTkxODI0XG4gICAgLy9yZ2IoMzQsIDQ1LCA1NylcbiAgICBpZihhY3RpdmUpIHtcbiAgICAgIC8vZWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kID0gJ3JnYmEoMzQsIDQ1LCA1NywgMSknO1xuICAgICAgZWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kID0gJyMyMjJkMzknO1xuICAgICAgZWxlbWVudC5zdHlsZS5jb2xvciA9ICcjZmZmZmZmJztcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2JnLWNvbG9yJykgfHwgJ3RyYW5zcGFyZW50JztcbiAgICAgIGVsZW1lbnQuc3R5bGUuY29sb3IgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZm9udC1jb2xvcicpIHx8ICcjMDAwJztcbiAgICB9XG4gIH1cblxuICBfcmVhZEV2ZW50KGV2ZW50KSB7XG5cbiAgICBpZiAoIXRoaXMuX2N1cnNvckVuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX2lzRW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh3aW5kb3cuaXNBdXRvUGxheSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vY29uc3QgZWxlbWVudCA9IGV2ZW50LnRhcmdldDtcblxuXG4gICAgaWYgKCF0aGlzLl9pc0hvdmVyZWQpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBldmVudC50YXJnZXQ7XG5cbiAgICAgIGlmIChbJ1NQQU4nLCAnUCcsICdIMScsICdIMicsICdIMycsICdINCcsICdINScsICdINicsICdMSScsICdURCcsICdUSCcsICdBJywgJ0JVVFRPTicsICdMQUJFTCcsICdJTlBVVCddLmluY2x1ZGVzKGVsZW1lbnQubm9kZU5hbWUpKSB7XG4gICAgICAgIC8vaWYgKHRoaXMuX3N5bnRoLnNwZWFraW5nICYmIHRoaXMuX2N1cnJlbnRUZXh0ID09PSBlbGVtZW50LmlubmVyVGV4dCkgcmV0dXJuO1xuXG4gICAgICAgIGlmICh0aGlzLl9jdXJyZW50VGV4dCAhPT0gZWxlbWVudC5pbm5lclRleHQpIHtcbiAgICAgICAgICBjb25zdCB7IGJhY2tncm91bmRDb2xvciB9ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgICAgICAgICBjb25zdCB7Y29sb3J9ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnYmctY29sb3InLCBiYWNrZ3JvdW5kQ29sb3IpO1xuICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdmb250LWNvbG9yJywgY29sb3IpO1xuICAgICAgICAgIGVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnO1xuICAgICAgICAgIHRoaXMuX21vdXNlUmVhZGVyRXZlbnRTdHlsZUNvbnRyYXN0KGVsZW1lbnQsIHRydWUpO1xuICAgICAgICAgIHRoaXMuX3BhcmVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9yZWFkRXZlbnQpO1xuICAgICAgICAgIGNvbnN0IHJlYWRUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50VGV4dCA9IGVsZW1lbnQuaW5uZXJUZXh0O1xuICAgICAgICAgICAgLy90aGlzLl9pc0hvdmVyZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fc3ludGguY2FuY2VsKCk7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gbmV3IFNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSh0aGlzLl9jdXJyZW50VGV4dCk7XG4gICAgICAgICAgICBtZXNzYWdlLm9uc3RhcnQgPSAoKSA9PiB7XG5cbiAgICAgICAgICAgICAgY29uc3QgbG9hZGVyID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yKCcucHJvZ3Jlc3MnKTtcbiAgICAgICAgICAgICAgaWYgKGxvYWRlcikgbG9hZGVyLnJlbW92ZSgpO1xuXG4gICAgICAgICAgICAgIHRoaXMuX2lzU3BlYWtpbmcgPSB0cnVlO1xuXG4gICAgICAgICAgICAgIGlmKHRoaXMuX2N1cnJlbnRQYXJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb3VzZVJlYWRlckV2ZW50U3R5bGVDb250cmFzdCh0aGlzLl9jdXJyZW50UGFyZW50LCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY3VycmVudFBhcmVudCA9IG51bGw7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50UGFyZW50ID0gZWxlbWVudDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBtZXNzYWdlLm9uZW5kID0gKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9pc1NwZWFraW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgIHRoaXMuX21vdXNlUmVhZGVyRXZlbnRTdHlsZUNvbnRyYXN0KHRoaXMuX2N1cnJlbnRQYXJlbnQsIGZhbHNlKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBtZXNzYWdlLmVycm9yID0gKCkgPT4gY29uc29sZS5sb2coJ3BhdXNlZCcsIGVsZW1lbnQpO1xuICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5fc2V0dGluZ3MpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgbWVzc2FnZVtrZXldID0gdGhpcy5fc2V0dGluZ3Nba2V5XTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvL1NldCBzcGVjaWFsIHZvaWNlIGZvciBNYWNPc1xuICAgICAgICAgICAgaWYodGhpcy5fY2hlY2tGb3JQbGF0ZnJvbSgpICYmIHRoaXMuX3NldHRpbmdzLmxhbmcgPT09ICdFTicpIHtcbiAgICAgICAgICAgICAgY29uc3Qgdm9pY2VzID0gd2luZG93LnNwZWVjaFN5bnRoZXNpcy5nZXRWb2ljZXMoKTtcbiAgICAgICAgICAgICAgbWVzc2FnZS52b2ljZSA9IHZvaWNlc1s1XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRFbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgICAgIHRoaXMuX3N5bnRoLnNwZWFrKG1lc3NhZ2UpO1xuICAgICAgICAgICAgLyppZiAoIWVsZW1lbnQucXVlcnlTZWxlY3RvcignLnByb2dyZXNzJykpIHtcbiAgICAgICAgICAgICAgZG9tLmNyZWF0ZUVsZW1lbnQoe1xuICAgICAgICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgICAgICAgYXBwZW5kVG86IGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgaW5uZXJIVE1MOiBgXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIGAsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgICAgY2xhc3M6ICdwcm9ncmVzcycsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9Ki9cbiAgICAgICAgICB9LCA4MDApO1xuICAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsb2FkZXIgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wcm9ncmVzcycpO1xuICAgICAgICAgICAgaWYgKGxvYWRlcikgbG9hZGVyLnJlbW92ZSgpO1xuICAgICAgICAgICAgdGhpcy5faXNIb3ZlcmVkID0gZmFsc2U7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQocmVhZFRpbWVvdXQpO1xuICAgICAgICAgICAgdGhpcy5fcGFyZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX3JlYWRFdmVudCk7XG5cbiAgICAgICAgICAgIGlmKGVsZW1lbnQgIT09IHRoaXMuX2N1cnJlbnRQYXJlbnQpIHtcbiAgICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2JnLWNvbG9yJykgfHwgJ3RyYW5zcGFyZW50JztcbiAgICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5jb2xvciA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdmb250LWNvbG9yJykgfHwgJyMwMDAnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3N5bnRoLnNwZWFraW5nKSB7XG4gICAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdiZy1jb2xvcicpIHx8ICd0cmFuc3BhcmVudCc7XG4gICAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUuY29sb3IgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZm9udC1jb2xvcicpIHx8ICcjMDAwJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJjb25zdCBzZXR0aW5ncyA9ICgoKSA9PiBbXG4gIHtcbiAgICBpZDogJ2ZvbnRGYW1pbHknLFxuICAgIGxhYmVsOiAnRm9udCB0eXBlJyxcbiAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICBvcHRpb25zOiBbXG4gICAgICB7IGxhYmVsOiAnLS0gU2VsZWN0IC0tJywgdmFsdWU6ICdkZWZhdWx0JyB9LFxuICAgICAgeyBsYWJlbDogJ1JvYm90bycsIHZhbHVlOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIHVybDogYCR7UEFHRURfRU5WX1VSTH0vZm9udHMvUm9ib3RvLSR7UEFHRURfRU5WfS5jc3NgLFxuICAgICAgICBjc3M6IGBmb250LWZhbWlseTogJ1JvYm90bycsIHNhbnMtc2VyaWYgIWltcG9ydGFudGAsXG4gICAgICB9KSB9LFxuICAgICAgeyBsYWJlbDogJ091dGZpdCcsIHZhbHVlOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIHVybDogYCR7UEFHRURfRU5WX1VSTH0vZm9udHMvT3V0Zml0LSR7UEFHRURfRU5WfS5jc3NgLFxuICAgICAgICBjc3M6IGBmb250LWZhbWlseTogJ091dGZpdCcsIHNhbnMtc2VyaWYgIWltcG9ydGFudGAsXG4gICAgICB9KSB9LFxuICAgICAgeyBsYWJlbDogJ09wZW4gU2FucycsIHZhbHVlOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIHVybDogYCR7UEFHRURfRU5WX1VSTH0vZm9udHMvT3BlblNhbnMtJHtQQUdFRF9FTlZ9LmNzc2AsXG4gICAgICAgIGNzczogYGZvbnQtZmFtaWx5OiAnT3BlbiBTYW5zJywgc2Fucy1zZXJpZiAhaW1wb3J0YW50YCxcbiAgICAgIH0pIH0sXG4gICAgICB7IGxhYmVsOiAnTGF0bycsIHZhbHVlOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIHVybDogYCR7UEFHRURfRU5WX1VSTH0vZm9udHMvTGF0by0ke1BBR0VEX0VOVn0uY3NzYCxcbiAgICAgICAgY3NzOiBgZm9udC1mYW1pbHk6ICdMYXRvJywgc2Fucy1zZXJpZiAhaW1wb3J0YW50YCxcbiAgICAgIH0pIH0sXG4gICAgICB7IGxhYmVsOiAnT3N3YWxkJywgdmFsdWU6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgdXJsOiBgJHtQQUdFRF9FTlZfVVJMfS9mb250cy9Pc3dhbGQtJHtQQUdFRF9FTlZ9LmNzc2AsXG4gICAgICAgIGNzczogYGZvbnQtZmFtaWx5OiAnT3N3YWxkJywgc2Fucy1zZXJpZiAhaW1wb3J0YW50YCxcbiAgICAgIH0pIH0sXG4gICAgICB7IGxhYmVsOiAnUGxheWZhaXInLCB2YWx1ZTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICB1cmw6IGAke1BBR0VEX0VOVl9VUkx9L2ZvbnRzL1BsYXlmYWlyLSR7UEFHRURfRU5WfS5jc3NgLFxuICAgICAgICBjc3M6IGBmb250LWZhbWlseTogJ1BsYXlmYWlyIERpc3BsYXknLCBzZXJpZiAhaW1wb3J0YW50YCxcbiAgICAgIH0pIH0sXG4gICAgICB7IGxhYmVsOiAnVWJ1bnR1JywgdmFsdWU6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgdXJsOiBgJHtQQUdFRF9FTlZfVVJMfS9mb250cy9VYnVudHUtJHtQQUdFRF9FTlZ9LmNzc2AsXG4gICAgICAgIGNzczogYGZvbnQtZmFtaWx5OiAnVWJ1bnR1Jywgc2Fucy1zZXJpZiAhaW1wb3J0YW50YCxcbiAgICAgIH0pIH0sXG4gICAgICB7IGxhYmVsOiAnR2FyYW1vbmQnLCB2YWx1ZTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICB1cmw6IGAke1BBR0VEX0VOVl9VUkx9L2ZvbnRzL0dhcmFtb25kLSR7UEFHRURfRU5WfS5jc3NgLFxuICAgICAgICBjc3M6IGBmb250LWZhbWlseTogJ0VCIEdhcmFtb25kJywgc2VyaWYgIWltcG9ydGFudGAsXG4gICAgICB9KSB9LFxuICAgICAgeyBsYWJlbDogJ09wZW4tRHlzbGV4aWMnLCB2YWx1ZTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICB1cmw6IGAke1BBR0VEX0VOVl9VUkx9L2ZvbnRzL09wZW5EeXNsZXhpYy0ke1BBR0VEX0VOVn0uY3NzYCxcbiAgICAgICAgY3NzOiBgZm9udC1mYW1pbHk6ICdPcGVuRHlzbGV4aWMnLCBzZXJpZiAhaW1wb3J0YW50YCxcbiAgICAgIH0pIH0sXG4gICAgICB7IGxhYmVsOiAnVGltZXMgTmV3IFJvbWFuJywgdmFsdWU6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgdXJsOiBgJHtQQUdFRF9FTlZfVVJMfS9mb250cy9UaW1lc05ld1JvbWFuLSR7UEFHRURfRU5WfS5jc3NgLFxuICAgICAgICBjc3M6IGBmb250LWZhbWlseTogJ1RpbWVzTmV3Um9tYW4nLCBzZXJpZiAhaW1wb3J0YW50YCxcbiAgICAgIH0pIH0sXG4gICAgICB7IGxhYmVsOiAnQXJpYWwnLCB2YWx1ZTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICB1cmw6IGAke1BBR0VEX0VOVl9VUkx9L2ZvbnRzL0FyaWFsLSR7UEFHRURfRU5WfS5jc3NgLFxuICAgICAgICBjc3M6IGBmb250LWZhbWlseTogJ0FyaWFsJywgc2VyaWYgIWltcG9ydGFudGAsXG4gICAgICB9KSB9LFxuICAgICAgeyBsYWJlbDogJ0NhbWJyaWEnLCB2YWx1ZTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICB1cmw6IGAke1BBR0VEX0VOVl9VUkx9L2ZvbnRzL0NhbWJyaWEtJHtQQUdFRF9FTlZ9LmNzc2AsXG4gICAgICAgIGNzczogYGZvbnQtZmFtaWx5OiAnQ2FtYnJpYScsIHNlcmlmICFpbXBvcnRhbnRgLFxuICAgICAgfSkgfSxcbiAgICAgIHsgbGFiZWw6ICdNZXJyaXdlYXRoZXInLCB2YWx1ZTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICB1cmw6IGAke1BBR0VEX0VOVl9VUkx9L2ZvbnRzL21lcnJpd2VhdGhlci0ke1BBR0VEX0VOVn0uY3NzYCxcbiAgICAgICAgY3NzOiBgZm9udC1mYW1pbHk6ICdNZXJyaXdlYXRoZXInLCBzZXJpZiAhaW1wb3J0YW50YCxcbiAgICAgIH0pIH0sXG4gICAgICB7IGxhYmVsOiAnSW50ZXInLCB2YWx1ZTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICB1cmw6IGAke1BBR0VEX0VOVl9VUkx9L2ZvbnRzL0ludGVyLSR7UEFHRURfRU5WfS5jc3NgLFxuICAgICAgICBjc3M6IGBmb250LWZhbWlseTogJ0ludGVyJywgc2VyaWYgIWltcG9ydGFudGAsXG4gICAgICB9KSB9LFxuICAgICAgeyBsYWJlbDogJ0pvc3QnLCB2YWx1ZTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICB1cmw6IGAke1BBR0VEX0VOVl9VUkx9L2ZvbnRzL0pvc3QtJHtQQUdFRF9FTlZ9LmNzc2AsXG4gICAgICAgIGNzczogYGZvbnQtZmFtaWx5OiAnSm9zdCcsIHNlcmlmICFpbXBvcnRhbnRgLFxuICAgICAgfSkgfSxcbiAgICAgIHsgbGFiZWw6ICdSb2traXR0JywgdmFsdWU6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICB1cmw6IGAke1BBR0VEX0VOVl9VUkx9L2ZvbnRzL3Jva2tpdHQtJHtQQUdFRF9FTlZ9LmNzc2AsXG4gICAgICAgICAgY3NzOiBgZm9udC1mYW1pbHk6ICdSb2traXR0Jywgc2VyaWYgIWltcG9ydGFudGAsXG4gICAgICAgIH0pIH0sXG4gICAgXSxcbiAgICBhcHBseTogJ3RleHQnLFxuICAgIGRlZmF1bHQ6ICdkZWZhdWx0JyxcbiAgfSxcbiAge1xuICAgIGlkOiAnZm9udFNpemUnLFxuICAgIGxhYmVsOiAnRm9udCBzaXplJyxcbiAgICB0eXBlOiAnaW5jcmVtZW50JyxcbiAgICBhcHBseTogJ3RleHQnLFxuICAgIHVuaXQ6ICdweCcsXG4gICAgYmFzZTogMCxcbiAgICBpbmNyZW1lbnQ6IDEsXG4gICAgZGVmYXVsdDogMCxcbiAgfSxcbiAge1xuICAgIGlkOiAnbGluZUhlaWdodCcsXG4gICAgbGFiZWw6ICdMaW5lIGhlaWdodCcsXG4gICAgdHlwZTogJ2luY3JlbWVudCcsXG4gICAgYXBwbHk6ICd0ZXh0JyxcbiAgICB1bml0OiAncHgnLFxuICAgIGJhc2U6IDEsXG4gICAgaW5jcmVtZW50OiAxLFxuICAgIGRlZmF1bHQ6IDAsXG4gIH0sXG4gIHtcbiAgICBpZDogJ3dvcmRTcGFjaW5nJyxcbiAgICBsYWJlbDogJ1dvcmQgc3BhY2luZycsXG4gICAgdHlwZTogJ2luY3JlbWVudCcsXG4gICAgYXBwbHk6ICd0ZXh0JyxcbiAgICBiYXNlOiAwLFxuICAgIGluY3JlbWVudDogMC4xLFxuICAgIGRlZmF1bHQ6IDAsXG4gIH0sXG4gIHtcbiAgICBpZDogJ2xldHRlclNwYWNpbmcnLFxuICAgIGxhYmVsOiAnTGV0dGVyIHNwYWNpbmcnLFxuICAgIHR5cGU6ICdpbmNyZW1lbnQnLFxuICAgIGFwcGx5OiAndGV4dCcsXG4gICAgYmFzZTogMCxcbiAgICBpbmNyZW1lbnQ6IDAuMDUsXG4gICAgZGVmYXVsdDogMCxcbiAgfSxcbiAge1xuICAgIGlkOiAnY29udHJhc3QnLFxuICAgIGxhYmVsOiAnQ29udHJhc3QnLFxuICAgIHR5cGU6ICdzd2l0Y2gnLFxuXHQgIGFwcGx5OiB1bmRlZmluZWQsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIHtcbiAgICBpZDogJ2hpZGVQaWN0dXJlcycsXG4gICAgbGFiZWw6ICdIaWRlIHBpY3R1cmVzJyxcbiAgICB0eXBlOiAnc3dpdGNoJyxcbiAgICBhcHBseTogJ2dsb2JhbCcsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIHtcbiAgICBpZDogJ3JlYWRpbmdNYXNrJyxcbiAgICBsYWJlbDogJ1JlYWRpbmcgTWFzaycsXG4gICAgdHlwZTogJ3N3aXRjaCcsXG5cdCAgYXBwbHk6IHVuZGVmaW5lZCxcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICBtb2JpbGU6IGZhbHNlLFxuICB9LFxuICB7XG4gICAgaWQ6ICdtb25vY2hyb21lJyxcbiAgICBsYWJlbDogJ01vbm9jaHJvbWUnLFxuICAgIHR5cGU6ICdzd2l0Y2gnLFxuXHQgIGFwcGx5OiB1bmRlZmluZWQsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIHtcbiAgICBpZDogJ3NjcmVlblJlYWRlcicsXG4gICAgbGFiZWw6ICdTY3JlZW4gUmVhZGVyJyxcbiAgICB0eXBlOiAnc3dpdGNoJyxcblx0ICBhcHBseTogdW5kZWZpbmVkLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuXS5maWx0ZXIoc2V0dGluZyA9PiB7XG4gIGNvbnN0IGlzTW9iaWxlID0gd2luZG93Lm1hdGNoTWVkaWEoJyhtYXgtd2lkdGg6IDc2N3B4KScpLm1hdGNoZXM7XG4gIGlmICh0eXBlb2Ygc2V0dGluZy5tb2JpbGUgPT09ICdib29sZWFuJykge1xuICAgIGlmICghc2V0dGluZy5tb2JpbGUgJiYgaXNNb2JpbGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59KSkoKTtcblxuZXhwb3J0IGRlZmF1bHQgc2V0dGluZ3M7XG4iLCJjb25zdCBwZXJzb25hcyA9IFtcbiAge1xuICAgIGlkOiAnYWRocycsXG4gICAgdHlwZTogJ3N3aXRjaCcsXG5cdCAgYXBwbHk6IHVuZGVmaW5lZCxcbiAgICBzZXR0aW5nczoge30sXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIHtcbiAgICBpZDogJ3BhcmtpbnNvbicsXG4gICAgdHlwZTogJ3N3aXRjaCcsXG5cdCAgYXBwbHk6IHVuZGVmaW5lZCxcbiAgICBzZXR0aW5nczoge30sXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIHtcbiAgICBpZDogJ2xvd1Zpc2lvbicsXG4gICAgdHlwZTogJ3N3aXRjaCcsXG5cdCAgYXBwbHk6IHVuZGVmaW5lZCxcbiAgICBzZXR0aW5nczoge30sXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIHtcbiAgICBpZDogJ2R5c2xleGlhJyxcbiAgICB0eXBlOiAnc3dpdGNoJyxcblx0ICBhcHBseTogdW5kZWZpbmVkLFxuICAgIHNldHRpbmdzOiB7fSxcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgfSxcbl07XG5cbmV4cG9ydCBkZWZhdWx0IHBlcnNvbmFzO1xuIiwiaW1wb3J0IHN0eWxlIGZyb20gJy4vc3R5bGUnO1xuaW1wb3J0IGRvbSBmcm9tICcuLi8uLi91dGlscy9kb20nO1xuaW1wb3J0IGVudiBmcm9tICcuLi8uLi8uLi9jb25maWd1cmF0aW9uL2NvbnN0YW50cyc7XG5pbXBvcnQgaWNvbnMgZnJvbSAnLi4vaWNvbnMnOyBcbmltcG9ydCBJbnB1dCBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXQnO1xuaW1wb3J0IEFjY291bnQgZnJvbSAnLi9jb21wb25lbnRzL2FjY291bnQnO1xuaW1wb3J0IFJlYWRlciBmcm9tICcuL2NvbXBvbmVudHMvcmVhZGVyJztcbmltcG9ydCBzZXR0aW5ncyBmcm9tICcuL3NldHRpbmdzJztcbmltcG9ydCBwZXJzb25hcyBmcm9tICcuL3BlcnNvbmFzJztcblxuXG4vLyBERU5JWjogQWRkIHJlY3Vyc2l2ZSBmdW5jdGlvbiB0byBkZXRlY3QgYmFja2dyb3VuZCBjb2xvciBvZiBpbWFnZXNcbmZ1bmN0aW9uIGdldEluaGVyaXRlZEJhY2tncm91bmRDb2xvcihlbCkge1xuICAvLyBnZXQgZGVmYXVsdCBzdHlsZSBmb3IgY3VycmVudCBicm93c2VyXG4gIHZhciBkZWZhdWx0U3R5bGUgPSBnZXREZWZhdWx0QmFja2dyb3VuZCgpIC8vIHR5cGljYWxseSBcInJnYmEoMCwgMCwgMCwgMClcIlxuICBcbiAgLy8gZ2V0IGNvbXB1dGVkIGNvbG9yIGZvciBlbFxuICB2YXIgYmFja2dyb3VuZENvbG9yID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpLmJhY2tncm91bmRDb2xvclxuICBcbiAgLy8gaWYgd2UgZ290IGEgcmVhbCB2YWx1ZSwgcmV0dXJuIGl0XG4gIGlmIChiYWNrZ3JvdW5kQ29sb3IgIT0gZGVmYXVsdFN0eWxlKSByZXR1cm4gYmFja2dyb3VuZENvbG9yXG5cbiAgLy8gaWYgd2UndmUgcmVhY2hlZCB0aGUgdG9wIHBhcmVudCBlbCB3aXRob3V0IGdldHRpbmcgYW4gZXhwbGljaXQgY29sb3IsIHJldHVybiBkZWZhdWx0XG4gIGlmICghZWwucGFyZW50RWxlbWVudCkgcmV0dXJuIGRlZmF1bHRTdHlsZVxuICBcbiAgLy8gb3RoZXJ3aXNlLCByZWN1cnNlIGFuZCB0cnkgYWdhaW4gb24gcGFyZW50IGVsZW1lbnRcbiAgcmV0dXJuIGdldEluaGVyaXRlZEJhY2tncm91bmRDb2xvcihlbC5wYXJlbnRFbGVtZW50KVxufVxuXG5mdW5jdGlvbiBnZXREZWZhdWx0QmFja2dyb3VuZCgpIHtcbiAgLy8gaGF2ZSB0byBhZGQgdG8gdGhlIGRvY3VtZW50IGluIG9yZGVyIHRvIHVzZSBnZXRDb21wdXRlZFN0eWxlXG4gIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpXG4gIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoZGl2KVxuICB2YXIgYmcgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkaXYpLmJhY2tncm91bmRDb2xvclxuICBkb2N1bWVudC5oZWFkLnJlbW92ZUNoaWxkKGRpdilcbiAgcmV0dXJuIGJnXG59XG5cbmNvbnN0IHRleHROb2RlcyA9IFtcbiAgJ2gxJyxcbiAgJ2gyJyxcbiAgJ2gzJyxcbiAgJ2g0JyxcbiAgJ2g1JyxcbiAgJ2g2JyxcbiAgJ3AnLFxuICAnYScsXG4gICdsaScsXG4gICdtYXJrJyxcbiAgJ2lucycsXG4gICdkZWwnLFxuICAnc3VwJyxcbiAgJ3N1YicsXG4gICdzbWFsbCcsXG4gICdpJyxcbiAgJ2InLFxuICAnY29kZScsXG4gICdwcmUnLFxuICAnc3BhbicsXG4gICd0ZXh0YXJlYScsXG4gICdidXR0b24nLFxuICAnbGFiZWwnLFxuICAnZm9ybScsXG4gICdzZWxlY3QnLFxuICAnaW5wdXQnLFxuICAgICd0ZCcsXG5dO1xuXG5cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT3ZlcmxheSB7XG4gIF9yb290ID0gbnVsbDtcbiAgX3Jvb3RTaGFkb3cgPSBudWxsO1xuICBfdG9nZ2xlID0gbnVsbDtcbiAgX29wZW4gPSBmYWxzZTtcbiAgX2FjY291bnQgPSB0cnVlO1xuICBfcG9zaXRpb24gPSAncmlnaHQnO1xuICBfY29sb3IgPSAnIzIyMkQzOSc7XG4gIF9tb2RlbCA9IHt9O1xuICBfc3RvcmUgPSBudWxsO1xuICBfaW5wdXRzID0gW107XG4gIF9yZWFkZXJJbnB1dHMgPSBbXTtcblx0X29sZFJlZiA9IG51bGw7XG4gIF90cmFuc2xhdGlvbiA9IG51bGw7XG4gIF9tYXNrID0gbnVsbDtcbiAgX3JlYWRlciA9IG51bGw7XG4gIF9mb250RmFtaWx5UmVmZXJlbmNlID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgdGhpcy5fdG9nZ2xlID0gb3B0aW9ucyAmJiBvcHRpb25zLnRvZ2dsZVxuICAgICAgPyBvcHRpb25zLnRvZ2dsZSA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9tYXNrID0gb3B0aW9ucyAmJiBvcHRpb25zLm1hc2tcbiAgICAgID8gb3B0aW9ucy5tYXNrIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuX3JlYWRlciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5yZWFkZXJcbiAgICAgID8gb3B0aW9ucy5yZWFkZXIgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5fbW9kZWwgPSBvcHRpb25zICYmIE9iamVjdC5rZXlzKG9wdGlvbnMubW9kZWwgfHwge30pLmxlbmd0aFxuICAgICAgPyBvcHRpb25zLm1vZGVsIDogdGhpcy5kZWZhdWx0TW9kZWw7XG4gICAgdGhpcy5fcG9zaXRpb24gPSBvcHRpb25zICYmIG9wdGlvbnMucG9zaXRpb25cbiAgICAgID8gb3B0aW9ucy5wb3NpdGlvbiA6ICdyaWdodCc7XG4gICAgdGhpcy5fY29sb3IgPSBvcHRpb25zICYmIG9wdGlvbnMuY29sb3JcbiAgICA/IG9wdGlvbnMuY29sb3IgOiAnIzIyMkQzOSc7XG4gICAgdGhpcy5fY29sb3IgPSAhb3B0aW9ucy5jb2xvci5pbmNsdWRlcygnIycpID8gJyMnICsgb3B0aW9ucy5jb2xvciA6JyMyMjJkMzknO1xuICAgIHRoaXMuX2FjY291bnQgPSBvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLmFjY291bnQgIT09ICd1bmRlZmluZWQnID8gKFxuICAgICAgb3B0aW9ucy5hY2NvdW50ID09PSAnZmFsc2UnID8gZmFsc2UgOiB0cnVlXG4gICAgKSA6IHRydWU7XG5cbiAgICB0aGlzLl9zdG9yZSA9IG9wdGlvbnMuc3RvcmU7XG4gICAgdGhpcy5fdHJhbnNsYXRpb24gPSBvcHRpb25zLnRyYW5zbGF0aW9uO1xuICAgIHRoaXMuX19pbml0X18oKTtcbiAgfVxuXG4gIHNldCBvcGVuKHZhbHVlKSB7XG4gICAgdGhpcy5fb3BlbiA9IHZhbHVlO1xuICAgIHRoaXMuX29wZW4gPyB0aGlzLl9yb290LmNsYXNzTGlzdC5hZGQoJ29wZW4nKVxuICAgICAgOiB0aGlzLl9yb290LmNsYXNzTGlzdC5yZW1vdmUoJ29wZW4nKTtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAvL2NvbnN0IHdpZHRoID0gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl9yb290KS53aWR0aDtcblxuICAgICAgY29uc3Qgd2lkZ2V0V2lkdGggPSBnZXRDb21wdXRlZFN0eWxlKHRoaXMuX3Jvb3QpLndpZHRoLnNsaWNlKDAsLTIpO1xuICAgICAgY29uc3Qgd2lkdGhXaXRoU2Nyb2xsYmFyID0gcGFyc2VJbnQod2lkZ2V0V2lkdGgpICsgKHRoaXMuX3Jvb3Qub2Zmc2V0V2lkdGggLSB0aGlzLl9yb290LmNsaWVudFdpZHRoKTtcbiAgICAgIGNvbnN0IHdpZHRoID0gd2lkdGhXaXRoU2Nyb2xsYmFyICsgJ3B4JztcblxuICAgICAgLy90aGlzLl9yb290LnN0eWxlLnJpZ2h0ID0gYC0ke3dpZHRofWA7XG4gICAgICAvL3RoaXMuX3Jvb3Quc3R5bGUubGVmdCA9IGAtJHt3aWR0aH1gO1xuICAgICAgdGhpcy5fcG9zaXRpb24gPT09ICdsZWZ0JyA/IHRoaXMuX3Jvb3Quc3R5bGUubGVmdCA9IGAtJHt3aWR0aH1gIDogdGhpcy5fcm9vdC5zdHlsZS5yaWdodCA9IGAtJHt3aWR0aH1gO1xuICAgIH0gZWxzZSB7XG4gICAgICAvL3RoaXMuX3Jvb3Quc3R5bGUucmlnaHQgPSAnMCc7XG4gICAgICAvL3RoaXMuX3Jvb3Quc3R5bGUubGVmdCA9ICcwJztcbiAgICAgIHRoaXMuX3Bvc2l0aW9uID09PSAnbGVmdCcgPyB0aGlzLl9yb290LnN0eWxlLmxlZnQgPSAwIDogdGhpcy5fcm9vdC5zdHlsZS5yaWdodCA9IDA7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGRlZmF1bHRNb2RlbCgpIHtcbiAgICByZXR1cm4gc2V0dGluZ3MucmVkdWNlKChtLCBjZmcpID0+IHtcbiAgICAgIGlmIChjZmcuZGVmYXVsdCAhPT0gbnVsbCAmJiB0eXBlb2YgY2ZnLmRlZmF1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBtW2NmZy5pZF0gPSBjZmcuZGVmYXVsdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtO1xuICAgIH0sIHt9KTtcbiAgfVxuXG4gIGdldCBfaGVhZGVyKCkge1xuICAgIHJldHVybiBkb20uY3JlYXRlRWxlbWVudCh7XG4gICAgICB0YWc6ICdkaXYnLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBjbGFzczogJ2hlYWRlcicsXG4gICAgICB9LFxuICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgZG9tLmNyZWF0ZUVsZW1lbnQoe1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgc3R5bGU6ICdkaXNwbGF5OiBmbGV4O2FsaWduLWl0ZW1zOiBtaWRkbGUnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgIGRvbS5jcmVhdGVFbGVtZW50KHtcbiAgICAgICAgICAgICAgdGFnOiAnc3BhbicsXG4gICAgICAgICAgICAgIGlubmVySFRNTDogaWNvbnMucmV2ZXJ0LFxuICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICBjbGljazogdGhpcy5fcmV2ZXJ0LmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGRvbS5jcmVhdGVFbGVtZW50KHtcbiAgICAgICAgICAgICAgdGFnOiAnc2VsZWN0JyxcbiAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgIHN0eWxlOiAnbWFyZ2luOiBhdXRvIDhweCcsXG4gICAgICAgICAgICAgICAgY2xhc3M6ICdfX3BhZ2VkX2xhbmd1YWdlX2NoYW5nZXInLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBpbm5lckhUTUw6IGBcbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiRU5cIj5FTjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJERVwiPkRFPC9vcHRpb24+XG4gICAgICAgICAgICAgIGAsXG4gICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgIGNoYW5nZTogdGhpcy5fY2hhbmdlTGFuZ3VhZ2UuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pLFxuICAgICAgICBkb20uY3JlYXRlRWxlbWVudCh7XG4gICAgICAgICAgdGFnOiAnYScsXG4gICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgaHJlZjogJ2h0dHBzOi8vcGFnZWQuYWknLFxuICAgICAgICAgICAgdGFyZ2V0OiAnX2JsYW5rJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGlubmVySFRNTDogaWNvbnMubG9nb0JsYWNrLFxuICAgICAgICB9KSxcbiAgICAgICAgZG9tLmNyZWF0ZUVsZW1lbnQoe1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgc3R5bGU6ICd3aWR0aDogNzBweDtkaXNwbGF5OiBmbGV4O2p1c3RpZnktY29udGVudDogZmxleC1lbmQ7JyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICBkb20uY3JlYXRlRWxlbWVudCh7XG4gICAgICAgICAgICAgIHRhZzogJ3NwYW4nLFxuICAgICAgICAgICAgICBpbm5lckhUTUw6IGljb25zLmNhbmNlbCxcbiAgICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgICAgY2xpY2s6IHRoaXMuX2Nsb3NlLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cblxuICBnZXQgX3RhYnMoKSB7XG4gICAgcmV0dXJuIGRvbS5jcmVhdGVFbGVtZW50KHtcbiAgICAgIHRhZzogJ2RpdicsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGNsYXNzOiAndGFicycsXG4gICAgICB9LFxuICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgZG9tLmNyZWF0ZUVsZW1lbnQoe1xuICAgICAgICAgIHRhZzogJ2J1dHRvbicsXG4gICAgICAgICAgaW5uZXJIVE1MOiB0aGlzLl90cmFuc2xhdGlvbi5nZXQoJ3NldHRpbmdzJyksXG4gICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgZGF0YUlkOiAnc2V0dGluZ3MnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICBjbGljazogKCkgPT4gdGhpcy5fc2V0VGFiKCdzZXR0aW5ncycpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgXS5jb25jYXQodGhpcy5fYWNjb3VudCA/IFtcbiAgICAgICAgZG9tLmNyZWF0ZUVsZW1lbnQoe1xuICAgICAgICAgIHRhZzogJ2J1dHRvbicsXG4gICAgICAgICAgaW5uZXJIVE1MOiB0aGlzLl90cmFuc2xhdGlvbi5nZXQoJ2FjY291bnQnKSxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICBkYXRhSWQ6ICdhY2NvdW50JyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgY2xpY2s6ICgpID0+IHRoaXMuX3NldFRhYignYWNjb3VudCcpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgXSA6IFtdKS5jb25jYXQoW1xuICAgICAgICBkb20uY3JlYXRlRWxlbWVudCh7XG4gICAgICAgICAgdGFnOiAnYnV0dG9uJyxcbiAgICAgICAgICBpbm5lckhUTUw6IHRoaXMuX3RyYW5zbGF0aW9uLmdldCgnaW5kaXZpZHVhbCcpLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgIGRhdGFJZDogJ2luZGl2aWR1YWwnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICBjbGljazogKCkgPT4gdGhpcy5fc2V0VGFiKCdzZXR0aW5ncycpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgICBkb20uY3JlYXRlRWxlbWVudCh7XG4gICAgICAgICAgdGFnOiAnYnV0dG9uJyxcbiAgICAgICAgICBpbm5lckhUTUw6IHRoaXMuX3RyYW5zbGF0aW9uLmdldCgncGVyc29uYXMnKSxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICBkYXRhSWQ6ICdwZXJzb25hcycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLl9zZXRUYWIoJ3BlcnNvbmFzJyksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICBdKSxcbiAgICB9KTtcbiAgfVxuXG4gIGhpZGVQaWN0dXJlcyhhY3RpdmUpIHtcbiAgICBjb25zdCBkaXZzID0gQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkaXYnKSk7XG4gICAgZGl2cy5mb3JFYWNoKGRpdiA9PiB7XG4gICAgICBsZXQgYmcgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkaXYpLmJhY2tncm91bmQ7XG4gICAgICBsZXQgYmdJbWcgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkaXYpLmJhY2tncm91bmRJbWFnZTtcbiAgICAgIGNvbnN0IHByZXZpb3VzU3R5bGVzID0gZGl2LmdldEF0dHJpYnV0ZSgnc3R5bGUnKTtcbiAgICAgIGNvbnN0IGlzSW1nVXJsID0gKHN0cikgPT4gbmV3IFJlZ0V4cCgvdXJsXFwoXCIuK1wiXFwpJC9nbSkudGVzdChzdHIpO1xuICAgICAgaWYgKGlzSW1nVXJsKGJnKSkge1xuICAgICAgICBpZiAoYWN0aXZlKSB7XG4gICAgICAgICAgaWYgKCFkaXYuZ2V0QXR0cmlidXRlKCdiZycpKSB7XG4gICAgICAgICAgICBkaXYuc2V0QXR0cmlidXRlKCdiZycsIGJnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGl2LnNldEF0dHJpYnV0ZSgnc3R5bGUnLFxuICAgICAgICAgICAgcHJldmlvdXNTdHlsZXMgPyBgJHtwcmV2aW91c1N0eWxlc307YmFja2dyb3VuZDogbm9uZSAhaW1wb3J0YW50O2AgOiAnYmFja2dyb3VuZDogbm9uZSAhaW1wb3J0YW50Jyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGlzSW1nVXJsKGRpdi5nZXRBdHRyaWJ1dGUoJ2JnJykpKSB7XG4gICAgICAgICAgICBkaXYuc2V0QXR0cmlidXRlKCdzdHlsZScsXG4gICAgICAgICAgICAgIHByZXZpb3VzU3R5bGVzXG4gICAgICAgICAgICAgICAgPyBgJHtwcmV2aW91c1N0eWxlc307YmFja2dyb3VuZDogJHtkaXYuZ2V0QXR0cmlidXRlKCdiZycpfSAhaW1wb3J0YW50O2BcbiAgICAgICAgICAgICAgICA6IGBiYWNrZ3JvdW5kOiAke2Rpdi5nZXRBdHRyaWJ1dGUoJ2JnJyl9ICFpbXBvcnRhbnRgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpc0ltZ1VybChiZ0ltZykpIHtcbiAgICAgICAgaWYgKGFjdGl2ZSkge1xuICAgICAgICAgIGlmICghZGl2LmdldEF0dHJpYnV0ZSgnYmdJbWcnKSkge1xuICAgICAgICAgICAgZGl2LnNldEF0dHJpYnV0ZSgnYmdJbWcnLCBiZ0ltZyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ3N0eWxlJyxcbiAgICAgICAgICAgIHByZXZpb3VzU3R5bGVzXG4gICAgICAgICAgICAgID8gYCR7cHJldmlvdXNTdHlsZXN9O2JhY2tncm91bmQtaW1hZ2U6IG5vbmUgIWltcG9ydGFudDtgXG4gICAgICAgICAgICAgIDogYGJhY2tncm91bmQtaW1hZ2U6IG5vbmUgIWltcG9ydGFudGApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChpc0ltZ1VybChkaXYuZ2V0QXR0cmlidXRlKCdiZ0ltZycpKSkge1xuICAgICAgICAgICAgZGl2LnNldEF0dHJpYnV0ZSgnc3R5bGUnLFxuICAgICAgICAgICAgICBwcmV2aW91c1N0eWxlc1xuICAgICAgICAgICAgICAgID8gYCR7cHJldmlvdXNTdHlsZXN9O2JhY2tncm91bmQtaW1hZ2U6ICR7ZGl2LmdldEF0dHJpYnV0ZSgnYmdJbWcnKX0gIWltcG9ydGFudDtgXG4gICAgICAgICAgICAgICAgOiBgYmFja2dyb3VuZC1pbWFnZTogJHtkaXYuZ2V0QXR0cmlidXRlKCdiZ0ltZycpfSAhaW1wb3J0YW50YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgaW1ncyA9IEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaW1nJykpO1xuICAgIGltZ3MuZm9yRWFjaChpbWcgPT4ge1xuXG4gICAgICBpZihpbWcucGFyZW50Tm9kZS5jbG9zZXN0KCdoZWFkZXInKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByZXZpb3VzU3R5bGVzID0gaW1nLmdldEF0dHJpYnV0ZSgnc3R5bGUnKTtcbiAgICAgIGlmIChhY3RpdmUpIHtcblxuICAgICAgICBjb25zdCBmb3JtYXR0ZWRTdHlsZXMgPSBwcmV2aW91c1N0eWxlcy5yZXBsYWNlKC92aXNpYmlsaXR5OiAodmlzaWJsZXxoaWRkZW4pOzs/L2dtLCAnJyk7XG4gICAgICAgIGltZy5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgcHJldmlvdXNTdHlsZXNcbiAgICAgICAgICA/IGAke2Zvcm1hdHRlZFN0eWxlc312aXNpYmlsaXR5OiBoaWRkZW47YFxuICAgICAgICAgIDogJ3Zpc2liaWxpdHk6IGhpZGRlbjsnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZFN0eWxlcyA9IHByZXZpb3VzU3R5bGVzLnJlcGxhY2UoL3Zpc2liaWxpdHk6ICh2aXNpYmxlfGhpZGRlbik7Oz8vZ20sICcnKTtcbiAgICAgICAgaW1nLnNldEF0dHJpYnV0ZSgnc3R5bGUnLFxuICAgICAgICAgIHByZXZpb3VzU3R5bGVzXG4gICAgICAgICAgICA/IGAke2Zvcm1hdHRlZFN0eWxlc312aXNpYmlsaXR5OiB2aXNpYmxlO2BcbiAgICAgICAgICAgIDogYHZpc2liaWxpdHk6IHZpc2libGU7YCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYFxuICAgICAgaW1nIHtcbiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgfVxuICAgICAgXG4gICAgICB2aWRlbyB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgICBcbiAgICAgICoge1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xuICAgICAgfVxuICAgIGA7XG4gIH1cblxuICByZWFkaW5nTWFzayhhY3RpdmUpIHtcbiAgICBpZiAoIXRoaXMuX21hc2suZW5hYmxlZCAmJiBhY3RpdmUpIHtcbiAgICAgIHRoaXMuX21hc2suZW5hYmxlZCA9IGFjdGl2ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbWFzay5lbmFibGVkID0gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIG1vbm9jaHJvbWUoYWN0aXZlKSB7XG4gICAgcmV0dXJuIGBcbiAgICAgIGh0bWwge1xuICAgICAgICBmaWx0ZXI6IGdyYXlzY2FsZSgkeyFhY3RpdmUgPyAwIDogMX0pO1xuICAgICAgfVxuICAgIGA7XG4gIH1cblxuICBwYXJraW5zb24oYWN0aXZlKSB7XG5cbiAgICBpZiAoYWN0aXZlKSB7XG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdidXR0b24nKS5mb3JFYWNoKGJ1dHRvbiA9PiB7XG4gICAgICAgIGJ1dHRvbi5zdHlsZS5wYWRkaW5nID0gJzI0cHgnO1xuICAgICAgICBidXR0b24uc2V0QXR0cmlidXRlKCdkYXRhLXBhZGRpbmcnLCB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShidXR0b24pLnBhZGRpbmcpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2J1dHRvbicpLmZvckVhY2goYnV0dG9uID0+IHtcbiAgICAgICAgYnV0dG9uLnN0eWxlLnBhZGRpbmcgPSBidXR0b24uZ2V0QXR0cmlidXRlKCdkYXRhLXBhZGRpbmcnKSB8fCAwO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBgaDEsIGgyLCBoMywgaDQsIGg1LCBoNiwgcCwgYSwgYnV0dG9uLCBzcGFuLCBsaSB7IHBhZGRpbmc6IDI0cHggfWA7XG4gIH1cblxuICBhZGhzKGFjdGl2ZSkge1xuICAgIGlmIChhY3RpdmUpIHtcbiAgICAgIGlmICghdGhpcy5fbWFzay5lbmFibGVkKSB7XG4gICAgICAgIGlmICghdGhpcy5faXNNb2JpbGUoKSkge1xuICAgICAgICAgIHRoaXMucmVhZGluZ01hc2sodHJ1ZSk7XG4gICAgICAgICAgdGhpcy5fbW9kZWwucmVhZGluZ01hc2sgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubW9ub2Nocm9tZSh0cnVlKTtcbiAgICAgICAgdGhpcy5fbW9kZWwubW9ub2Nocm9tZSA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghdGhpcy5faXNNb2JpbGUoKSkge1xuICAgICAgICB0aGlzLnJlYWRpbmdNYXNrKGZhbHNlKTtcbiAgICAgICAgdGhpcy5fbW9kZWwucmVhZGluZ01hc2sgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMubW9ub2Nocm9tZShmYWxzZSk7XG4gICAgICB0aGlzLl9tb2RlbC5tb25vY2hyb21lID0gZmFsc2U7XG4gICAgICB0aGlzLl9tYXNrLmVuYWJsZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGBgO1xuICB9XG5cbiAgbG93VmlzaW9uKGFjdGl2ZSkge1xuICAgIHRoaXMuX21vZGVsLmZvbnRTaXplID0gYWN0aXZlID8gNSA6IDA7XG4gICAgLy90aGlzLl9tb2RlbC5mb250RmFtaWx5ID0gYWN0aXZlID8gXCJ7XFxcInVybFxcXCI6XFxcImh0dHBzOi8vcGFnZWQuYWkvZm9udHMvT3BlblNhbnMtcHJvZC5jc3NcXFwiLFxcXCJjc3NcXFwiOlxcXCJmb250LWZhbWlseTogJ09wZW4gU2FucycsIHNhbnMtc2VyaWYgIWltcG9ydGFudFxcXCJ9XCIgOiBudWxsO1xuICAgIGlmKHRoaXMuX2ZvbnRGYW1pbHlSZWZlcmVuY2UpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRPcHRpb24gPSBBcnJheS5mcm9tKHRoaXMuX2ZvbnRGYW1pbHlSZWZlcmVuY2Uub3B0aW9ucykuZmlsdGVyKG9wdGlvbiA9PiBvcHRpb24udmFsdWUuaW5jbHVkZXMoJ09wZW5TYW5zJykpWzBdO1xuICAgICAgdGhpcy5fbW9kZWwuZm9udEZhbWlseSA9IGFjdGl2ZSA/IGN1cnJlbnRPcHRpb24udmFsdWUgOiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gYGA7XG4gIH1cblxuICBkeXNsZXhpYShhY3RpdmUpIHtcbiAgICBpZiAoYWN0aXZlKSB7XG4gICAgICBpZiAoIXRoaXMuX21hc2suZW5hYmxlZCkge1xuICAgICAgICBpZiAoIXRoaXMuX2lzTW9iaWxlKCkpIHtcbiAgICAgICAgICB0aGlzLnJlYWRpbmdNYXNrKHRydWUpO1xuICAgICAgICAgIHRoaXMuX21vZGVsLnJlYWRpbmdNYXNrID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghdGhpcy5faXNNb2JpbGUoKSkge1xuICAgICAgICB0aGlzLnJlYWRpbmdNYXNrKGZhbHNlKTtcbiAgICAgICAgdGhpcy5fbW9kZWwucmVhZGluZ01hc2sgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy90aGlzLl9tb2RlbC5mb250RmFtaWx5ID0gbnVsbDtcbiAgICB9XG4gICAgLy9jb25zdCBmb250ID0gXCJ7XFxcInVybFxcXCI6XFxcImh0dHBzOi8vcGFnZWQuYWkvZm9udHMvT3BlbkR5c2xleGljLXByb2QuY3NzXFxcIixcXFwiY3NzXFxcIjpcXFwiZm9udC1mYW1pbHk6ICdPcGVuRHlzbGV4aWMnLCBzZXJpZiAhaW1wb3J0YW50XFxcIn1cIjtcbiAgICAvL3RoaXMuX21vZGVsLmZvbnRGYW1pbHkgPSBhY3RpdmUgPyBmb250IDogbnVsbDtcblxuICAgIC8vdGhpcy5fbW9kZWwuZm9udEZhbWlseSA9IGFjdGl2ZSA/IFwie1xcXCJ1cmxcXFwiOlxcXCJodHRwOi8vbG9jYWxob3N0OjMwMDAvZm9udHMvT3BlbkR5c2xleGljLWRldi5jc3NcXFwiLFxcXCJjc3NcXFwiOlxcXCJmb250LWZhbWlseTogJ09wZW5EeXNsZXhpYycsIHNlcmlmICFpbXBvcnRhbnRcXFwifVwiIDogbnVsbDtcblxuICAgIC8vaWYodGhpcy5fZm9udEZhbWlseVJlZmVyZW5jZSlcbiAgICAgIC8vdGhpcy5fZm9udEZhbWlseVJlZmVyZW5jZS52YWx1ZSA9IGFjdGl2ZSA/IGZvbnQgOiAnJztcblxuICAgIGlmKHRoaXMuX2ZvbnRGYW1pbHlSZWZlcmVuY2UpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRPcHRpb24gPSBBcnJheS5mcm9tKHRoaXMuX2ZvbnRGYW1pbHlSZWZlcmVuY2Uub3B0aW9ucykuZmlsdGVyKG9wdGlvbiA9PiBvcHRpb24udmFsdWUuaW5jbHVkZXMoJ09wZW5EeXNsZXhpYycpKVswXTtcbiAgICAgIHRoaXMuX21vZGVsLmZvbnRGYW1pbHkgPSBhY3RpdmUgPyBjdXJyZW50T3B0aW9uLnZhbHVlIDogbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gYGA7XG4gIH1cblxuICBzY3JlZW5SZWFkZXIoYWN0aXZlKSB7XG5cbiAgICBpZiAoIXRoaXMuX3JlYWRlci5lbmFibGVkICYmIGFjdGl2ZSkge1xuICAgICAgdGhpcy5fcmVhZGVyLmVuYWJsZWQgPSBhY3RpdmU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3JlYWRlci5lbmFibGVkID0gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnRyYXN0KGFjdGl2ZSkge1xuICAgIGNvbnN0IGRpdnMgPSBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RpdicpKTtcbiAgICBkaXZzLmZvckVhY2goZGl2ID0+IHtcbiAgICAgIGxldCBiZyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRpdikuYmFja2dyb3VuZDtcbiAgICAgIGxldCBiZ0ltZyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRpdikuYmFja2dyb3VuZEltYWdlO1xuICAgICAgbGV0IHByZXZpb3VzU3R5bGVzID0gZGl2LmdldEF0dHJpYnV0ZSgnc3R5bGUnKTtcbiAgICAgIGNvbnN0IHJncyA9IG5ldyBSZWdFeHAoL2JhY2tncm91bmQoLWltYWdlKT86XFxzPy4qO1xccz8vZ20pO1xuICAgICAgY29uc3QgaXNJbWdVcmwgPSAoc3RyKSA9PiBuZXcgUmVnRXhwKC91cmxcXChcIi4rXCJcXCkkL2dtKS50ZXN0KHN0cik7XG4gICAgICBpZiAoaXNJbWdVcmwoYmcpIHx8IGRpdi5nZXRBdHRyaWJ1dGUoJ2JnSW1nJykpIHtcbiAgICAgICAgaWYgKGFjdGl2ZSkge1xuICAgICAgICAgIGlmICghZGl2LmdldEF0dHJpYnV0ZSgnYmdJbWcnKSkge1xuICAgICAgICAgICAgZGl2LnNldEF0dHJpYnV0ZSgnYmdJbWcnLCBiZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ3N0eWxlJyxcbiAgICAgICAgICAgIHByZXZpb3VzU3R5bGVzXG4gICAgICAgICAgICAgID8gYCR7cHJldmlvdXNTdHlsZXN9O2JhY2tncm91bmQ6ICR7ZGl2LmdldEF0dHJpYnV0ZSgnYmdJbWcnKX0gIWltcG9ydGFudDtgXG4gICAgICAgICAgICAgIDogYGJhY2tncm91bmQ6ICR7ZGl2LmdldEF0dHJpYnV0ZSgnYmdJbWcnKX0gIWltcG9ydGFudGApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXNJbWdVcmwoYmdJbWcpIHx8IGRpdi5nZXRBdHRyaWJ1dGUoJ2JnSW1nJykpIHtcbiAgICAgICAgaWYgKGFjdGl2ZSkge1xuICAgICAgICAgIGlmICghZGl2LmdldEF0dHJpYnV0ZSgnYmdJbWcnKSkge1xuICAgICAgICAgICAgZGl2LnNldEF0dHJpYnV0ZSgnYmdJbWcnLCBiZ0ltZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ3N0eWxlJyxcbiAgICAgICAgICAgIHByZXZpb3VzU3R5bGVzXG4gICAgICAgICAgICAgID8gYCR7cHJldmlvdXNTdHlsZXN9O2JhY2tncm91bmQtaW1hZ2U6ICR7ZGl2LmdldEF0dHJpYnV0ZSgnYmdJbWcnKX0gIWltcG9ydGFudDtgXG4gICAgICAgICAgICAgIDogYGJhY2tncm91bmQtaW1hZ2U6ICR7ZGl2LmdldEF0dHJpYnV0ZSgnYmdJbWcnKX0gIWltcG9ydGFudGApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgaW1ncyA9IEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaW1nJykpO1xuICAgIGltZ3MuZm9yRWFjaChpbWcgPT4ge1xuICAgICAgY29uc3QgcHJldmlvdXNTdHlsZXMgPSBpbWcuZ2V0QXR0cmlidXRlKCdzdHlsZScpO1xuICAgICAgaW1nLnNldEF0dHJpYnV0ZSgnc3R5bGUnLFxuICAgICAgcHJldmlvdXNTdHlsZXNcbiAgICAgICAgPyBgJHtwcmV2aW91c1N0eWxlc307dmlzaWJpbGl0eTogdmlzaWJsZTtgXG4gICAgICAgIDogYHZpc2liaWxpdHk6IHZpc2libGU7YCk7XG5cbiAgICAgIC8vIGNoZWNrIGZvciBiYWNrZ3JvdW5kXG4gICAgICBpZiAoIWltZy5nZXRBdHRyaWJ1dGUoJ2RlZmF1bHRCZycpKSB7XG5cbiAgICAgICAgaWYoaW1nLnN0eWxlLmJhY2tncm91bmQpe1xuICAgICAgICAgIGltZy5zZXRBdHRyaWJ1dGUoJ2RlZmF1bHRCZycsIGltZy5zdHlsZS5iYWNrZ3JvdW5kKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNle1xuICAgICAgICAgIGltZy5zZXRBdHRyaWJ1dGUoJ25vSW5saW5lQmcnLCAnMScpO1xuICAgICAgICB9ICAgXG4gICAgICB9ICAgICAgXG4gICAgICBlbHNle1xuICAgICAgICBpbWcuc3R5bGUuYmFja2dyb3VuZCA9IGltZy5nZXRBdHRyaWJ1dGUoJ2RlZmF1bHRCZycpO1xuICAgICAgfVxuXG4gICAgICAvLyBjaGVjayBmb3IgYmFja2dyb3VuZC1jb2xvclxuXG4gICAgICBpZiAoIWltZy5nZXRBdHRyaWJ1dGUoJ2RlZmF1bHRCZ0NvbG9yJykpIHtcblxuICAgICAgICBpZihpbWcuc3R5bGUuYmFja2dyb3VuZENvbG9yKXtcbiAgICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdkZWZhdWx0QmdDb2xvcicsIGltZy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2V7XG4gICAgICAgICAgaW1nLnNldEF0dHJpYnV0ZSgnbm9JbmxpbmVCZ0NvbG9yJywgJzEnKTtcbiAgICAgICAgfSAgIFxuICAgICAgfSAgICAgIFxuICAgICAgZWxzZXtcblxuICAgICAgICBpbWcuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gaW1nLmdldEF0dHJpYnV0ZSgnZGVmYXVsdEJnQ29sb3InKTtcblxuICAgICAgfVxuXG4gICAgICAvLyBjaGVjayBmb3IgYmFja2dyb3VuZC1zaXplXG5cbiAgICAgIGlmICghaW1nLmdldEF0dHJpYnV0ZSgnZGVmYXVsdEJnU2l6ZScpKSB7XG5cbiAgICAgICAgaWYoaW1nLnN0eWxlLmJhY2tncm91bmRTaXplKXtcbiAgICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdkZWZhdWx0QmdTaXplJywgaW1nLnN0eWxlLmJhY2tncm91bmRTaXplKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNle1xuICAgICAgICAgIGltZy5zZXRBdHRyaWJ1dGUoJ25vSW5saW5lQmdTaXplJywgJzEnKTtcbiAgICAgICAgfSAgIFxuICAgICAgfSAgICAgIFxuICAgICAgZWxzZXtcblxuICAgICAgICBpbWcuc3R5bGUuYmFja2dyb3VuZFNpemUgPSBpbWcuZ2V0QXR0cmlidXRlKCdkZWZhdWx0QmdTaXplJyk7XG5cbiAgICAgIH1cblxuICAgICAgLy8gY2hlY2sgZm9yIGJhY2tncm91bmQtcG9zaXRpb25cblxuICAgICAgaWYgKCFpbWcuZ2V0QXR0cmlidXRlKCdkZWZhdWx0QmdQb3NpdGlvbicpKSB7XG5cbiAgICAgICAgaWYoaW1nLnN0eWxlLmJhY2tncm91bmRQb3NpdGlvbil7XG4gICAgICAgICAgaW1nLnNldEF0dHJpYnV0ZSgnZGVmYXVsdEJnUG9zaXRpb24nLCBpbWcuc3R5bGUuYmFja2dyb3VuZFBvc2l0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNle1xuICAgICAgICAgIGltZy5zZXRBdHRyaWJ1dGUoJ25vSW5saW5lQmdQb3NpdGlvbicsICcxJyk7XG4gICAgICAgIH0gICBcbiAgICAgIH0gICAgICBcbiAgICAgIGVsc2V7XG5cbiAgICAgICAgaW1nLnN0eWxlLmJhY2tncm91bmRQb3NpdGlvbiA9IGltZy5nZXRBdHRyaWJ1dGUoJ2RlZmF1bHRCZ1Bvc2l0aW9uJyk7XG5cbiAgICAgIH1cblxuICAgICAgaWYgKCFpbWcuZ2V0QXR0cmlidXRlKCdkZWZhdWx0QmdSZXBlYXQnKSkge1xuXG4gICAgICAgIGlmKGltZy5zdHlsZS5iYWNrZ3JvdW5kUmVwZWF0KXtcbiAgICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdkZWZhdWx0QmdSZXBlYXQnLCBpbWcuc3R5bGUuYmFja2dyb3VuZFJlcGVhdCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZXtcbiAgICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdub0lubGluZUJnUmVwZWF0JywgJzEnKTtcbiAgICAgICAgfSAgIFxuICAgICAgfSAgICAgIFxuICAgICAgZWxzZXtcblxuICAgICAgICBpbWcuc3R5bGUuYmFja2dyb3VuZFJlcGVhdCA9IGltZy5nZXRBdHRyaWJ1dGUoJ2RlZmF1bHRCZ1JlcGVhdCcpO1xuICAgICAgICBcbiAgICAgIH1cblxuICAgICAgaWYgKGFjdGl2ZSkge1xuICAgICAgICB2YXIgYmdDb2xvciA9IGdldEluaGVyaXRlZEJhY2tncm91bmRDb2xvcihpbWcpXG4gICAgICAgIGltZy5zdHlsZS5zZXRQcm9wZXJ0eSgnYmFja2dyb3VuZCcsIGJnQ29sb3IpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGltZy5nZXRBdHRyaWJ1dGUoJ25vSW5saW5lQmcnKT09PScxJyB8fCBcbiAgICAgICAgICBpbWcuZ2V0QXR0cmlidXRlKCdub0lubGluZUJnQ29sb3InKT09PScxJyl7XG4gICAgICAgICAgICBpbWcuc3R5bGUucmVtb3ZlUHJvcGVydHkoJ2JhY2tncm91bmQnKTsgXG4gICAgICAgIH1cbiAgICAgICAgaWYoISAoaW1nLmdldEF0dHJpYnV0ZSgnbm9JbmxpbmVCZycpPT09JzEnKSl7XG4gICAgICAgICAgaW1nLnN0eWxlLmJhY2tncm91bmQgPSBpbWcuZ2V0QXR0cmlidXRlKCdkZWZhdWx0QmcnKTtcbiAgICAgICAgfVxuICAgICAgICBpZighIChpbWcuZ2V0QXR0cmlidXRlKCdub0lubGluZUJnQ29sb3InKT09PScxJykpe1xuICAgICAgICAgIGltZy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBpbWcuZ2V0QXR0cmlidXRlKCdkZWZhdWx0QmdDb2xvcicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoISAoaW1nLmdldEF0dHJpYnV0ZSgnbm9JbmxpbmVCZ1NpemUnKT09PScxJykpeyAgICAgXG4gICAgICAgICAgaW1nLnN0eWxlLmJhY2tncm91bmRTaXplID0gaW1nLmdldEF0dHJpYnV0ZSgnZGVmYXVsdEJnU2l6ZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmKCEgKGltZy5nZXRBdHRyaWJ1dGUoJ25vSW5saW5lQmdQb3NpdGlvbicpPT09JzEnKSl7XG4gICAgICAgICAgaW1nLnN0eWxlLmJhY2tncm91bmRQb3NpdGlvbiA9IGltZy5nZXRBdHRyaWJ1dGUoJ2RlZmF1bHRCZ1Bvc2l0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYoISAoaW1nLmdldEF0dHJpYnV0ZSgnbm9JbmxpbmVCZ1JlcGVhdCcpPT09JzEnKSl7XG4gICAgICAgICAgaW1nLnN0eWxlLmJhY2tncm91bmRSZXBlYXQgPSBpbWcuZ2V0QXR0cmlidXRlKCdkZWZhdWx0QmdSZXBlYXQnKTtcbiAgICAgICAgfVxuICAgICAgfSBcbiAgICAgIH0pO1xuICAgIGNvbnN0IHRleHRzID0gW10uY29uY2F0KC4uLlsnaDEnLCAnaDInLCAnaDMnLCAnaDQnLCAnaDUnLCAnaDYnLCAncCcsICdhJywgJ3NwYW4nLCAndGltZScsICdsaSddXG4gICAgICAubWFwKHNlbGVjdG9yID0+IEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcikpKSk7XG4gICAgdGV4dHMuZm9yRWFjaCh0ZXh0Tm9kZSA9PiB7ICAgICAgXG5cblxuICAgICAgLy8gY2hlY2sgZm9yIGNvbG9yXG4gICAgICBpZiAoIXRleHROb2RlLmdldEF0dHJpYnV0ZSgnZGVmYXVsdENvbG9yJykpe1xuXG4gICAgICBpZih0ZXh0Tm9kZS5zdHlsZS5jb2xvcil7XG4gICAgICAgICAgdGV4dE5vZGUuc2V0QXR0cmlidXRlKCdkZWZhdWx0Q29sb3InLCB0ZXh0Tm9kZS5zdHlsZS5jb2xvcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZXtcbiAgICAgICAgICB0ZXh0Tm9kZS5zZXRBdHRyaWJ1dGUoJ25vSW5saW5lQ29sb3InLCAnMScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNle1xuICAgICAgICB0ZXh0Tm9kZS5zdHlsZS5jb2xvciA9IHRleHROb2RlLmdldEF0dHJpYnV0ZSgnZGVmYXVsdENvbG9yJyk7XG4gICAgICB9IFxuXG4gICAgICAvLyBjaGVjayBmb3IgYmFja2dyb3VuZFxuICAgICAgaWYgKCF0ZXh0Tm9kZS5nZXRBdHRyaWJ1dGUoJ2RlZmF1bHRCZycpKSB7XG5cbiAgICAgICAgaWYodGV4dE5vZGUuc3R5bGUuYmFja2dyb3VuZCl7XG4gICAgICAgICAgdGV4dE5vZGUuc2V0QXR0cmlidXRlKCdkZWZhdWx0QmcnLCB0ZXh0Tm9kZS5zdHlsZS5iYWNrZ3JvdW5kKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNle1xuICAgICAgICAgIHRleHROb2RlLnNldEF0dHJpYnV0ZSgnbm9JbmxpbmVCZycsICcxJyk7XG4gICAgICAgIH0gICBcbiAgICAgIH0gICAgICBcbiAgICAgIGVsc2V7XG4gICAgICAgIHRleHROb2RlLnN0eWxlLmJhY2tncm91bmQgPSB0ZXh0Tm9kZS5nZXRBdHRyaWJ1dGUoJ2RlZmF1bHRCZycpO1xuICAgICAgfVxuXG4gICAgICAvLyBjaGVjayBmb3IgYmFja2dyb3VuZC1jb2xvclxuXG4gICAgICBpZiAoIXRleHROb2RlLmdldEF0dHJpYnV0ZSgnZGVmYXVsdEJnQ29sb3InKSkge1xuXG4gICAgICAgIGlmKHRleHROb2RlLnN0eWxlLmJhY2tncm91bmRDb2xvcil7XG4gICAgICAgICAgdGV4dE5vZGUuc2V0QXR0cmlidXRlKCdkZWZhdWx0QmdDb2xvcicsIHRleHROb2RlLnN0eWxlLmJhY2tncm91bmRDb2xvcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZXtcbiAgICAgICAgICB0ZXh0Tm9kZS5zZXRBdHRyaWJ1dGUoJ25vSW5saW5lQmdDb2xvcicsICcxJyk7XG4gICAgICAgIH0gICBcbiAgICAgIH0gICAgICBcbiAgICAgIGVsc2V7XG5cbiAgICAgICAgdGV4dE5vZGUuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGV4dE5vZGUuZ2V0QXR0cmlidXRlKCdkZWZhdWx0QmdDb2xvcicpO1xuXG4gICAgICB9XG5cbiAgICAgIC8vIGNoZWNrIGZvciBiYWNrZ3JvdW5kLWltYWdlXG5cbiAgICAgIGlmICghdGV4dE5vZGUuZ2V0QXR0cmlidXRlKCdkZWZhdWx0QmdJbWFnZScpKSB7XG5cbiAgICAgICAgaWYodGV4dE5vZGUuc3R5bGUuYmFja2dyb3VuZEltYWdlKXtcbiAgICAgICAgICB0ZXh0Tm9kZS5zZXRBdHRyaWJ1dGUoJ2RlZmF1bHRCZ0ltYWdlJywgdGV4dE5vZGUuc3R5bGUuYmFja2dyb3VuZEltYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNle1xuICAgICAgICAgIHRleHROb2RlLnNldEF0dHJpYnV0ZSgnbm9JbmxpbmVCZ0ltYWdlJywgJzEnKTtcbiAgICAgICAgfSAgIFxuICAgICAgfSAgICAgIFxuICAgICAgZWxzZXtcbiAgICAgICAgdGV4dE5vZGUuc3R5bGUuYmFja2dyb3VuZEltYWdlID0gdGV4dE5vZGUuZ2V0QXR0cmlidXRlKCdkZWZhdWx0QmdJbWFnZScpO1xuICAgICAgfVxuXG4gICAgICAvLyBjaGVjayBmb3IgYmFja2dyb3VuZC1zaXplXG5cbiAgICAgIGlmICghdGV4dE5vZGUuZ2V0QXR0cmlidXRlKCdkZWZhdWx0QmdTaXplJykpIHtcblxuICAgICAgICBpZih0ZXh0Tm9kZS5zdHlsZS5iYWNrZ3JvdW5kU2l6ZSl7XG4gICAgICAgICAgdGV4dE5vZGUuc2V0QXR0cmlidXRlKCdkZWZhdWx0QmdTaXplJywgdGV4dE5vZGUuc3R5bGUuYmFja2dyb3VuZFNpemUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2V7XG4gICAgICAgICAgdGV4dE5vZGUuc2V0QXR0cmlidXRlKCdub0lubGluZUJnU2l6ZScsICcxJyk7XG4gICAgICAgIH0gICBcbiAgICAgIH0gICAgICBcbiAgICAgIGVsc2V7XG5cbiAgICAgICAgdGV4dE5vZGUuc3R5bGUuYmFja2dyb3VuZFNpemUgPSB0ZXh0Tm9kZS5nZXRBdHRyaWJ1dGUoJ2RlZmF1bHRCZ1NpemUnKTtcblxuICAgICAgfVxuXG4gICAgICAvLyBjaGVjayBmb3IgYmFja2dyb3VuZC1wb3NpdGlvblxuXG4gICAgICBpZiAoIXRleHROb2RlLmdldEF0dHJpYnV0ZSgnZGVmYXVsdEJnUG9zaXRpb24nKSkge1xuXG4gICAgICAgIGlmKHRleHROb2RlLnN0eWxlLmJhY2tncm91bmRQb3NpdGlvbil7XG4gICAgICAgICAgdGV4dE5vZGUuc2V0QXR0cmlidXRlKCdkZWZhdWx0QmdQb3NpdGlvbicsIHRleHROb2RlLnN0eWxlLmJhY2tncm91bmRQb3NpdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZXtcbiAgICAgICAgICB0ZXh0Tm9kZS5zZXRBdHRyaWJ1dGUoJ25vSW5saW5lQmdQb3NpdGlvbicsICcxJyk7XG4gICAgICAgIH0gICBcbiAgICAgIH0gICAgICBcbiAgICAgIGVsc2V7XG5cbiAgICAgICAgdGV4dE5vZGUuc3R5bGUuYmFja2dyb3VuZFBvc2l0aW9uID0gdGV4dE5vZGUuZ2V0QXR0cmlidXRlKCdkZWZhdWx0QmdQb3NpdGlvbicpO1xuXG4gICAgICB9XG5cbiAgICAgIGlmICghdGV4dE5vZGUuZ2V0QXR0cmlidXRlKCdkZWZhdWx0QmdSZXBlYXQnKSkge1xuXG4gICAgICAgIGlmKHRleHROb2RlLnN0eWxlLmJhY2tncm91bmRSZXBlYXQpe1xuICAgICAgICAgIHRleHROb2RlLnNldEF0dHJpYnV0ZSgnZGVmYXVsdEJnUmVwZWF0JywgdGV4dE5vZGUuc3R5bGUuYmFja2dyb3VuZFJlcGVhdCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZXtcbiAgICAgICAgICB0ZXh0Tm9kZS5zZXRBdHRyaWJ1dGUoJ25vSW5saW5lQmdSZXBlYXQnLCAnMScpO1xuICAgICAgICB9ICAgXG4gICAgICB9ICAgICAgXG4gICAgICBlbHNle1xuXG4gICAgICAgIHRleHROb2RlLnN0eWxlLmJhY2tncm91bmRSZXBlYXQgPSB0ZXh0Tm9kZS5nZXRBdHRyaWJ1dGUoJ2RlZmF1bHRCZ1JlcGVhdCcpO1xuICAgICAgICBcbiAgICAgIH1cblxuXG5cbiAgICAgIGlmIChhY3RpdmUpIHtcbiAgICAgICAgdGV4dE5vZGUuc3R5bGUuc2V0UHJvcGVydHkoJ2JhY2tncm91bmQnLCAncmdiYSgwLCAwLCAwLCAxKScsICdpbXBvcnRhbnQnKTtcbiAgICAgICAgdGV4dE5vZGUuc3R5bGUuc2V0UHJvcGVydHkoJ2NvbG9yJywgJyNmZmZmZmYnLCAnaW1wb3J0YW50Jyk7XG4gICAgICB9IFxuICAgICAgZWxzZSB7XG5cbiAgICAgICAgaWYgKHRleHROb2RlLmdldEF0dHJpYnV0ZSgnbm9JbmxpbmVDb2xvcicpPT09JzEnKXtcbiAgICAgICAgICB0ZXh0Tm9kZS5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnY29sb3InKTsgXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGV4dE5vZGUuZ2V0QXR0cmlidXRlKCdub0lubGluZUJnJyk9PT0nMScgfHwgXG4gICAgICAgICAgdGV4dE5vZGUuZ2V0QXR0cmlidXRlKCdub0lubGluZUJnQ29sb3InKT09PScxJyB8fFxuICAgICAgICAgIHRleHROb2RlLmdldEF0dHJpYnV0ZSgnbm9JbmxpbmVCZ0ltYWdlJyk9PT0nMScpe1xuICAgICAgICAgICAgdGV4dE5vZGUuc3R5bGUucmVtb3ZlUHJvcGVydHkoJ2JhY2tncm91bmQnKTsgXG4gICAgICAgIH1cbiAgICAgICAgaWYoKCEgdGV4dE5vZGUuZ2V0QXR0cmlidXRlKCdub0lubGluZUJnJyk9PT0nMScpKXtcbiAgICAgICAgICB0ZXh0Tm9kZS5zdHlsZS5iYWNrZ3JvdW5kID0gdGV4dE5vZGUuZ2V0QXR0cmlidXRlKCdkZWZhdWx0QmcnKTtcbiAgICAgICAgfVxuICAgICAgICBpZighICh0ZXh0Tm9kZS5nZXRBdHRyaWJ1dGUoJ25vSW5saW5lQmdDb2xvcicpPT09JzEnKSl7XG4gICAgICAgICAgdGV4dE5vZGUuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGV4dE5vZGUuZ2V0QXR0cmlidXRlKCdkZWZhdWx0QmdDb2xvcicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoISAodGV4dE5vZGUuZ2V0QXR0cmlidXRlKCdub0lubGluZUJnSW1hZ2UnKT09PScxJykpe1xuICAgICAgICAgIHRleHROb2RlLnN0eWxlLmJhY2tncm91bmRJbWFnZSA9IHRleHROb2RlLmdldEF0dHJpYnV0ZSgnZGVmYXVsdEJnSW1hZ2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCEgKHRleHROb2RlLmdldEF0dHJpYnV0ZSgnbm9JbmxpbmVCZ1NpemUnKT09PScxJykpeyAgICAgXG4gICAgICAgICAgdGV4dE5vZGUuc3R5bGUuYmFja2dyb3VuZFNpemUgPSB0ZXh0Tm9kZS5nZXRBdHRyaWJ1dGUoJ2RlZmF1bHRCZ1NpemUnKTtcbiAgICAgICAgfVxuICAgICAgICBpZighICh0ZXh0Tm9kZS5nZXRBdHRyaWJ1dGUoJ25vSW5saW5lQmdQb3NpdGlvbicpPT09JzEnKSl7XG4gICAgICAgICAgdGV4dE5vZGUuc3R5bGUuYmFja2dyb3VuZFBvc2l0aW9uID0gdGV4dE5vZGUuZ2V0QXR0cmlidXRlKCdkZWZhdWx0QmdQb3NpdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIGlmKCEgKHRleHROb2RlLmdldEF0dHJpYnV0ZSgnbm9JbmxpbmVCZ1JlcGVhdCcpPT09JzEnKSl7XG4gICAgICAgICAgdGV4dE5vZGUuc3R5bGUuYmFja2dyb3VuZFJlcGVhdCA9IHRleHROb2RlLmdldEF0dHJpYnV0ZSgnZGVmYXVsdEJnUmVwZWF0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgICAgICAgXG4gICAgICB9O1xuICAgIH0pO1xuICAgIGxldCBnbG9iYWxTdHlsZXMgPSBgXG4gICAgICBpbWcsIGZpZ3VyZSB7XG4gICAgICAgIG1peC1ibGVuZC1tb2RlOiB1bnNldCAhaW1wb3J0YW50O1xuICAgICAgfVxuICAgIGA7XG4gICAgZ2xvYmFsU3R5bGVzICs9IGBcbiAgICAgIGJvZHksIG1haW4sIHNlY3Rpb24ge1xuICAgICAgICBiYWNrZ3JvdW5kOiBibGFjayAhaW1wb3J0YW50O1xuICAgICAgICBjb2xvcjogd2hpdGUgIWltcG9ydGFudDtcbiAgICAgIH1cbiAgICBgO1xuICAgIHJldHVybiBnbG9iYWxTdHlsZXM7XG4gIH1cblxuICBpc0ZpcmVmb3goKSB7XG4gICAgIHJldHVybiBuZXcgUmVnRXhwKC9GaXJlZm94L2dtKS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICB9XG5cbiAgY29sb3JBbmFseXplcihjb2xvcikge1xuICAgIHZhciByLCBnLCBiLCBoc3A7XG4gICAgaWYgKGNvbG9yLm1hdGNoKC9ecmdiLykpIHtcbiAgICAgIGNvbG9yID0gY29sb3IubWF0Y2goL15yZ2JhP1xcKChcXGQrKSxcXHMqKFxcZCspLFxccyooXFxkKykoPzosXFxzKihcXGQrKD86XFwuXFxkKyk/KSk/XFwpJC8pO1xuICAgICAgciA9IGNvbG9yWzFdO1xuICAgICAgZyA9IGNvbG9yWzJdO1xuICAgICAgYiA9IGNvbG9yWzNdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb2xvciA9ICsoXCIweFwiICsgY29sb3Iuc2xpY2UoMSkucmVwbGFjZShcbiAgICAgIGNvbG9yLmxlbmd0aCA8IDUgJiYgLy4vZywgJyQmJCYnKSk7XG4gICAgICByID0gY29sb3IgPj4gMTY7XG4gICAgICBnID0gY29sb3IgPj4gOCAmIDI1NTtcbiAgICAgIGIgPSBjb2xvciAmIDI1NTtcbiAgICB9XG4gICAgaHNwID0gTWF0aC5zcXJ0KFxuICAgICAgMC4yOTkgKiAociAqIHIpICtcbiAgICAgIDAuNTg3ICogKGcgKiBnKSArXG4gICAgICAwLjExNCAqIChiICogYilcbiAgICApO1xuICAgIGlmIChoc3A+MTI3LjUpIHtcbiAgICAgIHJldHVybiAnbGlnaHQnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJ2RhcmsnO1xuICAgIH1cbiAgfVxuXG4gIF9faW5pdF9fKCkge1xuICAgIHRoaXMuX3Jvb3QgPSBkb20uY3JlYXRlRWxlbWVudCh7XG4gICAgICB0YWc6ICdkaXYnLFxuICAgICAgYXBwZW5kVG86IGRvY3VtZW50LmJvZHksXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGNsYXNzOiBgJHtlbnYuY2xhc3Nlcy5vdmVybGF5fSAke3RoaXMuX3Bvc2l0aW9ufWAsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5fcm9vdFNoYWRvdyA9IHRoaXMuX3Jvb3QuYXR0YWNoU2hhZG93KHtcbiAgICAgIG1vZGU6ICdvcGVuJyxcbiAgICB9KTtcblxuICAgIGRvbS5jcmVhdGVFbGVtZW50KHtcbiAgICAgIHRhZzogJ3N0eWxlJyxcbiAgICAgIGlubmVySFRNTDogc3R5bGUsXG4gICAgICBhcHBlbmRUbzogdGhpcy5fcm9vdFNoYWRvdyxcbiAgICB9KTtcblxuICAgIHRoaXMuX3Jvb3RTaGFkb3cuYXBwZW5kQ2hpbGQodGhpcy5faGVhZGVyKTtcbiAgICB0aGlzLl9yb290U2hhZG93LmFwcGVuZENoaWxkKHRoaXMuX3RhYnMpO1xuICAgIHRoaXMuX3N0b3JlLnNldCgnY29uZmlnJywgdGhpcy5fbW9kZWwpO1xuICAgIHRoaXMuX2FwcGx5U3R5bGVzKCk7XG4gICAgY29uc3QgZm4gPSAoKSA9PiB0aGlzLl9hcHBseVN0eWxlcygpO1xuICAgIGNvbnN0IG9icyA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZuLmJpbmQodGhpcykpO1xuICAgIG9icy5vYnNlcnZlKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2JvZHknKSwge1xuICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgc3VidHJlZTogdHJ1ZSxcbiAgICB9KTtcbiAgICB0aGlzLl9zZXRUYWIoJ3NldHRpbmdzJyk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX29wZW4pIHtcbiAgICAgICAgLy9jb25zdCB3aWR0aCA9IGdldENvbXB1dGVkU3R5bGUodGhpcy5fcm9vdCkud2lkdGg7XG4gICAgICAgIC8vdGhpcy5fcm9vdC5zdHlsZS5sZWZ0ID0gYC0ke3dpZHRofWA7XG5cbiAgICAgICAgY29uc3Qgd2lkZ2V0V2lkdGggPSBnZXRDb21wdXRlZFN0eWxlKHRoaXMuX3Jvb3QpLndpZHRoLnNsaWNlKDAsLTIpO1xuICAgICAgICBjb25zdCB3aWR0aFdpdGhTY3JvbGxiYXIgPSBwYXJzZUludCh3aWRnZXRXaWR0aCkgKyAodGhpcy5fcm9vdC5vZmZzZXRXaWR0aCAtIHRoaXMuX3Jvb3QuY2xpZW50V2lkdGgpO1xuICAgICAgICBjb25zdCB3aWR0aCA9IHdpZHRoV2l0aFNjcm9sbGJhciArICdweCc7XG5cbiAgICAgICAgdGhpcy5fcG9zaXRpb24gPT09ICdsZWZ0JyA/IHRoaXMuX3Jvb3Quc3R5bGUubGVmdCA9IGAtJHt3aWR0aH1gIDogdGhpcy5fcm9vdC5zdHlsZS5yaWdodCA9IGAtJHt3aWR0aH1gO1xuICAgICAgICB0aGlzLl9yb290LnN0eWxlLm9wYWNpdHkgPSAnMSc7XG4gICAgICAgIHRoaXMuX3Jvb3Quc3R5bGUuYm94U2l6aW5nID0gJ2NvbnRlbnQtYm94J1xuICAgICAgfVxuICAgIH0sIDEwMCk7XG5cbiAgICBsZXQgbGFzdExvY2F0aW9uO1xuICAgIHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGlmICh3aW5kb3cubG9jYXRpb24uaHJlZiAhPT0gbGFzdExvY2F0aW9uKSB7XG4gICAgICAgIGlmICh0aGlzLl9yZWFkZXIgJiYgdGhpcy5fcmVhZGVyLl9pc0VuYWJsZWQpIHtcbiAgICAgICAgICAvKnRoaXMuX3JlYWRlci5lbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgY29uc3QgcmVhZGVyRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5fX3BhZ2VkLXNjcmVlbl9yZWFkZXInKTtcbiAgICAgICAgICBpZiAocmVhZGVyRWxlbWVudCkge1xuICAgICAgICAgICAgcmVhZGVyRWxlbWVudC5yZW1vdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fcmVhZGVyID0gbmV3IFJlYWRlcigpO1xuICAgICAgICAgIHRoaXMuX3JlYWRlci5lbmFibGVkID0gdHJ1ZTsqL1xuICAgICAgICAgIC8vdGhpcy5fcmVhZGVyLl9zeW50aC5jYW5jZWwoKTtcbiAgICAgICAgICB0aGlzLl9yZWFkZXIuX29uU3RvcCgpO1xuICAgICAgICAgIHRoaXMuX3JlYWRlci5pc0F1dG9QbGF5ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgbGFzdExvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gICAgICB9XG4gICAgfSwgMTAwKTtcblxuICAgIGlmKCF0aGlzLl9mb250RmFtaWx5UmVmZXJlbmNlKSB7XG4gICAgICBjb25zdCBmb250RmFtaWx5SW5wdXQgPSBBcnJheS5mcm9tKHRoaXMuX3Jvb3RTaGFkb3cuY2hpbGRyZW4pLmZpbHRlcihlbGVtZW50ID0+IGVsZW1lbnQubGFiZWxLZXkgPT09ICdmb250RmFtaWx5JylbMF07XG4gICAgICB0aGlzLl9mb250RmFtaWx5UmVmZXJlbmNlID0gQXJyYXkuZnJvbShmb250RmFtaWx5SW5wdXQuc2hhZG93Um9vdC5jaGlsZHJlbikuZmlsdGVyKGVsZW1lbnQgPT4gZWxlbWVudC5pZCA9PT0gJ2ZvbnRGYW1pbHknKVswXTtcbiAgICB9XG5cbiAgfVxuXG4gIF9hZGRSZXNpemVIYW5kbGVyKCkge1xuICAgIGlmICghdGhpcy5faXNNb2JpbGUoKSkge1xuICAgICAgICBsZXQgeCA9IDA7XG4gICAgICAgIGxldCB5ID0gMDtcbiAgICAgICAgbGV0IGR4ID0gMDtcbiAgICAgICAgbGV0IGR5ID0gMDtcbiAgICAgICAgbGV0IHdpZHRoID0gTnVtYmVyKGdldENvbXB1dGVkU3R5bGUodGhpcy5fcm9vdCkud2lkdGguc3BsaXQoJ3B4JylbMF0pO1xuICAgICAgICBsZXQgaGVpZ2h0ID0gTnVtYmVyKGdldENvbXB1dGVkU3R5bGUodGhpcy5fcm9vdCkuaGVpZ2h0LnNwbGl0KCdweCcpWzBdKTtcblxuICAgICAgICBmdW5jdGlvbiByZXNpemUoZXZlbnQpIHtcbiAgICAgICAgICAgIGR4ID0gZXZlbnQuc2NyZWVuWCAtIHg7XG4gICAgICAgICAgICBkeSA9IGV2ZW50LnNjcmVlblkgLSB5O1xuICAgICAgICAgICAgeCA9IGV2ZW50LnNjcmVlblg7XG4gICAgICAgICAgICB5ID0gZXZlbnQuc2NyZWVuWTtcbiAgICAgICAgICAgIHdpZHRoIC09IGR4O1xuICAgICAgICAgICAgaGVpZ2h0ICs9IGR5O1xuICAgICAgICAgICAgaWYgKHdpZHRoID49IDM2MCAmJiB3aWR0aCA8PSAxMjAwKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3Jvb3Quc3R5bGUud2lkdGggPSB3aWR0aCArICdweCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaGVpZ2h0ID4gMzAwKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3Jvb3Quc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0ICsgJ3B4JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBib3VuZCA9IHJlc2l6ZS5iaW5kKHRoaXMpO1xuICAgICAgICBjb25zdCBoYW5kbGVyID0gZG9tLmNyZWF0ZUVsZW1lbnQoe1xuICAgICAgICAgIHRhZzogJ2RpdicsXG4gICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgY2xhc3M6ICdfX3BhZ2VkLXJlc2l6ZS1oYW5kbGVyJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGlubmVySFRNTDogJycsXG4gICAgICAgICAgYXBwZW5kVG86IHRoaXMuX3Jvb3RTaGFkb3csXG4gICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICBtb3VzZWRvd246IChldmVudCkgPT4ge1xuICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICB4ID0gZXZlbnQuc2NyZWVuWDtcbiAgICAgICAgICAgICAgeSA9IGV2ZW50LnNjcmVlblk7XG4gICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGJvdW5kKTtcbiAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBib3VuZCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgb3ZlcmxheU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKGVudHJpZXMgPT4ge1xuICAgICAgICAgIGNvbnN0IHRvZ2dsZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy4nK2Vudi5jbGFzc2VzLnRvZ2dsZSk7XG4gICAgICAgICAgLy9jb25zdCB3aWR0aCA9IGdldENvbXB1dGVkU3R5bGUodGhpcy5fcm9vdCkud2lkdGg7XG5cbiAgICAgICAgICBjb25zdCB3aWRnZXRXaWR0aCA9IGdldENvbXB1dGVkU3R5bGUodGhpcy5fcm9vdCkud2lkdGguc2xpY2UoMCwtMik7XG4gICAgICAgICAgY29uc3Qgd2lkdGhXaXRoU2Nyb2xsYmFyID0gcGFyc2VJbnQod2lkZ2V0V2lkdGgpICsgKHRoaXMuX3Jvb3Qub2Zmc2V0V2lkdGggLSB0aGlzLl9yb290LmNsaWVudFdpZHRoKTtcbiAgICAgICAgICBjb25zdCB3aWR0aCA9IHdpZHRoV2l0aFNjcm9sbGJhciArICdweCc7XG5cbiAgICAgICAgICBpZiAodG9nZ2xlICYmIHRoaXMuX29wZW4pIHtcbiAgICAgICAgICAgIC8vdG9nZ2xlLnN0eWxlLnJpZ2h0ID0gd2lkdGg7XG4gICAgICAgICAgICB0aGlzLl9wb3NpdGlvbiA9PT0gJ2xlZnQnID8gdG9nZ2xlLnN0eWxlLmxlZnQgPSB3aWR0aCA6IHRvZ2dsZS5zdHlsZS5yaWdodCA9IHdpZHRoO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIG92ZXJsYXlPYnNlcnZlci5vYnNlcnZlKHRoaXMuX3Jvb3QpO1xuICAgIH1cbiAgfVxuXG4gIF9taW5pZnlTdHlsZXMoc3R5bGVzKSB7XG4gICAgcmV0dXJuIHN0eWxlc1xuICAgICAgLnJlcGxhY2UoLyhbXjAtOWEtekEtWlxcLiNdKVxccysvZywgXCIkMVwiKVxuICAgICAgLnJlcGxhY2UoL1xccyhbXjAtOWEtekEtWlxcLiNdKykvZywgXCIkMVwiKVxuICAgICAgLnJlcGxhY2UoLzt9L2csIFwifVwiKVxuICAgICAgLnJlcGxhY2UoL1xcL1xcKi4qP1xcKlxcLy9nLCBcIlwiKTtcbiAgfVxuXG4gIHFzYShub2RlLCBzZWxlY3Rvcikge1xuICAgIGNvbnN0IG5vZGVzID0gWy4uLm5vZGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcildXG4gICAgY29uc3Qgbm9kZUl0ZXJhdG9yID0gZG9jdW1lbnQuY3JlYXRlTm9kZUl0ZXJhdG9yKG5vZGUsIE5vZGUuRUxFTUVOVF9OT0RFKTtcbiAgICBsZXQgY3VycmVudE5vZGU7XG4gICAgd2hpbGUgKGN1cnJlbnROb2RlID0gbm9kZUl0ZXJhdG9yLm5leHROb2RlKCkpIHtcbiAgICAgIGlmIChBcnJheS5mcm9tKGN1cnJlbnROb2RlLmNsYXNzTGlzdCkuaW5jbHVkZXMoJ19fcGFnZWQtYWNjb3VudCcpKSB7XG4gICAgICB9XG4gICAgICBpZihjdXJyZW50Tm9kZS5zaGFkb3dSb290KSB7XG4gICAgICAgIG5vZGVzLnB1c2goLi4udGhpcy5xc2EoY3VycmVudE5vZGUuc2hhZG93Um9vdCxzZWxlY3RvcikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbm9kZXM7XG4gIH1cblxuICBhY2NvdW50U2VsZWN0b3Ioc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHIpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCBhY2NvdW50ID0gdGhpcy5fcm9vdFNoYWRvdy5xdWVyeVNlbGVjdG9yKCcuX19wYWdlZC1hY2NvdW50Jyk7XG4gICAgICAgIGlmIChhY2NvdW50KSB7XG4gICAgICAgICAgcihBcnJheS5mcm9tKGFjY291bnQuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHIoW10pO1xuICAgICAgICB9XG4gICAgICB9LCAxMDApO1xuICAgIH0pO1xuICB9XG5cbiAgX2FwcGx5U3R5bGVzKCkge1xuICAgIGNvbnN0IHRvQ3NzUHJvcCA9IHN0ciA9PiBzdHIucmVwbGFjZSgvW0EtWl0vZywgbGV0dGVyID0+IGAtJHtsZXR0ZXIudG9Mb3dlckNhc2UoKX1gKTtcbiAgICBjb25zdCBnbG9iYWxTdHlsZXMgPSBkb20uc2VsZWN0RWxlbWVudHMoJy5fX3BhZ2VkLWdsb2JhbC1zdHlsZScsIGRvY3VtZW50LmhlYWQpO1xuICAgIGdsb2JhbFN0eWxlcy5mb3JFYWNoKGNoaWxkID0+IGRvY3VtZW50LmhlYWQucmVtb3ZlQ2hpbGQoY2hpbGQpKTtcblxuICAgIGxldCBzdHlsZUNvbmZpZyA9ICcnO1xuXG4gICAgT2JqZWN0LmtleXModGhpcy5fbW9kZWwpLmZpbHRlcihzdHlsZUtleSA9PiB7XG4gICAgICBjb25zdCBjZmcgPSBbLi4uc2V0dGluZ3MsIC4uLnBlcnNvbmFzXS5maW5kKHMgPT4gcy5pZCA9PT0gc3R5bGVLZXkpO1xuICAgICAgcmV0dXJuIGNmZyAmJiBjZmcuYXBwbHkgIT09ICd0ZXh0JztcbiAgICB9KS5mb3JFYWNoKHN0eWxlS2V5ID0+IHtcbiAgICAgIGNvbnN0IGNmZyA9IFsuLi5zZXR0aW5ncywgLi4ucGVyc29uYXNdLmZpbmQocyA9PiBzLmlkID09PSBzdHlsZUtleSk7XG4gICAgICBzd2l0Y2ggKGNmZy50eXBlKSB7XG4gICAgICAgIGNhc2UgJ3N3aXRjaCc6XG4gICAgICAgICAgaWYgKHRoaXMuX21vZGVsW3N0eWxlS2V5XSkge1xuICAgICAgICAgICAgc3R5bGVDb25maWcgKz0gdGhpc1tzdHlsZUtleV0odGhpcy5fbW9kZWxbc3R5bGVLZXldKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHN0eWxlS2V5ID09PSAnYWRocycpIHtcbiAgICAgICAgICAgICAgdGhpcy5hZGhzKGZhbHNlKTtcbiAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX21vZGVsLmFkaHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3R5bGVLZXkgPT09ICdsb3dWaXNpb24nKSB7XG4gICAgICAgICAgICAgIHRoaXMubG93VmlzaW9uKGZhbHNlKTtcbiAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX21vZGVsLmxvd1Zpc2lvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdHlsZUtleSA9PT0gJ2R5c2xleGlhJykge1xuICAgICAgICAgICAgICB0aGlzLmR5c2xleGlhKGZhbHNlKTtcbiAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX21vZGVsLmR5c2xleGlhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0eWxlS2V5ID09PSAnY29udHJhc3QnKSB7XG4gICAgICAgICAgICAgIHRoaXMuY29udHJhc3QodGhpcy5fbW9kZWxbc3R5bGVLZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdHlsZUtleSA9PT0gJ3JlYWRpbmdNYXNrJykge1xuICAgICAgICAgICAgICB0aGlzLnJlYWRpbmdNYXNrKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdHlsZUtleSA9PT0gJ21vbm9jaHJvbWUnKSB7XG4gICAgICAgICAgICAgIHRoaXMubW9ub2Nocm9tZShmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3R5bGVLZXkgPT09ICdzY3JlZW5SZWFkZXInKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2NyZWVuUmVhZGVyKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBzdHlsZUNvbmZpZyAgPSBgXG4gICAgOnJvb3Qge1xuICAgICAgLS1wYWdlZC1jb2xvcjogJHt0aGlzLl9jb2xvcn07XG4gICAgfVxuICAgIGgxOm5vdChbaXNOb25UZXh0PVwiMVwiXSksIGgyOm5vdChbaXNOb25UZXh0PVwiMVwiXSksIGgzOm5vdChbaXNOb25UZXh0PVwiMVwiXSksIGg0Om5vdChbaXNOb25UZXh0PVwiMVwiXSksIGg1Om5vdChbaXNOb25UZXh0PVwiMVwiXSksIGg2Om5vdChbaXNOb25UZXh0PVwiMVwiXSksIHA6bm90KFtpc05vblRleHQ9XCIxXCJdKSwgYTpub3QoW2lzTm9uVGV4dD1cIjFcIl0pLCBsaTpub3QoW2lzTm9uVGV4dD1cIjFcIl0pLCBtYXJrOm5vdChbaXNOb25UZXh0PVwiMVwiXSksIGluczpub3QoW2lzTm9uVGV4dD1cIjFcIl0pLCBkZWw6bm90KFtpc05vblRleHQ9XCIxXCJdKSwgc3VwOm5vdChbaXNOb25UZXh0PVwiMVwiXSksIHN1Yjpub3QoW2lzTm9uVGV4dD1cIjFcIl0pLCBzbWFsbDpub3QoW2lzTm9uVGV4dD1cIjFcIl0pLCBpOm5vdChbaXNOb25UZXh0PVwiMVwiXSksIGI6bm90KFtpc05vblRleHQ9XCIxXCJdKSwgY29kZTpub3QoW2lzTm9uVGV4dD1cIjFcIl0pLCBwcmU6bm90KFtpc05vblRleHQ9XCIxXCJdKSwgbGFiZWw6bm90KFtpc05vblRleHQ9XCIxXCJdKSwgaW5wdXQ6bm90KFtpc05vblRleHQ9XCIxXCJdKSwgdGV4dGFyZWE6bm90KFtpc05vblRleHQ9XCIxXCJdKSwgYnV0dG9uOm5vdChbaXNOb25UZXh0PVwiMVwiXSksIHNwYW46bm90KFtpc05vblRleHQ9XCIxXCJdKSwgc2VsZWN0Om5vdChbaXNOb25UZXh0PVwiMVwiXSksIHRkOm5vdChbaXNOb25UZXh0PVwiMVwiXSkge1xuICAgICAgJHtPYmplY3Qua2V5cyh0aGlzLl9tb2RlbCkuZmlsdGVyKHN0eWxlS2V5ID0+IHtcbiAgICAgICAgY29uc3QgY2ZnID0gc2V0dGluZ3MuZmluZChzID0+IHMuaWQgPT09IHN0eWxlS2V5KTtcbiAgICAgICAgcmV0dXJuIGNmZyAmJiBjZmcuYXBwbHkgPT09ICd0ZXh0JztcbiAgICAgIH0pLm1hcChzdHlsZUtleSA9PiB7XG4gICAgICAgIGNvbnN0IGNmZyA9IHNldHRpbmdzLmZpbmQocyA9PiBzLmlkID09PSBzdHlsZUtleSk7XG4gICAgICAgIFxuICAgICAgICBzd2l0Y2ggKGNmZy50eXBlKSB7XG4gICAgICAgICAgY2FzZSAnaW5jcmVtZW50JzpcbiAgICAgICAgICAgIGlmIChjZmcudW5pdCAmJiBjZmcudW5pdCA9PT0gJ3B4Jykge1xuICAgICAgICAgICAgICAgIFByb21pc2UuYWxsKFtdLmNvbmNhdCguLi50ZXh0Tm9kZXMubWFwKGFzeW5jIHNlbGVjdG9yID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBbLi4udGhpcy5xc2EoZG9jdW1lbnQsIHNlbGVjdG9yKSwgLi4uKGF3YWl0IHRoaXMuYWNjb3VudFNlbGVjdG9yKHNlbGVjdG9yKSldO1xuICAgICAgICAgICAgICAgIH0pKSkudGhlbih0ZXh0cyA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBhbGxUZXh0cyA9IHRleHRzLmZsYXQoSW5maW5pdHkpO1xuICAgICAgICAgICAgICAgICAgYWxsVGV4dHMuZm9yRWFjaCh0ZXh0RWxlbSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgIC8vIEZsYWcgbm9uLXRleHRcbiAgICAgICAgICAgICAgICAgIGlmICh0ZXh0RWxlbS50ZXh0Q29udGVudCA9PSAnJyl7XG4gICAgICAgICAgICAgICAgICAgIHRleHRFbGVtLnNldEF0dHJpYnV0ZShgaXNOb25UZXh0YCwgJzEnIHx8IDApXG4gICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudFZhbHVlID0gTnVtYmVyKHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRleHRFbGVtKVtjZmcuaWRdLnNwbGl0KCdweCcpWzBdIHx8IDApO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2VQeCA9IHRleHRFbGVtLmdldEF0dHJpYnV0ZShgYmFzZVB4JHtzdHlsZUtleX1gKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFiYXNlUHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBERU5JWlxuICAgICAgICAgICAgICAgICAgICAgIGlmKHRleHRFbGVtLmNsYXNzTGlzdC5jb250YWlucygnYXMtbGluaycpKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3R5bGVLZXkgPT09ICdmb250U2l6ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFZhbHVlID0gTnVtYmVyKHRleHRFbGVtLmZpcnN0RWxlbWVudENoaWxkLnN0eWxlLmZvbnRTaXplLnNwbGl0KCdweCcpWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICBpZih0ZXh0RWxlbS5jbGFzc0xpc3QuY29udGFpbnMoJ25hdi1saW5rJykpe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3R5bGVLZXkgPT09ICdsaW5lSGVpZ2h0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWUgPSBOdW1iZXIoZ2V0Q29tcHV0ZWRTdHlsZSh0ZXh0RWxlbS5wYXJlbnRFbGVtZW50KS5saW5lSGVpZ2h0LnNwbGl0KCdweCcpWzBdKTsgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIC8vIGZpeCB0YWJsZXByZXNzIGlzc3VlXG5cbiAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dEVsZW0udGV4dENvbnRlbnQgIT0gJycgJiYgY3VycmVudFZhbHVlID09IDApe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3R5bGVLZXkgPT09ICdsaW5lSGVpZ2h0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWUgPSBudWxsOyAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihzdHlsZUtleSA9PT0gJ2ZvbnRTaXplJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlN0YXJ0XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2codGV4dEVsZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2codGV4dEVsZW0uY2xvc2VzdChcIi50YWJsZXByZXNzXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRW5kXCIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgLy8gaWYodGV4dEVsZW0uY2xvc2VzdChcIi50YWJsZXByZXNzXCIpICE9IG51bGwpe1xuICAgICAgICAgICAgICAgICAgICAgIC8vICAgY29uc29sZS5sb2codGV4dEVsZW0pXG4gICAgICAgICAgICAgICAgICAgICAgLy8gICBjdXJyZW50VmFsdWUgPSAgTnVtYmVyKGdldENvbXB1dGVkU3R5bGUodGV4dEVsZW0uY2xvc2VzdChcIi50YWJsZXByZXNzXCIpKVtjZmcuaWRdLnNwbGl0KCdweCcpWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKGN1cnJlbnRWYWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICAgICAgICAgICAgICB0ZXh0RWxlbS5zZXRBdHRyaWJ1dGUoYGJhc2VQeCR7c3R5bGVLZXl9YCwgY3VycmVudFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsZXQgcHJldmlvdXNTdHlsZXMgPSB0ZXh0RWxlbS5nZXRBdHRyaWJ1dGUoJ3N0eWxlJyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1N0eWxlID0gYDske3RvQ3NzUHJvcChzdHlsZUtleSl9OiAke051bWJlcih0ZXh0RWxlbS5nZXRBdHRyaWJ1dGUoYGJhc2VQeCR7c3R5bGVLZXl9YCkpICsgdGhpcy5fbW9kZWxbc3R5bGVLZXldfXB4YDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzU3R5bGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVwbGFjZXIgPSBuZXcgUmVnRXhwKGBcXFxccz8ke3RvQ3NzUHJvcChzdHlsZUtleSl9OlxcXFxzPy4rcHg7P2AsICdnbScpO1xuICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzU3R5bGVzID0gcHJldmlvdXNTdHlsZXMucmVwbGFjZShyZXBsYWNlciwgJycpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRleHRFbGVtLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBwcmV2aW91c1N0eWxlcyA/IGAke3ByZXZpb3VzU3R5bGVzfSR7bmV3U3R5bGV9YCA6IG5ld1N0eWxlKTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3QgYmFzZUVtID0gY2ZnICYmIGNmZy5iYXNlID8gY2ZnLmJhc2UgOiAwO1xuICAgICAgICAgICAgICBjb25zdCBhZGRFbSA9ICh0aGlzLl9tb2RlbFtzdHlsZUtleV0gKiAoY2ZnICYmIGNmZy5pbmNyZW1lbnQgPyBjZmcuaW5jcmVtZW50IDogMC4xKSk7XG4gICAgICAgICAgICAgIHJldHVybiBgJHt0b0Nzc1Byb3Aoc3R5bGVLZXkpfTogJHtiYXNlRW0gKyBhZGRFbX1yZW0gIWltcG9ydGFudGA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgICAgICAgIHN3aXRjaCAoY2ZnLmlkKSB7XG4gICAgICAgICAgICAgIGNhc2UgJ2ZvbnRGYW1pbHknOlxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gdGhpcy5fbW9kZWxbc3R5bGVLZXldICE9PSBjZmcuZGVmYXVsdFxuICAgICAgICAgICAgICAgICAgPyBKU09OLnBhcnNlKHRoaXMuX21vZGVsW3N0eWxlS2V5XSlcbiAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGlmICghcGFyc2VkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkb20uY3JlYXRlRWxlbWVudCh7XG4gICAgICAgICAgICAgICAgICB0YWc6ICdsaW5rJyxcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgaHJlZjogcGFyc2VkVmFsdWUudXJsLFxuICAgICAgICAgICAgICAgICAgICByZWw6ICdzdHlsZXNoZWV0JyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBhcHBlbmRUbzogZG9jdW1lbnQuaGVhZCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VkVmFsdWUuY3NzO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9KS5maWx0ZXIoc3R5bGUgPT4gc3R5bGUgJiYgc3R5bGUubGVuZ3RoKS5qb2luKCc7Jyl9XG4gICAgfWA7XG5cbiAgICBPYmplY3Qua2V5cyh0aGlzLl9tb2RlbCkuZmlsdGVyKHN0eWxlS2V5ID0+IHtcbiAgICAgIGNvbnN0IGNmZyA9IFsuLi5zZXR0aW5ncywgLi4ucGVyc29uYXNdLmZpbmQocyA9PiBzLmlkID09PSBzdHlsZUtleSk7XG4gICAgICByZXR1cm4gY2ZnICYmIGNmZy5hcHBseSAhPT0gJ3RleHQnO1xuICAgIH0pLmZvckVhY2goc3R5bGVLZXkgPT4ge1xuICAgICAgY29uc3QgY2ZnID0gWy4uLnNldHRpbmdzLCAuLi5wZXJzb25hc10uZmluZChzID0+IHMuaWQgPT09IHN0eWxlS2V5KTtcbiAgICAgIHN3aXRjaCAoY2ZnLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnc3dpdGNoJzpcbiAgICAgICAgICBpZiAodGhpcy5fbW9kZWxbc3R5bGVLZXldKSB7XG4gICAgICAgICAgICBzdHlsZUNvbmZpZyArPSB0aGlzW3N0eWxlS2V5XSh0aGlzLl9tb2RlbFtzdHlsZUtleV0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoc3R5bGVLZXkgPT09ICdhZGhzJykge1xuICAgICAgICAgICAgICB0aGlzLmFkaHMoZmFsc2UpO1xuICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fbW9kZWwuYWRocztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdHlsZUtleSA9PT0gJ2xvd1Zpc2lvbicpIHtcbiAgICAgICAgICAgICAgdGhpcy5sb3dWaXNpb24oZmFsc2UpO1xuICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fbW9kZWwubG93VmlzaW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0eWxlS2V5ID09PSAnZHlzbGV4aWEnKSB7XG4gICAgICAgICAgICAgIHRoaXMuZHlzbGV4aWEoZmFsc2UpO1xuICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fbW9kZWwuZHlzbGV4aWE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3R5bGVLZXkgPT09ICdjb250cmFzdCcpIHtcbiAgICAgICAgICAgICAgdGhpcy5jb250cmFzdCh0aGlzLl9tb2RlbFtzdHlsZUtleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0eWxlS2V5ID09PSAncmVhZGluZ01hc2snKSB7XG4gICAgICAgICAgICAgIHRoaXMucmVhZGluZ01hc2soZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0eWxlS2V5ID09PSAnbW9ub2Nocm9tZScpIHtcbiAgICAgICAgICAgICAgdGhpcy5tb25vY2hyb21lKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdHlsZUtleSA9PT0gJ3NjcmVlblJlYWRlcicpIHtcbiAgICAgICAgICAgICAgdGhpcy5zY3JlZW5SZWFkZXIoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHdpZGdldFN0eWxlID0gZG9tLnNlbGVjdEVsZW1lbnQoJ3N0eWxlW2NsYXNzPVwiX19wYWdlZC13aWRnZXQtc3R5bGVcIl0nLCB0aGlzLl9yb290U2hhZG93KTtcblxuICAgIGlmICghd2lkZ2V0U3R5bGUpIHtcbiAgICAgIGRvbS5jcmVhdGVFbGVtZW50KHtcbiAgICAgICAgdGFnOiAnc3R5bGUnLFxuICAgICAgICBpbm5lckhUTUw6IHRoaXMuX21pbmlmeVN0eWxlcyhzdHlsZUNvbmZpZyksXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICBjbGFzczogJ19fcGFnZWQtd2lkZ2V0LXN0eWxlJyxcbiAgICAgICAgfSxcbiAgICAgICAgYXBwZW5kVG86IHRoaXMuX3Jvb3RTaGFkb3csXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2lkZ2V0U3R5bGUuaW5uZXJIVE1MID0gdGhpcy5fbWluaWZ5U3R5bGVzKHN0eWxlQ29uZmlnKTtcbiAgICB9XG5cbiAgICBpZih0aGlzLl9yZWFkZXIpIHtcbiAgICAgIGNvbnN0IHJlYWRlcl9yb290ID0gdGhpcy5fcmVhZGVyLl9yb290U2hhZG93O1xuICAgICAgaWYocmVhZGVyX3Jvb3QpIHtcbiAgICAgICAgY29uc3Qgc3R5bGUgPSByZWFkZXJfcm9vdC5xdWVyeVNlbGVjdG9yKCdzdHlsZScpO1xuICAgICAgICBpZiAoIXN0eWxlLmdldEF0dHJpYnV0ZSgncHJlJykpIHtcbiAgICAgICAgICBzdHlsZS5zZXRBdHRyaWJ1dGUoJ3ByZScsIHN0eWxlLmlubmVySFRNTCk7XG4gICAgICAgIH1cbiAgICAgICAgc3R5bGUuaW5uZXJIVE1MID0gc3R5bGUuZ2V0QXR0cmlidXRlKCdwcmUnKSArIHN0eWxlQ29uZmlnO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3JlYWRlci5fcmVhZGVySW5wdXRzLmZvckVhY2gocmVhZGVySW5wdXQgPT4ge1xuICAgICAgaWYodGhpcy5faW5wdXRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5faW5wdXRzLnB1c2gocmVhZGVySW5wdXQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5faW5wdXRzKSkge1xuICAgICAgKHRoaXMuX2lucHV0cyB8fCBbXSkuZm9yRWFjaChpbnB1dCA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0X3Jvb3QgPSBpbnB1dC5fcm9vdFNoYWRvdztcbiAgICAgICAgaWYgKGlucHV0X3Jvb3QpIHtcbiAgICAgICAgICBjb25zdCBzdHlsZSA9IGlucHV0X3Jvb3QucXVlcnlTZWxlY3Rvcignc3R5bGUnKTtcbiAgICAgICAgICBpZiAoIXN0eWxlLmdldEF0dHJpYnV0ZSgncHJlJykpIHtcbiAgICAgICAgICAgIHN0eWxlLnNldEF0dHJpYnV0ZSgncHJlJywgc3R5bGUuaW5uZXJIVE1MKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3R5bGUuaW5uZXJIVE1MID0gc3R5bGUuZ2V0QXR0cmlidXRlKCdwcmUnKSArIHN0eWxlQ29uZmlnO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY2hlY2tfYWNjb3VudF9yZWFkeSA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2lucHV0cy5fcm9vdFNoYWRvdykge1xuICAgICAgICAgIHRoaXMuX2lucHV0cy5fcm9vdFNoYWRvdy5xdWVyeVNlbGVjdG9yKCdzdHlsZScpLmlubmVySFRNTCArPSBzdHlsZUNvbmZpZztcbiAgICAgICAgICBjbGVhckludGVydmFsKGNoZWNrX2FjY291bnRfcmVhZHkpO1xuICAgICAgICB9XG4gICAgICB9LCAxKTtcbiAgICB9XG5cbiAgICBjb25zdCBleGlzdHNTdHlsZSA9IGRvY3VtZW50LmhlYWQucXVlcnlTZWxlY3RvcignLl9fcGFnZWQtZ2xvYmFsLXN0eWxlJyk7XG4gICAgaWYgKGV4aXN0c1N0eWxlKSB7XG4gICAgICBleGlzdHNTdHlsZS5yZW1vdmUoKTtcbiAgICB9XG4gICAgZG9tLmNyZWF0ZUVsZW1lbnQoe1xuICAgICAgdGFnOiAnc3R5bGUnLFxuICAgICAgaW5uZXJIVE1MOiB0aGlzLl9taW5pZnlTdHlsZXMoc3R5bGVDb25maWcpLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBjbGFzczogJ19fcGFnZWQtZ2xvYmFsLXN0eWxlJyxcbiAgICAgIH0sXG4gICAgICBhcHBlbmRUbzogZG9jdW1lbnQuaGVhZCxcbiAgICB9KTtcbiAgfVxuXG4gIF9yZXZlcnQoKSB7XG4gICAgdGhpcy5fbW9kZWwgPSB0aGlzLmRlZmF1bHRNb2RlbDtcbiAgICBpZiAodGhpcy5fc3RvcmUuZ2V0KCd1c2VyX3NldHRpbmdzJykpIHtcbiAgICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5fc3RvcmUuZ2V0KCd1c2VyX3NldHRpbmdzJyk7XG4gICAgICB0aGlzLl9tb2RlbCA9IHR5cGVvZiBzZXR0aW5ncyA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHNldHRpbmdzKSA6IChzZXR0aW5ncyB8fCB7fSk7XG4gICAgfVxuICAgIHRoaXMuX3N0b3JlLnNldCgnY29uZmlnJywgdGhpcy5fbW9kZWwpO1xuICAgIGNvbnN0IGdsb2JhbFN0eWxlcyA9IGRvbS5zZWxlY3RFbGVtZW50cygnLl9fcGFnZWQtZ2xvYmFsLXN0eWxlJywgZG9jdW1lbnQuaGVhZCk7XG4gICAgZ2xvYmFsU3R5bGVzLmZvckVhY2goY2hpbGQgPT4gZG9jdW1lbnQuaGVhZC5yZW1vdmVDaGlsZChjaGlsZCkpO1xuICAgIGlmICh0aGlzLl9pbnB1dHMgaW5zdGFuY2VvZiBBY2NvdW50ID09PSBmYWxzZSkge1xuICAgICAgKHRoaXMuX2lucHV0cyB8fCBbXSkuZm9yRWFjaChpbnB1dCA9PiB7XG4gICAgICAgIGlucHV0LnZhbHVlID0gdGhpcy5fbW9kZWxbaW5wdXQuX2tleV07XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5fYXBwbHlTdHlsZXMoKTtcbiAgICB0aGlzLl9yZWFkZXIgPSBuZXcgUmVhZGVyKCk7XG4gIH1cblxuICBfY2hhbmdlTGFuZ3VhZ2UoZXZlbnQpIHtcbiAgICBjb25zdCB0YWJzID0gQXJyYXkuZnJvbSh0aGlzLl9yb290U2hhZG93LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhSWRdJykpO1xuICAgIGNvbnN0IGFjdGl2ZVRhYiA9IHRhYnMuZmluZCh0ID0+IEFycmF5LmZyb20odC5jbGFzc0xpc3QpLmluY2x1ZGVzKCdhY3RpdmUnKSkuZ2V0QXR0cmlidXRlKCdkYXRhaWQnKTtcbiAgICBjb25zdCBzZWxlY3QgPSB0aGlzLl9yb290U2hhZG93LnF1ZXJ5U2VsZWN0b3IoJy5fX3BhZ2VkX2xhbmd1YWdlX2NoYW5nZXInKTtcbiAgICAvL3RoaXMuX3JlYWRlci5sYW5ndWFnZSA9IHNlbGVjdC52YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMuX3RyYW5zbGF0aW9uLnNldF9sYW5ndWFnZShzZWxlY3QudmFsdWUpO1xuICAgIHRoaXMuX3JlYWRlci5sYW5ndWFnZSA9IHNlbGVjdC52YWx1ZTtcbiAgICB0aGlzLl9yZWFkZXIuX3RyYW5zbGF0aW9uID0gdGhpcy5fdHJhbnNsYXRpb247XG4gICAgdGhpcy5fc2V0VGFiKGFjdGl2ZVRhYik7XG4gICAgdGFicy5mb3JFYWNoKHRhYiA9PiB7XG4gICAgICB0YWIuaW5uZXJIVE1MID0gdGhpcy5fdHJhbnNsYXRpb24uZ2V0KHRhYi5nZXRBdHRyaWJ1dGUoJ2RhdGFpZCcpKTtcbiAgICB9KVxuICB9XG5cbiAgX2lzTW9iaWxlKCkge1xuICAgIHJldHVybiB3aW5kb3cubWF0Y2hNZWRpYSgnKG1heC13aWR0aDogNzY3cHgpJykubWF0Y2hlcztcbiAgfVxuXG4gIF9jbG9zZSgpIHtcbiAgICBpZiAodGhpcy5fdG9nZ2xlKSB7XG4gICAgICB0aGlzLm9wZW4gPSBmYWxzZTtcbiAgICAgIHRoaXMuX3RvZ2dsZS5vcGVuID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgX3NldFRhYih0YWIpIHtcbiAgICBjb25zdCB0YWJzID0gQXJyYXkuZnJvbSh0aGlzLl9yb290U2hhZG93LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhSWRdJykpO1xuXG4gICAgdGFicy5mb3JFYWNoKHQgPT4ge1xuICAgICAgaWYgKFsnaW5kaXZpZHVhbCcsICdwZXJzb25hcyddLmluY2x1ZGVzKHQuZ2V0QXR0cmlidXRlKCdkYXRhSWQnKSkpIHtcbiAgICAgICAgaWYgKHRhYiA9PT0gJ2FjY291bnQnKSB7XG4gICAgICAgICAgdC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJ2Rpc3BsYXk6IG5vbmUnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0LnNldEF0dHJpYnV0ZSgnc3R5bGUnLCAnZGlzcGxheTogYmxvY2snKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGFicy5mb3JFYWNoKHQgPT4ge1xuICAgICAgaWYgKHQuZ2V0QXR0cmlidXRlKCdkYXRhSWQnKSA9PT0gdGFiKSB7XG4gICAgICAgIHQuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0LmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xuICAgICAgfVxuICAgICAgaWYgKHRhYiA9PT0gJ3NldHRpbmdzJyAmJiB0LmdldEF0dHJpYnV0ZSgnZGF0YUlkJykgPT09ICdpbmRpdmlkdWFsJykge1xuICAgICAgICB0LmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xuICAgICAgfVxuICAgICAgaWYgKHRhYiA9PT0gJ3BlcnNvbmFzJyAmJiB0LmdldEF0dHJpYnV0ZSgnZGF0YUlkJykgPT09ICdzZXR0aW5ncycpIHtcbiAgICAgICAgdC5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuX2lucHV0cyA9IFtdO1xuXG4gICAgY29uc3QgY29udGVudCA9IEFycmF5LmZyb20odGhpcy5fcm9vdFNoYWRvdy5jaGlsZE5vZGVzKS5maWx0ZXIoY2hpbGQgPT4ge1xuICAgICAgcmV0dXJuIGNoaWxkLnRhZ05hbWUgPT09ICdESVYnICYmXG4gICAgICAgICFBcnJheS5mcm9tKGNoaWxkLmNsYXNzTGlzdCkuaW5jbHVkZXMoJ2hlYWRlcicpICYmXG4gICAgICAgICFBcnJheS5mcm9tKGNoaWxkLmNsYXNzTGlzdCkuaW5jbHVkZXMoJ3RhYnMnKVxuICAgIH0pO1xuXG4gICAgY29udGVudC5mb3JFYWNoKG5vZGUgPT4gbm9kZS5yZW1vdmUoKSk7XG5cblxuXG4gICAgc3dpdGNoICh0YWIpIHtcbiAgICAgIGNhc2UgJ3NldHRpbmdzJzpcbiAgICAgICAgdGhpcy5faW5wdXRzID0gc2V0dGluZ3MubWFwKHNldHRpbmcgPT4ge1xuICAgICAgICAgIHJldHVybiBuZXcgSW5wdXQoe1xuICAgICAgICAgICAga2V5OiBzZXR0aW5nLmlkLFxuICAgICAgICAgICAgcGFyZW50OiB0aGlzLl9yb290U2hhZG93LFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuX21vZGVsW3NldHRpbmcuaWRdLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMuX3RyYW5zbGF0aW9uLmdldChzZXR0aW5nLmlkKSxcbiAgICAgICAgICAgIHR5cGU6IHNldHRpbmcudHlwZSxcbiAgICAgICAgICAgIG9wdGlvbnM6IHNldHRpbmcub3B0aW9ucyxcbiAgICAgICAgICAgIHdpZGdldDogdGhpcyxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiB2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5fbW9kZWwsIHtcbiAgICAgICAgICAgICAgICBbc2V0dGluZy5pZF06IHZhbHVlLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgdGhpcy5fc3RvcmUuc2V0KCdjb25maWcnLCBPYmplY3Qua2V5cyh0aGlzLl9tb2RlbClcbiAgICAgICAgICAgICAgLmZpbHRlcihrZXkgPT4gIXBlcnNvbmFzLm1hcChwID0+IHAuaWQpLmluY2x1ZGVzKGtleSkpXG4gICAgICAgICAgICAgIC5yZWR1Y2UoKG1vZCwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgbW9kW2tleV0gPSB0aGlzLl9tb2RlbFtrZXldO1xuICAgICAgICAgICAgICAgIHJldHVybiBtb2Q7XG4gICAgICAgICAgICAgIH0sIHt9KSk7XG4gICAgICAgICAgICAgIHRoaXMuX2FwcGx5U3R5bGVzKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fYXBwbHlTdHlsZXMoKTtcbiAgICAgICAgdGhpcy5fYWRkUmVzaXplSGFuZGxlcigpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2FjY291bnQnOlxuICAgICAgICB0aGlzLl9pbnB1dHMgPSBuZXcgQWNjb3VudCh7XG4gICAgICAgICAgcGFyZW50OiB0aGlzLl9yb290U2hhZG93LFxuICAgICAgICAgIHN0b3JlOiB0aGlzLl9zdG9yZSxcbiAgICAgICAgICB0cmFuc2xhdGlvbjogdGhpcy5fdHJhbnNsYXRpb24sXG4gICAgICAgICAgb25Vc2VyTG9naW46ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3JldmVydCgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgb25BY2NvdW50Vmlld0NoYW5nZTogKCkgPT4ge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2FwcGx5U3R5bGVzKClcbiAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2FwcGx5U3R5bGVzKCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2FkZFJlc2l6ZUhhbmRsZXIoKTtcbiAgICAgICAgfSwgMjAwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdwZXJzb25hcyc6XG4gICAgICAgIHRoaXMuX2lucHV0cyA9IHBlcnNvbmFzLm1hcChwZXJzb25hID0+IHtcbiAgICAgICAgICByZXR1cm4gbmV3IElucHV0KHtcbiAgICAgICAgICAgIGtleTogcGVyc29uYS5pZCxcbiAgICAgICAgICAgIHBhcmVudDogdGhpcy5fcm9vdFNoYWRvdyxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLl9tb2RlbFtwZXJzb25hLmlkXSxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLl90cmFuc2xhdGlvbi5nZXQocGVyc29uYS5pZCksXG4gICAgICAgICAgICB0eXBlOiBwZXJzb25hLnR5cGUsXG4gICAgICAgICAgICBvbkNoYW5nZTogdmFsdWUgPT4ge1xuICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuX21vZGVsLCB7XG4gICAgICAgICAgICAgICAgW3BlcnNvbmEuaWRdOiB2YWx1ZSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHRoaXMuX3N0b3JlLnNldCgnY29uZmlnJywgdGhpcy5fbW9kZWwpO1xuICAgICAgICAgICAgICAvL3RoaXMuX3NldFRhYignc2V0dGluZ3MnKTtcbiAgICAgICAgICAgICAgdGhpcy5fYXBwbHlTdHlsZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2FwcGx5U3R5bGVzKCk7XG4gICAgICAgIHRoaXMuX2FkZFJlc2l6ZUhhbmRsZXIoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG4iLCIvKiEganMtY29va2llIHYzLjAuNSB8IE1JVCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdmFyICovXG5mdW5jdGlvbiBhc3NpZ24gKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG4gICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRhcmdldFxufVxuLyogZXNsaW50LWVuYWJsZSBuby12YXIgKi9cblxuLyogZXNsaW50LWRpc2FibGUgbm8tdmFyICovXG52YXIgZGVmYXVsdENvbnZlcnRlciA9IHtcbiAgcmVhZDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlWzBdID09PSAnXCInKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDEsIC0xKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoLyglW1xcZEEtRl17Mn0pKy9naSwgZGVjb2RlVVJJQ29tcG9uZW50KVxuICB9LFxuICB3cml0ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkucmVwbGFjZShcbiAgICAgIC8lKDJbMzQ2QkZdfDNbQUMtRl18NDB8NVtCREVdfDYwfDdbQkNEXSkvZyxcbiAgICAgIGRlY29kZVVSSUNvbXBvbmVudFxuICAgIClcbiAgfVxufTtcbi8qIGVzbGludC1lbmFibGUgbm8tdmFyICovXG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXZhciAqL1xuXG5mdW5jdGlvbiBpbml0IChjb252ZXJ0ZXIsIGRlZmF1bHRBdHRyaWJ1dGVzKSB7XG4gIGZ1bmN0aW9uIHNldCAobmFtZSwgdmFsdWUsIGF0dHJpYnV0ZXMpIHtcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgYXR0cmlidXRlcyA9IGFzc2lnbih7fSwgZGVmYXVsdEF0dHJpYnV0ZXMsIGF0dHJpYnV0ZXMpO1xuXG4gICAgaWYgKHR5cGVvZiBhdHRyaWJ1dGVzLmV4cGlyZXMgPT09ICdudW1iZXInKSB7XG4gICAgICBhdHRyaWJ1dGVzLmV4cGlyZXMgPSBuZXcgRGF0ZShEYXRlLm5vdygpICsgYXR0cmlidXRlcy5leHBpcmVzICogODY0ZTUpO1xuICAgIH1cbiAgICBpZiAoYXR0cmlidXRlcy5leHBpcmVzKSB7XG4gICAgICBhdHRyaWJ1dGVzLmV4cGlyZXMgPSBhdHRyaWJ1dGVzLmV4cGlyZXMudG9VVENTdHJpbmcoKTtcbiAgICB9XG5cbiAgICBuYW1lID0gZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpXG4gICAgICAucmVwbGFjZSgvJSgyWzM0NkJdfDVFfDYwfDdDKS9nLCBkZWNvZGVVUklDb21wb25lbnQpXG4gICAgICAucmVwbGFjZSgvWygpXS9nLCBlc2NhcGUpO1xuXG4gICAgdmFyIHN0cmluZ2lmaWVkQXR0cmlidXRlcyA9ICcnO1xuICAgIGZvciAodmFyIGF0dHJpYnV0ZU5hbWUgaW4gYXR0cmlidXRlcykge1xuICAgICAgaWYgKCFhdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIHN0cmluZ2lmaWVkQXR0cmlidXRlcyArPSAnOyAnICsgYXR0cmlidXRlTmFtZTtcblxuICAgICAgaWYgKGF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0gPT09IHRydWUpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gQ29uc2lkZXJzIFJGQyA2MjY1IHNlY3Rpb24gNS4yOlxuICAgICAgLy8gLi4uXG4gICAgICAvLyAzLiAgSWYgdGhlIHJlbWFpbmluZyB1bnBhcnNlZC1hdHRyaWJ1dGVzIGNvbnRhaW5zIGEgJXgzQiAoXCI7XCIpXG4gICAgICAvLyAgICAgY2hhcmFjdGVyOlxuICAgICAgLy8gQ29uc3VtZSB0aGUgY2hhcmFjdGVycyBvZiB0aGUgdW5wYXJzZWQtYXR0cmlidXRlcyB1cCB0byxcbiAgICAgIC8vIG5vdCBpbmNsdWRpbmcsIHRoZSBmaXJzdCAleDNCIChcIjtcIikgY2hhcmFjdGVyLlxuICAgICAgLy8gLi4uXG4gICAgICBzdHJpbmdpZmllZEF0dHJpYnV0ZXMgKz0gJz0nICsgYXR0cmlidXRlc1thdHRyaWJ1dGVOYW1lXS5zcGxpdCgnOycpWzBdO1xuICAgIH1cblxuICAgIHJldHVybiAoZG9jdW1lbnQuY29va2llID1cbiAgICAgIG5hbWUgKyAnPScgKyBjb252ZXJ0ZXIud3JpdGUodmFsdWUsIG5hbWUpICsgc3RyaW5naWZpZWRBdHRyaWJ1dGVzKVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0IChuYW1lKSB7XG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcgfHwgKGFyZ3VtZW50cy5sZW5ndGggJiYgIW5hbWUpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBUbyBwcmV2ZW50IHRoZSBmb3IgbG9vcCBpbiB0aGUgZmlyc3QgcGxhY2UgYXNzaWduIGFuIGVtcHR5IGFycmF5XG4gICAgLy8gaW4gY2FzZSB0aGVyZSBhcmUgbm8gY29va2llcyBhdCBhbGwuXG4gICAgdmFyIGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWUgPyBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsgJykgOiBbXTtcbiAgICB2YXIgamFyID0ge307XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb29raWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcGFydHMgPSBjb29raWVzW2ldLnNwbGl0KCc9Jyk7XG4gICAgICB2YXIgdmFsdWUgPSBwYXJ0cy5zbGljZSgxKS5qb2luKCc9Jyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBmb3VuZCA9IGRlY29kZVVSSUNvbXBvbmVudChwYXJ0c1swXSk7XG4gICAgICAgIGphcltmb3VuZF0gPSBjb252ZXJ0ZXIucmVhZCh2YWx1ZSwgZm91bmQpO1xuXG4gICAgICAgIGlmIChuYW1lID09PSBmb3VuZCkge1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hbWUgPyBqYXJbbmFtZV0gOiBqYXJcbiAgfVxuXG4gIHJldHVybiBPYmplY3QuY3JlYXRlKFxuICAgIHtcbiAgICAgIHNldCxcbiAgICAgIGdldCxcbiAgICAgIHJlbW92ZTogZnVuY3Rpb24gKG5hbWUsIGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgc2V0KFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgYXNzaWduKHt9LCBhdHRyaWJ1dGVzLCB7XG4gICAgICAgICAgICBleHBpcmVzOiAtMVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgd2l0aEF0dHJpYnV0ZXM6IGZ1bmN0aW9uIChhdHRyaWJ1dGVzKSB7XG4gICAgICAgIHJldHVybiBpbml0KHRoaXMuY29udmVydGVyLCBhc3NpZ24oe30sIHRoaXMuYXR0cmlidXRlcywgYXR0cmlidXRlcykpXG4gICAgICB9LFxuICAgICAgd2l0aENvbnZlcnRlcjogZnVuY3Rpb24gKGNvbnZlcnRlcikge1xuICAgICAgICByZXR1cm4gaW5pdChhc3NpZ24oe30sIHRoaXMuY29udmVydGVyLCBjb252ZXJ0ZXIpLCB0aGlzLmF0dHJpYnV0ZXMpXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBhdHRyaWJ1dGVzOiB7IHZhbHVlOiBPYmplY3QuZnJlZXplKGRlZmF1bHRBdHRyaWJ1dGVzKSB9LFxuICAgICAgY29udmVydGVyOiB7IHZhbHVlOiBPYmplY3QuZnJlZXplKGNvbnZlcnRlcikgfVxuICAgIH1cbiAgKVxufVxuXG52YXIgYXBpID0gaW5pdChkZWZhdWx0Q29udmVydGVyLCB7IHBhdGg6ICcvJyB9KTtcbi8qIGVzbGludC1lbmFibGUgbm8tdmFyICovXG5cbmV4cG9ydCB7IGFwaSBhcyBkZWZhdWx0IH07XG4iLCIvL1JlcXVlc3QsIGlmIGxvY2FsU3RvcmFnZSBpcyBhdmFpbGFibGVcbmltcG9ydCBDb29raWUgZnJvbSBcImpzLWNvb2tpZVwiO1xuXG5jb25zdCBwZXJtaXNzaW9uVXRpbHMgPSB7XG4gICAgZ2V0UGVybWlzc2lvblN0YXRlOiAoKSA9PiB7XG4gICAgICAvL3JldHVybiB0cnVlO1xuICAgIH0sXG4gICAgLyppc1BhZ2VkOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiAobG9jYXRpb24uaG9zdCA9PT0gXCJsb2NhbGhvc3Q6MzAwMFwiIHx8IGxvY2F0aW9uLmhvc3RuYW1lID09PSBcInBhZ2VkLndlYnNpdGVcIik7XG4gICAgfSwqL1xuICAgIGdldENvb2tpZTogKCkgPT4ge1xuICAgICAgICByZXR1cm4gQ29va2llLmdldChcIl9fcGFnZWQuY29uc2VudFwiKTtcbiAgICB9LFxuICAgIGdldEJyb3dzZXJQZXJtaXNzaW9uOiAoKSA9PiB7XG4gICAgICBsZXQgdGVzdCA9ICd0ZXN0JztcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGVzdCwgdGVzdCk7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRlc3QpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSxcbiAgICAvL3NldEV4dGVybmFsUGVybWlzc2lvbjogKCkgPT4ge30sXG4gICAgLy9nZXRDb29raWVQZXJtaXNzaW9uOiAoKSA9PiB0cnVlLFxuXG4gICAgc2V0RXh0ZXJuYWxQZXJtaXNzaW9uOiAocGVybWlzc2lvbikgPT4ge1xuICAgICAgICBDb29raWUuc2V0KFwiX19wYWdlZC5jb25zZW50XCIsIHBlcm1pc3Npb24sIHsgc2FtZVNpdGU6IFwic3RyaWN0XCIsIGV4cGlyZXM6IDM2NSB9KVxuICAgIH1cblxufVxuXG5leHBvcnQgZGVmYXVsdCBwZXJtaXNzaW9uVXRpbHM7XG4iLCJpbXBvcnQgcGVybWlzc2lvbnMgZnJvbSBcIi4vcGVybWlzc2lvbnNcIjtcblxuY29uc3QgY29va2llUGVybWlzc2lvbnMgPSB7XG4gIGdldENvb2tpZVBlcm1pc3Npb246ICgpID0+IHtcbiAgICBpZighcGVybWlzc2lvbnMuZ2V0QnJvd3NlclBlcm1pc3Npb24oKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qaWYocGVybWlzc2lvbnMuaXNQYWdlZCgpICYmIHBlcm1pc3Npb25zLmdldENvb2tpZSgpID09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9Ki9cblxuICAgIHJldHVybiBwZXJtaXNzaW9ucy5nZXRDb29raWUoKTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgY29va2llUGVybWlzc2lvbnM7XG4iLCIvL2ltcG9ydCBwZXJtaXNzaW9uIGZyb20gJy4uLy4uL3V0aWxzL3Blcm1pc3Npb25zLmpzJzsgLy9JbXBvcnQganMtZmlsZSB3aXRoIHRoZSBsb2NhbFN0b3JhZ2UtZnVuY3Rpb25cbmltcG9ydCBwZXJtaXNzaW9uIGZyb20gJy4uLy4uL3V0aWxzL0Nvb2tpZVBlcm1pc3Npb25zJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RvcmUge1xuICBOUyA9ICdfX3BhZ2VkLic7XG4gIF9kYXRhID0gbmV3IE1hcCgpO1xuICBfbWF0Y2ggPSBuZXcgUmVnRXhwKC9fX3BhZ2VkXFwuLyk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgICAvLyBjb25kaXRpb24sIGlmIGxvY2FsU3RvcmFnZSBpcyBhdmFpbGFibGVcbiAgICBpZihwZXJtaXNzaW9uLmdldENvb2tpZVBlcm1pc3Npb24oKSAhPT0gZmFsc2UpIHtcbiAgICAgIE9iamVjdC5rZXlzKGxvY2FsU3RvcmFnZSlcbiAgICAgICAgLmZpbHRlcihrZXkgPT4gdGhpcy5fbWF0Y2gudGVzdChrZXkpKVxuICAgICAgICAuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIHRoaXMuX2RhdGEuc2V0KGtleS5zcGxpdCh0aGlzLk5TKVsxXSwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHNldChrZXksIHZhbHVlKSB7XG4gICAgdGhpcy5fZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAvLyBjb25kaXRpb24sIGlmIGxvY2FsU3RvcmFnZSBpcyBhdmFpbGFibGVcbiAgICBpZihwZXJtaXNzaW9uLmdldENvb2tpZVBlcm1pc3Npb24oKSA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGAke3RoaXMuTlN9JHtrZXl9YCxcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KHZhbHVlKSA6IHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBnZXQoa2V5KSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEuZ2V0KGtleSk7XG4gIH1cblxuICByZW1vdmUoa2V5KSB7XG5cbiAgICBpZihwZXJtaXNzaW9uLmdldENvb2tpZVBlcm1pc3Npb24oKSkge1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShgJHt0aGlzLk5TfSR7a2V5fWApO1xuICAgIH1cblxuICAgIHRoaXMuX2RhdGEuZGVsZXRlKGtleSk7XG4gIH1cbn1cbiIsImNvbnN0IHN0eWxlcyA9IGBcbiAgOmhvc3Qge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtYmV0d2VlbjtcbiAgfVxuICA6aG9zdCAuX19wYWdlZC1yZWFkaW5nLW1hc2stdG9wIHtcbiAgICB3aWR0aDogMTAwdnc7XG4gICAgaGVpZ2h0OiA0MyU7XG4gICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjMpO1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICB6LWluZGV4OiAxMDA7XG4gIH1cbiAgOmhvc3QgLl9fcGFnZWQtcmVhZGluZy1tYXNrLWJvdHRvbSB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogNDMlO1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4zKTtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgYm90dG9tOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgei1pbmRleDogMTAwO1xuICB9XG5gO1xuXG5leHBvcnQgZGVmYXVsdCBzdHlsZXM7XG4iLCJpbXBvcnQgc3R5bGUgZnJvbSAnLi9zdHlsZSc7XG5pbXBvcnQgZG9tIGZyb20gJy4uLy4uLy4uLy4uL3V0aWxzL2RvbSc7XG5pbXBvcnQgZW52IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvbmZpZ3VyYXRpb24vY29uc3RhbnRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWFzayB7XG4gIF9yb290ID0gbnVsbDtcbiAgX3Jvb3RTaGFkb3cgPSBudWxsO1xuICBfcGFyZW50ID0gbnVsbDtcbiAgX2lzRW5hYmxlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICBpZiAoIXRoaXMuX3BhcmVudCkge1xuICAgICAgdGhpcy5fcGFyZW50ID0gZG9jdW1lbnQuYm9keTtcbiAgICB9XG4gICAgdGhpcy5fX2luaXRfXygpO1xuICB9XG5cbiAgc2V0IGVuYWJsZWQodmFsdWUpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGlmICghdGhpcy5faXNFbmFibGVkKSB7XG4gICAgICAgIHRoaXMuX2NoaWxkcmVuXG4gICAgICAgICAgLmZpbHRlcihjaGlsZCA9PiBjaGlsZClcbiAgICAgICAgICAuZm9yRWFjaChjaGlsZCA9PiB0aGlzLl9yb290U2hhZG93LmFwcGVuZENoaWxkKGNoaWxkKSk7XG4gICAgICAgIHRoaXMuX3BhcmVudC5hZGRFdmVudExpc3RlbmVyKHRoaXMuX2lzTW9iaWxlID8gJ3RvdWNobW92ZScgOiAnbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7IFxuICAgICAgaWYgKHRoaXMuX3Jvb3RTaGFkb3cuY2hpbGROb2Rlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRoaXMuX3Jvb3RTaGFkb3cucXVlcnlTZWxlY3RvcignLl9fcGFnZWQtcmVhZGluZy1tYXNrLXRvcCcpLnJlbW92ZSgpO1xuICAgICAgICB0aGlzLl9yb290U2hhZG93LnF1ZXJ5U2VsZWN0b3IoJy5fX3BhZ2VkLXJlYWRpbmctbWFzay1ib3R0b20nKS5yZW1vdmUoKTtcbiAgICAgICAgdGhpcy5fcGFyZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy5faXNNb2JpbGUgPyAndG91Y2htb3ZlJyA6ICdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2lzRW5hYmxlZCA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IF90b3BNYXNrKCkge1xuICAgIGNvbnN0IGV4aXN0cyA9ICh0aGlzLl9yb290U2hhZG93LmNoaWxkTm90ZXMgfHwgW10pLmZpbmQobm9kZSA9PiBcbiAgICAgIEFycmF5LmZyb20obm9kZS5jbGFzc0xpc3QpLmluY2x1ZGVzKCdfX3BhZ2VkLXJlYWRpbmctbWFzay10b3AnKSk7IFxuICAgIGNvbnN0IGluaXRpYWxIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyIC0gNTA7XG4gICAgcmV0dXJuIGRvbS5jcmVhdGVFbGVtZW50KHtcbiAgICAgIHRhZzogJ2RpdicsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGNsYXNzOiAnX19wYWdlZC1yZWFkaW5nLW1hc2stdG9wJyxcbiAgICAgICAgc3R5bGU6IGBoZWlnaHQ6ICR7aW5pdGlhbEhlaWdodH1weGAsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0IF9ib3R0b21NYXNrKCkge1xuICAgIGNvbnN0IGluaXRpYWxIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyIC0gNTA7XG4gICAgcmV0dXJuIGRvbS5jcmVhdGVFbGVtZW50KHtcbiAgICAgIHRhZzogJ2RpdicsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGNsYXNzOiAnX19wYWdlZC1yZWFkaW5nLW1hc2stYm90dG9tJyxcbiAgICAgICAgc3R5bGU6IGBoZWlnaHQ6ICR7aW5pdGlhbEhlaWdodH1weGAsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0IF9jaGlsZHJlbigpIHtcbiAgICByZXR1cm4gW1xuICAgICAgdGhpcy5fdG9wTWFzayxcbiAgICAgIHRoaXMuX2JvdHRvbU1hc2ssXG4gICAgXTtcbiAgfVxuXG4gIGdldCBfaXNNb2JpbGUoKSB7XG4gICAgcmV0dXJuIC9BbmRyb2lkfHdlYk9TfGlQaG9uZXxpUGFkfGlQb2R8QmxhY2tCZXJyeXxJRU1vYmlsZXxPcGVyYSBNaW5pL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgfTtcblxuICBfX2luaXRfXygpIHtcbiAgICBjb25zdCBleGlzdHMgPSBkb20uc2VsZWN0RWxlbWVudChgLiR7ZW52LmNsYXNzZXMubWFza31gLCB0aGlzLl9wYXJlbnQpO1xuXG4gICAgdGhpcy5fb25Nb3VzZU1vdmUgPSB0aGlzLl9vbk1vdXNlTW92ZS5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy5fcm9vdCA9IGV4aXN0cyA/IGV4aXN0cyA6IGRvbS5jcmVhdGVFbGVtZW50KHtcbiAgICAgIHRhZzogJ2RpdicsXG4gICAgICBhcHBlbmRUbzogdGhpcy5fcGFyZW50ID8gdGhpcy5fcGFyZW50IDogdW5kZWZpbmVkLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBjbGFzczogZW52LmNsYXNzZXMubWFzayxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBpZiAoIWV4aXN0cykge1xuICAgICAgdGhpcy5fcm9vdFNoYWRvdyA9IHRoaXMuX3Jvb3QuYXR0YWNoU2hhZG93KHtcbiAgICAgICAgbW9kZTogJ29wZW4nLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fcm9vdFNoYWRvdy5pbm5lckhUTUwgPSAnJztcblxuICAgIGRvbS5jcmVhdGVFbGVtZW50KHtcbiAgICAgIHRhZzogJ3N0eWxlJyxcbiAgICAgIGlubmVySFRNTDogc3R5bGUsXG4gICAgICBhcHBlbmRUbzogdGhpcy5fcm9vdFNoYWRvdyxcbiAgICB9KTtcbiAgfVxuXG4gIF9vbk1vdXNlTW92ZShldmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3Qgd2luZG93SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0IC0gMTAwO1xuICAgIGNvbnN0IGRpc3RhbmNlRnJvbVRvcCA9IHRoaXMuX2lzTW9iaWxlID8gZXZlbnQudG91Y2hlc1swXS5jbGllbnRZIDogZXZlbnQuY2xpZW50WSAtIDUwO1xuICAgIGNvbnN0IGRpc3RhbmNlRnJvbUJvdHRvbSA9IHdpbmRvd0hlaWdodCAtIGRpc3RhbmNlRnJvbVRvcDtcbiAgICB0aGlzLl9yb290U2hhZG93LnF1ZXJ5U2VsZWN0b3IoJy5fX3BhZ2VkLXJlYWRpbmctbWFzay10b3AnKVxuICAgICAgLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBgaGVpZ2h0OiAke2Rpc3RhbmNlRnJvbVRvcCA+PSAwID8gZGlzdGFuY2VGcm9tVG9wIDogMH1weGApXG4gICAgdGhpcy5fcm9vdFNoYWRvdy5xdWVyeVNlbGVjdG9yKCcuX19wYWdlZC1yZWFkaW5nLW1hc2stYm90dG9tJylcbiAgICAgIC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgYGhlaWdodDogJHtkaXN0YW5jZUZyb21Cb3R0b20gPj0gMCA/IGRpc3RhbmNlRnJvbUJvdHRvbSA6IDB9cHhgKVxuICB9XG59XG4iLCJpbXBvcnQgZG9tIGZyb20gJy4vdXRpbHMvZG9tJztcbmltcG9ydCBzdHlsZSBmcm9tICcuL3N0eWxlJztcbmltcG9ydCBlbnYgZnJvbSAnLi4vY29uZmlndXJhdGlvbi9jb25zdGFudHMnO1xuaW1wb3J0IFRvZ2dsZSBmcm9tICcuL2NvbXBvbmVudHMvdG9nZ2xlLyc7XG5pbXBvcnQgT3ZlcmxheSBmcm9tICcuL2NvbXBvbmVudHMvb3ZlcmxheS8nO1xuaW1wb3J0IFN0b3JlIGZyb20gJy4vY29tcG9uZW50cy9zdG9yZSc7XG5pbXBvcnQgVHJhbnNsYXRlIGZyb20gJy4vY29tcG9uZW50cy90cmFuc2xhdGlvbic7XG5pbXBvcnQgTWFzayBmcm9tICcuL2NvbXBvbmVudHMvb3ZlcmxheS9jb21wb25lbnRzL21hc2snO1xuaW1wb3J0IFJlYWRlciBmcm9tICcuL2NvbXBvbmVudHMvb3ZlcmxheS9jb21wb25lbnRzL3JlYWRlci8nO1xubGV0IExvYWRlZCA9IGZhbHNlO1xuXG53aW5kb3cub25sb2FkID0gKCkgPT4ge1xuICBpZighaXNJbkVsZW1lbnRvckVkaXRNb2RlKCkpXG4gICAgaW5pdCgpO1xufVxuXG5jb25zdCBpc0luRWxlbWVudG9yRWRpdE1vZGUgPSAoKSA9PiB7XG4gIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gIHJldHVybiBzZWFyY2hQYXJhbXMuaGFzKCdlbGVtZW50b3ItcHJldmlldycpO1xuXG4gIC8vcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoJ2FjdGlvbj1lbGVtZW50b3InKSA+IC0xO1xufVxuXG5jb25zdCBjaGVja0luaXR0ZWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gIGlmICghTG9hZGVkKSB7XG4gICAgaWYoIWlzSW5FbGVtZW50b3JFZGl0TW9kZSgpKVxuICAgICAgaW5pdCgpO1xuICB9IGVsc2Uge1xuICAgIGNsZWFySW50ZXJ2YWwoY2hlY2tJbml0dGVkKTtcbiAgfVxufSwgMTAwMCk7XG5cbmxldCBwb3NpdGlvbiA9ICdyaWdodCc7XG5sZXQgY29sb3IgPSAnIzIyMkQzOSc7XG5sZXQgYWNjb3VudCA9IHRydWU7XG5sZXQgbGFuZ3VhZ2UgPSAnRU4nO1xuXG4vKiBEWU5BTUlDIFZBUlMgKi9cbi8vIHt7UE9TSVRJT059fVxuLy8ge3tDT0xPUn19XG4vLyB7e0FDQ09VTlR9fVxuLy8ge3tMQU5HVUFHRX19XG5cbmNvbnN0IGluaXQgPSAoKSA9PiB7XG4gIGlmICghZG9jdW1lbnQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZG9tLmNyZWF0ZUVsZW1lbnQoe1xuICAgIHRhZzogJ3N0eWxlJyxcbiAgICBhcHBlbmRUbzogZG9jdW1lbnQuaGVhZCxcbiAgICBpbm5lckhUTUw6IHN0eWxlLFxuICB9KTtcbiAgY29uc3QgdG9nZ2xlID0gZG9tLnNlbGVjdEVsZW1lbnQoYC4ke2Vudi5jbGFzc2VzLnRvZ2dsZX1gKTtcbiAgXG4gIGlmICghdG9nZ2xlKSB7XG4gICAgY29uc3QgdElucyA9IG5ldyBUb2dnbGUocG9zaXRpb24sIGNvbG9yKTtcbiAgICB3aW5kb3cucGFnZWRUb2dnbGUgPSB0SW5zO1xuICAgIGNvbnN0IHNJbnMgPSBuZXcgU3RvcmUoKTtcbiAgICBjb25zdCB0cmFuc2xhdGVJbnMgPSBuZXcgVHJhbnNsYXRlKGxhbmd1YWdlKTtcbiAgICBjb25zdCBtYXNrSW5zID0gbmV3IE1hc2soKTtcbiAgICBjb25zdCByZWFkZXJJbnMgPSBuZXcgUmVhZGVyKCk7XG4gICAgY29uc3Qgb0lucyA9IG5ldyBPdmVybGF5KHtcbiAgICAgIHRvZ2dsZTogdElucyxcbiAgICAgIHN0b3JlOiBzSW5zLFxuICAgICAgdHJhbnNsYXRpb246IHRyYW5zbGF0ZUlucyxcbiAgICAgIG1vZGVsOiBzSW5zLmdldCgnY29uZmlnJykgPyBKU09OLnBhcnNlKHNJbnMuZ2V0KCdjb25maWcnKSkgOiB7fSxcbiAgICAgIHBvc2l0aW9uLFxuICAgICAgY29sb3IsXG4gICAgICBhY2NvdW50LFxuICAgICAgbWFzazogbWFza0lucyxcbiAgICAgIHJlYWRlcjogcmVhZGVySW5zLFxuICAgIH0pO1xuICAgIHRJbnMuX3Jvb3QuYWRkRXZlbnRMaXN0ZW5lcignb25DbGljaycsICgpID0+IG9JbnMub3BlbiA9IHRJbnMub3Blbik7XG4gICAgTG9hZGVkID0gdHJ1ZTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIlJPT1QiLCJkb2N1bWVudCIsImJvZHkiLCJ3aW5kb3ciLCJkb21VdGlscyIsInNlbGVjdEVsZW1lbnQiLCJzZWxlY3RvciIsIm5vZGUiLCJxdWVyeVNlbGVjdG9yIiwic2VsZWN0RWxlbWVudHMiLCJzZWxlY3RvcnMiLCJBcnJheSIsImZyb20iLCJxdWVyeVNlbGVjdG9yQWxsIiwiY3JlYXRlRWxlbWVudCIsInRhZyIsImFwcGVuZFRvIiwicHJlcGVuZFRvIiwiY2hpbGRyZW4iLCJhdHRyaWJ1dGVzIiwiZXZlbnRzIiwiaW5uZXJIVE1MIiwiZWxlbWVudCIsIk9iamVjdCIsImVudHJpZXMiLCJmb3JFYWNoIiwia2V5IiwidmFsdWUiLCJzZXRBdHRyaWJ1dGUiLCJhZGRFdmVudExpc3RlbmVyIiwiY2hpbGQiLCJhcHBlbmRDaGlsZCIsInByZXBlbmQiLCJnbG9iYWxTdHlsZXMiLCJjbGFzc2VzIiwid3JhcHBlciIsInRvZ2dsZSIsIm92ZXJsYXkiLCJpbnB1dCIsImFjY291bnQiLCJhbGVydCIsIm1hc2siLCJyZWFkZXIiLCJzdHlsZXMiLCJpY29ucyIsImV5ZSIsInJldmVydCIsImNhbmNlbCIsIm1pbnVzIiwicGx1cyIsInByb2ZpbGUiLCJhcnJvdyIsInBhZ2VkIiwiYWNjZXNzaWJpbGl0eSIsImxvZ29CbGFjayIsInBsYXkiLCJwYXVzZSIsImZvcndhcmQiLCJiYWNrd2FyZCIsInNldHRpbmdzIiwic3R5bGUiLCJkb20iLCJlbnYiLCJUb2dnbGUiLCJfcm9vdCIsIl9yb290U2hhZG93IiwiX29wZW4iLCJfcG9zaXRpb24iLCJfY29sb3IiLCJfY2xpY2tFdmVudCIsIkN1c3RvbUV2ZW50IiwiY29uc3RydWN0b3IiLCJwb3NpdGlvbiIsImNvbG9yIiwiX19pbml0X18iLCJvcGVuIiwiY2xhc3NMaXN0IiwiYWRkIiwicmVtb3ZlIiwid2lkZ2V0V2lkdGgiLCJnZXRDb21wdXRlZFN0eWxlIiwid2lkdGgiLCJzbGljZSIsIndpZHRoV2l0aFNjcm9sbGJhciIsInBhcnNlSW50Iiwib2Zmc2V0V2lkdGgiLCJjbGllbnRXaWR0aCIsImxlZnQiLCJyaWdodCIsImNsYXNzIiwiYXR0YWNoU2hhZG93IiwibW9kZSIsIl9vbkNsaWNrIiwiYmluZCIsImV2ZW50IiwiZGlzcGF0Y2hFdmVudCIsIklucHV0IiwiX3BhcmVudCIsIl90ZXh0IiwiX3R5cGUiLCJfdW5pcUlkIiwiX29wdGlvbnMiLCJfa2V5IiwiX3ZhbHVlIiwiX3ZhbGlkYXRpb25zIiwiX3dpZGdldCIsIm9uQ2hhbmdlIiwiaW5wdXRFdmVudCIsImRldGFpbHMiLCJ0ZXh0Iiwib3B0aW9ucyIsIndpZGdldCIsInBhcmVudCIsInVuZGVmaW5lZCIsImxhYmVsIiwidHlwZSIsInZhbGlkYXRpb25zIiwiX2dlbklkIiwidmFsIiwicmVtb3ZlQ2hpbGQiLCJjaGlsZE5vZGVzIiwiX2NvbnRlbnQiLCJfbGFiZWwiLCJnZXRXaXRoRm9ybWF0IiwiZm9ybWF0IiwiaWQiLCJjaGVja2VkIiwiX29uQ2hhbmdlIiwiZm9yIiwiY2xpY2siLCJfc3RlcERvd24iLCJtaW4iLCJtYXgiLCJfaXNNb2JpbGUiLCJzdGVwIiwia2V5dXAiLCJldiIsIm1heFZhbHVlIiwibWluVmFsdWUiLCJwcmV2ZW50RGVmYXVsdCIsIl9zdGVwVXAiLCJtYXAiLCJvcHRpb24iLCJzZWxlY3RlZCIsIl9jaGlsZHJlbiIsImxhYmVsS2V5IiwiZmlsdGVyIiwiQUxQSEFCRVQiLCJJRF9MRU5HVEgiLCJydG4iLCJpIiwiY2hhckF0IiwiTWF0aCIsImZsb29yIiwicmFuZG9tIiwibGVuZ3RoIiwic3RlcERvd24iLCJzdGVwVXAiLCJtYXRjaE1lZGlhIiwibWF0Y2hlcyIsInNlbGVjdCIsImNoZWNrYm94Iiwic3dpdGNoRWxlbWVudCIsInBhcmVudEVsZW1lbnQiLCJwcmV2aW91c0VsZW1lbnRTaWJsaW5nIiwiX2Nsb3NlIiwibnVtYmVyIiwiTnVtYmVyIiwiRmV0Y2giLCJmaXhVcmwiLCJ1cmwiLCJQQUdFRF9FTlYiLCJnZXQiLCJmZXRjaCIsIm1ldGhvZCIsInBvc3QiLCJBbGVydCIsIl9pZCIsImNvbnRlbnQiLCJjb25zb2xlIiwibG9nIiwic2V0VGltZW91dCIsImdldEVsZW1lbnRCeUlkIiwiQWNjb3VudCIsIl9tb2RlIiwiX3VzZXIiLCJfc3RvcmUiLCJfdHJhbnNsYXRpb24iLCJfb25Vc2VyTG9naW4iLCJfb25BY2NvdW50Vmlld0NoYW5nZSIsInN0b3JlIiwidHJhbnNsYXRpb24iLCJvblVzZXJMb2dpbiIsIm9uQWNjb3VudFZpZXdDaGFuZ2UiLCJ1c2VybmFtZSIsIm5hbWUiLCJlbWFpbCIsIkRhdGUiLCJ0b0xvY2FsZURhdGVTdHJpbmciLCJ3ZWVrZGF5IiwieWVhciIsIm1vbnRoIiwiZGF5Iiwic3VibWl0IiwiX29uU3VibWl0IiwiZSIsIl9vblZpZXdDaGFuZ2UiLCJfZ2V0U2Vzc2lvbiIsInRoZW4iLCJkYXRhIiwidXNlciIsImV4aXN0cyIsImZvcm0iLCJwYXRoIiwiZmluZCIsImVsIiwidGFnTmFtZSIsImlucHV0cyIsImVycm9ycyIsImNsYXNzTmFtZSIsInJlZHVjZSIsInBheWxvYWQiLCJnZXRBdHRyaWJ1dGUiLCJlcnJvciIsIl9sb2dpbiIsIl9yZWdpc3RlciIsIl9zYXZlU2V0dGluZ3MiLCJKU09OIiwic3RyaW5naWZ5IiwicmVzcG9uc2UiLCJzdGF0dXMiLCJqc29uIiwidG9rZW4iLCJzZXQiLCJpbnNlcnRCZWZvcmUiLCJjb2RlIiwibWVzc2FnZSIsImhlYWRlcnMiLCJBdXRob3JpemF0aW9uIiwiVHJhbnNsYXRpb24iLCJfbGFuZ3VhZ2UiLCJfbGFuZ3VhZ2VzIiwiX2RhdGEiLCJNYXAiLCJsbmciLCJsYW5ndWFnZSIsInRyYW5zbGF0aW9ucyIsImdldF90cmFuc2xhdGlvbl9maWxlIiwia2V5cyIsImhhcyIsImltcG9ydGVkIiwicmVxdWlyZSIsInRvTG93ZXJDYXNlIiwiZGVmYXVsdCIsInNldF9sYW5ndWFnZSIsIlRyYW5zbGF0ZSIsIlJlYWRlciIsIl9pc0VuYWJsZWQiLCJfaXNIb3ZlcmVkIiwiX2lzRHJhZ2dpbmciLCJfc3ludGgiLCJfZHJhZ2dlciIsIl9kcmFnZ2VyUG9zaXRpb24iLCJwb3MxIiwicG9zMiIsInBvczMiLCJwb3M0IiwiX3BvcFVwIiwiX2lzQXV0b1BsYXkiLCJfaXNTcGVha2luZyIsIl9jdXJyZW50UGFyZW50IiwiX2N1cnJlbnRUZXh0IiwiX2N1cnJlbnRMaW5lIiwiX3JlYWRpbmdMaW5lcyIsIl9jdXJyZW50RWxlbWVudCIsIl9sYW5ndWFnZUNoYW5nZXIiLCJfYXV0b1BsYXlCdXR0b24iLCJfY3Vyc29yRW5hYmxlZCIsIl9yZWFkZXJJbnB1dHMiLCJfc2V0dGluZ3MiLCJyYXRlIiwicGl0Y2giLCJ2b2x1bWUiLCJsYW5nIiwiZW5hYmxlZCIsIl9yZWFkRXZlbnQiLCJkaXNwbGF5IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImlzQXV0b1BsYXkiLCJfY2hhbmdlTGFuZ3VhZ2UiLCJ0YWJzIiwidGFiIiwic2VhcmNoTW9kdWxlUm9vdCIsInNoYWRvd1Jvb3QiLCJfY3JlYXRlU2V0dGluZ3NEaWFsb2ciLCJzcGVlY2hTeW50aGVzaXMiLCJyZXN1bWUiLCJtb3VzZWRvd24iLCJfbW91c2VEb3duRXZlbnQiLCJkYXRhSWQiLCJjdXJzb3Jfc3dpdGNoIiwiY2hhbmdlIiwidGFyZ2V0IiwiX21vdXNlUmVhZGVyRXZlbnRTdHlsZUNvbnRyYXN0IiwiZWxlbSIsIl9vbkJhY2t3YXJkIiwiX29uUGxheSIsIl9vbkZvcndhcmQiLCJpbnB1dERpdiIsImxhYmVsRGl2IiwiY3Vyc29yRGl2Iiwid2Vic2l0ZURpdiIsInNldHRpbmdzRGl2IiwicmF0ZUlucHV0IiwiYmFzZSIsIndhc1BsYXlpbmciLCJwaXRjaElucHV0Iiwidm9sdW1lSW5wdXQiLCJuIiwicHVzaCIsIl9jaGVja0ZvclBsYXRmcm9tIiwibmF2aWdhdG9yIiwicGxhdGZvcm0iLCJpbmRleE9mIiwiX2NoZWNrUGFyZW50RWxlbWVudCIsInBhcmVudE5vZGUiLCJsaXN0Iiwic3BsaXQiLCJjbHMiLCJ0b0xvY2FsZUxvd2VyQ2FzZSIsImluY2x1ZGVzIiwiX2NoZWNrRm9yRWxlbWVudG9yQXR0cmlidXRlT25Cb2R5IiwibWF0Y2giLCJidXR0b24iLCJlbGVtZW50cyIsImFsbEVsZW1lbnRzIiwiaW5uZXJUZXh0IiwidGV4dEVsZW1lbnRzIiwicG9wIiwibGluZXMiLCJiYWNrZ3JvdW5kQ29sb3IiLCJ0ZXh0Q29udGVudCIsInRyaW0iLCJodG1sVGFnUmVnZXgiLCJsaW5lIiwidGVzdCIsInV0dGVyYW5jZSIsIlNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSIsIm9uZW5kIiwib25zdGFydCIsInZvaWNlcyIsImdldFZvaWNlcyIsInZvaWNlIiwic3BlYWsiLCJfb25TdG9wIiwiY2xpZW50WCIsImNsaWVudFkiLCJfbW91c2VNb3ZlRXZlbnQiLCJfbW91c2VVcEV2ZW50IiwidG9wIiwib2Zmc2V0VG9wIiwib2Zmc2V0TGVmdCIsImFjdGl2ZSIsImJhY2tncm91bmQiLCJub2RlTmFtZSIsInJlYWRUaW1lb3V0IiwibG9hZGVyIiwiY2xlYXJUaW1lb3V0Iiwic3BlYWtpbmciLCJQQUdFRF9FTlZfVVJMIiwiY3NzIiwiYXBwbHkiLCJ1bml0IiwiaW5jcmVtZW50IiwibW9iaWxlIiwic2V0dGluZyIsImlzTW9iaWxlIiwicGVyc29uYXMiLCJnZXRJbmhlcml0ZWRCYWNrZ3JvdW5kQ29sb3IiLCJkZWZhdWx0U3R5bGUiLCJnZXREZWZhdWx0QmFja2dyb3VuZCIsImRpdiIsImhlYWQiLCJiZyIsInRleHROb2RlcyIsIk92ZXJsYXkiLCJfdG9nZ2xlIiwiX2FjY291bnQiLCJfbW9kZWwiLCJfaW5wdXRzIiwiX29sZFJlZiIsIl9tYXNrIiwiX3JlYWRlciIsIl9mb250RmFtaWx5UmVmZXJlbmNlIiwibW9kZWwiLCJkZWZhdWx0TW9kZWwiLCJtIiwiY2ZnIiwiX2hlYWRlciIsIl9yZXZlcnQiLCJocmVmIiwiX3RhYnMiLCJfc2V0VGFiIiwiY29uY2F0IiwiaGlkZVBpY3R1cmVzIiwiZGl2cyIsImJnSW1nIiwiYmFja2dyb3VuZEltYWdlIiwicHJldmlvdXNTdHlsZXMiLCJpc0ltZ1VybCIsInN0ciIsIlJlZ0V4cCIsImltZ3MiLCJpbWciLCJjbG9zZXN0IiwiZm9ybWF0dGVkU3R5bGVzIiwicmVwbGFjZSIsInJlYWRpbmdNYXNrIiwibW9ub2Nocm9tZSIsInBhcmtpbnNvbiIsInBhZGRpbmciLCJhZGhzIiwibG93VmlzaW9uIiwiZm9udFNpemUiLCJjdXJyZW50T3B0aW9uIiwiZm9udEZhbWlseSIsImR5c2xleGlhIiwic2NyZWVuUmVhZGVyIiwiY29udHJhc3QiLCJyZ3MiLCJiYWNrZ3JvdW5kU2l6ZSIsImJhY2tncm91bmRQb3NpdGlvbiIsImJhY2tncm91bmRSZXBlYXQiLCJiZ0NvbG9yIiwic2V0UHJvcGVydHkiLCJyZW1vdmVQcm9wZXJ0eSIsInRleHRzIiwidGV4dE5vZGUiLCJpc0ZpcmVmb3giLCJ1c2VyQWdlbnQiLCJjb2xvckFuYWx5emVyIiwiciIsImciLCJiIiwiaHNwIiwic3FydCIsIl9hcHBseVN0eWxlcyIsImZuIiwib2JzIiwiTXV0YXRpb25PYnNlcnZlciIsIm9ic2VydmUiLCJjaGlsZExpc3QiLCJzdWJ0cmVlIiwib3BhY2l0eSIsImJveFNpemluZyIsImxhc3RMb2NhdGlvbiIsInNldEludGVydmFsIiwibG9jYXRpb24iLCJmb250RmFtaWx5SW5wdXQiLCJfYWRkUmVzaXplSGFuZGxlciIsIngiLCJ5IiwiZHgiLCJkeSIsImhlaWdodCIsInJlc2l6ZSIsInNjcmVlblgiLCJzY3JlZW5ZIiwiYm91bmQiLCJoYW5kbGVyIiwib3ZlcmxheU9ic2VydmVyIiwiUmVzaXplT2JzZXJ2ZXIiLCJfbWluaWZ5U3R5bGVzIiwicXNhIiwibm9kZXMiLCJub2RlSXRlcmF0b3IiLCJjcmVhdGVOb2RlSXRlcmF0b3IiLCJOb2RlIiwiRUxFTUVOVF9OT0RFIiwiY3VycmVudE5vZGUiLCJuZXh0Tm9kZSIsImFjY291bnRTZWxlY3RvciIsIlByb21pc2UiLCJ0b0Nzc1Byb3AiLCJsZXR0ZXIiLCJzdHlsZUNvbmZpZyIsInN0eWxlS2V5IiwicyIsImFsbCIsImFsbFRleHRzIiwiZmxhdCIsIkluZmluaXR5IiwidGV4dEVsZW0iLCJjdXJyZW50VmFsdWUiLCJiYXNlUHgiLCJjb250YWlucyIsImZpcnN0RWxlbWVudENoaWxkIiwibGluZUhlaWdodCIsIm5ld1N0eWxlIiwicmVwbGFjZXIiLCJiYXNlRW0iLCJhZGRFbSIsInBhcnNlZFZhbHVlIiwicGFyc2UiLCJyZWwiLCJqb2luIiwid2lkZ2V0U3R5bGUiLCJyZWFkZXJfcm9vdCIsInJlYWRlcklucHV0IiwiaXNBcnJheSIsImlucHV0X3Jvb3QiLCJjaGVja19hY2NvdW50X3JlYWR5IiwiY2xlYXJJbnRlcnZhbCIsImV4aXN0c1N0eWxlIiwiYWN0aXZlVGFiIiwidCIsImFzc2lnbiIsInAiLCJtb2QiLCJwZXJzb25hIiwiQ29va2llIiwicGVybWlzc2lvblV0aWxzIiwiZ2V0UGVybWlzc2lvblN0YXRlIiwiZ2V0Q29va2llIiwiZ2V0QnJvd3NlclBlcm1pc3Npb24iLCJsb2NhbFN0b3JhZ2UiLCJzZXRJdGVtIiwicmVtb3ZlSXRlbSIsInNldEV4dGVybmFsUGVybWlzc2lvbiIsInBlcm1pc3Npb24iLCJzYW1lU2l0ZSIsImV4cGlyZXMiLCJwZXJtaXNzaW9ucyIsImNvb2tpZVBlcm1pc3Npb25zIiwiZ2V0Q29va2llUGVybWlzc2lvbiIsIlN0b3JlIiwiTlMiLCJfbWF0Y2giLCJnZXRJdGVtIiwiZGVsZXRlIiwiTWFzayIsIl9vbk1vdXNlTW92ZSIsIl90b3BNYXNrIiwiY2hpbGROb3RlcyIsImluaXRpYWxIZWlnaHQiLCJpbm5lckhlaWdodCIsIl9ib3R0b21NYXNrIiwid2luZG93SGVpZ2h0IiwiZGlzdGFuY2VGcm9tVG9wIiwidG91Y2hlcyIsImRpc3RhbmNlRnJvbUJvdHRvbSIsIkxvYWRlZCIsIm9ubG9hZCIsImlzSW5FbGVtZW50b3JFZGl0TW9kZSIsImluaXQiLCJzZWFyY2hQYXJhbXMiLCJVUkxTZWFyY2hQYXJhbXMiLCJzZWFyY2giLCJjaGVja0luaXR0ZWQiLCJ0SW5zIiwicGFnZWRUb2dnbGUiLCJzSW5zIiwidHJhbnNsYXRlSW5zIiwibWFza0lucyIsInJlYWRlcklucyIsIm9JbnMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///389\n")},890:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n settings: 'Einstellungen',\n account: 'Account',\n fontFamily: 'Schriftart',\n lineHeight: 'Zeilenhöhe',\n fontSize: 'Schriftgröße',\n wordSpacing: 'Wortabstand',\n letterSpacing: 'Zeichenabstand',\n contrast: 'Kontrast',\n hidePictures: 'Bilder ausblenden',\n signIn: 'Anmelden',\n usernameOrEmail: 'Username oder Email',\n password: 'Passwort',\n forgotCredentials: 'Anmeldedaten vergessen?',\n openAccount: 'Account erstellen',\n signUp: 'Refistrieren',\n fullName: 'Voller Name',\n email: 'Email',\n username: 'Username',\n confirmPassword: 'Passwort bestätigen',\n lastSaved: 'Letzter Speicherstand',\n saveSettings: 'Einstellungen speichern',\n signOut: 'Abmelden',\n readingMask: 'Reading Mask',\n monochrome: 'Monochrome',\n personas: 'Persona',\n individual: 'Individuell',\n adhs: 'ADHS',\n parkinson: 'Parkinson',\n lowVision: 'Geringe Sehkraft',\n dyslexia: 'Legasthenie',\n screenReader: 'Screen Reader',\n rate: 'Sprechgeschwindigkeit',\n pitch: 'Stimmlage',\n volume: 'Lautstärke',\n lang: 'Sprache',\n cursor: 'Maus Modus',\n website: 'Webseiten Modus',\n orText: 'oder'\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODkwLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQSxpRUFBZTtFQUNiQSxRQUFRLEVBQUUsZUFBZTtFQUN6QkMsT0FBTyxFQUFFLFNBQVM7RUFDbEJDLFVBQVUsRUFBRSxZQUFZO0VBQ3hCQyxVQUFVLEVBQUUsWUFBWTtFQUN4QkMsUUFBUSxFQUFFLGNBQWM7RUFDeEJDLFdBQVcsRUFBRSxhQUFhO0VBQzFCQyxhQUFhLEVBQUUsZ0JBQWdCO0VBQy9CQyxRQUFRLEVBQUUsVUFBVTtFQUNwQkMsWUFBWSxFQUFFLG1CQUFtQjtFQUNqQ0MsTUFBTSxFQUFFLFVBQVU7RUFDbEJDLGVBQWUsRUFBRSxxQkFBcUI7RUFDdENDLFFBQVEsRUFBRSxVQUFVO0VBQ3BCQyxpQkFBaUIsRUFBRSx5QkFBeUI7RUFDNUNDLFdBQVcsRUFBRSxtQkFBbUI7RUFDaENDLE1BQU0sRUFBRSxjQUFjO0VBQ3RCQyxRQUFRLEVBQUUsYUFBYTtFQUN2QkMsS0FBSyxFQUFFLE9BQU87RUFDZEMsUUFBUSxFQUFFLFVBQVU7RUFDcEJDLGVBQWUsRUFBRSxxQkFBcUI7RUFDdENDLFNBQVMsRUFBRSx1QkFBdUI7RUFDbENDLFlBQVksRUFBRSx5QkFBeUI7RUFDdkNDLE9BQU8sRUFBRSxVQUFVO0VBQ25CQyxXQUFXLEVBQUUsY0FBYztFQUMzQkMsVUFBVSxFQUFFLFlBQVk7RUFDeEJDLFFBQVEsRUFBRSxTQUFTO0VBQ25CQyxVQUFVLEVBQUUsYUFBYTtFQUN6QkMsSUFBSSxFQUFFLE1BQU07RUFDWkMsU0FBUyxFQUFFLFdBQVc7RUFDdEJDLFNBQVMsRUFBRSxrQkFBa0I7RUFDN0JDLFFBQVEsRUFBRSxhQUFhO0VBQ3ZCQyxZQUFZLEVBQUUsZUFBZTtFQUU3QkMsSUFBSSxFQUFFLHVCQUF1QjtFQUM3QkMsS0FBSyxFQUFFLFdBQVc7RUFDbEJDLE1BQU0sRUFBRSxZQUFZO0VBQ3BCQyxJQUFJLEVBQUUsU0FBUztFQUVmQyxNQUFNLEVBQUUsWUFBWTtFQUNwQkMsT0FBTyxFQUFFLGlCQUFpQjtFQUUxQkMsTUFBTSxFQUFFO0FBQ1YsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL3dpZGdldC8uL3NyYy9jb21wb25lbnRzL3RyYW5zbGF0aW9uL2kxOG4vZGUuanM/Y2I2NiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCB7XG4gIHNldHRpbmdzOiAnRWluc3RlbGx1bmdlbicsXG4gIGFjY291bnQ6ICdBY2NvdW50JyxcbiAgZm9udEZhbWlseTogJ1NjaHJpZnRhcnQnLFxuICBsaW5lSGVpZ2h0OiAnWmVpbGVuaMO2aGUnLFxuICBmb250U2l6ZTogJ1NjaHJpZnRncsO2w59lJyxcbiAgd29yZFNwYWNpbmc6ICdXb3J0YWJzdGFuZCcsXG4gIGxldHRlclNwYWNpbmc6ICdaZWljaGVuYWJzdGFuZCcsXG4gIGNvbnRyYXN0OiAnS29udHJhc3QnLFxuICBoaWRlUGljdHVyZXM6ICdCaWxkZXIgYXVzYmxlbmRlbicsXG4gIHNpZ25JbjogJ0FubWVsZGVuJyxcbiAgdXNlcm5hbWVPckVtYWlsOiAnVXNlcm5hbWUgb2RlciBFbWFpbCcsXG4gIHBhc3N3b3JkOiAnUGFzc3dvcnQnLFxuICBmb3Jnb3RDcmVkZW50aWFsczogJ0FubWVsZGVkYXRlbiB2ZXJnZXNzZW4/JyxcbiAgb3BlbkFjY291bnQ6ICdBY2NvdW50IGVyc3RlbGxlbicsXG4gIHNpZ25VcDogJ1JlZmlzdHJpZXJlbicsXG4gIGZ1bGxOYW1lOiAnVm9sbGVyIE5hbWUnLFxuICBlbWFpbDogJ0VtYWlsJyxcbiAgdXNlcm5hbWU6ICdVc2VybmFtZScsXG4gIGNvbmZpcm1QYXNzd29yZDogJ1Bhc3N3b3J0IGJlc3TDpHRpZ2VuJyxcbiAgbGFzdFNhdmVkOiAnTGV0enRlciBTcGVpY2hlcnN0YW5kJyxcbiAgc2F2ZVNldHRpbmdzOiAnRWluc3RlbGx1bmdlbiBzcGVpY2hlcm4nLFxuICBzaWduT3V0OiAnQWJtZWxkZW4nLFxuICByZWFkaW5nTWFzazogJ1JlYWRpbmcgTWFzaycsXG4gIG1vbm9jaHJvbWU6ICdNb25vY2hyb21lJyxcbiAgcGVyc29uYXM6ICdQZXJzb25hJyxcbiAgaW5kaXZpZHVhbDogJ0luZGl2aWR1ZWxsJyxcbiAgYWRoczogJ0FESFMnLFxuICBwYXJraW5zb246ICdQYXJraW5zb24nLFxuICBsb3dWaXNpb246ICdHZXJpbmdlIFNlaGtyYWZ0JyxcbiAgZHlzbGV4aWE6ICdMZWdhc3RoZW5pZScsXG4gIHNjcmVlblJlYWRlcjogJ1NjcmVlbiBSZWFkZXInLFxuXG4gIHJhdGU6ICdTcHJlY2hnZXNjaHdpbmRpZ2tlaXQnLFxuICBwaXRjaDogJ1N0aW1tbGFnZScsXG4gIHZvbHVtZTogJ0xhdXRzdMOkcmtlJyxcbiAgbGFuZzogJ1NwcmFjaGUnLFxuXG4gIGN1cnNvcjogJ01hdXMgTW9kdXMnLFxuICB3ZWJzaXRlOiAnV2Vic2VpdGVuIE1vZHVzJyxcblxuICBvclRleHQ6ICdvZGVyJ1xufVxuIl0sIm5hbWVzIjpbInNldHRpbmdzIiwiYWNjb3VudCIsImZvbnRGYW1pbHkiLCJsaW5lSGVpZ2h0IiwiZm9udFNpemUiLCJ3b3JkU3BhY2luZyIsImxldHRlclNwYWNpbmciLCJjb250cmFzdCIsImhpZGVQaWN0dXJlcyIsInNpZ25JbiIsInVzZXJuYW1lT3JFbWFpbCIsInBhc3N3b3JkIiwiZm9yZ290Q3JlZGVudGlhbHMiLCJvcGVuQWNjb3VudCIsInNpZ25VcCIsImZ1bGxOYW1lIiwiZW1haWwiLCJ1c2VybmFtZSIsImNvbmZpcm1QYXNzd29yZCIsImxhc3RTYXZlZCIsInNhdmVTZXR0aW5ncyIsInNpZ25PdXQiLCJyZWFkaW5nTWFzayIsIm1vbm9jaHJvbWUiLCJwZXJzb25hcyIsImluZGl2aWR1YWwiLCJhZGhzIiwicGFya2luc29uIiwibG93VmlzaW9uIiwiZHlzbGV4aWEiLCJzY3JlZW5SZWFkZXIiLCJyYXRlIiwicGl0Y2giLCJ2b2x1bWUiLCJsYW5nIiwiY3Vyc29yIiwid2Vic2l0ZSIsIm9yVGV4dCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///890\n")},288:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n settings: 'Settings',\n account: 'Account',\n fontFamily: 'Font Family',\n lineHeight: 'Line Height',\n fontSize: 'Font Size',\n wordSpacing: 'Word Spacing',\n letterSpacing: 'Letter Spacing',\n contrast: 'Contrast',\n hidePictures: 'Hide Pictures',\n signIn: 'Sign In',\n usernameOrEmail: 'Username or Email',\n password: 'Password',\n forgotCredentials: 'Forgot credentials ?',\n openAccount: 'Open Account',\n signUp: 'Sign Up',\n fullName: 'Full Name',\n email: 'Email',\n username: 'Username',\n confirmPassword: 'Confirm Password',\n lastSaved: 'Last Save',\n saveSettings: 'Save Settings',\n signOut: 'Sign Out',\n readingMask: 'Reading Mask',\n monochrome: 'Monochrome',\n personas: 'Persona',\n individual: 'Individual',\n adhs: 'ADHS',\n parkinson: 'Parkinson',\n lowVision: 'Low Vision',\n dyslexia: 'Dyslexia',\n screenReader: 'Screen Reader',\n rate: 'Speaking speed',\n pitch: 'Voice pitch',\n volume: 'Volume',\n lang: 'Language',\n cursor: 'Cursor mode',\n website: 'Website mode',\n orText: 'or'\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjg4LmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQSxpRUFBZTtFQUNiQSxRQUFRLEVBQUUsVUFBVTtFQUNwQkMsT0FBTyxFQUFFLFNBQVM7RUFDbEJDLFVBQVUsRUFBRSxhQUFhO0VBQ3pCQyxVQUFVLEVBQUUsYUFBYTtFQUN6QkMsUUFBUSxFQUFFLFdBQVc7RUFDckJDLFdBQVcsRUFBRSxjQUFjO0VBQzNCQyxhQUFhLEVBQUUsZ0JBQWdCO0VBQy9CQyxRQUFRLEVBQUUsVUFBVTtFQUNwQkMsWUFBWSxFQUFFLGVBQWU7RUFDN0JDLE1BQU0sRUFBRSxTQUFTO0VBQ2pCQyxlQUFlLEVBQUUsbUJBQW1CO0VBQ3BDQyxRQUFRLEVBQUUsVUFBVTtFQUNwQkMsaUJBQWlCLEVBQUUsc0JBQXNCO0VBQ3pDQyxXQUFXLEVBQUUsY0FBYztFQUMzQkMsTUFBTSxFQUFFLFNBQVM7RUFDakJDLFFBQVEsRUFBRSxXQUFXO0VBQ3JCQyxLQUFLLEVBQUUsT0FBTztFQUNkQyxRQUFRLEVBQUUsVUFBVTtFQUNwQkMsZUFBZSxFQUFFLGtCQUFrQjtFQUNuQ0MsU0FBUyxFQUFFLFdBQVc7RUFDdEJDLFlBQVksRUFBRSxlQUFlO0VBQzdCQyxPQUFPLEVBQUUsVUFBVTtFQUNuQkMsV0FBVyxFQUFFLGNBQWM7RUFDM0JDLFVBQVUsRUFBRSxZQUFZO0VBQ3hCQyxRQUFRLEVBQUUsU0FBUztFQUNuQkMsVUFBVSxFQUFFLFlBQVk7RUFDeEJDLElBQUksRUFBRSxNQUFNO0VBQ1pDLFNBQVMsRUFBRSxXQUFXO0VBQ3RCQyxTQUFTLEVBQUUsWUFBWTtFQUN2QkMsUUFBUSxFQUFFLFVBQVU7RUFDcEJDLFlBQVksRUFBRSxlQUFlO0VBRTdCQyxJQUFJLEVBQUUsZ0JBQWdCO0VBQ3RCQyxLQUFLLEVBQUUsYUFBYTtFQUNwQkMsTUFBTSxFQUFFLFFBQVE7RUFDaEJDLElBQUksRUFBRSxVQUFVO0VBRWhCQyxNQUFNLEVBQUUsYUFBYTtFQUNyQkMsT0FBTyxFQUFFLGNBQWM7RUFFdkJDLE1BQU0sRUFBRTtBQUNWLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly93aWRnZXQvLi9zcmMvY29tcG9uZW50cy90cmFuc2xhdGlvbi9pMThuL2VuLmpzPzU3YWMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQge1xuICBzZXR0aW5nczogJ1NldHRpbmdzJyxcbiAgYWNjb3VudDogJ0FjY291bnQnLFxuICBmb250RmFtaWx5OiAnRm9udCBGYW1pbHknLFxuICBsaW5lSGVpZ2h0OiAnTGluZSBIZWlnaHQnLFxuICBmb250U2l6ZTogJ0ZvbnQgU2l6ZScsXG4gIHdvcmRTcGFjaW5nOiAnV29yZCBTcGFjaW5nJyxcbiAgbGV0dGVyU3BhY2luZzogJ0xldHRlciBTcGFjaW5nJyxcbiAgY29udHJhc3Q6ICdDb250cmFzdCcsXG4gIGhpZGVQaWN0dXJlczogJ0hpZGUgUGljdHVyZXMnLFxuICBzaWduSW46ICdTaWduIEluJyxcbiAgdXNlcm5hbWVPckVtYWlsOiAnVXNlcm5hbWUgb3IgRW1haWwnLFxuICBwYXNzd29yZDogJ1Bhc3N3b3JkJyxcbiAgZm9yZ290Q3JlZGVudGlhbHM6ICdGb3Jnb3QgY3JlZGVudGlhbHMgPycsXG4gIG9wZW5BY2NvdW50OiAnT3BlbiBBY2NvdW50JyxcbiAgc2lnblVwOiAnU2lnbiBVcCcsXG4gIGZ1bGxOYW1lOiAnRnVsbCBOYW1lJyxcbiAgZW1haWw6ICdFbWFpbCcsXG4gIHVzZXJuYW1lOiAnVXNlcm5hbWUnLFxuICBjb25maXJtUGFzc3dvcmQ6ICdDb25maXJtIFBhc3N3b3JkJyxcbiAgbGFzdFNhdmVkOiAnTGFzdCBTYXZlJyxcbiAgc2F2ZVNldHRpbmdzOiAnU2F2ZSBTZXR0aW5ncycsXG4gIHNpZ25PdXQ6ICdTaWduIE91dCcsXG4gIHJlYWRpbmdNYXNrOiAnUmVhZGluZyBNYXNrJyxcbiAgbW9ub2Nocm9tZTogJ01vbm9jaHJvbWUnLFxuICBwZXJzb25hczogJ1BlcnNvbmEnLFxuICBpbmRpdmlkdWFsOiAnSW5kaXZpZHVhbCcsXG4gIGFkaHM6ICdBREhTJyxcbiAgcGFya2luc29uOiAnUGFya2luc29uJyxcbiAgbG93VmlzaW9uOiAnTG93IFZpc2lvbicsXG4gIGR5c2xleGlhOiAnRHlzbGV4aWEnLFxuICBzY3JlZW5SZWFkZXI6ICdTY3JlZW4gUmVhZGVyJyxcblxuICByYXRlOiAnU3BlYWtpbmcgc3BlZWQnLFxuICBwaXRjaDogJ1ZvaWNlIHBpdGNoJyxcbiAgdm9sdW1lOiAnVm9sdW1lJyxcbiAgbGFuZzogJ0xhbmd1YWdlJyxcblxuICBjdXJzb3I6ICdDdXJzb3IgbW9kZScsXG4gIHdlYnNpdGU6ICdXZWJzaXRlIG1vZGUnLFxuXG4gIG9yVGV4dDogJ29yJ1xufVxuIl0sIm5hbWVzIjpbInNldHRpbmdzIiwiYWNjb3VudCIsImZvbnRGYW1pbHkiLCJsaW5lSGVpZ2h0IiwiZm9udFNpemUiLCJ3b3JkU3BhY2luZyIsImxldHRlclNwYWNpbmciLCJjb250cmFzdCIsImhpZGVQaWN0dXJlcyIsInNpZ25JbiIsInVzZXJuYW1lT3JFbWFpbCIsInBhc3N3b3JkIiwiZm9yZ290Q3JlZGVudGlhbHMiLCJvcGVuQWNjb3VudCIsInNpZ25VcCIsImZ1bGxOYW1lIiwiZW1haWwiLCJ1c2VybmFtZSIsImNvbmZpcm1QYXNzd29yZCIsImxhc3RTYXZlZCIsInNhdmVTZXR0aW5ncyIsInNpZ25PdXQiLCJyZWFkaW5nTWFzayIsIm1vbm9jaHJvbWUiLCJwZXJzb25hcyIsImluZGl2aWR1YWwiLCJhZGhzIiwicGFya2luc29uIiwibG93VmlzaW9uIiwiZHlzbGV4aWEiLCJzY3JlZW5SZWFkZXIiLCJyYXRlIiwicGl0Y2giLCJ2b2x1bWUiLCJsYW5nIiwiY3Vyc29yIiwid2Vic2l0ZSIsIm9yVGV4dCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///288\n")},564:function(module,__unused_webpack_exports,__webpack_require__){eval('/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n "use strict";\n\n var hasOwn = Object.prototype.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var iteratorSymbol =\n typeof Symbol === "function" && Symbol.iterator || "@@iterator";\n\n var inModule = "object" === "object";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we\'re in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don\'t bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we\'re in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided, then outerFn.prototype instanceof Generator.\n var generator = Object.create((outerFn || Generator).prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there\'s no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don\'t have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: "normal", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: "throw", arg: err };\n }\n }\n\n var GenStateSuspendedStart = "suspendedStart";\n var GenStateSuspendedYield = "suspendedYield";\n var GenStateExecuting = "executing";\n var GenStateCompleted = "completed";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype;\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunction.displayName = "GeneratorFunction";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n ["next", "throw", "return"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === "function" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === "GeneratorFunction"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `value instanceof AwaitArgument` to determine if the yielded value is\n // meant to be awaited. Some may consider the name of this method too\n // cutesy, but they are curmudgeons.\n runtime.awrap = function(arg) {\n return new AwaitArgument(arg);\n };\n\n function AwaitArgument(arg) {\n this.arg = arg;\n }\n\n function AsyncIterator(generator) {\n // This invoke function is written in a style that assumes some\n // calling function (or Promise) will handle exceptions.\n function invoke(method, arg) {\n var result = generator[method](arg);\n var value = result.value;\n return value instanceof AwaitArgument\n ? Promise.resolve(value.arg).then(invokeNext, invokeThrow)\n : Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n return result;\n });\n }\n\n if (typeof process === "object" && process.domain) {\n invoke = process.domain.bind(invoke);\n }\n\n var invokeNext = invoke.bind(generator, "next");\n var invokeThrow = invoke.bind(generator, "throw");\n var invokeReturn = invoke.bind(generator, "return");\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return invoke(method, arg);\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : new Promise(function (resolve) {\n resolve(callInvokeWithMethodAndArg());\n });\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error("Generator is already running");\n }\n\n if (state === GenStateCompleted) {\n if (method === "throw") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n if (method === "return" ||\n (method === "throw" && delegate.iterator[method] === undefined)) {\n // A return or throw (when the delegate iterator has no throw\n // method) always terminates the yield* loop.\n context.delegate = null;\n\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n var returnMethod = delegate.iterator["return"];\n if (returnMethod) {\n var record = tryCatch(returnMethod, delegate.iterator, arg);\n if (record.type === "throw") {\n // If the return method threw an exception, let that\n // exception prevail over the original return or throw.\n method = "throw";\n arg = record.arg;\n continue;\n }\n }\n\n if (method === "return") {\n // Continue with the outer return, now that the delegate\n // iterator has been terminated.\n continue;\n }\n }\n\n var record = tryCatch(\n delegate.iterator[method],\n delegate.iterator,\n arg\n );\n\n if (record.type === "throw") {\n context.delegate = null;\n\n // Like returning generator.throw(uncaught), but without the\n // overhead of an extra function call.\n method = "throw";\n arg = record.arg;\n continue;\n }\n\n // Delegate generator ran and handled its own exceptions so\n // regardless of what the method was, we continue as if it is\n // "next" with an undefined arg.\n method = "next";\n arg = undefined;\n\n var info = record.arg;\n if (info.done) {\n context[delegate.resultName] = info.value;\n context.next = delegate.nextLoc;\n } else {\n state = GenStateSuspendedYield;\n return info;\n }\n\n context.delegate = null;\n }\n\n if (method === "next") {\n context._sent = arg;\n\n if (state === GenStateSuspendedYield) {\n context.sent = arg;\n } else {\n context.sent = undefined;\n }\n } else if (method === "throw") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw arg;\n }\n\n if (context.dispatchException(arg)) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n method = "next";\n arg = undefined;\n }\n\n } else if (method === "return") {\n context.abrupt("return", arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === "normal") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n var info = {\n value: record.arg,\n done: context.done\n };\n\n if (record.arg === ContinueSentinel) {\n if (context.delegate && method === "next") {\n // Deliberately forget the last sent value so that we don\'t\n // accidentally pass it on to the delegate.\n arg = undefined;\n }\n } else {\n return info;\n }\n\n } else if (record.type === "throw") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(arg) call above.\n method = "throw";\n arg = record.arg;\n }\n }\n };\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return "[object Generator]";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = "normal";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: "root" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === "function") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n this.sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === "t" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === "throw") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = "throw";\n record.arg = exception;\n context.next = loc;\n return !!caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === "root") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle("end");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, "catchLoc");\n var hasFinally = hasOwn.call(entry, "finallyLoc");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error("try statement without catch or finally");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, "finallyLoc") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === "break" ||\n type === "continue") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.next = finallyEntry.finallyLoc;\n } else {\n this.complete(record);\n }\n\n return ContinueSentinel;\n },\n\n complete: function(record, afterLoc) {\n if (record.type === "throw") {\n throw record.arg;\n }\n\n if (record.type === "break" ||\n record.type === "continue") {\n this.next = record.arg;\n } else if (record.type === "return") {\n this.rval = record.arg;\n this.next = "end";\n } else if (record.type === "normal" && afterLoc) {\n this.next = afterLoc;\n }\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n "catch": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === "throw") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error("illegal catch attempt");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof __webpack_require__.g === "object" ? __webpack_require__.g :\n typeof window === "object" ? window :\n typeof self === "object" ? self : this\n);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTY0LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7O0FBRUEsaUJBQWlCLFFBQWE7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2YsTUFBTTtBQUNOLGVBQWU7QUFDZjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMsV0FBVztBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7O0FBRUEsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQ0FBaUMsbUJBQW1CO0FBQ3BEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQjs7QUFFbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLGdCQUFnQjtBQUN6QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBO0FBQ0EsYUFBYTtBQUNiOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLCtDQUErQyxRQUFRO0FBQ3ZEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTs7QUFFQSxZQUFZO0FBQ1o7QUFDQTtBQUNBOztBQUVBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7O0FBRUEsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLCtDQUErQyxRQUFRO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsK0NBQStDLFFBQVE7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsK0NBQStDLFFBQVE7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLFNBQVMscUJBQU0sZ0JBQWdCLHFCQUFNO0FBQ3JDO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3dpZGdldC8uL25vZGVfbW9kdWxlcy9iYWJlbC1yZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWUuanM/MDEyOSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxNCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBodHRwczovL3Jhdy5naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL21hc3Rlci9MSUNFTlNFIGZpbGUuIEFuXG4gKiBhZGRpdGlvbmFsIGdyYW50IG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW5cbiAqIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqL1xuXG4hKGZ1bmN0aW9uKGdsb2JhbCkge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbiAgdmFyIHVuZGVmaW5lZDsgLy8gTW9yZSBjb21wcmVzc2libGUgdGhhbiB2b2lkIDAuXG4gIHZhciBpdGVyYXRvclN5bWJvbCA9XG4gICAgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciB8fCBcIkBAaXRlcmF0b3JcIjtcblxuICB2YXIgaW5Nb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiO1xuICB2YXIgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWU7XG4gIGlmIChydW50aW1lKSB7XG4gICAgaWYgKGluTW9kdWxlKSB7XG4gICAgICAvLyBJZiByZWdlbmVyYXRvclJ1bnRpbWUgaXMgZGVmaW5lZCBnbG9iYWxseSBhbmQgd2UncmUgaW4gYSBtb2R1bGUsXG4gICAgICAvLyBtYWtlIHRoZSBleHBvcnRzIG9iamVjdCBpZGVudGljYWwgdG8gcmVnZW5lcmF0b3JSdW50aW1lLlxuICAgICAgbW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuICAgIH1cbiAgICAvLyBEb24ndCBib3RoZXIgZXZhbHVhdGluZyB0aGUgcmVzdCBvZiB0aGlzIGZpbGUgaWYgdGhlIHJ1bnRpbWUgd2FzXG4gICAgLy8gYWxyZWFkeSBkZWZpbmVkIGdsb2JhbGx5LlxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIERlZmluZSB0aGUgcnVudGltZSBnbG9iYWxseSAoYXMgZXhwZWN0ZWQgYnkgZ2VuZXJhdGVkIGNvZGUpIGFzIGVpdGhlclxuICAvLyBtb2R1bGUuZXhwb3J0cyAoaWYgd2UncmUgaW4gYSBtb2R1bGUpIG9yIGEgbmV3LCBlbXB0eSBvYmplY3QuXG4gIHJ1bnRpbWUgPSBnbG9iYWwucmVnZW5lcmF0b3JSdW50aW1lID0gaW5Nb2R1bGUgPyBtb2R1bGUuZXhwb3J0cyA6IHt9O1xuXG4gIGZ1bmN0aW9uIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBJZiBvdXRlckZuIHByb3ZpZGVkLCB0aGVuIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yLlxuICAgIHZhciBnZW5lcmF0b3IgPSBPYmplY3QuY3JlYXRlKChvdXRlckZuIHx8IEdlbmVyYXRvcikucHJvdG90eXBlKTtcbiAgICB2YXIgY29udGV4dCA9IG5ldyBDb250ZXh0KHRyeUxvY3NMaXN0IHx8IFtdKTtcblxuICAgIC8vIFRoZSAuX2ludm9rZSBtZXRob2QgdW5pZmllcyB0aGUgaW1wbGVtZW50YXRpb25zIG9mIHRoZSAubmV4dCxcbiAgICAvLyAudGhyb3csIGFuZCAucmV0dXJuIG1ldGhvZHMuXG4gICAgZ2VuZXJhdG9yLl9pbnZva2UgPSBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGdlbmVyYXRvcjtcbiAgfVxuICBydW50aW1lLndyYXAgPSB3cmFwO1xuXG4gIC8vIFRyeS9jYXRjaCBoZWxwZXIgdG8gbWluaW1pemUgZGVvcHRpbWl6YXRpb25zLiBSZXR1cm5zIGEgY29tcGxldGlvblxuICAvLyByZWNvcmQgbGlrZSBjb250ZXh0LnRyeUVudHJpZXNbaV0uY29tcGxldGlvbi4gVGhpcyBpbnRlcmZhY2UgY291bGRcbiAgLy8gaGF2ZSBiZWVuIChhbmQgd2FzIHByZXZpb3VzbHkpIGRlc2lnbmVkIHRvIHRha2UgYSBjbG9zdXJlIHRvIGJlXG4gIC8vIGludm9rZWQgd2l0aG91dCBhcmd1bWVudHMsIGJ1dCBpbiBhbGwgdGhlIGNhc2VzIHdlIGNhcmUgYWJvdXQgd2VcbiAgLy8gYWxyZWFkeSBoYXZlIGFuIGV4aXN0aW5nIG1ldGhvZCB3ZSB3YW50IHRvIGNhbGwsIHNvIHRoZXJlJ3Mgbm8gbmVlZFxuICAvLyB0byBjcmVhdGUgYSBuZXcgZnVuY3Rpb24gb2JqZWN0LiBXZSBjYW4gZXZlbiBnZXQgYXdheSB3aXRoIGFzc3VtaW5nXG4gIC8vIHRoZSBtZXRob2QgdGFrZXMgZXhhY3RseSBvbmUgYXJndW1lbnQsIHNpbmNlIHRoYXQgaGFwcGVucyB0byBiZSB0cnVlXG4gIC8vIGluIGV2ZXJ5IGNhc2UsIHNvIHdlIGRvbid0IGhhdmUgdG8gdG91Y2ggdGhlIGFyZ3VtZW50cyBvYmplY3QuIFRoZVxuICAvLyBvbmx5IGFkZGl0aW9uYWwgYWxsb2NhdGlvbiByZXF1aXJlZCBpcyB0aGUgY29tcGxldGlvbiByZWNvcmQsIHdoaWNoXG4gIC8vIGhhcyBhIHN0YWJsZSBzaGFwZSBhbmQgc28gaG9wZWZ1bGx5IHNob3VsZCBiZSBjaGVhcCB0byBhbGxvY2F0ZS5cbiAgZnVuY3Rpb24gdHJ5Q2F0Y2goZm4sIG9iaiwgYXJnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwibm9ybWFsXCIsIGFyZzogZm4uY2FsbChvYmosIGFyZykgfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwidGhyb3dcIiwgYXJnOiBlcnIgfTtcbiAgICB9XG4gIH1cblxuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRTdGFydCA9IFwic3VzcGVuZGVkU3RhcnRcIjtcbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkWWllbGQgPSBcInN1c3BlbmRlZFlpZWxkXCI7XG4gIHZhciBHZW5TdGF0ZUV4ZWN1dGluZyA9IFwiZXhlY3V0aW5nXCI7XG4gIHZhciBHZW5TdGF0ZUNvbXBsZXRlZCA9IFwiY29tcGxldGVkXCI7XG5cbiAgLy8gUmV0dXJuaW5nIHRoaXMgb2JqZWN0IGZyb20gdGhlIGlubmVyRm4gaGFzIHRoZSBzYW1lIGVmZmVjdCBhc1xuICAvLyBicmVha2luZyBvdXQgb2YgdGhlIGRpc3BhdGNoIHN3aXRjaCBzdGF0ZW1lbnQuXG4gIHZhciBDb250aW51ZVNlbnRpbmVsID0ge307XG5cbiAgLy8gRHVtbXkgY29uc3RydWN0b3IgZnVuY3Rpb25zIHRoYXQgd2UgdXNlIGFzIHRoZSAuY29uc3RydWN0b3IgYW5kXG4gIC8vIC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgcHJvcGVydGllcyBmb3IgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIEdlbmVyYXRvclxuICAvLyBvYmplY3RzLiBGb3IgZnVsbCBzcGVjIGNvbXBsaWFuY2UsIHlvdSBtYXkgd2lzaCB0byBjb25maWd1cmUgeW91clxuICAvLyBtaW5pZmllciBub3QgdG8gbWFuZ2xlIHRoZSBuYW1lcyBvZiB0aGVzZSB0d28gZnVuY3Rpb25zLlxuICBmdW5jdGlvbiBHZW5lcmF0b3IoKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvbigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKCkge31cblxuICB2YXIgR3AgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPSBHZW5lcmF0b3IucHJvdG90eXBlO1xuICBHZW5lcmF0b3JGdW5jdGlvbi5wcm90b3R5cGUgPSBHcC5jb25zdHJ1Y3RvciA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdlbmVyYXRvckZ1bmN0aW9uO1xuICBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcblxuICAvLyBIZWxwZXIgZm9yIGRlZmluaW5nIHRoZSAubmV4dCwgLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzIG9mIHRoZVxuICAvLyBJdGVyYXRvciBpbnRlcmZhY2UgaW4gdGVybXMgb2YgYSBzaW5nbGUgLl9pbnZva2UgbWV0aG9kLlxuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgICBwcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKGFyZykge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IHR5cGVvZiBnZW5GdW4gPT09IFwiZnVuY3Rpb25cIiAmJiBnZW5GdW4uY29uc3RydWN0b3I7XG4gICAgcmV0dXJuIGN0b3JcbiAgICAgID8gY3RvciA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHxcbiAgICAgICAgLy8gRm9yIHRoZSBuYXRpdmUgR2VuZXJhdG9yRnVuY3Rpb24gY29uc3RydWN0b3IsIHRoZSBiZXN0IHdlIGNhblxuICAgICAgICAvLyBkbyBpcyB0byBjaGVjayBpdHMgLm5hbWUgcHJvcGVydHkuXG4gICAgICAgIChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkgPT09IFwiR2VuZXJhdG9yRnVuY3Rpb25cIlxuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuICBydW50aW1lLm1hcmsgPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSB7XG4gICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZ2VuRnVuLCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgICB9XG4gICAgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApO1xuICAgIHJldHVybiBnZW5GdW47XG4gIH07XG5cbiAgLy8gV2l0aGluIHRoZSBib2R5IG9mIGFueSBhc3luYyBmdW5jdGlvbiwgYGF3YWl0IHhgIGlzIHRyYW5zZm9ybWVkIHRvXG4gIC8vIGB5aWVsZCByZWdlbmVyYXRvclJ1bnRpbWUuYXdyYXAoeClgLCBzbyB0aGF0IHRoZSBydW50aW1lIGNhbiB0ZXN0XG4gIC8vIGB2YWx1ZSBpbnN0YW5jZW9mIEF3YWl0QXJndW1lbnRgIHRvIGRldGVybWluZSBpZiB0aGUgeWllbGRlZCB2YWx1ZSBpc1xuICAvLyBtZWFudCB0byBiZSBhd2FpdGVkLiBTb21lIG1heSBjb25zaWRlciB0aGUgbmFtZSBvZiB0aGlzIG1ldGhvZCB0b29cbiAgLy8gY3V0ZXN5LCBidXQgdGhleSBhcmUgY3VybXVkZ2VvbnMuXG4gIHJ1bnRpbWUuYXdyYXAgPSBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gbmV3IEF3YWl0QXJndW1lbnQoYXJnKTtcbiAgfTtcblxuICBmdW5jdGlvbiBBd2FpdEFyZ3VtZW50KGFyZykge1xuICAgIHRoaXMuYXJnID0gYXJnO1xuICB9XG5cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcihnZW5lcmF0b3IpIHtcbiAgICAvLyBUaGlzIGludm9rZSBmdW5jdGlvbiBpcyB3cml0dGVuIGluIGEgc3R5bGUgdGhhdCBhc3N1bWVzIHNvbWVcbiAgICAvLyBjYWxsaW5nIGZ1bmN0aW9uIChvciBQcm9taXNlKSB3aWxsIGhhbmRsZSBleGNlcHRpb25zLlxuICAgIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZykge1xuICAgICAgdmFyIHJlc3VsdCA9IGdlbmVyYXRvclttZXRob2RdKGFyZyk7XG4gICAgICB2YXIgdmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBBd2FpdEFyZ3VtZW50XG4gICAgICAgID8gUHJvbWlzZS5yZXNvbHZlKHZhbHVlLmFyZykudGhlbihpbnZva2VOZXh0LCBpbnZva2VUaHJvdylcbiAgICAgICAgOiBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oZnVuY3Rpb24odW53cmFwcGVkKSB7XG4gICAgICAgICAgICAvLyBXaGVuIGEgeWllbGRlZCBQcm9taXNlIGlzIHJlc29sdmVkLCBpdHMgZmluYWwgdmFsdWUgYmVjb21lc1xuICAgICAgICAgICAgLy8gdGhlIC52YWx1ZSBvZiB0aGUgUHJvbWlzZTx7dmFsdWUsZG9uZX0+IHJlc3VsdCBmb3IgdGhlXG4gICAgICAgICAgICAvLyBjdXJyZW50IGl0ZXJhdGlvbi4gSWYgdGhlIFByb21pc2UgaXMgcmVqZWN0ZWQsIGhvd2V2ZXIsIHRoZVxuICAgICAgICAgICAgLy8gcmVzdWx0IGZvciB0aGlzIGl0ZXJhdGlvbiB3aWxsIGJlIHJlamVjdGVkIHdpdGggdGhlIHNhbWVcbiAgICAgICAgICAgIC8vIHJlYXNvbi4gTm90ZSB0aGF0IHJlamVjdGlvbnMgb2YgeWllbGRlZCBQcm9taXNlcyBhcmUgbm90XG4gICAgICAgICAgICAvLyB0aHJvd24gYmFjayBpbnRvIHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24sIGFzIGlzIHRoZSBjYXNlXG4gICAgICAgICAgICAvLyB3aGVuIGFuIGF3YWl0ZWQgUHJvbWlzZSBpcyByZWplY3RlZC4gVGhpcyBkaWZmZXJlbmNlIGluXG4gICAgICAgICAgICAvLyBiZWhhdmlvciBiZXR3ZWVuIHlpZWxkIGFuZCBhd2FpdCBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgaXRcbiAgICAgICAgICAgIC8vIGFsbG93cyB0aGUgY29uc3VtZXIgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aCB0aGUgeWllbGRlZFxuICAgICAgICAgICAgLy8gcmVqZWN0aW9uIChzd2FsbG93IGl0IGFuZCBjb250aW51ZSwgbWFudWFsbHkgLnRocm93IGl0IGJhY2tcbiAgICAgICAgICAgIC8vIGludG8gdGhlIGdlbmVyYXRvciwgYWJhbmRvbiBpdGVyYXRpb24sIHdoYXRldmVyKS4gV2l0aFxuICAgICAgICAgICAgLy8gYXdhaXQsIGJ5IGNvbnRyYXN0LCB0aGVyZSBpcyBubyBvcHBvcnR1bml0eSB0byBleGFtaW5lIHRoZVxuICAgICAgICAgICAgLy8gcmVqZWN0aW9uIHJlYXNvbiBvdXRzaWRlIHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24sIHNvIHRoZVxuICAgICAgICAgICAgLy8gb25seSBvcHRpb24gaXMgdG8gdGhyb3cgaXQgZnJvbSB0aGUgYXdhaXQgZXhwcmVzc2lvbiwgYW5kXG4gICAgICAgICAgICAvLyBsZXQgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiBoYW5kbGUgdGhlIGV4Y2VwdGlvbi5cbiAgICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IHVud3JhcHBlZDtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSBcIm9iamVjdFwiICYmIHByb2Nlc3MuZG9tYWluKSB7XG4gICAgICBpbnZva2UgPSBwcm9jZXNzLmRvbWFpbi5iaW5kKGludm9rZSk7XG4gICAgfVxuXG4gICAgdmFyIGludm9rZU5leHQgPSBpbnZva2UuYmluZChnZW5lcmF0b3IsIFwibmV4dFwiKTtcbiAgICB2YXIgaW52b2tlVGhyb3cgPSBpbnZva2UuYmluZChnZW5lcmF0b3IsIFwidGhyb3dcIik7XG4gICAgdmFyIGludm9rZVJldHVybiA9IGludm9rZS5iaW5kKGdlbmVyYXRvciwgXCJyZXR1cm5cIik7XG4gICAgdmFyIHByZXZpb3VzUHJvbWlzZTtcblxuICAgIGZ1bmN0aW9uIGVucXVldWUobWV0aG9kLCBhcmcpIHtcbiAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICByZXR1cm4gaW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByZXZpb3VzUHJvbWlzZSA9XG4gICAgICAgIC8vIElmIGVucXVldWUgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIHdhaXQgdW50aWxcbiAgICAgICAgLy8gYWxsIHByZXZpb3VzIFByb21pc2VzIGhhdmUgYmVlbiByZXNvbHZlZCBiZWZvcmUgY2FsbGluZyBpbnZva2UsXG4gICAgICAgIC8vIHNvIHRoYXQgcmVzdWx0cyBhcmUgYWx3YXlzIGRlbGl2ZXJlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4gSWZcbiAgICAgICAgLy8gZW5xdWV1ZSBoYXMgbm90IGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiBpdCBpcyBpbXBvcnRhbnQgdG9cbiAgICAgICAgLy8gY2FsbCBpbnZva2UgaW1tZWRpYXRlbHksIHdpdGhvdXQgd2FpdGluZyBvbiBhIGNhbGxiYWNrIHRvIGZpcmUsXG4gICAgICAgIC8vIHNvIHRoYXQgdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBoYXMgdGhlIG9wcG9ydHVuaXR5IHRvIGRvXG4gICAgICAgIC8vIGFueSBuZWNlc3Nhcnkgc2V0dXAgaW4gYSBwcmVkaWN0YWJsZSB3YXkuIFRoaXMgcHJlZGljdGFiaWxpdHlcbiAgICAgICAgLy8gaXMgd2h5IHRoZSBQcm9taXNlIGNvbnN0cnVjdG9yIHN5bmNocm9ub3VzbHkgaW52b2tlcyBpdHNcbiAgICAgICAgLy8gZXhlY3V0b3IgY2FsbGJhY2ssIGFuZCB3aHkgYXN5bmMgZnVuY3Rpb25zIHN5bmNocm9ub3VzbHlcbiAgICAgICAgLy8gZXhlY3V0ZSBjb2RlIGJlZm9yZSB0aGUgZmlyc3QgYXdhaXQuIFNpbmNlIHdlIGltcGxlbWVudCBzaW1wbGVcbiAgICAgICAgLy8gYXN5bmMgZnVuY3Rpb25zIGluIHRlcm1zIG9mIGFzeW5jIGdlbmVyYXRvcnMsIGl0IGlzIGVzcGVjaWFsbHlcbiAgICAgICAgLy8gaW1wb3J0YW50IHRvIGdldCB0aGlzIHJpZ2h0LCBldmVuIHRob3VnaCBpdCByZXF1aXJlcyBjYXJlLlxuICAgICAgICBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihcbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyxcbiAgICAgICAgICAvLyBBdm9pZCBwcm9wYWdhdGluZyBmYWlsdXJlcyB0byBQcm9taXNlcyByZXR1cm5lZCBieSBsYXRlclxuICAgICAgICAgIC8vIGludm9jYXRpb25zIG9mIHRoZSBpdGVyYXRvci5cbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZ1xuICAgICAgICApIDogbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICByZXNvbHZlKGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBEZWZpbmUgdGhlIHVuaWZpZWQgaGVscGVyIG1ldGhvZCB0aGF0IGlzIHVzZWQgdG8gaW1wbGVtZW50IC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gKHNlZSBkZWZpbmVJdGVyYXRvck1ldGhvZHMpLlxuICAgIHRoaXMuX2ludm9rZSA9IGVucXVldWU7XG4gIH1cblxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpO1xuXG4gIC8vIE5vdGUgdGhhdCBzaW1wbGUgYXN5bmMgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBvbiB0b3Agb2ZcbiAgLy8gQXN5bmNJdGVyYXRvciBvYmplY3RzOyB0aGV5IGp1c3QgcmV0dXJuIGEgUHJvbWlzZSBmb3IgdGhlIHZhbHVlIG9mXG4gIC8vIHRoZSBmaW5hbCByZXN1bHQgcHJvZHVjZWQgYnkgdGhlIGl0ZXJhdG9yLlxuICBydW50aW1lLmFzeW5jID0gZnVuY3Rpb24oaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICB2YXIgaXRlciA9IG5ldyBBc3luY0l0ZXJhdG9yKFxuICAgICAgd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdClcbiAgICApO1xuXG4gICAgcmV0dXJuIHJ1bnRpbWUuaXNHZW5lcmF0b3JGdW5jdGlvbihvdXRlckZuKVxuICAgICAgPyBpdGVyIC8vIElmIG91dGVyRm4gaXMgYSBnZW5lcmF0b3IsIHJldHVybiB0aGUgZnVsbCBpdGVyYXRvci5cbiAgICAgIDogaXRlci5uZXh0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICAgICAgfSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KSB7XG4gICAgdmFyIHN0YXRlID0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydDtcblxuICAgIHJldHVybiBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcpIHtcbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVFeGVjdXRpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUNvbXBsZXRlZCkge1xuICAgICAgICBpZiAobWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICB0aHJvdyBhcmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCZSBmb3JnaXZpbmcsIHBlciAyNS4zLjMuMy4zIG9mIHRoZSBzcGVjOlxuICAgICAgICAvLyBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtZ2VuZXJhdG9ycmVzdW1lXG4gICAgICAgIHJldHVybiBkb25lUmVzdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGNvbnRleHQuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgIGlmIChtZXRob2QgPT09IFwicmV0dXJuXCIgfHxcbiAgICAgICAgICAgICAgKG1ldGhvZCA9PT0gXCJ0aHJvd1wiICYmIGRlbGVnYXRlLml0ZXJhdG9yW21ldGhvZF0gPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICAgIC8vIEEgcmV0dXJuIG9yIHRocm93ICh3aGVuIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgbm8gdGhyb3dcbiAgICAgICAgICAgIC8vIG1ldGhvZCkgYWx3YXlzIHRlcm1pbmF0ZXMgdGhlIHlpZWxkKiBsb29wLlxuICAgICAgICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgICAgICAgIC8vIElmIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgYSByZXR1cm4gbWV0aG9kLCBnaXZlIGl0IGFcbiAgICAgICAgICAgIC8vIGNoYW5jZSB0byBjbGVhbiB1cC5cbiAgICAgICAgICAgIHZhciByZXR1cm5NZXRob2QgPSBkZWxlZ2F0ZS5pdGVyYXRvcltcInJldHVyblwiXTtcbiAgICAgICAgICAgIGlmIChyZXR1cm5NZXRob2QpIHtcbiAgICAgICAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKHJldHVybk1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGFyZyk7XG4gICAgICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIHJldHVybiBtZXRob2QgdGhyZXcgYW4gZXhjZXB0aW9uLCBsZXQgdGhhdFxuICAgICAgICAgICAgICAgIC8vIGV4Y2VwdGlvbiBwcmV2YWlsIG92ZXIgdGhlIG9yaWdpbmFsIHJldHVybiBvciB0aHJvdy5cbiAgICAgICAgICAgICAgICBtZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgICAgICAgICAgYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobWV0aG9kID09PSBcInJldHVyblwiKSB7XG4gICAgICAgICAgICAgIC8vIENvbnRpbnVlIHdpdGggdGhlIG91dGVyIHJldHVybiwgbm93IHRoYXQgdGhlIGRlbGVnYXRlXG4gICAgICAgICAgICAgIC8vIGl0ZXJhdG9yIGhhcyBiZWVuIHRlcm1pbmF0ZWQuXG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChcbiAgICAgICAgICAgIGRlbGVnYXRlLml0ZXJhdG9yW21ldGhvZF0sXG4gICAgICAgICAgICBkZWxlZ2F0ZS5pdGVyYXRvcixcbiAgICAgICAgICAgIGFyZ1xuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgICAgICAgIC8vIExpa2UgcmV0dXJuaW5nIGdlbmVyYXRvci50aHJvdyh1bmNhdWdodCksIGJ1dCB3aXRob3V0IHRoZVxuICAgICAgICAgICAgLy8gb3ZlcmhlYWQgb2YgYW4gZXh0cmEgZnVuY3Rpb24gY2FsbC5cbiAgICAgICAgICAgIG1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgICAgIGFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBEZWxlZ2F0ZSBnZW5lcmF0b3IgcmFuIGFuZCBoYW5kbGVkIGl0cyBvd24gZXhjZXB0aW9ucyBzb1xuICAgICAgICAgIC8vIHJlZ2FyZGxlc3Mgb2Ygd2hhdCB0aGUgbWV0aG9kIHdhcywgd2UgY29udGludWUgYXMgaWYgaXQgaXNcbiAgICAgICAgICAvLyBcIm5leHRcIiB3aXRoIGFuIHVuZGVmaW5lZCBhcmcuXG4gICAgICAgICAgbWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgICAgYXJnID0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuICAgICAgICAgIGlmIChpbmZvLmRvbmUpIHtcbiAgICAgICAgICAgIGNvbnRleHRbZGVsZWdhdGUucmVzdWx0TmFtZV0gPSBpbmZvLnZhbHVlO1xuICAgICAgICAgICAgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkO1xuICAgICAgICAgICAgcmV0dXJuIGluZm87XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAgIGNvbnRleHQuX3NlbnQgPSBhcmc7XG5cbiAgICAgICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlU3VzcGVuZGVkWWllbGQpIHtcbiAgICAgICAgICAgIGNvbnRleHQuc2VudCA9IGFyZztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udGV4dC5zZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChtZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydCkge1xuICAgICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAgIHRocm93IGFyZztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihhcmcpKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgZGlzcGF0Y2hlZCBleGNlcHRpb24gd2FzIGNhdWdodCBieSBhIGNhdGNoIGJsb2NrLFxuICAgICAgICAgICAgLy8gdGhlbiBsZXQgdGhhdCBjYXRjaCBibG9jayBoYW5kbGUgdGhlIGV4Y2VwdGlvbiBub3JtYWxseS5cbiAgICAgICAgICAgIG1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgICAgYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cblxuICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICAgIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGFyZyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZSA9IEdlblN0YXRlRXhlY3V0aW5nO1xuXG4gICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiKSB7XG4gICAgICAgICAgLy8gSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBmcm9tIGlubmVyRm4sIHdlIGxlYXZlIHN0YXRlID09PVxuICAgICAgICAgIC8vIEdlblN0YXRlRXhlY3V0aW5nIGFuZCBsb29wIGJhY2sgZm9yIGFub3RoZXIgaW52b2NhdGlvbi5cbiAgICAgICAgICBzdGF0ZSA9IGNvbnRleHQuZG9uZVxuICAgICAgICAgICAgPyBHZW5TdGF0ZUNvbXBsZXRlZFxuICAgICAgICAgICAgOiBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkO1xuXG4gICAgICAgICAgdmFyIGluZm8gPSB7XG4gICAgICAgICAgICB2YWx1ZTogcmVjb3JkLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IGNvbnRleHQuZG9uZVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZiAocmVjb3JkLmFyZyA9PT0gQ29udGludWVTZW50aW5lbCkge1xuICAgICAgICAgICAgaWYgKGNvbnRleHQuZGVsZWdhdGUgJiYgbWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAgICAgICAvLyBEZWxpYmVyYXRlbHkgZm9yZ2V0IHRoZSBsYXN0IHNlbnQgdmFsdWUgc28gdGhhdCB3ZSBkb24ndFxuICAgICAgICAgICAgICAvLyBhY2NpZGVudGFsbHkgcGFzcyBpdCBvbiB0byB0aGUgZGVsZWdhdGUuXG4gICAgICAgICAgICAgIGFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGluZm87XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgLy8gRGlzcGF0Y2ggdGhlIGV4Y2VwdGlvbiBieSBsb29waW5nIGJhY2sgYXJvdW5kIHRvIHRoZVxuICAgICAgICAgIC8vIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oYXJnKSBjYWxsIGFib3ZlLlxuICAgICAgICAgIG1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgICBhcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8vIERlZmluZSBHZW5lcmF0b3IucHJvdG90eXBlLntuZXh0LHRocm93LHJldHVybn0gaW4gdGVybXMgb2YgdGhlXG4gIC8vIHVuaWZpZWQgLl9pbnZva2UgaGVscGVyIG1ldGhvZC5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEdwKTtcblxuICBHcFtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBHcC50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHB1c2hUcnlFbnRyeShsb2NzKSB7XG4gICAgdmFyIGVudHJ5ID0geyB0cnlMb2M6IGxvY3NbMF0gfTtcblxuICAgIGlmICgxIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmNhdGNoTG9jID0gbG9jc1sxXTtcbiAgICB9XG5cbiAgICBpZiAoMiBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5maW5hbGx5TG9jID0gbG9jc1syXTtcbiAgICAgIGVudHJ5LmFmdGVyTG9jID0gbG9jc1szXTtcbiAgICB9XG5cbiAgICB0aGlzLnRyeUVudHJpZXMucHVzaChlbnRyeSk7XG4gIH1cblxuICBmdW5jdGlvbiByZXNldFRyeUVudHJ5KGVudHJ5KSB7XG4gICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb24gfHwge307XG4gICAgcmVjb3JkLnR5cGUgPSBcIm5vcm1hbFwiO1xuICAgIGRlbGV0ZSByZWNvcmQuYXJnO1xuICAgIGVudHJ5LmNvbXBsZXRpb24gPSByZWNvcmQ7XG4gIH1cblxuICBmdW5jdGlvbiBDb250ZXh0KHRyeUxvY3NMaXN0KSB7XG4gICAgLy8gVGhlIHJvb3QgZW50cnkgb2JqZWN0IChlZmZlY3RpdmVseSBhIHRyeSBzdGF0ZW1lbnQgd2l0aG91dCBhIGNhdGNoXG4gICAgLy8gb3IgYSBmaW5hbGx5IGJsb2NrKSBnaXZlcyB1cyBhIHBsYWNlIHRvIHN0b3JlIHZhbHVlcyB0aHJvd24gZnJvbVxuICAgIC8vIGxvY2F0aW9ucyB3aGVyZSB0aGVyZSBpcyBubyBlbmNsb3NpbmcgdHJ5IHN0YXRlbWVudC5cbiAgICB0aGlzLnRyeUVudHJpZXMgPSBbeyB0cnlMb2M6IFwicm9vdFwiIH1dO1xuICAgIHRyeUxvY3NMaXN0LmZvckVhY2gocHVzaFRyeUVudHJ5LCB0aGlzKTtcbiAgICB0aGlzLnJlc2V0KHRydWUpO1xuICB9XG5cbiAgcnVudGltZS5rZXlzID0gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICB9XG4gICAga2V5cy5yZXZlcnNlKCk7XG5cbiAgICAvLyBSYXRoZXIgdGhhbiByZXR1cm5pbmcgYW4gb2JqZWN0IHdpdGggYSBuZXh0IG1ldGhvZCwgd2Uga2VlcFxuICAgIC8vIHRoaW5ncyBzaW1wbGUgYW5kIHJldHVybiB0aGUgbmV4dCBmdW5jdGlvbiBpdHNlbGYuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICB3aGlsZSAoa2V5cy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXMucG9wKCk7XG4gICAgICAgIGlmIChrZXkgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgbmV4dC52YWx1ZSA9IGtleTtcbiAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUbyBhdm9pZCBjcmVhdGluZyBhbiBhZGRpdGlvbmFsIG9iamVjdCwgd2UganVzdCBoYW5nIHRoZSAudmFsdWVcbiAgICAgIC8vIGFuZCAuZG9uZSBwcm9wZXJ0aWVzIG9mZiB0aGUgbmV4dCBmdW5jdGlvbiBvYmplY3QgaXRzZWxmLiBUaGlzXG4gICAgICAvLyBhbHNvIGVuc3VyZXMgdGhhdCB0aGUgbWluaWZpZXIgd2lsbCBub3QgYW5vbnltaXplIHRoZSBmdW5jdGlvbi5cbiAgICAgIG5leHQuZG9uZSA9IHRydWU7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIHZhbHVlcyhpdGVyYWJsZSkge1xuICAgIGlmIChpdGVyYWJsZSkge1xuICAgICAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gaXRlcmFibGVbaXRlcmF0b3JTeW1ib2xdO1xuICAgICAgaWYgKGl0ZXJhdG9yTWV0aG9kKSB7XG4gICAgICAgIHJldHVybiBpdGVyYXRvck1ldGhvZC5jYWxsKGl0ZXJhYmxlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpdGVyYWJsZS5uZXh0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhYmxlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzTmFOKGl0ZXJhYmxlLmxlbmd0aCkpIHtcbiAgICAgICAgdmFyIGkgPSAtMSwgbmV4dCA9IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgd2hpbGUgKCsraSA8IGl0ZXJhYmxlLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKGhhc093bi5jYWxsKGl0ZXJhYmxlLCBpKSkge1xuICAgICAgICAgICAgICBuZXh0LnZhbHVlID0gaXRlcmFibGVbaV07XG4gICAgICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXh0LnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgIG5leHQuZG9uZSA9IHRydWU7XG5cbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gbmV4dC5uZXh0ID0gbmV4dDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gYW4gaXRlcmF0b3Igd2l0aCBubyB2YWx1ZXMuXG4gICAgcmV0dXJuIHsgbmV4dDogZG9uZVJlc3VsdCB9O1xuICB9XG4gIHJ1bnRpbWUudmFsdWVzID0gdmFsdWVzO1xuXG4gIGZ1bmN0aW9uIGRvbmVSZXN1bHQoKSB7XG4gICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICB9XG5cbiAgQ29udGV4dC5wcm90b3R5cGUgPSB7XG4gICAgY29uc3RydWN0b3I6IENvbnRleHQsXG5cbiAgICByZXNldDogZnVuY3Rpb24oc2tpcFRlbXBSZXNldCkge1xuICAgICAgdGhpcy5wcmV2ID0gMDtcbiAgICAgIHRoaXMubmV4dCA9IDA7XG4gICAgICB0aGlzLnNlbnQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KTtcblxuICAgICAgaWYgKCFza2lwVGVtcFJlc2V0KSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcykge1xuICAgICAgICAgIC8vIE5vdCBzdXJlIGFib3V0IHRoZSBvcHRpbWFsIG9yZGVyIG9mIHRoZXNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSBcInRcIiAmJlxuICAgICAgICAgICAgICBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJlxuICAgICAgICAgICAgICAhaXNOYU4oK25hbWUuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgICB0aGlzW25hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG5cbiAgICAgIHZhciByb290RW50cnkgPSB0aGlzLnRyeUVudHJpZXNbMF07XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9uO1xuICAgICAgaWYgKHJvb3RSZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG5cbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG4gICAgICAgIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiO1xuICAgICAgICByZWNvcmQuYXJnID0gZXhjZXB0aW9uO1xuICAgICAgICBjb250ZXh0Lm5leHQgPSBsb2M7XG4gICAgICAgIHJldHVybiAhIWNhdWdodDtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IFwicm9vdFwiKSB7XG4gICAgICAgICAgLy8gRXhjZXB0aW9uIHRocm93biBvdXRzaWRlIG9mIGFueSB0cnkgYmxvY2sgdGhhdCBjb3VsZCBoYW5kbGVcbiAgICAgICAgICAvLyBpdCwgc28gc2V0IHRoZSBjb21wbGV0aW9uIHZhbHVlIG9mIHRoZSBlbnRpcmUgZnVuY3Rpb24gdG9cbiAgICAgICAgICAvLyB0aHJvdyB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpO1xuICAgICAgICAgIHZhciBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcblxuICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWJydXB0OiBmdW5jdGlvbih0eXBlLCBhcmcpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJlxuICAgICAgICAgICAgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmluYWxseUVudHJ5ICYmXG4gICAgICAgICAgKHR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgICB0eXBlID09PSBcImNvbnRpbnVlXCIpICYmXG4gICAgICAgICAgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiZcbiAgICAgICAgICBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgLy8gSWdub3JlIHRoZSBmaW5hbGx5IGVudHJ5IGlmIGNvbnRyb2wgaXMgbm90IGp1bXBpbmcgdG8gYVxuICAgICAgICAvLyBsb2NhdGlvbiBvdXRzaWRlIHRoZSB0cnkvY2F0Y2ggYmxvY2suXG4gICAgICAgIGZpbmFsbHlFbnRyeSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWNvcmQgPSBmaW5hbGx5RW50cnkgPyBmaW5hbGx5RW50cnkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmVjb3JkLnR5cGUgPSB0eXBlO1xuICAgICAgcmVjb3JkLmFyZyA9IGFyZztcblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSkge1xuICAgICAgICB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29tcGxldGUocmVjb3JkKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfSxcblxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbihyZWNvcmQsIGFmdGVyTG9jKSB7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgIHJlY29yZC50eXBlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gcmVjb3JkLmFyZztcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgdGhpcy5ydmFsID0gcmVjb3JkLmFyZztcbiAgICAgICAgdGhpcy5uZXh0ID0gXCJlbmRcIjtcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIgJiYgYWZ0ZXJMb2MpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gYWZ0ZXJMb2M7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGZpbmlzaDogZnVuY3Rpb24oZmluYWxseUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS5maW5hbGx5TG9jID09PSBmaW5hbGx5TG9jKSB7XG4gICAgICAgICAgdGhpcy5jb21wbGV0ZShlbnRyeS5jb21wbGV0aW9uLCBlbnRyeS5hZnRlckxvYyk7XG4gICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbih0cnlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSB0cnlMb2MpIHtcbiAgICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgdmFyIHRocm93biA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRocm93bjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgY29udGV4dC5jYXRjaCBtZXRob2QgbXVzdCBvbmx5IGJlIGNhbGxlZCB3aXRoIGEgbG9jYXRpb25cbiAgICAgIC8vIGFyZ3VtZW50IHRoYXQgY29ycmVzcG9uZHMgdG8gYSBrbm93biBjYXRjaCBibG9jay5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LFxuXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24oaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSB7XG4gICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoaXRlcmFibGUpLFxuICAgICAgICByZXN1bHROYW1lOiByZXN1bHROYW1lLFxuICAgICAgICBuZXh0TG9jOiBuZXh0TG9jXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG4gIH07XG59KShcbiAgLy8gQW1vbmcgdGhlIHZhcmlvdXMgdHJpY2tzIGZvciBvYnRhaW5pbmcgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbFxuICAvLyBvYmplY3QsIHRoaXMgc2VlbXMgdG8gYmUgdGhlIG1vc3QgcmVsaWFibGUgdGVjaG5pcXVlIHRoYXQgZG9lcyBub3RcbiAgLy8gdXNlIGluZGlyZWN0IGV2YWwgKHdoaWNoIHZpb2xhdGVzIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5KS5cbiAgdHlwZW9mIGdsb2JhbCA9PT0gXCJvYmplY3RcIiA/IGdsb2JhbCA6XG4gIHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIgPyB3aW5kb3cgOlxuICB0eXBlb2Ygc2VsZiA9PT0gXCJvYmplY3RcIiA/IHNlbGYgOiB0aGlzXG4pO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///564\n')},913:(Q,U,F)=>{var B={"./de.js":890,"./en.js":288};function g(Q){var U=I(Q);return F(U)}function I(Q){if(!F.o(B,Q)){var U=new Error("Cannot find module '"+Q+"'");throw U.code="MODULE_NOT_FOUND",U}return B[Q]}g.keys=function(){return Object.keys(B)},g.resolve=I,Q.exports=g,g.id=913}},__webpack_module_cache__={};function __webpack_require__(Q){var U=__webpack_module_cache__[Q];if(void 0!==U)return U.exports;var F=__webpack_module_cache__[Q]={exports:{}};return __webpack_modules__[Q].call(F.exports,F,F.exports,__webpack_require__),F.exports}__webpack_require__.d=(Q,U)=>{for(var F in U)__webpack_require__.o(U,F)&&!__webpack_require__.o(Q,F)&&Object.defineProperty(Q,F,{enumerable:!0,get:U[F]})},__webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(Q){if("object"==typeof window)return window}}(),__webpack_require__.o=(Q,U)=>Object.prototype.hasOwnProperty.call(Q,U),__webpack_require__.r=Q=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(Q,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(Q,"__esModule",{value:!0})},__webpack_require__(564);var __webpack_exports__=__webpack_require__(389)})();