PageSourceSearch

https://www.meingewichtverstehen.ch/etc.clientlibs/truthaboutweigh…-4dd4295a99ee7b636fc790eac43d8888-lc.min.js

js meingewichtverstehen.ch collected 2026-10-08 12:05:59 UTC 2,580,886 bytes, 118 lines download raw bytes

1/*******************************************************************************
2 * Copyright 2020 Adobe
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *     http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 ******************************************************************************/
16(function() {
17    "use strict";
18
19    var NS = "cmp";
20    var IS = "pdfviewer";
21    var SDK_URL = "https://acrobatservices.adobe.com/view-sdk/viewer.js";
22    var SDK_READY_EVENT = "adobe_dc_view_sdk.ready";
23
24    var selectors = {
25        self: "[data-" + NS + '-is="' + IS + '"]',
26        sdkScript: 'script[src="' + SDK_URL + '"]'
27    };
28
29    function initSDK() {
30        var sdkIncluded = document.querySelectorAll(selectors.sdkScript).length > 0;
31        if (!window.adobe_dc_view_sdk && !sdkIncluded) {
32            var dcv = document.createElement("script");
33            dcv.type = "text/javascript";
34            dcv.src = SDK_URL;
35            document.body.appendChild(dcv);
36        }
37    }
38
39    function previewPdf(component) {
40        // prevents multiple initialization
41        component.removeAttribute("data-" + NS + "-is");
42
43        // add the view sdk to the page
44        initSDK();
45
46        // manage the preview
47        if (component.dataset && component.id) {
48            if (window.AdobeDC && window.AdobeDC.View) {
49                dcView(component);
50            } else {
51                document.addEventListener(SDK_READY_EVENT, function() {
52                    dcView(component);
53                });
54            }
55        }
56    }
57
58    function dcView(component) {
59        var adobeDCView = new window.AdobeDC.View({
60            clientId: component.dataset.cmpClientId,
61            divId: component.id + "-content",
62            reportSuiteId: component.dataset.cmpReportSuiteId,
63            locale: typeof Granite !== "undefined" && Granite && Granite.I18n ? Granite.I18n.getLocale() : navigator.language || navigator.userLanguage
64        });
65        adobeDCView.previewFile({
66            content: { location: { url: component.dataset.cmpDocumentPath } },
67            metaData: { fileName: component.dataset.cmpDocumentFileName }
68        }, JSON.parse(component.dataset.cmpViewerConfigJson));
69    }
70
71    /**
72     * Document ready handler and DOM mutation observers. Initializes Accordion components as necessary.
73     *
74     * @private
75     */
76    function onDocumentReady() {
77        var elements = document.querySelectorAll(selectors.self);
78        for (var i = 0; i < elements.length; i++) {
79            previewPdf(elements[i]);
80        }
81
82        var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;
83        var body = document.querySelector("body");
84        var observer = new MutationObserver(function(mutations) {
85            mutations.forEach(function(mutation) {
86                // needed for IE
87                var nodesArray = [].slice.call(mutation.addedNodes);
88                if (nodesArray.length > 0) {
89                    nodesArray.forEach(function(addedNode) {
90                        if (addedNode.querySelectorAll) {
91                            var elementsArray = [].slice.call(addedNode.querySelectorAll(selectors.self));
92                            elementsArray.forEach(function(element) {
93                                previewPdf(element);
94                            });
95                        }
96                    });
97                }
98            });
99        });
100
101        observer.observe(body, {
102            subtree: true,
103            childList: true,
104            characterData: true
105        });
106
107    }
108
109    if (document.readyState !== "loading") {
110        onDocumentReady();
111    } else {
112        document.addEventListener("DOMContentLoaded", onDocumentReady);
113    }
114}());
115
116/*! For license information please see main.js.LICENSE.txt */
117(()=>{var e={312:()=>{if(document.querySelector(".cmp-sticky-anchor-menu")){var e=document.querySelector(".cmp-sticky-anchor-menu").cloneNode(!0);document.querySelector(".cmp-sticky-anchor-menu").remove(),document.querySelector("#app").appendChild(e);var t=document.querySelector(".cmp-sticky-anchor-menu"),n=document.querySelector(".cmp-sticky-anchor-menu .cmp-list"),i=document.querySelector(".sticky-anchor-menu__button--left"),r=document.querySelector(".sticky-anchor-menu__button--right"),o=0,s=0,a=0,l=0,c=0,u=function(e){s=t.offsetLeft,a=t.offsetWidth,l=n.offsetLeft,c=n.offsetWidth,"left"===e&&c>a?(o-=100,n.style.marginRight="",n.style.marginLeft=o+"px"):"right"===e&&l<0&&(o+=100,n.style.marginRight="",n.style.marginLeft=o+"px"),setTimeout((function(){if("left"===e&&s>l+(c-a)){console.log("last menu item out of bounds"),n.style.marginRight="";var t=s-(c-a)-70;n.style.marginLeft=t+"px",o=t}else"right"===e&&l>s&&(n.style.marginRight="",n.style.marginLeft=0)}),100)()},d=function(){t.offsetWidth<n.offsetWidth?t.classList.contains("arrows-on")||(t.classList.add("arrows-on","mobile-on"),t.classList.add("arrows-on","mobile-on")):(t.classList.remove("arrows-on","mobile-on"),n.style.marginLeft="",n.style.marginRight="")};if(i.addEventListener("click",(function(e){e.preventDefault(),u("left")})),r.addEventListener("click",(function(e){e.preventDefault(),u("right")})),t){var p=0,h=window.innerWidth;window.addEventListener("resize",(function(){window.innerWidth!==h&&(clearTimeout(p),p=setTimeout(d,50),h=window.innerWidth)})),d()}var f=0,v=0;window.addEventListener("scroll",(function(){v=window.pageYOffset,f>v?t.setAttribute("data-scroll-direction","up"):f<v&&t.setAttribute("data-scroll-direction","down"),f=v,d(),setTimeout((function(){window.scrollY<1&&t.setAttribute("data-scroll-direction","down")}),500)()}))}},529:e=>{var t;window,t=function(){return function(){"use strict";
vendor: 10,999 bytes, line 117
117var e={282:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.clearChoices=t.activateChoices=t.filterChoices=t.addChoice=void 0;var i=n(883);t.addChoice=function(e){var t=e.value,n=e.label,r=e.id,o=e.groupId,s=e.disabled,a=e.elementId,l=e.customProperties,c=e.placeholder,u=e.keyCode;return{type:i.ACTION_TYPES.ADD_CHOICE,value:t,label:n,id:r,groupId:o,disabled:s,elementId:a,customProperties:l,placeholder:c,keyCode:u}},t.filterChoices=function(e){return{type:i.ACTION_TYPES.FILTER_CHOICES,results:e}},t.activateChoices=function(e){return void 0===e&&(e=!0),{type:i.ACTION_TYPES.ACTIVATE_CHOICES,active:e}},t.clearChoices=function(){return{type:i.ACTION_TYPES.CLEAR_CHOICES}}},783:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.addGroup=void 0;var i=n(883);t.addGroup=function(e){var t=e.value,n=e.id,r=e.active,o=e.disabled;return{type:i.ACTION_TYPES.ADD_GROUP,value:t,id:n,active:r,disabled:o}}},464:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.highlightItem=t.removeItem=t.addItem=void 0;var i=n(883);t.addItem=function(e){var t=e.value,n=e.label,r=e.id,o=e.choiceId,s=e.groupId,a=e.customProperties,l=e.placeholder,c=e.keyCode;return{type:i.ACTION_TYPES.ADD_ITEM,value:t,label:n,id:r,choiceId:o,groupId:s,customProperties:a,placeholder:l,keyCode:c}},t.removeItem=function(e,t){return{type:i.ACTION_TYPES.REMOVE_ITEM,id:e,choiceId:t}},t.highlightItem=function(e,t){return{type:i.ACTION_TYPES.HIGHLIGHT_ITEM,id:e,highlighted:t}}},137:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.setIsLoading=t.resetTo=t.clearAll=void 0;var i=n(883);t.clearAll=function(){return{type:i.ACTION_TYPES.CLEAR_ALL}},t.resetTo=function(e){return{type:i.ACTION_TYPES.RESET_TO,state:e}},t.setIsLoading=function(e){return{type:i.ACTION_TYPES.SET_IS_LOADING,isLoading:e}}},373:function(e,t,n){var i=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var i,r=0,o=t.length;r<o;r++)!i&&r in t||(i||(i=Array.prototype.slice.call(t,0,r)),i[r]=t[r]);return e.concat(i||Array.prototype.slice.call(t))},r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(996)),s=r(n(221)),a=n(282),l=n(783),c=n(464),u=n(137),d=n(520),p=n(883),h=n(789),f=n(799),v=n(655),m=r(n(744)),g=r(n(686)),y="-ms-scroll-limit"in document.documentElement.style&&"-ms-ime-align"in document.documentElement.style,b={},_=function(){function e(t,n){var r=this;void 0===t&&(t="[data-choice]"),void 0===n&&(n={}),void 0===n.allowHTML&&console.warn("Deprecation warning: allowHTML will default to false in a future release. To render HTML in Choices, you will need to set it to true. Setting allowHTML will suppress this message."),this.config=o.default.all([h.DEFAULT_CONFIG,e.defaults.options,n],{arrayMerge:function(e,t){return i([],t,!0)}});var s=(0,f.diff)(this.config,h.DEFAULT_CONFIG);s.length&&console.warn("Unknown config option(s) passed",s.join(", "));var a="string"==typeof t?document.querySelector(t):t;if(!(a instanceof HTMLInputElement||a instanceof HTMLSelectElement))throw TypeError("Expected one of the following types text|select-one|select-multiple");if(this._isTextElement=a.type===p.TEXT_TYPE,this._isSelectOneElement=a.type===p.SELECT_ONE_TYPE,this._isSelectMultipleElement=a.type===p.SELECT_MULTIPLE_TYPE,this._isSelectElement=this._isSelectOneElement||this._isSelectMultipleElement,this.config.searchEnabled=this._isSelectMultipleElement||this.config.searchEnabled,["auto","always"].includes("".concat(this.config.renderSelectedChoices))||(this.config.renderSelectedChoices="auto"),n.addItemFilter&&"function"!=typeof n.addItemFilter){var l=n.addItemFilter instanceof RegExp?n.addItemFilter:new RegExp(n.addItemFilter);this.config.addItemFilter=l.test.bind(l)}if(this._isTextElement?this.passedElement=new d.WrappedInput({element:a,classNames:this.config.classNames,delimiter:this.config.delimiter}):this.passedElement=new d.WrappedSelect({element:a,classNames:this.config.classNames,template:function(e){return r._templates.option(e)}}),this.initialised=!1,this._store=new m.default,this._initialState=v.defaultState,this._currentState=v.defaultState,this._prevState=v.defaultState,this._currentValue="",this._canSearch=!!this.config.searchEnabled,this._isScrollingOnIe=!1,this._highlightPosition=0,this._wasTap=!0,this._placeholderValue=this._generatePlaceholderValue(),this._baseId=(0,f.generateId)(this.passedElement.element,"choices-"),this._direction=this.passedElement.dir,!this._direction){var c=window.getComputedStyle(this.passedElement.element).direction;c!==window.getComputedStyle(document.documentElement).direction&&(this._direction=c)}if(this._idNames={itemChoice:"item-choice"},this._isSelectElement&&(this._presetGroups=this.passedElement.optionGroups,this._presetOptions=this.passedElement.options),this._presetChoices=this.config.choices,this._presetItems=this.config.items,this.passedElement.value&&this._isTextElement){var u=this.passedElement.value.split(this.config.delimiter);this._presetItems=this._presetItems.concat(u)}if(this.passedElement.options&&this.passedElement.options.forEach((function(e){r._presetChoices.push({value:e.value,label:e.innerHTML,selected:!!e.selected,disabled:e.disabled||e.parentNode.disabled,placeholder:""===e.value||e.hasAttribute("placeholder"),customProperties:e.dataset["custom-properties"]})})),this._render=this._render.bind(this),this._onFocus=this._onFocus.bind(this),this._onBlur=this._onBlur.bind(this),this._onKeyUp=this._onKeyUp.bind(this),this._onKeyDown=this._onKeyDown.bind(this),this._onClick=this._onClick.bind(this),this._onTouchMove=this._onTouchMove.bind(this),this._onTouchEnd=this._onTouchEnd.bind(this),this._onMouseDown=this._onMouseDown.bind(this),this._onMouseOver=this._onMouseOver.bind(this),this._onFormReset=this._onFormReset.bind(this),this._onSelectKey=this._onSelectKey.bind(this),this._onEnterKey=this._onEnterKey.bind(this),this._onEscapeKey=this._onEscapeKey.bind(this),this._onDirectionKey=this._onDirectionKey.bind(this),this._onDeleteKey=this._onDeleteKey.bind(this),this.passedElement.isActive)return this.config.silent||console.warn("Trying to initialise Choices on element already initialised",{element:t}),void(this.initialised=!0);this.init()}return Object.defineProperty(e,"defaults",{get:function(){return Object.preventExtensions({get options(){return b},get templates(){return g.default}})},enumerable:!1,configurable:!0}),e.prototype.init=function(){if(!this.initialised){this._createTemplates(),this._createElements(),this._createStructure(),this._store.subscribe(this._render),this._render(),this._addEventListeners(),(!this.config.addItems||this.passedElement.element.hasAttribute("disabled"))&&this.disable(),this.initialised=!0;var e=this.config.callbackOnInit;e&&"function"==typeof e&&e.call(this)}},e.prototype.destroy=function(){this.initialised&&(this._removeEventListeners(),this.passedElement.reveal(),this.containerOuter.unwrap(this.passedElement.element),this.clearStore(),this._isSelectElement&&(this.passedElement.options=this._presetOptions),this._templates=g.default,this.initialised=!1)},e.prototype.enable=function(){return this.passedElement.isDisabled&&this.passedElement.enable(),this.containerOuter.isDisabled&&(this._addEventListeners(),this.input.enable(),this.containerOuter.enable()),this},e.prototype.disable=function(){return this.passedElement.isDisabled||this.passedElement.disable(),this.containerOuter.isDisabled||(this._removeEventListeners(),this.input.disable(),this.containerOuter.disable()),this},e.prototype.highlightItem=function(e,t){if(void 0===t&&(t=!0),!e||!e.id)return this;var n=e.id,i=e.groupId,r=void 0===i?-1:i,o=e.value,s=void 0===o?"":o,a=e.label,l=void 0===a?"":a,u=r>=0?this._store.getGroupById(r):null;return this._store.dispatch((0,c.highlightItem)(n,!0)),t&&this.passedElement.triggerEvent(p.EVENTS.highlightItem,{id:n,value:s,label:l,groupValue:u&&u.value?u.value:null}),this},e.prototype.unhighlightItem=function(e){if(!e||!e.id)return this;var t=e.id,n=e.groupId,i=void 0===n?-1:n,r=e.value,o=void 0===r?"":r,s=e.label,a=void 0===s?"":s,l=i>=0?this._store.getGroupById(i):null;return this._store.dispatch((0,c.highlightItem)(t,!1)),this.passedElement.triggerEvent(p.EVENTS.highlightItem,{id:t,value:o,label:a,groupValue:l&&l.value?l.value:null}),this},e.prototype.highlightAll=function(){var e=this;return this._store.items.forEach((function(t){return e.highlightItem(t)})),this},e.prototype.unhighlightAll=function(){var e=this;return this._store.items.forEach((function(t){return e.unhighlightItem(t)})),this},e.prototype.removeActiveItemsByValue=function(e){var t=this;return this._store.activeItems.filter((function(t){return t.value===e})).forEach((function(e){return t._removeItem(e)})),this},e.prototype.removeActiveItems=function(e){var t=this;return this._store.activeItems.filter((function(t){return t.id!==e})).forEach((function(e){return t._removeItem(e)})),this},e.prototype.removeHighlightedItems=function(e){var t=this;return void 0===e&&(e=!1),this._store.highlightedActiveItems.forEach((function(n){t._removeItem(n),e&&t._triggerChange(n.value)})),this},e.prototype.showDropdown=function(e){var t=this;return this.dropdown.isActive||requestAnimationFrame((function(){t.dropdown.show(),t.containerOuter.open(t.dropdown.distanceFromTopWindow),!e&&t._canSearch&&t.input.focus(),t.passedElement.triggerEvent(p.EVENTS.showDropdown,{})})),this},e.prototype.hideDropdown=function(e){var t=this;return this.dropdown.isActive?(requestAnimationFrame((function(){t.dropdown.hide(),t.containerOuter.close(),!e&&t._canSearch&&(t.input.removeActiveDescendant(),t.input.blur()),t.passedElement.triggerEvent(p.EVENTS.hideDropdown,{})})),this):this},e.prototype.getValue=function(e){void 0===e&&(e=!1);var t=this._store.activeItems.reduce((function(t,n){var i=e?n.value:n;return t.push(i),t}),[]);return this._isSelectOneElement?t[0]:t},e.prototype.setValue=function(e){var t=this;return this.initialised?(e.forEach((function(e){return t._setChoiceOrItem(e)})),this):this},e.prototype.setChoiceByValue=function(e){var t=this;return!this.initialised||this._isTextElement||(Array.isArray(e)?e:[e]).forEach((function(e){return t._findAndSelectChoiceByValue(e)})),this},e.prototype.setChoices=function(e,t,n,i){var r=this;if(void 0===e&&(e=[]),void 0===t&&(t="value"),void 0===n&&(n="label"),void 0===i&&(i=!1),!this.initialised)throw new ReferenceError("setChoices was called on a non-initialized instance of Choices");if(!this._isSelectElement)throw new TypeError("setChoices can't be used with INPUT based Choices");if("string"!=typeof t||!t)throw new TypeError("value parameter must be a name of 'value' field in passed objects");if(i&&this.clearChoices(),"function"==typeof e){var o=e(this);if("function"==typeof Promise&&o instanceof Promise)return new Promise((function(e){return requestAnimationFrame(e)})).then((function(){return r._handleLoadingState(!0)})).then((function(){return o}
vendor: 6,283 bytes, line 117
117)).then((function(e){return r.setChoices(e,t,n,i)})).catch((function(e){r.config.silent||console.error(e)})).then((function(){return r._handleLoadingState(!1)})).then((function(){return r}));if(!Array.isArray(o))throw new TypeError(".setChoices first argument function must return either array of choices or Promise, got: ".concat(typeof o));return this.setChoices(o,t,n,!1)}if(!Array.isArray(e))throw new TypeError(".setChoices must be called either with array of choices with a function resulting into Promise of array of choices");return this.containerOuter.removeLoadingState(),this._startLoading(),e.forEach((function(e){if(e.choices)r._addGroup({id:e.id?parseInt("".concat(e.id),10):null,group:e,valueKey:t,labelKey:n});else{var i=e;r._addChoice({value:i[t],label:i[n],isSelected:!!i.selected,isDisabled:!!i.disabled,placeholder:!!i.placeholder,customProperties:i.customProperties})}})),this._stopLoading(),this},e.prototype.clearChoices=function(){return this._store.dispatch((0,a.clearChoices)()),this},e.prototype.clearStore=function(){return this._store.dispatch((0,u.clearAll)()),this},e.prototype.clearInput=function(){var e=!this._isSelectOneElement;return this.input.clear(e),!this._isTextElement&&this._canSearch&&(this._isSearching=!1,this._store.dispatch((0,a.activateChoices)(!0))),this},e.prototype._render=function(){if(!this._store.isLoading()){this._currentState=this._store.state;var e=this._currentState.choices!==this._prevState.choices||this._currentState.groups!==this._prevState.groups||this._currentState.items!==this._prevState.items,t=this._isSelectElement,n=this._currentState.items!==this._prevState.items;e&&(t&&this._renderChoices(),n&&this._renderItems(),this._prevState=this._currentState)}},e.prototype._renderChoices=function(){var e=this,t=this._store,n=t.activeGroups,i=t.activeChoices,r=document.createDocumentFragment();if(this.choiceList.clear(),this.config.resetScrollPosition&&requestAnimationFrame((function(){return e.choiceList.scrollToTop()})),n.length>=1&&!this._isSearching){var o=i.filter((function(e){return!0===e.placeholder&&-1===e.groupId}));o.length>=1&&(r=this._createChoicesFragment(o,r)),r=this._createGroupsFragment(n,i,r)}else i.length>=1&&(r=this._createChoicesFragment(i,r));if(r.childNodes&&r.childNodes.length>0){var s=this._store.activeItems,a=this._canAddItem(s,this.input.value);if(a.response)this.choiceList.append(r),this._highlightChoice();else{var l=this._getTemplate("notice",a.notice);this.choiceList.append(l)}}else{var c=void 0;l=void 0,this._isSearching?(l="function"==typeof this.config.noResultsText?this.config.noResultsText():this.config.noResultsText,c=this._getTemplate("notice",l,"no-results")):(l="function"==typeof this.config.noChoicesText?this.config.noChoicesText():this.config.noChoicesText,c=this._getTemplate("notice",l,"no-choices")),this.choiceList.append(c)}},e.prototype._renderItems=function(){var e=this._store.activeItems||[];this.itemList.clear();var t=this._createItemsFragment(e);t.childNodes&&this.itemList.append(t)},e.prototype._createGroupsFragment=function(e,t,n){var i=this;return void 0===n&&(n=document.createDocumentFragment()),this.config.shouldSort&&e.sort(this.config.sorter),e.forEach((function(e){var r=function(e){return t.filter((function(t){return i._isSelectOneElement?t.groupId===e.id:t.groupId===e.id&&("always"===i.config.renderSelectedChoices||!t.selected)}))}(e);if(r.length>=1){var o=i._getTemplate("choiceGroup",e);n.appendChild(o),i._createChoicesFragment(r,n,!0)}})),n},e.prototype._createChoicesFragment=function(e,t,n){var r=this;void 0===t&&(t=document.createDocumentFragment()),void 0===n&&(n=!1);var o=this.config,s=o.renderSelectedChoices,a=o.searchResultLimit,l=o.renderChoiceLimit,c=this._isSearching?f.sortByScore:this.config.sorter,u=function(e){if("auto"!==s||r._isSelectOneElement||!e.selected){var n=r._getTemplate("choice",e,r.config.itemSelectText);t.appendChild(n)}},d=e;"auto"!==s||this._isSelectOneElement||(d=e.filter((function(e){return!e.selected})));var p=d.reduce((function(e,t){return t.placeholder?e.placeholderChoices.push(t):e.normalChoices.push(t),e}),{placeholderChoices:[],normalChoices:[]}),h=p.placeholderChoices,v=p.normalChoices;(this.config.shouldSort||this._isSearching)&&v.sort(c);var m=d.length,g=this._isSelectOneElement?i(i([],h,!0),v,!0):v;this._isSearching?m=a:l&&l>0&&!n&&(m=l);for(var y=0;y<m;y+=1)g[y]&&u(g[y]);return t},e.prototype._createItemsFragment=function(e,t){var n=this;void 0===t&&(t=document.createDocumentFragment());var i=this.config,r=i.shouldSortItems,o=i.sorter,s=i.removeItemButton;return r&&!this._isSelectOneElement&&e.sort(o),this._isTextElement?this.passedElement.value=e.map((function(e){return e.value})).join(this.config.delimiter):this.passedElement.options=e,e.forEach((function(e){var i=n._getTemplate("item",e,s);t.appendChild(i)})),t},e.prototype._triggerChange=function(e){null!=e&&this.passedElement.triggerEvent(p.EVENTS.change,{value:e})},e.prototype._selectPlaceholderChoice=function(e){this._addItem({value:e.value,label:e.label,choiceId:e.id,groupId:e.groupId,placeholder:e.placeholder}),this._triggerChange(e.value)},e.prototype._handleButtonAction=function(e,t){if(e&&t&&this.config.removeItems&&this.config.removeItemButton){var n=t.parentNode&&t.parentNode.dataset.id,i=n&&e.find((function(e){return e.id===parseInt(n,10)}));i&&(this._removeItem(i),this._triggerChange(i.value),this._isSelectOneElement&&this._store.placeholderChoice&&this._selectPlaceholderChoice(this._store.placeholderChoice))}},e.prototype._handleItemAction=function(e,t,n){var i=this;if(void 0===n&&(n=!1),e&&t&&this.config.removeItems&&!this._isSelectOneElement){var r=t.dataset.id;e.forEach((function(e){e.id!==parseInt("".concat(r),10)||e.highlighted?!n&&e.highlighted&&i.unhighlightItem(e):i.highlightItem(e)})),this.input.focus()}},e.prototype._handleChoiceAction=function(e,t){if(e&&t){var n=t.dataset.id,i=n&&this._store.getChoiceById(n);if(i){var r=e[0]&&e[0].keyCode?e[0].keyCode:void 0,o=this.dropdown.isActive;i.keyCode=r,this.passedElement.triggerEvent(p.EVENTS.choice,{choice:i}),i.selected||i.disabled||this._canAddItem(e,i.value).response&&(this._addItem({value:i.value,label:i.label,choiceId:i.id,groupId:i.groupId,customProperties:i.customProperties,placeholder:i.placeholder,ke
vendor: 11,205 bytes, line 117
117yCode:i.keyCode}),this._triggerChange(i.value)),this.clearInput(),o&&this._isSelectOneElement&&(this.hideDropdown(!0),this.containerOuter.focus())}}},e.prototype._handleBackspace=function(e){if(this.config.removeItems&&e){var t=e[e.length-1],n=e.some((function(e){return e.highlighted}));this.config.editItems&&!n&&t?(this.input.value=t.value,this.input.setWidth(),this._removeItem(t),this._triggerChange(t.value)):(n||this.highlightItem(t,!1),this.removeHighlightedItems(!0))}},e.prototype._startLoading=function(){this._store.dispatch((0,u.setIsLoading)(!0))},e.prototype._stopLoading=function(){this._store.dispatch((0,u.setIsLoading)(!1))},e.prototype._handleLoadingState=function(e){void 0===e&&(e=!0);var t=this.itemList.getChild(".".concat(this.config.classNames.placeholder));e?(this.disable(),this.containerOuter.addLoadingState(),this._isSelectOneElement?t?t.innerHTML=this.config.loadingText:(t=this._getTemplate("placeholder",this.config.loadingText))&&this.itemList.append(t):this.input.placeholder=this.config.loadingText):(this.enable(),this.containerOuter.removeLoadingState(),this._isSelectOneElement?t&&(t.innerHTML=this._placeholderValue||""):this.input.placeholder=this._placeholderValue||"")},e.prototype._handleSearch=function(e){if(this.input.isFocussed){var t=this._store.choices,n=this.config,i=n.searchFloor,r=n.searchChoices,o=t.some((function(e){return!e.active}));if(null!=e&&e.length>=i){var s=r?this._searchChoices(e):0;this.passedElement.triggerEvent(p.EVENTS.search,{value:e,resultCount:s})}else o&&(this._isSearching=!1,this._store.dispatch((0,a.activateChoices)(!0)))}},e.prototype._canAddItem=function(e,t){var n=!0,i="function"==typeof this.config.addItemText?this.config.addItemText(t):this.config.addItemText;if(!this._isSelectOneElement){var r=(0,f.existsInArray)(e,t);this.config.maxItemCount>0&&this.config.maxItemCount<=e.length&&(n=!1,i="function"==typeof this.config.maxItemText?this.config.maxItemText(this.config.maxItemCount):this.config.maxItemText),!this.config.duplicateItemsAllowed&&r&&n&&(n=!1,i="function"==typeof this.config.uniqueItemText?this.config.uniqueItemText(t):this.config.uniqueItemText),this._isTextElement&&this.config.addItems&&n&&"function"==typeof this.config.addItemFilter&&!this.config.addItemFilter(t)&&(n=!1,i="function"==typeof this.config.customAddItemText?this.config.customAddItemText(t):this.config.customAddItemText)}return{response:n,notice:i}},e.prototype._searchChoices=function(e){var t="string"==typeof e?e.trim():e,n="string"==typeof this._currentValue?this._currentValue.trim():this._currentValue;if(t.length<1&&t==="".concat(n," "))return 0;var r=this._store.searchableChoices,o=t,l=Object.assign(this.config.fuseOptions,{keys:i([],this.config.searchFields,!0),includeMatches:!0}),c=new s.default(r,l).search(o);return this._currentValue=t,this._highlightPosition=0,this._isSearching=!0,this._store.dispatch((0,a.filterChoices)(c)),c.length},e.prototype._addEventListeners=function(){var e=document.documentElement;e.addEventListener("touchend",this._onTouchEnd,!0),this.containerOuter.element.addEventListener("keydown",this._onKeyDown,!0),this.containerOuter.element.addEventListener("mousedown",this._onMouseDown,!0),e.addEventListener("click",this._onClick,{passive:!0}),e.addEventListener("touchmove",this._onTouchMove,{passive:!0}),this.dropdown.element.addEventListener("mouseover",this._onMouseOver,{passive:!0}),this._isSelectOneElement&&(this.containerOuter.element.addEventListener("focus",this._onFocus,{passive:!0}),this.containerOuter.element.addEventListener("blur",this._onBlur,{passive:!0})),this.input.element.addEventListener("keyup",this._onKeyUp,{passive:!0}),this.input.element.addEventListener("focus",this._onFocus,{passive:!0}),this.input.element.addEventListener("blur",this._onBlur,{passive:!0}),this.input.element.form&&this.input.element.form.addEventListener("reset",this._onFormReset,{passive:!0}),this.input.addEventListeners()},e.prototype._removeEventListeners=function(){var e=document.documentElement;e.removeEventListener("touchend",this._onTouchEnd,!0),this.containerOuter.element.removeEventListener("keydown",this._onKeyDown,!0),this.containerOuter.element.removeEventListener("mousedown",this._onMouseDown,!0),e.removeEventListener("click",this._onClick),e.removeEventListener("touchmove",this._onTouchMove),this.dropdown.element.removeEventListener("mouseover",this._onMouseOver),this._isSelectOneElement&&(this.containerOuter.element.removeEventListener("focus",this._onFocus),this.containerOuter.element.removeEventListener("blur",this._onBlur)),this.input.element.removeEventListener("keyup",this._onKeyUp),this.input.element.removeEventListener("focus",this._onFocus),this.input.element.removeEventListener("blur",this._onBlur),this.input.element.form&&this.input.element.form.removeEventListener("reset",this._onFormReset),this.input.removeEventListeners()},e.prototype._onKeyDown=function(e){var t=e.keyCode,n=this._store.activeItems,i=this.input.isFocussed,r=this.dropdown.isActive,o=this.itemList.hasChildren(),s=String.fromCharCode(t),a=/[a-zA-Z0-9-_ ]/.test(s),l=p.KEY_CODES.BACK_KEY,c=p.KEY_CODES.DELETE_KEY,u=p.KEY_CODES.ENTER_KEY,d=p.KEY_CODES.A_KEY,h=p.KEY_CODES.ESC_KEY,f=p.KEY_CODES.UP_KEY,v=p.KEY_CODES.DOWN_KEY,m=p.KEY_CODES.PAGE_UP_KEY,g=p.KEY_CODES.PAGE_DOWN_KEY;switch(this._isTextElement||r||!a||(this.showDropdown(),this.input.isFocussed||(this.input.value+=s.toLowerCase())),t){case d:return this._onSelectKey(e,o);case u:return this._onEnterKey(e,n,r);case h:return this._onEscapeKey(r);case f:case m:case v:case g:return this._onDirectionKey(e,r);case c:case l:return this._onDeleteKey(e,n,i)}},e.prototype._onKeyUp=function(e){var t=e.target,n=e.keyCode,i=this.input.value,r=this._store.activeItems,o=this._canAddItem(r,i),s=p.KEY_CODES.BACK_KEY,l=p.KEY_CODES.DELETE_KEY;if(this._isTextElement)if(o.notice&&i){var c=this._getTemplate("notice",o.notice);this.dropdown.element.innerHTML=c.outerHTML,this.showDropdown(!0)}else this.hideDropdown(!0);else{var u=(n===s||n===l)&&t&&!t.value,d=!this._isTextElement&&this._isSearching,h=this._canSearch&&o.response;u&&d?(this._isSearching=!1,this._store.dispatch((0,a.activateChoices)(!0))):h&&this._handleSearch(this.input.rawValue)}this._canSearch=this.config.searchEnabled},e.prototype._onSelectKey=function(e,t){var n=e.ctrlKey,i=e.metaKey;(n||i)&&t&&(this._canSearch=!1,this.config.removeItems&&!this.input.value&&this.input.element===document.activeElement&&this.highlightAll())},e.prototype._onEnterKey=function(e,t,n){var i=e.target,r=p.KEY_CODES.ENTER_KEY,o=i&&i.hasAttribute("data-button");if(this._isTextElement&&i&&i.value){var s=this.input.value;this._canAddItem(t,s).response&&(this.hideDropdown(!0),this._addItem({value:s}),this._triggerChange(s),this.clearInput())}if(o&&(this._handleButtonAction(t,i),e.preventDefault()),n){var a=this.dropdown.getChild(".".concat(this.config.classNames.highlightedState));a&&(t[0]&&(t[0].keyCode=r),this._handleChoiceAction(t,a)),e.preventDefault()}else this._isSelectOneElement&&(this.showDropdown(),e.preventDefault())},e.prototype._onEscapeKey=function(e){e&&(this.hideDropdown(!0),this.containerOuter.focus())},e.prototype._onDirectionKey=function(e,t){var n=e.keyCode,i=e.metaKey,r=p.KEY_CODES.DOWN_KEY,o=p.KEY_CODES.PAGE_UP_KEY,s=p.KEY_CODES.PAGE_DOWN_KEY;if(t||this._isSelectOneElement){this.showDropdown(),this._canSearch=!1;var a=n===r||n===s?1:-1,l="[data-choice-selectable]",c=void 0;if(i||n===s||n===o)c=a>0?this.dropdown.element.querySelector("".concat(l,":last-of-type")):this.dropdown.element.querySelector(l);else{var u=this.dropdown.element.querySelector(".".concat(this.config.classNames.highlightedState));c=u?(0,f.getAdjacentEl)(u,l,a):this.dropdown.element.querySelector(l)}c&&((0,f.isScrolledIntoView)(c,this.choiceList.element,a)||this.choiceList.scrollToChildElement(c,a),this._highlightChoice(c)),e.preventDefault()}},e.prototype._onDeleteKey=function(e,t,n){var i=e.target;this._isSelectOneElement||i.value||!n||(this._handleBackspace(t),e.preventDefault())},e.prototype._onTouchMove=function(){this._wasTap&&(this._wasTap=!1)},e.prototype._onTouchEnd=function(e){var t=(e||e.touches[0]).target;this._wasTap&&this.containerOuter.element.contains(t)&&((t===this.containerOuter.element||t===this.containerInner.element)&&(this._isTextElement?this.input.focus():this._isSelectMultipleElement&&this.showDropdown()),e.stopPropagation()),this._wasTap=!0},e.prototype._onMouseDown=function(e){var t=e.target;if(t instanceof HTMLElement){if(y&&this.choiceList.element.contains(t)){var n=this.choiceList.element.firstElementChild,i="ltr"===this._direction?e.offsetX>=n.offsetWidth:e.offsetX<n.offsetLeft;this._isScrollingOnIe=i}if(t!==this.input.element){var r=t.closest("[data-button],[data-item],[data-choice]");if(r instanceof HTMLElement){var o=e.shiftKey,s=this._store.activeItems,a=r.dataset;"button"in a?this._handleButtonAction(s,r):"item"in a?this._handleItemAction(s,r,o):"choice"in a&&this._handleChoiceAction(s,r)}e.preventDefault()}}},e.prototype._onMouseOver=function(e){var t=e.target;t instanceof HTMLElement&&"choice"in t.dataset&&this._highlightChoice(t)},e.prototype._onClick=function(e){var t=e.target;this.containerOuter.element.contains(t)?this.dropdown.isActive||this.containerOuter.isDisabled?this._isSelectOneElement&&t!==this.input.element&&!this.dropdown.element.contains(t)&&this.hideDropdown():this._isTextElement?document.activeElement!==this.input.element&&this.input.focus():(this.showDropdown(),this.containerOuter.focus()):(this._store.highlightedActiveItems.length>0&&this.unhighlightAll(),this.containerOuter.removeFocusState(),this.hideDropdown(!0))},e.prototype._onFocus=function(e){var t,n=this,i=e.target;i&&this.containerOuter.element.contains(i)&&((t={})[p.TEXT_TYPE]=function(){i===n.input.element&&n.containerOuter.addFocusState()},t[p.SELECT_ONE_TYPE]=function(){n.containerOuter.addFocusState(),i===n.input.element&&n.showDropdown(!0)},t[p.SELECT_MULTIPLE_TYPE]=function(){i===n.input.element&&(n.showDropdown(!0),n.containerOuter.addFocusState())},t)[this.passedElement.element.type]()},e.prototype._onBlur=function(e){var t,n=this,i=e.target;if(i&&this.containerOuter.element.contains(i)&&!this._isScrollingOnIe){var r=this._store.activeItems.some((function(e){return e.highlighted}));((t={})[p.TEXT_TYPE]=function(){i===n.input.element&&(n.containerOuter.removeFocusState(),r&&n.unhighlightAll(),n.hideDropdown(!0))},t[p.SELECT_ONE_TYPE]=function(){n.containerOuter.removeFocusState(),(i===n.input.element||i===n.containerOuter.element&&!n._canSearch)&&n.hideDropdown(!0)},t[p.SELECT_MULTIPLE_TYPE]=function(){i===n.input.element&&(n.containerOuter.removeFocusState(),n.hideDropdown(!0),r&&n.unhighlightAll())},t)[this.passedElement.element.type]()}else this._isScrollingOnIe=!1,this.input.element.focus()},e.prototype._onFormReset=function(){this._store.dispatch((0,u.resetTo)(this._initialState))},e.prototype._highlightChoice=function(e){var t=this;void 0===e&&(e=null);var n=Array.from(this.dropdown.element.querySelectorAll("[data-choice-selectable]"));if(n.length){var i=e;Array.from(this.dropdown.element.querySelectorAll(".".concat(this.config.classNames.highlightedState))).forEac
vendor: 7,700 bytes, line 117
117h((function(e){e.classList.remove(t.config.classNames.highlightedState),e.setAttribute("aria-selected","false")})),i?this._highlightPosition=n.indexOf(i):(i=n.length>this._highlightPosition?n[this._highlightPosition]:n[n.length-1])||(i=n[0]),i.classList.add(this.config.classNames.highlightedState),i.setAttribute("aria-selected","true"),this.passedElement.triggerEvent(p.EVENTS.highlightChoice,{el:i}),this.dropdown.isActive&&(this.input.setActiveDescendant(i.id),this.containerOuter.setActiveDescendant(i.id))}},e.prototype._addItem=function(e){var t=e.value,n=e.label,i=void 0===n?null:n,r=e.choiceId,o=void 0===r?-1:r,s=e.groupId,a=void 0===s?-1:s,l=e.customProperties,u=void 0===l?{}:l,d=e.placeholder,h=void 0!==d&&d,f=e.keyCode,v=void 0===f?-1:f,m="string"==typeof t?t.trim():t,g=this._store.items,y=i||m,b=o||-1,_=a>=0?this._store.getGroupById(a):null,E=g?g.length+1:1;this.config.prependValue&&(m=this.config.prependValue+m.toString()),this.config.appendValue&&(m+=this.config.appendValue.toString()),this._store.dispatch((0,c.addItem)({value:m,label:y,id:E,choiceId:b,groupId:a,customProperties:u,placeholder:h,keyCode:v})),this._isSelectOneElement&&this.removeActiveItems(E),this.passedElement.triggerEvent(p.EVENTS.addItem,{id:E,value:m,label:y,customProperties:u,groupValue:_&&_.value?_.value:null,keyCode:v})},e.prototype._removeItem=function(e){var t=e.id,n=e.value,i=e.label,r=e.customProperties,o=e.choiceId,s=e.groupId,a=s&&s>=0?this._store.getGroupById(s):null;t&&o&&(this._store.dispatch((0,c.removeItem)(t,o)),this.passedElement.triggerEvent(p.EVENTS.removeItem,{id:t,value:n,label:i,customProperties:r,groupValue:a&&a.value?a.value:null}))},e.prototype._addChoice=function(e){var t=e.value,n=e.label,i=void 0===n?null:n,r=e.isSelected,o=void 0!==r&&r,s=e.isDisabled,l=void 0!==s&&s,c=e.groupId,u=void 0===c?-1:c,d=e.customProperties,p=void 0===d?{}:d,h=e.placeholder,f=void 0!==h&&h,v=e.keyCode,m=void 0===v?-1:v;if(null!=t){var g=this._store.choices,y=i||t,b=g?g.length+1:1,_="".concat(this._baseId,"-").concat(this._idNames.itemChoice,"-").concat(b);this._store.dispatch((0,a.addChoice)({id:b,groupId:u,elementId:_,value:t,label:y,disabled:l,customProperties:p,placeholder:f,keyCode:m})),o&&this._addItem({value:t,label:y,choiceId:b,customProperties:p,placeholder:f,keyCode:m})}},e.prototype._addGroup=function(e){var t=this,n=e.group,i=e.id,r=e.valueKey,o=void 0===r?"value":r,s=e.labelKey,a=void 0===s?"label":s,c=(0,f.isType)("Object",n)?n.choices:Array.from(n.getElementsByTagName("OPTION")),u=i||Math.floor((new Date).valueOf()*Math.random()),d=!!n.disabled&&n.disabled;c?(this._store.dispatch((0,l.addGroup)({value:n.label,id:u,active:!0,disabled:d})),c.forEach((function(e){var n=e.disabled||e.parentNode&&e.parentNode.disabled;t._addChoice({value:e[o],label:(0,f.isType)("Object",e)?e[a]:e.innerHTML,isSelected:e.selected,isDisabled:n,groupId:u,customProperties:e.customProperties,placeholder:e.placeholder})}))):this._store.dispatch((0,l.addGroup)({value:n.label,id:n.id,active:!1,disabled:n.disabled}))},e.prototype._getTemplate=function(e){for(var t,n=[],r=1;r<arguments.length;r++)n[r-1]=arguments[r];return(t=this._templates[e]).call.apply(t,i([this,this.config],n,!1))},e.prototype._createTemplates=function(){var e=this.config.callbackOnCreateTemplates,t={};e&&"function"==typeof e&&(t=e.call(this,f.strToEl)),this._templates=(0,o.default)(g.default,t)},e.prototype._createElements=function(){this.containerOuter=new d.Container({element:this._getTemplate("containerOuter",this._direction,this._isSelectElement,this._isSelectOneElement,this.config.searchEnabled,this.passedElement.element.type,this.config.labelId),classNames:this.config.classNames,type:this.passedElement.element.type,position:this.config.position}),this.containerInner=new d.Container({element:this._getTemplate("containerInner"),classNames:this.config.classNames,type:this.passedElement.element.type,position:this.config.position}),this.input=new d.Input({element:this._getTemplate("input",this._placeholderValue),classNames:this.config.classNames,type:this.passedElement.element.type,preventPaste:!this.config.paste}),this.choiceList=new d.List({element:this._getTemplate("choiceList",this._isSelectOneElement)}),this.itemList=new d.List({element:this._getTemplate("itemList",this._isSelectOneElement)}),this.dropdown=new d.Dropdown({element:this._getTemplate("dropdown"),classNames:this.config.classNames,type:this.passedElement.element.type})},e.prototype._createStructure=function(){this.passedElement.conceal(),this.containerInner.wrap(this.passedElement.element),this.containerOuter.wrap(this.containerInner.element),this._isSelectOneElement?this.input.placeholder=this.config.searchPlaceholderValue||"":this._placeholderValue&&(this.input.placeholder=this._placeholderValue,this.input.setWidth()),this.containerOuter.element.appendChild(this.containerInner.element),this.containerOuter.element.appendChild(this.dropdown.element),this.containerInner.element.appendChild(this.itemList.element),this._isTextElement||this.dropdown.element.appendChild(this.choiceList.element),this._isSelectOneElement?this.config.searchEnabled&&this.dropdown.element.insertBefore(this.input.element,this.dropdown.element.firstChild):this.containerInner.element.appendChild(this.input.element),this._isSelectElement&&(this._highlightPosition=0,this._isSearching=!1,this._startLoading(),this._presetGroups.length?this._addPredefinedGroups(this._presetGroups):this._addPredefinedChoices(this._presetChoices),this._stopLoading()),this._isTextElement&&this._addPredefinedItems(this._presetItems)},e.prototype._addPredefinedGroups=function(e){var t=this,n=this.passedElement.placeholderOption;n&&n.parentNode&&"SELECT"===n.parentNode.tagName&&this._addChoice({value:n.value,label:n.innerHTML,isSelected:n.selected,isDisabled:n.disabled,placeholder:!0}),e.forEach((function(e){return t._addGroup({group:e,id:e.id||null})}))},e.prototype._addPredefinedChoices=function(e){var t=this;this.config.shouldSort&&e.sort(this.config.sorter);var n=e.some((function(e){return e.selected})),i=e.findIndex((function(e){return void 0===e.disabled||!e.disabled}));e.forEach((function(e,r){var o=e.value,s=void 0===o?"":o,a=e.label,l=e.customProperties,c=e.placeholder;if(t._isSelectElement)if(e.choices)t._addGroup({group:e,id:e.id||null});else{var u=!(!t._isSelectOneElement||n||r!==i)||e.selected,d=e.disabled;t._addChoice({value:s,label:a,isSelected:!!u,isDisabled:!!d,placeholder:!!c,customProperties:l})}else t._addChoice({value:s,label:a,isSelected:!!e.selected,isDisabled:!!e.disabled,placeholder:!!e.placeholder,customProperties:l})}))},e.prototype._addPredefinedItems=function(e){var t=this;e.forEach((function(e){"object"==typeof e&&e.value&&t._addItem({value:e.value,label:e.label,choiceId:e.id,customProperties:e.customProperties,placeholder:e.placeholder}),"string"==typeof e&&t._addItem({value:e})}))},e.prototype._setChoiceOrItem=function(e){var t=this;({object:function(){e.value&&(t._isTextElement?t._addItem({value:e.value,label:e.label,choiceId:e.id,customProperties:e.customProperties,placeholder:e.placeholder}):t._addChoice({value:e.value,label:e.label,isSelected:!0,isDisabled:!1,customProperties:e.customProperties,placeholder:e.placeholder}))},string:function(){t._isTextElement?t._addItem({value:e}):t._addChoice({value:e,label:e,isSelected:!0,isDisabled:!1})}})[(0,f.getType)(e).toLowerCase()]()},e.prototype._findAndSelectChoiceByValue=function(e){var t=this,n=this._store.choices.find((function(n){return t.config.valueComparer(n.value,e)}));n&&!n.selected&&this._addItem({value:n.value,label:n.label,choiceId:n.id,groupId:n.groupId,customProperties:n.customProperties,placeholder:n.placeholder,ke
vendor: 4,134 bytes, line 117
117yCode:n.keyCode})},e.prototype._generatePlaceholderValue=function(){if(this._isSelectElement&&this.passedElement.placeholderOption){var e=this.passedElement.placeholderOption;return e?e.text:null}var t=this.config,n=t.placeholder,i=t.placeholderValue,r=this.passedElement.element.dataset;if(n){if(i)return i;if(r.placeholder)return r.placeholder}return null},e}();t.default=_},613:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var i=n(799),r=n(883),o=function(){function e(e){var t=e.element,n=e.type,i=e.classNames,r=e.position;this.element=t,this.classNames=i,this.type=n,this.position=r,this.isOpen=!1,this.isFlipped=!1,this.isFocussed=!1,this.isDisabled=!1,this.isLoading=!1,this._onFocus=this._onFocus.bind(this),this._onBlur=this._onBlur.bind(this)}return e.prototype.addEventListeners=function(){this.element.addEventListener("focus",this._onFocus),this.element.addEventListener("blur",this._onBlur)},e.prototype.removeEventListeners=function(){this.element.removeEventListener("focus",this._onFocus),this.element.removeEventListener("blur",this._onBlur)},e.prototype.shouldFlip=function(e){if("number"!=typeof e)return!1;var t=!1;return"auto"===this.position?t=!window.matchMedia("(min-height: ".concat(e+1,"px)")).matches:"top"===this.position&&(t=!0),t},e.prototype.setActiveDescendant=function(e){this.element.setAttribute("aria-activedescendant",e)},e.prototype.removeActiveDescendant=function(){this.element.removeAttribute("aria-activedescendant")},e.prototype.open=function(e){this.element.classList.add(this.classNames.openState),this.element.setAttribute("aria-expanded","true"),this.isOpen=!0,this.shouldFlip(e)&&(this.element.classList.add(this.classNames.flippedState),this.isFlipped=!0)},e.prototype.close=function(){this.element.classList.remove(this.classNames.openState),this.element.setAttribute("aria-expanded","false"),this.removeActiveDescendant(),this.isOpen=!1,this.isFlipped&&(this.element.classList.remove(this.classNames.flippedState),this.isFlipped=!1)},e.prototype.focus=function(){this.isFocussed||this.element.focus()},e.prototype.addFocusState=function(){this.element.classList.add(this.classNames.focusState)},e.prototype.removeFocusState=function(){this.element.classList.remove(this.classNames.focusState)},e.prototype.enable=function(){this.element.classList.remove(this.classNames.disabledState),this.element.removeAttribute("aria-disabled"),this.type===r.SELECT_ONE_TYPE&&this.element.setAttribute("tabindex","0"),this.isDisabled=!1},e.prototype.disable=function(){this.element.classList.add(this.classNames.disabledState),this.element.setAttribute("aria-disabled","true"),this.type===r.SELECT_ONE_TYPE&&this.element.setAttribute("tabindex","-1"),this.isDisabled=!0},e.prototype.wrap=function(e){(0,i.wrap)(e,this.element)},e.prototype.unwrap=function(e){this.element.parentNode&&(this.element.parentNode.insertBefore(e,this.element),this.element.parentNode.removeChild(this.element))},e.prototype.addLoadingState=function(){this.element.classList.add(this.classNames.loadingState),this.element.setAttribute("aria-busy","true"),this.isLoading=!0},e.prototype.removeLoadingState=function(){this.element.classList.remove(this.classNames.loadingState),this.element.removeAttribute("aria-busy"),this.isLoading=!1},e.prototype._onFocus=function(){this.isFocussed=!0},e.prototype._onBlur=function(){this.isFocussed=!1},e}();t.default=o},217:function(e,t){Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e){var t=e.element,n=e.type,i=e.classNames;this.element=t,this.classNames=i,this.type=n,this.isActive=!1}return Object.defineProperty(e.prototype,"distanceFromTopWindow",{get:function(){return this.element.getBoundingClientRect().bottom},enumerable:!1,configurable:!0}),e.prototype.getChild=function(e){return this.element.querySelector(e)},e.prototype.show=function(){return this.element.classList.add(this.classNames.activeState),this.element.setAttribute("aria-expanded","true"),this.isActive=!0,this},e.prototype.hide=function(){return this.element.classList.remove(this.classNames.activeState),this.element.setAttribute("aria-expanded","fal
117se"),this.isActive=!1,this},e}();t.default=n},520:function(e,t,n){var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.WrappedSelect=t.WrappedInput=t.List=t.Input=t.Container=t.Dropdown=void 0;var r=i(n(217));t.Dropdown=r.default;var o=i(n(613));t.Container=o.default;var s=i(n(11));t.Input=s.default;var a=i(n(624));t.List=a.default;var l=i(n(541));t.WrappedInput=l.default;var c=i(n(982));t.WrappedSelect=c.default},11:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var i=n(799),r=n(883),o=function(){function e(e){var t=e.element,n=e.type,i=e.classNames,r=e.preventPaste;this.element=t,this.type=n,this.classNames=i,this.preventPaste=r,this.isFocussed=this.element.isEqualNode(document.activeElement),this.isDisabled=t.disabled,this._onPaste=this._onPaste.bind(this),this._onInput=this._onInput.bind(this),this._onFocus=this._onFocus.bind(this),this._onBlur=this._onBlur.bind(this)}return Object.defineProperty(e.prototype,"placeholder",{set:function(e){this.element.placeholder=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"value",{get:function(){return(0,i.sanitise)(this.element.value)},set:function(e){this.element.value=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"rawValue",{get:function(){return this.element.value},enumerable:!1,configurable:!0}),e.prototype.addEventListeners=function(){this.element.addEventListener("paste",this._onPaste),this.element.addEventListener("input",this._onInput,{passive:!0}),this.element.addEventListener("focus",this._onFocus,{passive:!0}),this.element.addEventListener("blur",this._onBlur,{passive:!0})},e.prototype.removeEventListeners=function(){this.element.removeEventListener("input",this._onInput),this.element.removeEventListener("paste",this._onPaste),this.element.removeEventListener("focus",this._onFocus),this.element.removeEventListener("blur",this._onBlur)},e.prototype.enable=function(){this.element.removeAttribute("disabled"),this.isDisabled=!1},e.prototype.disable=function(){this.element.setAttribute("disabled",""),this.isDisabled=!0},e.prototype.focus=function(){this.isFocussed||this.element.focus()},e.prototype.blur=function(){this.isFocussed&&this.element.blur()},e.prototype.clear=function(e){return void 0===e&&(e=!0),this.element.value&&(this.element.value=""),e&&this.setWidth(),this},e.prototype.setWidth=function(){var e=this.element,t=e.style,n=e.value,i=e.placeholder;t.minWidth="".concat(i.length+1,"ch"),t.width="".concat(n.length+1,"ch")},e.prototype.setActiveDescendant=function(e){this.element.setAttribute("aria-activedescendant",e)},e.prototype.removeActiveDescendant=function(){this.element.removeAttribute("aria-activedescendant")},e.prototype._onInput=function(){this.type!==r.SELECT_ONE_TYPE&&this.setWidth()},e.prototype._onPaste=function(e){this.preventPaste&&e.preventDefault()},e.prototype._onFocus=function(){this.isFocussed=!0},e.prototype._onBlur=function(){this.isFocussed=!1},e}();t.default=o},624:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var i=n(883),r=function(){function e(e){var t=e.element;this.element=t,this.scrollPos=this.element.scrollTop,this.height=this.element.offsetHeight}return e.prototype.clear=function(){this.element.innerHTML=""},e.prototype.append=function(e){this.element.appendChild(e)},e.prototype.getChild=function(e){return this.element.querySelector(e)},e.prototype.hasChildren=function(){return this.element.hasChildNodes()},e.prototype.scrollToTop=function(){this.element.scrollTop=0},e.prototype.scrollToChildElement=function(e,t){var n=this;if(e){var i=this.element.offsetHeight,r=this.element.scrollTop+i,o=e.offsetHeight,s=e.offsetTop+o,a=t>0?this.element.scrollTop+s-r:e.offsetTop;requestAnimationFrame((function(){n._animateScroll(a,t)}))}},e.prototype._scrollDown=function(e,t,n){var i=(n-e)/t,r=i>1?i:1;this.element.scrollTop=e+r},e.prototype._scrollUp=function(e,t,n){var i=(e-n)/t,r=i>1?i:1;this.element.scrollTop=e-r},e.prototype._animateScroll=function(e,t){var n=this,r=i.SCROLLING_SPEED,o=this.element.scrollTop,s=!1;t>0?(this._scrollDown(o,r,e),o<e&&(s=!0)):(this._scrollUp(o,r,e),o>e&&(s=!0)),s&&requestAnimationFrame((function(){n._animateScroll(e,t)}))},e}();t.default=r}
vendor: 4,195 bytes, line 117
117,730:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var i=n(799),r=function(){function e(e){var t=e.element,n=e.classNames;if(this.element=t,this.classNames=n,!(t instanceof HTMLInputElement||t instanceof HTMLSelectElement))throw new TypeError("Invalid element passed");this.isDisabled=!1}return Object.defineProperty(e.prototype,"isActive",{get:function(){return"active"===this.element.dataset.choice},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"dir",{get:function(){return this.element.dir},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"value",{get:function(){return this.element.value},set:function(e){this.element.value=e},enumerable:!1,configurable:!0}),e.prototype.conceal=function(){this.element.classList.add(this.classNames.input),this.element.hidden=!0,this.element.tabIndex=-1;var e=this.element.getAttribute("style");e&&this.element.setAttribute("data-choice-orig-style",e),this.element.setAttribute("data-choice","active")},e.prototype.reveal=function(){this.element.classList.remove(this.classNames.input),this.element.hidden=!1,this.element.removeAttribute("tabindex");var e=this.element.getAttribute("data-choice-orig-style");e?(this.element.removeAttribute("data-choice-orig-style"),this.element.setAttribute("style",e)):this.element.removeAttribute("style"),this.element.removeAttribute("data-choice"),this.element.value=this.element.value},e.prototype.enable=function(){this.element.removeAttribute("disabled"),this.element.disabled=!1,this.isDisabled=!1},e.prototype.disable=function(){this.element.setAttribute("disabled",""),this.element.disabled=!0,this.isDisabled=!0},e.prototype.triggerEvent=function(e,t){(0,i.dispatchEvent)(this.element,e,t)},e}();t.default=r},541:function(e,t,n){var i,r=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var s=function(e){function t(t){var n=t.element,i=t.classNames,r=t.delimiter,o=e.call(this,{element:n,classNames:i})||this;return o.delimiter=r,o}return r(t,e),Object.defineProperty(t.prototype,"value",{get:function(){return this.element.value},set:function(e){this.element.setAttribute("value",e),this.element.value=e},enumerable:!1,configurable:!0}),t}(o(n(730)).default);t.default=s},982:function(e,t,n){var i,r=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var s=function(e){function t(t){var n=t.element,i=t.classNames,r=t.template,o=e.call(this,{element:n,classNames:i})||this;return o.template=r,o}return r(t,e),Object.defineProperty(t.prototype,"placeholderOption",{get:function(){return this.element.querySelector('option[value=""]')||this.element.querySelector("option[placeholder]")},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"optionGroups",{get:function(){return Array.from(this.element.getElementsByTagName("OPTGROUP"))},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"options",{get:function(){return Array.from(this.element.options)},set:function(e){var t=this,n=document.createDocumentFragment();e.forEach((function(e){return i=e,r=t.template(i),void n.appendChild(r);var i,r})),this.appendDocFragment(n)}
vendor: 4,182 bytes, line 117
117,enumerable:!1,configurable:!0}),t.prototype.appendDocFragment=function(e){this.element.innerHTML="",this.element.appendChild(e)},t}(o(n(730)).default);t.default=s},883:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.SCROLLING_SPEED=t.SELECT_MULTIPLE_TYPE=t.SELECT_ONE_TYPE=t.TEXT_TYPE=t.KEY_CODES=t.ACTION_TYPES=t.EVENTS=void 0,t.EVENTS={showDropdown:"showDropdown",hideDropdown:"hideDropdown",change:"change",choice:"choice",search:"search",addItem:"addItem",removeItem:"removeItem",highlightItem:"highlightItem",highlightChoice:"highlightChoice",unhighlightItem:"unhighlightItem"},t.ACTION_TYPES={ADD_CHOICE:"ADD_CHOICE",FILTER_CHOICES:"FILTER_CHOICES",ACTIVATE_CHOICES:"ACTIVATE_CHOICES",CLEAR_CHOICES:"CLEAR_CHOICES",ADD_GROUP:"ADD_GROUP",ADD_ITEM:"ADD_ITEM",REMOVE_ITEM:"REMOVE_ITEM",HIGHLIGHT_ITEM:"HIGHLIGHT_ITEM",CLEAR_ALL:"CLEAR_ALL",RESET_TO:"RESET_TO",SET_IS_LOADING:"SET_IS_LOADING"},t.KEY_CODES={BACK_KEY:46,DELETE_KEY:8,ENTER_KEY:13,A_KEY:65,ESC_KEY:27,UP_KEY:38,DOWN_KEY:40,PAGE_UP_KEY:33,PAGE_DOWN_KEY:34},t.TEXT_TYPE="text",t.SELECT_ONE_TYPE="select-one",t.SELECT_MULTIPLE_TYPE="select-multiple",t.SCROLLING_SPEED=4},789:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.DEFAULT_CONFIG=t.DEFAULT_CLASSNAMES=void 0;var i=n(799);t.DEFAULT_CLASSNAMES={containerOuter:"choices",containerInner:"choices__inner",input:"choices__input",inputCloned:"choices__input--cloned",list:"choices__list",listItems:"choices__list--multiple",listSingle:"choices__list--single",listDropdown:"choices__list--dropdown",item:"choices__item",itemSelectable:"choices__item--selectable",itemDisabled:"choices__item--disabled",itemChoice:"choices__item--choice",placeholder:"choices__placeholder",group:"choices__group",groupHeading:"choices__heading",button:"choices__button",activeState:"is-active",focusState:"is-focused",openState:"is-open",disabledState:"is-disabled",highlightedState:"is-highlighted",selectedState:"is-selected",flippedState:"is-flipped",loadingState:"is-loading",noResults:"has-no-results",noChoices:"has-no-choices"},t.DEFAULT_CONFIG={items:[],choices:[],silent:!1,renderChoiceLimit:-1,maxItemCount:-1,addItems:!0,addItemFilter:null,removeItems:!0,removeItemButton:!1,editItems:!1,allowHTML:!0,duplicateItemsAllowed:!0,delimiter:",",paste:!0,searchEnabled:!0,searchChoices:!0,searchFloor:1,searchResultLimit:4,searchFields:["label","value"],position:"auto",resetScrollPosition:!0,shouldSort:!0,shouldSortItems:!1,sorter:i.sortByAlpha,placeholder:!0,placeholderValue:null,searchPlaceholderValue:null,prependValue:null,appendValue:null,renderSelectedChoices:"auto",loadingText:"Loading...",noResultsText:"No results found",noChoicesText:"No choices to choose from",itemSelectText:"Press to select",uniqueItemText:"Only unique values can be added",customAddItemText:"Only values matching specific conditions can be added",addItemText:function(e){return'Press Enter to add <b>"'.concat((0,i.sanitise)(e),'"</b>')},maxItemText:function(e){return"Only ".concat(e," values can be added")},valueComparer:function(e,t){return e===t},fuseOptions:{includeScore:!0},labelId:"",callbackOnInit:null,callbackOnCreateTemplates:null,classNames:t.DEFAULT_CLASSNAMES}},18:function(e,t){Object.defineProperty(t,"__esModule",{value:!0})},978:function(e,t){Object.defineProperty(t,"__esModule",{value:!0})},948:function(e,t){Object.defineProperty(t,"__esModule",{value:!0})},359:function(e,t){Object.defineProperty(t,"__esModule",{value:!0})},285:function(e,t){Object.defineProperty(t,"__esModule",{value:!0})},533:function(e,t){Object.defineProperty(t,"__esModule",{value:!0})},187:function(e,t,n){var i=this&&this.__createBinding||(Object.create?function(e,t,n,i){void 0===i&&(i=n),Object.defineProperty(e,i,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,i){void 0===i&&(i=n),e[i]=t[n]}),r=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||i(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),r(n(18),t),r(n(978),t),r(n(948),t),r(n(359),t),r(n(285),t),r(n(533),t),r(n(287),t),r(n(132),t),r(n(837),t),r(n(598),t),r(n(369),t),r(n(37),t),r(n(47),t),r(n(923),t),r(n(876),t)}
vendor: 12,954 bytes, line 117
117,287:function(e,t){Object.defineProperty(t,"__esModule",{value:!0})},132:function(e,t){Object.defineProperty(t,"__esModule",{value:!0})},837:function(e,t){Object.defineProperty(t,"__esModule",{value:!0})},598:function(e,t){Object.defineProperty(t,"__esModule",{value:!0})},37:function(e,t){Object.defineProperty(t,"__esModule",{value:!0})},369:function(e,t){Object.defineProperty(t,"__esModule",{value:!0})},47:function(e,t){Object.defineProperty(t,"__esModule",{value:!0})},923:function(e,t){Object.defineProperty(t,"__esModule",{value:!0})},876:function(e,t){Object.defineProperty(t,"__esModule",{value:!0})},799:function(e,t){var n;Object.defineProperty(t,"__esModule",{value:!0}),t.diff=t.cloneObject=t.existsInArray=t.dispatchEvent=t.sortByScore=t.sortByAlpha=t.strToEl=t.sanitise=t.isScrolledIntoView=t.getAdjacentEl=t.wrap=t.isType=t.getType=t.generateId=t.generateChars=t.getRandomNumber=void 0,t.getRandomNumber=function(e,t){return Math.floor(Math.random()*(t-e)+e)},t.generateChars=function(e){return Array.from({length:e},(function(){return(0,t.getRandomNumber)(0,36).toString(36)})).join("")},t.generateId=function(e,n){var i=e.id||e.name&&"".concat(e.name,"-").concat((0,t.generateChars)(2))||(0,t.generateChars)(4);return i=i.replace(/(:|\.|\[|\]|,)/g,""),"".concat(n,"-").concat(i)},t.getType=function(e){return Object.prototype.toString.call(e).slice(8,-1)},t.isType=function(e,n){return null!=n&&(0,t.getType)(n)===e},t.wrap=function(e,t){return void 0===t&&(t=document.createElement("div")),e.parentNode&&(e.nextSibling?e.parentNode.insertBefore(t,e.nextSibling):e.parentNode.appendChild(t)),t.appendChild(e)},t.getAdjacentEl=function(e,t,n){void 0===n&&(n=1);for(var i="".concat(n>0?"next":"previous","ElementSibling"),r=e[i];r;){if(r.matches(t))return r;r=r[i]}return r},t.isScrolledIntoView=function(e,t,n){return void 0===n&&(n=1),!!e&&(n>0?t.scrollTop+t.offsetHeight>=e.offsetTop+e.offsetHeight:e.offsetTop>=t.scrollTop)},t.sanitise=function(e){return"string"!=typeof e?e:e.replace(/&/g,"&amp;").replace(/>/g,"&gt;").replace(/</g,"&lt;").replace(/"/g,"&quot;")},t.strToEl=(n=document.createElement("div"),function(e){var t=e.trim();n.innerHTML=t;for(var i=n.children[0];n.firstChild;)n.removeChild(n.firstChild);return i}),t.sortByAlpha=function(e,t){var n=e.value,i=e.label,r=void 0===i?n:i,o=t.value,s=t.label,a=void 0===s?o:s;return r.localeCompare(a,[],{sensitivity:"base",ignorePunctuation:!0,numeric:!0})},t.sortByScore=function(e,t){var n=e.score,i=void 0===n?0:n,r=t.score;return i-(void 0===r?0:r)},t.dispatchEvent=function(e,t,n){void 0===n&&(n=null);var i=new CustomEvent(t,{detail:n,bubbles:!0,cancelable:!0});return e.dispatchEvent(i)},t.existsInArray=function(e,t,n){return void 0===n&&(n="value"),e.some((function(e){return"string"==typeof t?e[n]===t.trim():e[n]===t}))},t.cloneObject=function(e){return JSON.parse(JSON.stringify(e))},t.diff=function(e,t){var n=Object.keys(e).sort(),i=Object.keys(t).sort();return n.filter((function(e){return i.indexOf(e)<0}))}},273:function(e,t){var n=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var i,r=0,o=t.length;r<o;r++)!i&&r in t||(i||(i=Array.prototype.slice.call(t,0,r)),i[r]=t[r]);return e.concat(i||Array.prototype.slice.call(t))};Object.defineProperty(t,"__esModule",{value:!0}),t.defaultState=void 0,t.defaultState=[],t.default=function(e,i){switch(void 0===e&&(e=t.defaultState),void 0===i&&(i={}),i.type){case"ADD_CHOICE":var r=i,o={id:r.id,elementId:r.elementId,groupId:r.groupId,value:r.value,label:r.label||r.value,disabled:r.disabled||!1,selected:!1,active:!0,score:9999,customProperties:r.customProperties,placeholder:r.placeholder||!1};return n(n([],e,!0),[o],!1);case"ADD_ITEM":var s=i;return s.choiceId>-1?e.map((function(e){var t=e;return t.id===parseInt("".concat(s.choiceId),10)&&(t.selected=!0),t})):e;case"REMOVE_ITEM":var a=i;return a.choiceId&&a.choiceId>-1?e.map((function(e){var t=e;return t.id===parseInt("".concat(a.choiceId),10)&&(t.selected=!1),t})):e;case"FILTER_CHOICES":var l=i;return e.map((function(e){var t=e;return t.active=l.results.some((function(e){var n=e.item,i=e.score;return n.id===t.id&&(t.score=i,!0)})),t}));case"ACTIVATE_CHOICES":var c=i;return e.map((function(e){var t=e;return t.active=c.active,t}));case"CLEAR_CHOICES":return t.defaultState;default:return e}}},871:function(e,t){var n=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var i,r=0,o=t.length;r<o;r++)!i&&r in t||(i||(i=Array.prototype.slice.call(t,0,r)),i[r]=t[r]);return e.concat(i||Array.prototype.slice.call(t))};Object.defineProperty(t,"__esModule",{value:!0}),t.defaultState=void 0,t.defaultState=[],t.default=function(e,i){switch(void 0===e&&(e=t.defaultState),void 0===i&&(i={}),i.type){case"ADD_GROUP":var r=i;return n(n([],e,!0),[{id:r.id,value:r.value,active:r.active,disabled:r.disabled}],!1);case"CLEAR_CHOICES":return[];default:return e}}},655:function(e,t,n){var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.defaultState=void 0;var r=n(857),o=i(n(52)),s=i(n(871)),a=i(n(273)),l=i(n(502)),c=n(799);t.defaultState={groups:[],items:[],choices:[],loading:!1};var u=(0,r.combineReducers)({items:o.default,groups:s.default,choices:a.default,loading:l.default});t.default=function(e,n){var i=e;if("CLEAR_ALL"===n.type)i=t.defaultState;else if("RESET_TO"===n.type)return(0,c.cloneObject)(n.state);return u(i,n)}},52:function(e,t){var n=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var i,r=0,o=t.length;r<o;r++)!i&&r in t||(i||(i=Array.prototype.slice.call(t,0,r)),i[r]=t[r]);return e.concat(i||Array.prototype.slice.call(t))};Object.defineProperty(t,"__esModule",{value:!0}),t.defaultState=void 0,t.defaultState=[],t.default=function(e,i){switch(void 0===e&&(e=t.defaultState),void 0===i&&(i={}),i.type){case"ADD_ITEM":var r=i;return n(n([],e,!0),[{id:r.id,choiceId:r.choiceId,groupId:r.groupId,value:r.value,label:r.label,active:!0,highlighted:!1,customProperties:r.customProperties,placeholder:r.placeholder||!1,keyCode:null}],!1).map((function(e){var t=e;return t.highlighted=!1,t}));case"REMOVE_ITEM":return e.map((function(e){var t=e;return t.id===i.id&&(t.active=!1),t}));case"HIGHLIGHT_ITEM":var o=i;return e.map((function(e){var t=e;return t.id===o.id&&(t.highlighted=o.highlighted),t}));default:return e}}},502:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.defaultState=void 0,t.defaultState=!1,t.default=function(e,n){return void 0===e&&(e=t.defaultState),void 0===n&&(n={}),"SET_IS_LOADING"===n.type?n.isLoading:e}},744:function(e,t,n){var i=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var i,r=0,o=t.length;r<o;r++)!i&&r in t||(i||(i=Array.prototype.slice.call(t,0,r)),i[r]=t[r]);return e.concat(i||Array.prototype.slice.call(t))},r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=n(857),s=r(n(655)),a=function(){function e(){this._store=(0,o.createStore)(s.default,window.__REDUX_DEVTOOLS_EXTENSION__&&window.__REDUX_DEVTOOLS_EXTENSION__())}return e.prototype.subscribe=function(e){this._store.subscribe(e)},e.prototype.dispatch=function(e){this._store.dispatch(e)},Object.defineProperty(e.prototype,"state",{get:function(){return this._store.getState()},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"items",{get:function(){return this.state.items},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"activeItems",{get:function(){return this.items.filter((function(e){return!0===e.active}))},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"highlightedActiveItems",{get:function(){return this.items.filter((function(e){return e.active&&e.highlighted}))},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"choices",{get:function(){return this.state.choices},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"activeChoices",{get:function(){return this.choices.filter((function(e){return!0===e.active}))},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"selectableChoices",{get:function(){return this.choices.filter((function(e){return!0!==e.disabled}))},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"searchableChoices",{get:function(){return this.selectableChoices.filter((function(e){return!0!==e.placeholder}))},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"placeholderChoice",{get:function(){return i([],this.choices,!0).reverse().find((function(e){return!0===e.placeholder}))},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"groups",{get:function(){return this.state.groups},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"activeGroups",{get:function(){var e=this.groups,t=this.choices;return e.filter((function(e){var n=!0===e.active&&!1===e.disabled,i=t.some((function(e){return!0===e.active&&!1===e.disabled}));return n&&i}),[])},enumerable:!1,configurable:!0}),e.prototype.isLoading=function(){return this.state.loading},e.prototype.getChoiceById=function(e){return this.activeChoices.find((function(t){return t.id===parseInt(e,10)}))},e.prototype.getGroupById=function(e){return this.groups.find((function(t){return t.id===e}))},e}();t.default=a},686:function(e,t){Object.defineProperty(t,"__esModule",{value:!0});var n={containerOuter:function(e,t,n,i,r,o,s){var a=e.classNames.containerOuter,l=Object.assign(document.createElement("div"),{className:a});return l.dataset.type=o,t&&(l.dir=t),i&&(l.tabIndex=0),n&&(l.setAttribute("role",r?"combobox":"listbox"),r&&l.setAttribute("aria-autocomplete","list")),l.setAttribute("aria-haspopup","true"),l.setAttribute("aria-expanded","false"),s&&l.setAttribute("aria-labeledby",s),l},containerInner:function(e){var t=e.classNames.containerInner;return Object.assign(document.createElement("div"),{className:t})},itemList:function(e,t){var n=e.classNames,i=n.list,r=n.listSingle,o=n.listItems;return Object.assign(document.createElement("div"),{className:"".concat(i," ").concat(t?r:o)})},placeholder:function(e,t){var n,i=e.allowHTML,r=e.classNames.placeholder;return Object.assign(document.createElement("div"),((n={className:r})[i?"innerHTML":"innerText"]=t,n))},item:function(e,t,n){var i,r,o=e.allowHTML,s=e.classNames,a=s.item,l=s.button,c=s.highlightedState,u=s.itemSelectable,d=s.placeholder,p=t.id,h=t.value,f=t.label,v=t.customProperties,m=t.active,g=t.disabled,y=t.highlighted,b=t.placeholder,_=Object.assign(document.createElement("div"),((i={className:a})[o?"innerHTML":"innerText"]=f,i));if(Object.assign(_.dataset,{item:"",id:p,value:h,customProperties:v}),m&&_.setAttribute("aria-selected","true"),g&&_.setAttribute("aria-disabled","true"),b&&_.classList.add(d),_.classList.add(y?c:u),n){g&&_.classList.remove(u),_.dataset.deletable="";var E="Remove item",w=Object.assign(document.createElement("button"),((r={type:"button",className:l})[o?"innerHTML":"innerText"]=E,r));w.setAttribute("aria-label","".concat(E,": '").concat(h,"'")),w.dataset.button="",_.appendChild(w)}return _},choiceList:function(e,t){var n=e.classNames.list,i=Object.assign(document.createElement("div"),{className:n});return t||i.setAttribute("aria-multiselectable","true"),i.setAttribute("role","listbox"),i},choiceGroup:function(e,t){var n,i=e.allowHTML,r=e.classNames,o=r.group,s=r.groupHeading,a=r.itemDisabled,l=t.id,c=t.value,u=t.disabled,d=Object.assign(document.createElement("div"),{className:"".concat(o," ").concat(u?a:"")});return d.setAttribute("role","group"),Object.assign(d.dataset,{group:"",id:l,value:c}),u&&d.setAttribute("aria-disabled","true"),d.appendChild(Object.assign(document.createElement("div"),((n={className:s})[i?"innerHTML":"innerText"]=c,n))),d},choice:function(e,t,n){var i,r=e.allowHTML,o=e.classNames,s=o.item,a=o.itemChoice,l=o.itemSelectable,c=o.selectedState,u=o.itemDisabled,d=o.placeholder,p=t.id,h=t.value,f=t.label,v=t.groupId,m=t.elementId,g=t.disabled,y=t.selected,b=t.placeholder,_=Object.assign(document.createElement("div"),((i={id:m})[r?"innerHTML":"innerText"]=f,i.className="".concat(s," ").concat(a),i));return y&&_.classList.add(c),b&&_.classList.add(d),_.setAttribute("role",v&&v>0?"treeitem":"option"),Object.assign(_.dataset,{choice:"",id:p,value:h,selectText:n}),g?(_.classList.add(u),_.dataset.choiceDisabled="",_.setAttribute("aria-disabled","true")):(_.classList.add(l),_.dataset.choiceSelectable=""),_},input:function(e,t){var n=e.classNames,i=n.input,r=n.inputCloned,o=Object.assign(document.createElement("input"),{type:"search",name:"search_terms",className:"".concat(i," ").concat(r),autocomplete:"off",autocapitalize:"off",spellcheck:!1});return o.setAttribute("role","textbox"),o.setAttribute("aria-autocomplete","list"),o.setAttribute("aria-label",t),o},dropdown:function(e){var t=e.classNames,n=t.list,i=t.listDropdown,r=document.createElement("div");
vendor: 9,291 bytes, line 117
117return r.classList.add(n,i),r.setAttribute("aria-expanded","false"),r},notice:function(e,t,n){var i,r=e.allowHTML,o=e.classNames,s=o.item,a=o.itemChoice,l=o.noResults,c=o.noChoices;void 0===n&&(n="");var u=[s,a];return"no-choices"===n?u.push(c):"no-results"===n&&u.push(l),Object.assign(document.createElement("div"),((i={})[r?"innerHTML":"innerText"]=t,i.className=u.join(" "),i))},option:function(e){var t=e.label,n=e.value,i=e.customProperties,r=e.active,o=e.disabled,s=new Option(t,n,!1,r);return i&&(s.dataset.customProperties="".concat(i)),s.disabled=!!o,s}};t.default=n},996:function(e){var t=function(e){return function(e){return!!e&&"object"==typeof e}(e)&&!function(e){var t=Object.prototype.toString.call(e);return"[object RegExp]"===t||"[object Date]"===t||function(e){return e.$$typeof===n}(e)}(e)},n="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103;function i(e,t){return!1!==t.clone&&t.isMergeableObject(e)?a((n=e,Array.isArray(n)?[]:{}),e,t):e;var n}function r(e,t,n){return e.concat(t).map((function(e){return i(e,n)}))}function o(e){return Object.keys(e).concat(function(e){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(e).filter((function(t){return e.propertyIsEnumerable(t)})):[]}(e))}function s(e,t){try{return t in e}catch(e){return!1}}function a(e,n,l){(l=l||{}).arrayMerge=l.arrayMerge||r,l.isMergeableObject=l.isMergeableObject||t,l.cloneUnlessOtherwiseSpecified=i;var c=Array.isArray(n);return c===Array.isArray(e)?c?l.arrayMerge(e,n,l):function(e,t,n){var r={};return n.isMergeableObject(e)&&o(e).forEach((function(t){r[t]=i(e[t],n)})),o(t).forEach((function(o){(function(e,t){return s(e,t)&&!(Object.hasOwnProperty.call(e,t)&&Object.propertyIsEnumerable.call(e,t))})(e,o)||(s(e,o)&&n.isMergeableObject(t[o])?r[o]=function(e,t){if(!t.customMerge)return a;var n=t.customMerge(e);return"function"==typeof n?n:a}(o,n)(e[o],t[o],n):r[o]=i(t[o],n))})),r}(e,n,l):i(n,l)}a.all=function(e,t){if(!Array.isArray(e))throw new Error("first argument should be an array");return e.reduce((function(e,n){return a(e,n,t)}),{})};var l=a;e.exports=l},221:function(e,t,n){function i(e){return Array.isArray?Array.isArray(e):"[object Array]"===c(e)}function r(e){return"string"==typeof e}function o(e){return"number"==typeof e}function s(e){return"object"==typeof e}function a(e){return null!=e}function l(e){return!e.trim().length}function c(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":Object.prototype.toString.call(e)}n.r(t),n.d(t,{default:function(){return F}});const u=Object.prototype.hasOwnProperty;class d{constructor(e){this._keys=[],this._keyMap={};let t=0;e.forEach((e=>{let n=p(e);t+=n.weight,this._keys.push(n),this._keyMap[n.id]=n,t+=n.weight})),this._keys.forEach((e=>{e.weight/=t}))}get(e){return this._keyMap[e]}keys(){return this._keys}toJSON(){return JSON.stringify(this._keys)}}function p(e){let t=null,n=null,o=null,s=1;if(r(e)||i(e))o=e,t=h(e),n=f(e);else{if(!u.call(e,"name"))throw new Error("Missing name property in key");const i=e.name;if(o=i,u.call(e,"weight")&&(s=e.weight,s<=0))throw new Error((e=>`Property 'weight' in key '${e}' must be a positive integer`)(i));t=h(i),n=f(i)}return{path:t,id:n,weight:s,src:o}}function h(e){return i(e)?e:e.split(".")}function f(e){return i(e)?e.join("."):e}var v={isCaseSensitive:!1,includeScore:!1,keys:[],shouldSort:!0,sortFn:(e,t)=>e.score===t.score?e.idx<t.idx?-1:1:e.score<t.score?-1:1,includeMatches:!1,findAllMatches:!1,minMatchCharLength:1,location:0,threshold:.6,distance:100,useExtendedSearch:!1,getFn:function(e,t){let n=[],l=!1;const u=(e,t,d)=>{if(a(e))if(t[d]){const p=e[t[d]];if(!a(p))return;if(d===t.length-1&&(r(p)||o(p)||function(e){return!0===e||!1===e||function(e){return s(e)&&null!==e}(e)&&"[object Boolean]"==c(e)}(p)))n.push(function(e){return null==e?"":function(e){if("string"==typeof e)return e;let t=e+"";return"0"==t&&1/e==-1/0?"-0":t}(e)}(p));else if(i(p)){l=!0;for(let e=0,n=p.length;e<n;e+=1)u(p[e],t,d+1)}else t.length&&u(p,t,d+1)}else n.push(e)};return u(e,r(t)?t.split("."):t,0),l?n:n[0]},ignoreLocation:!1,ignoreFieldNorm:!1,fieldNormWeight:1};const m=/[^ ]+/g;class g{constructor({getFn:e=v.getFn,fieldNormWeight:t=v.fieldNormWeight}={}){this.norm=function(e=1,t=3){const n=new Map,i=Math.pow(10,t);return{get(t){const r=t.match(m).length;if(n.has(r))return n.get(r);const o=1/Math.pow(r,.5*e),s=parseFloat(Math.round(o*i)/i);return n.set(r,s),s},clear(){n.clear()}}}(t,3),this.getFn=e,this.isCreated=!1,this.setIndexRecords()}setSources(e=[]){this.docs=e}setIndexRecords(e=[]){this.records=e}setKeys(e=[]){this.keys=e,this._keysMap={},e.forEach(((e,t)=>{this._keysMap[e.id]=t}))}create(){!this.isCreated&&this.docs.length&&(this.isCreated=!0,r(this.docs[0])?this.docs.forEach(((e,t)=>{this._addString(e,t)})):this.docs.forEach(((e,t)=>{this._addObject(e,t)})),this.norm.clear())}add(e){const t=this.size();r(e)?this._addString(e,t):this._addObject(e,t)}removeAt(e){this.records.splice(e,1);for(let t=e,n=this.size();t<n;t+=1)this.records[t].i-=1}getValueForItemAtKeyId(e,t){return e[this._keysMap[t]]}size(){return this.records.length}_addString(e,t){if(!a(e)||l(e))return;let n={v:e,i:t,n:this.norm.get(e)};this.records.push(n)}_addObject(e,t){let n={i:t,$:{}};this.keys.forEach(((t,o)=>{let s=this.getFn(e,t.path);if(a(s))if(i(s)){let e=[];const t=[{nestedArrIndex:-1,value:s}];for(;t.length;){const{nestedArrIndex:n,value:o}=t.pop();if(a(o))if(r(o)&&!l(o)){let t={v:o,i:n,n:this.norm.get(o)};e.push(t)}else i(o)&&o.forEach(((e,n)=>{t.push({nestedArrIndex:n,value:e})}))}n.$[o]=e}else if(!l(s)){let e={v:s,n:this.norm.get(s)};n.$[o]=e}})),this.records.push(n)}toJSON(){return{keys:this.keys,records:this.records}}}function y(e,t,{getFn:n=v.getFn,fieldNormWeight:i=v.fieldNormWeight}={}){const r=new g({getFn:n,fieldNormWeight:i});return r.setKeys(e.map(p)),r.setSources(t),r.create(),r}function b(e,{errors:t=0,currentLocation:n=0,expectedLocation:i=0,distance:r=v.distance,ignoreLocation:o=v.ignoreLocation}={}){const s=t/e.length;if(o)return s;const a=Math.abs(i-n);return r?s+a/r:a?1:s}const _=32;function E(e){let t={};for(let n=0,i=e.length;n<i;n+=1){const r=e.charAt(n);t[r]=(t[r]||0)|1<<i-n-1}return t}class w{constructor(e,{location:t=v.location,threshold:n=v.threshold,distance:i=v.distance,includeMatches:r=v.includeMatches,findAllMatches:o=v.findAllMatches,minMatchCharLength:s=v.minMatchCharLength,isCaseSensitive:a=v.isCaseSensitive,ignoreLocation:l=v.ignoreLocation}={}){if(this.options={location:t,threshold:n,distance:i,includeMatches:r,findAllMatches:o,minMatchCharLength:s,isCaseSensitive:a,ignoreLocation:l},this.pattern=a?e:e.toLowerCase(),this.chunks=[],!this.pattern.length)return;const c=(e,t)=>{this.chunks.push({pattern:e,alphabet:E(e),startIndex:t})},u=this.pattern.length;if(u>_){let e=0;const t=u%_,n=u-t;for(;e<n;)c(this.pattern.substr(e,_),e),e+=_;if(t){const e=u-_;c(this.pattern.substr(e),e)}}else c(this.pattern,0)}searchIn(e){const{isCaseSensitive:t,includeMatches:n}=this.options;if(t||(e=e.toLowerCase()),this.pattern===e){let t={isMatch:!0,score:0};return n&&(t.indices=[[0,e.length-1]]),t}const{location:i,distance:r,threshold:o,findAllMatches:s,minMatchCharLength:a,ignoreLocation:l}=this.options;let c=[],u=0,d=!1;this.chunks.forEach((({pattern:t,alphabet:p,startIndex:h})=>{const{isMatch:f,score:m,indices:g}=function(e,t,n,{location:i=v.location,distance:r=v.distance,threshold:o=v.threshold,findAllMatches:s=v.findAllMatches,minMatchCharLength:a=v.minMatchCharLength,includeMatches:l=v.includeMatches,ignoreLocation:c=v.ignoreLocation}={}){if(t.length>_)throw new Error("Pattern length exceeds max of 32.");const u=t.length,d=e.length,p=Math.max(0,Math.min(i,d));let h=o,f=p;const m=a>1||l,g=m?Array(d):[];let y;for(;(y=e.indexOf(t,f))>-1;){let e=b(t,{currentLocation:y,expectedLocation:p,distance:r,ignoreLocation:c});if(h=Math.min(e,h),f=y+u,m){let e=0;for(;e<u;)g[y+e]=1,e+=1}}f=-1;let E=[],w=1,C=u+d;const S=1<<u-1;for(let i=0;i<u;i+=1){let o=0,a=C;for(;o<a;)b(t,{errors:i,currentLocation:p+a,expectedLocation:p,distance:r,ignoreLocation:c})<=h?o=a:C=a,a=Math.floor((C-o)/2+o);C=a;let l=Math.max(1,p-a+1),v=s?d:Math.min(p+a,d)+u,y=Array(v+2);y[v+1]=(1<<i)-1;for(let o=v;o>=l;o-=1){let s=o-1,a=n[e.charAt(s)];if(m&&(g[s]=+!!a),y[o]=(y[o+1]<<1|1)&a,i&&(y[o]|=(E[o+1]|E[o])<<1|1|E[o+1]),y[o]&S&&(w=b(t,{errors:i,currentLocation:s,expectedLocation:p,distance:r,ignoreLocation:c}),w<=h)){if(h=w,f=s,f<=p)break;l=Math.max(1,2*p-f)}}if(b(t,{errors:i+1,currentLocation:p,expectedLocation:p,distance:r,ignoreLocation:c})>h)break;E=y}const T={isMatch:f>=0,score:Math.max(.001,w)};if(m){const e=function(e=[],t=v.minMatchCharLength){let n=[],i=-1,r=-1,o=0;for(let s=e.length;o<s;o+=1){let s=e[o];s&&-1===i?i=o:s||-1===i||(r=o-1,r-i+1>=t&&n.push([i,r]),i=-1)}return e[o-1]&&o-i>=t&&n.push([i,o-1]),n}(g,a);e.length?l&&(T.indices=e):T.isMatch=!1}return T}(e,t,p,{location:i+h,distance:r,threshold:o,findAllMatches:s,minMatchCharLength:a,includeMatches:n,ignoreLocation:l});f&&(d=!0),u+=m,f&&g&&(c=[...c,...g])}));let p={isMatch:d,score:d?u/this.chunks.length:1};return d&&n&&(p.indices=c),p}}class C{constructor(e){this.pattern=e}static isMultiMatch(e){return S(e,this.multiRegex)}static isSingleMatch(e){return S(e,this.singleRegex)}search(){}}function S(e,t){const n=e.match(t);
vendor: 4,163 bytes, line 117
117return n?n[1]:null}class T extends C{constructor(e,{location:t=v.location,threshold:n=v.threshold,distance:i=v.distance,includeMatches:r=v.includeMatches,findAllMatches:o=v.findAllMatches,minMatchCharLength:s=v.minMatchCharLength,isCaseSensitive:a=v.isCaseSensitive,ignoreLocation:l=v.ignoreLocation}={}){super(e),this._bitapSearch=new w(e,{location:t,threshold:n,distance:i,includeMatches:r,findAllMatches:o,minMatchCharLength:s,isCaseSensitive:a,ignoreLocation:l})}static get type(){return"fuzzy"}static get multiRegex(){return/^"(.*)"$/}static get singleRegex(){return/^(.*)$/}search(e){return this._bitapSearch.searchIn(e)}}class x extends C{constructor(e){super(e)}static get type(){return"include"}static get multiRegex(){return/^'"(.*)"$/}static get singleRegex(){return/^'(.*)$/}search(e){let t,n=0;const i=[],r=this.pattern.length;for(;(t=e.indexOf(this.pattern,n))>-1;)n=t+r,i.push([t,n-1]);const o=!!i.length;return{isMatch:o,score:o?0:1,indices:i}}}const O=[class extends C{constructor(e){super(e)}static get type(){return"exact"}static get multiRegex(){return/^="(.*)"$/}static get singleRegex(){return/^=(.*)$/}search(e){const t=e===this.pattern;return{isMatch:t,score:t?0:1,indices:[0,this.pattern.length-1]}}},x,class extends C{constructor(e){super(e)}static get type(){return"prefix-exact"}static get multiRegex(){return/^\^"(.*)"$/}static get singleRegex(){return/^\^(.*)$/}search(e){const t=e.startsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,this.pattern.length-1]}}},class extends C{constructor(e){super(e)}static get type(){return"inverse-prefix-exact"}static get multiRegex(){return/^!\^"(.*)"$/}static get singleRegex(){return/^!\^(.*)$/}search(e){const t=!e.startsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,e.length-1]}}},class extends C{constructor(e){super(e)}static get type(){return"inverse-suffix-exact"}static get multiRegex(){return/^!"(.*)"\$$/}static get singleRegex(){return/^!(.*)\$$/}search(e){const t=!e.endsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,e.length-1]}}},class extends C{constructor(e){super(e)}static get type(){return"suffix-exact"}static get multiRegex(){return/^"(.*)"\$$/}static get singleRegex(){return/^(.*)\$$/}search(e){const t=e.endsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[e.length-this.pattern.length,e.length-1]}}},class extends C{constructor(e){super(e)}static get type(){return"inverse-exact"}static get multiRegex(){return/^!"(.*)"$/}static get singleRegex(){return/^!(.*)$/}search(e){const t=-1===e.indexOf(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,e.length-1]}}},T],L=O.length,A=/ +(?=([^\"]*\"[^\"]*\")*[^\"]*$)/,I=new Set([T.type,x.type]);const k=[];function M(e,t){for(let n=0,i=k.length;n<i;n+=1){let i=k[n];if(i.condition(e,t))return new i(e,t)}return new w(e,t)}const P="$and",D=e=>!(!e.$and&&!e.$or),N=e=>({[P]:Object.keys(e).map((t=>({[t]:e[t]})))});function $(e,t,{auto:n=!0}={}){const o=e=>{let a=Object.keys(e);const l=(e=>!!e.$path)(e);if(!l&&a.length>1&&!D(e))return o(N(e));if((e=>!i(e)&&s(e)&&!D(e))(e)){const i=l?e.$path:a[0],o=l?e.$val:e[i];if(!r(o))throw new Error((e=>`Invalid value for key ${e}`)(i));const s={keyId:f(i),pattern:o};return n&&(s.searcher=M(o,t)),s}let c={children:[],operator:a[0]};return a.forEach((t=>{const n=e[t];i(n)&&n.forEach((e=>{c.children.push(o(e))}))})),c};return D(e)||(e=N(e)),o(e)}function j(e,t){const n=e.matches;t.matches=[],a(n)&&n.forEach((e=>{if(!a(e.indices)||!e.indices.length)return;const{indices:n,value:i}=e;let r={indices:n,value:i};e.key&&(r.key=e.key.src),e.idx>-1&&(r.refIndex=e.idx),t.matches.push(r)}))}function R(e,t){t.score=e.score}class F{constructor(e,t={},n){this.options={...v,...t},this.options.useExtendedSearch,this._keyStore=new d(this.options.keys),this.setCollection(e,n)}setCollection(e,t){if(this._docs=e,t&&!(t instanceof g))throw new Error("Incorrect 'index' type");this._myIndex=t||y(this.options.keys,this._docs,{getFn:this.options.getFn,fieldNormWeight:this.options.fieldNormWeight})}add(e){a(e)&&(this._docs.push(e),this._myIndex.add(e))}remove(e=(()=>!1)){const t=[];for(let n=0,i=this._docs.length;n<i;n+=1){const r=this._docs[n];
vendor: 8,914 bytes, line 117
117e(r,n)&&(this.removeAt(n),n-=1,i-=1,t.push(r))}return t}removeAt(e){this._docs.splice(e,1),this._myIndex.removeAt(e)}getIndex(){return this._myIndex}search(e,{limit:t=-1}={}){const{includeMatches:n,includeScore:i,shouldSort:s,sortFn:a,ignoreFieldNorm:l}=this.options;let c=r(e)?r(this._docs[0])?this._searchStringList(e):this._searchObjectList(e):this._searchLogical(e);return function(e,{ignoreFieldNorm:t=v.ignoreFieldNorm}){e.forEach((e=>{let n=1;e.matches.forEach((({key:e,norm:i,score:r})=>{const o=e?e.weight:null;n*=Math.pow(0===r&&o?Number.EPSILON:r,(o||1)*(t?1:i))})),e.score=n}))}(c,{ignoreFieldNorm:l}),s&&c.sort(a),o(t)&&t>-1&&(c=c.slice(0,t)),function(e,t,{includeMatches:n=v.includeMatches,includeScore:i=v.includeScore}={}){const r=[];return n&&r.push(j),i&&r.push(R),e.map((e=>{const{idx:n}=e,i={item:t[n],refIndex:n};return r.length&&r.forEach((t=>{t(e,i)})),i}))}(c,this._docs,{includeMatches:n,includeScore:i})}_searchStringList(e){const t=M(e,this.options),{records:n}=this._myIndex,i=[];return n.forEach((({v:e,i:n,n:r})=>{if(!a(e))return;const{isMatch:o,score:s,indices:l}=t.searchIn(e);o&&i.push({item:e,idx:n,matches:[{score:s,value:e,norm:r,indices:l}]})})),i}_searchLogical(e){const t=$(e,this.options),n=(e,t,i)=>{if(!e.children){const{keyId:n,searcher:r}=e,o=this._findMatches({key:this._keyStore.get(n),value:this._myIndex.getValueForItemAtKeyId(t,n),searcher:r});return o&&o.length?[{idx:i,item:t,matches:o}]:[]}const r=[];for(let o=0,s=e.children.length;o<s;o+=1){const s=e.children[o],a=n(s,t,i);if(a.length)r.push(...a);else if(e.operator===P)return[]}return r},i=this._myIndex.records,r={},o=[];return i.forEach((({$:e,i})=>{if(a(e)){let s=n(t,e,i);s.length&&(r[i]||(r[i]={idx:i,item:e,matches:[]},o.push(r[i])),s.forEach((({matches:e})=>{r[i].matches.push(...e)})))}})),o}_searchObjectList(e){const t=M(e,this.options),{keys:n,records:i}=this._myIndex,r=[];return i.forEach((({$:e,i})=>{if(!a(e))return;let o=[];n.forEach(((n,i)=>{o.push(...this._findMatches({key:n,value:e[i],searcher:t}))})),o.length&&r.push({idx:i,item:e,matches:o})})),r}_findMatches({key:e,value:t,searcher:n}){if(!a(t))return[];let r=[];if(i(t))t.forEach((({v:t,i,n:o})=>{if(!a(t))return;const{isMatch:s,score:l,indices:c}=n.searchIn(t);s&&r.push({score:l,key:e,value:t,idx:i,norm:o,indices:c})}));else{const{v:i,n:o}=t,{isMatch:s,score:a,indices:l}=n.searchIn(i);s&&r.push({score:a,key:e,value:i,norm:o,indices:l})}return r}}F.version="6.5.3",F.createIndex=y,F.parseIndex=function(e,{getFn:t=v.getFn,fieldNormWeight:n=v.fieldNormWeight}={}){const{keys:i,records:r}=e,o=new g({getFn:t,fieldNormWeight:n});return o.setKeys(i),o.setIndexRecords(r),o},F.config=v,F.parseQuery=$,function(...e){k.push(...e)}(class{constructor(e,{isCaseSensitive:t=v.isCaseSensitive,includeMatches:n=v.includeMatches,minMatchCharLength:i=v.minMatchCharLength,ignoreLocation:r=v.ignoreLocation,findAllMatches:o=v.findAllMatches,location:s=v.location,threshold:a=v.threshold,distance:l=v.distance}={}){this.query=null,this.options={isCaseSensitive:t,includeMatches:n,minMatchCharLength:i,findAllMatches:o,ignoreLocation:r,location:s,threshold:a,distance:l},this.pattern=t?e:e.toLowerCase(),this.query=function(e,t={}){return e.split("|").map((e=>{let n=e.trim().split(A).filter((e=>e&&!!e.trim())),i=[];for(let e=0,r=n.length;e<r;e+=1){const r=n[e];let o=!1,s=-1;for(;!o&&++s<L;){const e=O[s];let n=e.isMultiMatch(r);n&&(i.push(new e(n,t)),o=!0)}if(!o)for(s=-1;++s<L;){const e=O[s];let n=e.isSingleMatch(r);if(n){i.push(new e(n,t));break}}}return i}))}(this.pattern,this.options)}static condition(e,t){return t.useExtendedSearch}searchIn(e){const t=this.query;if(!t)return{isMatch:!1,score:1};const{includeMatches:n,isCaseSensitive:i}=this.options;e=i?e:e.toLowerCase();let r=0,o=[],s=0;for(let i=0,a=t.length;i<a;i+=1){const a=t[i];o.length=0,r=0;for(let t=0,i=a.length;t<i;t+=1){const i=a[t],{isMatch:l,indices:c,score:u}=i.search(e);if(!l){s=0,r=0,o.length=0;break}if(r+=1,s+=u,n){const e=i.constructor.type;I.has(e)?o=[...o,...c]:o.push(c)}}if(r){let e={isMatch:!0,score:s/r};return n&&(e.indices=o),e}}return{isMatch:!1,score:1}}})},857:function(e,t,n){function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e){return"Minified Redux error #"+e+"; visit https://redux.js.org/Errors?code="+e+" for the full message or use the non-minified dev environment for full errors. "}n.r(t),n.d(t,{__DO_NOT_USE__ActionTypes:function(){return c},applyMiddleware:function(){return m},bindActionCreators:function(){return f},combineReducers:function(){return p},compose:function(){return v},createStore:function(){return d}});var a="function"==typeof Symbol&&Symbol.observable||"@@observable",l=function(){return Math.random().toString(36).substring(7).split("").join(".")},c={INIT:"@@redux/INIT"+l(),REPLACE:"@@redux/REPLACE"+l(),PROBE_UNKNOWN_ACTION:function(){return"@@redux/PROBE_UNKNOWN_ACTION"+l()}};function u(e){if("object"!=typeof e||null===e)return!1;for(var t=e;null!==Object.getPrototypeOf(t);)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t}function d(e,t,n){var i;if("function"==typeof t&&"function"==typeof n||"function"==typeof n&&"function"==typeof arguments[3])throw new Error(s(0));if("function"==typeof t&&void 0===n&&(n=t,t=void 0),void 0!==n){if("function"!=typeof n)throw new Error(s(1));return n(d)(e,t)}if("function"!=typeof e)throw new Error(s(2));var r=e,o=t,l=[],p=l,h=!1;function f(){p===l&&(p=l.slice())}function v(){if(h)throw new Error(s(3));return o}function m(e){if("function"!=typeof e)throw new Error(s(4));if(h)throw new Error(s(5));var t=!0;return f(),p.push(e),function(){if(t){if(h)throw new Error(s(6));t=!1,f();var n=p.indexOf(e);p.splice(n,1),l=null}}}function g(e){if(!u(e))throw new Error(s(7));if(void 0===e.type)throw new Error(s(8));if(h)throw new Error(s(9));try{h=!0,o=r(o,e)}finally{h=!1}for(var t=l=p,n=0;n<t.length;n++)(0,t[n])();return e}function y(e){if("function"!=typeof e)throw new Error(s(10));r=e,g({type:c.REPLACE})}function b(){var e,t=m;return(e={subscribe:function(e){if("object"!=typeof e||null===e)throw new Error(s(11));function n(){e.next&&e.next(v())}return n(),{unsubscribe:t(n)}}})[a]=function(){return this},e}return g({type:c.INIT}),(i={dispatch:g,subscribe:m,getState:v,replaceReducer:y})[a]=b,i}function p(e){for(var t=Object.keys(e),n={},i=0;i<t.length;i++){var r=t[i];"function"==typeof e[r]&&(n[r]=e[r])}var o,a=Object.keys(n);try{!function(e){Object.keys(e).forEach((function(t){var n=e[t];if(void 0===n(void 0,{type:c.INIT}))throw new Error(s(12));if(void 0===n(void 0,{type:c.PROBE_UNKNOWN_ACTION()}))throw new Error(s(13))}))}(n)}catch(e){o=e}return function(e,t){if(void 0===e&&(e={}),o)throw o;for(var i=!1,r={},l=0;l<a.length;l++){var c=a[l],u=n[c],d=e[c],p=u(d,t);if(void 0===p)throw t&&t.type,new Error(s(14));r[c]=p,i=i||p!==d}return(i=i||a.length!==Object.keys(e).length)?r:e}}function h(e,t){return function(){return t(e.apply(this,arguments))}}function f(e,t){if("function"==typeof e)return h(e,t);if("object"!=typeof e||null===e)throw new Error(s(16));var n={};for(var i in e){var r=e[i];"function"==typeof r&&(n[i]=h(r,t))}return n}function v(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return 0===t.length?function(e){return e}:1===t.length?t[0]:t.reduce((function(e,t){return function(){return e(t.apply(void 0,arguments))}}))}function m(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return function(e){return function(){var n=e.apply(void 0,arguments),i=function(){throw new Error(s(15))},r={getState:n.getState,dispatch:function(){return i.apply(void 0,arguments)}},a=t.map((function(e){return e(r)}));return i=v.apply(void 0,a)(n.dispatch),o(o({},n),{},{dispatch:i})}}}}},t={};function n(i){var r=t[i];if(void 0!==r)return r.exports;var o=t[i]={exports:{}};return e[i].call(o.exports,o,o.exports,n),o.exports}n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,{a:t}),t},n.d=function(e,t){for(var i in t)n.o(t,i)&&!n.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}
vendor: 2,957 bytes, line 117
117),Object.defineProperty(e,"__esModule",{value:!0})};var i,r,o={};return i=n(373),r=n.n(i),n(187),n(883),n(789),n(686),o.default=r(),o.default}()},e.exports=t()},741:(e,t,n)=>{var i,r;!function(o,s){"use strict";void 0===(r="function"==typeof(i=s)?i.call(t,n,t,e):i)||(e.exports=r)}(window,(function(){"use strict";var e=function(){var e=window.Element.prototype;if(e.matches)return"matches";if(e.matchesSelector)return"matchesSelector";for(var t=["webkit","moz","ms","o"],n=0;n<t.length;n++){var i=t[n]+"MatchesSelector";if(e[i])return i}}();return function(t,n){return t[e](n)}}))},158:function(e,t,n){var i,r;"undefined"!=typeof window&&window,void 0===(r="function"==typeof(i=function(){"use strict";function e(){}var t=e.prototype;return t.on=function(e,t){if(e&&t){var n=this._events=this._events||{},i=n[e]=n[e]||[];return-1==i.indexOf(t)&&i.push(t),this}},t.once=function(e,t){if(e&&t){this.on(e,t);var n=this._onceEvents=this._onceEvents||{};return(n[e]=n[e]||{})[t]=!0,this}},t.off=function(e,t){var n=this._events&&this._events[e];if(n&&n.length){var i=n.indexOf(t);return-1!=i&&n.splice(i,1),this}},t.emitEvent=function(e,t){var n=this._events&&this._events[e];if(n&&n.length){n=n.slice(0),t=t||[];for(var i=this._onceEvents&&this._onceEvents[e],r=0;r<n.length;r++){var o=n[r];i&&i[o]&&(this.off(e,o),delete i[o]),o.apply(this,t)}return this}},t.allOff=function(){delete this._events,delete this._onceEvents},e})?i.call(t,n,t,e):i)||(e.exports=r)},47:(e,t,n)=>{var i,r;!function(o,s){i=[n(741)],r=function(e){return function(e,t){"use strict";var n={extend:function(e,t){for(var n in t)e[n]=t[n];return e},modulo:function(e,t){return(e%t+t)%t}},i=Array.prototype.slice;n.makeArray=function(e){return Array.isArray(e)?e:null==e?[]:"object"==typeof e&&"number"==typeof e.length?i.call(e):[e]},n.removeFrom=function(e,t){var n=e.indexOf(t);-1!=n&&e.splice(n,1)},n.getParent=function(e,n){for(;e.parentNode&&e!=document.body;)if(e=e.parentNode,t(e,n))return e},n.getQueryElement=function(e){return"string"==typeof e?document.querySelector(e):e},n.handleEvent=function(e){var t="on"+e.type;this[t]&&this[t](e)},n.filterFindElements=function(e,i){e=n.makeArray(e);var r=[];return e.forEach((function(e){if(e instanceof HTMLElement)if(i){t(e,i)&&r.push(e);for(var n=e.querySelectorAll(i),o=0;o<n.length;o++)r.push(n[o])}else r.push(e)})),r},n.debounceMethod=function(e,t,n){n=n||100;var i=e.prototype[t],r=t+"Timeout";e.prototype[t]=function(){var e=this[r];clearTimeout(e);var t=arguments,o=this;this[r]=setTimeout((function(){i.apply(o,t),delete o[r]}),n)}},n.docReady=function(e){var t=document.readyState;"complete"==t||"interactive"==t?setTimeout(e):document.addEventListener("DOMContentLoaded",e)},n.toDashed=function(e){return e.replace(/(.)([A-Z])/g,(function(e,t,n){return t+"-"+n})).toLowerCase()};var r=e.console;return n.htmlInit=function(t,i){n.docReady((function(){var o=n.toDashed(i),s="data-"+o,a=document.querySelectorAll("["+s+"]"),l=d
vendor: 4,166 bytes, line 117
117ocument.querySelectorAll(".js-"+o),c=n.makeArray(a).concat(n.makeArray(l)),u=s+"-options",d=e.jQuery;c.forEach((function(e){var n,o=e.getAttribute(s)||e.getAttribute(u);try{n=o&&JSON.parse(o)}catch(t){return void(r&&r.error("Error parsing "+s+" on "+e.className+": "+t))}var a=new t(e,n);d&&d.data(e,i,a)}))}))},n}(o,e)}.apply(t,i),void 0===r||(e.exports=r)}(window)},131:(e,t,n)=>{var i,r;window,void 0===(r="function"==typeof(i=function(){"use strict";function e(e){var t=parseFloat(e);return-1==e.indexOf("%")&&!isNaN(t)&&t}var t="undefined"==typeof console?function(){}:function(e){console.error(e)},n=["paddingLeft","paddingRight","paddingTop","paddingBottom","marginLeft","marginRight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderTopWidth","borderBottomWidth"],i=n.length;function r(e){var n=getComputedStyle(e);return n||t("Style returned "+n+". Are you running this code in a hidden iframe on Firefox? See https://bit.ly/getsizebug1"),n}var o,s=!1;function a(t){if(function(){if(!s){s=!0;var t=document.createElement("div");t.style.width="200px",t.style.padding="1px 2px 3px 4px",t.style.borderStyle="solid",t.style.borderWidth="1px 2px 3px 4px",t.style.boxSizing="border-box";var n=document.body||document.documentElement;n.appendChild(t);var i=r(t);o=200==Math.round(e(i.width)),a.isBoxSizeOuter=o,n.removeChild(t)}}(),"string"==typeof t&&(t=document.querySelector(t)),t&&"object"==typeof t&&t.nodeType){var l=r(t);if("none"==l.display)return function(){for(var e={width:0,height:0,innerWidth:0,innerHeight:0,outerWidth:0,outerHeight:0},t=0;t<i;t++)e[n[t]]=0;return e}();var c={};c.width=t.offsetWidth,c.height=t.offsetHeight;for(var u=c.isBorderBox="border-box"==l.boxSizing,d=0;d<i;d++){var p=n[d],h=l[p],f=parseFloat(h);c[p]=isNaN(f)?0:f}var v=c.paddingLeft+c.paddingRight,m=c.paddingTop+c.paddingBottom,g=c.marginLeft+c.marginRight,y=c.marginTop+c.marginBottom,b=c.borderLeftWidth+c.borderRightWidth,_=c.borderTopWidth+c.borderBottomWidth,E=u&&o,w=e(l.width);!1!==w&&(c.width=w+(E?0:v+b));var C=e(l.height);return!1!==C&&(c.height=C+(E?0:m+_)),c.innerWidth=c.width-(v+b),c.innerHeight=c.height-(m+_),c.outerWidth=c.width+g,c.outerHeight=c.height+y,c}}return a})?i.call(t,n,t,e):i)||(e.exports=r)},564:function(e,t,n){var i,r;!function(o,s){"use strict";i=[n(158)],r=function(e){return function(e,t){var n=e.jQuery,i=e.console;function r(e,t){for(var n in t)e[n]=t[n];return e}var o=Array.prototype.slice;function s(e,t,a){if(!(this instanceof s))return new s(e,t,a);var l,c=e;"string"==typeof e&&(c=document.querySelectorAll(e)),c?(this.elements=(l=c,Array.isArray(l)?l:"object"==typeof l&&"number"==typeof l.length?o.call(l):[l]),this.options=r({},this.options),"function"==typeof t?a=t:r(this.options,t),a&&this.on("always",a),this.getImages(),n&&(this.jqDeferred=new n.Deferred),setTimeout(this.check.bind(this))):i.error("Bad element for imagesLoaded "+(c||e))}s.prototype=Object.create(t.prototype),s.prototype.options={},s.prototype.getImages=function(){this.images=[],this.elements.forEach(this.addElementImages,this)},s.prototype.addElementImages=function(e){"IMG"==e.nodeName&&this.addImage(e),!0===this.options.background&&this.addElementBackgroundImages(e);var t=e.nodeType;if(t&&a[t]){for(var n=e.querySelectorAll("img"),i=0;i<n.length;i++){var r=n[i];this.addImage(r)}if("string"==typeof this.options.background){var o=e.querySelectorAll(this.options.background);for(i=0;i<o.length;i++){var s=o[i];this.addElementBackgroundImages(s)}}}};var a={1:!0,9:!0,11:!0};function l(e){this.img=e}function c(e,t){this.url=e,this.element=t,this.img=new Image}return s.prototype.addElementBackgroundImages=function(e){var t=getComputedStyle(e);if(t)for(var n=/url\((['"])?(.*?)\1\)/gi,i=n.exec(t.backgroundImage);null!==i;){var r=i&&i[2];r&&this.addBackground(r,e),i=n.exec(t.backgroundImage)}},s.prototype.addImage=function(e){var t=new l(e);this.images.push(t)},s.prototype.addBackground=function(e,t){var n=new c(e,t);this.images.push(n)},s.prototype.check=function(){var e=this;function t(t,n,i){setTimeout((function(){e.progress(t,n,i)}))}this.progressedCount=0,this.hasAnyBroken=!1,this.images.length?this.images.forEac
117h((function(e){e.once("progress",t),e.check()})):this.complete()},s.prototype.progress=function(e,t,n){this.progressedCount++,this.hasAnyBroken=this.hasAnyBroken||!e.isLoaded,this.emitEvent("progress",[this,e,t]),this.jqDeferred&&this.jqDeferred.notify&&this.jqDeferred.notify(this,e),this.progressedCount==this.images.length&&this.complete(),this.options.debug&&i&&i.log("progress: "+n,e,t)},s.prototype.complete=function(){var e=this.hasAnyBroken?"fail":"done";if(this.isComplete=!0,this.emitEvent(e,[this]),this.emitEvent("always",[this]),this.jqDeferred){var t=this.hasAnyBroken?"reject":"resolve";this.jqDeferred[t](this)}},l.prototype=Object.create(t.prototype),l.prototype.check=function(){this.getIsImageComplete()?this.confirm(0!==this.img.naturalWidth,"naturalWidth"):(this.proxyImage=new Image,this.proxyImage.addEventListener("load",this),this.proxyImage.addEventListener("error",this),this.img.addEventListener("load",this),this.img.addEventListener("error",this),this.proxyImage.src=this.img.src)},l.prototype.getIsImageComplete=function(){return this.img.complete&&this.img.naturalWidth},l.prototype.confirm=function(e,t){this.isLoaded=e,this.emitEvent("progress",[this,this.img,t])},l.prototype.handleEvent=function(e){var t="on"+e.type;this[t]&&this[t](e)},l.prototype.onload=function(){this.confirm(!0,"onload"),this.unbindEvents()},l.prototype.onerror=function(){this.confirm(!1,"onerror"),this.unbindEvents()},l.prototype.unbindEvents=function(){this.proxyImage.removeEventListener("load",this),this.proxyImage.removeEventListener("error",this),this.img.removeEventListener("load",this),this.img.removeEventListener("error",this)},c.prototype=Object.create(l.prototype),c.prototype.check=function(){this.img.addEventListener("load",this),this.img.addEventListener("error",this),this.img.src=this.url,this.getIsImageComplete()&&(this.confirm(0!==this.img.naturalWidth,"naturalWidth"),this.unbindEvents())},c.prototype.unbindEvents=function(){this.img.removeEventListener("load",this),this.img.removeEventListener("error",this)},c.prototype.confirm=function(e,t){this.isLoaded=e,this.emitEvent("progress",[this,this.element,t])},s.makeJQueryPlugin=function(t){(t=t||e.jQuery)&&((n=t).fn.imagesLoaded=function(e,t){return new s(this,e,t).jqDeferred.promise(n(this))})},s.makeJQueryPlugin(),s}(o,e)}.apply(t,i),void 0===r||(e.exports=r)}("undefined"!=typeof window?window:this)},391:(e,t,n)=>{var i,r;!function(o,s){i=[n(794),n(131),n(741),n(47),n(568),n(835),n(666),n(947),n(157)],r=function(e,t,n,i,r,s){return function(e,t,n,i,r,o,s){"use strict";var a=e.jQuery,l=String.prototype.trim?function(e){return e.trim()}:function(e){return e.replace(/^\s+|\s+$/g,"")},c=t.create("isotope",{layoutMode:"masonry",isJQueryFiltering:!0,sortAscending:!0});c.Item=o,c.LayoutMode=s;var u=c.prototype;u._create=function(){for(var e in this.itemGUID=0,this._sorters={},this._getSorters(),t.prototype._create.call(this),this.modes={},this.filteredItems=this.items,this.sortHistory=["original-order"],s.modes)this._initLayoutMode(e)},u.reloadItems=function(){this.itemGUID=0,t.prototype.reloadItems.call(this)},u._itemize=function(){for(var e=t.prototype._itemize.apply(this,arguments),n=0;n<e.length;n++)e[n].id=this.itemGUID++;return this._updateItemsSortData(e),e},u._initLayoutMode=function(e){var t=s.modes[e],n=this.options[e]||{};this.options[e]=t.options?r.extend(t.options,n):n,this.modes[e]=new t(this)},u.layout=function(){this._isLayoutInited||!this._getOption("initLayout")?this._layout():this.arrange()},u._layout=function(){var e=this._getIsInstant();this._resetLayout(),this._manageStamps(),this.layoutItems(this.filteredItems,e),this._isLayoutInited=!0},u.arrange=function(e){this.option(e),this._getIsInstant();var t=this._filter(this.items);this.filteredItems=t.matches,this._bindArrangeComplete(),this._isInstant?this._noTransition(this._hideReveal,[t]):this._hideReveal(t),this._sort(),this._layout()},u._init=u.arrange,u._hideReveal=function(e){this.reveal(e.needReveal),this.hide(e.needHide)},u._getIsInstant=function(){var e=this._getOption("layoutInstant"),t=void 0!==e?e:!this._isLayoutInited;return this._isInstant=t,t},u._bindArrangeComplete=function(){var e,t,n,i=this;function r(){e&&t&&n&&i.dispatchEvent("arrangeComplete",null,[i.filteredItems])}this.once("layoutComplete",(function(){e=!0,r()})),this.once("hideComplete",(function(){t=!0,r()})),this.once("revealComplete",(function(){n=!0,r()}))},u._filter=function(e){var t=this.options.filter;t=t||"*";for(var n=[],i=[],r=[],o=this._getFilterTest(t),s=0;s<e.length;s++){var a=e[s];if(!a.isIgnored){var l=o(a);l&&n.push(a),l&&a.isHidden?i.push(a):l||a.isHidden||r.push(a)}}return{matches:n,needReveal:i,needHide:r}},u._getFilterTest=function(e){return a&&this.options.isJQueryFiltering?function(t){return a(t.element).is(e)}:"function"==typeof e?function(t){return e(t.element)}:function(t){return i(t.element,e)}},u.updateSortData=function(e){var t;e?(e=r.makeArray(e),t=this.getItems(e)):t=this.items,this._getSorters(),this._updateItemsSortData(t)},u._getSorters=function(){var e=this.options.getSortData;for(var t in e){var n=e[t];this._sorters[t]=d(n)}},u._updateItemsSortData=function(e){for(var t=e&&e.length,n=0;t&&n<t;n++)e[n].updateSortData()};var d=function(e){if("string"!=typeof e)return e;var t=l(e).split(" "),n=t[0],i=n.match(/^\[(.+)\]$/),r=function(e,t){return e?function(t){return t.getAttribute(e)}:function(e){var n=e.querySelector(t);return n&&n.textContent}}(i&&i[1],n),o=c.sortDataParsers[t[1]];return o?function(e){return e&&o(r(e))}:function(e){return e&&r(e)}};c.sortDataParsers={parseInt:function(e){return parseInt(e,10)},parseFloat:function(e){return parseFloat(e)}},u._sort=function(){if(this.options.sortBy){var e=r.makeArray(this.options.sortBy);this._getIsSameSortBy(e)||(this.sortHistory=e.concat(this.sortHistory));var t=function(e,t){return function(n,i){for(var r=0;r<e.length;r++){var o=e[r],s=n.sortData[o],a=i.sortData[o];if(s>a||s<a)return(s>a?1:-1)*((void 0!==t[o]?t[o]:t)?1:-1)}return 0}}(this.sortHistory,this.options.sortAscending);this.filteredItems.sort(t)}},u._getIsSameSortBy=function(e){for(var t=0;t<e.length;t++)if(e[t]!=this.sortHistory[t])return!1;return!0},u._mode=function(){var e=this.options.layoutMode,t=this.modes[e];if(!t)throw new Error("No layout mode: "+e);return t.options=this.options[e],t},u._resetLayout=function(){t.prototype._resetLayout.call(this),this._mode()._resetLayout()},u._getItemLayoutPosition=function(e){return this._mode()._getItemLayoutPosition(e)},u._manageStamp=function(e){this._mode()._manageStamp(e)},u._getContainerSize=function(){return this._mode()._getContainerSize()},u.needsResizeLayout=function(){return this._mode().needsResizeLayout()},u.appended=function(e){var t=this.addItems(e);if(t.length){var n=this._filterRevealAdded(t);this.filteredItems=this.filteredItems.concat(n)}},u.prepended=function(e){var t=this._itemize(e);if(t.length){this._resetLayout(),this._manageStamps();var n=this._filterRevealAdded(t);this.layoutItems(this.filteredItems),this.filteredItems=n.concat(this.filteredItems),this.items=t.concat(this.items)}},u._filterRevealAdded=function(e){var t=this._filter(e);return this.hide(t.needHide),this.reveal(t.matches),this.layoutItems(t.matches,!0),t.matches},u.insert=function(e){var t=this.addItems(e);if(t.length){var n,i,r=t.length;for(n=0;n<r;n++)i=t[n],this.element.appendChild(i.element);var o=this._filter(t).matches;for(n=0;n<r;n++)t[n].isLayoutInstant=!0;for(this.arrange(),n=0;n<r;n++)delete t[n].isLayoutInstant;this.reveal(o)}};var p=u.remove;return u.remove=function(e){e=r.makeArray(e);var t=this.getItems(e);p.call(this,e);for(var n=t&&t.length,i=0;n&&i<n;i++){var o=t[i];r.removeFrom(this.filteredItems,o)}},u.shuffle=function(){for(var e=0;e<this.items.length;e++)this.items[e].sortData.random=Math.random();this.options.sortBy="random",this._sort(),this._layout()},u._noTransition=function(e,t){var n=this.options.transitionDuration;this.options.transitionDuration=0;var i=e.apply(this,t);return this.options.transitionDuration=n,i},u.getFilteredItemElements=function(){return this.filteredItems.map((function(e){return e.element}))},c}(o,e,0,n,i,r,s)}.apply(t,i),void 0===r||(e.exports=r)}(window)},568:(e,t,n)=>{var i,r;window,i=[n(794)],void 0===(r=function(e){"use strict";
117function t(){e.Item.apply(this,arguments)}var n=t.prototype=Object.create(e.Item.prototype),i=n._create;n._create=function(){this.id=this.layout.itemGUID++,i.call(this),this.sortData={}},n.updateSortData=function(){if(!this.isIgnored){this.sortData.id=this.id,this.sortData["original-order"]=this.id,this.sortData.random=Math.random();var e=this.layout.options.getSortData,t=this.layout._sorters;for(var n in e){var i=t[n];this.sortData[n]=i(this.element,this)}}};var r=n.destroy;return n.destroy=function(){r.apply(this,arguments),this.css({display:""})},t}.apply(t,i))||(e.exports=r)},835:(e,t,n)=>{var i,r;window,i=[n(131),n(794)],void 0===(r=function(e,t){"use strict";function n(e){this.isotope=e,e&&(this.options=e.options[this.namespace],this.element=e.element,this.items=e.filteredItems,this.size=e.size)}var i=n.prototype;return["_resetLayout","_getItemLayoutPosition","_manageStamp","_getContainerSize","_getElementOffset","needsResizeLayout","_getOption"].forEach((function(e){i[e]=function(){return t.prototype[e].apply(this.isotope,arguments)}})),i.needsVerticalResizeLayout=function(){var t=e(this.isotope.element);return this.isotope.size&&t&&t.innerHeight!=this.isotope.size.innerHeight},i._getMeasurement=function(){this.isotope._getMeasurement.apply(this,arguments)},i.getColumnWidth=function(){this.getSegmentSize("column","Width")},i.getRowHeight=function(){this.getSegmentSize("row","Height")},i.getSegmentSize=function(e,t){var n=e+t,i="outer"+t;if(this._getMeasurement(n,i),!this[n]){var r=this.getFirstItemSize();this[n]=r&&r[i]||this.isotope.size["inner"+t]}},i.getFirstItemSize=function(){var t=this.isotope.filteredItems[0];return t&&t.element&&e(t.element)},i.layout=function(){this.isotope.layout.apply(this.isotope,arguments)},i.getSize=function(){this.isotope.getSize(),this.size=this.isotope.size},n.modes={},n.create=function(e,t){function r(){n.apply(this,arguments)}return r.prototype=Object.create(i),r.prototype.constructor=r,t&&(r.options=t),r.prototype.namespace=e,n.modes[e]=r,r},n}.apply(t,i))||(e.exports=r)},947:(e,t,n)=>{var i,r,o;window,r=[n(835)],void 0===(o="function"==typeof(i=function(e){"use strict";var t=e.create("fitRows"),n=t.prototype;return n._resetLayout=function(){this.x=0,this.y=0,this.maxY=0,this._getMeasurement("gutter","outerWidth")},n._getItemLayoutPosition=function(e){e.getSize();var t=e.size.outerWidth+this.gutter,n=this.isotope.size.innerWidth+this.gutter;0!==this.x&&t+this.x>n&&(this.x=0,this.y=this.maxY);var i={x:this.x,y:this.y};return this.maxY=Math.max(this.maxY,this.y+e.size.outerHeight),this.x+=t,i},n._getContainerSize=function(){return{height:this.maxY}},t})?i.apply(t,r):i)||(e.exports=o)},666:(e,t,n)=>{var i,r;window,i=[n(835),n(751)],void 0===(r=function(e,t){"use strict";var n=e.create("masonry"),i=n.prototype,r={_getElementOffset:!0,layout:!0,_getMeasurement:!0};for(var o in t.prototype)r[o]||(i[o]=t.prototype[o]);var s=i.measureColumns;i.measureColumns=function(){this.items=this.isotope.filteredItems,s.call(this)};var a=i._getOption;return i._getOption=function(e){return"fitWidth"==e?void 0!==this.options.isFitWidth?this.options.isFitWidth:this.options.fitWidth:a.apply(this.isotope,arguments)},n}.apply(t,i))||(e.exports=r)},157:(e,t,n)=>{var i,r,o;window,r=[n(835)],void 0===(o="function"==typeof(i=function(e){"use strict";var t=e.create("vertical",{horizontalAlignment:0}),n=t.prototype;return n._resetLayout=function(){this.y=0},n._getItemLayoutPosition=function(e){e.getSize();var t=(this.isotope.size.innerWidth-e.size.outerWidth)*this.options.horizontalAlignment,n=this.y;return this.y+=e.size.outerHeight,{x:t,y:n}},n._getContainerSize=function(){return{height:this.y}},t})?i.apply(t,r):i)||(e.exports=o)},751:(e,t,n)=>{var i,r,o;window,r=[n(794),n(131)],void 0===(o="function"==typeof(i=function(e,t){"use strict";var n=e.create("masonry");n.compatOptions.fitWidth="isFitWidth";var i=n.prototype;return i._resetLayout=function(){this.getSize(),this._getMeasurement("columnWidth","outerWidth"),this._getMeasurement("gutter","outerWidth"),this.measureColumns(),this.colYs=[];for(var e=0;e<this.cols;e++)this.colYs.push(0);this.maxY=0,this.horizontalColIndex=0},i.measureColumns=function(){if(this.getContainerWidth(),!this.columnWidth){var e=this.items[0],n=e&&e.element;this.columnWidth=n&&t(n).outerWidth||this.containerWidth}var i=this.columnWidth+=this.gutter,r=this.containerWidth+this.gutter,o=r/i,s=i-r%i;o=Math[s&&s<1?"round":"floor"](o),this.cols=Math.max(o,1)},i.getContainerWidth=function(){var e=this._getOption("fitWidth")?this.element.parentNode:this.element,n=t(e);this.containerWidth=n&&n.innerWidth},i._getItemLayoutPosition=function(e){e.getSize();var t=e.size.outerWidth%this.columnWidth,n=Math[t&&t<1?"round":"ceil"](e.size.outerWidth/this.columnWidth);n=Math.min(n,this.cols);for(var i=this[this.options.horizontalOrder?"_getHorizontalColPosition":"_getTopColPosition"](n,e),r={x:this.columnWidth*i.col,y:i.y},o=i.y+e.size.outerHeight,s=n+i.col,a=i.col;a<s;a++)this.colYs[a]=o;return r},i._getTopColPosition=function(e){var t=this._getTopColGroup(e),n=Math.min.apply(Math,t);return{col:t.indexOf(n),y:n}},i._getTopColGroup=function(e){if(e<2)return this.colYs;for(var t=[],n=this.cols+1-e,i=0;i<n;i++)t[i]=this._getColGroupY(i,e);return t},i._getColGroupY=function(e,t){if(t<2)return this.colYs[e];var n=this.colYs.slice(e,e+t);return Math.max.apply(Math,n)},i._getHorizontalColPosition=function(e,t){var n=this.horizontalColIndex%this.cols;n=e>1&&n+e>this.cols?0:n;var i=t.size.outerWidth&&t.size.outerHeight;return this.horizontalColIndex=i?n+e:this.horizontalColIndex,{col:n,y:this._getColGroupY(n,e)}},i._manageStamp=function(e){var n=t(e),i=this._getElementOffset(e),r=this._getOption("originLeft")?i.left:i.right,o=r+n.outerWidth,s=Math.floor(r/this.columnWidth);s=Math.max(0,s);var a=Math.floor(o/this.columnWidth);a-=o%this.columnWidth?0:1,a=Math.min(this.cols-1,a);for(var l=(this._getOption("originTop")?i.top:i.bottom)+n.outerHeight,c=s;c<=a;c++)this.colYs[c]=Math.max(l,this.colYs[c])},i._getContainerSize=function(){this.maxY=Math.max.apply(Math,this.colYs);var e={height:this.maxY};return this._getOption("fitWidth")&&(e.width=this._getContainerFitWidth()),e},i._getContainerFitWidth=function(){for(var e=0,t=this.cols;--t&&0===this.colYs[t];)e++;return(this.cols-e)*this.columnWidth-this.gutter},i.needsResizeLayout=function(){var e=this.containerWidth;return this.getContainerWidth(),e!=this.containerWidth},n})?i.apply(t,r):i)||(e.exports=o)},797:e=>{"use strict";var t="bfred-it:object-fit-images",n=/(object-fit|object-position)\s*:\s*([-.\w\s%]+)/g,i="undefined"==typeof Image?{style:{"object-position":1}}:new Image,r="object-fit"in i.style,o="object-position"in i.style,s="background-size"in i.style,a="string"==typeof i.currentSrc,l=i.getAttribute,c=i.setAttribute,u=!1;function d(e,t,n){var i="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='"+(t||1)+"' height='"+(n||0)+"'%3E%3C/svg%3E";l.call(e,"src")!==i&&c.call(e,"src",i)}
117function p(e,t){e.naturalWidth?t(e):setTimeout(p,100,e,t)}function h(e){var i=function(e){for(var t,i=getComputedStyle(e).fontFamily,r={};null!==(t=n.exec(i));)r[t[1]]=t[2];return r}(e),o=e[t];if(i["object-fit"]=i["object-fit"]||"fill",!o.img){if("fill"===i["object-fit"])return;if(!o.skipTest&&r&&!i["object-position"])return}if(!o.img){o.img=new Image(e.width,e.height),o.img.srcset=l.call(e,"data-ofi-srcset")||e.srcset,o.img.src=l.call(e,"data-ofi-src")||e.src,c.call(e,"data-ofi-src",e.src),e.srcset&&c.call(e,"data-ofi-srcset",e.srcset),d(e,e.naturalWidth||e.width,e.naturalHeight||e.height),e.srcset&&(e.srcset="");try{!function(e){var n={get:function(n){return e[t].img[n||"src"]},set:function(n,i){return e[t].img[i||"src"]=n,c.call(e,"data-ofi-"+i,n),h(e),n}};Object.defineProperty(e,"src",n),Object.defineProperty(e,"currentSrc",{get:function(){return n.get("currentSrc")}}),Object.defineProperty(e,"srcset",{get:function(){return n.get("srcset")},set:function(e){return n.set(e,"srcset")}})}(e)}catch(e){window.console&&console.warn("https://bit.ly/ofi-old-browser")}}!function(e){if(e.srcset&&!a&&window.picturefill){var t=window.picturefill._;e[t.ns]&&e[t.ns].evaled||t.fillImg(e,{reselect:!0}),e[t.ns].curSrc||(e[t.ns].supported=!1,t.fillImg(e,{reselect:!0})),e.currentSrc=e[t.ns].curSrc||e.src}}(o.img),e.style.backgroundImage='url("'+(o.img.currentSrc||o.img.src).replace(/"/g,'\\"')+'")',e.style.backgroundPosition=i["object-position"]||"center",e.style.backgroundRepeat="no-repeat",e.style.backgroundOrigin="content-box",/scale-down/.test(i["object-fit"])?p(o.img,(function(){o.img.naturalWidth>e.width||o.img.naturalHeight>e.height?e.style.backgroundSize="contain":e.style.backgroundSize="auto"})):e.style.backgroundSize=i["object-fit"].replace("none","auto").replace("fill","100% 100%"),p(o.img,(function(t){d(e,t.naturalWidth,t.naturalHeight)}))}function f(e,n){var i=!u&&!e;if(n=n||{},e=e||"img",o&&!n.skipTest||!s)return!1;"img"===e?e=document.getElementsByTagName("img"):"string"==typeof e?e=document.querySelectorAll(e):"length"in e||(e=[e]);for(var r=0;r<e.length;r++)e[r][t]=e[r][t]||{skipTest:n.skipTest},h(e[r]);i&&(document.body.addEventListener("load",(function(e){"IMG"===e.target.tagName&&f(e.target,{skipTest:n.skipTest})}),!0),u=!0,e="img"),n.watchMQ&&window.addEventListener("resize",f.bind(null,e,{skipTest:n.skipTest}))}f.supportsObjectFit=r,f.supportsObjectPosition=o,function(){function e(e,n){return e[t]&&e[t].img&&("src"===n||"srcset"===n)?e[t].img:e}o||(HTMLImageElement.prototype.getAttribute=function(t){return l.call(e(this,t),t)},HTMLImageElement.prototype.setAttribute=function(t,n){return c.call(e(this,t),t,String(n))})}(),e.exports=f},652:(e,t,n)=>{var i,r,o;window,r=[n(158),n(131)],void 0===(o="function"==typeof(i=function(e,t){"use strict";var n=document.documentElement.style,i="string"==typeof n.transition?"transition":"WebkitTransition",r="string"==typeof n.transform?"transform":"WebkitTransform",o={WebkitTransition:"webkitTransitionEnd",transition:"transitionend"}[i],s={transform:r,transition:i,transitionDuration:i+"Duration",transitionProperty:i+"Property",transitionDelay:i+"Delay"};function a(e,t){e&&(this.element=e,this.layout=t,this.position={x:0,y:0},this._create())}var l=a.prototype=Object.create(e.prototype);l.constructor=a,l._create=function(){this._transn={ingProperties:{},clean:{},onEnd:{}},this.css({position:"absolute"})},l.handleEvent=function(e){var t="on"+e.type;this[t]&&this[t](e)},l.getSize=function(){this.size=t(this.element)},l.css=function(e){var t=this.element.style;for(var n in e)t[s[n]||n]=e[n]},l.getPosition=function(){var e=getComputedStyle(this.element),t=this.layout._getOption("originLeft"),n=this.layout._getOption("originTop"),i=e[t?"left":"right"],r=e[n?"top":"bottom"],o=parseFloat(i),s=parseFloat(r),a=this.layout.size;-1!=i.indexOf("%")&&(o=o/100*a.width),-1!=r.indexOf("%")&&(s=s/100*a.height),o=isNaN(o)?0:o,s=isNaN(s)?0:s,o-=t?a.paddingLeft:a.paddingRight,s-=n?a.paddingTop:a.paddingBottom,this.position.x=o,this.position.y=s},l.layoutPosition=function(){var e=this.layout.size,t={},n=this.layout._getOption("originLeft"),i=this.layout._getOption("originTop"),r=n?"paddingLeft":"paddingRight",o=n?"left":"right",s=n?"right":"left",a=this.position.x+e[r];t[o]=this.getXValue(a),t[s]="";var l=i?"paddingTop":"paddingBottom",c=i?"top":"bottom",u=i?"bottom":"top",d=this.position.y+e[l];t[c]=this.getYValue(d),t[u]="",this.css(t),this.emitEvent("layout",[this])},l.getXValue=function(e){var t=this.layout._getOption("horizontal");return this.layout.options.percentPosition&&!t?e/this.layout.size.width*100+"%":e+"px"},l.getYValue=function(e){var t=this.layout._getOption("horizontal");return this.layout.options.percentPosition&&t?e/this.layout.size.height*100+"%":e+"px"},l._transitionTo=function(e,t){this.getPosition();var n=this.position.x,i=this.position.y,r=e==this.position.x&&t==this.position.y;if(this.setPosition(e,t),!r||this.isTransitioning){var o=e-n,s=t-i,a={};a.transform=this.getTranslate(o,s),this.transition({to:a,onTransitionEnd:{transform:this.layoutPosition},isCleaning:!0})}else this.layoutPosition()},l.getTranslate=function(e,t){return"translate3d("+(e=this.layout._getOption("originLeft")?e:-e)+"px, "+(t=this.layout._getOption("originTop")?t:-t)+"px, 0)"},l.goTo=function(e,t){this.setPosition(e,t),this.layoutPosition()},l.moveTo=l._transitionTo,l.setPosition=function(e,t){this.position.x=parseFloat(e),this.position.y=parseFloat(t)},l._nonTransition=function(e){for(var t in this.css(e.to),e.isCleaning&&this._removeStyles(e.to),e.onTransitionEnd)e.onTransitionEnd[t].call(this)},l.transition=function(e){if(parseFloat(this.layout.options.transitionDuration)){var t=this._transn;for(var n in e.onTransitionEnd)t.onEnd[n]=e.onTransitionEnd[n];for(n in e.to)t.ingProperties[n]=!0,e.isCleaning&&(t.clean[n]=!0);e.from&&(this.css(e.from),this.element.offsetHeight),this.enableTransition(e.to),this.css(e.to),this.isTransitioning=!0}else this._nonTransition(e)};var c="opacity,"+r.replace(/([A-Z])/g,(function(e){return"-"+e.toLowerCase()}));l.enableTransition=function(){if(!this.isTransitioning){var e=this.layout.options.transitionDuration;e="number"==typeof e?e+"ms":e,this.css({transitionProperty:c,transitionDuration:e,transitionDelay:this.staggerDelay||0}),this.element.addEventListener(o,this,!1)}},l.onwebkitTransitionEnd=function(e){this.ontransitionend(e)},l.onotransitionend=function(e){this.ontransitionend(e)};var u={"-webkit-transform":"transform"};l.ontransitionend=function(e){if(e.target===this.element){var t=this._transn,n=u[e.propertyName]||e.propertyName;delete t.ingProperties[n],function(e){for(var t in e)return!1;return!0}(t.ingProperties)&&this.disableTransition(),n in t.clean&&(this.element.style[e.propertyName]="",delete t.clean[n]),n in t.onEnd&&(t.onEnd[n].call(this),delete t.onEnd[n]),this.emitEvent("transitionEnd",[this])}},l.disableTransition=function(){this.removeTransitionStyles(),this.element.removeEventListener(o,this,!1),this.isTransitioning=!1},l._removeStyles=function(e){var t={};for(var n in e)t[n]="";this.css(t)};var d={transitionProperty:"",transitionDuration:"",transitionDelay:""};return l.removeTransitionStyles=function(){this.css(d)},l.stagger=function(e){e=isNaN(e)?0:e,this.staggerDelay=e+"ms"},l.removeElem=function(){this.element.parentNode.removeChild(this.element),this.css({display:""}),this.emitEvent("remove",[this])},l.remove=function(){i&&parseFloat(this.layout.options.transitionDuration)?(this.once("transitionEnd",(function(){this.removeElem()})),this.hide()):this.removeElem()},l.reveal=function(){delete this.isHidden,this.css({display:""});var e=this.layout.options,t={};t[this.getHideRevealTransitionEndProperty("visibleStyle")]=this.onRevealTransitionEnd,this.transition({from:e.hiddenStyle,to:e.visibleStyle,isCleaning:!0,onTransitionEnd:t})},l.onRevealTransitionEnd=function(){this.isHidden||this.emitEvent("reveal")},l.getHideRevealTransitionEndProperty=function(e){var t=this.layout.options[e];if(t.opacity)return"opacity";for(var n in t)return n},l.hide=function(){this.isHidden=!0,this.css({display:""});var e=this.layout.options,t={};t[this.getHideRevealTransitionEndProperty("hiddenStyle")]=this.onHideTransitionEnd,this.transition({from:e.visibleStyle,to:e.hiddenStyle,isCleaning:!0,onTransitionEnd:t})},l.onHideTransitionEnd=function(){this.isHidden&&(this.css({display:"none"}),this.emitEvent("hide"))},l.destroy=function(){this.css({position:"",left:"",right:"",top:"",bottom:"",transition:"",transform:""})},a})?i.apply(t,r):i)||(e.exports=o)},794:(e,t,n)=>{var i,r;!function(o,s){"use strict";
vendor: 3,999 bytes, line 117
117i=[n(158),n(131),n(47),n(652)],r=function(e,t,n,i){return function(e,t,n,i,r){var o=e.console,s=e.jQuery,a=function(){},l=0,c={};function u(e,t){var n=i.getQueryElement(e);if(n){this.element=n,s&&(this.$element=s(this.element)),this.options=i.extend({},this.constructor.defaults),this.option(t);var r=++l;this.element.outlayerGUID=r,c[r]=this,this._create(),this._getOption("initLayout")&&this.layout()}else o&&o.error("Bad element for "+this.constructor.namespace+": "+(n||e))}u.namespace="outlayer",u.Item=r,u.defaults={containerStyle:{position:"relative"},initLayout:!0,originLeft:!0,originTop:!0,resize:!0,resizeContainer:!0,transitionDuration:"0.4s",hiddenStyle:{opacity:0,transform:"scale(0.001)"},visibleStyle:{opacity:1,transform:"scale(1)"}};var d=u.prototype;function p(e){function t(){e.apply(this,arguments)}return t.prototype=Object.create(e.prototype),t.prototype.constructor=t,t}i.extend(d,t.prototype),d.option=function(e){i.extend(this.options,e)},d._getOption=function(e){var t=this.constructor.compatOptions[e];return t&&void 0!==this.options[t]?this.options[t]:this.options[e]},u.compatOptions={initLayout:"isInitLayout",horizontal:"isHorizontal",layoutInstant:"isLayoutInstant",originLeft:"isOriginLeft",originTop:"isOriginTop",resize:"isResizeBound",resizeContainer:"isResizingContainer"},d._create=function(){this.reloadItems(),this.stamps=[],this.stamp(this.options.stamp),i.extend(this.element.style,this.options.containerStyle),this._getOption("resize")&&this.bindResize()},d.reloadItems=function(){this.items=this._itemize(this.element.children)},d._itemize=function(e){for(var t=this._filterFindItemElements(e),n=this.constructor.Item,i=[],r=0;r<t.length;r++){var o=new n(t[r],this);i.push(o)}return i},d._filterFindItemElements=function(e){return i.filterFindElements(e,this.options.itemSelector)},d.getItemElements=function(){return this.items.map((function(e){return e.element}))},d.layout=function(){this._resetLayout(),this._manageStamps();var e=this._getOption("layoutInstant"),t=void 0!==e?e:!this._isLayoutInited;this.layoutItems(this.items,t),this._isLayoutInited=!0},d._init=d.layout,d._resetLayout=function(){this.getSize()},d.getSize=function(){this.size=n(this.element)},d._getMeasurement=function(e,t){var i,r=this.options[e];r?("string"==typeof r?i=this.element.querySelector(r):r instanceof HTMLElement&&(i=r),this[e]=i?n(i)[t]:r):this[e]=0},d.layoutItems=function(e,t){e=this._getItemsForLayout(e),this._layoutItems(e,t),this._postLayout()},d._getItemsForLayout=function(e){return e.filter((function(e){return!e.isIgnored}))},d._layoutItems=function(e,t){if(this._emitCompleteOnItems("layout",e),e&&e.length){var n=[];e.forEach((function(e){var i=this._getItemLayoutPosition(e);i.item=e,i.isInstant=t||e.isLayoutInstant,n.push(i)}),this),this._processLayoutQueue(n)}},d._getItemLayoutPosition=function(){return{x:0,y:0}},d._processLayoutQueue=function(e){this.updateStagger(),e.forEach((function(e,t){this._positionItem(e.item,e.x,e.y,e.isInstant,t)}),this)},d.updateStagger=function(){var e=this.options.stagger;if(null!=e)return this.stagger=function(e){if("number"==typeof e)return e;var t=e.match(/(^\d*\.?\d*)(\w*)/),n=t&&t[1],i=t&&t[2];return n.length?(n=parseFloat(n))*(h[i]||1):0}(e),this.stagger;this.stagger=0},d._positionItem=function(e,t,n,i,r){i?e.goTo(t,n):(e.stagger(r*this.stagger),e.moveTo(t,n))},d._postLayout=function(){this.resizeContainer()},d.resizeContainer=function(){if(this._getOption("resizeContainer")){var e=this._getContainerSize();e&&(this._setContainerMeasure(e.width,!0),this._setContainerMeasure(e.height,!1))}},d._getContainerSize=a,d._setContainerMeasure=function(e,t){if(void 0!==e){var n=this.size;n.isBorderBox&&(e+=t?n.paddingLeft+n.paddingRight+n.borderLeftWidth+n.borderRightWidth:n.paddingBottom+n.paddingTop+n.borderTopWidth+n.borderBottomWidth),e=Math.max(e,0),this.element.style[t?"width":"height"]=e+"px"}},d._emitCompleteOnItems=function(e,t){var n=this;function i(){n.dispatchEvent(e+"Complete",null,[t])}
117var r=t.length;if(t&&r){var o=0;t.forEach((function(t){t.once(e,s)}))}else i();function s(){++o==r&&i()}},d.dispatchEvent=function(e,t,n){var i=t?[t].concat(n):n;if(this.emitEvent(e,i),s)if(this.$element=this.$element||s(this.element),t){var r=s.Event(t);r.type=e,this.$element.trigger(r,n)}else this.$element.trigger(e,n)},d.ignore=function(e){var t=this.getItem(e);t&&(t.isIgnored=!0)},d.unignore=function(e){var t=this.getItem(e);t&&delete t.isIgnored},d.stamp=function(e){(e=this._find(e))&&(this.stamps=this.stamps.concat(e),e.forEach(this.ignore,this))},d.unstamp=function(e){(e=this._find(e))&&e.forEach((function(e){i.removeFrom(this.stamps,e),this.unignore(e)}),this)},d._find=function(e){if(e)return"string"==typeof e&&(e=this.element.querySelectorAll(e)),i.makeArray(e)},d._manageStamps=function(){this.stamps&&this.stamps.length&&(this._getBoundingRect(),this.stamps.forEach(this._manageStamp,this))},d._getBoundingRect=function(){var e=this.element.getBoundingClientRect(),t=this.size;this._boundingRect={left:e.left+t.paddingLeft+t.borderLeftWidth,top:e.top+t.paddingTop+t.borderTopWidth,right:e.right-(t.paddingRight+t.borderRightWidth),bottom:e.bottom-(t.paddingBottom+t.borderBottomWidth)}},d._manageStamp=a,d._getElementOffset=function(e){var t=e.getBoundingClientRect(),i=this._boundingRect,r=n(e);return{left:t.left-i.left-r.marginLeft,top:t.top-i.top-r.marginTop,right:i.right-t.right-r.marginRight,bottom:i.bottom-t.bottom-r.marginBottom}},d.handleEvent=i.handleEvent,d.bindResize=function(){e.addEventListener("resize",this),this.isResizeBound=!0},d.unbindResize=function(){e.removeEventListener("resize",this),this.isResizeBound=!1},d.onresize=function(){this.resize()},i.debounceMethod(u,"onresize",100),d.resize=function(){this.isResizeBound&&this.needsResizeLayout()&&this.layout()},d.needsResizeLayout=function(){var e=n(this.element);return this.size&&e&&e.innerWidth!==this.size.innerWidth},d.addItems=function(e){var t=this._itemize(e);return t.length&&(this.items=this.items.concat(t)),t},d.appended=function(e){var t=this.addItems(e);t.length&&(this.layoutItems(t,!0),this.reveal(t))},d.prepended=function(e){var t=this._itemize(e);if(t.length){var n=this.items.slice(0);this.items=t.concat(n),this._resetLayout(),this._manageStamps(),this.layoutItems(t,!0),this.reveal(t),this.layoutItems(n)}},d.reveal=function(e){if(this._emitCompleteOnItems("reveal",e),e&&e.length){var t=this.updateStagger();e.forEach((function(e,n){e.stagger(n*t),e.reveal()}))}},d.hide=function(e){if(this._emitCompleteOnItems("hide",e),e&&e.length){var t=this.updateStagger();e.forEach((function(e,n){e.stagger(n*t),e.hide()}))}},d.revealItemElements=function(e){var t=this.getItems(e);this.reveal(t)},d.hideItemElements=function(e){var t=this.getItems(e);this.hide(t)},d.getItem=function(e){for(var t=0;t<this.items.length;t++){var n=this.items[t];if(n.element==e)return n}},d.getItems=function(e){e=i.makeArray(e);var t=[];return e.forEach((function(e){var n=this.getItem(e);n&&t.push(n)}),this),t},d.remove=function(e){var t=this.getItems(e);this._emitCompleteOnItems("remove",t),t&&t.length&&t.forEach((function(e){e.remove(),i.removeFrom(this.items,e)}),this)},d.destroy=function(){var e=this.element.style;e.height="",e.position="",e.width="",this.items.forEach((function(e){e.destroy()})),this.unbindResize();var t=this.element.outlayerGUID;delete c[t],delete this.element.outlayerGUID,s&&s.removeData(this.element,this.constructor.namespace)},u.data=function(e){var t=(e=i.getQueryElement(e))&&e.outlayerGUID;return t&&c[t]},u.create=function(e,t){var n=p(u);return n.defaults=i.extend({},u.defaults),i.extend(n.defaults,t),n.compatOptions=i.extend({},u.compatOptions),n.namespace=e,n.data=u.data,n.Item=p(r),i.htmlInit(n,e),s&&s.bridget&&s.bridget(e,n),n};var h={ms:1,s:1e3};return u.Item=r,u}(o,e,t,n,i)}.apply(t,i),void 0===r||(e.exports=r)}(window)},730:function(e,t){var n,i;"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self&&self,n=function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.destroy=g,e.polyfill=m;var t,n="undefined"!=typeof window,i=n&&window,r=n&&document,o=n&&r.documentElement,s=n&&r.createElement("a"),a=function(){return n&&"scrollBehavior"in s},l=function e(t){return function(e){return/^a$/i.test(e.tagName)}(t)&&function(e){if(!/#/.test(e.href))return!1;var t=e.pathname;return"/"!==t[0]&&(t="/"+t),e.hostname===location.hostname&&t===location.pathname&&(!e.search||e.search===location.search)}(t)?t:t.parentElement?e(t.parentElement):null},c=function(e){if("string"!=typeof e)return null;try{e=decodeURIComponent(e)}catch(e){}var t=e?r.getElementById(e.slice(1)):r.body;return"#top"!==e||t||(t=r.body),t},u=function(e){var t={preventScroll:!0};if(e.focus(t),r.activeElement!==e){var n=e.getAttribute("tabindex");if(e.setAttribute("tabindex","-1"),"none"===getComputedStyle(e).outlineStyle){var i=e.style.outlineStyle;e.style.outlineStyle="none",e.addEventListener("blur",(function t(){e.style.outlineStyle=i||"",null!=n?e.setAttribute("tabindex",n):e.removeAttribute("tabindex"),e.removeEventListener("blur",t)}))}
117e.focus(t)}},d=!1;if(n)try{var p=Object.defineProperty({},"preventScroll",{get:function(){d=!0}});s.focus(p)}catch(e){}var h=function(e){d||clearTimeout(t),e===r.body?i.scroll({top:0,left:0,behavior:"smooth"}):e.scrollIntoView({behavior:"smooth",block:"start"}),d?u(e):t=setTimeout(u.bind(null,e),450)},f=function(){for(var e=/scroll-behavior:[\s]*([^;"']+)/,t=getComputedStyle(o),n=[o.style.scrollBehavior,(e.exec(o.getAttribute("style"))||[])[1],t.getPropertyValue("--scroll-behavior"),(e.exec(t.fontFamily)||[])[1]],i=0;i<n.length;i++){var r=n[i]&&n[i].trim();if(/^smooth$/.test(r))return!0;if(/^(initial|inherit|auto|unset)$/.test(r))return!1}return!1},v={polyfill:m,destroy:g};function m(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(g(),n){var t=i.__forceSmoothscrollAnchorPolyfill__,o="boolean"==typeof e.force?e.force:t;if(a()&&!o)return;r.addEventListener("click",y,!1),r.addEventListener("scroll",w),i.addEventListener("hashchange",E)}return v}function g(){return n&&(r.removeEventListener("click",y,!1),r.removeEventListener("scroll",w),i.removeEventListener("hashchange",E)),v}function y(e){var t=e.metaKey||e.ctrlKey||e.shiftKey||0!==e.button;if(!e.defaultPrevented&&!t&&f()){var n=l(e.target);if(n){var i=c(n.hash);i&&(e.preventDefault(),h(i),history.pushState&&history.pushState(null,r.title,n.href))}}}e.default=v;var b=[],_=function(){return o.scrollTop||r.body.scrollTop};function E(){if(r.body&&f()){var e=c(location.hash);if(e){var t=_(),n=b[b[1]===t?0:1];i.scroll({top:n,behavior:"instant"}),h(e)}}}function w(){r.body&&(b[0]=b[1],b[1]=_())}m()},void 0===(i=n.apply(t,[t]))||(e.exports=i)},523:e=>{!function(){"use strict";e.exports={polyfill:function(){var e=window,t=document;if(!("scrollBehavior"in t.documentElement.style)||!0===e.__forceSmoothScrollPolyfill__){var n,i=e.HTMLElement||e.Element,r={scroll:e.scroll||e.scrollTo,scrollBy:e.scrollBy,elementScroll:i.prototype.scroll||a,scrollIntoView:i.prototype.scrollIntoView},o=e.performance&&e.performance.now?e.performance.now.bind(e.performance):Date.now,s=(n=e.navigator.userAgent,new RegExp(["MSIE ","Trident/","Edge/"].join("|")).test(n)?1:0);e.scroll=e.scrollTo=function(){void 0!==arguments[0]&&(!0!==l(arguments[0])?f.call(e,t.body,void 0!==arguments[0].left?~~arguments[0].left:e.scrollX||e.pageXOffset,void 0!==arguments[0].top?~~arguments[0].top:e.scrollY||e.pageYOffset):r.scroll.call(e,void 0!==arguments[0].left?arguments[0].left:"object"!=typeof arguments[0]?arguments[0]:e.scrollX||e.pageXOffset,void 0!==arguments[0].top?arguments[0].top:void 0!==arguments[1]?arguments[1]:e.scrollY||e.pageYOffset))},e.scrollBy=function(){void 0!==arguments[0]&&(l(arguments[0])?r.scrollBy.call(e,void 0!==arguments[0].left?arguments[0].left:"object"!=typeof arguments[0]?arguments[0]:0,void 0!==arguments[0].top?arguments[0].top:void 0!==arguments[1]?arguments[1]:0):f.call(e,t.body,~~arguments[0].left+(e.scrollX||e.pageXOffset),~~arguments[0].top+(e.scrollY||e.pageYOffset)))},i.prototype.scroll=i.prototype.scrollTo=function(){if(void 0!==arguments[0])if(!0!==l(arguments[0])){var e=arguments[0].left,t=arguments[0].top;f.call(this,this,void 0===e?this.scrollLeft:~~e,void 0===t?this.scrollTop:~~t)}else{if("number"==typeof arguments[0]&&void 0===arguments[1])throw new SyntaxError("Value could not be converted");r.elementScroll.call(this,void 0!==arguments[0].left?~~arguments[0].left:"object"!=typeof arguments[0]?~~arguments[0]:this.scrollLeft,void 0!==arguments[0].top?~~arguments[0].top:void 0!==arguments[1]?~~arguments[1]:this.scrollTop)}},i.prototype.scrollBy=function(){void 0!==arguments[0]&&(!0!==l(arguments[0])?this.scroll({left:~~arguments[0].left+this.scrollLeft,top:~~arguments[0].top+this.scrollTop,behavior:arguments[0].behavior}):r.elementScroll.call(this,void 0!==arguments[0].left?~~arguments[0].left+this.scrollLeft:~~arguments[0]+this.scrollLeft,void 0!==arguments[0].top?~~arguments[0].top+this.scrollTop:~~arguments[1]+this.scrollTop))},i.prototype.scrollIntoView=function(){if(!0!==l(arguments[0])){var n=p(this),i=n.getBoundingClientRect(),o=this.getBoundingClientRect();n!==t.body?(f.call(this,n,n.scrollLeft+o.left-i.left,n.scrollTop+o.top-i.top),"fixed"!==e.getComputedStyle(n).position&&e.scrollBy({left:i.left,top:i.top,behavior:"smooth"})):e.scrollBy({left:o.left,top:o.top,behavior:"smooth"})}else r.scrollIntoView.call(this,void 0===arguments[0]||arguments[0])}}function a(e,t){this.scrollLeft=e,this.scrollTop=t}function l(e){if(null===e||"object"!=typeof e||void 0===e.behavior||"auto"===e.behavior||"instant"===e.behavior)return!0;
117if("object"==typeof e&&"smooth"===e.behavior)return!1;throw new TypeError("behavior member of ScrollOptions "+e.behavior+" is not a valid value for enumeration ScrollBehavior.")}function c(e,t){return"Y"===t?e.clientHeight+s<e.scrollHeight:"X"===t?e.clientWidth+s<e.scrollWidth:void 0}function u(t,n){var i=e.getComputedStyle(t,null)["overflow"+n];return"auto"===i||"scroll"===i}function d(e){var t=c(e,"Y")&&u(e,"Y"),n=c(e,"X")&&u(e,"X");return t||n}function p(e){for(;e!==t.body&&!1===d(e);)e=e.parentNode||e.host;return e}function h(t){var n,i,r,s,a=(o()-t.startTime)/468;s=a=a>1?1:a,n=.5*(1-Math.cos(Math.PI*s)),i=t.startX+(t.x-t.startX)*n,r=t.startY+(t.y-t.startY)*n,t.method.call(t.scrollable,i,r),i===t.x&&r===t.y||e.requestAnimationFrame(h.bind(e,t))}function f(n,i,s){var l,c,u,d,p=o();n===t.body?(l=e,c=e.scrollX||e.pageXOffset,u=e.scrollY||e.pageYOffset,d=r.scroll):(l=n,c=n.scrollLeft,u=n.scrollTop,d=a),h({scrollable:l,method:d,startTime:p,startX:c,startY:u,x:i,y:s})}}}}()}},t={};function n(i){var r=t[i];if(void 0!==r)return r.exports;var o=t[i]={exports:{}};return e[i].call(o.exports,o,o.exports,n),o.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var i in t)n.o(t,i)&&!n.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{"use strict";var e=Object.freeze({});function t(e){return null==e}function i(e){return null!=e}function r(e){return!0===e}function o(e){return"string"==typeof e||"number"==typeof e||"symbol"==typeof e||"boolean"==typeof e}function s(e){return null!==e&&"object"==typeof e}var a=Object.prototype.toString;function l(e){return"[object Object]"===a.call(e)}function c(e){var t=parseFloat(String(e));return t>=0&&Math.floor(t)===t&&isFinite(e)}function u(e){return i(e)&&"function"==typeof e.then&&"function"==typeof e.catch}function d(e){return null==e?"":Array.isArray(e)||l(e)&&e.toString===a?JSON.stringify(e,null,2):String(e)}function p(e){var t=parseFloat(e);return isNaN(t)?e:t}function h(e,t){for(var n=Object.create(null),i=e.split(","),r=0;r<i.length;r++)n[i[r]]=!0;return t?function(e){return n[e.toLowerCase()]}:function(e){return n[e]}}var f=h("slot,component",!0),v=h("key,ref,slot,slot-scope,is");function m(e,t){if(e.length){var n=e.indexOf(t);if(n>-1)return e.splice(n,1)}}var g=Object.prototype.hasOwnProperty;function y(e,t){return g.call(e,t)}function b(e){var t=Object.create(null);return function(n){return t[n]||(t[n]=e(n))}}var _=/-(\w)/g,E=b((function(e){return e.replace(_,(function(e,t){return t?t.toUpperCase():""}))})),w=b((function(e){return e.charAt(0).toUpperCase()+e.slice(1)})),C=/\B([A-Z])/g,S=b((function(e){return e.replace(C,"-$1").toLowerCase()})),T=Function.prototype.bind?function(e,t){return e.bind(t)}:function(e,t){function n(n){var i=arguments.length;return i?i>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n};function x(e,t){t=t||0;for(var n=e.length-t,i=new Array(n);n--;)i[n]=e[n+t];return i}function O(e,t){for(var n in t)e[n]=t[n];return e}function L(e){for(var t={},n=0;n<e.length;n++)e[n]&&O(t,e[n]);return t}function A(e,t,n){}var I=function(e,t,n){return!1},k=function(e){return e};function M(e,t){if(e===t)return!0;var n=s(e),i=s(t);if(!n||!i)return!n&&!i&&String(e)===String(t);try{var r=Array.isArray(e),o=Array.isArray(t);if(r&&o)return e.length===t.length&&e.every((function(e,n){return M(e,t[n])}));if(e instanceof Date&&t instanceof Date)return e.getTime()===t.getTime();if(r||o)return!1;var a=Object.keys(e),l=Object.keys(t);return a.length===l.length&&a.every((function(n){return M(e[n],t[n])}))}catch(e){return!1}}function P(e,t){for(var n=0;n<e.length;n++)if(M(e[n],t))return n;return-1}function D(e){var t=!1;return function(){t||(t=!0,e.apply(this,arguments))}}var N="data-server-rendered",$=["component","directive","filter"],j=["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeDestroy","destroyed","activated","deactivated","errorCaptured","
117serverPrefetch"],R={optionMergeStrategies:Object.create(null),silent:!1,productionTip:!1,devtools:!1,performance:!1,errorHandler:null,warnHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:I,isReservedAttr:I,isUnknownElement:I,getTagNamespace:A,parsePlatformTagName:k,mustUseProp:I,async:!0,_lifecycleHooks:j},F=/a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/;function z(e){var t=(e+"").charCodeAt(0);return 36===t||95===t}function B(e,t,n,i){Object.defineProperty(e,t,{value:n,enumerable:!!i,writable:!0,configurable:!0})}var H,W=new RegExp("[^"+F.source+".$_\\d]"),G="__proto__"in{},q="undefined"!=typeof window,V="undefined"!=typeof WXEnvironment&&!!WXEnvironment.platform,Y=V&&WXEnvironment.platform.toLowerCase(),U=q&&window.navigator.userAgent.toLowerCase(),K=U&&/msie|trident/.test(U),X=U&&U.indexOf("msie 9.0")>0,J=U&&U.indexOf("edge/")>0,Q=(U&&U.indexOf("android"),U&&/iphone|ipad|ipod|ios/.test(U)||"ios"===Y),Z=(U&&/chrome\/\d+/.test(U),U&&/phantomjs/.test(U),U&&U.match(/firefox\/(\d+)/)),ee={}.watch,te=!1;if(q)try{var ne={};Object.defineProperty(ne,"passive",{get:function(){te=!0}}),window.addEventListener("test-passive",null,ne)}catch(e){}var ie=function(){return void 0===H&&(H=!q&&!V&&void 0!==n.g&&n.g.process&&"server"===n.g.process.env.VUE_ENV),H},re=q&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function oe(e){return"function"==typeof e&&/native code/.test(e.toString())}var se,ae="undefined"!=typeof Symbol&&oe(Symbol)&&"undefined"!=typeof Reflect&&oe(Reflect.ownKeys);se="undefined"!=typeof Set&&oe(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var le=A,ce=0,ue=function(){this.id=ce++,this.subs=[]};ue.prototype.addSub=function(e){this.subs.push(e)},ue.prototype.removeSub=function(e){m(this.subs,e)}
vendor: 43,599 bytes, line 117
117,ue.prototype.depend=function(){ue.target&&ue.target.addDep(this)},ue.prototype.notify=function(){for(var e=this.subs.slice(),t=0,n=e.length;t<n;t++)e[t].update()},ue.target=null;var de=[];function pe(e){de.push(e),ue.target=e}function he(){de.pop(),ue.target=de[de.length-1]}var fe=function(e,t,n,i,r,o,s,a){this.tag=e,this.data=t,this.children=n,this.text=i,this.elm=r,this.ns=void 0,this.context=o,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=t&&t.key,this.componentOptions=s,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=a,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1},ve={child:{configurable:!0}};ve.child.get=function(){return this.componentInstance},Object.defineProperties(fe.prototype,ve);var me=function(e){void 0===e&&(e="");var t=new fe;return t.text=e,t.isComment=!0,t};function ge(e){return new fe(void 0,void 0,void 0,String(e))}function ye(e){var t=new fe(e.tag,e.data,e.children&&e.children.slice(),e.text,e.elm,e.context,e.componentOptions,e.asyncFactory);return t.ns=e.ns,t.isStatic=e.isStatic,t.key=e.key,t.isComment=e.isComment,t.fnContext=e.fnContext,t.fnOptions=e.fnOptions,t.fnScopeId=e.fnScopeId,t.asyncMeta=e.asyncMeta,t.isCloned=!0,t}var be=Array.prototype,_e=Object.create(be);["push","pop","shift","unshift","splice","sort","reverse"].forEach((function(e){var t=be[e];B(_e,e,(function(){for(var n=[],i=arguments.length;i--;)n[i]=arguments[i];var r,o=t.apply(this,n),s=this.__ob__;switch(e){case"push":case"unshift":r=n;break;case"splice":r=n.slice(2)}return r&&s.observeArray(r),s.dep.notify(),o}))}));var Ee=Object.getOwnPropertyNames(_e),we=!0;function Ce(e){we=e}var Se=function(e){this.value=e,this.dep=new ue,this.vmCount=0,B(e,"__ob__",this),Array.isArray(e)?(G?function(e,t){e.__proto__=t}(e,_e):function(e,t,n){for(var i=0,r=n.length;i<r;i++){var o=n[i];B(e,o,t[o])}}(e,_e,Ee),this.observeArray(e)):this.walk(e)};function Te(e,t){var n;if(s(e)&&!(e instanceof fe))return y(e,"__ob__")&&e.__ob__ instanceof Se?n=e.__ob__:we&&!ie()&&(Array.isArray(e)||l(e))&&Object.isExtensible(e)&&!e._isVue&&(n=new Se(e)),t&&n&&n.vmCount++,n}function xe(e,t,n,i,r){var o=new ue,s=Object.getOwnPropertyDescriptor(e,t);if(!s||!1!==s.configurable){var a=s&&s.get,l=s&&s.set;a&&!l||2!==arguments.length||(n=e[t]);var c=!r&&Te(n);Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){var t=a?a.call(e):n;return ue.target&&(o.depend(),c&&(c.dep.depend(),Array.isArray(t)&&Ae(t))),t},set:function(t){var i=a?a.call(e):n;t===i||t!=t&&i!=i||a&&!l||(l?l.call(e,t):n=t,c=!r&&Te(t),o.notify())}})}}function Oe(e,t,n){if(Array.isArray(e)&&c(t))return e.length=Math.max(e.length,t),e.splice(t,1,n),n;if(t in e&&!(t in Object.prototype))return e[t]=n,n;var i=e.__ob__;return e._isVue||i&&i.vmCount?n:i?(xe(i.value,t,n),i.dep.notify(),n):(e[t]=n,n)}function Le(e,t){if(Array.isArray(e)&&c(t))e.splice(t,1);else{var n=e.__ob__;e._isVue||n&&n.vmCount||y(e,t)&&(delete e[t],n&&n.dep.notify())}}function Ae(e){for(var t=void 0,n=0,i=e.length;n<i;n++)(t=e[n])&&t.__ob__&&t.__ob__.dep.depend(),Array.isArray(t)&&Ae(t)}Se.prototype.walk=function(e){for(var t=Object.keys(e),n=0;n<t.length;n++)xe(e,t[n])},Se.prototype.observeArray=function(e){for(var t=0,n=e.length;t<n;t++)Te(e[t])};var Ie=R.optionMergeStrategies;function ke(e,t){if(!t)return e;for(var n,i,r,o=ae?Reflect.ownKeys(t):Object.keys(t),s=0;s<o.length;s++)"__ob__"!==(n=o[s])&&(i=e[n],r=t[n],y(e,n)?i!==r&&l(i)&&l(r)&&ke(i,r):Oe(e,n,r));return e}function Me(e,t,n){return n?function(){var i="function"==typeof t?t.call(n,n):t,r="function"==typeof e?e.call(n,n):e;return i?ke(i,r):r}:t?e?function(){return ke("function"==typeof t?t.call(this,this):t,"function"==typeof e?e.call(this,this):e)}:t:e}function Pe(e,t){var n=t?e?e.concat(t):Array.isArray(t)?t:[t]:e;return n?function(e){for(var t=[],n=0;n<e.length;n++)-1===t.indexOf(e[n])&&t.push(e[n]);return t}(n):n}function De(e,t,n,i){var r=Object.create(e||null);return t?O(r,t):r}Ie.data=function(e,t,n){return n?Me(e,t,n):t&&"function"!=typeof t?e:Me(e,t)},j.forEach((function(e){Ie[e]=Pe})),$.forEach((function(e){Ie[e+"s"]=De})),Ie.watch=function(e,t,n,i){if(e===ee&&(e=void 0),t===ee&&(t=void 0),!t)return Object.create(e||null);if(!e)return t;var r={};for(var o in O(r,e),t){var s=r[o],a=t[o];s&&!Array.isArray(s)&&(s=[s]),r[o]=s?s.concat(a):Array.isArray(a)?a:[a]}return r},Ie.props=Ie.methods=Ie.inject=Ie.computed=function(e,t,n,i){if(!e)return t;var r=Object.create(null);return O(r,e),t&&O(r,t),r},Ie.provide=Me;var Ne=function(e,t){return void 0===t?e:t};function $e(e,t,n){if("function"==typeof t&&(t=t.options),function(e,t){var n=e.props;if(n){var i,r,o={};if(Array.isArray(n))for(i=n.length;i--;)"string"==typeof(r=n[i])&&(o[E(r)]={type:null});else if(l(n))for(var s in n)r=n[s],o[E(s)]=l(r)?r:{type:r};e.props=o}}(t),function(e,t){var n=e.inject;if(n){var i=e.inject={};if(Array.isArray(n))for(var r=0;r<n.length;r++)i[n[r]]={from:n[r]};else if(l(n))for(var o in n){var s=n[o];i[o]=l(s)?O({from:o},s):{from:s}}}}(t),function(e){var t=e.directives;if(t)for(var n in t){var i=t[n];"function"==typeof i&&(t[n]={bind:i,update:i})}}(t),!t._base&&(t.extends&&(e=$e(e,t.extends,n)),t.mixins))for(var i=0,r=t.mixins.length;i<r;i++)e=$e(e,t.mixins[i],n);var o,s={};for(o in e)a(o);for(o in t)y(e,o)||a(o);function a(i){var r=Ie[i]||Ne;s[i]=r(e[i],t[i],n,i)}return s}function je(e,t,n,i){if("string"==typeof n){var r=e[t];if(y(r,n))return r[n];var o=E(n);if(y(r,o))return r[o];var s=w(o);return y(r,s)?r[s]:r[n]||r[o]||r[s]}}function Re(e,t,n,i){var r=t[e],o=!y(n,e),s=n[e],a=He(Boolean,r.type);if(a>-1)if(o&&!y(r,"default"))s=!1;else if(""===s||s===S(e)){var l=He(String,r.type);(l<0||a<l)&&(s=!0)}if(void 0===s){s=function(e,t,n){if(y(t,"default")){var i=t.default;return e&&e.$options.propsData&&void 0===e.$options.propsData[n]&&void 0!==e._props[n]?e._props[n]:"function"==typeof i&&"Function"!==ze(t.type)?i.call(e):i}}(i,r,e);var c=we;Ce(!0),Te(s),Ce(c)}return s}var Fe=/^\s*function (\w+)/;function ze(e){var t=e&&e.toString().match(Fe);return t?t[1]:""}function Be(e,t){return ze(e)===ze(t)}function He(e,t){if(!Array.isArray(t))return Be(t,e)?0:-1;for(var n=0,i=t.length;n<i;n++)if(Be(t[n],e))return n;return-1}function We(e,t,n){pe();try{if(t)for(var i=t;i=i.$parent;){var r=i.$options.errorCaptured;if(r)for(var o=0;o<r.length;o++)try{if(!1===r[o].call(i,e,t,n))return}catch(e){qe(e,i,"errorCaptured hook")}}qe(e,t,n)}finally{he()}}function Ge(e,t,n,i,r){var o;try{(o=n?e.apply(t,n):e.call(t))&&!o._isVue&&u(o)&&!o._handled&&(o.catch((function(e){return We(e,i,r+" (Promise/async)")})),o._handled=!0)}catch(e){We(e,i,r)}return o}function qe(e,t,n){if(R.errorHandler)try{return R.errorHandler.call(null,e,t,n)}catch(t){t!==e&&Ve(t)}Ve(e)}function Ve(e,t,n){if(!q&&!V||"undefined"==typeof console)throw e;console.error(e)}var Ye,Ue=!1,Ke=[],Xe=!1;function Je(){Xe=!1;var e=Ke.slice(0);Ke.length=0;for(var t=0;t<e.length;t++)e[t]()}if("undefined"!=typeof Promise&&oe(Promise)){var Qe=Promise.resolve();Ye=function(){Qe.then(Je),Q&&setTimeout(A)},Ue=!0}else if(K||"undefined"==typeof MutationObserver||!oe(MutationObserver)&&"[object MutationObserverConstructor]"!==MutationObserver.toString())Ye="undefined"!=typeof setImmediate&&oe(setImmediate)?function(){setImmediate(Je)}:function(){setTimeout(Je,0)};else{var Ze=1,et=new MutationObserver(Je),tt=document.createTextNode(String(Ze));et.observe(tt,{characterData:!0}),Ye=function(){Ze=(Ze+1)%2,tt.data=String(Ze)},Ue=!0}function nt(e,t){var n;if(Ke.push((function(){if(e)try{e.call(t)}catch(e){We(e,t,"nextTick")}else n&&n(t)})),Xe||(Xe=!0,Ye()),!e&&"undefined"!=typeof Promise)return new Promise((function(e){n=e}))}var it=new se;function rt(e){ot(e,it),it.clear()}function ot(e,t){var n,i,r=Array.isArray(e);if(!(!r&&!s(e)||Object.isFrozen(e)||e instanceof fe)){if(e.__ob__){var o=e.__ob__.dep.id;if(t.has(o))return;t.add(o)}if(r)for(n=e.length;n--;)ot(e[n],t);else for(n=(i=Object.keys(e)).length;n--;)ot(e[i[n]],t)}}var st=b((function(e){var t="&"===e.charAt(0),n="~"===(e=t?e.slice(1):e).charAt(0),i="!"===(e=n?e.slice(1):e).charAt(0);return{name:e=i?e.slice(1):e,once:n,capture:i,passive:t}}));function at(e,t){function n(){var e=arguments,i=n.fns;if(!Array.isArray(i))return Ge(i,null,arguments,t,"v-on handler");for(var r=i.slice(),o=0;o<r.length;o++)Ge(r[o],null,e,t,"v-on handler")}return n.fns=e,n}function lt(e,n,i,o,s,a){var l,c,u,d;for(l in e)c=e[l],u=n[l],d=st(l),t(c)||(t(u)?(t(c.fns)&&(c=e[l]=at(c,a)),r(d.once)&&(c=e[l]=s(d.name,c,d.capture)),i(d.name,c,d.capture,d.passive,d.params)):c!==u&&(u.fns=c,e[l]=u));for(l in n)t(e[l])&&o((d=st(l)).name,n[l],d.capture)}function ct(e,n,o){var s;e instanceof fe&&(e=e.data.hook||(e.data.hook={}));var a=e[n];function l(){o.apply(this,arguments),m(s.fns,l)}t(a)?s=at([l]):i(a.fns)&&r(a.merged)?(s=a).fns.push(l):s=at([a,l]),s.merged=!0,e[n]=s}function ut(e,t,n,r,o){if(i(t)){if(y(t,n))return e[n]=t[n],o||delete t[n],!0;if(y(t,r))return e[n]=t[r],o||delete t[r],!0}return!1}function dt(e){return o(e)?[ge(e)]:Array.isArray(e)?ht(e):void 0}function pt(e){return i(e)&&i(e.text)&&!1===e.isComment}function ht(e,n){var s,a,l,c,u=[];for(s=0;s<e.length;s++)t(a=e[s])||"boolean"==typeof a||(c=u[l=u.length-1],Array.isArray(a)?a.length>0&&(pt((a=ht(a,(n||"")+"_"+s))[0])&&pt(c)&&(u[l]=ge(c.text+a[0].text),a.shift()),u.push.apply(u,a)):o(a)?pt(c)?u[l]=ge(c.text+a):""!==a&&u.push(ge(a)):pt(a)&&pt(c)?u[l]=ge(c.text+a.text):(r(e._isVList)&&i(a.tag)&&t(a.key)&&i(n)&&(a.key="__vlist"+n+"_"+s+"__"),u.push(a)));return u}function ft(e,t){if(e){for(var n=Object.create(null),i=ae?Reflect.ownKeys(e):Object.keys(e),r=0;r<i.length;r++){var o=i[r];if("__ob__"!==o){for(var s=e[o].from,a=t;a;){if(a._provided&&y(a._provided,s)){n[o]=a._provided[s];break}a=a.$parent}if(!a&&"default"in e[o]){var l=e[o].default;n[o]="function"==typeof l?l.call(t):l}}}return n}}function vt(e,t){if(!e||!e.length)return{};for(var n={},i=0,r=e.length;i<r;i++){var o=e[i],s=o.data;if(s&&s.attrs&&s.attrs.slot&&delete s.attrs.slot,o.context!==t&&o.fnContext!==t||!s||null==s.slot)(n.default||(n.default=[])).push(o);else{var a=s.slot,l=n[a]||(n[a]=[]);"template"===o.tag?l.push.apply(l,o.children||[]):l.push(o)}}for(var c in n)n[c].every(mt)&&delete n[c];return n}function mt(e){return e.isComment&&!e.asyncFactory||" "===e.text}function gt(e){return e.isComment&&e.asyncFactory}function yt(t,n,i){var r,o=Object.keys(n).length>0,s=t?!!t.$stable:!o,a=t&&t.$key;if(t){if(t._normalized)return t._normalized;if(s&&i&&i!==e&&a===i.$key&&!o&&!i.$hasNormal)return i;for(var l in r={},t)t[l]&&"$"!==l[0]&&(r[l]=bt(n,l,t[l]))}else r={};for(var c in n)c in r||(r[c]=_t(n,c));return t&&Object.isExtensible(t)&&(t._normalized=r),B(r,"$stable",s),B(r,"$key",a),B(r,"$hasNormal",o),r}function bt(e,t,n){var i=function(){var e=arguments.length?n.apply(null,arguments):n({}),t=(e=e&&"object"==typeof e&&!Array.isArray(e)?[e]:dt(e))&&e[0];return e&&(!t||1===e.length&&t.isComment&&!gt(t))?void 0:e};return n.proxy&&Object.defineProperty(e,t,{get:i,enumerable:!0,configurable:!0}),i}function _t(e,t){return function(){return e[t]}}function Et(e,t){var n,r,o,a,l;if(Array.isArray(e)||"string"==typeof e)for(n=new Array(e.length),r=0,o=e.length;r<o;r++)n[r]=t(e[r],r);else if("number"==typeof e)for(n=new Array(e),r=0;r<e;r++)n[r]=t(r+1,r);else if(s(e))if(ae&&e[Symbol.iterator]){n=[];for(var c=e[Symbol.iterator](),u=c.next();!u.done;)n.push(t(u.value,n.length)),u=c.next()}else for(a=Object.keys(e),n=new Array(a.length),r=0,o=a.length;r<o;r++)l=a[r],n[r]=t(e[l],l,r);return i(n)||(n=[]),n._isVList=!0,n}function wt(e,t,n,i){var r,o=this.$scopedSlots[e];o?(n=n||{},i&&(n=O(O({},i),n)),r=o(n)||("function"==typeof t?t():t)):r=this.$slots[e]||("function"==typeof t?t():t);var s=n&&n.slot;return s?this.$createElement("template",{slot:s},r):r}function Ct(e){return je(this.$options,"filters",e)||k}function St(e,t){return Array.isArray(e)?-1===e.indexOf(t):e!==t}function Tt(e,t,n,i,r){var o=R.keyCodes[t]||n;return r&&i&&!R.keyCodes[t]?St(r,i):o?St(o,e):i?S(i)!==t:void 0===e}function xt(e,t,n,i,r){if(n&&s(n)){var o;Array.isArray(n)&&(n=L(n));var a=function(s){if("class"===s||"style"===s||v(s))o=e;else{var a=e.attrs&&e.attrs.type;o=i||R.mustUseProp(t,a,s)?e.domProps||(e.domProps={}):e.attrs||(e.attrs={})}var l=E(s),c=S(s);l in o||c in o||(o[s]=n[s],r&&((e.on||(e.on={}))["update:"+s]=function(e){n[s]=e}))};for(var l in n)a(l)}return e}function Ot(e,t){var n=this._staticTrees||(this._staticTrees=[]),i=n[e];return i&&!t||At(i=n[e]=this.$options.staticRenderFns[e].call(this._renderProxy,null,this),"__static__"+e,!1),i}function Lt(e,t,n){return At(e,"__once__"+t+(n?"_"+n:""),!0),e}function At(e,t,n){if(Array.isArray(e))for(var i=0;i<e.length;i++)e[i]&&"string"!=typeof e[i]&&It(e[i],t+"_"+i,n);else It(e,t,n)}function It(e,t,n){e.isStatic=!0,e.key=t,e.isOnce=n}function kt(e,t){if(t&&l(t)){var n=e.on=e.on?O({},e.on):{};for(var i in t){var r=n[i],o=t[i];n[i]=r?[].concat(r,o):o}}return e}function Mt(e,t,n,i){t=t||{$stable:!n};for(var r=0;r<e.length;r++){var o=e[r];Array.isArray(o)?Mt(o,t,n):o&&(o.proxy&&(o.fn.proxy=!0),t[o.key]=o.fn)}return i&&(t.$key=i),t}function Pt(e,t){for(var n=0;n<t.length;n+=2){var i=t[n];"string"==typeof i&&i&&(e[t[n]]=t[n+1])}return e}function Dt(e,t){return"string"==typeof e?t+e:e}function Nt(e){e._o=Lt,e._n=p,e._s=d,e._l=Et,e._t=wt,e._q=M,e._i=P,e._m=Ot,e._f=Ct,e._k=Tt,e._b=xt,e._v=ge,e._e=me,e._u=Mt,e._g=kt,e._d=Pt,e._p=Dt}function $t(t,n,i,o,s){var a,l=this,c=s.options;y(o,"_uid")?(a=Object.create(o))._original=o:(a=o,o=o._original);var u=r(c._compiled),d=!u;this.data=t,this.props=n,this.children=i,this.parent=o,this.listeners=t.on||e,this.injections=ft(c.inject,o),this.slots=function(){return l.$slots||yt(t.scopedSlots,l.$slots=vt(i,o)),l.$slots},Object.defineProperty(this,"scopedSlots",{enumerable:!0,get:function(){return yt(t.scopedSlots,this.slots())}}),u&&(this.$options=c,this.$slots=this.slots(),this.$scopedSlots=yt(t.scopedSlots,this.$slots)),c._scopeId?this._c=function(e,t,n,i){var r=Wt(a,e,t,n,i,d);return r&&!Array.isArray(r)&&(r.fnScopeId=c._scopeId,r.fnContext=o),r}:this._c=function(e,t,n,i){return Wt(a,e,t,n,i,d)}}function jt(e,t,n,i,r){var o=ye(e);return o.fnContext=n,o.fnOptions=i,t.slot&&((o.data||(o.data={})).slot=t.slot),o}function Rt(e,t){for(var n in t)e[E(n)]=t[n]}Nt($t.prototype);var Ft={init:function(e,t){if(e.componentInstance&&!e.componentInstance._isDestroyed&&e.data.keepAlive){var n=e;Ft.prepatch(n,n)}else(e.componentInstance=function(e,t){var n={_isComponent:!0,_parentVnode:e,parent:t},r=e.data.inlineTemplate;return i(r)&&(n.render=r.render,n.staticRenderFns=r.staticRenderFns),new e.componentOptions.Ctor(n)}(e,Zt)).$mount(t?e.elm:void 0,t)},prepatch:function(t,n){var i=n.componentOptions;!function(t,n,i,r,o){var s=r.data.scopedSlots,a=t.$scopedSlots,l=!!(s&&!s.$stable||a!==e&&!a.$stable||s&&t.$scopedSlots.$key!==s.$key||!s&&t.$scopedSlots.$key),c=!!(o||t.$options._renderChildren||l);if(t.$options._parentVnode=r,t.$vnode=r,t._vnode&&(t._vnode.parent=r),t.$options._renderChildren=o,t.$attrs=r.data.attrs||e,t.$listeners=i||e,n&&t.$options.props){Ce(!1);for(var u=t._props,d=t.$options._propKeys||[],p=0;p<d.length;p++){var h=d[p],f=t.$options.props;u[h]=Re(h,f,n,t)}Ce(!0),t.$options.propsData=n}i=i||e;var v=t.$options._parentListeners;t.$options._parentListeners=i,Qt(t,i,v),c&&(t.$slots=vt(o,r.context),t.$forceUpdate())}(n.componentInstance=t.componentInstance,i.propsData,i.listeners,n,i.children)},insert:function(e){var t,n=e.context,i=e.componentInstance;i._isMounted||(i._isMounted=!0,on(i,"mounted")),e.data.keepAlive&&(n._isMounted?((t=i)._inactive=!1,an.push(t)):nn(i,!0))},destroy:function(e){var t=e.componentInstance;t._isDestroyed||(e.data.keepAlive?rn(t,!0):t.$destroy())}},zt=Object.keys(Ft);function Bt(n,o,a,l,c){if(!t(n)){var d=a.$options._base;if(s(n)&&(n=d.extend(n)),"function"==typeof n){var p;if(t(n.cid)&&(n=function(e,n){if(r(e.error)&&i(e.errorComp))return e.errorComp;if(i(e.resolved))return e.resolved;var o=Vt;if(o&&i(e.owners)&&-1===e.owners.indexOf(o)&&e.owners.push(o),r(e.loading)&&i(e.loadingComp))return e.loadingComp;if(o&&!i(e.owners)){var a=e.owners=[o],l=!0,c=null,d=null;o.$on("hook:destroyed",(function(){return m(a,o)}));var p=function(e){for(var t=0,n=a.length;t<n;t++)a[t].$forceUpdate();e&&(a.length=0,null!==c&&(clearTimeout(c),c=null),null!==d&&(clearTimeout(d),d=null))},h=D((function(t){e.resolved=Yt(t,n),l?a.length=0:p(!0)})),f=D((function(t){i(e.errorComp)&&(e.error=!0,p(!0))})),v=e(h,f);return s(v)&&(u(v)?t(e.resolved)&&v.then(h,f):u(v.component)&&(v.component.then(h,f),i(v.error)&&(e.errorComp=Yt(v.error,n)),i(v.loading)&&(e.loadingComp=Yt(v.loading,n),0===v.delay?e.loading=!0:c=setTimeout((function(){c=null,t(e.resolved)&&t(e.error)&&(e.loading=!0,p(!1))}),v.delay||200)),i(v.timeout)&&(d=setTimeout((function(){d=null,t(e.resolved)&&f(null)}),v.timeout)))),l=!1,e.loading?e.loadingComp:e.resolved}}(p=n,d),void 0===n))return function(e,t,n,i,r){var o=me();return o.asyncFactory=e,o.asyncMeta={data:t,context:n,children:i,tag:r},o}(p,o,a,l,c);o=o||{},xn(n),i(o.model)&&function(e,t){var n=e.model&&e.model.prop||"value",r=e.model&&e.model.event||"input";(t.attrs||(t.attrs={}))[n]=t.model.value;var o=t.on||(t.on={}),s=o[r],a=t.model.callback;i(s)?(Array.isArray(s)?-1===s.indexOf(a):s!==a)&&(o[r]=[a].concat(s)):o[r]=a}(n.options,o);var h=function(e,n,r){var o=n.options.props;if(!t(o)){var s={},a=e.attrs,l=e.props;if(i(a)||i(l))for(var c in o){var u=S(c);ut(s,l,c,u,!0)||ut(s,a,c,u,!1)}return s}}(o,n);if(r(n.options.functional))return function(t,n,r,o,s){var a=t.options,l={},c=a.props;if(i(c))for(var u in c)l[u]=Re(u,c,n||e);else i(r.attrs)&&Rt(l,r.attrs),i(r.props)&&Rt(l,r.props);var d=new $t(r,l,s,o,t),p=a.render.call(null,d._c,d);if(p instanceof fe)return jt(p,r,d.parent,a);if(Array.isArray(p)){for(var h=dt(p)||[],f=new Array(h.length),v=0;v<h.length;v++)f[v]=jt(h[v],r,d.parent,a);return f}}(n,h,o,a,l);var f=o.on;if(o.on=o.nativeOn,r(n.options.abstract)){var v=o.slot;o={},v&&(o.slot=v)}!function(e){for(var t=e.hook||(e.hook={}),n=0;n<zt.length;n++){var i=zt[n],r=t[i],o=Ft[i];r===o||r&&r._merged||(t[i]=r?Ht(o,r):o)}}(o);var g=n.options.name||c;return new fe("vue-component-"+n.cid+(g?"-"+g:""),o,void 0,void 0,void 0,a,{Ctor:n,propsData:h,listeners:f,tag:c,children:l},p)}}}function Ht(e,t){var n=function(n,i){e(n,i),t(n,i)};return n._merged=!0,n}function Wt(e,t,n,a,l,c){return(Array.isArray(n)||o(n))&&(l=a,a=n,n=void 0),r(c)&&(l=2),function(e,t,n,r,o){if(i(n)&&i(n.__ob__))return me();if(i(n)&&i(n.is)&&(t=n.is),!t)return me();var a,l,c;(Array.isArray(r)&&"function"==typeof r[0]&&((n=n||{}).scopedSlots={default:r[0]},r.length=0),2===o?r=dt(r):1===o&&(r=function(e){for(var t=0;t<e.length;t++)if(Array.isArray(e[t]))return Array.prototype.concat.apply([],e);return e}(r)),"string"==typeof t)?(l=e.$vnode&&e.$vnode.ns||R.getTagNamespace(t),a=R.isReservedTag(t)?new fe(R.parsePlatformTagName(t),n,r,void 0,void 0,e):n&&n.pre||!i(c=je(e.$options,"components",t))?new fe(t,n,r,void 0,void 0,e):Bt(c,n,e,r,t)):a=Bt(t,n,e,r);return Array.isArray(a)?a:i(a)?(i(l)&&Gt(a,l),i(n)&&function(e){s(e.style)&&rt(e.style),s(e.class)&&rt(e.class)}(n),a):me()}(e,t,n,a,l)}function Gt(e,n,o){if(e.ns=n,"foreignObject"===e.tag&&(n=void 0,o=!0),i(e.children))for(var s=0,a=e.children.length;s<a;s++){var l=e.children[s];i(l.tag)&&(t(l.ns)||r(o)&&"svg"!==l.tag)&&Gt(l,n,o)}}var qt,Vt=null;function Yt(e,t){return(e.__esModule||ae&&"Module"===e[Symbol.toStringTag])&&(e=e.default),s(e)?t.extend(e):e}function Ut(e){if(Array.isArray(e))for(var t=0;t<e.length;t++){var n=e[t];if(i(n)&&(i(n.componentOptions)||gt(n)))return n}}function Kt(e,t){qt.$on(e,t)}function Xt(e,t){qt.$off(e,t)}function Jt(e,t){var n=qt;return function i(){var r=t.apply(null,arguments);null!==r&&n.$off(e,i)}}function Qt(e,t,n){qt=e,lt(t,n||{},Kt,Xt,Jt,e),qt=void 0}var Zt=null;function en(e){var t=Zt;return Zt=e,function(){Zt=t}}function tn(e){for(;e&&(e=e.$parent);)if(e._inactive)return!0;return!1}function nn(e,t){if(t){if(e._directInactive=!1,tn(e))return}else if(e._directInactive)return;if(e._inactive||null===e._inactive){e._inactive=!1;for(var n=0;n<e.$children.length;n++)nn(e.$children[n]);on(e,"activated")}}function rn(e,t){if(!(t&&(e._directInactive=!0,tn(e))||e._inactive)){e._inactive=!0;for(var n=0;n<e.$children.length;n++)rn(e.$children[n]);on(e,"deactivated")}}function on(e,t){pe();var n=e.$options[t],i=t+" hook";if(n)for(var r=0,o=n.length;r<o;r++)Ge(n[r],e,null,e,i);e._hasHookEvent&&e.$emit("hook:"+t),he()}var sn=[],an=[],ln={},cn=!1,un=!1,dn=0,pn=0,hn=Date.now;if(q&&!K){var fn=window.performance;fn&&"function"==typeof fn.now&&hn()>document.createEvent("Event").timeStamp&&(hn=function(){return fn.now()})}function vn(){var e,t;for(pn=hn(),un=!0,sn.sort((function(e,t){return e.id-t.id})),dn=0;dn<sn.length;dn++)(e=sn[dn]).before&&e.before(),t=e.id,ln[t]=null,e.run();var n=an.slice(),i=sn.slice();dn=sn.length=an.length=0,ln={},cn=un=!1,function(e){for(var t=0;t<e.length;t++)e[t]._inactive=!0,nn(e[t],!0)}(n),function(e){for(var t=e.length;t--;){var n=e[t],i=n.vm;i._watcher===n&&i._isMounted&&!i._isDestroyed&&on(i,"updated")}}(i),re&&R.devtools&&re.emit("flush")}var mn=0,gn=function(e,t,n,i,r){this.vm=e,r&&(e._watcher=this),e._watchers.push(this),i?(this.deep=!!i.deep,this.user=!!i.user,this.lazy=!!i.lazy,this.sync=!!i.sync,this.before=i.before):this.deep=this.user=this.lazy=this.sync=!1,this.cb=n,this.id=++mn,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new se,this.newDepIds=new se,this.expression="","function"==typeof t?this.getter=t:(this.getter=function(e){if(!W.test(e)){var t=e.split(".");return function(e){for(var n=0;n<t.length;n++){if(!e)return;e=e[t[n]]}return e}}}(t),this.getter||(this.getter=A)),this.value=this.lazy?void 0:this.get()};gn.prototype.get=function(){var e;pe(this);var t=this.vm;try{e=this.getter.call(t,t)}catch(e){if(!this.user)throw e;We(e,t,'getter for watcher "'+this.expression+'"')}finally{this.deep&&rt(e),he(),this.cleanupDeps()}return e},gn.prototype.addDep=function(e){var t=e.id;this.newDepIds.has(t)||(this.newDepIds.add(t),this.newDeps.push(e),this.depIds.has(t)||e.addSub(this))},gn.prototype.cleanupDeps=function(){for(var e=this.deps.length;e--;){var t=this.deps[e];this.newDepIds.has(t.id)||t.removeSub(this)}var n=this.depIds;this.depIds=this.newDepIds,this.newDepIds=n,this.newDepIds.clear(),n=this.deps,this.deps=this.newDeps,this.newDeps=n,this.newDeps.length=0},gn.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():function(e){var t=e.id;if(null==ln[t]){if(ln[t]=!0,un){for(var n=sn.length-1;n>dn&&sn[n].id>e.id;)n--;sn.splice(n+1,0,e)}else sn.push(e);cn||(cn=!0,nt(vn))}}(this)},gn.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||s(e)||this.deep){var t=this.value;if(this.value=e,this.user){var n='callback for watcher "'+this.expression+'"';Ge(this.cb,this.vm,[e,t],this.vm,n)}else this.cb.call(this.vm,e,t)}}},gn.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},gn.prototype.depend=function(){for(var e=this.deps.length;e--;)this.deps[e].depend()},gn.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||m(this.vm._watchers,this);for(var e=this.deps.length;e--;)this.deps[e].removeSub(this);this.active=!1}};var yn={enumerable:!0,configurable:!0,get:A,set:A};function bn(e,t,n){yn.get=function(){return this[t][n]},yn.set=function(e){this[t][n]=e},Object.defineProperty(e,n,yn)}var _n={lazy:!0};function En(e,t,n){var i=!ie();"function"==typeof n?(yn.get=i?wn(t):Cn(n),yn.set=A):(yn.get=n.get?i&&!1!==n.cache?wn(t):Cn(n.get):A,yn.set=n.set||A),Object.defineProperty(e,t,yn)}function wn(e){return function(){var t=this._computedWatchers&&this._computedWatchers[e];if(t)return t.dirty&&t.evaluate(),ue.target&&t.depend(),t.value}}function Cn(e){return function(){return e.call(this,this)}}function Sn(e,t,n,i){return l(n)&&(i=n,n=n.handler),"string"==typeof n&&(n=e[n]),e.$watch(t,n,i)}var Tn=0;function xn(e){var t=e.options;if(e.super){var n=xn(e.super);if(n!==e.superOptions){e.superOptions=n;var i=function(e){var t,n=e.options,i=e.sealedOptions;for(var r in n)n[r]!==i[r]&&(t||(t={}),t[r]=n[r]);return t}(e);i&&O(e.extendOptions,i),(t=e.options=$e(n,e.extendOptions)).name&&(t.components[t.name]=e)}}return t}function On(e){this._init(e)}function Ln(e){return e&&(e.Ctor.options.name||e.tag)}function An(e,t){return Array.isArray(e)?e.indexOf(t)>-1:"string"==typeof e?e.split(",").indexOf(t)>-1:(n=e,!("[object RegExp]"!==a.call(n))&&e.test(t));var n}function In(e,t){var n=e.cache,i=e.keys,r=e._vnode;for(var o in n){var s=n[o];if(s){var a=s.name;a&&!t(a)&&kn(n,o,i,r)}}}function kn(e,t,n,i){var r=e[t];!r||i&&r.tag===i.tag||r.componentInstance.$destroy(),e[t]=null,m(n,t)}!function(t){t.prototype._init=function(t){var n=this;n._uid=Tn++,n._isVue=!0,t&&t._isComponent?function(e,t){var n=e.$options=Object.create(e.constructor.options),i=t._parentVnode;n.parent=t.parent,n._parentVnode=i;var r=i.componentOptions;n.propsData=r.propsData,n._parentListeners=r.listeners,n._renderChildren=r.children,n._componentTag=r.tag,t.render&&(n.render=t.render,n.staticRenderFns=t.staticRenderFns)}(n,t):n.$options=$e(xn(n.constructor),t||{},n),n._renderProxy=n,n._self=n,function(e){var t=e.$options,n=t.parent;if(n&&!t.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(e)}e.$parent=n,e.$root=n?n.$root:e,e.$children=[],e.$refs={},e._watcher=null,e._inactive=null,e._directInactive=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}(n),function(e){e._events=Object.create(null),e._hasHookEvent=!1;var t=e.$options._parentListeners;t&&Qt(e,t)}(n),function(t){t._vnode=null,t._staticTrees=null;var n=t.$options,i=t.$vnode=n._parentVnode,r=i&&i.context;t.$slots=vt(n._renderChildren,r),t.$scopedSlots=e,t._c=function(e,n,i,r){return Wt(t,e,n,i,r,!1)},t.$createElement=function(e,n,i,r){return Wt(t,e,n,i,r,!0)};var o=i&&i.data;xe(t,"$attrs",o&&o.attrs||e,null,!0),xe(t,"$listeners",n._parentListeners||e,null,!0)}(n),on(n,"beforeCreate"),function(e){var t=ft(e.$options.inject,e);t&&(Ce(!1),Object.keys(t).forEach((function(n){xe(e,n,t[n])})),Ce(!0))}(n),function(e){e._watchers=[];var t=e.$options;t.props&&function(e,t){var n=e.$options.propsData||{},i=e._props={},r=e.$options._propKeys=[];e.$parent&&Ce(!1);var o=function(o){r.push(o);var s=Re(o,t,n,e);xe(i,o,s),o in e||bn(e,"_props",o)};for(var s in t)o(s);Ce(!0)}(e,t.props),t.methods&&function(e,t){for(var n in e.$options.props,t)e[n]="function"!=typeof t[n]?A:T(t[n],e)}(e,t.methods),t.data?function(e){var t=e.$options.data;l(t=e._data="function"==typeof t?function(e,t){pe();try{return e.call(t,t)}catch(e){return We(e,t,"data()"),{}}finally{he()}}(t,e):t||{})||(t={});for(var n=Object.keys(t),i=e.$options.props,r=(e.$options.methods,n.length);r--;){var o=n[r];i&&y(i,o)||z(o)||bn(e,"_data",o)}Te(t,!0)}(e):Te(e._data={},!0),t.computed&&function(e,t){var n=e._computedWatchers=Object.create(null),i=ie();for(var r in t){var o=t[r],s="function"==typeof o?o:o.get;i||(n[r]=new gn(e,s||A,A,_n)),r in e||En(e,r,o)}}(e,t.computed),t.watch&&t.watch!==ee&&function(e,t){for(var n in t){var i=t[n];if(Array.isArray(i))for(var r=0;r<i.length;r++)Sn(e,n,i[r]);else Sn(e,n,i)}}(e,t.watch)}(n),function(e){var t=e.$options.provide;t&&(e._provided="function"==typeof t?t.call(e):t)}(n),on(n,"created"),n.$options.el&&n.$mount(n.$options.el)}}(On),function(e){Object.defineProperty(e.prototype,"$data",{get:function(){return this._data}}),Object.defineProperty(e.prototype,"$props",{get:function(){return this._props}}),e.prototype.$set=Oe,e.prototype.$delete=Le,e.prototype.$watch=function(e,t,n){var i=this;if(l(t))return Sn(i,e,t,n);(n=n||{}).user=!0;var r=new gn(i,e,t,n);if(n.immediate){var o='callback for immediate watcher "'+r.expression+'"';pe(),Ge(t,i,[r.value],i,o),he()}return function(){r.teardown()}}}(On),function(e){var t=/^hook:/;e.prototype.$on=function(e,n){var i=this;if(Array.isArray(e))for(var r=0,o=e.length;r<o;r++)i.$on(e[r],n);else(i._events[e]||(i._events[e]=[])).push(n),t.test(e)&&(i._hasHookEvent=!0);return i},e.prototype.$once=function(e,t){var n=this;function i(){n.$off(e,i),t.apply(n,arguments)}return i.fn=t,n.$on(e,i),n},e.prototype.$off=function(e,t){var n=this;if(!arguments.length)return n._events=Object.create(null),n;if(Array.isArray(e)){for(var i=0,r=e.length;i<r;i++)n.$off(e[i],t);return n}var o,s=n._events[e];if(!s)return n;if(!t)return n._events[e]=null,n;for(var a=s.length;a--;)if((o=s[a])===t||o.fn===t){s.splice(a,1);break}return n},e.prototype.$emit=function(e){var t=this,n=t._events[e];if(n){n=n.length>1?x(n):n;for(var i=x(arguments,1),r='event handler for "'+e+'"',o=0,s=n.length;o<s;o++)Ge(n[o],t,i,t,r)}return t}}(On),function(e){e.prototype._update=function(e,t){var n=this,i=n.$el,r=n._vnode,o=en(n);n._vnode=e,n.$el=r?n.__patch__(r,e):n.__patch__(n.$el,e,t,!1),o(),i&&(i.__vue__=null),n.$el&&(n.$el.__vue__=n),n.$vnode&&n.$parent&&n.$vnode===n.$parent._vnode&&(n.$parent.$el=n.$el)},e.prototype.$forceUpdate=function(){this._watcher&&this._watcher.update()},e.prototype.$destroy=function(){var e=this;if(!e._isBeingDestroyed){on(e,"beforeDestroy"),e._isBeingDestroyed=!0;var t=e.$parent;!t||t._isBeingDestroyed||e.$options.abstract||m(t.$children,e),e._watcher&&e._watcher.teardown();for(var n=e._watchers.length;n--;)e._watchers[n].teardown();e._data.__ob__&&e._data.__ob__.vmCount--,e._isDestroyed=!0,e.__patch__(e._vnode,null),on(e,"destroyed"),e.$off(),e.$el&&(e.$el.__vue__=null),e.$vnode&&(e.$vnode.parent=null)}}}(On),function(e){Nt(e.prototype),e.prototype.$nextTick=function(e){return nt(e,this)},e.prototype._render=function(){var e,t=this,n=t.$options,i=n.render,r=n._parentVnode;r&&(t.$scopedSlots=yt(r.data.scopedSlots,t.$slots,t.$scopedSlots)),t.$vnode=r;try{Vt=t,e=i.call(t._renderProxy,t.$createElement)}catch(n){We(n,t,"render"),e=t._vnode}finally{Vt=null}return Array.isArray(e)&&1===e.length&&(e=e[0]),e instanceof fe||(e=me()),e.parent=r,e}}(On);var Mn=[String,RegExp,Array],Pn={name:"keep-alive",abstract:!0,props:{include:Mn,exclude:Mn,max:[String,Number]},methods:{cacheVNode:function(){var e=this,t=e.cache,n=e.keys,i=e.vnodeToCache,r=e.keyToCache;if(i){var o=i.tag,s=i.componentInstance,a=i.componentOptions;t[r]={name:Ln(a),tag:o,componentInstance:s},n.push(r),this.max&&n.length>parseInt(this.max)&&kn(t,n[0],n,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var e in this.cache)kn(this.cache,e,this.keys)},mounted:function(){var e=this;this.cacheVNode(),this.$watch("include",(function(t){In(e,(function(e){return An(t,e)}))})),this.$watch("exclude",(function(t){In(e,(function(e){return!An(t,e)}))}))},updated:function(){this.cacheVNode()},render:function(){var e=this.$slots.default,t=Ut(e),n=t&&t.componentOptions;if(n){var i=Ln(n),r=this.include,o=this.exclude;if(r&&(!i||!An(r,i))||o&&i&&An(o,i))return t;var s=this.cache,a=this.keys,l=null==t.key?n.Ctor.cid+(n.tag?"::"+n.tag:""):t.key;s[l]?(t.componentInstance=s[l].componentInstance,m(a,l),a.push(l)):(this.vnodeToCache=t,this.keyToCache=l),t.data.keepAlive=!0}return t||e&&e[0]}},Dn={KeepAlive:Pn};!function(e){var t={get:function(){return R}};Object.defineProperty(e,"config",t),e.util={warn:le,extend:O,mergeOptions:$e,defineReactive:xe},e.set=Oe,e.delete=Le,e.nextTick=nt,e.observable=function(e){return Te(e),e},e.options=Object.create(null),$.forEach((function(t){e.options[t+"s"]=Object.create(null)})),e.options._base=e,O(e.options.components,Dn),function(e){e.use=function(e){var t=this._installedPlugins||(this._installedPlugins=[]);if(t.indexOf(e)>-1)return this;var n=x(arguments,1);return n.unshift(this),"function"==typeof e.install?e.install.apply(e,n):"function"==typeof e&&e.apply(null,n),t.push(e),this}}(e),function(e){e.mixin=function(e){return this.options=$e(this.options,e),this}}(e),function(e){e.cid=0;var t=1;e.extend=function(e){e=e||{};var n=this,i=n.cid,r=e._Ctor||(e._Ctor={});if(r[i])return r[i];var o=e.name||n.options.name,s=function(e){this._init(e)};return(s.prototype=Object.create(n.prototype)).constructor=s,s.cid=t++,s.options=$e(n.options,e),s.super=n,s.options.props&&function(e){var t=e.options.props;for(var n in t)bn(e.prototype,"_props",n)}(s),s.options.computed&&function(e){var t=e.options.computed;for(var n in t)En(e.prototype,n,t[n])}(s),s.extend=n.extend,s.mixin=n.mixin,s.use=n.use,$.forEach((function(e){s[e]=n[e]})),o&&(s.options.components[o]=s),s.superOptions=n.options,s.extendOptions=e,s.sealedOptions=O({},s.options),r[i]=s,s}}(e),function(e){$.forEach((function(t){e[t]=function(e,n){return n?("component"===t&&l(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),"directive"===t&&"function"==typeof n&&(n={bind:n,update:n}),this.options[t+"s"][e]=n,n):this.options[t+"s"][e]}}))}(e)}(On),Object.defineProperty(On.prototype,"$isServer",{get:ie}),Object.defineProperty(On.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(On,"FunctionalRenderContext",{value:$t}),On.version="2.6.14";var Nn=h("style,class"),$n=h("input,textarea,option,select,progress"),jn=function(e,t,n){return"value"===n&&$n(e)&&"button"!==t||"selected"===n&&"option"===e||"checked"===n&&"input"===e||"muted"===n&&"video"===e},Rn=h("contenteditable,draggable,spellcheck"),Fn=h("events,caret,typing,plaintext-only"),zn=h("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),Bn="http://www.w3.org/1999/xlink",Hn=function(e){return":"===e.charAt(5)&&"xlink"===e.slice(0,5)},Wn=function(e){return Hn(e)?e.slice(6,e.length):""},Gn=function(e){return null==e||!1===e};function qn(e,t){return{staticClass:Vn(e.staticClass,t.staticClass),class:i(e.class)?[e.class,t.class]:t.class}}function Vn(e,t){return e?t?e+" "+t:e:t||""}function Yn(e){return Array.isArray(e)?function(e){for(var t,n="",r=0,o=e.length;r<o;r++)i(t=Yn(e[r]))&&""!==t&&(n&&(n+=" "),n+=t);return n}(e):s(e)?function(e){var t="";for(var n in e)e[n]&&(t&&(t+=" "),t+=n);return t}(e):"string"==typeof e?e:""}var Un={svg:"http://www.w3.org/2000/svg",math:"http://www.w3.org/1998/Math/MathML"},Kn=h("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot"),Xn=h("svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view",!0),Jn=function(e){return Kn(e)||Xn(e)};function Qn(e){return Xn(e)?"svg":"math"===e?"math":void 0}var Zn=Object.create(null),ei=h("text,number,password,search,email,tel,url");function ti(e){return"string"==typeof e?document.querySelector(e)||document.createElement("div"):e}var ni=Object.freeze({createElement:function(e,t){var n=document.createElement(e);return"select"!==e||t.data&&t.data.attrs&&void 0!==t.data.attrs.multiple&&n.setAttribute("multiple","multiple"),n},createElementNS:function(e,t){return document.createElementNS(Un[e],t)},createTextNode:function(e){return document.createTextNode(e)},createComment:function(e){return document.createComment(e)},insertBefore:function(e,t,n){e.insertBefore(t,n)},removeChild:function(e,t){e.removeChild(t)},appendChild:function(e,t){e.appendChild(t)},parentNode:function(e){return e.parentNode},nextSibling:function(e){return e.nextSibling},tagName:function(e){return e.tagName},setTextContent:function(e,t){e.textContent=t},setStyleScope:function(e,t){e.setAttribute(t,"")}}),ii={create:function(e,t){ri(t)},update:function(e,t){e.data.ref!==t.data.ref&&(ri(e,!0),ri(t))},destroy:function(e){ri(e,!0)}};function ri(e,t){var n=e.data.ref;if(i(n)){var r=e.context,o=e.componentInstance||e.elm,s=r.$refs;t?Array.isArray(s[n])?m(s[n],o):s[n]===o&&(s[n]=void 0):e.data.refInFor?Array.isArray(s[n])?s[n].indexOf(o)<0&&s[n].push(o):s[n]=[o]:s[n]=o}}var oi=new fe("",{},[]),si=["create","activate","update","remove","destroy"];function ai(e,n){return e.key===n.key&&e.asyncFactory===n.asyncFactory&&(e.tag===n.tag&&e.isComment===n.isComment&&i(e.data)===i(n.data)&&function(e,t){if("input"!==e.tag)return!0;var n,r=i(n=e.data)&&i(n=n.attrs)&&n.type,o=i(n=t.data)&&i(n=n.attrs)&&n.type;return r===o||ei(r)&&ei(o)}(e,n)||r(e.isAsyncPlaceholder)&&t(n.asyncFactory.error))}function li(e,t,n){var r,o,s={};for(r=t;r<=n;++r)i(o=e[r].key)&&(s[o]=r);return s}var ci={create:ui,update:ui,destroy:function(e){ui(e,oi)}};function ui(e,t){(e.data.directives||t.data.directives)&&function(e,t){var n,i,r,o=e===oi,s=t===oi,a=pi(e.data.directives,e.context),l=pi(t.data.directives,t.context),c=[],u=[];for(n in l)i=a[n],r=l[n],i?(r.oldValue=i.value,r.oldArg=i.arg,fi(r,"update",t,e),r.def&&r.def.componentUpdated&&u.push(r)):(fi(r,"bind",t,e),r.def&&r.def.inserted&&c.push(r));if(c.length){var d=function(){for(var n=0;n<c.length;n++)fi(c[n],"inserted",t,e)};o?ct(t,"insert",d):d()}if(u.length&&ct(t,"postpatch",(function(){for(var n=0;n<u.length;n++)fi(u[n],"componentUpdated",t,e)})),!o)for(n in a)l[n]||fi(a[n],"unbind",e,e,s)}(e,t)}var di=Object.create(null);function pi(e,t){var n,i,r=Object.create(null);if(!e)return r;for(n=0;n<e.length;n++)(i=e[n]).modifiers||(i.modifiers=di),r[hi(i)]=i,i.def=je(t.$options,"directives",i.name);return r}function hi(e){return e.rawName||e.name+"."+Object.keys(e.modifiers||{}).join(".")}function fi(e,t,n,i,r){var o=e.def&&e.def[t];if(o)try{o(n.elm,e,n,i,r)}catch(i){We(i,n.context,"directive "+e.name+" "+t+" hook")}}var vi=[ii,ci];function mi(e,n){var r=n.componentOptions;if(!(i(r)&&!1===r.Ctor.options.inheritAttrs||t(e.data.attrs)&&t(n.data.attrs))){var o,s,a=n.elm,l=e.data.attrs||{},c=n.data.attrs||{};for(o in i(c.__ob__)&&(c=n.data.attrs=O({},c)),c)s=c[o],l[o]!==s&&gi(a,o,s,n.data.pre);for(o in(K||J)&&c.value!==l.value&&gi(a,"value",c.value),l)t(c[o])&&(Hn(o)?a.removeAttributeNS(Bn,Wn(o)):Rn(o)||a.removeAttribute(o))}}function gi(e,t,n,i){i||e.tagName.indexOf("-")>-1?yi(e,t,n):zn(t)?Gn(n)?e.removeAttribute(t):(n="allowfullscreen"===t&&"EMBED"===e.tagName?"true":t,e.setAttribute(t,n)):Rn(t)?e.setAttribute(t,function(e,t){return Gn(t)||"false"===t?"false":"contenteditable"===e&&Fn(t)?t:"true"}(t,n)):Hn(t)?Gn(n)?e.removeAttributeNS(Bn,Wn(t)):e.setAttributeNS(Bn,t,n):yi(e,t,n)}function yi(e,t,n){if(Gn(n))e.removeAttribute(t);else{if(K&&!X&&"TEXTAREA"===e.tagName&&"placeholder"===t&&""!==n&&!e.__ieph){var i=function(t){t.stopImmediatePropagation(),e.removeEventListener("input",i)};e.addEventListener("input",i),e.__ieph=!0}e.setAttribute(t,n)}}var bi={create:mi,update:mi};function _i(e,n){var r=n.elm,o=n.data,s=e.data;if(!(t(o.staticClass)&&t(o.class)&&(t(s)||t(s.staticClass)&&t(s.class)))){var a=function(e){for(var t=e.data,n=e,r=e;i(r.componentInstance);)(r=r.componentInstance._vnode)&&r.data&&(t=qn(r.data,t));for(;i(n=n.parent);)n&&n.data&&(t=qn(t,n.data));return o=t.staticClass,s=t.class,i(o)||i(s)?Vn(o,Yn(s)):"";var o,s}(n),l=r._transitionClasses;i(l)&&(a=Vn(a,Yn(l))),a!==r._prevClass&&(r.setAttribute("class",a),r._prevClass=a)}}var Ei,wi,Ci,Si,Ti,xi,Oi={create:_i,update:_i},Li=/[\w).+\-_$\]]/;function Ai(e){var t,n,i,r,o,s=!1,a=!1,l=!1,c=!1,u=0,d=0,p=0,h=0;for(i=0;i<e.length;i++)if(n=t,t=e.charCodeAt(i),s)39===t&&92!==n&&(s=!1);else if(a)34===t&&92!==n&&(a=!1);else if(l)96===t&&92!==n&&(l=!1);else if(c)47===t&&92!==n&&(c=!1);else if(124!==t||124===e.charCodeAt(i+1)||124===e.charCodeAt(i-1)||u||d||p){switch(t){case 34:a=!0;break;case 39:s=!0;break;case 96:l=!0;break;case 40:p++;break;case 41:p--;break;case 91:d++;break;case 93:d--;break;case 123:u++;break;case 125:u--}if(47===t){for(var f=i-1,v=void 0;f>=0&&" "===(v=e.charAt(f));f--);v&&Li.test(v)||(c=!0)}}else void 0===r?(h=i+1,r=e.slice(0,i).trim()):m();function m(){(o||(o=[])).push(e.slice(h,i).trim()),h=i+1}if(void 0===r?r=e.slice(0,i).trim():0!==h&&m(),o)for(i=0;i<o.length;i++)r=Ii(r,o[i]);return r}function Ii(e,t){var n=t.indexOf("(");if(n<0)return'_f("'+t+'")('+e+")";var i=t.slice(0,n),r=t.slice(n+1);return'_f("'+i+'")('+e+(")"!==r?","+r:r)}function ki(e,t){console.error("[Vue compiler]: "+e)}function Mi(e,t){return e?e.map((function(e){return e[t]})).filter((function(e){return e})):[]}function Pi(e,t,n,i,r){(e.props||(e.props=[])).push(Hi({name:t,value:n,dynamic:r},i)),e.plain=!1}function Di(e,t,n,i,r){(r?e.dynamicAttrs||(e.dynamicAttrs=[]):e.attrs||(e.attrs=[])).push(Hi({name:t,value:n,dynamic:r},i)),e.plain=!1}function Ni(e,t,n,i){e.attrsMap[t]=n,e.attrsList.push(Hi({name:t,value:n},i))}function $i(e,t,n,i,r,o,s,a){(e.directives||(e.directives=[])).push(Hi({name:t,rawName:n,value:i,arg:r,isDynamicArg:o,modifiers:s},a)),e.plain=!1}function ji(e,t,n){return n?"_p("+t+',"'+e+'")':e+t}function Ri(t,n,i,r,o,s,a,l){var c;(r=r||e).right?l?n="("+n+")==='click'?'contextmenu':("+n+")":"click"===n&&(n="contextmenu",delete r.right):r.middle&&(l?n="("+n+")==='click'?'mouseup':("+n+")":"click"===n&&(n="mouseup")),r.capture&&(delete r.capture,n=ji("!",n,l)),r.once&&(delete r.once,n=ji("~",n,l)),r.passive&&(delete r.passive,n=ji("&",n,l)),r.native?(delete r.native,c=t.nativeEvents||(t.nativeEvents={})):c=t.events||(t.events={});var u=Hi({value:i.trim(),dynamic:l},a);r!==e&&(u.modifiers=r);var d=c[n];Array.isArray(d)?o?d.unshift(u):d.push(u):c[n]=d?o?[u,d]:[d,u]:u,t.plain=!1}function Fi(e,t,n){var i=zi(e,":"+t)||zi(e,"v-bind:"+t);if(null!=i)return Ai(i);if(!1!==n){var r=zi(e,t);if(null!=r)return JSON.stringify(r)}}function zi(e,t,n){var i;if(null!=(i=e.attrsMap[t]))for(var r=e.attrsList,o=0,s=r.length;o<s;o++)if(r[o].name===t){r.splice(o,1);break}return n&&delete e.attrsMap[t],i}function Bi(e,t){for(var n=e.attrsList,i=0,r=n.length;i<r;i++){var o=n[i];if(t.test(o.name))return n.splice(i,1),o}}function Hi(e,t){return t&&(null!=t.start&&(e.start=t.start),null!=t.end&&(e.end=t.end)),e}function Wi(e,t,n){var i=n||{},r=i.number,o="$$v";i.trim&&(o="(typeof $$v === 'string'? $$v.trim(): $$v)"),r&&(o="_n("+o+")");var s=Gi(t,o);e.model={value:"("+t+")",expression:JSON.stringify(t),callback:"function ($$v) {"+s+"}"}}function Gi(e,t){var n=function(e){if(e=e.trim(),Ei=e.length,e.indexOf("[")<0||e.lastIndexOf("]")<Ei-1)return(Si=e.lastIndexOf("."))>-1?{exp:e.slice(0,Si),key:'"'+e.slice(Si+1)+'"'}:{exp:e,key:null};for(wi=e,Si=Ti=xi=0;!Vi();)Yi(Ci=qi())?Ki(Ci):91===Ci&&Ui(Ci);return{exp:e.slice(0,Ti),key:e.slice(Ti+1,xi)}}(e);return null===n.key?e+"="+t:"$set("+n.exp+", "+n.key+", "+t+")"}function qi(){return wi.charCodeAt(++Si)}function Vi(){return Si>=Ei}function Yi(e){return 34===e||39===e}function Ui(e){var t=1;for(Ti=Si;!Vi();)if(Yi(e=qi()))Ki(e);else if(91===e&&t++,93===e&&t--,0===t){xi=Si;break}}function Ki(e){for(var t=e;!Vi()&&(e=qi())!==t;);}var Xi;
vendor: 5,925 bytes, line 117
117function Ji(e,t,n){var i=Xi;return function r(){var o=t.apply(null,arguments);null!==o&&er(e,r,n,i)}}var Qi=Ue&&!(Z&&Number(Z[1])<=53);function Zi(e,t,n,i){if(Qi){var r=pn,o=t;t=o._wrapper=function(e){if(e.target===e.currentTarget||e.timeStamp>=r||e.timeStamp<=0||e.target.ownerDocument!==document)return o.apply(this,arguments)}}Xi.addEventListener(e,t,te?{capture:n,passive:i}:n)}function er(e,t,n,i){(i||Xi).removeEventListener(e,t._wrapper||t,n)}function tr(e,n){if(!t(e.data.on)||!t(n.data.on)){var r=n.data.on||{},o=e.data.on||{};Xi=n.elm,function(e){if(i(e.__r)){var t=K?"change":"input";e[t]=[].concat(e.__r,e[t]||[]),delete e.__r}i(e.__c)&&(e.change=[].concat(e.__c,e.change||[]),delete e.__c)}(r),lt(r,o,Zi,er,Ji,n.context),Xi=void 0}}var nr,ir={create:tr,update:tr};function rr(e,n){if(!t(e.data.domProps)||!t(n.data.domProps)){var r,o,s=n.elm,a=e.data.domProps||{},l=n.data.domProps||{};for(r in i(l.__ob__)&&(l=n.data.domProps=O({},l)),a)r in l||(s[r]="");for(r in l){if(o=l[r],"textContent"===r||"innerHTML"===r){if(n.children&&(n.children.length=0),o===a[r])continue;1===s.childNodes.length&&s.removeChild(s.childNodes[0])}if("value"===r&&"PROGRESS"!==s.tagName){s._value=o;var c=t(o)?"":String(o);or(s,c)&&(s.value=c)}else if("innerHTML"===r&&Xn(s.tagName)&&t(s.innerHTML)){(nr=nr||document.createElement("div")).innerHTML="<svg>"+o+"</svg>";for(var u=nr.firstChild;s.firstChild;)s.removeChild(s.firstChild);for(;u.firstChild;)s.appendChild(u.firstChild)}else if(o!==a[r])try{s[r]=o}catch(e){}}}}function or(e,t){return!e.composing&&("OPTION"===e.tagName||function(e,t){var n=!0;try{n=document.activeElement!==e}catch(e){}return n&&e.value!==t}(e,t)||function(e,t){var n=e.value,r=e._vModifiers;if(i(r)){if(r.number)return p(n)!==p(t);if(r.trim)return n.trim()!==t.trim()}return n!==t}(e,t))}var sr={create:rr,update:rr},ar=b((function(e){var t={},n=/:(.+)/;return e.split(/;(?![^(]*\))/g).forEach((function(e){if(e){var i=e.split(n);i.length>1&&(t[i[0].trim()]=i[1].trim())}})),t}));function lr(e){var t=cr(e.style);return e.staticStyle?O(e.staticStyle,t):t}function cr(e){return Array.isArray(e)?L(e):"string"==typeof e?ar(e):e}var ur,dr=/^--/,pr=/\s*!important$/,hr=function(e,t,n){if(dr.test(t))e.style.setProperty(t,n);else if(pr.test(n))e.style.setProperty(S(t),n.replace(pr,""),"important");else{var i=vr(t);if(Array.isArray(n))for(var r=0,o=n.length;r<o;r++)e.style[i]=n[r];else e.style[i]=n}},fr=["Webkit","Moz","ms"],vr=b((function(e){if(ur=ur||document.createElement("div").style,"filter"!==(e=E(e))&&e in ur)return e;for(var t=e.charAt(0).toUpperCase()+e.slice(1),n=0;n<fr.length;n++){var i=fr[n]+t;if(i in ur)return i}}));function mr(e,n){var r=n.data,o=e.data;if(!(t(r.staticStyle)&&t(r.style)&&t(o.staticStyle)&&t(o.style))){var s,a,l=n.elm,c=o.staticStyle,u=o.normalizedStyle||o.style||{},d=c||u,p=cr(n.data.style)||{};n.data.normalizedStyle=i(p.__ob__)?O({},p):p;var h=function(e,t){for(var n,i={},r=e;r.componentInstance;)(r=r.componentInstance._vnode)&&r.data&&(n=lr(r.data))&&O(i,n);(n=lr(e.data))&&O(i,n);for(var o=e;o=o.parent;)o.data&&(n=lr(o.data))&&O(i,n);return i}(n);for(a in d)t(h[a])&&hr(l,a,"");for(a in h)(s=h[a])!==d[a]&&hr(l,a,null==s?"":s)}}var gr={create:mr,update:mr},yr=/\s+/;function br(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.split(yr).forEach((function(t){return e.classList.add(t)})):e.classList.add(t);else{var n=" "+(e.getAttribute("class")||"")+" ";n.indexOf(" "+t+" ")<0&&e.setAttribute("class",(n+t).trim())}}function _r(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.split(yr).forEach((function(t){return e.classList.remove(t)})):e.classList.remove(t),e.classList.length||e.removeAttribute("class");else{for(var n=" "+(e.getAttribute("class")||"")+" ",i=" "+t+" ";n.indexOf(i)>=0;)n=n.replace(i," ");(n=n.trim())?e.setAttribute("class",n):e.removeAttribute("class")}}function Er(e){if(e){if("object"==typeof e){var t={};return!1!==e.css&&O(t,wr(e.name||"v")),O(t,e),t}return"string"==typeof e?wr(e):void 0}}var wr=b((function(e){return{enterClass:e+"-enter",enterToClass:e+"-enter-to",enterActiveClass:e+"-enter-active",leaveClass:e+"-leave",leaveToClass:e+"-leave-to",leaveActiveClass:e+"-leave-active"}})),Cr=q&&!X,Sr="transition",Tr="animation",xr="transition",Or="transitionend",Lr="animation",Ar="animationend";Cr&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(xr="WebkitTransition",Or="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Lr="WebkitAnimation",Ar="webkitAnimationEnd"));var Ir=q?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(e){return e()};function kr(e){Ir((function(){Ir(e)}))}function Mr(e,t){var n=e._transitionClasses||(e._transitionClasses=[]);n.indexOf(t)<0&&(n.push(t),br(e,t))}function Pr(e,t){e._transitionClasses&&m(e._transitionClasses,t),_r(e,t)}function Dr(e,t,n){var i=$r(e,t),r=i.type,o=i.timeout,s=i.propCount;if(!r)return n();var a=r===Sr?Or:Ar,l=0,c=function(){e.removeEventListener(a,u),n()},u=function(t){t.target===e&&++l>=s&&c()};setTimeout((function(){l<s&&c()}),o+1),e.addEventListener(a,u)}var Nr=/\b(transform|all)(,|$)/;function $r(e,t){var n,i=window.getComputedStyle(e),r=(i[xr+"Delay"]||"").split(", "),o=(i[xr+"Duration"]||"").split(", "),s=jr(r,o),a=(i[Lr+"Delay"]||"").split(", "),l=(i[Lr+"Duration"]||"").split(", "),c=jr(a,l),u=0,d=0;return t===Sr?s>0&&(n=Sr,u=s,d=o.length):t===Tr?c>0&&(n=Tr,u=c,d=l.length):d=(n=(u=Math.max(s,c))>0?s>c?Sr:Tr:null)?n===Sr?o.length:l.length:0,{type:n,timeout:u,propCount:d,hasTransform:n===Sr&&Nr.test(i[xr+"Property"])}}function jr(e,t){for(;e.length<t.length;)e=e.concat(e);return Math.max.apply(null,t.map((function(t,n){return Rr(t)+Rr(e[n])})))}function Rr(e){return 1e3*Number(e.slice(0,-1).replace(",","."))}function Fr(e,n){var r=e.elm;i(r._leaveCb)&&(r._leaveCb.cancelled=!0,r._leaveCb());var o=Er(e.data.transition);
vendor: 30,456 bytes, line 117
117if(!t(o)&&!i(r._enterCb)&&1===r.nodeType){for(var a=o.css,l=o.type,c=o.enterClass,u=o.enterToClass,d=o.enterActiveClass,h=o.appearClass,f=o.appearToClass,v=o.appearActiveClass,m=o.beforeEnter,g=o.enter,y=o.afterEnter,b=o.enterCancelled,_=o.beforeAppear,E=o.appear,w=o.afterAppear,C=o.appearCancelled,S=o.duration,T=Zt,x=Zt.$vnode;x&&x.parent;)T=x.context,x=x.parent;var O=!T._isMounted||!e.isRootInsert;if(!O||E||""===E){var L=O&&h?h:c,A=O&&v?v:d,I=O&&f?f:u,k=O&&_||m,M=O&&"function"==typeof E?E:g,P=O&&w||y,N=O&&C||b,$=p(s(S)?S.enter:S),j=!1!==a&&!X,R=Hr(M),F=r._enterCb=D((function(){j&&(Pr(r,I),Pr(r,A)),F.cancelled?(j&&Pr(r,L),N&&N(r)):P&&P(r),r._enterCb=null}));e.data.show||ct(e,"insert",(function(){var t=r.parentNode,n=t&&t._pending&&t._pending[e.key];n&&n.tag===e.tag&&n.elm._leaveCb&&n.elm._leaveCb(),M&&M(r,F)})),k&&k(r),j&&(Mr(r,L),Mr(r,A),kr((function(){Pr(r,L),F.cancelled||(Mr(r,I),R||(Br($)?setTimeout(F,$):Dr(r,l,F)))}))),e.data.show&&(n&&n(),M&&M(r,F)),j||R||F()}}}function zr(e,n){var r=e.elm;i(r._enterCb)&&(r._enterCb.cancelled=!0,r._enterCb());var o=Er(e.data.transition);if(t(o)||1!==r.nodeType)return n();if(!i(r._leaveCb)){var a=o.css,l=o.type,c=o.leaveClass,u=o.leaveToClass,d=o.leaveActiveClass,h=o.beforeLeave,f=o.leave,v=o.afterLeave,m=o.leaveCancelled,g=o.delayLeave,y=o.duration,b=!1!==a&&!X,_=Hr(f),E=p(s(y)?y.leave:y),w=r._leaveCb=D((function(){r.parentNode&&r.parentNode._pending&&(r.parentNode._pending[e.key]=null),b&&(Pr(r,u),Pr(r,d)),w.cancelled?(b&&Pr(r,c),m&&m(r)):(n(),v&&v(r)),r._leaveCb=null}));g?g(C):C()}function C(){w.cancelled||(!e.data.show&&r.parentNode&&((r.parentNode._pending||(r.parentNode._pending={}))[e.key]=e),h&&h(r),b&&(Mr(r,c),Mr(r,d),kr((function(){Pr(r,c),w.cancelled||(Mr(r,u),_||(Br(E)?setTimeout(w,E):Dr(r,l,w)))}))),f&&f(r,w),b||_||w())}}function Br(e){return"number"==typeof e&&!isNaN(e)}function Hr(e){if(t(e))return!1;var n=e.fns;return i(n)?Hr(Array.isArray(n)?n[0]:n):(e._length||e.length)>1}function Wr(e,t){!0!==t.data.show&&Fr(t)}var Gr=function(e){var n,s,a={},l=e.modules,c=e.nodeOps;for(n=0;n<si.length;++n)for(a[si[n]]=[],s=0;s<l.length;++s)i(l[s][si[n]])&&a[si[n]].push(l[s][si[n]]);function u(e){var t=c.parentNode(e);i(t)&&c.removeChild(t,e)}function d(e,t,n,o,s,l,u){if(i(e.elm)&&i(l)&&(e=l[u]=ye(e)),e.isRootInsert=!s,!function(e,t,n,o){var s=e.data;if(i(s)){var l=i(e.componentInstance)&&s.keepAlive;if(i(s=s.hook)&&i(s=s.init)&&s(e,!1),i(e.componentInstance))return p(e,t),f(n,e.elm,o),r(l)&&function(e,t,n,r){for(var o,s=e;s.componentInstance;)if(i(o=(s=s.componentInstance._vnode).data)&&i(o=o.transition)){for(o=0;o<a.activate.length;++o)a.activate[o](oi,s);t.push(s);break}f(n,e.elm,r)}(e,t,n,o),!0}}(e,t,n,o)){var d=e.data,h=e.children,m=e.tag;i(m)?(e.elm=e.ns?c.createElementNS(e.ns,m):c.createElement(m,e),y(e),v(e,h,t),i(d)&&g(e,t),f(n,e.elm,o)):r(e.isComment)?(e.elm=c.createComment(e.text),f(n,e.elm,o)):(e.elm=c.createTextNode(e.text),f(n,e.elm,o))}}function p(e,t){i(e.data.pendingInsert)&&(t.push.apply(t,e.data.pendingInsert),e.data.pendingInsert=null),e.elm=e.componentInstance.$el,m(e)?(g(e,t),y(e)):(ri(e),t.push(e))}function f(e,t,n){i(e)&&(i(n)?c.parentNode(n)===e&&c.insertBefore(e,t,n):c.appendChild(e,t))}function v(e,t,n){if(Array.isArray(t))for(var i=0;i<t.length;++i)d(t[i],n,e.elm,null,!0,t,i);else o(e.text)&&c.appendChild(e.elm,c.createTextNode(String(e.text)))}function m(e){for(;e.componentInstance;)e=e.componentInstance._vnode;return i(e.tag)}function g(e,t){for(var r=0;r<a.create.length;++r)a.create[r](oi,e);i(n=e.data.hook)&&(i(n.create)&&n.create(oi,e),i(n.insert)&&t.push(e))}function y(e){var t;if(i(t=e.fnScopeId))c.setStyleScope(e.elm,t);else for(var n=e;n;)i(t=n.context)&&i(t=t.$options._scopeId)&&c.setStyleScope(e.elm,t),n=n.parent;i(t=Zt)&&t!==e.context&&t!==e.fnContext&&i(t=t.$options._scopeId)&&c.setStyleScope(e.elm,t)}function b(e,t,n,i,r,o){for(;i<=r;++i)d(n[i],o,e,t,!1,n,i)}function _(e){var t,n,r=e.data;if(i(r))for(i(t=r.hook)&&i(t=t.destroy)&&t(e),t=0;t<a.destroy.length;++t)a.destroy[t](e);if(i(t=e.children))for(n=0;n<e.children.length;++n)_(e.children[n])}function E(e,t,n){for(;t<=n;++t){var r=e[t];i(r)&&(i(r.tag)?(w(r),_(r)):u(r.elm))}}function w(e,t){if(i(t)||i(e.data)){var n,r=a.remove.length+1;for(i(t)?t.listeners+=r:t=function(e,t){function n(){0==--n.listeners&&u(e)}return n.listeners=t,n}(e.elm,r),i(n=e.componentInstance)&&i(n=n._vnode)&&i(n.data)&&w(n,t),n=0;n<a.remove.length;++n)a.remove[n](e,t);i(n=e.data.hook)&&i(n=n.remove)?n(e,t):t()}else u(e.elm)}function C(e,t,n,r){for(var o=n;o<r;o++){var s=t[o];if(i(s)&&ai(e,s))return o}}function S(e,n,o,s,l,u){if(e!==n){i(n.elm)&&i(s)&&(n=s[l]=ye(n));var p=n.elm=e.elm;if(r(e.isAsyncPlaceholder))i(n.asyncFactory.resolved)?O(e.elm,n,o):n.isAsyncPlaceholder=!0;else if(r(n.isStatic)&&r(e.isStatic)&&n.key===e.key&&(r(n.isCloned)||r(n.isOnce)))n.componentInstance=e.componentInstance;else{var h,f=n.data;i(f)&&i(h=f.hook)&&i(h=h.prepatch)&&h(e,n);var v=e.children,g=n.children;if(i(f)&&m(n)){for(h=0;h<a.update.length;++h)a.update[h](e,n);i(h=f.hook)&&i(h=h.update)&&h(e,n)}t(n.text)?i(v)&&i(g)?v!==g&&function(e,n,r,o,s){for(var a,l,u,p=0,h=0,f=n.length-1,v=n[0],m=n[f],g=r.length-1,y=r[0],_=r[g],w=!s;p<=f&&h<=g;)t(v)?v=n[++p]:t(m)?m=n[--f]:ai(v,y)?(S(v,y,o,r,h),v=n[++p],y=r[++h]):ai(m,_)?(S(m,_,o,r,g),m=n[--f],_=r[--g]):ai(v,_)?(S(v,_,o,r,g),w&&c.insertBefore(e,v.elm,c.nextSibling(m.elm)),v=n[++p],_=r[--g]):ai(m,y)?(S(m,y,o,r,h),w&&c.insertBefore(e,m.elm,v.elm),m=n[--f],y=r[++h]):(t(a)&&(a=li(n,p,f)),t(l=i(y.key)?a[y.key]:C(y,n,p,f))?d(y,o,e,v.elm,!1,r,h):ai(u=n[l],y)?(S(u,y,o,r,h),n[l]=void 0,w&&c.insertBefore(e,u.elm,v.elm)):d(y,o,e,v.elm,!1,r,h),y=r[++h]);p>f?b(e,t(r[g+1])?null:r[g+1].elm,r,h,g,o):h>g&&E(n,p,f)}(p,v,g,o,u):i(g)?(i(e.text)&&c.setTextContent(p,""),b(p,null,g,0,g.length-1,o)):i(v)?E(v,0,v.length-1):i(e.text)&&c.setTextContent(p,""):e.text!==n.text&&c.setTextContent(p,n.text),i(f)&&i(h=f.hook)&&i(h=h.postpatch)&&h(e,n)}}}function T(e,t,n){if(r(n)&&i(e.parent))e.parent.data.pendingInsert=t;else for(var o=0;o<t.length;++o)t[o].data.hook.insert(t[o])}var x=h("attrs,class,staticClass,staticStyle,key");function O(e,t,n,o){var s,a=t.tag,l=t.data,c=t.children;if(o=o||l&&l.pre,t.elm=e,r(t.isComment)&&i(t.asyncFactory))return t.isAsyncPlaceholder=!0,!0;if(i(l)&&(i(s=l.hook)&&i(s=s.init)&&s(t,!0),i(s=t.componentInstance)))return p(t,n),!0;if(i(a)){if(i(c))if(e.hasChildNodes())if(i(s=l)&&i(s=s.domProps)&&i(s=s.innerHTML)){if(s!==e.innerHTML)return!1}else{for(var u=!0,d=e.firstChild,h=0;h<c.length;h++){if(!d||!O(d,c[h],n,o)){u=!1;break}d=d.nextSibling}if(!u||d)return!1}else v(t,c,n);if(i(l)){var f=!1;for(var m in l)if(!x(m)){f=!0,g(t,n);break}!f&&l.class&&rt(l.class)}}else e.data!==t.text&&(e.data=t.text);return!0}return function(e,n,o,s){if(!t(n)){var l,u=!1,p=[];if(t(e))u=!0,d(n,p);else{var h=i(e.nodeType);if(!h&&ai(e,n))S(e,n,p,null,null,s);else{if(h){if(1===e.nodeType&&e.hasAttribute(N)&&(e.removeAttribute(N),o=!0),r(o)&&O(e,n,p))return T(n,p,!0),e;l=e,e=new fe(c.tagName(l).toLowerCase(),{},[],void 0,l)}var f=e.elm,v=c.parentNode(f);if(d(n,p,f._leaveCb?null:v,c.nextSibling(f)),i(n.parent))for(var g=n.parent,y=m(n);g;){for(var b=0;b<a.destroy.length;++b)a.destroy[b](g);if(g.elm=n.elm,y){for(var w=0;w<a.create.length;++w)a.create[w](oi,g);var C=g.data.hook.insert;if(C.merged)for(var x=1;x<C.fns.length;x++)C.fns[x]()}else ri(g);g=g.parent}i(v)?E([e],0,0):i(e.tag)&&_(e)}}return T(n,p,u),n.elm}i(e)&&_(e)}}({nodeOps:ni,modules:[bi,Oi,ir,sr,gr,q?{create:Wr,activate:Wr,remove:function(e,t){!0!==e.data.show?zr(e,t):t()}}:{}].concat(vi)});X&&document.addEventListener("selectionchange",(function(){var e=document.activeElement;e&&e.vmodel&&Qr(e,"input")}));var qr={inserted:function(e,t,n,i){"select"===n.tag?(i.elm&&!i.elm._vOptions?ct(n,"postpatch",(function(){qr.componentUpdated(e,t,n)})):Vr(e,t,n.context),e._vOptions=[].map.call(e.options,Kr)):("textarea"===n.tag||ei(e.type))&&(e._vModifiers=t.modifiers,t.modifiers.lazy||(e.addEventListener("compositionstart",Xr),e.addEventListener("compositionend",Jr),e.addEventListener("change",Jr),X&&(e.vmodel=!0)))},componentUpdated:function(e,t,n){if("select"===n.tag){Vr(e,t,n.context);var i=e._vOptions,r=e._vOptions=[].map.call(e.options,Kr);r.some((function(e,t){return!M(e,i[t])}))&&(e.multiple?t.value.some((function(e){return Ur(e,r)})):t.value!==t.oldValue&&Ur(t.value,r))&&Qr(e,"change")}}};function Vr(e,t,n){Yr(e,t),(K||J)&&setTimeout((function(){Yr(e,t)}),0)}function Yr(e,t,n){var i=t.value,r=e.multiple;if(!r||Array.isArray(i)){for(var o,s,a=0,l=e.options.length;a<l;a++)if(s=e.options[a],r)o=P(i,Kr(s))>-1,s.selected!==o&&(s.selected=o);else if(M(Kr(s),i))return void(e.selectedIndex!==a&&(e.selectedIndex=a));r||(e.selectedIndex=-1)}}function Ur(e,t){return t.every((function(t){return!M(t,e)}))}function Kr(e){return"_value"in e?e._value:e.value}function Xr(e){e.target.composing=!0}function Jr(e){e.target.composing&&(e.target.composing=!1,Qr(e.target,"input"))}function Qr(e,t){var n=document.createEvent("HTMLEvents");n.initEvent(t,!0,!0),e.dispatchEvent(n)}function Zr(e){return!e.componentInstance||e.data&&e.data.transition?e:Zr(e.componentInstance._vnode)}var eo={bind:function(e,t,n){var i=t.value,r=(n=Zr(n)).data&&n.data.transition,o=e.__vOriginalDisplay="none"===e.style.display?"":e.style.display;i&&r?(n.data.show=!0,Fr(n,(function(){e.style.display=o}))):e.style.display=i?o:"none"},update:function(e,t,n){var i=t.value;!i!=!t.oldValue&&((n=Zr(n)).data&&n.data.transition?(n.data.show=!0,i?Fr(n,(function(){e.style.display=e.__vOriginalDisplay})):zr(n,(function(){e.style.display="none"}))):e.style.display=i?e.__vOriginalDisplay:"none")},unbind:function(e,t,n,i,r){r||(e.style.display=e.__vOriginalDisplay)}},to={model:qr,show:eo},no={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function io(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abstract?io(Ut(t.children)):e}function ro(e){var t={},n=e.$options;for(var i in n.propsData)t[i]=e[i];var r=n._parentListeners;for(var o in r)t[E(o)]=r[o];return t}function oo(e,t){if(/\d-keep-alive$/.test(t.tag))return e("keep-alive",{props:t.componentOptions.propsData})}var so=function(e){return e.tag||gt(e)},ao=function(e){return"show"===e.name},lo={name:"transition",props:no,abstract:!0,render:function(e){var t=this,n=this.$slots.default;if(n&&(n=n.filter(so)).length){var i=this.mode,r=n[0];if(function(e){for(;e=e.parent;)if(e.data.transition)return!0}(this.$vnode))return r;var s=io(r);if(!s)return r;if(this._leaving)return oo(e,r);var a="__transition-"+this._uid+"-";s.key=null==s.key?s.isComment?a+"comment":a+s.tag:o(s.key)?0===String(s.key).indexOf(a)?s.key:a+s.key:s.key;var l=(s.data||(s.data={})).transition=ro(this),c=this._vnode,u=io(c);if(s.data.directives&&s.data.directives.some(ao)&&(s.data.show=!0),u&&u.data&&!function(e,t){return t.key===e.key&&t.tag===e.tag}(s,u)&&!gt(u)&&(!u.componentInstance||!u.componentInstance._vnode.isComment)){var d=u.data.transition=O({},l);if("out-in"===i)return this._leaving=!0,ct(d,"afterLeave",(function(){t._leaving=!1,t.$forceUpdate()})),oo(e,r);if("in-out"===i){if(gt(s))return c;var p,h=function(){p()};ct(l,"afterEnter",h),ct(l,"enterCancelled",h),ct(d,"delayLeave",(function(e){p=e}))}}return r}}},co=O({tag:String,moveClass:String},no);delete co.mode;var uo={props:co,beforeMount:function(){var e=this,t=this._update;this._update=function(n,i){var r=en(e);e.__patch__(e._vnode,e.kept,!1,!0),e._vnode=e.kept,r(),t.call(e,n,i)}},render:function(e){for(var t=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),i=this.prevChildren=this.children,r=this.$slots.default||[],o=this.children=[],s=ro(this),a=0;a<r.length;a++){var l=r[a];l.tag&&null!=l.key&&0!==String(l.key).indexOf("__vlist")&&(o.push(l),n[l.key]=l,(l.data||(l.data={})).transition=s)}if(i){for(var c=[],u=[],d=0;d<i.length;d++){var p=i[d];p.data.transition=s,p.data.pos=p.elm.getBoundingClientRect(),n[p.key]?c.push(p):u.push(p)}this.kept=e(t,null,c),this.removed=u}return e(t,null,o)},updated:function(){var e=this.prevChildren,t=this.moveClass||(this.name||"v")+"-move";e.length&&this.hasMove(e[0].elm,t)&&(e.forEach(po),e.forEach(ho),e.forEach(fo),this._reflow=document.body.offsetHeight,e.forEach((function(e){if(e.data.moved){var n=e.elm,i=n.style;Mr(n,t),i.transform=i.WebkitTransform=i.transitionDuration="",n.addEventListener(Or,n._moveCb=function e(i){i&&i.target!==n||i&&!/transform$/.test(i.propertyName)||(n.removeEventListener(Or,e),n._moveCb=null,Pr(n,t))})}})))},methods:{hasMove:function(e,t){if(!Cr)return!1;if(this._hasMove)return this._hasMove;var n=e.cloneNode();e._transitionClasses&&e._transitionClasses.forEach((function(e){_r(n,e)})),br(n,t),n.style.display="none",this.$el.appendChild(n);var i=$r(n);return this.$el.removeChild(n),this._hasMove=i.hasTransform}}};function po(e){e.elm._moveCb&&e.elm._moveCb(),e.elm._enterCb&&e.elm._enterCb()}function ho(e){e.data.newPos=e.elm.getBoundingClientRect()}function fo(e){var t=e.data.pos,n=e.data.newPos,i=t.left-n.left,r=t.top-n.top;if(i||r){e.data.moved=!0;var o=e.elm.style;o.transform=o.WebkitTransform="translate("+i+"px,"+r+"px)",o.transitionDuration="0s"}}var vo={Transition:lo,TransitionGroup:uo};On.config.mustUseProp=jn,On.config.isReservedTag=Jn,On.config.isReservedAttr=Nn,On.config.getTagNamespace=Qn,On.config.isUnknownElement=function(e){if(!q)return!0;if(Jn(e))return!1;if(e=e.toLowerCase(),null!=Zn[e])return Zn[e];var t=document.createElement(e);return e.indexOf("-")>-1?Zn[e]=t.constructor===window.HTMLUnknownElement||t.constructor===window.HTMLElement:Zn[e]=/HTMLUnknownElement/.test(t.toString())},O(On.options.directives,to),O(On.options.components,vo),On.prototype.__patch__=q?Gr:A,On.prototype.$mount=function(e,t){return function(e,t,n){var i;return e.$el=t,e.$options.render||(e.$options.render=me),on(e,"beforeMount"),i=function(){e._update(e._render(),n)},new gn(e,i,A,{before:function(){e._isMounted&&!e._isDestroyed&&on(e,"beforeUpdate")}},!0),n=!1,null==e.$vnode&&(e._isMounted=!0,on(e,"mounted")),e}(this,e=e&&q?ti(e):void 0,t)},q&&setTimeout((function(){R.devtools&&re&&re.emit("init",On)}),0);var mo,go=/\{\{((?:.|\r?\n)+?)\}\}/g,yo=/[-.*+?^${}()|[\]\/\\]/g,bo=b((function(e){var t=e[0].replace(yo,"\\$&"),n=e[1].replace(yo,"\\$&");return new RegExp(t+"((?:.|\\n)+?)"+n,"g")})),_o={staticKeys:["staticClass"],transformNode:function(e,t){t.warn;var n=zi(e,"class");n&&(e.staticClass=JSON.stringify(n));var i=Fi(e,"class",!1);i&&(e.classBinding=i)},genData:function(e){var t="";return e.staticClass&&(t+="staticClass:"+e.staticClass+","),e.classBinding&&(t+="class:"+e.classBinding+","),t}},Eo={staticKeys:["staticStyle"],transformNode:function(e,t){t.warn;var n=zi(e,"style");n&&(e.staticStyle=JSON.stringify(ar(n)));var i=Fi(e,"style",!1);i&&(e.styleBinding=i)},genData:function(e){var t="";return e.staticStyle&&(t+="staticStyle:"+e.staticStyle+","),e.styleBinding&&(t+="style:("+e.styleBinding+"),"),t}},wo=h("area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr"),Co=h("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source"),So=h("address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track"),To=/^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,xo=/^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+?\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,Oo="[a-zA-Z_][\\-\\.0-9_a-zA-Z"+F.source+"]*",Lo="((?:"+Oo+"\\:)?"+Oo+")",Ao=new RegExp("^<"+Lo),Io=/^\s*(\/?)>/,ko=new RegExp("^<\\/"+Lo+"[^>]*>"),Mo=/^<!DOCTYPE [^>]+>/i,Po=/^<!\--/,Do=/^<!\[/,No=h("script,style,textarea",!0),$o={},jo={"&lt;":"<","&gt;":">","&quot;":'"',"&amp;":"&","&#10;":"\n","&#9;":"\t","&#39;":"'"},Ro=/&(?:lt|gt|quot|amp|#39);/g,Fo=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,zo=h("pre,textarea",!0),Bo=function(e,t){return e&&zo(e)&&"\n"===t[0]};function Ho(e,t){var n=t?Fo:Ro;return e.replace(n,(function(e){return jo[e]}))}var Wo,Go,qo,Vo,Yo,Uo,Ko,Xo,Jo=/^@|^v-on:/,Qo=/^v-|^@|^:|^#/,Zo=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,es=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,ts=/^\(|\)$/g,ns=/^\[.*\]$/,is=/:(.*)$/,rs=/^:|^\.|^v-bind:/,os=/\.[^.\]]+(?=[^\]]*$)/g,ss=/^v-slot(:|$)|^#/,as=/[\r\n]/,ls=/[ \f\t\r\n]+/g,cs=b((function(e){return(mo=mo||document.createElement("div")).innerHTML=e,mo.textContent})),us="_empty_";function ds(e,t,n){return{type:1,tag:e,attrsList:t,attrsMap:gs(t),rawAttrsMap:{},parent:n,children:[]}}function ps(e,t){var n;!function(e){var t=Fi(e,"key");t&&(e.key=t)}(e),e.plain=!e.key&&!e.scopedSlots&&!e.attrsList.length,function(e){var t=Fi(e,"ref");t&&(e.ref=t,e.refInFor=function(e){for(var t=e;t;){if(void 0!==t.for)return!0;t=t.parent}return!1}(e))}(e),function(e){var t;"template"===e.tag?(t=zi(e,"scope"),e.slotScope=t||zi(e,"slot-scope")):(t=zi(e,"slot-scope"))&&(e.slotScope=t);var n=Fi(e,"slot");if(n&&(e.slotTarget='""'===n?'"default"':n,e.slotTargetDynamic=!(!e.attrsMap[":slot"]&&!e.attrsMap["v-bind:slot"]),"template"===e.tag||e.slotScope||Di(e,"slot",n,function(e,t){return e.rawAttrsMap[":slot"]||e.rawAttrsMap["v-bind:slot"]||e.rawAttrsMap.slot}(e))),"template"===e.tag){var i=Bi(e,ss);if(i){var r=vs(i),o=r.name,s=r.dynamic;e.slotTarget=o,e.slotTargetDynamic=s,e.slotScope=i.value||us}}else{var a=Bi(e,ss);if(a){var l=e.scopedSlots||(e.scopedSlots={}),c=vs(a),u=c.name,d=c.dynamic,p=l[u]=ds("template",[],e);p.slotTarget=u,p.slotTargetDynamic=d,p.children=e.children.filter((function(e){if(!e.slotScope)return e.parent=p,!0})),p.slotScope=a.value||us,e.children=[],e.plain=!1}}}(e),"slot"===(n=e).tag&&(n.slotName=Fi(n,"name")),function(e){var t;(t=Fi(e,"is"))&&(e.component=t),null!=zi(e,"inline-template")&&(e.inlineTemplate=!0)}(e);for(var i=0;i<qo.length;i++)e=qo[i](e,t)||e;return function(e){var t,n,i,r,o,s,a,l,c=e.attrsList;for(t=0,n=c.length;t<n;t++)if(i=r=c[t].name,o=c[t].value,Qo.test(i))if(e.hasBindings=!0,(s=ms(i.replace(Qo,"")))&&(i=i.replace(os,"")),rs.test(i))i=i.replace(rs,""),o=Ai(o),(l=ns.test(i))&&(i=i.slice(1,-1)),s&&(s.prop&&!l&&"innerHtml"===(i=E(i))&&(i="innerHTML"),s.camel&&!l&&(i=E(i)),s.sync&&(a=Gi(o,"$event"),l?Ri(e,'"update:"+('+i+")",a,null,!1,0,c[t],!0):(Ri(e,"update:"+E(i),a,null,!1,0,c[t]),S(i)!==E(i)&&Ri(e,"update:"+S(i),a,null,!1,0,c[t])))),s&&s.prop||!e.component&&Ko(e.tag,e.attrsMap.type,i)?Pi(e,i,o,c[t],l):Di(e,i,o,c[t],l);else if(Jo.test(i))i=i.replace(Jo,""),(l=ns.test(i))&&(i=i.slice(1,-1)),Ri(e,i,o,s,!1,0,c[t],l);else{var u=(i=i.replace(Qo,"")).match(is),d=u&&u[1];l=!1,d&&(i=i.slice(0,-(d.length+1)),ns.test(d)&&(d=d.slice(1,-1),l=!0)),$i(e,i,r,o,d,l,s,c[t])}else Di(e,i,JSON.stringify(o),c[t]),!e.component&&"muted"===i&&Ko(e.tag,e.attrsMap.type,i)&&Pi(e,i,"true",c[t])}(e),e}function hs(e){var t;if(t=zi(e,"v-for")){var n=function(e){var t=e.match(Zo);if(t){var n={};n.for=t[2].trim();var i=t[1].trim().replace(ts,""),r=i.match(es);return r?(n.alias=i.replace(es,"").trim(),n.iterator1=r[1].trim(),r[2]&&(n.iterator2=r[2].trim())):n.alias=i,n}}(t);n&&O(e,n)}}function fs(e,t){e.ifConditions||(e.ifConditions=[]),e.ifConditions.push(t)}function vs(e){var t=e.name.replace(ss,"");return t||"#"!==e.name[0]&&(t="default"),ns.test(t)?{name:t.slice(1,-1),dynamic:!0}:{name:'"'+t+'"',dynamic:!1}}function ms(e){var t=e.match(os);if(t){var n={};return t.forEach((function(e){n[e.slice(1)]=!0})),n}}function gs(e){for(var t={},n=0,i=e.length;n<i;n++)t[e[n].name]=e[n].value;return t}var ys=/^xmlns:NS\d+/,bs=/^NS\d+:/;function _s(e){return ds(e.tag,e.attrsList.slice(),e.parent)}var Es,ws,Cs,Ss=[_o,Eo,{preTransformNode:function(e,t){if("input"===e.tag){var n,i=e.attrsMap;if(!i["v-model"])return;if((i[":type"]||i["v-bind:type"])&&(n=Fi(e,"type")),i.type||n||!i["v-bind"]||(n="("+i["v-bind"]+").type"),n){var r=zi(e,"v-if",!0),o=r?"&&("+r+")":"",s=null!=zi(e,"v-else",!0),a=zi(e,"v-else-if",!0),l=_s(e);hs(l),Ni(l,"type","checkbox"),ps(l,t),l.processed=!0,l.if="("+n+")==='checkbox'"+o,fs(l,{exp:l.if,block:l});var c=_s(e);zi(c,"v-for",!0),Ni(c,"type","radio"),ps(c,t),fs(l,{exp:"("+n+")==='radio'"+o,block:c});var u=_s(e);return zi(u,"v-for",!0),Ni(u,":type",n),ps(u,t),fs(l,{exp:r,block:u}),s?l.else=!0:a&&(l.elseif=a),l}}}}],Ts={model:function(e,t,n){var i=t.value,r=t.modifiers,o=e.tag,s=e.attrsMap.type;if(e.component)return Wi(e,i,r),!1;if("select"===o)!function(e,t,n){var i='var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = "_value" in o ? o._value : o.value;return '+(n&&n.number?"_n(val)":"val")+"});";Ri(e,"change",i=i+" "+Gi(t,"$event.target.multiple ? $$selectedVal : $$selectedVal[0]"),null,!0)}(e,i,r);else if("input"===o&&"checkbox"===s)!function(e,t,n){var i=n&&n.number,r=Fi(e,"value")||"null",o=Fi(e,"true-value")||"true",s=Fi(e,"false-value")||"false";Pi(e,"checked","Array.isArray("+t+")?_i("+t+","+r+")>-1"+("true"===o?":("+t+")":":_q("+t+","+o+")")),Ri(e,"change","var $$a="+t+",$$el=$event.target,$$c=$$el.checked?("+o+"):("+s+");if(Array.isArray($$a)){var $$v="+(i?"_n("+r+")":r)+",$$i=_i($$a,$$v);if($$el.checked){$$i<0&&("+Gi(t,"$$a.concat([$$v])")+")}else{$$i>-1&&("+Gi(t,"$$a.slice(0,$$i).concat($$a.slice($$i+1))")+")}}else{"+Gi(t,"$$c")+"}",null,!0)}(e,i,r);else if("input"===o&&"radio"===s)!function(e,t,n){var i=n&&n.number,r=Fi(e,"value")||"null";Pi(e,"checked","_q("+t+","+(r=i?"_n("+r+")":r)+")"),Ri(e,"change",Gi(t,r),null,!0)}(e,i,r);else if("input"===o||"textarea"===o)!function(e,t,n){var i=e.attrsMap.type,r=n||{},o=r.lazy,s=r.number,a=r.trim,l=!o&&"range"!==i,c=o?"change":"range"===i?"__r":"input",u="$event.target.value";a&&(u="$event.target.value.trim()"),s&&(u="_n("+u+")");var d=Gi(t,u);l&&(d="if($event.target.composing)return;"+d),Pi(e,"value","("+t+")"),Ri(e,c,d,null,!0),(a||s)&&Ri(e,"blur","$forceUpdate()")}(e,i,r);else if(!R.isReservedTag(o))return Wi(e,i,r),!1;return!0},text:function(e,t){t.value&&Pi(e,"textContent","_s("+t.value+")",t)},html:function(e,t){t.value&&Pi(e,"innerHTML","_s("+t.value+")",t)}},xs={expectHTML:!0,modules:Ss,directives:Ts,isPreTag:function(e){return"pre"===e},isUnaryTag:wo,mustUseProp:jn,canBeLeftOpenTag:Co,isReservedTag:Jn,getTagNamespace:Qn,staticKeys:(Cs=Ss,Cs.reduce((function(e,t){return e.concat(t.staticKeys||[])}),[]).join(","))},Os=b((function(e){return h("type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap"+(e?","+e:""))}));function Ls(e,t){e&&(Es=Os(t.staticKeys||""),ws=t.isReservedTag||I,As(e),Is(e,!1))}function As(e){if(e.static=function(e){return 2!==e.type&&(3===e.type||!(!e.pre&&(e.hasBindings||e.if||e.for||f(e.tag)||!ws(e.tag)||function(e){for(;e.parent;){if("template"!==(e=e.parent).tag)return!1;if(e.for)return!0}return!1}(e)||!Object.keys(e).every(Es))))}(e),1===e.type){if(!ws(e.tag)&&"slot"!==e.tag&&null==e.attrsMap["inline-template"])return;for(var t=0,n=e.children.length;t<n;t++){var i=e.children[t];As(i),i.static||(e.static=!1)}if(e.ifConditions)for(var r=1,o=e.ifConditions.length;r<o;r++){var s=e.ifConditions[r].block;As(s),s.static||(e.static=!1)}}}function Is(e,t){if(1===e.type){if((e.static||e.once)&&(e.staticInFor=t),e.static&&e.children.length&&(1!==e.children.length||3!==e.children[0].type))return void(e.staticRoot=!0);if(e.staticRoot=!1,e.children)for(var n=0,i=e.children.length;n<i;n++)Is(e.children[n],t||!!e.for);if(e.ifConditions)for(var r=1,o=e.ifConditions.length;r<o;r++)Is(e.ifConditions[r].block,t)}}var ks=/^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/,Ms=/\([^)]*?\);*$/,Ps=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,Ds={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},Ns={esc:["Esc","Escape"],tab:"Tab",enter:"Enter",space:[" ","Spacebar"],up:["Up","ArrowUp"],left:["Left","ArrowLeft"],right:["Right","ArrowRight"],down:["Down","ArrowDown"],delete:["Backspace","Delete","Del"]},$s=function(e){return"if("+e+")return null;"},js={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:$s("$event.target !== $event.currentTarget"),ctrl:$s("!$event.ctrlKey"),shift:$s("!$event.shiftKey"),alt:$s("!$event.altKey"),meta:$s("!$event.metaKey"),left:$s("'button' in $event && $event.button !== 0"),middle:$s("'button' in $event && $event.button !== 1"),right:$s("'button' in $event && $event.button !== 2")};function Rs(e,t){var n=t?"nativeOn:":"on:",i="",r="";for(var o in e){var s=Fs(e[o]);e[o]&&e[o].dynamic?r+=o+","+s+",":i+='"'+o+'":'+s+","}return i="{"+i.slice(0,-1)+"}",r?n+"_d("+i+",["+r.slice(0,-1)+"])":n+i}function Fs(e){if(!e)return"function(){}";if(Array.isArray(e))return"["+e.map((function(e){return Fs(e)})).join(",")+"]";var t=Ps.test(e.value),n=ks.test(e.value),i=Ps.test(e.value.replace(Ms,""));if(e.modifiers){var r="",o="",s=[];for(var a in e.modifiers)if(js[a])o+=js[a],Ds[a]&&s.push(a);else if("exact"===a){var l=e.modifiers;o+=$s(["ctrl","shift","alt","meta"].filter((function(e){return!l[e]})).map((function(e){return"$event."+e+"Key"})).join("||"))}else s.push(a);return s.length&&(r+=function(e){return"if(!$event.type.indexOf('key')&&"+e.map(zs).join("&&")+")return null;"}(s)),o&&(r+=o),"function($event){"+r+(t?"return "+e.value+".apply(null, arguments)":n?"return ("+e.value+").apply(null, arguments)":i?"return "+e.value:e.value)+"}"}return t||n?e.value:"function($event){"+(i?"return "+e.value:e.value)+"}"}function zs(e){var t=parseInt(e,10);if(t)return"$event.keyCode!=="+t;var n=Ds[e],i=Ns[e];return"_k($event.keyCode,"+JSON.stringify(e)+","+JSON.stringify(n)+",$event.key,"+JSON.stringify(i)+")"}var Bs={on:function(e,t){e.wrapListeners=function(e){return"_g("+e+","+t.value+")"}},bind:function(e,t){e.wrapData=function(n){return"_b("+n+",'"+e.tag+"',"+t.value+","+(t.modifiers&&t.modifiers.prop?"true":"false")+(t.modifiers&&t.modifiers.sync?",true":"")+")"}},cloak:A},Hs=function(e){this.options=e,this.warn=e.warn||ki,this.transforms=Mi(e.modules,"transformCode"),this.dataGenFns=Mi(e.modules,"genData"),this.directives=O(O({},Bs),e.directives);var t=e.isReservedTag||I;this.maybeComponent=function(e){return!!e.component||!t(e.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1};function Ws(e,t){var n=new Hs(t);return{render:"with(this){return "+(e?"script"===e.tag?"null":Gs(e,n):'_c("div")')+"}",staticRenderFns:n.staticRenderFns}}function Gs(e,t){if(e.parent&&(e.pre=e.pre||e.parent.pre),e.staticRoot&&!e.staticProcessed)return qs(e,t);if(e.once&&!e.onceProcessed)return Vs(e,t);if(e.for&&!e.forProcessed)return Ks(e,t);if(e.if&&!e.ifProcessed)return Ys(e,t);if("template"!==e.tag||e.slotTarget||t.pre){if("slot"===e.tag)return function(e,t){var n=e.slotName||'"default"',i=Zs(e,t),r="_t("+n+(i?",function(){return "+i+"}":""),o=e.attrs||e.dynamicAttrs?na((e.attrs||[]).concat(e.dynamicAttrs||[]).map((function(e){return{name:E(e.name),value:e.value,dynamic:e.dynamic}}))):null,s=e.attrsMap["v-bind"];return!o&&!s||i||(r+=",null"),o&&(r+=","+o),s&&(r+=(o?"":",null")+","+s),r+")"}(e,t);var n;if(e.component)n=function(e,t,n){var i=t.inlineTemplate?null:Zs(t,n,!0);return"_c("+e+","+Xs(t,n)+(i?","+i:"")+")"}(e.component,e,t);else{var i;(!e.plain||e.pre&&t.maybeComponent(e))&&(i=Xs(e,t));var r=e.inlineTemplate?null:Zs(e,t,!0);n="_c('"+e.tag+"'"+(i?","+i:"")+(r?","+r:"")+")"}for(var o=0;o<t.transforms.length;o++)n=t.transforms[o](e,n);return n}return Zs(e,t)||"void 0"}function qs(e,t){e.staticProcessed=!0;var n=t.pre;return e.pre&&(t.pre=e.pre),t.staticRenderFns.push("with(this){return "+Gs(e,t)+"}"),t.pre=n,"_m("+(t.staticRenderFns.length-1)+(e.staticInFor?",true":"")+")"}function Vs(e,t){if(e.onceProcessed=!0,e.if&&!e.ifProcessed)return Ys(e,t);if(e.staticInFor){for(var n="",i=e.parent;i;){if(i.for){n=i.key;break}i=i.parent}return n?"_o("+Gs(e,t)+","+t.onceId+++","+n+")":Gs(e,t)}return qs(e,t)}function Ys(e,t,n,i){return e.ifProcessed=!0,Us(e.ifConditions.slice(),t,n,i)}function Us(e,t,n,i){if(!e.length)return i||"_e()";var r=e.shift();return r.exp?"("+r.exp+")?"+o(r.block)+":"+Us(e,t,n,i):""+o(r.block);function o(e){return n?n(e,t):e.once?Vs(e,t):Gs(e,t)}}function Ks(e,t,n,i){var r=e.for,o=e.alias,s=e.iterator1?","+e.iterator1:"",a=e.iterator2?","+e.iterator2:"";return e.forProcessed=!0,(i||"_l")+"(("+r+"),function("+o+s+a+"){return "+(n||Gs)(e,t)+"})"}function Xs(e,t){var n="{",i=function(e,t){var n=e.directives;if(n){var i,r,o,s,a="directives:[",l=!1;for(i=0,r=n.length;i<r;i++){o=n[i],s=!0;var c=t.directives[o.name];c&&(s=!!c(e,o,t.warn)),s&&(l=!0,a+='{name:"'+o.name+'",rawName:"'+o.rawName+'"'+(o.value?",value:("+o.value+"),expression:"+JSON.stringify(o.value):"")+(o.arg?",arg:"+(o.isDynamicArg?o.arg:'"'+o.arg+'"'):"")+(o.modifiers?",modifiers:"+JSON.stringify(o.modifiers):"")+"},")}return l?a.slice(0,-1)+"]":void 0}}(e,t);i&&(n+=i+","),e.key&&(n+="key:"+e.key+","),e.ref&&(n+="ref:"+e.ref+","),e.refInFor&&(n+="refInFor:true,"),e.pre&&(n+="pre:true,"),e.component&&(n+='tag:"'+e.tag+'",');for(var r=0;r<t.dataGenFns.length;r++)n+=t.dataGenFns[r](e);if(e.attrs&&(n+="attrs:"+na(e.attrs)+","),e.props&&(n+="domProps:"+na(e.props)+","),e.events&&(n+=Rs(e.events,!1)+","),e.nativeEvents&&(n+=Rs(e.nativeEvents,!0)+","),e.slotTarget&&!e.slotScope&&(n+="slot:"+e.slotTarget+","),e.scopedSlots&&(n+=function(e,t,n){var i=e.for||Object.keys(t).some((function(e){var n=t[e];return n.slotTargetDynamic||n.if||n.for||Js(n)})),r=!!e.if;if(!i)for(var o=e.parent;o;){if(o.slotScope&&o.slotScope!==us||o.for){i=!0;break}o.if&&(r=!0),o=o.parent}var s=Object.keys(t).map((function(e){return Qs(t[e],n)})).join(",");return"scopedSlots:_u(["+s+"]"+(i?",null,true":"")+(!i&&r?",null,false,"+function(e){for(var t=5381,n=e.length;n;)t=33*t^e.charCodeAt(--n);return t>>>0}(s):"")+")"}(e,e.scopedSlots,t)+","),e.model&&(n+="model:{value:"+e.model.value+",callback:"+e.model.callback+",expression:"+e.model.expression+"},"),e.inlineTemplate){var o=function(e,t){var n=e.children[0];if(n&&1===n.type){var i=Ws(n,t.options);return"inlineTemplate:{render:function(){"+i.render+"},staticRenderFns:["+i.staticRenderFns.map((function(e){return"function(){"+e+"}"})).join(",")+"]}"}}(e,t);o&&(n+=o+",")}return n=n.replace(/,$/,"")+"}
117",e.dynamicAttrs&&(n="_b("+n+',"'+e.tag+'",'+na(e.dynamicAttrs)+")"),e.wrapData&&(n=e.wrapData(n)),e.wrapListeners&&(n=e.wrapListeners(n)),n}function Js(e){return 1===e.type&&("slot"===e.tag||e.children.some(Js))}function Qs(e,t){var n=e.attrsMap["slot-scope"];if(e.if&&!e.ifProcessed&&!n)return Ys(e,t,Qs,"null");if(e.for&&!e.forProcessed)return Ks(e,t,Qs);var i=e.slotScope===us?"":String(e.slotScope),r="function("+i+"){return "+("template"===e.tag?e.if&&n?"("+e.if+")?"+(Zs(e,t)||"undefined")+":undefined":Zs(e,t)||"undefined":Gs(e,t))+"}",o=i?"":",proxy:true";return"{key:"+(e.slotTarget||'"default"')+",fn:"+r+o+"}"}function Zs(e,t,n,i,r){var o=e.children;if(o.length){var s=o[0];if(1===o.length&&s.for&&"template"!==s.tag&&"slot"!==s.tag){var a=n?t.maybeComponent(s)?",1":",0":"";return""+(i||Gs)(s,t)+a}var l=n?function(e,t){for(var n=0,i=0;i<e.length;i++){var r=e[i];if(1===r.type){if(ea(r)||r.ifConditions&&r.ifConditions.some((function(e){return ea(e.block)}))){n=2;break}(t(r)||r.ifConditions&&r.ifConditions.some((function(e){return t(e.block)})))&&(n=1)}}return n}(o,t.maybeComponent):0,c=r||ta;return"["+o.map((function(e){return c(e,t)})).join(",")+"]"+(l?","+l:"")}}function ea(e){return void 0!==e.for||"template"===e.tag||"slot"===e.tag}function ta(e,t){return 1===e.type?Gs(e,t):3===e.type&&e.isComment?function(e){return"_e("+JSON.stringify(e.text)+")"}(e):"_v("+(2===(n=e).type?n.expression:ia(JSON.stringify(n.text)))+")";var n}function na(e){for(var t="",n="",i=0;i<e.length;i++){var r=e[i],o=ia(r.value);r.dynamic?n+=r.name+","+o+",":t+='"'+r.name+'":'+o+","}return t="{"+t.slice(0,-1)+"}",n?"_d("+t+",["+n.slice(0,-1)+"])":t}function ia(e){return e.replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}function ra(e,t){try{return new Function(e)}catch(n){return t.push({err:n,code:e}),A}}function oa(e){var t=Object.create(null);return function(n,i,r){(i=O({},i)).warn,delete i.warn;var o=i.delimiters?String(i.delimiters)+n:n;if(t[o])return t[o];var s=e(n,i),a={},l=[];return a.render=ra(s.render,l),a.staticRenderFns=s.staticRenderFns.map((function(e){return ra(e,l)})),t[o]=a}}new RegExp("\\b"+"do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,super,throw,while,yield,delete,export,import,return,switch,default,extends,finally,continue,debugger,function,arguments".split(",").join("\\b|\\b")+"\\b"),new RegExp("\\b"+"delete,typeof,void".split(",").join("\\s*\\([^\\)]*\\)|\\b")+"\\s*\\([^\\)]*\\)");var sa,aa,la=(sa=function(e,t){var n=function(e,t){Wo=t.warn||ki,Uo=t.isPreTag||I,Ko=t.mustUseProp||I,Xo=t.getTagNamespace||I,t.isReservedTag,qo=Mi(t.modules,"transformNode"),Vo=Mi(t.modules,"preTransformNode"),Yo=Mi(t.modules,"postTransformNode"),Go=t.delimiters;var n,i,r=[],o=!1!==t.preserveWhitespace,s=t.whitespace,a=!1,l=!1;function c(e){if(u(e),a||e.processed||(e=ps(e,t)),r.length||e===n||n.if&&(e.elseif||e.else)&&fs(n,{exp:e.elseif,block:e}),i&&!e.forbidden)if(e.elseif||e.else)s=e,c=function(e){for(var t=e.length;t--;){if(1===e[t].type)return e[t];e.pop()}}(i.children),c&&c.if&&fs(c,{exp:s.elseif,block:s});else{if(e.slotScope){var o=e.slotTarget||'"default"';(i.scopedSlots||(i.scopedSlots={}))[o]=e}i.children.push(e),e.parent=i}var s,c;e.children=e.children.filter((function(e){return!e.slotScope})),u(e),e.pre&&(a=!1),Uo(e.tag)&&(l=!1);for(var d=0;d<Yo.length;d++)Yo[d](e,t)}function u(e){if(!l)for(var t;(t=e.children[e.children.length-1])&&3===t.type&&" "===t.text;)e.children.pop()}return function(e,t){for(var n,i,r=[],o=t.expectHTML,s=t.isUnaryTag||I,a=t.canBeLeftOpenTag||I,l=0;e;){if(n=e,i&&No(i)){var c=0,u=i.toLowerCase(),d=$o[u]||($o[u]=new RegExp("([\\s\\S]*?)(</"+u+"[^>]*>)","i")),p=e.replace(d,(function(e,n,i){return c=i.length,No(u)||"noscript"===u||(n=n.replace(/<!\--([\s\S]*?)-->/g,"$1").replace(/<!\[CDATA\[([\s\S]*?)]]>/g,"$1")),Bo(u,n)&&(n=n.slice(1)),t.chars&&t.chars(n),""}));l+=e.length-p.length,e=p,x(u,l-c,l)}else{var h=e.indexOf("<");if(0===h){if(Po.test(e)){var f=e.indexOf("--\x3e");if(f>=0){t.shouldKeepComment&&t.comment(e.substring(4,f),l,l+f+3),C(f+3);continue}}if(Do.test(e)){var v=e.indexOf("]>");if(v>=0){C(v+2);continue}}var m=e.match(Mo);if(m){C(m[0].length);continue}var g=e.match(ko);if(g){var y=l;C(g[0].length),x(g[1],y,l);continue}var b=S();if(b){T(b),Bo(b.tagName,e)&&C(1);continue}}var _=void 0,E=void 0,w=void 0;if(h>=0){for(E=e.slice(h);!(ko.test(E)||Ao.test(E)||Po.test(E)||Do.test(E)||(w=E.indexOf("<",1)
vendor: 6,018 bytes, line 117
117)<0);)h+=w,E=e.slice(h);_=e.substring(0,h)}h<0&&(_=e),_&&C(_.length),t.chars&&_&&t.chars(_,l-_.length,l)}if(e===n){t.chars&&t.chars(e);break}}function C(t){l+=t,e=e.substring(t)}function S(){var t=e.match(Ao);if(t){var n,i,r={tagName:t[1],attrs:[],start:l};for(C(t[0].length);!(n=e.match(Io))&&(i=e.match(xo)||e.match(To));)i.start=l,C(i[0].length),i.end=l,r.attrs.push(i);if(n)return r.unarySlash=n[1],C(n[0].length),r.end=l,r}}function T(e){var n=e.tagName,l=e.unarySlash;o&&("p"===i&&So(n)&&x(i),a(n)&&i===n&&x(n));for(var c=s(n)||!!l,u=e.attrs.length,d=new Array(u),p=0;p<u;p++){var h=e.attrs[p],f=h[3]||h[4]||h[5]||"",v="a"===n&&"href"===h[1]?t.shouldDecodeNewlinesForHref:t.shouldDecodeNewlines;d[p]={name:h[1],value:Ho(f,v)}}c||(r.push({tag:n,lowerCasedTag:n.toLowerCase(),attrs:d,start:e.start,end:e.end}),i=n),t.start&&t.start(n,d,c,e.start,e.end)}function x(e,n,o){var s,a;if(null==n&&(n=l),null==o&&(o=l),e)for(a=e.toLowerCase(),s=r.length-1;s>=0&&r[s].lowerCasedTag!==a;s--);else s=0;if(s>=0){for(var c=r.length-1;c>=s;c--)t.end&&t.end(r[c].tag,n,o);r.length=s,i=s&&r[s-1].tag}else"br"===a?t.start&&t.start(e,[],!0,n,o):"p"===a&&(t.start&&t.start(e,[],!1,n,o),t.end&&t.end(e,n,o))}x()}(e,{warn:Wo,expectHTML:t.expectHTML,isUnaryTag:t.isUnaryTag,canBeLeftOpenTag:t.canBeLeftOpenTag,shouldDecodeNewlines:t.shouldDecodeNewlines,shouldDecodeNewlinesForHref:t.shouldDecodeNewlinesForHref,shouldKeepComment:t.comments,outputSourceRange:t.outputSourceRange,start:function(e,o,s,u,d){var p=i&&i.ns||Xo(e);K&&"svg"===p&&(o=function(e){for(var t=[],n=0;n<e.length;n++){var i=e[n];ys.test(i.name)||(i.name=i.name.replace(bs,""),t.push(i))}return t}(o));var h,f=ds(e,o,i);p&&(f.ns=p),"style"!==(h=f).tag&&("script"!==h.tag||h.attrsMap.type&&"text/javascript"!==h.attrsMap.type)||ie()||(f.forbidden=!0);for(var v=0;v<Vo.length;v++)f=Vo[v](f,t)||f;a||(function(e){null!=zi(e,"v-pre")&&(e.pre=!0)}(f),f.pre&&(a=!0)),Uo(f.tag)&&(l=!0),a?function(e){var t=e.attrsList,n=t.length;if(n)for(var i=e.attrs=new Array(n),r=0;r<n;r++)i[r]={name:t[r].name,value:JSON.stringify(t[r].value)},null!=t[r].start&&(i[r].start=t[r].start,i[r].end=t[r].end);else e.pre||(e.plain=!0)}(f):f.processed||(hs(f),function(e){var t=zi(e,"v-if");if(t)e.if=t,fs(e,{exp:t,block:e});else{null!=zi(e,"v-else")&&(e.else=!0);var n=zi(e,"v-else-if");n&&(e.elseif=n)}}(f),function(e){null!=zi(e,"v-once")&&(e.once=!0)}(f)),n||(n=f),s?c(f):(i=f,r.push(f))},end:function(e,t,n){var o=r[r.length-1];r.length-=1,i=r[r.length-1],c(o)},chars:function(e,t,n){if(i&&(!K||"textarea"!==i.tag||i.attrsMap.placeholder!==e)){var r,c,u,d=i.children;(e=l||e.trim()?"script"===(r=i).tag||"style"===r.tag?e:cs(e):d.length?s?"condense"===s&&as.test(e)?"":" ":o?" ":"":"")&&(l||"condense"!==s||(e=e.replace(ls," ")),!a&&" "!==e&&(c=function(e,t){var n=t?bo(t):go;if(n.test(e)){for(var i,r,o,s=[],a=[],l=n.lastIndex=0;i=n.exec(e);){(r=i.index)>l&&(a.push(o=e.slice(l,r)),s.push(JSON.stringify(o)));var c=Ai(i[1].trim());s.push("_s("+c+")"),a.push({"@binding":c}),l=r+i[0].length}return l<e.length&&(a.push(o=e.slice(l)),s.push(JSON.stringify(o))),{expression:s.join("+"),tokens:a}}}(e,Go))?u={type:2,expression:c.expression,tokens:c.tokens,text:e}:" "===e&&d.length&&" "===d[d.length-1].text||(u={type:3,text:e}),u&&d.push(u))}},comment:function(e,t,n){if(i){var r={type:3,text:e,isComment:!0};i.children.push(r)}}}),n}(e.trim(),t);!1!==t.optimize&&Ls(n,t);var i=Ws(n,t);return{ast:n,render:i.render,staticRenderFns:i.staticRenderFns}},function(e){function t(t,n){var i=Object.create(e),r=[],o=[];if(n)for(var s in n.modules&&(i.modules=(e.modules||[]).concat(n.modules)),n.directives&&(i.directives=O(Object.create(e.directives||null),n.directives)),n)"modules"!==s&&"directives"!==s&&(i[s]=n[s]);i.warn=function(e,t,n){(n?o:r).push(e)};var a=sa(t.trim(),i);return a.errors=r,a.tips=o,a}return{compile:t,compileToFunctions:oa(t)}}),ca=la(xs),ua=(ca.compile,ca.compileToFunctions);function da(e){return(aa=aa||document.createElement("div")).innerHTML=e?'<a href="\n"/>':'<div a="\n"/>',aa.innerHTML.indexOf("&#10;")>0}var pa=!!q&&da(!1),ha=!!q&&da(!0),fa=b((function(e){var t=ti(e);return t&&t.innerHTML})),va=On.prototype.$mount;On.prototype.$mount=function(e,t){if((e=e&&ti(e))===document.body||e===document.documentElement)return this;var n=this.$options;if(!n.render){var i=n.template;if(i)if("string"==typeof i)"#"===i.charAt(0)&&(i=fa(i));else{if(!i.nodeType)return this;i=i.innerHTML}else e&&(i=function(e){if(e.outerHTML)return e.outerHTML;var t=document.createElement("div");return t.appendChild(e.cloneNode(!0)),t.innerHTML}(e));if(i){var r=ua(i,{outputSourceRange:!1,shouldDecodeNewlines:pa,shouldDecodeNewlinesForHref:ha,delimiters:n.delimiters,comments:n.comments},this),o=r.render,s=r.staticRenderFns;n.render=o,n.staticRenderFns=s}}return va.call(this,e,t)},On.compile=ua;const ma=On;var ga=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"contentcategoryfilter mw-1280 mx-auto"},[n("div",{staticClass:"isotope mt-4"},[n("nav",{staticClass:"isotope-filter text-center my-3",attrs:{role:"navigation"}},[n("div",{staticClass:"btn-group-toggle"},[n("label",{staticClass:"btn btn-sm btn-outline-dark rounded-pill text-uppercase mb-2",class:{active:e.isNoneCategoriesSelected},attrs:{tabindex:"0"}},[n("input",{attrs:{type:"checkbox",name:"filterDesktop",value:""},on:{click:e.selectAll}}),e._v("\n          "+e._s(e.dataLabel.allLabel)+"\n        ")]),e._v(" "),e._l(e.dataConfig.categories,(function(t,i){return n("label",{key:i,staticClass:"btn btn-sm btn-outline-dark rounded-pill text-uppercase mx-1 mb-2",class:{active:e.selectedCategories.includes(t.value)},attrs:{tabindex:"0","aria-controls":"isotope-grid"}},[n("input",{directives:[{name:"model",rawName:"v-model",value:e.selectedCategories,expression:"selectedCategories"}],attrs:{type:"checkbox",name:"filterDesktop",hidden:"",id:t.value},domProps:{value:t.value,checked:Array.isArray(e.selectedCategories)?e._i(e.selectedCategories,t.value)>-1:e.selectedCategories}
117,on:{change:function(n){var i=e.selectedCategories,r=n.target,o=!!r.checked;if(Array.isArray(i)){var s=t.value,a=e._i(i,s);r.checked?a<0&&(e.selectedCategories=i.concat([s])):a>-1&&(e.selectedCategories=i.slice(0,a).concat(i.slice(a+1)))}else e.selectedCategories=o}}}),e._v("\n          "+e._s(t.text)+"\n        ")])}))],2)]),e._v(" "),n("div",{ref:"isotopeGrid",staticClass:"isotope-grid clearfix",attrs:{"aria-live":"polite","aria-atomic":"true",role:"region",id:"isotope-grid"}},[n("div",{staticClass:"isotope-sizer w-lg-33 w-md-50 w-100"}),e._v(" "),e._l(e.dataConfig.teasers,(function(t,i){return n("div",{key:i,staticClass:"isotope-item",class:[e.getClassFromTeaserCategories(t.categories),e.teaserWidth[t.teaserWidth]]},[n("article",{staticClass:"card card-zoom-image m-3 overflow-hidden",class:[e.imageAlignments[t.imageAlignment]]},[t.imageSource&&!t.teaserMedia?n("div",{staticClass:"card-image position-relative overflow-hidden",class:e.getClassHW(t.imageAlignment)},[n("img",{staticClass:"w-100 h-100 fit-cover",attrs:{src:t.imageSource,alt:t.title,loading:"lazy"}})]):e._e(),e._v(" "),t.teaserMedia?n("div",{staticClass:"card-media position-relative overflow-hidden",class:[e.getClassHW(t.imageAlignment),e.getClassMediaRatio(t.teaserMediaRatio)],domProps:{innerHTML:e._s(t.teaserMedia)}}):e._e(),e._v(" "),t.showOnlyMedia?e._e():n("div",{staticClass:"card-body",class:[e.themes[t.theme],e.getClassHW(t.imageAlignment)]},[t.labelNew?n("span",{staticClass:"new-article"},[e._v("\n              "+e._s(e.dataLabel.newLabel)+"\n            ")]):e._e(),e._v(" "),e.teaserHasCategories(t)||e.teaserHasMinutesToReadLabel(t)?n("span",{staticClass:"tag"},[t.categories&&t.categories.length>0||t.minutes?n("i",{staticClass:"icon-chevron is-right"}):e._e(),e._v(" "),e._l(t.categories,(function(i,r){return[n("strong",{staticClass:"category text-uppercase"},[e._v(e._s(i.text)),e.isLastCategoryElement(r,t)?e._e():n("span",[e._v("|")])]),e._v(" "),e.isLastCategoryElement(r,t)&&e.teaserHasMinutesToReadLabel(t)?n("span",[e._v("|")]):e._e()]})),e._v(" "),t.minutes?n("span",{staticClass:"read-time text-nowrap"},[e._v("\n                "+e._s(t.minutes)+"\n                "+e._s(e.dataLabel.readTimeLabel)+"\n              ")]):e._e()],2):e._e(),e._v(" "),n("strong",{domProps:{innerHTML:e._s(t.title)}}),e._v(" "),n("span",{staticClass:"articlePublishedDate hide-element"},[e._v(e._s(t.articlePublishedDate))]),e._v(" "),n("span",{staticClass:"title-arrow"},[n("svg",{attrs:{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20","aria-hidden":"true",focusable:"false"}},[n("path",{attrs:{d:"M7 3.291L6.291 4l.355.354L12.291 10l-5.645 5.646-.355.354.709.709.354-.355L13.709 10 7.354 3.646z"}})])]),e._v(" "),n("p",{domProps:{innerHTML:e._s(t.description)}})]),e._v(" "),t.removeOverlayLinkInVideoTeaser?e._e():n("a",{staticClass:"overlay-link",attrs:{href:t.link},domProps:{innerHTML:e._s(t.title)}})])])}))],2)])])};ga._withStripped=!0;var ya=n(391),ba=n.n(ya),_a=n(564),Ea=n.n(_a);const wa={name:"VueIsotope",props:{dataConfig:{type:Object,default:{}},dataLabel:{type:Object,default:{}}},data:function(){return{iso:null,themes:{sandGrey:"bg-sand-grey",graniteGrey:"bg-granite-grey",lightBlue:"bg-light-blue",oceanGreen:"bg-ocean-green",rosePink:"bg-rose-pink",seaBlue:"bg-sea-blue"},imageAlignments:{left:"d-flex align-items-stretch flex-row",top:"d-flex align-items-stretch flex-column",right:"d-flex align-items-stretch flex-row-reverse",bottom:"d-flex align-items-stretch flex-column-reverse"},teaserWidth:{normal:"w-lg-33 w-md-50 w-100",wide:"w-lg-67 w-100"},selectedCategories:[]}},watch:{selectedCategories:function(){0!==this.selectedCategories.length&&this.selectedCategories.length!==this.dataConfig.categories.length?this.onFilter(this.selectedCategories):this.onFilter()}},computed:{isNoneCategoriesSelected:function(){return 0===this.selectedCategories.length}},mounted:function(){var e=this,t=this.$route.query.filters;t&&(this.selectedCategories=t.split(",")),this.$nextTick((function(){e.iso=new(ba())(e.$refs.isotopeGrid,{itemSelector:".isotope-item",layoutMode:"fitRows",getSortData:{date:".articlePublishedDate"},sortBy:e.dataConfig.sortByDate?["date","original-order"]:"original-order",sortAscending:{date:!1}}),Ea()(e.$refs.isotopeGrid).on("progress",function(){this.iso.layout()}.bind(e))}))},methods:{onFilter:function(e){var t=this,n=["*"];Array.isArray(e)&&(n=e.map((function(e){if(e)return"."+e}))),this.$nextTick((function(){0!==n.length&&(t.iso.arrange({filter:n.join()}),t.$router.push({query:{filters:[e],wcmmode:t.$route.query.wcmmode}}))}
117))},getClassHW:function(e){return"left"===e||"right"===e?"w-50":"h-50"},getClassMediaRatio:function(e){var t={"16:9":"ratio-sixteennine","4:3":"ratio-fourthree"},n="";return Object.keys(t).includes(e)&&(n=t[e]),n},selectAll:function(){if(this.isNoneCategoriesSelected)return!1;this.selectedCategories=[]},getClassFromTeaserCategories:function(e){return e?e.reduce((function(e,t){return"".concat(e," ").concat(t.value)}),""):""},teaserHasCategories:function(e){return e.categories},teaserHasMinutesToReadLabel:function(e){return e.minutes},isLastCategoryElement:function(e,t){return e===t.categories.length-1}}};var Ca=function(e,t,n,i,r,o,s,a){var l,c="function"==typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=[],c._compiled=!0),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:c}}(wa,ga);Ca.options.__file="taw-frontend/ui-theme/ui-cs/js/components/contentcategoryfilter.vue";const Sa=Ca.exports;function Ta(e,t){for(var n in t)e[n]=t[n];return e}var xa=/[!'()*]/g,Oa=function(e){return"%"+e.charCodeAt(0).toString(16)},La=/%2C/g,Aa=function(e){return encodeURIComponent(e).replace(xa,Oa).replace(La,",")};function Ia(e){try{return decodeURIComponent(e)}catch(e){}return e}var ka=function(e){return null==e||"object"==typeof e?e:String(e)};function Ma(e){var t={};return(e=e.trim().replace(/^(\?|#|&)/,""))?(e.split("&").forEach((function(e){var n=e.replace(/\+/g," ").split("="),i=Ia(n.shift()),r=n.length>0?Ia(n.join("=")):null;void 0===t[i]?t[i]=r:Array.isArray(t[i])?t[i].push(r):t[i]=[t[i],r]})),t):t}function Pa(e){var t=e?Object.keys(e).map((function(t){var n=e[t];if(void 0===n)return"";if(null===n)return Aa(t);if(Array.isArray(n)){var i=[];return n.forEach((function(e){void 0!==e&&(null===e?i.push(Aa(t)):i.push(Aa(t)+"="+Aa(e)))})),i.join("&")}return Aa(t)+"="+Aa(n)})).filter((function(e){return e.length>0})).join("&"):null;return t?"?"+t:""}var Da=/\/?$/;function Na(e,t,n,i){var r=i&&i.options.stringifyQuery,o=t.query||{};try{o=$a(o)}catch(e){}var s={name:t.name||e&&e.name,meta:e&&e.meta||{},path:t.path||"/",hash:t.hash||"",query:o,params:t.params||{},fullPath:Fa(t,r),matched:e?Ra(e):[]};return n&&(s.redirectedFrom=Fa(n,r)),Object.freeze(s)}function $a(e){if(Array.isArray(e))return e.map($a);if(e&&"object"==typeof e){var t={};for(var n in e)t[n]=$a(e[n]);return t}return e}var ja=Na(null,{path:"/"});function Ra(e){for(var t=[];e;)t.unshift(e),e=e.parent;return t}function Fa(e,t){var n=e.path,i=e.query;void 0===i&&(i={});var r=e.hash;return void 0===r&&(r=""),(n||"/")+(t||Pa)(i)+r}function za(e,t,n){return t===ja?e===t:!!t&&(e.path&&t.path?e.path.replace(Da,"")===t.path.replace(Da,"")&&(n||e.hash===t.hash&&Ba(e.query,t.query)):!(!e.name||!t.name)&&e.name===t.name&&(n||e.hash===t.hash&&Ba(e.query,t.query)&&Ba(e.params,t.params)))}function Ba(e,t){if(void 0===e&&(e={}),void 0===t&&(t={}),!e||!t)return e===t;var n=Object.keys(e).sort(),i=Object.keys(t).sort();return n.length===i.length&&n.every((function(n,r){var o=e[n];if(i[r]!==n)return!1;var s=t[n];return null==o||null==s?o===s:"object"==typeof o&&"object"==typeof s?Ba(o,s):String(o)===String(s)}))}function Ha(e){for(var t=0;t<e.matched.length;t++){var n=e.matched[t];for(var i in n.instances){var r=n.instances[i],o=n.enteredCbs[i];if(r&&o){delete n.enteredCbs[i];for(var s=0;s<o.length;s++)r._isBeingDestroyed||o[s](r)}}}}var Wa={name:"RouterView",functional:!0,props:{name:{type:String,default:"default"}},render:function(e,t){var n=t.props,i=t.children,r=t.parent,o=t.data;o.routerView=!0;for(var s=r.$createElement,a=n.name,l=r.$route,c=r._routerViewCache||(r._routerViewCache={}),u=0,d=!1;r&&r._routerRoot!==r;){var p=r.$vnode?r.$vnode.data:{};p.routerView&&u++,p.keepAlive&&r._directInactive&&r._inactive&&(d=!0),r=r.$parent}if(o.routerViewDepth=u,d){var h=c[a],f=h&&h.component;return f?(h.configProps&&Ga(f,o,h.route,h.configProps),s(f,o,i)):s()}var v=l.matched[u],m=v&&v.components[a];if(!v||!m)return c[a]=null,s();c[a]={component:m},o.registerRouteInstance=function(e,t){var n=v.instances[a];(t&&n!==e||!t&&n===e)&&(v.instances[a]=t)},(o.hook||(o.hook={})).prepatch=function(e,t){v.instances[a]=t.componentInstance},o.hook.init=function(e){e.data.keepAlive&&e.componentInstance&&e.componentInstance!==v.instances[a]&&(v.instances[a]=e.componentInstance),Ha(l)};var g=v.props&&v.props[a];return g&&(Ta(c[a],{route:l,configProps:g}),Ga(m,o,l,g)),s(m,o,i)}};function Ga(e,t,n,i){var r=t.props=function(e,t){switch(typeof t){case"undefined":return;case"object":return t;case"function":return t(e);case"boolean":return t?e.params:void 0}}(n,i);if(r){r=t.props=Ta({},r);var o=t.attrs=t.attrs||{};for(var s in r)e.props&&s in e.props||(o[s]=r[s],delete r[s])}}function qa(e,t,n){var i=e.charAt(0);if("/"===i)return e;if("?"===i||"#"===i)return t+e;var r=t.split("/");n&&r[r.length-1]||r.pop();for(var o=e.replace(/^\//,"").split("/"),s=0;s<o.length;s++){var a=o[s];".."===a?r.pop():"."!==a&&r.push(a)}return""!==r[0]&&r.unshift(""),r.join("/")}function Va(e){return e.replace(/\/+/g,"/")}var Ya=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)},Ua=function e(t,n,i){return Ya(n)||(i=n||i,n=[]),i=i||{},t instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var i=0;i<n.length;i++)t.push({name:i,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return ol(e,t)}(t,n):Ya(t)?function(t,n,i){for(var r=[],o=0;o<t.length;o++)r.push(e(t[o],n,i).source);return ol(new RegExp("(?:"+r.join("|")+")",sl(i)),n)}(t,n,i):function(e,t,n){return al(Za(e,n),t,n)}(t,n,i)},Ka=Za,Xa=nl,Ja=al,Qa=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function Za(e,t){for(var n,i=[],r=0,o=0,s="",a=t&&t.delimiter||"/";null!=(n=Qa.exec(e));){var l=n[0],c=n[1],u=n.index;if(s+=e.slice(o,u),o=u+l.length,c)s+=c[1];else{var d=e[o],p=n[2],h=n[3],f=n[4],v=n[5],m=n[6],g=n[7];s&&(i.push(s),s="");var y=null!=p&&null!=d&&d!==p,b="+"===m||"*"===m,_="?"===m||"*"===m,E=n[2]||a,w=f||v;i.push({name:h||r++,prefix:p||"",delimiter:E,optional:_,repeat:b,partial:y,asterisk:!!g,pattern:w?rl(w):g?".*":"[^"+il(E)+"]+?"})}}return o<e.length&&(s+=e.substr(o)),s&&i.push(s),i}function el(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function tl(e){return encodeURI(e).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function nl(e,t){for(var n=new Array(e.length),i=0;i<e.length;i++)"object"==typeof e[i]&&(n[i]=new RegExp("^(?:"+e[i].pattern+")$",sl(t)));return function(t,i){for(var r="",o=t||{},s=(i||{}).pretty?el:encodeURIComponent,a=0;a<e.length;a++){var l=e[a];if("string"!=typeof l){var c,u=o[l.name];if(null==u){if(l.optional){l.partial&&(r+=l.prefix);continue}throw new TypeError('Expected "'+l.name+'" to be defined')}if(Ya(u)){if(!l.repeat)throw new TypeError('Expected "'+l.name+'" to not repeat, but received `'+JSON.stringify(u)+"`");if(0===u.length){if(l.optional)continue;throw new TypeError('Expected "'+l.name+'" to not be empty')}for(var d=0;d<u.length;d++){if(c=s(u[d]),!n[a].test(c))throw new TypeError('Expected all "'+l.name+'" to match "'+l.pattern+'", but received `'+JSON.stringify(c)+"`");r+=(0===d?l.prefix:l.delimiter)+c}}
117else{if(c=l.asterisk?tl(u):s(u),!n[a].test(c))throw new TypeError('Expected "'+l.name+'" to match "'+l.pattern+'", but received "'+c+'"');r+=l.prefix+c}}else r+=l}return r}}function il(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function rl(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function ol(e,t){return e.keys=t,e}function sl(e){return e&&e.sensitive?"":"i"}function al(e,t,n){Ya(t)||(n=t||n,t=[]);for(var i=(n=n||{}).strict,r=!1!==n.end,o="",s=0;s<e.length;s++){var a=e[s];if("string"==typeof a)o+=il(a);else{var l=il(a.prefix),c="(?:"+a.pattern+")";t.push(a),a.repeat&&(c+="(?:"+l+c+")*"),o+=c=a.optional?a.partial?l+"("+c+")?":"(?:"+l+"("+c+"))?":l+"("+c+")"}}var u=il(n.delimiter||"/"),d=o.slice(-u.length)===u;return i||(o=(d?o.slice(0,-u.length):o)+"(?:"+u+"(?=$))?"),o+=r?"$":i&&d?"":"(?="+u+"|$)",ol(new RegExp("^"+o,sl(n)),t)}Ua.parse=Ka,Ua.compile=function(e,t){return nl(Za(e,t),t)},Ua.tokensToFunction=Xa,Ua.tokensToRegExp=Ja;var ll=Object.create(null);function cl(e,t,n){t=t||{};try{var i=ll[e]||(ll[e]=Ua.compile(e));return"string"==typeof t.pathMatch&&(t[0]=t.pathMatch),i(t,{pretty:!0})}catch(e){return""}finally{delete t[0]}}function ul(e,t,n,i){var r="string"==typeof e?{path:e}:e;if(r._normalized)return r;if(r.name){var o=(r=Ta({},e)).params;return o&&"object"==typeof o&&(r.params=Ta({},o)),r}if(!r.path&&r.params&&t){(r=Ta({},r))._normalized=!0;var s=Ta(Ta({},t.params),r.params);if(t.name)r.name=t.name,r.params=s;else if(t.matched.length){var a=t.matched[t.matched.length-1].path;r.path=cl(a,s,t.path)}return r}var l=function(e){var t="",n="",i=e.indexOf("#");i>=0&&(t=e.slice(i),e=e.slice(0,i));var r=e.indexOf("?");return r>=0&&(n=e.slice(r+1),e=e.slice(0,r)),{path:e,query:n,hash:t}}(r.path||""),c=t&&t.path||"/",u=l.path?qa(l.path,c,n||r.append):c,d=function(e,t,n){void 0===t&&(t={});var i,r=n||Ma;try{i=r(e||"")}catch(e){i={}}for(var o in t){var s=t[o];i[o]=Array.isArray(s)?s.map(ka):ka(s)}return i}(l.query,r.query,i&&i.options.parseQuery),p=r.hash||l.hash;return p&&"#"!==p.charAt(0)&&(p="#"+p),{_normalized:!0,path:u,query:d,hash:p}}var dl,pl=function(){},hl={name:"RouterLink",props:{to:{type:[String,Object],required:!0},tag:{type:String,default:"a"},custom:Boolean,exact:Boolean,exactPath:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,ariaCurrentValue:{type:String,default:"page"},event:{type:[String,Array],default:"click"}},render:function(e){var t=this,n=this.$router,i=this.$route,r=n.resolve(this.to,i,this.append),o=r.location,s=r.route,a=r.href,l={},c=n.options.linkActiveClass,u=n.options.linkExactActiveClass,d=null==c?"router-link-active":c,p=null==u?"router-link-exact-active":u,h=null==this.activeClass?d:this.activeClass,f=null==this.exactActiveClass?p:this.exactActiveClass,v=s.redirectedFrom?Na(null,ul(s.redirectedFrom),null,n):s;l[f]=za(i,v,this.exactPath),l[h]=this.exact||this.exactPath?l[f]:function(e,t){return 0===e.path.replace(Da,"/").indexOf(t.path.replace(Da,"/"))&&(!t.hash||e.hash===t.hash)&&function(e,t){for(var n in t)if(!(n in e))return!1;return!0}(e.query,t.query)}(i,v);var m=l[f]?this.ariaCurrentValue:null,g=function(e){fl(e)&&(t.replace?n.replace(o,pl):n.push(o,pl))},y={click:fl};Array.isArray(this.event)?this.event.forEach((function(e){y[e]=g})):y[this.event]=g;var b={class:l},_=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:a,route:s,navigate:g,isActive:l[h],isExactActive:l[f]});if(_){if(1===_.length)return _[0];if(_.length>1||!_.length)return 0===_.length?e():e("span",{},_)}if("a"===this.tag)b.on=y,b.attrs={href:a,"aria-current":m};else{var E=vl(this.$slots.default);if(E){E.isStatic=!1;var w=E.data=Ta({},E.data);for(var C in w.on=w.on||{},w.on){var S=w.on[C];C in y&&(w.on[C]=Array.isArray(S)?S:[S])}for(var T in y)T in w.on?w.on[T].push(y[T]):w.on[T]=g;var x=E.data.attrs=Ta({},E.data.attrs);x.href=a,x["aria-current"]=m}else b.on=y}return e(this.tag,b,this.$slots.default)}};function fl(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey||e.defaultPrevented||void 0!==e.button&&0!==e.button)){if(e.currentTarget&&e.currentTarget.getAttribute){var t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function vl(e){if(e)for(var t,n=0;n<e.length;n++){if("a"===(t=e[n]).tag)return t;if(t.children&&(t=vl(t.children)))return t}}var ml="undefined"!=typeof window;function gl(e,t,n,i,r){var o=t||[],s=n||Object.create(null),a=i||Object.create(null);e.forEach((function(e){yl(o,s,a,e,r)}));for(var l=0,c=o.length;l<c;l++)"*"===o[l]&&(o.push(o.splice(l,1)[0]),c--,l--);return{pathList:o,pathMap:s,nameMap:a}}function yl(e,t,n,i,r,o){var s=i.path,a=i.name,l=i.pathToRegexpOptions||{},c=function(e,t,n){return n||(e=e.replace(/\/$/,"")),"/"===e[0]||null==t?e:Va(t.path+"/"+e)}(s,r,l.strict);"boolean"==typeof i.caseSensitive&&(l.sensitive=i.caseSensitive);var u={path:c,regex:bl(c,l),components:i.components||{default:i.component},alias:i.alias?"string"==typeof i.alias?[i.alias]:i.alias:[],instances:{},enteredCbs:{},name:a,parent:r,matchAs:o,redirect:i.redirect,beforeEnter:i.beforeEnter,meta:i.meta||{},props:null==i.props?{}:i.components?i.props:{default:i.props}};
117if(i.children&&i.children.forEach((function(i){var r=o?Va(o+"/"+i.path):void 0;yl(e,t,n,i,u,r)})),t[u.path]||(e.push(u.path),t[u.path]=u),void 0!==i.alias)for(var d=Array.isArray(i.alias)?i.alias:[i.alias],p=0;p<d.length;++p){var h={path:d[p],children:i.children};yl(e,t,n,h,r,u.path||"/")}a&&(n[a]||(n[a]=u))}function bl(e,t){return Ua(e,[],t)}function _l(e,t){var n=gl(e),i=n.pathList,r=n.pathMap,o=n.nameMap;function s(e,n,s){var l=ul(e,n,!1,t),c=l.name;if(c){var u=o[c];if(!u)return a(null,l);var d=u.regex.keys.filter((function(e){return!e.optional})).map((function(e){return e.name}));if("object"!=typeof l.params&&(l.params={}),n&&"object"==typeof n.params)for(var p in n.params)!(p in l.params)&&d.indexOf(p)>-1&&(l.params[p]=n.params[p]);return l.path=cl(u.path,l.params),a(u,l,s)}if(l.path){l.params={};for(var h=0;h<i.length;h++){var f=i[h],v=r[f];if(El(v.regex,l.path,l.params))return a(v,l,s)}}return a(null,l)}function a(e,n,i){return e&&e.redirect?function(e,n){var i=e.redirect,r="function"==typeof i?i(Na(e,n,null,t)):i;if("string"==typeof r&&(r={path:r}),!r||"object"!=typeof r)return a(null,n);var l=r,c=l.name,u=l.path,d=n.query,p=n.hash,h=n.params;if(d=l.hasOwnProperty("query")?l.query:d,p=l.hasOwnProperty("hash")?l.hash:p,h=l.hasOwnProperty("params")?l.params:h,c)return o[c],s({_normalized:!0,name:c,query:d,hash:p,params:h},void 0,n);if(u){var f=function(e,t){return qa(e,t.parent?t.parent.path:"/",!0)}(u,e);return s({_normalized:!0,path:cl(f,h),query:d,hash:p},void 0,n)}return a(null,n)}(e,i||n):e&&e.matchAs?function(e,t,n){var i=s({_normalized:!0,path:cl(n,t.params)});if(i){var r=i.matched,o=r[r.length-1];return t.params=i.params,a(o,t)}return a(null,t)}(0,n,e.matchAs):Na(e,n,i,t)}return{match:s,addRoute:function(e,t){var n="object"!=typeof e?o[e]:void 0;gl([t||e],i,r,o,n),n&&n.alias.length&&gl(n.alias.map((function(e){return{path:e,children:[t]}})),i,r,o,n)},getRoutes:function(){return i.map((function(e){return r[e]}))},addRoutes:function(e){gl(e,i,r,o)}}}function El(e,t,n){var i=t.match(e);if(!i)return!1;if(!n)return!0;for(var r=1,o=i.length;r<o;++r){var s=e.keys[r-1];
117s&&(n[s.name||"pathMatch"]="string"==typeof i[r]?Ia(i[r]):i[r])}return!0}var wl=ml&&window.performance&&window.performance.now?window.performance:Date;function Cl(){return wl.now().toFixed(3)}var Sl=Cl();function Tl(){return Sl}function xl(e){return Sl=e}var Ol=Object.create(null);function Ll(){"scrollRestoration"in window.history&&(window.history.scrollRestoration="manual");var e=window.location.protocol+"//"+window.location.host,t=window.location.href.replace(e,""),n=Ta({},window.history.state);return n.key=Tl(),window.history.replaceState(n,"",t),window.addEventListener("popstate",kl),function(){window.removeEventListener("popstate",kl)}}function Al(e,t,n,i){if(e.app){var r=e.options.scrollBehavior;r&&e.app.$nextTick((function(){var o=function(){var e=Tl();if(e)return Ol[e]}(),s=r.call(e,t,n,i?o:null);s&&("function"==typeof s.then?s.then((function(e){$l(e,o)})).catch((function(e){})):$l(s,o))}))}}function Il(){var e=Tl();e&&(Ol[e]={x:window.pageXOffset,y:window.pageYOffset})}function kl(e){Il(),e.state&&e.state.key&&xl(e.state.key)}function Ml(e){return Dl(e.x)||Dl(e.y)}function Pl(e){return{x:Dl(e.x)?e.x:window.pageXOffset,y:Dl(e.y)?e.y:window.pageYOffset}}function Dl(e){return"number"==typeof e}var Nl=/^#\d/;function $l(e,t){var n,i="object"==typeof e;if(i&&"string"==typeof e.selector){var r=Nl.test(e.selector)?document.getElementById(e.selector.slice(1)):document.querySelector(e.selector);if(r){var o=e.offset&&"object"==typeof e.offset?e.offset:{};t=function(e,t){var n=document.documentElement.getBoundingClientRect(),i=e.getBoundingClientRect();return{x:i.left-n.left-t.x,y:i.top-n.top-t.y}}(r,o={x:Dl((n=o).x)?n.x:0,y:Dl(n.y)?n.y:0})}else Ml(e)&&(t=Pl(e))}else i&&Ml(e)&&(t=Pl(e));t&&("scrollBehavior"in document.documentElement.style?window.scrollTo({left:t.x,top:t.y,behavior:e.behavior}):window.scrollTo(t.x,t.y))}var jl,Rl=ml&&(-1===(jl=window.navigator.userAgent).indexOf("Android 2.")&&-1===jl.indexOf("Android 4.0")||-1===jl.indexOf("Mobile Safari")||-1!==jl.indexOf("Chrome")||-1!==jl.indexOf("Windows Phone"))&&window.history&&"function"==typeof window.history.pushState;function Fl(e,t){Il();var n=window.history;try{if(t){var i=Ta({},n.state);i.key=Tl(),n.replaceState(i,"",e)}else n.pushState({key:xl(Cl())},"",e)}catch(n){window.location[t?"replace":"assign"](e)}}function zl(e){Fl(e,!0)}function Bl(e,t,n){var i=function(r){r>=e.length?n():e[r]?t(e[r],(function(){i(r+1)})):i(r+1)};i(0)}var Hl={redirected:2,aborted:4,cancelled:8,duplicated:16};function Wl(e,t){return Gl(e,t,Hl.cancelled,'Navigation cancelled from "'+e.fullPath+'" to "'+t.fullPath+'" with a new navigation.')}function Gl(e,t,n,i){var r=new Error(i);return r._isRouter=!0,r.from=e,r.to=t,r.type=n,r}var ql=["params","query","hash"];function Vl(e){return Object.prototype.toString.call(e).indexOf("Error")>-1}function Yl(e,t){return Vl(e)&&e._isRouter&&(null==t||e.type===t)}function Ul(e,t){return Kl(e.map((function(e){return Object.keys(e.components).map((function(n){return t(e.components[n],e.instances[n],e,n)}))})))}function Kl(e){return Array.prototype.concat.apply([],e)}var Xl="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function Jl(e){var t=!1;return function(){for(var n=[],i=arguments.length;i--;)n[i]=arguments[i];if(!t)return t=!0,e.apply(this,n)}}var Ql=function(e,t){this.router=e,this.base=function(e){if(!e)if(ml){var t=document.querySelector("base");e=(e=t&&t.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else e="/";return"/"!==e.charAt(0)&&(e="/"+e),e.replace(/\/$/,"")}(t),this.current=ja,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function Zl(e,t,n,i){var r=Ul(e,(function(e,i,r,o){var s=function(e,t){return"function"!=typeof e&&(e=dl.extend(e)),e.options[t]}(e,t);if(s)return Array.isArray(s)?s.map((function(e){return n(e,i,r,o)})):n(s,i,r,o)}));return Kl(i?r.reverse():r)}function ec(e,t){if(t)return function(){return e.apply(t,arguments)}}Ql.prototype.listen=function(e){this.cb=e},Ql.prototype.onReady=function(e,t){this.ready?e():(this.readyCbs.push(e),t&&this.readyErrorCbs.push(t))},Ql.prototype.onError=function(e){this.errorCbs.push(e)},Ql.prototype.transitionTo=function(e,t,n){var i,r=this;try{i=this.router.match(e,this.current)}
117catch(e){throw this.errorCbs.forEach((function(t){t(e)})),e}var o=this.current;this.confirmTransition(i,(function(){r.updateRoute(i),t&&t(i),r.ensureURL(),r.router.afterHooks.forEach((function(e){e&&e(i,o)})),r.ready||(r.ready=!0,r.readyCbs.forEach((function(e){e(i)})))}),(function(e){n&&n(e),e&&!r.ready&&(Yl(e,Hl.redirected)&&o===ja||(r.ready=!0,r.readyErrorCbs.forEach((function(t){t(e)}))))}))},Ql.prototype.confirmTransition=function(e,t,n){var i=this,r=this.current;this.pending=e;var o,s,a=function(e){!Yl(e)&&Vl(e)&&(i.errorCbs.length?i.errorCbs.forEach((function(t){t(e)})):console.error(e)),n&&n(e)},l=e.matched.length-1,c=r.matched.length-1;if(za(e,r)&&l===c&&e.matched[l]===r.matched[c])return this.ensureURL(),e.hash&&Al(this.router,r,e,!1),a(((s=Gl(o=r,e,Hl.duplicated,'Avoided redundant navigation to current location: "'+o.fullPath+'".')).name="NavigationDuplicated",s));var u,d=function(e,t){var n,i=Math.max(e.length,t.length);for(n=0;n<i&&e[n]===t[n];n++);return{updated:t.slice(0,n),activated:t.slice(n),deactivated:e.slice(n)}}(this.current.matched,e.matched),p=d.updated,h=d.deactivated,f=d.activated,v=[].concat(function(e){return Zl(e,"beforeRouteLeave",ec,!0)}(h),this.router.beforeHooks,function(e){return Zl(e,"beforeRouteUpdate",ec)}(p),f.map((function(e){return e.beforeEnter})),(u=f,function(e,t,n){var i=!1,r=0,o=null;Ul(u,(function(e,t,s,a){if("function"==typeof e&&void 0===e.cid){i=!0,r++;var l,c=Jl((function(t){var i;((i=t).__esModule||Xl&&"Module"===i[Symbol.toStringTag])&&(t=t.default),e.resolved="function"==typeof t?t:dl.extend(t),s.components[a]=t,--r<=0&&n()})),u=Jl((function(e){var t="Failed to resolve async component "+a+": "+e;o||(o=Vl(e)?e:new Error(t),n(o))}));try{l=e(c,u)}catch(e){u(e)}if(l)if("function"==typeof l.then)l.then(c,u);else{var d=l.component;d&&"function"==typeof d.then&&d.then(c,u)}}})),i||n()})),m=function(t,n){if(i.pending!==e)return a(Wl(r,e));try{t(e,r,(function(t){!1===t?(i.ensureURL(!0),a(function(e,t){return Gl(e,t,Hl.aborted,'Navigation aborted from "'+e.fullPath+'" to "'+t.fullPath+'" via a navigation guard.')}(r,e))):Vl(t)?(i.ensureURL(!0),a(t)):"string"==typeof t||"object"==typeof t&&("string"==typeof t.path||"string"==typeof t.name)?(a(function(e,t){return Gl(e,t,Hl.redirected,'Redirected when going from "'+e.fullPath+'" to "'+function(e){if("string"==typeof e)return e;if("path"in e)return e.path;var t={};return ql.forEach((function(n){n in e&&(t[n]=e[n])})),JSON.stringify(t,null,2)}(t)+'" via a navigation guard.')}(r,e)),"object"==typeof t&&t.replace?i.replace(t):i.push(t)):n(t)}))}catch(e){a(e)}};Bl(v,m,(function(){var n=function(e){return Zl(e,"beforeRouteEnter",(function(e,t,n,i){return function(e,t,n){return function(i,r,o){return e(i,r,(function(e){"function"==typeof e&&(t.enteredCbs[n]||(t.enteredCbs[n]=[]),t.enteredCbs[n].push(e)),o(e)}))}}(e,n,i)}))}(f);Bl(n.concat(i.router.resolveHooks),m,(function(){if(i.pending!==e)return a(Wl(r,e));i.pending=null,t(e),i.router.app&&i.router.app.$nextTick((function(){Ha(e)}))}))}))},Ql.prototype.updateRoute=function(e){this.current=e,this.cb&&this.cb(e)},Ql.prototype.setupListeners=function(){},Ql.prototype.teardown=function(){this.listeners.forEach((function(e){e()})),this.listeners=[],this.current=ja,this.pending=null};var tc=function(e){function t(t,n){e.call(this,t,n),this._startLocation=nc(this.base)}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.setupListeners=function(){var e=this;if(!(this.listeners.length>0)){var t=this.router,n=t.options.scrollBehavior,i=Rl&&n;i&&this.listeners.push(Ll());var r=function(){var n=e.current,r=nc(e.base);e.current===ja&&r===e._startLocation||e.transitionTo(r,(function(e){i&&Al(t,e,n,!0)}))};window.addEventListener("popstate",r),this.listeners.push((function(){window.removeEventListener("popstate",r)}))}},t.prototype.go=function(e){window.history.go(e)},t.prototype.push=function(e,t,n){var i=this,r=this.current;this.transitionTo(e,(function(e){Fl(Va(i.base+e.fullPath)),Al(i.router,e,r,!1),t&&t(e)}),n)},t.prototype.replace=function(e,t,n){var i=this,r=this.current;this.transitionTo(e,(function(e){zl(Va(i.base+e.fullPath)),Al(i.router,e,r,!1),t&&t(e)}),n)},t.prototype.ensureURL=function(e){if(nc(this.base)!==this.current.fullPath){var t=Va(this.base+this.current.fullPath);e?Fl(t):zl(t)}},t.prototype.getCurrentLocation=function(){return nc(this.base)},t}(Ql);function nc(e){var t=window.location.pathname,n=t.toLowerCase(),i=e.toLowerCase();return!e||n!==i&&0!==n.indexOf(Va(i+"/"))||(t=t.slice(e.length)),(t||"/")+window.location.search+window.location.hash}var ic=function(e){function t(t,n,i){e.call(this,t,n),i&&function(e){var t=nc(e);if(!/^\/#/.test(t))return window.location.replace(Va(e+"/#"+t)),!0}(this.base)||rc()}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.setupListeners=function(){var e=this;if(!(this.listeners.length>0)){var t=this.router.options.scrollBehavior,n=Rl&&t;n&&this.listeners.push(Ll());var i=function(){var t=e.current;rc()&&e.transitionTo(oc(),(function(i){n&&Al(e.router,i,t,!0),Rl||lc(i.fullPath)}))},r=Rl?"popstate":"hashchange";window.addEventListener(r,i),this.listeners.push((function(){window.removeEventListener(r,i)}
vendor: 4,067 bytes, line 117
117))}},t.prototype.push=function(e,t,n){var i=this,r=this.current;this.transitionTo(e,(function(e){ac(e.fullPath),Al(i.router,e,r,!1),t&&t(e)}),n)},t.prototype.replace=function(e,t,n){var i=this,r=this.current;this.transitionTo(e,(function(e){lc(e.fullPath),Al(i.router,e,r,!1),t&&t(e)}),n)},t.prototype.go=function(e){window.history.go(e)},t.prototype.ensureURL=function(e){var t=this.current.fullPath;oc()!==t&&(e?ac(t):lc(t))},t.prototype.getCurrentLocation=function(){return oc()},t}(Ql);function rc(){var e=oc();return"/"===e.charAt(0)||(lc("/"+e),!1)}function oc(){var e=window.location.href,t=e.indexOf("#");return t<0?"":e=e.slice(t+1)}function sc(e){var t=window.location.href,n=t.indexOf("#");return(n>=0?t.slice(0,n):t)+"#"+e}function ac(e){Rl?Fl(sc(e)):window.location.hash=e}function lc(e){Rl?zl(sc(e)):window.location.replace(sc(e))}var cc=function(e){function t(t,n){e.call(this,t,n),this.stack=[],this.index=-1}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.push=function(e,t,n){var i=this;this.transitionTo(e,(function(e){i.stack=i.stack.slice(0,i.index+1).concat(e),i.index++,t&&t(e)}),n)},t.prototype.replace=function(e,t,n){var i=this;this.transitionTo(e,(function(e){i.stack=i.stack.slice(0,i.index).concat(e),t&&t(e)}),n)},t.prototype.go=function(e){var t=this,n=this.index+e;if(!(n<0||n>=this.stack.length)){var i=this.stack[n];this.confirmTransition(i,(function(){var e=t.current;t.index=n,t.updateRoute(i),t.router.afterHooks.forEach((function(t){t&&t(i,e)}))}),(function(e){Yl(e,Hl.duplicated)&&(t.index=n)}))}},t.prototype.getCurrentLocation=function(){var e=this.stack[this.stack.length-1];return e?e.fullPath:"/"},t.prototype.ensureURL=function(){},t}(Ql),uc=function(e){void 0===e&&(e={}),this.app=null,this.apps=[],this.options=e,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=_l(e.routes||[],this);var t=e.mode||"hash";switch(this.fallback="history"===t&&!Rl&&!1!==e.fallback,this.fallback&&(t="hash"),ml||(t="abstract"),this.mode=t,t){case"history":this.history=new tc(this,e.base);break;case"hash":this.history=new ic(this,e.base,this.fallback);break;case"abstract":this.history=new cc(this,e.base)}},dc={currentRoute:{configurable:!0}};function pc(e,t){return e.push(t),function(){var n=e.indexOf(t);n>-1&&e.splice(n,1)}}uc.prototype.match=function(e,t,n){return this.matcher.match(e,t,n)},dc.currentRoute.get=function(){return this.history&&this.history.current},uc.prototype.init=function(e){var t=this;if(this.apps.push(e),e.$once("hook:destroyed",(function(){var n=t.apps.indexOf(e);n>-1&&t.apps.splice(n,1),t.app===e&&(t.app=t.apps[0]||null),t.app||t.history.teardown()})),!this.app){this.app=e;var n=this.history;if(n instanceof tc||n instanceof ic){var i=function(e){n.setupListeners(),function(e){var i=n.current,r=t.options.scrollBehavior;Rl&&r&&"fullPath"in e&&Al(t,e,i,!1)}(e)};n.transitionTo(n.getCurrentLocation(),i,i)}n.listen((function(e){t.apps.forEach((function(t){t._route=e}))}))}},uc.prototype.beforeEach=function(e){return pc(this.beforeHooks,e)},uc.prototype.beforeResolve=function(e){return pc(this.resolveHooks,e)},uc.prototype.afterEach=function(e){return pc(this.afterHooks,e)},uc.prototype.onReady=function(e,t){this.history.onReady(e,t)},uc.prototype.onError=function(e){this.history.onError(e)},uc.prototype.push=function(e,t,n){var i=this;if(!t&&!n&&"undefined"!=typeof Promise)return new Promise((function(t,n){i.history.push(e,t,n)}));this.history.push(e,t,n)},uc.prototype.replace=function(e,t,n){var i=this;if(!t&&!n&&"undefined"!=typeof Promise)return new Promise((function(t,n){i.history.replace(e,t,n)}));this.history.replace(e,t,n)},uc.prototype.go=function(e){this.history.go(e)},uc.prototype.back=function(){this.go(-1)},uc.prototype.forward=function(){this.go(1)},uc.prototype.getMatchedComponents=function(e){var t=e?e.matched?e:this.resolve(e).route:this.currentRoute;return t?[].concat.apply([],t.matched.map((function(e){return Object.keys(e.components).map((function(t){return e.components[t]}))}))):[]}
117,uc.prototype.resolve=function(e,t,n){var i=ul(e,t=t||this.history.current,n,this),r=this.match(i,t),o=r.redirectedFrom||r.fullPath,s=function(e,t,n){var i="hash"===n?"#"+t:t;return e?Va(e+"/"+i):i}(this.history.base,o,this.mode);return{location:i,route:r,href:s,normalizedTo:i,resolved:r}},uc.prototype.getRoutes=function(){return this.matcher.getRoutes()},uc.prototype.addRoute=function(e,t){this.matcher.addRoute(e,t),this.history.current!==ja&&this.history.transitionTo(this.history.getCurrentLocation())},uc.prototype.addRoutes=function(e){this.matcher.addRoutes(e),this.history.current!==ja&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(uc.prototype,dc),uc.install=function e(t){if(!e.installed||dl!==t){e.installed=!0,dl=t;var n=function(e){return void 0!==e},i=function(e,t){var i=e.$options._parentVnode;n(i)&&n(i=i.data)&&n(i=i.registerRouteInstance)&&i(e,t)};t.mixin({beforeCreate:function(){n(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),t.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,i(this,this)},destroyed:function(){i(this)}}),Object.defineProperty(t.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(t.prototype,"$route",{get:function(){return this._routerRoot._route}}),t.component("RouterView",Wa),t.component("RouterLink",hl);var r=t.config.optionMergeStrategies;r.beforeRouteEnter=r.beforeRouteLeave=r.beforeRouteUpdate=r.created}},uc.version="3.5.3",uc.isNavigationFailure=Yl,uc.NavigationFailureType=Hl,uc.START_LOCATION=ja,ml&&window.Vue&&window.Vue.use(uc);const hc=uc;ma.use(hc);const fc=new hc({mode:"history"});var vc=n(797);n.n(vc)()(),n(312),n(730);var mc="active",gc=n(523);n.n(gc)().polyfill();var yc=n(529),bc=n.n(yc);const _c=function(e){var t=e.querySelector("select.cmp-hcp-locator__info-find-country-select"),n=e.querySelector("a.cmp-hcp-locator__info-find-country-cta");return{init:function(){t?new(bc())(t,{shouldSort:!1})?t.addEventListener("choice",(function(e){e.detail||e.detail.choice?n.href=e.detail.choice.value:console.error("There is no selected choice to change link href")})):console.error("Getting error while initiating Choice object"):console.error("Cannot query the select of the hcp-locator")}}};var Ec={MODAL_CLOSE_BUTTON:"cmp-modal__close",MODAL_LINK:"cmp-modal__link",MODAL_OPEN:"modal-open",MODAL_WRAPPER:"cmp-modal__wrapper",MODAL_CONTENT_HIDDEN:"cmp-modal__content--hidden",MODAL_BOX:"cmp-modal__box",PAGE_EXTERNAL_LINKS_CANDIDATES:"a:not(.cmp-modal__link):not(.share-link)",FETCH_OPTS:{cache:"no-store",mode:"same-origin",headers:{"Content-Type":"application/json"}},METHOD:"method",BODY:"body",FORM:"form",FORM_SUCCESS_SECTION:'[data-form-status="success"]',FORM_ERROR_SECTION:'[data-form-status="error"]',COOKIE_FORM:"#confirmationForm",MSG_POPUP_NOT_FOUND:"No function found matching trigger %s",SCSS_MSG:"Todo okay",SIGNUP_FORM:".cmp-modal__box .cmp-newsletter form",COOKIE_NAME:"data-cookie-name",CTA_BTTN:".ctabutton a"},wc=function(e){return!!e.hasAttribute("href")&&new RegExp("^https?:\\/\\/(?!"+location.host+").*$","igu").test(e.getAttribute("href"))},Cc=function(e){return!e.parentElement.classList.contains("cta--has-popup")},Sc=function(e){return!e.closest(".cta--has-popup-partner")&&!e.closest(".cmp-modal__partner")},Tc=function(e){return!e.closest(".".concat(Ec.MODAL_WRAPPER))},xc=function(e){document.body.classList.add(Ec.MODAL_OPEN),e.classList.add(Ec.MODAL_OPEN)},Oc=function(e){document.body.classList.remove(Ec.MODAL_OPEN),e.classList.remove(Ec.MODAL_OPEN)},Lc=function(e,t){-1===document.cookie.indexOf(t)&&xc(e)},Ac=function(e){document.cookie=e+"="+e},Ic=function(){var e=document.querySelector(Ec.SIGNUP_FORM),t=null==e?void 0:e.closest(".".concat(Ec.MODAL_BOX)),n=null==t?void 0:t.querySelectorAll(".".concat(Ec.MODAL_CLOSE_BUTTON)),i=document.querySelector(Ec.SIGNUP_FORM),r=null==t?void 0:t.getAttribute(Ec.COOKIE_NAME),o=function(){Ac(r)};return{init:function(){i?(null==i||i.addEventListener("submit",(function(e){o()}
117)),null==n||n.forEach((function(e){e.addEventListener("click",(function(e){o()}))}))):console.log("newsletterSignupForm is missing from the markup")}}},kc=function(){var e=document.querySelector(Ec.COOKIE_FORM),t=document.querySelector(Ec.SIGNUP_FORM),n=null==t?void 0:t.closest(".".concat(Ec.MODAL_BOX)),i=null==n?void 0:n.querySelectorAll(".".concat(Ec.MODAL_CLOSE_BUTTON)),r=document.querySelector(Ec.SIGNUP_FORM),o=null==n?void 0:n.getAttribute(Ec.COOKIE_NAME),s=function(){Ac(o)};return{init:function(t){Lc(t,o),r?(null==r||r.addEventListener("submit",(function(e){s()})),null==i||i.forEach((function(e){e.addEventListener("click",(function(){Ac(o)}))}))):e?function(t){e.addEventListener("submit",(function(e){s(),Oc(t)}))}(t):console.log("newsletterSignupForm is missing from the markup")}}};function Mc(e){return Mc="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Mc(e)}function Pc(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function Dc(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Pc(Object(n),!0).forEach((function(t){Nc(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Pc(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Nc(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function $c(e){return function(e){if(Array.isArray(e))return jc(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return jc(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?jc(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function jc(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,i=new Array(t);n<t;n++)i[n]=e[n];return i}function Rc(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}var Fc=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.el=t,this.whitelistedSites=[],this.currentHrefValue=null,this.config={selectors:{modalCloseButton:".".concat(Ec.MODAL_CLOSE_BUTTON),modalLink:".".concat(Ec.MODAL_LINK),ctaButton:Ec.CTA_BTTN,pageExternalLinksCandidates:Ec.PAGE_EXTERNAL_LINKS_CANDIDATES,partnerPopup:".cmp-modal__partner",ctaButtonWrapper:".ctabutton",ctaLink:".cta > a"}};try{this.init()}catch(e){console.error(e)}}var t,n;return t=e,n=[{key:"init",value:function(){this.setWhitelistedSiteArray(),this.getElements(),this.setBinds(),this.addEventListeners(),this.moveModalToBody()}},{key:"setWhitelistedSiteArray",value:function(){this.el.hasAttribute("data-whitelisted")&&(this.whitelistedSites=Array.from(this.el.getAttribute("data-whitelisted").split(";")))}},{key:"getElements",value:function(){var e=this.config.selectors,t=e.partnerPopup,n=e.modalCloseButton;this.currentTrigger=null,this.partnerPopup=this.el.closest(t),this.popupTriggers=this.getPopupTriggers(),this.modalCloseBtn=this.el.querySelector(n),this.modalExitConfirmBtn=this.getModalExitConfirmBtn()}},{key:"setBinds",value:function(){this.onExternalLinkClick=this.onExternalLinkClick.bind(this),this.onCloseClick=this.onCloseClick.bind(this),this.onExitConfirmClick=this.onExitConfirmClick.bind(this),this.onOpenLeaveSiteModalWithMessage=this.onOpenLeaveSiteModalWithMessage.bind(this)}},{key:"addEventListeners",value:function(){var e,t,n=this;
117this.popupTriggers.forEach((function(e){return e.addEventListener("click",n.onExternalLinkClick)})),null===(e=this.modalCloseBtn)||void 0===e||e.addEventListener("click",this.onCloseClick),null===(t=this.modalExitConfirmBtn)||void 0===t||t.addEventListener("click",this.onExitConfirmClick),this.partnerPopup||window.addEventListener("message",this.onOpenLeaveSiteModalWithMessage)}},{key:"getPopupTriggers",value:function(){var e=this.getPartnerLinkItem();return e?[e]:this.getExternalLinksTriggers()}},{key:"getPartnerLinkItem",value:function(){if(!this.partnerPopup)return null;var e=this.config.selectors,t=e.ctaButtonWrapper,n=e.ctaLink,i=this.el.closest(t),r=i?i.querySelector(n):null;return this.setCurrentTrigger(r),r}},{key:"getExternalLinksTriggers",value:function(){var e=this;if(this.partnerPopup)return[];var t=$c(document.querySelectorAll(this.config.selectors.pageExternalLinksCandidates)),n=[wc,function(t){return function(e,t){return!!e.hasAttribute("href")&&!t.some((function(t){return e.href.startsWith(t)}))}(t,e.whitelistedSites)},Cc,Sc,Tc];return t.filter((function(e){return n.every((function(t){return t(e)}))}))}},{key:"getModalExitConfirmBtn",value:function(){var e=this,t=this.config.selectors,n=t.modalLink,i=t.ctaButton;return this.partnerPopup?$c(this.el.querySelectorAll(i)).find((function(t){return t.getAttribute("href").toLowerCase()===e.currentHrefValue.toLowerCase()}))||null:this.el.querySelector(n)}},{key:"onExternalLinkClick",value:function(e){e.preventDefault(),this.setCurrentTrigger(e.currentTarget);var t=e.currentTarget.textContent.trim();this.updateModalExitConfirmBtnAttributes(),xc(this.el),this.popupOpenTracking(t)}},{key:"onExitConfirmClick",value:function(e){var t=e.currentTarget.textContent.trim();this.pageExitTracking(t),Oc(this.el)}},{key:"onCloseClick",value:function(e){var t=e.currentTarget.getAttribute("aria-label");this.popupCloseTracking(t)}},{key:"onOpenLeaveSiteModalWithMessage",value:function(e){var t;if(null!=e&&null!==(t=e.data)&&void 0!==t&&t.redirectLink){var n=e.data.redirectLink;this.whitelistedSites.some((function(e){return n.startsWith(e)}))?window.location.href=n:(this.setCurrentTrigger({href:n}),this.updateModalExitConfirmBtnAttributes(),xc(this.el),this.popupOpenTracking(""))}}},{key:"setCurrentTrigger",value:function(e){var t;this.currentTrigger=e||null,this.currentHrefValue=(null==e||null===(t=e.getAttribute)||void 0===t?void 0:t.call(e,"href"))||(null==e?void 0:e.href)||null}},{key:"updateModalExitConfirmBtnAttributes",value:function(){var e,t;if(!this.partnerPopup&&this.modalExitConfirmBtn){this.modalExitConfirmBtn.setAttribute("href",this.currentHrefValue);var n=(null===(e=this.currentTrigger)||void 0===e||null===(t=e.getAttribute)||void 0===t?void 0:t.call(e,"target"))||"_blank";n&&this.modalExitConfirmBtn.setAttribute("target",n)}}},{key:"moveModalToBody",value:function(){this.partnerPopup&&document.body.appendChild(this.partnerPopup)}},{key:"getTriggerTrackingData",value:function(){var e,t,n,i,r,o,s,a,l,c,u,d,p,h,f=this.currentTrigger,v=!(null==f||null===(e=f.hasAttribute)||void 0===e||!e.call(f,"data-chatbot-tracking")),m=!(null==f||null===(t=f.hasAttribute)||void 0===t||!t.call(f,"data-ehealth-partner-tracking")),g=m?null==f||null===(n=f.getAttribute)||void 0===n?void 0:n.call(f,"data-ehealth-partner-name"):"",y=(null==f||null===(i=f.getAttribute)||void 0===i?void 0:i.call(f,"data-health-partner-name"))||(null==f||null===(r=f.getAttribute)||void 0===r?void 0:r.call(f,"data-text-link-ehealth-partner"))||g||"",b=(null==f||null===(o=f.getAttribute)||void 0===o?void 0:o.call(f,"data-hcp-locator-name"))||(null==f||null===(s=f.getAttribute)||void 0===s?void 0:s.call(f,"data-text-link-hcp-name"))||"",_=!(null==f||null===(a=f.classList)||void 0===a||null===(l=a.contains)||void 0===l||!l.call(a,"hcp-locator-link"))||!(null==f||null===(c=f.getAttribute)||void 0===c||!c.call(f,"data-text-link-hcp-locator"))||!(null==f||null===(u=f.getAttribute)||void 0===u||!u.call(f,"data-text-link-ehealth-partner"))||m,E=m||v,w=(null==f||null===(d=f.getAttribute)||void 0===d?void 0:d.call(f,"data-
117purpose-megamenu"))||"",C=E?"":w;return Dc({eHealthPartner:m||y?"Yes":"No",eHealthPartnerName:y,hcpLocatorName:b,purpose:(_?"HCP_Intent":"")||(v?"Support_Intent":"")||(null==f||null===(p=f.getAttribute)||void 0===p?void 0:p.call(f,"data-purpose"))||(null==f||null===(h=f.getAttribute)||void 0===h?void 0:h.call(f,"data-text-link-purpose"))||C},this.getTriggerPartnerNameData(f,E))}},{key:"getTriggerPartnerNameData",value:function(e,t){var n,i,r,o=(null==e||null===(n=e.getAttribute)||void 0===n?void 0:n.call(e,"data-partner-name-megamenu"))||"",s=t?"":o,a=(null==e||null===(i=e.getAttribute)||void 0===i?void 0:i.call(e,"data-partner-name"))||(null==e||null===(r=e.getAttribute)||void 0===r?void 0:r.call(e,"data-text-link-partner-name"))||s;return a?{partnerName:a}:{}}},{key:"pushExitPopupEvent",value:function(e,t){(window.digitalData=window.digitalData||[],window.digitalData).push({event:"Click",data:{page:Dc({customEvents:[e]},"undefined"===Mc(window.globalPageProps)?{}:window.globalPageProps.hasOwnProperty("page")?window.globalPageProps.page:{}),content:Dc(Dc({button_name:t},this.getTriggerTrackingData()),{},{href:this.currentHrefValue||""})}})}},{key:"popupOpenTracking",value:function(e){this.pushExitPopupEvent("opened exit pop-up",e)}},{key:"popupCloseTracking",value:function(e){this.pushExitPopupEvent("closed exit pop-up",e)}},{key:"pageExitTracking",value:function(e){this.pushExitPopupEvent("clicked exit pop-up",e)}}],n&&Rc(t.prototype,n),Object.defineProperty(t,"prototype",{writable:!1}),e}(),zc=function(){var e=document.querySelector(Ec.COOKIE_FORM);return{init:function(t){var n=function(e){var t=e.querySelector(".".concat(Ec.MODAL_BOX)),n="";return t.hasAttribute(Ec.COOKIE_NAME)&&(n=t.getAttribute(Ec.COOKIE_NAME)),n}(t);Lc(t,n),null==e||e.addEventListener("submit",(function(e){e.preventDefault(),Ac(n),Oc(t)}))}}};function Bc(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,i=new Array(t);n<t;n++)i[n]=e[n];return i}var Hc=function(){var e=document.getElementsByClassName(Ec.MODAL_CTA_BUTTON);return{init:function(t){var n;t.classList.add(Ec.MODAL_OPEN),(n=e,function(e){if(Array.isArray(e))return Bc(e)}(n)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(n)||function(e,t){if(e){if("string"==typeof e)return Bc(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Bc(e,t):void 0}}(n)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()).forEach((function(e){!function(e,t){t.addEventListener("click",(function(t){t.preventDefault(),Oc(e)}))}(t,e)}))}}};function Wc(e){return null!==e&&"object"==typeof e&&"constructor"in e&&e.constructor===Object}function Gc(e,t){void 0===e&&(e={}),void 0===t&&(t={}),Object.keys(t).forEach((function(n){void 0===e[n]?e[n]=t[n]:Wc(t[n])&&Wc(e[n])&&Object.keys(t[n]).length>0&&Gc(e[n],t[n])}))}var qc={body:{},addEventListener:function(){},removeEventListener:function(){},activeElement:{blur:function(){},nodeName:""},querySelector:function(){return null},querySelectorAll:function(){return[]},getElementById:function(){return null},createEvent:function(){return{initEvent:function(){}}},createElement:function(){return{children:[],childNodes:[],style:{},setAttribute:function(){},getElementsByTagName:function(){return[]}}},createElementNS:function(){return{}},importNode:function(){return null},location:{hash:"",host:"",hostname:"",href:"",origin:"",pathname:"",protocol:"",search:""}};function Vc(){var e="undefined"!=typeof document?document:{};return Gc(e,qc),e}var Yc={document:qc,navigator:{userAgent:""},location:{hash:"",host:"",hostname:"",href:"",origin:"",pathname:"",protocol:"",search:""},history:{replaceState:function(){},pushState:function(){},go:function(){},back:function(){}},CustomEvent:function(){return this},addEventListener:function(){},removeEventListener:function(){},getComputedStyle:function(){return{getPropertyValue:function(){return""}}},Image:function(){},Date:function(){},screen:{},setTimeout:function(){},clearTimeout:function(){},matchMedia:function(){return{}},requestAnimationFrame:function(e){return"undefined"==typeof setTimeout?(e(),null):setTimeout(e,0)},cancelAnimationFrame:function(e){"undefined"!=typeof setTimeout&&clearTimeout(e)}};function Uc(){var e="undefined"!=typeof window?window:{};return Gc(e,Yc),e}
vendor: 4,153 bytes, line 117
117function Kc(e){return Kc=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},Kc(e)}function Xc(e,t){return Xc=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},Xc(e,t)}function Jc(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function Qc(e,t,n){return Qc=Jc()?Reflect.construct:function(e,t,n){var i=[null];i.push.apply(i,t);var r=new(Function.bind.apply(e,i));return n&&Xc(r,n.prototype),r},Qc.apply(null,arguments)}function Zc(e){var t="function"==typeof Map?new Map:void 0;return Zc=function(e){if(null===e||(n=e,-1===Function.toString.call(n).indexOf("[native code]")))return e;var n;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,i)}function i(){return Qc(e,arguments,Kc(this).constructor)}return i.prototype=Object.create(e.prototype,{constructor:{value:i,enumerable:!1,writable:!0,configurable:!0}}),Xc(i,e)},Zc(e)}var eu=function(e){var t,n;function i(t){var n,i,r;return i=function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(n=e.call.apply(e,[this].concat(t))||this),r=i.__proto__,Object.defineProperty(i,"__proto__",{get:function(){return r},set:function(e){r.__proto__=e}}),n}return n=e,(t=i).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n,i}(Zc(Array));function tu(e){void 0===e&&(e=[]);var t=[];return e.forEach((function(e){Array.isArray(e)?t.push.apply(t,tu(e)):t.push(e)})),t}function nu(e,t){return Array.prototype.filter.call(e,t)}function iu(e,t){var n=Uc(),i=Vc(),r=[];if(!t&&e instanceof eu)return e;if(!e)return new eu(r);if("string"==typeof e){var o=e.trim();if(o.indexOf("<")>=0&&o.indexOf(">")>=0){var s="div";0===o.indexOf("<li")&&(s="ul"),0===o.indexOf("<tr")&&(s="tbody"),0!==o.indexOf("<td")&&0!==o.indexOf("<th")||(s="tr"),0===o.indexOf("<tbody")&&(s="table"),0===o.indexOf("<option")&&(s="select");var a=i.createElement(s);a.innerHTML=o;for(var l=0;l<a.childNodes.length;l+=1)r.push(a.childNodes[l])}else r=function(e,t){if("string"!=typeof e)return[e];for(var n=[],i=t.querySelectorAll(e),r=0;r<i.length;r+=1)n.push(i[r]);return n}(e.trim(),t||i)}else if(e.nodeType||e===n||e===i)r.push(e);else if(Array.isArray(e)){if(e instanceof eu)return e;r=e}return new eu(function(e){for(var t=[],n=0;n<e.length;n+=1)-1===t.indexOf(e[n])&&t.push(e[n]);return t}(r))}iu.fn=eu.prototype;var ru="resize scroll".split(" ");function ou(e){return function(){for(var t=arguments.length,n=new Array(t),i=0;i<t;i++)n[i]=arguments[i];if(void 0===n[0]){for(var r=0;r<this.length;r+=1)ru.indexOf(e)<0&&(e in this[r]?this[r][e]():iu(this[r]).trigger(e));return this}return this.on.apply(this,[e].concat(n))}}ou("click"),ou("blur"),ou("focus"),ou("focusin"),ou("focusout"),ou("keyup"),ou("keydown"),ou("keypress"),ou("submit"),ou("change"),ou("mousedown"),ou("mousemove"),ou("mouseup"),ou("mouseenter"),ou("mouseleave"),ou("mouseout"),ou("mouseover"),ou("touchstart"),ou("touchend"),ou("touchmove"),ou("resize"),ou("scroll");var su={addClass:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var i=tu(t.map((function(e){return e.split(" ")})));return this.forEach((function(e){var t;(t=e.classList).add.apply(t,i)})),this},removeClass:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var i=tu(t.map((function(e){return e.split(" ")})));return this.forEach((function(e){var t;(t=e.classList).remove.apply(t,i)})),this},hasClass:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var i=tu(t.map((function(e){return e.split(" ")})));return nu(this,(function(e){return i.filter((function(t){return e.classList.contains(t)})).length>0})).length>0},toggleClass:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var i=tu(t.map((function(e){return e.split(" ")})));
vendor: 73,603 bytes, line 117
117this.forEach((function(e){i.forEach((function(t){e.classList.toggle(t)}))}))},attr:function(e,t){if(1===arguments.length&&"string"==typeof e)return this[0]?this[0].getAttribute(e):void 0;for(var n=0;n<this.length;n+=1)if(2===arguments.length)this[n].setAttribute(e,t);else for(var i in e)this[n][i]=e[i],this[n].setAttribute(i,e[i]);return this},removeAttr:function(e){for(var t=0;t<this.length;t+=1)this[t].removeAttribute(e);return this},transform:function(e){for(var t=0;t<this.length;t+=1)this[t].style.transform=e;return this},transition:function(e){for(var t=0;t<this.length;t+=1)this[t].style.transitionDuration="string"!=typeof e?e+"ms":e;return this},on:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var i=t[0],r=t[1],o=t[2],s=t[3];function a(e){var t=e.target;if(t){var n=e.target.dom7EventData||[];if(n.indexOf(e)<0&&n.unshift(e),iu(t).is(r))o.apply(t,n);else for(var i=iu(t).parents(),s=0;s<i.length;s+=1)iu(i[s]).is(r)&&o.apply(i[s],n)}}function l(e){var t=e&&e.target&&e.target.dom7EventData||[];t.indexOf(e)<0&&t.unshift(e),o.apply(this,t)}"function"==typeof t[1]&&(i=t[0],o=t[1],s=t[2],r=void 0),s||(s=!1);for(var c,u=i.split(" "),d=0;d<this.length;d+=1){var p=this[d];if(r)for(c=0;c<u.length;c+=1){var h=u[c];p.dom7LiveListeners||(p.dom7LiveListeners={}),p.dom7LiveListeners[h]||(p.dom7LiveListeners[h]=[]),p.dom7LiveListeners[h].push({listener:o,proxyListener:a}),p.addEventListener(h,a,s)}else for(c=0;c<u.length;c+=1){var f=u[c];p.dom7Listeners||(p.dom7Listeners={}),p.dom7Listeners[f]||(p.dom7Listeners[f]=[]),p.dom7Listeners[f].push({listener:o,proxyListener:l}),p.addEventListener(f,l,s)}}return this},off:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var i=t[0],r=t[1],o=t[2],s=t[3];"function"==typeof t[1]&&(i=t[0],o=t[1],s=t[2],r=void 0),s||(s=!1);for(var a=i.split(" "),l=0;l<a.length;l+=1)for(var c=a[l],u=0;u<this.length;u+=1){var d=this[u],p=void 0;if(!r&&d.dom7Listeners?p=d.dom7Listeners[c]:r&&d.dom7LiveListeners&&(p=d.dom7LiveListeners[c]),p&&p.length)for(var h=p.length-1;h>=0;h-=1){var f=p[h];o&&f.listener===o||o&&f.listener&&f.listener.dom7proxy&&f.listener.dom7proxy===o?(d.removeEventListener(c,f.proxyListener,s),p.splice(h,1)):o||(d.removeEventListener(c,f.proxyListener,s),p.splice(h,1))}}return this},trigger:function(){for(var e=Uc(),t=arguments.length,n=new Array(t),i=0;i<t;i++)n[i]=arguments[i];for(var r=n[0].split(" "),o=n[1],s=0;s<r.length;s+=1)for(var a=r[s],l=0;l<this.length;l+=1){var c=this[l];if(e.CustomEvent){var u=new e.CustomEvent(a,{detail:o,bubbles:!0,cancelable:!0});c.dom7EventData=n.filter((function(e,t){return t>0})),c.dispatchEvent(u),c.dom7EventData=[],delete c.dom7EventData}}return this},transitionEnd:function(e){var t=this;return e&&t.on("transitionend",(function n(i){i.target===this&&(e.call(this,i),t.off("transitionend",n))})),this},outerWidth:function(e){if(this.length>0){if(e){var t=this.styles();return this[0].offsetWidth+parseFloat(t.getPropertyValue("margin-right"))+parseFloat(t.getPropertyValue("margin-left"))}return this[0].offsetWidth}return null},outerHeight:function(e){if(this.length>0){if(e){var t=this.styles();return this[0].offsetHeight+parseFloat(t.getPropertyValue("margin-top"))+parseFloat(t.getPropertyValue("margin-bottom"))}return this[0].offsetHeight}return null},styles:function(){var e=Uc();return this[0]?e.getComputedStyle(this[0],null):{}},offset:function(){if(this.length>0){var e=Uc(),t=Vc(),n=this[0],i=n.getBoundingClientRect(),r=t.body,o=n.clientTop||r.clientTop||0,s=n.clientLeft||r.clientLeft||0,a=n===e?e.scrollY:n.scrollTop,l=n===e?e.scrollX:n.scrollLeft;return{top:i.top+a-o,left:i.left+l-s}}return null},css:function(e,t){var n,i=Uc();if(1===arguments.length){if("string"!=typeof e){for(n=0;n<this.length;n+=1)for(var r in e)this[n].style[r]=e[r];return this}if(this[0])return i.getComputedStyle(this[0],null).getPropertyValue(e)}if(2===arguments.length&&"string"==typeof e){for(n=0;n<this.length;n+=1)this[n].style[e]=t;return this}return this},each:function(e){return e?(this.forEach((function(t,n){e.apply(t,[t,n])})),this):this},html:function(e){if(void 0===e)return this[0]?this[0].innerHTML:null;for(var t=0;t<this.length;t+=1)this[t].innerHTML=e;return this},text:function(e){if(void 0===e)return this[0]?this[0].textContent.trim():null;for(var t=0;t<this.length;t+=1)this[t].textContent=e;return this},is:function(e){var t,n,i=Uc(),r=Vc(),o=this[0];if(!o||void 0===e)return!1;if("string"==typeof e){if(o.matches)return o.matches(e);if(o.webkitMatchesSelector)return o.webkitMatchesSelector(e);if(o.msMatchesSelector)return o.msMatchesSelector(e);for(t=iu(e),n=0;n<t.length;n+=1)if(t[n]===o)return!0;return!1}if(e===r)return o===r;if(e===i)return o===i;if(e.nodeType||e instanceof eu){for(t=e.nodeType?[e]:e,n=0;n<t.length;n+=1)if(t[n]===o)return!0;return!1}return!1},index:function(){var e,t=this[0];if(t){for(e=0;null!==(t=t.previousSibling);)1===t.nodeType&&(e+=1);return e}},eq:function(e){if(void 0===e)return this;var t=this.length;if(e>t-1)return iu([]);if(e<0){var n=t+e;return iu(n<0?[]:[this[n]])}return iu([this[e]])},append:function(){for(var e,t=Vc(),n=0;n<arguments.length;n+=1){e=n<0||arguments.length<=n?void 0:arguments[n];for(var i=0;i<this.length;i+=1)if("string"==typeof e){var r=t.createElement("div");for(r.innerHTML=e;r.firstChild;)this[i].appendChild(r.firstChild)}else if(e instanceof eu)for(var o=0;o<e.length;o+=1)this[i].appendChild(e[o]);else this[i].appendChild(e)}return this},prepend:function(e){var t,n,i=Vc();for(t=0;t<this.length;t+=1)if("string"==typeof e){var r=i.createElement("div");for(r.innerHTML=e,n=r.childNodes.length-1;n>=0;n-=1)this[t].insertBefore(r.childNodes[n],this[t].childNodes[0])}else if(e instanceof eu)for(n=0;n<e.length;n+=1)this[t].insertBefore(e[n],this[t].childNodes[0]);else this[t].insertBefore(e,this[t].childNodes[0]);return this},next:function(e){return this.length>0?e?this[0].nextElementSibling&&iu(this[0].nextElementSibling).is(e)?iu([this[0].nextElementSibling]):iu([]):this[0].nextElementSibling?iu([this[0].nextElementSibling]):iu([]):iu([])},nextAll:function(e){var t=[],n=this[0];if(!n)return iu([]);for(;n.nextElementSibling;){var i=n.nextElementSibling;e?iu(i).is(e)&&t.push(i):t.push(i),n=i}return iu(t)},prev:function(e){if(this.length>0){var t=this[0];return e?t.previousElementSibling&&iu(t.previousElementSibling).is(e)?iu([t.previousElementSibling]):iu([]):t.previousElementSibling?iu([t.previousElementSibling]):iu([])}return iu([])},prevAll:function(e){var t=[],n=this[0];if(!n)return iu([]);for(;n.previousElementSibling;){var i=n.previousElementSibling;e?iu(i).is(e)&&t.push(i):t.push(i),n=i}return iu(t)},parent:function(e){for(var t=[],n=0;n<this.length;n+=1)null!==this[n].parentNode&&(e?iu(this[n].parentNode).is(e)&&t.push(this[n].parentNode):t.push(this[n].parentNode));return iu(t)},parents:function(e){for(var t=[],n=0;n<this.length;n+=1)for(var i=this[n].parentNode;i;)e?iu(i).is(e)&&t.push(i):t.push(i),i=i.parentNode;return iu(t)},closest:function(e){var t=this;return void 0===e?iu([]):(t.is(e)||(t=t.parents(e).eq(0)),t)},find:function(e){for(var t=[],n=0;n<this.length;n+=1)for(var i=this[n].querySelectorAll(e),r=0;r<i.length;r+=1)t.push(i[r]);return iu(t)},children:function(e){for(var t=[],n=0;n<this.length;n+=1)for(var i=this[n].children,r=0;r<i.length;r+=1)e&&!iu(i[r]).is(e)||t.push(i[r]);return iu(t)},filter:function(e){return iu(nu(this,e))},remove:function(){for(var e=0;e<this.length;e+=1)this[e].parentNode&&this[e].parentNode.removeChild(this[e]);return this}};Object.keys(su).forEach((function(e){Object.defineProperty(iu.fn,e,{value:su[e],writable:!0})}));const au=iu;function lu(e,t){return void 0===t&&(t=0),setTimeout(e,t)}function cu(){return Date.now()}function uu(e){return"object"==typeof e&&null!==e&&e.constructor&&"Object"===Object.prototype.toString.call(e).slice(8,-1)}function du(e){return"undefined"!=typeof window&&void 0!==window.HTMLElement?e instanceof HTMLElement:e&&(1===e.nodeType||11===e.nodeType)}function pu(){for(var e=Object(arguments.length<=0?void 0:arguments[0]),t=["__proto__","constructor","prototype"],n=1;n<arguments.length;n+=1){var i=n<0||arguments.length<=n?void 0:arguments[n];if(null!=i&&!du(i))for(var r=Object.keys(Object(i)).filter((function(e){return t.indexOf(e)<0})),o=0,s=r.length;o<s;o+=1){var a=r[o],l=Object.getOwnPropertyDescriptor(i,a);void 0!==l&&l.enumerable&&(uu(e[a])&&uu(i[a])?i[a].__swiper__?e[a]=i[a]:pu(e[a],i[a]):!uu(e[a])&&uu(i[a])?(e[a]={},i[a].__swiper__?e[a]=i[a]:pu(e[a],i[a])):e[a]=i[a])}}return e}function hu(e,t){Object.keys(t).forEach((function(n){uu(t[n])&&Object.keys(t[n]).forEach((function(i){"function"==typeof t[n][i]&&(t[n][i]=t[n][i].bind(e))})),e[n]=t[n]}))}function fu(e){return void 0===e&&(e=""),"."+e.trim().replace(/([\.:!\/])/g,"\\$1").replace(/ /g,".")}function vu(e,t,n,i){var r=Vc();return n&&Object.keys(i).forEach((function(n){if(!t[n]&&!0===t.auto){var o=r.createElement("div");o.className=i[n],e.append(o),t[n]=o}})),t}var mu,gu,yu;function bu(){return mu||(mu=function(){var e=Uc(),t=Vc();return{touch:!!("ontouchstart"in e||e.DocumentTouch&&t instanceof e.DocumentTouch),pointerEvents:!!e.PointerEvent&&"maxTouchPoints"in e.navigator&&e.navigator.maxTouchPoints>=0,observer:"MutationObserver"in e||"WebkitMutationObserver"in e,passiveListener:function(){var t=!1;try{var n=Object.defineProperty({},"passive",{get:function(){t=!0}});e.addEventListener("testPassiveListener",null,n)}catch(e){}return t}(),gestures:"ongesturestart"in e}}()),mu}function _u(e){return void 0===e&&(e={}),gu||(gu=function(e){var t=(void 0===e?{}:e).userAgent,n=bu(),i=Uc(),r=i.navigator.platform,o=t||i.navigator.userAgent,s={ios:!1,android:!1},a=i.screen.width,l=i.screen.height,c=o.match(/(Android);?[\s\/]+([\d.]+)?/),u=o.match(/(iPad).*OS\s([\d_]+)/),d=o.match(/(iPod)(.*OS\s([\d_]+))?/),p=!u&&o.match(/(iPhone\sOS|iOS)\s([\d_]+)/),h="Win32"===r,f="MacIntel"===r;return!u&&f&&n.touch&&["1024x1366","1366x1024","834x1194","1194x834","834x1112","1112x834","768x1024","1024x768","820x1180","1180x820","810x1080","1080x810"].indexOf(a+"x"+l)>=0&&((u=o.match(/(Version)\/([\d.]+)/))||(u=[0,1,"13_0_0"]),f=!1),c&&!h&&(s.os="android",s.android=!0),(u||p||d)&&(s.os="ios",s.ios=!0),s}(e)),gu}function Eu(){return yu||(yu=function(){var e=Uc();return{isEdge:!!e.navigator.userAgent.match(/Edge/g),isSafari:function(){var t=e.navigator.userAgent.toLowerCase();return t.indexOf("safari")>=0&&t.indexOf("chrome")<0&&t.indexOf("android")<0}(),isWebView:/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(e.navigator.userAgent)}}()),yu}const wu={name:"resize",create:function(){var e=this;pu(e,{resize:{observer:null,createObserver:function(){e&&!e.destroyed&&e.initialized&&(e.resize.observer=new ResizeObserver((function(t){var n=e.width,i=e.height,r=n,o=i;t.forEach((function(t){var n=t.contentBoxSize,i=t.contentRect,s=t.target;s&&s!==e.el||(r=i?i.width:(n[0]||n).inlineSize,o=i?i.height:(n[0]||n).blockSize)})),r===n&&o===i||e.resize.resizeHandler()})),e.resize.observer.observe(e.el))},removeObserver:function(){e.resize.observer&&e.resize.observer.unobserve&&e.el&&(e.resize.observer.unobserve(e.el),e.resize.observer=null)},resizeHandler:function(){e&&!e.destroyed&&e.initialized&&(e.emit("beforeResize"),e.emit("resize"))},orientationChangeHandler:function(){e&&!e.destroyed&&e.initialized&&e.emit("orientationchange")}}})},on:{init:function(e){var t=Uc();e.params.resizeObserver&&void 0!==Uc().ResizeObserver?e.resize.createObserver():(t.addEventListener("resize",e.resize.resizeHandler),t.addEventListener("orientationchange",e.resize.orientationChangeHandler))},destroy:function(e){var t=Uc();e.resize.removeObserver(),t.removeEventListener("resize",e.resize.resizeHandler),t.removeEventListener("orientationchange",e.resize.orientationChangeHandler)}}};function Cu(){return Cu=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},Cu.apply(this,arguments)}var Su={attach:function(e,t){void 0===t&&(t={});var n=Uc(),i=this,r=new(n.MutationObserver||n.WebkitMutationObserver)((function(e){if(1!==e.length){var t=function(){i.emit("observerUpdate",e[0])};n.requestAnimationFrame?n.requestAnimationFrame(t):n.setTimeout(t,0)}else i.emit("observerUpdate",e[0])}));r.observe(e,{attributes:void 0===t.attributes||t.attributes,childList:void 0===t.childList||t.childList,characterData:void 0===t.characterData||t.characterData}),i.observer.observers.push(r)},init:function(){var e=this;if(e.support.observer&&e.params.observer){if(e.params.observeParents)for(var t=e.$el.parents(),n=0;n<t.length;n+=1)e.observer.attach(t[n]);e.observer.attach(e.$el[0],{childList:e.params.observeSlideChildren}),e.observer.attach(e.$wrapperEl[0],{attributes:!1})}},destroy:function(){this.observer.observers.forEach((function(e){e.disconnect()})),this.observer.observers=[]}};const Tu={name:"observer",params:{observer:!1,observeParents:!1,observeSlideChildren:!1},create:function(){hu(this,{observer:Cu({},Su,{observers:[]})})},on:{init:function(e){e.observer.init()},destroy:function(e){e.observer.destroy()}}},xu={on:function(e,t,n){var i=this;if("function"!=typeof t)return i;var r=n?"unshift":"push";return e.split(" ").forEach((function(e){i.eventsListeners[e]||(i.eventsListeners[e]=[]),i.eventsListeners[e][r](t)})),i},once:function(e,t,n){var i=this;if("function"!=typeof t)return i;function r(){i.off(e,r),r.__emitterProxy&&delete r.__emitterProxy;for(var n=arguments.length,o=new Array(n),s=0;s<n;s++)o[s]=arguments[s];t.apply(i,o)}return r.__emitterProxy=t,i.on(e,r,n)},onAny:function(e,t){var n=this;if("function"!=typeof e)return n;var i=t?"unshift":"push";return n.eventsAnyListeners.indexOf(e)<0&&n.eventsAnyListeners[i](e),n},offAny:function(e){var t=this;if(!t.eventsAnyListeners)return t;var n=t.eventsAnyListeners.indexOf(e);return n>=0&&t.eventsAnyListeners.splice(n,1),t},off:function(e,t){var n=this;return n.eventsListeners?(e.split(" ").forEach((function(e){void 0===t?n.eventsListeners[e]=[]:n.eventsListeners[e]&&n.eventsListeners[e].forEach((function(i,r){(i===t||i.__emitterProxy&&i.__emitterProxy===t)&&n.eventsListeners[e].splice(r,1)}))})),n):n},emit:function(){var e,t,n,i=this;if(!i.eventsListeners)return i;for(var r=arguments.length,o=new Array(r),s=0;s<r;s++)o[s]=arguments[s];"string"==typeof o[0]||Array.isArray(o[0])?(e=o[0],t=o.slice(1,o.length),n=i):(e=o[0].events,t=o[0].data,n=o[0].context||i),t.unshift(n);var a=Array.isArray(e)?e:e.split(" ");return a.forEach((function(e){i.eventsAnyListeners&&i.eventsAnyListeners.length&&i.eventsAnyListeners.forEach((function(i){i.apply(n,[e].concat(t))})),i.eventsListeners&&i.eventsListeners[e]&&i.eventsListeners[e].forEach((function(e){e.apply(n,t)}))})),i}},Ou={updateSize:function(){var e,t,n=this,i=n.$el;e=void 0!==n.params.width&&null!==n.params.width?n.params.width:i[0].clientWidth,t=void 0!==n.params.height&&null!==n.params.height?n.params.height:i[0].clientHeight,0===e&&n.isHorizontal()||0===t&&n.isVertical()||(e=e-parseInt(i.css("padding-left")||0,10)-parseInt(i.css("padding-right")||0,10),t=t-parseInt(i.css("padding-top")||0,10)-parseInt(i.css("padding-bottom")||0,10),Number.isNaN(e)&&(e=0),Number.isNaN(t)&&(t=0),pu(n,{width:e,height:t,size:n.isHorizontal()?e:t}))},updateSlides:function(){var e=this;function t(t){return e.isHorizontal()?t:{width:"height","margin-top":"margin-left","margin-bottom ":"margin-right","margin-left":"margin-top","margin-right":"margin-bottom","padding-left":"padding-top","padding-right":"padding-bottom",marginRight:"marginBottom"}[t]}function n(e,n){return parseFloat(e.getPropertyValue(t(n))||0)}var i=e.params,r=e.$wrapperEl,o=e.size,s=e.rtlTranslate,a=e.wrongRTL,l=e.virtual&&i.virtual.enabled,c=l?e.virtual.slides.length:e.slides.length,u=r.children("."+e.params.slideClass),d=l?e.virtual.slides.length:u.length,p=[],h=[],f=[],v=i.slidesOffsetBefore;"function"==typeof v&&(v=i.slidesOffsetBefore.call(e));var m=i.slidesOffsetAfter;"function"==typeof m&&(m=i.slidesOffsetAfter.call(e));var g=e.snapGrid.length,y=e.slidesGrid.length,b=i.spaceBetween,_=-v,E=0,w=0;if(void 0!==o){var C,S;"string"==typeof b&&b.indexOf("%")>=0&&(b=parseFloat(b.replace("%",""))/100*o),e.virtualSize=-b,s?u.css({marginLeft:"",marginBottom:"",marginTop:""}):u.css({marginRight:"",marginBottom:"",marginTop:""}),i.slidesPerColumn>1&&(C=Math.floor(d/i.slidesPerColumn)===d/e.params.slidesPerColumn?d:Math.ceil(d/i.slidesPerColumn)*i.slidesPerColumn,"auto"!==i.slidesPerView&&"row"===i.slidesPerColumnFill&&(C=Math.max(C,i.slidesPerView*i.slidesPerColumn)));for(var T,x,O,L=i.slidesPerColumn,A=C/L,I=Math.floor(d/i.slidesPerColumn),k=0;k<d;k+=1){S=0;var M=u.eq(k);if(i.slidesPerColumn>1){var P=void 0,D=void 0,N=void 0;if("row"===i.slidesPerColumnFill&&i.slidesPerGroup>1){var $=Math.floor(k/(i.slidesPerGroup*i.slidesPerColumn)),j=k-i.slidesPerColumn*i.slidesPerGroup*$,R=0===$?i.slidesPerGroup:Math.min(Math.ceil((d-$*L*i.slidesPerGroup)/L),i.slidesPerGroup);P=(D=j-(N=Math.floor(j/R))*R+$*i.slidesPerGroup)+N*C/L,M.css({"-webkit-box-ordinal-group":P,"-moz-box-ordinal-group":P,"-ms-flex-order":P,"-webkit-order":P,order:P})}else"column"===i.slidesPerColumnFill?(N=k-(D=Math.floor(k/L))*L,(D>I||D===I&&N===L-1)&&(N+=1)>=L&&(N=0,D+=1)):D=k-(N=Math.floor(k/A))*A;M.css(t("margin-top"),0!==N?i.spaceBetween&&i.spaceBetween+"px":"")}if("none"!==M.css("display")){if("auto"===i.slidesPerView){var F=getComputedStyle(M[0]),z=M[0].style.transform,B=M[0].style.webkitTransform;if(z&&(M[0].style.transform="none"),B&&(M[0].style.webkitTransform="none"),i.roundLengths)S=e.isHorizontal()?M.outerWidth(!0):M.outerHeight(!0);else{var H=n(F,"width"),W=n(F,"padding-left"),G=n(F,"padding-right"),q=n(F,"margin-left"),V=n(F,"margin-right"),Y=F.getPropertyValue("box-sizing");if(Y&&"border-box"===Y)S=H+q+V;else{var U=M[0],K=U.clientWidth;S=H+W+G+q+V+(U.offsetWidth-K)}}z&&(M[0].style.transform=z),B&&(M[0].style.webkitTransform=B),i.roundLengths&&(S=Math.floor(S))}else S=(o-(i.slidesPerView-1)*b)/i.slidesPerView,i.roundLengths&&(S=Math.floor(S)),u[k]&&(u[k].style[t("width")]=S+"px");u[k]&&(u[k].swiperSlideSize=S),f.push(S),i.centeredSlides?(_=_+S/2+E/2+b,0===E&&0!==k&&(_=_-o/2-b),0===k&&(_=_-o/2-b),Math.abs(_)<.001&&(_=0),i.roundLengths&&(_=Math.floor(_)),w%i.slidesPerGroup==0&&p.push(_),h.push(_)):(i.roundLengths&&(_=Math.floor(_)),(w-Math.min(e.params.slidesPerGroupSkip,w))%e.params.slidesPerGroup==0&&p.push(_),h.push(_),_=_+S+b),e.virtualSize+=S+b,E=S,w+=1}}if(e.virtualSize=Math.max(e.virtualSize,o)+m,s&&a&&("slide"===i.effect||"coverflow"===i.effect)&&r.css({width:e.virtualSize+i.spaceBetween+"px"}),i.setWrapperSize&&r.css(((x={})[t("width")]=e.virtualSize+i.spaceBetween+"px",x)),i.slidesPerColumn>1&&(e.virtualSize=(S+i.spaceBetween)*C,e.virtualSize=Math.ceil(e.virtualSize/i.slidesPerColumn)-i.spaceBetween,r.css(((O={})[t("width")]=e.virtualSize+i.spaceBetween+"px",O)),i.centeredSlides)){T=[];for(var X=0;X<p.length;X+=1){var J=p[X];i.roundLengths&&(J=Math.floor(J)),p[X]<e.virtualSize+p[0]&&T.push(J)}p=T}if(!i.centeredSlides){T=[];for(var Q=0;Q<p.length;Q+=1){var Z=p[Q];i.roundLengths&&(Z=Math.floor(Z)),p[Q]<=e.virtualSize-o&&T.push(Z)}p=T,Math.floor(e.virtualSize-o)-Math.floor(p[p.length-1])>1&&p.push(e.virtualSize-o)}if(0===p.length&&(p=[0]),0!==i.spaceBetween){var ee,te=e.isHorizontal()&&s?"marginLeft":t("marginRight");u.filter((function(e,t){return!i.cssMode||t!==u.length-1})).css(((ee={})[te]=b+"px",ee))}if(i.centeredSlides&&i.centeredSlidesBounds){var ne=0;f.forEach((function(e){ne+=e+(i.spaceBetween?i.spaceBetween:0)}));var ie=(ne-=i.spaceBetween)-o;p=p.map((function(e){return e<0?-v:e>ie?ie+m:e}))}if(i.centerInsufficientSlides){var re=0;if(f.forEach((function(e){re+=e+(i.spaceBetween?i.spaceBetween:0)})),(re-=i.spaceBetween)<o){var oe=(o-re)/2;p.forEach((function(e,t){p[t]=e-oe})),h.forEach((function(e,t){h[t]=e+oe}))}}pu(e,{slides:u,snapGrid:p,slidesGrid:h,slidesSizesGrid:f}),d!==c&&e.emit("slidesLengthChange"),p.length!==g&&(e.params.watchOverflow&&e.checkOverflow(),e.emit("snapGridLengthChange")),h.length!==y&&e.emit("slidesGridLengthChange"),(i.watchSlidesProgress||i.watchSlidesVisibility)&&e.updateSlidesOffset()}},updateAutoHeight:function(e){var t,n=this,i=[],r=n.virtual&&n.params.virtual.enabled,o=0;"number"==typeof e?n.setTransition(e):!0===e&&n.setTransition(n.params.speed);var s=function(e){return r?n.slides.filter((function(t){return parseInt(t.getAttribute("data-swiper-slide-index"),10)===e}))[0]:n.slides.eq(e)[0]};if("auto"!==n.params.slidesPerView&&n.params.slidesPerView>1)if(n.params.centeredSlides)n.visibleSlides.each((function(e){i.push(e)}));else for(t=0;t<Math.ceil(n.params.slidesPerView);t+=1){var a=n.activeIndex+t;if(a>n.slides.length&&!r)break;i.push(s(a))}else i.push(s(n.activeIndex));for(t=0;t<i.length;t+=1)if(void 0!==i[t]){var l=i[t].offsetHeight;o=l>o?l:o}o&&n.$wrapperEl.css("height",o+"px")},updateSlidesOffset:function(){for(var e=this.slides,t=0;t<e.length;t+=1)e[t].swiperSlideOffset=this.isHorizontal()?e[t].offsetLeft:e[t].offsetTop},updateSlidesProgress:function(e){void 0===e&&(e=this&&this.translate||0);var t=this,n=t.params,i=t.slides,r=t.rtlTranslate;if(0!==i.length){void 0===i[0].swiperSlideOffset&&t.updateSlidesOffset();var o=-e;r&&(o=e),i.removeClass(n.slideVisibleClass),t.visibleSlidesIndexes=[],t.visibleSlides=[];for(var s=0;s<i.length;s+=1){var a=i[s],l=(o+(n.centeredSlides?t.minTranslate():0)-a.swiperSlideOffset)/(a.swiperSlideSize+n.spaceBetween);if(n.watchSlidesVisibility||n.centeredSlides&&n.autoHeight){var c=-(o-a.swiperSlideOffset),u=c+t.slidesSizesGrid[s];(c>=0&&c<t.size-1||u>1&&u<=t.size||c<=0&&u>=t.size)&&(t.visibleSlides.push(a),t.visibleSlidesIndexes.push(s),i.eq(s).addClass(n.slideVisibleClass))}a.progress=r?-l:l}t.visibleSlides=au(t.visibleSlides)}},updateProgress:function(e){var t=this;if(void 0===e){var n=t.rtlTranslate?-1:1;e=t&&t.translate&&t.translate*n||0}var i=t.params,r=t.maxTranslate()-t.minTranslate(),o=t.progress,s=t.isBeginning,a=t.isEnd,l=s,c=a;0===r?(o=0,s=!0,a=!0):(s=(o=(e-t.minTranslate())/r)<=0,a=o>=1),pu(t,{progress:o,isBeginning:s,isEnd:a}),(i.watchSlidesProgress||i.watchSlidesVisibility||i.centeredSlides&&i.autoHeight)&&t.updateSlidesProgress(e),s&&!l&&t.emit("reachBeginning toEdge"),a&&!c&&t.emit("reachEnd toEdge"),(l&&!s||c&&!a)&&t.emit("fromEdge"),t.emit("progress",o)},updateSlidesClasses:function(){var e,t=this,n=t.slides,i=t.params,r=t.$wrapperEl,o=t.activeIndex,s=t.realIndex,a=t.virtual&&i.virtual.enabled;n.removeClass(i.slideActiveClass+" "+i.slideNextClass+" "+i.slidePrevClass+" "+i.slideDuplicateActiveClass+" "+i.slideDuplicateNextClass+" "+i.slideDuplicatePrevClass),(e=a?t.$wrapperEl.find("."+i.slideClass+'[data-swiper-slide-index="'+o+'"]'):n.eq(o)).addClass(i.slideActiveClass),i.loop&&(e.hasClass(i.slideDuplicateClass)?r.children("."+i.slideClass+":not(."+i.slideDuplicateClass+')[data-swiper-slide-index="'+s+'"]').addClass(i.slideDuplicateActiveClass):r.children("."+i.slideClass+"."+i.slideDuplicateClass+'[data-swiper-slide-index="'+s+'"]').addClass(i.slideDuplicateActiveClass));var l=e.nextAll("."+i.slideClass).eq(0).addClass(i.slideNextClass);i.loop&&0===l.length&&(l=n.eq(0)).addClass(i.slideNextClass);var c=e.prevAll("."+i.slideClass).eq(0).addClass(i.slidePrevClass);i.loop&&0===c.length&&(c=n.eq(-1)).addClass(i.slidePrevClass),i.loop&&(l.hasClass(i.slideDuplicateClass)?r.children("."+i.slideClass+":not(."+i.slideDuplicateClass+')[data-swiper-slide-index="'+l.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicateNextClass):r.children("."+i.slideClass+"."+i.slideDuplicateClass+'[data-swiper-slide-index="'+l.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicateNextClass),c.hasClass(i.slideDuplicateClass)?r.children("."+i.slideClass+":not(."+i.slideDuplicateClass+')[data-swiper-slide-index="'+c.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicatePrevClass):r.children("."+i.slideClass+"."+i.slideDuplicateClass+'[data-swiper-slide-index="'+c.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicatePrevClass)),t.emitSlidesClasses()},updateActiveIndex:function(e){var t,n=this,i=n.rtlTranslate?n.translate:-n.translate,r=n.slidesGrid,o=n.snapGrid,s=n.params,a=n.activeIndex,l=n.realIndex,c=n.snapIndex,u=e;if(void 0===u){for(var d=0;d<r.length;d+=1)void 0!==r[d+1]?i>=r[d]&&i<r[d+1]-(r[d+1]-r[d])/2?u=d:i>=r[d]&&i<r[d+1]&&(u=d+1):i>=r[d]&&(u=d);s.normalizeSlideIndex&&(u<0||void 0===u)&&(u=0)}if(o.indexOf(i)>=0)t=o.indexOf(i);else{var p=Math.min(s.slidesPerGroupSkip,u);t=p+Math.floor((u-p)/s.slidesPerGroup)}if(t>=o.length&&(t=o.length-1),u!==a){var h=parseInt(n.slides.eq(u).attr("data-swiper-slide-index")||u,10);pu(n,{snapIndex:t,realIndex:h,previousIndex:a,activeIndex:u}),n.emit("activeIndexChange"),n.emit("snapIndexChange"),l!==h&&n.emit("realIndexChange"),(n.initialized||n.params.runCallbacksOnInit)&&n.emit("slideChange")}else t!==c&&(n.snapIndex=t,n.emit("snapIndexChange"))},updateClickedSlide:function(e){var t,n=this,i=n.params,r=au(e.target).closest("."+i.slideClass)[0],o=!1;if(r)for(var s=0;s<n.slides.length;s+=1)if(n.slides[s]===r){o=!0,t=s;break}if(!r||!o)return n.clickedSlide=void 0,void(n.clickedIndex=void 0);n.clickedSlide=r,n.virtual&&n.params.virtual.enabled?n.clickedIndex=parseInt(au(r).attr("data-swiper-slide-index"),10):n.clickedIndex=t,i.slideToClickedSlide&&void 0!==n.clickedIndex&&n.clickedIndex!==n.activeIndex&&n.slideToClickedSlide()}},Lu={getTranslate:function(e){void 0===e&&(e=this.isHorizontal()?"x":"y");var t=this,n=t.params,i=t.rtlTranslate,r=t.translate,o=t.$wrapperEl;if(n.virtualTranslate)return i?-r:r;if(n.cssMode)return r;var s=function(e,t){void 0===t&&(t="x");var n,i,r,o=Uc(),s=function(e){var t,n=Uc();return n.getComputedStyle&&(t=n.getComputedStyle(e,null)),!t&&e.currentStyle&&(t=e.currentStyle),t||(t=e.style),t}(e);return o.WebKitCSSMatrix?((i=s.transform||s.webkitTransform).split(",").length>6&&(i=i.split(", ").map((function(e){return e.replace(",",".")})).join(", ")),r=new o.WebKitCSSMatrix("none"===i?"":i)):n=(r=s.MozTransform||s.OTransform||s.MsTransform||s.msTransform||s.transform||s.getPropertyValue("transform").replace("translate(","matrix(1, 0, 0, 1,")).toString().split(","),"x"===t&&(i=o.WebKitCSSMatrix?r.m41:16===n.length?parseFloat(n[12]):parseFloat(n[4])),"y"===t&&(i=o.WebKitCSSMatrix?r.m42:16===n.length?parseFloat(n[13]):parseFloat(n[5])),i||0}(o[0],e);return i&&(s=-s),s||0},setTranslate:function(e,t){var n=this,i=n.rtlTranslate,r=n.params,o=n.$wrapperEl,s=n.wrapperEl,a=n.progress,l=0,c=0;n.isHorizontal()?l=i?-e:e:c=e,r.roundLengths&&(l=Math.floor(l),c=Math.floor(c)),r.cssMode?s[n.isHorizontal()?"scrollLeft":"scrollTop"]=n.isHorizontal()?-l:-c:r.virtualTranslate||o.transform("translate3d("+l+"px, "+c+"px, 0px)"),n.previousTranslate=n.translate,n.translate=n.isHorizontal()?l:c;var u=n.maxTranslate()-n.minTranslate();(0===u?0:(e-n.minTranslate())/u)!==a&&n.updateProgress(e),n.emit("setTranslate",n.translate,t)},minTranslate:function(){return-this.snapGrid[0]},maxTranslate:function(){return-this.snapGrid[this.snapGrid.length-1]},translateTo:function(e,t,n,i,r){void 0===e&&(e=0),void 0===t&&(t=this.params.speed),void 0===n&&(n=!0),void 0===i&&(i=!0);var o=this,s=o.params,a=o.wrapperEl;if(o.animating&&s.preventInteractionOnTransition)return!1;var l,c=o.minTranslate(),u=o.maxTranslate();if(l=i&&e>c?c:i&&e<u?u:e,o.updateProgress(l),s.cssMode){var d,p=o.isHorizontal();return 0===t?a[p?"scrollLeft":"scrollTop"]=-l:a.scrollTo?a.scrollTo(((d={})[p?"left":"top"]=-l,d.behavior="smooth",d)):a[p?"scrollLeft":"scrollTop"]=-l,!0}return 0===t?(o.setTransition(0),o.setTranslate(l),n&&(o.emit("beforeTransitionStart",t,r),o.emit("transitionEnd"))):(o.setTransition(t),o.setTranslate(l),n&&(o.emit("beforeTransitionStart",t,r),o.emit("transitionStart")),o.animating||(o.animating=!0,o.onTranslateToWrapperTransitionEnd||(o.onTranslateToWrapperTransitionEnd=function(e){o&&!o.destroyed&&e.target===this&&(o.$wrapperEl[0].removeEventListener("transitionend",o.onTranslateToWrapperTransitionEnd),o.$wrapperEl[0].removeEventListener("webkitTransitionEnd",o.onTranslateToWrapperTransitionEnd),o.onTranslateToWrapperTransitionEnd=null,delete o.onTranslateToWrapperTransitionEnd,n&&o.emit("transitionEnd"))}),o.$wrapperEl[0].addEventListener("transitionend",o.onTranslateToWrapperTransitionEnd),o.$wrapperEl[0].addEventListener("webkitTransitionEnd",o.onTranslateToWrapperTransitionEnd))),!0}},Au={slideTo:function(e,t,n,i,r){if(void 0===e&&(e=0),void 0===t&&(t=this.params.speed),void 0===n&&(n=!0),"number"!=typeof e&&"string"!=typeof e)throw new Error("The 'index' argument cannot have type other than 'number' or 'string'. ["+typeof e+"] given.");if("string"==typeof e){var o=parseInt(e,10);if(!isFinite(o))throw new Error("The passed-in 'index' (string) couldn't be converted to 'number'. ["+e+"] given.");e=o}var s=this,a=e;a<0&&(a=0);var l=s.params,c=s.snapGrid,u=s.slidesGrid,d=s.previousIndex,p=s.activeIndex,h=s.rtlTranslate,f=s.wrapperEl,v=s.enabled;if(s.animating&&l.preventInteractionOnTransition||!v&&!i&&!r)return!1;var m=Math.min(s.params.slidesPerGroupSkip,a),g=m+Math.floor((a-m)/s.params.slidesPerGroup);g>=c.length&&(g=c.length-1),(p||l.initialSlide||0)===(d||0)&&n&&s.emit("beforeSlideChangeStart");var y,b=-c[g];if(s.updateProgress(b),l.normalizeSlideIndex)for(var _=0;_<u.length;_+=1){var E=-Math.floor(100*b),w=Math.floor(100*u[_]),C=Math.floor(100*u[_+1]);void 0!==u[_+1]?E>=w&&E<C-(C-w)/2?a=_:E>=w&&E<C&&(a=_+1):E>=w&&(a=_)}if(s.initialized&&a!==p){if(!s.allowSlideNext&&b<s.translate&&b<s.minTranslate())return!1;if(!s.allowSlidePrev&&b>s.translate&&b>s.maxTranslate()&&(p||0)!==a)return!1}if(y=a>p?"next":a<p?"prev":"reset",h&&-b===s.translate||!h&&b===s.translate)return s.updateActiveIndex(a),l.autoHeight&&s.updateAutoHeight(),s.updateSlidesClasses(),"slide"!==l.effect&&s.setTranslate(b),"reset"!==y&&(s.transitionStart(n,y),s.transitionEnd(n,y)),!1;if(l.cssMode){var S,T=s.isHorizontal(),x=-b;return h&&(x=f.scrollWidth-f.offsetWidth-x),0===t?f[T?"scrollLeft":"scrollTop"]=x:f.scrollTo?f.scrollTo(((S={})[T?"left":"top"]=x,S.behavior="smooth",S)):f[T?"scrollLeft":"scrollTop"]=x,!0}return 0===t?(s.setTransition(0),s.setTranslate(b),s.updateActiveIndex(a),s.updateSlidesClasses(),s.emit("beforeTransitionStart",t,i),s.transitionStart(n,y),s.transitionEnd(n,y)):(s.setTransition(t),s.setTranslate(b),s.updateActiveIndex(a),s.updateSlidesClasses(),s.emit("beforeTransitionStart",t,i),s.transitionStart(n,y),s.animating||(s.animating=!0,s.onSlideToWrapperTransitionEnd||(s.onSlideToWrapperTransitionEnd=function(e){s&&!s.destroyed&&e.target===this&&(s.$wrapperEl[0].removeEventListener("transitionend",s.onSlideToWrapperTransitionEnd),s.$wrapperEl[0].removeEventListener("webkitTransitionEnd",s.onSlideToWrapperTransitionEnd),s.onSlideToWrapperTransitionEnd=null,delete s.onSlideToWrapperTransitionEnd,s.transitionEnd(n,y))}),s.$wrapperEl[0].addEventListener("transitionend",s.onSlideToWrapperTransitionEnd),s.$wrapperEl[0].addEventListener("webkitTransitionEnd",s.onSlideToWrapperTransitionEnd))),!0},slideToLoop:function(e,t,n,i){void 0===e&&(e=0),void 0===t&&(t=this.params.speed),void 0===n&&(n=!0);var r=this,o=e;return r.params.loop&&(o+=r.loopedSlides),r.slideTo(o,t,n,i)},slideNext:function(e,t,n){void 0===e&&(e=this.params.speed),void 0===t&&(t=!0);var i=this,r=i.params,o=i.animating;if(!i.enabled)return i;var s=i.activeIndex<r.slidesPerGroupSkip?1:r.slidesPerGroup;if(r.loop){if(o&&r.loopPreventsSlide)return!1;i.loopFix(),i._clientLeft=i.$wrapperEl[0].clientLeft}return i.slideTo(i.activeIndex+s,e,t,n)},slidePrev:function(e,t,n){void 0===e&&(e=this.params.speed),void 0===t&&(t=!0);var i=this,r=i.params,o=i.animating,s=i.snapGrid,a=i.slidesGrid,l=i.rtlTranslate;if(!i.enabled)return i;if(r.loop){if(o&&r.loopPreventsSlide)return!1;i.loopFix(),i._clientLeft=i.$wrapperEl[0].clientLeft}function c(e){return e<0?-Math.floor(Math.abs(e)):Math.floor(e)}var u,d=c(l?i.translate:-i.translate),p=s.map((function(e){return c(e)})),h=s[p.indexOf(d)-1];return void 0===h&&r.cssMode&&s.forEach((function(e){!h&&d>=e&&(h=e)})),void 0!==h&&(u=a.indexOf(h))<0&&(u=i.activeIndex-1),i.slideTo(u,e,t,n)},slideReset:function(e,t,n){return void 0===e&&(e=this.params.speed),void 0===t&&(t=!0),this.slideTo(this.activeIndex,e,t,n)},slideToClosest:function(e,t,n,i){void 0===e&&(e=this.params.speed),void 0===t&&(t=!0),void 0===i&&(i=.5);var r=this,o=r.activeIndex,s=Math.min(r.params.slidesPerGroupSkip,o),a=s+Math.floor((o-s)/r.params.slidesPerGroup),l=r.rtlTranslate?r.translate:-r.translate;if(l>=r.snapGrid[a]){var c=r.snapGrid[a];l-c>(r.snapGrid[a+1]-c)*i&&(o+=r.params.slidesPerGroup)}else{var u=r.snapGrid[a-1];l-u<=(r.snapGrid[a]-u)*i&&(o-=r.params.slidesPerGroup)}return o=Math.max(o,0),o=Math.min(o,r.slidesGrid.length-1),r.slideTo(o,e,t,n)},slideToClickedSlide:function(){var e,t=this,n=t.params,i=t.$wrapperEl,r="auto"===n.slidesPerView?t.slidesPerViewDynamic():n.slidesPerView,o=t.clickedIndex;if(n.loop){if(t.animating)return;e=parseInt(au(t.clickedSlide).attr("data-swiper-slide-index"),10),n.centeredSlides?o<t.loopedSlides-r/2||o>t.slides.length-t.loopedSlides+r/2?(t.loopFix(),o=i.children("."+n.slideClass+'[data-swiper-slide-index="'+e+'"]:not(.'+n.slideDuplicateClass+")").eq(0).index(),lu((function(){t.slideTo(o)}))):t.slideTo(o):o>t.slides.length-r?(t.loopFix(),o=i.children("."+n.slideClass+'[data-swiper-slide-index="'+e+'"]:not(.'+n.slideDuplicateClass+")").eq(0).index(),lu((function(){t.slideTo(o)}))):t.slideTo(o)}else t.slideTo(o)}},Iu={loopCreate:function(){var e=this,t=Vc(),n=e.params,i=e.$wrapperEl;i.children("."+n.slideClass+"."+n.slideDuplicateClass).remove();var r=i.children("."+n.slideClass);if(n.loopFillGroupWithBlank){var o=n.slidesPerGroup-r.length%n.slidesPerGroup;if(o!==n.slidesPerGroup){for(var s=0;s<o;s+=1){var a=au(t.createElement("div")).addClass(n.slideClass+" "+n.slideBlankClass);i.append(a)}r=i.children("."+n.slideClass)}}"auto"!==n.slidesPerView||n.loopedSlides||(n.loopedSlides=r.length),e.loopedSlides=Math.ceil(parseFloat(n.loopedSlides||n.slidesPerView,10)),e.loopedSlides+=n.loopAdditionalSlides,e.loopedSlides>r.length&&(e.loopedSlides=r.length);var l=[],c=[];r.each((function(t,n){var i=au(t);n<e.loopedSlides&&c.push(t),n<r.length&&n>=r.length-e.loopedSlides&&l.push(t),i.attr("data-swiper-slide-index",n)}));for(var u=0;u<c.length;u+=1)i.append(au(c[u].cloneNode(!0)).addClass(n.slideDuplicateClass));for(var d=l.length-1;d>=0;d-=1)i.prepend(au(l[d].cloneNode(!0)).addClass(n.slideDuplicateClass))},loopFix:function(){var e=this;e.emit("beforeLoopFix");var t,n=e.activeIndex,i=e.slides,r=e.loopedSlides,o=e.allowSlidePrev,s=e.allowSlideNext,a=e.snapGrid,l=e.rtlTranslate;e.allowSlidePrev=!0,e.allowSlideNext=!0;var c=-a[n]-e.getTranslate();n<r?(t=i.length-3*r+n,t+=r,e.slideTo(t,0,!1,!0)&&0!==c&&e.setTranslate((l?-e.translate:e.translate)-c)):n>=i.length-r&&(t=-i.length+n+r,t+=r,e.slideTo(t,0,!1,!0)&&0!==c&&e.setTranslate((l?-e.translate:e.translate)-c)),e.allowSlidePrev=o,e.allowSlideNext=s,e.emit("loopFix")},loopDestroy:function(){var e=this,t=e.$wrapperEl,n=e.params,i=e.slides;t.children("."+n.slideClass+"."+n.slideDuplicateClass+",."+n.slideClass+"."+n.slideBlankClass).remove(),i.removeAttr("data-swiper-slide-index")}},ku={appendSlide:function(e){var t=this,n=t.$wrapperEl,i=t.params;if(i.loop&&t.loopDestroy(),"object"==typeof e&&"length"in e)for(var r=0;r<e.length;r+=1)e[r]&&n.append(e[r]);else n.append(e);i.loop&&t.loopCreate(),i.observer&&t.support.observer||t.update()},prependSlide:function(e){var t=this,n=t.params,i=t.$wrapperEl,r=t.activeIndex;n.loop&&t.loopDestroy();var o=r+1;if("object"==typeof e&&"length"in e){for(var s=0;s<e.length;s+=1)e[s]&&i.prepend(e[s]);o=r+e.length}else i.prepend(e);n.loop&&t.loopCreate(),n.observer&&t.support.observer||t.update(),t.slideTo(o,0,!1)},addSlide:function(e,t){var n=this,i=n.$wrapperEl,r=n.params,o=n.activeIndex;r.loop&&(o-=n.loopedSlides,n.loopDestroy(),n.slides=i.children("."+r.slideClass));var s=n.slides.length;if(e<=0)n.prependSlide(t);else if(e>=s)n.appendSlide(t);else{for(var a=o>e?o+1:o,l=[],c=s-1;c>=e;c-=1){var u=n.slides.eq(c);u.remove(),l.unshift(u)}if("object"==typeof t&&"length"in t){for(var d=0;d<t.length;d+=1)t[d]&&i.append(t[d]);a=o>e?o+t.length:o}else i.append(t);for(var p=0;p<l.length;p+=1)i.append(l[p]);r.loop&&n.loopCreate(),r.observer&&n.support.observer||n.update(),r.loop?n.slideTo(a+n.loopedSlides,0,!1):n.slideTo(a,0,!1)}},removeSlide:function(e){var t=this,n=t.params,i=t.$wrapperEl,r=t.activeIndex;n.loop&&(r-=t.loopedSlides,t.loopDestroy(),t.slides=i.children("."+n.slideClass));var o,s=r;if("object"==typeof e&&"length"in e){for(var a=0;a<e.length;a+=1)o=e[a],t.slides[o]&&t.slides.eq(o).remove(),o<s&&(s-=1);s=Math.max(s,0)}else o=e,t.slides[o]&&t.slides.eq(o).remove(),o<s&&(s-=1),s=Math.max(s,0);n.loop&&t.loopCreate(),n.observer&&t.support.observer||t.update(),n.loop?t.slideTo(s+t.loopedSlides,0,!1):t.slideTo(s,0,!1)},removeAllSlides:function(){for(var e=[],t=0;t<this.slides.length;t+=1)e.push(t);this.removeSlide(e)}};function Mu(e){var t=this,n=Vc(),i=Uc(),r=t.touchEventsData,o=t.params,s=t.touches;if(t.enabled&&(!t.animating||!o.preventInteractionOnTransition)){var a=e;a.originalEvent&&(a=a.originalEvent);var l=au(a.target);if(("wrapper"!==o.touchEventsTarget||l.closest(t.wrapperEl).length)&&(r.isTouchEvent="touchstart"===a.type,(r.isTouchEvent||!("which"in a)||3!==a.which)&&!(!r.isTouchEvent&&"button"in a&&a.button>0||r.isTouched&&r.isMoved))){o.noSwipingClass&&""!==o.noSwipingClass&&a.target&&a.target.shadowRoot&&e.path&&e.path[0]&&(l=au(e.path[0]));var c=o.noSwipingSelector?o.noSwipingSelector:"."+o.noSwipingClass,u=!(!a.target||!a.target.shadowRoot);if(o.noSwiping&&(u?function(e,t){return void 0===t&&(t=this),function t(n){return n&&n!==Vc()&&n!==Uc()?(n.assignedSlot&&(n=n.assignedSlot),n.closest(e)||t(n.getRootNode().host)):null}(t)}(c,a.target):l.closest(c)[0]))t.allowClick=!0;else if(!o.swipeHandler||l.closest(o.swipeHandler)[0]){s.currentX="touchstart"===a.type?a.targetTouches[0].pageX:a.pageX,s.currentY="touchstart"===a.type?a.targetTouches[0].pageY:a.pageY;var d=s.currentX,p=s.currentY,h=o.edgeSwipeDetection||o.iOSEdgeSwipeDetection,f=o.edgeSwipeThreshold||o.iOSEdgeSwipeThreshold;if(h&&(d<=f||d>=i.innerWidth-f)){if("prevent"!==h)return;e.preventDefault()}if(pu(r,{isTouched:!0,isMoved:!1,allowTouchCallbacks:!0,isScrolling:void 0,startMoving:void 0}),s.startX=d,s.startY=p,r.touchStartTime=cu(),t.allowClick=!0,t.updateSize(),t.swipeDirection=void 0,o.threshold>0&&(r.allowThresholdMove=!1),"touchstart"!==a.type){var v=!0;l.is(r.focusableElements)&&(v=!1),n.activeElement&&au(n.activeElement).is(r.focusableElements)&&n.activeElement!==l[0]&&n.activeElement.blur();var m=v&&t.allowTouchMove&&o.touchStartPreventDefault;!o.touchStartForcePreventDefault&&!m||l[0].isContentEditable||a.preventDefault()}t.emit("touchStart",a)}}}}function Pu(e){var t=Vc(),n=this,i=n.touchEventsData,r=n.params,o=n.touches,s=n.rtlTranslate;if(n.enabled){var a=e;if(a.originalEvent&&(a=a.originalEvent),i.isTouched){if(!i.isTouchEvent||"touchmove"===a.type){var l="touchmove"===a.type&&a.targetTouches&&(a.targetTouches[0]||a.changedTouches[0]),c="touchmove"===a.type?l.pageX:a.pageX,u="touchmove"===a.type?l.pageY:a.pageY;if(a.preventedByNestedSwiper)return o.startX=c,void(o.startY=u);if(!n.allowTouchMove)return n.allowClick=!1,void(i.isTouched&&(pu(o,{startX:c,startY:u,currentX:c,currentY:u}),i.touchStartTime=cu()));if(i.isTouchEvent&&r.touchReleaseOnEdges&&!r.loop)if(n.isVertical()){if(u<o.startY&&n.translate<=n.maxTranslate()||u>o.startY&&n.translate>=n.minTranslate())return i.isTouched=!1,void(i.isMoved=!1)}else if(c<o.startX&&n.translate<=n.maxTranslate()||c>o.startX&&n.translate>=n.minTranslate())return;if(i.isTouchEvent&&t.activeElement&&a.target===t.activeElement&&au(a.target).is(i.focusableElements))return i.isMoved=!0,void(n.allowClick=!1);if(i.allowTouchCallbacks&&n.emit("touchMove",a),!(a.targetTouches&&a.targetTouches.length>1)){o.currentX=c,o.currentY=u;var d,p=o.currentX-o.startX,h=o.currentY-o.startY;if(!(n.params.threshold&&Math.sqrt(Math.pow(p,2)+Math.pow(h,2))<n.params.threshold))if(void 0===i.isScrolling&&(n.isHorizontal()&&o.currentY===o.startY||n.isVertical()&&o.currentX===o.startX?i.isScrolling=!1:p*p+h*h>=25&&(d=180*Math.atan2(Math.abs(h),Math.abs(p))/Math.PI,i.isScrolling=n.isHorizontal()?d>r.touchAngle:90-d>r.touchAngle)),i.isScrolling&&n.emit("touchMoveOpposite",a),void 0===i.startMoving&&(o.currentX===o.startX&&o.currentY===o.startY||(i.startMoving=!0)),i.isScrolling)i.isTouched=!1;else if(i.startMoving){n.allowClick=!1,!r.cssMode&&a.cancelable&&a.preventDefault(),r.touchMoveStopPropagation&&!r.nested&&a.stopPropagation(),i.isMoved||(r.loop&&n.loopFix(),i.startTranslate=n.getTranslate(),n.setTransition(0),n.animating&&n.$wrapperEl.trigger("webkitTransitionEnd transitionend"),i.allowMomentumBounce=!1,!r.grabCursor||!0!==n.allowSlideNext&&!0!==n.allowSlidePrev||n.setGrabCursor(!0),n.emit("sliderFirstMove",a)),n.emit("sliderMove",a),i.isMoved=!0;var f=n.isHorizontal()?p:h;o.diff=f,f*=r.touchRatio,s&&(f=-f),n.swipeDirection=f>0?"prev":"next",i.currentTranslate=f+i.startTranslate;var v=!0,m=r.resistanceRatio;if(r.touchReleaseOnEdges&&(m=0),f>0&&i.currentTranslate>n.minTranslate()?(v=!1,r.resistance&&(i.currentTranslate=n.minTranslate()-1+Math.pow(-n.minTranslate()+i.startTranslate+f,m))):f<0&&i.currentTranslate<n.maxTranslate()&&(v=!1,r.resistance&&(i.currentTranslate=n.maxTranslate()+1-Math.pow(n.maxTranslate()-i.startTranslate-f,m))),v&&(a.preventedByNestedSwiper=!0),!n.allowSlideNext&&"next"===n.swipeDirection&&i.currentTranslate<i.startTranslate&&(i.currentTranslate=i.startTranslate),!n.allowSlidePrev&&"prev"===n.swipeDirection&&i.currentTranslate>i.startTranslate&&(i.currentTranslate=i.startTranslate),n.allowSlidePrev||n.allowSlideNext||(i.currentTranslate=i.startTranslate),r.threshold>0){if(!(Math.abs(f)>r.threshold||i.allowThresholdMove))return void(i.currentTranslate=i.startTranslate);if(!i.allowThresholdMove)return i.allowThresholdMove=!0,o.startX=o.currentX,o.startY=o.currentY,i.currentTranslate=i.startTranslate,void(o.diff=n.isHorizontal()?o.currentX-o.startX:o.currentY-o.startY)}r.followFinger&&!r.cssMode&&((r.freeMode||r.watchSlidesProgress||r.watchSlidesVisibility)&&(n.updateActiveIndex(),n.updateSlidesClasses()),r.freeMode&&(0===i.velocities.length&&i.velocities.push({position:o[n.isHorizontal()?"startX":"startY"],time:i.touchStartTime}),i.velocities.push({position:o[n.isHorizontal()?"currentX":"currentY"],time:cu()})),n.updateProgress(i.currentTranslate),n.setTranslate(i.currentTranslate))}}}}else i.startMoving&&i.isScrolling&&n.emit("touchMoveOpposite",a)}}function Du(e){var t=this,n=t.touchEventsData,i=t.params,r=t.touches,o=t.rtlTranslate,s=t.$wrapperEl,a=t.slidesGrid,l=t.snapGrid;if(t.enabled){var c=e;if(c.originalEvent&&(c=c.originalEvent),n.allowTouchCallbacks&&t.emit("touchEnd",c),n.allowTouchCallbacks=!1,!n.isTouched)return n.isMoved&&i.grabCursor&&t.setGrabCursor(!1),n.isMoved=!1,void(n.startMoving=!1);i.grabCursor&&n.isMoved&&n.isTouched&&(!0===t.allowSlideNext||!0===t.allowSlidePrev)&&t.setGrabCursor(!1);var u,d=cu(),p=d-n.touchStartTime;if(t.allowClick&&(t.updateClickedSlide(c),t.emit("tap click",c),p<300&&d-n.lastClickTime<300&&t.emit("doubleTap doubleClick",c)),n.lastClickTime=cu(),lu((function(){t.destroyed||(t.allowClick=!0)})),!n.isTouched||!n.isMoved||!t.swipeDirection||0===r.diff||n.currentTranslate===n.startTranslate)return n.isTouched=!1,n.isMoved=!1,void(n.startMoving=!1);if(n.isTouched=!1,n.isMoved=!1,n.startMoving=!1,u=i.followFinger?o?t.translate:-t.translate:-n.currentTranslate,!i.cssMode)if(i.freeMode){if(u<-t.minTranslate())return void t.slideTo(t.activeIndex);if(u>-t.maxTranslate())return void(t.slides.length<l.length?t.slideTo(l.length-1):t.slideTo(t.slides.length-1));if(i.freeModeMomentum){if(n.velocities.length>1){var h=n.velocities.pop(),f=n.velocities.pop(),v=h.position-f.position,m=h.time-f.time;t.velocity=v/m,t.velocity/=2,Math.abs(t.velocity)<i.freeModeMinimumVelocity&&(t.velocity=0),(m>150||cu()-h.time>300)&&(t.velocity=0)}else t.velocity=0;t.velocity*=i.freeModeMomentumVelocityRatio,n.velocities.length=0;var g=1e3*i.freeModeMomentumRatio,y=t.velocity*g,b=t.translate+y;o&&(b=-b);var _,E,w=!1,C=20*Math.abs(t.velocity)*i.freeModeMomentumBounceRatio;if(b<t.maxTranslate())i.freeModeMomentumBounce?(b+t.maxTranslate()<-C&&(b=t.maxTranslate()-C),_=t.maxTranslate(),w=!0,n.allowMomentumBounce=!0):b=t.maxTranslate(),i.loop&&i.centeredSlides&&(E=!0);else if(b>t.minTranslate())i.freeModeMomentumBounce?(b-t.minTranslate()>C&&(b=t.minTranslate()+C),_=t.minTranslate(),w=!0,n.allowMomentumBounce=!0):b=t.minTranslate(),i.loop&&i.centeredSlides&&(E=!0);else if(i.freeModeSticky){for(var S,T=0;T<l.length;T+=1)if(l[T]>-b){S=T;break}b=-(b=Math.abs(l[S]-b)<Math.abs(l[S-1]-b)||"next"===t.swipeDirection?l[S]:l[S-1])}if(E&&t.once("transitionEnd",(function(){t.loopFix()})),0!==t.velocity){if(g=o?Math.abs((-b-t.translate)/t.velocity):Math.abs((b-t.translate)/t.velocity),i.freeModeSticky){var x=Math.abs((o?-b:b)-t.translate),O=t.slidesSizesGrid[t.activeIndex];g=x<O?i.speed:x<2*O?1.5*i.speed:2.5*i.speed}}else if(i.freeModeSticky)return void t.slideToClosest();i.freeModeMomentumBounce&&w?(t.updateProgress(_),t.setTransition(g),t.setTranslate(b),t.transitionStart(!0,t.swipeDirection),t.animating=!0,s.transitionEnd((function(){t&&!t.destroyed&&n.allowMomentumBounce&&(t.emit("momentumBounce"),t.setTransition(i.speed),setTimeout((function(){t.setTranslate(_),s.transitionEnd((function(){t&&!t.destroyed&&t.transitionEnd()}))}),0))}))):t.velocity?(t.updateProgress(b),t.setTransition(g),t.setTranslate(b),t.transitionStart(!0,t.swipeDirection),t.animating||(t.animating=!0,s.transitionEnd((function(){t&&!t.destroyed&&t.transitionEnd()})))):(t.emit("_freeModeNoMomentumRelease"),t.updateProgress(b)),t.updateActiveIndex(),t.updateSlidesClasses()}else{if(i.freeModeSticky)return void t.slideToClosest();i.freeMode&&t.emit("_freeModeNoMomentumRelease")}(!i.freeModeMomentum||p>=i.longSwipesMs)&&(t.updateProgress(),t.updateActiveIndex(),t.updateSlidesClasses())}else{for(var L=0,A=t.slidesSizesGrid[0],I=0;I<a.length;I+=I<i.slidesPerGroupSkip?1:i.slidesPerGroup){var k=I<i.slidesPerGroupSkip-1?1:i.slidesPerGroup;void 0!==a[I+k]?u>=a[I]&&u<a[I+k]&&(L=I,A=a[I+k]-a[I]):u>=a[I]&&(L=I,A=a[a.length-1]-a[a.length-2])}var M=(u-a[L])/A,P=L<i.slidesPerGroupSkip-1?1:i.slidesPerGroup;if(p>i.longSwipesMs){if(!i.longSwipes)return void t.slideTo(t.activeIndex);"next"===t.swipeDirection&&(M>=i.longSwipesRatio?t.slideTo(L+P):t.slideTo(L)),"prev"===t.swipeDirection&&(M>1-i.longSwipesRatio?t.slideTo(L+P):t.slideTo(L))}else{if(!i.shortSwipes)return void t.slideTo(t.activeIndex);!t.navigation||c.target!==t.navigation.nextEl&&c.target!==t.navigation.prevEl?("next"===t.swipeDirection&&t.slideTo(L+P),"prev"===t.swipeDirection&&t.slideTo(L)):c.target===t.navigation.nextEl?t.slideTo(L+P):t.slideTo(L)}}}}function Nu(){var e=this,t=e.params,n=e.el;if(!n||0!==n.offsetWidth){t.breakpoints&&e.setBreakpoint();var i=e.allowSlideNext,r=e.allowSlidePrev,o=e.snapGrid;e.allowSlideNext=!0,e.allowSlidePrev=!0,e.updateSize(),e.updateSlides(),e.updateSlidesClasses(),("auto"===t.slidesPerView||t.slidesPerView>1)&&e.isEnd&&!e.isBeginning&&!e.params.centeredSlides?e.slideTo(e.slides.length-1,0,!1,!0):e.slideTo(e.activeIndex,0,!1,!0),e.autoplay&&e.autoplay.running&&e.autoplay.paused&&e.autoplay.run(),e.allowSlidePrev=r,e.allowSlideNext=i,e.params.watchOverflow&&o!==e.snapGrid&&e.checkOverflow()}}function $u(e){var t=this;t.enabled&&(t.allowClick||(t.params.preventClicks&&e.preventDefault(),t.params.preventClicksPropagation&&t.animating&&(e.stopPropagation(),e.stopImmediatePropagation())))}function ju(){var e=this,t=e.wrapperEl,n=e.rtlTranslate;if(e.enabled){e.previousTranslate=e.translate,e.isHorizontal()?e.translate=n?t.scrollWidth-t.offsetWidth-t.scrollLeft:-t.scrollLeft:e.translate=-t.scrollTop,-0===e.translate&&(e.translate=0),e.updateActiveIndex(),e.updateSlidesClasses();var i=e.maxTranslate()-e.minTranslate();(0===i?0:(e.translate-e.minTranslate())/i)!==e.progress&&e.updateProgress(n?-e.translate:e.translate),e.emit("setTranslate",e.translate,!1)}}var Ru=!1;function Fu(){}const zu={attachEvents:function(){var e=this,t=Vc(),n=e.params,i=e.touchEvents,r=e.el,o=e.wrapperEl,s=e.device,a=e.support;e.onTouchStart=Mu.bind(e),e.onTouchMove=Pu.bind(e),e.onTouchEnd=Du.bind(e),n.cssMode&&(e.onScroll=ju.bind(e)),e.onClick=$u.bind(e);var l=!!n.nested;if(!a.touch&&a.pointerEvents)r.addEventListener(i.start,e.onTouchStart,!1),t.addEventListener(i.move,e.onTouchMove,l),t.addEventListener(i.end,e.onTouchEnd,!1);else{if(a.touch){var c=!("touchstart"!==i.start||!a.passiveListener||!n.passiveListeners)&&{passive:!0,capture:!1};r.addEventListener(i.start,e.onTouchStart,c),r.addEventListener(i.move,e.onTouchMove,a.passiveListener?{passive:!1,capture:l}:l),r.addEventListener(i.end,e.onTouchEnd,c),i.cancel&&r.addEventListener(i.cancel,e.onTouchEnd,c),Ru||(t.addEventListener("touchstart",Fu),Ru=!0)}(n.simulateTouch&&!s.ios&&!s.android||n.simulateTouch&&!a.touch&&s.ios)&&(r.addEventListener("mousedown",e.onTouchStart,!1),t.addEventListener("mousemove",e.onTouchMove,l),t.addEventListener("mouseup",e.onTouchEnd,!1))}(n.preventClicks||n.preventClicksPropagation)&&r.addEventListener("click",e.onClick,!0),n.cssMode&&o.addEventListener("scroll",e.onScroll),n.updateOnWindowResize?e.on(s.ios||s.android?"resize orientationchange observerUpdate":"resize observerUpdate",Nu,!0):e.on("observerUpdate",Nu,!0)},detachEvents:function(){var e=this,t=Vc(),n=e.params,i=e.touchEvents,r=e.el,o=e.wrapperEl,s=e.device,a=e.support,l=!!n.nested;if(!a.touch&&a.pointerEvents)r.removeEventListener(i.start,e.onTouchStart,!1),t.removeEventListener(i.move,e.onTouchMove,l),t.removeEventListener(i.end,e.onTouchEnd,!1);else{if(a.touch){var c=!("onTouchStart"!==i.start||!a.passiveListener||!n.passiveListeners)&&{passive:!0,capture:!1};r.removeEventListener(i.start,e.onTouchStart,c),r.removeEventListener(i.move,e.onTouchMove,l),r.removeEventListener(i.end,e.onTouchEnd,c),i.cancel&&r.removeEventListener(i.cancel,e.onTouchEnd,c)}(n.simulateTouch&&!s.ios&&!s.android||n.simulateTouch&&!a.touch&&s.ios)&&(r.removeEventListener("mousedown",e.onTouchStart,!1),t.removeEventListener("mousemove",e.onTouchMove,l),t.removeEventListener("mouseup",e.onTouchEnd,!1))}(n.preventClicks||n.preventClicksPropagation)&&r.removeEventListener("click",e.onClick,!0),n.cssMode&&o.removeEventListener("scroll",e.onScroll),e.off(s.ios||s.android?"resize orientationchange observerUpdate":"resize observerUpdate",Nu)}},Bu={addClasses:function(){var e,t,n,i=this,r=i.classNames,o=i.params,s=i.rtl,a=i.$el,l=i.device,c=i.support,u=(e=["initialized",o.direction,{"pointer-events":c.pointerEvents&&!c.touch},{"free-mode":o.freeMode},{autoheight:o.autoHeight},{rtl:s},{multirow:o.slidesPerColumn>1},{"multirow-column":o.slidesPerColumn>1&&"column"===o.slidesPerColumnFill},{android:l.android},{ios:l.ios},{"css-mode":o.cssMode}],t=o.containerModifierClass,n=[],e.forEach((function(e){"object"==typeof e?Object.keys(e).forEach((function(i){e[i]&&n.push(t+i)})):"string"==typeof e&&n.push(t+e)})),n);r.push.apply(r,u),a.addClass([].concat(r).join(" ")),i.emitContainerClasses()},removeClasses:function(){var e=this,t=e.$el,n=e.classNames;t.removeClass(n.join(" ")),e.emitContainerClasses()}},Hu={init:!0,direction:"horizontal",touchEventsTarget:"container",initialSlide:0,speed:300,cssMode:!1,updateOnWindowResize:!0,resizeObserver:!1,nested:!1,createElements:!1,enabled:!0,focusableElements:"input, select, option, textarea, button, video, label",width:null,height:null,preventInteractionOnTransition:!1,userAgent:null,url:null,edgeSwipeDetection:!1,edgeSwipeThreshold:20,freeMode:!1,freeModeMomentum:!0,freeModeMomentumRatio:1,freeModeMomentumBounce:!0,freeModeMomentumBounceRatio:1,freeModeMomentumVelocityRatio:1,freeModeSticky:!1,freeModeMinimumVelocity:.02,autoHeight:!1,setWrapperSize:!1,virtualTranslate:!1,effect:"slide",breakpoints:void 0,breakpointsBase:"window",spaceBetween:0,slidesPerView:1,slidesPerColumn:1,slidesPerColumnFill:"column",slidesPerGroup:1,slidesPerGroupSkip:0,centeredSlides:!1,centeredSlidesBounds:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,normalizeSlideIndex:!0,centerInsufficientSlides:!1,watchOverflow:!1,roundLengths:!1,touchRatio:1,touchAngle:45,simulateTouch:!0,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,allowTouchMove:!0,threshold:0,touchMoveStopPropagation:!1,touchStartPreventDefault:!0,touchStartForcePreventDefault:!1,touchReleaseOnEdges:!1,uniqueNavElements:!0,resistance:!0,resistanceRatio:.85,watchSlidesProgress:!1,watchSlidesVisibility:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,preloadImages:!0,updateOnImagesReady:!0,loop:!1,loopAdditionalSlides:0,loopedSlides:null,loopFillGroupWithBlank:!1,loopPreventsSlide:!0,allowSlidePrev:!0,allowSlideNext:!0,swipeHandler:null,noSwiping:!0,noSwipingClass:"swiper-no-swiping",noSwipingSelector:null,passiveListeners:!0,containerModifierClass:"swiper-container-",slideClass:"swiper-slide",slideBlankClass:"swiper-slide-invisible-blank",slideActiveClass:"swiper-slide-active",slideDuplicateActiveClass:"swiper-slide-duplicate-active",slideVisibleClass:"swiper-slide-visible",slideDuplicateClass:"swiper-slide-duplicate",slideNextClass:"swiper-slide-next",slideDuplicateNextClass:"swiper-slide-duplicate-next",slidePrevClass:"swiper-slide-prev",slideDuplicatePrevClass:"swiper-slide-duplicate-prev",wrapperClass:"swiper-wrapper",runCallbacksOnInit:!0,_emitClasses:!1};function Wu(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}var Gu={modular:{useParams:function(e){var t=this;t.modules&&Object.keys(t.modules).forEach((function(n){var i=t.modules[n];i.params&&pu(e,i.params)}))},useModules:function(e){void 0===e&&(e={});var t=this;t.modules&&Object.keys(t.modules).forEach((function(n){var i=t.modules[n],r=e[n]||{};i.on&&t.on&&Object.keys(i.on).forEach((function(e){t.on(e,i.on[e])})),i.create&&i.create.bind(t)(r)}))}},eventsEmitter:xu,update:Ou,translate:Lu,transition:{setTransition:function(e,t){var n=this;n.params.cssMode||n.$wrapperEl.transition(e),n.emit("setTransition",e,t)},transitionStart:function(e,t){void 0===e&&(e=!0);var n=this,i=n.activeIndex,r=n.params,o=n.previousIndex;if(!r.cssMode){r.autoHeight&&n.updateAutoHeight();var s=t;if(s||(s=i>o?"next":i<o?"prev":"reset"),n.emit("transitionStart"),e&&i!==o){if("reset"===s)return void n.emit("slideResetTransitionStart");n.emit("slideChangeTransitionStart"),"next"===s?n.emit("slideNextTransitionStart"):n.emit("slidePrevTransitionStart")}}},transitionEnd:function(e,t){void 0===e&&(e=!0);var n=this,i=n.activeIndex,r=n.previousIndex,o=n.params;if(n.animating=!1,!o.cssMode){n.setTransition(0);var s=t;if(s||(s=i>r?"next":i<r?"prev":"reset"),n.emit("transitionEnd"),e&&i!==r){if("reset"===s)return void n.emit("slideResetTransitionEnd");n.emit("slideChangeTransitionEnd"),"next"===s?n.emit("slideNextTransitionEnd"):n.emit("slidePrevTransitionEnd")}}}},slide:Au,loop:Iu,grabCursor:{setGrabCursor:function(e){var t=this;if(!(t.support.touch||!t.params.simulateTouch||t.params.watchOverflow&&t.isLocked||t.params.cssMode)){var n=t.el;n.style.cursor="move",n.style.cursor=e?"-webkit-grabbing":"-webkit-grab",n.style.cursor=e?"-moz-grabbin":"-moz-grab",n.style.cursor=e?"grabbing":"grab"}},unsetGrabCursor:function(){var e=this;e.support.touch||e.params.watchOverflow&&e.isLocked||e.params.cssMode||(e.el.style.cursor="")}},manipulation:ku,events:zu,breakpoints:{setBreakpoint:function(){var e=this,t=e.activeIndex,n=e.initialized,i=e.loopedSlides,r=void 0===i?0:i,o=e.params,s=e.$el,a=o.breakpoints;if(a&&(!a||0!==Object.keys(a).length)){var l=e.getBreakpoint(a,e.params.breakpointsBase,e.el);if(l&&e.currentBreakpoint!==l){var c=l in a?a[l]:void 0;c&&["slidesPerView","spaceBetween","slidesPerGroup","slidesPerGroupSkip","slidesPerColumn"].forEach((function(e){var t=c[e];void 0!==t&&(c[e]="slidesPerView"!==e||"AUTO"!==t&&"auto"!==t?"slidesPerView"===e?parseFloat(t):parseInt(t,10):"auto")}));var u=c||e.originalParams,d=o.slidesPerColumn>1,p=u.slidesPerColumn>1,h=o.enabled;d&&!p?(s.removeClass(o.containerModifierClass+"multirow "+o.containerModifierClass+"multirow-column"),e.emitContainerClasses()):!d&&p&&(s.addClass(o.containerModifierClass+"multirow"),(u.slidesPerColumnFill&&"column"===u.slidesPerColumnFill||!u.slidesPerColumnFill&&"column"===o.slidesPerColumnFill)&&s.addClass(o.containerModifierClass+"multirow-column"),e.emitContainerClasses());var f=u.direction&&u.direction!==o.direction,v=o.loop&&(u.slidesPerView!==o.slidesPerView||f);f&&n&&e.changeDirection(),pu(e.params,u);var m=e.params.enabled;pu(e,{allowTouchMove:e.params.allowTouchMove,allowSlideNext:e.params.allowSlideNext,allowSlidePrev:e.params.allowSlidePrev}),h&&!m?e.disable():!h&&m&&e.enable(),e.currentBreakpoint=l,e.emit("_beforeBreakpoint",u),v&&n&&(e.loopDestroy(),e.loopCreate(),e.updateSlides(),e.slideTo(t-r+e.loopedSlides,0,!1)),e.emit("breakpoint",u)}}},getBreakpoint:function(e,t,n){if(void 0===t&&(t="window"),e&&("container"!==t||n)){var i=!1,r=Uc(),o="window"===t?r.innerHeight:n.clientHeight,s=Object.keys(e).map((function(e){if("string"==typeof e&&0===e.indexOf("@")){var t=parseFloat(e.substr(1));return{value:o*t,point:e}}return{value:e,point:e}}));s.sort((function(e,t){return parseInt(e.value,10)-parseInt(t.value,10)}));for(var a=0;a<s.length;a+=1){var l=s[a],c=l.point,u=l.value;"window"===t?r.matchMedia("(min-width: "+u+"px)").matches&&(i=c):u<=n.clientWidth&&(i=c)}return i||"max"}}},checkOverflow:{checkOverflow:function(){var e=this,t=e.params,n=e.isLocked,i=e.slides.length>0&&t.slidesOffsetBefore+t.spaceBetween*(e.slides.length-1)+e.slides[0].offsetWidth*e.slides.length;t.slidesOffsetBefore&&t.slidesOffsetAfter&&i?e.isLocked=i<=e.size:e.isLocked=1===e.snapGrid.length,e.allowSlideNext=!e.isLocked,e.allowSlidePrev=!e.isLocked,n!==e.isLocked&&e.emit(e.isLocked?"lock":"unlock"),n&&n!==e.isLocked&&(e.isEnd=!1,e.navigation&&e.navigation.update())}},classes:Bu,images:{loadImage:function(e,t,n,i,r,o){var s,a=Uc();function l(){o&&o()}au(e).parent("picture")[0]||e.complete&&r?l():t?((s=new a.Image).onload=l,s.onerror=l,i&&(s.sizes=i),n&&(s.srcset=n),t&&(s.src=t)):l()},preloadImages:function(){var e=this;function t(){null!=e&&e&&!e.destroyed&&(void 0!==e.imagesLoaded&&(e.imagesLoaded+=1),e.imagesLoaded===e.imagesToLoad.length&&(e.params.updateOnImagesReady&&e.update(),e.emit("imagesReady")))}e.imagesToLoad=e.$el.find("img");for(var n=0;n<e.imagesToLoad.length;n+=1){var i=e.imagesToLoad[n];e.loadImage(i,i.currentSrc||i.getAttribute("src"),i.srcset||i.getAttribute("srcset"),i.sizes||i.getAttribute("sizes"),!0,t)}}}},qu={},Vu=function(){function e(){for(var t,n,i=arguments.length,r=new Array(i),o=0;o<i;o++)r[o]=arguments[o];if(1===r.length&&r[0].constructor&&"Object"===Object.prototype.toString.call(r[0]).slice(8,-1)?n=r[0]:(t=r[0],n=r[1]),n||(n={}),n=pu({},n),t&&!n.el&&(n.el=t),n.el&&au(n.el).length>1){var s=[];return au(n.el).each((function(t){var i=pu({},n,{el:t});s.push(new e(i))})),s}var a=this;a.__swiper__=!0,a.support=bu(),a.device=_u({userAgent:n.userAgent}),a.browser=Eu(),a.eventsListeners={},a.eventsAnyListeners=[],void 0===a.modules&&(a.modules={}),Object.keys(a.modules).forEach((function(e){var t=a.modules[e];if(t.params){var i=Object.keys(t.params)[0],r=t.params[i];if("object"!=typeof r||null===r)return;if(["navigation","pagination","scrollbar"].indexOf(i)>=0&&!0===n[i]&&(n[i]={auto:!0}),!(i in n)||!("enabled"in r))return;!0===n[i]&&(n[i]={enabled:!0}),"object"!=typeof n[i]||"enabled"in n[i]||(n[i].enabled=!0),n[i]||(n[i]={enabled:!1})}}));var l,c,u=pu({},Hu);return a.useParams(u),a.params=pu({},u,qu,n),a.originalParams=pu({},a.params),a.passedParams=pu({},n),a.params&&a.params.on&&Object.keys(a.params.on).forEach((function(e){a.on(e,a.params.on[e])})),a.params&&a.params.onAny&&a.onAny(a.params.onAny),a.$=au,pu(a,{enabled:a.params.enabled,el:t,classNames:[],slides:au(),slidesGrid:[],snapGrid:[],slidesSizesGrid:[],isHorizontal:function(){return"horizontal"===a.params.direction},isVertical:function(){return"vertical"===a.params.direction},activeIndex:0,realIndex:0,isBeginning:!0,isEnd:!1,translate:0,previousTranslate:0,progress:0,velocity:0,animating:!1,allowSlideNext:a.params.allowSlideNext,allowSlidePrev:a.params.allowSlidePrev,touchEvents:(l=["touchstart","touchmove","touchend","touchcancel"],c=["mousedown","mousemove","mouseup"],a.support.pointerEvents&&(c=["pointerdown","pointermove","pointerup"]),a.touchEventsTouch={start:l[0],move:l[1],end:l[2],cancel:l[3]},a.touchEventsDesktop={start:c[0],move:c[1],end:c[2]},a.support.touch||!a.params.simulateTouch?a.touchEventsTouch:a.touchEventsDesktop),touchEventsData:{isTouched:void 0,isMoved:void 0,allowTouchCallbacks:void 0,touchStartTime:void 0,isScrolling:void 0,currentTranslate:void 0,startTranslate:void 0,allowThresholdMove:void 0,focusableElements:a.params.focusableElements,lastClickTime:cu(),clickTimeout:void 0,velocities:[],allowMomentumBounce:void 0,isTouchEvent:void 0,startMoving:void 0},allowClick:!0,allowTouchMove:a.params.allowTouchMove,touches:{startX:0,startY:0,currentX:0,currentY:0,diff:0},imagesToLoad:[],imagesLoaded:0}),a.useModules(),a.emit("_swiper"),a.params.init&&a.init(),a}var t,n,i=e.prototype;return i.enable=function(){var e=this;e.enabled||(e.enabled=!0,e.params.grabCursor&&e.setGrabCursor(),e.emit("enable"))},i.disable=function(){var e=this;e.enabled&&(e.enabled=!1,e.params.grabCursor&&e.unsetGrabCursor(),e.emit("disable"))},i.setProgress=function(e,t){var n=this;e=Math.min(Math.max(e,0),1);var i=n.minTranslate(),r=(n.maxTranslate()-i)*e+i;n.translateTo(r,void 0===t?0:t),n.updateActiveIndex(),n.updateSlidesClasses()},i.emitContainerClasses=function(){var e=this;if(e.params._emitClasses&&e.el){var t=e.el.className.split(" ").filter((function(t){return 0===t.indexOf("swiper-container")||0===t.indexOf(e.params.containerModifierClass)}));e.emit("_containerClasses",t.join(" "))}},i.getSlideClasses=function(e){var t=this;return e.className.split(" ").filter((function(e){return 0===e.indexOf("swiper-slide")||0===e.indexOf(t.params.slideClass)})).join(" ")},i.emitSlidesClasses=function(){var e=this;if(e.params._emitClasses&&e.el){var t=[];e.slides.each((function(n){var i=e.getSlideClasses(n);t.push({slideEl:n,classNames:i}),e.emit("_slideClass",n,i)})),e.emit("_slideClasses",t)}},i.slidesPerViewDynamic=function(){var e=this,t=e.params,n=e.slides,i=e.slidesGrid,r=e.size,o=e.activeIndex,s=1;if(t.centeredSlides){for(var a,l=n[o].swiperSlideSize,c=o+1;c<n.length;c+=1)n[c]&&!a&&(s+=1,(l+=n[c].swiperSlideSize)>r&&(a=!0));for(var u=o-1;u>=0;u-=1)n[u]&&!a&&(s+=1,(l+=n[u].swiperSlideSize)>r&&(a=!0))}else for(var d=o+1;d<n.length;d+=1)i[d]-i[o]<r&&(s+=1);return s},i.update=function(){var e=this;if(e&&!e.destroyed){var t=e.snapGrid,n=e.params;n.breakpoints&&e.setBreakpoint(),e.updateSize(),e.updateSlides(),e.updateProgress(),e.updateSlidesClasses(),e.params.freeMode?(i(),e.params.autoHeight&&e.updateAutoHeight()):(("auto"===e.params.slidesPerView||e.params.slidesPerView>1)&&e.isEnd&&!e.params.centeredSlides?e.slideTo(e.slides.length-1,0,!1,!0):e.slideTo(e.activeIndex,0,!1,!0))||i(),n.watchOverflow&&t!==e.snapGrid&&e.checkOverflow(),e.emit("update")}function i(){var t=e.rtlTranslate?-1*e.translate:e.translate,n=Math.min(Math.max(t,e.maxTranslate()),e.minTranslate());e.setTranslate(n),e.updateActiveIndex(),e.updateSlidesClasses()}},i.changeDirection=function(e,t){void 0===t&&(t=!0);var n=this,i=n.params.direction;return e||(e="horizontal"===i?"vertical":"horizontal"),e===i||"horizontal"!==e&&"vertical"!==e||(n.$el.removeClass(""+n.params.containerModifierClass+i).addClass(""+n.params.containerModifierClass+e),n.emitContainerClasses(),n.params.direction=e,n.slides.each((function(t){"vertical"===e?t.style.width="":t.style.height=""})),n.emit("changeDirection"),t&&n.update()),n},i.mount=function(e){var t=this;if(t.mounted)return!0;var n=au(e||t.params.el);if(!(e=n[0]))return!1;e.swiper=t;var i=function(){return"."+(t.params.wrapperClass||"").trim().split(" ").join(".")},r=function(){if(e&&e.shadowRoot&&e.shadowRoot.querySelector){var t=au(e.shadowRoot.querySelector(i()));return t.children=function(e){return n.children(e)},t}return n.children(i())}();if(0===r.length&&t.params.createElements){var o=Vc().createElement("div");r=au(o),o.className=t.params.wrapperClass,n.append(o),n.children("."+t.params.slideClass).each((function(e){r.append(e)}))}return pu(t,{$el:n,el:e,$wrapperEl:r,wrapperEl:r[0],mounted:!0,rtl:"rtl"===e.dir.toLowerCase()||"rtl"===n.css("direction"),rtlTranslate:"horizontal"===t.params.direction&&("rtl"===e.dir.toLowerCase()||"rtl"===n.css("direction")),wrongRTL:"-webkit-box"===r.css("display")}),!0},i.init=function(e){var t=this;return t.initialized||!1===t.mount(e)||(t.emit("beforeInit"),t.params.breakpoints&&t.setBreakpoint(),t.addClasses(),t.params.loop&&t.loopCreate(),t.updateSize(),t.updateSlides(),t.params.watchOverflow&&t.checkOverflow(),t.params.grabCursor&&t.enabled&&t.setGrabCursor(),t.params.preloadImages&&t.preloadImages(),t.params.loop?t.slideTo(t.params.initialSlide+t.loopedSlides,0,t.params.runCallbacksOnInit,!1,!0):t.slideTo(t.params.initialSlide,0,t.params.runCallbacksOnInit,!1,!0),t.attachEvents(),t.initialized=!0,t.emit("init"),t.emit("afterInit")),t},i.destroy=function(e,t){void 0===e&&(e=!0),void 0===t&&(t=!0);var n,i=this,r=i.params,o=i.$el,s=i.$wrapperEl,a=i.slides;return void 0===i.params||i.destroyed||(i.emit("beforeDestroy"),i.initialized=!1,i.detachEvents(),r.loop&&i.loopDestroy(),t&&(i.removeClasses(),o.removeAttr("style"),s.removeAttr("style"),a&&a.length&&a.removeClass([r.slideVisibleClass,r.slideActiveClass,r.slideNextClass,r.slidePrevClass].join(" ")).removeAttr("style").removeAttr("data-swiper-slide-index")),i.emit("destroy"),Object.keys(i.eventsListeners).forEach((function(e){i.off(e)})),!1!==e&&(i.$el[0].swiper=null,n=i,Object.keys(n).forEach((function(e){try{n[e]=null}catch(e){}try{delete n[e]}catch(e){}}))),i.destroyed=!0),null},e.extendDefaults=function(e){pu(qu,e)},e.installModule=function(t){e.prototype.modules||(e.prototype.modules={});var n=t.name||Object.keys(e.prototype.modules).length+"_"+cu();e.prototype.modules[n]=t},e.use=function(t){return Array.isArray(t)?(t.forEach((function(t){return e.installModule(t)})),e):(e.installModule(t),e)},t=e,n=[{key:"extendedDefaults",get:function(){return qu}},{key:"defaults",get:function(){return Hu}}],null&&Wu(t.prototype,null),n&&Wu(t,n),e}();Object.keys(Gu).forEach((function(e){Object.keys(Gu[e]).forEach((function(t){Vu.prototype[t]=Gu[e][t]}))})),Vu.use([wu,Tu]);const Yu=Vu;function Uu(){return Uu=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},Uu.apply(this,arguments)}var Ku={toggleEl:function(e,t){e[t?"addClass":"removeClass"](this.params.navigation.disabledClass),e[0]&&"BUTTON"===e[0].tagName&&(e[0].disabled=t)},update:function(){var e=this,t=e.params.navigation,n=e.navigation.toggleEl;if(!e.params.loop){var i=e.navigation,r=i.$nextEl,o=i.$prevEl;o&&o.length>0&&(e.isBeginning?n(o,!0):n(o,!1),e.params.watchOverflow&&e.enabled&&o[e.isLocked?"addClass":"removeClass"](t.lockClass)),r&&r.length>0&&(e.isEnd?n(r,!0):n(r,!1),e.params.watchOverflow&&e.enabled&&r[e.isLocked?"addClass":"removeClass"](t.lockClass))}},onPrevClick:function(e){var t=this;e.preventDefault(),t.isBeginning&&!t.params.loop||t.slidePrev()},onNextClick:function(e){var t=this;e.preventDefault(),t.isEnd&&!t.params.loop||t.slideNext()},init:function(){var e,t,n=this,i=n.params.navigation;n.params.navigation=vu(n.$el,n.params.navigation,n.params.createElements,{nextEl:"swiper-button-next",prevEl:"swiper-button-prev"}),(i.nextEl||i.prevEl)&&(i.nextEl&&(e=au(i.nextEl),n.params.uniqueNavElements&&"string"==typeof i.nextEl&&e.length>1&&1===n.$el.find(i.nextEl).length&&(e=n.$el.find(i.nextEl))),i.prevEl&&(t=au(i.prevEl),n.params.uniqueNavElements&&"string"==typeof i.prevEl&&t.length>1&&1===n.$el.find(i.prevEl).length&&(t=n.$el.find(i.prevEl))),e&&e.length>0&&e.on("click",n.navigation.onNextClick),t&&t.length>0&&t.on("click",n.navigation.onPrevClick),pu(n.navigation,{$nextEl:e,nextEl:e&&e[0],$prevEl:t,prevEl:t&&t[0]}),n.enabled||(e&&e.addClass(i.lockClass),t&&t.addClass(i.lockClass)))},destroy:function(){var e=this,t=e.navigation,n=t.$nextEl,i=t.$prevEl;n&&n.length&&(n.off("click",e.navigation.onNextClick),n.removeClass(e.params.navigation.disabledClass)),i&&i.length&&(i.off("click",e.navigation.onPrevClick),i.removeClass(e.params.navigation.disabledClass))}};const Xu={name:"navigation",params:{navigation:{nextEl:null,prevEl:null,hideOnClick:!1,disabledClass:"swiper-button-disabled",hiddenClass:"swiper-button-hidden",lockClass:"swiper-button-lock"}},create:function(){hu(this,{navigation:Uu({},Ku)})},on:{init:function(e){e.navigation.init(),e.navigation.update()},toEdge:function(e){e.navigation.update()},fromEdge:function(e){e.navigation.update()},destroy:function(e){e.navigation.destroy()},"enable disable":function(e){var t=e.navigation,n=t.$nextEl,i=t.$prevEl;n&&n[e.enabled?"removeClass":"addClass"](e.params.navigation.lockClass),i&&i[e.enabled?"removeClass":"addClass"](e.params.navigation.lockClass)},click:function(e,t){var n=e.navigation,i=n.$nextEl,r=n.$prevEl,o=t.target;if(e.params.navigation.hideOnClick&&!au(o).is(r)&&!au(o).is(i)){if(e.pagination&&e.params.pagination&&e.params.pagination.clickable&&(e.pagination.el===o||e.pagination.el.contains(o)))return;var s;i?s=i.hasClass(e.params.navigation.hiddenClass):r&&(s=r.hasClass(e.params.navigation.hiddenClass)),!0===s?e.emit("navigationShow"):e.emit("navigationHide"),i&&i.toggleClass(e.params.navigation.hiddenClass),r&&r.toggleClass(e.params.navigation.hiddenClass)}}}};function Ju(){return Ju=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},Ju.apply(this,arguments)}var Qu={update:function(){var e=this,t=e.rtl,n=e.params.pagination;if(n.el&&e.pagination.el&&e.pagination.$el&&0!==e.pagination.$el.length){var i,r=e.virtual&&e.params.virtual.enabled?e.virtual.slides.length:e.slides.length,o=e.pagination.$el,s=e.params.loop?Math.ceil((r-2*e.loopedSlides)/e.params.slidesPerGroup):e.snapGrid.length;if(e.params.loop?((i=Math.ceil((e.activeIndex-e.loopedSlides)/e.params.slidesPerGroup))>r-1-2*e.loopedSlides&&(i-=r-2*e.loopedSlides),i>s-1&&(i-=s),i<0&&"bullets"!==e.params.paginationType&&(i=s+i)):i=void 0!==e.snapIndex?e.snapIndex:e.activeIndex||0,"bullets"===n.type&&e.pagination.bullets&&e.pagination.bullets.length>0){var a,l,c,u=e.pagination.bullets;if(n.dynamicBullets&&(e.pagination.bulletSize=u.eq(0)[e.isHorizontal()?"outerWidth":"outerHeight"](!0),o.css(e.isHorizontal()?"width":"height",e.pagination.bulletSize*(n.dynamicMainBullets+4)+"px"),n.dynamicMainBullets>1&&void 0!==e.previousIndex&&(e.pagination.dynamicBulletIndex+=i-e.previousIndex,e.pagination.dynamicBulletIndex>n.dynamicMainBullets-1?e.pagination.dynamicBulletIndex=n.dynamicMainBullets-1:e.pagination.dynamicBulletIndex<0&&(e.pagination.dynamicBulletIndex=0)),a=i-e.pagination.dynamicBulletIndex,c=((l=a+(Math.min(u.length,n.dynamicMainBullets)-1))+a)/2),u.removeClass(n.bulletActiveClass+" "+n.bulletActiveClass+"-next "+n.bulletActiveClass+"-next-next "+n.bulletActiveClass+"-prev "+n.bulletActiveClass+"-prev-prev "+n.bulletActiveClass+"-main"),o.length>1)u.each((function(e){var t=au(e),r=t.index();r===i&&t.addClass(n.bulletActiveClass),n.dynamicBullets&&(r>=a&&r<=l&&t.addClass(n.bulletActiveClass+"-main"),r===a&&t.prev().addClass(n.bulletActiveClass+"-prev").prev().addClass(n.bulletActiveClass+"-prev-prev"),r===l&&t.next().addClass(n.bulletActiveClass+"-next").next().addClass(n.bulletActiveClass+"-next-next"))}));else{var d=u.eq(i),p=d.index();if(d.addClass(n.bulletActiveClass),n.dynamicBullets){for(var h=u.eq(a),f=u.eq(l),v=a;v<=l;v+=1)u.eq(v).addClass(n.bulletActiveClass+"-main");if(e.params.loop)if(p>=u.length-n.dynamicMainBullets){for(var m=n.dynamicMainBullets;m>=0;m-=1)u.eq(u.length-m).addClass(n.bulletActiveClass+"-main");u.eq(u.length-n.dynamicMainBullets-1).addClass(n.bulletActiveClass+"-prev")}else h.prev().addClass(n.bulletActiveClass+"-prev").prev().addClass(n.bulletActiveClass+"-prev-prev"),f.next().addClass(n.bulletActiveClass+"-next").next().addClass(n.bulletActiveClass+"-next-next");else h.prev().addClass(n.bulletActiveClass+"-prev").prev().addClass(n.bulletActiveClass+"-prev-prev"),f.next().addClass(n.bulletActiveClass+"-next").next().addClass(n.bulletActiveClass+"-next-next")}}if(n.dynamicBullets){var g=Math.min(u.length,n.dynamicMainBullets+4),y=(e.pagination.bulletSize*g-e.pagination.bulletSize)/2-c*e.pagination.bulletSize,b=t?"right":"left";u.css(e.isHorizontal()?b:"top",y+"px")}}if("fraction"===n.type&&(o.find(fu(n.currentClass)).text(n.formatFractionCurrent(i+1)),o.find(fu(n.totalClass)).text(n.formatFractionTotal(s))),"progressbar"===n.type){var _;_=n.progressbarOpposite?e.isHorizontal()?"vertical":"horizontal":e.isHorizontal()?"horizontal":"vertical";var E=(i+1)/s,w=1,C=1;"horizontal"===_?w=E:C=E,o.find(fu(n.progressbarFillClass)).transform("translate3d(0,
1170,0) scaleX("+w+") scaleY("+C+")").transition(e.params.speed)}"custom"===n.type&&n.renderCustom?(o.html(n.renderCustom(e,i+1,s)),e.emit("paginationRender",o[0])):e.emit("paginationUpdate",o[0]),e.params.watchOverflow&&e.enabled&&o[e.isLocked?"addClass":"removeClass"](n.lockClass)}},render:function(){var e=this,t=e.params.pagination;if(t.el&&e.pagination.el&&e.pagination.$el&&0!==e.pagination.$el.length){var n=e.virtual&&e.params.virtual.enabled?e.virtual.slides.length:e.slides.length,i=e.pagination.$el,r="";if("bullets"===t.type){var o=e.params.loop?Math.ceil((n-2*e.loopedSlides)/e.params.slidesPerGroup):e.snapGrid.length;e.params.freeMode&&!e.params.loop&&o>n&&(o=n);for(var s=0;s<o;s+=1)t.renderBullet?r+=t.renderBullet.call(e,s,t.bulletClass):r+="<"+t.bulletElement+' class="'+t.bulletClass+'"></'+t.bulletElement+">";i.html(r),e.pagination.bullets=i.find(fu(t.bulletClass))}"fraction"===t.type&&(r=t.renderFraction?t.renderFraction.call(e,t.currentClass,t.totalClass):'<span class="'+t.currentClass+'"></span> / <span class="'+t.totalClass+'"></span>',i.html(r)),"progressbar"===t.type&&(r=t.renderProgressbar?t.renderProgressbar.call(e,t.progressbarFillClass):'<span class="'+t.progressbarFillClass+'"></span>',i.html(r)),"custom"!==t.type&&e.emit("paginationRender",e.pagination.$el[0])}},init:function(){var e=this;e.params.pagination=vu(e.$el,e.params.pagination,e.params.createElements,{el:"swiper-pagination"});var t=e.params.pagination;if(t.el){var n=au(t.el);0!==n.length&&(e.params.uniqueNavElements&&"string"==typeof t.el&&n.length>1&&(n=e.$el.find(t.el)),"bullets"===t.type&&t.clickable&&n.addClass(t.clickableClass),n.addClass(t.modifierClass+t.type),"bullets"===t.type&&t.dynamicBullets&&(n.addClass(""+t.modifierClass+t.type+"-dynamic"),e.pagination.dynamicBulletIndex=0,t.dynamicMainBullets<1&&(t.dynamicMainBullets=1)),"progressbar"===t.type&&t.progressbarOpposite&&n.addClass(t.progressbarOppositeClass),t.clickable&&n.on("click",fu(t.bulletClass),(function(t){t.preventDefault();var n=au(this).index()*e.params.slidesPerGroup;e.params.loop&&(n+=e.loopedSlides),e.slideTo(n)})),pu(e.pagination,{$el:n,el:n[0]}),e.enabled||n.addClass(t.lockClass))}},destroy:function(){var e=this,t=e.params.pagination;if(t.el&&e.pagination.el&&e.pagination.$el&&0!==e.pagination.$el.length){var n=e.pagination.$el;n.removeClass(t.hiddenClass),n.removeClass(t.modifierClass+t.type),e.pagination.bullets&&e.pagination.bullets.removeClass(t.bulletActiveClass),t.clickable&&n.off("click",fu(t.bulletClass))}}};const Zu={name:"pagination",params:{pagination:{el:null,bulletElement:"span",clickable:!1,hideOnClick:!1,renderBullet:null,renderProgressbar:null,renderFraction:null,renderCustom:null,progressbarOpposite:!1,type:"bullets",dynamicBullets:!1,dynamicMainBullets:1,formatFractionCurrent:function(e){return e},formatFractionTotal:function(e){return e},bulletClass:"swiper-pagination-bullet",bulletActiveClass:"swiper-pagination-bullet-active",modifierClass:"swiper-pagination-",currentClass:"swiper-pagination-current",totalClass:"swiper-pagination-total",hiddenClass:"swiper-pagination-hidden",progressbarFillClass:"swiper-pagination-progressbar-fill",progressbarOppositeClass:"swiper-pagination-progressbar-opposite",clickableClass:"swiper-pagination-clickable",lockClass:"swiper-pagination-lock"}},create:function(){hu(this,{pagination:Ju({dynamicBulletIndex:0},Qu)})},on:{init:function(e){e.pagination.init(),e.pagination.render(),e.pagination.update()},activeIndexChange:function(e){(e.params.loop||void 0===e.snapIndex)&&e.pagination.update()},snapIndexChange:function(e){e.params.loop||e.pagination.update()},slidesLengthChange:function(e){e.params.loop&&(e.pagination.render(),e.pagination.update())},snapGridLengthChange:function(e){e.params.loop||(e.pagination.render(),e.pagination.update())},destroy:function(e){e.pagination.destroy()},"enable disable":function(e){var t=e.pagination.$el;t&&t[e.enabled?"removeClass":"addClass"](e.params.pagination.lockClass)},click:function(e,t){var n=t.target;if(e.params.pagination.el&&e.params.pagination.hideOnClick&&e.pagination.$el.length>0&&!au(n).hasClass(e.params.pagination.bulletClass)){if(e.navigation&&(e.navigation.nextEl&&n===e.navigation.nextEl||e.navigation.prevEl&&n===e.navigation.prevEl))return;!0===e.pagination.$el.hasClass(e.params.pagination.hiddenClass)?e.emit("paginationShow"):e.emit("paginationHide"),e.pagination.$el.toggleClass(e.params.pagination.hiddenClass)}}}};function ed(){return ed=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},ed.apply(this,arguments)}var td={setTranslate:function(){for(var e=this,t=e.slides,n=0;n<t.length;n+=1){var i=e.slides.eq(n),r=-i[0].swiperSlideOffset;e.params.virtualTranslate||(r-=e.translate);var o=0;e.isHorizontal()||(o=r,r=0);var s=e.params.fadeEffect.crossFade?Math.max(1-Math.abs(i[0].progress),0):1+Math.min(Math.max(i[0].progress,-1),0);i.css({opacity:s}).transform("translate3d("+r+"px, "+o+"px, 0px)")}},setTransition:function(e){var t=this,n=t.slides,i=t.$wrapperEl;if(n.transition(e),t.params.virtualTranslate&&0!==e){var r=!1;n.transitionEnd((function(){if(!r&&t&&!t.destroyed){r=!0,t.animating=!1;for(var e=["webkitTransitionEnd","transitionend"],n=0;n<e.length;n+=1)i.trigger(e[n])}}))}}};const nd={name:"effect-fade",params:{fadeEffect:{crossFade:!1}},create:function(){hu(this,{fadeEffect:ed({},td)})},on:{beforeInit:function(e){if("fade"===e.params.effect){e.classNames.push(e.params.containerModifierClass+"fade");var t={slidesPerView:1,slidesPerColumn:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!0};pu(e.params,t),pu(e.originalParams,t)}},setTranslate:function(e){"fade"===e.params.effect&&e.fadeEffect.setTranslate()},setTransition:function(e,t){"fade"===e.params.effect&&e.fadeEffect.setTransition(t)}}};function id(){return id=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},id.apply(this,arguments)}var rd={run:function(){var e=this,t=e.slides.eq(e.activeIndex),n=e.params.autoplay.delay;t.attr("data-swiper-autoplay")&&(n=t.attr("data-swiper-autoplay")||e.params.autoplay.delay),clearTimeout(e.autoplay.timeout),e.autoplay.timeout=lu((function(){var t;e.params.autoplay.reverseDirection?e.params.loop?(e.loopFix(),t=e.slidePrev(e.params.speed,!0,
vendor: 10,855 bytes, line 117
117!0),e.emit("autoplay")):e.isBeginning?e.params.autoplay.stopOnLastSlide?e.autoplay.stop():(t=e.slideTo(e.slides.length-1,e.params.speed,!0,!0),e.emit("autoplay")):(t=e.slidePrev(e.params.speed,!0,!0),e.emit("autoplay")):e.params.loop?(e.loopFix(),t=e.slideNext(e.params.speed,!0,!0),e.emit("autoplay")):e.isEnd?e.params.autoplay.stopOnLastSlide?e.autoplay.stop():(t=e.slideTo(0,e.params.speed,!0,!0),e.emit("autoplay")):(t=e.slideNext(e.params.speed,!0,!0),e.emit("autoplay")),(e.params.cssMode&&e.autoplay.running||!1===t)&&e.autoplay.run()}),n)},start:function(){var e=this;return void 0===e.autoplay.timeout&&!e.autoplay.running&&(e.autoplay.running=!0,e.emit("autoplayStart"),e.autoplay.run(),!0)},stop:function(){var e=this;return!!e.autoplay.running&&void 0!==e.autoplay.timeout&&(e.autoplay.timeout&&(clearTimeout(e.autoplay.timeout),e.autoplay.timeout=void 0),e.autoplay.running=!1,e.emit("autoplayStop"),!0)},pause:function(e){var t=this;t.autoplay.running&&(t.autoplay.paused||(t.autoplay.timeout&&clearTimeout(t.autoplay.timeout),t.autoplay.paused=!0,0!==e&&t.params.autoplay.waitForTransition?["transitionend","webkitTransitionEnd"].forEach((function(e){t.$wrapperEl[0].addEventListener(e,t.autoplay.onTransitionEnd)})):(t.autoplay.paused=!1,t.autoplay.run())))},onVisibilityChange:function(){var e=this,t=Vc();"hidden"===t.visibilityState&&e.autoplay.running&&e.autoplay.pause(),"visible"===t.visibilityState&&e.autoplay.paused&&(e.autoplay.run(),e.autoplay.paused=!1)},onTransitionEnd:function(e){var t=this;t&&!t.destroyed&&t.$wrapperEl&&e.target===t.$wrapperEl[0]&&(["transitionend","webkitTransitionEnd"].forEach((function(e){t.$wrapperEl[0].removeEventListener(e,t.autoplay.onTransitionEnd)})),t.autoplay.paused=!1,t.autoplay.running?t.autoplay.run():t.autoplay.stop())},onMouseEnter:function(){var e=this;e.params.autoplay.disableOnInteraction?e.autoplay.stop():e.autoplay.pause(),["transitionend","webkitTransitionEnd"].forEach((function(t){e.$wrapperEl[0].removeEventListener(t,e.autoplay.onTransitionEnd)}))},onMouseLeave:function(){var e=this;e.params.autoplay.disableOnInteraction||(e.autoplay.paused=!1,e.autoplay.run())},attachMouseEvents:function(){var e=this;e.params.autoplay.pauseOnMouseEnter&&(e.$el.on("mouseenter",e.autoplay.onMouseEnter),e.$el.on("mouseleave",e.autoplay.onMouseLeave))},detachMouseEvents:function(){var e=this;e.$el.off("mouseenter",e.autoplay.onMouseEnter),e.$el.off("mouseleave",e.autoplay.onMouseLeave)}};const od={name:"autoplay",params:{autoplay:{enabled:!1,delay:3e3,waitForTransition:!0,disableOnInteraction:!0,stopOnLastSlide:!1,reverseDirection:!1,pauseOnMouseEnter:!1}},create:function(){hu(this,{autoplay:id({},rd,{running:!1,paused:!1})})},on:{init:function(e){e.params.autoplay.enabled&&(e.autoplay.start(),Vc().addEventListener("visibilitychange",e.autoplay.onVisibilityChange),e.autoplay.attachMouseEvents())},beforeTransitionStart:function(e,t,n){e.autoplay.running&&(n||!e.params.autoplay.disableOnInteraction?e.autoplay.pause(t):e.autoplay.stop())},sliderFirstMove:function(e){e.autoplay.running&&(e.params.autoplay.disableOnInteraction?e.autoplay.stop():e.autoplay.pause())},touchEnd:function(e){e.params.cssMode&&e.autoplay.paused&&!e.params.autoplay.disableOnInteraction&&e.autoplay.run()},destroy:function(e){e.autoplay.detachMouseEvents(),e.autoplay.running&&e.autoplay.stop(),Vc().removeEventListener("visibilitychange",e.autoplay.onVisibilityChange)}}};function sd(){return sd=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},sd.apply(this,arguments)}var ad={setTranslate:function(){var e=this;if(e.params.scrollbar.el&&e.scrollbar.el){var t=e.scrollbar,n=e.rtlTranslate,i=e.progress,r=t.dragSize,o=t.trackSize,s=t.$dragEl,a=t.$el,l=e.params.scrollbar,c=r,u=(o-r)*i;n?(u=-u)>0?(c=r-u,u=0):-u+r>o&&(c=o+u):u<0?(c=r+u,u=0):u+r>o&&(c=o-u),e.isHorizontal()?(s.transform("translate3d("+u+"px, 0, 0)"),s[0].style.width=c+"px"):(s.transform("translate3d(0px, "+u+"px, 0)"),s[0].style.height=c+"px"),l.hide&&(clearTimeout(e.scrollbar.timeout),a[0].style.opacity=1,e.scrollbar.timeout=setTimeout((function(){a[0].style.opacity=0,a.transition(400)}),1e3))}},setTransition:function(e){var t=this;t.params.scrollbar.el&&t.scrollbar.el&&t.scrollbar.$dragEl.transition(e)},updateSize:function(){var e=this;if(e.params.scrollbar.el&&e.scrollbar.el){var t=e.scrollbar,n=t.$dragEl,i=t.$el;n[0].style.width="",n[0].style.height="";var r,o=e.isHorizontal()?i[0].offsetWidth:i[0].offsetHeight,s=e.size/e.virtualSize,a=s*(o/e.size);r="auto"===e.params.scrollbar.dragSize?o*s:parseInt(e.params.scrollbar.dragSize,10),e.isHorizontal()?n[0].style.width=r+"px":n[0].style.height=r+"px",i[0].style.display=s>=1?"none":"",e.params.scrollbar.hide&&(i[0].style.opacity=0),pu(t,{trackSize:o,divider:s,moveDivider:a,dragSize:r}),e.params.watchOverflow&&e.enabled&&t.$el[e.isLocked?"addClass":"removeClass"](e.params.scrollbar.lockClass)}},getPointerPosition:function(e){return this.isHorizontal()?"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].clientX:e.clientX:"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].clientY:e.clientY},setDragPosition:function(e){var t,n=this,i=n.scrollbar,r=n.rtlTranslate,o=i.$el,s=i.dragSize,a=i.trackSize,l=i.dragStartPos;t=(i.getPointerPosition(e)-o.offset()[n.isHorizontal()?"left":"top"]-(null!==l?l:s/2))/(a-s),t=Math.max(Math.min(t,1),0),r&&(t=1-t);var c=n.minTranslate()+(n.maxTranslate()-n.minTranslate())*t;n.updateProgress(c),n.setTranslate(c),n.updateActiveIndex(),n.updateSlidesClasses()},onDragStart:function(e){var t=this,n=t.params.scrollbar,i=t.scrollbar,r=t.$wrapperEl,o=i.$el,s=i.$dragEl;t.scrollbar.isTouched=!0,t.scrollbar.dragStartPos=e.target===s[0]||e.target===s?i.getPointerPosition(e)-e.target.getBoundingClientRect()[t.isHorizontal()?"left":"top"]:null,e.preventDefault(),e.stopPropagation(),r.transition(100),s.transition(100),i.setDragPosition(e),clearTimeout(t.scrollbar.dragTimeout),o.transition(0),n.hide&&o.css("opacity",1),t.params.cssMode&&t.$wrapperEl.css("scroll-snap-type","none"),t.emit("scrollbarDragStart",e)},onDragMove:function(e){var t=this,n=t.scrollbar,i=t.$wrapperEl,r=n.$el,o=n.$dragEl;t.scrollbar.isTouched&&(e.preventDefault?e.preventDefault():e.returnValue=!1,n.setDragPosition(e),i.transition(0),r.transition(0),o.transition(0),t.emit("scrollbarDragMove",e))},onDragEnd:function(e){var t=this,n=t.params.scrollbar,i=t.scrollbar,r=t.$wrapperEl,o=i.$el;t.scrollbar.isTouched&&(t.scrollbar.isTouched=!1,t.params.cssMode&&(t.$wrapperEl.css("scroll-snap-type",""),r.transition("")),n.hide&&(clearTimeout(t.scrollbar.dragTimeout),t.scrollbar.dragTimeout=lu((function(){o.css("opacity",0),o.transition(400)}),1e3)),t.emit("scrollbarDragEnd",e),n.snapOnRelease&&t.slideToClosest())},enableDraggable:function(){var e=this;if(e.params.scrollbar.el){var t=Vc(),n=e.scrollbar,i=e.touchEventsTouch,r=e.touchEventsDesktop,o=e.params,s=e.support,a=n.$el[0],l=!(!s.passiveListener||!o.passiveListeners)&&{passive:!1,capture:!1},c=!(!s.passiveListener||!o.passiveListeners)&&{passive:!0,capture:!1};a&&(s.touch?(a.addEventListener(i.start,e.scrollbar.onDragStart,l),a.addEventListener(i.move,e.scrollbar.onDragMove,l),a.addEventListener(i.end,e.scrollbar.onDragEnd,c)):(a.addEventListener(r.start,e.scrollbar.onDragStart,l),t.addEventListener(r.move,e.scrollbar.onDragMove,l),t.addEventListener(r.end,e.scrollbar.onDragEnd,c)))}},disableDraggable:function(){var e=this;if(e.params.scrollbar.el){var t=Vc(),n=e.scrollbar,i=e.touchEventsTouch,r=e.touchEventsDesktop,o=e.params,s=e.support,a=n.$el[0],l=!(!s.passiveListener||!o.passiveListeners)&&{passive:!1,capture:!1},c=!(!s.passiveListener||!o.passiveListeners)&&{passive:!0,capture:!1};a&&(s.touch?(a.removeEventListener(i.start,e.scrollbar.onDragStart,l),a.removeEventListener(i.move,e.scrollbar.onDragMove,l),a.removeEventListener(i.end,e.scrollbar.onDragEnd,c)):(a.removeEventListener(r.start,e.scrollbar.onDragStart,l),t.removeEventListener(r.move,e.scrollbar.onDragMove,l),t.removeEventListener(r.end,e.scrollbar.onDragEnd,c)))}},init:function(){var e=this,t=e.scrollbar,n=e.$el;e.params.scrollbar=vu(n,e.params.scrollbar,e.params.createElements,{el:"swiper-scrollbar"});var i=e.params.scrollbar;if(i.el){var r=au(i.el);e.params.uniqueNavElements&&"string"==typeof i.el&&r.length>1&&1===n.find(i.el).length&&(r=n.find(i.el));var o=r.find("."+e.params.scrollbar.dragClass);0===o.length&&(o=au('<div class="'+e.params.scrollbar.dragClass+'"></div>'),r.append(o)),pu(t,{$el:r,el:r[0],$dragEl:o,dragEl:o[0]}),i.draggable&&t.enableDraggable(),r&&r[e.enabled?"removeClass":"addClass"](e.params.scrollbar.lockClass)}},destroy:function(){this.scrollbar.disableDraggable()}};const ld={name:"scrollbar",params:{scrollbar:{el:null,dragSize:"auto",hide:!1,draggable:!1,snapOnRelease:!0,lockClass:"swiper-scrollbar-lock",dragClass:"swiper-scrollbar-drag"}},create:function(){hu(this,{scrollbar:sd({isTouched:!1,timeout:null,dragTimeout:null},ad)})},on:{init:function(e){e.scrollbar.init(),e.scrollbar.updateSize(),e.scrollbar.setTranslate()},update:function(e){e.scrollbar.updateSize()},resize:function(e){e.scrollbar.updateSize()},observerUpdate:function(e){e.scrollbar.updateSize()},setTranslate:function(e){e.scrollbar.setTranslate()},setTransition:function(e,t){e.scrollbar.setTransition(t)},"enable disable":function(e){var t=e.scrollbar.$el;t&&t[e.enabled?"removeClass":"addClass"](e.params.scrollbar.lockClass)},destroy:function(e){e.scrollbar.destroy()}}};function cd(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,i=new Array(t);n<t;n++)i[n]=e[n];return i}function ud(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function dd(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ud(Object(n),!0).forEach((function(t){pd(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ud(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function pd(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Yu.use([Xu,Zu,nd,od,ld]);var hd=function(e){var t=".swiper-bullets",n=".swiper-button-next",i=".swiper-button-prev",r=".carousel",o=".carousel__tabs",s=".carousel__tabbutton",a=".carousel__tabbutton--active",l=".carousel__tab--active",c=".swiper-slide",u="swiper-slide-visible",d="contentpageteaser--bmicard",p="carousel__tabs--hidden",h="carousel__tabbutton--active",f="contentpageteaser--painpoint",v="contentpageteaser--painpoint--active",m="slide",g="fade",y="enabled",b="8",_="20",
117E="20",w=e.closest(r),C=w.querySelector(t),S=w.querySelector(o),T=e.querySelectorAll(c),x=e.dataset.tabscroll===y,O=w.classList.contains(f),L=w.classList.contains(d),A=null,I=null,k={effect:e.dataset.slidermode===y?m:g,autoplay:{delay:e.dataset.autoplay===y?parseInt(e.dataset.delay):void 0},navigation:{nextEl:w.querySelector(n),prevEl:w.querySelector(i)},breakpoints:{0:{slidesPerView:O?"1.2":"true"===e.dataset.autoslideitems?"auto":"1",spaceBetween:O?b:E,scrollbar:{dragSize:150,freeMode:{enabled:!1},snapOnRelease:!0},slidesOffsetBefore:O?20:0,slidesOffsetAfter:O?20:0},1024:dd({slidesPerView:"true"===e.dataset.autoslideitems?"auto":parseInt(e.dataset.slidesamountperscreen),spaceBetween:_,scrollbar:{dragSize:500,snapOnRelease:!1}},!L&&{freeMode:{enabled:!0,momentum:!0,sticky:!0}})}};k.autoplay.delay||delete k.autoplay;var M,P=function(e){if(A&&A.length){var t,n=null===(t=I)||void 0===t?void 0:t.querySelector(".references"),i=!!n&&n.hasAttribute("open");if(I.innerHTML="",A[e]){var r=A[e].cloneNode(!0);I.appendChild(r),i&&r.setAttribute("open","")}}},D=function(e){var t=new CustomEvent("slider:change",{detail:{oldIndex:e.previousIndex,newIndex:e.realIndex,sliderEl:w||null}});document.dispatchEvent(t)},N=function(e){var t=e.getBoundingClientRect(),n=S.getBoundingClientRect(),i=t.left-n.left+S.scrollLeft;S.style.setProperty("--carousel-left","".concat(i,"px")),S.style.setProperty("--carousel-width","".concat(t.width,"px"))},$=function(t,n){var i=S.querySelector(a);i&&i===t&&O?(w.classList.remove(v),t.classList.remove(h)):i&&i!==t?(e.swiper.slideTo(n),t.classList.add(h)):(w.classList.add(v),j(),e.swiper.slideTo(n),t.classList.add(h))},j=function(){e.swiper&&(T.forEach((function(e){e.style.height="auto"})),e.swiper.updateSize(),e.swiper.updateSlides(),e.swiper.updateProgress(),e.swiper.updateSlidesClasses(),x&&R(T))},R=function(e){var t,n=Math.max.apply(Math,(t=Array.from(e).map((function(e){return e.clientHeight})),function(e){if(Array.isArray(e))return cd(e)}(t)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(t)||function(e,t){if(e){if("string"==typeof e)return cd(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?cd(e,t):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()));e.forEach((function(e){return e.style.height=[n,"px"].join("")}))};M=new Yu(e,dd({direction:"horizontal",grabCursor:!1,watchOverflow:!0,pagination:{el:C,type:"bullets",clickable:!0},scrollbar:{el:".swiper-scrollbar",draggable:!0,hide:!1},watchSlidesProgress:!0,watchSlidesVisibility:!0,spaceBetween:E},k)),e.querySelector(".references")&&(A=[],T.forEach((function(e){var t=e.querySelector(".references");A.push(t||null)})),(I=document.createElement("div")).classList.add("carousel-references"),e.parentElement.appendChild(I),P(0)),function(e){w.querySelector("iframe")&&e.on("slideChange",(function(e){e.slides.forEach((function(e){if(!e.classList.contains(u)){var t=e.querySelector("iframe");t&&(t.src=t.src)}}))}))}(M),function(){if(S){var t=S.querySelectorAll(s),n=S.querySelector(l);if(x&&t.length>0&&(S.classList.remove(p),function(t){t.forEach((function(e,t){e.addEventListener("click",(function(n){$(e,t)}))})),e.swiper.on("slideChange",(function(e){var n=e.realIndex;t.forEach((function(e){e.classList.remove(h)})),t[n]&&(t[n].classList.add(h),L&&(t[n].scrollIntoView({behavior:"smooth",inline:"center",block:"nearest"}),N(t[n])))}))}(t),R(T),n)){var i=n.querySelector("button");if(i){var r=Array.from(t).indexOf(i);$(i,r),N(i)}}}}(),e.swiper.on("slideChange",(function(e){P(e.realIndex),L&&D(e)})),D(e.swiper),L&&window.addEventListener("resize",(function(){N(S.querySelector(a))}))},fd={contentcategoryfilter:{"vue-isotope":Sa}};Object.keys(fd).forEach((function(e){var t="."+e;document.querySelector(t)&&new ma({router:fc,el:t,components:fd[e]})})),(new function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.selector,n=void 0===t?{BURGER:".mobile-nav-toggle",CLOSE_BURGER:".nav-main-close-phone",
117NAVIGATION:".navigation",MEGAMENU:".megamenu",TOGGLE_MENU:'button[data-component="dropdown"]',HORIZONTAL_NAV:".header-cmp--horizontal-navigation",MENUITEMS:".navigation-items",HOSPITALITYCTA:".ctabutton--taw-opt",LANGUAGE_DROPDOWN:"#country-dropdown",SEARCH_DROPDOWN:"#search-dropdown"}:t,i=document.querySelectorAll("".concat(n.TOGGLE_MENU)),r=document.querySelector("".concat(n.BURGER)),o=document.querySelector("".concat(n.CLOSE_BURGER)),s=document.querySelector("".concat(n.NAVIGATION)),a=document.querySelector("".concat(n.MEGAMENU)),l=s||a,c=null==s?void 0:s.querySelector("".concat(n.MENUITEMS)),u=document.querySelector("".concat(n.HOSPITALITYCTA)),d=document.querySelector("".concat(n.HORIZONTAL_NAV)),p=document.querySelector(n.LANGUAGE_DROPDOWN),h=document.querySelector(n.SEARCH_DROPDOWN);if(d){var f=d.closest(".header");f.classList.add("header--horizontal-navigation")}var v=function(e){document.querySelectorAll("div[aria-hidden='false']:not(".concat(e,")")).forEach((function(e){e.setAttribute("aria-hidden",!0)}))},m=function(){null==p||p.setAttribute("aria-hidden",!0)},g=function(){null==h||h.setAttribute("aria-hidden",!0)},y=function(){m(),g()},b=function(){document.body.classList.contains("megamenu-open")&&y()},_=function(){document.body&&"undefined"!=typeof MutationObserver&&new MutationObserver((function(){b()})).observe(document.body,{attributes:!0,attributeFilter:["class"]})},E=function(){s.setAttribute("aria-hidden",!0)},w=function(){v(".".concat(l.getAttribute("class")));var e=!("true"===(l.getAttribute("aria-hidden")?l.getAttribute("aria-hidden"):"true"));if(l.setAttribute("aria-hidden",e),a){document.body.classList.toggle("megamenu-open",!e),b();var t=new CustomEvent("megamenu",{detail:{isClose:e}});document.dispatchEvent(t)}},C=function(e){var t,i=e.dataset.target;i||(i=null===(t=e.closest(n.TOGGLE_MENU))||void 0===t?void 0:t.dataset.target);var r=document.querySelector("#".concat(i));v("#".concat(i));var o=!("true"===r.getAttribute("aria-hidden"));r.setAttribute("aria-hidden",o)},S=function(){var e=document.querySelector(".ctabutton--opt-bottom");window.matchMedia("(max-width: 991px)").matches?(e||((e=u.cloneNode(!0)).classList.add("ctabutton--opt-bottom"),document.body.appendChild(e)),u.style.display="none"):(e&&e.remove(),u.style.display="block")},T=function(){var e=document.querySelector(".navigation--horizontal-banner"),t=document.querySelector(".hero"),n=document.querySelector(".homepage");if(n&&window.matchMedia("(min-width: 992px)").matches){s.classList.add("navigation--horizontal-home");var i=document.querySelector(".hero");i.parentNode.insertBefore(s,i.nextSibling)}else s.classList.remove("navigation--horizontal-home");if(window.matchMedia("(max-width: 991px)").matches){if(s.classList.remove("navigation--horizontal"),!e&&n){(e=document.createElement("div")).classList.add("navigation--horizontal-banner");var r=c.cloneNode(!0);e.appendChild(r),t.parentNode.insertBefore(e,t.nextSibling)}}else s.classList.add("navigation--horizontal"),e&&e.remove();if(t){if(!d)return;var o=d.getBoundingClientRect().height;if(n)t.style.marginTop="".concat(o,"px");else{var a=document.querySelector(".navigation--horizontal");if(!a)return;var l=a.getBoundingClientRect().height;t.style.marginTop="".concat(l+o,"px")}}},x=function(){var e=this;p&&p.addEventListener("mouseleave",(function(){m()})),h&&h.addEventListener("mouseleave",(function(){g()})),i.forEach((function(t){t.addEventListener("click",(function(t){return e.toggleMenu(t.target)}))})),r.addEventListener("click",(function(){return e.toggleNav()})),null==o||o.addEventListener("click",(function(){return e.closeNav()})),_(),b(),u&&d&&(S(),T(),window.addEventListener("resize",(function(){S(),T()})))};return{closeNav:E,init:x,toggleMenu:C,toggleNav:w}}).init(),(new function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.selectors,n=void 0===t?{HEADER:".header",HEADER_SCROLL:"header--scrolled",HERO:".hero"}:t,i=document.querySelector(n.HEADER),r=document.querySelector(n.HERO),o=window.innerHeight,s=null,a=function(e,t){return e.getBoundingClientRect().top-t-o<=0},l=function(e){return e.className.includes(mc)},c=function(){null!==i&&null!==r&&(r.getBoundingClientRect().top<0?i.classList.add(n.HEADER_SCROLL):i.classList.remove(n.HEADER_SCROLL))},u=function(e){e.forEach((function(e){a(e,e.offsetHeight)&&!l(e)&&e.classList.add(mc)}))},d=function(){s&&window.cancelAnimationFrame(s),s=window.requestAnimationFrame((function(){c()}))},p=function(){this.initAnimations(),document.addEventListener("scroll",this.initAnimations)};return{init:p,initAnimations:d,isAnimationActive:l,isSectionVisible:a,startBlockAnimation:u,startHeaderOnScrollAnimation:c}}).init(),(new function(){var e=document.querySelectorAll(".".concat(Ec.MODAL_CLOSE_BUTTON)),t=document.querySelectorAll(".".concat(Ec.MODAL_WRAPPER));return{init:function(){e.forEach((function(e){var t;(t=e).addEventListener("click",(function(e){var n;e.preventDefault(),document.body.classList.remove(Ec.MODAL_OPEN),null===(n=t.closest(".".concat(Ec.MODAL_WRAPPER)))||void 0===n||n.classList.remove(Ec.MODAL_OPEN)}))})),t.forEach((function(e){var t=e.dataset,n=t.trigger,i=t.condition;switch(n){case"leavesite":new Fc(e);break;case"pageload":switch(i){case"missingCookie":(new zc).init(e);break;case"newsletter":(new kc).init(e);break;default:(new Hc).init(e)}break;case"externaltrigger":"newsletter"===i?(new Ic).init():console.debug(Ec.MSG_POPUP_NOT_FOUND,i);break;default:console.debug(Ec.MSG_POPUP_NOT_FOUND,n)}}))}}}).init(),(new function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.selector,n=void 0===t?{BANNER:".banner",BANNER_OVERLAY:".banner-overlay",STEPDECK:".stepcontainer"}:t,i=document.querySelector("".concat(n.BANNER)),r=document.querySelector("".concat(n.BANNER_OVERLAY)),o=document.querySelector("".concat(n.STEPDECK)),s=function(){r.classList.add("banner-overlay--content-controlled");var e=r.offsetHeight+30;i.style.maxHeight=e+"px",i.style.height=e+"px"},a=function(){if(o){var e=0,t=window.innerWidth;window.addEventListener("resize",(function(){window.innerWidth!==t&&(clearTimeout(e),e=setTimeout(s,100),t=window.innerWidth)})),s()}},l=function(){a()};return{init:l}}).init(),Array.from(document.querySelectorAll(".cmp-hcp-locator")).forEac
117h((function(e){new _c(e).init()})),(new function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.selector,n=void 0===t?{FOOTER:".footer",COOKIE_BTN:".ctabutton:has(.ot-sdk-show-settings)",LANG_NAV:".languagenavigation"}:t,i=document.querySelector(n.FOOTER),r=null==i?void 0:i.querySelector(n.COOKIE_BTN),o=null==i?void 0:i.querySelector(n.LANG_NAV),s=function(){if(r&&o){var e=document.createElement("div");e.classList.add("footer__languagenavigation-wrapper"),o.parentNode.insertBefore(e,o),e.appendChild(r),e.appendChild(o)}};return{init:s}}).init(),window.addEventListener("DOMContentLoaded",(function(){document.querySelectorAll(".swiper-container").forEach((function(e){return new hd(e)}))}))})()})();
118//# sourceMappingURL=data:application/json;charset=utf-8;base64,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3RCNmtJLEVBQVE5NUgsV0FBVzRVLGFBQWE0SCxFQUFTczlHLEdBQ3pDdDlHLEVBQVFocEIsWUFBWXFtSSxHQUNwQnI5RyxFQUFRaHBCLFlBQVlzbUksS0FLMUIsTUFBTyxDQUNMejRILEtBQUFBLEtId0JTQSxPRGtSWDlMLE9BQU9MLGlCQUFpQixvQkFBb0IsV0FFeEIvQixTQUFTOGUsaUJBRE8scUJBRXhCclMsU0FBUSxTQUFBd3lILEdBQVUsT0FBSSxJQUFJRCxHQUFTQyIsInNvdXJjZXMiOlsid2VicGFjazovL3RydXRoLWFib3V0LXdlaWdodC8uL3Rhdy1mcm9udGVuZC91aS10aGVtZS91aS1jcy9qcy9jb21wb25lbnRzL3N0aWNreUFuY2hvck1lbnUuanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL2Nob2ljZXMuanMvcHVibGljL2Fzc2V0cy9zY3JpcHRzL2Nob2ljZXMuanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL2Rlc2FuZHJvLW1hdGNoZXMtc2VsZWN0b3IvbWF0Y2hlcy1zZWxlY3Rvci5qcyIsIndlYnBhY2s6Ly90cnV0aC1hYm91dC13ZWlnaHQvLi9ub2RlX21vZHVsZXMvZXYtZW1pdHRlci9ldi1lbWl0dGVyLmpzIiwid2VicGFjazovL3RydXRoLWFib3V0LXdlaWdodC8uL25vZGVfbW9kdWxlcy9maXp6eS11aS11dGlscy91dGlscy5qcyIsIndlYnBhY2s6Ly90cnV0aC1hYm91dC13ZWlnaHQvLi9ub2RlX21vZHVsZXMvZ2V0LXNpemUvZ2V0LXNpemUuanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL2ltYWdlc2xvYWRlZC9pbWFnZXNsb2FkZWQuanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL2lzb3RvcGUtbGF5b3V0L2pzL2lzb3RvcGUuanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL2lzb3RvcGUtbGF5b3V0L2pzL2l0ZW0uanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL2lzb3RvcGUtbGF5b3V0L2pzL2xheW91dC1tb2RlLmpzIiwid2VicGFjazovL3RydXRoLWFib3V0LXdlaWdodC8uL25vZGVfbW9kdWxlcy9pc290b3BlLWxheW91dC9qcy9sYXlvdXQtbW9kZXMvZml0LXJvd3MuanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL2lzb3RvcGUtbGF5b3V0L2pzL2xheW91dC1tb2Rlcy9tYXNvbnJ5LmpzIiwid2VicGFjazovL3RydXRoLWFib3V0LXdlaWdodC8uL25vZGVfbW9kdWxlcy9pc290b3BlLWxheW91dC9qcy9sYXlvdXQtbW9kZXMvdmVydGljYWwuanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL21hc29ucnktbGF5b3V0L21hc29ucnkuanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL29iamVjdC1maXQtaW1hZ2VzL2Rpc3Qvb2ZpLmNvbW1vbi1qcy5qcyIsIndlYnBhY2s6Ly90cnV0aC1hYm91dC13ZWlnaHQvLi9ub2RlX21vZHVsZXMvb3V0bGF5ZXIvaXRlbS5qcyIsIndlYnBhY2s6Ly90cnV0aC1hYm91dC13ZWlnaHQvLi9ub2RlX21vZHVsZXMvb3V0bGF5ZXIvb3V0bGF5ZXIuanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL3Ntb290aHNjcm9sbC1hbmNob3ItcG9seWZpbGwvZGlzdC9pbmRleC5taW4uanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL3Ntb290aHNjcm9sbC1wb2x5ZmlsbC9kaXN0L3Ntb290aHNjcm9sbC5qcyIsIndlYnBhY2s6Ly90cnV0aC1hYm91dC13ZWlnaHQvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0L3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL3RydXRoLWFib3V0LXdlaWdodC93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0L3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0L3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL3Z1ZS9kaXN0L3Z1ZS5lc20uanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vdGF3LWZyb250ZW5kL3VpLXRoZW1lL3VpLWNzL2pzL2NvbXBvbmVudHMvY29udGVudGNhdGVnb3J5ZmlsdGVyLnZ1ZT9iMWRjIiwid2VicGFjazovL3RydXRoLWFib3V0LXdlaWdodC90YXctZnJvbnRlbmQvdWktdGhlbWUvdWktY3MvanMvY29tcG9uZW50cy9jb250ZW50Y2F0ZWdvcnlmaWx0ZXIudnVlIiwid2VicGFjazovL3RydXRoLWFib3V0LXdlaWdodC8uL3Rhdy1mcm9udGVuZC91aS10aGVtZS91aS1jcy9qcy9jb21wb25lbnRzL2NvbnRlbn
118RjYXRlZ29yeWZpbHRlci52dWUiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qcyIsIndlYnBhY2s6Ly90cnV0aC1hYm91dC13ZWlnaHQvLi90YXctZnJvbnRlbmQvdWktdGhlbWUvdWktY3MvanMvY29tcG9uZW50cy9jb250ZW50Y2F0ZWdvcnlmaWx0ZXIudnVlP2UyOTgiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL3Z1ZS1yb3V0ZXIvZGlzdC92dWUtcm91dGVyLmVzbS5qcyIsIndlYnBhY2s6Ly90cnV0aC1hYm91dC13ZWlnaHQvLi90YXctZnJvbnRlbmQvdWktdGhlbWUvdWktY3MvanMvcm91dGVyLmpzIiwid2VicGFjazovL3RydXRoLWFib3V0LXdlaWdodC8uL3Rhdy1mcm9udGVuZC91aS10aGVtZS91aS1jcy9qcy9lbGVtZW50cy9pbWFnZXMuanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vdGF3LWZyb250ZW5kL3VpLXRoZW1lL3VpLWNzL2pzL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly90cnV0aC1hYm91dC13ZWlnaHQvLi90YXctZnJvbnRlbmQvdWktdGhlbWUvdWktY3MvanMvc2V0dGluZ3MvYW5pbWF0aW9ucy5qcyIsIndlYnBhY2s6Ly90cnV0aC1hYm91dC13ZWlnaHQvLi90YXctZnJvbnRlbmQvdWktdGhlbWUvdWktY3MvanMvY29tcG9uZW50cy9oY3AtbG9jYXRvci5qcyIsIndlYnBhY2s6Ly90cnV0aC1hYm91dC13ZWlnaHQvLi90YXctZnJvbnRlbmQvdWktdGhlbWUvdWktY3MvanMvY29tcG9uZW50cy9oZWFkZXIuanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vdGF3LWZyb250ZW5kL3VpLXRoZW1lL3VpLWNzL2pzL2NvbXBvbmVudHMvbW9kYWwvaGVscGVycy5qcyIsIndlYnBhY2s6Ly90cnV0aC1hYm91dC13ZWlnaHQvLi90YXctZnJvbnRlbmQvdWktdGhlbWUvdWktY3MvanMvY29tcG9uZW50cy9tb2RhbC9wb3B1cC9uZXdzbGV0dGVyLmpzIiwid2VicGFjazovL3RydXRoLWFib3V0LXdlaWdodC8uL3Rhdy1mcm9udGVuZC91aS10aGVtZS91aS1jcy9qcy9jb21wb25lbnRzL21vZGFsL3BvcHVwL2xlYXZlU2l0ZS5qcyIsIndlYnBhY2s6Ly90cnV0aC1hYm91dC13ZWlnaHQvLi90YXctZnJvbnRlbmQvdWktYW5hbHl0aWNzL2pzL3V0aWxzLmpzIiwid2VicGFjazovL3RydXRoLWFib3V0LXdlaWdodC8uL3Rhdy1mcm9udGVuZC91aS1hbmFseXRpY3MvanMvY29uc3RhbnRzLmpzIiwid2VicGFjazovL3RydXRoLWFib3V0LXdlaWdodC8uL3Rhdy1mcm9udGVuZC91aS10aGVtZS91aS1jcy9qcy9jb21wb25lbnRzL21vZGFsL3BvcHVwL29uQ29va2llUHJlc2VudC5qcyIsIndlYnBhY2s6Ly90cnV0aC1hYm91dC13ZWlnaHQvLi90YXctZnJvbnRlbmQvdWktdGhlbWUvdWktY3MvanMvY29tcG9uZW50cy9tb2RhbC9wb3B1cC9vblBhZ2VMb2FkLmpzIiwid2VicGFjazovL3RydXRoLWFib3V0LXdlaWdodC8uL25vZGVfbW9kdWxlcy9zc3Itd2luZG93L3Nzci13aW5kb3cuZXNtLmpzIiwid2VicGFjazovL3RydXRoLWFib3V0LXdlaWdodC8uL25vZGVfbW9kdWxlcy9kb203L2RvbTcuZXNtLmpzIiwid2VicGFjazovL3RydXRoLWFib3V0LXdlaWdodC8uL25vZGVfbW9kdWxlcy9zd2lwZXIvZXNtL3V0aWxzL2RvbS5qcyIsIndlYnBhY2s6Ly90cnV0aC1hYm91dC13ZWlnaHQvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2VzbS91dGlscy91dGlscy5qcyIsIndlYnBhY2s6Ly90cnV0aC1hYm91dC13ZWlnaHQvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2VzbS91dGlscy9nZXQtc3VwcG9ydC5qcyIsIndlYnBhY2s6Ly90cnV0aC1hYm91dC13ZWlnaHQvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2VzbS91dGlscy9nZXQtZGV2aWNlLmpzIiwid2VicGFjazovL3RydXRoLWFib3V0LXdlaWdodC8uL25vZGVfbW9kdWxlcy9zd2lwZXIvZXNtL3V0aWxzL2dldC1icm93c2VyLmpzIiwid2VicGFjazovL3RydXRoLWFib3V0LXdlaWdodC8uL25vZGVfbW9kdWxlcy9zd2lwZXIvZXNtL21vZHVsZXMvcmVzaXplL3Jlc2l6ZS5qcyIsIndlYnBhY2s6Ly90cnV0aC1hYm91dC13ZWlnaHQvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2VzbS9tb2R1bGVzL29ic2VydmVyL29ic2VydmVyLmpzIiwid2VicGFjazovL3RydXRoLWFib3V0LXdlaWdodC8uL25vZGVfbW9kdWxlcy9zd2lwZXIvZXNtL2NvbXBvbmVudHMvY29yZS9ldmVudHMtZW1pdHRlci5qcyIsIndlYnBhY2s6Ly90cnV0aC1hYm91dC13ZWlnaHQvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2VzbS9jb21wb25lbnRzL2NvcmUvdXBkYXRlL2luZGV4LmpzIiwid2VicGFjazovL3RydXRoLWFib3V0LXdlaWdodC8uL25vZGVfbW9kdWxlcy9zd2lwZXIvZXNtL2NvbXBvbmVudHMvY29yZS91cGRhdGUvdXBkYXRlU2l6ZS5qcyIsIndlYnBhY2s6Ly90cnV0aC1hYm91dC13ZWlnaHQvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2VzbS9jb21wb25lbnRzL2NvcmUvdXBkYXRlL3VwZGF0ZVNsaWRlcy5qcyIsIndlYnBhY2s6Ly90cnV0aC1hYm91dC13ZWlnaHQvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2VzbS9jb21wb25lbnRzL2NvcmUvdXBkYXRlL3VwZGF0ZUF1dG9IZWlnaHQuanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL3N3aXBlci9lc20vY29tcG9uZW50cy9jb3JlL3VwZGF0ZS91cGRhdGVTbGlkZXNPZmZzZXQuanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL3N3aXBlci9lc20vY29tcG9uZW50cy9jb3JlL3VwZGF0ZS91cGRhdGVTbGlkZXNQcm9ncmVzcy5qcyIsIndlYnBhY2s6Ly90cnV0aC1hYm91dC13ZWlnaHQvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2VzbS9jb21wb25lbnRzL2NvcmUvdXBkYXRlL3VwZGF0ZVByb2dyZXNzLmpzIiwid2VicGFjazovL3RydXRoLWFib3V0LXdlaWdodC8uL25vZGVfbW9kdWxlcy9zd2lwZXIvZXNtL2NvbXBvbmVudHMvY29yZS91cGRhdGUvdXBkYXRlU2xpZGVzQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly90cnV0aC1hYm91dC13ZWlnaHQvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2VzbS9jb21wb25lbnRzL2NvcmUvdXBkYXRlL3VwZGF0ZUFjdGl2ZUluZGV4LmpzIiwid2VicGFjazovL3RydXRoLWFib3V0LXdlaWdodC8uL25vZGVfbW9kdWxlcy9zd2lwZXIvZXNtL2NvbXBvbmVudHMvY29yZS91cGRhdGUvdXBkYXRlQ2xpY2tlZFNsaWRlLmpzIiwid2VicGFjazovL3RydXRoLWFib3V0LXdlaWdodC8uL25vZGVfbW9kdWxlcy9zd2lwZXIvZXNtL2NvbXBvbmVudHMvY29yZS90cmFuc2xhdGUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL3N3aXBlci9lc20vY29tcG9uZW50cy9jb3JlL3RyYW5zbGF0ZS9nZXRUcmFuc2xhdGUuanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL3N3aXBlci9lc20vY29tcG9uZW50cy9jb3JlL3RyYW5zbGF0ZS9zZXRUcmFuc2xhdGUuanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL3N3aXBlci9lc20vY29tcG9uZW50cy9jb3JlL3RyYW5zbGF0ZS9taW5UcmFuc2xhdGUuanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL3N3aXBlci9lc20vY29tcG9uZW50cy9jb3JlL3RyYW5zbGF0ZS9tYXhUcmFuc2xhdGUuanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL3N3aXBlci9lc20vY29tcG9uZW50cy9jb3JlL3RyYW5zbGF0ZS90cmFuc2xhdGVUby5qcyIsIndlYnBhY2s6Ly90cnV0aC1hYm91dC13ZWlnaHQvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2VzbS9jb21wb25lbnRzL2NvcmUvc2xpZGUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL3N3aXBlci9lc20vY29tcG9uZW50cy9jb3JlL3NsaWRlL3NsaWRlVG8uanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL3N3aXBlci9lc20vY29tcG9uZW50cy9jb3JlL3NsaWRlL3NsaWRlVG9Mb29wLmpzIiwid2VicGFjazovL3RydXRoLWFib3V0LXdlaWdodC8uL25vZGVfbW9kdWxlcy9zd2lwZXIvZXNtL2NvbXBvbmVudHMvY29yZS9zbGlkZS9zbGlkZU5leHQuanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL3N3aXBlci9lc20vY29tcG9uZW50cy9jb3JlL3NsaWRlL3NsaWRlUHJldi5qcyIsIndlYnBhY2s6Ly90cnV0aC1hYm91dC13ZWlnaHQvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2VzbS9jb21wb25lbnRzL2NvcmUvc2xpZGUvc2xpZGVSZXNldC5qcyIsIndlYnBhY2s6Ly90cnV0aC1hYm91dC13ZWlnaHQvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2VzbS9jb21wb25lbnRzL2NvcmUvc2xpZGUvc2xpZGVUb0Nsb3Nlc3QuanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL3N3aXBlci9lc20vY29tcG9uZW50cy9jb3JlL3NsaWRlL3NsaWRlVG9DbGlja2VkU2xpZGUuanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL3N3aXBlci9lc20vY29tcG9uZW50cy9jb3JlL2xvb3AvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL3N3aXBlci9lc20vY29tcG9uZW50cy9jb3JlL2xvb3AvbG9vcENyZWF0ZS
1185qcyIsIndlYnBhY2s6Ly90cnV0aC1hYm91dC13ZWlnaHQvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2VzbS9jb21wb25lbnRzL2NvcmUvbG9vcC9sb29wRml4LmpzIiwid2VicGFjazovL3RydXRoLWFib3V0LXdlaWdodC8uL25vZGVfbW9kdWxlcy9zd2lwZXIvZXNtL2NvbXBvbmVudHMvY29yZS9sb29wL2xvb3BEZXN0cm95LmpzIiwid2VicGFjazovL3RydXRoLWFib3V0LXdlaWdodC8uL25vZGVfbW9kdWxlcy9zd2lwZXIvZXNtL2NvbXBvbmVudHMvY29yZS9tYW5pcHVsYXRpb24vaW5kZXguanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL3N3aXBlci9lc20vY29tcG9uZW50cy9jb3JlL21hbmlwdWxhdGlvbi9hcHBlbmRTbGlkZS5qcyIsIndlYnBhY2s6Ly90cnV0aC1hYm91dC13ZWlnaHQvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2VzbS9jb21wb25lbnRzL2NvcmUvbWFuaXB1bGF0aW9uL3ByZXBlbmRTbGlkZS5qcyIsIndlYnBhY2s6Ly90cnV0aC1hYm91dC13ZWlnaHQvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2VzbS9jb21wb25lbnRzL2NvcmUvbWFuaXB1bGF0aW9uL2FkZFNsaWRlLmpzIiwid2VicGFjazovL3RydXRoLWFib3V0LXdlaWdodC8uL25vZGVfbW9kdWxlcy9zd2lwZXIvZXNtL2NvbXBvbmVudHMvY29yZS9tYW5pcHVsYXRpb24vcmVtb3ZlU2xpZGUuanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL3N3aXBlci9lc20vY29tcG9uZW50cy9jb3JlL21hbmlwdWxhdGlvbi9yZW1vdmVBbGxTbGlkZXMuanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL3N3aXBlci9lc20vY29tcG9uZW50cy9jb3JlL2V2ZW50cy9vblRvdWNoU3RhcnQuanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL3N3aXBlci9lc20vY29tcG9uZW50cy9jb3JlL2V2ZW50cy9vblRvdWNoTW92ZS5qcyIsIndlYnBhY2s6Ly90cnV0aC1hYm91dC13ZWlnaHQvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2VzbS9jb21wb25lbnRzL2NvcmUvZXZlbnRzL29uVG91Y2hFbmQuanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL3N3aXBlci9lc20vY29tcG9uZW50cy9jb3JlL2V2ZW50cy9vblJlc2l6ZS5qcyIsIndlYnBhY2s6Ly90cnV0aC1hYm91dC13ZWlnaHQvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2VzbS9jb21wb25lbnRzL2NvcmUvZXZlbnRzL29uQ2xpY2suanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL3N3aXBlci9lc20vY29tcG9uZW50cy9jb3JlL2V2ZW50cy9vblNjcm9sbC5qcyIsIndlYnBhY2s6Ly90cnV0aC1hYm91dC13ZWlnaHQvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2VzbS9jb21wb25lbnRzL2NvcmUvZXZlbnRzL2luZGV4LmpzIiwid2VicGFjazovL3RydXRoLWFib3V0LXdlaWdodC8uL25vZGVfbW9kdWxlcy9zd2lwZXIvZXNtL2NvbXBvbmVudHMvY29yZS9jbGFzc2VzL2luZGV4LmpzIiwid2VicGFjazovL3RydXRoLWFib3V0LXdlaWdodC8uL25vZGVfbW9kdWxlcy9zd2lwZXIvZXNtL2NvbXBvbmVudHMvY29yZS9jbGFzc2VzL2FkZENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL3N3aXBlci9lc20vY29tcG9uZW50cy9jb3JlL2NsYXNzZXMvcmVtb3ZlQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly90cnV0aC1hYm91dC13ZWlnaHQvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2VzbS9jb21wb25lbnRzL2NvcmUvZGVmYXVsdHMuanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL3N3aXBlci9lc20vY29tcG9uZW50cy9jb3JlL2NvcmUtY2xhc3MuanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL3N3aXBlci9lc20vY29tcG9uZW50cy9jb3JlL21vZHVsYXIuanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL3N3aXBlci9lc20vY29tcG9uZW50cy9jb3JlL3RyYW5zaXRpb24vaW5kZXguanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL3N3aXBlci9lc20vY29tcG9uZW50cy9jb3JlL3RyYW5zaXRpb24vc2V0VHJhbnNpdGlvbi5qcyIsIndlYnBhY2s6Ly90cnV0aC1hYm91dC13ZWlnaHQvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2VzbS9jb21wb25lbnRzL2NvcmUvdHJhbnNpdGlvbi90cmFuc2l0aW9uU3RhcnQuanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL3N3aXBlci9lc20vY29tcG9uZW50cy9jb3JlL3RyYW5zaXRpb24vdHJhbnNpdGlvbkVuZC5qcyIsIndlYnBhY2s6Ly90cnV0aC1hYm91dC13ZWlnaHQvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2VzbS9jb21wb25lbnRzL2NvcmUvZ3JhYi1jdXJzb3IvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL3N3aXBlci9lc20vY29tcG9uZW50cy9jb3JlL2dyYWItY3Vyc29yL3NldEdyYWJDdXJzb3IuanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL3N3aXBlci9lc20vY29tcG9uZW50cy9jb3JlL2dyYWItY3Vyc29yL3Vuc2V0R3JhYkN1cnNvci5qcyIsIndlYnBhY2s6Ly90cnV0aC1hYm91dC13ZWlnaHQvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2VzbS9jb21wb25lbnRzL2NvcmUvYnJlYWtwb2ludHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL3N3aXBlci9lc20vY29tcG9uZW50cy9jb3JlL2JyZWFrcG9pbnRzL3NldEJyZWFrcG9pbnQuanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL3N3aXBlci9lc20vY29tcG9uZW50cy9jb3JlL2JyZWFrcG9pbnRzL2dldEJyZWFrcG9pbnQuanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL3N3aXBlci9lc20vY29tcG9uZW50cy9jb3JlL2NoZWNrLW92ZXJmbG93L2luZGV4LmpzIiwid2VicGFjazovL3RydXRoLWFib3V0LXdlaWdodC8uL25vZGVfbW9kdWxlcy9zd2lwZXIvZXNtL2NvbXBvbmVudHMvY29yZS9pbWFnZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL3N3aXBlci9lc20vY29tcG9uZW50cy9jb3JlL2ltYWdlcy9sb2FkSW1hZ2UuanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL3N3aXBlci9lc20vY29tcG9uZW50cy9jb3JlL2ltYWdlcy9wcmVsb2FkSW1hZ2VzLmpzIiwid2VicGFjazovL3RydXRoLWFib3V0LXdlaWdodC8uL25vZGVfbW9kdWxlcy9zd2lwZXIvZXNtL2NvbXBvbmVudHMvbmF2aWdhdGlvbi9uYXZpZ2F0aW9uLmpzIiwid2VicGFjazovL3RydXRoLWFib3V0LXdlaWdodC8uL25vZGVfbW9kdWxlcy9zd2lwZXIvZXNtL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmpzIiwid2VicGFjazovL3RydXRoLWFib3V0LXdlaWdodC8uL25vZGVfbW9kdWxlcy9zd2lwZXIvZXNtL2NvbXBvbmVudHMvZWZmZWN0LWZhZGUvZWZmZWN0LWZhZGUuanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vbm9kZV9tb2R1bGVzL3N3aXBlci9lc20vY29tcG9uZW50cy9hdXRvcGxheS9hdXRvcGxheS5qcyIsIndlYnBhY2s6Ly90cnV0aC1hYm91dC13ZWlnaHQvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2VzbS9jb21wb25lbnRzL3Njcm9sbGJhci9zY3JvbGxiYXIuanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vdGF3LWZyb250ZW5kL3VpLXRoZW1lL3VpLWNzL2pzL2NvbXBvbmVudHMvY2Fyb3VzZWwuanMiLCJ3ZWJwYWNrOi8vdHJ1dGgtYWJvdXQtd2VpZ2h0Ly4vdGF3LWZyb250ZW5kL3VpLXRoZW1lL3VpLWNzL2pzL2luZGV4LmpzIiwid2VicGFjazovL3RydXRoLWFib3V0LXdlaWdodC8uL3Rhdy1mcm9udGVuZC91aS10aGVtZS91aS1jcy9qcy9jb21wb25lbnRzL21vZGFsL21vZGFsLmpzIiwid2VicGFjazovL3RydXRoLWFib3V0LXdlaWdodC8uL3Rhdy1mcm9udGVuZC91aS10aGVtZS91aS1jcy9qcy9jb21wb25lbnRzL3N0ZXBEZWNrLmpzIiwid2VicGFjazovL3RydXRoLWFib3V0LXdlaWdodC8uL3Rhdy1mcm9udGVuZC91aS10aGVtZS91aS1jcy9qcy9jb21wb25lbnRzL2Zvb3Rlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmNtcC1zdGlja3ktYW5jaG9yLW1lbnUnKSkge1xuXG4gICAgLyogTW92ZSBjb250YWluZXIgb3V0IG9mIG1haW4gc2VjdGlvbiAqL1xuICAgIGNvbnN0IGNsb25lU3RpY2t5QW5jaG9yTWVudSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jbXAtc3RpY2t5LWFuY2hvci1tZW51JykuY2xvbmVOb2RlKHRydWUpO1xuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jbXAtc3RpY2t5LWFuY2hvci1tZW51JykucmVtb3ZlKCk7XG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3Rvcign
118I2FwcCcpLmFwcGVuZENoaWxkKGNsb25lU3RpY2t5QW5jaG9yTWVudSk7XG5cbiAgICAvLyBTdGlja3kgQW5jaG9yIE1lbnVcbiAgICBjb25zdCBzdGlja3lBbmNob3JNZW51ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmNtcC1zdGlja3ktYW5jaG9yLW1lbnUnKTtcbiAgICBjb25zdCBzdGlja3lBbmNob3JNZW51Q29udGVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jbXAtc3RpY2t5LWFuY2hvci1tZW51IC5jbXAtbGlzdCcpO1xuICAgIGNvbnN0IHN0aWNreUFuY2hvck1lbnVMZWZ0QXJyb3cgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuc3RpY2t5LWFuY2hvci1tZW51X19idXR0b24tLWxlZnQnKTtcbiAgICBjb25zdCBzdGlja3lBbmNob3JNZW51UmlnaHRBcnJvdyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zdGlja3ktYW5jaG9yLW1lbnVfX2J1dHRvbi0tcmlnaHQnKTtcblxuICAgIGxldCBkaXNwbGFjZW1lbnQgPSAwO1xuICAgIGxldCBtZW51TGVmdFBvcyA9IDA7XG4gICAgbGV0IG1lbnVXaWR0aCA9IDA7XG4gICAgbGV0IG1lbnVDb250ZW50TGVmdFBvcyA9IDA7XG4gICAgbGV0IG1lbnVDb250ZW50V2lkdGggPSAwO1xuXG4gICAgLyogQ29udGVudCBwb3NpdGlvbiAqL1xuICAgIGxldCBjaGVja0NvbnRlbnRQb3MgPSAoKSA9PiB7XG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlICovXG4gICAgICAgIG1lbnVMZWZ0UG9zID0gc3RpY2t5QW5jaG9yTWVudS5vZmZzZXRMZWZ0O1xuICAgICAgICBtZW51V2lkdGggPSAgc3RpY2t5QW5jaG9yTWVudS5vZmZzZXRXaWR0aDtcbiAgICAgICAgbWVudUNvbnRlbnRMZWZ0UG9zID0gc3RpY2t5QW5jaG9yTWVudUNvbnRlbnQub2Zmc2V0TGVmdDtcbiAgICAgICAgbWVudUNvbnRlbnRXaWR0aCA9IHN0aWNreUFuY2hvck1lbnVDb250ZW50Lm9mZnNldFdpZHRoO1xuICAgICAgICAvKiBlc2xpbnQtZW5hYmxlICovXG4gICAgfVxuXG4gICAgLyogU3dpcGluZyBmdW5jICovXG4gICAgbGV0IHN3aXBlID0gZGlyZWN0aW9uID0+IHtcblxuICAgICAgICBjaGVja0NvbnRlbnRQb3MoKTtcblxuXG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdsZWZ0JyAmJiBtZW51Q29udGVudFdpZHRoID4gbWVudVdpZHRoKSB7XG4gICAgICAgICAgICBkaXNwbGFjZW1lbnQgLT0gMTAwO1xuICAgICAgICAgICAgc3RpY2t5QW5jaG9yTWVudUNvbnRlbnQuc3R5bGUubWFyZ2luUmlnaHQgPSAnJztcbiAgICAgICAgICAgIHN0aWNreUFuY2hvck1lbnVDb250ZW50LnN0eWxlLm1hcmdpbkxlZnQgPSBkaXNwbGFjZW1lbnQgKyAncHgnO1xuICAgICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ3JpZ2h0JyAmJiBtZW51Q29udGVudExlZnRQb3MgPCAwKSB7XG4gICAgICAgICAgICBkaXNwbGFjZW1lbnQgKz0gMTAwO1xuICAgICAgICAgICAgc3RpY2t5QW5jaG9yTWVudUNvbnRlbnQuc3R5bGUubWFyZ2luUmlnaHQgPSAnJztcbiAgICAgICAgICAgIHN0aWNreUFuY2hvck1lbnVDb250ZW50LnN0eWxlLm1hcmdpbkxlZnQgPSBkaXNwbGFjZW1lbnQgKyAncHgnO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29udGVudFNjcm9sbEFkanVzdCA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdsZWZ0JyAmJiBtZW51TGVmdFBvcyA+IG1lbnVDb250ZW50TGVmdFBvcyArIChtZW51Q29udGVudFdpZHRoIC0gbWVudVdpZHRoKSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdsYXN0IG1lbnUgaXRlbSBvdXQgb2YgYm91bmRzJyk7XG4gICAgICAgICAgICAgICAgc3RpY2t5QW5jaG9yTWVudUNvbnRlbnQuc3R5bGUubWFyZ2luUmlnaHQgPSAnJztcbiAgICAgICAgICAgICAgICBsZXQgbmV3Q29udGVudFBvc2l0aW9uID0gbWVudUxlZnRQb3MgLSAobWVudUNvbnRlbnRXaWR0aCAtIG1lbnVXaWR0aCkgLSA3MDtcblxuICAgICAgICAgICAgICAgIHN0aWNreUFuY2hvck1lbnVDb250ZW50LnN0eWxlLm1hcmdpbkxlZnQgPSBuZXdDb250ZW50UG9zaXRpb24gKyAncHgnO1xuICAgICAgICAgICAgICAgIGRpc3BsYWNlbWVudCA9IG5ld0NvbnRlbnRQb3NpdGlvbjtcblxuICAgICAgICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdyaWdodCcgJiYgbWVudUNvbnRlbnRMZWZ0UG9zID4gbWVudUxlZnRQb3MpIHtcbiAgICAgICAgICAgICAgICBzdGlja3lBbmNob3JNZW51Q29udGVudC5zdHlsZS5tYXJnaW5SaWdodCA9ICcnO1xuICAgICAgICAgICAgICAgIHN0aWNreUFuY2hvck1lbnVDb250ZW50LnN0eWxlLm1hcmdpbkxlZnQgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2hlY2tDb250ZW50U2Nyb2xsVGltZW91dCA9IHNldFRpbWVvdXQoY29udGVudFNjcm9sbEFkanVzdCwgMTAwKTtcbiAgICAgICAgY2hlY2tDb250ZW50U2Nyb2xsVGltZW91dCgpO1xuICAgIH1cblxuICAgIC8qIFNoaWZ0aW5nIHRvIG1vYmlsZSB2ZXJzaW9uIHdpdGggYXJyb3dzICovXG4gICAgY29uc3QgbW9iaWxlVmVyc2lvbiA9ICgpID0+ICB7XG4gICAgICAgIGlmIChzdGlja3lBbmNob3JNZW51Lm9mZnNldFdpZHRoIDwgc3RpY2t5QW5jaG9yTWVudUNvbnRlbnQub2Zmc2V0V2lkdGgpIHtcbiAgICAgICAgICAgIGlmICghc3RpY2t5QW5jaG9yTWVudS5jbGFzc0xpc3QuY29udGFpbnMoJ2Fycm93cy1vbicpKSB7XG4gICAgICAgICAgICAgICAgc3RpY2t5QW5jaG9yTWVudS5jbGFzc0xpc3QuYWRkKCdhcnJvd3Mtb24nLCAnbW9iaWxlLW9uJyk7XG4gICAgICAgICAgICAgICAgc3RpY2t5QW5jaG9yTWVudS5jbGFzc0xpc3QuYWRkKCdhcnJvd3Mtb24nLCAnbW9iaWxlLW9uJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGlja3lBbmNob3JNZW51LmNsYXNzTGlzdC5yZW1vdmUoJ2Fycm93cy1vbicsICdtb2JpbGUtb24nKTtcbiAgICAgICAgICAgIHN0aWNreUFuY2hvck1lbnVDb250ZW50LnN0eWxlLm1hcmdpbkxlZnQgPSAnJztcbiAgICAgICAgICAgIHN0aWNreUFuY2hvck1lbnVDb250ZW50LnN0eWxlLm1hcmdpblJpZ2h0ID0gJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiBBcnJvdyBmdW5jICovXG4gICAgc3RpY2t5QW5jaG9yTWVudUxlZnRBcnJvdy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGV2ZW50ID0+IHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgc3dpcGUoJ2xlZnQnKTtcbiAgICB9KTtcbiAgICBzdGlja3lBbmNob3JNZW51UmlnaHRBcnJvdy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGV2ZW50ID0+IHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgc3dpcGUoJ3JpZ2h0Jyk7XG4gICAgfSlcblxuICAgIC8qIFRlc3QgZm9yIHZpZXBvcnQgd2lkdGggKi9cbiAgICBpZiAoc3RpY2t5QW5jaG9yTWVudSkge1xuICAgICAgICBsZXQgdGltZW91dCA9IDA7XG4gICAgICAgIGxldCBsYXN0V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcblxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoICE9PSBsYXN0V2lkdGgpIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobW9iaWxlVmVyc2lvbiwgNTApO1xuICAgICAgICAgICAgICAgIGxhc3RXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbW9iaWxlVmVyc2lvbigpO1xuICAgIH1cblxuICAgIC8qIFNjcm9sbCBQb3NpdGlvbiAqL1xuICAgIGxldCBvbGRTY3JvbGxQb3MgPSAwO1xuICAgIGxldCBuZXdTY3JvbGxQb3MgPSAwO1xuXG4gICAgLy8gYWRkaW5nIHNjcm9sbCBldmVudFxuICAgIHdpbmRvdy5hZGR
118FdmVudExpc3RlbmVyKCdzY3JvbGwnLCAoKSA9PiB7XG4gICAgICAgIG5ld1Njcm9sbFBvcyA9IHdpbmRvdy5wYWdlWU9mZnNldDtcbiAgICAgICAgaWYgKG9sZFNjcm9sbFBvcyA+IG5ld1Njcm9sbFBvcykge1xuICAgICAgICAgICAgc3RpY2t5QW5jaG9yTWVudS5zZXRBdHRyaWJ1dGUoJ2RhdGEtc2Nyb2xsLWRpcmVjdGlvbicsICd1cCcpO1xuICAgICAgICB9IGVsc2UgaWYgKG9sZFNjcm9sbFBvcyA8IG5ld1Njcm9sbFBvcykge1xuICAgICAgICAgICAgc3RpY2t5QW5jaG9yTWVudS5zZXRBdHRyaWJ1dGUoJ2RhdGEtc2Nyb2xsLWRpcmVjdGlvbicsICdkb3duJyk7XG4gICAgICAgIH1cbiAgICAgICAgb2xkU2Nyb2xsUG9zID0gbmV3U2Nyb2xsUG9zO1xuICAgICAgICBtb2JpbGVWZXJzaW9uKCk7XG5cbiAgICAgICAgY29uc3Qgc2Nyb2xsVGVzdCA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmICh3aW5kb3cuc2Nyb2xsWSA8IDEpIHtcbiAgICAgICAgICAgICAgICBzdGlja3lBbmNob3JNZW51LnNldEF0dHJpYnV0ZSgnZGF0YS1zY3JvbGwtZGlyZWN0aW9uJywgJ2Rvd24nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNjcm9sbFRpbWVvdXQgPSBzZXRUaW1lb3V0KHNjcm9sbFRlc3QsIDUwMCk7XG4gICAgICAgIHNjcm9sbFRpbWVvdXQoKTtcbiAgICB9KTtcbn1cbiIsIi8qISBjaG9pY2VzLmpzIHYxMC4xLjAgfCDCqSAyMDIyIEpvc2ggSm9obnNvbiB8IGh0dHBzOi8vZ2l0aHViLmNvbS9qc2hqb2huc29uL0Nob2ljZXMjcmVhZG1lICovXG4oZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJDaG9pY2VzXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIkNob2ljZXNcIl0gPSBmYWN0b3J5KCk7XG59KSh3aW5kb3csIGZ1bmN0aW9uKCkge1xucmV0dXJuIC8qKioqKiovIChmdW5jdGlvbigpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHRcInVzZSBzdHJpY3RcIjtcbi8qKioqKiovIFx0dmFyIF9fd2VicGFja19tb2R1bGVzX18gPSAoe1xuXG4vKioqLyAyODI6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuY2xlYXJDaG9pY2VzID0gZXhwb3J0cy5hY3RpdmF0ZUNob2ljZXMgPSBleHBvcnRzLmZpbHRlckNob2ljZXMgPSBleHBvcnRzLmFkZENob2ljZSA9IHZvaWQgMDtcblxudmFyIGNvbnN0YW50c18xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4ODMpO1xuXG52YXIgYWRkQ2hvaWNlID0gZnVuY3Rpb24gKF9hKSB7XG4gIHZhciB2YWx1ZSA9IF9hLnZhbHVlLFxuICAgICAgbGFiZWwgPSBfYS5sYWJlbCxcbiAgICAgIGlkID0gX2EuaWQsXG4gICAgICBncm91cElkID0gX2EuZ3JvdXBJZCxcbiAgICAgIGRpc2FibGVkID0gX2EuZGlzYWJsZWQsXG4gICAgICBlbGVtZW50SWQgPSBfYS5lbGVtZW50SWQsXG4gICAgICBjdXN0b21Qcm9wZXJ0aWVzID0gX2EuY3VzdG9tUHJvcGVydGllcyxcbiAgICAgIHBsYWNlaG9sZGVyID0gX2EucGxhY2Vob2xkZXIsXG4gICAgICBrZXlDb2RlID0gX2Eua2V5Q29kZTtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBjb25zdGFudHNfMS5BQ1RJT05fVFlQRVMuQUREX0NIT0lDRSxcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgbGFiZWw6IGxhYmVsLFxuICAgIGlkOiBpZCxcbiAgICBncm91cElkOiBncm91cElkLFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICBlbGVtZW50SWQ6IGVsZW1lbnRJZCxcbiAgICBjdXN0b21Qcm9wZXJ0aWVzOiBjdXN0b21Qcm9wZXJ0aWVzLFxuICAgIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlcixcbiAgICBrZXlDb2RlOiBrZXlDb2RlXG4gIH07XG59O1xuXG5leHBvcnRzLmFkZENob2ljZSA9IGFkZENob2ljZTtcblxudmFyIGZpbHRlckNob2ljZXMgPSBmdW5jdGlvbiAocmVzdWx0cykge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGNvbnN0YW50c18xLkFDVElPTl9UWVBFUy5GSUxURVJfQ0hPSUNFUyxcbiAgICByZXN1bHRzOiByZXN1bHRzXG4gIH07XG59O1xuXG5leHBvcnRzLmZpbHRlckNob2ljZXMgPSBmaWx0ZXJDaG9pY2VzO1xuXG52YXIgYWN0aXZhdGVDaG9pY2VzID0gZnVuY3Rpb24gKGFjdGl2ZSkge1xuICBpZiAoYWN0aXZlID09PSB2b2lkIDApIHtcbiAgICBhY3RpdmUgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBjb25zdGFudHNfMS5BQ1RJT05fVFlQRVMuQUNUSVZBVEVfQ0hPSUNFUyxcbiAgICBhY3RpdmU6IGFjdGl2ZVxuICB9O1xufTtcblxuZXhwb3J0cy5hY3RpdmF0ZUNob2ljZXMgPSBhY3RpdmF0ZUNob2ljZXM7XG5cbnZhciBjbGVhckNob2ljZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogY29uc3RhbnRzXzEuQUNUSU9OX1RZUEVTLkNMRUFSX0NIT0lDRVNcbiAgfTtcbn07XG5cbmV4cG9ydHMuY2xlYXJDaG9pY2VzID0gY2xlYXJDaG9pY2VzO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNzgzOlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLmFkZEdyb3VwID0gdm9pZCAwO1xuXG52YXIgY29uc3RhbnRzXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg4Myk7XG5cbnZhciBhZGRHcm91cCA9IGZ1bmN0aW9uIChfYSkge1xuICB2YXIgdmFsdWUgPSBfYS52YWx1ZSxcbiAgICAgIGl
118kID0gX2EuaWQsXG4gICAgICBhY3RpdmUgPSBfYS5hY3RpdmUsXG4gICAgICBkaXNhYmxlZCA9IF9hLmRpc2FibGVkO1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGNvbnN0YW50c18xLkFDVElPTl9UWVBFUy5BRERfR1JPVVAsXG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIGlkOiBpZCxcbiAgICBhY3RpdmU6IGFjdGl2ZSxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWRcbiAgfTtcbn07XG5cbmV4cG9ydHMuYWRkR3JvdXAgPSBhZGRHcm91cDtcblxuLyoqKi8gfSksXG5cbi8qKiovIDQ2NDpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5oaWdobGlnaHRJdGVtID0gZXhwb3J0cy5yZW1vdmVJdGVtID0gZXhwb3J0cy5hZGRJdGVtID0gdm9pZCAwO1xuXG52YXIgY29uc3RhbnRzXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg4Myk7XG5cbnZhciBhZGRJdGVtID0gZnVuY3Rpb24gKF9hKSB7XG4gIHZhciB2YWx1ZSA9IF9hLnZhbHVlLFxuICAgICAgbGFiZWwgPSBfYS5sYWJlbCxcbiAgICAgIGlkID0gX2EuaWQsXG4gICAgICBjaG9pY2VJZCA9IF9hLmNob2ljZUlkLFxuICAgICAgZ3JvdXBJZCA9IF9hLmdyb3VwSWQsXG4gICAgICBjdXN0b21Qcm9wZXJ0aWVzID0gX2EuY3VzdG9tUHJvcGVydGllcyxcbiAgICAgIHBsYWNlaG9sZGVyID0gX2EucGxhY2Vob2xkZXIsXG4gICAgICBrZXlDb2RlID0gX2Eua2V5Q29kZTtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBjb25zdGFudHNfMS5BQ1RJT05fVFlQRVMuQUREX0lURU0sXG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIGxhYmVsOiBsYWJlbCxcbiAgICBpZDogaWQsXG4gICAgY2hvaWNlSWQ6IGNob2ljZUlkLFxuICAgIGdyb3VwSWQ6IGdyb3VwSWQsXG4gICAgY3VzdG9tUHJvcGVydGllczogY3VzdG9tUHJvcGVydGllcyxcbiAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIsXG4gICAga2V5Q29kZToga2V5Q29kZVxuICB9O1xufTtcblxuZXhwb3J0cy5hZGRJdGVtID0gYWRkSXRlbTtcblxudmFyIHJlbW92ZUl0ZW0gPSBmdW5jdGlvbiAoaWQsIGNob2ljZUlkKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogY29uc3RhbnRzXzEuQUNUSU9OX1RZUEVTLlJFTU9WRV9JVEVNLFxuICAgIGlkOiBpZCxcbiAgICBjaG9pY2VJZDogY2hvaWNlSWRcbiAgfTtcbn07XG5cbmV4cG9ydHMucmVtb3ZlSXRlbSA9IHJlbW92ZUl0ZW07XG5cbnZhciBoaWdobGlnaHRJdGVtID0gZnVuY3Rpb24gKGlkLCBoaWdobGlnaHRlZCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGNvbnN0YW50c18xLkFDVElPTl9UWVBFUy5ISUdITElHSFRfSVRFTSxcbiAgICBpZDogaWQsXG4gICAgaGlnaGxpZ2h0ZWQ6IGhpZ2hsaWdodGVkXG4gIH07XG59O1xuXG5leHBvcnRzLmhpZ2hsaWdodEl0ZW0gPSBoaWdobGlnaHRJdGVtO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMTM3OlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLnNldElzTG9hZGluZyA9IGV4cG9ydHMucmVzZXRUbyA9IGV4cG9ydHMuY2xlYXJBbGwgPSB2b2lkIDA7XG5cbnZhciBjb25zdGFudHNfMSA9IF9fd2VicGFja19yZXF1aXJlX18oODgzKTtcblxudmFyIGNsZWFyQWxsID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGNvbnN0YW50c18xLkFDVElPTl9UWVBFUy5DTEVBUl9BTExcbiAgfTtcbn07XG5cbmV4cG9ydHMuY2xlYXJBbGwgPSBjbGVhckFsbDtcblxudmFyIHJlc2V0VG8gPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBjb25zdGFudHNfMS5BQ1RJT05fVFlQRVMuUkVTRVRfVE8sXG4gICAgc3RhdGU6IHN0YXRlXG4gIH07XG59O1xuXG5leHBvcnRzLnJlc2V0VG8gPSByZXNldFRvO1xuXG52YXIgc2V0SXNMb2FkaW5nID0gZnVuY3Rpb24gKGlzTG9hZGluZykge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGNvbnN0YW50c18xLkFDVElPTl9UWVBFUy5TRVRfSVNfTE9BRElORyxcbiAgICBpc0xvYWRpbmc6IGlzTG9hZGluZ1xuICB9O1xufTtcblxuZXhwb3J0cy5zZXRJc0xvYWRpbmcgPSBzZXRJc0xvYWRpbmc7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAzNzM6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXG5cbnZhciBfX3NwcmVhZEFycmF5ID0gdGhpcyAmJiB0aGlzLl9fc3ByZWFkQXJyYXkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tLCBwYWNrKSB7XG4gIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59O1xuXG52YXIgX19pbXBvcnREZWZhdWx0ID0gdGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCB8fCBmdW5jdGlvbiAobW9kKSB7XG4gIHJldHVybiBtb2QgJiYgbW9kLl9fZXNNb2R1bGUgPyBtb2QgOiB7XG4gICAgXCJkZWZhdWx0XCI6IG1vZFxuICB9O1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuXG52YXIgZGVlcG1lcmdlXzEgPSBfX2ltcG9ydERlZmF1bHQoX193ZWJwYWNrX3JlcXVpcmVfXyg5OTYpKTtcbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cblxuXG52YXIgZnVzZV9qc18xID0gX19pbXBvcnREZWZhdWx0KF9fd2VicGFja19yZXF1aXJlX18oMjIxKSk7XG5cbnZhciBjaG9pY2VzXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI4Mik7XG5cbnZhciBncm91cHNfMSA9IF9fd2VicGFja19yZXF1aXJlX18oNzgzKTtcblxudmFyIGl0ZW1zXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ2NCk7XG5cbnZhciBtaXNjXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzNyk7XG5cbnZhciBjb21wb25lbnRzXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUyMCk7XG5cbnZhciBjb25zdGFudHNfMSA9IF9fd2VicGFja19yZXF1aXJlX18oODgzKTtcblxudmFyIGRlZmF1bHRzXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc4OSk7XG5cbnZhciB1dGlsc18xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3OTkpO1xuXG52YXIgcmVkdWNlcnNfMSA9IF9fd2VicGFja19yZXF1aXJlX18oNjU1KTtcblxudmFyIHN0b3JlXzEgPSBfX2ltcG9ydERlZmF1bHQoX193ZWJwYWNrX3JlcXVpcmVfXyg3NDQpKTtcblxudmFyIHRlbXBsYXRlc18xID0gX19pbXBvcnREZWZhdWx0KF9fd2VicGFja19yZXF1aXJlX18oNjg2KSk7XG4vKiogQHNlZSB7QGxpbmsgaHR0cDovL2Jyb3dzZXJoYWNrcy5jb20vI2hhY2stYWNlYTA3NWQwYWM2OTU0ZjI3NWE3MDAyMzkwNjA1MGN9ICovXG5cblxudmFyIElTX0lFMTEgPSAnLW1zLXNjcm9sbC1saW1pdCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlICYmICctbXMtaW1lLWFsaWduJyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGU7XG52YXIgVVNFUl9ERUZBVUxUUyA9IHt9O1xuLyoqXG4gKiBDaG9pY2VzXG4gKiBAYXV0aG9yIEpvc2ggSm9obnNvbjxqb3NoQGpvc2h1YWpvaG5zb24uY28udWs+XG4gKi9cblxudmFyIENob2ljZXMgPVxuLyoqIEBjbGFzcyAqL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBDaG9pY2VzKGVsZW1lbnQsIHVzZXJDb25maWcpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgaWYgKGVsZW1lbnQgPT09IHZvaWQgMCkge1xuICAgICAgZWxlbWVudCA9ICdbZGF0YS1jaG9pY2VdJztcbiAgICB9XG5cbiAgICBpZiAodXNlckNvbmZpZyA9PT0gdm9pZCAwKSB7XG4gICAgICB1c2VyQ29uZmlnID0ge307XG4gICAgfVxuXG4gICAgaWYgKHVzZXJDb25maWcuYWxsb3dIVE1MID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybignRGVwcmVjYXRpb24gd2FybmluZzogYWxsb3dIVE1MIHdpbGwgZGVmYXVsdCB0byBmYWxzZSBpbiBhIGZ1dHVyZSByZWxlYXNlLiBUbyByZW5kZXIgSFRNTCBpbiBDaG9pY2VzLCB5b3Ugd2lsbCBuZWVkIHRvIHNldCBpdCB0byB0cnVlLiBTZXR0aW5nIGFsbG93SFRNTCB3aWxsIHN1cHByZXNzIHRoaXMgbWVzc2FnZS4nKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbmZpZyA9IGRlZXBtZXJnZV8xLmRlZmF1bHQuYWxsKFtkZWZhdWx0c18xLkRFRkFVTFRfQ09ORklHLCBDaG9pY2VzLmRlZmF1bHRzLm9wdGlvbnMsIHVzZXJDb25maWddLCAvLyBXaGVuIG1lcmdpbmcgYXJyYXkgY29uZmlncywgcmVwbGFjZSB3aXRoIGEgY29weSBvZiB0aGUgdXNlckNvbmZpZyBhcnJheSxcbiAgICAvLyBpbnN0ZWFkIG9mIGNvbmNhdGVuYXRpbmcgd2l0aCB0aGUgZGVmYXVsdCBhcnJheVxuICAgIHtcbiAgICAgIGFycmF5TWVyZ2U6IGZ1bmN0aW9uIChfLCBzb3VyY2VBcnJheSkge1xuICAgICAgICByZXR1cm4gX19zcHJlYWRBcnJheShbXSwgc291cmNlQXJyYXksIHRydWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHZhciBpbnZhbGlkQ29uZmlnT3B0aW9ucyA9ICgwLCB1dGlsc18xLmRpZmYpKHRoaXMuY29uZmlnLCBk
118ZWZhdWx0c18xLkRFRkFVTFRfQ09ORklHKTtcblxuICAgIGlmIChpbnZhbGlkQ29uZmlnT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgIGNvbnNvbGUud2FybignVW5rbm93biBjb25maWcgb3B0aW9uKHMpIHBhc3NlZCcsIGludmFsaWRDb25maWdPcHRpb25zLmpvaW4oJywgJykpO1xuICAgIH1cblxuICAgIHZhciBwYXNzZWRFbGVtZW50ID0gdHlwZW9mIGVsZW1lbnQgPT09ICdzdHJpbmcnID8gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbGVtZW50KSA6IGVsZW1lbnQ7XG5cbiAgICBpZiAoIShwYXNzZWRFbGVtZW50IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCB8fCBwYXNzZWRFbGVtZW50IGluc3RhbmNlb2YgSFRNTFNlbGVjdEVsZW1lbnQpKSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ0V4cGVjdGVkIG9uZSBvZiB0aGUgZm9sbG93aW5nIHR5cGVzIHRleHR8c2VsZWN0LW9uZXxzZWxlY3QtbXVsdGlwbGUnKTtcbiAgICB9XG5cbiAgICB0aGlzLl9pc1RleHRFbGVtZW50ID0gcGFzc2VkRWxlbWVudC50eXBlID09PSBjb25zdGFudHNfMS5URVhUX1RZUEU7XG4gICAgdGhpcy5faXNTZWxlY3RPbmVFbGVtZW50ID0gcGFzc2VkRWxlbWVudC50eXBlID09PSBjb25zdGFudHNfMS5TRUxFQ1RfT05FX1RZUEU7XG4gICAgdGhpcy5faXNTZWxlY3RNdWx0aXBsZUVsZW1lbnQgPSBwYXNzZWRFbGVtZW50LnR5cGUgPT09IGNvbnN0YW50c18xLlNFTEVDVF9NVUxUSVBMRV9UWVBFO1xuICAgIHRoaXMuX2lzU2VsZWN0RWxlbWVudCA9IHRoaXMuX2lzU2VsZWN0T25lRWxlbWVudCB8fCB0aGlzLl9pc1NlbGVjdE11bHRpcGxlRWxlbWVudDtcbiAgICB0aGlzLmNvbmZpZy5zZWFyY2hFbmFibGVkID0gdGhpcy5faXNTZWxlY3RNdWx0aXBsZUVsZW1lbnQgfHwgdGhpcy5jb25maWcuc2VhcmNoRW5hYmxlZDtcblxuICAgIGlmICghWydhdXRvJywgJ2Fsd2F5cyddLmluY2x1ZGVzKFwiXCIuY29uY2F0KHRoaXMuY29uZmlnLnJlbmRlclNlbGVjdGVkQ2hvaWNlcykpKSB7XG4gICAgICB0aGlzLmNvbmZpZy5yZW5kZXJTZWxlY3RlZENob2ljZXMgPSAnYXV0byc7XG4gICAgfVxuXG4gICAgaWYgKHVzZXJDb25maWcuYWRkSXRlbUZpbHRlciAmJiB0eXBlb2YgdXNlckNvbmZpZy5hZGRJdGVtRmlsdGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2Y
118XIgcmUgPSB1c2VyQ29uZmlnLmFkZEl0ZW1GaWx0ZXIgaW5zdGFuY2VvZiBSZWdFeHAgPyB1c2VyQ29uZmlnLmFkZEl0ZW1GaWx0ZXIgOiBuZXcgUmVnRXhwKHVzZXJDb25maWcuYWRkSXRlbUZpbHRlcik7XG4gICAgICB0aGlzLmNvbmZpZy5hZGRJdGVtRmlsdGVyID0gcmUudGVzdC5iaW5kKHJlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faXNUZXh0RWxlbWVudCkge1xuICAgICAgdGhpcy5wYXNzZWRFbGVtZW50ID0gbmV3IGNvbXBvbmVudHNfMS5XcmFwcGVkSW5wdXQoe1xuICAgICAgICBlbGVtZW50OiBwYXNzZWRFbGVtZW50LFxuICAgICAgICBjbGFzc05hbWVzOiB0aGlzLmNvbmZpZy5jbGFzc05hbWVzLFxuICAgICAgICBkZWxpbWl0ZXI6IHRoaXMuY29uZmlnLmRlbGltaXRlclxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFzc2VkRWxlbWVudCA9IG5ldyBjb21wb25lbnRzXzEuV3JhcHBlZFNlbGVjdCh7XG4gICAgICAgIGVsZW1lbnQ6IHBhc3NlZEVsZW1lbnQsXG4gICAgICAgIGNsYXNzTmFtZXM6IHRoaXMuY29uZmlnLmNsYXNzTmFtZXMsXG4gICAgICAgIHRlbXBsYXRlOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgIHJldHVybiBfdGhpcy5fdGVtcGxhdGVzLm9wdGlvbihkYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5pbml0aWFsaXNlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3N0b3JlID0gbmV3IHN0b3JlXzEuZGVmYXVsdCgpO1xuICAgIHRoaXMuX2luaXRpYWxTdGF0ZSA9IHJlZHVjZXJzXzEuZGVmYXVsdFN0YXRlO1xuICAgIHRoaXMuX2N1cnJlbnRTdGF0ZSA9IHJlZHVjZXJzXzEuZGVmYXVsdFN0YXRlO1xuICAgIHRoaXMuX3ByZXZTdGF0ZSA9IHJlZHVjZXJzXzEuZGVmYXVsdFN0YXRlO1xuICAgIHRoaXMuX2N1cnJlbnRWYWx1ZSA9ICcnO1xuICAgIHRoaXMuX2NhblNlYXJjaCA9ICEhdGhpcy5jb25maWcuc2VhcmNoRW5hYmxlZDtcbiAgICB0aGlzLl9pc1Njcm9sbGluZ09uSWUgPSBmYWxzZTtcbiAgICB0aGlzLl9oaWdobGlnaHRQb3NpdGlvbiA9IDA7XG4gICAgdGhpcy5fd2FzVGFwID0gdHJ1ZTtcbiAgICB0aGlzLl9wbGFjZWhvbGRlclZhbHVlID0gdGhpcy5fZ2VuZXJhdGVQbGFjZWhvbGRlclZhbHVlKCk7XG4gICAgdGhpcy5fYmFzZUlkID0gKDAsIHV0aWxzXzEuZ2VuZXJhdGVJZCkodGhpcy5wYXNzZWRFbGVtZW50LmVsZW1lbnQsICdjaG9pY2VzLScpO1xuICAgIC8qKlxuICAgICAqIHNldHRpbmcgZGlyZWN0aW9uIGluIGNhc2VzIHdoZXJlIGl0J3MgZXhwbGljaXRseSBzZXQgb24gcGFzc2VkRWxlbWVudFxuICAgICAqIG9yIHdoZW4gY2FsY3VsYXRlZCBkaXJlY3Rpb24gaXMgZGlmZmVyZW50IGZyb20gdGhlIGRvY3VtZW50XG4gICAgICovXG5cbiAgICB0aGlzLl9kaXJlY3Rpb24gPSB0aGlzLnBhc3NlZEVsZW1lbnQuZGlyO1xuXG4gICAgaWYgKCF0aGlzLl9kaXJlY3Rpb24pIHtcbiAgICAgIHZhciBlbGVtZW50RGlyZWN0aW9uID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5wYXNzZWRFbGVtZW50LmVsZW1lbnQpLmRpcmVjdGlvbjtcbiAgICAgIHZhciBkb2N1bWVudERpcmVjdGlvbiA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuZGlyZWN0aW9uO1xuXG4gICAgICBpZiAoZWxlbWVudERpcmVjdGlvbiAhPT0gZG9jdW1lbnREaXJlY3Rpb24pIHtcbiAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gZWxlbWVudERpcmVjdGlvbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9pZE5hbWVzID0ge1xuICAgICAgaXRlbUNob2ljZTogJ2l0ZW0tY2hvaWNlJ1xuICAgIH07XG5cbiAgICBpZiAodGhpcy5faXNTZWxlY3RFbGVtZW50KSB7XG4gICAgICAvLyBBc3NpZ24gcHJlc2V0IGdyb3VwcyBmcm9tIHBhc3NlZCBlbGVtZW50XG4gICAgICB0aGlzLl9wcmVzZXRHcm91cHMgPSB0aGlzLnBhc3NlZEVsZW1lbnQub3B0aW9uR3JvdXBzOyAvLyBBc3NpZ24gcHJlc2V0IG9wdGlvbnMgZnJvbSBwYXNzZWQgZWxlbWVudFxuXG4gICAgICB0aGlzLl9wcmVzZXRPcHRpb25zID0gdGhpcy5wYXNzZWRFbGVtZW50Lm9wdGlvbnM7XG4gICAgfSAvLyBBc3NpZ24gcHJlc2V0IGNob2ljZXMgZnJvbSBwYXNzZWQgb2JqZWN0XG5cblxuICAgIHRoaXMuX3ByZXNldENob2ljZXMgPSB0aGlzLmNvbmZpZy5jaG9pY2VzOyAvLyBBc3NpZ24gcHJlc2V0IGl0ZW1zIGZyb20gcGFzc2VkIG9iamVjdCBmaXJzdFxuXG4gICAgdGhpcy5fcHJlc2V0SXRlbXMgPSB0aGlzLmNvbmZpZy5pdGVtczsgLy8gQWRkIGFueSB2YWx1ZXMgcGFzc2VkIGZyb20gYXR0cmlidXRlXG5cbiAgICBpZiAodGhpcy5wYXNzZWRFbGVtZW50LnZhbHVlICYmIHRoaXMuX2lzVGV4dEVsZW1lbnQpIHtcbiAgICAgIHZhciBzcGxpdFZhbHVlcyA9IHRoaXMucGFzc2VkRWxlbWVudC52YWx1ZS
1185zcGxpdCh0aGlzLmNvbmZpZy5kZWxpbWl0ZXIpO1xuICAgICAgdGhpcy5fcHJlc2V0SXRlbXMgPSB0aGlzLl9wcmVzZXRJdGVtcy5jb25jYXQoc3BsaXRWYWx1ZXMpO1xuICAgIH0gLy8gQ3JlYXRlIGFycmF5IG9mIGNob2ljZXMgZnJvbSBvcHRpb24gZWxlbWVudHNcblxuXG4gICAgaWYgKHRoaXMucGFzc2VkRWxlbWVudC5vcHRpb25zKSB7XG4gICAgICB0aGlzLnBhc3NlZEVsZW1lbnQub3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgX3RoaXMuX3ByZXNldENob2ljZXMucHVzaCh7XG4gICAgICAgICAgdmFsdWU6IG9wdGlvbi52YWx1ZSxcbiAgICAgICAgICBsYWJlbDogb3B0aW9uLmlubmVySFRNTCxcbiAgICAgICAgICBzZWxlY3RlZDogISFvcHRpb24uc2VsZWN0ZWQsXG4gICAgICAgICAgZGlzYWJsZWQ6IG9wdGlvbi5kaXNhYmxlZCB8fCBvcHRpb24ucGFyZW50Tm9kZS5kaXNhYmxlZCxcbiAgICAgICAgICBwbGFjZWhvbGRlcjogb3B0aW9uLnZhbHVlID09PSAnJyB8fCBvcHRpb24uaGFzQXR0cmlidXRlKCdwbGFjZWhvbGRlcicpLFxuICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXM6IG9wdGlvbi5kYXRhc2V0WydjdXN0b20tcHJvcGVydGllcyddXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVuZGVyID0gdGhpcy5fcmVuZGVyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fb25Gb2N1cyA9IHRoaXMuX29uRm9jdXMuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9vbkJsdXIgPSB0aGlzLl9vbkJsdXIuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9vbktleVVwID0gdGhpcy5fb25LZXlVcC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX29uS2V5RG93biA9IHRoaXMuX29uS2V5RG93bi5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX29uQ2xpY2sgPSB0aGlzLl9vbkNsaWNrLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fb25Ub3VjaE1vdmUgPSB0aGlzLl9vblRvdWNoTW92ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX29uVG91Y2hFbmQgPSB0aGlzLl9vblRvdWNoRW5kLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fb25Nb3VzZURvd24gPSB0aGlzLl9vbk1vdXNlRG93bi5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX29uTW91c2VPdmVyID0gdGhpcy5fb25Nb3VzZU92ZXIuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9vbkZvcm1SZXNldCA9IHRoaXMuX29uRm9ybVJlc2V0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5fb25TZWxlY3RLZXkgPSB0aGlzLl9vblNlbGVjdEtleS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX29uRW50ZXJLZXkgPSB0aGlzLl9vbkVudGVyS2V5LmJpbmQodGhpcyk7XG4gICAgdGhpcy5fb25Fc2NhcGVLZXkgPSB0aGlzLl9vbkVzY2FwZUtleS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX29uRGlyZWN0aW9uS2V5ID0gdGhpcy5fb25EaXJlY3Rpb25LZXkuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9vbkRlbGV0ZUtleSA9IHRoaXMuX29uRGVsZXRlS2V5LmJpbmQodGhpcyk7IC8vIElmIGVsZW1lbnQgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXNlZCB3aXRoIENob2ljZXMsIGZhaWwgc2lsZW50bHlcblxuICAgIGlmICh0aGlzLnBhc3NlZEVsZW1lbnQuaXNBY3RpdmUpIHtcbiAgICAgIGlmICghdGhpcy5jb25maWcuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUud2FybignVHJ5aW5nIHRvIGluaXRpYWxpc2UgQ2hvaWNlcyBvbiBlbGVtZW50IGFscmVhZHkgaW5pdGlhbGlzZWQnLCB7XG4gICAgICAgICAgZWxlbWVudDogZWxlbWVudFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pbml0aWFsaXNlZCA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBMZXQncyBnb1xuXG5cbiAgICB0aGlzLmluaXQoKTtcbiAgfVxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDaG9pY2VzLCBcImRlZmF1bHRzXCIsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe1xuICAgICAgICBnZXQgb3B0aW9ucygpIHtcbiAgICAgICAgICByZXR1cm4gVVNFUl9ERUZBVUxUUztcbiAgICAgICAgfSxcblxuICAgICAgICBnZXQgdGVtcGxhdGVzKCkge1xuICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZXNfMS5kZWZhdWx0O1xuICAgICAgICB9XG5cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xuXG4gIENob2ljZXMucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMuaW5pdGlhbGlzZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9jcmVhdGVUZW1wbGF0ZXMoKTtcblxuICAgIHRoaXMuX2NyZWF0ZUVsZW1lbnRzKCk7XG5cbiAgICB0aGlzLl9jcmVhdGVTdHJ1Y3R1cmUoKTtcblxuICAgIHRoaXMuX3N0b3JlLnN1YnNjcmliZSh0aGlzLl9yZW5kZXIpO1xuXG4gICAgdGhpcy5fcmVuZGVyKCk7XG5cbiAgICB0aGlzLl9hZGRFdmVudExpc3RlbmVycygpO1xuXG4gICAgdmFyIHNob3VsZERpc2FibGUgPSAhdGhpcy5jb25maWcuYWRkSXRlbXMgfHwgdGhpcy5wYXNzZWRFbGVtZW50LmVsZW1lbnQuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xuXG4gICAgaWYgKHNob3VsZERpc2FibGUpIHtcbiAgICAgIHRoaXMuZGlzYWJsZSgpO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdGlhbGlzZWQgPSB0cnVlO1xuICAgIHZhciBjYWxsYmFja09uSW5pdCA9IHRoaXMuY29uZmlnLmNhbGxiYWNrT25Jbml0OyAvLyBSdW4gY2FsbGJhY2sgaWYgaXQgaXMgYSBmdW5jdGlvblxuXG4gICAgaWYgKGNhbGxiYWNrT25Jbml0ICYmIHR5cGVvZiBjYWxsYmFja09uSW5pdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY2FsbGJhY2tPbkluaXQuY2FsbCh0aGlzKTtcbiAgICB9XG4gIH07XG5cbiAgQ2hvaWNlcy5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuaW5pdGlhbGlzZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9yZW1vdmVFdmVudExpc3RlbmVycygpO1xuXG4gICAgdGhpcy5wYXNzZWRFbGVtZW50LnJldmVhbCgpO1xuICAgIHRoaXMuY29udGFpbmVyT3V0ZXIudW53cmFwKHRoaXMucGFzc2VkRWxlbWVudC5lbGVtZW50KTtcbiAgICB0aGlzLmNsZWFyU3RvcmUoKTtcblxuICAgIGlmICh0aGlzLl9pc1NlbGVjdEVsZW1lbnQpIHtcbiAgICAgIHRoaXMucGFzc2VkRWxlbWVudC5vcHRpb25zID0gdGhpcy5fcHJlc2V0T3B0aW9ucztcbiAgICB9XG5cbiAgICB0aGlzLl90ZW1wbGF0ZXMgPSB0ZW1wbGF0ZXNfMS5kZWZh
118dWx0O1xuICAgIHRoaXMuaW5pdGlhbGlzZWQgPSBmYWxzZTtcbiAgfTtcblxuICBDaG9pY2VzLnByb3RvdHlwZS5lbmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMucGFzc2VkRWxlbWVudC5pc0Rpc2FibGVkKSB7XG4gICAgICB0aGlzLnBhc3NlZEVsZW1lbnQuZW5hYmxlKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29udGFpbmVyT3V0ZXIuaXNEaXNhYmxlZCkge1xuICAgICAgdGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnMoKTtcblxuICAgICAgdGhpcy5pbnB1dC5lbmFibGUoKTtcbiAgICAgIHRoaXMuY29udGFpbmVyT3V0ZXIuZW5hYmxlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQ2hvaWNlcy5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMucGFzc2VkRWxlbWVudC5pc0Rpc2FibGVkKSB7XG4gICAgICB0aGlzLnBhc3NlZEVsZW1lbnQuZGlzYWJsZSgpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jb250YWluZXJPdXRlci5pc0Rpc2FibGVkKSB7XG4gICAgICB0aGlzLl9yZW1vdmVFdmVudExpc3RlbmVycygpO1xuXG4gICAgICB0aGlzLmlucHV0LmRpc2FibGUoKTtcbiAgICAgIHRoaXMuY29udGFpbmVyT3V0ZXIuZGlzYWJsZSgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIENob2ljZXMucHJvdG90eXBlLmhpZ2hsaWdodEl0ZW0gPSBmdW5jdGlvbiAoaXRlbSwgcnVuRXZlbnQpIHtcbiAgICBpZiAocnVuRXZlbnQgPT09IHZvaWQgMCkge1xuICAgICAgcnVuRXZlbnQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICghaXRlbSB8fCAhaXRlbS5pZCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIGlkID0gaXRlbS5pZCxcbiAgICAgICAgX2EgPSBpdGVtLmdyb3VwSWQsXG4gICAgICAgIGdyb3VwSWQgPSBfYSA9PT0gdm9pZCAwID8gLTEgOiBfYSxcbiAgICAgICAgX2IgPSBpdGVtLnZhbHVlLFxuICAgICAgICB2YWx1ZSA9IF9iID09PSB2b2lkIDAgPyAnJyA6IF9iLFxuICAgICAgICBfYyA9IGl0ZW0ubGFiZWwsXG4gICAgICAgIGxhYmVsID0gX2MgPT09IHZvaWQgMCA/ICcnIDogX2M7XG4gICAgdmFyIGdyb3VwID0gZ3JvdXBJZCA+PSAwID8gdGhpcy5fc3RvcmUuZ2V0R3JvdXBCeUlkKGdyb3VwSWQpIDogbnVsbDtcblxuICAgIHRoaXMuX3N0b3JlLmRpc3BhdGNoKCgwLCBpdGVtc18xLmhpZ2hsaWdodEl0ZW0pKGlkLCB0cnVlKSk7XG5cbiAgICBpZiAocnVuRXZlbnQpIHtcbiAgICAgIHRoaXMucGFzc2VkRWxlbWVudC50cmlnZ2VyRXZlbnQoY29uc3RhbnRzXzEuRVZFTlRTLmhpZ2hsaWdodEl0ZW0sIHtcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGxhYmVsOiBsYWJlbCxcbiAgICAgICAgZ3JvdXBWYWx1ZTogZ3JvdXAgJiYgZ3JvdXAudmFsdWUgPyBncm91cC52YWx1ZSA6IG51bGxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIENob2ljZXMucHJvdG90eXBlLnVuaGlnaGxpZ2h0SXRlbSA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgaWYgKCFpdGVtIHx8ICFpdGVtLmlkKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgaWQgPSBpdGVtLmlkLFxuICAgICAgICBfYSA9IGl0ZW0uZ3JvdXBJZCxcbiAgICAgICAgZ3JvdXBJZCA9IF9hID09PSB2b2lkIDAgPyAtMSA6IF9hLFxuICAgICAgICBfYiA9IGl0ZW0udmFsdWUsXG4gICAgICAgIHZhbHVlID0gX2IgPT09IHZvaWQgMCA/ICcnIDogX2IsXG4gICAgICAgIF9jID0gaXRlbS5sYWJlbCxcbiAgICAgICAgbGFiZWwgPSBfYyA9PT0gdm9pZCAwID8gJycgOiBfYztcbiAgICB2YXIgZ3JvdXAgPSBncm91cElkID49IDAgPyB0aGlzLl9zdG9yZS5nZXRHcm91cEJ5SWQoZ3JvdXBJZCkgOiBudWxsO1xuXG4gICAgdGhpcy5fc3RvcmUuZGlzcGF0Y2goKDAsIGl0ZW1zXzEuaGlnaGxpZ2h0SXRlbSkoaWQsIGZhbHNlKSk7XG5cbiAgICB0aGlzLnBhc3NlZEVsZW1lbnQudHJpZ2dlckV2ZW50KGNvbnN0YW50c18xLkVWRU5UUy5oaWdobGlnaHRJdGVtLCB7XG4gICAgICBpZDogaWQsXG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBsYWJlbDogbGFiZWwsXG4gICAgICBncm91cFZhbHVlOiBncm91cCAmJiBncm91cC52YWx1ZSA/IGdyb3VwLnZhbHVlIDogbnVsbFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIENob2ljZXMucHJvdG90eXBlLmhpZ2hsaWdodEFsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy5fc3RvcmUuaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIF90aGlzLmhpZ2hsaWdodEl0ZW0oaXRlbSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBDaG9pY2VzLnByb3RvdHlwZS51bmhpZ2hsaWdodEFsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy5fc3RvcmUuaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIF90aGlzLnVuaGlnaGxpZ2h0SXRlbShpdGVtKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIENob2ljZXMucHJvdG90eXBlLnJlbW92ZUFjdGl2ZUl0ZW1zQnlWYWx1ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLl9zdG9yZS5hY3RpdmVJdGVtcy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtLnZhbHVlID09PSB2YWx1ZTtcbiAgICB9KS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gX3RoaXMuX3JlbW92ZUl0ZW0oaXRlbSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBDaG9pY2VzLnByb3RvdHlwZS5yZW1vdmVBY3RpdmVJdGVtcyA9IGZ1bmN0aW9uIChleGNsdWRlZElkKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuX3N0b3JlLmFjdGl2ZUl0ZW1zLmZpbHRlcihmdW5jdGlvbiAoX2EpIHtcbiAgICAgIHZhciBpZCA9IF9hLmlkO1xuICAgICAgcmV0dXJuIGlkICE9PSBleGNsdWRlZElkO1xuICAgIH0pLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybi
118BfdGhpcy5fcmVtb3ZlSXRlbShpdGVtKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIENob2ljZXMucHJvdG90eXBlLnJlbW92ZUhpZ2hsaWdodGVkSXRlbXMgPSBmdW5jdGlvbiAocnVuRXZlbnQpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgaWYgKHJ1bkV2ZW50ID09PSB2b2lkIDApIHtcbiAgICAgIHJ1bkV2ZW50ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5fc3RvcmUuaGlnaGxpZ2h0ZWRBY3RpdmVJdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICBfdGhpcy5fcmVtb3ZlSXRlbShpdGVtKTsgLy8gSWYgdGhpcyBhY3Rpb24gd2FzIHBlcmZvcm1lZCBieSB0aGUgdXNlclxuICAgICAgLy8gdHJpZ2dlciB0aGUgZXZlbnRcblxuXG4gICAgICBpZiAocnVuRXZlbnQpIHtcbiAgICAgICAgX3RoaXMuX3RyaWdnZXJDaGFuZ2UoaXRlbS52YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBDaG9pY2VzLnByb3RvdHlwZS5zaG93RHJvcGRvd24gPSBmdW5jdGlvbiAocHJldmVudElucHV0Rm9jdXMpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgaWYgKHRoaXMuZHJvcGRvd24uaXNBY3RpdmUpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5kcm9wZG93bi5zaG93KCk7XG5cbiAgICAgIF90aGlzLmNvbnRhaW5lck91dGVyLm9wZW4oX3RoaXMuZHJvcGRvd24uZGlzdGFuY2VGcm9tVG9wV2luZG93KTtcblxuICAgICAgaWYgKCFwcmV2ZW50SW5wdXRGb2N1cyAmJiBfdGhpcy5fY2FuU2VhcmNoKSB7XG4gICAgICAgIF90aGlzLmlucHV0LmZvY3VzKCk7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnBhc3NlZEVsZW1lbnQudHJpZ2dlckV2ZW50KGNvbnN0YW50c18xLkVWRU5UUy5zaG93RHJvcGRvd24sIHt9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBDaG9pY2VzLnByb3RvdHlwZS5oaWRlRHJvcGRvd24gPSBmdW5jdGlvbiAocHJldmVudElucHV0Qmx1cikge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBpZiAoIXRoaXMuZHJvcGRvd24uaXNBY3RpdmUpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5kcm9wZG93bi5oaWRlKCk7XG5cbiAgICAgIF90aGlzLmNvbnRhaW5lck91dGVyLmNsb3NlKCk7XG5cbiAgICAgIGlmICghcHJldmVudElucHV0Qmx1ciAmJiBfdGhpcy5fY2FuU2VhcmNoKSB7XG4gICAgICAgIF90aGlzLmlucHV0LnJlbW92ZUFjdGl2ZURlc2NlbmRhbnQoKTtcblxuICAgICAgICBfdGhpcy5pbnB1dC5ibHVyKCk7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnBhc3NlZEVsZW1lbnQudHJpZ2dlckV2ZW50KGNvbnN0YW50c18xLkVWRU5UUy5oaWRlRHJvcGRvd24sIHt9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBDaG9pY2VzLnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uICh2YWx1ZU9ubHkpIHtcbiAgICBpZiAodmFsdWVPbmx5ID09PSB2b2lkIDApIHtcbiAgICAgIHZhbHVlT25seSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHZhciB2YWx1ZXMgPSB0aGlzLl9zdG9yZS5hY3RpdmVJdGVtcy5yZWR1Y2UoZnVuY3Rpb24gKHNlbGVjdGVkSXRlbXMsIGl0ZW0pIHtcbiAgICAgIHZhciBpdGVtVmFsdWUgPSB2YWx1ZU9ubHkgPyBpdGVtLnZhbHVlIDogaXRlbTtcbiAgICAgIHNlbGVjdGVkSXRlbXMucHVzaChpdGVtVmFsdWUpO1xuICAgICAgcmV0dXJuIHNlbGVjdGVkSXRlbXM7XG4gICAgfSwgW10pO1xuXG4gICAgcmV0dXJuIHRoaXMuX2lzU2VsZWN0T25lRWxlbWVudCA/IHZhbHVlc1swXSA6IHZhbHVlcztcbiAgfTtcblxuICBDaG9pY2VzLnByb3RvdHlwZS5zZXRWYWx1ZSA9IGZ1bmN0aW9uIChpdGVtcykge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBpZiAoIXRoaXMuaW5pdGlhbGlzZWQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICByZXR1cm4gX3RoaXMuX3NldENob2ljZU9ySXRlbSh2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQ2hvaWNlcy5wcm90b3R5cGUuc2V0Q2hvaWNlQnlWYWx1ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBpZiAoIXRoaXMuaW5pdGlhbGlzZWQgfHwgdGhpcy5faXNUZXh0RWxlbWVudCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSAvLyBJZiBvbmx5IG9uZSB2YWx1ZSBoYXMgYmVlbiBwYXNzZWQsIGNvbnZlcnQgdG8gYXJyYXlcblxuXG4gICAgdmFyIGNob2ljZVZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07IC8vIExvb3AgdGhyb3VnaCBlYWNoIHZhbHVlIGFuZFxuXG4gICAgY2hvaWNlVmFsdWUuZm9yRWFjaChmdW5jdGlvbiAodmFsKSB7XG4gICAgICByZXR1cm4gX3RoaXMuX2ZpbmRBbmRTZWxlY3RDaG9pY2VCeVZhbHVlKHZhbCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBTZXQgY2hvaWNlcyBvZiBzZWxlY3QgaW5wdXQgdmlhIGFuIGFycmF5IG9mIG9iamVjdHMgKG9yIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhcnJheSBvZiBvYmplY3Qgb3IgcHJvbWlzZSBvZiBpdCksXG4gICAqIGEgdmFsdWUgZmllbGQgbmFtZSBhbmQgYSBsYWJlbCBmaWVsZCBuYW1lLlxuICAgKiBUaGlzIGJlaGF2ZXMgdGhlIHNhbWUgYXMgcGFzc2luZyBpdGVtcyB2aWEgdGhlIGNob2ljZXMgb3B0aW9uIGJ1dCBjYW4gYmUgY2FsbGVkIGFmdGVyIGluaXRpYWxpc2luZyBDaG9pY2VzLlxuICAgKiBUaGlzIGNhbiBhbHNvIGJlIHVzZWQgdG8gYWRkIGdyb3VwcyBvZiBjaG9pY2VzIChzZWUgZXhhbXBsZSAyKTsgT3B0aW9uYWxseSBwYXNzIGEgdHJ1ZSBgcmVwbGFjZUNob2ljZXNgIHZhbHVlIHRvIHJlbW92ZSBhbnkgZXhpc3RpbmcgY2hvaWNlcy5cbiAgICogT3B0aW9uYWxseSBwYXNzIGEgYGN1c3RvbVByb3BlcnRpZXNgIG9iamVjdCB0byBhZGQgYWRkaXRpb25hbCBkYXRhIHRvIHlvdXIgY2hvaWNlcyAodXNlZnVsIHdoZW4gc2VhcmNoaW5nL2ZpbHRlcmluZyBldGMpLlxuICAgKlxuICAgKiAqKklu
118cHV0IHR5cGVzIGFmZmVjdGVkOioqIHNlbGVjdC1vbmUsIHNlbGVjdC1tdWx0aXBsZVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBqc1xuICAgKiBjb25zdCBleGFtcGxlID0gbmV3IENob2ljZXMoZWxlbWVudCk7XG4gICAqXG4gICAqIGV4YW1wbGUuc2V0Q2hvaWNlcyhbXG4gICAqICAge3ZhbHVlOiAnT25lJywgbGFiZWw6ICdMYWJlbCBPbmUnLCBkaXNhYmxlZDogdHJ1ZX0sXG4gICAqICAge3ZhbHVlOiAnVHdvJywgbGFiZWw6ICdMYWJlbCBUd28nLCBzZWxlY3RlZDogdHJ1ZX0sXG4gICAqICAge3ZhbHVlOiAnVGhyZWUnLCBsYWJlbDogJ0xhYmVsIFRocmVlJ30sXG4gICAqIF0sICd2YWx1ZScsICdsYWJlbCcsIGZhbHNlKTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYGpzXG4gICAqIGNvbnN0IGV4YW1wbGUgPSBuZXcgQ2hvaWNlcyhlbGVtZW50KTtcbiAgICpcbiAgICogZXhhbXBsZS5zZXRDaG9pY2VzKGFzeW5jICgpID0+IHtcbiAgICogICB0cnkge1xuICAgKiAgICAgIGNvbnN0IGl0ZW1zID0gYXdhaXQgZmV0Y2goJy9pdGVtcycpO1xuICAgKiAgICAgIHJldHVybiBpdGVtcy5qc29uKClcbiAgICogICB9IGNhdGNoKGVycikge1xuICAgKiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgKiAgIH1cbiAgICogfSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBqc1xuICAgKiBjb25zdCBleGFtcGxlID0gbmV3IENob2ljZXMoZWxlbWVudCk7XG4gICAqXG4gICAqIGV4YW1wbGUuc2V0Q2hvaWNlcyhbe1xuICAgKiAgIGxhYmVsOiAnR3JvdXAgb25lJyxcbiAgICogICBpZDogMSxcbiAgICogICBkaXNhYmxlZDogZmFsc2UsXG4gICAqICAgY2hvaWNlczogW1xuICAgKiAgICAge3ZhbHVlOiAnQ2hpbGQgT25lJywgbGFiZWw6ICdDaGlsZCBPbmUnLCBzZWxlY3RlZDogdHJ1ZX0sXG4gICAqICAgICB7dmFsdWU6ICdDaGlsZCBUd28nLCBsYWJlbDogJ0NoaWxkIFR3bycsICBkaXNhYmxlZDogdHJ1ZX0sXG4gICAqICAgICB7dmFsdWU6ICdDaGlsZCBUaHJlZScsIGxhYmVsOiAnQ2hpbGQgVGhyZWUnfSxcbiAgICogICBdXG4gICAqIH0sXG4gICAqIHtcbiAgICogICBsYWJlbDogJ0dyb3VwIHR3bycsXG4gICAqICAgaWQ6IDIsXG4gICAqICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgKiAgIGNob2ljZXM6IFtcbiAgICogICAgIHt2YWx1ZTogJ0NoaWxkIEZvdXInLCBsYWJlbDogJ0NoaWxkIEZvdXInLCBkaXNhYmxlZDogdHJ1ZX0sXG4gICAqICAgICB7dmFsdWU6ICdDaGlsZCBGaXZlJywgbGFiZWw6ICdDaGlsZCBGaXZlJ30sXG4gICAqICAgICB7dmFsdWU6ICdDaGlsZCBTaXgnLCBsYWJlbDogJ0NoaWxkIFNpeCcsIGN1c3RvbVByb3BlcnRpZXM6IHtcbiAgICogICAgICAgZGVzY3JpcHRpb246ICdDdXN0b20gZGVzY3JpcHRpb24gYWJvdXQgY2hpbGQgc2l4JyxcbiAgICogICAgICAgcmFuZG9tOiAnQW5vdGhlciByYW5kb20gY3VzdG9tIHByb3BlcnR5J1xuICAgKiAgICAgfX0sXG4gICAqICAgXVxuICAgKiB9XSwgJ3ZhbHVlJywgJ2xhYmVsJywgZmFsc2UpO1xuICAgKiBgYGBcbiAgICovXG5cblxuICBDaG9pY2VzLnByb3RvdHlwZS5zZXRDaG9pY2VzID0gZnVuY3Rpb24gKGNob2ljZXNBcnJheU9yRmV0Y2hlciwgdmFsdWUsIGxhYmVsLCByZXBsYWNlQ2hvaWNlcykge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBpZiAoY2hvaWNlc0FycmF5T3JGZXRjaGVyID09PSB2b2lkIDApIHtcbiAgICAgIGNob2ljZXNBcnJheU9yRmV0Y2hlciA9IFtdO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSB7XG4gICAgICB2YWx1ZSA9ICd2YWx1ZSc7XG4gICAgfVxuXG4gICAgaWYgKGxhYmVsID09PSB2b2lkIDApIHtcbiAgICAgIGxhYmVsID0gJ2xhYmVsJztcbiAgICB9XG5cbiAgICBpZiAocmVwbGFjZUNob2ljZXMgPT09IHZvaWQgMCkge1xuICAgICAgcmVwbGFjZUNob2ljZXMgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaW5pdGlhbGlzZWQpIHtcbiAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInNldENob2ljZXMgd2FzIGNhbGxlZCBvbiBhIG5vbi1pbml0aWFsaXplZCBpbnN0YW5jZSBvZiBDaG9pY2VzXCIpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5faXNTZWxlY3RFbGVtZW50KSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwic2V0Q2hvaWNlcyBjYW4ndCBiZSB1c2VkIHdpdGggSU5QVVQgYmFzZWQgQ2hvaWNlc1wiKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyB8fCAhdmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWx1ZSBwYXJhbWV0ZXIgbXVzdCBiZSBhIG5hbWUgb2YgJ3ZhbHVlJyBmaWVsZCBpbiBwYXNzZWQgb2JqZWN0c1wiKTtcbiAgICB9IC8vIENsZWFyIGNob2ljZXMgaWYgbmVlZGVkXG5cblxuICAgIGlmIChyZXBsYWNlQ2hvaWNlcykge1xuICAgICAgdGhpcy5jbGVhckNob2ljZXMoKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNob2ljZXNBcnJheU9yRmV0Y2hlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gaXQncyBhIGNob2ljZXMgZmV0Y2hlciBmdW5jdGlvblxuICAgICAgdmFyIGZldGNoZXJfMSA9IGNob2ljZXNBcnJheU9yRmV0Y2hlcih0aGlzKTtcblxuICAgICAgaWYgKHR5cGVvZiBQcm9taXNlID09PSAnZnVuY3Rpb24nICYmIGZldGNoZXJfMSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgLy8gdGhhdCdzIGEgcHJvbWlzZVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvbWlzZS1leGVjdXRvci1yZXR1cm5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgcmV0dXJuIHJlcXVlc3RBbmltYXRpb25GcmFtZShyZXNvbHZlKTtcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzLl9oYW5kbGVMb2FkaW5nU3RhdGUodHJ1ZSk7XG4gICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBmZXRjaGVyXzE7XG4gICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMuc2V0Q2hvaWNlcyhkYXRhLCB2YWx1ZSwgbGFiZWwsIHJlcGxhY2VDaG9pY2VzKTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgIGlmICghX3RoaXMuY29uZmlnLnNpbGVudCkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgI
118H1cbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzLl9oYW5kbGVMb2FkaW5nU3RhdGUoZmFsc2UpO1xuICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgICAgIH0pO1xuICAgICAgfSAvLyBmdW5jdGlvbiByZXR1cm5lZCBzb21ldGhpbmcgZWxzZSB0aGFuIHByb21pc2UsIGxldCdzIGNoZWNrIGlmIGl0J3MgYW4gYXJyYXkgb2YgY2hvaWNlc1xuXG5cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShmZXRjaGVyXzEpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCIuc2V0Q2hvaWNlcyBmaXJzdCBhcmd1bWVudCBmdW5jdGlvbiBtdXN0IHJldHVybiBlaXRoZXIgYXJyYXkgb2YgY2hvaWNlcyBvciBQcm9taXNlLCBnb3Q6IFwiLmNvbmNhdCh0eXBlb2YgZmV0Y2hlcl8xKSk7XG4gICAgICB9IC8vIHJlY3Vyc2lvbiB3aXRoIHJlc3VsdHMsIGl0J3Mgc3luYyBhbmQgY2hvaWNlcyB3ZXJlIGNsZWFyZWQgYWxyZWFkeVxuXG5cbiAgICAgIHJldHVybiB0aGlzLnNldENob2ljZXMoZmV0Y2hlcl8xLCB2YWx1ZSwgbGFiZWwsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2hvaWNlc0FycmF5T3JGZXRjaGVyKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIi5zZXRDaG9pY2VzIG11c3QgYmUgY2FsbGVkIGVpdGhlciB3aXRoIGFycmF5IG9mIGNob2ljZXMgd2l0aCBhIGZ1bmN0aW9uIHJlc3VsdGluZyBpbnRvIFByb21pc2Ugb2YgYXJyYXkgb2YgY2hvaWNlc1wiKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRhaW5lck91dGVyLnJlbW92ZUxvYWRpbmdTdGF0ZSgpO1xuXG4gICAgdGhpcy5fc3RhcnRMb2FkaW5nKCk7XG5cbiAgICBjaG9pY2VzQXJyYXlPckZldGNoZXIuZm9yRWFjaChmdW5jdGlvbiAoZ3JvdXBPckNob2ljZSkge1xuICAgICAgaWYgKGdyb3VwT3JDaG9pY2UuY2hvaWNlcykge1xuICAgICAgICBfdGhpcy5fYWRkR3JvdXAoe1xuICAgICAgICAgIGlkOiBncm91cE9yQ2hvaWNlLmlkID8gcGFyc2VJbnQoXCJcIi5jb25jYXQoZ3JvdXBPckNob2ljZS5pZCksIDEwKSA6IG51bGwsXG4gICAgICAgICAgZ3JvdXA6IGdyb3VwT3JDaG9pY2UsXG4gICAgICAgICAgdmFsdWVLZXk6IHZhbHVlLFxuICAgICAgICAgIGxhYmVsS2V5OiBsYWJlbFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBjaG9pY2UgPSBncm91cE9yQ2hvaWNlO1xuXG4gICAgICAgIF90aGlzLl9hZGRDaG9pY2Uoe1xuICAgICAgICAgIHZhbHVlOiBjaG9pY2VbdmFsdWVdLFxuICAgICAgICAgIGxhYmVsOiBjaG9pY2VbbGFiZWxdLFxuICAgICAgICAgIGlzU2VsZWN0ZWQ6ICEhY2hvaWNlLnNlbGVjdGVkLFxuICAgICAgICAgIGlzRGlzYWJsZWQ6ICEhY2hvaWNlLmRpc2FibGVkLFxuICAgICAgICAgIHBsYWNlaG9sZGVyOiAhIWNob2ljZS5wbGFjZWhvbGRlcixcbiAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzOiBjaG9pY2UuY3VzdG9tUHJvcGVydGllc1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuX3N0b3BMb2FkaW5nKCk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBDaG9pY2VzLnByb3RvdHlwZS5jbGVhckNob2ljZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5fc3RvcmUuZGlzcGF0Y2goKDAsIGNob2ljZXNfMS5jbGVhckNob2ljZXMpKCkpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQ2hvaWNlcy5wcm90b3R5cGUuY2xlYXJTdG9yZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLl9zdG9yZS5kaXNwYXRjaCgoMCwgbWlzY18xLmNsZWFyQWxsKSgpKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIENob2ljZXMucHJvdG90eXBlLmNsZWFySW5wdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNob3VsZFNldElucHV0V2lkdGggPSAhdGhpcy5faXNTZWxlY3RPbmVFbGVtZW50O1xuICAgIHRoaXMuaW5wdXQuY2xlYXIoc2hvdWxkU2V0SW5wdXRXaWR0aCk7XG5cbiAgICBpZiAoIXRoaXMuX2lzVGV4dEVsZW1lbnQgJiYgdGhpcy5fY2FuU2VhcmNoKSB7XG4gICAgICB0aGlzLl9pc1NlYXJjaGluZyA9IGZhbHNlO1xuXG4gICAgICB0aGlzLl9zdG9yZS5kaXNwYXRjaCgoMCwgY2hvaWNlc18xLmFjdGl2YXRlQ2hvaWNlcykodHJ1ZSkpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIENob2ljZXMucHJvdG90eXBlLl9yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMuX3N0b3JlLmlzTG9hZGluZygpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fY3VycmVudFN0YXRlID0gdGhpcy5fc3RvcmUuc3RhdGU7XG4gICAgdmFyIHN0YXRlQ2hhbmdlZCA9IHRoaXMuX2N1cnJlbnRTdGF0ZS5jaG9pY2VzICE9PSB0aGlzLl9wcmV2U3RhdGUuY2hvaWNlcyB8fCB0aGlzLl9jdXJyZW50U3RhdGUuZ3JvdXBzICE9PSB0aGlzLl9wcmV2U3RhdGUuZ3JvdXBzIHx8IHRoaXMuX2N1cnJlbnRTdGF0ZS5pdGVtcyAhPT0gdGhpcy5fcHJldlN0YXRlLml0ZW1zO1xuICAgIHZhciBzaG91bGRSZW5kZXJDaG9pY2VzID0gdGhpcy5faXNTZWxlY3RFbGVtZW50O1xuICAgIHZhciBzaG91bGRSZW5kZXJJdGVtcyA9IHRoaXMuX2N1cnJlbnRTdGF0ZS5pdGVtcyAhPT0gdGhpcy5fcHJldlN0YXRlLml0ZW1zO1xuXG4gICAgaWYgKCFzdGF0ZUNoYW5nZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkUmVuZGVyQ2hvaWNlcykge1xuICAgICAgdGhpcy5fcmVuZGVyQ2hvaWNlcygpO1xuICAgIH1cblxuICAgIGlmIChzaG91bGRSZW5kZXJJdGVtcykge1xuICAgICAgdGhpcy5fcmVuZGVySXRlbXMoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9wcmV2U3RhdGUgPSB0aGlzLl9jdXJyZW50U3RhdGU7XG4gIH07XG5cbiAgQ2hvaWNlcy5wcm90b3R5cGUuX3JlbmRlckNob2ljZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHZhciBfYSA9IHRoaXMuX3N0b3JlLFxuICAgICAgICBhY3RpdmVHcm91cHMgPSBfYS5hY3RpdmVHcm91cHMsXG4gICAgICAgIGFjdGl2ZUNob2ljZXMgPSBfYS5hY3RpdmVDaG9pY2VzO1xuICAgIHZhciBjaG9pY2VMaXN0RnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgdGhpcy5jaG9pY2VMaXN0LmNsZWFyKCk7XG5cbiAgICBpZiAodGhpcy5jb25maWcucmVzZXRTY3JvbGxQb3NpdGlvbikge1xuICAgICAgcmVxdW
118VzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLmNob2ljZUxpc3Quc2Nyb2xsVG9Ub3AoKTtcbiAgICAgIH0pO1xuICAgIH0gLy8gSWYgd2UgaGF2ZSBncm91cGVkIG9wdGlvbnNcblxuXG4gICAgaWYgKGFjdGl2ZUdyb3Vwcy5sZW5ndGggPj0gMSAmJiAhdGhpcy5faXNTZWFyY2hpbmcpIHtcbiAgICAgIC8vIElmIHdlIGhhdmUgYSBwbGFjZWhvbGRlciBjaG9pY2UgYWxvbmcgd2l0aCBncm91cHNcbiAgICAgIHZhciBhY3RpdmVQbGFjZWhvbGRlcnMgPSBhY3RpdmVDaG9pY2VzLmZpbHRlcihmdW5jdGlvbiAoYWN0aXZlQ2hvaWNlKSB7XG4gICAgICAgIHJldHVybiBhY3RpdmVDaG9pY2UucGxhY2Vob2xkZXIgPT09IHRydWUgJiYgYWN0aXZlQ2hvaWNlLmdyb3VwSWQgPT09IC0xO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChhY3RpdmVQbGFjZWhvbGRlcnMubGVuZ3RoID49IDEpIHtcbiAgICAgICAgY2hvaWNlTGlzdEZyYWdtZW50ID0gdGhpcy5fY3JlYXRlQ2hvaWNlc0ZyYWdtZW50KGFjdGl2ZVBsYWNlaG9sZGVycywgY2hvaWNlTGlzdEZyYWdtZW50KTtcbiAgICAgIH1cblxuICAgICAgY2hvaWNlTGlzdEZyYWdtZW50ID0gdGhpcy5fY3JlYXRlR3JvdXBzRnJhZ21lbnQoYWN0aXZlR3JvdXBzLCBhY3RpdmVDaG9pY2VzLCBjaG9pY2VMaXN0RnJhZ21lbnQpO1xuICAgIH0gZWxzZSBpZiAoYWN0aXZlQ2hvaWNlcy5sZW5ndGggPj0gMSkge1xuICAgICAgY2hvaWNlTGlzdEZyYWdtZW50ID0gdGhpcy5fY3JlYXRlQ2hvaWNlc0ZyYWdtZW50KGFjdGl2ZUNob2ljZXMsIGNob2ljZUxpc3RGcmFnbWVudCk7XG4gICAgfSAvLyBJZiB3ZSBoYXZlIGNob2ljZXMgdG8gc2hvd1xuXG5cbiAgICBpZiAoY2hvaWNlTGlzdEZyYWdtZW50LmNoaWxkTm9kZXMgJiYgY2hvaWNlTGlzdEZyYWdtZW50LmNoaWxkTm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgdmFyIGFjdGl2ZUl0ZW1zID0gdGhpcy5fc3RvcmUuYWN0aXZlSXRlbXM7XG5cbiAgICAgIHZhciBjYW5BZGRJdGVtID0gdGhpcy5fY2FuQWRkSXRlbShhY3RpdmVJdGVtcywgdGhpcy5pbnB1dC52YWx1ZSk7IC8vIC4uLmFuZCB3ZSBjYW4gc2VsZWN0IHRoZW1cblxuXG4gICAgICBpZiAoY2FuQWRkSXRlbS5yZXNwb25zZSkge1xuICAgICAgICAvLyAuLi5hcHBlbmQgdGhlbSBhbmQgaGlnaGxpZ2h0IHRoZSBmaXJzdCBjaG9pY2VcbiAgICAgICAgdGhpcy5jaG9pY2VMaXN0LmFwcGVuZChjaG9pY2VMaXN0RnJhZ21lbnQpO1xuXG4gICAgICAgIHRoaXMuX2hpZ2hsaWdodENob2ljZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIG5vdGljZSA9IHRoaXMuX2dldFRlbXBsYXRlKCdub3RpY2UnLCBjYW5BZGRJdGVtLm5vdGljZSk7XG5cbiAgICAgICAgdGhpcy5jaG9pY2VMaXN0LmFwcGVuZChub3RpY2UpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPdGhlcndpc2Ugc2hvdyBhIG5vdGljZVxuICAgICAgdmFyIGRyb3Bkb3duSXRlbSA9IHZvaWQgMDtcbiAgICAgIHZhciBub3RpY2UgPSB2b2lkIDA7XG5cbiAgICAgIGlmICh0aGlzLl9pc1NlYXJjaGluZykge1xuICAgICAgICBub3RpY2UgPSB0eXBlb2YgdGhpcy5jb25maWcubm9SZXN1bHRzVGV4dCA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMuY29uZmlnLm5vUmVzdWx0c1RleHQoKSA6IHRoaXMuY29uZmlnLm5vUmVzdWx0c1RleHQ7XG4gICAgICAgIGRyb3Bkb3duSXRlbSA9IHRoaXMuX2dldFRlbXBsYXRlKCdub3RpY2UnLCBub3RpY2UsICduby1yZXN1bHRzJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub3RpY2UgPSB0eXBlb2YgdGhpcy5jb25maWcubm9DaG9pY2VzVGV4dCA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMuY29uZmlnLm5vQ2hvaWNlc1RleHQoKSA6IHRoaXMuY29uZmlnLm5vQ2hvaWNlc1RleHQ7XG4gICAgICAgIGRyb3Bkb3duSXRlbSA9IHRoaXMuX2dldFRlbXBsYXRlKCdub3RpY2UnLCBub3RpY2UsICduby1jaG9pY2VzJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2hvaWNlTGlzdC5hcHBlbmQoZHJvcGRvd25JdGVtKTtcbiAgICB9XG4gIH07XG5cbiAgQ2hvaWNlcy5wcm90b3R5cGUuX3JlbmRlckl0ZW1zID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBhY3RpdmVJdGVtcyA9IHRoaXMuX3N0b3JlLmFjdGl2ZUl0ZW1zIHx8IFtdO1xuICAgIHRoaXMuaXRlbUxpc3QuY2xlYXIoKTsgLy8gQ3JlYXRlIGEgZnJhZ21lbnQgdG8gc3RvcmUgb3VyIGxpc3QgaXRlbXNcbiAgICAvLyAoc28gd2UgZG9uJ3QgaGF2ZSB0byB1cGRhdGUgdGhlIERPTSBmb3IgZWFjaCBpdGVtKVxuXG4gICAgdmFyIGl0ZW1MaXN0RnJhZ21lbnQgPSB0aGlzLl9jcmVhdGVJdGVtc0ZyYWdtZW50KGFjdGl2ZUl0ZW1zKTsgLy8gSWYgd2UgaGF2ZSBpdGVtcyB0byBhZGQsIGFwcGVuZCB0aGVtXG5cblxuICAgIGlmIChpdGVtTGlzdEZyYWdtZW50LmNoaWxkTm9kZXMpIHtcbiAgICAgIHRoaXMuaXRlbUxpc3QuYXBwZW5kKGl0ZW1MaXN0RnJhZ21lbnQpO1xuICAgIH1cbiAgfTtcblxuICBDaG9pY2VzLnByb3RvdHlwZS5fY3JlYXRlR3JvdXBzRnJhZ21lbnQgPSBmdW5jdGlvbiAoZ3JvdXBzLCBjaG9pY2VzLCBmcmFnbWVudCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBpZiAoZnJhZ21lbnQgPT09IHZvaWQgMCkge1xuICAgICAgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgfVxuXG4gICAgdmFyIGdldEdyb3VwQ2hvaWNlcyA9IGZ1bmN0aW9uIChncm91cCkge1xuICAgICAgcmV0dXJuIGNob2ljZXMuZmlsdGVyKGZ1bmN0aW9uIChjaG9pY2UpIHtcbiAgICAgICAgaWYgKF90aGlzLl9pc1NlbGVjdE9uZUVsZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm4gY2hvaWNlLmdyb3VwSWQgPT09IGdyb3VwLmlkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNob2ljZS5ncm91cElkID09PSBncm91cC5pZCAmJiAoX3RoaXMuY29uZmlnLnJlbmRlclNlbGVjdGVkQ2hvaWNlcyA9PT0gJ2Fsd2F5cycgfHwgIWNob2ljZS5zZWxlY3RlZCk7XG4gICAgICB9KTtcbiAgICB9OyAvLyBJZiBzb3J0aW5nIGlzIGVuYWJsZWQsIGZpbHRlciBncm91cHNcblxuXG4gICAgaWYgKHRoaXMuY29uZmlnLnNob3VsZFNvcnQpIHtcbiAgICAgIGdyb3Vwcy5zb3J0KHRoaXMuY29uZmlnLnNvcnRlcik7XG4gICAgfVxuXG4gICAgZ3JvdXBzLmZvckVhY2goZnVuY3Rpb24gKGdyb3VwKSB7XG4gICAgICB2Y
118XIgZ3JvdXBDaG9pY2VzID0gZ2V0R3JvdXBDaG9pY2VzKGdyb3VwKTtcblxuICAgICAgaWYgKGdyb3VwQ2hvaWNlcy5sZW5ndGggPj0gMSkge1xuICAgICAgICB2YXIgZHJvcGRvd25Hcm91cCA9IF90aGlzLl9nZXRUZW1wbGF0ZSgnY2hvaWNlR3JvdXAnLCBncm91cCk7XG5cbiAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoZHJvcGRvd25Hcm91cCk7XG5cbiAgICAgICAgX3RoaXMuX2NyZWF0ZUNob2ljZXNGcmFnbWVudChncm91cENob2ljZXMsIGZyYWdtZW50LCB0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZnJhZ21lbnQ7XG4gIH07XG5cbiAgQ2hvaWNlcy5wcm90b3R5cGUuX2NyZWF0ZUNob2ljZXNGcmFnbWVudCA9IGZ1bmN0aW9uIChjaG9pY2VzLCBmcmFnbWVudCwgd2l0aGluR3JvdXApIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgaWYgKGZyYWdtZW50ID09PSB2b2lkIDApIHtcbiAgICAgIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgIH1cblxuICAgIGlmICh3aXRoaW5Hcm91cCA9PT0gdm9pZCAwKSB7XG4gICAgICB3aXRoaW5Hcm91cCA9IGZhbHNlO1xuICAgIH0gLy8gQ3JlYXRlIGEgZnJhZ21lbnQgdG8gc3RvcmUgb3VyIGxpc3QgaXRlbXMgKHNvIHdlIGRvbid0IGhhdmUgdG8gdXBkYXRlIHRoZSBET00gZm9yIGVhY2ggaXRlbSlcblxuXG4gICAgdmFyIF9hID0gdGhpcy5jb25maWcsXG4gICAgICAgIHJlbmRlclNlbGVjdGVkQ2hvaWNlcyA9IF9hLnJlbmRlclNlbGVjdGVkQ2hvaWNlcyxcbiAgICAgICAgc2VhcmNoUmVzdWx0TGltaXQgPSBfYS5zZWFyY2hSZXN1bHRMaW1pdCxcbiAgICAgICAgcmVuZGVyQ2hvaWNlTGltaXQgPSBfYS5yZW5kZXJDaG9pY2VMaW1pdDtcbiAgICB2YXIgZmlsdGVyID0gdGhpcy5faXNTZWFyY2hpbmcgPyB1dGlsc18xLnNvcnRCeVNjb3JlIDogdGhpcy5jb25maWcuc29ydGVyO1xuXG4gICAgdmFyIGFwcGVuZENob2ljZSA9IGZ1bmN0aW9uIChjaG9pY2UpIHtcbiAgICAgIHZhciBzaG91bGRSZW5kZXIgPSByZW5kZXJTZWxlY3RlZENob2ljZXMgPT09ICdhdXRvJyA/IF90aGlzLl9pc1NlbGVjdE9uZUVsZW1lbnQgfHwgIWNob2ljZS5zZWxlY3RlZCA6IHRydWU7XG5cbiAgICAgIGlmIChzaG91bGRSZW5kZXIpIHtcbiAgICAgICAgdmFyIGRyb3Bkb3duSXRlbSA9IF90aGlzLl9nZXRUZW1wbGF0ZSgnY2hvaWNlJywgY2hvaWNlLCBfdGhpcy5jb25maWcuaXRlbVNlbGVjdFRleHQpO1xuXG4gICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKGRyb3Bkb3duSXRlbSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciByZW5kZXJlcmFibGVDaG9pY2VzID0gY2hvaWNlcztcblxuICAgIGlmIChyZW5kZXJTZWxlY3RlZENob2ljZXMgPT09ICdhdXRvJyAmJiAhdGhpcy5faXNTZWxlY3RPbmVFbGVtZW50KSB7XG4gICAgICByZW5kZXJlcmFibGVDaG9pY2VzID0gY2hvaWNlcy5maWx0ZXIoZnVuY3Rpb24gKGNob2ljZSkge1xuICAgICAgICByZXR1cm4gIWNob2ljZS5zZWxlY3RlZDtcbiAgICAgIH0pO1xuICAgIH0gLy8gU3BsaXQgYXJyYXkgaW50byBwbGFjZWhvbGRlcnMgYW5kIFwibm9ybWFsXCIgY2hvaWNlc1xuXG5cbiAgICB2YXIgX2IgPSByZW5kZXJlcmFibGVDaG9pY2VzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBjaG9pY2UpIHtcbiAgICAgIGlmIChjaG9pY2UucGxhY2Vob2xkZXIpIHtcbiAgICAgICAgYWNjLnBsYWNlaG9sZGVyQ2hvaWNlcy5wdXNoKGNob2ljZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY2Mubm9ybWFsQ2hvaWNlcy5wdXNoKGNob2ljZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge1xuICAgICAgcGxhY2Vob2xkZXJDaG9pY2VzOiBbXSxcbiAgICAgIG5vcm1hbENob2ljZXM6IFtdXG4gICAgfSksXG4gICAgICAgIHBsYWNlaG9sZGVyQ2hvaWNlcyA9IF9iLnBsYWNlaG9sZGVyQ2hvaWNlcyxcbiAgICAgICAgbm9ybWFsQ2hvaWNlcyA9IF9iLm5vcm1hbENob2ljZXM7IC8vIElmIHNvcnRpbmcgaXMgZW5hYmxlZCBvciB0aGUgdXNlciBpcyBzZWFyY2hpbmcsIGZpbHRlciBjaG9pY2VzXG5cblxuICAgIGlmICh0aGlzLmNvbmZpZy5zaG91bGRTb3J0IHx8IHRoaXMuX2lzU2VhcmNoaW5nKSB7XG4gICAgICBub3JtYWxDaG9pY2VzLnNvcnQoZmlsdGVyKTtcbiAgICB9XG5cbiAgICB2YXIgY2hvaWNlTGltaXQgPSByZW5kZXJlcmFibGVDaG9pY2VzLmxlbmd0aDsgLy8gUHJlcGVuZCBwbGFjZWhvbGVkZXJcblxuICAgIHZhciBzb3J0ZWRDaG9pY2VzID0gdGhpcy5faXNTZWxlY3RPbmVFbGVtZW50ID8gX19zcHJlYWRBcnJheShfX3NwcmVhZEFycmF5KFtdLCBwbGFjZWhvbGRlckNob2ljZXMsIHRydWUpLCBub3JtYWxDaG9pY2VzLCB0cnVlKSA6IG5vcm1hbENob2ljZXM7XG5cbiAgICBpZiAodGhpcy5faXNTZWFyY2hpbmcpIHtcbiAgICAgIGNob2ljZUxpbWl0ID0gc2VhcmNoUmVzdWx0TGltaXQ7XG4gICAgfSBlbHNlIGlmIChyZW5kZXJDaG9pY2VMaW1pdCAmJiByZW5kZXJDaG9pY2VMaW1pdCA+IDAgJiYgIXdpdGhpbkdyb3VwKSB7XG4gICAgICBjaG9pY2VMaW1pdCA9IHJlbmRlckNob2ljZUxpbWl0O1xuICAgIH0gLy8gQWRkIGVhY2ggY2hvaWNlIHRvIGRyb3Bkb3duIHdpdGhpbiByYW5nZVxuXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNob2ljZUxpbWl0OyBpICs9IDEpIHtcbiAgICAgIGlmIChzb3J0ZWRDaG9pY2VzW2ldKSB7XG4gICAgICAgIGFwcGVuZENob2ljZShzb3J0ZWRDaG9pY2VzW2ldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZnJhZ21lbnQ7XG4gIH07XG5cbiAgQ2hvaWNlcy5wcm90b3R5cGUuX2NyZWF0ZUl0ZW1zRnJhZ21lbnQgPSBmdW5jdGlvbiAoaXRlbXMsIGZyYWdtZW50KSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIGlmIChmcmFnbWVudCA9PT0gdm9pZCAwKSB7XG4gICAgICBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICB9IC8vIENyZWF0ZSBmcmFnbWVudCB0byBhZGQgZWxlbWVudHMgdG9cblxuXG4gICAgdmFyIF9hID0gdGhpcy5jb25maWcsXG4gICAgICAgI
118HNob3VsZFNvcnRJdGVtcyA9IF9hLnNob3VsZFNvcnRJdGVtcyxcbiAgICAgICAgc29ydGVyID0gX2Euc29ydGVyLFxuICAgICAgICByZW1vdmVJdGVtQnV0dG9uID0gX2EucmVtb3ZlSXRlbUJ1dHRvbjsgLy8gSWYgc29ydGluZyBpcyBlbmFibGVkLCBmaWx0ZXIgaXRlbXNcblxuICAgIGlmIChzaG91bGRTb3J0SXRlbXMgJiYgIXRoaXMuX2lzU2VsZWN0T25lRWxlbWVudCkge1xuICAgICAgaXRlbXMuc29ydChzb3J0ZXIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9pc1RleHRFbGVtZW50KSB7XG4gICAgICAvLyBVcGRhdGUgdGhlIHZhbHVlIG9mIHRoZSBoaWRkZW4gaW5wdXRcbiAgICAgIHRoaXMucGFzc2VkRWxlbWVudC52YWx1ZSA9IGl0ZW1zLm1hcChmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gX2EudmFsdWU7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0pLmpvaW4odGhpcy5jb25maWcuZGVsaW1pdGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVXBkYXRlIHRoZSBvcHRpb25zIG9mIHRoZSBoaWRkZW4gaW5wdXRcbiAgICAgIHRoaXMucGFzc2VkRWxlbWVudC5vcHRpb25zID0gaXRlbXM7XG4gICAgfVxuXG4gICAgdmFyIGFkZEl0ZW1Ub0ZyYWdtZW50ID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIC8vIENyZWF0ZSBuZXcgbGlzdCBlbGVtZW50XG4gICAgICB2YXIgbGlzdEl0ZW0gPSBfdGhpcy5fZ2V0VGVtcGxhdGUoJ2l0ZW0nLCBpdGVtLCByZW1vdmVJdGVtQnV0dG9uKTsgLy8gQXBwZW5kIGl0IHRvIGxpc3RcblxuXG4gICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChsaXN0SXRlbSk7XG4gICAgfTsgLy8gQWRkIGVhY2ggbGlzdCBpdGVtIHRvIGxpc3RcblxuXG4gICAgaXRlbXMuZm9yRWFjaChhZGRJdGVtVG9GcmFnbWVudCk7XG4gICAgcmV0dXJuIGZyYWdtZW50O1xuICB9O1xuXG4gIENob2ljZXMucHJvdG90eXBlLl90cmlnZ2VyQ2hhbmdlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBhc3NlZEVsZW1lbnQudHJpZ2dlckV2ZW50KGNvbnN0YW50c18xLkVWRU5UUy5jaGFuZ2UsIHtcbiAgICAgIHZhbHVlOiB2YWx1ZVxuICAgIH0pO1xuICB9O1xuXG4gIENob2ljZXMucHJvdG90eXBlLl9zZWxlY3RQbGFjZWhvbGRlckNob2ljZSA9IGZ1bmN0aW9uIChwbGFjZWhvbGRlckNob2ljZSkge1xuICAgIHRoaXMuX2FkZEl0ZW0oe1xuICAgICAgdmFsdWU6IHBsYWNlaG9sZGVyQ2hvaWNlLnZhbHVlLFxuICAgICAgbGFiZWw6IHBsYWNlaG9sZGVyQ2hvaWNlLmxhYmVsLFxuICAgICAgY2hvaWNlSWQ6IHBsYWNlaG9sZGVyQ2hvaWNlLmlkLFxuICAgICAgZ3JvdXBJZDogcGxhY2Vob2xkZXJDaG9pY2UuZ3JvdXBJZCxcbiAgICAgIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlckNob2ljZS5wbGFjZWhvbGRlclxuICAgIH0pO1xuXG4gICAgdGhpcy5fdHJpZ2dlckNoYW5nZShwbGFjZWhvbGRlckNob2ljZS52YWx1ZSk7XG4gIH07XG5cbiAgQ2hvaWNlcy5wcm90b3R5cGUuX2hhbmRsZUJ1dHRvbkFjdGlvbiA9IGZ1bmN0aW9uIChhY3RpdmVJdGVtcywgZWxlbWVudCkge1xuICAgIGlmICghYWN0aXZlSXRlbXMgfHwgIWVsZW1lbnQgfHwgIXRoaXMuY29uZmlnLnJlbW92ZUl0ZW1zIHx8ICF0aGlzLmNvbmZpZy5yZW1vdmVJdGVtQnV0dG9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGl0ZW1JZCA9IGVsZW1lbnQucGFyZW50Tm9kZSAmJiBlbGVtZW50LnBhcmVudE5vZGUuZGF0YXNldC5pZDtcbiAgICB2YXIgaXRlbVRvUmVtb3ZlID0gaXRlbUlkICYmIGFjdGl2ZUl0ZW1zLmZpbmQoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtLmlkID09PSBwYXJzZUludChpdGVtSWQsIDEwKTtcbiAgICB9KTtcblxuICAgIGlmICghaXRlbVRvUmVtb3ZlKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBSZW1vdmUgaXRlbSBhc3NvY2lhdGVkIHdpdGggYnV0dG9uXG5cblxuICAgIHRoaXMuX3JlbW92ZUl0ZW0oaXRlbVRvUmVtb3ZlKTtcblxuICAgIHRoaXMuX3RyaWdnZXJDaGFuZ2UoaXRlbVRvUmVtb3ZlLnZhbHVlKTtcblxuICAgIGlmICh0aGlzLl9pc1NlbGVjdE9uZUVsZW1lbnQgJiYgdGhpcy5fc3RvcmUucGxhY2Vob2xkZXJDaG9pY2UpIHtcbiAgICAgIHRoaXMuX3NlbGVjdFBsYWNlaG9sZGVyQ2hvaWNlKHRoaXMuX3N0b3JlLnBsYWNlaG9sZGVyQ2hvaWNlKTtcbiAgICB9XG4gIH07XG5cbiAgQ2hvaWNlcy5wcm90b3R5cGUuX2hhbmRsZUl0ZW1BY3Rpb24gPSBmdW5jdGlvbiAoYWN0aXZlSXRlbXMsIGVsZW1lbnQsIGhhc1NoaWZ0S2V5KSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIGlmIChoYXNTaGlmdEtleSA9PT0gdm9pZCAwKSB7XG4gICAgICBoYXNTaGlmdEtleSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghYWN0aXZlSXRlbXMgfHwgIWVsZW1lbnQgfHwgIXRoaXMuY29uZmlnLnJlbW92ZUl0ZW1zIHx8IHRoaXMuX2lzU2VsZWN0T25lRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBwYXNzZWRJZCA9IGVsZW1lbnQuZGF0YXNldC5pZDsgLy8gV2Ugb25seSB3YW50IHRvIHNlbGVjdCBvbmUgaXRlbSB3aXRoIGEgY2xpY2tcbiAgICAvLyBzbyB3ZSBkZXNlbGVjdCBhbnkgaXRlbXMgdGhhdCBhcmVuJ3QgdGhlIHRhcmdldFxuICAgIC8vIHVubGVzcyBzaGlmdCBpcyBiZWluZyBwcmVzc2VkXG5cbiAgICBhY3RpdmVJdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICBpZiAoaXRlbS5pZCA9PT0gcGFyc2VJbnQoXCJcIi5jb25jYXQocGFzc2VkSWQpLCAxMCkgJiYgIWl0ZW0uaGlnaGxpZ2h0ZWQpIHtcbiAgICAgICAgX3RoaXMuaGlnaGxpZ2h0SXRlbShpdGVtKTtcbiAgICAgIH0gZWxzZSBpZiAoIWhhc1NoaWZ0S2V5ICYmIGl0ZW0uaGlnaGxpZ2h0ZWQpIHtcbiAgICAgICAgX3RoaXMudW5oaWdobGlnaHRJdGVtKGl0ZW0pO1xuICAgICAgfVxuICAgIH0pOyAvLyBGb2N1cyBpbnB1dCBhcyB3aXRob3V0IGZvY3VzLCBhIHVzZXIgY2Fubm90IGRvIGFueXRoaW5nIHdpdGggYVxuICAgIC8vIGhpZ2hsaWdodGVkIGl0ZW1cblxuICAgI
118HRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgfTtcblxuICBDaG9pY2VzLnByb3RvdHlwZS5faGFuZGxlQ2hvaWNlQWN0aW9uID0gZnVuY3Rpb24gKGFjdGl2ZUl0ZW1zLCBlbGVtZW50KSB7XG4gICAgaWYgKCFhY3RpdmVJdGVtcyB8fCAhZWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gSWYgd2UgYXJlIGNsaWNraW5nIG9uIGFuIG9wdGlvblxuXG5cbiAgICB2YXIgaWQgPSBlbGVtZW50LmRhdGFzZXQuaWQ7XG5cbiAgICB2YXIgY2hvaWNlID0gaWQgJiYgdGhpcy5fc3RvcmUuZ2V0Q2hvaWNlQnlJZChpZCk7XG5cbiAgICBpZiAoIWNob2ljZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBwYXNzZWRLZXlDb2RlID0gYWN0aXZlSXRlbXNbMF0gJiYgYWN0aXZlSXRlbXNbMF0ua2V5Q29kZSA/IGFjdGl2ZUl0ZW1zWzBdLmtleUNvZGUgOiB1bmRlZmluZWQ7XG4gICAgdmFyIGhhc0FjdGl2ZURyb3Bkb3duID0gdGhpcy5kcm9wZG93bi5pc0FjdGl2ZTsgLy8gVXBkYXRlIGNob2ljZSBrZXlDb2RlXG5cbiAgICBjaG9pY2Uua2V5Q29kZSA9IHBhc3NlZEtleUNvZGU7XG4gICAgdGhpcy5wYXNzZWRFbGVtZW50LnRyaWdnZXJFdmVudChjb25zdGFudHNfMS5FVkVOVFMuY2hvaWNlLCB7XG4gICAgICBjaG9pY2U6IGNob2ljZVxuICAgIH0pO1xuXG4gICAgaWYgKCFjaG9pY2Uuc2VsZWN0ZWQgJiYgIWNob2ljZS5kaXNhYmxlZCkge1xuICAgICAgdmFyIGNhbkFkZEl0ZW0gPSB0aGlzLl9jYW5BZGRJdGVtKGFjdGl2ZUl0ZW1zLCBjaG9pY2UudmFsdWUpO1xuXG4gICAgICBpZiAoY2FuQWRkSXRlbS5yZXNwb25zZSkge1xuICAgICAgICB0aGlzLl9hZGRJdGVtKHtcbiAgICAgICAgICB2YWx1ZTogY2hvaWNlLnZhbHVlLFxuICAgICAgICAgIGxhYmVsOiBjaG9pY2UubGFiZWwsXG4gICAgICAgICAgY2hvaWNlSWQ6IGNob2ljZS5pZCxcbiAgICAgICAgICBncm91cElkOiBjaG9pY2UuZ3JvdXBJZCxcbiAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzOiBjaG9pY2UuY3VzdG9tUHJvcGVydGllcyxcbiAgICAgICAgICBwbGFjZWhvbGRlcjogY2hvaWNlLnBsYWNlaG9sZGVyLFxuICAgICAgICAgIGtleUNvZGU6IGNob2ljZS5rZXlDb2RlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX3RyaWdnZXJDaGFuZ2UoY2hvaWNlLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNsZWFySW5wdXQoKTsgLy8gV2Ugd2FudCB0byBjbG9zZSB0aGUgZHJvcGRvd24gaWYgd2UgYXJlIGRlYWxpbmcgd2l0aCBhIHNpbmdsZSBzZWxlY3QgYm94XG5cbiAgICBpZiAoaGFzQWN0aXZlRHJvcGRvd24gJiYgdGhpcy5faXNTZWxlY3RPbmVFbGVtZW50KSB7XG4gICAgICB0aGlzLmhpZGVEcm9wZG93bih0cnVlKTtcbiAgICAgIHRoaXMuY29udGFpbmVyT3V0ZXIuZm9jdXMoKTtcbiAgICB9XG4gIH07XG5cbiAgQ2hvaWNlcy5wcm90b3R5cGUuX2hhbmRsZUJhY2tzcGFjZSA9IGZ1bmN0aW9uIChhY3RpdmVJdGVtcykge1xuICAgIGlmICghdGhpcy5jb25maWcucmVtb3ZlSXRlbXMgfHwgIWFjdGl2ZUl0ZW1zKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGxhc3RJdGVtID0gYWN0aXZlSXRlbXNbYWN0aXZlSXRlbXMubGVuZ3RoIC0gMV07XG4gICAgdmFyIGhhc0hpZ2hsaWdodGVkSXRlbXMgPSBhY3RpdmVJdGVtcy5zb21lKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gaXRlbS5oaWdobGlnaHRlZDtcbiAgICB9KTsgLy8gSWYgZWRpdGluZyB0aGUgbGFzdCBpdGVtIGlzIGFsbG93ZWQgYW5kIHRoZXJlIGFyZSBub3Qgb3RoZXIgc2VsZWN0ZWQgaXRlbXMsXG4gICAgLy8gd2UgY2FuIGVkaXQgdGhlIGl0ZW0gdmFsdWUuIE90aGVyd2lzZSBpZiB3ZSBjYW4gcmVtb3ZlIGl0ZW1zLCByZW1vdmUgYWxsIHNlbGVjdGVkIGl0ZW1zXG5cbiAgICBpZiAodGhpcy5jb25maWcuZWRpdEl0ZW1zICYmICFoYXNIaWdobGlnaHRlZEl0ZW1zICYmIGxhc3RJdGVtKSB7XG4gICAgICB0aGlzLmlucHV0LnZhbHVlID0gbGFzdEl0ZW0udmFsdWU7XG4gICAgICB0aGlzLmlucHV0LnNldFdpZHRoKCk7XG5cbiAgICAgIHRoaXMuX3JlbW92ZUl0ZW0obGFzdEl0ZW0pO1xuXG4gICAgICB0aGlzLl90cmlnZ2VyQ2hhbmdlKGxhc3RJdGVtLnZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFoYXNIaWdobGlnaHRlZEl0ZW1zKSB7XG4gICAgICAgIC8vIEhpZ2hsaWdodCBsYXN0IGl0ZW0gaWYgbm9uZSBhbHJlYWR5IGhpZ2hsaWdodGVkXG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0SXRlbShsYXN0SXRlbSwgZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlbW92ZUhpZ2hsaWdodGVkSXRlbXModHJ1ZSk7XG4gICAgfVxuICB9O1xuXG4gIENob2ljZXMucHJvdG90eXBlLl9zdGFydExvYWRpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5fc3RvcmUuZGlzcGF0Y2goKDAsIG1pc2NfMS5zZXRJc0xvYWRpbmcpKHRydWUpKTtcbiAgfTtcblxuICBDaG9pY2VzLnByb3RvdHlwZS5fc3RvcExvYWRpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5fc3RvcmUuZGlzcGF0Y2goKDAsIG1pc2NfMS5zZXRJc0xvYWRpbmcpKGZhbHNlKSk7XG4gIH07XG5cbiAgQ2hvaWNlcy5wcm90b3R5cGUuX2hhbmRsZUxvYWRpbmdTdGF0ZSA9IGZ1bmN0aW9uIChzZXRMb2FkaW5nKSB7XG4gICAgaWYgKHNldExvYWRpbmcgPT09IHZvaWQgMCkge1xuICAgICAgc2V0TG9hZGluZyA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFyIHBsYWNlaG9sZGVySXRlbSA9IHRoaXMuaXRlbUxpc3QuZ2V0Q2hpbGQoXCIuXCIuY29uY2F0KHRoaXMuY29uZmlnLmNsYXNzTmFtZXMucGxhY2Vob2xkZXIpKTtcblxuICAgIGlmIChzZXRMb2FkaW5nKSB7XG4gICAgICB0aGlzLmRpc2FibGUoKTtcbiAgICAgIHRoaXMuY29udGFpbmVyT3V0ZXIuYWRkTG9hZGluZ1N0YXRlKCk7XG5cbiAgICAgIGlmICh0aGlzLl9pc1NlbGVjdE9uZUVsZW1lbnQpIHtcbiAgICAgICAgaWYgKCFwbGFjZWhvbGRlckl0ZW0pIHtcbiAgICAgICAgICBwbGFjZWhvbGRlckl0ZW0gPSB0aGlzLl9nZXRUZW1wbGF0ZSgncGxhY2Vob2xkZXInLCB0aGlzLmNvbmZpZy5sb2FkaW5nVGV4dCk7XG5cbiAgICAgICAgICBpZiAocGxhY2Vob2xkZXJJdGVtKSB7XG4gICAgICAgICAgICB0aGlzLml0ZW1MaXN0LmFwcGVuZChwbGFjZWhvbGRlckl0ZW0pO1xuICAgICAgICAgI
118H1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwbGFjZWhvbGRlckl0ZW0uaW5uZXJIVE1MID0gdGhpcy5jb25maWcubG9hZGluZ1RleHQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaW5wdXQucGxhY2Vob2xkZXIgPSB0aGlzLmNvbmZpZy5sb2FkaW5nVGV4dDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbmFibGUoKTtcbiAgICAgIHRoaXMuY29udGFpbmVyT3V0ZXIucmVtb3ZlTG9hZGluZ1N0YXRlKCk7XG5cbiAgICAgIGlmICh0aGlzLl9pc1NlbGVjdE9uZUVsZW1lbnQpIHtcbiAgICAgICAgaWYgKHBsYWNlaG9sZGVySXRlbSkge1xuICAgICAgICAgIHBsYWNlaG9sZGVySXRlbS5pbm5lckhUTUwgPSB0aGlzLl9wbGFjZWhvbGRlclZhbHVlIHx8ICcnO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmlucHV0LnBsYWNlaG9sZGVyID0gdGhpcy5fcGxhY2Vob2xkZXJWYWx1ZSB8fCAnJztcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgQ2hvaWNlcy5wcm90b3R5cGUuX2hhbmRsZVNlYXJjaCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGlmICghdGhpcy5pbnB1dC5pc0ZvY3Vzc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNob2ljZXMgPSB0aGlzLl9zdG9yZS5jaG9pY2VzO1xuICAgIHZhciBfYSA9IHRoaXMuY29uZmlnLFxuICAgICAgICBzZWFyY2hGbG9vciA9IF9hLnNlYXJjaEZsb29yLFxuICAgICAgICBzZWFyY2hDaG9pY2VzID0gX2Euc2VhcmNoQ2hvaWNlcztcbiAgICB2YXIgaGFzVW5hY3RpdmVDaG9pY2VzID0gY2hvaWNlcy5zb21lKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgIHJldHVybiAhb3B0aW9uLmFjdGl2ZTtcbiAgICB9KTsgLy8gQ2hlY2sgdGhhdCB3ZSBoYXZlIGEgdmFsdWUgdG8gc2VhcmNoIGFuZCB0aGUgaW5wdXQgd2FzIGFuIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJcblxuICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlLmxlbmd0aCA+PSBzZWFyY2hGbG9vcikge1xuICAgICAgdmFyIHJlc3VsdENvdW50ID0gc2VhcmNoQ2hvaWNlcyA/IHRoaXMuX3NlYXJjaENob2ljZXModmFsdWUpIDogMDsgLy8gVHJpZ2dlciBzZWFyY2ggZXZlbnRcblxuICAgICAgdGhpcy5wYXNzZWRFbGVtZW50LnRyaWdnZXJFdmVudChjb25zdGFudHNfMS5FVkVOVFMuc2VhcmNoLCB7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgcmVzdWx0Q291bnQ6IHJlc3VsdENvdW50XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGhhc1VuYWN0aXZlQ2hvaWNlcykge1xuICAgICAgLy8gT3RoZXJ3aXNlIHJlc2V0IGNob2ljZXMgdG8gYWN0aXZlXG4gICAgICB0aGlzLl9pc1NlYXJjaGluZyA9IGZhbHNlO1xuXG4gICAgICB0aGlzLl9zdG9yZS5kaXNwYXRjaCgoMCwgY2hvaWNlc18xLmFjdGl2YXRlQ2hvaWNlcykodHJ1ZSkpO1xuICAgIH1cbiAgfTtcblxuICBDaG9pY2VzLnByb3RvdHlwZS5fY2FuQWRkSXRlbSA9IGZ1bmN0aW9uIChhY3RpdmVJdGVtcywgdmFsdWUpIHtcbiAgICB2YXIgY2FuQWRkSXRlbSA9IHRydWU7XG4gICAgdmFyIG5vdGljZSA9IHR5cGVvZiB0aGlzLmNvbmZpZy5hZGRJdGVtVGV4dCA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMuY29uZmlnLmFkZEl0ZW1UZXh0KHZhbHVlKSA6IHRoaXMuY29uZmlnLmFkZEl0ZW1UZXh0O1xuXG4gICAgaWYgKCF0aGlzLl9pc1NlbGVjdE9uZUVsZW1lbnQpIHtcbiAgICAgIHZhciBpc0R1cGxpY2F0ZVZhbHVlID0gKDAsIHV0aWxzXzEuZXhpc3RzSW5BcnJheSkoYWN0aXZlSXRlbXMsIHZhbHVlKTtcblxuICAgICAgaWYgKHRoaXMuY29uZmlnLm1heEl0ZW1Db3VudCA+IDAgJiYgdGhpcy5jb25maWcubWF4SXRlbUNvdW50IDw9IGFjdGl2ZUl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIG1heCBlbnRyeSBsaW1pdCBhbmQgd2UgaGF2ZSByZWFjaGVkIHRoYXQgbGltaXRcbiAgICAgICAgLy8gZG9uJ3QgdXBkYXRlXG4gICAgICAgIGNhbkFkZEl0ZW0gPSBmYWxzZTtcbiAgICAgICAgbm90aWNlID0gdHlwZW9mIHRoaXMuY29uZmlnLm1heEl0ZW1UZXh0ID09PSAnZnVuY3Rpb24nID8gdGhpcy5jb25maWcubWF4SXRlbVRleHQodGhpcy5jb25maWcubWF4SXRlbUNvdW50KSA6IHRoaXMuY29uZmlnLm1heEl0ZW1UZXh0O1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuY29uZmlnLmR1cGxpY2F0ZUl0ZW1zQWxsb3dlZCAmJiBpc0R1cGxpY2F0ZVZhbHVlICYmIGNhbkFkZEl0ZW0pIHtcbiAgICAgICAgY2FuQWRkSXRlbSA9IGZhbHNlO1xuICAgICAgICBub3RpY2UgPSB0eXBlb2YgdGhpcy5jb25maWcudW5pcXVlSXRlbVRleHQgPT09ICdmdW5jdGlvbicgPyB0aGlzLmNvbmZpZy51bmlxdWVJdGVtVGV4dCh2YWx1ZSkgOiB0aGlzLmNvbmZpZy51bmlxdWVJdGVtVGV4dDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2lzVGV4dEVsZW1lbnQgJiYgdGhpcy5jb25maWcuYWRkSXRlbXMgJiYgY2FuQWRkSXRlbSAmJiB0eXBlb2YgdGhpcy5jb25maWcuYWRkSXRlbUZpbHRlciA9PT0gJ2Z1bmN0aW9uJyAmJiAhdGhpcy5jb25maWcuYWRkSXRlbUZpbHRlcih2YWx1ZSkpIHtcbiAgICAgICAgY2FuQWRkSXRlbSA9IGZhbHNlO1xuICAgICAgICBub3RpY2UgPSB0eXBlb2YgdGhpcy5jb25maWcuY3VzdG9tQWRkSXRlbVRleHQgPT09ICdmdW5jdGlvbicgPyB0aGlzLmNvbmZpZy5jdXN0b21BZGRJdGVtVGV4dCh2YWx1ZSkgOiB0aGlzLmNvbmZpZy5jdXN0b21BZGRJdGVtVGV4dDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcmVzcG9uc2U6IGNhbkFkZEl0ZW0sXG4gICAgICBub3RpY2U6IG5vdGljZVxuICAgIH07XG4gIH07XG5cbiAgQ2hvaWNlcy5wcm90b3R5cGUuX3NlYXJjaENob2ljZXMgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICB2YXIgbmV3VmFsdWUgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUudHJpbSgpIDogdmFsdWU7XG4gICAgdmFyIGN1cnJlbnRWYWx1ZSA9IHR5cGVvZiB0aGlzLl9jdXJyZW50VmFsdWUgPT09ICdzdHJpbmcnID8gdGhpcy5fY3VycmVudFZhbHVlLnRyaW0oKSA6IHRoaXMuX2N1cnJlbnRWYWx1ZTtcblxuICAgIGlmIChuZXdWYWx1ZS
1185sZW5ndGggPCAxICYmIG5ld1ZhbHVlID09PSBcIlwiLmNvbmNhdChjdXJyZW50VmFsdWUsIFwiIFwiKSkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSAvLyBJZiBuZXcgdmFsdWUgbWF0Y2hlcyB0aGUgZGVzaXJlZCBsZW5ndGggYW5kIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgY3VycmVudCB2YWx1ZSB3aXRoIGEgc3BhY2VcblxuXG4gICAgdmFyIGhheXN0YWNrID0gdGhpcy5fc3RvcmUuc2VhcmNoYWJsZUNob2ljZXM7XG4gICAgdmFyIG5lZWRsZSA9IG5ld1ZhbHVlO1xuICAgIHZhciBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih0aGlzLmNvbmZpZy5mdXNlT3B0aW9ucywge1xuICAgICAga2V5czogX19zcHJlYWRBcnJheShbXSwgdGhpcy5jb25maWcuc2VhcmNoRmllbGRzLCB0cnVlKSxcbiAgICAgIGluY2x1ZGVNYXRjaGVzOiB0cnVlXG4gICAgfSk7XG4gICAgdmFyIGZ1c2UgPSBuZXcgZnVzZV9qc18xLmRlZmF1bHQoaGF5c3RhY2ssIG9wdGlvbnMpO1xuICAgIHZhciByZXN1bHRzID0gZnVzZS5zZWFyY2gobmVlZGxlKTsgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9rcmlzay9GdXNlL2lzc3Vlcy8zMDNcblxuICAgIHRoaXMuX2N1cnJlbnRWYWx1ZSA9IG5ld1ZhbHVlO1xuICAgIHRoaXMuX2hpZ2hsaWdodFBvc2l0aW9uID0gMDtcbiAgICB0aGlzLl9pc1NlYXJjaGluZyA9IHRydWU7XG5cbiAgICB0aGlzLl9zdG9yZS5kaXNwYXRjaCgoMCwgY2hvaWNlc18xLmZpbHRlckNob2ljZXMpKHJlc3VsdHMpKTtcblxuICAgIHJldHVybiByZXN1bHRzLmxlbmd0aDtcbiAgfTtcblxuICBDaG9pY2VzLnByb3RvdHlwZS5fYWRkRXZlbnRMaXN0ZW5lcnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsgLy8gY2FwdHVyZSBldmVudHMgLSBjYW4gY2FuY2VsIGV2ZW50IHByb2Nlc3Npbmcgb3IgcHJvcGFnYXRpb25cblxuICAgIGRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIHRoaXMuX29uVG91Y2hFbmQsIHRydWUpO1xuICAgIHRoaXMuY29udGFpbmVyT3V0ZXIuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCB0cnVlKTtcbiAgICB0aGlzLmNvbnRhaW5lck91dGVyLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5fb25Nb3VzZURvd24sIHRydWUpOyAvLyBwYXNzaXZlIGV2ZW50cyAtIGRvZXNuJ3QgY2FsbCBgcHJldmVudERlZmF1bHRgIG9yIGBzdG9wUHJvcGFnYXRpb25gXG5cbiAgICBkb2N1bWVudEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkNsaWNrLCB7XG4gICAgICBwYXNzaXZlOiB0cnVlXG4gICAgfSk7XG4gICAgZG9jdW1lbnRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMuX29uVG91Y2hNb3ZlLCB7XG4gICAgICBwYXNzaXZlOiB0cnVlXG4gICAgfSk7XG4gICAgdGhpcy5kcm9wZG93bi5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3ZlcicsIHRoaXMuX29uTW91c2VPdmVyLCB7XG4gICAgICBwYXNzaXZlOiB0cnVlXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5faXNTZWxlY3RPbmVFbGVtZW50KSB7XG4gICAgICB0aGlzLmNvbnRhaW5lck91dGVyLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0aGlzLl9vbkZvY3VzLCB7XG4gICAgICAgIHBhc3NpdmU6IHRydWVcbiAgICAgIH0pO1xuICAgICAgdGhpcy5jb250YWluZXJPdXRlci5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCB0aGlzLl9vbkJsdXIsIHtcbiAgICAgICAgcGFzc2l2ZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5pbnB1dC5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5fb25LZXlVcCwge1xuICAgICAgcGFzc2l2ZTogdHJ1ZVxuICAgIH0pO1xuICAgIHRoaXMuaW5wdXQuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMuX29uRm9jdXMsIHtcbiAgICAgIHBhc3NpdmU6IHRydWVcbiAgICB9KTtcbiAgICB0aGlzLmlucHV0LmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIHRoaXMuX29uQmx1ciwge1xuICAgICAgcGFzc2l2ZTogdHJ1ZVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuaW5wdXQuZWxlbWVudC5mb3JtKSB7XG4gICAgICB0aGlzLmlucHV0LmVsZW1lbnQuZm9ybS5hZGRFdmVudExpc3RlbmVyKCdyZXNldCcsIHRoaXMuX29uRm9ybVJlc2V0LCB7XG4gICAgICAgIHBhc3NpdmU6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcnMoKTtcbiAgfTtcblxuICBDaG9pY2VzLnByb3RvdHlwZS5fcmVtb3ZlRXZlbnRMaXN0ZW5lcnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICBkb2N1bWVudEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCB0aGlzLl9vblRvdWNoRW5kLCB0cnVlKTtcbiAgICB0aGlzLmNvbnRhaW5lck91dGVyLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgdHJ1ZSk7XG4gICAgdGhpcy5jb250YWluZXJPdXRlci5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMuX29uTW91c2VEb3duLCB0cnVlKTtcbiAgICBkb2N1bWVudEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkNsaWNrKTtcbiAgICBkb2N1bWVudEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5fb25Ub3VjaE1vdmUpO1xuICAgIHRoaXMuZHJvcGRvd24uZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCB0aGlzLl9vbk1vdXNlT3Zlcik7XG5cbiAgICBpZiAodGhpcy5faXNTZWxlY3RPbmVFbGVtZW50KSB7XG4gICAgICB0aGlzLmNvbnRhaW5lck91dGVyLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0aGlzLl9vbkZvY3VzKTtcbiAgICAgIHRoaXMuY29udGFpbmVyT3V0ZXIuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5fb25CbHVyKTtcbiAgICB9XG5cbiAgICB0aGlzLmlucHV0LmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLl9vbktleVVwKTtcbiAgICB0aGlzLmlucHV0LmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0aGlzLl9vbkZvY3VzKTtcbiAgICB0aGlzLmlucHV0LmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignYmx1cicsIHRoaXMuX29uQmx1cik7XG5cbiAgICBpZiAodGhpcy5pbnB1dC5lbGVtZW50LmZvcm0pIHtcbiAgICAgIHRoaXMuaW5wdXQuZWxlbWVudC5mb3JtLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2V0JywgdGhpcy5fb25Gb3JtUmVzZXQpO1xuICAgIH1cblxuICAgI
118HRoaXMuaW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcnMoKTtcbiAgfTtcblxuICBDaG9pY2VzLnByb3RvdHlwZS5fb25LZXlEb3duID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdmFyIGtleUNvZGUgPSBldmVudC5rZXlDb2RlO1xuICAgIHZhciBhY3RpdmVJdGVtcyA9IHRoaXMuX3N0b3JlLmFjdGl2ZUl0ZW1zO1xuICAgIHZhciBoYXNGb2N1c2VkSW5wdXQgPSB0aGlzLmlucHV0LmlzRm9jdXNzZWQ7XG4gICAgdmFyIGhhc0FjdGl2ZURyb3Bkb3duID0gdGhpcy5kcm9wZG93bi5pc0FjdGl2ZTtcbiAgICB2YXIgaGFzSXRlbXMgPSB0aGlzLml0ZW1MaXN0Lmhhc0NoaWxkcmVuKCk7XG4gICAgdmFyIGtleVN0cmluZyA9IFN0cmluZy5mcm9tQ2hhckNvZGUoa2V5Q29kZSk7XG4gICAgdmFyIHdhc0FscGhhTnVtZXJpY0NoYXIgPSAvW2EtekEtWjAtOS1fIF0vLnRlc3Qoa2V5U3RyaW5nKTtcbiAgICB2YXIgQkFDS19LRVkgPSBjb25zdGFudHNfMS5LRVlfQ09ERVMuQkFDS19LRVksXG4gICAgICAgIERFTEVURV9LRVkgPSBjb25zdGFudHNfMS5LRVlfQ09ERVMuREVMRVRFX0tFWSxcbiAgICAgICAgRU5URVJfS0VZID0gY29uc3RhbnRzXzEuS0VZX0NPREVTLkVOVEVSX0tFWSxcbiAgICAgICAgQV9LRVkgPSBjb25zdGFudHNfMS5LRVlfQ09ERVMuQV9LRVksXG4gICAgICAgIEVTQ19LRVkgPSBjb25zdGFudHNfMS5LRVlfQ09ERVMuRVNDX0tFWSxcbiAgICAgICAgVVBfS0VZID0gY29uc3RhbnRzXzEuS0VZX0NPREVTLlVQX0tFWSxcbiAgICAgICAgRE9XTl9LRVkgPSBjb25zdGFudHNfMS5LRVlfQ09ERVMuRE9XTl9LRVksXG4gICAgICAgIFBBR0VfVVBfS0VZID0gY29uc3RhbnRzXzEuS0VZX0NPREVTLlBBR0VfVVBfS0VZLFxuICAgICAgICBQQUdFX0RPV05fS0VZID0gY29uc3RhbnRzXzEuS0VZX0NPREVTLlBBR0VfRE9XTl9LRVk7XG5cbiAgICBpZiAoIXRoaXMuX2lzVGV4dEVsZW1lbnQgJiYgIWhhc0FjdGl2ZURyb3Bkb3duICYmIHdhc0FscGhhTnVtZXJpY0NoYXIpIHtcbiAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duKCk7XG5cbiAgICAgIGlmICghdGhpcy5pbnB1dC5pc0ZvY3Vzc2VkKSB7XG4gICAgICAgIC8qXG4gICAgICAgICAgV2UgdXBkYXRlIHRoZSBpbnB1dCB2YWx1ZSB3aXRoIHRoZSBwcmVzc2VkIGtleSBhc1xuICAgICAgICAgIHRoZSBpbnB1dCB3YXMgbm90IGZvY3Vzc2VkIGF0IHRoZSB0aW1lIG9mIGtleSBwcmVzc1xuICAgICAgICAgIHRoZXJlZm9yZSBkb2VzIG5vdCBoYXZlIHRoZSB2YWx1ZSBvZiB0aGUga2V5LlxuICAgICAgICAqL1xuICAgICAgICB0aGlzLmlucHV0LnZhbHVlICs9IGtleVN0cmluZy50b0xvd2VyQ2FzZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAoa2V5Q29kZSkge1xuICAgICAgY2FzZSBBX0tFWTpcbiAgICAgICAgcmV0dXJuIHRoaXMuX29uU2VsZWN0S2V5KGV2ZW50LCBoYXNJdGVtcyk7XG5cbiAgICAgIGNhc2UgRU5URVJfS0VZOlxuICAgICAgICByZXR1cm4gdGhpcy5fb25FbnRlcktleShldmVudCwgYWN0aXZlSXRlbXMsIGhhc0FjdGl2ZURyb3Bkb3duKTtcblxuICAgICAgY2FzZSBFU0NfS0VZOlxuICAgICAgICByZXR1cm4gdGhpcy5fb25Fc2NhcGVLZXkoaGFzQWN0aXZlRHJvcGRvd24pO1xuXG4gICAgICBjYXNlIFVQX0tFWTpcbiAgICAgIGNhc2UgUEFHRV9VUF9LRVk6XG4gICAgICBjYXNlIERPV05fS0VZOlxuICAgICAgY2FzZSBQQUdFX0RPV05fS0VZOlxuICAgICAgICByZXR1cm4gdGhpcy5fb25EaXJlY3Rpb25LZXkoZXZlbnQsIGhhc0FjdGl2ZURyb3Bkb3duKTtcblxuICAgICAgY2FzZSBERUxFVEVfS0VZOlxuICAgICAgY2FzZSBCQUNLX0tFWTpcbiAgICAgICAgcmV0dXJuIHRoaXMuX29uRGVsZXRlS2V5KGV2ZW50LCBhY3RpdmVJdGVtcywgaGFzRm9jdXNlZElucHV0KTtcblxuICAgICAgZGVmYXVsdDpcbiAgICB9XG4gIH07XG5cbiAgQ2hvaWNlcy5wcm90b3R5cGUuX29uS2V5VXAgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgdGFyZ2V0ID0gX2EudGFyZ2V0LFxuICAgICAgICBrZXlDb2RlID0gX2Eua2V5Q29kZTtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLmlucHV0LnZhbHVlO1xuICAgIHZhciBhY3RpdmVJdGVtcyA9IHRoaXMuX3N0b3JlLmFjdGl2ZUl0ZW1zO1xuXG4gICAgdmFyIGNhbkFkZEl0ZW0gPSB0aGlzLl9jYW5BZGRJdGVtKGFjdGl2ZUl0ZW1zLCB2YWx1ZSk7XG5cbiAgICB2YXIgYmFja0tleSA9IGNvbnN0YW50c18xLktFWV9DT0RFUy5CQUNLX0tFWSxcbiAgICAgICAgZGVsZXRlS2V5ID0gY29uc3RhbnRzXzEuS0VZX0NPREVTLkRFTEVURV9LRVk7IC8vIFdlIGFyZSB0eXBpbmcgaW50byBhIHRleHQgaW5wdXQgYW5kIGhhdmUgYSB2YWx1ZSwgd2Ugd2FudCB0byBzaG93IGEgZHJvcGRvd25cbiAgICAvLyBub3RpY2UuIE90aGVyd2lzZSBoaWRlIHRoZSBkcm9wZG93blxuXG4gICAgaWYgKHRoaXMuX2lzVGV4dEVsZW1lbnQpIHtcbiAgICAgIHZhciBjYW5TaG93RHJvcGRvd25Ob3RpY2UgPSBjYW5BZGRJdGVtLm5vdGljZSAmJiB2YWx1ZTtcblxuICAgICAgaWYgKGNhblNob3dEcm9wZG93bk5vdGljZSkge1xuICAgICAgICB2Y
118XIgZHJvcGRvd25JdGVtID0gdGhpcy5fZ2V0VGVtcGxhdGUoJ25vdGljZScsIGNhbkFkZEl0ZW0ubm90aWNlKTtcblxuICAgICAgICB0aGlzLmRyb3Bkb3duLmVsZW1lbnQuaW5uZXJIVE1MID0gZHJvcGRvd25JdGVtLm91dGVySFRNTDtcbiAgICAgICAgdGhpcy5zaG93RHJvcGRvd24odHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmhpZGVEcm9wZG93bih0cnVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHdhc1JlbW92YWxLZXlDb2RlID0ga2V5Q29kZSA9PT0gYmFja0tleSB8fCBrZXlDb2RlID09PSBkZWxldGVLZXk7XG4gICAgICB2YXIgdXNlckhhc1JlbW92ZWRWYWx1ZSA9IHdhc1JlbW92YWxLZXlDb2RlICYmIHRhcmdldCAmJiAhdGFyZ2V0LnZhbHVlO1xuICAgICAgdmFyIGNhblJlYWN0aXZhdGVDaG9pY2VzID0gIXRoaXMuX2lzVGV4dEVsZW1lbnQgJiYgdGhpcy5faXNTZWFyY2hpbmc7XG4gICAgICB2YXIgY2FuU2VhcmNoID0gdGhpcy5fY2FuU2VhcmNoICYmIGNhbkFkZEl0ZW0ucmVzcG9uc2U7XG5cbiAgICAgIGlmICh1c2VySGFzUmVtb3ZlZFZhbHVlICYmIGNhblJlYWN0aXZhdGVDaG9pY2VzKSB7XG4gICAgICAgIHRoaXMuX2lzU2VhcmNoaW5nID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5fc3RvcmUuZGlzcGF0Y2goKDAsIGNob2ljZXNfMS5hY3RpdmF0ZUNob2ljZXMpKHRydWUpKTtcbiAgICAgIH0gZWxzZSBpZiAoY2FuU2VhcmNoKSB7XG4gICAgICAgIHRoaXMuX2hhbmRsZVNlYXJjaCh0aGlzLmlucHV0LnJhd1ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9jYW5TZWFyY2ggPSB0aGlzLmNvbmZpZy5zZWFyY2hFbmFibGVkO1xuICB9O1xuXG4gIENob2ljZXMucHJvdG90eXBlLl9vblNlbGVjdEtleSA9IGZ1bmN0aW9uIChldmVudCwgaGFzSXRlbXMpIHtcbiAgICB2YXIgY3RybEtleSA9IGV2ZW50LmN0cmxLZXksXG4gICAgICAgIG1ldGFLZXkgPSBldmVudC5tZXRhS2V5O1xuICAgIHZhciBoYXNDdHJsRG93bktleVByZXNzZWQgPSBjdHJsS2V5IHx8IG1ldGFLZXk7IC8vIElmIENUUkwgKyBBIG9yIENNRCArIEEgaGF2ZSBiZWVuIHByZXNzZWQgYW5kIHRoZXJlIGFyZSBpdGVtcyB0byBzZWxlY3RcblxuICAgIGlmIChoYXNDdHJsRG93bktleVByZXNzZWQgJiYgaGFzSXRlbXMpIHtcbiAgICAgIHRoaXMuX2NhblNlYXJjaCA9IGZhbHNlO1xuICAgICAgdmFyIHNob3VsZEhpZ2h0bGlnaHRBbGwgPSB0aGlzLmNvbmZpZy5yZW1vdmVJdGVtcyAmJiAhdGhpcy5pbnB1dC52YWx1ZSAmJiB0aGlzLmlucHV0LmVsZW1lbnQgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG5cbiAgICAgIGlmIChzaG91bGRIaWdodGxpZ2h0QWxsKSB7XG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0QWxsKCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIENob2ljZXMucHJvdG90eXBlLl9vbkVudGVyS2V5ID0gZnVuY3Rpb24gKGV2ZW50LCBhY3RpdmVJdGVtcywgaGFzQWN0aXZlRHJvcGRvd24pIHtcbiAgICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgIHZhciBlbnRlcktleSA9IGNvbnN0YW50c18xLktFWV9DT0RFUy5FTlRFUl9LRVk7XG4gICAgdmFyIHRhcmdldFdhc0J1dHRvbiA9IHRhcmdldCAmJiB0YXJnZXQuaGFzQXR0cmlidXRlKCdkYXRhLWJ1dHRvbicpO1xuXG4gICAgaWYgKHRoaXMuX2lzVGV4dEVsZW1lbnQgJiYgdGFyZ2V0ICYmIHRhcmdldC52YWx1ZSkge1xuICAgICAgdmFyIHZhbHVlID0gdGhpcy5pbnB1dC52YWx1ZTtcblxuICAgICAgdmFyIGNhbkFkZEl0ZW0gPSB0aGlzLl9jYW5BZGRJdGVtKGFjdGl2ZUl0ZW1zLCB2YWx1ZSk7XG5cbiAgICAgIGlmIChjYW5BZGRJdGVtLnJlc3BvbnNlKSB7XG4gICAgICAgIHRoaXMuaGlkZURyb3Bkb3duKHRydWUpO1xuXG4gICAgICAgIHRoaXMuX2FkZEl0ZW0oe1xuICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl90cmlnZ2VyQ2hhbmdlKHZhbHVlKTtcblxuICAgICAgICB0aGlzLmNsZWFySW5wdXQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGFyZ2V0V2FzQnV0dG9uKSB7XG4gICAgICB0aGlzLl9oYW5kbGVCdXR0b25BY3Rpb24oYWN0aXZlSXRlbXMsIHRhcmdldCk7XG5cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgaWYgKGhhc0FjdGl2ZURyb3Bkb3duKSB7XG4gICAgICB2Y
118XIgaGlnaGxpZ2h0ZWRDaG9pY2UgPSB0aGlzLmRyb3Bkb3duLmdldENoaWxkKFwiLlwiLmNvbmNhdCh0aGlzLmNvbmZpZy5jbGFzc05hbWVzLmhpZ2hsaWdodGVkU3RhdGUpKTtcblxuICAgICAgaWYgKGhpZ2hsaWdodGVkQ2hvaWNlKSB7XG4gICAgICAgIC8vIGFkZCBlbnRlciBrZXlDb2RlIHZhbHVlXG4gICAgICAgIGlmIChhY3RpdmVJdGVtc1swXSkge1xuICAgICAgICAgIGFjdGl2ZUl0ZW1zWzBdLmtleUNvZGUgPSBlbnRlcktleTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5faGFuZGxlQ2hvaWNlQWN0aW9uKGFjdGl2ZUl0ZW1zLCBoaWdobGlnaHRlZENob2ljZSk7XG4gICAgICB9XG5cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9pc1NlbGVjdE9uZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duKCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfTtcblxuICBDaG9pY2VzLnByb3RvdHlwZS5fb25Fc2NhcGVLZXkgPSBmdW5jdGlvbiAoaGFzQWN0aXZlRHJvcGRvd24pIHtcbiAgICBpZiAoaGFzQWN0aXZlRHJvcGRvd24pIHtcbiAgICAgIHRoaXMuaGlkZURyb3Bkb3duKHRydWUpO1xuICAgICAgdGhpcy5jb250YWluZXJPdXRlci5mb2N1cygpO1xuICAgIH1cbiAgfTtcblxuICBDaG9pY2VzLnByb3RvdHlwZS5fb25EaXJlY3Rpb25LZXkgPSBmdW5jdGlvbiAoZXZlbnQsIGhhc0FjdGl2ZURyb3Bkb3duKSB7XG4gICAgdmFyIGtleUNvZGUgPSBldmVudC5rZXlDb2RlLFxuICAgICAgICBtZXRhS2V5ID0gZXZlbnQubWV0YUtleTtcbiAgICB2YXIgZG93bktleSA9IGNvbnN0YW50c18xLktFWV9DT0RFUy5ET1dOX0tFWSxcbiAgICAgICAgcGFnZVVwS2V5ID0gY29uc3RhbnRzXzEuS0VZX0NPREVTLlBBR0VfVVBfS0VZLFxuICAgICAgICBwYWdlRG93bktleSA9IGNvbnN0YW50c18xLktFWV9DT0RFUy5QQUdFX0RPV05fS0VZOyAvLyBJZiB1cCBvciBkb3duIGtleSBpcyBwcmVzc2VkLCB0cmF2ZXJzZSB0aHJvdWdoIG9wdGlvbnNcblxuICAgIGlmIChoYXNBY3RpdmVEcm9wZG93biB8fCB0aGlzLl9pc1NlbGVjdE9uZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duKCk7XG4gICAgICB0aGlzLl9jYW5TZWFyY2ggPSBmYWxzZTtcbiAgICAgIHZhciBkaXJlY3Rpb25JbnQgPSBrZXlDb2RlID09PSBkb3duS2V5IHx8IGtleUNvZGUgPT09IHBhZ2VEb3duS2V5ID8gMSA6IC0xO1xuICAgICAgdmFyIHNraXBLZXkgPSBtZXRhS2V5IHx8IGtleUNvZGUgPT09IHBhZ2VEb3duS2V5IHx8IGtleUNvZGUgPT09IHBhZ2VVcEtleTtcbiAgICAgIHZhciBzZWxlY3RhYmxlQ2hvaWNlSWRlbnRpZmllciA9ICdbZGF0YS1jaG9pY2Utc2VsZWN0YWJsZV0nO1xuICAgICAgdmFyIG5leHRFbCA9IHZvaWQgMDtcblxuICAgICAgaWYgKHNraXBLZXkpIHtcbiAgICAgICAgaWYgKGRpcmVjdGlvbkludCA+IDApIHtcbiAgICAgICAgICBuZXh0RWwgPSB0aGlzLmRyb3Bkb3duLmVsZW1lbnQucXVlcnlTZWxlY3RvcihcIlwiLmNvbmNhdChzZWxlY3RhYmxlQ2hvaWNlSWRlbnRpZmllciwgXCI6bGFzdC1vZi10eXBlXCIpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXh0RWwgPSB0aGlzLmRyb3Bkb3duLmVsZW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3RhYmxlQ2hvaWNlSWRlbnRpZmllcik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBjdXJyZW50RWwgPSB0aGlzLmRyb3Bkb3duLmVsZW1lbnQucXVlcnlTZWxlY3RvcihcIi5cIi5jb25jYXQodGhpcy5jb25maWcuY2xhc3NOYW1lcy5oaWdobGlnaHRlZFN0YXRlKSk7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRFbCkge1xuICAgICAgICAgIG5leHRFbCA9ICgwLCB1dGlsc18xLmdldEFkamFjZW50RWwpKGN1cnJlbnRFbCwgc2VsZWN0YWJsZUNob2ljZUlkZW50aWZpZXIsIGRpcmVjdGlvbkludCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV4dEVsID0gdGhpcy5kcm9wZG93bi5lbGVtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0YWJsZUNob2ljZUlkZW50aWZpZXIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXh0RWwpIHtcbiAgICAgICAgLy8gV2UgcHJldmVudCBkZWZhdWx0IHRvIHN0b3AgdGhlIGN1cnNvciBtb3ZpbmdcbiAgICAgICAgLy8gd2hlbiBwcmVzc2luZyB0aGUgYXJyb3dcbiAgICAgICAgaWYgKCEoMCwgdXRpbHNfMS5pc1Njcm9sbGVkSW50b1ZpZXcpKG5leHRFbCwgdGhpcy5jaG9pY2VMaXN0LmVsZW1lbnQsIGRpcmVjdGlvbkludCkpIHtcbiAgICAgICAgICB0aGlzLmNob2ljZUxpc3Quc2Nyb2xsVG9DaGlsZEVsZW1lbnQobmV4dEVsLCBkaXJlY3Rpb25JbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5faGlnaGxpZ2h0Q2hvaWNlKG5leHRFbCk7XG4gICAgICB9IC8vIFByZXZlbnQgZGVmYXVsdCB0byBtYWludGFpbiBjdXJzb3IgcG9zaXRpb24gd2hpbHN0XG4gICAgICAvLyB0cmF2ZXJzaW5nIGRyb3Bkb3duIG9wdGlvbnNcblxuXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfTtcblxuICBDaG9pY2VzLnByb3RvdHlwZS5fb25EZWxldGVLZXkgPSBmdW5jdGlvbiAoZXZlbnQsIGFjdGl2ZUl0ZW1zLCBoYXNGb2N1c2VkSW5wdXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0OyAvLyBJZiBiYWNrc3BhY2Ugb3IgZGVsZXRlIGtleSBpcyBwcmVzc2VkIGFuZCB0aGUgaW5wdXQgaGFzIG5vIHZhbHVlXG5cbiAgICBpZiAoIXRoaXMuX2lzU2VsZWN0T25lRWxlbWVudCAmJiAhdGFyZ2V0LnZhbHVlICYmIGhhc0ZvY3VzZWRJbnB1dCkge1xuICAgICAgdGhpcy5faGFuZGxlQmFja3NwYWNlKGFjdGl2ZUl0ZW1zKTtcblxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH07XG5cbiAgQ2hvaWNlcy5wcm90b3R5cGUuX29uVG91Y2hNb3ZlID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLl93YXNUYXApIHtcbiAgICAgIHRoaXMuX3dhc1RhcCA9IGZhbHNlO1xuICAgIH1cbiAgfTtcblxuICBDaG9pY2VzLnByb3RvdHlwZS5fb25Ub3VjaEVuZCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHZhciB0YXJnZXQgPSAoZXZlbnQgfHwgZXZlbnQudG91Y2hlc1swXSkudGFyZ2V0O1xuICAgIHZhciB0b3VjaFdhc1dpdGhpbkNvbnRhaW5lciA9IHRoaXMuX3dhc1RhcCAmJiB0aGlzLmNvbnRhaW5lck91dGVyLmVsZW1lbnQuY29udGFpbnModGFyZ2V0KTtcblxuICAgIGlmICh0b3VjaFdhc1dpdGhpbkNvbnRhaW5lcikge1xuICAgICAgdmFyIGNvbnRhaW5lcldhc0V4YWN0VGFyZ2V0ID0gdGFyZ2V0ID09PSB0aGlzLmNvbnRhaW5lck91dGVyLmVsZW1lbnQgfHwgdGFyZ2V0ID09PSB0aGlzLmNvbnRhaW5lcklubmVyLmVsZW1lbnQ7XG5cbiAgICAgIGlmIChjb250YWluZXJXYXNFeGFjdFRhcmdldCkge1xuICAgICAgICBpZiAodGhpcy5faXNUZXh0RWxlbWVudCkge1xuICAgICAgICAgI
118HRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9pc1NlbGVjdE11bHRpcGxlRWxlbWVudCkge1xuICAgICAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duKCk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gUHJldmVudHMgZm9jdXMgZXZlbnQgZmlyaW5nXG5cblxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fd2FzVGFwID0gdHJ1ZTtcbiAgfTtcbiAgLyoqXG4gICAqIEhhbmRsZXMgbW91c2Vkb3duIGV2ZW50IGluIGNhcHR1cmUgbW9kZSBmb3IgY29udGFpbmV0T3V0ZXIuZWxlbWVudFxuICAgKi9cblxuXG4gIENob2ljZXMucHJvdG90eXBlLl9vbk1vdXNlRG93biA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG5cbiAgICBpZiAoISh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIElmIHdlIGhhdmUgb3VyIG1vdXNlIGRvd24gb24gdGhlIHNjcm9sbGJhciBhbmQgYXJlIG9uIElFMTEuLi5cblxuXG4gICAgaWYgKElTX0lFMTEgJiYgdGhpcy5jaG9pY2VMaXN0LmVsZW1lbnQuY29udGFpbnModGFyZ2V0KSkge1xuICAgICAgLy8gY2hlY2sgaWYgY2xpY2sgd2FzIG9uIGEgc2Nyb2xsYmFyIGFyZWFcbiAgICAgIHZhciBmaXJzdENob2ljZSA9IHRoaXMuY2hvaWNlTGlzdC5lbGVtZW50LmZpcnN0RWxlbWVudENoaWxkO1xuICAgICAgdmFyIGlzT25TY3JvbGxiYXIgPSB0aGlzLl9kaXJlY3Rpb24gPT09ICdsdHInID8gZXZlbnQub2Zmc2V0WCA+PSBmaXJzdENob2ljZS5vZmZzZXRXaWR0aCA6IGV2ZW50Lm9mZnNldFggPCBmaXJzdENob2ljZS5vZmZzZXRMZWZ0O1xuICAgICAgdGhpcy5faXNTY3JvbGxpbmdPbkllID0gaXNPblNjcm9sbGJhcjtcbiAgICB9XG5cbiAgICBpZiAodGFyZ2V0ID09PSB0aGlzLmlucHV0LmVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgaXRlbSA9IHRhcmdldC5jbG9zZXN0KCdbZGF0YS1idXR0b25dLFtkYXRhLWl0ZW1dLFtkYXRhLWNob2ljZV0nKTtcblxuICAgIGlmIChpdGVtIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgIHZhciBoYXNTaGlmdEtleSA9IGV2ZW50LnNoaWZ0S2V5O1xuICAgICAgdmFyIGFjdGl2ZUl0ZW1zID0gdGhpcy5fc3RvcmUuYWN0aXZlSXRlbXM7XG4gICAgICB2Y
118XIgZGF0YXNldCA9IGl0ZW0uZGF0YXNldDtcblxuICAgICAgaWYgKCdidXR0b24nIGluIGRhdGFzZXQpIHtcbiAgICAgICAgdGhpcy5faGFuZGxlQnV0dG9uQWN0aW9uKGFjdGl2ZUl0ZW1zLCBpdGVtKTtcbiAgICAgIH0gZWxzZSBpZiAoJ2l0ZW0nIGluIGRhdGFzZXQpIHtcbiAgICAgICAgdGhpcy5faGFuZGxlSXRlbUFjdGlvbihhY3RpdmVJdGVtcywgaXRlbSwgaGFzU2hpZnRLZXkpO1xuICAgICAgfSBlbHNlIGlmICgnY2hvaWNlJyBpbiBkYXRhc2V0KSB7XG4gICAgICAgIHRoaXMuX2hhbmRsZUNob2ljZUFjdGlvbihhY3RpdmVJdGVtcywgaXRlbSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfTtcbiAgLyoqXG4gICAqIEhhbmRsZXMgbW91c2VvdmVyIGV2ZW50IG92ZXIgdGhpcy5kcm9wZG93blxuICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50XG4gICAqL1xuXG5cbiAgQ2hvaWNlcy5wcm90b3R5cGUuX29uTW91c2VPdmVyID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIHRhcmdldCA9IF9hLnRhcmdldDtcblxuICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiAnY2hvaWNlJyBpbiB0YXJnZXQuZGF0YXNldCkge1xuICAgICAgdGhpcy5faGlnaGxpZ2h0Q2hvaWNlKHRhcmdldCk7XG4gICAgfVxuICB9O1xuXG4gIENob2ljZXMucHJvdG90eXBlLl9vbkNsaWNrID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIHRhcmdldCA9IF9hLnRhcmdldDtcbiAgICB2YXIgY2xpY2tXYXNXaXRoaW5Db250YWluZXIgPSB0aGlzLmNvbnRhaW5lck91dGVyLmVsZW1lbnQuY29udGFpbnModGFyZ2V0KTtcblxuICAgIGlmIChjbGlja1dhc1dpdGhpbkNvbnRhaW5lcikge1xuICAgICAgaWYgKCF0aGlzLmRyb3Bkb3duLmlzQWN0aXZlICYmICF0aGlzLmNvbnRhaW5lck91dGVyLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzVGV4dEVsZW1lbnQpIHtcbiAgICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gdGhpcy5pbnB1dC5lbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0LmZvY3VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duKCk7XG4gICAgICAgICAgdGhpcy5jb250YWluZXJPdXRlci5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2lzU2VsZWN0T25lRWxlbWVudCAmJiB0YXJnZXQgIT09IHRoaXMuaW5wdXQuZWxlbWVudCAmJiAhdGhpcy5kcm9wZG93bi5lbGVtZW50LmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICAgICAgdGhpcy5oaWRlRHJvcGRvd24oKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGhhc0hpZ2hsaWdodGVkSXRlbXMgPSB0aGlzLl9zdG9yZS5oaWdobGlnaHRlZEFjdGl2ZUl0ZW1zLmxlbmd0aCA+IDA7XG5cbiAgICAgIGlmIChoYXNIaWdobGlnaHRlZEl0ZW1zKSB7XG4gICAgICAgIHRoaXMudW5oaWdobGlnaHRBbGwoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jb250YWluZXJPdXRlci5yZW1vdmVGb2N1c1N0YXRlKCk7XG4gICAgICB0aGlzLmhpZGVEcm9wZG93bih0cnVlKTtcbiAgICB9XG4gIH07XG5cbiAgQ2hvaWNlcy5wcm90b3R5cGUuX29uRm9jdXMgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgX2I7XG5cbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIHRhcmdldCA9IF9hLnRhcmdldDtcbiAgICB2YXIgZm9jdXNXYXNXaXRoaW5Db250YWluZXIgPSB0YXJnZXQgJiYgdGhpcy5jb250YWluZXJPdXRlci5lbGVtZW50LmNvbnRhaW5zKHRhcmdldCk7XG5cbiAgICBpZiAoIWZvY3VzV2FzV2l0aGluQ29udGFpbmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGZvY3VzQWN0aW9ucyA9IChfYiA9IHt9LCBfYltjb25zdGFudHNfMS5URVhUX1RZUEVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHRhcmdldCA9PT0gX3RoaXMuaW5wdXQuZWxlbWVudCkge1xuICAgICAgICBfdGhpcy5jb250YWluZXJPdXRlci5hZGRGb2N1c1N0YXRlKCk7XG4gICAgICB9XG4gICAgfSwgX2JbY29uc3RhbnRzXzEuU0VMRUNUX09ORV9UWVBFXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLmNvbnRhaW5lck91dGVyLmFkZEZvY3VzU3RhdGUoKTtcblxuICAgICAgaWYgKHRhcmdldCA9PT0gX3RoaXMuaW5wdXQuZWxlbWVudCkge1xuICAgICAgICBfdGhpcy5zaG93RHJvcGRvd24odHJ1ZSk7XG4gICAgICB9XG4gICAgfSwgX2JbY29uc3RhbnRzXzEuU0VMRUNUX01VTFRJUExFX1RZUEVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHRhcmdldCA9PT0gX3RoaXMuaW5wdXQuZWxlbWVudCkge1xuICAgICAgICBfdGhpcy5zaG93RHJvcGRvd24odHJ1ZSk7IC8vIElmIGVsZW1lbnQgaXMgYSBzZWxlY3QgYm94LCB0aGUgZm9jdXNlZCBlbGVtZW50IGlzIHRoZSBjb250YWluZXIgYW5kIHRoZSBkcm9wZG93blxuICAgICAgICAvLyBpc24ndCBhbHJlYWR5IG9wZW4sIGZvY3VzIGFuZCBzaG93IGRyb3Bkb3duXG5cblxuICAgICAgICBfdGhpcy5jb250YWluZXJPdXRlci5hZGRGb2N1c1N0YXRlKCk7XG4gICAgICB9XG4gICAgfSwgX2IpO1xuICAgIGZvY3VzQWN0aW9uc1t0aGlzLnBhc3NlZEVsZW1lbnQuZWxlbWVudC50eXBlXSgpO1xuICB9O1xuXG4gIENob2ljZXMucHJvdG90eXBlLl9vbkJsdXIgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgX2I7XG5cbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIHRhcmdldCA9IF9hLnRhcmdldDtcbiAgICB2YXIgYmx1cldhc1dpdGhpbkNvbnRhaW5lciA9IHRhcmdldCAmJiB0aGlzLmNvbnRhaW5lck91dGVyLmVsZW1lbnQuY29udGFpbnModGFyZ2V0KTtcblxuICAgIGlmIChibHVyV2FzV2l0aGluQ29udGFpbmVyICYmICF0aGlzLl9pc1Njcm9sbGluZ09uSWUpIHtcbiAgICAgIHZhciBhY3RpdmVJdGVtcyA9IHRoaXMuX3N0b3JlLmFjdGl2ZUl0ZW1zO1xuICAgICAgdmFyIGhhc0hpZ2hsaWdodGVkSXRlbXNfMSA9IGFjdGl2ZUl0ZW1zLnNvbWUoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uaGlnaGxpZ2h0ZWQ7XG4gICAgICB9KTtcbiAgICAgIHZhciBibHVyQWN0aW9ucyA9IChfYiA9IHt9LCBfYltjb25zdGFudHNfMS5URVhUX1RZUEVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGFyZ2V0ID09PSBfdGhpcy5pbnB1dC5lbGVtZW50KSB7XG4gICAgICAgICAgX3RoaXMuY29udGFpbmVyT3V0ZXIucmVtb3ZlRm9jdXNTdGF0ZSgpO1xuXG4gICAgICAgICAgaWYgKGhhc0hpZ2hsaWdodGVkSXRlbXNfMSkge1xuICAgICAgICAgICAgX3RoaXMudW5oaWdobGlnaHRBbGwoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfdGhpcy5oaWRlRHJvcGRvd24odHJ1ZSk7XG4gICAgICAgI
118H1cbiAgICAgIH0sIF9iW2NvbnN0YW50c18xLlNFTEVDVF9PTkVfVFlQRV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLmNvbnRhaW5lck91dGVyLnJlbW92ZUZvY3VzU3RhdGUoKTtcblxuICAgICAgICBpZiAodGFyZ2V0ID09PSBfdGhpcy5pbnB1dC5lbGVtZW50IHx8IHRhcmdldCA9PT0gX3RoaXMuY29udGFpbmVyT3V0ZXIuZWxlbWVudCAmJiAhX3RoaXMuX2NhblNlYXJjaCkge1xuICAgICAgICAgIF90aGlzLmhpZGVEcm9wZG93bih0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSwgX2JbY29uc3RhbnRzXzEuU0VMRUNUX01VTFRJUExFX1RZUEVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGFyZ2V0ID09PSBfdGhpcy5pbnB1dC5lbGVtZW50KSB7XG4gICAgICAgICAgX3RoaXMuY29udGFpbmVyT3V0ZXIucmVtb3ZlRm9jdXNTdGF0ZSgpO1xuXG4gICAgICAgICAgX3RoaXMuaGlkZURyb3Bkb3duKHRydWUpO1xuXG4gICAgICAgICAgaWYgKGhhc0hpZ2hsaWdodGVkSXRlbXNfMSkge1xuICAgICAgICAgICAgX3RoaXMudW5oaWdobGlnaHRBbGwoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIF9iKTtcbiAgICAgIGJsdXJBY3Rpb25zW3RoaXMucGFzc2VkRWxlbWVudC5lbGVtZW50LnR5cGVdKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE9uIElFMTEsIGNsaWNraW5nIHRoZSBzY29sbGJhciBibHVycyBvdXIgaW5wdXQgYW5kIHRodXNcbiAgICAgIC8vIGNsb3NlcyB0aGUgZHJvcGRvd24uIFRvIHN0b3AgdGhpcywgd2UgcmVmb2N1cyBvdXIgaW5wdXRcbiAgICAgIC8vIGlmIHdlIGtub3cgd2UgYXJlIG9uIElFICphbmQqIGFyZSBzY3JvbGxpbmcuXG4gICAgICB0aGlzLl9pc1Njcm9sbGluZ09uSWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuaW5wdXQuZWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgfTtcblxuICBDaG9pY2VzLnByb3RvdHlwZS5fb25Gb3JtUmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5fc3RvcmUuZGlzcGF0Y2goKDAsIG1pc2NfMS5yZXNldFRvKSh0aGlzLl9pbml0aWFsU3RhdGUpKTtcbiAgfTtcblxuICBDaG9pY2VzLnByb3RvdHlwZS5faGlnaGxpZ2h0Q2hvaWNlID0gZnVuY3Rpb24gKGVsKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIGlmIChlbCA9PT0gdm9pZCAwKSB7XG4gICAgICBlbCA9IG51bGw7XG4gICAgfVxuXG4gICAgdmFyIGNob2ljZXMgPSBBcnJheS5mcm9tKHRoaXMuZHJvcGRvd24uZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1jaG9pY2Utc2VsZWN0YWJsZV0nKSk7XG5cbiAgICBpZiAoIWNob2ljZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHBhc3NlZEVsID0gZWw7XG4gICAgdmFyIGhpZ2hsaWdodGVkQ2hvaWNlcyA9IEFycmF5LmZyb20odGhpcy5kcm9wZG93bi5lbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuXCIuY29uY2F0KHRoaXMuY29uZmlnLmNsYXNzTmFtZXMuaGlnaGxpZ2h0ZWRTdGF0ZSkpKTsgLy8gUmVtb3ZlIGFueSBoaWdobGlnaHRlZCBjaG9pY2VzXG5cbiAgICBoaWdobGlnaHRlZENob2ljZXMuZm9yRWFjaChmdW5jdGlvbiAoY2hvaWNlKSB7XG4gICAgICBjaG9pY2UuY2xhc3NMaXN0LnJlbW92ZShfdGhpcy5jb25maWcuY2xhc3NOYW1lcy5oaWdobGlnaHRlZFN0YXRlKTtcbiAgICAgIGNob2ljZS5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCAnZmFsc2UnKTtcbiAgICB9KTtcblxuICAgIGlmIChwYXNzZWRFbCkge1xuICAgICAgdGhpcy5faGlnaGxpZ2h0UG9zaXRpb24gPSBjaG9pY2VzLmluZGV4T2YocGFzc2VkRWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBIaWdobGlnaHQgY2hvaWNlIGJhc2VkIG9uIGxhc3Qga25vd24gaGlnaGxpZ2h0IGxvY2F0aW9uXG4gICAgICBpZiAoY2hvaWNlcy5sZW5ndGggPiB0aGlzLl9oaWdobGlnaHRQb3NpdGlvbikge1xuICAgICAgICAvLyBJZiB3ZSBoYXZlIGFuIG9wdGlvbiB0byBoaWdobGlnaHRcbiAgICAgICAgcGFzc2VkRWwgPSBjaG9pY2VzW3RoaXMuX2hpZ2hsaWdodFBvc2l0aW9uXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE90aGVyd2lzZSBoaWdobGlnaHQgdGhlIG9wdGlvbiBiZWZvcmVcbiAgICAgICAgcGFzc2VkRWwgPSBjaG9pY2VzW2Nob2ljZXMubGVuZ3RoIC0gMV07XG4gICAgICB9XG5cbiAgICAgIGlmICghcGFzc2VkRWwpIHtcbiAgICAgICAgcGFzc2VkRWwgPSBjaG9pY2VzWzBdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHBhc3NlZEVsLmNsYXNzTGlzdC5hZGQodGhpcy5jb25maWcuY2xhc3NOYW1lcy5oaWdobGlnaHRlZFN0YXRlKTtcbiAgICBwYXNzZWRFbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCAndHJ1ZScpO1xuICAgIHRoaXMucGFzc2VkRWxlbWVudC50cmlnZ2VyRXZlbnQoY29uc3RhbnRzXzEuRVZFTlRTLmhpZ2hsaWdodENob2ljZSwge1xuICAgICAgZWw6IHBhc3NlZEVsXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5kcm9wZG93bi5pc0FjdGl2ZSkge1xuICAgICAgLy8gSUUxMSBpZ25vcmVzIGFyaWEtbGFiZWwgYW5kIGJsb2NrcyB2aXJ0dWFsIGtleWJvYXJkXG4gICAgICAvLyBpZiBhcmlhLWFjdGl2ZWRlc2NlbmRhbnQgaXMgc2V0IHdpdGhvdXQgYSBkcm9wZG93blxuICAgICAgdGhpcy5pbnB1dC5zZXRBY3RpdmVEZXNjZW5kYW50KHBhc3NlZEVsLmlkKTtcbiAgICAgIHRoaXMuY29udGFpbmVyT3V0ZXIuc2V0QWN0aXZlRGVzY2VuZGFudChwYXNzZWRFbC5pZCk7XG4gICAgfVxuICB9O1xuXG4gIENob2ljZXMucHJvdG90eXBlLl9hZGRJdGVtID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIHZhbHVlID0gX2EudmFsdWUsXG4gICAgICAgIF9iID0gX2EubGFiZWwsXG4gICAgICAgIGxhYmVsID0gX2IgPT09IHZvaWQgMCA/IG51bGwgOiBfYixcbiAgICAgICAgX2MgPSBfYS5jaG9pY2VJZCxcbiAgICAgICAgY2hvaWNlSWQgPSBfYyA9PT0gdm9pZCAwID8gLTEgOiBfYyxcbiAgICAgICAgX2QgPSBfYS5ncm91cElkLFxuICAgICAgICBncm91cElkID0gX2QgPT09IHZvaWQgMCA/IC0xIDogX2QsXG4gICAgICAgIF9lID0gX2EuY3VzdG9tUHJvcGVydGllcyxcbiAgICAgICAgY3VzdG9tUHJvcGVydGllcyA9IF9lID09PSB2b2lkIDAgPyB7fSA6IF9lLFxuICAgICAgICBfZiA9IF9hLnBsYWNlaG9sZG
118VyLFxuICAgICAgICBwbGFjZWhvbGRlciA9IF9mID09PSB2b2lkIDAgPyBmYWxzZSA6IF9mLFxuICAgICAgICBfZyA9IF9hLmtleUNvZGUsXG4gICAgICAgIGtleUNvZGUgPSBfZyA9PT0gdm9pZCAwID8gLTEgOiBfZztcbiAgICB2YXIgcGFzc2VkVmFsdWUgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUudHJpbSgpIDogdmFsdWU7XG4gICAgdmFyIGl0ZW1zID0gdGhpcy5fc3RvcmUuaXRlbXM7XG4gICAgdmFyIHBhc3NlZExhYmVsID0gbGFiZWwgfHwgcGFzc2VkVmFsdWU7XG4gICAgdmFyIHBhc3NlZE9wdGlvbklkID0gY2hvaWNlSWQgfHwgLTE7XG4gICAgdmFyIGdyb3VwID0gZ3JvdXBJZCA+PSAwID8gdGhpcy5fc3RvcmUuZ2V0R3JvdXBCeUlkKGdyb3VwSWQpIDogbnVsbDtcbiAgICB2YXIgaWQgPSBpdGVtcyA/IGl0ZW1zLmxlbmd0aCArIDEgOiAxOyAvLyBJZiBhIHByZXBlbmRlZCB2YWx1ZSBoYXMgYmVlbiBwYXNzZWQsIHByZXBlbmQgaXRcblxuICAgIGlmICh0aGlzLmNvbmZpZy5wcmVwZW5kVmFsdWUpIHtcbiAgICAgIHBhc3NlZFZhbHVlID0gdGhpcy5jb25maWcucHJlcGVuZFZhbHVlICsgcGFzc2VkVmFsdWUudG9TdHJpbmcoKTtcbiAgICB9IC8vIElmIGFuIGFwcGVuZGVkIHZhbHVlIGhhcyBiZWVuIHBhc3NlZCwgYXBwZW5kIGl0XG5cblxuICAgIGlmICh0aGlzLmNvbmZpZy5hcHBlbmRWYWx1ZSkge1xuICAgICAgcGFzc2VkVmFsdWUgKz0gdGhpcy5jb25maWcuYXBwZW5kVmFsdWUudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdG9yZS5kaXNwYXRjaCgoMCwgaXRlbXNfMS5hZGRJdGVtKSh7XG4gICAgICB2YWx1ZTogcGFzc2VkVmFsdWUsXG4gICAgICBsYWJlbDogcGFzc2VkTGFiZWwsXG4gICAgICBpZDogaWQsXG4gICAgICBjaG9pY2VJZDogcGFzc2VkT3B0aW9uSWQsXG4gICAgICBncm91cElkOiBncm91cElkLFxuICAgICAgY3VzdG9tUHJvcGVydGllczogY3VzdG9tUHJvcGVydGllcyxcbiAgICAgIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlcixcbiAgICAgIGtleUNvZGU6IGtleUNvZGVcbiAgICB9KSk7XG5cbiAgICBpZiAodGhpcy5faXNTZWxlY3RPbmVFbGVtZW50KSB7XG4gICAgICB0aGlzLnJlbW92ZUFjdGl2ZUl0ZW1zKGlkKTtcbiAgICB9IC8vIFRyaWdnZXIgY2hhbmdlIGV2ZW50XG5cblxuICAgIHRoaXMucGFzc2VkRWxlbWVudC50cmlnZ2VyRXZlbnQoY29uc3RhbnRzXzEuRVZFTlRTLmFkZEl0ZW0sIHtcbiAgICAgIGlkOiBpZCxcbiAgICAgIHZhbHVlOiBwYXNzZWRWYWx1ZSxcbiAgICAgIGxhYmVsOiBwYXNzZWRMYWJlbCxcbiAgICAgIGN1c3RvbVByb3BlcnRpZXM6IGN1c3RvbVByb3BlcnRpZXMsXG4gICAgICBncm91cFZhbHVlOiBncm91cCAmJiBncm91cC52YWx1ZSA/IGdyb3VwLnZhbHVlIDogbnVsbCxcbiAgICAgIGtleUNvZGU6IGtleUNvZGVcbiAgICB9KTtcbiAgfTtcblxuICBDaG9pY2VzLnByb3RvdHlwZS5fcmVtb3ZlSXRlbSA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgdmFyIGlkID0gaXRlbS5pZCxcbiAgICAgICAgdmFsdWUgPSBpdGVtLnZhbHVlLFxuICAgICAgICBsYWJlbCA9IGl0ZW0ubGFiZWwsXG4gICAgICAgIGN1c3RvbVByb3BlcnRpZXMgPSBpdGVtLmN1c3RvbVByb3BlcnRpZXMsXG4gICAgICAgIGNob2ljZUlkID0gaXRlbS5jaG9pY2VJZCxcbiAgICAgICAgZ3JvdXBJZCA9IGl0ZW0uZ3JvdXBJZDtcbiAgICB2YXIgZ3JvdXAgPSBncm91cElkICYmIGdyb3VwSWQgPj0gMCA/IHRoaXMuX3N0b3JlLmdldEdyb3VwQnlJZChncm91cElkKSA6IG51bGw7XG5cbiAgICBpZiAoIWlkIHx8ICFjaG9pY2VJZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3N0b3JlLmRpc3BhdGNoKCgwLCBpdGVtc18xLnJlbW92ZUl0ZW0pKGlkLCBjaG9pY2VJZCkpO1xuXG4gICAgdGhpcy5wYXNzZWRFbGVtZW50LnRyaWdnZXJFdmVudChjb25zdGFudHNfMS5FVkVOVFMucmVtb3ZlSXRlbSwge1xuICAgICAgaWQ6IGlkLFxuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgbGFiZWw6IGxhYmVsLFxuICAgICAgY3VzdG9tUHJvcGVydGllczogY3VzdG9tUHJvcGVydGllcyxcbiAgICAgIGdyb3VwVmFsdWU6IGdyb3VwICYmIGdyb3VwLnZhbHVlID8gZ3JvdXAudmFsdWUgOiBudWxsXG4gICAgfSk7XG4gIH07XG5cbiAgQ2hvaWNlcy5wcm90b3R5cGUuX2FkZENob2ljZSA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciB2YWx1ZSA9IF9hLnZhbHVlLFxuICAgICAgICBfYiA9IF9hLmxhYmVsLFxuICAgICAgICBsYWJlbCA9IF9iID09PSB2b2lkIDAgPyBudWxsIDogX2IsXG4gICAgICAgIF9jID0gX2EuaXNTZWxlY3RlZCxcbiAgICAgICAgaXNTZWxlY3RlZCA9IF9jID09PSB2b2lkIDAgPyBmYWxzZSA6IF9jLFxuICAgICAgICBfZCA9IF9hLmlzRGlzYWJsZWQsXG4gICAgICAgIGlzRGlzYWJsZWQgPSBfZCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfZCxcbiAgICAgICAgX2UgPSBfYS5ncm91cElkLFxuICAgICAgICBncm91cElkID0gX2UgPT09IHZvaWQgMCA/IC0xIDogX2UsXG4gICAgICAgIF9mID0gX2EuY3VzdG9tUHJvcGVydGllcyxcbiAgICAgICAgY3VzdG9tUHJvcGVydGllcyA9IF9mID09PSB2b2lkIDAgPyB7fSA6IF9mLFxuICAgICAgICBfZyA9IF9hLnBsYWNlaG9sZGVyLFxuICAgICAgICBwbGFjZWhvbGRlciA9IF9nID09PSB2b2lkIDAgPyBmYWxzZSA6IF9nLFxuICAgICAgICBfaCA9IF9hLmtleUNvZGUsXG4gICAgICAgIGtleUNvZGUgPSBfaCA9PT0gdm9pZCAwID8gLTEgOiBfaDtcblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBHZW5lcmF0ZSB1bmlxdWUgaWRcblxuXG4gICAgdmFyIGNob2ljZXMgPSB0aGlzLl9zdG9yZS5jaG9pY2VzO1xuICAgIHZhciBjaG9pY2VMYWJlbCA9IGxhYmVsIHx8IHZhbHVlO1xuICAgIHZhciBjaG9pY2VJZCA9IGNob2ljZXMgPyBjaG9pY2VzLmxlbmd0aCArIDEgOiAxO1xuICAgIHZhciBjaG9pY2VFbGVtZW50SWQgPSBcIlwiLmNvbmNhdCh0aGlzLl9iYXNlSWQsIFwiLVwiKS5jb25jYXQodGhpcy5faWROYW1lcy5pdGVtQ2hvaWNlLCBcIi1cIikuY29uY2F0KGNob2ljZUlkKTtcblxuICAgI
118HRoaXMuX3N0b3JlLmRpc3BhdGNoKCgwLCBjaG9pY2VzXzEuYWRkQ2hvaWNlKSh7XG4gICAgICBpZDogY2hvaWNlSWQsXG4gICAgICBncm91cElkOiBncm91cElkLFxuICAgICAgZWxlbWVudElkOiBjaG9pY2VFbGVtZW50SWQsXG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBsYWJlbDogY2hvaWNlTGFiZWwsXG4gICAgICBkaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgIGN1c3RvbVByb3BlcnRpZXM6IGN1c3RvbVByb3BlcnRpZXMsXG4gICAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIsXG4gICAgICBrZXlDb2RlOiBrZXlDb2RlXG4gICAgfSkpO1xuXG4gICAgaWYgKGlzU2VsZWN0ZWQpIHtcbiAgICAgIHRoaXMuX2FkZEl0ZW0oe1xuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGxhYmVsOiBjaG9pY2VMYWJlbCxcbiAgICAgICAgY2hvaWNlSWQ6IGNob2ljZUlkLFxuICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzOiBjdXN0b21Qcm9wZXJ0aWVzLFxuICAgICAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIsXG4gICAgICAgIGtleUNvZGU6IGtleUNvZGVcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBDaG9pY2VzLnByb3RvdHlwZS5fYWRkR3JvdXAgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIGdyb3VwID0gX2EuZ3JvdXAsXG4gICAgICAgIGlkID0gX2EuaWQsXG4gICAgICAgIF9iID0gX2EudmFsdWVLZXksXG4gICAgICAgIHZhbHVlS2V5ID0gX2IgPT09IHZvaWQgMCA/ICd2YWx1ZScgOiBfYixcbiAgICAgICAgX2MgPSBfYS5sYWJlbEtleSxcbiAgICAgICAgbGFiZWxLZXkgPSBfYyA9PT0gdm9pZCAwID8gJ2xhYmVsJyA6IF9jO1xuICAgIHZhciBncm91cENob2ljZXMgPSAoMCwgdXRpbHNfMS5pc1R5cGUpKCdPYmplY3QnLCBncm91cCkgPyBncm91cC5jaG9pY2VzIDogQXJyYXkuZnJvbShncm91cC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnT1BUSU9OJykpO1xuICAgIHZhciBncm91cElkID0gaWQgfHwgTWF0aC5mbG9vcihuZXcgRGF0ZSgpLnZhbHVlT2YoKSAqIE1hdGgucmFuZG9tKCkpO1xuICAgIHZhciBpc0Rpc2FibGVkID0gZ3JvdXAuZGlzYWJsZWQgPyBncm91cC5kaXNhYmxlZCA6IGZhbHNlO1xuXG4gICAgaWYgKGdyb3VwQ2hvaWNlcykge1xuICAgICAgdGhpcy5fc3RvcmUuZGlzcGF0Y2goKDAsIGdyb3Vwc18xLmFkZEdyb3VwKSh7XG4gICAgICAgIHZhbHVlOiBncm91cC5sYWJlbCxcbiAgICAgICAgaWQ6IGdyb3VwSWQsXG4gICAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWRcbiAgICAgIH0pKTtcblxuICAgICAgdmFyIGFkZEdyb3VwQ2hvaWNlcyA9IGZ1bmN0aW9uIChjaG9pY2UpIHtcbiAgICAgICAgdmFyIGlzT3B0RGlzYWJsZWQgPSBjaG9pY2UuZGlzYWJsZWQgfHwgY2hvaWNlLnBhcmVudE5vZGUgJiYgY2hvaWNlLnBhcmVudE5vZGUuZGlzYWJsZWQ7XG5cbiAgICAgICAgX3RoaXMuX2FkZENob2ljZSh7XG4gICAgICAgICAgdmFsdWU6IGNob2ljZVt2YWx1ZUtleV0sXG4gICAgICAgICAgbGFiZWw6ICgwLCB1dGlsc18xLmlzVHlwZSkoJ09iamVjdCcsIGNob2ljZSkgPyBjaG9pY2VbbGFiZWxLZXldIDogY2hvaWNlLmlubmVySFRNTCxcbiAgICAgICAgICBpc1NlbGVjdGVkOiBjaG9pY2Uuc2VsZWN0ZWQsXG4gICAgICAgICAgaXNEaXNhYmxlZDogaXNPcHREaXNhYmxlZCxcbiAgICAgICAgICBncm91cElkOiBncm91cElkLFxuICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXM6IGNob2ljZS5jdXN0b21Qcm9wZXJ0aWVzLFxuICAgICAgICAgIHBsYWNlaG9sZGVyOiBjaG9pY2UucGxhY2Vob2xkZXJcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBncm91cENob2ljZXMuZm9yRWFjaChhZGRHcm91cENob2ljZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zdG9yZS5kaXNwYXRjaCgoMCwgZ3JvdXBzXzEuYWRkR3JvdXApKHtcbiAgICAgICAgdmFsdWU6IGdyb3VwLmxhYmVsLFxuICAgICAgICBpZDogZ3JvdXAuaWQsXG4gICAgICAgIGFjdGl2ZTogZmFsc2UsXG4gICAgICAgIGRpc2FibGVkOiBncm91cC5kaXNhYmxlZFxuICAgICAgfSkpO1xuICAgIH1cbiAgfTtcblxuICBDaG9pY2VzLnByb3RvdHlwZS5fZ2V0VGVtcGxhdGUgPSBmdW5jdGlvbiAodGVtcGxhdGUpIHtcbiAgICB2YXIgX2E7XG5cbiAgICB2YXIgYXJncyA9IFtdO1xuXG4gICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIGFyZ3NbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuXG4gICAgcmV0dXJuIChfYSA9IHRoaXMuX3RlbXBsYXRlc1t0ZW1wbGF0ZV0pLmNhbGwuYXBwbHkoX2EsIF9fc3ByZWFkQXJyYXkoW3RoaXMsIHRoaXMuY29uZmlnXSwgYXJncywgZmFsc2UpKTtcbiAgfTtcblxuICBDaG9pY2VzLnByb3RvdHlwZS5fY3JlYXRlVGVtcGxhdGVzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBjYWxsYmFja09uQ3JlYXRlVGVtcGxhdGVzID0gdGhpcy5jb25maWcuY2FsbGJhY2tPbkNyZWF0ZVRlbXBsYXRlcztcbiAgICB2YXIgdXNlclRlbXBsYXRlcyA9IHt9O1xuXG4gICAgaWYgKGNhbGxiYWNrT25DcmVhdGVUZW1wbGF0ZXMgJiYgdHlwZW9mIGNhbGxiYWNrT25DcmVhdGVUZW1wbGF0ZXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHVzZXJUZW1wbGF0ZXMgPSBjYWxsYmFja09uQ3JlYXRlVGVtcGxhdGVzLmNhbGwodGhpcywgdXRpbHNfMS5zdHJUb0VsKTtcbiAgICB9XG5cbiAgICB0aGlzLl90ZW1wbGF0ZXMgPSAoMCwgZGVlcG1lcmdlXzEuZGVmYXVsdCkodGVtcGxhdGVzXzEuZGVmYXVsdCwgdXNlclRlbXBsYXRlcyk7XG4gIH07XG5cbiAgQ2hvaWNlcy5wcm90b3R5cGUuX2NyZWF0ZUVsZW1lbnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuY29udGFpbmVyT3V0ZXIgPSBuZXcgY29tcG9uZW50c18xLkNvbnRhaW5lcih7XG4gICAgICBlbGVtZW50OiB0aGlzLl9nZXRUZW1wbGF0ZSgnY29udGFpbmVyT3V0ZXInLCB0aGlzLl9kaXJlY3Rpb24sIHRoaXMuX2lzU2VsZWN0RWxlbWVudCwgdGhpcy5faXNTZWxlY3RPbmVFbGVtZW50LCB0aGlzLmNvbmZpZy5zZWFyY2hFbmFibGVkLCB0aGlzLnBhc3NlZEVsZW1lbnQuZWxlbWVudC50eXBlLCB0aGlzLmNvbmZpZy5sYWJlbElkKSxcbiAgICAgIGNsYXNzTmFtZXM6IHRoaXMuY29uZmlnLmNsYXNzTmFtZXMsXG4gICAgICB0eX
118BlOiB0aGlzLnBhc3NlZEVsZW1lbnQuZWxlbWVudC50eXBlLFxuICAgICAgcG9zaXRpb246IHRoaXMuY29uZmlnLnBvc2l0aW9uXG4gICAgfSk7XG4gICAgdGhpcy5jb250YWluZXJJbm5lciA9IG5ldyBjb21wb25lbnRzXzEuQ29udGFpbmVyKHtcbiAgICAgIGVsZW1lbnQ6IHRoaXMuX2dldFRlbXBsYXRlKCdjb250YWluZXJJbm5lcicpLFxuICAgICAgY2xhc3NOYW1lczogdGhpcy5jb25maWcuY2xhc3NOYW1lcyxcbiAgICAgIHR5cGU6IHRoaXMucGFzc2VkRWxlbWVudC5lbGVtZW50LnR5cGUsXG4gICAgICBwb3NpdGlvbjogdGhpcy5jb25maWcucG9zaXRpb25cbiAgICB9KTtcbiAgICB0aGlzLmlucHV0ID0gbmV3IGNvbXBvbmVudHNfMS5JbnB1dCh7XG4gICAgICBlbGVtZW50OiB0aGlzLl9nZXRUZW1wbGF0ZSgnaW5wdXQnLCB0aGlzLl9wbGFjZWhvbGRlclZhbHVlKSxcbiAgICAgIGNsYXNzTmFtZXM6IHRoaXMuY29uZmlnLmNsYXNzTmFtZXMsXG4gICAgICB0eXBlOiB0aGlzLnBhc3NlZEVsZW1lbnQuZWxlbWVudC50eXBlLFxuICAgICAgcHJldmVudFBhc3RlOiAhdGhpcy5jb25maWcucGFzdGVcbiAgICB9KTtcbiAgICB0aGlzLmNob2ljZUxpc3QgPSBuZXcgY29tcG9uZW50c18xLkxpc3Qoe1xuICAgICAgZWxlbWVudDogdGhpcy5fZ2V0VGVtcGxhdGUoJ2Nob2ljZUxpc3QnLCB0aGlzLl9pc1NlbGVjdE9uZUVsZW1lbnQpXG4gICAgfSk7XG4gICAgdGhpcy5pdGVtTGlzdCA9IG5ldyBjb21wb25lbnRzXzEuTGlzdCh7XG4gICAgICBlbGVtZW50OiB0aGlzLl9nZXRUZW1wbGF0ZSgnaXRlbUxpc3QnLCB0aGlzLl9pc1NlbGVjdE9uZUVsZW1lbnQpXG4gICAgfSk7XG4gICAgdGhpcy5kcm9wZG93biA9IG5ldyBjb21wb25lbnRzXzEuRHJvcGRvd24oe1xuICAgICAgZWxlbWVudDogdGhpcy5fZ2V0VGVtcGxhdGUoJ2Ryb3Bkb3duJyksXG4gICAgICBjbGFzc05hbWVzOiB0aGlzLmNvbmZpZy5jbGFzc05hbWVzLFxuICAgICAgdHlwZTogdGhpcy5wYXNzZWRFbGVtZW50LmVsZW1lbnQudHlwZVxuICAgIH0pO1xuICB9O1xuXG4gIENob2ljZXMucHJvdG90eXBlLl9jcmVhdGVTdHJ1Y3R1cmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gSGlkZSBvcmlnaW5hbCBlbGVtZW50XG4gICAgdGhpcy5wYXNzZWRFbGVtZW50LmNvbmNlYWwoKTsgLy8gV3JhcCBpbnB1dCBpbiBjb250YWluZXIgcHJlc2VydmluZyBET00gb3JkZXJpbmdcblxuICAgIHRoaXMuY29udGFpbmVySW5uZXIud3JhcCh0aGlzLnBhc3NlZEVsZW1lbnQuZWxlbWVudCk7IC8vIFdyYXBwZXIgaW5uZXIgY29udGFpbmVyIHdpdGggb3V0ZXIgY29udGFpbmVyXG5cbiAgICB0aGlzLmNvbnRhaW5lck91dGVyLndyYXAodGhpcy5jb250YWluZXJJbm5lci5lbGVtZW50KTtcblxuICAgIGlmICh0aGlzLl9pc1NlbGVjdE9uZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuaW5wdXQucGxhY2Vob2xkZXIgPSB0aGlzLmNvbmZpZy5zZWFyY2hQbGFjZWhvbGRlclZhbHVlIHx8ICcnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fcGxhY2Vob2xkZXJWYWx1ZSkge1xuICAgICAgdGhpcy5pbnB1dC5wbGFjZWhvbGRlciA9IHRoaXMuX3BsYWNlaG9sZG
118VyVmFsdWU7XG4gICAgICB0aGlzLmlucHV0LnNldFdpZHRoKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb250YWluZXJPdXRlci5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuY29udGFpbmVySW5uZXIuZWxlbWVudCk7XG4gICAgdGhpcy5jb250YWluZXJPdXRlci5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZHJvcGRvd24uZWxlbWVudCk7XG4gICAgdGhpcy5jb250YWluZXJJbm5lci5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuaXRlbUxpc3QuZWxlbWVudCk7XG5cbiAgICBpZiAoIXRoaXMuX2lzVGV4dEVsZW1lbnQpIHtcbiAgICAgIHRoaXMuZHJvcGRvd24uZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmNob2ljZUxpc3QuZWxlbWVudCk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9pc1NlbGVjdE9uZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuY29udGFpbmVySW5uZXIuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmlucHV0LmVsZW1lbnQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWcuc2VhcmNoRW5hYmxlZCkge1xuICAgICAgdGhpcy5kcm9wZG93bi5lbGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLmlucHV0LmVsZW1lbnQsIHRoaXMuZHJvcGRvd24uZWxlbWVudC5maXJzdENoaWxkKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faXNTZWxlY3RFbGVtZW50KSB7XG4gICAgICB0aGlzLl9oaWdobGlnaHRQb3NpdGlvbiA9IDA7XG4gICAgICB0aGlzLl9pc1NlYXJjaGluZyA9IGZhbHNlO1xuXG4gICAgICB0aGlzLl9zdGFydExvYWRpbmcoKTtcblxuICAgICAgaWYgKHRoaXMuX3ByZXNldEdyb3Vwcy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5fYWRkUHJlZGVmaW5lZEdyb3Vwcyh0aGlzLl9wcmVzZXRHcm91cHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fYWRkUHJlZGVmaW5lZENob2ljZXModGhpcy5fcHJlc2V0Q2hvaWNlcyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3N0b3BMb2FkaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2lzVGV4dEVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX2FkZFByZWRlZmluZWRJdGVtcyh0aGlzLl9wcmVzZXRJdGVtcyk7XG4gICAgfVxuICB9O1xuXG4gIENob2ljZXMucHJvdG90eXBlLl9hZGRQcmVkZWZpbmVkR3JvdXBzID0gZnVuY3Rpb24gKGdyb3Vwcykge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7IC8vIElmIHdlIGhhdmUgYSBwbGFjZWhvbGRlciBvcHRpb25cblxuXG4gICAgdmFyIHBsYWNlaG9sZGVyQ2hvaWNlID0gdGhpcy5wYXNzZWRFbGVtZW50LnBsYWNlaG9sZGVyT3B0aW9uO1xuXG4gICAgaWYgKHBsYWNlaG9sZGVyQ2hvaWNlICYmIHBsYWNlaG9sZGVyQ2hvaWNlLnBhcmVudE5vZGUgJiYgcGxhY2Vob2xkZXJDaG9pY2UucGFyZW50Tm9kZS50YWdOYW1lID09PSAnU0VMRUNUJykge1xuICAgICAgdGhpcy5fYWRkQ2hvaWNlKHtcbiAgICAgICAgdmFsdWU6IHBsYWNlaG9sZGVyQ2hvaWNlLnZhbHVlLFxuICAgICAgICBsYWJlbDogcGxhY2Vob2xkZXJDaG9pY2UuaW5uZXJIVE1MLFxuICAgICAgICBpc1NlbGVjdGVkOiBwbGFjZWhvbGRlckNob2ljZS5zZWxlY3RlZCxcbiAgICAgICAgaXNEaXNhYmxlZDogcGxhY2Vob2xkZXJDaG9pY2UuZGlzYWJsZWQsXG4gICAgICAgIHBsYWNlaG9sZGVyOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBncm91cHMuZm9yRWFjaChmdW5jdGlvbiAoZ3JvdXApIHtcbiAgICAgIHJldHVybiBfdGhpcy5fYWRkR3JvdXAoe1xuICAgICAgICBncm91cDogZ3JvdXAsXG4gICAgICAgIGlkOiBncm91cC5pZCB8fCBudWxsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBDaG9pY2VzLnByb3RvdHlwZS5fYWRkUHJlZGVmaW5lZENob2ljZXMgPSBmdW5jdGlvbiAoY2hvaWNlcykge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7IC8vIElmIHNvcnRpbmcgaXMgZW5hYmxlZCBvciB0aGUgdXNlciBpcyBzZWFyY2hpbmcsIGZpbHRlciBjaG9pY2VzXG5cblxuICAgIGlmICh0aGlzLmNvbmZpZy5zaG91bGRTb3J0KSB7XG4gICAgICBjaG9pY2VzLnNvcnQodGhpcy5jb25maWcuc29ydGVyKTtcbiAgICB9XG5cbiAgICB2YXIgaGFzU2VsZWN0ZWRDaG9pY2UgPSBjaG9pY2VzLnNvbWUoZnVuY3Rpb24gKGNob2ljZSkge1xuICAgICAgcmV0dXJuIGNob2ljZS5zZWxlY3RlZDtcbiAgICB9KTtcbiAgICB2YXIgZmlyc3RFbmFibGVkQ2hvaWNlSW5kZXggPSBjaG9pY2VzLmZpbmRJbmRleChmdW5jdGlvbiAoY2hvaWNlKSB7XG4gICAgICByZXR1cm4gY2hvaWNlLmRpc2FibGVkID09PSB1bmRlZmluZWQgfHwgIWNob2ljZS5kaXNhYmxlZDtcbiAgICB9KTtcbiAgICBjaG9pY2VzLmZvckVhY2goZnVuY3Rpb24gKGNob2ljZSwgaW5kZXgpIHtcbiAgICAgIHZhciBfYSA9IGNob2ljZS52YWx1ZSxcbiAgICAgICAgICB2YWx1ZSA9IF9hID09PSB2b2lkIDAgPyAnJyA6IF9hLFxuICAgICAgICAgIGxhYmVsID0gY2hvaWNlLmxhYmVsLFxuICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgPSBjaG9pY2UuY3VzdG9tUHJvcGVydGllcyxcbiAgICAgICAgICBwbGFjZWhvbGRlciA9IGNob2ljZS5wbGFjZWhvbGRlcjtcblxuICAgICAgaWYgKF90aGlzLl9pc1NlbGVjdEVsZW1lbnQpIHtcbiAgICAgICAgLy8gSWYgdGhlIGNob2ljZSBpcyBhY3R1YWxseSBhIGdyb3VwXG4gICAgICAgIGlmIChjaG9pY2UuY2hvaWNlcykge1xuICAgICAgICAgIF90aGlzLl9hZGRHcm91cCh7XG4gICAgICAgICAgICBncm91cDogY2hvaWNlLFxuICAgICAgICAgICAgaWQ6IGNob2ljZS5pZCB8fCBudWxsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogSWYgdGhlcmUgaXMgYSBzZWxlY3RlZCBjaG9pY2UgYWxyZWFkeSBvciB0aGUgY2hvaWNlIGlzIG5vdCB0aGUgZmlyc3QgaW5cbiAgICAgICAgICAgKiB0aGUgYXJyYXksIGFkZCBlYWNoIGNob2ljZSBub3JtYWxseS5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIE90aGVyd2lzZSB3ZSBwcmUtc2VsZWN0IHRoZSBmaXJzdCBlbmFibGVkIGNob2ljZSBpbiB0aGUgYXJyYXkgKFwic2VsZWN0LW9uZVwiIG9ubHkpXG4gICAgICAgICAgICovXG4gICAgICAgICAgdmFyIHNob3VsZFByZXNlbGVjdCA9IF90aGlzLl9pc1NlbGVjdE9uZUVsZW1lbnQgJiYgIWhhc1NlbGVjdGVkQ2hvaWNlICYmIGluZGV4ID09PSBmaXJzdEVuYWJsZWRDaG9pY2VJbmRleDtcbiAgICAgICAgICB2Y
118XIgaXNTZWxlY3RlZCA9IHNob3VsZFByZXNlbGVjdCA/IHRydWUgOiBjaG9pY2Uuc2VsZWN0ZWQ7XG4gICAgICAgICAgdmFyIGlzRGlzYWJsZWQgPSBjaG9pY2UuZGlzYWJsZWQ7XG5cbiAgICAgICAgICBfdGhpcy5fYWRkQ2hvaWNlKHtcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIGxhYmVsOiBsYWJlbCxcbiAgICAgICAgICAgIGlzU2VsZWN0ZWQ6ICEhaXNTZWxlY3RlZCxcbiAgICAgICAgICAgIGlzRGlzYWJsZWQ6ICEhaXNEaXNhYmxlZCxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAhIXBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgY3VzdG9tUHJvcGVydGllczogY3VzdG9tUHJvcGVydGllc1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpcy5fYWRkQ2hvaWNlKHtcbiAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgbGFiZWw6IGxhYmVsLFxuICAgICAgICAgIGlzU2VsZWN0ZWQ6ICEhY2hvaWNlLnNlbGVjdGVkLFxuICAgICAgICAgIGlzRGlzYWJsZWQ6ICEhY2hvaWNlLmRpc2FibGVkLFxuICAgICAgICAgIHBsYWNlaG9sZGVyOiAhIWNob2ljZS5wbGFjZWhvbGRlcixcbiAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzOiBjdXN0b21Qcm9wZXJ0aWVzXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIENob2ljZXMucHJvdG90eXBlLl9hZGRQcmVkZWZpbmVkSXRlbXMgPSBmdW5jdGlvbiAoaXRlbXMpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyAmJiBpdGVtLnZhbHVlKSB7XG4gICAgICAgIF90aGlzLl9hZGRJdGVtKHtcbiAgICAgICAgICB2YWx1ZTogaXRlbS52YWx1ZSxcbiAgICAgICAgICBsYWJlbDogaXRlbS5sYWJlbCxcbiAgICAgICAgICBjaG9pY2VJZDogaXRlbS5pZCxcbiAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzOiBpdGVtLmN1c3RvbVByb3BlcnRpZXMsXG4gICAgICAgICAgcGxhY2Vob2xkZXI6IGl0ZW0ucGxhY2Vob2xkZXJcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgX3RoaXMuX2FkZEl0ZW0oe1xuICAgICAgICAgIHZhbHVlOiBpdGVtXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIENob2ljZXMucHJvdG90eXBlLl9zZXRDaG9pY2VPckl0ZW0gPSBmdW5jdGlvbiAoaXRlbSkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB2YXIgaXRlbVR5cGUgPSAoMCwgdXRpbHNfMS5nZXRUeXBlKShpdGVtKS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciBoYW5kbGVUeXBlID0ge1xuICAgICAgb2JqZWN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghaXRlbS52YWx1ZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBJZiB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgc2VsZWN0IGlucHV0LCB3ZSBuZWVkIHRvIGNyZWF0ZSBhbiBvcHRpb24gZmlyc3RcbiAgICAgICAgLy8gdGhhdCBpcyB0aGVuIHNlbGVjdGVkLiBGb3IgdGV4dCBpbnB1dHMgd2UgY2FuIGp1c3QgYWRkIGl0ZW1zIG5vcm1hbGx5LlxuXG5cbiAgICAgICAgaWYgKCFfdGhpcy5faXNUZXh0RWxlbWVudCkge1xuICAgICAgICAgIF90aGlzLl9hZGRDaG9pY2Uoe1xuICAgICAgICAgICAgdmFsdWU6IGl0ZW0udmFsdWUsXG4gICAgICAgICAgICBsYWJlbDogaXRlbS5sYWJlbCxcbiAgICAgICAgICAgIGlzU2VsZWN0ZWQ6IHRydWUsXG4gICAgICAgICAgICBpc0Rpc2FibGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXM6IGl0ZW0uY3VzdG9tUHJvcGVydGllcyxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBpdGVtLnBsYWNlaG9sZGVyXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX3RoaXMuX2FkZEl0ZW0oe1xuICAgICAgICAgICAgdmFsdWU6IGl0ZW0udmFsdWUsXG4gICAgICAgICAgICBsYWJlbDogaXRlbS5sYWJlbCxcbiAgICAgICAgICAgIGNob2ljZUlkOiBpdGVtLmlkLFxuICAgICAgICAgICAgY3VzdG9tUHJvcGVydGllczogaXRlbS5jdXN0b21Qcm9wZXJ0aWVzLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGl0ZW0ucGxhY2Vob2xkZXJcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHN0cmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIV90aGlzLl9pc1RleHRFbGVtZW50KSB7XG4gICAgICAgICAgX3RoaXMuX2FkZENob2ljZSh7XG4gICAgICAgICAgICB2YWx1ZTogaXRlbSxcbiAgICAgICAgICAgIGxhYmVsOiBpdGVtLFxuICAgICAgICAgICAgaXNTZWxlY3RlZDogdHJ1ZSxcbiAgICAgICAgICAgIGlzRGlzYWJsZWQ6IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX3RoaXMuX2FkZEl0ZW0oe1xuICAgICAgICAgICAgdmFsdWU6IGl0ZW1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgaGFuZGxlVHlwZVtpdGVtVHlwZV0oKTtcbiAgfTtcblxuICBDaG9pY2VzLnByb3RvdHlwZS5fZmluZEFuZFNlbGVjdENob2ljZUJ5VmFsdWUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIGNob2ljZXMgPSB0aGlzLl9zdG9yZS5jaG9pY2VzOyAvLyBDaGVjayAndmFsdWUnIHByb3BlcnR5IGV4aXN0cyBhbmQgdGhlIGNob2ljZSBpc24ndCBhbHJlYWR5IHNlbGVjdGVkXG5cbiAgICB2YXIgZm91bmRDaG9pY2UgPSBjaG9pY2VzLmZpbmQoZnVuY3Rpb24gKGNob2ljZSkge1xuICAgICAgcmV0dXJuIF90aGlzLmNvbmZpZy52YWx1ZUNvbXBhcmVyKGNob2ljZS52YWx1ZSwgdmFsdWUpO1xuICAgIH0pO1xuXG4gICAgaWYgKGZvdW5kQ2hvaWNlICYmICFmb3VuZENob2ljZS5zZWxlY3RlZCkge1xuICAgICAgdGhpcy5fYWRkSXRlbSh7XG4gICAgICAgIHZhbHVlOiBmb3VuZENob2ljZS52YWx1ZSxcbiAgICAgICAgbGFiZWw6IGZvdW5kQ2hvaWNlLmxhYmVsLFxuICAgICAgICBjaG9pY2VJZDogZm91bmRDaG9pY2UuaWQsXG4gICAgICAgIGdyb3VwSWQ6IGZvdW5kQ2hvaWNlLmdyb3VwSWQsXG4gICAgICAgIGN1c3RvbVByb3BlcnRpZXM6IGZvdW5kQ2hvaWNlLmN1c3RvbVByb3BlcnRpZXMsXG4gICAgICAgI
118HBsYWNlaG9sZGVyOiBmb3VuZENob2ljZS5wbGFjZWhvbGRlcixcbiAgICAgICAga2V5Q29kZTogZm91bmRDaG9pY2Uua2V5Q29kZVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIENob2ljZXMucHJvdG90eXBlLl9nZW5lcmF0ZVBsYWNlaG9sZGVyVmFsdWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMuX2lzU2VsZWN0RWxlbWVudCAmJiB0aGlzLnBhc3NlZEVsZW1lbnQucGxhY2Vob2xkZXJPcHRpb24pIHtcbiAgICAgIHZhciBwbGFjZWhvbGRlck9wdGlvbiA9IHRoaXMucGFzc2VkRWxlbWVudC5wbGFjZWhvbGRlck9wdGlvbjtcbiAgICAgIHJldHVybiBwbGFjZWhvbGRlck9wdGlvbiA/IHBsYWNlaG9sZGVyT3B0aW9uLnRleHQgOiBudWxsO1xuICAgIH1cblxuICAgIHZhciBfYSA9IHRoaXMuY29uZmlnLFxuICAgICAgICBwbGFjZWhvbGRlciA9IF9hLnBsYWNlaG9sZGVyLFxuICAgICAgICBwbGFjZWhvbGRlclZhbHVlID0gX2EucGxhY2Vob2xkZXJWYWx1ZTtcbiAgICB2YXIgZGF0YXNldCA9IHRoaXMucGFzc2VkRWxlbWVudC5lbGVtZW50LmRhdGFzZXQ7XG5cbiAgICBpZiAocGxhY2Vob2xkZXIpIHtcbiAgICAgIGlmIChwbGFjZWhvbGRlclZhbHVlKSB7XG4gICAgICAgIHJldHVybiBwbGFjZWhvbGRlclZhbHVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YXNldC5wbGFjZWhvbGRlcikge1xuICAgICAgICByZXR1cm4gZGF0YXNldC5wbGFjZWhvbGRlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICByZXR1cm4gQ2hvaWNlcztcbn0oKTtcblxuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBDaG9pY2VzO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNjEzOlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5cbnZhciB1dGlsc18xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3OTkpO1xuXG52YXIgY29uc3RhbnRzXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg4Myk7XG5cbnZhciBDb250YWluZXIgPVxuLyoqIEBjbGFzcyAqL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBDb250YWluZXIoX2EpIHtcbiAgICB2YXIgZWxlbWVudCA9IF9hLmVsZW1lbnQsXG4gICAgICAgIHR5cGUgPSBfYS50eXBlLFxuICAgICAgICBjbGFzc05hbWVzID0gX2EuY2xhc3NOYW1lcyxcbiAgICAgICAgcG9zaXRpb24gPSBfYS5wb3NpdGlvbjtcbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMuY2xhc3NOYW1lcyA9IGNsYXNzTmFtZXM7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLnBvc2l0aW9uID0gcG9zaXRpb247XG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgICB0aGlzLmlzRmxpcHBlZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNGb2N1c3NlZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNEaXNhYmxlZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fb25Gb2N1cyA9IHRoaXMuX29uRm9jdXMuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9vbkJsdXIgPSB0aGlzLl9vbkJsdXIuYmluZCh0aGlzKTtcbiAgfVxuXG4gIENvbnRhaW5lci5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5fb25Gb2N1cyk7XG4gICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCB0aGlzLl9vbkJsdXIpO1xuICB9O1xuXG4gIENvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lcnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5fb25Gb2N1cyk7XG4gICAgdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JsdXInLCB0aGlzLl9vbkJsdXIpO1xuICB9O1xuICAvKipcbiAgICogRGV0ZXJtaW5lIHdoZXRoZXIgY29udGFpbmVyIHNob3VsZCBiZSBmbGlwcGVkIGJhc2VkIG9uIHBhc3NlZFxuICAgKiBkcm9wZG93biBwb3NpdGlvblxuICAgKi9cblxuXG4gIENvbnRhaW5lci5wcm90b3R5cGUuc2hvdWxkRmxpcCA9IGZ1bmN0aW9uIChkcm9wZG93blBvcykge1xuICAgIGlmICh0eXBlb2YgZHJvcGRvd25Qb3MgIT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSAvLyBJZiBmbGlwIGlzIGVuYWJsZWQgYW5kIHR
118oZSBkcm9wZG93biBib3R0b20gcG9zaXRpb24gaXNcbiAgICAvLyBncmVhdGVyIHRoYW4gdGhlIHdpbmRvdyBoZWlnaHQgZmxpcCB0aGUgZHJvcGRvd24uXG5cblxuICAgIHZhciBzaG91bGRGbGlwID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5wb3NpdGlvbiA9PT0gJ2F1dG8nKSB7XG4gICAgICBzaG91bGRGbGlwID0gIXdpbmRvdy5tYXRjaE1lZGlhKFwiKG1pbi1oZWlnaHQ6IFwiLmNvbmNhdChkcm9wZG93blBvcyArIDEsIFwicHgpXCIpKS5tYXRjaGVzO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wb3NpdGlvbiA9PT0gJ3RvcCcpIHtcbiAgICAgIHNob3VsZEZsaXAgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBzaG91bGRGbGlwO1xuICB9O1xuXG4gIENvbnRhaW5lci5wcm90b3R5cGUuc2V0QWN0aXZlRGVzY2VuZGFudCA9IGZ1bmN0aW9uIChhY3RpdmVEZXNjZW5kYW50SUQpIHtcbiAgICB0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnLCBhY3RpdmVEZXNjZW5kYW50SUQpO1xuICB9O1xuXG4gIENvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQWN0aXZlRGVzY2VuZGFudCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnKTtcbiAgfTtcblxuICBDb250YWluZXIucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbiAoZHJvcGRvd25Qb3MpIHtcbiAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZCh0aGlzLmNsYXNzTmFtZXMub3BlblN0YXRlKTtcbiAgICB0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ3RydWUnKTtcbiAgICB0aGlzLmlzT3BlbiA9IHRydWU7XG5cbiAgICBpZiAodGhpcy5zaG91bGRGbGlwKGRyb3Bkb3duUG9zKSkge1xuICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQodGhpcy5jbGFzc05hbWVzLmZsaXBwZWRTdGF0ZSk7XG4gICAgICB0aGlzLmlzRmxpcHBlZCA9IHRydWU7XG4gICAgfVxuICB9O1xuXG4gIENvbnRhaW5lci5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5jbGFzc05hbWVzLm9wZW5TdGF0ZSk7XG4gICAgdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICdmYWxzZScpO1xuICAgIHRoaXMucmVtb3ZlQWN0aXZlRGVzY2VuZGFudCgpO1xuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7IC8vIEEgZHJvcGRvd24gZmxpcHMgaWYgaXQgZG9lcyBub3QgaGF2ZSBzcGFjZSB3aXRoaW4gdGhlIHBhZ2VcblxuICAgIGlmICh0aGlzLmlzRmxpcHBlZCkge1xuICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5jbGFzc05hbWVzLmZsaXBwZWRTdGF0ZSk7XG4gICAgICB0aGlzLmlzRmxpcHBlZCA9IGZhbHNlO1xuICAgIH1cbiAgfTtcblxuICBDb250YWluZXIucHJvdG90eXBlLmZvY3VzID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICghdGhpcy5pc0ZvY3Vzc2VkKSB7XG4gICAgICB0aGlzLmVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gIH07XG5cbiAgQ29udGFpbmVyLnByb3RvdHlwZS5hZGRGb2N1c1N0YXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKHRoaXMuY2xhc3NOYW1lcy5mb2N1c1N0YXRlKTtcbiAgfTtcblxuICBDb250YWluZXIucHJvdG90eXBlLnJlbW92ZUZvY3VzU3RhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5jbGFzc05hbWVzLmZvY3VzU3RhdGUpO1xuICB9O1xuXG4gIENvbnRhaW5lci5wcm90b3R5cGUuZW5hYmxlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuY2xhc3NOYW1lcy5kaXNhYmxlZFN0YXRlKTtcbiAgICB0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWRpc2FibGVkJyk7XG5cbiAgICBpZiAodGhpcy50eXBlID09PSBjb25zdGFudHNfMS5TRUxFQ1RfT05FX1RZUEUpIHtcbiAgICAgIHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTtcbiAgICB9XG5cbiAgICB0aGlzLmlzRGlzYWJsZWQgPSBmYWxzZTtcbiAgfTtcblxuICBDb250YWluZXIucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQodGhpcy5jbGFzc05hbWVzLmRpc2FibGVkU3RhdGUpO1xuICAgIHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGlzYWJsZWQnLCAndHJ1ZScpO1xuXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gY29uc3RhbnRzXzEuU0VMRUNUX09ORV9UWVBFKSB7XG4gICAgICB0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICctMScpO1xuICAgIH1cblxuICAgIHRoaXMuaXNEaXNhYmxlZCA9IHRydWU7XG4gIH07XG5cbiAgQ29udGFpbmVyLnByb3RvdHlwZS53cmFwID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAoMCwgdXRpbHNfMS53cmFwKShlbGVtZW50LCB0aGlzLmVsZW1lbnQpO1xuICB9O1xuXG4gIENvbnRhaW5lci5wcm90b3R5cGUudW53cmFwID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICBpZiAodGhpcy5lbGVtZW50LnBhcmVudE5vZGUpIHtcbiAgICAgIC8vIE1vdmUgcGFzc2VkIGVsZW1lbnQgb3V0c2lkZSB0aGlzIGVsZW1lbnRcbiAgICAgIHRoaXMuZWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlbGVtZW50LCB0aGlzLmVsZW1lbnQpOyAvLyBSZW1vdmUgdGhpcyBlbGVtZW50XG5cbiAgICAgIHRoaXMuZWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZWxlbWVudCk7XG4gICAgfVxuICB9O1xuXG4gIENvbnRhaW5lci5wcm90b3R5cGUuYWRkTG9hZGluZ1N0YXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKHRoaXMuY2xhc3NOYW1lcy5sb2FkaW5nU3RhdGUpO1xuICAgIHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtYnVzeScsICd0cnVlJyk7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICB9O1xuXG4gIENvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlTG9hZGluZ1N0YXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuY2xhc3NOYW1lcy5sb2FkaW5nU3RhdGUpO1xuICAgIHRoaXMuZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtYnVzeScpO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gIH07XG5cbiAgQ29udGFpbmVyLnByb3RvdHlwZS5fb25Gb2N1cyA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmlzRm9jdXNzZWQgPSB0cnVlO1xuICB9O1xuXG4gIENvbnRhaW5lci5wcm90b3R5cGUuX29uQmx1ciA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmlzRm9jdXNzZWQgPSBmYWxzZTtcbiAgfTtcblxuICByZXR1cm4gQ29udGFpbmVyO1xufSgpO1xuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IENvbnRhaW5lcjtcblxuLyoqKi8gfSksXG5cbi8qKiovIDIxNzpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cykge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuXG52YXIgRHJvcGRvd24gPVxuLyoqIEBjbGFzcyAqL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBEcm9wZG93bihfYSkge1xuICAgIHZhciBlbGVtZW50ID0gX2EuZWxlbWVudCxcbiAgICAgICAgdHlwZSA9IF9hLnR5cGUsXG4gICAgICAgIGNsYXNzTmFtZXMgPSBfYS5jbGFzc05hbWVzO1xuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5jbGFzc05hbWVzID0gY2xhc3NOYW1lcztcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcbiAgfVxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEcm9wZG93bi5wcm90b3R5cGUsIFwiZGlzdGFuY2VGcm9tVG9wV2luZG93XCIsIHtcbiAgICAvKipcbiAgICAgKiBCb3R0b20gcG9zaXRpb24gb2YgZHJvcGRvd24gaW4gdmlld3BvcnQgY29vcmRpbmF0ZXNcbiAgICAgKi9cbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybi
118B0aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tO1xuICAgIH0sXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xuXG4gIERyb3Bkb3duLnByb3RvdHlwZS5nZXRDaGlsZCA9IGZ1bmN0aW9uIChzZWxlY3Rvcikge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG4gIH07XG4gIC8qKlxuICAgKiBTaG93IGRyb3Bkb3duIHRvIHVzZXIgYnkgYWRkaW5nIGFjdGl2ZSBzdGF0ZSBjbGFzc1xuICAgKi9cblxuXG4gIERyb3Bkb3duLnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKHRoaXMuY2xhc3NOYW1lcy5hY3RpdmVTdGF0ZSk7XG4gICAgdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICd0cnVlJyk7XG4gICAgdGhpcy5pc0FjdGl2ZSA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBIaWRlIGRyb3Bkb3duIGZyb20gdXNlclxuICAgKi9cblxuXG4gIERyb3Bkb3duLnByb3RvdHlwZS5oaWRlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuY2xhc3NOYW1lcy5hY3RpdmVTdGF0ZSk7XG4gICAgdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICdmYWxzZScpO1xuICAgIHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICByZXR1cm4gRHJvcGRvd247XG59KCk7XG5cbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gRHJvcGRvd247XG5cbi8qKiovIH0pLFxuXG4vKioqLyA1MjA6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXG5cbnZhciBfX2ltcG9ydERlZmF1bHQgPSB0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0IHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgcmV0dXJuIG1vZCAmJiBtb2QuX19lc01vZHVsZSA/IG1vZCA6IHtcbiAgICBcImRlZmF1bHRcIjogbW9kXG4gIH07XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLldyYXBwZWRTZWxlY3QgPSBleHBvcnRzLldyYXBwZWRJbnB1dCA9IGV4cG9ydHMuTGlzdCA9IGV4cG9ydHMuSW5wdXQgPSBleHBvcnRzLkNvbnRhaW5lciA9IGV4cG9ydHMuRHJvcGRvd24gPSB2b2lkIDA7XG5cbnZhciBkcm9wZG93bl8xID0gX19pbXBvcnREZWZhdWx0KF9fd2VicGFja19yZXF1aXJlX18oMjE3KSk7XG5cbmV4cG9ydHMuRHJvcGRvd24gPSBkcm9wZG93bl8xLmRlZmF1bHQ7XG5cbnZhciBjb250YWluZXJfMSA9IF9faW1wb3J0RGVmYXVsdChfX3dlYnBhY2tfcmVxdWlyZV9fKDYxMykpO1xuXG5leHBvcnRzLkNvbnRhaW5lciA9IGNvbnRhaW5lcl8xLmRlZmF1bHQ7XG5cbnZhciBpbnB1dF8xID0gX19pbXBvcnREZWZhdWx0KF9fd2VicGFja19yZXF1aXJlX18oMTEpKTtcblxuZXhwb3J0cy5JbnB1dCA9IGlucHV0XzEuZGVmYXVsdDtcblxudmFyIGxpc3RfMSA9IF9faW1wb3J0RGVmYXVsdChfX3dlYnBhY2tfcmVxdWlyZV9fKDYyNCkpO1xuXG5leHBvcnRzLkxpc3QgPSBsaXN0XzEuZGVmYXVsdDtcblxudmFyIHdyYXBwZWRfaW5wdXRfMSA9IF9faW1wb3J0RGVmYXVsdChfX3dlYnBhY2tfcmVxdWlyZV9fKDU0MSkpO1xuXG5leHBvcnRzLldyYXBwZWRJbnB1dCA9IHdyYXBwZWRfaW5wdXRfMS5kZWZhdWx0O1xuXG52YXIgd3JhcHBlZF9zZWxlY3RfMSA9IF9faW1wb3J0RGVmYXVsdChfX3dlYnBhY2tfcmVxdWlyZV9fKDk4MikpO1xuXG5leHBvcnRzLldyYXBwZWRTZWxlY3QgPSB3cmFwcGVkX3NlbGVjdF8xLmRlZmF1bHQ7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxMTpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuXG52YXIgdXRpbHNfMSA9IF9fd2VicGFja19yZXF1aXJlX18oNzk5KTtcblxudmFyIGNvbnN0YW50c18xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4ODMpO1xuXG52YXIgSW5wdXQgPVxuLyoqIEBjbGFzcyAqL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBJbnB1dChfYSkge1xuICAgIHZhciBlbGVtZW50ID0gX2EuZWxlbWVudCxcbiAgICAgICAgdHlwZSA9IF9hLnR5cGUsXG4gICAgICAgIGNsYXNzTmFtZXMgPSBfYS5jbGFzc05hbWVzLFxuICAgICAgICBwcmV2ZW50UGFzdGUgPSBfYS5wcmV2ZW50UGFzdGU7XG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMuY2xhc3NOYW1lcyA9IGNsYXNzTmFtZXM7XG4gICAgdGhpcy5wcmV2ZW50UGFzdGUgPSBwcmV2ZW50UGFzdGU7XG4gICAgdGhpcy5pc0ZvY3Vzc2VkID0gdGhpcy5lbGVtZW50LmlzRXF1YWxOb2RlKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuICAgIHRoaXMuaXNEaXNhYmxlZCA9IGVsZW1lbnQuZGlzYWJsZWQ7XG4gICAgdGhpcy5fb25QYXN0ZSA9IHRoaXMuX29uUGFzdGUuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9vbklucHV0ID0gdGhpcy5fb25JbnB1dC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX29uRm9jdXMgPSB0aGlzLl9vbkZvY3VzLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fb25CbHVyID0gdGhpcy5fb25CbHVyLmJpbmQodGhpcyk7XG4gIH1cblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW5wdXQucHJvdG90eXBlLCBcInBsYWNlaG9sZGVyXCIsIHtcbiAgICBzZXQ6IGZ1bmN0aW9uIChwbGFjZWhvbGRlcikge1xuICAgICAgdGhpcy5lbGVtZW50LnBsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXI7XG4gICAgfSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnB1dC5wcm90b3R5cGUsIFwidmFsdWVcIiwge1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuICgwLCB1dGlsc18xLnNhbml0aXNlKSh0aGlzLmVsZW1lbnQudmFsdWUpO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHRoaXMuZWxlbWVudC52YWx1ZSA9IHZhbHVlO1xuICAgIH0sXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW5wdXQucHJvdG90eXBlLCBcInJhd1ZhbHVlXCIsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybi
118B0aGlzLmVsZW1lbnQudmFsdWU7XG4gICAgfSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG5cbiAgSW5wdXQucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXJzID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdwYXN0ZScsIHRoaXMuX29uUGFzdGUpO1xuICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIHRoaXMuX29uSW5wdXQsIHtcbiAgICAgIHBhc3NpdmU6IHRydWVcbiAgICB9KTtcbiAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0aGlzLl9vbkZvY3VzLCB7XG4gICAgICBwYXNzaXZlOiB0cnVlXG4gICAgfSk7XG4gICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCB0aGlzLl9vbkJsdXIsIHtcbiAgICAgIHBhc3NpdmU6IHRydWVcbiAgICB9KTtcbiAgfTtcblxuICBJbnB1dC5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lcnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2lucHV0JywgdGhpcy5fb25JbnB1dCk7XG4gICAgdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Bhc3RlJywgdGhpcy5fb25QYXN0ZSk7XG4gICAgdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5fb25Gb2N1cyk7XG4gICAgdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JsdXInLCB0aGlzLl9vbkJsdXIpO1xuICB9O1xuXG4gIElucHV0LnByb3RvdHlwZS5lbmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcbiAgICB0aGlzLmlzRGlzYWJsZWQgPSBmYWxzZTtcbiAgfTtcblxuICBJbnB1dC5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsICcnKTtcbiAgICB0aGlzLmlzRGlzYWJsZWQgPSB0cnVlO1xuICB9O1xuXG4gIElucHV0LnByb3RvdHlwZS5mb2N1cyA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuaXNGb2N1c3NlZCkge1xuICAgICAgdGhpcy5lbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICB9O1xuXG4gIElucHV0LnByb3RvdHlwZS5ibHVyID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLmlzRm9jdXNzZWQpIHtcbiAgICAgIHRoaXMuZWxlbWVudC5ibHVyKCk7XG4gICAgfVxuICB9O1xuXG4gIElucHV0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uIChzZXRXaWR0aCkge1xuICAgIGlmIChzZXRXaWR0aCA9PT0gdm9pZCAwKSB7XG4gICAgICBzZXRXaWR0aCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZWxlbWVudC52YWx1ZSkge1xuICAgICAgdGhpcy5lbGVtZW50LnZhbHVlID0gJyc7XG4gICAgfVxuXG4gICAgaWYgKHNldFdpZHRoKSB7XG4gICAgICB0aGlzLnNldFdpZHRoKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBTZXQgdGhlIGNvcnJlY3QgaW5wdXQgd2lkdGggYmFzZWQgb24gcGxhY2Vob2xkZXJcbiAgICogdmFsdWUgb3IgaW5wdXQgdmFsdWVcbiAgICovXG5cblxuICBJbnB1dC5wcm90b3R5cGUuc2V0V2lkdGggPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gUmVzaXplIGlucHV0IHRvIGNvbnRlbnRzIG9yIHBsYWNlaG9sZGVyXG4gICAgdmFyIF9hID0gdGhpcy5lbGVtZW50LFxuICAgICAgICBzdHlsZSA9IF9hLnN0eWxlLFxuICAgICAgICB2YWx1ZSA9IF9hLnZhbHVlLFxuICAgICAgICBwbGFjZWhvbGRlciA9IF9hLnBsYWNlaG9sZGVyO1xuICAgIHN0eWxlLm1pbldpZHRoID0gXCJcIi5jb25jYXQocGxhY2Vob2xkZXIubGVuZ3RoICsgMSwgXCJjaFwiKTtcbiAgICBzdHlsZS53aWR0aCA9IFwiXCIuY29uY2F0KHZhbHVlLmxlbmd0aCArIDEsIFwiY2hcIik7XG4gIH07XG5cbiAgSW5wdXQucHJvdG90eXBlLnNldEFjdGl2ZURlc2NlbmRhbnQgPSBmdW5jdGlvbiAoYWN0aXZlRGVzY2VuZGFudElEKSB7XG4gICAgdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1hY3RpdmVkZXNjZW5kYW50JywgYWN0aXZlRGVzY2VuZGFudElEKTtcbiAgfTtcblxuICBJbnB1dC5wcm90b3R5cGUucmVtb3ZlQWN0aXZlRGVzY2VuZGFudCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnKTtcbiAgfTtcblxuICBJbnB1dC5wcm90b3R5cGUuX29uSW5wdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMudHlwZSAhPT0gY29uc3RhbnRzXzEuU0VMRUNUX09ORV9UWVBFKSB7XG4gICAgICB0aGlzLnNldFdpZHRoKCk7XG4gICAgfVxuICB9O1xuXG4gIElucHV0LnByb3RvdHlwZS5fb25QYXN0ZSA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmICh0aGlzLnByZXZlbnRQYXN0ZSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH07XG5cbiAgSW5wdXQucHJvdG90eXBlLl9vbkZvY3VzID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuaXNGb2N1c3NlZCA9IHRydWU7XG4gIH07XG5cbiAgSW5wdXQucHJvdG90eXBlLl9vbkJsdXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5pc0ZvY3Vzc2VkID0gZmFsc2U7XG4gIH07XG5cbiAgcmV0dXJuIElucHV0O1xufSgpO1xuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IElucHV0O1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNjI0OlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5cbnZhciBjb25zdGFudHNfMSA9IF9fd2VicGFja19yZXF1aXJlX18oODgzKTtcblxudmFyIExpc3QgPVxuLyoqIEBjbGFzcyAqL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBMaXN0KF9hKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBfYS5lbGVtZW50O1xuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5zY3JvbGxQb3MgPSB0aGlzLmVsZW1lbnQuc2Nyb2xsVG9wO1xuICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5lbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgfVxuXG4gIExpc3QucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZWxlbWVudC5pbm5lckhUTUwgPSAnJztcbiAgfTtcblxuICBMaXN0LnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChub2RlKTtcbiAgfTtcblxuICBMaXN0LnByb3RvdHlwZS5nZXRDaGlsZCA9IGZ1bmN0aW9uIChzZWxlY3Rvcikge1xuICAgIHJldHVybi
118B0aGlzLmVsZW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG4gIH07XG5cbiAgTGlzdC5wcm90b3R5cGUuaGFzQ2hpbGRyZW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudC5oYXNDaGlsZE5vZGVzKCk7XG4gIH07XG5cbiAgTGlzdC5wcm90b3R5cGUuc2Nyb2xsVG9Ub3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lbGVtZW50LnNjcm9sbFRvcCA9IDA7XG4gIH07XG5cbiAgTGlzdC5wcm90b3R5cGUuc2Nyb2xsVG9DaGlsZEVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlbWVudCwgZGlyZWN0aW9uKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBsaXN0SGVpZ2h0ID0gdGhpcy5lbGVtZW50Lm9mZnNldEhlaWdodDsgLy8gU2Nyb2xsIHBvc2l0aW9uIG9mIGRyb3Bkb3duXG5cbiAgICB2YXIgbGlzdFNjcm9sbFBvc2l0aW9uID0gdGhpcy5lbGVtZW50LnNjcm9sbFRvcCArIGxpc3RIZWlnaHQ7XG4gICAgdmFyIGVsZW1lbnRIZWlnaHQgPSBlbGVtZW50Lm9mZnNldEhlaWdodDsgLy8gRGlzdGFuY2UgZnJvbSBib3R0b20gb2YgZWxlbWVudCB0byB0b3Agb2YgcGFyZW50XG5cbiAgICB2YXIgZWxlbWVudFBvcyA9IGVsZW1lbnQub2Zmc2V0VG9wICsgZWxlbWVudEhlaWdodDsgLy8gRGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBlbGVtZW50IGFuZCBzY3JvbGwgcG9zaXRpb25cblxuICAgIHZhciBkZXN0aW5hdGlvbiA9IGRpcmVjdGlvbiA+IDAgPyB0aGlzLmVsZW1lbnQuc2Nyb2xsVG9wICsgZWxlbWVudFBvcyAtIGxpc3RTY3JvbGxQb3NpdGlvbiA6IGVsZW1lbnQub2Zmc2V0VG9wO1xuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5fYW5pbWF0ZVNjcm9sbChkZXN0aW5hdGlvbiwgZGlyZWN0aW9uKTtcbiAgICB9KTtcbiAgfTtcblxuICBMaXN0LnByb3RvdHlwZS5fc2Nyb2xsRG93biA9IGZ1bmN0aW9uIChzY3JvbGxQb3MsIHN0cmVuZ3RoLCBkZXN0aW5hdGlvbikge1xuICAgIHZhciBlYXNpbmcgPSAoZGVzdGluYXRpb24gLSBzY3JvbGxQb3MpIC8gc3RyZW5ndGg7XG4gICAgdmFyIGRpc3RhbmNlID0gZWFzaW5nID4gMSA/IGVhc2luZyA6IDE7XG4gICAgdGhpcy5lbGVtZW50LnNjcm9sbFRvcCA9IHNjcm9sbFBvcyArIGRpc3RhbmNlO1xuICB9O1xuXG4gIExpc3QucHJvdG90eXBlLl9zY3JvbGxVcCA9IGZ1bmN0aW9uIChzY3JvbGxQb3MsIHN0cmVuZ3RoLCBkZXN0aW5hdGlvbikge1xuICAgIHZhciBlYXNpbmcgPSAoc2Nyb2xsUG9zIC0gZGVzdGluYXRpb24pIC8gc3RyZW5ndGg7XG4gICAgdmFyIGRpc3RhbmNlID0gZWFzaW5nID4gMSA/IGVhc2luZyA6IDE7XG4gICAgdGhpcy5lbGVtZW50LnNjcm9sbFRvcCA9IHNjcm9sbFBvcyAtIGRpc3RhbmNlO1xuICB9O1xuXG4gIExpc3QucHJvdG90eXBlLl9hbmltYXRlU2Nyb2xsID0gZnVuY3Rpb24gKGRlc3RpbmF0aW9uLCBkaXJlY3Rpb24pIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIHN0cmVuZ3RoID0gY29uc3RhbnRzXzEuU0NST0xMSU5HX1NQRUVEO1xuICAgIHZhciBjaG9pY2VMaXN0U2Nyb2xsVG9wID0gdGhpcy5lbGVtZW50LnNjcm9sbFRvcDtcbiAgICB2YXIgY29udGludWVBbmltYXRpb24gPSBmYWxzZTtcblxuICAgIGlmIChkaXJlY3Rpb24gPiAwKSB7XG4gICAgICB0aGlzLl9zY3JvbGxEb3duKGNob2ljZUxpc3RTY3JvbGxUb3AsIHN0cmVuZ3RoLCBkZXN0aW5hdGlvbik7XG5cbiAgICAgIGlmIChjaG9pY2VMaXN0U2Nyb2xsVG9wIDwgZGVzdGluYXRpb24pIHtcbiAgICAgICAgY29udGludWVBbmltYXRpb24gPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zY3JvbGxVcChjaG9pY2VMaXN0U2Nyb2xsVG9wLCBzdHJlbmd0aCwgZGVzdGluYXRpb24pO1xuXG4gICAgICBpZiAoY2hvaWNlTGlzdFNjcm9sbFRvcCA+IGRlc3RpbmF0aW9uKSB7XG4gICAgICAgIGNvbnRpbnVlQW5pbWF0aW9uID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29udGludWVBbmltYXRpb24pIHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLl9hbmltYXRlU2Nyb2xsKGRlc3RpbmF0aW9uLCBkaXJlY3Rpb24pO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBMaXN0O1xufSgpO1xuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IExpc3Q7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA3MzA6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcblxudmFyIHV0aWxzXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc5OSk7XG5cbnZhciBXcmFwcGVkRWxlbWVudCA9XG4vKiogQGNsYXNzICovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFdyYXBwZWRFbGVtZW50KF9hKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBfYS5lbGVtZW50LFxuICAgICAgICBjbGFzc05hbWVzID0gX2EuY2xhc3NOYW1lcztcbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMuY2xhc3NOYW1lcyA9IGNsYXNzTmFtZXM7XG5cbiAgICBpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkgJiYgIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTFNlbGVjdEVsZW1lbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGVsZW1lbnQgcGFzc2VkJyk7XG4gICAgfVxuXG4gICAgdGhpcy5pc0Rpc2FibGVkID0gZmFsc2U7XG4gIH1cblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoV3JhcHBlZEVsZW1lbnQucHJvdG90eXBlLCBcImlzQWN0aXZlXCIsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQuZGF0YXNldC5jaG9pY2UgPT09ICdhY3RpdmUnO1xuICAgIH0sXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoV3JhcHBlZEVsZW1lbnQucHJvdG90eXBlLCBcImRpclwiLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbGVtZW50LmRpcjtcbiAgICB9LFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyYXBwZWRFbGVtZW50LnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbGVtZW50LnZhbHVlO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIC8vIHlvdSBtdXN0IGRlZmluZSBzZXR0ZXIgaGVyZSBvdGhlcndpc2UgaXQgd2lsbCBiZSByZWFkb25seSBwcm9wZXJ0eVxuICAgICAgdGhpcy5lbGVtZW50LnZhbHVlID0gdmFsdWU7XG4gICAgfSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG5cbiAgV3JhcHBlZEVsZW1lbnQucHJvdG90eXBlLmNvbmNlYWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gSGlkZSBwYXNzZWQgaW5wdXRcbiAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZCh0aGlzLmNsYXNzTmFtZXMuaW5wdXQpO1xuICAgIHRoaXMuZWxlbWVudC5oaWRkZW4gPSB0cnVlOyAvLyBSZW1vdmUgZWxlbWVudCBmcm9tIHRhYiBpbmRleFxuXG4gICAgdGhpcy5lbGVtZW50LnRhYkluZGV4ID0gLTE7IC8vIEJhY2t1cCBvcmlnaW5hbCBzdHlsZXMgaWYgYW55XG5cbiAgICB2YXIgb3JpZ1N0eWxlID0gdGhpcy5lbGVtZW50LmdldEF0dHJpYnV0ZSgnc3R5bGUnKTtcblxuICAgIGlmIChvcmlnU3R5bGUpIHtcbiAgICAgIHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtY2hvaWNlLW9yaWctc3R5bGUnLCBvcmlnU3R5bGUpO1xuICAgIH1cblxuICAgI
118HRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtY2hvaWNlJywgJ2FjdGl2ZScpO1xuICB9O1xuXG4gIFdyYXBwZWRFbGVtZW50LnByb3RvdHlwZS5yZXZlYWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gUmVpbnN0YXRlIHBhc3NlZCBlbGVtZW50XG4gICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5jbGFzc05hbWVzLmlucHV0KTtcbiAgICB0aGlzLmVsZW1lbnQuaGlkZGVuID0gZmFsc2U7XG4gICAgdGhpcy5lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgndGFiaW5kZXgnKTsgLy8gUmVjb3ZlciBvcmlnaW5hbCBzdHlsZXMgaWYgYW55XG5cbiAgICB2YXIgb3JpZ1N0eWxlID0gdGhpcy5lbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1jaG9pY2Utb3JpZy1zdHlsZScpO1xuXG4gICAgaWYgKG9yaWdTdHlsZSkge1xuICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1jaG9pY2Utb3JpZy1zdHlsZScpO1xuICAgICAgdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBvcmlnU3R5bGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpO1xuICAgIH1cblxuICAgIHRoaXMuZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtY2hvaWNlJyk7IC8vIFJlLWFzc2lnbiB2YWx1ZXMgLSB0aGlzIGlzIHdlaXJkLCBJIGtub3dcbiAgICAvLyBAdG9kbyBGaWd1cmUgb3V0IHdoeSB3ZSBuZWVkIHRvIGRvIHRoaXNcblxuICAgIHRoaXMuZWxlbWVudC52YWx1ZSA9IHRoaXMuZWxlbWVudC52YWx1ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWFzc2lnblxuICB9O1xuXG4gIFdyYXBwZWRFbGVtZW50LnByb3RvdHlwZS5lbmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcbiAgICB0aGlzLmVsZW1lbnQuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmlzRGlzYWJsZWQgPSBmYWxzZTtcbiAgfTtcblxuICBXcmFwcGVkRWxlbWVudC5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsICcnKTtcbiAgICB0aGlzLmVsZW1lbnQuZGlzYWJsZWQgPSB0cnVlO1xuICAgIHRoaXMuaXNEaXNhYmxlZCA9IHRydWU7XG4gIH07XG5cbiAgV3JhcHBlZEVsZW1lbnQucHJvdG90eXBlLnRyaWdnZXJFdmVudCA9IGZ1bmN0aW9uIChldmVudFR5cGUsIGRhdGEpIHtcbiAgICAoMCwgdXRpbHNfMS5kaXNwYXRjaEV2ZW50KSh0aGlzLmVsZW1lbnQsIGV2ZW50VHlwZSwgZGF0YSk7XG4gIH07XG5cbiAgcmV0dXJuIFdyYXBwZWRFbGVtZW50O1xufSgpO1xuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IFdyYXBwZWRFbGVtZW50O1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNTQxOlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblxuXG52YXIgX19leHRlbmRzID0gdGhpcyAmJiB0aGlzLl9fZXh0ZW5kcyB8fCBmdW5jdGlvbiAoKSB7XG4gIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHtcbiAgICAgIF9fcHJvdG9fXzogW11cbiAgICB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGQuX19wcm90b19fID0gYjtcbiAgICB9IHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdO1xuICAgIH07XG5cbiAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcblxuICAgIGZ1bmN0aW9uIF9fKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7XG4gICAgfVxuXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICB9O1xufSgpO1xuXG52YXIgX19pbXBvcnREZWZhdWx0ID0gdGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCB8fCBmdW5jdGlvbiAobW9kKSB7XG4gIHJldHVybiBtb2QgJiYgbW9kLl9fZXNNb2R1bGUgPyBtb2QgOiB7XG4gICAgXCJkZWZhdWx0XCI6IG1vZFxuICB9O1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuXG52YXIgd3JhcHBlZF9lbGVtZW50XzEgPSBfX2ltcG9ydERlZmF1bHQoX193ZWJwYWNrX3JlcXVpcmVfXyg3MzApKTtcblxudmFyIFdyYXBwZWRJbnB1dCA9XG4vKiogQGNsYXNzICovXG5mdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyhXcmFwcGVkSW5wdXQsIF9zdXBlcik7XG5cbiAgZnVuY3Rpb24gV3JhcHBlZElucHV0KF9hKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBfYS5lbGVtZW50LFxuICAgICAgICBjbGFzc05hbWVzID0gX2EuY2xhc3NOYW1lcyxcbiAgICAgICAgZGVsaW1pdGVyID0gX2EuZGVsaW1pdGVyO1xuXG4gICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywge1xuICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgIGNsYXNzTmFtZXM6IGNsYXNzTmFtZXNcbiAgICB9KSB8fCB0aGlzO1xuXG4gICAgX3RoaXMuZGVsaW1pdGVyID0gZGVsaW1pdGVyO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcmFwcGVkSW5wdXQucHJvdG90eXBlLCBcInZhbHVlXCIsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQudmFsdWU7XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSgndmFsdWUnLCB2YWx1ZSk7XG4gICAgICB0aGlzLmVsZW1lbnQudmFsdWUgPSB2YWx1ZTtcbiAgICB9LFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbiAgcmV0dXJuIFdyYXBwZWRJbnB1dDtcbn0od3JhcHBlZF9lbGVtZW50XzEuZGVmYXVsdCk7XG5cbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gV3JhcHBlZElucHV0O1xuXG4vKioqLyB9KSxcblxuLyoqKi8gOTgyOlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblxuXG52YXIgX19leHRlbmRzID0gdGhpcyAmJiB0aGlzLl9fZXh0ZW5kcyB8fCBmdW5jdGlvbiAoKSB7XG4gIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHtcbiAgICAgIF9fcHJvdG9fXzogW11cbiAgICB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGQuX19wcm90b19fID0gYjtcbiAgICB9I
118Hx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdO1xuICAgIH07XG5cbiAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcblxuICAgIGZ1bmN0aW9uIF9fKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7XG4gICAgfVxuXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICB9O1xufSgpO1xuXG52YXIgX19pbXBvcnREZWZhdWx0ID0gdGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCB8fCBmdW5jdGlvbiAobW9kKSB7XG4gIHJldHVybiBtb2QgJiYgbW9kLl9fZXNNb2R1bGUgPyBtb2QgOiB7XG4gICAgXCJkZWZhdWx0XCI6IG1vZFxuICB9O1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuXG52YXIgd3JhcHBlZF9lbGVtZW50XzEgPSBfX2ltcG9ydERlZmF1bHQoX193ZWJwYWNrX3JlcXVpcmVfXyg3MzApKTtcblxudmFyIFdyYXBwZWRTZWxlY3QgPVxuLyoqIEBjbGFzcyAqL1xuZnVuY3Rpb24gKF9zdXBlcikge1xuICBfX2V4dGVuZHMoV3JhcHBlZFNlbGVjdCwgX3N1cGVyKTtcblxuICBmdW5jdGlvbiBXcmFwcGVkU2VsZWN0KF9hKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBfYS5lbGVtZW50LFxuICAgICAgICBjbGFzc05hbWVzID0gX2EuY2xhc3NOYW1lcyxcbiAgICAgICAgdGVtcGxhdGUgPSBfYS50ZW1wbGF0ZTtcblxuICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHtcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICBjbGFzc05hbWVzOiBjbGFzc05hbWVzXG4gICAgfSkgfHwgdGhpcztcblxuICAgIF90aGlzLnRlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyYXBwZWRTZWxlY3QucHJvdG90eXBlLCBcInBsYWNlaG9sZGVyT3B0aW9uXCIsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQucXVlcnlTZWxlY3Rvcignb3B0aW9uW3ZhbHVlPVwiXCJdJykgfHwgLy8gQmFja3dhcmQgY29tcGF0aWJpbGl0eSBsYXllciBmb3IgdGhlIG5vbi1zdGFuZGFyZCBwbGFjZWhvbGRlciBhdHRyaWJ1dGUgc3VwcG9ydGVkIGluIG9sZGVyIHZlcnNpb25zLlxuICAgICAgdGhpcy5lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ29wdGlvbltwbGFjZWhvbGRlcl0nKTtcbiAgICB9LFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyYXBwZWRTZWxlY3QucHJvdG90eXBlLCBcIm9wdGlvbkdyb3Vwc1wiLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ09QVEdST1VQJykpO1xuICAgIH0sXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoV3JhcHBlZFNlbGVjdC5wcm90b3R5cGUsIFwib3B0aW9uc1wiLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmVsZW1lbnQub3B0aW9ucyk7XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICB2Y
118XIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICB2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cbiAgICAgIHZhciBhZGRPcHRpb25Ub0ZyYWdtZW50ID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGEgc3RhbmRhcmQgc2VsZWN0IG9wdGlvblxuICAgICAgICB2YXIgb3B0aW9uID0gX3RoaXMudGVtcGxhdGUoZGF0YSk7IC8vIEFwcGVuZCBpdCB0byBmcmFnbWVudFxuXG5cbiAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQob3B0aW9uKTtcbiAgICAgIH07IC8vIEFkZCBlYWNoIGxpc3QgaXRlbSB0byBsaXN0XG5cblxuICAgICAgb3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvcHRpb25EYXRhKSB7XG4gICAgICAgIHJldHVybiBhZGRPcHRpb25Ub0ZyYWdtZW50KG9wdGlvbkRhdGEpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmFwcGVuZERvY0ZyYWdtZW50KGZyYWdtZW50KTtcbiAgICB9LFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcblxuICBXcmFwcGVkU2VsZWN0LnByb3RvdHlwZS5hcHBlbmREb2NGcmFnbWVudCA9IGZ1bmN0aW9uIChmcmFnbWVudCkge1xuICAgIHRoaXMuZWxlbWVudC5pbm5lckhUTUwgPSAnJztcbiAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpO1xuICB9O1xuXG4gIHJldHVybiBXcmFwcGVkU2VsZWN0O1xufSh3cmFwcGVkX2VsZW1lbnRfMS5kZWZhdWx0KTtcblxuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBXcmFwcGVkU2VsZWN0O1xuXG4vKioqLyB9KSxcblxuLyoqKi8gODgzOlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzKSB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLlNDUk9MTElOR19TUEVFRCA9IGV4cG9ydHMuU0VMRUNUX01VTFRJUExFX1RZUEUgPSBleHBvcnRzLlNFTEVDVF9PTkVfVFlQRSA9IGV4cG9ydHMuVEVYVF9UWVBFID0gZXhwb3J0cy5LRVlfQ09ERVMgPSBleHBvcnRzLkFDVElPTl9UWVBFUyA9IGV4cG9ydHMuRVZFTlRTID0gdm9pZCAwO1xuZXhwb3J0cy5FVkVOVFMgPSB7XG4gIHNob3dEcm9wZG93bjogJ3Nob3dEcm9wZG93bicsXG4gIGhpZGVEcm9wZG93bjogJ2hpZGVEcm9wZG93bicsXG4gIGNoYW5nZTogJ2NoYW5nZScsXG4gIGNob2ljZTogJ2Nob2ljZScsXG4gIHNlYXJjaDogJ3NlYXJjaCcsXG4gIGFkZEl0ZW06ICdhZGRJdGVtJyxcbiAgcmVtb3ZlSXRlbTogJ3JlbW92ZUl0ZW0nLFxuICBoaWdobGlnaHRJdGVtOiAnaGlnaGxpZ2h0SXRlbScsXG4gIGhpZ2hsaWdodENob2ljZTogJ2hpZ2hsaWdodENob2ljZScsXG4gIHVuaGlnaGxpZ2h0SXRlbTogJ3VuaGlnaGxpZ2h0SXRlbSdcbn07XG5leHBvcnRzLkFDVElPTl9UWVBFUyA9IHtcbiAgQUREX0NIT0lDRTogJ0FERF9DSE9JQ0UnLFxuICBGSUxURVJfQ0hPSUNFUzogJ0ZJTFRFUl9DSE9JQ0VTJyxcbiAgQUNUSVZBVEVfQ0hPSUNFUzogJ0FDVElWQVRFX0NIT0lDRVMnLFxuICBDTEVBUl9DSE9JQ0VTOiAnQ0xFQVJfQ0hPSUNFUycsXG4gIEFERF9HUk9VUDogJ0FERF9HUk9VUCcsXG4gIEFERF9JVEVNOiAnQUREX0lURU0nLFxuICBSRU1PVkVfSVRFTTogJ1JFTU9WRV9JVEVNJyxcbiAgSElHSExJR0hUX0lURU06ICdISUdITElHSFRfSVRFTScsXG4gIENMRUFSX0FMTDogJ0NMRUFSX0FMTCcsXG4gIFJFU0VUX1RPOiAnUkVTRVRfVE8nLFxuICBTRVRfSVNfTE9BRElORzogJ1NFVF9JU19MT0FESU5HJ1xufTtcbmV4cG9ydHMuS0VZX0NPREVTID0ge1xuICBCQUNLX0tFWTogNDYsXG4gIERFTEVURV9LRVk6IDgsXG4gIEVOVEVSX0tFWTogMTMsXG4gIEFfS0VZOiA2NSxcbiAgRVNDX0tFWTogMjcsXG4gIFVQX0tFWTogMzgsXG4gIERPV05fS0VZOiA0MCxcbiAgUEFHRV9VUF9LRVk6IDMzLFxuICBQQUdFX0RPV05fS0VZOiAzNFxufTtcbmV4cG9ydHMuVEVYVF9UWVBFID0gJ3RleHQnO1xuZXhwb3J0cy5TRUxFQ1RfT05FX1RZUEUgPSAnc2VsZWN0LW9uZSc7XG5leHBvcnRzLlNFTEVDVF9NVUxUSVBMRV9UWVBFID0gJ3NlbGVjdC1tdWx0aXBsZSc7XG5leHBvcnRzLlNDUk9MTElOR19TUEVFRCA9IDQ7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA3ODk6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuREVGQVVMVF9DT05GSUcgPSBleHBvcnRzLkRFRkFVTFRfQ0xBU1NOQU1FUyA9IHZvaWQgMDtcblxudmFyIHV0aWxzXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc5OSk7XG5cbmV4cG9ydHMuREVGQVVMVF9DTEFTU05BTUVTID0ge1xuICBjb250YWluZXJPdXRlcjogJ2Nob2ljZXMnLFxuICBjb250YWluZXJJbm5lcjogJ2Nob2ljZXNfX2lubmVyJyxcbiAgaW5wdXQ6ICdjaG9pY2VzX19pbnB1dCcsXG4gIGlucHV0Q2xvbmVkOiAnY2hvaWNlc19faW5wdXQtLWNsb25lZCcsXG4gIGxpc3Q6ICdjaG9pY2VzX19saXN0JyxcbiAgbGlzdEl0ZW1zOiAnY2hvaWNlc19fbGlzdC0tbXVsdGlwbGUnLFxuICBsaXN0U2luZ2xlOiAnY2hvaWNlc19fbGlzdC0tc2luZ2xlJyxcbiAgbGlzdERyb3Bkb3duOiAnY2hvaWNlc19fbGlzdC0tZHJvcGRvd24nLFxuICBpdGVtOiAnY2hvaWNlc19faXRlbScsXG4gIGl0ZW1TZWxlY3RhYmxlOiAnY2hvaWNlc19faXRlbS0tc2VsZWN0YWJsZScsXG4gIGl0ZW1EaXNhYmxlZDogJ2Nob2ljZXNfX2l0ZW0tLWRpc2FibGVkJyxcbiAgaXRlbUNob2ljZTogJ2Nob2ljZXNfX2l0ZW0tLWNob2ljZScsXG4gIHBsYWNlaG9sZGVyOiAnY2hvaWNlc19fcGxhY2Vob2xkZXInLFxuICBncm91cDogJ2Nob2ljZXNfX2dyb3VwJyxcbiAgZ3JvdXBIZWFkaW5nOiAnY2hvaWNlc19faGVhZGluZycsXG4gIGJ1dHRvbjogJ2Nob2ljZXNfX2J1dHRvbicsXG4gIGFjdGl2ZVN0YXRlOiAnaXMtYWN0aXZlJyxcbiAgZm9jdXNTdGF0ZTogJ2lzLWZvY3VzZWQnLFxuICBvcGVuU3RhdGU6ICdpcy1vcGVuJyxcbiAgZGlzYWJsZWRTdGF0ZTogJ2lzLWRpc2FibGVkJyxcbiAgaGlnaGxpZ2h0ZWRTdGF0ZTogJ2lzLWhpZ2hsaWdodGVkJyxcbiAgc2VsZWN0ZWRTdGF0ZTogJ2lzLXNlbGVjdGVkJyxcbiAgZmxpcHBlZFN0YXRlOiAnaXMtZmxpcHBlZCcsXG4gIGxvYWRpbmdTdGF0ZTogJ2lzLWxvYWRpbmcnLFxuICBub1Jlc3VsdHM6ICdoYXMtbm8tcmVzdWx0cycsXG4gIG5vQ2hvaWNlczogJ2hhcy1uby1jaG9pY2VzJ1xufTtcbmV4cG9ydHMuREVGQVVMVF9DT05GSUcgPSB7XG4gIGl0ZW1zOiBbXSxcbiAgY2hvaWNlczogW10sXG4gIHNpbGVudDogZmFsc2UsXG4gIHJlbmRlckNob2ljZUxpbWl0OiAtMSxcbiAgbWF4SXRlbUNvdW50OiAtMSxcbiAgYWRkSXRlbXM6IHRydWUsXG4gIGFkZEl0ZW1GaWx0ZXI6IG51bGwsXG4gIHJlbW92ZUl0ZW1zOiB0cnVlLFxuICByZW1vdmVJdGVtQnV0dG9uOiBmYWxzZSxcbiAgZWRpdEl0ZW1zOiBmYWxzZSxcbiAgYWxsb3dIVE1MOiB0cnVlLFxuICBkdXBsaWNhdGVJdGVtc0FsbG93ZWQ6IHRydWUsXG4gIGRlbGltaXRlcjogJywnLFxuICBwYXN0ZTogdHJ1ZSxcbiAgc2VhcmNoRW5hYmxlZDogdHJ1ZSxcbiAgc2VhcmNoQ2hvaWNlczogdHJ1ZSxcbiAgc2VhcmNoRmxvb3I6IDEsXG4gIHNlYXJjaFJlc3VsdExpbWl0OiA0LFxuICBzZWFyY2hGaWVsZHM6IFsnbGFiZWwnLCAndmFsdWUnXSxcbiAgcG9zaXRpb246ICdhdXRvJyxcbiAgcmVzZXRTY3JvbGxQb3NpdGlvbjogdHJ1ZSxcbiAgc2hvdWxkU29ydDogdHJ1ZSxcbiAgc2hvdWxkU29ydEl0ZW1zOiBmYWxzZSxcbiAgc29ydGVyOiB1dGlsc18xLnNvcnRCeUFscGhhLFxuICBwbGFjZWhvbGRlcjogdHJ1ZSxcbiAgcGxhY2Vob2xkZXJWYWx1ZTogbnVsbCxcbiAgc2VhcmNoUGxhY2Vob2xkZXJWYWx1ZTogbnVsbCxcbiAgcHJlcGVuZFZhbHVlOiBudWxsLFxuICBhcHBlbmRWYWx1ZTogbnVsbCxcbiAgcmVuZGVyU2VsZWN0ZWRDaG9pY2VzOiAnYXV0bycsXG4gIGxvYWRpbmdUZXh0OiAnTG9hZGluZy4uLicsXG4gIG5vUmVzdWx0c1RleHQ6ICdObyByZXN1bHRzIGZvdW5kJyxcbiAgbm9DaG9pY2VzVGV4dDogJ05vIGNob2ljZXMgdG8gY2hvb3NlIGZyb20nLFxuICBpdGVtU2VsZWN0VGV4dDogJ1ByZXNzIHRvIHNlbGVjdCcsXG4gIHVuaXF1ZUl0ZW1UZXh0OiAnT25seSB1bmlxdWUgdmFsdWVzIGNhbiBiZSBhZGRlZCcsXG4gIGN1c3RvbUFkZEl0ZW1UZXh0OiAnT25seSB2YWx1ZXMgbWF0Y2hpbmcgc3BlY2lmaWMgY29uZGl0aW9ucyBjYW4gYmUgYWRkZWQnLFxuICBhZGRJdGVtVGV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuIFwiUHJlc3MgRW50ZXIgdG8gYWRkIDxiPlxcXCJcIi5jb25jYXQoKDAsIHV0aWxzXzEuc2FuaXRpc2UpKHZhbHVlKSwgXCJcXFwiPC9iPlwiKTtcbiAgfSxcbiAgbWF4SXRlbVRleHQ6IGZ1bmN0aW9uIChtYXhJdGVtQ291bnQpIHtcbiAgICByZXR1cm4gXCJPbmx5IFwiLmNvbmNhdChtYXhJdGVtQ291bnQsIFwiIHZhbHVlcyBjYW4gYmUgYWRkZWRcIik7XG4gIH0sXG4gIHZhbHVlQ29tcGFyZXI6IGZ1bmN0aW9uICh2YWx1ZTEsIHZhbHVlMikge1xuICAgIHJldHVybi
118B2YWx1ZTEgPT09IHZhbHVlMjtcbiAgfSxcbiAgZnVzZU9wdGlvbnM6IHtcbiAgICBpbmNsdWRlU2NvcmU6IHRydWVcbiAgfSxcbiAgbGFiZWxJZDogJycsXG4gIGNhbGxiYWNrT25Jbml0OiBudWxsLFxuICBjYWxsYmFja09uQ3JlYXRlVGVtcGxhdGVzOiBudWxsLFxuICBjbGFzc05hbWVzOiBleHBvcnRzLkRFRkFVTFRfQ0xBU1NOQU1FU1xufTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDE4OlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzKSB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA5Nzg6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMpIHtcblxuXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDk0ODpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cykge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMzU5OlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzKSB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAyODU6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMpIHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDUzMzpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cykge1xuXG5cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMTg3OlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblxuXG52YXIgX19jcmVhdGVCaW5kaW5nID0gdGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZyB8fCAoT2JqZWN0LmNyZWF0ZSA/IGZ1bmN0aW9uIChvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIG1ba107XG4gICAgfVxuICB9KTtcbn0gOiBmdW5jdGlvbiAobywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgb1trMl0gPSBtW2tdO1xufSk7XG5cbnZhciBfX2V4cG9ydFN0YXIgPSB0aGlzICYmIHRoaXMuX19leHBvcnRTdGFyIHx8IGZ1bmN0aW9uIChtLCBleHBvcnRzKSB7XG4gIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXhwb3J0cywgcCkpIF9fY3JlYXRlQmluZGluZyhleHBvcnRzLCBtLCBwKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcblxuX19leHBvcnRTdGFyKF9fd2VicGFja19yZXF1aXJlX18oMTgpLCBleHBvcnRzKTtcblxuX19leHBvcnRTdGFyKF9fd2VicGFja19yZXF1aXJlX18oOTc4KSwgZXhwb3J0cyk7XG5cbl9fZXhwb3J0U3RhcihfX3dlYnBhY2tfcmVxdWlyZV9fKDk0OCksIGV4cG9ydHMpO1xuXG5fX2V4cG9ydFN0YXIoX193ZWJwYWNrX3JlcXVpcmVfXygzNTkpLCBleHBvcnRzKTtcblxuX19leHBvcnRTdGFyKF9fd2VicGFja19yZXF1aXJlX18oMjg1KSwgZXhwb3J0cyk7XG5cbl9fZXhwb3J0U3RhcihfX3dlYnBhY2tfcmVxdWlyZV9fKDUzMyksIGV4cG9ydHMpO1xuXG5fX2V4cG9ydFN0YXIoX193ZWJwYWNrX3JlcXVpcmVfXygyODcpLCBleHBvcnRzKTtcblxuX19leHBvcnRTdGFyKF9fd2VicGFja19yZXF1aXJlX18oMTMyKSwgZXhwb3J0cyk7XG5cbl9fZXhwb3J0U3RhcihfX3dlYnBhY2tfcmVxdWlyZV9fKDgzNyksIGV4cG9ydHMpO1xuXG5fX2V4cG9ydFN0YXIoX193ZWJwYWNrX3JlcXVpcmVfXyg1OTgpLCBleHBvcnRzKTtcblxuX19leHBvcnRTdGFyKF9fd2VicGFja19yZXF1aXJlX18oMzY5KSwgZXhwb3J0cyk7XG5cbl9fZXhwb3J0U3RhcihfX3dlYnBhY2tfcmVxdWlyZV9fKDM3KSwgZXhwb3J0cyk7XG5cbl9fZXhwb3J0U3RhcihfX3dlYnBhY2tfcmVxdWlyZV9fKDQ3KSwgZXhwb3J0cyk7XG5cbl9fZXhwb3J0U3RhcihfX3dlYnBhY2tfcmVxdWlyZV9fKDkyMyksIGV4cG9ydHMpO1xuXG5fX2V4cG9ydFN0YXIoX193ZWJwYWNrX3JlcXVpcmVfXyg4NzYpLCBleHBvcnRzKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDI4Nzpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cykge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMTMyOlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzKSB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA4Mzc6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMpIHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDU5ODpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cykge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMzc6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMpIHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDM2OTpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cykge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNDc6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMpIHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDkyMzpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cykge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gODc2OlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzKSB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA3OTk6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMpIHtcblxuXG4vKiBlc2xpbnQtZGlzYWJsZSBAd
118HlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuZGlmZiA9IGV4cG9ydHMuY2xvbmVPYmplY3QgPSBleHBvcnRzLmV4aXN0c0luQXJyYXkgPSBleHBvcnRzLmRpc3BhdGNoRXZlbnQgPSBleHBvcnRzLnNvcnRCeVNjb3JlID0gZXhwb3J0cy5zb3J0QnlBbHBoYSA9IGV4cG9ydHMuc3RyVG9FbCA9IGV4cG9ydHMuc2FuaXRpc2UgPSBleHBvcnRzLmlzU2Nyb2xsZWRJbnRvVmlldyA9IGV4cG9ydHMuZ2V0QWRqYWNlbnRFbCA9IGV4cG9ydHMud3JhcCA9IGV4cG9ydHMuaXNUeXBlID0gZXhwb3J0cy5nZXRUeXBlID0gZXhwb3J0cy5nZW5lcmF0ZUlkID0gZXhwb3J0cy5nZW5lcmF0ZUNoYXJzID0gZXhwb3J0cy5nZXRSYW5kb21OdW1iZXIgPSB2b2lkIDA7XG5cbnZhciBnZXRSYW5kb21OdW1iZXIgPSBmdW5jdGlvbiAobWluLCBtYXgpIHtcbiAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pICsgbWluKTtcbn07XG5cbmV4cG9ydHMuZ2V0UmFuZG9tTnVtYmVyID0gZ2V0UmFuZG9tTnVtYmVyO1xuXG52YXIgZ2VuZXJhdGVDaGFycyA9IGZ1bmN0aW9uIChsZW5ndGgpIHtcbiAgcmV0dXJuIEFycmF5LmZyb20oe1xuICAgIGxlbmd0aDogbGVuZ3RoXG4gIH0sIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gKDAsIGV4cG9ydHMuZ2V0UmFuZG9tTnVtYmVyKSgwLCAzNikudG9TdHJpbmcoMzYpO1xuICB9KS5qb2luKCcnKTtcbn07XG5cbmV4cG9ydHMuZ2VuZXJhdGVDaGFycyA9IGdlbmVyYXRlQ2hhcnM7XG5cbnZhciBnZW5lcmF0ZUlkID0gZnVuY3Rpb24gKGVsZW1lbnQsIHByZWZpeCkge1xuICB2YXIgaWQgPSBlbGVtZW50LmlkIHx8IGVsZW1lbnQubmFtZSAmJiBcIlwiLmNvbmNhdChlbGVtZW50Lm5hbWUsIFwiLVwiKS5jb25jYXQoKDAsIGV4cG9ydHMuZ2VuZXJhdGVDaGFycykoMikpIHx8ICgwLCBleHBvcnRzLmdlbmVyYXRlQ2hhcnMpKDQpO1xuICBpZCA9IGlkLnJlcGxhY2UoLyg6fFxcLnxcXFt8XFxdfCwpL2csICcnKTtcbiAgaWQgPSBcIlwiLmNvbmNhdChwcmVmaXgsIFwiLVwiKS5jb25jYXQoaWQpO1xuICByZXR1cm4gaWQ7XG59O1xuXG5leHBvcnRzLmdlbmVyYXRlSWQgPSBnZW5lcmF0ZUlkO1xuXG52YXIgZ2V0VHlwZSA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopLnNsaWNlKDgsIC0xKTtcbn07XG5cbmV4cG9ydHMuZ2V0VHlwZSA9IGdldFR5cGU7XG5cbnZhciBpc1R5cGUgPSBmdW5jdGlvbiAodHlwZSwgb2JqKSB7XG4gIHJldHVybiBvYmogIT09IHVuZGVmaW5lZCAmJiBvYmogIT09IG51bGwgJiYgKDAsIGV4cG9ydHMuZ2V0VHlwZSkob2JqKSA9PT0gdHlwZTtcbn07XG5cbmV4cG9ydHMuaXNUeXBlID0gaXNUeXBlO1xuXG52YXIgd3JhcCA9IGZ1bmN0aW9uIChlbGVtZW50LCB3cmFwcGVyKSB7XG4gIGlmICh3cmFwcGVyID09PSB2b2lkIDApIHtcbiAgICB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIH1cblxuICBpZiAoZWxlbWVudC5wYXJlbnROb2RlKSB7XG4gICAgaWYgKGVsZW1lbnQubmV4dFNpYmxpbmcpIHtcbiAgICAgIGVsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUod3JhcHBlciwgZWxlbWVudC5uZXh0U2libGluZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh3cmFwcGVyKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd3JhcHBlci5hcHBlbmRDaGlsZChlbGVtZW50KTtcbn07XG5cbmV4cG9ydHMud3JhcCA9IHdyYXA7XG5cbnZhciBnZXRBZGphY2VudEVsID0gZnVuY3Rpb24gKHN0YXJ0RWwsIHNlbGVjdG9yLCBkaXJlY3Rpb24pIHtcbiAgaWYgKGRpcmVjdGlvbiA9PT0gdm9pZCAwKSB7XG4gICAgZGlyZWN0aW9uID0gMTtcbiAgfVxuXG4gIHZhciBwcm9wID0gXCJcIi5jb25jYXQoZGlyZWN0aW9uID4gMCA/ICduZXh0JyA6ICdwcmV2aW91cycsIFwiRWxlbWVudFNpYmxpbmdcIik7XG4gIHZhciBzaWJsaW5nID0gc3RhcnRFbFtwcm9wXTtcblxuICB3aGlsZSAoc2libGluZykge1xuICAgIGlmIChzaWJsaW5nLm1hdGNoZXMoc2VsZWN0b3IpKSB7XG4gICAgICByZXR1cm4gc2libGluZztcbiAgICB9XG5cbiAgICBzaWJsaW5nID0gc2libGluZ1twcm9wXTtcbiAgfVxuXG4gIHJldHVybiBzaWJsaW5nO1xufTtcblxuZXhwb3J0cy5nZXRBZGphY2VudEVsID0gZ2V0QWRqYWNlbnRFbDtcblxudmFyIGlzU2Nyb2xsZWRJbnRvVmlldyA9IGZ1bmN0aW9uIChlbGVtZW50LCBwYXJlbnQsIGRpcmVjdGlvbikge1xuICBpZiAoZGlyZWN0aW9uID09PSB2b2lkIDApIHtcbiAgICBkaXJlY3Rpb24gPSAxO1xuICB9XG5cbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGlzVmlzaWJsZTtcblxuICBpZiAoZGlyZWN0aW9uID4gMCkge1xuICAgIC8vIEluIHZpZXcgZnJvbSBib3R0b21cbiAgICBpc1Zpc2libGUgPSBwYXJlbnQuc2Nyb2xsVG9wICsgcGFyZW50Lm9mZnNldEhlaWdodCA+PSBlbGVtZW50Lm9mZnNldFRvcCArIGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICB9IGVsc2Uge1xuICAgIC8vIEluIHZpZXcgZnJvbSB0b3BcbiAgICBpc1Zpc2libGUgPSBlbGVtZW50Lm9mZnNldFRvcCA+PSBwYXJlbnQuc2Nyb2xsVG9wO1xuICB9XG5cbiAgcmV0dXJuIGlzVmlzaWJsZTtcbn07XG5cbmV4cG9ydHMuaXNTY3JvbGxlZEludG9WaWV3ID0gaXNTY3JvbGxlZEludG9WaWV3O1xuXG52YXIgc2FuaXRpc2UgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gdmFsdWUucmVwbGFjZSgvJi9nLCAnJmFtcDsnKS5yZXBsYWNlKC8+L2csICcmZ3Q7JykucmVwbGFjZSgvPC9nLCAnJmx0OycpLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKTtcbn07XG5cbmV4cG9ydHMuc2FuaXRpc2UgPSBzYW5pdGlzZTtcblxuZXhwb3J0cy5zdHJUb0VsID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdG1wRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChzdHIpIHtcbiAgICB2YXIgY2xlYW5lZElucHV0ID0gc3RyLnRyaW0oKTtcbiAgICB0bXBFbC5pbm5lckhUTUwgPSBjbGVhbmVkSW5wdXQ7XG4gICAgdmFyIGZpcmxk
118Q2hpbGQgPSB0bXBFbC5jaGlsZHJlblswXTtcblxuICAgIHdoaWxlICh0bXBFbC5maXJzdENoaWxkKSB7XG4gICAgICB0bXBFbC5yZW1vdmVDaGlsZCh0bXBFbC5maXJzdENoaWxkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlybGRDaGlsZDtcbiAgfTtcbn0oKTtcblxudmFyIHNvcnRCeUFscGhhID0gZnVuY3Rpb24gKF9hLCBfYikge1xuICB2YXIgdmFsdWUgPSBfYS52YWx1ZSxcbiAgICAgIF9jID0gX2EubGFiZWwsXG4gICAgICBsYWJlbCA9IF9jID09PSB2b2lkIDAgPyB2YWx1ZSA6IF9jO1xuICB2YXIgdmFsdWUyID0gX2IudmFsdWUsXG4gICAgICBfZCA9IF9iLmxhYmVsLFxuICAgICAgbGFiZWwyID0gX2QgPT09IHZvaWQgMCA/IHZhbHVlMiA6IF9kO1xuICByZXR1cm4gbGFiZWwubG9jYWxlQ29tcGFyZShsYWJlbDIsIFtdLCB7XG4gICAgc2Vuc2l0aXZpdHk6ICdiYXNlJyxcbiAgICBpZ25vcmVQdW5jdHVhdGlvbjogdHJ1ZSxcbiAgICBudW1lcmljOiB0cnVlXG4gIH0pO1xufTtcblxuZXhwb3J0cy5zb3J0QnlBbHBoYSA9IHNvcnRCeUFscGhhO1xuXG52YXIgc29ydEJ5U2NvcmUgPSBmdW5jdGlvbiAoYSwgYikge1xuICB2YXIgX2EgPSBhLnNjb3JlLFxuICAgICAgc2NvcmVBID0gX2EgPT09IHZvaWQgMCA/IDAgOiBfYTtcbiAgdmFyIF9iID0gYi5zY29yZSxcbiAgICAgIHNjb3JlQiA9IF9iID09PSB2b2lkIDAgPyAwIDogX2I7XG4gIHJldHVybiBzY29yZUEgLSBzY29yZUI7XG59O1xuXG5leHBvcnRzLnNvcnRCeVNjb3JlID0gc29ydEJ5U2NvcmU7XG5cbnZhciBkaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIHR5cGUsIGN1c3RvbUFyZ3MpIHtcbiAgaWYgKGN1c3RvbUFyZ3MgPT09IHZvaWQgMCkge1xuICAgIGN1c3RvbUFyZ3MgPSBudWxsO1xuICB9XG5cbiAgdmFyIGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KHR5cGUsIHtcbiAgICBkZXRhaWw6IGN1c3RvbUFyZ3MsXG4gICAgYnViYmxlczogdHJ1ZSxcbiAgICBjYW5jZWxhYmxlOiB0cnVlXG4gIH0pO1xuICByZXR1cm4gZWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbn07XG5cbmV4cG9ydHMuZGlzcGF0Y2hFdmVudCA9IGRpc3BhdGNoRXZlbnQ7XG5cbnZhciBleGlzdHNJbkFycmF5ID0gZnVuY3Rpb24gKGFycmF5LCB2YWx1ZSwga2V5KSB7XG4gIGlmIChrZXkgPT09IHZvaWQgMCkge1xuICAgIGtleSA9ICd2YWx1ZSc7XG4gIH1cblxuICByZXR1cm4gYXJyYXkuc29tZShmdW5jdGlvbiAoaXRlbSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gaXRlbVtrZXldID09PSB2YWx1ZS50cmltKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGl0ZW1ba2V5XSA9PT0gdmFsdWU7XG4gIH0pO1xufTtcblxuZXhwb3J0cy5leGlzdHNJbkFycmF5ID0gZXhpc3RzSW5BcnJheTtcblxudmFyIGNsb25lT2JqZWN0ID0gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmopKTtcbn07XG5cbmV4cG9ydHMuY2xvbmVPYmplY3QgPSBjbG9uZU9iamVjdDtcbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBvZiBrZXlzIHByZXNlbnQgb24gdGhlIGZpcnN0IGJ1dCBtaXNzaW5nIG9uIHRoZSBzZWNvbmQgb2JqZWN0XG4gKi9cblxudmFyIGRpZmYgPSBmdW5jdGlvbiAoYSwgYikge1xuICB2YXIgYUtleXMgPSBPYmplY3Qua2V5cyhhKS5zb3J0KCk7XG4gIHZhciBiS2V5cyA9IE9iamVjdC5rZXlzKGIpLnNvcnQoKTtcbiAgcmV0dXJuIGFLZXlzLmZpbHRlcihmdW5jdGlvbiAoaSkge1xuICAgIHJldHVybiBiS2V5cy5pbmRleE9mKGkpIDwgMDtcbiAgfSk7XG59O1xuXG5leHBvcnRzLmRpZmYgPSBkaWZmO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMjczOlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzKSB7XG5cblxuXG52YXIgX19zcHJlYWRBcnJheSA9IHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5IHx8IGZ1bmN0aW9uICh0bywgZnJvbSwgcGFjaykge1xuICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICBhcltpXSA9IGZyb21baV07XG4gICAgfVxuICB9XG4gIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5kZWZh
118dWx0U3RhdGUgPSB2b2lkIDA7XG5leHBvcnRzLmRlZmF1bHRTdGF0ZSA9IFtdO1xuXG5mdW5jdGlvbiBjaG9pY2VzKHN0YXRlLCBhY3Rpb24pIHtcbiAgaWYgKHN0YXRlID09PSB2b2lkIDApIHtcbiAgICBzdGF0ZSA9IGV4cG9ydHMuZGVmYXVsdFN0YXRlO1xuICB9XG5cbiAgaWYgKGFjdGlvbiA9PT0gdm9pZCAwKSB7XG4gICAgYWN0aW9uID0ge307XG4gIH1cblxuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnQUREX0NIT0lDRSc6XG4gICAgICB7XG4gICAgICAgIHZhciBhZGRDaG9pY2VBY3Rpb24gPSBhY3Rpb247XG4gICAgICAgIHZhciBjaG9pY2UgPSB7XG4gICAgICAgICAgaWQ6IGFkZENob2ljZUFjdGlvbi5pZCxcbiAgICAgICAgICBlbGVtZW50SWQ6IGFkZENob2ljZUFjdGlvbi5lbGVtZW50SWQsXG4gICAgICAgICAgZ3JvdXBJZDogYWRkQ2hvaWNlQWN0aW9uLmdyb3VwSWQsXG4gICAgICAgICAgdmFsdWU6IGFkZENob2ljZUFjdGlvbi52YWx1ZSxcbiAgICAgICAgICBsYWJlbDogYWRkQ2hvaWNlQWN0aW9uLmxhYmVsIHx8IGFkZENob2ljZUFjdGlvbi52YWx1ZSxcbiAgICAgICAgICBkaXNhYmxlZDogYWRkQ2hvaWNlQWN0aW9uLmRpc2FibGVkIHx8IGZhbHNlLFxuICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICBhY3RpdmU6IHRydWUsXG4gICAgICAgICAgc2NvcmU6IDk5OTksXG4gICAgICAgICAgY3VzdG9tUHJvcGVydGllczogYWRkQ2hvaWNlQWN0aW9uLmN1c3RvbVByb3BlcnRpZXMsXG4gICAgICAgICAgcGxhY2Vob2xkZXI6IGFkZENob2ljZUFjdGlvbi5wbGFjZWhvbGRlciB8fCBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICAvKlxuICAgICAgICAgIEEgZGlzYWJsZWQgY2hvaWNlIGFwcGVhcnMgaW4gdGhlIGNob2ljZSBkcm9wZG93biBidXQgY2Fubm90IGJlIHNlbGVjdGVkXG4gICAgICAgICAgQSBzZWxlY3RlZCBjaG9pY2UgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIHBhc3NlZCBpbnB1dCdzIHZhbHVlIChhZGRlZCBhcyBhbiBpdGVtKVxuICAgICAgICAgIEFuIGFjdGl2ZSBjaG9pY2UgYXBwZWFycyB3aXRoaW4gdGhlIGNob2ljZSBkcm9wZG93blxuICAgICAgICAqL1xuXG4gICAgICAgIHJldHVybiBfX3NwcmVhZEFycmF5KF9fc3ByZWFkQXJyYXkoW10sIHN0YXRlLCB0cnVlKSwgW2Nob2ljZV0sIGZhbHNlKTtcbiAgICAgIH1cblxuICAgIGNhc2UgJ0FERF9JVEVNJzpcbiAgICAgIHtcbiAgICAgICAgdmFyIGFkZEl0ZW1BY3Rpb25fMSA9IGFjdGlvbjsgLy8gV2hlbiBhbiBpdGVtIGlzIGFkZGVkIGFuZCBpdCBoYXMgYW4gYXNzb2NpYXRlZCBjaG9pY2UsXG4gICAgICAgIC8vIHdlIHdhbnQgdG8gZGlzYWJsZSBpdCBzbyBpdCBjYW4ndCBiZSBjaG9zZW4gYWdhaW5cblxuICAgICAgICBpZiAoYWRkSXRlbUFjdGlvbl8xLmNob2ljZUlkID4gLTEpIHtcbiAgICAgICAgICByZXR1cm4gc3RhdGUubWFwKGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHZhciBjaG9pY2UgPSBvYmo7XG5cbiAgICAgICAgICAgIGlmIChjaG9pY2UuaWQgPT09IHBhcnNlSW50KFwiXCIuY29uY2F0KGFkZEl0ZW1BY3Rpb25fMS5jaG9pY2VJZCksIDEwKSkge1xuICAgICAgICAgICAgICBjaG9pY2Uuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY2hvaWNlO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgfVxuXG4gICAgY2FzZSAnUkVNT1ZFX0lURU0nOlxuICAgICAge1xuICAgICAgICB2Y
118XIgcmVtb3ZlSXRlbUFjdGlvbl8xID0gYWN0aW9uOyAvLyBXaGVuIGFuIGl0ZW0gaXMgcmVtb3ZlZCBhbmQgaXQgaGFzIGFuIGFzc29jaWF0ZWQgY2hvaWNlLFxuICAgICAgICAvLyB3ZSB3YW50IHRvIHJlLWVuYWJsZSBpdCBzbyBpdCBjYW4gYmUgY2hvc2VuIGFnYWluXG5cbiAgICAgICAgaWYgKHJlbW92ZUl0ZW1BY3Rpb25fMS5jaG9pY2VJZCAmJiByZW1vdmVJdGVtQWN0aW9uXzEuY2hvaWNlSWQgPiAtMSkge1xuICAgICAgICAgIHJldHVybiBzdGF0ZS5tYXAoZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgdmFyIGNob2ljZSA9IG9iajtcblxuICAgICAgICAgICAgaWYgKGNob2ljZS5pZCA9PT0gcGFyc2VJbnQoXCJcIi5jb25jYXQocmVtb3ZlSXRlbUFjdGlvbl8xLmNob2ljZUlkKSwgMTApKSB7XG4gICAgICAgICAgICAgIGNob2ljZS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY2hvaWNlO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgfVxuXG4gICAgY2FzZSAnRklMVEVSX0NIT0lDRVMnOlxuICAgICAge1xuICAgICAgICB2YXIgZmlsdGVyQ2hvaWNlc0FjdGlvbl8xID0gYWN0aW9uO1xuICAgICAgICByZXR1cm4gc3RhdGUubWFwKGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICB2YXIgY2hvaWNlID0gb2JqOyAvLyBTZXQgYWN0aXZlIHN0YXRlIGJhc2VkIG9uIHdoZXRoZXIgY2hvaWNlIGlzXG4gICAgICAgICAgLy8gd2l0aGluIGZpbHRlcmVkIHJlc3VsdHNcblxuICAgICAgICAgIGNob2ljZS5hY3RpdmUgPSBmaWx0ZXJDaG9pY2VzQWN0aW9uXzEucmVzdWx0cy5zb21lKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgdmFyIGl0ZW0gPSBfYS5pdGVtLFxuICAgICAgICAgICAgICAgIHNjb3JlID0gX2Euc2NvcmU7XG5cbiAgICAgICAgICAgIGlmIChpdGVtLmlkID09PSBjaG9pY2UuaWQpIHtcbiAgICAgICAgICAgICAgY2hvaWNlLnNjb3JlID0gc2NvcmU7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIGNob2ljZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICBjYXNlICdBQ1RJVkFURV9DSE9JQ0VTJzpcbiAgICAgIHtcbiAgICAgICAgdmFyIGFjdGl2YXRlQ2hvaWNlc0FjdGlvbl8xID0gYWN0aW9uO1xuICAgICAgICByZXR1cm4gc3RhdGUubWFwKGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICB2Y
118XIgY2hvaWNlID0gb2JqO1xuICAgICAgICAgIGNob2ljZS5hY3RpdmUgPSBhY3RpdmF0ZUNob2ljZXNBY3Rpb25fMS5hY3RpdmU7XG4gICAgICAgICAgcmV0dXJuIGNob2ljZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICBjYXNlICdDTEVBUl9DSE9JQ0VTJzpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMuZGVmYXVsdFN0YXRlO1xuICAgICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgfVxuICB9XG59XG5cbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gY2hvaWNlcztcblxuLyoqKi8gfSksXG5cbi8qKiovIDg3MTpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cykge1xuXG5cblxudmFyIF9fc3ByZWFkQXJyYXkgPSB0aGlzICYmIHRoaXMuX19zcHJlYWRBcnJheSB8fCBmdW5jdGlvbiAodG8sIGZyb20sIHBhY2spIHtcbiAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuZGVmYXVsdFN0YXRlID0gdm9pZCAwO1xuZXhwb3J0cy5kZWZh
118dWx0U3RhdGUgPSBbXTtcblxuZnVuY3Rpb24gZ3JvdXBzKHN0YXRlLCBhY3Rpb24pIHtcbiAgaWYgKHN0YXRlID09PSB2b2lkIDApIHtcbiAgICBzdGF0ZSA9IGV4cG9ydHMuZGVmYXVsdFN0YXRlO1xuICB9XG5cbiAgaWYgKGFjdGlvbiA9PT0gdm9pZCAwKSB7XG4gICAgYWN0aW9uID0ge307XG4gIH1cblxuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnQUREX0dST1VQJzpcbiAgICAgIHtcbiAgICAgICAgdmFyIGFkZEdyb3VwQWN0aW9uID0gYWN0aW9uO1xuICAgICAgICByZXR1cm4gX19zcHJlYWRBcnJheShfX3NwcmVhZEFycmF5KFtdLCBzdGF0ZSwgdHJ1ZSksIFt7XG4gICAgICAgICAgaWQ6IGFkZEdyb3VwQWN0aW9uLmlkLFxuICAgICAgICAgIHZhbHVlOiBhZGRHcm91cEFjdGlvbi52YWx1ZSxcbiAgICAgICAgICBhY3RpdmU6IGFkZEdyb3VwQWN0aW9uLmFjdGl2ZSxcbiAgICAgICAgICBkaXNhYmxlZDogYWRkR3JvdXBBY3Rpb24uZGlzYWJsZWRcbiAgICAgICAgfV0sIGZhbHNlKTtcbiAgICAgIH1cblxuICAgIGNhc2UgJ0NMRUFSX0NIT0lDRVMnOlxuICAgICAge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICB9XG4gIH1cbn1cblxuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBncm91cHM7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA2NTU6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXG5cbnZhciBfX2ltcG9ydERlZmF1bHQgPSB0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0IHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgcmV0dXJuIG1vZCAmJiBtb2QuX19lc01vZHVsZSA/IG1vZCA6IHtcbiAgICBcImRlZmF1bHRcIjogbW9kXG4gIH07XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLmRlZmF1bHRTdGF0ZSA9IHZvaWQgMDtcblxudmFyIHJlZHV4XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg1Nyk7XG5cbnZhciBpdGVtc18xID0gX19pbXBvcnREZWZhdWx0KF9fd2VicGFja19yZXF1aXJlX18oNTIpKTtcblxudmFyIGdyb3Vwc18xID0gX19pbXBvcnREZWZhdWx0KF9fd2VicGFja19yZXF1aXJlX18oODcxKSk7XG5cbnZhciBjaG9pY2VzXzEgPSBfX2ltcG9ydERlZmF1bHQoX193ZWJwYWNrX3JlcXVpcmVfXygyNzMpKTtcblxudmFyIGxvYWRpbmdfMSA9IF9faW1wb3J0RGVmYXVsdChfX3dlYnBhY2tfcmVxdWlyZV9fKDUwMikpO1xuXG52YXIgdXRpbHNfMSA9IF9fd2VicGFja19yZXF1aXJlX18oNzk5KTtcblxuZXhwb3J0cy5kZWZh
118dWx0U3RhdGUgPSB7XG4gIGdyb3VwczogW10sXG4gIGl0ZW1zOiBbXSxcbiAgY2hvaWNlczogW10sXG4gIGxvYWRpbmc6IGZhbHNlXG59O1xudmFyIGFwcFJlZHVjZXIgPSAoMCwgcmVkdXhfMS5jb21iaW5lUmVkdWNlcnMpKHtcbiAgaXRlbXM6IGl0ZW1zXzEuZGVmYXVsdCxcbiAgZ3JvdXBzOiBncm91cHNfMS5kZWZhdWx0LFxuICBjaG9pY2VzOiBjaG9pY2VzXzEuZGVmYXVsdCxcbiAgbG9hZGluZzogbG9hZGluZ18xLmRlZmF1bHRcbn0pO1xuXG52YXIgcm9vdFJlZHVjZXIgPSBmdW5jdGlvbiAocGFzc2VkU3RhdGUsIGFjdGlvbikge1xuICB2YXIgc3RhdGUgPSBwYXNzZWRTdGF0ZTsgLy8gSWYgd2UgYXJlIGNsZWFyaW5nIGFsbCBpdGVtcywgZ3JvdXBzIGFuZCBvcHRpb25zIHdlIHJlYXNzaWduXG4gIC8vIHN0YXRlIGFuZCB0aGVuIHBhc3MgdGhhdCBzdGF0ZSB0byBvdXIgcHJvcGVyIHJlZHVjZXIuIFRoaXMgaXNuJ3RcbiAgLy8gbXV0YXRpbmcgb3VyIGFjdHVhbCBzdGF0ZVxuICAvLyBTZWU6IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM1NjQxOTkyXG5cbiAgaWYgKGFjdGlvbi50eXBlID09PSAnQ0xFQVJfQUxMJykge1xuICAgIHN0YXRlID0gZXhwb3J0cy5kZWZhdWx0U3RhdGU7XG4gIH0gZWxzZSBpZiAoYWN0aW9uLnR5cGUgPT09ICdSRVNFVF9UTycpIHtcbiAgICByZXR1cm4gKDAsIHV0aWxzXzEuY2xvbmVPYmplY3QpKGFjdGlvbi5zdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gYXBwUmVkdWNlcihzdGF0ZSwgYWN0aW9uKTtcbn07XG5cbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gcm9vdFJlZHVjZXI7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA1Mjpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cykge1xuXG5cblxudmFyIF9fc3ByZWFkQXJyYXkgPSB0aGlzICYmIHRoaXMuX19zcHJlYWRBcnJheSB8fCBmdW5jdGlvbiAodG8sIGZyb20sIHBhY2spIHtcbiAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuZGVmYXVsdFN0YXRlID0gdm9pZCAwO1xuZXhwb3J0cy5kZWZh
118dWx0U3RhdGUgPSBbXTtcblxuZnVuY3Rpb24gaXRlbXMoc3RhdGUsIGFjdGlvbikge1xuICBpZiAoc3RhdGUgPT09IHZvaWQgMCkge1xuICAgIHN0YXRlID0gZXhwb3J0cy5kZWZhdWx0U3RhdGU7XG4gIH1cblxuICBpZiAoYWN0aW9uID09PSB2b2lkIDApIHtcbiAgICBhY3Rpb24gPSB7fTtcbiAgfVxuXG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICBjYXNlICdBRERfSVRFTSc6XG4gICAgICB7XG4gICAgICAgIHZhciBhZGRJdGVtQWN0aW9uID0gYWN0aW9uOyAvLyBBZGQgb2JqZWN0IHRvIGl0ZW1zIGFycmF5XG5cbiAgICAgICAgdmFyIG5ld1N0YXRlID0gX19zcHJlYWRBcnJheShfX3NwcmVhZEFycmF5KFtdLCBzdGF0ZSwgdHJ1ZSksIFt7XG4gICAgICAgICAgaWQ6IGFkZEl0ZW1BY3Rpb24uaWQsXG4gICAgICAgICAgY2hvaWNlSWQ6IGFkZEl0ZW1BY3Rpb24uY2hvaWNlSWQsXG4gICAgICAgICAgZ3JvdXBJZDogYWRkSXRlbUFjdGlvbi5ncm91cElkLFxuICAgICAgICAgIHZhbHVlOiBhZGRJdGVtQWN0aW9uLnZhbHVlLFxuICAgICAgICAgIGxhYmVsOiBhZGRJdGVtQWN0aW9uLmxhYmVsLFxuICAgICAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICBoaWdobGlnaHRlZDogZmFsc2UsXG4gICAgICAgICAgY3VzdG9tUHJvcGVydGllczogYWRkSXRlbUFjdGlvbi5jdXN0b21Qcm9wZXJ0aWVzLFxuICAgICAgICAgIHBsYWNlaG9sZGVyOiBhZGRJdGVtQWN0aW9uLnBsYWNlaG9sZGVyIHx8IGZhbHNlLFxuICAgICAgICAgIGtleUNvZGU6IG51bGxcbiAgICAgICAgfV0sIGZhbHNlKTtcblxuICAgICAgICByZXR1cm4gbmV3U3RhdGUubWFwKGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICB2Y
118XIgaXRlbSA9IG9iajtcbiAgICAgICAgICBpdGVtLmhpZ2hsaWdodGVkID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgY2FzZSAnUkVNT1ZFX0lURU0nOlxuICAgICAge1xuICAgICAgICAvLyBTZXQgaXRlbSB0byBpbmFjdGl2ZVxuICAgICAgICByZXR1cm4gc3RhdGUubWFwKGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICB2YXIgaXRlbSA9IG9iajtcblxuICAgICAgICAgIGlmIChpdGVtLmlkID09PSBhY3Rpb24uaWQpIHtcbiAgICAgICAgICAgIGl0ZW0uYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgY2FzZSAnSElHSExJR0hUX0lURU0nOlxuICAgICAge1xuICAgICAgICB2YXIgaGlnaGxpZ2h0SXRlbUFjdGlvbl8xID0gYWN0aW9uO1xuICAgICAgICByZXR1cm4gc3RhdGUubWFwKGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICB2YXIgaXRlbSA9IG9iajtcblxuICAgICAgICAgIGlmIChpdGVtLmlkID09PSBoaWdobGlnaHRJdGVtQWN0aW9uXzEuaWQpIHtcbiAgICAgICAgICAgIGl0ZW0uaGlnaGxpZ2h0ZWQgPSBoaWdobGlnaHRJdGVtQWN0aW9uXzEuaGlnaGxpZ2h0ZWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgfVxuICB9XG59XG5cbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gaXRlbXM7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA1MDI6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMpIHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuZGVmYXVsdFN0YXRlID0gdm9pZCAwO1xuZXhwb3J0cy5kZWZh
118dWx0U3RhdGUgPSBmYWxzZTtcblxudmFyIGdlbmVyYWwgPSBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbikge1xuICBpZiAoc3RhdGUgPT09IHZvaWQgMCkge1xuICAgIHN0YXRlID0gZXhwb3J0cy5kZWZhdWx0U3RhdGU7XG4gIH1cblxuICBpZiAoYWN0aW9uID09PSB2b2lkIDApIHtcbiAgICBhY3Rpb24gPSB7fTtcbiAgfVxuXG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICBjYXNlICdTRVRfSVNfTE9BRElORyc6XG4gICAgICB7XG4gICAgICAgIHJldHVybiBhY3Rpb24uaXNMb2FkaW5nO1xuICAgICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgfVxuICB9XG59O1xuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGdlbmVyYWw7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA3NDQ6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXG5cbnZhciBfX3NwcmVhZEFycmF5ID0gdGhpcyAmJiB0aGlzLl9fc3ByZWFkQXJyYXkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tLCBwYWNrKSB7XG4gIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59O1xuXG52YXIgX19pbXBvcnREZWZhdWx0ID0gdGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCB8fCBmdW5jdGlvbiAobW9kKSB7XG4gIHJldHVybiBtb2QgJiYgbW9kLl9fZXNNb2R1bGUgPyBtb2QgOiB7XG4gICAgXCJkZWZhdWx0XCI6IG1vZFxuICB9O1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuXG52YXIgcmVkdXhfMSA9IF9fd2VicGFja19yZXF1aXJlX18oODU3KTtcblxudmFyIGluZGV4XzEgPSBfX2ltcG9ydERlZmF1bHQoX193ZWJwYWNrX3JlcXVpcmVfXyg2NTUpKTtcblxudmFyIFN0b3JlID1cbi8qKiBAY2xhc3MgKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gU3RvcmUoKSB7XG4gICAgdGhpcy5fc3RvcmUgPSAoMCwgcmVkdXhfMS5jcmVhdGVTdG9yZSkoaW5kZXhfMS5kZWZhdWx0LCB3aW5kb3cuX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fXyAmJiB3aW5kb3cuX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fXygpKTtcbiAgfVxuICAvKipcbiAgICogU3Vic2NyaWJlIHN0b3JlIHRvIGZ1bmN0aW9uIGNhbGwgKHdyYXBwZWQgUmVkdXggbWV0aG9kKVxuICAgKi9cblxuXG4gIFN0b3JlLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiAob25DaGFuZ2UpIHtcbiAgICB0aGlzLl9zdG9yZS5zdWJzY3JpYmUob25DaGFuZ2UpO1xuICB9O1xuICAvKipcbiAgICogRGlzcGF0Y2ggZXZlbnQgdG8gc3RvcmUgKHdyYXBwZWQgUmVkdXggbWV0aG9kKVxuICAgKi9cblxuXG4gIFN0b3JlLnByb3RvdHlwZS5kaXNwYXRjaCA9IGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICB0aGlzLl9zdG9yZS5kaXNwYXRjaChhY3Rpb24pO1xuICB9O1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdG9yZS5wcm90b3R5cGUsIFwic3RhdGVcIiwge1xuICAgIC8qKlxuICAgICAqIEdldCBzdG9yZSBvYmplY3QgKHdyYXBwaW5nIFJlZHV4IG1ldGhvZClcbiAgICAgKi9cbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zdG9yZS5nZXRTdGF0ZSgpO1xuICAgIH0sXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RvcmUucHJvdG90eXBlLCBcIml0ZW1zXCIsIHtcbiAgICAvKipcbiAgICAgKiBHZXQgaXRlbXMgZnJvbSBzdG9yZVxuICAgICAqL1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RhdGUuaXRlbXM7XG4gICAgfSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdG9yZS5wcm90b3R5cGUsIFwiYWN0aXZlSXRlbXNcIiwge1xuICAgIC8qKlxuICAgICAqIEdldCBhY3RpdmUgaXRlbXMgZnJvbSBzdG9yZVxuICAgICAqL1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXRlbXMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHJldHVybiBpdGVtLmFjdGl2ZSA9PT0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RvcmUucHJvdG90eXBlLCBcImhpZ2hsaWdodGVkQWN0aXZlSXRlbXNcIiwge1xuICAgIC8qKlxuICAgICAqIEdldCBoaWdobGlnaHRlZCBpdGVtcyBmcm9tIHN0b3JlXG4gICAgICovXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pdGVtcy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uYWN0aXZlICYmIGl0ZW0uaGlnaGxpZ2h0ZWQ7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0b3JlLnByb3RvdHlwZSwgXCJjaG9pY2VzXCIsIHtcbiAgICAvKipcbiAgICAgKiBHZXQgY2hvaWNlcyBmcm9tIHN0b3JlXG4gICAgICovXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdGF0ZS5jaG9pY2VzO1xuICAgIH0sXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RvcmUucHJvdG90eXBlLCBcImFjdGl2ZUNob2ljZXNcIiwge1xuICAgIC8qKlxuICAgICAqIEdldCBhY3RpdmUgY2hvaWNlcyBmcm9tIHN0b3JlXG4gICAgICovXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jaG9pY2VzLmZpbHRlcihmdW5jdGlvbiAoY2hvaWNlKSB7XG4gICAgICAgI
118HJldHVybiBjaG9pY2UuYWN0aXZlID09PSB0cnVlO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdG9yZS5wcm90b3R5cGUsIFwic2VsZWN0YWJsZUNob2ljZXNcIiwge1xuICAgIC8qKlxuICAgICAqIEdldCBzZWxlY3RhYmxlIGNob2ljZXMgZnJvbSBzdG9yZVxuICAgICAqL1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2hvaWNlcy5maWx0ZXIoZnVuY3Rpb24gKGNob2ljZSkge1xuICAgICAgICByZXR1cm4gY2hvaWNlLmRpc2FibGVkICE9PSB0cnVlO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdG9yZS5wcm90b3R5cGUsIFwic2VhcmNoYWJsZUNob2ljZXNcIiwge1xuICAgIC8qKlxuICAgICAqIEdldCBjaG9pY2VzIHRoYXQgY2FuIGJlIHNlYXJjaGVkIChleGNsdWRpbmcgcGxhY2Vob2xkZXJzKVxuICAgICAqL1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0YWJsZUNob2ljZXMuZmlsdGVyKGZ1bmN0aW9uIChjaG9pY2UpIHtcbiAgICAgICAgcmV0dXJuIGNob2ljZS5wbGFjZWhvbGRlciAhPT0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RvcmUucHJvdG90eXBlLCBcInBsYWNlaG9sZGVyQ2hvaWNlXCIsIHtcbiAgICAvKipcbiAgICAgKiBHZXQgcGxhY2Vob2xkZXIgY2hvaWNlIGZyb20gc3RvcmVcbiAgICAgKi9cbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfX3NwcmVhZEFycmF5KFtdLCB0aGlzLmNob2ljZXMsIHRydWUpLnJldmVyc2UoKS5maW5kKGZ1bmN0aW9uIChjaG9pY2UpIHtcbiAgICAgICAgcmV0dXJuIGNob2ljZS5wbGFjZWhvbGRlciA9PT0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RvcmUucHJvdG90eXBlLCBcImdyb3Vwc1wiLCB7XG4gICAgLyoqXG4gICAgICogR2V0IGdyb3VwcyBmcm9tIHN0b3JlXG4gICAgICovXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdGF0ZS5ncm91cHM7XG4gICAgfSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdG9yZS5wcm90b3R5cGUsIFwiYWN0aXZlR3JvdXBzXCIsIHtcbiAgICAvKipcbiAgICAgKiBHZXQgYWN0aXZlIGdyb3VwcyBmcm9tIHN0b3JlXG4gICAgICovXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICB2Y
118XIgX2EgPSB0aGlzLFxuICAgICAgICAgIGdyb3VwcyA9IF9hLmdyb3VwcyxcbiAgICAgICAgICBjaG9pY2VzID0gX2EuY2hvaWNlcztcblxuICAgICAgcmV0dXJuIGdyb3Vwcy5maWx0ZXIoZnVuY3Rpb24gKGdyb3VwKSB7XG4gICAgICAgIHZhciBpc0FjdGl2ZSA9IGdyb3VwLmFjdGl2ZSA9PT0gdHJ1ZSAmJiBncm91cC5kaXNhYmxlZCA9PT0gZmFsc2U7XG4gICAgICAgIHZhciBoYXNBY3RpdmVPcHRpb25zID0gY2hvaWNlcy5zb21lKGZ1bmN0aW9uIChjaG9pY2UpIHtcbiAgICAgICAgICByZXR1cm4gY2hvaWNlLmFjdGl2ZSA9PT0gdHJ1ZSAmJiBjaG9pY2UuZGlzYWJsZWQgPT09IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGlzQWN0aXZlICYmIGhhc0FjdGl2ZU9wdGlvbnM7XG4gICAgICB9LCBbXSk7XG4gICAgfSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG4gIC8qKlxuICAgKiBHZXQgbG9hZGluZyBzdGF0ZSBmcm9tIHN0b3JlXG4gICAqL1xuXG4gIFN0b3JlLnByb3RvdHlwZS5pc0xvYWRpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUubG9hZGluZztcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBzaW5nbGUgY2hvaWNlIGJ5IGl0J3MgSURcbiAgICovXG5cblxuICBTdG9yZS5wcm90b3R5cGUuZ2V0Q2hvaWNlQnlJZCA9IGZ1bmN0aW9uIChpZCkge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZUNob2ljZXMuZmluZChmdW5jdGlvbiAoY2hvaWNlKSB7XG4gICAgICByZXR1cm4gY2hvaWNlLmlkID09PSBwYXJzZUludChpZCwgMTApO1xuICAgIH0pO1xuICB9O1xuICAvKipcbiAgICogR2V0IGdyb3VwIGJ5IGdyb3VwIGlkXG4gICAqL1xuXG5cbiAgU3RvcmUucHJvdG90eXBlLmdldEdyb3VwQnlJZCA9IGZ1bmN0aW9uIChpZCkge1xuICAgIHJldHVybiB0aGlzLmdyb3Vwcy5maW5kKGZ1bmN0aW9uIChncm91cCkge1xuICAgICAgcmV0dXJuIGdyb3VwLmlkID09PSBpZDtcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gU3RvcmU7XG59KCk7XG5cbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gU3RvcmU7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA2ODY6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMpIHtcblxuXG4vKipcbiAqIEhlbHBlcnMgdG8gY3JlYXRlIEhUTUwgZWxlbWVudHMgdXNlZCBieSBDaG9pY2VzXG4gKiBDYW4gYmUgb3ZlcnJpZGRlbiBieSBwcm92aWRpbmcgYGNhbGxiYWNrT25DcmVhdGVUZW1wbGF0ZXNgIG9wdGlvblxuICovXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbnZhciB0ZW1wbGF0ZXMgPSB7XG4gIGNvbnRhaW5lck91dGVyOiBmdW5jdGlvbiAoX2EsIGRpciwgaXNTZWxlY3RFbGVtZW50LCBpc1NlbGVjdE9uZUVsZW1lbnQsIHNlYXJjaEVuYWJsZWQsIHBhc3NlZEVsZW1lbnRUeXBlLCBsYWJlbElkKSB7XG4gICAgdmFyIGNvbnRhaW5lck91dGVyID0gX2EuY2xhc3NOYW1lcy5jb250YWluZXJPdXRlcjtcbiAgICB2YXIgZGl2ID0gT2JqZWN0LmFzc2lnbihkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwge1xuICAgICAgY2xhc3NOYW1lOiBjb250YWluZXJPdXRlclxuICAgIH0pO1xuICAgIGRpdi5kYXRhc2V0LnR5cGUgPSBwYXNzZWRFbGVtZW50VHlwZTtcblxuICAgIGlmIChkaXIpIHtcbiAgICAgIGRpdi5kaXIgPSBkaXI7XG4gICAgfVxuXG4gICAgaWYgKGlzU2VsZWN0T25lRWxlbWVudCkge1xuICAgICAgZGl2LnRhYkluZGV4ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoaXNTZWxlY3RFbGVtZW50KSB7XG4gICAgICBkaXYuc2V0QXR0cmlidXRlKCdyb2xlJywgc2VhcmNoRW5hYmxlZCA/ICdjb21ib2JveCcgOiAnbGlzdGJveCcpO1xuXG4gICAgICBpZiAoc2VhcmNoRW5hYmxlZCkge1xuICAgICAgICBkaXYuc2V0QXR0cmlidXRlKCdhcmlhLWF1dG9jb21wbGV0ZScsICdsaXN0Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZGl2LnNldEF0dHJpYnV0ZSgnYXJpYS1oYXNwb3B1cCcsICd0cnVlJyk7XG4gICAgZGl2LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICdmYWxzZScpO1xuXG4gICAgaWYgKGxhYmVsSWQpIHtcbiAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWxlZGJ5JywgbGFiZWxJZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpdjtcbiAgfSxcbiAgY29udGFpbmVySW5uZXI6IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBjb250YWluZXJJbm5lciA9IF9hLmNsYXNzTmFtZXMuY29udGFpbmVySW5uZXI7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksIHtcbiAgICAgIGNsYXNzTmFtZTogY29udGFpbmVySW5uZXJcbiAgICB9KTtcbiAgfSxcbiAgaXRlbUxpc3Q6IGZ1bmN0aW9uIChfYSwgaXNTZWxlY3RPbmVFbGVtZW50KSB7XG4gICAgdmFyIF9iID0gX2EuY2xhc3NOYW1lcyxcbiAgICAgICAgbGlzdCA9IF9iLmxpc3QsXG4gICAgICAgIGxpc3RTaW5nbGUgPSBfYi5saXN0U2luZ2xlLFxuICAgICAgICBsaXN0SXRlbXMgPSBfYi5saXN0SXRlbXM7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksIHtcbiAgICAgIGNsYXNzTmFtZTogXCJcIi5jb25jYXQobGlzdCwgXCIgXCIpLmNvbmNhdChpc1NlbGVjdE9uZUVsZW1lbnQgPyBsaXN0U2luZ2xlIDogbGlzdEl0ZW1zKVxuICAgIH0pO1xuICB9LFxuICBwbGFjZWhvbGRlcjogZnVuY3Rpb24gKF9hLCB2YWx1ZSkge1xuICAgIHZhciBfYjtcblxuICAgIHZhciBhbGxvd0hUTUwgPSBfYS5hbGxvd0hUTUwsXG4gICAgICAgIHBsYWNlaG9sZGVyID0gX2EuY2xhc3NOYW1lcy5wbGFjZWhvbGRlcjtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwgKF9iID0ge1xuICAgICAgY2xhc3NOYW1lOiBwbGFjZWhvbGRlclxuICAgIH0sIF9iW2FsbG93SFRNTCA/ICdpbm5lckhUTUwnIDogJ2lubmVyVGV4dCddID0gdmFsdWUsIF9iKSk7XG4gIH0sXG4gIGl0ZW06IGZ1bmN0aW9uIChfYSwgX2IsIHJlbW92ZUl0ZW1CdXR0b24pIHtcbiAgICB2YXIgX2MsIF9kO1xuXG4gICAgdmFyIGFsbG93SFRNTCA9IF9hLmFsbG93SFRNTCxcbiAgICAgICAgX2UgPSBfYS5jbGFzc05hbWVzLFxuICAgICAgICBpdGVtID0gX2UuaXRlbSxcbiAgICAgICAgYnV0dG9uID0gX2UuYnV0dG9uLFxuICAgICAgICBoaWdobGlnaHRlZFN0YXRlID0gX2UuaGlnaGxpZ2h0ZWRTdGF0ZSxcbiAgICAgICAgaXRlbVNlbGVjdGFibGUgPSBfZS5pdGVtU2VsZWN0YWJsZSxcbiAgICAgICAgcGxhY2Vob2xkZXIgPSBfZS5wbGFjZWhvbGRlcjtcbiAgICB2YXIgaWQgPSBfYi5pZCxcbiAgICAgICAgdmFsdWUgPSBfYi52YWx1ZSxcbiAgICAgICAgbGFiZWwgPSBfYi5sYWJlbCxcbiAgICAgICAgY3VzdG9tUHJvcGVydGllcyA9IF9iLmN1c3RvbVByb3BlcnRpZXMsXG4gICAgICAgIGFjdGl2ZSA9IF9iLmFjdGl2ZSxcbiAgICAgICAgZGlzYWJsZWQgPSBfYi5kaXNhYmxlZCxcbiAgICAgICAgaGlnaGxpZ2h0ZWQgPSBfYi5oaWdobGlnaHRlZCxcbiAgICAgICAgaXNQbGFjZWhvbGRlciA9IF9iLnBsYWNlaG9sZG
118VyO1xuICAgIHZhciBkaXYgPSBPYmplY3QuYXNzaWduKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAoX2MgPSB7XG4gICAgICBjbGFzc05hbWU6IGl0ZW1cbiAgICB9LCBfY1thbGxvd0hUTUwgPyAnaW5uZXJIVE1MJyA6ICdpbm5lclRleHQnXSA9IGxhYmVsLCBfYykpO1xuICAgIE9iamVjdC5hc3NpZ24oZGl2LmRhdGFzZXQsIHtcbiAgICAgIGl0ZW06ICcnLFxuICAgICAgaWQ6IGlkLFxuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgY3VzdG9tUHJvcGVydGllczogY3VzdG9tUHJvcGVydGllc1xuICAgIH0pO1xuXG4gICAgaWYgKGFjdGl2ZSkge1xuICAgICAgZGl2LnNldEF0dHJpYnV0ZSgnYXJpYS1zZWxlY3RlZCcsICd0cnVlJyk7XG4gICAgfVxuXG4gICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICBkaXYuc2V0QXR0cmlidXRlKCdhcmlhLWRpc2FibGVkJywgJ3RydWUnKTtcbiAgICB9XG5cbiAgICBpZiAoaXNQbGFjZWhvbGRlcikge1xuICAgICAgZGl2LmNsYXNzTGlzdC5hZGQocGxhY2Vob2xkZXIpO1xuICAgIH1cblxuICAgIGRpdi5jbGFzc0xpc3QuYWRkKGhpZ2hsaWdodGVkID8gaGlnaGxpZ2h0ZWRTdGF0ZSA6IGl0ZW1TZWxlY3RhYmxlKTtcblxuICAgIGlmIChyZW1vdmVJdGVtQnV0dG9uKSB7XG4gICAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgICAgZGl2LmNsYXNzTGlzdC5yZW1vdmUoaXRlbVNlbGVjdGFibGUpO1xuICAgICAgfVxuXG4gICAgICBkaXYuZGF0YXNldC5kZWxldGFibGUgPSAnJztcbiAgICAgIC8qKiBAdG9kbyBUaGlzIE1VU1QgYmUgbG9jYWxpemFibGUsIG5vdCBoYXJkY29kZWQhICovXG5cbiAgICAgIHZhciBSRU1PVkVfSVRFTV9URVhUID0gJ1JlbW92ZSBpdGVtJztcbiAgICAgIHZhciByZW1vdmVCdXR0b24gPSBPYmplY3QuYXNzaWduKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpLCAoX2QgPSB7XG4gICAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgICBjbGFzc05hbWU6IGJ1dHRvblxuICAgICAgfSwgX2RbYWxsb3dIVE1MID8gJ2lubmVySFRNTCcgOiAnaW5uZXJUZXh0J10gPSBSRU1PVkVfSVRFTV9URVhULCBfZCkpO1xuICAgICAgcmVtb3ZlQnV0dG9uLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIFwiXCIuY29uY2F0KFJFTU9WRV9JVEVNX1RFWFQsIFwiOiAnXCIpLmNvbmNhdCh2YWx1ZSwgXCInXCIpKTtcbiAgICAgIHJlbW92ZUJ1dHRvbi5kYXRhc2V0LmJ1dHRvbiA9ICcnO1xuICAgICAgZGl2LmFwcGVuZENoaWxkKHJlbW92ZUJ1dHRvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpdjtcbiAgfSxcbiAgY2hvaWNlTGlzdDogZnVuY3Rpb24gKF9hLCBpc1NlbGVjdE9uZUVsZW1lbnQpIHtcbiAgICB2YXIgbGlzdCA9IF9hLmNsYXNzTmFtZXMubGlzdDtcbiAgICB2YXIgZGl2ID0gT2JqZWN0LmFzc2lnbihkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwge1xuICAgICAgY2xhc3NOYW1lOiBsaXN0XG4gICAgfSk7XG5cbiAgICBpZiAoIWlzU2VsZWN0T25lRWxlbWVudCkge1xuICAgICAgZGl2LnNldEF0dHJpYnV0ZSgnYXJpYS1tdWx0aXNlbGVjdGFibGUnLCAndHJ1ZScpO1xuICAgIH1cblxuICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnbGlzdGJveCcpO1xuICAgIHJldHVybiBkaXY7XG4gIH0sXG4gIGNob2ljZUdyb3VwOiBmdW5jdGlvbiAoX2EsIF9iKSB7XG4gICAgdmFyIF9jO1xuXG4gICAgdmFyIGFsbG93SFRNTCA9IF9hLmFsbG93SFRNTCxcbiAgICAgICAgX2QgPSBfYS5jbGFzc05hbWVzLFxuICAgICAgICBncm91cCA9IF9kLmdyb3VwLFxuICAgICAgICBncm91cEhlYWRpbmcgPSBfZC5ncm91cEhlYWRpbmcsXG4gICAgICAgIGl0ZW1EaXNhYmxlZCA9IF9kLml0ZW1EaXNhYmxlZDtcbiAgICB2YXIgaWQgPSBfYi5pZCxcbiAgICAgICAgdmFsdWUgPSBfYi52YWx1ZSxcbiAgICAgICAgZGlzYWJsZWQgPSBfYi5kaXNhYmxlZDtcbiAgICB2YXIgZGl2ID0gT2JqZWN0LmFzc2lnbihkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwge1xuICAgICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChncm91cCwgXCIgXCIpLmNvbmNhdChkaXNhYmxlZCA/IGl0ZW1EaXNhYmxlZCA6ICcnKVxuICAgIH0pO1xuICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnZ3JvdXAnKTtcbiAgICBPYmplY3QuYXNzaWduKGRpdi5kYXRhc2V0LCB7XG4gICAgICBncm91cDogJycsXG4gICAgICBpZDogaWQsXG4gICAgICB2YWx1ZTogdmFsdWVcbiAgICB9KTtcblxuICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgZGl2LnNldEF0dHJpYnV0ZSgnYXJpYS1kaXNhYmxlZCcsICd0cnVlJyk7XG4gICAgfVxuXG4gICAgZGl2LmFwcGVuZENoaWxkKE9iamVjdC5hc3NpZ24oZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksIChfYyA9IHtcbiAgICAgIGNsYXNzTmFtZTogZ3JvdXBIZWFkaW5nXG4gICAgfSwgX2NbYWxsb3dIVE1MID8gJ2lubmVySFRNTCcgOiAnaW5uZXJUZXh0J10gPSB2YWx1ZSwgX2MpKSk7XG4gICAgcmV0dXJuIGRpdjtcbiAgfSxcbiAgY2hvaWNlOiBmdW5jdGlvbiAoX2EsIF9iLCBzZWxlY3RUZXh0KSB7XG4gICAgdmFyIF9jO1xuXG4gICAgdmFyIGFsbG93SFRNTCA9IF9hLmFsbG93SFRNTCxcbiAgICAgICAgX2QgPSBfYS5jbGFzc05hbWVzLFxuICAgICAgICBpdGVtID0gX2QuaXRlbSxcbiAgICAgICAgaXRlbUNob2ljZSA9IF9kLml0ZW1DaG9pY2UsXG4gICAgICAgIGl0ZW1TZWxlY3RhYmxlID0gX2QuaXRlbVNlbGVjdGFibGUsXG4gICAgICAgIHNlbGVjdGVkU3RhdGUgPSBfZC5zZWxlY3RlZFN0YXRlLFxuICAgICAgICBpdGVtRGlzYWJsZWQgPSBfZC5pdGVtRGlzYWJsZWQsXG4gICAgICAgIHBsYWNlaG9sZGVyID0gX2QucGxhY2Vob2xkZXI7XG4gICAgdmFyIGlkID0gX2IuaWQsXG4gICAgICAgIHZhbHVlID0gX2IudmFsdWUsXG4gICAgICAgIGxhYmVsID0gX2IubGFiZWwsXG4gICAgICAgIGdyb3VwSWQgPSBfYi5ncm91cElkLFxuICAgICAgICBlbGVtZW50SWQgPSBfYi5lbGVtZW50SWQsXG4gICAgICAgIGlzRGlzYWJsZWQgPSBfYi5kaXNhYmxlZCxcbiAgICAgICAgaXNTZWxlY3RlZCA9IF9iLnNlbGVjdGVkLFxuICAgICAgICBpc1BsYWNlaG9sZG
118VyID0gX2IucGxhY2Vob2xkZXI7XG4gICAgdmFyIGRpdiA9IE9iamVjdC5hc3NpZ24oZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksIChfYyA9IHtcbiAgICAgIGlkOiBlbGVtZW50SWRcbiAgICB9LCBfY1thbGxvd0hUTUwgPyAnaW5uZXJIVE1MJyA6ICdpbm5lclRleHQnXSA9IGxhYmVsLCBfYy5jbGFzc05hbWUgPSBcIlwiLmNvbmNhdChpdGVtLCBcIiBcIikuY29uY2F0KGl0ZW1DaG9pY2UpLCBfYykpO1xuXG4gICAgaWYgKGlzU2VsZWN0ZWQpIHtcbiAgICAgIGRpdi5jbGFzc0xpc3QuYWRkKHNlbGVjdGVkU3RhdGUpO1xuICAgIH1cblxuICAgIGlmIChpc1BsYWNlaG9sZGVyKSB7XG4gICAgICBkaXYuY2xhc3NMaXN0LmFkZChwbGFjZWhvbGRlcik7XG4gICAgfVxuXG4gICAgZGl2LnNldEF0dHJpYnV0ZSgncm9sZScsIGdyb3VwSWQgJiYgZ3JvdXBJZCA+IDAgPyAndHJlZWl0ZW0nIDogJ29wdGlvbicpO1xuICAgIE9iamVjdC5hc3NpZ24oZGl2LmRhdGFzZXQsIHtcbiAgICAgIGNob2ljZTogJycsXG4gICAgICBpZDogaWQsXG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBzZWxlY3RUZXh0OiBzZWxlY3RUZXh0XG4gICAgfSk7XG5cbiAgICBpZiAoaXNEaXNhYmxlZCkge1xuICAgICAgZGl2LmNsYXNzTGlzdC5hZGQoaXRlbURpc2FibGVkKTtcbiAgICAgIGRpdi5kYXRhc2V0LmNob2ljZURpc2FibGVkID0gJyc7XG4gICAgICBkaXYuc2V0QXR0cmlidXRlKCdhcmlhLWRpc2FibGVkJywgJ3RydWUnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGl2LmNsYXNzTGlzdC5hZGQoaXRlbVNlbGVjdGFibGUpO1xuICAgICAgZGl2LmRhdGFzZXQuY2hvaWNlU2VsZWN0YWJsZSA9ICcnO1xuICAgIH1cblxuICAgIHJldHVybiBkaXY7XG4gIH0sXG4gIGlucHV0OiBmdW5jdGlvbiAoX2EsIHBsYWNlaG9sZGVyVmFsdWUpIHtcbiAgICB2YXIgX2IgPSBfYS5jbGFzc05hbWVzLFxuICAgICAgICBpbnB1dCA9IF9iLmlucHV0LFxuICAgICAgICBpbnB1dENsb25lZCA9IF9iLmlucHV0Q2xvbmVkO1xuICAgIHZhciBpbnAgPSBPYmplY3QuYXNzaWduKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JyksIHtcbiAgICAgIHR5cGU6ICdzZWFyY2gnLFxuICAgICAgbmFtZTogJ3NlYXJjaF90ZXJtcycsXG4gICAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KGlucHV0LCBcIiBcIikuY29uY2F0KGlucHV0Q2xvbmVkKSxcbiAgICAgIGF1dG9jb21wbGV0ZTogJ29mZicsXG4gICAgICBhdXRvY2FwaXRhbGl6ZTogJ29mZicsXG4gICAgICBzcGVsbGNoZWNrOiBmYWxzZVxuICAgIH0pO1xuICAgIGlucC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAndGV4dGJveCcpO1xuICAgIGlucC5zZXRBdHRyaWJ1dGUoJ2FyaWEtYXV0b2NvbXBsZXRlJywgJ2xpc3QnKTtcbiAgICBpbnAuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgcGxhY2Vob2xkZXJWYWx1ZSk7XG4gICAgcmV0dXJuIGlucDtcbiAgfSxcbiAgZHJvcGRvd246IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBfYiA9IF9hLmNsYXNzTmFtZXMsXG4gICAgICAgIGxpc3QgPSBfYi5saXN0LFxuICAgICAgICBsaXN0RHJvcGRvd24gPSBfYi5saXN0RHJvcGRvd247XG4gICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGRpdi5jbGFzc0xpc3QuYWRkKGxpc3QsIGxpc3REcm9wZG93bik7XG4gICAgZGl2LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICdmYWxzZScpO1xuICAgIHJldHVybiBkaXY7XG4gIH0sXG4gIG5vdGljZTogZnVuY3Rpb24gKF9hLCBpbm5lclRleHQsIHR5cGUpIHtcbiAgICB2YXIgX2I7XG5cbiAgICB2YXIgYWxsb3dIVE1MID0gX2EuYWxsb3dIVE1MLFxuICAgICAgICBfYyA9IF9hLmNsYXNzTmFtZXMsXG4gICAgICAgIGl0ZW0gPSBfYy5pdGVtLFxuICAgICAgICBpdGVtQ2hvaWNlID0gX2MuaXRlbUNob2ljZSxcbiAgICAgICAgbm9SZXN1bHRzID0gX2Mubm9SZXN1bHRzLFxuICAgICAgICBub0Nob2ljZXMgPSBfYy5ub0Nob2ljZXM7XG5cbiAgICBpZiAodHlwZSA9PT0gdm9pZCAwKSB7XG4gICAgICB0eXBlID0gJyc7XG4gICAgfVxuXG4gICAgdmFyIGNsYXNzZXMgPSBbaXRlbSwgaXRlbUNob2ljZV07XG5cbiAgICBpZiAodHlwZSA9PT0gJ25vLWNob2ljZXMnKSB7XG4gICAgICBjbGFzc2VzLnB1c2gobm9DaG9pY2VzKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICduby1yZXN1bHRzJykge1xuICAgICAgY2xhc3Nlcy5wdXNoKG5vUmVzdWx0cyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksIChfYiA9IHt9LCBfYlthbGxvd0hUTUwgPyAnaW5uZXJIVE1MJyA6ICdpbm5lclRleHQnXSA9IGlubmVyVGV4dCwgX2IuY2xhc3NOYW1lID0gY2xhc3Nlcy5qb2luKCcgJyksIF9iKSk7XG4gIH0sXG4gIG9wdGlvbjogZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIGxhYmVsID0gX2EubGFiZWwsXG4gICAgICAgIHZhbHVlID0gX2EudmFsdWUsXG4gICAgICAgIGN1c3RvbVByb3BlcnRpZXMgPSBfYS5jdXN0b21Qcm9wZXJ0aWVzLFxuICAgICAgICBhY3RpdmUgPSBfYS5hY3RpdmUsXG4gICAgICAgIGRpc2FibGVkID0gX2EuZGlzYWJsZWQ7XG4gICAgdmFyIG9wdCA9IG5ldyBPcHRpb24obGFiZWwsIHZhbHVlLCBmYWxzZSwgYWN0aXZlKTtcblxuICAgIGlmIChjdXN0b21Qcm9wZXJ0aWVzKSB7XG4gICAgICBvcHQuZGF0YXNldC5jdXN0b21Qcm9wZXJ0aWVzID0gXCJcIi5jb25jYXQoY3VzdG9tUHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgb3B0LmRpc2FibGVkID0gISFkaXNhYmxlZDtcbiAgICByZXR1cm4gb3B0O1xuICB9XG59O1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSB0ZW1wbGF0ZXM7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA5OTY6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlKSB7XG5cblxuXG52YXIgaXNNZXJnZWFibGVPYmplY3QgPSBmdW5jdGlvbiBpc01lcmdlYWJsZU9iamVjdCh2YWx1ZSkge1xuXHRyZXR1cm4gaXNOb25OdWxsT2JqZWN0KHZhbHVlKVxuXHRcdCYmICFpc1NwZWNpYWwodmFsdWUpXG59O1xuXG5mdW5jdGlvbiBpc05vbk51bGxPYmplY3QodmFsdWUpIHtcblx0cmV0dXJuICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0J1xufVxuXG5mdW5jdGlvbiBpc1NwZWNpYWwodmFsdWUpIHtcblx0dmFyIHN0cmluZ1ZhbHVlID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKTtcblxuXHRyZXR1cm4gc3RyaW5nVmFsdWUgPT09ICdbb2JqZWN0IFJlZ0V4cF0nXG5cdFx0fHwgc3RyaW5nVmFsdWUgPT09ICdbb2JqZWN0IERhdGVdJ1xuXHRcdHx8IGlzUmVhY3RFbGVtZW50KHZhbHVlKVxufVxuXG4vLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2Jsb2IvYjVhYzk2M2ZiNz
118kxZDEyOThlN2YzOTYyMzYzODNiYzk1NWY5MTZjMS9zcmMvaXNvbW9ycGhpYy9jbGFzc2ljL2VsZW1lbnQvUmVhY3RFbGVtZW50LmpzI0wyMS1MMjVcbnZhciBjYW5Vc2VTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3I7XG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gY2FuVXNlU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpIDogMHhlYWM3O1xuXG5mdW5jdGlvbiBpc1JlYWN0RWxlbWVudCh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRVxufVxuXG5mdW5jdGlvbiBlbXB0eVRhcmdldCh2YWwpIHtcblx0cmV0dXJuIEFycmF5LmlzQXJyYXkodmFsKSA/IFtdIDoge31cbn1cblxuZnVuY3Rpb24gY2xvbmVVbmxlc3NPdGhlcndpc2VTcGVjaWZpZWQodmFsdWUsIG9wdGlvbnMpIHtcblx0cmV0dXJuIChvcHRpb25zLmNsb25lICE9PSBmYWxzZSAmJiBvcHRpb25zLmlzTWVyZ2VhYmxlT2JqZWN0KHZhbHVlKSlcblx0XHQ/IGRlZXBtZXJnZShlbXB0eVRhcmdldCh2YWx1ZSksIHZhbHVlLCBvcHRpb25zKVxuXHRcdDogdmFsdWVcbn1cblxuZnVuY3Rpb24gZGVmYXVsdEFycmF5TWVyZ2UodGFyZ2V0LCBzb3VyY2UsIG9wdGlvbnMpIHtcblx0cmV0dXJuIHRhcmdldC5jb25jYXQoc291cmNlKS5tYXAoZnVuY3Rpb24oZWxlbWVudCkge1xuXHRcdHJldHVybiBjbG9uZVVubGVzc090aGVyd2lzZVNwZWNpZmllZChlbGVtZW50LCBvcHRpb25zKVxuXHR9KVxufVxuXG5mdW5jdGlvbiBnZXRNZXJnZUZ1bmN0aW9uKGtleSwgb3B0aW9ucykge1xuXHRpZiAoIW9wdGlvbnMuY3VzdG9tTWVyZ2UpIHtcblx0XHRyZXR1cm4gZGVlcG1lcmdlXG5cdH1cblx0dmFyIGN1c3RvbU1lcmdlID0gb3B0aW9ucy5jdXN0b21NZXJnZShrZXkpO1xuXHRyZXR1cm4gdHlwZW9mIGN1c3RvbU1lcmdlID09PSAnZnVuY3Rpb24nID8gY3VzdG9tTWVyZ2UgOiBkZWVwbWVyZ2Vcbn1cblxuZnVuY3Rpb24gZ2V0RW51bWVyYWJsZU93blByb3BlcnR5U3ltYm9scyh0YXJnZXQpIHtcblx0cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNcblx0XHQ/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KS5maWx0ZXIoZnVuY3Rpb24oc3ltYm9sKSB7XG5cdFx0XHRyZXR1cm4gdGFyZ2V0LnByb3BlcnR5SXNFbnVtZXJhYmxlKHN5bWJvbClcblx0XHR9KVxuXHRcdDogW11cbn1cblxuZnVuY3Rpb24gZ2V0S2V5cyh0YXJnZXQpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKHRhcmdldCkuY29uY2F0KGdldEVudW1lcmFibGVPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KSlcbn1cblxuZnVuY3Rpb24gcHJvcGVydHlJc09uT2JqZWN0KG9iamVjdCwgcHJvcGVydHkpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gcHJvcGVydHkgaW4gb2JqZWN0XG5cdH0gY2F0Y2goXykge1xuXHRcdHJldHVybiBmYWxzZVxuXHR9XG59XG5cbi8vIFByb3RlY3RzIGZyb20gcHJvdG90eXBlIHBvaXNvbmluZyBhbmQgdW5leHBlY3RlZCBtZXJnaW5nIHVwIHRoZSBwcm90b3R5cGUgY2hhaW4uXG5mdW5jdGlvbiBwcm9wZXJ0eUlzVW5zYWZlKHRhcmdldCwga2V5KSB7XG5cdHJldHVybiBwcm9wZXJ0eUlzT25PYmplY3QodGFyZ2V0LCBrZXkpIC8vIFByb3BlcnRpZXMgYXJlIHNhZmUgdG8gbWVyZ2UgaWYgdGhleSBkb24ndCBleGlzdCBpbiB0aGUgdGFyZ2V0IHlldCxcblx0XHQmJiAhKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRhcmdldCwga2V5KSAvLyB1bnNhZmUgaWYgdGhleSBleGlzdCB1cCB0aGUgcHJvdG90eXBlIGNoYWluLFxuXHRcdFx0JiYgT2JqZWN0LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodGFyZ2V0LCBrZXkpKSAvLyBhbmQgYWxzbyB1bnNhZmUgaWYgdGhleSdyZSBub25lbnVtZXJhYmxlLlxufVxuXG5mdW5jdGlvbiBtZXJnZU9iamVjdCh0YXJnZXQsIHNvdXJjZSwgb3B0aW9ucykge1xuXHR2YXIgZGVzdGluYXRpb24gPSB7fTtcblx0aWYgKG9wdGlvbnMuaXNNZXJnZWFibGVPYmplY3QodGFyZ2V0KSkge1xuXHRcdGdldEtleXModGFyZ2V0KS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuXHRcdFx0ZGVzdGluYXRpb25ba2V5XSA9IGNsb25lVW5sZXNzT3RoZXJ3aXNlU3BlY2lmaWVkKHRhcmdldFtrZXldLCBvcHRpb25zKTtcblx0XHR9KTtcblx0fVxuXHRnZXRLZXlzKHNvdXJjZSkuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcblx0XHRpZiAocHJvcGVydHlJc1Vuc2FmZSh0YXJnZXQsIGtleSkpIHtcblx0XHRcdHJldHVyblxuXHRcdH1cblxuXHRcdGlmIChwcm9wZXJ0eUlzT25PYmplY3QodGFyZ2V0LCBrZXkpICYmIG9wdGlvbnMuaXNNZXJnZWFibGVPYmplY3Qoc291cmNlW2tleV0pKSB7XG5cdFx0XHRkZXN0aW5hdGlvbltrZXldID0gZ2V0TWVyZ2VGdW5jdGlvbihrZXksIG9wdGlvbnMpKHRhcmdldFtrZXldLCBzb3VyY2Vba2V5XSwgb3B0aW9ucyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRlc3RpbmF0aW9uW2tleV0gPSBjbG9uZVVubGVzc090aGVyd2lzZVNwZWNpZmllZChzb3VyY2Vba2V5XSwgb3B0aW9ucyk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGRlc3RpbmF0aW9uXG59XG5cbmZ1bmN0aW9uIGRlZXBtZXJnZSh0YXJnZXQsIHNvdXJjZSwgb3B0aW9ucykge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblx0b3B0aW9ucy5hcnJheU1lcmdlID0gb3B0aW9ucy5hcnJheU1lcmdlIHx8IGRlZmF1bHRBcnJheU1lcmdlO1xuXHRvcHRpb25zLmlzTWVyZ2VhYmxlT2JqZWN0ID0gb3B0aW9ucy5pc01lcmdlYWJsZU9iamVjdCB8fCBpc01lcmdlYWJsZU9iamVjdDtcblx0Ly8gY2xvbmVVbmxlc3NPdGhlcndpc2VTcGVjaWZpZWQgaXMgYWRkZWQgdG8gYG9wdGlvbnNgIHNvIHRoYXQgY3VzdG9tIGFycmF5TWVyZ2UoKVxuXHQvLyBpbXBsZW1lbnRhdGlvbnMgY2FuIHVzZSBpdC4gVGhlIGNhbGxlciBtYXkgbm90IHJlcGxhY2UgaXQuXG5cdG9wdGlvbnMuY2xvbmVVbmxlc3NPdGhlcndpc2VTcGVjaWZpZWQgPSBjbG9uZVVubGVzc090aGVyd2lzZVNwZWNpZmllZDtcblxuXHR2YXIgc291cmNlSXNBcnJheSA9IEFycmF5LmlzQXJyYXkoc291cmNlKTtcblx0dmFyIHRhcmdldElzQXJyYXkgPSBBcnJheS5pc0FycmF
1185KHRhcmdldCk7XG5cdHZhciBzb3VyY2VBbmRUYXJnZXRUeXBlc01hdGNoID0gc291cmNlSXNBcnJheSA9PT0gdGFyZ2V0SXNBcnJheTtcblxuXHRpZiAoIXNvdXJjZUFuZFRhcmdldFR5cGVzTWF0Y2gpIHtcblx0XHRyZXR1cm4gY2xvbmVVbmxlc3NPdGhlcndpc2VTcGVjaWZpZWQoc291cmNlLCBvcHRpb25zKVxuXHR9IGVsc2UgaWYgKHNvdXJjZUlzQXJyYXkpIHtcblx0XHRyZXR1cm4gb3B0aW9ucy5hcnJheU1lcmdlKHRhcmdldCwgc291cmNlLCBvcHRpb25zKVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBtZXJnZU9iamVjdCh0YXJnZXQsIHNvdXJjZSwgb3B0aW9ucylcblx0fVxufVxuXG5kZWVwbWVyZ2UuYWxsID0gZnVuY3Rpb24gZGVlcG1lcmdlQWxsKGFycmF5LCBvcHRpb25zKSB7XG5cdGlmICghQXJyYXkuaXNBcnJheShhcnJheSkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ2ZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSBhbiBhcnJheScpXG5cdH1cblxuXHRyZXR1cm4gYXJyYXkucmVkdWNlKGZ1bmN0aW9uKHByZXYsIG5leHQpIHtcblx0XHRyZXR1cm4gZGVlcG1lcmdlKHByZXYsIG5leHQsIG9wdGlvbnMpXG5cdH0sIHt9KVxufTtcblxudmFyIGRlZXBtZXJnZV8xID0gZGVlcG1lcmdlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZXBtZXJnZV8xO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAyMjE6XG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIHtcbi8qIGhhcm1vbnkgZXhwb3J0ICovICAgXCJkZWZhdWx0XCI6IGZ1bmN0aW9uKCkgeyByZXR1cm4gLyogYmluZGluZyAqLyBGdXNlOyB9XG4vKiBoYXJtb255IGV4cG9ydCAqLyB9KTtcbi8qKlxuICogRnVzZS5qcyB2Ni41LjMgLSBMaWdodHdlaWdodCBmdXp6eS1zZWFyY2ggKGh0dHA6Ly9mdXNlanMuaW8pXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDIxIEtpcm8gUmlzayAoaHR0cDovL2tpcm8ubWUpXG4gKiBBbGwgUmlnaHRzIFJlc2VydmVkLiBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjBcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqL1xuXG5mdW5jdGlvbiBpc0FycmF5KHZhbHVlKSB7XG4gIHJldHVybiAhQXJyYXkuaXNBcnJheVxuICAgID8gZ2V0VGFnKHZhbHVlKSA9PT0gJ1tvYmplY3QgQXJyYXldJ1xuICAgIDogQXJyYXkuaXNBcnJheSh2YWx1ZSlcbn1cblxuLy8gQWRhcHRlZCBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iL21hc3Rlci8uaW50ZXJuYWwvYmFzZVRvU3RyaW5nLmpzXG5jb25zdCBJTkZJTklUWSA9IDEgLyAwO1xuZnVuY3Rpb24gYmFzZVRvU3RyaW5nKHZhbHVlKSB7XG4gIC8vIEV4aXQgZWFybHkgZm9yIHN0cmluZ3MgdG8gYXZvaWQgYSBwZXJmb3JtYW5jZSBoaXQgaW4gc29tZSBlbnZpcm9ubWVudHMuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuICBsZXQgcmVzdWx0ID0gdmFsdWUgKyAnJztcbiAgcmV0dXJuIHJlc3VsdCA9PSAnMCcgJiYgMSAvIHZhbHVlID09IC1JTkZJTklUWSA/ICctMCcgOiByZXN1bHRcbn1cblxuZnVuY3Rpb24gdG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09IG51bGwgPyAnJyA6IGJhc2VUb1N0cmluZyh2YWx1ZSlcbn1cblxuZnVuY3Rpb24gaXNTdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZydcbn1cblxuZnVuY3Rpb24gaXNOdW1iZXIodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcidcbn1cblxuLy8gQWRhcHRlZCBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iL21hc3Rlci9pc0Jvb2xlYW4uanNcbmZ1bmN0aW9uIGlzQm9vbGVhbih2YWx1ZSkge1xuICByZXR1cm4gKFxuICAgIHZhbHVlID09PSB0cnVlIHx8XG4gICAgdmFsdWUgPT09IGZhbHNlIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgZ2V0VGFnKHZhbHVlKSA9PSAnW29iamVjdCBCb29sZWFuXScpXG4gIClcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCdcbn1cblxuLy8gQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHZhbHVlKSAmJiB2YWx1ZSAhPT0gbnVsbFxufVxuXG5mdW5jdGlvbiBpc0RlZmluZWQodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGxcbn1cblxuZnVuY3Rpb24gaXNCbGFuayh2YWx1ZSkge1xuICByZXR1cm4gIXZhbHVlLnRyaW0oKS5sZW5ndGhcbn1cblxuLy8gR2V0cyB0aGUgYHRvU3RyaW5nVGFnYCBvZiBgdmFsdWVgLlxuLy8gQWRhcHRlZCBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iL21hc3Rlci8uaW50ZXJuYWwvZ2V0VGFnLmpzXG5mdW5jdGlvbiBnZXRUYWcodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09IG51bGxcbiAgICA/IHZhbHVlID09PSB1bmRlZmluZWRcbiAgICAgID8gJ1tvYmplY3QgVW5kZWZpbmVkXSdcbiAgICAgIDogJ1tvYmplY3QgTnVsbF0nXG4gICAgOiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpXG59XG5cbmNvbnN0IEVYVEVOREVEX1NFQVJDSF9VTkFWQUlMQUJMRSA9ICdFeHRlbmRlZCBzZWFyY2ggaXMgbm90IGF2YWlsYWJsZSc7XG5cbmNvbnN0IElOQ09SUkVDVF9JTkRFWF9UWVBFID0gXCJJbmNvcnJlY3QgJ2luZGV4JyB0eXBlXCI7XG5cbmNvbnN0IExPR0lDQUxfU0VBUkNIX0lOVkFMSURfUVVFUllfRk9SX0tFWSA9IChrZXkpID0+XG4gIGBJbnZhbGlkIHZhbHVlIGZvciBrZXkgJHtrZXl9YDtcblxuY29uc3QgUEFUVEVSTl9MRU5HVEhfVE9PX0xBUkdFID0gKG1heCkgPT5cbiAgYFBhdHRlcm4gbGVuZ3RoIGV4Y2VlZHMgbWF4IG9mICR7bWF4fS5gO1xuXG5jb25zdCBNSVNTSU5HX0tFWV9QUk9QRVJUWSA9IChuYW1lKSA9PiBgTWlzc2luZyAke25hbWV9IHByb3BlcnR5IGluIGtleWA7XG5cbmNvbnN0IElOVkFMSURfS0VZX1dFSUdIVF9WQUxVRSA9IChrZXkpID0+XG4gIGB
118Qcm9wZXJ0eSAnd2VpZ2h0JyBpbiBrZXkgJyR7a2V5fScgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXJgO1xuXG5jb25zdCBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG5jbGFzcyBLZXlTdG9yZSB7XG4gIGNvbnN0cnVjdG9yKGtleXMpIHtcbiAgICB0aGlzLl9rZXlzID0gW107XG4gICAgdGhpcy5fa2V5TWFwID0ge307XG5cbiAgICBsZXQgdG90YWxXZWlnaHQgPSAwO1xuXG4gICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGxldCBvYmogPSBjcmVhdGVLZXkoa2V5KTtcblxuICAgICAgdG90YWxXZWlnaHQgKz0gb2JqLndlaWdodDtcblxuICAgICAgdGhpcy5fa2V5cy5wdXNoKG9iaik7XG4gICAgICB0aGlzLl9rZXlNYXBbb2JqLmlkXSA9IG9iajtcblxuICAgICAgdG90YWxXZWlnaHQgKz0gb2JqLndlaWdodDtcbiAgICB9KTtcblxuICAgIC8vIE5vcm1hbGl6ZSB3ZWlnaHRzIHNvIHRoYXQgdGhlaXIgc3VtIGlzIGVxdWFsIHRvIDFcbiAgICB0aGlzLl9rZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAga2V5LndlaWdodCAvPSB0b3RhbFdlaWdodDtcbiAgICB9KTtcbiAgfVxuICBnZXQoa2V5SWQpIHtcbiAgICByZXR1cm4gdGhpcy5fa2V5TWFwW2tleUlkXVxuICB9XG4gIGtleXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2tleXNcbiAgfVxuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuX2tleXMpXG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlS2V5KGtleSkge1xuICBsZXQgcGF0aCA9IG51bGw7XG4gIGxldCBpZCA9IG51bGw7XG4gIGxldCBzcmMgPSBudWxsO1xuICBsZXQgd2VpZ2h0ID0gMTtcblxuICBpZiAoaXNTdHJpbmcoa2V5KSB8fCBpc0FycmF5KGtleSkpIHtcbiAgICBzcmMgPSBrZXk7XG4gICAgcGF0aCA9IGNyZWF0ZUtleVBhdGgoa2V5KTtcbiAgICBpZCA9IGNyZWF0ZUtleUlkKGtleSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKCFoYXNPd24uY2FsbChrZXksICduYW1lJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihNSVNTSU5HX0tFWV9QUk9QRVJUWSgnbmFtZScpKVxuICAgIH1cblxuICAgIGNvbnN0IG5hbWUgPSBrZXkubmFtZTtcbiAgICBzcmMgPSBuYW1lO1xuXG4gICAgaWYgKGhhc093bi5jYWxsKGtleSwgJ3dlaWdodCcpKSB7XG4gICAgICB3ZWlnaHQgPSBrZXkud2VpZ2h0O1xuXG4gICAgICBpZiAod2VpZ2h0IDw9IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKElOVkFMSURfS0VZX1dFSUdIVF9WQUxVRShuYW1lKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXRoID0gY3JlYXRlS2V5UGF0aChuYW1lKTtcbiAgICBpZCA9IGNyZWF0ZUtleUlkKG5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIHsgcGF0aCwgaWQsIHdlaWdodCwgc3JjIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlS2V5UGF0aChrZXkpIHtcbiAgcmV0dXJuIGlzQXJyYXkoa2V5KSA/IGtleSA6IGtleS5zcGxpdCgnLicpXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUtleUlkKGtleSkge1xuICByZXR1cm4gaXNBcnJheShrZXkpID8ga2V5LmpvaW4oJy4nKSA6IGtleVxufVxuXG5mdW5jdGlvbiBnZXQob2JqLCBwYXRoKSB7XG4gIGxldCBsaXN0ID0gW107XG4gIGxldCBhcnIgPSBmYWxzZTtcblxuICBjb25zdCBkZWVwR2V0ID0gKG9iaiwgcGF0aCwgaW5kZXgpID0+IHtcbiAgICBpZiAoIWlzRGVmaW5lZChvYmopKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKCFwYXRoW2luZGV4XSkge1xuICAgICAgLy8gSWYgdGhlcmUncyBubyBwYXRoIGxlZnQsIHdlJ3ZlIGFycml2ZWQgYXQgdGhlIG9iamVjdCB3ZSBjYXJlIGFib3V0LlxuICAgICAgbGlzdC5wdXNoKG9iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBrZXkgPSBwYXRoW2luZGV4XTtcblxuICAgICAgY29uc3QgdmFsdWUgPSBvYmpba2V5XTtcblxuICAgICAgaWYgKCFpc0RlZmluZWQodmFsdWUpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBJZiB3ZSdyZSBhdCB0aGUgbGFzdCB2YWx1ZSBpbiB0aGUgcGF0aCwgYW5kIGlmIGl0J3MgYSBzdHJpbmcvbnVtYmVyL2Jvb2wsXG4gICAgICAvLyBhZGQgaXQgdG8gdGhlIGxpc3RcbiAgICAgIGlmIChcbiAgICAgICAgaW5kZXggPT09IHBhdGgubGVuZ3RoIC0gMSAmJlxuICAgICAgICAoaXNTdHJpbmcodmFsdWUpIHx8IGlzTnVtYmVyKHZhbHVlKSB8fCBpc0Jvb2xlYW4odmFsdWUpKVxuICAgICAgKSB7XG4gICAgICAgIGxpc3QucHVzaCh0b1N0cmluZyh2YWx1ZSkpO1xuICAgICAgfSBlbHNlIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBhcnIgPSB0cnVlO1xuICAgICAgICAvLyBTZWFyY2ggZWFjaCBpdGVtIGluIHRoZSBhcnJheS5cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHZhbHVlLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgICAgICAgZGVlcEdldCh2YWx1ZVtpXSwgcGF0aCwgaW5kZXggKyAxKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChwYXRoLmxlbmd0aCkge1xuICAgICAgICAvLyBBbiBvYmplY3QuIFJlY3Vyc2UgZnVydGhlci5cbiAgICAgICAgZGVlcEdldCh2YWx1ZSwgcGF0aCwgaW5kZXggKyAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLy8gQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKHNpbmNlIHBhdGggdXNlZCB0byBiZSBhIHN0cmluZylcbiAgZGVlcEdldChvYmosIGlzU3RyaW5nKHBhdGgpID8gcGF0aC5zcGxpdCgnLicpIDogcGF0aCwgMCk7XG5cbiAgcmV0dXJuIGFyciA/IGxpc3QgOiBsaXN0WzBdXG59XG5cbmNvbnN0IE1hdGNoT3B0aW9ucyA9IHtcbiAgLy8gV2hldGhlciB0aGUgbWF0Y2hlcyBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdCBzZXQuIFdoZW4gYHRydWVgLCBlYWNoIHJlY29yZCBpbiB0aGUgcmVzdWx0XG4gIC8vIHNldCB3aWxsIGluY2x1ZGUgdGhlIGluZGljZXMgb2YgdGhlIG1hdGNoZWQgY2hhcmFjdGVycy5cbiAgLy8gVGhlc2UgY2FuIGNvbnNlcXVlbnRseSBiZSB1c2VkIGZvciBoaWdobGlnaHRpbmcgcHVycG9zZXMuXG4gIGluY2x1ZGVNYXRjaGVzOiBmYWxzZSxcbiAgLy8gV2hlbiBgdHJ1ZWAsIHRoZSBtYXRjaGluZyBmdW5jdGlvbiB3aWxsIGNvbnRpbnVlIHRvIH
118RoZSBlbmQgb2YgYSBzZWFyY2ggcGF0dGVybiBldmVuIGlmXG4gIC8vIGEgcGVyZmVjdCBtYXRjaCBoYXMgYWxyZWFkeSBiZWVuIGxvY2F0ZWQgaW4gdGhlIHN0cmluZy5cbiAgZmluZEFsbE1hdGNoZXM6IGZhbHNlLFxuICAvLyBNaW5pbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRoYXQgbXVzdCBiZSBtYXRjaGVkIGJlZm9yZSBhIHJlc3VsdCBpcyBjb25zaWRlcmVkIGEgbWF0Y2hcbiAgbWluTWF0Y2hDaGFyTGVuZ3RoOiAxXG59O1xuXG5jb25zdCBCYXNpY09wdGlvbnMgPSB7XG4gIC8vIFdoZW4gYHRydWVgLCB0aGUgYWxnb3JpdGhtIGNvbnRpbnVlcyBzZWFyY2hpbmcgdG8gdGhlIGVuZCBvZiB0aGUgaW5wdXQgZXZlbiBpZiBhIHBlcmZlY3RcbiAgLy8gbWF0Y2ggaXMgZm91bmQgYmVmb3JlIHRoZSBlbmQgb2YgdGhlIHNhbWUgaW5wdXQuXG4gIGlzQ2FzZVNlbnNpdGl2ZTogZmFsc2UsXG4gIC8vIFdoZW4gdHJ1ZSwgdGhlIG1hdGNoaW5nIGZ1bmN0aW9uIHdpbGwgY29udGludWUgdG8gdGhlIGVuZCBvZiBhIHNlYXJjaCBwYXR0ZXJuIGV2ZW4gaWZcbiAgaW5jbHVkZVNjb3JlOiBmYWxzZSxcbiAgLy8gTGlzdCBvZiBwcm9wZXJ0aWVzIHRoYXQgd2lsbCBiZSBzZWFyY2hlZC4gVGhpcyBhbHNvIHN1cHBvcnRzIG5lc3RlZCBwcm9wZXJ0aWVzLlxuICBrZXlzOiBbXSxcbiAgLy8gV2hldGhlciB0byBzb3J0IHRoZSByZXN1bHQgbGlzdCwgYnkgc2NvcmVcbiAgc2hvdWxkU29ydDogdHJ1ZSxcbiAgLy8gRGVmYXVsdCBzb3J0IGZ1bmN0aW9uOiBzb3J0IGJ5IGFzY2VuZGluZyBzY29yZSwgYXNjZW5kaW5nIGluZGV4XG4gIHNvcnRGbjogKGEsIGIpID0+XG4gICAgYS5zY29yZSA9PT0gYi5zY29yZSA/IChhLmlkeCA8IGIuaWR4ID8gLTEgOiAxKSA6IGEuc2NvcmUgPCBiLnNjb3JlID8gLTEgOiAxXG59O1xuXG5jb25zdCBGdXp6eU9wdGlvbnMgPSB7XG4gIC8vIEFwcHJveGltYXRlbHkgd2hlcmUgaW4gdGhlIHRleHQgaXMgdGhlIHBhdHRlcm4gZXhwZWN0ZWQgdG8gYmUgZm91bmQ/XG4gIGxvY2F0aW9uOiAwLFxuICAvLyBBdCB3aGF0IHBvaW50IGRvZXMgdGhlIG1hdGNoIGFsZ29yaXRobSBnaXZlIHVwLiBBIHRocmVzaG9sZCBvZiAnMC4wJyByZXF1aXJlcyBhIHBlcmZlY3QgbWF0Y2hcbiAgLy8gKG9mIGJvdGggbGV0dGVycyBhbmQgbG9jYXRpb24pLCBhIHRocmVzaG9sZCBvZiAnMS4wJyB3b3VsZCBtYXRjaCBhbnl0aGluZy5cbiAgdGhyZXNob2xkOiAwLjYsXG4gIC8vIERldGVybWluZXMgaG93IGNsb3NlIHRoZSBtYXRjaCBtdXN0IGJlIHRvIHRoZSBmdXp6eSBsb2NhdGlvbiAoc3BlY2lmaWVkIGFib3ZlKS5cbiAgLy8gQW4gZXhhY3QgbGV0dGVyIG1hdGNoIHdoaWNoIGlzICdkaXN0YW5jZScgY2hhcmFjdGVycyBhd2F5IGZyb20gdGhlIGZ1enp5IGxvY2F0aW9uXG4gIC8vIHdvdWxkIHNjb3JlIGFzIGEgY29tcGxldGUgbWlzbWF0Y2guIEEgZGlzdGFuY2Ugb2YgJzAnIHJl
118cXVpcmVzIHRoZSBtYXRjaCBiZSBhdFxuICAvLyB0aGUgZXhhY3QgbG9jYXRpb24gc3BlY2lmaWVkLCBhIHRocmVzaG9sZCBvZiAnMTAwMCcgd291bGQgcmVxdWlyZSBhIHBlcmZlY3QgbWF0Y2hcbiAgLy8gdG8gYmUgd2l0aGluIDgwMCBjaGFyYWN0ZXJzIG9mIHRoZSBmdXp6eSBsb2NhdGlvbiB0byBiZSBmb3VuZCB1c2luZyBhIDAuOCB0aHJlc2hvbGQuXG4gIGRpc3RhbmNlOiAxMDBcbn07XG5cbmNvbnN0IEFkdmFuY2VkT3B0aW9ucyA9IHtcbiAgLy8gV2hlbiBgdHJ1ZWAsIGl0IGVuYWJsZXMgdGhlIHVzZSBvZiB1bml4LWxpa2Ugc2VhcmNoIGNvbW1hbmRzXG4gIHVzZUV4dGVuZGVkU2VhcmNoOiBmYWxzZSxcbiAgLy8gVGhlIGdldCBmdW5jdGlvbiB0byB1c2Ugd2hlbiBmZXRjaGluZyBhbiBvYmplY3QncyBwcm9wZXJ0aWVzLlxuICAvLyBUaGUgZGVmYXVsdCB3aWxsIHNlYXJjaCBuZXN0ZWQgcGF0aHMgKmllIGZvby5iYXIuYmF6KlxuICBnZXRGbjogZ2V0LFxuICAvLyBXaGVuIGB0cnVlYCwgc2VhcmNoIHdpbGwgaWdub3JlIGBsb2NhdGlvbmAgYW5kIGBkaXN0YW5jZWAsIHNvIGl0IHdvbid0IG1hdHRlclxuICAvLyB3aGVyZSBpbiB0aGUgc3RyaW5nIHRoZSBwYXR0ZXJuIGFwcGVhcnMuXG4gIC8vIE1vcmUgaW5mbzogaHR0cHM6Ly9mdXNlanMuaW8vY29uY2VwdHMvc2NvcmluZy10aGVvcnkuaHRtbCNmdXp6aW5lc3Mtc2NvcmVcbiAgaWdub3JlTG9jYXRpb246IGZhbHNlLFxuICAvLyBXaGVuIGB0cnVlYCwgdGhlIGNhbGN1bGF0aW9uIGZvciB0aGUgcmVsZXZhbmNlIHNjb3JlICh1c2VkIGZvciBzb3J0aW5nKSB3aWxsXG4gIC8vIGlnbm9yZSB0aGUgZmllbGQtbGVuZ3RoIG5vcm0uXG4gIC8vIE1vcmUgaW5mbzogaHR0cHM6Ly9mdXNlanMuaW8vY29uY2VwdHMvc2NvcmluZy10aGVvcnkuaHRtbCNmaWVsZC1sZW5ndGgtbm9ybVxuICBpZ25vcmVGaWVsZE5vcm06IGZhbHNlLFxuICAvLyBUaGUgd2VpZ2h0IHRvIGRldGVybWluZSBob3cgbXVjaCBmaWVsZCBsZW5ndGggbm9ybSBlZmZlY3RzIHNjb3JpbmcuXG4gIGZpZWxkTm9ybVdlaWdodDogMVxufTtcblxudmFyIENvbmZpZyA9IHtcbiAgLi4uQmFzaWNPcHRpb25zLFxuICAuLi5NYXRjaE9wdGlvbnMsXG4gIC4uLkZ1enp5T3B0aW9ucyxcbiAgLi4uQWR2YW5jZWRPcHRpb25zXG59O1xuXG5jb25zdCBTUEFDRSA9IC9bXiBdKy9nO1xuXG4vLyBGaWVsZC1sZW5ndGggbm9ybTogdGhlIHNob3J0ZXIgdGhlIGZpZWxkLCB0aGUgaGlnaGVyIHRoZSB3ZWlnaHQuXG4vLyBTZXQgdG8gMyBkZWNpbWFscyB0byByZWR1Y2UgaW5kZXggc2l6ZS5cbmZ1bmN0aW9uIG5vcm0od2VpZ2h0ID0gMSwgbWFudGlzc2EgPSAzKSB7XG4gIGNvbnN0IGNhY2hlID0gbmV3IE1hcCgpO1xuICBjb25zdCBtID0gTWF0aC5wb3coMTAsIG1hbnRpc3NhKTtcblxuICByZXR1cm4ge1xuICAgIGdldCh2YWx1ZSkge1xuICAgICAgY29uc3QgbnVtVG9rZW5zID0gdmFsdWUubWF0Y2goU1BBQ0UpLmxlbmd0aDtcblxuICAgICAgaWYgKGNhY2hlLmhhcyhudW1Ub2tlbnMpKSB7XG4gICAgICAgIHJldHVybiBjYWNoZS5nZXQobnVtVG9rZW5zKVxuICAgICAgfVxuXG4gICAgICAvLyBEZWZhdWx0IGZ1bmN0aW9uIGlzIDEvc3FydCh4KSwgd2VpZ2h0IG1ha2VzIHRoYXQgdmFyaWFibGVcbiAgICAgIGNvbnN0IG5vcm0gPSAxIC8gTWF0aC5wb3cobnVtVG9rZW5zLCAwLjUgKiB3ZWlnaHQpO1xuXG4gICAgICAvLyBJbiBwbGFjZSBvZiBgdG9GaXhlZChtYW50aXNzYSlgLCBmb3IgZmFzdGVyIGNvbXB1dGF0aW9uXG4gICAgICBjb25zdCBuID0gcGFyc2VGbG9hdChNYXRoLnJvdW5kKG5vcm0gKiBtKSAvIG0pO1xuXG4gICAgICBjYWNoZS5zZXQobnVtVG9rZW5zLCBuKTtcblxuICAgICAgcmV0dXJuIG5cbiAgICB9LFxuICAgIGNsZWFyKCkge1xuICAgICAgY2FjaGUuY2xlYXIoKTtcbiAgICB9XG4gIH1cbn1cblxuY2xhc3MgRnVzZUluZGV4IHtcbiAgY29uc3RydWN0b3Ioe1xuICAgIGdldEZuID0gQ29uZmlnLmdldEZuLFxuICAgIGZpZWxkTm9ybVdlaWdodCA9IENvbmZpZy5maWVsZE5vcm1XZWlnaHRcbiAgfSA9IHt9KSB7XG4gICAgdGhpcy5ub3JtID0gbm9ybShmaWVsZE5vcm1XZWlnaHQsIDMpO1xuICAgIHRoaXMuZ2V0Rm4gPSBnZXRGbjtcbiAgICB0aGlzLmlzQ3JlYXRlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5zZXRJbmRleFJlY29yZHMoKTtcbiAgfVxuICBzZXRTb3VyY2VzKGRvY3MgPSBbXSkge1xuICAgIHRoaXMuZG9jcyA9IGRvY3M7XG4gIH1cbiAgc2V0SW5kZXhSZWNvcmRzKHJlY29yZHMgPSBbXSkge1xuICAgIHRoaXMucmVjb3JkcyA9IHJlY29yZHM7XG4gIH1cbiAgc2V0S2V5cyhrZXlzID0gW10pIHtcbiAgICB0aGlzLmtleXMgPSBrZXlzO1xuICAgIHRoaXMuX2tleXNNYXAgPSB7fTtcbiAgICBrZXlzLmZvckVhY2goKGtleSwgaWR4KSA9PiB7XG4gICAgICB0aGlzLl9rZXlzTWFwW2tleS5pZF0gPSBpZHg7XG4gICAgfSk7XG4gIH1cbiAgY3JlYXRlKCkge1xuICAgIGlmICh0aGlzLmlzQ3JlYXRlZCB8fCAhdGhpcy5kb2NzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5pc0NyZWF0ZWQgPSB0cnVlO1xuXG4gICAgLy8gTGlzdCBpcyBBcnJheTxTdHJpbmc+XG4gICAgaWYgKGlzU3RyaW5nKHRoaXMuZG9jc1swXSkpIHtcbiAgICAgIHRoaXMuZG9jcy5mb3JFYWNoKChkb2MsIGRvY0luZGV4KSA9PiB7XG4gICAgICAgIHRoaXMuX2FkZFN0cmluZyhkb2MsIGRvY0luZGV4KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBMaXN0IGlzIEFycmF5PE9iamVjdD5cbiAgICAgIHRoaXMuZG9jcy5mb3JFYWNoKChkb2MsIGRvY0luZGV4KSA9PiB7XG4gICAgICAgIHRoaXMuX2FkZE9iamVjdChkb2MsIGRvY0luZGV4KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMubm9ybS5jbGVhcigpO1xuICB9XG4gIC8vIEFkZHMgYSBkb2MgdG8gdGhlIGVuZCBvZiB0aGUgaW5kZXhcbiAgYWRkKGRvYykge1xuICAgIGNvbnN0IGlkeCA9IHRoaXMuc2l6ZSgpO1xuXG4gICAgaWYgKGlzU3RyaW5nKGRvYykpIHtcbiAgICAgIHRoaXMuX2FkZFN0cmluZyhkb2MsIGlkeCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2FkZE9iamVjdChkb2MsIGlkeCk7XG4gICAgfVxuICB9XG4gIC8vIFJlbW92ZXMgdGhlIGRvYyBhdCB0aGUgc3BlY2lmaWVkIGluZGV4IG9mIHRoZSBpbmRleFxuICByZW1vdmVBdChpZHgpIHtcbiAgICB0aGlzLnJlY29yZHMuc3BsaWNlKGlkeCwgMSk7XG5cbiAgICAvLyBDaGFuZ2UgcmVmIGluZGV4IG9mIGV2ZXJ5IHN1YnNxdWVudCBkb2
118NcbiAgICBmb3IgKGxldCBpID0gaWR4LCBsZW4gPSB0aGlzLnNpemUoKTsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgICB0aGlzLnJlY29yZHNbaV0uaSAtPSAxO1xuICAgIH1cbiAgfVxuICBnZXRWYWx1ZUZvckl0ZW1BdEtleUlkKGl0ZW0sIGtleUlkKSB7XG4gICAgcmV0dXJuIGl0ZW1bdGhpcy5fa2V5c01hcFtrZXlJZF1dXG4gIH1cbiAgc2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZWNvcmRzLmxlbmd0aFxuICB9XG4gIF9hZGRTdHJpbmcoZG9jLCBkb2NJbmRleCkge1xuICAgIGlmICghaXNEZWZpbmVkKGRvYykgfHwgaXNCbGFuayhkb2MpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBsZXQgcmVjb3JkID0ge1xuICAgICAgdjogZG9jLFxuICAgICAgaTogZG9jSW5kZXgsXG4gICAgICBuOiB0aGlzLm5vcm0uZ2V0KGRvYylcbiAgICB9O1xuXG4gICAgdGhpcy5yZWNvcmRzLnB1c2gocmVjb3JkKTtcbiAgfVxuICBfYWRkT2JqZWN0KGRvYywgZG9jSW5kZXgpIHtcbiAgICBsZXQgcmVjb3JkID0geyBpOiBkb2NJbmRleCwgJDoge30gfTtcblxuICAgIC8vIEl0ZXJhdGUgb3ZlciBldmVyeSBrZXkgKGkuZSwgcGF0aCksIGFuZCBmZXRjaCB0aGUgdmFsdWUgYXQgdGhhdCBrZXlcbiAgICB0aGlzLmtleXMuZm9yRWFjaCgoa2V5LCBrZXlJbmRleCkgPT4ge1xuICAgICAgLy8gY29uc29sZS5sb2coa2V5KVxuICAgICAgbGV0IHZhbHVlID0gdGhpcy5nZXRGbihkb2MsIGtleS5wYXRoKTtcblxuICAgICAgaWYgKCFpc0RlZmluZWQodmFsdWUpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgbGV0IHN1YlJlY29yZHMgPSBbXTtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBbeyBuZXN0ZWRBcnJJbmRleDogLTEsIHZhbHVlIH1dO1xuXG4gICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCB7IG5lc3RlZEFyckluZGV4LCB2YWx1ZSB9ID0gc3RhY2sucG9wKCk7XG5cbiAgICAgICAgICBpZiAoIWlzRGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGlzU3RyaW5nKHZhbHVlKSAmJiAhaXNCbGFuayh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGxldCBzdWJSZWNvcmQgPSB7XG4gICAgICAgICAgICAgIHY6IHZhbHVlLFxuICAgICAgICAgICAgICBpOiBuZXN0ZWRBcnJJbmRleCxcbiAgICAgICAgICAgICAgbjogdGhpcy5ub3JtLmdldCh2YWx1ZSlcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHN1YlJlY29yZHMucHVzaChzdWJSZWNvcmQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlLmZvckVhY2goKGl0ZW0sIGspID0+IHtcbiAgICAgICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICAgICAgbmVzdGVkQXJySW5kZXg6IGssXG4gICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgO1xuICAgICAgICB9XG4gICAgICAgIHJlY29yZC4kW2tleUluZGV4XSA9IHN1YlJlY29yZHM7XG4gICAgICB9IGVsc2UgaWYgKCFpc0JsYW5rKHZhbHVlKSkge1xuICAgICAgICBsZXQgc3ViUmVjb3JkID0ge1xuICAgICAgICAgIHY6IHZhbHVlLFxuICAgICAgICAgIG46IHRoaXMubm9ybS5nZXQodmFsdWUpXG4gICAgICAgIH07XG5cbiAgICAgICAgcmVjb3JkLiRba2V5SW5kZXhdID0gc3ViUmVjb3JkO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5yZWNvcmRzLnB1c2gocmVjb3JkKTtcbiAgfVxuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtleXM6IHRoaXMua2V5cyxcbiAgICAgIHJlY29yZHM6IHRoaXMucmVjb3Jkc1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVJbmRleChcbiAga2V5cyxcbiAgZG9jcyxcbiAgeyBnZXRGbiA9IENvbmZpZy5nZXRGbiwgZmllbGROb3JtV2VpZ2h0ID0gQ29uZmlnLmZpZWxkTm9ybVdlaWdodCB9ID0ge31cbikge1xuICBjb25zdCBteUluZGV4ID0gbmV3IEZ1c2VJbmRleCh7IGdldEZuLCBmaWVsZE5vcm1XZWlnaHQgfSk7XG4gIG15SW5kZXguc2V0S2V5cyhrZXlzLm1hcChjcmVhdGVLZXkpKTtcbiAgbXlJbmRleC5zZXRTb3VyY2VzKGRvY3MpO1xuICBteUluZGV4LmNyZWF0ZSgpO1xuICByZXR1cm4gbXlJbmRleFxufVxuXG5mdW5jdGlvbiBwYXJzZUluZGV4KFxuICBkYXRhLFxuICB7IGdldEZuID0gQ29uZmlnLmdldEZuLCBmaWVsZE5vcm1XZWlnaHQgPSBDb25maWcuZmllbGROb3JtV2VpZ2h0IH0gPSB7fVxuKSB7XG4gIGNvbnN0IHsga2V5cywgcmVjb3JkcyB9ID0gZGF0YTtcbiAgY29uc3QgbXlJbmRleCA9IG5ldyBGdXNlSW5kZXgoeyBnZXRGbiwgZmllbGROb3JtV2VpZ2h0IH0pO1xuICBteUluZGV4LnNldEtleXMoa2V5cyk7XG4gIG15SW5kZXguc2V0SW5kZXhSZWNvcmRzKHJlY29yZHMpO1xuICByZXR1cm4gbXlJbmRleFxufVxuXG5mdW5jdGlvbiBjb21wdXRlU2NvcmUkMShcbiAgcGF0dGVybixcbiAge1xuICAgIGVycm9ycyA9IDAsXG4gICAgY3VycmVudExvY2F0aW9uID0gMCxcbiAgICBleHBlY3RlZExvY2F0aW9uID0gMCxcbiAgICBkaXN0YW5jZSA9IENvbmZpZy5kaXN0YW5jZSxcbiAgICBpZ25vcmVMb2NhdGlvbiA9IENvbmZpZy5pZ25vcmVMb2NhdGlvblxuICB9ID0ge31cbikge1xuICBjb25zdCBhY2N1cmFjeSA9IGVycm9ycyAvIHBhdHRlcm4ubGVuZ3RoO1xuXG4gIGlmIChpZ25vcmVMb2NhdGlvbikge1xuICAgIHJldHVybiBhY2N1cmFjeVxuICB9XG5cbiAgY29uc3QgcHJveGltaXR5ID0gTWF0aC5hYnMoZXhwZWN0ZWRMb2NhdGlvbiAtIGN1cnJlbnRMb2NhdGlvbik7XG5cbiAgaWYgKCFkaXN0YW5jZSkge1xuICAgIC8vIERvZGdlIGRpdmlkZSBieSB6ZXJvIGVycm9yLlxuICAgIHJldHVybiBwcm94aW1pdHkgPyAxLjAgOiBhY2N1cmFjeVxuICB9XG5cbiAgcmV0dXJuIGFjY3VyYWN5ICsgcHJveGltaXR5IC8gZGlzdGFuY2Vcbn1cblxuZnVuY3Rpb24gY29udmVydE1hc2tUb0luZGljZXMoXG4gIG1hdGNobWFzayA9IFtdLFxuICBtaW5NYXRjaENoYXJMZW5ndGggPSBDb25maWcubWluTWF0Y2hDaGFyTGVuZ3RoXG4pIHtcbiAgbGV0IGluZGljZXMgPSBbXTtcbiAgbGV0IHN0YXJ0ID0gLTE7XG4gIGxldCBlbmQgPSAtMTtcbiAgbGV0IGkgPSAwO1xuXG4gIGZvciAobGV0IGxlbiA9IG1hdGNobWFzay5sZW5ndGg7IGkgPCBsZW47IGkgKz0gMSkge1xuICAgIGxldCBtYXRjaCA9IG1hdGNobWFza1tpXTtcbiAgICBpZiAobWF0Y2ggJiYgc3RhcnQgPT09IC0xKSB7XG4gICAgICBzdGFydCA9IGk7XG4gICAgfSBlbHNlIGlmICghbWF0Y2ggJiYgc3RhcnQgIT09IC0xKSB7XG4gICAgICBlbmQgPSBpIC0gMTtcbiAgICAgIGlmIChlbmQgLSBzdGFydCArIDEgPj0gbWluTWF0Y2hDaGFyTGVuZ3RoKSB7XG4gICAgICAgIGluZGljZXMucHVzaChbc3RhcnQsIGVuZF0pO1xuICAgICAgfVxuICAgICAgc3RhcnQgPSAtMTtcbiAgICB9XG4gI
118H1cblxuICAvLyAoaS0xIC0gc3RhcnQpICsgMSA9PiBpIC0gc3RhcnRcbiAgaWYgKG1hdGNobWFza1tpIC0gMV0gJiYgaSAtIHN0YXJ0ID49IG1pbk1hdGNoQ2hhckxlbmd0aCkge1xuICAgIGluZGljZXMucHVzaChbc3RhcnQsIGkgLSAxXSk7XG4gIH1cblxuICByZXR1cm4gaW5kaWNlc1xufVxuXG4vLyBNYWNoaW5lIHdvcmQgc2l6ZVxuY29uc3QgTUFYX0JJVFMgPSAzMjtcblxuZnVuY3Rpb24gc2VhcmNoKFxuICB0ZXh0LFxuICBwYXR0ZXJuLFxuICBwYXR0ZXJuQWxwaGFiZXQsXG4gIHtcbiAgICBsb2NhdGlvbiA9IENvbmZpZy5sb2NhdGlvbixcbiAgICBkaXN0YW5jZSA9IENvbmZpZy5kaXN0YW5jZSxcbiAgICB0aHJlc2hvbGQgPSBDb25maWcudGhyZXNob2xkLFxuICAgIGZpbmRBbGxNYXRjaGVzID0gQ29uZmlnLmZpbmRBbGxNYXRjaGVzLFxuICAgIG1pbk1hdGNoQ2hhckxlbmd0aCA9IENvbmZpZy5taW5NYXRjaENoYXJMZW5ndGgsXG4gICAgaW5jbHVkZU1hdGNoZXMgPSBDb25maWcuaW5jbHVkZU1hdGNoZXMsXG4gICAgaWdub3JlTG9jYXRpb24gPSBDb25maWcuaWdub3JlTG9jYXRpb25cbiAgfSA9IHt9XG4pIHtcbiAgaWYgKHBhdHRlcm4ubGVuZ3RoID4gTUFYX0JJVFMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoUEFUVEVSTl9MRU5HVEhfVE9PX0xBUkdFKE1BWF9CSVRTKSlcbiAgfVxuXG4gIGNvbnN0IHBhdHRlcm5MZW4gPSBwYXR0ZXJuLmxlbmd0aDtcbiAgLy8gU2V0IHN0YXJ0aW5nIGxvY2F0aW9uIGF0IGJlZ2lubmluZyB0ZXh0IGFuZCBpbml0aWFsaXplIHRoZSBhbHBoYWJldC5cbiAgY29uc3QgdGV4dExlbiA9IHRleHQubGVuZ3RoO1xuICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlbiBsb2NhdGlvbiA+IHRleHQubGVuZ3RoXG4gIGNvbnN0IGV4cGVjdGVkTG9jYXRpb24gPSBNYXRoLm1heCgwLCBNYXRoLm1pbihsb2NhdGlvbiwgdGV4dExlbikpO1xuICAvLyBIaWdoZXN0IHNjb3JlIGJleW9uZCB3aGljaCB3ZSBnaXZlIHVwLlxuICBsZXQgY3VycmVudFRocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgLy8gSXMgdGhlcmUgYSBuZWFyYnkgZXhhY3QgbWF0Y2g/IChzcGVlZHVwKVxuICBsZXQgYmVzdExvY2F0aW9uID0gZXhwZWN0ZWRMb2NhdGlvbjtcblxuICAvLyBQZXJmb3JtYW5jZTogb25seSBjb21wdXRlciBtYXRjaGVzIHdoZW4gdGhlIG1pbk1hdGNoQ2hhckxlbmd0aCA+IDFcbiAgLy8gT1IgaWYgYGluY2x1ZGVNYXRjaGVzYCBpcyB0cnVlLlxuICBjb25zdCBjb21wdXRlTWF0Y2hlcyA9IG1pbk1hdGNoQ2hhckxlbmd0aCA+IDEgfHwgaW5jbHVkZU1hdGNoZXM7XG4gIC8vIEEgbWFzayBvZiB0aGUgbWF0Y2hlcywgdXNlZCBmb3IgYnVpbGRpbmcgdGhlIGluZGljZXNcbiAgY29uc3QgbWF0Y2hNYXNrID0gY29tcHV0ZU1hdGNoZXMgPyBBcnJheSh0ZXh0TGVuKSA6IFtdO1xuXG4gIGxldCBpbmRleDtcblxuICAvLyBHZXQgYWxsIGV4YWN0IG1hdGNoZXMsIGhlcmUgZm9yIHNwZWVkIHVwXG4gIHdoaWxlICgoaW5kZXggPSB0ZXh0LmluZGV4T2YocGF0dGVybiwgYmVzdExvY2F0aW9uKSkgPiAtMSkge1xuICAgIGxldCBzY29yZSA9IGNvbXB1dGVTY29yZSQxKHBhdHRlcm4sIHtcbiAgICAgIGN1cnJlbnRMb2NhdGlvbjogaW5kZXgsXG4gICAgICBleHBlY3RlZExvY2F0aW9uLFxuICAgICAgZGlzdGFuY2UsXG4gICAgICBpZ25vcmVMb2NhdGlvblxuICAgIH0pO1xuXG4gICAgY3VycmVudFRocmVzaG9sZCA9IE1hdGgubWluKHNjb3JlLCBjdXJyZW50VGhyZXNob2xkKTtcbiAgICBiZXN0TG9jYXRpb24gPSBpbmRleCArIHBhdHRlcm5MZW47XG5cbiAgICBpZiAoY29tcHV0ZU1hdGNoZXMpIHtcbiAgICAgIGxldCBpID0gMDtcbiAgICAgIHdoaWxlIChpIDwgcGF0dGVybkxlbikge1xuICAgICAgICBtYXRjaE1hc2tbaW5kZXggKyBpXSA9IDE7XG4gICAgICAgIGkgKz0gMTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBSZXNldCB0aGUgYmVzdCBsb2NhdGlvblxuICBiZXN0TG9jYXRpb24gPSAtMTtcblxuICBsZXQgbGFzdEJpdEFyciA9IFtdO1xuICBsZXQgZmluYWxTY29yZSA9IDE7XG4gIGxldCBiaW5NYXggPSBwYXR0ZXJuTGVuICsgdGV4dExlbjtcblxuICBjb25zdCBtYXNrID0gMSA8PCAocGF0dGVybkxlbiAtIDEpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0dGVybkxlbjsgaSArPSAxKSB7XG4gICAgLy8gU2NhbiBmb3IgdGhlIGJlc3QgbWF0Y2g7IGVhY2ggaXRlcmF0aW9uIGFsbG93cyBmb3Igb25lIG1vcmUgZXJyb3IuXG4gICAgLy8gUnVuIGEgYmluYXJ5IHNlYXJjaCB0byBkZXRlcm1pbmUgaG93IGZhciBmcm9tIHRoZSBtYXRjaCBsb2NhdGlvbiB3ZSBjYW4gc3RyYXlcbiAgICAvLyBhdCB0aGlzIGVycm9yIGxldmVsLlxuICAgIGxldCBiaW5NaW4gPSAwO1xuICAgIGxldCBiaW5NaWQgPSBiaW5NYXg7XG5cbiAgICB3aGlsZSAoYmluTWluIDwgYmluTWlkKSB7XG4gICAgICBjb25zdCBzY29yZSA9IGNvbXB1dGVTY29yZSQxKHBhdHRlcm4sIHtcbiAgICAgICAgZXJyb3JzOiBpLFxuICAgICAgICBjdXJyZW50TG9jYXRpb246IGV4cGVjdGVkTG9jYXRpb24gKyBiaW5NaWQsXG4gICAgICAgIGV4cGVjdGVkTG9jYXRpb24sXG4gICAgICAgIGRpc3RhbmNlLFxuICAgICAgICBpZ25vcmVMb2NhdGlvblxuICAgICAgfSk7XG5cbiAgICAgIGlmIChzY29yZSA8PSBjdXJyZW50VGhyZXNob2xkKSB7XG4gICAgICAgIGJpbk1pbiA9IGJpbk1pZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJpbk1heCA9IGJpbk1pZDtcbiAgICAgIH1cblxuICAgICAgYmluTWlkID0gTWF0aC5mbG9vcigoYmluTWF4IC0gYmluTWluKSAvIDIgKyBiaW5NaW4pO1xuICAgIH1cblxuICAgIC8vIFVzZSB0aGUgcmVzdWx0IGZyb20gdGhpcyBpdGVyYXRpb24gYXMgdGhlIG1heGltdW0gZm9yIHRoZSBuZXh0LlxuICAgIGJpbk1heCA9IGJpbk1pZDtcblxuICAgIGxldCBzdGFydCA9IE1hdGgubWF4KDEsIGV4cGVjdGVkTG9jYXRpb24gLSBiaW5NaWQgKyAxKTtcbiAgICBsZXQgZmluaXNoID0gZmluZEFsbE1hdGNoZXNcbiAgICAgID8gdGV4dExlblxuICAgICAgOiBNYXRoLm1pbihleHBlY3RlZExvY2F0aW9uICsgYmluTWlkLCB0ZXh0TGVuKSArIHBhdHRlcm5MZW47XG5cbiAgICAvLyBJbml0aWFsaXplIHRoZSBiaXQgYXJyYXlcbiAgICBsZXQgYml0QXJyID0gQXJyYXkoZmluaXNoICsgMik7XG5cbiAgICBiaXRBcnJbZmluaXNoICsgMV0gPSAoMSA8PCBpKSAtIDE7XG5cbiAgICBmb3IgKGxldCBqID0gZmluaXNoOyBqID49IHN0YXJ0OyBqIC09IDEpIHtcbiAgICAgIGxldCBjdXJyZW50TG9jYXRpb24gPSBqIC0gMTtcbiAgICAgIGxldCBjaGFyTWF0Y2ggPSBwYXR0ZXJuQWxwaGFiZXRbdGV4dC5jaGFyQXQoY3VycmVudExvY2F0aW9uKV07XG5cbiAgICAgIGlmIChjb21wdXRlTWF0Y2hlcykge1xuICAgICAgICAvLyBTcGVlZCB1cDogcXVpY2sgYm9vbCB0byBpbnQgY29udmVyc2lvbiAoaS5lLCBgY2hhck1hdGNoID8gMSA6IDBgKVxuICAgICAgICBtYXRjaE1hc2tbY3VycmVudExvY2F0aW9uXSA9ICshIWNoYXJNYXRjaDtcbiAgICAgIH1cblxuICAgICAgLy8gRmlyc3QgcGFzczogZXhhY3QgbWF0Y2hcbiAgICAgIGJpdEFycltqXSA9ICgoYml0QXJyW2ogKyAxXSA8PCAxKSB8IDEpICYgY2hhck1hdGNoO1xuXG4gICAgICAvLyBTdWJzZXF1ZW50IHBhc3NlczogZnV6enkgbWF0Y2hcbiAgICAgIGlmIChpKSB7XG4gICAgICAgIGJpdEFycltqXSB8PVxuICAgICAgICAgICgobGFzdEJpdEFycltqICsgMV0gfCBsYXN0Qml0QXJyW2pdKSA8PCAxKSB8IDEgfC
118BsYXN0Qml0QXJyW2ogKyAxXTtcbiAgICAgIH1cblxuICAgICAgaWYgKGJpdEFycltqXSAmIG1hc2spIHtcbiAgICAgICAgZmluYWxTY29yZSA9IGNvbXB1dGVTY29yZSQxKHBhdHRlcm4sIHtcbiAgICAgICAgICBlcnJvcnM6IGksXG4gICAgICAgICAgY3VycmVudExvY2F0aW9uLFxuICAgICAgICAgIGV4cGVjdGVkTG9jYXRpb24sXG4gICAgICAgICAgZGlzdGFuY2UsXG4gICAgICAgICAgaWdub3JlTG9jYXRpb25cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gVGhpcyBtYXRjaCB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgYmV0dGVyIHRoYW4gYW55IGV4aXN0aW5nIG1hdGNoLlxuICAgICAgICAvLyBCdXQgY2hlY2sgYW55d2F5LlxuICAgICAgICBpZiAoZmluYWxTY29yZSA8PSBjdXJyZW50VGhyZXNob2xkKSB7XG4gICAgICAgICAgLy8gSW5kZWVkIGl0IGlzXG4gICAgICAgICAgY3VycmVudFRocmVzaG9sZCA9IGZpbmFsU2NvcmU7XG4gICAgICAgICAgYmVzdExvY2F0aW9uID0gY3VycmVudExvY2F0aW9uO1xuXG4gICAgICAgICAgLy8gQWxyZWFkeSBwYXNzZWQgYGxvY2AsIGRvd25oaWxsIGZyb20gaGVyZSBvbiBpbi5cbiAgICAgICAgICBpZiAoYmVzdExvY2F0aW9uIDw9IGV4cGVjdGVkTG9jYXRpb24pIHtcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gV2hlbiBwYXNzaW5nIGBiZXN0TG9jYXRpb25gLCBkb24ndCBleGNlZWQgb3VyIGN1cnJlbnQgZGlzdGFuY2UgZnJvbSBgZXhwZWN0ZWRMb2NhdGlvbmAuXG4gICAgICAgICAgc3RhcnQgPSBNYXRoLm1heCgxLCAyICogZXhwZWN0ZWRMb2NhdGlvbiAtIGJlc3RMb2NhdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBObyBob3BlIGZvciBhIChiZXR0ZXIpIG1hdGNoIGF0IGdyZWF0ZXIgZXJyb3IgbGV2ZWxzLlxuICAgIGNvbnN0IHNjb3JlID0gY29tcHV0ZVNjb3JlJDEocGF0dGVybiwge1xuICAgICAgZXJyb3JzOiBpICsgMSxcbiAgICAgIGN1cnJlbnRMb2NhdGlvbjogZXhwZWN0ZWRMb2NhdGlvbixcbiAgICAgIGV4cGVjdGVkTG9jYXRpb24sXG4gICAgICBkaXN0YW5jZSxcbiAgICAgIGlnbm9yZUxvY2F0aW9uXG4gICAgfSk7XG5cbiAgICBpZiAoc2NvcmUgPiBjdXJyZW50VGhyZXNob2xkKSB7XG4gICAgICBicmVha1xuICAgIH1cblxuICAgIGxhc3RCaXRBcnIgPSBiaXRBcnI7XG4gIH1cblxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgaXNNYXRjaDogYmVzdExvY2F0aW9uID49IDAsXG4gICAgLy8gQ291bnQgZXhhY3QgbWF0Y2hlcyAodGhvc2Ugd2l0aCBhIHNjb3JlIG9mIDApIHRvIGJlIFwiYWxtb3N0XCIgZXhhY3RcbiAgICBzY29yZTogTWF0aC5tYXgoMC4wMDEsIGZpbmFsU2NvcmUpXG4gIH07XG5cbiAgaWYgKGNvbXB1dGVNYXRjaGVzKSB7XG4gICAgY29uc3QgaW5kaWNlcyA9IGNvbnZlcnRNYXNrVG9JbmRpY2VzKG1hdGNoTWFzaywgbWluTWF0Y2hDaGFyTGVuZ3RoKTtcbiAgICBpZiAoIWluZGljZXMubGVuZ3RoKSB7XG4gICAgICByZXN1bHQuaXNNYXRjaCA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoaW5jbHVkZU1hdGNoZXMpIHtcbiAgICAgIHJlc3VsdC5pbmRpY2VzID0gaW5kaWNlcztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVBhdHRlcm5BbHBoYWJldChwYXR0ZXJuKSB7XG4gIGxldCBtYXNrID0ge307XG5cbiAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHBhdHRlcm4ubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHtcbiAgICBjb25zdCBjaGFyID0gcGF0dGVybi5jaGFyQXQoaSk7XG4gICAgbWFza1tjaGFyXSA9IChtYXNrW2NoYXJdIHx8IDApIHwgKDEgPDwgKGxlbiAtIGkgLSAxKSk7XG4gIH1cblxuICByZXR1cm4gbWFza1xufVxuXG5jbGFzcyBCaXRhcFNlYXJjaCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHBhdHRlcm4sXG4gICAge1xuICAgICAgbG9jYXRpb24gPSBDb25maWcubG9jYXRpb24sXG4gICAgICB0aHJlc2hvbGQgPSBDb25maWcudGhyZXNob2xkLFxuICAgICAgZGlzdGFuY2UgPSBDb25maWcuZGlzdGFuY2UsXG4gICAgICBpbmNsdWRlTWF0Y2hlcyA9IENvbmZpZy5pbmNsdWRlTWF0Y2hlcyxcbiAgICAgIGZpbmRBbGxNYXRjaGVzID0gQ29uZmlnLmZpbmRBbGxNYXRjaGVzLFxuICAgICAgbWluTWF0Y2hDaGFyTGVuZ3RoID0gQ29uZmlnLm1pbk1hdGNoQ2hhckxlbmd0aCxcbiAgICAgIGlzQ2FzZVNlbnNpdGl2ZSA9IENvbmZpZy5pc0Nhc2VTZW5zaXRpdmUsXG4gICAgICBpZ25vcmVMb2NhdGlvbiA9IENvbmZpZy5pZ25vcmVMb2NhdGlvblxuICAgIH0gPSB7fVxuICApIHtcbiAgICB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICBsb2NhdGlvbixcbiAgICAgIHRocmVzaG9sZCxcbiAgICAgIGRpc3RhbmNlLFxuICAgICAgaW5jbHVkZU1hdGNoZXMsXG4gICAgICBmaW5kQWxsTWF0Y2hlcyxcbiAgICAgIG1pbk1hdGNoQ2hhckxlbmd0aCxcbiAgICAgIGlzQ2FzZVNlbnNpdGl2ZSxcbiAgICAgIGlnbm9yZUxvY2F0aW9uXG4gICAgfTtcblxuICAgIHRoaXMucGF0dGVybiA9IGlzQ2FzZVNlbnNpdGl2ZSA/IHBhdHRlcm4gOiBwYXR0ZXJuLnRvTG93ZXJDYXNlKCk7XG5cbiAgICB0aGlzLmNodW5rcyA9IFtdO1xuXG4gICAgaWYgKCF0aGlzLnBhdHRlcm4ubGVuZ3RoKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBhZGRDaHVuayA9IChwYXR0ZXJuLCBzdGFydEluZGV4KSA9PiB7XG4gICAgICB0aGlzLmNodW5rcy5wdXNoKHtcbiAgICAgICAgcGF0dGVybixcbiAgICAgICAgYWxwaGFiZXQ6IGNyZWF0ZVBhdHRlcm5BbHBoYWJldChwYXR0ZXJuKSxcbiAgICAgICAgc3RhcnRJbmRleFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxlbiA9IHRoaXMucGF0dGVybi5sZW5ndGg7XG5cbiAgICBpZiAobGVuID4gTUFYX0JJVFMpIHtcbiAgICAgIGxldCBpID0gMDtcbiAgICAgIGNvbnN0IHJlbWFpbmRlciA9IGxlbiAlIE1BWF9CSVRTO1xuICAgICAgY29uc3QgZW5kID0gbGVuIC0gcmVtYWluZGVyO1xuXG4gICAgICB3aGlsZSAoaSA8IGVuZCkge1xuICAgICAgICBhZGRDaHVuayh0aGlzLnBhdHRlcm4uc3Vic3RyKGksIE1BWF9CSVRTKSwgaSk7XG4gICAgICAgIGkgKz0gTUFYX0JJVFM7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZW1haW5kZXIpIHtcbiAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IGxlbiAtIE1BWF9CSVRTO1xuICAgICAgICBhZGRDaHVuayh0aGlzLnBhdHRlcm4uc3Vic3RyKHN0YXJ0SW5kZXgpLCBzdGFydEluZGV4KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYWRkQ2h1bmsodGhpcy5wYXR0ZXJuLCAwKTtcbiAgICB9XG4gI
118H1cblxuICBzZWFyY2hJbih0ZXh0KSB7XG4gICAgY29uc3QgeyBpc0Nhc2VTZW5zaXRpdmUsIGluY2x1ZGVNYXRjaGVzIH0gPSB0aGlzLm9wdGlvbnM7XG5cbiAgICBpZiAoIWlzQ2FzZVNlbnNpdGl2ZSkge1xuICAgICAgdGV4dCA9IHRleHQudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICAvLyBFeGFjdCBtYXRjaFxuICAgIGlmICh0aGlzLnBhdHRlcm4gPT09IHRleHQpIHtcbiAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgIGlzTWF0Y2g6IHRydWUsXG4gICAgICAgIHNjb3JlOiAwXG4gICAgICB9O1xuXG4gICAgICBpZiAoaW5jbHVkZU1hdGNoZXMpIHtcbiAgICAgICAgcmVzdWx0LmluZGljZXMgPSBbWzAsIHRleHQubGVuZ3RoIC0gMV1dO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuXG4gICAgLy8gT3RoZXJ3aXNlLCB1c2UgQml0YXAgYWxnb3JpdGhtXG4gICAgY29uc3Qge1xuICAgICAgbG9jYXRpb24sXG4gICAgICBkaXN0YW5jZSxcbiAgICAgIHRocmVzaG9sZCxcbiAgICAgIGZpbmRBbGxNYXRjaGVzLFxuICAgICAgbWluTWF0Y2hDaGFyTGVuZ3RoLFxuICAgICAgaWdub3JlTG9jYXRpb25cbiAgICB9ID0gdGhpcy5vcHRpb25zO1xuXG4gICAgbGV0IGFsbEluZGljZXMgPSBbXTtcbiAgICBsZXQgdG90YWxTY29yZSA9IDA7XG4gICAgbGV0IGhhc01hdGNoZXMgPSBmYWxzZTtcblxuICAgIHRoaXMuY2h1bmtzLmZvckVhY2goKHsgcGF0dGVybiwgYWxwaGFiZXQsIHN0YXJ0SW5kZXggfSkgPT4ge1xuICAgICAgY29uc3QgeyBpc01hdGNoLCBzY29yZSwgaW5kaWNlcyB9ID0gc2VhcmNoKHRleHQsIHBhdHRlcm4sIGFscGhhYmV0LCB7XG4gICAgICAgIGxvY2F0aW9uOiBsb2NhdGlvbiArIHN0YXJ0SW5kZXgsXG4gICAgICAgIGRpc3RhbmNlLFxuICAgICAgICB0aHJlc2hvbGQsXG4gICAgICAgIGZpbmRBbGxNYXRjaGVzLFxuICAgICAgICBtaW5NYXRjaENoYXJMZW5ndGgsXG4gICAgICAgIGluY2x1ZGVNYXRjaGVzLFxuICAgICAgICBpZ25vcmVMb2NhdGlvblxuICAgICAgfSk7XG5cbiAgICAgIGlmIChpc01hdGNoKSB7XG4gICAgICAgIGhhc01hdGNoZXMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB0b3RhbFNjb3JlICs9IHNjb3JlO1xuXG4gICAgICBpZiAoaXNNYXRjaCAmJiBpbmRpY2VzKSB7XG4gICAgICAgIGFsbEluZGljZXMgPSBbLi4uYWxsSW5kaWNlcywgLi4uaW5kaWNlc107XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgaXNNYXRjaDogaGFzTWF0Y2hlcyxcbiAgICAgIHNjb3JlOiBoYXNNYXRjaGVzID8gdG90YWxTY29yZSAvIHRoaXMuY2h1bmtzLmxlbmd0aCA6IDFcbiAgICB9O1xuXG4gICAgaWYgKGhhc01hdGNoZXMgJiYgaW5jbHVkZU1hdGNoZXMpIHtcbiAgICAgIHJlc3VsdC5pbmRpY2VzID0gYWxsSW5kaWNlcztcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cbn1cblxuY2xhc3MgQmFzZU1hdGNoIHtcbiAgY29uc3RydWN0b3IocGF0dGVybikge1xuICAgIHRoaXMucGF0dGVybiA9IHBhdHRlcm47XG4gIH1cbiAgc3RhdGljIGlzTXVsdGlNYXRjaChwYXR0ZXJuKSB7XG4gICAgcmV0dXJuIGdldE1hdGNoKHBhdHRlcm4sIHRoaXMubXVsdGlSZWdleClcbiAgfVxuICBzdGF0aWMgaXNTaW5nbGVNYXRjaChwYXR0ZXJuKSB7XG4gICAgcmV0dXJuIGdldE1hdGNoKHBhdHRlcm4sIHRoaXMuc2luZ2xlUmVnZXgpXG4gIH1cbiAgc2VhcmNoKC8qdGV4dCovKSB7fVxufVxuXG5mdW5jdGlvbiBnZXRNYXRjaChwYXR0ZXJuLCBleHApIHtcbiAgY29uc3QgbWF0Y2hlcyA9IHBhdHRlcm4ubWF0Y2goZXhwKTtcbiAgcmV0dXJuIG1hdGNoZXMgPyBtYXRjaGVzWzFdIDogbnVsbFxufVxuXG4vLyBUb2tlbjogJ2ZpbGVcblxuY2xhc3MgRXhhY3RNYXRjaCBleHRlbmRzIEJhc2VNYXRjaCB7XG4gIGNvbnN0cnVjdG9yKHBhdHRlcm4pIHtcbiAgICBzdXBlcihwYXR0ZXJuKTtcbiAgfVxuICBzdGF0aWMgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuICdleGFjdCdcbiAgfVxuICBzdGF0aWMgZ2V0IG11bHRpUmVnZXgoKSB7XG4gICAgcmV0dXJuIC9ePVwiKC4qKVwiJC9cbiAgfVxuICBzdGF0aWMgZ2V0IHNpbmdsZVJlZ2V4KCkge1xuICAgIHJldHVybiAvXj0oLiopJC9cbiAgfVxuICBzZWFyY2godGV4dCkge1xuICAgIGNvbnN0IGlzTWF0Y2ggPSB0ZXh0ID09PSB0aGlzLnBhdHRlcm47XG5cbiAgICByZXR1cm4ge1xuICAgICAgaXNNYXRjaCxcbiAgICAgIHNjb3JlOiBpc01hdGNoID8gMCA6IDEsXG4gICAgICBpbmRpY2VzO
118iBbMCwgdGhpcy5wYXR0ZXJuLmxlbmd0aCAtIDFdXG4gICAgfVxuICB9XG59XG5cbi8vIFRva2VuOiAhZmlyZVxuXG5jbGFzcyBJbnZlcnNlRXhhY3RNYXRjaCBleHRlbmRzIEJhc2VNYXRjaCB7XG4gIGNvbnN0cnVjdG9yKHBhdHRlcm4pIHtcbiAgICBzdXBlcihwYXR0ZXJuKTtcbiAgfVxuICBzdGF0aWMgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuICdpbnZlcnNlLWV4YWN0J1xuICB9XG4gIHN0YXRpYyBnZXQgbXVsdGlSZWdleCgpIHtcbiAgICByZXR1cm4gL14hXCIoLiopXCIkL1xuICB9XG4gIHN0YXRpYyBnZXQgc2luZ2xlUmVnZXgoKSB7XG4gICAgcmV0dXJuIC9eISguKikkL1xuICB9XG4gIHNlYXJjaCh0ZXh0KSB7XG4gICAgY29uc3QgaW5kZXggPSB0ZXh0LmluZGV4T2YodGhpcy5wYXR0ZXJuKTtcbiAgICBjb25zdCBpc01hdGNoID0gaW5kZXggPT09IC0xO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlzTWF0Y2gsXG4gICAgICBzY29yZTogaXNNYXRjaCA/IDAgOiAxLFxuICAgICAgaW5kaWNlczogWzAsIHRleHQubGVuZ3RoIC0gMV1cbiAgICB9XG4gIH1cbn1cblxuLy8gVG9rZW46IF5maWxlXG5cbmNsYXNzIFByZWZpeEV4YWN0TWF0Y2ggZXh0ZW5kcyBCYXNlTWF0Y2gge1xuICBjb25zdHJ1Y3RvcihwYXR0ZXJuKSB7XG4gICAgc3VwZXIocGF0dGVybik7XG4gIH1cbiAgc3RhdGljIGdldCB0eXBlKCkge1xuICAgIHJldHVybiAncHJlZml4LWV4YWN0J1xuICB9XG4gIHN0YXRpYyBnZXQgbXVsdGlSZWdleCgpIHtcbiAgICByZXR1cm4gL15cXF5cIiguKilcIiQvXG4gIH1cbiAgc3RhdGljIGdldCBzaW5nbGVSZWdleCgpIHtcbiAgICByZXR1cm4gL15cXF4oLiopJC9cbiAgfVxuICBzZWFyY2godGV4dCkge1xuICAgIGNvbnN0IGlzTWF0Y2ggPSB0ZXh0LnN0YXJ0c1dpdGgodGhpcy5wYXR0ZXJuKTtcblxuICAgIHJldHVybiB7XG4gICAgICBpc01hdGNoLFxuICAgICAgc2NvcmU6IGlzTWF0Y2ggPyAwIDogMSxcbiAgICAgIGluZGljZXM6IFswLCB0aGlzLnBhdHRlcm4ubGVuZ3RoIC0gMV1cbiAgICB9XG4gIH1cbn1cblxuLy8gVG9rZW46ICFeZmlyZVxuXG5jbGFzcyBJbnZlcnNlUHJlZml4RXhhY3RNYXRjaCBleHRlbmRzIEJhc2VNYXRjaCB7XG4gIGNvbnN0cnVjdG9yKHBhdHRlcm4pIHtcbiAgICBzdXBlcihwYXR0ZXJuKTtcbiAgfVxuICBzdGF0aWMgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuICdpbnZlcnNlLXByZWZpeC1leGFjdCdcbiAgfVxuICBzdGF0aWMgZ2V0IG11bHRpUmVnZXgoKSB7XG4gICAgcmV0dXJuIC9eIVxcXlwiKC4qKVwiJC9cbiAgfVxuICBzdGF0aWMgZ2V0IHNpbmdsZVJlZ2V4KCkge1xuICAgIHJldHVybiAvXiFcXF4oLiopJC9cbiAgfVxuICBzZWFyY2godGV4dCkge1xuICAgIGNvbnN0IGlzTWF0Y2ggPSAhdGV4dC5zdGFydHNXaXRoKHRoaXMucGF0dGVybik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaXNNYXRjaCxcbiAgICAgIHNjb3JlOiBpc01hdGNoID8gMCA6IDEsXG4gICAgICBpbmRpY2VzO
118iBbMCwgdGV4dC5sZW5ndGggLSAxXVxuICAgIH1cbiAgfVxufVxuXG4vLyBUb2tlbjogLmZpbGUkXG5cbmNsYXNzIFN1ZmZpeEV4YWN0TWF0Y2ggZXh0ZW5kcyBCYXNlTWF0Y2gge1xuICBjb25zdHJ1Y3RvcihwYXR0ZXJuKSB7XG4gICAgc3VwZXIocGF0dGVybik7XG4gIH1cbiAgc3RhdGljIGdldCB0eXBlKCkge1xuICAgIHJldHVybiAnc3VmZml4LWV4YWN0J1xuICB9XG4gIHN0YXRpYyBnZXQgbXVsdGlSZWdleCgpIHtcbiAgICByZXR1cm4gL15cIiguKilcIlxcJCQvXG4gIH1cbiAgc3RhdGljIGdldCBzaW5nbGVSZWdleCgpIHtcbiAgICByZXR1cm4gL14oLiopXFwkJC9cbiAgfVxuICBzZWFyY2godGV4dCkge1xuICAgIGNvbnN0IGlzTWF0Y2ggPSB0ZXh0LmVuZHNXaXRoKHRoaXMucGF0dGVybik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaXNNYXRjaCxcbiAgICAgIHNjb3JlOiBpc01hdGNoID8gMCA6IDEsXG4gICAgICBpbmRpY2VzOiBbdGV4dC5sZW5ndGggLSB0aGlzLnBhdHRlcm4ubGVuZ3RoLCB0ZXh0Lmxlbmd0aCAtIDFdXG4gICAgfVxuICB9XG59XG5cbi8vIFRva2VuOiAhLmZpbGUkXG5cbmNsYXNzIEludmVyc2VTdWZmaXhFeGFjdE1hdGNoIGV4dGVuZHMgQmFzZU1hdGNoIHtcbiAgY29uc3RydWN0b3IocGF0dGVybikge1xuICAgIHN1cGVyKHBhdHRlcm4pO1xuICB9XG4gIHN0YXRpYyBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gJ2ludmVyc2Utc3VmZml4LWV4YWN0J1xuICB9XG4gIHN0YXRpYyBnZXQgbXVsdGlSZWdleCgpIHtcbiAgICByZXR1cm4gL14hXCIoLiopXCJcXCQkL1xuICB9XG4gIHN0YXRpYyBnZXQgc2luZ2xlUmVnZXgoKSB7XG4gICAgcmV0dXJuIC9eISguKilcXCQkL1xuICB9XG4gIHNlYXJjaCh0ZXh0KSB7XG4gICAgY29uc3QgaXNNYXRjaCA9ICF0ZXh0LmVuZHNXaXRoKHRoaXMucGF0dGVybik7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzTWF0Y2gsXG4gICAgICBzY29yZTogaXNNYXRjaCA/IDAgOiAxLFxuICAgICAgaW5kaWNlczogWzAsIHRleHQubGVuZ3RoIC0gMV1cbiAgICB9XG4gIH1cbn1cblxuY2xhc3MgRnV6enlNYXRjaCBleHRlbmRzIEJhc2VNYXRjaCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHBhdHRlcm4sXG4gICAge1xuICAgICAgbG9jYXRpb24gPSBDb25maWcubG9jYXRpb24sXG4gICAgICB0aHJlc2hvbGQgPSBDb25maWcudGhyZXNob2xkLFxuICAgICAgZGlzdGFuY2UgPSBDb25maWcuZGlzdGFuY2UsXG4gICAgICBpbmNsdWRlTWF0Y2hlcyA9IENvbmZpZy5pbmNsdWRlTWF0Y2hlcyxcbiAgICAgIGZpbmRBbGxNYXRjaGVzID0gQ29uZmlnLmZpbmRBbGxNYXRjaGVzLFxuICAgICAgbWluTWF0Y2hDaGFyTGVuZ3RoID0gQ29uZmlnLm1pbk1hdGNoQ2hhckxlbmd0aCxcbiAgICAgIGlzQ2FzZVNlbnNpdGl2ZSA9IENvbmZpZy5pc0Nhc2VTZW5zaXRpdmUsXG4gICAgICBpZ25vcmVMb2NhdGlvbiA9IENvbmZpZy5pZ25vcmVMb2NhdGlvblxuICAgIH0gPSB7fVxuICApIHtcbiAgICBzdXBlcihwYXR0ZXJuKTtcbiAgICB0aGlzLl9iaXRhcFNlYXJjaCA9IG5ldyBCaXRhcFNlYXJjaChwYXR0ZXJuLCB7XG4gICAgICBsb2NhdGlvbixcbiAgICAgIHRocmVzaG9sZCxcbiAgICAgIGRpc3RhbmNlLFxuICAgICAgaW5jbHVkZU1hdGNoZXMsXG4gICAgICBmaW5kQWxsTWF0Y2hlcyxcbiAgICAgIG1pbk1hdGNoQ2hhckxlbmd0aCxcbiAgICAgIGlzQ2FzZVNlbnNpdGl2ZSxcbiAgICAgIGlnbm9yZUxvY2F0aW9uXG4gICAgfSk7XG4gIH1cbiAgc3RhdGljIGdldCB0eXBlKCkge1xuICAgIHJldHVybiAnZnV6enknXG4gIH1cbiAgc3RhdGljIGdldCBtdWx0aVJlZ2V4KCkge1xuICAgIHJldHVybiAvXlwiKC4qKVwiJC9cbiAgfVxuICBzdGF0aWMgZ2V0IHNpbmdsZVJlZ2V4KCkge1xuICAgIHJldHVybiAvXiguKikkL1xuICB9XG4gIHNlYXJjaCh0ZXh0KSB7XG4gICAgcmV0dXJuIHRoaXMuX2JpdGFwU2VhcmNoLnNlYXJjaEluKHRleHQpXG4gIH1cbn1cblxuLy8gVG9rZW46ICdmaWxlXG5cbmNsYXNzIEluY2x1ZGVNYXRjaCBleHRlbmRzIEJhc2VNYXRjaCB7XG4gIGNvbnN0cnVjdG9yKHBhdHRlcm4pIHtcbiAgICBzdXBlcihwYXR0ZXJuKTtcbiAgfVxuICBzdGF0aWMgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuICdpbmNsdWRlJ1xuICB9XG4gIHN0YXRpYyBnZXQgbXVsdGlSZWdleCgpIHtcbiAgICByZXR1cm4gL14nXCIoLiopXCIkL1xuICB9XG4gIHN0YXRpYyBnZXQgc2luZ2xlUmVnZXgoKSB7XG4gICAgcmV0dXJuIC9eJyguKikkL1xuICB9XG4gIHNlYXJjaCh0ZXh0KSB7XG4gICAgbGV0IGxvY2F0aW9uID0gMDtcbiAgICBsZXQgaW5kZXg7XG5cbiAgICBjb25zdCBpbmRpY2VzID0gW107XG4gICAgY29uc3QgcGF0dGVybkxlbiA9IHRoaXMucGF0dGVybi5sZW5ndGg7XG5cbiAgICAvLyBHZXQgYWxsIGV4YWN0IG1hdGNoZXNcbiAgICB3aGlsZSAoKGluZGV4ID0gdGV4dC5pbmRleE9mKHRoaXMucGF0dGVybiwgbG9jYXRpb24pKSA+IC0xKSB7XG4gICAgICBsb2NhdGlvbiA9IGluZGV4ICsgcGF0dGVybkxlbjtcbiAgICAgIGluZGljZXMucHVzaChbaW5kZXgsIGxvY2F0aW9uIC0gMV0pO1xuICAgIH1cblxuICAgIGNvbnN0IGlzTWF0Y2ggPSAhIWluZGljZXMubGVuZ3RoO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlzTWF0Y2gsXG4gICAgICBzY29yZTogaXNNYXRjaCA/IDAgOiAxLFxuICAgICAgaW5kaWNlc1xuICAgIH1cbiAgfVxufVxuXG4vLyDinZdPcmRlciBpcyBpbXBvcnRhbnQuIERPIE5PVCBDSEFOR0UuXG5jb25zdCBzZWFyY2hlcnMgPSBbXG4gIEV4YWN0TWF0Y2gsXG4gIEluY2x1ZGVNYXRjaCxcbiAgUHJlZml4RXhhY3RNYXRjaCxcbiAgSW52ZXJzZVByZWZpeEV4YWN0TWF0Y2gsXG4gIEludmVyc2VTdWZmaXhFeGFjdE1hdGNoLFxuICBTdWZmaXhFeGFjdE1hdGNoLFxuICBJbnZlcnNlRXhhY3RNYXRjaCxcbiAgRnV6enlNYXRjaFxuXTtcblxuY29uc3Qgc2VhcmNoZXJzTGVuID0gc2VhcmNoZXJzLmxlbmd0aDtcblxuLy8gUmVnZXggdG8gc3BsaXQgYnkgc3BhY2VzLCBidXQga2VlcCBhbnl0aGluZyBpbiBxdW90ZXMgdG9nZXRoZXJcbmNvbnN0IFNQQUNFX1JFID0gLyArKD89KFteXFxcIl0qXFxcIlteXFxcIl0qXFxcIikqW15cXFwiXSokKS87XG5jb25zdCBPUl9UT0tFTiA9ICd8JztcblxuLy8gUmV0dXJuIGEgMkQgYXJyYXkgcmVwcmVzZW50YXRpb24gb2YgdGhlIHF1ZXJ5LCBmb3Igc2ltcGxlciBwYXJzaW5nLlxuLy8gRXhhbXBsZTpcbi8vIFwiXmNvcmUgZ28kIHwgcmIkIHwgcHkkIHh5JFwiID0+IFtbXCJeY29yZVwiLCBcImdvJFwiXSwgW1wicmIkXCJdLCBbXCJweSRcIiwgXCJ4eSRcIl1dXG5mdW5jdGlvbiBwYXJzZVF1ZXJ5KHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkge1xuICByZXR1cm4gcGF0dGVybi5zcGxpdChPUl9UT0tFTikubWFwKChpdGVtKSA9PiB7XG4gICAgbGV0IHF1ZXJ5ID0gaXRlbVxuICAgICAgLnRyaW0oKVxuICAgICAgLnNwbGl0KFNQQUNFX1JFKVxuICAgICAgLmZpbHRlcigoaXRlbSkgPT4gaXRlbSAmJiAhIWl0ZW0udHJpbSgpKTtcblxuICAgIGxldCByZXN1bHRzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHF1ZXJ5Lmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgICBjb25zdCB
118xdWVyeUl0ZW0gPSBxdWVyeVtpXTtcblxuICAgICAgLy8gMS4gSGFuZGxlIG11bHRpcGxlIHF1ZXJ5IG1hdGNoIChpLmUsIG9uY2UgdGhhdCBhcmUgcXVvdGVkLCBsaWtlIGBcImhlbGxvIHdvcmxkXCJgKVxuICAgICAgbGV0IGZvdW5kID0gZmFsc2U7XG4gICAgICBsZXQgaWR4ID0gLTE7XG4gICAgICB3aGlsZSAoIWZvdW5kICYmICsraWR4IDwgc2VhcmNoZXJzTGVuKSB7XG4gICAgICAgIGNvbnN0IHNlYXJjaGVyID0gc2VhcmNoZXJzW2lkeF07XG4gICAgICAgIGxldCB0b2tlbiA9IHNlYXJjaGVyLmlzTXVsdGlNYXRjaChxdWVyeUl0ZW0pO1xuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICByZXN1bHRzLnB1c2gobmV3IHNlYXJjaGVyKHRva2VuLCBvcHRpb25zKSk7XG4gICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyAyLiBIYW5kbGUgc2luZ2xlIHF1ZXJ5IG1hdGNoZXMgKGkuZSwgb25jZSB0aGF0IGFyZSAqbm90KiBxdW90ZWQpXG4gICAgICBpZHggPSAtMTtcbiAgICAgIHdoaWxlICgrK2lkeCA8IHNlYXJjaGVyc0xlbikge1xuICAgICAgICBjb25zdCBzZWFyY2hlciA9IHNlYXJjaGVyc1tpZHhdO1xuICAgICAgICBsZXQgdG9rZW4gPSBzZWFyY2hlci5pc1NpbmdsZU1hdGNoKHF1ZXJ5SXRlbSk7XG4gICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgIHJlc3VsdHMucHVzaChuZXcgc2VhcmNoZXIodG9rZW4sIG9wdGlvbnMpKTtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdHNcbiAgfSlcbn1cblxuLy8gVGhlc2UgZXh0ZW5kZWQgbWF0Y2hlcnMgY2FuIHJldHVybiBhbiBhcnJheSBvZiBtYXRjaGVzLCBhcyBvcHBvc2VkXG4vLyB0byBhIHNpbmdsIG1hdGNoXG5jb25zdCBNdWx0aU1hdGNoU2V0ID0gbmV3IFNldChbRnV6enlNYXRjaC50eXBlLCBJbmNsdWRlTWF0Y2gudHlwZV0pO1xuXG4vKipcbiAqIENvbW1hbmQtbGlrZSBzZWFyY2hpbmdcbiAqID09PT09PT09PT09PT09PT09PT09PT1cbiAqXG4gKiBHaXZlbiBtdWx0aXBsZSBzZWFyY2ggdGVybXMgZGVsaW1pdGVkIGJ5IHNwYWNlcy5lLmcuIGBeanNjcmlwdCAucHl0aG9uJCBydWJ5ICFqYXZhYCxcbiAqIHNlYXJjaCBpbiBhIGdpdmVuIHRleHQuXG4gKlxuICogU2VhcmNoIHN5bnRheDpcbiAqXG4gKiB8IFRva2VuICAgICAgIHwgTWF0Y2ggdHlwZSAgICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8IC0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gKiB8IGBqc2NyaXB0YCAgIHwgZnV6enktbWF0Y2ggICAgICAgICAgICAgICAgfCBJdGVtcyB0aGF0IGZ1enp5IG1hdGNoIGBqc2NyaXB0YCAgICAgICB8XG4gKiB8IGA9c2NoZW1lYCAgIHwgZXhhY3QtbWF0Y2ggICAgICAgICAgICAgICAgfCBJdGVtcyB0aGF0IGFyZSBgc2NoZW1lYCAgICAgICAgICAgICAgICB8XG4gKiB8IGAncHl0aG9uYCAgIHwgaW5jbHVkZS1tYXRjaCAgICAgICAgICAgICAgfCBJdGVtcyB0aGF0IGluY2x1ZGUgYHB5dGhvbmAgICAgICAgICAgICB8XG4gKiB8IGAhcnVieWAgICAgIHwgaW52ZXJzZS1leGFjdC1tYXRjaCAgICAgICAgfCBJdGVtcyB0aGF0IGRvIG5vdCBpbmNsdWRlIGBydWJ5YCAgICAgICB8XG4gKiB8IGBeamF2YWAgICAgIHwgcHJlZml4LWV4YWN0LW1hdGNoICAgICAgICAgfCBJdGVtcyB0aGF0IHN0YXJ0IHdpdGggYGphdmFgICAgICAgICAgICB8XG4gKiB8IGAhXmVhcmxhbmdgIHwgaW52ZXJzZS1wcmVmaXgtZXhhY3QtbWF0Y2ggfCBJdGVtcyB0aGF0IGRvIG5vdCBzdGFydCB3aXRoIGBlYXJsYW5nYCB8XG4gKiB8IGAuanMkYCAgICAgIHwgc3VmZml4LWV4YWN0LW1hdGNoICAgICAgICAgfCBJdGVtcyB0aGF0IGVuZCB3aXRoIGAuanNgICAgICAgICAgICAgICB8XG4gKiB8IGAhLmdvJGAgICAgIHwgaW52ZXJzZS1zdWZmaXgtZXhhY3QtbWF0Y2ggfCBJdGVtcyB0aGF0IGRvIG5vdCBlbmQgd2l0aCBgLmdvY
118CAgICAgICB8XG4gKlxuICogQSBzaW5nbGUgcGlwZSBjaGFyYWN0ZXIgYWN0cyBhcyBhbiBPUiBvcGVyYXRvci4gRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmdcbiAqIHF1ZXJ5IG1hdGNoZXMgZW50cmllcyB0aGF0IHN0YXJ0IHdpdGggYGNvcmVgIGFuZCBlbmQgd2l0aCBlaXRoZXJgZ29gLCBgcmJgLFxuICogb3JgcHlgLlxuICpcbiAqIGBgYFxuICogXmNvcmUgZ28kIHwgcmIkIHwgcHkkXG4gKiBgYGBcbiAqL1xuY2xhc3MgRXh0ZW5kZWRTZWFyY2gge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwYXR0ZXJuLFxuICAgIHtcbiAgICAgIGlzQ2FzZVNlbnNpdGl2ZSA9IENvbmZpZy5pc0Nhc2VTZW5zaXRpdmUsXG4gICAgICBpbmNsdWRlTWF0Y2hlcyA9IENvbmZpZy5pbmNsdWRlTWF0Y2hlcyxcbiAgICAgIG1pbk1hdGNoQ2hhckxlbmd0aCA9IENvbmZpZy5taW5NYXRjaENoYXJMZW5ndGgsXG4gICAgICBpZ25vcmVMb2NhdGlvbiA9IENvbmZpZy5pZ25vcmVMb2NhdGlvbixcbiAgICAgIGZpbmRBbGxNYXRjaGVzID0gQ29uZmlnLmZpbmRBbGxNYXRjaGVzLFxuICAgICAgbG9jYXRpb24gPSBDb25maWcubG9jYXRpb24sXG4gICAgICB0aHJlc2hvbGQgPSBDb25maWcudGhyZXNob2xkLFxuICAgICAgZGlzdGFuY2UgPSBDb25maWcuZGlzdGFuY2VcbiAgICB9ID0ge31cbiAgKSB7XG4gICAgdGhpcy5xdWVyeSA9IG51bGw7XG4gICAgdGhpcy5vcHRpb25zID0ge1xuICAgICAgaXNDYXNlU2Vuc2l0aXZlLFxuICAgICAgaW5jbHVkZU1hdGNoZXMsXG4gICAgICBtaW5NYXRjaENoYXJMZW5ndGgsXG4gICAgICBmaW5kQWxsTWF0Y2hlcyxcbiAgICAgIGlnbm9yZUxvY2F0aW9uLFxuICAgICAgbG9jYXRpb24sXG4gICAgICB0aHJlc2hvbGQsXG4gICAgICBkaXN0YW5jZVxuICAgIH07XG5cbiAgICB0aGlzLnBhdHRlcm4gPSBpc0Nhc2VTZW5zaXRpdmUgPyBwYXR0ZXJuIDogcGF0dGVybi50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMucXVlcnkgPSBwYXJzZVF1ZXJ5KHRoaXMucGF0dGVybiwgdGhpcy5vcHRpb25zKTtcbiAgfVxuXG4gIHN0YXRpYyBjb25kaXRpb24oXywgb3B0aW9ucykge1xuICAgIHJldHVybiBvcHRpb25zLnVzZUV4dGVuZGVkU2VhcmNoXG4gIH1cblxuICBzZWFyY2hJbih0ZXh0KSB7XG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLnF1ZXJ5O1xuXG4gICAgaWYgKCFxdWVyeSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNNYXRjaDogZmFsc2UsXG4gICAgICAgIHNjb3JlOiAxXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeyBpbmNsdWRlTWF0Y2hlcywgaXNDYXNlU2Vuc2l0aXZlIH0gPSB0aGlzLm9wdGlvbnM7XG5cbiAgICB0ZXh0ID0gaXNDYXNlU2Vuc2l0aXZlID8gdGV4dCA6IHRleHQudG9Mb3dlckNhc2UoKTtcblxuICAgIGxldCBudW1NYXRjaGVzID0gMDtcbiAgICBsZXQgYWxsSW5kaWNlcyA9IFtdO1xuICAgIGxldCB0b3RhbFNjb3JlID0gMDtcblxuICAgIC8vIE9Sc1xuICAgIGZvciAobGV0IGkgPSAwLCBxTGVuID0gcXVlcnkubGVuZ3RoOyBpIDwgcUxlbjsgaSArPSAxKSB7XG4gICAgICBjb25zdCBzZWFyY2hlcnMgPSBxdWVyeVtpXTtcblxuICAgICAgLy8gUmVzZXQgaW5kaWNlc1xuICAgICAgYWxsSW5kaWNlcy5sZW5ndGggPSAwO1xuICAgICAgbnVtTWF0Y2hlcyA9IDA7XG5cbiAgICAgIC8vIEFORHNcbiAgICAgIGZvciAobGV0IGogPSAwLCBwTGVuID0gc2VhcmNoZXJzLmxlbmd0aDsgaiA8IHBMZW47IGogKz0gMSkge1xuICAgICAgICBjb25zdCBzZWFyY2hlciA9IHNlYXJjaGVyc1tqXTtcbiAgICAgICAgY29uc3QgeyBpc01hdGNoLCBpbmRpY2VzLCBzY29yZSB9ID0gc2VhcmNoZXIuc2VhcmNoKHRleHQpO1xuXG4gICAgICAgIGlmIChpc01hdGNoKSB7XG4gICAgICAgICAgbnVtTWF0Y2hlcyArPSAxO1xuICAgICAgICAgIHRvdGFsU2NvcmUgKz0gc2NvcmU7XG4gICAgICAgICAgaWYgKGluY2x1ZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICBjb25zdCB0eXBlID0gc2VhcmNoZXIuY29uc3RydWN0b3IudHlwZTtcbiAgICAgICAgICAgIGlmIChNdWx0aU1hdGNoU2V0Lmhhcyh0eXBlKSkge1xuICAgICAgICAgICAgICBhbGxJbmRpY2VzID0gWy4uLmFsbEluZGljZXMsIC4uLmluZGljZXNdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYWxsSW5kaWNlcy5wdXNoKGluZGljZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0b3RhbFNjb3JlID0gMDtcbiAgICAgICAgICBudW1NYXRjaGVzID0gMDtcbiAgICAgICAgICBhbGxJbmRpY2VzLmxlbmd0aCA9IDA7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBPUiBjb25kaXRpb24sIHNvIGlmIFRSVUUsIHJldHVyblxuICAgICAgaWYgKG51bU1hdGNoZXMpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICBpc01hdGNoOiB0cnVlLFxuICAgICAgICAgIHNjb3JlOiB0b3RhbFNjb3JlIC8gbnVtTWF0Y2hlc1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChpbmNsdWRlTWF0Y2hlcykge1xuICAgICAgICAgIHJlc3VsdC5pbmRpY2VzID0gYWxsSW5kaWNlcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBOb3RoaW5nIHdhcyBtYXRjaGVkXG4gICAgcmV0dXJuIHtcbiAgICAgIGlzTWF0Y2g6IGZhbHNlLFxuICAgICAgc2NvcmU6IDFcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgcmVnaXN0ZXJlZFNlYXJjaGVycyA9IFtdO1xuXG5mdW5jdGlvbiByZWdpc3RlciguLi5hcmdzKSB7XG4gIHJlZ2lzdGVyZWRTZWFyY2hlcnMucHVzaCguLi5hcmdzKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU2VhcmNoZXIocGF0dGVybiwgb3B0aW9ucykge1xuICBmb3IgKGxldCBpID0gMCwgbGVuID0gcmVnaXN0ZXJlZFNlYXJjaGVycy5sZW5ndGg7IGkgPCBsZW47IGkgKz0gMSkge1xuICAgIGxldCBzZWFyY2hlckNsYXNzID0gcmVnaXN0ZXJlZFNlYXJjaGVyc1tpXTtcbiAgICBpZiAoc2VhcmNoZXJDbGFzcy5jb25kaXRpb24ocGF0dGVybiwgb3B0aW9ucykpIHtcbiAgICAgIHJldHVybi
118BuZXcgc2VhcmNoZXJDbGFzcyhwYXR0ZXJuLCBvcHRpb25zKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgQml0YXBTZWFyY2gocGF0dGVybiwgb3B0aW9ucylcbn1cblxuY29uc3QgTG9naWNhbE9wZXJhdG9yID0ge1xuICBBTkQ6ICckYW5kJyxcbiAgT1I6ICckb3InXG59O1xuXG5jb25zdCBLZXlUeXBlID0ge1xuICBQQVRIOiAnJHBhdGgnLFxuICBQQVRURVJOOiAnJHZhbCdcbn07XG5cbmNvbnN0IGlzRXhwcmVzc2lvbiA9IChxdWVyeSkgPT5cbiAgISEocXVlcnlbTG9naWNhbE9wZXJhdG9yLkFORF0gfHwgcXVlcnlbTG9naWNhbE9wZXJhdG9yLk9SXSk7XG5cbmNvbnN0IGlzUGF0aCA9IChxdWVyeSkgPT4gISFxdWVyeVtLZXlUeXBlLlBBVEhdO1xuXG5jb25zdCBpc0xlYWYgPSAocXVlcnkpID0+XG4gICFpc0FycmF5KHF1ZXJ5KSAmJiBpc09iamVjdChxdWVyeSkgJiYgIWlzRXhwcmVzc2lvbihxdWVyeSk7XG5cbmNvbnN0IGNvbnZlcnRUb0V4cGxpY2l0ID0gKHF1ZXJ5KSA9PiAoe1xuICBbTG9naWNhbE9wZXJhdG9yLkFORF06IE9iamVjdC5rZXlzKHF1ZXJ5KS5tYXAoKGtleSkgPT4gKHtcbiAgICBba2V5XTogcXVlcnlba2V5XVxuICB9KSlcbn0pO1xuXG4vLyBXaGVuIGBhdXRvYCBpcyBgdHJ1ZWAsIHRoZSBwYXJzZSBmdW5jdGlvbiB3aWxsIGluZmVyIGFuZCBpbml0aWFsaXplIGFuZCBhZGRcbi8vIHRoZSBhcHByb3ByaWF0ZSBgU2VhcmNoZXJgIGluc3RhbmNlXG5mdW5jdGlvbiBwYXJzZShxdWVyeSwgb3B0aW9ucywgeyBhdXRvID0gdHJ1ZSB9ID0ge30pIHtcbiAgY29uc3QgbmV4dCA9IChxdWVyeSkgPT4ge1xuICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMocXVlcnkpO1xuXG4gICAgY29uc3QgaXNRdWVyeVBhdGggPSBpc1BhdGgocXVlcnkpO1xuXG4gICAgaWYgKCFpc1F1ZXJ5UGF0aCAmJiBrZXlzLmxlbmd0aCA+IDEgJiYgIWlzRXhwcmVzc2lvbihxdWVyeSkpIHtcbiAgICAgIHJldHVybiBuZXh0KGNvbnZlcnRUb0V4cGxpY2l0KHF1ZXJ5KSlcbiAgICB9XG5cbiAgICBpZiAoaXNMZWFmKHF1ZXJ5KSkge1xuICAgICAgY29uc3Qga2V5ID0gaXNRdWVyeVBhdGggPyBxdWVyeVtLZXlUeXBlLlBBVEhdIDoga2V5c1swXTtcblxuICAgICAgY29uc3QgcGF0dGVybiA9IGlzUXVlcnlQYXRoID8gcXVlcnlbS2V5VHlwZS5QQVRURVJOXSA6IHF1ZXJ5W2tleV07XG5cbiAgICAgIGlmICghaXNTdHJpbmcocGF0dGVybikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKExPR0lDQUxfU0VBUkNIX0lOVkFMSURfUVVFUllfRk9SX0tFWShrZXkpKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgIGtleUlkOiBjcmVhdGVLZXlJZChrZXkpLFxuICAgICAgICBwYXR0ZXJuXG4gICAgICB9O1xuXG4gICAgICBpZiAoYXV0bykge1xuICAgICAgICBvYmouc2VhcmNoZXIgPSBjcmVhdGVTZWFyY2hlcihwYXR0ZXJuLCBvcHRpb25zKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9ialxuICAgIH1cblxuICAgIGxldCBub2RlID0ge1xuICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgb3BlcmF0b3I6IGtleXNbMF1cbiAgICB9O1xuXG4gICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gcXVlcnlba2V5XTtcblxuICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICBub2RlLmNoaWxkcmVuLnB1c2gobmV4dChpdGVtKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5vZGVcbiAgfTtcblxuICBpZiAoIWlzRXhwcmVzc2lvbihxdWVyeSkpIHtcbiAgICBxdWVyeSA9IGNvbnZlcnRUb0V4cGxpY2l0KHF1ZXJ5KTtcbiAgfVxuXG4gIHJldHVybiBuZXh0KHF1ZXJ5KVxufVxuXG4vLyBQcmFjdGljYWwgc2NvcmluZyBmdW5jdGlvblxuZnVuY3Rpb24gY29tcHV0ZVNjb3JlKFxuICByZXN1bHRzLFxuICB7IGlnbm9yZUZpZWxkTm9ybSA9IENvbmZpZy5pZ25vcmVGaWVsZE5vcm0gfVxuKSB7XG4gIHJlc3VsdHMuZm9yRWFjaCgocmVzdWx0KSA9PiB7XG4gICAgbGV0IHRvdGFsU2NvcmUgPSAxO1xuXG4gICAgcmVzdWx0Lm1hdGNoZXMuZm9yRWFjaCgoeyBrZXksIG5vcm0sIHNjb3JlIH0pID0+IHtcbiAgICAgIGNvbnN0IHdlaWdodCA9IGtleSA/IGtleS53ZWlnaHQgOiBudWxsO1xuXG4gICAgICB0b3RhbFNjb3JlICo9IE1hdGgucG93KFxuICAgICAgICBzY29yZSA9PT0gMCAmJiB3ZWlnaHQgPyBOdW1iZXIuRVBTSUxPTiA6IHNjb3JlLFxuICAgICAgICAod2VpZ2h0IHx8IDEpICogKGlnbm9yZUZpZWxkTm9ybSA/IDEgOiBub3JtKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHJlc3VsdC5zY29yZSA9IHRvdGFsU2NvcmU7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1NYXRjaGVzKHJlc3VsdCwgZGF0YSkge1xuICBjb25zdCBtYXRjaGVzID0gcmVzdWx0Lm1hdGNoZXM7XG4gIGRhdGEubWF0Y2hlcyA9IFtdO1xuXG4gIGlmICghaXNEZWZpbmVkKG1hdGNoZXMpKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBtYXRjaGVzLmZvckVhY2goKG1hdGNoKSA9PiB7XG4gICAgaWYgKCFpc0RlZmluZWQobWF0Y2guaW5kaWNlcykgfHwgIW1hdGNoLmluZGljZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCB7IGluZGljZXMsIHZhbHVlIH0gPSBtYXRjaDtcblxuICAgIGxldCBvYmogPSB7XG4gICAgICBpbmRpY2VzLFxuICAgICAgdmFsdWVcbiAgICB9O1xuXG4gICAgaWYgKG1hdGNoLmtleSkge1xuICAgICAgb2JqLmtleSA9IG1hdGNoLmtleS5zcmM7XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoLmlkeCA+IC0xKSB7XG4gICAgICBvYmoucmVmSW5kZXggPSBtYXRjaC5pZHg7XG4gICAgfVxuXG4gICAgZGF0YS5tYXRjaGVzLnB1c2gob2JqKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVNjb3JlKHJlc3VsdCwgZGF0YSkge1xuICBkYXRhLnNjb3JlID0gcmVzdWx0LnNjb3JlO1xufVxuXG5mdW5jdGlvbiBmb3JtYXQoXG4gIHJlc3VsdHMsXG4gIGRvY3MsXG4gIHtcbiAgICBpbmNsdWRlTWF0Y2hlcyA9IENvbmZpZy5pbmNsdWRlTWF0Y2hlcyxcbiAgICBpbmNsdWRlU2NvcmUgPSBDb25maWcuaW5jbHVkZVNjb3JlXG4gIH0gPSB7fVxuKSB7XG4gIGNvbnN0IHRyYW5zZm9ybWVycyA9IFtdO1xuXG4gIGlmIChpbmNsdWRlTWF0Y2hlcykgdHJhbnNmb3JtZXJzLnB1c2godHJhbnNmb3JtTWF0Y2hlcyk7XG4gIGlmIChpbmNsdWRlU2NvcmUpIHRyYW5zZm9ybWVycy5wdXNoKHRyYW5zZm9ybVNjb3JlKTtcblxuICByZXR1cm4gcmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4ge1xuICAgIGNvbnN0IHsgaWR4IH0gPSByZXN1bHQ7XG5cbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgaXRlbTogZG9jc1tpZHhdLFxuICAgICAgcmVmSW5kZXg6IGlkeFxuICAgIH07XG5cbiAgICBpZiAodHJhbnNmb3JtZXJzLmxlbmd0aCkge1xuICAgICAgdHJhbnNmb3JtZXJzLmZvckVhY2goKHRyYW5zZm9ybWVyKSA9PiB7XG4gICAgICAgI
118HRyYW5zZm9ybWVyKHJlc3VsdCwgZGF0YSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YVxuICB9KVxufVxuXG5jbGFzcyBGdXNlIHtcbiAgY29uc3RydWN0b3IoZG9jcywgb3B0aW9ucyA9IHt9LCBpbmRleCkge1xuICAgIHRoaXMub3B0aW9ucyA9IHsgLi4uQ29uZmlnLCAuLi5vcHRpb25zIH07XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLm9wdGlvbnMudXNlRXh0ZW5kZWRTZWFyY2ggJiZcbiAgICAgICF0cnVlXG4gICAgKSB7fVxuXG4gICAgdGhpcy5fa2V5U3RvcmUgPSBuZXcgS2V5U3RvcmUodGhpcy5vcHRpb25zLmtleXMpO1xuXG4gICAgdGhpcy5zZXRDb2xsZWN0aW9uKGRvY3MsIGluZGV4KTtcbiAgfVxuXG4gIHNldENvbGxlY3Rpb24oZG9jcywgaW5kZXgpIHtcbiAgICB0aGlzLl9kb2NzID0gZG9jcztcblxuICAgIGlmIChpbmRleCAmJiAhKGluZGV4IGluc3RhbmNlb2YgRnVzZUluZGV4KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKElOQ09SUkVDVF9JTkRFWF9UWVBFKVxuICAgIH1cblxuICAgIHRoaXMuX215SW5kZXggPVxuICAgICAgaW5kZXggfHxcbiAgICAgIGNyZWF0ZUluZGV4KHRoaXMub3B0aW9ucy5rZXlzLCB0aGlzLl9kb2NzLCB7XG4gICAgICAgIGdldEZuOiB0aGlzLm9wdGlvbnMuZ2V0Rm4sXG4gICAgICAgIGZpZWxkTm9ybVdlaWdodDogdGhpcy5vcHRpb25zLmZpZWxkTm9ybVdlaWdodFxuICAgICAgfSk7XG4gIH1cblxuICBhZGQoZG9jKSB7XG4gICAgaWYgKCFpc0RlZmluZWQoZG9jKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fZG9jcy5wdXNoKGRvYyk7XG4gICAgdGhpcy5fbXlJbmRleC5hZGQoZG9jKTtcbiAgfVxuXG4gIHJlbW92ZShwcmVkaWNhdGUgPSAoLyogZG9jLCBpZHggKi8pID0+IGZhbHNlKSB7XG4gICAgY29uc3QgcmVzdWx0cyA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMuX2RvY3MubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHtcbiAgICAgIGNvbnN0IGRvYyA9IHRoaXMuX2RvY3NbaV07XG4gICAgICBpZiAocHJlZGljYXRlKGRvYywgaSkpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVBdChpKTtcbiAgICAgICAgaSAtPSAxO1xuICAgICAgICBsZW4gLT0gMTtcblxuICAgICAgICByZXN1bHRzLnB1c2goZG9jKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0c1xuICB9XG5cbiAgcmVtb3ZlQXQoaWR4KSB7XG4gICAgdGhpcy5fZG9jcy5zcGxpY2UoaWR4LCAxKTtcbiAgICB0aGlzLl9teUluZGV4LnJlbW92ZUF0KGlkeCk7XG4gIH1cblxuICBnZXRJbmRleCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbXlJbmRleFxuICB9XG5cbiAgc2VhcmNoKHF1ZXJ5LCB7IGxpbWl0ID0gLTEgfSA9IHt9KSB7XG4gICAgY29uc3Qge1xuICAgICAgaW5jbHVkZU1hdGNoZXMsXG4gICAgICBpbmNsdWRlU2NvcmUsXG4gICAgICBzaG91bGRTb3J0LFxuICAgICAgc29ydEZuLFxuICAgICAgaWdub3JlRmllbGROb3JtXG4gICAgfSA9IHRoaXMub3B0aW9ucztcblxuICAgIGxldCByZXN1bHRzID0gaXNTdHJpbmcocXVlcnkpXG4gICAgICA/IGlzU3RyaW5nKHRoaXMuX2RvY3NbMF0pXG4gICAgICAgID8gdGhpcy5fc2VhcmNoU3RyaW5nTGlzdChxdWVyeSlcbiAgICAgICAgOiB0aGlzLl9zZWFyY2hPYmplY3RMaXN0KHF1ZXJ5KVxuICAgICAgOiB0aGlzLl9zZWFyY2hMb2dpY2FsKHF1ZXJ5KTtcblxuICAgIGNvbXB1dGVTY29yZShyZXN1bHRzLCB7IGlnbm9yZUZpZWxkTm9ybSB9KTtcblxuICAgIGlmIChzaG91bGRTb3J0KSB7XG4gICAgICByZXN1bHRzLnNvcnQoc29ydEZuKTtcbiAgICB9XG5cbiAgICBpZiAoaXNOdW1iZXIobGltaXQpICYmIGxpbWl0ID4gLTEpIHtcbiAgICAgIHJlc3VsdHMgPSByZXN1bHRzLnNsaWNlKDAsIGxpbWl0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm9ybWF0KHJlc3VsdHMsIHRoaXMuX2RvY3MsIHtcbiAgICAgIGluY2x1ZGVNYXRjaGVzLFxuICAgICAgaW5jbHVkZVNjb3JlXG4gICAgfSlcbiAgfVxuXG4gIF9zZWFyY2hTdHJpbmdMaXN0KHF1ZXJ5KSB7XG4gICAgY29uc3Qgc2VhcmNoZXIgPSBjcmVhdGVTZWFyY2hlcihxdWVyeSwgdGhpcy5vcHRpb25zKTtcbiAgICBjb25zdCB7IHJlY29yZHMgfSA9IHRoaXMuX215SW5kZXg7XG4gICAgY29uc3QgcmVzdWx0cyA9IFtdO1xuXG4gICAgLy8gSXRlcmF0ZSBvdmVyIGV2ZXJ5IHN0cmluZyBpbiB0aGUgaW5kZXhcbiAgICByZWNvcmRzLmZvckVhY2goKHsgdjogdGV4dCwgaTogaWR4LCBuOiBub3JtIH0pID0+IHtcbiAgICAgIGlmICghaXNEZWZpbmVkKHRleHQpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGlzTWF0Y2gsIHNjb3JlLCBpbmRpY2VzIH0gPSBzZWFyY2hlci5zZWFyY2hJbih0ZXh0KTtcblxuICAgICAgaWYgKGlzTWF0Y2gpIHtcbiAgICAgICAgcmVzdWx0cy5wdXNoKHtcbiAgICAgICAgICBpdGVtOiB0ZXh0LFxuICAgICAgICAgIGlkeCxcbiAgICAgICAgICBtYXRjaGVzOiBbeyBzY29yZSwgdmFsdWU6IHRleHQsIG5vcm0sIGluZGljZXMgfV1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0c1xuICB9XG5cbiAgX3NlYXJjaExvZ2ljYWwocXVlcnkpIHtcblxuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBwYXJzZShxdWVyeSwgdGhpcy5vcHRpb25zKTtcblxuICAgIGNvbnN0IGV2YWx1YXRlID0gKG5vZGUsIGl0ZW0sIGlkeCkgPT4ge1xuICAgICAgaWYgKCFub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIGNvbnN0IHsga2V5SWQsIHNlYXJjaGVyIH0gPSBub2RlO1xuXG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSB0aGlzLl9maW5kTWF0Y2hlcyh7XG4gICAgICAgICAga2V5OiB0aGlzLl9rZXlTdG9yZS5nZXQoa2V5SWQpLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLl9teUluZGV4LmdldFZhbHVlRm9ySXRlbUF0S2V5SWQoaXRlbSwga2V5SWQpLFxuICAgICAgICAgIHNlYXJjaGVyXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChtYXRjaGVzICYmIG1hdGNoZXMubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgI
118HtcbiAgICAgICAgICAgICAgaWR4LFxuICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICBtYXRjaGVzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtdXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlcyA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSBub2RlLmNoaWxkcmVuW2ldO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBldmFsdWF0ZShjaGlsZCwgaXRlbSwgaWR4KTtcbiAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGgpIHtcbiAgICAgICAgICByZXMucHVzaCguLi5yZXN1bHQpO1xuICAgICAgICB9IGVsc2UgaWYgKG5vZGUub3BlcmF0b3IgPT09IExvZ2ljYWxPcGVyYXRvci5BTkQpIHtcbiAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc1xuICAgIH07XG5cbiAgICBjb25zdCByZWNvcmRzID0gdGhpcy5fbXlJbmRleC5yZWNvcmRzO1xuICAgIGNvbnN0IHJlc3VsdE1hcCA9IHt9O1xuICAgIGNvbnN0IHJlc3VsdHMgPSBbXTtcblxuICAgIHJlY29yZHMuZm9yRWFjaCgoeyAkOiBpdGVtLCBpOiBpZHggfSkgPT4ge1xuICAgICAgaWYgKGlzRGVmaW5lZChpdGVtKSkge1xuICAgICAgICBsZXQgZXhwUmVzdWx0cyA9IGV2YWx1YXRlKGV4cHJlc3Npb24sIGl0ZW0sIGlkeCk7XG5cbiAgICAgICAgaWYgKGV4cFJlc3VsdHMubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gRGVkdXBlIHdoZW4gYWRkaW5nXG4gICAgICAgICAgaWYgKCFyZXN1bHRNYXBbaWR4XSkge1xuICAgICAgICAgICAgcmVzdWx0TWFwW2lkeF0gPSB7IGlkeCwgaXRlbSwgbWF0Y2hlczogW10gfTtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChyZXN1bHRNYXBbaWR4XSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGV4cFJlc3VsdHMuZm9yRWFjaCgoeyBtYXRjaGVzIH0pID0+IHtcbiAgICAgICAgICAgIHJlc3VsdE1hcFtpZHhdLm1hdGNoZXMucHVzaCguLi5tYXRjaGVzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdHNcbiAgfVxuXG4gIF9zZWFyY2hPYmplY3RMaXN0KHF1ZXJ5KSB7XG4gICAgY29uc3Qgc2VhcmNoZXIgPSBjcmVhdGVTZWFyY2hlcihxdWVyeSwgdGhpcy5vcHRpb25zKTtcbiAgICBjb25zdCB7IGtleXMsIHJlY29yZHMgfSA9IHRoaXMuX215SW5kZXg7XG4gICAgY29uc3QgcmVzdWx0cyA9IFtdO1xuXG4gICAgLy8gTGlzdCBpcyBBcnJheTxPYmplY3Q+XG4gICAgcmVjb3Jkcy5mb3JFYWNoKCh7ICQ6IGl0ZW0sIGk6IGlkeCB9KSA9PiB7XG4gICAgICBpZiAoIWlzRGVmaW5lZChpdGVtKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgbGV0IG1hdGNoZXMgPSBbXTtcblxuICAgICAgLy8gSXRlcmF0ZSBvdmVyIGV2ZXJ5IGtleSAoaS5lLCBwYXRoKSwgYW5kIGZldGNoIHRoZSB2YWx1ZSBhdCB0aGF0IGtleVxuICAgICAga2V5cy5mb3JFYWNoKChrZXksIGtleUluZGV4KSA9PiB7XG4gICAgICAgIG1hdGNoZXMucHVzaChcbiAgICAgICAgICAuLi50aGlzLl9maW5kTWF0Y2hlcyh7XG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICB2YWx1ZTogaXRlbVtrZXlJbmRleF0sXG4gICAgICAgICAgICBzZWFyY2hlclxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKG1hdGNoZXMubGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdHMucHVzaCh7XG4gICAgICAgICAgaWR4LFxuICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgbWF0Y2hlc1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHRzXG4gIH1cbiAgX2ZpbmRNYXRjaGVzKHsga2V5LCB2YWx1ZSwgc2VhcmNoZXIgfSkge1xuICAgIGlmICghaXNEZWZpbmVkKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIFtdXG4gICAgfVxuXG4gICAgbGV0IG1hdGNoZXMgPSBbXTtcblxuICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgdmFsdWUuZm9yRWFjaCgoeyB2OiB0ZXh0LCBpOiBpZHgsIG46IG5vcm0gfSkgPT4ge1xuICAgICAgICBpZiAoIWlzRGVmaW5lZCh0ZXh0KSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBpc01hdGNoLCBzY29yZSwgaW5kaWNlcyB9ID0gc2VhcmNoZXIuc2VhcmNoSW4odGV4dCk7XG5cbiAgICAgICAgaWYgKGlzTWF0Y2gpIHtcbiAgICAgICAgICBtYXRjaGVzLnB1c2goe1xuICAgICAgICAgICAgc2NvcmUsXG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICB2YWx1ZTogdGV4dCxcbiAgICAgICAgICAgIGlkeCxcbiAgICAgICAgICAgIG5vcm0sXG4gICAgICAgICAgICBpbmRpY2VzXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7IHY6IHRleHQsIG46IG5vcm0gfSA9IHZhbHVlO1xuXG4gICAgICBjb25zdCB7IGlzTWF0Y2gsIHNjb3JlLCBpbmRpY2VzIH0gPSBzZWFyY2hlci5zZWFyY2hJbih0ZXh0KTtcblxuICAgICAgaWYgKGlzTWF0Y2gpIHtcbiAgICAgICAgbWF0Y2hlcy5wdXNoKHsgc2NvcmUsIGtleSwgdmFsdWU6IHRleHQsIG5vcm0sIGluZGljZXMgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoZXNcbiAgfVxufVxuXG5GdXNlLnZlcnNpb24gPSAnNi41LjMnO1xuRnVzZS5jcmVhdGVJbmRleCA9IGNyZWF0ZUluZGV4O1xuRnVzZS5wYXJzZUluZGV4ID0gcGFyc2VJbmRleDtcbkZ1c2UuY29uZmlnID0gQ29uZmlnO1xuXG57XG4gIEZ1c2UucGFyc2VRdWVyeSA9IHBhcnNlO1xufVxuXG57XG4gIHJlZ2lzdGVyKEV4dGVuZGVkU2VhcmNoKTtcbn1cblxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDg1Nzpcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBFU00gQ09NUEFUIEZMQUdcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcblxuLy8gRVhQT1JUU1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIHtcbiAgXCJfX0RPX05PVF9VU0VfX0FjdGlvblR5cGVzXCI6IGZ1bmN0aW9uKCkgeyByZXR1cm4gLyogYmluZGluZyAqLyBBY3Rpb25UeXBlczsgfSxcbiAgXCJhcHBseU1pZGRsZXdhcmVcIjogZnVuY3Rpb24oKSB7IHJldHVybiAvKiBiaW5kaW5nICovIGFwcGx5TWlkZGxld2FyZTsgfSxcbiAgXCJiaW5kQWN0aW9uQ3JlYXRvcnNcIjogZnVuY3Rpb24oKSB7IHJldHVybiAvKiBiaW5kaW5nICovIGJpbmRBY3Rpb25DcmVhdG9yczsgfSxcbiAgXCJjb21iaW5lUmVkdWNlcnNcIjogZnVuY3Rpb24oKSB7IHJldHVybiAvKiBiaW5kaW5nICovIGNvbWJpbmVSZWR1Y2VyczsgfSxcbiAgXCJjb21wb3NlXCI6IGZ1bmN0aW9uKCkgeyByZXR1cm4gLyogYmluZGluZyAqLyBjb21wb3NlOyB9LFxuICBcImNyZWF0ZVN0b3JlXCI6IGZ1bmN0aW9uKCkgeyByZXR1cm4gLyogYmluZGluZyAqLyBjcmVhdGVTdG9yZTsgfVxufSk7XG5cbjsvLyBDT05
118DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qc1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMi5qc1xuXG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkge1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTtcbiAgICBlbnVtZXJhYmxlT25seSAmJiAoc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHtcbiAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlO1xuICAgIH0pKSwga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpO1xuICB9XG5cbiAgcmV0dXJuIGtleXM7XG59XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQyKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBudWxsICE9IGFyZ3VtZW50c1tpXSA/IGFyZ3VtZW50c1tpXSA6IHt9O1xuICAgIGkgJSAyID8gb3duS2V5cyhPYmplY3Qoc291cmNlKSwgITApLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7XG4gICAgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSkgOiBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9yZWR1eC9lcy9yZWR1eC5qc1xuXG5cbi8qKlxuICogQWRhcHRlZCBmcm9tIFJlYWN0OiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvYmxvYi9tYXN0ZXIvcGFja2FnZXMvc2hhcmVkL2Zvcm1hdFByb2RFcnJvck1lc3NhZ2UuanNcbiAqXG4gKiBEbyBub3QgcmVxdWlyZSB0aGlzIG1vZHVsZSBkaXJlY3RseSEgVXNlIG5vcm1hbCB0aHJvdyBlcnJvciBjYWxscy4gVGhlc2UgbWVzc2FnZXMgd2lsbCBiZSByZXBsYWNlZCB3aXRoIGVycm9yIGNvZGVzXG4gKiBkdXJpbmcgYnVpbGQuXG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICovXG5mdW5jdGlvbiBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKGNvZGUp
118IHtcbiAgcmV0dXJuIFwiTWluaWZpZWQgUmVkdXggZXJyb3IgI1wiICsgY29kZSArIFwiOyB2aXNpdCBodHRwczovL3JlZHV4LmpzLm9yZy9FcnJvcnM/Y29kZT1cIiArIGNvZGUgKyBcIiBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciBcIiArICd1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzLiAnO1xufVxuXG4vLyBJbmxpbmVkIHZlcnNpb24gb2YgdGhlIGBzeW1ib2wtb2JzZXJ2YWJsZWAgcG9seWZpbGxcbnZhciAkJG9ic2VydmFibGUgPSAoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wub2JzZXJ2YWJsZSB8fCAnQEBvYnNlcnZhYmxlJztcbn0pKCk7XG5cbi8qKlxuICogVGhlc2UgYXJlIHByaXZhdGUgYWN0aW9uIHR5cGVzIHJlc2VydmVkIGJ5IFJlZHV4LlxuICogRm9yIGFueSB1bmtub3duIGFjdGlvbnMsIHlvdSBtdXN0IHJldHVybiB0aGUgY3VycmVudCBzdGF0ZS5cbiAqIElmIHRoZSBjdXJyZW50IHN0YXRlIGlzIHVuZGVmaW5lZCwgeW91IG11c3QgcmV0dXJuIHRoZSBpbml0aWFsIHN0YXRlLlxuICogRG8gbm90IHJlZmVyZW5jZSB0aGVzZSBhY3Rpb24gdHlwZXMgZGlyZWN0bHkgaW4geW91ciBjb2RlLlxuICovXG52YXIgcmFuZG9tU3RyaW5nID0gZnVuY3Rpb24gcmFuZG9tU3RyaW5nKCkge1xuICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDcpLnNwbGl0KCcnKS5qb2luKCcuJyk7XG59O1xuXG52YXIgQWN0aW9uVHlwZXMgPSB7XG4gIElOSVQ6IFwiQEByZWR1eC9JTklUXCIgKyByYW5kb21TdHJpbmcoKSxcbiAgUkVQTEFDRTogXCJAQHJlZHV4L1JFUExBQ0VcIiArIHJhbmRvbVN0cmluZygpLFxuICBQUk9CRV9VTktOT1dOX0FDVElPTjogZnVuY3Rpb24gUFJPQkVfVU5LTk9XTl9BQ1RJT04oKSB7XG4gICAgcmV0dXJuIFwiQEByZWR1eC9QUk9CRV9VTktOT1dOX0FDVElPTlwiICsgcmFuZG9tU3RyaW5nKCk7XG4gIH1cbn07XG5cbi8qKlxuICogQHBhcmFtIHthbnl9IG9iaiBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgYXJndW1lbnQgYXBwZWFycyB0byBiZSBhIHBsYWluIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvYmopIHtcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnIHx8IG9iaiA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICB2YXIgcHJvdG8gPSBvYmo7XG5cbiAgd2hpbGUgKE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90bykgIT09IG51bGwpIHtcbiAgICBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90byk7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaikgPT09IHByb3RvO1xufVxuXG4vLyBJbmxpbmVkIC8gc2hvcnRlbmVkIHZlcnNpb24gb2YgYGtpbmRPZmAgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9raW5kLW9mXG5mdW5jdGlvbiBtaW5pS2luZE9mKHZhbCkge1xuICBpZiAodmFsID09PSB2b2lkIDApIHJldHVybiAndW5kZWZpbmVkJztcbiAgaWYgKHZhbCA9PT0gbnVsbCkgcmV0dXJuICdudWxsJztcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsO1xuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICBjYXNlICdzeW1ib2wnOlxuICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICB9XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSByZXR1cm4gJ2FycmF5JztcbiAgaWYgKGlzRGF0ZSh2YWwpKSByZXR1cm4gJ2RhdGUnO1xuICBpZiAoaXNFcnJvcih2YWwpKSByZXR1cm4gJ2Vycm9yJztcbiAgdmFyIGNvbnN0cnVjdG9yTmFtZSA9IGN0b3JOYW1lKHZhbCk7XG5cbiAgc3dpdGNoIChjb25zdHJ1Y3Rvck5hbWUpIHtcbiAgICBjYXNlICdTeW1ib2wnOlxuICAgIGNhc2UgJ1Byb21pc2UnOlxuICAgIGNhc2UgJ1dlYWtNYXAnOlxuICAgIGNhc2UgJ1dlYWtTZXQnOlxuICAgIGNhc2UgJ01hcCc6XG4gICAgY2FzZSAnU2V0JzpcbiAgICAgIHJldHVybiBjb25zdHJ1Y3Rvck5hbWU7XG4gIH0gLy8gb3RoZXJcblxuXG4gIHJldHVybiB0eXBlLnNsaWNlKDgsIC0xKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xccy9nLCAnJyk7XG59XG5cbmZ1bmN0aW9uIGN0b3JOYW1lKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbC5jb25zdHJ1Y3RvciA9PT0gJ2Z1bmN0aW9uJyA/IHZhbC5jb25zdHJ1Y3Rvci5uYW1lIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNFcnJvcih2YWwpIHtcbiAgcmV0dXJuIHZhbCBpbnN0YW5jZW9mIEVycm9yIHx8IHR5cGVvZiB2YWwubWVzc2FnZSA9PT0gJ3N0cmluZycgJiYgdmFsLmNvbnN0cnVjdG9yICYmIHR5cGVvZiB2YWwuY29uc3RydWN0b3Iuc3RhY2tUcmFjZUxpbWl0ID09PSAnbnVtYmVyJztcbn1cblxuZnVuY3Rpb24gaXNEYXRlKHZhbCkge1xuICBpZiAodmFsIGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuIHRydWU7XG4gIHJldHVybiB0eXBlb2YgdmFsLnRvRGF0ZVN0cmluZyA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgdmFsLmdldERhdGUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbC5zZXREYXRlID09PSAnZnVuY3Rpb24nO1xufVxuXG5mdW5jdGlvbiBraW5kT2YodmFsKSB7XG4gIHZhciB0eXBlT2ZWYWwgPSB0eXBlb2YgdmFsO1xuXG4gIGlmIChmYWxzZSkge31cblxuICByZXR1cm4gdHlwZU9mVmFsO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBSZWR1eCBzdG9yZSB0aGF0IGhvbGRzIHRoZSBzdGF0ZSB0cmVlLlxuICogVGhlIG9ubHkgd2F5IHRvIGNoYW5nZSB0aGUgZGF0YSBpbiB0aGUgc3RvcmUgaXMgdG8gY2FsbCBgZGlzcGF0Y2goKWAgb24gaXQuXG4gKlxuICogVGhlcmUgc2hvdWxkIG9ubHkgYmUgYSBzaW5nbGUgc3RvcmUgaW4geW91ciBhcHAuIFRvIHNwZWNpZnkgaG93IGRpZmZlcmVudFxuICogcGFydHMgb2YgdGhlIHN0YXRlIHRyZWUgcmVzcG9uZCB0byBhY3Rpb25zLCB5b3UgbWF5IGNvbWJpbmUgc2V2ZXJhbCByZWR1Y2Vyc1xuICogaW50byBhIHNpbmdsZSByZWR1Y2VyIGZ1bmN0aW9uIGJ5IHVzaW5nIGBjb21iaW5lUmVkdWNlcnNgLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlZHVjZXIgQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIG5leHQgc3RhdGUgdHJlZSwgZ2l2ZW5cbiAqIHRoZSBjdXJyZW50IHN0YXRlIHRyZWUgYW5kIHR
118oZSBhY3Rpb24gdG8gaGFuZGxlLlxuICpcbiAqIEBwYXJhbSB7YW55fSBbcHJlbG9hZGVkU3RhdGVdIFRoZSBpbml0aWFsIHN0YXRlLiBZb3UgbWF5IG9wdGlvbmFsbHkgc3BlY2lmeSBpdFxuICogdG8gaHlkcmF0ZSB0aGUgc3RhdGUgZnJvbSB0aGUgc2VydmVyIGluIHVuaXZlcnNhbCBhcHBzLCBvciB0byByZXN0b3JlIGFcbiAqIHByZXZpb3VzbHkgc2VyaWFsaXplZCB1c2VyIHNlc3Npb24uXG4gKiBJZiB5b3UgdXNlIGBjb21iaW5lUmVkdWNlcnNgIHRvIHByb2R1Y2UgdGhlIHJvb3QgcmVkdWNlciBmdW5jdGlvbiwgdGhpcyBtdXN0IGJlXG4gKiBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBzaGFwZSBhcyBgY29tYmluZVJlZHVjZXJzYCBrZXlzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtlbmhhbmNlcl0gVGhlIHN0b3JlIGVuaGFuY2VyLiBZb3UgbWF5IG9wdGlvbmFsbHkgc3BlY2lmeSBpdFxuICogdG8gZW5oYW5jZSB0aGUgc3RvcmUgd2l0aCB0aGlyZC1wYXJ0eSBjYXBhYmlsaXRpZXMgc3VjaCBhcyBtaWRkbGV3YXJlLFxuICogdGltZSB0cmF2ZWwsIHBlcnNpc3RlbmNlLCBldGMuIFRoZSBvbmx5IHN0b3JlIGVuaGFuY2VyIHRoYXQgc2hpcHMgd2l0aCBSZWR1eFxuICogaXMgYGFwcGx5TWlkZGxld2FyZSgpYC5cbiAqXG4gKiBAcmV0dXJucyB7U3RvcmV9IEEgUmVkdXggc3RvcmUgdGhhdCBsZXRzIHlvdSByZWFkIHRoZSBzdGF0ZSwgZGlzcGF0Y2ggYWN0aW9uc1xuICogYW5kIHN1YnNjcmliZSB0byBjaGFuZ2VzLlxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZVN0b3JlKHJlZHVjZXIsIHByZWxvYWRlZFN0YXRlLCBlbmhhbmNlcikge1xuICB2YXIgX3JlZjI7XG5cbiAgaWYgKHR5cGVvZiBwcmVsb2FkZWRTdGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZW5oYW5jZXIgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGVuaGFuY2VyID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBhcmd1bWVudHNbM10gPT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoIHRydWUgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDApIDogMCk7XG4gIH1cblxuICBpZiAodHlwZW9mIHByZWxvYWRlZFN0YXRlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBlbmhhbmNlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBlbmhhbmNlciA9IHByZWxvYWRlZFN0YXRlO1xuICAgIHByZWxvYWRlZFN0YXRlID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBlbmhhbmNlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAodHlwZW9mIGVuaGFuY2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoIHRydWUgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDEpIDogMCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVuaGFuY2VyKGNyZWF0ZVN0b3JlKShyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSk7XG4gIH1cblxuICBpZiAodHlwZW9mIHJlZHVjZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoIHRydWUgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDIpIDogMCk7XG4gIH1cblxuICB2YXIgY3VycmVudFJlZHVjZXIgPSByZWR1Y2VyO1xuICB2YXIgY3VycmVudFN0YXRlID0gcHJlbG9hZGVkU3RhdGU7XG4gIHZhciBjdXJyZW50TGlzdGVuZXJzID0gW107XG4gIHZhciBuZXh0TGlzdGVuZXJzID0gY3VycmVudExpc3RlbmVycztcbiAgdmFyIGlzRGlzcGF0Y2hpbmcgPSBmYWxzZTtcbiAgLyoqXG4gICAqIFRoaXMgbWFrZXMgYSBzaGFsbG93IGNvcHkgb2YgY3VycmVudExpc3RlbmVycyBzbyB3ZSBjYW4gdXNlXG4gICAqIG5leHRMaXN0ZW5lcnMgYXMgYSB0ZW1wb3JhcnkgbGlzdCB3aGlsZSBkaXNwYXRjaGluZy5cbiAgICpcbiAgICogVGhpcyBwcmV2ZW50cyBhbnkgYnVncyBhcm91bmQgY29uc3VtZXJzIGNhbGxpbmdcbiAgICogc3Vic2NyaWJlL3Vuc3Vic2NyaWJlIGluIHRoZSBtaWRkbGUgb2YgYSBkaXNwYXRjaC5cbiAgICovXG5cbiAgZnVuY3Rpb24gZW5zdXJlQ2FuTXV0YXRlTmV4dExpc3RlbmVycygpIHtcbiAgICBpZiAobmV4dExpc3RlbmVycyA9PT0gY3VycmVudExpc3RlbmVycykge1xuICAgICAgbmV4dExpc3RlbmVycyA9IGN1cnJlbnRMaXN0ZW5lcnMuc2xpY2UoKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJlYWRzIHRoZSBzdGF0ZSB0cmVlIG1hbmFnZWQgYnkgdGhlIHN0b3JlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7YW55fSBUaGUgY3VycmVudCBzdGF0ZSB0cmVlIG9mIHlvdXIgYXBwbGljYXRpb24uXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gZ2V0U3RhdGUoKSB7XG4gICAgaWYgKGlzRGlzcGF0Y2hpbmcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvciggdHJ1ZSA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMykgOiAwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3VycmVudFN0YXRlO1xuICB9XG4gIC8qKlxuICAgKiBBZGRzIGEgY2hhbmdlIGxpc3RlbmVyLiBJdCB3aWxsIGJlIGNhbGxlZCBhbnkgdGltZSBhbiBhY3Rpb24gaXMgZGlzcGF0Y2hlZCxcbiAgICogYW5kIHNvbWUgcGFydCBvZiB0aGUgc3RhdGUgdHJlZSBtYXkgcG90ZW50aWFsbHkgaGF2ZSBjaGFuZ2VkLiBZb3UgbWF5IHRoZW5cbiAgICogY2FsbCBgZ2V0U3RhdGUoKWAgdG8gcmVhZCB0aGUgY3VycmVudCBzdGF0ZSB0cmVlIGluc2lkZSB0aGUgY2FsbGJhY2suXG4gICAqXG4gICAqIFlvdSBtYXkgY2FsbCBgZGlzcGF0Y2goKWAgZnJvbSBhIGNoYW5nZSBsaXN0ZW5lciwgd2l0aCB0aGUgZm9sbG93aW5nXG4gICAqIGNhdmVhdHM6XG4gICAqXG4gICAqIDEuIFRoZSBzdWJzY3JpcHRpb25zIGFyZSBzbmFwc2hvdHRlZCBqdXN0IGJlZm9yZSBldmVyeSBgZGlzcGF0Y2goKWAgY2FsbC5cbiAgICogSWYgeW91IHN1YnNjcmliZSBvciB1bnN1YnNjcmliZSB3aGlsZSB0aGUgbGlzdGVuZXJzIGFyZSBiZWluZyBpbnZva2VkLCB0aGlzXG4gICAqIHdpbGwgbm90IGhhdmUgYW55IGVmZmVjdCBvbiB0aGUgYGRpc3BhdGNoKClgIHRoYXQgaXMgY3VycmVudGx5IGluIHByb2dyZXNzLlxuICAgKiBIb3dldmVyLCB0aGUgbmV4dCBgZGlzcGF0Y2goKWAgY2FsbCwgd2hldGhlciBuZXN0ZWQgb3Igbm90LCB3aWxsIHVzZSBhIG
1181vcmVcbiAgICogcmVjZW50IHNuYXBzaG90IG9mIHRoZSBzdWJzY3JpcHRpb24gbGlzdC5cbiAgICpcbiAgICogMi4gVGhlIGxpc3RlbmVyIHNob3VsZCBub3QgZXhwZWN0IHRvIHNlZSBhbGwgc3RhdGUgY2hhbmdlcywgYXMgdGhlIHN0YXRlXG4gICAqIG1pZ2h0IGhhdmUgYmVlbiB1cGRhdGVkIG11bHRpcGxlIHRpbWVzIGR1cmluZyBhIG5lc3RlZCBgZGlzcGF0Y2goKWAgYmVmb3JlXG4gICAqIHRoZSBsaXN0ZW5lciBpcyBjYWxsZWQuIEl0IGlzLCBob3dldmVyLCBndWFyYW50ZWVkIHRoYXQgYWxsIHN1YnNjcmliZXJzXG4gICAqIHJlZ2lzdGVyZWQgYmVmb3JlIHRoZSBgZGlzcGF0Y2goKWAgc3RhcnRlZCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBsYXRlc3RcbiAgICogc3RhdGUgYnkgdGhlIHRpbWUgaXQgZXhpdHMuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIEEgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCBvbiBldmVyeSBkaXNwYXRjaC5cbiAgICogQHJldHVybnMge0Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRvIHJlbW92ZSB0aGlzIGNoYW5nZSBsaXN0ZW5lci5cbiAgICovXG5cblxuICBmdW5jdGlvbiBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoIHRydWUgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDQpIDogMCk7XG4gICAgfVxuXG4gICAgaWYgKGlzRGlzcGF0Y2hpbmcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvciggdHJ1ZSA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNSkgOiAwKTtcbiAgICB9XG5cbiAgICB2YXIgaXNTdWJzY3JpYmVkID0gdHJ1ZTtcbiAgICBlbnN1cmVDYW5NdXRhdGVOZXh0TGlzdGVuZXJzKCk7XG4gICAgbmV4dExpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gdW5zdWJzY3JpYmUoKSB7XG4gICAgICBpZiAoIWlzU3Vic2NyaWJlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0Rpc3Bh
118dGNoaW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvciggdHJ1ZSA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNikgOiAwKTtcbiAgICAgIH1cblxuICAgICAgaXNTdWJzY3JpYmVkID0gZmFsc2U7XG4gICAgICBlbnN1cmVDYW5NdXRhdGVOZXh0TGlzdGVuZXJzKCk7XG4gICAgICB2YXIgaW5kZXggPSBuZXh0TGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICAgICAgbmV4dExpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgY3VycmVudExpc3RlbmVycyA9IG51bGw7XG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogRGlzcGF0Y2hlcyBhbiBhY3Rpb24uIEl0IGlzIHRoZSBvbmx5IHdheSB0byB0cmlnZ2VyIGEgc3RhdGUgY2hhbmdlLlxuICAgKlxuICAgKiBUaGUgYHJlZHVjZXJgIGZ1bmN0aW9uLCB1c2VkIHRvIGNyZWF0ZSB0aGUgc3RvcmUsIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlXG4gICAqIGN1cnJlbnQgc3RhdGUgdHJlZSBhbmQgdGhlIGdpdmVuIGBhY3Rpb25gLiBJdHMgcmV0dXJuIHZhbHVlIHdpbGxcbiAgICogYmUgY29uc2lkZXJlZCB0aGUgKipuZXh0Kiogc3RhdGUgb2YgdGhlIHRyZWUsIGFuZCB0aGUgY2hhbmdlIGxpc3RlbmVyc1xuICAgKiB3aWxsIGJlIG5vdGlmaWVkLlxuICAgKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvbmx5IHN1cHBvcnRzIHBsYWluIG9iamVjdCBhY3Rpb25zLiBJZiB5b3Ugd2FudCB0b1xuICAgKiBkaXNwYXRjaCBhIFByb21pc2UsIGFuIE9ic2VydmFibGUsIGEgdGh1bmssIG9yIHNvbWV0aGluZyBlbHNlLCB5b3UgbmVlZCB0b1xuICAgKiB3cmFwIHlvdXIgc3RvcmUgY3JlYXRpbmcgZnVuY3Rpb24gaW50byB0aGUgY29ycmVzcG9uZGluZyBtaWRkbGV3YXJlLiBGb3JcbiAgICogZXhhbXBsZSwgc2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgYHJlZHV4LXRodW5rYCBwYWNrYWdlLiBFdmVuIHRoZVxuICAgKiBtaWRkbGV3YXJlIHdpbGwgZXZlbnR1YWxseSBkaXNwYXRjaCBwbGFpbiBvYmplY3QgYWN0aW9ucyB1c2luZyB0aGlzIG1ldGhvZC5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGFjdGlvbiBBIHBsYWluIG9iamVjdCByZXByZXNlbnRpbmcg4oCcd2hhdCBjaGFuZ2Vk4oCdLiBJdCBpc1xuICAgKiBhIGdvb2QgaWRlYSB0byBrZWVwIGFjdGlvbnMgc2VyaWFsaXphYmxlIHNvIHlvdSBjYW4gcmVjb3JkIGFuZCByZXBsYXkgdXNlclxuICAgKiBzZXNzaW9ucywgb3IgdXNlIHRoZSB0aW1lIHRyYXZlbGxpbmcgYHJlZHV4LWRldnRvb2xzYC4gQW4gYWN0aW9uIG11c3QgaGF2ZVxuICAgKiBhIGB0eXBlYCBwcm9wZXJ0eSB3aGljaCBtYXkgbm90IGJlIGB1bmRlZmluZWRgLiBJdCBpcyBhIGdvb2QgaWRlYSB0byB1c2VcbiAgICogc3RyaW5nIGNvbnN0YW50cyBmb3IgYWN0aW9uIHR5cGVzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBGb3IgY29udmVuaWVuY2UsIHRoZSBzYW1lIGFjdGlvbiBvYmplY3QgeW91IGRpc3BhdGNoZWQuXG4gICAqXG4gICAqIE5vdGUgdGhhdCwgaWYgeW91IHVzZSBhIGN1c3RvbSBtaWRkbGV3YXJlLCBpdCBtYXkgd3JhcCBgZGlzcGF0Y2goKWAgdG9cbiAgICogcmV0dXJuIHNvbWV0aGluZyBlbHNlIChmb3IgZXhhbXBsZSwgYSBQcm9taXNlIHlvdSBjYW4gYXdhaXQpLlxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGRpc3BhdGNoKGFjdGlvbikge1xuICAgIGlmICghaXNQbGFpbk9iamVjdChhY3Rpb24pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoIHRydWUgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDcpIDogMCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBhY3Rpb24udHlwZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvciggdHJ1ZSA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoOCkgOiAwKTtcbiAgICB9XG5cbiAgICBpZiAoaXNEaXNwYXRjaGluZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCB0cnVlID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg5KSA6IDApO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBpc0Rpc3BhdGNoaW5nID0gdHJ1ZTtcbiAgICAgIGN1cnJlbnRTdGF0ZSA9IGN1cnJlbnRSZWR1Y2VyKGN1cnJlbnRTdGF0ZSwgYWN0aW9uKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaXNEaXNwYXRjaGluZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBsaXN0ZW5lcnMgPSBjdXJyZW50TGlzdGVuZXJzID0gbmV4dExpc3RlbmVycztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2Y
118XIgbGlzdGVuZXIgPSBsaXN0ZW5lcnNbaV07XG4gICAgICBsaXN0ZW5lcigpO1xuICAgIH1cblxuICAgIHJldHVybiBhY3Rpb247XG4gIH1cbiAgLyoqXG4gICAqIFJlcGxhY2VzIHRoZSByZWR1Y2VyIGN1cnJlbnRseSB1c2VkIGJ5IHRoZSBzdG9yZSB0byBjYWxjdWxhdGUgdGhlIHN0YXRlLlxuICAgKlxuICAgKiBZb3UgbWlnaHQgbmVlZCB0aGlzIGlmIHlvdXIgYXBwIGltcGxlbWVudHMgY29kZSBzcGxpdHRpbmcgYW5kIHlvdSB3YW50IHRvXG4gICAqIGxvYWQgc29tZSBvZiB0aGUgcmVkdWNlcnMgZHluYW1pY2FsbHkuIFlvdSBtaWdodCBhbHNvIG5lZWQgdGhpcyBpZiB5b3VcbiAgICogaW1wbGVtZW50IGEgaG90IHJlbG9hZGluZyBtZWNoYW5pc20gZm9yIFJlZHV4LlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBuZXh0UmVkdWNlciBUaGUgcmVkdWNlciBmb3IgdGhlIHN0b3JlIHRvIHVzZSBpbnN0ZWFkLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG5cblxuICBmdW5jdGlvbiByZXBsYWNlUmVkdWNlcihuZXh0UmVkdWNlcikge1xuICAgIGlmICh0eXBlb2YgbmV4dFJlZHVjZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvciggdHJ1ZSA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTApIDogMCk7XG4gICAgfVxuXG4gICAgY3VycmVudFJlZHVjZXIgPSBuZXh0UmVkdWNlcjsgLy8gVGhpcyBhY3Rpb24gaGFzIGEgc2ltaWxpYXIgZWZmZWN0IHRvIEFjdGlvblR5cGVzLklOSVQuXG4gICAgLy8gQW55IHJlZHVjZXJzIHRoYXQgZXhpc3RlZCBpbiBib3RoIHRoZSBuZXcgYW5kIG9sZCByb290UmVkdWNlclxuICAgIC8vIHdpbGwgcmVjZWl2ZSB0aGUgcHJldmlvdXMgc3RhdGUuIFRoaXMgZWZmZWN0aXZlbHkgcG9wdWxhdGVzXG4gICAgLy8gdGhlIG5ldyBzdGF0ZSB0cmVlIHdpdGggYW55IHJlbGV2YW50IGRhdGEgZnJvbSB0aGUgb2xkIG9uZS5cblxuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEFjdGlvblR5cGVzLlJFUExBQ0VcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogSW50ZXJvcGVyYWJpbGl0eSBwb2ludCBmb3Igb2JzZXJ2YWJsZS9yZWFjdGl2ZSBsaWJyYXJpZXMuXG4gICAqIEByZXR1cm5zIHtvYnNlcnZhYmxlfSBBIG1pbmltYWwgb2JzZXJ2YWJsZSBvZiBzdGF0ZSBjaGFuZ2VzLlxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSBvYnNlcnZhYmxlIHByb3Bvc2FsOlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYnNlcnZhYmxlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gb2JzZXJ2YWJsZSgpIHtcbiAgICB2YXIgX3JlZjtcblxuICAgIHZhciBvdXRlclN1YnNjcmliZSA9IHN1YnNjcmliZTtcbiAgICByZXR1cm4gX3JlZiA9IHtcbiAgICAgIC8qKlxuICAgICAgICogVGhlIG1pbmltYWwgb2JzZXJ2YWJsZSBzdWJzY3JpcHRpb24gbWV0aG9kLlxuICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9ic2VydmVyIEFueSBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCBhcyBhbiBvYnNlcnZlci5cbiAgICAgICAqIFRoZSBvYnNlcnZlciBvYmplY3Qgc2hvdWxkIGhhdmUgYSBgbmV4dGAgbWV0aG9kLlxuICAgICAgICogQHJldHVybnMge3N1YnNjcmlwdGlvbn0gQW4gb2JqZWN0IHdpdGggYW4gYHVuc3Vic2NyaWJlYCBtZXRob2QgdGhhdCBjYW5cbiAgICAgICAqIGJlIHVzZWQgdG8gdW5zdWJzY3JpYmUgdGhlIG9ic2VydmFibGUgZnJvbSB0aGUgc3RvcmUsIGFuZCBwcmV2ZW50IGZ1cnRoZXJcbiAgICAgICAqIGVtaXNzaW9uIG9mIHZhbHVlcyBmcm9tIHRoZSBvYnNlcnZhYmxlLlxuICAgICAgICovXG4gICAgICBzdWJzY3JpYmU6IGZ1bmN0aW9uIHN1YnNjcmliZShvYnNlcnZlcikge1xuICAgICAgICBpZiAodHlwZW9mIG9ic2VydmVyICE9PSAnb2JqZWN0JyB8fCBvYnNlcnZlciA9PT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvciggdHJ1ZSA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTEpIDogMCk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBvYnNlcnZlU3RhdGUoKSB7XG4gICAgICAgICAgaWYgKG9ic2VydmVyLm5leHQpIHtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQoZ2V0U3RhdGUoKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgb2JzZXJ2ZVN0YXRlKCk7XG4gICAgICAgIHZhciB1bnN1YnNjcmliZSA9IG91dGVyU3Vic2NyaWJlKG9ic2VydmVTdGF0ZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdW5zdWJzY3JpYmU6IHVuc3Vic2NyaWJlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSwgX3JlZlskJG9ic2VydmFibGVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgX3JlZjtcbiAgfSAvLyBXaGVuIGEgc3RvcmUgaXMgY3JlYXRlZCwgYW4gXCJJTklUXCIgYWN0aW9uIGlzIGRpc3BhdGNoZWQgc28gdGhhdCBldmVyeVxuICAvLyByZWR1Y2VyIHJldHVybnMgdGhlaXIgaW5pdGlhbCBzdGF0ZS4gVGhpcyBlZmZlY3RpdmVseSBwb3B1bGF0ZXNcbiAgLy8gdGhlIGluaXRpYWwgc3RhdGUgdHJlZS5cblxuXG4gIGRpc3BhdGNoKHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5JTklUXG4gIH0pO1xuICByZXR1cm4gX3JlZjIgPSB7XG4gICAgZGlzcGF0Y2g6IGRpc3BhdGNoLFxuICAgIHN1YnNjcmliZTogc3Vic2NyaWJlLFxuICAgIGdldFN0YXRlOiBnZXRTdGF0ZSxcbiAgICByZXBsYWNlUmVkdWNlcjogcmVwbGFjZVJlZHVjZXJcbiAgfSwgX3JlZjJbJCRvYnNlcnZhYmxlXSA9IG9ic2VydmFibGUsIF9yZWYyO1xufVxuXG4vKipcbiAqIFByaW50cyBhIHdhcm5pbmcgaW4gdGhlIGNvbnNvbGUgaWYgaXQgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIFRoZSB3YXJuaW5nIG1lc3NhZ2UuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gd2FybmluZyhtZXNzYWdlKSB7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbiAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gIH1cbiAgLyogZXNsaW50LWVuYWJsZSBuby1jb25zb2xlICovXG5cblxuICB0cnkge1xuICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgaWYgeW91IGVuYWJsZVxuICAgIC8vIFwiYnJlYWsgb24gYWxsIGV4Y2VwdGlvbnNcIiBpbiB5b3VyIGNvbnNvbGUsXG4gICAgLy8gaXQgd291bGQgcGF1c2UgdGhlIGV4ZWN1dGlvbiBhdCB0aGlzIGxpbmUuXG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICB9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cbn1cblxuZnVuY3Rpb24gZ2V0VW5leHBlY3RlZFN0YXRlU2hhcGVXYXJuaW5nTWVzc2FnZShpbnB1dFN0YXRlLCByZWR1Y2VycywgYWN0aW9uLCB1bmV4cGVjdGVkS2V5Q2FjaGUpIHtcbiAgdmFyIHJlZHVjZXJLZXlzID0gT2JqZWN0LmtleXMocmVkdWNlcnMpO1xuICB2YXIgYXJndW1lbnROYW1lID0gYWN0aW9uICYmIGFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlcy5JTklUID8gJ3ByZWxvYWRlZFN0YXRlIGFyZ3VtZW50IHBhc3NlZCB0byBjcmVhdGVTdG9yZScgOiAncHJldmlvdXMgc3RhdGUgcmVjZWl2ZWQgYnkgdGhlI
118HJlZHVjZXInO1xuXG4gIGlmIChyZWR1Y2VyS2V5cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJ1N0b3JlIGRvZXMgbm90IGhhdmUgYSB2YWxpZCByZWR1Y2VyLiBNYWtlIHN1cmUgdGhlIGFyZ3VtZW50IHBhc3NlZCAnICsgJ3RvIGNvbWJpbmVSZWR1Y2VycyBpcyBhbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGFyZSByZWR1Y2Vycy4nO1xuICB9XG5cbiAgaWYgKCFpc1BsYWluT2JqZWN0KGlucHV0U3RhdGUpKSB7XG4gICAgcmV0dXJuIFwiVGhlIFwiICsgYXJndW1lbnROYW1lICsgXCIgaGFzIHVuZXhwZWN0ZWQgdHlwZSBvZiBcXFwiXCIgKyBraW5kT2YoaW5wdXRTdGF0ZSkgKyBcIlxcXCIuIEV4cGVjdGVkIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgXCIgKyAoXCJrZXlzOiBcXFwiXCIgKyByZWR1Y2VyS2V5cy5qb2luKCdcIiwgXCInKSArIFwiXFxcIlwiKTtcbiAgfVxuXG4gIHZhciB1bmV4cGVjdGVkS2V5cyA9IE9iamVjdC5rZXlzKGlucHV0U3RhdGUpLmZpbHRlcihmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuICFyZWR1Y2Vycy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmICF1bmV4cGVjdGVkS2V5Q2FjaGVba2V5XTtcbiAgfSk7XG4gIHVuZXhwZWN0ZWRLZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHVuZXhwZWN0ZWRLZXlDYWNoZVtrZXldID0gdHJ1ZTtcbiAgfSk7XG4gIGlmIChhY3Rpb24gJiYgYWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGVzLlJFUExBQ0UpIHJldHVybjtcblxuICBpZiAodW5leHBlY3RlZEtleXMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBcIlVuZXhwZWN0ZWQgXCIgKyAodW5leHBlY3RlZEtleXMubGVuZ3RoID4gMSA/ICdrZXlzJyA6ICdrZXknKSArIFwiIFwiICsgKFwiXFxcIlwiICsgdW5leHBlY3RlZEtleXMuam9pbignXCIsIFwiJykgKyBcIlxcXCIgZm91bmQgaW4gXCIgKyBhcmd1bWVudE5hbWUgKyBcIi4gXCIpICsgXCJFeHBlY3RlZCB0byBmaW5kIG9uZSBvZiB0aGUga25vd24gcmVkdWNlciBrZXlzIGluc3RlYWQ6IFwiICsgKFwiXFxcIlwiICsgcmVkdWNlcktleXMuam9pbignXCIsIFwiJykgKyBcIlxcXCIuIFVuZXhwZWN0ZWQga2V5cyB3aWxsIGJlIGlnbm9yZWQuXCIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFJlZHVjZXJTaGFwZShyZWR1Y2Vycykge1xuICBPYmplY3Qua2V5cyhyZWR1Y2VycykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHJlZHVjZXIgPSByZWR1Y2Vyc1trZXldO1xuICAgIHZhciBpbml0aWFsU3RhdGUgPSByZWR1Y2VyKHVuZGVmaW5lZCwge1xuICAgICAgdHlwZTogQWN0aW9uVHlwZXMuSU5JVFxuICAgIH0pO1xuXG4gICAgaWYgKHR5cGVvZiBpbml0aWFsU3RhdGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoIHRydWUgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDEyKSA6IDApO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcmVkdWNlcih1bmRlZmluZWQsIHtcbiAgICAgIHR5cGU6IEFjdGlvblR5cGVzLlBST0JFX1VOS05PV05fQUNUSU9OKClcbiAgICB9KSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvciggdHJ1ZSA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTMpIDogMCk7XG4gICAgfVxuICB9KTtcbn1cbi8qKlxuICogVHVybnMgYW4gb2JqZWN0IHdob3NlIHZhbHVlcyBhcmUgZGlmZmVyZW50IHJlZHVjZXIgZnVuY3Rpb25zLCBpbnRvIGEgc2luZ2xlXG4gKiByZWR1Y2VyIGZ1bmN0aW9uLiBJdCB3aWxsIGNhbGwgZXZlcnkgY2hpbGQgcmVkdWNlciwgYW5kIGdhdGhlciB0aGVpciByZXN1bHRzXG4gKiBpbnRvIGEgc2luZ2xlIHN0YXRlIG9iamVjdCwgd2hvc2Uga2V5cyBjb3JyZXNwb25kIHRvIHRoZSBrZXlzIG9mIHRoZSBwYXNzZWRcbiAqIHJlZHVjZXIgZnVuY3Rpb25zLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSByZWR1Y2VycyBBbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGNvcnJlc3BvbmQgdG8gZGlmZmVyZW50XG4gKiByZWR1Y2VyIGZ1bmN0aW9ucyB0aGF0IG5lZWQgdG8gYmUgY29tYmluZWQgaW50byBvbmUuIE9uZSBoYW5keSB3YXkgdG8gb2J0YWluXG4gKiBpdCBpcyB0byB1c2UgRVM2IGBpbXBvcnQgKiBhcyByZWR1Y2Vyc2Agc3ludGF4LiBUaGUgcmVkdWNlcnMgbWF5IG5ldmVyIHJldHVyblxuICogdW5kZWZpbmVkIGZvciBhbnkgYWN0aW9uLiBJbnN0ZWFkLCB0aGV5IHNob3VsZCByZXR1cm4gdGhlaXIgaW5pdGlhbCBzdGF0ZVxuICogaWYgdGhlIHN0YXRlIHBhc3NlZCB0byB0aGVtIHdhcyB1bmRlZmluZWQsIGFuZCB0aGUgY3VycmVudCBzdGF0ZSBmb3IgYW55XG4gKiB1bnJlY29nbml6ZWQgYWN0aW9uLlxuICpcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSByZWR1Y2VyIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBldmVyeSByZWR1Y2VyIGluc2lkZSB0aGVcbiAqIHBhc3NlZCBvYmplY3QsIGFuZCBidWlsZHMgYSBzdGF0ZSBvYmplY3Qgd2l0aCB0aGUgc2FtZSBzaGFwZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIGNvbWJpbmVSZWR1Y2VycyhyZWR1Y2Vycykge1xuICB2YXIgcmVkdWNlcktleXMgPSBPYmplY3Qua2V5cyhyZWR1Y2Vycyk7XG4gIHZhciBmaW5hbFJlZHVjZXJzID0ge307XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWR1Y2VyS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSByZWR1Y2VyS2V5c1tpXTtcblxuICAgIGlmIChmYWxzZSkge31cblxuICAgIGlmICh0eXBlb2YgcmVkdWNlcnNba2V5XSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZmluYWxSZWR1Y2Vyc1trZXldID0gcmVkdWNlcnNba2V5XTtcbiAgICB9XG4gIH1cblxuICB2YXIgZmluYWxSZWR1Y2VyS2V5cyA9IE9iamVjdC5rZXlzKGZpbmFsUmVkdWNlcnMpOyAvLyBUaGlzIGlzIHVzZWQgdG8gbWFrZSBzdXJlIHdlIGRvbid0IHdhcm4gYWJvdXQgdGhlIHNhbWVcbiAgLy8ga2V5cyBtdWx0aXBsZSB0aW1lcy5cblxuICB2YXIgdW5leHBlY3RlZEtleUNhY2hlO1xuXG4gIGlmIChmYWxzZSkge31cblxuICB2YXIgc2hhcGVBc3NlcnRpb25FcnJvcjtcblxuICB0cnkge1xuICAgIGFzc2VydFJlZHVjZXJTaGFwZShmaW5hbFJlZHVjZXJzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHNoYXBlQXNzZXJ0aW9uRXJyb3IgPSBlO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGNvbWJpbmF0aW9uKHN0YXRlLCBhY3Rpb24pIHtcbiAgICBpZiAoc3RhdGUgPT09IHZvaWQgMCkge1xuICAgICAgc3RhdGUgPSB7fTtcbiAgICB9XG5cbiAgICBpZiAoc2hhcGVBc3NlcnRpb25
118FcnJvcikge1xuICAgICAgdGhyb3cgc2hhcGVBc3NlcnRpb25FcnJvcjtcbiAgICB9XG5cbiAgICBpZiAoZmFsc2UpIHsgdmFyIHdhcm5pbmdNZXNzYWdlOyB9XG5cbiAgICB2YXIgaGFzQ2hhbmdlZCA9IGZhbHNlO1xuICAgIHZhciBuZXh0U3RhdGUgPSB7fTtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBmaW5hbFJlZHVjZXJLZXlzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIF9rZXkgPSBmaW5hbFJlZHVjZXJLZXlzW19pXTtcbiAgICAgIHZhciByZWR1Y2VyID0gZmluYWxSZWR1Y2Vyc1tfa2V5XTtcbiAgICAgIHZhciBwcmV2aW91c1N0YXRlRm9yS2V5ID0gc3RhdGVbX2tleV07XG4gICAgICB2YXIgbmV4dFN0YXRlRm9yS2V5ID0gcmVkdWNlcihwcmV2aW91c1N0YXRlRm9yS2V5LCBhY3Rpb24pO1xuXG4gICAgICBpZiAodHlwZW9mIG5leHRTdGF0ZUZvcktleSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdmFyIGFjdGlvblR5cGUgPSBhY3Rpb24gJiYgYWN0aW9uLnR5cGU7XG4gICAgICAgIHRocm93IG5ldyBFcnJvciggdHJ1ZSA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTQpIDogMCk7XG4gICAgICB9XG5cbiAgICAgIG5leHRTdGF0ZVtfa2V5XSA9IG5leHRTdGF0ZUZvcktleTtcbiAgICAgIGhhc0NoYW5nZWQgPSBoYXNDaGFuZ2VkIHx8IG5leHRTdGF0ZUZvcktleSAhPT0gcHJldmlvdXNTdGF0ZUZvcktleTtcbiAgICB9XG5cbiAgICBoYXNDaGFuZ2VkID0gaGFzQ2hhbmdlZCB8fCBmaW5hbFJlZHVjZXJLZXlzLmxlbmd0aCAhPT0gT2JqZWN0LmtleXMoc3RhdGUpLmxlbmd0aDtcbiAgICByZXR1cm4gaGFzQ2hhbmdlZCA/IG5leHRTdGF0ZSA6IHN0YXRlO1xuICB9O1xufVxuXG5mdW5jdGlvbiBiaW5kQWN0aW9uQ3JlYXRvcihhY3Rpb25DcmVhdG9yLCBkaXNwYXRjaCkge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBkaXNwYXRjaChhY3Rpb25DcmVhdG9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9O1xufVxuLyoqXG4gKiBUdXJucyBhbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGFyZSBhY3Rpb24gY3JlYXRvcnMsIGludG8gYW4gb2JqZWN0IHdpdGggdGhlXG4gKiBzYW1lIGtleXMsIGJ1dCB3aXRoIGV2ZXJ5IGZ1bmN0aW9uIHdyYXBwZWQgaW50byBhIGBkaXNwYXRjaGAgY2FsbCBzbyB0aGV5XG4gKiBtYXkgYmUgaW52b2tlZCBkaXJlY3RseS4gVGhpcyBpcyBqdXN0IGEgY29udmVuaWVuY2UgbWV0aG9kLCBhcyB5b3UgY2FuIGNhbGxcbiAqIGBzdG9yZS5kaXNwYXRjaChNeUFjdGlvbkNyZWF0b3JzLmRvU29tZXRoaW5nKCkpYCB5b3Vyc2VsZiBqdXN0IGZpbmUuXG4gKlxuICogRm9yIGNvbnZlbmllbmNlLCB5b3UgY2FuIGFsc28gcGFzcyBhbiBhY3Rpb24gY3JlYXRvciBhcyB0aGUgZmlyc3QgYXJndW1lbnQsXG4gKiBhbmQgZ2V0IGEgZGlzcGF0Y2ggd3JhcHBlZCBmdW5jdGlvbiBpbiByZXR1cm4uXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbnxPYmplY3R9IGFjdGlvbkNyZWF0b3JzIEFuIG9iamVjdCB3aG9zZSB2YWx1ZXMgYXJlIGFjdGlvblxuICogY3JlYXRvciBmdW5jdGlvbnMuIE9uZSBoYW5keSB3YXkgdG8gb2J0YWluIGl0IGlzIHRvIHVzZSBFUzYgYGltcG9ydCAqIGFzYFxuICogc3ludGF4LiBZb3UgbWF5IGFsc28gcGFzcyBhIHNpbmdsZSBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBkaXNwYXRjaCBUaGUgYGRpc3BhdGNoYCBmdW5jdGlvbiBhdmFpbGFibGUgb24geW91ciBSZWR1eFxuICogc3RvcmUuXG4gKlxuICogQHJldHVybnMge0Z1bmN0aW9ufE9iamVjdH0gVGhlIG9iamVjdCBtaW1pY2tpbmcgdGhlIG9yaWdpbmFsIG9iamVjdCwgYnV0IHdpdGhcbiAqIGV2ZXJ5IGFjdGlvbiBjcmVhdG9yIHdyYXBwZWQgaW50byB0aGUgYGRpc3BhdGNoYCBjYWxsLiBJZiB5b3UgcGFzc2VkIGFcbiAqIGZ1bmN0aW9uIGFzIGBhY3Rpb25DcmVhdG9yc2AsIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBhbHNvIGJlIGEgc2luZ2xlXG4gKiBmdW5jdGlvbi5cbiAqL1xuXG5cbmZ1bmN0aW9uIGJpbmRBY3Rpb25DcmVhdG9ycyhhY3Rpb25DcmVhdG9ycywgZGlzcGF0Y2gpIHtcbiAgaWYgKHR5cGVvZiBhY3Rpb25DcmVhdG9ycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBiaW5kQWN0aW9uQ3JlYXRvcihhY3Rpb25DcmVhdG9ycywgZGlzcGF0Y2gpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBhY3Rpb25DcmVhdG9ycyAhPT0gJ29iamVjdCcgfHwgYWN0aW9uQ3JlYXRvcnMgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoIHRydWUgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDE2KSA6IDApO1xuICB9XG5cbiAgdmFyIGJvdW5kQWN0aW9uQ3JlYXRvcnMgPSB7fTtcblxuICBmb3IgKHZhciBrZXkgaW4gYWN0aW9uQ3JlYXRvcnMpIHtcbiAgICB2YXIgYWN0aW9uQ3JlYXRvciA9IGFjdGlvbkNyZWF0b3JzW2tleV07XG5cbiAgICBpZiAodHlwZW9mIGFjdGlvbkNyZWF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGJvdW5kQWN0aW9uQ3JlYXRvcnNba2V5XSA9IGJpbmRBY3Rpb25DcmVhdG9yKGFjdGlvbkNyZWF0b3IsIGRpc3BhdGNoKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYm91bmRBY3Rpb25DcmVhdG9ycztcbn1cblxuLyoqXG4gKiBDb21wb3NlcyBzaW5nbGUtYXJndW1lbnQgZnVuY3Rpb25zIGZyb20gcmlnaHQgdG8gbGVmdC4gVGhlIHJpZ2h0bW9zdFxuICogZnVuY3Rpb24gY2FuIHRha2UgbXVsdGlwbGUgYXJndW1lbnRzIGFzIGl0IHByb3ZpZGVzIHRoZSBzaWduYXR1cmUgZm9yXG4gKiB0aGUgcmVzdWx0aW5nIGNvbXBvc2l0ZSBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gey4uLkZ1bmN0aW9ufSBmdW5jcyBUaGUgZnVuY3Rpb25zIHRvIGNvbXBvc2UuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgZnVuY3Rpb24gb2J0YWluZWQgYnkgY29tcG9zaW5nIHRoZSBhcmd1bWVudCBmdW5jdGlvbnNcbiAqIGZyb20gcmlnaHQgdG8gbGVmdC4gRm9yIGV4YW1wbGUsIGNvbXBvc2UoZiwgZywgaCkgaXMgaWRlbnRpY2FsIHRvIGRvaW5nXG4gKiAoLi4uYXJncykgPT4gZihnKGgoLi4uYXJncykpKS5cbiAqL1xuZnVuY3Rpb24gY29tcG9zZSgpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGZ1bmNzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGZ1bmNzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgaWYgKGZ1bmNzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybi
118BmdW5jdGlvbiAoYXJnKSB7XG4gICAgICByZXR1cm4gYXJnO1xuICAgIH07XG4gIH1cblxuICBpZiAoZnVuY3MubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIGZ1bmNzWzBdO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmNzLnJlZHVjZShmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gYShiLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzKSk7XG4gICAgfTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0b3JlIGVuaGFuY2VyIHRoYXQgYXBwbGllcyBtaWRkbGV3YXJlIHRvIHRoZSBkaXNwYXRjaCBtZXRob2RcbiAqIG9mIHRoZSBSZWR1eCBzdG9yZS4gVGhpcyBpcyBoYW5keSBmb3IgYSB2YXJpZXR5IG9mIHRhc2tzLCBzdWNoIGFzIGV4cHJlc3NpbmdcbiAqIGFzeW5jaHJvbm91cyBhY3Rpb25zIGluIGEgY29uY2lzZSBtYW5uZXIsIG9yIGxvZ2dpbmcgZXZlcnkgYWN0aW9uIHBheWxvYWQuXG4gKlxuICogU2VlIGByZWR1eC10aHVua2AgcGFja2FnZSBhcyBhbiBleGFtcGxlIG9mIHRoZSBSZWR1eCBtaWRkbGV3YXJlLlxuICpcbiAqIEJlY2F1c2UgbWlkZGxld2FyZSBpcyBwb3RlbnRpYWxseSBhc3luY2hyb25vdXMsIHRoaXMgc2hvdWxkIGJlIHRoZSBmaXJzdFxuICogc3RvcmUgZW5oYW5jZXIgaW4gdGhlIGNvbXBvc2l0aW9uIGNoYWluLlxuICpcbiAqIE5vdGUgdGhhdCBlYWNoIG1pZGRsZXdhcmUgd2lsbCBiZSBnaXZlbiB0aGUgYGRpc3BhdGNoYCBhbmQgYGdldFN0YXRlYCBmdW5jdGlvbnNcbiAqIGFzIG5hbWVkIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gey4uLkZ1bmN0aW9ufSBtaWRkbGV3YXJlcyBUaGUgbWlkZGxld2FyZSBjaGFpbiB0byBiZSBhcHBsaWVkLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIHN0b3JlIGVuaGFuY2VyIGFwcGx5aW5nIHRoZSBtaWRkbGV3YXJlLlxuICovXG5cbmZ1bmN0aW9uIGFwcGx5TWlkZGxld2FyZSgpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIG1pZGRsZXdhcmVzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIG1pZGRsZXdhcmVzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChjcmVhdGVTdG9yZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICB2Y
118XIgc3RvcmUgPSBjcmVhdGVTdG9yZS5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cyk7XG5cbiAgICAgIHZhciBfZGlzcGF0Y2ggPSBmdW5jdGlvbiBkaXNwYXRjaCgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCB0cnVlID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxNSkgOiAwKTtcbiAgICAgIH07XG5cbiAgICAgIHZhciBtaWRkbGV3YXJlQVBJID0ge1xuICAgICAgICBnZXRTdGF0ZTogc3RvcmUuZ2V0U3RhdGUsXG4gICAgICAgIGRpc3BhdGNoOiBmdW5jdGlvbiBkaXNwYXRjaCgpIHtcbiAgICAgICAgICByZXR1cm4gX2Rpc3BhdGNoLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHZhciBjaGFpbiA9IG1pZGRsZXdhcmVzLm1hcChmdW5jdGlvbiAobWlkZGxld2FyZSkge1xuICAgICAgICByZXR1cm4gbWlkZGxld2FyZShtaWRkbGV3YXJlQVBJKTtcbiAgICAgIH0pO1xuICAgICAgX2Rpc3BhdGNoID0gY29tcG9zZS5hcHBseSh2b2lkIDAsIGNoYWluKShzdG9yZS5kaXNwYXRjaCk7XG4gICAgICByZXR1cm4gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIHN0b3JlKSwge30sIHtcbiAgICAgICAgZGlzcGF0Y2g6IF9kaXNwYXRjaFxuICAgICAgfSk7XG4gICAgfTtcbiAgfTtcbn1cblxuLypcbiAqIFRoaXMgaXMgYSBkdW1teSBmdW5jdGlvbiB0byBjaGVjayBpZiB0aGUgZnVuY3Rpb24gbmFtZSBoYXMgYmVlbiBhbHRlcmVkIGJ5IG1pbmlmaWNhdGlvbi5cbiAqIElmIHRoZSBmdW5jdGlvbiBoYXMgYmVlbiBtaW5pZmllZCBhbmQgTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJywgd2FybiB0aGUgdXNlci5cbiAqL1xuXG5mdW5jdGlvbiBpc0NydXNoZWQoKSB7fVxuXG5pZiAoZmFsc2UpIHt9XG5cblxuXG5cbi8qKiovIH0pXG5cbi8qKioqKiovIFx0fSk7XG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcbi8qKioqKiovIFx0XHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcbi8qKioqKiovIFx0XHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi8gXHRcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0ICovXG4vKioqKioqLyBcdCFmdW5jdGlvbigpIHtcbi8qKioqKiovIFx0XHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRcdGZ1bmN0aW9uKCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0XHRmdW5jdGlvbigpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi8gXHR9KCk7XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvKiB3ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMgKi9cbi8qKioqKiovIFx0IWZ1bmN0aW9uKCkge1xuLyoqKioqKi8gXHRcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBkZWZpbml0aW9uKSB7XG4vKioqKioqLyBcdFx0XHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG4vKioqKioqLyBcdFx0XHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuLyoqKioqKi8gXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG4vKioqKioqLyBcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdH1cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi8gXHR9KCk7XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvKiB3ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kICovXG4vKioqKioqLyBcdCFmdW5jdGlvbigpIHtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmosIHByb3ApIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApOyB9XG4vKioqKioqLyBcdH0oKTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QgKi9cbi8qKioqKiovIFx0IWZ1bmN0aW9uKCkge1xuLyoqKioqKi8gXHRcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4vKioqKioqLyBcdFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbi8qKioqKiovIFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVs
118ZScgfSk7XG4vKioqKioqLyBcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyoqKioqKi8gXHRcdH07XG4vKioqKioqLyBcdH0oKTtcbi8qKioqKiovIFx0XG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xudmFyIF9fd2VicGFja19leHBvcnRzX18gPSB7fTtcbi8vIFRoaXMgZW50cnkgbmVlZCB0byBiZSB3cmFwcGVkIGluIGFuIElJRkUgYmVjYXVzZSBpdCBuZWVkIHRvIGJlIGlzb2xhdGVkIGFnYWluc3Qgb3RoZXIgbW9kdWxlcyBpbiB0aGUgY2h1bmsuXG4hZnVuY3Rpb24oKSB7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NjcmlwdHNfY2hvaWNlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNzMpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zY3JpcHRzX2Nob2ljZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihfc2NyaXB0c19jaG9pY2VzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zY3JpcHRzX2ludGVyZmFjZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTg3KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2NyaXB0c19pbnRlcmZhY2VzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oX3NjcmlwdHNfaW50ZXJmYWNlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2NyaXB0c19jb25zdGFudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODgzKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc2NyaXB0c19kZWZhdWx0c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3ODkpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zY3JpcHRzX3RlbXBsYXRlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2ODYpO1xuXG5cblxuXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKChfc2NyaXB0c19jaG9pY2VzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCgpKSk7XG5cbn0oKTtcbl9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXTtcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19leHBvcnRzX187XG4vKioqKioqLyB9KSgpXG47XG59KTsiLCIvKipcbiAqIG1hdGNoZXNTZWxlY3RvciB2Mi4wLjJcbiAqIG1hdGNoZXNTZWxlY3RvciggZWxlbWVudCwgJy5zZWxlY3RvcicgKVxuICogTUlUIGxpY2Vuc2VcbiAqL1xuXG4vKmpzaGludCBicm93c2VyOiB0cnVlLCBzdHJpY3Q6IHRydWUsIHVuZGVmOiB0cnVlLCB1bnVzZWQ6IHRydWUgKi9cblxuKCBmdW5jdGlvbiggd2luZG93LCBmYWN0b3J5ICkge1xuICAvKmdsb2JhbCBkZWZpbmU6IGZhbHNlLCBtb2R1bGU6IGZhbHNlICovXG4gICd1c2Ugc3RyaWN0JztcbiAgLy8gdW5pdmVyc2FsIG1vZHVsZSBkZWZpbml0aW9uXG4gIGlmICggdHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgKSB7XG4gICAgLy8gQU1EXG4gICAgZGVmaW5lKCBmYWN0b3J5ICk7XG4gIH0gZWxzZSBpZiAoIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMgKSB7XG4gICAgLy8gQ29tbW9uSlNcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBicm93c2VyIGdsb2JhbFxuICAgIHdpbmRvdy5tYXRjaGVzU2VsZWN0b3IgPSBmYWN0b3J5KCk7XG4gIH1cblxufSggd2luZG93LCBmdW5jdGlvbiBmYWN0b3J5KCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIG1hdGNoZXNNZXRob2QgPSAoIGZ1bmN0aW9uKCkge1xuICAgIHZhciBFbGVtUHJvdG8gPSB3aW5kb3cuRWxlbWVudC5wcm90b3R5cGU7XG4gICAgLy8gY2hlY2sgZm9yIHRoZSBzdGFuZGFyZCBtZXRob2QgbmFtZSBmaXJzdFxuICAgIGlmICggRWxlbVByb3RvLm1hdGNoZXMgKSB7XG4gICAgICByZXR1cm4gJ21hdGNoZXMnO1xuICAgIH1cbiAgICAvLyBjaGVjayB1bi1wcmVmaXhlZFxuICAgIGlmICggRWxlbVByb3RvLm1hdGNoZXNTZWxlY3RvciApIHtcbiAgICAgIHJldHVybiAnbWF0Y2hlc1NlbGVjdG9yJztcbiAgICB9XG4gICAgLy8gY2hlY2sgdmVuZG9yIHByZWZpeGVzXG4gICAgdmFyIHByZWZpeGVzID0gWyAnd2Via2l0JywgJ21veicsICdtcycsICdvJyBdO1xuXG4gICAgZm9yICggdmFyIGk9MDsgaSA8IHByZWZpeGVzLmxlbmd0aDsgaSsrICkge1xuICAgICAgdmFyIHByZWZpeCA9IHByZWZpeGVzW2ldO1xuICAgICAgdmFyIG1ldGhvZCA9IHByZWZpeCArICdNYXRjaGVzU2VsZWN0b3InO1xuICAgICAgaWYgKCBFbGVtUHJvdG9bIG1ldGhvZCBdICkge1xuICAgICAgICByZXR1cm4gbWV0aG9kO1xuICAgICAgfVxuICAgIH1cbiAgfSkoKTtcblxuICByZXR1cm4gZnVuY3Rpb24gbWF0Y2hlc1NlbGVjdG9yKCBlbGVtLCBzZWxlY3RvciApIHtcbiAgICByZXR1cm4gZWxlbVsgbWF0Y2hlc01ldGhvZCBdKCBzZWxlY3RvciApO1xuICB9O1xuXG59KSk7XG4iLCIvKipcbiAqIEV2RW1pdHRlciB2MS4xLjBcbiAqIExpbCcgZXZlbnQgZW1pdHRlclxuICogTUlUIExpY2Vuc2VcbiAqL1xuXG4vKiBqc2hpbnQgdW51c2VkOiB0cnVlLCB1bmRlZjogdHJ1ZSwgc3RyaWN0OiB0cnVlICovXG5cbiggZnVuY3Rpb24oIGdsb2JhbCwgZmFjdG9yeSApIHtcbiAgLy8gdW5pdmVyc2FsIG1vZHVsZSBkZWZpbml0aW9uXG4gIC8qIGpzaGludCBzdHJpY3Q6IGZhbHNlICovIC8qIGdsb2JhbHMgZGVmaW5lLCBtb2R1bGUsIHdpbmRvdyAqL1xuICBpZiAoIHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kICkge1xuICAgIC8vIEFNRCAtIFJlcXVpcmVKU1xuICAgIGRlZmluZSggZmFjdG9yeSApO1xuICB9IGVsc2UgaWYgKCB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzICkge1xuICAgIC8vIENvbW1vbkpTIC0gQnJvd3NlcmlmeSwgV2VicGFja1xuICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuICB9IGVsc2Uge1xuICAgIC8vIEJyb3dzZXIgZ2xvYmFsc1xuICAgIGdsb2JhbC5FdkVtaXR0ZXIgPSBmYWN0b3J5KCk7XG4gIH1cblxufSggdHlwZW9mIHdpbmRvdyAhPSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHRoaXMsIGZ1bmN0aW9uKCkge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gRXZFbWl0dGVyKCkge31cblxudmFyIHByb3RvID0gRXZFbWl0dGVyLnByb3RvdHlwZTtcblxucHJvdG8ub24gPSBmdW5jdGlvbiggZXZlbnROYW1lLCBsaXN0ZW5lciApIHtcbiAgaWYgKCAhZXZlbn
118ROYW1lIHx8ICFsaXN0ZW5lciApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gc2V0IGV2ZW50cyBoYXNoXG4gIHZhciBldmVudHMgPSB0aGlzLl9ldmVudHMgPSB0aGlzLl9ldmVudHMgfHwge307XG4gIC8vIHNldCBsaXN0ZW5lcnMgYXJyYXlcbiAgdmFyIGxpc3RlbmVycyA9IGV2ZW50c1sgZXZlbnROYW1lIF0gPSBldmVudHNbIGV2ZW50TmFtZSBdIHx8IFtdO1xuICAvLyBvbmx5IGFkZCBvbmNlXG4gIGlmICggbGlzdGVuZXJzLmluZGV4T2YoIGxpc3RlbmVyICkgPT0gLTEgKSB7XG4gICAgbGlzdGVuZXJzLnB1c2goIGxpc3RlbmVyICk7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbnByb3RvLm9uY2UgPSBmdW5jdGlvbiggZXZlbnROYW1lLCBsaXN0ZW5lciApIHtcbiAgaWYgKCAhZXZlbnROYW1lIHx8ICFsaXN0ZW5lciApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gYWRkIGV2ZW50XG4gIHRoaXMub24oIGV2ZW50TmFtZSwgbGlzdGVuZXIgKTtcbiAgLy8gc2V0IG9uY2UgZmxhZ1xuICAvLyBzZXQgb25jZUV2ZW50cyBoYXNoXG4gIHZhciBvbmNlRXZlbnRzID0gdGhpcy5fb25jZUV2ZW50cyA9IHRoaXMuX29uY2VFdmVudHMgfHwge307XG4gIC8vIHNldCBvbmNlTGlzdGVuZXJzIG9iamVjdFxuICB2YXIgb25jZUxpc3RlbmVycyA9IG9uY2VFdmVudHNbIGV2ZW50TmFtZSBdID0gb25jZUV2ZW50c1sgZXZlbnROYW1lIF0gfHwge307XG4gIC8vIHNldCBmbGFnXG4gIG9uY2VMaXN0ZW5lcnNbIGxpc3RlbmVyIF0gPSB0cnVlO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxucHJvdG8ub2ZmID0gZnVuY3Rpb24oIGV2ZW50TmFtZSwgbGlzdGVuZXIgKSB7XG4gIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHMgJiYgdGhpcy5fZXZlbnRzWyBldmVudE5hbWUgXTtcbiAgaWYgKCAhbGlzdGVuZXJzIHx8ICFsaXN0ZW5lcnMubGVuZ3RoICkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgaW5kZXggPSBsaXN0ZW5lcnMuaW5kZXhPZiggbGlzdGVuZXIgKTtcbiAgaWYgKCBpbmRleCAhPSAtMSApIHtcbiAgICBsaXN0ZW5lcnMuc3BsaWNlKCBpbmRleCwgMSApO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5wcm90by5lbWl0RXZlbnQgPSBmdW5jdGlvbiggZXZlbnROYW1lLCBhcmdzICkge1xuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzICYmIHRoaXMuX2V2ZW50c1sgZXZlbnROYW1lIF07XG4gIGlmICggIWxpc3RlbmVycyB8fCAhbGlzdGVuZXJzLmxlbmd0aCApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gY29weSBvdmVyIHRvIGF2b2lkIGludGVyZmVyZW5jZSBpZiAub2ZmKCkgaW4gbGlzdGVuZXJcbiAgbGlzdGVuZXJzID0gbGlzdGVuZXJzLnNsaWNlKDApO1xuICBhcmdzID0gYXJncyB8fCBbXTtcbiAgLy8gb25jZSBzdHVmZlxuICB2YXIgb25jZUxpc3RlbmVycyA9IHRoaXMuX29uY2VFdmVudHMgJiYgdGhpcy5fb25jZUV2ZW50c1sgZXZlbnROYW1lIF07XG5cbiAgZm9yICggdmFyIGk9MDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkrKyApIHtcbiAgICB2YXIgbGlzdGVuZXIgPSBsaXN0ZW5lcnNbaV1cbiAgICB2YXIgaXNPbmNlID0gb25jZUxpc3RlbmVycyAmJiBvbmNlTGlzdGVuZXJzWyBsaXN0ZW5lciBdO1xuICAgIGlmICggaXNPbmNlICkge1xuICAgICAgLy8gcmVtb3ZlIGxpc3RlbmVyXG4gICAgICAvLyByZW1vdmUgYmVmb3JlIHRyaWdnZXIgdG8gcHJldmVudCByZWN1cnNpb25cbiAgICAgIHRoaXMub2ZmKCBldmVudE5hbWUsIGxpc3RlbmVyICk7XG4gICAgICAvLyB1bnNldCBvbmNlIGZsYWdcbiAgICAgIGRlbGV0ZSBvbmNlTGlzdGVuZXJzWyBsaXN0ZW5lciBdO1xuICAgIH1cbiAgICAvLyB0cmlnZ2VyIGxpc3RlbmVyXG4gICAgbGlzdGVuZXIuYXBwbHkoIHRoaXMsIGFyZ3MgKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxucHJvdG8uYWxsT2ZmID0gZnVuY3Rpb24oKSB7XG4gIGRlbGV0ZSB0aGlzLl9ldmVudHM7XG4gIGRlbGV0ZSB0aGlzLl9vbmNlRXZlbnRzO1xufTtcblxucmV0dXJuIEV2RW1pdHRlcjtcblxufSkpO1xuIiwiLyoqXG4gKiBGaXp6eSBVSSB1dGlscyB2Mi4wLjdcbiAqIE1JVCBsaWNlbnNlXG4gKi9cblxuLypqc2hpbnQgYnJvd3NlcjogdHJ1ZSwgdW5kZWY6IHRydWUsIHVudXNlZDogdHJ1ZSwgc3RyaWN0OiB0cnVlICovXG5cbiggZnVuY3Rpb24oIHdpbmRvdywgZmFjdG9yeSApIHtcbiAgLy8gdW5pdmVyc2FsIG1vZHVsZSBkZWZpbml0aW9uXG4gIC8qanNoaW50IHN0cmljdDogZmFsc2UgKi8gLypnbG9iYWxzIGRlZmluZSwgbW9kdWxlLCByZXF1aXJlICovXG5cbiAgaWYgKCB0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCApIHtcbiAgICAvLyBBTURcbiAgICBkZWZpbmUoIFtcbiAgICAgICdkZXNhbmRyby1tYXRjaGVzLXNlbGVjdG9yL21hdGNoZXMtc2VsZWN0b3InXG4gICAgXSwgZnVuY3Rpb24oIG1hdGNoZXNTZWxlY3RvciApIHtcbiAgICAgIHJldHVybiBmYWN0b3J5KCB3aW5kb3csIG1hdGNoZXNTZWxlY3RvciApO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKCB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzICkge1xuICAgIC8vIENvbW1vbkpTXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KFxuICAgICAgd2luZG93LFxuICAgICAgcmVxdWlyZSgnZGVzYW5kcm8tbWF0Y2hlcy1zZWxlY3RvcicpXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBicm93c2VyIGdsb2JhbFxuICAgIHdpbmRvdy5maXp6eVVJVXRpbHMgPSBmYWN0b3J5KFxuICAgICAgd2luZG93LFxuICAgICAgd2luZG93Lm1hdGNoZXNTZWxlY3RvclxuICAgICk7XG4gIH1cblxufSggd2luZG93LCBmdW5jdGlvbiBmYWN0b3J5KCB3aW5kb3csIG1hdGNoZXNTZWxlY3RvciApIHtcblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSB7fTtcblxuLy8gLS0tLS0gZXh0ZW5kIC0tLS0tIC8vXG5cbi8vIGV4dGVuZHMgb2JqZWN0c1xudXRpbHMuZXh0ZW5kID0gZnVuY3Rpb24oIGEsIGIgKSB7XG4gIGZvciAoIHZhciBwcm9wIGluIGIgKSB7XG4gICAgYVsgcHJvcCBdID0gYlsgcHJvcCBdO1xuICB9XG4gI
118HJldHVybiBhO1xufTtcblxuLy8gLS0tLS0gbW9kdWxvIC0tLS0tIC8vXG5cbnV0aWxzLm1vZHVsbyA9IGZ1bmN0aW9uKCBudW0sIGRpdiApIHtcbiAgcmV0dXJuICggKCBudW0gJSBkaXYgKSArIGRpdiApICUgZGl2O1xufTtcblxuLy8gLS0tLS0gbWFrZUFycmF5IC0tLS0tIC8vXG5cbnZhciBhcnJheVNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuXG4vLyB0dXJuIGVsZW1lbnQgb3Igbm9kZUxpc3QgaW50byBhbiBhcnJheVxudXRpbHMubWFrZUFycmF5ID0gZnVuY3Rpb24oIG9iaiApIHtcbiAgaWYgKCBBcnJheS5pc0FycmF5KCBvYmogKSApIHtcbiAgICAvLyB1c2Ugb2JqZWN0IGlmIGFscmVhZHkgYW4gYXJyYXlcbiAgICByZXR1cm4gb2JqO1xuICB9XG4gIC8vIHJldHVybiBlbXB0eSBhcnJheSBpZiB1bmRlZmluZWQgb3IgbnVsbC4gIzZcbiAgaWYgKCBvYmogPT09IG51bGwgfHwgb2JqID09PSB1bmRlZmluZWQgKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgdmFyIGlzQXJyYXlMaWtlID0gdHlwZW9mIG9iaiA9PSAnb2JqZWN0JyAmJiB0eXBlb2Ygb2JqLmxlbmd0aCA9PSAnbnVtYmVyJztcbiAgaWYgKCBpc0FycmF5TGlrZSApIHtcbiAgICAvLyBjb252ZXJ0IG5vZGVMaXN0IHRvIGFycmF5XG4gICAgcmV0dXJuIGFycmF5U2xpY2UuY2FsbCggb2JqICk7XG4gIH1cblxuICAvLyBhcnJheSBvZiBzaW5nbGUgaW5kZXhcbiAgcmV0dXJuIFsgb2JqIF07XG59O1xuXG4vLyAtLS0tLSByZW1vdmVGcm9tIC0tLS0tIC8vXG5cbnV0aWxzLnJlbW92ZUZyb20gPSBmdW5jdGlvbiggYXJ5LCBvYmogKSB7XG4gIHZhciBpbmRleCA9IGFyeS5pbmRleE9mKCBvYmogKTtcbiAgaWYgKCBpbmRleCAhPSAtMSApIHtcbiAgICBhcnkuc3BsaWNlKCBpbmRleCwgMSApO1xuICB9XG59O1xuXG4vLyAtLS0tLSBnZXRQYXJlbnQgLS0tLS0gLy9cblxudXRpbHMuZ2V0UGFyZW50ID0gZnVuY3Rpb24oIGVsZW0sIHNlbGVjdG9yICkge1xuICB3aGlsZSAoIGVsZW0ucGFyZW50Tm9kZSAmJiBlbGVtICE9IGRvY3VtZW50LmJvZHkgKSB7XG4gICAgZWxlbSA9IGVsZW0ucGFyZW50Tm9kZTtcbiAgICBpZiAoIG1hdGNoZXNTZWxlY3RvciggZWxlbSwgc2VsZWN0b3IgKSApIHtcbiAgICAgIHJldHVybiBlbGVtO1xuICAgIH1cbiAgfVxufTtcblxuLy8gLS0tLS0gZ2V0UXVlcnlFbGVtZW50IC0tLS0tIC8vXG5cbi8vIHVzZSBlbGVtZW50IGFzIHNlbGVjdG9yIHN0cmluZ1xudXRpbHMuZ2V0UXVlcnlFbGVtZW50ID0gZnVuY3Rpb24oIGVsZW0gKSB7XG4gIGlmICggdHlwZW9mIGVsZW0gPT0gJ3N0cmluZycgKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIGVsZW0gKTtcbiAgfVxuICByZXR1cm4gZWxlbTtcbn07XG5cbi8vIC0tLS0tIGhhbmRsZUV2ZW50IC0tLS0tIC8vXG5cbi8vIGVuYWJsZSAub250eXBlIHRvIHRyaWdnZXIgZnJvbSAuYWRkRXZlbnRMaXN0ZW5lciggZWxlbSwgJ3R5cGUnIClcbnV0aWxzLmhhbmRsZUV2ZW50ID0gZnVuY3Rpb24oIGV2ZW50ICkge1xuICB2YXIgbWV0aG9kID0gJ29uJyArIGV2ZW50LnR5cGU7XG4gIGlmICggdGhpc1sgbWV0aG9kIF0gKSB7XG4gICAgdGhpc1sgbWV0aG9kIF0oIGV2ZW50ICk7XG4gIH1cbn07XG5cbi8vIC0tLS0tIGZpbHRlckZpbmRFbGVtZW50cyAtLS0tLSAvL1xuXG51dGlscy5maWx0ZXJGaW5kRWxlbWVudHMgPSBmdW5jdGlvbiggZWxlbXMsIHNlbGVjdG9yICkge1xuICAvLyBtYWtlIGFycmF5IG9mIGVsZW1zXG4gIGVsZW1zID0gdXRpbHMubWFrZUFycmF5KCBlbGVtcyApO1xuICB2YXIgZmZFbGVtcyA9IFtdO1xuXG4gIGVsZW1zLmZvckVhY2goIGZ1bmN0aW9uKCBlbGVtICkge1xuICAgIC8vIGNoZWNrIHRoYXQgZWxlbSBpcyBhbiBhY3R1YWwgZWxlbWVudFxuICAgIGlmICggISggZWxlbSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICkgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGFkZCBlbGVtIGlmIG5vIHNlbGVjdG9yXG4gICAgaWYgKCAhc2VsZWN0b3IgKSB7XG4gICAgICBmZkVsZW1zLnB1c2goIGVsZW0gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gZmlsdGVyICYgZmluZCBpdGVtcyBpZiB3ZSBoYXZlIGEgc2VsZWN0b3JcbiAgICAvLyBmaWx0ZXJcbiAgICBpZiAoIG1hdGNoZXNTZWxlY3RvciggZWxlbSwgc2VsZWN0b3IgKSApIHtcbiAgICAgIGZmRWxlbXMucHVzaCggZWxlbSApO1xuICAgIH1cbiAgICAvLyBmaW5kIGNoaWxkcmVuXG4gICAgdmFyIGNoaWxkRWxlbXMgPSBlbGVtLnF1ZXJ5U2VsZWN0b3JBbGwoIHNlbGVjdG9yICk7XG4gICAgLy8gY29uY2F0IGNoaWxkRWxlbXMgdG8gZmlsdGVyRm91bmQgYXJyYXlcbiAgICBmb3IgKCB2YXIgaT0wOyBpIDwgY2hpbGRFbGVtcy5sZW5ndGg7IGkrKyApIHtcbiAgICAgIGZmRWxlbXMucHVzaCggY2hpbGRFbGVtc1tpXSApO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGZmRWxlbXM7XG59O1xuXG4vLyAtLS0tLSBkZWJvdW5jZU1ldGhvZCAtLS0tLSAvL1xuXG51dGlscy5kZWJvdW5jZU1ldGhvZCA9IGZ1bmN0aW9uKCBfY2xhc3MsIG1ldGhvZE5hbWUsIHRocmVzaG9sZCApIHtcbiAgdGhyZXNob2xkID0gdGhyZXNob2xkIHx8IDEwMDtcbiAgLy8gb3JpZ2luYWwgbWV0aG9kXG4gIHZhciBtZXRob2QgPSBfY2xhc3MucHJvdG90eXBlWyBtZXRob2ROYW1lIF07XG4gIHZhciB0aW1lb3V0TmFtZSA9IG1ldGhvZE5hbWUgKyAnVGltZW91dCc7XG5cbiAgX2NsYXNzLnByb3RvdHlwZVsgbWV0aG9kTmFtZSBdID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHRpbWVvdXQgPSB0aGlzWyB0aW1lb3V0TmFtZSBdO1xuICAgIGNsZWFyVGltZW91dCggdGltZW91dCApO1xuXG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICB0aGlzWyB0aW1lb3V0TmFtZSBdID0gc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG4gICAgICBtZXRob2QuYXBwbHkoIF90aGlzLCBhcmdzICk7XG4gICAgICBkZWxldGUgX3RoaXNbIHRpbWVvdXROYW1lIF07XG4gICAgfSwgdGhyZXNob2xkICk7XG4gIH07XG59O1xuXG4vLyAtLS0tLSBkb2NSZWFkeSAtLS0tLSAvL1xuXG51dGlscy5kb2NSZWFkeSA9IGZ1bmN0aW9uKCBjYWxsYmFjayApIHtcbiAgdmFyIHJlYWR5U3RhdGUgPSBkb2N1bWVudC5yZWFkeVN0YXRlO1xuICBpZiAoIHJlYWR5U3RhdGUgPT0gJ2NvbXBsZXRlJyB8fCByZWFkeVN0YXRlID09ICdpbnRlcmFjdGl2ZScgKSB7XG4gICAgLy8gZG8gYXN5bmMgdG8gYWxsb3cgZm9yIG90aGVyIHNjcmlwdHMgdG8gcnVuLiBtZXRhZml6enkvZmxpY2tpdHkjNDQxXG4gICAgc2V0VGltZW91dCggY2FsbGJhY2sgKTtcbiAgfSBlbHNlIHtcbiAgICBkb2
118N1bWVudC5hZGRFdmVudExpc3RlbmVyKCAnRE9NQ29udGVudExvYWRlZCcsIGNhbGxiYWNrICk7XG4gIH1cbn07XG5cbi8vIC0tLS0tIGh0bWxJbml0IC0tLS0tIC8vXG5cbi8vIGh0dHA6Ly9qYW1lc3JvYmVydHMubmFtZS9ibG9nLzIwMTAvMDIvMjIvc3RyaW5nLWZ1bmN0aW9ucy1mb3ItamF2YXNjcmlwdC10cmltLXRvLWNhbWVsLWNhc2UtdG8tZGFzaGVkLWFuZC10by11bmRlcnNjb3JlL1xudXRpbHMudG9EYXNoZWQgPSBmdW5jdGlvbiggc3RyICkge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoIC8oLikoW0EtWl0pL2csIGZ1bmN0aW9uKCBtYXRjaCwgJDEsICQyICkge1xuICAgIHJldHVybiAkMSArICctJyArICQyO1xuICB9KS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIGNvbnNvbGUgPSB3aW5kb3cuY29uc29sZTtcbi8qKlxuICogYWxsb3cgdXNlciB0byBpbml0aWFsaXplIGNsYXNzZXMgdmlhIFtkYXRhLW5hbWVzcGFjZV0gb3IgLmpzLW5hbWVzcGFjZSBjbGFzc1xuICogaHRtbEluaXQoIFdpZGdldCwgJ3dpZGdldE5hbWUnIClcbiAqIG9wdGlvbnMgYXJlIHBhcnNlZCBmcm9tIGRhdGEtbmFtZXNwYWNlLW9wdGlvbnNcbiAqL1xudXRpbHMuaHRtbEluaXQgPSBmdW5jdGlvbiggV2lkZ2V0Q2xhc3MsIG5hbWVzcGFjZSApIHtcbiAgdXRpbHMuZG9jUmVhZHkoIGZ1bmN0aW9uKCkge1xuICAgIHZhciBkYXNoZWROYW1lc3BhY2UgPSB1dGlscy50b0Rhc2hlZCggbmFtZXNwYWNlICk7XG4gICAgdmFyIGRhdGFBdHRyID0gJ2RhdGEtJyArIGRhc2hlZE5hbWVzcGFjZTtcbiAgICB2YXIgZGF0YUF0dHJFbGVtcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoICdbJyArIGRhdGFBdHRyICsgJ10nICk7XG4gICAgdmFyIGpzRGFzaEVsZW1zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCggJy5qcy0nICsgZGFzaGVkTmFtZXNwYWNlICk7XG4gICAgdmFyIGVsZW1zID0gdXRpbHMubWFrZUFycmF5KCBkYXRhQXR0ckVsZW1zIClcbiAgICAgIC5jb25jYXQoIHV0aWxzLm1ha2VBcnJheSgganNEYXNoRWxlbXMgKSApO1xuICAgIHZhciBkYXRhT3B0aW9uc0F0dHIgPSBkYXRhQXR0ciArICctb3B0aW9ucyc7XG4gICAgdmFyIGpRdWVyeSA9IHdpbmRvdy5qUXVlcnk7XG5cbiAgICBlbGVtcy5mb3JFYWNoKCBmdW5jdGlvbiggZWxlbSApIHtcbiAgICAgIHZhciBhdHRyID0gZWxlbS5nZXRBdHRyaWJ1dGUoIGRhdGFBdHRyICkgfHxcbiAgICAgICAgZWxlbS5nZXRBdHRyaWJ1dGUoIGRhdGFPcHRpb25zQXR0ciApO1xuICAgICAgdmFyIG9wdGlvbnM7XG4gICAgICB0cnkge1xuICAgICAgICBvcHRpb25zID0gYXR0ciAmJiBKU09OLnBhcnNlKCBhdHRyICk7XG4gICAgICB9IGNhdGNoICggZXJyb3IgKSB7XG4gICAgICAgIC8vIGxvZyBlcnJvciwgZG8gbm90IGluaXRpYWxpemVcbiAgICAgICAgaWYgKCBjb25zb2xlICkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoICdFcnJvciBwYXJzaW5nICcgKyBkYXRhQXR0ciArICcgb24gJyArIGVsZW0uY2xhc3NOYW1lICtcbiAgICAgICAgICAnOiAnICsgZXJyb3IgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBpbml0aWFsaXplXG4gICAgICB2Y
118XIgaW5zdGFuY2UgPSBuZXcgV2lkZ2V0Q2xhc3MoIGVsZW0sIG9wdGlvbnMgKTtcbiAgICAgIC8vIG1ha2UgYXZhaWxhYmxlIHZpYSAkKCkuZGF0YSgnbmFtZXNwYWNlJylcbiAgICAgIGlmICggalF1ZXJ5ICkge1xuICAgICAgICBqUXVlcnkuZGF0YSggZWxlbSwgbmFtZXNwYWNlLCBpbnN0YW5jZSApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIH0pO1xufTtcblxuLy8gLS0tLS0gIC0tLS0tIC8vXG5cbnJldHVybiB1dGlscztcblxufSkpO1xuIiwiLyohXG4gKiBnZXRTaXplIHYyLjAuM1xuICogbWVhc3VyZSBzaXplIG9mIGVsZW1lbnRzXG4gKiBNSVQgbGljZW5zZVxuICovXG5cbi8qIGpzaGludCBicm93c2VyOiB0cnVlLCBzdHJpY3Q6IHRydWUsIHVuZGVmOiB0cnVlLCB1bnVzZWQ6IHRydWUgKi9cbi8qIGdsb2JhbHMgY29uc29sZTogZmFsc2UgKi9cblxuKCBmdW5jdGlvbiggd2luZG93LCBmYWN0b3J5ICkge1xuICAvKiBqc2hpbnQgc3RyaWN0OiBmYWxzZSAqLyAvKiBnbG9iYWxzIGRlZmluZSwgbW9kdWxlICovXG4gIGlmICggdHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgKSB7XG4gICAgLy8gQU1EXG4gICAgZGVmaW5lKCBmYWN0b3J5ICk7XG4gIH0gZWxzZSBpZiAoIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMgKSB7XG4gICAgLy8gQ29tbW9uSlNcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBicm93c2VyIGdsb2JhbFxuICAgIHdpbmRvdy5nZXRTaXplID0gZmFjdG9yeSgpO1xuICB9XG5cbn0pKCB3aW5kb3csIGZ1bmN0aW9uIGZ
118hY3RvcnkoKSB7XG4ndXNlIHN0cmljdCc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGhlbHBlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLy9cblxuLy8gZ2V0IGEgbnVtYmVyIGZyb20gYSBzdHJpbmcsIG5vdCBhIHBlcmNlbnRhZ2VcbmZ1bmN0aW9uIGdldFN0eWxlU2l6ZSggdmFsdWUgKSB7XG4gIHZhciBudW0gPSBwYXJzZUZsb2F0KCB2YWx1ZSApO1xuICAvLyBub3QgYSBwZXJjZW50IGxpa2UgJzEwMCUnLCBhbmQgYSBudW1iZXJcbiAgdmFyIGlzVmFsaWQgPSB2YWx1ZS5pbmRleE9mKCclJykgPT0gLTEgJiYgIWlzTmFOKCBudW0gKTtcbiAgcmV0dXJuIGlzVmFsaWQgJiYgbnVtO1xufVxuXG5mdW5jdGlvbiBub29wKCkge31cblxudmFyIGxvZ0Vycm9yID0gdHlwZW9mIGNvbnNvbGUgPT0gJ3VuZGVmaW5lZCcgPyBub29wIDpcbiAgZnVuY3Rpb24oIG1lc3NhZ2UgKSB7XG4gICAgY29uc29sZS5lcnJvciggbWVzc2FnZSApO1xuICB9O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtZWFzdXJlbWVudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLy9cblxudmFyIG1lYXN1cmVtZW50cyA9IFtcbiAgJ3BhZGRpbmdMZWZ0JyxcbiAgJ3BhZGRpbmdSaWdodCcsXG4gICdwYWRkaW5nVG9wJyxcbiAgJ3BhZGRpbmdCb3R0b20nLFxuICAnbWFyZ2luTGVmdCcsXG4gICdtYXJnaW5SaWdodCcsXG4gICdtYXJnaW5Ub3AnLFxuICAnbWFyZ2luQm90dG9tJyxcbiAgJ2JvcmRlckxlZnRXaWR0aCcsXG4gICdib3JkZXJSaWdodFdpZHRoJyxcbiAgJ2JvcmRlclRvcFdpZHRoJyxcbiAgJ2JvcmRlckJvdHRvbVdpZHRoJ1xuXTtcblxudmFyIG1lYXN1cmVtZW50c0xlbmd0aCA9IG1lYXN1cmVtZW50cy5sZW5ndGg7XG5cbmZ1bmN0aW9uIGdldFplcm9TaXplKCkge1xuICB2YXIgc2l6ZSA9IHtcbiAgICB3aWR0aDogMCxcbiAgICBoZWlnaHQ6IDAsXG4gICAgaW5uZXJXaWR0aDogMCxcbiAgICBpbm5lckhlaWdodDogMCxcbiAgICBvdXRlcldpZHRoOiAwLFxuICAgIG91dGVySGVpZ2h0OiAwXG4gIH07XG4gIGZvciAoIHZhciBpPTA7IGkgPCBtZWFzdXJlbWVudHNMZW5ndGg7IGkrKyApIHtcbiAgICB2YXIgbWVhc3VyZW1lbnQgPSBtZWFzdXJlbWVudHNbaV07XG4gICAgc2l6ZVsgbWVhc3VyZW1lbnQgXSA9IDA7XG4gIH1cbiAgcmV0dXJuIHNpemU7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGdldFN0eWxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXG5cbi8qKlxuICogZ2V0U3R5bGUsIGdldCBzdHlsZSBvZiBlbGVtZW50LCBjaGVjayBmb3IgRmlyZWZveCBidWdcbiAqIGh0dHBzOi8vYnVnemlsbGEubW96
118aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTU0ODM5N1xuICovXG5mdW5jdGlvbiBnZXRTdHlsZSggZWxlbSApIHtcbiAgdmFyIHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZSggZWxlbSApO1xuICBpZiAoICFzdHlsZSApIHtcbiAgICBsb2dFcnJvciggJ1N0eWxlIHJldHVybmVkICcgKyBzdHlsZSArXG4gICAgICAnLiBBcmUgeW91IHJ1bm5pbmcgdGhpcyBjb2RlIGluIGEgaGlkZGVuIGlmcmFtZSBvbiBGaXJlZm94PyAnICtcbiAgICAgICdTZWUgaHR0cHM6Ly9iaXQubHkvZ2V0c2l6ZWJ1ZzEnICk7XG4gIH1cbiAgcmV0dXJuIHN0eWxlO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzZXR1cCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG52YXIgaXNTZXR1cCA9IGZhbHNlO1xuXG52YXIgaXNCb3hTaXplT3V0ZXI7XG5cbi8qKlxuICogc2V0dXBcbiAqIGNoZWNrIGlzQm94U2l6ZXJPdXRlclxuICogZG8gb24gZmlyc3QgZ2V0U2l6ZSgpIHJhdGhlciB0aGFuIG9uIHBhZ2UgbG9hZCBmb3IgRmlyZWZveCBidWdcbiAqL1xuZnVuY3Rpb24gc2V0dXAoKSB7XG4gIC8vIHNldHVwIG9uY2VcbiAgaWYgKCBpc1NldHVwICkge1xuICAgIHJldHVybjtcbiAgfVxuICBpc1NldHVwID0gdHJ1ZTtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBib3ggc2l6aW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXG5cbiAgLyoqXG4gICAqIENocm9tZSAmIFNhZmFyaSBtZWFzdXJlIHRoZSBvdXRlci13aWR0aCBvbiBzdHlsZS53aWR0aCBvbiBib3JkZXItYm94IGVsZW1zXG4gICAqIElFMTEgJiBGaXJlZm94PDI5IG1lYXN1cmVzIHRoZSBpbm5lci13aWR0aFxuICAgKi9cbiAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBkaXYuc3R5bGUud2lkdGggPSAnMjAwcHgnO1xuICBkaXYuc3R5bGUucGFkZGluZyA9ICcxcHggMnB4IDNweCA0cHgnO1xuICBkaXYuc3R5bGUuYm9yZGVyU3R5bGUgPSAnc29saWQnO1xuICBkaXYuc3R5bGUuYm9yZGVyV2lkdGggPSAnMXB4IDJweCAzcHggNHB4JztcbiAgZGl2LnN0eWxlLmJveFNpemluZyA9ICdib3JkZXItYm94JztcblxuICB2YXIgYm9keSA9IGRvY3VtZW50LmJvZHkgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICBib2R5LmFwcGVuZENoaWxkKCBkaXYgKTtcbiAgdmFyIHN0eWxlID0gZ2V0U3R5bGUoIGRpdiApO1xuICAvLyByb3VuZCB2YWx1ZSBmb3IgYnJvd3NlciB6b29tLiBkZXNhbmRyby9tYXNvbnJ5IzkyOFxuICBpc0JveFNpemVPdXRlciA9IE1hdGgucm91bmQoIGdldFN0eWxlU2l6ZSggc3R5bGUud2lkdGggKSApID09IDIwMDtcbiAgZ2V0U2l6ZS5pc0JveFNpemVPdXRlciA9IGlzQm94U2l6ZU91dGVyO1xuXG4gIGJvZHkucmVtb3ZlQ2hpbGQoIGRpdiApO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBnZXRTaXplIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXG5cbmZ1bmN0aW9uIGdldFNpemUoIGVsZW0gKSB7XG4gIHNldHVwKCk7XG5cbiAgLy8gdXNlIHF1ZXJ5U2VsZXRvciBpZiBlbGVtIGlzIHN0cmluZ1xuICBpZiAoIHR5cGVvZiBlbGVtID09ICdzdHJpbmcnICkge1xuICAgIGVsZW0gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCBlbGVtICk7XG4gIH1cblxuICAvLyBkbyBub3QgcHJvY2VlZCBvbiBub24tb2JqZWN0c1xuICBpZiAoICFlbGVtIHx8IHR5cGVvZiBlbGVtICE9ICdvYmplY3QnIHx8ICFlbGVtLm5vZGVUeXBlICkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBzdHlsZSA9IGdldFN0eWxlKCBlbGVtICk7XG5cbiAgLy8gaWYgaGlkZGVuLCBldmVyeXRoaW5nIGlzIDBcbiAgaWYgKCBzdHlsZS5kaXNwbGF5ID09ICdub25lJyApIHtcbiAgICByZXR1cm4gZ2V0WmVyb1NpemUoKTtcbiAgfVxuXG4gIHZhciBzaXplID0ge307XG4gIHNpemUud2lkdGggPSBlbGVtLm9mZnNldFdpZHRoO1xuICBzaXplLmhlaWdodCA9IGVsZW0ub2Zmc2V0SGVpZ2h0O1xuXG4gIHZhciBpc0JvcmRlckJveCA9IHNpemUuaXNCb3JkZXJCb3ggPSBzdHlsZS5ib3hTaXppbmcgPT0gJ2JvcmRlci1ib3gnO1xuXG4gIC8vIGdldCBhbGwgbWVhc3VyZW1lbnRzXG4gIGZvciAoIHZhciBpPTA7IGkgPCBtZWFzdXJlbWVudHNMZW5ndGg7IGkrKyApIHtcbiAgICB2YXIgbWVhc3VyZW1lbnQgPSBtZWFzdXJlbWVudHNbaV07XG4gICAgdmFyIHZhbHVlID0gc3R5bGVbIG1lYXN1cmVtZW50IF07XG4gICAgdmFyIG51bSA9IHBhcnNlRmxvYXQoIHZhbHVlICk7XG4gICAgLy8gYW55ICdhdXRvJywgJ21lZGl1bScgdmFsdWUgd2lsbCBiZSAwXG4gICAgc2l6ZVsgbWVhc3VyZW1lbnQgXSA9ICFpc05hTiggbnVtICkgPyBudW0gOiAwO1xuICB9XG5cbiAgdmFyIHBhZGRpbmdXaWR0aCA9IHNpemUucGFkZGluZ0xlZnQgKyBzaXplLnBhZGRpbmdSaWdodDtcbiAgdmFyIHBhZGRpbmdIZWlnaHQgPSBzaXplLnBhZGRpbmdUb3AgKyBzaXplLnBhZGRpbmdCb3R0b207XG4gIHZhciBtYXJnaW5XaWR0aCA9IHNpemUubWFyZ2luTGVmdCArIHNpemUubWFyZ2luUmlnaHQ7XG4gIHZhciBtYXJnaW5IZWlnaHQgPSBzaXplLm1hcmdpblRvcCArIHNpemUubWFyZ2luQm90dG9tO1xuICB2YXIgYm9yZGVyV2lkdGggPSBzaXplLmJvcmRlckxlZnRXaWR0aCArIHNpemUuYm9yZGVyUmlnaHRXaWR0aDtcbiAgdmFyIGJvcmRlckhlaWdodCA9IHNpemUuYm9yZGVyVG9wV2lkdGggKyBzaXplLmJvcmRlckJvdHRvbVdpZHRoO1xuXG4gIHZhciBpc0JvcmRlckJveFNpemVPdXRlciA9IGlzQm9yZGVyQm94ICYmIGlzQm94U2l6ZU91dGVyO1xuXG4gIC8vIG92ZXJ3cml0ZSB3aWR0aCBhbmQgaGVpZ2h0IGlmIHdlIGNhbiBnZXQgaXQgZnJvbSBzdHlsZVxuICB2YXIgc3R5bGVXaWR0aCA9IGdldFN0eWxlU2l6ZSggc3R5bGUud2lkdGggKTtcbiAgaWYgKCBzdHlsZVdpZHRoICE9PSBmYWxzZSApIHtcbiAgICBzaXplLndpZHRoID0gc3R5bGVXaWR0aCArXG4gICAgICAvLyBhZGQgcGFkZGluZyBhbmQgYm9yZGVyIHVubGVzcyBpdCdzIGFscmVhZHkgaW5jbHVkaW5nIGl0XG4gICAgICAoIGlzQm9yZGVyQm94U2l6ZU91dGVyID8gMCA6IHBhZGRpbmdXaWR0aCArIGJvcmRlcldpZHRoICk7XG4gIH1cblxuICB2Y
118XIgc3R5bGVIZWlnaHQgPSBnZXRTdHlsZVNpemUoIHN0eWxlLmhlaWdodCApO1xuICBpZiAoIHN0eWxlSGVpZ2h0ICE9PSBmYWxzZSApIHtcbiAgICBzaXplLmhlaWdodCA9IHN0eWxlSGVpZ2h0ICtcbiAgICAgIC8vIGFkZCBwYWRkaW5nIGFuZCBib3JkZXIgdW5sZXNzIGl0J3MgYWxyZWFkeSBpbmNsdWRpbmcgaXRcbiAgICAgICggaXNCb3JkZXJCb3hTaXplT3V0ZXIgPyAwIDogcGFkZGluZ0hlaWdodCArIGJvcmRlckhlaWdodCApO1xuICB9XG5cbiAgc2l6ZS5pbm5lcldpZHRoID0gc2l6ZS53aWR0aCAtICggcGFkZGluZ1dpZHRoICsgYm9yZGVyV2lkdGggKTtcbiAgc2l6ZS5pbm5lckhlaWdodCA9IHNpemUuaGVpZ2h0IC0gKCBwYWRkaW5nSGVpZ2h0ICsgYm9yZGVySGVpZ2h0ICk7XG5cbiAgc2l6ZS5vdXRlcldpZHRoID0gc2l6ZS53aWR0aCArIG1hcmdpbldpZHRoO1xuICBzaXplLm91dGVySGVpZ2h0ID0gc2l6ZS5oZWlnaHQgKyBtYXJnaW5IZWlnaHQ7XG5cbiAgcmV0dXJuIHNpemU7XG59XG5cbnJldHVybiBnZXRTaXplO1xuXG59KTtcbiIsIi8qIVxuICogaW1hZ2VzTG9hZGVkIHY0LjEuNFxuICogSmF2YVNjcmlwdCBpcyBhbGwgbGlrZSBcIllvdSBpbWFnZXMgYXJlIGRvbmUgeWV0IG9yIHdoYXQ/XCJcbiAqIE1JVCBMaWNlbnNlXG4gKi9cblxuKCBmdW5jdGlvbiggd2luZG93LCBmYWN0b3J5ICkgeyAndXNlIHN0cmljdCc7XG4gIC8vIHVuaXZlcnNhbCBtb2R1bGUgZGVmaW5pdGlvblxuXG4gIC8qZ2xvYmFsIGRlZmluZTogZmFsc2UsIG1vZHVsZTogZmFsc2UsIHJlcXVpcmU6IGZhbHNlICovXG5cbiAgaWYgKCB0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCApIHtcbiAgICAvLyBBTURcbiAgICBkZWZpbmUoIFtcbiAgICAgICdldi1lbWl0dGVyL2V2LWVtaXR0ZXInXG4gICAgXSwgZnVuY3Rpb24oIEV2RW1pdHRlciApIHtcbiAgICAgIHJldHVybiBmYWN0b3J5KCB3aW5kb3csIEV2RW1pdHRlciApO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKCB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzICkge1xuICAgIC8vIENvbW1vbkpTXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KFxuICAgICAgd2luZG93LFxuICAgICAgcmVxdWlyZSgnZXYtZW1pdHRlcicpXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBicm93c2VyIGdsb2JhbFxuICAgIHdpbmRvdy5pbWFnZXNMb2FkZWQgPSBmYWN0b3J5KFxuICAgICAgd2luZG93LFxuICAgICAgd2luZG93LkV2RW1pdHRlclxuICAgICk7XG4gIH1cblxufSkoIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdGhpcyxcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIGZhY3RvcnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLy9cblxuZnVuY3Rpb24gZmFjdG9yeSggd2luZG93LCBFdkVtaXR0ZXIgKSB7XG5cbid1c2Ugc3RyaWN0JztcblxudmFyICQgPSB3aW5kb3cualF1ZXJ5O1xudmFyIGNvbnNvbGUgPSB3aW5kb3cuY29uc29sZTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaGVscGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG4vLyBleHRlbmQgb2JqZWN0c1xuZnVuY3Rpb24gZXh0ZW5kKCBhLCBiICkge1xuICBmb3IgKCB2YXIgcHJvcCBpbiBiICkge1xuICAgIGFbIHByb3AgXSA9IGJbIHByb3AgXTtcbiAgfVxuICByZXR1cm4gYTtcbn1cblxudmFyIGFycmF5U2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG5cbi8vIHR1cm4gZWxlbWVudCBvciBub2RlTGlzdCBpbnRvIGFuIGFycmF5XG5mdW5jdGlvbiBtYWtlQXJyYXkoIG9iaiApIHtcbiAgaWYgKCBBcnJheS5pc0FycmF5KCBvYmogKSApIHtcbiAgICAvLyB1c2Ugb2JqZWN0IGlmIGFscmVhZHkgYW4gYXJyYXlcbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgdmFyIGlzQXJyYXlMaWtlID0gdHlwZW9mIG9iaiA9PSAnb2JqZWN0JyAmJiB0eXBlb2Ygb2JqLmxlbmd0aCA9PSAnbnVtYmVyJztcbiAgaWYgKCBpc0FycmF
1185TGlrZSApIHtcbiAgICAvLyBjb252ZXJ0IG5vZGVMaXN0IHRvIGFycmF5XG4gICAgcmV0dXJuIGFycmF5U2xpY2UuY2FsbCggb2JqICk7XG4gIH1cblxuICAvLyBhcnJheSBvZiBzaW5nbGUgaW5kZXhcbiAgcmV0dXJuIFsgb2JqIF07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGltYWdlc0xvYWRlZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG4vKipcbiAqIEBwYXJhbSB7QXJyYXksIEVsZW1lbnQsIE5vZGVMaXN0LCBTdHJpbmd9IGVsZW1cbiAqIEBwYXJhbSB7T2JqZWN0IG9yIEZ1bmN0aW9ufSBvcHRpb25zIC0gaWYgZnVuY3Rpb24sIHVzZSBhcyBjYWxsYmFja1xuICogQHBhcmFtIHtGdW5jdGlvbn0gb25BbHdheXMgLSBjYWxsYmFjayBmdW5jdGlvblxuICovXG5mdW5jdGlvbiBJbWFnZXNMb2FkZWQoIGVsZW0sIG9wdGlvbnMsIG9uQWx3YXlzICkge1xuICAvLyBjb2VyY2UgSW1hZ2VzTG9hZGVkKCkgd2l0aG91dCBuZXcsIHRvIGJlIG5ldyBJbWFnZXNMb2FkZWQoKVxuICBpZiAoICEoIHRoaXMgaW5zdGFuY2VvZiBJbWFnZXNMb2FkZWQgKSApIHtcbiAgICByZXR1cm4gbmV3IEltYWdlc0xvYWRlZCggZWxlbSwgb3B0aW9ucywgb25BbHdheXMgKTtcbiAgfVxuICAvLyB1c2UgZWxlbSBhcyBzZWxlY3RvciBzdHJpbmdcbiAgdmFyIHF1ZXJ5RWxlbSA9IGVsZW07XG4gIGlmICggdHlwZW9mIGVsZW0gPT0gJ3N0cmluZycgKSB7XG4gICAgcXVlcnlFbGVtID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCggZWxlbSApO1xuICB9XG4gIC8vIGJhaWwgaWYgYmFkIGVsZW1lbnRcbiAgaWYgKCAhcXVlcnlFbGVtICkge1xuICAgIGNvbnNvbGUuZXJyb3IoICdCYWQgZWxlbWVudCBmb3IgaW1hZ2VzTG9hZGVkICcgKyAoIHF1ZXJ5RWxlbSB8fCBlbGVtICkgKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLmVsZW1lbnRzID0gbWFrZUFycmF5KCBxdWVyeUVsZW0gKTtcbiAgdGhpcy5vcHRpb25zID0gZXh0ZW5kKCB7fSwgdGhpcy5vcHRpb25zICk7XG4gIC8vIHNoaWZ0IGFyZ3VtZW50cyBpZiBubyBvcHRpb25zIHNldFxuICBpZiAoIHR5cGVvZiBvcHRpb25zID09ICdmdW5jdGlvbicgKSB7XG4gICAgb25BbHdheXMgPSBvcHRpb25zO1xuICB9IGVsc2Uge1xuICAgIGV4dGVuZCggdGhpcy5vcHRpb25zLCBvcHRpb25zICk7XG4gIH1cblxuICBpZiAoIG9uQWx3YXlzICkge1xuICAgIHRoaXMub24oICdhbHdheXMnLCBvbkFsd2F5cyApO1xuICB9XG5cbiAgdGhpcy5nZXRJbWFnZXMoKTtcblxuICBpZiAoICQgKSB7XG4gICAgLy8gYWRkIGpRdWVyeSBEZWZlcnJlZCBvYmplY3RcbiAgICB0aGlzLmpxRGVmZXJyZWQgPSBuZXcgJC5EZWZlcnJlZCgpO1xuICB9XG5cbiAgLy8gSEFDSyBjaGVjayBhc3luYyB0byBhbGxvdyB0aW1lIHRvIGJpbmQgbGlzdGVuZXJzXG4gIHNldFRpbWVvdXQoIHRoaXMuY2hlY2suYmluZCggdGhpcyApICk7XG59XG5cbkltYWdlc0xvYWRlZC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBFdkVtaXR0ZXIucHJvdG90eXBlICk7XG5cbkltYWdlc0xvYWRlZC5wcm90b3R5cGUub3B0aW9ucyA9IHt9O1xuXG5JbWFnZXNMb2FkZWQucHJvdG90eXBlLmdldEltYWdlcyA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmltYWdlcyA9IFtdO1xuXG4gIC8vIGZpbHRlciAmIGZpbmQgaXRlbXMgaWYgd2UgaGF2ZSBhbiBpdGVtIHNlbGVjdG9yXG4gIHRoaXMuZWxlbWVudHMuZm9yRWFjaCggdGhpcy5hZGRFbGVtZW50SW1hZ2VzLCB0aGlzICk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7Tm9kZX0gZWxlbWVudFxuICovXG5JbWFnZXNMb2FkZWQucHJvdG90eXBlLmFkZEVsZW1lbnRJbWFnZXMgPSBmdW5jdGlvbiggZWxlbSApIHtcbiAgLy8gZmlsdGVyIHNpYmxpbmdzXG4gIGlmICggZWxlbS5ub2RlTmFtZSA9PSAnSU1HJyApIHtcbiAgICB0aGlzLmFkZEltYWdlKCBlbGVtICk7XG4gIH1cbiAgLy8gZ2V0IGJhY2tncm91bmQgaW1hZ2Ugb24gZWxlbWVudFxuICBpZiAoIHRoaXMub3B0aW9ucy5iYWNrZ3JvdW5kID09PSB0cnVlICkge1xuICAgIHRoaXMuYWRkRWxlbWVudEJhY2tncm91bmRJbWFnZXMoIGVsZW0gKTtcbiAgfVxuXG4gIC8vIGZpbmQgY2hpbGRyZW5cbiAgLy8gbm8gbm9uLWVsZW1lbnQgbm9kZXMsICMxNDNcbiAgdmFyIG5vZGVUeXBlID0gZWxlbS5ub2RlVHlwZTtcbiAgaWYgKCAhbm9kZVR5cGUgfHwgIWVsZW1lbnROb2RlVHlwZXNbIG5vZGVUeXBlIF0gKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBjaGlsZEltZ3MgPSBlbGVtLnF1ZXJ5U2VsZWN0b3JBbGwoJ2ltZycpO1xuICAvLyBjb25jYXQgY2hpbGRFbGVtcyB0byBmaWx0ZXJGb3VuZCBhcnJheVxuICBmb3IgKCB2YXIgaT0wOyBpIDwgY2hpbGRJbWdzLmxlbmd0aDsgaSsrICkge1xuICAgIHZhciBpbWcgPSBjaGlsZEltZ3NbaV07XG4gICAgdGhpcy5hZGRJbWFnZSggaW1nICk7XG4gIH1cblxuICAvLyBnZXQgY2hpbGQgYmFja2dyb3VuZCBpbWFnZXNcbiAgaWYgKCB0eXBlb2YgdGhpcy5vcHRpb25zLmJhY2tncm91bmQgPT0gJ3N0cmluZycgKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gZWxlbS5xdWVyeVNlbGVjdG9yQWxsKCB0aGlzLm9wdGlvbnMuYmFja2dyb3VuZCApO1xuICAgIGZvciAoIGk9MDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrICkge1xuICAgICAgdmFyIGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgICB0aGlzLmFkZEVsZW1lbnRCYWNrZ3JvdW5kSW1hZ2VzKCBjaGlsZCApO1xuICAgIH1cbiAgfVxufTtcblxudmFyIGVsZW1lbnROb2RlVHlwZXMgPSB7XG4gIDE6IHRydWUsXG4gIDk6IHRydWUsXG4gIDExOiB0cnVlXG59O1xuXG5JbWFnZXNMb2FkZWQucHJvdG90eXBlLmFkZEVsZW1lbnRCYWNrZ3JvdW5kSW1hZ2VzID0gZnVuY3Rpb24oIGVsZW0gKSB7XG4gIHZhciBzdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoIGVsZW0gKTtcbiAgaWYgKCAhc3R5bGUgKSB7XG4gICAgLy8gRmlyZWZveCByZXR1cm5zIG51bGwgaWYgaW4gYSBoaWRkZW4gaWZyYW1lIGh0dHBzOi8vYnVnemlsLmxhLzU0ODM5N1xuICAgIHJldHVybjtcbiAgfVxuICAvLyBnZXQgdXJsIGluc2lkZSB1cmwoXCIuLi5cIilcbiAgdmFyIHJlVVJMID0gL3VybFxcKChbJ1wiXSk/KC4qPylcXDFcXCkvZ2k7XG4gIHZhciBtYXRjaGVzID0gcmVVUkwuZXhlYyggc3R5bGUuYmFja2dyb3VuZEltYWdlICk7XG4gIHdoaWxlICggbWF0Y2hlcyAhPT0gbnVsbCApIHtcbiAgICB2YXIgdXJsID0gbWF0Y2hlcyAmJiBtYXRjaGVzWzJdO1xuICAgIGlmICggdXJsICkge1xuICAgICAgdGhpcy5hZGRCYWNrZ3JvdW5kKCB1cmwsIGVsZW0gKTtcbiAgICB9XG4gICAgbWF0Y2hlcyA9IHJlVVJMLmV4ZWMoIHN0eWxlLmJhY2tncm91bmRJbWFnZSApO1xuICB9XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7SW1hZ2V9IGltZ1xuICovXG5JbWFnZXNMb2FkZWQucHJvdG90eXBlLmFkZEltYWdlID0gZnVuY3Rpb24oIGltZyApIHtcbiAgdmFyIGxvYWRpbmdJbWFnZSA9IG5ldyBMb2FkaW5nSW1hZ2UoIGltZyApO1xuICB0aGlzLmltYWdlcy5wdXNoKCBsb2FkaW5nSW1hZ2UgKTtcbn07XG5cbkltYWdlc0xvYWRlZC5wcm90b3R5cGUuYWRkQmFja2dyb3VuZCA9IGZ1bmN0aW9uKCB1cmwsIGVsZW0gKSB7XG4gIHZhciBiYWNrZ3JvdW5kID0gbmV3IEJhY2tncm91bmQoIHVybCwgZWxlbSApO1xuICB0aGlzLmltYWdlcy5wdXNoKCBiYWNrZ3JvdW5kICk7XG59O1xuXG5JbWFnZXNMb2FkZWQucHJvdG90eXBlLmNoZWNrID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG4gIHRoaXMucHJvZ3Jlc3NlZENvdW50ID0gMDtcbiAgdGhpcy5oYXNBbnlCcm9rZW4gPSBmYWxzZTtcbiAgLy8gY29tcGxldGUgaWYgbm8gaW1hZ2VzXG4gIGlmICggIXRoaXMuaW1hZ2VzLmxlbmd0aCApIHtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZnVuY3Rpb24gb25Qcm9ncmVzcyggaW1hZ2UsIGVsZW0sIG1lc3NhZ2UgKSB7XG4gICAgLy8gSEFDSyAtIENocm9tZSB0cmlnZ2VycyBldmVudCBiZWZvcmUgb2JqZWN0IHByb3BlcnRpZXMgaGF2ZSBjaGFuZ2VkLiAjODNcbiAgICBzZXRUaW
1181lb3V0KCBmdW5jdGlvbigpIHtcbiAgICAgIF90aGlzLnByb2dyZXNzKCBpbWFnZSwgZWxlbSwgbWVzc2FnZSApO1xuICAgIH0pO1xuICB9XG5cbiAgdGhpcy5pbWFnZXMuZm9yRWFjaCggZnVuY3Rpb24oIGxvYWRpbmdJbWFnZSApIHtcbiAgICBsb2FkaW5nSW1hZ2Uub25jZSggJ3Byb2dyZXNzJywgb25Qcm9ncmVzcyApO1xuICAgIGxvYWRpbmdJbWFnZS5jaGVjaygpO1xuICB9KTtcbn07XG5cbkltYWdlc0xvYWRlZC5wcm90b3R5cGUucHJvZ3Jlc3MgPSBmdW5jdGlvbiggaW1hZ2UsIGVsZW0sIG1lc3NhZ2UgKSB7XG4gIHRoaXMucHJvZ3Jlc3NlZENvdW50Kys7XG4gIHRoaXMuaGFzQW55QnJva2VuID0gdGhpcy5oYXNBbnlCcm9rZW4gfHwgIWltYWdlLmlzTG9hZGVkO1xuICAvLyBwcm9ncmVzcyBldmVudFxuICB0aGlzLmVtaXRFdmVudCggJ3Byb2dyZXNzJywgWyB0aGlzLCBpbWFnZSwgZWxlbSBdICk7XG4gIGlmICggdGhpcy5qcURlZmVycmVkICYmIHRoaXMuanFEZWZlcnJlZC5ub3RpZnkgKSB7XG4gICAgdGhpcy5qcURlZmVycmVkLm5vdGlmeSggdGhpcywgaW1hZ2UgKTtcbiAgfVxuICAvLyBjaGVjayBpZiBjb21wbGV0ZWRcbiAgaWYgKCB0aGlzLnByb2dyZXNzZWRDb3VudCA9PSB0aGlzLmltYWdlcy5sZW5ndGggKSB7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xuICB9XG5cbiAgaWYgKCB0aGlzLm9wdGlvbnMuZGVidWcgJiYgY29uc29sZSApIHtcbiAgICBjb25zb2xlLmxvZyggJ3Byb2dyZXNzOiAnICsgbWVzc2FnZSwgaW1hZ2UsIGVsZW0gKTtcbiAgfVxufTtcblxuSW1hZ2VzTG9h
118ZGVkLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgZXZlbnROYW1lID0gdGhpcy5oYXNBbnlCcm9rZW4gPyAnZmFpbCcgOiAnZG9uZSc7XG4gIHRoaXMuaXNDb21wbGV0ZSA9IHRydWU7XG4gIHRoaXMuZW1pdEV2ZW50KCBldmVudE5hbWUsIFsgdGhpcyBdICk7XG4gIHRoaXMuZW1pdEV2ZW50KCAnYWx3YXlzJywgWyB0aGlzIF0gKTtcbiAgaWYgKCB0aGlzLmpxRGVmZXJyZWQgKSB7XG4gICAgdmFyIGpxTWV0aG9kID0gdGhpcy5oYXNBbnlCcm9rZW4gPyAncmVqZWN0JyA6ICdyZXNvbHZlJztcbiAgICB0aGlzLmpxRGVmZXJyZWRbIGpxTWV0aG9kIF0oIHRoaXMgKTtcbiAgfVxufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXG5cbmZ1bmN0aW9uIExvYWRpbmdJbWFnZSggaW1nICkge1xuICB0aGlzLmltZyA9IGltZztcbn1cblxuTG9hZGluZ0ltYWdlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEV2RW1pdHRlci5wcm90b3R5cGUgKTtcblxuTG9hZGluZ0ltYWdlLnByb3RvdHlwZS5jaGVjayA9IGZ1bmN0aW9uKCkge1xuICAvLyBJZiBjb21wbGV0ZSBpcyB0cnVlIGFuZCBicm93c2VyIHN1cHBvcnRzIG5hdHVyYWwgc2l6ZXMsXG4gIC8vIHRyeSB0byBjaGVjayBmb3IgaW1hZ2Ugc3RhdHVzIG1hbnVhbGx5LlxuICB2YXIgaXNDb21wbGV0ZSA9IHRoaXMuZ2V0SXNJbWFnZUNvbXBsZXRlKCk7XG4gIGlmICggaXNDb21wbGV0ZSApIHtcbiAgICAvLyByZXBvcnQgYmFzZWQgb24gbmF0dXJhbFdpZHRoXG4gICAgdGhpcy5jb25maXJtKCB0aGlzLmltZy5uYXR1cmFsV2lkdGggIT09IDAsICduYXR1cmFsV2lkdGgnICk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gSWYgbm9uZSBvZiB0aGUgY2hlY2tzIGFib3ZlIG1hdGNoZWQsIHNpbXVsYXRlIGxvYWRpbmcgb24gZGV0YWNoZWQgZWxlbWVudC5cbiAgdGhpcy5wcm94eUltYWdlID0gbmV3IEltYWdlKCk7XG4gIHRoaXMucHJveHlJbWFnZS5hZGRFdmVudExpc3RlbmVyKCAnbG9hZCcsIHRoaXMgKTtcbiAgdGhpcy5wcm94eUltYWdlLmFkZEV2ZW50TGlzdGVuZXIoICdlcnJvcicsIHRoaXMgKTtcbiAgLy8gYmluZCB0byBpbWFnZSBhcyB3ZWxsIGZvciBGaXJlZm94LiAjMTkxXG4gIHRoaXMuaW1nLmFkZEV2ZW50TGlzdGVuZXIoICdsb2FkJywgdGhpcyApO1xuICB0aGlzLmltZy5hZGRFdmVudExpc3RlbmVyKCAnZXJyb3InLCB0aGlzICk7XG4gIHRoaXMucHJveHlJbWFnZS5zcmMgPSB0aGlzLmltZy5zcmM7XG59O1xuXG5Mb2FkaW5nSW1hZ2UucHJvdG90eXBlLmdldElzSW1hZ2VDb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAvLyBjaGVjayBmb3Igbm9uLXplcm8sIG5vbi11bmRlZmluZWQgbmF0dXJhbFdpZHRoXG4gIC8vIGZpeGVzIFNhZmFyaStJbmZpbml0ZVNjcm9sbCtNYXNvbnJ5IGJ1ZyBpbmZpbml0ZS1zY3JvbGwjNjcxXG4gIHJldHVybiB0aGlzLmltZy5jb21wbGV0ZSAmJiB0aGlzLmltZy5uYXR1cmFsV2lkdGg7XG59O1xuXG5Mb2FkaW5nSW1hZ2UucHJvdG90eXBlLmNvbmZpcm0gPSBmdW5jdGlvbiggaXNMb2FkZWQsIG1lc3NhZ2UgKSB7XG4gIHRoaXMuaXNMb2FkZWQgPSBpc0xvYWRlZDtcbiAgdGhpcy5lbWl0RXZlbnQoICdwcm9ncmVzcycsIFsgdGhpcywgdGhpcy5pbWcsIG1lc3NhZ2UgXSApO1xufTtcblxuLy8gLS0tLS0gZXZlbnRzIC0tLS0tIC8vXG5cbi8vIHRyaWdnZXIgc3BlY2lmaWVkIGhhbmRsZXIgZm9yIGV2ZW50IHR5cGVcbkxvYWRpbmdJbWFnZS5wcm90b3R5cGUuaGFuZGxlRXZlbnQgPSBmdW5jdGlvbiggZXZlbnQgKSB7XG4gIHZhciBtZXRob2QgPSAnb24nICsgZXZlbnQudHlwZTtcbiAgaWYgKCB0aGlzWyBtZXRob2QgXSApIHtcbiAgICB0aGlzWyBtZXRob2QgXSggZXZlbnQgKTtcbiAgfVxufTtcblxuTG9hZGluZ0ltYWdlLnByb3RvdHlwZS5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5jb25maXJtKCB0cnVlLCAnb25sb2FkJyApO1xuICB0aGlzLnVuYmluZEV2ZW50cygpO1xufTtcblxuTG9hZGluZ0ltYWdlLnByb3RvdHlwZS5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuY29uZmlybSggZmFsc2UsICdvbmVycm9yJyApO1xuICB0aGlzLnVuYmluZEV2ZW50cygpO1xufTtcblxuTG9hZGluZ0ltYWdlLnByb3RvdHlwZS51bmJpbmRFdmVudHMgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5wcm94eUltYWdlLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdsb2FkJywgdGhpcyApO1xuICB0aGlzLnByb3h5SW1hZ2UucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ2Vycm9yJywgdGhpcyApO1xuICB0aGlzLmltZy5yZW1vdmVFdmVudExpc3RlbmVyKCAnbG9hZCcsIHRoaXMgKTtcbiAgdGhpcy5pbWcucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ2Vycm9yJywgdGhpcyApO1xufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQmFja2dyb3VuZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG5mdW5jdGlvbiBCYWNrZ3JvdW5kKCB1cmwsIGVsZW1lbnQgKSB7XG4gIHRoaXMudXJsID0gdXJsO1xuICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICB0aGlzLmltZyA9IG5ldyBJbWFnZSgpO1xufVxuXG4vLyBpbmhlcml0IExvYWRpbmdJbWFnZSBwcm90b3R5cGVcbkJhY2tncm91bmQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggTG9hZGluZ0ltYWdlLnByb3RvdHlwZSApO1xuXG5CYWNrZ3JvdW5kLnByb3RvdHlwZS5jaGVjayA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmltZy5hZGRFdmVudExpc3RlbmVyKCAnbG9hZCcsIHRoaXMgKTtcbiAgdGhpcy5pbWcuYWRkRXZlbnRMaXN0ZW5lciggJ2Vycm9yJywgdGhpcyApO1xuICB0aGlzLmltZy5zcmMgPSB0aGlzLnVybDtcbiAgLy8gY2hlY2sgaWYgaW1hZ2UgaXMgYWxyZWFkeSBjb21wbGV0ZVxuICB2YXIgaXNDb21wbGV0ZSA9IHRoaXMuZ2V0SXNJbWFnZUNvbXBsZXRlKCk7XG4gIGlmICggaXNDb21wbGV0ZSApIHtcbiAgICB0aGlzLmNvbmZpcm0oIHRoaXMuaW1nLm5hdHVyYWxXaWR0aCAhPT0gMCwgJ25hdHVyYWxXaWR0aCcgKTtcbiAgICB0aGlzLnVuYmluZEV2ZW50cygpO1xuICB9XG59O1xuXG5CYWNrZ3JvdW5kLnByb3RvdHlwZS51bmJpbmRF
118dmVudHMgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5pbWcucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ2xvYWQnLCB0aGlzICk7XG4gIHRoaXMuaW1nLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdlcnJvcicsIHRoaXMgKTtcbn07XG5cbkJhY2tncm91bmQucHJvdG90eXBlLmNvbmZpcm0gPSBmdW5jdGlvbiggaXNMb2FkZWQsIG1lc3NhZ2UgKSB7XG4gIHRoaXMuaXNMb2FkZWQgPSBpc0xvYWRlZDtcbiAgdGhpcy5lbWl0RXZlbnQoICdwcm9ncmVzcycsIFsgdGhpcywgdGhpcy5lbGVtZW50LCBtZXNzYWdlIF0gKTtcbn07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGpRdWVyeSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG5JbWFnZXNMb2FkZWQubWFrZUpRdWVyeVBsdWdpbiA9IGZ1bmN0aW9uKCBqUXVlcnkgKSB7XG4gIGpRdWVyeSA9IGpRdWVyeSB8fCB3aW5kb3cualF1ZXJ5O1xuICBpZiAoICFqUXVlcnkgKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIHNldCBsb2NhbCB2YXJpYWJsZVxuICAkID0galF1ZXJ5O1xuICAvLyAkKCkuaW1hZ2VzTG9hZGVkKClcbiAgJC5mbi5pbWFnZXNMb2FkZWQgPSBmdW5jdGlvbiggb3B0aW9ucywgY2FsbGJhY2sgKSB7XG4gICAgdmFyIGluc3RhbmNlID0gbmV3IEltYWdlc0xvYWRlZCggdGhpcywgb3B0aW9ucywgY2FsbGJhY2sgKTtcbiAgICByZXR1cm4gaW5zdGFuY2UuanFEZWZlcnJlZC5wcm9taXNlKCAkKHRoaXMpICk7XG4gIH07XG59O1xuLy8gdHJ5IG1ha2luZyBwbHVnaW5cbkltYWdlc0xvYWRlZC5tYWtlSlF1ZXJ5UGx1Z2luKCk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG5yZXR1cm4gSW1hZ2VzTG9h
118ZGVkO1xuXG59KTtcbiIsIi8qIVxuICogSXNvdG9wZSB2My4wLjZcbiAqXG4gKiBMaWNlbnNlZCBHUEx2MyBmb3Igb3BlbiBzb3VyY2UgdXNlXG4gKiBvciBJc290b3BlIENvbW1lcmNpYWwgTGljZW5zZSBmb3IgY29tbWVyY2lhbCB1c2VcbiAqXG4gKiBodHRwczovL2lzb3RvcGUubWV0YWZpenp5LmNvXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE4IE1ldGFmaXp6eVxuICovXG5cbiggZnVuY3Rpb24oIHdpbmRvdywgZmFjdG9yeSApIHtcbiAgLy8gdW5pdmVyc2FsIG1vZHVsZSBkZWZpbml0aW9uXG4gIC8qIGpzaGludCBzdHJpY3Q6IGZhbHNlICovIC8qZ2xvYmFscyBkZWZpbmUsIG1vZHVsZSwgcmVxdWlyZSAqL1xuICBpZiAoIHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kICkge1xuICAgIC8vIEFNRFxuICAgIGRlZmluZSggW1xuICAgICAgICAnb3V0bGF5ZXIvb3V0bGF5ZXInLFxuICAgICAgICAnZ2V0LXNpemUvZ2V0LXNpemUnLFxuICAgICAgICAnZGVzYW5kcm8tbWF0Y2hlcy1zZWxlY3Rvci9tYXRjaGVzLXNlbGVjdG9yJyxcbiAgICAgICAgJ2Zpenp5LXVpLXV0aWxzL3V0aWxzJyxcbiAgICAgICAgJy4vaXRlbScsXG4gICAgICAgICcuL2xheW91dC1tb2RlJyxcbiAgICAgICAgLy8gaW5jbHVkZSBkZWZhdWx0IGxheW91dCBtb2Rlc1xuICAgICAgICAnLi9sYXlvdXQtbW9kZXMvbWFzb25yeScsXG4gICAgICAgICcuL2xheW91dC1tb2Rlcy9maXQtcm93cycsXG4gICAgICAgICcuL2xheW91dC1tb2Rlcy92ZXJ0aWNhbCdcbiAgICAgIF0sXG4gICAgICBmdW5jdGlvbiggT3V0bGF5ZXIsIGdldFNpemUsIG1hdGNoZXNTZWxlY3RvciwgdXRpbHMsIEl0ZW0sIExheW91dE1vZGUgKSB7XG4gICAgICAgIHJldHVybiBmYWN0b3J5KCB3aW5kb3csIE91dGxheWVyLCBnZXRTaXplLCBtYXRjaGVzU2VsZWN0b3IsIHV0aWxzLCBJdGVtLCBMYXlvdXRNb2RlICk7XG4gICAgICB9KTtcbiAgfSBlbHNlIGlmICggdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cyApIHtcbiAgICAvLyBDb21tb25KU1xuICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShcbiAgICAgIHdpbmRvdyxcbiAgICAgIHJlcXVpcmUoJ291dGxheWVyJyksXG4gICAgICByZXF1aXJlKCdnZXQtc2l6ZScpLFxuICAgICAgcmVxdWlyZSgnZGVzYW5kcm8tbWF0Y2hlcy1zZWxlY3RvcicpLFxuICAgICAgcmVxdWlyZSgnZml6enktdWktdXRpbHMnKSxcbiAgICAgIHJlcXVpcmUoJy4vaXRlbScpLFxuICAgICAgcmVxdWlyZSgnLi9sYXlvdXQtbW9kZScpLFxuICAgICAgLy8gaW5jbHVkZSBkZWZhdWx0IGxheW91dCBtb2Rlc1xuICAgICAgcmVxdWlyZSgnLi9sYXlvdXQtbW9kZXMvbWFzb25yeScpLFxuICAgICAgcmVxdWlyZSgnLi9sYXlvdXQtbW9kZXMvZml0LXJvd3MnKSxcbiAgICAgIHJlcXVpcmUoJy4vbGF5b3V0LW1vZGVzL3ZlcnRpY2FsJylcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIC8vIGJyb3dzZXIgZ2xvYmFsXG4gICAgd2luZG93Lklzb3RvcGUgPSBmYWN0b3J5KFxuICAgICAgd2luZG93LFxuICAgICAgd2luZG93Lk91dGxheWVyLFxuICAgICAgd2luZG93LmdldFNpemUsXG4gICAgICB3aW5kb3cubWF0Y2hlc1NlbGVjdG9yLFxuICAgICAgd2luZG93LmZpenp5VUlVdGlscyxcbiAgICAgIHdpbmRvdy5Jc290b3BlLkl0ZW0sXG4gICAgICB3aW5kb3cuSXNvdG9wZS5MYXlvdXRNb2RlXG4gICAgKTtcbiAgfVxuXG59KCB3aW5kb3csIGZ1bmN0aW9uIGZ
118hY3RvcnkoIHdpbmRvdywgT3V0bGF5ZXIsIGdldFNpemUsIG1hdGNoZXNTZWxlY3RvciwgdXRpbHMsXG4gIEl0ZW0sIExheW91dE1vZGUgKSB7XG5cbid1c2Ugc3RyaWN0JztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gdmFycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG52YXIgalF1ZXJ5ID0gd2luZG93LmpRdWVyeTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaGVscGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG52YXIgdHJpbSA9IFN0cmluZy5wcm90b3R5cGUudHJpbSA/XG4gIGZ1bmN0aW9uKCBzdHIgKSB7XG4gICAgcmV0dXJuIHN0ci50cmltKCk7XG4gIH0gOlxuICBmdW5jdGlvbiggc3RyICkge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSggL15cXHMrfFxccyskL2csICcnICk7XG4gIH07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGlzb3RvcGVEZWZpbml0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXG5cbiAgLy8gY3JlYXRlIGFuIE91dGxheWVyIGxheW91dCBjbGFzc1xuICB2YXIgSXNvdG9wZSA9IE91dGxheWVyLmNyZWF0ZSggJ2lzb3RvcGUnLCB7XG4gICAgbGF5b3V0TW9kZTogJ21hc29ucnknLFxuICAgIGlzSlF1ZXJ5RmlsdGVyaW5nOiB0cnVlLFxuICAgIHNvcnRBc2NlbmRpbmc6IHRydWVcbiAgfSk7XG5cbiAgSXNvdG9wZS5JdGVtID0gSXRlbTtcbiAgSXNvdG9wZS5MYXlvdXRNb2RlID0gTGF5b3V0TW9kZTtcblxuICB2YXIgcHJvdG8gPSBJc290b3BlLnByb3RvdHlwZTtcblxuICBwcm90by5fY3JlYXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5pdGVtR1VJRCA9IDA7XG4gICAgLy8gZnVuY3Rpb25zIHRoYXQgc29ydCBpdGVtc1xuICAgIHRoaXMuX3NvcnRlcnMgPSB7fTtcbiAgICB0aGlzLl9nZXRTb3J0ZXJzKCk7XG4gICAgLy8gY2FsbCBzdXBlclxuICAgIE91dGxheWVyLnByb3RvdHlwZS5fY3JlYXRlLmNhbGwoIHRoaXMgKTtcblxuICAgIC8vIGNyZWF0ZSBsYXlvdXQgbW9kZXNcbiAgICB0aGlzLm1vZGVzID0ge307XG4gICAgLy8gc3RhcnQgZmlsdGVyZWRJdGVtcyB3aXRoIGFsbCBpdGVtc1xuICAgIHRoaXMuZmlsdGVyZWRJdGVtcyA9IHRoaXMuaXRlbXM7XG4gICAgLy8ga2VlcCBvZiB0cmFjayBvZiBzb3J0QnlzXG4gICAgdGhpcy5zb3J0SGlzdG9yeSA9IFsgJ29yaWdpbmFsLW9yZGVyJyBdO1xuICAgIC8vIGNyZWF0ZSBmcm9tIHJlZ2lzdGVyZWQgbGF5b3V0IG1vZGVzXG4gICAgZm9yICggdmFyIG5hbWUgaW4gTGF5b3V0TW9kZS5tb2RlcyApIHtcbiAgICAgIHRoaXMuX2luaXRMYXlvdXRNb2RlKCBuYW1lICk7XG4gICAgfVxuICB9O1xuXG4gIHByb3RvLnJlbG9hZEl0ZW1zID0gZnVuY3Rpb24oKSB7XG4gICAgLy8gcmVzZXQgaXRlbSBJRCBjb3VudGVyXG4gICAgdGhpcy5pdGVtR1VJRCA9IDA7XG4gICAgLy8gY2FsbCBzdXBlclxuICAgIE91dGxheWVyLnByb3RvdHlwZS5yZWxvYWRJdGVtcy5jYWxsKCB0aGlzICk7XG4gIH07XG5cbiAgcHJvdG8uX2l0ZW1pemUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaXRlbXMgPSBPdXRsYXllci5wcm90b3R5cGUuX2l0ZW1pemUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuICAgIC8vIGFzc2lnbiBJRCBmb3Igb3JpZ2luYWwtb3JkZXJcbiAgICBmb3IgKCB2YXIgaT0wOyBpIDwgaXRlbXMubGVuZ3RoOyBpKysgKSB7XG4gICAgICB2Y
118XIgaXRlbSA9IGl0ZW1zW2ldO1xuICAgICAgaXRlbS5pZCA9IHRoaXMuaXRlbUdVSUQrKztcbiAgICB9XG4gICAgdGhpcy5fdXBkYXRlSXRlbXNTb3J0RGF0YSggaXRlbXMgKTtcbiAgICByZXR1cm4gaXRlbXM7XG4gIH07XG5cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBsYXlvdXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLy9cblxuICBwcm90by5faW5pdExheW91dE1vZGUgPSBmdW5jdGlvbiggbmFtZSApIHtcbiAgICB2YXIgTW9kZSA9IExheW91dE1vZGUubW9kZXNbIG5hbWUgXTtcbiAgICAvLyBzZXQgbW9kZSBvcHRpb25zXG4gICAgLy8gSEFDSyBleHRlbmQgaW5pdGlhbCBvcHRpb25zLCBiYWNrLWZpbGwgaW4gZGVmYXVsdCBvcHRpb25zXG4gICAgdmFyIGluaXRpYWxPcHRzID0gdGhpcy5vcHRpb25zWyBuYW1lIF0gfHwge307XG4gICAgdGhpcy5vcHRpb25zWyBuYW1lIF0gPSBNb2RlLm9wdGlvbnMgP1xuICAgICAgdXRpbHMuZXh0ZW5kKCBNb2RlLm9wdGlvbnMsIGluaXRpYWxPcHRzICkgOiBpbml0aWFsT3B0cztcbiAgICAvLyBpbml0IGxheW91dCBtb2RlIGluc3RhbmNlXG4gICAgdGhpcy5tb2Rlc1sgbmFtZSBdID0gbmV3IE1vZGUoIHRoaXMgKTtcbiAgfTtcblxuXG4gIHByb3RvLmxheW91dCA9IGZ1bmN0aW9uKCkge1xuICAgIC8vIGlmIGZpcnN0IHRpbWUgZG9pbmcgbGF5b3V0LCBkbyBhbGwgbWFnaWNcbiAgICBpZiAoICF0aGlzLl9pc0xheW91dEluaXRlZCAmJiB0aGlzLl9nZXRPcHRpb24oJ2luaXRMYXlvdXQnKSApIHtcbiAgICAgIHRoaXMuYXJyYW5nZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9sYXlvdXQoKTtcbiAgfTtcblxuICAvLyBwcml2YXRlIG1ldGhvZCB0byBiZSB1c2VkIGluIGxheW91dCgpICYgbWFnaWMoKVxuICBwcm90by5fbGF5b3V0ID0gZnVuY3Rpb24oKSB7XG4gICAgLy8gZG9uJ3QgYW5pbWF0ZSBmaXJzdCBsYXlvdXRcbiAgICB2YXIgaXNJbnN0YW50ID0gdGhpcy5fZ2V0SXNJbnN0YW50KCk7XG4gICAgLy8gbGF5b3V0IGZsb3dcbiAgICB0aGlzLl9yZXNldExheW91dCgpO1xuICAgIHRoaXMuX21hbmFnZVN0YW1wcygpO1xuICAgIHRoaXMubGF5b3V0SXRlbXMoIHRoaXMuZmlsdGVyZWRJdGVtcywgaXNJbnN0YW50ICk7XG5cbiAgICAvLyBmbGFnIGZvciBpbml0YWxpemVkXG4gICAgdGhpcy5faXNMYXlvdXRJbml0ZWQgPSB0cnVlO1xuICB9O1xuXG4gIC8vIGZpbHRlciArIHNvcnQgKyBsYXlvdXRcbiAgcHJvdG8uYXJyYW5nZSA9IGZ1bmN0aW9uKCBvcHRzICkge1xuICAgIC8vIHNldCBhbnkgb3B0aW9ucyBwYXNzXG4gICAgdGhpcy5vcHRpb24oIG9wdHMgKTtcbiAgICB0aGlzLl9nZXRJc0luc3RhbnQoKTtcbiAgICAvLyBmaWx0ZXIsIHNvcnQsIGFuZCBsYXlvdXRcblxuICAgIC8vIGZpbHRlclxuICAgIHZhciBmaWx0ZXJlZCA9IHRoaXMuX2ZpbHRlciggdGhpcy5pdGVtcyApO1xuICAgIHRoaXMuZmlsdGVyZWRJdGVtcyA9IGZpbHRlcmVkLm1hdGNoZXM7XG5cbiAgICB0aGlzLl9iaW5kQXJyYW5nZUNvbXBsZXRlKCk7XG5cbiAgICBpZiAoIHRoaXMuX2lzSW5zdGFudCApIHtcbiAgICAgIHRoaXMuX25vVHJhbnNpdGlvbiggdGhpcy5faGlkZVJldmVhbCwgWyBmaWx0ZXJlZCBdICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2hpZGVSZXZlYWwoIGZpbHRlcmVkICk7XG4gICAgfVxuXG4gICAgdGhpcy5fc29ydCgpO1xuICAgIHRoaXMuX2xheW91dCgpO1xuICB9O1xuICAvLyBhbGlhcyB0byBfaW5pdCBmb3IgbWFpbiBwbHVnaW4gbWV0aG9kXG4gIHByb3RvLl9pbml0ID0gcHJvdG8uYXJyYW5nZTtcblxuICBwcm90by5faGlkZVJldmVhbCA9IGZ1bmN0aW9uKCBmaWx0ZXJlZCApIHtcbiAgICB0aGlzLnJldmVhbCggZmlsdGVyZWQubmVlZFJldmVhbCApO1xuICAgIHRoaXMuaGlkZSggZmlsdGVyZWQubmVlZEhpZGUgKTtcbiAgfTtcblxuICAvLyBIQUNLXG4gIC8vIERvbid0IGFuaW1hdGUvdHJhbnNpdGlvbiBmaXJzdCBsYXlvdXRcbiAgLy8gT3IgZG9uJ3QgYW5pbWF0ZS90cmFuc2l0aW9uIG90aGVyIGxheW91dHNcbiAgcHJvdG8uX2dldElzSW5zdGFudCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBpc0xheW91dEluc3RhbnQgPSB0aGlzLl9nZXRPcHRpb24oJ2xheW91dEluc3RhbnQnKTtcbiAgICB2YXIgaXNJbnN0YW50ID0gaXNMYXlvdXRJbnN0YW50ICE9PSB1bmRlZmluZWQgPyBpc0xheW91dEluc3RhbnQgOlxuICAgICAgIXRoaXMuX2lzTGF5b3V0SW5pdGVkO1xuICAgIHRoaXMuX2lzSW5zdGFudCA9IGlzSW5zdGFudDtcbiAgICByZXR1cm4gaXNJbnN0YW50O1xuICB9O1xuXG4gIC8vIGxpc3RlbiBmb3IgbGF5b3V0Q29tcGxldGUsIGhpZGVDb21wbGV0ZSBhbmQgcmV2ZWFsQ29tcGxldGVcbiAgLy8gdG8gdHJpZ2dlciBhcnJhbmdlQ29tcGxldGVcbiAgcHJvdG8uX2JpbmRBcnJhbmdlQ29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICAvLyBsaXN0ZW4gZm9yIDMgZXZlbnRzIHRvIHRyaWdnZXIgYXJyYW5nZUNvbXBsZXRlXG4gICAgdmFyIGlzTGF5b3V0Q29tcGxldGUsIGlzSGlkZUNvbXBsZXRlLCBpc1JldmVhbENvbXBsZXRlO1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgZnVuY3Rpb24gYXJyYW5nZVBhcmFsbGVsQ2FsbGJhY2soKSB7XG4gICAgICBpZiAoIGlzTGF5b3V0Q29tcGxldGUgJiYgaXNIaWRlQ29tcGxldGUgJiYgaXNSZXZlYWxDb21wbGV0ZSApIHtcbiAgICAgICAgX3RoaXMuZGlzcGF0Y2hFdmVudCggJ2FycmFuZ2VDb21wbGV0ZScsIG51bGwsIFsgX3RoaXMuZmlsdGVyZWRJdGVtcyBdICk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMub25jZSggJ2xheW91dENvbXBsZXRlJywgZnVuY3Rpb24oKSB7XG4gICAgICBpc0xheW91dENvbXBsZXRlID0gdHJ1ZTtcbiAgICAgIGFycmFuZ2VQYXJhbGxlbENhbGxiYWNrKCk7XG4gICAgfSk7XG4gICAgdGhpcy5vbmNlKCAnaGlkZUNvbXBsZXRlJywgZnVuY3Rpb24oKSB7XG4gICAgICBpc0hpZGVDb21wbGV0ZSA9IHRydWU7XG4gICAgICBhcnJhbmdlUGFyYWxsZWxDYWxsYmFjaygpO1xuICAgIH0pO1xuICAgIHRoaXMub25jZSggJ3JldmVhbENvbXBsZXRlJywgZnVuY3Rpb24oKSB7XG4gICAgICBpc1JldmVhbENvbXBsZXRlID0gdHJ1ZTtcbiAgICAgIGFycmFuZ2VQYXJhbGxlbENhbGxiYWNrKCk7XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZmlsdGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXG5cbiAgcHJvdG8uX2ZpbHRlciA9IGZ1bmN0aW9uKCBpdGVtcyApIHtcbiAgICB2YXIgZmlsdGVyID0gdGhpcy5vcHRpb25zLmZpbHRlcjtcbiAgICBmaWx0ZXIgPSBmaWx0ZXIgfHwgJyonO1xuICAgIHZhciBtYXRjaGVzID0gW107XG4gICAgdmFyIGhpZGRlbk1hdGNoZWQgPSBbXTtcbiAgICB2YXIgdmlzaWJsZVVubWF0Y2hlZCA9IFtdO1xuXG4gICAgdmFyIHRlc3QgPSB0aGlzLl9nZXRGaWx0ZXJUZXN0KCBmaWx0ZXIgKTtcblxuICAgIC8vIHRlc3QgZWFjaCBpdGVtXG4gICAgZm9yICggdmFyIGk9MDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrICkge1xuICAgICAgdmFyIGl0ZW0gPSBpdGVtc1tpXTtcbiAgICAgIGlmICggaXRlbS5pc0lnbm9yZWQgKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gYWRkIGl0ZW0gdG8gZWl0aGVyIG1hdGNoZWQgb3IgdW5tYX
118RjaGVkIGdyb3VwXG4gICAgICB2YXIgaXNNYXRjaGVkID0gdGVzdCggaXRlbSApO1xuICAgICAgLy8gaXRlbS5pc0ZpbHRlck1hdGNoZWQgPSBpc01hdGNoZWQ7XG4gICAgICAvLyBhZGQgdG8gbWF0Y2hlcyBpZiBpdHMgYSBtYXRjaFxuICAgICAgaWYgKCBpc01hdGNoZWQgKSB7XG4gICAgICAgIG1hdGNoZXMucHVzaCggaXRlbSApO1xuICAgICAgfVxuICAgICAgLy8gYWRkIHRvIGFkZGl0aW9uYWwgZ3JvdXAgaWYgaXRlbSBuZWVkcyB0byBiZSBoaWRkZW4gb3IgcmV2ZWFsZWRcbiAgICAgIGlmICggaXNNYXRjaGVkICYmIGl0ZW0uaXNIaWRkZW4gKSB7XG4gICAgICAgIGhpZGRlbk1hdGNoZWQucHVzaCggaXRlbSApO1xuICAgICAgfSBlbHNlIGlmICggIWlzTWF0Y2hlZCAmJiAhaXRlbS5pc0hpZGRlbiApIHtcbiAgICAgICAgdmlzaWJsZVVubWF0Y2hlZC5wdXNoKCBpdGVtICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gcmV0dXJuIGNvbGxlY3Rpb25zIG9mIGl0ZW1zIHRvIGJlIG1hbmlwdWxhdGVkXG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGNoZXM6IG1hdGNoZXMsXG4gICAgICBuZWVkUmV2ZWFsOiBoaWRkZW5NYXRjaGVkLFxuICAgICAgbmVlZEhpZGU6IHZpc2libGVVbm1hdGNoZWRcbiAgICB9O1xuICB9O1xuXG4gIC8vIGdldCBhIGpRdWVyeSwgZnVuY3Rpb24sIG9yIGEgbWF0Y2hlc1NlbGVjdG9yIHRlc3QgZ2l2ZW4gdGhlIGZpbHRlclxuICBwcm90by5fZ2V0RmlsdGVyVGVzdCA9IGZ1bmN0aW9uKCBmaWx0ZXIgKSB7XG4gICAgaWYgKCBqUXVlcnkgJiYgdGhpcy5vcHRpb25zLmlzSlF1ZXJ5RmlsdGVyaW5nICkge1xuICAgICAgLy8gdXNlIGpRdWVyeVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCBpdGVtICkge1xuICAgICAgICByZXR1cm4galF1ZXJ5KCBpdGVtLmVsZW1lbnQgKS5pcyggZmlsdGVyICk7XG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoIHR5cGVvZiBmaWx0ZXIgPT0gJ2Z1bmN0aW9uJyApIHtcbiAgICAgIC8vIHVzZSBmaWx0ZXIgYXMgZnVuY3Rpb25cbiAgICAgIHJldHVybiBmdW5jdGlvbiggaXRlbSApIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlciggaXRlbS5lbGVtZW50ICk7XG4gICAgICB9O1xuICAgIH1cbiAgICAvLyBkZWZhdWx0LCB1c2UgZmlsdGVyIGFzIHNlbGVjdG9yIHN0cmluZ1xuICAgIHJldHVybiBmdW5jdGlvbiggaXRlbSApIHtcbiAgICAgIHJldHVybiBtYXRjaGVzU2VsZWN0b3IoIGl0ZW0uZWxlbWVudCwgZmlsdGVyICk7XG4gICAgfTtcbiAgfTtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzb3J0aW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXG5cbiAgLyoqXG4gICAqIEBwYXJhbXMge0FycmF5fSBlbGVtc1xuICAgKiBAcHVibGljXG4gICAqL1xuICBwcm90by51cGRhdGVTb3J0RGF0YSA9IGZ1bmN0aW9uKCBlbGVtcyApIHtcbiAgICAvLyBnZXQgaXRlbXNcbiAgICB2YXIgaXRlbXM7XG4gICAgaWYgKCBlbGVtcyApIHtcbiAgICAgIGVsZW1zID0gdXRpbHMubWFrZUFycmF5KCBlbGVtcyApO1xuICAgICAgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCBlbGVtcyApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1cGRhdGUgYWxsIGl0ZW1zIGlmIG5vIGVsZW1zIHByb3ZpZGVkXG4gICAgICBpdGVtcyA9IHRoaXMuaXRlbXM7XG4gICAgfVxuXG4gICAgdGhpcy5fZ2V0U29ydGVycygpO1xuICAgIHRoaXMuX3VwZGF0ZUl0ZW1zU29ydERhdGEoIGl0ZW1zICk7XG4gIH07XG5cbiAgcHJvdG8uX2dldFNvcnRlcnMgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZ2V0U29ydERhdGEgPSB0aGlzLm9wdGlvbnMuZ2V0U29ydERhdGE7XG4gICAgZm9yICggdmFyIGtleSBpbiBnZXRTb3J0RGF0YSApIHtcbiAgICAgIHZhciBzb3J0ZXIgPSBnZXRTb3J0RGF0YVsga2V5IF07XG4gICAgICB0aGlzLl9zb3J0ZXJzWyBrZXkgXSA9IG11bmdlU29ydGVyKCBzb3J0ZXIgKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEBwYXJhbXMge0FycmF5fSBpdGVtcyAtIG9mIElzb3RvcGUuSXRlbXNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByb3RvLl91cGRhdGVJdGVtc1NvcnREYXRhID0gZnVuY3Rpb24oIGl0ZW1zICkge1xuICAgIC8vIGRvIG5vdCB1cGRhdGUgaWYgbm8gaXRlbXNcbiAgICB2YXIgbGVuID0gaXRlbXMgJiYgaXRlbXMubGVuZ3RoO1xuXG4gICAgZm9yICggdmFyIGk9MDsgbGVuICYmIGkgPCBsZW47IGkrKyApIHtcbiAgICAgIHZhciBpdGVtID0gaXRlbXNbaV07XG4gICAgICBpdGVtLnVwZGF0ZVNvcnREYXRhKCk7XG4gICAgfVxuICB9O1xuXG4gIC8vIC0tLS0tIG11bmdlIHNvcnRlciAtLS0tLSAvL1xuXG4gIC8vIGVuY2Fwc3VsYXRlIHRoaXMsIGFzIHdlIGp1c3QgbmVlZCBtdW5nZVNvcnRlclxuICAvLyBvdGhlciBmdW5jdGlvbnMgaW4gaGVyZSBhcmUganVzdCBmb3IgbXVuZ2luZ1xuICB2YXIgbXVuZ2VTb3J0ZXIgPSAoIGZ1bmN0aW9uKCkge1xuICAgIC8vIGFkZCBhIG1hZ2ljIGxheWVyIHRvIHNvcnRlcnMgZm9yIGNvbnZpZW5lbnQgc2hvcnRoYW5kc1xuICAgIC8vIGAuZm9vLWJhcmAgd2lsbCB1c2UgdGhlIHRleHQgb2YgLmZvby1iYXIgcXVlcnlTZWxlY3RvclxuICAgIC8vIGBbZm9vLWJhcl1gIHdpbGwgdXNlIGF0dHJpYnV0ZVxuICAgIC8vIHlvdSBjYW4gYWxzbyBhZGQgcGFyc2VyXG4gICAgLy8gYC5mb28tYmFyIHBhcnNlSW50YCB3aWxsIHBhcnNlIHRoYXQgYXMgYSBudW1iZXJcbiAgICBmdW5jdGlvbiBtdW5nZVNvcnRlciggc29ydGVyICkge1xuICAgICAgLy8gaWYgbm90IGEgc3RyaW5nLCByZXR1cm4gZnVuY3Rpb24gb3Igd2hhdGV2ZXIgaXQgaXNcbiAgICAgIGlmICggdHlwZW9mIHNvcnRlciAhPSAnc3RyaW5nJyApIHtcbiAgICAgICAgcmV0dXJuIHNvcnRlcjtcbiAgICAgIH1cbiAgICAgIC8vIHBhcnNlIHRoZSBzb3J0ZXIgc3RyaW5nXG4gICAgICB2Y
118XIgYXJncyA9IHRyaW0oIHNvcnRlciApLnNwbGl0KCcgJyk7XG4gICAgICB2YXIgcXVlcnkgPSBhcmdzWzBdO1xuICAgICAgLy8gY2hlY2sgaWYgcXVlcnkgbG9va3MgbGlrZSBbYW4tYXR0cmlidXRlXVxuICAgICAgdmFyIGF0dHJNYXRjaCA9IHF1ZXJ5Lm1hdGNoKCAvXlxcWyguKylcXF0kLyApO1xuICAgICAgdmFyIGF0dHIgPSBhdHRyTWF0Y2ggJiYgYXR0ck1hdGNoWzFdO1xuICAgICAgdmFyIGdldFZhbHVlID0gZ2V0VmFsdWVHZXR0ZXIoIGF0dHIsIHF1ZXJ5ICk7XG4gICAgICAvLyB1c2Ugc2Vjb25kIGFyZ3VtZW50IGFzIGEgcGFyc2VyXG4gICAgICB2YXIgcGFyc2VyID0gSXNvdG9wZS5zb3J0RGF0YVBhcnNlcnNbIGFyZ3NbMV0gXTtcbiAgICAgIC8vIHBhcnNlIHRoZSB2YWx1ZSwgaWYgdGhlcmUgd2FzIGEgcGFyc2VyXG4gICAgICBzb3J0ZXIgPSBwYXJzZXIgPyBmdW5jdGlvbiggZWxlbSApIHtcbiAgICAgICAgcmV0dXJuIGVsZW0gJiYgcGFyc2VyKCBnZXRWYWx1ZSggZWxlbSApICk7XG4gICAgICB9IDpcbiAgICAgIC8vIG90aGVyd2lzZSBqdXN0IHJldHVybiB2YWx1ZVxuICAgICAgZnVuY3Rpb24oIGVsZW0gKSB7XG4gICAgICAgIHJldHVybiBlbGVtICYmIGdldFZhbHVlKCBlbGVtICk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gc29ydGVyO1xuICAgIH1cblxuICAgIC8vIGdldCBhbiBhdHRyaWJ1dGUgZ2V0dGVyLCBvciBnZXQgdGV4dCBvZiB0aGUgcXVlcnlTZWxlY3RvclxuICAgIGZ1bmN0aW9uIGdldFZhbHVlR2V0dGVyKCBhdHRyLCBxdWVyeSApIHtcbiAgICAgIC8vIGlmIHF1ZXJ5IGxvb2tzIGxpa2UgW2Zvby1iYXJdLCBnZXQgYXR0cmlidXRlXG4gICAgICBpZiAoIGF0dHIgKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBnZXRBdHRyaWJ1dGUoIGVsZW0gKSB7XG4gICAgICAgICAgcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCBhdHRyICk7XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIG90aGVyd2lzZSwgYXNzdW1lIGl0cyBhIHF1ZXJ5U2VsZWN0b3IsIGFuZCBnZXQgaXRzIHRleHRcbiAgICAgIHJldHVybiBmdW5jdGlvbiBnZXRDaGlsZFRleHQoIGVsZW0gKSB7XG4gICAgICAgIHZhciBjaGlsZCA9IGVsZW0ucXVlcnlTZWxlY3RvciggcXVlcnkgKTtcbiAgICAgICAgcmV0dXJuIGNoaWxkICYmIGNoaWxkLnRleHRDb250ZW50O1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbXVuZ2VTb3J0ZXI7XG4gIH0pKCk7XG5cbiAgLy8gcGFyc2VycyB1c2VkIGluIGdldFNvcnREYXRhIHNob3J0Y3V0IHN0cmluZ3NcbiAgSXNvdG9wZS5zb3J0RGF0YVBhcnNlcnMgPSB7XG4gICAgJ3BhcnNlSW50JzogZnVuY3Rpb24oIHZhbCApIHtcbiAgICAgIHJldHVybiBwYXJzZUludCggdmFsLCAxMCApO1xuICAgIH0sXG4gICAgJ3BhcnNlRmxvYXQnOiBmdW5jdGlvbiggdmFsICkge1xuICAgICAgcmV0dXJuIHBhcnNlRmxvYXQoIHZhbCApO1xuICAgIH1cbiAgfTtcblxuICAvLyAtLS0tLSBzb3J0IG1ldGhvZCAtLS0tLSAvL1xuXG4gIC8vIHNvcnQgZmlsdGVyZWRJdGVtIG9yZGVyXG4gIHByb3RvLl9zb3J0ID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCAhdGhpcy5vcHRpb25zLnNvcnRCeSApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8ga2VlcCB0cmFjayBvZiBzb3J0QnkgSGlzdG9yeVxuICAgIHZhciBzb3J0QnlzID0gdXRpbHMubWFrZUFycmF5KCB0aGlzLm9wdGlvbnMuc29ydEJ5ICk7XG4gICAgaWYgKCAhdGhpcy5fZ2V0SXNTYW1lU29ydEJ5KCBzb3J0QnlzICkgKSB7XG4gICAgICAvLyBjb25jYXQgYWxsIHNvcnRCeSBhbmQgc29ydEhpc3RvcnksIGFkZCB0byBmcm9udCwgb2xkZXN0IGdvZXMgaW4gbGFzdFxuICAgICAgdGhpcy5zb3J0SGlzdG9yeSA9IHNvcnRCeXMuY29uY2F0KCB0aGlzLnNvcnRIaXN0b3J5ICk7XG4gICAgfVxuICAgIC8vIHNvcnQgbWFnaWNcbiAgICB2YXIgaXRlbVNvcnRlciA9IGdldEl0ZW1Tb3J0ZXIoIHRoaXMuc29ydEhpc3RvcnksIHRoaXMub3B0aW9ucy5zb3J0QXNjZW5kaW5nICk7XG4gICAgdGhpcy5maWx0ZXJlZEl0ZW1zLnNvcnQoIGl0ZW1Tb3J0ZXIgKTtcbiAgfTtcblxuICAvLyBjaGVjayBpZiBzb3J0QnlzIGlzIHNhbWUgYXMgc3RhcnQgb2Ygc29ydEhpc3RvcnlcbiAgcHJvdG8uX2dldElzU2FtZVNvcnRCeSA9IGZ1bmN0aW9uKCBzb3J0QnlzICkge1xuICAgIGZvciAoIHZhciBpPTA7IGkgPCBzb3J0QnlzLmxlbmd0aDsgaSsrICkge1xuICAgICAgaWYgKCBzb3J0QnlzW2ldICE9IHRoaXMuc29ydEhpc3RvcnlbaV0gKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgLy8gcmV0dXJucyBhIGZ1bmN0aW9uIHVzZWQgZm9yIHNvcnRpbmdcbiAgZnVuY3Rpb24gZ2V0SXRlbVNvcnRlciggc29ydEJ5cywgc29ydEFzYyApIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gc29ydGVyKCBpdGVtQSwgaXRlbUIgKSB7XG4gICAgICAvLyBjeWNsZSB0aHJvdWdoIGFsbCBzb3J0S2V5c1xuICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgc29ydEJ5cy5sZW5ndGg7IGkrKyApIHtcbiAgICAgICAgdmFyIHNvcnRCeSA9IHNvcnRCeXNbaV07XG4gICAgICAgIHZhciBhID0gaXRlbUEuc29ydERhdGFbIHNvcnRCeSBdO1xuICAgICAgICB2Y
118XIgYiA9IGl0ZW1CLnNvcnREYXRhWyBzb3J0QnkgXTtcbiAgICAgICAgaWYgKCBhID4gYiB8fCBhIDwgYiApIHtcbiAgICAgICAgICAvLyBpZiBzb3J0QXNjIGlzIGFuIG9iamVjdCwgdXNlIHRoZSB2YWx1ZSBnaXZlbiB0aGUgc29ydEJ5IGtleVxuICAgICAgICAgIHZhciBpc0FzY2VuZGluZyA9IHNvcnRBc2NbIHNvcnRCeSBdICE9PSB1bmRlZmluZWQgPyBzb3J0QXNjWyBzb3J0QnkgXSA6IHNvcnRBc2M7XG4gICAgICAgICAgdmFyIGRpcmVjdGlvbiA9IGlzQXNjZW5kaW5nID8gMSA6IC0xO1xuICAgICAgICAgIHJldHVybiAoIGEgPiBiID8gMSA6IC0xICkgKiBkaXJlY3Rpb247XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiAwO1xuICAgIH07XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXG5cbiAgLy8gZ2V0IGxheW91dCBtb2RlXG4gIHByb3RvLl9tb2RlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGxheW91dE1vZGUgPSB0aGlzLm9wdGlvbnMubGF5b3V0TW9kZTtcbiAgICB2YXIgbW9kZSA9IHRoaXMubW9kZXNbIGxheW91dE1vZGUgXTtcbiAgICBpZiAoICFtb2RlICkge1xuICAgICAgLy8gVE9ETyBjb25zb2xlLmVycm9yXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoICdObyBsYXlvdXQgbW9kZTogJyArIGxheW91dE1vZGUgKTtcbiAgICB9XG4gICAgLy8gSEFDSyBzeW5jIG1vZGUncyBvcHRpb25zXG4gICAgLy8gYW55IG9wdGlvbnMgc2V0IGFmdGVyIGluaXQgZm9yIGxheW91dCBtb2RlIG5lZWQgdG8gYmUgc3luY2VkXG4gICAgbW9kZS5vcHRpb25zID0gdGhpcy5vcHRpb25zWyBsYXlvdXRNb2RlIF07XG4gICAgcmV0dXJuIG1vZGU7XG4gIH07XG5cbiAgcHJvdG8uX3Jlc2V0TGF5b3V0ID0gZnVuY3Rpb24oKSB7XG4gICAgLy8gdHJpZ2dlciBvcmlnaW5hbCByZXNldCBsYXlvdXRcbiAgICBPdXRsYXllci5wcm90b3R5cGUuX3Jlc2V0TGF5b3V0LmNhbGwoIHRoaXMgKTtcbiAgICB0aGlzLl9tb2RlKCkuX3Jlc2V0TGF5b3V0KCk7XG4gIH07XG5cbiAgcHJvdG8uX2dldEl0ZW1MYXlvdXRQb3NpdGlvbiA9IGZ1bmN0aW9uKCBpdGVtICApIHtcbiAgICByZXR1cm4gdGhpcy5fbW9kZSgpLl9nZXRJdGVtTGF5b3V0UG9zaXRpb24oIGl0ZW0gKTtcbiAgfTtcblxuICBwcm90by5fbWFuYWdlU3RhbXAgPSBmdW5jdGlvbiggc3RhbXAgKSB7XG4gICAgdGhpcy5fbW9kZSgpLl9tYW5hZ2VTdGFtcCggc3RhbXAgKTtcbiAgfTtcblxuICBwcm90by5fZ2V0Q29udGFpbmVyU2l6ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9tb2RlKCkuX2dldENvbnRhaW5lclNpemUoKTtcbiAgfTtcblxuICBwcm90by5uZWVkc1Jlc2l6ZUxheW91dCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9tb2RlKCkubmVlZHNSZXNpemVMYXlvdXQoKTtcbiAgfTtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBhZGRpbmcgJiByZW1vdmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG4gIC8vIEhFQURTIFVQIG92ZXJ3cml0ZXMgZGVmYXVsdCBPdXRsYXllciBhcHBlbmRlZFxuICBwcm90by5hcHBlbmRlZCA9IGZ1bmN0aW9uKCBlbGVtcyApIHtcbiAgICB2YXIgaXRlbXMgPSB0aGlzLmFkZEl0ZW1zKCBlbGVtcyApO1xuICAgIGlmICggIWl0ZW1zLmxlbmd0aCApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gZmlsdGVyLCBsYXlvdXQsIHJldmVhbCBuZXcgaXRlbXNcbiAgICB2YXIgZmlsdGVyZWRJdGVtcyA9IHRoaXMuX2ZpbHRlclJldmVhbEFkZGVkKCBpdGVtcyApO1xuICAgIC8vIGFkZCB0byBmaWx0ZXJlZEl0ZW1zXG4gICAgdGhpcy5maWx0ZXJlZEl0ZW1zID0gdGhpcy5maWx0ZXJlZEl0ZW1zLmNvbmNhdCggZmlsdGVyZWRJdGVtcyApO1xuICB9O1xuXG4gIC8vIEhFQURTIFVQIG92ZXJ3cml0ZXMgZGVmYXVsdCBPdXRsYXllciBwcmVwZW5kZWRcbiAgcHJvdG8ucHJlcGVuZGVkID0gZnVuY3Rpb24oIGVsZW1zICkge1xuICAgIHZhciBpdGVtcyA9IHRoaXMuX2l0ZW1pemUoIGVsZW1zICk7XG4gICAgaWYgKCAhaXRlbXMubGVuZ3RoICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBzdGFydCBuZXcgbGF5b3V0XG4gICAgdGhpcy5fcmVzZXRMYXlvdXQoKTtcbiAgICB0aGlzLl9tYW5hZ2VTdGFtcHMoKTtcbiAgICAvLyBmaWx0ZXIsIGxheW91dCwgcmV2ZWFsIG5ldyBpdGVtc1xuICAgIHZhciBmaWx0ZXJlZEl0ZW1zID0gdGhpcy5fZmlsdGVyUmV2ZWFsQWRkZWQoIGl0ZW1zICk7XG4gICAgLy8gbGF5b3V0IHByZXZpb3VzIGl0ZW1zXG4gICAgdGhpcy5sYXlvdXRJdGVtcyggdGhpcy5maWx0ZXJlZEl0ZW1zICk7XG4gICAgLy8gYWRkIHRvIGl0ZW1zIGFuZCBmaWx0ZXJlZEl0ZW1zXG4gICAgdGhpcy5maWx0ZXJlZEl0ZW1zID0gZmlsdGVyZWRJdGVtcy5jb25jYXQoIHRoaXMuZmlsdGVyZWRJdGVtcyApO1xuICAgIHRoaXMuaXRlbXMgPSBpdGVtcy5jb25jYXQoIHRoaXMuaXRlbXMgKTtcbiAgfTtcblxuICBwcm90by5fZmlsdGVyUmV2ZWFsQWRkZWQgPSBmdW5jdGlvbiggaXRlbXMgKSB7XG4gICAgdmFyIGZpbHRlcmVkID0gdGhpcy5fZmlsdGVyKCBpdGVtcyApO1xuICAgIHRoaXMuaGlkZSggZmlsdGVyZWQubmVlZEhpZGUgKTtcbiAgICAvLyByZXZlYWwgYWxsIG5ldyBpdGVtc1xuICAgIHRoaXMucmV2ZWFsKCBmaWx0ZXJlZC5tYXRjaGVzICk7XG4gICAgLy8gbGF5b3V0IG5ldyBpdGVtcywgbm8gdHJhbnNpdGlvblxuICAgIHRoaXMubGF5b3V0SXRlbXMoIGZpbHRlcmVkLm1hdGNoZXMsIHRydWUgKTtcbiAgICByZXR1cm4gZmlsdGVyZWQubWF0Y2hlcztcbiAgfTtcblxuICAvKipcbiAgICogRmlsdGVyLCBzb3J0LCBhbmQgbGF5b3V0IG5ld2x5LWFwcGVuZGVkIGl0ZW0gZWxlbWVudHNcbiAgICogQHBhcmFtIHtBcnJheSBvciBOb2RlTGlzdCBvciBFbGVtZW50fSBlbGVtc1xuICAgKi9cbiAgcHJvdG8uaW5zZXJ0ID0gZnVuY3Rpb24oIGVsZW1zICkge1xuICAgIHZhciBpdGVtcyA9IHRoaXMuYWRkSXRlbXMoIGVsZW1zICk7XG4gICAgaWYgKCAhaXRlbXMubGVuZ3RoICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBhcHBlbmQgaXRlbSBlbGVtZW50c1xuICAgIHZhciBpLCBpdGVtO1xuICAgIHZhciBsZW4gPSBpdGVtcy5sZW5ndGg7XG4gICAgZm9yICggaT0wOyBpIDwgbGVuOyBpKysgKSB7XG4gICAgICBpdGVtID0gaXRlbXNbaV07XG4gICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoIGl0ZW0uZWxlbWVudCApO1xuICAgIH1cbiAgICAvLyBmaWx0ZXIgbmV3IHN0dWZmXG4gICAgdmFyIGZpbHRlcmVkSW5zZXJ0SXRlbXMgPSB0aGlzLl9maWx0ZXIoIGl0ZW1zICkubWF0Y2hlcztcbiAgICAvLyBzZXQgZmxhZ1xuICAgIGZvciAoIGk9MDsgaSA8IGxlbjsgaSsrICkge1xuICAgICAgaXRlbXNbaV0uaXNMYXlvdXRJbnN0YW50ID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5hcnJhbmdlKCk7XG4gICAgLy8gcmVzZXQgZmxhZ1xuICAgIGZvciAoIGk9MDsgaSA8IGxlbjsgaSsrICkge1xuICAgICAgZGVsZXRlIGl0ZW1zW2ldLmlzTGF5b3V0SW5zdGFudDtcbiAgICB9XG4gICAgdGhpcy5yZXZlYWwoIGZpbHRlcmVkSW5zZXJ0SXRlbXMgKTtcbiAgfTtcblxuICB2Y
118XIgX3JlbW92ZSA9IHByb3RvLnJlbW92ZTtcbiAgcHJvdG8ucmVtb3ZlID0gZnVuY3Rpb24oIGVsZW1zICkge1xuICAgIGVsZW1zID0gdXRpbHMubWFrZUFycmF5KCBlbGVtcyApO1xuICAgIHZhciByZW1vdmVJdGVtcyA9IHRoaXMuZ2V0SXRlbXMoIGVsZW1zICk7XG4gICAgLy8gZG8gcmVndWxhciB0aGluZ1xuICAgIF9yZW1vdmUuY2FsbCggdGhpcywgZWxlbXMgKTtcbiAgICAvLyBiYWlsIGlmIG5vIGl0ZW1zIHRvIHJlbW92ZVxuICAgIHZhciBsZW4gPSByZW1vdmVJdGVtcyAmJiByZW1vdmVJdGVtcy5sZW5ndGg7XG4gICAgLy8gcmVtb3ZlIGVsZW1zIGZyb20gZmlsdGVyZWRJdGVtc1xuICAgIGZvciAoIHZhciBpPTA7IGxlbiAmJiBpIDwgbGVuOyBpKysgKSB7XG4gICAgICB2YXIgaXRlbSA9IHJlbW92ZUl0ZW1zW2ldO1xuICAgICAgLy8gcmVtb3ZlIGl0ZW0gZnJvbSBjb2xsZWN0aW9uXG4gICAgICB1dGlscy5yZW1vdmVGcm9tKCB0aGlzLmZpbHRlcmVkSXRlbXMsIGl0ZW0gKTtcbiAgICB9XG4gIH07XG5cbiAgcHJvdG8uc2h1ZmZsZSA9IGZ1bmN0aW9uKCkge1xuICAgIC8vIHVwZGF0ZSByYW5kb20gc29ydERhdGFcbiAgICBmb3IgKCB2YXIgaT0wOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKyApIHtcbiAgICAgIHZhciBpdGVtID0gdGhpcy5pdGVtc1tpXTtcbiAgICAgIGl0ZW0uc29ydERhdGEucmFuZG9tID0gTWF0aC5yYW5kb20oKTtcbiAgICB9XG4gICAgdGhpcy5vcHRpb25zLnNvcnRCeSA9ICdyYW5kb20nO1xuICAgIHRoaXMuX3NvcnQoKTtcbiAgICB0aGlzLl9sYXlvdXQoKTtcbiAgfTtcblxuICAvKipcbiAgICogdHJpZ2dlciBmbiB3aXRob3V0IHRyYW5zaXRpb25cbiAgICoga2luZCBvZiBoYWNreSB0byBoYXZlIHRoaXMgaW4gdGhlIGZpcnN0IHBsYWNlXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFyZ3NcbiAgICogQHJldHVybnMgcmV0XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcm90by5fbm9UcmFuc2l0aW9uID0gZnVuY3Rpb24oIGZuLCBhcmdzICkge1xuICAgIC8vIHNhdmUgdHJhbnNpdGlvbkR1cmF0aW9uIGJlZm9yZSBkaXNhYmxpbmdcbiAgICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9uID0gdGhpcy5vcHRpb25zLnRyYW5zaXRpb25EdXJhdGlvbjtcbiAgICAvLyBkaXNhYmxlIHRyYW5zaXRpb25cbiAgICB0aGlzLm9wdGlvbnMudHJhbnNpdGlvbkR1cmF0aW9uID0gMDtcbiAgICAvLyBkbyBpdFxuICAgIHZhciByZXR1cm5WYWx1ZSA9IGZuLmFwcGx5KCB0aGlzLCBhcmdzICk7XG4gICAgLy8gcmUtZW5hYmxlIHRyYW5zaXRpb24gZm9yIHJldmVhbFxuICAgIHRoaXMub3B0aW9ucy50cmFuc2l0aW9uRHVyYXRpb24gPSB0cmFuc2l0aW9uRHVyYXRpb247XG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICB9O1xuXG4gIC8vIC0tLS0tIGhlbHBlciBtZXRob2RzIC0tLS0tIC8vXG5cbiAgLyoqXG4gICAqIGdldHRlciBtZXRob2QgZm9yIGdldHRpbmcgZmlsdGVyZWQgaXRlbSBlbGVtZW50c1xuICAgKiBAcmV0dXJucyB7QXJyYXl9IGVsZW1zIC0gY29sbGVjdGlvbiBvZiBpdGVtIGVsZW1lbnRzXG4gICAqL1xuICBwcm90by5nZXRGaWx0ZXJlZEl0ZW1FbGVtZW50cyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmZpbHRlcmVkSXRlbXMubWFwKCBmdW5jdGlvbiggaXRlbSApIHtcbiAgICAgIHJldHVybiBpdGVtLmVsZW1lbnQ7XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gLS0tLS0gIC0tLS0tIC8vXG5cbiAgcmV0dXJuIElzb3RvcGU7XG5cbn0pKTtcbiIsIi8qKlxuICogSXNvdG9wZSBJdGVtXG4qKi9cblxuKCBmdW5jdGlvbiggd2luZG93LCBmYWN0b3J5ICkge1xuICAvLyB1bml2ZXJzYWwgbW9kdWxlIGRlZmluaXRpb25cbiAgLyoganNoaW50IHN0cmljdDogZmFsc2UgKi8gLypnbG9iYWxzIGRlZmluZSwgbW9kdWxlLCByZXF1aXJlICovXG4gIGlmICggdHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgKSB7XG4gICAgLy8gQU1EXG4gICAgZGVmaW5lKCBbXG4gICAgICAgICdvdXRsYXllci9vdXRsYXllcidcbiAgICAgIF0sXG4gICAgICBmYWN0b3J5ICk7XG4gIH0gZWxzZSBpZiAoIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMgKSB7XG4gICAgLy8gQ29tbW9uSlNcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoXG4gICAgICByZXF1aXJlKCdvdXRsYXllcicpXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBicm93c2VyIGdsb2JhbFxuICAgIHdpbmRvdy5Jc290b3BlID0gd2luZG93Lklzb3RvcGUgfHwge307XG4gICAgd2luZG93Lklzb3RvcGUuSXRlbSA9IGZhY3RvcnkoXG4gICAgICB3aW5kb3cuT3V0bGF5ZXJcbiAgICApO1xuICB9XG5cbn0oIHdpbmRvdywgZnVuY3Rpb24gZmFjdG9yeSggT3V0bGF5ZXIgKSB7XG4ndXNlIHN0cmljdCc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEl0ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLy9cblxuLy8gc3ViLWNsYXNzIE91dGxheWVyIEl0ZW1cbmZ1bmN0aW9uIEl0ZW0oKSB7XG4gIE91dGxheWVyLkl0ZW0uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xufVxuXG52YXIgcHJvdG8gPSBJdGVtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIE91dGxheWVyLkl0ZW0ucHJvdG90eXBlICk7XG5cbnZhciBfY3JlYXRlID0gcHJvdG8uX2NyZWF0ZTtcbnByb3RvLl9jcmVhdGUgPSBmdW5jdGlvbigpIHtcbiAgLy8gYXNzaWduIGlkLCB1c2VkIGZvciBvcmlnaW5hbC1vcmRlciBzb3J0aW5nXG4gIHRoaXMuaWQgPSB0aGlzLmxheW91dC5pdGVtR1VJRCsrO1xuICBfY3JlYXRlLmNhbGwoIHRoaXMgKTtcbiAgdGhpcy5zb3J0RGF0YSA9IHt9O1xufTtcblxucHJvdG8udXBkYXRlU29ydERhdGEgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCB0aGlzLmlzSWdub3JlZCApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gZGVmYXVsdCBzb3J0ZXJzXG4gIHRoaXMuc29ydERhdGEuaWQgPSB0aGlzLmlkO1xuICAvLyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICB0aGlzLnNvcnREYXRhWydvcmlnaW5hbC1vcmRlciddID0gdGh
118pcy5pZDtcbiAgdGhpcy5zb3J0RGF0YS5yYW5kb20gPSBNYXRoLnJhbmRvbSgpO1xuICAvLyBnbyB0aHJ1IGdldFNvcnREYXRhIG9iaiBhbmQgYXBwbHkgdGhlIHNvcnRlcnNcbiAgdmFyIGdldFNvcnREYXRhID0gdGhpcy5sYXlvdXQub3B0aW9ucy5nZXRTb3J0RGF0YTtcbiAgdmFyIHNvcnRlcnMgPSB0aGlzLmxheW91dC5fc29ydGVycztcbiAgZm9yICggdmFyIGtleSBpbiBnZXRTb3J0RGF0YSApIHtcbiAgICB2YXIgc29ydGVyID0gc29ydGVyc1sga2V5IF07XG4gICAgdGhpcy5zb3J0RGF0YVsga2V5IF0gPSBzb3J0ZXIoIHRoaXMuZWxlbWVudCwgdGhpcyApO1xuICB9XG59O1xuXG52YXIgX2Rlc3Ryb3kgPSBwcm90by5kZXN0cm95O1xucHJvdG8uZGVzdHJveSA9IGZ1bmN0aW9uKCkge1xuICAvLyBjYWxsIHN1cGVyXG4gIF9kZXN0cm95LmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcbiAgLy8gcmVzZXQgZGlzcGxheSwgIzc0MVxuICB0aGlzLmNzcyh7XG4gICAgZGlzcGxheTogJydcbiAgfSk7XG59O1xuXG5yZXR1cm4gSXRlbTtcblxufSkpO1xuIiwiLyoqXG4gKiBJc290b3BlIExheW91dE1vZGVcbiAqL1xuXG4oIGZ1bmN0aW9uKCB3aW5kb3csIGZhY3RvcnkgKSB7XG4gIC8vIHVuaXZlcnNhbCBtb2R1bGUgZGVmaW5pdGlvblxuICAvKiBqc2hpbnQgc3RyaWN0OiBmYWxzZSAqLyAvKmdsb2JhbHMgZGVmaW5lLCBtb2R1bGUsIHJlcXVpcmUgKi9cbiAgaWYgKCB0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCApIHtcbiAgICAvLyBBTURcbiAgICBkZWZpbmUoIFtcbiAgICAgICAgJ2dldC1zaXplL2dldC1zaXplJyxcbiAgICAgICAgJ291dGxheWVyL291dGxheWVyJ1xuICAgICAgXSxcbiAgICAgIGZhY3RvcnkgKTtcbiAgfSBlbHNlIGlmICggdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cyApIHtcbiAgICAvLyBDb21tb25KU1xuICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShcbiAgICAgIHJlcXVpcmUoJ2dldC1zaXplJyksXG4gICAgICByZXF1aXJlKCdvdXRsYXllcicpXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBicm93c2VyIGdsb2JhbFxuICAgIHdpbmRvdy5Jc290b3BlID0gd2luZG93Lklzb3RvcGUgfHwge307XG4gICAgd2luZG93Lklzb3RvcGUuTGF5b3V0TW9kZSA9IGZhY3RvcnkoXG4gICAgICB3aW5kb3cuZ2V0U2l6ZSxcbiAgICAgIHdpbmRvdy5PdXRsYXllclxuICAgICk7XG4gIH1cblxufSggd2luZG93LCBmdW5jdGlvbiBmYWN0b3J5KCBnZXRTaXplLCBPdXRsYXllciApIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIC8vIGxheW91dCBtb2RlIGNsYXNzXG4gIGZ1bmN0aW9uIExheW91dE1vZGUoIGlzb3RvcGUgKSB7XG4gICAgdGhpcy5pc290b3BlID0gaXNvdG9wZTtcbiAgICAvLyBsaW5rIHByb3BlcnRpZXNcbiAgICBpZiAoIGlzb3RvcGUgKSB7XG4gICAgICB0aGlzLm9wdGlvbnMgPSBpc290b3BlLm9wdGlvbnNbIHRoaXMubmFtZXNwYWNlIF07XG4gICAgICB0aGlzLmVsZW1lbnQgPSBpc290b3BlLmVsZW1lbnQ7XG4gICAgICB0aGlzLml0ZW1zID0gaXNvdG9wZS5maWx0ZXJlZEl0ZW1zO1xuICAgICAgdGhpcy5zaXplID0gaXNvdG9wZS5zaXplO1xuICAgIH1cbiAgfVxuXG4gIHZhciBwcm90byA9IExheW91dE1vZGUucHJvdG90eXBlO1xuXG4gIC8qKlxuICAgKiBzb21lIG1ldGhvZHMgc2hvdWxkIGp1c3QgZGVmZXIgdG8gZGVmYXVsdCBPdXRsYXllciBtZXRob2RcbiAgICogYW5kIHJlZmVyZW5jZSB0aGUgSXNvdG9wZSBpbnN0YW5jZSBhcyBgdGhpc2BcbiAgKiovXG4gIHZhciBmYWNhZGVNZXRob2RzID0gW1xuICAgICdfcmVzZXRMYXlvdXQnLFxuICAgICdfZ2V0SXRlbUxheW91dFBvc2l0aW9uJyxcbiAgICAnX21hbmFnZVN0YW1wJyxcbiAgICAnX2dldENvbnRhaW5lclNpemUnLFxuICAgICdfZ2V0RWxlbWVudE9mZnNldCcsXG4gICAgJ25lZWRzUmVzaXplTGF5b3V0JyxcbiAgICAnX2dldE9wdGlvbidcbiAgXTtcblxuICBmYWNhZGVNZXRob2RzLmZvckVhY2goIGZ1bmN0aW9uKCBtZXRob2ROYW1lICkge1xuICAgIHByb3RvWyBtZXRob2ROYW1lIF0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBPdXRsYXllci5wcm90b3R5cGVbIG1ldGhvZE5hbWUgXS5hcHBseSggdGhpcy5pc290b3BlLCBhcmd1bWVudHMgKTtcbiAgICB9O1xuICB9KTtcblxuICAvLyAtLS0tLSAgLS0tLS0gLy9cblxuICAvLyBmb3IgaG9yaXpvbnRhbCBsYXlvdXQgbW9kZXMsIGNoZWNrIHZlcnRpY2FsIHNpemVcbiAgcHJvdG8ubmVlZHNWZXJ0aWNhbFJlc2l6ZUxheW91dCA9IGZ1bmN0aW9uKCkge1xuICAgIC8vIGRvbid0IHRyaWdnZXIgaWYgc2l6ZSBkaWQgbm90IGNoYW5nZVxuICAgIHZhciBzaXplID0gZ2V0U2l6ZSggdGhpcy5pc290b3BlLmVsZW1lbnQgKTtcbiAgICAvLyBjaGVjayB0aGF0IHRoaXMuc2l6ZSBhbmQgc2l6ZSBhcmUgdGhlcmVcbiAgICAvLyBJRTggdHJpZ2dlcnMgcmVzaXplIG9uIGJvZHkgc2l6ZSBjaGFuZ2UsIHNvIHRoZXkgbWlnaHQgbm90IGJlXG4gICAgdmFyIGhhc1NpemVzID0gdGhpcy5pc290b3BlLnNpemUgJiYgc2l6ZTtcbiAgICByZXR1cm4gaGFzU2l6ZXMgJiYgc2l6ZS5pbm5lckhlaWdodCAhPSB0aGlzLmlzb3RvcGUuc2l6ZS5pbm5lckhlaWdodDtcbiAgfTtcblxuICAvLyAtLS0tLSBtZWFzdXJlbWVudHMgLS0tLS0gLy9cblxuICBwcm90by5fZ2V0TWVhc3VyZW1lbnQgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlzb3RvcGUuX2dldE1lYXN1cmVtZW50LmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcbiAgfTtcblxuICBwcm90by5nZXRDb2x1bW5XaWR0aCA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuZ2V0U2VnbWVudFNpemUoICdjb2x1bW4nLCAnV2lkdGgnICk7XG4gIH07XG5cbiAgcHJvdG8uZ2V0Um93SGVpZ2h0ID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5nZXRTZWdtZW50U2l6ZSggJ3JvdycsICdIZWlnaHQnICk7XG4gIH07XG5cbiAgLyoqXG4gICAqIGdldCBjb2x1bW5XaWR0aCBvciByb3dIZWlnaHRcbiAgICogc2VnbWVudDogJ2NvbHVtbicgb3IgJ3JvdydcbiAgICogc2l6ZSAnV2lkdGgnIG9yICdIZWlnaHQnXG4gICoqL1xuICBwcm90by5nZXRTZWdtZW50U2l6ZSA9IGZ1bmN0aW9uKCBzZWdtZW50LCBzaXplICkge1xuICAgIHZhciBzZWdtZW50TmFtZSA9IHNlZ21lbnQgKyBzaXplO1xuICAgIHZhciBvdXRlclNpemUgPSAnb3V0
118ZXInICsgc2l6ZTtcbiAgICAvLyBjb2x1bW5XaWR0aCAvIG91dGVyV2lkdGggLy8gcm93SGVpZ2h0IC8gb3V0ZXJIZWlnaHRcbiAgICB0aGlzLl9nZXRNZWFzdXJlbWVudCggc2VnbWVudE5hbWUsIG91dGVyU2l6ZSApO1xuICAgIC8vIGdvdCByb3dIZWlnaHQgb3IgY29sdW1uV2lkdGgsIHdlIGNhbiBjaGlsbFxuICAgIGlmICggdGhpc1sgc2VnbWVudE5hbWUgXSApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gZmFsbCBiYWNrIHRvIGl0ZW0gb2YgZmlyc3QgZWxlbWVudFxuICAgIHZhciBmaXJzdEl0ZW1TaXplID0gdGhpcy5nZXRGaXJzdEl0ZW1TaXplKCk7XG4gICAgdGhpc1sgc2VnbWVudE5hbWUgXSA9IGZpcnN0SXRlbVNpemUgJiYgZmlyc3RJdGVtU2l6ZVsgb3V0ZXJTaXplIF0gfHxcbiAgICAgIC8vIG9yIHNpemUgb2YgY29udGFpbmVyXG4gICAgICB0aGlzLmlzb3RvcGUuc2l6ZVsgJ2lubmVyJyArIHNpemUgXTtcbiAgfTtcblxuICBwcm90by5nZXRGaXJzdEl0ZW1TaXplID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGZpcnN0SXRlbSA9IHRoaXMuaXNvdG9wZS5maWx0ZXJlZEl0ZW1zWzBdO1xuICAgIHJldHVybiBmaXJzdEl0ZW0gJiYgZmlyc3RJdGVtLmVsZW1lbnQgJiYgZ2V0U2l6ZSggZmlyc3RJdGVtLmVsZW1lbnQgKTtcbiAgfTtcblxuICAvLyAtLS0tLSBtZXRob2RzIHRoYXQgc2hvdWxkIHJlZmVyZW5jZSBpc290b3BlIC0tLS0tIC8vXG5cbiAgcHJvdG8ubGF5b3V0ID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5pc290b3BlLmxheW91dC5hcHBseSggdGhpcy5pc290b3BlLCBhcmd1bWVudHMgKTtcbiAgfTtcblxuICBwcm90by5nZXRTaXplID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5pc290b3BlLmdldFNpemUoKTtcbiAgICB0aGlzLnNpemUgPSB0aGlzLmlzb3RvcGUuc2l6ZTtcbiAgfTtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBjcmVhdGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLy9cblxuICBMYXlvdXRNb2RlLm1vZGVzID0ge307XG5cbiAgTGF5b3V0TW9kZS5jcmVhdGUgPSBmdW5jdGlvbiggbmFtZXNwYWNlLCBvcHRpb25zICkge1xuXG4gICAgZnVuY3Rpb24gTW9kZSgpIHtcbiAgICAgIExheW91dE1vZGUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuICAgIH1cblxuICAgIE1vZGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggcHJvdG8gKTtcbiAgICBNb2RlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1vZGU7XG5cbiAgICAvLyBkZWZhdWx0IG9wdGlvbnNcbiAgICBpZiAoIG9wdGlvbnMgKSB7XG4gICAgICBNb2RlLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIH1cblxuICAgIE1vZGUucHJvdG90eXBlLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTtcbiAgICAvLyByZWdpc3RlciBpbiBJc290b3BlXG4gICAgTGF5b3V0TW9kZS5tb2Rlc1sgbmFtZXNwYWNlIF0gPSBNb2RlO1xuXG4gICAgcmV0dXJuIE1vZGU7XG4gIH07XG5cbiAgcmV0dXJuIExheW91dE1vZGU7XG5cbn0pKTtcbiIsIi8qKlxuICogZml0Um93cyBsYXlvdXQgbW9kZVxuICovXG5cbiggZnVuY3Rpb24oIHdpbmRvdywgZmFjdG9yeSApIHtcbiAgLy8gdW5pdmVyc2FsIG1vZHVsZSBkZWZpbml0aW9uXG4gIC8qIGpzaGludCBzdHJpY3Q6IGZhbHNlICovIC8qZ2xvYmFscyBkZWZpbmUsIG1vZHVsZSwgcmVxdWlyZSAqL1xuICBpZiAoIHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kICkge1xuICAgIC8vIEFNRFxuICAgIGRlZmluZSggW1xuICAgICAgICAnLi4vbGF5b3V0LW1vZGUnXG4gICAgICBdLFxuICAgICAgZmFjdG9yeSApO1xuICB9IGVsc2UgaWYgKCB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyApIHtcbiAgICAvLyBDb21tb25KU1xuICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShcbiAgICAgIHJlcXVpcmUoJy4uL2xheW91dC1tb2RlJylcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIC8vIGJyb3dzZXIgZ2xvYmFsXG4gICAgZmFjdG9yeShcbiAgICAgIHdpbmRvdy5Jc290b3BlLkxheW91dE1vZGVcbiAgICApO1xuICB9XG5cbn0oIHdpbmRvdywgZnVuY3Rpb24gZmFjdG9yeSggTGF5b3V0TW9kZSApIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIEZpdFJvd3MgPSBMYXlvdXRNb2RlLmNyZWF0ZSgnZml0Um93cycpO1xuXG52YXIgcHJvdG8gPSBGaXRSb3dzLnByb3RvdHlwZTtcblxucHJvdG8uX3Jlc2V0TGF5b3V0ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMueCA9IDA7XG4gIHRoaXMueSA9IDA7XG4gIHRoaXMubWF4WSA9IDA7XG4gIHRoaXMuX2dldE1lYXN1cmVtZW50KCAnZ3V0dGVyJywgJ291dGVyV2lkdGgnICk7XG59O1xuXG5wcm90by5fZ2V0SXRlbUxheW91dFBvc2l0aW9uID0gZnVuY3Rpb24oIGl0ZW0gKSB7XG4gIGl0ZW0uZ2V0U2l6ZSgpO1xuXG4gIHZhciBpdGVtV2lkdGggPSBpdGVtLnNpemUub3V0ZXJXaWR0aCArIHRoaXMuZ3V0dGVyO1xuICAvLyBpZiB0aGlzIGVsZW1lbnQgY2Fubm90IGZpdCBpbiB0aGUgY3VycmVudCByb3dcbiAgdmFyIGNvbnRhaW5lcldpZHRoID0gdGhpcy5pc290b3BlLnNpemUuaW5uZXJXaWR0aCArIHRoaXMuZ3V0dGVyO1xuICBpZiAoIHRoaXMueCAhPT0gMCAmJiBpdGVtV2lkdGggKyB0aGlzLnggPiBjb250YWluZXJXaWR0aCApIHtcbiAgICB0aGlzLnggPSAwO1xuICAgIHRoaXMueSA9IHRoaXMubWF4WTtcbiAgfVxuXG4gIHZhciBwb3NpdGlvbiA9IHtcbiAgICB4OiB0aGlzLngsXG4gICAgeTogdGhpcy55XG4gIH07XG5cbiAgdGhpcy5tYXhZID0gTWF0aC5tYXgoIHRoaXMubWF4WSwgdGhpcy55ICsgaXRlbS5zaXplLm91dGVySGVpZ2h0ICk7XG4gIHRoaXMueCArPSBpdGVtV2lkdGg7XG5cbiAgcmV0dXJuIHBvc2l0aW9uO1xufTtcblxucHJvdG8uX2dldENvbnRhaW5lclNpemUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHsgaGVpZ2h0OiB0aGlzLm1heFkgfTtcbn07XG5cbnJldHVybiBGaXRSb3dzO1xuXG59KSk7XG4iLCIvKiFcbiAqIE1hc29ucnkgbGF5b3V0IG1vZGVcbiAqIHN1Yi1jbGFzc2VzIE1hc29ucnlcbiAqIGh0dHBzOi8vbWFzb25yeS5kZXNhbmRyby5jb21cbiAqL1xuXG4oIGZ1bmN0aW9uKCB3aW5kb3csIGZhY3RvcnkgKSB7XG4gIC8vIHVuaXZlcnNhbCBtb2R1bGUgZGVmaW5pdGlvblxuICAvKiBqc2hpbnQgc3RyaWN0OiBmYWxzZSAqLyAvKmdsb2JhbHMgZGVmaW5lLCBtb2R1bGUsIHJlcXVpcmUgKi9cbiAgaWYgKCB0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCApIHtcbiAgICAvLyBBTURcbiAgICBkZWZpbmUoIFtcbiAgICAgICAgJy4uL2xheW91dC1tb2RlJyxcbiAgICAgICAgJ21hc29ucnktbGF5b3V0L21hc29ucnknXG4gICAgICBdLFxuICAgICAgZmFjdG9yeSApO1xuICB9IGVsc2UgaWYgKCB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzICkge1xuICAgIC8vIENvbW1vbkpTXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KFxuICAgICAgcmVxdWlyZSgnLi4vbGF5b3V0LW1vZGUnKSxcbiAgICAgIHJlcXVpcmUoJ21hc29ucnktbGF5b3V0JylcbiAgICApO
1181xuICB9IGVsc2Uge1xuICAgIC8vIGJyb3dzZXIgZ2xvYmFsXG4gICAgZmFjdG9yeShcbiAgICAgIHdpbmRvdy5Jc290b3BlLkxheW91dE1vZGUsXG4gICAgICB3aW5kb3cuTWFzb25yeVxuICAgICk7XG4gIH1cblxufSggd2luZG93LCBmdW5jdGlvbiBmYWN0b3J5KCBMYXlvdXRNb2RlLCBNYXNvbnJ5ICkge1xuJ3VzZSBzdHJpY3QnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtYXNvbnJ5RGVmaW5pdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG4gIC8vIGNyZWF0ZSBhbiBPdXRsYXllciBsYXlvdXQgY2xhc3NcbiAgdmFyIE1hc29ucnlNb2RlID0gTGF5b3V0TW9kZS5jcmVhdGUoJ21hc29ucnknKTtcblxuICB2YXIgcHJvdG8gPSBNYXNvbnJ5TW9kZS5wcm90b3R5cGU7XG5cbiAgdmFyIGtlZXBNb2RlTWV0aG9kcyA9IHtcbiAgICBfZ2V0RWxlbWVudE9mZnNldDogdHJ1ZSxcbiAgICBsYXlvdXQ6IHRydWUsXG4gICAgX2dldE1lYXN1cmVtZW50OiB0cnVlXG4gIH07XG5cbiAgLy8gaW5oZXJpdCBNYXNvbnJ5IHByb3RvdHlwZVxuICBmb3IgKCB2YXIgbWV0aG9kIGluIE1hc29ucnkucHJvdG90eXBlICkge1xuICAgIC8vIGRvIG5vdCBpbmhlcml0IG1vZGUgbWV0aG9kc1xuICAgIGlmICggIWtlZXBNb2RlTWV0aG9kc1sgbWV0aG9kIF0gKSB7XG4gICAgICBwcm90b1sgbWV0aG9kIF0gPSBNYXNvbnJ5LnByb3RvdHlwZVsgbWV0aG9kIF07XG4gICAgfVxuICB9XG5cbiAgdmFyIG1lYXN1cmVDb2x1bW5zID0gcHJvdG8ubWVhc3VyZUNvbHVtbnM7XG4gIHByb3RvLm1lYXN1cmVDb2x1bW5zID0gZnVuY3Rpb24oKSB7XG4gICAgLy8gc2V0IGl0ZW1zLCB1c2VkIGlmIG1lYXN1cmluZyBmaXJzdCBpdGVtXG4gICAgdGhpcy5pdGVtcyA9IHRoaXMuaXNvdG9wZS5maWx0ZXJlZEl0ZW1zO1xuICAgIG1lYXN1cmVDb2x1bW5zLmNhbGwoIHRoaXMgKTtcbiAgfTtcblxuICAvLyBwb2ludCB0byBtb2RlIG9wdGlvbnMgZm9yIGZpdFdpZHRoXG4gIHZhciBfZ2V0T3B0aW9uID0gcHJvdG8uX2dldE9wdGlvbjtcbiAgcHJvdG8uX2dldE9wdGlvbiA9IGZ1bmN0aW9uKCBvcHRpb24gKSB7XG4gICAgaWYgKCBvcHRpb24gPT0gJ2ZpdFdpZHRoJyApIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuaXNGaXRXaWR0aCAhPT0gdW5kZWZpbmVkID9cbiAgICAgICAgdGhpcy5vcHRpb25zLmlzRml0V2lkdGggOiB0aGlzLm9wdGlvbnMuZml0V2lkdGg7XG4gICAgfVxuICAgIHJldHVybiBfZ2V0T3B0aW9uLmFwcGx5KCB0aGlzLmlzb3RvcGUsIGFyZ3VtZW50cyApO1xuICB9O1xuXG4gIHJldHVybiBNYXNvbnJ5TW9kZTtcblxufSkpO1xuIiwiLyoqXG4gKiB2ZXJ0aWNhbCBsYXlvdXQgbW9kZVxuICovXG5cbiggZnVuY3Rpb24oIHdpbmRvdywgZmFjdG9yeSApIHtcbiAgLy8gdW5pdmVyc2FsIG1vZHVsZSBkZWZpbml0aW9uXG4gIC8qIGpzaGludCBzdHJpY3Q6IGZhbHNlICovIC8qZ2xvYmFscyBkZWZpbmUsIG1vZHVsZSwgcmVxdWlyZSAqL1xuICBpZiAoIHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kICkge1xuICAgIC8vIEFNRFxuICAgIGRlZmluZSggW1xuICAgICAgICAnLi4vbGF5b3V0LW1vZGUnXG4gICAgICBdLFxuICAgICAgZmFjdG9yeSApO1xuICB9IGVsc2UgaWYgKCB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzICkge1xuICAgIC8vIENvbW1vbkpTXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KFxuICAgICAgcmVxdWlyZSgnLi4vbGF5b3V0LW1vZGUnKVxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgLy8gYnJvd3NlciBnbG9iYWxcbiAgICBmYWN0b3J5KFxuICAgICAgd2luZG93Lklzb3RvcGUuTGF5b3V0TW9kZVxuICAgICk7XG4gIH1cblxufSggd2luZG93LCBmdW5jdGlvbiBmYWN0b3J5KCBMYXlvdXRNb2RlICkge1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgVmVydGljYWwgPSBMYXlvdXRNb2RlLmNyZWF0ZSggJ3ZlcnRpY2FsJywge1xuICBob3Jpem9udGFsQWxpZ25tZW50OiAwXG59KTtcblxudmFyIHByb3RvID0gVmVydGljYWwucHJvdG90eXBlO1xuXG5wcm90by5fcmVzZXRMYXlvdXQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy55ID0gMDtcbn07XG5cbnByb3RvLl9nZXRJdGVtTGF5b3V0UG9zaXRpb24gPSBmdW5jdGlvbiggaXRlbSApIHtcbiAgaXRlbS5nZXRTaXplKCk7XG4gIHZhciB4ID0gKCB0aGlzLmlzb3RvcGUuc2l6ZS5pbm5lcldpZHRoIC0gaXRlbS5zaXplLm91dGVyV2lkdGggKSAqXG4gICAgdGhpcy5vcHRpb25zLmhvcml6b250YWxBbGlnbm1lbnQ7XG4gIHZhciB5ID0gdGhpcy55O1xuICB0aGlzLnkgKz0gaXRlbS5zaXplLm91dGVySGVpZ2h0O1xuICByZXR1cm4geyB4OiB4LCB5OiB5IH07XG59O1xuXG5wcm90by5fZ2V0Q29udGFpbmVyU2l6ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4geyBoZWlnaHQ6IHRoaXMueSB9O1xufTtcblxucmV0dXJuIFZlcnRpY2FsO1xuXG59KSk7XG4iLCIvKiFcbiAqIE1hc29ucnkgdjQuMi4yXG4gKiBDYXNjYWRpbmcgZ3JpZCBsYXlvdXQgbGlicmFyeVxuICogaHR0cHM6Ly9tYXNvbnJ5LmRlc2FuZHJvLmNvbVxuICogTUlUIExpY2Vuc2VcbiAqIGJ5IERhdmlkIERlU2FuZHJvXG4gKi9cblxuKCBmdW5jdGlvbiggd2luZG93LCBmYWN0b3J5ICkge1xuICAvLyB1bml2ZXJzYWwgbW9kdWxlIGRlZmluaXRpb25cbiAgLyoganNoaW50IHN0cmljdDogZmFsc2UgKi8gLypnbG9iYWxzIGRlZmluZSwgbW9kdWxlLCByZXF1aXJlICovXG4gIGlmICggdHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgKSB7XG4gICAgLy8gQU1EXG4gICAgZGVmaW5lKCBbXG4gICAgICAgICdvdXRsYXllci9vdXRsYXllcicsXG4gICAgICAgICdnZXQtc2l6ZS9nZXQtc2l6ZSdcbiAgICAgIF0sXG4gICAgICBmYWN0b3J5ICk7XG4gIH0gZWxzZSBpZiAoIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMgKSB7XG4gICAgLy8gQ29tbW9uSlNcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoXG4gICAgICByZXF1aXJlKCdvdXRsYXllcicpLFxuICAgICAgcmVxdWlyZSgnZ2V0LXNpemUnKVxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgLy8gYnJvd3NlciBnbG9iYWxcbiAgICB3aW5kb3cuTWFzb25yeSA9IGZhY3RvcnkoXG4gICAgICB3aW5kb3cuT3V0bGF5ZXIsXG4gICAgICB3aW5kb3cuZ2V0U2l6ZVxuICAgICk7XG4gIH1cblxufSggd2luZG93LCBmdW5jdGlvbiBmYWN0b3J5KCBPdXRsYXllciwgZ2V0U2l6ZSApIHtcblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtYXNvbnJ5RGVmaW5pdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG4gIC8vIGNyZWF0ZSBhbiBPdXRsYXllciBsYXlvdXQgY2xhc3NcbiAgdmFyIE1hc29ucnkgPSBPdXRsYXllci5jcmVhdGUoJ21hc29ucnknKTtcbiAgLy8gaXNGaXRXaWR0aCAtPiBmaXRXaWR0aFxuICBNYXNvbnJ5LmNvbXBhdE9wdGlvbnMuZml0V2lkdGggPSAnaXNGaXRXaWR0aCc7XG5cbiAgdmFyIHByb3RvID0gTWFzb25yeS5wcm90b3R5cGU7XG5cbiAgcHJvdG8uX3Jlc2V0TGF5b3V0ID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5nZXRTaXplKCk7XG4gICAgdGhpcy5fZ2V0TWVhc3VyZW1lbnQoICdjb2x1bW5XaWR0aCcsICdvdXRlcldpZHRoJyApO1xuICAgIHRoaXMuX2dldE1lYXN1cmVtZW50KCAnZ3V0dGVyJywgJ291dGVyV2lkdGgnICk7XG4gICAgdGhpcy5tZWFzdXJlQ29sdW1ucygpO1xuXG4gICAgLy8gcmVzZXQgY29sdW1uIFlcbiAgICB0aGlzLmNvbFlzID0gW107XG4gICAgZm9yICggdmFyIGk9MDsgaSA8IHRoaXMuY29sczsgaSsrICkge1xuICAgICAgdGhpcy5jb2xZcy5wdXNoKCAwICk7XG4gICAgfVxuXG4gICAgdGhpcy5tYXhZID0gMDtcbiAgICB0aGlzLmhvcml6b250YWxDb2xJbmRleCA9IDA7XG4gIH07XG5cbiAgcHJvdG8ubWVhc3VyZUNvbHVtbnMgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmdldENvbnRhaW5lcldpZHRoKCk7XG4gICAgLy8gaWYgY29sdW1uV2lkdGggaXMgMCwgZGVmYXVsdCB0byBvdXRlcldpZHRoIG9mIGZpcnN0IGl0ZW
1181cbiAgICBpZiAoICF0aGlzLmNvbHVtbldpZHRoICkge1xuICAgICAgdmFyIGZpcnN0SXRlbSA9IHRoaXMuaXRlbXNbMF07XG4gICAgICB2YXIgZmlyc3RJdGVtRWxlbSA9IGZpcnN0SXRlbSAmJiBmaXJzdEl0ZW0uZWxlbWVudDtcbiAgICAgIC8vIGNvbHVtbldpZHRoIGZhbGwgYmFjayB0byBpdGVtIG9mIGZpcnN0IGVsZW1lbnRcbiAgICAgIHRoaXMuY29sdW1uV2lkdGggPSBmaXJzdEl0ZW1FbGVtICYmIGdldFNpemUoIGZpcnN0SXRlbUVsZW0gKS5vdXRlcldpZHRoIHx8XG4gICAgICAgIC8vIGlmIGZpcnN0IGVsZW0gaGFzIG5vIHdpZHRoLCBkZWZhdWx0IHRvIHNpemUgb2YgY29udGFpbmVyXG4gICAgICAgIHRoaXMuY29udGFpbmVyV2lkdGg7XG4gICAgfVxuXG4gICAgdmFyIGNvbHVtbldpZHRoID0gdGhpcy5jb2x1bW5XaWR0aCArPSB0aGlzLmd1dHRlcjtcblxuICAgIC8vIGNhbGN1bGF0ZSBjb2x1bW5zXG4gICAgdmFyIGNvbnRhaW5lcldpZHRoID0gdGhpcy5jb250YWluZXJXaWR0aCArIHRoaXMuZ3V0dGVyO1xuICAgIHZhciBjb2xzID0gY29udGFpbmVyV2lkdGggLyBjb2x1bW5XaWR0aDtcbiAgICAvLyBmaXggcm91bmRpbmcgZXJyb3JzLCB0eXBpY2FsbHkgd2l0aCBndXR0ZXJzXG4gICAgdmFyIGV4Y2VzcyA9IGNvbHVtbldpZHRoIC0gY29udGFpbmVyV2lkdGggJSBjb2x1bW5XaWR0aDtcbiAgICAvLyBpZiBvdmVyc2hvb3QgaXMgbGVzcyB0aGFuIGEgcGl4ZWwsIHJvdW5kIHVwLCBvdGhlcndpc2UgZmxvb3IgaXRcbiAgICB2YXIgbWF0aE1ldGhvZCA9IGV4Y2VzcyAmJiBleGNlc3MgPCAxID8gJ3JvdW5kJyA6ICdmbG9vcic7XG4gICAgY29scyA9IE1hdGhbIG1hdGhNZXRob2QgXSggY29scyApO1xuICAgIHRoaXMuY29scyA9IE1hdGgubWF4KCBjb2xzLCAxICk7XG4gIH07XG5cbiAgcHJvdG8uZ2V0Q29udGFpbmVyV2lkdGggPSBmdW5jdGlvbigpIHtcbiAgICAvLyBjb250YWluZXIgaXMgcGFyZW50IGlmIGZpdCB3aWR0aFxuICAgIHZhciBpc0ZpdFdpZHRoID0gdGhpcy5fZ2V0T3B0aW9uKCdmaXRXaWR0aCcpO1xuICAgIHZhciBjb250YWluZXIgPSBpc0ZpdFdpZHRoID8gdGhpcy5lbGVtZW50LnBhcmVudE5vZGUgOiB0aGlzLmVsZW1lbnQ7XG4gICAgLy8gY2hlY2sgdGhhdCB0aGlzLnNpemUgYW5kIHNpemUgYXJlIHRoZXJlXG4gICAgLy8gSUU4IHRyaWdnZXJzIHJlc2l6ZSBvbiBib2R5IHNpemUgY2hhbmdlLCBzbyB0aGV5IG1pZ2h0IG5vdCBiZVxuICAgIHZhciBzaXplID0gZ2V0U2l6ZSggY29udGFpbmVyICk7XG4gICAgdGhpcy5jb250YWluZXJXaWR0aCA9IHNpemUgJiYgc2l6ZS5pbm5lcldpZHRoO1xuICB9O1xuXG4gIHByb3RvLl9nZXRJdGVtTGF5b3V0UG9zaXRpb24gPSBmdW5jdGlvbiggaXRlbSApIHtcbiAgICBpdGVtLmdldFNpemUoKTtcbiAgICAvLyBob3cgbWFueSBjb2x1bW5zIGRvZXMgdGhpcyBicmljayBzcGFuXG4gICAgdmFyIHJlbWFpbmRlciA9IGl0ZW0uc2l6ZS5vdXRlcldpZHRoICUgdGhpcy5jb2x1bW5XaWR0aDtcbiAgICB2YXIgbWF0aE1ldGhvZCA9IHJlbWFpbmRlciAmJiByZW1haW5kZXIgPCAxID8gJ3JvdW5kJyA6ICdjZWlsJztcbiAgICAvLyByb3VuZCBpZiBvZmYgYnkgMSBwaXhlbCwgb3RoZXJ3aXNlIHVzZSBjZWlsXG4gICAgdmFyIGNvbFNwYW4gPSBNYXRoWyBtYXRoTWV0aG9kIF0oIGl0ZW0uc2l6ZS5vdXRlcldpZHRoIC8gdGhpcy5jb2x1bW5XaWR0aCApO1xuICAgIGNvbFNwYW4gPSBNYXRoLm1pbiggY29sU3BhbiwgdGhpcy5jb2xzICk7XG4gICAgLy8gdXNlIGhvcml6b250YWwgb3IgdG9wIGNvbHVtbiBwb3NpdGlvblxuICAgIHZhciBjb2xQb3NNZXRob2QgPSB0aGlzLm9wdGlvbnMuaG9yaXpvbn
118RhbE9yZGVyID9cbiAgICAgICdfZ2V0SG9yaXpvbnRhbENvbFBvc2l0aW9uJyA6ICdfZ2V0VG9wQ29sUG9zaXRpb24nO1xuICAgIHZhciBjb2xQb3NpdGlvbiA9IHRoaXNbIGNvbFBvc01ldGhvZCBdKCBjb2xTcGFuLCBpdGVtICk7XG4gICAgLy8gcG9zaXRpb24gdGhlIGJyaWNrXG4gICAgdmFyIHBvc2l0aW9uID0ge1xuICAgICAgeDogdGhpcy5jb2x1bW5XaWR0aCAqIGNvbFBvc2l0aW9uLmNvbCxcbiAgICAgIHk6IGNvbFBvc2l0aW9uLnlcbiAgICB9O1xuICAgIC8vIGFwcGx5IHNldEhlaWdodCB0byBuZWNlc3NhcnkgY29sdW1uc1xuICAgIHZhciBzZXRIZWlnaHQgPSBjb2xQb3NpdGlvbi55ICsgaXRlbS5zaXplLm91dGVySGVpZ2h0O1xuICAgIHZhciBzZXRNYXggPSBjb2xTcGFuICsgY29sUG9zaXRpb24uY29sO1xuICAgIGZvciAoIHZhciBpID0gY29sUG9zaXRpb24uY29sOyBpIDwgc2V0TWF4OyBpKysgKSB7XG4gICAgICB0aGlzLmNvbFlzW2ldID0gc2V0SGVpZ2h0O1xuICAgIH1cblxuICAgIHJldHVybiBwb3NpdGlvbjtcbiAgfTtcblxuICBwcm90by5fZ2V0VG9wQ29sUG9zaXRpb24gPSBmdW5jdGlvbiggY29sU3BhbiApIHtcbiAgICB2YXIgY29sR3JvdXAgPSB0aGlzLl9nZXRUb3BDb2xHcm91cCggY29sU3BhbiApO1xuICAgIC8vIGdldCB0aGUgbWluaW11bSBZIHZhbHVlIGZyb20gdGhlIGNvbHVtbnNcbiAgICB2YXIgbWluaW11bVkgPSBNYXRoLm1pbi5hcHBseSggTWF0aCwgY29sR3JvdXAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBjb2w6IGNvbEdyb3VwLmluZGV4T2YoIG1pbmltdW1ZICksXG4gICAgICB5OiBtaW5pbXVtWSxcbiAgICB9O1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge051bWJlcn0gY29sU3BhbiAtIG51bWJlciBvZiBjb2x1bW5zIHRoZSBlbGVtZW50IHNwYW5zXG4gICAqIEByZXR1cm5zIHtBcnJheX0gY29sR3JvdXBcbiAgICovXG4gIHByb3RvLl9nZXRUb3BDb2xHcm91cCA9IGZ1bmN0aW9uKCBjb2xTcGFuICkge1xuICAgIGlmICggY29sU3BhbiA8IDIgKSB7XG4gICAgICAvLyBpZiBicmljayBzcGFucyBvbmx5IG9uZSBjb2x1bW4sIHVzZSBhbGwgdGhlIGNvbHVtbiBZc1xuICAgICAgcmV0dXJuIHRoaXMuY29sWXM7XG4gICAgfVxuXG4gICAgdmFyIGNvbEdyb3VwID0gW107XG4gICAgLy8gaG93IG1hbnkgZGlmZmVyZW50IHBsYWNlcyBjb3VsZCB0aGlzIGJyaWNrIGZpdCBob3Jpem9udGFsbHlcbiAgICB2YXIgZ3JvdXBDb3VudCA9IHRoaXMuY29scyArIDEgLSBjb2xTcGFuO1xuICAgIC8vIGZvciBlYWNoIGdyb3VwIHBvdGVudGlhbCBob3Jpem9udGFsIHBvc2l0aW9uXG4gICAgZm9yICggdmFyIGkgPSAwOyBpIDwgZ3JvdXBDb3VudDsgaSsrICkge1xuICAgICAgY29sR3JvdXBbaV0gPSB0aGlzLl9nZXRDb2xHcm91cFkoIGksIGNvbFNwYW4gKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbEdyb3VwO1xuICB9O1xuXG4gIHByb3RvLl9nZXRDb2xHcm91cFkgPSBmdW5jdGlvbiggY29sLCBjb2xTcGFuICkge1xuICAgIGlmICggY29sU3BhbiA8IDIgKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb2xZc1sgY29sIF07XG4gICAgfVxuICAgIC8vIG1ha2UgYW4gYXJyYXkgb2YgY29sWSB2YWx1ZXMgZm9yIHRoYXQgb25lIGdyb3VwXG4gICAgdmFyIGdyb3VwQ29sWXMgPSB0aGlzLmNvbFlzLnNsaWNlKCBjb2wsIGNvbCArIGNvbFNwYW4gKTtcbiAgICAvLyBhbmQgZ2V0IHRoZSBtYXggdmFsdWUgb2YgdGhlIGFycmF5XG4gICAgcmV0dXJuIE1hdGgubWF4LmFwcGx5KCBNYXRoLCBncm91cENvbFlzICk7XG4gIH07XG5cbiAgLy8gZ2V0IGNvbHVtbiBwb3NpdGlvbiBiYXNlZCBvbiBob3Jpem9udGFsIGluZGV4LiAjODczXG4gIHByb3RvLl9nZXRIb3Jpem9udGFsQ29sUG9zaXRpb24gPSBmdW5jdGlvbiggY29sU3BhbiwgaXRlbSApIHtcbiAgICB2YXIgY29sID0gdGhpcy5ob3Jpem9udGFsQ29sSW5kZXggJSB0aGlzLmNvbHM7XG4gICAgdmFyIGlzT3ZlciA9IGNvbFNwYW4gPiAxICYmIGNvbCArIGNvbFNwYW4gPiB0aGlzLmNvbHM7XG4gICAgLy8gc2hpZnQgdG8gbmV4dCByb3cgaWYgaXRlbSBjYW4ndCBmaXQgb24gY3VycmVudCByb3dcbiAgICBjb2wgPSBpc092ZXIgPyAwIDogY29sO1xuICAgIC8vIGRvbid0IGxldCB6ZXJvLXNpemUgaXRlbXMgdGFrZSB1cCBzcGFjZVxuICAgIHZhciBoYXNTaXplID0gaXRlbS5zaXplLm91dGVyV2lkdGggJiYgaXRlbS5zaXplLm91dGVySGVpZ2h0O1xuICAgIHRoaXMuaG9yaXpvbn
118RhbENvbEluZGV4ID0gaGFzU2l6ZSA/IGNvbCArIGNvbFNwYW4gOiB0aGlzLmhvcml6b250YWxDb2xJbmRleDtcblxuICAgIHJldHVybiB7XG4gICAgICBjb2w6IGNvbCxcbiAgICAgIHk6IHRoaXMuX2dldENvbEdyb3VwWSggY29sLCBjb2xTcGFuICksXG4gICAgfTtcbiAgfTtcblxuICBwcm90by5fbWFuYWdlU3RhbXAgPSBmdW5jdGlvbiggc3RhbXAgKSB7XG4gICAgdmFyIHN0YW1wU2l6ZSA9IGdldFNpemUoIHN0YW1wICk7XG4gICAgdmFyIG9mZnNldCA9IHRoaXMuX2dldEVsZW1lbnRPZmZzZXQoIHN0YW1wICk7XG4gICAgLy8gZ2V0IHRoZSBjb2x1bW5zIHRoYXQgdGhpcyBzdGFtcCBhZmZlY3RzXG4gICAgdmFyIGlzT3JpZ2luTGVmdCA9IHRoaXMuX2dldE9wdGlvbignb3JpZ2luTGVmdCcpO1xuICAgIHZhciBmaXJzdFggPSBpc09yaWdpbkxlZnQgPyBvZmZzZXQubGVmdCA6IG9mZnNldC5yaWdodDtcbiAgICB2YXIgbGFzdFggPSBmaXJzdFggKyBzdGFtcFNpemUub3V0ZXJXaWR0aDtcbiAgICB2YXIgZmlyc3RDb2wgPSBNYXRoLmZsb29yKCBmaXJzdFggLyB0aGlzLmNvbHVtbldpZHRoICk7XG4gICAgZmlyc3RDb2wgPSBNYXRoLm1heCggMCwgZmlyc3RDb2wgKTtcbiAgICB2YXIgbGFzdENvbCA9IE1hdGguZmxvb3IoIGxhc3RYIC8gdGhpcy5jb2x1bW5XaWR0aCApO1xuICAgIC8vIGxhc3RDb2wgc2hvdWxkIG5vdCBnbyBvdmVyIGlmIG11bHRpcGxlIG9mIGNvbHVtbldpZHRoICM0MjVcbiAgICBsYXN0Q29sIC09IGxhc3RYICUgdGhpcy5jb2x1bW5XaWR0aCA/IDAgOiAxO1xuICAgIGxhc3RDb2wgPSBNYXRoLm1pbiggdGhpcy5jb2xzIC0gMSwgbGFzdENvbCApO1xuICAgIC8vIHNldCBjb2xZcyB0byBib3R0b20gb2YgdGhlIHN0YW1wXG5cbiAgICB2YXIgaXNPcmlnaW5Ub3AgPSB0aGlzLl9nZXRPcHRpb24oJ29yaWdpblRvcCcpO1xuICAgIHZhciBzdGFtcE1heFkgPSAoIGlzT3JpZ2luVG9wID8gb2Zmc2V0LnRvcCA6IG9mZnNldC5ib3R0b20gKSArXG4gICAgICBzdGFtcFNpemUub3V0ZXJIZWlnaHQ7XG4gICAgZm9yICggdmFyIGkgPSBmaXJzdENvbDsgaSA8PSBsYXN0Q29sOyBpKysgKSB7XG4gICAgICB0aGlzLmNvbFlzW2ldID0gTWF0aC5tYXgoIHN0YW1wTWF4WSwgdGhpcy5jb2xZc1tpXSApO1xuICAgIH1cbiAgfTtcblxuICBwcm90by5fZ2V0Q29udGFpbmVyU2l6ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMubWF4WSA9IE1hdGgubWF4LmFwcGx5KCBNYXRoLCB0aGlzLmNvbFlzICk7XG4gICAgdmFyIHNpemUgPSB7XG4gICAgICBoZWlnaHQ6IHRoaXMubWF4WVxuICAgIH07XG5cbiAgICBpZiAoIHRoaXMuX2dldE9wdGlvbignZml0V2lkdGgnKSApIHtcbiAgICAgIHNpemUud2lkdGggPSB0aGlzLl9nZXRDb250YWluZXJGaXRXaWR0aCgpO1xuICAgIH1cblxuICAgIHJldHVybiBzaXplO1xuICB9O1xuXG4gIHByb3RvLl9nZXRDb250YWluZXJGaXRXaWR0aCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB1bnVzZWRDb2xzID0gMDtcbiAgICAvLyBjb3VudCB1bnVzZWQgY29sdW1uc1xuICAgIHZhciBpID0gdGhpcy5jb2xzO1xuICAgIHdoaWxlICggLS1pICkge1xuICAgICAgaWYgKCB0aGlzLmNvbFlzW2ldICE9PSAwICkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHVudXNlZENvbHMrKztcbiAgICB9XG4gICAgLy8gZml0IGNvbnRhaW5lciB0byBjb2x1bW5zIHRoYXQgaGF2ZSBiZWVuIHVzZWRcbiAgICByZXR1cm4gKCB0aGlzLmNvbHMgLSB1bnVzZWRDb2xzICkgKiB0aGlzLmNvbHVtbldpZHRoIC0gdGhpcy5ndXR0ZXI7XG4gIH07XG5cbiAgcHJvdG8ubmVlZHNSZXNpemVMYXlvdXQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcHJldmlvdXNXaWR0aCA9IHRoaXMuY29udGFpbmVyV2lkdGg7XG4gICAgdGhpcy5nZXRDb250YWluZXJXaWR0aCgpO1xuICAgIHJldHVybiBwcmV2aW91c1dpZHRoICE9IHRoaXMuY29udGFpbmVyV2lkdGg7XG4gIH07XG5cbiAgcmV0dXJuIE1hc29ucnk7XG5cbn0pKTtcbiIsIi8qISBucG0uaW0vb2JqZWN0LWZpdC1pbWFnZXMgMy4yLjQgKi9cbid1c2Ugc3RyaWN0JztcblxudmFyIE9GSSA9ICdiZnJlZC1pdDpvYmplY3QtZml0LWltYWdlcyc7XG52YXIgcHJvcFJlZ2V4ID0gLyhvYmplY3QtZml0fG9iamVjdC1wb3NpdGlvbilcXHMqOlxccyooWy0uXFx3XFxzJV0rKS9nO1xudmFyIHRlc3RJbWcgPSB0eXBlb2YgSW1hZ2UgPT09ICd1bmRlZmluZWQnID8ge3N0eWxlOiB7J29iamVjdC1wb3NpdGlvbic6IDF9fSA6IG5ldyBJbWFnZSgpO1xudmFyIHN1cHBvcnRzT2JqZWN0Rml0ID0gJ29iamVjdC1maXQnIGluIHRlc3RJbWcuc3R5bGU7XG52YXIgc3VwcG9ydHNPYmplY3RQb3NpdGlvbiA9ICdvYmplY3QtcG9zaXRpb24nIGluIHRlc3RJbWcuc3R5bGU7XG52YXIgc3VwcG9ydHNPRkkgPSAnYmFja2dyb3VuZC1zaXplJyBpbiB0ZXN0SW1nLnN0eWxlO1xudmFyIHN1cHBvcnRzQ3VycmVudFNyYyA9IHR5cGVvZiB0ZXN0SW1nLmN1cnJlbnRTcmMgPT09ICdzdHJpbmcnO1xudmFyIG5hdGl2ZUdldEF0dHJpYnV0ZSA9IHRlc3RJbWcuZ2V0QXR0cmlidXRlO1xudmFyIG5hdGl2ZVNldEF0dHJpYnV0ZSA9IHRlc3RJbWcuc2V0QXR0cmlidXRlO1xudmFyIGF1dG9Nb2RlRW5hYmxlZCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBjcmVhdGVQbGFjZWhvbGRlcih3LCBoKSB7XG5cdHJldHVybiAoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9J1wiICsgdyArIFwiJyBoZWlnaHQ9J1wiICsgaCArIFwiJyUzRSUzQy9zdmclM0VcIik7XG59XG5cbmZ1bmN0aW9uIHBvbHlmaWxsQ3VycmVudFNyYyhlbCkge1xuXHRpZiAoZWwuc3Jjc2V0ICYmICFzdXBwb3J0c0N1cnJlbnRTcmMgJiYgd2luZG93LnBpY3R1cmVmaWxsKSB7XG5cdFx0dmFyIHBmID0gd2luZG93LnBpY3R1cmVmaWxsLl87XG5cdFx0Ly8gcGFyc2Ugc3Jjc2V0IHdpdGggcGljdHVyZWZpbGwgd2hlcmUgY3VycmVudFNyYyBpc24ndCBhdmFpbGFibGVcblx0XHRpZiAoIWVsW3BmLm5zXSB8fCAhZWxbcGYubnNdLmV2YWxlZCkge1xuXHRcdFx0Ly8gZm9yY2Ugc3luY2hyb25vdXMgc3Jjc2V0IHBhcnNpbmdcblx0XHRcdHBmLmZpbGxJbWcoZWwsIHtyZXNlbGVjdDogdHJ1ZX0pO1xuXHRcdH1cblxuXHRcdGlmICghZWxbcGYubnNdLmN1clNyYykge1xuXHRcdFx0Ly8gZm9yY2UgcGljdHVyZWZpbGwgdG8gcGFyc2Ugc3Jjc2V0XG5cdFx0XHRlbFtwZi5uc10uc3VwcG9ydGVkID0gZmFsc2U7XG5cdFx0XHRwZi5maWxsSW1nKGVsLCB7cmVzZWxlY3Q6IHRydWV9KTtcblx0XHR9XG5cblx0XHQvLyByZXRyaWV2ZSBwYXJzZWQgY3VycmVudFNyYywgaWYgYW55XG5cdFx0ZWwuY3VycmVudFNyYyA9IGVsW3BmLm5zXS5jdXJTcmMgfHwgZWwuc3JjO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldFN0eWxlKGVsKSB7XG5cdHZhciBzdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWwpLmZvbnRGYW1pbHk7XG5cdHZhciBwYXJzZWQ7XG5cdHZhciBwcm9wcyA9IHt9O1xuXHR3aGlsZSAoKHBhcnNlZCA9IHByb3BSZWdleC5leGVjKHN0eWxlKSkgIT09IG51bGwpIHtcblx0XHRwcm9wc1twYXJzZWRbMV1dID0gcGFyc2VkWzJdO1xuXHR9XG5cdHJldHVybi
118Bwcm9wcztcbn1cblxuZnVuY3Rpb24gc2V0UGxhY2Vob2xkZXIoaW1nLCB3aWR0aCwgaGVpZ2h0KSB7XG5cdC8vIERlZmF1bHQ6IGZpbGwgd2lkdGgsIG5vIGhlaWdodFxuXHR2YXIgcGxhY2Vob2xkZXIgPSBjcmVhdGVQbGFjZWhvbGRlcih3aWR0aCB8fCAxLCBoZWlnaHQgfHwgMCk7XG5cblx0Ly8gT25seSBzZXQgcGxhY2Vob2xkZXIgaWYgaXQncyBkaWZmZXJlbnRcblx0aWYgKG5hdGl2ZUdldEF0dHJpYnV0ZS5jYWxsKGltZywgJ3NyYycpICE9PSBwbGFjZWhvbGRlcikge1xuXHRcdG5hdGl2ZVNldEF0dHJpYnV0ZS5jYWxsKGltZywgJ3NyYycsIHBsYWNlaG9sZGVyKTtcblx0fVxufVxuXG5mdW5jdGlvbiBvbkltYWdlUmVhZHkoaW1nLCBjYWxsYmFjaykge1xuXHQvLyBuYXR1cmFsV2lkdGggaXMgb25seSBhdmFpbGFibGUgd2hlbiB0aGUgaW1hZ2UgaGVhZGVycyBhcmUgbG9hZGVkLFxuXHQvLyB0aGlzIGxvb3Agd2lsbCBwb2xsIGl0IGV2ZXJ5IDEwMG1zLlxuXHRpZiAoaW1nLm5hdHVyYWxXaWR0aCkge1xuXHRcdGNhbGxiYWNrKGltZyk7XG5cdH0gZWxzZSB7XG5cdFx0c2V0VGltZW91dChvbkltYWdlUmVhZHksIDEwMCwgaW1nLCBjYWxsYmFjayk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZml4T25lKGVsKSB7XG5cdHZhciBzdHlsZSA9IGdldFN0eWxlKGVsKTtcblx0dmFyIG9maSA9IGVsW09GSV07XG5cdHN0eWxlWydvYmplY3QtZml0J10gPSBzdHlsZVsnb2JqZWN0LWZpdCddIHx8ICdmaWxsJzsgLy8gZGVmYXVsdCB2YWx1ZVxuXG5cdC8vIEF2b2lkIHJ1bm5pbmcgd2hlcmUgdW5uZWNlc3NhcnksIHVubGVzcyBPRkkgaGFkIGFscmVhZHkgZG9uZSBpdHMgZGVlZFxuXHRpZiAoIW9maS5pbWcpIHtcblx0XHQvLyBmaWxsIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIHNvIG5vIGFjdGlvbiBpcyBuZWNlc3Nhcnlcblx0XHRpZiAoc3R5bGVbJ29iamVjdC1maXQnXSA9PT0gJ2ZpbGwnKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gV2hlcmUgb2JqZWN0LWZpdCBpcyBzdXBwb3J0ZWQgYW5kIG9iamVjdC1wb3NpdGlvbiBpc24ndCAoU2FmYXJpIDwgMTApXG5cdFx0aWYgKFxuXHRcdFx0IW9maS5za2lwVGVzdCAmJiAvLyB1bmxlc3MgdXNlciB3YW50cyB0byBhcHBseSByZWdhcmRsZXNzIG9mIGJyb3dzZXIgc3VwcG9ydFxuXHRcdFx0c3VwcG9ydHNPYmplY3RGaXQgJiYgLy8gaWYgYnJvd3NlciBhbHJlYWR5IHN1cHBvcnRzIG9iamVjdC1maXRcblx0XHRcdCFzdHlsZVsnb2JqZWN0LXBvc2l0aW9uJ10gLy8gdW5sZXNzIG9iamVjdC1wb3NpdGlvbiBpcyB1c2VkXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHR9XG5cblx0Ly8ga2VlcCBhIGNsb25lIGluIG1lbW9yeSB3aGlsZSByZXNldHRpbmcgdGhlIG9yaWdpbmFsIHRvIGEgYmxhbmtcblx0aWYgKCFvZmkuaW1nKSB7XG5cdFx0b2ZpLmltZyA9IG5ldyBJbWFnZShlbC53aWR0aCwgZWwuaGVpZ2h0KTtcblx0XHRvZmkuaW1nLnNyY3NldCA9IG5hdGl2ZUdldEF0dHJpYnV0ZS5jYWxsKGVsLCBcImRhdGEtb2ZpLXNyY3NldFwiKSB8fCBlbC5zcmNzZXQ7XG5cdFx0b2ZpLmltZy5zcmMgPSBuYXRpdmVHZXRBdHRyaWJ1dGUuY2FsbChlbCwgXCJkYXRhLW9maS1zcmNcIikgfHwgZWwuc3JjO1xuXG5cdFx0Ly8gcHJlc2VydmUgZm9yIGFueSBmdXR1cmUgY2xvbmVOb2RlIGNhbGxzXG5cdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL2JmcmVkLWl0L29iamVjdC1maXQtaW1hZ2VzL2lzc3Vlcy81M1xuXHRcdG5hdGl2ZVNldEF0dHJpYnV0ZS5jYWxsKGVsLCBcImRhdGEtb2ZpLXNyY1wiLCBlbC5zcmMpO1xuXHRcdGlmIChlbC5zcmNzZXQpIHtcblx0XHRcdG5hdGl2ZVNldEF0dHJpYnV0ZS5jYWxsKGVsLCBcImRhdGEtb2ZpLXNyY3NldFwiLCBlbC5zcmNzZXQpO1xuXHRcdH1cblxuXHRcdHNldFBsYWNlaG9sZGVyKGVsLCBlbC5uYXR1cmFsV2lkdGggfHwgZWwud2lkdGgsIGVsLm5hdHVyYWxIZWlnaHQgfHwgZWwuaGVpZ2h0KTtcblxuXHRcdC8vIHJlbW92ZSBzcmNzZXQgYmVjYXVzZSBpdCBvdmVycmlkZXMgc3JjXG5cdFx0aWYgKGVsLnNyY3NldCkge1xuXHRcdFx0ZWwuc3Jjc2V0ID0gJyc7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRrZWVwU3JjVXNhYmxlKGVsKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdGlmICh3aW5kb3cuY29uc29sZSkge1xuXHRcdFx0XHRjb25zb2xlLndhcm4oJ2h0dHBzOi8vYml0Lmx5L29maS1vbGQtYnJvd3NlcicpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHBvbHlmaWxsQ3VycmVudFNyYyhvZmkuaW1nKTtcblxuXHRlbC5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSBcInVybChcXFwiXCIgKyAoKG9maS5pbWcuY3VycmVudFNyYyB8fCBvZmkuaW1nLnNyYykucmVwbGFjZSgvXCIvZywgJ1xcXFxcIicpKSArIFwiXFxcIilcIjtcblx0ZWwuc3R5bGUuYmFja2dyb3VuZFBvc2l0aW9uID0gc3R5bGVbJ29iamVjdC1wb3NpdGlvbiddIHx8ICdjZW50ZXInO1xuXHRlbC5zdHlsZS5iYWNrZ3JvdW5kUmVwZWF0ID0gJ25vLXJlcGVhdCc7XG5cdGVsLnN0eWxlLmJhY2tncm91bmRPcmlnaW4gPSAnY29udGVudC1ib3gnO1xuXG5cdGlmICgvc2NhbGUtZG93bi8udGVzdChzdHlsZVsnb2JqZWN0LWZpdCddKSkge1xuXHRcdG9uSW1hZ2VSZWFkeShvZmkuaW1nLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRpZiAob2ZpLmltZy5uYXR1cmFsV2lkdGggPiBlbC53aWR0aCB8fCBvZmkuaW1nLm5hdHVyYWxIZWlnaHQgPiBlbC5oZWlnaHQpIHtcblx0XHRcdFx0ZWwuc3R5bGUuYmFja2dyb3VuZFNpemUgPSAnY29udGFpbic7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbC5zdHlsZS5iYWNrZ3JvdW5kU2l6ZSA9ICdhdXRvJztcblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRlbC5zdHlsZS5iYWNrZ3JvdW5kU2l6ZSA9IHN0eWxlWydvYmplY3QtZml0J10ucmVwbGFjZSgnbm9uZScsICdhdXRvJykucmVwbGFjZSgnZmlsbCcsICcxMDAlIDEwMCUnKTtcblx0fVxuXG5cdG9uSW1hZ2VSZWFkeShvZmkuaW1nLCBmdW5jdGlvbiAoaW1nKSB7XG5cdFx0c2V0UGxhY2Vob2xkZXIoZWwsIGltZy5uYXR1cmFsV2lkdGgsIGltZy5uYXR1cmFsSGVpZ2h0KTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGtlZXBTcmNVc2FibGUoZWwpIHtcblx0dmFyIGRlc2NyaXB0b3JzID0ge1xuXHRcdGdldDogZnVuY3Rpb24gZ2V0KHByb3ApIHtcblx0XHRcdHJldHVybi
118BlbFtPRkldLmltZ1twcm9wID8gcHJvcCA6ICdzcmMnXTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gc2V0KHZhbHVlLCBwcm9wKSB7XG5cdFx0XHRlbFtPRkldLmltZ1twcm9wID8gcHJvcCA6ICdzcmMnXSA9IHZhbHVlO1xuXHRcdFx0bmF0aXZlU2V0QXR0cmlidXRlLmNhbGwoZWwsIChcImRhdGEtb2ZpLVwiICsgcHJvcCksIHZhbHVlKTsgLy8gcHJlc2VydmUgZm9yIGFueSBmdXR1cmUgY2xvbmVOb2RlXG5cdFx0XHRmaXhPbmUoZWwpO1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblx0fTtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGVsLCAnc3JjJywgZGVzY3JpcHRvcnMpO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZWwsICdjdXJyZW50U3JjJywge1xuXHRcdGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVzY3JpcHRvcnMuZ2V0KCdjdXJyZW50U3JjJyk7IH1cblx0fSk7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbCwgJ3NyY3NldCcsIHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRlc2NyaXB0b3JzLmdldCgnc3Jjc2V0Jyk7IH0sXG5cdFx0c2V0OiBmdW5jdGlvbiAoc3MpIHsgcmV0dXJuIGRlc2NyaXB0b3JzLnNldChzcywgJ3NyY3NldCcpOyB9XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBoaWphY2tBdHRyaWJ1dGVzKCkge1xuXHRmdW5jdGlvbiBnZXRPZmlJbWFnZU1heWJlKGVsLCBuYW1lKSB7XG5cdFx0cmV0dXJuIGVsW09GSV0gJiYgZWxbT0ZJXS5pbWcgJiYgKG5hbWUgPT09ICdzcmMnIHx8IG5hbWUgPT09ICdzcmNzZXQnKSA/IGVsW09GSV0uaW1nIDogZWw7XG5cdH1cblx0aWYgKCFzdXBwb3J0c09iamVjdFBvc2l0aW9uKSB7XG5cdFx0SFRNTEltYWdlRWxlbWVudC5wcm90b3R5cGUuZ2V0QXR0cmlidXRlID0gZnVuY3Rpb24gKG5hbWUpIHtcblx0XHRcdHJldHVybiBuYXRpdmVHZXRBdHRyaWJ1dGUuY2FsbChnZXRPZmlJbWFnZU1heWJlKHRoaXMsIG5hbW
118UpLCBuYW1lKTtcblx0XHR9O1xuXG5cdFx0SFRNTEltYWdlRWxlbWVudC5wcm90b3R5cGUuc2V0QXR0cmlidXRlID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gbmF0aXZlU2V0QXR0cmlidXRlLmNhbGwoZ2V0T2ZpSW1hZ2VNYXliZSh0aGlzLCBuYW1lKSwgbmFtZSwgU3RyaW5nKHZhbHVlKSk7XG5cdFx0fTtcblx0fVxufVxuXG5mdW5jdGlvbiBmaXgoaW1ncywgb3B0cykge1xuXHR2YXIgc3RhcnRBdXRvTW9kZSA9ICFhdXRvTW9kZUVuYWJsZWQgJiYgIWltZ3M7XG5cdG9wdHMgPSBvcHRzIHx8IHt9O1xuXHRpbWdzID0gaW1ncyB8fCAnaW1nJztcblxuXHRpZiAoKHN1cHBvcnRzT2JqZWN0UG9zaXRpb24gJiYgIW9wdHMuc2tpcFRlc3QpIHx8ICFzdXBwb3J0c09GSSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIHVzZSBpbWdzIGFzIGEgc2VsZWN0b3Igb3IganVzdCBzZWxlY3QgYWxsIGltYWdlc1xuXHRpZiAoaW1ncyA9PT0gJ2ltZycpIHtcblx0XHRpbWdzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ltZycpO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBpbWdzID09PSAnc3RyaW5nJykge1xuXHRcdGltZ3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGltZ3MpO1xuXHR9IGVsc2UgaWYgKCEoJ2xlbmd0aCcgaW4gaW1ncykpIHtcblx0XHRpbWdzID0gW2ltZ3NdO1xuXHR9XG5cblx0Ly8gYXBwbHkgZml4IHRvIGFsbFxuXHRmb3IgKHZhciBpID0gMDsgaSA8IGltZ3MubGVuZ3RoOyBpKyspIHtcblx0XHRpbWdzW2ldW09GSV0gPSBpbWdzW2ldW09GSV0gfHwge1xuXHRcdFx0c2tpcFRlc3Q6IG9wdHMuc2tpcFRlc3Rcblx0XHR9O1xuXHRcdGZpeE9uZShpbWdzW2ldKTtcblx0fVxuXG5cdGlmIChzdGFydEF1dG9Nb2RlKSB7XG5cdFx0ZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdGlmIChlLnRhcmdldC50YWdOYW1lID09PSAnSU1HJykge1xuXHRcdFx0XHRmaXgoZS50YXJnZXQsIHtcblx0XHRcdFx0XHRza2lwVGVzdDogb3B0cy5za2lwVGVzdFxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9LCB0cnVlKTtcblx0XHRhdXRvTW9kZUVuYWJsZWQgPSB0cnVlO1xuXHRcdGltZ3MgPSAnaW1nJzsgLy8gcmVzZXQgdG8gYSBnZW5lcmljIHNlbGVjdG9yIGZvciB3YXRjaE1RXG5cdH1cblxuXHQvLyBpZiByZXF1ZXN0ZWQsIHdhdGNoIG1lZGlhIHF1ZXJpZXMgZm9yIG9iamVjdC1maXQgY2hhbmdlXG5cdGlmIChvcHRzLndhdGNoTVEpIHtcblx0XHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgZml4LmJpbmQobnVsbCwgaW1ncywge1xuXHRcdFx0c2tpcFRlc3Q6IG9wdHMuc2tpcFRlc3Rcblx0XHR9KSk7XG5cdH1cbn1cblxuZml4LnN1cHBvcnRzT2JqZWN0Rml0ID0gc3VwcG9ydHNPYmplY3RGaXQ7XG5maXguc3VwcG9ydHNPYmplY3RQb3NpdGlvbiA9IHN1cHBvcnRzT2JqZWN0UG9zaXRpb247XG5cbmhpamFja0F0dHJpYnV0ZXMoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmaXg7XG4iLCIvKipcbiAqIE91dGxheWVyIEl0ZW1cbiAqL1xuXG4oIGZ1bmN0aW9uKCB3aW5kb3csIGZhY3RvcnkgKSB7XG4gIC8vIHVuaXZlcnNhbCBtb2R1bGUgZGVmaW5pdGlvblxuICAvKiBqc2hpbnQgc3RyaWN0OiBmYWxzZSAqLyAvKiBnbG9iYWxzIGRlZmluZSwgbW9kdWxlLCByZXF1aXJlICovXG4gIGlmICggdHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgKSB7XG4gICAgLy8gQU1EIC0gUmVxdWlyZUpTXG4gICAgZGVmaW5lKCBbXG4gICAgICAgICdldi1lbWl0dGVyL2V2LWVtaXR0ZXInLFxuICAgICAgICAnZ2V0LXNpemUvZ2V0LXNpemUnXG4gICAgICBdLFxuICAgICAgZmFjdG9yeVxuICAgICk7XG4gIH0gZWxzZSBpZiAoIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMgKSB7XG4gICAgLy8gQ29tbW9uSlMgLSBCcm93c2VyaWZ5LCBXZWJwYWNrXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KFxuICAgICAgcmVxdWlyZSgnZXYtZW1pdHRlcicpLFxuICAgICAgcmVxdWlyZSgnZ2V0LXNpemUnKVxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgLy8gYnJvd3NlciBnbG9iYWxcbiAgICB3aW5kb3cuT3V0bGF5ZXIgPSB7fTtcbiAgICB3aW5kb3cuT3V0bGF5ZXIuSXRlbSA9IGZhY3RvcnkoXG4gICAgICB3aW5kb3cuRXZFbWl0dGVyLFxuICAgICAgd2luZG93LmdldFNpemVcbiAgICApO1xuICB9XG5cbn0oIHdpbmRvdywgZnVuY3Rpb24gZmFjdG9yeSggRXZFbWl0dGVyLCBnZXRTaXplICkge1xuJ3VzZSBzdHJpY3QnO1xuXG4vLyAtLS0tLSBoZWxwZXJzIC0tLS0tIC8vXG5cbmZ1bmN0aW9uIGlzRW1wdHlPYmooIG9iaiApIHtcbiAgZm9yICggdmFyIHByb3AgaW4gb2JqICkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwcm9wID0gbnVsbDtcbiAgcmV0dXJuIHRydWU7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENTUzMgc3VwcG9ydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG5cbnZhciBkb2NFbGVtU3R5bGUgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGU7XG5cbnZhciB0cmFuc2l0aW9uUHJvcGVydHkgPSB0eXBlb2YgZG9jRWxlbVN0eWxlLnRyYW5zaXRpb24gPT0gJ3N0cmluZycgP1xuICAndHJhbnNpdGlvbicgOiAnV2Via2l0VHJhbnNpdGlvbic7XG52YXIgdHJhbnNmb3JtUHJvcGVydHkgPSB0eXBlb2YgZG9jRWxlbVN0eWxlLnRyYW5zZm9ybSA9PSAnc3RyaW5nJyA/XG4gICd0cmFuc2Zvcm0nIDogJ1dlYmtpdFRyYW5zZm9ybSc7XG5cbnZhciB0cmFuc2l0aW9uRW5kRXZlbnQgPSB7XG4gIFdlYmtpdFRyYW5zaXRpb246ICd3ZWJraXRUcmFuc2l0aW9uRW5kJyxcbiAgdHJhbnNpdGlvbjogJ3RyYW5zaXRpb25lbmQnXG59WyB0cmFuc2l0aW9uUHJvcGVydHkgXTtcblxuLy8gY2FjaGUgYWxsIHZlbmRvciBwcm9wZXJ0aWVzIHRoYXQgY291bGQgaGF2ZSB2ZW5kb3IgcHJlZml4XG52YXIgdmVuZG9yUHJvcGVydGllcyA9IHtcbiAgdHJhbnNmb3JtOiB0cmFuc2Zvcm1Qcm9wZXJ0eSxcbiAgdHJhbnNpdGlvbjogdHJhbnNpdGlvblByb3BlcnR5LFxuICB0cmFuc2l0aW9uRHVyYXRpb246IHRyYW5zaXRpb25Qcm9wZXJ0eSArICdEdXJhdGlvbicsXG4gIHRyYW5zaXRpb25Qcm9wZXJ0eTogdHJhbnNpdGlvblByb3BlcnR5ICsgJ1Byb3BlcnR5JyxcbiAgdHJhbnNpdGlvbkRlbGF5OiB0cmFuc2l0aW9uUHJvcGVydHkgKyAnRGVsYXknXG59O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBJdGVtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXG5cbmZ1bmN0aW9uIEl0ZW
1180oIGVsZW1lbnQsIGxheW91dCApIHtcbiAgaWYgKCAhZWxlbWVudCApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAvLyBwYXJlbnQgbGF5b3V0IGNsYXNzLCBpLmUuIE1hc29ucnksIElzb3RvcGUsIG9yIFBhY2tlcnlcbiAgdGhpcy5sYXlvdXQgPSBsYXlvdXQ7XG4gIHRoaXMucG9zaXRpb24gPSB7XG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH07XG5cbiAgdGhpcy5fY3JlYXRlKCk7XG59XG5cbi8vIGluaGVyaXQgRXZFbWl0dGVyXG52YXIgcHJvdG8gPSBJdGVtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEV2RW1pdHRlci5wcm90b3R5cGUgKTtcbnByb3RvLmNvbnN0cnVjdG9yID0gSXRlbTtcblxucHJvdG8uX2NyZWF0ZSA9IGZ1bmN0aW9uKCkge1xuICAvLyB0cmFuc2l0aW9uIG9iamVjdHNcbiAgdGhpcy5fdHJhbnNuID0ge1xuICAgIGluZ1Byb3BlcnRpZXM6IHt9LFxuICAgIGNsZWFuOiB7fSxcbiAgICBvbkVuZDoge31cbiAgfTtcblxuICB0aGlzLmNzcyh7XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZSdcbiAgfSk7XG59O1xuXG4vLyB0cmlnZ2VyIHNwZWNpZmllZCBoYW5kbGVyIGZvciBldmVudCB0eXBlXG5wcm90by5oYW5kbGVFdmVudCA9IGZ1bmN0aW9uKCBldmVudCApIHtcbiAgdmFyIG1ldGhvZCA9ICdvbicgKyBldmVudC50eXBlO1xuICBpZiAoIHRoaXNbIG1ldGhvZCBdICkge1xuICAgIHRoaXNbIG1ldGhvZCBdKCBldmVudCApO1xuICB9XG59O1xuXG5wcm90by5nZXRTaXplID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuc2l6ZSA9IGdldFNpemUoIHRoaXMuZWxlbWVudCApO1xufTtcblxuLyoqXG4gKiBhcHBseSBDU1Mgc3R5bGVzIHRvIGVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdHlsZVxuICovXG5wcm90by5jc3MgPSBmdW5jdGlvbiggc3R5bGUgKSB7XG4gIHZhciBlbGVtU3R5bGUgPSB0aGlzLmVsZW1lbnQuc3R5bGU7XG5cbiAgZm9yICggdmFyIHByb3AgaW4gc3R5bGUgKSB7XG4gICAgLy8gdXNlIHZlbmRvciBwcm9wZXJ0eSBpZiBhdmFpbGFibGVcbiAgICB2YXIgc3VwcG9ydGVkUHJvcCA9IHZlbmRvclByb3BlcnRpZXNbIHByb3AgXSB8fCBwcm9wO1xuICAgIGVsZW1TdHlsZVsgc3VwcG9ydGVkUHJvcCBdID0gc3R5bGVbIHByb3AgXTtcbiAgfVxufTtcblxuIC8vIG1lYXN1cmUgcG9zaXRpb24sIGFuZCBzZXRzIGl0XG5wcm90by5nZXRQb3NpdGlvbiA9IGZ1bmN0aW9uKCkge1xuICB2YXIgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKCB0aGlzLmVsZW1lbnQgKTtcbiAgdmFyIGlzT3JpZ2luTGVmdCA9IHRoaXMubGF5b3V0Ll9nZXRPcHRpb24oJ29yaWdpbkxlZnQnKTtcbiAgdmFyIGlzT3JpZ2luVG9wID0gdGhpcy5sYXlvdXQuX2dldE9wdGlvbignb3JpZ2luVG9wJyk7XG4gIHZhciB4VmFsdWUgPSBzdHlsZVsgaXNPcmlnaW5MZWZ0ID8gJ2xlZnQnIDogJ3JpZ2h0JyBdO1xuICB2YXIgeVZhbHVlID0gc3R5bGVbIGlzT3JpZ2luVG9wID8gJ3RvcCcgOiAnYm90dG9tJyBdO1xuICB2YXIgeCA9IHBhcnNlRmxvYXQoIHhWYWx1ZSApO1xuICB2YXIgeSA9IHBhcnNlRmxvYXQoIHlWYWx1ZSApO1xuICAvLyBjb252ZXJ0IHBlcmNlbnQgdG8gcGl4ZWxzXG4gIHZhciBsYXlvdXRTaXplID0gdGhpcy5sYXlvdXQuc2l6ZTtcbiAgaWYgKCB4VmFsdWUuaW5kZXhPZignJScpICE9IC0xICkge1xuICAgIHggPSAoIHggLyAxMDAgKSAqIGxheW91dFNpemUud2lkdGg7XG4gIH1cbiAgaWYgKCB5VmFsdWUuaW5kZXhPZignJScpICE9IC0xICkge1xuICAgIHkgPSAoIHkgLyAxMDAgKSAqIGxheW91dFNpemUuaGVpZ2h0O1xuICB9XG4gIC8vIGNsZWFuIHVwICdhdXRvJyBvciBvdGhlciBub24taW50ZWdlciB2YWx1ZXNcbiAgeCA9IGlzTmFOKCB4ICkgPyAwIDogeDtcbiAgeSA9IGlzTmFOKCB5ICkgPyAwIDogeTtcbiAgLy8gcmVtb3ZlIHBhZGRpbmcgZnJvbSBtZWFzdXJlbWVudFxuICB4IC09IGlzT3JpZ2luTGVmdCA/IGxheW91dFNpemUucGFkZGluZ0xlZnQgOiBsYXlvdXRTaXplLnBhZGRpbmdSaWdodDtcbiAgeSAtPSBpc09yaWdpblRvcCA/IGxheW91dFNpemUucGFkZGluZ1RvcCA6IGxheW91dFNpemUucGFkZGluZ0JvdHRvbTtcblxuICB0aGlzLnBvc2l0aW9uLnggPSB4O1xuICB0aGlzLnBvc2l0aW9uLnkgPSB5O1xufTtcblxuLy8gc2V0IHNldHRsZWQgcG9zaXRpb24sIGFwcGx5IHBhZGRpbmdcbnByb3RvLmxheW91dFBvc2l0aW9uID0gZnVuY3Rpb24oKSB7XG4gIHZhciBsYXlvdXRTaXplID0gdGhpcy5sYXlvdXQuc2l6ZTtcbiAgdmFyIHN0eWxlID0ge307XG4gIHZhciBpc09yaWdpbkxlZnQgPSB0aGlzLmxheW91dC5fZ2V0T3B0aW9uKCdvcmlnaW5MZWZ0Jyk7XG4gIHZhciBpc09yaWdpblRvcCA9IHRoaXMubGF5b3V0Ll9nZXRPcHRpb24oJ29yaWdpblRvcCcpO1xuXG4gIC8vIHhcbiAgdmFyIHhQYWRkaW5nID0gaXNPcmlnaW5MZWZ0ID8gJ3BhZGRpbmdMZWZ0JyA6ICdwYWRkaW5nUmlnaHQnO1xuICB2YXIgeFByb3BlcnR5ID0gaXNPcmlnaW5MZWZ0ID8gJ2xlZnQnIDogJ3JpZ2h0JztcbiAgdmFyIHhSZXNldFByb3BlcnR5ID0gaXNPcmlnaW5MZWZ0ID8gJ3JpZ2h0JyA6ICdsZWZ0JztcblxuICB2YXIgeCA9IHRoaXMucG9zaXRpb24ueCArIGxheW91dFNpemVbIHhQYWRkaW5nIF07XG4gIC8vIHNldCBpbiBwZXJjZW50YWdlIG9yIHBpeGVsc1xuICBzdHlsZVsgeFByb3BlcnR5IF0gPSB0aGlzLmdldFhWYWx1ZSggeCApO1xuICAvLyByZXNldCBvdGhlciBwcm9wZXJ0eVxuICBzdHlsZVsgeFJlc2V0UHJvcGVydHkgXSA9ICcnO1xuXG4gIC8vIHlcbiAgdmFyIHlQYWRkaW5nID0gaXNPcmlnaW5Ub3AgPyAncGFkZGluZ1RvcCcgOiAncGFkZGluZ0JvdHRvbSc7XG4gIHZhciB5UHJvcGVydHkgPSBpc09yaWdpblRvcCA/ICd0b3AnIDogJ2JvdHRvbSc7XG4gIHZhciB5UmVzZXRQcm9wZXJ0eSA9IGlzT3JpZ2luVG9wID8gJ2JvdHRvbScgOiAndG9wJztcblxuICB2YXIgeSA9IHRoaXMucG9zaXRpb24ueSArIGxheW91dFNpemVbIHlQYWRkaW5nIF07XG4gIC8vIHNldCBpbiBwZXJjZW50YWdlIG9yIHBpeGVsc1xuICBzdHlsZVsgeVByb3BlcnR5IF0gPSB0aGlzLmdldFlWYWx1ZSggeSApO1xuICAvLyByZXNldCBvdGhlciBwcm9wZXJ0eVxuICBzdHlsZVsgeVJlc2V0UHJvcGVydHkgXSA9ICcnO1xuXG4gIHRoaXMuY3NzKCBzdHlsZSApO1xuICB0aGlzLmVtaXRFdmVudCggJ2xheW91dCcsIFsgdGhpcyBdICk7XG59O1xuXG5wcm90by5nZXRYVmFsdWUgPSBmdW5jdGlvbiggeCApIHtcbiAgdmFyIGlzSG9yaXpvbn
118RhbCA9IHRoaXMubGF5b3V0Ll9nZXRPcHRpb24oJ2hvcml6b250YWwnKTtcbiAgcmV0dXJuIHRoaXMubGF5b3V0Lm9wdGlvbnMucGVyY2VudFBvc2l0aW9uICYmICFpc0hvcml6b250YWwgP1xuICAgICggKCB4IC8gdGhpcy5sYXlvdXQuc2l6ZS53aWR0aCApICogMTAwICkgKyAnJScgOiB4ICsgJ3B4Jztcbn07XG5cbnByb3RvLmdldFlWYWx1ZSA9IGZ1bmN0aW9uKCB5ICkge1xuICB2YXIgaXNIb3Jpem9udGFsID0gdGhpcy5sYXlvdXQuX2dldE9wdGlvbignaG9yaXpvbnRhbCcpO1xuICByZXR1cm4gdGhpcy5sYXlvdXQub3B0aW9ucy5wZXJjZW50UG9zaXRpb24gJiYgaXNIb3Jpem9udGFsID9cbiAgICAoICggeSAvIHRoaXMubGF5b3V0LnNpemUuaGVpZ2h0ICkgKiAxMDAgKSArICclJyA6IHkgKyAncHgnO1xufTtcblxucHJvdG8uX3RyYW5zaXRpb25UbyA9IGZ1bmN0aW9uKCB4LCB5ICkge1xuICB0aGlzLmdldFBvc2l0aW9uKCk7XG4gIC8vIGdldCBjdXJyZW50IHggJiB5IGZyb20gdG9wL2xlZnRcbiAgdmFyIGN1clggPSB0aGlzLnBvc2l0aW9uLng7XG4gIHZhciBjdXJZID0gdGhpcy5wb3NpdGlvbi55O1xuXG4gIHZhciBkaWROb3RNb3ZlID0geCA9PSB0aGlzLnBvc2l0aW9uLnggJiYgeSA9PSB0aGlzLnBvc2l0aW9uLnk7XG5cbiAgLy8gc2F2ZSBlbmQgcG9zaXRpb25cbiAgdGhpcy5zZXRQb3NpdGlvbiggeCwgeSApO1xuXG4gIC8vIGlmIGRpZCBub3QgbW92ZSBhbmQgbm90IHRyYW5zaXRpb25pbmcsIGp1c3QgZ28gdG8gbGF5b3V0XG4gIGlmICggZGlkTm90TW92ZSAmJiAhdGhpcy5pc1RyYW5zaXRpb25pbmcgKSB7XG4gICAgdGhpcy5sYXlvdXRQb3NpdGlvbigpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB0cmFuc1ggPSB4IC0gY3VyWDtcbiAgdmFyIHRyYW5zWSA9IHkgLSBjdXJZO1xuICB2YXIgdHJhbnNpdGlvblN0eWxlID0ge307XG4gIHRyYW5zaXRpb25TdHlsZS50cmFuc2Zvcm0gPSB0aGlzLmdldFRyYW5zbGF0ZSggdHJhbnNYLCB0cmFuc1kgKTtcblxuICB0aGlzLnRyYW5zaXRpb24oe1xuICAgIHRvOiB0cmFuc2l0aW9uU3R5bGUsXG4gICAgb25UcmFuc2l0aW9uRW5kOiB7XG4gICAgICB0cmFuc2Zvcm06IHRoaXMubGF5b3V0UG9zaXRpb25cbiAgICB9LFxuICAgIGlzQ2xlYW5pbmc6IHRydWVcbiAgfSk7XG59O1xuXG5wcm90by5nZXRUcmFuc2xhdGUgPSBmdW5jdGlvbiggeCwgeSApIHtcbiAgLy8gZmxpcCBjb29yaWRpbmF0ZXMgaWYgb3JpZ2luIG9uIHJpZ2h0IG9yIGJvdHRvbVxuICB2YXIgaXNPcmlnaW5MZWZ0ID0gdGhpcy5sYXlvdXQuX2dldE9wdGlvbignb3JpZ2luTGVmdCcpO1xuICB2YXIgaXNPcmlnaW5Ub3AgPSB0aGlzLmxheW91dC5fZ2V0T3B0aW9uKCdvcmlnaW5Ub3AnKTtcbiAgeCA9IGlzT3JpZ2luTGVmdCA/IHggOiAteDtcbiAgeSA9IGlzT3JpZ2luVG9wID8geSA6IC15O1xuICByZXR1cm4gJ3RyYW5zbGF0ZTNkKCcgKyB4ICsgJ3B4LCAnICsgeSArICdweCwgMCknO1xufTtcblxuLy8gbm9uIHRyYW5zaXRpb24gKyB0cmFuc2Zvcm0gc3VwcG9ydFxucHJvdG8uZ29UbyA9IGZ1bmN0aW9uKCB4LCB5ICkge1xuICB0aGlzLnNldFBvc2l0aW9uKCB4LCB5ICk7XG4gIHRoaXMubGF5b3V0UG9zaXRpb24oKTtcbn07XG5cbnByb3RvLm1vdmVUbyA9IHByb3RvLl90cmFuc2l0aW9uVG87XG5cbnByb3RvLnNldFBvc2l0aW9uID0gZnVuY3Rpb24oIHgsIHkgKSB7XG4gIHRoaXMucG9zaXRpb24ueCA9IHBhcnNlRmxvYXQoIHggKTtcbiAgdGhpcy5wb3NpdGlvbi55ID0gcGFyc2VGbG9hdCggeSApO1xufTtcblxuLy8gLS0tLS0gdHJhbnNpdGlvbiAtLS0tLSAvL1xuXG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdHlsZSAtIENTU1xuICogQHBhcmFtIHtGdW5jdGlvbn0gb25UcmFuc2l0aW9uRW5kXG4gKi9cblxuLy8gbm9uIHRyYW5zaXRpb24sIGp1c3QgdHJpZ2dlciBjYWxsYmFja1xucHJvdG8uX25vblRyYW5zaXRpb24gPSBmdW5jdGlvbiggYXJncyApIHtcbiAgdGhpcy5jc3MoIGFyZ3MudG8gKTtcbiAgaWYgKCBhcmdzLmlzQ2xlYW5pbmcgKSB7XG4gICAgdGhpcy5fcmVtb3ZlU3R5bGVzKCBhcmdzLnRvICk7XG4gIH1cbiAgZm9yICggdmFyIHByb3AgaW4gYXJncy5vblRyYW5zaXRpb25FbmQgKSB7XG4gICAgYXJncy5vblRyYW5zaXRpb25FbmRbIHByb3AgXS5jYWxsKCB0aGlzICk7XG4gIH1cbn07XG5cbi8qKlxuICogcHJvcGVyIHRyYW5zaXRpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBhcmdzIC0gYXJndW1lbnRzXG4gKiAgIEBwYXJhbSB7T2JqZWN0fSB0byAtIHN0eWxlIHRvIHRyYW5zaXRpb24gdG9cbiAqICAgQHBhcmFtIHtPYmplY3R9IGZyb20gLSBzdHlsZSB0byBzdGFydCB0cmFuc2l0aW9uIGZyb21cbiAqICAgQHBhcmFtIHtCb29sZWFufSBpc0NsZWFuaW5nIC0gcmVtb3ZlcyB0cmFuc2l0aW9uIHN0eWxlcyBhZnRlciB0cmFuc2l0aW9uXG4gKiAgIEBwYXJhbSB7RnVuY3Rpb259IG9uVHJhbnNpdGlvbkVuZCAtIGNhbGxiYWNrXG4gKi9cbnByb3RvLnRyYW5zaXRpb24gPSBmdW5jdGlvbiggYXJncyApIHtcbiAgLy8gcmVkaXJlY3QgdG8gbm9uVHJhbnNpdGlvbiBpZiBubyB0cmFuc2l0aW9uIGR1cmF0aW9uXG4gIGlmICggIXBhcnNlRmxvYXQoIHRoaXMubGF5b3V0Lm9wdGlvbnMudHJhbnNpdGlvbkR1cmF0aW9uICkgKSB7XG4gICAgdGhpcy5fbm9uVHJhbnNpdGlvbiggYXJncyApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBfdHJhbnNpdGlvbiA9IHRoaXMuX3RyYW5zbjtcbiAgLy8ga2VlcCB0cmFjayBvZiBvblRyYW5zaXRpb25FbmQgY2FsbGJhY2sgYnkgY3NzIHByb3BlcnR5XG4gIGZvciAoIHZhciBwcm9wIGluIGFyZ3Mub25UcmFuc2l0aW9uRW5kICkge1xuICAgIF90cmFuc2l0aW9uLm9uRW5kWyBwcm9wIF0gPSBhcmdzLm9uVHJhbnNpdGlvbkVuZFsgcHJvcCBdO1xuICB9XG4gIC8vIGtlZXAgdHJhY2sgb2YgcHJvcGVydGllcyB0aGF0IGFyZSB0cmFuc2l0aW9uaW5nXG4gIGZvciAoIHByb3AgaW4gYXJncy50byApIHtcbiAgICBfdHJhbnNpdGlvbi5pbmdQcm9wZXJ0aWVzWyBwcm9wIF0gPSB0cnVlO1xuICAgIC8vIGtlZXAgdHJhY2sgb2YgcHJvcGVydGllcyB0byBjbGVhbiB1cCB3aGVuIHRyYW5zaXRpb24gaXMgZG9uZVxuICAgIGlmICggYXJncy5pc0NsZWFuaW5nICkge1xuICAgICAgX3RyYW5zaXRpb24uY2xlYW5bIHByb3AgXSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgLy8gc2V0IGZyb20gc3R5bGVzXG4gIGlmICggYXJncy5mcm9tICkge1xuICAgIHRoaXMuY3NzKCBhcmdzLmZyb20gKTtcbiAgICAvLyBmb3JjZSByZWRyYXcuIGh0dHA6Ly9ibG9nLmFsZXhtYWNjYXcuY29tL2Nzcy10cmFuc2l0aW9uc1xuICAgIHZhciBoID0gdGh
118pcy5lbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICAvLyBoYWNrIGZvciBKU0hpbnQgdG8gaHVzaCBhYm91dCB1bnVzZWQgdmFyXG4gICAgaCA9IG51bGw7XG4gIH1cbiAgLy8gZW5hYmxlIHRyYW5zaXRpb25cbiAgdGhpcy5lbmFibGVUcmFuc2l0aW9uKCBhcmdzLnRvICk7XG4gIC8vIHNldCBzdHlsZXMgdGhhdCBhcmUgdHJhbnNpdGlvbmluZ1xuICB0aGlzLmNzcyggYXJncy50byApO1xuXG4gIHRoaXMuaXNUcmFuc2l0aW9uaW5nID0gdHJ1ZTtcblxufTtcblxuLy8gZGFzaCBiZWZvcmUgYWxsIGNhcCBsZXR0ZXJzLCBpbmNsdWRpbmcgZmlyc3QgZm9yXG4vLyBXZWJraXRUcmFuc2Zvcm0gPT4gLXdlYmtpdC10cmFuc2Zvcm1cbmZ1bmN0aW9uIHRvRGFzaGVkQWxsKCBzdHIgKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSggLyhbQS1aXSkvZywgZnVuY3Rpb24oICQxICkge1xuICAgIHJldHVybiAnLScgKyAkMS50b0xvd2VyQ2FzZSgpO1xuICB9KTtcbn1cblxudmFyIHRyYW5zaXRpb25Qcm9wcyA9ICdvcGFjaXR5LCcgKyB0b0Rhc2hlZEFsbCggdHJhbnNmb3JtUHJvcGVydHkgKTtcblxucHJvdG8uZW5hYmxlVHJhbnNpdGlvbiA9IGZ1bmN0aW9uKC8qIHN0eWxlICovKSB7XG4gIC8vIEhBQ0sgY2hhbmdpbmcgdHJhbnNpdGlvblByb3BlcnR5IGR1cmluZyBhIHRyYW5zaXRpb25cbiAgLy8gd2lsbCBjYXVzZSB0cmFuc2l0aW9uIHRvIGp1bXBcbiAgaWYgKCB0aGlzLmlzVHJhbnNpdGlvbmluZyApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBtYWtlIGB0cmFuc2l0aW9uOiBmb28sIGJhciwgYmF6YCBmcm9tIHN0eWxlIG9iamVjdFxuICAvLyBIQUNLIHVuLWNvbW1lbnQgdGhpcyB3aGVuIGVuYWJsZVRyYW5zaXRpb24gY2FuIHdvcmtcbiAgLy8gd2hpbGUgYSB0cmFuc2l0aW9uIGlzIGhhcHBlbmluZ1xuICAvLyB2YXIgdHJhbnNpdGlvblZhbHVlcyA9IFtdO1xuICAvLyBmb3IgKCB2YXIgcHJvcCBpbiBzdHlsZSApIHtcbiAgLy8gICAvLyBkYXNoLWlmeSBjYW1lbENhc2VkIHByb3BlcnRpZXMgbGlrZSBXZWJraXRUcmFuc2l0aW9uXG4gIC8vICAgcHJvcCA9IHZlbmRvclByb3BlcnRpZXNbIHByb3AgXSB8fCBwcm9wO1xuICAvLyAgIHRyYW5zaXRpb25WYWx1ZXMucHVzaCggdG9EYXNoZWRBbGwoIHByb3AgKSApO1xuICAvLyB9XG4gIC8vIG11bmdlIG51bWJlciB0byBtaWxsaXNlY29uZCwgdG8gbWF0Y2ggc3RhZ2dlclxuICB2YXIgZHVyYXRpb24gPSB0aGlzLmxheW91dC5vcHRpb25zLnRyYW5zaXRpb25EdXJhdGlvbjtcbiAgZHVyYXRpb24gPSB0eXBlb2YgZHVyYXRpb24gPT0gJ251bWJlcicgPyBkdXJhdGlvbiArICdtcycgOiBkdXJhdGlvbjtcbiAgLy8gZW5hYmxlIHRyYW5zaXRpb24gc3R5bGVzXG4gIHRoaXMuY3NzKHtcbiAgICB0cmFuc2l0aW9uUHJvcGVydHk6IHRyYW5zaXRpb25Qcm9wcyxcbiAgICB0cmFuc2l0aW9uRHVyYXRpb246IGR1cmF0aW9uLFxuICAgIHRyYW5zaXRpb25EZWxheTogdGhpcy5zdGFnZ2VyRGVsYXkgfHwgMFxuICB9KTtcbiAgLy8gbGlzdGVuIGZvciB0cmFuc2l0aW9uIGVuZCBldmVudFxuICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggdHJhbnNpdGlvbkVuZEV2ZW50LCB0aGlzLCBmYWxzZSApO1xufTtcblxuLy8gLS0tLS0gZXZlbnRzIC0tLS0tIC8vXG5cbnByb3RvLm9ud2Via2l0VHJhbnNpdGlvbkVuZCA9IGZ1bmN0aW9uKCBldmVudCApIHtcbiAgdGhpcy5vbnRyYW5zaXRpb25lbmQoIGV2ZW50ICk7XG59O1xuXG5wcm90by5vbm90cmFuc2l0aW9uZW5kID0gZnVuY3Rpb24oIGV2ZW50ICkge1xuICB0aGlzLm9udHJhbnNpdGlvbmVuZCggZXZlbnQgKTtcbn07XG5cbi8vIHByb3BlcnRpZXMgdGhhdCBJIG11bmdlIHRvIG1ha2UgbXkgbGlmZSBlYXNpZXJcbnZhciBkYXNoZWRWZW5kb3JQcm9wZXJ0aWVzID0ge1xuICAnLXdlYmtpdC10cmFuc2Zvcm0nOiAndHJhbnNmb3JtJ1xufTtcblxucHJvdG8ub250cmFuc2l0aW9uZW5kID0gZnVuY3Rpb24oIGV2ZW50ICkge1xuICAvLyBkaXNyZWdhcmQgYnViYmxlZCBldmVudHMgZnJvbSBjaGlsZHJlblxuICBpZiAoIGV2ZW50LnRhcmdldCAhPT0gdGhpcy5lbGVtZW50ICkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgX3RyYW5zaXRpb24gPSB0aGlzLl90cmFuc247XG4gIC8vIGdldCBwcm9wZXJ0eSBuYW1lIG9mIHRyYW5zaXRpb25lZCBwcm9wZXJ0eSwgY29udmVydCB0byBwcmVmaXgtZnJlZVxuICB2YXIgcHJvcGVydHlOYW1lID0gZGFzaGVkVmVuZG9yUHJvcGVydGllc1sgZXZlbnQucHJvcGVydHlOYW1lIF0gfHwgZXZlbnQucHJvcGVydHlOYW1lO1xuXG4gIC8vIHJlbW92ZSBwcm9wZXJ0eSB0aGF0IGhhcyBjb21wbGV0ZWQgdHJhbnNpdGlvbmluZ1xuICBkZWxldGUgX3RyYW5zaXRpb24uaW5nUHJvcGVydGllc1sgcHJvcGVydHlOYW1lIF07XG4gIC8vIGNoZWNrIGlmIGFueSBwcm9wZXJ0aWVzIGFyZSBzdGlsbCB0cmFuc2l0aW9uaW5nXG4gIGlmICggaXNFbXB0eU9iaiggX3RyYW5zaXRpb24uaW5nUHJvcGVydGllcyApICkge1xuICAgIC8vIGFsbCBwcm9wZXJ0aWVzIGhhdmUgY29tcGxldGVkIHRyYW5zaXRpb25pbmdcbiAgICB0aGlzLmRpc2FibGVUcmFuc2l0aW9uKCk7XG4gIH1cbiAgLy8gY2xlYW4gc3R5bGVcbiAgaWYgKCBwcm9wZXJ0eU5hbWUgaW4gX3RyYW5zaXRpb24uY2xlYW4gKSB7XG4gICAgLy8gY2xlYW4gdXAgc3R5bGVcbiAgICB0aGlzLmVsZW1lbnQuc3R5bGVbIGV2ZW50LnByb3BlcnR5TmFtZSBdID0gJyc7XG4gICAgZGVsZXRlIF90cmFuc2l0aW9uLmNsZWFuWyBwcm9wZXJ0eU5hbWUgXTtcbiAgfVxuICAvLyB0cmlnZ2VyIG9uVHJhbnNpdGlvbkVuZCBjYWxsYmFja1xuICBpZiAoIHByb3BlcnR5TmFtZSBpbiBfdHJhbnNpdGlvbi5vbkVuZCApIHtcbiAgICB2YXIgb25UcmFuc2l0aW9uRW5kID0gX3RyYW5zaXRpb24ub25FbmRbIHByb3BlcnR5TmFtZSBdO1xuICAgIG9uVHJhbnNpdGlvbkVuZC5jYWxsKCB0aGlzICk7XG4gICAgZGVsZXRlIF90cmFuc2l0aW9uLm9uRW5kWyBwcm9wZXJ0eU5hbWUgXTtcbiAgfVxuXG4gIHRoaXMuZW1pdEV2ZW50KCAndHJhbnNpdGlvbkVuZCcsIFsgdGhpcyBdICk7XG59O1xuXG5wcm90by5kaXNhYmxlVHJhbnNpdGlvbiA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLnJlbW92ZVRyYW5zaXRpb25TdHlsZXMoKTtcbiAgdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIHRyYW5zaXRpb25FbmRFdmVudCwgdGhpcywgZmFsc2UgKTtcbiAgdGhpcy5pc1RyYW5zaXRpb25pbmcgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogcmVtb3ZlcyBzdHlsZSBwcm9wZXJ0eSBmcm9tIGVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdHlsZVxuKiovXG5wcm90by5f
118cmVtb3ZlU3R5bGVzID0gZnVuY3Rpb24oIHN0eWxlICkge1xuICAvLyBjbGVhbiB1cCB0cmFuc2l0aW9uIHN0eWxlc1xuICB2YXIgY2xlYW5TdHlsZSA9IHt9O1xuICBmb3IgKCB2YXIgcHJvcCBpbiBzdHlsZSApIHtcbiAgICBjbGVhblN0eWxlWyBwcm9wIF0gPSAnJztcbiAgfVxuICB0aGlzLmNzcyggY2xlYW5TdHlsZSApO1xufTtcblxudmFyIGNsZWFuVHJhbnNpdGlvblN0eWxlID0ge1xuICB0cmFuc2l0aW9uUHJvcGVydHk6ICcnLFxuICB0cmFuc2l0aW9uRHVyYXRpb246ICcnLFxuICB0cmFuc2l0aW9uRGVsYXk6ICcnXG59O1xuXG5wcm90by5yZW1vdmVUcmFuc2l0aW9uU3R5bGVzID0gZnVuY3Rpb24oKSB7XG4gIC8vIHJlbW92ZSB0cmFuc2l0aW9uXG4gIHRoaXMuY3NzKCBjbGVhblRyYW5zaXRpb25TdHlsZSApO1xufTtcblxuLy8gLS0tLS0gc3RhZ2dlciAtLS0tLSAvL1xuXG5wcm90by5zdGFnZ2VyID0gZnVuY3Rpb24oIGRlbGF5ICkge1xuICBkZWxheSA9IGlzTmFOKCBkZWxheSApID8gMCA6IGRlbGF5O1xuICB0aGlzLnN0YWdnZXJEZWxheSA9IGRlbGF5ICsgJ21zJztcbn07XG5cbi8vIC0tLS0tIHNob3cvaGlkZS9yZW1vdmUgLS0tLS0gLy9cblxuLy8gcmVtb3ZlIGVsZW1lbnQgZnJvbSBET01cbnByb3RvLnJlbW92ZUVsZW0gPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5lbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHRoaXMuZWxlbWVudCApO1xuICAvLyByZW1vdmUgZGlzcGxheTogbm9uZVxuICB0aGlzLmNzcyh7IGRpc3BsYXk6ICcnIH0pO1xuICB0aGlzLmVtaXRFdmVudCggJ3JlbW92ZScsIFsgdGhpcyBdICk7XG59O1xuXG5wcm90by5yZW1vdmUgPSBmdW5jdGlvbigpIHtcbiAgLy8ganVzdCByZW1vdmUgZWxlbWVudCBpZiBubyB0cmFuc2l0aW9uIHN1cHBvcnQgb3Igbm8gdHJhbnNpdGlvblxuICBpZiAoICF0cmFuc2l0aW9uUHJvcGVydHkgfHwgIXBhcnNlRmxvYXQoIHRoaXMubGF5b3V0Lm9wdGlvbnMudHJhbnNpdGlvbkR1cmF0aW9uICkgKSB7XG4gICAgdGhpcy5yZW1vdmVFbGVtKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gc3RhcnQgdHJhbnNpdGlvblxuICB0aGlzLm9uY2UoICd0cmFuc2l0aW9uRW5kJywgZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZW1vdmVFbGVtKCk7XG4gIH0pO1xuICB0aGlzLmhpZGUoKTtcbn07XG5cbnByb3RvLnJldmVhbCA9IGZ1bmN0aW9uKCkge1xuICBkZWxldGUgdGhpcy5pc0hpZGRlbjtcbiAgLy8gcmVtb3ZlIGRpc3BsYXk6IG5vbmVcbiAgdGhpcy5jc3MoeyBkaXNwbGF5OiAnJyB9KTtcblxuICB2YXIgb3B0aW9ucyA9IHRoaXMubGF5b3V0Lm9wdGlvbnM7XG5cbiAgdmFyIG9uVHJhbnNpdGlvbkVuZCA9IHt9O1xuICB2YXIgdHJhbnNpdGlvbkVuZFByb3BlcnR5ID0gdGhpcy5nZXRIaWRlUmV2ZWFsVHJhbnNpdGlvbkVuZFByb3BlcnR5KCd2aXNpYmxlU3R5bGUnKTtcbiAgb25UcmFuc2l0aW9uRW5kWyB0cmFuc2l0aW9uRW5kUHJvcGVydHkgXSA9IHRoaXMub25SZXZlYWxUcmFuc2l0aW9uRW5kO1xuXG4gIHRoaXMudHJhbnNpdGlvbih7XG4gICAgZnJvbTogb3B0aW9ucy5oaWRkZW5TdHlsZSxcbiAgICB0bzogb3B0aW9ucy52aXNpYmxlU3R5bGUsXG4gICAgaXNDbGVhbmluZzogdHJ1ZSxcbiAgICBvblRyYW5zaXRpb25FbmQ6IG9uVHJhbnNpdGlvbkVuZFxuICB9KTtcbn07XG5cbnByb3RvLm9uUmV2ZWFsVHJhbnNpdGlvbkVuZCA9IGZ1bmN0aW9uKCkge1xuICAvLyBjaGVjayBpZiBzdGlsbCB2aXNpYmxlXG4gIC8vIGR1cmluZyB0cmFuc2l0aW9uLCBpdGVtIG1heSBoYXZlIGJlZW4gaGlkZGVuXG4gIGlmICggIXRoaXMuaXNIaWRkZW4gKSB7XG4gICAgdGhpcy5lbWl0RXZlbnQoJ3JldmVhbCcpO1xuICB9XG59O1xuXG4vKipcbiAqIGdldCBzdHlsZSBwcm9wZXJ0eSB1c2UgZm9yIGhpZGUvcmV2ZWFsIHRyYW5zaXRpb24gZW5kXG4gKiBAcGFyYW0ge1N0cmluZ30gc3R5bGVQcm9wZXJ0eSAtIGhpZGRlblN0eWxlL3Zpc2libGVTdHlsZVxuICogQHJldHVybnMge1N0cmluZ31cbiAqL1xucHJvdG8uZ2V0SGlkZVJldmVhbFRyYW5zaXRpb25FbmRQcm9wZXJ0eSA9IGZ1bmN0aW9uKCBzdHlsZVByb3BlcnR5ICkge1xuICB2YXIgb3B0aW9uU3R5bGUgPSB0aGlzLmxheW91dC5vcHRpb25zWyBzdHlsZVByb3BlcnR5IF07XG4gIC8vIHVzZSBvcGFjaXR5XG4gIGlmICggb3B0aW9uU3R5bGUub3BhY2l0eSApIHtcbiAgICByZXR1cm4gJ29wYWNpdHknO1xuICB9XG4gIC8vIGdldCBmaXJzdCBwcm9wZXJ0eVxuICBmb3IgKCB2YXIgcHJvcCBpbiBvcHRpb25TdHlsZSApIHtcbiAgICByZXR1cm4gcHJvcDtcbiAgfVxufTtcblxucHJvdG8uaGlkZSA9IGZ1bmN0aW9uKCkge1xuICAvLyBzZXQgZmxhZ1xuICB0aGlzLmlzSGlkZGVuID0gdHJ1ZTtcbiAgLy8gcmVtb3ZlIGRpc3BsYXk6IG5vbmVcbiAgdGhpcy5jc3MoeyBkaXNwbGF5OiAnJyB9KTtcblxuICB2YXIgb3B0aW9ucyA9IHRoaXMubGF5b3V0Lm9wdGlvbnM7XG5cbiAgdmFyIG9uVHJhbnNpdGlvbkVuZCA9IHt9O1xuICB2YXIgdHJhbnNpdGlvbkVuZFByb3BlcnR5ID0gdGhpcy5nZXRIaWRlUmV2ZWFsVHJhbnNpdGlvbkVuZFByb3BlcnR5KCdoaWRkZW5TdHlsZScpO1xuICBvblRyYW5zaXRpb25FbmRbIHRyYW5zaXRpb25FbmRQcm9wZXJ0eSBdID0gdGh
118pcy5vbkhpZGVUcmFuc2l0aW9uRW5kO1xuXG4gIHRoaXMudHJhbnNpdGlvbih7XG4gICAgZnJvbTogb3B0aW9ucy52aXNpYmxlU3R5bGUsXG4gICAgdG86IG9wdGlvbnMuaGlkZGVuU3R5bGUsXG4gICAgLy8ga2VlcCBoaWRkZW4gc3R1ZmYgaGlkZGVuXG4gICAgaXNDbGVhbmluZzogdHJ1ZSxcbiAgICBvblRyYW5zaXRpb25FbmQ6IG9uVHJhbnNpdGlvbkVuZFxuICB9KTtcbn07XG5cbnByb3RvLm9uSGlkZVRyYW5zaXRpb25FbmQgPSBmdW5jdGlvbigpIHtcbiAgLy8gY2hlY2sgaWYgc3RpbGwgaGlkZGVuXG4gIC8vIGR1cmluZyB0cmFuc2l0aW9uLCBpdGVtIG1heSBoYXZlIGJlZW4gdW4taGlkZGVuXG4gIGlmICggdGhpcy5pc0hpZGRlbiApIHtcbiAgICB0aGlzLmNzcyh7IGRpc3BsYXk6ICdub25lJyB9KTtcbiAgICB0aGlzLmVtaXRFdmVudCgnaGlkZScpO1xuICB9XG59O1xuXG5wcm90by5kZXN0cm95ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuY3NzKHtcbiAgICBwb3NpdGlvbjogJycsXG4gICAgbGVmdDogJycsXG4gICAgcmlnaHQ6ICcnLFxuICAgIHRvcDogJycsXG4gICAgYm90dG9tOiAnJyxcbiAgICB0cmFuc2l0aW9uOiAnJyxcbiAgICB0cmFuc2Zvcm06ICcnXG4gIH0pO1xufTtcblxucmV0dXJuIEl0ZW07XG5cbn0pKTtcbiIsIi8qIVxuICogT3V0bGF5ZXIgdjIuMS4xXG4gKiB0aGUgYnJhaW5zIGFuZCBndXRzIG9mIGEgbGF5b3V0IGxpYnJhcnlcbiAqIE1JVCBsaWNlbnNlXG4gKi9cblxuKCBmdW5jdGlvbiggd2luZG93LCBmYWN0b3J5ICkge1xuICAndXNlIHN0cmljdCc7XG4gIC8vIHVuaXZlcnNhbCBtb2R1bGUgZGVmaW5pdGlvblxuICAvKiBqc2hpbnQgc3RyaWN0OiBmYWxzZSAqLyAvKiBnbG9iYWxzIGRlZmluZSwgbW9kdWxlLCByZXF1aXJlICovXG4gIGlmICggdHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgKSB7XG4gICAgLy8gQU1EIC0gUmVxdWlyZUpTXG4gICAgZGVmaW5lKCBbXG4gICAgICAgICdldi1lbWl0dGVyL2V2LWVtaXR0ZXInLFxuICAgICAgICAnZ2V0LXNpemUvZ2V0LXNpemUnLFxuICAgICAgICAnZml6enktdWktdXRpbHMvdXRpbHMnLFxuICAgICAgICAnLi9pdGVtJ1xuICAgICAgXSxcbiAgICAgIGZ1bmN0aW9uKCBFdkVtaXR0ZXIsIGdldFNpemUsIHV0aWxzLCBJdGVtICkge1xuICAgICAgICByZXR1cm4gZmFjdG9yeSggd2luZG93LCBFdkVtaXR0ZXIsIGdldFNpemUsIHV0aWxzLCBJdGVtKTtcbiAgICAgIH1cbiAgICApO1xuICB9IGVsc2UgaWYgKCB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzICkge1xuICAgIC8vIENvbW1vbkpTIC0gQnJvd3NlcmlmeSwgV2VicGFja1xuICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShcbiAgICAgIHdpbmRvdyxcbiAgICAgIHJlcXVpcmUoJ2V2LWVtaXR0ZXInKSxcbiAgICAgIHJlcXVpcmUoJ2dldC1zaXplJyksXG4gICAgICByZXF1aXJlKCdmaXp6eS11aS11dGlscycpLFxuICAgICAgcmVxdWlyZSgnLi9pdGVtJylcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIC8vIGJyb3dzZXIgZ2xvYmFsXG4gICAgd2luZG93Lk91dGxheWVyID0gZmFjdG9yeShcbiAgICAgIHdpbmRvdyxcbiAgICAgIHdpbmRvdy5FdkVtaXR0ZXIsXG4gICAgICB3aW5kb3cuZ2V0U2l6ZSxcbiAgICAgIHdpbmRvdy5maXp6eVVJVXRpbHMsXG4gICAgICB3aW5kb3cuT3V0bGF5ZXIuSXRlbVxuICAgICk7XG4gIH1cblxufSggd2luZG93LCBmdW5jdGlvbiBmYWN0b3J5KCB3aW5kb3csIEV2RW1pdHRlciwgZ2V0U2l6ZSwgdXRpbHMsIEl0ZW0gKSB7XG4ndXNlIHN0cmljdCc7XG5cbi8vIC0tLS0tIHZhcnMgLS0tLS0gLy9cblxudmFyIGNvbnNvbGUgPSB3aW5kb3cuY29uc29sZTtcbnZhciBqUXVlcnkgPSB3aW5kb3cualF1ZXJ5O1xudmFyIG5vb3AgPSBmdW5jdGlvbigpIHt9O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPdXRsYXllciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG4vLyBnbG9iYWxseSB1bmlxdWUgaWRlbnRpZmllcnNcbnZhciBHVUlEID0gMDtcbi8vIGludGVybmFsIHN0b3JlIG9mIGFsbCBPdXRsYXllciBpbnRhbmNlc1xudmFyIGluc3RhbmNlcyA9IHt9O1xuXG5cbi8qKlxuICogQHBhcmFtIHtFbGVtZW50LCBTdHJpbmd9IGVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gT3V0bGF5ZXIoIGVsZW1lbnQsIG9wdGlvbnMgKSB7XG4gIHZhciBxdWVyeUVsZW1lbnQgPSB1dGlscy5nZXRRdWVyeUVsZW1lbnQoIGVsZW1lbnQgKTtcbiAgaWYgKCAhcXVlcnlFbGVtZW50ICkge1xuICAgIGlmICggY29uc29sZSApIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoICdCYWQgZWxlbWVudCBmb3IgJyArIHRoaXMuY29uc3RydWN0b3IubmFtZXNwYWNlICtcbiAgICAgICAgJzogJyArICggcXVlcnlFbGVtZW50IHx8IGVsZW1lbnQgKSApO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5lbGVtZW50ID0gcXVlcnlFbGVtZW50O1xuICAvLyBhZGQgalF1ZXJ5XG4gIGlmICggalF1ZXJ5ICkge1xuICAgIHRoaXMuJGVsZW1lbnQgPSBqUXVlcnkoIHRoaXMuZWxlbWVudCApO1xuICB9XG5cbiAgLy8gb3B0aW9uc1xuICB0aGlzLm9wdGlvbnMgPSB1dGlscy5leHRlbmQoIHt9LCB0aGlzLmNvbnN0cnVjdG9yLmRlZmF1bHRzICk7XG4gIHRoaXMub3B0aW9uKCBvcHRpb25zICk7XG5cbiAgLy8gYWRkIGlkIGZvciBPdXRsYXllci5nZXRGcm9tRWxlbWVudFxuICB2YXIgaWQgPSArK0dVSUQ7XG4gIHRoaXMuZWxlbWVudC5vdXRsYXllckdVSUQgPSBpZDsgLy8gZXhwYW5kb1xuICBpbnN0YW5jZXNbIGlkIF0gPSB0aGlzOyAvLyBhc3NvY2lhdGUgdmlhIGlkXG5cbiAgLy8ga2ljayBpdCBvZmZcbiAgdGhpcy5fY3JlYXRlKCk7XG5cbiAgdmFyIGlzSW5pdExheW91dCA9IHRoaXMuX2dldE9wdGlvbignaW5pdExheW91dCcpO1xuICBpZiAoIGlzSW5pdExheW91dCApIHtcbiAgICB0aGlzLmxheW91dCgpO1xuICB9XG59XG5cbi8vIHNldHRpbmdzIGFyZSBmb3IgaW50ZXJuYWwgdXNlIG9ubHlcbk91dGxheWVyLm5hbWVzcGFjZSA9ICdvdXRsYXllcic7XG5PdXRsYXllci5JdGVtID0gSXRlbTtcblxuLy8gZGVmYXVsdCBvcHRpb25zXG5PdXRsYXllci5kZWZhdWx0cyA9IHtcbiAgY29udGFpbmVyU3R5bGU6IHtcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJ1xuICB9LFxuICBpbml0TGF5b3V0OiB0cnVlLFxuICBvcmlnaW5MZWZ0OiB0cnVlLFxuICBvcmlnaW5Ub3A6IHRydWUsXG4gIHJlc2l6ZTogdHJ1ZSxcbiAgcmVzaXplQ29udGFpbmVyOiB0cnVlLFxuICAvLyBpdGVtIG9wdGlvbnNcbiAgdHJhbnNpdGlvbkR1cmF0aW9uOiAnMC40cycsXG4gIGhpZGRlblN0eWxlOiB7XG4gICAgb3BhY2l0eTogMCxcbiAgICB0cmFuc2Zvcm06ICdzY2FsZSgwLjAwMSknXG4gIH0sXG4gIHZpc2libGVTdHlsZToge1xuICAgIG9wYWNpdHk6IDEsXG4gICAgdHJhbnNmb3JtOiAnc2NhbGUoMSknXG4gIH1cbn07XG5cbnZhciBwcm90byA9IE91dGxheWVyLnByb3RvdHlwZTtcbi8vIGluaGVyaXQgRXZFbWl0dGVyXG51dGlscy5leHRlbmQoIHByb3RvLCBFdkVtaXR0ZXIucHJvdG90eXBlICk7XG5cbi8qKlxuICogc2V0IG9wdGlvbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gKi9cbnByb3RvLm9wdGlvbiA9IGZ1bmN0aW9uKCBvcHRzICkge1xuICB1dGlscy5leHRlbmQoIHRoaXMub3B0aW9ucywgb3B0cyApO1xufTtcblxuLyoqXG4gKiBnZXQgYmFja3dhcmRzIGNvbXBhdGlibGUgb3B0aW9uIHZhbHVlLCBjaGVjayBvbGQgbmFtZVxuICovXG5wcm90by5fZ2V0T3B0aW9uID0gZnVuY3Rpb24oIG9wdGlvbiApIHtcbiAgdmFyIG9sZE9wdGlvbiA9IHRoaXMuY29uc3RydWN0b3IuY29tcGF0T3B0aW9uc1sgb3B0aW9uIF07XG4gIHJldHVybi
118BvbGRPcHRpb24gJiYgdGhpcy5vcHRpb25zWyBvbGRPcHRpb24gXSAhPT0gdW5kZWZpbmVkID9cbiAgICB0aGlzLm9wdGlvbnNbIG9sZE9wdGlvbiBdIDogdGhpcy5vcHRpb25zWyBvcHRpb24gXTtcbn07XG5cbk91dGxheWVyLmNvbXBhdE9wdGlvbnMgPSB7XG4gIC8vIGN1cnJlbnROYW1lOiBvbGROYW1lXG4gIGluaXRMYXlvdXQ6ICdpc0luaXRMYXlvdXQnLFxuICBob3Jpem9udGFsOiAnaXNIb3Jpem9udGFsJyxcbiAgbGF5b3V0SW5zdGFudDogJ2lzTGF5b3V0SW5zdGFudCcsXG4gIG9yaWdpbkxlZnQ6ICdpc09yaWdpbkxlZnQnLFxuICBvcmlnaW5Ub3A6ICdpc09yaWdpblRvcCcsXG4gIHJlc2l6ZTogJ2lzUmVzaXplQm91bmQnLFxuICByZXNpemVDb250YWluZXI6ICdpc1Jlc2l6aW5nQ29udGFpbmVyJ1xufTtcblxucHJvdG8uX2NyZWF0ZSA9IGZ1bmN0aW9uKCkge1xuICAvLyBnZXQgaXRlbXMgZnJvbSBjaGlsZHJlblxuICB0aGlzLnJlbG9hZEl0ZW1zKCk7XG4gIC8vIGVsZW1lbnRzIHRoYXQgYWZmZWN0IGxheW91dCwgYnV0IGFyZSBub3QgbGFpZCBvdXRcbiAgdGhpcy5zdGFtcHMgPSBbXTtcbiAgdGhpcy5zdGFtcCggdGhpcy5vcHRpb25zLnN0YW1wICk7XG4gIC8vIHNldCBjb250YWluZXIgc3R5bGVcbiAgdXRpbHMuZXh0ZW5kKCB0aGlzLmVsZW1lbnQuc3R5bGUsIHRoaXMub3B0aW9ucy5jb250YWluZXJTdHlsZSApO1xuXG4gIC8vIGJpbmQgcmVzaXplIG1ldGhvZFxuICB2YXIgY2FuQmluZFJlc2l6ZSA9IHRoaXMuX2dldE9wdGlvbigncmVzaXplJyk7XG4gIGlmICggY2FuQmluZFJlc2l6ZSApIHtcbiAgICB0aGlzLmJpbmRSZXNpemUoKTtcbiAgfVxufTtcblxuLy8gZ29lcyB0aHJvdWdoIGFsbCBjaGlsZHJlbiBhZ2FpbiBhbmQgZ2V0cyBicmlja3MgaW4gcHJvcGVyIG9yZGVyXG5wcm90by5yZWxvYWRJdGVtcyA9IGZ1bmN0aW9uKCkge1xuICAvLyBjb2xsZWN0aW9uIG9mIGl0ZW0gZWxlbWVudHNcbiAgdGhpcy5pdGVtcyA9IHRoaXMuX2l0ZW1pemUoIHRoaXMuZWxlbWVudC5jaGlsZHJlbiApO1xufTtcblxuXG4vKipcbiAqIHR1cm4gZWxlbWVudHMgaW50byBPdXRsYXllci5JdGVtcyB0byBiZSB1c2VkIGluIGxheW91dFxuICogQHBhcmFtIHtBcnJheSBvciBOb2RlTGlzdCBvciBIVE1MRWxlbWVudH0gZWxlbXNcbiAqIEByZXR1cm5zIHtBcnJheX0gaXRlbXMgLSBjb2xsZWN0aW9uIG9mIG5ldyBPdXRsYXllciBJdGVtc1xuICovXG5wcm90by5faXRlbWl6ZSA9IGZ1bmN0aW9uKCBlbGVtcyApIHtcblxuICB2YXIgaXRlbUVsZW1zID0gdGhpcy5fZmlsdGVyRmluZEl0ZW1FbGVtZW50cyggZWxlbXMgKTtcbiAgdmFyIEl0ZW0gPSB0aGlzLmNvbnN0cnVjdG9yLkl0ZW07XG5cbiAgLy8gY3JlYXRlIG5ldyBPdXRsYXllciBJdGVtcyBmb3IgY29sbGVjdGlvblxuICB2Y
118XIgaXRlbXMgPSBbXTtcbiAgZm9yICggdmFyIGk9MDsgaSA8IGl0ZW1FbGVtcy5sZW5ndGg7IGkrKyApIHtcbiAgICB2YXIgZWxlbSA9IGl0ZW1FbGVtc1tpXTtcbiAgICB2YXIgaXRlbSA9IG5ldyBJdGVtKCBlbGVtLCB0aGlzICk7XG4gICAgaXRlbXMucHVzaCggaXRlbSApO1xuICB9XG5cbiAgcmV0dXJuIGl0ZW1zO1xufTtcblxuLyoqXG4gKiBnZXQgaXRlbSBlbGVtZW50cyB0byBiZSB1c2VkIGluIGxheW91dFxuICogQHBhcmFtIHtBcnJheSBvciBOb2RlTGlzdCBvciBIVE1MRWxlbWVudH0gZWxlbXNcbiAqIEByZXR1cm5zIHtBcnJheX0gaXRlbXMgLSBpdGVtIGVsZW1lbnRzXG4gKi9cbnByb3RvLl9maWx0ZXJGaW5kSXRlbUVsZW1lbnRzID0gZnVuY3Rpb24oIGVsZW1zICkge1xuICByZXR1cm4gdXRpbHMuZmlsdGVyRmluZEVsZW1lbnRzKCBlbGVtcywgdGhpcy5vcHRpb25zLml0ZW1TZWxlY3RvciApO1xufTtcblxuLyoqXG4gKiBnZXR0ZXIgbWV0aG9kIGZvciBnZXR0aW5nIGl0ZW0gZWxlbWVudHNcbiAqIEByZXR1cm5zIHtBcnJheX0gZWxlbXMgLSBjb2xsZWN0aW9uIG9mIGl0ZW0gZWxlbWVudHNcbiAqL1xucHJvdG8uZ2V0SXRlbUVsZW1lbnRzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLml0ZW1zLm1hcCggZnVuY3Rpb24oIGl0ZW0gKSB7XG4gICAgcmV0dXJuIGl0ZW0uZWxlbWVudDtcbiAgfSk7XG59O1xuXG4vLyAtLS0tLSBpbml0ICYgbGF5b3V0IC0tLS0tIC8vXG5cbi8qKlxuICogbGF5cyBvdXQgYWxsIGl0ZW1zXG4gKi9cbnByb3RvLmxheW91dCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9yZXNldExheW91dCgpO1xuICB0aGlzLl9tYW5hZ2VTdGFtcHMoKTtcblxuICAvLyBkb24ndCBhbmltYXRlIGZpcnN0IGxheW91dFxuICB2YXIgbGF5b3V0SW5zdGFudCA9IHRoaXMuX2dldE9wdGlvbignbGF5b3V0SW5zdGFudCcpO1xuICB2YXIgaXNJbnN0YW50ID0gbGF5b3V0SW5zdGFudCAhPT0gdW5kZWZpbmVkID9cbiAgICBsYXlvdXRJbnN0YW50IDogIXRoaXMuX2lzTGF5b3V0SW5pdGVkO1xuICB0aGlzLmxheW91dEl0ZW1zKCB0aGlzLml0ZW1zLCBpc0luc3RhbnQgKTtcblxuICAvLyBmbGFnIGZvciBpbml0YWxpemVkXG4gIHRoaXMuX2lzTGF5b3V0SW5pdGVkID0gdHJ1ZTtcbn07XG5cbi8vIF9pbml0IGlzIGFsaWFzIGZvciBsYXlvdXRcbnByb3RvLl9pbml0ID0gcHJvdG8ubGF5b3V0O1xuXG4vKipcbiAqIGxvZ2ljIGJlZm9yZSBhbnkgbmV3IGxheW91dFxuICovXG5wcm90by5fcmVzZXRMYXlvdXQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5nZXRTaXplKCk7XG59O1xuXG5cbnByb3RvLmdldFNpemUgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5zaXplID0gZ2V0U2l6ZSggdGhpcy5lbGVtZW50ICk7XG59O1xuXG4vKipcbiAqIGdldCBtZWFzdXJlbWVudCBmcm9tIG9wdGlvbiwgZm9yIGNvbHVtbldpZHRoLCByb3dIZWlnaHQsIGd1dHRlclxuICogaWYgb3B0aW9uIGlzIFN0cmluZyAtPiBnZXQgZWxlbWVudCBmcm9tIHNlbGVjdG9yIHN0cmluZywgJiBnZXQgc2l6ZSBvZiBlbGVtZW50XG4gKiBpZiBvcHRpb24gaXMgRWxlbWVudCAtPiBnZXQgc2l6ZSBvZiBlbGVtZW50XG4gKiBlbHNlIHVzZSBvcHRpb24gYXMgYSBudW1iZXJcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbWVhc3VyZW1lbnRcbiAqIEBwYXJhbSB7U3RyaW5nfSBzaXplIC0gd2lkdGggb3IgaGVpZ2h0XG4gKiBAcHJpdmF0ZVxuICovXG5wcm90by5fZ2V0TWVhc3VyZW1lbnQgPSBmdW5jdGlvbiggbWVhc3VyZW1lbnQsIHNpemUgKSB7XG4gIHZhciBvcHRpb24gPSB0aGlzLm9wdGlvbnNbIG1lYXN1cmVtZW50IF07XG4gIHZhciBlbGVtO1xuICBpZiAoICFvcHRpb24gKSB7XG4gICAgLy8gZGVmYXVsdCB0byAwXG4gICAgdGhpc1sgbWVhc3VyZW1lbnQgXSA9IDA7XG4gIH0gZWxzZSB7XG4gICAgLy8gdXNlIG9wdGlvbiBhcyBhbiBlbGVtZW50XG4gICAgaWYgKCB0eXBlb2Ygb3B0aW9uID09ICdzdHJpbmcnICkge1xuICAgICAgZWxlbSA9IHRoaXMuZWxlbWVudC5xdWVyeVNlbGVjdG9yKCBvcHRpb24gKTtcbiAgICB9IGVsc2UgaWYgKCBvcHRpb24gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCApIHtcbiAgICAgIGVsZW0gPSBvcHRpb247XG4gICAgfVxuICAgIC8vIHVzZSBzaXplIG9mIGVsZW1lbnQsIGlmIGVsZW1lbnRcbiAgICB0aGlzWyBtZWFzdXJlbWVudCBdID0gZWxlbSA/IGdldFNpemUoIGVsZW0gKVsgc2l6ZSBdIDogb3B0aW9uO1xuICB9XG59O1xuXG4vKipcbiAqIGxheW91dCBhIGNvbGxlY3Rpb24gb2YgaXRlbSBlbGVtZW50c1xuICogQGFwaSBwdWJsaWNcbiAqL1xucHJvdG8ubGF5b3V0SXRlbXMgPSBmdW5jdGlvbiggaXRlbXMsIGlzSW5zdGFudCApIHtcbiAgaXRlbXMgPSB0aGlzLl9nZXRJdGVtc0ZvckxheW91dCggaXRlbXMgKTtcblxuICB0aGlzLl9sYXlvdXRJdGVtcyggaXRlbXMsIGlzSW5zdGFudCApO1xuXG4gIHRoaXMuX3Bvc3RMYXlvdXQoKTtcbn07XG5cbi8qKlxuICogZ2V0IHRoZSBpdGVtcyB0byBiZSBsYWlkIG91dFxuICogeW91IG1heSB3YW50IHRvIHNraXAgb3ZlciBzb21lIGl0ZW1zXG4gKiBAcGFyYW0ge0FycmF5fSBpdGVtc1xuICogQHJldHVybnMge0FycmF5fSBpdGVtc1xuICovXG5wcm90by5fZ2V0SXRlbXNGb3JMYXlvdXQgPSBmdW5jdGlvbiggaXRlbXMgKSB7XG4gIHJldHVybiBpdGVtcy5maWx0ZXIoIGZ1bmN0aW9uKCBpdGVtICkge1xuICAgIHJldHVybiAhaXRlbS5pc0lnbm9yZWQ7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBsYXlvdXQgaXRlbXNcbiAqIEBwYXJhbSB7QXJyYXl9IGl0ZW1zXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGlzSW5zdGFudFxuICovXG5wcm90by5fbGF5b3V0SXRlbXMgPSBmdW5jdGlvbiggaXRlbXMsIGlzSW5zdGFudCApIHtcbiAgdGhpcy5fZW1pdENvbXBsZXRlT25JdGVtcyggJ2xheW91dCcsIGl0ZW1zICk7XG5cbiAgaWYgKCAhaXRlbXMgfHwgIWl0ZW1zLmxlbmd0aCApIHtcbiAgICAvLyBubyBpdGVtcywgZW1pdCBldmVudCB3aXRoIGVtcHR5IGFycmF5XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHF1ZXVlID0gW107XG5cbiAgaXRlbXMuZm9yRWFjaCggZnVuY3Rpb24oIGl0ZW0gKSB7XG4gICAgLy8gZ2V0IHgveSBvYmplY3QgZnJvbSBtZXRob2RcbiAgICB2YXIgcG9zaXRpb24gPSB0aGlzLl9nZXRJdGVtTGF5b3V0UG9zaXRpb24oIGl0ZW0gKTtcbiAgICAvLyBlbnF1ZXVlXG4gICAgcG9zaXRpb24uaXRlbSA9IGl0ZW07XG4gICAgcG9zaXRpb24uaXNJbnN0YW50ID0gaXNJbnN0YW50IHx8IGl0ZW0uaXNMYXlvdXRJbnN0YW50O1xuICAgIHF1ZXVlLnB1c2goIHBvc2l0aW9uICk7XG4gIH0sIHRoaXMgKTtcblxuICB0aGlzLl9wcm9jZXNzTGF5b3V0UXVldWUoIHF1ZXVlICk7XG59O1xuXG4vKipcbiAqIGdldCBpdGVtIGxheW91dCBwb3NpdGlvblxuICogQHBhcmFtIHtPdXRsYXllci5JdGVtfSBpdGVtXG4gKiBAcmV0dXJucyB7T2JqZWN0fSB4IGFuZCB5IHBvc2l0aW9uXG4gKi9cbnByb3RvLl9nZXRJdGVtTGF5b3V0UG9zaXRpb24gPSBmdW5jdGlvbiggLyogaXRlbSAqLyApIHtcbiAgcmV0dXJuIHtcbiAgICB4OiAwLFxuICAgIHk6IDBcbiAgfTtcbn07XG5cbi8qKlxuICogaXRlcmF0ZSBvdmVyIGFycmF5IGFuZCBwb3NpdGlvbiBlYWNoIGl0ZW1cbiAqIFJlYXNvbiBiZWluZyAtIHNlcGFyYXRpbmcgdGhpcyBsb2dpYyBwcmV2ZW50cyAnbGF5b3V0IGludmFsaWRhdGlvbidcbiAqIHRoeCBAcGF1bF9pcmlzaFxuICogQHBhcmFtIHtBcnJheX0gcXVldWVcbiAqL1xucHJvdG8uX3Byb2Nlc3NMYXlvdXRRdWV1ZSA9IGZ1bmN0aW9uKCBxdW
118V1ZSApIHtcbiAgdGhpcy51cGRhdGVTdGFnZ2VyKCk7XG4gIHF1ZXVlLmZvckVhY2goIGZ1bmN0aW9uKCBvYmosIGkgKSB7XG4gICAgdGhpcy5fcG9zaXRpb25JdGVtKCBvYmouaXRlbSwgb2JqLngsIG9iai55LCBvYmouaXNJbnN0YW50LCBpICk7XG4gIH0sIHRoaXMgKTtcbn07XG5cbi8vIHNldCBzdGFnZ2VyIGZyb20gb3B0aW9uIGluIG1pbGxpc2Vjb25kcyBudW1iZXJcbnByb3RvLnVwZGF0ZVN0YWdnZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHN0YWdnZXIgPSB0aGlzLm9wdGlvbnMuc3RhZ2dlcjtcbiAgaWYgKCBzdGFnZ2VyID09PSBudWxsIHx8IHN0YWdnZXIgPT09IHVuZGVmaW5lZCApIHtcbiAgICB0aGlzLnN0YWdnZXIgPSAwO1xuICAgIHJldHVybjtcbiAgfVxuICB0aGlzLnN0YWdnZXIgPSBnZXRNaWxsaXNlY29uZHMoIHN0YWdnZXIgKTtcbiAgcmV0dXJuIHRoaXMuc3RhZ2dlcjtcbn07XG5cbi8qKlxuICogU2V0cyBwb3NpdGlvbiBvZiBpdGVtIGluIERPTVxuICogQHBhcmFtIHtPdXRsYXllci5JdGVtfSBpdGVtXG4gKiBAcGFyYW0ge051bWJlcn0geCAtIGhvcml6b250YWwgcG9zaXRpb25cbiAqIEBwYXJhbSB7TnVtYmVyfSB5IC0gdmVydGljYWwgcG9zaXRpb25cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNJbnN0YW50IC0gZGlzYWJsZXMgdHJhbnNpdGlvbnNcbiAqL1xucHJvdG8uX3Bvc2l0aW9uSXRlbSA9IGZ1bmN0aW9uKCBpdGVtLCB4LCB5LCBpc0luc3RhbnQsIGkgKSB7XG4gIGlmICggaXNJbnN0YW50ICkge1xuICAgIC8vIGlmIG5vdCB0cmFuc2l0aW9uLCBqdXN0IHNldCBDU1NcbiAgICBpdGVtLmdvVG8oIHgsIHkgKTtcbiAgfSBlbHNlIHtcbiAgICBpdGVtLnN0YWdnZXIoIGkgKiB0aGlzLnN0YWdnZXIgKTtcbiAgICBpdGVtLm1vdmVUbyggeCwgeSApO1xuICB9XG59O1xuXG4vKipcbiAqIEFueSBsb2dpYyB5b3Ugd2FudCB0byBkbyBhZnRlciBlYWNoIGxheW91dCxcbiAqIGkuZS4gc2l6ZSB0aGUgY29udGFpbmVyXG4gKi9cbnByb3RvLl9wb3N0TGF5b3V0ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMucmVzaXplQ29udGFpbmVyKCk7XG59O1xuXG5wcm90by5yZXNpemVDb250YWluZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGlzUmVzaXppbmdDb250YWluZXIgPSB0aGlzLl9nZXRPcHRpb24oJ3Jlc2l6ZUNvbnRhaW5lcicpO1xuICBpZiAoICFpc1Jlc2l6aW5nQ29udGFpbmVyICkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgc2l6ZSA9IHRoaXMuX2dldENvbnRhaW5lclNpemUoKTtcbiAgaWYgKCBzaXplICkge1xuICAgIHRoaXMuX3NldENvbnRhaW5lck1lYXN1cmUoIHNpemUud2lkdGgsIHRydWUgKTtcbiAgICB0aGlzLl9zZXRDb250YWluZXJNZWFzdXJlKCBzaXplLmhlaWdodCwgZmFsc2UgKTtcbiAgfVxufTtcblxuLyoqXG4gKiBTZXRzIHdpZHRoIG9yIGhlaWdodCBvZiBjb250YWluZXIgaWYgcmV0dXJuZWRcbiAqIEByZXR1cm5zIHtPYmplY3R9IHNpemVcbiAqICAgQHBhcmFtIHtOdW1iZXJ9IHdpZHRoXG4gKiAgIEBwYXJhbSB7TnVtYmVyfSBoZWlnaHRcbiAqL1xucHJvdG8uX2dldENvbnRhaW5lclNpemUgPSBub29wO1xuXG4vKipcbiAqIEBwYXJhbSB7TnVtYmVyfSBtZWFzdXJlIC0gc2l6ZSBvZiB3aWR0aCBvciBoZWlnaHRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNXaWR0aFxuICovXG5wcm90by5fc2V0Q29udGFpbmVyTWVhc3VyZSA9IGZ1bmN0aW9uKCBtZWFzdXJlLCBpc1dpZHRoICkge1xuICBpZiAoIG1lYXN1cmUgPT09IHVuZGVmaW5lZCApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZWxlbVNpemUgPSB0aGlzLnNpemU7XG4gIC8vIGFkZCBwYWRkaW5nIGFuZCBib3JkZXIgd2lkdGggaWYgYm9yZGVyIGJveFxuICBpZiAoIGVsZW1TaXplLmlzQm9yZGVyQm94ICkge1xuICAgIG1lYXN1cmUgKz0gaXNXaWR0aCA/IGVsZW1TaXplLnBhZGRpbmdMZWZ0ICsgZWxlbVNpemUucGFkZGluZ1JpZ2h0ICtcbiAgICAgIGVsZW1TaXplLmJvcmRlckxlZnRXaWR0aCArIGVsZW1TaXplLmJvcmRlclJpZ2h0V2lkdGggOlxuICAgICAgZWxlbVNpemUucGFkZGluZ0JvdHRvbSArIGVsZW1TaXplLnBhZGRpbmdUb3AgK1xuICAgICAgZWxlbVNpemUuYm9yZGVyVG9wV2lkdGggKyBlbGVtU2l6ZS5ib3JkZXJCb3R0b21XaWR0aDtcbiAgfVxuXG4gIG1lYXN1cmUgPSBNYXRoLm1heCggbWVhc3VyZSwgMCApO1xuICB0aGlzLmVsZW1lbnQuc3R5bGVbIGlzV2lkdGggPyAnd2lkdGgnIDogJ2hlaWdodCcgXSA9IG1lYXN1cmUgKyAncHgnO1xufTtcblxuLyoqXG4gKiBlbWl0IGV2ZW50Q29tcGxldGUgb24gYSBjb2xsZWN0aW9uIG9mIGl0ZW1zIGV2ZW50c1xuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50TmFtZVxuICogQHBhcmFtIHtBcnJheX0gaXRlbXMgLSBPdXRsYXllci5JdGVtc1xuICovXG5wcm90by5fZW1pdENvbXBsZXRlT25JdGVtcyA9IGZ1bmN0aW9uKCBldmVudE5hbWUsIGl0ZW1zICkge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuICBmdW5jdGlvbiBvbkNvbXBsZXRlKCkge1xuICAgIF90aGlzLmRpc3BhdGNoRXZlbnQoIGV2ZW50TmFtZSArICdDb21wbGV0ZScsIG51bGwsIFsgaXRlbXMgXSApO1xuICB9XG5cbiAgdmFyIGNvdW50ID0gaXRlbXMubGVuZ3RoO1xuICBpZiAoICFpdGVtcyB8fCAhY291bnQgKSB7XG4gICAgb25Db21wbGV0ZSgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBkb25lQ291bnQgPSAwO1xuICBmdW5jdGlvbiB0aWNrKCkge1xuICAgIGRvbmVDb3VudCsrO1xuICAgIGlmICggZG9uZUNvdW50ID09IGNvdW50ICkge1xuICAgICAgb25Db21wbGV0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGJpbmQgY2FsbGJhY2tcbiAgaXRlbXMuZm9yRWFjaCggZnVuY3Rpb24oIGl0ZW0gKSB7XG4gICAgaXRlbS5vbmNlKCBldmVudE5hbWUsIHRpY2sgKTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIGVtaXRzIGV2ZW50cyB2aWEgRXZFbWl0dGVyIGFuZCBqUXVlcnkgZXZlbnRzXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZSAtIG5hbWUgb2YgZXZlbnRcbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IC0gb3JpZ2luYWwgZXZlbnRcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgLSBleHRyYSBhcmd1bWVudHNcbiAqL1xucHJvdG8uZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uKCB0eXBlLCBldmVudCwgYXJncyApIHtcbiAgLy8gYWRkIG9yaWdpbmFsIGV2ZW50IHRvIGFyZ3VtZW50c1xuICB2YXIgZW1pdEFyZ3MgPSBldmVudCA/IFsgZXZlbnQgXS5jb25jYXQoIGFyZ3MgKSA6IGFyZ3M7XG4gIHRoaXMuZW1pdEV2ZW50KCB0eXBlLCBlbWl0QXJncyApO1xuXG4gIGlmICggalF1ZXJ5ICkge1xuICAgIC8vIHNldCB0aGlzLiRlbGVtZW50XG4gICAgdGhpcy4kZWxlbWVudCA9IHRoaXMuJGVsZW1lbnQgfHwgalF1ZXJ5KCB0aGlzLmVsZW1lbnQgKTtcbiAgICBpZiAoIGV2ZW50ICkge1xuICAgICAgLy8gY3JlYXRlIGpRdWVyeSBldmVudFxuICAgICAgdmFyICRldmVudCA9IGpRdWVyeS5FdmVudCggZXZlbnQgKTtcbiAgICAgICRldmVudC50eXBlID0gdHlwZTtcbiAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlciggJGV2ZW50LCBhcmdzICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGp1c3QgdHJpZ2dlciB3aXRoIHR5cGUgaWYgbm8gZXZlbnQgYXZhaWxhYmxlXG4gICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoIHR5cGUsIGFyZ3MgKTtcbiAgICB9XG4gI
118H1cbn07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGlnbm9yZSAmIHN0YW1wcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG5cbi8qKlxuICoga2VlcCBpdGVtIGluIGNvbGxlY3Rpb24sIGJ1dCBkbyBub3QgbGF5IGl0IG91dFxuICogaWdub3JlZCBpdGVtcyBkbyBub3QgZ2V0IHNraXBwZWQgaW4gbGF5b3V0XG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1cbiAqL1xucHJvdG8uaWdub3JlID0gZnVuY3Rpb24oIGVsZW0gKSB7XG4gIHZhciBpdGVtID0gdGhpcy5nZXRJdGVtKCBlbGVtICk7XG4gIGlmICggaXRlbSApIHtcbiAgICBpdGVtLmlzSWdub3JlZCA9IHRydWU7XG4gIH1cbn07XG5cbi8qKlxuICogcmV0dXJuIGl0ZW0gdG8gbGF5b3V0IGNvbGxlY3Rpb25cbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbVxuICovXG5wcm90by51bmlnbm9yZSA9IGZ1bmN0aW9uKCBlbGVtICkge1xuICB2YXIgaXRlbSA9IHRoaXMuZ2V0SXRlbSggZWxlbSApO1xuICBpZiAoIGl0ZW0gKSB7XG4gICAgZGVsZXRlIGl0ZW0uaXNJZ25vcmVkO1xuICB9XG59O1xuXG4vKipcbiAqIGFkZHMgZWxlbWVudHMgdG8gc3RhbXBzXG4gKiBAcGFyYW0ge05vZGVMaXN0LCBBcnJheSwgRWxlbWVudCwgb3IgU3RyaW5nfSBlbGVtc1xuICovXG5wcm90by5zdGFtcCA9IGZ1bmN0aW9uKCBlbGVtcyApIHtcbiAgZWxlbXMgPSB0aGlzLl9maW5kKCBlbGVtcyApO1xuICBpZiAoICFlbGVtcyApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLnN0YW1wcyA9IHRoaXMuc3RhbXBzLmNvbmNhdCggZWxlbXMgKTtcbiAgLy8gaWdub3JlXG4gIGVsZW1zLmZvckVhY2goIHRoaXMuaWdub3JlLCB0aGlzICk7XG59O1xuXG4vKipcbiAqIHJlbW92ZXMgZWxlbWVudHMgdG8gc3RhbXBzXG4gKiBAcGFyYW0ge05vZGVMaXN0LCBBcnJheSwgb3IgRWxlbWVudH0gZWxlbXNcbiAqL1xucHJvdG8udW5zdGFtcCA9IGZ1bmN0aW9uKCBlbGVtcyApIHtcbiAgZWxlbXMgPSB0aGlzLl9maW5kKCBlbGVtcyApO1xuICBpZiAoICFlbGVtcyApe1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGVsZW1zLmZvckVhY2goIGZ1bmN0aW9uKCBlbGVtICkge1xuICAgIC8vIGZpbHRlciBvdXQgcmVtb3ZlZCBzdGFtcCBlbGVtZW50c1xuICAgIHV0aWxzLnJlbW92ZUZyb20oIHRoaXMuc3RhbXBzLCBlbGVtICk7XG4gICAgdGhpcy51bmlnbm9yZSggZWxlbSApO1xuICB9LCB0aGlzICk7XG59O1xuXG4vKipcbiAqIGZpbmRzIGNoaWxkIGVsZW1lbnRzXG4gKiBAcGFyYW0ge05vZGVMaXN0LCBBcnJheSwgRWxlbWVudCwgb3IgU3RyaW5nfSBlbGVtc1xuICogQHJldHVybnMge0FycmF5fSBlbGVtc1xuICovXG5wcm90by5fZmluZCA9IGZ1bmN0aW9uKCBlbGVtcyApIHtcbiAgaWYgKCAhZWxlbXMgKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIGlmIHN0cmluZywgdXNlIGFyZ3VtZW50IGFzIHNlbGVjdG9yIHN0cmluZ1xuICBpZiAoIHR5cGVvZiBlbGVtcyA9PSAnc3RyaW5nJyApIHtcbiAgICBlbGVtcyA9IHRoaXMuZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCBlbGVtcyApO1xuICB9XG4gIGVsZW1zID0gdXRpbHMubWFrZUFycmF5KCBlbGVtcyApO1xuICByZXR1cm4gZWxlbXM7XG59O1xuXG5wcm90by5fbWFuYWdlU3RhbXBzID0gZnVuY3Rpb24oKSB7XG4gIGlmICggIXRoaXMuc3RhbXBzIHx8ICF0aGlzLnN0YW1wcy5sZW5ndGggKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5fZ2V0Qm91bmRpbmdSZWN0KCk7XG5cbiAgdGhpcy5zdGFtcHMuZm9yRWFjaCggdGhpcy5fbWFuYWdlU3RhbXAsIHRoaXMgKTtcbn07XG5cbi8vIHVwZGF0ZSBib3VuZGluZ0xlZnQgLyBUb3BcbnByb3RvLl9nZXRCb3VuZGluZ1JlY3QgPSBmdW5jdGlvbigpIHtcbiAgLy8gZ2V0IGJvdW5kaW5nIHJlY3QgZm9yIGNvbnRhaW5lciBlbGVtZW50XG4gIHZhciBib3VuZGluZ1JlY3QgPSB0aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHZhciBzaXplID0gdGhpcy5zaXplO1xuICB0aGlzLl9ib3VuZGluZ1JlY3QgPSB7XG4gICAgbGVmdDogYm91bmRpbmdSZWN0LmxlZnQgKyBzaXplLnBhZGRpbmdMZWZ0ICsgc2l6ZS5ib3JkZXJMZWZ0V2lkdGgsXG4gICAgdG9wOiBib3VuZGluZ1JlY3QudG9wICsgc2l6ZS5wYWRkaW5nVG9wICsgc2l6ZS5ib3JkZXJUb3BXaWR0aCxcbiAgICByaWdodDogYm91bmRpbmdSZWN0LnJpZ2h0IC0gKCBzaXplLnBhZGRpbmdSaWdodCArIHNpemUuYm9yZGVyUmlnaHRXaWR0aCApLFxuICAgIGJvdHRvbTogYm91bmRpbmdSZWN0LmJvdHRvbSAtICggc2l6ZS5wYWRkaW5nQm90dG9tICsgc2l6ZS5ib3JkZXJCb3R0b21XaWR0aCApXG4gIH07XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7RWxlbWVudH0gc3RhbXBcbioqL1xucHJvdG8uX21hbmFnZVN0YW1wID0gbm9vcDtcblxuLyoqXG4gKiBnZXQgeC95IHBvc2l0aW9uIG9mIGVsZW1lbnQgcmVsYXRpdmUgdG8gY29udGFpbmVyIGVsZW1lbnRcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbVxuICogQHJldHVybnMge09iamVjdH0gb2Zmc2V0IC0gaGFzIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbVxuICovXG5wcm90by5fZ2V0RWxlbWVudE9mZnNldCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuICB2YXIgYm91bmRpbmdSZWN0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdmFyIHRoaXNSZWN0ID0gdGhpcy5fYm91bmRpbmdSZWN0O1xuICB2YXIgc2l6ZSA9IGdldFNpemUoIGVsZW0gKTtcbiAgdmFyIG9mZnNldCA9IHtcbiAgICBsZWZ0OiBib3VuZGluZ1JlY3QubGVmdCAtIHRoaXNSZWN0LmxlZnQgLSBzaXplLm1hcmdpbkxlZnQsXG4gICAgdG9wOiBib3VuZGluZ1JlY3QudG9wIC0gdGhpc1JlY3QudG9wIC0gc2l6ZS5tYXJnaW5Ub3AsXG4gICAgcmlnaHQ6IHRoaXNSZWN0LnJpZ2h0IC0gYm91bmRpbmdSZWN0LnJpZ2h0IC0gc2l6ZS5tYXJnaW5SaWdodCxcbiAgICBib3R0b206IHRoaXNSZWN0LmJvdHRvbSAtIGJvdW5kaW5nUmVjdC5ib3R0b20gLSBzaXplLm1hcmdpbkJvdHRvbVxuICB9O1xuICByZXR1cm4gb2Zmc2V0O1xufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcmVzaXplIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXG5cbi8vIGVuYWJsZSBldmVudCBoYW5kbGVycyBmb3IgbGlzdGVuZXJzXG4vLyBpLmUuIHJlc2l6ZSAtPiBvbnJlc2l6ZVxucHJvdG8uaGFuZGxlRXZlbnQgPSB1dGlscy5oYW5kbGVFdmVudDtcblxuLyoqXG4gKiBCaW5kIGxheW91dCB0byB3aW5kb3cgcmVzaXppbmdcbiAqL1xucHJvdG8uYmluZFJlc2l6ZSA9IGZ1bmN0aW9uKCkge1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggJ3Jlc2l6ZScsIHRoaXMgKTtcbiAgdGhpcy5pc1Jlc2l6ZUJvdW5kID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogVW5iaW5kIGxheW91dCB0byB3aW5kb3cgcmVzaXppbmdcbiAqL1xucHJvdG8udW5iaW5kUmVzaXplID0gZnVuY3Rpb24oKSB7XG4gIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCAncmVzaXplJywgdGhpcyApO1xuICB0aGlzLmlzUmVzaXplQm91bmQgPSBmYWxzZTtcbn07XG5cbnByb3RvLm9ucmVzaXplID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMucmVzaXplKCk7XG59O1xuXG51dGlscy5kZWJvdW5jZU1ldGhvZCggT3V0bGF5ZXIsICdvbnJlc2l6ZScsIDEwMCApO1xuXG5wcm90by5yZXNpemUgPSBmdW5jdGlvbigpIHtcbiAgLy8gZG9uJ3QgdHJpZ2dlciBpZiBzaXplIGRpZCBub3QgY2hhbmdlXG4gIC8vIG9yIGlmIHJlc2l6ZSB3YXMgdW5ib3VuZC4gU2VlICM5XG4gIGlmICggIXRoaXMuaXNSZXNpemVCb3VuZCB8fCAhdGhpcy5uZWVkc1Jlc2l6ZUxheW91dCgpICkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMubGF5b3V0KCk7XG59O1xuXG4vKipcbiAqIGNoZWNrIGlmIGxheW91dCBpcyBuZWVkZWQgcG9zdCBsYXlvdXRcbiAqIEByZXR1cm5zIEJvb2xlYW5cbiAqL1xucHJvdG8ubmVlZHNSZXNpemVMYXlvdXQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHNpemUgPSBnZXRTaXplKCB0aGlzLmVsZW1lbnQgKTtcbiAgLy8gY2hlY2sgdGhhdCB0aGlzLnNpemUgYW5kIHNpemUgYXJlIHRoZXJlXG4gIC8vIElFOCB0cmlnZ2VycyByZXNpemUgb24gYm9keSBzaXplIGNoYW5nZSwgc28gdGhleSBtaWdodCBub3QgYmVcbiAgdmFyIGhhc1NpemVzID0gdGhpcy5zaXplICYmIHNpemU7XG4gIHJldHVybi
118BoYXNTaXplcyAmJiBzaXplLmlubmVyV2lkdGggIT09IHRoaXMuc2l6ZS5pbm5lcldpZHRoO1xufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG4vKipcbiAqIGFkZCBpdGVtcyB0byBPdXRsYXllciBpbnN0YW5jZVxuICogQHBhcmFtIHtBcnJheSBvciBOb2RlTGlzdCBvciBFbGVtZW50fSBlbGVtc1xuICogQHJldHVybnMge0FycmF5fSBpdGVtcyAtIE91dGxheWVyLkl0ZW1zXG4qKi9cbnByb3RvLmFkZEl0ZW1zID0gZnVuY3Rpb24oIGVsZW1zICkge1xuICB2YXIgaXRlbXMgPSB0aGlzLl9pdGVtaXplKCBlbGVtcyApO1xuICAvLyBhZGQgaXRlbXMgdG8gY29sbGVjdGlvblxuICBpZiAoIGl0ZW1zLmxlbmd0aCApIHtcbiAgICB0aGlzLml0ZW1zID0gdGhpcy5pdGVtcy5jb25jYXQoIGl0ZW1zICk7XG4gIH1cbiAgcmV0dXJuIGl0ZW1zO1xufTtcblxuLyoqXG4gKiBMYXlvdXQgbmV3bHktYXBwZW5kZWQgaXRlbSBlbGVtZW50c1xuICogQHBhcmFtIHtBcnJheSBvciBOb2RlTGlzdCBvciBFbGVtZW50fSBlbGVtc1xuICovXG5wcm90by5hcHBlbmRlZCA9IGZ1bmN0aW9uKCBlbGVtcyApIHtcbiAgdmFyIGl0ZW1zID0gdGhpcy5hZGRJdGVtcyggZWxlbXMgKTtcbiAgaWYgKCAhaXRlbXMubGVuZ3RoICkge1xuICAgIHJldHVybjtcbiAgfVxuICAvLyBsYXlvdXQgYW5kIHJldmVhbCBqdXN0IHRoZSBuZXcgaXRlbXNcbiAgdGhpcy5sYXlvdXRJdGVtcyggaXRlbXMsIHRydWUgKTtcbiAgdGhpcy5yZXZlYWwoIGl0ZW1zICk7XG59O1xuXG4vKipcbiAqIExheW91dCBwcmVwZW5kZWQgZWxlbWVudHNcbiAqIEBwYXJhbSB7QXJyYXkgb3IgTm9kZUxpc3Qgb3IgRWxlbWVudH0gZWxlbXNcbiAqL1xucHJvdG8ucHJlcGVuZGVkID0gZnVuY3Rpb24oIGVsZW1zICkge1xuICB2YXIgaXRlbXMgPSB0aGlzLl9pdGVtaXplKCBlbGVtcyApO1xuICBpZiAoICFpdGVtcy5sZW5ndGggKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIGFkZCBpdGVtcyB0byBiZWdpbm5pbmcgb2YgY29sbGVjdGlvblxuICB2Y
118XIgcHJldmlvdXNJdGVtcyA9IHRoaXMuaXRlbXMuc2xpY2UoMCk7XG4gIHRoaXMuaXRlbXMgPSBpdGVtcy5jb25jYXQoIHByZXZpb3VzSXRlbXMgKTtcbiAgLy8gc3RhcnQgbmV3IGxheW91dFxuICB0aGlzLl9yZXNldExheW91dCgpO1xuICB0aGlzLl9tYW5hZ2VTdGFtcHMoKTtcbiAgLy8gbGF5b3V0IG5ldyBzdHVmZiB3aXRob3V0IHRyYW5zaXRpb25cbiAgdGhpcy5sYXlvdXRJdGVtcyggaXRlbXMsIHRydWUgKTtcbiAgdGhpcy5yZXZlYWwoIGl0ZW1zICk7XG4gIC8vIGxheW91dCBwcmV2aW91cyBpdGVtc1xuICB0aGlzLmxheW91dEl0ZW1zKCBwcmV2aW91c0l0ZW1zICk7XG59O1xuXG4vKipcbiAqIHJldmVhbCBhIGNvbGxlY3Rpb24gb2YgaXRlbXNcbiAqIEBwYXJhbSB7QXJyYXkgb2YgT3V0bGF5ZXIuSXRlbXN9IGl0ZW1zXG4gKi9cbnByb3RvLnJldmVhbCA9IGZ1bmN0aW9uKCBpdGVtcyApIHtcbiAgdGhpcy5fZW1pdENvbXBsZXRlT25JdGVtcyggJ3JldmVhbCcsIGl0ZW1zICk7XG4gIGlmICggIWl0ZW1zIHx8ICFpdGVtcy5sZW5ndGggKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBzdGFnZ2VyID0gdGhpcy51cGRhdGVTdGFnZ2VyKCk7XG4gIGl0ZW1zLmZvckVhY2goIGZ1bmN0aW9uKCBpdGVtLCBpICkge1xuICAgIGl0ZW0uc3RhZ2dlciggaSAqIHN0YWdnZXIgKTtcbiAgICBpdGVtLnJldmVhbCgpO1xuICB9KTtcbn07XG5cbi8qKlxuICogaGlkZSBhIGNvbGxlY3Rpb24gb2YgaXRlbXNcbiAqIEBwYXJhbSB7QXJyYXkgb2YgT3V0bGF5ZXIuSXRlbXN9IGl0ZW1zXG4gKi9cbnByb3RvLmhpZGUgPSBmdW5jdGlvbiggaXRlbXMgKSB7XG4gIHRoaXMuX2VtaXRDb21wbGV0ZU9uSXRlbXMoICdoaWRlJywgaXRlbXMgKTtcbiAgaWYgKCAhaXRlbXMgfHwgIWl0ZW1zLmxlbmd0aCApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIHN0YWdnZXIgPSB0aGlzLnVwZGF0ZVN0YWdnZXIoKTtcbiAgaXRlbXMuZm9yRWFjaCggZnVuY3Rpb24oIGl0ZW0sIGkgKSB7XG4gICAgaXRlbS5zdGFnZ2VyKCBpICogc3RhZ2dlciApO1xuICAgIGl0ZW0uaGlkZSgpO1xuICB9KTtcbn07XG5cbi8qKlxuICogcmV2ZWFsIGl0ZW0gZWxlbWVudHNcbiAqIEBwYXJhbSB7QXJyYXl9LCB7RWxlbWVudH0sIHtOb2RlTGlzdH0gaXRlbXNcbiAqL1xucHJvdG8ucmV2ZWFsSXRlbUVsZW1lbnRzID0gZnVuY3Rpb24oIGVsZW1zICkge1xuICB2YXIgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCBlbGVtcyApO1xuICB0aGlzLnJldmVhbCggaXRlbXMgKTtcbn07XG5cbi8qKlxuICogaGlkZSBpdGVtIGVsZW1lbnRzXG4gKiBAcGFyYW0ge0FycmF5fSwge0VsZW1lbnR9LCB7Tm9kZUxpc3R9IGl0ZW1zXG4gKi9cbnByb3RvLmhpZGVJdGVtRWxlbWVudHMgPSBmdW5jdGlvbiggZWxlbXMgKSB7XG4gIHZhciBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoIGVsZW1zICk7XG4gIHRoaXMuaGlkZSggaXRlbXMgKTtcbn07XG5cbi8qKlxuICogZ2V0IE91dGxheWVyLkl0ZW0sIGdpdmVuIGFuIEVsZW1lbnRcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm5zIHtPdXRsYXllci5JdGVtfSBpdGVtXG4gKi9cbnByb3RvLmdldEl0ZW0gPSBmdW5jdGlvbiggZWxlbSApIHtcbiAgLy8gbG9vcCB0aHJvdWdoIGl0ZW1zIHRvIGdldCB0aGUgb25lIHRoYXQgbWF0Y2hlc1xuICBmb3IgKCB2YXIgaT0wOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKyApIHtcbiAgICB2YXIgaXRlbSA9IHRoaXMuaXRlbXNbaV07XG4gICAgaWYgKCBpdGVtLmVsZW1lbnQgPT0gZWxlbSApIHtcbiAgICAgIC8vIHJldHVybiBpdGVtXG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogZ2V0IGNvbGxlY3Rpb24gb2YgT3V0bGF5ZXIuSXRlbXMsIGdpdmVuIEVsZW1lbnRzXG4gKiBAcGFyYW0ge0FycmF5fSBlbGVtc1xuICogQHJldHVybnMge0FycmF5fSBpdGVtcyAtIE91dGxheWVyLkl0ZW1zXG4gKi9cbnByb3RvLmdldEl0ZW1zID0gZnVuY3Rpb24oIGVsZW1zICkge1xuICBlbGVtcyA9IHV0aWxzLm1ha2VBcnJheSggZWxlbXMgKTtcbiAgdmFyIGl0ZW1zID0gW107XG4gIGVsZW1zLmZvckVhY2goIGZ1bmN0aW9uKCBlbGVtICkge1xuICAgIHZhciBpdGVtID0gdGhpcy5nZXRJdGVtKCBlbGVtICk7XG4gICAgaWYgKCBpdGVtICkge1xuICAgICAgaXRlbXMucHVzaCggaXRlbSApO1xuICAgIH1cbiAgfSwgdGhpcyApO1xuXG4gIHJldHVybiBpdGVtcztcbn07XG5cbi8qKlxuICogcmVtb3ZlIGVsZW1lbnQocykgZnJvbSBpbnN0YW5jZSBhbmQgRE9NXG4gKiBAcGFyYW0ge0FycmF5IG9yIE5vZGVMaXN0IG9yIEVsZW1lbnR9IGVsZW1zXG4gKi9cbnByb3RvLnJlbW92ZSA9IGZ1bmN0aW9uKCBlbGVtcyApIHtcbiAgdmFyIHJlbW92ZUl0ZW1zID0gdGhpcy5nZXRJdGVtcyggZWxlbXMgKTtcblxuICB0aGlzLl9lbWl0Q29tcGxldGVPbkl0ZW1zKCAncmVtb3ZlJywgcmVtb3ZlSXRlbXMgKTtcblxuICAvLyBiYWlsIGlmIG5vIGl0ZW1zIHRvIHJlbW92ZVxuICBpZiAoICFyZW1vdmVJdGVtcyB8fCAhcmVtb3ZlSXRlbXMubGVuZ3RoICkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJlbW92ZUl0ZW1zLmZvckVhY2goIGZ1bmN0aW9uKCBpdGVtICkge1xuICAgIGl0ZW0ucmVtb3ZlKCk7XG4gICAgLy8gcmVtb3ZlIGl0ZW0gZnJvbSBjb2xsZWN0aW9uXG4gICAgdXRpbHMucmVtb3ZlRnJvbSggdGhpcy5pdGVtcywgaXRlbSApO1xuICB9LCB0aGlzICk7XG59O1xuXG4vLyAtLS0tLSBkZXN0cm95IC0tLS0tIC8vXG5cbi8vIHJlbW92ZSBhbmQgZGlzYWJsZSBPdXRsYXllciBpbnN0YW5jZVxucHJvdG8uZGVzdHJveSA9IGZ1bmN0aW9uKCkge1xuICAvLyBjbGVhbiB1cCBkeW5hbWljIHN0eWxlc1xuICB2YXIgc3R5bGUgPSB0aGlzLmVsZW1lbnQuc3R5bGU7XG4gIHN0eWxlLmhlaWdodCA9ICcnO1xuICBzdHlsZS5wb3NpdGlvbiA9ICcnO1xuICBzdHlsZS53aWR0aCA9ICcnO1xuICAvLyBkZXN0cm95IGl0ZW1zXG4gIHRoaXMuaXRlbXMuZm9yRWFjaCggZnVuY3Rpb24oIGl0ZW0gKSB7XG4gICAgaXRlbS5kZXN0cm95KCk7XG4gIH0pO1xuXG4gIHRoaXMudW5iaW5kUmVzaXplKCk7XG5cbiAgdmFyIGlkID0gdGh
118pcy5lbGVtZW50Lm91dGxheWVyR1VJRDtcbiAgZGVsZXRlIGluc3RhbmNlc1sgaWQgXTsgLy8gcmVtb3ZlIHJlZmVyZW5jZSB0byBpbnN0YW5jZSBieSBpZFxuICBkZWxldGUgdGhpcy5lbGVtZW50Lm91dGxheWVyR1VJRDtcbiAgLy8gcmVtb3ZlIGRhdGEgZm9yIGpRdWVyeVxuICBpZiAoIGpRdWVyeSApIHtcbiAgICBqUXVlcnkucmVtb3ZlRGF0YSggdGhpcy5lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLm5hbWVzcGFjZSApO1xuICB9XG5cbn07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGRhdGEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLy9cblxuLyoqXG4gKiBnZXQgT3V0bGF5ZXIgaW5zdGFuY2UgZnJvbSBlbGVtZW50XG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1cbiAqIEByZXR1cm5zIHtPdXRsYXllcn1cbiAqL1xuT3V0bGF5ZXIuZGF0YSA9IGZ1bmN0aW9uKCBlbGVtICkge1xuICBlbGVtID0gdXRpbHMuZ2V0UXVlcnlFbGVtZW50KCBlbGVtICk7XG4gIHZhciBpZCA9IGVsZW0gJiYgZWxlbS5vdXRsYXllckdVSUQ7XG4gIHJldHVybiBpZCAmJiBpbnN0YW5jZXNbIGlkIF07XG59O1xuXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGNyZWF0ZSBPdXRsYXllciBjbGFzcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG4vKipcbiAqIGNyZWF0ZSBhIGxheW91dCBjbGFzc1xuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZVxuICovXG5PdXRsYXllci5jcmVhdGUgPSBmdW5jdGlvbiggbmFtZXNwYWNlLCBvcHRpb25zICkge1xuICAvLyBzdWItY2xhc3MgT3V0bGF5ZXJcbiAgdmFyIExheW91dCA9IHN1YmNsYXNzKCBPdXRsYXllciApO1xuICAvLyBhcHBseSBuZXcgb3B0aW9ucyBhbmQgY29tcGF0T3B0aW9uc1xuICBMYXlvdXQuZGVmYXVsdHMgPSB1dGlscy5leHRlbmQoIHt9LCBPdXRsYXllci5kZWZhdWx0cyApO1xuICB1dGlscy5leHRlbmQoIExheW91dC5kZWZhdWx0cywgb3B0aW9ucyApO1xuICBMYXlvdXQuY29tcGF0T3B0aW9ucyA9IHV0aWxzLmV4dGVuZCgge30sIE91dGxheWVyLmNvbXBhdE9wdGlvbnMgICk7XG5cbiAgTGF5b3V0Lm5hbWVzcGFjZSA9IG5hbWVzcGFjZTtcblxuICBMYXlvdXQuZGF0YSA9IE91dGxheWVyLmRhdGE7XG5cbiAgLy8gc3ViLWNsYXNzIEl0ZW1cbiAgTGF5b3V0Lkl0ZW0gPSBzdWJjbGFzcyggSXRlbSApO1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGRlY2xhcmF0aXZlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXG5cbiAgdXRpbHMuaHRtbEluaXQoIExheW91dCwgbmFtZXNwYWNlICk7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0galF1ZXJ5IGJyaWRnZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG4gIC8vIG1ha2UgaW50byBqUXVlcnkgcGx1Z2luXG4gIGlmICggalF1ZXJ5ICYmIGpRdWVyeS5icmlkZ2V0ICkge1xuICAgIGpRdWVyeS5icmlkZ2V0KCBuYW1lc3BhY2UsIExheW91dCApO1xuICB9XG5cbiAgcmV0dXJuIExheW91dDtcbn07XG5cbmZ1bmN0aW9uIHN1YmNsYXNzKCBQYXJlbnQgKSB7XG4gIGZ1bmN0aW9uIFN1YkNsYXNzKCkge1xuICAgIFBhcmVudC5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG4gIH1cblxuICBTdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBQYXJlbnQucHJvdG90eXBlICk7XG4gIFN1YkNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN1YkNsYXNzO1xuXG4gIHJldHVybiBTdWJDbGFzcztcbn1cblxuLy8gLS0tLS0gaGVscGVycyAtLS0tLSAvL1xuXG4vLyBob3cgbWFueSBtaWxsaXNlY29uZHMgYXJlIGluIGVhY2ggdW5pdFxudmFyIG1zVW5pdHMgPSB7XG4gIG1zOiAxLFxuICBzOiAxMDAwXG59O1xuXG4vLyBtdW5nZSB0aW1lLWxpa2UgcGFyYW1ldGVyIGludG8gbWlsbGlzZWNvbmQgbnVtYmVyXG4vLyAnMC40cycgLT4gNDBcbmZ1bmN0aW9uIGdldE1pbGxpc2Vjb25kcyggdGltZSApIHtcbiAgaWYgKCB0eXBlb2YgdGltZSA9PSAnbnVtYmVyJyApIHtcbiAgICByZXR1cm4gdGltZTtcbiAgfVxuICB2YXIgbWF0Y2hlcyA9IHRpbWUubWF0Y2goIC8oXlxcZCpcXC4/XFxkKikoXFx3KikvICk7XG4gIHZhciBudW0gPSBtYXRjaGVzICYmIG1hdGNoZXNbMV07XG4gIHZhciB1bml0ID0gbWF0Y2hlcyAmJiBtYXRjaGVzWzJdO1xuICBpZiAoICFudW0ubGVuZ3RoICkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIG51bSA9IHBhcnNlRmxvYXQoIG51bSApO1xuICB2YXIgbXVsdCA9IG1zVW5pdHNbIHVuaXQgXSB8fCAxO1xuICByZXR1cm4gbnVtICogbXVsdDtcbn1cblxuLy8gLS0tLS0gZmluIC0tLS0tIC8vXG5cbi8vIGJhY2sgaW4gZ2xvYmFsXG5PdXRsYXllci5JdGVtID0gSXRlbTtcblxucmV0dXJuIE91dGxheWVyO1xuXG59KSk7XG4iLCIhZnVuY3Rpb24oZSx0KXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQpZGVmaW5lKFwiU21vb3Roc2Nyb2xsQW5jaG9yUG9seWZpbGxcIixbXCJleHBvcnRzXCJdLHQpO2Vsc2UgaWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGV4cG9ydHMpdChleHBvcnRzKTtlbHNle3ZhciBvPXtleHBvcnRzOnt9fTt0KG8uZXhwb3J0cyksZS5TbW9vdGhzY3JvbGxBbmNob3JQb2x5ZmlsbD1vLmV4cG9ydHN9fShcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6dGhpcywoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksZS5kZWZhdWx0PXZvaWQgMCxlLmRlc3Ryb3k9bSxlLnBvbHlmaWxsPXA7dmFyIHQsbz1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93LG49byYmd2luZG93LHI9byYmZG9jdW1lbnQsbD1vJiZyLmRvY3VtZW50RWxlbWVudCxpPW8mJnIuY3JlYXRlRWxlbWVudChcImFcIiksYT1mdW5jdGlvbigpe3JldHVybiBvJiZcInNjcm9sbEJlaGF2aW9yXCJpbiBpfSxzPWZ1bmN0aW9uIGUodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybi9eYSQvaS50ZXN0KGUudGFnTmFtZSl9KHQpJiZmdW5jdGlvbihlKXtpZighLyMvLnRlc3QoZS5ocmVmKSlyZXR1cm4hMTt2YXIgdD1lLnBhdGhuYW1lO3JldHVyblwiL1wiIT09dFswXSYmKHQ9XCIvXCIrdCksZS5ob3N0bmFtZT09PWxvY2F0aW9uLmhvc3RuYW1lJiZ0PT09bG9jYXRpb24ucGF0aG5hbWUmJighZS5zZWFyY2h8fGUuc2VhcmNoPT09bG9jYXRpb24uc2VhcmNoKX0odCk/dDp0LnBhcmVudEVsZW1lbnQ/ZSh0LnBhcmVudEVsZW1lbnQpOm51bGx9LGM9ZnVuY3Rpb24oZSl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUpcmV0dXJuIG51bGw7dHJ5e2U9ZGVjb2RlVVJJQ29tcG9uZW50KGUpfWNhdGNoKGUpe312YXIgdD1lP3IuZ2V0RWxlbWVudEJ5SWQoZS5zbGljZSgxKSk6ci5ib2R5O3JldHVyblwiI3RvcFwiIT09ZXx8dHx8KHQ9ci5ib2R5KSx0fSx1PWZ1bmN0aW9uKGUpe3ZhciB0PXtwcmV2ZW50U2Nyb2xsOiEwfTtpZihlLmZvY3VzKHQpLHIuYWN0aXZlRWxlbWVudCE9PWUpe3ZhciBvPWUuZ2V0QXR0cmlidXRlKFwidGFiaW5kZX
118hcIik7aWYoZS5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLFwiLTFcIiksXCJub25lXCI9PT1nZXRDb21wdXRlZFN0eWxlKGUpLm91dGxpbmVTdHlsZSl7dmFyIG49ZS5zdHlsZS5vdXRsaW5lU3R5bGU7ZS5zdHlsZS5vdXRsaW5lU3R5bGU9XCJub25lXCIsZS5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLChmdW5jdGlvbiB0KCl7ZS5zdHlsZS5vdXRsaW5lU3R5bGU9bnx8XCJcIixudWxsIT1vP2Uuc2V0QXR0cmlidXRlKFwidGFiaW5kZXhcIixvKTplLnJlbW92ZUF0dHJpYnV0ZShcInRhYmluZGV4XCIpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJsdXJcIix0KX0pKX1lLmZvY3VzKHQpfX0sZj0hMTtpZihvKXRyeXt2YXIgZD1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sXCJwcmV2ZW50U2Nyb2xsXCIse2dldDpmdW5jdGlvbigpe2Y9ITB9fSk7aS5mb2N1cyhkKX1jYXRjaChlKXt9dmFyIGg9ZnVuY3Rpb24oZSl7Znx8Y2xlYXJUaW1lb3V0KHQpLGU9PT1yLmJvZHk/bi5zY3JvbGwoe3RvcDowLGxlZnQ6MCxiZWhhdmlvcjpcInNtb290aFwifSk6ZS5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6XCJzbW9vdGhcIixibG9jazpcInN0YXJ0XCJ9KSxmP3UoZSk6dD1zZXRUaW1lb3V0KHUuYmluZChudWxsLGUpLDQ1MCl9LHY9ZnVuY3Rpb24oKXtmb3IodmFyIGU9L3Njcm9sbC1iZWhhdmlvcjpbXFxzXSooW147XCInXSspLyx0PWdldENvbXB1dGVkU3R5bGUobCksbz1bbC5zdHlsZS5zY3JvbGxCZWhhdmlvciwoZS5leGVjKGwuZ2V0QXR0cmlidXRlKFwic3R5bGVcIikpfHxbXSlbMV0sdC5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1zY3JvbGwtYmVoYXZpb3JcIiksKGUuZXhlYyh0LmZvbnRGYW1pbHkpfHxbXSlbMV1dLG49MDtuPG8ubGVuZ3RoO24rKyl7dmFyIHI9b1tuXSYmb1tuXS50cmltKCk7aWYoL15zbW9vdGgkLy50ZXN0KHIpKXJldHVybiEwO2lmKC9eKGluaXRpYWx8aW5oZXJpdHxhdXRvfHVuc2V0KSQvLnRlc3QocikpcmV0dXJuITF9cmV0dXJuITF9LHk9e3BvbHlmaWxsOnAsZGVzdHJveTptfTtmdW5jdGlvbiBwKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2lmKG0oKSxvKXt2YXIgdD1uLl9fZm9yY2VTbW9vdGhzY3JvbGxBbmNob3JQb2x5ZmlsbF9fLGw9XCJib29sZWFuXCI9PXR5cGVvZiBlLmZvcmNlP2UuZm9yY2U6dDtpZihhKCkmJiFsKXJldHVybjtyLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLGIsITEpLHIuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLHgpLG4uYWRkRXZlbnRMaXN0ZW5lcihcImhhc2hjaGFuZ2VcIixTKX1yZXR1cm4geX1mdW5jdGlvbiBtKCl7cmV0dXJuIG8mJihyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLGIsITEpLHIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLHgpLG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImhhc2hjaGFuZ2VcIixTKSkseX1mdW5jdGlvbiBiKGUpe3ZhciB0PWUubWV0YUtleXx8ZS5jdHJsS2V5fHxlLnNoaWZ0S2V5fHwwIT09ZS5idXR0b247aWYoIWUuZGVmYXVsdFByZXZlbnRlZCYmIXQmJnYoKSl7dmFyIG89cyhlLnRhcmdldCk7aWYobyl7dmFyIG49YyhvLmhhc2gpO24mJihlLnByZXZlbnREZWZhdWx0KCksaChuKSxoaXN0b3J5LnB1c2hTdGF0ZSYmaGlzdG9yeS5wdXNoU3RhdGUobnVsbCxyLnRpdGxlLG8uaHJlZikpfX19ZS5kZWZhdWx0PXk7dmFyIGc9W10sRT1mdW5jdGlvbigpe3JldHVybiBsLnNjcm9sbFRvcHx8ci5ib2R5LnNjcm9sbFRvcH07ZnVuY3Rpb24gUygpe2lmKHIuYm9keSYmdigpKXt2YXIgZT1jKGxvY2F0aW9uLmhhc2gpO2lmKGUpe3ZhciB0PUUoKSxvPWdbZ1sxXT09PXQ/MDoxXTtuLnNjcm9sbCh7dG9wOm8sYmVoYXZpb3I6XCJpbnN0YW50XCJ9KSxoKGUpfX19ZnVuY3Rpb24geCgpe3IuYm9keSYmKGdbMF09Z1sxXSxnWzFdPUUoKSl9cCgpfSkpO1xuIiwiLyogc21vb3Roc2Nyb2xsIHYwLjQuNCAtIDIwMTkgLSBEdXN0YW4gS2FzdGVuLCBKZXJlbWlhcyBNZW5pY2hlbGxpIC0gTUlUIExpY2Vuc2UgKi9cbihmdW5jdGlvbiAoKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICAvLyBwb2x5ZmlsbFxuICBmdW5jdGlvbiBwb2x5ZmlsbCgpIHtcbiAgICAvLyBhbGlhc2VzXG4gICAgdmFyIHcgPSB3aW5kb3c7XG4gICAgdmFyIGQgPSBkb2N1bWVudDtcblxuICAgIC8vIHJldHVybiBpZiBzY3JvbGwgYmVoYXZpb3IgaXMgc3VwcG9ydGVkIGFuZCBwb2x5ZmlsbCBpcyBub3QgZm9yY2VkXG4gICAgaWYgKFxuICAgICAgJ3Njcm9sbEJlaGF2aW9yJyBpbiBkLmRvY3VtZW50RWxlbWVudC5zdHlsZSAmJlxuICAgICAgdy5fX2ZvcmNlU21vb3RoU2Nyb2xsUG9seWZpbGxfXyAhPT0gdHJ1ZVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGdsb2JhbHNcbiAgICB2YXIgRWxlbWVudCA9IHcuSFRNTEVsZW1lbnQgfHwgdy5FbGVtZW50O1xuICAgIHZhciBTQ1JPTExfVElNRSA9IDQ2ODtcblxuICAgIC8vIG9iamVjdCBnYXRoZXJpbmcgb3JpZ2luYWwgc2Nyb2xsIG1ldGhvZHNcbiAgICB2YXIgb3JpZ2luYWwgPSB7XG4gICAgICBzY3JvbGw6IHcuc2Nyb2xsIHx8IHcuc2Nyb2xsVG8sXG4gICAgICBzY3JvbGxCeTogdy5zY3JvbGxCeSxcbiAgICAgIGVsZW1lbnRTY3JvbGw6IEVsZW1lbnQucHJvdG90eXBlLnNjcm9sbCB8fCBzY3JvbGxFbGVtZW50LFxuICAgICAgc2Nyb2xsSW50b1ZpZXc6IEVsZW1lbnQucHJvdG90eXBlLnNjcm9sbEludG9WaWV3XG4gICAgfTtcblxuICAgIC8vIGRlZmluZSB0aW1pbmcgbWV0aG9kXG4gICAgdmFyIG5vdyA9XG4gICAgICB3LnBlcmZvcm1hbmNlICYmIHcucGVyZm9ybWFuY2Uubm93XG4gICAgICAgID8gdy5wZXJmb3JtYW5jZS5ub3cuYmluZCh3LnBlcmZvcm1hbmNlKVxuICAgICAgICA6IERhdGUubm93O1xuXG4gICAgLyoqXG4gICAgICogaW5kaWNhdGVzIGlmIGEgdGhlIGN1cnJlbnQgYnJvd3NlciBpcyBtYWRlIGJ5IE1pY3Jvc29mdFxuICAgICAqIEBtZXRob2QgaXNNaWNyb3NvZnRCcm93c2VyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHVzZXJBZ2VudFxuICAgICAqIEByZXR1cm5zIHtCb29sZWFufVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzTWljcm9zb2Z0QnJvd3Nlcih1c2VyQWdlbnQpIHtcbiAgICAgIHZhciB1c2VyQWdlbnRQYXR0ZXJucyA9IFsnTVNJRSAnLCAnVHJpZGVudC8nLCAnRWRnZS8nXTtcblxuICAgICAgcmV0dXJuIG5ldyBSZWdFeHAodXNlckFnZW50UGF0dGVybnMuam9pbignfCcpKS50
118ZXN0KHVzZXJBZ2VudCk7XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBJRSBoYXMgcm91bmRpbmcgYnVnIHJvdW5kaW5nIGRvd24gY2xpZW50SGVpZ2h0IGFuZCBjbGllbnRXaWR0aCBhbmRcbiAgICAgKiByb3VuZGluZyB1cCBzY3JvbGxIZWlnaHQgYW5kIHNjcm9sbFdpZHRoIGNhdXNpbmcgZmFsc2UgcG9zaXRpdmVzXG4gICAgICogb24gaGFzU2Nyb2xsYWJsZVNwYWNlXG4gICAgICovXG4gICAgdmFyIFJPVU5ESU5HX1RPTEVSQU5DRSA9IGlzTWljcm9zb2Z0QnJvd3Nlcih3Lm5hdmlnYXRvci51c2VyQWdlbnQpID8gMSA6IDA7XG5cbiAgICAvKipcbiAgICAgKiBjaGFuZ2VzIHNjcm9sbCBwb3NpdGlvbiBpbnNpZGUgYW4gZWxlbWVudFxuICAgICAqIEBtZXRob2Qgc2Nyb2xsRWxlbWVudFxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSB4XG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IHlcbiAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNjcm9sbEVsZW1lbnQoeCwgeSkge1xuICAgICAgdGhpcy5zY3JvbGxMZWZ0ID0geDtcbiAgICAgIHRoaXMuc2Nyb2xsVG9wID0geTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZXR1cm5zIHJlc3VsdCBvZiBhcHBseWluZyBlYXNlIG1hdGggZnVuY3Rpb24gdG8gYSBudW1iZXJcbiAgICAgKiBAbWV0aG9kIGVhc2VcbiAgICAgKiBAcGFyYW0ge051bWJlcn0ga1xuICAgICAqIEByZXR1cm5zIHtOdW1iZXJ9XG4gICAgICovXG4gICAgZnVuY3Rpb24gZWFzZShrKSB7XG4gICAgICByZXR1cm4gMC41ICogKDEgLSBNYXRoLmNvcyhNYXRoLlBJICogaykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGluZGljYXRlcyBpZiBhIHNtb290aCBiZWhhdmlvciBzaG91bGQgYmUgYXBwbGllZFxuICAgICAqIEBtZXRob2Qgc2hvdWxkQmFpbE91dFxuICAgICAqIEBwYXJhbSB7TnVtYmVyfE9iamVjdH0gZmlyc3RBcmdcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzaG91bGRCYWlsT3V0KGZpcnN0QXJnKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGZpcnN0QXJnID09PSBudWxsIHx8XG4gICAgICAgIHR5cGVvZiBmaXJzdEFyZyAhPT0gJ29iamVjdCcgfHxcbiAgICAgICAgZmlyc3RBcmcuYmVoYXZpb3IgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICBmaXJzdEFyZy5iZWhhdmlvciA9PT0gJ2F1dG8nIHx8XG4gICAgICAgIGZpcnN0QXJnLmJlaGF2aW9yID09PSAnaW5zdGFudCdcbiAgICAgICkge1xuICAgICAgICAvLyBmaXJzdCBhcmd1bWVudCBpcyBub3QgYW4gb2JqZWN0L251bGxcbiAgICAgICAgLy8gb3IgYmVoYXZpb3IgaXMgYXV0bywgaW5zdGFudCBvciB1bmRlZmluZWRcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgZmlyc3RBcmcgPT09ICdvYmplY3QnICYmIGZpcnN0QXJnLmJlaGF2aW9yID09PSAnc21vb3RoJykge1xuICAgICAgICAvLyBmaXJzdCBhcmd1bWVudCBpcyBhbiBvYmplY3QgYW5kIGJlaGF2aW9yIGlzIHNtb290aFxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIHRocm93IGVycm9yIHdoZW4gYmVoYXZpb3IgaXMgbm90IHN1cHBvcnRlZFxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgJ2JlaGF2aW9yIG1lbWJlciBvZiBTY3JvbGxPcHRpb25zICcgK1xuICAgICAgICAgIGZpcnN0QXJnLmJlaGF2aW9yICtcbiAgICAgICAgICAnIGlzIG5vdCBhIHZhbGlkIHZhbHVlIGZvciBlbnVtZXJhdGlvbiBTY3JvbGxCZWhhdmlvci4nXG4gICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGluZGljYXRlcyBpZiBhbiBlbGVtZW50IGhhcyBzY3JvbGxhYmxlIHNwYWNlIGluIHRoZSBwcm92aWRlZCBheGlzXG4gICAgICogQG1ldGhvZCBoYXNTY3JvbGxhYmxlU3BhY2VcbiAgICAgKiBAcGFyYW0ge05vZGV9IGVsXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGF4aXNcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBoYXNTY3JvbGxhYmxlU3BhY2UoZWwsIGF4aXMpIHtcbiAgICAgIGlmIChheGlzID09PSAnWScpIHtcbiAgICAgICAgcmV0dXJuIGVsLmNsaWVudEhlaWdodCArIFJPVU5ESU5HX1RPTEVSQU5DRSA8IGVsLnNjcm9sbEhlaWdodDtcbiAgICAgIH1cblxuICAgICAgaWYgKGF4aXMgPT09ICdYJykge1xuICAgICAgICByZXR1cm4gZWwuY2xpZW50V2lkdGggKyBST1VORElOR19UT0xFUkFOQ0UgPCBlbC5zY3JvbGxXaWR0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBpbmRpY2F0ZXMgaWYgYW4gZWxlbWVudCBoYXMgYSBzY3JvbGxhYmxlIG92ZXJmbG93IHByb3BlcnR5IGluIHRoZSBheGlzXG4gICAgICogQG1ldGhvZCBjYW5PdmVyZmxvd1xuICAgICAqIEBwYXJhbSB7Tm9kZX0gZWxcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gYXhpc1xuICAgICAqIEByZXR1cm5zIHtCb29sZWFufVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNhbk92ZXJmbG93KGVsLCBheGlzKSB7XG4gICAgICB2Y
118XIgb3ZlcmZsb3dWYWx1ZSA9IHcuZ2V0Q29tcHV0ZWRTdHlsZShlbCwgbnVsbClbJ292ZXJmbG93JyArIGF4aXNdO1xuXG4gICAgICByZXR1cm4gb3ZlcmZsb3dWYWx1ZSA9PT0gJ2F1dG8nIHx8IG92ZXJmbG93VmFsdWUgPT09ICdzY3JvbGwnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGluZGljYXRlcyBpZiBhbiBlbGVtZW50IGNhbiBiZSBzY3JvbGxlZCBpbiBlaXRoZXIgYXhpc1xuICAgICAqIEBtZXRob2QgaXNTY3JvbGxhYmxlXG4gICAgICogQHBhcmFtIHtOb2RlfSBlbFxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBheGlzXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59XG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNTY3JvbGxhYmxlKGVsKSB7XG4gICAgICB2YXIgaXNTY3JvbGxhYmxlWSA9IGhhc1Njcm9sbGFibGVTcGFjZShlbCwgJ1knKSAmJiBjYW5PdmVyZmxvdyhlbCwgJ1knKTtcbiAgICAgIHZhciBpc1Njcm9sbGFibGVYID0gaGFzU2Nyb2xsYWJsZVNwYWNlKGVsLCAnWCcpICYmIGNhbk92ZXJmbG93KGVsLCAnWCcpO1xuXG4gICAgICByZXR1cm4gaXNTY3JvbGxhYmxlWSB8fCBpc1Njcm9sbGFibGVYO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGZpbmRzIHNjcm9sbGFibGUgcGFyZW50IG9mIGFuIGVsZW1lbnRcbiAgICAgKiBAbWV0aG9kIGZpbmRTY3JvbGxhYmxlUGFyZW50XG4gICAgICogQHBhcmFtIHtOb2RlfSBlbFxuICAgICAqIEByZXR1cm5zIHtOb2RlfSBlbFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbmRTY3JvbGxhYmxlUGFyZW50KGVsKSB7XG4gICAgICB3aGlsZSAoZWwgIT09IGQuYm9keSAmJiBpc1Njcm9sbGFibGUoZWwpID09PSBmYWxzZSkge1xuICAgICAgICBlbCA9IGVsLnBhcmVudE5vZGUgfHwgZWwuaG9zdDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHNlbGYgaW52b2tlZCBmdW5jdGlvbiB0aGF0LCBnaXZlbiBhIGNvbnRleHQsIHN0ZXBzIHRocm91Z2ggc2Nyb2xsaW5nXG4gICAgICogQG1ldGhvZCBzdGVwXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN0ZXAoY29udGV4dCkge1xuICAgICAgdmFyIHRpbWUgPSBub3coKTtcbiAgICAgIHZhciB2YWx1ZTtcbiAgICAgIHZhciBjdXJyZW50WDtcbiAgICAgIHZhciBjdXJyZW50WTtcbiAgICAgIHZhciBlbGFwc2VkID0gKHRpbWUgLSBjb250ZXh0LnN0YXJ0VGltZSkgLyBTQ1JPTExfVElNRTtcblxuICAgICAgLy8gYXZvaWQgZWxhcHNlZCB0aW1lcyBoaWdoZXIgdGhhbiBvbmVcbiAgICAgIGVsYXBzZWQgPSBlbGFwc2VkID4gMSA/IDEgOiBlbGFwc2VkO1xuXG4gICAgICAvLyBhcHBseSBlYXNpbmcgdG8gZWxhcHNlZCB0aW1lXG4gICAgICB2YWx1ZSA9IGVhc2UoZWxhcHNlZCk7XG5cbiAgICAgIGN1cnJlbnRYID0gY29udGV4dC5zdGFydFggKyAoY29udGV4dC54IC0gY29udGV4dC5zdGFydFgpICogdmFsdWU7XG4gICAgICBjdXJyZW50WSA9IGNvbnRleHQuc3RhcnRZICsgKGNvbnRleHQueSAtIGNvbnRleHQuc3RhcnRZKSAqIHZhbHVlO1xuXG4gICAgICBjb250ZXh0Lm1ldGhvZC5jYWxsKGNvbnRleHQuc2Nyb2xsYWJsZSwgY3VycmVudFgsIGN1cnJlbnRZKTtcblxuICAgICAgLy8gc2Nyb2xsIG1vcmUgaWYgd2UgaGF2ZSBub3QgcmVhY2hlZCBvdXIgZGVzdGluYXRpb25cbiAgICAgIGlmIChjdXJyZW50WCAhPT0gY29udGV4dC54IHx8IGN1cnJlbnRZICE9PSBjb250ZXh0LnkpIHtcbiAgICAgICAgdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcC5iaW5kKHcsIGNvbnRleHQpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBzY3JvbGxzIHdpbmRvdyBvciBlbGVtZW50IHdpdGggYSBzbW9vdGggYmVoYXZpb3JcbiAgICAgKiBAbWV0aG9kIHNtb290aFNjcm9sbFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fE5vZGV9IGVsXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IHhcbiAgICAgKiBAcGFyYW0ge051bWJlcn0geVxuICAgICAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gICAgICovXG4gICAgZnVuY3Rpb24gc21vb3RoU2Nyb2xsKGVsLCB4LCB5KSB7XG4gICAgICB2Y
118XIgc2Nyb2xsYWJsZTtcbiAgICAgIHZhciBzdGFydFg7XG4gICAgICB2YXIgc3RhcnRZO1xuICAgICAgdmFyIG1ldGhvZDtcbiAgICAgIHZhciBzdGFydFRpbWUgPSBub3coKTtcblxuICAgICAgLy8gZGVmaW5lIHNjcm9sbCBjb250ZXh0XG4gICAgICBpZiAoZWwgPT09IGQuYm9keSkge1xuICAgICAgICBzY3JvbGxhYmxlID0gdztcbiAgICAgICAgc3RhcnRYID0gdy5zY3JvbGxYIHx8IHcucGFnZVhPZmZzZXQ7XG4gICAgICAgIHN0YXJ0WSA9IHcuc2Nyb2xsWSB8fCB3LnBhZ2VZT2Zmc2V0O1xuICAgICAgICBtZXRob2QgPSBvcmlnaW5hbC5zY3JvbGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzY3JvbGxhYmxlID0gZWw7XG4gICAgICAgIHN0YXJ0WCA9IGVsLnNjcm9sbExlZnQ7XG4gICAgICAgIHN0YXJ0WSA9IGVsLnNjcm9sbFRvcDtcbiAgICAgICAgbWV0aG9kID0gc2Nyb2xsRWxlbWVudDtcbiAgICAgIH1cblxuICAgICAgLy8gc2Nyb2xsIGxvb3Bpbmcgb3ZlciBhIGZyYW1lXG4gICAgICBzdGVwKHtcbiAgICAgICAgc2Nyb2xsYWJsZTogc2Nyb2xsYWJsZSxcbiAgICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICAgIHN0YXJ0VGltZTogc3RhcnRUaW1lLFxuICAgICAgICBzdGFydFg6IHN0YXJ0WCxcbiAgICAgICAgc3RhcnRZOiBzdGFydFksXG4gICAgICAgIHg6IHgsXG4gICAgICAgIHk6IHlcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIE9SSUdJTkFMIE1FVEhPRFMgT1ZFUlJJREVTXG4gICAgLy8gdy5zY3JvbGwgYW5kIHcuc2Nyb2xsVG9cbiAgICB3LnNjcm9sbCA9IHcuc2Nyb2xsVG8gPSBmdW5jdGlvbigpIHtcbiAgICAgIC8vIGF2b2lkIGFjdGlvbiB3aGVuIG5vIGFyZ3VtZW50cyBhcmUgcGFzc2VkXG4gICAgICBpZiAoYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBhdm9pZCBzbW9vdGggYmVoYXZpb3IgaWYgbm90IHJlcXVpcmVkXG4gICAgICBpZiAoc2hvdWxkQmFpbE91dChhcmd1bWVudHNbMF0pID09PSB0cnVlKSB7XG4gICAgICAgIG9yaWdpbmFsLnNjcm9sbC5jYWxsKFxuICAgICAgICAgIHcsXG4gICAgICAgICAgYXJndW1lbnRzWzBdLmxlZnQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBhcmd1bWVudHNbMF0ubGVmdFxuICAgICAgICAgICAgOiB0eXBlb2YgYXJndW1lbnRzWzBdICE9PSAnb2JqZWN0J1xuICAgICAgICAgICAgICA/IGFyZ3VtZW50c1swXVxuICAgICAgICAgICAgICA6IHcuc2Nyb2xsWCB8fCB3LnBhZ2VYT2Zmc2V0LFxuICAgICAgICAgIC8vIHVzZSB0b3AgcHJvcCwgc2Vjb25kIGFyZ3VtZW50IGlmIHByZXNlbnQgb3IgZmFsbGJhY2sgdG8gc2Nyb2xsWVxuICAgICAgICAgIGFyZ3VtZW50c1swXS50b3AgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBhcmd1bWVudHNbMF0udG9wXG4gICAgICAgICAgICA6IGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgID8gYXJndW1lbnRzWzFdXG4gICAgICAgICAgICAgIDogdy5zY3JvbGxZIHx8IHcucGFnZVlPZmZzZXRcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIExFVCBUSEUgU01PT1RITkVTUyBCRUdJTiFcbiAgICAgIHNtb290aFNjcm9sbC5jYWxsKFxuICAgICAgICB3LFxuICAgICAgICBkLmJvZHksXG4gICAgICAgIGFyZ3VtZW50c1swXS5sZWZ0ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IH5+YXJndW1lbnRzWzBdLmxlZnRcbiAgICAgICAgICA6IHcuc2Nyb2xsWCB8fCB3LnBhZ2VYT2Zmc2V0LFxuICAgICAgICBhcmd1bWVudHNbMF0udG9wICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IH5+YXJndW1lbnRzWzBdLnRvcFxuICAgICAgICAgIDogdy5zY3JvbGxZIHx8IHcucGFnZVlPZmZzZXRcbiAgICAgICk7XG4gICAgfTtcblxuICAgIC8vIHcuc2Nyb2xsQnlcbiAgICB3LnNjcm9sbEJ5ID0gZnVuY3Rpb24oKSB7XG4gICAgICAvLyBhdm9pZCBhY3Rpb24gd2hlbiBubyBhcmd1bWVudHMgYXJlIHBhc3NlZFxuICAgICAgaWYgKGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gYXZvaWQgc21vb3RoIGJlaGF2aW9yIGlmIG5vdCByZXF1aXJlZFxuICAgICAgaWYgKHNob3VsZEJhaWxPdXQoYXJndW1lbnRzWzBdKSkge1xuICAgICAgICBvcmlnaW5hbC5zY3JvbGxCeS5jYWxsKFxuICAgICAgICAgIHcsXG4gICAgICAgICAgYXJndW1lbnRzWzBdLmxlZnQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBhcmd1bWVudHNbMF0ubGVmdFxuICAgICAgICAgICAgOiB0eXBlb2YgYXJndW1lbnRzWzBdICE9PSAnb2JqZWN0JyA/IGFyZ3VtZW50c1swXSA6IDAsXG4gICAgICAgICAgYXJndW1lbnRzWzBdLnRvcCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IGFyZ3VtZW50c1swXS50b3BcbiAgICAgICAgICAgIDogYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAwXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBMRVQgVEhFIFNNT09USE5FU1MgQkVHSU4hXG4gICAgICBzbW9vdGhTY3JvbGwuY2FsbChcbiAgICAgICAgdyxcbiAgICAgICAgZC5ib2R5LFxuICAgICAgICB+fmFyZ3VtZW50c1swXS5sZWZ0ICsgKHcuc2Nyb2xsWCB8fCB3LnBhZ2VYT2Zmc2V0KSxcbiAgICAgICAgfn5hcmd1bWVudHNbMF0udG9wICsgKHcuc2Nyb2xsWSB8fCB3LnBhZ2VZT2Zmc2V0KVxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgLy8gRWxlbWVudC5wcm90b3R5cGUuc2Nyb2xsIGFuZCBFbGVtZW50LnByb3RvdHlwZS5zY3JvbGxUb1xuICAgIEVsZW1lbnQucHJvdG90eXBlLnNjcm9sbCA9IEVsZW1lbnQucHJvdG90eXBlLnNjcm9sbFRvID0gZnVuY3Rpb24oKSB7XG4gICAgICAvLyBhdm9pZCBhY3Rpb24gd2hlbiBubyBhcmd1bWVudHMgYXJlIHBhc3NlZFxuICAgICAgaWYgKGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gYXZvaWQgc21vb3RoIGJlaGF2aW9yIGlmIG5vdCByZXF1aXJlZFxuICAgICAgaWYgKHNob3VsZEJhaWxPdXQoYXJndW1lbnRzWzBdKSA9PT0gdHJ1ZSkge1xuICAgICAgICAvLyBpZiBvbmUgbnVtYmVyIGlzIHBhc3NlZCwgdGhyb3cgZXJyb3IgdG8gbWF0Y2ggRmlyZWZveCBpbXBsZW1lbnRhdGlvblxuICAgICAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1swXSA9PT0gJ251bWJlcicgJiYgYXJndW1lbnRzWzFdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ1ZhbHVlIGNvdWxkIG5vdCBiZSBjb252ZXJ0ZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9yaWdpbmFsLmVsZW1lbnRTY3JvbGwuY2FsbChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIC8vIHVzZSBsZWZ0IHByb3AsIGZpcnN0IG51bWJlciBhcmd1bWVudCBvciBmYWxsYmFjayB0byBzY3JvbGxMZWZ0XG4gICAgICAgICAgYXJndW1lbnRzWzBdLmxlZnQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB+fmFyZ3VtZW50c1swXS5sZWZ0XG4gICAgICAgICAgICA6IHR5cGVvZiBhcmd1bWVudHNbMF0gIT09ICdvYmplY3QnID8gfn5hcmd1bWVudHNbMF0gOiB0aGlzLnNjcm9sbExlZnQsXG4gICAgICAgICAgLy8gdXNlIHRvcCBwcm9wLCBzZWNvbmQgYXJndW1lbnQgb3IgZmFsbGJhY2sgdG8gc2Nyb2xsVG9wXG4gICAgICAgICAgYXJndW1lbnRzWzBdLnRvcCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IH5+YXJndW1lbnRzWzBdLnRvcFxuICAgICAgICAgICAgOiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IH5+YXJndW1lbnRzWzFdIDogdGhpcy5zY3JvbGxUb3BcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBsZWZ0ID0gYXJndW1lbnRzWzBdLmxlZnQ7XG4gICAgICB2Y
118XIgdG9wID0gYXJndW1lbnRzWzBdLnRvcDtcblxuICAgICAgLy8gTEVUIFRIRSBTTU9PVEhORVNTIEJFR0lOIVxuICAgICAgc21vb3RoU2Nyb2xsLmNhbGwoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIHRoaXMsXG4gICAgICAgIHR5cGVvZiBsZWZ0ID09PSAndW5kZWZpbmVkJyA/IHRoaXMuc2Nyb2xsTGVmdCA6IH5+bGVmdCxcbiAgICAgICAgdHlwZW9mIHRvcCA9PT0gJ3VuZGVmaW5lZCcgPyB0aGlzLnNjcm9sbFRvcCA6IH5+dG9wXG4gICAgICApO1xuICAgIH07XG5cbiAgICAvLyBFbGVtZW50LnByb3RvdHlwZS5zY3JvbGxCeVxuICAgIEVsZW1lbnQucHJvdG90eXBlLnNjcm9sbEJ5ID0gZnVuY3Rpb24oKSB7XG4gICAgICAvLyBhdm9pZCBhY3Rpb24gd2hlbiBubyBhcmd1bWVudHMgYXJlIHBhc3NlZFxuICAgICAgaWYgKGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gYXZvaWQgc21vb3RoIGJlaGF2aW9yIGlmIG5vdCByZXF1aXJlZFxuICAgICAgaWYgKHNob3VsZEJhaWxPdXQoYXJndW1lbnRzWzBdKSA9PT0gdHJ1ZSkge1xuICAgICAgICBvcmlnaW5hbC5lbGVtZW50U2Nyb2xsLmNhbGwoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBhcmd1bWVudHNbMF0ubGVmdCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IH5+YXJndW1lbnRzWzBdLmxlZnQgKyB0aGlzLnNjcm9sbExlZnRcbiAgICAgICAgICAgIDogfn5hcmd1bWVudHNbMF0gKyB0aGlzLnNjcm9sbExlZnQsXG4gICAgICAgICAgYXJndW1lbnRzWzBdLnRvcCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IH5+YXJndW1lbnRzWzBdLnRvcCArIHRoaXMuc2Nyb2xsVG9wXG4gICAgICAgICAgICA6IH5+YXJndW1lbnRzWzFdICsgdGhpcy5zY3JvbGxUb3BcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2Nyb2xsKHtcbiAgICAgICAgbGVmdDogfn5hcmd1bWVudHNbMF0ubGVmdCArIHRoaXMuc2Nyb2xsTGVmdCxcbiAgICAgICAgdG9wOiB+fmFyZ3VtZW50c1swXS50b3AgKyB0aGlzLnNjcm9sbFRvcCxcbiAgICAgICAgYmVoYXZpb3I6IGFyZ3VtZW50c1swXS5iZWhhdmlvclxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8vIEVsZW1lbnQucHJvdG90eXBlLnNjcm9sbEludG9WaWV3XG4gICAgRWxlbWVudC5wcm90b3R5cGUuc2Nyb2xsSW50b1ZpZXcgPSBmdW5jdGlvbigpIHtcbiAgICAgIC8vIGF2b2lkIHNtb290aCBiZWhhdmlvciBpZiBub3QgcmVxdWlyZWRcbiAgICAgIGlmIChzaG91bGRCYWlsT3V0KGFyZ3VtZW50c1swXSkgPT09IHRydWUpIHtcbiAgICAgICAgb3JpZ2luYWwuc2Nyb2xsSW50b1ZpZXcuY2FsbChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGFyZ3VtZW50c1swXVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gTEVUIFRIRSBTTU9PVEhORVNTIEJFR0lOIVxuICAgICAgdmFyIHNjcm9sbGFibGVQYXJlbnQgPSBmaW5kU2Nyb2xsYWJsZVBhcmVudCh0aGlzKTtcbiAgICAgIHZhciBwYXJlbnRSZWN0cyA9IHNjcm9sbGFibGVQYXJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB2Y
118XIgY2xpZW50UmVjdHMgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICBpZiAoc2Nyb2xsYWJsZVBhcmVudCAhPT0gZC5ib2R5KSB7XG4gICAgICAgIC8vIHJldmVhbCBlbGVtZW50IGluc2lkZSBwYXJlbnRcbiAgICAgICAgc21vb3RoU2Nyb2xsLmNhbGwoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBzY3JvbGxhYmxlUGFyZW50LFxuICAgICAgICAgIHNjcm9sbGFibGVQYXJlbnQuc2Nyb2xsTGVmdCArIGNsaWVudFJlY3RzLmxlZnQgLSBwYXJlbnRSZWN0cy5sZWZ0LFxuICAgICAgICAgIHNjcm9sbGFibGVQYXJlbnQuc2Nyb2xsVG9wICsgY2xpZW50UmVjdHMudG9wIC0gcGFyZW50UmVjdHMudG9wXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gcmV2ZWFsIHBhcmVudCBpbiB2aWV3cG9ydCB1bmxlc3MgaXMgZml4ZWRcbiAgICAgICAgaWYgKHcuZ2V0Q29tcHV0ZWRTdHlsZShzY3JvbGxhYmxlUGFyZW50KS5wb3NpdGlvbiAhPT0gJ2ZpeGVkJykge1xuICAgICAgICAgIHcuc2Nyb2xsQnkoe1xuICAgICAgICAgICAgbGVmdDogcGFyZW50UmVjdHMubGVmdCxcbiAgICAgICAgICAgIHRvcDogcGFyZW50UmVjdHMudG9wLFxuICAgICAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHJldmVhbCBlbGVtZW50IGluIHZpZXdwb3J0XG4gICAgICAgIHcuc2Nyb2xsQnkoe1xuICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3RzLmxlZnQsXG4gICAgICAgICAgdG9wOiBjbGllbnRSZWN0cy50b3AsXG4gICAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gY29tbW9uanNcbiAgICBtb2R1bGUuZXhwb3J0cyA9IHsgcG9seWZpbGw6IHBvbHlmaWxsIH07XG4gIH0gZWxzZSB7XG4gICAgLy8gZ2xvYmFsXG4gICAgcG9seWZpbGwoKTtcbiAgfVxuXG59KCkpO1xuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYn
118BhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLyohXG4gKiBWdWUuanMgdjIuNi4xNFxuICogKGMpIDIwMTQtMjAyMSBFdmFuIFlvdVxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICovXG4vKiAgKi9cblxudmFyIGVtcHR5T2JqZWN0ID0gT2JqZWN0LmZyZWV6ZSh7fSk7XG5cbi8vIFRoZXNlIGhlbHBlcnMgcHJvZHVjZSBiZXR0ZXIgVk0gY29kZSBpbiBKUyBlbmdpbmVzIGR1ZSB0byB0aGVpclxuLy8gZXhwbGljaXRuZXNzIGFuZCBmdW5jdGlvbiBpbmxpbmluZy5cbmZ1bmN0aW9uIGlzVW5kZWYgKHYpIHtcbiAgcmV0dXJuIHYgPT09IHVuZGVmaW5lZCB8fCB2ID09PSBudWxsXG59XG5cbmZ1bmN0aW9uIGlzRGVmICh2KSB7XG4gIHJldHVybiB2ICE9PSB1bmRlZmluZWQgJiYgdiAhPT0gbnVsbFxufVxuXG5mdW5jdGlvbiBpc1RydWUgKHYpIHtcbiAgcmV0dXJuIHYgPT09IHRydWVcbn1cblxuZnVuY3Rpb24gaXNGYWxzZSAodikge1xuICByZXR1cm4gdiA9PT0gZmFsc2Vcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB2YWx1ZSBpcyBwcmltaXRpdmUuXG4gKi9cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlICh2YWx1ZSkge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHxcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8XG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgdHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJyB8fFxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nXG4gIClcbn1cblxuLyoqXG4gKiBRdWljayBvYmplY3QgY2hlY2sgLSB0aGlzIGlzIHByaW1hcmlseSB1c2VkIHRvIHRlbGxcbiAqIE9iamVjdHMgZnJvbSBwcmltaXRpdmUgdmFsdWVzIHdoZW4gd2Uga25vdyB0aGUgdmFsdWVcbiAqIGlzIGEgSlNPTi1jb21wbGlhbnQgdHlwZS5cbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QgKG9iaikge1xuICByZXR1cm4gb2JqICE9PSBudWxsICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnXG59XG5cbi8qKlxuICogR2V0IHRoZSByYXcgdHlwZSBzdHJpbmcgb2YgYSB2YWx1ZSwgZS5nLiwgW29iamVjdCBPYmplY3RdLlxuICovXG52YXIgX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuZnVuY3Rpb24gdG9SYXdUeXBlICh2YWx1ZSkge1xuICByZXR1cm4gX3RvU3RyaW5nLmNhbGwodmFsdWUpLnNsaWNlKDgsIC0xKVxufVxuXG4vKipcbiAqIFN0cmljdCBvYmplY3QgdHlwZSBjaGVjay4gT25seSByZXR1cm5zIHRydWVcbiAqIGZvciBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdHMuXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QgKG9iaikge1xuICByZXR1cm4gX3RvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSdcbn1cblxuZnVuY3Rpb24gaXNSZWdFeHAgKHYpIHtcbiAgcmV0dXJuIF90b1N0cmluZy5jYWxsKHYpID09PSAnW29iamVjdCBSZWdFeHBdJ1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHZhbCBpcyBhIHZhbGlkIGFycmF5IGluZGV4LlxuICovXG5mdW5jdGlvbiBpc1ZhbGlkQXJyYXlJbmRleCAodmFsKSB7XG4gIHZhciBuID0gcGFyc2VGbG9hdChTdHJpbmcodmFsKSk7XG4gIHJldHVybiBuID49IDAgJiYgTWF0aC5mbG9vcihuKSA9PT0gbiAmJiBpc0Zpbml0ZSh2YWwpXG59XG5cbmZ1bmN0aW9uIGlzUHJvbWlzZSAodmFsKSB7XG4gIHJldHVybiAoXG4gICAgaXNEZWYodmFsKSAmJlxuICAgI
118HR5cGVvZiB2YWwudGhlbiA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiB2YWwuY2F0Y2ggPT09ICdmdW5jdGlvbidcbiAgKVxufVxuXG4vKipcbiAqIENvbnZlcnQgYSB2YWx1ZSB0byBhIHN0cmluZyB0aGF0IGlzIGFjdHVhbGx5IHJlbmRlcmVkLlxuICovXG5mdW5jdGlvbiB0b1N0cmluZyAodmFsKSB7XG4gIHJldHVybiB2YWwgPT0gbnVsbFxuICAgID8gJydcbiAgICA6IEFycmF5LmlzQXJyYXkodmFsKSB8fCAoaXNQbGFpbk9iamVjdCh2YWwpICYmIHZhbC50b1N0cmluZyA9PT0gX3RvU3RyaW5nKVxuICAgICAgPyBKU09OLnN0cmluZ2lmeSh2YWwsIG51bGwsIDIpXG4gICAgICA6IFN0cmluZyh2YWwpXG59XG5cbi8qKlxuICogQ29udmVydCBhbiBpbnB1dCB2YWx1ZSB0byBhIG51bWJlciBmb3IgcGVyc2lzdGVuY2UuXG4gKiBJZiB0aGUgY29udmVyc2lvbiBmYWlscywgcmV0dXJuIG9yaWdpbmFsIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gdG9OdW1iZXIgKHZhbCkge1xuICB2YXIgbiA9IHBhcnNlRmxvYXQodmFsKTtcbiAgcmV0dXJuIGlzTmFOKG4pID8gdmFsIDogblxufVxuXG4vKipcbiAqIE1ha2UgYSBtYXAgYW5kIHJldHVybiBhIGZ1bmN0aW9uIGZvciBjaGVja2luZyBpZiBhIGtleVxuICogaXMgaW4gdGhhdCBtYXAuXG4gKi9cbmZ1bmN0aW9uIG1ha2VNYXAgKFxuICBzdHIsXG4gIGV4cGVjdHNMb3dlckNhc2Vcbikge1xuICB2YXIgbWFwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgdmFyIGxpc3QgPSBzdHIuc3BsaXQoJywnKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgbWFwW2xpc3RbaV1dID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZXhwZWN0c0xvd2VyQ2FzZVxuICAgID8gZnVuY3Rpb24gKHZhbCkgeyByZXR1cm4gbWFwW3ZhbC50b0xvd2VyQ2FzZSgpXTsgfVxuICAgIDogZnVuY3Rpb24gKHZhbCkgeyByZXR1cm4gbWFwW3ZhbF07IH1cbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIHRhZyBpcyBhIGJ1aWx0LWluIHRhZy5cbiAqL1xudmFyIGlzQnVpbHRJblRhZyA9IG1ha2VNYXAoJ3Nsb3QsY29tcG9uZW50JywgdHJ1ZSk7XG5cbi8qKlxuICogQ2hlY2sgaWYgYW4gYXR0cmlidXRlIGlzIGEgcmVzZXJ2ZWQgYXR0cmlidXRlLlxuICovXG52YXIgaXNSZXNlcnZlZEF0dHJpYnV0ZSA9IG1ha2VNYXAoJ2tleSxyZWYsc2xvdCxzbG90LXNjb3BlLGlzJyk7XG5cbi8qKlxuICogUmVtb3ZlIGFuIGl0ZW0gZnJvbSBhbiBhcnJheS5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlIChhcnIsIGl0ZW0pIHtcbiAgaWYgKGFyci5sZW5ndGgpIHtcbiAgICB2YXIgaW5kZXggPSBhcnIuaW5kZXhPZihpdGVtKTtcbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgcmV0dXJuIGFyci5zcGxpY2UoaW5kZXgsIDEpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhbiBvYmplY3QgaGFzIHRoZSBwcm9wZXJ0eS5cbiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbmZ1bmN0aW9uIGhhc093biAob2JqLCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpXG59XG5cbi8qKlxuICogQ3JlYXRlIGEgY2FjaGVkIHZlcnNpb24gb2YgYSBwdXJlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjYWNoZWQgKGZuKSB7XG4gIHZhciBjYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHJldHVybiAoZnVuY3Rpb24gY2FjaGVkRm4gKHN0cikge1xuICAgIHZhciBoaXQgPSBjYWNoZVtzdHJdO1xuICAgIHJldHVybiBoaXQgfHwgKGNhY2hlW3N0cl0gPSBmbihzdHIpKVxuICB9KVxufVxuXG4vKipcbiAqIENhbWVsaXplIGEgaHlwaGVuLWRlbGltaXRlZCBzdHJpbmcuXG4gKi9cbnZhciBjYW1lbGl6ZVJFID0gLy0oXFx3KS9nO1xudmFyIGNhbWVsaXplID0gY2FjaGVkKGZ1bmN0aW9uIChzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKGNhbWVsaXplUkUsIGZ1bmN0aW9uIChfLCBjKSB7IHJldHVybiBjID8gYy50b1VwcGVyQ2FzZSgpIDogJyc7IH0pXG59KTtcblxuLyoqXG4gKiBDYXBpdGFsaXplIGEgc3RyaW5nLlxuICovXG52YXIgY2FwaXRhbGl6ZSA9IGNhY2hlZChmdW5jdGlvbiAoc3RyKSB7XG4gIHJldHVybiBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSlcbn0pO1xuXG4vKipcbiAqIEh5cGhlbmF0ZSBhIGNhbWVsQ2FzZSBzdHJpbmcuXG4gKi9cbnZhciBoeXBoZW5hdGVSRSA9IC9cXEIoW0EtWl0pL2c7XG52YXIgaHlwaGVuYXRlID0gY2FjaGVkKGZ1bmN0aW9uIChzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKGh5cGhlbmF0ZVJFLCAnLSQxJykudG9Mb3dlckNhc2UoKVxufSk7XG5cbi8qKlxuICogU2ltcGxlIGJpbmQgcG9seWZpbGwgZm9yIGVudmlyb25tZW50cyB0aGF0IGRvIG5vdCBzdXBwb3J0IGl0LFxuICogZS5nLiwgUGhhbnRvbUpTIDEueC4gVGVjaG5pY2FsbHksIHdlIGRvbid0IG5lZWQgdGhpcyBhbnltb3JlXG4gKiBzaW5jZSBuYXRpdmUgYmluZCBpcyBub3cgcGVyZm9ybWFudCBlbm91Z2ggaW4gbW9zdCBicm93c2Vycy5cbiAqIEJ1dCByZW1vdmluZyBpdCB3b3VsZCBtZWFuIGJyZWFraW5nIGNvZGUgdGhhdCB3YXMgYWJsZSB0byBydW4gaW5cbiAqIFBoYW50b21KUyAxLngsIHNvIHRoaXMgbXVzdCBiZSBrZXB0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LlxuICovXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBwb2x5ZmlsbEJpbmQgKGZuLCBjdHgpIHtcbiAgZnVuY3Rpb24gYm91bmRGbiAoYSkge1xuICAgIHZhciBsID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICByZXR1cm4gbFxuICAgICAgPyBsID4gMVxuICAgICAgICA/IGZuLmFwcGx5KGN0eCwgYXJndW1lbnRzKVxuICAgICAgICA6IGZuLmNhbGwoY3R4LCBhKVxuICAgICAgOiBmbi5jYWxsKGN0eClcbiAgfVxuXG4gIGJvdW5kRm4uX2xlbmd0aCA9IGZuLmxlbmd0aDtcbiAgcmV0dXJuIGJvdW5kRm5cbn1cblxuZnVuY3Rpb24gbmF0aXZlQmluZCAoZm4sIGN0eCkge1xuICByZXR1cm4gZm4uYmluZChjdHgpXG59XG5cbnZhciBiaW5kID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRcbiAgPyBuYXRpdmVCaW5kXG4gIDogcG9seWZpbGxCaW5kO1xuXG4vKipcbiAqIENvbnZlcnQgYW4gQXJyYXktbGlrZSBvYmplY3QgdG8gYSByZWFsIEFycmF
1185LlxuICovXG5mdW5jdGlvbiB0b0FycmF5IChsaXN0LCBzdGFydCkge1xuICBzdGFydCA9IHN0YXJ0IHx8IDA7XG4gIHZhciBpID0gbGlzdC5sZW5ndGggLSBzdGFydDtcbiAgdmFyIHJldCA9IG5ldyBBcnJheShpKTtcbiAgd2hpbGUgKGktLSkge1xuICAgIHJldFtpXSA9IGxpc3RbaSArIHN0YXJ0XTtcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbi8qKlxuICogTWl4IHByb3BlcnRpZXMgaW50byB0YXJnZXQgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBleHRlbmQgKHRvLCBfZnJvbSkge1xuICBmb3IgKHZhciBrZXkgaW4gX2Zyb20pIHtcbiAgICB0b1trZXldID0gX2Zyb21ba2V5XTtcbiAgfVxuICByZXR1cm4gdG9cbn1cblxuLyoqXG4gKiBNZXJnZSBhbiBBcnJheSBvZiBPYmplY3RzIGludG8gYSBzaW5nbGUgT2JqZWN0LlxuICovXG5mdW5jdGlvbiB0b09iamVjdCAoYXJyKSB7XG4gIHZhciByZXMgPSB7fTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYXJyW2ldKSB7XG4gICAgICBleHRlbmQocmVzLCBhcnJbaV0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG5cbi8qKlxuICogUGVyZm9ybSBubyBvcGVyYXRpb24uXG4gKiBTdHViYmluZyBhcmdzIHRvIG1ha2UgRmxvdyBoYXBweSB3aXRob3V0IGxlYXZpbmcgdXNlbGVzcyB0cmFuc3BpbGVkIGNvZGVcbiAqIHdpdGggLi4ucmVzdCAoaHR0cHM6Ly9mbG93Lm9yZy9ibG9nLzIwMTcvMDUvMDcvU3RyaWN0LUZ1bmN0aW9uLUNhbGwtQXJpdHkvKS5cbiAqL1xuZnVuY3Rpb24gbm9vcCAoYSwgYiwgYykge31cblxuLyoqXG4gKiBBbHdheXMgcmV0dXJuIGZhbHNlLlxuICovXG52YXIgbm8gPSBmdW5jdGlvbiAoYSwgYiwgYykgeyByZXR1cm4gZmFsc2U7IH07XG5cbi8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLXZhcnMgKi9cblxuLyoqXG4gKiBSZXR1cm4gdGhlIHNhbWUgdmFsdWUuXG4gKi9cbnZhciBpZGVudGl0eSA9IGZ1bmN0aW9uIChfKSB7IHJldHVybiBfOyB9O1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgc3RyaW5nIGNvbnRhaW5pbmcgc3RhdGljIGtleXMgZnJvbSBjb21waWxlciBtb2R1bGVzLlxuICovXG5mdW5jdGlvbiBnZW5TdGF0aWNLZXlzIChtb2R1bGVzKSB7XG4gIHJldHVybiBtb2R1bGVzLnJlZHVjZShmdW5jdGlvbiAoa2V5cywgbSkge1xuICAgIHJldHVybiBrZXlzLmNvbmNhdChtLnN0YXRpY0tleXMgfHwgW10pXG4gIH0sIFtdKS5qb2luKCcsJylcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0d28gdmFsdWVzIGFyZSBsb29zZWx5IGVxdWFsIC0gdGhhdCBpcyxcbiAqIGlmIHRoZXkgYXJlIHBsYWluIG9iamVjdHMsIGRvIHRoZXkgaGF2ZSB0aGUgc2FtZSBzaGFwZT9cbiAqL1xuZnVuY3Rpb24gbG9vc2VFcXVhbCAoYSwgYikge1xuICBpZiAoYSA9PT0gYikgeyByZXR1cm4gdHJ1ZSB9XG4gIHZhciBpc09iamVjdEEgPSBpc09iamVjdChhKTtcbiAgdmFyIGlzT2JqZWN0QiA9IGlzT2JqZWN0KGIpO1xuICBpZiAoaXNPYmplY3RBICYmIGlzT2JqZWN0Qikge1xuICAgIHRyeSB7XG4gICAgICB2Y
118XIgaXNBcnJheUEgPSBBcnJheS5pc0FycmF5KGEpO1xuICAgICAgdmFyIGlzQXJyYXlCID0gQXJyYXkuaXNBcnJheShiKTtcbiAgICAgIGlmIChpc0FycmF5QSAmJiBpc0FycmF5Qikge1xuICAgICAgICByZXR1cm4gYS5sZW5ndGggPT09IGIubGVuZ3RoICYmIGEuZXZlcnkoZnVuY3Rpb24gKGUsIGkpIHtcbiAgICAgICAgICByZXR1cm4gbG9vc2VFcXVhbChlLCBiW2ldKVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmIChhIGluc3RhbmNlb2YgRGF0ZSAmJiBiIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gYS5nZXRUaW1lKCkgPT09IGIuZ2V0VGltZSgpXG4gICAgICB9IGVsc2UgaWYgKCFpc0FycmF5QSAmJiAhaXNBcnJheUIpIHtcbiAgICAgICAgdmFyIGtleXNBID0gT2JqZWN0LmtleXMoYSk7XG4gICAgICAgIHZhciBrZXlzQiA9IE9iamVjdC5rZXlzKGIpO1xuICAgICAgICByZXR1cm4ga2V5c0EubGVuZ3RoID09PSBrZXlzQi5sZW5ndGggJiYga2V5c0EuZXZlcnkoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgIHJldHVybiBsb29zZUVxdWFsKGFba2V5XSwgYltrZXldKVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfSBlbHNlIGlmICghaXNPYmplY3RBICYmICFpc09iamVjdEIpIHtcbiAgICByZXR1cm4gU3RyaW5nKGEpID09PSBTdHJpbmcoYilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybiB0aGUgZmlyc3QgaW5kZXggYXQgd2hpY2ggYSBsb29zZWx5IGVxdWFsIHZhbHVlIGNhbiBiZVxuICogZm91bmQgaW4gdGhlIGFycmF5IChpZiB2YWx1ZSBpcyBhIHBsYWluIG9iamVjdCwgdGhlIGFycmF5IG11c3RcbiAqIGNvbnRhaW4gYW4gb2JqZWN0IG9mIHRoZSBzYW1lIHNoYXBlKSwgb3IgLTEgaWYgaXQgaXMgbm90IHByZXNlbnQuXG4gKi9cbmZ1bmN0aW9uIGxvb3NlSW5kZXhPZiAoYXJyLCB2YWwpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAobG9vc2VFcXVhbChhcnJbaV0sIHZhbCkpIHsgcmV0dXJuIGkgfVxuICB9XG4gIHJldHVybiAtMVxufVxuXG4vKipcbiAqIEVuc3VyZSBhIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmx5IG9uY2UuXG4gKi9cbmZ1bmN0aW9uIG9uY2UgKGZuKSB7XG4gIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWNhbGxlZCkge1xuICAgICAgY2FsbGVkID0gdHJ1ZTtcbiAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICB9XG59XG5cbnZhciBTU1JfQVRUUiA9ICdkYXRhLXNlcnZlci1yZW5kZXJlZCc7XG5cbnZhciBBU1NFVF9UWVBFUyA9IFtcbiAgJ2NvbXBvbmVudCcsXG4gICdkaXJlY3RpdmUnLFxuICAnZmlsdGVyJ1xuXTtcblxudmFyIExJRkVDWUNMRV9IT09LUyA9IFtcbiAgJ2JlZm9yZUNyZWF0ZScsXG4gICdjcmVhdGVkJyxcbiAgJ2JlZm9yZU1vdW50JyxcbiAgJ21vdW50ZWQnLFxuICAnYmVmb3JlVXBkYXRlJyxcbiAgJ3VwZGF0ZWQnLFxuICAnYmVmb3JlRGVzdHJveScsXG4gICdkZXN0cm95ZWQnLFxuICAnYWN0aXZhdGVkJyxcbiAgJ2RlYWN0aXZhdGVkJyxcbiAgJ2Vycm9yQ2FwdHVyZWQnLFxuICAnc2VydmVyUHJlZmV0Y2gnXG5dO1xuXG4vKiAgKi9cblxuXG5cbnZhciBjb25maWcgPSAoe1xuICAvKipcbiAgICogT3B0aW9uIG1lcmdlIHN0cmF0ZWdpZXMgKHVzZWQgaW4gY29yZS91dGlsL29wdGlvbnMpXG4gICAqL1xuICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgb3B0aW9uTWVyZ2VTdHJhdGVnaWVzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHN1cHByZXNzIHdhcm5pbmdzLlxuICAgKi9cbiAgc2lsZW50OiBmYWxzZSxcblxuICAvKipcbiAgICogU2hvdyBwcm9kdWN0aW9uIG1vZGUgdGlwIG1lc3NhZ2Ugb24gYm9vdD9cbiAgICovXG4gIHByb2R1Y3Rpb25UaXA6IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicsXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZW5hYmxlIGRldnRvb2xzXG4gICAqL1xuICBkZXZ0b29sczogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyxcblxuICAvKipcbiAgICogV2hldGhlciB0byByZWNvcmQgcGVyZlxuICAgKi9cbiAgcGVyZm9ybWFuY2U6IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBFcnJvciBoYW5kbGVyIGZvciB3YXRjaGVyIGVycm9yc1xuICAgKi9cbiAgZXJyb3JIYW5kbGVyOiBudWxsLFxuXG4gIC8qKlxuICAgKiBXYXJuIGhhbmRsZXIgZm9yIHdhdGNoZXIgd2FybnNcbiAgICovXG4gIHdhcm5IYW5kbGVyOiBudWxsLFxuXG4gIC8qKlxuICAgKiBJZ25vcmUgY2VydGFpbiBjdXN0b20gZWxlbWVudHNcbiAgICovXG4gIGlnbm9yZWRFbGVtZW50czogW10sXG5cbiAgLyoqXG4gICAqIEN1c3RvbSB1c2VyIGtleSBhbGlhc2VzIGZvciB2LW9uXG4gICAqL1xuICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAga2V5Q29kZXM6IE9iamVjdC5jcmVhdGUobnVsbCksXG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgdGFnIGlzIHJlc2VydmVkIHNvIHRoYXQgaXQgY2Fubm90IGJlIHJlZ2lzdGVyZWQgYXMgYVxuICAgKiBjb21wb25lbnQuIFRoaXMgaXMgcGxhdGZvcm0tZGVwZW5kZW50IGFuZCBtYXkgYmUgb3ZlcndyaXR0ZW4uXG4gICAqL1xuICBpc1Jlc2VydmVkVGFnOiBubyxcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gYXR0cmlidXRlIGlzIHJlc2VydmVkIHNvIHRoYXQgaXQgY2Fubm90IGJlIHVzZWQgYXMgYSBjb21wb25lbnRcbiAgICogcHJvcC4gVGhpcyBpcyBwbGF0Zm9ybS1kZXBlbmRlbnQgYW5kIG1heSBiZSBvdmVyd3JpdHRlbi5cbiAgICovXG4gIGlzUmVzZXJ2ZWRBdHRyOiBubyxcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSB0YWcgaXMgYW4gdW5rbm93biBlbGVtZW50LlxuICAgKiBQbGF0Zm9ybS1kZXBlbmRlbnQuXG4gICAqL1xuICBpc1Vua25vd25FbGVtZW50OiBubyxcblxuICAvKipcbiAgICogR2V0IHRoZSBuYW1lc3BhY2Ugb2YgYW4gZWxlbWVudFxuICAgKi9cbiAgZ2V0VGFnTmFtZXNwYWNlOiBub29wLFxuXG4gIC8qKlxuICAgKiBQYXJzZSB0aGUgcmVhbCB0YWcgbmFtZSBmb3IgdGhlIHNwZWNpZmljIHBsYXRmb3JtLlxuICAgKi9cbiAgcGFyc2VQbGF0Zm9ybVRhZ05hbWU6IGlkZW50aXR5LFxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBhdHRyaWJ1dGUgbXVzdCBiZSBib3VuZCB1c2luZyBwcm9wZXJ0eSwgZS5nLiB2YWx1ZVxuICAgKiBQbGF0Zm9ybS1kZXBlbmRlbnQuXG4gICAqL1xuICBtdXN0VXNlUHJvcDogbm8sXG5cbiAgLyoqXG4gICAqIFBlcmZvcm0gdXBkYXRlcyBhc3luY2hyb25vdXNseS4gSW50ZW5kZWQgdG8gYmUgdXNlZCBieSBWdWUgVGVzdCBVdGlsc1xuICAgKiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSByZWR1Y2UgcGVyZm9ybWFuY2UgaWYgc2V0IHRvIGZhbHNlLlxuICAgKi9cbiAgYXN5bmM6IHRydWUsXG5cbiAgLyoqXG4gICAqIEV4cG9zZWQgZm9yIGxlZ2FjeSByZWFzb25zXG4gICAqL1xuICBfbGlmZWN5Y2xlSG9va3M6IExJRkVDWUNMRV9IT09LU1xufSk7XG5cbi8qICAqL1xuXG4vKipcbiAqIHVuaWNvZGUgbGV0dGVycyB1c2VkIGZvciBwYXJzaW5nIGh0bWwgdGFncywgY29tcG9uZW50IG5hbWVzIGFuZCBwcm9wZXJ0eSBwYXRocy5cbiAqIHVzaW5nIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sNTMvc2VtYW50aWNzLXNjcmlwdGluZy5odG1sI3BvdGVudGlhbGN1c3RvbWVsZW1lbnRuYW1lXG4gKiBza2lwcGluZyBcXHUxMDAwMC1cXHVFRkZGRiBkdWUgdG8gaXQgZnJlZXppbmcgdXAgUGhhbnRvbUpTXG4gKi9cbnZhciB1bmljb2RlUmVnRXhwID0gL2EtekEtWlxcdTAwQjdcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAzN0RcXHUwMzdGLVxcdTFGRkZcXHUyMDBDLVxcdTIwMERcXHUyMDNGLVxcdTIwNDBcXHUyMDcwLVxcdTIxOEZcXHUyQzAwLVxcdTJGRUZcXHUzMDAxLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRkQvO1xuXG4vKipcbiAqIENoZWNrIGlmIGEgc3RyaW5nIHN0YXJ0cyB3aXRoICQgb3IgX1xuICovXG5mdW5jdGlvbiBpc1Jlc2VydmVkIChzdHIpIHtcbiAgdmFyIGMgPSAoc3RyICsgJycpLmNoYXJDb2RlQXQoMCk7XG4gIHJldHVybi
118BjID09PSAweDI0IHx8IGMgPT09IDB4NUZcbn1cblxuLyoqXG4gKiBEZWZpbmUgYSBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gZGVmIChvYmosIGtleSwgdmFsLCBlbnVtZXJhYmxlKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgIHZhbHVlOiB2YWwsXG4gICAgZW51bWVyYWJsZTogISFlbnVtZXJhYmxlLFxuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbn1cblxuLyoqXG4gKiBQYXJzZSBzaW1wbGUgcGF0aC5cbiAqL1xudmFyIGJhaWxSRSA9IG5ldyBSZWdFeHAoKFwiW15cIiArICh1bmljb2RlUmVnRXhwLnNvdXJjZSkgKyBcIi4kX1xcXFxkXVwiKSk7XG5mdW5jdGlvbiBwYXJzZVBhdGggKHBhdGgpIHtcbiAgaWYgKGJhaWxSRS50ZXN0KHBhdGgpKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIHNlZ21lbnRzID0gcGF0aC5zcGxpdCgnLicpO1xuICByZXR1cm4gZnVuY3Rpb24gKG9iaikge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VnbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghb2JqKSB7IHJldHVybiB9XG4gICAgICBvYmogPSBvYmpbc2VnbWVudHNbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gb2JqXG4gIH1cbn1cblxuLyogICovXG5cbi8vIGNhbiB3ZSB1c2UgX19wcm90b19fP1xudmFyIGhhc1Byb3RvID0gJ19fcHJvdG9fXycgaW4ge307XG5cbi8vIEJyb3dzZXIgZW52aXJvbm1lbnQgc25pZmZpbmdcbnZhciBpbkJyb3dzZXIgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJztcbnZhciBpbldlZXggPSB0eXBlb2YgV1hFbnZpcm9ubWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgISFXWEVudmlyb25tZW50LnBsYXRmb3JtO1xudmFyIHdlZXhQbGF0Zm9ybSA9IGluV2VleCAmJiBXWEVudmlyb25tZW50LnBsYXRmb3JtLnRvTG93ZXJDYXNlKCk7XG52YXIgVUEgPSBpbkJyb3dzZXIgJiYgd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtcbnZhciBpc0lFID0gVUEgJiYgL21zaWV8dHJpZGVudC8udGVzdChVQSk7XG52YXIgaXNJRTkgPSBVQSAmJiBVQS5pbmRleE9mKCdtc2llIDkuMCcpID4gMDtcbnZhciBpc0VkZ2UgPSBVQSAmJiBVQS5pbmRleE9mKCdlZGdlLycpID4gMDtcbnZhciBpc0FuZHJvaWQgPSAoVUEgJiYgVUEuaW5kZXhPZignYW5kcm9pZCcpID4gMCkgfHwgKHdlZXhQbGF0Zm9ybSA9PT0gJ2FuZHJvaWQnKTtcbnZhciBpc0lPUyA9IChVQSAmJiAvaXBob25lfGlwYWR8aXBvZHxpb3MvLnRlc3QoVUEpKSB8fCAod2VleFBsYXRmb3JtID09PSAnaW9zJyk7XG52YXIgaXNDaHJvbWUgPSBVQSAmJiAvY2hyb21lXFwvXFxkKy8udGVzdChVQSkgJiYgIWlzRWRnZTtcbnZhciBpc1BoYW50b21KUyA9IFVBICYmIC9waGFudG9tanMvLnRlc3QoVUEpO1xudmFyIGlzRkYgPSBVQSAmJiBVQS5tYXRjaCgvZmlyZWZveFxcLyhcXGQrKS8pO1xuXG4vLyBGaXJlZm94IGhhcyBhIFwid2F0Y2hcIiBmdW5jdGlvbiBvbiBPYmplY3QucHJvdG90eXBlLi4uXG52YXIgbmF0aXZlV2F0Y2ggPSAoe30pLndhdGNoO1xuXG52YXIgc3VwcG9ydHNQYXNzaXZlID0gZmFsc2U7XG5pZiAoaW5Ccm93c2VyKSB7XG4gIHRyeSB7XG4gICAgdmFyIG9wdHMgPSB7fTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob3B0cywgJ3Bhc3NpdmUnLCAoe1xuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQgKCkge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBzdXBwb3J0c1Bhc3NpdmUgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pKTsgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzI4NVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0ZXN0LXBhc3NpdmUnLCBudWxsLCBvcHRzKTtcbiAgfSBjYXRjaCAoZSkge31cbn1cblxuLy8gdGhpcyBuZWVkcyB0byBiZSBsYXp5LWV2YWxlZCBiZWNhdXNlIHZ1ZSBtYXkgYmUgcmVxdWlyZWQgYmVmb3JlXG4vLyB2dWUtc2VydmVyLXJlbmRlcmVyIGNhbiBzZXQgVlVFX0VOVlxudmFyIF9pc1NlcnZlcjtcbnZhciBpc1NlcnZlclJlbmRlcmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKF9pc1NlcnZlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFpbkJyb3dzZXIgJiYgIWluV2VleCAmJiB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gZGV0ZWN0IHByZXNlbmNlIG9mIHZ1ZS1zZXJ2ZXItcmVuZGVyZXIgYW5kIGF2b2lkXG4gICAgICAvLyBXZWJwYWNrIHNoaW1taW5nIHRoZSBwcm9jZXNzXG4gICAgICBfaXNTZXJ2ZXIgPSBnbG9iYWxbJ3Byb2Nlc3MnXSAmJiBnbG9iYWxbJ3Byb2Nlc3MnXS5lbnYuVlVFX0VOViA9PT0gJ3NlcnZlcic7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9pc1NlcnZlciA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gX2lzU2VydmVyXG59O1xuXG4vLyBkZXRlY3QgZGV2dG9vbHNcbnZhciBkZXZ0b29scyA9IGluQnJvd3NlciAmJiB3aW5kb3cuX19WVUVfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmZ1bmN0aW9uIGlzTmF0aXZlIChDdG9yKSB7XG4gIHJldHVybiB0eXBlb2YgQ3RvciA9PT0gJ2Z1bmN0aW9uJyAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoQ3Rvci50b1N0cmluZygpKVxufVxuXG52YXIgaGFzU3ltYm9sID1cbiAgdHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoU3ltYm9sKSAmJlxuICB0eXBlb2YgUmVmbGVjdCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoUmVmbGVjdC5vd25LZXlzKTtcblxudmFyIF9TZXQ7XG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi8gLy8gJGZsb3ctZGlzYWJsZS1saW5lXG5pZiAodHlwZW9mIFNldCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoU2V0KSkge1xuICAvLyB1c2UgbmF0aXZlIFNldCB3aGVuIGF2YWlsYWJsZS5cbiAgX1NldCA9IFNldDtcbn0gZWxzZSB7XG4gIC8vIGEgbm9uLXN0YW5kYXJkIFNldCBwb2x5ZmlsbCB0aGF0IG9ubHkgd29ya3Mgd2l0aCBwcmltaXRpdmUga2V5cy5cbiAgX1NldCA9IC8qQF9fUFVSRV9fKi8oZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFNldCAoKSB7XG4gICAgICB0aGlzLnNldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgfVxuICAgIFNldC5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gaGFzIChrZXkpIHtcbiAgICAgIHJldHVybi
118B0aGlzLnNldFtrZXldID09PSB0cnVlXG4gICAgfTtcbiAgICBTZXQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZCAoa2V5KSB7XG4gICAgICB0aGlzLnNldFtrZXldID0gdHJ1ZTtcbiAgICB9O1xuICAgIFNldC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiBjbGVhciAoKSB7XG4gICAgICB0aGlzLnNldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgfTtcblxuICAgIHJldHVybiBTZXQ7XG4gIH0oKSk7XG59XG5cbi8qICAqL1xuXG52YXIgd2FybiA9IG5vb3A7XG52YXIgdGlwID0gbm9vcDtcbnZhciBnZW5lcmF0ZUNvbXBvbmVudFRyYWNlID0gKG5vb3ApOyAvLyB3b3JrIGFyb3VuZCBmbG93IGNoZWNrXG52YXIgZm9ybWF0Q29tcG9uZW50TmFtZSA9IChub29wKTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIGhhc0NvbnNvbGUgPSB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCc7XG4gIHZhciBjbGFzc2lmeVJFID0gLyg/Ol58Wy1fXSkoXFx3KS9nO1xuICB2YXIgY2xhc3NpZnkgPSBmdW5jdGlvbiAoc3RyKSB7IHJldHVybiBzdHJcbiAgICAucmVwbGFjZShjbGFzc2lmeVJFLCBmdW5jdGlvbiAoYykgeyByZXR1cm4gYy50b1VwcGVyQ2FzZSgpOyB9KVxuICAgIC5yZXBsYWNlKC9bLV9dL2csICcnKTsgfTtcblxuICB3YXJuID0gZnVuY3Rpb24gKG1zZywgdm0pIHtcbiAgICB2YXIgdHJhY2UgPSB2bSA/IGdlbmVyYXRlQ29tcG9uZW50VHJhY2Uodm0pIDogJyc7XG5cbiAgICBpZiAoY29uZmlnLndhcm5IYW5kbGVyKSB7XG4gICAgICBjb25maWcud2FybkhhbmRsZXIuY2FsbChudWxsLCBtc2csIHZtLCB0cmFjZSk7XG4gICAgfSBlbHNlIGlmIChoYXNDb25zb2xlICYmICghY29uZmlnLnNpbGVudCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoKFwiW1Z1ZSB3YXJuXTogXCIgKyBtc2cgKyB0cmFjZSkpO1xuICAgIH1cbiAgfTtcblxuICB0aXAgPSBmdW5jdGlvbiAobXNnLCB2bSkge1xuICAgIGlmIChoYXNDb25zb2xlICYmICghY29uZmlnLnNpbGVudCkpIHtcbiAgICAgIGNvbnNvbGUud2FybihcIltWdWUgdGlwXTogXCIgKyBtc2cgKyAoXG4gICAgICAgIHZtID8gZ2VuZXJhdGVDb21wb25lbnRUcmFjZSh2bSkgOiAnJ1xuICAgICAgKSk7XG4gICAgfVxuICB9O1xuXG4gIGZvcm1hdENvbXBvbmVudE5hbWUgPSBmdW5jdGlvbiAodm0sIGluY2x1ZGVGaWxlKSB7XG4gICAgaWYgKHZtLiRyb290ID09PSB2bSkge1xuICAgICAgcmV0dXJuICc8Um9vdD4nXG4gICAgfVxuICAgIHZhciBvcHRpb25zID0gdHlwZW9mIHZtID09PSAnZnVuY3Rpb24nICYmIHZtLmNpZCAhPSBudWxsXG4gICAgICA/IHZtLm9wdGlvbnNcbiAgICAgIDogdm0uX2lzVnVlXG4gICAgICAgID8gdm0uJG9wdGlvbnMgfHwgdm0uY29uc3RydWN0b3Iub3B0aW9uc1xuICAgICAgICA6IHZtO1xuICAgIHZhciBuYW1lID0gb3B0aW9ucy5uYW1lIHx8IG9wdGlvbnMuX2NvbXBvbmVudFRhZztcbiAgICB2YXIgZmlsZSA9IG9wdGlvbnMuX19maWxlO1xuICAgIGlmICghbmFtZSAmJiBmaWxlKSB7XG4gICAgICB2Y
118XIgbWF0Y2ggPSBmaWxlLm1hdGNoKC8oW14vXFxcXF0rKVxcLnZ1ZSQvKTtcbiAgICAgIG5hbWUgPSBtYXRjaCAmJiBtYXRjaFsxXTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgKG5hbWUgPyAoXCI8XCIgKyAoY2xhc3NpZnkobmFtZSkpICsgXCI+XCIpIDogXCI8QW5vbnltb3VzPlwiKSArXG4gICAgICAoZmlsZSAmJiBpbmNsdWRlRmlsZSAhPT0gZmFsc2UgPyAoXCIgYXQgXCIgKyBmaWxlKSA6ICcnKVxuICAgIClcbiAgfTtcblxuICB2YXIgcmVwZWF0ID0gZnVuY3Rpb24gKHN0ciwgbikge1xuICAgIHZhciByZXMgPSAnJztcbiAgICB3aGlsZSAobikge1xuICAgICAgaWYgKG4gJSAyID09PSAxKSB7IHJlcyArPSBzdHI7IH1cbiAgICAgIGlmIChuID4gMSkgeyBzdHIgKz0gc3RyOyB9XG4gICAgICBuID4+PSAxO1xuICAgIH1cbiAgICByZXR1cm4gcmVzXG4gIH07XG5cbiAgZ2VuZXJhdGVDb21wb25lbnRUcmFjZSA9IGZ1bmN0aW9uICh2bSkge1xuICAgIGlmICh2bS5faXNWdWUgJiYgdm0uJHBhcmVudCkge1xuICAgICAgdmFyIHRyZWUgPSBbXTtcbiAgICAgIHZhciBjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2UgPSAwO1xuICAgICAgd2hpbGUgKHZtKSB7XG4gICAgICAgIGlmICh0cmVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB2YXIgbGFzdCA9IHRyZWVbdHJlZS5sZW5ndGggLSAxXTtcbiAgICAgICAgICBpZiAobGFzdC5jb25zdHJ1Y3RvciA9PT0gdm0uY29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgIGN1cnJlbnRSZWN1cnNpdmVTZXF1ZW5jZSsrO1xuICAgICAgICAgICAgdm0gPSB2bS4kcGFyZW50O1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRSZWN1cnNpdmVTZXF1ZW5jZSA+IDApIHtcbiAgICAgICAgICAgIHRyZWVbdHJlZS5sZW5ndGggLSAxXSA9IFtsYXN0LCBjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2VdO1xuICAgICAgICAgICAgY3VycmVudFJlY3Vyc2l2ZVNlcXVlbmNlID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdHJlZS5wdXNoKHZtKTtcbiAgICAgICAgdm0gPSB2bS4kcGFyZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuICdcXG5cXG5mb3VuZCBpblxcblxcbicgKyB0cmVlXG4gICAgICAgIC5tYXAoZnVuY3Rpb24gKHZtLCBpKSB7IHJldHVybiAoXCJcIiArIChpID09PSAwID8gJy0tLT4gJyA6IHJlcGVhdCgnICcsIDUgKyBpICogMikpICsgKEFycmF5LmlzQXJyYXkodm0pXG4gICAgICAgICAgICA/ICgoZm9ybWF0Q29tcG9uZW50TmFtZSh2bVswXSkpICsgXCIuLi4gKFwiICsgKHZtWzFdKSArIFwiIHJlY3Vyc2l2ZSBjYWxscylcIilcbiAgICAgICAgICAgIDogZm9ybWF0Q29tcG9uZW50TmFtZSh2bSkpKTsgfSlcbiAgICAgICAgLmpvaW4oJ1xcbicpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoXCJcXG5cXG4oZm91bmQgaW4gXCIgKyAoZm9ybWF0Q29tcG9uZW50TmFtZSh2bSkpICsgXCIpXCIpXG4gICAgfVxuICB9O1xufVxuXG4vKiAgKi9cblxudmFyIHVpZCA9IDA7XG5cbi8qKlxuICogQSBkZXAgaXMgYW4gb2JzZXJ2YWJsZSB0aGF0IGNhbiBoYXZlIG11bHRpcGxlXG4gKiBkaXJlY3RpdmVzIHN1YnNjcmliaW5nIHRvIGl0LlxuICovXG52YXIgRGVwID0gZnVuY3Rpb24gRGVwICgpIHtcbiAgdGhpcy5pZCA9IHVpZCsrO1xuICB0aGlzLnN1YnMgPSBbXTtcbn07XG5cbkRlcC5wcm90b3R5cGUuYWRkU3ViID0gZnVuY3Rpb24gYWRkU3ViIChzdWIpIHtcbiAgdGhpcy5zdWJzLnB1c2goc3ViKTtcbn07XG5cbkRlcC5wcm90b3R5cGUucmVtb3ZlU3ViID0gZnVuY3Rpb24gcmVtb3ZlU3ViIChzdWIpIHtcbiAgcmVtb3ZlKHRoaXMuc3Vicywgc3ViKTtcbn07XG5cbkRlcC5wcm90b3R5cGUuZGVwZW5kID0gZnVuY3Rpb24gZGVwZW5kICgpIHtcbiAgaWYgKERlcC50YXJnZXQpIHtcbiAgICBEZXAudGFyZ2V0LmFkZERlcCh0aGlzKTtcbiAgfVxufTtcblxuRGVwLnByb3RvdHlwZS5ub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkgKCkge1xuICAvLyBzdGFiaWxpemUgdGhlIHN1YnNjcmliZXIgbGlzdCBmaXJzdFxuICB2YXIgc3VicyA9IHRoaXMuc3Vicy5zbGljZSgpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhY29uZmlnLmFzeW5jKSB7XG4gICAgLy8gc3VicyBhcmVuJ3Qgc29ydGVkIGluIHNjaGVkdWxlciBpZiBub3QgcnVubmluZyBhc3luY1xuICAgIC8vIHdlIG5lZWQgdG8gc29ydCB0aGVtIG5vdyB0byBtYWtlIHN1cmUgdGhleSBmaXJlIGluIGNvcnJlY3RcbiAgICAvLyBvcmRlclxuICAgIHN1YnMuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYS5pZCAtIGIuaWQ7IH0pO1xuICB9XG4gIGZvciAodmFyIGkgPSAwLCBsID0gc3Vicy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBzdWJzW2ldLnVwZGF0ZSgpO1xuICB9XG59O1xuXG4vLyBUaGUgY3VycmVudCB0YXJnZXQgd2F0Y2hlciBiZWluZyBldmFsdWF0ZWQuXG4vLyBUaGlzIGlzIGdsb2JhbGx5IHVuaXF1ZSBiZWNhdXNlIG9ubHkgb25lIHdhdGNoZXJcbi8vIGNhbiBiZSBldmFsdWF0ZWQgYXQgYSB0aW1lLlxuRGVwLnRhcmdldCA9IG51bGw7XG52YXIgdGFyZ2V0U3RhY2sgPSBbXTtcblxuZnVuY3Rpb24gcHVzaFRhcmdldCAodGFyZ2V0KSB7XG4gIHRhcmdldFN0YWNrLnB1c2godGFyZ2V0KTtcbiAgRGVwLnRhcmdldCA9IHRhcmdldDtcbn1cblxuZnVuY3Rpb24gcG9wVGFyZ2V0ICgpIHtcbiAgdGFyZ2V0U3RhY2sucG9wKCk7XG4gIERlcC50YXJnZXQgPSB0YXJnZXRTdGFja1t0YXJnZXRTdGFjay5sZW5ndGggLSAxXTtcbn1cblxuLyogICovXG5cbnZhciBWTm9kZSA9IGZ1bmN0aW9uIFZOb2RlIChcbiAgdGFnLFxuICBkYXRhLFxuICBjaGlsZHJlbixcbiAgdGV4dCxcbiAgZWxtLFxuICBjb250ZXh0LFxuICBjb21wb25lbnRPcHRpb25zLFxuICBhc3luY0ZhY3Rvcnlcbikge1xuICB0aGlzLnRhZyA9IHRhZztcbiAgdGhpcy5kYXRhID0gZGF0YTtcbiAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB0aGlzLnRleHQgPSB0ZXh0O1xuICB0aGlzLmVsbSA9IGVsbTtcbiAgdGhpcy5ucyA9IHVuZGVmaW5lZDtcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgdGhpcy5mbkNvbnRleHQgPSB1bmRlZmluZWQ7XG4gIHRoaXMuZm5PcHRpb25zID0gdW5kZWZpbmVkO1xuICB0aGlzLmZuU2NvcGVJZCA9IHVuZGVmaW5lZDtcbiAgdGhpcy5rZXkgPSBkYXRhICYmIGRhdGEua2V5O1xuICB0aGlzLmNvbXBvbmVudE9wdGlvbnMgPSBjb21wb25lbnRPcHRpb25zO1xuICB0aGlzLmNvbXBvbmVudEluc3RhbmNlID0gdW5kZWZpbmVkO1xuICB0aGlzLnBhcmVudCA9IHVuZGVmaW5lZDtcbiAgdGhpcy5yYXcgPSBmYWxzZTtcbiAgdGhpcy5pc1N0YXRpYyA9IGZhbHNlO1xuICB0aGlzLmlzUm9vdEluc2VydCA9IHRydWU7XG4gIHRoaXMuaXNDb21tZW50ID0gZmFsc2U7XG4gIHRoaXMuaXNDbG9uZWQgPSBmYWxzZTtcbiAgdGhpcy5pc09uY2UgP
118SBmYWxzZTtcbiAgdGhpcy5hc3luY0ZhY3RvcnkgPSBhc3luY0ZhY3Rvcnk7XG4gIHRoaXMuYXN5bmNNZXRhID0gdW5kZWZpbmVkO1xuICB0aGlzLmlzQXN5bmNQbGFjZWhvbGRlciA9IGZhbHNlO1xufTtcblxudmFyIHByb3RvdHlwZUFjY2Vzc29ycyA9IHsgY2hpbGQ6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0gfTtcblxuLy8gREVQUkVDQVRFRDogYWxpYXMgZm9yIGNvbXBvbmVudEluc3RhbmNlIGZvciBiYWNrd2FyZHMgY29tcGF0LlxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnByb3RvdHlwZUFjY2Vzc29ycy5jaGlsZC5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNvbXBvbmVudEluc3RhbmNlXG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyggVk5vZGUucHJvdG90eXBlLCBwcm90b3R5cGVBY2Nlc3NvcnMgKTtcblxudmFyIGNyZWF0ZUVtcHR5Vk5vZGUgPSBmdW5jdGlvbiAodGV4dCkge1xuICBpZiAoIHRleHQgPT09IHZvaWQgMCApIHRleHQgPSAnJztcblxuICB2YXIgbm9kZSA9IG5ldyBWTm9kZSgpO1xuICBub2RlLnRleHQgPSB0ZXh0O1xuICBub2RlLmlzQ29tbWVudCA9IHRydWU7XG4gIHJldHVybiBub2RlXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVUZXh0Vk5vZGUgKHZhbCkge1xuICByZXR1cm4gbmV3IFZOb2RlKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIFN0cmluZyh2YWwpKVxufVxuXG4vLyBvcHRpbWl6ZWQgc2hhbGxvdyBjbG9uZVxuLy8gdXNlZCBmb3Igc3RhdGljIG5vZGVzIGFuZCBzbG90IG5vZGVzIGJlY2F1c2UgdGhleSBtYXkgYmUgcmV1c2VkIGFjcm9zc1xuLy8gbXVsdGlwbGUgcmVuZGVycywgY2xvbmluZyB0aGVtIGF2b2lkcyBlcnJvcnMgd2hlbiBET00gbWFuaXB1bGF0aW9ucyByZWx5XG4vLyBvbiB0aGVpciBlbG0gcmVmZXJlbmNlLlxuZnVuY3Rpb24gY2xvbmVWTm9kZSAodm5vZGUpIHtcbiAgdmFyIGNsb25lZCA9IG5ldyBWTm9kZShcbiAgICB2bm9kZS50YWcsXG4gICAgdm5vZGUuZGF0YSxcbiAgICAvLyAjNzk3NVxuICAgIC8vIGNsb25lIGNoaWxkcmVuIGFycmF5IHRvIGF2b2lkIG11dGF0aW5nIG9yaWdpbmFsIGluIGNhc2Ugb2YgY2xvbmluZ1xuICAgIC8vIGEgY2hpbGQuXG4gICAgdm5vZGUuY2hpbGRyZW4gJiYgdm5vZGUuY2hpbGRyZW4uc2xpY2UoKSxcbiAgICB2bm9kZS50ZXh0LFxuICAgIHZub2RlLmVsbSxcbiAgICB2bm9kZS5jb250ZXh0LFxuICAgIHZub2RlLmNvbXBvbmVudE9wdGlvbnMsXG4gICAgdm5vZGUuYXN5bmNGYWN0b3J5XG4gICk7XG4gIGNsb25lZC5ucyA9IHZub2RlLm5zO1xuICBjbG9uZWQuaXNTdGF0aWMgPSB2bm9kZS5pc1N0YXRpYztcbiAgY2xvbmVkLmtleSA9IHZub2RlLmtleTtcbiAgY2xvbmVkLmlzQ29tbWVudCA9IHZub2RlLmlzQ29tbWVudDtcbiAgY2xvbmVkLmZuQ29udGV4dCA9IHZub2RlLmZuQ29udGV4dDtcbiAgY2xvbmVkLmZuT3B0aW9ucyA9IHZub2RlLmZuT3B0aW9ucztcbiAgY2xvbmVkLmZuU2NvcGVJZCA9IHZub2RlLmZuU2NvcGVJZDtcbiAgY2xvbmVkLmFzeW5jTWV0YSA9IHZub2RlLmFzeW5jTWV0YTtcbiAgY2xvbmVkLmlzQ2xvbmVkID0gdHJ1ZTtcbiAgcmV0dXJuIGNsb25lZFxufVxuXG4vKlxuICogbm90IHR5cGUgY2hlY2tpbmcgdGhpcyBmaWxlIGJlY2F1c2UgZmxvdyBkb2Vzbid0IHBsYXkgd2VsbCB3aXRoXG4gKiBkeW5hbWljYWxseSBhY2Nlc3NpbmcgbWV0aG9kcyBvbiBBcnJheSBwcm90b3R5cGVcbiAqL1xuXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcbnZhciBhcnJheU1ldGhvZHMgPSBPYmplY3QuY3JlYXRlKGFycmF5UHJvdG8pO1xuXG52YXIgbWV0aG9kc1RvUGF0Y2ggPSBbXG4gICdwdXNoJyxcbiAgJ3BvcCcsXG4gICdzaGlmdCcsXG4gICd1bnNoaWZ0JyxcbiAgJ3NwbGljZScsXG4gICdzb3J0JyxcbiAgJ3JldmVyc2UnXG5dO1xuXG4vKipcbiAqIEludGVyY2VwdCBtdXRhdGluZyBtZXRob2RzIGFuZCBlbWl0IGV2ZW50c1xuICovXG5tZXRob2RzVG9QYXRjaC5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgLy8gY2FjaGUgb3JpZ2luYWwgbWV0aG9kXG4gIHZhciBvcmlnaW5hbCA9IGFycmF5UHJvdG9bbWV0aG9kXTtcbiAgZGVmKGFycmF5TWV0aG9kcywgbWV0aG9kLCBmdW5jdGlvbiBtdXRhdG9yICgpIHtcbiAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICB2YXIgcmVzdWx0ID0gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgdmFyIG9iID0gdGhpcy5fX29iX187XG4gICAgdmFyIGluc2VydGVkO1xuICAgIHN3aXRjaCAobWV0aG9kKSB7XG4gICAgICBjYXNlICdwdXNoJzpcbiAgICAgIGNhc2UgJ3Vuc2hpZnQnOlxuICAgICAgICBpbnNlcnRlZCA9IGFyZ3M7XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdzcGxpY2UnOlxuICAgICAgICBpbnNlcnRlZCA9IGFyZ3Muc2xpY2UoMik7XG4gICAgICAgIGJyZWFrXG4gICAgfVxuICAgIGlmIChpbnNlcnRlZCkgeyBvYi5vYnNlcnZlQXJyYXkoaW5zZXJ0ZWQpOyB9XG4gICAgLy8gbm90aWZ5IGNoYW5nZVxuICAgIG9iLmRlcC5ub3RpZnkoKTtcbiAgICByZXR1cm4gcmVzdWx0XG4gIH0pO1xufSk7XG5cbi8qICAqL1xuXG52YXIgYXJyYXlLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYXJyYXlNZXRob2RzKTtcblxuLyoqXG4gKiBJbiBzb21lIGNhc2VzIHdlIG1heSB3YW50IHRvIGRpc2FibGUgb2JzZXJ2YXRpb24gaW5zaWRlIGEgY29tcG9uZW50J3NcbiAqIHVwZGF0ZSBjb21wdXRhdGlvbi5cbiAqL1xudmFyIHNob3VsZE9ic2VydmUgPSB0cnVlO1xuXG5mdW5jdGlvbiB0b2dnbGVPYnNlcnZpbmcgKHZhbHVlKSB7XG4gIHNob3VsZE9ic2VydmUgPSB2YWx1ZTtcbn1cblxuLyoqXG4gKiBPYnNlcnZlciBjbGFzcyB0aGF0IGlzIGF0dGFjaGVkIHRvIGVhY2ggb2JzZXJ2ZWRcbiAqIG9iamVjdC4gT25jZSBhdHRhY2hlZCwgdGhlIG9ic2VydmVyIGNvbnZlcnRzIHRoZSB0YXJnZXRcbiAqIG9iamVjdCdzIHByb3BlcnR5IGtleXMgaW50byBnZXR0ZXIvc2V0dGVycyB0aGF0XG4gKiBjb2xsZWN0IGRlcGVuZGVuY2llcyBhbmQgZGlzcGF0Y2ggdXBkYXRlcy5cbiAqL1xudmFyIE9ic2VydmVyID0gZnVuY3Rpb24gT2JzZXJ2ZXIgKHZhbHVlKSB7XG4gIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgdGhpcy5kZXAgPSBuZXcgRGVwKCk7XG4gIHRoaXMudm1Db3VudCA9IDA7XG4gIGRlZih2YWx1ZSwgJ19fb2JfXycsIHRoaXMpO1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBpZiAoaGFzUHJvdG8pIHtcbiAgICAgIHByb3RvQXVnbWVudCh2YWx1ZSwgYXJyYXlNZXRob2RzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29weUF1Z21lbnQodmFsdWUsIGFycmF5TWV0aG9kcywgYXJyYXlLZXlzKTtcbiAgICB9XG4gICAgdGhpcy5vYnNlcnZlQXJyYXkodmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMud2Fsayh2YWx1ZSk7XG4gIH1cbn07XG5cbi8qKlxuICogV2FsayB0aHJvdWdoIGFsbCBwcm9wZXJ0aWVzIGFuZCBjb252ZXJ0IHRoZW0gaW50b1xuICogZ2V0dGVyL3NldHRlcnMuIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuXG4gKiB2YWx1ZSB0eXBlIGlzIE9iamVjdC5cbiAqL1xuT2JzZXJ2ZXIucHJvdG90eXBlLndhbGsgPSBmdW5jdGlvbiB3YWxrIChvYmopIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBkZWZpbmVSZWFjdGl2ZSQkMShvYmosIGtleXNbaV0pO1xuICB9XG59O1xuXG4vKipcbiAqIE9ic2VydmUgYSBsaXN0IG9mIEFycmF5IGl0ZW1zLlxuICovXG5PYnNlcnZlci5wcm90b3R5cGUub2JzZXJ2ZUFycmF5ID0gZnVuY3Rpb24gb2JzZXJ2ZUFycmF5IChpdGVtcykge1xuICBmb3IgKHZhciBpID0gMCwgbCA9IGl0ZW1zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIG9ic2VydmUoaXRlbXNbaV0pO1xuICB9XG59O1xuXG4vLyBoZWxwZXJzXG5cbi8qKlxuICogQXVnbWVudCBhIHRhcmdldCBPYmplY3Qgb3IgQXJyYXkgYnkgaW50ZXJjZXB0aW5nXG4gKiB0aGUgcHJvdG90eXBlIGNoYWluIHVzaW5nIF9fcHJvdG9fX1xuICovXG5mdW5jdGlvbiBwcm90b0F1Z21lbnQgKHRhcmdldCwgc3JjKSB7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG4gIHRhcmdldC5fX3Byb3RvX18gPSBzcmM7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tcHJvdG8gKi9cbn1cblxuLyoqXG4gKiBBdWdtZW50IGEgdGFyZ2V0IE9iamVjdCBvciBBcnJheSBieSBkZWZpbmluZ1xuICogaGlkZGVuIHByb3BlcnRpZXMuXG4gKi9cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBjb3B5QXVnbWVudCAodGFyZ2V0LCBzcmMsIGtleXMpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBrZXlzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGRlZih0YXJnZXQsIGtleSwgc3JjW2tleV0pO1xuICB9XG59XG5cbi8qKlxuICogQXR0ZW1wdCB0byBjcmVhdGUgYW4gb2JzZXJ2ZXIgaW5zdGFuY2UgZm9yIGEgdmFsdWUsXG4gKiByZXR1cm5zIHRoZSBuZXcgb2JzZXJ2ZXIgaWYgc3VjY2Vzc2Z1bGx5IG9ic2VydmVkLFxuICogb3IgdGhlIGV4aXN0aW5nIG9ic2VydmVyIGlmIHRoZSB2YWx1ZSBhbHJlYWR5IGhhcyBvbmUuXG4gKi9cbmZ1bmN0aW9uIG9ic2VydmUgKHZhbHVlLCBhc1Jvb3REYXRhKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpIHx8IHZhbHVlIGluc3RhbmNlb2YgVk5vZGUpIHtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgb2I7XG4gIGlmIChoYXNPd24odmFsdWUsICdfX29iX18nKSAmJi
118B2YWx1ZS5fX29iX18gaW5zdGFuY2VvZiBPYnNlcnZlcikge1xuICAgIG9iID0gdmFsdWUuX19vYl9fO1xuICB9IGVsc2UgaWYgKFxuICAgIHNob3VsZE9ic2VydmUgJiZcbiAgICAhaXNTZXJ2ZXJSZW5kZXJpbmcoKSAmJlxuICAgIChBcnJheS5pc0FycmF5KHZhbHVlKSB8fCBpc1BsYWluT2JqZWN0KHZhbHVlKSkgJiZcbiAgICBPYmplY3QuaXNFeHRlbnNpYmxlKHZhbHVlKSAmJlxuICAgICF2YWx1ZS5faXNWdWVcbiAgKSB7XG4gICAgb2IgPSBuZXcgT2JzZXJ2ZXIodmFsdWUpO1xuICB9XG4gIGlmIChhc1Jvb3REYXRhICYmIG9iKSB7XG4gICAgb2Iudm1Db3VudCsrO1xuICB9XG4gIHJldHVybiBvYlxufVxuXG4vKipcbiAqIERlZmluZSBhIHJlYWN0aXZlIHByb3BlcnR5IG9uIGFuIE9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZGVmaW5lUmVhY3RpdmUkJDEgKFxuICBvYmosXG4gIGtleSxcbiAgdmFsLFxuICBjdXN0b21TZXR0ZXIsXG4gIHNoYWxsb3dcbikge1xuICB2YXIgZGVwID0gbmV3IERlcCgpO1xuXG4gIHZhciBwcm9wZXJ0eSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBrZXkpO1xuICBpZiAocHJvcGVydHkgJiYgcHJvcGVydHkuY29uZmlndXJhYmxlID09PSBmYWxzZSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gY2F0ZXIgZm9yIHByZS1kZWZpbmVkIGdldHRlci9zZXR0ZXJzXG4gIHZhciBnZXR0ZXIgPSBwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5nZXQ7XG4gIHZhciBzZXR0ZXIgPSBwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5zZXQ7XG4gIGlmICgoIWdldHRlciB8fCBzZXR0ZXIpICYmIGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICB2YWwgPSBvYmpba2V5XTtcbiAgfVxuXG4gIHZhciBjaGlsZE9iID0gIXNoYWxsb3cgJiYgb2JzZXJ2ZSh2YWwpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIHJlYWN0aXZlR2V0dGVyICgpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGdldHRlciA/IGdldHRlci5jYWxsKG9iaikgOiB2YWw7XG4gICAgICBpZiAoRGVwLnRhcmdldCkge1xuICAgICAgICBkZXAuZGVwZW5kKCk7XG4gICAgICAgIGlmIChjaGlsZE9iKSB7XG4gICAgICAgICAgY2hpbGRPYi5kZXAuZGVwZW5kKCk7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICBkZXBlbmRBcnJheSh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gcmVhY3RpdmVTZXR0ZXIgKG5ld1ZhbCkge1xuICAgICAgdmFyIHZhbHVlID0gZ2V0dGVyID8gZ2V0dGVyLmNhbGwob2JqKSA6IHZhbDtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXNlbGYtY29tcGFyZSAqL1xuICAgICAgaWYgKG5ld1ZhbCA9PT0gdmFsdWUgfHwgKG5ld1ZhbCAhPT0gbmV3VmFsICYmIHZhbHVlICE9PSB2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLXNlbGYtY29tcGFyZSAqL1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY3VzdG9tU2V0dGVyKSB7XG4gICAgICAgIGN1c3RvbVNldHRlcigpO1xuICAgICAgfVxuICAgICAgLy8gIzc5ODE6IGZvciBhY2Nlc3NvciBwcm9wZXJ0aWVzIHdpdGhvdXQgc2V0dGVyXG4gICAgICBpZiAoZ2V0dGVyICYmICFzZXR0ZXIpIHsgcmV0dXJuIH1cbiAgICAgIGlmIChzZXR0ZXIpIHtcbiAgICAgICAgc2V0dGVyLmNhbGwob2JqLCBuZXdWYWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsID0gbmV3VmFsO1xuICAgICAgfVxuICAgICAgY2hpbGRPYiA9ICFzaGFsbG93ICYmIG9ic2VydmUobmV3VmFsKTtcbiAgICAgIGRlcC5ub3RpZnkoKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIFNldCBhIHByb3BlcnR5IG9uIGFuIG9iamVjdC4gQWRkcyB0aGUgbmV3IHByb3BlcnR5IGFuZFxuICogdHJpZ2dlcnMgY2hhbmdlIG5vdGlmaWNhdGlvbiBpZiB0aGUgcHJvcGVydHkgZG9lc24ndFxuICogYWxyZWFkeSBleGlzdC5cbiAqL1xuZnVuY3Rpb24gc2V0ICh0YXJnZXQsIGtleSwgdmFsKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgKGlzVW5kZWYodGFyZ2V0KSB8fCBpc1ByaW1pdGl2ZSh0YXJnZXQpKVxuICApIHtcbiAgICB3YXJuKChcIkNhbm5vdCBzZXQgcmVhY3RpdmUgcHJvcGVydHkgb24gdW5kZWZpbmVkLCBudWxsLCBvciBwcmltaXRpdmUgdmFsdWU6IFwiICsgKCh0YXJnZXQpKSkpO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHRhcmdldCkgJiYgaXNWYWxpZEFycmF5SW5kZXgoa2V5KSkge1xuICAgIHRhcmdldC5sZW5ndGggPSBNYXRoLm1heCh0YXJnZXQubGVuZ3RoLCBrZXkpO1xuICAgIHRhcmdldC5zcGxpY2Uoa2V5LCAxLCB2YWwpO1xuICAgIHJldHVybiB2YWxcbiAgfVxuICBpZiAoa2V5IGluIHRhcmdldCAmJiAhKGtleSBpbiBPYmplY3QucHJvdG90eXBlKSkge1xuICAgIHRhcmdldFtrZXldID0gdmFsO1xuICAgIHJldHVybiB2YWxcbiAgfVxuICB2YXIgb2IgPSAodGFyZ2V0KS5fX29iX187XG4gIGlmICh0YXJnZXQuX2lzVnVlIHx8IChvYiAmJiBvYi52bUNvdW50KSkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICdBdm9pZCBhZGRpbmcgcmVhY3RpdmUgcHJvcGVydGllcyB0byBhIFZ1ZSBpbnN0YW5jZSBvciBpdHMgcm9vdCAkZGF0YSAnICtcbiAgICAgICdhdCBydW50aW1lIC0gZGVjbGFyZSBpdCB1cGZyb250IGluIHRoZSBkYXRhIG9wdGlvbi4nXG4gICAgKTtcbiAgICByZXR1cm4gdmFsXG4gIH1cbiAgaWYgKCFvYikge1xuICAgIHRhcmdldFtrZXldID0gdmFsO1xuICAgIHJldHVybiB2YWxcbiAgfVxuICBkZWZpbmVSZWFjdGl2ZSQkMShvYi52YWx1ZSwga2V5LCB2YWwpO1xuICBvYi5kZXAubm90aWZ5KCk7XG4gIHJldHVybiB2YWxcbn1cblxuLyoqXG4gKiBEZWxldGUgYSBwcm9wZXJ0eSBhbmQgdHJpZ2dlciBjaGFuZ2UgaWYgbmVjZXNzYXJ5LlxuICovXG5mdW5jdGlvbiBkZWwgKHRhcmdldCwga2V5KSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgKGlzVW5kZWYodGFyZ2V0KSB8fCBpc1ByaW1pdGl2ZSh0YXJnZXQpKVxuICApIHtcbiAgICB3YXJuKChcIkNhbm5vdCBkZWxldGUgcmVhY3RpdmUgcHJvcGVydHkgb24gdW5kZWZpbmVkLCBudWxsLCBvciBwcmltaXRpdmUgdmFsdWU6IFwiICsgKCh0YXJnZXQpKSkpO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF
1185KHRhcmdldCkgJiYgaXNWYWxpZEFycmF5SW5kZXgoa2V5KSkge1xuICAgIHRhcmdldC5zcGxpY2Uoa2V5LCAxKTtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgb2IgPSAodGFyZ2V0KS5fX29iX187XG4gIGlmICh0YXJnZXQuX2lzVnVlIHx8IChvYiAmJiBvYi52bUNvdW50KSkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICdBdm9pZCBkZWxldGluZyBwcm9wZXJ0aWVzIG9uIGEgVnVlIGluc3RhbmNlIG9yIGl0cyByb290ICRkYXRhICcgK1xuICAgICAgJy0ganVzdCBzZXQgaXQgdG8gbnVsbC4nXG4gICAgKTtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoIWhhc093bih0YXJnZXQsIGtleSkpIHtcbiAgICByZXR1cm5cbiAgfVxuICBkZWxldGUgdGFyZ2V0W2tleV07XG4gIGlmICghb2IpIHtcbiAgICByZXR1cm5cbiAgfVxuICBvYi5kZXAubm90aWZ5KCk7XG59XG5cbi8qKlxuICogQ29sbGVjdCBkZXBlbmRlbmNpZXMgb24gYXJyYXkgZWxlbWVudHMgd2hlbiB0aGUgYXJyYXkgaXMgdG91Y2hlZCwgc2luY2VcbiAqIHdlIGNhbm5vdCBpbnRlcmNlcHQgYXJyYXkgZWxlbWVudCBhY2Nlc3MgbGlrZSBwcm9wZXJ0eSBnZXR0ZXJzLlxuICovXG5mdW5jdGlvbiBkZXBlbmRBcnJheSAodmFsdWUpIHtcbiAgZm9yICh2YXIgZSA9ICh2b2lkIDApLCBpID0gMCwgbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGUgPSB2YWx1ZVtpXTtcbiAgICBlICYmIGUuX19vYl9fICYmIGUuX19vYl9fLmRlcC5kZXBlbmQoKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShlKSkge1xuICAgICAgZGVwZW5kQXJyYXkoZSk7XG4gICAgfVxuICB9XG59XG5cbi8qICAqL1xuXG4vKipcbiAqIE9wdGlvbiBvdmVyd3JpdGluZyBzdHJhdGVnaWVzIGFyZSBmdW5jdGlvbnMgdGhhdCBoYW5kbGVcbiAqIGhvdyB0byBtZXJnZSBhIHBhcmVudCBvcHRpb24gdmFsdWUgYW5kIGEgY2hpbGQgb3B0aW9uXG4gKiB2YWx1ZSBpbnRvIHRoZSBmaW5hbCB2YWx1ZS5cbiAqL1xudmFyIHN0cmF0cyA9IGNvbmZpZy5vcHRpb25NZXJnZVN0cmF0ZWdpZXM7XG5cbi8qKlxuICogT3B0aW9ucyB3aXRoIHJlc3RyaWN0aW9uc1xuICovXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBzdHJhdHMuZWwgPSBzdHJhdHMucHJvcHNEYXRhID0gZnVuY3Rpb24gKHBhcmVudCwgY2hpbGQsIHZtLCBrZXkpIHtcbiAgICBpZiAoIXZtKSB7XG4gICAgICB3YXJuKFxuICAgICAgICBcIm9wdGlvbiBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgY2FuIG9ubHkgYmUgdXNlZCBkdXJpbmcgaW5zdGFuY2UgXCIgK1xuICAgICAgICAnY3JlYXRpb24gd2l0aCB0aGUgYG5ld2Aga2V5d29yZC4nXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gZGVmYXVsdFN0cmF0KHBhcmVudCwgY2hpbGQpXG4gIH07XG59XG5cbi8qKlxuICogSGVscGVyIHRoYXQgcmVjdXJzaXZlbHkgbWVyZ2VzIHR3byBkYXRhIG9iamVjdHMgdG9nZXRoZXIuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlRGF0YSAodG8sIGZyb20pIHtcbiAgaWYgKCFmcm9tKSB7IHJldHVybiB0byB9XG4gIHZhciBrZXksIHRvVmFsLCBmcm9tVmFsO1xuXG4gIHZhciBrZXlzID0gaGFzU3ltYm9sXG4gICAgPyBSZWZsZWN0Lm93bktleXMoZnJvbSlcbiAgICA6IE9iamVjdC5rZXlzKGZyb20pO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IGtleXNbaV07XG4gICAgLy8gaW4gY2FzZSB0aGUgb2JqZWN0IGlzIGFscmVhZHkgb2JzZXJ2ZWQuLi5cbiAgICBpZiAoa2V5ID09PSAnX19vYl9fJykgeyBjb250aW51ZSB9XG4gICAgdG9WYWwgPSB0b1trZXldO1xuICAgIGZyb21WYWwgPSBmcm9tW2tleV07XG4gICAgaWYgKCFoYXNPd24odG8sIGtleSkpIHtcbiAgICAgIHNldCh0bywga2V5LCBmcm9tVmFsKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdG9WYWwgIT09IGZyb21WYWwgJiZcbiAgICAgIGlzUGxhaW5PYmplY3QodG9WYWwpICYmXG4gICAgICBpc1BsYWluT2JqZWN0KGZyb21WYWwpXG4gICAgKSB7XG4gICAgICBtZXJnZURhdGEodG9WYWwsIGZyb21WYWwpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdG9cbn1cblxuLyoqXG4gKiBEYXRhXG4gKi9cbmZ1bmN0aW9uIG1lcmdlRGF0YU9yRm4gKFxuICBwYXJlbnRWYWwsXG4gIGNoaWxkVmFsLFxuICB2bVxuKSB7XG4gIGlmICghdm0pIHtcbiAgICAvLyBpbiBhIFZ1ZS5leHRlbmQgbWVyZ2UsIGJvdGggc2hvdWxkIGJlIGZ1bmN0aW9uc1xuICAgIGlmICghY2hpbGRWYWwpIHtcbiAgICAgIHJldHVybiBwYXJlbnRWYWxcbiAgICB9XG4gICAgaWYgKCFwYXJlbnRWYWwpIHtcbiAgICAgIHJldHVybiBjaGlsZFZhbFxuICAgIH1cbiAgICAvLyB3aGVuIHBhcmVudFZhbCAmIGNoaWxkVmFsIGFyZSBib3RoIHByZXNlbnQsXG4gICAgLy8gd2UgbmVlZCB0byByZXR1cm4gYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlXG4gICAgLy8gbWVyZ2VkIHJlc3VsdCBvZiBib3RoIGZ1bmN0aW9ucy4uLiBubyBuZWVkIHRvXG4gICAgLy8gY2hlY2sgaWYgcGFyZW50VmFsIGlzIGEgZnVuY3Rpb24gaGVyZSBiZWNhdXNlXG4gICAgLy8gaXQgaGFzIHRvIGJlIGEgZnVuY3Rpb24gdG8gcGFzcyBwcmV2aW91cyBtZXJnZXMuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG1lcmdlZERhdGFGbiAoKSB7XG4gICAgICByZXR1cm4gbWVyZ2VEYXRhKFxuICAgICAgICB0eXBlb2YgY2hpbGRWYWwgPT09ICdmdW5jdGlvbicgPyBjaGlsZFZhbC5jYWxsKHRoaXMsIHR
118oaXMpIDogY2hpbGRWYWwsXG4gICAgICAgIHR5cGVvZiBwYXJlbnRWYWwgPT09ICdmdW5jdGlvbicgPyBwYXJlbnRWYWwuY2FsbCh0aGlzLCB0aGlzKSA6IHBhcmVudFZhbFxuICAgICAgKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VkSW5zdGFuY2VEYXRhRm4gKCkge1xuICAgICAgLy8gaW5zdGFuY2UgbWVyZ2VcbiAgICAgIHZhciBpbnN0YW5jZURhdGEgPSB0eXBlb2YgY2hpbGRWYWwgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBjaGlsZFZhbC5jYWxsKHZtLCB2bSlcbiAgICAgICAgOiBjaGlsZFZhbDtcbiAgICAgIHZhciBkZWZhdWx0RGF0YSA9IHR5cGVvZiBwYXJlbnRWYWwgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBwYXJlbnRWYWwuY2FsbCh2bSwgdm0pXG4gICAgICAgIDogcGFyZW50VmFsO1xuICAgICAgaWYgKGluc3RhbmNlRGF0YSkge1xuICAgICAgICByZXR1cm4gbWVyZ2VEYXRhKGluc3RhbmNlRGF0YSwgZGVmYXVsdERhdGEpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZGVmYXVsdERhdGFcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuc3RyYXRzLmRhdGEgPSBmdW5jdGlvbiAoXG4gIHBhcmVudFZhbCxcbiAgY2hpbGRWYWwsXG4gIHZtXG4pIHtcbiAgaWYgKCF2bSkge1xuICAgIGlmIChjaGlsZFZhbCAmJiB0eXBlb2YgY2hpbGRWYWwgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICAgJ1RoZSBcImRhdGFcIiBvcHRpb24gc2hvdWxkIGJlIGEgZnVuY3Rpb24gJyArXG4gICAgICAgICd0aGF0IHJldHVybnMgYSBwZXItaW5zdGFuY2UgdmFsdWUgaW4gY29tcG9uZW50ICcgK1xuICAgICAgICAnZGVmaW5pdGlvbnMuJyxcbiAgICAgICAgdm1cbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBwYXJlbnRWYWxcbiAgICB9XG4gICAgcmV0dXJuIG1lcmdlRGF0YU9yRm4ocGFyZW50VmFsLCBjaGlsZFZhbClcbiAgfVxuXG4gIHJldHVybiBtZXJnZURhdGFPckZuKHBhcmVudFZhbCwgY2hpbGRWYWwsIHZtKVxufTtcblxuLyoqXG4gKiBIb29rcyBhbmQgcHJvcHMgYXJlIG1lcmdlZCBhcyBhcnJheXMuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlSG9vayAoXG4gIHBhcmVudFZhbCxcbiAgY2hpbGRWYWxcbikge1xuICB2YXIgcmVzID0gY2hpbGRWYWxcbiAgICA/IHBhcmVudFZhbFxuICAgICAgPyBwYXJlbnRWYWwuY29uY2F0KGNoaWxkVmFsKVxuICAgICAgOiBBcnJheS5pc0FycmF5KGNoaWxkVmFsKVxuICAgICAgICA/IGNoaWxkVmFsXG4gICAgICAgIDogW2NoaWxkVmFsXVxuICAgIDogcGFyZW50VmFsO1xuICByZXR1cm4gcmVzXG4gICAgPyBkZWR1cGVIb29rcyhyZXMpXG4gICAgOiByZXNcbn1cblxuZnVuY3Rpb24gZGVkdXBlSG9va3MgKGhvb2tzKSB7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBob29rcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChyZXMuaW5kZXhPZihob29rc1tpXSkgPT09IC0xKSB7XG4gICAgICByZXMucHVzaChob29rc1tpXSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuTElGRUNZQ0xFX0hPT0tTLmZvckVhY2goZnVuY3Rpb24gKGhvb2spIHtcbiAgc3RyYXRzW2hvb2tdID0gbWVyZ2VIb29rO1xufSk7XG5cbi8qKlxuICogQXNzZXRzXG4gKlxuICogV2hlbiBhIHZtIGlzIHByZXNlbnQgKGluc3RhbmNlIGNyZWF0aW9uKSwgd2UgbmVlZCB0byBkb1xuICogYSB0aHJlZS13YXkgbWVyZ2UgYmV0d2VlbiBjb25zdHJ1Y3RvciBvcHRpb25zLCBpbnN0YW5jZVxuICogb3B0aW9ucyBhbmQgcGFyZW50IG9wdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlQXNzZXRzIChcbiAgcGFyZW50VmFsLFxuICBjaGlsZFZhbCxcbiAgdm0sXG4gIGtleVxuKSB7XG4gIHZhciByZXMgPSBPYmplY3QuY3JlYXRlKHBhcmVudFZhbCB8fCBudWxsKTtcbiAgaWYgKGNoaWxkVmFsKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBhc3NlcnRPYmplY3RUeXBlKGtleSwgY2hpbGRWYWwsIHZtKTtcbiAgICByZXR1cm4gZXh0ZW5kKHJlcywgY2hpbGRWYWwpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHJlc1xuICB9XG59XG5cbkFTU0VUX1RZUEVTLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgc3RyYXRzW3R5cGUgKyAncyddID0gbWVyZ2VBc3NldHM7XG59KTtcblxuLyoqXG4gKiBXYXRjaGVycy5cbiAqXG4gKiBXYXRjaGVycyBoYXNoZXMgc2hvdWxkIG5vdCBvdmVyd3JpdGUgb25lXG4gKiBhbm90aGVyLCBzbyB3ZSBtZXJnZSB0aGVtIGFzIGFycmF5cy5cbiAqL1xuc3RyYXRzLndhdGNoID0gZnVuY3Rpb24gKFxuICBwYXJlbnRWYWwsXG4gIGNoaWxkVmFsLFxuICB2bSxcbiAga2V5XG4pIHtcbiAgLy8gd29yayBhcm91bmQgRmlyZWZveCdzIE9iamVjdC5wcm90b3R5cGUud2F0Y2guLi5cbiAgaWYgKHBhcmVudFZhbCA9PT0gbmF0aXZlV2F0Y2gpIHsgcGFyZW50VmFsID0gdW5kZWZpbmVkOyB9XG4gIGlmIChjaGlsZFZhbCA9PT0gbmF0aXZlV2F0Y2gpIHsgY2hpbGRWYWwgPSB1bmRlZmluZWQ7IH1cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICghY2hpbGRWYWwpIHsgcmV0dXJuIE9iamVjdC5jcmVhdGUocGFyZW50VmFsIHx8IG51bGwpIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBhc3NlcnRPYmplY3RUeXBlKGtleSwgY2hpbGRWYWwsIHZtKTtcbiAgfVxuICBpZiAoIXBhcmVudFZhbCkgeyByZXR1cm4gY2hpbGRWYWwgfVxuICB2YXIgcmV0ID0ge307XG4gIGV4dGVuZChyZXQsIHBhcmVudFZhbCk7XG4gIGZvciAodmFyIGtleSQxIGluIGNoaWxkVmFsKSB7XG4gICAgdmFyIHBhcmVudCA9IHJldFtrZXkkMV07XG4gICAgdmFyIGNoaWxkID0gY2hpbGRWYWxba2V5JDFdO1xuICAgIGlmIChwYXJlbnQgJiYgIUFycmF5LmlzQXJyYXkocGFyZW50KSkge1xuICAgICAgcGFyZW50ID0gW3BhcmVudF07XG4gICAgfVxuICAgIHJldFtrZXkkMV0gPSBwYXJlbnRcbiAgICAgID8gcGFyZW50LmNvbmNhdChjaGlsZClcbiAgICAgIDogQXJyYXkuaXNBcnJheShjaGlsZCkgPyBjaGlsZCA6IFtjaGlsZF07XG4gIH1cbiAgcmV0dXJuIHJldFxufTtcblxuLyoqXG4gKiBPdGhlciBvYmplY3QgaGFzaGVzLlxuICovXG5zdHJhdHMucHJvcHMgPVxuc3RyYXRzLm1ldGhvZHMgPVxuc3RyYXRzLmluamVjdCA9XG5zdHJhdHMuY29tcHV0ZWQgPSBmdW5jdGlvbiAoXG4gIHBhcmVudFZhbCxcbiAgY2hpbGRWYWwsXG4gIHZtLFxuICBrZXlcbikge1xuICBpZiAoY2hpbGRWYWwgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGFzc2VydE9iamVjdFR5cGUoa2V5LCBjaGlsZFZhbCwgdm0pO1xuICB9XG4gIGlmICghcGFyZW50VmFsKSB7IHJldHVybi
118BjaGlsZFZhbCB9XG4gIHZhciByZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBleHRlbmQocmV0LCBwYXJlbnRWYWwpO1xuICBpZiAoY2hpbGRWYWwpIHsgZXh0ZW5kKHJldCwgY2hpbGRWYWwpOyB9XG4gIHJldHVybiByZXRcbn07XG5zdHJhdHMucHJvdmlkZSA9IG1lcmdlRGF0YU9yRm47XG5cbi8qKlxuICogRGVmYXVsdCBzdHJhdGVneS5cbiAqL1xudmFyIGRlZmF1bHRTdHJhdCA9IGZ1bmN0aW9uIChwYXJlbnRWYWwsIGNoaWxkVmFsKSB7XG4gIHJldHVybiBjaGlsZFZhbCA9PT0gdW5kZWZpbmVkXG4gICAgPyBwYXJlbnRWYWxcbiAgICA6IGNoaWxkVmFsXG59O1xuXG4vKipcbiAqIFZhbGlkYXRlIGNvbXBvbmVudCBuYW1lc1xuICovXG5mdW5jdGlvbiBjaGVja0NvbXBvbmVudHMgKG9wdGlvbnMpIHtcbiAgZm9yICh2YXIga2V5IGluIG9wdGlvbnMuY29tcG9uZW50cykge1xuICAgIHZhbGlkYXRlQ29tcG9uZW50TmFtZShrZXkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQ29tcG9uZW50TmFtZSAobmFtZSkge1xuICBpZiAoIW5ldyBSZWdFeHAoKFwiXlthLXpBLVpdW1xcXFwtXFxcXC4wLTlfXCIgKyAodW5pY29kZVJlZ0V4cC5zb3VyY2UpICsgXCJdKiRcIikpLnRlc3QobmFtZSkpIHtcbiAgICB3YXJuKFxuICAgICAgJ0ludmFsaWQgY29tcG9uZW50IG5hbWU6IFwiJyArIG5hbWUgKyAnXCIuIENvbXBvbmVudCBuYW1lcyAnICtcbiAgICAgICdzaG91bGQgY29uZm9ybSB0byB2YWxpZCBjdXN0b20gZWxlbWVudCBuYW1lIGluIGh0bWw1IHNwZWNpZmljYXRpb24uJ1xuICAgICk7XG4gIH1cbiAgaWYgKGlzQnVpbHRJblRhZyhuYW1lKSB8fCBjb25maWcuaXNSZXNlcnZlZFRhZyhuYW1lKSkge1xuICAgIHdhcm4oXG4gICAgICAnRG8gbm90IHVzZSBidWlsdC1pbiBvciByZXNlcnZlZCBIVE1MIGVsZW1lbnRzIGFzIGNvbXBvbmVudCAnICtcbiAgICAgICdpZDogJyArIG5hbWVcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogRW5zdXJlIGFsbCBwcm9wcyBvcHRpb24gc3ludGF4IGFyZSBub3JtYWxpemVkIGludG8gdGhlXG4gKiBPYmplY3QtYmFzZWQgZm9ybWF0LlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVQcm9wcyAob3B0aW9ucywgdm0pIHtcbiAgdmFyIHByb3BzID0gb3B0aW9ucy5wcm9wcztcbiAgaWYgKCFwcm9wcykgeyByZXR1cm4gfVxuICB2YXIgcmVzID0ge307XG4gIHZhciBpLCB2YWwsIG5hbWU7XG4gIGlmIChBcnJheS5pc0FycmF5KHByb3BzKSkge1xuICAgIGkgPSBwcm9wcy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgdmFsID0gcHJvcHNbaV07XG4gICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgbmFtZSA9IGNhbWVsaXplKHZhbCk7XG4gICAgICAgIHJlc1tuYW1lXSA9IHsgdHlwZTogbnVsbCB9O1xuICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHdhcm4oJ3Byb3BzIG11c3QgYmUgc3RyaW5ncyB3aGVuIHVzaW5nIGFycmF5IHN5bnRheC4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChwcm9wcykpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICAgIHZhbCA9IHByb3BzW2tleV07XG4gICAgICBuYW1lID0gY2FtZWxpemUoa2V5KTtcbiAgICAgIHJlc1tuYW1lXSA9IGlzUGxhaW5PYmplY3QodmFsKVxuICAgICAgICA/IHZhbFxuICAgICAgICA6IHsgdHlwZTogdmFsIH07XG4gICAgfVxuICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB3YXJuKFxuICAgICAgXCJJbnZhbGlkIHZhbHVlIGZvciBvcHRpb24gXFxcInByb3BzXFxcIjogZXhwZWN0ZWQgYW4gQXJyYXkgb3IgYW4gT2JqZWN0LCBcIiArXG4gICAgICBcImJ1dCBnb3QgXCIgKyAodG9SYXdUeXBlKHByb3BzKSkgKyBcIi5cIixcbiAgICAgIHZtXG4gICAgKTtcbiAgfVxuICBvcHRpb25zLnByb3BzID0gcmVzO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBhbGwgaW5qZWN0aW9ucyBpbnRvIE9iamVjdC1iYXNlZCBmb3JtYXRcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplSW5qZWN0IChvcHRpb25zLCB2bSkge1xuICB2YXIgaW5qZWN0ID0gb3B0aW9ucy5pbmplY3Q7XG4gIGlmICghaW5qZWN0KSB7IHJldHVybiB9XG4gIHZhciBub3JtYWxpemVkID0gb3B0aW9ucy5pbmplY3QgPSB7fTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoaW5qZWN0KSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5qZWN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBub3JtYWxpemVkW2luamVjdFtpXV0gPSB7IGZyb206IGluamVjdFtpXSB9O1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGluamVjdCkpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gaW5qZWN0KSB7XG4gICAgICB2Y
118XIgdmFsID0gaW5qZWN0W2tleV07XG4gICAgICBub3JtYWxpemVkW2tleV0gPSBpc1BsYWluT2JqZWN0KHZhbClcbiAgICAgICAgPyBleHRlbmQoeyBmcm9tOiBrZXkgfSwgdmFsKVxuICAgICAgICA6IHsgZnJvbTogdmFsIH07XG4gICAgfVxuICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB3YXJuKFxuICAgICAgXCJJbnZhbGlkIHZhbHVlIGZvciBvcHRpb24gXFxcImluamVjdFxcXCI6IGV4cGVjdGVkIGFuIEFycmF5IG9yIGFuIE9iamVjdCwgXCIgK1xuICAgICAgXCJidXQgZ290IFwiICsgKHRvUmF3VHlwZShpbmplY3QpKSArIFwiLlwiLFxuICAgICAgdm1cbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogTm9ybWFsaXplIHJhdyBmdW5jdGlvbiBkaXJlY3RpdmVzIGludG8gb2JqZWN0IGZvcm1hdC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRGlyZWN0aXZlcyAob3B0aW9ucykge1xuICB2YXIgZGlycyA9IG9wdGlvbnMuZGlyZWN0aXZlcztcbiAgaWYgKGRpcnMpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gZGlycykge1xuICAgICAgdmFyIGRlZiQkMSA9IGRpcnNba2V5XTtcbiAgICAgIGlmICh0eXBlb2YgZGVmJCQxID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGRpcnNba2V5XSA9IHsgYmluZDogZGVmJCQxLCB1cGRhdGU6IGRlZiQkMSB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRPYmplY3RUeXBlIChuYW1lLCB2YWx1ZSwgdm0pIHtcbiAgaWYgKCFpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgIHdhcm4oXG4gICAgICBcIkludmFsaWQgdmFsdWUgZm9yIG9wdGlvbiBcXFwiXCIgKyBuYW1lICsgXCJcXFwiOiBleHBlY3RlZCBhbiBPYmplY3QsIFwiICtcbiAgICAgIFwiYnV0IGdvdCBcIiArICh0b1Jhd1R5cGUodmFsdWUpKSArIFwiLlwiLFxuICAgICAgdm1cbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogTWVyZ2UgdHdvIG9wdGlvbiBvYmplY3RzIGludG8gYSBuZXcgb25lLlxuICogQ29yZSB1dGlsaXR5IHVzZWQgaW4gYm90aCBpbnN0YW50aWF0aW9uIGFuZCBpbmhlcml0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VPcHRpb25zIChcbiAgcGFyZW50LFxuICBjaGlsZCxcbiAgdm1cbikge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGNoZWNrQ29tcG9uZW50cyhjaGlsZCk7XG4gIH1cblxuICBpZiAodHlwZW9mIGNoaWxkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2hpbGQgPSBjaGlsZC5vcHRpb25zO1xuICB9XG5cbiAgbm9ybWFsaXplUHJvcHMoY2hpbGQsIHZtKTtcbiAgbm9ybWFsaXplSW5qZWN0KGNoaWxkLCB2bSk7XG4gIG5vcm1hbGl6ZURpcmVjdGl2ZXMoY2hpbGQpO1xuXG4gIC8vIEFwcGx5IGV4dGVuZHMgYW5kIG1peGlucyBvbiB0aGUgY2hpbGQgb3B0aW9ucyxcbiAgLy8gYnV0IG9ubHkgaWYgaXQgaXMgYSByYXcgb3B0aW9ucyBvYmplY3QgdGhhdCBpc24ndFxuICAvLyB0aGUgcmVzdWx0IG9mIGFub3RoZXIgbWVyZ2VPcHRpb25zIGNhbGwuXG4gIC8vIE9ubHkgbWVyZ2VkIG9wdGlvbnMgaGFzIHRoZSBfYmFzZSBwcm9wZXJ0eS5cbiAgaWYgKCFjaGlsZC5fYmFzZSkge1xuICAgIGlmIChjaGlsZC5leHRlbmRzKSB7XG4gICAgICBwYXJlbnQgPSBtZXJnZU9wdGlvbnMocGFyZW50LCBjaGlsZC5leHRlbmRzLCB2bSk7XG4gICAgfVxuICAgIGlmIChjaGlsZC5taXhpbnMpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gY2hpbGQubWl4aW5zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBwYXJlbnQgPSBtZXJnZU9wdGlvbnMocGFyZW50LCBjaGlsZC5taXhpbnNbaV0sIHZtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgb3B0aW9ucyA9IHt9O1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBwYXJlbnQpIHtcbiAgICBtZXJnZUZpZWxkKGtleSk7XG4gIH1cbiAgZm9yIChrZXkgaW4gY2hpbGQpIHtcbiAgICBpZiAoIWhhc093bihwYXJlbnQsIGtleSkpIHtcbiAgICAgIG1lcmdlRmllbGQoa2V5KTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gbWVyZ2VGaWVsZCAoa2V5KSB7XG4gICAgdmFyIHN0cmF0ID0gc3RyYXRzW2tleV0gfHwgZGVmYXVsdFN0cmF0O1xuICAgIG9wdGlvbnNba2V5XSA9IHN0cmF0KHBhcmVudFtrZXldLCBjaGlsZFtrZXldLCB2bSwga2V5KTtcbiAgfVxuICByZXR1cm4gb3B0aW9uc1xufVxuXG4vKipcbiAqIFJlc29sdmUgYW4gYXNzZXQuXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYmVjYXVzZSBjaGlsZCBpbnN0YW5jZXMgbmVlZCBhY2Nlc3NcbiAqIHRvIGFzc2V0cyBkZWZpbmVkIGluIGl0cyBhbmNlc3RvciBjaGFpbi5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUFzc2V0IChcbiAgb3B0aW9ucyxcbiAgdHlwZSxcbiAgaWQsXG4gIHdhcm5NaXNzaW5nXG4pIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICh0eXBlb2YgaWQgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIGFzc2V0cyA9IG9wdGlvbnNbdHlwZV07XG4gIC8vIGNoZWNrIGxvY2FsIHJlZ2lzdHJhdGlvbiB2YXJpYXRpb25zIGZpcnN0XG4gIGlmIChoYXNPd24oYXNzZXRzLCBpZCkpIHsgcmV0dXJuIGFzc2V0c1tpZF0gfVxuICB2YXIgY2FtZWxpemVkSWQgPSBjYW1lbGl6ZShpZCk7XG4gIGlmIChoYXNPd24oYXNzZXRzLCBjYW1lbGl6ZWRJZCkpIHsgcmV0dXJuIGFzc2V0c1tjYW1lbGl6ZWRJZF0gfVxuICB2YXIgUGFzY2FsQ2FzZUlkID0gY2FwaXRhbGl6ZShjYW1lbGl6ZWRJZCk7XG4gIGlmIChoYXNPd24oYXNzZXRzLCBQYXNjYWxDYXNlSWQpKSB7IHJldHVybiBhc3NldHNbUGFzY2FsQ2FzZUlkXSB9XG4gIC8vIGZhbGxiYWNrIHRvIHByb3RvdHlwZSBjaGFpblxuICB2YXIgcmVzID0gYXNzZXRzW2lkXSB8fCBhc3NldHNbY2FtZWxpemVkSWRdIHx8IGFzc2V0c1tQYXNjYWxDYXNlSWRdO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuTWlzc2luZyAmJiAhcmVzKSB7XG4gICAgd2FybihcbiAgICAgICdGYWlsZWQgdG8gcmVzb2x2ZSAnICsgdHlwZS5zbGljZSgwLCAtMSkgKyAnOiAnICsgaWQsXG4gICAgICBvcHRpb25zXG4gICAgKTtcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbi8qICAqL1xuXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wIChcbiAga2V5LFxuICBwcm9wT3B0aW9ucyxcbiAgcHJvcHNEYXRhLFxuICB2bVxuKSB7XG4gIHZhciBwcm9wID0gcHJvcE9wdGlvbnNba2V5XTtcbiAgdmFyIGFic2VudCA9ICFoYXNPd24ocHJvcHNEYXRhLCBrZXkpO1xuICB2YXIgdmFsdWUgPSBwcm9wc0RhdGFba2V5XTtcbiAgLy8gYm9vbGVhbiBjYXN0aW5nXG4gIHZhciBib29sZWFuSW5kZXggPSBnZXRUeXBlSW5kZXgoQm9vbGVhbiwgcHJvcC50eXBlKTtcbiAgaWYgKGJvb2xlYW5JbmRleCA+IC0xKSB7XG4gICAgaWYgKGFic2VudCAmJiAhaGFzT3duKHByb3AsICdkZWZhdWx0JykpIHtcbiAgICAgIHZhbHVlID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09IGh5cGhlbmF0ZShrZXkpKSB7XG4gICAgICAvLyBvbmx5IGNhc3QgZW1wdHkgc3RyaW5nIC8gc2FtZSBuYW1lIHRvIGJvb2xlYW4gaWZcbiAgICAgIC8vIGJvb2xlYW4gaGFzIGhpZ2hlciBwcmlvcml0eVxuICAgICAgdmFyIHN0cmluZ0luZGV4ID0gZ2V0VHlwZUluZGV4KFN0cmluZywgcHJvcC50eXBlKTtcbiAgICAgIGlmIChzdHJpbmdJbmRleCA8IDAgfHwgYm9vbGVhbkluZGV4IDwgc3RyaW5nSW5kZXgpIHtcbiAgICAgICAgdmFsdWUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBjaGVjayBkZWZhdWx0IHZhbHVlXG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmFsdWUgPSBnZXRQcm9wRGVmYXVsdFZhbHVlKHZtLCBwcm9wLCBrZXkpO1xuICAgIC8vIHNpbmNlIHRoZSBkZWZhdWx0IHZhbHVlIGlzIGEgZnJlc2ggY29weSxcbiAgICAvLyBtYWtlIHN1cmUgdG8gb2JzZXJ2ZSBpdC5cbiAgICB2YXIgcHJldlNob3VsZE9ic2VydmUgPSBzaG91bGRPYnNlcnZlO1xuICAgIHRvZ2dsZU9ic2VydmluZyh0cnVlKTtcbiAgICBvYnNlcnZlKHZhbHVlKTtcbiAgICB0b2dnbGVPYnNlcnZpbmcocHJldlNob3VsZE9ic2VydmUpO1xuICB9XG4gIGlmIChcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgLy8gc2tpcCB2YWxpZGF0aW9uIGZvciB3ZWV4IHJlY3ljbGUtbGlzdCBjaGlsZCBjb21wb25lbnQgcHJv
118cHNcbiAgICAhKGZhbHNlKVxuICApIHtcbiAgICBhc3NlcnRQcm9wKHByb3AsIGtleSwgdmFsdWUsIHZtLCBhYnNlbnQpO1xuICB9XG4gIHJldHVybiB2YWx1ZVxufVxuXG4vKipcbiAqIEdldCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBhIHByb3AuXG4gKi9cbmZ1bmN0aW9uIGdldFByb3BEZWZhdWx0VmFsdWUgKHZtLCBwcm9wLCBrZXkpIHtcbiAgLy8gbm8gZGVmYXVsdCwgcmV0dXJuIHVuZGVmaW5lZFxuICBpZiAoIWhhc093bihwcm9wLCAnZGVmYXVsdCcpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG4gIHZhciBkZWYgPSBwcm9wLmRlZmF1bHQ7XG4gIC8vIHdhcm4gYWdhaW5zdCBub24tZmFjdG9yeSBkZWZhdWx0cyBmb3IgT2JqZWN0ICYgQXJyYXlcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgaXNPYmplY3QoZGVmKSkge1xuICAgIHdhcm4oXG4gICAgICAnSW52YWxpZCBkZWZhdWx0IHZhbHVlIGZvciBwcm9wIFwiJyArIGtleSArICdcIjogJyArXG4gICAgICAnUHJvcHMgd2l0aCB0eXBlIE9iamVjdC9BcnJheSBtdXN0IHVzZSBhIGZhY3RvcnkgZnVuY3Rpb24gJyArXG4gICAgICAndG8gcmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlLicsXG4gICAgICB2bVxuICAgICk7XG4gIH1cbiAgLy8gdGhlIHJhdyBwcm9wIHZhbHVlIHdhcyBhbHNvIHVuZGVmaW5lZCBmcm9tIHByZXZpb3VzIHJlbmRlcixcbiAgLy8gcmV0dXJuIHByZXZpb3VzIGRlZmF1bHQgdmFsdWUgdG8gYXZvaWQgdW5uZWNlc3Nhcnkgd2F0Y2hlciB0cmlnZ2VyXG4gIGlmICh2bSAmJiB2bS4kb3B0aW9ucy5wcm9wc0RhdGEgJiZcbiAgICB2bS4kb3B0aW9ucy5wcm9wc0RhdGFba2V5XSA9PT0gdW5kZWZpbmVkICYmXG4gICAgdm0uX3Byb3BzW2tleV0gIT09IHVuZGVmaW5lZFxuICApIHtcbiAgICByZXR1cm4gdm0uX3Byb3BzW2tleV1cbiAgfVxuICAvLyBjYWxsIGZhY3RvcnkgZnVuY3Rpb24gZm9yIG5vbi1GdW5jdGlvbiB0eXBlc1xuICAvLyBhIHZhbHVlIGlzIEZ1bmN0aW9uIGlmIGl0cyBwcm90b3R5cGUgaXMgZnVuY3Rpb24gZXZlbiBhY3Jvc3MgZGlmZmVyZW50IGV4ZWN1dGlvbiBjb250ZXh0XG4gIHJldHVybiB0eXBlb2YgZGVmID09PSAnZnVuY3Rpb24nICYmIGdldFR5cGUocHJvcC50eXBlKSAhPT0gJ0Z1bmN0aW9uJ1xuICAgID8gZGVmLmNhbGwodm0pXG4gICAgOiBkZWZcbn1cblxuLyoqXG4gKiBBc3NlcnQgd2hldGhlciBhIHByb3AgaXMgdmFsaWQuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydFByb3AgKFxuICBwcm9wLFxuICBuYW1lLFxuICB2YWx1ZSxcbiAgdm0sXG4gIGFic2VudFxuKSB7XG4gIGlmIChwcm9wLnJlcXVpcmVkICYmIGFic2VudCkge1xuICAgIHdhcm4oXG4gICAgICAnTWlzc2luZyByZXF1aXJlZCBwcm9wOiBcIicgKyBuYW1lICsgJ1wiJyxcbiAgICAgIHZtXG4gICAgKTtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAodmFsdWUgPT0gbnVsbCAmJiAhcHJvcC5yZXF1aXJlZCkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciB0eXBlID0gcHJvcC50eXBlO1xuICB2YXIgdmFsaWQgPSAhdHlwZSB8fCB0eXBlID09PSB0cnVlO1xuICB2YXIgZXhwZWN0ZWRUeXBlcyA9IFtdO1xuICBpZiAodHlwZSkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh0eXBlKSkge1xuICAgICAgdHlwZSA9IFt0eXBlXTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlLmxlbmd0aCAmJiAhdmFsaWQ7IGkrKykge1xuICAgICAgdmFyIGFzc2VydGVkVHlwZSA9IGFzc2VydFR5cGUodmFsdWUsIHR5cGVbaV0sIHZtKTtcbiAgICAgIGV4cGVjdGVkVHlwZXMucHVzaChhc3NlcnRlZFR5cGUuZXhwZWN0ZWRUeXBlIHx8ICcnKTtcbiAgICAgIHZhbGlkID0gYXNzZXJ0ZWRUeXBlLnZhbGlkO1xuICAgIH1cbiAgfVxuXG4gIHZhciBoYXZlRXhwZWN0ZWRUeXBlcyA9IGV4cGVjdGVkVHlwZXMuc29tZShmdW5jdGlvbiAodCkgeyByZXR1cm4gdDsgfSk7XG4gIGlmICghdmFsaWQgJiYgaGF2ZUV4cGVjdGVkVHlwZXMpIHtcbiAgICB3YXJuKFxuICAgICAgZ2V0SW52YWxpZFR5cGVNZXNzYWdlKG5hbWUsIHZhbHVlLCBleHBlY3RlZFR5cGVzKSxcbiAgICAgIHZtXG4gICAgKTtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgdmFsaWRhdG9yID0gcHJvcC52YWxpZGF0b3I7XG4gIGlmICh2YWxpZGF0b3IpIHtcbiAgICBpZiAoIXZhbGlkYXRvcih2YWx1ZSkpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgICdJbnZhbGlkIHByb3A6IGN1c3RvbSB2YWxpZGF0b3IgY2hlY2sgZmFpbGVkIGZvciBwcm9wIFwiJyArIG5hbWUgKyAnXCIuJyxcbiAgICAgICAgdm1cbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbnZhciBzaW1wbGVDaGVja1JFID0gL14oU3RyaW5nfE51bWJlcnxCb29sZWFufEZ1bmN0aW9ufFN5bWJvbHxCaWdJbnQpJC87XG5cbmZ1bmN0aW9uIGFzc2VydFR5cGUgKHZhbHVlLCB0eXBlLCB2bSkge1xuICB2YXIgdmFsaWQ7XG4gIHZhciBleHBlY3RlZFR5cGUgPSBnZXRUeXBlKHR5cGUpO1xuICBpZiAoc2ltcGxlQ2hlY2tSRS50ZXN0KGV4cGVjdGVkVHlwZSkpIHtcbiAgICB2YXIgdCA9IHR5cGVvZiB2YWx1ZTtcbiAgICB2YWxpZCA9IHQgPT09IGV4cGVjdGVkVHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgIC8vIGZvciBwcmltaXRpdmUgd3JhcHBlciBvYmplY3RzXG4gICAgaWYgKCF2YWxpZCAmJiB0ID09PSAnb2JqZWN0Jykge1xuICAgICAgdmFsaWQgPSB2YWx1ZSBpbnN0YW5jZW9mIHR5cGU7XG4gICAgfVxuICB9IGVsc2UgaWYgKGV4cGVjdGVkVHlwZSA9PT0gJ09iamVjdCcpIHtcbiAgICB2YWxpZCA9IGlzUGxhaW5PYmplY3QodmFsdWUpO1xuICB9IGVsc2UgaWYgKGV4cGVjdGVkVHlwZSA9PT0gJ0FycmF5Jykge1xuICAgIHZhbGlkID0gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhbGlkID0gdmFsdWUgaW5zdGFuY2VvZiB0eXBlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHdhcm4oJ0ludmFsaWQgcHJvcCB0eXBlOiBcIicgKyBTdHJpbmcodHlwZSkgKyAnXCIgaXMgbm90IGEgY29uc3RydWN0b3InLCB2bSk7XG4gICAgICB2YWxpZCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHZhbGlkOiB2YWxpZCxcbiAgICBleHBlY3RlZFR5cGU6IGV4cGVjdGVkVHlwZVxuICB9XG59XG5cbnZhciBmdW5jdGlvblR5cGVDaGVja1JFID0gL15cXHMqZnVuY3Rpb24gKFxcdyspLztcblxuLyoqXG4gKiBVc2UgZnVuY3Rpb24gc3RyaW5nIG5hbWUgdG8gY2hlY2sgYnVpbHQtaW4gdHlwZXMsXG4gKiBiZWNhdXNlIGEgc2ltcGxlIGVxdWFsaXR5IGNoZWNrIHdpbGwgZmFpbCB3aGVuIHJ1bm5pbmdcbiAqIGFjcm9zcyBkaWZmZXJlbnQgdm1zIC8gaWZyYW1lcy5cbiAqL1xuZnVuY3Rpb24gZ2V0VHlwZSAoZm4pIHtcbiAgdmFyIG1hdGNoID0gZm4gJiYgZm4udG9TdHJpbmc
118oKS5tYXRjaChmdW5jdGlvblR5cGVDaGVja1JFKTtcbiAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0gOiAnJ1xufVxuXG5mdW5jdGlvbiBpc1NhbWVUeXBlIChhLCBiKSB7XG4gIHJldHVybiBnZXRUeXBlKGEpID09PSBnZXRUeXBlKGIpXG59XG5cbmZ1bmN0aW9uIGdldFR5cGVJbmRleCAodHlwZSwgZXhwZWN0ZWRUeXBlcykge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoZXhwZWN0ZWRUeXBlcykpIHtcbiAgICByZXR1cm4gaXNTYW1lVHlwZShleHBlY3RlZFR5cGVzLCB0eXBlKSA/IDAgOiAtMVxuICB9XG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBleHBlY3RlZFR5cGVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaWYgKGlzU2FtZVR5cGUoZXhwZWN0ZWRUeXBlc1tpXSwgdHlwZSkpIHtcbiAgICAgIHJldHVybiBpXG4gICAgfVxuICB9XG4gIHJldHVybiAtMVxufVxuXG5mdW5jdGlvbiBnZXRJbnZhbGlkVHlwZU1lc3NhZ2UgKG5hbWUsIHZhbHVlLCBleHBlY3RlZFR5cGVzKSB7XG4gIHZhciBtZXNzYWdlID0gXCJJbnZhbGlkIHByb3A6IHR5cGUgY2hlY2sgZmFpbGVkIGZvciBwcm9wIFxcXCJcIiArIG5hbWUgKyBcIlxcXCIuXCIgK1xuICAgIFwiIEV4cGVjdGVkIFwiICsgKGV4cGVjdGVkVHlwZXMubWFwKGNhcGl0YWxpemUpLmpvaW4oJywgJykpO1xuICB2YXIgZXhwZWN0ZWRUeXBlID0gZXhwZWN0ZWRUeXBlc1swXTtcbiAgdmFyIHJlY2VpdmVkVHlwZSA9IHRvUmF3VHlwZSh2YWx1ZSk7XG4gIC8vIGNoZWNrIGlmIHdlIG5lZWQgdG8gc3BlY2lmeSBleHBlY3RlZCB2YWx1ZVxuICBpZiAoXG4gICAgZXhwZWN0ZWRUeXBlcy5sZW5ndGggPT09IDEgJiZcbiAgICBpc0V4cGxpY2FibGUoZXhwZWN0ZWRUeXBlKSAmJlxuICAgIGlzRXhwbGljYWJsZSh0eXBlb2YgdmFsdWUpICYmXG4gICAgIWlzQm9vbGVhbihleHBlY3RlZFR5cGUsIHJlY2VpdmVkVHlwZSlcbiAgKSB7XG4gICAgbWVzc2FnZSArPSBcIiB3aXRoIHZhbHVlIFwiICsgKHN0eWxlVmFsdWUodmFsdWUsIGV4cGVjdGVkVHlwZSkpO1xuICB9XG4gIG1lc3NhZ2UgKz0gXCIsIGdvdCBcIiArIHJlY2VpdmVkVHlwZSArIFwiIFwiO1xuICAvLyBjaGVjayBpZiB3ZSBuZWVkIHRvIHNwZWNpZnkgcmVjZWl2ZWQgdmFsdWVcbiAgaWYgKGlzRXhwbGljYWJsZShyZWNlaXZlZFR5cGUpKSB7XG4gICAgbWVzc2FnZSArPSBcIndpdGggdmFsdWUgXCIgKyAoc3R5bGVWYWx1ZSh2YWx1ZSwgcmVjZWl2ZWRUeXBlKSkgKyBcIi5cIjtcbiAgfVxuICByZXR1cm4gbWVzc2FnZVxufVxuXG5mdW5jdGlvbiBzdHlsZVZhbHVlICh2YWx1ZSwgdHlwZSkge1xuICBpZiAodHlwZSA9PT0gJ1N0cmluZycpIHtcbiAgICByZXR1cm4gKFwiXFxcIlwiICsgdmFsdWUgKyBcIlxcXCJcIilcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnTnVtYmVyJykge1xuICAgIHJldHVybiAoXCJcIiArIChOdW1iZXIodmFsdWUpKSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKFwiXCIgKyB2YWx1ZSlcbiAgfVxufVxuXG52YXIgRVhQTElDQUJMRV9UWVBFUyA9IFsnc3RyaW5nJywgJ251bWJlcicsICdib29sZWFuJ107XG5mdW5jdGlvbiBpc0V4cGxpY2FibGUgKHZhbHVlKSB7XG4gIHJldHVybiBFWFBMSUNBQkxFX1RZUEVTLnNvbWUoZnVuY3Rpb24gKGVsZW0pIHsgcmV0dXJuIHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09IGVsZW07IH0pXG59XG5cbmZ1bmN0aW9uIGlzQm9vbGVhbiAoKSB7XG4gIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgcmV0dXJuIGFyZ3Muc29tZShmdW5jdGlvbiAoZWxlbSkgeyByZXR1cm4gZWxlbS50b0xvd2VyQ2FzZSgpID09PSAnYm9vbGVhbic7IH0pXG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBoYW5kbGVFcnJvciAoZXJyLCB2bSwgaW5mbykge1xuICAvLyBEZWFjdGl2YXRlIGRlcHMgdHJhY2tpbmcgd2hpbGUgcHJvY2Vzc2luZyBlcnJvciBoYW5kbGVyIHRvIGF2b2lkIHBvc3NpYmxlIGluZmluaXRlIHJlbmRlcmluZy5cbiAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVleC9pc3N1ZXMvMTUwNVxuICBwdXNoVGFyZ2V0KCk7XG4gIHRyeSB7XG4gICAgaWYgKHZtKSB7XG4gICAgICB2Y
118XIgY3VyID0gdm07XG4gICAgICB3aGlsZSAoKGN1ciA9IGN1ci4kcGFyZW50KSkge1xuICAgICAgICB2YXIgaG9va3MgPSBjdXIuJG9wdGlvbnMuZXJyb3JDYXB0dXJlZDtcbiAgICAgICAgaWYgKGhvb2tzKSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBob29rcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgdmFyIGNhcHR1cmUgPSBob29rc1tpXS5jYWxsKGN1ciwgZXJyLCB2bSwgaW5mbykgPT09IGZhbHNlO1xuICAgICAgICAgICAgICBpZiAoY2FwdHVyZSkgeyByZXR1cm4gfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBnbG9iYWxIYW5kbGVFcnJvcihlLCBjdXIsICdlcnJvckNhcHR1cmVkIGhvb2snKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZ2xvYmFsSGFuZGxlRXJyb3IoZXJyLCB2bSwgaW5mbyk7XG4gIH0gZmluYWxseSB7XG4gICAgcG9wVGFyZ2V0KCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW52b2tlV2l0aEVycm9ySGFuZGxpbmcgKFxuICBoYW5kbGVyLFxuICBjb250ZXh0LFxuICBhcmdzLFxuICB2bSxcbiAgaW5mb1xuKSB7XG4gIHZhciByZXM7XG4gIHRyeSB7XG4gICAgcmVzID0gYXJncyA/IGhhbmRsZXIuYXBwbHkoY29udGV4dCwgYXJncykgOiBoYW5kbGVyLmNhbGwoY29udGV4dCk7XG4gICAgaWYgKHJlcyAmJiAhcmVzLl9pc1Z1ZSAmJiBpc1Byb21pc2UocmVzKSAmJiAhcmVzLl9oYW5kbGVkKSB7XG4gICAgICByZXMuY2F0Y2goZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGhhbmRsZUVycm9yKGUsIHZtLCBpbmZvICsgXCIgKFByb21pc2UvYXN5bmMpXCIpOyB9KTtcbiAgICAgIC8vIGlzc3VlICM5NTExXG4gICAgICAvLyBhdm9pZCBjYXRjaCB0cmlnZ2VyaW5nIG11bHRpcGxlIHRpbWVzIHdoZW4gbmVzdGVkIGNhbGxzXG4gICAgICByZXMuX2hhbmRsZWQgPSB0cnVlO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGhhbmRsZUVycm9yKGUsIHZtLCBpbmZvKTtcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGdsb2JhbEhhbmRsZUVycm9yIChlcnIsIHZtLCBpbmZvKSB7XG4gIGlmIChjb25maWcuZXJyb3JIYW5kbGVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBjb25maWcuZXJyb3JIYW5kbGVyLmNhbGwobnVsbCwgZXJyLCB2bSwgaW5mbylcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBpZiB0aGUgdXNlciBpbnRlbnRpb25hbGx5IHRocm93cyB0aGUgb3JpZ2luYWwgZXJyb3IgaW4gdGhlIGhhbmRsZXIsXG4gICAgICAvLyBkbyBub3QgbG9nIGl0IHR3aWNlXG4gICAgICBpZiAoZSAhPT0gZXJyKSB7XG4gICAgICAgIGxvZ0Vycm9yKGUsIG51bGwsICdjb25maWcuZXJyb3JIYW5kbGVyJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGxvZ0Vycm9yKGVyciwgdm0sIGluZm8pO1xufVxuXG5mdW5jdGlvbiBsb2dFcnJvciAoZXJyLCB2bSwgaW5mbykge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHdhcm4oKFwiRXJyb3IgaW4gXCIgKyBpbmZvICsgXCI6IFxcXCJcIiArIChlcnIudG9TdHJpbmcoKSkgKyBcIlxcXCJcIiksIHZtKTtcbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAoKGluQnJvd3NlciB8fCBpbldlZXgpICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBlcnJcbiAgfVxufVxuXG4vKiAgKi9cblxudmFyIGlzVXNpbmdNaWNyb1Rhc2sgPSBmYWxzZTtcblxudmFyIGNhbGxiYWNrcyA9IFtdO1xudmFyIHBlbmRpbmcgPSBmYWxzZTtcblxuZnVuY3Rpb24gZmx1c2hDYWxsYmFja3MgKCkge1xuICBwZW5kaW5nID0gZmFsc2U7XG4gIHZhciBjb3BpZXMgPSBjYWxsYmFja3Muc2xpY2UoMCk7XG4gIGNhbGxiYWNrcy5sZW5ndGggPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGNvcGllcy5sZW5ndGg7IGkrKykge1xuICAgIGNvcGllc1tpXSgpO1xuICB9XG59XG5cbi8vIEhlcmUgd2UgaGF2ZSBhc3luYyBkZWZlcnJpbmcgd3JhcHBlcnMgdXN
118pbmcgbWljcm90YXNrcy5cbi8vIEluIDIuNSB3ZSB1c2VkIChtYWNybykgdGFza3MgKGluIGNvbWJpbmF0aW9uIHdpdGggbWljcm90YXNrcykuXG4vLyBIb3dldmVyLCBpdCBoYXMgc3VidGxlIHByb2JsZW1zIHdoZW4gc3RhdGUgaXMgY2hhbmdlZCByaWdodCBiZWZvcmUgcmVwYWludFxuLy8gKGUuZy4gIzY4MTMsIG91dC1pbiB0cmFuc2l0aW9ucykuXG4vLyBBbHNvLCB1c2luZyAobWFjcm8pIHRhc2tzIGluIGV2ZW50IGhhbmRsZXIgd291bGQgY2F1c2Ugc29tZSB3ZWlyZCBiZWhhdmlvcnNcbi8vIHRoYXQgY2Fubm90IGJlIGNpcmN1bXZlbnRlZCAoZS5nLiAjNzEwOSwgIzcxNTMsICM3NTQ2LCAjNzgzNCwgIzgxMDkpLlxuLy8gU28gd2Ugbm93IHVzZSBtaWNyb3Rhc2tzIGV2ZXJ5d2hlcmUsIGFnYWluLlxuLy8gQSBtYWpvciBkcmF3YmFjayBvZiB0aGlzIHRyYWRlb2ZmIGlzIHRoYXQgdGhlcmUgYXJlIHNvbWUgc2NlbmFyaW9zXG4vLyB3aGVyZSBtaWNyb3Rhc2tzIGhhdmUgdG9vIGhpZ2ggYSBwcmlvcml0eSBhbmQgZmlyZSBpbiBiZXR3ZWVuIHN1cHBvc2VkbHlcbi8vIHNlcXVlbnRpYWwgZXZlbnRzIChlLmcuICM0NTIxLCAjNjY5MCwgd2hpY2ggaGF2ZSB3b3JrYXJvdW5kcylcbi8vIG9yIGV2ZW4gYmV0d2VlbiBidWJibGluZyBvZiB0aGUgc2FtZSBldmVudCAoIzY1NjYpLlxudmFyIHRpbWVyRnVuYztcblxuLy8gVGhlIG5leHRUaWNrIGJlaGF2aW9yIGxldmVyYWdlcyB0aGUgbWljcm90YXNrIHF1ZXVlLCB3aGljaCBjYW4gYmUgYWNjZXNzZWRcbi8vIHZpYSBlaXRoZXIgbmF0aXZlIFByb21pc2UudGhlbiBvciBNdXRhdGlvbk9ic2VydmVyLlxuLy8gTXV0YXRpb25PYnNlcnZlciBoYXMgd2lkZXIgc3VwcG9ydCwgaG93ZXZlciBpdCBpcyBzZXJpb3VzbHkgYnVnZ2VkIGluXG4vLyBVSVdlYlZpZXcgaW4gaU9TID49IDkuMy4zIHdoZW4gdHJpZ2dlcmVkIGluIHRvdWNoIGV2ZW50IGhhbmRsZXJzLiBJdFxuLy8gY29tcGxldGVseSBzdG9wcyB3b3JraW5nIGFmdGVyIHRyaWdnZXJpbmcgYSBmZXcgdGltZXMuLi4gc28sIGlmIG5hdGl2ZVxuLy8gUHJvbWlzZSBpcyBhdmFpbGFibGUsIHdlIHdpbGwgdXNlIGl0OlxuLyogaXN0YW5idWwgaWdub3JlIG5leHQsICRmbG93LWRpc2FibGUtbGluZSAqL1xuaWYgKHR5cGVvZiBQcm9taXNlICE9PSAndW5kZWZpbmVkJyAmJiBpc05hdGl2ZShQcm9taXNlKSkge1xuICB2YXIgcCA9IFByb21pc2UucmVzb2x2ZSgpO1xuICB0aW1lckZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcC50aGVuKGZsdXNoQ2FsbGJhY2tzKTtcbiAgICAvLyBJbiBwcm9ibGVtYXRpYyBVSVdlYlZpZXdzLCBQcm9taXNlLnRoZW4gZG9lc24ndCBjb21wbGV0ZWx5IGJyZWFrLCBidXRcbiAgICAvLyBpdCBjYW4gZ2V0IHN0dWNrIGluIGEgd2VpcmQgc3RhdGUgd2hlcmUgY2FsbGJhY2tzIGFyZSBwdXNoZWQgaW50byB0aGVcbiAgICAvLyBtaWNyb3Rhc2sgcXVldWUgYnV0IHRoZSBxdWV1ZSBpc24ndCBiZWluZyBmbHVzaGVkLCB1bnRpbCB0aGUgYnJvd3NlclxuICAgIC8vIG5lZWRzIHRvIGRvIHNvbWUgb3RoZXIgd29yaywgZS5nLiBoYW5kbGUgYSB0aW1lci4gVGhlcmVmb3JlIHdlIGNhblxuICAgIC8vIFwiZm9yY2VcIiB0aGUgbWljcm90YXNrIHF1ZXVlIHRvIGJlIGZsdXNoZWQgYnkgYWRkaW5nIGFuIGVtcHR5IHRpbWVyLlxuICAgIGlmIChpc0lPUykgeyBzZXRUaW1lb3V0KG5vb3ApOyB9XG4gIH07XG4gIGlzVXNpbmdNaWNyb1Rhc2sgPSB0cnVlO1xufSBlbHNlIGlmICghaXNJRSAmJiB0eXBlb2YgTXV0YXRpb25PYnNlcnZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgKFxuICBpc05hdGl2ZShNdXRhdGlvbk9ic2VydmVyKSB8fFxuICAvLyBQaGFudG9tSlMgYW5kIGlPUyA3LnhcbiAgTXV0YXRpb25PYnNlcnZlci50b1N0cmluZygpID09PSAnW29iamVjdCBNdXRhdGlvbk9ic2VydmVyQ29uc3RydWN0b3JdJ1xuKSkge1xuICAvLyBVc2UgTXV0YXRpb25PYnNlcnZlciB3aGVyZSBuYXRpdmUgUHJvbWlzZSBpcyBub3QgYXZhaWxhYmxlLFxuICAvLyBlLmcuIFBoYW50b21KUywgaU9TNywgQW5kcm9pZCA0LjRcbiAgLy8gKCM2NDY2IE11dGF0aW9uT2JzZXJ2ZXIgaXMgdW5yZWxpYWJsZSBpbiBJRTExKVxuICB2YXIgY291bnRlciA9IDE7XG4gIHZhciBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZsdXNoQ2FsbGJhY2tzKTtcbiAgdmFyIHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoU3RyaW5nKGNvdW50ZXIpKTtcbiAgb2JzZXJ2ZXIub2JzZXJ2ZSh0ZXh0Tm9kZSwge1xuICAgIGNoYXJhY3RlckRhdGE6IHRydWVcbiAgfSk7XG4gIHRpbWVyRnVuYyA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb3VudGVyID0gKGNvdW50ZXIgKyAxKSAlIDI7XG4gICAgdGV4dE5vZGUuZGF0YSA9IFN0cmluZyhjb3VudGVyKTtcbiAgfTtcbiAgaXNVc2luZ01pY3JvVGFzayA9IHRydWU7XG59IGVsc2UgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnICYmIGlzTmF0aXZlKHNldEltbWVkaWF0ZSkpIHtcbiAgLy8gRmFsbGJhY2sgdG8gc2V0SW1tZWRpYXRlLlxuICAvLyBUZWNobmljYWxseSBpdCBsZXZlcmFnZXMgdGhlIChtYWNybykgdGFzayBxdWV1ZSxcbiAgLy8gYnV0IGl0IGlzIHN0aWxsIGEgYmV0dGVyIGNob2ljZSB0aGFuIHNldFRpbWVvdXQuXG4gIHRpbWVyRnVuYyA9IGZ1bmN0aW9uICgpIHtcbiAgICBzZXRJbW1lZGlhdGUoZmx1c2hDYWxsYmFja3MpO1xuICB9O1xufSBlbHNlIHtcbiAgLy8gRmFsbGJhY2sgdG8gc2V0VGltZW91dC5cbiAgdGltZXJGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgIHNldFRpbWVvdXQoZmx1c2hDYWxsYmFja3MsIDApO1xuICB9O1xufVxuXG5mdW5jdGlvbiBuZXh0VGljayAoY2IsIGN0eCkge1xuICB2YXIgX3Jlc29sdmU7XG4gIGNhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY2IpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNiLmNhbGwoY3R4KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaGFuZGxlRXJyb3IoZSwgY3R4LCAnbmV4dFRpY2snKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKF9yZXNvbHZlKSB7XG4gICAgICBfcmVzb2x2ZShjdHgpO1xuICAgIH1cbiAgfSk7XG4gIGlmICghcGVuZGluZykge1xuICAgIHBlbmRpbmcgPSB0cnVlO1xuICAgIHRpbWVyRnVuYygpO1xuICB9XG4gIC8vICRmbG93LWRpc2FibGUtbGluZVxuICBpZiAoIWNiICYmIHR5cGVvZiBQcm9taXNlICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybi
118BuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgIH0pXG4gIH1cbn1cblxuLyogICovXG5cbnZhciBtYXJrO1xudmFyIG1lYXN1cmU7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBwZXJmID0gaW5Ccm93c2VyICYmIHdpbmRvdy5wZXJmb3JtYW5jZTtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChcbiAgICBwZXJmICYmXG4gICAgcGVyZi5tYXJrICYmXG4gICAgcGVyZi5tZWFzdXJlICYmXG4gICAgcGVyZi5jbGVhck1hcmtzICYmXG4gICAgcGVyZi5jbGVhck1lYXN1cmVzXG4gICkge1xuICAgIG1hcmsgPSBmdW5jdGlvbiAodGFnKSB7IHJldHVybiBwZXJmLm1hcmsodGFnKTsgfTtcbiAgICBtZWFzdXJlID0gZnVuY3Rpb24gKG5hbWUsIHN0YXJ0VGFnLCBlbmRUYWcpIHtcbiAgICAgIHBlcmYubWVhc3VyZShuYW1lLCBzdGFydFRhZywgZW5kVGFnKTtcbiAgICAgIHBlcmYuY2xlYXJNYXJrcyhzdGFydFRhZyk7XG4gICAgICBwZXJmLmNsZWFyTWFya3MoZW5kVGFnKTtcbiAgICAgIC8vIHBlcmYuY2xlYXJNZWFzdXJlcyhuYW1lKVxuICAgIH07XG4gIH1cbn1cblxuLyogbm90IHR5cGUgY2hlY2tpbmcgdGhpcyBmaWxlIGJlY2F1c2UgZmxvdyBkb2Vzbid0IHBsYXkgd2VsbCB3aXRoIFByb3h5ICovXG5cbnZhciBpbml0UHJveHk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBhbGxvd2VkR2xvYmFscyA9IG1ha2VNYXAoXG4gICAgJ0luZmluaXR5LHVuZGVmaW5lZCxOYU4saXNGaW5pdGUsaXNOYU4sJyArXG4gICAgJ3BhcnNlRmxvYXQscGFyc2VJbnQsZGVjb2RlVVJJLGRlY29kZVVSSUNvbXBvbmVudCxlbmNvZGVVUkksZW5jb2RlVVJJQ29tcG9uZW50LCcgK1xuICAgICdNYXRoLE51bWJlcixEYXRlLEFycmF5LE9iamVjdCxCb29sZWFuLFN0cmluZyxSZWdFeHAsTWFwLFNldCxKU09OLEludGwsQmlnSW50LCcgK1xuICAgICdyZXF1aXJlJyAvLyBmb3IgV2VicGFjay9Ccm93c2VyaWZ5XG4gICk7XG5cbiAgdmFyIHdhcm5Ob25QcmVzZW50ID0gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7XG4gICAgd2FybihcbiAgICAgIFwiUHJvcGVydHkgb3IgbWV0aG9kIFxcXCJcIiArIGtleSArIFwiXFxcIiBpcyBub3QgZGVmaW5lZCBvbiB0aGUgaW5zdGFuY2UgYnV0IFwiICtcbiAgICAgICdyZWZlcmVuY2VkIGR1cmluZyByZW5kZXIuIE1ha2Ugc3VyZSB0aGF0IHRoaXMgcHJvcGVydHkgaXMgcmVhY3RpdmUsICcgK1xuICAgICAgJ2VpdGhlciBpbiB0aGUgZGF0YSBvcHRpb24sIG9yIGZvciBjbGFzcy1iYXNlZCBjb21wb25lbnRzLCBieSAnICtcbiAgICAgICdpbml0aWFsaXppbmcgdGhlIHByb3BlcnR5LiAnICtcbiAgICAgICdTZWU6IGh0dHBzOi8vdnVlanMub3JnL3YyL2d1aWRlL3JlYWN0aXZpdHkuaHRtbCNEZWNsYXJpbmctUmVhY3RpdmUtUHJvcGVydGllcy4nLFxuICAgICAgdGFyZ2V0XG4gICAgKTtcbiAgfTtcblxuICB2YXIgd2FyblJlc2VydmVkUHJlZml4ID0gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7XG4gICAgd2FybihcbiAgICAgIFwiUHJvcGVydHkgXFxcIlwiICsga2V5ICsgXCJcXFwiIG11c3QgYmUgYWNjZXNzZWQgd2l0aCBcXFwiJGRhdGEuXCIgKyBrZXkgKyBcIlxcXCIgYmVjYXVzZSBcIiArXG4gICAgICAncHJvcGVydGllcyBzdGFydGluZyB3aXRoIFwiJFwiIG9yIFwiX1wiIGFyZSBub3QgcHJveGllZCBpbiB0aGUgVnVlIGluc3RhbmNlIHRvICcgK1xuICAgICAgJ3ByZXZlbnQgY29uZmxpY3RzIHdpdGggVnVlIGludGVybmFscy4gJyArXG4gICAgICAnU2VlOiBodHRwczovL3Z1ZWpzLm9yZy92Mi9hcGkvI2RhdGEnLFxuICAgICAgdGFyZ2V0XG4gICAgKTtcbiAgfTtcblxuICB2YXIgaGFzUHJveHkgPVxuICAgIHR5cGVvZiBQcm94eSAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoUHJveHkpO1xuXG4gIGlmIChoYXNQcm94eSkge1xuICAgIHZhciBpc0J1aWx0SW5Nb2RpZmllciA9IG1ha2VNYXAoJ3N0b3AscHJldmVudCxzZWxmLGN0cmwsc2hpZnQsYWx0LG1ldGEsZXhhY3QnKTtcbiAgICBjb25maWcua2V5Q29kZXMgPSBuZXcgUHJveHkoY29uZmlnLmtleUNvZGVzLCB7XG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldCAodGFyZ2V0LCBrZXksIHZhbHVlKSB7XG4gICAgICAgIGlmIChpc0J1aWx0SW5Nb2RpZmllcihrZXkpKSB7XG4gICAgICAgICAgd2FybigoXCJBdm9pZCBvdmVyd3JpdGluZyBidWlsdC1pbiBtb2RpZmllciBpbiBjb25maWcua2V5Q29kZXM6IC5cIiArIGtleSkpO1xuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gdmFsdWU7XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgdmFyIGhhc0hhbmRsZXIgPSB7XG4gICAgaGFzOiBmdW5jdGlvbiBoYXMgKHRhcmdldCwga2V5KSB7XG4gICAgICB2Y
118XIgaGFzID0ga2V5IGluIHRhcmdldDtcbiAgICAgIHZhciBpc0FsbG93ZWQgPSBhbGxvd2VkR2xvYmFscyhrZXkpIHx8XG4gICAgICAgICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyAmJiBrZXkuY2hhckF0KDApID09PSAnXycgJiYgIShrZXkgaW4gdGFyZ2V0LiRkYXRhKSk7XG4gICAgICBpZiAoIWhhcyAmJiAhaXNBbGxvd2VkKSB7XG4gICAgICAgIGlmIChrZXkgaW4gdGFyZ2V0LiRkYXRhKSB7IHdhcm5SZXNlcnZlZFByZWZpeCh0YXJnZXQsIGtleSk7IH1cbiAgICAgICAgZWxzZSB7IHdhcm5Ob25QcmVzZW50KHRhcmdldCwga2V5KTsgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGhhcyB8fCAhaXNBbGxvd2VkXG4gICAgfVxuICB9O1xuXG4gIHZhciBnZXRIYW5kbGVyID0ge1xuICAgIGdldDogZnVuY3Rpb24gZ2V0ICh0YXJnZXQsIGtleSkge1xuICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnICYmICEoa2V5IGluIHRhcmdldCkpIHtcbiAgICAgICAgaWYgKGtleSBpbiB0YXJnZXQuJGRhdGEpIHsgd2FyblJlc2VydmVkUHJlZml4KHRhcmdldCwga2V5KTsgfVxuICAgICAgICBlbHNlIHsgd2Fybk5vblByZXNlbnQodGFyZ2V0LCBrZXkpOyB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGFyZ2V0W2tleV1cbiAgICB9XG4gIH07XG5cbiAgaW5pdFByb3h5ID0gZnVuY3Rpb24gaW5pdFByb3h5ICh2bSkge1xuICAgIGlmIChoYXNQcm94eSkge1xuICAgICAgLy8gZGV0ZXJtaW5lIHdoaWNoIHByb3h5IGhhbmRsZXIgdG8gdXNlXG4gICAgICB2YXIgb3B0aW9ucyA9IHZtLiRvcHRpb25zO1xuICAgICAgdmFyIGhhbmRsZXJzID0gb3B0aW9ucy5yZW5kZXIgJiYgb3B0aW9ucy5yZW5kZXIuX3dpdGhTdHJpcHBlZFxuICAgICAgICA/IGdldEhhbmRsZXJcbiAgICAgICAgOiBoYXNIYW5kbGVyO1xuICAgICAgdm0uX3JlbmRlclByb3h5ID0gbmV3IFByb3h5KHZtLCBoYW5kbGVycyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZtLl9yZW5kZXJQcm94eSA9IHZtO1xuICAgIH1cbiAgfTtcbn1cblxuLyogICovXG5cbnZhciBzZWVuT2JqZWN0cyA9IG5ldyBfU2V0KCk7XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgdHJhdmVyc2UgYW4gb2JqZWN0IHRvIGV2b2tlIGFsbCBjb252ZXJ0ZWRcbiAqIGdldHRlcnMsIHNvIHRoYXQgZXZlcnkgbmVzdGVkIHByb3BlcnR5IGluc2lkZSB0aGUgb2JqZWN0XG4gKiBpcyBjb2xsZWN0ZWQgYXMgYSBcImRlZXBcIiBkZXBlbmRlbmN5LlxuICovXG5mdW5jdGlvbiB0cmF2ZXJzZSAodmFsKSB7XG4gIF90cmF2ZXJzZSh2YWwsIHNlZW5PYmplY3RzKTtcbiAgc2Vlbk9iamVjdHMuY2xlYXIoKTtcbn1cblxuZnVuY3Rpb24gX3RyYXZlcnNlICh2YWwsIHNlZW4pIHtcbiAgdmFyIGksIGtleXM7XG4gIHZhciBpc0EgPSBBcnJheS5pc0FycmF5KHZhbCk7XG4gIGlmICgoIWlzQSAmJiAhaXNPYmplY3QodmFsKSkgfHwgT2JqZWN0LmlzRnJvemVuKHZhbCkgfHwgdmFsIGluc3RhbmNlb2YgVk5vZGUpIHtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAodmFsLl9fb2JfXykge1xuICAgIHZhciBkZXBJZCA9IHZhbC5fX29iX18uZGVwLmlkO1xuICAgIGlmIChzZWVuLmhhcyhkZXBJZCkpIHtcbiAgICAgIHJldHVyblxuICAgI
118H1cbiAgICBzZWVuLmFkZChkZXBJZCk7XG4gIH1cbiAgaWYgKGlzQSkge1xuICAgIGkgPSB2YWwubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHsgX3RyYXZlcnNlKHZhbFtpXSwgc2Vlbik7IH1cbiAgfSBlbHNlIHtcbiAgICBrZXlzID0gT2JqZWN0LmtleXModmFsKTtcbiAgICBpID0ga2V5cy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkgeyBfdHJhdmVyc2UodmFsW2tleXNbaV1dLCBzZWVuKTsgfVxuICB9XG59XG5cbi8qICAqL1xuXG52YXIgbm9ybWFsaXplRXZlbnQgPSBjYWNoZWQoZnVuY3Rpb24gKG5hbWUpIHtcbiAgdmFyIHBhc3NpdmUgPSBuYW1lLmNoYXJBdCgwKSA9PT0gJyYnO1xuICBuYW1lID0gcGFzc2l2ZSA/IG5hbWUuc2xpY2UoMSkgOiBuYW1lO1xuICB2YXIgb25jZSQkMSA9IG5hbWUuY2hhckF0KDApID09PSAnfic7IC8vIFByZWZpeGVkIGxhc3QsIGNoZWNrZWQgZmlyc3RcbiAgbmFtZSA9IG9uY2UkJDEgPyBuYW1lLnNsaWNlKDEpIDogbmFtZTtcbiAgdmFyIGNhcHR1cmUgPSBuYW1lLmNoYXJBdCgwKSA9PT0gJyEnO1xuICBuYW1lID0gY2FwdHVyZSA/IG5hbWUuc2xpY2UoMSkgOiBuYW1lO1xuICByZXR1cm4ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgb25jZTogb25jZSQkMSxcbiAgICBjYXB0dXJlOiBjYXB0dXJlLFxuICAgIHBhc3NpdmU6IHBhc3NpdmVcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIGNyZWF0ZUZuSW52b2tlciAoZm5zLCB2bSkge1xuICBmdW5jdGlvbiBpbnZva2VyICgpIHtcbiAgICB2YXIgYXJndW1lbnRzJDEgPSBhcmd1bWVudHM7XG5cbiAgICB2YXIgZm5zID0gaW52b2tlci5mbnM7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm5zKSkge1xuICAgICAgdmFyIGNsb25lZCA9IGZucy5zbGljZSgpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbG9uZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoY2xvbmVkW2ldLCBudWxsLCBhcmd1bWVudHMkMSwgdm0sIFwidi1vbiBoYW5kbGVyXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyByZXR1cm4gaGFuZGxlciByZXR1cm4gdmFsdWUgZm9yIHNpbmdsZSBoYW5kbGVyc1xuICAgICAgcmV0dXJuIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGZucywgbnVsbCwgYXJndW1lbnRzLCB2bSwgXCJ2LW9uIGhhbmRsZXJcIilcbiAgICB9XG4gIH1cbiAgaW52b2tlci5mbnMgPSBmbnM7XG4gIHJldHVybiBpbnZva2VyXG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUxpc3RlbmVycyAoXG4gIG9uLFxuICBvbGRPbixcbiAgYWRkLFxuICByZW1vdmUkJDEsXG4gIGNyZWF0ZU9uY2VIYW5kbGVyLFxuICB2bVxuKSB7XG4gIHZhciBuYW1lLCBkZWYkJDEsIGN1ciwgb2xkLCBldmVudDtcbiAgZm9yIChuYW1lIGluIG9uKSB7XG4gICAgZGVmJCQxID0gY3VyID0gb25bbmFtZV07XG4gICAgb2xkID0gb2xkT25bbmFtZV07XG4gICAgZXZlbnQgPSBub3JtYWxpemVFdmVudChuYW1lKTtcbiAgICBpZiAoaXNVbmRlZihjdXIpKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oXG4gICAgICAgIFwiSW52YWxpZCBoYW5kbGVyIGZvciBldmVudCBcXFwiXCIgKyAoZXZlbnQubmFtZSkgKyBcIlxcXCI6IGdvdCBcIiArIFN0cmluZyhjdXIpLFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGlzVW5kZWYob2xkKSkge1xuICAgICAgaWYgKGlzVW5kZWYoY3VyLmZucykpIHtcbiAgICAgICAgY3VyID0gb25bbmFtZV0gPSBjcmVhdGVGbkludm9rZXIoY3VyLCB2bSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNUcnVlKGV2ZW50Lm9uY2UpKSB7XG4gICAgICAgIGN1ciA9IG9uW25hbWVdID0gY3JlYXRlT25jZUhhbmRsZXIoZXZlbnQubmFtZSwgY3VyLCBldmVudC5jYXB0dXJlKTtcbiAgICAgIH1cbiAgICAgIGFkZChldmVudC5uYW1lLCBjdXIsIGV2ZW50LmNhcHR1cmUsIGV2ZW50LnBhc3NpdmUsIGV2ZW50LnBhcmFtcyk7XG4gICAgfSBlbHNlIGlmIChjdXIgIT09IG9sZCkge1xuICAgICAgb2xkLmZucyA9IGN1cjtcbiAgICAgIG9uW25hbWVdID0gb2xkO1xuICAgIH1cbiAgfVxuICBmb3IgKG5hbWUgaW4gb2xkT24pIHtcbiAgICBpZiAoaXNVbmRlZihvbltuYW1lXSkpIHtcbiAgICAgIGV2ZW50ID0gbm9ybWFsaXplRXZlbnQobmFtZSk7XG4gICAgICByZW1vdmUkJDEoZXZlbnQubmFtZSwgb2xkT25bbmFtZV0sIGV2ZW50LmNhcHR1cmUpO1xuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gbWVyZ2VWTm9kZUhvb2sgKGRlZiwgaG9va0tleSwgaG9vaykge1xuICBpZiAoZGVmIGluc3RhbmNlb2YgVk5vZGUpIHtcbiAgICBkZWYgPSBkZWYuZGF0YS5ob29rIHx8IChkZWYuZGF0YS5ob29rID0ge30pO1xuICB9XG4gIHZhciBpbnZva2VyO1xuICB2YXIgb2xkSG9vayA9IGRlZltob29rS2V5XTtcblxuICBmdW5jdGlvbiB3cmFwcGVkSG9vayAoKSB7XG4gICAgaG9vay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIC8vIGltcG9ydGFudDogcmVtb3ZlIG1lcmdlZCBob29rIHRvIGVuc3VyZSBpdCdzIGNhbGxlZCBvbmx5IG9uY2VcbiAgICAvLyBhbmQgcHJldmVudCBtZW1vcnkgbGVha1xuICAgIHJlbW92ZShpbnZva2VyLmZucywgd3JhcHBlZEhvb2spO1xuICB9XG5cbiAgaWYgKGlzVW5kZWYob2xkSG9vaykpIHtcbiAgICAvLyBubyBleGlzdGluZyBob29rXG4gICAgaW52b2tlciA9IGNyZWF0ZUZuSW52b2tlcihbd3JhcHBlZEhvb2tdKTtcbiAgfSBlbHNlIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXNEZWYob2xkSG9vay5mbnMpICYmIGlzVHJ1ZShvbGRIb29rLm1lcmdlZCkpIHtcbiAgICAgIC8vIGFscmVhZHkgYSBtZXJnZWQgaW52b2tlclxuICAgICAgaW52b2tlciA9IG9sZEhvb2s7XG4gICAgICBpbnZva2VyLmZucy5wdXNoKHdyYXBwZWRIb29rKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZXhpc3RpbmcgcGxhaW4gaG9va1xuICAgICAgaW52b2tlciA9IGNyZWF0ZUZuSW52b2tlcihbb2xkSG9vaywgd3JhcHBlZEhvb2tdKTtcbiAgICB9XG4gIH1cblxuICBpbnZva2VyLm1lcmdlZCA9IHRydWU7XG4gIGRlZltob29rS2V5XSA9IGludm9rZXI7XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBleHRyYWN0UHJvcHNGcm9tVk5vZGVEYXRhIChcbiAgZGF0YSxcbiAgQ3RvcixcbiAgdGFnXG4pIHtcbiAgLy8gd2UgYXJlIG9ubHkgZXh0cmFjdGluZyByYXcgdmFsdWVzIGhlcmUuXG4gIC8vIHZhbGlkYXRpb24gYW5kIGRlZmF1bHQgdmFsdWVzIGFyZSBoYW5kbGVkIGluIHRoZSBjaGlsZFxuICAvLyBjb21wb25lbnQgaXRzZWxmLlxuICB2YXIgcHJvcE9wdGlvbnMgPSBDdG9yLm9wdGlvbnMucHJvcHM7XG4gIGlmIChpc1VuZGVmKHByb3BPcHRpb25zKSkge1xuICAgIHJldHVyblxuICB9XG4gI
118HZhciByZXMgPSB7fTtcbiAgdmFyIGF0dHJzID0gZGF0YS5hdHRycztcbiAgdmFyIHByb3BzID0gZGF0YS5wcm9wcztcbiAgaWYgKGlzRGVmKGF0dHJzKSB8fCBpc0RlZihwcm9wcykpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcE9wdGlvbnMpIHtcbiAgICAgIHZhciBhbHRLZXkgPSBoeXBoZW5hdGUoa2V5KTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHZhciBrZXlJbkxvd2VyQ2FzZSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAga2V5ICE9PSBrZXlJbkxvd2VyQ2FzZSAmJlxuICAgICAgICAgIGF0dHJzICYmIGhhc093bihhdHRycywga2V5SW5Mb3dlckNhc2UpXG4gICAgICAgICkge1xuICAgICAgICAgIHRpcChcbiAgICAgICAgICAgIFwiUHJvcCBcXFwiXCIgKyBrZXlJbkxvd2VyQ2FzZSArIFwiXFxcIiBpcyBwYXNzZWQgdG8gY29tcG9uZW50IFwiICtcbiAgICAgICAgICAgIChmb3JtYXRDb21wb25lbnROYW1lKHRhZyB8fCBDdG9yKSkgKyBcIiwgYnV0IHRoZSBkZWNsYXJlZCBwcm9wIG5hbWUgaXNcIiArXG4gICAgICAgICAgICBcIiBcXFwiXCIgKyBrZXkgKyBcIlxcXCIuIFwiICtcbiAgICAgICAgICAgIFwiTm90ZSB0aGF0IEhUTUwgYXR0cmlidXRlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSBhbmQgY2FtZWxDYXNlZCBcIiArXG4gICAgICAgICAgICBcInByb3BzIG5lZWQgdG8gdXNlIHRoZWlyIGtlYmFiLWNhc2UgZXF1aXZhbGVudHMgd2hlbiB1c2luZyBpbi1ET00gXCIgK1xuICAgICAgICAgICAgXCJ0ZW1wbGF0ZXMuIFlvdSBzaG91bGQgcHJvYmFibHkgdXNlIFxcXCJcIiArIGFsdEtleSArIFwiXFxcIiBpbnN0ZWFkIG9mIFxcXCJcIiArIGtleSArIFwiXFxcIi5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNoZWNrUHJvcChyZXMsIHByb3BzLCBrZXksIGFsdEtleSwgdHJ1ZSkgfHxcbiAgICAgIGNoZWNrUHJvcChyZXMsIGF0dHJzLCBrZXksIGFsdEtleSwgZmFsc2UpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGNoZWNrUHJvcCAoXG4gIHJlcyxcbiAgaGFzaCxcbiAga2V5LFxuICBhbHRLZXksXG4gIHByZXNlcnZlXG4pIHtcbiAgaWYgKGlzRGVmKGhhc2gpKSB7XG4gICAgaWYgKGhhc093bihoYXNoLCBrZXkpKSB7XG4gICAgICByZXNba2V5XSA9IGhhc2hba2V5XTtcbiAgICAgIGlmICghcHJlc2VydmUpIHtcbiAgICAgICAgZGVsZXRlIGhhc2hba2V5XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSBlbHNlIGlmIChoYXNPd24oaGFzaCwgYWx0S2V5KSkge1xuICAgICAgcmVzW2tleV0gPSBoYXNoW2FsdEtleV07XG4gICAgICBpZiAoIXByZXNlcnZlKSB7XG4gICAgICAgIGRlbGV0ZSBoYXNoW2FsdEtleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyogICovXG5cbi8vIFRoZSB0ZW1wbGF0ZSBjb21waWxlciBhdHRlbXB0cyB0byBtaW5pbWl6ZSB0aGUgbmVlZCBmb3Igbm9ybWFsaXphdGlvbiBieVxuLy8gc3RhdGljYWxseSBhbmFseXppbmcgdGhlIHRlbXBsYXRlIGF0IGNvbXBpbGUgdGltZS5cbi8vXG4vLyBGb3IgcGxhaW4gSFRNTCBtYXJrdXAsIG5vcm1hbGl6YXRpb24gY2FuIGJlIGNvbXBsZXRlbHkgc2tpcHBlZCBiZWNhdXNlIHRoZVxuLy8gZ2VuZXJhdGVkIHJlbmRlciBmdW5jdGlvbiBpcyBndWFyYW50ZWVkIHRvIHJldHVybiBBcnJheTxWTm9kZT4uIFRoZXJlIGFyZVxuLy8gdHdvIGNhc2VzIHdoZXJlIGV4dHJhIG5vcm1hbGl6YXRpb24gaXMgbmVlZGVkOlxuXG4vLyAxLiBXaGVuIHRoZSBjaGlsZHJlbiBjb250YWlucyBjb21wb25lbnRzIC0gYmVjYXVzZSBhIGZ1bmN0aW9uYWwgY29tcG9uZW50XG4vLyBtYXkgcmV0dXJuIGFuIEFycmF5IGluc3RlYWQgb2YgYSBzaW5nbGUgcm9vdC4gSW4gdGhpcyBjYXNlLCBqdXN0IGEgc2ltcGxlXG4vLyBub3JtYWxpemF0aW9uIGlzIG5lZWRlZCAtIGlmIGFueSBjaGlsZCBpcyBhbiBBcnJheSwgd2UgZmxhdHRlbiB0aGUgd2hvbGVcbi8vIHRoaW5nIHdpdGggQXJyYXkucHJvdG90eXBlLmNvbmNhdC4gSXQgaXMgZ3VhcmFudGVlZCB0byBiZSBvbmx5IDEtbGV2ZWwgZGVlcFxuLy8gYmVjYXVzZSBmdW5jdGlvbmFsIGNvbXBvbmVudHMgYWxyZWFkeSBub3JtYWxpemUgdGhlaXIgb3duIGNoaWxkcmVuLlxuZnVuY3Rpb24gc2ltcGxlTm9ybWFsaXplQ2hpbGRyZW4gKGNoaWxkcmVuKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbltpXSkpIHtcbiAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBjaGlsZHJlbilcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNoaWxkcmVuXG59XG5cbi8vIDIuIFdoZW4gdGhlIGNoaWxkcmVuIGNvbnRhaW5zIGNvbnN0cnVjdHMgdGhhdCBhbHdheXMgZ2VuZXJhdGVkIG5lc3RlZCBBcnJheXMsXG4vLyBlLmcuIDx0ZW1wbGF0ZT4sIDxzbG90Piwgdi1mb3IsIG9yIHdoZW4gdGhlIGNoaWxkcmVuIGlzIHByb3ZpZGVkIGJ5IHVzZXJcbi8vIHdpdGggaGFuZC13cml0dGVuIHJlbmRlciBmdW5jdGlvbnMgLyBKU1guIEluIHN1Y2ggY2FzZXMgYSBmdWxsIG5vcm1hbGl6YXRpb25cbi8vIGlzIG5lZWRlZCB0byBjYXRlciB0byBhbGwgcG9zc2libGUgdHlwZXMgb2YgY2hpbGRyZW4gdmFsdWVzLlxuZnVuY3Rpb24gbm9ybWFsaXplQ2hpbGRyZW4gKGNoaWxkcmVuKSB7XG4gIHJldHVybiBpc1ByaW1pdGl2ZShjaGlsZHJlbilcbiAgICA/IFtjcmVhdGVUZXh0Vk5vZGUoY2hpbGRyZW4pXVxuICAgIDogQXJyYXkuaXNBcnJheShjaGlsZHJlbilcbiAgICAgID8gbm9ybWFsaXplQXJyYXlDaGlsZHJlbihjaGlsZHJlbilcbiAgICAgIDogdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGlzVGV4dE5vZGUgKG5vZGUpIHtcbiAgcmV0dXJuIGlzRGVmKG5vZGUpICYmIGlzRGVmKG5vZGUudGV4dCkgJiYgaXNGYWxzZShub2RlLmlzQ29tbWVudClcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXlDaGlsZHJlbiAoY2hpbGRyZW4sIG5lc3RlZEluZGV4KSB7XG4gIHZhciByZXMgPSBbXTtcbiAgdmFyIGksIGMsIGxhc3RJbmRleCwgbGFzdDtcbiAgZm9yIChpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgYyA9IGNoaWxkcmVuW2ldO1xuICAgIGlmIChpc1VuZGVmKGMpIHx8IHR5cGVvZiBjID09PSAnYm9vbGVhbicpIHsgY29udGludWUgfVxuICAgIGxhc3RJbmRleCA9IHJlcy5sZW5ndGggLSAxO1xuICAgIGxhc3QgPSByZXNbbGFzdEluZGV4XTtcbiAgICAvLyAgbmVzdGVkXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYykpIHtcbiAgICAgIGlmIChjLmxlbmd0aCA+IDApIHtcbiAgICAgICAgYyA9IG5vcm1hbGl6ZUFycmF5Q2hpbGRyZW4oYywgKChuZXN0ZWRJbmRleCB8fCAnJykgKyBcIl9cIiArIGkpKTtcbiAgICAgICAgLy8gbWVyZ2UgYWRqYWNlbnQgdGV4dCBub2Rlc1xuICAgICAgICBpZiAoaXNUZXh0Tm9kZShjWzBdKSAmJiBpc1RleHROb2RlKGxhc3QpKSB7XG4gICAgICAgICAgcmVzW2xhc3RJbmRleF0gPSBjcmVhdGVUZXh0Vk5vZGUobGFzdC50ZXh0ICsgKGNbMF0pLnRleHQpO1xuICAgICAgICAgIGMuc2hpZnQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXMucHVzaC5hcHBseShyZXMsIGMpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNQcmltaXRpdmUoYykpIHtcbiAgICAgIGlmIChpc1RleHROb2RlKGxhc3QpKSB7XG4gICAgICAgIC8vIG1lcmdlIGFkamFjZW50IHRleHQgbm9kZXNcbiAgICAgICAgLy8gdGhpcyBpcyBuZWNlc3NhcnkgZm9yIFNTUiBoeWRyYXRpb24gYmVjYXVzZSB0ZXh0IG5vZGVzIGFyZVxuICAgICAgICAvLyBlc3NlbnRpYWxseSBtZXJnZWQgd2hlbiByZW5kZXJlZCB0byBIVE1MIHN0cmluZ3NcbiAgICAgICAgcmVzW2xhc3RJbmRleF0gPSBjcmVhdGVUZXh0Vk5vZGUobGFzdC50ZXh0ICsgYyk7XG4gICAgICB9IGVsc2UgaWYgKGMgIT09ICcnKSB7XG4gICAgICAgIC8vIGNvbnZlcnQgcHJpbWl0aXZlIH
118RvIHZub2RlXG4gICAgICAgIHJlcy5wdXNoKGNyZWF0ZVRleHRWTm9kZShjKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpc1RleHROb2RlKGMpICYmIGlzVGV4dE5vZGUobGFzdCkpIHtcbiAgICAgICAgLy8gbWVyZ2UgYWRqYWNlbnQgdGV4dCBub2Rlc1xuICAgICAgICByZXNbbGFzdEluZGV4XSA9IGNyZWF0ZVRleHRWTm9kZShsYXN0LnRleHQgKyBjLnRleHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZGVmYXVsdCBrZXkgZm9yIG5lc3RlZCBhcnJheSBjaGlsZHJlbiAobGlrZWx5IGdlbmVyYXRlZCBieSB2LWZvcilcbiAgICAgICAgaWYgKGlzVHJ1ZShjaGlsZHJlbi5faXNWTGlzdCkgJiZcbiAgICAgICAgICBpc0RlZihjLnRhZykgJiZcbiAgICAgICAgICBpc1VuZGVmKGMua2V5KSAmJlxuICAgICAgICAgIGlzRGVmKG5lc3RlZEluZGV4KSkge1xuICAgICAgICAgIGMua2V5ID0gXCJfX3ZsaXN0XCIgKyBuZXN0ZWRJbmRleCArIFwiX1wiICsgaSArIFwiX19cIjtcbiAgICAgICAgfVxuICAgICAgICByZXMucHVzaChjKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdFByb3ZpZGUgKHZtKSB7XG4gIHZhciBwcm92aWRlID0gdm0uJG9wdGlvbnMucHJvdmlkZTtcbiAgaWYgKHByb3ZpZGUpIHtcbiAgICB2bS5fcHJvdmlkZWQgPSB0eXBlb2YgcHJvdmlkZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBwcm92aWRlLmNhbGwodm0pXG4gICAgICA6IHByb3ZpZGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdEluamVjdGlvbnMgKHZtKSB7XG4gIHZhciByZXN1bHQgPSByZXNvbHZlSW5qZWN0KHZtLiRvcHRpb25zLmluamVjdCwgdm0pO1xuICBpZiAocmVzdWx0KSB7XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKGZhbHNlKTtcbiAgICBPYmplY3Qua2V5cyhyZXN1bHQpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGRlZmluZVJlYWN0aXZlJCQxKHZtLCBrZXksIHJlc3VsdFtrZXldLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgd2FybihcbiAgICAgICAgICAgIFwiQXZvaWQgbXV0YXRpbmcgYW4gaW5qZWN0ZWQgdmFsdWUgZGlyZWN0bHkgc2luY2UgdGhlIGNoYW5nZXMgd2lsbCBiZSBcIiArXG4gICAgICAgICAgICBcIm92ZXJ3cml0dGVuIHdoZW5ldmVyIHRoZSBwcm92aWRlZCBjb21wb25lbnQgcmUtcmVuZGVycy4gXCIgK1xuICAgICAgICAgICAgXCJpbmplY3Rpb24gYmVpbmcgbXV0YXRlZDogXFxcIlwiICsga2V5ICsgXCJcXFwiXCIsXG4gICAgICAgICAgICB2bVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVmaW5lUmVhY3RpdmUkJDEodm0sIGtleSwgcmVzdWx0W2tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRvZ2dsZU9ic2VydmluZyh0cnVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNvbHZlSW5qZWN0IChpbmplY3QsIHZtKSB7XG4gIGlmIChpbmplY3QpIHtcbiAgICAvLyBpbmplY3QgaXMgOmFueSBiZWNhdXNlIGZsb3cgaXMgbm90IHNtYXJ0IGVub3VnaCB0byBmaWd1cmUgb3V0IGNhY2hlZFxuICAgIHZhciByZXN1bHQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHZhciBrZXlzID0gaGFzU3ltYm9sXG4gICAgICA/IFJlZmxlY3Qub3duS2V5cyhpbmplY3QpXG4gICAgICA6IE9iamVjdC5rZXlzKGluamVjdCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgLy8gIzY1NzQgaW4gY2FzZSB0aGUgaW5qZWN0IG9iamVjdCBpcyBvYnNlcnZlZC4uLlxuICAgICAgaWYgKGtleSA9PT0gJ19fb2JfXycpIHsgY29udGludWUgfVxuICAgICAgdmFyIHByb3ZpZGVLZXkgPSBpbmplY3Rba2V5XS5mcm9tO1xuICAgICAgdmFyIHNvdXJjZSA9IHZtO1xuICAgICAgd2hpbGUgKHNvdXJjZSkge1xuICAgICAgICBpZiAoc291cmNlLl9wcm92aWRlZCAmJiBoYXNPd24oc291cmNlLl9wcm92aWRlZCwgcHJvdmlkZUtleSkpIHtcbiAgICAgICAgICByZXN1bHRba2V5XSA9IHNvdXJjZS5fcHJvdmlkZWRbcHJvdmlkZUtleV07XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBzb3VyY2UgPSBzb3VyY2UuJHBhcmVudDtcbiAgICAgIH1cbiAgICAgIGlmICghc291cmNlKSB7XG4gICAgICAgIGlmICgnZGVmYXVsdCcgaW4gaW5qZWN0W2tleV0pIHtcbiAgICAgICAgICB2Y
118XIgcHJvdmlkZURlZmF1bHQgPSBpbmplY3Rba2V5XS5kZWZhdWx0O1xuICAgICAgICAgIHJlc3VsdFtrZXldID0gdHlwZW9mIHByb3ZpZGVEZWZhdWx0ID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICA/IHByb3ZpZGVEZWZhdWx0LmNhbGwodm0pXG4gICAgICAgICAgICA6IHByb3ZpZGVEZWZhdWx0O1xuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICB3YXJuKChcIkluamVjdGlvbiBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgbm90IGZvdW5kXCIpLCB2bSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG59XG5cbi8qICAqL1xuXG5cblxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgcmVzb2x2aW5nIHJhdyBjaGlsZHJlbiBWTm9kZXMgaW50byBhIHNsb3Qgb2JqZWN0LlxuICovXG5mdW5jdGlvbiByZXNvbHZlU2xvdHMgKFxuICBjaGlsZHJlbixcbiAgY29udGV4dFxuKSB7XG4gIGlmICghY2hpbGRyZW4gfHwgIWNoaWxkcmVuLmxlbmd0aCkge1xuICAgIHJldHVybiB7fVxuICB9XG4gIHZhciBzbG90cyA9IHt9O1xuICBmb3IgKHZhciBpID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgIHZhciBkYXRhID0gY2hpbGQuZGF0YTtcbiAgICAvLyByZW1vdmUgc2xvdCBhdHRyaWJ1dGUgaWYgdGhlIG5vZGUgaXMgcmVzb2x2ZWQgYXMgYSBWdWUgc2xvdCBub2RlXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5hdHRycyAmJiBkYXRhLmF0dHJzLnNsb3QpIHtcbiAgICAgIGRlbGV0ZSBkYXRhLmF0dHJzLnNsb3Q7XG4gICAgfVxuICAgIC8vIG5hbWVkIHNsb3RzIHNob3VsZCBvbmx5IGJlIHJlc3BlY3RlZCBpZiB0aGUgdm5vZGUgd2FzIHJlbmRlcmVkIGluIHRoZVxuICAgIC8vIHNhbWUgY29udGV4dC5cbiAgICBpZiAoKGNoaWxkLmNvbnRleHQgPT09IGNvbnRleHQgfHwgY2hpbGQuZm5Db250ZXh0ID09PSBjb250ZXh0KSAmJlxuICAgICAgZGF0YSAmJiBkYXRhLnNsb3QgIT0gbnVsbFxuICAgICkge1xuICAgICAgdmFyIG5hbWUgPSBkYXRhLnNsb3Q7XG4gICAgICB2Y
118XIgc2xvdCA9IChzbG90c1tuYW1lXSB8fCAoc2xvdHNbbmFtZV0gPSBbXSkpO1xuICAgICAgaWYgKGNoaWxkLnRhZyA9PT0gJ3RlbXBsYXRlJykge1xuICAgICAgICBzbG90LnB1c2guYXBwbHkoc2xvdCwgY2hpbGQuY2hpbGRyZW4gfHwgW10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2xvdC5wdXNoKGNoaWxkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgKHNsb3RzLmRlZmF1bHQgfHwgKHNsb3RzLmRlZmF1bHQgPSBbXSkpLnB1c2goY2hpbGQpO1xuICAgIH1cbiAgfVxuICAvLyBpZ25vcmUgc2xvdHMgdGhhdCBjb250YWlucyBvbmx5IHdoaXRlc3BhY2VcbiAgZm9yICh2YXIgbmFtZSQxIGluIHNsb3RzKSB7XG4gICAgaWYgKHNsb3RzW25hbWUkMV0uZXZlcnkoaXNXaGl0ZXNwYWNlKSkge1xuICAgICAgZGVsZXRlIHNsb3RzW25hbWUkMV07XG4gICAgfVxuICB9XG4gIHJldHVybiBzbG90c1xufVxuXG5mdW5jdGlvbiBpc1doaXRlc3BhY2UgKG5vZGUpIHtcbiAgcmV0dXJuIChub2RlLmlzQ29tbWVudCAmJiAhbm9kZS5hc3luY0ZhY3RvcnkpIHx8IG5vZGUudGV4dCA9PT0gJyAnXG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBpc0FzeW5jUGxhY2Vob2xkZXIgKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUuaXNDb21tZW50ICYmIG5vZGUuYXN5bmNGYWN0b3J5XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBub3JtYWxpemVTY29wZWRTbG90cyAoXG4gIHNsb3RzLFxuICBub3JtYWxTbG90cyxcbiAgcHJldlNsb3RzXG4pIHtcbiAgdmFyIHJlcztcbiAgdmFyIGhhc05vcm1hbFNsb3RzID0gT2JqZWN0LmtleXMobm9ybWFsU2xvdHMpLmxlbmd0aCA+IDA7XG4gIHZhciBpc1N0YWJsZSA9IHNsb3RzID8gISFzbG90cy4kc3RhYmxlIDogIWhhc05vcm1hbFNsb3RzO1xuICB2YXIga2V5ID0gc2xvdHMgJiYgc2xvdHMuJGtleTtcbiAgaWYgKCFzbG90cykge1xuICAgIHJlcyA9IHt9O1xuICB9IGVsc2UgaWYgKHNsb3RzLl9ub3JtYWxpemVkKSB7XG4gICAgLy8gZmFzdCBwYXRoIDE6IGNoaWxkIGNvbXBvbmVudCByZS1yZW5kZXIgb25seSwgcGFyZW50IGRpZCBub3QgY2hhbmdlXG4gICAgcmV0dXJuIHNsb3RzLl9ub3JtYWxpemVkXG4gIH0gZWxzZSBpZiAoXG4gICAgaXNTdGFibGUgJiZcbiAgICBwcmV2U2xvdHMgJiZcbiAgICBwcmV2U2xvdHMgIT09IGVtcHR5T2JqZWN0ICYmXG4gICAga2V5ID09PSBwcmV2U2xvdHMuJGtleSAmJlxuICAgICFoYXNOb3JtYWxTbG90cyAmJlxuICAgICFwcmV2U2xvdHMuJGhhc05vcm1hbFxuICApIHtcbiAgICAvLyBmYXN0IHBhdGggMjogc3RhYmxlIHNjb3BlZCBzbG90cyB3LyBubyBub3JtYWwgc2xvdHMgdG8gcHJveHksXG4gICAgLy8gb25seSBuZWVkIHRvIG5vcm1hbGl6ZSBvbmNlXG4gICAgcmV0dXJuIHByZXZTbG90c1xuICB9IGVsc2Uge1xuICAgIHJlcyA9IHt9O1xuICAgIGZvciAodmFyIGtleSQxIGluIHNsb3RzKSB7XG4gICAgICBpZiAoc2xvdHNba2V5JDFdICYmIGtleSQxWzBdICE9PSAnJCcpIHtcbiAgICAgICAgcmVzW2tleSQxXSA9IG5vcm1hbGl6ZVNjb3BlZFNsb3Qobm9ybWFsU2xvdHMsIGtleSQxLCBzbG90c1trZXkkMV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBleHBvc2Ugbm9ybWFsIHNsb3RzIG9uIHNjb3BlZFNsb3RzXG4gIGZvciAodmFyIGtleSQyIGluIG5vcm1hbFNsb3RzKSB7XG4gICAgaWYgKCEoa2V5JDIgaW4gcmVzKSkge1xuICAgICAgcmVzW2tleSQyXSA9IHByb3h5Tm9ybWFsU2xvdChub3JtYWxTbG90cywga2V5JDIpO1xuICAgIH1cbiAgfVxuICAvLyBhdm9yaWF6IHNlZW1zIHRvIG1vY2sgYSBub24tZXh0ZW5zaWJsZSAkc2NvcGVkU2xvdHMgb2JqZWN0XG4gIC8vIGFuZCB3aGVuIHRoYXQgaXMgcGFzc2VkIGRvd24gdGhpcyB3b3VsZCBjYXVzZSBhbiBlcnJvclxuICBpZiAoc2xvdHMgJiYgT2JqZWN0LmlzRXh0ZW5zaWJsZShzbG90cykpIHtcbiAgICAoc2xvdHMpLl9ub3JtYWxpemVkID0gcmVzO1xuICB9XG4gIGRlZihyZXMsICckc3RhYmxlJywgaXNTdGFibGUpO1xuICBkZWYocmVzLCAnJGtleScsIGtleSk7XG4gIGRlZihyZXMsICckaGFzTm9ybWFsJywgaGFzTm9ybWFsU2xvdHMpO1xuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNjb3BlZFNsb3Qobm9ybWFsU2xvdHMsIGtleSwgZm4pIHtcbiAgdmFyIG5vcm1hbGl6ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlcyA9IGFyZ3VtZW50cy5sZW5ndGggPyBmbi5hcHBseShudWxsLCBhcmd1bWVudHMpIDogZm4oe30pO1xuICAgIHJlcyA9IHJlcyAmJiB0eXBlb2YgcmVzID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShyZXMpXG4gICAgICA/IFtyZXNdIC8vIHNpbmdsZSB2bm9kZVxuICAgICAgOiBub3JtYWxpemVDaGlsZHJlbihyZXMpO1xuICAgIHZhciB2bm9kZSA9IHJlcyAmJiByZXNbMF07XG4gICAgcmV0dXJuIHJlcyAmJiAoXG4gICAgICAhdm5vZGUgfHxcbiAgICAgIChyZXMubGVuZ3RoID09PSAxICYmIHZub2RlLmlzQ29tbWVudCAmJiAhaXNBc3luY1BsYWNlaG9sZGVyKHZub2RlKSkgLy8gIzk2NTgsICMxMDM5MVxuICAgICkgPyB1bmRlZmluZWRcbiAgICAgIDogcmVzXG4gIH07XG4gIC8vIHRoaXMgaXMgYSBzbG90IHVzaW5nIHRoZSBuZXcgdi1zbG90IHN5bnRheCB3aXRob3V0IHNjb3BlLiBhbHRob3VnaCBpdCBpc1xuICAvLyBjb21waWxlZCBhcyBhIHNjb3BlZCBzbG90LCByZW5kZXIgZm4gdXNlcnMgd291bGQgZXhwZWN0IGl0IHRvIGJlIHByZXNlbnRcbiAgLy8gb24gdGhpcy4kc2xvdHMgYmVjYXVzZSB0aGUgdXNhZ2UgaXMgc2VtYW50aWNhbGx5IGEgbm9ybWFsIHNsb3QuXG4gIGlmIChmbi5wcm94eSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShub3JtYWxTbG90cywga2V5LCB7XG4gICAgICBnZXQ6IG5vcm1hbGl6ZWQsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZWRcbn1cblxuZnVuY3Rpb24gcHJveHlOb3JtYWxTbG90KHNsb3RzLCBrZXkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNsb3RzW2tleV07IH1cbn1cblxuLyogICovXG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHJlbmRlcmluZyB2LWZvciBsaXN0cy5cbiAqL1xuZnVuY3Rpb24gcmVuZGVyTGlzdCAoXG4gIHZhbCxcbiAgcmVuZGVyXG4pIHtcbiAgdmFyIHJldCwgaSwgbCwga2V5cywga2V5O1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpIHx8IHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0ID0gbmV3IEFycmF5KHZhbC5sZW5ndGgpO1xuICAgIGZvciAoaSA9IDAsIGwgPSB2YWwubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICByZXRbaV0gPSByZW5kZXIodmFsW2ldLCBpKTtcbiAgICB9XG4gI
118H0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICByZXQgPSBuZXcgQXJyYXkodmFsKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgdmFsOyBpKyspIHtcbiAgICAgIHJldFtpXSA9IHJlbmRlcihpICsgMSwgaSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzT2JqZWN0KHZhbCkpIHtcbiAgICBpZiAoaGFzU3ltYm9sICYmIHZhbFtTeW1ib2wuaXRlcmF0b3JdKSB7XG4gICAgICByZXQgPSBbXTtcbiAgICAgIHZhciBpdGVyYXRvciA9IHZhbFtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgICB2YXIgcmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgd2hpbGUgKCFyZXN1bHQuZG9uZSkge1xuICAgICAgICByZXQucHVzaChyZW5kZXIocmVzdWx0LnZhbHVlLCByZXQubGVuZ3RoKSk7XG4gICAgICAgIHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAga2V5cyA9IE9iamVjdC5rZXlzKHZhbCk7XG4gICAgICByZXQgPSBuZXcgQXJyYXkoa2V5cy5sZW5ndGgpO1xuICAgICAgZm9yIChpID0gMCwgbCA9IGtleXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICAgIHJldFtpXSA9IHJlbmRlcih2YWxba2V5XSwga2V5LCBpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKCFpc0RlZihyZXQpKSB7XG4gICAgcmV0ID0gW107XG4gIH1cbiAgKHJldCkuX2lzVkxpc3QgPSB0cnVlO1xuICByZXR1cm4gcmV0XG59XG5cbi8qICAqL1xuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciByZW5kZXJpbmcgPHNsb3Q+XG4gKi9cbmZ1bmN0aW9uIHJlbmRlclNsb3QgKFxuICBuYW1lLFxuICBmYWxsYmFja1JlbmRlcixcbiAgcHJvcHMsXG4gIGJpbmRPYmplY3Rcbikge1xuICB2YXIgc2NvcGVkU2xvdEZuID0gdGhpcy4kc2NvcGVkU2xvdHNbbmFtZV07XG4gIHZhciBub2RlcztcbiAgaWYgKHNjb3BlZFNsb3RGbikge1xuICAgIC8vIHNjb3BlZCBzbG90XG4gICAgcHJvcHMgPSBwcm9wcyB8fCB7fTtcbiAgICBpZiAoYmluZE9iamVjdCkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWlzT2JqZWN0KGJpbmRPYmplY3QpKSB7XG4gICAgICAgIHdhcm4oJ3Nsb3Qgdi1iaW5kIHdpdGhvdXQgYXJndW1lbnQgZXhwZWN0cyBhbiBPYmplY3QnLCB0aGlzKTtcbiAgICAgIH1cbiAgICAgIHByb3BzID0gZXh0ZW5kKGV4dGVuZCh7fSwgYmluZE9iamVjdCksIHByb3BzKTtcbiAgICB9XG4gICAgbm9kZXMgPVxuICAgICAgc2NvcGVkU2xvdEZuKHByb3BzKSB8fFxuICAgICAgKHR5cGVvZiBmYWxsYmFja1JlbmRlciA9PT0gJ2Z1bmN0aW9uJyA/IGZhbGxiYWNrUmVuZGVyKCkgOiBmYWxsYmFja1JlbmRlcik7XG4gIH0gZWxzZSB7XG4gICAgbm9kZXMgPVxuICAgICAgdGhpcy4kc2xvdHNbbmFtZV0gfHxcbiAgICAgICh0eXBlb2YgZmFsbGJhY2tSZW5kZXIgPT09ICdmdW5jdGlvbicgPyBmYWxsYmFja1JlbmRlcigpIDogZmFsbGJhY2tSZW5kZXIpO1xuICB9XG5cbiAgdmFyIHRhcmdldCA9IHByb3BzICYmIHByb3BzLnNsb3Q7XG4gIGlmICh0YXJnZXQpIHtcbiAgICByZXR1cm4gdGhpcy4kY3JlYXRlRWxlbWVudCgndGVtcGxhdGUnLCB7IHNsb3Q6IHRhcmdldCB9LCBub2RlcylcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbm9kZXNcbiAgfVxufVxuXG4vKiAgKi9cblxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgcmVzb2x2aW5nIGZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUZpbHRlciAoaWQpIHtcbiAgcmV0dXJuIHJlc29sdmVBc3NldCh0aGlzLiRvcHRpb25zLCAnZmlsdGVycycsIGlkLCB0cnVlKSB8fCBpZGVudGl0eVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaXNLZXlOb3RNYXRjaCAoZXhwZWN0LCBhY3R1YWwpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoZXhwZWN0KSkge1xuICAgIHJldHVybiBleHBlY3QuaW5kZXhPZihhY3R1YWwpID09PSAtMVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBleHBlY3QgIT09IGFjdHVhbFxuICB9XG59XG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIGNoZWNraW5nIGtleUNvZGVzIGZyb20gY29uZmlnLlxuICogZXhwb3NlZCBhcyBWdWUucHJvdG90eXBlLl9rXG4gKiBwYXNzaW5nIGluIGV2ZW50S2V5TmFtZSBhcyBsYXN0IGFyZ3VtZW50IHNlcGFyYXRlbHkgZm9yIGJhY2t3YXJkcyBjb21wYXRcbiAqL1xuZnVuY3Rpb24gY2hlY2tLZXlDb2RlcyAoXG4gIGV2ZW50S2V5Q29kZSxcbiAga2V5LFxuICBidWlsdEluS2V5Q29kZSxcbiAgZXZlbnRLZXlOYW1lLFxuICBidWlsdEluS2V5TmFtZVxuKSB7XG4gIHZhciBtYXBwZWRLZXlDb2RlID0gY29uZmlnLmtleUNvZGVzW2tleV0gfHwgYnVpbHRJbktleUNvZGU7XG4gIGlmIChidWlsdEluS2V5TmFtZSAmJiBldmVudEtleU5hbWUgJiYgIWNvbmZpZy5rZXlDb2Rlc1trZXldKSB7XG4gICAgcmV0dXJuIGlzS2V5Tm90TWF0Y2goYnVpbHRJbktleU5hbWUsIGV2ZW50S2V5TmFtZSlcbiAgfSBlbHNlIGlmIChtYXBwZWRLZXlDb2RlKSB7XG4gICAgcmV0dXJuIGlzS2V5Tm90TWF0Y2gobWFwcGVkS2V5Q29kZSwgZXZlbnRLZXlDb2RlKVxuICB9IGVsc2UgaWYgKGV2ZW50S2V5TmFtZSkge1xuICAgIHJldHVybiBoeXBoZW5hdGUoZXZlbnRLZXlOYW1lKSAhPT0ga2V5XG4gIH1cbiAgcmV0dXJuIGV2ZW50S2V5Q29kZSA9PT0gdW5kZWZpbmVkXG59XG5cbi8qICAqL1xuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciBtZXJnaW5nIHYtYmluZD1cIm9iamVjdFwiIGludG8gYSBWTm9kZSdzIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGJpbmRPYmplY3RQcm9wcyAoXG4gIGRhdGEsXG4gIHRhZyxcbiAgdmFsdWUsXG4gIGFzUHJvcCxcbiAgaXNTeW5jXG4pIHtcbiAgaWYgKHZhbHVlKSB7XG4gICAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICAgJ3YtYmluZCB3aXRob3V0IGFyZ3VtZW50IGV4cGVjdHMgYW4gT2JqZWN0IG9yIEFycmF5IHZhbHVlJyxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgI
118HZhbHVlID0gdG9PYmplY3QodmFsdWUpO1xuICAgICAgfVxuICAgICAgdmFyIGhhc2g7XG4gICAgICB2YXIgbG9vcCA9IGZ1bmN0aW9uICgga2V5ICkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAga2V5ID09PSAnY2xhc3MnIHx8XG4gICAgICAgICAga2V5ID09PSAnc3R5bGUnIHx8XG4gICAgICAgICAgaXNSZXNlcnZlZEF0dHJpYnV0ZShrZXkpXG4gICAgICAgICkge1xuICAgICAgICAgIGhhc2ggPSBkYXRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciB0eXBlID0gZGF0YS5hdHRycyAmJiBkYXRhLmF0dHJzLnR5cGU7XG4gICAgICAgICAgaGFzaCA9IGFzUHJvcCB8fCBjb25maWcubXVzdFVzZVByb3AodGFnLCB0eXBlLCBrZXkpXG4gICAgICAgICAgICA/IGRhdGEuZG9tUHJvcHMgfHwgKGRhdGEuZG9tUHJvcHMgPSB7fSlcbiAgICAgICAgICAgIDogZGF0YS5hdHRycyB8fCAoZGF0YS5hdHRycyA9IHt9KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY2FtZWxpemVkS2V5ID0gY2FtZWxpemUoa2V5KTtcbiAgICAgICAgdmFyIGh5cGhlbmF0ZWRLZXkgPSBoeXBoZW5hdGUoa2V5KTtcbiAgICAgICAgaWYgKCEoY2FtZWxpemVkS2V5IGluIGhhc2gpICYmICEoaHlwaGVuYXRlZEtleSBpbiBoYXNoKSkge1xuICAgICAgICAgIGhhc2hba2V5XSA9IHZhbHVlW2tleV07XG5cbiAgICAgICAgICBpZiAoaXNTeW5jKSB7XG4gICAgICAgICAgICB2YXIgb24gPSBkYXRhLm9uIHx8IChkYXRhLm9uID0ge30pO1xuICAgICAgICAgICAgb25bKFwidXBkYXRlOlwiICsga2V5KV0gPSBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgIHZhbHVlW2tleV0gPSAkZXZlbnQ7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSBsb29wKCBrZXkgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRhdGFcbn1cblxuLyogICovXG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHJlbmRlcmluZyBzdGF0aWMgdHJlZXMuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlclN0YXRpYyAoXG4gIGluZGV4LFxuICBpc0luRm9yXG4pIHtcbiAgdmFyIGNhY2hlZCA9IHRoaXMuX3N0YXRpY1RyZWVzIHx8ICh0aGlzLl9zdGF0aWNUcmVlcyA9IFtdKTtcbiAgdmFyIHRyZWUgPSBjYWNoZWRbaW5kZXhdO1xuICAvLyBpZiBoYXMgYWxyZWFkeS1yZW5kZXJlZCBzdGF0aWMgdHJlZSBhbmQgbm90IGluc2lkZSB2LWZvcixcbiAgLy8gd2UgY2FuIHJldXNlIHRoZSBzYW1lIHRyZWUuXG4gIGlmICh0cmVlICYmICFpc0luRm9yKSB7XG4gICAgcmV0dXJuIHRyZWVcbiAgfVxuICAvLyBvdGhlcndpc2UsIHJlbmRlciBhIGZyZXNoIHRyZWUuXG4gIHRyZWUgPSBjYWNoZWRbaW5kZXhdID0gdGhpcy4kb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnNbaW5kZXhdLmNhbGwoXG4gICAgdGhpcy5fcmVuZGVyUHJveHksXG4gICAgbnVsbCxcbiAgICB0aGlzIC8vIGZvciByZW5kZXIgZm5zIGdlbmVyYXRlZCBmb3IgZnVuY3Rpb25hbCBjb21wb25lbnQgdGVtcGxhdGVzXG4gICk7XG4gIG1hcmtTdGF0aWModHJlZSwgKFwiX19zdGF0aWNfX1wiICsgaW5kZXgpLCBmYWxzZSk7XG4gIHJldHVybiB0cmVlXG59XG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHYtb25jZS5cbiAqIEVmZmVjdGl2ZWx5IGl0IG1lYW5zIG1hcmtpbmcgdGhlIG5vZGUgYXMgc3RhdGljIHdpdGggYSB1bmlxdWUga2V5LlxuICovXG5mdW5jdGlvbiBtYXJrT25jZSAoXG4gIHRyZWUsXG4gIGluZGV4LFxuICBrZXlcbikge1xuICBtYXJrU3RhdGljKHRyZWUsIChcIl9fb25jZV9fXCIgKyBpbmRleCArIChrZXkgPyAoXCJfXCIgKyBrZXkpIDogXCJcIikpLCB0cnVlKTtcbiAgcmV0dXJuIHRyZWVcbn1cblxuZnVuY3Rpb24gbWFya1N0YXRpYyAoXG4gIHRyZWUsXG4gIGtleSxcbiAgaXNPbmNlXG4pIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodHJlZSkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyZWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0cmVlW2ldICYmIHR5cGVvZiB0cmVlW2ldICE9PSAnc3RyaW5nJykge1xuICAgICAgICBtYXJrU3RhdGljTm9kZSh0cmVlW2ldLCAoa2V5ICsgXCJfXCIgKyBpKSwgaXNPbmNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbWFya1N0YXRpY05vZGUodHJlZSwga2V5LCBpc09uY2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtTdGF0aWNOb2RlIChub2RlLCBrZXksIGlzT25jZSkge1xuICBub2RlLmlzU3RhdGljID0gdHJ1ZTtcbiAgbm9kZS5rZXkgPSBrZXk7XG4gIG5vZGUuaXNPbmNlID0gaXNPbmNlO1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gYmluZE9iamVjdExpc3RlbmVycyAoZGF0YSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlKSB7XG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICAndi1vbiB3aXRob3V0IGFyZ3VtZW50IGV4cGVjdHMgYW4gT2JqZWN0IHZhbHVlJyxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG9uID0gZGF0YS5vbiA9IGRhdGEub24gPyBleHRlbmQoe30sIGRhdGEub24pIDoge307XG4gICAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgdmFyIGV4aXN0aW5nID0gb25ba2V5XTtcbiAgICAgICAgdmFyIG91cnMgPSB2YWx1ZVtrZXldO1xuICAgICAgICBvbltrZXldID0gZXhpc3RpbmcgPyBbXS5jb25jYXQoZXhpc3R
118pbmcsIG91cnMpIDogb3VycztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRhdGFcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIHJlc29sdmVTY29wZWRTbG90cyAoXG4gIGZucywgLy8gc2VlIGZsb3cvdm5vZGVcbiAgcmVzLFxuICAvLyB0aGUgZm9sbG93aW5nIGFyZSBhZGRlZCBpbiAyLjZcbiAgaGFzRHluYW1pY0tleXMsXG4gIGNvbnRlbnRIYXNoS2V5XG4pIHtcbiAgcmVzID0gcmVzIHx8IHsgJHN0YWJsZTogIWhhc0R5bmFtaWNLZXlzIH07XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZm5zLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNsb3QgPSBmbnNbaV07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc2xvdCkpIHtcbiAgICAgIHJlc29sdmVTY29wZWRTbG90cyhzbG90LCByZXMsIGhhc0R5bmFtaWNLZXlzKTtcbiAgICB9IGVsc2UgaWYgKHNsb3QpIHtcbiAgICAgIC8vIG1hcmtlciBmb3IgcmV2ZXJzZSBwcm94eWluZyB2LXNsb3Qgd2l0aG91dCBzY29wZSBvbiB0aGlzLiRzbG90c1xuICAgICAgaWYgKHNsb3QucHJveHkpIHtcbiAgICAgICAgc2xvdC5mbi5wcm94eSA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXNbc2xvdC5rZXldID0gc2xvdC5mbjtcbiAgICB9XG4gIH1cbiAgaWYgKGNvbnRlbnRIYXNoS2V5KSB7XG4gICAgKHJlcykuJGtleSA9IGNvbnRlbnRIYXNoS2V5O1xuICB9XG4gIHJldHVybiByZXNcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGJpbmREeW5hbWljS2V5cyAoYmFzZU9iaiwgdmFsdWVzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGtleSA9IHZhbHVlc1tpXTtcbiAgICBpZiAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycgJiYga2V5KSB7XG4gICAgICBiYXNlT2JqW3ZhbHVlc1tpXV0gPSB2YWx1ZXNbaSArIDFdO1xuICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBrZXkgIT09ICcnICYmIGtleSAhPT0gbnVsbCkge1xuICAgICAgLy8gbnVsbCBpcyBhIHNwZWNpYWwgdmFsdWUgZm9yIGV4cGxpY2l0bHkgcmVtb3ZpbmcgYSBiaW5kaW5nXG4gICAgICB3YXJuKFxuICAgICAgICAoXCJJbnZhbGlkIHZhbHVlIGZvciBkeW5hbWljIGRpcmVjdGl2ZSBhcmd1bWVudCAoZXhwZWN0ZWQgc3RyaW5nIG9yIG51bGwpOiBcIiArIGtleSksXG4gICAgICAgIHRoaXNcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBiYXNlT2JqXG59XG5cbi8vIGhlbHBlciB0byBkeW5hbWljYWxseSBhcHBlbmQgbW9kaWZpZXIgcnVudGltZSBtYXJrZXJzIHRvIGV2ZW50IG5hbWVzLlxuLy8gZW5zdXJlIG9ubHkgYXBwZW5kIHdoZW4gdmFsdWUgaXMgYWxyZWFkeSBzdHJpbmcsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGNhc3Rcbi8vIHRvIHN0cmluZyBhbmQgY2F1c2UgdGhlIHR5cGUgY2hlY2sgdG8gbWlzcy5cbmZ1bmN0aW9uIHByZXBlbmRNb2RpZmllciAodmFsdWUsIHN5bWJvbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHN5bWJvbCArIHZhbHVlIDogdmFsdWVcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGluc3RhbGxSZW5kZXJIZWxwZXJzICh0YXJnZXQpIHtcbiAgdGFyZ2V0Ll9vID0gbWFya09uY2U7XG4gIHRhcmdldC5fbiA9IHRvTnVtYmVyO1xuICB0YXJnZXQuX3MgPSB0b1N0cmluZztcbiAgdGFyZ2V0Ll9sID0gcmVuZGVyTGlzdDtcbiAgdGFyZ2V0Ll90ID0gcmVuZGVyU2xvdDtcbiAgdGFyZ2V0Ll9xID0gbG9vc2VFcXVhbDtcbiAgdGFyZ2V0Ll9pID0gbG9vc2VJbmRleE9mO1xuICB0YXJnZXQuX20gPSByZW5kZXJTdGF0aWM7XG4gIHRhcmdldC5fZiA9IHJlc29sdmVGaWx0ZXI7XG4gIHRhcmdldC5fayA9IGNoZWNrS2V5Q29kZXM7XG4gIHRhcmdldC5fYiA9IGJpbmRPYmplY3RQcm9wcztcbiAgdGFyZ2V0Ll92ID0gY3JlYXRlVGV4dFZOb2RlO1xuICB0YXJnZXQuX2UgPSBjcmVhdGVFbXB0eVZOb2RlO1xuICB0YXJnZXQuX3UgPSByZXNvbHZlU2NvcGVkU2xvdHM7XG4gIHRhcmdldC5fZyA9IGJpbmRPYmplY3RMaXN0ZW5lcnM7XG4gIHRhcmdldC5fZCA9IGJpbmREeW5hbWljS2V5cztcbiAgdGFyZ2V0Ll9wID0gcHJlcGVuZE1vZGlmaWVyO1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gRnVuY3Rpb25hbFJlbmRlckNvbnRleHQgKFxuICBkYXRhLFxuICBwcm9wcyxcbiAgY2hpbGRyZW4sXG4gIHBhcmVudCxcbiAgQ3RvclxuKSB7XG4gIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIHZhciBvcHRpb25zID0gQ3Rvci5vcHRpb25zO1xuICAvLyBlbnN1cmUgdGhlIGNyZWF0ZUVsZW1lbnQgZnVuY3Rpb24gaW4gZnVuY3Rpb25hbCBjb21wb25lbnRzXG4gIC8vIGdldHMgYSB1bmlxdWUgY29udGV4dCAtIHRoaXMgaXMgbmVjZXNzYXJ5IGZvciBjb3JyZWN0IG5hbWVkIHNsb3QgY2hlY2tcbiAgdmFyIGNvbnRleHRWbTtcbiAgaWYgKGhhc093bihwYXJlbnQsICdfdWlkJykpIHtcbiAgICBjb250ZXh0Vm0gPSBPYmplY3QuY3JlYXRlKHBhcmVudCk7XG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgY29udGV4dFZtLl9vcmlnaW5hbCA9IHBhcmVudDtcbiAgfSBlbHNlIHtcbiAgICAvLyB0aGUgY29udGV4dCB2bSBwYXNzZWQgaW4gaXMgYSBmdW5jdGlvbmFsIGNvbnRleHQgYXMgd2VsbC5cbiAgICAvLyBpbiB0aGlzIGNhc2Ugd2Ugd2FudCB0byBtYWtlIHN1cmUgd2UgYXJlIGFibGUgdG8gZ2V0IGEgaG9sZCB0byB0aGVcbiAgICAvLyByZWFsIGNvbnRleHQgaW5zdGFuY2UuXG4gICAgY29udGV4dFZtID0gcGFyZW50O1xuICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgIHBhcmVudCA9IHBhcmVudC5fb3JpZ2luYWw7XG4gIH1cbiAgdmFyIGlzQ29tcGlsZWQgPSBpc1RydWUob3B0aW9ucy5fY29tcGlsZWQpO1xuICB2YXIgbmVlZE5vcm1hbGl6YXRpb24gPSAhaXNDb21waWxlZDtcblxuICB0aGlzLmRhdGEgPSBkYXRhO1xuICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gIHRoaXMubGlzdGVuZXJzID0gZGF0YS5vbiB8fCBlbXB0eU9iamVjdDtcbiAgdGhpcy5pbmplY3Rpb25zID0gcmVzb2x2ZUluamVjdChvcHRpb25zLmluamVjdCwgcGFyZW50KTtcbiAgdGhpcy5zbG90cyA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMkMS4kc2xvdHMpIHtcbiAgICAgIG5vcm1hbGl6ZVNjb3BlZFNsb3RzKFxuICAgICAgICBkYXRhLnNjb3BlZFNsb3RzLFxuICAgICAgICB0aGlzJDEuJHNsb3RzID0gcmVzb2x2ZVNsb3RzKGNoaWxkcmVuLCBwYXJlbnQpXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcyQxLiRzbG90c1xuICB9O1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnc2NvcGVkU2xvdHMnLCAoe1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQgKCkge1xuICAgICAgcmV0dXJuIG5vcm1hbGl6ZVNjb3BlZFNsb3RzKGRhdGEuc2NvcGVkU2xvdHMsIHRoaXMuc2xvdHMoKSlcbiAgICB9XG4gI
118H0pKTtcblxuICAvLyBzdXBwb3J0IGZvciBjb21waWxlZCBmdW5jdGlvbmFsIHRlbXBsYXRlXG4gIGlmIChpc0NvbXBpbGVkKSB7XG4gICAgLy8gZXhwb3NpbmcgJG9wdGlvbnMgZm9yIHJlbmRlclN0YXRpYygpXG4gICAgdGhpcy4kb3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgLy8gcHJlLXJlc29sdmUgc2xvdHMgZm9yIHJlbmRlclNsb3QoKVxuICAgIHRoaXMuJHNsb3RzID0gdGhpcy5zbG90cygpO1xuICAgIHRoaXMuJHNjb3BlZFNsb3RzID0gbm9ybWFsaXplU2NvcGVkU2xvdHMoZGF0YS5zY29wZWRTbG90cywgdGhpcy4kc2xvdHMpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMuX3Njb3BlSWQpIHtcbiAgICB0aGlzLl9jID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHtcbiAgICAgIHZhciB2bm9kZSA9IGNyZWF0ZUVsZW1lbnQoY29udGV4dFZtLCBhLCBiLCBjLCBkLCBuZWVkTm9ybWFsaXphdGlvbik7XG4gICAgICBpZiAodm5vZGUgJiYgIUFycmF5LmlzQXJyYXkodm5vZGUpKSB7XG4gICAgICAgIHZub2RlLmZuU2NvcGVJZCA9IG9wdGlvbnMuX3Njb3BlSWQ7XG4gICAgICAgIHZub2RlLmZuQ29udGV4dCA9IHBhcmVudDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2bm9kZVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fYyA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7IHJldHVybiBjcmVhdGVFbGVtZW50KGNvbnRleHRWbSwgYSwgYiwgYywgZCwgbmVlZE5vcm1hbGl6YXRpb24pOyB9O1xuICB9XG59XG5cbmluc3RhbGxSZW5kZXJIZWxwZXJzKEZ1bmN0aW9uYWxSZW5kZXJDb250ZXh0LnByb3RvdHlwZSk7XG5cbmZ1bmN0aW9uIGNyZWF0ZUZ1bmN0aW9uYWxDb21wb25lbnQgKFxuICBDdG9yLFxuICBwcm9wc0RhdGEsXG4gIGRhdGEsXG4gIGNvbnRleHRWbSxcbiAgY2hpbGRyZW5cbikge1xuICB2YXIgb3B0aW9ucyA9IEN0b3Iub3B0aW9ucztcbiAgdmFyIHByb3BzID0ge307XG4gIHZhciBwcm9wT3B0aW9ucyA9IG9wdGlvbnMucHJvcHM7XG4gIGlmIChpc0RlZihwcm9wT3B0aW9ucykpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcE9wdGlvbnMpIHtcbiAgICAgIHByb3BzW2tleV0gPSB2YWxpZGF0ZVByb3Aoa2V5LCBwcm9wT3B0aW9ucywgcHJvcHNEYXRhIHx8IGVtcHR5T2JqZWN0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGlzRGVmKGRhdGEuYXR0cnMpKSB7IG1lcmdlUHJvcHMocHJvcHMsIGRhdGEuYXR0cnMpOyB9XG4gICAgaWYgKGlzRGVmKGRhdGEucHJvcHMpKSB7IG1lcmdlUHJvcHMocHJvcHMsIGRhdGEucHJvcHMpOyB9XG4gIH1cblxuICB2YXIgcmVuZGVyQ29udGV4dCA9IG5ldyBGdW5jdGlvbmFsUmVuZGVyQ29udGV4dChcbiAgICBkYXRhLFxuICAgIHByb3BzLFxuICAgIGNoaWxkcmVuLFxuICAgIGNvbnRleHRWbSxcbiAgICBDdG9yXG4gICk7XG5cbiAgdmFyIHZub2RlID0gb3B0aW9ucy5yZW5kZXIuY2FsbChudWxsLCByZW5kZXJDb250ZXh0Ll9jLCByZW5kZXJDb250ZXh0KTtcblxuICBpZiAodm5vZGUgaW5zdGFuY2VvZiBWTm9kZSkge1xuICAgIHJldHVybiBjbG9uZUFuZE1hcmtGdW5jdGlvbmFsUmVzdWx0KHZub2RlLCBkYXRhLCByZW5kZXJDb250ZXh0LnBhcmVudCwgb3B0aW9ucywgcmVuZGVyQ29udGV4dClcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZub2RlKSkge1xuICAgIHZhciB2bm9kZXMgPSBub3JtYWxpemVDaGlsZHJlbih2bm9kZSkgfHwgW107XG4gICAgdmFyIHJlcyA9IG5ldyBBcnJheSh2bm9kZXMubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzW2ldID0gY2xvbmVBbmRNYXJrRnVuY3Rpb25hbFJlc3VsdCh2bm9kZXNbaV0sIGRhdGEsIHJlbmRlckNvbnRleHQucGFyZW50LCBvcHRpb25zLCByZW5kZXJDb250ZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc1xuICB9XG59XG5cbmZ1bmN0aW9uIGNsb25lQW5kTWFya0Z1bmN0aW9uYWxSZXN1bHQgKHZub2RlLCBkYXRhLCBjb250ZXh0Vm0sIG9wdGlvbnMsIHJlbmRlckNvbnRleHQpIHtcbiAgLy8gIzc4MTcgY2xvbmUgbm9kZSBiZWZvcmUgc2V0dGluZyBmbkNvbnRleHQsIG90aGVyd2lzZSBpZiB0aGUgbm9kZSBpcyByZXVzZWRcbiAgLy8gKGUuZy4gaXQgd2FzIGZyb20gYSBjYWNoZWQgbm9ybWFsIHNsb3QpIHRoZSBmbkNvbnRleHQgY2F1c2VzIG5hbWVkIHNsb3RzXG4gIC8vIHRoYXQgc2hvdWxkIG5vdCBiZSBtYXRjaGVkIHRvIG1hdGNoLlxuICB2YXIgY2xvbmUgPSBjbG9uZVZOb2RlKHZub2RlKTtcbiAgY2xvbmUuZm5Db250ZXh0ID0gY29udGV4dFZtO1xuICBjbG9uZS5mbk9wdGlvbnMgPSBvcHRpb25zO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIChjbG9uZS5kZXZ0b29sc01ldGEgPSBjbG9uZS5kZXZ0b29sc01ldGEgfHwge30pLnJlbmRlckNvbnRleHQgPSByZW5kZXJDb250ZXh0O1xuICB9XG4gIGlmIChkYXRhLnNsb3QpIHtcbiAgICAoY2xvbmUuZGF0YSB8fCAoY2xvbmUuZGF0YSA9IHt9KSkuc2xvdCA9IGRhdGEuc2xvdDtcbiAgfVxuICByZXR1cm4gY2xvbmVcbn1cblxuZnVuY3Rpb24gbWVyZ2VQcm9wcyAodG8sIGZyb20pIHtcbiAgZm9yICh2YXIga2V5IGluIGZyb20pIHtcbiAgICB0b1tjYW1lbGl6ZShrZXkpXSA9IGZyb21ba2V5XTtcbiAgfVxufVxuXG4vKiAgKi9cblxuLyogICovXG5cbi8qICAqL1xuXG4vKiAgKi9cblxuLy8gaW5saW5lIGhvb2tzIHRvIGJlIGludm9rZWQgb24gY29tcG9uZW50IFZOb2RlcyBkdXJpbmcgcGF0Y2hcbnZhciBjb21wb25lbnRWTm9kZUhvb2tzID0ge1xuICBpbml0OiBmdW5jdGlvbiBpbml0ICh2bm9kZSwgaHlkcmF0aW5nKSB7XG4gICAgaWYgKFxuICAgICAgdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgJiZcbiAgICAgICF2bm9kZS5jb21wb25lbnRJbnN0YW5jZS5faXNEZXN0cm95ZWQgJiZcbiAgICAgIHZub2RlLmRhdGEua2VlcEFsaXZlXG4gICAgKSB7XG4gICAgICAvLyBrZXB0LWFsaXZlIGNvbXBvbmVudHMsIHRyZWF0IGFzIGEgcGF0Y2hcbiAgICAgIHZhciBtb3VudGVkTm9kZSA9IHZub2RlOyAvLyB3b3JrIGFyb3VuZCBmbG93XG4gICAgICBjb21wb25lbnRWTm9kZUhvb2tzLnByZXBhdGNoKG1vdW50ZWROb2RlLCBtb3VudGVkTm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBjaGlsZCA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlID0gY3JlYXRlQ29tcG9uZW50SW5zdGFuY2VGb3JWbm9kZShcbiAgICAgICAgdm5vZGUsXG4gICAgICAgIGFjdGl2ZUluc3RhbmNlXG4gICAgICApO1xuICAgICAgY2hpbGQuJG1vdW50KGh5ZHJhdGluZyA/IHZub2Rl
118LmVsbSA6IHVuZGVmaW5lZCwgaHlkcmF0aW5nKTtcbiAgICB9XG4gIH0sXG5cbiAgcHJlcGF0Y2g6IGZ1bmN0aW9uIHByZXBhdGNoIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHZub2RlLmNvbXBvbmVudE9wdGlvbnM7XG4gICAgdmFyIGNoaWxkID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgPSBvbGRWbm9kZS5jb21wb25lbnRJbnN0YW5jZTtcbiAgICB1cGRhdGVDaGlsZENvbXBvbmVudChcbiAgICAgIGNoaWxkLFxuICAgICAgb3B0aW9ucy5wcm9wc0RhdGEsIC8vIHVwZGF0ZWQgcHJvcHNcbiAgICAgIG9wdGlvbnMubGlzdGVuZXJzLCAvLyB1cGRhdGVkIGxpc3RlbmVyc1xuICAgICAgdm5vZGUsIC8vIG5ldyBwYXJlbnQgdm5vZGVcbiAgICAgIG9wdGlvbnMuY2hpbGRyZW4gLy8gbmV3IGNoaWxkcmVuXG4gICAgKTtcbiAgfSxcblxuICBpbnNlcnQ6IGZ1bmN0aW9uIGluc2VydCAodm5vZGUpIHtcbiAgICB2YXIgY29udGV4dCA9IHZub2RlLmNvbnRleHQ7XG4gICAgdmFyIGNvbXBvbmVudEluc3RhbmNlID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgaWYgKCFjb21wb25lbnRJbnN0YW5jZS5faXNNb3VudGVkKSB7XG4gICAgICBjb21wb25lbnRJbnN0YW5jZS5faXNNb3VudGVkID0gdHJ1ZTtcbiAgICAgIGNhbGxIb29rKGNvbXBvbmVudEluc3RhbmNlLCAnbW91bnRlZCcpO1xuICAgIH1cbiAgICBpZiAodm5vZGUuZGF0YS5rZWVwQWxpdmUpIHtcbiAgICAgIGlmIChjb250ZXh0Ll9pc01vdW50ZWQpIHtcbiAgICAgICAgLy8gdnVlLXJvdXRlciMxMjEyXG4gICAgICAgIC8vIER1cmluZyB1cGRhdGVzLCBhIGtlcHQtYWxpdmUgY29tcG9uZW50J3MgY2hpbGQgY29tcG9uZW50cyBtYXlcbiAgICAgICAgLy8gY2hhbmdlLCBzbyBkaXJlY3RseSB3YWxraW5nIHRoZSB0cmVlIGhlcmUgbWF5IGNhbGwgYWN0aXZhdGVkIGhvb2tzXG4gICAgICAgIC8vIG9uIGluY29ycmVjdCBjaGlsZHJlbi4gSW5zdGVhZCB3ZSBwdXNoIHRoZW0gaW50byBhIHF1ZXVlIHdoaWNoIHdpbGxcbiAgICAgICAgLy8gYmUgcHJvY2Vzc2VkIGFmdGVyIHRoZSB3aG9sZSBwYXRjaCBwcm9jZXNzIGVuZGVkLlxuICAgICAgICBxdWV1ZUFjdGl2YXRlZENvbXBvbmVudChjb21wb25lbnRJbnN0YW5jZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KGNvbXBvbmVudEluc3RhbmNlLCB0cnVlIC8qIGRpcmVjdCAqLyk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3kgKHZub2RlKSB7XG4gICAgdmFyIGNvbXBvbmVudEluc3RhbmNlID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgaWYgKCFjb21wb25lbnRJbnN0YW5jZS5faXNEZXN0cm95ZWQpIHtcbiAgICAgIGlmICghdm5vZGUuZGF0YS5rZWVwQWxpdmUpIHtcbiAgICAgICAgY29tcG9uZW50SW5zdGFuY2UuJGRlc3Ryb3koKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlYWN0aXZhdGVDaGlsZENvbXBvbmVudChjb21wb25lbnRJbnN0YW5jZSwgdHJ1ZSAvKiBkaXJlY3QgKi8pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxudmFyIGhvb2tzVG9NZXJnZSA9IE9iamVjdC5rZXlzKGNvbXBvbmVudFZOb2RlSG9va3MpO1xuXG5mdW5jdGlvbiBjcmVhdGVDb21wb25lbnQgKFxuICBDdG9yLFxuICBkYXRhLFxuICBjb250ZXh0LFxuICBjaGlsZHJlbixcbiAgdGFnXG4pIHtcbiAgaWYgKGlzVW5kZWYoQ3RvcikpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHZhciBiYXNlQ3RvciA9IGNvbnRleHQuJG9wdGlvbnMuX2Jhc2U7XG5cbiAgLy8gcGxhaW4gb3B0aW9ucyBvYmplY3Q6IHR1cm4gaXQgaW50byBhIGNvbnN0cnVjdG9yXG4gIGlmIChpc09iamVjdChDdG9yKSkge1xuICAgIEN0b3IgPSBiYXNlQ3Rvci5leHRlbmQoQ3Rvcik7XG4gIH1cblxuICAvLyBpZiBhdCB0aGlzIHN0YWdlIGl0J3Mgbm90IGEgY29uc3RydWN0b3Igb3IgYW4gYXN5bmMgY29tcG9uZW50IGZhY3RvcnksXG4gIC8vIHJlamVjdC5cbiAgaWYgKHR5cGVvZiBDdG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHdhcm4oKFwiSW52YWxpZCBDb21wb25lbnQgZGVmaW5pdGlvbjogXCIgKyAoU3RyaW5nKEN0b3IpKSksIGNvbnRleHQpO1xuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIGFzeW5jIGNvbXBvbmVudFxuICB2YXIgYXN5bmNGYWN0b3J5O1xuICBpZiAoaXNVbmRlZihDdG9yLmNpZCkpIHtcbiAgICBhc3luY0ZhY3RvcnkgPSBDdG9yO1xuICAgIEN0b3IgPSByZXNvbHZlQXN5bmNDb21wb25lbnQoYXN5bmNGYWN0b3J5LCBiYXNlQ3Rvcik7XG4gICAgaWYgKEN0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gcmV0dXJuIGEgcGxhY2Vob2xkZXIgbm9kZSBmb3IgYXN5bmMgY29tcG9uZW50LCB3aGljaCBpcyByZW5kZXJlZFxuICAgICAgLy8gYXMgYSBjb21tZW50IG5vZGUgYnV0IHByZXNlcnZlcyBhbGwgdGhlIHJhdyBpbmZvcm1hdGlvbiBmb3IgdGhlIG5vZGUuXG4gICAgICAvLyB0aGUgaW5mb3JtYXRpb24gd2lsbCBiZSB1c2VkIGZvciBhc3luYyBzZXJ2ZXItcmVuZGVyaW5nIGFuZCBoeWRyYXRpb24uXG4gICAgICByZXR1cm4gY3JlYXRlQXN5bmNQbGFjZWhvbGRlcihcbiAgICAgICAgYXN5bmNGYWN0b3J5LFxuICAgICAgICBkYXRhLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgdGFnXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgZGF0YSA9IGRhdGEgfHwge307XG5cbiAgLy8gcmVzb2x2ZSBjb25zdHJ1Y3RvciBvcHRpb25zIGluIGNhc2UgZ2xvYmFsIG1peGlucyBhcmUgYXBwbGllZCBhZnRlclxuICAvLyBjb21wb25lbnQgY29uc3RydWN0b3IgY3JlYXRpb25cbiAgcmVzb2x2ZUNvbnN0cnVjdG9yT3B0aW9ucyhDdG9yKTtcblxuICAvLyB0cmFuc2Zvcm0gY29tcG9uZW50IHYtbW9kZWwgZGF0YSBpbnRvIHByb3BzICYgZXZlbnRzXG4gIGlmIChpc0RlZihkYXRhLm1vZGVsKSkge1xuICAgIHRyYW5zZm9ybU1vZGVsKEN0b3Iub3B0aW9ucywgZGF0YSk7XG4gIH1cblxuICAvLyBleHRyYWN0IHByb3BzXG4gIHZhciBwcm9wc0RhdGEgPSBleHRyYWN0UHJvcHNGcm9tVk5vZGVEYXRhKGRhdGEsIEN0b3IsIHRhZyk7XG5cbiAgLy8gZnVuY3Rpb25hbCBjb21wb25lbnRcbiAgaWYgKGlzVHJ1ZShDdG9yLm9wdGlvbnMuZnVuY3Rpb25hbCkpIHtcbiAgICByZXR1cm4gY3JlYXRlRnVuY3Rpb25hbENvbXBvbmVudChDdG9yLCBwcm9wc0RhdGEsIGRhdGEsIGNvbnRleHQsIGNoaWxkcmVuKVxuICB9XG5cbiAgLy8gZXh0cmFjdCBsaXN0ZW5lcnMsIHNpbmNlIHRoZXNlIG5lZWRzIHRvIGJlIHRyZWF0ZWQgYXNcbiAgLy8gY2hpbGQgY29tcG9uZW50IGxpc3RlbmVycyBpbnN0ZWFkIG9mIERPTSBsaXN0ZW5lcnNcbiAgdmFyIGxpc3RlbmVycyA9IGRhdGEub247XG4gIC8vIHJlcGxhY2Ugd2l0aCBsaXN0ZW5lcnMgd2l0aCAubmF0aXZlIG1vZGlmaWVyXG4gIC8vIHNvIGl0IGdldHMgcHJvY2Vzc2VkIGR1cmluZyBwYXJlbnQgY29tcG9uZW50IHBhdGNoLlxuICBkYXRhLm9uID0gZGF0YS5uYXRpdmVPbjtcblxuICBpZiAoaXNUcnVlKEN0b3Iub3B0aW9ucy5hYnN0cmFjdCkpIHtcbiAgICAvLyBhYnN0cmFjdCBjb21wb25lbnRzIGRvIG5vdCBrZWVwIGFueXRoaW5nXG4gICAgLy8gb3RoZXIgdGhhbiBwcm9wcyAmIGxpc3RlbmVycyAmIHNsb3RcblxuICAgIC8vIHdvcmsgYXJvdW5kIGZsb3dcbiAgICB2YXIgc2xvdCA9IGRhdGEuc2xvdDtcbiAgICBkYXRhID0ge307XG4gICAgaWYgKHNsb3QpIHtcbiAgICAgIGRhdGEuc2xvdCA9IHNsb3Q7XG4gICAgfVxuICB9XG5cbiAgLy8gaW5zdGFsbCBjb21wb25lbnQgbWFuYWdlbWVudCBob29rcyBvbnRvIHRoZSBwbGFjZWhvbGRlciBub2RlXG4gIGluc3RhbGxDb21wb25lbnRIb29rcyhkYXRhKTtcblxuICAvLyByZXR1cm4gYSBwbGFjZWhvbGRlciB2bm9kZVxuICB2YXIgbmFtZSA9IEN0b3Iub3B0aW9ucy5uYW1lIHx8IHRhZztcbiAgdmFyIHZub2RlID0gbmV3IFZOb2RlKFxuICAgIChcInZ1ZS1jb21wb25lbnQtXCIgKyAoQ3Rvci5jaWQpICsgKG5hbWUgPyAoXCItXCIgKyBuYW1lKSA6ICcnKSksXG4gICAgZGF0YSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgY29udGV4dCxcbiAgICB7IEN0b3I6IEN0b3IsIHByb3BzRGF0YTogcHJvcHNEYXRhLCBsaXN0ZW5lcnM6IGxpc3RlbmVycywgdGFnOiB0YWcsIGNoaWxkcmVuOiBjaGlsZHJlbiB9LFxuICAgIGFzeW5jRmFjdG9yeVxuICApO1xuXG4gIHJldHVybi
118B2bm9kZVxufVxuXG5mdW5jdGlvbiBjcmVhdGVDb21wb25lbnRJbnN0YW5jZUZvclZub2RlIChcbiAgLy8gd2Uga25vdyBpdCdzIE1vdW50ZWRDb21wb25lbnRWTm9kZSBidXQgZmxvdyBkb2Vzbid0XG4gIHZub2RlLFxuICAvLyBhY3RpdmVJbnN0YW5jZSBpbiBsaWZlY3ljbGUgc3RhdGVcbiAgcGFyZW50XG4pIHtcbiAgdmFyIG9wdGlvbnMgPSB7XG4gICAgX2lzQ29tcG9uZW50OiB0cnVlLFxuICAgIF9wYXJlbnRWbm9kZTogdm5vZGUsXG4gICAgcGFyZW50OiBwYXJlbnRcbiAgfTtcbiAgLy8gY2hlY2sgaW5saW5lLXRlbXBsYXRlIHJlbmRlciBmdW5jdGlvbnNcbiAgdmFyIGlubGluZVRlbXBsYXRlID0gdm5vZGUuZGF0YS5pbmxpbmVUZW1wbGF0ZTtcbiAgaWYgKGlzRGVmKGlubGluZVRlbXBsYXRlKSkge1xuICAgIG9wdGlvbnMucmVuZGVyID0gaW5saW5lVGVtcGxhdGUucmVuZGVyO1xuICAgIG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gaW5saW5lVGVtcGxhdGUuc3RhdGljUmVuZGVyRm5zO1xuICB9XG4gIHJldHVybiBuZXcgdm5vZGUuY29tcG9uZW50T3B0aW9ucy5DdG9yKG9wdGlvbnMpXG59XG5cbmZ1bmN0aW9uIGluc3RhbGxDb21wb25lbnRIb29rcyAoZGF0YSkge1xuICB2YXIgaG9va3MgPSBkYXRhLmhvb2sgfHwgKGRhdGEuaG9vayA9IHt9KTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBob29rc1RvTWVyZ2UubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0gaG9va3NUb01lcmdlW2ldO1xuICAgIHZhciBleGlzdGluZyA9IGhvb2tzW2tleV07XG4gICAgdmFyIHRvTWVyZ2UgPSBjb21wb25lbnRWTm9kZUhvb2tzW2tleV07XG4gICAgaWYgKGV4aXN0aW5nICE9PSB0b01lcmdlICYmICEoZXhpc3RpbmcgJiYgZXhpc3RpbmcuX21lcmdlZCkpIHtcbiAgICAgIGhvb2tzW2tleV0gPSBleGlzdGluZyA/IG1lcmdlSG9vayQxKHRvTWVyZ2UsIGV4aXN0aW5nKSA6IHRvTWVyZ2U7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1lcmdlSG9vayQxIChmMSwgZjIpIHtcbiAgdmFyIG1lcmdlZCA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgLy8gZmxvdyBjb21wbGFpbnMgYWJvdXQgZXh0cmEgYXJncyB3aGljaCBpcyB3aHkgd2UgdXNlIGFueVxuICAgIGYxKGEsIGIpO1xuICAgIGYyKGEsIGIpO1xuICB9O1xuICBtZXJnZWQuX21lcmdlZCA9IHRydWU7XG4gIHJldHVybiBtZXJnZWRcbn1cblxuLy8gdHJhbnNmb3JtIGNvbXBvbmVudCB2LW1vZGVsIGluZm8gKHZhbHVlIGFuZCBjYWxsYmFjaykgaW50b1xuLy8gcHJvcCBhbmQgZXZlbnQgaGFuZGxlciByZXNwZWN0aXZlbHkuXG5mdW5jdGlvbiB0cmFuc2Zvcm1Nb2RlbCAob3B0aW9ucywgZGF0YSkge1xuICB2YXIgcHJvcCA9IChvcHRpb25zLm1vZGVsICYmIG9wdGlvbnMubW9kZWwucHJvcCkgfHwgJ3ZhbHVlJztcbiAgdmFyIGV2ZW50ID0gKG9wdGlvbnMubW9kZWwgJiYgb3B0aW9ucy5tb2RlbC5ldmVudCkgfHwgJ2lucHV0J1xuICA7KGRhdGEuYXR0cnMgfHwgKGRhdGEuYXR0cnMgPSB7fSkpW3Byb3BdID0gZGF0YS5tb2RlbC52YWx1ZTtcbiAgdmFyIG9uID0gZGF0YS5vbiB8fCAoZGF0YS5vbiA9IHt9KTtcbiAgdmFyIGV4aXN0aW5nID0gb25bZXZlbnRdO1xuICB2YXIgY2FsbGJhY2sgPSBkYXRhLm1vZGVsLmNhbGxiYWNrO1xuICBpZiAoaXNEZWYoZXhpc3RpbmcpKSB7XG4gICAgaWYgKFxuICAgICAgQXJyYXkuaXNBcnJheShleGlzdGluZylcbiAgICAgICAgPyBleGlzdGluZy5pbmRleE9mKGNhbGxiYWNrKSA9PT0gLTFcbiAgICAgICAgOiBleGlzdGluZyAhPT0gY2FsbGJhY2tcbiAgICApIHtcbiAgICAgIG9uW2V2ZW50XSA9IFtjYWxsYmFja10uY29uY2F0KGV4aXN0aW5nKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb25bZXZlbnRdID0gY2FsbGJhY2s7XG4gIH1cbn1cblxuLyogICovXG5cbnZhciBTSU1QTEVfTk9STUFMSVpFID0gMTtcbnZhciBBTFdBWVNfTk9STUFMSVpFID0gMjtcblxuLy8gd3JhcHBlciBmdW5jdGlvbiBmb3IgcHJvdmlkaW5nIGEgbW9yZSBmbGV4aWJsZSBpbnRlcmZhY2Vcbi8vIHdpdGhvdXQgZ2V0dGluZyB5ZWxsZWQgYXQgYnkgZmxvd1xuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCAoXG4gIGNvbnRleHQsXG4gIHRhZyxcbiAgZGF0YSxcbiAgY2hpbGRyZW4sXG4gIG5vcm1hbGl6YXRpb25UeXBlLFxuICBhbHdheXNOb3JtYWxpemVcbikge1xuICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSB8fCBpc1ByaW1pdGl2ZShkYXRhKSkge1xuICAgIG5vcm1hbGl6YXRpb25UeXBlID0gY2hpbGRyZW47XG4gICAgY2hpbGRyZW4gPSBkYXRhO1xuICAgIGRhdGEgPSB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKGlzVHJ1ZShhbHdheXNOb3JtYWxpemUpKSB7XG4gICAgbm9ybWFsaXphdGlvblR5cGUgPSBBTFdBWVNfTk9STUFMSVpFO1xuICB9XG4gIHJldHVybiBfY3JlYXRlRWxlbWVudChjb250ZXh0LCB0YWcsIGRhdGEsIGNoaWxkcmVuLCBub3JtYWxpemF0aW9uVHlwZSlcbn1cblxuZnVuY3Rpb24gX2NyZWF0ZUVsZW1lbnQgKFxuICBjb250ZXh0LFxuICB0YWcsXG4gIGRhdGEsXG4gIGNoaWxkcmVuLFxuICBub3JtYWxpemF0aW9uVHlwZVxuKSB7XG4gIGlmIChpc0RlZihkYXRhKSAmJiBpc0RlZigoZGF0YSkuX19vYl9fKSkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgIFwiQXZvaWQgdXNpbmcgb2JzZXJ2ZWQgZGF0YSBvYmplY3QgYXMgdm5vZGUgZGF0YTogXCIgKyAoSlNPTi5zdHJpbmdpZnkoZGF0YSkpICsgXCJcXG5cIiArXG4gICAgICAnQWx3YXlzIGNyZWF0ZSBmcmVzaCB2bm9kZSBkYXRhIG9iamVjdHMgaW4gZWFjaCByZW5kZXIhJyxcbiAgICAgIGNvbnRleHRcbiAgICApO1xuICAgIHJldHVybiBjcmVhdGVFbXB0eVZOb2RlKClcbiAgfVxuICAvLyBvYmplY3Qgc3ludGF4IGluIHYtYmluZFxuICBpZiAoaXNEZWYoZGF0YSkgJiYgaXNEZWYoZGF0YS5pcykpIHtcbiAgICB0YWcgPSBkYXRhLmlzO1xuICB9XG4gIGlmICghdGFnKSB7XG4gICAgLy8gaW4gY2FzZSBvZiBjb21wb25lbnQgOmlzIHNldCB0byBmYWxzeSB2YWx1ZVxuICAgIHJldHVybiBjcmVhdGVFbXB0eVZOb2RlKClcbiAgfVxuICAvLyB3YXJuIGFnYWluc3Qgbm9uLXByaW1pdGl2ZSBrZXlcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICBpc0RlZihkYXRhKSAmJiBpc0RlZihkYXRhLmtleSkgJiYgIWlzUHJpbWl0aXZlKGRhdGEua2V5KVxuICApIHtcbiAgICB7XG4gICAgICB3YXJuKFxuICAgICAgICAnQXZvaWQgdXNpbmcgbm9uLXByaW1pdGl2ZSB2YWx1ZSBhcyBrZXksICcgK1xuICAgICAgICAndXNlIHN0cmluZy9udW1iZXIgdmFsdWUgaW5zdGVhZC4nLFxuICAgICAgICBjb250ZXh0XG4gICAgICApO1xuICAgIH1cbiAgfVxuICAvLyBzdXBwb3J0IHNpbmdsZSBmdW5jdGlvbiBjaGlsZHJlbiBhcyBkZWZhdWx0IHNjb3BlZCBzbG90XG4gIGlmIChBcnJheS5pc0FycmF
1185KGNoaWxkcmVuKSAmJlxuICAgIHR5cGVvZiBjaGlsZHJlblswXSA9PT0gJ2Z1bmN0aW9uJ1xuICApIHtcbiAgICBkYXRhID0gZGF0YSB8fCB7fTtcbiAgICBkYXRhLnNjb3BlZFNsb3RzID0geyBkZWZhdWx0OiBjaGlsZHJlblswXSB9O1xuICAgIGNoaWxkcmVuLmxlbmd0aCA9IDA7XG4gIH1cbiAgaWYgKG5vcm1hbGl6YXRpb25UeXBlID09PSBBTFdBWVNfTk9STUFMSVpFKSB7XG4gICAgY2hpbGRyZW4gPSBub3JtYWxpemVDaGlsZHJlbihjaGlsZHJlbik7XG4gIH0gZWxzZSBpZiAobm9ybWFsaXphdGlvblR5cGUgPT09IFNJTVBMRV9OT1JNQUxJWkUpIHtcbiAgICBjaGlsZHJlbiA9IHNpbXBsZU5vcm1hbGl6ZUNoaWxkcmVuKGNoaWxkcmVuKTtcbiAgfVxuICB2YXIgdm5vZGUsIG5zO1xuICBpZiAodHlwZW9mIHRhZyA9PT0gJ3N0cmluZycpIHtcbiAgICB2YXIgQ3RvcjtcbiAgICBucyA9IChjb250ZXh0LiR2bm9kZSAmJiBjb250ZXh0LiR2bm9kZS5ucykgfHwgY29uZmlnLmdldFRhZ05hbWVzcGFjZSh0YWcpO1xuICAgIGlmIChjb25maWcuaXNSZXNlcnZlZFRhZyh0YWcpKSB7XG4gICAgICAvLyBwbGF0Zm9ybSBidWlsdC1pbiBlbGVtZW50c1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgaXNEZWYoZGF0YSkgJiYgaXNEZWYoZGF0YS5uYXRpdmVPbikgJiYgZGF0YS50YWcgIT09ICdjb21wb25lbnQnKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgKFwiVGhlIC5uYXRpdmUgbW9kaWZpZXIgZm9yIHYtb24gaXMgb25seSB2YWxpZCBvbiBjb21wb25lbnRzIGJ1dCBpdCB3YXMgdXNlZCBvbiA8XCIgKyB0YWcgKyBcIj4uXCIpLFxuICAgICAgICAgIGNvbnRleHRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHZub2RlID0gbmV3IFZOb2RlKFxuICAgICAgICBjb25maWcucGFyc2VQbGF0Zm9ybVRhZ05hbWUodGFnKSwgZGF0YSwgY2hpbGRyZW4sXG4gICAgICAgIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBjb250ZXh0XG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoKCFkYXRhIHx8ICFkYXRhLnByZSkgJiYgaXNEZWYoQ3RvciA9IHJlc29sdmVBc3NldChjb250ZXh0LiRvcHRpb25zLCAnY29tcG9uZW50cycsIHRhZykpKSB7XG4gICAgICAvLyBjb21wb25lbnRcbiAgICAgIHZub2RlID0gY3JlYXRlQ29tcG9uZW50KEN0b3IsIGRhdGEsIGNvbnRleHQsIGNoaWxkcmVuLCB0YWcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1bmtub3duIG9yIHVubGlzdGVkIG5hbWVzcGFjZWQgZWxlbWVudHNcbiAgICAgIC8vIGNoZWNrIGF0IHJ1bnRpbWUgYmVjYXVzZSBpdCBtYXkgZ2V0IGFzc2lnbmVkIGEgbmFtZXNwYWNlIHdoZW4gaXRzXG4gICAgICAvLyBwYXJlbnQgbm9ybWFsaXplcyBjaGlsZHJlblxuICAgICAgdm5vZGUgPSBuZXcgVk5vZGUoXG4gICAgICAgIHRhZywgZGF0YSwgY2hpbGRyZW4sXG4gICAgICAgIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBjb250ZXh0XG4gICAgICApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBkaXJlY3QgY29tcG9uZW50IG9wdGlvbnMgLyBjb25zdHJ1Y3RvclxuICAgIHZub2RlID0gY3JlYXRlQ29tcG9uZW50KHRhZywgZGF0YSwgY29udGV4dCwgY2hpbGRyZW4pO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHZub2RlKSkge1xuICAgIHJldHVybiB2bm9kZVxuICB9IGVsc2UgaWYgKGlzRGVmKHZub2RlKSkge1xuICAgIGlmIChpc0RlZihucykpIHsgYXBwbHlOUyh2bm9kZSwgbnMpOyB9XG4gICAgaWYgKGlzRGVmKGRhdGEpKSB7IHJlZ2lzdGVyRGVlcEJpbmRpbmdzKGRhdGEpOyB9XG4gICAgcmV0dXJuIHZub2RlXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNyZWF0ZUVtcHR5Vk5vZGUoKVxuICB9XG59XG5cbmZ1bmN0aW9uIGFwcGx5TlMgKHZub2RlLCBucywgZm9yY2UpIHtcbiAgdm5vZGUubnMgPSBucztcbiAgaWYgKHZub2RlLnRhZyA9PT0gJ2ZvcmVpZ25PYmplY3QnKSB7XG4gICAgLy8gdXNlIGRlZmF1bHQgbmFtZXNwYWNlIGluc2lkZSBmb3JlaWduT2JqZWN0XG4gICAgbnMgPSB1bmRlZmluZWQ7XG4gICAgZm9yY2UgPSB0cnVlO1xuICB9XG4gIGlmIChpc0RlZih2bm9kZS5jaGlsZHJlbikpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IHZub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgdmFyIGNoaWxkID0gdm5vZGUuY2hpbGRyZW5baV07XG4gICAgICBpZiAoaXNEZWYoY2hpbGQudGFnKSAmJiAoXG4gICAgICAgIGlzVW5kZWYoY2hpbGQubnMpIHx8IChpc1RydWUoZm9yY2UpICYmIGNoaWxkLnRhZyAhPT0gJ3N2ZycpKSkge1xuICAgICAgICBhcHBseU5TKGNoaWxkLCBucywgZm9yY2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyByZWYgIzUzMThcbi8vIG5lY2Vzc2FyeSB0byBlbnN1cmUgcGFyZW50IHJlLXJlbmRlciB3aGVuIGRlZXAgYmluZGluZ3MgbGlrZSA6c3R5bGUgYW5kXG4vLyA6Y2xhc3MgYXJlIHVzZWQgb24gc2xvdCBub2Rlc1xuZnVuY3Rpb24gcmVnaXN0ZXJEZWVwQmluZGluZ3MgKGRhdGEpIHtcbiAgaWYgKGlzT2JqZWN0KGRhdGEuc3R5bGUpKSB7XG4gICAgdHJhdmVyc2UoZGF0YS5zdHlsZSk7XG4gIH1cbiAgaWYgKGlzT2JqZWN0KGRhdGEuY2xhc3MpKSB7XG4gICAgdHJhdmVyc2UoZGF0YS5jbGFzcyk7XG4gIH1cbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGluaXRSZW5kZXIgKHZtKSB7XG4gIHZtLl92bm9kZSA9IG51bGw7IC8vIHRoZSByb290IG9mIHRoZSBjaGlsZCB0cmVlXG4gIHZtLl9zdGF0aWNUcmVlcyA9IG51bGw7IC8vIHYtb25jZSBjYWNoZWQgdHJlZXNcbiAgdmFyIG9wdGlvbnMgPSB2bS4kb3B0aW9ucztcbiAgdmFyIHBhcmVudFZub2RlID0gdm0uJHZub2RlID0gb3B0aW9ucy5fcGFyZW50Vm5vZGU7IC8vIHRoZSBwbGFjZWhvbGRlciBub2RlIGluIHBhcmVudCB0cmVlXG4gIHZhciByZW5kZXJDb250ZXh0ID0gcGFyZW50Vm5vZGUgJiYgcGFyZW50Vm5vZGUuY29udGV4dDtcbiAgdm0uJHNsb3RzID0gcmVzb2x2ZVNsb3RzKG9wdGlvbnMuX3JlbmRlckNoaWxkcmVuLCByZW5kZXJDb250ZXh0KTtcbiAgdm0uJHNjb3BlZFNsb3RzID0gZW1wdHlPYmplY3Q7XG4gIC8vIGJpbmQgdGhlIGNyZWF0ZUVsZW1lbnQgZm4gdG8gdGhpcyBpbnN0YW5jZVxuICAvLyBzbyB0aGF0IHdlIGdldCBwcm9wZXIgcmVuZGVyIGNvbnRleHQgaW5zaWRlIGl0LlxuICAvLyBhcmdzIG9yZGVyOiB0YWcsIGRhdGEsIGNoaWxkcmVuLCBub3JtYWxpemF0aW9uVHlwZSwgYWx3YXlzTm9ybWFsaXplXG4gIC8vIGludGVybmFsIHZlcnNpb24gaXMgdXNlZCBieSByZW5kZXIgZnVuY3Rpb25zIGNvbXBpbGVkIGZyb20gdGVtcGxhdGVzXG4gIHZtLl9jID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHsgcmV0dXJuIGNyZWF0ZUVsZW1lbnQodm0sIGEsIGIsIGMsIGQsIGZhbHNlKTsgfTtcbiAgLy8gbm9ybWFsaXphdGlvbiBpcyBhbHdheXMgYXBwbGllZCBmb3IgdGhlIHB1YmxpYyB2ZXJzaW9uLCB1c2VkIGluXG4gIC8vIHVzZXItd3JpdHRlbiByZW5kZXIgZnVuY3Rpb25zLlxuICB2bS4kY3JlYXRlRWxlbWVudCA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7IHJldHVybi
118BjcmVhdGVFbGVtZW50KHZtLCBhLCBiLCBjLCBkLCB0cnVlKTsgfTtcblxuICAvLyAkYXR0cnMgJiAkbGlzdGVuZXJzIGFyZSBleHBvc2VkIGZvciBlYXNpZXIgSE9DIGNyZWF0aW9uLlxuICAvLyB0aGV5IG5lZWQgdG8gYmUgcmVhY3RpdmUgc28gdGhhdCBIT0NzIHVzaW5nIHRoZW0gYXJlIGFsd2F5cyB1cGRhdGVkXG4gIHZhciBwYXJlbnREYXRhID0gcGFyZW50Vm5vZGUgJiYgcGFyZW50Vm5vZGUuZGF0YTtcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGRlZmluZVJlYWN0aXZlJCQxKHZtLCAnJGF0dHJzJywgcGFyZW50RGF0YSAmJiBwYXJlbnREYXRhLmF0dHJzIHx8IGVtcHR5T2JqZWN0LCBmdW5jdGlvbiAoKSB7XG4gICAgICAhaXNVcGRhdGluZ0NoaWxkQ29tcG9uZW50ICYmIHdhcm4oXCIkYXR0cnMgaXMgcmVhZG9ubHkuXCIsIHZtKTtcbiAgICB9LCB0cnVlKTtcbiAgICBkZWZpbmVSZWFjdGl2ZSQkMSh2bSwgJyRsaXN0ZW5lcnMnLCBvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnMgfHwgZW1wdHlPYmplY3QsIGZ1bmN0aW9uICgpIHtcbiAgICAgICFpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQgJiYgd2FybihcIiRsaXN0ZW5lcnMgaXMgcmVhZG9ubHkuXCIsIHZtKTtcbiAgICB9LCB0cnVlKTtcbiAgfSBlbHNlIHtcbiAgICBkZWZpbmVSZWFjdGl2ZSQkMSh2bSwgJyRhdHRycycsIHBhcmVudERhdGEgJiYgcGFyZW50RGF0YS5hdHRycyB8fCBlbXB0eU9iamVjdCwgbnVsbCwgdHJ1ZSk7XG4gICAgZGVmaW5lUmVhY3RpdmUkJDEodm0sICckbGlzdGVuZXJzJywgb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzIHx8IGVtcHR5T2JqZWN0LCBudWxsLCB0cnVlKTtcbiAgfVxufVxuXG52YXIgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlID0gbnVsbDtcblxuZnVuY3Rpb24gcmVuZGVyTWl4aW4gKFZ1ZSkge1xuICAvLyBpbnN0YWxsIHJ1bnRpbWUgY29udmVuaWVuY2UgaGVscGVyc1xuICBpbnN0YWxsUmVuZGVySGVscGVycyhWdWUucHJvdG90eXBlKTtcblxuICBWdWUucHJvdG90eXBlLiRuZXh0VGljayA9IGZ1bmN0aW9uIChmbikge1xuICAgIHJldHVybiBuZXh0VGljayhmbiwgdGhpcylcbiAgfTtcblxuICBWdWUucHJvdG90eXBlLl9yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICB2YXIgcmVmID0gdm0uJG9wdGlvbnM7XG4gICAgdmFyIHJlbmRlciA9IHJlZi5yZW5kZXI7XG4gICAgdmFyIF9wYXJlbnRWbm9kZSA9IHJlZi5fcGFyZW50Vm5vZGU7XG5cbiAgICBpZiAoX3BhcmVudFZub2RlKSB7XG4gICAgICB2bS4kc2NvcGVkU2xvdHMgPSBub3JtYWxpemVTY29wZWRTbG90cyhcbiAgICAgICAgX3BhcmVudFZub2RlLmRhdGEuc2NvcGVkU2xvdHMsXG4gICAgICAgIHZtLiRzbG90cyxcbiAgICAgICAgdm0uJHNjb3BlZFNsb3RzXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIHNldCBwYXJlbnQgdm5vZGUuIHRoaXMgYWxsb3dzIHJlbmRlciBmdW5jdGlvbnMgdG8gaGF2ZSBhY2Nlc3NcbiAgICAvLyB0byB0aGUgZGF0YSBvbiB0aGUgcGxhY2Vob2xkZXIgbm9kZS5cbiAgICB2bS4kdm5vZGUgPSBfcGFyZW50Vm5vZGU7XG4gICAgLy8gcmVuZGVyIHNlbGZcbiAgICB2YXIgdm5vZGU7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFRoZXJlJ3Mgbm8gbmVlZCB0byBtYWludGFpbiBhIHN0YWNrIGJlY2F1c2UgYWxsIHJlbmRlciBmbnMgYXJlIGNhbGxlZFxuICAgICAgLy8gc2VwYXJhdGVseSBmcm9tIG9uZSBhbm90aGVyLiBOZXN0ZWQgY29tcG9uZW50J3MgcmVuZGVyIGZucyBhcmUgY2FsbGVkXG4gICAgICAvLyB3aGVuIHBhcmVudCBjb21wb25lbnQgaXMgcGF0Y2hlZC5cbiAgICAgIGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZSA9IHZtO1xuICAgICAgdm5vZGUgPSByZW5kZXIuY2FsbCh2bS5fcmVuZGVyUHJveHksIHZtLiRjcmVhdGVFbGVtZW50KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBoYW5kbGVFcnJvcihlLCB2bSwgXCJyZW5kZXJcIik7XG4gICAgICAvLyByZXR1cm4gZXJyb3IgcmVuZGVyIHJlc3VsdCxcbiAgICAgIC8vIG9yIHByZXZpb3VzIHZub2RlIHRvIHByZXZlbnQgcmVuZGVyIGVycm9yIGNhdXNpbmcgYmxhbmsgY29tcG9uZW50XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdm0uJG9wdGlvbnMucmVuZGVyRXJyb3IpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2bm9kZSA9IHZtLiRvcHRpb25zLnJlbmRlckVycm9yLmNhbGwodm0uX3JlbmRlclByb3h5LCB2bS4kY3JlYXRlRWxlbWVudCwgZSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBoYW5kbGVFcnJvcihlLCB2bSwgXCJyZW5kZXJFcnJvclwiKTtcbiAgICAgICAgICB2bm9kZSA9IHZtLl92bm9kZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdm5vZGUgPSB2bS5fdm5vZGU7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZSA9IG51bGw7XG4gICAgfVxuICAgIC8vIGlmIHRoZSByZXR1cm5lZCBhcnJheSBjb250YWlucyBvbmx5IGEgc2luZ2xlIG5vZGUsIGFsbG93IGl0XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodm5vZGUpICYmIHZub2RlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdm5vZGUgPSB2bm9kZVswXTtcbiAgICB9XG4gICAgLy8gcmV0dXJuIGVtcHR5IHZub2RlIGluIGNhc2UgdGhlIHJlbmRlciBmdW5jdGlvbiBlcnJvcmVkIG91dFxuICAgIGlmICghKHZub2RlIGluc3RhbmNlb2YgVk5vZGUpKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBBcnJheS5pc0FycmF5KHZub2RlKSkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgICdNdWx0aXBsZSByb290IG5vZGVzIHJldHVybmVkIGZyb20gcmVuZGVyIGZ1bmN0aW9uLiBSZW5kZXIgZnVuY3Rpb24gJyArXG4gICAgICAgICAgJ3Nob3VsZCByZXR1cm4gYSBzaW5nbGUgcm9vdCBub2RlLicsXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHZub2RlID0gY3JlYXRlRW1wdHlWTm9kZSgpO1xuICAgIH1cbiAgICAvLyBzZXQgcGFyZW50XG4gICAgdm5vZGUucGFyZW50ID0gX3BhcmVudFZub2RlO1xuICAgIHJldHVybi
118B2bm9kZVxuICB9O1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gZW5zdXJlQ3RvciAoY29tcCwgYmFzZSkge1xuICBpZiAoXG4gICAgY29tcC5fX2VzTW9kdWxlIHx8XG4gICAgKGhhc1N5bWJvbCAmJiBjb21wW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdNb2R1bGUnKVxuICApIHtcbiAgICBjb21wID0gY29tcC5kZWZhdWx0O1xuICB9XG4gIHJldHVybiBpc09iamVjdChjb21wKVxuICAgID8gYmFzZS5leHRlbmQoY29tcClcbiAgICA6IGNvbXBcbn1cblxuZnVuY3Rpb24gY3JlYXRlQXN5bmNQbGFjZWhvbGRlciAoXG4gIGZhY3RvcnksXG4gIGRhdGEsXG4gIGNvbnRleHQsXG4gIGNoaWxkcmVuLFxuICB0YWdcbikge1xuICB2YXIgbm9kZSA9IGNyZWF0ZUVtcHR5Vk5vZGUoKTtcbiAgbm9kZS5hc3luY0ZhY3RvcnkgPSBmYWN0b3J5O1xuICBub2RlLmFzeW5jTWV0YSA9IHsgZGF0YTogZGF0YSwgY29udGV4dDogY29udGV4dCwgY2hpbGRyZW46IGNoaWxkcmVuLCB0YWc6IHRhZyB9O1xuICByZXR1cm4gbm9kZVxufVxuXG5mdW5jdGlvbiByZXNvbHZlQXN5bmNDb21wb25lbnQgKFxuICBmYWN0b3J5LFxuICBiYXNlQ3RvclxuKSB7XG4gIGlmIChpc1RydWUoZmFjdG9yeS5lcnJvcikgJiYgaXNEZWYoZmFjdG9yeS5lcnJvckNvbXApKSB7XG4gICAgcmV0dXJuIGZhY3RvcnkuZXJyb3JDb21wXG4gIH1cblxuICBpZiAoaXNEZWYoZmFjdG9yeS5yZXNvbHZlZCkpIHtcbiAgICByZXR1cm4gZmFjdG9yeS5yZXNvbHZlZFxuICB9XG5cbiAgdmFyIG93bmVyID0gY3VycmVudFJlbmRlcmluZ0luc3RhbmNlO1xuICBpZiAob3duZXIgJiYgaXNEZWYoZmFjdG9yeS5vd25lcnMpICYmIGZhY3Rvcnkub3duZXJzLmluZGV4T2Yob3duZXIpID09PSAtMSkge1xuICAgIC8vIGFscmVhZHkgcGVuZGluZ1xuICAgIGZhY3Rvcnkub3duZXJzLnB1c2gob3duZXIpO1xuICB9XG5cbiAgaWYgKGlzVHJ1ZShmYWN0b3J5LmxvYWRpbmcpICYmIGlzRGVmKGZhY3RvcnkubG9hZGluZ0NvbXApKSB7XG4gICAgcmV0dXJuIGZhY3RvcnkubG9hZGluZ0NvbXBcbiAgfVxuXG4gIGlmIChvd25lciAmJiAhaXNEZWYoZmFjdG9yeS5vd25lcnMpKSB7XG4gICAgdmFyIG93bmVycyA9IGZhY3Rvcnkub3duZXJzID0gW293bmVyXTtcbiAgICB2YXIgc3luYyA9IHRydWU7XG4gICAgdmFyIHRpbWVyTG9hZGluZyA9IG51bGw7XG4gICAgdmFyIHRpbWVyVGltZW91dCA9IG51bGxcblxuICAgIDsob3duZXIpLiRvbignaG9vazpkZXN0cm95ZWQnLCBmdW5jdGlvbiAoKSB7IHJldHVybiByZW1vdmUob3duZXJzLCBvd25lcik7IH0pO1xuXG4gICAgdmFyIGZvcmNlUmVuZGVyID0gZnVuY3Rpb24gKHJlbmRlckNvbXBsZXRlZCkge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBvd25lcnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIChvd25lcnNbaV0pLiRmb3JjZVVwZGF0ZSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVuZGVyQ29tcGxldGVkKSB7XG4gICAgICAgIG93bmVycy5sZW5ndGggPSAwO1xuICAgICAgICBpZiAodGltZXJMb2FkaW5nICE9PSBudWxsKSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyTG9hZGluZyk7XG4gICAgICAgICAgdGltZXJMb2FkaW5nID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGltZXJUaW1lb3V0ICE9PSBudWxsKSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyVGltZW91dCk7XG4gICAgICAgICAgdGltZXJUaW1lb3V0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgcmVzb2x2ZSA9IG9uY2UoZnVuY3Rpb24gKHJlcykge1xuICAgICAgLy8gY2FjaGUgcmVzb2x2ZWRcbiAgICAgIGZhY3RvcnkucmVzb2x2ZWQgPSBlbnN1cmVDdG9yKHJlcywgYmFzZUN0b3IpO1xuICAgICAgLy8gaW52b2tlIGNhbGxiYWNrcyBvbmx5IGlmIHRoaXMgaXMgbm90IGEgc3luY2hyb25vdXMgcmVzb2x2ZVxuICAgICAgLy8gKGFzeW5jIHJlc29sdmVzIGFyZSBzaGltbWVkIGFzIHN5bmNocm9ub3VzIGR1cmluZyBTU1IpXG4gICAgICBpZiAoIXN5bmMpIHtcbiAgICAgICAgZm9yY2VSZW5kZXIodHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvd25lcnMubGVuZ3RoID0gMDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciByZWplY3QgPSBvbmNlKGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICAgXCJGYWlsZWQgdG8gcmVzb2x2ZSBhc3luYyBjb21wb25lbnQ6IFwiICsgKFN0cmluZyhmYWN0b3J5KSkgK1xuICAgICAgICAocmVhc29uID8gKFwiXFxuUmVhc29uOiBcIiArIHJlYXNvbikgOiAnJylcbiAgICAgICk7XG4gICAgICBpZiAoaXNEZWYoZmFjdG9yeS5lcnJvckNvbXApKSB7XG4gICAgICAgIGZhY3RvcnkuZXJyb3IgPSB0cnVlO1xuICAgICAgICBmb3JjZVJlbmRlcih0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciByZXMgPSBmYWN0b3J5KHJlc29sdmUsIHJlamVjdCk7XG5cbiAgICBpZiAoaXNPYmplY3QocmVzKSkge1xuICAgICAgaWYgKGlzUHJvbWlzZShyZXMpKSB7XG4gICAgICAgIC8vICgpID0+IFByb21pc2VcbiAgICAgICAgaWYgKGlzVW5kZWYoZmFjdG9yeS5yZXNvbHZlZCkpIHtcbiAgICAgICAgICByZXMudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzUHJvbWlzZShyZXMuY29tcG9uZW50KSkge1xuICAgICAgICByZXMuY29tcG9uZW50LnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcblxuICAgICAgICBpZiAoaXNEZWYocmVzLmVycm9yKSkge1xuICAgICAgICAgIGZhY3RvcnkuZXJyb3JDb21wID0gZW5zdXJlQ3RvcihyZXMuZXJyb3IsIGJhc2VDdG9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0RlZihyZXMubG9hZGluZykpIHtcbiAgICAgICAgICBmYWN0b3J5LmxvYWRpbmdDb21wID0gZW5zdXJlQ3RvcihyZXMubG9hZGluZywgYmFzZUN0b3IpO1xuICAgICAgICAgIGlmIChyZXMuZGVsYXkgPT09IDApIHtcbiAgICAgICAgICAgIGZhY3RvcnkubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgI
118HRpbWVyTG9hZGluZyA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB0aW1lckxvYWRpbmcgPSBudWxsO1xuICAgICAgICAgICAgICBpZiAoaXNVbmRlZihmYWN0b3J5LnJlc29sdmVkKSAmJiBpc1VuZGVmKGZhY3RvcnkuZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgZmFjdG9yeS5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBmb3JjZVJlbmRlcihmYWxzZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHJlcy5kZWxheSB8fCAyMDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0RlZihyZXMudGltZW91dCkpIHtcbiAgICAgICAgICB0aW1lclRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRpbWVyVGltZW91dCA9IG51bGw7XG4gICAgICAgICAgICBpZiAoaXNVbmRlZihmYWN0b3J5LnJlc29sdmVkKSkge1xuICAgICAgICAgICAgICByZWplY3QoXG4gICAgICAgICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJ1xuICAgICAgICAgICAgICAgICAgPyAoXCJ0aW1lb3V0IChcIiArIChyZXMudGltZW91dCkgKyBcIm1zKVwiKVxuICAgICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgcmVzLnRpbWVvdXQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3luYyA9IGZhbHNlO1xuICAgIC8vIHJldHVybiBpbiBjYXNlIHJlc29sdmVkIHN5bmNocm9ub3VzbHlcbiAgICByZXR1cm4gZmFjdG9yeS5sb2FkaW5nXG4gICAgICA/IGZhY3RvcnkubG9hZGluZ0NvbXBcbiAgICAgIDogZmFjdG9yeS5yZXNvbHZlZFxuICB9XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBnZXRGaXJzdENvbXBvbmVudENoaWxkIChjaGlsZHJlbikge1xuICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2Y
118XIgYyA9IGNoaWxkcmVuW2ldO1xuICAgICAgaWYgKGlzRGVmKGMpICYmIChpc0RlZihjLmNvbXBvbmVudE9wdGlvbnMpIHx8IGlzQXN5bmNQbGFjZWhvbGRlcihjKSkpIHtcbiAgICAgICAgcmV0dXJuIGNcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyogICovXG5cbi8qICAqL1xuXG5mdW5jdGlvbiBpbml0RXZlbnRzICh2bSkge1xuICB2bS5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgdm0uX2hhc0hvb2tFdmVudCA9IGZhbHNlO1xuICAvLyBpbml0IHBhcmVudCBhdHRhY2hlZCBldmVudHNcbiAgdmFyIGxpc3RlbmVycyA9IHZtLiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnM7XG4gIGlmIChsaXN0ZW5lcnMpIHtcbiAgICB1cGRhdGVDb21wb25lbnRMaXN0ZW5lcnModm0sIGxpc3RlbmVycyk7XG4gIH1cbn1cblxudmFyIHRhcmdldDtcblxuZnVuY3Rpb24gYWRkIChldmVudCwgZm4pIHtcbiAgdGFyZ2V0LiRvbihldmVudCwgZm4pO1xufVxuXG5mdW5jdGlvbiByZW1vdmUkMSAoZXZlbnQsIGZuKSB7XG4gIHRhcmdldC4kb2ZmKGV2ZW50LCBmbik7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU9uY2VIYW5kbGVyIChldmVudCwgZm4pIHtcbiAgdmFyIF90YXJnZXQgPSB0YXJnZXQ7XG4gIHJldHVybiBmdW5jdGlvbiBvbmNlSGFuZGxlciAoKSB7XG4gICAgdmFyIHJlcyA9IGZuLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHJlcyAhPT0gbnVsbCkge1xuICAgICAgX3RhcmdldC4kb2ZmKGV2ZW50LCBvbmNlSGFuZGxlcik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNvbXBvbmVudExpc3RlbmVycyAoXG4gIHZtLFxuICBsaXN0ZW5lcnMsXG4gIG9sZExpc3RlbmVyc1xuKSB7XG4gIHRhcmdldCA9IHZtO1xuICB1cGRhdGVMaXN0ZW5lcnMobGlzdGVuZXJzLCBvbGRMaXN0ZW5lcnMgfHwge30sIGFkZCwgcmVtb3ZlJDEsIGNyZWF0ZU9uY2VIYW5kbGVyLCB2bSk7XG4gIHRhcmdldCA9IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZXZlbnRzTWl4aW4gKFZ1ZSkge1xuICB2YXIgaG9va1JFID0gL15ob29rOi87XG4gIFZ1ZS5wcm90b3R5cGUuJG9uID0gZnVuY3Rpb24gKGV2ZW50LCBmbikge1xuICAgIHZhciB2bSA9IHRoaXM7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGV2ZW50Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB2bS4kb24oZXZlbnRbaV0sIGZuKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgKHZtLl9ldmVudHNbZXZlbnRdIHx8ICh2bS5fZXZlbnRzW2V2ZW50XSA9IFtdKSkucHVzaChmbik7XG4gICAgICAvLyBvcHRpbWl6ZSBob29rOmV2ZW50IGNvc3QgYnkgdXNpbmcgYSBib29sZWFuIGZsYWcgbWFya2VkIGF0IHJlZ2lzdHJhdGlvblxuICAgICAgLy8gaW5zdGVhZCBvZiBhIGhhc2ggbG9va3VwXG4gICAgICBpZiAoaG9va1JFLnRlc3QoZXZlbnQpKSB7XG4gICAgICAgIHZtLl9oYXNIb29rRXZlbnQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdm1cbiAgfTtcblxuICBWdWUucHJvdG90eXBlLiRvbmNlID0gZnVuY3Rpb24gKGV2ZW50LCBmbikge1xuICAgIHZhciB2bSA9IHRoaXM7XG4gICAgZnVuY3Rpb24gb24gKCkge1xuICAgICAgdm0uJG9mZihldmVudCwgb24pO1xuICAgICAgZm4uYXBwbHkodm0sIGFyZ3VtZW50cyk7XG4gICAgfVxuICAgIG9uLmZuID0gZm47XG4gICAgdm0uJG9uKGV2ZW50LCBvbik7XG4gICAgcmV0dXJuIHZtXG4gIH07XG5cbiAgVnVlLnByb3RvdHlwZS4kb2ZmID0gZnVuY3Rpb24gKGV2ZW50LCBmbikge1xuICAgIHZhciB2bSA9IHRoaXM7XG4gICAgLy8gYWxsXG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICB2bS5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIHJldHVybiB2bVxuICAgIH1cbiAgICAvLyBhcnJheSBvZiBldmVudHNcbiAgICBpZiAoQXJyYXkuaXNBcnJheShldmVudCkpIHtcbiAgICAgIGZvciAodmFyIGkkMSA9IDAsIGwgPSBldmVudC5sZW5ndGg7IGkkMSA8IGw7IGkkMSsrKSB7XG4gICAgICAgIHZtLiRvZmYoZXZlbnRbaSQxXSwgZm4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZtXG4gICAgfVxuICAgIC8vIHNwZWNpZmljIGV2ZW50XG4gICAgdmFyIGNicyA9IHZtLl9ldmVudHNbZXZlbnRdO1xuICAgIGlmICghY2JzKSB7XG4gICAgICByZXR1cm4gdm1cbiAgICB9XG4gICAgaWYgKCFmbikge1xuICAgICAgdm0uX2V2ZW50c1tldmVudF0gPSBudWxsO1xuICAgICAgcmV0dXJuIHZtXG4gICAgfVxuICAgIC8vIHNwZWNpZmljIGhhbmRsZXJcbiAgICB2YXIgY2I7XG4gICAgdmFyIGkgPSBjYnMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIGNiID0gY2JzW2ldO1xuICAgICAgaWYgKGNiID09PSBmbiB8fCBjYi5mbiA9PT0gZm4pIHtcbiAgICAgICAgY2JzLnNwbGljZShpLCAxKTtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZtXG4gIH07XG5cbiAgVnVlLnByb3RvdHlwZS4kZW1pdCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHZhciB2bSA9IHRoaXM7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHZhciBsb3dlckNhc2VFdmVudCA9IGV2ZW50LnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAobG93ZXJDYXNlRXZlbnQgIT09IGV2ZW50ICYmIHZtLl9ldmVudHNbbG93ZXJDYXNlRXZlbnRdKSB7XG4gICAgICAgIHRpcChcbiAgICAgICAgICBcIkV2ZW50IFxcXCJcIiArIGxvd2VyQ2FzZUV2ZW50ICsgXCJcXFwiIGlzIGVtaXR0ZWQgaW4gY29tcG9uZW50IFwiICtcbiAgICAgICAgICAoZm9ybWF0Q29tcG9uZW50TmFtZSh2bSkpICsgXCIgYnV0IHRoZSBoYW5kbGVyIGlzIHJlZ2lzdGVyZWQgZm9yIFxcXCJcIiArIGV2ZW50ICsgXCJcXFwiLiBcIiArXG4gICAgICAgICAgXCJOb3RlIHRoYXQgSFRNTCBhdHRyaWJ1dGVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlIGFuZCB5b3UgY2Fubm90IHVzZSBcIiArXG4gICAgICAgICAgXCJ2LW9uIHRvIGxpc3RlbiB0byBjYW1lbENhc2UgZXZlbnRzIHdoZW4gdXNpbmcgaW4tRE9NIHRlbXBsYXRlcy4gXCIgK1xuICAgICAgICAgIFwiWW91IHNob3VsZCBwcm9iYWJseSB1c2UgXFxcIlwiICsgKGh5cGhlbmF0ZShldmVudCkpICsgXCJcXFwiIGluc3RlYWQgb2YgXFxcIlwiICsgZXZlbnQgKyBcIlxcXCIuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIGNicyA9IHZtLl9ldmVudHNbZXZlbnRdO1xuICAgIGlmIChjYnMpIHtcbiAgICAgIGNicyA9IGNicy5sZW5ndGggPiAxID8gdG9BcnJheShjYnMpIDogY2JzO1xuICAgICAgdmFyIGFyZ3MgPSB0b0FycmF5KGFyZ3VtZW50cywgMSk7XG4gICAgICB2Y
118XIgaW5mbyA9IFwiZXZlbnQgaGFuZGxlciBmb3IgXFxcIlwiICsgZXZlbnQgKyBcIlxcXCJcIjtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gY2JzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBpbnZva2VXaXRoRXJyb3JIYW5kbGluZyhjYnNbaV0sIHZtLCBhcmdzLCB2bSwgaW5mbyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2bVxuICB9O1xufVxuXG4vKiAgKi9cblxudmFyIGFjdGl2ZUluc3RhbmNlID0gbnVsbDtcbnZhciBpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQgPSBmYWxzZTtcblxuZnVuY3Rpb24gc2V0QWN0aXZlSW5zdGFuY2Uodm0pIHtcbiAgdmFyIHByZXZBY3RpdmVJbnN0YW5jZSA9IGFjdGl2ZUluc3RhbmNlO1xuICBhY3RpdmVJbnN0YW5jZSA9IHZtO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGFjdGl2ZUluc3RhbmNlID0gcHJldkFjdGl2ZUluc3RhbmNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluaXRMaWZlY3ljbGUgKHZtKSB7XG4gIHZhciBvcHRpb25zID0gdm0uJG9wdGlvbnM7XG5cbiAgLy8gbG9jYXRlIGZpcnN0IG5vbi1hYnN0cmFjdCBwYXJlbnRcbiAgdmFyIHBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuICBpZiAocGFyZW50ICYmICFvcHRpb25zLmFic3RyYWN0KSB7XG4gICAgd2hpbGUgKHBhcmVudC4kb3B0aW9ucy5hYnN0cmFjdCAmJiBwYXJlbnQuJHBhcmVudCkge1xuICAgICAgcGFyZW50ID0gcGFyZW50LiRwYXJlbnQ7XG4gICAgfVxuICAgIHBhcmVudC4kY2hpbGRyZW4ucHVzaCh2bSk7XG4gIH1cblxuICB2bS4kcGFyZW50ID0gcGFyZW50O1xuICB2bS4kcm9vdCA9IHBhcmVudCA/IHBhcmVudC4kcm9vdCA6IHZtO1xuXG4gIHZtLiRjaGlsZHJlbiA9IFtdO1xuICB2bS4kcmVmcyA9IHt9O1xuXG4gIHZtLl93YXRjaGVyID0gbnVsbDtcbiAgdm0uX2luYWN0aXZlID0gbnVsbDtcbiAgdm0uX2RpcmVjdEluYWN0aXZlID0gZmFsc2U7XG4gIHZtLl9pc01vdW50ZWQgPSBmYWxzZTtcbiAgdm0uX2lzRGVzdHJveWVkID0gZmFsc2U7XG4gIHZtLl9pc0JlaW5nRGVzdHJveWVkID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGxpZmVjeWNsZU1peGluIChWdWUpIHtcbiAgVnVlLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gKHZub2RlLCBoeWRyYXRpbmcpIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIHZhciBwcmV2RWwgPSB2bS4kZWw7XG4gICAgdmFyIHByZXZWbm9kZSA9IHZtLl92bm9kZTtcbiAgICB2YXIgcmVzdG9yZUFjdGl2ZUluc3RhbmNlID0gc2V0QWN0aXZlSW5zdGFuY2Uodm0pO1xuICAgIHZtLl92bm9kZSA9IHZub2RlO1xuICAgIC8vIFZ1ZS5wcm90b3R5cGUuX19wYXRjaF9fIGlzIGluamVjdGVkIGluIGVudHJ5IHBvaW50c1xuICAgIC8vIGJhc2VkIG9uIHRoZSByZW5kZXJpbmcgYmFja2VuZCB1c2VkLlxuICAgIGlmICghcHJldlZub2RlKSB7XG4gICAgICAvLyBpbml0aWFsIHJlbmRlclxuICAgICAgdm0uJGVsID0gdm0uX19wYXRjaF9fKHZtLiRlbCwgdm5vZGUsIGh5ZHJhdGluZywgZmFsc2UgLyogcmVtb3ZlT25seSAqLyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHVwZGF0ZXNcbiAgICAgIHZtLiRlbCA9IHZtLl9fcGF0Y2hfXyhwcmV2Vm5vZGUsIHZub2RlKTtcbiAgICB9XG4gICAgcmVzdG9yZUFjdGl2ZUluc3RhbmNlKCk7XG4gICAgLy8gdXBkYXRlIF9fdnVlX18gcmVmZXJlbmNlXG4gICAgaWYgKHByZXZFbCkge1xuICAgICAgcHJldkVsLl9fdnVlX18gPSBudWxsO1xuICAgIH1cbiAgICBpZiAodm0uJGVsKSB7XG4gICAgICB2bS4kZWwuX192dWVfXyA9IHZtO1xuICAgIH1cbiAgICAvLyBpZiBwYXJlbnQgaXMgYW4gSE9DLCB1cGRhdGUgaXRzICRlbCBhcyB3ZWxsXG4gICAgaWYgKHZtLiR2bm9kZSAmJiB2bS4kcGFyZW50ICYmIHZtLiR2bm9kZSA9PT0gdm0uJHBhcmVudC5fdm5vZGUpIHtcbiAgICAgIHZtLiRwYXJlbnQuJGVsID0gdm0uJGVsO1xuICAgIH1cbiAgICAvLyB1cGRhdGVkIGhvb2sgaXMgY2FsbGVkIGJ5IHRoZSBzY2hlZHVsZXIgdG8gZW5zdXJlIHRoYXQgY2hpbGRyZW4gYXJlXG4gICAgLy8gdXBkYXRlZCBpbiBhIHBhcmVudCdzIHVwZGF0ZWQgaG9vay5cbiAgfTtcblxuICBWdWUucHJvdG90eXBlLiRmb3JjZVVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIGlmICh2bS5fd2F0Y2hlcikge1xuICAgICAgdm0uX3dhdGNoZXIudXBkYXRlKCk7XG4gICAgfVxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuJGRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICBpZiAodm0uX2lzQmVpbmdEZXN0cm95ZWQpIHtcbiAgICAgIHJldHVyblxuICAgI
118H1cbiAgICBjYWxsSG9vayh2bSwgJ2JlZm9yZURlc3Ryb3knKTtcbiAgICB2bS5faXNCZWluZ0Rlc3Ryb3llZCA9IHRydWU7XG4gICAgLy8gcmVtb3ZlIHNlbGYgZnJvbSBwYXJlbnRcbiAgICB2YXIgcGFyZW50ID0gdm0uJHBhcmVudDtcbiAgICBpZiAocGFyZW50ICYmICFwYXJlbnQuX2lzQmVpbmdEZXN0cm95ZWQgJiYgIXZtLiRvcHRpb25zLmFic3RyYWN0KSB7XG4gICAgICByZW1vdmUocGFyZW50LiRjaGlsZHJlbiwgdm0pO1xuICAgIH1cbiAgICAvLyB0ZWFyZG93biB3YXRjaGVyc1xuICAgIGlmICh2bS5fd2F0Y2hlcikge1xuICAgICAgdm0uX3dhdGNoZXIudGVhcmRvd24oKTtcbiAgICB9XG4gICAgdmFyIGkgPSB2bS5fd2F0Y2hlcnMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIHZtLl93YXRjaGVyc1tpXS50ZWFyZG93bigpO1xuICAgIH1cbiAgICAvLyByZW1vdmUgcmVmZXJlbmNlIGZyb20gZGF0YSBvYlxuICAgIC8vIGZyb3plbiBvYmplY3QgbWF5IG5vdCBoYXZlIG9ic2VydmVyLlxuICAgIGlmICh2bS5fZGF0YS5fX29iX18pIHtcbiAgICAgIHZtLl9kYXRhLl9fb2JfXy52bUNvdW50LS07XG4gICAgfVxuICAgIC8vIGNhbGwgdGhlIGxhc3QgaG9vay4uLlxuICAgIHZtLl9pc0Rlc3Ryb3llZCA9IHRydWU7XG4gICAgLy8gaW52b2tlIGRlc3Ryb3kgaG9va3Mgb24gY3VycmVudCByZW5kZXJlZCB0cmVlXG4gICAgdm0uX19wYXRjaF9fKHZtLl92bm9kZSwgbnVsbCk7XG4gICAgLy8gZmlyZSBkZXN0cm95ZWQgaG9va1xuICAgIGNhbGxIb29rKHZtLCAnZGVzdHJveWVkJyk7XG4gICAgLy8gdHVybiBvZmYgYWxsIGluc3RhbmNlIGxpc3RlbmVycy5cbiAgICB2bS4kb2ZmKCk7XG4gICAgLy8gcmVtb3ZlIF9fdnVlX18gcmVmZXJlbmNlXG4gICAgaWYgKHZtLiRlbCkge1xuICAgICAgdm0uJGVsLl9fdnVlX18gPSBudWxsO1xuICAgIH1cbiAgICAvLyByZWxlYXNlIGNpcmN1bGFyIHJlZmVyZW5jZSAoIzY3NTkpXG4gICAgaWYgKHZtLiR2bm9kZSkge1xuICAgICAgdm0uJHZub2RlLnBhcmVudCA9IG51bGw7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBtb3VudENvbXBvbmVudCAoXG4gIHZtLFxuICBlbCxcbiAgaHlkcmF0aW5nXG4pIHtcbiAgdm0uJGVsID0gZWw7XG4gIGlmICghdm0uJG9wdGlvbnMucmVuZGVyKSB7XG4gICAgdm0uJG9wdGlvbnMucmVuZGVyID0gY3JlYXRlRW1wdHlWTm9kZTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoKHZtLiRvcHRpb25zLnRlbXBsYXRlICYmIHZtLiRvcHRpb25zLnRlbXBsYXRlLmNoYXJBdCgwKSAhPT0gJyMnKSB8fFxuICAgICAgICB2bS4kb3B0aW9ucy5lbCB8fCBlbCkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgICdZb3UgYXJlIHVzaW5nIHRoZSBydW50aW1lLW9ubHkgYnVpbGQgb2YgVnVlIHdoZXJlIHRoZSB0ZW1wbGF0ZSAnICtcbiAgICAgICAgICAnY29tcGlsZXIgaXMgbm90IGF2YWlsYWJsZS4gRWl0aGVyIHByZS1jb21waWxlIHRoZSB0ZW1wbGF0ZXMgaW50byAnICtcbiAgICAgICAgICAncmVuZGVyIGZ1bmN0aW9ucywgb3IgdXNlIHRoZSBjb21waWxlci1pbmNsdWRlZCBidWlsZC4nLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgICdGYWlsZWQgdG8gbW91bnQgY29tcG9uZW50OiB0ZW1wbGF0ZSBvciByZW5kZXIgZnVuY3Rpb24gbm90IGRlZmluZWQuJyxcbiAgICAgICAgICB2bVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjYWxsSG9vayh2bSwgJ2JlZm9yZU1vdW50Jyk7XG5cbiAgdmFyIHVwZGF0ZUNvbXBvbmVudDtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGNvbmZpZy5wZXJmb3JtYW5jZSAmJiBtYXJrKSB7XG4gICAgdXBkYXRlQ29tcG9uZW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIG5hbWUgPSB2bS5fbmFtZTtcbiAgICAgIHZhciBpZCA9IHZtLl91aWQ7XG4gICAgICB2Y
118XIgc3RhcnRUYWcgPSBcInZ1ZS1wZXJmLXN0YXJ0OlwiICsgaWQ7XG4gICAgICB2YXIgZW5kVGFnID0gXCJ2dWUtcGVyZi1lbmQ6XCIgKyBpZDtcblxuICAgICAgbWFyayhzdGFydFRhZyk7XG4gICAgICB2YXIgdm5vZGUgPSB2bS5fcmVuZGVyKCk7XG4gICAgICBtYXJrKGVuZFRhZyk7XG4gICAgICBtZWFzdXJlKChcInZ1ZSBcIiArIG5hbWUgKyBcIiByZW5kZXJcIiksIHN0YXJ0VGFnLCBlbmRUYWcpO1xuXG4gICAgICBtYXJrKHN0YXJ0VGFnKTtcbiAgICAgIHZtLl91cGRhdGUodm5vZGUsIGh5ZHJhdGluZyk7XG4gICAgICBtYXJrKGVuZFRhZyk7XG4gICAgICBtZWFzdXJlKChcInZ1ZSBcIiArIG5hbWUgKyBcIiBwYXRjaFwiKSwgc3RhcnRUYWcsIGVuZFRhZyk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICB1cGRhdGVDb21wb25lbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2bS5fdXBkYXRlKHZtLl9yZW5kZXIoKSwgaHlkcmF0aW5nKTtcbiAgICB9O1xuICB9XG5cbiAgLy8gd2Ugc2V0IHRoaXMgdG8gdm0uX3dhdGNoZXIgaW5zaWRlIHRoZSB3YXRjaGVyJ3MgY29uc3RydWN0b3JcbiAgLy8gc2luY2UgdGhlIHdhdGNoZXIncyBpbml0aWFsIHBhdGNoIG1heSBjYWxsICRmb3JjZVVwZGF0ZSAoZS5nLiBpbnNpZGUgY2hpbGRcbiAgLy8gY29tcG9uZW50J3MgbW91bnRlZCBob29rKSwgd2hpY2ggcmVsaWVzIG9uIHZtLl93YXRjaGVyIGJlaW5nIGFscmVhZHkgZGVmaW5lZFxuICBuZXcgV2F0Y2hlcih2bSwgdXBkYXRlQ29tcG9uZW50LCBub29wLCB7XG4gICAgYmVmb3JlOiBmdW5jdGlvbiBiZWZvcmUgKCkge1xuICAgICAgaWYgKHZtLl9pc01vdW50ZWQgJiYgIXZtLl9pc0Rlc3Ryb3llZCkge1xuICAgICAgICBjYWxsSG9vayh2bSwgJ2JlZm9yZVVwZGF0ZScpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgdHJ1ZSAvKiBpc1JlbmRlcldhdGNoZXIgKi8pO1xuICBoeWRyYXRpbmcgPSBmYWxzZTtcblxuICAvLyBtYW51YWxseSBtb3VudGVkIGluc3RhbmNlLCBjYWxsIG1vdW50ZWQgb24gc2VsZlxuICAvLyBtb3VudGVkIGlzIGNhbGxlZCBmb3IgcmVuZGVyLWNyZWF0ZWQgY2hpbGQgY29tcG9uZW50cyBpbiBpdHMgaW5zZXJ0ZWQgaG9va1xuICBpZiAodm0uJHZub2RlID09IG51bGwpIHtcbiAgICB2bS5faXNNb3VudGVkID0gdHJ1ZTtcbiAgICBjYWxsSG9vayh2bSwgJ21vdW50ZWQnKTtcbiAgfVxuICByZXR1cm4gdm1cbn1cblxuZnVuY3Rpb24gdXBkYXRlQ2hpbGRDb21wb25lbnQgKFxuICB2bSxcbiAgcHJvcHNEYXRhLFxuICBsaXN0ZW5lcnMsXG4gIHBhcmVudFZub2RlLFxuICByZW5kZXJDaGlsZHJlblxuKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaXNVcGRhdGluZ0NoaWxkQ29tcG9uZW50ID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIGRldGVybWluZSB3aGV0aGVyIGNvbXBvbmVudCBoYXMgc2xvdCBjaGlsZHJlblxuICAvLyB3ZSBuZWVkIHRvIGRvIHRoaXMgYmVmb3JlIG92ZXJ3cml0aW5nICRvcHRpb25zLl9yZW5kZXJDaGlsZHJlbi5cblxuICAvLyBjaGVjayBpZiB0aGVyZSBhcmUgZHluYW1pYyBzY29wZWRTbG90cyAoaGFuZC13cml0dGVuIG9yIGNvbXBpbGVkIGJ1dCB3aXRoXG4gIC8vIGR5bmFtaWMgc2xvdCBuYW1lcykuIFN0YXRpYyBzY29wZWQgc2xvdHMgY29tcGlsZWQgZnJvbSB0ZW1wbGF0ZSBoYXMgdGhlXG4gIC8vIFwiJHN0YWJsZVwiIG1hcmtlci5cbiAgdmFyIG5ld1Njb3BlZFNsb3RzID0gcGFyZW50Vm5vZGUuZGF0YS5zY29wZWRTbG90cztcbiAgdmFyIG9sZFNjb3BlZFNsb3RzID0gdm0uJHNjb3BlZFNsb3RzO1xuICB2YXIgaGFzRHluYW1pY1Njb3BlZFNsb3QgPSAhIShcbiAgICAobmV3U2NvcGVkU2xvdHMgJiYgIW5ld1Njb3BlZFNsb3RzLiRzdGFibGUpIHx8XG4gICAgKG9sZFNjb3BlZFNsb3RzICE9PSBlbXB0eU9iamVjdCAmJiAhb2xkU2NvcGVkU2xvdHMuJHN0YWJsZSkgfHxcbiAgICAobmV3U2NvcGVkU2xvdHMgJiYgdm0uJHNjb3BlZFNsb3RzLiRrZXkgIT09IG5ld1Njb3BlZFNsb3RzLiRrZXkpIHx8XG4gICAgKCFuZXdTY29wZWRTbG90cyAmJiB2bS4kc2NvcGVkU2xvdHMuJGtleSlcbiAgKTtcblxuICAvLyBBbnkgc3RhdGljIHNsb3QgY2hpbGRyZW4gZnJvbSB0aGUgcGFyZW50IG1heSBoYXZlIGNoYW5nZWQgZHVyaW5nIHBhcmVudCdzXG4gIC8vIHVwZGF0ZS4gRHluYW1pYyBzY29wZWQgc2xvdHMgbWF5IGFsc28gaGF2ZSBjaGFuZ2VkLiBJbiBzdWNoIGNhc2VzLCBhIGZvcmNlZFxuICAvLyB1cGRhdGUgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSBjb3JyZWN0bmVzcy5cbiAgdmFyIG5lZWRzRm9yY2VVcGRhdGUgPSAhIShcbiAgICByZW5kZXJDaGlsZHJlbiB8fCAgICAgICAgICAgICAgIC8vIGhhcyBuZXcgc3RhdGljIHNsb3RzXG4gICAgdm0uJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVuIHx8ICAvLyBoYXMgb2xkIHN0YXRpYyBzbG90c1xuICAgIGhhc0R5bmFtaWNTY29wZWRTbG90XG4gICk7XG5cbiAgdm0uJG9wdGlvbnMuX3BhcmVudFZub2RlID0gcGFyZW50Vm5vZGU7XG4gIHZtLiR2bm9kZSA9IHBhcmVudFZub2RlOyAvLyB1cGRhdGUgdm0ncyBwbGFjZWhvbGRlciBub2RlIHdpdGhvdXQgcmUtcmVuZGVyXG5cbiAgaWYgKHZtLl92bm9kZSkgeyAvLyB1cGRhdGUgY2hpbGQgdHJlZSdzIHBhcmVudFxuICAgIHZtLl92bm9kZS5wYXJlbnQgPSBwYXJlbnRWbm9kZTtcbiAgfVxuICB2bS4kb3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW4gPSByZW5kZXJDaGlsZHJlbjtcblxuICAvLyB1cGRhdGUgJGF0dHJzIGFuZCAkbGlzdGVuZXJzIGhhc2hcbiAgLy8gdGhlc2UgYXJlIGFsc28gcmVhY3RpdmUgc28gdGhleSBtYXkgdHJpZ2dlciBjaGlsZCB1cGRhdGUgaWYgdGhlIGNoaWxkXG4gIC8vIHVzZWQgdGhlbSBkdXJpbmcgcmVuZGVyXG4gIHZtLiRhdHRycyA9IHBhcmVudFZub2RlLmRhdGEuYXR0cnMgfHwgZW1wdHlPYmplY3Q7XG4gIHZtLiRsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMgfHwgZW1wdHlPYmplY3Q7XG5cbiAgLy8gdXBkYXRlIHByb3BzXG4gIGlmIChwcm9wc0RhdGEgJiYgdm0uJG9wdGlvbnMucHJvcHMpIHtcbiAgICB0b2dnbGVPYnNlcnZpbmcoZmFsc2UpO1xuICAgIHZhciBwcm9wcyA9IHZtLl9wcm9wcztcbiAgICB2YXIgcHJvcEtleXMgPSB2bS4kb3B0aW9ucy5fcHJvcEtleXMgfHwgW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IHByb3BLZXlzW2ldO1xuICAgICAgdmFyIHByb3BPcHRpb25zID0gdm0uJG9wdGlvbnMucHJvcHM7IC8vIHd0ZiBmbG93P1xuICAgICAgcHJvcHNba2V5XSA9IHZhbGlkYXRlUHJv
118cChrZXksIHByb3BPcHRpb25zLCBwcm9wc0RhdGEsIHZtKTtcbiAgICB9XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKHRydWUpO1xuICAgIC8vIGtlZXAgYSBjb3B5IG9mIHJhdyBwcm9wc0RhdGFcbiAgICB2bS4kb3B0aW9ucy5wcm9wc0RhdGEgPSBwcm9wc0RhdGE7XG4gIH1cblxuICAvLyB1cGRhdGUgbGlzdGVuZXJzXG4gIGxpc3RlbmVycyA9IGxpc3RlbmVycyB8fCBlbXB0eU9iamVjdDtcbiAgdmFyIG9sZExpc3RlbmVycyA9IHZtLiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnM7XG4gIHZtLiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnMgPSBsaXN0ZW5lcnM7XG4gIHVwZGF0ZUNvbXBvbmVudExpc3RlbmVycyh2bSwgbGlzdGVuZXJzLCBvbGRMaXN0ZW5lcnMpO1xuXG4gIC8vIHJlc29sdmUgc2xvdHMgKyBmb3JjZSB1cGRhdGUgaWYgaGFzIGNoaWxkcmVuXG4gIGlmIChuZWVkc0ZvcmNlVXBkYXRlKSB7XG4gICAgdm0uJHNsb3RzID0gcmVzb2x2ZVNsb3RzKHJlbmRlckNoaWxkcmVuLCBwYXJlbnRWbm9kZS5jb250ZXh0KTtcbiAgICB2bS4kZm9yY2VVcGRhdGUoKTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaXNVcGRhdGluZ0NoaWxkQ29tcG9uZW50ID0gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNJbkluYWN0aXZlVHJlZSAodm0pIHtcbiAgd2hpbGUgKHZtICYmICh2bSA9IHZtLiRwYXJlbnQpKSB7XG4gICAgaWYgKHZtLl9pbmFjdGl2ZSkgeyByZXR1cm4gdHJ1ZSB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIGFjdGl2YXRlQ2hpbGRDb21wb25lbnQgKHZtLCBkaXJlY3QpIHtcbiAgaWYgKGRpcmVjdCkge1xuICAgIHZtLl9kaXJlY3RJbmFjdGl2ZSA9IGZhbHNlO1xuICAgIGlmIChpc0luSW5hY3RpdmVUcmVlKHZtKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICB9IGVsc2UgaWYgKHZtLl9kaXJlY3RJbmFjdGl2ZSkge1xuICAgIHJldHVyblxuICB9XG4gIGlmICh2bS5faW5hY3RpdmUgfHwgdm0uX2luYWN0aXZlID09PSBudWxsKSB7XG4gICAgdm0uX2luYWN0aXZlID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2bS4kY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFjdGl2YXRlQ2hpbGRDb21wb25lbnQodm0uJGNoaWxkcmVuW2ldKTtcbiAgICB9XG4gICAgY2FsbEhvb2sodm0sICdhY3RpdmF0ZWQnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWFjdGl2YXRlQ2hpbGRDb21wb25lbnQgKHZtLCBkaXJlY3QpIHtcbiAgaWYgKGRpcmVjdCkge1xuICAgIHZtLl9kaXJlY3RJbmFjdGl2ZSA9IHRydWU7XG4gICAgaWYgKGlzSW5JbmFjdGl2ZVRyZWUodm0pKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gIH1cbiAgaWYgKCF2bS5faW5hY3RpdmUpIHtcbiAgICB2bS5faW5hY3RpdmUgPSB0cnVlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdm0uJGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkZWFjdGl2YXRlQ2hpbGRDb21wb25lbnQodm0uJGNoaWxkcmVuW2ldKTtcbiAgICB9XG4gICAgY2FsbEhvb2sodm0sICdkZWFjdGl2YXRlZCcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbGxIb29rICh2bSwgaG9vaykge1xuICAvLyAjNzU3MyBkaXNhYmxlIGRlcCBjb2xsZWN0aW9uIHdoZW4gaW52b2tpbmcgbGlmZWN5Y2xlIGhvb2tzXG4gIHB1c2hUYXJnZXQoKTtcbiAgdmFyIGhhbmRsZXJzID0gdm0uJG9wdGlvbnNbaG9va107XG4gIHZhciBpbmZvID0gaG9vayArIFwiIGhvb2tcIjtcbiAgaWYgKGhhbmRsZXJzKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSBoYW5kbGVycy5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGhhbmRsZXJzW2ldLCB2bSwgbnVsbCwgdm0sIGluZm8pO1xuICAgIH1cbiAgfVxuICBpZiAodm0uX2hhc0hvb2tFdmVudCkge1xuICAgIHZtLiRlbWl0KCdob29rOicgKyBob29rKTtcbiAgfVxuICBwb3BUYXJnZXQoKTtcbn1cblxuLyogICovXG5cbnZhciBNQVhfVVBEQVRFX0NPVU5UID0gMTAwO1xuXG52YXIgcXVldWUgPSBbXTtcbnZhciBhY3RpdmF0ZWRDaGlsZHJlbiA9IFtdO1xudmFyIGhhcyA9IHt9O1xudmFyIGNpcmN1bGFyID0ge307XG52YXIgd2FpdGluZyA9IGZhbHNlO1xudmFyIGZsdXNoaW5nID0gZmFsc2U7XG52YXIgaW5kZXggPSAwO1xuXG4vKipcbiAqIFJlc2V0IHRoZSBzY2hlZHVsZXIncyBzdGF0ZS5cbiAqL1xuZnVuY3Rpb24gcmVzZXRTY2hlZHVsZXJTdGF0ZSAoKSB7XG4gIGluZGV4ID0gcXVldWUubGVuZ3RoID0gYWN0aXZhdGVkQ2hpbGRyZW4ubGVuZ3RoID0gMDtcbiAgaGFzID0ge307XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgY2lyY3VsYXIgPSB7fTtcbiAgfVxuICB3YWl0aW5nID0gZmx1c2hpbmcgPSBmYWxzZTtcbn1cblxuLy8gQXN5bmMgZWRnZSBjYXNlICM2NTY2IHJlcXVpcmVzIHNhdmluZyB0aGUgdGltZXN0YW1wIHdoZW4gZXZlbnQgbGlzdGVuZXJzIGFyZVxuLy8gYXR0YWNoZWQuIEhvd2V2ZXIsIGNhbGxpbmcgcGVyZm9ybWFuY2Uubm93KCkgaGFzIGEgcGVyZiBvdmVyaGVhZCBlc3BlY2lhbGx5XG4vLyBpZiB0aGUgcGFnZSBoYXMgdGhvdXNhbmRzIG9mIGV2ZW50IGxpc3RlbmVycy4gSW5zdGVhZCwgd2UgdGFrZSBhIHRpbWVzdGFtcFxuLy8gZXZlcnkgdGltZSB0aGUgc2NoZWR1bGVyIGZsdXNoZXMgYW5kIHVzZSB0aGF0IGZvciBhbGwgZXZlbnQgbGlzdGVuZXJzXG4vLyBhdHRhY2hlZCBkdXJpbmcgdGhhdCBmbHVzaC5cbnZhciBjdXJyZW50Rmx1c2hUaW1lc3RhbXAgPSAwO1xuXG4vLyBBc3luYyBlZGdlIGNhc2UgZml4IHJlcXVpcmVzIHN0b3JpbmcgYW4gZXZlbnQgbGlzdGVuZXIncyBhdHRhY2ggdGltZXN0YW1wLlxudmFyIGdldE5vdyA9IERhdGUubm93O1xuXG4vLyBEZXRlcm1pbmUgd2hhdCBldmVudCB0aW1lc3RhbXAgdGhlIGJyb3dzZXIgaXMgdXNpbmcuIEFubm95aW5nbHksIHRoZVxuLy8gdGltZXN0YW1wIGNhbiBlaXRoZXIgYmUgaGktcmVzIChyZWxhdGl2ZSB0byBwYWdlIGxvYWQpIG9yIGxvdy1yZXNcbi8vIChyZWxhdGl2ZSB0byBVTklYIGVwb2NoKSwgc28gaW4gb3JkZXIgdG8gY29tcGFyZSB0aW1lIHdlIGhhdmUgdG8gdXNlIHRoZVxuLy8gc2FtZSB0aW1lc3RhbXAgdHlwZSB3aGVuIHNhdmluZyB0aGUgZmx1c2ggdGltZXN0YW1wLlxuLy8gQWxsIElFIHZlcnNpb25zIHVzZSBsb3ctcmVzIGV2ZW50IHRpbWVzdGFtcHMsIGFuZCBoYXZlIHByb2JsZW1hdGljIGNsb2NrXG4vLyBpbXBsZW1lbnRhdGlvbnMgKCM5NjMyKVxuaWYgKGluQnJvd3NlciAmJiAhaXNJRSkge1xuICB2YXIgcGVyZm9ybWFuY2UgPSB3aW5kb3cucGVyZm9ybWFuY2U7XG4gIGlmIChcbiAgICBwZXJmb3JtYW5jZSAmJlxuICAgI
118HR5cGVvZiBwZXJmb3JtYW5jZS5ub3cgPT09ICdmdW5jdGlvbicgJiZcbiAgICBnZXROb3coKSA+IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpLnRpbWVTdGFtcFxuICApIHtcbiAgICAvLyBpZiB0aGUgZXZlbnQgdGltZXN0YW1wLCBhbHRob3VnaCBldmFsdWF0ZWQgQUZURVIgdGhlIERhdGUubm93KCksIGlzXG4gICAgLy8gc21hbGxlciB0aGFuIGl0LCBpdCBtZWFucyB0aGUgZXZlbnQgaXMgdXNpbmcgYSBoaS1yZXMgdGltZXN0YW1wLFxuICAgIC8vIGFuZCB3ZSBuZWVkIHRvIHVzZSB0aGUgaGktcmVzIHZlcnNpb24gZm9yIGV2ZW50IGxpc3RlbmVyIHRpbWVzdGFtcHMgYXNcbiAgICAvLyB3ZWxsLlxuICAgIGdldE5vdyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpOyB9O1xuICB9XG59XG5cbi8qKlxuICogRmx1c2ggYm90aCBxdWV1ZXMgYW5kIHJ1biB0aGUgd2F0Y2hlcnMuXG4gKi9cbmZ1bmN0aW9uIGZsdXNoU2NoZWR1bGVyUXVldWUgKCkge1xuICBjdXJyZW50Rmx1c2hUaW1lc3RhbXAgPSBnZXROb3coKTtcbiAgZmx1c2hpbmcgPSB0cnVlO1xuICB2YXIgd2F0Y2hlciwgaWQ7XG5cbiAgLy8gU29ydCBxdWV1ZSBiZWZvcmUgZmx1c2guXG4gIC8vIFRoaXMgZW5zdXJlcyB0aGF0OlxuICAvLyAxLiBDb21wb25lbnRzIGFyZSB1cGRhdGVkIGZyb20gcGFyZW50IHRvIGNoaWxkLiAoYmVjYXVzZSBwYXJlbnQgaXMgYWx3YXlzXG4gIC8vICAgIGNyZWF0ZWQgYmVmb3JlIHRoZSBjaGlsZClcbiAgLy8gMi4gQSBjb21wb25lbnQncyB1c2VyIHdhdGNoZXJzIGFyZSBydW4gYmVmb3JlIGl0cyByZW5kZXIgd2F0Y2hlciAoYmVjYXVzZVxuICAvLyAgICB1c2VyIHdhdGNoZXJzIGFyZSBjcmVhdGVkIGJlZm9yZSB0aGUgcmVuZGVyIHdhdGNoZXIpXG4gIC8vIDMuIElmIGEgY29tcG9uZW50IGlzIGRlc3Ryb3llZCBkdXJpbmcgYSBwYXJlbnQgY29tcG9uZW50J3Mgd2F0Y2hlciBydW4sXG4gIC8vICAgIGl0cyB3YXRjaGVycyBjYW4gYmUgc2tpcHBlZC5cbiAgcXVldWUuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYS5pZCAtIGIuaWQ7IH0pO1xuXG4gIC8vIGRvIG5vdCBjYWNoZSBsZW5ndGggYmVjYXVzZSBtb3JlIHdhdGNoZXJzIG1pZ2h0IGJlIHB1c2hlZFxuICAvLyBhcyB3ZSBydW4gZXhpc3Rpbmcgd2F0Y2hlcnNcbiAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcXVldWUubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgd2F0Y2hlciA9IHF1ZXVlW2luZGV4XTtcbiAgICBpZiAod2F0Y2hlci5iZWZvcmUpIHtcbiAgICAgIHdhdGNoZXIuYmVmb3JlKCk7XG4gICAgfVxuICAgIGlkID0gd2F0Y2hlci5pZDtcbiAgICBoYXNbaWRdID0gbnVsbDtcbiAgICB3YXRjaGVyLnJ1bigpO1xuICAgIC8vIGluIGRldiBidWlsZCwgY2hlY2sgYW5kIHN0b3AgY2lyY3VsYXIgdXBkYXRlcy5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBoYXNbaWRdICE9IG51bGwpIHtcbiAgICAgIGNpcmN1bGFyW2lkXSA9IChjaXJjdWxhcltpZF0gfHwgMCkgKyAxO1xuICAgICAgaWYgKGNpcmN1bGFyW2lkXSA+IE1BWF9VUERBVEVfQ09VTlQpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAnWW91IG1heSBoYXZlIGFuIGluZmluaXRlIHVwZGF0ZSBsb29wICcgKyAoXG4gICAgICAgICAgICB3YXRjaGVyLnVzZXJcbiAgICAgICAgICAgICAgPyAoXCJpbiB3YXRjaGVyIHdpdGggZXhwcmVzc2lvbiBcXFwiXCIgKyAod2F0Y2hlci5leHByZXNzaW9uKSArIFwiXFxcIlwiKVxuICAgICAgICAgICAgICA6IFwiaW4gYSBjb21wb25lbnQgcmVuZGVyIGZ1bmN0aW9uLlwiXG4gICAgICAgICAgKSxcbiAgICAgICAgICB3YXRjaGVyLnZtXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8ga2VlcCBjb3BpZXMgb2YgcG9zdCBxdWV1ZXMgYmVmb3JlIHJlc2V0dGluZyBzdGF0ZVxuICB2YXIgYWN0aXZhdGVkUXVldWUgPSBhY3RpdmF0ZWRDaGlsZHJlbi5zbGljZSgpO1xuICB2YXIgdXBkYXRlZFF1ZXVlID0gcXVldWUuc2xpY2UoKTtcblxuICByZXNldFNjaGVkdWxlclN0YXRlKCk7XG5cbiAgLy8gY2FsbCBjb21wb25lbnQgdXBkYXRlZCBhbmQgYWN0aXZhdGVkIGhvb2tzXG4gIGNhbGxBY3RpdmF0ZWRIb29rcyhhY3RpdmF0ZWRRdWV1ZSk7XG4gIGNhbGxVcGRhdGVkSG9va3ModXBkYXRlZFF1ZXVlKTtcblxuICAvLyBkZXZ0b29sIGhvb2tcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChkZXZ0b29scyAmJiBjb25maWcuZGV2dG9vbHMpIHtcbiAgICBkZXZ0b29scy5lbWl0KCdmbHVzaCcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbGxVcGRhdGVkSG9va3MgKHF1ZXVlKSB7XG4gIHZhciBpID0gcXVldWUubGVuZ3RoO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgdmFyIHdhdGNoZXIgPSBxdWV1ZVtpXTtcbiAgICB2YXIgdm0gPSB3YXRjaGVyLnZtO1xuICAgIGlmICh2bS5fd2F0Y2hlciA9PT0gd2F0Y2hlciAmJiB2bS5faXNNb3VudGVkICYmICF2bS5faXNEZXN0cm95ZWQpIHtcbiAgICAgIGNhbGxIb29rKHZtLCAndXBkYXRlZCcpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFF1ZXVlIGEga2VwdC1hbGl2ZSBjb21wb25lbnQgdGhhdCB3YXMgYWN0aXZhdGVkIGR1cmluZyBwYXRjaC5cbiAqIFRoZSBxdWV1ZSB3aWxsIGJlIHByb2Nlc3NlZCBhZnRlciB0aGUgZW50aXJlIHRyZWUgaGFzIGJlZW4gcGF0Y2hlZC5cbiAqL1xuZnVuY3Rpb24gcXVldWVBY3RpdmF0ZWRDb21wb25lbnQgKHZtKSB7XG4gIC8vIHNldHRpbmcgX2luYWN0aXZlIHRvIGZhbHNlIGhlcmUgc28gdGhhdCBhIHJlbmRlciBmdW5jdGlvbiBjYW5cbiAgLy8gcmVseSBvbiBjaGVja2luZyB3aGV0aGVyIGl0J3MgaW4gYW4gaW5hY3RpdmUgdHJlZSAoZS5nLiByb3V0ZXItdmlldylcbiAgdm0uX2luYWN0aXZlID0gZmFsc2U7XG4gIGFjdGl2YXRlZENoaWxkcmVuLnB1c2godm0pO1xufVxuXG5mdW5jdGlvbiBjYWxsQWN0aXZhdGVkSG9va3MgKHF1ZXVlKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICBxdWV1ZVtpXS5faW5hY3RpdmUgPSB0cnVlO1xuICAgIGFjdGl2YXRlQ2hpbGRDb21wb25lbnQocXVldWVbaV0sIHRydWUgLyogdHJ1ZSAqLyk7XG4gIH1cbn1cblxuLyoqXG4gKiBQdXNoIGEgd2F0Y2hlciBpbnRvIHRoZSB3YXRjaGVyIHF1ZXVlLlxuICogSm9icyB3aXRoIGR1cGxpY2F0ZSBJRHMgd2lsbCBiZSBza2lwcGVkIHVubGVzcyBpdCdzXG4gKiBwdXNoZWQgd2hlbiB0aGUgcXVldWUgaXMgYmVpbmcgZmx1c2hlZC5cbiAqL1xuZnVuY3Rpb24gcXVldWVXYXRjaGVyICh3YXRjaGVyKSB7XG4gIHZhciBpZCA9IHdhdGNoZXIuaWQ7XG4gIGlmIChoYXNbaWRdID09IG51bGwpIHtcbiAgICBoYXNbaWRdID0gdHJ1ZTtcbiAgICBpZiAoIWZsdXNoaW5nKSB7XG4gICAgICBxdWV1ZS5wdXNoKHdhdGNoZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiBhbHJlYWR5IGZsdXNoaW5nLCBzcGxpY2UgdGhlIHdhdGNoZXIgYmFzZWQgb24gaXRzIGlkXG4gICAgICAvLyBpZiBhbHJlYWR5IHBhc3QgaXRzIGlkLCBpdCB3aWxsIGJlIHJ1biBuZXh0IGltbWVkaWF0ZWx5LlxuICAgICAgdmFyIGkgPSBxdWV1ZS5sZW5ndGggLSAxO1xuICAgICAgd2hpbGUgKGkgPiBpbmRleCAmJiBxdWV1ZVtpXS5pZCA+IHdhdGNoZXIuaWQpIHtcbiAgICAgICAgaS0tO1xuICAgICAgfVxuICAgICAgcXVldWUuc3BsaWNlKGkgKyAxLCAwLCB3YXRjaGVyKTtcbiAgICB9XG4gICAgLy8gcXVldWUgdGhlIGZsdXNoXG4gICAgaWYgKCF3YWl
1180aW5nKSB7XG4gICAgICB3YWl0aW5nID0gdHJ1ZTtcblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWNvbmZpZy5hc3luYykge1xuICAgICAgICBmbHVzaFNjaGVkdWxlclF1ZXVlKCk7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgbmV4dFRpY2soZmx1c2hTY2hlZHVsZXJRdWV1ZSk7XG4gICAgfVxuICB9XG59XG5cbi8qICAqL1xuXG5cblxudmFyIHVpZCQyID0gMDtcblxuLyoqXG4gKiBBIHdhdGNoZXIgcGFyc2VzIGFuIGV4cHJlc3Npb24sIGNvbGxlY3RzIGRlcGVuZGVuY2llcyxcbiAqIGFuZCBmaXJlcyBjYWxsYmFjayB3aGVuIHRoZSBleHByZXNzaW9uIHZhbHVlIGNoYW5nZXMuXG4gKiBUaGlzIGlzIHVzZWQgZm9yIGJvdGggdGhlICR3YXRjaCgpIGFwaSBhbmQgZGlyZWN0aXZlcy5cbiAqL1xudmFyIFdhdGNoZXIgPSBmdW5jdGlvbiBXYXRjaGVyIChcbiAgdm0sXG4gIGV4cE9yRm4sXG4gIGNiLFxuICBvcHRpb25zLFxuICBpc1JlbmRlcldhdGNoZXJcbikge1xuICB0aGlzLnZtID0gdm07XG4gIGlmIChpc1JlbmRlcldhdGNoZXIpIHtcbiAgICB2bS5fd2F0Y2hlciA9IHRoaXM7XG4gIH1cbiAgdm0uX3dhdGNoZXJzLnB1c2godGhpcyk7XG4gIC8vIG9wdGlvbnNcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICB0aGlzLmRlZXAgPSAhIW9wdGlvbnMuZGVlcDtcbiAgICB0aGlzLnVzZXIgPSAhIW9wdGlvbnMudXNlcjtcbiAgICB0aGlzLmxhenkgPSAhIW9wdGlvbnMubGF6eTtcbiAgICB0aGlzLnN5bmMgPSAhIW9wdGlvbnMuc3luYztcbiAgICB0aGlzLmJlZm9yZSA9IG9wdGlvbnMuYmVmb3JlO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuZGVlcCA9IHRoaXMudXNlciA9IHRoaXMubGF6eSA9IHRoaXMuc3luYyA9IGZhbHNlO1xuICB9XG4gIHRoaXMuY2IgPSBjYjtcbiAgdGhpcy5pZCA9ICsrdWlkJDI7IC8vIHVpZCBmb3IgYmF0Y2hpbmdcbiAgdGhpcy5hY3RpdmUgPSB0cnVlO1xuICB0aGlzLmRpcnR5ID0gdGhpcy5sYXp5OyAvLyBmb3IgbGF6eSB3YXRjaGVyc1xuICB0aGlzLmRlcHMgPSBbXTtcbiAgdGhpcy5uZXdEZXBzID0gW107XG4gIHRoaXMuZGVwSWRzID0gbmV3IF9TZXQoKTtcbiAgdGhpcy5uZXdEZXBJZHMgPSBuZXcgX1NldCgpO1xuICB0aGlzLmV4cHJlc3Npb24gPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nXG4gICAgPyBleHBPckZuLnRvU3RyaW5nKClcbiAgICA6ICcnO1xuICAvLyBwYXJzZSBleHByZXNzaW9uIGZvciBnZXR0ZXJcbiAgaWYgKHR5cGVvZiBleHBPckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhpcy5nZXR0ZXIgPSBleHBPckZuO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuZ2V0dGVyID0gcGFyc2VQYXRoKGV4cE9yRm4pO1xuICAgIGlmICghdGhpcy5nZXR0ZXIpIHtcbiAgICAgIHRoaXMuZ2V0dGVyID0gbm9vcDtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICAgXCJGYWlsZWQgd2F0Y2hpbmcgcGF0aDogXFxcIlwiICsgZXhwT3JGbiArIFwiXFxcIiBcIiArXG4gICAgICAgICdXYXRjaGVyIG9ubHkgYWNjZXB0cyBzaW1wbGUgZG90LWRlbGltaXRlZCBwYXRocy4gJyArXG4gICAgICAgICdGb3IgZnVsbCBjb250cm9sLCB1c2UgYSBmdW5jdGlvbiBpbnN0ZWFkLicsXG4gICAgICAgIHZtXG4gICAgICApO1xuICAgIH1cbiAgfVxuICB0aGlzLnZhbHVlID0gdGhpcy5sYXp5XG4gICAgPyB1bmRlZmluZWRcbiAgICA6IHRoaXMuZ2V0KCk7XG59O1xuXG4vKipcbiAqIEV2YWx1YXRlIHRoZSBnZXR0ZXIsIGFuZCByZS1jb2xsZWN0IGRlcGVuZGVuY2llcy5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gZ2V0ICgpIHtcbiAgcHVzaFRhcmdldCh0aGlzKTtcbiAgdmFyIHZhbHVlO1xuICB2YXIgdm0gPSB0aGlzLnZtO1xuICB0cnkge1xuICAgIHZhbHVlID0gdGhpcy5nZXR0ZXIuY2FsbCh2bSwgdm0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKHRoaXMudXNlcikge1xuICAgICAgaGFuZGxlRXJyb3IoZSwgdm0sIChcImdldHRlciBmb3Igd2F0Y2hlciBcXFwiXCIgKyAodGhpcy5leHByZXNzaW9uKSArIFwiXFxcIlwiKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgLy8gXCJ0b3VjaFwiIGV2ZXJ5IHByb3BlcnR5IHNvIHRoZXkgYXJlIGFsbCB0cmFja2VkIGFzXG4gICAgLy8gZGVwZW5kZW5jaWVzIGZvciBkZWVwIHdhdGNoaW5nXG4gICAgaWYgKHRoaXMuZGVlcCkge1xuICAgICAgdHJhdmVyc2UodmFsdWUpO1xuICAgIH1cbiAgICBwb3BUYXJnZXQoKTtcbiAgICB0aGlzLmNsZWFudXBEZXBzKCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59O1xuXG4vKipcbiAqIEFkZCBhIGRlcGVuZGVuY3kgdG8gdGhpcyBkaXJlY3RpdmUuXG4gKi9cbldhdGNoZXIucHJvdG90eXBlLmFkZERlcCA9IGZ1bmN0aW9uIGFkZERlcCAoZGVwKSB7XG4gIHZhciBpZCA9IGRlcC5pZDtcbiAgaWYgKCF0aGlzLm5ld0RlcElkcy5oYXMoaWQpKSB7XG4gICAgdGhpcy5uZXdEZXBJZHMuYWRkKGlkKTtcbiAgICB0aGlzLm5ld0RlcHMucHVzaChkZXApO1xuICAgIGlmICghdGhpcy5kZXBJZHMuaGFzKGlkKSkge1xuICAgICAgZGVwLmFkZFN1Yih0aGlzKTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogQ2xlYW4gdXAgZm9yIGRlcGVuZGVuY3kgY29sbGVjdGlvbi5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUuY2xlYW51cERlcHMgPSBmdW5jdGlvbiBjbGVhbnVwRGVwcyAoKSB7XG4gIHZhciBpID0gdGhpcy5kZXBzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSkge1xuICAgIHZhciBkZXAgPSB0aGlzLmRlcHNbaV07XG4gICAgaWYgKCF0aGlzLm5ld0RlcElkcy5oYXMoZGVwLmlkKSkge1xuICAgICAgZGVwLnJlbW92ZVN1Yih0aGlzKTtcbiAgICB9XG4gIH1cbiAgdmFyIHRtcCA9IHRoaXMuZGVwSWRzO1xuICB0aGlzLmRlcElkcyA9IHRoaXMubmV3RGVwSWRzO1xuICB0aGlzLm5ld0RlcElkcyA9IHRtcDtcbiAgdGhpcy5uZXdEZXBJZHMuY2xlYXIoKTtcbiAgdG1wID0gdGhpcy5kZXBzO1xuICB0aGlzLmRlcHMgPSB0aGlzLm5ld0RlcHM7XG4gIHRoaXMubmV3RGVwcyA9IHRtcDtcbiAgdGhpcy5uZXdEZXBzLmxlbmd0aCA9IDA7XG59O1xuXG4vKipcbiAqIFN1YnNjcmliZXIgaW50ZXJmYWNlLlxuICogV2lsbCBiZSBjYWxsZWQgd2hlbiBhIGRlcGVuZGVuY3kgY2hhbmdlcy5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlICgpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKHRoaXMubGF6eSkge1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICB9IGVsc2UgaWYgKHRoaXMuc3luYykge1xuICAgIHRoaXMucnVuKCk7XG4gIH0gZWxzZSB7XG4gICAgcXVldWVXYXRjaGVyKHRoaXMpO1xuICB9XG59O1xuXG4vKipcbiAqIFNjaGVkdWxlciBqb2IgaW50ZXJmYWNlLlxuICogV2lsbCBiZSBjYWxsZWQgYnkgdGhlI
118HNjaGVkdWxlci5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gcnVuICgpIHtcbiAgaWYgKHRoaXMuYWN0aXZlKSB7XG4gICAgdmFyIHZhbHVlID0gdGhpcy5nZXQoKTtcbiAgICBpZiAoXG4gICAgICB2YWx1ZSAhPT0gdGhpcy52YWx1ZSB8fFxuICAgICAgLy8gRGVlcCB3YXRjaGVycyBhbmQgd2F0Y2hlcnMgb24gT2JqZWN0L0FycmF5cyBzaG91bGQgZmlyZSBldmVuXG4gICAgICAvLyB3aGVuIHRoZSB2YWx1ZSBpcyB0aGUgc2FtZSwgYmVjYXVzZSB0aGUgdmFsdWUgbWF5XG4gICAgICAvLyBoYXZlIG11dGF0ZWQuXG4gICAgICBpc09iamVjdCh2YWx1ZSkgfHxcbiAgICAgIHRoaXMuZGVlcFxuICAgICkge1xuICAgICAgLy8gc2V0IG5ldyB2YWx1ZVxuICAgICAgdmFyIG9sZFZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgIGlmICh0aGlzLnVzZXIpIHtcbiAgICAgICAgdmFyIGluZm8gPSBcImNhbGxiYWNrIGZvciB3YXRjaGVyIFxcXCJcIiArICh0aGlzLmV4cHJlc3Npb24pICsgXCJcXFwiXCI7XG4gICAgICAgIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKHRoaXMuY2IsIHRoaXMudm0sIFt2YWx1ZSwgb2xkVmFsdWVdLCB0aGlzLnZtLCBpbmZvKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2IuY2FsbCh0aGlzLnZtLCB2YWx1ZSwgb2xkVmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBFdmFsdWF0ZSB0aGUgdmFsdWUgb2YgdGhlIHdhdGNoZXIuXG4gKiBUaGlzIG9ubHkgZ2V0cyBjYWxsZWQgZm9yIGxhenkgd2F0Y2hlcnMuXG4gKi9cbldhdGNoZXIucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24gZXZhbHVhdGUgKCkge1xuICB0aGlzLnZhbHVlID0gdGhpcy5nZXQoKTtcbiAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBEZXBlbmQgb24gYWxsIGRlcHMgY29sbGVjdGVkIGJ5IHRoaXMgd2F0Y2hlci5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUuZGVwZW5kID0gZnVuY3Rpb24gZGVwZW5kICgpIHtcbiAgdmFyIGkgPSB0aGlzLmRlcHMubGVuZ3RoO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgdGhpcy5kZXBzW2ldLmRlcGVuZCgpO1xuICB9XG59O1xuXG4vKipcbiAqIFJlbW92ZSBzZWxmIGZyb20gYWxsIGRlcGVuZGVuY2llcycgc3Vic2NyaWJlciBsaXN0LlxuICovXG5XYXRjaGVyLnByb3RvdHlwZS50ZWFyZG93biA9IGZ1bmN0aW9uIHRlYXJkb3duICgpIHtcbiAgaWYgKHRoaXMuYWN0aXZlKSB7XG4gICAgLy8gcmVtb3ZlIHNlbGYgZnJvbSB2bSdzIHdhdGNoZXIgbGlzdFxuICAgIC8vIHRoaXMgaXMgYSBzb21ld2hhdCBleHBlbnNpdmUgb3BlcmF0aW9uIHNvIHdlIHNraXAgaXRcbiAgICAvLyBpZiB0aGUgdm0gaXMgYmVpbmcgZGVzdHJveWVkLlxuICAgIGlmICghdGhpcy52bS5faXNCZWluZ0Rlc3Ryb3llZCkge1xuICAgICAgcmVtb3ZlKHRoaXMudm0uX3dhdGNoZXJzLCB0aGlzKTtcbiAgICB9XG4gICAgdmFyIGkgPSB0aGlzLmRlcHMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIHRoaXMuZGVwc1tpXS5yZW1vdmVTdWIodGhpcyk7XG4gICAgfVxuICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XG4gIH1cbn07XG5cbi8qICAqL1xuXG52YXIgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uID0ge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGdldDogbm9vcCxcbiAgc2V0OiBub29wXG59O1xuXG5mdW5jdGlvbiBwcm94eSAodGFyZ2V0LCBzb3VyY2VLZXksIGtleSkge1xuICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uZ2V0ID0gZnVuY3Rpb24gcHJveHlHZXR0ZXIgKCkge1xuICAgIHJldHVybiB0aGlzW3NvdXJjZUtleV1ba2V5XVxuICB9O1xuICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0ID0gZnVuY3Rpb24gcHJveHlTZXR0ZXIgKHZhbCkge1xuICAgIHRoaXNbc291cmNlS2V5XVtrZXldID0gdmFsO1xuICB9O1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbik7XG59XG5cbmZ1bmN0aW9uIGluaXRTdGF0ZSAodm0pIHtcbiAgdm0uX3dhdGNoZXJzID0gW107XG4gIHZhciBvcHRzID0gdm0uJG9wdGlvbnM7XG4gIGlmIChvcHRzLnByb3BzKSB7IGluaXRQcm9wcyh2bSwgb3B0cy5wcm9wcyk7IH1cbiAgaWYgKG9wdHMubWV0aG9kcykgeyBpbml0TWV0aG9kcyh2bSwgb3B0cy5tZXRob2RzKTsgfVxuICBpZiAob3B0cy5kYXRhKSB7XG4gICAgaW5pdERhdGEodm0pO1xuICB9IGVsc2Uge1xuICAgIG9ic2VydmUodm0uX2RhdGEgPSB7fSwgdHJ1ZSAvKiBhc1Jvb3REYXRhICovKTtcbiAgfVxuICBpZiAob3B0cy5jb21wdXRlZCkgeyBpbml0Q29tcHV0ZWQodm0sIG9wdHMuY29tcHV0ZWQpOyB9XG4gIGlmIChvcHRzLndhdGNoICYmIG9wdHMud2F0Y2ggIT09IG5hdGl2ZVdhdGNoKSB7XG4gICAgaW5pdFdhdGNoKHZtLCBvcHRzLndhdGNoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0UHJvcHMgKHZtLCBwcm9wc09wdGlvbnMpIHtcbiAgdmFyIHByb3BzRGF0YSA9IHZtLiRvcHRpb25zLnByb3BzRGF0YSB8fCB7fTtcbiAgdmFyIHByb3BzID0gdm0uX3Byb3BzID0ge307XG4gIC8vIGNhY2hlIHByb3Aga2V5cyBzbyB0aGF0IGZ1dHVyZSBwcm9wcyB1cGRhdGVzIGNhbiBpdGVyYXRlIHVzaW5nIEFycmF5XG4gIC8vIGluc3RlYWQgb2YgZHluYW1pYyBvYmplY3Qga2V5IGVudW1lcmF0aW9uLlxuICB2YXIga2V5cyA9IHZtLiRvcHRpb25zLl9wcm9wS2V5cyA9IFtdO1xuICB2YXIgaXNSb290ID0gIXZtLiRwYXJlbnQ7XG4gIC8vIHJvb3QgaW5zdGFuY2UgcHJvcHMgc2hvdWxkIGJlIGNvbnZlcnRlZFxuICBpZiAoIWlzUm9vdCkge1xuICAgIHRvZ2dsZU9ic2VydmluZyhmYWxzZSk7XG4gIH1cbiAgdmFyIGxvb3AgPSBmdW5jdGlvbiAoIGtleSApIHtcbiAgICBrZXlzLnB1c2goa2V5KTtcbiAgICB2YXIgdmFsdWUgPSB2YWxpZGF0ZVByb3Aoa2V5LCBwcm9wc09wdGlvbnMsIHByb3BzRGF0YSwgdm0pO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHZhciBoeXBoZW5
118hdGVkS2V5ID0gaHlwaGVuYXRlKGtleSk7XG4gICAgICBpZiAoaXNSZXNlcnZlZEF0dHJpYnV0ZShoeXBoZW5hdGVkS2V5KSB8fFxuICAgICAgICAgIGNvbmZpZy5pc1Jlc2VydmVkQXR0cihoeXBoZW5hdGVkS2V5KSkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgIChcIlxcXCJcIiArIGh5cGhlbmF0ZWRLZXkgKyBcIlxcXCIgaXMgYSByZXNlcnZlZCBhdHRyaWJ1dGUgYW5kIGNhbm5vdCBiZSB1c2VkIGFzIGNvbXBvbmVudCBwcm9wLlwiKSxcbiAgICAgICAgICB2bVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgZGVmaW5lUmVhY3RpdmUkJDEocHJvcHMsIGtleSwgdmFsdWUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFpc1Jvb3QgJiYgIWlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCkge1xuICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICBcIkF2b2lkIG11dGF0aW5nIGEgcHJvcCBkaXJlY3RseSBzaW5jZSB0aGUgdmFsdWUgd2lsbCBiZSBcIiArXG4gICAgICAgICAgICBcIm92ZXJ3cml0dGVuIHdoZW5ldmVyIHRoZSBwYXJlbnQgY29tcG9uZW50IHJlLXJlbmRlcnMuIFwiICtcbiAgICAgICAgICAgIFwiSW5zdGVhZCwgdXNlIGEgZGF0YSBvciBjb21wdXRlZCBwcm9wZXJ0eSBiYXNlZCBvbiB0aGUgcHJvcCdzIFwiICtcbiAgICAgICAgICAgIFwidmFsdWUuIFByb3AgYmVpbmcgbXV0YXRlZDogXFxcIlwiICsga2V5ICsgXCJcXFwiXCIsXG4gICAgICAgICAgICB2bVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWZpbmVSZWFjdGl2ZSQkMShwcm9wcywga2V5LCB2YWx1ZSk7XG4gICAgfVxuICAgIC8vIHN0YXRpYyBwcm9wcyBhcmUgYWxyZWFkeSBwcm94aWVkIG9uIHRoZSBjb21wb25lbnQncyBwcm90b3R5cGVcbiAgICAvLyBkdXJpbmcgVnVlLmV4dGVuZCgpLiBXZSBvbmx5IG5lZWQgdG8gcHJveHkgcHJvcHMgZGVmaW5lZCBhdFxuICAgIC8vIGluc3RhbnRpYXRpb24gaGVyZS5cbiAgICBpZiAoIShrZXkgaW4gdm0pKSB7XG4gICAgICBwcm94eSh2bSwgXCJfcHJvcHNcIiwga2V5KTtcbiAgICB9XG4gIH07XG5cbiAgZm9yICh2YXIga2V5IGluIHByb3BzT3B0aW9ucykgbG9vcCgga2V5ICk7XG4gIHRvZ2dsZU9ic2VydmluZyh0cnVlKTtcbn1cblxuZnVuY3Rpb24gaW5pdERhdGEgKHZtKSB7XG4gIHZhciBkYXRhID0gdm0uJG9wdGlvbnMuZGF0YTtcbiAgZGF0YSA9IHZtLl9kYXRhID0gdHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbidcbiAgICA/IGdldERhdGEoZGF0YSwgdm0pXG4gICAgOiBkYXRhIHx8IHt9O1xuICBpZiAoIWlzUGxhaW5PYmplY3QoZGF0YSkpIHtcbiAgICBkYXRhID0ge307XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgJ2RhdGEgZnVuY3Rpb25zIHNob3VsZCByZXR1cm4gYW4gb2JqZWN0OlxcbicgK1xuICAgICAgJ2h0dHBzOi8vdnVlanMub3JnL3YyL2d1aWRlL2NvbXBvbmVudHMuaHRtbCNkYXRhLU11c3QtQmUtYS1GdW5jdGlvbicsXG4gICAgICB2bVxuICAgICk7XG4gIH1cbiAgLy8gcHJveHkgZGF0YSBvbiBpbnN0YW5jZVxuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGRhdGEpO1xuICB2YXIgcHJvcHMgPSB2bS4kb3B0aW9ucy5wcm9wcztcbiAgdmFyIG1ldGhvZHMgPSB2bS4kb3B0aW9ucy5tZXRob2RzO1xuICB2YXIgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChtZXRob2RzICYmIGhhc093bihtZXRob2RzLCBrZXkpKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgKFwiTWV0aG9kIFxcXCJcIiArIGtleSArIFwiXFxcIiBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQgYXMgYSBkYXRhIHByb3BlcnR5LlwiKSxcbiAgICAgICAgICB2bVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvcHMgJiYgaGFzT3duKHByb3BzLCBrZXkpKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oXG4gICAgICAgIFwiVGhlIGRhdGEgcHJvcGVydHkgXFxcIlwiICsga2V5ICsgXCJcXFwiIGlzIGFscmVhZHkgZGVjbGFyZWQgYXMgYSBwcm9wLiBcIiArXG4gICAgICAgIFwiVXNlIHByb3AgZGVmYXVsdCB2YWx1ZSBpbnN0ZWFkLlwiLFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKCFpc1Jlc2VydmVkKGtleSkpIHtcbiAgICAgIHByb3h5KHZtLCBcIl9kYXRhXCIsIGtleSk7XG4gICAgfVxuICB9XG4gIC8vIG9ic2VydmUgZGF0YVxuICBvYnNlcnZlKGRhdGEsIHRydWUgLyogYXNSb290RGF0YSAqLyk7XG59XG5cbmZ1bmN0aW9uIGdldERhdGEgKGRhdGEsIHZtKSB7XG4gIC8vICM3NTczIGRpc2FibGUgZGVwIGNvbGxlY3Rpb24gd2hlbiBpbnZva2luZyBkYXRhIGdldHRlcnNcbiAgcHVzaFRhcmdldCgpO1xuICB0cnkge1xuICAgIHJldHVybiBkYXRhLmNhbGwodm0sIHZtKVxuICB9IGNhdGNoIChlKSB7XG4gICAgaGFuZGxlRXJyb3IoZSwgdm0sIFwiZGF0YSgpXCIpO1xuICAgIHJldHVybiB7fVxuICB9IGZpbmFsbHkge1xuICAgIHBvcFRhcmdldCgpO1xuICB9XG59XG5cbnZhciBjb21wdXRlZFdhdGNoZXJPcHRpb25zID0geyBsYXp5OiB0cnVlIH07XG5cbmZ1bmN0aW9uIGluaXRDb21wdXRlZCAodm0sIGNvbXB1dGVkKSB7XG4gIC8vICRmbG93LWRpc2FibGUtbGluZVxuICB2YXIgd2F0Y2hlcnMgPSB2bS5fY29tcHV0ZWRXYXRjaGVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIC8vIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIGp1c3QgZ2V0dGVycyBkdXJpbmcgU1NSXG4gIHZhciBpc1NTUiA9IGlzU2VydmVyUmVuZGVyaW5nKCk7XG5cbiAgZm9yICh2YXIga2V5IGluIGNvbXB1dGVkKSB7XG4gICAgdmFyIHVzZXJEZWYgPSBjb21wdXRlZFtrZXldO1xuICAgIHZhciBnZXR0ZXIgPSB0eXBlb2YgdXNlckRlZiA9PT0gJ2Z1bmN0aW9uJyA/IHVzZXJEZWYgOiB1c2VyRGVmLmdldDtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBnZXR0ZXIgPT0gbnVsbCkge1xuICAgICAgd2FybihcbiAgICAgICAgKFwiR2V0dGVyIGlzIG1pc3NpbmcgZm9yIGNvbXB1dGVkIHByb3BlcnR5IFxcXCJcIiArIGtleSArIFwiXFxcIi5cIiksXG4gICAgICAgI
118HZtXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghaXNTU1IpIHtcbiAgICAgIC8vIGNyZWF0ZSBpbnRlcm5hbCB3YXRjaGVyIGZvciB0aGUgY29tcHV0ZWQgcHJvcGVydHkuXG4gICAgICB3YXRjaGVyc1trZXldID0gbmV3IFdhdGNoZXIoXG4gICAgICAgIHZtLFxuICAgICAgICBnZXR0ZXIgfHwgbm9vcCxcbiAgICAgICAgbm9vcCxcbiAgICAgICAgY29tcHV0ZWRXYXRjaGVyT3B0aW9uc1xuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBjb21wb25lbnQtZGVmaW5lZCBjb21wdXRlZCBwcm9wZXJ0aWVzIGFyZSBhbHJlYWR5IGRlZmluZWQgb24gdGhlXG4gICAgLy8gY29tcG9uZW50IHByb3RvdHlwZS4gV2Ugb25seSBuZWVkIHRvIGRlZmluZSBjb21wdXRlZCBwcm9wZXJ0aWVzIGRlZmluZWRcbiAgICAvLyBhdCBpbnN0YW50aWF0aW9uIGhlcmUuXG4gICAgaWYgKCEoa2V5IGluIHZtKSkge1xuICAgICAgZGVmaW5lQ29tcHV0ZWQodm0sIGtleSwgdXNlckRlZik7XG4gICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoa2V5IGluIHZtLiRkYXRhKSB7XG4gICAgICAgIHdhcm4oKFwiVGhlIGNvbXB1dGVkIHByb3BlcnR5IFxcXCJcIiArIGtleSArIFwiXFxcIiBpcyBhbHJlYWR5IGRlZmluZWQgaW4gZGF0YS5cIiksIHZtKTtcbiAgICAgIH0gZWxzZSBpZiAodm0uJG9wdGlvbnMucHJvcHMgJiYga2V5IGluIHZtLiRvcHRpb25zLnByb3BzKSB7XG4gICAgICAgIHdhcm4oKFwiVGhlIGNvbXB1dGVkIHByb3BlcnR5IFxcXCJcIiArIGtleSArIFwiXFxcIiBpcyBhbHJlYWR5IGRlZmluZWQgYXMgYSBwcm9wLlwiKSwgdm0pO1xuICAgICAgfSBlbHNlIGlmICh2bS4kb3B0aW9ucy5tZXRob2RzICYmIGtleSBpbiB2bS4kb3B0aW9ucy5tZXRob2RzKSB7XG4gICAgICAgIHdhcm4oKFwiVGhlIGNvbXB1dGVkIHByb3BlcnR5IFxcXCJcIiArIGtleSArIFwiXFxcIiBpcyBhbHJlYWR5IGRlZmluZWQgYXMgYSBtZXRob2QuXCIpLCB2bSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGRlZmluZUNvbXB1dGVkIChcbiAgdGFyZ2V0LFxuICBrZXksXG4gIHVzZXJEZWZcbikge1xuICB2YXIgc2hvdWxkQ2FjaGUgPSAhaXNTZXJ2ZXJSZW5kZXJpbmcoKTtcbiAgaWYgKHR5cGVvZiB1c2VyRGVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLmdldCA9IHNob3VsZENhY2hlXG4gICAgICA/IGNyZWF0ZUNvbXB1dGVkR2V0dGVyKGtleSlcbiAgICAgIDogY3JlYXRlR2V0dGVySW52b2tlcih1c2VyRGVmKTtcbiAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0ID0gbm9vcDtcbiAgfSBlbHNlIHtcbiAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uZ2V0ID0gdXNlckRlZi5nZXRcbiAgICAgID8gc2hvdWxkQ2FjaGUgJiYgdXNlckRlZi5jYWNoZSAhPT0gZmFsc2VcbiAgICAgICAgPyBjcmVhdGVDb21wdXRlZEdldHRlcihrZXkpXG4gICAgICAgIDogY3JlYXRlR2V0dGVySW52b2tlcih1c2VyRGVmLmdldClcbiAgICAgIDogbm9vcDtcbiAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0ID0gdXNlckRlZi5zZXQgfHwgbm9vcDtcbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLnNldCA9PT0gbm9vcCkge1xuICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAoXCJDb21wdXRlZCBwcm9wZXJ0eSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgd2FzIGFzc2lnbmVkIHRvIGJ1dCBpdCBoYXMgbm8gc2V0dGVyLlwiKSxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ29tcHV0ZWRHZXR0ZXIgKGtleSkge1xuICByZXR1cm4gZnVuY3Rpb24gY29tcHV0ZWRHZXR0ZXIgKCkge1xuICAgIHZhciB3YXRjaGVyID0gdGhpcy5fY29tcHV0ZWRXYXRjaGVycyAmJiB0aGlzLl9jb21wdXRlZFdhdGNoZXJzW2tleV07XG4gICAgaWYgKHdhdGNoZXIpIHtcbiAgICAgIGlmICh3YXRjaGVyLmRpcnR5KSB7XG4gICAgICAgIHdhdGNoZXIuZXZhbHVhdGUoKTtcbiAgICAgIH1cbiAgICAgIGlmIChEZXAudGFyZ2V0KSB7XG4gICAgICAgIHdhdGNoZXIuZGVwZW5kKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gd2F0Y2hlci52YWx1ZVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVHZXR0ZXJJbnZva2VyKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiBjb21wdXRlZEdldHRlciAoKSB7XG4gICAgcmV0dXJuIGZuLmNhbGwodGhpcywgdGh
118pcylcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0TWV0aG9kcyAodm0sIG1ldGhvZHMpIHtcbiAgdmFyIHByb3BzID0gdm0uJG9wdGlvbnMucHJvcHM7XG4gIGZvciAodmFyIGtleSBpbiBtZXRob2RzKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgbWV0aG9kc1trZXldICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgXCJNZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGhhcyB0eXBlIFxcXCJcIiArICh0eXBlb2YgbWV0aG9kc1trZXldKSArIFwiXFxcIiBpbiB0aGUgY29tcG9uZW50IGRlZmluaXRpb24uIFwiICtcbiAgICAgICAgICBcIkRpZCB5b3UgcmVmZXJlbmNlIHRoZSBmdW5jdGlvbiBjb3JyZWN0bHk/XCIsXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcyAmJiBoYXNPd24ocHJvcHMsIGtleSkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAoXCJNZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZCBhcyBhIHByb3AuXCIpLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoKGtleSBpbiB2bSkgJiYgaXNSZXNlcnZlZChrZXkpKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgXCJNZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGNvbmZsaWN0cyB3aXRoIGFuIGV4aXN0aW5nIFZ1ZSBpbnN0YW5jZSBtZXRob2QuIFwiICtcbiAgICAgICAgICBcIkF2b2lkIGRlZmluaW5nIGNvbXBvbmVudCBtZXRob2RzIHRoYXQgc3RhcnQgd2l0aCBfIG9yICQuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdm1ba2V5XSA9IHR5cGVvZiBtZXRob2RzW2tleV0gIT09ICdmdW5jdGlvbicgPyBub29wIDogYmluZChtZXRob2RzW2tleV0sIHZtKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0V2F0Y2ggKHZtLCB3YXRjaCkge1xuICBmb3IgKHZhciBrZXkgaW4gd2F0Y2gpIHtcbiAgICB2YXIgaGFuZGxlciA9IHdhdGNoW2tleV07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaGFuZGxlcikpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGFuZGxlci5sZW5ndGg7IGkrKykge1xuICAgICAgICBjcmVhdGVXYXRjaGVyKHZtLCBrZXksIGhhbmRsZXJbaV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjcmVhdGVXYXRjaGVyKHZtLCBrZXksIGhhbmRsZXIpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVXYXRjaGVyIChcbiAgdm0sXG4gIGV4cE9yRm4sXG4gIGhhbmRsZXIsXG4gIG9wdGlvbnNcbikge1xuICBpZiAoaXNQbGFpbk9iamVjdChoYW5kbGVyKSkge1xuICAgIG9wdGlvbnMgPSBoYW5kbGVyO1xuICAgIGhhbmRsZXIgPSBoYW5kbGVyLmhhbmRsZXI7XG4gIH1cbiAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAnc3RyaW5nJykge1xuICAgIGhhbmRsZXIgPSB2bVtoYW5kbGVyXTtcbiAgfVxuICByZXR1cm4gdm0uJHdhdGNoKGV4cE9yRm4sIGhhbmRsZXIsIG9wdGlvbnMpXG59XG5cbmZ1bmN0aW9uIHN0YXRlTWl4aW4gKFZ1ZSkge1xuICAvLyBmbG93IHNvbWVob3cgaGFzIHByb2JsZW1zIHdpdGggZGlyZWN0bHkgZGVjbGFyZWQgZGVmaW5pdGlvbiBvYmplY3RcbiAgLy8gd2hlbiB1c2luZyBPYmplY3QuZGVmaW5lUHJvcGVydHksIHNvIHdlIGhhdmUgdG8gcHJvY2VkdXJhbGx5IGJ1aWxkIHVwXG4gIC8vIHRoZSBvYmplY3QgaGVyZS5cbiAgdmFyIGRhdGFEZWYgPSB7fTtcbiAgZGF0YURlZi5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9kYXRhIH07XG4gIHZhciBwcm9wc0RlZiA9IHt9O1xuICBwcm9wc0RlZi5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9wcm9wcyB9O1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGRhdGFEZWYuc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgd2FybihcbiAgICAgICAgJ0F2b2lkIHJlcGxhY2luZyBpbnN0YW5jZSByb290ICRkYXRhLiAnICtcbiAgICAgICAgJ1VzZSBuZXN0ZWQgZGF0YSBwcm9wZXJ0aWVzIGluc3RlYWQuJyxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9O1xuICAgIHByb3BzRGVmLnNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHdhcm4oXCIkcHJvcHMgaXMgcmVhZG9ubHkuXCIsIHRoaXMpO1xuICAgIH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZS5wcm90b3R5cGUsICckZGF0YScsIGRhdGFEZWYpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLnByb3RvdHlwZSwgJyRwcm9wcycsIHByb3BzRGVmKTtcblxuICBWdWUucHJvdG90eXBlLiRzZXQgPSBzZXQ7XG4gIFZ1ZS5wcm90b3R5cGUuJGRlbGV0ZSA9IGRlbDtcblxuICBWdWUucHJvdG90eXBlLiR3YXRjaCA9IGZ1bmN0aW9uIChcbiAgICBleHBPckZuLFxuICAgIGNiLFxuICAgIG9wdGlvbnNcbiAgKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICBpZiAoaXNQbGFpbk9iamVjdChjYikpIHtcbiAgICAgIHJldHVybiBjcmVhdGVXYXRjaGVyKHZtLCBleHBPckZuLCBjYiwgb3B0aW9ucylcbiAgICB9XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgb3B0aW9ucy51c2VyID0gdHJ1ZTtcbiAgICB2YXIgd2F0Y2hlciA9IG5ldyBXYXRjaGVyKHZtLCBleHBPckZuLCBjYiwgb3B0aW9ucyk7XG4gICAgaWYgKG9wdGlvbnMuaW1tZWRpYXRlKSB7XG4gICAgICB2Y
118XIgaW5mbyA9IFwiY2FsbGJhY2sgZm9yIGltbWVkaWF0ZSB3YXRjaGVyIFxcXCJcIiArICh3YXRjaGVyLmV4cHJlc3Npb24pICsgXCJcXFwiXCI7XG4gICAgICBwdXNoVGFyZ2V0KCk7XG4gICAgICBpbnZva2VXaXRoRXJyb3JIYW5kbGluZyhjYiwgdm0sIFt3YXRjaGVyLnZhbHVlXSwgdm0sIGluZm8pO1xuICAgICAgcG9wVGFyZ2V0KCk7XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiB1bndhdGNoRm4gKCkge1xuICAgICAgd2F0Y2hlci50ZWFyZG93bigpO1xuICAgIH1cbiAgfTtcbn1cblxuLyogICovXG5cbnZhciB1aWQkMyA9IDA7XG5cbmZ1bmN0aW9uIGluaXRNaXhpbiAoVnVlKSB7XG4gIFZ1ZS5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciB2bSA9IHRoaXM7XG4gICAgLy8gYSB1aWRcbiAgICB2bS5fdWlkID0gdWlkJDMrKztcblxuICAgIHZhciBzdGFydFRhZywgZW5kVGFnO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGNvbmZpZy5wZXJmb3JtYW5jZSAmJiBtYXJrKSB7XG4gICAgICBzdGFydFRhZyA9IFwidnVlLXBlcmYtc3RhcnQ6XCIgKyAodm0uX3VpZCk7XG4gICAgICBlbmRUYWcgPSBcInZ1ZS1wZXJmLWVuZDpcIiArICh2bS5fdWlkKTtcbiAgICAgIG1hcmsoc3RhcnRUYWcpO1xuICAgIH1cblxuICAgIC8vIGEgZmxhZyB0byBhdm9pZCB0aGlzIGJlaW5nIG9ic2VydmVkXG4gICAgdm0uX2lzVnVlID0gdHJ1ZTtcbiAgICAvLyBtZXJnZSBvcHRpb25zXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5faXNDb21wb25lbnQpIHtcbiAgICAgIC8vIG9wdGltaXplIGludGVybmFsIGNvbXBvbmVudCBpbnN0YW50aWF0aW9uXG4gICAgICAvLyBzaW5jZSBkeW5hbWljIG9wdGlvbnMgbWVyZ2luZyBpcyBwcmV0dHkgc2xvdywgYW5kIG5vbmUgb2YgdGhlXG4gICAgICAvLyBpbnRlcm5hbCBjb21wb25lbnQgb3B0aW9ucyBuZWVkcyBzcGVjaWFsIHRyZWF0bWVudC5cbiAgICAgIGluaXRJbnRlcm5hbENvbXBvbmVudCh2bSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZtLiRvcHRpb25zID0gbWVyZ2VPcHRpb25zKFxuICAgICAgICByZXNvbHZlQ29uc3RydWN0b3JPcHRpb25zKHZtLmNvbnN0cnVjdG9yKSxcbiAgICAgICAgb3B0aW9ucyB8fCB7fSxcbiAgICAgICAgdm1cbiAgICAgICk7XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGluaXRQcm94eSh2bSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZtLl9yZW5kZXJQcm94eSA9IHZtO1xuICAgIH1cbiAgICAvLyBleHBvc2UgcmVhbCBzZWxmXG4gICAgdm0uX3NlbGYgPSB2bTtcbiAgICBpbml0TGlmZWN5Y2xlKHZtKTtcbiAgICBpbml0RXZlbnRzKHZtKTtcbiAgICBpbml0UmVuZGVyKHZtKTtcbiAgICBjYWxsSG9vayh2bSwgJ2JlZm9yZUNyZWF0ZScpO1xuICAgIGluaXRJbmplY3Rpb25zKHZtKTsgLy8gcmVzb2x2ZSBpbmplY3Rpb25zIGJlZm9yZSBkYXRhL3Byb3BzXG4gICAgaW5pdFN0YXRlKHZtKTtcbiAgICBpbml0UHJvdmlkZSh2bSk7IC8vIHJlc29sdmUgcHJvdmlkZSBhZnRlciBkYXRhL3Byb3BzXG4gICAgY2FsbEhvb2sodm0sICdjcmVhdGVkJyk7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBjb25maWcucGVyZm9ybWFuY2UgJiYgbWFyaykge1xuICAgICAgdm0uX25hbW
118UgPSBmb3JtYXRDb21wb25lbnROYW1lKHZtLCBmYWxzZSk7XG4gICAgICBtYXJrKGVuZFRhZyk7XG4gICAgICBtZWFzdXJlKChcInZ1ZSBcIiArICh2bS5fbmFtZSkgKyBcIiBpbml0XCIpLCBzdGFydFRhZywgZW5kVGFnKTtcbiAgICB9XG5cbiAgICBpZiAodm0uJG9wdGlvbnMuZWwpIHtcbiAgICAgIHZtLiRtb3VudCh2bS4kb3B0aW9ucy5lbCk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBpbml0SW50ZXJuYWxDb21wb25lbnQgKHZtLCBvcHRpb25zKSB7XG4gIHZhciBvcHRzID0gdm0uJG9wdGlvbnMgPSBPYmplY3QuY3JlYXRlKHZtLmNvbnN0cnVjdG9yLm9wdGlvbnMpO1xuICAvLyBkb2luZyB0aGlzIGJlY2F1c2UgaXQncyBmYXN0ZXIgdGhhbiBkeW5hbWljIGVudW1lcmF0aW9uLlxuICB2YXIgcGFyZW50Vm5vZGUgPSBvcHRpb25zLl9wYXJlbnRWbm9kZTtcbiAgb3B0cy5wYXJlbnQgPSBvcHRpb25zLnBhcmVudDtcbiAgb3B0cy5fcGFyZW50Vm5vZGUgPSBwYXJlbnRWbm9kZTtcblxuICB2YXIgdm5vZGVDb21wb25lbnRPcHRpb25zID0gcGFyZW50Vm5vZGUuY29tcG9uZW50T3B0aW9ucztcbiAgb3B0cy5wcm9wc0RhdGEgPSB2bm9kZUNvbXBvbmVudE9wdGlvbnMucHJvcHNEYXRhO1xuICBvcHRzLl9wYXJlbnRMaXN0ZW5lcnMgPSB2bm9kZUNvbXBvbmVudE9wdGlvbnMubGlzdGVuZXJzO1xuICBvcHRzLl9yZW5kZXJDaGlsZHJlbiA9IHZub2RlQ29tcG9uZW50T3B0aW9ucy5jaGlsZHJlbjtcbiAgb3B0cy5fY29tcG9uZW50VGFnID0gdm5vZGVDb21wb25lbnRPcHRpb25zLnRhZztcblxuICBpZiAob3B0aW9ucy5yZW5kZXIpIHtcbiAgICBvcHRzLnJlbmRlciA9IG9wdGlvbnMucmVuZGVyO1xuICAgIG9wdHMuc3RhdGljUmVuZGVyRm5zID0gb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnM7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUNvbnN0cnVjdG9yT3B0aW9ucyAoQ3Rvcikge1xuICB2YXIgb3B0aW9ucyA9IEN0b3Iub3B0aW9ucztcbiAgaWYgKEN0b3Iuc3VwZXIpIHtcbiAgICB2YXIgc3VwZXJPcHRpb25zID0gcmVzb2x2ZUNvbnN0cnVjdG9yT3B0aW9ucyhDdG9yLnN1cGVyKTtcbiAgICB2YXIgY2FjaGVkU3VwZXJPcHRpb25zID0gQ3Rvci5zdXBlck9wdGlvbnM7XG4gICAgaWYgKHN1cGVyT3B0aW9ucyAhPT0gY2FjaGVkU3VwZXJPcHRpb25zKSB7XG4gICAgICAvLyBzdXBlciBvcHRpb24gY2hhbmdlZCxcbiAgICAgIC8vIG5lZWQgdG8gcmVzb2x2ZSBuZXcgb3B0aW9ucy5cbiAgICAgIEN0b3Iuc3VwZXJPcHRpb25zID0gc3VwZXJPcHRpb25zO1xuICAgICAgLy8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBsYXRlLW1vZGlmaWVkL2F0dGFjaGVkIG9wdGlvbnMgKCM0OTc2KVxuICAgICAgdmFyIG1vZGlmaWVkT3B0aW9ucyA9IHJlc29sdmVNb2RpZmllZE9wdGlvbnMoQ3Rvcik7XG4gICAgICAvLyB1cGRhdGUgYmFzZSBleHRlbmQgb3B0aW9uc1xuICAgICAgaWYgKG1vZGlmaWVkT3B0aW9ucykge1xuICAgICAgICBleHRlbmQoQ3Rvci5leHRlbmRPcHRpb25zLCBtb2RpZmllZE9wdGlvbnMpO1xuICAgICAgfVxuICAgICAgb3B0aW9ucyA9IEN0b3Iub3B0aW9ucyA9IG1lcmdlT3B0aW9ucyhzdXBlck9wdGlvbnMsIEN0b3IuZXh0ZW5kT3B0aW9ucyk7XG4gICAgICBpZiAob3B0aW9ucy5uYW1lKSB7XG4gICAgICAgIG9wdGlvbnMuY29tcG9uZW50c1tvcHRpb25zLm5hbWVdID0gQ3RvcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnNcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZU1vZGlmaWVkT3B0aW9ucyAoQ3Rvcikge1xuICB2YXIgbW9kaWZpZWQ7XG4gIHZhciBsYXRlc3QgPSBDdG9yLm9wdGlvbnM7XG4gIHZhciBzZWFsZWQgPSBDdG9yLnNlYWxlZE9wdGlvbnM7XG4gIGZvciAodmFyIGtleSBpbiBsYXRlc3QpIHtcbiAgICBpZiAobGF0ZXN0W2tleV0gIT09IHNlYWxlZFtrZXldKSB7XG4gICAgICBpZiAoIW1vZGlmaWVkKSB7IG1vZGlmaWVkID0ge307IH1cbiAgICAgIG1vZGlmaWVkW2tleV0gPSBsYXRlc3Rba2V5XTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1vZGlmaWVkXG59XG5cbmZ1bmN0aW9uIFZ1ZSAob3B0aW9ucykge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICEodGhpcyBpbnN0YW5jZW9mIFZ1ZSlcbiAgKSB7XG4gICAgd2FybignVnVlIGlzIGEgY29uc3RydWN0b3IgYW5kIHNob3VsZCBiZSBjYWxsZWQgd2l0aCB0aGUgYG5ld2Aga2V5d29yZCcpO1xuICB9XG4gIHRoaXMuX2luaXQob3B0aW9ucyk7XG59XG5cbmluaXRNaXhpbihWdWUpO1xuc3RhdGVNaXhpbihWdWUpO1xuZXZlbnRzTWl4aW4oVnVlKTtcbmxpZmVjeWNsZU1peGluKFZ1ZSk7XG5yZW5kZXJNaXhpbihWdWUpO1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdFVzZSAoVnVlKSB7XG4gIFZ1ZS51c2UgPSBmdW5jdGlvbiAocGx1Z2luKSB7XG4gICAgdmFyIGluc3RhbGxlZFBsdWdpbnMgPSAodGhpcy5faW5zdGFsbGVkUGx1Z2lucyB8fCAodGhpcy5faW5zdGFsbGVkUGx1Z2lucyA9IFtdKSk7XG4gICAgaWYgKGluc3RhbGxlZFBsdWdpbnMuaW5kZXhPZihwbHVnaW4pID4gLTEpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgLy8gYWRkaXRpb25hbCBwYXJhbWV0ZXJzXG4gICAgdmFyIGFyZ3MgPSB0b0FycmF5KGFyZ3VtZW50cywgMSk7XG4gICAgYXJncy51bnNoaWZ0KHRoaXMpO1xuICAgIGlmICh0eXBlb2YgcGx1Z2luLmluc3RhbGwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHBsdWdpbi5pbnN0YWxsLmFwcGx5KHBsdWdpbiwgYXJncyk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcGx1Z2luID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwbHVnaW4uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgfVxuICAgIGluc3RhbGxlZFBsdWdpbnMucHVzaChwbHVnaW4pO1xuICAgIHJldHVybiB0aGlzXG4gIH07XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBpbml0TWl4aW4kMSAoVnVlKSB7XG4gIFZ1ZS5taXhpbiA9IGZ1bmN0aW9uIChtaXhpbikge1xuICAgIHRoaXMub3B0aW9ucyA9IG1lcmdlT3B0aW9ucyh0aGlzLm9wdGlvbnMsIG1peGluKTtcbiAgICByZXR1cm4gdGhpc1xuICB9O1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdEV4dGVuZCAoVnVlKSB7XG4gIC8qKlxuICAgKiBFYWNoIGluc3RhbmNlIGNvbnN0cnVjdG9yLCBpbmNsdWRpbmcgVnVlLCBoYXMgYSB1bmlxdWVcbiAgICogY2lkLiBUaGlzIGVuYWJsZXMgdXMgdG8gY3JlYXRlIHdyYXBwZWQgXCJjaGlsZFxuICAgKiBjb25zdHJ1Y3RvcnNcIiBmb3IgcHJvdG90eXBhbCBpbmhlcml0YW5jZSBhbmQgY2FjaGUgdGhlbS5cbiAgICovXG4gIFZ1ZS5jaWQgPSAwO1xuICB2YXIgY2lkID0gMTtcblxuICAvKipcbiAgICogQ2xhc3MgaW5oZXJpdGFuY2VcbiAgICovXG4gIFZ1ZS5leHRlbmQgPSBmdW5jdGlvbiAoZXh0ZW5kT3B0aW9ucykge1xuICAgIGV4dGVuZE9wdGlvbnMgPSBleHRlbmRPcHRpb25zIHx8IHt9O1xuICAgIHZhciBTdXBlciA9IHRoaXM7XG4gICAgdmFyIFN1cGVySWQgPSBTdXBlci5jaWQ7XG4gICAgdmFyIGNhY2hlZEN0b3JzID0gZXh0ZW5kT3B0aW9ucy5fQ3RvciB8fCAoZXh0ZW5kT3B0aW9ucy5fQ3RvciA9IHt9KTtcbiAgICBpZiAoY2FjaGVkQ3RvcnNbU3VwZXJJZF0pIHtcbiAgICAgIHJldHVybi
118BjYWNoZWRDdG9yc1tTdXBlcklkXVxuICAgIH1cblxuICAgIHZhciBuYW1lID0gZXh0ZW5kT3B0aW9ucy5uYW1lIHx8IFN1cGVyLm9wdGlvbnMubmFtZTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBuYW1lKSB7XG4gICAgICB2YWxpZGF0ZUNvbXBvbmVudE5hbWUobmFtZSk7XG4gICAgfVxuXG4gICAgdmFyIFN1YiA9IGZ1bmN0aW9uIFZ1ZUNvbXBvbmVudCAob3B0aW9ucykge1xuICAgICAgdGhpcy5faW5pdChvcHRpb25zKTtcbiAgICB9O1xuICAgIFN1Yi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN1cGVyLnByb3RvdHlwZSk7XG4gICAgU3ViLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN1YjtcbiAgICBTdWIuY2lkID0gY2lkKys7XG4gICAgU3ViLm9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoXG4gICAgICBTdXBlci5vcHRpb25zLFxuICAgICAgZXh0ZW5kT3B0aW9uc1xuICAgICk7XG4gICAgU3ViWydzdXBlciddID0gU3VwZXI7XG5cbiAgICAvLyBGb3IgcHJvcHMgYW5kIGNvbXB1dGVkIHByb3BlcnRpZXMsIHdlIGRlZmluZSB0aGUgcHJveHkgZ2V0dGVycyBvblxuICAgIC8vIHRoZSBWdWUgaW5zdGFuY2VzIGF0IGV4dGVuc2lvbiB0aW1lLCBvbiB0aGUgZXh0ZW5kZWQgcHJvdG90eXBlLiBUaGlzXG4gICAgLy8gYXZvaWRzIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBjYWxscyBmb3IgZWFjaCBpbnN0YW5jZSBjcmVhdGVkLlxuICAgIGlmIChTdWIub3B0aW9ucy5wcm9wcykge1xuICAgICAgaW5pdFByb3BzJDEoU3ViKTtcbiAgICB9XG4gICAgaWYgKFN1Yi5vcHRpb25zLmNvbXB1dGVkKSB7XG4gICAgICBpbml0Q29tcHV0ZWQkMShTdWIpO1xuICAgIH1cblxuICAgIC8vIGFsbG93IGZ1cnRoZXIgZXh0ZW5zaW9uL21peGluL3BsdWdpbiB1c2FnZVxuICAgIFN1Yi5leHRlbmQgPSBTdXBlci5leHRlbmQ7XG4gICAgU3ViLm1peGluID0gU3VwZXIubWl4aW47XG4gICAgU3ViLnVzZSA9IFN1cGVyLnVzZTtcblxuICAgIC8vIGNyZWF0ZSBhc3NldCByZWdpc3RlcnMsIHNvIGV4dGVuZGVkIGNsYXNzZXNcbiAgICAvLyBjYW4gaGF2ZSB0aGVpciBwcml2YXRlIGFzc2V0cyB0b28uXG4gICAgQVNTRVRfVFlQRVMuZm9yRWFjaChmdW5jdGlvbiAodHlwZSkge1xuICAgICAgU3ViW3R5cGVdID0gU3VwZXJbdHlwZV07XG4gICAgfSk7XG4gICAgLy8gZW5hYmxlIHJlY3Vyc2l2ZSBzZWxmLWxvb2t1cFxuICAgIGlmIChuYW1lKSB7XG4gICAgICBTdWIub3B0aW9ucy5jb21wb25lbnRzW25hbWVdID0gU3ViO1xuICAgIH1cblxuICAgIC8vIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIHN1cGVyIG9wdGlvbnMgYXQgZXh0ZW5zaW9uIHRpbWUuXG4gICAgLy8gbGF0ZXIgYXQgaW5zdGFudGlhdGlvbiB3ZSBjYW4gY2hlY2sgaWYgU3VwZXIncyBvcHRpb25zIGhhdmVcbiAgICAvLyBiZWVuIHVwZGF0ZWQuXG4gICAgU3ViLnN1cGVyT3B0aW9ucyA9IFN1cGVyLm9wdGlvbnM7XG4gICAgU3ViLmV4dGVuZE9wdGlvbnMgPSBleHRlbmRPcHRpb25zO1xuICAgIFN1Yi5zZWFsZWRPcHRpb25zID0gZXh0ZW5kKHt9LCBTdWIub3B0aW9ucyk7XG5cbiAgICAvLyBjYWNoZSBjb25zdHJ1Y3RvclxuICAgIGNhY2hlZEN0b3JzW1N1cGVySWRdID0gU3ViO1xuICAgIHJldHVybiBTdWJcbiAgfTtcbn1cblxuZnVuY3Rpb24gaW5pdFByb3BzJDEgKENvbXApIHtcbiAgdmFyIHByb3BzID0gQ29tcC5vcHRpb25zLnByb3BzO1xuICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICBwcm94eShDb21wLnByb3RvdHlwZSwgXCJfcHJvcHNcIiwga2V5KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0Q29tcHV0ZWQkMSAoQ29tcCkge1xuICB2YXIgY29tcHV0ZWQgPSBDb21wLm9wdGlvbnMuY29tcHV0ZWQ7XG4gIGZvciAodmFyIGtleSBpbiBjb21wdXRlZCkge1xuICAgIGRlZmluZUNvbXB1dGVkKENvbXAucHJvdG90eXBlLCBrZXksIGNvbXB1dGVkW2tleV0pO1xuICB9XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBpbml0QXNzZXRSZWdpc3RlcnMgKFZ1ZSkge1xuICAvKipcbiAgICogQ3JlYXRlIGFzc2V0IHJlZ2lzdHJhdGlvbiBtZXRob2RzLlxuICAgKi9cbiAgQVNTRVRfVFlQRVMuZm9yRWFjaChmdW5jdGlvbiAodHlwZSkge1xuICAgIFZ1ZVt0eXBlXSA9IGZ1bmN0aW9uIChcbiAgICAgIGlkLFxuICAgICAgZGVmaW5pdGlvblxuICAgICkge1xuICAgICAgaWYgKCFkZWZpbml0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnNbdHlwZSArICdzJ11baWRdXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdHlwZSA9PT0gJ2NvbXBvbmVudCcpIHtcbiAgICAgICAgICB2YWxpZGF0ZUNvbXBvbmVudE5hbWUoaWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlID09PSAnY29tcG9uZW50JyAmJiBpc1BsYWluT2JqZWN0KGRlZmluaXRpb24pKSB7XG4gICAgICAgICAgZGVmaW5pdGlvbi5uYW1lID0gZGVmaW5pdGlvbi5uYW1lIHx8IGlkO1xuICAgICAgICAgIGRlZmluaXRpb24gPSB0aGlzLm9wdGlvbnMuX2Jhc2UuZXh0ZW5kKGRlZmluaXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlID09PSAnZGlyZWN0aXZlJyAmJiB0eXBlb2YgZGVmaW5pdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGRlZmluaXRpb24gPSB7IGJpbmQ6IGRlZmluaXRpb24sIHVwZGF0ZTogZGVmaW5pdGlvbiB9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3B0aW9uc1t0eXBlICsgJ3MnXVtp
118ZF0gPSBkZWZpbml0aW9uO1xuICAgICAgICByZXR1cm4gZGVmaW5pdGlvblxuICAgICAgfVxuICAgIH07XG4gIH0pO1xufVxuXG4vKiAgKi9cblxuXG5cblxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnROYW1lIChvcHRzKSB7XG4gIHJldHVybiBvcHRzICYmIChvcHRzLkN0b3Iub3B0aW9ucy5uYW1lIHx8IG9wdHMudGFnKVxufVxuXG5mdW5jdGlvbiBtYXRjaGVzIChwYXR0ZXJuLCBuYW1lKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHBhdHRlcm4pKSB7XG4gICAgcmV0dXJuIHBhdHRlcm4uaW5kZXhPZihuYW1lKSA+IC0xXG4gIH0gZWxzZSBpZiAodHlwZW9mIHBhdHRlcm4gPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHBhdHRlcm4uc3BsaXQoJywnKS5pbmRleE9mKG5hbWUpID4gLTFcbiAgfSBlbHNlIGlmIChpc1JlZ0V4cChwYXR0ZXJuKSkge1xuICAgIHJldHVybiBwYXR0ZXJuLnRlc3QobmFtZSlcbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gcHJ1bmVDYWNoZSAoa2VlcEFsaXZlSW5zdGFuY2UsIGZpbHRlcikge1xuICB2YXIgY2FjaGUgPSBrZWVwQWxpdmVJbnN0YW5jZS5jYWNoZTtcbiAgdmFyIGtleXMgPSBrZWVwQWxpdmVJbnN0YW5jZS5rZXlzO1xuICB2YXIgX3Zub2RlID0ga2VlcEFsaXZlSW5zdGFuY2UuX3Zub2RlO1xuICBmb3IgKHZhciBrZXkgaW4gY2FjaGUpIHtcbiAgICB2YXIgZW50cnkgPSBjYWNoZVtrZXldO1xuICAgIGlmIChlbnRyeSkge1xuICAgICAgdmFyIG5hbWUgPSBlbnRyeS5uYW1lO1xuICAgICAgaWYgKG5hbWUgJiYgIWZpbHRlcihuYW1lKSkge1xuICAgICAgICBwcnVuZUNhY2hlRW50cnkoY2FjaGUsIGtleSwga2V5cywgX3Zub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJ1bmVDYWNoZUVudHJ5IChcbiAgY2FjaGUsXG4gIGtleSxcbiAga2V5cyxcbiAgY3VycmVudFxuKSB7XG4gIHZhciBlbnRyeSA9IGNhY2hlW2tleV07XG4gIGlmIChlbnRyeSAmJiAoIWN1cnJlbnQgfHwgZW50cnkudGFnICE9PSBjdXJyZW50LnRhZykpIHtcbiAgICBlbnRyeS5jb21wb25lbnRJbnN0YW5jZS4kZGVzdHJveSgpO1xuICB9XG4gIGNhY2hlW2tleV0gPSBudWxsO1xuICByZW1vdmUoa2V5cywga2V5KTtcbn1cblxudmFyIHBhdHRlcm5UeXBlcyA9IFtTdHJpbmcsIFJlZ0V4cCwgQXJyYXldO1xuXG52YXIgS2VlcEFsaXZlID0ge1xuICBuYW1lOiAna2VlcC1hbGl2ZScsXG4gIGFic3RyYWN0OiB0cnVlLFxuXG4gIHByb3BzOiB7XG4gICAgaW5jbHVkZTogcGF0dGVyblR5cGVzLFxuICAgIGV4Y2x1ZGU6IHBhdHRlcm5UeXBlcyxcbiAgICBtYXg6IFtTdHJpbmcsIE51bWJlcl1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgY2FjaGVWTm9kZTogZnVuY3Rpb24gY2FjaGVWTm9kZSgpIHtcbiAgICAgIHZhciByZWYgPSB0aGlzO1xuICAgICAgdmFyIGNhY2hlID0gcmVmLmNhY2hlO1xuICAgICAgdmFyIGtleXMgPSByZWYua2V5cztcbiAgICAgIHZhciB2bm9kZVRvQ2FjaGUgPSByZWYudm5vZGVUb0NhY2hlO1xuICAgICAgdmFyIGtleVRvQ2FjaGUgPSByZWYua2V5VG9DYWNoZTtcbiAgICAgIGlmICh2bm9kZVRvQ2FjaGUpIHtcbiAgICAgICAgdmFyIHRhZyA9IHZub2RlVG9DYWNoZS50YWc7XG4gICAgICAgIHZhciBjb21wb25lbnRJbnN0YW5jZSA9IHZub2RlVG9DYWNoZS5jb21wb25lbnRJbnN0YW5jZTtcbiAgICAgICAgdmFyIGNvbXBvbmVudE9wdGlvbnMgPSB2bm9kZVRvQ2FjaGUuY29tcG9uZW50T3B0aW9ucztcbiAgICAgICAgY2FjaGVba2V5VG9DYWNoZV0gPSB7XG4gICAgICAgICAgbmFtZTogZ2V0Q29tcG9uZW50TmFtZShjb21wb25lbnRPcHRpb25zKSxcbiAgICAgICAgICB0YWc6IHRhZyxcbiAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZTogY29tcG9uZW50SW5zdGFuY2UsXG4gICAgICAgIH07XG4gICAgICAgIGtleXMucHVzaChrZXlUb0NhY2hlKTtcbiAgICAgICAgLy8gcHJ1bmUgb2xkZXN0IGVudHJ5XG4gICAgICAgIGlmICh0aGlzLm1heCAmJiBrZXlzLmxlbmd0aCA+IHBhcnNlSW50KHRoaXMubWF4KSkge1xuICAgICAgICAgIHBydW5lQ2FjaGVFbnRyeShjYWNoZSwga2V5c1swXSwga2V5cywgdGhpcy5fdm5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudm5vZGVUb0NhY2hlID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCAoKSB7XG4gICAgdGhpcy5jYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5rZXlzID0gW107XG4gIH0sXG5cbiAgZGVzdHJveWVkOiBmdW5jdGlvbiBkZXN0cm95ZWQgKCkge1xuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmNhY2hlKSB7XG4gICAgICBwcnVuZUNhY2hlRW50cnkodGhpcy5jYWNoZSwga2V5LCB0aGlzLmtleXMpO1xuICAgIH1cbiAgfSxcblxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkICgpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHRoaXMuY2FjaGVWTm9kZSgpO1xuICAgIHRoaXMuJHdhdGNoKCdpbmNsdWRlJywgZnVuY3Rpb24gKHZhbCkge1xuICAgICAgcHJ1bmVDYWNoZSh0aGlzJDEsIGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBtYXRjaGVzKHZhbCwgbmFtZSk7IH0pO1xuICAgIH0pO1xuICAgIHRoaXMuJHdhdGNoKCdleGNsdWRlJywgZnVuY3Rpb24gKHZhbCkge1xuICAgICAgcHJ1bmVDYWNoZSh0aGlzJDEsIGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiAhbWF0Y2hlcyh2YWwsIG5hbWUpOyB9KTtcbiAgICB9KTtcbiAgfSxcblxuICB1cGRhdGVkOiBmdW5jdGlvbiB1cGRhdGVkICgpIHtcbiAgICB0aGlzLmNhY2hlVk5vZGUoKTtcbiAgfSxcblxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlciAoKSB7XG4gICAgdmFyIHNsb3QgPSB0aGlzLiRzbG90cy5kZWZh
118dWx0O1xuICAgIHZhciB2bm9kZSA9IGdldEZpcnN0Q29tcG9uZW50Q2hpbGQoc2xvdCk7XG4gICAgdmFyIGNvbXBvbmVudE9wdGlvbnMgPSB2bm9kZSAmJiB2bm9kZS5jb21wb25lbnRPcHRpb25zO1xuICAgIGlmIChjb21wb25lbnRPcHRpb25zKSB7XG4gICAgICAvLyBjaGVjayBwYXR0ZXJuXG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUoY29tcG9uZW50T3B0aW9ucyk7XG4gICAgICB2YXIgcmVmID0gdGhpcztcbiAgICAgIHZhciBpbmNsdWRlID0gcmVmLmluY2x1ZGU7XG4gICAgICB2YXIgZXhjbHVkZSA9IHJlZi5leGNsdWRlO1xuICAgICAgaWYgKFxuICAgICAgICAvLyBub3QgaW5jbHVkZWRcbiAgICAgICAgKGluY2x1ZGUgJiYgKCFuYW1lIHx8ICFtYXRjaGVzKGluY2x1ZGUsIG5hbWUpKSkgfHxcbiAgICAgICAgLy8gZXhjbHVkZWRcbiAgICAgICAgKGV4Y2x1ZGUgJiYgbmFtZSAmJiBtYXRjaGVzKGV4Y2x1ZGUsIG5hbWUpKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB2bm9kZVxuICAgICAgfVxuXG4gICAgICB2YXIgcmVmJDEgPSB0aGlzO1xuICAgICAgdmFyIGNhY2hlID0gcmVmJDEuY2FjaGU7XG4gICAgICB2YXIga2V5cyA9IHJlZiQxLmtleXM7XG4gICAgICB2YXIga2V5ID0gdm5vZGUua2V5ID09IG51bGxcbiAgICAgICAgLy8gc2FtZSBjb25zdHJ1Y3RvciBtYXkgZ2V0IHJlZ2lzdGVyZWQgYXMgZGlmZmVyZW50IGxvY2FsIGNvbXBvbmVudHNcbiAgICAgICAgLy8gc28gY2lkIGFsb25lIGlzIG5vdCBlbm91Z2ggKCMzMjY5KVxuICAgICAgICA/IGNvbXBvbmVudE9wdGlvbnMuQ3Rvci5jaWQgKyAoY29tcG9uZW50T3B0aW9ucy50YWcgPyAoXCI6OlwiICsgKGNvbXBvbmVudE9wdGlvbnMudGFnKSkgOiAnJylcbiAgICAgICAgOiB2bm9kZS5rZXk7XG4gICAgICBpZiAoY2FjaGVba2V5XSkge1xuICAgICAgICB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSA9IGNhY2hlW2tleV0uY29tcG9uZW50SW5zdGFuY2U7XG4gICAgICAgIC8vIG1ha2UgY3VycmVudCBrZXkgZnJlc2hlc3RcbiAgICAgICAgcmVtb3ZlKGtleXMsIGtleSk7XG4gICAgICAgIGtleXMucHVzaChrZXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZGVsYXkgc2V0dGluZyB0aGUgY2FjaGUgdW50aWwgdXBkYXRlXG4gICAgICAgIHRoaXMudm5vZGVUb0NhY2hlID0gdm5vZGU7XG4gICAgICAgIHRoaXMua2V5VG9DYWNoZSA9IGtleTtcbiAgICAgIH1cblxuICAgICAgdm5vZGUuZGF0YS5rZWVwQWxpdmUgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdm5vZGUgfHwgKHNsb3QgJiYgc2xvdFswXSlcbiAgfVxufTtcblxudmFyIGJ1aWx0SW5Db21wb25lbnRzID0ge1xuICBLZWVwQWxpdmU6IEtlZXBBbGl2ZVxufTtcblxuLyogICovXG5cbmZ1bmN0aW9uIGluaXRHbG9iYWxBUEkgKFZ1ZSkge1xuICAvLyBjb25maWdcbiAgdmFyIGNvbmZpZ0RlZiA9IHt9O1xuICBjb25maWdEZWYuZ2V0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gY29uZmlnOyB9O1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGNvbmZpZ0RlZi5zZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAnRG8gbm90IHJlcGxhY2UgdGhlIFZ1ZS5jb25maWcgb2JqZWN0LCBzZXQgaW5kaXZpZHVhbCBmaWVsZHMgaW5zdGVhZC4nXG4gICAgICApO1xuICAgIH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZSwgJ2NvbmZpZycsIGNvbmZpZ0RlZik7XG5cbiAgLy8gZXhwb3NlZCB1dGlsIG1ldGhvZHMuXG4gIC8vIE5PVEU6IHRoZXNlIGFyZSBub3QgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJIC0gYXZvaWQgcmVseWluZyBvblxuICAvLyB0aGVtIHVubGVzcyB5b3UgYXJlIGF3YXJlIG9mIHRoZSByaXNrLlxuICBWdWUudXRpbCA9IHtcbiAgICB3YXJuOiB3YXJuLFxuICAgIGV4dGVuZDogZXh0ZW5kLFxuICAgIG1lcmdlT3B0aW9uczogbWVyZ2VPcHRpb25zLFxuICAgIGRlZmluZVJlYWN0aXZlOiBkZWZpbmVSZWFjdGl2ZSQkMVxuICB9O1xuXG4gIFZ1ZS5zZXQgPSBzZXQ7XG4gIFZ1ZS5kZWxldGUgPSBkZWw7XG4gIFZ1ZS5uZXh0VGljayA9IG5leHRUaWNrO1xuXG4gIC8vIDIuNiBleHBsaWNpdCBvYnNlcnZhYmxlIEFQSVxuICBWdWUub2JzZXJ2YWJsZSA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICBvYnNlcnZlKG9iaik7XG4gICAgcmV0dXJuIG9ialxuICB9O1xuXG4gIFZ1ZS5vcHRpb25zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgQVNTRVRfVFlQRVMuZm9yRWFjaChmdW5jdGlvbiAodHlwZSkge1xuICAgIFZ1ZS5vcHRpb25zW3R5cGUgKyAncyddID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgfSk7XG5cbiAgLy8gdGhpcyBpcyB1c2VkIHRvIGlkZW50aWZ5IHRoZSBcImJhc2VcIiBjb25zdHJ1Y3RvciB0byBleHRlbmQgYWxsIHBsYWluLW9iamVjdFxuICAvLyBjb21wb25lbnRzIHdpdGggaW4gV2VleCdzIG11bHRpLWluc3RhbmNlIHNjZW5hcmlvcy5cbiAgVnVlLm9wdGlvbnMuX2Jhc2UgPSBWdWU7XG5cbiAgZXh0ZW5kKFZ1ZS5vcHRpb25zLmNvbXBvbmVudHMsIGJ1aWx0SW5Db21wb25lbnRzKTtcblxuICBpbml0VXNlKFZ1ZSk7XG4gIGluaXRNaXhpbiQxKFZ1ZSk7XG4gIGluaXRFeHRlbmQoVnVlKTtcbiAgaW5pdEFzc2V0UmVnaXN0ZXJzKFZ1ZSk7XG59XG5cbmluaXRHbG9iYWxBUEkoVnVlKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZS5wcm90b3R5cGUsICckaXNTZXJ2ZXInLCB7XG4gIGdldDogaXNTZXJ2ZXJSZW5kZXJpbmdcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLnByb3RvdHlwZSwgJyRzc3JDb250ZXh0Jywge1xuICBnZXQ6IGZ1bmN0aW9uIGdldCAoKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZXR1cm4gdGhpcy4kdm5vZGUgJiYgdGhpcy4kdm5vZGUuc3NyQ29udGV4dFxuICB9XG59KTtcblxuLy8gZXhwb3NlIEZ1bmN0aW9uYWxSZW5kZXJDb250ZXh0IGZvciBzc3IgcnVudGltZSBoZWxwZXIgaW5zdGFsbGF0aW9uXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLCAnRnVuY3Rpb25hbFJlbmRlckNvbnRleHQnLCB7XG4gIHZhbHVlOiBGdW5jdGlvbmFsUmVuZGVyQ29udGV4dFxufSk7XG5cblZ1ZS52ZXJzaW9uID0gJzIuNi4xNCc7XG5cbi8qICAqL1xuXG4vLyB0aGVzZSBhcmUgcmVzZXJ2ZWQgZm9yIHdlYiBiZWNhdXNlIHRoZXkgYXJlIGRpcmVjdGx5IGNvbXBpbGVkIGF3YXlcbi8vIGR1cmluZyB0ZW1wbGF0ZSBjb21waWxhdGlvblxudmFyIGlzUmVzZXJ2ZWRBdHRyID0gbWFrZU1hcCgnc3R5bGUsY2xhc3MnKTtcblxuLy8gYXR0cmlidXRlcyB0aGF0IHNob3VsZCBiZSB1c2luZyBwcm9wcyBmb3IgYmluZGluZ1xudmFyIGFjY2VwdFZhbHVlID0gbWFrZU1hcCgnaW5wdXQsdGV4dGFyZWEsb3B0aW9uLHNlbGVjdCxwcm9ncmVzcycpO1xudmFyIG11c3RVc2VQcm9wID0gZnVuY3Rpb24gKHRhZywgdHlwZSwgYXR0cikge1xuICByZXR1cm4gKFxuICAgIChhdHRyID09PSAndmFsdWUnICYmIGFjY2VwdFZhbHVlKHRhZykpICYmIHR5cGUgIT09ICdidXR0b24nIHx8XG4gICAgKGF0dHIgPT09ICdzZWxlY3RlZCcgJiYgdGFnID09PSAnb3B0aW9uJykgfHxcbiAgICAoYXR0ciA9PT0gJ2NoZWNrZWQnICYmIHRhZyA9PT0gJ2lucHV0JykgfHxcbiAgICAoYXR0ciA9PT0gJ211dGVkJyAmJiB0YWcgPT09ICd2aWRlbycpXG4gIClcbn07XG5cbnZhciBpc0VudW1lcmF0ZWRBdHRyID0gbWFrZU1hcCgnY29udGVudGVkaXRhYmxlLGRyYWdnYWJsZSxzcGVsbGNoZWNrJyk7XG5cbnZhciBpc1ZhbGlkQ29udGVudEVkaXRhYmxlVmFsdWUgPSBtYWtlTWFwKCdldmVudHMsY2FyZXQsdHlwaW5nLHBsYWludGV4dC1vbmx
1185Jyk7XG5cbnZhciBjb252ZXJ0RW51bWVyYXRlZFZhbHVlID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGlzRmFsc3lBdHRyVmFsdWUodmFsdWUpIHx8IHZhbHVlID09PSAnZmFsc2UnXG4gICAgPyAnZmFsc2UnXG4gICAgLy8gYWxsb3cgYXJiaXRyYXJ5IHN0cmluZyB2YWx1ZSBmb3IgY29udGVudGVkaXRhYmxlXG4gICAgOiBrZXkgPT09ICdjb250ZW50ZWRpdGFibGUnICYmIGlzVmFsaWRDb250ZW50RWRpdGFibGVWYWx1ZSh2YWx1ZSlcbiAgICAgID8gdmFsdWVcbiAgICAgIDogJ3RydWUnXG59O1xuXG52YXIgaXNCb29sZWFuQXR0ciA9IG1ha2VNYXAoXG4gICdhbGxvd2Z1bGxzY3JlZW4sYXN5bmMsYXV0b2ZvY3VzLGF1dG9wbGF5LGNoZWNrZWQsY29tcGFjdCxjb250cm9scyxkZWNsYXJlLCcgK1xuICAnZGVmYXVsdCxkZWZhdWx0Y2hlY2tlZCxkZWZhdWx0bXV0ZWQsZGVmYXVsdHNlbGVjdGVkLGRlZmVyLGRpc2FibGVkLCcgK1xuICAnZW5hYmxlZCxmb3Jtbm92YWxpZGF0ZSxoaWRkZW4saW5kZXRlcm1pbmF0ZSxpbmVydCxpc21hcCxpdGVtc2NvcGUsbG9vcCxtdWx0aXBsZSwnICtcbiAgJ211dGVkLG5vaHJlZixub3Jlc2l6ZSxub3NoYWRlLG5vdmFsaWRhdGUsbm93cmFwLG9wZW4scGF1c2VvbmV4aXQscmVhZG9ubHksJyArXG4gICdyZXF1aXJlZCxyZXZlcnNlZCxzY29wZWQsc2VhbWxlc3Msc2VsZWN0ZWQsc29ydGFibGUsJyArXG4gICd0cnVlc3BlZWQsdHlwZW11c3RtYXRjaCx2aXNpYmxlJ1xuKTtcblxudmFyIHhsaW5rTlMgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayc7XG5cbnZhciBpc1hsaW5rID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUuY2hhckF0KDUpID09PSAnOicgJiYgbmFtZS5zbGljZSgwLCA1KSA9PT0gJ3hsaW5rJ1xufTtcblxudmFyIGdldFhsaW5rUHJvcCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiBpc1hsaW5rKG5hbWUpID8gbmFtZS5zbGljZSg2LCBuYW1lLmxlbmd0aCkgOiAnJ1xufTtcblxudmFyIGlzRmFsc3lBdHRyVmFsdWUgPSBmdW5jdGlvbiAodmFsKSB7XG4gIHJldHVybiB2YWwgPT0gbnVsbCB8fCB2YWwgPT09IGZhbHNlXG59O1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gZ2VuQ2xhc3NGb3JWbm9kZSAodm5vZGUpIHtcbiAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICB2YXIgcGFyZW50Tm9kZSA9IHZub2RlO1xuICB2YXIgY2hpbGROb2RlID0gdm5vZGU7XG4gIHdoaWxlIChpc0RlZihjaGlsZE5vZGUuY29tcG9uZW50SW5zdGFuY2UpKSB7XG4gICAgY2hpbGROb2RlID0gY2hpbGROb2RlLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZTtcbiAgICBpZiAoY2hpbGROb2RlICYmIGNoaWxkTm9kZS5kYXRhKSB7XG4gICAgICBkYXRhID0gbWVyZ2VDbGFzc0RhdGEoY2hpbGROb2RlLmRhdGEsIGRhdGEpO1xuICAgIH1cbiAgfVxuICB3aGlsZSAoaXNEZWYocGFyZW50Tm9kZSA9IHBhcmVudE5vZGUucGFyZW50KSkge1xuICAgIGlmIChwYXJlbnROb2RlICYmIHBhcmVudE5vZGUuZGF0YSkge1xuICAgICAgZGF0YSA9IG1lcmdlQ2xhc3NEYXRhKGRhdGEsIHBhcmVudE5vZGUuZGF0YSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZW5kZXJDbGFzcyhkYXRhLnN0YXRpY0NsYXNzLCBkYXRhLmNsYXNzKVxufVxuXG5mdW5jdGlvbiBtZXJnZUNsYXNzRGF0YSAoY2hpbGQsIHBhcmVudCkge1xuICByZXR1cm4ge1xuICAgIHN0YXRpY0NsYXNzOiBjb25jYXQoY2hpbGQuc3RhdGljQ2xhc3MsIHBhcmVudC5zdGF0aWNDbGFzcyksXG4gICAgY2xhc3M6IGlzRGVmKGNoaWxkLmNsYXNzKVxuICAgICAgPyBbY2hpbGQuY2xhc3MsIHBhcmVudC5jbGFzc11cbiAgICAgIDogcGFyZW50LmNsYXNzXG4gIH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyQ2xhc3MgKFxuICBzdGF0aWNDbGFzcyxcbiAgZHluYW1pY0NsYXNzXG4pIHtcbiAgaWYgKGlzRGVmKHN0YXRpY0NsYXNzKSB8fCBpc0RlZihkeW5hbWljQ2xhc3MpKSB7XG4gICAgcmV0dXJuIGNvbmNhdChzdGF0aWNDbGFzcywgc3RyaW5naWZ5Q2xhc3MoZHluYW1pY0NsYXNzKSlcbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICByZXR1cm4gJydcbn1cblxuZnVuY3Rpb24gY29uY2F0IChhLCBiKSB7XG4gIHJldHVybiBhID8gYiA/IChhICsgJyAnICsgYikgOiBhIDogKGIgfHwgJycpXG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeUNsYXNzICh2YWx1ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gc3RyaW5naWZ5QXJyYXkodmFsdWUpXG4gIH1cbiAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBzdHJpbmdpZnlPYmplY3QodmFsdWUpXG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICByZXR1cm4gJydcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5QXJyYXkgKHZhbHVlKSB7XG4gIHZhciByZXMgPSAnJztcbiAgdmFyIHN0cmluZ2lmaWVkO1xuICBmb3IgKHZhciBpID0gMCwgbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGlmIChpc0RlZihzdHJpbmdpZmllZCA9IHN0cmluZ2lmeUNsYXNzKHZhbHVlW2ldKSkgJiYgc3RyaW5naWZpZWQgIT09ICcnKSB7XG4gICAgICBpZiAocmVzKSB7IHJlcyArPSAnICc7IH1cbiAgICAgIHJlcyArPSBzdHJpbmdpZmllZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlPYmplY3QgKHZhbHVlKSB7XG4gIHZhciByZXMgPSAnJztcbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlW2tleV0pIHtcbiAgICAgIGlmIChyZXMpIHsgcmVzICs9ICcgJzsgfVxuICAgICAgcmVzICs9IGtleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG4vKiAgKi9cblxudmFyIG5hbWVzcGFjZU1hcCA9IHtcbiAgc3ZnOiAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLFxuICBtYXRoOiAnaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCdcbn07XG5cbnZhciBpc0hUTUxUYWcgPSBtYWtlTWFwKFxuICAnaHRtbCxib2R5LGJhc2UsaGVhZCxsaW5rLG1ldGEsc3R5bGUsdGl0bGUsJyArXG4gICdhZGRyZXNzLGFydGljbGUsYXNpZGUsZm9vdGVyLGhlYWRlcixoMSxoMixoMyxoNCxoNSxoNixoZ3JvdXAsbmF2LHNlY3Rpb24sJyArXG4gICdkaXYsZGQsZGwsZHQsZmlnY2FwdGlvbixmaWd1cmUscGljdHVyZSxocixpbWcsbGksbWFpbixvbCxwLHByZSx1bCwnICtcbiAgJ2EsYixhYmJyLGJkaSxiZG8sYnIsY2l0ZSxjb2RlLGRhdGEsZGZuLGVtLGksa2JkLG1hcmsscSxycCxydCxydGMscnVieSwnICtcbiAgJ3Msc2FtcCxzbWFsbCxzcGFuLHN0cm9uZyxzdWIsc3VwLHRpbWUsdSx2YXIsd2JyLGFyZWEsYXVkaW8sbWFwLHRyYWNrLHZpZGVvLCcgK1xuICAnZW1iZWQsb2JqZWN0LHBhcmFtLHNvdXJjZSxjYW52YXMsc2NyaXB0LG5vc2NyaXB0LGRlbCxpbnMsJyArXG4gICdjYXB0aW9uLGNvbCxjb2xncm91cCx0YWJsZSx0aGVhZCx0Ym9keSx0ZCx0aCx0ciwnICtcbiAgJ2J1dHRvbixkYXRhbGlzdCxmaWVsZHNldCxmb3JtLGlucHV0LGxhYmVsLGxlZ2VuZCxtZXRlcixvcHRncm91cCxvcHRpb24sJyArXG4gICdvdXRwdXQscHJvZ3Jlc3Msc2VsZWN0LHRleHRhcmVhLCcgK1xuICAnZGV0YWlscyxkaWFsb2csbWVudSxtZW51aXRlbSxzdW1tYXJ5LCcgK1xuICAnY29udGVudCxlbGVtZW50LHNoYWRvdyx0ZW1wbGF0ZSxibG9ja3F1b3RlLGlmcmFtZSx0Zm9vdCdcbik7XG5cbi8vIHRoaXMgbWFwIGlzIGludGVudGlvbmFsbHkgc2VsZWN0aXZlLCBvbmx5IGNvdmVyaW5nIFNWRyBlbGVtZW50cyB0aGF0IG1heVxuLy8gY29udGFpbiBjaGlsZCBlbGVtZW50cy5cbnZhciBpc1NWRyA9IG1ha2VNYXAoXG4gICdzdmcsYW5pbWF0ZSxjaXJjbGUsY2xpcHBhdGgsY3Vyc29yLGRlZnMsZGVzYyxlbGxpcHNlLGZpbHRlcixmb250LWZhY2UsJyArXG4gICdmb3JlaWdub2JqZWN0LGcsZ2x5cGgsaW1hZ2UsbGluZSxtYXJrZXIsbWFzayxtaXNzaW5nLWdseXBoLHBhdGgscGF0dGVybiwnICtcbiAgJ3BvbHlnb24scG9seWxpbmUscmVjdCxzd2l0Y2gsc3ltYm9sLHRleHQsdGV4dHBhdGgsdHNwYW4sdXNlLHZpZXcnLFxuICB0cnVlXG4pO
1181xuXG52YXIgaXNQcmVUYWcgPSBmdW5jdGlvbiAodGFnKSB7IHJldHVybiB0YWcgPT09ICdwcmUnOyB9O1xuXG52YXIgaXNSZXNlcnZlZFRhZyA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgcmV0dXJuIGlzSFRNTFRhZyh0YWcpIHx8IGlzU1ZHKHRhZylcbn07XG5cbmZ1bmN0aW9uIGdldFRhZ05hbWVzcGFjZSAodGFnKSB7XG4gIGlmIChpc1NWRyh0YWcpKSB7XG4gICAgcmV0dXJuICdzdmcnXG4gIH1cbiAgLy8gYmFzaWMgc3VwcG9ydCBmb3IgTWF0aE1MXG4gIC8vIG5vdGUgaXQgZG9lc24ndCBzdXBwb3J0IG90aGVyIE1hdGhNTCBlbGVtZW50cyBiZWluZyBjb21wb25lbnQgcm9vdHNcbiAgaWYgKHRhZyA9PT0gJ21hdGgnKSB7XG4gICAgcmV0dXJuICdtYXRoJ1xuICB9XG59XG5cbnZhciB1bmtub3duRWxlbWVudENhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbmZ1bmN0aW9uIGlzVW5rbm93bkVsZW1lbnQgKHRhZykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKCFpbkJyb3dzZXIpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIGlmIChpc1Jlc2VydmVkVGFnKHRhZykpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICB0YWcgPSB0YWcudG9Mb3dlckNhc2UoKTtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICh1bmtub3duRWxlbWVudENhY2hlW3RhZ10gIT0gbnVsbCkge1xuICAgIHJldHVybiB1bmtub3duRWxlbWVudENhY2hlW3RhZ11cbiAgfVxuICB2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7XG4gIGlmICh0YWcuaW5kZXhPZignLScpID4gLTEpIHtcbiAgICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yODIxMDM2NC8xMDcwMjQ0XG4gICAgcmV0dXJuICh1bmtub3duRWxlbWVudENhY2hlW3RhZ10gPSAoXG4gICAgICBlbC5jb25zdHJ1Y3RvciA9PT0gd2luZG93LkhUTUxVbmtub3duRWxlbWVudCB8fFxuICAgICAgZWwuY29uc3RydWN0b3IgPT09IHdpbmRvdy5IVE1MRWxlbWVudFxuICAgICkpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICh1bmtub3duRWxlbWVudENhY2hlW3RhZ10gPSAvSFRNTFVua25vd25FbGVtZW50Ly50ZXN0KGVsLnRvU3RyaW5nKCkpKVxuICB9XG59XG5cbnZhciBpc1RleHRJbnB1dFR5cGUgPSBtYWtlTWFwKCd0ZXh0LG51bWJlcixwYXNzd29yZCxzZWFyY2gsZW1haWwsdGVsLHVybCcpO1xuXG4vKiAgKi9cblxuLyoqXG4gKiBRdWVyeSBhbiBlbGVtZW50IHNlbGVjdG9yIGlmIGl0J3Mgbm90IGFuIGVsZW1lbnQgYWxyZWFkeS5cbiAqL1xuZnVuY3Rpb24gcXVlcnkgKGVsKSB7XG4gIGlmICh0eXBlb2YgZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFyIHNlbGVjdGVkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbCk7XG4gICAgaWYgKCFzZWxlY3RlZCkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICAnQ2Fubm90IGZpbmQgZWxlbWVudDogJyArIGVsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgfVxuICAgIHJldHVybiBzZWxlY3RlZFxuICB9IGVsc2Uge1xuICAgIHJldHVybiBlbFxuICB9XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50JDEgKHRhZ05hbWUsIHZub2RlKSB7XG4gIHZhciBlbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGFnTmFtZSAhPT0gJ3NlbGVjdCcpIHtcbiAgICByZXR1cm4gZWxtXG4gIH1cbiAgLy8gZmFsc2Ugb3IgbnVsbCB3aWxsIHJlbW92ZSB0aGUgYXR0cmlidXRlIGJ1dCB1bmRlZmluZWQgd2lsbCBub3RcbiAgaWYgKHZub2RlLmRhdGEgJiYgdm5vZGUuZGF0YS5hdHRycyAmJiB2bm9kZS5kYXRhLmF0dHJzLm11bHRpcGxlICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbG0uc2V0QXR0cmlidXRlKCdtdWx0aXBsZScsICdtdWx0aXBsZScpO1xuICB9XG4gIHJldHVybiBlbG1cbn1cblxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudE5TIChuYW1lc3BhY2UsIHRhZ05hbWUpIHtcbiAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhuYW1lc3BhY2VNYXBbbmFtZXNwYWNlXSwgdGFnTmFtZSlcbn1cblxuZnVuY3Rpb24gY3JlYXRlVGV4dE5vZGUgKHRleHQpIHtcbiAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbW1lbnQgKHRleHQpIHtcbiAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQodGV4dClcbn1cblxuZnVuY3Rpb24gaW5zZXJ0QmVmb3JlIChwYXJlbnROb2RlLCBuZXdOb2RlLCByZWZlcmVuY2VOb2RlKSB7XG4gIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5ld05vZGUsIHJlZmVyZW5jZU5vZGUpO1xufVxuXG5mdW5jdGlvbiByZW1vdmVDaGlsZCAobm9kZSwgY2hpbGQpIHtcbiAgbm9kZS5yZW1vdmVDaGlsZChjaGlsZCk7XG59XG5cbmZ1bmN0aW9uIGFwcGVuZENoaWxkIChub2RlLCBjaGlsZCkge1xuICBub2RlLmFwcGVuZENoaWxkKGNoaWxkKTtcbn1cblxuZnVuY3Rpb24gcGFyZW50Tm9kZSAobm9kZSkge1xuICByZXR1cm4gbm9kZS5wYXJlbnROb2RlXG59XG5cbmZ1bmN0aW9uIG5leHRTaWJsaW5nIChub2RlKSB7XG4gIHJldHVybiBub2RlLm5leHRTaWJsaW5nXG59XG5cbmZ1bmN0aW9uIHRhZ05hbWUgKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUudGFnTmFtZVxufVxuXG5mdW5jdGlvbiBzZXRUZXh0Q29udGVudCAobm9kZSwgdGV4dCkge1xuICBub2RlLnRleHRDb250ZW50ID0gdGV4dDtcbn1cblxuZnVuY3Rpb24gc2V0U3R5bGVTY29wZSAobm9kZSwgc2NvcGVJZCkge1xuICBub2RlLnNldEF0dHJpYnV0ZShzY29wZUlkLCAnJyk7XG59XG5cbnZhciBub2RlT3BzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBjcmVhdGVFbGVtZW50OiBjcmVhdGVFbGVtZW50JDEsXG4gIGNyZWF0ZUVsZW1lbnROUzogY3JlYXRlRWxlbWVudE5TLFxuICBjcmVhdGVUZXh0Tm9kZTogY3JlYXRlVGV4dE5vZGUsXG4gIGNyZWF0ZUNvbW1lbnQ6IGNyZWF0ZUNvbW1lbnQsXG4gIGluc2VydEJlZm9yZTogaW5zZXJ0QmVmb3JlLFxuICByZW1vdmVDaGlsZDogcmVtb3ZlQ2hpbGQsXG4gIGFwcGVuZENoaWxkOiBhcHBlbmRDaGlsZCxcbiAgcGFyZW50Tm9kZTogcGFyZW50Tm9kZSxcbiAgbmV4dFNpYmxpbmc6IG5leHRTaWJsaW5nLFxuICB0YWdOYW1lOiB0YWdOYW1lLFxuICBzZXRUZX
118h0Q29udGVudDogc2V0VGV4dENvbnRlbnQsXG4gIHNldFN0eWxlU2NvcGU6IHNldFN0eWxlU2NvcGVcbn0pO1xuXG4vKiAgKi9cblxudmFyIHJlZiA9IHtcbiAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUgKF8sIHZub2RlKSB7XG4gICAgcmVnaXN0ZXJSZWYodm5vZGUpO1xuICB9LFxuICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZSAob2xkVm5vZGUsIHZub2RlKSB7XG4gICAgaWYgKG9sZFZub2RlLmRhdGEucmVmICE9PSB2bm9kZS5kYXRhLnJlZikge1xuICAgICAgcmVnaXN0ZXJSZWYob2xkVm5vZGUsIHRydWUpO1xuICAgICAgcmVnaXN0ZXJSZWYodm5vZGUpO1xuICAgIH1cbiAgfSxcbiAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSAodm5vZGUpIHtcbiAgICByZWdpc3RlclJlZih2bm9kZSwgdHJ1ZSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyUmVmICh2bm9kZSwgaXNSZW1vdmFsKSB7XG4gIHZhciBrZXkgPSB2bm9kZS5kYXRhLnJlZjtcbiAgaWYgKCFpc0RlZihrZXkpKSB7IHJldHVybiB9XG5cbiAgdmFyIHZtID0gdm5vZGUuY29udGV4dDtcbiAgdmFyIHJlZiA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlIHx8IHZub2RlLmVsbTtcbiAgdmFyIHJlZnMgPSB2bS4kcmVmcztcbiAgaWYgKGlzUmVtb3ZhbCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJlZnNba2V5XSkpIHtcbiAgICAgIHJlbW92ZShyZWZzW2tleV0sIHJlZik7XG4gICAgfSBlbHNlIGlmIChyZWZzW2tleV0gPT09IHJlZikge1xuICAgICAgcmVmc1trZXldID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAodm5vZGUuZGF0YS5yZWZJbkZvcikge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlZnNba2V5XSkpIHtcbiAgICAgICAgcmVmc1trZXldID0gW3JlZl07XG4gICAgICB9IGVsc2UgaWYgKHJlZnNba2V5XS5pbmRleE9mKHJlZikgPCAwKSB7XG4gICAgICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgICAgICByZWZzW2tleV0ucHVzaChyZWYpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZWZzW2tleV0gPSByZWY7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVmlydHVhbCBET00gcGF0Y2hpbmcgYWxnb3JpdGhtIGJhc2VkIG9uIFNuYWJiZG9tIGJ5XG4gKiBTaW1vbiBGcmlpcyBWaW5kdW0gKEBwYWxkZXBpbmQpXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2VcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9wYWxkZXBpbmQvc25hYmJkb20vYmxvYi9tYXN0ZXIvTElDRU5TRVxuICpcbiAqIG1vZGlmaWVkIGJ5IEV2YW4gWW91IChAeXl4OTkwODAzKVxuICpcbiAqIE5vdCB0eXBlLWNoZWNraW5nIHRoaXMgYmVjYXVzZSB0aGlzIGZpbGUgaXMgcGVyZi1jcml0aWNhbCBhbmQgdGhlIGNvc3RcbiAqIG9mIG1ha2luZyBmbG93IHVuZGVyc3RhbmQgaXQgaXMgbm90IHdvcnRoIGl0LlxuICovXG5cbnZhciBlbXB0eU5vZGUgPSBuZXcgVk5vZGUoJycsIHt9LCBbXSk7XG5cbnZhciBob29rcyA9IFsnY3JlYXRlJywgJ2FjdGl2YXRlJywgJ3VwZGF0ZScsICdyZW1vdmUnLCAnZGVzdHJveSddO1xuXG5mdW5jdGlvbiBzYW1lVm5vZGUgKGEsIGIpIHtcbiAgcmV0dXJuIChcbiAgICBhLmtleSA9PT0gYi5rZXkgJiZcbiAgICBhLmFzeW5jRmFjdG9yeSA9PT0gYi5hc3luY0ZhY3RvcnkgJiYgKFxuICAgICAgKFxuICAgICAgICBhLnRhZyA9PT0gYi50YWcgJiZcbiAgICAgICAgYS5pc0NvbW1lbnQgPT09IGIuaXNDb21tZW50ICYmXG4gICAgICAgIGlzRGVmKGEuZGF0YSkgPT09IGlzRGVmKGIuZGF0YSkgJiZcbiAgICAgICAgc2FtZUlucHV0VHlwZShhLCBiKVxuICAgICAgKSB8fCAoXG4gICAgICAgIGlzVHJ1ZShhLmlzQXN5bmNQbGFjZWhvbGRlcikgJiZcbiAgICAgICAgaXNVbmRlZihiLmFzeW5jRmFjdG9yeS5lcnJvcilcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuZnVuY3Rpb24gc2FtZUlucHV0VHlwZSAoYSwgYikge1xuICBpZiAoYS50YWcgIT09ICdpbnB1dCcpIHsgcmV0dXJuIHRydWUgfVxuICB2YXIgaTtcbiAgdmFyIHR5cGVBID0gaXNEZWYoaSA9IGEuZGF0YSkgJiYgaXNEZWYoaSA9IGkuYXR0cnMpICYmIGkudHlwZTtcbiAgdmFyIHR5cGVCID0gaXNEZWYoaSA9IGIuZGF0YSkgJiYgaXNEZWYoaSA9IGkuYXR0cnMpICYmIGkudHlwZTtcbiAgcmV0dXJuIHR5cGVBID09PSB0eXBlQiB8fCBpc1RleHRJbnB1dFR5cGUodHlwZUEpICYmIGlzVGV4dElucHV0VHlwZSh0eXBlQilcbn1cblxuZnVuY3Rpb24gY3JlYXRlS2V5VG9PbGRJZHggKGNoaWxkcmVuLCBiZWdpbklkeCwgZW5kSWR4KSB7XG4gIHZhciBpLCBrZXk7XG4gIHZhciBtYXAgPSB7fTtcbiAgZm9yIChpID0gYmVnaW5JZHg7IGkgPD0gZW5kSWR4OyArK2kpIHtcbiAgICBrZXkgPSBjaGlsZHJlbltpXS5rZXk7XG4gICAgaWYgKGlzRGVmKGtleSkpIHsgbWFwW2tleV0gPSBpOyB9XG4gIH1cbiAgcmV0dXJuIG1hcFxufVxuXG5mdW5jdGlvbiBjcmVhdGVQYXRjaEZ1bmN0aW9uIChiYWNrZW5kKSB7XG4gIHZhciBpLCBqO1xuICB2YXIgY2JzID0ge307XG5cbiAgdmFyIG1vZHVsZXMgPSBiYWNrZW5kLm1vZHVsZXM7XG4gIHZhciBub2RlT3BzID0gYmFja2VuZC5ub2RlT3BzO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBob29rcy5sZW5ndGg7ICsraSkge1xuICAgIGNic1tob29rc1tpXV0gPSBbXTtcbiAgICBmb3IgKGogPSAwOyBqIDwgbW9kdWxlcy5sZW5ndGg7ICsraikge1xuICAgICAgaWYgKGlzRGVmKG1vZHVsZXNbal1baG9va3NbaV1dKSkge1xuICAgICAgICBjYnNbaG9va3NbaV1dLnB1c2gobW9kdWxlc1tqXVtob29rc1tpXV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGVtcHR5Tm9kZUF0IChlbG0pIHtcbiAgICByZXR1cm4gbmV3IFZOb2RlKG5vZGVPcHMudGFnTmFtZShlbG0pLnRvTG93ZXJDYXNlKCksIHt9LCBbXSwgdW5kZWZpbmVkLCBlbG0pXG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVSbUNiIChjaGlsZEVsbSwgbGlzdGVuZXJzKSB7XG4gICAgZnVuY3Rpb24gcmVtb3ZlJCQxICgpIHtcbiAgICAgIGlmICgtLXJlbW92ZSQkMS5saXN0ZW5lcnMgPT09IDApIHtcbiAgICAgICAgcmVtb3ZlTm9kZShjaGlsZEVsbSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlbW92ZSQkMS5saXN0ZW5lcnMgPSBsaXN0ZW5lcnM7XG4gICAgcmV0dXJuIHJlbW92ZSQkMVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlTm9kZSAoZWwpIHtcbiAgICB2YXIgcGFyZW50ID0gbm9kZU9wcy5wYXJlbnROb2RlKGVsKTtcbiAgICAvLyBlbGVtZW50IG1heSBoYXZlIGFscmVhZHkgYmVlbiByZW1vdmVkIGR1ZSB0byB2LWh0bWwgLyB2LXRleHRcbiAgICBpZiAoaXNEZWYocGFyZW50KSkge1xuICAgICAgbm9kZU9wcy5yZW1vdmVDaGlsZChwYXJlbnQsIGVsKTtcbiAgICB9XG4gI
118H1cblxuICBmdW5jdGlvbiBpc1Vua25vd25FbGVtZW50JCQxICh2bm9kZSwgaW5WUHJlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICFpblZQcmUgJiZcbiAgICAgICF2bm9kZS5ucyAmJlxuICAgICAgIShcbiAgICAgICAgY29uZmlnLmlnbm9yZWRFbGVtZW50cy5sZW5ndGggJiZcbiAgICAgICAgY29uZmlnLmlnbm9yZWRFbGVtZW50cy5zb21lKGZ1bmN0aW9uIChpZ25vcmUpIHtcbiAgICAgICAgICByZXR1cm4gaXNSZWdFeHAoaWdub3JlKVxuICAgICAgICAgICAgPyBpZ25vcmUudGVzdCh2bm9kZS50YWcpXG4gICAgICAgICAgICA6IGlnbm9yZSA9PT0gdm5vZGUudGFnXG4gICAgICAgIH0pXG4gICAgICApICYmXG4gICAgICBjb25maWcuaXNVbmtub3duRWxlbWVudCh2bm9kZS50YWcpXG4gICAgKVxuICB9XG5cbiAgdmFyIGNyZWF0aW5nRWxtSW5WUHJlID0gMDtcblxuICBmdW5jdGlvbiBjcmVhdGVFbG0gKFxuICAgIHZub2RlLFxuICAgIGluc2VydGVkVm5vZGVRdWV1ZSxcbiAgICBwYXJlbnRFbG0sXG4gICAgcmVmRWxtLFxuICAgIG5lc3RlZCxcbiAgICBvd25lckFycmF5LFxuICAgIGluZGV4XG4gICkge1xuICAgIGlmIChpc0RlZih2bm9kZS5lbG0pICYmIGlzRGVmKG93bmVyQXJyYXkpKSB7XG4gICAgICAvLyBUaGlzIHZub2RlIHdhcyB1c2VkIGluIGEgcHJldmlvdXMgcmVuZGVyIVxuICAgICAgLy8gbm93IGl0J3MgdXNlZCBhcyBhIG5ldyBub2RlLCBvdmVyd3JpdGluZyBpdHMgZWxtIHdvdWxkIGNhdXNlXG4gICAgICAvLyBwb3RlbnRpYWwgcGF0Y2ggZXJyb3JzIGRvd24gdGhlIHJvYWQgd2hlbiBpdCdzIHVzZWQgYXMgYW4gaW5zZXJ0aW9uXG4gICAgICAvLyByZWZlcmVuY2Ugbm9kZS4gSW5zdGVhZCwgd2UgY2xvbmUgdGhlIG5vZGUgb24tZGVtYW5kIGJlZm9yZSBjcmVhdGluZ1xuICAgICAgLy8gYXNzb2NpYXRlZCBET00gZWxlbWVudCBmb3IgaXQuXG4gICAgICB2bm9kZSA9IG93bmVyQXJyYXlbaW5kZXhdID0gY2xvbmVWTm9kZSh2bm9kZSk7XG4gICAgfVxuXG4gICAgdm5vZGUuaXNSb290SW5zZXJ0ID0gIW5lc3RlZDsgLy8gZm9yIHRyYW5zaXRpb24gZW50ZXIgY2hlY2tcbiAgICBpZiAoY3JlYXRlQ29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgcmVmRWxtKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICAgIHZhciBjaGlsZHJlbiA9IHZub2RlLmNoaWxkcmVuO1xuICAgIHZhciB0YWcgPSB2bm9kZS50YWc7XG4gICAgaWYgKGlzRGVmKHRhZykpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmIChkYXRhICYmIGRhdGEucHJlKSB7XG4gICAgICAgICAgY3JlYXRpbmdFbG1JblZQcmUrKztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNVbmtub3duRWxlbWVudCQkMSh2bm9kZSwgY3JlYXRpbmdFbG1JblZQcmUpKSB7XG4gICAgICAgICAgd2FybihcbiAgICAgICAgICAgICdVbmtub3duIGN1c3RvbSBlbGVtZW50OiA8JyArIHRhZyArICc+IC0gZGlkIHlvdSAnICtcbiAgICAgICAgICAgICdyZWdpc3RlciB0aGUgY29tcG9uZW50IGNvcnJlY3RseT8gRm9yIHJlY3Vyc2l2ZSBjb21wb25lbnRzLCAnICtcbiAgICAgICAgICAgICdtYWtlIHN1cmUgdG8gcHJvdmlkZSB0aGUgXCJuYW1lXCIgb3B0aW9uLicsXG4gICAgICAgICAgICB2bm9kZS5jb250ZXh0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2bm9kZS5lbG0gPSB2bm9kZS5uc1xuICAgICAgICA/IG5vZGVPcHMuY3JlYXRlRWxlbWVudE5TKHZub2RlLm5zLCB0YWcpXG4gICAgICAgIDogbm9kZU9wcy5jcmVhdGVFbGVtZW50KHRhZywgdm5vZGUpO1xuICAgICAgc2V0U2NvcGUodm5vZGUpO1xuXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIHtcbiAgICAgICAgY3JlYXRlQ2hpbGRyZW4odm5vZGUsIGNoaWxkcmVuLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICBpZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgICAgICBpbnZva2VDcmVhdGVIb29rcyh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgfVxuICAgICAgICBpbnNlcnQocGFyZW50RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGRhdGEgJiYgZGF0YS5wcmUpIHtcbiAgICAgICAgY3JlYXRpbmdFbG1JblZQcmUtLTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzVHJ1ZSh2bm9kZS5pc0NvbW1lbnQpKSB7XG4gICAgICB2bm9kZS5lbG0gPSBub2RlT3BzLmNyZWF0ZUNvbW1lbnQodm5vZGUudGV4dCk7XG4gICAgICBpbnNlcnQocGFyZW50RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZub2RlLmVsbSA9IG5vZGVPcHMuY3JlYXRlVGV4dE5vZGUodm5vZGUudGV4dCk7XG4gICAgICBpbnNlcnQocGFyZW50RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQ29tcG9uZW50ICh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIHJlZkVsbSkge1xuICAgIHZhciBpID0gdm5vZGUuZGF0YTtcbiAgICBpZiAoaXNEZWYoaSkpIHtcbiAgICAgIHZhciBpc1JlYWN0aXZhdGVkID0gaXNEZWYodm5vZGUuY29tcG9uZW50SW5zdGFuY2UpICYmIGkua2VlcEFsaXZlO1xuICAgICAgaWYgKGlzRGVmKGkgPSBpLmhvb2spICYmIGlzRGVmKGkgPSBpLmluaXQpKSB7XG4gICAgICAgIGkodm5vZGUsIGZhbHNlIC8qIGh5ZHJhdGluZyAqLyk7XG4gICAgICB9XG4gICAgICAvLyBhZnRlciBjYWxsaW5nIHRoZSBpbml0IGhvb2ssIGlmIHRoZSB2bm9kZSBpcyBhIGNoaWxkIGNvbXBvbmVudFxuICAgICAgLy8gaXQgc2hvdWxkJ3ZlIGNyZWF0ZWQgYSBjaGlsZCBpbnN0YW5jZSBhbmQgbW91bnRlZCBpdC4gdGhlIGNoaWxkXG4gICAgICAvLyBjb21wb25lbnQgYWxzbyBoYXMgc2V0IHRoZSBwbGFjZWhvbGRlciB2bm9kZSdzIGVsbS5cbiAgICAgIC8vIGluIHRoYXQgY2FzZSB3ZSBjYW4ganVzdCByZXR1cm4gdGhlIGVsZW1lbnQgYW5kIGJlIGRvbmUuXG4gICAgICBpZiAoaXNEZWYodm5vZGUuY29tcG9uZW50SW5zdGFuY2UpKSB7XG4gICAgICAgIGluaXRDb21wb25lbnQodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgIGluc2VydChwYXJlbnRFbG0sIHZub2Rl
118LmVsbSwgcmVmRWxtKTtcbiAgICAgICAgaWYgKGlzVHJ1ZShpc1JlYWN0aXZhdGVkKSkge1xuICAgICAgICAgIHJlYWN0aXZhdGVDb21wb25lbnQodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW5pdENvbXBvbmVudCAodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSkge1xuICAgIGlmIChpc0RlZih2bm9kZS5kYXRhLnBlbmRpbmdJbnNlcnQpKSB7XG4gICAgICBpbnNlcnRlZFZub2RlUXVldWUucHVzaC5hcHBseShpbnNlcnRlZFZub2RlUXVldWUsIHZub2RlLmRhdGEucGVuZGluZ0luc2VydCk7XG4gICAgICB2bm9kZS5kYXRhLnBlbmRpbmdJbnNlcnQgPSBudWxsO1xuICAgIH1cbiAgICB2bm9kZS5lbG0gPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZS4kZWw7XG4gICAgaWYgKGlzUGF0Y2hhYmxlKHZub2RlKSkge1xuICAgICAgaW52b2tlQ3JlYXRlSG9va3Modm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICBzZXRTY29wZSh2bm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGVtcHR5IGNvbXBvbmVudCByb290LlxuICAgICAgLy8gc2tpcCBhbGwgZWxlbWVudC1yZWxhdGVkIG1vZHVsZXMgZXhjZXB0IGZvciByZWYgKCMzNDU1KVxuICAgICAgcmVnaXN0ZXJSZWYodm5vZGUpO1xuICAgICAgLy8gbWFrZSBzdXJlIHRvIGludm9rZSB0aGUgaW5zZXJ0IGhvb2tcbiAgICAgIGluc2VydGVkVm5vZGVRdWV1ZS5wdXNoKHZub2RlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWFjdGl2YXRlQ29tcG9uZW50ICh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIHJlZkVsbSkge1xuICAgIHZhciBpO1xuICAgIC8vIGhhY2sgZm9yICM0MzM5OiBhIHJlYWN0aXZhdGVkIGNvbXBvbmVudCB3aXRoIGlubmVyIHRyYW5zaXRpb25cbiAgICAvLyBkb2VzIG5vdCB0cmlnZ2VyIGJlY2F1c2UgdGhlIGlubmVyIG5vZGUncyBjcmVhdGVkIGhvb2tzIGFyZSBub3QgY2FsbGVkXG4gICAgLy8gYWdhaW4uIEl0J3Mgbm90IGlkZWFsIHRvIGludm9sdmUgbW9kdWxlLXNwZWNpZmljIGxvZ2ljIGluIGhlcmUgYnV0XG4gICAgLy8gdGhlcmUgZG9lc24ndCBzZWVtIHRvIGJlIGEgYmV0dGVyIHdheSB0byBkbyBpdC5cbiAgICB2YXIgaW5uZXJOb2RlID0gdm5vZGU7XG4gICAgd2hpbGUgKGlubmVyTm9kZS5jb21wb25lbnRJbnN0YW5jZSkge1xuICAgICAgaW5uZXJOb2RlID0gaW5uZXJOb2RlLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZTtcbiAgICAgIGlmIChpc0RlZihpID0gaW5uZXJOb2RlLmRhdGEpICYmIGlzRGVmKGkgPSBpLnRyYW5zaXRpb24pKSB7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjYnMuYWN0aXZhdGUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBjYnMuYWN0aXZhdGVbaV0oZW1wdHlOb2RlLCBpbm5lck5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGluc2VydGVkVm5vZGVRdWV1ZS5wdXNoKGlubmVyTm9kZSk7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIC8vIHVubGlrZSBhIG5ld2x5IGNyZWF0ZWQgY29tcG9uZW50LFxuICAgIC8vIGEgcmVhY3RpdmF0ZWQga2VlcC1hbGl2ZSBjb21wb25lbnQgZG9lc24ndCBpbnNlcnQgaXRzZWxmXG4gICAgaW5zZXJ0KHBhcmVudEVsbSwgdm5vZGUuZWxtLCByZWZFbG0pO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5zZXJ0IChwYXJlbnQsIGVsbSwgcmVmJCQxKSB7XG4gICAgaWYgKGlzRGVmKHBhcmVudCkpIHtcbiAgICAgIGlmIChpc0RlZihyZWYkJDEpKSB7XG4gICAgICAgIGlmIChub2RlT3BzLnBhcmVudE5vZGUocmVmJCQxKSA9PT0gcGFyZW50KSB7XG4gICAgICAgICAgbm9kZU9wcy5pbnNlcnRCZWZvcmUocGFyZW50LCBlbG0sIHJlZiQkMSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGVPcHMuYXBwZW5kQ2hpbGQocGFyZW50LCBlbG0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNoaWxkcmVuICh2bm9kZSwgY2hpbGRyZW4sIGluc2VydGVkVm5vZGVRdWV1ZSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgY2hlY2tEdXBsaWNhdGVLZXlzKGNoaWxkcmVuKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgY3JlYXRlRWxtKGNoaWxkcmVuW2ldLCBpbnNlcnRlZFZub2RlUXVldWUsIHZub2RlLmVsbSwgbnVsbCwgdHJ1ZSwgY2hpbGRyZW4sIGkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNQcmltaXRpdmUodm5vZGUudGV4dCkpIHtcbiAgICAgIG5vZGVPcHMuYXBwZW5kQ2hpbGQodm5vZGUuZWxtLCBub2RlT3BzLmNyZWF0ZVRleHROb2RlKFN0cmluZyh2bm9kZS50ZXh0KSkpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzUGF0Y2hhYmxlICh2bm9kZSkge1xuICAgIHdoaWxlICh2bm9kZS5jb21wb25lbnRJbnN0YW5jZSkge1xuICAgICAgdm5vZGUgPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGU7XG4gICAgfVxuICAgIHJldHVybiBpc0RlZih2bm9kZS50YWcpXG4gIH1cblxuICBmdW5jdGlvbiBpbnZva2VDcmVhdGVIb29rcyAodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSkge1xuICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IGNicy5jcmVhdGUubGVuZ3RoOyArK2kkMSkge1xuICAgICAgY2JzLmNyZWF0ZVtpJDFdKGVtcHR5Tm9kZSwgdm5vZGUpO1xuICAgIH1cbiAgICBpID0gdm5vZGUuZGF0YS5ob29rOyAvLyBSZXVzZSB2YXJpYWJsZVxuICAgIGlmIChpc0RlZihpKSkge1xuICAgICAgaWYgKGlzRGVmKGkuY3JlYXRlKSkgeyBpLmNyZWF0ZShlbXB0eU5vZGUsIHZub2RlKTsgfVxuICAgICAgaWYgKGlzRGVmKGkuaW5zZXJ0KSkgeyBpbnNlcnRlZFZub2RlUXVldWUucHVzaCh2bm9kZSk7IH1cbiAgICB9XG4gIH1cblxuICAvLyBzZXQgc2NvcGUgaWQgYXR0cmlidXRlIGZvciBzY29wZWQgQ1NTLlxuICAvLyB0aGlzIGlzIGltcGxlbWVudGVkIGFzIGEgc3BlY2lhbCBjYXNlIHRvIGF2b2lkIHRoZSBvdmVyaGVhZFxuICAvLyBvZiBnb2luZyB0aHJvdWdoIHRoZSBub3JtYWwgYXR0cmlidXRlIHBhdGNoaW5nIHByb2Nlc3MuXG4gIGZ1bmN0aW9uIHNldFNjb3BlICh2bm9kZSkge1xuICAgIHZhciBpO1xuICAgIGlmIChpc0RlZihpID0gdm5vZGUuZm5TY29wZUlkKSkge1xuICAgICAgbm9kZU9wcy5zZXRTdHlsZVNjb3BlKHZub2Rl
118LmVsbSwgaSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBhbmNlc3RvciA9IHZub2RlO1xuICAgICAgd2hpbGUgKGFuY2VzdG9yKSB7XG4gICAgICAgIGlmIChpc0RlZihpID0gYW5jZXN0b3IuY29udGV4dCkgJiYgaXNEZWYoaSA9IGkuJG9wdGlvbnMuX3Njb3BlSWQpKSB7XG4gICAgICAgICAgbm9kZU9wcy5zZXRTdHlsZVNjb3BlKHZub2RlLmVsbSwgaSk7XG4gICAgICAgIH1cbiAgICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci5wYXJlbnQ7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIGZvciBzbG90IGNvbnRlbnQgdGhleSBzaG91bGQgYWxzbyBnZXQgdGhlIHNjb3BlSWQgZnJvbSB0aGUgaG9zdCBpbnN0YW5jZS5cbiAgICBpZiAoaXNEZWYoaSA9IGFjdGl2ZUluc3RhbmNlKSAmJlxuICAgICAgaSAhPT0gdm5vZGUuY29udGV4dCAmJlxuICAgICAgaSAhPT0gdm5vZGUuZm5Db250ZXh0ICYmXG4gICAgICBpc0RlZihpID0gaS4kb3B0aW9ucy5fc2NvcGVJZClcbiAgICApIHtcbiAgICAgIG5vZGVPcHMuc2V0U3R5bGVTY29wZSh2bm9kZS5lbG0sIGkpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZFZub2RlcyAocGFyZW50RWxtLCByZWZFbG0sIHZub2Rlcywgc3RhcnRJZHgsIGVuZElkeCwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKSB7XG4gICAgZm9yICg7IHN0YXJ0SWR4IDw9IGVuZElkeDsgKytzdGFydElkeCkge1xuICAgICAgY3JlYXRlRWxtKHZub2Rlc1tzdGFydElkeF0sIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0sIGZhbHNlLCB2bm9kZXMsIHN0YXJ0SWR4KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbnZva2VEZXN0cm95SG9vayAodm5vZGUpIHtcbiAgICB2YXIgaSwgajtcbiAgICB2YXIgZGF0YSA9IHZub2RlLmRhdGE7XG4gICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICBpZiAoaXNEZWYoaSA9IGRhdGEuaG9vaykgJiYgaXNEZWYoaSA9IGkuZGVzdHJveSkpIHsgaSh2bm9kZSk7IH1cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBjYnMuZGVzdHJveS5sZW5ndGg7ICsraSkgeyBjYnMuZGVzdHJveVtpXSh2bm9kZSk7IH1cbiAgICB9XG4gICAgaWYgKGlzRGVmKGkgPSB2bm9kZS5jaGlsZHJlbikpIHtcbiAgICAgIGZvciAoaiA9IDA7IGogPCB2bm9kZS5jaGlsZHJlbi5sZW5ndGg7ICsraikge1xuICAgICAgICBpbnZva2VEZXN0cm95SG9vayh2bm9kZS5jaGlsZHJlbltqXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlVm5vZGVzICh2bm9kZXMsIHN0YXJ0SWR4LCBlbmRJZHgpIHtcbiAgICBmb3IgKDsgc3RhcnRJZHggPD0gZW5kSWR4OyArK3N0YXJ0SWR4KSB7XG4gICAgICB2Y
118XIgY2ggPSB2bm9kZXNbc3RhcnRJZHhdO1xuICAgICAgaWYgKGlzRGVmKGNoKSkge1xuICAgICAgICBpZiAoaXNEZWYoY2gudGFnKSkge1xuICAgICAgICAgIHJlbW92ZUFuZEludm9rZVJlbW92ZUhvb2soY2gpO1xuICAgICAgICAgIGludm9rZURlc3Ryb3lIb29rKGNoKTtcbiAgICAgICAgfSBlbHNlIHsgLy8gVGV4dCBub2RlXG4gICAgICAgICAgcmVtb3ZlTm9kZShjaC5lbG0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlQW5kSW52b2tlUmVtb3ZlSG9vayAodm5vZGUsIHJtKSB7XG4gICAgaWYgKGlzRGVmKHJtKSB8fCBpc0RlZih2bm9kZS5kYXRhKSkge1xuICAgICAgdmFyIGk7XG4gICAgICB2YXIgbGlzdGVuZXJzID0gY2JzLnJlbW92ZS5sZW5ndGggKyAxO1xuICAgICAgaWYgKGlzRGVmKHJtKSkge1xuICAgICAgICAvLyB3ZSBoYXZlIGEgcmVjdXJzaXZlbHkgcGFzc2VkIGRvd24gcm0gY2FsbGJhY2tcbiAgICAgICAgLy8gaW5jcmVhc2UgdGhlIGxpc3RlbmVycyBjb3VudFxuICAgICAgICBybS5saXN0ZW5lcnMgKz0gbGlzdGVuZXJzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZGlyZWN0bHkgcmVtb3ZpbmdcbiAgICAgICAgcm0gPSBjcmVhdGVSbUNiKHZub2RlLmVsbSwgbGlzdGVuZXJzKTtcbiAgICAgIH1cbiAgICAgIC8vIHJlY3Vyc2l2ZWx5IGludm9rZSBob29rcyBvbiBjaGlsZCBjb21wb25lbnQgcm9vdCBub2RlXG4gICAgICBpZiAoaXNEZWYoaSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlKSAmJiBpc0RlZihpID0gaS5fdm5vZGUpICYmIGlzRGVmKGkuZGF0YSkpIHtcbiAgICAgICAgcmVtb3ZlQW5kSW52b2tlUmVtb3ZlSG9vayhpLCBybSk7XG4gICAgICB9XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLnJlbW92ZS5sZW5ndGg7ICsraSkge1xuICAgICAgICBjYnMucmVtb3ZlW2ldKHZub2RlLCBybSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNEZWYoaSA9IHZub2RlLmRhdGEuaG9vaykgJiYgaXNEZWYoaSA9IGkucmVtb3ZlKSkge1xuICAgICAgICBpKHZub2RlLCBybSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBybSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZW1vdmVOb2RlKHZub2RlLmVsbSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlQ2hpbGRyZW4gKHBhcmVudEVsbSwgb2xkQ2gsIG5ld0NoLCBpbnNlcnRlZFZub2RlUXVldWUsIHJlbW92ZU9ubHkpIHtcbiAgICB2YXIgb2xkU3RhcnRJZHggPSAwO1xuICAgIHZhciBuZXdTdGFydElkeCA9IDA7XG4gICAgdmFyIG9sZEVuZElkeCA9IG9sZENoLmxlbmd0aCAtIDE7XG4gICAgdmFyIG9sZFN0YXJ0Vm5vZGUgPSBvbGRDaFswXTtcbiAgICB2YXIgb2xkRW5kVm5vZGUgPSBvbGRDaFtvbGRFbmRJZHhdO1xuICAgIHZhciBuZXdFbmRJZHggPSBuZXdDaC5sZW5ndGggLSAxO1xuICAgIHZhciBuZXdTdGFydFZub2RlID0gbmV3Q2hbMF07XG4gICAgdmFyIG5ld0VuZFZub2RlID0gbmV3Q2hbbmV3RW5kSWR4XTtcbiAgICB2YXIgb2xkS2V5VG9JZHgsIGlkeEluT2xkLCB2bm9kZVRvTW92ZSwgcmVmRWxtO1xuXG4gICAgLy8gcmVtb3ZlT25seSBpcyBhIHNwZWNpYWwgZmxhZyB1c2VkIG9ubHkgYnkgPHRyYW5zaXRpb24tZ3JvdXA+XG4gICAgLy8gdG8gZW5zdXJlIHJlbW92ZWQgZWxlbWVudHMgc3RheSBpbiBjb3JyZWN0IHJlbGF0aXZlIHBvc2l0aW9uc1xuICAgIC8vIGR1cmluZyBsZWF2aW5nIHRyYW5zaXRpb25zXG4gICAgdmFyIGNhbk1vdmUgPSAhcmVtb3ZlT25seTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjaGVja0R1cGxpY2F0ZUtleXMobmV3Q2gpO1xuICAgIH1cblxuICAgIHdoaWxlIChvbGRTdGFydElkeCA8PSBvbGRFbmRJZHggJiYgbmV3U3RhcnRJZHggPD0gbmV3RW5kSWR4KSB7XG4gICAgICBpZiAoaXNVbmRlZihvbGRTdGFydFZub2RlKSkge1xuICAgICAgICBvbGRTdGFydFZub2RlID0gb2xkQ2hbKytvbGRTdGFydElkeF07IC8vIFZub2RlIGhhcyBiZWVuIG1vdmVkIGxlZnRcbiAgICAgIH0gZWxzZSBpZiAoaXNVbmRlZihvbGRFbmRWbm9kZSkpIHtcbiAgICAgICAgb2xkRW5kVm5vZGUgPSBvbGRDaFstLW9sZEVuZElkeF07XG4gICAgICB9IGVsc2UgaWYgKHNhbWVWbm9kZShvbGRTdGFydFZub2RlLCBuZXdTdGFydFZub2RlKSkge1xuICAgICAgICBwYXRjaFZub2RlKG9sZFN0YXJ0Vm5vZGUsIG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgbmV3Q2gsIG5ld1N0YXJ0SWR4KTtcbiAgICAgICAgb2xkU3RhcnRWbm9kZSA9IG9sZENoWysrb2xkU3RhcnRJZHhdO1xuICAgICAgICBuZXdTdGFydFZub2RlID0gbmV3Q2hbKytuZXdTdGFydElkeF07XG4gICAgICB9IGVsc2UgaWYgKHNhbWVWbm9kZShvbGRFbmRWbm9kZSwgbmV3RW5kVm5vZGUpKSB7XG4gICAgICAgIHBhdGNoVm5vZGUob2xkRW5kVm5vZGUsIG5ld0VuZFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIG5ld0NoLCBuZXdFbmRJZHgpO1xuICAgICAgICBvbGRFbmRWbm9kZSA9IG9sZENoWy0tb2xkRW5kSWR4XTtcbiAgICAgICAgbmV3RW5kVm5vZGUgPSBuZXdDaFstLW5ld0VuZElkeF07XG4gICAgICB9IGVsc2UgaWYgKHNhbWVWbm9kZShvbGRTdGFydFZub2RlLCBuZXdFbmRWbm9kZSkpIHsgLy8gVm5vZGUgbW92ZWQgcmlnaHRcbiAgICAgICAgcGF0Y2hWbm9kZShvbGRTdGFydFZub2RlLCBuZXdFbmRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBuZXdDaCwgbmV3RW5kSWR4KTtcbiAgICAgICAgY2FuTW92ZSAmJiBub2RlT3BzLmluc2VydEJlZm9yZShwYXJlbnRFbG0sIG9sZFN0YXJ0Vm5vZGUuZWxtLCBub2RlT3BzLm5leHRTaWJsaW5nKG9sZEVuZFZub2RlLmVsbSkpO1xuICAgICAgICBvbGRTdGFydFZub2RlID0gb2xkQ2hbKytvbGRTdGFydElkeF07XG4gICAgICAgIG5ld0VuZFZub2RlID0gbmV3Q2hbLS1uZXdFbmRJZHhdO1xuICAgICAgfSBlbHNlIGlmIChzYW1lVm5vZGUob2xkRW5kVm5vZGUsIG5ld1N0YXJ0Vm5vZGUpKSB7IC8vIFZub2RlIG1vdmVkIGxlZnRcbiAgICAgICAgcGF0Y2hWbm9kZShvbGRFbmRWbm9kZSwgbmV3U3RhcnRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBuZXdDaCwgbmV3U3RhcnRJZHgpO1xuICAgICAgICBjYW5Nb3ZlICYmIG5vZGVPcHMuaW5zZXJ0QmVmb3JlKHBhcmVudEVsbSwgb2xkRW5kVm5vZGUuZWxtLCBvbGRTdGFydFZub2Rl
118LmVsbSk7XG4gICAgICAgIG9sZEVuZFZub2RlID0gb2xkQ2hbLS1vbGRFbmRJZHhdO1xuICAgICAgICBuZXdTdGFydFZub2RlID0gbmV3Q2hbKytuZXdTdGFydElkeF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaXNVbmRlZihvbGRLZXlUb0lkeCkpIHsgb2xkS2V5VG9JZHggPSBjcmVhdGVLZXlUb09sZElkeChvbGRDaCwgb2xkU3RhcnRJZHgsIG9sZEVuZElkeCk7IH1cbiAgICAgICAgaWR4SW5PbGQgPSBpc0RlZihuZXdTdGFydFZub2RlLmtleSlcbiAgICAgICAgICA/IG9sZEtleVRvSWR4W25ld1N0YXJ0Vm5vZGUua2V5XVxuICAgICAgICAgIDogZmluZElkeEluT2xkKG5ld1N0YXJ0Vm5vZGUsIG9sZENoLCBvbGRTdGFydElkeCwgb2xkRW5kSWR4KTtcbiAgICAgICAgaWYgKGlzVW5kZWYoaWR4SW5PbGQpKSB7IC8vIE5ldyBlbGVtZW50XG4gICAgICAgICAgY3JlYXRlRWxtKG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCBvbGRTdGFydFZub2RlLmVsbSwgZmFsc2UsIG5ld0NoLCBuZXdTdGFydElkeCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdm5vZGVUb01vdmUgPSBvbGRDaFtpZHhJbk9sZF07XG4gICAgICAgICAgaWYgKHNhbWVWbm9kZSh2bm9kZVRvTW92ZSwgbmV3U3RhcnRWbm9kZSkpIHtcbiAgICAgICAgICAgIHBhdGNoVm5vZGUodm5vZGVUb01vdmUsIG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgbmV3Q2gsIG5ld1N0YXJ0SWR4KTtcbiAgICAgICAgICAgIG9sZENoW2lkeEluT2xkXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNhbk1vdmUgJiYgbm9kZU9wcy5pbnNlcnRCZWZvcmUocGFyZW50RWxtLCB2bm9kZVRvTW92ZS5lbG0sIG9sZFN0YXJ0Vm5vZGUuZWxtKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gc2FtZSBrZXkgYnV0IGRpZmZlcmVudCBlbGVtZW50LiB0cmVhdCBhcyBuZXcgZWxlbWVudFxuICAgICAgICAgICAgY3JlYXRlRWxtKG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCBvbGRTdGFydFZub2RlLmVsbSwgZmFsc2UsIG5ld0NoLCBuZXdTdGFydElkeCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG5ld1N0YXJ0Vm5vZGUgPSBuZXdDaFsrK25ld1N0YXJ0SWR4XTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9sZFN0YXJ0SWR4ID4gb2xkRW5kSWR4KSB7XG4gICAgICByZWZFbG0gPSBpc1VuZGVmKG5ld0NoW25ld0VuZElkeCArIDFdKSA/IG51bGwgOiBuZXdDaFtuZXdFbmRJZHggKyAxXS5lbG07XG4gICAgICBhZGRWbm9kZXMocGFyZW50RWxtLCByZWZFbG0sIG5ld0NoLCBuZXdTdGFydElkeCwgbmV3RW5kSWR4LCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgIH0gZWxzZSBpZiAobmV3U3RhcnRJZHggPiBuZXdFbmRJZHgpIHtcbiAgICAgIHJlbW92ZVZub2RlcyhvbGRDaCwgb2xkU3RhcnRJZHgsIG9sZEVuZElkeCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2hlY2tEdXBsaWNhdGVLZXlzIChjaGlsZHJlbikge1xuICAgIHZhciBzZWVuS2V5cyA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2bm9kZSA9IGNoaWxkcmVuW2ldO1xuICAgICAgdmFyIGtleSA9IHZub2RlLmtleTtcbiAgICAgIGlmIChpc0RlZihrZXkpKSB7XG4gICAgICAgIGlmIChzZWVuS2V5c1trZXldKSB7XG4gICAgICAgICAgd2FybihcbiAgICAgICAgICAgIChcIkR1cGxpY2F0ZSBrZXlzIGRldGVjdGVkOiAnXCIgKyBrZXkgKyBcIicuIFRoaXMgbWF5IGNhdXNlIGFuIHVwZGF0ZSBlcnJvci5cIiksXG4gICAgICAgICAgICB2bm9kZS5jb250ZXh0XG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWVuS2V5c1trZXldID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmRJZHhJbk9sZCAobm9kZSwgb2xkQ2gsIHN0YXJ0LCBlbmQpIHtcbiAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgICAgdmFyIGMgPSBvbGRDaFtpXTtcbiAgICAgIGlmIChpc0RlZihjKSAmJiBzYW1lVm5vZGUobm9kZSwgYykpIHsgcmV0dXJuIGkgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBhdGNoVm5vZGUgKFxuICAgIG9sZFZub2RlLFxuICAgIHZub2RlLFxuICAgIGluc2VydGVkVm5vZGVRdWV1ZSxcbiAgICBvd25lckFycmF5LFxuICAgIGluZGV4LFxuICAgIHJlbW92ZU9ubHlcbiAgKSB7XG4gICAgaWYgKG9sZFZub2RlID09PSB2bm9kZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGlzRGVmKHZub2RlLmVsbSkgJiYgaXNEZWYob3duZXJBcnJheSkpIHtcbiAgICAgIC8vIGNsb25lIHJldXNlZCB2bm9kZVxuICAgICAgdm5vZGUgPSBvd25lckFycmF5W2luZGV4XSA9IGNsb25lVk5vZGUodm5vZGUpO1xuICAgIH1cblxuICAgIHZhciBlbG0gPSB2bm9kZS5lbG0gPSBvbGRWbm9kZS5lbG07XG5cbiAgICBpZiAoaXNUcnVlKG9sZFZub2RlLmlzQXN5bmNQbGFjZWhvbGRlcikpIHtcbiAgICAgIGlmIChpc0RlZih2bm9kZS5hc3luY0ZhY3RvcnkucmVzb2x2ZWQpKSB7XG4gICAgICAgIGh5ZHJhdGUob2xkVm5vZGUuZWxtLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZub2RlLmlzQXN5bmNQbGFjZWhvbGRlciA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyByZXVzZSBlbGVtZW50IGZvciBzdGF0aWMgdHJlZXMuXG4gICAgLy8gbm90ZSB3ZSBvbmx5IGRvIHRoaXMgaWYgdGhlIHZub2RlIGlzIGNsb25lZCAtXG4gICAgLy8gaWYgdGhlIG5ldyBub2RlIGlzIG5vdCBjbG9uZWQgaXQgbWVhbnMgdGhlIHJlbmRlciBmdW5jdGlvbnMgaGF2ZSBiZWVuXG4gICAgLy8gcmVzZXQgYnkgdGhlIGhvdC1yZWxvYWQtYXBpIGFuZCB3ZSBuZWVkIHRvIGRvIGEgcHJvcGVyIHJlLXJlbmRlci5cbiAgICBpZiAoaXNUcnVlKHZub2RlLmlzU3RhdGljKSAmJlxuICAgICAgaXNUcnVlKG9sZFZub2RlLmlzU3RhdGljKSAmJlxuICAgICAgdm5vZGUua2V5ID09PSBvbGRWbm9kZS5rZXkgJiZcbiAgICAgIChpc1RydWUodm5vZGUuaXNDbG9uZWQpIHx8IGlzVHJ1ZSh2bm9kZS5pc09uY2UpKVxuICAgICkge1xuICAgICAgdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgPSBvbGRWbm9kZS5jb21wb25lbnRJbnN0YW5jZTtcbiAgICAgIHJldHVyblxuICAgI
118H1cblxuICAgIHZhciBpO1xuICAgIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICBpZiAoaXNEZWYoZGF0YSkgJiYgaXNEZWYoaSA9IGRhdGEuaG9vaykgJiYgaXNEZWYoaSA9IGkucHJlcGF0Y2gpKSB7XG4gICAgICBpKG9sZFZub2RlLCB2bm9kZSk7XG4gICAgfVxuXG4gICAgdmFyIG9sZENoID0gb2xkVm5vZGUuY2hpbGRyZW47XG4gICAgdmFyIGNoID0gdm5vZGUuY2hpbGRyZW47XG4gICAgaWYgKGlzRGVmKGRhdGEpICYmIGlzUGF0Y2hhYmxlKHZub2RlKSkge1xuICAgICAgZm9yIChpID0gMDsgaSA8IGNicy51cGRhdGUubGVuZ3RoOyArK2kpIHsgY2JzLnVwZGF0ZVtpXShvbGRWbm9kZSwgdm5vZGUpOyB9XG4gICAgICBpZiAoaXNEZWYoaSA9IGRhdGEuaG9vaykgJiYgaXNEZWYoaSA9IGkudXBkYXRlKSkgeyBpKG9sZFZub2RlLCB2bm9kZSk7IH1cbiAgICB9XG4gICAgaWYgKGlzVW5kZWYodm5vZGUudGV4dCkpIHtcbiAgICAgIGlmIChpc0RlZihvbGRDaCkgJiYgaXNEZWYoY2gpKSB7XG4gICAgICAgIGlmIChvbGRDaCAhPT0gY2gpIHsgdXBkYXRlQ2hpbGRyZW4oZWxtLCBvbGRDaCwgY2gsIGluc2VydGVkVm5vZGVRdWV1ZSwgcmVtb3ZlT25seSk7IH1cbiAgICAgIH0gZWxzZSBpZiAoaXNEZWYoY2gpKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgY2hlY2tEdXBsaWNhdGVLZXlzKGNoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNEZWYob2xkVm5vZGUudGV4dCkpIHsgbm9kZU9wcy5zZXRUZXh0Q29udGVudChlbG0sICcnKTsgfVxuICAgICAgICBhZGRWbm9kZXMoZWxtLCBudWxsLCBjaCwgMCwgY2gubGVuZ3RoIC0gMSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNEZWYob2xkQ2gpKSB7XG4gICAgICAgIHJlbW92ZVZub2RlcyhvbGRDaCwgMCwgb2xkQ2gubGVuZ3RoIC0gMSk7XG4gICAgICB9IGVsc2UgaWYgKGlzRGVmKG9sZFZub2RlLnRleHQpKSB7XG4gICAgICAgIG5vZGVPcHMuc2V0VGV4dENvbnRlbnQoZWxtLCAnJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvbGRWbm9kZS50ZXh0ICE9PSB2bm9kZS50ZXh0KSB7XG4gICAgICBub2RlT3BzLnNldFRleHRDb250ZW50KGVsbSwgdm5vZGUudGV4dCk7XG4gICAgfVxuICAgIGlmIChpc0RlZihkYXRhKSkge1xuICAgICAgaWYgKGlzRGVmKGkgPSBkYXRhLmhvb2spICYmIGlzRGVmKGkgPSBpLnBvc3RwYXRjaCkpIHsgaShvbGRWbm9kZSwgdm5vZGUpOyB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW52b2tlSW5zZXJ0SG9vayAodm5vZGUsIHF1ZXVlLCBpbml0aWFsKSB7XG4gICAgLy8gZGVsYXkgaW5zZXJ0IGhvb2tzIGZvciBjb21wb25lbnQgcm9vdCBub2RlcywgaW52b2tlIHRoZW0gYWZ0ZXIgdGhlXG4gICAgLy8gZWxlbWVudCBpcyByZWFsbHkgaW5zZXJ0ZWRcbiAgICBpZiAoaXNUcnVlKGluaXRpYWwpICYmIGlzRGVmKHZub2RlLnBhcmVudCkpIHtcbiAgICAgIHZub2RlLnBhcmVudC5kYXRhLnBlbmRpbmdJbnNlcnQgPSBxdWV1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7ICsraSkge1xuICAgICAgICBxdWV1ZVtpXS5kYXRhLmhvb2suaW5zZXJ0KHF1ZXVlW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgaHlkcmF0aW9uQmFpbGVkID0gZmFsc2U7XG4gIC8vIGxpc3Qgb2YgbW9kdWxlcyB0aGF0IGNhbiBza2lwIGNyZWF0ZSBob29rIGR1cmluZyBoeWRyYXRpb24gYmVjYXVzZSB0aGV5XG4gIC8vIGFyZSBhbHJlYWR5IHJlbmRlcmVkIG9uIHRoZSBjbGllbnQgb3IgaGFzIG5vIG5lZWQgZm9yIGluaXRpYWxpemF0aW9uXG4gIC8vIE5vdGU6IHN0eWxlIGlzIGV4Y2x1ZGVkIGJlY2F1c2UgaXQgcmVsaWVzIG9uIGluaXRpYWwgY2xvbmUgZm9yIGZ1dHVyZVxuICAvLyBkZWVwIHVwZGF0ZXMgKCM3MDYzKS5cbiAgdmFyIGlzUmVuZGVyZWRNb2R1bGUgPSBtYWtlTWFwKCdhdHRycyxjbGFzcyxzdGF0aWNDbGFzcyxzdGF0aWNTdHlsZSxrZXknKTtcblxuICAvLyBOb3RlOiB0aGlzIGlzIGEgYnJvd3Nlci1vbmx5IGZ1bmN0aW9uIHNvIHdlIGNhbiBhc3N1bWUgZWxtcyBhcmUgRE9NIG5vZGVzLlxuICBmdW5jdGlvbiBoeWRyYXRlIChlbG0sIHZub2Rl
118LCBpbnNlcnRlZFZub2RlUXVldWUsIGluVlByZSkge1xuICAgIHZhciBpO1xuICAgIHZhciB0YWcgPSB2bm9kZS50YWc7XG4gICAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICAgIHZhciBjaGlsZHJlbiA9IHZub2RlLmNoaWxkcmVuO1xuICAgIGluVlByZSA9IGluVlByZSB8fCAoZGF0YSAmJiBkYXRhLnByZSk7XG4gICAgdm5vZGUuZWxtID0gZWxtO1xuXG4gICAgaWYgKGlzVHJ1ZSh2bm9kZS5pc0NvbW1lbnQpICYmIGlzRGVmKHZub2RlLmFzeW5jRmFjdG9yeSkpIHtcbiAgICAgIHZub2RlLmlzQXN5bmNQbGFjZWhvbGRlciA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICAvLyBhc3NlcnQgbm9kZSBtYXRjaFxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoIWFzc2VydE5vZGVNYXRjaChlbG0sIHZub2RlLCBpblZQcmUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgIGlmIChpc0RlZihpID0gZGF0YS5ob29rKSAmJiBpc0RlZihpID0gaS5pbml0KSkgeyBpKHZub2RlLCB0cnVlIC8qIGh5ZHJhdGluZyAqLyk7IH1cbiAgICAgIGlmIChpc0RlZihpID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UpKSB7XG4gICAgICAgIC8vIGNoaWxkIGNvbXBvbmVudC4gaXQgc2hvdWxkIGhhdmUgaHlkcmF0ZWQgaXRzIG93biB0cmVlLlxuICAgICAgICBpbml0Q29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNEZWYodGFnKSkge1xuICAgICAgaWYgKGlzRGVmKGNoaWxkcmVuKSkge1xuICAgICAgICAvLyBlbXB0eSBlbGVtZW50LCBhbGxvdyBjbGllbnQgdG8gcGljayB1cCBhbmQgcG9wdWxhdGUgY2hpbGRyZW5cbiAgICAgICAgaWYgKCFlbG0uaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgICAgICAgY3JlYXRlQ2hpbGRyZW4odm5vZGUsIGNoaWxkcmVuLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHYtaHRtbCBhbmQgZG9tUHJvcHM6IGlubmVySFRNTFxuICAgICAgICAgIGlmIChpc0RlZihpID0gZGF0YSkgJiYgaXNEZWYoaSA9IGkuZG9tUHJvcHMpICYmIGlzRGVmKGkgPSBpLmlubmVySFRNTCkpIHtcbiAgICAgICAgICAgIGlmIChpICE9PSBlbG0uaW5uZXJIVE1MKSB7XG4gICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgICAgICFoeWRyYXRpb25CYWlsZWRcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgaHlkcmF0aW9uQmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BhcmVudDogJywgZWxtKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ3NlcnZlciBpbm5lckhUTUw6ICcsIGkpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignY2xpZW50IGlubmVySFRNTDogJywgZWxtLmlubmVySFRNTCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGl0ZXJhdGUgYW5kIGNvbXBhcmUgY2hpbGRyZW4gbGlzdHNcbiAgICAgICAgICAgIHZhciBjaGlsZHJlbk1hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBjaGlsZE5vZGUgPSBlbG0uZmlyc3RDaGlsZDtcbiAgICAgICAgICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IGNoaWxkcmVuLmxlbmd0aDsgaSQxKyspIHtcbiAgICAgICAgICAgICAgaWYgKCFjaGlsZE5vZGUgfHwgIWh5ZHJhdGUoY2hpbGROb2RlLCBjaGlsZHJlbltpJDFdLCBpbnNlcnRlZFZub2RlUXVldWUsIGluVlByZSkpIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbk1hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjaGlsZE5vZGUgPSBjaGlsZE5vZGUubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiBjaGlsZE5vZGUgaXMgbm90IG51bGwsIGl0IG1lYW5zIHRoZSBhY3R1YWwgY2hpbGROb2RlcyBsaXN0IGlzXG4gICAgICAgICAgICAvLyBsb25nZXIgdGhhbiB0aGUgdmlydHVhbCBjaGlsZHJlbiBsaXN0LlxuICAgICAgICAgICAgaWYgKCFjaGlsZHJlbk1hdGNoIHx8IGNoaWxkTm9kZSkge1xuICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgICAgICAhaHlkcmF0aW9uQmFpbGVkXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGh5ZHJhdGlvbkJhaWxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdQYXJlbnQ6ICcsIGVsbSk7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdNaXNtYXRjaGluZyBjaGlsZE5vZGVzIHZzLiBWTm9kZXM6ICcsIGVsbS5jaGlsZE5vZGVzLCBjaGlsZHJlbik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgICAgdmFyIGZ1bGxJbnZva2UgPSBmYWxzZTtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIGRhdGEpIHtcbiAgICAgICAgICBpZiAoIWlzUmVuZGVyZWRNb2R1bGUoa2V5KSkge1xuICAgICAgICAgICAgZnVsbEludm9rZSA9IHRydWU7XG4gICAgICAgICAgICBpbnZva2VDcmVhdGVIb29rcyh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghZnVsbEludm9rZSAmJiBkYXRhWydjbGFzcyddKSB7XG4gICAgICAgICAgLy8gZW5zdXJlIGNvbGxlY3RpbmcgZGVwcyBmb3IgZGVlcCBjbGFzcyBiaW5kaW5ncyBmb3IgZnV0dXJlIHVwZGF0ZXNcbiAgICAgICAgICB0cmF2ZXJzZShkYXRhWydjbGFzcyddKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZWxtLmRhdGEgIT09IHZub2RlLnRleHQpIHtcbiAgICAgIGVsbS5kYXRhID0gdm5vZGUudGV4dDtcbiAgICB9XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGZ1bmN0aW9uIGFzc2VydE5vZGVNYXRjaCAobm9kZSwgdm5vZGUsIGluVlByZSkge1xuICAgIGlmIChpc0RlZih2bm9kZS50YWcpKSB7XG4gICAgICByZXR1cm4gdm5vZGUudGFnLmluZGV4T2YoJ3Z1ZS1jb21wb25lbnQnKSA9PT0gMCB8fCAoXG4gICAgICAgIC
118Fpc1Vua25vd25FbGVtZW50JCQxKHZub2RlLCBpblZQcmUpICYmXG4gICAgICAgIHZub2RlLnRhZy50b0xvd2VyQ2FzZSgpID09PSAobm9kZS50YWdOYW1lICYmIG5vZGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpKVxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbm9kZS5ub2RlVHlwZSA9PT0gKHZub2RlLmlzQ29tbWVudCA/IDggOiAzKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiBwYXRjaCAob2xkVm5vZGUsIHZub2RlLCBoeWRyYXRpbmcsIHJlbW92ZU9ubHkpIHtcbiAgICBpZiAoaXNVbmRlZih2bm9kZSkpIHtcbiAgICAgIGlmIChpc0RlZihvbGRWbm9kZSkpIHsgaW52b2tlRGVzdHJveUhvb2sob2xkVm5vZGUpOyB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB2YXIgaXNJbml0aWFsUGF0Y2ggPSBmYWxzZTtcbiAgICB2YXIgaW5zZXJ0ZWRWbm9kZVF1ZXVlID0gW107XG5cbiAgICBpZiAoaXNVbmRlZihvbGRWbm9kZSkpIHtcbiAgICAgIC8vIGVtcHR5IG1vdW50IChsaWtlbHkgYXMgY29tcG9uZW50KSwgY3JlYXRlIG5ldyByb290IGVsZW1lbnRcbiAgICAgIGlzSW5pdGlhbFBhdGNoID0gdHJ1ZTtcbiAgICAgIGNyZWF0ZUVsbSh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGlzUmVhbEVsZW1lbnQgPSBpc0RlZihvbGRWbm9kZS5ub2RlVHlwZSk7XG4gICAgICBpZiAoIWlzUmVhbEVsZW1lbnQgJiYgc2FtZVZub2RlKG9sZFZub2RlLCB2bm9kZSkpIHtcbiAgICAgICAgLy8gcGF0Y2ggZXhpc3Rpbmcgcm9vdCBub2RlXG4gICAgICAgIHBhdGNoVm5vZGUob2xkVm5vZGUsIHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIG51bGwsIG51bGwsIHJlbW92ZU9ubHkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzUmVhbEVsZW1lbnQpIHtcbiAgICAgICAgICAvLyBtb3VudGluZyB0byBhIHJlYWwgZWxlbWVudFxuICAgICAgICAgIC8vIGNoZWNrIGlmIHRoaXMgaXMgc2VydmVyLXJlbmRlcmVkIGNvbnRlbnQgYW5kIGlmIHdlIGNhbiBwZXJmb3JtXG4gICAgICAgICAgLy8gYSBzdWNjZXNzZnVsIGh5ZHJhdGlvbi5cbiAgICAgICAgICBpZiAob2xkVm5vZGUubm9kZVR5cGUgPT09IDEgJiYgb2xkVm5vZGUuaGFzQXR0cmlidXRlKFNTUl9BVFRSKSkge1xuICAgICAgICAgICAgb2xkVm5vZGUucmVtb3ZlQXR0cmlidXRlKFNTUl9BVFRSKTtcbiAgICAgICAgICAgIGh5ZHJhdGluZyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc1RydWUoaHlkcmF0aW5nKSkge1xuICAgICAgICAgICAgaWYgKGh5ZHJhdGUob2xkVm5vZGUsIHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpKSB7XG4gICAgICAgICAgICAgIGludm9rZUluc2VydEhvb2sodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgIHJldHVybiBvbGRWbm9kZVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAgICAgJ1RoZSBjbGllbnQtc2lkZSByZW5kZXJlZCB2aXJ0dWFsIERPTSB0cmVlIGlzIG5vdCBtYXRjaGluZyAnICtcbiAgICAgICAgICAgICAgICAnc2VydmVyLXJlbmRlcmVkIGNvbnRlbnQuIFRoaXMgaXMgbGlrZWx5IGNhdXNlZCBieSBpbmNvcnJlY3QgJyArXG4gICAgICAgICAgICAgICAgJ0hUTUwgbWFya3VwLCBmb3IgZXhhbXBsZSBuZXN0aW5nIGJsb2NrLWxldmVsIGVsZW1lbnRzIGluc2lkZSAnICtcbiAgICAgICAgICAgICAgICAnPHA+LCBvciBtaXNzaW5nIDx0Ym9keT4uIEJhaWxpbmcgaHlkcmF0aW9uIGFuZCBwZXJmb3JtaW5nICcgK1xuICAgICAgICAgICAgICAgICdmdWxsIGNsaWVudC1zaWRlIHJlbmRlci4nXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGVpdGhlciBub3Qgc2VydmVyLXJlbmRlcmVkLCBvciBoeWRyYXRpb24gZmFpbGVkLlxuICAgICAgICAgIC8vIGNyZWF0ZSBhbiBlbXB0eSBub2RlIGFuZCByZXBsYWNlIGl0XG4gICAgICAgICAgb2xkVm5vZGUgPSBlbXB0eU5vZGVBdChvbGRWbm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZXBsYWNpbmcgZXhpc3RpbmcgZWxlbWVudFxuICAgICAgICB2Y
118XIgb2xkRWxtID0gb2xkVm5vZGUuZWxtO1xuICAgICAgICB2YXIgcGFyZW50RWxtID0gbm9kZU9wcy5wYXJlbnROb2RlKG9sZEVsbSk7XG5cbiAgICAgICAgLy8gY3JlYXRlIG5ldyBub2RlXG4gICAgICAgIGNyZWF0ZUVsbShcbiAgICAgICAgICB2bm9kZSxcbiAgICAgICAgICBpbnNlcnRlZFZub2RlUXVldWUsXG4gICAgICAgICAgLy8gZXh0cmVtZWx5IHJhcmUgZWRnZSBjYXNlOiBkbyBub3QgaW5zZXJ0IGlmIG9sZCBlbGVtZW50IGlzIGluIGFcbiAgICAgICAgICAvLyBsZWF2aW5nIHRyYW5zaXRpb24uIE9ubHkgaGFwcGVucyB3aGVuIGNvbWJpbmluZyB0cmFuc2l0aW9uICtcbiAgICAgICAgICAvLyBrZWVwLWFsaXZlICsgSE9Dcy4gKCM0NTkwKVxuICAgICAgICAgIG9sZEVsbS5fbGVhdmVDYiA/IG51bGwgOiBwYXJlbnRFbG0sXG4gICAgICAgICAgbm9kZU9wcy5uZXh0U2libGluZyhvbGRFbG0pXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gdXBkYXRlIHBhcmVudCBwbGFjZWhvbGRlciBub2RlIGVsZW1lbnQsIHJlY3Vyc2l2ZWx5XG4gICAgICAgIGlmIChpc0RlZih2bm9kZS5wYXJlbnQpKSB7XG4gICAgICAgICAgdmFyIGFuY2VzdG9yID0gdm5vZGUucGFyZW50O1xuICAgICAgICAgIHZhciBwYXRjaGFibGUgPSBpc1BhdGNoYWJsZSh2bm9kZSk7XG4gICAgICAgICAgd2hpbGUgKGFuY2VzdG9yKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNicy5kZXN0cm95Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgIGNicy5kZXN0cm95W2ldKGFuY2VzdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFuY2VzdG9yLmVsbSA9IHZub2RlLmVsbTtcbiAgICAgICAgICAgIGlmIChwYXRjaGFibGUpIHtcbiAgICAgICAgICAgICAgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgY2JzLmNyZWF0ZS5sZW5ndGg7ICsraSQxKSB7XG4gICAgICAgICAgICAgICAgY2JzLmNyZWF0ZVtpJDFdKGVtcHR5Tm9kZSwgYW5jZXN0b3IpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vICM2NTEzXG4gICAgICAgICAgICAgIC8vIGludm9rZSBpbnNlcnQgaG9va3MgdGhhdCBtYXkgaGF2ZSBiZWVuIG1lcmdlZCBieSBjcmVhdGUgaG9va3MuXG4gICAgICAgICAgICAgIC8vIGUuZy4gZm9yIGRpcmVjdGl2ZXMgdGhhdCB1c2VzIHRoZSBcImluc2VydGVkXCIgaG9vay5cbiAgICAgICAgICAgICAgdmFyIGluc2VydCA9IGFuY2VzdG9yLmRhdGEuaG9vay5pbnNlcnQ7XG4gICAgICAgICAgICAgIGlmIChpbnNlcnQubWVyZ2VkKSB7XG4gICAgICAgICAgICAgICAgLy8gc3RhcnQgYXQgaW5kZXggMSB0byBhdm9pZCByZS1pbnZva2luZyBjb21wb25lbnQgbW91bnRlZCBob29rXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSQyID0gMTsgaSQyIDwgaW5zZXJ0LmZucy5sZW5ndGg7IGkkMisrKSB7XG4gICAgICAgICAgICAgICAgICBpbnNlcnQuZm5zW2kkMl0oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlZ2lzdGVyUmVmKGFuY2VzdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRlc3Ryb3kgb2xkIG5vZGVcbiAgICAgICAgaWYgKGlzRGVmKHBhcmVudEVsbSkpIHtcbiAgICAgICAgICByZW1vdmVWbm9kZXMoW29sZFZub2RlXSwgMCwgMCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEZWYob2xkVm5vZGUudGFnKSkge1xuICAgICAgICAgIGludm9rZURlc3Ryb3lIb29rKG9sZFZub2RlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGludm9rZUluc2VydEhvb2sodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgaXNJbml0aWFsUGF0Y2gpO1xuICAgIHJldHVybiB2bm9kZS5lbG1cbiAgfVxufVxuXG4vKiAgKi9cblxudmFyIGRpcmVjdGl2ZXMgPSB7XG4gIGNyZWF0ZTogdXBkYXRlRGlyZWN0aXZlcyxcbiAgdXBkYXRlOiB1cGRhdGVEaXJlY3RpdmVzLFxuICBkZXN0cm95OiBmdW5jdGlvbiB1bmJpbmREaXJlY3RpdmVzICh2bm9kZSkge1xuICAgIHVwZGF0ZURpcmVjdGl2ZXModm5vZGUsIGVtcHR5Tm9kZSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHVwZGF0ZURpcmVjdGl2ZXMgKG9sZFZub2RlLCB2bm9kZSkge1xuICBpZiAob2xkVm5vZGUuZGF0YS5kaXJlY3RpdmVzIHx8IHZub2RlLmRhdGEuZGlyZWN0aXZlcykge1xuICAgIF91cGRhdGUob2xkVm5vZGUsIHZub2RlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfdXBkYXRlIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgdmFyIGlzQ3JlYXRlID0gb2xkVm5vZGUgPT09IGVtcHR5Tm9kZTtcbiAgdmFyIGlzRGVzdHJveSA9IHZub2RlID09PSBlbXB0eU5vZGU7XG4gIHZhciBvbGREaXJzID0gbm9ybWFsaXplRGlyZWN0aXZlcyQxKG9sZFZub2RlLmRhdGEuZGlyZWN0aXZlcywgb2xkVm5vZGUuY29udGV4dCk7XG4gIHZhciBuZXdEaXJzID0gbm9ybWFsaXplRGlyZWN0aXZlcyQxKHZub2RlLmRhdGEuZGlyZWN0aXZlcywgdm5vZGUuY29udGV4dCk7XG5cbiAgdmFyIGRpcnNXaXRoSW5zZXJ0ID0gW107XG4gIHZhciBkaXJzV2l0aFBvc3RwYXRjaCA9IFtdO1xuXG4gIHZhciBrZXksIG9sZERpciwgZGlyO1xuICBmb3IgKGtleSBpbiBuZXdEaXJzKSB7XG4gICAgb2xkRGlyID0gb2xkRGlyc1trZXldO1xuICAgIGRpciA9IG5ld0RpcnNba2V5XTtcbiAgICBpZiAoIW9sZERpcikge1xuICAgICAgLy8gbmV3IGRpcmVjdGl2ZSwgYmluZFxuICAgICAgY2FsbEhvb2skMShkaXIsICdiaW5kJywgdm5vZGUsIG9sZFZub2RlKTtcbiAgICAgIGlmIChkaXIuZGVmICYmIGRpci5kZWYuaW5zZXJ0ZWQpIHtcbiAgICAgICAgZGlyc1dpdGhJbnNlcnQucHVzaChkaXIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBleGlzdGluZyBkaXJlY3RpdmUsIHVwZGF0ZVxuICAgICAgZGlyLm9sZFZhbHVlID0gb2xkRGlyLnZhbHVlO1xuICAgICAgZGlyLm9sZEFyZyA9IG9sZERpci5hcmc7XG4gICAgICBjYWxsSG9vayQxKGRpciwgJ3VwZGF0ZScsIHZub2Rl
118LCBvbGRWbm9kZSk7XG4gICAgICBpZiAoZGlyLmRlZiAmJiBkaXIuZGVmLmNvbXBvbmVudFVwZGF0ZWQpIHtcbiAgICAgICAgZGlyc1dpdGhQb3N0cGF0Y2gucHVzaChkaXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChkaXJzV2l0aEluc2VydC5sZW5ndGgpIHtcbiAgICB2YXIgY2FsbEluc2VydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlyc1dpdGhJbnNlcnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY2FsbEhvb2skMShkaXJzV2l0aEluc2VydFtpXSwgJ2luc2VydGVkJywgdm5vZGUsIG9sZFZub2RlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChpc0NyZWF0ZSkge1xuICAgICAgbWVyZ2VWTm9kZUhvb2sodm5vZGUsICdpbnNlcnQnLCBjYWxsSW5zZXJ0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbEluc2VydCgpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChkaXJzV2l0aFBvc3RwYXRjaC5sZW5ndGgpIHtcbiAgICBtZXJnZVZOb2RlSG9vayh2bm9kZSwgJ3Bvc3RwYXRjaCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlyc1dpdGhQb3N0cGF0Y2gubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY2FsbEhvb2skMShkaXJzV2l0aFBvc3RwYXRjaFtpXSwgJ2NvbXBvbmVudFVwZGF0ZWQnLCB2bm9kZSwgb2xkVm5vZGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKCFpc0NyZWF0ZSkge1xuICAgIGZvciAoa2V5IGluIG9sZERpcnMpIHtcbiAgICAgIGlmICghbmV3RGlyc1trZXldKSB7XG4gICAgICAgIC8vIG5vIGxvbmdlciBwcmVzZW50LCB1bmJpbmRcbiAgICAgICAgY2FsbEhvb2skMShvbGREaXJzW2tleV0sICd1bmJpbmQnLCBvbGRWbm9kZSwgb2xkVm5vZGUsIGlzRGVzdHJveSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBlbXB0eU1vZGlmaWVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZURpcmVjdGl2ZXMkMSAoXG4gIGRpcnMsXG4gIHZtXG4pIHtcbiAgdmFyIHJlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGlmICghZGlycykge1xuICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgIHJldHVybiByZXNcbiAgfVxuICB2YXIgaSwgZGlyO1xuICBmb3IgKGkgPSAwOyBpIDwgZGlycy5sZW5ndGg7IGkrKykge1xuICAgIGRpciA9IGRpcnNbaV07XG4gICAgaWYgKCFkaXIubW9kaWZpZXJzKSB7XG4gICAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICAgIGRpci5tb2RpZmllcnMgPSBlbXB0eU1vZGlmaWVycztcbiAgICB9XG4gICAgcmVzW2dldFJhd0Rpck5hbWUoZGlyKV0gPSBkaXI7XG4gICAgZGlyLmRlZiA9IHJlc29sdmVBc3NldCh2bS4kb3B0aW9ucywgJ2RpcmVjdGl2ZXMnLCBkaXIubmFtZSwgdHJ1ZSk7XG4gIH1cbiAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gZ2V0UmF3RGlyTmFtZSAoZGlyKSB7XG4gIHJldHVybiBkaXIucmF3TmFtZSB8fCAoKGRpci5uYW1lKSArIFwiLlwiICsgKE9iamVjdC5rZXlzKGRpci5tb2RpZmllcnMgfHwge30pLmpvaW4oJy4nKSkpXG59XG5cbmZ1bmN0aW9uIGNhbGxIb29rJDEgKGRpciwgaG9vaywgdm5vZGUsIG9sZFZub2RlLCBpc0Rlc3Ryb3kpIHtcbiAgdmFyIGZuID0gZGlyLmRlZiAmJiBkaXIuZGVmW2hvb2tdO1xuICBpZiAoZm4pIHtcbiAgICB0cnkge1xuICAgICAgZm4odm5vZGUuZWxtLCBkaXIsIHZub2RlLCBvbGRWbm9kZSwgaXNEZXN0cm95KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBoYW5kbGVFcnJvcihlLCB2bm9kZS5jb250ZXh0LCAoXCJkaXJlY3RpdmUgXCIgKyAoZGlyLm5hbWUpICsgXCIgXCIgKyBob29rICsgXCIgaG9va1wiKSk7XG4gICAgfVxuICB9XG59XG5cbnZhciBiYXNlTW9kdWxlcyA9IFtcbiAgcmVmLFxuICBkaXJlY3RpdmVzXG5dO1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gdXBkYXRlQXR0cnMgKG9sZFZub2RlLCB2bm9kZSkge1xuICB2YXIgb3B0cyA9IHZub2RlLmNvbXBvbmVudE9wdGlvbnM7XG4gIGlmIChpc0RlZihvcHRzKSAmJiBvcHRzLkN0b3Iub3B0aW9ucy5pbmhlcml0QXR0cnMgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGlzVW5kZWYob2xkVm5vZGUuZGF0YS5hdHRycykgJiYgaXNVbmRlZih2bm9kZS5kYXRhLmF0dHJzKSkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciBrZXksIGN1ciwgb2xkO1xuICB2YXIgZWxtID0gdm5vZGUuZWxtO1xuICB2YXIgb2xkQXR0cnMgPSBvbGRWbm9kZS5kYXRhLmF0dHJzIHx8IHt9O1xuICB2YXIgYXR0cnMgPSB2bm9kZS5kYXRhLmF0dHJzIHx8IHt9O1xuICAvLyBjbG9uZSBvYnNlcnZlZCBvYmplY3RzLCBhcyB0aGUgdXNlciBwcm9iYWJseSB3YW50cyB0byBtdXRhdGUgaXRcbiAgaWYgKGlzRGVmKGF0dHJzLl9fb2JfXykpIHtcbiAgICBhdHRycyA9IHZub2RlLmRhdGEuYXR0cnMgPSBleHRlbmQoe30sIGF0dHJzKTtcbiAgfVxuXG4gIGZvciAoa2V5IGluIGF0dHJzKSB7XG4gICAgY3VyID0gYXR0cnNba2V5XTtcbiAgICBvbGQgPSBvbGRBdHRyc1trZXldO1xuICAgIGlmIChvbGQgIT09IGN1cikge1xuICAgICAgc2V0QXR0cihlbG0sIGtleSwgY3VyLCB2bm9kZS5kYXRhLnByZSk7XG4gICAgfVxuICB9XG4gIC8vICM0MzkxOiBpbiBJRTksIHNldHRpbmcgdHlwZSBjYW4gcmVzZXQgdmFsdWUgZm9yIGlucHV0W3R5cGU9cmFkaW9dXG4gIC8vICM2NjY2OiBJRS9FZGdlIGZvcmNlcyBwcm9ncmVzcyB2YWx1ZSBkb3duIHRvIDEgYmVmb3JlIHNldHRpbmcgYSBtYXhcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICgoaXNJRSB8fCBpc0VkZ2UpICYmIGF0dHJzLnZhbHVlICE9PSBvbGRBdHRycy52YWx1ZSkge1xuICAgIHNldEF0dHIoZWxtLCAndmFsdWUnLCBhdHRycy52YWx1ZSk7XG4gIH1cbiAgZm9yIChrZXkgaW4gb2xkQXR0cnMpIHtcbiAgICBpZiAoaXNVbmRlZihhdHRyc1trZXldKSkge1xuICAgICAgaWYgKGlzWGxpbmsoa2V5KSkge1xuICAgICAgICBlbG0ucmVtb3ZlQXR0cmlidXRlTlMoeGxpbmtOUywgZ2V0WGxpbmtQcm9wKGtleSkpO1xuICAgICAgfSBlbHNlIGlmICghaXNFbnVtZXJhdGVkQXR0cihrZXkpKSB7XG4gICAgICAgIGVsbS5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgICAgIH1cbiAgICB9XG4gI
118H1cbn1cblxuZnVuY3Rpb24gc2V0QXR0ciAoZWwsIGtleSwgdmFsdWUsIGlzSW5QcmUpIHtcbiAgaWYgKGlzSW5QcmUgfHwgZWwudGFnTmFtZS5pbmRleE9mKCctJykgPiAtMSkge1xuICAgIGJhc2VTZXRBdHRyKGVsLCBrZXksIHZhbHVlKTtcbiAgfSBlbHNlIGlmIChpc0Jvb2xlYW5BdHRyKGtleSkpIHtcbiAgICAvLyBzZXQgYXR0cmlidXRlIGZvciBibGFuayB2YWx1ZVxuICAgIC8vIGUuZy4gPG9wdGlvbiBkaXNhYmxlZD5TZWxlY3Qgb25lPC9vcHRpb24+XG4gICAgaWYgKGlzRmFsc3lBdHRyVmFsdWUodmFsdWUpKSB7XG4gICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGVjaG5pY2FsbHkgYWxsb3dmdWxsc2NyZWVuIGlzIGEgYm9vbGVhbiBhdHRyaWJ1dGUgZm9yIDxpZnJhbWU+LFxuICAgICAgLy8gYnV0IEZsYXNoIGV4cGVjdHMgYSB2YWx1ZSBvZiBcInRydWVcIiB3aGVuIHVzZWQgb24gPGVtYmVkPiB0YWdcbiAgICAgIHZhbHVlID0ga2V5ID09PSAnYWxsb3dmdWxsc2NyZWVuJyAmJiBlbC50YWdOYW1lID09PSAnRU1CRUQnXG4gICAgICAgID8gJ3RydWUnXG4gICAgICAgIDoga2V5O1xuICAgICAgZWwuc2V0QXR0cmlidXRlKGtleSwgdmFsdWUpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc0VudW1lcmF0ZWRBdHRyKGtleSkpIHtcbiAgICBlbC5zZXRBdHRyaWJ1dGUoa2V5LCBjb252ZXJ0RW51bWVyYXRlZFZhbHVlKGtleSwgdmFsdWUpKTtcbiAgfSBlbHNlIGlmIChpc1hsaW5rKGtleSkpIHtcbiAgICBpZiAoaXNGYWxzeUF0dHJWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZU5TKHhsaW5rTlMsIGdldFhsaW5rUHJvcChrZXkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwuc2V0QXR0cmlidXRlTlMoeGxpbmtOUywga2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGJhc2VTZXRBdHRyKGVsLCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBiYXNlU2V0QXR0ciAoZWwsIGtleSwgdmFsdWUpIHtcbiAgaWYgKGlzRmFsc3lBdHRyVmFsdWUodmFsdWUpKSB7XG4gICAgZWwucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gIzcxMzg6IElFMTAgJiAxMSBmaXJlcyBpbnB1dCBldmVudCB3aGVuIHNldHRpbmcgcGxhY2Vob2xkZXIgb25cbiAgICAvLyA8dGV4dGFyZWE+Li4uIGJsb2NrIHRoZSBmaXJzdCBpbnB1dCBldmVudCBhbmQgcmVtb3ZlIHRoZSBibG9ja2VyXG4gICAgLy8gaW1tZWRpYXRlbHkuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKFxuICAgICAgaXNJRSAmJiAhaXNJRTkgJiZcbiAgICAgIGVsLnRhZ05hbWUgPT09ICdURVhUQVJFQScgJiZcbiAgICAgIGtleSA9PT0gJ3BsYWNlaG9sZG
118VyJyAmJiB2YWx1ZSAhPT0gJycgJiYgIWVsLl9faWVwaFxuICAgICkge1xuICAgICAgdmFyIGJsb2NrZXIgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCdpbnB1dCcsIGJsb2NrZXIpO1xuICAgICAgfTtcbiAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgYmxvY2tlcik7XG4gICAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICAgIGVsLl9faWVwaCA9IHRydWU7IC8qIElFIHBsYWNlaG9sZGVyIHBhdGNoZWQgKi9cbiAgICB9XG4gICAgZWwuc2V0QXR0cmlidXRlKGtleSwgdmFsdWUpO1xuICB9XG59XG5cbnZhciBhdHRycyA9IHtcbiAgY3JlYXRlOiB1cGRhdGVBdHRycyxcbiAgdXBkYXRlOiB1cGRhdGVBdHRyc1xufTtcblxuLyogICovXG5cbmZ1bmN0aW9uIHVwZGF0ZUNsYXNzIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgdmFyIGVsID0gdm5vZGUuZWxtO1xuICB2YXIgZGF0YSA9IHZub2RlLmRhdGE7XG4gIHZhciBvbGREYXRhID0gb2xkVm5vZGUuZGF0YTtcbiAgaWYgKFxuICAgIGlzVW5kZWYoZGF0YS5zdGF0aWNDbGFzcykgJiZcbiAgICBpc1VuZGVmKGRhdGEuY2xhc3MpICYmIChcbiAgICAgIGlzVW5kZWYob2xkRGF0YSkgfHwgKFxuICAgICAgICBpc1VuZGVmKG9sZERhdGEuc3RhdGljQ2xhc3MpICYmXG4gICAgICAgIGlzVW5kZWYob2xkRGF0YS5jbGFzcylcbiAgICAgIClcbiAgICApXG4gICkge1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIGNscyA9IGdlbkNsYXNzRm9yVm5vZGUodm5vZGUpO1xuXG4gIC8vIGhhbmRsZSB0cmFuc2l0aW9uIGNsYXNzZXNcbiAgdmFyIHRyYW5zaXRpb25DbGFzcyA9IGVsLl90cmFuc2l0aW9uQ2xhc3NlcztcbiAgaWYgKGlzRGVmKHRyYW5zaXRpb25DbGFzcykpIHtcbiAgICBjbHMgPSBjb25jYXQoY2xzLCBzdHJpbmdpZnlDbGFzcyh0cmFuc2l0aW9uQ2xhc3MpKTtcbiAgfVxuXG4gIC8vIHNldCB0aGUgY2xhc3NcbiAgaWYgKGNscyAhPT0gZWwuX3ByZXZDbGFzcykge1xuICAgIGVsLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCBjbHMpO1xuICAgIGVsLl9wcmV2Q2xhc3MgPSBjbHM7XG4gIH1cbn1cblxudmFyIGtsYXNzID0ge1xuICBjcmVhdGU6IHVwZGF0ZUNsYXNzLFxuICB1cGRhdGU6IHVwZGF0ZUNsYXNzXG59O1xuXG4vKiAgKi9cblxudmFyIHZhbGlkRGl2aXNpb25DaGFyUkUgPSAvW1xcdykuK1xcLV8kXFxdXS87XG5cbmZ1bmN0aW9uIHBhcnNlRmlsdGVycyAoZXhwKSB7XG4gIHZhciBpblNpbmdsZSA9IGZhbHNlO1xuICB2YXIgaW5Eb3VibGUgPSBmYWxzZTtcbiAgdmFyIGluVGVtcGxhdGVTdHJpbmcgPSBmYWxzZTtcbiAgdmFyIGluUmVnZXggPSBmYWxzZTtcbiAgdmFyIGN1cmx5ID0gMDtcbiAgdmFyIHNxdWFyZSA9IDA7XG4gIHZhciBwYXJlbiA9IDA7XG4gIHZhciBsYXN0RmlsdGVySW5kZXggPSAwO1xuICB2YXIgYywgcHJldiwgaSwgZXhwcmVzc2lvbiwgZmlsdGVycztcblxuICBmb3IgKGkgPSAwOyBpIDwgZXhwLmxlbmd0aDsgaSsrKSB7XG4gICAgcHJldiA9IGM7XG4gICAgYyA9IGV4cC5jaGFyQ29kZUF0KGkpO1xuICAgIGlmIChpblNpbmdsZSkge1xuICAgICAgaWYgKGMgPT09IDB4MjcgJiYgcHJldiAhPT0gMHg1QykgeyBpblNpbmdsZSA9IGZhbHNlOyB9XG4gICAgfSBlbHNlIGlmIChpbkRvdWJsZSkge1xuICAgICAgaWYgKGMgPT09IDB4MjIgJiYgcHJldiAhPT0gMHg1QykgeyBpbkRvdWJsZSA9IGZhbHNlOyB9XG4gICAgfSBlbHNlIGlmIChpblRlbXBsYXRlU3RyaW5nKSB7XG4gICAgICBpZiAoYyA9PT0gMHg2MCAmJiBwcmV2ICE9PSAweDVDKSB7IGluVGVtcGxhdGVTdHJpbmcgPSBmYWxzZTsgfVxuICAgIH0gZWxzZSBpZiAoaW5SZWdleCkge1xuICAgICAgaWYgKGMgPT09IDB4MmYgJiYgcHJldiAhPT0gMHg1QykgeyBpblJlZ2V4ID0gZmFsc2U7IH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgYyA9PT0gMHg3QyAmJiAvLyBwaXBlXG4gICAgICBleHAuY2hhckNvZGVBdChpICsgMSkgIT09IDB4N0MgJiZcbiAgICAgIGV4cC5jaGFyQ29kZUF0KGkgLSAxKSAhPT0gMHg3QyAmJlxuICAgICAgIWN1cmx5ICYmICFzcXVhcmUgJiYgIXBhcmVuXG4gICAgKSB7XG4gICAgICBpZiAoZXhwcmVzc2lvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIGZpcnN0IGZpbHRlciwgZW5kIG9mIGV4cHJlc3Npb25cbiAgICAgICAgbGFzdEZpbHRlckluZGV4ID0gaSArIDE7XG4gICAgICAgIGV4cHJlc3Npb24gPSBleHAuc2xpY2UoMCwgaSkudHJpbSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHVzaEZpbHRlcigpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzd2l0Y2ggKGMpIHtcbiAgICAgICAgY2FzZSAweDIyOiBpbkRvdWJsZSA9IHRydWU7IGJyZWFrICAgICAgICAgLy8gXCJcbiAgICAgICAgY2FzZSAweDI3OiBpblNpbmdsZSA9IHRydWU7IGJyZWFrICAgICAgICAgLy8gJ1xuICAgICAgICBjYXNlIDB4NjA6IGluVGVtcGxhdGVTdHJpbmcgPSB0cnVlOyBicmVhayAvLyBgXG4gICAgICAgIGNhc2UgMHgyODogcGFyZW4rKzsgYnJlYWsgICAgICAgICAgICAgICAgIC8vIChcbiAgICAgICAgY2FzZSAweDI5OiBwYXJlbi0tOyBicmVhayAgICAgICAgICAgICAgICAgLy8gKVxuICAgICAgICBjYXNlIDB4NUI6IHNxdWFyZSsrOyBicmVhayAgICAgICAgICAgICAgICAvLyBbXG4gICAgICAgIGNhc2UgMHg1RDogc3F1YXJlLS07IGJyZWFrICAgICAgICAgICAgICAgIC8vIF1cbiAgICAgICAgY2FzZSAweDdCOiBjdXJseSsrOyBicmVhayAgICAgICAgICAgICAgICAgLy8ge1xuICAgICAgICBjYXNlIDB4N0Q6IGN1cmx5LS07IGJyZWFrICAgICAgICAgICAgICAgICAvLyB9XG4gICAgICB9XG4gICAgICBpZiAoYyA9PT0gMHgyZikgeyAvLyAvXG4gICAgICAgIHZhciBqID0gaSAtIDE7XG4gICAgICAgIHZhciBwID0gKHZvaWQgMCk7XG4gICAgICAgIC8vIGZpbmQgZmlyc3Qgbm9uLXdoaXRlc3BhY2UgcHJldiBjaGFyXG4gICAgICAgIGZvciAoOyBqID49IDA7IGotLSkge1xuICAgICAgICAgIHAgPSBleHAuY2hhckF0KGopO1xuICAgICAgICAgIGlmIChwICE9PSAnICcpIHsgYnJlYWsgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghcCB8fCAhdmFsaWREaXZpc2lvbkNoYXJSRS50ZXN0KHApKSB7XG4gICAgICAgICAgaW5SZWdleCA9IHRydWU7XG4gICAgICAgI
118H1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZXhwcmVzc2lvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZXhwcmVzc2lvbiA9IGV4cC5zbGljZSgwLCBpKS50cmltKCk7XG4gIH0gZWxzZSBpZiAobGFzdEZpbHRlckluZGV4ICE9PSAwKSB7XG4gICAgcHVzaEZpbHRlcigpO1xuICB9XG5cbiAgZnVuY3Rpb24gcHVzaEZpbHRlciAoKSB7XG4gICAgKGZpbHRlcnMgfHwgKGZpbHRlcnMgPSBbXSkpLnB1c2goZXhwLnNsaWNlKGxhc3RGaWx0ZXJJbmRleCwgaSkudHJpbSgpKTtcbiAgICBsYXN0RmlsdGVySW5kZXggPSBpICsgMTtcbiAgfVxuXG4gIGlmIChmaWx0ZXJzKSB7XG4gICAgZm9yIChpID0gMDsgaSA8IGZpbHRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGV4cHJlc3Npb24gPSB3cmFwRmlsdGVyKGV4cHJlc3Npb24sIGZpbHRlcnNbaV0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBleHByZXNzaW9uXG59XG5cbmZ1bmN0aW9uIHdyYXBGaWx0ZXIgKGV4cCwgZmlsdGVyKSB7XG4gIHZhciBpID0gZmlsdGVyLmluZGV4T2YoJygnKTtcbiAgaWYgKGkgPCAwKSB7XG4gICAgLy8gX2Y6IHJlc29sdmVGaWx0ZXJcbiAgICByZXR1cm4gKFwiX2YoXFxcIlwiICsgZmlsdGVyICsgXCJcXFwiKShcIiArIGV4cCArIFwiKVwiKVxuICB9IGVsc2Uge1xuICAgIHZhciBuYW1lID0gZmlsdGVyLnNsaWNlKDAsIGkpO1xuICAgIHZhciBhcmdzID0gZmlsdGVyLnNsaWNlKGkgKyAxKTtcbiAgICByZXR1cm4gKFwiX2YoXFxcIlwiICsgbmFtZSArIFwiXFxcIikoXCIgKyBleHAgKyAoYXJncyAhPT0gJyknID8gJywnICsgYXJncyA6IGFyZ3MpKVxuICB9XG59XG5cbi8qICAqL1xuXG5cblxuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbmZ1bmN0aW9uIGJhc2VXYXJuIChtc2csIHJhbmdlKSB7XG4gIGNvbnNvbGUuZXJyb3IoKFwiW1Z1ZSBjb21waWxlcl06IFwiICsgbXNnKSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG5vLXVudXNlZC12YXJzICovXG5cbmZ1bmN0aW9uIHBsdWNrTW9kdWxlRnVuY3Rpb24gKFxuICBtb2R1bGVzLFxuICBrZXlcbikge1xuICByZXR1cm4gbW9kdWxlc1xuICAgID8gbW9kdWxlcy5tYXAoZnVuY3Rpb24gKG
1180pIHsgcmV0dXJuIG1ba2V5XTsgfSkuZmlsdGVyKGZ1bmN0aW9uIChfKSB7IHJldHVybiBfOyB9KVxuICAgIDogW11cbn1cblxuZnVuY3Rpb24gYWRkUHJvcCAoZWwsIG5hbWUsIHZhbHVlLCByYW5nZSwgZHluYW1pYykge1xuICAoZWwucHJvcHMgfHwgKGVsLnByb3BzID0gW10pKS5wdXNoKHJhbmdlU2V0SXRlbSh7IG5hbWU6IG5hbWUsIHZhbHVlOiB2YWx1ZSwgZHluYW1pYzogZHluYW1pYyB9LCByYW5nZSkpO1xuICBlbC5wbGFpbiA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBhZGRBdHRyIChlbCwgbmFtZSwgdmFsdWUsIHJhbmdlLCBkeW5hbWljKSB7XG4gIHZhciBhdHRycyA9IGR5bmFtaWNcbiAgICA/IChlbC5keW5hbWljQXR0cnMgfHwgKGVsLmR5bmFtaWNBdHRycyA9IFtdKSlcbiAgICA6IChlbC5hdHRycyB8fCAoZWwuYXR0cnMgPSBbXSkpO1xuICBhdHRycy5wdXNoKHJhbmdlU2V0SXRlbSh7IG5hbWU6IG5hbWUsIHZhbHVlOiB2YWx1ZSwgZHluYW1pYzogZHluYW1pYyB9LCByYW5nZSkpO1xuICBlbC5wbGFpbiA9IGZhbHNlO1xufVxuXG4vLyBhZGQgYSByYXcgYXR0ciAodXNlIHRoaXMgaW4gcHJlVHJhbnNmb3JtcylcbmZ1bmN0aW9uIGFkZFJhd0F0dHIgKGVsLCBuYW1lLCB2YWx1ZSwgcmFuZ2UpIHtcbiAgZWwuYXR0cnNNYXBbbmFtZV0gPSB2YWx1ZTtcbiAgZWwuYXR0cnNMaXN0LnB1c2gocmFuZ2VTZXRJdGVtKHsgbmFtZTogbmFtZSwgdmFsdWU6IHZhbHVlIH0sIHJhbmdlKSk7XG59XG5cbmZ1bmN0aW9uIGFkZERpcmVjdGl2ZSAoXG4gIGVsLFxuICBuYW1lLFxuICByYXdOYW1lLFxuICB2YWx1ZSxcbiAgYXJnLFxuICBpc0R5bmFtaWNBcmcsXG4gIG1vZGlmaWVycyxcbiAgcmFuZ2Vcbikge1xuICAoZWwuZGlyZWN0aXZlcyB8fCAoZWwuZGlyZWN0aXZlcyA9IFtdKSkucHVzaChyYW5nZVNldEl0ZW0oe1xuICAgIG5hbWU6IG5hbWUsXG4gICAgcmF3TmFtZTogcmF3TmFtZSxcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgYXJnOiBhcmcsXG4gICAgaXNEeW5hbWljQXJnOiBpc0R5bmFtaWNBcmcsXG4gICAgbW9kaWZpZXJzOiBtb2RpZmllcnNcbiAgfSwgcmFuZ2UpKTtcbiAgZWwucGxhaW4gPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gcHJlcGVuZE1vZGlmaWVyTWFya2VyIChzeW1ib2wsIG5hbWUsIGR5bmFtaWMpIHtcbiAgcmV0dXJuIGR5bmFtaWNcbiAgICA/IChcIl9wKFwiICsgbmFtZSArIFwiLFxcXCJcIiArIHN5bWJvbCArIFwiXFxcIilcIilcbiAgICA6IHN5bWJvbCArIG5hbWUgLy8gbWFyayB0aGUgZXZlbnQgYXMgY2FwdHVyZWRcbn1cblxuZnVuY3Rpb24gYWRkSGFuZGxlciAoXG4gIGVsLFxuICBuYW1lLFxuICB2YWx1ZSxcbiAgbW9kaWZpZXJzLFxuICBpbXBvcnRhbnQsXG4gIHdhcm4sXG4gIHJhbmdlLFxuICBkeW5hbWljXG4pIHtcbiAgbW9kaWZpZXJzID0gbW9kaWZpZXJzIHx8IGVtcHR5T2JqZWN0O1xuICAvLyB3YXJuIHByZXZlbnQgYW5kIHBhc3NpdmUgbW9kaWZpZXJcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4gJiZcbiAgICBtb2RpZmllcnMucHJldmVudCAmJiBtb2RpZmllcnMucGFzc2l2ZVxuICApIHtcbiAgICB3YXJuKFxuICAgICAgJ3Bhc3NpdmUgYW5kIHByZXZlbnQgY2FuXFwndCBiZSB1c2VkIHRvZ2V0aGVyLiAnICtcbiAgICAgICdQYXNzaXZlIGhhbmRsZXIgY2FuXFwndCBwcmV2ZW50IGRlZmF1bHQgZXZlbnQuJyxcbiAgICAgIHJhbmdlXG4gICAgKTtcbiAgfVxuXG4gIC8vIG5vcm1hbGl6ZSBjbGljay5yaWdodCBhbmQgY2xpY2subWlkZGxlIHNpbmNlIHRoZXkgZG9uJ3QgYWN0dWFsbHkgZmlyZVxuICAvLyB0aGlzIGlzIHRlY2huaWNhbGx5IGJyb3dzZXItc3BlY2lmaWMsIGJ1dCBhdCBsZWFzdCBmb3Igbm93IGJyb3dzZXJzIGFyZVxuICAvLyB0aGUgb25seSB0YXJnZXQgZW52cyB0aGF0IGhhdmUgcmlnaHQvbWlkZGxlIGNsaWNrcy5cbiAgaWYgKG1vZGlmaWVycy5yaWdodCkge1xuICAgIGlmIChkeW5hbWljKSB7XG4gICAgICBuYW1lID0gXCIoXCIgKyBuYW1lICsgXCIpPT09J2NsaWNrJz8nY29udGV4dG1lbnUnOihcIiArIG5hbWUgKyBcIilcIjtcbiAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdjbGljaycpIHtcbiAgICAgIG5hbWUgPSAnY29udGV4dG1lbnUnO1xuICAgICAgZGVsZXRlIG1vZGlmaWVycy5yaWdodDtcbiAgICB9XG4gIH0gZWxzZSBpZiAobW9kaWZpZXJzLm1pZGRsZSkge1xuICAgIGlmIChkeW5hbWljKSB7XG4gICAgICBuYW1lID0gXCIoXCIgKyBuYW1lICsgXCIpPT09J2NsaWNrJz8nbW91c2V1cCc6KFwiICsgbmFtZSArIFwiKVwiO1xuICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ2NsaWNrJykge1xuICAgICAgbmFtZSA9ICdtb3VzZXVwJztcbiAgICB9XG4gIH1cblxuICAvLyBjaGVjayBjYXB0dXJlIG1vZGlmaWVyXG4gIGlmIChtb2RpZmllcnMuY2FwdHVyZSkge1xuICAgIGRlbGV0ZSBtb2RpZmllcnMuY2FwdHVyZTtcbiAgICBuYW1lID0gcHJlcGVuZE1vZGlmaWVyTWFya2VyKCchJywgbmFtZSwgZHluYW1pYyk7XG4gIH1cbiAgaWYgKG1vZGlmaWVycy5vbmNlKSB7XG4gICAgZGVsZXRlIG1vZGlmaWVycy5vbmNlO1xuICAgIG5hbWUgPSBwcmVwZW5kTW9kaWZpZXJNYXJrZXIoJ34nLCBuYW1lLCBkeW5hbWljKTtcbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKG1vZGlmaWVycy5wYXNzaXZlKSB7XG4gICAgZGVsZXRlIG1vZGlmaWVycy5wYXNzaXZlO1xuICAgIG5hbWUgPSBwcmVwZW5kTW9kaWZpZXJNYXJrZXIoJyYnLCBuYW1lLCBkeW5hbWljKTtcbiAgfVxuXG4gIHZhciBldmVudHM7XG4gIGlmIChtb2RpZmllcnMubmF0aXZlKSB7XG4gICAgZGVsZXRlIG1vZGlmaWVycy5uYXRpdmU7XG4gICAgZXZlbnRzID0gZWwubmF0aXZlRXZlbnRzIHx8IChlbC5uYXRpdmVFdmVudHMgPSB7fSk7XG4gIH0gZWxzZSB7XG4gICAgZXZlbnRzID0gZWwuZXZlbnRzIHx8IChlbC5ldmVudHMgPSB7fSk7XG4gIH1cblxuICB2YXIgbmV3SGFuZGxlciA9IHJhbmdlU2V0SXRlbSh7IHZhbHVlOiB2YWx1ZS50cmltKCksIGR5bmFtaWM6IGR5bmFtaWMgfSwgcmFuZ2UpO1xuICBpZiAobW9kaWZpZXJzICE9PSBlbXB0eU9iamVjdCkge1xuICAgIG5ld0hhbmRsZXIubW9kaWZpZXJzID0gbW9kaWZpZXJzO1xuICB9XG5cbiAgdmFyIGhhbmRsZXJzID0gZXZlbnRzW25hbWVdO1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKEFycmF5LmlzQXJyYXkoaGFuZGxlcnMpKSB7XG4gICAgaW1wb3J0YW50ID8gaGFuZGxlcnMudW5zaGlmdChuZXdIYW5kbGVyKSA6IGhhbmRsZXJzLnB1c2gobmV3SGFuZGxlcik7XG4gIH0gZWxzZSBpZiAoaGFuZGxlcnMpIHtcbiAgICBldmVudHNbbmFtZV0gPSBpbXBvcnRhbnQgPyBbbm
118V3SGFuZGxlciwgaGFuZGxlcnNdIDogW2hhbmRsZXJzLCBuZXdIYW5kbGVyXTtcbiAgfSBlbHNlIHtcbiAgICBldmVudHNbbmFtZV0gPSBuZXdIYW5kbGVyO1xuICB9XG5cbiAgZWwucGxhaW4gPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0UmF3QmluZGluZ0F0dHIgKFxuICBlbCxcbiAgbmFtZVxuKSB7XG4gIHJldHVybiBlbC5yYXdBdHRyc01hcFsnOicgKyBuYW1lXSB8fFxuICAgIGVsLnJhd0F0dHJzTWFwWyd2LWJpbmQ6JyArIG5hbWVdIHx8XG4gICAgZWwucmF3QXR0cnNNYXBbbmFtZV1cbn1cblxuZnVuY3Rpb24gZ2V0QmluZGluZ0F0dHIgKFxuICBlbCxcbiAgbmFtZSxcbiAgZ2V0U3RhdGljXG4pIHtcbiAgdmFyIGR5bmFtaWNWYWx1ZSA9XG4gICAgZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJzonICsgbmFtZSkgfHxcbiAgICBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1iaW5kOicgKyBuYW1lKTtcbiAgaWYgKGR5bmFtaWNWYWx1ZSAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHBhcnNlRmlsdGVycyhkeW5hbWljVmFsdWUpXG4gIH0gZWxzZSBpZiAoZ2V0U3RhdGljICE9PSBmYWxzZSkge1xuICAgIHZhciBzdGF0aWNWYWx1ZSA9IGdldEFuZFJlbW92ZUF0dHIoZWwsIG5hbWUpO1xuICAgIGlmIChzdGF0aWNWYWx1ZSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoc3RhdGljVmFsdWUpXG4gICAgfVxuICB9XG59XG5cbi8vIG5vdGU6IHRoaXMgb25seSByZW1vdmVzIHRoZSBhdHRyIGZyb20gdGhlIEFycmF5IChhdHRyc0xpc3QpIHNvIHRoYXQgaXRcbi8vIGRvZXNuJ3QgZ2V0IHByb2Nlc3NlZCBieSBwcm9jZXNzQXR0cnMuXG4vLyBCeSBkZWZhdWx0IGl0IGRvZXMgTk9UIHJlbW92ZSBpdCBmcm9tIHRoZSBtYXAgKGF0dHJzTWFwKSBiZWNhdXNlIHRoZSBtYXAgaXNcbi8vIG5lZWRlZCBkdXJpbmcgY29kZWdlbi5cbmZ1bmN0aW9uIGdldEFuZFJlbW92ZUF0dHIgKFxuICBlbCxcbiAgbmFtZSxcbiAgcmVtb3ZlRnJvbU1hcFxuKSB7XG4gIHZhciB2YWw7XG4gIGlmICgodmFsID0gZWwuYXR0cnNNYXBbbmFtZV0pICE9IG51bGwpIHtcbiAgICB2YXIgbGlzdCA9IGVsLmF0dHJzTGlzdDtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGxpc3QubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBpZiAobGlzdFtpXS5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgIGxpc3Quc3BsaWNlKGksIDEpO1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAocmVtb3ZlRnJvbU1hcCkge1xuICAgIGRlbGV0ZSBlbC5hdHRyc01hcFtuYW1lXTtcbiAgfVxuICByZXR1cm4gdmFsXG59XG5cbmZ1bmN0aW9uIGdldEFuZFJlbW92ZUF0dHJCeVJlZ2V4IChcbiAgZWwsXG4gIG5hbWVcbikge1xuICB2YXIgbGlzdCA9IGVsLmF0dHJzTGlzdDtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBsaXN0Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIHZhciBhdHRyID0gbGlzdFtpXTtcbiAgICBpZiAobmFtZS50ZXN0KGF0dHIubmFtZSkpIHtcbiAgICAgIGxpc3Quc3BsaWNlKGksIDEpO1xuICAgICAgcmV0dXJuIGF0dHJcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmFuZ2VTZXRJdGVtIChcbiAgaXRlbSxcbiAgcmFuZ2Vcbikge1xuICBpZiAocmFuZ2UpIHtcbiAgICBpZiAocmFuZ2Uuc3RhcnQgIT0gbnVsbCkge1xuICAgICAgaXRlbS5zdGFydCA9IHJhbmdlLnN0YXJ0O1xuICAgIH1cbiAgICBpZiAocmFuZ2UuZW5kICE9IG51bGwpIHtcbiAgICAgIGl0ZW0uZW5kID0gcmFuZ2UuZW5kO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaXRlbVxufVxuXG4vKiAgKi9cblxuLyoqXG4gKiBDcm9zcy1wbGF0Zm9ybSBjb2RlIGdlbmVyYXRpb24gZm9yIGNvbXBvbmVudCB2LW1vZGVsXG4gKi9cbmZ1bmN0aW9uIGdlbkNvbXBvbmVudE1vZGVsIChcbiAgZWwsXG4gIHZhbHVlLFxuICBtb2RpZmllcnNcbikge1xuICB2YXIgcmVmID0gbW9kaWZpZXJzIHx8IHt9O1xuICB2YXIgbnVtYmVyID0gcmVmLm51bWJlcjtcbiAgdmFyIHRyaW0gPSByZWYudHJpbTtcblxuICB2YXIgYmFzZVZhbHVlRXhwcmVzc2lvbiA9ICckJHYnO1xuICB2YXIgdmFsdWVFeHByZXNzaW9uID0gYmFzZVZhbHVlRXhwcmVzc2lvbjtcbiAgaWYgKHRyaW0pIHtcbiAgICB2YWx1ZUV4cHJlc3Npb24gPVxuICAgICAgXCIodHlwZW9mIFwiICsgYmFzZVZhbHVlRXhwcmVzc2lvbiArIFwiID09PSAnc3RyaW5nJ1wiICtcbiAgICAgIFwiPyBcIiArIGJhc2VWYWx1ZUV4cHJlc3Npb24gKyBcIi50cmltKClcIiArXG4gICAgICBcIjogXCIgKyBiYXNlVmFsdWVFeHByZXNzaW9uICsgXCIpXCI7XG4gIH1cbiAgaWYgKG51bWJlcikge1xuICAgIHZhbHVlRXhwcmVzc2lvbiA9IFwiX24oXCIgKyB2YWx1ZUV4cHJlc3Npb24gKyBcIilcIjtcbiAgfVxuICB2YXIgYXNzaWdubWVudCA9IGdlbkFzc2lnbm1lbnRDb2RlKHZhbHVlLCB2YWx1ZUV4cHJlc3Npb24pO1xuXG4gIGVsLm1vZGVsID0ge1xuICAgIHZhbHVlOiAoXCIoXCIgKyB2YWx1ZSArIFwiKVwiKSxcbiAgICBleHByZXNzaW9uOiBKU09OLnN0cmluZ2lmeSh2YWx1ZSksXG4gICAgY2FsbGJhY2s6IChcImZ1bmN0aW9uIChcIiArIGJhc2VWYWx1ZUV4cHJlc3Npb24gKyBcIikge1wiICsgYXNzaWdubWVudCArIFwifVwiKVxuICB9O1xufVxuXG4vKipcbiAqIENyb3NzLXBsYXRmb3JtIGNvZGVnZW4gaGVscGVyIGZvciBnZW5lcmF0aW5nIHYtbW9kZWwgdmFsdWUgYXNzaWdubWVudCBjb2RlLlxuICovXG5mdW5jdGlvbiBnZW5Bc3NpZ25tZW50Q29kZSAoXG4gIHZhbHVlLFxuICBhc3NpZ25tZW50XG4pIHtcbiAgdmFyIHJlcyA9IHBhcnNlTW9kZWwodmFsdWUpO1xuICBpZiAocmVzLmtleSA9PT0gbnVsbCkge1xuICAgIHJldHVybiAodmFsdWUgKyBcIj1cIiArIGFzc2lnbm1lbnQpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIChcIiRzZXQoXCIgKyAocmVzLmV4cCkgKyBcIiwgXCIgKyAocmVzLmtleSkgKyBcIiwgXCIgKyBhc3NpZ25tZW50ICsgXCIpXCIpXG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZSBhIHYtbW9kZWwgZXhwcmVzc2lvbiBpbnRvIGEgYmFzZSBwYXRoIGFuZCBhIGZpbmFsIGtleSBzZWdtZW50LlxuICogSGFuZGxlcyBib3RoIGRvdC1wYXRoIGFuZCBwb3NzaWJsZSBzcXVhcmUgYnJhY2tldHMuXG4gKlxuICogUG9zc2libGUgY2FzZXM6XG4gKlxuICogLSB0ZXN0XG4gKiAtIHRlc3Rba2V5XVxuICogLSB0ZXN0W3Rlc3QxW2tleV1dXG4gKiAtIHRlc3RbXCJhXCJdW2tleV1cbiAqIC0geHh4LnRlc3RbYVthXS50ZXN0MVtrZXldXVxuICogLSB0ZXN0Lnh4eC5hW1wiYXNhXCJdW3Rlc3QxW2tleV1dXG4gKlxuICovXG5cbnZhciBsZW4sIHN0ciwgY2hyLCBpbmRleCQxLCBleHByZXNzaW9uUG9zLCBleHByZXNzaW9uRW5kUG9zO1xuXG5cblxuZnVuY3Rpb24gcGFyc2VNb2RlbCAodmFsKSB7XG4gIC8vIEZpeCBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlL3B1bGwv
118NzczMFxuICAvLyBhbGxvdyB2LW1vZGVsPVwib2JqLnZhbCBcIiAodHJhaWxpbmcgd2hpdGVzcGFjZSlcbiAgdmFsID0gdmFsLnRyaW0oKTtcbiAgbGVuID0gdmFsLmxlbmd0aDtcblxuICBpZiAodmFsLmluZGV4T2YoJ1snKSA8IDAgfHwgdmFsLmxhc3RJbmRleE9mKCddJykgPCBsZW4gLSAxKSB7XG4gICAgaW5kZXgkMSA9IHZhbC5sYXN0SW5kZXhPZignLicpO1xuICAgIGlmIChpbmRleCQxID4gLTEpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV4cDogdmFsLnNsaWNlKDAsIGluZGV4JDEpLFxuICAgICAgICBrZXk6ICdcIicgKyB2YWwuc2xpY2UoaW5kZXgkMSArIDEpICsgJ1wiJ1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBleHA6IHZhbCxcbiAgICAgICAga2V5OiBudWxsXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RyID0gdmFsO1xuICBpbmRleCQxID0gZXhwcmVzc2lvblBvcyA9IGV4cHJlc3Npb25FbmRQb3MgPSAwO1xuXG4gIHdoaWxlICghZW9mKCkpIHtcbiAgICBjaHIgPSBuZXh0KCk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGlzU3RyaW5nU3RhcnQoY2hyKSkge1xuICAgICAgcGFyc2VTdHJpbmcoY2hyKTtcbiAgICB9IGVsc2UgaWYgKGNociA9PT0gMHg1Qikge1xuICAgICAgcGFyc2VCcmFja2V0KGNocik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBleHA6IHZhbC5zbGljZSgwLCBleHByZXNzaW9uUG9zKSxcbiAgICBrZXk6IHZhbC5zbGljZShleHByZXNzaW9uUG9zICsgMSwgZXhwcmVzc2lvbkVuZFBvcylcbiAgfVxufVxuXG5mdW5jdGlvbiBuZXh0ICgpIHtcbiAgcmV0dXJuIHN0ci5jaGFyQ29kZUF0KCsraW5kZXgkMSlcbn1cblxuZnVuY3Rpb24gZW9mICgpIHtcbiAgcmV0dXJuIGluZGV4JDEgPj0gbGVuXG59XG5cbmZ1bmN0aW9uIGlzU3RyaW5nU3RhcnQgKGNocikge1xuICByZXR1cm4gY2hyID09PSAweDIyIHx8IGNociA9PT0gMHgyN1xufVxuXG5mdW5jdGlvbiBwYXJzZUJyYWNrZXQgKGNocikge1xuICB2YXIgaW5CcmFja2V0ID0gMTtcbiAgZXhwcmVzc2lvblBvcyA9IGluZGV4JDE7XG4gIHdoaWxlICghZW9mKCkpIHtcbiAgICBjaHIgPSBuZXh0KCk7XG4gICAgaWYgKGlzU3RyaW5nU3RhcnQoY2hyKSkge1xuICAgICAgcGFyc2VTdHJpbmcoY2hyKTtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChjaHIgPT09IDB4NUIpIHsgaW5CcmFja2V0Kys7IH1cbiAgICBpZiAoY2hyID09PSAweDVEKSB7IGluQnJhY2tldC0tOyB9XG4gICAgaWYgKGluQnJhY2tldCA9PT0gMCkge1xuICAgICAgZXhwcmVzc2lvbkVuZFBvcyA9IGluZGV4JDE7XG4gICAgICBicmVha1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVN0cmluZyAoY2hyKSB7XG4gIHZhciBzdHJpbmdRdW90ZSA9IGNocjtcbiAgd2hpbGUgKCFlb2YoKSkge1xuICAgIGNociA9IG5leHQoKTtcbiAgICBpZiAoY2hyID09PSBzdHJpbmdRdW90ZSkge1xuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cbn1cblxuLyogICovXG5cbnZhciB3YXJuJDE7XG5cbi8vIGluIHNvbWUgY2FzZXMsIHRoZSBldmVudCB1c2VkIGhhcyB0byBiZSBkZXRlcm1pbmVkIGF0IHJ1bnRpbWVcbi8vIHNvIHdlIHVzZWQgc29tZSByZXNlcnZlZCB0b2tlbnMgZHVyaW5nIGNvbXBpbGUuXG52YXIgUkFOR0VfVE9LRU4gPSAnX19yJztcbnZhciBDSEVDS0JPWF9SQURJT19UT0tFTiA9ICdfX2MnO1xuXG5mdW5jdGlvbiBtb2RlbCAoXG4gIGVsLFxuICBkaXIsXG4gIF93YXJuXG4pIHtcbiAgd2FybiQxID0gX3dhcm47XG4gIHZhciB2YWx1ZSA9IGRpci52YWx1ZTtcbiAgdmFyIG1vZGlmaWVycyA9IGRpci5tb2RpZmllcnM7XG4gIHZhciB0YWcgPSBlbC50YWc7XG4gIHZhciB0eXBlID0gZWwuYXR0cnNNYXAudHlwZTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIGlucHV0cyB3aXRoIHR5cGU9XCJmaWxlXCIgYXJlIHJlYWQgb25seSBhbmQgc2V0dGluZyB0aGUgaW5wdXQnc1xuICAgIC8vIHZhbHVlIHdpbGwgdGhyb3cgYW4gZXJyb3IuXG4gICAgaWYgKHRhZyA9PT0gJ2lucHV0JyAmJiB0eXBlID09PSAnZmlsZScpIHtcbiAgICAgIHdhcm4kMShcbiAgICAgICAgXCI8XCIgKyAoZWwudGFnKSArIFwiIHYtbW9kZWw9XFxcIlwiICsgdmFsdWUgKyBcIlxcXCIgdHlwZT1cXFwiZmlsZVxcXCI+OlxcblwiICtcbiAgICAgICAgXCJGaWxlIGlucHV0cyBhcmUgcmVhZCBvbmx5LiBVc2UgYSB2LW9uOmNoYW5nZSBsaXN0ZW5lciBpbnN0ZWFkLlwiLFxuICAgICAgICBlbC5yYXdBdHRyc01hcFsndi1tb2RlbCddXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChlbC5jb21wb25lbnQpIHtcbiAgICBnZW5Db21wb25lbnRNb2RlbChlbCwgdmFsdWUsIG1vZGlmaWVycyk7XG4gICAgLy8gY29tcG9uZW50IHYtbW9kZWwgZG9lc24ndCBuZWVkIGV4dHJhIHJ1bnRpbWVcbiAgICByZXR1cm4gZmFsc2VcbiAgfSBlbHNlIGlmICh0YWcgPT09ICdzZWxlY3QnKSB7XG4gICAgZ2VuU2VsZWN0KGVsLCB2YWx1ZSwgbW9kaWZpZXJzKTtcbiAgfSBlbHNlIGlmICh0YWcgPT09ICdpbnB1dCcgJiYgdHlwZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgIGdlbkNoZWNrYm94TW9kZWwoZWwsIHZhbHVlLCBtb2RpZmllcnMpO1xuICB9IGVsc2UgaWYgKHRhZyA9PT0gJ2lucHV0JyAmJiB0eXBlID09PSAncmFkaW8nKSB7XG4gICAgZ2VuUmFkaW9Nb2RlbChlbCwgdmFsdWUsIG1vZGlmaWVycyk7XG4gIH0gZWxzZSBpZiAodGFnID09PSAnaW5wdXQnIHx8IHRhZyA9PT0gJ3RleHRhcmVhJykge1xuICAgIGdlbkRlZmF1bHRNb2RlbChlbCwgdmFsdWUsIG1vZGlmaWVycyk7XG4gIH0gZWxzZSBpZiAoIWNvbmZpZy5pc1Jlc2VydmVkVGFnKHRhZykpIHtcbiAgICBnZW5Db21wb25lbnRNb2RlbChlbCwgdmFsdWUsIG1vZGlmaWVycyk7XG4gICAgLy8gY29tcG9uZW50IHYtbW9kZWwgZG9lc24ndCBuZWVkIGV4dHJhIHJ1bnRpbWVcbiAgICByZXR1cm4gZmFsc2VcbiAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgd2FybiQxKFxuICAgICAgXCI8XCIgKyAoZWwudGFnKSArIFwiIHYtbW9kZWw9XFxcIlwiICsgdmFsdWUgKyBcIlxcXCI+OiBcIiArXG4gICAgICBcInYtbW9kZWwgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGVsZW1lbnQgdHlwZS4gXCIgK1xuICAgICAgJ0lmIHlvdSBhcmUgd29ya2luZyB3aXRoIGNvbnRlbn
118RlZGl0YWJsZSwgaXRcXCdzIHJlY29tbWVuZGVkIHRvICcgK1xuICAgICAgJ3dyYXAgYSBsaWJyYXJ5IGRlZGljYXRlZCBmb3IgdGhhdCBwdXJwb3NlIGluc2lkZSBhIGN1c3RvbSBjb21wb25lbnQuJyxcbiAgICAgIGVsLnJhd0F0dHJzTWFwWyd2LW1vZGVsJ11cbiAgICApO1xuICB9XG5cbiAgLy8gZW5zdXJlIHJ1bnRpbWUgZGlyZWN0aXZlIG1ldGFkYXRhXG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIGdlbkNoZWNrYm94TW9kZWwgKFxuICBlbCxcbiAgdmFsdWUsXG4gIG1vZGlmaWVyc1xuKSB7XG4gIHZhciBudW1iZXIgPSBtb2RpZmllcnMgJiYgbW9kaWZpZXJzLm51bWJlcjtcbiAgdmFyIHZhbHVlQmluZGluZyA9IGdldEJpbmRpbmdBdHRyKGVsLCAndmFsdWUnKSB8fCAnbnVsbCc7XG4gIHZhciB0cnVlVmFsdWVCaW5kaW5nID0gZ2V0QmluZGluZ0F0dHIoZWwsICd0cnVlLXZhbHVlJykgfHwgJ3RydWUnO1xuICB2YXIgZmFsc2VWYWx1ZUJpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ2ZhbHNlLXZhbHVlJykgfHwgJ2ZhbHNlJztcbiAgYWRkUHJvcChlbCwgJ2NoZWNrZWQnLFxuICAgIFwiQXJyYXkuaXNBcnJheShcIiArIHZhbHVlICsgXCIpXCIgK1xuICAgIFwiP19pKFwiICsgdmFsdWUgKyBcIixcIiArIHZhbHVlQmluZGluZyArIFwiKT4tMVwiICsgKFxuICAgICAgdHJ1ZVZhbHVlQmluZGluZyA9PT0gJ3RydWUnXG4gICAgICAgID8gKFwiOihcIiArIHZhbHVlICsgXCIpXCIpXG4gICAgICAgIDogKFwiOl9xKFwiICsgdmFsdWUgKyBcIixcIiArIHRydWVWYWx1ZUJpbmRpbmcgKyBcIilcIilcbiAgICApXG4gICk7XG4gIGFkZEhhbmRsZXIoZWwsICdjaGFuZ2UnLFxuICAgIFwidmFyICQkYT1cIiArIHZhbHVlICsgXCIsXCIgK1xuICAgICAgICAnJCRlbD0kZXZlbnQudGFyZ2V0LCcgK1xuICAgICAgICBcIiQkYz0kJGVsLmNoZWNrZWQ/KFwiICsgdHJ1ZVZhbHVlQmluZGluZyArIFwiKTooXCIgKyBmYWxzZVZhbHVlQmluZGluZyArIFwiKTtcIiArXG4gICAgJ2lmKEFycmF
1185LmlzQXJyYXkoJCRhKSl7JyArXG4gICAgICBcInZhciAkJHY9XCIgKyAobnVtYmVyID8gJ19uKCcgKyB2YWx1ZUJpbmRpbmcgKyAnKScgOiB2YWx1ZUJpbmRpbmcpICsgXCIsXCIgK1xuICAgICAgICAgICckJGk9X2koJCRhLCQkdik7JyArXG4gICAgICBcImlmKCQkZWwuY2hlY2tlZCl7JCRpPDAmJihcIiArIChnZW5Bc3NpZ25tZW50Q29kZSh2YWx1ZSwgJyQkYS5jb25jYXQoWyQkdl0pJykpICsgXCIpfVwiICtcbiAgICAgIFwiZWxzZXskJGk+LTEmJihcIiArIChnZW5Bc3NpZ25tZW50Q29kZSh2YWx1ZSwgJyQkYS5zbGljZSgwLCQkaSkuY29uY2F0KCQkYS5zbGljZSgkJGkrMSkpJykpICsgXCIpfVwiICtcbiAgICBcIn1lbHNle1wiICsgKGdlbkFzc2lnbm1lbnRDb2RlKHZhbHVlLCAnJCRjJykpICsgXCJ9XCIsXG4gICAgbnVsbCwgdHJ1ZVxuICApO1xufVxuXG5mdW5jdGlvbiBnZW5SYWRpb01vZGVsIChcbiAgZWwsXG4gIHZhbHVlLFxuICBtb2RpZmllcnNcbikge1xuICB2YXIgbnVtYmVyID0gbW9kaWZpZXJzICYmIG1vZGlmaWVycy5udW1iZXI7XG4gIHZhciB2YWx1ZUJpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ3ZhbHVlJykgfHwgJ251bGwnO1xuICB2YWx1ZUJpbmRpbmcgPSBudW1iZXIgPyAoXCJfbihcIiArIHZhbHVlQmluZGluZyArIFwiKVwiKSA6IHZhbHVlQmluZGluZztcbiAgYWRkUHJvcChlbCwgJ2NoZWNrZWQnLCAoXCJfcShcIiArIHZhbHVlICsgXCIsXCIgKyB2YWx1ZUJpbmRpbmcgKyBcIilcIikpO1xuICBhZGRIYW5kbGVyKGVsLCAnY2hhbmdlJywgZ2VuQXNzaWdubWVudENvZGUodmFsdWUsIHZhbHVlQmluZGluZyksIG51bGwsIHRydWUpO1xufVxuXG5mdW5jdGlvbiBnZW5TZWxlY3QgKFxuICBlbCxcbiAgdmFsdWUsXG4gIG1vZGlmaWVyc1xuKSB7XG4gIHZhciBudW1iZXIgPSBtb2RpZmllcnMgJiYgbW9kaWZpZXJzLm51bWJlcjtcbiAgdmFyIHNlbGVjdGVkVmFsID0gXCJBcnJheS5wcm90b3R5cGUuZmlsdGVyXCIgK1xuICAgIFwiLmNhbGwoJGV2ZW50LnRhcmdldC5vcHRpb25zLGZ1bmN0aW9uKG8pe3JldHVybiBvLnNlbGVjdGVkfSlcIiArXG4gICAgXCIubWFwKGZ1bmN0aW9uKG8pe3ZhciB2YWwgPSBcXFwiX3ZhbHVlXFxcIiBpbiBvID8gby5fdmFsdWUgOiBvLnZhbHVlO1wiICtcbiAgICBcInJldHVybiBcIiArIChudW1iZXIgPyAnX24odmFsKScgOiAndmFsJykgKyBcIn0pXCI7XG5cbiAgdmFyIGFzc2lnbm1lbnQgPSAnJGV2ZW50LnRhcmdldC5tdWx0aXBsZSA/ICQkc2VsZWN0ZWRWYWwgOiAkJHNlbGVjdGVkVmFsWzBdJztcbiAgdmFyIGNvZGUgPSBcInZhciAkJHNlbGVjdGVkVmFsID0gXCIgKyBzZWxlY3RlZFZhbCArIFwiO1wiO1xuICBjb2RlID0gY29kZSArIFwiIFwiICsgKGdlbkFzc2lnbm1lbnRDb2RlKHZhbHVlLCBhc3NpZ25tZW50KSk7XG4gIGFkZEhhbmRsZXIoZWwsICdjaGFuZ2UnLCBjb2RlLCBudWxsLCB0cnVlKTtcbn1cblxuZnVuY3Rpb24gZ2VuRGVmYXVsdE1vZGVsIChcbiAgZWwsXG4gIHZhbHVlLFxuICBtb2RpZmllcnNcbikge1xuICB2YXIgdHlwZSA9IGVsLmF0dHJzTWFwLnR5cGU7XG5cbiAgLy8gd2FybiBpZiB2LWJpbmQ6dmFsdWUgY29uZmxpY3RzIHdpdGggdi1tb2RlbFxuICAvLyBleGNlcHQgZm9yIGlucHV0cyB3aXRoIHYtYmluZDp0eXBlXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgdmFyIHZhbHVlJDEgPSBlbC5hdHRyc01hcFsndi1iaW5kOnZhbHVlJ10gfHwgZWwuYXR0cnNNYXBbJzp2YWx1ZSddO1xuICAgIHZhciB0eXBlQmluZGluZyA9IGVsLmF0dHJzTWFwWyd2LWJpbmQ6dHlwZSddIHx8IGVsLmF0dHJzTWFwWyc6dHlwZSddO1xuICAgIGlmICh2YWx1ZSQxICYmICF0eXBlQmluZGluZykge1xuICAgICAgdmFyIGJpbmRpbmcgPSBlbC5hdHRyc01hcFsndi1iaW5kOnZhbHVlJ10gPyAndi1iaW5kOnZhbHVlJyA6ICc6dmFsdWUnO1xuICAgICAgd2FybiQxKFxuICAgICAgICBiaW5kaW5nICsgXCI9XFxcIlwiICsgdmFsdWUkMSArIFwiXFxcIiBjb25mbGljdHMgd2l0aCB2LW1vZGVsIG9uIHRoZSBzYW1lIGVsZW1lbnQgXCIgK1xuICAgICAgICAnYmVjYXVzZSB0aGUgbGF0dGVyIGFscmVhZHkgZXhwYW5kcyB0byBhIHZhbHVlIGJpbmRpbmcgaW50ZXJuYWxseScsXG4gICAgICAgIGVsLnJhd0F0dHJzTWFwW2JpbmRpbmddXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHZhciByZWYgPSBtb2RpZmllcnMgfHwge307XG4gIHZhciBsYXp5ID0gcmVmLmxhenk7XG4gIHZhciBudW1iZXIgPSByZWYubnVtYmVyO1xuICB2YXIgdHJpbSA9IHJlZi50cmltO1xuICB2YXIgbmVlZENvbXBvc2l0aW9uR3VhcmQgPSAhbGF6eSAmJiB0eXBlICE9PSAncmFuZ2UnO1xuICB2YXIgZXZlbnQgPSBsYXp5XG4gICAgPyAnY2hhbmdlJ1xuICAgIDogdHlwZSA9PT0gJ3JhbmdlJ1xuICAgICAgPyBSQU5HRV9UT0tFTlxuICAgICAgOiAnaW5wdXQnO1xuXG4gIHZhciB2YWx1ZUV4cHJlc3Npb24gPSAnJGV2ZW50LnRhcmdldC52YWx1ZSc7XG4gIGlmICh0cmltKSB7XG4gICAgdmFsdWVFeHByZXNzaW9uID0gXCIkZXZlbnQudGFyZ2V0LnZhbHVlLnRyaW0oKVwiO1xuICB9XG4gIGlmIChudW1iZXIpIHtcbiAgICB2YWx1ZUV4cHJlc3Npb24gPSBcIl9uKFwiICsgdmFsdWVFeHByZXNzaW9uICsgXCIpXCI7XG4gIH1cblxuICB2YXIgY29kZSA9IGdlbkFzc2lnbm1lbnRDb2RlKHZhbHVlLCB2YWx1ZUV4cHJlc3Npb24pO1xuICBpZiAobmVlZENvbXBvc2l0aW9uR3VhcmQpIHtcbiAgICBjb2RlID0gXCJpZigkZXZlbnQudGFyZ2V0LmNvbXBvc2luZylyZXR1cm47XCIgKyBjb2RlO1xuICB9XG5cbiAgYWRkUHJvcChlbCwgJ3ZhbHVlJywgKFwiKFwiICsgdmFsdWUgKyBcIilcIikpO1xuICBhZGRIYW5kbGVyKGVsLCBldmVudCwgY29kZSwgbnVsbCwgdHJ1ZSk7XG4gIGlmICh0cmltIHx8IG51bWJlcikge1xuICAgIGFkZEhhbmRsZXIoZWwsICdibHVyJywgJyRmb3JjZVVwZGF0ZSgpJyk7XG4gIH1cbn1cblxuLyogICovXG5cbi8vIG5vcm1hbGl6ZSB2LW1vZGVsIGV2ZW50IHRva2VucyB0aGF0IGNhbiBvbmx5IGJlIGRldGVybWluZWQgYXQgcnVudGltZS5cbi8vIGl0J3MgaW1wb3J0YW50IHRvIHBsYWNlIHRoZSBldmVudCBhcyB0aGUgZmlyc3QgaW4gdGhlIGFycmF5IGJlY2F1c2Vcbi8vIHRoZSB3aG9sZSBwb2ludCBpcyBlbnN1cmluZyB0aGUgdi1tb2RlbCBjYWxsYmFjayBnZXRzIGNhbGxlZCBiZWZvcmVcbi8vIHVzZXItYXR0YWNoZWQgaGFuZGxlcnMuXG5mdW5jdGlvbiBub3JtYWxpem
118VFdmVudHMgKG9uKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoaXNEZWYob25bUkFOR0VfVE9LRU5dKSkge1xuICAgIC8vIElFIGlucHV0W3R5cGU9cmFuZ2VdIG9ubHkgc3VwcG9ydHMgYGNoYW5nZWAgZXZlbnRcbiAgICB2YXIgZXZlbnQgPSBpc0lFID8gJ2NoYW5nZScgOiAnaW5wdXQnO1xuICAgIG9uW2V2ZW50XSA9IFtdLmNvbmNhdChvbltSQU5HRV9UT0tFTl0sIG9uW2V2ZW50XSB8fCBbXSk7XG4gICAgZGVsZXRlIG9uW1JBTkdFX1RPS0VOXTtcbiAgfVxuICAvLyBUaGlzIHdhcyBvcmlnaW5hbGx5IGludGVuZGVkIHRvIGZpeCAjNDUyMSBidXQgbm8gbG9uZ2VyIG5lY2Vzc2FyeVxuICAvLyBhZnRlciAyLjUuIEtlZXBpbmcgaXQgZm9yIGJhY2t3YXJkcyBjb21wYXQgd2l0aCBnZW5lcmF0ZWQgY29kZSBmcm9tIDwgMi40XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoaXNEZWYob25bQ0hFQ0tCT1hfUkFESU9fVE9LRU5dKSkge1xuICAgIG9uLmNoYW5nZSA9IFtdLmNvbmNhdChvbltDSEVDS0JPWF9SQURJT19UT0tFTl0sIG9uLmNoYW5nZSB8fCBbXSk7XG4gICAgZGVsZXRlIG9uW0NIRUNLQk9YX1JBRElPX1RPS0VOXTtcbiAgfVxufVxuXG52YXIgdGFyZ2V0JDE7XG5cbmZ1bmN0aW9uIGNyZWF0ZU9uY2VIYW5kbGVyJDEgKGV2ZW50LCBoYW5kbGVyLCBjYXB0dXJlKSB7XG4gIHZhciBfdGFyZ2V0ID0gdGFyZ2V0JDE7IC8vIHNhdmUgY3VycmVudCB0YXJnZXQgZWxlbWVudCBpbiBjbG9zdXJlXG4gIHJldHVybiBmdW5jdGlvbiBvbmNlSGFuZGxlciAoKSB7XG4gICAgdmFyIHJlcyA9IGhhbmRsZXIuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICBpZiAocmVzICE9PSBudWxsKSB7XG4gICAgICByZW1vdmUkMihldmVudCwgb25jZUhhbmRsZXIsIGNhcHR1cmUsIF90YXJnZXQpO1xuICAgIH1cbiAgfVxufVxuXG4vLyAjOTQ0NjogRmlyZWZveCA8PSA1MyAoaW4gcGFydGljdWxhciwgRVNSIDUyKSBoYXMgaW5jb3JyZWN0IEV2ZW50LnRpbWVTdGFtcFxuLy8gaW1wbGVtZW50YXRpb24gYW5kIGRvZXMgbm90IGZpcmUgbWljcm90YXNrcyBpbiBiZXR3ZWVuIGV2ZW50IHByb3BhZ2F0aW9uLCBzb1xuLy8gc2FmZSB0byBleGNsdWRlLlxudmFyIHVzZU1pY3JvdGFza0ZpeCA9IGlzVXNpbmdNaWNyb1Rhc2sgJiYgIShpc0ZGICYmIE51bWJlcihpc0ZGWzFdKSA8PSA1Myk7XG5cbmZ1bmN0aW9uIGFkZCQxIChcbiAgbmFtZSxcbiAgaGFuZGxlcixcbiAgY2FwdHVyZSxcbiAgcGFzc2l2ZVxuKSB7XG4gIC8vIGFzeW5jIGVkZ2UgY2FzZSAjNjU2NjogaW5uZXIgY2xpY2sgZXZlbnQgdHJpZ2dlcnMgcGF0Y2gsIGV2ZW50IGhhbmRsZXJcbiAgLy8gYXR0YWNoZWQgdG8gb3V0ZXIgZWxlbWVudCBkdXJpbmcgcGF0Y2gsIGFuZCB0cmlnZ2VyZWQgYWdhaW4uIFRoaXNcbiAgLy8gaGFwcGVucyBiZWNhdXNlIGJyb3dzZXJzIGZpcmUgbWljcm90YXNrIHRpY2tzIGJldHdlZW4gZXZlbnQgcHJvcGFnYXRpb24uXG4gIC8vIHRoZSBzb2x1dGlvbiBpcyBzaW1wbGU6IHdlIHNhdmUgdGhlIHRpbWVzdGFtcCB3aGVuIGEgaGFuZGxlciBpcyBhdHRhY2hlZCxcbiAgLy8gYW5kIHRoZSBoYW5kbGVyIHdvdWxkIG9ubHkgZmlyZSBpZiB0aGUgZXZlbnQgcGFzc2VkIHRvIGl0IHdhcyBmaXJlZFxuICAvLyBBRlRFUiBpdCB3YXMgYXR0YWNoZWQuXG4gIGlmICh1c2VNaWNyb3Rhc2tGaXgpIHtcbiAgICB2YXIgYXR0YWNoZWRUaW1lc3RhbXAgPSBjdXJyZW50Rmx1c2hUaW1lc3RhbXA7XG4gICAgdmFyIG9yaWdpbmFsID0gaGFuZGxlcjtcbiAgICBoYW5kbGVyID0gb3JpZ2luYWwuX3dyYXBwZXIgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKFxuICAgICAgICAvLyBubyBidWJibGluZywgc2hvdWxkIGFsd2F5cyBmaXJlLlxuICAgICAgICAvLyB0aGlzIGlzIGp1c3QgYSBzYWZldHkgbmV0IGluIGNhc2UgZXZlbnQudGltZVN0YW1wIGlzIHVucmVsaWFibGUgaW5cbiAgICAgICAgLy8gY2VydGFpbiB3ZWlyZCBlbnZpcm9ubWVudHMuLi5cbiAgICAgICAgZS50YXJnZXQgPT09IGUuY3VycmVudFRhcmdldCB8fFxuICAgICAgICAvLyBldmVudCBpcyBmaXJlZCBhZnRlciBoYW5kbGVyIGF0dGFjaG1lbnRcbiAgICAgICAgZS50aW1lU3RhbXAgPj0gYXR0YWNoZWRUaW1lc3RhbXAgfHxcbiAgICAgICAgLy8gYmFpbCBmb3IgZW52aXJvbm1lbnRzIHRoYXQgaGF2ZSBidWdneSBldmVudC50aW1lU3RhbXAgaW1wbGVtZW50YXRpb25zXG4gICAgICAgIC8vICM5NDYyIGlPUyA5IGJ1ZzogZXZlbnQudGltZVN0YW1wIGlzIDAgYWZ0ZXIgaGlzdG9yeS5wdXNoU3RhdGVcbiAgICAgICAgLy8gIzk2ODEgUXRXZWJFbmdpbmUgZXZlbnQudGltZVN0YW1wIGlzIG5lZ2F0aXZlIHZhbHVlXG4gICAgICAgIGUudGltZVN0YW1wIDw9IDAgfHxcbiAgICAgICAgLy8gIzk0NDggYmFpbCBpZiBldmVudCBpcyBmaXJlZCBpbiBhbm90aGVyIGRvY3VtZW50IGluIGEgbXVsdGktcGFnZVxuICAgICAgICAvLyBlbGVjdHJvbi9udy5qcyBhcHAsIHNpbmNlIGV2ZW50LnRpbWVTdGFtcCB3aWxsIGJlIHVzaW5nIGEgZGlmZmVyZW50XG4gICAgICAgIC8vIHN0YXJ0aW5nIHJlZmVyZW5jZVxuICAgICAgICBlLnRhcmdldC5vd25lckRvY3VtZW50ICE9PSBkb2N1bWVudFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuICB0YXJnZXQkMS5hZGRFdmVudExpc3RlbmVyKFxuICAgIG5hbWUsXG4gICAgaGFuZGxlcixcbiAgICBzdXBwb3J0c1Bhc3NpdmVcbiAgICAgID8geyBjYXB0dXJlOiBjYXB0dXJlLCBwYXNzaXZlOiBwYXNzaXZlIH1cbiAgICAgIDogY2FwdHVyZVxuICApO1xufVxuXG5mdW5jdGlvbiByZW1vdmUkMiAoXG4gIG5hbWUsXG4gIGhhbmRsZXIsXG4gIGNhcHR1cmUsXG4gIF90YXJnZXRcbikge1xuICAoX3RhcmdldCB8fCB0YXJnZXQkMSkucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICBuYW1lLFxuICAgIGhhbmRsZXIuX3dyYXBwZXIgfHwgaGFuZGxlcixcbiAgICBjYXB0dXJlXG4gICk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZURPTUxpc3RlbmVycyAob2xkVm5vZGUsIHZub2RlKSB7XG4gIGlmIChpc1VuZGVmKG9sZFZub2Rl
118LmRhdGEub24pICYmIGlzVW5kZWYodm5vZGUuZGF0YS5vbikpIHtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgb24gPSB2bm9kZS5kYXRhLm9uIHx8IHt9O1xuICB2YXIgb2xkT24gPSBvbGRWbm9kZS5kYXRhLm9uIHx8IHt9O1xuICB0YXJnZXQkMSA9IHZub2RlLmVsbTtcbiAgbm9ybWFsaXplRXZlbnRzKG9uKTtcbiAgdXBkYXRlTGlzdGVuZXJzKG9uLCBvbGRPbiwgYWRkJDEsIHJlbW92ZSQyLCBjcmVhdGVPbmNlSGFuZGxlciQxLCB2bm9kZS5jb250ZXh0KTtcbiAgdGFyZ2V0JDEgPSB1bmRlZmluZWQ7XG59XG5cbnZhciBldmVudHMgPSB7XG4gIGNyZWF0ZTogdXBkYXRlRE9NTGlzdGVuZXJzLFxuICB1cGRhdGU6IHVwZGF0ZURPTUxpc3RlbmVyc1xufTtcblxuLyogICovXG5cbnZhciBzdmdDb250YWluZXI7XG5cbmZ1bmN0aW9uIHVwZGF0ZURPTVByb3BzIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgaWYgKGlzVW5kZWYob2xkVm5vZGUuZGF0YS5kb21Qcm9wcykgJiYgaXNVbmRlZih2bm9kZS5kYXRhLmRvbVByb3BzKSkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciBrZXksIGN1cjtcbiAgdmFyIGVsbSA9IHZub2RlLmVsbTtcbiAgdmFyIG9sZFByb3BzID0gb2xkVm5vZGUuZGF0YS5kb21Qcm9wcyB8fCB7fTtcbiAgdmFyIHByb3BzID0gdm5vZGUuZGF0YS5kb21Qcm9wcyB8fCB7fTtcbiAgLy8gY2xvbmUgb2JzZXJ2ZWQgb2JqZWN0cywgYXMgdGhlIHVzZXIgcHJvYmFibHkgd2FudHMgdG8gbXV0YXRlIGl0XG4gIGlmIChpc0RlZihwcm9wcy5fX29iX18pKSB7XG4gICAgcHJvcHMgPSB2bm9kZS5kYXRhLmRvbVByb3BzID0gZXh0ZW5kKHt9LCBwcm9wcyk7XG4gIH1cblxuICBmb3IgKGtleSBpbiBvbGRQcm9wcykge1xuICAgIGlmICghKGtleSBpbiBwcm9wcykpIHtcbiAgICAgIGVsbVtrZXldID0gJyc7XG4gICAgfVxuICB9XG5cbiAgZm9yIChrZXkgaW4gcHJvcHMpIHtcbiAgICBjdXIgPSBwcm9wc1trZXldO1xuICAgIC8vIGlnbm9yZSBjaGlsZHJlbiBpZiB0aGUgbm9kZSBoYXMgdGV4dENvbnRlbnQgb3IgaW5uZXJIVE1MLFxuICAgIC8vIGFzIHRoZXNlIHdpbGwgdGhyb3cgYXdheSBleGlzdGluZyBET00gbm9kZXMgYW5kIGNhdXNlIHJlbW92YWwgZXJyb3JzXG4gICAgLy8gb24gc3Vic2VxdWVudCBwYXRjaGVzICgjMzM2MClcbiAgICBpZiAoa2V5ID09PSAndGV4dENvbnRlbnQnIHx8IGtleSA9PT0gJ2lubmVySFRNTCcpIHtcbiAgICAgIGlmICh2bm9kZS5jaGlsZHJlbikgeyB2bm9kZS5jaGlsZHJlbi5sZW5ndGggPSAwOyB9XG4gICAgICBpZiAoY3VyID09PSBvbGRQcm9wc1trZXldKSB7IGNvbnRpbnVlIH1cbiAgICAgIC8vICM2NjAxIHdvcmsgYXJvdW5kIENocm9tZSB2ZXJzaW9uIDw9IDU1IGJ1ZyB3aGVyZSBzaW5nbGUgdGV4dE5vZGVcbiAgICAgIC8vIHJlcGxhY2VkIGJ5IGlubmVySFRNTC90ZXh0Q29udGVudCByZXRhaW5zIGl0cyBwYXJlbnROb2RlIHByb3BlcnR5XG4gICAgICBpZiAoZWxtLmNoaWxkTm9kZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGVsbS5yZW1vdmVDaGlsZChlbG0uY2hpbGROb2Rlc1swXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ3ZhbHVlJyAmJiBlbG0udGFnTmFtZSAhPT0gJ1BST0dSRVNTJykge1xuICAgICAgLy8gc3RvcmUgdmFsdWUgYXMgX3ZhbHVlIGFzIHdlbGwgc2luY2VcbiAgICAgIC8vIG5vbi1zdHJpbmcgdmFsdWVzIHdpbGwgYmUgc3RyaW5naWZpZWRcbiAgICAgIGVsbS5fdmFsdWUgPSBjdXI7XG4gICAgICAvLyBhdm9pZCByZXNldHRpbmcgY3Vyc29yIHBvc2l0aW9uIHdoZW4gdmFsdWUgaXMgdGhlIHNhbWVcbiAgICAgIHZhciBzdHJDdXIgPSBpc1VuZGVmKGN1cikgPyAnJyA6IFN0cmluZyhjdXIpO1xuICAgICAgaWYgKHNob3VsZFVwZGF0ZVZhbHVlKGVsbSwgc3RyQ3VyKSkge1xuICAgICAgICBlbG0udmFsdWUgPSBzdHJDdXI7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdpbm5lckhUTUwnICYmIGlzU1ZHKGVsbS50YWdOYW1lKSAmJiBpc1VuZGVmKGVsbS5pbm5lckhUTUwpKSB7XG4gICAgICAvLyBJRSBkb2Vzbid0IHN1cHBvcnQgaW5uZXJIVE1MIGZvciBTVkcgZWxlbWVudHNcbiAgICAgIHN2Z0NvbnRhaW5lciA9IHN2Z0NvbnRhaW5lciB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHN2Z0NvbnRhaW5lci5pbm5lckhUTUwgPSBcIjxzdmc+XCIgKyBjdXIgKyBcIjwvc3ZnPlwiO1xuICAgICAgdmFyIHN2ZyA9IHN2Z0NvbnRhaW5lci5maXJzdENoaWxkO1xuICAgICAgd2hpbGUgKGVsbS5maXJzdENoaWxkKSB7XG4gICAgICAgIGVsbS5yZW1vdmVDaGlsZChlbG0uZmlyc3RDaGlsZCk7XG4gICAgICB9XG4gICAgICB3aGlsZSAoc3ZnLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgZWxtLmFwcGVuZENoaWxkKHN2Zy5maXJzdENoaWxkKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgLy8gc2tpcCB0aGUgdXBkYXRlIGlmIG9sZCBhbmQgbmV3IFZET00gc3RhdGUgaXMgdGhlIHNhbWUuXG4gICAgICAvLyBgdmFsdWVgIGlzIGhhbmRsZWQgc2VwYXJhdGVseSBiZWNhdXNlIHRoZSBET00gdmFsdWUgbWF5IGJlIHRlbXBvcmFyaWx5XG4gICAgICAvLyBvdXQgb2Ygc3luYyB3aXRoIFZET00gc3RhdGUgZHVlIHRvIGZvY3VzLCBjb21wb3NpdGlvbiBhbmQgbW9kaWZpZXJzLlxuICAgICAgLy8gVGhpcyAgIzQ1MjEgYnkgc2tpcHBpbmcgdGhlIHVubmVjZXNzYXJ5IGBjaGVja2VkYCB1cGRhdGUuXG4gICAgICBjdXIgIT09IG9sZFByb3BzW2tleV1cbiAgICApIHtcbiAgICAgIC8vIHNvbWUgcHJvcGVydHkgdXBkYXRlcyBjYW4gdGhyb3dcbiAgICAgIC8vIGUuZy4gYHZhbHVlYCBvbiA8cHJvZ3Jlc3M+IHcvIG5vbi1maW5pdGUgdmFsdWVcbiAgICAgIHRyeSB7XG4gICAgICAgIGVsbVtrZXldID0gY3VyO1xuICAgICAgfSBjYXRjaCAoZSkge31cbiAgICB9XG4gIH1cbn1cblxuLy8gY2hlY2sgcGxhdGZvcm1zL3dlYi91dGlsL2F0dHJzLmpzIGFjY2VwdFZhbHVlXG5cblxuZnVuY3Rpb24gc2hvdWxkVXBkYXRlVmFsdWUgKGVsbSwgY2hlY2tWYWwpIHtcbiAgcmV0dXJuICghZWxtLmNvbXBvc2luZyAmJiAoXG4gICAgZWxtLnRhZ05hbWUgPT09ICdPUFRJT04nIHx8XG4gICAgaXNOb3RJbkZvY3VzQW5kRGlydHkoZWxtLCBjaGVja1ZhbCkgfHxcbiAgICBpc0RpcnR5V2l0
118aE1vZGlmaWVycyhlbG0sIGNoZWNrVmFsKVxuICApKVxufVxuXG5mdW5jdGlvbiBpc05vdEluRm9jdXNBbmREaXJ0eSAoZWxtLCBjaGVja1ZhbCkge1xuICAvLyByZXR1cm4gdHJ1ZSB3aGVuIHRleHRib3ggKC5udW1iZXIgYW5kIC50cmltKSBsb3NlcyBmb2N1cyBhbmQgaXRzIHZhbHVlIGlzXG4gIC8vIG5vdCBlcXVhbCB0byB0aGUgdXBkYXRlZCB2YWx1ZVxuICB2YXIgbm90SW5Gb2N1cyA9IHRydWU7XG4gIC8vICM2MTU3XG4gIC8vIHdvcmsgYXJvdW5kIElFIGJ1ZyB3aGVuIGFjY2Vzc2luZyBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGluIGFuIGlmcmFtZVxuICB0cnkgeyBub3RJbkZvY3VzID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gZWxtOyB9IGNhdGNoIChlKSB7fVxuICByZXR1cm4gbm90SW5Gb2N1cyAmJiBlbG0udmFsdWUgIT09IGNoZWNrVmFsXG59XG5cbmZ1bmN0aW9uIGlzRGlydHlXaXRoTW9kaWZpZXJzIChlbG0sIG5ld1ZhbCkge1xuICB2YXIgdmFsdWUgPSBlbG0udmFsdWU7XG4gIHZhciBtb2RpZmllcnMgPSBlbG0uX3ZNb2RpZmllcnM7IC8vIGluamVjdGVkIGJ5IHYtbW9kZWwgcnVudGltZVxuICBpZiAoaXNEZWYobW9kaWZpZXJzKSkge1xuICAgIGlmIChtb2RpZmllcnMubnVtYmVyKSB7XG4gICAgICByZXR1cm4gdG9OdW1iZXIodmFsdWUpICE9PSB0b051bWJlcihuZXdWYWwpXG4gICAgfVxuICAgIGlmIChtb2RpZmllcnMudHJpbSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnRyaW0oKSAhPT0gbmV3VmFsLnRyaW0oKVxuICAgIH1cbiAgfVxuICByZXR1cm4gdmFsdWUgIT09IG5ld1ZhbFxufVxuXG52YXIgZG9tUHJvcHMgPSB7XG4gIGNyZWF0ZTogdXBkYXRlRE9NUHJvcHMsXG4gIHVwZGF0ZTogdXBkYXRlRE9NUHJvcHNcbn07XG5cbi8qICAqL1xuXG52YXIgcGFyc2VTdHlsZVRleHQgPSBjYWNoZWQoZnVuY3Rpb24gKGNzc1RleHQpIHtcbiAgdmFyIHJlcyA9IHt9O1xuICB2YXIgbGlzdERlbGltaXRlciA9IC87KD8hW14oXSpcXCkpL2c7XG4gIHZhciBwcm9wZXJ0eURlbGltaXRlciA9IC86KC4rKS87XG4gIGNzc1RleHQuc3BsaXQobGlzdERlbGltaXRlcikuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgIGlmIChpdGVtKSB7XG4gICAgICB2Y
118XIgdG1wID0gaXRlbS5zcGxpdChwcm9wZXJ0eURlbGltaXRlcik7XG4gICAgICB0bXAubGVuZ3RoID4gMSAmJiAocmVzW3RtcFswXS50cmltKCldID0gdG1wWzFdLnRyaW0oKSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc1xufSk7XG5cbi8vIG1lcmdlIHN0YXRpYyBhbmQgZHluYW1pYyBzdHlsZSBkYXRhIG9uIHRoZSBzYW1lIHZub2RlXG5mdW5jdGlvbiBub3JtYWxpemVTdHlsZURhdGEgKGRhdGEpIHtcbiAgdmFyIHN0eWxlID0gbm9ybWFsaXplU3R5bGVCaW5kaW5nKGRhdGEuc3R5bGUpO1xuICAvLyBzdGF0aWMgc3R5bGUgaXMgcHJlLXByb2Nlc3NlZCBpbnRvIGFuIG9iamVjdCBkdXJpbmcgY29tcGlsYXRpb25cbiAgLy8gYW5kIGlzIGFsd2F5cyBhIGZyZXNoIG9iamVjdCwgc28gaXQncyBzYWZlIHRvIG1lcmdlIGludG8gaXRcbiAgcmV0dXJuIGRhdGEuc3RhdGljU3R5bGVcbiAgICA/IGV4dGVuZChkYXRhLnN0YXRpY1N0eWxlLCBzdHlsZSlcbiAgICA6IHN0eWxlXG59XG5cbi8vIG5vcm1hbGl6ZSBwb3NzaWJsZSBhcnJheSAvIHN0cmluZyB2YWx1ZXMgaW50byBPYmplY3RcbmZ1bmN0aW9uIG5vcm1hbGl6ZVN0eWxlQmluZGluZyAoYmluZGluZ1N0eWxlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGJpbmRpbmdTdHlsZSkpIHtcbiAgICByZXR1cm4gdG9PYmplY3QoYmluZGluZ1N0eWxlKVxuICB9XG4gIGlmICh0eXBlb2YgYmluZGluZ1N0eWxlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBwYXJzZVN0eWxlVGV4dChiaW5kaW5nU3R5bGUpXG4gIH1cbiAgcmV0dXJuIGJpbmRpbmdTdHlsZVxufVxuXG4vKipcbiAqIHBhcmVudCBjb21wb25lbnQgc3R5bGUgc2hvdWxkIGJlIGFmdGVyIGNoaWxkJ3NcbiAqIHNvIHRoYXQgcGFyZW50IGNvbXBvbmVudCdzIHN0eWxlIGNvdWxkIG92ZXJyaWRlIGl0XG4gKi9cbmZ1bmN0aW9uIGdldFN0eWxlICh2bm9kZSwgY2hlY2tDaGlsZCkge1xuICB2YXIgcmVzID0ge307XG4gIHZhciBzdHlsZURhdGE7XG5cbiAgaWYgKGNoZWNrQ2hpbGQpIHtcbiAgICB2YXIgY2hpbGROb2RlID0gdm5vZGU7XG4gICAgd2hpbGUgKGNoaWxkTm9kZS5jb21wb25lbnRJbnN0YW5jZSkge1xuICAgICAgY2hpbGROb2RlID0gY2hpbGROb2RlLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZTtcbiAgICAgIGlmIChcbiAgICAgICAgY2hpbGROb2RlICYmIGNoaWxkTm9kZS5kYXRhICYmXG4gICAgICAgIChzdHlsZURhdGEgPSBub3JtYWxpemVTdHlsZURhdGEoY2hpbGROb2RlLmRhdGEpKVxuICAgICAgKSB7XG4gICAgICAgIGV4dGVuZChyZXMsIHN0eWxlRGF0YSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKChzdHlsZURhdGEgPSBub3JtYWxpemVTdHlsZURhdGEodm5vZGUuZGF0YSkpKSB7XG4gICAgZXh0ZW5kKHJlcywgc3R5bGVEYXRhKTtcbiAgfVxuXG4gIHZhciBwYXJlbnROb2RlID0gdm5vZGU7XG4gIHdoaWxlICgocGFyZW50Tm9kZSA9IHBhcmVudE5vZGUucGFyZW50KSkge1xuICAgIGlmIChwYXJlbnROb2RlLmRhdGEgJiYgKHN0eWxlRGF0YSA9IG5vcm1hbGl6ZVN0eWxlRGF0YShwYXJlbnROb2RlLmRhdGEpKSkge1xuICAgICAgZXh0ZW5kKHJlcywgc3R5bGVEYXRhKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG4vKiAgKi9cblxudmFyIGNzc1ZhclJFID0gL14tLS87XG52YXIgaW1wb3J0YW50UkUgPSAvXFxzKiFpbXBvcnRhbnQkLztcbnZhciBzZXRQcm9wID0gZnVuY3Rpb24gKGVsLCBuYW1lLCB2YWwpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChjc3NWYXJSRS50ZXN0KG5hbWUpKSB7XG4gICAgZWwuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgdmFsKTtcbiAgfSBlbHNlIGlmIChpbXBvcnRhbnRSRS50ZXN0KHZhbCkpIHtcbiAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eShoeXBoZW5hdGUobmFtZSksIHZhbC5yZXBsYWNlKGltcG9ydGFudFJFLCAnJyksICdpbXBvcnRhbnQnKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbm9ybWFsaXplZE5hbWUgPSBub3JtYWxpemUobmFtZSk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgLy8gU3VwcG9ydCB2YWx1ZXMgYXJyYXkgY3JlYXRlZCBieSBhdXRvcHJlZml4ZXIsIGUuZy5cbiAgICAgIC8vIHtkaXNwbGF5OiBbXCItd2Via2l0LWJveFwiLCBcIi1tcy1mbGV4Ym94XCIsIFwiZmxleFwiXX1cbiAgICAgIC8vIFNldCB0aGVtIG9uZSBieSBvbmUsIGFuZCB0aGUgYnJvd3NlciB3aWxsIG9ubHkgc2V0IHRob3NlIGl0IGNhbiByZWNvZ25pemVcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB2YWwubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgZWwuc3R5bGVbbm9ybWFsaXplZE5hbWVdID0gdmFsW2ldO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBlbC5zdHlsZVtub3JtYWxpemVkTmFtZV0gPSB2YWw7XG4gICAgfVxuICB9XG59O1xuXG52YXIgdmVuZG9yTmFtZXMgPSBbJ1dlYmtpdCcsICdNb3onLCAnbXMnXTtcblxudmFyIGVtcHR5U3R5bGU7XG52YXIgbm9ybWFsaXplID0gY2FjaGVkKGZ1bmN0aW9uIChwcm9wKSB7XG4gIGVtcHR5U3R5bGUgPSBlbXB0eVN0eWxlIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLnN0eWxlO1xuICBwcm9wID0gY2FtZWxpemUocHJvcCk7XG4gIGlmIChwcm9wICE9PSAnZmlsdGVyJyAmJiAocHJvcCBpbiBlbXB0eVN0eWxlKSkge1xuICAgIHJldHVybiBwcm9wXG4gIH1cbiAgdmFyIGNhcE5hbWUgPSBwcm9wLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgcHJvcC5zbGljZSgxKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB2ZW5kb3JOYW1lcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBuYW1lID0gdmVuZG9yTmFtZXNbaV0gKyBjYXBOYW1lO1xuICAgIGlmIChuYW1lIGluIGVtcHR5U3R5bGUpIHtcbiAgICAgIHJldHVybiBuYW1lXG4gICAgfVxuICB9XG59KTtcblxuZnVuY3Rpb24gdXBkYXRlU3R5bGUgKG9sZFZub2RlLCB2bm9kZSkge1xuICB2YXIgZGF0YSA9IHZub2RlLmRhdGE7XG4gIHZhciBvbGREYXRhID0gb2xkVm5vZGUuZGF0YTtcblxuICBpZiAoaXNVbmRlZihkYXRhLnN0YXRpY1N0eWxlKSAmJiBpc1VuZGVmKGRhdGEuc3R5bGUpICYmXG4gICAgaXNVbmRlZihvbGREYXRhLnN0YXRpY1N0eWxlKSAmJiBpc1VuZGVmKG9sZERhdGEuc3R5bGUpXG4gICkge1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIGN1ciwgbmFtZTtcbiAgdmFyIGVsID0gdm5vZGUuZWxtO1xuICB2YXIgb2xkU3RhdGljU3R5bGUgPSBvbGREYXRhLnN0YXRpY1N0eWxlO1xuICB2YXIgb2xkU3R5bGVCaW5kaW5nID0gb2xkRGF0YS5ub3JtYWxpem
118VkU3R5bGUgfHwgb2xkRGF0YS5zdHlsZSB8fCB7fTtcblxuICAvLyBpZiBzdGF0aWMgc3R5bGUgZXhpc3RzLCBzdHlsZWJpbmRpbmcgYWxyZWFkeSBtZXJnZWQgaW50byBpdCB3aGVuIGRvaW5nIG5vcm1hbGl6ZVN0eWxlRGF0YVxuICB2YXIgb2xkU3R5bGUgPSBvbGRTdGF0aWNTdHlsZSB8fCBvbGRTdHlsZUJpbmRpbmc7XG5cbiAgdmFyIHN0eWxlID0gbm9ybWFsaXplU3R5bGVCaW5kaW5nKHZub2RlLmRhdGEuc3R5bGUpIHx8IHt9O1xuXG4gIC8vIHN0b3JlIG5vcm1hbGl6ZWQgc3R5bGUgdW5kZXIgYSBkaWZmZXJlbnQga2V5IGZvciBuZXh0IGRpZmZcbiAgLy8gbWFrZSBzdXJlIHRvIGNsb25lIGl0IGlmIGl0J3MgcmVhY3RpdmUsIHNpbmNlIHRoZSB1c2VyIGxpa2VseSB3YW50c1xuICAvLyB0byBtdXRhdGUgaXQuXG4gIHZub2RlLmRhdGEubm9ybWFsaXplZFN0eWxlID0gaXNEZWYoc3R5bGUuX19vYl9fKVxuICAgID8gZXh0ZW5kKHt9LCBzdHlsZSlcbiAgICA6IHN0eWxlO1xuXG4gIHZhciBuZXdTdHlsZSA9IGdldFN0eWxlKHZub2RlLCB0cnVlKTtcblxuICBmb3IgKG5hbWUgaW4gb2xkU3R5bGUpIHtcbiAgICBpZiAoaXNVbmRlZihuZXdTdHlsZVtuYW1lXSkpIHtcbiAgICAgIHNldFByb3AoZWwsIG5hbWUsICcnKTtcbiAgICB9XG4gIH1cbiAgZm9yIChuYW1lIGluIG5ld1N0eWxlKSB7XG4gICAgY3VyID0gbmV3U3R5bGVbbmFtZV07XG4gICAgaWYgKGN1ciAhPT0gb2xkU3R5bGVbbmFtZV0pIHtcbiAgICAgIC8vIGllOSBzZXR0aW5nIHRvIG51bGwgaGFzIG5vIGVmZmVjdCwgbXVzdCB1c2UgZW1wdHkgc3RyaW5nXG4gICAgICBzZXRQcm9wKGVsLCBuYW1lLCBjdXIgPT0gbnVsbCA/ICcnIDogY3VyKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIHN0eWxlID0ge1xuICBjcmVhdGU6IHVwZGF0ZVN0eWxlLFxuICB1cGRhdGU6IHVwZGF0ZVN0eWxlXG59O1xuXG4vKiAgKi9cblxudmFyIHdoaXRlc3BhY2VSRSA9IC9cXHMrLztcblxuLyoqXG4gKiBBZGQgY2xhc3Mgd2l0aCBjb21wYXRpYmlsaXR5IGZvciBTVkcgc2luY2UgY2xhc3NMaXN0IGlzIG5vdCBzdXBwb3J0ZWQgb25cbiAqIFNWRyBlbGVtZW50cyBpbiBJRVxuICovXG5mdW5jdGlvbiBhZGRDbGFzcyAoZWwsIGNscykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKCFjbHMgfHwgIShjbHMgPSBjbHMudHJpbSgpKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKGVsLmNsYXNzTGlzdCkge1xuICAgIGlmIChjbHMuaW5kZXhPZignICcpID4gLTEpIHtcbiAgICAgIGNscy5zcGxpdCh3aGl0ZXNwYWNlUkUpLmZvckVhY2goZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGVsLmNsYXNzTGlzdC5hZGQoYyk7IH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbC5jbGFzc0xpc3QuYWRkKGNscyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBjdXIgPSBcIiBcIiArIChlbC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykgfHwgJycpICsgXCIgXCI7XG4gICAgaWYgKGN1ci5pbmRleE9mKCcgJyArIGNscyArICcgJykgPCAwKSB7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgKGN1ciArIGNscykudHJpbSgpKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZW1vdmUgY2xhc3Mgd2l0aCBjb21wYXRpYmlsaXR5IGZvciBTVkcgc2luY2UgY2xhc3NMaXN0IGlzIG5vdCBzdXBwb3J0ZWQgb25cbiAqIFNWRyBlbGVtZW50cyBpbiBJRVxuICovXG5mdW5jdGlvbiByZW1vdmVDbGFzcyAoZWwsIGNscykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKCFjbHMgfHwgIShjbHMgPSBjbHMudHJpbSgpKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKGVsLmNsYXNzTGlzdCkge1xuICAgIGlmIChjbHMuaW5kZXhPZignICcpID4gLTEpIHtcbiAgICAgIGNscy5zcGxpdCh3aGl0ZXNwYWNlUkUpLmZvckVhY2goZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGVsLmNsYXNzTGlzdC5yZW1vdmUoYyk7IH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKGNscyk7XG4gICAgfVxuICAgIGlmICghZWwuY2xhc3NMaXN0Lmxlbmd0aCkge1xuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKCdjbGFzcycpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgY3VyID0gXCIgXCIgKyAoZWwuZ2V0QXR0cmlidXRlKCdjbGFzcycpIHx8ICcnKSArIFwiIFwiO1xuICAgIHZhciB0YXIgPSAnICcgKyBjbHMgKyAnICc7XG4gICAgd2hpbGUgKGN1ci5pbmRleE9mKHRhcikgPj0gMCkge1xuICAgICAgY3VyID0gY3VyLnJlcGxhY2UodGFyLCAnICcpO1xuICAgIH1cbiAgICBjdXIgPSBjdXIudHJpbSgpO1xuICAgIGlmIChjdXIpIHtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCBjdXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoJ2NsYXNzJyk7XG4gICAgfVxuICB9XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiByZXNvbHZlVHJhbnNpdGlvbiAoZGVmJCQxKSB7XG4gIGlmICghZGVmJCQxKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKHR5cGVvZiBkZWYkJDEgPT09ICdvYmplY3QnKSB7XG4gICAgdmFyIHJlcyA9IHt9O1xuICAgIGlmIChkZWYkJDEuY3NzICE9PSBmYWxzZSkge1xuICAgICAgZXh0ZW5kKHJlcywgYXV0b0Nzc1RyYW5zaXRpb24oZGVmJCQxLm5hbWUgfHwgJ3YnKSk7XG4gICAgfVxuICAgIGV4dGVuZChyZXMsIGRlZiQkMSk7XG4gICAgcmV0dXJuIHJlc1xuICB9IGVsc2UgaWYgKHR5cGVvZiBkZWYkJDEgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGF1dG9Dc3NUcmFuc2l0aW9uKGRlZiQkMSlcbiAgfVxufVxuXG52YXIgYXV0b0Nzc1RyYW5zaXRpb24gPSBjYWNoZWQoZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnRlckNsYXNzOiAobmFtZSArIFwiLWVudGVyXCIpLFxuICAgIGVudGVyVG9DbGFzczogKG5hbWUgKyBcIi1lbnRlci10b1wiKSxcbiAgICBlbnRlckFjdGl2ZUNsYXNzOiAobmFtZSArIFwiLWVudGVyLWFjdGl2ZVwiKSxcbiAgICBsZWF2ZUNsYXNzOiAobmFtZSArIFwiLWxlYXZlXCIpLFxuICAgIGxlYXZlVG9DbGFzczogKG5hbWUgKyBcIi1sZWF2ZS10b1wiKSxcbiAgICBsZWF2ZUFjdGl2ZUNsYXNzOiAobmFtZSArIFwiLWxlYXZlLWFjdGl2ZVwiKVxuICB9XG59KTtcblxudmFyIGhhc1RyYW5zaXRpb24gPSBpbkJyb3dzZXIgJiYgIWlzSUU5O1xudmFyIFRSQU5TSVRJT04gPSAndHJhbnNpdGlvbic7XG52YXIgQU5JTUFUSU9OID0gJ2FuaW1hdGlvbic7XG5cbi8vIFRyYW5zaXRpb24gcHJvcGVydHkvZXZlbnQgc25pZmZpbmdcbnZhciB0cmFuc2l0aW9uUHJvcCA9ICd0cmFuc2l0aW9uJztcbnZhciB0cmFuc2l0aW9uRW5kRXZlbnQgPSAndHJhbnNpdGlvbmVuZCc7XG52YXIgYW5pbWF0aW9uUHJvcCA9ICdhbmltYXRpb24nO1xudmFyIGFuaW1hdGlvbkVuZEV2ZW50ID0gJ2FuaW1hdGlvbmVuZCc7XG5pZiAoaGFzVHJhbnNpdGlvbikge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKHdpbmRvdy5vbnRyYW5zaXRpb25lbmQgPT09IHVuZGVmaW5lZCAmJlxuICAgI
118HdpbmRvdy5vbndlYmtpdHRyYW5zaXRpb25lbmQgIT09IHVuZGVmaW5lZFxuICApIHtcbiAgICB0cmFuc2l0aW9uUHJvcCA9ICdXZWJraXRUcmFuc2l0aW9uJztcbiAgICB0cmFuc2l0aW9uRW5kRXZlbnQgPSAnd2Via2l0VHJhbnNpdGlvbkVuZCc7XG4gIH1cbiAgaWYgKHdpbmRvdy5vbmFuaW1hdGlvbmVuZCA9PT0gdW5kZWZpbmVkICYmXG4gICAgd2luZG93Lm9ud2Via2l0YW5pbWF0aW9uZW5kICE9PSB1bmRlZmluZWRcbiAgKSB7XG4gICAgYW5pbWF0aW9uUHJvcCA9ICdXZWJraXRBbmltYXRpb24nO1xuICAgIGFuaW1hdGlvbkVuZEV2ZW50ID0gJ3dlYmtpdEFuaW1hdGlvbkVuZCc7XG4gIH1cbn1cblxuLy8gYmluZGluZyB0byB3aW5kb3cgaXMgbmVjZXNzYXJ5IHRvIG1ha2UgaG90IHJlbG9hZCB3b3JrIGluIElFIGluIHN0cmljdCBtb2RlXG52YXIgcmFmID0gaW5Ccm93c2VyXG4gID8gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZVxuICAgID8gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdylcbiAgICA6IHNldFRpbWVvdXRcbiAgOiAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyBmdW5jdGlvbiAoZm4pIHsgcmV0dXJuIGZuKCk7IH07XG5cbmZ1bmN0aW9uIG5leHRGcmFtZSAoZm4pIHtcbiAgcmFmKGZ1bmN0aW9uICgpIHtcbiAgICByYWYoZm4pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gYWRkVHJhbnNpdGlvbkNsYXNzIChlbCwgY2xzKSB7XG4gIHZhciB0cmFuc2l0aW9uQ2xhc3NlcyA9IGVsLl90cmFuc2l0aW9uQ2xhc3NlcyB8fCAoZWwuX3RyYW5zaXRpb25DbGFzc2VzID0gW10pO1xuICBpZiAodHJhbnNpdGlvbkNsYXNzZXMuaW5kZXhPZihjbHMpIDwgMCkge1xuICAgIHRyYW5zaXRpb25DbGFzc2VzLnB1c2goY2xzKTtcbiAgICBhZGRDbGFzcyhlbCwgY2xzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW1vdmVUcmFuc2l0aW9uQ2xhc3MgKGVsLCBjbHMpIHtcbiAgaWYgKGVsLl90cmFuc2l0aW9uQ2xhc3Nlcykge1xuICAgIHJlbW92ZShlbC5fdHJhbnNpdGlvbkNsYXNzZXMsIGNscyk7XG4gIH1cbiAgcmVtb3ZlQ2xhc3MoZWwsIGNscyk7XG59XG5cbmZ1bmN0aW9uIHdoZW5UcmFuc2l0aW9uRW5kcyAoXG4gIGVsLFxuICBleHBlY3RlZFR5cGUsXG4gIGNiXG4pIHtcbiAgdmFyIHJlZiA9IGdldFRyYW5zaXRpb25JbmZvKGVsLCBleHBlY3RlZFR5cGUpO1xuICB2YXIgdHlwZSA9IHJlZi50eXBlO1xuICB2YXIgdGltZW91dCA9IHJlZi50aW1lb3V0O1xuICB2YXIgcHJvcENvdW50ID0gcmVmLnByb3BDb3VudDtcbiAgaWYgKCF0eXBlKSB7IHJldHVybiBjYigpIH1cbiAgdmFyIGV2ZW50ID0gdHlwZSA9PT0gVFJBTlNJVElPTiA/IHRyYW5zaXRpb25FbmRFdmVudCA6IGFuaW1hdGlvbkVuZEV2ZW50O1xuICB2YXIgZW5kZWQgPSAwO1xuICB2YXIgZW5kID0gZnVuY3Rpb24gKCkge1xuICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIG9uRW5kKTtcbiAgICBjYigpO1xuICB9O1xuICB2YXIgb25FbmQgPSBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChlLnRhcmdldCA9PT0gZWwpIHtcbiAgICAgIGlmICgrK2VuZGVkID49IHByb3BDb3VudCkge1xuICAgICAgICBlbmQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgIGlmIChlbmRlZCA8IHByb3BDb3VudCkge1xuICAgICAgZW5kKCk7XG4gICAgfVxuICB9LCB0aW1lb3V0ICsgMSk7XG4gIGVsLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIG9uRW5kKTtcbn1cblxudmFyIHRyYW5zZm9ybVJFID0gL1xcYih0cmFuc2Zvcm18YWxsKSgsfCQpLztcblxuZnVuY3Rpb24gZ2V0VHJhbnNpdGlvbkluZm8gKGVsLCBleHBlY3RlZFR5cGUpIHtcbiAgdmFyIHN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsKTtcbiAgLy8gSlNET00gbWF5IHJldHVybiB1bmRlZmluZWQgZm9yIHRyYW5zaXRpb24gcHJvcGVydGllc1xuICB2YXIgdHJhbnNpdGlvbkRlbGF5cyA9IChzdHlsZXNbdHJhbnNpdGlvblByb3AgKyAnRGVsYXknXSB8fCAnJykuc3BsaXQoJywgJyk7XG4gIHZhciB0cmFuc2l0aW9uRHVyYXRpb25zID0gKHN0eWxlc1t0cmFuc2l0aW9uUHJvcCArICdEdXJhdGlvbiddIHx8ICcnKS5zcGxpdCgnLCAnKTtcbiAgdmFyIHRyYW5zaXRpb25UaW1lb3V0ID0gZ2V0VGltZW91dCh0cmFuc2l0aW9uRGVsYXlzLCB0cmFuc2l0aW9uRHVyYXRpb25zKTtcbiAgdmFyIGFuaW1hdGlvbkRlbGF5cyA9IChzdHlsZXNbYW5pbWF0aW9uUHJvcCArICdEZWxheSddIHx8ICcnKS5zcGxpdCgnLCAnKTtcbiAgdmFyIGFuaW1hdGlvbkR1cmF0aW9ucyA9IChzdHlsZXNbYW5pbWF0aW9uUHJvcCArICdEdXJhdGlvbiddIHx8ICcnKS5zcGxpdCgnLCAnKTtcbiAgdmFyIGFuaW1hdGlvblRpbWVvdXQgP
118SBnZXRUaW1lb3V0KGFuaW1hdGlvbkRlbGF5cywgYW5pbWF0aW9uRHVyYXRpb25zKTtcblxuICB2YXIgdHlwZTtcbiAgdmFyIHRpbWVvdXQgPSAwO1xuICB2YXIgcHJvcENvdW50ID0gMDtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChleHBlY3RlZFR5cGUgPT09IFRSQU5TSVRJT04pIHtcbiAgICBpZiAodHJhbnNpdGlvblRpbWVvdXQgPiAwKSB7XG4gICAgICB0eXBlID0gVFJBTlNJVElPTjtcbiAgICAgIHRpbWVvdXQgPSB0cmFuc2l0aW9uVGltZW91dDtcbiAgICAgIHByb3BDb3VudCA9IHRyYW5zaXRpb25EdXJhdGlvbnMubGVuZ3RoO1xuICAgIH1cbiAgfSBlbHNlIGlmIChleHBlY3RlZFR5cGUgPT09IEFOSU1BVElPTikge1xuICAgIGlmIChhbmltYXRpb25UaW1lb3V0ID4gMCkge1xuICAgICAgdHlwZSA9IEFOSU1BVElPTjtcbiAgICAgIHRpbWVvdXQgPSBhbmltYXRpb25UaW1lb3V0O1xuICAgICAgcHJvcENvdW50ID0gYW5pbWF0aW9uRHVyYXRpb25zLmxlbmd0aDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGltZW91dCA9IE1hdGgubWF4KHRyYW5zaXRpb25UaW1lb3V0LCBhbmltYXRpb25UaW1lb3V0KTtcbiAgICB0eXBlID0gdGltZW91dCA+IDBcbiAgICAgID8gdHJhbnNpdGlvblRpbWVvdXQgPiBhbmltYXRpb25UaW1lb3V0XG4gICAgICAgID8gVFJBTlNJVElPTlxuICAgICAgICA6IEFOSU1BVElPTlxuICAgICAgOiBudWxsO1xuICAgIHByb3BDb3VudCA9IHR5cGVcbiAgICAgID8gdHlwZSA9PT0gVFJBTlNJVElPTlxuICAgICAgICA/IHRyYW5zaXRpb25EdXJhdGlvbnMubGVuZ3RoXG4gICAgICAgIDogYW5pbWF0aW9uRHVyYXRpb25zLmxlbmd0aFxuICAgICAgOiAwO1xuICB9XG4gIHZhciBoYXNUcmFuc2Zvcm0gPVxuICAgIHR5cGUgPT09IFRSQU5TSVRJT04gJiZcbiAgICB0cmFuc2Zvcm1SRS50ZXN0KHN0eWxlc1t0cmFuc2l0aW9uUHJvcCArICdQcm9wZXJ0eSddKTtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiB0eXBlLFxuICAgIHRpbWVvdXQ6IHRpbWVvdXQsXG4gICAgcHJvcENvdW50OiBwcm9wQ291bnQsXG4gICAgaGFzVHJhbnNmb3JtOiBoYXNUcmFuc2Zvcm1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRUaW1lb3V0IChkZWxheXMsIGR1cmF0aW9ucykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICB3aGlsZSAoZGVsYXlzLmxlbmd0aCA8IGR1cmF0aW9ucy5sZW5ndGgpIHtcbiAgICBkZWxheXMgPSBkZWxheXMuY29uY2F0KGRlbGF5cyk7XG4gIH1cblxuICByZXR1cm4gTWF0aC5tYXguYXBwbHkobnVsbCwgZHVyYXRpb25zLm1hcChmdW5jdGlvbiAoZCwgaSkge1xuICAgIHJldHVybiB0b01zKGQpICsgdG9NcyhkZWxheXNbaV0pXG4gIH0pKVxufVxuXG4vLyBPbGQgdmVyc2lvbnMgb2YgQ2hyb21pdW0gKGJlbG93IDYxLjAuMzE2My4xMDApIGZvcm1hdHMgZmxvYXRpbmcgcG9pbnRlciBudW1iZXJzXG4vLyBpbiBhIGxvY2FsZS1kZXBlbmRlbnQgd2F5LCB1c2luZyBhIGNvbW1hIGluc3RlYWQgb2YgYSBkb3QuXG4vLyBJZiBjb21tYSBpcyBub3QgcmVwbGFjZWQgd2l0aCBhIGRvdCwgdGhlIGlucHV0IHdpbGwgYmUgcm91bmRlZCBkb3duIChpLmUuIGFjdGluZ1xuLy8gYXMgYSBmbG9vciBmdW5jdGlvbikgY2F1c2luZyB1bmV4cGVjdGVkIGJlaGF2aW9yc1xuZnVuY3Rpb24gdG9NcyAocykge1xuICByZXR1cm4gTnVtYmVyKHMuc2xpY2UoMCwgLTEpLnJlcGxhY2UoJywnLCAnLicpKSAqIDEwMDBcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGVudGVyICh2bm9kZSwgdG9nZ2xlRGlzcGxheSkge1xuICB2YXIgZWwgPSB2bm9kZS5lbG07XG5cbiAgLy8gY2FsbCBsZWF2ZSBjYWxsYmFjayBub3dcbiAgaWYgKGlzRGVmKGVsLl9sZWF2ZUNiKSkge1xuICAgIGVsLl9sZWF2ZUNiLmNhbmNlbGxlZCA9IHRydWU7XG4gICAgZWwuX2xlYXZlQ2IoKTtcbiAgfVxuXG4gIHZhciBkYXRhID0gcmVzb2x2ZVRyYW5zaXRpb24odm5vZGUuZGF0YS50cmFuc2l0aW9uKTtcbiAgaWYgKGlzVW5kZWYoZGF0YSkpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoaXNEZWYoZWwuX2VudGVyQ2IpIHx8IGVsLm5vZGVUeXBlICE9PSAxKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICB2YXIgY3NzID0gZGF0YS5jc3M7XG4gIHZhciB0eXBlID0gZGF0YS50eXBlO1xuICB2YXIgZW50ZXJDbGFzcyA9IGRhdGEuZW50ZXJDbGFzcztcbiAgdmFyIGVudGVyVG9DbGFzcyA9IGRhdGEuZW50ZXJUb0NsYXNzO1xuICB2YXIgZW50ZXJBY3RpdmVDbGFzcyA9IGRhdGEuZW50ZXJBY3RpdmVDbGFzcztcbiAgdmFyIGFwcGVhckNsYXNzID0gZGF0YS5hcHBlYXJDbGFzcztcbiAgdmFyIGFwcGVhclRvQ2xhc3MgPSBkYXRhLmFwcGVhclRvQ2xhc3M7XG4gIHZhciBhcHBlYXJBY3RpdmVDbGFzcyA9IGRhdGEuYXBwZWFyQWN0aXZlQ2xhc3M7XG4gIHZhciBiZWZvcmVFbnRlciA9IGRhdGEuYmVmb3JlRW50ZXI7XG4gIHZhciBlbnRlciA9IGRhdGEuZW50ZXI7XG4gIHZhciBhZnRlckVudGVyID0gZGF0YS5hZnRlckVudGVyO1xuICB2YXIgZW50ZXJDYW5jZWxsZWQgPSBkYXRhLmVudGVyQ2FuY2VsbGVkO1xuICB2YXIgYmVmb3JlQXBwZWFyID0gZGF0YS5iZWZvcmVBcHBlYXI7XG4gIHZhciBhcHBlYXIgPSBkYXRhLmFwcGVhcjtcbiAgdmFyIGFmdGVyQXBwZWFyID0gZGF0YS5hZnRlckFwcGVhcjtcbiAgdmFyIGFwcGVhckNhbmNlbGxlZCA9IGRhdGEuYXBwZWFyQ2FuY2VsbGVkO1xuICB2YXIgZHVyYXRpb24gPSBkYXRhLmR1cmF0aW9uO1xuXG4gIC8vIGFjdGl2ZUluc3RhbmNlIHdpbGwgYWx3YXlzIGJlIHRoZSA8dHJhbnNpdGlvbj4gY29tcG9uZW50IG1hbmFnaW5nIHRoaXNcbiAgLy8gdHJhbnNpdGlvbi4gT25lIGVkZ2UgY2FzZSB0byBjaGVjayBpcyB3aGVuIHRoZSA8dHJhbnNpdGlvbj4gaXMgcGxhY2VkXG4gIC8vIGFzIHRoZSByb290IG5vZGUgb2YgYSBjaGlsZCBjb21wb25lbnQuIEluIHRoYXQgY2FzZSB3ZSBuZWVkIHRvIGNoZWNrXG4gIC8vIDx0cmFuc2l0aW9uPidzIHBhcmVudCBmb3IgYXBwZWFyIGNoZWNrLlxuICB2YXIgY29udGV4dCA9IGFjdGl2ZUluc3RhbmNlO1xuICB2YXIgdHJhbnNpdGlvbk5vZGUgPSBhY3RpdmVJbnN0YW5jZS4kdm5vZGU7XG4gIHdoaWxlICh0cmFuc2l0aW9uTm9kZSAmJiB0cmFuc2l0aW9uTm9kZS5wYXJlbnQpIHtcbiAgICBjb250ZXh0ID0gdHJhbnNpdGlvbk5vZGUuY29udGV4dDtcbiAgICB0cmFuc2l0aW9uTm9kZSA9IHRyYW5zaXRpb25Ob2RlLnBhcmVudDtcbiAgfVxuXG4gIHZhciBpc0FwcGVhciA9ICFjb250ZXh0Ll9pc01vdW50ZWQgfHwgIXZub2RlLmlzUm9vdEluc2VydDtcblxuICBpZiAoaXNBcHBlYXIgJiYgIWFwcGVhciAmJi
118BhcHBlYXIgIT09ICcnKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICB2YXIgc3RhcnRDbGFzcyA9IGlzQXBwZWFyICYmIGFwcGVhckNsYXNzXG4gICAgPyBhcHBlYXJDbGFzc1xuICAgIDogZW50ZXJDbGFzcztcbiAgdmFyIGFjdGl2ZUNsYXNzID0gaXNBcHBlYXIgJiYgYXBwZWFyQWN0aXZlQ2xhc3NcbiAgICA/IGFwcGVhckFjdGl2ZUNsYXNzXG4gICAgOiBlbnRlckFjdGl2ZUNsYXNzO1xuICB2YXIgdG9DbGFzcyA9IGlzQXBwZWFyICYmIGFwcGVhclRvQ2xhc3NcbiAgICA/IGFwcGVhclRvQ2xhc3NcbiAgICA6IGVudGVyVG9DbGFzcztcblxuICB2YXIgYmVmb3JlRW50ZXJIb29rID0gaXNBcHBlYXJcbiAgICA/IChiZWZvcmVBcHBlYXIgfHwgYmVmb3JlRW50ZXIpXG4gICAgOiBiZWZvcmVFbnRlcjtcbiAgdmFyIGVudGVySG9vayA9IGlzQXBwZWFyXG4gICAgPyAodHlwZW9mIGFwcGVhciA9PT0gJ2Z1bmN0aW9uJyA/IGFwcGVhciA6IGVudGVyKVxuICAgIDogZW50ZXI7XG4gIHZhciBhZnRlckVudGVySG9vayA9IGlzQXBwZWFyXG4gICAgPyAoYWZ0ZXJBcHBlYXIgfHwgYWZ0ZXJFbnRlcilcbiAgICA6IGFmdGVyRW50ZXI7XG4gIHZhciBlbnRlckNhbmNlbGxlZEhvb2sgPSBpc0FwcGVhclxuICAgID8gKGFwcGVhckNhbmNlbGxlZCB8fCBlbnRlckNhbmNlbGxlZClcbiAgICA6IGVudGVyQ2FuY2VsbGVkO1xuXG4gIHZhciBleHBsaWNpdEVudGVyRHVyYXRpb24gPSB0b051bWJlcihcbiAgICBpc09iamVjdChkdXJhdGlvbilcbiAgICAgID8gZHVyYXRpb24uZW50ZXJcbiAgICAgIDogZHVyYXRpb25cbiAgKTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBleHBsaWNpdEVudGVyRHVyYXRpb24gIT0gbnVsbCkge1xuICAgIGNoZWNrRHVyYXRpb24oZXhwbGljaXRFbnRlckR1cmF0aW9uLCAnZW50ZXInLCB2bm9kZSk7XG4gIH1cblxuICB2YXIgZXhwZWN0c0NTUyA9IGNzcyAhPT0gZmFsc2UgJiYgIWlzSUU5O1xuICB2YXIgdXNlcldhbnRzQ29udHJvbCA9IGdldEhvb2tBcmd1bWVudHNMZW5ndGgoZW50ZXJIb29rKTtcblxuICB2YXIgY2IgPSBlbC5fZW50ZXJDYiA9IG9uY2UoZnVuY3Rpb24gKCkge1xuICAgIGlmIChleHBlY3RzQ1NTKSB7XG4gICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIHRvQ2xhc3MpO1xuICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBhY3RpdmVDbGFzcyk7XG4gICAgfVxuICAgIGlmIChjYi5jYW5jZWxsZWQpIHtcbiAgICAgIGlmIChleHBlY3RzQ1NTKSB7XG4gICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgc3RhcnRDbGFzcyk7XG4gICAgICB9XG4gICAgICBlbnRlckNhbmNlbGxlZEhvb2sgJiYgZW50ZXJDYW5jZWxsZWRIb29rKGVsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWZ0ZXJFbnRlckhvb2sgJiYgYWZ0ZXJFbnRlckhvb2soZWwpO1xuICAgIH1cbiAgICBlbC5fZW50ZXJDYiA9IG51bGw7XG4gIH0pO1xuXG4gIGlmICghdm5vZGUuZGF0YS5zaG93KSB7XG4gICAgLy8gcmVtb3ZlIHBlbmRpbmcgbGVhdmUgZWxlbWVudCBvbiBlbnRlciBieSBpbmplY3RpbmcgYW4gaW5zZXJ0IGhvb2tcbiAgICBtZXJnZVZOb2RlSG9vayh2bm9kZSwgJ2luc2VydCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBwYXJlbnQgPSBlbC5wYXJlbnROb2RlO1xuICAgICAgdmFyIHBlbmRpbmdOb2RlID0gcGFyZW50ICYmIHBhcmVudC5fcGVuZGluZyAmJiBwYXJlbnQuX3BlbmRpbmdbdm5vZGUua2V5XTtcbiAgICAgIGlmIChwZW5kaW5nTm9kZSAmJlxuICAgICAgICBwZW5kaW5nTm9kZS50YWcgPT09IHZub2RlLnRhZyAmJlxuICAgICAgICBwZW5kaW5nTm9kZS5lbG0uX2xlYXZlQ2JcbiAgICAgICkge1xuICAgICAgICBwZW5kaW5nTm9kZS5lbG0uX2xlYXZlQ2IoKTtcbiAgICAgIH1cbiAgICAgIGVudGVySG9vayAmJiBlbnRlckhvb2soZWwsIGNiKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIHN0YXJ0IGVudGVyIHRyYW5zaXRpb25cbiAgYmVmb3JlRW50ZXJIb29rICYmIGJlZm9yZUVudGVySG9vayhlbCk7XG4gIGlmIChleHBlY3RzQ1NTKSB7XG4gICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBzdGFydENsYXNzKTtcbiAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGFjdGl2ZUNsYXNzKTtcbiAgICBuZXh0RnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBzdGFydENsYXNzKTtcbiAgICAgIGlmICghY2IuY2FuY2VsbGVkKSB7XG4gICAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgdG9DbGFzcyk7XG4gICAgICAgIGlmICghdXNlcldhbnRzQ29udHJvbCkge1xuICAgICAgICAgIGlmIChpc1ZhbGlkRHVyYXRpb24oZXhwbGljaXRFbnRlckR1cmF0aW9uKSkge1xuICAgICAgICAgICAgc2V0VGltZW91dChjYiwgZXhwbGljaXRFbnRlckR1cmF0aW9uKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd2hlblRyYW5zaXRpb25FbmRzKGVsLCB0eXBlLCBjYik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAodm5vZGUuZGF0YS5zaG93KSB7XG4gICAgdG9nZ2xlRGlzcGxheSAmJiB0b2dnbGVEaXNwbGF5KCk7XG4gICAgZW50ZXJIb29rICYmIGVudGVySG9vayhlbCwgY2IpO1xuICB9XG5cbiAgaWYgKCFleHBlY3RzQ1NTICYmICF1c2VyV2FudHNDb250cm9sKSB7XG4gICAgY2IoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBsZWF2ZSAodm5vZGUsIHJtKSB7XG4gIHZhciBlbCA9IHZub2RlLmVsbTtcblxuICAvLyBjYWxsIGVudGVyIGNhbGxiYWNrIG5vd1xuICBpZiAoaXNEZWYoZWwuX2VudGVyQ2IpKSB7XG4gICAgZWwuX2VudGVyQ2IuY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICBlbC5fZW50ZXJDYigpO1xuICB9XG5cbiAgdmFyIGRhdGEgPSByZXNvbHZlVHJhbnNpdGlvbih2bm9kZS5kYXRhLnRyYW5zaXRpb24pO1xuICBpZiAoaXNVbmRlZihkYXRhKSB8fCBlbC5ub2RlVHlwZSAhPT0gMSkge1xuICAgIHJldHVybiBybSgpXG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGlzRGVmKGVsLl9sZWF2ZUNiKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIGNzcyA9IGRhdGEuY3NzO1xuICB2YXIgdHlwZSA9IGRhdGEudHlwZTtcbiAgdmFyIGxlYXZlQ2xhc3MgPSBkYXRhLmxlYXZlQ2xhc3M7XG4gIHZhciBsZWF2ZVRvQ2xhc3MgPSBkYXRhLmxlYXZlVG9DbGFzcztcbiAgdmFyIGxlYXZlQWN0aXZlQ2xhc3MgPSBkYXRhLmxlYXZlQWN0aXZlQ2xhc3M7XG4gIHZhciBiZWZvcmVMZWF2ZSA9IGRhdGEuYmVmb3JlTGVhdmU7XG4gIHZhciBsZWF2ZSA9IGRhdGEubGVhdmU7XG4gIHZhciBhZnRlckxlYXZlID0gZGF0YS5hZnRlckxlYXZlO1xuICB2YXIgbGVhdmVDYW5jZWxsZWQgPSBkYXRhLmxlYXZlQ2FuY2VsbGVkO1xuICB2YXIgZGVsYXlMZWF2ZSA9IGRhdGEuZGVsYXlMZWF2ZTtcbiAgdmFyIGR1cmF0aW9uID0gZGF0YS5kdXJhdGlvbjtcblxuICB2Y
118XIgZXhwZWN0c0NTUyA9IGNzcyAhPT0gZmFsc2UgJiYgIWlzSUU5O1xuICB2YXIgdXNlcldhbnRzQ29udHJvbCA9IGdldEhvb2tBcmd1bWVudHNMZW5ndGgobGVhdmUpO1xuXG4gIHZhciBleHBsaWNpdExlYXZlRHVyYXRpb24gPSB0b051bWJlcihcbiAgICBpc09iamVjdChkdXJhdGlvbilcbiAgICAgID8gZHVyYXRpb24ubGVhdmVcbiAgICAgIDogZHVyYXRpb25cbiAgKTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpc0RlZihleHBsaWNpdExlYXZlRHVyYXRpb24pKSB7XG4gICAgY2hlY2tEdXJhdGlvbihleHBsaWNpdExlYXZlRHVyYXRpb24sICdsZWF2ZScsIHZub2RlKTtcbiAgfVxuXG4gIHZhciBjYiA9IGVsLl9sZWF2ZUNiID0gb25jZShmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGVsLnBhcmVudE5vZGUgJiYgZWwucGFyZW50Tm9kZS5fcGVuZGluZykge1xuICAgICAgZWwucGFyZW50Tm9kZS5fcGVuZGluZ1t2bm9kZS5rZXldID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKGV4cGVjdHNDU1MpIHtcbiAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVUb0NsYXNzKTtcbiAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVBY3RpdmVDbGFzcyk7XG4gICAgfVxuICAgIGlmIChjYi5jYW5jZWxsZWQpIHtcbiAgICAgIGlmIChleHBlY3RzQ1NTKSB7XG4gICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVDbGFzcyk7XG4gICAgICB9XG4gICAgICBsZWF2ZUNhbmNlbGxlZCAmJiBsZWF2ZUNhbmNlbGxlZChlbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJtKCk7XG4gICAgICBhZnRlckxlYXZlICYmIGFmdGVyTGVhdmUoZWwpO1xuICAgIH1cbiAgICBlbC5fbGVhdmVDYiA9IG51bGw7XG4gIH0pO1xuXG4gIGlmIChkZWxheUxlYXZlKSB7XG4gICAgZGVsYXlMZWF2ZShwZXJmb3JtTGVhdmUpO1xuICB9IGVsc2Uge1xuICAgIHBlcmZvcm1MZWF2ZSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVyZm9ybUxlYXZlICgpIHtcbiAgICAvLyB0aGUgZGVsYXllZCBsZWF2ZSBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gY2FuY2VsbGVkXG4gICAgaWYgKGNiLmNhbmNlbGxlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIC8vIHJlY29yZCBsZWF2aW5nIGVsZW1lbnRcbiAgICBpZiAoIXZub2RlLmRhdGEuc2hvdyAmJiBlbC5wYXJlbnROb2RlKSB7XG4gICAgICAoZWwucGFyZW50Tm9kZS5fcGVuZGluZyB8fCAoZWwucGFyZW50Tm9kZS5fcGVuZGluZyA9IHt9KSlbKHZub2RlLmtleSldID0gdm5vZGU7XG4gICAgfVxuICAgIGJlZm9yZUxlYXZlICYmIGJlZm9yZUxlYXZlKGVsKTtcbiAgICBpZiAoZXhwZWN0c0NTUykge1xuICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZUNsYXNzKTtcbiAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVBY3RpdmVDbGFzcyk7XG4gICAgICBuZXh0RnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlQ2xhc3MpO1xuICAgICAgICBpZiAoIWNiLmNhbmNlbGxlZCkge1xuICAgICAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVUb0NsYXNzKTtcbiAgICAgICAgICBpZiAoIXVzZXJXYW50c0NvbnRyb2wpIHtcbiAgICAgICAgICAgIGlmIChpc1ZhbGlkRHVyYXRpb24oZXhwbGljaXRMZWF2ZUR1cmF0aW9uKSkge1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KGNiLCBleHBsaWNpdExlYXZlRHVyYXRpb24pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgd2hlblRyYW5zaXRpb25FbmRzKGVsLCB0eXBlLCBjYik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgbGVhdmUgJiYgbGVhdmUoZWwsIGNiKTtcbiAgICBpZiAoIWV4cGVjdHNDU1MgJiYgIXVzZXJXYW50c0NvbnRyb2wpIHtcbiAgICAgIGNiKCk7XG4gICAgfVxuICB9XG59XG5cbi8vIG9ubHkgdXNlZCBpbiBkZXYgbW9kZVxuZnVuY3Rpb24gY2hlY2tEdXJhdGlvbiAodmFsLCBuYW1lLCB2bm9kZSkge1xuICBpZiAodHlwZW9mIHZhbCAhPT0gJ251bWJlcicpIHtcbiAgICB3YXJuKFxuICAgICAgXCI8dHJhbnNpdGlvbj4gZXhwbGljaXQgXCIgKyBuYW1lICsgXCIgZHVyYXRpb24gaXMgbm90IGEgdmFsaWQgbnVtYmVyIC0gXCIgK1xuICAgICAgXCJnb3QgXCIgKyAoSlNPTi5zdHJpbmdpZnkodmFsKSkgKyBcIi5cIixcbiAgICAgIHZub2RlLmNvbnRleHRcbiAgICApO1xuICB9IGVsc2UgaWYgKGlzTmFOKHZhbCkpIHtcbiAgICB3YXJuKFxuICAgICAgXCI8dHJhbnNpdGlvbj4gZXhwbGljaXQgXCIgKyBuYW1lICsgXCIgZHVyYXRpb24gaXMgTmFOIC0gXCIgK1xuICAgICAgJ3RoZSBkdXJhdGlvbiBleHByZXNzaW9uIG1pZ2h0IGJlIGluY29ycmVjdC4nLFxuICAgICAgdm5vZGUuY29udGV4dFxuICAgICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNWYWxpZER1cmF0aW9uICh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdudW1iZXInICYmICFpc05hTih2YWwpXG59XG5cbi8qKlxuICogTm9ybWFsaXplIGEgdHJhbnNpdGlvbiBob29rJ3MgYXJndW1lbnQgbGVuZ3RoLiBUaGUgaG9vayBtYXkgYmU6XG4gKiAtIGEgbWVyZ2VkIGhvb2sgKGludm9rZXIpIHdpdGggdGhlIG9yaWdpbmFsIGluIC5mbnNcbiAqIC0gYSB3cmFwcGVkIGNvbXBvbmVudCBtZXRob2QgKGNoZWNrIC5fbGVuZ3RoKVxuICogLSBhIHBsYWluIGZ1bmN0aW9uICgubGVuZ3RoKVxuICovXG5mdW5jdGlvbiBnZXRIb29rQXJndW1lbnRzTGVuZ3RoIChmbikge1xuICBpZiAoaXNVbmRlZihmbikpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICB2YXIgaW52b2tlckZucyA9IGZuLmZucztcbiAgaWYgKGlzRGVmKGludm9rZXJGbnMpKSB7XG4gICAgLy8gaW52b2tlclxuICAgIHJldHVybiBnZXRIb29rQXJndW1lbnRzTGVuZ3RoKFxuICAgICAgQXJyYXkuaXNBcnJheShpbnZva2VyRm5zKVxuICAgICAgICA/IGludm9rZXJGbnNbMF1cbiAgICAgICAgOiBpbnZva2VyRm5zXG4gICAgKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiAoZm4uX2xlbmd0aCB8fCBmbi5sZW5ndGgpID4gMVxuICB9XG59XG5cbmZ1bmN0aW9uIF9lbnRlciAoXywgdm5vZGUpIHtcbiAgaWYgKHZub2Rl
118LmRhdGEuc2hvdyAhPT0gdHJ1ZSkge1xuICAgIGVudGVyKHZub2RlKTtcbiAgfVxufVxuXG52YXIgdHJhbnNpdGlvbiA9IGluQnJvd3NlciA/IHtcbiAgY3JlYXRlOiBfZW50ZXIsXG4gIGFjdGl2YXRlOiBfZW50ZXIsXG4gIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlJCQxICh2bm9kZSwgcm0pIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh2bm9kZS5kYXRhLnNob3cgIT09IHRydWUpIHtcbiAgICAgIGxlYXZlKHZub2RlLCBybSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJtKCk7XG4gICAgfVxuICB9XG59IDoge307XG5cbnZhciBwbGF0Zm9ybU1vZHVsZXMgPSBbXG4gIGF0dHJzLFxuICBrbGFzcyxcbiAgZXZlbnRzLFxuICBkb21Qcm9wcyxcbiAgc3R5bGUsXG4gIHRyYW5zaXRpb25cbl07XG5cbi8qICAqL1xuXG4vLyB0aGUgZGlyZWN0aXZlIG1vZHVsZSBzaG91bGQgYmUgYXBwbGllZCBsYXN0LCBhZnRlciBhbGxcbi8vIGJ1aWx0LWluIG1vZHVsZXMgaGF2ZSBiZWVuIGFwcGxpZWQuXG52YXIgbW9kdWxlcyA9IHBsYXRmb3JtTW9kdWxlcy5jb25jYXQoYmFzZU1vZHVsZXMpO1xuXG52YXIgcGF0Y2ggPSBjcmVhdGVQYXRjaEZ1bmN0aW9uKHsgbm9kZU9wczogbm9kZU9wcywgbW9kdWxlczogbW9kdWxlcyB9KTtcblxuLyoqXG4gKiBOb3QgdHlwZSBjaGVja2luZyB0aGlzIGZpbGUgYmVjYXVzZSBmbG93IGRvZXNuJ3QgbGlrZSBhdHRhY2hpbmdcbiAqIHByb3BlcnRpZXMgdG8gRWxlbWVudHMuXG4gKi9cblxuLyogaXN0YW5idWwgaWdub3JlIGlmICovXG5pZiAoaXNJRTkpIHtcbiAgLy8gaHR0cDovL3d3dy5tYXR0czQxMS5jb20vcG9zdC9pbnRlcm5ldC1leHBsb3Jlci05LW9uaW5wdXQvXG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3NlbGVjdGlvbmNoYW5nZScsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZWwgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgIGlmIChlbCAmJiBlbC52bW9kZWwpIHtcbiAgICAgIHRyaWdnZXIoZWwsICdpbnB1dCcpO1xuICAgIH1cbiAgfSk7XG59XG5cbnZhciBkaXJlY3RpdmUgPSB7XG4gIGluc2VydGVkOiBmdW5jdGlvbiBpbnNlcnRlZCAoZWwsIGJpbmRpbmcsIHZub2RlLCBvbGRWbm9kZSkge1xuICAgIGlmICh2bm9kZS50YWcgPT09ICdzZWxlY3QnKSB7XG4gICAgICAvLyAjNjkwM1xuICAgICAgaWYgKG9sZFZub2RlLmVsbSAmJiAhb2xkVm5vZGUuZWxtLl92T3B0aW9ucykge1xuICAgICAgICBtZXJnZVZOb2RlSG9vayh2bm9kZSwgJ3Bvc3RwYXRjaCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBkaXJlY3RpdmUuY29tcG9uZW50VXBkYXRlZChlbCwgYmluZGluZywgdm5vZGUpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFNlbGVjdGVkKGVsLCBiaW5kaW5nLCB2bm9kZS5jb250ZXh0KTtcbiAgICAgIH1cbiAgICAgIGVsLl92T3B0aW9ucyA9IFtdLm1hcC5jYWxsKGVsLm9wdGlvbnMsIGdldFZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHZub2RlLnRhZyA9PT0gJ3RleHRhcmVhJyB8fCBpc1RleHRJbnB1dFR5cGUoZWwudHlwZSkpIHtcbiAgICAgIGVsLl92TW9kaWZpZXJzID0gYmluZGluZy5tb2RpZmllcnM7XG4gICAgICBpZiAoIWJpbmRpbmcubW9kaWZpZXJzLmxhenkpIHtcbiAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignY29tcG9zaXRpb25zdGFydCcsIG9uQ29tcG9zaXRpb25TdGFydCk7XG4gICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbXBvc2l0aW9uZW5kJywgb25Db21wb3NpdGlvbkVuZCk7XG4gICAgICAgIC8vIFNhZmFyaSA8IDEwLjIgJiBVSVdlYlZpZXcgZG9lc24ndCBmaXJlIGNvbXBvc2l0aW9uZW5kIHdoZW5cbiAgICAgICAgLy8gc3dpdGNoaW5nIGZvY3VzIGJlZm9yZSBjb25maXJtaW5nIGNvbXBvc2l0aW9uIGNob2ljZVxuICAgICAgICAvLyB0aGlzIGFsc28gZml4ZXMgdGhlIGlzc3VlIHdoZXJlIHNvbWUgYnJvd3NlcnMgZS5nLiBpT1MgQ2hyb21lXG4gICAgICAgIC8vIGZpcmVzIFwiY2hhbmdlXCIgaW5zdGVhZCBvZiBcImlucHV0XCIgb24gYXV0b2NvbXBsZXRlLlxuICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBvbkNvbXBvc2l0aW9uRW5kKTtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChpc0lFOSkge1xuICAgICAgICAgIGVsLnZtb2RlbCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY29tcG9uZW50VXBkYXRlZDogZnVuY3Rpb24gY29tcG9uZW50VXBkYXRlZCAoZWwsIGJpbmRpbmcsIHZub2RlKSB7XG4gICAgaWYgKHZub2RlLnRhZyA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgIHNldFNlbGVjdGVkKGVsLCBiaW5kaW5nLCB2bm9kZS5jb250ZXh0KTtcbiAgICAgIC8vIGluIGNhc2UgdGhlIG9wdGlvbnMgcmVuZGVyZWQgYnkgdi1mb3IgaGF2ZSBjaGFuZ2VkLFxuICAgICAgLy8gaXQncyBwb3NzaWJsZSB0aGF0IHRoZSB2YWx1ZSBpcyBvdXQtb2Ytc3luYyB3aXRoIHRoZSByZW5kZXJlZCBvcHRpb25zLlxuICAgICAgLy8gZGV0ZWN0IHN1Y2ggY2FzZXMgYW5kIGZpbHRlciBvdXQgdmFsdWVzIHRoYXQgbm8gbG9uZ2VyIGhhcyBhIG1hdGNoaW5nXG4gICAgICAvLyBvcHRpb24gaW4gdGhlIERPTS5cbiAgICAgIHZhciBwcmV2T3B0aW9ucyA9IGVsLl92T3B0aW9ucztcbiAgICAgIHZhciBjdXJPcHRpb25zID0gZWwuX3ZPcHRpb25zID0gW10ubWFwLmNhbGwoZWwub3B0aW9ucywgZ2V0VmFsdWUpO1xuICAgICAgaWYgKGN1ck9wdGlvbnMuc29tZShmdW5jdGlvbiAobywgaSkgeyByZXR1cm4gIWxvb3NlRXF1YWwobywgcHJldk9wdGlvbnNbaV0pOyB9KSkge1xuICAgICAgICAvLyB0cmlnZ2VyIGNoYW5nZSBldmVudCBpZlxuICAgICAgICAvLyBubyBtYXRjaGluZyBvcHRpb24gZm91bmQgZm9yIGF0IGxlYXN0IG9uZSB2YWx1ZVxuICAgICAgICB2Y
118XIgbmVlZFJlc2V0ID0gZWwubXVsdGlwbGVcbiAgICAgICAgICA/IGJpbmRpbmcudmFsdWUuc29tZShmdW5jdGlvbiAodikgeyByZXR1cm4gaGFzTm9NYXRjaGluZ09wdGlvbih2LCBjdXJPcHRpb25zKTsgfSlcbiAgICAgICAgICA6IGJpbmRpbmcudmFsdWUgIT09IGJpbmRpbmcub2xkVmFsdWUgJiYgaGFzTm9NYXRjaGluZ09wdGlvbihiaW5kaW5nLnZhbHVlLCBjdXJPcHRpb25zKTtcbiAgICAgICAgaWYgKG5lZWRSZXNldCkge1xuICAgICAgICAgIHRyaWdnZXIoZWwsICdjaGFuZ2UnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gc2V0U2VsZWN0ZWQgKGVsLCBiaW5kaW5nLCB2bSkge1xuICBhY3R1YWxseVNldFNlbGVjdGVkKGVsLCBiaW5kaW5nLCB2bSk7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoaXNJRSB8fCBpc0VkZ2UpIHtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIGFjdHVhbGx5U2V0U2VsZWN0ZWQoZWwsIGJpbmRpbmcsIHZtKTtcbiAgICB9LCAwKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhY3R1YWxseVNldFNlbGVjdGVkIChlbCwgYmluZGluZywgdm0pIHtcbiAgdmFyIHZhbHVlID0gYmluZGluZy52YWx1ZTtcbiAgdmFyIGlzTXVsdGlwbGUgPSBlbC5tdWx0aXBsZTtcbiAgaWYgKGlzTXVsdGlwbGUgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgXCI8c2VsZWN0IG11bHRpcGxlIHYtbW9kZWw9XFxcIlwiICsgKGJpbmRpbmcuZXhwcmVzc2lvbikgKyBcIlxcXCI+IFwiICtcbiAgICAgIFwiZXhwZWN0cyBhbiBBcnJheSB2YWx1ZSBmb3IgaXRzIGJpbmRpbmcsIGJ1dCBnb3QgXCIgKyAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKS5zbGljZSg4LCAtMSkpLFxuICAgICAgdm1cbiAgICApO1xuICAgIHJldHVyblxuICB9XG4gIHZhciBzZWxlY3RlZCwgb3B0aW9uO1xuICBmb3IgKHZhciBpID0gMCwgbCA9IGVsLm9wdGlvbnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgb3B0aW9uID0gZWwub3B0aW9uc1tpXTtcbiAgICBpZiAoaXNNdWx0aXBsZSkge1xuICAgICAgc2VsZWN0ZWQgPSBsb29zZUluZGV4T2YodmFsdWUsIGdldFZhbHVlKG9wdGlvbikpID4gLTE7XG4gICAgICBpZiAob3B0aW9uLnNlbGVjdGVkICE9PSBzZWxlY3RlZCkge1xuICAgICAgICBvcHRpb24uc2VsZWN0ZWQgPSBzZWxlY3RlZDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGxvb3NlRXF1YWwoZ2V0VmFsdWUob3B0aW9uKSwgdmFsdWUpKSB7XG4gICAgICAgIGlmIChlbC5zZWxlY3RlZEluZGV4ICE9PSBpKSB7XG4gICAgICAgICAgZWwuc2VsZWN0ZWRJbmRleCA9IGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICghaXNNdWx0aXBsZSkge1xuICAgIGVsLnNlbGVjdGVkSW5kZXggPSAtMTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYXNOb01hdGNoaW5nT3B0aW9uICh2YWx1ZSwgb3B0aW9ucykge1xuICByZXR1cm4gb3B0aW9ucy5ldmVyeShmdW5jdGlvbiAobykgeyByZXR1cm4gIWxvb3NlRXF1YWwobywgdmFsdWUpOyB9KVxufVxuXG5mdW5jdGlvbiBnZXRWYWx1ZSAob3B0aW9uKSB7XG4gIHJldHVybiAnX3ZhbHVlJyBpbiBvcHRpb25cbiAgICA/IG9wdGlvbi5fdmFsdWVcbiAgICA6IG9wdGlvbi52YWx1ZVxufVxuXG5mdW5jdGlvbiBvbkNvbXBvc2l0aW9uU3RhcnQgKGUpIHtcbiAgZS50YXJnZXQuY29tcG9zaW5nID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gb25Db21wb3NpdGlvbkVuZCAoZSkge1xuICAvLyBwcmV2ZW50IHRyaWdnZXJpbmcgYW4gaW5wdXQgZXZlbnQgZm9yIG5vIHJlYXNvblxuICBpZiAoIWUudGFyZ2V0LmNvbXBvc2luZykgeyByZXR1cm4gfVxuICBlLnRhcmdldC5jb21wb3NpbmcgPSBmYWxzZTtcbiAgdHJpZ2dlcihlLnRhcmdldCwgJ2lucHV0Jyk7XG59XG5cbmZ1bmN0aW9uIHRyaWdnZXIgKGVsLCB0eXBlKSB7XG4gIHZhciBlID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0hUTUxFdmVudHMnKTtcbiAgZS5pbml0RXZlbnQodHlwZSwgdHJ1ZSwgdHJ1ZSk7XG4gIGVsLmRpc3BhdGNoRXZlbnQoZSk7XG59XG5cbi8qICAqL1xuXG4vLyByZWN1cnNpdmVseSBzZWFyY2ggZm9yIHBvc3NpYmxlIHRyYW5zaXRpb24gZGVmaW5lZCBpbnNpZGUgdGhlIGNvbXBvbmVudCByb290XG5mdW5jdGlvbiBsb2NhdGVOb2RlICh2bm9kZSkge1xuICByZXR1cm4gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgJiYgKCF2bm9kZS5kYXRhIHx8ICF2bm9kZS5kYXRhLnRyYW5zaXRpb24pXG4gICAgPyBsb2NhdGVOb2RlKHZub2RlLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZSlcbiAgICA6IHZub2RlXG59XG5cbnZhciBzaG93ID0ge1xuICBiaW5kOiBmdW5jdGlvbiBiaW5kIChlbCwgcmVmLCB2bm9kZSkge1xuICAgIHZhciB2YWx1ZSA9IHJlZi52YWx1ZTtcblxuICAgIHZub2RlID0gbG9jYXRlTm9kZSh2bm9kZSk7XG4gICAgdmFyIHRyYW5zaXRpb24kJDEgPSB2bm9kZS5kYXRhICYmIHZub2RlLmRhdGEudHJhbnNpdGlvbjtcbiAgICB2YXIgb3JpZ2luYWxEaXNwbGF5ID0gZWwuX192T3JpZ2luYWxEaXNwbGF5ID1cbiAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPT09ICdub25lJyA/ICcnIDogZWwuc3R5bGUuZGlzcGxheTtcbiAgICBpZiAodmFsdWUgJiYgdHJhbnNpdGlvbiQkMSkge1xuICAgICAgdm5vZGUuZGF0YS5zaG93ID0gdHJ1ZTtcbiAgICAgIGVudGVyKHZub2RlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSBvcmlnaW5hbERpc3BsYXk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IHZhbHVlID8gb3JpZ2luYWxEaXNwbGF5IDogJ25vbmUnO1xuICAgIH1cbiAgfSxcblxuICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZSAoZWwsIHJlZiwgdm5vZGUpIHtcbiAgICB2YXIgdmFsdWUgPSByZWYudmFsdWU7XG4gICAgdmFyIG9sZFZhbHVlID0gcmVmLm9sZFZhbHVlO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCF2YWx1ZSA9PT0gIW9sZFZhbHVlKSB7IHJldHVybi
118B9XG4gICAgdm5vZGUgPSBsb2NhdGVOb2RlKHZub2RlKTtcbiAgICB2YXIgdHJhbnNpdGlvbiQkMSA9IHZub2RlLmRhdGEgJiYgdm5vZGUuZGF0YS50cmFuc2l0aW9uO1xuICAgIGlmICh0cmFuc2l0aW9uJCQxKSB7XG4gICAgICB2bm9kZS5kYXRhLnNob3cgPSB0cnVlO1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGVudGVyKHZub2RlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IGVsLl9fdk9yaWdpbmFsRGlzcGxheTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZWF2ZSh2bm9kZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gdmFsdWUgPyBlbC5fX3ZPcmlnaW5hbERpc3BsYXkgOiAnbm9uZSc7XG4gICAgfVxuICB9LFxuXG4gIHVuYmluZDogZnVuY3Rpb24gdW5iaW5kIChcbiAgICBlbCxcbiAgICBiaW5kaW5nLFxuICAgIHZub2RlLFxuICAgIG9sZFZub2RlLFxuICAgIGlzRGVzdHJveVxuICApIHtcbiAgICBpZiAoIWlzRGVzdHJveSkge1xuICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IGVsLl9fdk9yaWdpbmFsRGlzcGxheTtcbiAgICB9XG4gIH1cbn07XG5cbnZhciBwbGF0Zm9ybURpcmVjdGl2ZXMgPSB7XG4gIG1vZGVsOiBkaXJlY3RpdmUsXG4gIHNob3c6IHNob3dcbn07XG5cbi8qICAqL1xuXG52YXIgdHJhbnNpdGlvblByb3BzID0ge1xuICBuYW1lOiBTdHJpbmcsXG4gIGFwcGVhcjogQm9vbGVhbixcbiAgY3NzOiBCb29sZWFuLFxuICBtb2RlOiBTdHJpbmcsXG4gIHR5cGU6IFN0cmluZyxcbiAgZW50ZXJDbGFzczogU3RyaW5nLFxuICBsZWF2ZUNsYXNzOiBTdHJpbmcsXG4gIGVudGVyVG9DbGFzczogU3RyaW5nLFxuICBsZWF2ZVRvQ2xhc3M6IFN0cmluZyxcbiAgZW50ZXJBY3RpdmVDbGFzczogU3RyaW5nLFxuICBsZWF2ZUFjdGl2ZUNsYXNzOiBTdHJpbmcsXG4gIGFwcGVhckNsYXNzOiBTdHJpbmcsXG4gIGFwcGVhckFjdGl2ZUNsYXNzOiBTdHJpbmcsXG4gIGFwcGVhclRvQ2xhc3M6IFN0cmluZyxcbiAgZHVyYXRpb246IFtOdW1iZXIsIFN0cmluZywgT2JqZWN0XVxufTtcblxuLy8gaW4gY2FzZSB0aGUgY2hpbGQgaXMgYWxzbyBhbiBhYnN0cmFjdCBjb21wb25lbnQsIGUuZy4gPGtlZXAtYWxpdmU+XG4vLyB3ZSB3YW50IHRvIHJlY3Vyc2l2ZWx5IHJldHJpZXZlIHRoZSByZWFsIGNvbXBvbmVudCB0byBiZSByZW5kZXJlZFxuZnVuY3Rpb24gZ2V0UmVhbENoaWxkICh2bm9kZSkge1xuICB2YXIgY29tcE9wdGlvbnMgPSB2bm9kZSAmJiB2bm9kZS5jb21wb25lbnRPcHRpb25zO1xuICBpZiAoY29tcE9wdGlvbnMgJiYgY29tcE9wdGlvbnMuQ3Rvci5vcHRpb25zLmFic3RyYWN0KSB7XG4gICAgcmV0dXJuIGdldFJlYWxDaGlsZChnZXRGaXJzdENvbXBvbmVudENoaWxkKGNvbXBPcHRpb25zLmNoaWxkcmVuKSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdm5vZGVcbiAgfVxufVxuXG5mdW5jdGlvbiBleHRyYWN0VHJhbnNpdGlvbkRhdGEgKGNvbXApIHtcbiAgdmFyIGRhdGEgPSB7fTtcbiAgdmFyIG9wdGlvbnMgPSBjb21wLiRvcHRpb25zO1xuICAvLyBwcm9wc1xuICBmb3IgKHZhciBrZXkgaW4gb3B0aW9ucy5wcm9wc0RhdGEpIHtcbiAgICBkYXRhW2tleV0gPSBjb21wW2tleV07XG4gIH1cbiAgLy8gZXZlbnRzLlxuICAvLyBleHRyYWN0IGxpc3RlbmVycyBhbmQgcGFzcyB0aGVtIGRpcmVjdGx5IHRvIHRoZSB0cmFuc2l0aW9uIG1ldGhvZHNcbiAgdmFyIGxpc3RlbmVycyA9IG9wdGlvbnMuX3BhcmVudExpc3RlbmVycztcbiAgZm9yICh2YXIga2V5JDEgaW4gbGlzdGVuZXJzKSB7XG4gICAgZGF0YVtjYW1lbGl6ZShrZXkkMSldID0gbGlzdGVuZXJzW2tleSQxXTtcbiAgfVxuICByZXR1cm4gZGF0YVxufVxuXG5mdW5jdGlvbiBwbGFjZWhvbGRlciAoaCwgcmF3Q2hpbGQpIHtcbiAgaWYgKC9cXGQta2VlcC1hbGl2ZSQvLnRlc3QocmF3Q2hpbGQudGFnKSkge1xuICAgIHJldHVybiBoKCdrZWVwLWFsaXZlJywge1xuICAgICAgcHJvcHM6IHJhd0NoaWxkLmNvbXBvbmVudE9wdGlvbnMucHJvcHNEYXRhXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBoYXNQYXJlbnRUcmFuc2l0aW9uICh2bm9kZSkge1xuICB3aGlsZSAoKHZub2RlID0gdm5vZGUucGFyZW50KSkge1xuICAgIGlmICh2bm9kZS5kYXRhLnRyYW5zaXRpb24pIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzU2FtZUNoaWxkIChjaGlsZCwgb2xkQ2hpbGQpIHtcbiAgcmV0dXJuIG9sZENoaWxkLmtleSA9PT0gY2hpbGQua2V5ICYmIG9sZENoaWxkLnRhZyA9PT0gY2hpbGQudGFnXG59XG5cbnZhciBpc05vdFRleHROb2RlID0gZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGMudGFnIHx8IGlzQXN5bmNQbGFjZWhvbGRlcihjKTsgfTtcblxudmFyIGlzVlNob3dEaXJlY3RpdmUgPSBmdW5jdGlvbiAoZCkgeyByZXR1cm4gZC5uYW1lID09PSAnc2hvdyc7IH07XG5cbnZhciBUcmFuc2l0aW9uID0ge1xuICBuYW1lOiAndHJhbnNpdGlvbicsXG4gIHByb3BzOiB0cmFuc2l0aW9uUHJvcHMsXG4gIGFic3RyYWN0OiB0cnVlLFxuXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyIChoKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLiRzbG90cy5kZWZh
118dWx0O1xuICAgIGlmICghY2hpbGRyZW4pIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIGZpbHRlciBvdXQgdGV4dCBub2RlcyAocG9zc2libGUgd2hpdGVzcGFjZXMpXG4gICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5maWx0ZXIoaXNOb3RUZXh0Tm9kZSk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIHdhcm4gbXVsdGlwbGUgZWxlbWVudHNcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBjaGlsZHJlbi5sZW5ndGggPiAxKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAnPHRyYW5zaXRpb24+IGNhbiBvbmx5IGJlIHVzZWQgb24gYSBzaW5nbGUgZWxlbWVudC4gVXNlICcgK1xuICAgICAgICAnPHRyYW5zaXRpb24tZ3JvdXA+IGZvciBsaXN0cy4nLFxuICAgICAgICB0aGlzLiRwYXJlbnRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIG1vZGUgPSB0aGlzLm1vZGU7XG5cbiAgICAvLyB3YXJuIGludmFsaWQgbW9kZVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICBtb2RlICYmIG1vZGUgIT09ICdpbi1vdXQnICYmIG1vZGUgIT09ICdvdXQtaW4nXG4gICAgKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAnaW52YWxpZCA8dHJhbnNpdGlvbj4gbW9kZTogJyArIG1vZGUsXG4gICAgICAgIHRoaXMuJHBhcmVudFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB2YXIgcmF3Q2hpbGQgPSBjaGlsZHJlblswXTtcblxuICAgIC8vIGlmIHRoaXMgaXMgYSBjb21wb25lbnQgcm9vdCBub2RlIGFuZCB0aGUgY29tcG9uZW50J3NcbiAgICAvLyBwYXJlbnQgY29udGFpbmVyIG5vZGUgYWxzbyBoYXMgdHJhbnNpdGlvbiwgc2tpcC5cbiAgICBpZiAoaGFzUGFyZW50VHJhbnNpdGlvbih0aGlzLiR2bm9kZSkpIHtcbiAgICAgIHJldHVybiByYXdDaGlsZFxuICAgIH1cblxuICAgIC8vIGFwcGx5IHRyYW5zaXRpb24gZGF0YSB0byBjaGlsZFxuICAgIC8vIHVzZSBnZXRSZWFsQ2hpbGQoKSB0byBpZ25vcmUgYWJzdHJhY3QgY29tcG9uZW50cyBlLmcuIGtlZXAtYWxpdmVcbiAgICB2YXIgY2hpbGQgPSBnZXRSZWFsQ2hpbGQocmF3Q2hpbGQpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghY2hpbGQpIHtcbiAgICAgIHJldHVybiByYXdDaGlsZFxuICAgIH1cblxuICAgIGlmICh0aGlzLl9sZWF2aW5nKSB7XG4gICAgICByZXR1cm4gcGxhY2Vob2xkZXIoaCwgcmF3Q2hpbGQpXG4gICAgfVxuXG4gICAgLy8gZW5zdXJlIGEga2V5IHRoYXQgaXMgdW5pcXVlIHRvIHRoZSB2bm9kZSB0eXBlIGFuZCB0byB0aGlzIHRyYW5zaXRpb25cbiAgICAvLyBjb21wb25lbnQgaW5zdGFuY2UuIFRoaXMga2V5IHdpbGwgYmUgdXNlZCB0byByZW1vdmUgcGVuZGluZyBsZWF2aW5nIG5vZGVzXG4gICAgLy8gZHVyaW5nIGVudGVyaW5nLlxuICAgIHZhciBpZCA9IFwiX190cmFuc2l0aW9uLVwiICsgKHRoaXMuX3VpZCkgKyBcIi1cIjtcbiAgICBjaGlsZC5rZXkgPSBjaGlsZC5rZXkgPT0gbnVsbFxuICAgICAgPyBjaGlsZC5pc0NvbW1lbnRcbiAgICAgICAgPyBpZCArICdjb21tZW50J1xuICAgICAgICA6IGlkICsgY2hpbGQudGFnXG4gICAgICA6IGlzUHJpbWl0aXZlKGNoaWxkLmtleSlcbiAgICAgICAgPyAoU3RyaW5nKGNoaWxkLmtleSkuaW5kZXhPZihpZCkgPT09IDAgPyBjaGlsZC5rZXkgOiBpZCArIGNoaWxkLmtleSlcbiAgICAgICAgOiBjaGlsZC5rZXk7XG5cbiAgICB2YXIgZGF0YSA9IChjaGlsZC5kYXRhIHx8IChjaGlsZC5kYXRhID0ge30pKS50cmFuc2l0aW9uID0gZXh0cmFjdFRyYW5zaXRpb25EYXRhKHRoaXMpO1xuICAgIHZhciBvbGRSYXdDaGlsZCA9IHRoaXMuX3Zub2RlO1xuICAgIHZhciBvbGRDaGlsZCA9IGdldFJlYWxDaGlsZChvbGRSYXdDaGlsZCk7XG5cbiAgICAvLyBtYXJrIHYtc2hvd1xuICAgIC8vIHNvIHRoYXQgdGhlIHRyYW5zaXRpb24gbW9kdWxlIGNhbiBoYW5kIG92ZXIgdGhlIGNvbnRyb2wgdG8gdGhlIGRpcmVjdGl2ZVxuICAgIGlmIChjaGlsZC5kYXRhLmRpcmVjdGl2ZXMgJiYgY2hpbGQuZGF0YS5kaXJlY3RpdmVzLnNvbWUoaXNWU2hvd0RpcmVjdGl2ZSkpIHtcbiAgICAgIGNoaWxkLmRhdGEuc2hvdyA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgb2xkQ2hpbGQgJiZcbiAgICAgIG9sZENoaWxkLmRhdGEgJiZcbiAgICAgICFpc1NhbWVDaGlsZChjaGlsZCwgb2xkQ2hpbGQpICYmXG4gICAgICAhaXNBc3luY1BsYWNlaG9sZGVyKG9sZENoaWxkKSAmJlxuICAgICAgLy8gIzY2ODcgY29tcG9uZW50IHJvb3QgaXMgYSBjb21tZW50IG5vZGVcbiAgICAgICEob2xkQ2hpbGQuY29tcG9uZW50SW5zdGFuY2UgJiYgb2xkQ2hpbGQuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlLmlzQ29tbWVudClcbiAgICApIHtcbiAgICAgIC8vIHJlcGxhY2Ugb2xkIGNoaWxkIHRyYW5zaXRpb24gZGF0YSB3aXRoIGZyZXNoIG9uZVxuICAgICAgLy8gaW1wb3J0YW50IGZvciBkeW5hbWljIHRyYW5zaXRpb25zIVxuICAgICAgdmFyIG9sZERhdGEgPSBvbGRDaGlsZC5kYXRhLnRyYW5zaXRpb24gPSBleHRlbmQoe30sIGRhdGEpO1xuICAgICAgLy8gaGFuZGxlIHRyYW5zaXRpb24gbW9kZVxuICAgICAgaWYgKG1vZGUgPT09ICdvdXQtaW4nKSB7XG4gICAgICAgIC8vIHJldHVybiBwbGFjZWhvbGRlciBub2RlIGFuZCBxdWV1ZSB1cGRhdGUgd2hlbiBsZWF2ZSBmaW5pc2hlc1xuICAgICAgICB0aGlzLl9sZWF2aW5nID0gdHJ1ZTtcbiAgICAgICAgbWVyZ2VWTm9kZUhvb2sob2xkRGF0YSwgJ2FmdGVyTGVhdmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhpcyQxLl9sZWF2aW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcyQxLiRmb3JjZVVwZGF0ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBsYWNlaG9sZGVyKGgsIHJhd0NoaWxkKVxuICAgICAgfSBlbHNlIGlmIChtb2RlID09PSAnaW4tb3V0Jykge1xuICAgICAgICBpZiAoaXNBc3luY1BsYWNlaG9sZGVyKGNoaWxkKSkge1xuICAgICAgICAgI
118HJldHVybiBvbGRSYXdDaGlsZFxuICAgICAgICB9XG4gICAgICAgIHZhciBkZWxheWVkTGVhdmU7XG4gICAgICAgIHZhciBwZXJmb3JtTGVhdmUgPSBmdW5jdGlvbiAoKSB7IGRlbGF5ZWRMZWF2ZSgpOyB9O1xuICAgICAgICBtZXJnZVZOb2RlSG9vayhkYXRhLCAnYWZ0ZXJFbnRlcicsIHBlcmZvcm1MZWF2ZSk7XG4gICAgICAgIG1lcmdlVk5vZGVIb29rKGRhdGEsICdlbnRlckNhbmNlbGxlZCcsIHBlcmZvcm1MZWF2ZSk7XG4gICAgICAgIG1lcmdlVk5vZGVIb29rKG9sZERhdGEsICdkZWxheUxlYXZlJywgZnVuY3Rpb24gKGxlYXZlKSB7IGRlbGF5ZWRMZWF2ZSA9IGxlYXZlOyB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmF3Q2hpbGRcbiAgfVxufTtcblxuLyogICovXG5cbnZhciBwcm9wcyA9IGV4dGVuZCh7XG4gIHRhZzogU3RyaW5nLFxuICBtb3ZlQ2xhc3M6IFN0cmluZ1xufSwgdHJhbnNpdGlvblByb3BzKTtcblxuZGVsZXRlIHByb3BzLm1vZGU7XG5cbnZhciBUcmFuc2l0aW9uR3JvdXAgPSB7XG4gIHByb3BzOiBwcm9wcyxcblxuICBiZWZvcmVNb3VudDogZnVuY3Rpb24gYmVmb3JlTW91bnQgKCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIHVwZGF0ZSA9IHRoaXMuX3VwZGF0ZTtcbiAgICB0aGlzLl91cGRhdGUgPSBmdW5jdGlvbiAodm5vZGUsIGh5ZHJhdGluZykge1xuICAgICAgdmFyIHJlc3RvcmVBY3RpdmVJbnN0YW5jZSA9IHNldEFjdGl2ZUluc3RhbmNlKHRoaXMkMSk7XG4gICAgICAvLyBmb3JjZSByZW1vdmluZyBwYXNzXG4gICAgICB0aGlzJDEuX19wYXRjaF9fKFxuICAgICAgICB0aGlzJDEuX3Zub2RlLFxuICAgICAgICB0aGlzJDEua2VwdCxcbiAgICAgICAgZmFsc2UsIC8vIGh5ZHJhdGluZ1xuICAgICAgICB0cnVlIC8vIHJlbW92ZU9ubHkgKCFpbXBvcnRhbnQsIGF2b2lkcyB1bm5lY2Vzc2FyeSBtb3ZlcylcbiAgICAgICk7XG4gICAgICB0aGlzJDEuX3Zub2RlID0gdGhpcyQxLmtlcHQ7XG4gICAgICByZXN0b3JlQWN0aXZlSW5zdGFuY2UoKTtcbiAgICAgIHVwZGF0ZS5jYWxsKHRoaXMkMSwgdm5vZGUsIGh5ZHJhdGluZyk7XG4gICAgfTtcbiAgfSxcblxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlciAoaCkge1xuICAgIHZhciB0YWcgPSB0aGlzLnRhZyB8fCB0aGlzLiR2bm9kZS5kYXRhLnRhZyB8fCAnc3Bhbic7XG4gICAgdmFyIG1hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdmFyIHByZXZDaGlsZHJlbiA9IHRoaXMucHJldkNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcbiAgICB2YXIgcmF3Q2hpbGRyZW4gPSB0aGlzLiRzbG90cy5kZWZh
118dWx0IHx8IFtdO1xuICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICB2YXIgdHJhbnNpdGlvbkRhdGEgPSBleHRyYWN0VHJhbnNpdGlvbkRhdGEodGhpcyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhd0NoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgYyA9IHJhd0NoaWxkcmVuW2ldO1xuICAgICAgaWYgKGMudGFnKSB7XG4gICAgICAgIGlmIChjLmtleSAhPSBudWxsICYmIFN0cmluZyhjLmtleSkuaW5kZXhPZignX192bGlzdCcpICE9PSAwKSB7XG4gICAgICAgICAgY2hpbGRyZW4ucHVzaChjKTtcbiAgICAgICAgICBtYXBbYy5rZXldID0gY1xuICAgICAgICAgIDsoYy5kYXRhIHx8IChjLmRhdGEgPSB7fSkpLnRyYW5zaXRpb24gPSB0cmFuc2l0aW9uRGF0YTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgdmFyIG9wdHMgPSBjLmNvbXBvbmVudE9wdGlvbnM7XG4gICAgICAgICAgdmFyIG5hbWUgPSBvcHRzID8gKG9wdHMuQ3Rvci5vcHRpb25zLm5hbWUgfHwgb3B0cy50YWcgfHwgJycpIDogYy50YWc7XG4gICAgICAgICAgd2FybigoXCI8dHJhbnNpdGlvbi1ncm91cD4gY2hpbGRyZW4gbXVzdCBiZSBrZXllZDogPFwiICsgbmFtZSArIFwiPlwiKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocHJldkNoaWxkcmVuKSB7XG4gICAgICB2YXIga2VwdCA9IFtdO1xuICAgICAgdmFyIHJlbW92ZWQgPSBbXTtcbiAgICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IHByZXZDaGlsZHJlbi5sZW5ndGg7IGkkMSsrKSB7XG4gICAgICAgIHZhciBjJDEgPSBwcmV2Q2hpbGRyZW5baSQxXTtcbiAgICAgICAgYyQxLmRhdGEudHJhbnNpdGlvbiA9IHRyYW5zaXRpb25EYXRhO1xuICAgICAgICBjJDEuZGF0YS5wb3MgPSBjJDEuZWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBpZiAobWFwW2MkMS5rZXldKSB7XG4gICAgICAgICAga2VwdC5wdXNoKGMkMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVtb3ZlZC5wdXNoKGMkMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMua2VwdCA9IGgodGFnLCBudWxsLCBrZXB0KTtcbiAgICAgIHRoaXMucmVtb3ZlZCA9IHJlbW92ZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGgodGFnLCBudWxsLCBjaGlsZHJlbilcbiAgfSxcblxuICB1cGRhdGVkOiBmdW5jdGlvbiB1cGRhdGVkICgpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLnByZXZDaGlsZHJlbjtcbiAgICB2YXIgbW92ZUNsYXNzID0gdGhpcy5tb3ZlQ2xhc3MgfHwgKCh0aGlzLm5hbWUgfHwgJ3YnKSArICctbW92ZScpO1xuICAgIGlmICghY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLmhhc01vdmUoY2hpbGRyZW5bMF0uZWxtLCBtb3ZlQ2xhc3MpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyB3ZSBkaXZpZGUgdGhlIHdvcmsgaW50byB0aHJlZSBsb29wcyB0byBhdm9pZCBtaXhpbmcgRE9NIHJlYWRzIGFuZCB3cml0ZXNcbiAgICAvLyBpbiBlYWNoIGl0ZXJhdGlvbiAtIHdoaWNoIGhlbHBzIHByZXZlbnQgbGF5b3V0IHRocmFzaGluZy5cbiAgICBjaGlsZHJlbi5mb3JFYWNoKGNhbGxQZW5kaW5nQ2JzKTtcbiAgICBjaGlsZHJlbi5mb3JFYWNoKHJlY29yZFBvc2l0aW9uKTtcbiAgICBjaGlsZHJlbi5mb3JFYWNoKGFwcGx5VHJhbnNsYXRpb24pO1xuXG4gICAgLy8gZm9yY2UgcmVmbG93IHRvIHB1dCBldmVyeXRoaW5nIGluIHBvc2l0aW9uXG4gICAgLy8gYXNzaWduIHRvIHRoaXMgdG8gYXZvaWQgYmVpbmcgcmVtb3ZlZCBpbiB0cmVlLXNoYWtpbmdcbiAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICB0aGlzLl9yZWZsb3cgPSBkb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodDtcblxuICAgIGNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGMpIHtcbiAgICAgIGlmIChjLmRhdGEubW92ZWQpIHtcbiAgICAgICAgdmFyIGVsID0gYy5lbG07XG4gICAgICAgIHZhciBzID0gZWwuc3R5bGU7XG4gICAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgbW92ZUNsYXNzKTtcbiAgICAgICAgcy50cmFuc2Zvcm0gPSBzLldlYmtpdFRyYW5zZm9ybSA9IHMudHJhbnNpdGlvbkR1cmF0aW9uID0gJyc7XG4gICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIodHJhbnNpdGlvbkVuZEV2ZW50LCBlbC5fbW92ZUNiID0gZnVuY3Rpb24gY2IgKGUpIHtcbiAgICAgICAgICBpZiAoZSAmJiBlLnRhcmdldCAhPT0gZWwpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWUgfHwgL3RyYW5zZm9ybSQvLnRlc3QoZS5wcm9wZXJ0eU5hbWUpKSB7XG4gICAgICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKHRyYW5zaXRpb25FbmRFdmVudCwgY2IpO1xuICAgICAgICAgICAgZWwuX21vdmVDYiA9IG51bGw7XG4gICAgICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIG1vdmVDbGFzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFzTW92ZTogZnVuY3Rpb24gaGFzTW92ZSAoZWwsIG1vdmVDbGFzcykge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoIWhhc1RyYW5zaXRpb24pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmICh0aGlzLl9oYXNNb3ZlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNNb3ZlXG4gICAgICB9XG4gICAgICAvLyBEZXRlY3Qgd2hldGhlciBhbiBlbGVtZW50IHdpdGggdGhlIG1vdmUgY2xhc3MgYXBwbGllZCBoYXNcbiAgICAgIC8vIENTUyB0cmFuc2l0aW9ucy4gU2luY2UgdGhlIGVsZW1lbnQgbWF5IGJlIGluc2lkZSBhbiBlbnRlcmluZ1xuICAgICAgLy8gdHJhbnNpdGlvbiBhdCB0aGlzIHZlcnkgbW9tZW50LCB3ZSBtYWtlIGEgY2xvbmUgb2YgaXQgYW5kIHJlbW92ZVxuICAgICAgLy8gYWxsIG90aGVyIHRyYW5zaXRpb24gY2xhc3NlcyBhcHBsaWVkIHRvIGVuc3VyZSBvbmx5IHRoZSBtb3ZlIGNsYXNzXG4gICAgICAvLyBpcyBhcHBsaWVkLlxuICAgICAgdmFyIGNsb25lID0gZWwuY2xvbmVOb2RlKCk7XG4gICAgICBpZiAoZWwuX3RyYW5zaXRpb25DbGFzc2VzKSB7XG4gICAgICAgIGVsLl90cmFuc2l0aW9uQ2xhc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uIChjbHMpIHsgcmVtb3ZlQ2xhc3MoY2xvbmUsIGNscyk7IH0pO1xuICAgICAgfVxuICAgICAgYWRkQ2xhc3MoY2xvbmUsIG1vdmVDbGFzcyk7XG4gICAgICBjbG9uZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgdGhpcy4kZWwuYXBwZW5kQ2hpbGQoY2xvbmUpO1xuICAgICAgdmFyIGluZm8gPSBnZXRUcmFuc2l0aW9uSW5mbyhjbG9uZSk7XG4gICAgICB0aGlzLiRlbC5yZW1vdmVDaGlsZChjbG9uZSk7XG4gICAgICByZXR1cm4gKHRoaXMuX2hhc01vdmUgPSBpbmZvLmhhc1RyYW5zZm9ybSlcbiAgICB9XG4gI
118H1cbn07XG5cbmZ1bmN0aW9uIGNhbGxQZW5kaW5nQ2JzIChjKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoYy5lbG0uX21vdmVDYikge1xuICAgIGMuZWxtLl9tb3ZlQ2IoKTtcbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGMuZWxtLl9lbnRlckNiKSB7XG4gICAgYy5lbG0uX2VudGVyQ2IoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWNvcmRQb3NpdGlvbiAoYykge1xuICBjLmRhdGEubmV3UG9zID0gYy5lbG0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG59XG5cbmZ1bmN0aW9uIGFwcGx5VHJhbnNsYXRpb24gKGMpIHtcbiAgdmFyIG9sZFBvcyA9IGMuZGF0YS5wb3M7XG4gIHZhciBuZXdQb3MgPSBjLmRhdGEubmV3UG9zO1xuICB2YXIgZHggPSBvbGRQb3MubGVmdCAtIG5ld1Bvcy5sZWZ0O1xuICB2YXIgZHkgPSBvbGRQb3MudG9wIC0gbmV3UG9zLnRvcDtcbiAgaWYgKGR4IHx8IGR5KSB7XG4gICAgYy5kYXRhLm1vdmVkID0gdHJ1ZTtcbiAgICB2YXIgcyA9IGMuZWxtLnN0eWxlO1xuICAgIHMudHJhbnNmb3JtID0gcy5XZWJraXRUcmFuc2Zvcm0gPSBcInRyYW5zbGF0ZShcIiArIGR4ICsgXCJweCxcIiArIGR5ICsgXCJweClcIjtcbiAgICBzLnRyYW5zaXRpb25EdXJhdGlvbiA9ICcwcyc7XG4gIH1cbn1cblxudmFyIHBsYXRmb3JtQ29tcG9uZW50cyA9IHtcbiAgVHJhbnNpdGlvbjogVHJhbnNpdGlvbixcbiAgVHJhbnNpdGlvbkdyb3VwOiBUcmFuc2l0aW9uR3JvdXBcbn07XG5cbi8qICAqL1xuXG4vLyBpbnN0YWxsIHBsYXRmb3JtIHNwZWNpZmljIHV0aWxzXG5WdWUuY29uZmlnLm11c3RVc2VQcm9wID0gbXVzdFVzZVByb3A7XG5WdWUuY29uZmlnLmlzUmVzZXJ2ZWRUYWcgPSBpc1Jlc2VydmVkVGFnO1xuVnVlLmNvbmZpZy5pc1Jlc2VydmVkQXR0ciA9IGlzUmVzZXJ2ZWRBdHRyO1xuVnVlLmNvbmZpZy5nZXRUYWdOYW1lc3BhY2UgPSBnZXRUYWdOYW1lc3BhY2U7XG5WdWUuY29uZmlnLmlzVW5rbm93bkVsZW1lbnQgPSBpc1Vua25vd25FbGVtZW50O1xuXG4vLyBpbnN0YWxsIHBsYXRmb3JtIHJ1bnRpbWUgZGlyZWN0aXZlcyAmIGNvbXBvbmVudHNcbmV4dGVuZChWdWUub3B0aW9ucy5kaXJlY3RpdmVzLCBwbGF0Zm9ybURpcmVjdGl2ZXMpO1xuZXh0ZW5kKFZ1ZS5vcHRpb25zLmNvbXBvbmVudHMsIHBsYXRmb3JtQ29tcG9uZW50cyk7XG5cbi8vIGluc3RhbGwgcGxhdGZvcm0gcGF0Y2ggZnVuY3Rpb25cblZ1ZS5wcm90b3R5cGUuX19wYXRjaF9fID0gaW5Ccm93c2VyID8gcGF0Y2ggOiBub29wO1xuXG4vLyBwdWJsaWMgbW91bnQgbWV0aG9kXG5WdWUucHJvdG90eXBlLiRtb3VudCA9IGZ1bmN0aW9uIChcbiAgZWwsXG4gIGh5ZHJhdGluZ1xuKSB7XG4gIGVsID0gZWwgJiYgaW5Ccm93c2VyID8gcXVlcnkoZWwpIDogdW5kZWZpbmVkO1xuICByZXR1cm4gbW91bnRDb21wb25lbnQodGhpcywgZWwsIGh5ZHJhdGluZylcbn07XG5cbi8vIGRldnRvb2xzIGdsb2JhbCBob29rXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuaWYgKGluQnJvd3Nlcikge1xuICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY29uZmlnLmRldnRvb2xzKSB7XG4gICAgICBpZiAoZGV2dG9vbHMpIHtcbiAgICAgICAgZGV2dG9vbHMuZW1pdCgnaW5pdCcsIFZ1ZSk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAndGVzdCdcbiAgICAgICkge1xuICAgICAgICBjb25zb2xlW2NvbnNvbGUuaW5mbyA/ICdpbmZvJyA6ICdsb2cnXShcbiAgICAgICAgICAnRG93bmxvYWQgdGhlIFZ1ZSBEZXZ0b29scyBleHRlbnNpb24gZm9yIGEgYmV0dGVyIGRldmVsb3BtZW50IGV4cGVyaWVuY2U6XFxuJyArXG4gICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtZGV2dG9vbHMnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Rlc3QnICYmXG4gICAgICBjb25maWcucHJvZHVjdGlvblRpcCAhPT0gZmFsc2UgJiZcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJ1xuICAgICkge1xuICAgICAgY29uc29sZVtjb25zb2xlLmluZm8gPyAnaW5mbycgOiAnbG9nJ10oXG4gICAgICAgIFwiWW91IGFyZSBydW5uaW5nIFZ1ZSBpbiBkZXZlbG9wbWVudCBtb2RlLlxcblwiICtcbiAgICAgICAgXCJNYWtlIHN1cmUgdG8gdHVybiBvbiBwcm9kdWN0aW9uIG1vZGUgd2hlbiBkZXBsb3lpbmcgZm9yIHByb2R1Y3Rpb24uXFxuXCIgK1xuICAgICAgICBcIlNlZSBtb3JlIHRpcHMgYXQgaHR0cHM6Ly92dWVqcy5vcmcvZ3VpZGUvZGVwbG95bWVudC5odG1sXCJcbiAgICAgICk7XG4gICAgfVxuICB9LCAwKTtcbn1cblxuLyogICovXG5cbnZhciBkZWZhdWx0VGFnUkUgPSAvXFx7XFx7KCg/Oi58XFxyP1xcbikrPylcXH1cXH0vZztcbnZhciByZWdleEVzY2FwZVJFID0gL1stLiorP14ke30oKXxbXFxdXFwvXFxcXF0vZztcblxudmFyIGJ1aWxkUmVnZXggPSBjYWNoZWQoZnVuY3Rpb24gKGRlbGltaXRlcnMpIHtcbiAgdmFyIG9wZW4gPSBkZWxpbWl0ZXJzWzBdLnJlcGxhY2UocmVnZXhFc2NhcGVSRSwgJ1xcXFwkJicpO1xuICB2YXIgY2xvc2UgPSBkZWxpbWl0ZXJzWzFdLnJlcGxhY2UocmVnZXhFc2NhcGVSRSwgJ1xcXFwkJicpO1xuICByZXR1cm4gbmV3IFJlZ0V4cChvcGVuICsgJygoPzoufFxcXFxuKSs/KScgKyBjbG9zZSwgJ2cnKVxufSk7XG5cblxuXG5mdW5jdGlvbiBwYXJzZVRleHQgKFxuICB0ZXh0LFxuICBkZWxpbWl0ZXJzXG4pIHtcbiAgdmFyIHRhZ1JFID0gZGVsaW1pdGVycyA/IGJ1aWxkUmVnZXgoZGVsaW1pdGVycykgOiBkZWZhdWx0VGFnUkU7XG4gIGlmICghdGFnUkUudGVzdCh0ZXh0KSkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciB0b2tlbnMgPSBbXTtcbiAgdmFyIHJhd1Rva2VucyA9IFtdO1xuICB2YXIgbGFzdEluZGV4ID0gdGFnUkUubGFzdEluZGV4ID0gMDtcbiAgdmFyIG1hdGNoLCBpbmRleCwgdG9rZW5WYWx1ZTtcbiAgd2hpbGUgKChtYXRjaCA9IHRhZ1JFLmV4ZWModGV4dCkpKSB7XG4gICAgaW5kZXggPSBtYXRjaC5pbmRleDtcbiAgICAvLyBwdXNoIHRleHQgdG9rZW5cbiAgICBpZiAoaW5kZXggPiBsYXN0SW5kZXgpIHtcbiAgICAgIHJhd1Rva2Vucy5wdXNoKHRva2VuVmFsdWUgPSB0ZXh0LnNsaWNlKGxhc3RJbmRleCwgaW5kZXgpKTtcbiAgICAgIHRva2Vucy5wdXNoKEpTT04uc3RyaW5naWZ5KHRva2VuVmFsdWUpKTtcbiAgICB9XG4gICAgLy8gdGFnIHRva2VuXG4gICAgdmFyIGV4cCA9IHBhcnNlRmlsdGVycyhtYXRjaFsxXS50cmltKCkpO1xuICAgIHRva2Vucy5wdXNoKChcIl9zKFwiICsgZXhwICsgXCIpXCIpKTtcbiAgICByYXdUb2tlbnMucHVzaCh7ICdAYmluZGluZyc6IGV4cCB9KTtcbiAgICBsYXN0SW5kZXggPSBpbmRleCArIG1hdGNoWzBdLmxlbmd0aDtcbiAgfVxuICBpZiAobGFzdEluZGV4IDwgdGV4dC5sZW5ndGgpIHtcbiAgICByYXdUb2tlbnMucHVzaCh0b2tlblZhbHVlID0gdGV4dC5zbGljZShsYXN0SW5kZXgpKTtcbiAgICB0b2tlbnMucHVzaChKU09OLnN0cmluZ2lmeSh0b2tlblZhbHVlKSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBleHByZXNzaW9uOiB0b2tlbnMuam9pbignKycpLFxuICAgIHRva2VuczogcmF3VG9rZW5zXG4gIH1cbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIHRyYW5zZm9ybU5vZGUgKGVsLCBvcHRpb25zKSB7XG4gIHZhciB3YXJuID0gb3B0aW9ucy53YXJuIHx8IGJhc2VXYXJuO1xuICB2YXIgc3RhdGljQ2xhc3MgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAnY2xhc3MnKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgc3RhdGljQ2xhc3MpIHtcbiAgICB2YXIgcmVzID0gcGFyc2VUZXh0KHN0YXRpY0NsYXNzLCBvcHRpb25zLmRlbGltaXRlcnMpO1xuICAgIGlmIChyZXMpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgIFwiY2xhc3M9XFxcIlwiICsgc3RhdGljQ2xhc3MgKyBcIlxcXCI6IFwiICtcbiAgICAgICAgJ0ludGVycG9sYXRpb24gaW5zaWRlIGF0dHJpYnV0ZXMgaGFzIGJlZW4gcmVtb3ZlZC4gJyArXG4gICAgICAgICdVc2Ugdi1iaW5kIG9yIHRoZSBjb2xvbiBzaG9ydGhhbmQgaW5zdGVhZC4gRm9yIGV4YW1wbGUsICcgK1xuICAgICAgICAnaW5zdGVhZCBvZiA8ZGl2IGNsYXNzPVwie3sgdmFsIH19XCI+LCB1c2UgPGRpdiA6Y2xhc3M9XCJ2YWxcIj4uJyxcbiAgICAgICAgZWwucmF3QXR0cnNNYXBbJ2
118NsYXNzJ11cbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGlmIChzdGF0aWNDbGFzcykge1xuICAgIGVsLnN0YXRpY0NsYXNzID0gSlNPTi5zdHJpbmdpZnkoc3RhdGljQ2xhc3MpO1xuICB9XG4gIHZhciBjbGFzc0JpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ2NsYXNzJywgZmFsc2UgLyogZ2V0U3RhdGljICovKTtcbiAgaWYgKGNsYXNzQmluZGluZykge1xuICAgIGVsLmNsYXNzQmluZGluZyA9IGNsYXNzQmluZGluZztcbiAgfVxufVxuXG5mdW5jdGlvbiBnZW5EYXRhIChlbCkge1xuICB2YXIgZGF0YSA9ICcnO1xuICBpZiAoZWwuc3RhdGljQ2xhc3MpIHtcbiAgICBkYXRhICs9IFwic3RhdGljQ2xhc3M6XCIgKyAoZWwuc3RhdGljQ2xhc3MpICsgXCIsXCI7XG4gIH1cbiAgaWYgKGVsLmNsYXNzQmluZGluZykge1xuICAgIGRhdGEgKz0gXCJjbGFzczpcIiArIChlbC5jbGFzc0JpbmRpbmcpICsgXCIsXCI7XG4gIH1cbiAgcmV0dXJuIGRhdGFcbn1cblxudmFyIGtsYXNzJDEgPSB7XG4gIHN0YXRpY0tleXM6IFsnc3RhdGljQ2xhc3MnXSxcbiAgdHJhbnNmb3JtTm9kZTogdHJhbnNmb3JtTm9kZSxcbiAgZ2VuRGF0YTogZ2VuRGF0YVxufTtcblxuLyogICovXG5cbmZ1bmN0aW9uIHRyYW5zZm9ybU5vZGUkMSAoZWwsIG9wdGlvbnMpIHtcbiAgdmFyIHdhcm4gPSBvcHRpb25zLndhcm4gfHwgYmFzZVdhcm47XG4gIHZhciBzdGF0aWNTdHlsZSA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICdzdHlsZScpO1xuICBpZiAoc3RhdGljU3R5bGUpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIHJlcyA9IHBhcnNlVGV4dChzdGF0aWNTdHlsZSwgb3B0aW9ucy5kZWxpbWl0ZXJzKTtcbiAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICBcInN0eWxlPVxcXCJcIiArIHN0YXRpY1N0eWxlICsgXCJcXFwiOiBcIiArXG4gICAgICAgICAgJ0ludGVycG9sYXRpb24gaW5zaWRlIGF0dHJpYnV0ZXMgaGFzIGJlZW4gcmVtb3ZlZC4gJyArXG4gICAgICAgICAgJ1VzZSB2LWJpbmQgb3IgdGhlIGNvbG9uIHNob3J0aGFuZCBpbnN0ZWFkLiBGb3IgZXhhbXBsZSwgJyArXG4gICAgICAgICAgJ2luc3RlYWQgb2YgPGRpdiBzdHlsZT1cInt7IHZhbCB9fVwiPiwgdXNlIDxkaXYgOnN0eWxlPVwidmFsXCI+LicsXG4gICAgICAgICAgZWwucmF3QXR0cnNNYXBbJ3N0eWxlJ11cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWwuc3RhdGljU3R5bGUgPSBKU09OLnN0cmluZ2lmeShwYXJzZVN0eWxlVGV4dChzdGF0aWNTdHlsZSkpO1xuICB9XG5cbiAgdmFyIHN0eWxlQmluZGluZyA9IGdldEJpbmRpbmdBdHRyKGVsLCAnc3R5bGUnLCBmYWxzZSAvKiBnZXRTdGF0aWMgKi8pO1xuICBpZiAoc3R5bGVCaW5kaW5nKSB7XG4gICAgZWwuc3R5bGVCaW5kaW5nID0gc3R5bGVCaW5kaW5nO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdlbkRhdGEkMSAoZWwpIHtcbiAgdmFyIGRhdGEgPSAnJztcbiAgaWYgKGVsLnN0YXRpY1N0eWxlKSB7XG4gICAgZGF0YSArPSBcInN0YXRpY1N0eWxlOlwiICsgKGVsLnN0YXRpY1N0eWxlKSArIFwiLFwiO1xuICB9XG4gIGlmIChlbC5zdHlsZUJpbmRpbmcpIHtcbiAgICBkYXRhICs9IFwic3R5bGU6KFwiICsgKGVsLnN0eWxlQmluZGluZykgKyBcIiksXCI7XG4gIH1cbiAgcmV0dXJuIGRhdGFcbn1cblxudmFyIHN0eWxlJDEgPSB7XG4gIHN0YXRpY0tleXM6IFsnc3RhdGljU3R5bGUnXSxcbiAgdHJhbnNmb3JtTm9kZTogdHJhbnNmb3JtTm9kZSQxLFxuICBnZW5EYXRhOiBnZW5EYXRhJDFcbn07XG5cbi8qICAqL1xuXG52YXIgZGVjb2RlcjtcblxudmFyIGhlID0ge1xuICBkZWNvZGU6IGZ1bmN0aW9uIGRlY29kZSAoaHRtbCkge1xuICAgIGRlY29kZXIgPSBkZWNvZGVyIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGRlY29kZXIuaW5uZXJIVE1MID0gaHRtbDtcbiAgICByZXR1cm4gZGVjb2Rlci50ZXh0Q29udGVudFxuICB9XG59O1xuXG4vKiAgKi9cblxudmFyIGlzVW5hcnlUYWcgPSBtYWtlTWFwKFxuICAnYXJlYSxiYXNlLGJyLGNvbCxlbWJlZCxmcmFtZSxocixpbWcsaW5wdXQsaXNpbmRleCxrZXlnZW4sJyArXG4gICdsaW5rLG1ldGEscGFyYW0sc291cmNlLHRyYWNrLHdicidcbik7XG5cbi8vIEVsZW1lbnRzIHRoYXQgeW91IGNhbiwgaW50ZW50aW9uYWxseSwgbGVhdmUgb3BlblxuLy8gKGFuZCB3aGljaCBjbG9zZSB0aGVtc2VsdmVzKVxudmFyIGNhbkJlTGVmdE9wZW5UYWcgPSBtYWtlTWFwKFxuICAnY29sZ3JvdXAsZGQsZHQsbGksb3B0aW9ucyxwLHRkLHRmb290LHRoLHRoZWFkLHRyLHNvdXJjZSdcbik7XG5cbi8vIEhUTUw1IHRhZ3MgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvaW5kaWNlcy5odG1sI2VsZW1lbnRzLTNcbi8vIFBocmFzaW5nIENvbnRlbnQgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZG9tLmh0bWwjcGhyYXNpbmctY29udGVudFxudmFyIGlzTm9uUGhyYXNpbmdUYWcgPSBtYWtlTWFwKFxuICAnYWRkcmVzcyxhcnRpY2xlLGFzaWRlLGJhc2UsYmxvY2txdW90ZSxib2R5LGNhcHRpb24sY29sLGNvbGdyb3VwLGRkLCcgK1xuICAnZGV0YWlscyxkaWFsb2csZGl2LGRsLGR0LGZpZWxkc2V0LGZpZ2NhcHRpb24sZmlndXJlLGZvb3Rlcixmb3JtLCcgK1xuICAnaDEsaDIsaDMsaDQsaDUsaDYsaGVhZCxoZWFkZXIsaGdyb3VwLGhyLGh0bWwsbGVnZW5kLGxpLG1lbnVpdGVtLG1ldGEsJyArXG4gICdvcHRncm91cCxvcHRpb24scGFyYW0scnAscnQsc291cmNlLHN0eWxlLHN1bW1hcnksdGJvZHksdGQsdGZvb3QsdGgsdGhlYWQsJyArXG4gICd0aXRsZSx0cix0cmFjaydcbik7XG5cbi8qKlxuICogTm90IHR5cGUtY2hlY2tpbmcgdGhpcyBmaWxlIGJlY2F1c2UgaXQncyBtb3N0bHkgdmVuZG9yIGNvZGUuXG4gKi9cblxuLy8gUmVndWxhciBFeHByZXNzaW9ucyBmb3IgcGFyc2luZyB0YWdzIGFuZCBhdHRyaWJ1dGVzXG52YXIgYXR0cmlidXRlID0gL15cXHMqKFteXFxzXCInPD5cXC89XSspKD86XFxzKig9KVxccyooPzpcIihbXlwiXSopXCIrfCcoW14nXSopJyt8KFteXFxzXCInPTw+YF0rKSkpPy87XG52YXIgZHluYW1pY0FyZ0F0dHJpYnV0ZSA9IC9eXFxzKigoPzp2LVtcXHctXSs6fEB8OnwjKVxcW1tePV0rP1xcXVteXFxzXCInPD5cXC89XSopKD86XFxzKig9KVxccyooPzpcIihbXlwiXSopXCIrfCcoW14nXSopJyt8KFteXFxzXCInPTw+YF0rKSkpPy87XG52YXIgbmNuYW1lID0gXCJbYS16QS1aX11bXFxcXC1cXFxcLjAtOV9hLXpBLVpcIiArICh1bmljb2RlUmVnRXhwLnNvdXJjZSkgKyBcIl0qXCI7XG52YXIgcW5hbWVDYXB0dXJlID0gXCIoKD86XCIgKyBuY25hbWUgKyBcIlxcX
118Fw6KT9cIiArIG5jbmFtZSArIFwiKVwiO1xudmFyIHN0YXJ0VGFnT3BlbiA9IG5ldyBSZWdFeHAoKFwiXjxcIiArIHFuYW1lQ2FwdHVyZSkpO1xudmFyIHN0YXJ0VGFnQ2xvc2UgPSAvXlxccyooXFwvPyk+LztcbnZhciBlbmRUYWcgPSBuZXcgUmVnRXhwKChcIl48XFxcXC9cIiArIHFuYW1lQ2FwdHVyZSArIFwiW14+XSo+XCIpKTtcbnZhciBkb2N0eXBlID0gL148IURPQ1RZUEUgW14+XSs+L2k7XG4vLyAjNzI5ODogZXNjYXBlIC0gdG8gYXZvaWQgYmVpbmcgcGFzc2VkIGFzIEhUTUwgY29tbWVudCB3aGVuIGlubGluZWQgaW4gcGFnZVxudmFyIGNvbW1lbnQgPSAvXjwhXFwtLS87XG52YXIgY29uZGl0aW9uYWxDb21tZW50ID0gL148IVxcWy87XG5cbi8vIFNwZWNpYWwgRWxlbWVudHMgKGNhbiBjb250YWluIGFueXRoaW5nKVxudmFyIGlzUGxhaW5UZXh0RWxlbWVudCA9IG1ha2VNYXAoJ3NjcmlwdCxzdHlsZSx0ZXh0YXJlYScsIHRydWUpO1xudmFyIHJlQ2FjaGUgPSB7fTtcblxudmFyIGRlY29kaW5nTWFwID0ge1xuICAnJmx0Oyc6ICc8JyxcbiAgJyZndDsnOiAnPicsXG4gICcmcXVvdDsnOiAnXCInLFxuICAnJmFtcDsnOiAnJicsXG4gICcmIzEwOyc6ICdcXG4nLFxuICAnJiM5Oyc6ICdcXHQnLFxuICAnJiMzOTsnOiBcIidcIlxufTtcbnZhciBlbmNvZGVkQXR0ciA9IC8mKD86bHR8Z3R8cXVvdHxhbXB8IzM5KTsvZztcbnZhciBlbmNvZGVkQXR0cldpdGhOZXdMaW5lcyA9IC8mKD86bHR8Z3R8cXVvdHxhbXB8IzM5fCMxMHwjOSk7L2c7XG5cbi8vICM1OTkyXG52YXIgaXNJZ25vcmVOZXdsaW5lVGFnID0gbWFrZU1hcCgncHJlLHRleHRhcmVhJywgdHJ1ZSk7XG52YXIgc2hvdWxkSWdub3JlRmlyc3ROZXdsaW5lID0gZnVuY3Rpb24gKHRhZywgaHRtbCkgeyByZXR1cm4gdGFnICYmIGlzSWdub3JlTmV3bGluZVRhZyh0YWcpICYmIGh0bWxbMF0gPT09ICdcXG4nOyB9O1xuXG5mdW5jdGlvbiBkZWNvZGVBdHRyICh2YWx1ZSwgc2hvdWxkRGVjb2RlTmV3bGluZXMpIHtcbiAgdmFyIHJlID0gc2hvdWxkRGVjb2RlTmV3bGluZXMgPyBlbmNvZGVkQXR0cldpdGhOZXdMaW5lcyA6IGVuY29kZWRBdHRyO1xuICByZXR1cm4gdmFsdWUucmVwbGFjZShyZSwgZnVuY3Rpb24gKG1hdGNoKSB7IHJldHVybiBkZWNvZGluZ01hcFttYXRjaF07IH0pXG59XG5cbmZ1bmN0aW9uIHBhcnNlSFRNTCAoaHRtbCwgb3B0aW9ucykge1xuICB2YXIgc3RhY2sgPSBbXTtcbiAgdmFyIGV4cGVjdEhUTUwgPSBvcHRpb25zLmV4cGVjdEhUTUw7XG4gIHZhciBpc1VuYXJ5VGFnJCQxID0gb3B0aW9ucy5pc1VuYXJ5VGFnIHx8IG5vO1xuICB2YXIgY2FuQmVMZWZ0T3BlblRhZyQkMSA9IG9wdGlvbnMuY2FuQmVMZWZ0T3BlblRhZyB8fCBubztcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxhc3QsIGxhc3RUYWc7XG4gIHdoaWxlIChodG1sKSB7XG4gICAgbGFzdCA9IGh0bWw7XG4gICAgLy8gTWFrZSBzdXJlIHdlJ3JlIG5vdCBpbiBhIHBsYWludGV4dCBjb250ZW50IGVsZW1lbnQgbGlrZSBzY3JpcHQvc3R5bGVcbiAgICBpZiAoIWxhc3RUYWcgfHwgIWlzUGxhaW5UZXh0RWxlbWVudChsYXN0VGFnKSkge1xuICAgICAgdmFyIHRleHRFbmQgPSBodG1sLmluZGV4T2YoJzwnKTtcbiAgICAgIGlmICh0ZXh0RW5kID09PSAwKSB7XG4gICAgICAgIC8vIENvbW1lbnQ6XG4gICAgICAgIGlmIChjb21tZW50LnRlc3QoaHRtbCkpIHtcbiAgICAgICAgICB2Y
118XIgY29tbWVudEVuZCA9IGh0bWwuaW5kZXhPZignLS0+Jyk7XG5cbiAgICAgICAgICBpZiAoY29tbWVudEVuZCA+PSAwKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5zaG91bGRLZWVwQ29tbWVudCkge1xuICAgICAgICAgICAgICBvcHRpb25zLmNvbW1lbnQoaHRtbC5zdWJzdHJpbmcoNCwgY29tbWVudEVuZCksIGluZGV4LCBpbmRleCArIGNvbW1lbnRFbmQgKyAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFkdmFuY2UoY29tbWVudEVuZCArIDMpO1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbmRpdGlvbmFsX2NvbW1lbnQjRG93bmxldmVsLXJldmVhbGVkX2NvbmRpdGlvbmFsX2NvbW1lbnRcbiAgICAgICAgaWYgKGNvbmRpdGlvbmFsQ29tbWVudC50ZXN0KGh0bWwpKSB7XG4gICAgICAgICAgdmFyIGNvbmRpdGlvbmFsRW5kID0gaHRtbC5pbmRleE9mKCddPicpO1xuXG4gICAgICAgICAgaWYgKGNvbmRpdGlvbmFsRW5kID49IDApIHtcbiAgICAgICAgICAgIGFkdmFuY2UoY29uZGl0aW9uYWxFbmQgKyAyKTtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRG9jdHlwZTpcbiAgICAgICAgdmFyIGRvY3R5cGVNYXRjaCA9IGh0bWwubWF0Y2goZG9jdHlwZSk7XG4gICAgICAgIGlmIChkb2N0eXBlTWF0Y2gpIHtcbiAgICAgICAgICBhZHZhbmNlKGRvY3R5cGVNYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyBFbmQgdGFnOlxuICAgICAgICB2Y
118XIgZW5kVGFnTWF0Y2ggPSBodG1sLm1hdGNoKGVuZFRhZyk7XG4gICAgICAgIGlmIChlbmRUYWdNYXRjaCkge1xuICAgICAgICAgIHZhciBjdXJJbmRleCA9IGluZGV4O1xuICAgICAgICAgIGFkdmFuY2UoZW5kVGFnTWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgICBwYXJzZUVuZFRhZyhlbmRUYWdNYXRjaFsxXSwgY3VySW5kZXgsIGluZGV4KTtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RhcnQgdGFnOlxuICAgICAgICB2YXIgc3RhcnRUYWdNYXRjaCA9IHBhcnNlU3RhcnRUYWcoKTtcbiAgICAgICAgaWYgKHN0YXJ0VGFnTWF0Y2gpIHtcbiAgICAgICAgICBoYW5kbGVTdGFydFRhZyhzdGFydFRhZ01hdGNoKTtcbiAgICAgICAgICBpZiAoc2hvdWxkSWdub3JlRmlyc3ROZXdsaW5lKHN0YXJ0VGFnTWF0Y2gudGFnTmFtZSwgaHRtbCkpIHtcbiAgICAgICAgICAgIGFkdmFuY2UoMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHRleHQgPSAodm9pZCAwKSwgcmVzdCA9ICh2b2lkIDApLCBuZXh0ID0gKHZvaWQgMCk7XG4gICAgICBpZiAodGV4dEVuZCA+PSAwKSB7XG4gICAgICAgIHJlc3QgPSBodG1sLnNsaWNlKHRleHRFbmQpO1xuICAgICAgICB3aGlsZSAoXG4gICAgICAgICAgIWVuZFRhZy50ZXN0KHJlc3QpICYmXG4gICAgICAgICAgIXN0YXJ0VGFnT3Blbi50ZXN0KHJlc3QpICYmXG4gICAgICAgICAgIWNvbW1lbnQudGVzdChyZXN0KSAmJlxuICAgICAgICAgICFjb25kaXRpb25hbENvbW1lbnQudGVzdChyZXN0KVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyA8IGluIHBsYWluIHRleHQsIGJlIGZvcmdpdmluZyBhbmQgdHJlYXQgaXQgYXMgdGV4dFxuICAgICAgICAgIG5leHQgPSByZXN0LmluZGV4T2YoJzwnLCAxKTtcbiAgICAgICAgICBpZiAobmV4dCA8IDApIHsgYnJlYWsgfVxuICAgICAgICAgIHRleHRFbmQgKz0gbmV4dDtcbiAgICAgICAgICByZXN0ID0gaHRtbC5zbGljZSh0ZXh0RW5kKTtcbiAgICAgICAgfVxuICAgICAgICB0ZXh0ID0gaHRtbC5zdWJzdHJpbmcoMCwgdGV4dEVuZCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0ZXh0RW5kIDwgMCkge1xuICAgICAgICB0ZXh0ID0gaHRtbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRleHQpIHtcbiAgICAgICAgYWR2YW5jZSh0ZXh0Lmxlbmd0aCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNoYXJzICYmIHRleHQpIHtcbiAgICAgICAgb3B0aW9ucy5jaGFycyh0ZXh0LCBpbmRleCAtIHRleHQubGVuZ3RoLCBpbmRleCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBlbmRUYWdMZW5ndGggPSAwO1xuICAgICAgdmFyIHN0YWNrZWRUYWcgPSBsYXN0VGFnLnRvTG93ZXJDYXNlKCk7XG4gICAgICB2Y
118XIgcmVTdGFja2VkVGFnID0gcmVDYWNoZVtzdGFja2VkVGFnXSB8fCAocmVDYWNoZVtzdGFja2VkVGFnXSA9IG5ldyBSZWdFeHAoJyhbXFxcXHNcXFxcU10qPykoPC8nICsgc3RhY2tlZFRhZyArICdbXj5dKj4pJywgJ2knKSk7XG4gICAgICB2YXIgcmVzdCQxID0gaHRtbC5yZXBsYWNlKHJlU3RhY2tlZFRhZywgZnVuY3Rpb24gKGFsbCwgdGV4dCwgZW5kVGFnKSB7XG4gICAgICAgIGVuZFRhZ0xlbmd0aCA9IGVuZFRhZy5sZW5ndGg7XG4gICAgICAgIGlmICghaXNQbGFpblRleHRFbGVtZW50KHN0YWNrZWRUYWcpICYmIHN0YWNrZWRUYWcgIT09ICdub3NjcmlwdCcpIHtcbiAgICAgICAgICB0ZXh0ID0gdGV4dFxuICAgICAgICAgICAgLnJlcGxhY2UoLzwhXFwtLShbXFxzXFxTXSo/KS0tPi9nLCAnJDEnKSAvLyAjNzI5OFxuICAgICAgICAgICAgLnJlcGxhY2UoLzwhXFxbQ0RBVEFcXFsoW1xcc1xcU10qPyldXT4vZywgJyQxJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNob3VsZElnbm9yZUZpcnN0TmV3bGluZShzdGFja2VkVGFnLCB0ZXh0KSkge1xuICAgICAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKDEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmNoYXJzKSB7XG4gICAgICAgICAgb3B0aW9ucy5jaGFycyh0ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJydcbiAgICAgIH0pO1xuICAgICAgaW5kZXggKz0gaHRtbC5sZW5ndGggLSByZXN0JDEubGVuZ3RoO1xuICAgICAgaHRtbCA9IHJlc3QkMTtcbiAgICAgIHBhcnNlRW5kVGFnKHN0YWNrZWRUYWcsIGluZGV4IC0gZW5kVGFnTGVuZ3RoLCBpbmRleCk7XG4gICAgfVxuXG4gICAgaWYgKGh0bWwgPT09IGxhc3QpIHtcbiAgICAgIG9wdGlvbnMuY2hhcnMgJiYgb3B0aW9ucy5jaGFycyhodG1sKTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFzdGFjay5sZW5ndGggJiYgb3B0aW9ucy53YXJuKSB7XG4gICAgICAgIG9wdGlvbnMud2FybigoXCJNYWwtZm9ybWF0dGVkIHRhZyBhdCBlbmQgb2YgdGVtcGxhdGU6IFxcXCJcIiArIGh0bWwgKyBcIlxcXCJcIiksIHsgc3RhcnQ6IGluZGV4ICsgaHRtbC5sZW5ndGggfSk7XG4gICAgICB9XG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIC8vIENsZWFuIHVwIGFueSByZW1haW5pbmcgdGFnc1xuICBwYXJzZUVuZFRhZygpO1xuXG4gIGZ1bmN0aW9uIGFkdmFuY2UgKG4pIHtcbiAgICBpbmRleCArPSBuO1xuICAgIGh0bWwgPSBodG1sLnN1YnN0cmluZyhuKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlU3RhcnRUYWcgKCkge1xuICAgIHZhciBzdGFydCA9IGh0bWwubWF0Y2goc3RhcnRUYWdPcGVuKTtcbiAgICBpZiAoc3RhcnQpIHtcbiAgICAgIHZhciBtYXRjaCA9IHtcbiAgICAgICAgdGFnTmFtZTogc3RhcnRbMV0sXG4gICAgICAgIGF0dHJzOiBbXSxcbiAgICAgICAgc3RhcnQ6IGluZGV4XG4gICAgICB9O1xuICAgICAgYWR2YW5jZShzdGFydFswXS5sZW5ndGgpO1xuICAgICAgdmFyIGVuZCwgYXR0cjtcbiAgICAgIHdoaWxlICghKGVuZCA9IGh0bWwubWF0Y2goc3RhcnRUYWdDbG9zZSkpICYmIChhdHRyID0gaHRtbC5tYXRjaChkeW5hbWljQXJnQXR0cmlidXRlKSB8fCBodG1sLm1hdGNoKGF0dHJpYnV0ZSkpKSB7XG4gICAgICAgIGF0dHIuc3RhcnQgPSBpbmRleDtcbiAgICAgICAgYWR2YW5jZShhdHRyWzBdLmxlbmd0aCk7XG4gICAgICAgIGF0dHIuZW5kID0gaW5kZXg7XG4gICAgICAgIG1hdGNoLmF0dHJzLnB1c2goYXR0cik7XG4gICAgICB9XG4gICAgICBpZiAoZW5kKSB7XG4gICAgICAgIG1hdGNoLnVuYXJ5U2xhc2ggPSBlbmRbMV07XG4gICAgICAgIGFkdmFuY2UoZW5kWzBdLmxlbmd0aCk7XG4gICAgICAgIG1hdGNoLmVuZCA9IGluZGV4O1xuICAgICAgICByZXR1cm4gbWF0Y2hcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVTdGFydFRhZyAobWF0Y2gpIHtcbiAgICB2YXIgdGFnTmFtZSA9IG1hdGNoLnRhZ05hbWU7XG4gICAgdmFyIHVuYXJ5U2xhc2ggPSBtYXRjaC51bmFyeVNsYXNoO1xuXG4gICAgaWYgKGV4cGVjdEhUTUwpIHtcbiAgICAgIGlmIChsYXN0VGFnID09PSAncCcgJiYgaXNOb25QaHJhc2luZ1RhZyh0YWdOYW1lKSkge1xuICAgICAgICBwYXJzZUVuZFRhZyhsYXN0VGFnKTtcbiAgICAgIH1cbiAgICAgIGlmIChjYW5CZUxlZnRPcGVuVGFnJCQxKHRhZ05hbWUpICYmIGxhc3RUYWcgPT09IHRhZ05hbWUpIHtcbiAgICAgICAgcGFyc2VFbmRUYWcodGFnTmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHVuYXJ5ID0gaXNVbmFyeVRhZyQkMSh0YWdOYW1lKSB8fCAhIXVuYXJ5U2xhc2g7XG5cbiAgICB2YXIgbCA9IG1hdGNoLmF0dHJzLmxlbmd0aDtcbiAgICB2YXIgYXR0cnMgPSBuZXcgQXJyYXkobCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBhcmdzID0gbWF0Y2guYXR0cnNbaV07XG4gICAgICB2Y
118XIgdmFsdWUgPSBhcmdzWzNdIHx8IGFyZ3NbNF0gfHwgYXJnc1s1XSB8fCAnJztcbiAgICAgIHZhciBzaG91bGREZWNvZGVOZXdsaW5lcyA9IHRhZ05hbWUgPT09ICdhJyAmJiBhcmdzWzFdID09PSAnaHJlZidcbiAgICAgICAgPyBvcHRpb25zLnNob3VsZERlY29kZU5ld2xpbmVzRm9ySHJlZlxuICAgICAgICA6IG9wdGlvbnMuc2hvdWxkRGVjb2RlTmV3bGluZXM7XG4gICAgICBhdHRyc1tpXSA9IHtcbiAgICAgICAgbmFtZTogYXJnc1sxXSxcbiAgICAgICAgdmFsdWU6IGRlY29kZUF0dHIodmFsdWUsIHNob3VsZERlY29kZU5ld2xpbmVzKVxuICAgICAgfTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIG9wdGlvbnMub3V0cHV0U291cmNlUmFuZ2UpIHtcbiAgICAgICAgYXR0cnNbaV0uc3RhcnQgPSBhcmdzLnN0YXJ0ICsgYXJnc1swXS5tYXRjaCgvXlxccyovKS5sZW5ndGg7XG4gICAgICAgIGF0dHJzW2ldLmVuZCA9IGFyZ3MuZW5kO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdW5hcnkpIHtcbiAgICAgIHN0YWNrLnB1c2goeyB0YWc6IHRhZ05hbWUsIGxvd2VyQ2FzZWRUYWc6IHRhZ05hbWUudG9Mb3dlckNhc2UoKSwgYXR0cnM6IGF0dHJzLCBzdGFydDogbWF0Y2guc3RhcnQsIGVuZDogbWF0Y2guZW5kIH0pO1xuICAgICAgbGFzdFRhZyA9IHRhZ05hbWU7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuc3RhcnQpIHtcbiAgICAgIG9wdGlvbnMuc3RhcnQodGFnTmFtZSwgYXR0cnMsIHVuYXJ5LCBtYXRjaC5zdGFydCwgbWF0Y2guZW5kKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUVuZFRhZyAodGFnTmFtZSwgc3RhcnQsIGVuZCkge1xuICAgIHZhciBwb3MsIGxvd2VyQ2FzZWRUYWdOYW1lO1xuICAgIGlmIChzdGFydCA9PSBudWxsKSB7IHN0YXJ0ID0gaW5kZXg7IH1cbiAgICBpZiAoZW5kID09IG51bGwpIHsgZW5kID0gaW5kZXg7IH1cblxuICAgIC8vIEZpbmQgdGhlIGNsb3Nlc3Qgb3BlbmVkIHRhZyBvZiB0aGUgc2FtZSB0eXBlXG4gICAgaWYgKHRhZ05hbWUpIHtcbiAgICAgIGxvd2VyQ2FzZWRUYWdOYW1lID0gdGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgZm9yIChwb3MgPSBzdGFjay5sZW5ndGggLSAxOyBwb3MgPj0gMDsgcG9zLS0pIHtcbiAgICAgICAgaWYgKHN0YWNrW3Bvc10ubG93ZXJDYXNlZFRhZyA9PT0gbG93ZXJDYXNlZFRhZ05hbWUpIHtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIG5vIHRhZyBuYW1lIGlzIHByb3ZpZGVkLCBjbGVhbiBzaG9wXG4gICAgICBwb3MgPSAwO1xuICAgIH1cblxuICAgIGlmIChwb3MgPj0gMCkge1xuICAgICAgLy8gQ2xvc2UgYWxsIHRoZSBvcGVuIGVsZW1lbnRzLCB1cCB0aGUgc3RhY2tcbiAgICAgIGZvciAodmFyIGkgPSBzdGFjay5sZW5ndGggLSAxOyBpID49IHBvczsgaS0tKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgKGkgPiBwb3MgfHwgIXRhZ05hbWUpICYmXG4gICAgICAgICAgb3B0aW9ucy53YXJuXG4gICAgICAgICkge1xuICAgICAgICAgIG9wdGlvbnMud2FybihcbiAgICAgICAgICAgIChcInRhZyA8XCIgKyAoc3RhY2tbaV0udGFnKSArIFwiPiBoYXMgbm8gbWF0Y2hpbmcgZW5kIHRhZy5cIiksXG4gICAgICAgICAgICB7IHN0YXJ0OiBzdGFja1tpXS5zdGFydCwgZW5kOiBzdGFja1tpXS5lbmQgfVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuZW5kKSB7XG4gICAgICAgICAgb3B0aW9ucy5lbmQoc3RhY2tbaV0udGFnLCBzdGFydCwgZW5kKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBSZW1vdmUgdGhlIG9wZW4gZWxlbWVudHMgZnJvbSB0aGUgc3RhY2tcbiAgICAgIHN0YWNrLmxlbmd0aCA9IHBvcztcbiAgICAgIGxhc3RUYWcgPSBwb3MgJiYgc3RhY2tbcG9zIC0gMV0udGFnO1xuICAgIH0gZWxzZSBpZiAobG93ZXJDYXNlZFRhZ05hbWUgPT09ICdicicpIHtcbiAgICAgIGlmIChvcHRpb25zLnN0YXJ0KSB7XG4gICAgICAgIG9wdGlvbnMuc3RhcnQodGFnTmFtZSwgW10sIHRydWUsIHN0YXJ0LCBlbmQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobG93ZXJDYXNlZFRhZ05hbWUgPT09ICdwJykge1xuICAgICAgaWYgKG9wdGlvbnMuc3RhcnQpIHtcbiAgICAgICAgb3B0aW9ucy5zdGFydCh0YWdOYW1lLCBbXSwgZmFsc2UsIHN0YXJ0LCBlbmQpO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMuZW5kKSB7XG4gICAgICAgIG9wdGlvbnMuZW5kKHRhZ05hbWUsIHN0YXJ0LCBlbmQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxudmFyIG9uUkUgPSAvXkB8XnYtb246LztcbnZhciBkaXJSRSA9IC9edi18XkB8Xjp8XiMvO1xudmFyIGZvckFsaWFzUkUgPSAvKFtcXHNcXFNdKj8pXFxzKyg/OmlufG9mKVxccysoW1xcc1xcU10qKS87XG52YXIgZm9ySXRlcmF0b3JSRSA9IC8sKFteLFxcfVxcXV0qKSg/OiwoW14sXFx9XFxdXSopKT8kLztcbnZhciBzdHJpcFBhcmVuc1JFID0gL15cXCh8XFwpJC9nO1xudmFyIGR5bmFtaWNBcmdSRSA9IC9eXFxbLipcXF0kLztcblxudmFyIGFyZ1JFID0gLzooLiopJC87XG52YXIgYmluZFJFID0gL146fF5cXC58XnYtYmluZDovO1xudmFyIG1vZGlmaWVyUkUgPSAvXFwuW14uXFxdXSsoPz1bXlxcXV0qJCkvZztcblxudmFyIHNsb3RSRSA9IC9edi1zbG90KDp8JCl8XiMvO1xuXG52YXIgbGluZUJyZWFrUkUgPSAvW1xcclxcbl0vO1xudmFyIHdoaXRlc3BhY2VSRSQxID0gL1sgXFxmXFx0XFxyXFxuXSsvZztcblxudmFyIGludmFsaWRBdHRyaWJ1dGVSRSA9IC9bXFxzXCInPD5cXC89XS87XG5cbnZhciBkZWNvZGVIVE1MQ2FjaGVkID0gY2FjaGVkKGhlLmRlY29kZSk7XG5cbnZhciBlbXB0eVNsb3RTY29wZVRva2VuID0gXCJfZW1wdHlfXCI7XG5cbi8vIGNvbmZpZ3VyYWJsZSBzdGF0ZVxudmFyIHdhcm4kMjtcbnZhciBkZWxpbWl0ZXJzO1xudmFyIHRyYW5zZm9ybXM7XG52YXIgcHJlVHJhbnNmb3JtcztcbnZhciBwb3N0VHJhbnNmb3JtcztcbnZhciBwbGF0Zm9ybUlzUHJlVGFnO1xudmFyIHBsYXRmb3JtTXVzdFVzZVByb3A7XG52YXIgcGxhdGZvcm1HZXRUYWdOYW1lc3BhY2U7XG52YXIgbWF5YmVDb21wb25lbnQ7XG5cbmZ1bmN0aW9uIGNyZWF0ZUFTVEVsZW1lbnQgKFxuICB0YWcsXG4gIGF0dHJzLFxuICBwYXJlbnRcbikge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IDEsXG4gICAgdGFnOiB0YWcsXG4gICAgYXR0cnNMaXN0OiBhdHRycyxcbiAgICBhdHRyc01hcDogbWFrZUF0dHJzTWFwKGF0dHJzKSxcbiAgICByYXdBdHRyc01hcDoge30sXG4gICAgcGFyZW50OiBwYXJlbnQsXG4gICAgY2hpbGRyZW46IFtdXG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0IEhUTUwgc3RyaW5nIHRvIEFTVC5cbiAqL1xuZnVuY3Rpb24gcGFyc2UgKFxuICB0ZW1wbGF0ZSxcbiAgb3B0aW9uc1xuKSB7XG4gIHdhcm4kMiA9IG9wdGlvbnMud2FybiB8fCBiYXNlV2FybjtcblxuICBwbGF0Zm9ybUlzUHJlVGFnID0gb3B0aW9ucy5pc1ByZVRhZyB8fCBubztcbiAgcGxhdGZvcm1NdXN0VXNlUHJvcCA9IG9wdGlvbnMubXVzdFVzZVByb3AgfHwgbm87XG4gIHBsYXRmb3JtR2V0VGFnTmFtZXNwYWNlID0gb3B0aW9ucy5nZXRUYWdOYW1lc3BhY2UgfHwgbm87XG4gIHZhciBpc1Jlc2VydmVkVGFnID0gb3B0aW9ucy5pc1Jlc2VydmVkVGFnIHx8IG5vO1xuICBtYXliZUNvbXBvbmVudCA9IGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gISEoXG4gICAgZWwuY29tcG9uZW50IHx8XG4gICAgZWwuYXR0cnNNYXBbJzppcyddIHx8XG4gICAgZWwuYXR0cnNNYXBbJ3YtYmluZDppcyddIHx8XG4gICAgIShlbC5hdHRyc01hcC5pcyA/IGlzUmVzZXJ2ZWRUYWcoZWwuYXR0cnNNYXAuaXMpIDogaXNSZXNlcnZlZFRhZyhlbC50YWcpKVxuICApOyB9O1xuICB0cmFuc2Zvcm1zID0gcGx1Y2tNb2R1bGVGdW5jdGlvbihvcHRpb25zLm1vZHVsZXMsICd0cmFuc2Zvcm1Ob2RlJyk7XG4gIHByZVRyYW5zZm9ybXMgPSBwbHVja01vZHVsZUZ1bmN0aW9uKG9wdGlvbnMubW9kdWxlcywgJ3ByZVRyYW5zZm9ybU5vZGUnKTtcbiAgcG9zdFRyYW5zZm9ybXMgPSBwbHVja01vZHVsZUZ1bmN0aW9uKG9wdGlvbnMubW9kdWxlcywgJ3Bvc3RUcmFuc2Zvcm1Ob2RlJyk7XG5cbiAgZGVsaW1pdGVycyA9IG9wdGlvbnMuZGVsaW1pdGVycztcblxuICB2Y
118XIgc3RhY2sgPSBbXTtcbiAgdmFyIHByZXNlcnZlV2hpdGVzcGFjZSA9IG9wdGlvbnMucHJlc2VydmVXaGl0ZXNwYWNlICE9PSBmYWxzZTtcbiAgdmFyIHdoaXRlc3BhY2VPcHRpb24gPSBvcHRpb25zLndoaXRlc3BhY2U7XG4gIHZhciByb290O1xuICB2YXIgY3VycmVudFBhcmVudDtcbiAgdmFyIGluVlByZSA9IGZhbHNlO1xuICB2YXIgaW5QcmUgPSBmYWxzZTtcbiAgdmFyIHdhcm5lZCA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIHdhcm5PbmNlIChtc2csIHJhbmdlKSB7XG4gICAgaWYgKCF3YXJuZWQpIHtcbiAgICAgIHdhcm5lZCA9IHRydWU7XG4gICAgICB3YXJuJDIobXNnLCByYW5nZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2xvc2VFbGVtZW50IChlbGVtZW50KSB7XG4gICAgdHJpbUVuZGluZ1doaXRlc3BhY2UoZWxlbWVudCk7XG4gICAgaWYgKCFpblZQcmUgJiYgIWVsZW1lbnQucHJvY2Vzc2VkKSB7XG4gICAgICBlbGVtZW50ID0gcHJvY2Vzc0VsZW1lbnQoZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIC8vIHRyZWUgbWFuYWdlbWVudFxuICAgIGlmICghc3RhY2subGVuZ3RoICYmIGVsZW1lbnQgIT09IHJvb3QpIHtcbiAgICAgIC8vIGFsbG93IHJvb3QgZWxlbWVudHMgd2l0aCB2LWlmLCB2LWVsc2UtaWYgYW5kIHYtZWxzZVxuICAgICAgaWYgKHJvb3QuaWYgJiYgKGVsZW1lbnQuZWxzZWlmIHx8IGVsZW1lbnQuZWxzZSkpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBjaGVja1Jvb3RDb25zdHJhaW50cyhlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICBhZGRJZkNvbmRpdGlvbihyb290LCB7XG4gICAgICAgICAgZXhwOiBlbGVtZW50LmVsc2VpZixcbiAgICAgICAgICBibG9jazogZWxlbWVudFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB3YXJuT25jZShcbiAgICAgICAgICBcIkNvbXBvbmVudCB0ZW1wbGF0ZSBzaG91bGQgY29udGFpbiBleGFjdGx5IG9uZSByb290IGVsZW1lbnQuIFwiICtcbiAgICAgICAgICBcIklmIHlvdSBhcmUgdXNpbmcgdi1pZiBvbiBtdWx0aXBsZSBlbGVtZW50cywgXCIgK1xuICAgICAgICAgIFwidXNlIHYtZWxzZS1pZiB0byBjaGFpbiB0aGVtIGluc3RlYWQuXCIsXG4gICAgICAgICAgeyBzdGFydDogZWxlbWVudC5zdGFydCB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjdXJyZW50UGFyZW50ICYmICFlbGVtZW50LmZvcmJpZGRlbikge1xuICAgICAgaWYgKGVsZW1lbnQuZWxzZWlmIHx8IGVsZW1lbnQuZWxzZSkge1xuICAgICAgICBwcm9jZXNzSWZDb25kaXRpb25zKGVsZW1lbnQsIGN1cnJlbnRQYXJlbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGVsZW1lbnQuc2xvdFNjb3BlKSB7XG4gICAgICAgICAgLy8gc2NvcGVkIHNsb3RcbiAgICAgICAgICAvLyBrZWVwIGl0IGluIHRoZSBjaGlsZHJlbiBsaXN0IHNvIHRoYXQgdi1lbHNlKC1pZikgY29uZGl0aW9ucyBjYW5cbiAgICAgICAgICAvLyBmaW5kIGl0IGFzIHRoZSBwcmV2IG5vZGUuXG4gICAgICAgICAgdmFyIG5hbWUgPSBlbGVtZW50LnNsb3RUYXJnZXQgfHwgJ1wiZGVmYXVsdFwiJ1xuICAgICAgICAgIDsoY3VycmVudFBhcmVudC5zY29wZWRTbG90cyB8fCAoY3VycmVudFBhcmVudC5zY29wZWRTbG90cyA9IHt9KSlbbmFtZV0gPSBlbGVtZW50O1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnRQYXJlbnQuY2hpbGRyZW4ucHVzaChlbGVtZW50KTtcbiAgICAgICAgZWxlbWVudC5wYXJlbnQgPSBjdXJyZW50UGFyZW50O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGZpbmFsIGNoaWxkcmVuIGNsZWFudXBcbiAgICAvLyBmaWx0ZXIgb3V0IHNjb3BlZCBzbG90c1xuICAgIGVsZW1lbnQuY2hpbGRyZW4gPSBlbGVtZW50LmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbiAoYykgeyByZXR1cm4gIShjKS5zbG90U2NvcGU7IH0pO1xuICAgIC8vIHJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlIG5vZGUgYWdhaW5cbiAgICB0cmltRW5kaW5nV2hpdGVzcGFjZShlbGVtZW50KTtcblxuICAgIC8vIGNoZWNrIHByZSBzdGF0ZVxuICAgIGlmIChlbGVtZW50LnByZSkge1xuICAgICAgaW5WUHJlID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChwbGF0Zm9ybUlzUHJlVGFnKGVsZW1lbnQudGFnKSkge1xuICAgICAgaW5QcmUgPSBmYWxzZTtcbiAgICB9XG4gICAgLy8gYXBwbHkgcG9zdC10cmFuc2Zvcm1zXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb3N0VHJhbnNmb3Jtcy5sZW5ndGg7IGkrKykge1xuICAgICAgcG9zdFRyYW5zZm9ybXNbaV0oZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdHJpbUVuZGluZ1doaXRlc3BhY2UgKGVsKSB7XG4gICAgLy8gcmVtb3ZlIHRyYWlsaW5nIHdoaXRlc3BhY2Ugbm9kZVxuICAgIGlmICghaW5QcmUpIHtcbiAgICAgIHZhciBsYXN0Tm9kZTtcbiAgICAgIHdoaWxlIChcbiAgICAgICAgKGxhc3ROb2RlID0gZWwuY2hpbGRyZW5bZWwuY2hpbGRyZW4ubGVuZ3RoIC0gMV0pICYmXG4gICAgICAgIGxhc3ROb2RlLnR5cGUgPT09IDMgJiZcbiAgICAgICAgbGFzdE5vZGUudGV4dCA9PT0gJyAnXG4gICAgICApIHtcbiAgICAgICAgZWwuY2hpbGRyZW4ucG9wKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2hlY2tSb290Q29uc3RyYWludHMgKGVsKSB7XG4gICAgaWYgKGVsLnRhZyA9PT0gJ3Nsb3QnIHx8IGVsLnRhZyA9PT0gJ3RlbXBsYXRlJykge1xuICAgICAgd2Fybk9uY2UoXG4gICAgICAgIFwiQ2Fubm90IHVzZSA8XCIgKyAoZWwudGFnKSArIFwiPiBhcyBjb21wb25lbnQgcm9vdCBlbGVtZW50IGJlY2F1c2UgaXQgbWF5IFwiICtcbiAgICAgICAgJ2NvbnRhaW4gbXVsdGlwbGUgbm9kZXMuJyxcbiAgICAgICAgeyBzdGFydDogZWwuc3RhcnQgfVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGVsLmF0dHJzTWFwLmhhc093blByb3BlcnR5KCd2LWZvcicpKSB7XG4gICAgICB3YXJuT25jZShcbiAgICAgICAgJ0Nhbm5vdCB1c2Ugdi1mb3Igb24gc3RhdGVmdWwgY29tcG9uZW50IHJvb3QgZWxlbWVudCBiZWNhdXNlICcgK1xuICAgICAgICAnaXQgcmVuZGVycyBtdWx0aXBsZSBlbGVtZW50cy4nLFxuICAgICAgICBlbC5yYXdBdHRyc01hcFsndi1mb3InXVxuICAgICAgKTtcbiAgICB9XG4gI
118H1cblxuICBwYXJzZUhUTUwodGVtcGxhdGUsIHtcbiAgICB3YXJuOiB3YXJuJDIsXG4gICAgZXhwZWN0SFRNTDogb3B0aW9ucy5leHBlY3RIVE1MLFxuICAgIGlzVW5hcnlUYWc6IG9wdGlvbnMuaXNVbmFyeVRhZyxcbiAgICBjYW5CZUxlZnRPcGVuVGFnOiBvcHRpb25zLmNhbkJlTGVmdE9wZW5UYWcsXG4gICAgc2hvdWxkRGVjb2RlTmV3bGluZXM6IG9wdGlvbnMuc2hvdWxkRGVjb2RlTmV3bGluZXMsXG4gICAgc2hvdWxkRGVjb2RlTmV3bGluZXNGb3JIcmVmOiBvcHRpb25zLnNob3VsZERlY29kZU5ld2xpbmVzRm9ySHJlZixcbiAgICBzaG91bGRLZWVwQ29tbWVudDogb3B0aW9ucy5jb21tZW50cyxcbiAgICBvdXRwdXRTb3VyY2VSYW5nZTogb3B0aW9ucy5vdXRwdXRTb3VyY2VSYW5nZSxcbiAgICBzdGFydDogZnVuY3Rpb24gc3RhcnQgKHRhZywgYXR0cnMsIHVuYXJ5LCBzdGFydCQxLCBlbmQpIHtcbiAgICAgIC8vIGNoZWNrIG5hbWVzcGFjZS5cbiAgICAgIC8vIGluaGVyaXQgcGFyZW50IG5zIGlmIHRoZXJlIGlzIG9uZVxuICAgICAgdmFyIG5zID0gKGN1cnJlbnRQYXJlbnQgJiYgY3VycmVudFBhcmVudC5ucykgfHwgcGxhdGZvcm1HZXRUYWdOYW1lc3BhY2UodGFnKTtcblxuICAgICAgLy8gaGFuZGxlIElFIHN2ZyBidWdcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKGlzSUUgJiYgbnMgPT09ICdzdmcnKSB7XG4gICAgICAgIGF0dHJzID0gZ3VhcmRJRVNWR0J1ZyhhdHRycyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBlbGVtZW50ID0gY3JlYXRlQVNURWxlbWVudCh0YWcsIGF0dHJzLCBjdXJyZW50UGFyZW50KTtcbiAgICAgIGlmIChucykge1xuICAgICAgICBlbGVtZW50Lm5zID0gbnM7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmIChvcHRpb25zLm91dHB1dFNvdXJjZVJhbmdlKSB7XG4gICAgICAgICAgZWxlbWVudC5zdGFydCA9IHN0YXJ0JDE7XG4gICAgICAgICAgZWxlbWVudC5lbmQgPSBlbmQ7XG4gICAgICAgICAgZWxlbWVudC5yYXdBdHRyc01hcCA9IGVsZW1lbnQuYXR0cnNMaXN0LnJlZHVjZShmdW5jdGlvbiAoY3VtdWxhdGVkLCBhdHRyKSB7XG4gICAgICAgICAgICBjdW11bGF0ZWRbYXR0ci5uYW1lXSA9IGF0dHI7XG4gICAgICAgICAgICByZXR1cm4gY3VtdWxhdGVkXG4gICAgICAgICAgfSwge30pO1xuICAgICAgICB9XG4gICAgICAgIGF0dHJzLmZvckVhY2goZnVuY3Rpb24gKGF0dHIpIHtcbiAgICAgICAgICBpZiAoaW52YWxpZEF0dHJpYnV0ZVJFLnRlc3QoYXR0ci5uYW1lKSkge1xuICAgICAgICAgICAgd2FybiQyKFxuICAgICAgICAgICAgICBcIkludmFsaWQgZHluYW1pYyBhcmd1bWVudCBleHByZXNzaW9uOiBhdHRyaWJ1dGUgbmFtZXMgY2Fubm90IGNvbnRhaW4gXCIgK1xuICAgICAgICAgICAgICBcInNwYWNlcywgcXVvdGVzLCA8LCA+LCAvIG9yID0uXCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGFydDogYXR0ci5zdGFydCArIGF0dHIubmFtZS5pbmRleE9mKFwiW1wiKSxcbiAgICAgICAgICAgICAgICBlbmQ6IGF0dHIuc3RhcnQgKyBhdHRyLm5hbWUubGVuZ3RoXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzRm9yYmlkZGVuVGFnKGVsZW1lbnQpICYmICFpc1NlcnZlclJlbmRlcmluZygpKSB7XG4gICAgICAgIGVsZW1lbnQuZm9yYmlkZGVuID0gdHJ1ZTtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuJDIoXG4gICAgICAgICAgJ1RlbXBsYXRlcyBzaG91bGQgb25seSBiZSByZXNwb25zaWJsZSBmb3IgbWFwcGluZyB0aGUgc3RhdGUgdG8gdGhlICcgK1xuICAgICAgICAgICdVSS4gQXZvaWQgcGxhY2luZyB0YWdzIHdpdGggc2lkZS1lZmZlY3RzIGluIHlvdXIgdGVtcGxhdGVzLCBzdWNoIGFzICcgK1xuICAgICAgICAgIFwiPFwiICsgdGFnICsgXCI+XCIgKyAnLCBhcyB0aGV5IHdpbGwgbm90IGJlIHBhcnNlZC4nLFxuICAgICAgICAgIHsgc3RhcnQ6IGVsZW1lbnQuc3RhcnQgfVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBhcHBseSBwcmUtdHJhbnNmb3Jtc1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcmVUcmFuc2Zvcm1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVsZW1lbnQgPSBwcmVUcmFuc2Zvcm1zW2ldKGVsZW1lbnQsIG9wdGlvbnMpIHx8IGVsZW1lbnQ7XG4gICAgICB9XG5cbiAgICAgIGlmICghaW5WUHJlKSB7XG4gICAgICAgIHByb2Nlc3NQcmUoZWxlbWVudCk7XG4gICAgICAgIGlmIChlbGVtZW50LnByZSkge1xuICAgICAgICAgIGluVlByZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwbGF0Zm9ybUlzUHJlVGFnKGVsZW1lbnQudGFnKSkge1xuICAgICAgICBpblByZSA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoaW5WUHJlKSB7XG4gICAgICAgIHByb2Nlc3NSYXdBdHRycyhlbGVtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAoIWVsZW1lbnQucHJvY2Vzc2VkKSB7XG4gICAgICAgIC8vIHN0cnVjdHVyYWwgZGlyZWN0aXZlc1xuICAgICAgICBwcm9jZXNzRm9yKGVsZW1lbnQpO1xuICAgICAgICBwcm9jZXNzSWYoZWxlbWVudCk7XG4gICAgICAgIHByb2Nlc3NPbmNlKGVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXJvb3QpIHtcbiAgICAgICAgcm9vdCA9IGVsZW1lbnQ7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgY2hlY2tSb290Q29uc3RyYWludHMocm9vdCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCF1bmFyeSkge1xuICAgICAgICBjdXJyZW50UGFyZW50ID0gZWxlbWVudDtcbiAgICAgICAgc3RhY2sucHVzaChlbGVtZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsb3NlRWxlbWVudChlbGVtZW50KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZW5kOiBmdW5jdGlvbiBlbmQgKHRhZywgc3RhcnQsIGVuZCQxKSB7XG4gICAgICB2Y
118XIgZWxlbWVudCA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgLy8gcG9wIHN0YWNrXG4gICAgICBzdGFjay5sZW5ndGggLT0gMTtcbiAgICAgIGN1cnJlbnRQYXJlbnQgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIG9wdGlvbnMub3V0cHV0U291cmNlUmFuZ2UpIHtcbiAgICAgICAgZWxlbWVudC5lbmQgPSBlbmQkMTtcbiAgICAgIH1cbiAgICAgIGNsb3NlRWxlbWVudChlbGVtZW50KTtcbiAgICB9LFxuXG4gICAgY2hhcnM6IGZ1bmN0aW9uIGNoYXJzICh0ZXh0LCBzdGFydCwgZW5kKSB7XG4gICAgICBpZiAoIWN1cnJlbnRQYXJlbnQpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBpZiAodGV4dCA9PT0gdGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHdhcm5PbmNlKFxuICAgICAgICAgICAgICAnQ29tcG9uZW50IHRlbXBsYXRlIHJlcXVpcmVzIGEgcm9vdCBlbGVtZW50LCByYXRoZXIgdGhhbiBqdXN0IHRleHQuJyxcbiAgICAgICAgICAgICAgeyBzdGFydDogc3RhcnQgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCh0ZXh0ID0gdGV4dC50cmltKCkpKSB7XG4gICAgICAgICAgICB3YXJuT25jZShcbiAgICAgICAgICAgICAgKFwidGV4dCBcXFwiXCIgKyB0ZXh0ICsgXCJcXFwiIG91dHNpZGUgcm9vdCBlbGVtZW50IHdpbGwgYmUgaWdub3JlZC5cIiksXG4gICAgICAgICAgICAgIHsgc3RhcnQ6IHN0YXJ0IH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgLy8gSUUgdGV4dGFyZWEgcGxhY2Vob2xkZXIgYnVnXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChpc0lFICYmXG4gICAgICAgIGN1cnJlbnRQYXJlbnQudGFnID09PSAndGV4dGFyZWEnICYmXG4gICAgICAgIGN1cnJlbnRQYXJlbnQuYXR0cnNNYXAucGxhY2Vob2xkZXIgPT09IHRleHRcbiAgICAgICkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHZhciBjaGlsZHJlbiA9IGN1cnJlbnRQYXJlbnQuY2hpbGRyZW47XG4gICAgICBpZiAoaW5QcmUgfHwgdGV4dC50cmltKCkpIHtcbiAgICAgICAgdGV4dCA9IGlzVGV4dFRhZyhjdXJyZW50UGFyZW50KSA/IHRleHQgOiBkZWNvZGVIVE1MQ2FjaGVkKHRleHQpO1xuICAgICAgfSBlbHNlIGlmICghY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgIC8vIHJlbW92ZSB0aGUgd2hpdGVzcGFjZS1vbmx5IG5vZGUgcmlnaHQgYWZ0ZXIgYW4gb3BlbmluZyB0YWdcbiAgICAgICAgdGV4dCA9ICcnO1xuICAgICAgfSBlbHNlIGlmICh3aGl0ZXNwYWNlT3B0aW9uKSB7XG4gICAgICAgIGlmICh3aGl0ZXNwYWNlT3B0aW9uID09PSAnY29uZGVuc2UnKSB7XG4gICAgICAgICAgLy8gaW4gY29uZGVuc2UgbW9kZSwgcmVtb3ZlIHRoZSB3aGl0ZXNwYWNlIG5vZGUgaWYgaXQgY29udGFpbnNcbiAgICAgICAgICAvLyBsaW5lIGJyZWFrLCBvdGhlcndpc2UgY29uZGVuc2UgdG8gYSBzaW5nbGUgc3BhY2VcbiAgICAgICAgICB0ZXh0ID0gbGluZUJyZWFrUkUudGVzdCh0ZXh0KSA/ICcnIDogJyAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRleHQgPSAnICc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRleHQgPSBwcmVzZXJ2ZVdoaXRlc3BhY2UgPyAnICcgOiAnJztcbiAgICAgIH1cbiAgICAgIGlmICh0ZXh0KSB7XG4gICAgICAgIGlmICghaW5QcmUgJiYgd2hpdGVzcGFjZU9wdGlvbiA9PT0gJ2NvbmRlbnNlJykge1xuICAgICAgICAgIC8vIGNvbmRlbnNlIGNvbnNlY3V0aXZlIHdoaXRlc3BhY2VzIGludG8gc2luZ2xlIHNwYWNlXG4gICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSh3aGl0ZXNwYWNlUkUkMSwgJyAnKTtcbiAgICAgICAgfVxuICAgICAgICB2Y
118XIgcmVzO1xuICAgICAgICB2YXIgY2hpbGQ7XG4gICAgICAgIGlmICghaW5WUHJlICYmIHRleHQgIT09ICcgJyAmJiAocmVzID0gcGFyc2VUZXh0KHRleHQsIGRlbGltaXRlcnMpKSkge1xuICAgICAgICAgIGNoaWxkID0ge1xuICAgICAgICAgICAgdHlwZTogMixcbiAgICAgICAgICAgIGV4cHJlc3Npb246IHJlcy5leHByZXNzaW9uLFxuICAgICAgICAgICAgdG9rZW5zOiByZXMudG9rZW5zLFxuICAgICAgICAgICAgdGV4dDogdGV4dFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAodGV4dCAhPT0gJyAnIHx8ICFjaGlsZHJlbi5sZW5ndGggfHwgY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0udGV4dCAhPT0gJyAnKSB7XG4gICAgICAgICAgY2hpbGQgPSB7XG4gICAgICAgICAgICB0eXBlOiAzLFxuICAgICAgICAgICAgdGV4dDogdGV4dFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoaWxkKSB7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgb3B0aW9ucy5vdXRwdXRTb3VyY2VSYW5nZSkge1xuICAgICAgICAgICAgY2hpbGQuc3RhcnQgPSBzdGFydDtcbiAgICAgICAgICAgIGNoaWxkLmVuZCA9IGVuZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGNvbW1lbnQ6IGZ1bmN0aW9uIGNvbW1lbnQgKHRleHQsIHN0YXJ0LCBlbmQpIHtcbiAgICAgIC8vIGFkZGluZyBhbnl0aGluZyBhcyBhIHNpYmxpbmcgdG8gdGhlIHJvb3Qgbm9kZSBpcyBmb3JiaWRkZW5cbiAgICAgIC8vIGNvbW1lbnRzIHNob3VsZCBzdGlsbCBiZSBhbGxvd2VkLCBidXQgaWdub3JlZFxuICAgICAgaWYgKGN1cnJlbnRQYXJlbnQpIHtcbiAgICAgICAgdmFyIGNoaWxkID0ge1xuICAgICAgICAgIHR5cGU6IDMsXG4gICAgICAgICAgdGV4dDogdGV4dCxcbiAgICAgICAgICBpc0NvbW1lbnQ6IHRydWVcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgb3B0aW9ucy5vdXRwdXRTb3VyY2VSYW5nZSkge1xuICAgICAgICAgIGNoaWxkLnN0YXJ0ID0gc3RhcnQ7XG4gICAgICAgICAgY2hpbGQuZW5kID0gZW5kO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnRQYXJlbnQuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJvb3Rcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1ByZSAoZWwpIHtcbiAgaWYgKGdldEFuZFJlbW92ZUF0dHIoZWwsICd2LXByZScpICE9IG51bGwpIHtcbiAgICBlbC5wcmUgPSB0cnVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NSYXdBdHRycyAoZWwpIHtcbiAgdmFyIGxpc3QgPSBlbC5hdHRyc0xpc3Q7XG4gIHZhciBsZW4gPSBsaXN0Lmxlbmd0aDtcbiAgaWYgKGxlbikge1xuICAgIHZhciBhdHRycyA9IGVsLmF0dHJzID0gbmV3IEFycmF5KGxlbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgYXR0cnNbaV0gPSB7XG4gICAgICAgIG5hbWU6IGxpc3RbaV0ubmFtZSxcbiAgICAgICAgdmFsdWU6IEpTT04uc3RyaW5naWZ5KGxpc3RbaV0udmFsdWUpXG4gICAgICB9O1xuICAgICAgaWYgKGxpc3RbaV0uc3RhcnQgIT0gbnVsbCkge1xuICAgICAgICBhdHRyc1tpXS5zdGFydCA9IGxpc3RbaV0uc3RhcnQ7XG4gICAgICAgIGF0dHJzW2ldLmVuZCA9IGxpc3RbaV0uZW5kO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmICghZWwucHJlKSB7XG4gICAgLy8gbm9uIHJvb3Qgbm9kZSBpbiBwcmUgYmxvY2tzIHdpdGggbm8gYXR0cmlidXRlc1xuICAgIGVsLnBsYWluID0gdHJ1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzRWxlbWVudCAoXG4gIGVsZW1lbnQsXG4gIG9wdGlvbnNcbikge1xuICBwcm9jZXNzS2V5KGVsZW1lbnQpO1xuXG4gIC8vIGRldGVybWluZSB3aGV0aGVyIHR
118oaXMgaXMgYSBwbGFpbiBlbGVtZW50IGFmdGVyXG4gIC8vIHJlbW92aW5nIHN0cnVjdHVyYWwgYXR0cmlidXRlc1xuICBlbGVtZW50LnBsYWluID0gKFxuICAgICFlbGVtZW50LmtleSAmJlxuICAgICFlbGVtZW50LnNjb3BlZFNsb3RzICYmXG4gICAgIWVsZW1lbnQuYXR0cnNMaXN0Lmxlbmd0aFxuICApO1xuXG4gIHByb2Nlc3NSZWYoZWxlbWVudCk7XG4gIHByb2Nlc3NTbG90Q29udGVudChlbGVtZW50KTtcbiAgcHJvY2Vzc1Nsb3RPdXRsZXQoZWxlbWVudCk7XG4gIHByb2Nlc3NDb21wb25lbnQoZWxlbWVudCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdHJhbnNmb3Jtcy5sZW5ndGg7IGkrKykge1xuICAgIGVsZW1lbnQgPSB0cmFuc2Zvcm1zW2ldKGVsZW1lbnQsIG9wdGlvbnMpIHx8IGVsZW1lbnQ7XG4gIH1cbiAgcHJvY2Vzc0F0dHJzKGVsZW1lbnQpO1xuICByZXR1cm4gZWxlbWVudFxufVxuXG5mdW5jdGlvbiBwcm9jZXNzS2V5IChlbCkge1xuICB2YXIgZXhwID0gZ2V0QmluZGluZ0F0dHIoZWwsICdrZXknKTtcbiAgaWYgKGV4cCkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoZWwudGFnID09PSAndGVtcGxhdGUnKSB7XG4gICAgICAgIHdhcm4kMihcbiAgICAgICAgICBcIjx0ZW1wbGF0ZT4gY2Fubm90IGJlIGtleWVkLiBQbGFjZSB0aGUga2V5IG9uIHJlYWwgZWxlbWVudHMgaW5zdGVhZC5cIixcbiAgICAgICAgICBnZXRSYXdCaW5kaW5nQXR0cihlbCwgJ2tleScpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoZWwuZm9yKSB7XG4gICAgICAgIHZhciBpdGVyYXRvciA9IGVsLml0ZXJhdG9yMiB8fCBlbC5pdGVyYXRvcjE7XG4gICAgICAgIHZhciBwYXJlbnQgPSBlbC5wYXJlbnQ7XG4gICAgICAgIGlmIChpdGVyYXRvciAmJiBpdGVyYXRvciA9PT0gZXhwICYmIHBhcmVudCAmJiBwYXJlbnQudGFnID09PSAndHJhbnNpdGlvbi1ncm91cCcpIHtcbiAgICAgICAgICB3YXJuJDIoXG4gICAgICAgICAgICBcIkRvIG5vdCB1c2Ugdi1mb3IgaW5kZXggYXMga2V5IG9uIDx0cmFuc2l0aW9uLWdyb3VwPiBjaGlsZHJlbiwgXCIgK1xuICAgICAgICAgICAgXCJ0aGlzIGlzIHRoZSBzYW1lIGFzIG5vdCB1c2luZyBrZXlzLlwiLFxuICAgICAgICAgICAgZ2V0UmF3QmluZGluZ0F0dHIoZWwsICdrZXknKSxcbiAgICAgICAgICAgIHRydWUgLyogdGlwICovXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBlbC5rZXkgPSBleHA7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1JlZiAoZWwpIHtcbiAgdmFyIHJlZiA9IGdldEJpbmRpbmdBdHRyKGVsLCAncmVmJyk7XG4gIGlmIChyZWYpIHtcbiAgICBlbC5yZWYgPSByZWY7XG4gICAgZWwucmVmSW5Gb3IgPSBjaGVja0luRm9yKGVsKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzRm9yIChlbCkge1xuICB2YXIgZXhwO1xuICBpZiAoKGV4cCA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICd2LWZvcicpKSkge1xuICAgIHZhciByZXMgPSBwYXJzZUZvcihleHApO1xuICAgIGlmIChyZXMpIHtcbiAgICAgIGV4dGVuZChlbCwgcmVzKTtcbiAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHdhcm4kMihcbiAgICAgICAgKFwiSW52YWxpZCB2LWZvciBleHByZXNzaW9uOiBcIiArIGV4cCksXG4gICAgICAgIGVsLnJhd0F0dHJzTWFwWyd2LWZvciddXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5cblxuZnVuY3Rpb24gcGFyc2VGb3IgKGV4cCkge1xuICB2YXIgaW5NYXRjaCA9IGV4cC5tYXRjaChmb3JBbGlhc1JFKTtcbiAgaWYgKCFpbk1hdGNoKSB7IHJldHVybiB9XG4gIHZhciByZXMgPSB7fTtcbiAgcmVzLmZvciA9IGluTWF0Y2hbMl0udHJpbSgpO1xuICB2YXIgYWxpYXMgPSBpbk1hdGNoWzFdLnRyaW0oKS5yZXBsYWNlKHN0cmlwUGFyZW5zUkUsICcnKTtcbiAgdmFyIGl0ZXJhdG9yTWF0Y2ggPSBhbGlhcy5tYXRjaChmb3JJdGVyYXRvclJFKTtcbiAgaWYgKGl0ZXJhdG9yTWF0Y2gpIHtcbiAgICByZXMuYWxpYXMgPSBhbGlhcy5yZXBsYWNlKGZvckl0ZXJhdG9yUkUsICcnKS50cmltKCk7XG4gICAgcmVzLml0ZXJhdG9yMSA9IGl0ZXJhdG9yTWF0Y2hbMV0udHJpbSgpO1xuICAgIGlmIChpdGVyYXRvck1hdGNoWzJdKSB7XG4gICAgICByZXMuaXRlcmF0b3IyID0gaXRlcmF0b3JNYXRjaFsyXS50cmltKCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJlcy5hbGlhcyA9IGFsaWFzO1xuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0lmIChlbCkge1xuICB2YXIgZXhwID0gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3YtaWYnKTtcbiAgaWYgKGV4cCkge1xuICAgIGVsLmlmID0gZXhwO1xuICAgIGFkZElmQ29uZGl0aW9uKGVsLCB7XG4gICAgICBleHA6IGV4cCxcbiAgICAgIGJsb2NrOiBlbFxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGlmIChnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1lbHNlJykgIT0gbnVsbCkge1xuICAgICAgZWwuZWxzZSA9IHRydWU7XG4gICAgfVxuICAgIHZhciBlbHNlaWYgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1lbHNlLWlmJyk7XG4gICAgaWYgKGVsc2VpZikge1xuICAgICAgZWwuZWxzZWlmID0gZWxzZWlmO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzSWZDb25kaXRpb25zIChlbCwgcGFyZW50KSB7XG4gIHZhciBwcmV2ID0gZmluZFByZXZFbGVtZW50KHBhcmVudC5jaGlsZHJlbik7XG4gIGlmIChwcmV2ICYmIHByZXYuaWYpIHtcbiAgICBhZGRJZkNvbmRpdGlvbihwcmV2LCB7XG4gICAgICBleHA6IGVsLmVsc2VpZixcbiAgICAgIGJsb2NrOiBlbFxuICAgIH0pO1xuICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB3YXJuJDIoXG4gICAgICBcInYtXCIgKyAoZWwuZWxzZWlmID8gKCdlbHNlLWlmPVwiJyArIGVsLmVsc2VpZiArICdcIicpIDogJ2Vsc2UnKSArIFwiIFwiICtcbiAgICAgIFwidXNlZCBvbiBlbGVtZW50IDxcIiArIChlbC50YWcpICsgXCI+IHdpdGhvdXQgY29ycmVzcG9uZGluZyB2LWlmLlwiLFxuICAgICAgZWwucmF3QXR0cnNNYXBbZWwuZWxzZWlmID8gJ3YtZWxzZS1pZicgOiAndi1lbHNlJ11cbiAgICApO
1181xuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRQcmV2RWxlbWVudCAoY2hpbGRyZW4pIHtcbiAgdmFyIGkgPSBjaGlsZHJlbi5sZW5ndGg7XG4gIHdoaWxlIChpLS0pIHtcbiAgICBpZiAoY2hpbGRyZW5baV0udHlwZSA9PT0gMSkge1xuICAgICAgcmV0dXJuIGNoaWxkcmVuW2ldXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGNoaWxkcmVuW2ldLnRleHQgIT09ICcgJykge1xuICAgICAgICB3YXJuJDIoXG4gICAgICAgICAgXCJ0ZXh0IFxcXCJcIiArIChjaGlsZHJlbltpXS50ZXh0LnRyaW0oKSkgKyBcIlxcXCIgYmV0d2VlbiB2LWlmIGFuZCB2LWVsc2UoLWlmKSBcIiArXG4gICAgICAgICAgXCJ3aWxsIGJlIGlnbm9yZWQuXCIsXG4gICAgICAgICAgY2hpbGRyZW5baV1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNoaWxkcmVuLnBvcCgpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRJZkNvbmRpdGlvbiAoZWwsIGNvbmRpdGlvbikge1xuICBpZiAoIWVsLmlmQ29uZGl0aW9ucykge1xuICAgIGVsLmlmQ29uZGl0aW9ucyA9IFtdO1xuICB9XG4gIGVsLmlmQ29uZGl0aW9ucy5wdXNoKGNvbmRpdGlvbik7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NPbmNlIChlbCkge1xuICB2YXIgb25jZSQkMSA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICd2LW9uY2UnKTtcbiAgaWYgKG9uY2UkJDEgIT0gbnVsbCkge1xuICAgIGVsLm9uY2UgPSB0cnVlO1xuICB9XG59XG5cbi8vIGhhbmRsZSBjb250ZW50IGJlaW5nIHBhc3NlZCB0byBhIGNvbXBvbmVudCBhcyBzbG90LFxuLy8gZS5nLiA8dGVtcGxhdGUgc2xvdD1cInh4eFwiPiwgPGRpdiBzbG90LXNjb3BlPVwieHh4XCI+XG5mdW5jdGlvbiBwcm9jZXNzU2xvdENvbnRlbnQgKGVsKSB7XG4gIHZhciBzbG90U2NvcGU7XG4gIGlmIChlbC50YWcgPT09ICd0ZW1wbGF0ZScpIHtcbiAgICBzbG90U2NvcGUgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAnc2NvcGUnKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzbG90U2NvcGUpIHtcbiAgICAgIHdhcm4kMihcbiAgICAgICAgXCJ0aGUgXFxcInNjb3BlXFxcIiBhdHRyaWJ1dGUgZm9yIHNjb3BlZCBzbG90cyBoYXZlIGJlZW4gZGVwcmVjYXRlZCBhbmQgXCIgK1xuICAgICAgICBcInJlcGxhY2VkIGJ5IFxcXCJzbG90LXNjb3BlXFxcIiBzaW5jZSAyLjUuIFRoZSBuZXcgXFxcInNsb3Qtc2NvcGVcXFwiIGF0dHJpYnV0ZSBcIiArXG4gICAgICAgIFwiY2FuIGFsc28gYmUgdXNlZCBvbiBwbGFpbiBlbGVtZW50cyBpbiBhZGRpdGlvbiB0byA8dGVtcGxhdGU+IHRvIFwiICtcbiAgICAgICAgXCJkZW5vdGUgc2NvcGVkIHNsb3RzLlwiLFxuICAgICAgICBlbC5yYXdBdHRyc01hcFsnc2NvcGUnXSxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICB9XG4gICAgZWwuc2xvdFNjb3BlID0gc2xvdFNjb3BlIHx8IGdldEFuZFJlbW92ZUF0dHIoZWwsICdzbG90LXNjb3BlJyk7XG4gIH0gZWxzZSBpZiAoKHNsb3RTY29wZSA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICdzbG90LXNjb3BlJykpKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgZWwuYXR0cnNNYXBbJ3YtZm9yJ10pIHtcbiAgICAgIHdhcm4kMihcbiAgICAgICAgXCJBbWJpZ3VvdXMgY29tYmluZWQgdXNhZ2Ugb2Ygc2xvdC1zY29wZSBhbmQgdi1mb3Igb24gPFwiICsgKGVsLnRhZykgKyBcIj4gXCIgK1xuICAgICAgICBcIih2LWZvciB0YWtlcyBoaWdoZXIgcHJpb3JpdHkpLiBVc2UgYSB3cmFwcGVyIDx0ZW1wbGF0ZT4gZm9yIHRoZSBcIiArXG4gICAgICAgIFwic2NvcGVkIHNsb3QgdG8gbWFrZSBpdCBjbGVhcmVyLlwiLFxuICAgICAgICBlbC5yYXdBdHRyc01hcFsnc2xvdC1zY29wZSddLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgIH1cbiAgICBlbC5zbG90U2NvcGUgPSBzbG90U2NvcGU7XG4gIH1cblxuICAvLyBzbG90PVwieHh4XCJcbiAgdmFyIHNsb3RUYXJnZXQgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ3Nsb3QnKTtcbiAgaWYgKHNsb3RUYXJnZXQpIHtcbiAgICBlbC5zbG90VGFyZ2V0ID0gc2xvdFRhcmdldCA9PT0gJ1wiXCInID8gJ1wiZGVmYXVsdFwiJyA6IHNsb3RUYXJnZXQ7XG4gICAgZWwuc2xvdFRhcmdldER5bmFtaWMgPSAhIShlbC5hdHRyc01hcFsnOnNsb3QnXSB8fCBlbC5hdHRyc01hcFsndi1iaW5kOnNsb3QnXSk7XG4gICAgLy8gcHJlc2VydmUgc2xvdCBhcyBhbiBhdHRyaWJ1dGUgZm9yIG5hdGl2ZSBzaGFkb3cgRE9NIGNvbXBhdFxuICAgIC8vIG9ubHkgZm9yIG5vbi1zY29wZWQgc2xvdHMuXG4gICAgaWYgKGVsLnRhZyAhPT0gJ3RlbXBsYXRlJyAmJiAhZWwuc2xvdFNjb3BlKSB7XG4gICAgICBhZGRBdHRyKGVsLCAnc2xvdCcsIHNsb3RUYXJnZXQsIGdldFJhd0JpbmRpbmdBdHRyKGVsLCAnc2xvdCcpKTtcbiAgICB9XG4gIH1cblxuICAvLyAyLjYgdi1zbG90IHN5bnRheFxuICB7XG4gICAgaWYgKGVsLnRhZyA9PT0gJ3RlbXBsYXRlJykge1xuICAgICAgLy8gdi1zbG90IG9uIDx0ZW1wbGF0ZT5cbiAgICAgIHZhciBzbG90QmluZGluZyA9IGdldEFuZFJlbW92ZUF0dHJCeVJlZ2V4KGVsLCBzbG90UkUpO1xuICAgICAgaWYgKHNsb3RCaW5kaW5nKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgaWYgKGVsLnNsb3RUYXJnZXQgfHwgZWwuc2xvdFNjb3BlKSB7XG4gICAgICAgICAgICB3YXJuJDIoXG4gICAgICAgICAgICAgIFwiVW5leHBlY3RlZCBtaXhlZCB1c2FnZSBvZiBkaWZmZXJlbnQgc2xvdCBzeW50YXhlcy5cIixcbiAgICAgICAgICAgICAgZWxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChlbC5wYXJlbnQgJiYgIW1heWJlQ29tcG9uZW50KGVsLnBhcmVudCkpIHtcbiAgICAgICAgICAgIHdhcm4kMihcbiAgICAgICAgICAgICAgXCI8dGVtcGxhdGUgdi1zbG90PiBjYW4gb25seSBhcHBlYXIgYXQgdGhlIHJvb3QgbGV2ZWwgaW5zaWRlIFwiICtcbiAgICAgICAgICAgICAgXCJ0aGUgcmVjZWl2aW5nIGNvbXBvbmVudFwiLFxuICAgICAgICAgICAgICBlbFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgI
118H1cbiAgICAgICAgdmFyIHJlZiA9IGdldFNsb3ROYW1lKHNsb3RCaW5kaW5nKTtcbiAgICAgICAgdmFyIG5hbWUgPSByZWYubmFtZTtcbiAgICAgICAgdmFyIGR5bmFtaWMgPSByZWYuZHluYW1pYztcbiAgICAgICAgZWwuc2xvdFRhcmdldCA9IG5hbWU7XG4gICAgICAgIGVsLnNsb3RUYXJnZXREeW5hbWljID0gZHluYW1pYztcbiAgICAgICAgZWwuc2xvdFNjb3BlID0gc2xvdEJpbmRpbmcudmFsdWUgfHwgZW1wdHlTbG90U2NvcGVUb2tlbjsgLy8gZm9yY2UgaXQgaW50byBhIHNjb3BlZCBzbG90IGZvciBwZXJmXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHYtc2xvdCBvbiBjb21wb25lbnQsIGRlbm90ZXMgZGVmYXVsdCBzbG90XG4gICAgICB2YXIgc2xvdEJpbmRpbmckMSA9IGdldEFuZFJlbW92ZUF0dHJCeVJlZ2V4KGVsLCBzbG90UkUpO1xuICAgICAgaWYgKHNsb3RCaW5kaW5nJDEpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBpZiAoIW1heWJlQ29tcG9uZW50KGVsKSkge1xuICAgICAgICAgICAgd2FybiQyKFxuICAgICAgICAgICAgICBcInYtc2xvdCBjYW4gb25seSBiZSB1c2VkIG9uIGNvbXBvbmVudHMgb3IgPHRlbXBsYXRlPi5cIixcbiAgICAgICAgICAgICAgc2xvdEJpbmRpbmckMVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGVsLnNsb3RTY29wZSB8fCBlbC5zbG90VGFyZ2V0KSB7XG4gICAgICAgICAgICB3YXJuJDIoXG4gICAgICAgICAgICAgIFwiVW5leHBlY3RlZCBtaXhlZCB1c2FnZSBvZiBkaWZmZXJlbnQgc2xvdCBzeW50YXhlcy5cIixcbiAgICAgICAgICAgICAgZWxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChlbC5zY29wZWRTbG90cykge1xuICAgICAgICAgICAgd2FybiQyKFxuICAgICAgICAgICAgICBcIlRvIGF2b2lkIHNjb3BlIGFtYmlndWl0eSwgdGhlIGRlZmF1bHQgc2xvdCBzaG91bGQgYWxzbyB1c2UgXCIgK1xuICAgICAgICAgICAgICBcIjx0ZW1wbGF0ZT4gc3ludGF4IHdoZW4gdGhlcmUgYXJlIG90aGVyIG5hbWVkIHNsb3RzLlwiLFxuICAgICAgICAgICAgICBzbG90QmluZGluZyQxXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBhZGQgdGhlIGNvbXBvbmVudCdzIGNoaWxkcmVuIHRvIGl0cyBkZWZhdWx0IHNsb3RcbiAgICAgICAgdmFyIHNsb3RzID0gZWwuc2NvcGVkU2xvdHMgfHwgKGVsLnNjb3BlZFNsb3RzID0ge30pO1xuICAgICAgICB2Y
118XIgcmVmJDEgPSBnZXRTbG90TmFtZShzbG90QmluZGluZyQxKTtcbiAgICAgICAgdmFyIG5hbWUkMSA9IHJlZiQxLm5hbWU7XG4gICAgICAgIHZhciBkeW5hbWljJDEgPSByZWYkMS5keW5hbWljO1xuICAgICAgICB2YXIgc2xvdENvbnRhaW5lciA9IHNsb3RzW25hbWUkMV0gPSBjcmVhdGVBU1RFbGVtZW50KCd0ZW1wbGF0ZScsIFtdLCBlbCk7XG4gICAgICAgIHNsb3RDb250YWluZXIuc2xvdFRhcmdldCA9IG5hbWUkMTtcbiAgICAgICAgc2xvdENvbnRhaW5lci5zbG90VGFyZ2V0RHluYW1pYyA9IGR5bmFtaWMkMTtcbiAgICAgICAgc2xvdENvbnRhaW5lci5jaGlsZHJlbiA9IGVsLmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbiAoYykge1xuICAgICAgICAgIGlmICghYy5zbG90U2NvcGUpIHtcbiAgICAgICAgICAgIGMucGFyZW50ID0gc2xvdENvbnRhaW5lcjtcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgc2xvdENvbnRhaW5lci5zbG90U2NvcGUgPSBzbG90QmluZGluZyQxLnZhbHVlIHx8IGVtcHR5U2xvdFNjb3BlVG9rZW47XG4gICAgICAgIC8vIHJlbW92ZSBjaGlsZHJlbiBhcyB0aGV5IGFyZSByZXR1cm5lZCBmcm9tIHNjb3BlZFNsb3RzIG5vd1xuICAgICAgICBlbC5jaGlsZHJlbiA9IFtdO1xuICAgICAgICAvLyBtYXJrIGVsIG5vbi1wbGFpbiBzbyBkYXRhIGdldHMgZ2VuZXJhdGVkXG4gICAgICAgIGVsLnBsYWluID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldFNsb3ROYW1lIChiaW5kaW5nKSB7XG4gIHZhciBuYW1lID0gYmluZGluZy5uYW1lLnJlcGxhY2Uoc2xvdFJFLCAnJyk7XG4gIGlmICghbmFtZSkge1xuICAgIGlmIChiaW5kaW5nLm5hbWVbMF0gIT09ICcjJykge1xuICAgICAgbmFtZSA9ICdkZWZhdWx0JztcbiAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHdhcm4kMihcbiAgICAgICAgXCJ2LXNsb3Qgc2hvcnRoYW5kIHN5bnRheCByZXF1aXJlcyBhIHNsb3QgbmFtZS5cIixcbiAgICAgICAgYmluZGluZ1xuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGR5bmFtaWNBcmdSRS50ZXN0KG5hbWUpXG4gICAgLy8gZHluYW1pYyBbbmFtZV1cbiAgICA/IHsgbmFtZTogbmFtZS5zbGljZSgxLCAtMSksIGR5bmFtaWM6IHRydWUgfVxuICAgIC8vIHN0YXRpYyBuYW1lXG4gICAgOiB7IG5hbWU6IChcIlxcXCJcIiArIG5hbWUgKyBcIlxcXCJcIiksIGR5bmFtaWM6IGZhbHNlIH1cbn1cblxuLy8gaGFuZGxlIDxzbG90Lz4gb3V0bGV0c1xuZnVuY3Rpb24gcHJvY2Vzc1Nsb3RPdXRsZXQgKGVsKSB7XG4gIGlmIChlbC50YWcgPT09ICdzbG90Jykge1xuICAgIGVsLnNsb3ROYW1lID0gZ2V0QmluZGluZ0F0dHIoZWwsICduYW1lJyk7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgZWwua2V5KSB7XG4gICAgICB3YXJuJDIoXG4gICAgICAgIFwiYGtleWAgZG9lcyBub3Qgd29yayBvbiA8c2xvdD4gYmVjYXVzZSBzbG90cyBhcmUgYWJzdHJhY3Qgb3V0bGV0cyBcIiArXG4gICAgICAgIFwiYW5kIGNhbiBwb3NzaWJseSBleHBhbmQgaW50byBtdWx0aXBsZSBlbGVtZW50cy4gXCIgK1xuICAgICAgICBcIlVzZSB0aGUga2V5IG9uIGEgd3JhcHBpbmcgZWxlbWVudCBpbnN0ZWFkLlwiLFxuICAgICAgICBnZXRSYXdCaW5kaW5nQXR0cihlbCwgJ2tleScpXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzQ29tcG9uZW50IChlbCkge1xuICB2YXIgYmluZGluZztcbiAgaWYgKChiaW5kaW5nID0gZ2V0QmluZGluZ0F0dHIoZWwsICdpcycpKSkge1xuICAgIGVsLmNvbXBvbmVudCA9IGJpbmRpbmc7XG4gIH1cbiAgaWYgKGdldEFuZFJlbW92ZUF0dHIoZWwsICdpbmxpbmUtdGVtcGxhdGUnKSAhPSBudWxsKSB7XG4gICAgZWwuaW5saW5lVGVtcGxhdGUgPSB0cnVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NBdHRycyAoZWwpIHtcbiAgdmFyIGxpc3QgPSBlbC5hdHRyc0xpc3Q7XG4gIHZhciBpLCBsLCBuYW1lLCByYXdOYW1lLCB2YWx1ZSwgbW9kaWZpZXJzLCBzeW5jR2VuLCBpc0R5bmFtaWM7XG4gIGZvciAoaSA9IDAsIGwgPSBsaXN0Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIG5hbWUgPSByYXdOYW1lID0gbGlzdFtpXS5uYW1lO1xuICAgIHZhbHVlID0gbGlzdFtpXS52YWx1ZTtcbiAgICBpZiAoZGlyUkUudGVzdChuYW1lKSkge1xuICAgICAgLy8gbWFyayBlbGVtZW50IGFzIGR5bmFtaWNcbiAgICAgIGVsLmhhc0JpbmRpbmdzID0gdHJ1ZTtcbiAgICAgIC8vIG1vZGlmaWVyc1xuICAgICAgbW9kaWZpZXJzID0gcGFyc2VNb2RpZmllcnMobmFtZS5yZXBsYWNlKGRpclJFLCAnJykpO1xuICAgICAgLy8gc3VwcG9ydCAuZm9vIHNob3J0aGFuZCBzeW50YXggZm9yIHRoZSAucHJvcCBtb2RpZmllclxuICAgICAgaWYgKG1vZGlmaWVycykge1xuICAgICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKG1vZGlmaWVyUkUsICcnKTtcbiAgICAgIH1cbiAgICAgIGlmIChiaW5kUkUudGVzdChuYW1lKSkgeyAvLyB2LWJpbmRcbiAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZShiaW5kUkUsICcnKTtcbiAgICAgICAgdmFsdWUgPSBwYXJzZUZpbHRlcnModmFsdWUpO1xuICAgICAgICBpc0R5bmFtaWMgPSBkeW5hbWljQXJnUkUudGVzdChuYW1lKTtcbiAgICAgICAgaWYgKGlzRHluYW1pYykge1xuICAgICAgICAgIG5hbWUgPSBuYW1lLnNsaWNlKDEsIC0xKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICAgIHZhbHVlLnRyaW0oKS5sZW5ndGggPT09IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgd2FybiQyKFxuICAgICAgICAgICAgKFwiVGhlIHZhbHVlIGZvciBhIHYtYmluZCBleHByZXNzaW9uIGNhbm5vdCBiZSBlbXB0eS4gRm91bmQgaW4gXFxcInYtYmluZDpcIiArIG5hbWUgKyBcIlxcXCJcIilcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtb2RpZmllcnMpIHtcbiAgICAgICAgICBpZiAobW9kaWZpZXJzLnByb3AgJiYgIWlzRHluYW1pYykge1xuICAgICAgICAgICAgbmFtZSA9IGNhbWVsaXplKG5hbWUpO1xuICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdpbm5lckh0bWwnKSB7IG5hbWUgPSAnaW5uZXJIVE1MJzsgfVxuICAgICAgICAgI
118H1cbiAgICAgICAgICBpZiAobW9kaWZpZXJzLmNhbWVsICYmICFpc0R5bmFtaWMpIHtcbiAgICAgICAgICAgIG5hbWUgPSBjYW1lbGl6ZShuYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG1vZGlmaWVycy5zeW5jKSB7XG4gICAgICAgICAgICBzeW5jR2VuID0gZ2VuQXNzaWdubWVudENvZGUodmFsdWUsIFwiJGV2ZW50XCIpO1xuICAgICAgICAgICAgaWYgKCFpc0R5bmFtaWMpIHtcbiAgICAgICAgICAgICAgYWRkSGFuZGxlcihcbiAgICAgICAgICAgICAgICBlbCxcbiAgICAgICAgICAgICAgICAoXCJ1cGRhdGU6XCIgKyAoY2FtZWxpemUobmFtZSkpKSxcbiAgICAgICAgICAgICAgICBzeW5jR2VuLFxuICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgd2FybiQyLFxuICAgICAgICAgICAgICAgIGxpc3RbaV1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKGh5cGhlbmF0ZShuYW1lKSAhPT0gY2FtZWxpemUobmFtZSkpIHtcbiAgICAgICAgICAgICAgICBhZGRIYW5kbGVyKFxuICAgICAgICAgICAgICAgICAgZWwsXG4gICAgICAgICAgICAgICAgICAoXCJ1cGRhdGU6XCIgKyAoaHlwaGVuYXRlKG5hbWUpKSksXG4gICAgICAgICAgICAgICAgICBzeW5jR2VuLFxuICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgd2FybiQyLFxuICAgICAgICAgICAgICAgICAgbGlzdFtpXVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIGhhbmRsZXIgdy8gZHluYW1pYyBldmVudCBuYW1lXG4gICAgICAgICAgICAgIGFkZEhhbmRsZXIoXG4gICAgICAgICAgICAgICAgZWwsXG4gICAgICAgICAgICAgICAgKFwiXFxcInVwZGF0ZTpcXFwiKyhcIiArIG5hbWUgKyBcIilcIiksXG4gICAgICAgICAgICAgICAgc3luY0dlbixcbiAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgIHdhcm4kMixcbiAgICAgICAgICAgICAgICBsaXN0W2ldLFxuICAgICAgICAgICAgICAgIHRydWUgLy8gZHluYW1pY1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoKG1vZGlmaWVycyAmJiBtb2RpZmllcnMucHJvcCkgfHwgKFxuICAgICAgICAgICFlbC5jb21wb25lbnQgJiYgcGxhdGZvcm1NdXN0VXNlUHJvcChlbC50YWcsIGVsLmF0dHJzTWFwLnR5cGUsIG5hbWUpXG4gICAgICAgICkpIHtcbiAgICAgICAgICBhZGRQcm9wKGVsLCBuYW1lLCB2YWx1ZSwgbGlzdFtpXSwgaXNEeW5hbWljKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZGRBdHRyKGVsLCBuYW1lLCB2YWx1ZSwgbGlzdFtpXSwgaXNEeW5hbWljKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChvblJFLnRlc3QobmFtZSkpIHsgLy8gdi1vblxuICAgICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKG9uUkUsICcnKTtcbiAgICAgICAgaXNEeW5hbWljID0gZHluYW1pY0FyZ1JFLnRlc3QobmFtZSk7XG4gICAgICAgIGlmIChpc0R5bmFtaWMpIHtcbiAgICAgICAgICBuYW1lID0gbmFtZS5zbGljZSgxLCAtMSk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkSGFuZGxlcihlbCwgbmFtZSwgdmFsdWUsIG1vZGlmaWVycywgZmFsc2UsIHdhcm4kMiwgbGlzdFtpXSwgaXNEeW5hbWljKTtcbiAgICAgIH0gZWxzZSB7IC8vIG5vcm1hbCBkaXJlY3RpdmVzXG4gICAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoZGlyUkUsICcnKTtcbiAgICAgICAgLy8gcGFyc2UgYXJnXG4gICAgICAgIHZhciBhcmdNYXRjaCA9IG5hbWUubWF0Y2goYXJnUkUpO1xuICAgICAgICB2Y
118XIgYXJnID0gYXJnTWF0Y2ggJiYgYXJnTWF0Y2hbMV07XG4gICAgICAgIGlzRHluYW1pYyA9IGZhbHNlO1xuICAgICAgICBpZiAoYXJnKSB7XG4gICAgICAgICAgbmFtZSA9IG5hbWUuc2xpY2UoMCwgLShhcmcubGVuZ3RoICsgMSkpO1xuICAgICAgICAgIGlmIChkeW5hbWljQXJnUkUudGVzdChhcmcpKSB7XG4gICAgICAgICAgICBhcmcgPSBhcmcuc2xpY2UoMSwgLTEpO1xuICAgICAgICAgICAgaXNEeW5hbWljID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYWRkRGlyZWN0aXZlKGVsLCBuYW1lLCByYXdOYW1lLCB2YWx1ZSwgYXJnLCBpc0R5bmFtaWMsIG1vZGlmaWVycywgbGlzdFtpXSk7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIG5hbWUgPT09ICdtb2RlbCcpIHtcbiAgICAgICAgICBjaGVja0ZvckFsaWFzTW9kZWwoZWwsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBsaXRlcmFsIGF0dHJpYnV0ZVxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgdmFyIHJlcyA9IHBhcnNlVGV4dCh2YWx1ZSwgZGVsaW1pdGVycyk7XG4gICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICB3YXJuJDIoXG4gICAgICAgICAgICBuYW1lICsgXCI9XFxcIlwiICsgdmFsdWUgKyBcIlxcXCI6IFwiICtcbiAgICAgICAgICAgICdJbnRlcnBvbGF0aW9uIGluc2lkZSBhdHRyaWJ1dGVzIGhhcyBiZWVuIHJlbW92ZWQuICcgK1xuICAgICAgICAgICAgJ1VzZSB2LWJpbmQgb3IgdGhlIGNvbG9uIHNob3J0aGFuZCBpbnN0ZWFkLiBGb3IgZXhhbXBsZSwgJyArXG4gICAgICAgICAgICAnaW5zdGVhZCBvZiA8ZGl2IGlkPVwie3sgdmFsIH19XCI+LCB1c2UgPGRpdiA6aWQ9XCJ2YWxcIj4uJyxcbiAgICAgICAgICAgIGxpc3RbaV1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhZGRBdHRyKGVsLCBuYW1lLCBKU09OLnN0cmluZ2lmeSh2YWx1ZSksIGxpc3RbaV0pO1xuICAgICAgLy8gIzY4ODcgZmlyZWZveCBkb2Vzbid0IHVwZGF0ZSBtdXRlZCBzdGF0ZSBpZiBzZXQgdmlhIGF0dHJpYnV0ZVxuICAgICAgLy8gZXZlbiBpbW1lZGlhdGVseSBhZnRlciBlbGVtZW50IGNyZWF0aW9uXG4gICAgICBpZiAoIWVsLmNvbXBvbmVudCAmJlxuICAgICAgICAgIG5hbWUgPT09ICdtdXRlZCcgJiZcbiAgICAgICAgICBwbGF0Zm9ybU11c3RVc2VQcm9wKGVsLnRhZywgZWwuYXR0cnNNYXAudHlwZSwgbmFtZSkpIHtcbiAgICAgICAgYWRkUHJvcChlbCwgbmFtZSwgJ3RydWUnLCBsaXN0W2ldKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tJbkZvciAoZWwpIHtcbiAgdmFyIHBhcmVudCA9IGVsO1xuICB3aGlsZSAocGFyZW50KSB7XG4gICAgaWYgKHBhcmVudC5mb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gcGFyc2VNb2RpZmllcnMgKG5hbWUpIHtcbiAgdmFyIG1hdGNoID0gbmFtZS5tYXRjaChtb2RpZmllclJFKTtcbiAgaWYgKG1hdGNoKSB7XG4gICAgdmFyIHJldCA9IHt9O1xuICAgIG1hdGNoLmZvckVhY2goZnVuY3Rpb24gKG
1180pIHsgcmV0W20uc2xpY2UoMSldID0gdHJ1ZTsgfSk7XG4gICAgcmV0dXJuIHJldFxuICB9XG59XG5cbmZ1bmN0aW9uIG1ha2VBdHRyc01hcCAoYXR0cnMpIHtcbiAgdmFyIG1hcCA9IHt9O1xuICBmb3IgKHZhciBpID0gMCwgbCA9IGF0dHJzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGlmIChcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgIG1hcFthdHRyc1tpXS5uYW1lXSAmJiAhaXNJRSAmJiAhaXNFZGdlXG4gICAgKSB7XG4gICAgICB3YXJuJDIoJ2R1cGxpY2F0ZSBhdHRyaWJ1dGU6ICcgKyBhdHRyc1tpXS5uYW1lLCBhdHRyc1tpXSk7XG4gICAgfVxuICAgIG1hcFthdHRyc1tpXS5uYW1lXSA9IGF0dHJzW2ldLnZhbHVlO1xuICB9XG4gIHJldHVybiBtYXBcbn1cblxuLy8gZm9yIHNjcmlwdCAoZS5nLiB0eXBlPVwieC90ZW1wbGF0ZVwiKSBvciBzdHlsZSwgZG8gbm90IGRlY29kZSBjb250ZW50XG5mdW5jdGlvbiBpc1RleHRUYWcgKGVsKSB7XG4gIHJldHVybiBlbC50YWcgPT09ICdzY3JpcHQnIHx8IGVsLnRhZyA9PT0gJ3N0eWxlJ1xufVxuXG5mdW5jdGlvbiBpc0ZvcmJpZGRlblRhZyAoZWwpIHtcbiAgcmV0dXJuIChcbiAgICBlbC50YWcgPT09ICdzdHlsZScgfHxcbiAgICAoZWwudGFnID09PSAnc2NyaXB0JyAmJiAoXG4gICAgICAhZWwuYXR0cnNNYXAudHlwZSB8fFxuICAgICAgZWwuYXR0cnNNYXAudHlwZSA9PT0gJ3RleHQvamF2YXNjcmlwdCdcbiAgICApKVxuICApXG59XG5cbnZhciBpZU5TQnVnID0gL154bWxuczpOU1xcZCsvO1xudmFyIGllTlNQcmVmaXggPSAvXk5TXFxkKzovO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZnVuY3Rpb24gZ3VhcmRJRVNWR0J1ZyAoYXR0cnMpIHtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGF0dHIgPSBhdHRyc1tpXTtcbiAgICBpZiAoIWllTlNCdWcudGVzdChhdHRyLm5hbWUpKSB7XG4gICAgICBhdHRyLm5hbWUgPSBhdHRyLm5hbWUucmVwbGFjZShpZU5TUHJlZml4LCAnJyk7XG4gICAgICByZXMucHVzaChhdHRyKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBjaGVja0ZvckFsaWFzTW9kZWwgKGVsLCB2YWx1ZSkge1xuICB2YXIgX2VsID0gZWw7XG4gIHdoaWxlIChfZWwpIHtcbiAgICBpZiAoX2VsLmZvciAmJiBfZWwuYWxpYXMgPT09IHZhbHVlKSB7XG4gICAgICB3YXJuJDIoXG4gICAgICAgIFwiPFwiICsgKGVsLnRhZykgKyBcIiB2LW1vZGVsPVxcXCJcIiArIHZhbHVlICsgXCJcXFwiPjogXCIgK1xuICAgICAgICBcIllvdSBhcmUgYmluZGluZyB2LW1vZGVsIGRpcmVjdGx5IHRvIGEgdi1mb3IgaXRlcmF0aW9uIGFsaWFzLiBcIiArXG4gICAgICAgIFwiVGhpcyB3aWxsIG5vdCBiZSBhYmxlIHRvIG1vZGlmeSB0aGUgdi1mb3Igc291cmNlIGFycmF5IGJlY2F1c2UgXCIgK1xuICAgICAgICBcIndyaXRpbmcgdG8gdGhlIGFsaWFzIGlzIGxpa2UgbW9kaWZ5aW5nIGEgZnVuY3Rpb24gbG9jYWwgdmFyaWFibGUuIFwiICtcbiAgICAgICAgXCJDb25zaWRlciB1c2luZyBhbiBhcnJheSBvZiBvYmplY3RzIGFuZCB1c2Ugdi1tb2RlbCBvbiBhbiBvYmplY3QgcHJvcGVydHkgaW5zdGVhZC5cIixcbiAgICAgICAgZWwucmF3QXR0cnNNYXBbJ3YtbW9kZWwnXVxuICAgICAgKTtcbiAgICB9XG4gICAgX2VsID0gX2VsLnBhcmVudDtcbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gcHJlVHJhbnNmb3JtTm9kZSAoZWwsIG9wdGlvbnMpIHtcbiAgaWYgKGVsLnRhZyA9PT0gJ2lucHV0Jykge1xuICAgIHZhciBtYXAgPSBlbC5hdHRyc01hcDtcbiAgICBpZiAoIW1hcFsndi1tb2RlbCddKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB2YXIgdHlwZUJpbmRpbmc7XG4gICAgaWYgKG1hcFsnOnR5cGUnXSB8fCBtYXBbJ3YtYmluZDp0eXBlJ10pIHtcbiAgICAgIHR5cGVCaW5kaW5nID0gZ2V0QmluZGluZ0F0dHIoZWwsICd0eXBlJyk7XG4gICAgfVxuICAgIGlmICghbWFwLnR5cGUgJiYgIXR5cGVCaW5kaW5nICYmIG1hcFsndi1iaW5kJ10pIHtcbiAgICAgIHR5cGVCaW5kaW5nID0gXCIoXCIgKyAobWFwWyd2LWJpbmQnXSkgKyBcIikudHlwZVwiO1xuICAgIH1cblxuICAgIGlmICh0eXBlQmluZGluZykge1xuICAgICAgdmFyIGlmQ29uZGl0aW9uID0gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3YtaWYnLCB0cnVlKTtcbiAgICAgIHZhciBpZkNvbmRpdGlvbkV4dHJhID0gaWZDb25kaXRpb24gPyAoXCImJihcIiArIGlmQ29uZGl0aW9uICsgXCIpXCIpIDogXCJcIjtcbiAgICAgIHZhciBoYXNFbHNlID0gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3YtZWxzZScsIHRydWUpICE9IG51bGw7XG4gICAgICB2Y
118XIgZWxzZUlmQ29uZGl0aW9uID0gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3YtZWxzZS1pZicsIHRydWUpO1xuICAgICAgLy8gMS4gY2hlY2tib3hcbiAgICAgIHZhciBicmFuY2gwID0gY2xvbmVBU1RFbGVtZW50KGVsKTtcbiAgICAgIC8vIHByb2Nlc3MgZm9yIG9uIHRoZSBtYWluIG5vZGVcbiAgICAgIHByb2Nlc3NGb3IoYnJhbmNoMCk7XG4gICAgICBhZGRSYXdBdHRyKGJyYW5jaDAsICd0eXBlJywgJ2NoZWNrYm94Jyk7XG4gICAgICBwcm9jZXNzRWxlbWVudChicmFuY2gwLCBvcHRpb25zKTtcbiAgICAgIGJyYW5jaDAucHJvY2Vzc2VkID0gdHJ1ZTsgLy8gcHJldmVudCBpdCBmcm9tIGRvdWJsZS1wcm9jZXNzZWRcbiAgICAgIGJyYW5jaDAuaWYgPSBcIihcIiArIHR5cGVCaW5kaW5nICsgXCIpPT09J2NoZWNrYm94J1wiICsgaWZDb25kaXRpb25FeHRyYTtcbiAgICAgIGFkZElmQ29uZGl0aW9uKGJyYW5jaDAsIHtcbiAgICAgICAgZXhwOiBicmFuY2gwLmlmLFxuICAgICAgICBibG9jazogYnJhbmNoMFxuICAgICAgfSk7XG4gICAgICAvLyAyLiBhZGQgcmFkaW8gZWxzZS1pZiBjb25kaXRpb25cbiAgICAgIHZhciBicmFuY2gxID0gY2xvbmVBU1RFbGVtZW50KGVsKTtcbiAgICAgIGdldEFuZFJlbW92ZUF0dHIoYnJhbmNoMSwgJ3YtZm9yJywgdHJ1ZSk7XG4gICAgICBhZGRSYXdBdHRyKGJyYW5jaDEsICd0eXBlJywgJ3JhZGlvJyk7XG4gICAgICBwcm9jZXNzRWxlbWVudChicmFuY2gxLCBvcHRpb25zKTtcbiAgICAgIGFkZElmQ29uZGl0aW9uKGJyYW5jaDAsIHtcbiAgICAgICAgZXhwOiBcIihcIiArIHR5cGVCaW5kaW5nICsgXCIpPT09J3JhZGlvJ1wiICsgaWZDb25kaXRpb25FeHRyYSxcbiAgICAgICAgYmxvY2s6IGJyYW5jaDFcbiAgICAgIH0pO1xuICAgICAgLy8gMy4gb3RoZXJcbiAgICAgIHZhciBicmFuY2gyID0gY2xvbmVBU1RFbGVtZW50KGVsKTtcbiAgICAgIGdldEFuZFJlbW92ZUF0dHIoYnJhbmNoMiwgJ3YtZm9yJywgdHJ1ZSk7XG4gICAgICBhZGRSYXdBdHRyKGJyYW5jaDIsICc6dHlwZScsIHR5cGVCaW5kaW5nKTtcbiAgICAgIHByb2Nlc3NFbGVtZW50KGJyYW5jaDIsIG9wdGlvbnMpO1xuICAgICAgYWRkSWZDb25kaXRpb24oYnJhbmNoMCwge1xuICAgICAgICBleHA6IGlmQ29uZGl0aW9uLFxuICAgICAgICBibG9jazogYnJhbmNoMlxuICAgICAgfSk7XG5cbiAgICAgIGlmIChoYXNFbHNlKSB7XG4gICAgICAgIGJyYW5jaDAuZWxzZSA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGVsc2VJZkNvbmRpdGlvbikge1xuICAgICAgICBicmFuY2gwLmVsc2VpZiA9IGVsc2VJZkNvbmRpdGlvbjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGJyYW5jaDBcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2xvbmVBU1RFbGVtZW50IChlbCkge1xuICByZXR1cm4gY3JlYXRlQVNURWxlbWVudChlbC50YWcsIGVsLmF0dHJzTGlzdC5zbGljZSgpLCBlbC5wYXJlbnQpXG59XG5cbnZhciBtb2RlbCQxID0ge1xuICBwcmVUcmFuc2Zvcm1Ob2RlOiBwcmVUcmFuc2Zvcm1Ob2RlXG59O1xuXG52YXIgbW9kdWxlcyQxID0gW1xuICBrbGFzcyQxLFxuICBzdHlsZSQxLFxuICBtb2RlbCQxXG5dO1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gdGV4dCAoZWwsIGRpcikge1xuICBpZiAoZGlyLnZhbHVlKSB7XG4gICAgYWRkUHJvcChlbCwgJ3RleHRDb250ZW50JywgKFwiX3MoXCIgKyAoZGlyLnZhbHVlKSArIFwiKVwiKSwgZGlyKTtcbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaHRtbCAoZWwsIGRpcikge1xuICBpZiAoZGlyLnZhbHVlKSB7XG4gICAgYWRkUHJvcChlbCwgJ2lubmVySFRNTCcsIChcIl9zKFwiICsgKGRpci52YWx1ZSkgKyBcIilcIiksIGRpcik7XG4gIH1cbn1cblxudmFyIGRpcmVjdGl2ZXMkMSA9IHtcbiAgbW9kZWw6IG1vZGVsLFxuICB0ZXh0OiB0ZXh0LFxuICBodG1sOiBodG1sXG59O1xuXG4vKiAgKi9cblxudmFyIGJhc2VPcHRpb25zID0ge1xuICBleHBlY3RIVE1MOiB0cnVlLFxuICBtb2R1bGVzOiBtb2R1bGVzJDEsXG4gIGRpcmVjdGl2ZXM6IGRpcmVjdGl2ZXMkMSxcbiAgaXNQcmVUYWc6IGlzUHJlVGFnLFxuICBpc1VuYXJ5VGFnOiBpc1VuYXJ5VGFnLFxuICBtdXN0VXNlUHJvcDogbXVzdFVzZVByb3AsXG4gIGNhbkJlTGVmdE9wZW5UYWc6IGNhbkJlTGVmdE9wZW5UYWcsXG4gIGlzUmVzZXJ2ZWRUYWc6IGlzUmVzZXJ2ZWRUYWcsXG4gIGdldFRhZ05hbWVzcGFjZTogZ2V0VGFnTmFtZXNwYWNlLFxuICBzdGF0aWNLZXlzOiBnZW5TdGF0aWNLZXlzKG1vZHVsZXMkMSlcbn07XG5cbi8qICAqL1xuXG52YXIgaXNTdGF0aWNLZXk7XG52YXIgaXNQbGF0Zm9ybVJlc2VydmVkVGFnO1xuXG52YXIgZ2VuU3RhdGljS2V5c0NhY2hlZCA9IGNhY2hlZChnZW5TdGF0aWNLZXlzJDEpO1xuXG4vKipcbiAqIEdvYWwgb2YgdGhlIG9wdGltaXplcjogd2FsayB0aGUgZ2VuZXJhdGVkIHRlbXBsYXRlIEFTVCB0cmVlXG4gKiBhbmQgZGV0ZWN0IHN1Yi10cmVlcyB0aGF0IGFyZSBwdXJlbHkgc3RhdGljLCBpLmUuIHBhcnRzIG9mXG4gKiB0aGUgRE9NIHRoYXQgbmV2ZXIgbmVlZHMgdG8gY2hhbmdlLlxuICpcbiAqIE9uY2Ugd2UgZGV0ZWN0IHRoZXNlIHN1Yi10cmVlcywgd2UgY2FuOlxuICpcbiAqIDEuIEhvaXN0IHRoZW0gaW50byBjb25zdGFudHMsIHNvIHRoYXQgd2Ugbm8gbG9uZ2VyIG5lZWQgdG9cbiAqICAgIGNyZWF0ZSBmcmVzaCBub2RlcyBmb3IgdGhlbSBvbiBlYWNoIHJlLXJlbmRlcjtcbiAqIDIuIENvbXBsZXRlbHkgc2tpcCB0aGVtIGluIHRoZSBwYXRjaGluZyBwcm9jZXNzLlxuICovXG5mdW5jdGlvbiBvcHRpbWl6ZSAocm9vdCwgb3B0aW9ucykge1xuICBpZiAoIXJvb3QpIHsgcmV0dXJuIH1cbiAgaXNTdGF0aWNLZXkgPSBnZW5TdGF0aWNLZXlzQ2FjaGVkKG9wdGlvbnMuc3RhdGljS2V5cyB8fCAnJyk7XG4gIGlzUGxhdGZvcm1SZXNlcnZlZFRhZyA9IG9wdGlvbnMuaXNSZXNlcnZlZFRhZyB8fCBubztcbiAgLy8gZmlyc3QgcGFzczogbWFyayBhbGwgbm9uLXN0YXRpYyBub2Rlcy5cbiAgbWFya1N0YXRpYyQxKHJvb3QpO1xuICAvLyBzZWNvbmQgcGFzczogbWFyayBzdGF0aWMgcm9vdHMuXG4gIG1hcmtTdGF0aWNSb290cyhyb290LCBmYWxzZSk7XG59XG5cbmZ1bmN0aW9uIGdlblN0YXRpY0tleXMkMSAoa2V5cykge1xuICByZXR1cm4gbWFrZU1hcChcbiAgICAndHlwZSx0YWcsYXR0cnNMaXN0LGF0dHJzTWFwLHBsYWluLH
118BhcmVudCxjaGlsZHJlbixhdHRycyxzdGFydCxlbmQscmF3QXR0cnNNYXAnICtcbiAgICAoa2V5cyA/ICcsJyArIGtleXMgOiAnJylcbiAgKVxufVxuXG5mdW5jdGlvbiBtYXJrU3RhdGljJDEgKG5vZGUpIHtcbiAgbm9kZS5zdGF0aWMgPSBpc1N0YXRpYyhub2RlKTtcbiAgaWYgKG5vZGUudHlwZSA9PT0gMSkge1xuICAgIC8vIGRvIG5vdCBtYWtlIGNvbXBvbmVudCBzbG90IGNvbnRlbnQgc3RhdGljLiB0aGlzIGF2b2lkc1xuICAgIC8vIDEuIGNvbXBvbmVudHMgbm90IGFibGUgdG8gbXV0YXRlIHNsb3Qgbm9kZXNcbiAgICAvLyAyLiBzdGF0aWMgc2xvdCBjb250ZW50IGZhaWxzIGZvciBob3QtcmVsb2FkaW5nXG4gICAgaWYgKFxuICAgICAgIWlzUGxhdGZvcm1SZXNlcnZlZFRhZyhub2RlLnRhZykgJiZcbiAgICAgIG5vZGUudGFnICE9PSAnc2xvdCcgJiZcbiAgICAgIG5vZGUuYXR0cnNNYXBbJ2lubGluZS10ZW1wbGF0ZSddID09IG51bGxcbiAgICApIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgY2hpbGQgPSBub2RlLmNoaWxkcmVuW2ldO1xuICAgICAgbWFya1N0YXRpYyQxKGNoaWxkKTtcbiAgICAgIGlmICghY2hpbGQuc3RhdGljKSB7XG4gICAgICAgIG5vZGUuc3RhdGljID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChub2RlLmlmQ29uZGl0aW9ucykge1xuICAgICAgZm9yICh2YXIgaSQxID0gMSwgbCQxID0gbm9kZS5pZkNvbmRpdGlvbnMubGVuZ3RoOyBpJDEgPCBsJDE7IGkkMSsrKSB7XG4gICAgICAgIHZhciBibG9jayA9IG5vZGUuaWZDb25kaXRpb25zW2kkMV0uYmxvY2s7XG4gICAgICAgIG1hcmtTdGF0aWMkMShibG9jayk7XG4gICAgICAgIGlmICghYmxvY2suc3RhdGljKSB7XG4gICAgICAgICAgbm9kZS5zdGF0aWMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJrU3RhdGljUm9vdHMgKG5vZGUsIGlzSW5Gb3IpIHtcbiAgaWYgKG5vZGUudHlwZSA9PT0gMSkge1xuICAgIGlmIChub2RlLnN0YXRpYyB8fCBub2RlLm9uY2UpIHtcbiAgICAgIG5vZGUuc3RhdGljSW5Gb3IgPSBpc0luRm9yO1xuICAgIH1cbiAgICAvLyBGb3IgYSBub2RlIHRvIHF1YWxpZnkgYXMgYSBzdGF0aWMgcm9vdCwgaXQgc2hvdWxkIGhhdmUgY2hpbGRyZW4gdGhhdFxuICAgIC8vIGFyZSBub3QganVzdCBzdGF0aWMgdGV4dC4gT3RoZXJ3aXNlIHRoZSBjb3N0IG9mIGhvaXN0aW5nIG91dCB3aWxsXG4gICAgLy8gb3V0d2VpZ2ggdGhlIGJlbmVmaXRzIGFuZCBpdCdzIGJldHRlciBvZmYgdG8ganVzdCBhbHdheXMgcmVuZGVyIGl0IGZyZXNoLlxuICAgIGlmIChub2RlLnN0YXRpYyAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCAmJiAhKFxuICAgICAgbm9kZS5jaGlsZHJlbi5sZW5ndGggPT09IDEgJiZcbiAgICAgIG5vZGUuY2hpbGRyZW5bMF0udHlwZSA9PT0gM1xuICAgICkpIHtcbiAgICAgIG5vZGUuc3RhdGljUm9vdCA9IHRydWU7XG4gICAgICByZXR1cm5cbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZS5zdGF0aWNSb290ID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIG1hcmtTdGF0aWNSb290cyhub2RlLmNoaWxkcmVuW2ldLCBpc0luRm9yIHx8ICEhbm9kZS5mb3IpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobm9kZS5pZkNvbmRpdGlvbnMpIHtcbiAgICAgIGZvciAodmFyIGkkMSA9IDEsIGwkMSA9IG5vZGUuaWZDb25kaXRpb25zLmxlbmd0aDsgaSQxIDwgbCQxOyBpJDErKykge1xuICAgICAgICBtYXJrU3RhdGljUm9vdHMobm9kZS5pZkNvbmRpdGlvbnNbaSQxXS5ibG9jaywgaXNJbkZvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzU3RhdGljIChub2RlKSB7XG4gIGlmIChub2RlLnR5cGUgPT09IDIpIHsgLy8gZXhwcmVzc2lvblxuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGlmIChub2RlLnR5cGUgPT09IDMpIHsgLy8gdGV4dFxuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgcmV0dXJuICEhKG5vZGUucHJlIHx8IChcbiAgICAhbm9kZS5oYXNCaW5kaW5ncyAmJiAvLyBubyBkeW5hbWljIGJpbmRpbmdzXG4gICAgIW5vZGUuaWYgJiYgIW5vZGUuZm9yICYmIC8vIG5vdCB2LWlmIG9yIHYtZm9yIG9yIHYtZWxzZVxuICAgICFpc0J1aWx0SW5UYWcobm9kZS50YWcpICYmIC8vIG5vdCBhIGJ1aWx0LWluXG4gICAgaXNQbGF0Zm9ybVJlc2VydmVkVGFnKG5vZGUudGFnKSAmJiAvLyBub3QgYSBjb21wb25lbnRcbiAgICAhaXNEaXJlY3RDaGlsZE9mVGVtcGxhdGVGb3Iobm9kZSkgJiZcbiAgICBPYmplY3Qua2V5cyhub2RlKS5ldmVyeShpc1N0YXRpY0tleSlcbiAgKSlcbn1cblxuZnVuY3Rpb24gaXNEaXJlY3RDaGlsZE9mVGVtcGxhdGVGb3IgKG5vZGUpIHtcbiAgd2hpbGUgKG5vZGUucGFyZW50KSB7XG4gICAgbm9kZSA9IG5vZGUucGFyZW50O1xuICAgIGlmIChub2RlLnRhZyAhPT0gJ3RlbXBsYXRlJykge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIGlmIChub2RlLmZvcikge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qICAqL1xuXG52YXIgZm5FeHBSRSA9IC9eKFtcXHckX10rfFxcKFteKV0qP1xcKSlcXHMqPT58XmZ1bmN0aW9uKD86XFxzK1tcXHckXSspP1xccypcXCgvO1xudmFyIGZuSW52b2tlUkUgPSAvXFwoW14pXSo/XFwpOyokLztcbnZhciBzaW1wbGVQYXRoUkUgPSAvXltBLVphLXpfJF1bXFx3JF0qKD86XFwuW0EtWmEtel8kXVtcXHckXSp8XFxbJ1teJ10qPyddfFxcW1wiW15cIl0qP1wiXXxcXFtcXGQrXXxcXFtbQS1aYS16XyRdW1xcdyRdKl0pKiQvO1xuXG4vLyBLZXlib2FyZEV2ZW50LmtleUNvZGUgYWxpYXNlc1xudmFyIGtleUNvZGVzID0ge1xuICBlc2M6IDI3LFxuICB0YWI6IDksXG4gIGVudGVyOiAxMyxcbiAgc3BhY2U6IDMyLFxuICB1cDogMzgsXG4gIGxlZnQ6IDM3LFxuICByaWdodDogMzksXG4gIGRvd246IDQwLFxuICAnZGVsZXRlJzogWzgsIDQ2XVxufTtcblxuLy8gS2V5Ym9hcmRFdmVudC5rZXkgYWxpYXNlc1xudmFyIGtleU5hbWVzID0ge1xuICAvLyAjNzg4MDogSUUxMSBhbmQgRWRnZSB1c2UgYEVzY2AgZm9yIEVzY2FwZSBrZXkgbmFtZS5cbiAgZXNjOiBbJ0VzYycsICdFc2NhcGUnXSxcbiAgdGFiOiAnVGFiJyxcbiAgZW50ZXI6ICdFbnRlcicsXG4gIC8vICM5MTEyOiBJRTExIHVzZXMgYFNwYWNlYmFyYCBmb3IgU3BhY2Uga2V5IG5hbWUuXG4gIHNwYWNlOiBbJyAnLCAnU3BhY2ViYXInXSxcbiAgLy8gIzc4MDY6IElFMTEgdXNlcyBrZXkgbmFtZXMgd2l0aG91dCBgQXJyb3dgIHByZWZpeCBmb3IgYXJ
118yb3cga2V5cy5cbiAgdXA6IFsnVXAnLCAnQXJyb3dVcCddLFxuICBsZWZ0OiBbJ0xlZnQnLCAnQXJyb3dMZWZ0J10sXG4gIHJpZ2h0OiBbJ1JpZ2h0JywgJ0Fycm93UmlnaHQnXSxcbiAgZG93bjogWydEb3duJywgJ0Fycm93RG93biddLFxuICAvLyAjOTExMjogSUUxMSB1c2VzIGBEZWxgIGZvciBEZWxldGUga2V5IG5hbWUuXG4gICdkZWxldGUnOiBbJ0JhY2tzcGFjZScsICdEZWxldGUnLCAnRGVsJ11cbn07XG5cbi8vICM0ODY4OiBtb2RpZmllcnMgdGhhdCBwcmV2ZW50IHRoZSBleGVjdXRpb24gb2YgdGhlIGxpc3RlbmVyXG4vLyBuZWVkIHRvIGV4cGxpY2l0bHkgcmV0dXJuIG51bGwgc28gdGhhdCB3ZSBjYW4gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gcmVtb3ZlXG4vLyB0aGUgbGlzdGVuZXIgZm9yIC5vbmNlXG52YXIgZ2VuR3VhcmQgPSBmdW5jdGlvbiAoY29uZGl0aW9uKSB7IHJldHVybiAoXCJpZihcIiArIGNvbmRpdGlvbiArIFwiKXJldHVybiBudWxsO1wiKTsgfTtcblxudmFyIG1vZGlmaWVyQ29kZSA9IHtcbiAgc3RvcDogJyRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsnLFxuICBwcmV2ZW50OiAnJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7JyxcbiAgc2VsZjogZ2VuR3VhcmQoXCIkZXZlbnQudGFyZ2V0ICE9PSAkZXZlbnQuY3VycmVudFRhcmdldFwiKSxcbiAgY3RybDogZ2VuR3VhcmQoXCIhJGV2ZW50LmN0cmxLZXlcIiksXG4gIHNoaWZ0OiBnZW5HdWFyZChcIiEkZXZlbnQuc2hpZnRLZXlcIiksXG4gIGFsdDogZ2VuR3VhcmQoXCIhJGV2ZW50LmFsdEtleVwiKSxcbiAgbWV0YTogZ2VuR3VhcmQoXCIhJGV2ZW50Lm1ldGFLZXlcIiksXG4gIGxlZnQ6IGdlbkd1YXJkKFwiJ2J1dHRvbicgaW4gJGV2ZW50ICYmICRldmVudC5idXR0b24gIT09IDBcIiksXG4gIG1pZGRsZTogZ2VuR3VhcmQoXCInYnV0dG9uJyBpbiAkZXZlbnQgJiYgJGV2ZW50LmJ1dHRvbiAhPT0gMVwiKSxcbiAgcmlnaHQ6IGdlbkd1YXJkKFwiJ2J1dHRvbicgaW4gJGV2ZW50ICYmICRldmVudC5idXR0b24gIT09IDJcIilcbn07XG5cbmZ1bmN0aW9uIGdlbkhhbmRsZXJzIChcbiAgZXZlbnRzLFxuICBpc05hdGl2ZVxuKSB7XG4gIHZhciBwcmVmaXggPSBpc05hdGl2ZSA/ICduYXRpdmVPbjonIDogJ29uOic7XG4gIHZhciBzdGF0aWNIYW5kbGVycyA9IFwiXCI7XG4gIHZhciBkeW5hbWljSGFuZGxlcnMgPSBcIlwiO1xuICBmb3IgKHZhciBuYW1lIGluIGV2ZW50cykge1xuICAgIHZhciBoYW5kbGVyQ29kZSA9IGdlbkhhbmRsZXIoZXZlbnRzW25hbWVdKTtcbiAgICBpZiAoZXZlbnRzW25hbWVdICYmIGV2ZW50c1tuYW1lXS5keW5hbWljKSB7XG4gICAgICBkeW5hbWljSGFuZGxlcnMgKz0gbmFtZSArIFwiLFwiICsgaGFuZGxlckNvZGUgKyBcIixcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGljSGFuZGxlcnMgKz0gXCJcXFwiXCIgKyBuYW1lICsgXCJcXFwiOlwiICsgaGFuZGxlckNvZGUgKyBcIixcIjtcbiAgICB9XG4gIH1cbiAgc3RhdGljSGFuZGxlcnMgPSBcIntcIiArIChzdGF0aWNIYW5kbGVycy5zbGljZSgwLCAtMSkpICsgXCJ9XCI7XG4gIGlmIChkeW5hbWljSGFuZGxlcnMpIHtcbiAgICByZXR1cm4gcHJlZml4ICsgXCJfZChcIiArIHN0YXRpY0hhbmRsZXJzICsgXCIsW1wiICsgKGR5bmFtaWNIYW5kbGVycy5zbGljZSgwLCAtMSkpICsgXCJdKVwiXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHByZWZpeCArIHN0YXRpY0hhbmRsZXJzXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2VuSGFuZGxlciAoaGFuZGxlcikge1xuICBpZiAoIWhhbmRsZXIpIHtcbiAgICByZXR1cm4gJ2Z1bmN0aW9uKCl7fSdcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KGhhbmRsZXIpKSB7XG4gICAgcmV0dXJuIChcIltcIiArIChoYW5kbGVyLm1hcChmdW5jdGlvbiAoaGFuZGxlcikgeyByZXR1cm4gZ2VuSGFuZGxlcihoYW5kbGVyKTsgfSkuam9pbignLCcpKSArIFwiXVwiKVxuICB9XG5cbiAgdmFyIGlzTWV0aG9kUGF0aCA9IHNpbXBsZVBhdGhSRS50ZXN0KGhhbmRsZXIudmFsdWUpO1xuICB2YXIgaXNGdW5jdGlvbkV4cHJlc3Npb24gPSBmbkV4cFJFLnRlc3QoaGFuZGxlci52YWx1ZSk7XG4gIHZhciBpc0Z1bmN0aW9uSW52b2NhdGlvbiA9IHNpbXBsZVBhdGhSRS50ZXN0KGhhbmRsZXIudmFsdWUucmVwbGFjZShmbkludm9rZVJFLCAnJykpO1xuXG4gIGlmICghaGFuZGxlci5tb2RpZmllcnMpIHtcbiAgICBpZiAoaXNNZXRob2RQYXRoIHx8IGlzRnVuY3Rpb25FeHByZXNzaW9uKSB7XG4gICAgICByZXR1cm4gaGFuZGxlci52YWx1ZVxuICAgIH1cbiAgICByZXR1cm4gKFwiZnVuY3Rpb24oJGV2ZW50KXtcIiArIChpc0Z1bmN0aW9uSW52b2NhdGlvbiA/IChcInJldHVybiBcIiArIChoYW5kbGVyLnZhbHVlKSkgOiBoYW5kbGVyLnZhbHVlKSArIFwifVwiKSAvLyBpbmxpbmUgc3RhdGVtZW50XG4gIH0gZWxzZSB7XG4gICAgdmFyIGNvZGUgPSAnJztcbiAgICB2YXIgZ2VuTW9kaWZpZXJDb2RlID0gJyc7XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gaGFuZGxlci5tb2RpZmllcnMpIHtcbiAgICAgIGlmIChtb2RpZmllckNvZGVba2V5XSkge1xuICAgICAgICBnZW5Nb2RpZmllckNvZGUgKz0gbW9kaWZpZXJDb2RlW2tleV07XG4gICAgICAgIC8vIGxlZnQvcmlnaHRcbiAgICAgICAgaWYgKGtleUNvZGVzW2tleV0pIHtcbiAgICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdleGFjdCcpIHtcbiAgICAgICAgdmFyIG1vZGlmaWVycyA9IChoYW5kbGVyLm1vZGlmaWVycyk7XG4gICAgICAgIGdlbk1vZGlmaWVyQ29kZSArPSBnZW5HdWFyZChcbiAgICAgICAgICBbJ2N0cmwnLCAnc2hpZnQnLCAnYWx0JywgJ21ldGEnXVxuICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoa2V5TW9kaWZpZXIpIHsgcmV0dXJuICFtb2RpZmllcnNba2V5TW9kaWZpZXJdOyB9KVxuICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoa2V5TW9kaWZpZXIpIHsgcmV0dXJuIChcIiRldmVudC5cIiArIGtleU1vZGlmaWVyICsgXCJLZXlcIik7IH0pXG4gICAgICAgICAgICAuam9pbignfHwnKVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChrZXlzLmxlbmd0aCkge1xuICAgICAgY29
118kZSArPSBnZW5LZXlGaWx0ZXIoa2V5cyk7XG4gICAgfVxuICAgIC8vIE1ha2Ugc3VyZSBtb2RpZmllcnMgbGlrZSBwcmV2ZW50IGFuZCBzdG9wIGdldCBleGVjdXRlZCBhZnRlciBrZXkgZmlsdGVyaW5nXG4gICAgaWYgKGdlbk1vZGlmaWVyQ29kZSkge1xuICAgICAgY29kZSArPSBnZW5Nb2RpZmllckNvZGU7XG4gICAgfVxuICAgIHZhciBoYW5kbGVyQ29kZSA9IGlzTWV0aG9kUGF0aFxuICAgICAgPyAoXCJyZXR1cm4gXCIgKyAoaGFuZGxlci52YWx1ZSkgKyBcIi5hcHBseShudWxsLCBhcmd1bWVudHMpXCIpXG4gICAgICA6IGlzRnVuY3Rpb25FeHByZXNzaW9uXG4gICAgICAgID8gKFwicmV0dXJuIChcIiArIChoYW5kbGVyLnZhbHVlKSArIFwiKS5hcHBseShudWxsLCBhcmd1bWVudHMpXCIpXG4gICAgICAgIDogaXNGdW5jdGlvbkludm9jYXRpb25cbiAgICAgICAgICA/IChcInJldHVybiBcIiArIChoYW5kbGVyLnZhbHVlKSlcbiAgICAgICAgICA6IGhhbmRsZXIudmFsdWU7XG4gICAgcmV0dXJuIChcImZ1bmN0aW9uKCRldmVudCl7XCIgKyBjb2RlICsgaGFuZGxlckNvZGUgKyBcIn1cIilcbiAgfVxufVxuXG5mdW5jdGlvbiBnZW5LZXlGaWx0ZXIgKGtleXMpIHtcbiAgcmV0dXJuIChcbiAgICAvLyBtYWtlIHN1cmUgdGhlIGtleSBmaWx0ZXJzIG9ubHkgYXBwbHkgdG8gS2V5Ym9hcmRFdmVudHNcbiAgICAvLyAjOTQ0MTogY2FuJ3QgdXNlICdrZXlDb2RlJyBpbiAkZXZlbnQgYmVjYXVzZSBDaHJvbWUgYXV0b2ZpbGwgZmlyZXMgZmFrZVxuICAgIC8vIGtleSBldmVudHMgdGhhdCBkbyBub3QgaGF2ZSBrZXlDb2RlIHByb3BlcnR5Li4uXG4gICAgXCJpZighJGV2ZW50LnR5cGUuaW5kZXhPZigna2V5JykmJlwiICtcbiAgICAoa2V5cy5tYXAoZ2VuRmlsdGVyQ29kZSkuam9pbignJiYnKSkgKyBcIilyZXR1cm4gbnVsbDtcIlxuICApXG59XG5cbmZ1bmN0aW9uIGdlbkZpbHRlckNvZGUgKGtleSkge1xuICB2YXIga2V5VmFsID0gcGFyc2VJbnQoa2V5LCAxMCk7XG4gIGlmIChrZXlWYWwpIHtcbiAgICByZXR1cm4gKFwiJGV2ZW50LmtleUNvZGUhPT1cIiArIGtleVZhbClcbiAgfVxuICB2YXIga2V5Q29kZSA9IGtleUNvZGVzW2tleV07XG4gIHZhciBrZXlOYW1lID0ga2V5TmFtZXNba2V5XTtcbiAgcmV0dXJuIChcbiAgICBcIl9rKCRldmVudC5rZXlDb2RlLFwiICtcbiAgICAoSlNPTi5zdHJpbmdpZnkoa2V5KSkgKyBcIixcIiArXG4gICAgKEpTT04uc3RyaW5naWZ5KGtleUNvZGUpKSArIFwiLFwiICtcbiAgICBcIiRldmVudC5rZXksXCIgK1xuICAgIFwiXCIgKyAoSlNPTi5zdHJpbmdpZnkoa2V5TmFtZSkpICtcbiAgICBcIilcIlxuICApXG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBvbiAoZWwsIGRpcikge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBkaXIubW9kaWZpZXJzKSB7XG4gICAgd2FybihcInYtb24gd2l0aG91dCBhcmd1bWVudCBkb2VzIG5vdCBzdXBwb3J0IG1vZGlmaWVycy5cIik7XG4gIH1cbiAgZWwud3JhcExpc3RlbmVycyA9IGZ1bmN0aW9uIChjb2RlKSB7IHJldHVybiAoXCJfZyhcIiArIGNvZGUgKyBcIixcIiArIChkaXIudmFsdWUpICsgXCIpXCIpOyB9O1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gYmluZCQxIChlbCwgZGlyKSB7XG4gIGVsLndyYXBEYXRhID0gZnVuY3Rpb24gKGNvZGUpIHtcbiAgICByZXR1cm4gKFwiX2IoXCIgKyBjb2RlICsgXCIsJ1wiICsgKGVsLnRhZykgKyBcIicsXCIgKyAoZGlyLnZhbHVlKSArIFwiLFwiICsgKGRpci5tb2RpZmllcnMgJiYgZGlyLm1vZGlmaWVycy5wcm9wID8gJ3RydWUnIDogJ2ZhbHNlJykgKyAoZGlyLm1vZGlmaWVycyAmJiBkaXIubW9kaWZpZXJzLnN5bmMgPyAnLHRydWUnIDogJycpICsgXCIpXCIpXG4gIH07XG59XG5cbi8qICAqL1xuXG52YXIgYmFzZURpcmVjdGl2ZXMgPSB7XG4gIG9uOiBvbixcbiAgYmluZDogYmluZCQxLFxuICBjbG9hazogbm9vcFxufTtcblxuLyogICovXG5cblxuXG5cblxudmFyIENvZGVnZW5TdGF0ZSA9IGZ1bmN0aW9uIENvZGVnZW5TdGF0ZSAob3B0aW9ucykge1xuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB0aGlzLndhcm4gPSBvcHRpb25zLndhcm4gfHwgYmFzZVdhcm47XG4gIHRoaXMudHJhbnNmb3JtcyA9IHBsdWNrTW9kdWxlRnVuY3Rpb24ob3B0aW9ucy5tb2R1bGVzLCAndHJhbnNmb3JtQ29kZScpO1xuICB0aGlzLmRhdGFHZW5GbnMgPSBwbHVja01vZHVsZUZ1bmN0aW9uKG9wdGlvbnMubW9kdWxlcywgJ2dlbkRhdGEnKTtcbiAgdGhpcy5kaXJlY3RpdmVzID0gZXh0ZW5kKGV4dGVuZCh7fSwgYmFzZURpcmVjdGl2ZXMpLCBvcHRpb25zLmRpcmVjdGl2ZXMpO1xuICB2YXIgaXNSZXNlcnZlZFRhZyA9IG9wdGlvbnMuaXNSZXNlcnZlZFRhZyB8fCBubztcbiAgdGhpcy5tYXliZUNvbXBvbmVudCA9IGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gISFlbC5jb21wb25lbnQgfHwgIWlzUmVzZXJ2ZWRUYWcoZWwudGFnKTsgfTtcbiAgdGhpcy5vbmNlSWQgPSAwO1xuICB0aGlzLnN0YXRpY1JlbmRlckZucyA9IFtdO1xuICB0aGlzLnByZSA9IGZhbHNlO1xufTtcblxuXG5cbmZ1bmN0aW9uIGdlbmVyYXRlIChcbiAgYXN0LFxuICBvcHRpb25zXG4pIHtcbiAgdmFyIHN0YXRlID0gbmV3IENvZGVnZW5TdGF0ZShvcHRpb25zKTtcbiAgLy8gZml4ICMxMTQ4MywgUm9vdCBsZXZlbCA8c2NyaXB0PiB0YWdzIHNob3VsZCBub3QgYmUgcmVuZGVyZWQuXG4gIHZhciBjb2RlID0gYXN0ID8gKGFzdC50YWcgPT09ICdzY3JpcHQnID8gJ251bGwnIDogZ2VuRWxlbWVudChhc3QsIHN0YXRlKSkgOiAnX2MoXCJkaXZcIiknO1xuICByZXR1cm4ge1xuICAgIHJlbmRlcjogKFwid2l0aCh0aGlzKXtyZXR1cm4gXCIgKyBjb2RlICsgXCJ9XCIpLFxuICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGUuc3RhdGljUmVuZGVyRm5zXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2VuRWxlbWVudCAoZWwsIHN0YXRlKSB7XG4gIGlmIChlbC5wYXJlbnQpIHtcbiAgICBlbC5wcmUgPSBlbC5wcmUgfHwgZWwucGFyZW50LnByZTtcbiAgfVxuXG4gIGlmIChlbC5zdGF0aWNSb290ICYmICFlbC5zdGF0aWNQcm9jZXNzZWQpIHtcbiAgICByZXR1cm4gZ2VuU3RhdGljKGVsLCBzdGF0ZSlcbiAgfSBlbHNlIGlmIChlbC5vbmNlICYmICFlbC5vbmNlUHJvY2Vzc2VkKSB7XG4gICAgcmV0dXJuIGdlbk9uY2UoZWwsIHN0YXRl
118KVxuICB9IGVsc2UgaWYgKGVsLmZvciAmJiAhZWwuZm9yUHJvY2Vzc2VkKSB7XG4gICAgcmV0dXJuIGdlbkZvcihlbCwgc3RhdGUpXG4gIH0gZWxzZSBpZiAoZWwuaWYgJiYgIWVsLmlmUHJvY2Vzc2VkKSB7XG4gICAgcmV0dXJuIGdlbklmKGVsLCBzdGF0ZSlcbiAgfSBlbHNlIGlmIChlbC50YWcgPT09ICd0ZW1wbGF0ZScgJiYgIWVsLnNsb3RUYXJnZXQgJiYgIXN0YXRlLnByZSkge1xuICAgIHJldHVybiBnZW5DaGlsZHJlbihlbCwgc3RhdGUpIHx8ICd2b2lkIDAnXG4gIH0gZWxzZSBpZiAoZWwudGFnID09PSAnc2xvdCcpIHtcbiAgICByZXR1cm4gZ2VuU2xvdChlbCwgc3RhdGUpXG4gIH0gZWxzZSB7XG4gICAgLy8gY29tcG9uZW50IG9yIGVsZW1lbnRcbiAgICB2YXIgY29kZTtcbiAgICBpZiAoZWwuY29tcG9uZW50KSB7XG4gICAgICBjb2RlID0gZ2VuQ29tcG9uZW50KGVsLmNvbXBvbmVudCwgZWwsIHN0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGRhdGE7XG4gICAgICBpZiAoIWVsLnBsYWluIHx8IChlbC5wcmUgJiYgc3RhdGUubWF5YmVDb21wb25lbnQoZWwpKSkge1xuICAgICAgICBkYXRhID0gZ2VuRGF0YSQyKGVsLCBzdGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBjaGlsZHJlbiA9IGVsLmlubGluZVRlbXBsYXRlID8gbnVsbCA6IGdlbkNoaWxkcmVuKGVsLCBzdGF0ZSwgdHJ1ZSk7XG4gICAgICBjb2RlID0gXCJfYygnXCIgKyAoZWwudGFnKSArIFwiJ1wiICsgKGRhdGEgPyAoXCIsXCIgKyBkYXRhKSA6ICcnKSArIChjaGlsZHJlbiA/IChcIixcIiArIGNoaWxkcmVuKSA6ICcnKSArIFwiKVwiO1xuICAgIH1cbiAgICAvLyBtb2R1bGUgdHJhbnNmb3Jtc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdGUudHJhbnNmb3Jtcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29kZSA9IHN0YXRlLnRyYW5zZm9ybXNbaV0oZWwsIGNvZGUpO1xuICAgIH1cbiAgICByZXR1cm4gY29kZVxuICB9XG59XG5cbi8vIGhvaXN0IHN0YXRpYyBzdWItdHJlZXMgb3V0XG5mdW5jdGlvbiBnZW5TdGF0aWMgKGVsLCBzdGF0ZSkge1xuICBlbC5zdGF0aWNQcm9jZXNzZWQgPSB0cnVlO1xuICAvLyBTb21lIGVsZW1lbnRzICh0ZW1wbGF0ZXMpIG5lZWQgdG8gYmVoYXZlIGRpZmZlcmVudGx5IGluc2lkZSBvZiBhIHYtcHJlXG4gIC8vIG5vZGUuICBBbGwgcHJlIG5vZGVzIGFyZSBzdGF0aWMgcm9vdHMsIHNvIHdlIGNhbiB1c2UgdGhpcyBhcyBhIGxvY2F0aW9uIHRvXG4gIC8vIHdyYXAgYSBzdGF0ZSBjaGFuZ2UgYW5kIHJlc2V0IGl0IHVwb24gZXhpdGluZyB0aGUgcHJlIG5vZGUuXG4gIHZhciBvcmlnaW5hbFByZVN0YXRlID0gc3RhdGUucHJlO1xuICBpZiAoZWwucHJlKSB7XG4gICAgc3RhdGUucHJlID0gZWwucHJlO1xuICB9XG4gIHN0YXRlLnN0YXRpY1JlbmRlckZucy5wdXNoKChcIndpdGgodGhpcyl7cmV0dXJuIFwiICsgKGdlbkVsZW1lbnQoZWwsIHN0YXRlKSkgKyBcIn1cIikpO1xuICBzdGF0ZS5wcmUgPSBvcmlnaW5hbFByZVN0YXRlO1xuICByZXR1cm4gKFwiX20oXCIgKyAoc3RhdGUuc3RhdGljUmVuZGVyRm5zLmxlbmd0aCAtIDEpICsgKGVsLnN0YXRpY0luRm9yID8gJyx0cnVlJyA6ICcnKSArIFwiKVwiKVxufVxuXG4vLyB2LW9uY2VcbmZ1bmN0aW9uIGdlbk9uY2UgKGVsLCBzdGF0ZSkge1xuICBlbC5vbmNlUHJvY2Vzc2VkID0gdHJ1ZTtcbiAgaWYgKGVsLmlmICYmICFlbC5pZlByb2Nlc3NlZCkge1xuICAgIHJldHVybiBnZW5JZihlbCwgc3RhdGUpXG4gIH0gZWxzZSBpZiAoZWwuc3RhdGljSW5Gb3IpIHtcbiAgICB2YXIga2V5ID0gJyc7XG4gICAgdmFyIHBhcmVudCA9IGVsLnBhcmVudDtcbiAgICB3aGlsZSAocGFyZW50KSB7XG4gICAgICBpZiAocGFyZW50LmZvcikge1xuICAgICAgICBrZXkgPSBwYXJlbnQua2V5O1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgICB9XG4gICAgaWYgKCFrZXkpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgc3RhdGUud2FybihcbiAgICAgICAgXCJ2LW9uY2UgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgdi1mb3IgdGhhdCBpcyBrZXllZC4gXCIsXG4gICAgICAgIGVsLnJhd0F0dHJzTWFwWyd2LW9uY2UnXVxuICAgICAgKTtcbiAgICAgIHJldHVybiBnZW5FbGVtZW50KGVsLCBzdGF0ZSlcbiAgICB9XG4gICAgcmV0dXJuIChcIl9vKFwiICsgKGdlbkVsZW1lbnQoZWwsIHN0YXRlKSkgKyBcIixcIiArIChzdGF0ZS5vbmNlSWQrKykgKyBcIixcIiArIGtleSArIFwiKVwiKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBnZW5TdGF0aWMoZWwsIHN0YXRlKVxuICB9XG59XG5cbmZ1bmN0aW9uIGdlbklmIChcbiAgZWwsXG4gIHN0YXRlLFxuICBhbHRHZW4sXG4gIGFsdEVtcHR5XG4pIHtcbiAgZWwuaWZQcm9jZXNzZWQgPSB0cnVlOyAvLyBhdm9pZCByZWN1cnNpb25cbiAgcmV0dXJuIGdlbklmQ29uZGl0aW9ucyhlbC5pZkNvbmRpdGlvbnMuc2xpY2UoKSwgc3RhdGUsIGFsdEdlbiwgYWx0RW1wdHkpXG59XG5cbmZ1bmN0aW9uIGdlbklmQ29uZGl0aW9ucyAoXG4gIGNvbmRpdGlvbnMsXG4gIHN0YXRlLFxuICBhbHRHZW4sXG4gIGFsdEVtcHR5XG4pIHtcbiAgaWYgKCFjb25kaXRpb25zLmxlbmd0aCkge1xuICAgIHJldHVybiBhbHRFbXB0eSB8fCAnX2UoKSdcbiAgfVxuXG4gIHZhciBjb25kaXRpb24gPSBjb25kaXRpb25zLnNoaWZ0KCk7XG4gIGlmIChjb25kaXRpb24uZXhwKSB7XG4gICAgcmV0dXJuIChcIihcIiArIChjb25kaXRpb24uZXhwKSArIFwiKT9cIiArIChnZW5UZXJuYXJ5RXhwKGNvbmRpdGlvbi5ibG9jaykpICsgXCI6XCIgKyAoZ2VuSWZDb25kaXRpb25zKGNvbmRpdGlvbnMsIHN0YXRlLCBhbHRHZW4sIGFsdEVtcHR5KSkpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIChcIlwiICsgKGdlblRlcm5hcnlFeHAoY29uZGl0aW9uLmJsb2NrKSkpXG4gIH1cblxuICAvLyB2LWlmIHdpdGggdi1vbmNlIHNob3VsZCBnZW5lcmF0ZSBjb2RlIGxpa2UgKGEpP19tKDApOl9tKDEpXG4gIGZ1bmN0aW9uIGdlblRlcm5hcnlFeHAgKGVsKSB7XG4gICAgcmV0dXJuIGFsdEdlblxuICAgICAgPyBhbHRHZW4oZWwsIHN0YXRl
118KVxuICAgICAgOiBlbC5vbmNlXG4gICAgICAgID8gZ2VuT25jZShlbCwgc3RhdGUpXG4gICAgICAgIDogZ2VuRWxlbWVudChlbCwgc3RhdGUpXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2VuRm9yIChcbiAgZWwsXG4gIHN0YXRlLFxuICBhbHRHZW4sXG4gIGFsdEhlbHBlclxuKSB7XG4gIHZhciBleHAgPSBlbC5mb3I7XG4gIHZhciBhbGlhcyA9IGVsLmFsaWFzO1xuICB2YXIgaXRlcmF0b3IxID0gZWwuaXRlcmF0b3IxID8gKFwiLFwiICsgKGVsLml0ZXJhdG9yMSkpIDogJyc7XG4gIHZhciBpdGVyYXRvcjIgPSBlbC5pdGVyYXRvcjIgPyAoXCIsXCIgKyAoZWwuaXRlcmF0b3IyKSkgOiAnJztcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgIHN0YXRlLm1heWJlQ29tcG9uZW50KGVsKSAmJlxuICAgIGVsLnRhZyAhPT0gJ3Nsb3QnICYmXG4gICAgZWwudGFnICE9PSAndGVtcGxhdGUnICYmXG4gICAgIWVsLmtleVxuICApIHtcbiAgICBzdGF0ZS53YXJuKFxuICAgICAgXCI8XCIgKyAoZWwudGFnKSArIFwiIHYtZm9yPVxcXCJcIiArIGFsaWFzICsgXCIgaW4gXCIgKyBleHAgKyBcIlxcXCI+OiBjb21wb25lbnQgbGlzdHMgcmVuZGVyZWQgd2l0aCBcIiArXG4gICAgICBcInYtZm9yIHNob3VsZCBoYXZlIGV4cGxpY2l0IGtleXMuIFwiICtcbiAgICAgIFwiU2VlIGh0dHBzOi8vdnVlanMub3JnL2d1aWRlL2xpc3QuaHRtbCNrZXkgZm9yIG1vcmUgaW5mby5cIixcbiAgICAgIGVsLnJhd0F0dHJzTWFwWyd2LWZvciddLFxuICAgICAgdHJ1ZSAvKiB0aXAgKi9cbiAgICApO1xuICB9XG5cbiAgZWwuZm9yUHJvY2Vzc2VkID0gdHJ1ZTsgLy8gYXZvaWQgcmVjdXJzaW9uXG4gIHJldHVybiAoYWx0SGVscGVyIHx8ICdfbCcpICsgXCIoKFwiICsgZXhwICsgXCIpLFwiICtcbiAgICBcImZ1bmN0aW9uKFwiICsgYWxpYXMgKyBpdGVyYXRvcjEgKyBpdGVyYXRvcjIgKyBcIil7XCIgK1xuICAgICAgXCJyZXR1cm4gXCIgKyAoKGFsdEdlbiB8fCBnZW5FbGVtZW50KShlbCwgc3RhdGUpKSArXG4gICAgJ30pJ1xufVxuXG5mdW5jdGlvbiBnZW5EYXRhJDIgKGVsLCBzdGF0ZSkge1xuICB2YXIgZGF0YSA9ICd7JztcblxuICAvLyBkaXJlY3RpdmVzIGZpcnN0LlxuICAvLyBkaXJlY3RpdmVzIG1heSBtdXRhdGUgdGhlIGVsJ3Mgb3RoZXIgcHJvcGVydGllcyBiZWZvcmUgdGhleSBhcmUgZ2VuZXJhdGVkLlxuICB2YXIgZGlycyA9IGdlbkRpcmVjdGl2ZXMoZWwsIHN0YXRlKTtcbiAgaWYgKGRpcnMpIHsgZGF0YSArPSBkaXJzICsgJywnOyB9XG5cbiAgLy8ga2V5XG4gIGlmIChlbC5rZXkpIHtcbiAgICBkYXRhICs9IFwia2V5OlwiICsgKGVsLmtleSkgKyBcIixcIjtcbiAgfVxuICAvLyByZWZcbiAgaWYgKGVsLnJlZikge1xuICAgIGRhdGEgKz0gXCJyZWY6XCIgKyAoZWwucmVmKSArIFwiLFwiO1xuICB9XG4gIGlmIChlbC5yZWZJbkZvcikge1xuICAgIGRhdGEgKz0gXCJyZWZJbkZvcjp0cnVlLFwiO1xuICB9XG4gIC8vIHByZVxuICBpZiAoZWwucHJlKSB7XG4gICAgZGF0YSArPSBcInByZTp0cnVlLFwiO1xuICB9XG4gIC8vIHJlY29yZCBvcmlnaW5hbCB0YWcgbmFtZSBmb3IgY29tcG9uZW50cyB1c2luZyBcImlzXCIgYXR0cmlidXRlXG4gIGlmIChlbC5jb21wb25lbnQpIHtcbiAgICBkYXRhICs9IFwidGFnOlxcXCJcIiArIChlbC50YWcpICsgXCJcXFwiLFwiO1xuICB9XG4gIC8vIG1vZHVsZSBkYXRhIGdlbmVyYXRpb24gZnVuY3Rpb25zXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdGUuZGF0YUdlbkZucy5sZW5ndGg7IGkrKykge1xuICAgIGRhdGEgKz0gc3RhdGUuZGF0YUdlbkZuc1tpXShlbCk7XG4gIH1cbiAgLy8gYXR0cmlidXRlc1xuICBpZiAoZWwuYXR0cnMpIHtcbiAgICBkYXRhICs9IFwiYXR0cnM6XCIgKyAoZ2VuUHJvcHMoZWwuYXR0cnMpKSArIFwiLFwiO1xuICB9XG4gIC8vIERPTSBwcm9wc1xuICBpZiAoZWwucHJvcHMpIHtcbiAgICBkYXRhICs9IFwiZG9tUHJvcHM6XCIgKyAoZ2VuUHJvcHMoZWwucHJvcHMpKSArIFwiLFwiO1xuICB9XG4gIC8vIGV2ZW50IGhhbmRsZXJzXG4gIGlmIChlbC5ldmVudHMpIHtcbiAgICBkYXRhICs9IChnZW5IYW5kbGVycyhlbC5ldmVudHMsIGZhbHNlKSkgKyBcIixcIjtcbiAgfVxuICBpZiAoZWwubmF0aXZlRXZlbnRzKSB7XG4gICAgZGF0YSArPSAoZ2VuSGFuZGxlcnMoZWwubmF0aXZlRXZlbnRzLCB0cnVlKSkgKyBcIixcIjtcbiAgfVxuICAvLyBzbG90IHRhcmdldFxuICAvLyBvbmx5IGZvciBub24tc2NvcGVkIHNsb3RzXG4gIGlmIChlbC5zbG90VGFyZ2V0ICYmICFlbC5zbG90U2NvcGUpIHtcbiAgICBkYXRhICs9IFwic2xvdDpcIiArIChlbC5zbG90VGFyZ2V0KSArIFwiLFwiO1xuICB9XG4gIC8vIHNjb3BlZCBzbG90c1xuICBpZiAoZWwuc2NvcGVkU2xvdHMpIHtcbiAgICBkYXRhICs9IChnZW5TY29wZWRTbG90cyhlbCwgZWwuc2NvcGVkU2xvdHMsIHN0YXRlKSkgKyBcIixcIjtcbiAgfVxuICAvLyBjb21wb25lbnQgdi1tb2RlbFxuICBpZiAoZWwubW9kZWwpIHtcbiAgICBkYXRhICs9IFwibW9kZWw6e3ZhbHVlOlwiICsgKGVsLm1vZGVsLnZhbHVlKSArIFwiLGNhbGxiYWNrOlwiICsgKGVsLm1vZGVsLmNhbGxiYWNrKSArIFwiLGV4cHJlc3Npb246XCIgKyAoZWwubW9kZWwuZXhwcmVzc2lvbikgKyBcIn0sXCI7XG4gIH1cbiAgLy8gaW5saW5lLXRlbXBsYXRlXG4gIGlmIChlbC5pbmxpbmVUZW1wbGF0ZSkge1xuICAgIHZhciBpbmxpbmVUZW1wbGF0ZSA9IGdlbklubGluZVRlbXBsYXRlKGVsLCBzdGF0ZSk7XG4gICAgaWYgKGlubGluZVRlbXBsYXRlKSB7XG4gICAgICBkYXRhICs9IGlubGluZVRlbXBsYXRlICsgXCIsXCI7XG4gICAgfVxuICB9XG4gIGRhdGEgPSBkYXRhLnJlcGxhY2UoLywkLywgJycpICsgJ30nO1xuICAvLyB2LWJpbmQgZHluYW1pYyBhcmd1bWVudCB3cmFwXG4gIC8vIHYtYmluZCB3aXRoIGR5bmFtaWMgYXJndW1lbnRzIG11c3QgYmUgYXBwbGllZCB1c2luZyB0aGUgc2FtZSB2LWJpbmQgb2JqZWN0XG4gIC8vIG1lcmdlIGhlbHBlciBzbyB0aGF0IGNsYXNzL3N0eWxlL211c3RVc2VQcm9wIGF0dHJzIGFyZSBoYW5kbGVkIGNvcnJlY3RseS5cbiAgaWYgKGVsLmR5bmFtaWNBdHRycykge1xuICAgIGRhdGEgPSBcIl9iKFwiICsgZGF0YSArIFwiLFxcXCJcIiArIChlbC50YWcpICsgXCJcXFwiLFwiICsgKGdlblByb3BzKGVsLmR5bmFtaWNBdHRycykpICsgXCIpXCI7XG4gIH1cbiAgLy8gdi1iaW5kIGRhdGEgd3JhcFxuICBpZiAoZWwud3JhcERhdGEpIHtcbiAgICBkYXRhID0gZWwud3JhcERhdGEoZGF0YSk7XG4gIH1cbiAgLy8gdi1vbiBkYXRhIHdyYXBcbiAgaWYgKGVsLndyYXBMaXN0ZW5lcnMpIHtcbiAgICBkYXRhID0gZWwud3JhcExpc3RlbmVycyhkYXRhKTtcbiAgfVxuICByZXR1cm4gZGF0YVxufVxuXG5mdW5jdGlvbiBnZW5EaXJlY3RpdmVzIChlbCwgc3Rh
118dGUpIHtcbiAgdmFyIGRpcnMgPSBlbC5kaXJlY3RpdmVzO1xuICBpZiAoIWRpcnMpIHsgcmV0dXJuIH1cbiAgdmFyIHJlcyA9ICdkaXJlY3RpdmVzOlsnO1xuICB2YXIgaGFzUnVudGltZSA9IGZhbHNlO1xuICB2YXIgaSwgbCwgZGlyLCBuZWVkUnVudGltZTtcbiAgZm9yIChpID0gMCwgbCA9IGRpcnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgZGlyID0gZGlyc1tpXTtcbiAgICBuZWVkUnVudGltZSA9IHRydWU7XG4gICAgdmFyIGdlbiA9IHN0YXRlLmRpcmVjdGl2ZXNbZGlyLm5hbWVdO1xuICAgIGlmIChnZW4pIHtcbiAgICAgIC8vIGNvbXBpbGUtdGltZSBkaXJlY3RpdmUgdGhhdCBtYW5pcHVsYXRlcyBBU1QuXG4gICAgICAvLyByZXR1cm5zIHRydWUgaWYgaXQgYWxzbyBuZWVkcyBhIHJ1bnRpbWUgY291bnRlcnBhcnQuXG4gICAgICBuZWVkUnVudGltZSA9ICEhZ2VuKGVsLCBkaXIsIHN0YXRlLndhcm4pO1xuICAgIH1cbiAgICBpZiAobmVlZFJ1bnRpbWUpIHtcbiAgICAgIGhhc1J1bnRpbWUgPSB0cnVlO1xuICAgICAgcmVzICs9IFwie25hbWU6XFxcIlwiICsgKGRpci5uYW1lKSArIFwiXFxcIixyYXdOYW1lOlxcXCJcIiArIChkaXIucmF3TmFtZSkgKyBcIlxcXCJcIiArIChkaXIudmFsdWUgPyAoXCIsdmFsdWU6KFwiICsgKGRpci52YWx1ZSkgKyBcIiksZXhwcmVzc2lvbjpcIiArIChKU09OLnN0cmluZ2lmeShkaXIudmFsdWUpKSkgOiAnJykgKyAoZGlyLmFyZyA/IChcIixhcmc6XCIgKyAoZGlyLmlzRHluYW1pY0FyZyA/IGRpci5hcmcgOiAoXCJcXFwiXCIgKyAoZGlyLmFyZykgKyBcIlxcXCJcIikpKSA6ICcnKSArIChkaXIubW9kaWZpZXJzID8gKFwiLG1vZGlmaWVyczpcIiArIChKU09OLnN0cmluZ2lmeShkaXIubW9kaWZpZXJzKSkpIDogJycpICsgXCJ9LFwiO1xuICAgIH1cbiAgfVxuICBpZiAoaGFzUnVudGltZSkge1xuICAgIHJldHVybiByZXMuc2xpY2UoMCwgLTEpICsgJ10nXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2VuSW5saW5lVGVtcGxhdGUgKGVsLCBzdGF0ZSkge1xuICB2YXIgYXN0ID0gZWwuY2hpbGRyZW5bMF07XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIChcbiAgICBlbC5jaGlsZHJlbi5sZW5ndGggIT09IDEgfHwgYXN0LnR5cGUgIT09IDFcbiAgKSkge1xuICAgIHN0YXRlLndhcm4oXG4gICAgICAnSW5saW5lLXRlbXBsYXRlIGNvbXBvbmVudHMgbXVzdCBoYXZlIGV4YWN0bHkgb25lIGNoaWxkIGVsZW1lbnQuJyxcbiAgICAgIHsgc3RhcnQ6IGVsLnN0YXJ0IH1cbiAgICApO1xuICB9XG4gIGlmIChhc3QgJiYgYXN0LnR5cGUgPT09IDEpIHtcbiAgICB2YXIgaW5saW5lUmVuZGVyRm5zID0gZ2VuZXJhdGUoYXN0LCBzdGF0ZS5vcHRpb25zKTtcbiAgICByZXR1cm4gKFwiaW5saW5lVGVtcGxhdGU6e3JlbmRlcjpmdW5jdGlvbigpe1wiICsgKGlubGluZVJlbmRlckZucy5yZW5kZXIpICsgXCJ9LHN0YXRpY1JlbmRlckZuczpbXCIgKyAoaW5saW5lUmVuZGVyRm5zLnN0YXRpY1JlbmRlckZucy5tYXAoZnVuY3Rpb24gKGNvZGUpIHsgcmV0dXJuIChcImZ1bmN0aW9uKCl7XCIgKyBjb2RlICsgXCJ9XCIpOyB9KS5qb2luKCcsJykpICsgXCJdfVwiKVxuICB9XG59XG5cbmZ1bmN0aW9uIGdlblNjb3BlZFNsb3RzIChcbiAgZWwsXG4gIHNsb3RzLFxuICBzdGF0ZVxuKSB7XG4gIC8vIGJ5IGRlZmF1bHQgc2NvcGVkIHNsb3RzIGFyZSBjb25zaWRlcmVkIFwic3RhYmxlXCIsIHRoaXMgYWxsb3dzIGNoaWxkXG4gIC8vIGNvbXBvbmVudHMgd2l0aCBvbmx5IHNjb3BlZCBzbG90cyB0byBza2lwIGZvcmNlZCB1cGRhdGVzIGZyb20gcGFyZW50LlxuICAvLyBidXQgaW4gc29tZSBjYXNlcyB3ZSBoYXZlIHRvIGJhaWwtb3V0IG9mIHRoaXMgb3B0aW1pemF0aW9uXG4gIC8vIGZvciBleGFtcGxlIGlmIHRoZSBzbG90IGNvbnRhaW5zIGR5bmFtaWMgbmFtZXMsIGhhcyB2LWlmIG9yIHYtZm9yIG9uIHRoZW0uLi5cbiAgdmFyIG5lZWRzRm9yY2VVcGRhdGUgPSBlbC5mb3IgfHwgT2JqZWN0LmtleXMoc2xvdHMpLnNvbWUoZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBzbG90ID0gc2xvdHNba2V5XTtcbiAgICByZXR1cm4gKFxuICAgICAgc2xvdC5zbG90VGFyZ2V0RHluYW1pYyB8fFxuICAgICAgc2xvdC5pZiB8fFxuICAgICAgc2xvdC5mb3IgfHxcbiAgICAgIGNvbnRhaW5zU2xvdENoaWxkKHNsb3QpIC8vIGlzIHBhc3NpbmcgZG93biBzbG90IGZyb20gcGFyZW50IHdoaWNoIG1heSBiZSBkeW5hbWljXG4gICAgKVxuICB9KTtcblxuICAvLyAjOTUzNDogaWYgYSBjb21wb25lbnQgd2l0aCBzY29wZWQgc2xvdHMgaXMgaW5zaWRlIGEgY29uZGl0aW9uYWwgYnJhbmNoLFxuICAvLyBpdCdzIHBvc3NpYmxlIGZvciB0aGUgc2FtZSBjb21wb25lbnQgdG8gYmUgcmV1c2VkIGJ1dCB3aXRoIGRpZmZlcmVudFxuICAvLyBjb21waWxlZCBzbG90IGNvbnRlbnQuIFRvIGF2b2lkIHRoYXQsIHdlIGdlbmVyYXRlIGEgdW5pcXVlIGtleSBiYXNlZCBvblxuICAvLyB0aGUgZ2VuZXJhdGVkIGNvZGUgb2YgYWxsIHRoZSBzbG90IGNvbnRlbnRzLlxuICB2YXIgbmVlZHNLZXkgPSAhIWVsLmlmO1xuXG4gIC8vIE9SIHdoZW4gaXQgaXMgaW5zaWRlIGFub3RoZXIgc2NvcGVkIHNsb3Qgb3Igdi1mb3IgKHRoZSByZWFjdGl2aXR5IG1heSBiZVxuICAvLyBkaXNjb25uZWN0ZWQgZHVlIHRvIHRoZSBpbnRlcm1lZGlhdGUgc2NvcGUgdmFyaWFibGUpXG4gIC8vICM5NDM4LCAjOTUwNlxuICAvLyBUT0RPOiB0aGlzIGNhbiBiZSBmdXJ0aGVyIG9wdGltaXplZCBieSBwcm9wZXJseSBhbmFseXppbmcgaW4tc2NvcGUgYmluZGluZ3NcbiAgLy8gYW5kIHNraXAgZm9yY2UgdXBkYXRpbmcgb25lcyB0aGF0IGRvIG5vdCBhY3R1YWxseSB1c2Ugc2NvcGUgdmFyaWFibGVzLlxuICBpZiAoIW5lZWRzRm9yY2VVcGRhdGUpIHtcbiAgICB2YXIgcGFyZW50ID0gZWwucGFyZW50O1xuICAgIHdoaWxlIChwYXJlbnQpIHtcbiAgICAgIGlmIChcbiAgICAgICAgKHBhcmVudC5zbG90U2NvcGUgJiYgcGFyZW50LnNsb3RTY29wZSAhPT0gZW1wdHlTbG90U2NvcGVUb2tlbikgfHxcbiAgICAgICAgcGFyZW50LmZvclxuICAgICAgKSB7XG4gICAgICAgIG5lZWRzRm9yY2VVcGRhdGUgPSB0cnVlO1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgaWYgKHBhcmVudC5pZikge1xuICAgICAgICBuZWVkc0tleSA9IHRydWU7XG4gICAgICB9XG4gICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50O1xuICAgIH1cbiAgfVxuXG4gIHZhciBnZW5lcmF0ZWRTbG90cyA9IE9iamVjdC5rZXlzKHNsb3RzKVxuICAgIC5tYXAoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gZ2VuU2NvcGVkU2xvdChzbG90c1trZXldLCBzdGF0ZSk7IH0pXG4gICAgLmpvaW4oJywnKTtcblxuICByZXR1cm4gKFwic2NvcGVkU2xvdHM6X3UoW1wiICsgZ2VuZXJhdGVkU2xvdHMgKyBcIl1cIiArIChuZWVkc0ZvcmNlVXBkYXRlID8gXCIsbnVsbCx0cnVlXCIgOiBcIlwiKSArICghbmVlZHNGb3JjZVVwZGF0ZSAmJiBuZWVkc0tleSA/IChcIixudWxsLGZhbHNlLFwiICsgKGhhc2goZ2VuZXJhdGVkU2xvdHMpKSkgOiBcIlwiKSArIFwiKVwiKVxufVxuXG5mdW5jdGlvbiBoYXNoKHN0cikge1xuICB2YXIgaGFzaCA9IDUzODE7XG4gIHZhciBpID0gc3RyLmxlbmd0aDtcbiAgd2hpbGUoaSkge1xuICAgIGhhc2ggPSAoaGFzaCAqIDMzKSBeIHN0ci5jaGFyQ29kZUF0KC0taSk7XG4gIH1cbiAgcmV0dXJuIGhhc2ggPj4+IDBcbn1cblxuZnVuY3Rpb24gY29udGFpbnNTbG90Q2hpbGQgKGVsKSB7XG4gIGlmIChlbC50eXBlID09PSAxKSB7XG4gICAgaWYgKGVsLnRhZyA9PT0gJ3Nsb3QnKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gZWwuY2hpbGRyZW4uc29tZShjb250YWluc1Nsb3RDaGlsZClcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gZ2VuU2NvcGVkU2xvdCAoXG4gIGVsLFxuICBzdGF0ZVxuKSB7XG4gIHZhciBpc0xlZ2FjeVN5bnRheCA9IGVsLmF0dHJzTWFwWydzbG90LXNjb3BlJ107XG4gIGlmIChlbC5pZiAmJiAhZWwuaWZQcm9jZXNzZWQgJiYgIWlzTGVnYWN5U3ludGF4KSB7XG4gICAgcmV0dXJuIGdlbklmKGVsLCBzdGF0ZSwgZ2VuU2NvcGVkU2xvdCwgXCJudWxsXCIpXG4gIH1cbiAgaWYgKGVsLmZvciAmJiAhZWwuZm9yUHJvY2Vzc2VkKSB7XG4gICAgcmV0dXJuIGdlbkZvcihlbCwgc3Rh
118dGUsIGdlblNjb3BlZFNsb3QpXG4gIH1cbiAgdmFyIHNsb3RTY29wZSA9IGVsLnNsb3RTY29wZSA9PT0gZW1wdHlTbG90U2NvcGVUb2tlblxuICAgID8gXCJcIlxuICAgIDogU3RyaW5nKGVsLnNsb3RTY29wZSk7XG4gIHZhciBmbiA9IFwiZnVuY3Rpb24oXCIgKyBzbG90U2NvcGUgKyBcIil7XCIgK1xuICAgIFwicmV0dXJuIFwiICsgKGVsLnRhZyA9PT0gJ3RlbXBsYXRlJ1xuICAgICAgPyBlbC5pZiAmJiBpc0xlZ2FjeVN5bnRheFxuICAgICAgICA/IChcIihcIiArIChlbC5pZikgKyBcIik/XCIgKyAoZ2VuQ2hpbGRyZW4oZWwsIHN0YXRlKSB8fCAndW5kZWZpbmVkJykgKyBcIjp1bmRlZmluZWRcIilcbiAgICAgICAgOiBnZW5DaGlsZHJlbihlbCwgc3RhdGUpIHx8ICd1bmRlZmluZWQnXG4gICAgICA6IGdlbkVsZW1lbnQoZWwsIHN0YXRlKSkgKyBcIn1cIjtcbiAgLy8gcmV2ZXJzZSBwcm94eSB2LXNsb3Qgd2l0aG91dCBzY29wZSBvbiB0aGlzLiRzbG90c1xuICB2YXIgcmV2ZXJzZVByb3h5ID0gc2xvdFNjb3BlID8gXCJcIiA6IFwiLHByb3h5OnRydWVcIjtcbiAgcmV0dXJuIChcIntrZXk6XCIgKyAoZWwuc2xvdFRhcmdldCB8fCBcIlxcXCJkZWZhdWx0XFxcIlwiKSArIFwiLGZuOlwiICsgZm4gKyByZXZlcnNlUHJveHkgKyBcIn1cIilcbn1cblxuZnVuY3Rpb24gZ2VuQ2hpbGRyZW4gKFxuICBlbCxcbiAgc3RhdGUsXG4gIGNoZWNrU2tpcCxcbiAgYWx0R2VuRWxlbWVudCxcbiAgYWx0R2VuTm9kZVxuKSB7XG4gIHZhciBjaGlsZHJlbiA9IGVsLmNoaWxkcmVuO1xuICBpZiAoY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgdmFyIGVsJDEgPSBjaGlsZHJlblswXTtcbiAgICAvLyBvcHRpbWl6ZSBzaW5nbGUgdi1mb3JcbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAxICYmXG4gICAgICBlbCQxLmZvciAmJlxuICAgICAgZWwkMS50YWcgIT09ICd0ZW1wbGF0ZScgJiZcbiAgICAgIGVsJDEudGFnICE9PSAnc2xvdCdcbiAgICApIHtcbiAgICAgIHZhciBub3JtYWxpemF0aW9uVHlwZSA9IGNoZWNrU2tpcFxuICAgICAgICA/IHN0YXRlLm1heWJlQ29tcG9uZW50KGVsJDEpID8gXCIsMVwiIDogXCIsMFwiXG4gICAgICAgIDogXCJcIjtcbiAgICAgIHJldHVybiAoXCJcIiArICgoYWx0R2VuRWxlbWVudCB8fCBnZW5FbGVtZW50KShlbCQxLCBzdGF0ZSkpICsgbm9ybWFsaXphdGlvblR5cGUpXG4gICAgfVxuICAgIHZhciBub3JtYWxpemF0aW9uVHlwZSQxID0gY2hlY2tTa2lwXG4gICAgICA/IGdldE5vcm1hbGl6YXRpb25UeXBlKGNoaWxkcmVuLCBzdGF0ZS5tYXliZUNvbXBvbmVudClcbiAgICAgIDogMDtcbiAgICB2YXIgZ2VuID0gYWx0R2VuTm9kZSB8fCBnZW5Ob2RlO1xuICAgIHJldHVybiAoXCJbXCIgKyAoY2hpbGRyZW4ubWFwKGZ1bmN0aW9uIChjKSB7IHJldHVybiBnZW4oYywgc3RhdGUpOyB9KS5qb2luKCcsJykpICsgXCJdXCIgKyAobm9ybWFsaXphdGlvblR5cGUkMSA/IChcIixcIiArIG5vcm1hbGl6YXRpb25UeXBlJDEpIDogJycpKVxuICB9XG59XG5cbi8vIGRldGVybWluZSB0aGUgbm9ybWFsaXphdGlvbiBuZWVkZWQgZm9yIHRoZSBjaGlsZHJlbiBhcnJheS5cbi8vIDA6IG5vIG5vcm1hbGl6YXRpb24gbmVlZGVkXG4vLyAxOiBzaW1wbGUgbm9ybWFsaXphdGlvbiBuZWVkZWQgKHBvc3NpYmxlIDEtbGV2ZWwgZGVlcCBuZXN0ZWQgYXJyYXkpXG4vLyAyOiBmdWxsIG5vcm1hbGl6YXRpb24gbmVlZGVkXG5mdW5jdGlvbiBnZXROb3JtYWxpemF0aW9uVHlwZSAoXG4gIGNoaWxkcmVuLFxuICBtYXliZUNvbXBvbmVudFxuKSB7XG4gIHZhciByZXMgPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGVsID0gY2hpbGRyZW5baV07XG4gICAgaWYgKGVsLnR5cGUgIT09IDEpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChuZWVkc05vcm1hbGl6YXRpb24oZWwpIHx8XG4gICAgICAgIChlbC5pZkNvbmRpdGlvbnMgJiYgZWwuaWZDb25kaXRpb25zLnNvbWUoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIG5lZWRzTm9ybWFsaXphdGlvbihjLmJsb2NrKTsgfSkpKSB7XG4gICAgICByZXMgPSAyO1xuICAgICAgYnJlYWtcbiAgICB9XG4gICAgaWYgKG1heWJlQ29tcG9uZW50KGVsKSB8fFxuICAgICAgICAoZWwuaWZDb25kaXRpb25zICYmIGVsLmlmQ29uZGl0aW9ucy5zb21lKGZ1bmN0aW9uIChjKSB7IHJldHVybiBtYXliZUNvbXBvbmVudChjLmJsb2NrKTsgfSkpKSB7XG4gICAgICByZXMgPSAxO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIG5lZWRzTm9ybWFsaXphdGlvbiAoZWwpIHtcbiAgcmV0dXJuIGVsLmZvciAhPT0gdW5kZWZpbmVkIHx8IGVsLnRhZyA9PT0gJ3RlbXBsYXRlJyB8fCBlbC50YWcgPT09ICdzbG90J1xufVxuXG5mdW5jdGlvbiBnZW5Ob2RlIChub2RlLCBzdGF0ZSkge1xuICBpZiAobm9kZS50eXBlID09PSAxKSB7XG4gICAgcmV0dXJuIGdlbkVsZW1lbnQobm9kZSwgc3RhdGUpXG4gIH0gZWxzZSBpZiAobm9kZS50eXBlID09PSAzICYmIG5vZGUuaXNDb21tZW50KSB7XG4gICAgcmV0dXJuIGdlbkNvbW1lbnQobm9kZSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZ2VuVGV4dChub2RlKVxuICB9XG59XG5cbmZ1bmN0aW9uIGdlblRleHQgKHRleHQpIHtcbiAgcmV0dXJuIChcIl92KFwiICsgKHRleHQudHlwZSA9PT0gMlxuICAgID8gdGV4dC5leHByZXNzaW9uIC8vIG5vIG5lZWQgZm9yICgpIGJlY2F1c2UgYWxyZWFkeSB3cmFwcGVkIGluIF9zKClcbiAgICA6IHRyYW5zZm9ybVNwZWNpYWxOZXdsaW5lcyhKU09OLnN0cmluZ2lmeSh0ZXh0LnRleHQpKSkgKyBcIilcIilcbn1cblxuZnVuY3Rpb24gZ2VuQ29tbWVudCAoY29tbWVudCkge1xuICByZXR1cm4gKFwiX2UoXCIgKyAoSlNPTi5zdHJpbmdpZnkoY29tbWVudC50ZXh0KSkgKyBcIilcIilcbn1cblxuZnVuY3Rpb24gZ2VuU2xvdCAoZWwsIHN0YXRlKSB7XG4gIHZhciBzbG90TmFtZSA9IGVsLnNsb3ROYW1lIHx8ICdcImRlZmF1bHRcIic7XG4gIHZhciBjaGlsZHJlbiA9IGdlbkNoaWxkcmVuKGVsLCBzdGF0ZSk7XG4gIHZhciByZXMgPSBcIl90KFwiICsgc2xvdE5hbWUgKyAoY2hpbGRyZW4gPyAoXCIsZnVuY3Rpb24oKXtyZXR1cm4gXCIgKyBjaGlsZHJlbiArIFwifVwiKSA6ICcnKTtcbiAgdmFyIGF0dHJzID0gZWwuYXR0cnMgfHwgZWwuZHluYW1pY0F0dHJzXG4gICAgPyBnZW5Qcm9wcygoZWwuYXR0cnMgfHwgW10pLmNvbmNhdChlbC5keW5hbWljQXR0cnMgfHwgW10pLm1hcChmdW5jdGlvbiAoYXR0cikgeyByZXR1cm4gKHtcbiAgICAgICAgLy8gc2xvdCBwcm9wcyBhcmUgY2FtZWxpemVkXG4gICAgICAgIG5hbWU6IGNhbWVsaXplKGF0dHIubmFtZSksXG4gICAgICAgI
118HZhbHVlOiBhdHRyLnZhbHVlLFxuICAgICAgICBkeW5hbWljOiBhdHRyLmR5bmFtaWNcbiAgICAgIH0pOyB9KSlcbiAgICA6IG51bGw7XG4gIHZhciBiaW5kJCQxID0gZWwuYXR0cnNNYXBbJ3YtYmluZCddO1xuICBpZiAoKGF0dHJzIHx8IGJpbmQkJDEpICYmICFjaGlsZHJlbikge1xuICAgIHJlcyArPSBcIixudWxsXCI7XG4gIH1cbiAgaWYgKGF0dHJzKSB7XG4gICAgcmVzICs9IFwiLFwiICsgYXR0cnM7XG4gIH1cbiAgaWYgKGJpbmQkJDEpIHtcbiAgICByZXMgKz0gKGF0dHJzID8gJycgOiAnLG51bGwnKSArIFwiLFwiICsgYmluZCQkMTtcbiAgfVxuICByZXR1cm4gcmVzICsgJyknXG59XG5cbi8vIGNvbXBvbmVudE5hbWUgaXMgZWwuY29tcG9uZW50LCB0YWtlIGl0IGFzIGFyZ3VtZW50IHRvIHNodW4gZmxvdydzIHBlc3NpbWlzdGljIHJlZmluZW1lbnRcbmZ1bmN0aW9uIGdlbkNvbXBvbmVudCAoXG4gIGNvbXBvbmVudE5hbWUsXG4gIGVsLFxuICBzdGF0ZVxuKSB7XG4gIHZhciBjaGlsZHJlbiA9IGVsLmlubGluZVRlbXBsYXRlID8gbnVsbCA6IGdlbkNoaWxkcmVuKGVsLCBzdGF0ZSwgdHJ1ZSk7XG4gIHJldHVybiAoXCJfYyhcIiArIGNvbXBvbmVudE5hbWUgKyBcIixcIiArIChnZW5EYXRhJDIoZWwsIHN0YXRlKSkgKyAoY2hpbGRyZW4gPyAoXCIsXCIgKyBjaGlsZHJlbikgOiAnJykgKyBcIilcIilcbn1cblxuZnVuY3Rpb24gZ2VuUHJvcHMgKHByb3BzKSB7XG4gIHZhciBzdGF0aWNQcm9wcyA9IFwiXCI7XG4gIHZhciBkeW5hbWljUHJvcHMgPSBcIlwiO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHByb3AgPSBwcm9wc1tpXTtcbiAgICB2YXIgdmFsdWUgPSB0cmFuc2Zvcm1TcGVjaWFsTmV3bGluZXMocHJvcC52YWx1ZSk7XG4gICAgaWYgKHByb3AuZHluYW1pYykge1xuICAgICAgZHluYW1pY1Byb3BzICs9IChwcm9wLm5hbWUpICsgXCIsXCIgKyB2YWx1ZSArIFwiLFwiO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0aWNQcm9wcyArPSBcIlxcXCJcIiArIChwcm9wLm5hbWUpICsgXCJcXFwiOlwiICsgdmFsdWUgKyBcIixcIjtcbiAgICB9XG4gIH1cbiAgc3RhdGljUHJvcHMgPSBcIntcIiArIChzdGF0aWNQcm9wcy5zbGljZSgwLCAtMSkpICsgXCJ9XCI7XG4gIGlmIChkeW5hbWljUHJvcHMpIHtcbiAgICByZXR1cm4gKFwiX2QoXCIgKyBzdGF0aWNQcm9wcyArIFwiLFtcIiArIChkeW5hbWljUHJvcHMuc2xpY2UoMCwgLTEpKSArIFwiXSlcIilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc3RhdGljUHJvcHNcbiAgfVxufVxuXG4vLyAjMzg5NSwgIzQyNjhcbmZ1bmN0aW9uIHRyYW5zZm9ybVNwZWNpYWxOZXdsaW5lcyAodGV4dCkge1xuICByZXR1cm4gdGV4dFxuICAgIC5yZXBsYWNlKC9cXHUyMDI4L2csICdcXFxcdTIwMjgnKVxuICAgIC5yZXBsYWNlKC9cXHUyMDI5L2csICdcXFxcdTIwMjknKVxufVxuXG4vKiAgKi9cblxuXG5cbi8vIHRoZXNlIGtleXdvcmRzIHNob3VsZCBub3QgYXBwZWFyIGluc2lkZSBleHByZXNzaW9ucywgYnV0IG9wZXJhdG9ycyBsaWtlXG4vLyB0eXBlb2YsIGluc3RhbmNlb2YgYW5kIGluIGFyZSBhbGxvd2VkXG52YXIgcHJvaGliaXRlZEtleXdvcmRSRSA9IG5ldyBSZWdFeHAoJ1xcXFxiJyArIChcbiAgJ2RvLGlmLGZvcixsZXQsbmV3LHRyeSx2YXIsY2FzZSxlbHNlLHdpdGgsYXdhaXQsYnJlYWssY2F0Y2gsY2xhc3MsY29uc3QsJyArXG4gICdzdXBlcix0aHJvdyx3aGlsZSx5aWVsZCxkZWxldGUsZXhwb3J0LGltcG9ydCxyZXR1cm4sc3dpdGNoLGRlZmF1bHQsJyArXG4gICdleHRlbmRzLGZpbmFsbHksY29udGludWUsZGVidWdnZXIsZnVuY3Rpb24sYXJndW1lbnRzJ1xuKS5zcGxpdCgnLCcpLmpvaW4oJ1xcXFxifFxcXFxiJykgKyAnXFxcXGInKTtcblxuLy8gdGhlc2UgdW5hcnkgb3BlcmF0b3JzIHNob3VsZCBub3QgYmUgdXNlZCBhcyBwcm9wZXJ0eS9tZXRob2QgbmFtZXNcbnZhciB1bmFyeU9wZXJhdG9yc1JFID0gbmV3IFJlZ0V4cCgnXFxcXGInICsgKFxuICAnZGVsZXRlLHR5cGVvZix2b2lkJ1xuKS5zcGxpdCgnLCcpLmpvaW4oJ1xcXFxzKlxcXFwoW15cXFxcKV0qXFxcXCl8XFxcXGInKSArICdcXFxccypcXFxcKFteXFxcXCldKlxcXFwpJyk7XG5cbi8vIHN0cmlwIHN0cmluZ3MgaW4gZXhwcmVzc2lvbnNcbnZhciBzdHJpcFN0cmluZ1JFID0gLycoPzpbXidcXFxcXXxcXFxcLikqJ3xcIig/OlteXCJcXFxcXXxcXFxcLikqXCJ8YCg/OlteYFxcXFxdfFxcXFwuKSpcXCRcXHt8XFx9KD86W15gXFxcXF18XFxcXC4pKmB8YCg/OlteYFxcXFxdfFxcXFwuKSpgL2c7XG5cbi8vIGRldGVjdCBwcm9ibGVtYXRpYyBleHByZXNzaW9ucyBpbiBhIHRlbXBsYXRlXG5mdW5jdGlvbiBkZXRlY3RFcnJvcnMgKGFzdCwgd2Fybikge1xuICBpZiAoYXN0KSB7XG4gICAgY2hlY2tOb2RlKGFzdCwgd2Fybik7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tOb2RlIChub2RlLCB3YXJuKSB7XG4gIGlmIChub2RlLnR5cGUgPT09IDEpIHtcbiAgICBmb3IgKHZhciBuYW1lIGluIG5vZGUuYXR0cnNNYXApIHtcbiAgICAgIGlmIChkaXJSRS50ZXN0KG5hbWUpKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IG5vZGUuYXR0cnNNYXBbbmFtZV07XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIHZhciByYW5nZSA9IG5vZGUucmF3QXR0cnNNYXBbbmFtZV07XG4gICAgICAgICAgaWYgKG5hbWUgPT09ICd2LWZvcicpIHtcbiAgICAgICAgICAgIGNoZWNrRm9yKG5vZGUsIChcInYtZm9yPVxcXCJcIiArIHZhbHVlICsgXCJcXFwiXCIpLCB3YXJuLCByYW5nZSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAndi1zbG90JyB8fCBuYW1lWzBdID09PSAnIycpIHtcbiAgICAgICAgICAgIGNoZWNrRnVuY3Rpb25QYXJhbWV0ZXJFeHByZXNzaW9uKHZhbHVlLCAobmFtZSArIFwiPVxcXCJcIiArIHZhbHVlICsgXCJcXFwiXCIpLCB3YXJuLCByYW5nZSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChvblJFLnRlc3QobmFtZSkpIHtcbiAgICAgICAgICAgIGNoZWNrRXZlbnQodmFsdWUsIChuYW1lICsgXCI9XFxcIlwiICsgdmFsdWUgKyBcIlxcXCJcIiksIHdhcm4sIHJhbmdlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2hlY2tFeHByZXNzaW9uKHZhbHVlLCAobmFtZSArIFwiPVxcXCJcIiArIHZhbHVlICsgXCJcXFwiXCIpLCB3YXJuLCByYW5nZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY2hlY2tOb2RlKG5vZGUuY2hpbGRyZW5baV0sIHdhcm4pO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09IDIpIHtcbiAgICBjaGVja0V4cHJl
118c3Npb24obm9kZS5leHByZXNzaW9uLCBub2RlLnRleHQsIHdhcm4sIG5vZGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrRXZlbnQgKGV4cCwgdGV4dCwgd2FybiwgcmFuZ2UpIHtcbiAgdmFyIHN0cmlwcGVkID0gZXhwLnJlcGxhY2Uoc3RyaXBTdHJpbmdSRSwgJycpO1xuICB2YXIga2V5d29yZE1hdGNoID0gc3RyaXBwZWQubWF0Y2godW5hcnlPcGVyYXRvcnNSRSk7XG4gIGlmIChrZXl3b3JkTWF0Y2ggJiYgc3RyaXBwZWQuY2hhckF0KGtleXdvcmRNYXRjaC5pbmRleCAtIDEpICE9PSAnJCcpIHtcbiAgICB3YXJuKFxuICAgICAgXCJhdm9pZCB1c2luZyBKYXZhU2NyaXB0IHVuYXJ5IG9wZXJhdG9yIGFzIHByb3BlcnR5IG5hbWU6IFwiICtcbiAgICAgIFwiXFxcIlwiICsgKGtleXdvcmRNYXRjaFswXSkgKyBcIlxcXCIgaW4gZXhwcmVzc2lvbiBcIiArICh0ZXh0LnRyaW0oKSksXG4gICAgICByYW5nZVxuICAgICk7XG4gIH1cbiAgY2hlY2tFeHByZXNzaW9uKGV4cCwgdGV4dCwgd2FybiwgcmFuZ2UpO1xufVxuXG5mdW5jdGlvbiBjaGVja0ZvciAobm9kZSwgdGV4dCwgd2FybiwgcmFuZ2UpIHtcbiAgY2hlY2tFeHByZXNzaW9uKG5vZGUuZm9yIHx8ICcnLCB0ZXh0LCB3YXJuLCByYW5nZSk7XG4gIGNoZWNrSWRlbnRpZmllcihub2RlLmFsaWFzLCAndi1mb3IgYWxpYXMnLCB0ZXh0LCB3YXJuLCByYW5nZSk7XG4gIGNoZWNrSWRlbnRpZmllcihub2RlLml0ZXJhdG9yMSwgJ3YtZm9yIGl0ZXJhdG9yJywgdGV4dCwgd2FybiwgcmFuZ2UpO1xuICBjaGVja0lkZW50aWZpZXIobm9kZS5pdGVyYXRvcjIsICd2LWZvciBpdGVyYXRvcicsIHRleHQsIHdhcm4sIHJhbmdlKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tJZGVudGlmaWVyIChcbiAgaWRlbnQsXG4gIHR5cGUsXG4gIHRleHQsXG4gIHdhcm4sXG4gIHJhbmdlXG4pIHtcbiAgaWYgKHR5cGVvZiBpZGVudCA9PT0gJ3N0cmluZycpIHtcbiAgICB0cnkge1xuICAgICAgbmV3IEZ1bmN0aW9uKChcInZhciBcIiArIGlkZW50ICsgXCI9X1wiKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgd2FybigoXCJpbnZhbGlkIFwiICsgdHlwZSArIFwiIFxcXCJcIiArIGlkZW50ICsgXCJcXFwiIGluIGV4cHJlc3Npb246IFwiICsgKHRleHQudHJpbSgpKSksIHJhbmdlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tFeHByZXNzaW9uIChleHAsIHRleHQsIHdhcm4sIHJhbmdlKSB7XG4gIHRyeSB7XG4gICAgbmV3IEZ1bmN0aW9uKChcInJldHVybiBcIiArIGV4cCkpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdmFyIGtleXdvcmRNYXRjaCA9IGV4cC5yZXBsYWNlKHN0cmlwU3RyaW5nUkUsICcnKS5tYXRjaChwcm9oaWJpdGVkS2V5d29yZFJFKTtcbiAgICBpZiAoa2V5d29yZE1hdGNoKSB7XG4gICAgICB3YXJuKFxuICAgICAgICBcImF2b2lkIHVzaW5nIEphdmFTY3JpcHQga2V5d29yZCBhcyBwcm9wZXJ0eSBuYW1lOiBcIiArXG4gICAgICAgIFwiXFxcIlwiICsgKGtleXdvcmRNYXRjaFswXSkgKyBcIlxcXCJcXG4gIFJhdyBleHByZXNzaW9uOiBcIiArICh0ZXh0LnRyaW0oKSksXG4gICAgICAgIHJhbmdlXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB3YXJuKFxuICAgICAgICBcImludmFsaWQgZXhwcmVzc2lvbjogXCIgKyAoZS5tZXNzYWdlKSArIFwiIGluXFxuXFxuXCIgK1xuICAgICAgICBcIiAgICBcIiArIGV4cCArIFwiXFxuXFxuXCIgK1xuICAgICAgICBcIiAgUmF3IGV4cHJlc3Npb246IFwiICsgKHRleHQudHJpbSgpKSArIFwiXFxuXCIsXG4gICAgICAgIHJhbmdlXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja0Z1bmN0aW9uUGFyYW1ldGVyRXhwcmVzc2lvbiAoZXhwLCB0ZXh0LCB3YXJuLCByYW5nZSkge1xuICB0cnkge1xuICAgIG5ldyBGdW5jdGlvbihleHAsICcnKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHdhcm4oXG4gICAgICBcImludmFsaWQgZnVuY3Rpb24gcGFyYW1ldGVyIGV4cHJlc3Npb246IFwiICsgKGUubWVzc2FnZSkgKyBcIiBpblxcblxcblwiICtcbiAgICAgIFwiICAgIFwiICsgZXhwICsgXCJcXG5cXG5cIiArXG4gICAgICBcIiAgUmF3IGV4cHJlc3Npb246IFwiICsgKHRleHQudHJpbSgpKSArIFwiXFxuXCIsXG4gICAgICByYW5nZVxuICAgICk7XG4gIH1cbn1cblxuLyogICovXG5cbnZhciByYW5nZSA9IDI7XG5cbmZ1bmN0aW9uIGdlbmVyYXRlQ29kZUZyYW1lIChcbiAgc291cmNlLFxuICBzdGFydCxcbiAgZW5kXG4pIHtcbiAgaWYgKCBzdGFydCA9PT0gdm9pZCAwICkgc3RhcnQgPSAwO1xuICBpZiAoIGVuZCA9PT0gdm9pZCAwICkgZW5kID0gc291cmNlLmxlbmd0aDtcblxuICB2YXIgbGluZXMgPSBzb3VyY2Uuc3BsaXQoL1xccj9cXG4vKTtcbiAgdmFyIGNvdW50ID0gMDtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgY291bnQgKz0gbGluZXNbaV0ubGVuZ3RoICsgMTtcbiAgICBpZiAoY291bnQgPj0gc3RhcnQpIHtcbiAgICAgIGZvciAodmFyIGogPSBpIC0gcmFuZ2U7IGogPD0gaSArIHJhbmdlIHx8IGVuZCA+IGNvdW50OyBqKyspIHtcbiAgICAgICAgaWYgKGogPCAwIHx8IGogPj0gbGluZXMubGVuZ3RoKSB7IGNvbnRpbnVlIH1cbiAgICAgICAgcmVzLnB1c2goKFwiXCIgKyAoaiArIDEpICsgKHJlcGVhdCQxKFwiIFwiLCAzIC0gU3RyaW5nKGogKyAxKS5sZW5ndGgpKSArIFwifCAgXCIgKyAobGluZXNbal0pKSk7XG4gICAgICAgIHZhciBsaW5lTGVuZ3RoID0gbGluZXNbal0ubGVuZ3RoO1xuICAgICAgICBpZiAoaiA9PT0gaSkge1xuICAgICAgICAgIC8vIHB1c2ggdW5kZXJsaW5lXG4gICAgICAgICAgdmFyIHBhZCA9IHN0YXJ0IC0gKGNvdW50IC0gbGluZUxlbmd0aCkgKyAxO1xuICAgICAgICAgIHZhciBsZW5ndGggPSBlbmQgPiBjb3VudCA/IGxpbmVMZW5ndGggLSBwYWQgOiBlbmQgLSBzdGFydDtcbiAgICAgICAgICByZXMucHVzaChcIiAgIHwgIFwiICsgcmVwZWF0JDEoXCIgXCIsIHBhZCkgKyByZXBlYXQkMShcIl5cIiwgbGVuZ3RoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaiA+IGkpIHtcbiAgICAgICAgICBpZiAoZW5kID4gY291bnQpIHtcbiAgICAgICAgICAgI
118HZhciBsZW5ndGgkMSA9IE1hdGgubWluKGVuZCAtIGNvdW50LCBsaW5lTGVuZ3RoKTtcbiAgICAgICAgICAgIHJlcy5wdXNoKFwiICAgfCAgXCIgKyByZXBlYXQkMShcIl5cIiwgbGVuZ3RoJDEpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY291bnQgKz0gbGluZUxlbmd0aCArIDE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG4gIHJldHVybiByZXMuam9pbignXFxuJylcbn1cblxuZnVuY3Rpb24gcmVwZWF0JDEgKHN0ciwgbikge1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGlmIChuID4gMCkge1xuICAgIHdoaWxlICh0cnVlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgIGlmIChuICYgMSkgeyByZXN1bHQgKz0gc3RyOyB9XG4gICAgICBuID4+Pj0gMTtcbiAgICAgIGlmIChuIDw9IDApIHsgYnJlYWsgfVxuICAgICAgc3RyICs9IHN0cjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vKiAgKi9cblxuXG5cbmZ1bmN0aW9uIGNyZWF0ZUZ1bmN0aW9uIChjb2RlLCBlcnJvcnMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uKGNvZGUpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGVycm9ycy5wdXNoKHsgZXJyOiBlcnIsIGNvZGU6IGNvZGUgfSk7XG4gICAgcmV0dXJuIG5vb3BcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVDb21waWxlVG9GdW5jdGlvbkZuIChjb21waWxlKSB7XG4gIHZhciBjYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGNvbXBpbGVUb0Z1bmN0aW9ucyAoXG4gICAgdGVtcGxhdGUsXG4gICAgb3B0aW9ucyxcbiAgICB2bVxuICApIHtcbiAgICBvcHRpb25zID0gZXh0ZW5kKHt9LCBvcHRpb25zKTtcbiAgICB2YXIgd2FybiQkMSA9IG9wdGlvbnMud2FybiB8fCB3YXJuO1xuICAgIGRlbGV0ZSBvcHRpb25zLndhcm47XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgLy8gZGV0ZWN0IHBvc3NpYmxlIENTUCByZXN0cmljdGlvblxuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gMScpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoZS50b1N0cmluZygpLm1hdGNoKC91bnNhZmUtZXZhbHxDU1AvKSkge1xuICAgICAgICAgIHdhcm4kJDEoXG4gICAgICAgICAgICAnSXQgc2VlbXMgeW91IGFyZSB1c2luZyB0aGUgc3RhbmRhbG9uZSBidWlsZCBvZiBWdWUuanMgaW4gYW4gJyArXG4gICAgICAgICAgICAnZW52aXJvbm1lbnQgd2l0aCBDb250ZW50IFNlY3VyaXR5IFBvbGljeSB0aGF0IHByb2hpYml0cyB1bnNhZmUtZXZhbC4gJyArXG4gICAgICAgICAgICAnVGhlIHRlbXBsYXRlIGNvbXBpbGVyIGNhbm5vdCB3b3JrIGluIHRoaXMgZW52aXJvbm1lbnQuIENvbnNpZGVyICcgK1xuICAgICAgICAgICAgJ3JlbGF4aW5nIHRoZSBwb2xpY3kgdG8gYWxsb3cgdW5zYWZlLWV2YWwgb3IgcHJlLWNvbXBpbGluZyB5b3VyICcgK1xuICAgICAgICAgICAgJ3RlbXBsYXRlcyBpbnRvIHJlbmRlciBmdW5jdGlvbnMuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjaGVjayBjYWNoZVxuICAgIHZhciBrZXkgPSBvcHRpb25zLmRlbGltaXRlcnNcbiAgICAgID8gU3RyaW5nKG9wdGlvbnMuZGVsaW1pdGVycykgKyB0ZW1wbGF0ZVxuICAgICAgOiB0ZW1wbGF0ZTtcbiAgICBpZiAoY2FjaGVba2V5XSkge1xuICAgICAgcmV0dXJuIGNhY2hlW2tleV1cbiAgICB9XG5cbiAgICAvLyBjb21waWxlXG4gICAgdmFyIGNvbXBpbGVkID0gY29tcGlsZSh0ZW1wbGF0ZSwgb3B0aW9ucyk7XG5cbiAgICAvLyBjaGVjayBjb21waWxhdGlvbiBlcnJvcnMvdGlwc1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoY29tcGlsZWQuZXJyb3JzICYmIGNvbXBpbGVkLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMub3V0cHV0U291cmNlUmFuZ2UpIHtcbiAgICAgICAgICBjb21waWxlZC5lcnJvcnMuZm9yRWFjaChmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgd2FybiQkMShcbiAgICAgICAgICAgICAgXCJFcnJvciBjb21waWxpbmcgdGVtcGxhdGU6XFxuXFxuXCIgKyAoZS5tc2cpICsgXCJcXG5cXG5cIiArXG4gICAgICAgICAgICAgIGdlbmVyYXRlQ29kZUZyYW1lKHRlbXBsYXRlLCBlLnN0YXJ0LCBlLmVuZCksXG4gICAgICAgICAgICAgIHZtXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdhcm4kJDEoXG4gICAgICAgICAgICBcIkVycm9yIGNvbXBpbGluZyB0ZW1wbGF0ZTpcXG5cXG5cIiArIHRlbXBsYXRlICsgXCJcXG5cXG5cIiArXG4gICAgICAgICAgICBjb21waWxlZC5lcnJvcnMubWFwKGZ1bmN0aW9uIChlKSB7IHJldHVybiAoXCItIFwiICsgZSk7IH0pLmpvaW4oJ1xcbicpICsgJ1xcbicsXG4gICAgICAgICAgICB2bVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjb21waWxlZC50aXBzICYmIGNvbXBpbGVkLnRpcHMubGVuZ3RoKSB7XG4gICAgICAgIGlmIChvcHRpb25zLm91dHB1dFNvdXJjZVJhbmdlKSB7XG4gICAgICAgICAgY29tcGlsZWQudGlwcy5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7IHJldHVybiB0aXAoZS5tc2csIHZtKTsgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29tcGlsZWQudGlwcy5mb3JFYWNoKGZ1bmN0aW9uIChtc2cpIHsgcmV0dXJuIHRpcChtc2csIHZtKTsgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB0dXJuIGNvZGUgaW50byBmdW5jdGlvbnNcbiAgICB2YXIgcmVzID0ge307XG4gICAgdmFyIGZuR2VuRXJyb3JzID0gW107XG4gICAgcmVzLnJlbmRlciA9IGNyZWF0ZUZ1bmN0aW9uKGNvbXBpbGVkLnJlbmRlciwgZm5HZW5FcnJvcnMpO1xuICAgIHJlcy5zdGF0aWNSZW5kZXJGbnMgPSBjb21waWxlZC5zdGF0aWNSZW5kZXJGbnMubWFwKGZ1bmN0aW9uIChjb2RlKSB7XG4gICAgICByZXR1cm4gY3JlYXRlRnVuY3Rpb24oY29kZSwgZm5HZW5FcnJvcnMpXG4gICAgfSk7XG5cbiAgICAvLyBjaGVjayBmdW5jdGlvbiBnZW5lcmF0aW9uIGVycm9ycy5cbiAgICAvLyB0aGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpZiB0aGVyZSBpcyBhIGJ1ZyBpbiB0aGUgY29tcGlsZXIgaXRzZWxmLlxuICAgIC8vIG1vc3RseSBmb3IgY29kZWdlbiBkZXZlbG9wbWVudCB1c2VcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKCghY29tcGlsZWQuZXJyb3JzIHx8ICFjb21waWxlZC5lcnJvcnMubGVuZ3RoKSAmJiBmbkdlbkVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgd2FybiQkMShcbiAgICAgICAgICBcIkZhaWxlZCB0byBnZW5lcmF0ZSByZW5kZXIgZnVuY3Rpb246XFxuXFxuXCIgK1xuICAgICAgICAgIGZuR2VuRXJyb3JzLm1hcChmdW5jdGlvbiAocmVmKSB7XG4gICAgICAgICAgICB2Y
118XIgZXJyID0gcmVmLmVycjtcbiAgICAgICAgICAgIHZhciBjb2RlID0gcmVmLmNvZGU7XG5cbiAgICAgICAgICAgIHJldHVybiAoKGVyci50b1N0cmluZygpKSArIFwiIGluXFxuXFxuXCIgKyBjb2RlICsgXCJcXG5cIik7XG4gICAgICAgIH0pLmpvaW4oJ1xcbicpLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIChjYWNoZVtrZXldID0gcmVzKVxuICB9XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBjcmVhdGVDb21waWxlckNyZWF0b3IgKGJhc2VDb21waWxlKSB7XG4gIHJldHVybiBmdW5jdGlvbiBjcmVhdGVDb21waWxlciAoYmFzZU9wdGlvbnMpIHtcbiAgICBmdW5jdGlvbiBjb21waWxlIChcbiAgICAgIHRlbXBsYXRlLFxuICAgICAgb3B0aW9uc1xuICAgICkge1xuICAgICAgdmFyIGZpbmFsT3B0aW9ucyA9IE9iamVjdC5jcmVhdGUoYmFzZU9wdGlvbnMpO1xuICAgICAgdmFyIGVycm9ycyA9IFtdO1xuICAgICAgdmFyIHRpcHMgPSBbXTtcblxuICAgICAgdmFyIHdhcm4gPSBmdW5jdGlvbiAobXNnLCByYW5nZSwgdGlwKSB7XG4gICAgICAgICh0aXAgPyB0aXBzIDogZXJyb3JzKS5wdXNoKG1zZyk7XG4gICAgICB9O1xuXG4gICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBvcHRpb25zLm91dHB1dFNvdXJjZVJhbmdlKSB7XG4gICAgICAgICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgICAgICAgdmFyIGxlYWRpbmdTcGFjZUxlbmd0aCA9IHRlbXBsYXRlLm1hdGNoKC9eXFxzKi8pWzBdLmxlbmd0aDtcblxuICAgICAgICAgIHdhcm4gPSBmdW5jdGlvbiAobXNnLCByYW5nZSwgdGlwKSB7XG4gICAgICAgICAgICB2Y
118XIgZGF0YSA9IHsgbXNnOiBtc2cgfTtcbiAgICAgICAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICAgICAgICBpZiAocmFuZ2Uuc3RhcnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGRhdGEuc3RhcnQgPSByYW5nZS5zdGFydCArIGxlYWRpbmdTcGFjZUxlbmd0aDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAocmFuZ2UuZW5kICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBkYXRhLmVuZCA9IHJhbmdlLmVuZCArIGxlYWRpbmdTcGFjZUxlbmd0aDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKHRpcCA/IHRpcHMgOiBlcnJvcnMpLnB1c2goZGF0YSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBtZXJnZSBjdXN0b20gbW9kdWxlc1xuICAgICAgICBpZiAob3B0aW9ucy5tb2R1bGVzKSB7XG4gICAgICAgICAgZmluYWxPcHRpb25zLm1vZHVsZXMgPVxuICAgICAgICAgICAgKGJhc2VPcHRpb25zLm1vZHVsZXMgfHwgW10pLmNvbmNhdChvcHRpb25zLm1vZHVsZXMpO1xuICAgICAgICB9XG4gICAgICAgIC8vIG1lcmdlIGN1c3RvbSBkaXJlY3RpdmVzXG4gICAgICAgIGlmIChvcHRpb25zLmRpcmVjdGl2ZXMpIHtcbiAgICAgICAgICBmaW5hbE9wdGlvbnMuZGlyZWN0aXZlcyA9IGV4dGVuZChcbiAgICAgICAgICAgIE9iamVjdC5jcmVhdGUoYmFzZU9wdGlvbnMuZGlyZWN0aXZlcyB8fCBudWxsKSxcbiAgICAgICAgICAgIG9wdGlvbnMuZGlyZWN0aXZlc1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29weSBvdGhlciBvcHRpb25zXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgaWYgKGtleSAhPT0gJ21vZHVsZXMnICYmIGtleSAhPT0gJ2RpcmVjdGl2ZXMnKSB7XG4gICAgICAgICAgICBmaW5hbE9wdGlvbnNba2V5XSA9IG9wdGlvbnNba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZmluYWxPcHRpb25zLndhcm4gPSB3YXJuO1xuXG4gICAgICB2Y
118XIgY29tcGlsZWQgPSBiYXNlQ29tcGlsZSh0ZW1wbGF0ZS50cmltKCksIGZpbmFsT3B0aW9ucyk7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBkZXRlY3RFcnJvcnMoY29tcGlsZWQuYXN0LCB3YXJuKTtcbiAgICAgIH1cbiAgICAgIGNvbXBpbGVkLmVycm9ycyA9IGVycm9ycztcbiAgICAgIGNvbXBpbGVkLnRpcHMgPSB0aXBzO1xuICAgICAgcmV0dXJuIGNvbXBpbGVkXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbXBpbGU6IGNvbXBpbGUsXG4gICAgICBjb21waWxlVG9GdW5jdGlvbnM6IGNyZWF0ZUNvbXBpbGVUb0Z1bmN0aW9uRm4oY29tcGlsZSlcbiAgICB9XG4gIH1cbn1cblxuLyogICovXG5cbi8vIGBjcmVhdGVDb21waWxlckNyZWF0b3JgIGFsbG93cyBjcmVhdGluZyBjb21waWxlcnMgdGhhdCB1c2UgYWx0ZXJuYXRpdmVcbi8vIHBhcnNlci9vcHRpbWl6ZXIvY29kZWdlbiwgZS5nIHRoZSBTU1Igb3B0aW1pemluZyBjb21waWxlci5cbi8vIEhlcmUgd2UganVzdCBleHBvcnQgYSBkZWZhdWx0IGNvbXBpbGVyIHVzaW5nIHRoZSBkZWZhdWx0IHBhcnRzLlxudmFyIGNyZWF0ZUNvbXBpbGVyID0gY3JlYXRlQ29tcGlsZXJDcmVhdG9yKGZ1bmN0aW9uIGJhc2VDb21waWxlIChcbiAgdGVtcGxhdGUsXG4gIG9wdGlvbnNcbikge1xuICB2YXIgYXN0ID0gcGFyc2UodGVtcGxhdGUudHJpbSgpLCBvcHRpb25zKTtcbiAgaWYgKG9wdGlvbnMub3B0aW1pemUgIT09IGZhbHNlKSB7XG4gICAgb3B0aW1pemUoYXN0LCBvcHRpb25zKTtcbiAgfVxuICB2YXIgY29kZSA9IGdlbmVyYXRlKGFzdCwgb3B0aW9ucyk7XG4gIHJldHVybiB7XG4gICAgYXN0OiBhc3QsXG4gICAgcmVuZGVyOiBjb2RlLnJlbmRlcixcbiAgICBzdGF0aWNSZW5kZXJGbnM6IGNvZGUuc3RhdGljUmVuZGVyRm5zXG4gIH1cbn0pO1xuXG4vKiAgKi9cblxudmFyIHJlZiQxID0gY3JlYXRlQ29tcGlsZXIoYmFzZU9wdGlvbnMpO1xudmFyIGNvbXBpbGUgPSByZWYkMS5jb21waWxlO1xudmFyIGNvbXBpbGVUb0Z1bmN0aW9ucyA9IHJlZiQxLmNvbXBpbGVUb0Z1bmN0aW9ucztcblxuLyogICovXG5cbi8vIGNoZWNrIHdoZXRoZXIgY3VycmVudCBicm93c2VyIGVuY29kZXMgYSBjaGFyIGluc2lkZSBhdHRyaWJ1dGUgdmFsdWVzXG52YXIgZGl2O1xuZnVuY3Rpb24gZ2V0U2hvdWxkRGVjb2RlIChocmVmKSB7XG4gIGRpdiA9IGRpdiB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgZGl2LmlubmVySFRNTCA9IGhyZWYgPyBcIjxhIGhyZWY9XFxcIlxcblxcXCIvPlwiIDogXCI8ZGl2IGE9XFxcIlxcblxcXCIvPlwiO1xuICByZXR1cm4gZGl2LmlubmVySFRNTC5pbmRleE9mKCcmIzEwOycpID4gMFxufVxuXG4vLyAjMzY2MzogSUUgZW5jb2RlcyBuZXdsaW5lcyBpbnNpZGUgYXR0cmlidXRlIHZhbHVlcyB3aGlsZSBvdGhlciBicm93c2VycyBkb24ndFxudmFyIHNob3VsZERlY29kZU5ld2xpbmVzID0gaW5Ccm93c2VyID8gZ2V0U2hvdWxkRGVjb2RlKGZhbHNlKSA6IGZhbHNlO1xuLy8gIzY4Mjg6IGNocm9tZSBlbmNvZGVzIGNvbnRlbnQgaW4gYVtocmVmXVxudmFyIHNob3VsZERlY29kZU5ld2xpbmVzRm9ySHJlZiA9IGluQnJvd3NlciA/IGdldFNob3VsZERlY29kZSh0cnVlKSA6IGZhbHNlO1xuXG4vKiAgKi9cblxudmFyIGlkVG9UZW1wbGF0ZSA9IGNhY2hlZChmdW5jdGlvbiAoaWQpIHtcbiAgdmFyIGVsID0gcXVlcnkoaWQpO1xuICByZXR1cm4gZWwgJiYgZWwuaW5uZXJIVE1MXG59KTtcblxudmFyIG1vdW50ID0gVnVlLnByb3RvdHlwZS4kbW91bnQ7XG5WdWUucHJvdG90eXBlLiRtb3VudCA9IGZ1bmN0aW9uIChcbiAgZWwsXG4gIGh5ZHJhdGluZ1xuKSB7XG4gIGVsID0gZWwgJiYgcXVlcnkoZWwpO1xuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoZWwgPT09IGRvY3VtZW50LmJvZHkgfHwgZWwgPT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgIFwiRG8gbm90IG1vdW50IFZ1ZSB0byA8aHRtbD4gb3IgPGJvZHk+IC0gbW91bnQgdG8gbm9ybWFsIGVsZW1lbnRzIGluc3RlYWQuXCJcbiAgICApO1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICB2YXIgb3B0aW9ucyA9IHRoaXMuJG9wdGlvbnM7XG4gIC8vIHJlc29sdmUgdGVtcGxhdGUvZWwgYW5kIGNvbnZlcnQgdG8gcmVuZGVyIGZ1bmN0aW9uXG4gIGlmICghb3B0aW9ucy5yZW5kZXIpIHtcbiAgICB2YXIgdGVtcGxhdGUgPSBvcHRpb25zLnRlbXBsYXRlO1xuICAgIGlmICh0ZW1wbGF0ZSkge1xuICAgICAgaWYgKHR5cGVvZiB0ZW1wbGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHRlbXBsYXRlLmNoYXJBdCgwKSA9PT0gJyMnKSB7XG4gICAgICAgICAgdGVtcGxhdGUgPSBpZFRvVGVtcGxhdGUodGVtcGxhdGUpO1xuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICF0ZW1wbGF0ZSkge1xuICAgICAgICAgICAgd2FybihcbiAgICAgICAgICAgICAgKFwiVGVtcGxhdGUgZWxlbWVudCBub3QgZm91bmQgb3IgaXMgZW1wdHk6IFwiICsgKG9wdGlvbnMudGVtcGxhdGUpKSxcbiAgICAgICAgICAgICAgdGhpc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGVtcGxhdGUubm9kZVR5cGUpIHtcbiAgICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZS5pbm5lckhUTUw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIHdhcm4oJ2ludmFsaWQgdGVtcGxhdGUgb3B0aW9uOicgKyB0ZW1wbGF0ZSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXNcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGVsKSB7XG4gICAgICB0ZW1wbGF0ZSA9IGdldE91dGVySFRNTChlbCk7XG4gICAgfVxuICAgIGlmICh0ZW1wbGF0ZSkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBjb25maWcucGVyZm9ybWFuY2UgJiYgbWFyaykge1xuICAgICAgICBtYXJrKCdjb21waWxlJyk7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWYgPSBjb21waWxlVG9GdW5jdGlvbnModGVt
118cGxhdGUsIHtcbiAgICAgICAgb3V0cHV0U291cmNlUmFuZ2U6IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicsXG4gICAgICAgIHNob3VsZERlY29kZU5ld2xpbmVzOiBzaG91bGREZWNvZGVOZXdsaW5lcyxcbiAgICAgICAgc2hvdWxkRGVjb2RlTmV3bGluZXNGb3JIcmVmOiBzaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWYsXG4gICAgICAgIGRlbGltaXRlcnM6IG9wdGlvbnMuZGVsaW1pdGVycyxcbiAgICAgICAgY29tbWVudHM6IG9wdGlvbnMuY29tbWVudHNcbiAgICAgIH0sIHRoaXMpO1xuICAgICAgdmFyIHJlbmRlciA9IHJlZi5yZW5kZXI7XG4gICAgICB2YXIgc3RhdGljUmVuZGVyRm5zID0gcmVmLnN0YXRpY1JlbmRlckZucztcbiAgICAgIG9wdGlvbnMucmVuZGVyID0gcmVuZGVyO1xuICAgICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBzdGF0aWNSZW5kZXJGbnM7XG5cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICAgICAgbWFyaygnY29tcGlsZSBlbmQnKTtcbiAgICAgICAgbWVhc3VyZSgoXCJ2dWUgXCIgKyAodGhpcy5fbmFtZSkgKyBcIiBjb21waWxlXCIpLCAnY29tcGlsZScsICdjb21waWxlIGVuZCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbW91bnQuY2FsbCh0aGlzLCBlbCwgaHlkcmF0aW5nKVxufTtcblxuLyoqXG4gKiBHZXQgb3V0ZXJIVE1MIG9mIGVsZW1lbnRzLCB0YWtpbmcgY2FyZVxuICogb2YgU1ZHIGVsZW1lbnRzIGluIElFIGFzIHdlbGwuXG4gKi9cbmZ1bmN0aW9uIGdldE91dGVySFRNTCAoZWwpIHtcbiAgaWYgKGVsLm91dGVySFRNTCkge1xuICAgIHJldHVybiBlbC5vdXRlckhUTUxcbiAgfSBlbHNlIHtcbiAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGVsLmNsb25lTm9kZSh0cnVlKSk7XG4gICAgcmV0dXJuIGNvbnRhaW5lci5pbm5lckhUTUxcbiAgfVxufVxuXG5WdWUuY29tcGlsZSA9IGNvbXBpbGVUb0Z1bmN0aW9ucztcblxuZXhwb3J0IGRlZmF1bHQgVnVlO1xuIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJjb250ZW50Y2F0ZWdvcnlmaWx0ZXIgbXctMTI4MCBteC1hdXRvXCIgfSwgW1xuICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiaXNvdG9wZSBtdC00XCIgfSwgW1xuICAgICAgX2MoXG4gICAgICAgIFwibmF2XCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJpc290b3BlLWZpbHRlciB0ZXh0LWNlbnRlciBteS0zXCIsXG4gICAgICAgICAgYXR0cnM6IHsgcm9sZTogXCJuYXZpZ2F0aW9uXCIgfSxcbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiYnRuLWdyb3VwLXRvZ2dsZVwiIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgIFwibGFiZWxcIixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczpcbiAgICAgICAgICAgICAgICAgICAgXCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLWRhcmsgcm91bmRlZC1waWxsIHRleHQtdXBwZXJjYXNlIG1iLTJcIixcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiB7IGFjdGl2ZTogX3ZtLmlzTm9uZUNhdGVnb3JpZXNTZWxlY3RlZCB9LFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgdGFiaW5kZXg6IFwiMFwiIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImNoZWNrYm94XCIsXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJmaWx0ZXJEZXNrdG9wXCIsXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uc2VsZWN0QWxsIH0sXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0uZGF0YUxhYmVsLmFsbExhYmVsKSArXG4gICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX3ZtLl9sKF92bS5kYXRhQ29uZmlnLmNhdGVnb3JpZXMsIGZ1bmN0aW9uIChjYXRlZ29yeSwgaW5kZXgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICAgICAgICBcImxhYmVsXCIsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGtleTogaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOlxuICAgICAgICAgICAgICAgICAgICAgIFwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1kYXJrIHJvdW5kZWQtcGlsbCB0ZXh0LXVwcGVyY2FzZSBteC0xIG1iLTJcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICBhY3RpdmU6IF92bS5zZWxlY3RlZENhdGVnb3JpZXMuaW5jbHVkZXMoY2F0ZWdvcnkudmFsdWUpLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB0YWJpbmRleDogXCIwXCIsIFwiYXJpYS1jb250cm9sc1wiOiBcImlzb3RvcGUtZ3JpZFwiIH0sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwibW9kZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgI
118HZhbHVlOiBfdm0uc2VsZWN0ZWRDYXRlZ29yaWVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInNlbGVjdGVkQ2F0ZWdvcmllc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImNoZWNrYm94XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcImZpbHRlckRlc2t0b3BcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZGRlbjogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBjYXRlZ29yeS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY2F0ZWdvcnkudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkOiBBcnJheS5pc0FycmF5KF92bS5zZWxlY3RlZENhdGVnb3JpZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gX3ZtLl9pKF92bS5zZWxlY3RlZENhdGVnb3JpZXMsIGNhdGVnb3J5LnZhbHVlKSA+IC0xXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLnNlbGVjdGVkQ2F0ZWdvcmllcyxcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2U6IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyICQkYSA9IF92bS5zZWxlY3RlZENhdGVnb3JpZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCRlbCA9ICRldmVudC50YXJnZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCRjID0gJCRlbC5jaGVja2VkID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KCQkYSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Y
118XIgJCR2ID0gY2F0ZWdvcnkudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJGkgPSBfdm0uX2koJCRhLCAkJHYpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQkZWwuY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCRpIDwgMCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX3ZtLnNlbGVjdGVkQ2F0ZWdvcmllcyA9ICQkYS5jb25jYXQoWyQkdl0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJGkgPiAtMSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX3ZtLnNlbGVjdGVkQ2F0ZWdvcmllcyA9ICQkYVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zbGljZSgwLCAkJGkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdCgkJGEuc2xpY2UoJCRpICsgMSkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uc2VsZWN0ZWRDYXRlZ29yaWVzID0gJCRjXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICBcIiArIF92bS5fcyhjYXRlZ29yeS50ZXh0KSArIFwiXFxuICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMlxuICAgICAgICAgICksXG4gICAgICAgIF1cbiAgICAgICksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHtcbiAgICAgICAgICByZWY6IFwiaXNvdG9wZUdyaWRcIixcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJpc290b3BlLWdyaWQgY2xlYXJmaXhcIixcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgXCJhcmlhLWxpdmVcIjogXCJwb2xpdGVcIixcbiAgICAgICAgICAgIFwiYXJpYS1hdG9taWNcIjogXCJ0cnVlXCIsXG4gICAgICAgICAgICByb2xlOiBcInJlZ2lvblwiLFxuICAgICAgICAgICAgaWQ6IFwiaXNvdG9wZS1ncmlkXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiaXNvdG9wZS1zaXplciB3LWxnLTMzIHctbWQtNTAgdy0xMDBcIiB9KSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF92bS5fbChfdm0uZGF0YUNvbmZpZy50ZWFzZXJzLCBmdW5jdGlvbiAodGVhc2VyLCBpbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAga2V5OiBpbmRleCxcbiAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJpc290b3BlLWl0ZW1cIixcbiAgICAgICAgICAgICAgICBjbGFzczogW1xuICAgICAgICAgICAgICAgICAgX3ZtLmdldENsYXNzRnJvbVRlYXNlckNhdGVnb3JpZXModGVhc2VyLmNhdGVnb3JpZXMpLFxuICAgICAgICAgICAgICAgICAgX3ZtLnRlYXNlcldpZHRoW3RlYXNlci50ZWFzZXJXaWR0aF0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgXCJhcnRpY2xlXCIsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImNhcmQgY2FyZC16b29tLWltYWdlIG0tMyBvdmVyZmxvdy1oaWRkZW5cIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFtfdm0uaW1hZ2VBbGlnbm1lbnRzW3RlYXNlci5pbWFnZUFsaWdubWVudF1dLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgdGVhc2VyLmltYWdlU291cmNlICYmICF0ZWFzZXIudGVhc2VyTWVkaWFcbiAgICAgICAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNhcmQtaW1hZ2UgcG9zaXRpb24tcmVsYXRpdmUgb3ZlcmZsb3ctaGlkZGVuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5nZXRDbGFzc0hXKHRlYXNlci5pbWFnZUFsaWdubWVudCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcImltZ1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJ3LTEwMCBoLTEwMCBmaXQtY292ZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzogdGVhc2VyLmltYWdlU291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ6IHRlYXNlci50aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGluZzogXCJsYXp5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgdGVhc2VyLnRlYXNlck1lZGlhXG4gICAgICAgICAgICAgICAgICAgICAgPyBfYyhcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgI
118HN0YXRpY0NsYXNzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY2FyZC1tZWRpYSBwb3NpdGlvbi1yZWxhdGl2ZSBvdmVyZmxvdy1oaWRkZW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uZ2V0Q2xhc3NIVyh0ZWFzZXIuaW1hZ2VBbGlnbm1lbnQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5nZXRDbGFzc01lZGlhUmF0aW8odGVhc2VyLnRlYXNlck1lZGlhUmF0aW8pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczogeyBpbm5lckhUTUw6IF92bS5fcyh0ZWFzZXIudGVhc2VyTWVkaWEpIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICF0ZWFzZXIuc2hvd09ubHlNZWRpYVxuICAgICAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJjYXJkLWJvZHlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnRoZW1lc1t0ZWFzZXIudGhlbWVdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmdldENsYXNzSFcodGVhc2VyLmltYWdlQWxpZ25tZW50KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVhc2VyLmxhYmVsTmV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwic3BhblwiLCB7IHN0YXRpY0NsYXNzOiBcIm5ldy1hcnRpY2xlXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgICAgICBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0uZGF0YUxhYmVsLm5ld0xhYmVsKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS50ZWFzZXJIYXNDYXRlZ29yaWVzKHRlYXNlcikgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0udGVhc2VySGFzTWludXRlc1RvUmVhZExhYmVsKHRlYXNlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJ0YWdcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0ZWFzZXIuY2F0ZWdvcmllcyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZWFzZXIuY2F0ZWdvcmllcy5sZW5ndGggPiAwKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVhc2VyLm1pbnV0ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfYyhcImlcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiaWNvbi1jaGV2cm9uIGlzLXJpZ2h0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX2woXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlYXNlci5jYXRlZ29yaWVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoY2F0ZWdvcnksIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN0cm9uZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNhdGVnb3J5IHRleHQtdXBwZXJjYXNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKGNhdGVnb3J5LnRleHQpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhX3ZtLmlzTGFzdENhdGVnb3J5RWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVhc2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfYyhcInNwYW5cIiwgW192bS5fdihcInxcIildKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uaXNMYXN0Q2F0ZWdvcnlFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVhc2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0udGVhc2VySGFzTWludXRlc1RvUmVhZExhYmVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZWFzZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfYyhcInNwYW5cIiwgW192bS5fdihcInxcIildKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZWFzZXIubWludXRlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
118HN0YXRpY0NsYXNzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicmVhZC10aW1lIHRleHQtbm93cmFwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKHRlYXNlci5taW51dGVzKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICAgICAgICBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5kYXRhTGFiZWwucmVhZFRpbWVMYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcInN0cm9uZ1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczogeyBpbm5lckhUTUw6IF92bS5fcyh0ZWFzZXIudGl0bGUpIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFydGljbGVQdWJsaXNoZWREYXRlIGhpZGUtZWxlbWVudFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKHRlYXNlci5hcnRpY2xlUHVibGlzaGVkRGF0ZSkpXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcInNwYW5cIiwgeyBzdGF0aWNDbGFzczogXCJ0aXRsZS1hcnJvd1wiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN2Z1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94OiBcIjAgMCAyMCAyMFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzYWJsZTogXCJmYWxzZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcInBhdGhcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZDogXCJNNyAzLjI5MUw2LjI5MSA0bC4zNTUuMzU0TDEyLjI5MSAxMGwtNS42NDUgNS42NDYtLjM1NS4zNTQuNzA5LjcwOS4zNTQtLjM1NUwxMy43MDkgMTAgNy4zNTQgMy42NDZ6XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJwXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVySFRNTDogX3ZtLl9zKHRlYXNlci5kZXNjcmlwdGlvbiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgIXRlYXNlci5yZW1vdmVPdmVybGF5TGlua0luVmlkZW9UZWFzZXJcbiAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwiYVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgI
118HN0YXRpY0NsYXNzOiBcIm92ZXJsYXktbGlua1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBocmVmOiB0ZWFzZXIubGluayB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczogeyBpbm5lckhUTUw6IF92bS5fcyh0ZWFzZXIudGl0bGUpIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pLFxuICAgICAgICBdLFxuICAgICAgICAyXG4gICAgICApLFxuICAgIF0pLFxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsIjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cImNvbnRlbnRjYXRlZ29yeWZpbHRlciBtdy0xMjgwIG14LWF1dG9cIj5cbiAgICA8ZGl2IGNsYXNzPVwiaXNvdG9wZSBtdC00XCI+XG4gICAgICA8IS0tXG4gICAgICBJc290b3BlIC0gRmlsdGVyXG4gICAgICAtLT5cbiAgICAgIDxuYXYgcm9sZT1cIm5hdmlnYXRpb25cIiBjbGFzcz1cImlzb3RvcGUtZmlsdGVyIHRleHQtY2VudGVyIG15LTNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cC10b2dnbGVcIj5cbiAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwieydhY3RpdmUnOiBpc05vbmVDYXRlZ29yaWVzU2VsZWN0ZWR9XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLWRhcmsgcm91bmRlZC1waWxsIHRleHQtdXBwZXJjYXNlIG1iLTJcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiZmlsdGVyRGVza3RvcFwiIEBjbGljaz1cInNlbGVjdEFsbFwiIHZhbHVlIC8+XG4gICAgICAgICAgICB7e2RhdGFMYWJlbC5hbGxMYWJlbH19XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgdi1mb3I9XCIoY2F0ZWdvcnksIGluZGV4KSBpbiBkYXRhQ29uZmlnLmNhdGVnb3JpZXNcIlxuICAgICAgICAgICAgICA6a2V5PVwiaW5kZXhcIlxuICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJ7J2FjdGl2ZSc6IHNlbGVjdGVkQ2F0ZWdvcmllcy5pbmNsdWRlcyhjYXRlZ29yeS52YWx1ZSl9XCJcbiAgICAgICAgICAgICAgYXJpYS1jb250cm9scz1cImlzb3RvcGUtZ3JpZFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1kYXJrIHJvdW5kZWQtcGlsbCB0ZXh0LXVwcGVyY2FzZSBteC0xIG1iLTJcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgbmFtZT1cImZpbHRlckRlc2t0b3BcIlxuICAgICAgICAgICAgICAgIGhpZGRlblxuICAgICAgICAgICAgICAgIDp2YWx1ZT1cImNhdGVnb3J5LnZhbHVlXCJcbiAgICAgICAgICAgICAgICA6aWQ9XCJjYXRlZ29yeS52YWx1ZVwiXG4gICAgICAgICAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkQ2F0ZWdvcmllc1wiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAge3tjYXRlZ29yeS50ZXh0fX1cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmF2PlxuXG4gICAgICA8IS0tIElzb3RvcGUgLSBHcmlkIC0tPlxuICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiaXNvdG9wZS1ncmlkIGNsZWFyZml4XCJcbiAgICAgICAgICByZWY9XCJpc290b3BlR3JpZFwiXG4gICAgICAgICAgYXJpYS1saXZlPVwicG9saXRlXCJcbiAgICAgICAgICBhcmlhLWF0b21pYz1cInRydWVcIlxuICAgICAgICAgIHJvbGU9XCJyZWdpb25cIlxuICAgICAgICAgIGlkPVwiaXNvdG9wZS1ncmlkXCJcbiAgICAgID5cbiAgICAgICAgPCEtLSBJc290b3BlIC0gU2l6ZXIgKE1hc29ucnkgbmVlZCB0aGlzIGZvciByZXNwb25zaXZlIHdlYiBkZXNpZ24pIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaXNvdG9wZS1zaXplciB3LWxnLTMzIHctbWQtNTAgdy0xMDBcIj48L2Rpdj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICB2LWZvcj1cIih0ZWFzZXIsIGluZGV4KSBpbiBkYXRhQ29uZmlnLnRlYXNlcnNcIlxuICAgICAgICAgICAgOmtleT1cImluZGV4XCJcbiAgICAgICAgICAgIGNsYXNzPVwiaXNvdG9wZS1pdGVtXCJcbiAgICAgICAgICAgIDpjbGFzcz1cIltnZXRDbGFzc0Zyb21UZWFzZXJDYXRlZ29yaWVzKHRlYXNlci5jYXRlZ29yaWVzKSx0ZWFzZXJXaWR0aFt0ZWFzZXIudGVhc2VyV2lkdGhdXVwiXG4gICAgICAgID5cbiAgICAgICAgICA8YXJ0aWNsZVxuICAgICAgICAgICAgICBjbGFzcz1cImNhcmQgY2FyZC16b29tLWltYWdlIG0tMyBvdmVyZmxvdy1oaWRkZW5cIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJbaW1hZ2VBbGlnbm1lbnRzW3RlYXNlci5pbWFnZUFsaWdubWVudF1dXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8IS0tIFNob3cgaW1hZ2Ugd2hlbiBubyB0ZWFzZXIgbWVkaWEgaXMgZGVmaW5lZCAtLT5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNhcmQtaW1hZ2UgcG9zaXRpb24tcmVsYXRpdmUgb3ZlcmZsb3ctaGlkZGVuXCJcbiAgICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRDbGFzc0hXKHRlYXNlci5pbWFnZUFsaWdubWVudClcIlxuICAgICAgICAgICAgICAgIHYtaWY9XCJ0ZWFzZXIuaW1hZ2VTb3VyY2UgJiYgIXRlYXNlci50ZWFzZXJNZWRpYVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpbWcgOnNyYz1cInRlYXNlci5pbWFnZVNvdXJjZVwiIDphbHQ9XCJ0ZWFzZXIudGl0bGVcIiBjbGFzcz1cInctMTAwIGgtMTAwIGZpdC1jb3ZlclwiIGxvYWRpbmc9XCJsYXp5XCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLSBTaG93IHRlYXNlciBtZWRpYSB3aGVuIGl0J3MgZGVmaW5lZCAtLT5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNhcmQtbWVkaWEgcG9zaXRpb24tcmVsYXRpdmUgb3ZlcmZsb3ctaGlkZGVuXCJcbiAgICAgICAgICAgICAgICA6Y2xhc3M9XCJbZ2V0Q2xhc3NIVyh0ZWFzZXIuaW1hZ2VBbGlnbm1lbnQpLCBnZXRDbGFzc01lZGlhUmF0aW8odGVhc2VyLnRlYXNlck1lZGlhUmF0aW8pXVwiXG4gICAgICAgICAgICAgICAgdi1pZj1cInRlYXNlci50ZWFzZXJNZWRpYVwiXG4gICAgICAgICAgICAgICAgdi1odG1sPVwidGVhc2VyLnRlYXNlck1lZGlhXCI+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiXG4gICAgICAgICAgICAgICAgIDpjbGFzcz1cIlt0aGVtZXNbdGVhc2VyLnRoZW1lXSwgZ2V0Q2xhc3NIVyh0ZWFzZXIuaW1hZ2VBbGlnbm1lbnQpXVwiXG4gICAgICAgICAgICAgICAgI
118HYtaWY9XCIhdGVhc2VyLnNob3dPbmx5TWVkaWFcIj5cbiAgICAgICAgICAgICAgPHNwYW4gdi1pZj1cInRlYXNlci5sYWJlbE5ld1wiIGNsYXNzPVwibmV3LWFydGljbGVcIj5cbiAgICAgICAgICAgICAgICB7eyBkYXRhTGFiZWwubmV3TGFiZWwgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwidGVhc2VySGFzQ2F0ZWdvcmllcyh0ZWFzZXIpIHx8IHRlYXNlckhhc01pbnV0ZXNUb1JlYWRMYWJlbCh0ZWFzZXIpXCIgY2xhc3M9XCJ0YWdcIj5cbiAgICAgICAgICAgICAgICA8aSB2LWlmPVwidGVhc2VyLmNhdGVnb3JpZXMgJiYgdGVhc2VyLmNhdGVnb3JpZXMubGVuZ3RoID4gMCB8fCB0ZWFzZXIubWludXRlc1wiIGNsYXNzPVwiaWNvbi1jaGV2cm9uIGlzLXJpZ2h0XCI+PC9pPlxuICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWZvcj1cIihjYXRlZ29yeSxpbmRleCkgaW4gdGVhc2VyLmNhdGVnb3JpZXNcIj5cbiAgICAgICAgICAgICAgICAgIDxzdHJvbmcgY2xhc3M9XCJjYXRlZ29yeSB0ZXh0LXVwcGVyY2FzZVwiPnt7Y2F0ZWdvcnkudGV4dH19PHNwYW4gdi1pZj1cIiFpc0xhc3RDYXRlZ29yeUVsZW1lbnQoaW5kZXgsIHRlYXNlcilcIj58PC9zcGFuPjwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gdi1pZj1cImlzTGFzdENhdGVnb3J5RWxlbWVudChpbmRleCwgdGVhc2VyKSAmJiB0ZWFzZXJIYXNNaW51dGVzVG9SZWFkTGFiZWwodGVhc2VyKVwiPnw8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwidGVhc2VyLm1pbnV0ZXNcIiBjbGFzcz1cInJlYWQtdGltZSB0ZXh0LW5vd3JhcFwiPlxuICAgICAgICAgICAgICAgICAge3sgdGVhc2VyLm1pbnV0ZXMgfX1cbiAgICAgICAgICAgICAgICAgIHt7IGRhdGFMYWJlbC5yZWFkVGltZUxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzdHJvbmcgdi1odG1sPVwidGVhc2VyLnRpdGxlXCI+PC9zdHJvbmc+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJ0aWNsZVB1Ymxpc2hlZERhdGUgaGlkZS1lbGVtZW50XCI+e3t0ZWFzZXIuYXJ0aWNsZVB1Ymxpc2hlZERhdGV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXRsZS1hcnJvd1wiPlxuICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBmb2N1c2FibGU9XCJmYWxzZVwiPlxuICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk03IDMuMjkxTDYuMjkxIDRsLjM1NS4zNTRMMTIuMjkxIDEwbC01LjY0NSA1LjY0Ni0uMzU1LjM1NC43MDkuNzA5LjM1NC0uMzU1TDEzLjcwOSAxMCA3LjM1NCAzLjY0NnpcIi8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHAgdi1odG1sPVwidGVhc2VyLmRlc2NyaXB0aW9uXCI+PC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YSB2LWlmPVwiIXRlYXNlci5yZW1vdmVPdmVybGF5TGlua0luVmlkZW9UZWFzZXJcIiB2LWh0bWw9XCJ0ZWFzZXIudGl0bGVcIiA6aHJlZj1cInRlYXNlci5saW5rXCIgY2xhc3M9XCJvdmVybGF5LWxpbmtcIj5cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8L2FydGljbGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8IS0tIC8gLmlzb3RvcGUtZ3JpZCAtLT5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIC8gLmlzb3RvcGUgLS0+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBJc290b3BlIGZyb20gJ2lzb3RvcGUtbGF5b3V0J1xuaW1wb3J0IGltYWdlc0xvYWRlZCBmcm9tICdpbWFnZXNsb2FkZWQnXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnVnVlSXNvdG9wZScsXG4gIHByb3BzOiB7XG4gICAgZGF0YUNvbmZpZzoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDoge31cbiAgICB9LFxuICAgIGRhdGFMYWJlbDoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDoge31cbiAgICB9XG4gIH0sXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzbzogbnVsbCxcbiAgICAgIHRoZW1lczoge1xuICAgICAgICBzYW5kR3JleTogJ2JnLXNhbmQtZ3JleScsXG4gICAgICAgIGdyYW5pdGVHcmV5OiAnYmctZ3Jhbml0ZS1ncmV5JyxcbiAgICAgICAgbGlnaHRCbHVlOiAnYmctbGlnaHQtYmx1ZScsXG4gICAgICAgIG9jZWFuR3JlZW46ICdiZy1vY2Vhbi1ncmVlbicsXG4gICAgICAgIHJvc2VQaW5rOiAnYmctcm9zZS1waW5rJyxcbiAgICAgICAgc2VhQmx1ZTogJ2JnLXNlYS1ibHVlJ1xuICAgICAgfSxcbiAgICAgIGltYWdlQWxpZ25tZW50czoge1xuICAgICAgICBsZWZ0OiAnZC1mbGV4IGFsaWduLWl0ZW1zLXN0cmV0Y2ggZmxleC1yb3cnLFxuICAgICAgICB0b3A6ICdkLWZsZXggYWxpZ24taXRlbXMtc3RyZXRjaCBmbGV4LWNvbHVtbicsXG4gICAgICAgIHJpZ2h0OiAnZC1mbGV4IGFsaWduLWl0ZW1zLXN0cmV0Y2ggZmxleC1yb3ctcmV2ZXJzZScsXG4gICAgICAgIGJvdHRvbTogJ2QtZmxleCBhbGlnbi1pdGVtcy1zdHJldGNoIGZsZXgtY29sdW1uLXJldmVyc2UnXG4gICAgICB9LFxuICAgICAgdGVhc2VyV2lkdGg6IHtcbiAgICAgICAgbm9ybWFsOiAndy1sZy0zMyB3LW1kLTUwIHctMTAwJyxcbiAgICAgICAgd2lkZTogJ3ctbGctNjcgdy0xMDAnXG4gICAgICB9LFxuICAgICAgc2VsZWN0ZWRDYXRlZ29yaWVzOiBbXVxuICAgIH1cbiAgfSxcbiAgd2F0Y2g6IHtcbiAgICBzZWxlY3RlZENhdGVnb3JpZXMoKSB7XG4gICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZENhdGVnb3JpZXMubGVuZ3RoICE9PSAwICYmXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZENhdGVnb3JpZXMubGVuZ3RoICE9PSB0aGlzLmRhdGFDb25maWcuY2F0ZWdvcmllcy5sZW5ndGhcbiAgICAgICkge1xuICAgICAgICB0aGlzLm9uRmlsdGVyKH
118RoaXMuc2VsZWN0ZWRDYXRlZ29yaWVzKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vbkZpbHRlcigpXG4gICAgICB9XG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIGlzTm9uZUNhdGVnb3JpZXNTZWxlY3RlZCAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZENhdGVnb3JpZXMubGVuZ3RoID09PSAwXG4gICAgfVxuICB9LFxuICBtb3VudGVkICgpIHtcbiAgICBjb25zdCBxdWVyeUZpbHRlcnMgPSB0aGlzLiRyb3V0ZS5xdWVyeS5maWx0ZXJzXG4gICAgaWYgKHF1ZXJ5RmlsdGVycykge1xuICAgICAgdGhpcy5zZWxlY3RlZENhdGVnb3JpZXMgPSBxdWVyeUZpbHRlcnMuc3BsaXQoJywnKVxuICAgIH1cblxuICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgIHRoaXMuaXNvID0gbmV3IElzb3RvcGUodGhpcy4kcmVmc1snaXNvdG9wZUdyaWQnXSwge1xuICAgICAgICBpdGVtU2VsZWN0b3I6ICcuaXNvdG9wZS1pdGVtJyxcbiAgICAgICAgbGF5b3V0TW9kZTogJ2ZpdFJvd3MnLFxuICAgICAgICBnZXRTb3J0RGF0YToge1xuICAgICAgICAgIGRhdGU6ICcuYXJ0aWNsZVB1Ymxpc2hlZERhdGUnXG4gICAgICAgIH0sXG4gICAgICAgIHNvcnRCeTogdGhpcy5kYXRhQ29uZmlnLnNvcnRCeURhdGUgPyBbJ2RhdGUnLCAnb3JpZ2luYWwtb3JkZXInXSA6ICdvcmlnaW5hbC1vcmRlcicsXG4gICAgICAgIHNvcnRBc2NlbmRpbmc6IHtcbiAgICAgICAgICBkYXRlOiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaW1hZ2VzTG9hZGVkKCB0aGlzLiRyZWZzWydpc290b3BlR3JpZCddIClcbiAgICAgICAgICAub24oICdwcm9ncmVzcycsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgLy8gbGF5b3V0IElzb3RvcGUgYWZ0ZXIgZWFjaCBpbWFnZSBsb2Fkc1xuICAgICAgICAgICAgdGhpcy5pc28ubGF5b3V0KClcbiAgICAgICAgICB9LmJpbmQodGhpcykpXG4gICAgfSlcbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIG9uRmlsdGVyIChmaWx0ZXJzKSB7XG4gICAgICBsZXQgZmlsdGVyc1NlbGVjdG9yID0gWycqJ10gLy8gRGVmYXVsdCBzZWxlY3RvclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVycykpIHtcbiAgICAgICAgLy8gTWFwIGFycmF5IG9mIGZpbHRlcnMgdG8gbmV3IGFycmF5IGFzIENTUyBjbGFzcy1zZWxlY3RvciBieSBwcmVmaXggd2lkdGggJy4nXG4gICAgICAgIGZpbHRlcnNTZWxlY3RvciA9IGZpbHRlcnMubWFwKGZpbHRlciA9PiB7XG4gICAgICAgICAgaWYgKGZpbHRlcikge1xuICAgICAgICAgICAgcmV0dXJuICcuJyArIGZpbHRlclxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICBpZiAoZmlsdGVyc1NlbGVjdG9yLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgIHRoaXMuaXNvLmFycmFuZ2UoeyBmaWx0ZXI6IGZpbHRlcnNTZWxlY3Rvci5qb2luKCkgfSlcbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7XG4gICAgICAgICAgICBxdWVyeTogeyBmaWx0ZXJzOiBbZmlsdGVyc10sIHdjbW1vZGU6IHRoaXMuJHJvdXRlLnF1ZXJ5LndjbW1vZGUgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcbiAgICBnZXRDbGFzc0hXIChpbWFnZUFsaWdubWVudCkge1xuICAgICAgaWYgKGltYWdlQWxpZ25tZW50ID09PSAnbGVmdCcgfHwgaW1hZ2VBbGlnbm1lbnQgPT09ICdyaWdodCcpIHtcbiAgICAgICAgLy8gV2hlbiBhbiBpbWFnZSBpcyBhbGlnbmVkIGxlZnQgb3IgcmlnaHQsIHNldCB3aWR0aCB0byA1MCUgZm9yIGltYWdlIGFuZCBjb250ZW50XG4gICAgICAgIHJldHVybiAndy01MCdcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFdoZW4gYW4gaW1hZ2UgaXMgYWxpZ25lZCB0b3Agb3IgYm90dG9tLCBzZXQgaGVpZ2h0IHRvIDUwJSBmb3IgaW1hZ2UgYW5kIGNvbnRlbnRcbiAgICAgICAgcmV0dXJuICdoLTUwJ1xuICAgICAgfVxuICAgIH0sXG4gICAgZ2V0Q2xhc3NNZWRpYVJhdGlvIChtZWRpYVJhdGlvKSB7XG4gICAgICBsZXQgbWVkaWFSYXRpb3MgPSB7XG4gICAgICAgICcxNjo5JyA6ICdyYXRpby1zaXh0ZWVubmluZScsXG4gICAgICAgICc0OjMnIDogJ3JhdGlvLWZvdXJ0aHJlZSdcbiAgICAgIH07XG4gICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICBpZiAoT2JqZWN0LmtleXMobWVkaWFSYXRpb3MpLmluY2x1ZGVzKG1lZGlhUmF0aW8pKSB7XG4gICAgICAgIHJlc3VsdCA9IG1lZGlhUmF0aW9zW21lZGlhUmF0aW9dO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG4gICAgc2VsZWN0QWxsICgpIHtcbiAgICAgIGlmICh0aGlzLmlzTm9uZUNhdGVnb3JpZXNTZWxlY3RlZCkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0ZWRDYXRlZ29yaWVzID0gW11cbiAgICB9LFxuICAgIGdldENsYXNzRnJvbVRlYXNlckNhdGVnb3JpZXMgKGNhdGVnb3JpZXMpe1xuICAgICAgaWYoIWNhdGVnb3JpZXMpIHJldHVybiAnJztcbiAgICAgIHJldHVybiBjYXRlZ29yaWVzLnJlZHVjZSgoYWNjLCBjYXRlZ29yeSkgPT4ge1xuICAgICAgICByZXR1cm4gYCR7YWNjfSAke2NhdGVnb3J5LnZhbHVlfWA7XG4gICAgICB9LCcnKTtcbiAgICB9LFxuICAgIHRlYXNlckhhc0NhdGVnb3JpZXModGVhc2VyKSB7XG4gICAgICByZXR1cm4gKHRlYXNlci5jYXRlZ29yaWVzKTtcbiAgICB9LFxuICAgIHRlYXNlckhhc01pbnV0ZXNUb1JlYWRMYWJlbCh0ZWFzZXIpIHtcbiAgICAgIHJldHVybiAodGVhc2VyLm1pbnV0ZXMpXG4gICAgfSxcbiAgICBpc0xhc3RDYXRlZ29yeUVsZW1lbnQoaW5kZXgsdGVhc2VyKSB7XG4gICAgICByZXR1cm4gaW5kZXggPT09IHRlYXNlci5jYXRlZ29yaWVzLmxlbmd0aCAtIDE7XG4gICAgfVxuICB9XG59XG5cbjwvc2NyaXB0PiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vY29udGVudGNhdGVnb3J5ZmlsdGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yOTYxYjhkYSZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9jb250ZW50Y2F0ZWdvcnlmaWx0ZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9jb250ZW50Y2F0ZWdvcnlmaWx0ZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpem
118VyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvYnVpbGRfcm9vdC9idWlsZC9leHR3ZWItcGVwLWNvbW1vbi9leHR3ZWItdHJ1dGgtYWJvdXQtd2VpZ2h0L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzI5NjFiOGRhJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzI5NjFiOGRhJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzI5NjFiOGRhJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9jb250ZW50Y2F0ZWdvcnlmaWx0ZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI5NjFiOGRhJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzI5NjFiOGRhJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJ0YXctZnJvbnRlbmQvdWktdGhlbWUvdWktY3MvanMvY29tcG9uZW50cy9jb250ZW50Y2F0ZWdvcnlmaWx0ZXIudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiLyogZ2xvYmFscyBfX1ZVRV9TU1JfQ09OVEVYVF9fICovXG5cbi8vIElNUE9SVEFOVDogRG8gTk9UIHVzZSBFUzIwMTUgZmVhdHVyZXMgaW4gdGhpcyBmaWxlIChleGNlcHQgZm9yIG1vZHVsZXMpLlxuLy8gVGhpcyBtb2R1bGUgaXMgYSBydW50aW1lIHV0aWxpdHkgZm9yIGNsZWFuZXIgY29tcG9uZW50IG1vZHVsZSBvdXRwdXQgYW5kIHdpbGxcbi8vIGJlIGluY2x1ZGVkIGluIHRoZSBmaW5hbCB3ZWJwYWNrIHVzZXIgYnVuZGxlLlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBub3JtYWxpemVDb21wb25lbnQgKFxuICBzY3JpcHRFeHBvcnRzLFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZnVuY3Rpb25hbFRlbXBsYXRlLFxuICBpbmplY3RTdHlsZXMsXG4gIHNjb3BlSWQsXG4gIG1vZHVsZUlkZW50aWZpZXIsIC8qIHNlcnZlciBvbmx5ICovXG4gIHNoYWRvd01vZGUgLyogdnVlLWNsaSBvbmx5ICovXG4pIHtcbiAgLy8gVnVlLmV4dGVuZCBjb25zdHJ1Y3RvciBleHBvcnQgaW50ZXJvcFxuICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBzY3JpcHRFeHBvcnRzID09PSAnZnVuY3Rpb24nXG4gICAgPyBzY3JpcHRFeHBvcnRzLm9wdGlvbnNcbiAgICA6IHNjcmlwdEV4cG9ydHNcblxuICAvLyByZW5kZXIgZnVuY3Rpb25zXG4gIGlmIChyZW5kZXIpIHtcbiAgICBvcHRpb25zLnJlbmRlciA9IHJlbmRlclxuICAgIG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gc3RhdGljUmVuZGVyRm5zXG4gICAgb3B0aW9ucy5fY29tcGlsZWQgPSB0cnVlXG4gIH1cblxuICAvLyBmdW5jdGlvbmFsIHRlbXBsYXRlXG4gIGlmIChmdW5jdGlvbmFsVGVtcGxhdGUpIHtcbiAgICBvcHRpb25zLmZ1bmN0aW9uYWwgPSB0cnVlXG4gIH1cblxuICAvLyBzY29wZWRJZFxuICBpZiAoc2NvcGVJZCkge1xuICAgIG9wdGlvbnMuX3Njb3BlSWQgPSAnZGF0YS12LScgKyBzY29wZUlkXG4gIH1cblxuICB2YXIgaG9va1xuICBpZiAobW9kdWxlSWRlbnRpZmllcikgeyAvLyBzZXJ2ZXIgYnVpbGRcbiAgICBob29rID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgIC8vIDIuMyBpbmplY3Rpb25cbiAgICAgIGNvbnRleHQgPVxuICAgICAgICBjb250ZXh0IHx8IC8vIGNhY2hlZCBjYWxsXG4gICAgICAgICh0aGlzLiR2bm9kZSAmJiB0aGlzLiR2bm9kZS5zc3JDb250ZXh0KSB8fCAvLyBzdGF0ZWZ1bFxuICAgICAgICAodGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQuJHZub2RlICYmIHRoaXMucGFyZW50LiR2bm9kZS5zc3JDb250ZXh0KSAvLyBmdW5jdGlvbmFsXG4gICAgICAvLyAyLjIgd2l0aCBydW5Jbk5ld0NvbnRleHQ6IHRydWVcbiAgICAgIGlmICghY29udGV4dCAmJiB0eXBlb2YgX19WVUVfU1NSX0NPTlRFWFRfXyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgY29udGV4dCA9IF9fVlVFX1NTUl9DT05URVhUX19cbiAgICAgIH1cbiAgICAgIC8vIGluamVjdCBjb21wb25lbnQgc3R5bGVzXG4gICAgICBpZiAoaW5qZWN0U3R5bGVzKSB7XG4gICAgICAgIGluamVjdFN0eWxlcy5jYWxsKHRoaXMsIGNvbnRleHQpXG4gICAgICB9XG4gICAgICAvLyByZWdpc3RlciBjb21wb25lbnQgbW9kdWxlIGlkZW50aWZpZXIgZm9yIGFzeW5jIGNodW5rIGluZmVycmVuY2VcbiAgICAgIGlmIChjb250ZXh0ICYmIGNvbnRleHQuX3JlZ2lzdGVyZWRDb21wb25lbnRzKSB7XG4gICAgICAgIGNvbnRleHQuX3JlZ2lzdGVyZWRDb21wb25lbnRzLmFkZChtb2R1bGVJZGVudGlmaWVyKVxuICAgICAgfVxuICAgIH1cbiAgICAvLyB1c2VkIGJ5IHNzciBpbiBjYXNlIGNvbXBvbmVudCBpcyBjYWNoZWQgYW5kIGJlZm9yZUNyZWF0ZVxuICAgIC8vIG5ldmVyIGdldHMgY2FsbGVkXG4gICAgb3B0aW9ucy5fc3NyUmVnaXN0ZXIgPSBob29rXG4gIH0gZWxzZSBpZiAoaW5qZWN0U3R5bGVzKSB7XG4gICAgaG9vayA9IHNoYWRvd01vZGVcbiAgICAgID8gZnVuY3Rpb24gKCkge1xuICAgICAgICBpbmplY3RTdHlsZXMuY2FsbChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIChvcHRpb25zLmZ1bmN0aW9uYWwgPyB0aGlzLnBhcmVudCA6IHRoaXMpLiRyb290LiRvcHRpb25zLnNoYWRvd1Jvb3RcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgOiBpbmplY3RTdHlsZXNcbiAgfVxuXG4gIGlmIChob29rKSB7XG4gICAgaWYgKG9wdGlvbnMuZnVuY3Rpb25hbCkge1xuICAgICAgLy8gZm9yIHRlbXBsYXRlLW9ubHkgaG90LXJlbG9hZCBiZWNhdXNlIGluIHRoYXQgY2FzZSB0aGUgcmVuZGVyIGZuIGRvZXNuJ3RcbiAgICAgIC8vIGdvIHRocm91Z2ggdGhlIG5vcm1hbGl6ZXJcbiAgICAgIG9wdGlvbnMuX2luamVjdFN0eWxlcyA9IGhvb2tcbiAgICAgIC8vIHJlZ2lzdGVyIGZvciBmdW5jdGlvbmFsIGNvbXBvbmVudCBpbiB2dWUgZmlsZVxuICAgICAgdmFyIG9yaWdpbmFsUmVuZGVyID0gb3B0aW9ucy5yZW5kZXJcbiAgICAgIG9wdGlvbnMucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyV2l0aFN0eWxlSW5qZWN0aW9uIChoLCBjb250ZXh0KSB7XG4gICAgICAgIGhvb2suY2FsbChjb250ZXh0KVxuICAgICAgICByZXR1cm4gb3JpZ2luYWxSZW5kZXIoaCwgY29udGV4dClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCByZWdpc3RyYXRpb24gYXMgYmVmb3JlQ3JlYXRlIGhvb2tcbiAgICAgIHZhciBleGlzdGluZyA9IG9wdGlvbnMuYmVmb3JlQ3JlYXRlXG4gICAgICBvcHRpb25zLmJlZm9yZUNyZWF0ZSA9IGV4aXN0aW5nXG4gICAgICAgID8gW10uY29uY2F0KGV4aXN0aW5nLCBob29rKVxuICAgICAgICA6IFtob29rXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybi
118B7XG4gICAgZXhwb3J0czogc2NyaXB0RXhwb3J0cyxcbiAgICBvcHRpb25zOiBvcHRpb25zXG4gIH1cbn1cbiIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtMVswXS5ydWxlc1swXS51c2UhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9jb250ZW50Y2F0ZWdvcnlmaWx0ZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTFbMF0ucnVsZXNbMF0udXNlIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vY29udGVudGNhdGVnb3J5ZmlsdGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiIsIi8qIVxuICAqIHZ1ZS1yb3V0ZXIgdjMuNS4zXG4gICogKGMpIDIwMjEgRXZhbiBZb3VcbiAgKiBAbGljZW5zZSBNSVRcbiAgKi9cbi8qICAqL1xuXG5mdW5jdGlvbiBhc3NlcnQgKGNvbmRpdGlvbiwgbWVzc2FnZSkge1xuICBpZiAoIWNvbmRpdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcigoXCJbdnVlLXJvdXRlcl0gXCIgKyBtZXNzYWdlKSlcbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuIChjb25kaXRpb24sIG1lc3NhZ2UpIHtcbiAgaWYgKCFjb25kaXRpb24pIHtcbiAgICB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgY29uc29sZS53YXJuKChcIlt2dWUtcm91dGVyXSBcIiArIG1lc3NhZ2UpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBleHRlbmQgKGEsIGIpIHtcbiAgZm9yICh2YXIga2V5IGluIGIpIHtcbiAgICBhW2tleV0gPSBiW2tleV07XG4gIH1cbiAgcmV0dXJuIGFcbn1cblxuLyogICovXG5cbnZhciBlbmNvZGVSZXNlcnZlUkUgPSAvWyEnKCkqXS9nO1xudmFyIGVuY29kZVJlc2VydmVSZXBsYWNlciA9IGZ1bmN0aW9uIChjKSB7IHJldHVybiAnJScgKyBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpOyB9O1xudmFyIGNvbW1hUkUgPSAvJTJDL2c7XG5cbi8vIGZpeGVkIGVuY29kZVVSSUNvbXBvbmVudCB3aGljaCBpcyBtb3JlIGNvbmZvcm1hbnQgdG8gUkZDMzk4Njpcbi8vIC0gZXNjYXBlcyBbIScoKSpdXG4vLyAtIHByZXNlcnZlIGNvbW1hc1xudmFyIGVuY29kZSA9IGZ1bmN0aW9uIChzdHIpIHsgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHIpXG4gICAgLnJlcGxhY2UoZW5jb2RlUmVzZXJ2ZVJFLCBlbmNvZGVSZXNlcnZlUmVwbGFjZXIpXG4gICAgLnJlcGxhY2UoY29tbWFSRSwgJywnKTsgfTtcblxuZnVuY3Rpb24gZGVjb2RlIChzdHIpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHN0cilcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHdhcm4oZmFsc2UsIChcIkVycm9yIGRlY29kaW5nIFxcXCJcIiArIHN0ciArIFwiXFxcIi4gTGVhdmluZyBpdCBpbnRhY3QuXCIpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN0clxufVxuXG5mdW5jdGlvbiByZXNvbHZlUXVlcnkgKFxuICBxdWVyeSxcbiAgZXh0cmFRdWVyeSxcbiAgX3BhcnNlUXVlcnlcbikge1xuICBpZiAoIGV4dHJhUXVlcnkgPT09IHZvaWQgMCApIGV4dHJhUXVlcnkgPSB7fTtcblxuICB2YXIgcGFyc2UgPSBfcGFyc2VRdWVyeSB8fCBwYXJzZVF1ZXJ5O1xuICB2YXIgcGFyc2VkUXVlcnk7XG4gIHRyeSB7XG4gICAgcGFyc2VkUXVlcnkgPSBwYXJzZShxdWVyeSB8fCAnJyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oZmFsc2UsIGUubWVzc2FnZSk7XG4gICAgcGFyc2VkUXVlcnkgPSB7fTtcbiAgfVxuICBmb3IgKHZhciBrZXkgaW4gZXh0cmFRdWVyeSkge1xuICAgIHZhciB2YWx1ZSA9IGV4dHJhUXVlcnlba2V5XTtcbiAgICBwYXJzZWRRdWVyeVtrZXldID0gQXJyYXkuaXNBcnJheSh2YWx1ZSlcbiAgICAgID8gdmFsdWUubWFwKGNhc3RRdWVyeVBhcmFtVmFsdWUpXG4gICAgICA6IGNhc3RRdWVyeVBhcmFtVmFsdWUodmFsdWUpO1xuICB9XG4gIHJldHVybiBwYXJzZWRRdWVyeVxufVxuXG52YXIgY2FzdFF1ZXJ5UGFyYW1WYWx1ZSA9IGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gKHZhbHVlID09IG51bGwgfHwgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyA/IHZhbHVlIDogU3RyaW5nKHZhbHVlKSk7IH07XG5cbmZ1bmN0aW9uIHBhcnNlUXVlcnkgKHF1ZXJ5KSB7XG4gIHZhciByZXMgPSB7fTtcblxuICBxdWVyeSA9IHF1ZXJ5LnRyaW0oKS5yZXBsYWNlKC9eKFxcP3wjfCYpLywgJycpO1xuXG4gIGlmICghcXVlcnkpIHtcbiAgICByZXR1cm4gcmVzXG4gIH1cblxuICBxdWVyeS5zcGxpdCgnJicpLmZvckVhY2goZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgdmFyIHBhcnRzID0gcGFyYW0ucmVwbGFjZSgvXFwrL2csICcgJykuc3BsaXQoJz0nKTtcbiAgICB2YXIga2V5ID0gZGVjb2RlKHBhcnRzLnNoaWZ0KCkpO1xuICAgIHZhciB2YWwgPSBwYXJ0cy5sZW5ndGggPiAwID8gZGVjb2RlKHBhcnRzLmpvaW4oJz0nKSkgOiBudWxsO1xuXG4gICAgaWYgKHJlc1trZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlc1trZXldID0gdmFsO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShyZXNba2V5XSkpIHtcbiAgICAgIHJlc1trZXldLnB1c2godmFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzW2tleV0gPSBbcmVzW2tleV0sIHZhbF07XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeVF1ZXJ5IChvYmopIHtcbiAgdmFyIHJlcyA9IG9ialxuICAgID8gT2JqZWN0LmtleXMob2JqKVxuICAgICAgLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB2YWwgPSBvYmpba2V5XTtcblxuICAgICAgICBpZiAodmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gJydcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWwgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gZW5jb2RlKGtleSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF
1185KHZhbCkpIHtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgICAgdmFsLmZvckVhY2goZnVuY3Rpb24gKHZhbDIpIHtcbiAgICAgICAgICAgIGlmICh2YWwyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmFsMiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICByZXN1bHQucHVzaChlbmNvZGUoa2V5KSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXN1bHQucHVzaChlbmNvZGUoa2V5KSArICc9JyArIGVuY29kZSh2YWwyKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdC5qb2luKCcmJylcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlbmNvZGUoa2V5KSArICc9JyArIGVuY29kZSh2YWwpXG4gICAgICB9KVxuICAgICAgLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5sZW5ndGggPiAwOyB9KVxuICAgICAgLmpvaW4oJyYnKVxuICAgIDogbnVsbDtcbiAgcmV0dXJuIHJlcyA/IChcIj9cIiArIHJlcykgOiAnJ1xufVxuXG4vKiAgKi9cblxudmFyIHRyYWlsaW5nU2xhc2hSRSA9IC9cXC8/JC87XG5cbmZ1bmN0aW9uIGNyZWF0ZVJvdXRlIChcbiAgcmVjb3JkLFxuICBsb2NhdGlvbixcbiAgcmVkaXJlY3RlZEZyb20sXG4gIHJvdXRlclxuKSB7XG4gIHZhciBzdHJpbmdpZnlRdWVyeSA9IHJvdXRlciAmJiByb3V0ZXIub3B0aW9ucy5zdHJpbmdpZnlRdWVyeTtcblxuICB2YXIgcXVlcnkgPSBsb2NhdGlvbi5xdWVyeSB8fCB7fTtcbiAgdHJ5IHtcbiAgICBxdWVyeSA9IGNsb25lKHF1ZXJ5KTtcbiAgfSBjYXRjaCAoZSkge31cblxuICB2YXIgcm91dGUgPSB7XG4gICAgbmFtZTogbG9jYXRpb24ubmFtZSB8fCAocmVjb3JkICYmIHJlY29yZC5uYW1lKSxcbiAgICBtZXRhOiAocmVjb3JkICYmIHJlY29yZC5tZXRhKSB8fCB7fSxcbiAgICBwYXRoOiBsb2NhdGlvbi5wYXRoIHx8ICcvJyxcbiAgICBoYXNoOiBsb2NhdGlvbi5oYXNoIHx8ICcnLFxuICAgIHF1ZXJ5OiBxdWVyeSxcbiAgICBwYXJhbXM6IGxvY2F0aW9uLnBhcmFtcyB8fCB7fSxcbiAgICBmdWxsUGF0aDogZ2V0RnVsbFBhdGgobG9jYXRpb24sIHN0cmluZ2lmeVF1ZXJ5KSxcbiAgICBtYXRjaGVkOiByZWNvcmQgPyBmb3JtYXRNYXRjaChyZWNvcmQpIDogW11cbiAgfTtcbiAgaWYgKHJlZGlyZWN0ZWRGcm9tKSB7XG4gICAgcm91dGUucmVkaXJlY3RlZEZyb20gPSBnZXRGdWxsUGF0aChyZWRpcmVjdGVkRnJvbSwgc3RyaW5naWZ5UXVlcnkpO1xuICB9XG4gIHJldHVybiBPYmplY3QuZnJlZXplKHJvdXRlKVxufVxuXG5mdW5jdGlvbiBjbG9uZSAodmFsdWUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLm1hcChjbG9uZSlcbiAgfSBlbHNlIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgdmFyIHJlcyA9IHt9O1xuICAgIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgICAgcmVzW2tleV0gPSBjbG9uZSh2YWx1ZVtrZXldKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB2YWx1ZVxuICB9XG59XG5cbi8vIHRoZSBzdGFydGluZyByb3V0ZSB0aGF0IHJlcHJlc2VudHMgdGhlIGluaXRpYWwgc3RhdGVcbnZhciBTVEFSVCA9IGNyZWF0ZVJvdXRlKG51bGwsIHtcbiAgcGF0aDogJy8nXG59KTtcblxuZnVuY3Rpb24gZm9ybWF0TWF0Y2ggKHJlY29yZCkge1xuICB2YXIgcmVzID0gW107XG4gIHdoaWxlIChyZWNvcmQpIHtcbiAgICByZXMudW5zaGlmdChyZWNvcmQpO1xuICAgIHJlY29yZCA9IHJlY29yZC5wYXJlbnQ7XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBnZXRGdWxsUGF0aCAoXG4gIHJlZixcbiAgX3N0cmluZ2lmeVF1ZXJ5XG4pIHtcbiAgdmFyIHBhdGggPSByZWYucGF0aDtcbiAgdmFyIHF1ZXJ5ID0gcmVmLnF1ZXJ5OyBpZiAoIHF1ZXJ5ID09PSB2b2lkIDAgKSBxdWVyeSA9IHt9O1xuICB2YXIgaGFzaCA9IHJlZi5oYXNoOyBpZiAoIGhhc2ggPT09IHZvaWQgMCApIGhhc2ggPSAnJztcblxuICB2YXIgc3RyaW5naWZ5ID0gX3N0cmluZ2lmeVF1ZXJ5IHx8IHN0cmluZ2lmeVF1ZXJ5O1xuICByZXR1cm4gKHBhdGggfHwgJy8nKSArIHN0cmluZ2lmeShxdWVyeSkgKyBoYXNoXG59XG5cbmZ1bmN0aW9uIGlzU2FtZVJvdXRlIChhLCBiLCBvbmx5UGF0aCkge1xuICBpZiAoYiA9PT0gU1RBUlQpIHtcbiAgICByZXR1cm4gYSA9PT0gYlxuICB9IGVsc2UgaWYgKCFiKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0gZWxzZSBpZiAoYS5wYXRoICYmIGIucGF0aCkge1xuICAgIHJldHVybiBhLnBhdGgucmVwbGFjZSh0cmFpbGluZ1NsYXNoUkUsICcnKSA9PT0gYi5wYXRoLnJlcGxhY2UodHJhaWxpbmdTbGFzaFJFLCAnJykgJiYgKG9ubHlQYXRoIHx8XG4gICAgICBhLmhhc2ggPT09IGIuaGFzaCAmJlxuICAgICAgaXNPYmplY3RFcXVhbChhLnF1ZXJ5LCBiLnF1ZXJ5KSlcbiAgfSBlbHNlIGlmIChhLm5hbWUgJiYgYi5uYW1lKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGEubmFtZSA9PT0gYi5uYW1lICYmXG4gICAgICAob25seVBhdGggfHwgKFxuICAgICAgICBhLmhhc2ggPT09IGIuaGFzaCAmJlxuICAgICAgaXNPYmplY3RFcXVhbChhLnF1ZXJ5LCBiLnF1ZXJ5KSAmJlxuICAgICAgaXNPYmplY3RFcXVhbChhLnBhcmFtcywgYi5wYXJhbXMpKVxuICAgICAgKVxuICAgIClcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5mdW5jdGlvbiBpc09iamVjdEVxdWFsIChhLCBiKSB7XG4gIGlmICggYSA9PT0gdm9pZCAwICkgYSA9IHt9O1xuICBpZiAoIGIgPT09IHZvaWQgMCApIGIgPSB7fTtcblxuICAvLyBoYW5kbGUgbnVsbCB2YWx1ZSAjMTU2NlxuICBpZiAoIWEgfHwgIWIpIHsgcmV0dXJuIGEgPT09IGIgfVxuICB2YXIgYUtleXMgPSBPYmplY3Qua2V5cyhhKS5zb3J0KCk7XG4gIHZhciBiS2V5cyA9IE9iamVjdC5rZXlzKGIpLnNvcnQoKTtcbiAgaWYgKGFLZXlzLmxlbmd0aCAhPT0gYktleXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gI
118H1cbiAgcmV0dXJuIGFLZXlzLmV2ZXJ5KGZ1bmN0aW9uIChrZXksIGkpIHtcbiAgICB2YXIgYVZhbCA9IGFba2V5XTtcbiAgICB2YXIgYktleSA9IGJLZXlzW2ldO1xuICAgIGlmIChiS2V5ICE9PSBrZXkpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICB2YXIgYlZhbCA9IGJba2V5XTtcbiAgICAvLyBxdWVyeSB2YWx1ZXMgY2FuIGJlIG51bGwgYW5kIHVuZGVmaW5lZFxuICAgIGlmIChhVmFsID09IG51bGwgfHwgYlZhbCA9PSBudWxsKSB7IHJldHVybiBhVmFsID09PSBiVmFsIH1cbiAgICAvLyBjaGVjayBuZXN0ZWQgZXF1YWxpdHlcbiAgICBpZiAodHlwZW9mIGFWYWwgPT09ICdvYmplY3QnICYmIHR5cGVvZiBiVmFsID09PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0RXF1YWwoYVZhbCwgYlZhbClcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyhhVmFsKSA9PT0gU3RyaW5nKGJWYWwpXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGlzSW5jbHVkZWRSb3V0ZSAoY3VycmVudCwgdGFyZ2V0KSB7XG4gIHJldHVybiAoXG4gICAgY3VycmVudC5wYXRoLnJlcGxhY2UodHJhaWxpbmdTbGFzaFJFLCAnLycpLmluZGV4T2YoXG4gICAgICB0YXJnZXQucGF0aC5yZXBsYWNlKHRyYWlsaW5nU2xhc2hSRSwgJy8nKVxuICAgICkgPT09IDAgJiZcbiAgICAoIXRhcmdldC5oYXNoIHx8IGN1cnJlbnQuaGFzaCA9PT0gdGFyZ2V0Lmhhc2gpICYmXG4gICAgcXVlcnlJbmNsdWRlcyhjdXJyZW50LnF1ZXJ5LCB0YXJnZXQucXVlcnkpXG4gIClcbn1cblxuZnVuY3Rpb24gcXVlcnlJbmNsdWRlcyAoY3VycmVudCwgdGFyZ2V0KSB7XG4gIGZvciAodmFyIGtleSBpbiB0YXJnZXQpIHtcbiAgICBpZiAoIShrZXkgaW4gY3VycmVudCkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBoYW5kbGVSb3V0ZUVudGVyZWQgKHJvdXRlKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcm91dGUubWF0Y2hlZC5sZW5ndGg7IGkrKykge1xuICAgIHZhciByZWNvcmQgPSByb3V0ZS5tYXRjaGVkW2ldO1xuICAgIGZvciAodmFyIG5hbWUgaW4gcmVjb3JkLmluc3RhbmNlcykge1xuICAgICAgdmFyIGluc3RhbmNlID0gcmVjb3JkLmluc3RhbmNlc1tuYW1lXTtcbiAgICAgIHZhciBjYnMgPSByZWNvcmQuZW50ZXJlZENic1tuYW1lXTtcbiAgICAgIGlmICghaW5zdGFuY2UgfHwgIWNicykgeyBjb250aW51ZSB9XG4gICAgICBkZWxldGUgcmVjb3JkLmVudGVyZWRDYnNbbmFtZV07XG4gICAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBjYnMubGVuZ3RoOyBpJDErKykge1xuICAgICAgICBpZiAoIWluc3RhbmNlLl9pc0JlaW5nRGVzdHJveWVkKSB7IGNic1tpJDFdKGluc3RhbmNlKTsgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgVmlldyA9IHtcbiAgbmFtZTogJ1JvdXRlclZpZXcnLFxuICBmdW5jdGlvbmFsOiB0cnVlLFxuICBwcm9wczoge1xuICAgIG5hbWU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdkZWZhdWx0J1xuICAgIH1cbiAgfSxcbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIgKF8sIHJlZikge1xuICAgIHZhciBwcm9wcyA9IHJlZi5wcm9wcztcbiAgICB2YXIgY2hpbGRyZW4gPSByZWYuY2hpbGRyZW47XG4gICAgdmFyIHBhcmVudCA9IHJlZi5wYXJlbnQ7XG4gICAgdmFyIGRhdGEgPSByZWYuZGF0YTtcblxuICAgIC8vIHVzZWQgYnkgZGV2dG9vbHMgdG8gZGlzcGxheSBhIHJvdXRlci12aWV3IGJhZGdlXG4gICAgZGF0YS5yb3V0ZXJWaWV3ID0gdHJ1ZTtcblxuICAgIC8vIGRpcmVjdGx5IHVzZSBwYXJlbnQgY29udGV4dCdzIGNyZWF0ZUVsZW1lbnQoKSBmdW5jdGlvblxuICAgIC8vIHNvIHRoYXQgY29tcG9uZW50cyByZW5kZXJlZCBieSByb3V0ZXItdmlldyBjYW4gcmVzb2x2ZSBuYW1lZCBzbG90c1xuICAgIHZhciBoID0gcGFyZW50LiRjcmVhdGVFbGVtZW50O1xuICAgIHZhciBuYW1lID0gcHJvcHMubmFtZTtcbiAgICB2YXIgcm91dGUgPSBwYXJlbnQuJHJvdXRlO1xuICAgIHZhciBjYWNoZSA9IHBhcmVudC5fcm91dGVyVmlld0NhY2hlIHx8IChwYXJlbnQuX3JvdXRlclZpZXdDYWNoZSA9IHt9KTtcblxuICAgIC8vIGRldGVybWluZSBjdXJyZW50IHZpZXcgZGVwdGgsIGFsc28gY2hlY2sgdG8gc2VlIGlmIHRoZSB0cmVlXG4gICAgLy8gaGFzIGJlZW4gdG9nZ2xlZCBpbmFjdGl2ZSBidXQga2VwdC1hbGl2ZS5cbiAgICB2YXIgZGVwdGggPSAwO1xuICAgIHZhciBpbmFjdGl2ZSA9IGZhbHNlO1xuICAgIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50Ll9yb3V0ZXJSb290ICE9PSBwYXJlbnQpIHtcbiAgICAgIHZhciB2bm9kZURhdGEgPSBwYXJlbnQuJHZub2RlID8gcGFyZW50LiR2bm9kZS5kYXRhIDoge307XG4gICAgICBpZiAodm5vZGVEYXRhLnJvdXRlclZpZXcpIHtcbiAgICAgICAgZGVwdGgrKztcbiAgICAgIH1cbiAgICAgIGlmICh2bm9kZURhdGEua2VlcEFsaXZlICYmIHBhcmVudC5fZGlyZWN0SW5hY3RpdmUgJiYgcGFyZW50Ll9pbmFjdGl2ZSkge1xuICAgICAgICBpbmFjdGl2ZSA9IHRydWU7XG4gICAgICB9XG4gICAgICBwYXJlbnQgPSBwYXJlbnQuJHBhcmVudDtcbiAgICB9XG4gICAgZGF0YS5yb3V0ZXJWaWV3RGVwdGggPSBkZXB0aDtcblxuICAgIC8vIHJlbmRlciBwcmV2aW91cyB2aWV3IGlmIHRoZSB0cmVlIGlzIGluYWN0aXZlIGFuZCBrZXB0LWFsaXZlXG4gICAgaWYgKGluYWN0aXZlKSB7XG4gICAgICB2Y
118XIgY2FjaGVkRGF0YSA9IGNhY2hlW25hbWVdO1xuICAgICAgdmFyIGNhY2hlZENvbXBvbmVudCA9IGNhY2hlZERhdGEgJiYgY2FjaGVkRGF0YS5jb21wb25lbnQ7XG4gICAgICBpZiAoY2FjaGVkQ29tcG9uZW50KSB7XG4gICAgICAgIC8vICMyMzAxXG4gICAgICAgIC8vIHBhc3MgcHJvcHNcbiAgICAgICAgaWYgKGNhY2hlZERhdGEuY29uZmlnUHJvcHMpIHtcbiAgICAgICAgICBmaWxsUHJvcHNpbkRhdGEoY2FjaGVkQ29tcG9uZW50LCBkYXRhLCBjYWNoZWREYXRhLnJvdXRlLCBjYWNoZWREYXRhLmNvbmZpZ1Byb3BzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaChjYWNoZWRDb21wb25lbnQsIGRhdGEsIGNoaWxkcmVuKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gcmVuZGVyIHByZXZpb3VzIGVtcHR5IHZpZXdcbiAgICAgICAgcmV0dXJuIGgoKVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBtYXRjaGVkID0gcm91dGUubWF0Y2hlZFtkZXB0aF07XG4gICAgdmFyIGNvbXBvbmVudCA9IG1hdGNoZWQgJiYgbWF0Y2hlZC5jb21wb25lbnRzW25hbWVdO1xuXG4gICAgLy8gcmVuZGVyIGVtcHR5IG5vZGUgaWYgbm8gbWF0Y2hlZCByb3V0ZSBvciBubyBjb25maWcgY29tcG9uZW50XG4gICAgaWYgKCFtYXRjaGVkIHx8ICFjb21wb25lbnQpIHtcbiAgICAgIGNhY2hlW25hbWVdID0gbnVsbDtcbiAgICAgIHJldHVybiBoKClcbiAgICB9XG5cbiAgICAvLyBjYWNoZSBjb21wb25lbnRcbiAgICBjYWNoZVtuYW1lXSA9IHsgY29tcG9uZW50OiBjb21wb25lbnQgfTtcblxuICAgIC8vIGF0dGFjaCBpbnN0YW5jZSByZWdpc3RyYXRpb24gaG9va1xuICAgIC8vIHRoaXMgd2lsbCBiZSBjYWxsZWQgaW4gdGhlIGluc3RhbmNlJ3MgaW5qZWN0ZWQgbGlmZWN5Y2xlIGhvb2tzXG4gICAgZGF0YS5yZWdpc3RlclJvdXRlSW5zdGFuY2UgPSBmdW5jdGlvbiAodm0sIHZhbCkge1xuICAgICAgLy8gdmFsIGNvdWxkIGJlIHVuZGVmaW5lZCBmb3IgdW5yZWdpc3RyYXRpb25cbiAgICAgIHZhciBjdXJyZW50ID0gbWF0Y2hlZC5pbnN0YW5jZXNbbmFtZV07XG4gICAgICBpZiAoXG4gICAgICAgICh2YWwgJiYgY3VycmVudCAhPT0gdm0pIHx8XG4gICAgICAgICghdmFsICYmIGN1cnJlbnQgPT09IHZtKVxuICAgICAgKSB7XG4gICAgICAgIG1hdGNoZWQuaW5zdGFuY2VzW25hbWVdID0gdmFsO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFsc28gcmVnaXN0ZXIgaW5zdGFuY2UgaW4gcHJlcGF0Y2ggaG9va1xuICAgIC8vIGluIGNhc2UgdGhlIHNhbWUgY29tcG9uZW50IGluc3RhbmNlIGlzIHJldXNlZCBhY3Jvc3MgZGlmZmVyZW50IHJvdXRlc1xuICAgIDsoZGF0YS5ob29rIHx8IChkYXRhLmhvb2sgPSB7fSkpLnByZXBhdGNoID0gZnVuY3Rpb24gKF8sIHZub2RlKSB7XG4gICAgICBtYXRjaGVkLmluc3RhbmNlc1tuYW1lXSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlO1xuICAgIH07XG5cbiAgICAvLyByZWdpc3RlciBpbnN0YW5jZSBpbiBpbml0IGhvb2tcbiAgICAvLyBpbiBjYXNlIGtlcHQtYWxpdmUgY29tcG9uZW50IGJlIGFjdGl2ZWQgd2hlbiByb3V0ZXMgY2hhbmdlZFxuICAgIGRhdGEuaG9vay5pbml0ID0gZnVuY3Rpb24gKHZub2RlKSB7XG4gICAgICBpZiAodm5vZGUuZGF0YS5rZWVwQWxpdmUgJiZcbiAgICAgICAgdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgJiZcbiAgICAgICAgdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgIT09IG1hdGNoZWQuaW5zdGFuY2VzW25hbWVdXG4gICAgICApIHtcbiAgICAgICAgbWF0Y2hlZC5pbnN0YW5jZXNbbmFtZV0gPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZTtcbiAgICAgIH1cblxuICAgICAgLy8gaWYgdGhlIHJvdXRlIHRyYW5zaXRpb24gaGFzIGFscmVhZHkgYmVlbiBjb25maXJtZWQgdGhlbiB3ZSB3ZXJlbid0XG4gICAgICAvLyBhYmxlIHRvIGNhbGwgdGhlIGNicyBkdXJpbmcgY29uZmlybWF0aW9uIGFzIHRoZSBjb21wb25lbnQgd2FzIG5vdFxuICAgICAgLy8gcmVnaXN0ZXJlZCB5ZXQsIHNvIHdlIGNhbGwgaXQgaGVyZS5cbiAgICAgIGhhbmRsZVJvdXRlRW50ZXJlZChyb3V0ZSk7XG4gICAgfTtcblxuICAgIHZhciBjb25maWdQcm9wcyA9IG1hdGNoZWQucHJvcHMgJiYgbWF0Y2hlZC5wcm9wc1tuYW1lXTtcbiAgICAvLyBzYXZlIHJvdXRlIGFuZCBjb25maWdQcm9wcyBpbiBjYWNoZVxuICAgIGlmIChjb25maWdQcm9wcykge1xuICAgICAgZXh0ZW5kKGNhY2hlW25hbWVdLCB7XG4gICAgICAgIHJvdXRlOiByb3V0ZSxcbiAgICAgICAgY29uZmlnUHJvcHM6IGNvbmZpZ1Byb3BzXG4gICAgICB9KTtcbiAgICAgIGZpbGxQcm9wc2luRGF0YShjb21wb25lbnQsIGRhdGEsIHJvdXRlLCBjb25maWdQcm9wcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGgoY29tcG9uZW50LCBkYXRhLCBjaGlsZHJlbilcbiAgfVxufTtcblxuZnVuY3Rpb24gZmlsbFByb3BzaW5EYXRhIChjb21wb25lbnQsIGRhdGEsIHJvdXRlLCBjb25maWdQcm9wcykge1xuICAvLyByZXNvbHZlIHByb3BzXG4gIHZhciBwcm9wc1RvUGFzcyA9IGRhdGEucHJvcHMgPSByZXNvbHZlUHJvcHMocm91dGUsIGNvbmZpZ1Byb3BzKTtcbiAgaWYgKHByb3BzVG9QYXNzKSB7XG4gICAgLy8gY2xvbmUgdG8gcHJldmVudCBtdXRhdGlvblxuICAgIHByb3BzVG9QYXNzID0gZGF0YS5wcm9wcyA9IGV4dGVuZCh7fSwgcHJvcHNUb1Bhc3MpO1xuICAgIC8vIHBhc3Mgbm9uLWRlY2xhcmVkIHByb3BzIGFzIGF0dHJzXG4gICAgdmFyIGF0dHJzID0gZGF0YS5hdHRycyA9IGRhdGEuYXR0cnMgfHwge307XG4gICAgZm9yICh2YXIga2V5IGluIHByb3BzVG9QYXNzKSB7XG4gICAgICBpZiAoIWNvbXBvbmVudC5wcm9wcyB8fCAhKGtleSBpbiBjb21wb25lbnQucHJvcHMpKSB7XG4gICAgICAgIGF0dHJzW2tleV0gPSBwcm9wc1RvUGFzc1trZXldO1xuICAgICAgICBkZWxldGUgcHJvcHNUb1Bhc3Nba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVByb3BzIChyb3V0ZSwgY29uZmlnKSB7XG4gIHN3aXRjaCAodHlwZW9mIGNvbmZpZykge1xuICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICByZXR1cm5cbiAgICBjYXNlICdvYmplY3QnOlxuICAgICAgcmV0dXJuIGNvbmZpZ1xuICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgIHJldHVybi
118Bjb25maWcocm91dGUpXG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICByZXR1cm4gY29uZmlnID8gcm91dGUucGFyYW1zIDogdW5kZWZpbmVkXG4gICAgZGVmYXVsdDpcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgXCJwcm9wcyBpbiBcXFwiXCIgKyAocm91dGUucGF0aCkgKyBcIlxcXCIgaXMgYSBcIiArICh0eXBlb2YgY29uZmlnKSArIFwiLCBcIiArXG4gICAgICAgICAgXCJleHBlY3RpbmcgYW4gb2JqZWN0LCBmdW5jdGlvbiBvciBib29sZWFuLlwiXG4gICAgICAgICk7XG4gICAgICB9XG4gIH1cbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIHJlc29sdmVQYXRoIChcbiAgcmVsYXRpdmUsXG4gIGJhc2UsXG4gIGFwcGVuZFxuKSB7XG4gIHZhciBmaXJzdENoYXIgPSByZWxhdGl2ZS5jaGFyQXQoMCk7XG4gIGlmIChmaXJzdENoYXIgPT09ICcvJykge1xuICAgIHJldHVybiByZWxhdGl2ZVxuICB9XG5cbiAgaWYgKGZpcnN0Q2hhciA9PT0gJz8nIHx8IGZpcnN0Q2hhciA9PT0gJyMnKSB7XG4gICAgcmV0dXJuIGJhc2UgKyByZWxhdGl2ZVxuICB9XG5cbiAgdmFyIHN0YWNrID0gYmFzZS5zcGxpdCgnLycpO1xuXG4gIC8vIHJlbW92ZSB0cmFpbGluZyBzZWdtZW50IGlmOlxuICAvLyAtIG5vdCBhcHBlbmRpbmdcbiAgLy8gLSBhcHBlbmRpbmcgdG8gdHJhaWxpbmcgc2xhc2ggKGxhc3Qgc2VnbWVudCBpcyBlbXB0eSlcbiAgaWYgKCFhcHBlbmQgfHwgIXN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdKSB7XG4gICAgc3RhY2sucG9wKCk7XG4gIH1cblxuICAvLyByZXNvbHZlIHJlbGF0aXZlIHBhdGhcbiAgdmFyIHNlZ21lbnRzID0gcmVsYXRpdmUucmVwbGFjZSgvXlxcLy8sICcnKS5zcGxpdCgnLycpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHNlZ21lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNlZ21lbnQgPSBzZWdtZW50c1tpXTtcbiAgICBpZiAoc2VnbWVudCA9PT0gJy4uJykge1xuICAgICAgc3RhY2sucG9wKCk7XG4gICAgfSBlbHNlIGlmIChzZWdtZW50ICE9PSAnLicpIHtcbiAgICAgIHN0YWNrLnB1c2goc2VnbWVudCk7XG4gICAgfVxuICB9XG5cbiAgLy8gZW5zdXJlIGxlYWRpbmcgc2xhc2hcbiAgaWYgKHN0YWNrWzBdICE9PSAnJykge1xuICAgIHN0YWNrLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgcmV0dXJuIHN0YWNrLmpvaW4oJy8nKVxufVxuXG5mdW5jdGlvbiBwYXJzZVBhdGggKHBhdGgpIHtcbiAgdmFyIGhhc2ggPSAnJztcbiAgdmFyIHF1ZXJ5ID0gJyc7XG5cbiAgdmFyIGhhc2hJbmRleCA9IHBhdGguaW5kZXhPZignIycpO1xuICBpZiAoaGFzaEluZGV4ID49IDApIHtcbiAgICBoYXNoID0gcGF0aC5zbGljZShoYXNoSW5kZXgpO1xuICAgIHBhdGggPSBwYXRoLnNsaWNlKDAsIGhhc2hJbmRleCk7XG4gIH1cblxuICB2YXIgcXVlcnlJbmRleCA9IHBhdGguaW5kZXhPZignPycpO1xuICBpZiAocXVlcnlJbmRleCA+PSAwKSB7XG4gICAgcXVlcnkgPSBwYXRoLnNsaWNlKHF1ZXJ5SW5kZXggKyAxKTtcbiAgICBwYXRoID0gcGF0aC5zbGljZSgwLCBxdWVyeUluZGV4KTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcGF0aDogcGF0aCxcbiAgICBxdWVyeTogcXVlcnksXG4gICAgaGFzaDogaGFzaFxuICB9XG59XG5cbmZ1bmN0aW9uIGNsZWFuUGF0aCAocGF0aCkge1xuICByZXR1cm4gcGF0aC5yZXBsYWNlKC9cXC8rL2csICcvJylcbn1cblxudmFyIGlzYXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChhcnIpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcnIpID09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG4vKipcbiAqIEV4cG9zZSBgcGF0aFRvUmVnZXhwYC5cbiAqL1xudmFyIHBhdGhUb1JlZ2V4cF8xID0gcGF0aFRvUmVnZXhwO1xudmFyIHBhcnNlXzEgPSBwYXJzZTtcbnZhciBjb21waWxlXzEgPSBjb21waWxlO1xudmFyIHRva2Vuc1RvRnVuY3Rpb25fMSA9IHRva2Vuc1RvRnVuY3Rpb247XG52YXIgdG9rZW5zVG9SZWdFeHBfMSA9IHRva2Vuc1RvUmVnRXhwO1xuXG4vKipcbiAqIFRoZSBtYWluIHBhdGggbWF0Y2hpbmcgcmVnZXhwIHV0aWxpdHkuXG4gKlxuICogQHR5cGUge1JlZ0V4cH1cbiAqL1xudmFyIFBBVEhfUkVHRVhQID0gbmV3IFJlZ0V4cChbXG4gIC8vIE1hdGNoIGVzY2FwZWQgY2hhcmFjdGVycyB0aGF0IHdvdWxkIG90aGVyd2lzZSBhcHBlYXIgaW4gZnV0dXJlIG1hdGNoZXMuXG4gIC8vIFRoaXMgYWxsb3dzIHRoZSB1c2VyIHRvIGVzY2FwZSBzcGVjaWFsIGNoYXJhY3RlcnMgdGhhdCB3b24ndCB0cmFuc2Zvcm0uXG4gICcoXFxcXFxcXFwuKScsXG4gIC8vIE1hdGNoIEV4cHJlc3Mtc3R5bGUgcGFyYW1ldGVycyBhbmQgdW4tbmFtZWQgcGFyYW1ldGVycyB3aXRoIGEgcHJlZml4XG4gIC8vIGFuZCBvcHRpb25hbCBzdWZmaXhlcy4gTWF0Y2hlcyBhcHBlYXIgYXM6XG4gIC8vXG4gIC8vIFwiLzp0ZXN0KFxcXFxkKyk/XCIgPT4gW1wiL1wiLCBcInRlc3RcIiwgXCJcXGQrXCIsIHVuZGVmaW5lZCwgXCI/XCIsIHVuZGVmaW5lZF1cbiAgLy8gXCIvcm91dGUoXFxcXGQrKVwiICA9PiBbdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgXCJcXGQrXCIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkXVxuICAvLyBcIi8qXCIgICAgICAgICAgICA9PiBbXCIvXCIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgXCIqXCJdXG4gICcoW1xcXFwvLl0pPyg/Oig/OlxcXFw6KFxcXFx3KykoPzpcXFxcKCgoPzpcXFxcXFxcXC58W15cXFxcXFxcXCgpXSkrKVxcXFwpKT98XFxcXCgoKD86XFxcXFxcXFwufFteXFxcXFxcXFwoKV0pKylcXFxcKSkoWysqP10pP3woXFxcXCopKSdcbl0uam9pbignfCcpLCAnZycpO1xuXG4vKipcbiAqIFBhcnNlIGEgc3RyaW5nIGZvciB0aGUgcmF3IHRva2Vucy5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9ICBzdHJcbiAqIEBwYXJhbSAge09iamVjdD19IG9wdGlvbnNcbiAqIEByZXR1cm4geyFBcnJheX1cbiAqL1xuZnVuY3Rpb24gcGFyc2UgKHN0ciwgb3B0aW9ucykge1xuICB2YXIgdG9rZW5zID0gW107XG4gIHZhciBrZXkgPSAwO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgcGF0aCA9ICcnO1xuICB2YXIgZGVmYXVsdERlbGltaXRlciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5kZWxpbWl0ZXIgfHwgJy8nO1xuICB2YXIgcmVzO1xuXG4gIHdoaWxlICgocmVzID0gUEFUSF9SRUdFWFAuZXhlYyhzdHIpKSAhPSBudWxsKSB7XG4gICAgdmFyIG0gPSByZXNbMF07XG4gICAgdmFyIGVzY2FwZWQgPSByZXNbMV07XG4gICAgdmFyIG9mZnNldCA9IHJlcy5pbmRleDtcbiAgICBwYXRoICs9IHN0ci5zbGljZShpbmRleCwgb2Zmc2V0KTtcbiAgICBpbmRleCA9IG9mZnNldCArIG0ubGVuZ3RoO1xuXG4gICAgLy8gSWdub3JlIGFscmVhZHkgZXNjYXBlZCBzZXF1ZW5jZXMuXG4gICAgaWYgKGVzY2FwZWQpIHtcbiAgICAgIHBhdGggKz0gZXNjYXBlZFsxXTtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgdmFyIG5leHQgPSBzdHJbaW5kZXhdO1xuICAgIHZhciBwcmVmaXggPSByZXNbMl07XG4gICAgdmFyIG5hbWUgPSByZXNbM107XG4gICAgdmFyIGNhcHR1cmUgPSByZXNbNF07XG4gICAgdmFyIGdyb3VwID0gcmVzWzVdO1xuICAgIHZhciBtb2RpZmllciA9IHJlc1s2XTtcbiAgICB2YXIgYXN0ZXJpc2sgPSByZXNbN107XG5cbiAgICAvLyBQdXNoIHRoZSBjdXJyZW50IHBhdGggb250byB0aGUgdG9rZW5zLlxuICAgIGlmIChwYXRoKSB7XG4gICAgICB0b2tlbnMucHVzaChwYXRoKTtcbiAgICAgIHBhdGggPSAnJztcbiAgICB9XG5cbiAgICB2YXIgcGFydGlhbCA9IHByZWZpeCAhPSBudWxsICYmIG5leHQgIT0gbnVsbCAmJiBuZXh0ICE9PSBwcmVmaXg7XG4gICAgdmFyIHJlcGVhdCA9IG1vZGlmaWVyID09PSAnKycgfHwgbW9kaWZpZXIgPT09ICcqJztcbiAgICB2YXIgb3B0aW9uYWwgPSBtb2RpZmllciA9PT0gJz8nIHx8IG1vZGlmaWVyID09PSAnKic7XG4gICAgdmFyIGRlbGltaXRlciA9IHJlc1syXSB8fCBkZWZhdWx0RGVsaW1pdGVyO1xuICAgIHZhciBwYXR0ZXJuID0gY2FwdHVyZSB8fCBncm91cDtcblxuICAgI
118HRva2Vucy5wdXNoKHtcbiAgICAgIG5hbWU6IG5hbWUgfHwga2V5KyssXG4gICAgICBwcmVmaXg6IHByZWZpeCB8fCAnJyxcbiAgICAgIGRlbGltaXRlcjogZGVsaW1pdGVyLFxuICAgICAgb3B0aW9uYWw6IG9wdGlvbmFsLFxuICAgICAgcmVwZWF0OiByZXBlYXQsXG4gICAgICBwYXJ0aWFsOiBwYXJ0aWFsLFxuICAgICAgYXN0ZXJpc2s6ICEhYXN0ZXJpc2ssXG4gICAgICBwYXR0ZXJuOiBwYXR0ZXJuID8gZXNjYXBlR3JvdXAocGF0dGVybikgOiAoYXN0ZXJpc2sgPyAnLionIDogJ1teJyArIGVzY2FwZVN0cmluZyhkZWxpbWl0ZXIpICsgJ10rPycpXG4gICAgfSk7XG4gIH1cblxuICAvLyBNYXRjaCBhbnkgY2hhcmFjdGVycyBzdGlsbCByZW1haW5pbmcuXG4gIGlmIChpbmRleCA8IHN0ci5sZW5ndGgpIHtcbiAgICBwYXRoICs9IHN0ci5zdWJzdHIoaW5kZXgpO1xuICB9XG5cbiAgLy8gSWYgdGhlIHBhdGggZXhpc3RzLCBwdXNoIGl0IG9udG8gdGhlIGVuZC5cbiAgaWYgKHBhdGgpIHtcbiAgICB0b2tlbnMucHVzaChwYXRoKTtcbiAgfVxuXG4gIHJldHVybiB0b2tlbnNcbn1cblxuLyoqXG4gKiBDb21waWxlIGEgc3RyaW5nIHRvIGEgdGVtcGxhdGUgZnVuY3Rpb24gZm9yIHRoZSBwYXRoLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gICAgICAgICAgICAgc3RyXG4gKiBAcGFyYW0gIHtPYmplY3Q9fSAgICAgICAgICAgIG9wdGlvbnNcbiAqIEByZXR1cm4geyFmdW5jdGlvbihPYmplY3Q9LCBPYmplY3Q9KX1cbiAqL1xuZnVuY3Rpb24gY29tcGlsZSAoc3RyLCBvcHRpb25zKSB7XG4gIHJldHVybiB0b2tlbnNUb0Z1bmN0aW9uKHBhcnNlKHN0ciwgb3B0aW9ucyksIG9wdGlvbnMpXG59XG5cbi8qKlxuICogUHJldHRpZXIgZW5jb2Rpbmcgb2YgVVJJIHBhdGggc2VnbWVudHMuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBlbmNvZGVVUklDb21wb25lbnRQcmV0dHkgKHN0cikge1xuICByZXR1cm4gZW5jb2RlVVJJKHN0cikucmVwbGFjZSgvW1xcLz8jXS9nLCBmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiAnJScgKyBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKClcbiAgfSlcbn1cblxuLyoqXG4gKiBFbmNvZGUgdGhlIGFzdGVyaXNrIHBhcmFtZXRlci4gU2ltaWxhciB0byBgcHJldHR5YCwgYnV0IGFsbG93cyBzbGFzaGVzLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ31cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZW5jb2RlQXN0ZXJpc2sgKHN0cikge1xuICByZXR1cm4gZW5jb2RlVVJJKHN0cikucmVwbGFjZSgvWz8jXS9nLCBmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiAnJScgKyBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKClcbiAgfSlcbn1cblxuLyoqXG4gKiBFeHBvc2UgYSBtZXRob2QgZm9yIHRyYW5zZm9ybWluZyB0b2tlbnMgaW50byB0aGUgcGF0aCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gdG9rZW5zVG9GdW5jdGlvbiAodG9rZW5zLCBvcHRpb25zKSB7XG4gIC8vIENvbXBpbGUgYWxsIHRoZSB0b2tlbnMgaW50byByZWdleHBzLlxuICB2YXIgbWF0Y2hlcyA9IG5ldyBBcnJheSh0b2tlbnMubGVuZ3RoKTtcblxuICAvLyBDb21waWxlIGFsbCB0aGUgcGF0dGVybnMgYmVmb3JlIGNvbXBpbGF0aW9uLlxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgIGlmICh0eXBlb2YgdG9rZW5zW2ldID09PSAnb2JqZWN0Jykge1xuICAgICAgbWF0Y2hlc1tpXSA9IG5ldyBSZWdFeHAoJ14oPzonICsgdG9rZW5zW2ldLnBhdHRlcm4gKyAnKSQnLCBmbGFncyhvcHRpb25zKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIG9wdHMpIHtcbiAgICB2YXIgcGF0aCA9ICcnO1xuICAgIHZhciBkYXRhID0gb2JqIHx8IHt9O1xuICAgIHZhciBvcHRpb25zID0gb3B0cyB8fCB7fTtcbiAgICB2YXIgZW5jb2RlID0gb3B0aW9ucy5wcmV0dHkgPyBlbmNvZGVVUklDb21wb25lbnRQcmV0dHkgOiBlbmNvZGVVUklDb21wb25lbnQ7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldO1xuXG4gICAgICBpZiAodHlwZW9mIHRva2VuID09PSAnc3RyaW5nJykge1xuICAgICAgICBwYXRoICs9IHRva2VuO1xuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIHZhciB2YWx1ZSA9IGRhdGFbdG9rZW4ubmFtZV07XG4gICAgICB2Y
118XIgc2VnbWVudDtcblxuICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgaWYgKHRva2VuLm9wdGlvbmFsKSB7XG4gICAgICAgICAgLy8gUHJlcGVuZCBwYXJ0aWFsIHNlZ21lbnQgcHJlZml4ZXMuXG4gICAgICAgICAgaWYgKHRva2VuLnBhcnRpYWwpIHtcbiAgICAgICAgICAgIHBhdGggKz0gdG9rZW4ucHJlZml4O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgXCInICsgdG9rZW4ubmFtZSArICdcIiB0byBiZSBkZWZpbmVkJylcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNhcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgaWYgKCF0b2tlbi5yZXBlYXQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBcIicgKyB0b2tlbi5uYW1lICsgJ1wiIHRvIG5vdCByZXBlYXQsIGJ1dCByZWNlaXZlZCBgJyArIEpTT04uc3RyaW5naWZ5KHZhbHVlKSArICdgJylcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBpZiAodG9rZW4ub3B0aW9uYWwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIFwiJyArIHRva2VuLm5hbWUgKyAnXCIgdG8gbm90IGJlIGVtcHR5JylcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZhbHVlLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgc2VnbWVudCA9IGVuY29kZSh2YWx1ZVtqXSk7XG5cbiAgICAgICAgICBpZiAoIW1hdGNoZXNbaV0udGVzdChzZWdtZW50KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYWxsIFwiJyArIHRva2VuLm5hbWUgKyAnXCIgdG8gbWF0Y2ggXCInICsgdG9rZW4ucGF0dGVybiArICdcIiwgYnV0IHJlY2VpdmVkIGAnICsgSlNPTi5zdHJpbmdpZnkoc2VnbWVudCkgKyAnYCcpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGF0aCArPSAoaiA9PT0gMCA/IHRva2VuLnByZWZpeCA6IHRva2VuLmRlbGltaXRlcikgKyBzZWdtZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgc2VnbWVudCA9IHRva2VuLmFzdGVyaXNrID8gZW5jb2RlQXN0ZXJpc2sodmFsdWUpIDogZW5jb2RlKHZhbHVlKTtcblxuICAgICAgaWYgKCFtYXRjaGVzW2ldLnRlc3Qoc2VnbWVudCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgXCInICsgdG9rZW4ubmFtZSArICdcIiB0byBtYXRjaCBcIicgKyB0b2tlbi5wYXR0ZXJuICsgJ1wiLCBidXQgcmVjZWl2ZWQgXCInICsgc2VnbWVudCArICdcIicpXG4gICAgICB9XG5cbiAgICAgIHBhdGggKz0gdG9rZW4ucHJlZml4ICsgc2VnbWVudDtcbiAgICB9XG5cbiAgICByZXR1cm4gcGF0aFxuICB9XG59XG5cbi8qKlxuICogRXNjYXBlIGEgcmVndWxhciBleHByZXNzaW9uIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IHN0clxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBlc2NhcGVTdHJpbmcgKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoLyhbLisqPz1eIToke30oKVtcXF18XFwvXFxcXF0pL2csICdcXFxcJDEnKVxufVxuXG4vKipcbiAqIEVzY2FwZSB0aGUgY2FwdHVyaW5nIGdyb3VwIGJ5IGVzY2FwaW5nIHNwZWNpYWwgY2hhcmFjdGVycyBhbmQgbWVhbmluZy5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGdyb3VwXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGVzY2FwZUdyb3VwIChncm91cCkge1xuICByZXR1cm4gZ3JvdXAucmVwbGFjZSgvKFs9ITokXFwvKCldKS9nLCAnXFxcXCQxJylcbn1cblxuLyoqXG4gKiBBdHRhY2ggdGhlIGtleXMgYXMgYSBwcm9wZXJ0eSBvZiB0aGUgcmVnZXhwLlxuICpcbiAqIEBwYXJhbSAgeyFSZWdFeHB9IHJlXG4gKiBAcGFyYW0gIHtBcnJheX0gICBrZXlzXG4gKiBAcmV0dXJuIHshUmVnRXhwfVxuICovXG5mdW5jdGlvbiBhdHRhY2hLZXlzIChyZSwga2V5cykge1xuICByZS5rZXlzID0ga2V5cztcbiAgcmV0dXJuIHJlXG59XG5cbi8qKlxuICogR2V0IHRoZSBmbGFncyBmb3IgYSByZWdleHAgZnJvbSB0aGUgb3B0aW9ucy5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZmxhZ3MgKG9wdGlvbnMpIHtcbiAgcmV0dXJuIG9wdGlvbnMgJiYgb3B0aW9ucy5zZW5zaXRpdmUgPyAnJyA6ICdpJ1xufVxuXG4vKipcbiAqIFB1bGwgb3V0IGtleXMgZnJvbSBhIHJlZ2V4cC5cbiAqXG4gKiBAcGFyYW0gIHshUmVnRXhwfSBwYXRoXG4gKiBAcGFyYW0gIHshQXJyYXl9ICBrZXlzXG4gKiBAcmV0dXJuIHshUmVnRXhwfVxuICovXG5mdW5jdGlvbiByZWdleHBUb1JlZ2V4cCAocGF0aCwga2V5cykge1xuICAvLyBVc2UgYSBuZWdhdGl2ZSBsb29rYWhlYWQgdG8gbWF0Y2ggb25seSBjYXB0dXJpbmcgZ3JvdXBzLlxuICB2YXIgZ3JvdXBzID0gcGF0aC5zb3VyY2UubWF0Y2goL1xcKCg/IVxcPykvZyk7XG5cbiAgaWYgKGdyb3Vwcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXlzLnB1c2goe1xuICAgICAgICBuYW1lOiBpLFxuICAgICAgICBwcmVmaXg6IG51bGwsXG4gICAgICAgIGRlbGltaXRlcjogbnVsbCxcbiAgICAgICAgb3B0aW9uYWw6IGZhbHNlLFxuICAgICAgICByZXBlYXQ6IGZhbHNlLFxuICAgICAgICBwYXJ0aWFsOiBmYWxzZSxcbiAgICAgICAgYXN0ZXJpc2s6IGZhbHNlLFxuICAgICAgICBwYXR0ZXJuOiBudWxsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXR0YWNoS2V5cyhwYXRoLCBrZXlzKVxufVxuXG4vKipcbiAqIFRyYW5zZm9ybSBhbiBhcnJheSBpbnRvIGEgcmVnZXhwLlxuICpcbiAqIEBwYXJhbSAgeyFBcnJheX0gIHBhdGhcbiAqIEBwYXJhbSAge0FycmF5fSAgIGtleXNcbiAqIEBwYXJhbSAgeyFPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4geyFSZWdFeHB9XG4gKi9cbmZ1bmN0aW9uIGFycmF5VG9SZWdleHAgKHBhdGgsIGtleXMsIG9wdGlvbnMpIHtcbiAgdmFyIHBhcnRzID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgcGFydHMucHVzaChwYXRoVG9SZWdleHAocGF0aFtpXSwga2V5cywgb3B0aW9ucykuc291cmNlKTtcbiAgfVxuXG4gIHZhciByZWdleHAgPSBuZXcgUmVnRXhwKCcoPzonICsgcGFydHMuam9pbignfCcpICsgJyknLCBmbGFncyhvcHRpb25zKSk7XG5cbiAgcmV0dXJuIGF0dGFjaEtleXMocmVnZXhwLCBrZXlzKVxufVxuXG4vKipcbiAqIENyZWF0ZSBhIHBhdGggcmVnZXhwIGZyb20gc3RyaW5nIGlucHV0LlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gIHBhdGhcbiAqIEBwYXJhbSAgeyFBcnJheX0gIGtleXNcbiAqIEBwYXJhbSAgeyFPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4geyFSZWdFeHB9XG4gKi9cbmZ1bmN0aW9uIHN0cmluZ1RvUmVnZXhwIChwYXRoLCBrZXlzLCBvcHRpb25zKSB7XG4gIHJldHVybi
118B0b2tlbnNUb1JlZ0V4cChwYXJzZShwYXRoLCBvcHRpb25zKSwga2V5cywgb3B0aW9ucylcbn1cblxuLyoqXG4gKiBFeHBvc2UgYSBmdW5jdGlvbiBmb3IgdGFraW5nIHRva2VucyBhbmQgcmV0dXJuaW5nIGEgUmVnRXhwLlxuICpcbiAqIEBwYXJhbSAgeyFBcnJheX0gICAgICAgICAgdG9rZW5zXG4gKiBAcGFyYW0gIHsoQXJyYXl8T2JqZWN0KT19IGtleXNcbiAqIEBwYXJhbSAge09iamVjdD19ICAgICAgICAgb3B0aW9uc1xuICogQHJldHVybiB7IVJlZ0V4cH1cbiAqL1xuZnVuY3Rpb24gdG9rZW5zVG9SZWdFeHAgKHRva2Vucywga2V5cywgb3B0aW9ucykge1xuICBpZiAoIWlzYXJyYXkoa2V5cykpIHtcbiAgICBvcHRpb25zID0gLyoqIEB0eXBlIHshT2JqZWN0fSAqLyAoa2V5cyB8fCBvcHRpb25zKTtcbiAgICBrZXlzID0gW107XG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICB2YXIgc3RyaWN0ID0gb3B0aW9ucy5zdHJpY3Q7XG4gIHZhciBlbmQgPSBvcHRpb25zLmVuZCAhPT0gZmFsc2U7XG4gIHZhciByb3V0ZSA9ICcnO1xuXG4gIC8vIEl0ZXJhdGUgb3ZlciB0aGUgdG9rZW5zIGFuZCBjcmVhdGUgb3VyIHJlZ2V4cCBzdHJpbmcuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHRva2VuID0gdG9rZW5zW2ldO1xuXG4gICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJvdXRlICs9IGVzY2FwZVN0cmluZyh0b2tlbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBwcmVmaXggPSBlc2NhcGVTdHJpbmcodG9rZW4ucHJlZml4KTtcbiAgICAgIHZhciBjYXB0dXJlID0gJyg/OicgKyB0b2tlbi5wYXR0ZXJuICsgJyknO1xuXG4gICAgICBrZXlzLnB1c2godG9rZW4pO1xuXG4gICAgICBpZiAodG9rZW4ucmVwZWF0KSB7XG4gICAgICAgIGNhcHR1cmUgKz0gJyg/OicgKyBwcmVmaXggKyBjYXB0dXJlICsgJykqJztcbiAgICAgIH1cblxuICAgICAgaWYgKHRva2VuLm9wdGlvbmFsKSB7XG4gICAgICAgIGlmICghdG9rZW4ucGFydGlhbCkge1xuICAgICAgICAgIGNhcHR1cmUgPSAnKD86JyArIHByZWZpeCArICcoJyArIGNhcHR1cmUgKyAnKSk/JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYXB0dXJlID0gcHJlZml4ICsgJygnICsgY2FwdHVyZSArICcpPyc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhcHR1cmUgPSBwcmVmaXggKyAnKCcgKyBjYXB0dXJlICsgJyknO1xuICAgICAgfVxuXG4gICAgICByb3V0ZSArPSBjYXB0dXJlO1xuICAgIH1cbiAgfVxuXG4gIHZhciBkZWxpbWl0ZXIgPSBlc2NhcGVTdHJpbmcob3B0aW9ucy5kZWxpbWl0ZXIgfHwgJy8nKTtcbiAgdmFyIGVuZHNXaXRoRGVsaW1pdGVyID0gcm91dGUuc2xpY2UoLWRlbGltaXRlci5sZW5ndGgpID09PSBkZWxpbWl0ZXI7XG5cbiAgLy8gSW4gbm9uLXN0cmljdCBtb2RlIHdlIGFsbG93IGEgc2xhc2ggYXQgdGhlIGVuZCBvZiBtYXRjaC4gSWYgdGhlIHBhdGggdG9cbiAgLy8gbWF0Y2ggYWxyZWFkeSBlbmRzIHdpdGggYSBzbGFzaCwgd2UgcmVtb3ZlIGl0IGZvciBjb25zaXN0ZW5jeS4gVGhlIHNsYXNoXG4gIC8vIGlzIHZhbGlkIGF0IHRoZSBlbmQgb2YgYSBwYXRoIG1hdGNoLCBub3QgaW4gdGhlIG1pZGRsZS4gVGhpcyBpcyBpbXBvcnRhbnRcbiAgLy8gaW4gbm9uLWVuZGluZyBtb2RlLCB3aGVyZSBcIi90ZXN0L1wiIHNob3VsZG4ndCBtYXRjaCBcIi90ZXN0Ly9yb3V0ZVwiLlxuICBpZiAoIXN0cmljdCkge1xuICAgIHJvdXRlID0gKGVuZHNXaXRoRGVsaW1pdGVyID8gcm91dGUuc2xpY2UoMCwgLWRlbGltaXRlci5sZW5ndGgpIDogcm91dGUpICsgJyg/OicgKyBkZWxpbWl0ZXIgKyAnKD89JCkpPyc7XG4gIH1cblxuICBpZiAoZW5kKSB7XG4gICAgcm91dGUgKz0gJyQnO1xuICB9IGVsc2Uge1xuICAgIC8vIEluIG5vbi1lbmRpbmcgbW9kZSwgd2UgbmVlZCB0aGUgY2FwdHVyaW5nIGdyb3VwcyB0byBtYXRjaCBhcyBtdWNoIGFzXG4gICAgLy8gcG9zc2libGUgYnkgdXNpbmcgYSBwb3NpdGl2ZSBsb29rYWhlYWQgdG8gdGhlIGVuZCBvciBuZXh0IHBhdGggc2VnbWVudC5cbiAgICByb3V0ZSArPSBzdHJpY3QgJiYgZW5kc1dpdGhEZWxpbWl0ZXIgPyAnJyA6ICcoPz0nICsgZGVsaW1pdGVyICsgJ3wkKSc7XG4gIH1cblxuICByZXR1cm4gYXR0YWNoS2V5cyhuZXcgUmVnRXhwKCdeJyArIHJvdXRlLCBmbGFncyhvcHRpb25zKSksIGtleXMpXG59XG5cbi8qKlxuICogTm9ybWFsaXplIHRoZSBnaXZlbiBwYXRoIHN0cmluZywgcmV0dXJuaW5nIGEgcmVndWxhciBleHByZXNzaW9uLlxuICpcbiAqIEFuIGVtcHR5IGFycmF5IGNhbiBiZSBwYXNzZWQgaW4gZm9yIHRoZSBrZXlzLCB3aGljaCB3aWxsIGhvbGQgdGhlXG4gKiBwbGFjZWhvbGRlciBrZXkgZGVzY3JpcHRpb25zLiBGb3IgZXhhbXBsZSwgdXNpbmcgYC91c2VyLzppZGAsIGBrZXlzYCB3aWxsXG4gKiBjb250YWluIGBbeyBuYW1lOiAnaWQnLCBkZWxpbWl0ZXI6ICcvJywgb3B0aW9uYWw6IGZhbHNlLCByZXBlYXQ6IGZhbHNlIH1dYC5cbiAqXG4gKiBAcGFyYW0gIHsoc3RyaW5nfFJlZ0V4cHxBcnJheSl9IHBhdGhcbiAqIEBwYXJhbSAgeyhBcnJheXxPYmplY3QpPX0gICAgICAga2V5c1xuICogQHBhcmFtICB7T2JqZWN0PX0gICAgICAgICAgICAgICBvcHRpb25zXG4gKiBAcmV0dXJuIHshUmVnRXhwfVxuICovXG5mdW5jdGlvbiBwYXRoVG9SZWdleHAgKHBhdGgsIGtleXMsIG9wdGlvbnMpIHtcbiAgaWYgKCFpc2FycmF5KGtleXMpKSB7XG4gICAgb3B0aW9ucyA9IC8qKiBAdHlwZSB7IU9iamVjdH0gKi8gKGtleXMgfHwgb3B0aW9ucyk7XG4gICAga2V5cyA9IFtdO1xuICB9XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgaWYgKHBhdGggaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICByZXR1cm4gcmVnZXhwVG9SZWdleHAocGF0aCwgLyoqIEB0eXBlIHshQXJyYXl9ICovIChrZXlzKSlcbiAgfVxuXG4gIGlmIChpc2FycmF5KHBhdGgpKSB7XG4gICAgcmV0dXJuIGFycmF5VG9SZWdleHAoLyoqIEB0eXBlIHshQXJyYXl9ICovIChwYXRoKSwgLyoqIEB0eXBlIHshQXJyYXl9ICovIChrZXlzKSwgb3B0aW9ucylcbiAgfVxuXG4gIHJldHVybi
118BzdHJpbmdUb1JlZ2V4cCgvKiogQHR5cGUge3N0cmluZ30gKi8gKHBhdGgpLCAvKiogQHR5cGUgeyFBcnJheX0gKi8gKGtleXMpLCBvcHRpb25zKVxufVxucGF0aFRvUmVnZXhwXzEucGFyc2UgPSBwYXJzZV8xO1xucGF0aFRvUmVnZXhwXzEuY29tcGlsZSA9IGNvbXBpbGVfMTtcbnBhdGhUb1JlZ2V4cF8xLnRva2Vuc1RvRnVuY3Rpb24gPSB0b2tlbnNUb0Z1bmN0aW9uXzE7XG5wYXRoVG9SZWdleHBfMS50b2tlbnNUb1JlZ0V4cCA9IHRva2Vuc1RvUmVnRXhwXzE7XG5cbi8qICAqL1xuXG4vLyAkZmxvdy1kaXNhYmxlLWxpbmVcbnZhciByZWdleHBDb21waWxlQ2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG5mdW5jdGlvbiBmaWxsUGFyYW1zIChcbiAgcGF0aCxcbiAgcGFyYW1zLFxuICByb3V0ZU1zZ1xuKSB7XG4gIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgdHJ5IHtcbiAgICB2YXIgZmlsbGVyID1cbiAgICAgIHJlZ2V4cENvbXBpbGVDYWNoZVtwYXRoXSB8fFxuICAgICAgKHJlZ2V4cENvbXBpbGVDYWNoZVtwYXRoXSA9IHBhdGhUb1JlZ2V4cF8xLmNvbXBpbGUocGF0aCkpO1xuXG4gICAgLy8gRml4ICMyNTA1IHJlc29sdmluZyBhc3RlcmlzayByb3V0ZXMgeyBuYW1lOiAnbm90LWZvdW5kJywgcGFyYW1zOiB7IHBhdGhNYXRjaDogJy9ub3QtZm91bmQnIH19XG4gICAgLy8gYW5kIGZpeCAjMzEwNiBzbyB0aGF0IHlvdSBjYW4gd29yayB3aXRoIGxvY2F0aW9uIGRlc2NyaXB0b3Igb2JqZWN0IGhhdmluZyBwYXJhbXMucGF0aE1hdGNoIGVxdWFsIHRvIGVtcHR5IHN0cmluZ1xuICAgIGlmICh0eXBlb2YgcGFyYW1zLnBhdGhNYXRjaCA9PT0gJ3N0cmluZycpIHsgcGFyYW1zWzBdID0gcGFyYW1zLnBhdGhNYXRjaDsgfVxuXG4gICAgcmV0dXJuIGZpbGxlcihwYXJhbXMsIHsgcHJldHR5OiB0cnVlIH0pXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgLy8gRml4ICMzMDcyIG5vIHdhcm4gaWYgYHBhdGhNYXRjaGAgaXMgc3RyaW5nXG4gICAgICB3YXJuKHR5cGVvZiBwYXJhbXMucGF0aE1hdGNoID09PSAnc3RyaW5nJywgKFwibWlzc2luZyBwYXJhbSBmb3IgXCIgKyByb3V0ZU1zZyArIFwiOiBcIiArIChlLm1lc3NhZ2UpKSk7XG4gICAgfVxuICAgIHJldHVybiAnJ1xuICB9IGZpbmFsbHkge1xuICAgIC8vIGRlbGV0ZSB0aGUgMCBpZiBpdCB3YXMgYWRkZWRcbiAgICBkZWxldGUgcGFyYW1zWzBdO1xuICB9XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBub3JtYWxpemVMb2NhdGlvbiAoXG4gIHJhdyxcbiAgY3VycmVudCxcbiAgYXBwZW5kLFxuICByb3V0ZXJcbikge1xuICB2YXIgbmV4dCA9IHR5cGVvZiByYXcgPT09ICdzdHJpbmcnID8geyBwYXRoOiByYXcgfSA6IHJhdztcbiAgLy8gbmFtZWQgdGFyZ2V0XG4gIGlmIChuZXh0Ll9ub3JtYWxpemVkKSB7XG4gICAgcmV0dXJuIG5leHRcbiAgfSBlbHNlIGlmIChuZXh0Lm5hbWUpIHtcbiAgICBuZXh0ID0gZXh0ZW5kKHt9LCByYXcpO1xuICAgIHZhciBwYXJhbXMgPSBuZXh0LnBhcmFtcztcbiAgICBpZiAocGFyYW1zICYmIHR5cGVvZiBwYXJhbXMgPT09ICdvYmplY3QnKSB7XG4gICAgICBuZXh0LnBhcmFtcyA9IGV4dGVuZCh7fSwgcGFyYW1zKTtcbiAgICB9XG4gICAgcmV0dXJuIG5leHRcbiAgfVxuXG4gIC8vIHJlbGF0aXZlIHBhcmFtc1xuICBpZiAoIW5leHQucGF0aCAmJiBuZXh0LnBhcmFtcyAmJiBjdXJyZW50KSB7XG4gICAgbmV4dCA9IGV4dGVuZCh7fSwgbmV4dCk7XG4gICAgbmV4dC5fbm9ybWFsaXplZCA9IHRydWU7XG4gICAgdmFyIHBhcmFtcyQxID0gZXh0ZW5kKGV4dGVuZCh7fSwgY3VycmVudC5wYXJhbXMpLCBuZXh0LnBhcmFtcyk7XG4gICAgaWYgKGN1cnJlbnQubmFtZSkge1xuICAgICAgbmV4dC5uYW1lID0gY3VycmVudC5uYW1lO1xuICAgICAgbmV4dC5wYXJhbXMgPSBwYXJhbXMkMTtcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnQubWF0Y2hlZC5sZW5ndGgpIHtcbiAgICAgIHZhciByYXdQYXRoID0gY3VycmVudC5tYXRjaGVkW2N1cnJlbnQubWF0Y2hlZC5sZW5ndGggLSAxXS5wYXRoO1xuICAgICAgbmV4dC5wYXRoID0gZmlsbFBhcmFtcyhyYXdQYXRoLCBwYXJhbXMkMSwgKFwicGF0aCBcIiArIChjdXJyZW50LnBhdGgpKSk7XG4gICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB3YXJuKGZhbHNlLCBcInJlbGF0aXZlIHBhcmFtcyBuYXZpZ2F0aW9uIHJlcXVpcmVzIGEgY3VycmVudCByb3V0ZS5cIik7XG4gICAgfVxuICAgIHJldHVybiBuZXh0XG4gIH1cblxuICB2YXIgcGFyc2VkUGF0aCA9IHBhcnNlUGF0aChuZXh0LnBhdGggfHwgJycpO1xuICB2YXIgYmFzZVBhdGggPSAoY3VycmVudCAmJiBjdXJyZW50LnBhdGgpIHx8ICcvJztcbiAgdmFyIHBhdGggPSBwYXJzZWRQYXRoLnBhdGhcbiAgICA/IHJlc29sdmVQYXRoKHBhcnNlZFBhdGgucGF0aCwgYmFzZVBhdGgsIGFwcGVuZCB8fCBuZXh0LmFwcGVuZClcbiAgICA6IGJhc2VQYXRoO1xuXG4gIHZhciBxdWVyeSA9IHJlc29sdmVRdWVyeShcbiAgICBwYXJzZWRQYXRoLnF1ZXJ5LFxuICAgIG5leHQucXVlcnksXG4gICAgcm91dGVyICYmIHJvdXRlci5vcHRpb25zLnBhcnNlUXVlcnlcbiAgKTtcblxuICB2YXIgaGFzaCA9IG5leHQuaGFzaCB8fCBwYXJzZWRQYXRoLmhhc2g7XG4gIGlmIChoYXNoICYmIGhhc2guY2hhckF0KDApICE9PSAnIycpIHtcbiAgICBoYXNoID0gXCIjXCIgKyBoYXNoO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBfbm9ybWFsaXplZDogdHJ1ZSxcbiAgICBwYXRoOiBwYXRoLFxuICAgIHF1ZXJ5OiBxdWVyeSxcbiAgICBoYXNoOiBoYXNoXG4gIH1cbn1cblxuLyogICovXG5cbi8vIHdvcmsgYXJvdW5kIHdlaXJkIGZsb3cgYnVnXG52YXIgdG9UeXBlcyA9IFtTdHJpbmcsIE9iamVjdF07XG52YXIgZXZlbnRUeXBlcyA9IFtTdHJpbmcsIEFycmF5XTtcblxudmFyIG5vb3AgPSBmdW5jdGlvbiAoKSB7fTtcblxudmFyIHdhcm5lZEN1c3RvbVNsb3Q7XG52YXIgd2FybmVkVGFnUHJvcDtcbnZhciB3YXJuZWRFdmVudFByb3A7XG5cbnZhciBMaW5rID0ge1xuICBuYW1lOiAnUm91dGVyTGluaycsXG4gIHByb3BzOiB7XG4gICAgdG86IHtcbiAgICAgIHR5cGU6IHRvVHlwZXMsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgdGFnOiB7XG4gICAgICB0eX
118BlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnYSdcbiAgICB9LFxuICAgIGN1c3RvbTogQm9vbGVhbixcbiAgICBleGFjdDogQm9vbGVhbixcbiAgICBleGFjdFBhdGg6IEJvb2xlYW4sXG4gICAgYXBwZW5kOiBCb29sZWFuLFxuICAgIHJlcGxhY2U6IEJvb2xlYW4sXG4gICAgYWN0aXZlQ2xhc3M6IFN0cmluZyxcbiAgICBleGFjdEFjdGl2ZUNsYXNzOiBTdHJpbmcsXG4gICAgYXJpYUN1cnJlbnRWYWx1ZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ3BhZ2UnXG4gICAgfSxcbiAgICBldmVudDoge1xuICAgICAgdHlwZTogZXZlbnRUeXBlcyxcbiAgICAgIGRlZmF1bHQ6ICdjbGljaydcbiAgICB9XG4gIH0sXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyIChoKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgcm91dGVyID0gdGhpcy4kcm91dGVyO1xuICAgIHZhciBjdXJyZW50ID0gdGhpcy4kcm91dGU7XG4gICAgdmFyIHJlZiA9IHJvdXRlci5yZXNvbHZlKFxuICAgICAgdGhpcy50byxcbiAgICAgIGN1cnJlbnQsXG4gICAgICB0aGlzLmFwcGVuZFxuICAgICk7XG4gICAgdmFyIGxvY2F0aW9uID0gcmVmLmxvY2F0aW9uO1xuICAgIHZhciByb3V0ZSA9IHJlZi5yb3V0ZTtcbiAgICB2YXIgaHJlZiA9IHJlZi5ocmVmO1xuXG4gICAgdmFyIGNsYXNzZXMgPSB7fTtcbiAgICB2YXIgZ2xvYmFsQWN0aXZlQ2xhc3MgPSByb3V0ZXIub3B0aW9ucy5saW5rQWN0aXZlQ2xhc3M7XG4gICAgdmFyIGdsb2JhbEV4YWN0QWN0aXZlQ2xhc3MgPSByb3V0ZXIub3B0aW9ucy5saW5rRXhhY3RBY3RpdmVDbGFzcztcbiAgICAvLyBTdXBwb3J0IGdsb2JhbCBlbXB0eSBhY3RpdmUgY2xhc3NcbiAgICB2YXIgYWN0aXZlQ2xhc3NGYWxsYmFjayA9XG4gICAgICBnbG9iYWxBY3RpdmVDbGFzcyA9PSBudWxsID8gJ3JvdXRlci1saW5rLWFjdGl2ZScgOiBnbG9iYWxBY3RpdmVDbGFzcztcbiAgICB2YXIgZXhhY3RBY3RpdmVDbGFzc0ZhbGxiYWNrID1cbiAgICAgIGdsb2JhbEV4YWN0QWN0aXZlQ2xhc3MgPT0gbnVsbFxuICAgICAgICA/ICdyb3V0ZXItbGluay1leGFjdC1hY3RpdmUnXG4gICAgICAgIDogZ2xvYmFsRXhhY3RBY3RpdmVDbGFzcztcbiAgICB2YXIgYWN0aXZlQ2xhc3MgPVxuICAgICAgdGhpcy5hY3RpdmVDbGFzcyA9PSBudWxsID8gYWN0aXZlQ2xhc3NGYWxsYmFjayA6IHRoaXMuYWN0aXZlQ2xhc3M7XG4gICAgdmFyIGV4YWN0QWN0aXZlQ2xhc3MgPVxuICAgICAgdGhpcy5leGFjdEFjdGl2ZUNsYXNzID09IG51bGxcbiAgICAgICAgPyBleGFjdEFjdGl2ZUNsYXNzRmFsbGJhY2tcbiAgICAgICAgOiB0aGlzLmV4YWN0QWN0aXZlQ2xhc3M7XG5cbiAgICB2YXIgY29tcGFyZVRhcmdldCA9IHJvdXRlLnJlZGlyZWN0ZWRGcm9tXG4gICAgICA/IGNyZWF0ZVJvdXRlKG51bGwsIG5vcm1hbGl6ZUxvY2F0aW9uKHJvdXRlLnJlZGlyZWN0ZWRGcm9tKSwgbnVsbCwgcm91dGVyKVxuICAgICAgOiByb3V0ZTtcblxuICAgIGNsYXNzZXNbZXhhY3RBY3RpdmVDbGFzc10gPSBpc1NhbWVSb3V0ZShjdXJyZW50LCBjb21wYXJlVGFyZ2V0LCB0aGlzLmV4YWN0UGF0aCk7XG4gICAgY2xhc3Nlc1thY3RpdmVDbGFzc10gPSB0aGlzLmV4YWN0IHx8IHRoaXMuZXhhY3RQYXRoXG4gICAgICA/IGNsYXNzZXNbZXhhY3RBY3RpdmVDbGFzc11cbiAgICAgIDogaXNJbmNsdWRlZFJvdXRlKGN1cnJlbnQsIGNvbXBhcmVUYXJnZXQpO1xuXG4gICAgdmFyIGFyaWFDdXJyZW50VmFsdWUgPSBjbGFzc2VzW2V4YWN0QWN0aXZlQ2xhc3NdID8gdGhpcy5hcmlhQ3VycmVudFZhbHVlIDogbnVsbDtcblxuICAgIHZhciBoYW5kbGVyID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChndWFyZEV2ZW50KGUpKSB7XG4gICAgICAgIGlmICh0aGlzJDEucmVwbGFjZSkge1xuICAgICAgICAgIHJvdXRlci5yZXBsYWNlKGxvY2F0aW9uLCBub29wKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByb3V0ZXIucHVzaChsb2NhdGlvbiwgbm9vcCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIG9uID0geyBjbGljazogZ3VhcmRFdmVudCB9O1xuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZXZlbnQpKSB7XG4gICAgICB0aGlzLmV2ZW50LmZvckVhY2goZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgb25bZV0gPSBoYW5kbGVyO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uW3RoaXMuZXZlbnRdID0gaGFuZGxlcjtcbiAgICB9XG5cbiAgICB2YXIgZGF0YSA9IHsgY2xhc3M6IGNsYXNzZXMgfTtcblxuICAgIHZhciBzY29wZWRTbG90ID1cbiAgICAgICF0aGlzLiRzY29wZWRTbG90cy4kaGFzTm9ybWFsICYmXG4gICAgICB0aGlzLiRzY29wZWRTbG90cy5kZWZh
118dWx0ICYmXG4gICAgICB0aGlzLiRzY29wZWRTbG90cy5kZWZhdWx0KHtcbiAgICAgICAgaHJlZjogaHJlZixcbiAgICAgICAgcm91dGU6IHJvdXRlLFxuICAgICAgICBuYXZpZ2F0ZTogaGFuZGxlcixcbiAgICAgICAgaXNBY3RpdmU6IGNsYXNzZXNbYWN0aXZlQ2xhc3NdLFxuICAgICAgICBpc0V4YWN0QWN0aXZlOiBjbGFzc2VzW2V4YWN0QWN0aXZlQ2xhc3NdXG4gICAgICB9KTtcblxuICAgIGlmIChzY29wZWRTbG90KSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhdGhpcy5jdXN0b20pIHtcbiAgICAgICAgIXdhcm5lZEN1c3RvbVNsb3QgJiYgd2FybihmYWxzZSwgJ0luIFZ1ZSBSb3V0ZXIgNCwgdGhlIHYtc2xvdCBBUEkgd2lsbCBieSBkZWZhdWx0IHdyYXAgaXRzIGNvbnRlbnQgd2l0aCBhbiA8YT4gZWxlbWVudC4gVXNlIHRoZSBjdXN0b20gcHJvcCB0byByZW1vdmUgdGhpcyB3YXJuaW5nOlxcbjxyb3V0ZXItbGluayB2LXNsb3Q9XCJ7IG5hdmlnYXRlLCBocmVmIH1cIiBjdXN0b20+PC9yb3V0ZXItbGluaz5cXG4nKTtcbiAgICAgICAgd2FybmVkQ3VzdG9tU2xvdCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoc2NvcGVkU2xvdC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIHNjb3BlZFNsb3RbMF1cbiAgICAgIH0gZWxzZSBpZiAoc2NvcGVkU2xvdC5sZW5ndGggPiAxIHx8ICFzY29wZWRTbG90Lmxlbmd0aCkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgIChcIjxyb3V0ZXItbGluaz4gd2l0aCB0bz1cXFwiXCIgKyAodGhpcy50bykgKyBcIlxcXCIgaXMgdHJ5aW5nIHRvIHVzZSBhIHNjb3BlZCBzbG90IGJ1dCBpdCBkaWRuJ3QgcHJvdmlkZSBleGFjdGx5IG9uZSBjaGlsZC4gV3JhcHBpbmcgdGhlIGNvbnRlbnQgd2l0aCBhIHNwYW4gZWxlbWVudC5cIilcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzY29wZWRTbG90Lmxlbmd0aCA9PT0gMCA/IGgoKSA6IGgoJ3NwYW4nLCB7fSwgc2NvcGVkU2xvdClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKCd0YWcnIGluIHRoaXMuJG9wdGlvbnMucHJvcHNEYXRhICYmICF3YXJuZWRUYWdQcm9wKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgXCI8cm91dGVyLWxpbms+J3MgdGFnIHByb3AgaXMgZGVwcmVjYXRlZCBhbmQgaGFzIGJlZW4gcmVtb3ZlZCBpbiBWdWUgUm91dGVyIDQuIFVzZSB0aGUgdi1zbG90IE
118FQSSB0byByZW1vdmUgdGhpcyB3YXJuaW5nOiBodHRwczovL25leHQucm91dGVyLnZ1ZWpzLm9yZy9ndWlkZS9taWdyYXRpb24vI3JlbW92YWwtb2YtZXZlbnQtYW5kLXRhZy1wcm9wcy1pbi1yb3V0ZXItbGluay5cIlxuICAgICAgICApO1xuICAgICAgICB3YXJuZWRUYWdQcm9wID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICgnZXZlbnQnIGluIHRoaXMuJG9wdGlvbnMucHJvcHNEYXRhICYmICF3YXJuZWRFdmVudFByb3ApIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICBcIjxyb3V0ZXItbGluaz4ncyBldmVudCBwcm9wIGlzIGRlcHJlY2F0ZWQgYW5kIGhhcyBiZWVuIHJlbW92ZWQgaW4gVnVlIFJvdXRlciA0LiBVc2UgdGhlIHYtc2xvdCBBUEkgdG8gcmVtb3ZlIHRoaXMgd2FybmluZzogaHR0cHM6Ly9uZXh0LnJvdXRlci52dWVqcy5vcmcvZ3VpZGUvbWlncmF0aW9uLyNyZW1vdmFsLW9mLWV2ZW50LWFuZC10YWctcHJvcHMtaW4tcm91dGVyLWxpbmsuXCJcbiAgICAgICAgKTtcbiAgICAgICAgd2FybmVkRXZlbnRQcm9wID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy50YWcgPT09ICdhJykge1xuICAgICAgZGF0YS5vbiA9IG9uO1xuICAgICAgZGF0YS5hdHRycyA9IHsgaHJlZjogaHJlZiwgJ2FyaWEtY3VycmVudCc6IGFyaWFDdXJyZW50VmFsdWUgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZmluZCB0aGUgZmlyc3QgPGE+IGNoaWxkIGFuZCBhcHBseSBsaXN0ZW5lciBhbmQgaHJlZlxuICAgICAgdmFyIGEgPSBmaW5kQW5jaG9yKHRoaXMuJHNsb3RzLmRlZmF1bHQpO1xuICAgICAgaWYgKGEpIHtcbiAgICAgICAgLy8gaW4gY2FzZSB0aGUgPGE+IGlzIGEgc3RhdGljIG5vZGVcbiAgICAgICAgYS5pc1N0YXRpYyA9IGZhbHNlO1xuICAgICAgICB2Y
118XIgYURhdGEgPSAoYS5kYXRhID0gZXh0ZW5kKHt9LCBhLmRhdGEpKTtcbiAgICAgICAgYURhdGEub24gPSBhRGF0YS5vbiB8fCB7fTtcbiAgICAgICAgLy8gdHJhbnNmb3JtIGV4aXN0aW5nIGV2ZW50cyBpbiBib3RoIG9iamVjdHMgaW50byBhcnJheXMgc28gd2UgY2FuIHB1c2ggbGF0ZXJcbiAgICAgICAgZm9yICh2YXIgZXZlbnQgaW4gYURhdGEub24pIHtcbiAgICAgICAgICB2YXIgaGFuZGxlciQxID0gYURhdGEub25bZXZlbnRdO1xuICAgICAgICAgIGlmIChldmVudCBpbiBvbikge1xuICAgICAgICAgICAgYURhdGEub25bZXZlbnRdID0gQXJyYXkuaXNBcnJheShoYW5kbGVyJDEpID8gaGFuZGxlciQxIDogW2hhbmRsZXIkMV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGFwcGVuZCBuZXcgbGlzdGVuZXJzIGZvciByb3V0ZXItbGlua1xuICAgICAgICBmb3IgKHZhciBldmVudCQxIGluIG9uKSB7XG4gICAgICAgICAgaWYgKGV2ZW50JDEgaW4gYURhdGEub24pIHtcbiAgICAgICAgICAgIC8vIG9uW2V2ZW50XSBpcyBhbHdheXMgYSBmdW5jdGlvblxuICAgICAgICAgICAgYURhdGEub25bZXZlbnQkMV0ucHVzaChvbltldmVudCQxXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFEYXRhLm9uW2V2ZW50JDFdID0gaGFuZGxlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYUF0dHJzID0gKGEuZGF0YS5hdHRycyA9IGV4dGVuZCh7fSwgYS5kYXRhLmF0dHJzKSk7XG4gICAgICAgIGFBdHRycy5ocmVmID0gaHJlZjtcbiAgICAgICAgYUF0dHJzWydhcmlhLWN1cnJlbnQnXSA9IGFyaWFDdXJyZW50VmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBkb2Vzbid0IGhhdmUgPGE+IGNoaWxkLCBhcHBseSBsaXN0ZW5lciB0byBzZWxmXG4gICAgICAgIGRhdGEub24gPSBvbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaCh0aGlzLnRhZywgZGF0YSwgdGhpcy4kc2xvdHMuZGVmYXVsdClcbiAgfVxufTtcblxuZnVuY3Rpb24gZ3VhcmRFdmVudCAoZSkge1xuICAvLyBkb24ndCByZWRpcmVjdCB3aXRoIGNvbnRyb2wga2V5c1xuICBpZiAoZS5tZXRhS2V5IHx8IGUuYWx0S2V5IHx8IGUuY3RybEtleSB8fCBlLnNoaWZ0S2V5KSB7IHJldHVybiB9XG4gIC8vIGRvbid0IHJlZGlyZWN0IHdoZW4gcHJldmVudERlZmF1bHQgY2FsbGVkXG4gIGlmIChlLmRlZmF1bHRQcmV2ZW50ZWQpIHsgcmV0dXJuIH1cbiAgLy8gZG9uJ3QgcmVkaXJlY3Qgb24gcmlnaHQgY2xpY2tcbiAgaWYgKGUuYnV0dG9uICE9PSB1bmRlZmluZWQgJiYgZS5idXR0b24gIT09IDApIHsgcmV0dXJuIH1cbiAgLy8gZG9uJ3QgcmVkaXJlY3QgaWYgYHRhcmdldD1cIl9ibGFua1wiYFxuICBpZiAoZS5jdXJyZW50VGFyZ2V0ICYmIGUuY3VycmVudFRhcmdldC5nZXRBdHRyaWJ1dGUpIHtcbiAgICB2YXIgdGFyZ2V0ID0gZS5jdXJyZW50VGFyZ2V0LmdldEF0dHJpYnV0ZSgndGFyZ2V0Jyk7XG4gICAgaWYgKC9cXGJfYmxhbmtcXGIvaS50ZXN0KHRhcmdldCkpIHsgcmV0dXJuIH1cbiAgfVxuICAvLyB0aGlzIG1heSBiZSBhIFdlZXggZXZlbnQgd2hpY2ggZG9lc24ndCBoYXZlIHRoaXMgbWV0aG9kXG4gIGlmIChlLnByZXZlbnREZWZhdWx0KSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIGZpbmRBbmNob3IgKGNoaWxkcmVuKSB7XG4gIGlmIChjaGlsZHJlbikge1xuICAgIHZhciBjaGlsZDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgICAgaWYgKGNoaWxkLnRhZyA9PT0gJ2EnKSB7XG4gICAgICAgIHJldHVybiBjaGlsZFxuICAgICAgfVxuICAgICAgaWYgKGNoaWxkLmNoaWxkcmVuICYmIChjaGlsZCA9IGZpbmRBbmNob3IoY2hpbGQuY2hpbGRyZW4pKSkge1xuICAgICAgICByZXR1cm4gY2hpbGRcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIF9WdWU7XG5cbmZ1bmN0aW9uIGluc3RhbGwgKFZ1ZSkge1xuICBpZiAoaW5zdGFsbC5pbnN0YWxsZWQgJiYgX1Z1ZSA9PT0gVnVlKSB7IHJldHVybiB9XG4gIGluc3RhbGwuaW5zdGFsbGVkID0gdHJ1ZTtcblxuICBfVnVlID0gVnVlO1xuXG4gIHZhciBpc0RlZiA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2ICE9PSB1bmRlZmluZWQ7IH07XG5cbiAgdmFyIHJlZ2lzdGVySW5zdGFuY2UgPSBmdW5jdGlvbiAodm0sIGNhbGxWYWwpIHtcbiAgICB2YXIgaSA9IHZtLiRvcHRpb25zLl9wYXJlbnRWbm9kZTtcbiAgICBpZiAoaXNEZWYoaSkgJiYgaXNEZWYoaSA9IGkuZGF0YSkgJiYgaXNEZWYoaSA9IGkucmVnaXN0ZXJSb3V0ZUluc3RhbmNlKSkge1xuICAgICAgaSh2bSwgY2FsbFZhbCk7XG4gICAgfVxuICB9O1xuXG4gIFZ1ZS5taXhpbih7XG4gICAgYmVmb3JlQ3JlYXRlOiBmdW5jdGlvbiBiZWZvcmVDcmVhdGUgKCkge1xuICAgICAgaWYgKGlzRGVmKHRoaXMuJG9wdGlvbnMucm91dGVyKSkge1xuICAgICAgICB0aGlzLl9yb3V0ZXJSb290ID0gdGhpcztcbiAgICAgICAgdGhpcy5fcm91dGVyID0gdGhpcy4kb3B0aW9ucy5yb3V0ZXI7XG4gICAgICAgIHRoaXMuX3JvdXRlci5pbml0KHRoaXMpO1xuICAgICAgICBWdWUudXRpbC5kZWZpbmVSZWFjdGl2ZSh0aGlzLCAnX3JvdXRlJywgdGhpcy5fcm91dGVyLmhpc3RvcnkuY3VycmVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9yb3V0ZXJSb290ID0gKHRoaXMuJHBhcmVudCAmJiB0aGlzLiRwYXJlbnQuX3JvdXRlclJvb3QpIHx8IHRoaXM7XG4gICAgICB9XG4gICAgICByZWdpc3Rlckluc3RhbmNlKHRoaXMsIHRoaXMpO1xuICAgIH0sXG4gICAgZGVzdHJveWVkOiBmdW5jdGlvbiBkZXN0cm95ZWQgKCkge1xuICAgICAgcmVnaXN0ZXJJbnN0YW5jZSh0aGlzKTtcbiAgICB9XG4gIH0pO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUucHJvdG90eXBlLCAnJHJvdXRlcicsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCAoKSB7IHJldHVybiB0aGlzLl9yb3V0ZXJSb290Ll9yb3V0ZXIgfVxuICB9KTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLnByb3RvdHlwZSwgJyRyb3V0ZScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCAoKSB7IHJldHVybi
118B0aGlzLl9yb3V0ZXJSb290Ll9yb3V0ZSB9XG4gIH0pO1xuXG4gIFZ1ZS5jb21wb25lbnQoJ1JvdXRlclZpZXcnLCBWaWV3KTtcbiAgVnVlLmNvbXBvbmVudCgnUm91dGVyTGluaycsIExpbmspO1xuXG4gIHZhciBzdHJhdHMgPSBWdWUuY29uZmlnLm9wdGlvbk1lcmdlU3RyYXRlZ2llcztcbiAgLy8gdXNlIHRoZSBzYW1lIGhvb2sgbWVyZ2luZyBzdHJhdGVneSBmb3Igcm91dGUgaG9va3NcbiAgc3RyYXRzLmJlZm9yZVJvdXRlRW50ZXIgPSBzdHJhdHMuYmVmb3JlUm91dGVMZWF2ZSA9IHN0cmF0cy5iZWZvcmVSb3V0ZVVwZGF0ZSA9IHN0cmF0cy5jcmVhdGVkO1xufVxuXG4vKiAgKi9cblxudmFyIGluQnJvd3NlciA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnO1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gY3JlYXRlUm91dGVNYXAgKFxuICByb3V0ZXMsXG4gIG9sZFBhdGhMaXN0LFxuICBvbGRQYXRoTWFwLFxuICBvbGROYW1lTWFwLFxuICBwYXJlbnRSb3V0ZVxuKSB7XG4gIC8vIHRoZSBwYXRoIGxpc3QgaXMgdXNlZCB0byBjb250cm9sIHBhdGggbWF0Y2hpbmcgcHJpb3JpdHlcbiAgdmFyIHBhdGhMaXN0ID0gb2xkUGF0aExpc3QgfHwgW107XG4gIC8vICRmbG93LWRpc2FibGUtbGluZVxuICB2YXIgcGF0aE1hcCA9IG9sZFBhdGhNYXAgfHwgT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gIHZhciBuYW1lTWFwID0gb2xkTmFtZU1hcCB8fCBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIHJvdXRlcy5mb3JFYWNoKGZ1bmN0aW9uIChyb3V0ZSkge1xuICAgIGFkZFJvdXRlUmVjb3JkKHBhdGhMaXN0LCBwYXRoTWFwLCBuYW1lTWFwLCByb3V0ZSwgcGFyZW50Um91dGUpO1xuICB9KTtcblxuICAvLyBlbnN1cmUgd2lsZGNhcmQgcm91dGVzIGFyZSBhbHdheXMgYXQgdGhlIGVuZFxuICBmb3IgKHZhciBpID0gMCwgbCA9IHBhdGhMaXN0Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGlmIChwYXRoTGlzdFtpXSA9PT0gJyonKSB7XG4gICAgICBwYXRoTGlzdC5wdXNoKHBhdGhMaXN0LnNwbGljZShpLCAxKVswXSk7XG4gICAgICBsLS07XG4gICAgICBpLS07XG4gICAgfVxuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgLy8gd2FybiBpZiByb3V0ZXMgZG8gbm90IGluY2x1ZGUgbGVhZGluZyBzbGFzaGVzXG4gICAgdmFyIGZvdW5kID0gcGF0aExpc3RcbiAgICAvLyBjaGVjayBmb3IgbWlzc2luZyBsZWFkaW5nIHNsYXNoXG4gICAgICAuZmlsdGVyKGZ1bmN0aW9uIChwYXRoKSB7IHJldHVybiBwYXRoICYmIHBhdGguY2hhckF0KDApICE9PSAnKicgJiYgcGF0aC5jaGFyQXQoMCkgIT09ICcvJzsgfSk7XG5cbiAgICBpZiAoZm91bmQubGVuZ3RoID4gMCkge1xuICAgICAgdmFyIHBhdGhOYW1lcyA9IGZvdW5kLm1hcChmdW5jdGlvbiAocGF0aCkgeyByZXR1cm4gKFwiLSBcIiArIHBhdGgpOyB9KS5qb2luKCdcXG4nKTtcbiAgICAgIHdhcm4oZmFsc2UsIChcIk5vbi1uZXN0ZWQgcm91dGVzIG11c3QgaW5jbHVkZSBhIGxlYWRpbmcgc2xhc2ggY2hhcmFjdGVyLiBGaXggdGhlIGZvbGxvd2luZyByb3V0ZXM6IFxcblwiICsgcGF0aE5hbWVzKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwYXRoTGlzdDogcGF0aExpc3QsXG4gICAgcGF0aE1hcDogcGF0aE1hcCxcbiAgICBuYW1lTWFwOiBuYW1lTWFwXG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkUm91dGVSZWNvcmQgKFxuICBwYXRoTGlzdCxcbiAgcGF0aE1hcCxcbiAgbmFtZU1hcCxcbiAgcm91dGUsXG4gIHBhcmVudCxcbiAgbWF0Y2hBc1xuKSB7XG4gIHZhciBwYXRoID0gcm91dGUucGF0aDtcbiAgdmFyIG5hbWUgPSByb3V0ZS5uYW1lO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGFzc2VydChwYXRoICE9IG51bGwsIFwiXFxcInBhdGhcXFwiIGlzIHJlcXVpcmVkIGluIGEgcm91dGUgY29uZmlndXJhdGlvbi5cIik7XG4gICAgYXNzZXJ0KFxuICAgICAgdHlwZW9mIHJvdXRlLmNvbXBvbmVudCAhPT0gJ3N0cmluZycsXG4gICAgICBcInJvdXRlIGNvbmZpZyBcXFwiY29tcG9uZW50XFxcIiBmb3IgcGF0aDogXCIgKyAoU3RyaW5nKFxuICAgICAgICBwYXRoIHx8IG5hbWVcbiAgICAgICkpICsgXCIgY2Fubm90IGJlIGEgXCIgKyBcInN0cmluZyBpZC4gVXNlIGFuIGFjdHVhbCBjb21wb25lbnQgaW5zdGVhZC5cIlxuICAgICk7XG5cbiAgICB3YXJuKFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgICAgICEvW15cXHUwMDAwLVxcdTAwN0ZdKy8udGVzdChwYXRoKSxcbiAgICAgIFwiUm91dGUgd2l0aCBwYXRoIFxcXCJcIiArIHBhdGggKyBcIlxcXCIgY29udGFpbnMgdW5lbmNvZGVkIGNoYXJhY3RlcnMsIG1ha2Ugc3VyZSBcIiArXG4gICAgICAgIFwieW91ciBwYXRoIGlzIGNvcnJlY3RseSBlbmNvZGVkIGJlZm9yZSBwYXNzaW5nIGl0IHRvIHRoZSByb3V0ZXIuIFVzZSBcIiArXG4gICAgICAgIFwiZW5jb2RlVVJJIHRvIGVuY29kZSBzdGF0aWMgc2VnbWVudHMgb2YgeW91ciBwYXRoLlwiXG4gICAgKTtcbiAgfVxuXG4gIHZhciBwYXRoVG9SZWdleHBPcHRpb25zID1cbiAgICByb3V0ZS5wYXRoVG9SZWdleHBPcHRpb25zIHx8IHt9O1xuICB2YXIgbm9ybWFsaXplZFBhdGggPSBub3JtYWxpemVQYXRoKHBhdGgsIHBhcmVudCwgcGF0aFRvUmVnZXhwT3B0aW9ucy5zdHJpY3QpO1xuXG4gIGlmICh0eXBlb2Ygcm91dGUuY2FzZVNlbnNpdGl2ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgcGF0aFRvUmVnZXhwT3B0aW9ucy5zZW5zaXRpdmUgPSByb3V0ZS5jYXNlU2Vuc2l0aXZlO1xuICB9XG5cbiAgdmFyIHJlY29yZCA9IHtcbiAgICBwYXRoOiBub3JtYWxpemVkUGF0aCxcbiAgICByZWdleDogY29tcGlsZVJvdXRlUmVnZXgobm9ybWFsaXplZFBhdGgsIHBhdGhUb1JlZ2V4cE9wdGlvbnMpLFxuICAgIGNvbXBvbmVudHM6IHJvdXRlLmNvbXBvbmVudHMgfHwgeyBkZWZhdWx0OiByb3V0ZS5jb21wb25lbnQgfSxcbiAgICBhbGlhczogcm91dGUuYWxpYXNcbiAgICAgID8gdHlwZW9mIHJvdXRlLmFsaWFzID09PSAnc3RyaW5nJ1xuICAgICAgICA/IFtyb3V0ZS5hbGlhc11cbiAgICAgICAgOiByb3V0ZS5hbGlhc1xuICAgICAgOiBbXSxcbiAgICBpbnN0YW5jZXM6IHt9LFxuICAgIGVudGVyZWRDYnM6IHt9LFxuICAgIG5hbWU6IG5hbWUsXG4gICAgcGFyZW50OiBwYXJlbnQsXG4gICAgbWF0Y2hBczogbWF0Y2hBcyxcbiAgICByZWRpcmVjdDogcm91dGUucmVkaXJlY3QsXG4gICAgYmVmb3JlRW50ZXI6IHJvdXRlLmJlZm9yZUVudGVyLFxuICAgIG1ldGE6IHJvdXRlLm1ldGEgfHwge30sXG4gICAgcHJvcHM6XG4gICAgICByb3V0ZS5wcm9wcyA9PSBudWxsXG4gICAgICAgID8ge31cbiAgICAgICAgOiByb3V0ZS5jb21wb25lbnRzXG4gICAgICAgICAgPyByb3V0ZS5wcm9wc1xuICAgICAgICAgIDogeyBkZWZhdWx0OiByb3V0ZS5wcm9wcyB9XG4gI
118H07XG5cbiAgaWYgKHJvdXRlLmNoaWxkcmVuKSB7XG4gICAgLy8gV2FybiBpZiByb3V0ZSBpcyBuYW1lZCwgZG9lcyBub3QgcmVkaXJlY3QgYW5kIGhhcyBhIGRlZmF1bHQgY2hpbGQgcm91dGUuXG4gICAgLy8gSWYgdXNlcnMgbmF2aWdhdGUgdG8gdGhpcyByb3V0ZSBieSBuYW1lLCB0aGUgZGVmYXVsdCBjaGlsZCB3aWxsXG4gICAgLy8gbm90IGJlIHJlbmRlcmVkIChHSCBJc3N1ZSAjNjI5KVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHJvdXRlLm5hbWUgJiZcbiAgICAgICAgIXJvdXRlLnJlZGlyZWN0ICYmXG4gICAgICAgIHJvdXRlLmNoaWxkcmVuLnNvbWUoZnVuY3Rpb24gKGNoaWxkKSB7IHJldHVybiAvXlxcLz8kLy50ZXN0KGNoaWxkLnBhdGgpOyB9KVxuICAgICAgKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgXCJOYW1lZCBSb3V0ZSAnXCIgKyAocm91dGUubmFtZSkgKyBcIicgaGFzIGEgZGVmYXVsdCBjaGlsZCByb3V0ZS4gXCIgK1xuICAgICAgICAgICAgXCJXaGVuIG5hdmlnYXRpbmcgdG8gdGhpcyBuYW1lZCByb3V0ZSAoOnRvPVxcXCJ7bmFtZTogJ1wiICsgKHJvdXRlLm5hbWUpICsgXCInXFxcIiksIFwiICtcbiAgICAgICAgICAgIFwidGhlIGRlZmF1bHQgY2hpbGQgcm91dGUgd2lsbCBub3QgYmUgcmVuZGVyZWQuIFJlbW92ZSB0aGUgbmFtZSBmcm9tIFwiICtcbiAgICAgICAgICAgIFwidGhpcyByb3V0ZSBhbmQgdXNlIHRoZSBuYW1lIG9mIHRoZSBkZWZhdWx0IGNoaWxkIHJvdXRlIGZvciBuYW1lZCBcIiArXG4gICAgICAgICAgICBcImxpbmtzIGluc3RlYWQuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcm91dGUuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgIHZhciBjaGlsZE1hdGNoQXMgPSBtYXRjaEFzXG4gICAgICAgID8gY2xlYW5QYXRoKChtYXRjaEFzICsgXCIvXCIgKyAoY2hpbGQucGF0aCkpKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGFkZFJvdXRlUmVjb3JkKHBhdGhMaXN0LCBwYXRoTWFwLCBuYW1lTWFwLCBjaGlsZCwgcmVjb3JkLCBjaGlsZE1hdGNoQXMpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKCFwYXRoTWFwW3JlY29yZC5wYXRoXSkge1xuICAgIHBhdGhMaXN0LnB1c2gocmVjb3JkLnBhdGgpO1xuICAgIHBhdGhNYXBbcmVjb3JkLnBhdGhdID0gcmVjb3JkO1xuICB9XG5cbiAgaWYgKHJvdXRlLmFsaWFzICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgYWxpYXNlcyA9IEFycmF5LmlzQXJyYXkocm91dGUuYWxpYXMpID8gcm91dGUuYWxpYXMgOiBbcm91dGUuYWxpYXNdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxpYXNlcy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIGFsaWFzID0gYWxpYXNlc1tpXTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGFsaWFzID09PSBwYXRoKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgKFwiRm91bmQgYW4gYWxpYXMgd2l0aCB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgcGF0aDogXFxcIlwiICsgcGF0aCArIFwiXFxcIi4gWW91IGhhdmUgdG8gcmVtb3ZlIHRoYXQgYWxpYXMuIEl0IHdpbGwgYmUgaWdub3JlZCBpbiBkZXZlbG9wbWVudC5cIilcbiAgICAgICAgKTtcbiAgICAgICAgLy8gc2tpcCBpbiBkZXYgdG8gbWFrZSBpdCB3b3JrXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIHZhciBhbGlhc1JvdXRlID0ge1xuICAgICAgICBwYXRoOiBhbGlhcyxcbiAgICAgICAgY2hpbGRyZW46IHJvdXRlLmNoaWxkcmVuXG4gICAgICB9O1xuICAgICAgYWRkUm91dGVSZWNvcmQoXG4gICAgICAgIHBhdGhMaXN0LFxuICAgICAgICBwYXRoTWFwLFxuICAgICAgICBuYW1lTWFwLFxuICAgICAgICBhbGlhc1JvdXRlLFxuICAgICAgICBwYXJlbnQsXG4gICAgICAgIHJlY29yZC5wYXRoIHx8ICcvJyAvLyBtYXRjaEFzXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChuYW1lKSB7XG4gICAgaWYgKCFuYW1lTWFwW25hbWVdKSB7XG4gICAgICBuYW1lTWFwW25hbWVdID0gcmVjb3JkO1xuICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhbWF0Y2hBcykge1xuICAgICAgd2FybihcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIFwiRHVwbGljYXRlIG5hbWVkIHJvdXRlcyBkZWZpbml0aW9uOiBcIiArXG4gICAgICAgICAgXCJ7IG5hbWU6IFxcXCJcIiArIG5hbWUgKyBcIlxcXCIsIHBhdGg6IFxcXCJcIiArIChyZWNvcmQucGF0aCkgKyBcIlxcXCIgfVwiXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21waWxlUm91dGVSZWdleCAoXG4gIHBhdGgsXG4gIHBhdGhUb1JlZ2V4cE9wdGlvbnNcbikge1xuICB2YXIgcmVnZXggPSBwYXRoVG9SZWdleHBfMShwYXRoLCBbXSwgcGF0aFRvUmVnZXhwT3B0aW9ucyk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgdmFyIGtleXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHJlZ2V4LmtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICB3YXJuKFxuICAgICAgICAha2V5c1trZXkubmFtZV0sXG4gICAgICAgIChcIkR1cGxpY2F0ZSBwYXJhbSBrZXlzIGluIHJvdXRlIHdpdGggcGF0aDogXFxcIlwiICsgcGF0aCArIFwiXFxcIlwiKVxuICAgICAgKTtcbiAgICAgIGtleXNba2V5Lm5hbWVdID0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gcmVnZXhcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplUGF0aCAoXG4gIHBhdGgsXG4gIHBhcmVudCxcbiAgc3RyaWN0XG4pIHtcbiAgaWYgKCFzdHJpY3QpIHsgcGF0aCA9IHBhdGgucmVwbGFjZSgvXFwvJC8sICcnKTsgfVxuICBpZiAocGF0aFswXSA9PT0gJy8nKSB7IHJldHVybiBwYXRoIH1cbiAgaWYgKHBhcmVudCA9PSBudWxsKSB7IHJldHVybiBwYXRoIH1cbiAgcmV0dXJuIGNsZWFuUGF0aCgoKHBhcmVudC5wYXRoKSArIFwiL1wiICsgcGF0aCkpXG59XG5cbi8qICAqL1xuXG5cblxuZnVuY3Rpb24gY3JlYXRlTWF0Y2hlciAoXG4gIHJvdXRlcyxcbiAgcm91dGVyXG4pIHtcbiAgdmFyIHJlZiA9IGNyZWF0ZVJvdXRlTWFwKHJvdXRlcyk7XG4gIHZhciBwYXRoTGlzdCA9IHJlZi5wYXRoTGlzdDtcbiAgdmFyIHBhdGhNYXAgPSByZWYucGF0aE1hcDtcbiAgdmFyIG5hbWVNYXAgPSByZWYubmFtZU1hcDtcblxuICBmdW5jdGlvbiBhZGRSb3V0ZXMgKHJvdXRlcykge1xuICAgIGNyZWF0ZVJvdXRlTWFwKHJvdXRlcywgcGF0aExpc3QsIHBhdGhNYXAsIG5hbWVNYXApO1xuICB9XG5cbiAgZnVuY3Rpb24gYWRkUm91dGUgKHBhcmVudE9yUm91dGUsIHJvdXRlKSB7XG4gICAgdmFyIHBhcmVudCA9ICh0eXBlb2YgcGFyZW50T3JSb3V0ZSAhPT0gJ29iamVjdCcpID8gbmFtZU1hcFtwYXJlbnRPclJvdXRlXSA6IHVuZGVmaW5lZDtcbiAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICBjcmVhdGVSb3V0ZU1hcChbcm91dGUgfHwgcGFyZW50T3JSb3V0ZV0sIHBhdGhMaXN0LCBwYXRoTWFwLCBuYW1lTWFwLCBwYXJlbnQpO1xuXG4gICAgLy8gYWRkIGFsaWFzZXMgb2YgcGFyZW50XG4gICAgaWYgKHBhcmVudCAmJiBwYXJlbnQuYWxpYXMubGVuZ3RoKSB7XG4gICAgICBjcmVhdGVSb3V0ZU1hcChcbiAgICAgICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lI
118HJvdXRlIGlzIGRlZmluZWQgaWYgcGFyZW50IGlzXG4gICAgICAgIHBhcmVudC5hbGlhcy5tYXAoZnVuY3Rpb24gKGFsaWFzKSB7IHJldHVybiAoeyBwYXRoOiBhbGlhcywgY2hpbGRyZW46IFtyb3V0ZV0gfSk7IH0pLFxuICAgICAgICBwYXRoTGlzdCxcbiAgICAgICAgcGF0aE1hcCxcbiAgICAgICAgbmFtZU1hcCxcbiAgICAgICAgcGFyZW50XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFJvdXRlcyAoKSB7XG4gICAgcmV0dXJuIHBhdGhMaXN0Lm1hcChmdW5jdGlvbiAocGF0aCkgeyByZXR1cm4gcGF0aE1hcFtwYXRoXTsgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIG1hdGNoIChcbiAgICByYXcsXG4gICAgY3VycmVudFJvdXRlLFxuICAgIHJlZGlyZWN0ZWRGcm9tXG4gICkge1xuICAgIHZhciBsb2NhdGlvbiA9IG5vcm1hbGl6ZUxvY2F0aW9uKHJhdywgY3VycmVudFJvdXRlLCBmYWxzZSwgcm91dGVyKTtcbiAgICB2YXIgbmFtZSA9IGxvY2F0aW9uLm5hbWU7XG5cbiAgICBpZiAobmFtZSkge1xuICAgICAgdmFyIHJlY29yZCA9IG5hbWVNYXBbbmFtZV07XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB3YXJuKHJlY29yZCwgKFwiUm91dGUgd2l0aCBuYW1lICdcIiArIG5hbWUgKyBcIicgZG9lcyBub3QgZXhpc3RcIikpO1xuICAgICAgfVxuICAgICAgaWYgKCFyZWNvcmQpIHsgcmV0dXJuIF9jcmVhdGVSb3V0ZShudWxsLCBsb2NhdGlvbikgfVxuICAgICAgdmFyIHBhcmFtTmFtZXMgPSByZWNvcmQucmVnZXgua2V5c1xuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuICFrZXkub3B0aW9uYWw7IH0pXG4gICAgICAgIC5tYXAoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4ga2V5Lm5hbWU7IH0pO1xuXG4gICAgICBpZiAodHlwZW9mIGxvY2F0aW9uLnBhcmFtcyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgbG9jYXRpb24ucGFyYW1zID0ge307XG4gICAgICB9XG5cbiAgICAgIGlmIChjdXJyZW50Um91dGUgJiYgdHlwZW9mIGN1cnJlbnRSb3V0ZS5wYXJhbXMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBjdXJyZW50Um91dGUucGFyYW1zKSB7XG4gICAgICAgICAgaWYgKCEoa2V5IGluIGxvY2F0aW9uLnBhcmFtcykgJiYgcGFyYW1OYW1lcy5pbmRleE9mKGtleSkgPiAtMSkge1xuICAgICAgICAgICAgbG9jYXRpb24ucGFyYW1zW2tleV0gPSBjdXJyZW50Um91dGUucGFyYW1zW2tleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxvY2F0aW9uLnBhdGggPSBmaWxsUGFyYW1zKHJlY29yZC5wYXRoLCBsb2NhdGlvbi5wYXJhbXMsIChcIm5hbWVkIHJvdXRlIFxcXCJcIiArIG5hbWUgKyBcIlxcXCJcIikpO1xuICAgICAgcmV0dXJuIF9jcmVhdGVSb3V0ZShyZWNvcmQsIGxvY2F0aW9uLCByZWRpcmVjdGVkRnJvbSlcbiAgICB9IGVsc2UgaWYgKGxvY2F0aW9uLnBhdGgpIHtcbiAgICAgIGxvY2F0aW9uLnBhcmFtcyA9IHt9O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICB2Y
118XIgcGF0aCA9IHBhdGhMaXN0W2ldO1xuICAgICAgICB2YXIgcmVjb3JkJDEgPSBwYXRoTWFwW3BhdGhdO1xuICAgICAgICBpZiAobWF0Y2hSb3V0ZShyZWNvcmQkMS5yZWdleCwgbG9jYXRpb24ucGF0aCwgbG9jYXRpb24ucGFyYW1zKSkge1xuICAgICAgICAgIHJldHVybiBfY3JlYXRlUm91dGUocmVjb3JkJDEsIGxvY2F0aW9uLCByZWRpcmVjdGVkRnJvbSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBubyBtYXRjaFxuICAgIHJldHVybiBfY3JlYXRlUm91dGUobnVsbCwgbG9jYXRpb24pXG4gIH1cblxuICBmdW5jdGlvbiByZWRpcmVjdCAoXG4gICAgcmVjb3JkLFxuICAgIGxvY2F0aW9uXG4gICkge1xuICAgIHZhciBvcmlnaW5hbFJlZGlyZWN0ID0gcmVjb3JkLnJlZGlyZWN0O1xuICAgIHZhciByZWRpcmVjdCA9IHR5cGVvZiBvcmlnaW5hbFJlZGlyZWN0ID09PSAnZnVuY3Rpb24nXG4gICAgICA/IG9yaWdpbmFsUmVkaXJlY3QoY3JlYXRlUm91dGUocmVjb3JkLCBsb2NhdGlvbiwgbnVsbCwgcm91dGVyKSlcbiAgICAgIDogb3JpZ2luYWxSZWRpcmVjdDtcblxuICAgIGlmICh0eXBlb2YgcmVkaXJlY3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZWRpcmVjdCA9IHsgcGF0aDogcmVkaXJlY3QgfTtcbiAgICB9XG5cbiAgICBpZiAoIXJlZGlyZWN0IHx8IHR5cGVvZiByZWRpcmVjdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgZmFsc2UsIChcImludmFsaWQgcmVkaXJlY3Qgb3B0aW9uOiBcIiArIChKU09OLnN0cmluZ2lmeShyZWRpcmVjdCkpKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9jcmVhdGVSb3V0ZShudWxsLCBsb2NhdGlvbilcbiAgICB9XG5cbiAgICB2YXIgcmUgPSByZWRpcmVjdDtcbiAgICB2YXIgbmFtZSA9IHJlLm5hbWU7XG4gICAgdmFyIHBhdGggPSByZS5wYXRoO1xuICAgIHZhciBxdWVyeSA9IGxvY2F0aW9uLnF1ZXJ5O1xuICAgIHZhciBoYXNoID0gbG9jYXRpb24uaGFzaDtcbiAgICB2YXIgcGFyYW1zID0gbG9jYXRpb24ucGFyYW1zO1xuICAgIHF1ZXJ5ID0gcmUuaGFzT3duUHJvcGVydHkoJ3F1ZXJ5JykgPyByZS5xdWVyeSA6IHF1ZXJ5O1xuICAgIGhhc2ggPSByZS5oYXNPd25Qcm9wZXJ0eSgnaGFzaCcpID8gcmUuaGFzaCA6IGhhc2g7XG4gICAgcGFyYW1zID0gcmUuaGFzT3duUHJvcGVydHkoJ3BhcmFtcycpID8gcmUucGFyYW1zIDogcGFyYW1zO1xuXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIC8vIHJlc29sdmVkIG5hbWVkIGRpcmVjdFxuICAgICAgdmFyIHRhcmdldFJlY29yZCA9IG5hbWVNYXBbbmFtZV07XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBhc3NlcnQodGFyZ2V0UmVjb3JkLCAoXCJyZWRpcmVjdCBmYWlsZWQ6IG5hbWVkIHJvdXRlIFxcXCJcIiArIG5hbWUgKyBcIlxcXCIgbm90IGZvdW5kLlwiKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbWF0Y2goe1xuICAgICAgICBfbm9ybWFsaXplZDogdHJ1ZSxcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgcXVlcnk6IHF1ZXJ5LFxuICAgICAgICBoYXNoOiBoYXNoLFxuICAgICAgICBwYXJhbXM6IHBhcmFtc1xuICAgICAgfSwgdW5kZWZpbmVkLCBsb2NhdGlvbilcbiAgICB9IGVsc2UgaWYgKHBhdGgpIHtcbiAgICAgIC8vIDEuIHJlc29sdmUgcmVsYXRpdmUgcmVkaXJlY3RcbiAgICAgIHZhciByYXdQYXRoID0gcmVzb2x2ZVJlY29yZFBhdGgocGF0aCwgcmVjb3JkKTtcbiAgICAgIC8vIDIuIHJlc29sdmUgcGFyYW1zXG4gICAgICB2Y
118XIgcmVzb2x2ZWRQYXRoID0gZmlsbFBhcmFtcyhyYXdQYXRoLCBwYXJhbXMsIChcInJlZGlyZWN0IHJvdXRlIHdpdGggcGF0aCBcXFwiXCIgKyByYXdQYXRoICsgXCJcXFwiXCIpKTtcbiAgICAgIC8vIDMuIHJlbWF0Y2ggd2l0aCBleGlzdGluZyBxdWVyeSBhbmQgaGFzaFxuICAgICAgcmV0dXJuIG1hdGNoKHtcbiAgICAgICAgX25vcm1hbGl6ZWQ6IHRydWUsXG4gICAgICAgIHBhdGg6IHJlc29sdmVkUGF0aCxcbiAgICAgICAgcXVlcnk6IHF1ZXJ5LFxuICAgICAgICBoYXNoOiBoYXNoXG4gICAgICB9LCB1bmRlZmluZWQsIGxvY2F0aW9uKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB3YXJuKGZhbHNlLCAoXCJpbnZhbGlkIHJlZGlyZWN0IG9wdGlvbjogXCIgKyAoSlNPTi5zdHJpbmdpZnkocmVkaXJlY3QpKSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9jcmVhdGVSb3V0ZShudWxsLCBsb2NhdGlvbilcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBhbGlhcyAoXG4gICAgcmVjb3JkLFxuICAgIGxvY2F0aW9uLFxuICAgIG1hdGNoQXNcbiAgKSB7XG4gICAgdmFyIGFsaWFzZWRQYXRoID0gZmlsbFBhcmFtcyhtYXRjaEFzLCBsb2NhdGlvbi5wYXJhbXMsIChcImFsaWFzZWQgcm91dGUgd2l0aCBwYXRoIFxcXCJcIiArIG1hdGNoQXMgKyBcIlxcXCJcIikpO1xuICAgIHZhciBhbGlhc2VkTWF0Y2ggPSBtYXRjaCh7XG4gICAgICBfbm9ybWFsaXplZDogdHJ1ZSxcbiAgICAgIHBhdGg6IGFsaWFzZWRQYXRoXG4gICAgfSk7XG4gICAgaWYgKGFsaWFzZWRNYXRjaCkge1xuICAgICAgdmFyIG1hdGNoZWQgPSBhbGlhc2VkTWF0Y2gubWF0Y2hlZDtcbiAgICAgIHZhciBhbGlhc2VkUmVjb3JkID0gbWF0Y2hlZFttYXRjaGVkLmxlbmd0aCAtIDFdO1xuICAgICAgbG9jYXRpb24ucGFyYW1zID0gYWxpYXNlZE1hdGNoLnBhcmFtcztcbiAgICAgIHJldHVybiBfY3JlYXRlUm91dGUoYWxpYXNlZFJlY29yZCwgbG9jYXRpb24pXG4gICAgfVxuICAgIHJldHVybiBfY3JlYXRlUm91dGUobnVsbCwgbG9jYXRpb24pXG4gIH1cblxuICBmdW5jdGlvbiBfY3JlYXRlUm91dGUgKFxuICAgIHJlY29yZCxcbiAgICBsb2NhdGlvbixcbiAgICByZWRpcmVjdGVkRnJvbVxuICApIHtcbiAgICBpZiAocmVjb3JkICYmIHJlY29yZC5yZWRpcmVjdCkge1xuICAgICAgcmV0dXJuIHJlZGlyZWN0KHJlY29yZCwgcmVkaXJlY3RlZEZyb20gfHwgbG9jYXRpb24pXG4gICAgfVxuICAgIGlmIChyZWNvcmQgJiYgcmVjb3JkLm1hdGNoQXMpIHtcbiAgICAgIHJldHVybiBhbGlhcyhyZWNvcmQsIGxvY2F0aW9uLCByZWNvcmQubWF0Y2hBcylcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZVJvdXRlKHJlY29yZCwgbG9jYXRpb24sIHJlZGlyZWN0ZWRGcm9tLCByb3V0ZXIpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1hdGNoOiBtYXRjaCxcbiAgICBhZGRSb3V0ZTogYWRkUm91dGUsXG4gICAgZ2V0Um91dGVzOiBnZXRSb3V0ZXMsXG4gICAgYWRkUm91dGVzOiBhZGRSb3V0ZXNcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXRjaFJvdXRlIChcbiAgcmVnZXgsXG4gIHBhdGgsXG4gIHBhcmFtc1xuKSB7XG4gIHZhciBtID0gcGF0aC5tYXRjaChyZWdleCk7XG5cbiAgaWYgKCFtKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0gZWxzZSBpZiAoIXBhcmFtcykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBmb3IgKHZhciBpID0gMSwgbGVuID0gbS5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciBrZXkgPSByZWdleC5rZXlzW2kgLSAxXTtcbiAgICBpZiAoa2V5KSB7XG4gICAgICAvLyBGaXggIzE5OTQ6IHVzaW5nICogd2l0aCBwcm9wczogdHJ1ZSBnZW5lcmF0ZXMgYSBwYXJhbSBuYW1lZCAwXG4gICAgICBwYXJhbXNba2V5Lm5hbWUgfHwgJ3BhdGhNYXRjaCddID0gdHlwZW9mIG1baV0gPT09ICdzdHJpbmcnID8gZGVjb2RlKG1baV0pIDogbVtpXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiByZXNvbHZlUmVjb3JkUGF0aCAocGF0aCwgcmVjb3JkKSB7XG4gIHJldHVybiByZXNvbHZlUGF0aChwYXRoLCByZWNvcmQucGFyZW50ID8gcmVjb3JkLnBhcmVudC5wYXRoIDogJy8nLCB0cnVlKVxufVxuXG4vKiAgKi9cblxuLy8gdXNlIFVzZXIgVGltaW5nIGFwaSAoaWYgcHJlc2VudCkgZm9yIG1vcmUgYWNjdXJhdGUga2V5IHByZWNpc2lvblxudmFyIFRpbWUgPVxuICBpbkJyb3dzZXIgJiYgd2luZG93LnBlcmZvcm1hbmNlICYmIHdpbmRvdy5wZXJmb3JtYW5jZS5ub3dcbiAgICA/IHdpbmRvdy5wZXJmb3JtYW5jZVxuICAgIDogRGF0ZTtcblxuZnVuY3Rpb24gZ2VuU3RhdGVLZXkgKCkge1xuICByZXR1cm4gVGltZS5ub3coKS50b0ZpeGVkKDMpXG59XG5cbnZhciBfa2V5ID0gZ2VuU3RhdGVLZXkoKTtcblxuZnVuY3Rpb24gZ2V0U3RhdGVLZXkgKCkge1xuICByZXR1cm4gX2tleVxufVxuXG5mdW5jdGlvbiBzZXRTdGF0ZUtleSAoa2V5KSB7XG4gIHJldHVybiAoX2tleSA9IGtleSlcbn1cblxuLyogICovXG5cbnZhciBwb3NpdGlvblN0b3JlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuZnVuY3Rpb24gc2V0dXBTY3JvbGwgKCkge1xuICAvLyBQcmV2ZW50IGJyb3dzZXIgc2Nyb2xsIGJlaGF2aW9yIG9uIEhpc3RvcnkgcG9wc3RhdGVcbiAgaWYgKCdzY3JvbGxSZXN0b3JhdGlvbicgaW4gd2luZG93Lmhpc3RvcnkpIHtcbiAgICB3aW5kb3cuaGlzdG9yeS5zY3JvbGxSZXN0b3JhdGlvbiA9ICdtYW51YWwnO1xuICB9XG4gIC8vIEZpeCBmb3IgIzE1ODUgZm9yIEZpcmVmb3hcbiAgLy8gRml4IGZvciAjMjE5NSBBZGQgb3B0aW9uYWwgdGhpcmQgYXR0cmlidXRlIHRvIHdvcmthcm91bmQgYSBidWcgaW4gc2FmYXJpIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODI2NzhcbiAgLy8gRml4IGZvciAjMjc3NCBTdXBwb3J0IGZvciBhcHBzIGxvYWRlZCBmcm9tIFdpbmRvd3MgZmlsZSBzaGFyZXMgbm90IG1hcHBlZCB0byBuZXR3b3JrIGRyaXZlczogcmVwbGFjZWQgbG9jYXRpb24ub3JpZ2luIHdpdGhcbiAgLy8gd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0XG4gIC8vIGxvY2F0aW9uLmhvc3QgY29udGFpbnMgdGhlIHBvcnQgYW5kIGxvY2F0aW9uLmhvc3RuYW1lIGRvZXNuJ3RcbiAgdmFyIHByb3RvY29sQW5kUGF0aCA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdDtcbiAgdmFyIGFic29sdXRlUGF0aCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLnJlcGxhY2UocHJvdG9jb2xBbmRQYXRoLCAnJyk7XG4gIC8vIHByZXNlcnZlIGV4aXN0aW5nIGhpc3Rvcnkgc3Rh
118dGUgYXMgaXQgY291bGQgYmUgb3ZlcnJpZGVuIGJ5IHRoZSB1c2VyXG4gIHZhciBzdGF0ZUNvcHkgPSBleHRlbmQoe30sIHdpbmRvdy5oaXN0b3J5LnN0YXRlKTtcbiAgc3RhdGVDb3B5LmtleSA9IGdldFN0YXRlS2V5KCk7XG4gIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZShzdGF0ZUNvcHksICcnLCBhYnNvbHV0ZVBhdGgpO1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9wc3RhdGUnLCBoYW5kbGVQb3BTdGF0ZSk7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvcHN0YXRlJywgaGFuZGxlUG9wU3RhdGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVNjcm9sbCAoXG4gIHJvdXRlcixcbiAgdG8sXG4gIGZyb20sXG4gIGlzUG9wXG4pIHtcbiAgaWYgKCFyb3V0ZXIuYXBwKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICB2YXIgYmVoYXZpb3IgPSByb3V0ZXIub3B0aW9ucy5zY3JvbGxCZWhhdmlvcjtcbiAgaWYgKCFiZWhhdmlvcikge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBhc3NlcnQodHlwZW9mIGJlaGF2aW9yID09PSAnZnVuY3Rpb24nLCBcInNjcm9sbEJlaGF2aW9yIG11c3QgYmUgYSBmdW5jdGlvblwiKTtcbiAgfVxuXG4gIC8vIHdhaXQgdW50aWwgcmUtcmVuZGVyIGZpbmlzaGVzIGJlZm9yZSBzY3JvbGxpbmdcbiAgcm91dGVyLmFwcC4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgIHZhciBwb3NpdGlvbiA9IGdldFNjcm9sbFBvc2l0aW9uKCk7XG4gICAgdmFyIHNob3VsZFNjcm9sbCA9IGJlaGF2aW9yLmNhbGwoXG4gICAgICByb3V0ZXIsXG4gICAgICB0byxcbiAgICAgIGZyb20sXG4gICAgICBpc1BvcCA/IHBvc2l0aW9uIDogbnVsbFxuICAgICk7XG5cbiAgICBpZiAoIXNob3VsZFNjcm9sbCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBzaG91bGRTY3JvbGwudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgc2hvdWxkU2Nyb2xsXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uIChzaG91bGRTY3JvbGwpIHtcbiAgICAgICAgICBzY3JvbGxUb1Bvc2l0aW9uKChzaG91bGRTY3JvbGwpLCBwb3NpdGlvbik7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIGFzc2VydChmYWxzZSwgZXJyLnRvU3RyaW5nKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNjcm9sbFRvUG9zaXRpb24oc2hvdWxkU2Nyb2xsLCBwb3NpdGlvbik7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gc2F2ZVNjcm9sbFBvc2l0aW9uICgpIHtcbiAgdmFyIGtleSA9IGdldFN0YXRlS2V5KCk7XG4gIGlmIChrZXkpIHtcbiAgICBwb3NpdGlvblN0b3JlW2tleV0gPSB7XG4gICAgICB4OiB3aW5kb3cucGFnZVhPZmZzZXQsXG4gICAgICB5OiB3aW5kb3cucGFnZVlPZmZzZXRcbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVBvcFN0YXRlIChlKSB7XG4gIHNhdmVTY3JvbGxQb3NpdGlvbigpO1xuICBpZiAoZS5zdGF0ZSAmJiBlLnN0YXRlLmtleSkge1xuICAgIHNldFN0YXRlS2V5KGUuc3RhdGUua2V5KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRTY3JvbGxQb3NpdGlvbiAoKSB7XG4gIHZhciBrZXkgPSBnZXRTdGF0ZUtleSgpO1xuICBpZiAoa2V5KSB7XG4gICAgcmV0dXJuIHBvc2l0aW9uU3RvcmVba2V5XVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldEVsZW1lbnRQb3NpdGlvbiAoZWwsIG9mZnNldCkge1xuICB2YXIgZG9jRWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIHZhciBkb2NSZWN0ID0gZG9jRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHZhciBlbFJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgcmV0dXJuIHtcbiAgICB4OiBlbFJlY3QubGVmdCAtIGRvY1JlY3QubGVmdCAtIG9mZnNldC54LFxuICAgIHk6IGVsUmVjdC50b3AgLSBkb2NSZWN0LnRvcCAtIG9mZnNldC55XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNWYWxpZFBvc2l0aW9uIChvYmopIHtcbiAgcmV0dXJuIGlzTnVtYmVyKG9iai54KSB8fCBpc051bWJlcihvYmoueSlcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplUG9zaXRpb24gKG9iaikge1xuICByZXR1cm4ge1xuICAgIHg6IGlzTnVtYmVyKG9iai54KSA/IG9iai54IDogd2luZG93LnBhZ2VYT2Zmc2V0LFxuICAgIHk6IGlzTnVtYmVyKG9iai55KSA/IG9iai55IDogd2luZG93LnBhZ2VZT2Zmc2V0XG4gIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplT2Zmc2V0IChvYmopIHtcbiAgcmV0dXJuIHtcbiAgICB4OiBpc051bWJlcihvYmoueCkgPyBvYmoueCA6IDAsXG4gICAgeTogaXNOdW1iZXIob2JqLnkpID8gb2JqLnkgOiAwXG4gIH1cbn1cblxuZnVuY3Rpb24gaXNOdW1iZXIgKHYpIHtcbiAgcmV0dXJuIHR5cGVvZiB2ID09PSAnbnVtYmVyJ1xufVxuXG52YXIgaGFzaFN0YXJ0c1dpdGhOdW1iZXJSRSA9IC9eI1xcZC87XG5cbmZ1bmN0aW9uIHNjcm9sbFRvUG9zaXRpb24gKHNob3VsZFNjcm9sbCwgcG9zaXRpb24pIHtcbiAgdmFyIGlzT2JqZWN0ID0gdHlwZW9mIHNob3VsZFNjcm9sbCA9PT0gJ29iamVjdCc7XG4gIGlmIChpc09iamVjdCAmJiB0eXBlb2Ygc2hvdWxkU2Nyb2xsLnNlbGVjdG9yID09PSAnc3RyaW5nJykge1xuICAgIC8vIGdldEVsZW1lbnRCeUlkIHdvdWxkIHN0aWxsIGZhaWwgaWYgdGhlIHNlbGVjdG9yIGNvbnRhaW5zIGEgbW9yZSBjb21wbGljYXRlZCB
118xdWVyeSBsaWtlICNtYWluW2RhdGEtYXR0cl1cbiAgICAvLyBidXQgYXQgdGhlIHNhbWUgdGltZSwgaXQgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UgdG8gc2VsZWN0IGFuIGVsZW1lbnQgd2l0aCBhbiBpZCBhbmQgYW4gZXh0cmEgc2VsZWN0b3JcbiAgICB2YXIgZWwgPSBoYXNoU3RhcnRzV2l0aE51bWJlclJFLnRlc3Qoc2hvdWxkU2Nyb2xsLnNlbGVjdG9yKSAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICAgID8gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2hvdWxkU2Nyb2xsLnNlbGVjdG9yLnNsaWNlKDEpKSAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICAgIDogZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzaG91bGRTY3JvbGwuc2VsZWN0b3IpO1xuXG4gICAgaWYgKGVsKSB7XG4gICAgICB2YXIgb2Zmc2V0ID1cbiAgICAgICAgc2hvdWxkU2Nyb2xsLm9mZnNldCAmJiB0eXBlb2Ygc2hvdWxkU2Nyb2xsLm9mZnNldCA9PT0gJ29iamVjdCdcbiAgICAgICAgICA/IHNob3VsZFNjcm9sbC5vZmZzZXRcbiAgICAgICAgICA6IHt9O1xuICAgICAgb2Zmc2V0ID0gbm9ybWFsaXplT2Zmc2V0KG9mZnNldCk7XG4gICAgICBwb3NpdGlvbiA9IGdldEVsZW1lbnRQb3NpdGlvbihlbCwgb2Zmc2V0KTtcbiAgICB9IGVsc2UgaWYgKGlzVmFsaWRQb3NpdGlvbihzaG91bGRTY3JvbGwpKSB7XG4gICAgICBwb3NpdGlvbiA9IG5vcm1hbGl6ZVBvc2l0aW9uKHNob3VsZFNjcm9sbCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzT2JqZWN0ICYmIGlzVmFsaWRQb3NpdGlvbihzaG91bGRTY3JvbGwpKSB7XG4gICAgcG9zaXRpb24gPSBub3JtYWxpemVQb3NpdGlvbihzaG91bGRTY3JvbGwpO1xuICB9XG5cbiAgaWYgKHBvc2l0aW9uKSB7XG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgaWYgKCdzY3JvbGxCZWhhdmlvcicgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlKSB7XG4gICAgICB3aW5kb3cuc2Nyb2xsVG8oe1xuICAgICAgICBsZWZ0OiBwb3NpdGlvbi54LFxuICAgICAgICB0b3A6IHBvc2l0aW9uLnksXG4gICAgICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgICAgICBiZWhhdmlvcjogc2hvdWxkU2Nyb2xsLmJlaGF2aW9yXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2luZG93LnNjcm9sbFRvKHBvc2l0aW9uLngsIHBvc2l0aW9uLnkpO1xuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxudmFyIHN1cHBvcnRzUHVzaFN0YXRlID1cbiAgaW5Ccm93c2VyICYmXG4gIChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHVhID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7XG5cbiAgICBpZiAoXG4gICAgICAodWEuaW5kZXhPZignQW5kcm9pZCAyLicpICE9PSAtMSB8fCB1YS5pbmRleE9mKCdBbmRyb2lkIDQuMCcpICE9PSAtMSkgJiZcbiAgICAgIHVhLmluZGV4T2YoJ01vYmlsZSBTYWZhcmknKSAhPT0gLTEgJiZcbiAgICAgIHVhLmluZGV4T2YoJ0Nocm9tZScpID09PSAtMSAmJlxuICAgICAgdWEuaW5kZXhPZignV2luZG93cyBQaG9uZScpID09PSAtMVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgcmV0dXJuIHdpbmRvdy5oaXN0b3J5ICYmIHR5cGVvZiB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUgPT09ICdmdW5jdGlvbidcbiAgfSkoKTtcblxuZnVuY3Rpb24gcHVzaFN0YXRlICh1cmwsIHJlcGxhY2UpIHtcbiAgc2F2ZVNjcm9sbFBvc2l0aW9uKCk7XG4gIC8vIHRyeS4uLmNhdGNoIHRoZSBwdXNoU3RhdGUgY2FsbCB0byBnZXQgYXJvdW5kIFNhZmFyaVxuICAvLyBET00gRXhjZXB0aW9uIDE4IHdoZXJlIGl0IGxpbWl0cyB0byAxMDAgcHVzaFN0YXRlIGNhbGxzXG4gIHZhciBoaXN0b3J5ID0gd2luZG93Lmhpc3Rvcnk7XG4gIHRyeSB7XG4gICAgaWYgKHJlcGxhY2UpIHtcbiAgICAgIC8vIHByZXNlcnZlIGV4aXN0aW5nIGhpc3Rvcnkgc3RhdGUgYXMgaXQgY291bGQgYmUgb3ZlcnJpZGVuIGJ5IHRoZSB1c2VyXG4gICAgICB2Y
118XIgc3RhdGVDb3B5ID0gZXh0ZW5kKHt9LCBoaXN0b3J5LnN0YXRlKTtcbiAgICAgIHN0YXRlQ29weS5rZXkgPSBnZXRTdGF0ZUtleSgpO1xuICAgICAgaGlzdG9yeS5yZXBsYWNlU3RhdGUoc3RhdGVDb3B5LCAnJywgdXJsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGlzdG9yeS5wdXNoU3RhdGUoeyBrZXk6IHNldFN0YXRlS2V5KGdlblN0YXRlS2V5KCkpIH0sICcnLCB1cmwpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIHdpbmRvdy5sb2NhdGlvbltyZXBsYWNlID8gJ3JlcGxhY2UnIDogJ2Fzc2lnbiddKHVybCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVwbGFjZVN0YXRlICh1cmwpIHtcbiAgcHVzaFN0YXRlKHVybCwgdHJ1ZSk7XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBydW5RdWV1ZSAocXVldWUsIGZuLCBjYikge1xuICB2YXIgc3RlcCA9IGZ1bmN0aW9uIChpbmRleCkge1xuICAgIGlmIChpbmRleCA+PSBxdWV1ZS5sZW5ndGgpIHtcbiAgICAgIGNiKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChxdWV1ZVtpbmRleF0pIHtcbiAgICAgICAgZm4ocXVldWVbaW5kZXhdLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgc3RlcChpbmRleCArIDEpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0ZXAoaW5kZXggKyAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHN0ZXAoMCk7XG59XG5cbi8vIFdoZW4gY2hhbmdpbmcgdGhpbmcsIGFsc28gZWRpdCByb3V0ZXIuZC50c1xudmFyIE5hdmlnYXRpb25GYWlsdXJlVHlwZSA9IHtcbiAgcmVkaXJlY3RlZDogMixcbiAgYWJvcnRlZDogNCxcbiAgY2FuY2VsbGVkOiA4LFxuICBkdXBsaWNhdGVkOiAxNlxufTtcblxuZnVuY3Rpb24gY3JlYXRlTmF2aWdhdGlvblJlZGlyZWN0ZWRFcnJvciAoZnJvbSwgdG8pIHtcbiAgcmV0dXJuIGNyZWF0ZVJvdXRlckVycm9yKFxuICAgIGZyb20sXG4gICAgdG8sXG4gICAgTmF2aWdhdGlvbkZhaWx1cmVUeXBlLnJlZGlyZWN0ZWQsXG4gICAgKFwiUmVkaXJlY3RlZCB3aGVuIGdvaW5nIGZyb20gXFxcIlwiICsgKGZyb20uZnVsbFBhdGgpICsgXCJcXFwiIHRvIFxcXCJcIiArIChzdHJpbmdpZnlSb3V0ZShcbiAgICAgIHRvXG4gICAgKSkgKyBcIlxcXCIgdmlhIGEgbmF2aWdhdGlvbiBndWFyZC5cIilcbiAgKVxufVxuXG5mdW5jdGlvbiBjcmVhdGVOYXZpZ2F0aW9uRHVwbGljYXRlZEVycm9yIChmcm9tLCB0bykge1xuICB2YXIgZXJyb3IgPSBjcmVhdGVSb3V0ZXJFcnJvcihcbiAgICBmcm9tLFxuICAgIHRvLFxuICAgIE5hdmlnYXRpb25GYWlsdXJlVHlwZS5kdXBsaWNhdGVkLFxuICAgIChcIkF2b2lkZWQgcmVkdW5kYW50IG5hdmlnYXRpb24gdG8gY3VycmVudCBsb2NhdGlvbjogXFxcIlwiICsgKGZyb20uZnVsbFBhdGgpICsgXCJcXFwiLlwiKVxuICApO1xuICAvLyBiYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoIHRoZSBmaXJzdCBpbnRyb2R1Y3Rpb24gb2YgRXJyb3JzXG4gIGVycm9yLm5hbWUgPSAnTmF2aWdhdGlvbkR1cGxpY2F0ZWQnO1xuICByZXR1cm4gZXJyb3Jcbn1cblxuZnVuY3Rpb24gY3JlYXRlTmF2aWdhdGlvbkNhbmNlbGxlZEVycm9yIChmcm9tLCB0bykge1xuICByZXR1cm4gY3JlYXRlUm91dGVyRXJyb3IoXG4gICAgZnJvbSxcbiAgICB0byxcbiAgICBOYXZpZ2F0aW9uRmFpbHVyZVR5cGUuY2FuY2VsbGVkLFxuICAgIChcIk5hdmlnYXRpb24gY2FuY2VsbGVkIGZyb20gXFxcIlwiICsgKGZyb20uZnVsbFBhdGgpICsgXCJcXFwiIHRvIFxcXCJcIiArICh0by5mdWxsUGF0aCkgKyBcIlxcXCIgd2l0aCBhIG5ldyBuYXZpZ2F0aW9uLlwiKVxuICApXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU5hdmlnYXRpb25BYm9ydGVkRXJyb3IgKGZyb20sIHRvKSB7XG4gIHJldHVybiBjcmVhdGVSb3V0ZXJFcnJvcihcbiAgICBmcm9tLFxuICAgIHRvLFxuICAgIE5hdmlnYXRpb25GYWlsdXJlVHlwZS5hYm9ydGVkLFxuICAgIChcIk5hdmlnYXRpb24gYWJvcnRlZCBmcm9tIFxcXCJcIiArIChmcm9tLmZ1bGxQYXRoKSArIFwiXFxcIiB0byBcXFwiXCIgKyAodG8uZnVsbFBhdGgpICsgXCJcXFwiIHZpYSBhIG5hdmlnYXRpb24gZ3VhcmQuXCIpXG4gIClcbn1cblxuZnVuY3Rpb24gY3JlYXRlUm91dGVyRXJyb3IgKGZyb20sIHRvLCB0eXBlLCBtZXNzYWdlKSB7XG4gIHZhciBlcnJvciA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgZXJyb3IuX2lzUm91dGVyID0gdHJ1ZTtcbiAgZXJyb3IuZnJvbSA9IGZyb207XG4gIGVycm9yLnRvID0gdG87XG4gIGVycm9yLnR5cGUgPSB0eXBlO1xuXG4gIHJldHVybiBlcnJvclxufVxuXG52YXIgcHJvcGVydGllc1RvTG9nID0gWydwYXJhbXMnLCAncXVlcnknLCAnaGFzaCddO1xuXG5mdW5jdGlvbiBzdHJpbmdpZnlSb3V0ZSAodG8pIHtcbiAgaWYgKHR5cGVvZiB0byA9PT0gJ3N0cmluZycpIHsgcmV0dXJuIHRvIH1cbiAgaWYgKCdwYXRoJyBpbiB0bykgeyByZXR1cm4gdG8ucGF0aCB9XG4gIHZhciBsb2NhdGlvbiA9IHt9O1xuICBwcm9wZXJ0aWVzVG9Mb2cuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKGtleSBpbiB0bykgeyBsb2NhdGlvbltrZXldID0gdG9ba2V5XTsgfVxuICB9KTtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGxvY2F0aW9uLCBudWxsLCAyKVxufVxuXG5mdW5jdGlvbiBpc0Vycm9yIChlcnIpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlcnIpLmluZGV4T2YoJ0Vycm9yJykgPiAtMVxufVxuXG5mdW5jdGlvbiBpc05hdmlnYXRpb25GYWlsdXJlIChlcnIsIGVycm9yVHlwZSkge1xuICByZXR1cm4gKFxuICAgIGlzRXJyb3IoZXJyKSAmJlxuICAgIGVyci5faXNSb3V0ZXIgJiZcbiAgICAoZXJyb3JUeXBlID09IG51bGwgfHwgZXJyLnR5cGUgPT09IGVycm9yVHlwZSlcbiAgKVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gcmVzb2x2ZUFzeW5jQ29tcG9uZW50cyAobWF0Y2hlZCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHRvLCBmcm9tLCBuZXh0KSB7XG4gICAgdmFyIGhhc0FzeW5jID0gZmFsc2U7XG4gICAgdmFyIHBlbmRpbmcgPSAwO1xuICAgIHZhciBlcnJvciA9IG51bGw7XG5cbiAgICBmbGF0TWFwQ29tcG9uZW50cyhtYXRjaGVkLCBmdW5jdGlvbiAoZGVmLCBfLCBtYXRjaCwga2V5KSB7XG4gICAgICAvLyBpZiBpdCdzIGEgZnVuY3Rpb24gYW5kIGRvZXNuJ3QgaGF2ZSBjaWQgYXR0YWNoZWQsXG4gICAgICAvLyBhc3N1bWUgaXQncyBhbiBhc3luYyBjb21wb25lbnQgcmVzb2x2ZSBmdW5jdGlvbi5cbiAgICAgIC8vIHdlIGFyZSBub3QgdXNpbmcgVnVlJ3MgZGVmYXVsdCBhc3luYyByZXNvbHZpbmcgbWVjaGFuaXNtIGJlY2F1c2VcbiAgICAgIC8vIHdlIHdhbnQgdG8gaGFsdCB0aGUgbmF2aWdhdGlvbiB1bnRpbCB0aGUgaW5jb21pbmcgY29tcG9uZW50IGhhcyBiZWVuXG4gICAgICAvLyByZXNvbHZlZC5cbiAgICAgIGlmICh0eXBlb2YgZGVmID09PSAnZnVuY3Rpb24nICYmIGRlZi5jaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBoYXNBc3luYyA9IHRydWU7XG4gICAgICAgI
118HBlbmRpbmcrKztcblxuICAgICAgICB2YXIgcmVzb2x2ZSA9IG9uY2UoZnVuY3Rpb24gKHJlc29sdmVkRGVmKSB7XG4gICAgICAgICAgaWYgKGlzRVNNb2R1bGUocmVzb2x2ZWREZWYpKSB7XG4gICAgICAgICAgICByZXNvbHZlZERlZiA9IHJlc29sdmVkRGVmLmRlZmF1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHNhdmUgcmVzb2x2ZWQgb24gYXN5bmMgZmFjdG9yeSBpbiBjYXNlIGl0J3MgdXNlZCBlbHNld2hlcmVcbiAgICAgICAgICBkZWYucmVzb2x2ZWQgPSB0eXBlb2YgcmVzb2x2ZWREZWYgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgID8gcmVzb2x2ZWREZWZcbiAgICAgICAgICAgIDogX1Z1ZS5leHRlbmQocmVzb2x2ZWREZWYpO1xuICAgICAgICAgIG1hdGNoLmNvbXBvbmVudHNba2V5XSA9IHJlc29sdmVkRGVmO1xuICAgICAgICAgIHBlbmRpbmctLTtcbiAgICAgICAgICBpZiAocGVuZGluZyA8PSAwKSB7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB2YXIgcmVqZWN0ID0gb25jZShmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgdmFyIG1zZyA9IFwiRmFpbGVkIHRvIHJlc29sdmUgYXN5bmMgY29tcG9uZW50IFwiICsga2V5ICsgXCI6IFwiICsgcmVhc29uO1xuICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihmYWxzZSwgbXNnKTtcbiAgICAgICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICBlcnJvciA9IGlzRXJyb3IocmVhc29uKVxuICAgICAgICAgICAgICA/IHJlYXNvblxuICAgICAgICAgICAgICA6IG5ldyBFcnJvcihtc2cpO1xuICAgICAgICAgICAgbmV4dChlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB2Y
118XIgcmVzO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJlcyA9IGRlZihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHJlcy50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXMudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBuZXcgc3ludGF4IGluIFZ1ZSAyLjNcbiAgICAgICAgICAgIHZhciBjb21wID0gcmVzLmNvbXBvbmVudDtcbiAgICAgICAgICAgIGlmIChjb21wICYmIHR5cGVvZiBjb21wLnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgY29tcC50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIWhhc0FzeW5jKSB7IG5leHQoKTsgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZsYXRNYXBDb21wb25lbnRzIChcbiAgbWF0Y2hlZCxcbiAgZm5cbikge1xuICByZXR1cm4gZmxhdHRlbihtYXRjaGVkLm1hcChmdW5jdGlvbiAobSkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhtLmNvbXBvbmVudHMpLm1hcChmdW5jdGlvbiAoa2V5KSB7IHJldHVybiBmbihcbiAgICAgIG0uY29tcG9uZW50c1trZXldLFxuICAgICAgbS5pbnN0YW5jZXNba2V5XSxcbiAgICAgIG0sIGtleVxuICAgICk7IH0pXG4gIH0pKVxufVxuXG5mdW5jdGlvbiBmbGF0dGVuIChhcnIpIHtcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sIGFycilcbn1cblxudmFyIGhhc1N5bWJvbCA9XG4gIHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiZcbiAgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyA9PT0gJ3N5bWJvbCc7XG5cbmZ1bmN0aW9uIGlzRVNNb2R1bGUgKG9iaikge1xuICByZXR1cm4gb2JqLl9fZXNNb2R1bGUgfHwgKGhhc1N5bWJvbCAmJiBvYmpbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ01vZHVsZScpXG59XG5cbi8vIGluIFdlYnBhY2sgMiwgcmVxdWlyZS5lbnN1cmUgbm93IGFsc28gcmV0dXJucyBhIFByb21pc2Vcbi8vIHNvIHRoZSByZXNvbHZlL3JlamVjdCBmdW5jdGlvbnMgbWF5IGdldCBjYWxsZWQgYW4gZXh0cmEgdGltZVxuLy8gaWYgdGhlIHVzZXIgdXNlcyBhbiBhcnJvdyBmdW5jdGlvbiBzaG9ydGhhbmQgdGhhdCBoYXBwZW5zIHRvXG4vLyByZXR1cm4gdGhhdCBQcm9taXNlLlxuZnVuY3Rpb24gb25jZSAoZm4pIHtcbiAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgIGlmIChjYWxsZWQpIHsgcmV0dXJuIH1cbiAgICBjYWxsZWQgPSB0cnVlO1xuICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmdzKVxuICB9XG59XG5cbi8qICAqL1xuXG52YXIgSGlzdG9yeSA9IGZ1bmN0aW9uIEhpc3RvcnkgKHJvdXRlciwgYmFzZSkge1xuICB0aGlzLnJvdXRlciA9IHJvdXRlcjtcbiAgdGhpcy5iYXNlID0gbm9ybWFsaXplQmFzZShiYXNlKTtcbiAgLy8gc3RhcnQgd2l0aCBhIHJvdXRlIG9iamVjdCB0aGF0IHN0YW5kcyBmb3IgXCJub3doZXJlXCJcbiAgdGhpcy5jdXJyZW50ID0gU1RBUlQ7XG4gIHRoaXMucGVuZGluZyA9IG51bGw7XG4gIHRoaXMucmVhZHkgPSBmYWxzZTtcbiAgdGhpcy5yZWFkeUNicyA9IFtdO1xuICB0aGlzLnJlYWR5RXJyb3JDYnMgPSBbXTtcbiAgdGhpcy5lcnJvckNicyA9IFtdO1xuICB0aGlzLmxpc3RlbmVycyA9IFtdO1xufTtcblxuSGlzdG9yeS5wcm90b3R5cGUubGlzdGVuID0gZnVuY3Rpb24gbGlzdGVuIChjYikge1xuICB0aGlzLmNiID0gY2I7XG59O1xuXG5IaXN0b3J5LnByb3RvdHlwZS5vblJlYWR5ID0gZnVuY3Rpb24gb25SZWFkeSAoY2IsIGVycm9yQ2IpIHtcbiAgaWYgKHRoaXMucmVhZHkpIHtcbiAgICBjYigpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMucmVhZHlDYnMucHVzaChjYik7XG4gICAgaWYgKGVycm9yQ2IpIHtcbiAgICAgIHRoaXMucmVhZHlFcnJvckNicy5wdXNoKGVycm9yQ2IpO1xuICAgIH1cbiAgfVxufTtcblxuSGlzdG9yeS5wcm90b3R5cGUub25FcnJvciA9IGZ1bmN0aW9uIG9uRXJyb3IgKGVycm9yQ2IpIHtcbiAgdGhpcy5lcnJvckNicy5wdXNoKGVycm9yQ2IpO1xufTtcblxuSGlzdG9yeS5wcm90b3R5cGUudHJhbnNpdGlvblRvID0gZnVuY3Rpb24gdHJhbnNpdGlvblRvIChcbiAgbG9jYXRpb24sXG4gIG9uQ29tcGxldGUsXG4gIG9uQWJvcnRcbikge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIHZhciByb3V0ZTtcbiAgLy8gY2F0Y2ggcmVkaXJlY3Qgb3B0aW9uIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8zMjAxXG4gIHRyeSB7XG4gICAgcm91dGUgPSB0aGlzLnJvdXRlci5tYXRjaChsb2NhdGlvbiwgdGhpcy5jdXJyZW50KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRoaXMuZXJyb3JDYnMuZm9yRWFjaChmdW5jdGlvbiAoY2IpIHtcbiAgICAgIGNiKGUpO1xuICAgIH0pO1xuICAgIC8vIEV4Y2VwdGlvbiBzaG91bGQgc3RpbGwgYmUgdGhyb3duXG4gICAgdGhyb3cgZVxuICB9XG4gIHZhciBwcmV2ID0gdGhpcy5jdXJyZW50O1xuICB0aGlzLmNvbmZpcm1UcmFuc2l0aW9uKFxuICAgIHJvdXRlLFxuICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMkMS51cGRhdGVSb3V0ZShyb3V0ZSk7XG4gICAgICBvbkNvbXBsZXRlICYmIG9uQ29tcGxldGUocm91dGUpO1xuICAgICAgdGhpcyQxLmVuc3VyZVVSTCgpO1xuICAgICAgdGhpcyQxLnJvdXRlci5hZnRlckhvb2tzLmZvckVhY2goZnVuY3Rpb24gKGhvb2spIHtcbiAgICAgICAgaG9vayAmJiBob29rKHJvdXRlLCBwcmV2KTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBmaXJlIHJlYWR5IGNicyBvbmNlXG4gICAgICBpZiAoIXRoaXMkMS5yZWFkeSkge1xuICAgICAgICB0aGlzJDEucmVhZHkgPSB0cnVlO1xuICAgICAgICB0aGlzJDEucmVhZHlDYnMuZm9yRWFjaChmdW5jdGlvbiAoY2IpIHtcbiAgICAgICAgICBjYihyb3V0ZSk7XG4gICAgICAgI
118H0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgZnVuY3Rpb24gKGVycikge1xuICAgICAgaWYgKG9uQWJvcnQpIHtcbiAgICAgICAgb25BYm9ydChlcnIpO1xuICAgICAgfVxuICAgICAgaWYgKGVyciAmJiAhdGhpcyQxLnJlYWR5KSB7XG4gICAgICAgIC8vIEluaXRpYWwgcmVkaXJlY3Rpb24gc2hvdWxkIG5vdCBtYXJrIHRoZSBoaXN0b3J5IGFzIHJlYWR5IHlldFxuICAgICAgICAvLyBiZWNhdXNlIGl0J3MgdHJpZ2dlcmVkIGJ5IHRoZSByZWRpcmVjdGlvbiBpbnN0ZWFkXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8zMjI1XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8zMzMxXG4gICAgICAgIGlmICghaXNOYXZpZ2F0aW9uRmFpbHVyZShlcnIsIE5hdmlnYXRpb25GYWlsdXJlVHlwZS5yZWRpcmVjdGVkKSB8fCBwcmV2ICE9PSBTVEFSVCkge1xuICAgICAgICAgIHRoaXMkMS5yZWFkeSA9IHRydWU7XG4gICAgICAgICAgdGhpcyQxLnJlYWR5RXJyb3JDYnMuZm9yRWFjaChmdW5jdGlvbiAoY2IpIHtcbiAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICk7XG59O1xuXG5IaXN0b3J5LnByb3RvdHlwZS5jb25maXJtVHJhbnNpdGlvbiA9IGZ1bmN0aW9uIGNvbmZpcm1UcmFuc2l0aW9uIChyb3V0ZSwgb25Db21wbGV0ZSwgb25BYm9ydCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIHZhciBjdXJyZW50ID0gdGhpcy5jdXJyZW50O1xuICB0aGlzLnBlbmRpbmcgPSByb3V0ZTtcbiAgdmFyIGFib3J0ID0gZnVuY3Rpb24gKGVycikge1xuICAgIC8vIGNoYW5nZWQgYWZ0ZXIgYWRkaW5nIGVycm9ycyB3aXRoXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvcHVsbC8zMDQ3IGJlZm9yZSB0aGF0IGNoYW5nZSxcbiAgICAvLyByZWRpcmVjdCBhbmQgYWJvcnRlZCBuYXZpZ2F0aW9uIHdvdWxkIHByb2R1Y2UgYW4gZXJyID09IG51bGxcbiAgICBpZiAoIWlzTmF2aWdhdGlvbkZhaWx1cmU
118oZXJyKSAmJiBpc0Vycm9yKGVycikpIHtcbiAgICAgIGlmICh0aGlzJDEuZXJyb3JDYnMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMkMS5lcnJvckNicy5mb3JFYWNoKGZ1bmN0aW9uIChjYikge1xuICAgICAgICAgIGNiKGVycik7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICB3YXJuKGZhbHNlLCAndW5jYXVnaHQgZXJyb3IgZHVyaW5nIHJvdXRlIG5hdmlnYXRpb246Jyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgICBvbkFib3J0ICYmIG9uQWJvcnQoZXJyKTtcbiAgfTtcbiAgdmFyIGxhc3RSb3V0ZUluZGV4ID0gcm91dGUubWF0Y2hlZC5sZW5ndGggLSAxO1xuICB2YXIgbGFzdEN1cnJlbnRJbmRleCA9IGN1cnJlbnQubWF0Y2hlZC5sZW5ndGggLSAxO1xuICBpZiAoXG4gICAgaXNTYW1lUm91dGUocm91dGUsIGN1cnJlbnQpICYmXG4gICAgLy8gaW4gdGhlIGNhc2UgdGhlIHJvdXRlIG1hcCBoYXMgYmVlbiBkeW5hbWljYWxseSBhcHBlbmRlZCB0b1xuICAgIGxhc3RSb3V0ZUluZGV4ID09PSBsYXN0Q3VycmVudEluZGV4ICYmXG4gICAgcm91dGUubWF0Y2hlZFtsYXN0Um91dGVJbmRleF0gPT09IGN1cnJlbnQubWF0Y2hlZFtsYXN0Q3VycmVudEluZGV4XVxuICApIHtcbiAgICB0aGlzLmVuc3VyZVVSTCgpO1xuICAgIGlmIChyb3V0ZS5oYXNoKSB7XG4gICAgICBoYW5kbGVTY3JvbGwodGhpcy5yb3V0ZXIsIGN1cnJlbnQsIHJvdXRlLCBmYWxzZSk7XG4gICAgfVxuICAgIHJldHVybiBhYm9ydChjcmVhdGVOYXZpZ2F0aW9uRHVwbGljYXRlZEVycm9yKGN1cnJlbnQsIHJvdXRlKSlcbiAgfVxuXG4gIHZhciByZWYgPSByZXNvbHZlUXVldWUoXG4gICAgdGhpcy5jdXJyZW50Lm1hdGNoZWQsXG4gICAgcm91dGUubWF0Y2hlZFxuICApO1xuICAgIHZhciB1cGRhdGVkID0gcmVmLnVwZGF0ZWQ7XG4gICAgdmFyIGRlYWN0aXZhdGVkID0gcmVmLmRlYWN0aXZhdGVkO1xuICAgIHZhciBhY3RpdmF0ZWQgPSByZWYuYWN0aXZhdGVkO1xuXG4gIHZhciBxdWV1ZSA9IFtdLmNvbmNhdChcbiAgICAvLyBpbi1jb21wb25lbnQgbGVhdmUgZ3VhcmRzXG4gICAgZXh0cmFjdExlYXZlR3VhcmRzKGRlYWN0aXZhdGVkKSxcbiAgICAvLyBnbG9iYWwgYmVmb3JlIGhvb2tzXG4gICAgdGhpcy5yb3V0ZXIuYmVmb3JlSG9va3MsXG4gICAgLy8gaW4tY29tcG9uZW50IHVwZGF0ZSBob29rc1xuICAgIGV4dHJhY3RVcGRhdGVIb29rcyh1cGRhdGVkKSxcbiAgICAvLyBpbi1jb25maWcgZW50ZXIgZ3VhcmRzXG4gICAgYWN0aXZhdGVkLm1hcChmdW5jdGlvbiAobSkgeyByZXR1cm4gbS5iZWZvcmVFbnRlcjsgfSksXG4gICAgLy8gYXN5bmMgY29tcG9uZW50c1xuICAgIHJlc29sdmVBc3luY0NvbXBvbmVudHMoYWN0aXZhdGVkKVxuICApO1xuXG4gIHZhciBpdGVyYXRvciA9IGZ1bmN0aW9uIChob29rLCBuZXh0KSB7XG4gICAgaWYgKHRoaXMkMS5wZW5kaW5nICE9PSByb3V0ZSkge1xuICAgICAgcmV0dXJuIGFib3J0KGNyZWF0ZU5hdmlnYXRpb25DYW5jZWxsZWRFcnJvcihjdXJyZW50LCByb3V0ZSkpXG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBob29rKHJvdXRlLCBjdXJyZW50LCBmdW5jdGlvbiAodG8pIHtcbiAgICAgICAgaWYgKHRvID09PSBmYWxzZSkge1xuICAgICAgICAgIC8vIG5leHQoZmFsc2UpIC0+IGFib3J0IG5hdmlnYXRpb24sIGVuc3VyZSBjdXJyZW50IFVSTFxuICAgICAgICAgIHRoaXMkMS5lbnN1cmVVUkwodHJ1ZSk7XG4gICAgICAgICAgYWJvcnQoY3JlYXRlTmF2aWdhdGlvbkFib3J0ZWRFcnJvcihjdXJyZW50LCByb3V0ZSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRXJyb3IodG8pKSB7XG4gICAgICAgICAgdGhpcyQxLmVuc3VyZVVSTCh0cnVlKTtcbiAgICAgICAgICBhYm9ydCh0byk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgdHlwZW9mIHRvID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgICh0eXBlb2YgdG8gPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAodHlwZW9mIHRvLnBhdGggPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0by5uYW1lID09PSAnc3RyaW5nJykpXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIG5leHQoJy8nKSBvciBuZXh0KHsgcGF0aDogJy8nIH0pIC0+IHJlZGlyZWN0XG4gICAgICAgICAgYWJvcnQoY3JlYXRlTmF2aWdhdGlvblJlZGlyZWN0ZWRFcnJvcihjdXJyZW50LCByb3V0ZSkpO1xuICAgICAgICAgIGlmICh0eXBlb2YgdG8gPT09ICdvYmplY3QnICYmIHRvLnJlcGxhY2UpIHtcbiAgICAgICAgICAgIHRoaXMkMS5yZXBsYWNlKHRvKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcyQxLnB1c2godG8pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBjb25maXJtIHRyYW5zaXRpb24gYW5kIHBhc3Mgb24gdGhlIHZhbHVlXG4gICAgICAgICAgbmV4dCh0byk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGFib3J0KGUpO1xuICAgIH1cbiAgfTtcblxuICBydW5RdWV1ZShxdWV1ZSwgaXRlcmF0b3IsIGZ1bmN0aW9uICgpIHtcbiAgICAvLyB3YWl0IHVudGlsIGFzeW5jIGNvbXBvbmVudHMgYXJlIHJlc29sdmVkIGJlZm9yZVxuICAgIC8vIGV4dHJhY3RpbmcgaW4tY29tcG9uZW50IGVudGVyIGd1YXJkc1xuICAgIHZhciBlbnRlckd1YXJkcyA9IGV4dHJhY3RFbnRlckd1YXJkcyhhY3RpdmF0ZWQpO1xuICAgIHZhciBxdWV1ZSA9IGVudGVyR3VhcmRzLmNvbmNhdCh0aGlzJDEucm91dGVyLnJlc29sdmVIb29rcyk7XG4gICAgcnVuUXVldWUocXVldWUsIGl0ZXJhdG9yLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAodGhpcyQxLnBlbmRpbmcgIT09IHJvdXRlKSB7XG4gICAgICAgIHJldHVybiBhYm9ydChjcmVhdGVOYXZpZ2F0aW9uQ2FuY2VsbGVkRXJyb3IoY3VycmVudCwgcm91dGUpKVxuICAgICAgfVxuICAgICAgdGhpcyQxLnBlbmRpbmcgPSBudWxsO1xuICAgICAgb25Db21wbGV0ZShyb3V0ZSk7XG4gICAgICBpZiAodGhpcyQxLnJvdXRlci5hcHApIHtcbiAgICAgICAgdGhpcyQxLnJvdXRlci5hcHAuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBoYW5kbGVSb3V0ZUVudGVyZWQocm91dGUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59O1xuXG5IaXN0b3J5LnByb3RvdHlwZS51cGRhdGVSb3V0ZSA9IGZ1bmN0aW9uIHVwZGF0ZVJvdXRlIChyb3V0ZSkge1xuICB0aGlzLmN1cnJlbnQgPSByb3V0ZTtcbiAgdGhpcy5jYiAmJiB0aGlzLmNiKHJvdXRlKTtcbn07XG5cbkhpc3RvcnkucHJvdG90eXBlLnNldHVwTGlzdGVuZXJzID0gZnVuY3Rpb24gc2V0dXBMaXN0ZW5lcnMgKCkge1xuICAvLyBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIGVtcHR5XG59O1xuXG5IaXN0b3J5LnByb3RvdHlwZS50ZWFyZG93biA9IGZ1bmN0aW9uIHRlYXJkb3duICgpIHtcbiAgLy8gY2xlYW4gdXAgZXZlbnQgbGlzdGVuZXJzXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8yMzQxXG4gIHRoaXMubGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24gKGNsZWFudXBMaXN0ZW5lcikge1xuICAgIGNsZWFudXBMaXN0ZW5lcigpO1xuICB9KTtcbiAgdGhpcy5saXN0ZW5lcnMgPSBbXTtcblxuICAvLyByZXNldCBjdXJyZW50IGhpc3Rvcnkgcm91dGVcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzMyOTRcbiAgdGhpcy5jdXJyZW50ID0gU1RBUlQ7XG4gIHRoaXMucGVuZGluZyA9IG51bGw7XG59O1xuXG5mdW5jdGlvbiBub3JtYWxpem
118VCYXNlIChiYXNlKSB7XG4gIGlmICghYmFzZSkge1xuICAgIGlmIChpbkJyb3dzZXIpIHtcbiAgICAgIC8vIHJlc3BlY3QgPGJhc2U+IHRhZ1xuICAgICAgdmFyIGJhc2VFbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2Jhc2UnKTtcbiAgICAgIGJhc2UgPSAoYmFzZUVsICYmIGJhc2VFbC5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSkgfHwgJy8nO1xuICAgICAgLy8gc3RyaXAgZnVsbCBVUkwgb3JpZ2luXG4gICAgICBiYXNlID0gYmFzZS5yZXBsYWNlKC9eaHR0cHM/OlxcL1xcL1teXFwvXSsvLCAnJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJhc2UgPSAnLyc7XG4gICAgfVxuICB9XG4gIC8vIG1ha2Ugc3VyZSB0aGVyZSdzIHRoZSBzdGFydGluZyBzbGFzaFxuICBpZiAoYmFzZS5jaGFyQXQoMCkgIT09ICcvJykge1xuICAgIGJhc2UgPSAnLycgKyBiYXNlO1xuICB9XG4gIC8vIHJlbW92ZSB0cmFpbGluZyBzbGFzaFxuICByZXR1cm4gYmFzZS5yZXBsYWNlKC9cXC8kLywgJycpXG59XG5cbmZ1bmN0aW9uIHJlc29sdmVRdWV1ZSAoXG4gIGN1cnJlbnQsXG4gIG5leHRcbikge1xuICB2YXIgaTtcbiAgdmFyIG1heCA9IE1hdGgubWF4KGN1cnJlbnQubGVuZ3RoLCBuZXh0Lmxlbmd0aCk7XG4gIGZvciAoaSA9IDA7IGkgPCBtYXg7IGkrKykge1xuICAgIGlmIChjdXJyZW50W2ldICE9PSBuZXh0W2ldKSB7XG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHVwZGF0ZWQ6IG5leHQuc2xpY2UoMCwgaSksXG4gICAgYWN0aXZhdGVkOiBuZXh0LnNsaWNlKGkpLFxuICAgIGRlYWN0aXZhdGVkOiBjdXJyZW50LnNsaWNlKGkpXG4gIH1cbn1cblxuZnVuY3Rpb24gZXh0cmFjdEd1YXJkcyAoXG4gIHJlY29yZHMsXG4gIG5hbWUsXG4gIGJpbmQsXG4gIHJldmVyc2Vcbikge1xuICB2YXIgZ3VhcmRzID0gZmxhdE1hcENvbXBvbmVudHMocmVjb3JkcywgZnVuY3Rpb24gKGRlZiwgaW5zdGFuY2UsIG1hdGNoLCBrZXkpIHtcbiAgICB2YXIgZ3VhcmQgPSBleHRyYWN0R3VhcmQoZGVmLCBuYW1lKTtcbiAgICBpZiAoZ3VhcmQpIHtcbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGd1YXJkKVxuICAgICAgICA/IGd1YXJkLm1hcChmdW5jdGlvbiAoZ3VhcmQpIHsgcmV0dXJuIGJpbmQoZ3VhcmQsIGluc3RhbmNlLCBtYXRjaCwga2V5KTsgfSlcbiAgICAgICAgOiBiaW5kKGd1YXJkLCBpbnN0YW5jZSwgbWF0Y2gsIGtleSlcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZmxhdHRlbihyZXZlcnNlID8gZ3VhcmRzLnJldmVyc2UoKSA6IGd1YXJkcylcbn1cblxuZnVuY3Rpb24gZXh0cmFjdEd1YXJkIChcbiAgZGVmLFxuICBrZXlcbikge1xuICBpZiAodHlwZW9mIGRlZiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIGV4dGVuZCBub3cgc28gdGhhdCBnbG9iYWwgbWl4aW5zIGFyZSBhcHBsaWVkLlxuICAgIGRlZiA9IF9WdWUuZXh0ZW5kKGRlZik7XG4gIH1cbiAgcmV0dXJuIGRlZi5vcHRpb25zW2tleV1cbn1cblxuZnVuY3Rpb24gZXh0cmFjdExlYXZlR3VhcmRzIChkZWFjdGl2YXRlZCkge1xuICByZXR1cm4gZXh0cmFjdEd1YXJkcyhkZWFjdGl2YXRlZCwgJ2JlZm9yZVJvdXRlTGVhdmUnLCBiaW5kR3VhcmQsIHRydWUpXG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RVcGRhdGVIb29rcyAodXBkYXRlZCkge1xuICByZXR1cm4gZXh0cmFjdEd1YXJkcyh1cGRhdGVkLCAnYmVmb3JlUm91dGVVcGRhdGUnLCBiaW5kR3VhcmQpXG59XG5cbmZ1bmN0aW9uIGJpbmRHdWFyZCAoZ3VhcmQsIGluc3RhbmNlKSB7XG4gIGlmIChpbnN0YW5jZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiBib3VuZFJvdXRlR3VhcmQgKCkge1xuICAgICAgcmV0dXJuIGd1YXJkLmFwcGx5KGluc3RhbmNlLCBhcmd1bWVudHMpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RFbnRlckd1YXJkcyAoXG4gIGFjdGl2YXRlZFxuKSB7XG4gIHJldHVybiBleHRyYWN0R3VhcmRzKFxuICAgIGFjdGl2YXRlZCxcbiAgICAnYmVmb3JlUm91dGVFbnRlcicsXG4gICAgZnVuY3Rpb24gKGd1YXJkLCBfLCBtYXRjaCwga2V5KSB7XG4gICAgICByZXR1cm4gYmluZEVudGVyR3VhcmQoZ3VhcmQsIG1hdGNoLCBrZXkpXG4gICAgfVxuICApXG59XG5cbmZ1bmN0aW9uIGJpbmRFbnRlckd1YXJkIChcbiAgZ3VhcmQsXG4gIG1hdGNoLFxuICBrZXlcbikge1xuICByZXR1cm4gZnVuY3Rpb24gcm91dGVFbnRlckd1YXJkICh0bywgZnJvbSwgbmV4dCkge1xuICAgIHJldHVybiBndWFyZCh0bywgZnJvbSwgZnVuY3Rpb24gKGNiKSB7XG4gICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGlmICghbWF0Y2guZW50ZXJlZENic1trZXldKSB7XG4gICAgICAgICAgbWF0Y2guZW50ZXJlZENic1trZXldID0gW107XG4gICAgICAgIH1cbiAgICAgICAgbWF0Y2guZW50ZXJlZENic1trZXldLnB1c2goY2IpO1xuICAgICAgfVxuICAgICAgbmV4dChjYik7XG4gICAgfSlcbiAgfVxufVxuXG4vKiAgKi9cblxudmFyIEhUTUw1SGlzdG9yeSA9IC8qQF9fUFVSRV9fKi8oZnVuY3Rpb24gKEhpc3RvcnkpIHtcbiAgZnVuY3Rpb24gSFRNTDVIaXN0b3J5IChyb3V0ZXIsIGJhc2UpIHtcbiAgICBIaXN0b3J5LmNhbGwodGhpcywgcm91dGVyLCBiYXNlKTtcblxuICAgIHRoaXMuX3N0YXJ0TG9jYXRpb24gPSBnZXRMb2NhdGlvbih0aGlzLmJhc2UpO1xuICB9XG5cbiAgaWYgKCBIaXN0b3J5ICkgSFRNTDVIaXN0b3J5Ll9fcHJvdG9fXyA9IEhpc3Rvcnk7XG4gIEhUTUw1SGlzdG9yeS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBIaXN0b3J5ICYmIEhpc3RvcnkucHJvdG90eXBlICk7XG4gIEhUTUw1SGlzdG9yeS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBIVE1MNUhpc3Rvcnk7XG5cbiAgSFRNTDVIaXN0b3J5LnByb3RvdHlwZS5zZXR1cExpc3RlbmVycyA9IGZ1bmN0aW9uIHNldHVwTGlzdGVuZXJzICgpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIGlmICh0aGlzLmxpc3RlbmVycy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB2YXIgcm91dGVyID0gdGhpcy5yb3V0ZXI7XG4gICAgdmFyIGV4cGVjdFNjcm9sbCA9IHJvdXRlci5vcHRpb25zLnNjcm9sbEJlaGF2aW9yO1xuICAgIHZhciBzdXBwb3J0c1Njcm9sbCA9IHN1cHBvcnRzUHVzaFN0YXRlICYmIGV4cGVjdFNjcm9sbDtcblxuICAgIGlmIChzdXBwb3J0c1Njcm9sbCkge1xuICAgICAgdGhpcy5saXN0ZW5lcnMucHVzaChzZXR1cFNjcm9sbCgpKTtcbiAgICB9XG5cbiAgICB2YXIgaGFuZGxlUm91dGluZ0V2ZW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzJDEuY3VycmVudDtcblxuICAgICAgLy8gQXZvaWRpbmcgZmlyc3QgYHBvcHN0YXRlYCBldmVudCBkaXNwYXRjaGVkIGluIHNvbWUgYnJvd3NlcnMgYnV0IGZpcnN0XG4gICAgICAvLyBo
118aXN0b3J5IHJvdXRlIG5vdCB1cGRhdGVkIHNpbmNlIGFzeW5jIGd1YXJkIGF0IHRoZSBzYW1lIHRpbWUuXG4gICAgICB2YXIgbG9jYXRpb24gPSBnZXRMb2NhdGlvbih0aGlzJDEuYmFzZSk7XG4gICAgICBpZiAodGhpcyQxLmN1cnJlbnQgPT09IFNUQVJUICYmIGxvY2F0aW9uID09PSB0aGlzJDEuX3N0YXJ0TG9jYXRpb24pIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHRoaXMkMS50cmFuc2l0aW9uVG8obG9jYXRpb24sIGZ1bmN0aW9uIChyb3V0ZSkge1xuICAgICAgICBpZiAoc3VwcG9ydHNTY3JvbGwpIHtcbiAgICAgICAgICBoYW5kbGVTY3JvbGwocm91dGVyLCByb3V0ZSwgY3VycmVudCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvcHN0YXRlJywgaGFuZGxlUm91dGluZ0V2ZW50KTtcbiAgICB0aGlzLmxpc3RlbmVycy5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdwb3BzdGF0ZScsIGhhbmRsZVJvdXRpbmdFdmVudCk7XG4gICAgfSk7XG4gIH07XG5cbiAgSFRNTDVIaXN0b3J5LnByb3RvdHlwZS5nbyA9IGZ1bmN0aW9uIGdvIChuKSB7XG4gICAgd2luZG93Lmhpc3RvcnkuZ28obik7XG4gIH07XG5cbiAgSFRNTDVIaXN0b3J5LnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gcHVzaCAobG9jYXRpb24sIG9uQ29tcGxldGUsIG9uQWJvcnQpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciByZWYgPSB0aGlzO1xuICAgIHZhciBmcm9tUm91dGUgPSByZWYuY3VycmVudDtcbiAgICB0aGlzLnRyYW5zaXRpb25Ubyhsb2NhdGlvbiwgZnVuY3Rpb24gKHJvdXRlKSB7XG4gICAgICBwdXNoU3RhdGUoY2xlYW5QYXRoKHRoaXMkMS5iYXNlICsgcm91dGUuZnVsbFBhdGgpKTtcbiAgICAgIGhhbmRsZVNjcm9sbCh0aGlzJDEucm91dGVyLCByb3V0ZSwgZnJvbVJvdXRlLCBmYWxzZSk7XG4gICAgICBvbkNvbXBsZXRlICYmIG9uQ29tcGxldGUocm91dGUpO1xuICAgIH0sIG9uQWJvcnQpO1xuICB9O1xuXG4gIEhUTUw1SGlzdG9yeS5wcm90b3R5cGUucmVwbGFjZSA9IGZ1bmN0aW9uIHJlcGxhY2UgKGxvY2F0aW9uLCBvbkNvbXBsZXRlLCBvbkFib3J0KSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgcmVmID0gdGhpcztcbiAgICB2YXIgZnJvbVJvdXRlID0gcmVmLmN1cnJlbnQ7XG4gICAgdGhpcy50cmFuc2l0aW9uVG8obG9jYXRpb24sIGZ1bmN0aW9uIChyb3V0ZSkge1xuICAgICAgcmVwbGFjZVN0YXRlKGNsZWFuUGF0aCh0aGlzJDEuYmFzZSArIHJvdXRlLmZ1bGxQYXRoKSk7XG4gICAgICBoYW5kbGVTY3JvbGwodGhpcyQxLnJvdXRlciwgcm91dGUsIGZyb21Sb3V0ZSwgZmFsc2UpO1xuICAgICAgb25Db21wbGV0ZSAmJiBvbkNvbXBsZXRlKHJvdXRlKTtcbiAgICB9LCBvbkFib3J0KTtcbiAgfTtcblxuICBIVE1MNUhpc3RvcnkucHJvdG90eXBlLmVuc3VyZVVSTCA9IGZ1bmN0aW9uIGVuc3VyZVVSTCAocHVzaCkge1xuICAgIGlmIChnZXRMb2NhdGlvbih0aGlzLmJhc2UpICE9PSB0aGlzLmN1cnJlbnQuZnVsbFBhdGgpIHtcbiAgICAgIHZhciBjdXJyZW50ID0gY2xlYW5QYXRoKHRoaXMuYmFzZSArIHRoaXMuY3VycmVudC5mdWxsUGF0aCk7XG4gICAgICBwdXNoID8gcHVzaFN0YXRlKGN1cnJlbnQpIDogcmVwbGFjZVN0YXRlKGN1cnJlbnQpO1xuICAgIH1cbiAgfTtcblxuICBIVE1MNUhpc3RvcnkucHJvdG90eXBlLmdldEN1cnJlbnRMb2NhdGlvbiA9IGZ1bmN0aW9uIGdldEN1cnJlbnRMb2NhdGlvbiAoKSB7XG4gICAgcmV0dXJuIGdldExvY2F0aW9uKHRoaXMuYmFzZSlcbiAgfTtcblxuICByZXR1cm4gSFRNTDVIaXN0b3J5O1xufShIaXN0b3J5KSk7XG5cbmZ1bmN0aW9uIGdldExvY2F0aW9uIChiYXNlKSB7XG4gIHZhciBwYXRoID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lO1xuICB2YXIgcGF0aExvd2VyQ2FzZSA9IHBhdGgudG9Mb3dlckNhc2UoKTtcbiAgdmFyIGJhc2VMb3dlckNhc2UgPSBiYXNlLnRvTG93ZXJDYXNlKCk7XG4gIC8vIGJhc2U9XCIvYVwiIHNob3VsZG4ndCB0dXJuIHBhdGg9XCIvYXBwXCIgaW50byBcIi9hL3BwXCJcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzM1NTVcbiAgLy8gc28gd2UgZW5zdXJlIHRoZSB0cmFpbGluZyBzbGFzaCBpbiB0aGUgYmFzZVxuICBpZiAoYmFzZSAmJiAoKHBhdGhMb3dlckNhc2UgPT09IGJhc2VMb3dlckNhc2UpIHx8XG4gICAgKHBhdGhMb3dlckNhc2UuaW5kZXhPZihjbGVhblBhdGgoYmFzZUxvd2VyQ2FzZSArICcvJykpID09PSAwKSkpIHtcbiAgICBwYXRoID0gcGF0aC5zbGljZShiYXNlLmxlbmd0aCk7XG4gIH1cbiAgcmV0dXJuIChwYXRoIHx8ICcvJykgKyB3aW5kb3cubG9jYXRpb24uc2VhcmNoICsgd2luZG93LmxvY2F0aW9uLmhhc2hcbn1cblxuLyogICovXG5cbnZhciBIYXNoSGlzdG9yeSA9IC8qQF9fUFVSRV9fKi8oZnVuY3Rpb24gKEhpc3RvcnkpIHtcbiAgZnVuY3Rpb24gSGFzaEhpc3RvcnkgKHJvdXRlciwgYmFzZSwgZmFsbGJhY2spIHtcbiAgICBIaXN0b3J5LmNhbGwodGhpcywgcm91dGVyLCBiYXNlKTtcbiAgICAvLyBjaGVjayBoaXN0b3J5IGZhbGxiYWNrIGRlZXBsaW5raW5nXG4gICAgaWYgKGZhbGxiYWNrICYmIGNoZWNrRmFsbGJhY2sodGhpcy5iYXNlKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGVuc3VyZVNsYXNoKCk7XG4gIH1cblxuICBpZiAoIEhpc3RvcnkgKSBIYXNoSGlzdG9yeS5fX3Byb3RvX18gPSBIaXN0b3J5O1xuICBIYXNoSGlzdG9yeS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBIaXN0b3J5ICYmIEhpc3RvcnkucHJvdG90eXBlICk7XG4gIEhhc2hIaXN0b3J5LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEhhc2hIaXN0b3J5O1xuXG4gIC8vIHRoaXMgaXMgZGVsYXllZCB1bnRpbCB0aGUgYXBwIG1vdW50c1xuICAvLyB0byBhdm9pZCB0aGUgaGFzaGNoYW5nZSBsaXN0ZW5lciBiZWluZyBmaXJlZCB0b28gZWFybHlcbiAgSGFzaEhpc3RvcnkucHJvdG90eXBlLnNldHVwTGlzdGVuZXJzID0gZnVuY3Rpb24gc2V0dXBMaXN0ZW5lcnMgKCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgaWYgKHRoaXMubGlzdGVuZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVyblxuICAgI
118H1cblxuICAgIHZhciByb3V0ZXIgPSB0aGlzLnJvdXRlcjtcbiAgICB2YXIgZXhwZWN0U2Nyb2xsID0gcm91dGVyLm9wdGlvbnMuc2Nyb2xsQmVoYXZpb3I7XG4gICAgdmFyIHN1cHBvcnRzU2Nyb2xsID0gc3VwcG9ydHNQdXNoU3RhdGUgJiYgZXhwZWN0U2Nyb2xsO1xuXG4gICAgaWYgKHN1cHBvcnRzU2Nyb2xsKSB7XG4gICAgICB0aGlzLmxpc3RlbmVycy5wdXNoKHNldHVwU2Nyb2xsKCkpO1xuICAgIH1cblxuICAgIHZhciBoYW5kbGVSb3V0aW5nRXZlbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgY3VycmVudCA9IHRoaXMkMS5jdXJyZW50O1xuICAgICAgaWYgKCFlbnN1cmVTbGFzaCgpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgdGhpcyQxLnRyYW5zaXRpb25UbyhnZXRIYXNoKCksIGZ1bmN0aW9uIChyb3V0ZSkge1xuICAgICAgICBpZiAoc3VwcG9ydHNTY3JvbGwpIHtcbiAgICAgICAgICBoYW5kbGVTY3JvbGwodGhpcyQxLnJvdXRlciwgcm91dGUsIGN1cnJlbnQsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc3VwcG9ydHNQdXNoU3RhdGUpIHtcbiAgICAgICAgICByZXBsYWNlSGFzaChyb3V0ZS5mdWxsUGF0aCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgdmFyIGV2ZW50VHlwZSA9IHN1cHBvcnRzUHVzaFN0YXRlID8gJ3BvcHN0YXRlJyA6ICdoYXNoY2hhbmdlJztcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgIGV2ZW50VHlwZSxcbiAgICAgIGhhbmRsZVJvdXRpbmdFdmVudFxuICAgICk7XG4gICAgdGhpcy5saXN0ZW5lcnMucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZVJvdXRpbmdFdmVudCk7XG4gICAgfSk7XG4gIH07XG5cbiAgSGFzaEhpc3RvcnkucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiBwdXNoIChsb2NhdGlvbiwgb25Db21wbGV0ZSwgb25BYm9ydCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIHJlZiA9IHRoaXM7XG4gICAgdmFyIGZyb21Sb3V0ZSA9IHJlZi5jdXJyZW50O1xuICAgIHRoaXMudHJhbnNpdGlvblRvKFxuICAgICAgbG9jYXRpb24sXG4gICAgICBmdW5jdGlvbiAocm91dGUpIHtcbiAgICAgICAgcHVzaEhhc2gocm91dGUuZnVsbFBhdGgpO1xuICAgICAgICBoYW5kbGVTY3JvbGwodGhpcyQxLnJvdXRlciwgcm91dGUsIGZyb21Sb3V0ZSwgZmFsc2UpO1xuICAgICAgICBvbkNvbXBsZXRlICYmIG9uQ29tcGxldGUocm91dGUpO1xuICAgICAgfSxcbiAgICAgIG9uQWJvcnRcbiAgICApO1xuICB9O1xuXG4gIEhhc2hIaXN0b3J5LnByb3RvdHlwZS5yZXBsYWNlID0gZnVuY3Rpb24gcmVwbGFjZSAobG9jYXRpb24sIG9uQ29tcGxldGUsIG9uQWJvcnQpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciByZWYgPSB0aGlzO1xuICAgIHZhciBmcm9tUm91dGUgPSByZWYuY3VycmVudDtcbiAgICB0aGlzLnRyYW5zaXRpb25UbyhcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgZnVuY3Rpb24gKHJvdXRlKSB7XG4gICAgICAgIHJlcGxhY2VIYXNoKHJvdXRlLmZ1bGxQYXRoKTtcbiAgICAgICAgaGFuZGxlU2Nyb2xsKHRoaXMkMS5yb3V0ZXIsIHJvdXRlLCBmcm9tUm91dGUsIGZhbHNlKTtcbiAgICAgICAgb25Db21wbGV0ZSAmJiBvbkNvbXBsZXRlKHJvdXRlKTtcbiAgICAgIH0sXG4gICAgICBvbkFib3J0XG4gICAgKTtcbiAgfTtcblxuICBIYXNoSGlzdG9yeS5wcm90b3R5cGUuZ28gPSBmdW5jdGlvbiBnbyAobikge1xuICAgIHdpbmRvdy5oaXN0b3J5LmdvKG4pO1xuICB9O1xuXG4gIEhhc2hIaXN0b3J5LnByb3RvdHlwZS5lbnN1cmVVUkwgPSBmdW5jdGlvbiBlbnN1cmVVUkwgKHB1c2gpIHtcbiAgICB2YXIgY3VycmVudCA9IHRoaXMuY3VycmVudC5mdWxsUGF0aDtcbiAgICBpZiAoZ2V0SGFzaCgpICE9PSBjdXJyZW50KSB7XG4gICAgICBwdXNoID8gcHVzaEhhc2goY3VycmVudCkgOiByZXBsYWNlSGFzaChjdXJyZW50KTtcbiAgICB9XG4gIH07XG5cbiAgSGFzaEhpc3RvcnkucHJvdG90eXBlLmdldEN1cnJlbnRMb2NhdGlvbiA9IGZ1bmN0aW9uIGdldEN1cnJlbnRMb2NhdGlvbiAoKSB7XG4gICAgcmV0dXJuIGdldEhhc2goKVxuICB9O1xuXG4gIHJldHVybiBIYXNoSGlzdG9yeTtcbn0oSGlzdG9yeSkpO1xuXG5mdW5jdGlvbiBjaGVja0ZhbGxiYWNrIChiYXNlKSB7XG4gIHZhciBsb2NhdGlvbiA9IGdldExvY2F0aW9uKGJhc2UpO1xuICBpZiAoIS9eXFwvIy8udGVzdChsb2NhdGlvbikpIHtcbiAgICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZShjbGVhblBhdGgoYmFzZSArICcvIycgKyBsb2NhdGlvbikpO1xuICAgIHJldHVybiB0cnVlXG4gIH1cbn1cblxuZnVuY3Rpb24gZW5zdXJlU2xhc2ggKCkge1xuICB2YXIgcGF0aCA9IGdldEhhc2goKTtcbiAgaWYgKHBhdGguY2hhckF0KDApID09PSAnLycpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIHJlcGxhY2VIYXNoKCcvJyArIHBhdGgpO1xuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gZ2V0SGFzaCAoKSB7XG4gIC8vIFdlIGNhbid0IHVzZSB3aW5kb3cubG9jYXRpb24uaGFzaCBoZXJlIGJlY2F1c2UgaXQncyBub3RcbiAgLy8gY29uc2lzdGVudCBhY3Jvc3MgYnJvd3NlcnMgLSBGaXJlZm94IHdpbGwgcHJlLWRlY29kZSBpdCFcbiAgdmFyIGhyZWYgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgdmFyIGluZGV4ID0gaHJlZi5pbmRleE9mKCcjJyk7XG4gIC8vIGVtcHR5IHBhdGhcbiAgaWYgKGluZGV4IDwgMCkgeyByZXR1cm4gJycgfVxuXG4gIGhyZWYgPSBocmVmLnNsaWNlKGluZGV4ICsgMSk7XG5cbiAgcmV0dXJuIGhyZWZcbn1cblxuZnVuY3Rpb24gZ2V0VXJsIChwYXRoKSB7XG4gIHZhciBocmVmID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gIHZhciBpID0gaHJlZi5pbmRleE9mKCcjJyk7XG4gIHZhciBiYXNlID0gaSA+PSAwID8gaHJlZi5zbGljZSgwLCBpKSA6IGhyZWY7XG4gIHJldHVybiAoYmFzZSArIFwiI1wiICsgcGF0aClcbn1cblxuZnVuY3Rpb24gcHVzaEhhc2ggKHBhdGgpIHtcbiAgaWYgKHN1cHBvcnRzUHVzaFN0YXRlKSB7XG4gICAgcHVzaFN0YXRlKGdldFVybChwYXRoKSk7XG4gIH0gZWxzZSB7XG4gICAgd2luZG93LmxvY2F0aW9uLmhhc2ggPSBwYXRoO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VIYXNoIChwYXRoKSB7XG4gIGlmIChzdXBwb3J0c1B1c2hTdGF0ZSkge1xuICAgIHJlcGxhY2VTdGF0ZShnZXRVcmwocGF0aCkpO1xuICB9IGVsc2Uge1xuICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKGdldFVybChwYXRoKSk7XG4gIH1cbn1cblxuLyogICovXG5cbnZhciBBYnN0cmFjdEhpc3RvcnkgPSAvKkBfX1BVUkVfXyovKGZ1bmN0aW9uIChIaXN0b3J5KSB7XG4gIGZ1bmN0aW9uIEFic3RyYWN0SGlzdG9yeSAocm91dGVyLCBiYXNlKSB7XG4gICAgSGlzdG9yeS5jYWxsKHRoaXMsIHJvdXRlciwgYmFzZSk7XG4gICAgdGhpcy5zdGFjayA9IFtdO1xuICAgIHRoaXMuaW5kZXggPSAtMTtcbiAgfVxuXG4gIGlmICggSGlzdG9yeSApIEFic3RyYWN0SGlzdG9yeS5fX3Byb3RvX18gPSBIaXN0b3J5O1xuICBBYnN0cmFjdEhpc3RvcnkucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggSGlzdG9yeSAmJiBIaXN0b3J5LnByb3RvdHlwZSApO1xuICBBYnN0cmFjdEhpc3RvcnkucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWJzdHJhY3RIaXN0b3J5O1xuXG4gIEFic3RyYWN0SGlzdG9yeS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIHB1c2ggKGxvY2F0aW9uLCBvbkNvbXBsZXRlLCBvbkFib3J0KSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB0aGlzLnRyYW5zaXRpb25UbyhcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgZnVuY3Rpb24gKHJvdXRlKSB7XG4gICAgICAgI
118HRoaXMkMS5zdGFjayA9IHRoaXMkMS5zdGFjay5zbGljZSgwLCB0aGlzJDEuaW5kZXggKyAxKS5jb25jYXQocm91dGUpO1xuICAgICAgICB0aGlzJDEuaW5kZXgrKztcbiAgICAgICAgb25Db21wbGV0ZSAmJiBvbkNvbXBsZXRlKHJvdXRlKTtcbiAgICAgIH0sXG4gICAgICBvbkFib3J0XG4gICAgKTtcbiAgfTtcblxuICBBYnN0cmFjdEhpc3RvcnkucHJvdG90eXBlLnJlcGxhY2UgPSBmdW5jdGlvbiByZXBsYWNlIChsb2NhdGlvbiwgb25Db21wbGV0ZSwgb25BYm9ydCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdGhpcy50cmFuc2l0aW9uVG8oXG4gICAgICBsb2NhdGlvbixcbiAgICAgIGZ1bmN0aW9uIChyb3V0ZSkge1xuICAgICAgICB0aGlzJDEuc3RhY2sgPSB0aGlzJDEuc3RhY2suc2xpY2UoMCwgdGhpcyQxLmluZGV4KS5jb25jYXQocm91dGUpO1xuICAgICAgICBvbkNvbXBsZXRlICYmIG9uQ29tcGxldGUocm91dGUpO1xuICAgICAgfSxcbiAgICAgIG9uQWJvcnRcbiAgICApO1xuICB9O1xuXG4gIEFic3RyYWN0SGlzdG9yeS5wcm90b3R5cGUuZ28gPSBmdW5jdGlvbiBnbyAobikge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIHRhcmdldEluZGV4ID0gdGhpcy5pbmRleCArIG47XG4gICAgaWYgKHRhcmdldEluZGV4IDwgMCB8fCB0YXJnZXRJbmRleCA+PSB0aGlzLnN0YWNrLmxlbmd0aCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHZhciByb3V0ZSA9IHRoaXMuc3RhY2tbdGFyZ2V0SW5kZXhdO1xuICAgIHRoaXMuY29uZmlybVRyYW5zaXRpb24oXG4gICAgICByb3V0ZSxcbiAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHByZXYgPSB0aGlzJDEuY3VycmVudDtcbiAgICAgICAgdGhpcyQxLmluZGV4ID0gdGFyZ2V0SW5kZXg7XG4gICAgICAgIHRoaXMkMS51cGRhdGVSb3V0ZShyb3V0ZSk7XG4gICAgICAgIHRoaXMkMS5yb3V0ZXIuYWZ0ZXJIb29rcy5mb3JFYWNoKGZ1bmN0aW9uIChob29rKSB7XG4gICAgICAgICAgaG9vayAmJiBob29rKHJvdXRlLCBwcmV2KTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoaXNOYXZpZ2F0aW9uRmFpbHVyZShlcnIsIE5hdmlnYXRpb25GYWlsdXJlVHlwZS5kdXBsaWNhdGVkKSkge1xuICAgICAgICAgIHRoaXMkMS5pbmRleCA9IHRhcmdldEluZGV4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgfTtcblxuICBBYnN0cmFjdEhpc3RvcnkucHJvdG90eXBlLmdldEN1cnJlbnRMb2NhdGlvbiA9IGZ1bmN0aW9uIGdldEN1cnJlbnRMb2NhdGlvbiAoKSB7XG4gICAgdmFyIGN1cnJlbnQgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07XG4gICAgcmV0dXJuIGN1cnJlbnQgPyBjdXJyZW50LmZ1bGxQYXRoIDogJy8nXG4gIH07XG5cbiAgQWJzdHJhY3RIaXN0b3J5LnByb3RvdHlwZS5lbnN1cmVVUkwgPSBmdW5jdGlvbiBlbnN1cmVVUkwgKCkge1xuICAgIC8vIG5vb3BcbiAgfTtcblxuICByZXR1cm4gQWJzdHJhY3RIaXN0b3J5O1xufShIaXN0b3J5KSk7XG5cbi8qICAqL1xuXG52YXIgVnVlUm91dGVyID0gZnVuY3Rpb24gVnVlUm91dGVyIChvcHRpb25zKSB7XG4gIGlmICggb3B0aW9ucyA9PT0gdm9pZCAwICkgb3B0aW9ucyA9IHt9O1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgd2Fybih0aGlzIGluc3RhbmNlb2YgVnVlUm91dGVyLCBcIlJvdXRlciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3IuXCIpO1xuICB9XG4gIHRoaXMuYXBwID0gbnVsbDtcbiAgdGhpcy5hcHBzID0gW107XG4gIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gIHRoaXMuYmVmb3JlSG9va3MgPSBbXTtcbiAgdGhpcy5yZXNvbHZlSG9va3MgPSBbXTtcbiAgdGhpcy5hZnRlckhvb2tzID0gW107XG4gIHRoaXMubWF0Y2hlciA9IGNyZWF0ZU1hdGNoZXIob3B0aW9ucy5yb3V0ZXMgfHwgW10sIHRoaXMpO1xuXG4gIHZhciBtb2RlID0gb3B0aW9ucy5tb2RlIHx8ICdoYXNoJztcbiAgdGhpcy5mYWxsYmFjayA9XG4gICAgbW9kZSA9PT0gJ2hpc3RvcnknICYmICFzdXBwb3J0c1B1c2hTdGF0ZSAmJiBvcHRpb25zLmZhbGxiYWNrICE9PSBmYWxzZTtcbiAgaWYgKHRoaXMuZmFsbGJhY2spIHtcbiAgICBtb2RlID0gJ2hhc2gnO1xuICB9XG4gIGlmICghaW5Ccm93c2VyKSB7XG4gICAgbW9kZSA9ICdhYnN0cmFjdCc7XG4gIH1cbiAgdGhpcy5tb2RlID0gbW9kZTtcblxuICBzd2l0Y2ggKG1vZGUpIHtcbiAgICBjYXNlICdoaXN0b3J5JzpcbiAgICAgIHRoaXMuaGlzdG9yeSA9IG5ldyBIVE1MNUhpc3RvcnkodGhpcywgb3B0aW9ucy5iYXNlKTtcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnaGFzaCc6XG4gICAgICB0aGlzLmhpc3RvcnkgPSBuZXcgSGFzaEhpc3RvcnkodGhpcywgb3B0aW9ucy5iYXNlLCB0aGlzLmZhbGxiYWNrKTtcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnYWJzdHJhY3QnOlxuICAgICAgdGhpcy5oaXN0b3J5ID0gbmV3IEFic3RyYWN0SGlzdG9yeSh0aGlzLCBvcHRpb25zLmJhc2UpO1xuICAgICAgYnJlYWtcbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgYXNzZXJ0KGZhbHNlLCAoXCJpbnZhbGlkIG1vZGU6IFwiICsgbW9kZSkpO1xuICAgICAgfVxuICB9XG59O1xuXG52YXIgcHJvdG90eXBlQWNjZXNzb3JzID0geyBjdXJyZW50Um91dGU6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0gfTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5tYXRjaCA9IGZ1bmN0aW9uIG1hdGNoIChyYXcsIGN1cnJlbnQsIHJlZGlyZWN0ZWRGcm9tKSB7XG4gIHJldHVybiB0aGlzLm1hdGNoZXIubWF0Y2gocmF3LCBjdXJyZW50LCByZWRpcmVjdGVkRnJvbSlcbn07XG5cbnByb3RvdHlwZUFjY2Vzc29ycy5jdXJyZW50Um91dGUuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5oaXN0b3J5ICYmIHRoaXMuaGlzdG9yeS5jdXJyZW50XG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiBpbml0IChhcHAgLyogVnVlIGNvbXBvbmVudCBpbnN0YW5jZSAqLykge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICBhc3NlcnQoXG4gICAgICBpbnN0YWxsLmluc3RhbGxlZCxcbiAgICAgIFwibm90IGluc3RhbGxlZC4gTWFrZSBzdXJlIHRvIGNhbGwgYFZ1ZS51c2UoVnVlUm91dGVyKWAgXCIgK1xuICAgICAgICBcImJlZm9yZSBjcmVhdGluZyByb290IGluc3RhbmNlLlwiXG4gICAgKTtcblxuICB0aGlzLmFwcHMucHVzaChhcHApO1xuXG4gIC8vIHNldCB1cCBhcHAgZGVzdHJveWVkIGhhbmRsZXJcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzI2MzlcbiAgYXBwLiRvbmNlKCdob29rOmRlc3Ryb3llZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBjbGVhbiBvdXQgYXBwIGZyb20gdGhpcy5hcHBzIGFycmF5IG9uY2UgZGVzdHJveWVkXG4gICAgdmFyIGluZGV4ID0gdGhpcyQxLmFwcHMuaW5kZXhPZihhcHApO1xuICAgIGlmIChpbmRleCA+IC0xKSB7IHRoaXMkMS5hcHBzLnNwbGljZShpbmRleCwgMSk7IH1cbiAgICAvLyBlbnN1cmUgd2Ug
118c3RpbGwgaGF2ZSBhIG1haW4gYXBwIG9yIG51bGwgaWYgbm8gYXBwc1xuICAgIC8vIHdlIGRvIG5vdCByZWxlYXNlIHRoZSByb3V0ZXIgc28gaXQgY2FuIGJlIHJldXNlZFxuICAgIGlmICh0aGlzJDEuYXBwID09PSBhcHApIHsgdGhpcyQxLmFwcCA9IHRoaXMkMS5hcHBzWzBdIHx8IG51bGw7IH1cblxuICAgIGlmICghdGhpcyQxLmFwcCkgeyB0aGlzJDEuaGlzdG9yeS50ZWFyZG93bigpOyB9XG4gIH0pO1xuXG4gIC8vIG1haW4gYXBwIHByZXZpb3VzbHkgaW5pdGlhbGl6ZWRcbiAgLy8gcmV0dXJuIGFzIHdlIGRvbid0IG5lZWQgdG8gc2V0IHVwIG5ldyBoaXN0b3J5IGxpc3RlbmVyXG4gIGlmICh0aGlzLmFwcCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgdGhpcy5hcHAgPSBhcHA7XG5cbiAgdmFyIGhpc3RvcnkgPSB0aGlzLmhpc3Rvcnk7XG5cbiAgaWYgKGhpc3RvcnkgaW5zdGFuY2VvZiBIVE1MNUhpc3RvcnkgfHwgaGlzdG9yeSBpbnN0YW5jZW9mIEhhc2hIaXN0b3J5KSB7XG4gICAgdmFyIGhhbmRsZUluaXRpYWxTY3JvbGwgPSBmdW5jdGlvbiAocm91dGVPckVycm9yKSB7XG4gICAgICB2YXIgZnJvbSA9IGhpc3RvcnkuY3VycmVudDtcbiAgICAgIHZhciBleHBlY3RTY3JvbGwgPSB0aGlzJDEub3B0aW9ucy5zY3JvbGxCZWhhdmlvcjtcbiAgICAgIHZhciBzdXBwb3J0c1Njcm9sbCA9IHN1cHBvcnRzUHVzaFN0YXRlICYmIGV4cGVjdFNjcm9sbDtcblxuICAgICAgaWYgKHN1cHBvcnRzU2Nyb2xsICYmICdmdWxsUGF0aCcgaW4gcm91dGVPckVycm9yKSB7XG4gICAgICAgIGhhbmRsZVNjcm9sbCh0aGlzJDEsIHJvdXRlT3JFcnJvciwgZnJvbSwgZmFsc2UpO1xuICAgICAgfVxuICAgIH07XG4gICAgdmFyIHNldHVwTGlzdGVuZXJzID0gZnVuY3Rpb24gKHJvdXRlT3JFcnJvcikge1xuICAgICAgaGlzdG9yeS5zZXR1cExpc3RlbmVycygpO1xuICAgICAgaGFuZGxlSW5pdGlhbFNjcm9sbChyb3V0ZU9yRXJyb3IpO1xuICAgIH07XG4gICAgaGlzdG9yeS50cmFuc2l0aW9uVG8oXG4gICAgICBoaXN0b3J5LmdldEN1cnJlbnRMb2NhdGlvbigpLFxuICAgICAgc2V0dXBMaXN0ZW5lcnMsXG4gICAgICBzZXR1cExpc3RlbmVyc1xuICAgICk7XG4gIH1cblxuICBoaXN0b3J5Lmxpc3RlbihmdW5jdGlvbiAocm91dGUpIHtcbiAgICB0aGlzJDEuYXBwcy5mb3JFYWNoKGZ1bmN0aW9uIChhcHApIHtcbiAgICAgIGFwcC5fcm91dGUgPSByb3V0ZTtcbiAgICB9KTtcbiAgfSk7XG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLmJlZm9yZUVhY2ggPSBmdW5jdGlvbiBiZWZvcmVFYWNoIChmbikge1xuICByZXR1cm4gcmVnaXN0ZXJIb29rKHRoaXMuYmVmb3JlSG9va3MsIGZuKVxufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5iZWZvcmVSZXNvbHZlID0gZnVuY3Rpb24gYmVmb3JlUmVzb2x2ZSAoZm4pIHtcbiAgcmV0dXJuIHJlZ2lzdGVySG9vayh0aGlzLnJlc29sdmVIb29rcywgZm4pXG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLmFmdGVyRWFjaCA9IGZ1bmN0aW9uIGFmdGVyRWFjaCAoZm4pIHtcbiAgcmV0dXJuIHJlZ2lzdGVySG9vayh0aGlzLmFmdGVySG9va3MsIGZuKVxufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5vblJlYWR5ID0gZnVuY3Rpb24gb25SZWFkeSAoY2IsIGVycm9yQ2IpIHtcbiAgdGhpcy5oaXN0b3J5Lm9uUmVhZHkoY2IsIGVycm9yQ2IpO1xufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5vbkVycm9yID0gZnVuY3Rpb24gb25FcnJvciAoZXJyb3JDYikge1xuICB0aGlzLmhpc3Rvcnkub25FcnJvcihlcnJvckNiKTtcbn07XG5cblZ1ZVJvdXRlci5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIHB1c2ggKGxvY2F0aW9uLCBvbkNvbXBsZXRlLCBvbkFib3J0KSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gIGlmICghb25Db21wbGV0ZSAmJiAhb25BYm9ydCAmJiB0eXBlb2YgUHJvbWlzZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdGhpcyQxLmhpc3RvcnkucHVzaChsb2NhdGlvbiwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIHRoaXMuaGlzdG9yeS5wdXNoKGxvY2F0aW9uLCBvbkNvbXBsZXRlLCBvbkFib3J0KTtcbiAgfVxufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5yZXBsYWNlID0gZnVuY3Rpb24gcmVwbGFjZSAobG9jYXRpb24sIG9uQ29tcGxldGUsIG9uQWJvcnQpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgaWYgKCFvbkNvbXBsZXRlICYmICFvbkFib3J0ICYmIHR5cGVvZiBQcm9taXNlICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZS
118hmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB0aGlzJDEuaGlzdG9yeS5yZXBsYWNlKGxvY2F0aW9uLCByZXNvbHZlLCByZWplY3QpO1xuICAgIH0pXG4gIH0gZWxzZSB7XG4gICAgdGhpcy5oaXN0b3J5LnJlcGxhY2UobG9jYXRpb24sIG9uQ29tcGxldGUsIG9uQWJvcnQpO1xuICB9XG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLmdvID0gZnVuY3Rpb24gZ28gKG4pIHtcbiAgdGhpcy5oaXN0b3J5LmdvKG4pO1xufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5iYWNrID0gZnVuY3Rpb24gYmFjayAoKSB7XG4gIHRoaXMuZ28oLTEpO1xufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5mb3J3YXJkID0gZnVuY3Rpb24gZm9yd2FyZCAoKSB7XG4gIHRoaXMuZ28oMSk7XG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLmdldE1hdGNoZWRDb21wb25lbnRzID0gZnVuY3Rpb24gZ2V0TWF0Y2hlZENvbXBvbmVudHMgKHRvKSB7XG4gIHZhciByb3V0ZSA9IHRvXG4gICAgPyB0by5tYXRjaGVkXG4gICAgICA/IHRvXG4gICAgICA6IHRoaXMucmVzb2x2ZSh0bykucm91dGVcbiAgICA6IHRoaXMuY3VycmVudFJvdXRlO1xuICBpZiAoIXJvdXRlKSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cbiAgcmV0dXJuIFtdLmNvbmNhdC5hcHBseShcbiAgICBbXSxcbiAgICByb3V0ZS5tYXRjaGVkLm1hcChmdW5jdGlvbiAobSkge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG0uY29tcG9uZW50cykubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgcmV0dXJuIG0uY29tcG9uZW50c1trZXldXG4gICAgICB9KVxuICAgIH0pXG4gIClcbn07XG5cblZ1ZVJvdXRlci5wcm90b3R5cGUucmVzb2x2ZSA9IGZ1bmN0aW9uIHJlc29sdmUgKFxuICB0byxcbiAgY3VycmVudCxcbiAgYXBwZW5kXG4pIHtcbiAgY3VycmVudCA9IGN1cnJlbnQgfHwgdGhpcy5oaXN0b3J5LmN1cnJlbnQ7XG4gIHZhciBsb2NhdGlvbiA9IG5vcm1hbGl6ZUxvY2F0aW9uKHRvLCBjdXJyZW50LCBhcHBlbmQsIHRoaXMpO1xuICB2YXIgcm91dGUgPSB0aGlzLm1hdGNoKGxvY2F0aW9uLCBjdXJyZW50KTtcbiAgdmFyIGZ1bGxQYXRoID0gcm91dGUucmVkaXJlY3RlZEZyb20gfHwgcm91dGUuZnVsbFBhdGg7XG4gIHZhciBiYXNlID0gdGhpcy5oaXN0b3J5LmJhc2U7XG4gIHZhciBocmVmID0gY3JlYXRlSHJlZihiYXNlLCBmdWxsUGF0aCwgdGhpcy5tb2RlKTtcbiAgcmV0dXJuIHtcbiAgICBsb2NhdGlvbjogbG9jYXRpb24sXG4gICAgcm91dGU6IHJvdXRlLFxuICAgIGhyZWY6IGhyZWYsXG4gICAgLy8gZm9yIGJhY2t3YXJkcyBjb21wYXRcbiAgICBub3JtYWxpemVkVG86IGxvY2F0aW9uLFxuICAgIHJlc29sdmVkOiByb3V0ZVxuICB9XG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLmdldFJvdXRlcyA9IGZ1bmN0aW9uIGdldFJvdXRlcyAoKSB7XG4gIHJldHVybiB0aGlzLm1hdGNoZXIuZ2V0Um91dGVzKClcbn07XG5cblZ1ZVJvdXRlci5wcm90b3R5cGUuYWRkUm91dGUgPSBmdW5jdGlvbiBhZGRSb3V0ZSAocGFyZW50T3JSb3V0ZSwgcm91dGUpIHtcbiAgdGhpcy5tYXRjaGVyLmFkZFJvdXRlKHBhcmVudE9yUm91dGUsIHJvdXRlKTtcbiAgaWYgKHRoaXMuaGlzdG9yeS5jdXJyZW50ICE9PSBTVEFSVCkge1xuICAgIHRoaXMuaGlzdG9yeS50cmFuc2l0aW9uVG8odGhpcy5oaXN0b3J5LmdldEN1cnJlbnRMb2NhdGlvbigpKTtcbiAgfVxufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5hZGRSb3V0ZXMgPSBmdW5jdGlvbiBhZGRSb3V0ZXMgKHJvdXRlcykge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHdhcm4oZmFsc2UsICdyb3V0ZXIuYWRkUm91dGVzKCkgaXMgZGVwcmVjYXRlZCBhbmQgaGFzIGJlZW4gcmVtb3ZlZCBpbiBWdWUgUm91dGVyIDQuIFVzZSByb3V0ZXIuYWRkUm91dGUoKSBpbnN0ZWFkLicpO1xuICB9XG4gIHRoaXMubWF0Y2hlci5hZGRSb3V0ZXMocm91dGVzKTtcbiAgaWYgKHRoaXMuaGlzdG9yeS5jdXJyZW50ICE9PSBTVEFSVCkge1xuICAgIHRoaXMuaGlzdG9yeS50cmFuc2l0aW9uVG8odGhpcy5oaXN0b3J5LmdldEN1cnJlbnRMb2NhdGlvbigpKTtcbiAgfVxufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoIFZ1ZVJvdXRlci5wcm90b3R5cGUsIHByb3RvdHlwZUFjY2Vzc29ycyApO1xuXG5mdW5jdGlvbiByZWdpc3Rlckhvb2sgKGxpc3QsIGZuKSB7XG4gIGxpc3QucHVzaChmbik7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGkgPSBsaXN0LmluZGV4T2YoZm4pO1xuICAgIGlmIChpID4gLTEpIHsgbGlzdC5zcGxpY2UoaSwgMSk7IH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVIcmVmIChiYXNlLCBmdWxsUGF0aCwgbW9kZSkge1xuICB2YXIgcGF0aCA9IG1vZGUgPT09ICdoYXNoJyA/ICcjJyArIGZ1bGxQYXRoIDogZnVsbFBhdGg7XG4gIHJldHVybiBiYXNlID8gY2xlYW5QYXRoKGJhc2UgKyAnLycgKyBwYXRoKSA6IHBhdGhcbn1cblxuVnVlUm91dGVyLmluc3RhbGwgPSBpbnN0YWxsO1xuVnVlUm91dGVyLnZlcnNpb24gPSAnMy41LjMnO1xuVnVlUm91dGVyLmlzTmF2aWdhdGlvbkZhaWx1cmUgPSBpc05hdmlnYXRpb25GYWlsdXJlO1xuVnVlUm91dGVyLk5hdmlnYXRpb25GYWlsdXJlVHlwZSA9IE5hdmlnYXRpb25GYWlsdXJlVHlwZTtcblZ1ZVJvdXRlci5TVEFSVF9MT0NBVElPTiA9IFNUQVJUO1xuXG5pZiAoaW5Ccm93c2VyICYmIHdpbmRvdy5WdWUpIHtcbiAgd2luZG93LlZ1ZS51c2UoVnVlUm91dGVyKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVnVlUm91dGVyO1xuIiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXG5pbXBvcnQgVnVlUm91dGVyIGZyb20gJ3Z1ZS1yb3V0ZXInXG5cblZ1ZS51c2UoVnVlUm91dGVyKVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgVnVlUm91dGVyKHtcbiAgICBtb2RlOiBcImhpc3RvcnlcIlxufSlcbiIsImltcG9ydCBvYmplY3RGaXRJbWFnZXMgZnJvbSAnb2JqZWN0LWZpdC1pbWFnZXMnXG5cbm9iamVjdEZpdEltYWdlcygpXG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBzb3J0LWtleXMgKi9cbmV4cG9ydCBjb25zdCBjb21tb25DID0ge1xuICAvLyBWaXNpYmlsaXR5XG4gIEFDVElWRTogJ2FjdGl2ZScsXG4gIEhJRERFTjogJ3QtdmlzaWJpbGl0eS0taGlkZGVuJyxcblxuICAvLyBWYWx1ZXNcbiAgVFJVRTogJ3RydWUnLFxuICBGQUxTRTogJ2ZhbHNlJy
118xcblxuICAvLyBBdHJpYnV0ZXNcbiAgQVJJQV9ISURERU46ICdhcmlhLWhpZGRlbicsXG4gIERBVEFfVEFSR0VUOiAnZGF0YS10YXJnZXQnXG59XG4iLCJpbXBvcnQgJ3Ntb290aHNjcm9sbC1hbmNob3ItcG9seWZpbGwvZGlzdC9pbmRleC5taW4uanMnXG5pbXBvcnQge2NvbW1vbkN9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgc21vb3Roc2Nyb2xsUG9seWZpbGwgZnJvbSAnc21vb3Roc2Nyb2xsLXBvbHlmaWxsJ1xuXG5zbW9vdGhzY3JvbGxQb2x5ZmlsbC5wb2x5ZmlsbCgpXG5cbi8vIEFuaW1hdGlvbnNcbmNvbnN0IEFuaW1hdGlvbnMgPSAoe1xuICBzZWxlY3RvcnMgPSB7XG4gICAgSEVBREVSOiAnLmhlYWRlcicsXG4gICAgSEVBREVSX1NDUk9MTDogJ2hlYWRlci0tc2Nyb2xsZWQnLFxuICAgIEhFUk86ICcuaGVybydcbiAgfVxufSA9IHt9KSA9PiB7XG4gIGNvbnN0IGhlYWRlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3JzLkhFQURFUilcbiAgY29uc3QgaGVybyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3JzLkhFUk8pXG4gIGNvbnN0IHdpbmRvd0hlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcbiAgbGV0IHRpbWVvdXQgPSBudWxsXG5cbiAgLyoqXG4gICogSXQgY2hlY2tlcyBpZiB0aGUgY3VycmVudCBwb3NpdGlvbiBvbiB0aGUgcGFnZSBpcyB0aGUgc2FtZSBhcyB0aGUgaW50ZXJlc3RlZCBlbGVtZW50XG4gICogQHBhcmFtIHtlbGVtZW50fSBpdGVtIGNsb3NlIG1vZGFsIGJ1dHRvblxuICAqIEBwYXJhbSB7bnVtYmVyfSBleHRyYVBvcyBleHRyYSBwb3NpdGlvbiB0byBiZSBjYWxjdWxhdGVkXG4gICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiB0aGUgcGFnZVxuICAqL1xuICBjb25zdCBpc1NlY3Rpb25WaXNpYmxlID0gKGl0ZW0sIGV4dHJhUG9zKSA9PiB7XG4gICAgbGV0IHBvc2l0aW9uRnJvbVRvcCA9IGl0ZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIC0gZXh0cmFQb3M7XG4gICAgaWYgKHBvc2l0aW9uRnJvbVRvcCAtIHdpbmRvd0hlaWdodCA8PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAqIEl0IGNoZWNrZXMgdGhlIGVsZW1lbnQgaGFzIGFscmVhZHkgdGhlIGFjdGl2ZSBjbGFzcyAoSXRzIGFuaW1hdGlvbiB3YXMgcHJldmlvdXNseSB2aXNpYmxlKVxuICAqIEBwYXJhbSB7ZWxlbWVudH0gaXRlbSBpbnRlcmVzdGVkIGVsZW1lbnQgdG8gYmUgYWN0aXZlXG4gICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIGVsZW1lbnQgaGFzIHRoZSBhY3RpdmUgY2xhc3NcbiAgKi9cbiAgY29uc3QgaXNBbmltYXRpb25BY3RpdmUgPSBpdGVtID0+XG4gICAgaXRlbS5jbGFzc05hbWUuaW5jbHVkZXMoY29tbW9uQy5BQ1RJVkUpXG5cbiAgLyoqXG4gICogV2hlbiB0aGUgcGFnZSBpcyBzY3JvbGwsIGl0IGFkZHMgdGhlIHN0aWNreSBjbGFzcyB0byB0aGUgaGVhZGVyIGVsZW1lbnRcbiAgKiBAcmV0dXJucyB7dm9pZH1cbiAgKi9cbiAgY29uc3Qgc3RhcnRIZWFkZXJPblNjcm9sbEFuaW1hdGlvbiA9ICgpID0+IHtcbiAgICBpZiAoaGVhZGVyICE9PSBudWxsICYmIGhlcm8gIT09IG51bGwpIHtcbiAgICAgIGxldCBwb3NpdGlvbkZyb21Ub3AgPSBoZXJvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcbiAgICAgIGlmIChwb3NpdGlvbkZyb21Ub3AgPCAwKSB7XG4gICAgICAgIGhlYWRlci5jbGFzc0xpc3QuYWRkKHNlbGVjdG9ycy5IRUFERVJfU0NST0xMKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGVhZGVyLmNsYXNzTGlzdC5yZW1vdmUoc2VsZWN0b3JzLkhFQURFUl9TQ1JPTEwpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICogSXQgY2hlY2tlcyBpZiB0aGUgY3VycmVudCBwb3NpdGlvbiBvbiB0aGUgcGFnZSBpcyB0aGUgc2FtZSBhcyB0aGUgaW50ZXJlc3RlZCBlbGVtZW50XG4gICogQHBhcmFtIHtlbGVtZW50fSBsaXN0IGNsb3NlIG1vZGFsIGJ1dHRvblxuICAqIEByZXR1cm5zIHt2b2lkfVxuICAqL1xuICBjb25zdCBzdGFydEJsb2NrQW5pbWF0aW9uID0gbGlzdCA9PiB7XG4gICAgbGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgaWYgKGlzU2VjdGlvblZpc2libGUoaXRlbSwgaXRlbS5vZmZzZXRIZWlnaHQpICYmICFpc0FuaW1hdGlvbkFjdGl2ZShpdGVtKSkge1xuICAgICAgICBpdGVtLmNsYXNzTGlzdC5hZGQoY29tbW9uQy5BQ1RJVkUpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAqIEluaXQgYW5pbWF0aW9uIGJsb2NrcyBpbiB0aGUgcGFnZSB3aGVuIGl0IHNjcm9sbHNcbiAgKiBAcmV0dXJucyB7dm9pZH1cbiAgKi9cbiAgY29uc3QgaW5pdEFuaW1hdGlvbnMgPSAoKSA9PiB7XG4gICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aW1lb3V0KTtcbiAgICB9XG4gICAgdGltZW91dCA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgc3RhcnRIZWFkZXJPblNjcm9sbEFuaW1hdGlvbigpXG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBpbml0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuaW5pdEFuaW1hdGlvbnMoKVxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5pbml0QW5pbWF0aW9ucylcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaW5pdCxcbiAgICBpbml0QW5pbWF0aW9ucyxcbiAgICBpc0FuaW1hdGlvbkFjdGl2ZSxcbiAgICBpc1NlY3Rpb25WaXNpYmxlLFxuICAgIHN0YXJ0QmxvY2tBbmltYXRpb24sXG4gICAgc3RhcnRIZWFkZXJPblNjcm9sbEFuaW1hdGlvblxuICB9XG59XG5cbmV4cG9ydCB7QW5pbWF0aW9uc31cbiIsImltcG9ydCBDaG9pY2VzIGZyb20gXCJjaG9pY2VzLmpzXCI7XG5cbmNvbnN0IEhjcExvY2F0b3IgPSBmdW5jdGlvbiAoaGNwU2VsZWN0b3JDbXApIHtcbiAgICBjb25zdCBzZWxlY3RFbGVtZW50ID0gaGNwU2VsZWN0b3JDbXAucXVlcnlTZWxlY3Rvcignc2VsZWN0LmNtcC1oY3AtbG9jYXRvcl9faW5mby1maW5kLWNvdW50cnktc2VsZWN0Jyk7XG4gICAgY29uc3QgZmluZFByb3ZpZGVyTGluayA9IGhjcFNlbGVjdG9yQ21wLnF1ZXJ5U2VsZWN0b3IoJ2EuY21wLWhjcC1sb2NhdG9yX19pbmZvLWZpbmQtY291bnRyeS1jdGEnKTtcblxuICAgIGNvbnN0IGluaXQgPSAoKSA9PiB7XG4gICAgICAgIGlmICghc2VsZWN0RWxlbWVudCkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkNhbm5vdCBxdWVyeSB0aGUgc2VsZWN0IG9mIHRoZSBoY3AtbG9jYXRvclwiKTtcbiAgICAgICAgICAgI
118HJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNob2ljZXMgPSBuZXcgQ2hvaWNlcyhzZWxlY3RFbGVtZW50LCB7XG4gICAgICAgICAgICBzaG91bGRTb3J0OiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFjaG9pY2VzKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiR2V0dGluZyBlcnJvciB3aGlsZSBpbml0aWF0aW5nIENob2ljZSBvYmplY3RcIik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzZWxlY3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2Nob2ljZScsIGV2dCA9PiB7XG4gICAgICAgICAgICBpZiAoIWV2dC5kZXRhaWwgJiYgIWV2dC5kZXRhaWwuY2hvaWNlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIlRoZXJlIGlzIG5vIHNlbGVjdGVkIGNob2ljZSB0byBjaGFuZ2UgbGluayBocmVmXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZmluZFByb3ZpZGVyTGluay5ocmVmID0gZXZ0LmRldGFpbC5jaG9pY2UudmFsdWU7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBpbml0XG4gICAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgSGNwTG9jYXRvcjsiLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuY29uc3QgSGVhZGVyID0gKHtcbiAgc2VsZWN0b3IgPSB7XG4gICAgQlVSR0VSOiAnLm1vYmlsZS1uYXYtdG9nZ2xlJyxcbiAgICBDTE9TRV9CVVJHRVI6ICcubmF2LW1haW4tY2xvc2UtcGhvbmUnLFxuICAgIE5BVklHQVRJT046ICcubmF2aWdhdGlvbicsXG4gICAgTUVHQU1FTlU6ICcubWVnYW1lbnUnLFxuICAgIFRPR0dMRV9NRU5VOiAnYnV0dG9uW2RhdGEtY29tcG9uZW50PVwiZHJvcGRvd25cIl0nLFxuICAgIEhPUklaT05UQUxfTkFWOiAnLmhlYWRlci1jbXAtLWhvcml6b250YWwtbmF2aWdhdGlvbicsXG4gICAgTUVOVUlURU1TOiAnLm5hdmlnYXRpb24taXRlbXMnLFxuICAgIEhPU1BJVEFMSVRZQ1RBOiAnLmN0YWJ1dHRvbi0tdGF3LW9wdCcsXG4gICAgTEFOR1VBR0VfRFJPUERPV046ICcjY291bnRyeS1kcm9wZG93bicsXG4gICAgU0VBUkNIX0RST1BET1dOOiAnI3NlYXJjaC1kcm9wZG93bidcbiAgfVxufSA9IHt9KSA9PiB7XG4gIGNvbnN0IHRvZ2dsZU1lbnVFbExpc3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAke3NlbGVjdG9yLlRPR0dMRV9NRU5VfWApXG4gIGNvbnN0IGJ1cmdlckVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgJHtzZWxlY3Rvci5CVVJHRVJ9YClcbiAgY29uc3QgY2xvc2VCdXJnZXJFbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCR7c2VsZWN0b3IuQ0xPU0VfQlVSR0VSfWApXG4gIGNvbnN0IG5hdmlnYXRpb25FbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCR7c2VsZWN0b3IuTkFWSUdBVElPTn1gKVxuICBjb25zdCBtZWdhbWVudUVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgJHtzZWxlY3Rvci5NRUdBTUVOVX1gKVxuICBjb25zdCBhY3RpdmVOYXZFbCA9IG5hdmlnYXRpb25FbCB8fCBtZWdhbWVudUVsO1xuICBjb25zdCBtZW51SXRlbXNFbCA9IG5hdmlnYXRpb25FbD8ucXVlcnlTZWxlY3RvcihgJHtzZWxlY3Rvci5NRU5VSVRFTVN9YClcbiAgY29uc3QgaG9zcGl0YWxpdHlDdGFFbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCR7c2VsZWN0b3IuSE9TUElUQUxJVFlDVEF9YClcbiAgY29uc3QgaG9yaXpvbnRhbE5hdkhlYWRlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCR7c2VsZWN0b3IuSE9SSVpPTlRBTF9OQVZ9YClcbiAgY29uc3QgbGFuZ3VhZ2VEcm9wZG93bkVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvci5MQU5HVUFHRV9EUk9QRE9XTilcbiAgY29uc3Qgc2VhcmNoRHJvcGRvd25FbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IuU0VBUkNIX0RST1BET1dOKVxuXG4gIGlmIChob3Jpem9udGFsTmF2SGVhZGVyKSB7XG4gICAgY29uc3Qgb3B0SGVhZGVyID0gaG9yaXpvbnRhbE5hdkhlYWRlci5jbG9zZXN0KCcuaGVhZGVyJyk7XG4gICAgb3B0SGVhZGVyLmNsYXNzTGlzdC5hZGQoJ2hlYWRlci0taG9yaXpvbnRhbC1uYXZpZ2F0aW9uJyk7XG4gIH1cblxuICBjb25zdCBoaWRlT3Blbkl0ZW1zID0gaXRlbUlkID0+IHtcbiAgICBjb25zdCBhcmlhT3Blbkxpc3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBkaXZbYXJpYS1oaWRkZW49J2ZhbHNlJ106bm90KCR7aXRlbUlkfSlgKVxuICAgIGFyaWFPcGVuTGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgaXRlbS5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgdHJ1ZSlcbiAgICB9KVxuICB9XG5cbiAgY29uc3QgY2xvc2VMYW5ndWFnZURyb3Bkb3duID0gKCkgPT4ge1xuICAgIGxhbmd1YWdlRHJvcGRvd25FbD8uc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsIHRydWUpXG4gIH1cblxuICBjb25zdCBjbG9zZVNlYXJjaERyb3Bkb3duID0gKCkgPT4ge1xuICAgIHNlYXJjaERyb3Bkb3duRWw/LnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCB0cnVlKVxuICB9XG5cbiAgY29uc3QgY2xvc2VIZWFkZXJEcm9wZG93bnMgPSAoKSA9PiB7XG4gICAgY2xvc2VMYW5ndWFnZURyb3Bkb3duKClcbiAgICBjbG9zZVNlYXJjaERyb3Bkb3duKClcbiAgfVxuXG4gIGNvbnN0IGNsb3NlSGVhZGVyRHJvcGRvd25zT25NZWdhbWVudU9wZW4gPSAoKSA9PiB7XG4gICAgaWYgKGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCdtZWdhbWVudS1vcGVuJykpIHtcbiAgICAgIGNsb3NlSGVhZGVyRHJvcGRvd25zKClcbiAgICB9XG4gIH1cblxuICBjb25zdCB3YXRjaE1lZ2FtZW51T3BlbkNsYXNzID0gKCkgPT4ge1xuICAgIGlmICghZG9jdW1lbnQuYm9keSB8fCB0eXBlb2YgTXV0YXRpb25PYnNlcnZlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVyblxuICAgI
118H1cblxuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgY2xvc2VIZWFkZXJEcm9wZG93bnNPbk1lZ2FtZW51T3BlbigpXG4gICAgfSlcblxuICAgIG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSwge1xuICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgIGF0dHJpYnV0ZUZpbHRlcjogWydjbGFzcyddXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZSBidXJnZXIgbmF2aWdhdGlvbiBtZW51XG4gICAqIEBwYXJhbSB7dGFyZ2V0fSBpdGVtIGZvciB0b2dnbGluZyBuYXZpZ2F0aW9uIG9uIGJ1cmdlciBpdGVtc1xuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGNvbnN0IGNsb3NlTmF2ID0gKCkgPT4ge1xuICAgIG5hdmlnYXRpb25FbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgdHJ1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGUgYnVyZ2VyIG5hdmlnYXRpb24gd2hlbiBjbGljayBvbiB0b2dnbGUgZWxlbWVudFxuICAgKiBAcGFyYW0ge3RhcmdldH0gaXRlbSBmb3IgdG9nZ2xpbmcgbmF2aWdhdGlvbiBvbiBidXJnZXIgaXRlbXNcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBjb25zdCB0b2dnbGVOYXYgPSAoKSA9PiB7XG4gICAgaGlkZU9wZW5JdGVtcyhgLiR7YWN0aXZlTmF2RWwuZ2V0QXR0cmlidXRlKCdjbGFzcycpfWApXG4gICAgY29uc3QgYXJpYUhpZGRlblZhbHVlID0gYWN0aXZlTmF2RWwuZ2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicpID8gYWN0aXZlTmF2RWwuZ2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicpIDogJ3RydWUnXG4gICAgY29uc3QgbmV4dEFyZWFIaWRkZW5WYWx1ZSA9ICEgKGFyaWFIaWRkZW5WYWx1ZSA9PT0gJ3RydWUnKVxuICAgIGFjdGl2ZU5hdkVsLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCBuZXh0QXJlYUhpZGRlblZhbHVlKVxuICAgIGlmIChtZWdhbWVudUVsKSB7XG4gICAgICBkb2
118N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoJ21lZ2FtZW51LW9wZW4nLCAhbmV4dEFyZWFIaWRkZW5WYWx1ZSk7XG4gICAgICBjbG9zZUhlYWRlckRyb3Bkb3duc09uTWVnYW1lbnVPcGVuKClcbiAgICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdtZWdhbWVudScsIHtcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgaXNDbG9zZTogbmV4dEFyZWFIaWRkZW5WYWx1ZSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSBtZW51IHdoZW4gY2xpY2sgb24gdG9nZ2xlIGVsZW1lbnRzXG4gICAqIEBwYXJhbSB7dGFyZ2V0fSBpdGVtIGZvciB0b2dnbGluZyBtZW51IGl0ZW1zXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgY29uc3QgdG9nZ2xlTWVudSA9IGl0ZW0gPT4ge1xuICAgIGxldCBkYXRhQ29tcG9uZW50ID0gaXRlbS5kYXRhc2V0LnRhcmdldFxuICAgIGlmICghZGF0YUNvbXBvbmVudCkge1xuICAgICAgZGF0YUNvbXBvbmVudCA9IGl0ZW0uY2xvc2VzdChzZWxlY3Rvci5UT0dHTEVfTUVOVSk/LmRhdGFzZXQudGFyZ2V0XG4gICAgfTtcbiAgICBjb25zdCB0b2dnbGVFbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke2RhdGFDb21wb25lbnR9YClcblxuICAgIGhpZGVPcGVuSXRlbXMoYCMke2RhdGFDb21wb25lbnR9YClcbiAgICBjb25zdCBuZXh0QXJpYUhpZGRlblZhbHVlID0gISh0b2dnbGVFbC5nZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJykgPT09ICd0cnVlJylcbiAgICB0b2dnbGVFbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgbmV4dEFyaWFIaWRkZW5WYWx1ZSlcbiAgfVxuXG4gIGNvbnN0IG1vdmVFbGVtZW50ID0gKCkgPT4ge1xuICAgIGxldCBob3NwaXRhbGl0eUN0YU1vYmlsZUVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmN0YWJ1dHRvbi0tb3B0LWJvdHRvbScpO1xuXG4gICAgaWYgKHdpbmRvdy5tYXRjaE1lZGlhKCcobWF4LXdpZHRoOiA5OTFweCknKS5tYXRjaGVzKSB7XG4gICAgICBpZiAoIWhvc3BpdGFsaXR5Q3RhTW9iaWxlRWwpIHtcbiAgICAgICAgaG9zcGl0YWxpdHlDdGFNb2JpbGVFbCA9IGhvc3BpdGFsaXR5Q3RhRWwuY2xvbmVOb2RlKHRydWUpO1xuICAgICAgICBob3NwaXRhbGl0eUN0YU1vYmlsZUVsLmNsYXNzTGlzdC5hZGQoJ2N0YWJ1dHRvbi0tb3B0LWJvdHRvbScpO1xuICAgICAgICBkb2
118N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGhvc3BpdGFsaXR5Q3RhTW9iaWxlRWwpO1xuICAgICAgfVxuICAgICAgaG9zcGl0YWxpdHlDdGFFbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaG9zcGl0YWxpdHlDdGFNb2JpbGVFbCkge1xuICAgICAgICBob3NwaXRhbGl0eUN0YU1vYmlsZUVsLnJlbW92ZSgpO1xuICAgICAgfVxuICAgICAgaG9zcGl0YWxpdHlDdGFFbC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlSG9yaXpvbnRhbE5hdiA9ICgpID0+IHtcbiAgICBsZXQgYmFubmVyTmF2ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm5hdmlnYXRpb24tLWhvcml6b250YWwtYmFubmVyJyk7XG4gICAgY29uc3QgaGVyb0Jhbm5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5oZXJvJyk7XG4gICAgY29uc3QgaXNIb21lUGFnZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5ob21lcGFnZScpO1xuXG4gICAgaWYgKGlzSG9tZVBhZ2UgJiYgd2luZG93Lm1hdGNoTWVkaWEoJyhtaW4td2lkdGg6IDk5MnB4KScpLm1hdGNoZXMpIHtcbiAgICAgIG5hdmlnYXRpb25FbC5jbGFzc0xpc3QuYWRkKCduYXZpZ2F0aW9uLS1ob3Jpem9udGFsLWhvbWUnKTtcbiAgICAgIGNvbnN0IGhlcm9CYW5uZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuaGVybycpO1xuICAgICAgaGVyb0Jhbm5lci5wYXJlbnROb2RlLmluc2VydEJlZm9yZShuYXZpZ2F0aW9uRWwsIGhlcm9CYW5uZXIubmV4dFNpYmxpbmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuYXZpZ2F0aW9uRWwuY2xhc3NMaXN0LnJlbW92ZSgnbmF2aWdhdGlvbi0taG9yaXpvbnRhbC1ob21lJyk7XG4gICAgfVxuXG4gICAgaWYgKHdpbmRvdy5tYXRjaE1lZGlhKCcobWF4LXdpZHRoOiA5OTFweCknKS5tYXRjaGVzKSB7XG4gICAgICBuYXZpZ2F0aW9uRWwuY2xhc3NMaXN0LnJlbW92ZSgnbmF2aWdhdGlvbi0taG9yaXpvbnRhbCcpO1xuXG4gICAgICBpZiAoIWJhbm5lck5hdiAmJiBpc0hvbWVQYWdlKSB7XG4gICAgICAgIGJhbm5lck5hdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBiYW5uZXJOYXYuY2xhc3NMaXN0LmFkZCgnbmF2aWdhdGlvbi0taG9yaXpvbnRhbC1iYW5uZXInKTtcbiAgICAgICAgY29uc3QgbWVudUhvcml6b250YWwgPSBtZW51SXRlbXNFbC5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICAgIGJhbm5lck5hdi5hcHBlbmRDaGlsZChtZW51SG9yaXpvbnRhbCk7XG5cbiAgICAgICAgaGVyb0Jhbm5lci5wYXJlbnROb2RlLmluc2VydEJlZm9yZShiYW5uZXJOYXYsIGhlcm9CYW5uZXIubmV4dFNpYmxpbmcpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBuYXZpZ2F0aW9uRWwuY2xhc3NMaXN0LmFkZCgnbmF2aWdhdGlvbi0taG9yaXpvbnRhbCcpO1xuXG4gICAgICBpZiAoYmFubmVyTmF2KSB7XG4gICAgICAgIGJhbm5lck5hdi5yZW1vdmUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaGVyb0Jhbm5lcikge1xuICAgICAgaWYgKCFob3Jpem9udGFsTmF2SGVhZGVyKSByZXR1cm47XG4gICAgICBjb25zdCBoZWFkZXJIZWlnaHQgPSBob3Jpem9udGFsTmF2SGVhZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcblxuICAgICAgaWYgKGlzSG9tZVBhZ2UpIHtcbiAgICAgICAgaGVyb0Jhbm5lci5zdHlsZS5tYXJnaW5Ub3AgPSBgJHtoZWFkZXJIZWlnaHR9cHhgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgaG9yaXpvbnRhbE5hdiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5uYXZpZ2F0aW9uLS1ob3Jpem9udGFsJyk7XG4gICAgICAgIGlmICghaG9yaXpvbnRhbE5hdikgcmV0dXJuO1xuICAgICAgICBjb25zdCBob3Jpem9udGFsTmF2SGVpZ2h0ID0gaG9yaXpvbnRhbE5hdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG4gICAgICAgIGhlcm9CYW5uZXIuc3R5bGUubWFyZ2luVG9wID0gYCR7aG9yaXpvbnRhbE5hdkhlaWdodCArIGhlYWRlckhlaWdodH1weGA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gSW5pdFxuICBjb25zdCBpbml0ID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChsYW5ndWFnZURyb3Bkb3duRWwpIHtcbiAgICAgIGxhbmd1YWdlRHJvcGRvd25FbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgKCkgPT4ge1xuICAgICAgICBjbG9zZUxhbmd1YWdlRHJvcGRvd24oKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAoc2VhcmNoRHJvcGRvd25FbCkge1xuICAgICAgc2VhcmNoRHJvcGRvd25FbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgKCkgPT4ge1xuICAgICAgICBjbG9zZVNlYXJjaERyb3Bkb3duKClcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdG9nZ2xlTWVudUVsTGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGV2dCA9PlxuICAgICAgICB0aGlzLnRvZ2dsZU1lbnUoZXZ0LnRhcmdldCkpXG4gICAgfSlcblxuICAgIGJ1cmdlckVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT5cbiAgICAgIHRoaXMudG9nZ2xlTmF2KCkpXG5cbiAgICBjbG9zZUJ1cmdlckVsPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+XG4gICAgICB0aGlzLmNsb3NlTmF2KCkpXG5cbiAgICB3YXRjaE1lZ2FtZW51T3BlbkNsYXNzKClcbiAgICBjbG9zZUhlYWRlckRyb3Bkb3duc09uTWVnYW1lbnVPcGVuKClcblxuICAgIGlmIChob3NwaXRhbGl0eUN0YUVsICYmIGhvcml6b250YWxOYXZIZWFkZXIpIHtcbiAgICAgIG1vdmVFbGVtZW50KCk7XG4gICAgICBoYW5kbGVIb3Jpem9udGFsTmF2KCk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgKCkgPT4ge1xuICAgICAgICBtb3ZlRWxlbWVudCgpO1xuICAgICAgICBoYW5kbGVIb3Jpem9udGFsTmF2KCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNsb3NlTmF2LFxuICAgIGluaXQsXG4gICAgdG9nZ2xlTWVudSxcbiAgICB0b2dnbGVOYXZcbiAgfVxufVxuZXhwb3J0IHtIZWFkZXJ9XG4iLCJleHBvcnQgY29uc3QgQ29uc3RhbnQgPSB7XG5cdE1PREFMX0NMT1NFX0JVVFRPTjogJ2NtcC1tb2RhbF9fY2xvc2UnLFxuXHRNT0RBTF9MSU5LOiAnY21wLW1vZGFsX19saW5rJyxcblx0TU9EQUxfT1BFTjogJ21vZGFsLW9wZW4nLFxuXHRNT0RBTF9XUkFQUEVSOiAnY21wLW1vZGFsX193cmFwcGVyJyxcblx0TU9EQUxfQ09OVEVOVF9ISURERU46ICdjbXAtbW9kYWxfX2NvbnRlbnQtLWhpZGRlbicsXG5cdE1PREFMX0JPWDogJ2NtcC1tb2RhbF9fYm94JyxcblxuXHQvLyBNT0RBTDogTEVBVklORyBTSVRFXG5cdFBBR0VfRVhURVJOQUxfTElOS1NfQ0FORElEQVRFUzogJ2E6bm90KC5jbXAtbW9kYWxfX2xpbmspOm5vdCguc2hhcmUtbGluayknLFxuXG5cdC8vIE1PREFMOiBGT1JNIFZBTElEQVRJT05cblx0RkVUQ0hfT1BUUzoge1xuICAgICAgICBjYWNoZTogJ25vLXN0b3JlJyxcbiAgICAgICAgbW9kZTogJ3NhbWUtb3Jp
118Z2luJyxcblx0XHRoZWFkZXJzOiB7XG5cdFx0XHQnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG5cdFx0fVxuICB9LFxuXHRNRVRIT0Q6ICdtZXRob2QnLFxuXHRCT0RZOiAnYm9keScsXG5cdEZPUk06ICdmb3JtJyxcblx0Rk9STV9TVUNDRVNTX1NFQ1RJT046ICdbZGF0YS1mb3JtLXN0YXR1cz1cInN1Y2Nlc3NcIl0nLFxuXHRGT1JNX0VSUk9SX1NFQ1RJT046ICdbZGF0YS1mb3JtLXN0YXR1cz1cImVycm9yXCJdJyxcblxuXHQvLyBNT0RBTDogQ09PS0lFIFBSRVNFTlRcblx0Q09PS0lFX0ZPUk06ICcjY29uZmlybWF0aW9uRm9ybScsXG5cblx0Ly8gTUVTU0FHRVNcblx0TVNHX1BPUFVQX05PVF9GT1VORDogJ05vIGZ1bmN0aW9uIGZvdW5kIG1hdGNoaW5nIHRyaWdnZXIgJXMnLFxuXHRTQ1NTX01TRzogJ1RvZG8gb2theScsXG5cblx0Ly8gTU9EQUw6IE5FV1NMRVRURVIgU0lHTiBVUFxuXHRTSUdOVVBfRk9STTogJy5jbXAtbW9kYWxfX2JveCAuY21wLW5ld3NsZXR0ZXIgZm9ybScsXG5cdENPT0tJRV9OQU1FOiAnZGF0YS1jb29raWUtbmFtZScsXG5cblx0Ly8gQ1RBIEJ1dHRvbnNcblx0Q1RBX0JUVE46ICcuY3RhYnV0dG9uIGEnXG59XG5cbi8qKlxuICogSXQgY2hlY2tlcyBpZiB0aGUgbGluayBnaXZlbiBhbiBhbmNob3IgaXMgZXh0ZXJuYWwgb3Igbm90XG4gKiBAcGFyYW0ge2VsZW1lbnR9IGl0ZW0gYW5jaG9yXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgaHJlZiBpcyBleHRlcm5hbCwgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBjb25zdCBpc0V4dGVybmFsTGluayA9IGl0ZW0gPT4ge1xuXHRpZiAoIWl0ZW0uaGFzQXR0cmlidXRlKCdocmVmJykpIHtcblx0XHRyZXR1cm4gZmFsc2Vcblx0fVxuXHQvLyBUYWtlIGFsbCBocmVmIHN0YXJ0aW5nIGZvciBodHRwIG9yIGh0dHBzIGFuZCByZWZlcmVuY2luZyBhbiBleHRlcm5hbCBob3N0IGRvbWFpblxuXHRyZXR1cm4gbmV3IFJlZ0V4cCgnXmh0dHBzPzpcXFxcL1xcXFwvKD8hJyArIGxvY2F0aW9uLmhvc3QgKyAnKS4qJCcsICdpZ3UnKS5cblx0XHRcdHRlc3QoaXRlbS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSlcbn1cblxuLyoqXG4gQ2hlY2tzIGlmIHRoZSBpdGVtJ3MgaHJlZiBzdGFydHMgd2l0aCBhbnkgb2YgdGhlIGdpdmVuIHByZWZpeGVzLlxuIEBwYXJhbSB7ZWxlbWVudH0gaXRlbSBhbmNob3JcbiBAcGFyYW0ge0FycmF5fSBwcmVmaXhlcyAtIEFuIGFycmF5IG9mIHN0cmluZ3MgcmVwcmVzZW50aW5nIHRoZSB3aGl0ZWxpc3RlZCBwcmVmaXhlcy5cbiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBSZXR1cm5zIHRydWUgaWYgdGhlIGl0ZW0ncyBocmVmIHN0YXJ0cyB3aXRoIGFueSBvZiB0aGUgZ2l2ZW4gcHJlZml4ZXMsIG90aGVyd2lzZSByZXR1cm5zIGZhbHNlLlxuICovXG5leHBvcnQgY29uc3QgdGhlTGlua0lzTm90V2hpdGVsaXN0ZWQgPSAoaXRlbSwgcHJlZml4ZXMpID0+IHtcblx0aWYgKCFpdGVtLmhhc0F0dHJpYnV0ZSgnaHJlZicpKSB7XG5cdFx0cmV0dXJuIGZhbHNlXG5cdH1cblxuXHRyZXR1cm4gIXByZWZpeGVzLnNvbWUocHJlZml4ID0+XG5cdFx0aXRlbS5ocmVmLnN0YXJ0c1dpdGgocHJlZml4KSk7XG59XG5cbi8qKlxuIENoZWNrcyBpZiB0aGUgaXRlbSBpcyBub3QgYSBDVEEgYnV0dG9uIHdpdGggbW9kYWxcbiBAcGFyYW0ge2VsZW1lbnR9IGl0ZW0gYW5jaG9yXG4gQHJldHVybnMge2Jvb2xlYW59IC0gUmV0dXJucyB0cnVlIGlmIHRoZSBpdGVtIGlzIG5vdCBhIENUQSBidXR0b24gd2l0aCBtb2RhbCwgb3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuXG4gKi9cbmV4cG9ydCBjb25zdCBpc05vdENUQVdpdGhNb2RhbCA9IGl0ZW0gPT5cblx0IWl0ZW0ucGFyZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2N0YS0taGFzLXBvcHVwJyk7XG5cbi8qKlxuIENoZWNrcyBpZiB0aGUgaXRlbSBpcyBub3QgYSBwYXJ0bmVyIGxpbmtcbiBAcGFyYW0ge2VsZW1lbnR9IGl0ZW0gYW5jaG9yXG4gQHJldHVybnMge2Jvb2xlYW59IC0gUmV0dXJucyB0cnVlIGlmIHRoZSBpdGVtIGlzIG5vdCBhIHBhcnRuZXIgbGluaywgb3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuXG4gKi9cbmV4cG9ydCBjb25zdCBpc05vdFBhcnRuZXJMaW5rID0gaXRlbSA9PlxuXHQhaXRlbS5jbG9zZXN0KCcuY3RhLS1oYXMtcG9wdXAtcGFydG5lcicpICYmICFpdGVtLmNsb3Nlc3QoJy5jbXAtbW9kYWxfX3BhcnRuZXInKTtcblxuXG5leHBvcnQgY29uc3QgaXNOb3RJbnNpZGVNb2RhbCA9IGl0ZW0gPT5cblx0IWl0ZW0uY2xvc2VzdChgLiR7Q29uc3RhbnQuTU9EQUxfV1JBUFBFUn1gKTtcblxuLyoqXG4gKiBJdCBvcGVucyBhIG1vZGFsXG4gKiBAcGFyYW0ge2VsZW1lbnR9IG1vZGFsIHBvcHVwXG4gKi9cbmV4cG9ydCBjb25zdCBvcGVuTW9kYWwgPSBtb2RhbCA9PiB7XG5cdGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChDb25zdGFudC5NT0RBTF9PUEVOKVxuXHRtb2RhbC5jbGFzc0xpc3QuYWRkKENvbnN0YW50Lk1PREFMX09QRU4pXG59XG5cbi8qKlxuICogSXQgY2xvc2VzIGEgbW9kYWxcbiAqIEBwYXJhbSB7ZWxlbWVudH0gbW9kYWwgcG9wdXBcbiAqL1xuZXhwb3J0IGNvbnN0IGNsb3NlTW9kYWwgPSBtb2RhbCA9PiB7XG5cdGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShDb25zdGFudC5NT0RBTF9PUEVOKVxuXHRtb2RhbC5jbGFzc0xpc3QucmVtb3ZlKENvbnN0YW50Lk1PREFMX09QRU4pXG59XG5cbi8qKlxuICogQ2hlY2sgaWYgY29va2llIGV4aXN0LFxuICogSWYgbm90LCBvcGVuIG1vZGFsXG4gKiBAcGFyYW0ge2VsZW1lbnR9IG1vZGFsIHBvcHVwXG4gKiBAcGFyYW0ge3N0cmluZ30gY29va2llTmFtZSBjb29raWUgbmFtZSByZXRyaWV2ZWQgZnJvbSBkYXRhLWF0dHJpYnV0ZVxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cblxuZXhwb3J0IGNvbnN0IGNoZWNrSWZDb29raWUgPSAobW9kYWwsIGNvb2tpZU5hbWUpID0+IHtcblx0aWYgKGRvY3VtZW50LmNvb2tpZS5pbmRleE9mKGNvb2tpZU5hbWUpID09PSAtMSkge1xuXHRcdG9wZW5Nb2RhbChtb2RhbClcblx0fVxufTtcblxuLyoqXG4gKiBJdCBzYXZlcyBhIGNvb2tpZVxuICogQHBhcmFtIHtzdHJpbmd9IGNvb2tpZU5hbWUgY29va2llIG5hbWUgcmV0cmlldmVkIGZyb20gZGF0YS1hdHRyaWJ1dGVcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgY29uc3Qgc2F2ZUNvb2tpZSA9IGNvb2tpZU5hbWUgPT4ge1xuXHRkb2N1bWVudC5jb29raWUgPSBjb29raWVOYW1lICsgXCI9XCIgKyBjb29raWVOYW1lO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0RGF0YUNvb2tpZSA9IG1vZGFsID0+IHtcblxuXHRjb25zdCBtb2RhbEJveCA9IG1vZGFsLnF1
118ZXJ5U2VsZWN0b3IoYC4ke0NvbnN0YW50Lk1PREFMX0JPWH1gKTtcblx0bGV0IGRhdGEgPSBcIlwiO1xuXHRpZiAobW9kYWxCb3guaGFzQXR0cmlidXRlKENvbnN0YW50LkNPT0tJRV9OQU1FKSkge1xuXHRcdGRhdGEgPSBtb2RhbEJveC5nZXRBdHRyaWJ1dGUoQ29uc3RhbnQuQ09PS0lFX05BTUUpO1xuXHR9XG5cblx0cmV0dXJuIGRhdGE7XG59XG4iLCJpbXBvcnQge0NvbnN0YW50IGFzIEMsIGNoZWNrSWZDb29raWUsIGNsb3NlTW9kYWwsIHNhdmVDb29raWV9IGZyb20gJy4uL2hlbHBlcnMnXG5cbmNvbnN0IE5ld3NsZXR0ZXJQb3B1cFRyaWdnZXJlZEJ5VGFyZ2V0ID0gKCkgPT4ge1xuXG5cdGNvbnN0IG5ld3NsZXR0ZXJGb3JtSW5Nb2RhbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoQy5TSUdOVVBfRk9STSk7XG5cdGNvbnN0IG5ld3NsZXR0ZXJNb2RhbCA9IG5ld3NsZXR0ZXJGb3JtSW5Nb2RhbD8uY2xvc2VzdChgLiR7Qy5NT0RBTF9CT1h9YCk7XG5cdGNvbnN0IG5ld3NsZXR0ZXJNb2RhbENsb3NlQnV0dG9uTGlzdCA9IG5ld3NsZXR0ZXJNb2RhbD8ucXVlcnlTZWxlY3RvckFsbChgLiR7Qy5NT0RBTF9DTE9TRV9CVVRUT059YCk7XG5cdGNvbnN0IG5ld3NsZXR0ZXJTaWdudXBGb3JtID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihDLlNJR05VUF9GT1JNKTtcblx0Y29uc3QgY29va2llTmFtZSA9IG5ld3NsZXR0ZXJNb2RhbD8uZ2V0QXR0cmlidXRlKEMuQ09PS0lFX05BTUUpO1xuXG5cdGNvbnN0IGV2ZW50T25OZXdzbGV0dGVyTW9kYWwgPSAoKSA9PiB7XG5cdFx0c2F2ZUNvb2tpZShjb29raWVOYW1lKTtcblx0fVxuXG5cdGNvbnN0IG5ld3NMZXR0ZXJNb2RhbEluaXQgPSAoKSA9PiB7XG5cdFx0Ly8gTGlzdGVuZXIgb24gdGhlIG5ld3NsZXR0ZXIgZm9ybVxuXHRcdG5ld3NsZXR0ZXJTaWdudXBGb3JtPy5hZGRFdmVudExpc3RlbmVyKFwic3VibWl0XCIsIGV2dCA9PiB7XG5cdFx0XHRldmVudE9uTmV3c2xldHRlck1vZGFsKGV2dCk7XG5cdFx0fSk7XG5cblx0XHQvLyBhZGQgc2F2ZUNvb2tpZSBvbiBjbG9zZSBuZXdzbGV0dGVyIG1vZGFsIGJ1dHRvblxuXHRcdG5ld3NsZXR0ZXJNb2RhbENsb3NlQnV0dG9uTGlzdD8uZm9yRWFjaChidXR0b24gPT4ge1xuXHRcdFx0YnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBldnQgPT4ge1xuXHRcdFx0XHRldmVudE9uTmV3c2xldHRlck1vZGFsKGV2dCk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdGNvbnN0IGluaXQgPSAoKSA9PiB7XG5cdFx0aWYgKG5ld3NsZXR0ZXJTaWdudXBGb3JtKSB7XG5cdFx0XHRuZXdzTGV0dG
118VyTW9kYWxJbml0KCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnNvbGUubG9nKFwibmV3c2xldHRlclNpZ251cEZvcm0gaXMgbWlzc2luZyBmcm9tIHRoZSBtYXJrdXBcIilcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdGluaXRcblx0fTtcbn1cbmNvbnN0IE5ld3NsZXR0ZXJQb3B1cFBhZ2VMb2FkID0gKCkgPT4ge1xuXG5cdGNvbnN0IGNvbmZpcm1hdGlvbkZvcm0gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKEMuQ09PS0lFX0ZPUk0pO1xuXHRjb25zdCBuZXdzbGV0dGVyRm9ybUluTW9kYWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKEMuU0lHTlVQX0ZPUk0pO1xuXHRjb25zdCBuZXdzbGV0dGVyTW9kYWwgPSBuZXdzbGV0dGVyRm9ybUluTW9kYWw/LmNsb3Nlc3QoYC4ke0MuTU9EQUxfQk9YfWApO1xuXHRjb25zdCBuZXdzbGV0dGVyTW9kYWxDbG9zZUJ1dHRvbkxpc3QgPSBuZXdzbGV0dGVyTW9kYWw/LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0MuTU9EQUxfQ0xPU0VfQlVUVE9OfWApO1xuXHRjb25zdCBuZXdzbGV0dGVyU2lnbnVwRm9ybSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoQy5TSUdOVVBfRk9STSk7XG5cdGxldCBjb29raWVOYW1lID0gbmV3c2xldHRlck1vZGFsPy5nZXRBdHRyaWJ1dGUoQy5DT09LSUVfTkFNRSk7XG5cblx0Y29uc3QgZXZlbnRPbk5ld3NsZXR0ZXJNb2RhbCA9ICgpID0+IHtcblx0XHRzYXZlQ29va2llKGNvb2tpZU5hbWUpO1xuXHR9XG5cblx0Y29uc3QgbmV3c0xldHRlck1vZGFsSW5pdCA9ICgpID0+IHtcblx0XHQvLyBMaXN0ZW5lciBvbiB0aGUgbmV3c2xldHRlciBmb3JtXG5cdFx0bmV3c2xldHRlclNpZ251cEZvcm0/LmFkZEV2ZW50TGlzdGVuZXIoXCJzdWJtaXRcIiwgZXZ0ID0+IHtcblx0XHRcdGV2ZW50T25OZXdzbGV0dGVyTW9kYWwoZXZ0KTtcblx0XHR9KTtcblxuXHRcdC8vIGFkZCBzYXZlQ29va2llIG9uIGNsb3NlIG5ld3NsZXR0ZXIgbW9kYWwgYnV0dG9uXG5cdFx0bmV3c2xldHRlck1vZGFsQ2xvc2VCdXR0b25MaXN0Py5mb3JFYWNoKGJ1dHRvbiA9PiB7XG5cdFx0XHRidXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcblx0XHRcdFx0c2F2ZUNvb2tpZShjb29raWVOYW1lKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cblx0Y29uc3QgY29va2llUHJlc2VudE1vZGFsSW5pdCA9IG1vZGFsID0+IHtcblx0XHRjb25maXJtYXRpb25Gb3JtLmFkZEV2ZW50TGlzdGVuZXIoXCJzdWJtaXRcIiwgZXZ0ID0+IHtcblx0XHRcdGV2ZW50T25OZXdzbGV0dGVyTW9kYWwoZXZ0KTtcblx0XHRcdGNsb3NlTW9kYWwobW9kYWwpO1xuXHRcdH0pO1xuXHR9XG5cblx0Y29uc3QgaW5pdCA9IG1vZGFsID0+IHtcblxuXHRcdGNoZWNrSWZDb29raWUobW9kYWwsIGNvb2tpZU5hbWUpO1xuXG5cdFx0aWYgKG5ld3NsZXR0ZXJTaWdudXBGb3JtKSB7XG5cdFx0XHRuZXdzTGV0dG
118VyTW9kYWxJbml0KCk7XG5cdFx0fSBlbHNlIGlmIChjb25maXJtYXRpb25Gb3JtKSB7XG5cdFx0XHRjb29raWVQcmVzZW50TW9kYWxJbml0KG1vZGFsKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc29sZS5sb2coXCJuZXdzbGV0dGVyU2lnbnVwRm9ybSBpcyBtaXNzaW5nIGZyb20gdGhlIG1hcmt1cFwiKVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7XG5cdFx0aW5pdFxuXHR9O1xufVxuXG5leHBvcnQge05ld3NsZXR0ZXJQb3B1cFRyaWdnZXJlZEJ5VGFyZ2V0LCBOZXdzbGV0dGVyUG9wdXBQYWdlTG9hZH1cbiIsImltcG9ydCB7Q29uc3RhbnQgYXMgQywgY2xvc2VNb2RhbCwgaXNFeHRlcm5hbExpbmssIGlzTm90Q1RBV2l0aE1vZGFsLCBpc05vdEluc2lkZU1vZGFsLCBpc05vdFBhcnRuZXJMaW5rLCBvcGVuTW9kYWwsIHRoZUxpbmtJc05vdFdoaXRlbGlzdGVkfSBmcm9tICcuLi9oZWxwZXJzJ1xuaW1wb3J0IHsgZ2V0R2xvYmFsRGlnaXRhbERhdGEsIGdldEdsb2JhbFBhZ2VQcm9wcyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL3VpLWFuYWx5dGljcy9qcy91dGlscyc7XG5cbi8qKlxuICogSGFuZGxlcyB0aGUgbGVhdmUtc2l0ZSBwb3B1cCBsb2dpYyBmb3IgdHdvIGRpc3RpbmN0IHVzZSBjYXNlczpcbiAqXG4gKiAqKkNhc2UgMSDigJQgUGFnZS1sZXZlbCBleHRlcm5hbCBsaW5rIHBvcHVwKipcbiAqIC0gQSBzaW5nbGUgbW9kYWwgaXMgcGxhY2VkIGF0IHBhZ2UgbGV2ZWwgYW5kIHNoYXJlZCBieSBhbGwgcXVhbGlmeWluZyBhbmNob3JzLlxuICogLSBPbiBgaW5pdGAsIHRoZSBwYWdlIGlzIHNjYW5uZWQgZm9yIGV4dGVybmFsIGxpbmtzOyBhIGNsaWNrIGxpc3RlbmVyIGlzIGF0dGFjaGVkIHRvIGVhY2guXG4gKiAtIE9uIGNsaWNrLCB0aGUgbW9kYWwgb3BlbnMgYW5kIGl0cyBjb25maXJtIGJ1dHRvbiBocmVmIGlzIHVwZGF0ZWQgdG8gdGhlIGNsaWNrZWQgbGluay5cbiAqIC0gTGlua3MgbWF0Y2hpbmcgdGhlIHdoaXRlbGlzdCBieXBhc3MgdGhlIG1vZGFsIOKAlCB0aGUgYnJvd3NlciBuYXZpZ2F0ZXMgZGlyZWN0bHkuXG4gKiAtIEFsc28gbGlzdGVucyBmb3IgYHdpbmRvdy5wb3N0TWVzc2FnZSh7IHJlZGlyZWN0TGluazogJ2h0dHBzOi8vLi4uJyB9KWAgc28gZXh0ZXJuYWxcbiAqICAgYXBwcyAoZS5nLiBpZnJhbWVzKSBjYW4gdHJpZ2dlciB0aGUgbW9kYWwgcHJvZ3JhbW1hdGljYWxseS5cbiAqXG4gKiAqKkNhc2UgMiDigJQgUGFydG5lciBwb3B1cCAocGVyLUNUQSBkZWRpY2F0ZWQgbW9kYWwpKipcbiAqIC0gQSBDVEEgYnV0dG9uIGVtYmVkcyBpdHMgb3duIGRlZGljYXRlZCBtb2RhbCBhcyBhIGNoaWxkIChgLmNtcC1tb2RhbF9fcGFydG5lcmApLlxuICogLSBUaGUgcG9wdXAgaGFzIHBlcnNvbmFsaXplZCBkZXNpZ24gYW5kIGNvbnRlbnQgc3BlY2lmaWMgdG8gdGhhdCBzaW5nbGUgQ1RBLlxuICogLSBPbmx5IHRoZSBhbmNob3IgaW5zaWRlIHRoZSBwYXJlbnQgYC5jdGFidXR0b25gIGFjdHMgYXMgdGhlIHRyaWdnZXIuXG4gKiAtIFRoZSBtb2RhbCBpcyBtb3ZlZCB0byBgZG9jdW1lbnQuYm9keWAgb24gaW5pdCB0byBhdm9pZCB6LWluZGV4IC8gc3RhY2tpbmctY29udGV4dCBpc3N1ZXMuXG4gKiAtIFRoZSBgd2luZG93Lm1lc3NhZ2VgIGxpc3RlbmVyIGlzIG5vdCBhdHRhY2hlZCBmb3IgcGFydG5lciBwb3B1cHMuXG4gKi9cbmNsYXNzIExlYXZlU2l0ZVBvcHVwIHtcbiAgY29uc3RydWN0b3IobW9kYWwpIHtcbiAgICB0aGlzLmVsID0gbW9kYWw7XG4gICAgdGhpcy53aGl0ZWxpc3RlZFNpdGVzID0gW107XG4gICAgdGhpcy5jdXJyZW50SHJlZlZhbHVlID0gbnVsbDtcbiAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgIHNlbGVjdG9yczoge1xuICAgICAgICBtb2RhbENsb3NlQnV0dG9uOiBgLiR7Qy5NT0RBTF9DTE9TRV9CVVRUT059YCxcbiAgICAgICAgbW9kYWxMaW5rOiBgLiR7Qy5NT0RBTF9MSU5LfWAsXG4gICAgICAgIGN0YUJ1dHRvbjogQy5DVEFfQlRUTixcbiAgICAgICAgcGFnZUV4dGVybmFsTGlua3NDYW5kaWRhdGVzOiBDLlBBR0VfRVhURVJOQUxfTElOS1NfQ0FORElEQVRFUyxcbiAgICAgICAgcGFydG5lclBvcHVwOiAnLmNtcC1tb2RhbF9fcGFydG5lcicsXG4gICAgICAgIGN0YUJ1dHRvbldyYXBwZXI6ICcuY3RhYnV0dG9uJyxcbiAgICAgICAgY3RhTGluazogJy5jdGEgPiBhJ1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBDYXRjaCBlcnJvcnMgdG8gcHJldmVudCBicmVha2luZyB0aGUgcGFnZSBpZiBhbnl0aGluZyBnb2VzIHdyb25nIGluIHRoZSBwb3B1cCBsb2dpYy5cbiAgICB0cnkge1xuICAgICAgdGhpcy5pbml0KCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGluaXQoKSB7XG4gICAgdGhpcy5zZXRXaGl0ZWxpc3RlZFNpdGVBcnJheSgpO1xuICAgIHRoaXMuZ2V0RWxlbWVudHMoKTtcbiAgICB0aGlzLnNldEJpbmRzKCk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVycygpO1xuXG4gICAgdGhpcy5tb3ZlTW9kYWxUb0JvZHkoKTtcbiAgfVxuXG4gIHNldFdoaXRlbGlzdGVkU2l0ZUFycmF5KCkge1xuICAgIGlmICghdGhpcy5lbC5oYXNBdHRyaWJ1dGUoJ2RhdGEtd2hpdGVsaXN0ZWQnKSkgcmV0dXJuO1xuICAgIHRoaXMud2hpdGVsaXN0ZWRTaXRlcyA9IEFycmF5LmZyb20odGhpcy5lbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtd2hpdGVsaXN0ZWQnKS5zcGxpdCgnOycpKTtcbiAgfVxuXG4gIGdldEVsZW1lbnRzKCkge1xuICAgIGNvbnN0IHsgcGFydG5lclBvcHVwLCBtb2RhbENsb3NlQnV0dG9uIH0gPSB0aGlzLmNvbmZpZy5zZWxlY3RvcnM7XG5cbiAgICB0aGlzLmN1cnJlbnRUcmlnZ2VyID0gbnVsbDtcbiAgICB0aGlzLnBhcnRuZXJQb3B1cCA9IHRoaXMuZWwuY2xvc2VzdChwYXJ0bmVyUG9wdXApO1xuICAgIHRoaXMucG9wdXBUcmlnZ2VycyA9IHRoaXMuZ2V0UG9wdXBUcmlnZ2VycygpO1xuICAgIHRoaXMubW9kYWxDbG9zZUJ0biA9IHRoaXMuZWwucXVlcnlTZWxlY3Rvcihtb2RhbENsb3NlQnV0dG9uKTtcbiAgICB0aGlzLm1vZGFsRXhpdENvbmZpcm1CdG4gPSB0aGlzLmdldE1vZGFsRXhpdENvbmZpcm1CdG4oKTtcbiAgfVxuXG4gIHNldEJpbmRzKCkge1xuICAgIHRoaXMub25FeHRlcm5hbExpbmtDbGljayA9IHRoaXMub25FeHRlcm5hbExpbmtDbGljay5iaW5kKHRoaXMpO1xuICAgIHRoaXMub25DbG9zZUNsaWNrID0gdGhpcy5vbkNsb3NlQ2xpY2suYmluZCh0aGlzKTtcbiAgICB0aGlzLm9uRXhpdENvbmZpcm1DbGljayA9IHRoaXMub25FeGl0Q29uZmlybUNsaWNrLmJpbmQodGhpcyk7XG4gICAgdGhpcy5vbk9wZW5MZWF2ZVNpdGVNb2RhbFdpdGhNZXNzYWdlID0gdGhpcy5vbk9wZW5MZWF2ZVNpdGVNb2RhbFdpdGhNZXNzYWdlLmJpbmQodGhpcyk7XG4gIH1cblxuICBhZGRFdmVudExpc3RlbmVycygpIHtcbiAgICB0aGlzLnBvcHVwVHJpZ2dlcnMuZm9yRWFjaCh0cmlnZ2VyID0+IHRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uRXh0ZXJuYWxMaW5rQ2xpY2spKTtcbiAgICB0aGlzLm1vZGFsQ2xvc2VCdG4/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbkNsb3NlQ2xpY2spO1xuICAgIHRoaXMubW9kYWxFeGl0Q29uZmlybUJ0bj8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uRXhpdENvbmZpcm1DbGljayk7XG5cbiAgICBpZiAoIXRoaXMucGFydG5lclBvcHVwKSB7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMub25PcGVuTGVhdmVTaXRlTW9kYWxXaXRoTWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gU3RhcnQgb2YgZ2V0IGVsZW1lbnRzIG1ldGhvZHNcbiAgZ2V0UG9wdXBUcmlnZ2VycygpIHtcbiAgICBjb25zdCBwYXJ0bmVyVHJpZ2dlcnMgPSB0aGlzLmdldFBhcnRuZXJMaW5rSXRlbSgpO1xuICAgIGNvbnN0IHRyaWdnZXJzID0gcGFydG5lclRyaWdnZXJzID8gW3BhcnRuZXJUcmlnZ2Vyc10gOiB0aGlzLmdldEV4dGVybmFsTGlua3NUcmlnZ2VycygpO1xuXG4gICAgcmV0dXJuIHRyaWdnZXJzO1xuICB9XG5cbiAgZ2V0UGFydG5lckxpbmtJdGVtKCkge1xuICAgIGlmICghdGhpcy5wYXJ0bmVyUG9wdXApIHJldHVybi
118BudWxsO1xuXG4gICAgY29uc3QgeyBjdGFCdXR0b25XcmFwcGVyLCBjdGFMaW5rIH0gPSB0aGlzLmNvbmZpZy5zZWxlY3RvcnM7XG4gICAgY29uc3QgY3RhQnRuID0gdGhpcy5lbC5jbG9zZXN0KGN0YUJ1dHRvbldyYXBwZXIpO1xuICAgIGNvbnN0IHBhcnRuZXJMaW5rID0gY3RhQnRuID8gY3RhQnRuLnF1ZXJ5U2VsZWN0b3IoY3RhTGluaykgOiBudWxsO1xuICAgIC8vIEJlY2F1c2UgdGhlcmUgaXMgb25seSBvbmUgc3RhdGljIHRyaWdnZXIgZm9yIHBhcnRuZXIgcG9wdXAsIHdlIGNhbiBzZXQgdGhlIHZhbHVlcyByaWdodCBhd2F5XG4gICAgLy8gVGhpcyBpcyByZXF1aXJlZCB0byBzZXQgYHRoaXMubW9kYWxFeGl0Q29uZmlybUJ0bmAgbGF0ZXIgb24uXG4gICAgdGhpcy5zZXRDdXJyZW50VHJpZ2dlcihwYXJ0bmVyTGluayk7XG5cbiAgICByZXR1cm4gcGFydG5lckxpbms7XG4gIH1cblxuICBnZXRFeHRlcm5hbExpbmtzVHJpZ2dlcnMoKSB7XG4gICAgaWYgKHRoaXMucGFydG5lclBvcHVwKSByZXR1cm4gW107XG5cbiAgIGNvbnN0IGV4dGVybmFsTGlua3MgPSBbLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5zZWxlY3RvcnMucGFnZUV4dGVybmFsTGlua3NDYW5kaWRhdGVzKV1cblxuICAgIC8vIENoZWNrcyB0byBkZXRlcm1pbmUgaWYgdGhlIGxpbmsgc2hvdWxkIHRyaWdnZXIgdGhlIGxlYXZlIHNpdGUgcG9wdXAgb3Igbm90XG4gICAgLy8gQWxsIGNoZWNrcyBtdXN0IGJlIHZhbGlkLlxuICAgIGNvbnN0IGNoZWNrcyA9IFtcbiAgICAgIGlzRXh0ZXJuYWxMaW5rLFxuICAgICAgaXRlbSA9PiB0aGVMaW5rSXNOb3RXaGl0ZWxpc3RlZChpdGVtLCB0aGlzLndoaXRlbGlzdGVkU2l0ZXMpLFxuICAgICAgaXNOb3RDVEFXaXRoTW9kYWwsXG4gICAgICBpc05vdFBhcnRuZXJMaW5rLFxuICAgICAgaXNOb3RJbnNpZGVNb2RhbFxuICAgIF07XG4gICAgY29uc3QgZmlsdGVyZWRFeHRlcm5hbExpbmtzID0gZXh0ZXJuYWxMaW5rcy5maWx0ZXIoaXRlbSA9PiBjaGVja3MuZXZlcnkoY2hlY2sgPT4gY2hlY2soaXRlbSkpKTtcblxuICAgIHJldHVybiBmaWx0ZXJlZEV4dGVybmFsTGlua3M7XG4gIH1cblxuICBnZXRNb2RhbEV4aXRDb25maXJtQnRuKCkge1xuICAgIGNvbnN0IHsgbW9kYWxMaW5rLCBjdGFCdXR0b24gfSA9IHRoaXMuY29uZmlnLnNlbGVjdG9ycztcblxuICAgIGlmICghdGhpcy5wYXJ0bmVyUG9wdXApIHJldHVybiB0aGlzLmVsLnF1ZXJ5U2VsZWN0b3IobW9kYWxMaW5rKTtcblxuICAgIGNvbnN0IGN0YUJ0dG4gPSBbLi4udGhpcy5lbC5xdWVyeVNlbGVjdG9yQWxsKGN0YUJ1dHRvbildLmZpbmQoYnRuSXRlbSA9PiB7XG4gICAgICBjb25zdCBub3JtYWxpemVkSHJlZlZhbHVlID0gYnRuSXRlbS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3Qgbm9ybWFsaXplZEN1cnJlbnRIcmVmID0gdGhpcy5jdXJyZW50SHJlZlZhbHVlLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIHJldHVybiBub3JtYWxpemVkSHJlZlZhbHVlID09PSBub3JtYWxpemVkQ3VycmVudEhyZWY7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY3RhQnR0biB8fCBudWxsO1xuICB9XG4gIC8vIEVuZCBvZiBnZXQgZWxlbWVudHMgbWV0aG9kc1xuXG4gIC8vIFN0YXJ0IG9mIGV2ZW50IGhhbmRsZXJzXG4gIG9uRXh0ZXJuYWxMaW5rQ2xpY2soZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuc2V0Q3VycmVudFRyaWdnZXIoZXZlbnQuY3VycmVudFRhcmdldCk7XG5cbiAgICBjb25zdCBidXR0b25MYWJlbCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQudGV4dENvbnRlbnQudHJpbSgpO1xuXG4gICAgdGhpcy51cGRhdGVNb2RhbEV4aXRDb25maXJtQnRuQXR0cmlidXRlcygpO1xuXG4gICAgb3Blbk1vZGFsKHRoaXMuZWwpO1xuXG4gICAgdGhpcy5wb3B1cE9wZW5UcmFja2luZyhidXR0b25MYWJlbCk7XG4gIH1cblxuICBvbkV4aXRDb25maXJtQ2xpY2soZXZlbnQpIHtcbiAgICBjb25zdCBidXR0b25MYWJlbCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQudGV4dENvbnRlbnQudHJpbSgpO1xuXG4gICAgdGhpcy5wYWdlRXhpdFRyYWNraW5nKGJ1dHRvbkxhYmVsKTtcblxuICAgIGNsb3NlTW9kYWwodGhpcy5lbCk7XG4gIH1cblxuICBvbkNsb3NlQ2xpY2soZXZlbnQpIHtcbiAgICBjb25zdCBjbG9zZUJ0bkxhYmVsID0gZXZlbnQuY3VycmVudFRhcmdldC5nZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnKTtcblxuICAgIHRoaXMucG9wdXBDbG9zZVRyYWNraW5nKGNsb3NlQnRuTGFiZWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW4gdGhlIGxlYXZlIHNpdGUgbW9kYWwgd2hlbiByZWNlaXZpbmcgdGhlIG1lc3NhZ2UgZnJvbSBleHRlcm5hbCBhcHBzLFxuICAgKiBhbmQgdGhlIG1lc3NhZ2Ugc2hvdWxkIGNvbnRhaW4gdGhlIHJlZGlyZWN0IGxpbmtcbiAgICpcbiAgICogQHBhcmFtIHsqfSBtZXNzYWdlIHRoZSBtZXNzYWdlIGZyb20gZXh0ZXJuYWwgYXBwcywgd2hpY2ggc2hvdWxkIGNvbnRhaW4gdGhlIHJlZGlyZWN0IGxpbmsgaW4gdGhlIGZvcm1hdCBvZiB7IGRhdGE6IHsgcmVkaXJlY3RMaW5rOiAndGhlUmVkaXJlY3RVcmwnIH0gfVxuICAgKlxuICAgKiBAY29uc29sZS10ZXN0XG4gICAqIHdpbmRvdy5wb3N0TWVzc2FnZSh7IHJlZGlyZWN0TGluazogJ2h0dHBzOi8vZXhhbXBsZS5jb20nIH0sICcqJyk7XG4gICAqL1xuXG4gIG9uT3BlbkxlYXZlU2l0ZU1vZGFsV2l0aE1lc3NhZ2UobWVzc2FnZSkge1xuICAgIGlmICghbWVzc2FnZT8uZGF0YT8ucmVkaXJlY3RMaW5rKSByZXR1cm47XG4gICAgY29uc3QgeyByZWRpcmVjdExpbmsgfSA9IG1lc3NhZ2UuZGF0YTtcblxuICAgIGlmICh0aGlzLndoaXRlbGlzdGVkU2l0ZXMuc29tZShwcmVmaXggPT4gcmVkaXJlY3RMaW5rLnN0YXJ0c1dpdGgocHJlZml4KSkpIHtcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gcmVkaXJlY3RMaW5rO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2V0Q3VycmVudFRyaWdnZXIoeyBocmVmOiByZWRpcmVjdExpbmsgfSk7XG4gICAgdGhpcy51cGRhdGVNb2RhbEV4aXRDb25maXJtQnRuQXR0cmlidXRlcygpO1xuICAgIG9wZW5Nb2RhbCh0aGlzLmVsKTtcbiAgICB0aGlzLnBvcHVwT3BlblRyYWNraW5nKCcnKTtcbiAgfVxuICAvLyBFbmQgb2YgZXZlbnQgaGFuZGxlcnNcblxuICAvLyBTdGFydCBvZiBoZWxwZXIgbWV0aG9kc1xuICBzZXRDdXJyZW50VHJpZ2dlcih0cmlnZ2VyKSB7XG4gICAgdGhpcy5jdXJyZW50VHJpZ2dlciA9IHRyaWdnZXIgfHwgbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRIcmVmVmFsdWUgPSB0cmlnZ2VyPy5nZXRBdHRyaWJ1dGU/LignaHJlZicpIHx8IHRyaWdnZXI/LmhyZWYgfHwgbnVsbDtcbiAgfVxuXG4gIHVwZGF0ZU1vZGFsRXhpdENvbmZpcm1CdG5BdHRyaWJ1dGVzKCkge1xuICAgIGlmICh0aGlzLnBhcnRuZXJQb3B1cCkgcmV0dXJuO1xuICAgIGlmICghdGhpcy5tb2R
118hbEV4aXRDb25maXJtQnRuKSByZXR1cm47XG5cbiAgICB0aGlzLm1vZGFsRXhpdENvbmZpcm1CdG4uc2V0QXR0cmlidXRlKCdocmVmJywgdGhpcy5jdXJyZW50SHJlZlZhbHVlKTtcblxuICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuY3VycmVudFRyaWdnZXI/LmdldEF0dHJpYnV0ZT8uKCd0YXJnZXQnKSB8fCAnX2JsYW5rJztcblxuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgIHRoaXMubW9kYWxFeGl0Q29uZmlybUJ0bi5zZXRBdHRyaWJ1dGUoJ3RhcmdldCcsIHRhcmdldCk7XG4gICAgfVxuICB9XG5cbiAgbW92ZU1vZGFsVG9Cb2R5KCkge1xuICAgIGlmICghdGhpcy5wYXJ0bmVyUG9wdXApIHJldHVybjtcblxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5wYXJ0bmVyUG9wdXApO1xuICB9XG5cbiAgZ2V0VHJpZ2dlclRyYWNraW5nRGF0YSgpIHtcbiAgICBjb25zdCB0cmlnZ2VyID0gdGhpcy5jdXJyZW50VHJpZ2dlcjtcbiAgICBjb25zdCBpc0NoYXRib3QgPSAhIXRyaWdnZXI/Lmhhc0F0dHJpYnV0ZT8uKCdkYXRhLWNoYXRib3QtdHJhY2tpbmcnKTtcbiAgICBjb25zdCBpc01lZ2FNZW51RWhlYWx0aCA9ICEhdHJpZ2dlcj8uaGFzQXR0cmlidXRlPy4oJ2RhdGEtZWhlYWx0aC1wYXJ0bmVyLXRyYWNraW5nJyk7XG4gICAgY29uc3QgbWVnYU1lbnVFaGVhbHRoTmFtZSA9IGlzTWVnYU1lbnVFaGVhbHRoID8gdHJpZ2dlcj8uZ2V0QXR0cmlidXRlPy4oJ2RhdGEtZWhlYWx0aC1wYXJ0bmVyLW5hbWUnKSA6ICcnO1xuICAgIGNvbnN0IGVIZWFsdGhQYXJ0bmVyTmFtZSA9IHRyaWdnZXI/LmdldEF0dHJpYnV0ZT8uKCdkYXRhLWhlYWx0aC1wYXJ0bmVyLW5hbWUnKSB8fCB0cmlnZ2VyPy5nZXRBdHRyaWJ1dGU/LignZGF0YS10ZXh0LWxpbmstZWhlYWx0aC1wYXJ0bmVyJykgfHwgbWVnYU1lbnVFaGVhbHRoTmFtZSB8fCAnJztcbiAgICBjb25zdCBoY3BMb2NhdG9yTmFtZSA9IHRyaWdnZXI/LmdldEF0dHJpYnV0ZT8uKCdkYXRhLWhjcC1sb2NhdG9yLW5hbWUnKSB8fCB0cmlnZ2VyPy5nZXRBdHRyaWJ1dGU/LignZGF0YS10ZXh0LWxpbmstaGNwLW5hbWUnKSB8fCAnJztcbiAgICBjb25zdCBpc0hjcExvY2F0b3JPckVoZWFsdGggPSAhIXRyaWdnZXI/LmNsYXNzTGlzdD8uY29udGFpbnM/LignaGNwLWxvY2F0b3ItbGluaycpIHx8XG4gICAgICAhIXRyaWdnZXI/LmdldEF0dHJpYnV0ZT8uKCdkYXRhLXRleHQtbGluay1oY3AtbG9jYXRvcicpIHx8XG4gICAgICAhIXRyaWdnZXI/LmdldEF0dHJpYnV0ZT8uKCdkYXRhLXRleHQtbGluay1laGVhbHRoLXBhcnRuZXInKSB8fFxuICAgICAgaXNNZWdhTWVudUVoZWFsdGg7XG4gICAgY29uc3QgaGFzQ29udmVyc2lvblR5cGUgPSBpc01lZ2FNZW51RWhlYWx0aCB8fCBpc0NoYXRib3Q7XG4gICAgY29uc3QgYXV0aG9yZWRNZWdhTWVudVB1cnBvc2UgPSB0cmlnZ2VyPy5nZXRBdHRyaWJ1dGU/LignZGF0YS1wdXJwb3NlLW1lZ2FtZW51JykgfHwgJyc7XG4gICAgY29uc3QgbWVnYU1lbnVQdXJwb3NlID0gaGFzQ29udmVyc2lvblR5cGUgPyAnJyA6IGF1dGhvcmVkTWVnYU1lbnVQdXJwb3NlO1xuICAgIGNvbnN0IHB1cnBvc2UgPSAoaXNIY3BMb2NhdG9yT3JFaGVhbHRoID8gJ0hDUF9JbnRlbnQnIDogJycpIHx8IChpc0NoYXRib3QgPyAnU3VwcG9ydF9JbnRlbnQnIDogJycpIHx8XG4gICAgICB0cmlnZ2VyPy5nZXRBdHRyaWJ1dGU/LignZGF0YS1wdXJwb3NlJykgfHwgdHJpZ2dlcj8uZ2V0QXR0cmlidXRlPy4oJ2RhdGEtdGV4dC1saW5rLXB1cnBvc2UnKSB8fCBtZWdhTWVudVB1cnBvc2U7XG4gICAgY29uc3QgaXNFSGVhbHRoUGFydG5lciA9IGlzTWVnYU1lbnVFaGVhbHRoIHx8ICEhZUhlYWx0aFBhcnRuZXJOYW1lO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGVIZWFsdGhQYXJ0bmVyOiBpc0VIZWFsdGhQYXJ0bmVyID8gJ1llcycgOiAnTm8nLFxuICAgICAgZUhlYWx0aFBhcnRuZXJOYW1lLFxuICAgICAgaGNwTG9jYXRvck5hbWUsXG4gICAgICBwdXJwb3NlLFxuICAgICAgLi4udGhpcy5nZXRUcmlnZ2VyUGFydG5lck5hbWVEYXRhKHRyaWdnZXIsIGhhc0NvbnZlcnNpb25UeXBlKVxuICAgIH07XG4gIH1cblxuICBnZXRUcmlnZ2VyUGFydG5lck5hbWVEYXRhKHRyaWdnZXIsIGhhc0NvbnZlcnNpb25UeXBlKSB7XG4gICAgY29uc3QgYXV0aG9yZWRNZWdhTWVudVBhcnRuZXJOYW1lID0gdHJpZ2dlcj8uZ2V0QXR0cmlidXRlPy4oJ2RhdGEtcGFydG5lci1uYW1lLW1lZ2FtZW51JykgfHwgJyc7XG4gICAgY29uc3QgbWVnYU1lbnVQYXJ0bmVyTmFtZSA9IGhhc0NvbnZlcnNpb25UeXBlID8gJycgOiBhdXRob3JlZE1lZ2FNZW51UGFydG5lck5hbWU7XG4gICAgY29uc3QgcGFydG5lck5hbWUgPSB0cmlnZ2VyPy5nZXRBdHRyaWJ1dGU/LignZGF0YS1wYXJ0bmVyLW5hbWUnKSB8fFxuICAgICAgdHJpZ2dlcj8uZ2V0QXR0cmlidXRlPy4oJ2RhdGEtdGV4dC1saW5rLXBhcnRuZXItbmFtZScpIHx8IG1lZ2FNZW51UGFydG5lck5hbWU7XG5cbiAgICByZXR1cm4gcGFydG5lck5hbWUgPyB7cGFydG5lck5hbWV9IDoge307XG4gIH1cbiAgLy8gRW5kIG9mIGhlbHBlciBtZXRob2RzXG5cbiAgLy8gU3RhcnQgb2YgdHJhY2tpbmcgbWV0aG9kc1xuICAvLyBDaGF0Ym90OiBvbmx5IGBwdXJwb3NlYCAoYFN1cHBvcnRfSW50ZW50YCwgdmlhIGdldFRyaWdnZXJUcmFja2luZ0RhdGEpIGlzIGluaGVyaXRlZCBpbnRvIHRoZVxuICAvLyBleGl0LXBvcHVwIGNvbnRlbnQuIFRoZSBgY2hhdGJvdF9jbGlja2AgY3VzdG9tRXZlbnQgYW5kIHRoZSBgY2hhdGJvdEluZm9ybWF0aW9uYCBibG9jayBzdGF5IG9uXG4gIC8vIHRoZSBidXR0b24gT05MWSAodWktYW5hbHl0aWNzL2pzL2NoYXRib3QpIOKAlCBuZXZlciBvbiB0aGUgcG9wLXVwIGV2ZW50cy5cbiAgcHVzaEV4aXRQb3B1cEV2ZW50KGN1c3RvbUV2ZW50LCBidXR0b25OYW1lKSB7XG4gICAgZ2V0R2xvYmFsRGlnaXRhbERhdGEoKS5wdXNoKHtcbiAgICAgICdldmVudCc6ICdDbGljaycsXG4gICAgICAnZGF0YSc6IHtcbiAgICAgICAgJ3BhZ2UnOiB7XG4gICAgICAgICAgJ2N1c3RvbUV2ZW50cyc6IFtjdXN0b21FdmVudF0sXG4gICAgICAgICAgLi4uZ2V0R2xvYmFsUGFnZVByb3BzKClcbiAgICAgICAgfSxcbiAgICAgICAgJ2NvbnRlbnQnOiB7XG4gICAgICAgICAgJ2J1dHRvbl9uYW1lJzogYnV0dG9uTmFtZSxcbiAgICAgICAgICAuLi50aGlzLmdldFRyaWdnZXJUcmFja2luZ0RhdGEoKSxcbiAgICAgICAgICAnaHJlZic6IHRoaXMuY3VycmVudEhyZWZWYWx1ZSB8fCAnJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwb3B1cE9wZW5UcmFja2luZyhidXR0b25MYWJlbCkge1xuICAgIHRoaXMucHVzaEV4aXRQb3B1cEV2ZW50KCdvcGVuZWQgZXhpdCBwb3AtdXAnLCBidXR0b25MYWJlbCk7XG4gIH1cblxuICBwb3B1cENsb3NlVHJhY2tpbmcoY2xvc2VCdG5MYWJlbCkge1xuICAgIHRoaXMucHVzaEV4aXRQb3B1cEV2ZW50KCdjbG9zZWQgZXhpdCBwb3AtdXAnLCBjbG9zZUJ0bkxhYmVsKTtcbiAgfVxuXG4gIHBhZ2VFeGl0VHJhY2tpbmcoYnV0dG9uTGFiZWwpIHtcbiAgICB0aGlzLnB1c2hFeGl0UG9wdXBFdmVudCgnY2xpY2tlZCBleGl0IHBvcC11cCcsIGJ1dHRvbkxhYmVsKTtcbiAgfVxuICAvLyBFbmQgb2YgdHJhY2tpbmcgbWV0aG9kc1xufVxuXG5leHBvcnQge0xlYXZlU2l0ZVBvcHVwfVxuIiwiaW1wb3J0IHsgQ09NTU9OX0NPTlNUQU5UUywgQ1NTX0NMQVNTRVMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbmNvbnN0IGdldEdsb2JhbFBhZ2VQcm9wcyA9ICgpID0+IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdy5nbG9iYWxQYWdlUHJvcHMgPT09IENPTU1PTl9DT05TVEFOVFMuVU5ERUZJTkVEKSB7XG4gICAgICAgI
118HJldHVybiB7fTtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgaWYgKHdpbmRvdy5nbG9iYWxQYWdlUHJvcHMuaGFzT3duUHJvcGVydHkoJ3BhZ2UnKSkge1xuICAgICAgICByZXR1cm4gd2luZG93Lmdsb2JhbFBhZ2VQcm9wcy5wYWdlO1xuICAgIH1cblxuICAgIHJldHVybiB7fTtcbn07XG5cbmNvbnN0IGdldEdsb2JhbERpZ2l0YWxEYXRhID0gKCkgPT4ge1xuICAgIHdpbmRvdy5kaWdpdGFsRGF0YSA9IHdpbmRvdy5kaWdpdGFsRGF0YSB8fCBbXTtcbiAgICByZXR1cm4gd2luZG93LmRpZ2l0YWxEYXRhO1xufTtcblxuY29uc3QgZXhlY3V0ZUN1c3RvbVB1c2hPbkNsaWNrID0gKGNsaWNrYWJsZUNtcCwgb3B0aW9ucyA9IHt9LCBkaWdpdGFsRGF0YSA9IGdldEdsb2JhbERpZ2l0YWxEYXRhKCkpID0+IHtcbiAgICBpZiAoIWNsaWNrYWJsZUNtcCkge1xuICAgICAgICBjb25zb2xlLmRlYnVnKCdVbmlkZW50aWZpZWQgY2xpY2thYmxlQ21wLiBTa2lwIHB1c2hpbmcgdG8gZGlnaXRhbERhdGEnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNsaWNrYWJsZUNtcC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgZGlnaXRhbERhdGEucHVzaChvcHRpb25zKTtcbiAgICB9KTtcbn07XG5cbmNvbnN0IGRvbVJlYWR5ID0gY2FsbGJhY2tGbiA9PiB7XG4gICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwibG9hZGluZ1wiKSB7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBjYWxsYmFja0ZuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsYmFja0ZuKCk7XG4gICAgfVxufTtcblxuY29uc3QgaXNTY3JvbGxlZEludG9WaWV3ID0gZWwgPT4ge1xuICAgIGNvbnN0IHJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBlbGVtVG9wID0gcmVjdC50b3A7XG4gICAgY29uc3QgZWxlbUJvdHRvbSA9IHJlY3QuYm90dG9tO1xuXG4gICAgLy8gT25seSBjb21wbGV0ZWx5IHZpc2libGUgZWxlbWVudHMgcmV0dXJuIHRydWU6XG4gICAgY29uc3QgaXNWaXNpYmxlID0gZWxlbVRvcCA+PSAwICYmIGVsZW1Cb3R0b20gPD0gd2luZG93LmlubmVySGVpZ2h0O1xuICAgIC8vIFBhcnRpYWxseSB2aXNpYmxlIGVsZW1lbnRzIHJldHVybiB0cnVlOlxuICAgIC8vIGlzVmlzaWJsZSA9IGVsZW1Ub3AgPCB3aW5kb3cuaW5uZXJIZWlnaHQgJiYgZWxlbUJvdHRvbSA+PSAwO1xuICAgIHJldHVybiBpc1Zpc2libGU7XG59O1xuXG5jb25zdCBjYWxsYmFja0ZvckVhY2hFbGVtID0gKGNzc1NlbGVjdG9yLCBjYWxsYmFjaykgPT4ge1xuICAgIGlmICghY3NzU2VsZWN0b3IgfHwgdHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSByZXR1cm47XG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChjc3NTZWxlY3RvcikuZm9yRWFjaChjYWxsYmFjayk7XG59O1xuXG5jb25zdCBvbmx5T25jZSA9IGNhbGxiYWNrID0+IHtcbiAgICBsZXQgZXhlY3V0ZWQgPSBmYWxzZTtcblxuICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoIWV4ZWN1dGVkKSB7XG4gICAgICAgICAgICBleGVjdXRlZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soLi4uYXJncyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xufVxuXG5jb25zdCByZXRyaWV2ZVRhZ1ZhbHVlRnJvbVVybFBhcmFtID0gKHVybFBhcmFtLCBwYXJhbU5hbWUpID0+IHtcbiAgICBpZiAoIXVybFBhcmFtIHx8ICFwYXJhbU5hbWUpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGlmICghdXJsUGFyYW0uaGFzKHBhcmFtTmFtZSkpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIHJldHVybiB1cmxQYXJhbS5cbiAgICAgICAgZ2V0KHBhcmFtTmFtZSkuXG4gICAgICAgIHNwbGl0KCcvJykuXG4gICAgICAgIHBvcCgpO1xufTtcblxuY29uc3QgZ2V0RWxlbWVudFBvc2l0aW9uID0gZWxlbWVudCA9PiB7XG4gICAgaWYgKGVsZW1lbnQuY2xvc2VzdCgnLmhlYWRlci1jbXAtLW1lZ2FtZW51LW5hdmlnYXRpb24nKSkgcmV0dXJuICdtZWdhIG1lbnUgaW50ZXJhY3Rpb24nO1xuICAgIGlmIChlbGVtZW50LmNsb3Nlc3QoJ21haW4nKSkgcmV0dXJuICdCb2R5JztcbiAgICBpZiAoZWxlbWVudC5jbG9zZXN0KCdoZWFkZXJbcm9sZT1cImJhbm5lclwiXScpKSByZXR1cm4gJ1RvcCBOYXZpZ2F0aW9uJztcbiAgICBpZiAoZWxlbWVudC5jbG9zZXN0KCcuaGVybycpKSByZXR1cm4gJ0hlcm8gQmFubmVyJztcbiAgICBpZiAoZWxlbWVudC5jbG9zZXN0KCdmb290ZXInKSkgcmV0dXJuICdGb290ZXInO1xuICAgIHJldHVybiBudWxsO1xufTtcblxuY29uc3QgZ2V0UXVpelRpdGxlID0gKGNvbXBvbmVudCkgPT4gY29tcG9uZW50Py5xdWVyeVNlbGVjdG9yKENTU19DTEFTU0VTLkZBQ1RfUkVWRUFMLlRJVExFKT8uaW5uZXJUZXh0Py50cmltKCkgfHwgJyc7XG5cbmV4cG9ydCB7XG4gICAgZ2V0R2xvYmFsUGFnZVByb3BzLFxuICAgIGdldEdsb2JhbERpZ2l0YWxEYXRhLFxuICAgIGV4ZWN1dGVDdXN0b21QdXNoT25DbGljayxcbiAgICBkb21SZWFkeSxcbiAgICBpc1Njcm9sbGVkSW50b1ZpZXcsXG4gICAgY2FsbGJhY2tGb3JFYWNoRWxlbSxcbiAgICByZXRyaWV2ZVRhZ1ZhbHVlRnJvbVVybFBhcmFtLFxuICAgIG9ubHlPbmNlLFxuICAgIGdldEVsZW1lbnRQb3NpdGlvbixcbiAgICBnZXRRdWl6VGl0bGVcbn07IiwiY29uc3QgQU5BTFlUSUNTX0lOVEVSTkFMX0VWRU5UUyA9IHtcbiAgICBQQUdFX1ZJRVc6IFwicGFnZSB2aWV3XCIsXG4gICAgQ1VTVE9NX0VWRU5UOiBcImN1c3RvbSBldmVudFwiLFxuICAgIENMSUNLOiAnQ2xpY2snLFxuICAgIFBBR0VfTE9BRDogJ1BhZ2UgTG9hZCcsXG4gICAgSU1QUkVTU0lPTjogJ0ltcHJlc3Npb24nXG59O1xuXG5jb25zdCBBTkFMWVRJQ1NfQ1VTVE9NX0VWRU5UUyA9IHtcbiAgICBCTUlfU1RBUlQ6ICdibWkgc3RhcnQnLFxuICAgIEFDQ09SRElPTl9FWFBBTkRFRDogJ2FjY29yZGlvbiBleHBhbmQnLFxuICAgIEFDQ09SRElPTl9DT0xMQVBTRUQ6ICdhY2NvcmRpb24gY29sbGFwc2UnLFxuICAgIE9QRU5FRF9GU19DT01QT05FTlQ6ICdvcGVuIGZzIGNvbXBvbmVudCcsXG4gICAgQ0xPU0VEX0ZTX0NPTVBPTkVOVDogJ2
118Nsb3NlIGZzIGNvbXBvbmVudCcsXG4gICAgSENQX0xPQ0FUT1JfQ0xJQ0tFRDogJ2NsaWNrZWQgaGNwIGxvY2F0b3InLFxuICAgIEJVVFRPTl9DTElDSzogJ2J1dHRvbl9jbGlja2VkJyxcbiAgICBJTUFHRV9DTElDSzogJ0ltYWdlX2NsaWNrJyxcbiAgICBJTkxJTkVfVEVYVF9MSU5LX0NMSUNLOiAndGV4dF9saW5rX2NsaWNrJyxcbiAgICBJTkZPX0JBTk5FUl9DTElDSzogJ2luZm9fYmFubmVyX2NsaWNrJyxcbiAgICBQREZfRE9XTkxPQUQ6ICdwZGZfZG93bmxvYWQnLFxuICAgIFBERl9WSUVXOiAncGRmX3ZpZXcnLFxuICAgIE1JTklfUE9MTF9BTlNXRVJFRDogJ21pbmlfcG9sbF9jbGlja2VkJyxcbiAgICBNRUdBTUVOVV9DTElDSzogJ01lZ2FfbWVudV9jbGljaycsXG4gICAgQk1JX0NBTENVTEFUT1JfQ09NUExFVEU6ICdibWkgY2FsY3VsYXRvciBjb21wbGV0ZScsXG4gICAgV0hDX0NBTENVTEFUT1JfQ09NUExFVEU6ICd3aCBjYWxjdWxhdG9yIGNvbXBsZXRlJyxcbiAgICBGQUNUX1JFVkVBTF9RVUlaX1NUQVJURUQ6ICdxdWl6IHN0YXJ0ZWQnLFxuICAgIEZBQ1RfUkVWRUFMX1FVRVNUSU9OX1NIT1dOOiAncXVlc3Rpb24gc2hvd24nLFxuICAgIEZBQ1RfUkVWRUFMX1FVRVNUSU9OX0FOU1dFUkVEOiAncXVpeiBhbnN3ZXJlZCcsXG4gICAgRkFDVF9SRVZFQUxfUVVJWl9FTkRFRDogJ3F1aXogZW5kZWQnLFxuICAgIENIQVRCT1RfQ0xJQ0s6ICdjaGF0Ym90X2NsaWNrJyxcbiAgICBMSVNUX0lURU1fQ0xJQ0s6ICdsaXN0X2l0ZW1fY2xpY2snLFxuICAgIENBUk9VU0VMX1BBSU5fUE9JTlRfQ0xJQ0s6ICdhcnRpY2xlIGZpbHRlciBjbGljaydcbn07XG5cbmNvbnN0IFNUT1JBR0VfS0VZUyA9IHtcbiAgICBCTUlfVjFfUkFOR0VTOiAnYm1pUmFuZ2VzRGF0YVYxJyxcbiAgICBCTUlfVjJfUkFOR0VTOiAnYm1pUmFuZ2VzRGF0YVYyJyxcbiAgICBXSENfUkFOR0VTOiAnd2hjUmFuZ2VzRGF0YSdcbn1cblxuY29uc3QgQ1NTX0NMQVNTRVMgPSB7XG4gICAgQV9TT0NJQUxfU0hBUklOR19UQUc6IFwiYVtkYXRhLXBsYXRmb3JtXVwiLFxuICAgIEFfVEFHOiBcImFcIixcbiAgICBIMl9UQUc6IFwiaDJcIixcbiAgICBTRUFSQ0hfQ09NUE9ORU5UOiBcIi5zZWFyY2ggI25vdm8tc2VhcmNoLWNvbnRhaW5lclwiLFxuICAgIFNFQVJDSF9SRVNVTFRfTlVNQkVSX1NQQU46IFwiLnRvdGFsc2VhcmNocmVzdWx0XCIsXG4gICAgQVJUSUNMRToge1xuICAgICAgICBSQVRJTkc6IFwiLmNtcC1yYXRpbmdzX19zY29yZVwiXG4gICAgfSxcbiAgICBBQ0NPUkRJT046IHtcbiAgICAgICAgQ09NUE9ORU5UOiBcIi5hY2NvcmRpb25cIixcbiAgICAgICAgVElUTEU6ICcuY21wLWFjY29yZGlvbl9fdGl0bGUnXG4gICAgfSxcbiAgICBBRU1fQ09NUE9ORU5UX0RJVl9ERUZBVUxUX0NMQVNTOiBcIi5hZW0tR3JpZENvbHVtblwiLFxuICAgIE5FV1NMRVRURVI6IHtcbiAgICAgICAgTUFJTl9GT1JNOiBcIm1haW4gLmNtcC1uZXdzbGV0dGVyIGZvcm1cIixcbiAgICAgICAgTU9EQUxfRk9STTogXCIuY21wLW1vZGFsX193cmFwcGVyIC5jbXAtbmV3c2xldHRlciBmb3JtXCIsXG4gICAgICAgIEFMTF9GT1JNOiAnLmNtcC1uZXdzbGV0dGVyIGZvcm0nXG4gICAgfSxcbiAgICBVTlNVQlNDUklCRTogJy5jbXAtdW5zdWJzY3JpYmUnLFxuICAgIFNVQk1JVF9CVVRUT046IFwiYnV0dG9uW3R5cGU9XFxcInN1Ym1pdFxcXCJdXCIsXG4gICAgTU9EQUxfV1JBUFBFUjogJy5jbXAtbW9kYWxfX3dyYXBwZXInLFxuICAgIEJNSV9DQUxDVUxBVE9SX1YxOiB7XG4gICAgICAgIENNUF9XUkFQUEVSOiAnLmNtcC1ibWktY2FsY3VsYXRvcicsXG4gICAgICAgIFJFU1VMVF9XUkFQUEVSOiAnLmNtcC1ibWlfX3Jlc3VsdCcsXG4gICAgICAgIFBFUlNPTkFMSVpFX1JFU1VMVF9CVE46ICcuY21wLWJtaV9fYWN0aW9ucyBidXR0b24uY21wLWJtaV9fYnV0dG9uJyxcbiAgICAgICAgQUNUSVZFX1JFU1VMVDogJy5yZXN1bHQgLmNtcC1ibWktcmVzdWx0LmFjdGl2ZScsXG4gICAgICAgIFJBTkdFUzogJy5jbXAtYm1pLWNhbGN1bGF0b3JfX3dyYXBwZXInXG4gICAgfSxcbiAgICBSSVNLX0NBTENVTEFUT1I6IHtcbiAgICAgICAgQ01QX1dSQVBQRVI6ICcuY21wLXJpc2stY2FsY3VsYXRvcicsXG4gICAgICAgIFNQQU5fQk1JX1ZBTFVFOiAnc3Bhbi5jbXAtcmlzay1jYWxjdWxhdG9yX192YWx1ZVtkYXRhLXZhbHVlPVwiYm1pXCJdJyxcbiAgICAgICAgQ0FMQ1VMQVRFX0JUTjogJ2J1dHRvbi5jbXAtcmlzay1jYWxjdWxhdG9yX19jYWxjdWxhdGUnLFxuICAgICAgICBBQ1RJVkVfUkVTVUxUOiAnLmNtcC1yaXNrX19yZXN1bHQuYWN0aXZlJ1xuICAgIH0sXG4gICAgQk1JX0NBTENVTEFUT1JfVjI6IHtcbiAgICAgICAgQ01QX1dSQVBQRVI6ICcuY21wLWJtaS1jYWxjdWxhdG9yLXYyJyxcbiAgICAgICAgUEVSU09OQUxJWkVfUkVTVUxUX0JUTjogJ2J1dHRvbi5jbXAtYm1pW3R5cGU9XCJzdWJtaXRcIl0nLFxuICAgICAgICBBQ1RJVkVfUkVTVUxUOiAnLnJlc3VsdCAuY21wLWJtaS1yZXN1bHQuYWN0aXZlJyxcbiAgICAgICAgUkFOR0VTOiAnLmNtcC1ibWlfX3NlY3Rpb24nXG4gICAgfSxcbiAgICBXQUlTVF9IRUlHSFRfQ0FMQ1VMQVRPUjoge1xuICAgICAgICBGT1JNX0lOUFVUUzogJy5jbXAtd2hjX19mb3JtIGlucHV0JyxcbiAgICAgICAgQUNUSVZFX1JFU1VMVDogJy5yZXN1bHQgLmNtcC13aGMtcmVzdWx0LmFjdGl2ZScsXG4gICAgICAgIFJBTkdFUzogJy5jbXAtd2hjX19zZWN0aW9uJ1xuICAgIH0sXG4gICAgSENQX0xPQ0FUT1I6IHtcbiAgICAgICAgRFJPUERPV046IHtcbiAgICAgICAgICAgIENNUF9XUkFQUEVSOiAnLmNtcC1oY3AtbG9jYXRvcltkYXRhLWxpc3QtdHlwZT1cInNlbGVjdE9wdGlvbnNcIl0nLFxuICAgICAgICAgICAgRklORF9DVEE6ICdhLmNtcC1oY3AtbG9jYXRvcl9faW5mby1maW5kLWNvdW50cnktY3RhJ1xuICAgICAgICB9LFxuICAgICAgICBMSVNUX09GX0xJTktTOiB7XG4gICAgICAgICAgICBDTVBfV1JBUFBFUjogJy5jbXAtaGNwLWxvY2F0b3JbZGF0YS1saXN0LXR5cGU9XCJsaXN0Q291bnRyaWVzXCJdJyxcbiAgICAgICAgICAgIExJTktTX1NFTEVDVE9SOiAnLmNtcC1oY3AtbG9jYXRvcltkYXRhLWxpc3QtdHlwZT1cImxpc3RDb3VudHJpZXNcIl0gLmNtcC1oY3AtbG9jYXRvcl9faW5mby1maW5kLWNvdW50cnkgYSdcbiAgICAgICAgfSxcbiAgICAgICAgTElOSzoge1xuICAgICAgICAgICAgTElOS19TRUxFQ1RPUjogJ2EuaGNwLWxvY2F0b3ItbGluaydcbiAgICAgICAgfSxcbiAgICAgICAgSEVBTFRIX1BBUlRORVI6ICdoY3AtbG9jYXRvci1saW5rLS1laGVhbHRoLXBhcnRuZXInLFxuICAgICAgICBFTUJFRDoge1xuICAgICAgICAgICAgQlVUVE9OX1NFTEVDVE9SOiAnI2hlLWZpbmQtYW5kLWJvb2stYnV0dG9uJyxcbiAgICAgICAgICAgIFNDUklQVF9TRUxFQ1RPUjogJ3NjcmlwdFtkYXRhLWVtYmVkLWhjcC1sb2NhdG9yXSdcbiAgICAgICAgfVxuICAgIH0sXG4gICAgSENQX1NFQVJDSF9XSURHRVQ6IHtcbiAgICAgICAgV0lER0VUX0VMRU1FTlQ6ICdoY3Atc2VhcmNoLXdpZGdldCcsXG4gICAgICAgIFdJREdFVF9GTE9BVElOR19DT05UQUlORVI6ICcuaGNwc3ctZmxvYXRpbmctY29udGFpbmVyJyxcbiAgICAgICAgRklORF9CVVRUT046ICcuaGNwc3ctZmxvYXRpbmctYnV0dG9uJyxcbiAgICAgICAgQ0xPU0VfQlVUVE9OOiAnLmhjcHN3LWNsb3NlLWJ1dHRvbicsXG4gICAgICAgIFNVQk1JVF9CVVRUT046ICcuaGNwc3ctYnV0dG9uJyxcbiAgICAgICAgU0VBUkNIX0lOUFVUOiAnLmhjcHN3LXNlYXJjaF9faW5wdXQnXG4gICAgfSxcbiAgICBJTkZPX0JBTk5FUjoge1xuICAgICAgICBMSU5LX1NFTEVDVE9SOiAnYS5oY3AtbG9jYXRvci1pbmZvYmFubmVyLWxpbmsnLFxuICAgICAgICBFSEVBTFRIX1BBUlRORVJfQ0xBU1M6ICdoY3AtbG9jYXRvci1pbmZvYmFubmVyLWxpbmstLWVoZWFsdGgtcGFydG5lcidcbiAgICB9LFxuICAgIE1JTklfUE9MTDoge1xuICAgICAgICBDT05UQUlORVI6ICcubWluaXBvbGwtcXVlc3Rpb24tY29udGFpbmVyJyxcbiAgICAgICAgUVVFU1RJT046ICcubWluaXBvbGwtcXVlc3Rpb24nLFxuICAgICAgICB
118BTlNXRVI6ICcubWluaXBvbGwtYW5zd2VyIGJ1dHRvbidcbiAgICB9LFxuICAgIEZBQ1RfUkVWRUFMOiB7XG4gICAgICAgIENPTVBPTkVOVDogJy5jbXAtZmFjdC1yZXZlYWwnLFxuICAgICAgICBTVEFSVF9CVVRUT046ICcuY21wLWZhY3QtcmV2ZWFsX19zdGFydCcsXG4gICAgICAgIFJFVkVBTF9CVVRUT046ICcuY21wLWZhY3QtcmV2ZWFsX19yZXZlYWwnLFxuICAgICAgICBRVUVTVElPTjogJy5jbXAtcXVpel9fcXVlc3Rpb24nLFxuICAgICAgICBQQUdFOiAnLmNtcC1xdWl6X19wYWdlJyxcbiAgICAgICAgVElUTEU6ICcuY21wLWZhY3QtcmV2ZWFsIFtkYXRhLXBhZ2U9XCIwXCJdIFtkYXRhLWNtcC1pcz1cInRpdGxlXCJdJ1xuICAgIH0sXG4gICAgQ0FST1VTRUw6IHtcbiAgICAgICAgUEFJTl9QT0lOVDogJy5jb250ZW50cGFnZXRlYXNlci0tcGFpbnBvaW50IC5jYXJvdXNlbF9fdGFiYnV0dG9uJ1xuICAgIH1cbn07XG5cbmNvbnN0IENVU1RPTV9BVFRSSUJVVEVTID0ge1xuICAgIFBVUlBPU0U6ICdbZGF0YS1wdXJwb3NlLWVuYWJsZWQ9XCJ0cnVlXCJdJyxcbiAgICBQVVJQT1NFX0lNQUdFOiAnW2RhdGEtcHVycG9zZS1pbWFnZS1lbmFibGVkPVwidHJ1ZVwiXScsXG4gICAgUFVSUE9TRV9JTkZPQkFOTkVSOiAnW2RhdGEtcHVycG9zZS1pbmZvYmFubmVyLWVuYWJsZWQ9XCJ0cnVlXCJdJyxcbiAgICBQVVJQT1NFX0xJU1RfSVRFTTogJ1tkYXRhLXB1cnBvc2UtbGlzdC1lbmFibGVkXScsXG4gICAgVEVYVF9MSU5LUzogJ1tkYXRhLXRleHQtbGluay10cmFja2luZy1lbmFibGVkPVwidHJ1ZVwiXScsXG4gICAgRE9XTkxPQURfQlVUVE9OX0NNUDogJ1tkYXRhLWJ1dHRvbi1hc3NldC1kb3dubG9hZF0nLFxuICAgIERPV05MT0FEX0lNQUdFX0NNUDogJ1tkYXRhLWltYWdlLWFzc2V0LWRvd25sb2FkXScsXG4gICAgRE9XTkxPQURfSU5GT0JBTk5FUl9DTVA6ICdbZGF0YS1pbmZvYmFubmVyLWFzc2V0LWRvd25sb2FkXScsXG4gICAgRE9XTkxPQURfTElTVF9JVEVNOiAnW2RhdGEtbGlzdC1hc3NldC1kb3dubG9hZF0nLFxuICAgIFBVUlBPU0VfTUVHQU1FTlU6ICdbZGF0YS1wdXJwb3NlLW1lZ2FtZW51XScsXG4gICAgQ0hBVEJPVDogJ1tkYXRhLWNoYXRib3QtdHJhY2tpbmddJyxcbiAgICBFSEVBTFRIX1BBUlRORVJfTUVHQU1FTlU6ICdbZGF0YS1laGVhbHRoLXBhcnRuZXItdHJhY2tpbmddJyxcbn07XG5cbmNvbnN0IENPTU1PTl9DT05TVEFOVFMgPSB7XG4gICAgUERGX0VYVEVOU0lPTjogXCIucGRmXCIsXG4gICAgU0VBUkNIX1FVRVJZX1BBUkFNRVRFUjogXCJxPVwiLFxuICAgIEFORF9QQVJBTUVURVI6IFwiJlwiLFxuICAgIEZVTkNUSU9OOiBcImZ1bmN0aW9uXCIsXG4gICAgVU5ERUZJTkVEOiBcInVuZGVmaW5lZFwiLFxuICAgIFpFUk86IFwiemVyb1wiLFxuICAgIElOUFVUOiBcImlucHV0XCIsXG4gICAgQUVNX0NPTVBPTkVOVF9OQU1FOiB7XG4gICAgICAgIFNIQVJJTkc6IFwic2hhcmluZ1wiXG4gICAgfSxcbiAgICBDVVNUT01fRVZFTlRTX1BBUkFNRVRFUlM6IHtcbiAgICAgICAgUEFHRV9TSEFSRTogJ3NoYXJlLXBhZ2UnXG4gICAgfVxufTtcblxuY29uc3QgSkFWQVNDUklQVF9FVkVOVFMgPSB7XG4gICAgQ0xJQ0s6IFwiY2xpY2tcIixcbiAgICBDSEFOR0U6ICdjaGFuZ2UnLFxuICAgIFNDUk9MTDogJ3Njcm9sbCcsXG4gICAgU1VCTUlUOiAnc3VibWl0J1xufTtcblxuY29uc3QgVVJMX1BBUkFNU19DT05TVEFOVFMgPSB7XG4gICAgQk1JX1ZBTFVFX1YxOiAnYm1pJyxcbiAgICBCTUlfVkFMVUVfVjI6ICdibWlWYWwnLFxuICAgIFdIQ19WQUxVRTogJ3doY1ZhbCcsXG4gICAgQUdFOiAnYWdlJyxcbiAgICBHRU5ERVI6ICdnZW5kZXInLFxuICAgIEVUSE5JQ0lUWTogJ2V0aG5pY2l0eSdcbn1cblxuZXhwb3J0IHtcbiAgICBBTkFMWVRJQ1NfSU5URVJOQUxfRVZFTlRTLFxuICAgIENTU19DTEFTU0VTLFxuICAgIENVU1RPTV9BVFRSSUJVVEVTLFxuICAgIENPTU1PTl9DT05TVEFOVFMsXG4gICAgSkFWQVNDUklQVF9FVkVOVFMsXG4gICAgVVJMX1BBUkFNU19DT05TVEFOVFMsXG4gICAgQU5BTFlUSUNTX0NVU1RPTV9FVkVOVFMsXG4gICAgU1RPUkFHRV9LRVlTXG59XG4iLCJpbXBvcnQge0NvbnN0YW50IGFzIEMsIGNoZWNrSWZDb29raWUsIGNsb3NlTW9kYWwsIGdldERhdGFDb29raWUsIHNhdmVDb29raWV9IGZyb20gJy4uL2hlbHBlcnMnXG5cbi8vIE9uIENvb2tpZSBQcmVzZW50IFBvcHVwXG5jb25zdCBPbkNvb2tpZVByZXNlbnQgPSAoKSA9PiB7XG5cblx0Y29uc3QgY29uZmlybWF0aW9uRm9ybSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoQy5DT09LSUVfRk9STSk7XG5cblx0Y29uc3QgaW5pdCA9IG1vZGFsID0+IHtcblxuXHRcdGNvbnN0IGNvb2tpZU5hbWUgPSBnZXREYXRhQ29va2llKG1vZGFsKTtcblx0XHRjaGVja0lmQ29va2llKG1vZGFsLCBjb29raWVOYW1lKTtcblxuXHRcdGNvbmZpcm1hdGlvbkZvcm0/LmFkZEV2ZW50TGlzdGVuZXIoXCJzdWJtaXRcIiwgZXZ0ID0+IHtcblx0XHRcdGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0c2F2ZUNvb2tpZShjb29raWVOYW1lKTtcblx0XHRcdGNsb3NlTW9kYWwobW9kYWwpO1xuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRpbml0XG5cdH07XG59XG5leHBvcnQge09uQ29va2llUHJlc2VudH0iLCJpbXBvcnQge0NvbnN0YW50IGFzIEMsIGNsb3NlTW9kYWx9IGZyb20gJy4uL2hlbHBlcnMnXG5cbi8vIE9uIFBhZ2UgTG9hZCBQb3B1cFxuY29uc3QgT25QYWdlTG9hZFBvcHVwID0gKCkgPT4ge1xuXHRjb25zdCBtb2RhbExpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKEMuTU9EQUxfQ1RBX0JVVFRPTik7XG5cblx0Y29uc3QgYWNjZXB0Q29va2llID0gKG1vZGFsLCBpdGVtKSA9PiB7XG5cdFx0aXRlbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGV2dCA9PiB7XG5cdFx0XHRldnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGNsb3NlTW9kYWwobW9kYWwpO1xuXHRcdH0pXG5cdH1cblx0Y29uc3QgaW5pdCA9IG1vZGFsID0+IHtcblx0XHRtb2RhbC5jbGFzc0xpc3QuYWRkKEMuTU9EQUxfT1BFTik7XG5cdFx0Wy4uLm1vZGFsTGlua10uZm9yRWFjaChpdGVtID0+IHtcblx0XHRcdGFjY2VwdENvb2tpZShtb2R
118hbCwgaXRlbSk7XG5cdFx0fSlcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0aW5pdFxuXHR9XG59XG5leHBvcnQge09uUGFnZUxvYWRQb3B1cH0iLCIvKipcbiAqIFNTUiBXaW5kb3cgMy4wLjBcbiAqIEJldHRlciBoYW5kbGluZyBmb3Igd2luZG93IG9iamVjdCBpbiBTU1IgZW52aXJvbm1lbnRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2xpbWl0czR3ZWIvc3NyLXdpbmRvd1xuICpcbiAqIENvcHlyaWdodCAyMDIwLCBWbGFkaW1pciBLaGFybGFtcGlkaVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVFxuICpcbiAqIFJlbGVhc2VkIG9uOiBOb3ZlbWJlciA5LCAyMDIwXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXBhcmFtLXJlYXNzaWduICovXG5mdW5jdGlvbiBpc09iamVjdChvYmopIHtcbiAgICByZXR1cm4gKG9iaiAhPT0gbnVsbCAmJlxuICAgICAgICB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAnY29uc3RydWN0b3InIGluIG9iaiAmJlxuICAgICAgICBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdCk7XG59XG5mdW5jdGlvbiBleHRlbmQodGFyZ2V0LCBzcmMpIHtcbiAgICBpZiAodGFyZ2V0ID09PSB2b2lkIDApIHsgdGFyZ2V0ID0ge307IH1cbiAgICBpZiAoc3JjID09PSB2b2lkIDApIHsgc3JjID0ge307IH1cbiAgICBPYmplY3Qua2V5cyhzcmMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAodHlwZW9mIHRhcmdldFtrZXldID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgICAgIHRhcmdldFtrZXldID0gc3JjW2tleV07XG4gICAgICAgIGVsc2UgaWYgKGlzT2JqZWN0KHNyY1trZXldKSAmJlxuICAgICAgICAgICAgaXNPYmplY3QodGFyZ2V0W2tleV0pICYmXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhzcmNba2V5XSkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZXh0ZW5kKHRhcmdldFtrZXldLCBzcmNba2V5XSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxudmFyIHNzckRvY3VtZW50ID0ge1xuICAgIGJvZHk6IHt9LFxuICAgIGFkZEV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uICgpIHsgfSxcbiAgICByZW1vdmVFdmVudExpc3RlbmVyOiBmdW5jdGlvbiAoKSB7IH0sXG4gICAgYWN0aXZlRWxlbWVudDoge1xuICAgICAgICBibHVyOiBmdW5jdGlvbiAoKSB7IH0sXG4gICAgICAgIG5vZGVOYW1lOiAnJyxcbiAgICB9LFxuICAgIHF1ZXJ5U2VsZWN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICBxdWVyeVNlbGVjdG9yQWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9LFxuICAgIGdldEVsZW1lbnRCeUlkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgY3JlYXRlRXZlbnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGluaXRFdmVudDogZnVuY3Rpb24gKCkgeyB9LFxuICAgICAgICB9O1xuICAgIH0sXG4gICAgY3JlYXRlRWxlbWVudDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgICAgY2hpbGROb2RlczogW10sXG4gICAgICAgICAgICBzdHlsZToge30sXG4gICAgICAgICAgICBzZXRBdHRyaWJ1dGU6IGZ1bmN0aW9uICgpIHsgfSxcbiAgICAgICAgICAgIGdldEVsZW1lbnRzQnlUYWdOYW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIGNyZWF0ZUVsZW1lbnROUzogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfSxcbiAgICBpbXBvcnROb2RlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgbG9jYXRpb246IHtcbiAgICAgICAgaGFzaDogJycsXG4gICAgICAgIGhvc3Q6ICcnLFxuICAgICAgICBob3N0bmFtZTogJycsXG4gICAgICAgIGhyZWY6ICcnLFxuICAgICAgICBvcmlnaW46ICcnLFxuICAgICAgICBwYXRobmFtZTogJycsXG4gICAgICAgIHByb3RvY29sOiAnJyxcbiAgICAgICAgc2VhcmNoOiAnJyxcbiAgICB9LFxufTtcbmZ1bmN0aW9uIGdldERvY3VtZW50KCkge1xuICAgIHZhciBkb2MgPSB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnID8gZG9jdW1lbnQgOiB7fTtcbiAgICBleHRlbmQoZG9jLCBzc3JEb2N1bWVudCk7XG4gICAgcmV0dXJuIGRvYztcbn1cblxudmFyIHNzcldpbmRvdyA9IHtcbiAgICBkb2N1bWVudDogc3NyRG9jdW1lbnQsXG4gICAgbmF2aWdhdG9yOiB7XG4gICAgICAgIHVzZXJBZ2VudDogJycsXG4gICAgfSxcbiAgICBsb2NhdGlvbjoge1xuICAgICAgICBoYXNoOiAnJyxcbiAgICAgICAgaG9zdDogJycsXG4gICAgICAgIGhvc3RuYW1lOiAnJyxcbiAgICAgICAgaHJlZjogJycsXG4gICAgICAgIG9yaWdpbjogJycsXG4gICAgICAgIHBhdGhuYW1lOiAnJyxcbiAgICAgICAgcHJvdG9jb2w6ICcnLFxuICAgICAgICBzZWFyY2g6ICcnLFxuICAgIH0sXG4gICAgaGlzdG9yeToge1xuICAgICAgICByZXBsYWNlU3RhdGU6IGZ1bmN0aW9uICgpIHsgfSxcbiAgICAgICAgcHVzaFN0YXRlOiBmdW5jdGlvbiAoKSB7IH0sXG4gICAgICAgIGdvOiBmdW5jdGlvbiAoKSB7IH0sXG4gICAgICAgIGJhY2s6IGZ1bmN0aW9uICgpIHsgfSxcbiAgICB9LFxuICAgIEN1c3RvbUV2ZW50OiBmdW5jdGlvbiBDdXN0b21FdmVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBhZGRFdmVudExpc3RlbmVyOiBmdW5jdGlvbiAoKSB7IH0sXG4gICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24gKCkgeyB9LFxuICAgIGdldENvbXB1dGVkU3R5bGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGdldFByb3BlcnR5VmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH0sXG4gICAgSW1hZ2U6IGZ1bmN0aW9uICgpIHsgfSxcbiAgICBEYXRlOiBmdW5jdGlvbiAoKSB7IH0sXG4gICAgc2NyZWVuOiB7fSxcbiAgICBzZXRUaW
1181lb3V0OiBmdW5jdGlvbiAoKSB7IH0sXG4gICAgY2xlYXJUaW1lb3V0OiBmdW5jdGlvbiAoKSB7IH0sXG4gICAgbWF0Y2hNZWRpYTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfSxcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWU6IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoY2FsbGJhY2ssIDApO1xuICAgIH0sXG4gICAgY2FuY2VsQW5pbWF0aW9uRnJhbWU6IGZ1bmN0aW9uIChpZCkge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcbiAgICB9LFxufTtcbmZ1bmN0aW9uIGdldFdpbmRvdygpIHtcbiAgICB2YXIgd2luID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiB7fTtcbiAgICBleHRlbmQod2luLCBzc3JXaW5kb3cpO1xuICAgIHJldHVybiB3aW47XG59XG5cbmV4cG9ydCB7IGV4dGVuZCwgZ2V0RG9jdW1lbnQsIGdldFdpbmRvdywgc3NyRG9jdW1lbnQsIHNzcldpbmRvdyB9O1xuIiwiLyoqXG4gKiBEb203IDMuMC4wXG4gKiBNaW5pbWFsaXN0aWMgSmF2YVNjcmlwdCBsaWJyYXJ5IGZvciBET00gbWFuaXB1bGF0aW9uLCB3aXRoIGEgalF1ZXJ5LWNvbXBhdGlibGUgQVBJXG4gKiBodHRwczovL2ZyYW1ld29yazcuaW8vZG9jcy9kb203Lmh0bWxcbiAqXG4gKiBDb3B5cmlnaHQgMjAyMCwgVmxhZGltaXIgS2hhcmxhbXBpZGlcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBNSVRcbiAqXG4gKiBSZWxlYXNlZCBvbjogTm92ZW1iZXIgOSwgMjAyMFxuICovXG5pbXBvcnQgeyBnZXRXaW5kb3csIGdldERvY3VtZW50IH0gZnJvbSAnc3NyLXdpbmRvdyc7XG5cbmZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzcztcbn1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9O1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG5cbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlO1xuICBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlO1xuXG4gIHRyeSB7XG4gICAgRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChEYXRlLCBbXSwgZnVuY3Rpb24gKCkge30pKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgaWYgKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSkge1xuICAgIF9jb25zdHJ1Y3QgPSBSZWZsZWN0LmNvbnN0cnVjdDtcbiAgfSBlbHNlIHtcbiAgICBfY29uc3RydWN0ID0gZnVuY3Rpb24gX2NvbnN0cnVjdChQYXJlbnQsIGFyZ3MsIENsYXNzKSB7XG4gICAgICB2Y
118XIgYSA9IFtudWxsXTtcbiAgICAgIGEucHVzaC5hcHBseShhLCBhcmdzKTtcbiAgICAgIHZhciBDb25zdHJ1Y3RvciA9IEZ1bmN0aW9uLmJpbmQuYXBwbHkoUGFyZW50LCBhKTtcbiAgICAgIHZhciBpbnN0YW5jZSA9IG5ldyBDb25zdHJ1Y3RvcigpO1xuICAgICAgaWYgKENsYXNzKSBfc2V0UHJvdG90eXBlT2YoaW5zdGFuY2UsIENsYXNzLnByb3RvdHlwZSk7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBfY29uc3RydWN0LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG59XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZUZ1bmN0aW9uKGZuKSB7XG4gIHJldHVybiBGdW5jdGlvbi50b1N0cmluZy5jYWxsKGZuKS5pbmRleE9mKFwiW25hdGl2ZSBjb2RlXVwiKSAhPT0gLTE7XG59XG5cbmZ1bmN0aW9uIF93cmFwTmF0aXZlU3VwZXIoQ2xhc3MpIHtcbiAgdmFyIF9jYWNoZSA9IHR5cGVvZiBNYXAgPT09IFwiZnVuY3Rpb25cIiA/IG5ldyBNYXAoKSA6IHVuZGVmaW5lZDtcblxuICBfd3JhcE5hdGl2ZVN1cGVyID0gZnVuY3Rpb24gX3dyYXBOYXRpdmVTdXBlcihDbGFzcykge1xuICAgIGlmIChDbGFzcyA9PT0gbnVsbCB8fCAhX2lzTmF0aXZlRnVuY3Rpb24oQ2xhc3MpKSByZXR1cm4gQ2xhc3M7XG5cbiAgICBpZiAodHlwZW9mIENsYXNzICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIF9jYWNoZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgaWYgKF9jYWNoZS5oYXMoQ2xhc3MpKSByZXR1cm4gX2NhY2hlLmdldChDbGFzcyk7XG5cbiAgICAgIF9jYWNoZS5zZXQoQ2xhc3MsIFdyYXBwZXIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIFdyYXBwZXIoKSB7XG4gICAgICByZXR1cm4gX2NvbnN0cnVjdChDbGFzcywgYXJndW1lbnRzLCBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3IpO1xuICAgIH1cblxuICAgIFdyYXBwZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDbGFzcy5wcm90b3R5cGUsIHtcbiAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgIHZhbHVlOiBXcmFwcGVyLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBfc2V0UHJvdG90eXBlT2YoV3JhcHBlciwgQ2xhc3MpO1xuICB9O1xuXG4gIHJldHVybiBfd3JhcE5hdGl2ZVN1cGVyKENsYXNzKTtcbn1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn1cblxuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi9cbmZ1bmN0aW9uIG1ha2VSZWFjdGl2ZShvYmopIHtcbiAgdmFyIHByb3RvID0gb2JqLl9fcHJvdG9fXztcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgJ19fcHJvdG9fXycsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiBwcm90bztcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gc2V0KHZhbHVlKSB7XG4gICAgICBwcm90by5fX3Byb3RvX18gPSB2YWx1ZTtcbiAgICB9XG4gIH0pO1xufVxuXG52YXIgRG9tNyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0FycmF5KSB7XG4gIF9pbmhlcml0c0xvb3NlKERvbTcsIF9BcnJheSk7XG5cbiAgZnVuY3Rpb24gRG9tNyhpdGVtcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX0FycmF5LmNhbGwuYXBwbHkoX0FycmF5LCBbdGhpc10uY29uY2F0KGl0ZW1zKSkgfHwgdGhpcztcbiAgICBtYWtlUmVhY3RpdmUoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBEb203O1xufSggLyojX19QVVJFX18qL193cmFwTmF0aXZlU3VwZXIoQXJyYXkpKTtcblxuZnVuY3Rpb24gYXJyYXlGbGF0KGFycikge1xuICBpZiAoYXJyID09PSB2b2lkIDApIHtcbiAgICBhcnIgPSBbXTtcbiAgfVxuXG4gIHZhciByZXMgPSBbXTtcbiAgYXJyLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZWwpKSB7XG4gICAgICByZXMucHVzaC5hcHBseShyZXMsIGFycmF5RmxhdChlbCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMucHVzaChlbCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlcztcbn1cbmZ1bmN0aW9uIGFycmF5RmlsdGVyKGFyciwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbChhcnIsIGNhbGxiYWNrKTtcbn1cbmZ1bmN0aW9uIGFycmF5VW5pcXVlKGFycikge1xuICB2YXIgdW5pcXVlQXJyYXkgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGlmICh1bmlxdWVBcnJheS5pbmRleE9mKGFycltpXSkgPT09IC0xKSB1bmlxdWVBcnJheS5wdXNoKGFycltpXSk7XG4gIH1cblxuICByZXR1cm4gdW5pcXVlQXJyYXk7XG59XG5mdW5jdGlvbiB0b0NhbWVsQ2FzZShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLy0oLikvZywgZnVuY3Rpb24gKG1hdGNoLCBncm91cCkge1xuICAgIHJldHVybiBncm91cC50b1VwcGVyQ2FzZSgpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcXNhKHNlbGVjdG9yLCBjb250ZXh0KSB7XG4gIGlmICh0eXBlb2Ygc2VsZWN0b3IgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIFtzZWxlY3Rvcl07XG4gIH1cblxuICB2YXIgYSA9IFtdO1xuICB2YXIgcmVzID0gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHJlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGEucHVzaChyZXNbaV0pO1xuICB9XG5cbiAgcmV0dXJuIGE7XG59XG5cbmZ1bmN0aW9uICQoc2VsZWN0b3IsIGNvbnRleHQpIHtcbiAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICB2YXIgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICB2YXIgYXJyID0gW107XG5cbiAgaWYgKCFjb250ZXh0ICYmIHNlbGVjdG9yIGluc3RhbmNlb2YgRG9tNykge1xuICAgIHJldHVybi
118BzZWxlY3RvcjtcbiAgfVxuXG4gIGlmICghc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gbmV3IERvbTcoYXJyKTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc2VsZWN0b3IgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFyIGh0bWwgPSBzZWxlY3Rvci50cmltKCk7XG5cbiAgICBpZiAoaHRtbC5pbmRleE9mKCc8JykgPj0gMCAmJiBodG1sLmluZGV4T2YoJz4nKSA+PSAwKSB7XG4gICAgICB2YXIgdG9DcmVhdGUgPSAnZGl2JztcbiAgICAgIGlmIChodG1sLmluZGV4T2YoJzxsaScpID09PSAwKSB0b0NyZWF0ZSA9ICd1bCc7XG4gICAgICBpZiAoaHRtbC5pbmRleE9mKCc8dHInKSA9PT0gMCkgdG9DcmVhdGUgPSAndGJvZHknO1xuICAgICAgaWYgKGh0bWwuaW5kZXhPZignPHRkJykgPT09IDAgfHwgaHRtbC5pbmRleE9mKCc8dGgnKSA9PT0gMCkgdG9DcmVhdGUgPSAndHInO1xuICAgICAgaWYgKGh0bWwuaW5kZXhPZignPHRib2R5JykgPT09IDApIHRvQ3JlYXRlID0gJ3RhYmxlJztcbiAgICAgIGlmIChodG1sLmluZGV4T2YoJzxvcHRpb24nKSA9PT0gMCkgdG9DcmVhdGUgPSAnc2VsZWN0JztcbiAgICAgIHZhciB0ZW1wUGFyZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0b0NyZWF0ZSk7XG4gICAgICB0ZW1wUGFyZW50LmlubmVySFRNTCA9IGh0bWw7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGVtcFBhcmVudC5jaGlsZE5vZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGFyci5wdXNoKHRlbXBQYXJlbnQuY2hpbGROb2Rlc1tpXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGFyciA9IHFzYShzZWxlY3Rvci50cmltKCksIGNvbnRleHQgfHwgZG9jdW1lbnQpO1xuICAgIH0gLy8gYXJyID0gcXNhKHNlbGVjdG9yLCBkb2N1bWVudCk7XG5cbiAgfSBlbHNlIGlmIChzZWxlY3Rvci5ub2RlVHlwZSB8fCBzZWxlY3RvciA9PT0gd2luZG93IHx8IHNlbGVjdG9yID09PSBkb2N1bWVudCkge1xuICAgIGFyci5wdXNoKHNlbGVjdG9yKTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHNlbGVjdG9yKSkge1xuICAgIGlmIChzZWxlY3RvciBpbnN0YW5jZW9mIERvbTcpIHJldHVybiBzZWxlY3RvcjtcbiAgICBhcnIgPSBzZWxlY3RvcjtcbiAgfVxuXG4gIHJldHVybiBuZXcgRG9tNyhhcnJheVVuaXF1ZShhcnIpKTtcbn1cblxuJC5mbiA9IERvbTcucHJvdG90eXBlO1xuXG5mdW5jdGlvbiBhZGRDbGFzcygpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGNsYXNzZXMgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgY2xhc3Nlc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHZhciBjbGFzc05hbWVzID0gYXJyYXlGbGF0KGNsYXNzZXMubWFwKGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuIGMuc3BsaXQoJyAnKTtcbiAgfSkpO1xuICB0aGlzLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7XG4gICAgdmFyIF9lbCRjbGFzc0xpc3Q7XG5cbiAgICAoX2VsJGNsYXNzTGlzdCA9IGVsLmNsYXNzTGlzdCkuYWRkLmFwcGx5KF9lbCRjbGFzc0xpc3QsIGNsYXNzTmFtZXMpO1xuICB9KTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNsYXNzKCkge1xuICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGNsYXNzZXMgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICBjbGFzc2VzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gIH1cblxuICB2YXIgY2xhc3NOYW1lcyA9IGFycmF5RmxhdChjbGFzc2VzLm1hcChmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiBjLnNwbGl0KCcgJyk7XG4gIH0pKTtcbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uIChlbCkge1xuICAgIHZhciBfZWwkY2xhc3NMaXN0MjtcblxuICAgIChfZWwkY2xhc3NMaXN0MiA9IGVsLmNsYXNzTGlzdCkucmVtb3ZlLmFwcGx5KF9lbCRjbGFzc0xpc3QyLCBjbGFzc05hbWVzKTtcbiAgfSk7XG4gIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiB0b2dnbGVDbGFzcygpIHtcbiAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCBjbGFzc2VzID0gbmV3IEFycmF5KF9sZW4zKSwgX2tleTMgPSAwOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7XG4gICAgY2xhc3Nlc1tfa2V5M10gPSBhcmd1bWVudHNbX2tleTNdO1xuICB9XG5cbiAgdmFyIGNsYXNzTmFtZXMgPSBhcnJheUZsYXQoY2xhc3Nlcy5tYXAoZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gYy5zcGxpdCgnICcpO1xuICB9KSk7XG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHtcbiAgICBjbGFzc05hbWVzLmZvckVhY2goZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xuICAgICAgZWwuY2xhc3NMaXN0LnRvZ2dsZShjbGFzc05hbWUpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaGFzQ2xhc3MoKSB7XG4gIGZvciAodmFyIF9sZW40ID0gYXJndW1lbnRzLmxlbmd0aCwgY2xhc3NlcyA9IG5ldyBBcnJheShfbGVuNCksIF9rZXk0ID0gMDsgX2tleTQgPCBfbGVuNDsgX2tleTQrKykge1xuICAgIGNsYXNzZXNbX2tleTRdID0gYXJndW1lbnRzW19rZXk0XTtcbiAgfVxuXG4gIHZhciBjbGFzc05hbWVzID0gYXJyYXlGbGF0KGNsYXNzZXMubWFwKGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuIGMuc3BsaXQoJyAnKTtcbiAgfSkpO1xuICByZXR1cm4gYXJyYXlGaWx0ZXIodGhpcywgZnVuY3Rpb24gKGVsKSB7XG4gICAgcmV0dXJuIGNsYXNzTmFtZXMuZmlsdGVyKGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcbiAgICAgIHJldHVybiBlbC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKTtcbiAgICB9KS5sZW5ndGggPiAwO1xuICB9KS5sZW5ndGggPiAwO1xufVxuXG5mdW5jdGlvbiBhdHRyKGF0dHJzLCB2YWx1ZSkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSAmJiB0eXBlb2YgYXR0cnMgPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gR2V0IGF0dHJcbiAgICBpZiAodGhpc1swXSkgcmV0dXJuIHRoaXNbMF0uZ2V0QXR0cmlidXRlKGF0dHJzKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9IC8vIFNldCBhdHRyc1xuXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICAgIC8vIFN0cmluZ1xuICAgICAgdGhpc1tpXS5zZXRBdHRyaWJ1dGUoYXR0cnMsIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT2JqZWN0XG4gICAgICBmb3IgKHZhciBhdHRyTmFtZSBpbiBhdHRycykge1xuICAgICAgICB0aGlzW2ldW2F0dHJOYW1lXSA9IGF0dHJzW2F0dHJOYW1lXTtcbiAgICAgICAgdGhpc1tpXS5zZXRBdHRyaWJ1dGUoYXR0ck5hbWUsIGF0dHJzW2F0dHJOYW1lXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUF0dHIoYXR0cikge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICB0aGlzW2ldLnJlbW92ZUF0dHJpYnV0ZShhdHRyKTtcbiAgfVxuXG4gIHJldHVybi
118B0aGlzO1xufVxuXG5mdW5jdGlvbiBwcm9wKHByb3BzLCB2YWx1ZSkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSAmJiB0eXBlb2YgcHJvcHMgPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gR2V0IHByb3BcbiAgICBpZiAodGhpc1swXSkgcmV0dXJuIHRoaXNbMF1bcHJvcHNdO1xuICB9IGVsc2Uge1xuICAgIC8vIFNldCBwcm9wc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgLy8gU3RyaW5nXG4gICAgICAgIHRoaXNbaV1bcHJvcHNdID0gdmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBPYmplY3RcbiAgICAgICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gcHJvcHMpIHtcbiAgICAgICAgICB0aGlzW2ldW3Byb3BOYW1lXSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIGRhdGEoa2V5LCB2YWx1ZSkge1xuICB2YXIgZWw7XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBlbCA9IHRoaXNbMF07XG4gICAgaWYgKCFlbCkgcmV0dXJuIHVuZGVmaW5lZDsgLy8gR2V0IHZhbHVlXG5cbiAgICBpZiAoZWwuZG9tN0VsZW1lbnREYXRhU3RvcmFnZSAmJiBrZXkgaW4gZWwuZG9tN0VsZW1lbnREYXRhU3RvcmFnZSkge1xuICAgICAgcmV0dXJuIGVsLmRvbTdFbGVtZW50RGF0YVN0b3JhZ2Vba2V5XTtcbiAgICB9XG5cbiAgICB2YXIgZGF0YUtleSA9IGVsLmdldEF0dHJpYnV0ZShcImRhdGEtXCIgKyBrZXkpO1xuXG4gICAgaWYgKGRhdGFLZXkpIHtcbiAgICAgIHJldHVybiBkYXRhS2V5O1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0gLy8gU2V0IHZhbHVlXG5cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBlbCA9IHRoaXNbaV07XG4gICAgaWYgKCFlbC5kb203RWxlbWVudERhdGFTdG9yYWdlKSBlbC5kb203RWxlbWVudERhdGFTdG9yYWdlID0ge307XG4gICAgZWwuZG9tN0VsZW1lbnREYXRhU3RvcmFnZVtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gcmVtb3ZlRGF0YShrZXkpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgdmFyIGVsID0gdGhpc1tpXTtcblxuICAgIGlmIChlbC5kb203RWxlbWVudERhdGFTdG9yYWdlICYmIGVsLmRvbTdFbGVtZW50RGF0YVN0b3JhZ2Vba2V5XSkge1xuICAgICAgZWwuZG9tN0VsZW1lbnREYXRhU3RvcmFnZVtrZXldID0gbnVsbDtcbiAgICAgIGRlbGV0ZSBlbC5kb203RWxlbWVudERhdGFTdG9yYWdlW2tleV07XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGRhdGFzZXQoKSB7XG4gIHZhciBlbCA9IHRoaXNbMF07XG4gIGlmICghZWwpIHJldHVybiB1bmRlZmluZWQ7XG4gIHZhciBkYXRhc2V0ID0ge307IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICBpZiAoZWwuZGF0YXNldCkge1xuICAgIGZvciAodmFyIGRhdGFLZXkgaW4gZWwuZGF0YXNldCkge1xuICAgICAgZGF0YXNldFtkYXRhS2V5XSA9IGVsLmRhdGFzZXRbZGF0YUtleV07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWwuYXR0cmlidXRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgdmFyIF9hdHRyID0gZWwuYXR0cmlidXRlc1tpXTtcblxuICAgICAgaWYgKF9hdHRyLm5hbWUuaW5kZXhPZignZGF0YS0nKSA+PSAwKSB7XG4gICAgICAgIGRhdGFzZXRbdG9DYW1lbENhc2UoX2F0dHIubmFtZS5zcGxpdCgnZGF0YS0nKVsxXSldID0gX2F0dHIudmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIga2V5IGluIGRhdGFzZXQpIHtcbiAgICBpZiAoZGF0YXNldFtrZXldID09PSAnZmFsc2UnKSBkYXRhc2V0W2tleV0gPSBmYWxzZTtlbHNlIGlmIChkYXRhc2V0W2tleV0gPT09ICd0cnVlJykgZGF0YXNldFtrZXldID0gdHJ1ZTtlbHNlIGlmIChwYXJzZUZsb2F0KGRhdGFzZXRba2V5XSkgPT09IGRhdGFzZXRba2V5XSAqIDEpIGRhdGFzZXRba2V5XSAqPSAxO1xuICB9XG5cbiAgcmV0dXJuIGRhdGFzZXQ7XG59XG5cbmZ1bmN0aW9uIHZhbCh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgIC8vIGdldCB2YWx1ZVxuICAgIHZhciBlbCA9IHRoaXNbMF07XG4gICAgaWYgKCFlbCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIGlmIChlbC5tdWx0aXBsZSAmJiBlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnc2VsZWN0Jykge1xuICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsLnNlbGVjdGVkT3B0aW9ucy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICB2YWx1ZXMucHVzaChlbC5zZWxlY3RlZE9wdGlvbnNbaV0udmFsdWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWVzO1xuICAgIH1cblxuICAgIHJldHVybiBlbC52YWx1ZTtcbiAgfSAvLyBzZXQgdmFsdWVcblxuXG4gIGZvciAodmFyIF9pID0gMDsgX2kgPCB0aGlzLmxlbmd0aDsgX2kgKz0gMSkge1xuICAgIHZhciBfZWwgPSB0aGlzW19pXTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiBfZWwubXVsdGlwbGUgJiYgX2VsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdzZWxlY3QnKSB7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IF9lbC5vcHRpb25zLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgIF9lbC5vcHRpb25zW2pdLnNlbGVjdGVkID0gdmFsdWUuaW5kZXhPZihfZWwub3B0aW9uc1tqXS52YWx1ZSkgPj0gMDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgX2VsLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIHZhbHVlKHZhbHVlKSB7XG4gIHJldHVybiB0aGlzLnZhbCh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybSh0cmFuc2Zvcm0pIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgdGhpc1tpXS5zdHlsZS50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gdHJhbnNpdGlvbihkdXJhdGlvbikge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICB0aGlzW2ldLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbiA9IHR5cGVvZiBkdXJhdGlvbiAhPT0gJ3N0cmluZycgPyBkdXJhdGlvbiArIFwibXNcIiA6IGR1cmF0aW9uO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIG9uKCkge1xuICBmb3IgKHZhciBfbGVuNSA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjUpLCBfa2V5NSA9IDA7IF9rZXk1IDwgX2xlbjU7IF9rZXk1KyspIHtcbiAgICBhcmdzW19rZXk1XSA9IGFyZ3VtZW50c1tfa2V5NV07XG4gIH1cblxuICB2Y
118XIgZXZlbnRUeXBlID0gYXJnc1swXSxcbiAgICAgIHRhcmdldFNlbGVjdG9yID0gYXJnc1sxXSxcbiAgICAgIGxpc3RlbmVyID0gYXJnc1syXSxcbiAgICAgIGNhcHR1cmUgPSBhcmdzWzNdO1xuXG4gIGlmICh0eXBlb2YgYXJnc1sxXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGV2ZW50VHlwZSA9IGFyZ3NbMF07XG4gICAgbGlzdGVuZXIgPSBhcmdzWzFdO1xuICAgIGNhcHR1cmUgPSBhcmdzWzJdO1xuICAgIHRhcmdldFNlbGVjdG9yID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKCFjYXB0dXJlKSBjYXB0dXJlID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gaGFuZGxlTGl2ZUV2ZW50KGUpIHtcbiAgICB2YXIgdGFyZ2V0ID0gZS50YXJnZXQ7XG4gICAgaWYgKCF0YXJnZXQpIHJldHVybjtcbiAgICB2YXIgZXZlbnREYXRhID0gZS50YXJnZXQuZG9tN0V2ZW50RGF0YSB8fCBbXTtcblxuICAgIGlmIChldmVudERhdGEuaW5kZXhPZihlKSA8IDApIHtcbiAgICAgIGV2ZW50RGF0YS51bnNoaWZ0KGUpO1xuICAgIH1cblxuICAgIGlmICgkKHRhcmdldCkuaXModGFyZ2V0U2VsZWN0b3IpKSBsaXN0ZW5lci5hcHBseSh0YXJnZXQsIGV2ZW50RGF0YSk7ZWxzZSB7XG4gICAgICB2YXIgX3BhcmVudHMgPSAkKHRhcmdldCkucGFyZW50cygpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cblxuICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBfcGFyZW50cy5sZW5ndGg7IGsgKz0gMSkge1xuICAgICAgICBpZiAoJChfcGFyZW50c1trXSkuaXModGFyZ2V0U2VsZWN0b3IpKSBsaXN0ZW5lci5hcHBseShfcGFyZW50c1trXSwgZXZlbnREYXRhKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVFdmVudChlKSB7XG4gICAgdmFyIGV2ZW50RGF0YSA9IGUgJiYgZS50YXJnZXQgPyBlLnRhcmdldC5kb203RXZlbnREYXRhIHx8IFtdIDogW107XG5cbiAgICBpZiAoZXZlbnREYXRhLmluZGV4T2YoZSkgPCAwKSB7XG4gICAgICBldmVudERhdGEudW5zaGlmdChlKTtcbiAgICB9XG5cbiAgICBsaXN0ZW5lci5hcHBseSh0aGlzLCBldmVudERhdGEpO1xuICB9XG5cbiAgdmFyIGV2ZW50cyA9IGV2ZW50VHlwZS5zcGxpdCgnICcpO1xuICB2YXIgajtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICB2YXIgZWwgPSB0aGlzW2ldO1xuXG4gICAgaWYgKCF0YXJnZXRTZWxlY3Rvcikge1xuICAgICAgZm9yIChqID0gMDsgaiA8IGV2ZW50cy5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgICB2Y
118XIgZXZlbnQgPSBldmVudHNbal07XG4gICAgICAgIGlmICghZWwuZG9tN0xpc3RlbmVycykgZWwuZG9tN0xpc3RlbmVycyA9IHt9O1xuICAgICAgICBpZiAoIWVsLmRvbTdMaXN0ZW5lcnNbZXZlbnRdKSBlbC5kb203TGlzdGVuZXJzW2V2ZW50XSA9IFtdO1xuICAgICAgICBlbC5kb203TGlzdGVuZXJzW2V2ZW50XS5wdXNoKHtcbiAgICAgICAgICBsaXN0ZW5lcjogbGlzdGVuZXIsXG4gICAgICAgICAgcHJveHlMaXN0ZW5lcjogaGFuZGxlRXZlbnRcbiAgICAgICAgfSk7XG4gICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGhhbmRsZUV2ZW50LCBjYXB0dXJlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTGl2ZSBldmVudHNcbiAgICAgIGZvciAoaiA9IDA7IGogPCBldmVudHMubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgdmFyIF9ldmVudCA9IGV2ZW50c1tqXTtcbiAgICAgICAgaWYgKCFlbC5kb203TGl2ZUxpc3RlbmVycykgZWwuZG9tN0xpdmVMaXN0ZW5lcnMgPSB7fTtcbiAgICAgICAgaWYgKCFlbC5kb203TGl2ZUxpc3RlbmVyc1tfZXZlbnRdKSBlbC5kb203TGl2ZUxpc3RlbmVyc1tfZXZlbnRdID0gW107XG5cbiAgICAgICAgZWwuZG9tN0xpdmVMaXN0ZW5lcnNbX2V2ZW50XS5wdXNoKHtcbiAgICAgICAgICBsaXN0ZW5lcjogbGlzdGVuZXIsXG4gICAgICAgICAgcHJveHlMaXN0ZW5lcjogaGFuZGxlTGl2ZUV2ZW50XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoX2V2ZW50LCBoYW5kbGVMaXZlRXZlbnQsIGNhcHR1cmUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiBvZmYoKSB7XG4gIGZvciAodmFyIF9sZW42ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuNiksIF9rZXk2ID0gMDsgX2tleTYgPCBfbGVuNjsgX2tleTYrKykge1xuICAgIGFyZ3NbX2tleTZdID0gYXJndW1lbnRzW19rZXk2XTtcbiAgfVxuXG4gIHZhciBldmVudFR5cGUgPSBhcmdzWzBdLFxuICAgICAgdGFyZ2V0U2VsZWN0b3IgPSBhcmdzWzFdLFxuICAgICAgbGlzdGVuZXIgPSBhcmdzWzJdLFxuICAgICAgY2FwdHVyZSA9IGFyZ3NbM107XG5cbiAgaWYgKHR5cGVvZiBhcmdzWzFdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZXZlbnRUeXBlID0gYXJnc1swXTtcbiAgICBsaXN0ZW5lciA9IGFyZ3NbMV07XG4gICAgY2FwdHVyZSA9IGFyZ3NbMl07XG4gICAgdGFyZ2V0U2VsZWN0b3IgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAoIWNhcHR1cmUpIGNhcHR1cmUgPSBmYWxzZTtcbiAgdmFyIGV2ZW50cyA9IGV2ZW50VHlwZS5zcGxpdCgnICcpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgdmFyIGV2ZW50ID0gZXZlbnRzW2ldO1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICB2Y
118XIgZWwgPSB0aGlzW2pdO1xuICAgICAgdmFyIGhhbmRsZXJzID0gdm9pZCAwO1xuXG4gICAgICBpZiAoIXRhcmdldFNlbGVjdG9yICYmIGVsLmRvbTdMaXN0ZW5lcnMpIHtcbiAgICAgICAgaGFuZGxlcnMgPSBlbC5kb203TGlzdGVuZXJzW2V2ZW50XTtcbiAgICAgIH0gZWxzZSBpZiAodGFyZ2V0U2VsZWN0b3IgJiYgZWwuZG9tN0xpdmVMaXN0ZW5lcnMpIHtcbiAgICAgICAgaGFuZGxlcnMgPSBlbC5kb203TGl2ZUxpc3RlbmVyc1tldmVudF07XG4gICAgICB9XG5cbiAgICAgIGlmIChoYW5kbGVycyAmJiBoYW5kbGVycy5sZW5ndGgpIHtcbiAgICAgICAgZm9yICh2YXIgayA9IGhhbmRsZXJzLmxlbmd0aCAtIDE7IGsgPj0gMDsgayAtPSAxKSB7XG4gICAgICAgICAgdmFyIGhhbmRsZXIgPSBoYW5kbGVyc1trXTtcblxuICAgICAgICAgIGlmIChsaXN0ZW5lciAmJiBoYW5kbGVyLmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlci5wcm94eUxpc3RlbmVyLCBjYXB0dXJlKTtcbiAgICAgICAgICAgIGhhbmRsZXJzLnNwbGljZShrLCAxKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGxpc3RlbmVyICYmIGhhbmRsZXIubGlzdGVuZXIgJiYgaGFuZGxlci5saXN0ZW5lci5kb203cHJveHkgJiYgaGFuZGxlci5saXN0ZW5lci5kb203cHJveHkgPT09IGxpc3RlbmVyKSB7XG4gICAgICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBoYW5kbGVyLnByb3h5TGlzdGVuZXIsIGNhcHR1cmUpO1xuICAgICAgICAgICAgaGFuZGxlcnMuc3BsaWNlKGssIDEpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIWxpc3RlbmVyKSB7XG4gICAgICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBoYW5kbGVyLnByb3h5TGlzdGVuZXIsIGNhcHR1cmUpO1xuICAgICAgICAgICAgaGFuZGxlcnMuc3BsaWNlKGssIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiBvbmNlKCkge1xuICB2YXIgZG9tID0gdGhpcztcblxuICBmb3IgKHZhciBfbGVuNyA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjcpLCBfa2V5NyA9IDA7IF9rZXk3IDwgX2xlbjc7IF9rZXk3KyspIHtcbiAgICBhcmdzW19rZXk3XSA9IGFyZ3VtZW50c1tfa2V5N107XG4gIH1cblxuICB2YXIgZXZlbnROYW1lID0gYXJnc1swXSxcbiAgICAgIHRhcmdldFNlbGVjdG9yID0gYXJnc1sxXSxcbiAgICAgIGxpc3RlbmVyID0gYXJnc1syXSxcbiAgICAgIGNhcHR1cmUgPSBhcmdzWzNdO1xuXG4gIGlmICh0eXBlb2YgYXJnc1sxXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGV2ZW50TmFtZSA9IGFyZ3NbMF07XG4gICAgbGlzdGVuZXIgPSBhcmdzWzFdO1xuICAgIGNhcHR1cmUgPSBhcmdzWzJdO1xuICAgIHRhcmdldFNlbGVjdG9yID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgZnVuY3Rpb24gb25jZUhhbmRsZXIoKSB7XG4gICAgZm9yICh2YXIgX2xlbjggPSBhcmd1bWVudHMubGVuZ3RoLCBldmVudEFyZ3MgPSBuZXcgQXJyYXkoX2xlbjgpLCBfa2V5OCA9IDA7IF9rZXk4IDwgX2xlbjg7IF9rZXk4KyspIHtcbiAgICAgIGV2ZW50QXJnc1tfa2V5OF0gPSBhcmd1bWVudHNbX2tleThdO1xuICAgIH1cblxuICAgIGxpc3RlbmVyLmFwcGx5KHRoaXMsIGV2ZW50QXJncyk7XG4gICAgZG9tLm9mZihldmVudE5hbWUsIHRhcmdldFNlbGVjdG9yLCBvbmNlSGFuZGxlciwgY2FwdHVyZSk7XG5cbiAgICBpZiAob25jZUhhbmRsZXIuZG9tN3Byb3h5KSB7XG4gICAgICBkZWxldGUgb25jZUhhbmRsZXIuZG9tN3Byb3h5O1xuICAgIH1cbiAgfVxuXG4gIG9uY2VIYW5kbGVyLmRvbTdwcm94eSA9IGxpc3RlbmVyO1xuICByZXR1cm4gZG9tLm9uKGV2ZW50TmFtZSwgdGFyZ2V0U2VsZWN0b3IsIG9uY2VIYW5kbGVyLCBjYXB0dXJlKTtcbn1cblxuZnVuY3Rpb24gdHJpZ2dlcigpIHtcbiAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdygpO1xuXG4gIGZvciAodmFyIF9sZW45ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuOSksIF9rZXk5ID0gMDsgX2tleTkgPCBfbGVuOTsgX2tleTkrKykge1xuICAgIGFyZ3NbX2tleTldID0gYXJndW1lbnRzW19rZXk5XTtcbiAgfVxuXG4gIHZhciBldmVudHMgPSBhcmdzWzBdLnNwbGl0KCcgJyk7XG4gIHZhciBldmVudERhdGEgPSBhcmdzWzFdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgdmFyIGV2ZW50ID0gZXZlbnRzW2ldO1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICB2Y
118XIgZWwgPSB0aGlzW2pdO1xuXG4gICAgICBpZiAod2luZG93LkN1c3RvbUV2ZW50KSB7XG4gICAgICAgIHZhciBldnQgPSBuZXcgd2luZG93LkN1c3RvbUV2ZW50KGV2ZW50LCB7XG4gICAgICAgICAgZGV0YWlsOiBldmVudERhdGEsXG4gICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICBjYW5jZWxhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBlbC5kb203RXZlbnREYXRhID0gYXJncy5maWx0ZXIoZnVuY3Rpb24gKGRhdGEsIGRhdGFJbmRleCkge1xuICAgICAgICAgIHJldHVybiBkYXRhSW5kZXggPiAwO1xuICAgICAgICB9KTtcbiAgICAgICAgZWwuZGlzcGF0Y2hFdmVudChldnQpO1xuICAgICAgICBlbC5kb203RXZlbnREYXRhID0gW107XG4gICAgICAgIGRlbGV0ZSBlbC5kb203RXZlbnREYXRhO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiB0cmFuc2l0aW9uRW5kKGNhbGxiYWNrKSB7XG4gIHZhciBkb20gPSB0aGlzO1xuXG4gIGZ1bmN0aW9uIGZpcmVDYWxsQmFjayhlKSB7XG4gICAgaWYgKGUudGFyZ2V0ICE9PSB0aGlzKSByZXR1cm47XG4gICAgY2FsbGJhY2suY2FsbCh0aGlzLCBlKTtcbiAgICBkb20ub2ZmKCd0cmFuc2l0aW9uZW5kJywgZmlyZUNhbGxCYWNrKTtcbiAgfVxuXG4gIGlmIChjYWxsYmFjaykge1xuICAgIGRvbS5vbigndHJhbnNpdGlvbmVuZCcsIGZpcmVDYWxsQmFjayk7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gYW5pbWF0aW9uRW5kKGNhbGxiYWNrKSB7XG4gIHZhciBkb20gPSB0aGlzO1xuXG4gIGZ1bmN0aW9uIGZpcmVDYWxsQmFjayhlKSB7XG4gICAgaWYgKGUudGFyZ2V0ICE9PSB0aGlzKSByZXR1cm47XG4gICAgY2FsbGJhY2suY2FsbCh0aGlzLCBlKTtcbiAgICBkb20ub2ZmKCdhbmltYXRpb25lbmQnLCBmaXJlQ2FsbEJhY2spO1xuICB9XG5cbiAgaWYgKGNhbGxiYWNrKSB7XG4gICAgZG9tLm9uKCdhbmltYXRpb25lbmQnLCBmaXJlQ2FsbEJhY2spO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIHdpZHRoKCkge1xuICB2YXIgd2luZG93ID0gZ2V0V2luZG93KCk7XG5cbiAgaWYgKHRoaXNbMF0gPT09IHdpbmRvdykge1xuICAgIHJldHVybiB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgfVxuXG4gIGlmICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gcGFyc2VGbG9hdCh0aGlzLmNzcygnd2lkdGgnKSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gb3V0ZXJXaWR0aChpbmNsdWRlTWFyZ2lucykge1xuICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgaWYgKGluY2x1ZGVNYXJnaW5zKSB7XG4gICAgICB2Y
118XIgX3N0eWxlcyA9IHRoaXMuc3R5bGVzKCk7XG5cbiAgICAgIHJldHVybiB0aGlzWzBdLm9mZnNldFdpZHRoICsgcGFyc2VGbG9hdChfc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ21hcmdpbi1yaWdodCcpKSArIHBhcnNlRmxvYXQoX3N0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKCdtYXJnaW4tbGVmdCcpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1swXS5vZmZzZXRXaWR0aDtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBoZWlnaHQoKSB7XG4gIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcblxuICBpZiAodGhpc1swXSA9PT0gd2luZG93KSB7XG4gICAgcmV0dXJuIHdpbmRvdy5pbm5lckhlaWdodDtcbiAgfVxuXG4gIGlmICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gcGFyc2VGbG9hdCh0aGlzLmNzcygnaGVpZ2h0JykpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIG91dGVySGVpZ2h0KGluY2x1ZGVNYXJnaW5zKSB7XG4gIGlmICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICBpZiAoaW5jbHVkZU1hcmdpbnMpIHtcbiAgICAgIHZhciBfc3R5bGVzMiA9IHRoaXMuc3R5bGVzKCk7XG5cbiAgICAgIHJldHVybiB0aGlzWzBdLm9mZnNldEhlaWdodCArIHBhcnNlRmxvYXQoX3N0eWxlczIuZ2V0UHJvcGVydHlWYWx1ZSgnbWFyZ2luLXRvcCcpKSArIHBhcnNlRmxvYXQoX3N0eWxlczIuZ2V0UHJvcGVydHlWYWx1ZSgnbWFyZ2luLWJvdHRvbScpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1swXS5vZmZzZXRIZWlnaHQ7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gb2Zmc2V0KCkge1xuICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICAgIHZhciBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG4gICAgdmFyIGVsID0gdGhpc1swXTtcbiAgICB2YXIgYm94ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgdmFyIGJvZHkgPSBkb2N1bWVudC5ib2R5O1xuICAgIHZhciBjbGllbnRUb3AgPSBlbC5jbGllbnRUb3AgfHwgYm9keS5jbGllbnRUb3AgfHwgMDtcbiAgICB2YXIgY2xpZW50TGVmdCA9IGVsLmNsaWVudExlZnQgfHwgYm9keS5jbGllbnRMZWZ0IHx8IDA7XG4gICAgdmFyIHNjcm9sbFRvcCA9IGVsID09PSB3aW5kb3cgPyB3aW5kb3cuc2Nyb2xsWSA6IGVsLnNjcm9sbFRvcDtcbiAgICB2YXIgc2Nyb2xsTGVmdCA9IGVsID09PSB3aW5kb3cgPyB3aW5kb3cuc2Nyb2xsWCA6IGVsLnNjcm9sbExlZnQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRvcDogYm94LnRvcCArIHNjcm9sbFRvcCAtIGNsaWVudFRvcCxcbiAgICAgIGxlZnQ6IGJveC5sZWZ0ICsgc2Nyb2xsTGVmdCAtIGNsaWVudExlZnRcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGhpZGUoKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIHRoaXNbaV0uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiBzaG93KCkge1xuICB2YXIgd2luZG93ID0gZ2V0V2luZG93KCk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgdmFyIGVsID0gdGhpc1tpXTtcblxuICAgIGlmIChlbC5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScpIHtcbiAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSAnJztcbiAgICB9XG5cbiAgICBpZiAod2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwsIG51bGwpLmdldFByb3BlcnR5VmFsdWUoJ2Rpc3BsYXknKSA9PT0gJ25vbmUnKSB7XG4gICAgICAvLyBTdGlsbCBub3QgdmlzaWJsZVxuICAgICAgZWwuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIHN0eWxlcygpIHtcbiAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICBpZiAodGhpc1swXSkgcmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXNbMF0sIG51bGwpO1xuICByZXR1cm4ge307XG59XG5cbmZ1bmN0aW9uIGNzcyhwcm9wcywgdmFsdWUpIHtcbiAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICB2YXIgaTtcblxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgIGlmICh0eXBlb2YgcHJvcHMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyAuY3NzKCd3aWR0aCcpXG4gICAgICBpZiAodGhpc1swXSkgcmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXNbMF0sIG51bGwpLmdldFByb3BlcnR5VmFsdWUocHJvcHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyAuY3NzKHsgd2lkdGg6ICcxMDBweCcgfSlcbiAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGZvciAodmFyIF9wcm9wIGluIHByb3BzKSB7XG4gICAgICAgICAgdGhpc1tpXS5zdHlsZVtfcHJvcF0gPSBwcm9wc1tfcHJvcF07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIgJiYgdHlwZW9mIHByb3BzID09PSAnc3RyaW5nJykge1xuICAgIC8vIC5jc3MoJ3dpZHRoJywgJzEwMHB4JylcbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgdGhpc1tpXS5zdHlsZVtwcm9wc10gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiBlYWNoKGNhbGxiYWNrKSB7XG4gIGlmICghY2FsbGJhY2spIHJldHVybiB0aGlzO1xuICB0aGlzLmZvckVhY2goZnVuY3Rpb24gKGVsLCBpbmRleCkge1xuICAgIGNhbGxiYWNrLmFwcGx5KGVsLCBbZWwsIGluZGV4XSk7XG4gIH0pO1xuICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrKSB7XG4gIHZhciByZXN1bHQgPSBhcnJheUZpbHRlcih0aGlzLCBjYWxsYmFjayk7XG4gIHJldHVybiAkKHJlc3VsdCk7XG59XG5cbmZ1bmN0aW9uIGh0bWwoaHRtbCkge1xuICBpZiAodHlwZW9mIGh0bWwgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIHRoaXNbMF0gPyB0aGlzWzBdLmlubmVySFRNTCA6IG51bGw7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICB0aGlzW2ldLmlubmVySFRNTCA9IGh0bWw7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gdGV4dCh0ZXh0KSB7XG4gIGlmICh0eXBlb2YgdGV4dCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gdGhpc1swXSA/IHRoaXNbMF0udGV4dENvbnRlbnQudHJpbSgpI
118DogbnVsbDtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIHRoaXNbaV0udGV4dENvbnRlbnQgPSB0ZXh0O1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIGlzKHNlbGVjdG9yKSB7XG4gIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgdmFyIGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgdmFyIGVsID0gdGhpc1swXTtcbiAgdmFyIGNvbXBhcmVXaXRoO1xuICB2YXIgaTtcbiAgaWYgKCFlbCB8fCB0eXBlb2Ygc2VsZWN0b3IgPT09ICd1bmRlZmluZWQnKSByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKHR5cGVvZiBzZWxlY3RvciA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAoZWwubWF0Y2hlcykgcmV0dXJuIGVsLm1hdGNoZXMoc2VsZWN0b3IpO1xuICAgIGlmIChlbC53ZWJraXRNYXRjaGVzU2VsZWN0b3IpIHJldHVybiBlbC53ZWJraXRNYXRjaGVzU2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgIGlmIChlbC5tc01hdGNoZXNTZWxlY3RvcikgcmV0dXJuIGVsLm1zTWF0Y2hlc1NlbGVjdG9yKHNlbGVjdG9yKTtcbiAgICBjb21wYXJlV2l0aCA9ICQoc2VsZWN0b3IpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGNvbXBhcmVXaXRoLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBpZiAoY29tcGFyZVdpdGhbaV0gPT09IGVsKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoc2VsZWN0b3IgPT09IGRvY3VtZW50KSB7XG4gICAgcmV0dXJuIGVsID09PSBkb2N1bWVudDtcbiAgfVxuXG4gIGlmIChzZWxlY3RvciA9PT0gd2luZG93KSB7XG4gICAgcmV0dXJuIGVsID09PSB3aW5kb3c7XG4gIH1cblxuICBpZiAoc2VsZWN0b3Iubm9kZVR5cGUgfHwgc2VsZWN0b3IgaW5zdGFuY2VvZiBEb203KSB7XG4gICAgY29tcGFyZVdpdGggPSBzZWxlY3Rvci5ub2RlVHlwZSA/IFtzZWxlY3Rvcl0gOiBzZWxlY3RvcjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBjb21wYXJlV2l0aC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgaWYgKGNvbXBhcmVXaXRoW2ldID09PSBlbCkgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpbmRleCgpIHtcbiAgdmFyIGNoaWxkID0gdGhpc1swXTtcbiAgdmFyIGk7XG5cbiAgaWYgKGNoaWxkKSB7XG4gICAgaSA9IDA7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuXG4gICAgd2hpbGUgKChjaGlsZCA9IGNoaWxkLnByZXZpb3VzU2libGluZykgIT09IG51bGwpIHtcbiAgICAgIGlmIChjaGlsZC5ub2RlVHlwZSA9PT0gMSkgaSArPSAxO1xuICAgIH1cblxuICAgIHJldHVybiBpO1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZXEoaW5kZXgpIHtcbiAgaWYgKHR5cGVvZiBpbmRleCA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiB0aGlzO1xuICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG5cbiAgaWYgKGluZGV4ID4gbGVuZ3RoIC0gMSkge1xuICAgIHJldHVybiAkKFtdKTtcbiAgfVxuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICB2YXIgcmV0dXJuSW5kZXggPSBsZW5ndGggKyBpbmRleDtcbiAgICBpZiAocmV0dXJuSW5kZXggPCAwKSByZXR1cm4gJChbXSk7XG4gICAgcmV0dXJuICQoW3RoaXNbcmV0dXJuSW5kZX
118hdXSk7XG4gIH1cblxuICByZXR1cm4gJChbdGhpc1tpbmRleF1dKTtcbn1cblxuZnVuY3Rpb24gYXBwZW5kKCkge1xuICB2YXIgbmV3Q2hpbGQ7XG4gIHZhciBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cbiAgZm9yICh2YXIgayA9IDA7IGsgPCBhcmd1bWVudHMubGVuZ3RoOyBrICs9IDEpIHtcbiAgICBuZXdDaGlsZCA9IGsgPCAwIHx8IGFyZ3VtZW50cy5sZW5ndGggPD0gayA/IHVuZGVmaW5lZCA6IGFyZ3VtZW50c1trXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdmFyIHRlbXBEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGVtcERpdi5pbm5lckhUTUwgPSBuZXdDaGlsZDtcblxuICAgICAgICB3aGlsZSAodGVtcERpdi5maXJzdENoaWxkKSB7XG4gICAgICAgICAgdGhpc1tpXS5hcHBlbmRDaGlsZCh0ZW1wRGl2LmZpcnN0Q2hpbGQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG5ld0NoaWxkIGluc3RhbmNlb2YgRG9tNykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG5ld0NoaWxkLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgICAgdGhpc1tpXS5hcHBlbmRDaGlsZChuZXdDaGlsZFtqXSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXNbaV0uYXBwZW5kQ2hpbGQobmV3Q2hpbGQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiBhcHBlbmRUbyhwYXJlbnQpIHtcbiAgJChwYXJlbnQpLmFwcGVuZCh0aGlzKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIHByZXBlbmQobmV3Q2hpbGQpIHtcbiAgdmFyIGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgdmFyIGk7XG4gIHZhciBqO1xuXG4gIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHZhciB0ZW1wRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICB0ZW1wRGl2LmlubmVySFRNTCA9IG5ld0NoaWxkO1xuXG4gICAgICBmb3IgKGogPSB0ZW1wRGl2LmNoaWxkTm9kZXMubGVuZ3RoIC0gMTsgaiA+PSAwOyBqIC09IDEpIHtcbiAgICAgICAgdGhpc1tpXS5pbnNlcnRCZWZvcmUodGVtcERpdi5jaGlsZE5vZGVzW2pdLCB0aGlzW2ldLmNoaWxkTm9kZXNbMF0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobmV3Q2hpbGQgaW5zdGFuY2VvZiBEb203KSB7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgbmV3Q2hpbGQubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgdGhpc1tpXS5pbnNlcnRCZWZvcmUobmV3Q2hpbGRbal0sIHRoaXNbaV0uY2hpbGROb2Rlc1swXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNbaV0uaW5zZXJ0QmVmb3JlKG5ld0NoaWxkLCB0aGlzW2ldLmNoaWxkTm9kZXNbMF0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiBwcmVwZW5kVG8ocGFyZW50KSB7XG4gICQocGFyZW50KS5wcmVwZW5kKHRoaXMpO1xuICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gaW5zZXJ0QmVmb3JlKHNlbGVjdG9yKSB7XG4gIHZhciBiZWZvcmUgPSAkKHNlbGVjdG9yKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBpZiAoYmVmb3JlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgYmVmb3JlWzBdLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXNbaV0sIGJlZm9yZVswXSk7XG4gICAgfSBlbHNlIGlmIChiZWZvcmUubGVuZ3RoID4gMSkge1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBiZWZvcmUubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgYmVmb3JlW2pdLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXNbaV0uY2xvbmVOb2RlKHRydWUpLCBiZWZvcmVbal0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpbnNlcnRBZnRlcihzZWxlY3Rvcikge1xuICB2YXIgYWZ0ZXIgPSAkKHNlbGVjdG9yKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBpZiAoYWZ0ZXIubGVuZ3RoID09PSAxKSB7XG4gICAgICBhZnRlclswXS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzW2ldLCBhZnRlclswXS5uZXh0U2libGluZyk7XG4gICAgfSBlbHNlIGlmIChhZnRlci5sZW5ndGggPiAxKSB7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGFmdGVyLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgIGFmdGVyW2pdLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXNbaV0uY2xvbmVOb2RlKHRydWUpLCBhZnRlcltqXS5uZXh0U2libGluZyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG5leHQoc2VsZWN0b3IpIHtcbiAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgaWYgKHRoaXNbMF0ubmV4dEVsZW1lbnRTaWJsaW5nICYmICQodGhpc1swXS5uZXh0RWxlbWVudFNpYmxpbmcpLmlzKHNlbGVjdG9yKSkge1xuICAgICAgICByZXR1cm4gJChbdGhpc1swXS5uZXh0RWxlbWVudFNpYmxpbmddKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICQoW10pO1xuICAgIH1cblxuICAgIGlmICh0aGlzWzBdLm5leHRFbGVtZW50U2libGluZykgcmV0dXJuICQoW3RoaXNbMF0ubmV4dEVsZW1lbnRTaWJsaW5nXSk7XG4gICAgcmV0dXJuICQoW10pO1xuICB9XG5cbiAgcmV0dXJuICQoW10pO1xufVxuXG5mdW5jdGlvbiBuZXh0QWxsKHNlbGVjdG9yKSB7XG4gIHZhciBuZXh0RWxzID0gW107XG4gIHZhciBlbCA9IHRoaXNbMF07XG4gIGlmICghZWwpIHJldHVybiAkKFtdKTtcblxuICB3aGlsZSAoZWwubmV4dEVsZW1lbnRTaWJsaW5nKSB7XG4gICAgdmFyIF9uZXh0ID0gZWwubmV4dEVsZW1lbnRTaWJsaW5nOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgIGlmICgkKF9uZXh0KS5pcyhzZWxlY3RvcikpIG5leHRFbHMucHVzaChfbmV4dCk7XG4gICAgfSBlbHNlIG5leHRFbHMucHVzaChfbmV4dCk7XG5cbiAgICBlbCA9IF9uZXh0O1xuICB9XG5cbiAgcmV0dXJuICQobmV4dEVscyk7XG59XG5cbmZ1bmN0aW9uIHByZXYoc2VsZWN0b3IpIHtcbiAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgIHZhciBlbCA9IHRoaXNbMF07XG5cbiAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgIGlmIChlbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nICYmICQoZWwucHJldmlvdXNFbGVtZW50U2libGluZykuaXMoc2VsZWN0b3IpKSB7XG4gICAgICAgI
118HJldHVybiAkKFtlbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAkKFtdKTtcbiAgICB9XG5cbiAgICBpZiAoZWwucHJldmlvdXNFbGVtZW50U2libGluZykgcmV0dXJuICQoW2VsLnByZXZpb3VzRWxlbWVudFNpYmxpbmddKTtcbiAgICByZXR1cm4gJChbXSk7XG4gIH1cblxuICByZXR1cm4gJChbXSk7XG59XG5cbmZ1bmN0aW9uIHByZXZBbGwoc2VsZWN0b3IpIHtcbiAgdmFyIHByZXZFbHMgPSBbXTtcbiAgdmFyIGVsID0gdGhpc1swXTtcbiAgaWYgKCFlbCkgcmV0dXJuICQoW10pO1xuXG4gIHdoaWxlIChlbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKSB7XG4gICAgdmFyIF9wcmV2ID0gZWwucHJldmlvdXNFbGVtZW50U2libGluZzsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICBpZiAoJChfcHJldikuaXMoc2VsZWN0b3IpKSBwcmV2RWxzLnB1c2goX3ByZXYpO1xuICAgIH0gZWxzZSBwcmV2RWxzLnB1c2goX3ByZXYpO1xuXG4gICAgZWwgPSBfcHJldjtcbiAgfVxuXG4gIHJldHVybiAkKHByZXZFbHMpO1xufVxuXG5mdW5jdGlvbiBzaWJsaW5ncyhzZWxlY3Rvcikge1xuICByZXR1cm4gdGhpcy5uZXh0QWxsKHNlbGVjdG9yKS5hZGQodGhpcy5wcmV2QWxsKHNlbGVjdG9yKSk7XG59XG5cbmZ1bmN0aW9uIHBhcmVudChzZWxlY3Rvcikge1xuICB2YXIgcGFyZW50cyA9IFtdOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgaWYgKHRoaXNbaV0ucGFyZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICAgIGlmICgkKHRoaXNbaV0ucGFyZW50Tm9kZSkuaXMoc2VsZWN0b3IpKSBwYXJlbnRzLnB1c2godGhpc1tpXS5wYXJlbnROb2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmVudHMucHVzaCh0aGlzW2ldLnBhcmVudE5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAkKHBhcmVudHMpO1xufVxuXG5mdW5jdGlvbiBwYXJlbnRzKHNlbGVjdG9yKSB7XG4gIHZhciBwYXJlbnRzID0gW107IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICB2YXIgX3BhcmVudCA9IHRoaXNbaV0ucGFyZW50Tm9kZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgd2hpbGUgKF9wYXJlbnQpIHtcbiAgICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgICBpZiAoJChfcGFyZW50KS5pcyhzZWxlY3RvcikpIHBhcmVudHMucHVzaChfcGFyZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmVudHMucHVzaChfcGFyZW50KTtcbiAgICAgIH1cblxuICAgICAgX3BhcmVudCA9IF9wYXJlbnQucGFyZW50Tm9kZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gJChwYXJlbnRzKTtcbn1cblxuZnVuY3Rpb24gY2xvc2VzdChzZWxlY3Rvcikge1xuICB2YXIgY2xvc2VzdCA9IHRoaXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICBpZiAodHlwZW9mIHNlbGVjdG9yID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiAkKFtdKTtcbiAgfVxuXG4gIGlmICghY2xvc2VzdC5pcyhzZWxlY3RvcikpIHtcbiAgICBjbG9zZXN0ID0gY2xvc2VzdC5wYXJlbnRzKHNlbGVjdG9yKS5lcSgwKTtcbiAgfVxuXG4gIHJldHVybiBjbG9zZXN0O1xufVxuXG5mdW5jdGlvbiBmaW5kKHNlbGVjdG9yKSB7XG4gIHZhciBmb3VuZEVsZW1lbnRzID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgdmFyIGZvdW5kID0gdGhpc1tpXS5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgZm91bmQubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgIGZvdW5kRWxlbWVudHMucHVzaChmb3VuZFtqXSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICQoZm91bmRFbGVtZW50cyk7XG59XG5cbmZ1bmN0aW9uIGNoaWxkcmVuKHNlbGVjdG9yKSB7XG4gIHZhciBjaGlsZHJlbiA9IFtdOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgdmFyIGNoaWxkTm9kZXMgPSB0aGlzW2ldLmNoaWxkcmVuO1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBjaGlsZE5vZGVzLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICBpZiAoIXNlbGVjdG9yIHx8ICQoY2hpbGROb2Rlc1tqXSkuaXMoc2VsZWN0b3IpKSB7XG4gICAgICAgIGNoaWxkcmVuLnB1c2goY2hpbGROb2Rlc1tqXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICQoY2hpbGRyZW4pO1xufVxuXG5mdW5jdGlvbiByZW1vdmUoKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGlmICh0aGlzW2ldLnBhcmVudE5vZGUpIHRoaXNbaV0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzW2ldKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiBkZXRhY2goKSB7XG4gIHJldHVybiB0aGlzLnJlbW92ZSgpO1xufVxuXG5mdW5jdGlvbiBhZGQoKSB7XG4gIHZhciBkb20gPSB0aGlzO1xuICB2YXIgaTtcbiAgdmFyIGo7XG5cbiAgZm9yICh2YXIgX2xlbjEwID0gYXJndW1lbnRzLmxlbmd0aCwgZWxzID0gbmV3IEFycmF5KF9sZW4xMCksIF9rZXkxMCA9IDA7IF9rZXkxMCA8IF9sZW4xMDsgX2tleTEwKyspIHtcbiAgICBlbHNbX2tleTEwXSA9IGFyZ3VtZW50c1tfa2V5MTBdO1xuICB9XG5cbiAgZm9yIChpID0gMDsgaSA8IGVscy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIHZhciB0b0FkZCA9ICQoZWxzW2ldKTtcblxuICAgIGZvciAoaiA9IDA7IGogPCB0b0FkZC5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgZG9tLnB1c2godG9BZGRbal0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkb207XG59XG5cbmZ1bmN0aW9uIGVtcHR5KCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICB2YXIgZWwgPSB0aGlzW2ldO1xuXG4gICAgaWYgKGVsLm5vZGVUeXBlID09PSAxKSB7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGVsLmNoaWxkTm9kZXMubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgaWYgKGVsLmNoaWxkTm9kZXNbal0ucGFyZW50Tm9kZSkge1xuICAgICAgICAgIGVsLmNoaWxkTm9kZXNbal0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbC5jaGlsZE5vZGVzW2pdKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBlbC50ZXh0Q29udGVudCA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybi
118B0aGlzO1xufVxuXG5mdW5jdGlvbiBzY3JvbGxUbygpIHtcbiAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdygpO1xuXG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICB2YXIgbGVmdCA9IGFyZ3NbMF0sXG4gICAgICB0b3AgPSBhcmdzWzFdLFxuICAgICAgZHVyYXRpb24gPSBhcmdzWzJdLFxuICAgICAgZWFzaW5nID0gYXJnc1szXSxcbiAgICAgIGNhbGxiYWNrID0gYXJnc1s0XTtcblxuICBpZiAoYXJncy5sZW5ndGggPT09IDQgJiYgdHlwZW9mIGVhc2luZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gZWFzaW5nO1xuICAgIGxlZnQgPSBhcmdzWzBdO1xuICAgIHRvcCA9IGFyZ3NbMV07XG4gICAgZHVyYXRpb24gPSBhcmdzWzJdO1xuICAgIGNhbGxiYWNrID0gYXJnc1szXTtcbiAgICBlYXNpbmcgPSBhcmdzWzRdO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBlYXNpbmcgPT09ICd1bmRlZmluZWQnKSBlYXNpbmcgPSAnc3dpbmcnO1xuICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uIGFuaW1hdGUoKSB7XG4gICAgdmFyIGVsID0gdGhpcztcbiAgICB2YXIgY3VycmVudFRvcDtcbiAgICB2YXIgY3VycmVudExlZnQ7XG4gICAgdmFyIG1heFRvcDtcbiAgICB2YXIgbWF4TGVmdDtcbiAgICB2YXIgbmV3VG9wO1xuICAgIHZhciBuZXdMZWZ0O1xuICAgIHZhciBzY3JvbGxUb3A7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIHZhciBzY3JvbGxMZWZ0OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICB2YXIgYW5pbWF0ZVRvcCA9IHRvcCA+IDAgfHwgdG9wID09PSAwO1xuICAgIHZhciBhbmltYXRlTGVmdCA9IGxlZnQgPiAwIHx8IGxlZnQgPT09IDA7XG5cbiAgICBpZiAodHlwZW9mIGVhc2luZyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGVhc2luZyA9ICdzd2luZyc7XG4gICAgfVxuXG4gICAgaWYgKGFuaW1hdGVUb3ApIHtcbiAgICAgIGN1cnJlbnRUb3AgPSBlbC5zY3JvbGxUb3A7XG5cbiAgICAgIGlmICghZHVyYXRpb24pIHtcbiAgICAgICAgZWwuc2Nyb2xsVG9wID0gdG9wO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhbmltYXRlTGVmdCkge1xuICAgICAgY3VycmVudExlZnQgPSBlbC5zY3JvbGxMZWZ0O1xuXG4gICAgICBpZiAoIWR1cmF0aW9uKSB7XG4gICAgICAgIGVsLnNjcm9sbExlZnQgPSBsZWZ0O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghZHVyYXRpb24pIHJldHVybjtcblxuICAgIGlmIChhbmltYXRlVG9wKSB7XG4gICAgICBtYXhUb3AgPSBlbC5zY3JvbGxIZWlnaHQgLSBlbC5vZmZzZXRIZWlnaHQ7XG4gICAgICBuZXdUb3AgPSBNYXRoLm1heChNYXRoLm1pbih0b3AsIG1heFRvcCksIDApO1xuICAgIH1cblxuICAgIGlmIChhbmltYXRlTGVmdCkge1xuICAgICAgbWF4TGVmdCA9IGVsLnNjcm9sbFdpZHR
118oIC0gZWwub2Zmc2V0V2lkdGg7XG4gICAgICBuZXdMZWZ0ID0gTWF0aC5tYXgoTWF0aC5taW4obGVmdCwgbWF4TGVmdCksIDApO1xuICAgIH1cblxuICAgIHZhciBzdGFydFRpbWUgPSBudWxsO1xuICAgIGlmIChhbmltYXRlVG9wICYmIG5ld1RvcCA9PT0gY3VycmVudFRvcCkgYW5pbWF0ZVRvcCA9IGZhbHNlO1xuICAgIGlmIChhbmltYXRlTGVmdCAmJiBuZXdMZWZ0ID09PSBjdXJyZW50TGVmdCkgYW5pbWF0ZUxlZnQgPSBmYWxzZTtcblxuICAgIGZ1bmN0aW9uIHJlbmRlcih0aW1lKSB7XG4gICAgICBpZiAodGltZSA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXJ0VGltZSA9PT0gbnVsbCkge1xuICAgICAgICBzdGFydFRpbWUgPSB0aW1lO1xuICAgICAgfVxuXG4gICAgICB2YXIgcHJvZ3Jlc3MgPSBNYXRoLm1heChNYXRoLm1pbigodGltZSAtIHN0YXJ0VGltZSkgLyBkdXJhdGlvbiwgMSksIDApO1xuICAgICAgdmFyIGVhc2VQcm9ncmVzcyA9IGVhc2luZyA9PT0gJ2xpbmVhcicgPyBwcm9ncmVzcyA6IDAuNSAtIE1hdGguY29zKHByb2dyZXNzICogTWF0aC5QSSkgLyAyO1xuICAgICAgdmFyIGRvbmU7XG4gICAgICBpZiAoYW5pbWF0ZVRvcCkgc2Nyb2xsVG9wID0gY3VycmVudFRvcCArIGVhc2VQcm9ncmVzcyAqIChuZXdUb3AgLSBjdXJyZW50VG9wKTtcbiAgICAgIGlmIChhbmltYXRlTGVmdCkgc2Nyb2xsTGVmdCA9IGN1cnJlbnRMZWZ0ICsgZWFzZVByb2dyZXNzICogKG5ld0xlZnQgLSBjdXJyZW50TGVmdCk7XG5cbiAgICAgIGlmIChhbmltYXRlVG9wICYmIG5ld1RvcCA+IGN1cnJlbnRUb3AgJiYgc2Nyb2xsVG9wID49IG5ld1RvcCkge1xuICAgICAgICBlbC5zY3JvbGxUb3AgPSBuZXdUb3A7XG4gICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoYW5pbWF0ZVRvcCAmJiBuZXdUb3AgPCBjdXJyZW50VG9wICYmIHNjcm9sbFRvcCA8PSBuZXdUb3ApIHtcbiAgICAgICAgZWwuc2Nyb2xsVG9wID0gbmV3VG9wO1xuICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFuaW1hdGVMZWZ0ICYmIG5ld0xlZnQgPiBjdXJyZW50TGVmdCAmJiBzY3JvbGxMZWZ0ID49IG5ld0xlZnQpIHtcbiAgICAgICAgZWwuc2Nyb2xsTGVmdCA9IG5ld0xlZnQ7XG4gICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoYW5pbWF0ZUxlZnQgJiYgbmV3TGVmdCA8IGN1cnJlbnRMZWZ0ICYmIHNjcm9sbExlZnQgPD0gbmV3TGVmdCkge1xuICAgICAgICBlbC5zY3JvbGxMZWZ0ID0gbmV3TGVmdDtcbiAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoYW5pbWF0ZVRvcCkgZWwuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wO1xuICAgICAgaWYgKGFuaW1hdGVMZWZ0KSBlbC5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDtcbiAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUocmVuZGVyKTtcbiAgICB9XG5cbiAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHJlbmRlcik7XG4gIH0pO1xufSAvLyBzY3JvbGxUb3AodG9wLCBkdXJhdGlvbiwgZWFzaW5nLCBjYWxsYmFjaykge1xuXG5cbmZ1bmN0aW9uIHNjcm9sbFRvcCgpIHtcbiAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgYXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICB9XG5cbiAgdmFyIHRvcCA9IGFyZ3NbMF0sXG4gICAgICBkdXJhdGlvbiA9IGFyZ3NbMV0sXG4gICAgICBlYXNpbmcgPSBhcmdzWzJdLFxuICAgICAgY2FsbGJhY2sgPSBhcmdzWzNdO1xuXG4gIGlmIChhcmdzLmxlbmd0aCA9PT0gMyAmJiB0eXBlb2YgZWFzaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdG9wID0gYXJnc1swXTtcbiAgICBkdXJhdGlvbiA9IGFyZ3NbMV07XG4gICAgY2FsbGJhY2sgPSBhcmdzWzJdO1xuICAgIGVhc2luZyA9IGFyZ3NbM107XG4gIH1cblxuICB2YXIgZG9tID0gdGhpcztcblxuICBpZiAodHlwZW9mIHRvcCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAoZG9tLmxlbmd0aCA+IDApIHJldHVybiBkb21bMF0uc2Nyb2xsVG9wO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGRvbS5zY3JvbGxUbyh1bmRlZmluZWQsIHRvcCwgZHVyYXRpb24sIGVhc2luZywgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBzY3JvbGxMZWZ0KCkge1xuICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjMpLCBfa2V5MyA9IDA7IF9rZXkzIDwgX2xlbjM7IF9rZXkzKyspIHtcbiAgICBhcmdzW19rZXkzXSA9IGFyZ3VtZW50c1tfa2V5M107XG4gIH1cblxuICB2YXIgbGVmdCA9IGFyZ3NbMF0sXG4gICAgICBkdXJhdGlvbiA9IGFyZ3NbMV0sXG4gICAgICBlYXNpbmcgPSBhcmdzWzJdLFxuICAgICAgY2FsbGJhY2sgPSBhcmdzWzNdO1xuXG4gIGlmIChhcmdzLmxlbmd0aCA9PT0gMyAmJiB0eXBlb2YgZWFzaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgbGVmdCA9IGFyZ3NbMF07XG4gICAgZHVyYXRpb24gPSBhcmdzWzFdO1xuICAgIGNhbGxiYWNrID0gYXJnc1syXTtcbiAgICBlYXNpbmcgPSBhcmdzWzNdO1xuICB9XG5cbiAgdmFyIGRvbSA9IHRoaXM7XG5cbiAgaWYgKHR5cGVvZiBsZWZ0ID09PSAndW5kZWZpbmVkJykge1xuICAgIGlmIChkb20ubGVuZ3RoID4gMCkgcmV0dXJuIGRvbVswXS5zY3JvbGxMZWZ0O1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGRvbS5zY3JvbGxUbyhsZWZ0LCB1bmRlZmluZWQsIGR1cmF0aW9uLCBlYXNpbmcsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gYW5pbWF0ZShpbml0aWFsUHJvcHMsIGluaXRpYWxQYXJhbXMpIHtcbiAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICB2YXIgZWxzID0gdGhpcztcbiAgdmFyIGEgPSB7XG4gICAgcHJvcHM6IE9iamVjdC5hc3NpZ24oe30sIGluaXRpYWxQcm9wcyksXG4gICAgcGFyYW1zOiBPYmplY3QuYXNzaWduKHtcbiAgICAgIGR1cmF0aW9uOiAzMDAsXG4gICAgICBlYXNpbmc6ICdzd2luZycgLy8gb3IgJ2xpbmVhcidcblxuICAgICAgLyogQ2FsbGJhY2tzXG4gICAgICBiZWdpbihlbGVtZW50cylcbiAgICAgIGNvbXBsZXRlKGVsZW1lbnRzKVxuICAgICAgcHJvZ3Jlc3MoZWxlbWVudHMsIGNvbXBsZXRlLCByZW1haW5pbmcsIHN0YXJ0LCB0d2VlblZhbHVlKVxuICAgICAgKi9cblxuICAgI
118H0sIGluaXRpYWxQYXJhbXMpLFxuICAgIGVsZW1lbnRzOiBlbHMsXG4gICAgYW5pbWF0aW5nOiBmYWxzZSxcbiAgICBxdWU6IFtdLFxuICAgIGVhc2luZ1Byb2dyZXNzOiBmdW5jdGlvbiBlYXNpbmdQcm9ncmVzcyhlYXNpbmcsIHByb2dyZXNzKSB7XG4gICAgICBpZiAoZWFzaW5nID09PSAnc3dpbmcnKSB7XG4gICAgICAgIHJldHVybiAwLjUgLSBNYXRoLmNvcyhwcm9ncmVzcyAqIE1hdGguUEkpIC8gMjtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBlYXNpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGVhc2luZyhwcm9ncmVzcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcm9ncmVzcztcbiAgICB9LFxuICAgIHN0b3A6IGZ1bmN0aW9uIHN0b3AoKSB7XG4gICAgICBpZiAoYS5mcmFtZUlkKSB7XG4gICAgICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShhLmZyYW1lSWQpO1xuICAgICAgfVxuXG4gICAgICBhLmFuaW1hdGluZyA9IGZhbHNlO1xuICAgICAgYS5lbGVtZW50cy5lYWNoKGZ1bmN0aW9uIChlbCkge1xuICAgICAgICB2YXIgZWxlbWVudCA9IGVsO1xuICAgICAgICBkZWxldGUgZWxlbWVudC5kb203QW5pbWF0ZUluc3RhbmNlO1xuICAgICAgfSk7XG4gICAgICBhLnF1ZSA9IFtdO1xuICAgIH0sXG4gICAgZG9uZTogZnVuY3Rpb24gZG9uZShjb21wbGV0ZSkge1xuICAgICAgYS5hbmltYXRpbmcgPSBmYWxzZTtcbiAgICAgIGEuZWxlbWVudHMuZWFjaChmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgdmFyIGVsZW1lbnQgPSBlbDtcbiAgICAgICAgZGVsZXRlIGVsZW1lbnQuZG9tN0FuaW1hdGVJbnN0YW5jZTtcbiAgICAgIH0pO1xuICAgICAgaWYgKGNvbXBsZXRlKSBjb21wbGV0ZShlbHMpO1xuXG4gICAgICBpZiAoYS5xdWUubGVuZ3RoID4gMCkge1xuICAgICAgICB2Y
118XIgcXVlID0gYS5xdWUuc2hpZnQoKTtcbiAgICAgICAgYS5hbmltYXRlKHF1ZVswXSwgcXVlWzFdKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGFuaW1hdGU6IGZ1bmN0aW9uIGFuaW1hdGUocHJvcHMsIHBhcmFtcykge1xuICAgICAgaWYgKGEuYW5pbWF0aW5nKSB7XG4gICAgICAgIGEucXVlLnB1c2goW3Byb3BzLCBwYXJhbXNdKTtcbiAgICAgICAgcmV0dXJuIGE7XG4gICAgICB9XG5cbiAgICAgIHZhciBlbGVtZW50cyA9IFtdOyAvLyBEZWZpbmUgJiBDYWNoZSBJbml0aWFscyAmIFVuaXRzXG5cbiAgICAgIGEuZWxlbWVudHMuZWFjaChmdW5jdGlvbiAoZWwsIGluZGV4KSB7XG4gICAgICAgIHZhciBpbml0aWFsRnVsbFZhbHVlO1xuICAgICAgICB2YXIgaW5pdGlhbFZhbHVlO1xuICAgICAgICB2YXIgdW5pdDtcbiAgICAgICAgdmFyIGZpbmFsVmFsdWU7XG4gICAgICAgIHZhciBmaW5hbEZ1bGxWYWx1ZTtcbiAgICAgICAgaWYgKCFlbC5kb203QW5pbWF0ZUluc3RhbmNlKSBhLmVsZW1lbnRzW2luZGV4XS5kb203QW5pbWF0ZUluc3RhbmNlID0gYTtcbiAgICAgICAgZWxlbWVudHNbaW5kZXhdID0ge1xuICAgICAgICAgIGNvbnRhaW5lcjogZWxcbiAgICAgICAgfTtcbiAgICAgICAgT2JqZWN0LmtleXMocHJvcHMpLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgICBpbml0aWFsRnVsbFZhbHVlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwsIG51bGwpLmdldFByb3BlcnR5VmFsdWUocHJvcCkucmVwbGFjZSgnLCcsICcuJyk7XG4gICAgICAgICAgaW5pdGlhbFZhbHVlID0gcGFyc2VGbG9hdChpbml0aWFsRnVsbFZhbHVlKTtcbiAgICAgICAgICB1bml0ID0gaW5pdGlhbEZ1bGxWYWx1ZS5yZXBsYWNlKGluaXRpYWxWYWx1ZSwgJycpO1xuICAgICAgICAgIGZpbmFsVmFsdWUgPSBwYXJzZUZsb2F0KHByb3BzW3Byb3BdKTtcbiAgICAgICAgICBmaW5hbEZ1bGxWYWx1ZSA9IHByb3BzW3Byb3BdICsgdW5pdDtcbiAgICAgICAgICBlbGVtZW50c1tpbmRleF1bcHJvcF0gPSB7XG4gICAgICAgICAgICBpbml0aWFsRnVsbFZhbHVlOiBpbml0aWFsRnVsbFZhbHVlLFxuICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiBpbml0aWFsVmFsdWUsXG4gICAgICAgICAgICB1bml0OiB1bml0LFxuICAgICAgICAgICAgZmluYWxWYWx1ZTogZmluYWxWYWx1ZSxcbiAgICAgICAgICAgIGZpbmFsRnVsbFZhbHVlOiBmaW5hbEZ1bGxWYWx1ZSxcbiAgICAgICAgICAgIGN1cnJlbnRWYWx1ZTogaW5pdGlhbFZhbHVlXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHZhciBzdGFydFRpbWUgPSBudWxsO1xuICAgICAgdmFyIHRpbWU7XG4gICAgICB2Y
118XIgZWxlbWVudHNEb25lID0gMDtcbiAgICAgIHZhciBwcm9wc0RvbmUgPSAwO1xuICAgICAgdmFyIGRvbmU7XG4gICAgICB2YXIgYmVnYW4gPSBmYWxzZTtcbiAgICAgIGEuYW5pbWF0aW5nID0gdHJ1ZTtcblxuICAgICAgZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgICB0aW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgIHZhciBwcm9ncmVzcztcbiAgICAgICAgdmFyIGVhc2VQcm9ncmVzczsgLy8gbGV0IGVsO1xuXG4gICAgICAgIGlmICghYmVnYW4pIHtcbiAgICAgICAgICBiZWdhbiA9IHRydWU7XG4gICAgICAgICAgaWYgKHBhcmFtcy5iZWdpbikgcGFyYW1zLmJlZ2luKGVscyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhcnRUaW1lID09PSBudWxsKSB7XG4gICAgICAgICAgc3RhcnRUaW1lID0gdGltZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJhbXMucHJvZ3Jlc3MpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICBwYXJhbXMucHJvZ3Jlc3MoZWxzLCBNYXRoLm1heChNYXRoLm1pbigodGltZSAtIHN0YXJ0VGltZSkgLyBwYXJhbXMuZHVyYXRpb24sIDEpLCAwKSwgc3RhcnRUaW1lICsgcGFyYW1zLmR1cmF0aW9uIC0gdGltZSA8IDAgPyAwIDogc3RhcnRUaW1lICsgcGFyYW1zLmR1cmF0aW9uIC0gdGltZSwgc3RhcnRUaW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgICB2YXIgZWwgPSBlbGVtZW50O1xuICAgICAgICAgIGlmIChkb25lIHx8IGVsLmRvbmUpIHJldHVybjtcbiAgICAgICAgICBPYmplY3Qua2V5cyhwcm9wcykuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgICAgICAgaWYgKGRvbmUgfHwgZWwuZG9uZSkgcmV0dXJuO1xuICAgICAgICAgICAgcHJvZ3Jlc3MgPSBNYXRoLm1heChNYXRoLm1pbigodGltZSAtIHN0YXJ0VGltZSkgLyBwYXJhbXMuZHVyYXRpb24sIDEpLCAwKTtcbiAgICAgICAgICAgIGVhc2VQcm9ncmVzcyA9IGEuZWFzaW5nUHJvZ3Jlc3MocGFyYW1zLmVhc2luZywgcHJvZ3Jlc3MpO1xuICAgICAgICAgICAgdmFyIF9lbCRwcm9wID0gZWxbcHJvcF0sXG4gICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlID0gX2VsJHByb3AuaW5pdGlhbFZhbHVlLFxuICAgICAgICAgICAgICAgIGZpbmFsVmFsdWUgPSBfZWwkcHJvcC5maW5hbFZhbHVlLFxuICAgICAgICAgICAgICAgIHVuaXQgPSBfZWwkcHJvcC51bml0O1xuICAgICAgICAgICAgZWxbcHJvcF0uY3VycmVudFZhbHVlID0gaW5pdGlhbFZhbHVlICsgZWFzZVByb2dyZXNzICogKGZpbmFsVmFsdWUgLSBpbml0aWFsVmFsdWUpO1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRWYWx1ZSA9IGVsW3Byb3BdLmN1cnJlbnRWYWx1ZTtcblxuICAgICAgICAgICAgaWYgKGZpbmFsVmFsdWUgPiBpbml0aWFsVmFsdWUgJiYgY3VycmVudFZhbHVlID49IGZpbmFsVmFsdWUgfHwgZmluYWxWYWx1ZSA8IGluaXRpYWxWYWx1ZSAmJiBjdXJyZW50VmFsdWUgPD0gZmluYWxWYWx1ZSkge1xuICAgICAgICAgICAgICBlbC5jb250YWluZXIuc3R5bGVbcHJvcF0gPSBmaW5hbFZhbHVlICsgdW5pdDtcbiAgICAgICAgICAgICAgcHJvcHNEb25lICs9IDE7XG5cbiAgICAgICAgICAgICAgaWYgKHByb3BzRG9uZSA9PT0gT2JqZWN0LmtleXMocHJvcHMpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGVsLmRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGVsZW1lbnRzRG9uZSArPSAxO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGVsZW1lbnRzRG9uZSA9PT0gZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgICAgYS5kb25lKHBhcmFtcy5jb21wbGV0ZSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZWwuY29udGFpbmVyLnN0eWxlW3Byb3BdID0gY3VycmVudFZhbHVlICsgdW5pdDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChkb25lKSByZXR1cm47IC8vIFRoZW4gY2FsbFxuXG4gICAgICAgIGEuZnJhbWVJZCA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUocmVuZGVyKTtcbiAgICAgIH1cblxuICAgICAgYS5mcmFtZUlkID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShyZW5kZXIpO1xuICAgICAgcmV0dXJuIGE7XG4gICAgfVxuICB9O1xuXG4gIGlmIChhLmVsZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBlbHM7XG4gIH1cblxuICB2YXIgYW5pbWF0ZUluc3RhbmNlO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYS5lbGVtZW50cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGlmIChhLmVsZW1lbnRzW2ldLmRvbTdBbmltYXRlSW5zdGFuY2UpIHtcbiAgICAgIGFuaW1hdGVJbnN0YW5jZSA9IGEuZWxlbWVudHNbaV0uZG9tN0FuaW1hdGVJbnN0YW5jZTtcbiAgICB9IGVsc2UgYS5lbGVtZW50c1tpXS5kb203QW5pbWF0ZUluc3RhbmNlID0gYTtcbiAgfVxuXG4gIGlmICghYW5pbWF0ZUluc3RhbmNlKSB7XG4gICAgYW5pbWF0ZUluc3RhbmNlID0gYTtcbiAgfVxuXG4gIGlmIChpbml0aWFsUHJvcHMgPT09ICdzdG9wJykge1xuICAgIGFuaW1hdGVJbnN0YW5jZS5zdG9wKCk7XG4gIH0gZWxzZSB7XG4gICAgYW5pbWF0ZUluc3RhbmNlLmFuaW1hdGUoYS5wcm9wcywgYS5wYXJhbXMpO1xuICB9XG5cbiAgcmV0dXJuIGVscztcbn1cblxuZnVuY3Rpb24gc3RvcCgpIHtcbiAgdmFyIGVscyA9IHRoaXM7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBpZiAoZWxzW2ldLmRvbTdBbmltYXRlSW5zdGFuY2UpIHtcbiAgICAgIGVsc1tpXS5kb203QW5pbWF0ZUluc3RhbmNlLnN0b3AoKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIG5vVHJpZ2dlciA9ICdyZXNpemUgc2Nyb2xsJy5zcGxpdCgnICcpO1xuXG5mdW5jdGlvbiBzaG9ydGN1dChuYW1lKSB7XG4gIGZ1bmN0aW9uIGV2ZW50SGFuZGxlcigpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAndW5kZWZpbmVkJykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGlmIChub1RyaWdnZXIuaW5kZXhPZihuYW1lKSA8IDApIHtcbiAgICAgICAgICBpZiAobmFtZSBpbiB0aGlzW2ldKSB0aGlzW2ldW25hbWVdKCk7ZWxzZSB7XG4gICAgICAgICAgICAkKHRoaXNbaV0pLnRyaWdnZXIobmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybi
118B0aGlzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm9uLmFwcGx5KHRoaXMsIFtuYW1lXS5jb25jYXQoYXJncykpO1xuICB9XG5cbiAgcmV0dXJuIGV2ZW50SGFuZGxlcjtcbn1cblxudmFyIGNsaWNrID0gc2hvcnRjdXQoJ2NsaWNrJyk7XG52YXIgYmx1ciA9IHNob3J0Y3V0KCdibHVyJyk7XG52YXIgZm9jdXMgPSBzaG9ydGN1dCgnZm9jdXMnKTtcbnZhciBmb2N1c2luID0gc2hvcnRjdXQoJ2ZvY3VzaW4nKTtcbnZhciBmb2N1c291dCA9IHNob3J0Y3V0KCdmb2N1c291dCcpO1xudmFyIGtleXVwID0gc2hvcnRjdXQoJ2tleXVwJyk7XG52YXIga2V5ZG93biA9IHNob3J0Y3V0KCdrZXlkb3duJyk7XG52YXIga2V5cHJlc3MgPSBzaG9ydGN1dCgna2V5cHJlc3MnKTtcbnZhciBzdWJtaXQgPSBzaG9ydGN1dCgnc3VibWl0Jyk7XG52YXIgY2hhbmdlID0gc2hvcnRjdXQoJ2NoYW5nZScpO1xudmFyIG1vdXNlZG93biA9IHNob3J0Y3V0KCdtb3VzZWRvd24nKTtcbnZhciBtb3VzZW1vdmUgPSBzaG9ydGN1dCgnbW91c2Vtb3ZlJyk7XG52YXIgbW91c2V1cCA9IHNob3J0Y3V0KCdtb3VzZXVwJyk7XG52YXIgbW91c2VlbnRlciA9IHNob3J0Y3V0KCdtb3VzZWVudGVyJyk7XG52YXIgbW91c2VsZWF2ZSA9IHNob3J0Y3V0KCdtb3VzZWxlYXZlJyk7XG52YXIgbW91c2VvdXQgPSBzaG9ydGN1dCgnbW91c2VvdXQnKTtcbnZhciBtb3VzZW92ZXIgPSBzaG9ydGN1dCgnbW91c2VvdmVyJyk7XG52YXIgdG91Y2hzdGFydCA9IHNob3J0Y3V0KCd0b3VjaHN0YXJ0Jyk7XG52YXIgdG91Y2hlbmQgPSBzaG9ydGN1dCgndG91Y2hlbmQnKTtcbnZhciB0b3VjaG1vdmUgPSBzaG9ydGN1dCgndG91Y2htb3ZlJyk7XG52YXIgcmVzaXplID0gc2hvcnRjdXQoJ3Jlc2l6ZScpO1xudmFyIHNjcm9sbCA9IHNob3J0Y3V0KCdzY3JvbGwnKTtcblxuZXhwb3J0IGRlZmF1bHQgJDtcbmV4cG9ydCB7ICQsIGFkZCwgYWRkQ2xhc3MsIGFuaW1hdGUsIGFuaW1hdGlvbkVuZCwgYXBwZW5kLCBhcHBlbmRUbywgYX
118R0ciwgYmx1ciwgY2hhbmdlLCBjaGlsZHJlbiwgY2xpY2ssIGNsb3Nlc3QsIGNzcywgZGF0YSwgZGF0YXNldCwgZGV0YWNoLCBlYWNoLCBlbXB0eSwgZXEsIGZpbHRlciwgZmluZCwgZm9jdXMsIGZvY3VzaW4sIGZvY3Vzb3V0LCBoYXNDbGFzcywgaGVpZ2h0LCBoaWRlLCBodG1sLCBpbmRleCwgaW5zZXJ0QWZ0ZXIsIGluc2VydEJlZm9yZSwgaXMsIGtleWRvd24sIGtleXByZXNzLCBrZXl1cCwgbW91c2Vkb3duLCBtb3VzZWVudGVyLCBtb3VzZWxlYXZlLCBtb3VzZW1vdmUsIG1vdXNlb3V0LCBtb3VzZW92ZXIsIG1vdXNldXAsIG5leHQsIG5leHRBbGwsIG9mZiwgb2Zmc2V0LCBvbiwgb25jZSwgb3V0ZXJIZWlnaHQsIG91dGVyV2lkdGgsIHBhcmVudCwgcGFyZW50cywgcHJlcGVuZCwgcHJlcGVuZFRvLCBwcmV2LCBwcmV2QWxsLCBwcm9wLCByZW1vdmUsIHJlbW92ZUF0dHIsIHJlbW92ZUNsYXNzLCByZW1vdmVEYXRhLCByZXNpemUsIHNjcm9sbCwgc2Nyb2xsTGVmdCwgc2Nyb2xsVG8sIHNjcm9sbFRvcCwgc2hvdywgc2libGluZ3MsIHN0b3AsIHN0eWxlcywgc3VibWl0LCB0ZXh0LCB0b2dnbGVDbGFzcywgdG91Y2hlbmQsIHRvdWNobW92ZSwgdG91Y2hzdGFydCwgdHJhbnNmb3JtLCB0cmFuc2l0aW9uLCB0cmFuc2l0aW9uRW5kLCB0cmlnZ2VyLCB2YWwsIHZhbHVlLCB3aWR0aCB9O1xuIiwiaW1wb3J0IHsgJCwgYWRkQ2xhc3MsIHJlbW92ZUNsYXNzLCBoYXNDbGFzcywgdG9nZ2xlQ2xhc3MsIGF0dHIsIHJlbW92ZUF0dHIsIHRyYW5zZm9ybSwgdHJhbnNpdGlvbiwgb24sIG9mZiwgdHJpZ2dlciwgdHJhbnNpdGlvbkVuZCwgb3V0ZXJXaWR0aCwgb3V0ZXJIZWlnaHQsIHN0eWxlcywgb2Zmc2V0LCBjc3MsIGVhY2gsIGh0bWwsIHRleHQsIGlzLCBpbmRleCwgZXEsIGFwcGVuZCwgcHJlcGVuZCwgbmV4dCwgbmV4dEFsbCwgcHJldiwgcHJldkFsbCwgcGFyZW50LCBwYXJlbnRzLCBjbG9zZXN0LCBmaW5kLCBjaGlsZHJlbiwgZmlsdGVyLCByZW1vdmUgfSBmcm9tICdkb203JztcbnZhciBNZXRob2RzID0ge1xuICBhZGRDbGFzczogYWRkQ2xhc3MsXG4gIHJlbW92ZUNsYXNzOiByZW1vdmVDbGFzcyxcbiAgaGFzQ2xhc3M6IGhhc0NsYXNzLFxuICB0b2dnbGVDbGFzczogdG9nZ2xlQ2xhc3MsXG4gIGF0dHI6IGF0dHIsXG4gIHJlbW92ZUF0dHI6IHJlbW92ZUF0dHIsXG4gIHRyYW5zZm9ybTogdHJhbnNmb3JtLFxuICB0cmFuc2l0aW9uOiB0cmFuc2l0aW9uLFxuICBvbjogb24sXG4gIG9mZjogb2ZmLFxuICB0cmlnZ2VyOiB0cmlnZ2VyLFxuICB0cmFuc2l0aW9uRW5kOiB0cmFuc2l0aW9uRW5kLFxuICBvdXRlcldpZHRoOiBvdXRlcldpZHRoLFxuICBvdXRlckhlaWdodDogb3V0ZXJIZWlnaHQsXG4gIHN0eWxlczogc3R5bGVzLFxuICBvZmZzZXQ6IG9mZnNldCxcbiAgY3NzOiBjc3MsXG4gIGVhY2g6IGVhY2gsXG4gIGh0bWw6IGh0bWwsXG4gIHRleHQ6IHRleHQsXG4gIGlzOiBpcyxcbiAgaW5kZXg6IGluZGV4LFxuICBlcTogZXEsXG4gIGFwcGVuZDogYXBwZW5kLFxuICBwcmVwZW5kOiBwcmVwZW5kLFxuICBuZXh0OiBuZXh0LFxuICBuZXh0QWxsOiBuZXh0QWxsLFxuICBwcmV2OiBwcmV2LFxuICBwcmV2QWxsOiBwcmV2QWxsLFxuICBwYXJlbnQ6IHBhcmVudCxcbiAgcGFyZW50czogcGFyZW50cyxcbiAgY2xvc2VzdDogY2xvc2VzdCxcbiAgZmluZDogZmluZCxcbiAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICBmaWx0ZXI6IGZpbHRlcixcbiAgcmVtb3ZlOiByZW1vdmVcbn07XG5PYmplY3Qua2V5cyhNZXRob2RzKS5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2ROYW1lKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgkLmZuLCBtZXRob2ROYW1lLCB7XG4gICAgdmFsdWU6IE1ldGhvZHNbbWV0aG9kTmFtZV0sXG4gICAgd3JpdGFibGU6IHRydWVcbiAgfSk7XG59KTtcbmV4cG9ydCBkZWZhdWx0ICQ7IiwiaW1wb3J0IHsgZ2V0RG9jdW1lbnQsIGdldFdpbmRvdyB9IGZyb20gJ3Nzci13aW5kb3cnO1xuXG5mdW5jdGlvbiBkZWxldGVQcm9wcyhvYmopIHtcbiAgdmFyIG9iamVjdCA9IG9iajtcbiAgT2JqZWN0LmtleXMob2JqZWN0KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB0cnkge1xuICAgICAgb2JqZWN0W2tleV0gPSBudWxsO1xuICAgIH0gY2F0Y2ggKGUpIHsvLyBubyBnZXR0ZXIgZm9yIG9iamVjdFxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBkZWxldGUgb2JqZWN0W2tleV07XG4gICAgfSBjYXRjaCAoZSkgey8vIHNvbWV0aGluZyBnb3Qgd3JvbmdcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBuZXh0VGljayhjYWxsYmFjaywgZGVsYXkpIHtcbiAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHtcbiAgICBkZWxheSA9IDA7XG4gIH1cblxuICByZXR1cm4gc2V0VGltZW91dChjYWxsYmFjaywgZGVsYXkpO1xufVxuXG5mdW5jdGlvbiBub3coKSB7XG4gIHJldHVybiBEYXRlLm5vdygpO1xufVxuXG5mdW5jdGlvbiBnZXRDb21wdXRlZFN0eWxlKGVsKSB7XG4gIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgdmFyIHN0eWxlO1xuXG4gIGlmICh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSkge1xuICAgIHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwsIG51bGwpO1xuICB9XG5cbiAgaWYgKCFzdHlsZSAmJiBlbC5jdXJyZW50U3R5bGUpIHtcbiAgICBzdHlsZSA9IGVsLmN1cnJlbnRTdHlsZTtcbiAgfVxuXG4gIGlmICghc3R5bGUpIHtcbiAgICBzdHlsZSA9IGVsLnN0eWxlO1xuICB9XG5cbiAgcmV0dXJuIHN0eWxlO1xufVxuXG5mdW5jdGlvbiBnZXRUcmFuc2xhdGUoZWwsIGF4aXMpIHtcbiAgaWYgKGF4aXMgPT09IHZvaWQgMCkge1xuICAgIGF4aXMgPSAneCc7XG4gIH1cblxuICB2YXIgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gIHZhciBtYXRyaXg7XG4gIHZhciBjdXJUcmFuc2Zvcm07XG4gIHZhciB0cmFuc2Zvcm1NYXRyaXg7XG4gIHZhciBjdXJTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWwsIG51bGwpO1xuXG4gIGlmICh3aW5kb3cuV2ViS2l0Q1NTTWF0cml4KSB7XG4gICAgY3VyVHJhbnNmb3JtID0gY3VyU3R5bGUudHJhbnNmb3JtIHx8IGN1clN0eWxlLndlYmtpdFRyYW5zZm9ybTtcblxuICAgIGlmIChjdXJUcmFuc2Zvcm0uc3BsaXQoJywnKS5sZW5ndGggPiA2KSB7XG4gICAgICBjdXJUcmFuc2Zvcm0gPSBjdXJUcmFuc2Zvcm0uc3BsaXQoJywgJykubWFwKGZ1bmN0aW9uIChhKSB7XG4gICAgICAgI
118HJldHVybiBhLnJlcGxhY2UoJywnLCAnLicpO1xuICAgICAgfSkuam9pbignLCAnKTtcbiAgICB9IC8vIFNvbWUgb2xkIHZlcnNpb25zIG9mIFdlYmtpdCBjaG9rZSB3aGVuICdub25lJyBpcyBwYXNzZWQ7IHBhc3NcbiAgICAvLyBlbXB0eSBzdHJpbmcgaW5zdGVhZCBpbiB0aGlzIGNhc2VcblxuXG4gICAgdHJhbnNmb3JtTWF0cml4ID0gbmV3IHdpbmRvdy5XZWJLaXRDU1NNYXRyaXgoY3VyVHJhbnNmb3JtID09PSAnbm9uZScgPyAnJyA6IGN1clRyYW5zZm9ybSk7XG4gIH0gZWxzZSB7XG4gICAgdHJhbnNmb3JtTWF0cml4ID0gY3VyU3R5bGUuTW96VHJhbnNmb3JtIHx8IGN1clN0eWxlLk9UcmFuc2Zvcm0gfHwgY3VyU3R5bGUuTXNUcmFuc2Zvcm0gfHwgY3VyU3R5bGUubXNUcmFuc2Zvcm0gfHwgY3VyU3R5bGUudHJhbnNmb3JtIHx8IGN1clN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3RyYW5zZm9ybScpLnJlcGxhY2UoJ3RyYW5zbGF0ZSgnLCAnbWF0cml4KDEsIDAsIDAsIDEsJyk7XG4gICAgbWF0cml4ID0gdHJhbnNmb3JtTWF0cml4LnRvU3RyaW5nKCkuc3BsaXQoJywnKTtcbiAgfVxuXG4gIGlmIChheGlzID09PSAneCcpIHtcbiAgICAvLyBMYXRlc3QgQ2hyb21lIGFuZCB3ZWJraXRzIEZpeFxuICAgIGlmICh3aW5kb3cuV2ViS2l0Q1NTTWF0cml4KSBjdXJUcmFuc2Zvcm0gPSB0cmFuc2Zvcm1NYXRyaXgubTQxOyAvLyBDcmF6eSBJRTEwIE1hdHJpeFxuICAgIGVsc2UgaWYgKG1hdHJpeC5sZW5ndGggPT09IDE2KSBjdXJUcmFuc2Zvcm0gPSBwYXJzZUZsb2F0KG1hdHJpeFsxMl0pOyAvLyBOb3JtYWwgQnJvd3NlcnNcbiAgICAgIGVsc2UgY3VyVHJhbnNmb3JtID0gcGFyc2VGbG9hdChtYXRyaXhbNF0pO1xuICB9XG5cbiAgaWYgKGF4aXMgPT09ICd5Jykge1xuICAgIC8vIExhdGVzdCBDaHJvbWUgYW5kIHdlYmtpdHMgRml4XG4gICAgaWYgKHdpbmRvdy5XZWJLaXRDU1NNYXRyaXgpIGN1clRyYW5zZm9ybSA9IHRyYW5zZm9ybU1hdHJpeC5tNDI7IC8vIENyYXp5IElFMTAgTWF0cml4XG4gICAgZWxzZSBpZiAobWF0cml4Lmxlbmd0aCA9PT0gMTYpIGN1clRyYW5zZm9ybSA9IHBhcnNlRmxvYXQobWF0cml4WzEzXSk7IC8vIE5vcm1hbCBCcm93c2Vyc1xuICAgICAgZWxzZSBjdXJUcmFuc2Zvcm0gPSBwYXJzZUZsb2F0KG1hdHJpeFs1XSk7XG4gIH1cblxuICByZXR1cm4gY3VyVHJhbnNmb3JtIHx8IDA7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KG8pIHtcbiAgcmV0dXJuIHR5cGVvZiBvID09PSAnb2JqZWN0JyAmJiBvICE9PSBudWxsICYmIG8uY29uc3RydWN0b3IgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKSA9PT0gJ09iamVjdCc7XG59XG5cbmZ1bmN0aW9uIGlzTm9kZShub2RlKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5IVE1MRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50O1xuICB9XG5cbiAgcmV0dXJuIG5vZGUgJiYgKG5vZGUubm9kZVR5cGUgPT09IDEgfHwgbm9kZS5ub2RlVHlwZSA9PT0gMTEpO1xufVxuXG5mdW5jdGlvbiBleHRlbmQoKSB7XG4gIHZhciB0byA9IE9iamVjdChhcmd1bWVudHMubGVuZ3RoIDw9IDAgPyB1bmRlZmluZWQgOiBhcmd1bWVudHNbMF0pO1xuICB2YXIgbm9FeHRlbmQgPSBbJ19fcHJvdG9fXycsICdjb25zdHJ1Y3RvcicsICdwcm90b3R5cGUnXTtcblxuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIHZhciBuZXh0U291cmNlID0gaSA8IDAgfHwgYXJndW1lbnRzLmxlbmd0aCA8PSBpID8gdW5kZWZpbmVkIDogYXJndW1lbnRzW2ldO1xuXG4gICAgaWYgKG5leHRTb3VyY2UgIT09IHVuZGVmaW5lZCAmJiBuZXh0U291cmNlICE9PSBudWxsICYmICFpc05vZGUobmV4dFNvdXJjZSkpIHtcbiAgICAgIHZhciBrZXlzQXJyYXkgPSBPYmplY3Qua2V5cyhPYmplY3QobmV4dFNvdXJjZSkpLmZpbHRlcihmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiBub0V4dGVuZC5pbmRleE9mKGtleSkgPCAwO1xuICAgICAgfSk7XG5cbiAgICAgIGZvciAodmFyIG5leHRJbmRleCA9IDAsIGxlbiA9IGtleXNBcnJheS5sZW5ndGg7IG5leHRJbmRleCA8IGxlbjsgbmV4dEluZGV4ICs9IDEpIHtcbiAgICAgICAgdmFyIG5leHRLZXkgPSBrZXlzQXJyYXlbbmV4dEluZGV4XTtcbiAgICAgICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG5leHRTb3VyY2UsIG5leHRLZXkpO1xuXG4gICAgICAgIGlmIChkZXNjICE9PSB1bmRlZmluZWQgJiYgZGVzYy5lbnVtZXJhYmxlKSB7XG4gICAgICAgICAgaWYgKGlzT2JqZWN0KHRvW25leHRLZXldKSAmJiBpc09iamVjdChuZXh0U291cmNlW25leHRLZXldKSkge1xuICAgICAgICAgICAgaWYgKG5leHRTb3VyY2VbbmV4dEtleV0uX19zd2lwZXJfXykge1xuICAgICAgICAgICAgICB0b1tuZXh0S2V5XSA9IG5leHRTb3VyY2VbbmV4dEtleV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBleHRlbmQodG9bbmV4dEtleV0sIG5leHRTb3VyY2VbbmV4dEtleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoIWlzT2JqZWN0KHRvW25leHRLZXldKSAmJiBpc09iamVjdChuZXh0U291cmNlW25leHRLZXldKSkge1xuICAgICAgICAgICAgdG9bbmV4dEtleV0gPSB7fTtcblxuICAgICAgICAgICAgaWYgKG5leHRTb3VyY2VbbmV4dEtleV0uX19zd2lwZXJfXykge1xuICAgICAgICAgICAgICB0b1tuZXh0S2V5XSA9IG5leHRTb3VyY2VbbmV4dEtleV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBleHRlbmQodG9bbmV4dEtleV0sIG5leHRTb3VyY2VbbmV4dEtleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b1tuZXh0S2V5XSA9IG5leHRTb3VyY2VbbmV4dEtleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRvO1xufVxuXG5mdW5jdGlvbiBiaW5kTW9kdWxlTWV0aG9kcyhpbnN0YW5jZSwgb2JqKSB7XG4gIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKGlzT2JqZWN0KG9ialtrZXldKSkge1xuICAgICAgT2JqZWN0LmtleXMob2JqW2tleV0pLmZvckVhY2goZnVuY3Rpb24gKHN1YktleSkge1xuICAgICAgICBpZiAodHlwZW9mIG9ialtrZXldW3N1YktleV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBvYmpba2V5XVtzdWJLZXldID0gb2JqW2tleV1bc3ViS2V5XS5iaW5kKGluc3RhbmNlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaW5zdGFuY2Vba2V5XSA9IG9ialtrZXldO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY2xhc3Nlc1RvU2VsZWN0b3IoY2xhc3Nlcykge1xuICBpZiAoY2xhc3NlcyA9PT0gdm9pZCAwKSB7XG4gICAgY2xhc3NlcyA9ICcnO1xuICB9XG5cbiAgcmV0dXJuIFwiLlwiICsgY2xhc3Nlcy50cmltKCkucmVwbGFjZSgvKFtcXC46IVxcL10pL2csICdcXFxcJDEnKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gIC5yZXBsYWNlKC8gL2csICcuJyk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRJZk5vdERlZmluZWQoJGNvbnRhaW5lciwgcGFyYW1zLCBjcmVhdGVFbGVtZW50cywgY2hlY2tQcm9wcykge1xuICB2YXIgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG4gIGlmIChjcmVhdGVFbGVtZW50cykge1xuICAgIE9iamVjdC5rZXlzKGNoZWNrUHJvcHMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgaWYgKCFwYXJhbXNba2V5XSAmJiBwYXJhbXMuYXV0byA9PT0gdHJ1ZSkge1xuICAgICAgICB2Y
118XIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9IGNoZWNrUHJvcHNba2V5XTtcbiAgICAgICAgJGNvbnRhaW5lci5hcHBlbmQoZWxlbWVudCk7XG4gICAgICAgIHBhcmFtc1trZXldID0gZWxlbWVudDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBwYXJhbXM7XG59XG5cbmV4cG9ydCB7IGRlbGV0ZVByb3BzLCBuZXh0VGljaywgbm93LCBnZXRUcmFuc2xhdGUsIGlzT2JqZWN0LCBleHRlbmQsIGJpbmRNb2R1bGVNZXRob2RzLCBnZXRDb21wdXRlZFN0eWxlLCBjbGFzc2VzVG9TZWxlY3RvciwgY3JlYXRlRWxlbWVudElmTm90RGVmaW5lZCB9OyIsImltcG9ydCB7IGdldFdpbmRvdywgZ2V0RG9jdW1lbnQgfSBmcm9tICdzc3Itd2luZG93JztcbnZhciBzdXBwb3J0O1xuXG5mdW5jdGlvbiBjYWxjU3VwcG9ydCgpIHtcbiAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICB2YXIgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICByZXR1cm4ge1xuICAgIHRvdWNoOiAhISgnb250b3VjaHN0YXJ0JyBpbiB3aW5kb3cgfHwgd2luZG93LkRvY3VtZW50VG91Y2ggJiYgZG9jdW1lbnQgaW5zdGFuY2VvZiB3aW5kb3cuRG9jdW1lbnRUb3VjaCksXG4gICAgcG9pbnRlckV2ZW50czogISF3aW5kb3cuUG9pbnRlckV2ZW50ICYmICdtYXhUb3VjaFBvaW50cycgaW4gd2luZG93Lm5hdmlnYXRvciAmJiB3aW5kb3cubmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzID49IDAsXG4gICAgb2JzZXJ2ZXI6IGZ1bmN0aW9uIGNoZWNrT2JzZXJ2ZXIoKSB7XG4gICAgICByZXR1cm4gJ011dGF0aW9uT2JzZXJ2ZXInIGluIHdpbmRvdyB8fCAnV2Via2l0TXV0YXRpb25PYnNlcnZlcicgaW4gd2luZG93O1xuICAgIH0oKSxcbiAgICBwYXNzaXZlTGlzdGVuZXI6IGZ1bmN0aW9uIGNoZWNrUGFzc2l2ZUxpc3RlbmVyKCkge1xuICAgICAgdmFyIHN1cHBvcnRzUGFzc2l2ZSA9IGZhbHNlO1xuXG4gICAgICB0cnkge1xuICAgICAgICB2Y
118XIgb3B0cyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ3Bhc3NpdmUnLCB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICBzdXBwb3J0c1Bhc3NpdmUgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0ZXN0UGFzc2l2ZUxpc3RlbmVyJywgbnVsbCwgb3B0cyk7XG4gICAgICB9IGNhdGNoIChlKSB7Ly8gTm8gc3VwcG9ydFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3VwcG9ydHNQYXNzaXZlO1xuICAgIH0oKSxcbiAgICBnZXN0dXJlczogZnVuY3Rpb24gY2hlY2tHZXN0dXJlcygpIHtcbiAgICAgIHJldHVybiAnb25nZXN0dXJlc3RhcnQnIGluIHdpbmRvdztcbiAgICB9KClcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0U3VwcG9ydCgpIHtcbiAgaWYgKCFzdXBwb3J0KSB7XG4gICAgc3VwcG9ydCA9IGNhbGNTdXBwb3J0KCk7XG4gIH1cblxuICByZXR1cm4gc3VwcG9ydDtcbn1cblxuZXhwb3J0IHsgZ2V0U3VwcG9ydCB9OyIsImltcG9ydCB7IGdldFdpbmRvdyB9IGZyb20gJ3Nzci13aW5kb3cnO1xuaW1wb3J0IHsgZ2V0U3VwcG9ydCB9IGZyb20gJy4vZ2V0LXN1cHBvcnQnO1xudmFyIGRldmljZTtcblxuZnVuY3Rpb24gY2FsY0RldmljZShfdGVtcCkge1xuICB2YXIgX3JlZiA9IF90ZW1wID09PSB2b2lkIDAgPyB7fSA6IF90ZW1wLFxuICAgICAgdXNlckFnZW50ID0gX3JlZi51c2VyQWdlbnQ7XG5cbiAgdmFyIHN1cHBvcnQgPSBnZXRTdXBwb3J0KCk7XG4gIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgdmFyIHBsYXRmb3JtID0gd2luZG93Lm5hdmlnYXRvci5wbGF0Zm9ybTtcbiAgdmFyIHVhID0gdXNlckFnZW50IHx8IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50O1xuICB2YXIgZGV2aWNlID0ge1xuICAgIGlvczogZmFsc2UsXG4gICAgYW5kcm9pZDogZmFsc2VcbiAgfTtcbiAgdmFyIHNjcmVlbldpZHRoID0gd2luZG93LnNjcmVlbi53aWR0aDtcbiAgdmFyIHNjcmVlbkhlaWdodCA9IHdpbmRvdy5zY3JlZW4uaGVpZ2h0O1xuICB2YXIgYW5kcm9pZCA9IHVhLm1hdGNoKC8oQW5kcm9pZCk7P1tcXHNcXC9dKyhbXFxkLl0rKT8vKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gIHZhciBpcGFkID0gdWEubWF0Y2goLyhpUGFkKS4qT1NcXHMoW1xcZF9dKykvKTtcbiAgdmFyIGlwb2QgPSB1YS5tYXRjaCgvKGlQb2QpKC4qT1NcXHMoW1xcZF9dKykpPy8pO1xuICB2YXIgaXBob25lID0gIWlwYWQgJiYgdWEubWF0Y2goLyhpUGhvbmVcXHNPU3xpT1MpXFxzKFtcXGRfXSspLyk7XG4gIHZhciB3aW5kb3dzID0gcGxhdGZvcm0gPT09ICdXaW4zMic7XG4gIHZhciBtYWNvcyA9IHBsYXRmb3JtID09PSAnTWFjSW50ZWwnOyAvLyBpUGFkT3MgMTMgZml4XG5cbiAgdmFyIGlQYWRTY3JlZW5zID0gWycxMDI0eDEzNjYnLCAnMTM2NngxMDI0JywgJzgzNHgxMTk0JywgJzExOTR4ODM0JywgJzgzNHgxMTEyJywgJzExMTJ4ODM0JywgJzc2OHgxMDI0JywgJzEwMjR4NzY4JywgJzgyMHgxMTgwJywgJzExODB4ODIwJywgJzgxMHgxMDgwJywgJzEwODB4ODEwJ107XG5cbiAgaWYgKCFpcGFkICYmIG1hY29zICYmIHN1cHBvcnQudG91Y2ggJiYgaVBhZFNjcmVlbnMuaW5kZXhPZihzY3JlZW5XaWR0aCArIFwieFwiICsgc2NyZWVuSGVpZ2h0KSA+PSAwKSB7XG4gICAgaXBhZCA9IHVhLm1hdGNoKC8oVmVyc2lvbilcXC8oW1xcZC5dKykvKTtcbiAgICBpZiAoIWlwYWQpIGlwYWQgPSBbMCwgMSwgJzEzXzBfMCddO1xuICAgIG1hY29zID0gZmFsc2U7XG4gIH0gLy8gQW5kcm9pZFxuXG5cbiAgaWYgKGFuZHJvaWQgJiYgIXdpbmRvd3MpIHtcbiAgICBkZXZpY2Uub3MgPSAnYW5kcm9pZCc7XG4gICAgZGV2aWNlLmFuZHJvaWQgPSB0cnVlO1xuICB9XG5cbiAgaWYgKGlwYWQgfHwgaXBob25lIHx8IGlwb2QpIHtcbiAgICBkZXZpY2Uub3MgPSAnaW9zJztcbiAgICBkZXZpY2UuaW9zID0gdHJ1ZTtcbiAgfSAvLyBFeHBvcnQgb2JqZWN0XG5cblxuICByZXR1cm4gZGV2aWNlO1xufVxuXG5mdW5jdGlvbiBnZXREZXZpY2Uob3ZlcnJpZGVzKSB7XG4gIGlmIChvdmVycmlkZXMgPT09IHZvaWQgMCkge1xuICAgIG92ZXJyaWRlcyA9IHt9O1xuICB9XG5cbiAgaWYgKCFkZXZpY2UpIHtcbiAgICBkZXZpY2UgPSBjYWxjRGV2aWNlKG92ZXJyaWRlcyk7XG4gIH1cblxuICByZXR1cm4gZGV2aWNlO1xufVxuXG5leHBvcnQgeyBnZXREZXZpY2UgfTsiLCJpbXBvcnQgeyBnZXRXaW5kb3cgfSBmcm9tICdzc3Itd2luZG93JztcbnZhciBicm93c2VyO1xuXG5mdW5jdGlvbiBjYWxjQnJvd3NlcigpIHtcbiAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdygpO1xuXG4gIGZ1bmN0aW9uIGlzU2FmYXJpKCkge1xuICAgIHZhciB1YSA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIHVhLmluZGV4T2YoJ3NhZmFyaScpID49IDAgJiYgdWEuaW5kZXhPZignY2hyb21lJykgPCAwICYmIHVhLmluZGV4T2YoJ2FuZHJvaWQnKSA8IDA7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGlzRWRnZTogISF3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvRWRnZS9nKSxcbiAgICBpc1NhZmFyaTogaXNTYWZhcmkoKSxcbiAgICBpc1dlYlZpZXc6IC8oaVBob25lfGlQb2R8aVBhZCkuKkFwcGxlV2ViS2l0KD8hLipTYWZhcmkpL2kudGVzdCh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudClcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0QnJvd3NlcigpIHtcbiAgaWYgKCFicm93c2VyKSB7XG4gICAgYnJvd3NlciA9IGNhbGNCcm93c2VyKCk7XG4gIH1cblxuICByZXR1cm4gYnJvd3Nlcjtcbn1cblxuZXhwb3J0IHsgZ2V0QnJvd3NlciB9OyIsImltcG9ydCB7IGdldFdpbmRvdyB9IGZyb20gJ3Nzci13aW5kb3cnO1xuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSAnLi4vLi4vdXRpbHMvdXRpbHMnO1xuXG52YXIgc3VwcG9ydHNSZXNpemVPYnNlcnZlciA9IGZ1bmN0aW9uIHN1cHBvcnRzUmVzaXplT2JzZXJ2ZXIoKSB7XG4gIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgcmV0dXJuIHR5cGVvZiB3aW5kb3cuUmVzaXplT2JzZXJ2ZXIgIT09ICd1bmRlZmluZWQnO1xufTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAncmVzaXplJyxcbiAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgZXh0ZW5kKHN3aXBlciwge1xuICAgICAgcmVzaXplOiB7XG4gICAgICAgIG9ic2VydmVyOiBudWxsLFxuICAgICAgICBjcmVhdGVPYnNlcnZlcjogZnVuY3Rpb24gY3JlYXRlT2JzZXJ2ZXIoKSB7XG4gICAgICAgICAgaWYgKCFzd2lwZXIgfHwgc3dpcGVyLmRlc3Ryb3llZCB8fCAhc3dpcGVyLmluaXRpYWxpemVkKSByZXR1cm47XG4gICAgICAgICAgc3dpcGVyLnJlc2l6ZS5vYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihmdW5jdGlvbiAoZW50cmllcykge1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc3dpcGVyLndpZHR
118oLFxuICAgICAgICAgICAgICAgIGhlaWdodCA9IHN3aXBlci5oZWlnaHQ7XG4gICAgICAgICAgICB2YXIgbmV3V2lkdGggPSB3aWR0aDtcbiAgICAgICAgICAgIHZhciBuZXdIZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgICAgICBlbnRyaWVzLmZvckVhY2goZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgICAgICAgdmFyIGNvbnRlbnRCb3hTaXplID0gX3JlZi5jb250ZW50Qm94U2l6ZSxcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnRSZWN0ID0gX3JlZi5jb250ZW50UmVjdCxcbiAgICAgICAgICAgICAgICAgIHRhcmdldCA9IF9yZWYudGFyZ2V0O1xuICAgICAgICAgICAgICBpZiAodGFyZ2V0ICYmIHRhcmdldCAhPT0gc3dpcGVyLmVsKSByZXR1cm47XG4gICAgICAgICAgICAgIG5ld1dpZHRoID0gY29udGVudFJlY3QgPyBjb250ZW50UmVjdC53aWR0aCA6IChjb250ZW50Qm94U2l6ZVswXSB8fCBjb250ZW50Qm94U2l6ZSkuaW5saW5lU2l6ZTtcbiAgICAgICAgICAgICAgbmV3SGVpZ2h0ID0gY29udGVudFJlY3QgPyBjb250ZW50UmVjdC5oZWlnaHQgOiAoY29udGVudEJveFNpemVbMF0gfHwgY29udGVudEJveFNpemUpLmJsb2NrU2l6ZTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAobmV3V2lkdGggIT09IHdpZHRoIHx8IG5ld0hlaWdodCAhPT0gaGVpZ2h0KSB7XG4gICAgICAgICAgICAgIHN3aXBlci5yZXNpemUucmVzaXplSGFuZGxlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHN3aXBlci5yZXNpemUub2JzZXJ2ZXIub2JzZXJ2ZShzd2lwZXIuZWwpO1xuICAgICAgICB9LFxuICAgICAgICByZW1vdmVPYnNlcnZlcjogZnVuY3Rpb24gcmVtb3ZlT2JzZXJ2ZXIoKSB7XG4gICAgICAgICAgaWYgKHN3aXBlci5yZXNpemUub2JzZXJ2ZXIgJiYgc3dpcGVyLnJlc2l6ZS5vYnNlcnZlci51bm9ic2VydmUgJiYgc3dpcGVyLmVsKSB7XG4gICAgICAgICAgICBzd2lwZXIucmVzaXplLm9ic2VydmVyLnVub2JzZXJ2ZShzd2lwZXIuZWwpO1xuICAgICAgICAgICAgc3dpcGVyLnJlc2l6ZS5vYnNlcnZlciA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICByZXNpemVIYW5kbGVyOiBmdW5jdGlvbiByZXNpemVIYW5kbGVyKCkge1xuICAgICAgICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQgfHwgIXN3aXBlci5pbml0aWFsaXplZCkgcmV0dXJuO1xuICAgICAgICAgIHN3aXBlci5lbWl0KCdiZWZvcmVSZXNpemUnKTtcbiAgICAgICAgICBzd2lwZXIuZW1pdCgncmVzaXplJyk7XG4gICAgICAgIH0sXG4gICAgICAgIG9yaWVudGF0aW9uQ2hhbmdlSGFuZGxlcjogZnVuY3Rpb24gb3JpZW50YXRpb25DaGFuZ2VIYW5kbGVyKCkge1xuICAgICAgICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQgfHwgIXN3aXBlci5pbml0aWFsaXplZCkgcmV0dXJuO1xuICAgICAgICAgIHN3aXBlci5lbWl0KCdvcmllbnRhdGlvbmNoYW5nZScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH0sXG4gIG9uOiB7XG4gICAgaW5pdDogZnVuY3Rpb24gaW5pdChzd2lwZXIp
118IHtcbiAgICAgIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcblxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMucmVzaXplT2JzZXJ2ZXIgJiYgc3VwcG9ydHNSZXNpemVPYnNlcnZlcigpKSB7XG4gICAgICAgIHN3aXBlci5yZXNpemUuY3JlYXRlT2JzZXJ2ZXIoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBFbWl0IHJlc2l6ZVxuXG5cbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBzd2lwZXIucmVzaXplLnJlc2l6ZUhhbmRsZXIpOyAvLyBFbWl0IG9yaWVudGF0aW9uY2hhbmdlXG5cbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvcmllbnRhdGlvbmNoYW5nZScsIHN3aXBlci5yZXNpemUub3JpZW50YXRpb25DaGFuZ2VIYW5kbGVyKTtcbiAgICB9LFxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koc3dpcGVyKSB7XG4gICAgICB2YXIgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gICAgICBzd2lwZXIucmVzaXplLnJlbW92ZU9ic2VydmVyKCk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgc3dpcGVyLnJlc2l6ZS5yZXNpemVIYW5kbGVyKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdvcmllbnRhdGlvbmNoYW5nZScsIHN3aXBlci5yZXNpemUub3JpZW50YXRpb25DaGFuZ2VIYW5kbGVyKTtcbiAgICB9XG4gIH1cbn07IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuaW1wb3J0IHsgZ2V0V2luZG93IH0gZnJvbSAnc3NyLXdpbmRvdyc7XG5pbXBvcnQgeyBiaW5kTW9kdWxlTWV0aG9kcyB9IGZyb20gJy4uLy4uL3V0aWxzL3V0aWxzJztcbnZhciBPYnNlcnZlciA9IHtcbiAgYXR0YWNoOiBmdW5jdGlvbiBhdHRhY2godGFyZ2V0LCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgT2JzZXJ2ZXJGdW5jID0gd2luZG93Lk11dGF0aW9uT2JzZXJ2ZXIgfHwgd2luZG93LldlYmtpdE11dGF0aW9uT2JzZXJ2ZXI7XG4gICAgdmFyIG9ic2VydmVyID0gbmV3IE9ic2VydmVyRnVuYyhmdW5jdGlvbiAobXV0YXRpb25zKSB7XG4gICAgICAvLyBUaGUgb2JzZXJ2ZXJVcGRhdGUgZXZlbnQgc2hvdWxkIG9ubHkgYmUgdHJpZ2dlcmVkXG4gICAgICAvLyBvbmNlIGRlc3BpdGUgdGhlIG51bWJlciBvZiBtdXRhdGlvbnMuICBBZGRpdGlvbmFsXG4gICAgICAvLyB0cmlnZ2VycyBhcmUgcmVkdW5kYW50IGFuZCBhcmUgdmVyeSBjb3N0bHlcbiAgICAgIGlmIChtdXRhdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHN3aXBlci5lbWl0KCdvYnNlcnZlclVwZGF0ZScsIG11dGF0aW9uc1swXSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIG9ic2VydmVyVXBkYXRlID0gZnVuY3Rpb24gb2JzZXJ2ZXJVcGRhdGUoKSB7XG4gICAgICAgIHN3aXBlci5lbWl0KCdvYnNlcnZlclVwZGF0ZScsIG11dGF0aW9uc1swXSk7XG4gICAgICB9O1xuXG4gICAgICBpZiAod2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSkge1xuICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKG9ic2VydmVyVXBkYXRlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KG9ic2VydmVyVXBkYXRlLCAwKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKHRhcmdldCwge1xuICAgICAgYXR0cmlidXRlczogdHlwZW9mIG9wdGlvbnMuYXR0cmlidXRlcyA9PT0gJ3VuZGVmaW5lZCcgPyB0cnVlIDogb3B0aW9ucy5hdHRyaWJ1dGVzLFxuICAgICAgY2hpbGRMaXN0OiB0eXBlb2Ygb3B0aW9ucy5jaGlsZExpc3QgPT09ICd1bmRlZmluZWQnID8gdHJ1ZSA6IG9wdGlvbnMuY2hpbGRMaXN0LFxuICAgICAgY2hhcmFjdGVyRGF0YTogdHlwZW9mIG9wdGlvbnMuY2hhcmFjdGVyRGF0YSA9PT0gJ3VuZGVmaW5lZCcgPyB0cnVlIDogb3B0aW9ucy5jaGFyYWN0ZXJEYXRhXG4gICAgfSk7XG4gICAgc3dpcGVyLm9ic2VydmVyLm9ic2VydmVycy5wdXNoKG9ic2VydmVyKTtcbiAgfSxcbiAgaW5pdDogZnVuY3Rpb24gaW5pdCgpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICBpZiAoIXN3aXBlci5zdXBwb3J0Lm9ic2VydmVyIHx8ICFzd2lwZXIucGFyYW1zLm9ic2VydmVyKSByZXR1cm47XG5cbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5vYnNlcnZlUGFyZW50cykge1xuICAgICAgdmFyIGNvbnRhaW5lclBhcmVudHMgPSBzd2lwZXIuJGVsLnBhcmVudHMoKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb250YWluZXJQYXJlbnRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIHN3aXBlci5vYnNlcnZlci5hdHRhY2goY29udGFpbmVyUGFyZW50c1tpXSk7XG4gICAgICB9XG4gICAgfSAvLyBPYnNlcnZlIGNvbnRhaW5lclxuXG5cbiAgICBzd2lwZXIub2JzZXJ2ZXIuYXR0YWNoKHN3aXBlci4kZWxbMF0sIHtcbiAgICAgIGNoaWxkTGlzdDogc3dpcGVyLnBhcmFtcy5vYnNlcnZlU2xpZGVDaGlsZHJlblxuICAgIH0pOyAvLyBPYnNlcnZlIHdyYXBwZXJcblxuICAgIHN3aXBlci5vYnNlcnZlci5hdHRhY2goc3dpcGVyLiR3cmFwcGVyRWxbMF0sIHtcbiAgICAgIGF0dHJpYnV0ZXM6IGZhbHNlXG4gICAgfSk7XG4gIH0sXG4gIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgc3dpcGVyLm9ic2VydmVyLm9ic2VydmVycy5mb3JFYWNoKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIH0pO1xuICAgIHN3aXBlci5vYnNlcnZlci5vYnNlcnZlcnMgPSBbXTtcbiAgfVxufTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ29ic2VydmVyJyxcbiAgcGFyYW1zOiB7XG4gICAgb2JzZXJ2ZXI6IGZhbHNlLFxuICAgIG9ic2VydmVQYXJlbnRzOiBmYWxzZSxcbiAgICBvYnNlcnZlU2xpZGVDaGlsZHJlbjogZmFsc2VcbiAgfSxcbiAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgYmluZE1vZHVsZU1ldGhvZHMoc3dpcGVyLCB7XG4gICAgICBvYnNlcnZlcjogX2V4dGVuZHMoe30sIE9ic2VydmVyLCB7XG4gICAgICAgIG9ic2VydmVyczogW11cbiAgICAgIH0pXG4gICAgfSk7XG4gIH0sXG4gIG9uOiB7XG4gICAgaW5pdDogZnVuY3Rpb24gaW5pdChzd2lwZXIp
118IHtcbiAgICAgIHN3aXBlci5vYnNlcnZlci5pbml0KCk7XG4gICAgfSxcbiAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KHN3aXBlcikge1xuICAgICAgc3dpcGVyLm9ic2VydmVyLmRlc3Ryb3koKTtcbiAgICB9XG4gIH1cbn07IiwiLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cbmV4cG9ydCBkZWZhdWx0IHtcbiAgb246IGZ1bmN0aW9uIG9uKGV2ZW50cywgaGFuZGxlciwgcHJpb3JpdHkpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gc2VsZjtcbiAgICB2YXIgbWV0aG9kID0gcHJpb3JpdHkgPyAndW5zaGlmdCcgOiAncHVzaCc7XG4gICAgZXZlbnRzLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmICghc2VsZi5ldmVudHNMaXN0ZW5lcnNbZXZlbnRdKSBzZWxmLmV2ZW50c0xpc3RlbmVyc1tldmVudF0gPSBbXTtcbiAgICAgIHNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XVttZXRob2RdKGhhbmRsZXIpO1xuICAgIH0pO1xuICAgIHJldHVybiBzZWxmO1xuICB9LFxuICBvbmNlOiBmdW5jdGlvbiBvbmNlKGV2ZW50cywgaGFuZGxlciwgcHJpb3JpdHkpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gc2VsZjtcblxuICAgIGZ1bmN0aW9uIG9uY2VIYW5kbGVyKCkge1xuICAgICAgc2VsZi5vZmYoZXZlbnRzLCBvbmNlSGFuZGxlcik7XG5cbiAgICAgIGlmIChvbmNlSGFuZGxlci5fX2VtaXR0ZXJQcm94eSkge1xuICAgICAgICBkZWxldGUgb25jZUhhbmRsZXIuX19lbWl0dGVyUHJveHk7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgfVxuXG4gICAgICBoYW5kbGVyLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgIH1cblxuICAgIG9uY2VIYW5kbGVyLl9fZW1pdHRlclByb3h5ID0gaGFuZGxlcjtcbiAgICByZXR1cm4gc2VsZi5vbihldmVudHMsIG9uY2VIYW5kbGVyLCBwcmlvcml0eSk7XG4gIH0sXG4gIG9uQW55OiBmdW5jdGlvbiBvbkFueShoYW5kbGVyLCBwcmlvcml0eSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBpZiAodHlwZW9mIGhhbmRsZXIgIT09ICdmdW5jdGlvbicpIHJldHVybiBzZWxmO1xuICAgIHZhciBtZXRob2QgPSBwcmlvcml0eSA/ICd1bnNoaWZ0JyA6ICdwdXNoJztcblxuICAgIGlmIChzZWxmLmV2ZW50c0FueUxpc3RlbmVycy5pbmRleE9mKGhhbmRsZXIpIDwgMCkge1xuICAgICAgc2VsZi5ldmVudHNBbnlMaXN0ZW5lcnNbbWV0aG9kXShoYW5kbGVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VsZjtcbiAgfSxcbiAgb2ZmQW55OiBmdW5jdGlvbiBvZmZBbnkoaGFuZGxlcikge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBpZiAoIXNlbGYuZXZlbnRzQW55TGlzdGVuZXJzKSByZXR1cm4gc2VsZjtcbiAgICB2YXIgaW5kZXggPSBzZWxmLmV2ZW50c0FueUxpc3RlbmVycy5pbmRleE9mKGhhbmRsZXIpO1xuXG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIHNlbGYuZXZlbnRzQW55TGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlbGY7XG4gIH0sXG4gIG9mZjogZnVuY3Rpb24gb2ZmKGV2ZW50cywgaGFuZGxlcikge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBpZiAoIXNlbGYuZXZlbnRzTGlzdGVuZXJzKSByZXR1cm4gc2VsZjtcbiAgICBldmVudHMuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBzZWxmLmV2ZW50c0xpc3RlbmVyc1tldmVudF0gPSBbXTtcbiAgICAgIH0gZWxzZSBpZiAoc2VsZi5ldmVudHNMaXN0ZW5lcnNbZXZlbnRdKSB7XG4gICAgICAgIHNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudEhhbmRsZXIsIGluZGV4KSB7XG4gICAgICAgICAgaWYgKGV2ZW50SGFuZGxlciA9PT0gaGFuZGxlciB8fCBldmVudEhhbmRsZXIuX19lbWl0dGVyUHJveHkgJiYgZXZlbnRIYW5kbGVyLl9fZW1pdHRlclByb3h5ID09PSBoYW5kbGVyKSB7XG4gICAgICAgICAgICBzZWxmLmV2ZW50c0xpc3RlbmVyc1tldmVudF0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBzZWxmO1xuICB9LFxuICBlbWl0OiBmdW5jdGlvbiBlbWl0KCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBpZiAoIXNlbGYuZXZlbnRzTGlzdGVuZXJzKSByZXR1cm4gc2VsZjtcbiAgICB2YXIgZXZlbnRzO1xuICAgIHZhciBkYXRhO1xuICAgIHZhciBjb250ZXh0O1xuXG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICBhcmdzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJyB8fCBBcnJheS5pc0FycmF5KGFyZ3NbMF0pKSB7XG4gICAgICBldmVudHMgPSBhcmdzWzBdO1xuICAgICAgZGF0YSA9IGFyZ3Muc2xpY2UoMSwgYXJncy5sZW5ndGgpO1xuICAgICAgY29udGV4dCA9IHNlbGY7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV2ZW50cyA9IGFyZ3NbMF0uZXZlbnRzO1xuICAgICAgZGF0YSA9IGFyZ3NbMF0uZGF0YTtcbiAgICAgIGNvbnRleHQgPSBhcmdzWzBdLmNvbnRleHQgfHwgc2VsZjtcbiAgICB9XG5cbiAgICBkYXRhLnVuc2hpZnQoY29udGV4dCk7XG4gICAgdmFyIGV2ZW50c0FycmF5ID0gQXJyYXkuaXNBcnJheShldmVudHMpID8gZXZlbnRzIDogZXZlbnRzLnNwbGl0KCcgJyk7XG4gICAgZXZlbnRzQXJyYXkuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChzZWxmLmV2ZW50c0FueUxpc3RlbmVycyAmJiBzZWxmLmV2ZW50c0FueUxpc3RlbmVycy5sZW5ndGgpIHtcbiAgICAgICAgc2VsZi5ldmVudHNBbnlMaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnRIYW5kbGVyKSB7XG4gICAgICAgICAgZXZlbnRIYW5kbGVyLmFwcGx5KGNvbnRleHQsIFtldmVudF0uY29uY2F0KGRhdGEpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZWxmLmV2ZW50c0xpc3RlbmVycyAmJiBzZWxmLmV2ZW50c0xpc3RlbmVyc1tldmVudF0pIHtcbiAgICAgICAgc2VsZi5ldmVudHNMaXN0ZW5lcnNbZXZlbnRdLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50SGFuZGxlcikge1xuICAgICAgICAgIGV2ZW50SGFuZGxlci5hcHBseShjb250ZXh0LCBkYXRhKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHNlbGY7XG4gIH1cbn07IiwiaW1wb3J0IHVwZGF0ZVNpemUgZnJvbSAnLi91cGRhdGVTaXplJztcbmltcG9ydCB1cGRhdGVTbGlkZXMgZnJvbSAnLi91cGRhdGVTbGlkZXMnO1xuaW1wb3J0IHVwZGF0ZUF1dG9IZWlnaHQgZnJvbSAnLi91cGRhdGVBdXRvSGVpZ2h0JztcbmltcG9ydCB1cGRhdGVTbGlkZXNPZmZzZXQgZnJvbSAnLi91cGRhdGVTbGlkZXNPZmZzZXQnO1xuaW1wb3J0IHVwZGF0ZVNsaWRlc1Byb2dyZXNzIGZyb20gJy4vdXBkYXRlU2xpZGVzUHJvZ3Jlc3MnO1xuaW1wb3J0IHVwZGF0ZVByb2dyZXNzIGZyb20gJy4vdXBkYXRlUHJvZ3Jlc3MnO1xuaW1wb3J0IHVwZGF0ZVNsaWRlc0NsYXNzZXMgZnJvbSAnLi91cGRhdGVTbGlkZXNDbGFzc2VzJztcbmltcG9ydCB1cGRhdGVBY3RpdmVJbmRleCBmcm9tICcuL3VwZGF0ZUFjdGl2ZUluZGV4JztcbmltcG9ydCB1cGRhdGVDbGlja2VkU2xpZGUgZnJvbSAnLi91cGRhdGVDbGlja2VkU2xpZGUnO1xuZXhwb3J0IGRlZmF1bHQge1xuICB1cGRhdGVTaXplOiB1cGRhdGVTaXplLFxuICB1cGRhdGVTbGlkZXM6IHVwZGF0ZVNsaWRlcyxcbiAgdXBkYXRlQXV0b0hlaWdodDogdXBkYXRlQXV0b0hlaWdodCxcbiAgdXBkYXRlU2xpZGVzT2Zmc2V0OiB1cGRhdGVTbGlkZXNPZmZzZXQsXG4gIHVwZGF0ZVNsaWRlc1Byb2dyZXNzOiB1cGRhdGVTbGlkZXNQcm9ncmVzcyxcbiAgdXBkYXRlUHJvZ3Jlc3M6IHVwZGF0ZVByb2dyZXNzLFxuICB1cGRhdGVTbGlkZXNDbGFzc2VzOiB1cGRhdGVTbGlkZXNDbGFzc2VzLFxuICB1cGRhdGVBY3RpdmVJbmRleDogdXBkYXRlQWN0aXZlSW5kZXgsXG4gIHVwZGF0ZUNsaWNrZWRTbGlkZTogdXBkYXRlQ2xpY2tlZFNsaWRlXG59OyIsImltcG9ydCB7
118IGV4dGVuZCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVwZGF0ZVNpemUoKSB7XG4gIHZhciBzd2lwZXIgPSB0aGlzO1xuICB2YXIgd2lkdGg7XG4gIHZhciBoZWlnaHQ7XG4gIHZhciAkZWwgPSBzd2lwZXIuJGVsO1xuXG4gIGlmICh0eXBlb2Ygc3dpcGVyLnBhcmFtcy53aWR0aCAhPT0gJ3VuZGVmaW5lZCcgJiYgc3dpcGVyLnBhcmFtcy53aWR0aCAhPT0gbnVsbCkge1xuICAgIHdpZHRoID0gc3dpcGVyLnBhcmFtcy53aWR0aDtcbiAgfSBlbHNlIHtcbiAgICB3aWR0aCA9ICRlbFswXS5jbGllbnRXaWR0aDtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc3dpcGVyLnBhcmFtcy5oZWlnaHQgIT09ICd1bmRlZmluZWQnICYmIHN3aXBlci5wYXJhbXMuaGVpZ2h0ICE9PSBudWxsKSB7XG4gICAgaGVpZ2h0ID0gc3dpcGVyLnBhcmFtcy5oZWlnaHQ7XG4gIH0gZWxzZSB7XG4gICAgaGVpZ2h0ID0gJGVsWzBdLmNsaWVudEhlaWdodDtcbiAgfVxuXG4gIGlmICh3aWR0aCA9PT0gMCAmJiBzd2lwZXIuaXNIb3Jpem9udGFsKCkgfHwgaGVpZ2h0ID09PSAwICYmIHN3aXBlci5pc1ZlcnRpY2FsKCkpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gU3VidHJhY3QgcGFkZGluZ3NcblxuXG4gIHdpZHRoID0gd2lkdGggLSBwYXJzZUludCgkZWwuY3NzKCdwYWRkaW5nLWxlZnQnKSB8fCAwLCAxMCkgLSBwYXJzZUludCgkZWwuY3NzKCdwYWRkaW5nLXJpZ2h0JykgfHwgMCwgMTApO1xuICBoZWlnaHQgPSBoZWlnaHQgLSBwYXJzZUludCgkZWwuY3NzKCdwYWRkaW5nLXRvcCcpIHx8IDAsIDEwKSAtIHBhcnNlSW50KCRlbC5jc3MoJ3BhZGRpbmctYm90dG9tJykgfHwgMCwgMTApO1xuICBpZiAoTnVtYmVyLmlzTmFOKHdpZHRoKSkgd2lkdGggPSAwO1xuICBpZiAoTnVtYmVyLmlzTmFOKGhlaWdodCkpIGhlaWdodCA9IDA7XG4gIGV4dGVuZChzd2lwZXIsIHtcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgc2l6ZTogc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gd2lkdGggOiBoZWlnaHRcbiAgfSk7XG59IiwiaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXBkYXRlU2xpZGVzKCkge1xuICB2YXIgc3dpcGVyID0gdGhpcztcblxuICBmdW5jdGlvbiBnZXREaXJlY3Rpb25MYWJlbChwcm9wZXJ0eSkge1xuICAgIGlmIChzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgICB9IC8vIHByZXR0aWVyLWlnbm9yZVxuXG5cbiAgICByZXR1cm4ge1xuICAgICAgJ3dpZHRoJzogJ2hlaWdodCcsXG4gICAgICAnbWFyZ2luLXRvcCc6ICdtYXJnaW4tbGVmdCcsXG4gICAgICAnbWFyZ2luLWJvdHRvbSAnOiAnbWFyZ2luLXJpZ2h0JyxcbiAgICAgICdtYXJnaW4tbGVmdCc6ICdtYXJnaW4tdG9wJyxcbiAgICAgICdtYXJnaW4tcmlnaHQnOiAnbWFyZ2luLWJvdHRvbScsXG4gICAgICAncGFkZGluZy1sZWZ0JzogJ3BhZGRpbmctdG9wJyxcbiAgICAgICdwYWRkaW5nLXJpZ2h0JzogJ3BhZGRpbmctYm90dG9tJyxcbiAgICAgICdtYXJnaW5SaWdodCc6ICdtYXJnaW5Cb3R0b20nXG4gICAgfVtwcm9wZXJ0eV07XG4gIH1cblxuICBmdW5jdGlvbiBnZXREaXJlY3Rpb25Qcm9wZXJ0eVZhbHVlKG5vZGUsIGxhYmVsKSB7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQobm9kZS5nZXRQcm9wZXJ0eVZhbHVlKGdldERpcmVjdGlvbkxhYmVsKGxhYmVsKSkgfHwgMCk7XG4gIH1cblxuICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgdmFyICR3cmFwcGVyRWwgPSBzd2lwZXIuJHdyYXBwZXJFbCxcbiAgICAgIHN3aXBlclNpemUgPSBzd2lwZXIuc2l6ZSxcbiAgICAgIHJ0bCA9IHN3aXBlci5ydGxUcmFuc2xhdGUsXG4gICAgICB3cm9uZ1JUTCA9IHN3aXBlci53cm9uZ1JUTDtcbiAgdmFyIGlzVmlydHVhbCA9IHN3aXBlci52aXJ0dWFsICYmIHBhcmFtcy52aXJ0dWFsLmVuYWJsZWQ7XG4gIHZhciBwcmV2aW91c1NsaWRlc0xlbmd0aCA9IGlzVmlydHVhbCA/IHN3aXBlci52aXJ0dWFsLnNsaWRlcy5sZW5ndGggOiBzd2lwZXIuc2xpZGVzLmxlbmd0aDtcbiAgdmFyIHNsaWRlcyA9ICR3cmFwcGVyRWwuY2hpbGRyZW4oXCIuXCIgKyBzd2lwZXIucGFyYW1zLnNsaWRlQ2xhc3MpO1xuICB2YXIgc2xpZGVzTGVuZ3RoID0gaXNWaXJ0dWFsID8gc3dpcGVyLnZpcnR1YWwuc2xpZGVzLmxlbmd0aCA6IHNsaWRlcy5sZW5ndGg7XG4gIHZhciBzbmFwR3JpZCA9IFtdO1xuICB2YXIgc2xpZGVzR3JpZCA9IFtdO1xuICB2YXIgc2xpZGVzU2l6ZXNHcmlkID0gW107XG4gIHZhciBvZmZzZXRCZWZvcmUgPSBwYXJhbXMuc2xpZGVzT2Zmc2V0QmVmb3JlO1xuXG4gIGlmICh0eXBlb2Ygb2Zmc2V0QmVmb3JlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgb2Zmc2V0QmVmb3JlID0gcGFyYW1zLnNsaWRlc09mZnNldEJlZm9yZS5jYWxsKHN3aXBlcik7XG4gIH1cblxuICB2YXIgb2Zmc2V0QWZ0ZXIgPSBwYXJhbXMuc2xpZGVzT2Zmc2V0QWZ0ZXI7XG5cbiAgaWYgKHR5cGVvZiBvZmZzZXRBZnRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIG9mZnNldEFmdGVyID0gcGFyYW1zLnNsaWRlc09mZnNldEFmdGVyLmNhbGwoc3dpcGVyKTtcbiAgfVxuXG4gIHZhciBwcmV2aW91c1NuYXBHcmlkTGVuZ3RoID0gc3dpcGVyLnNuYXBHcmlkLmxlbmd0aDtcbiAgdmFyIHByZXZpb3VzU2xpZGVzR3JpZExlbmd0aCA9IHN3aXBlci5zbGlkZXNHcmlkLmxlbmd0aDtcbiAgdmFyIHNwYWNlQmV0d2VlbiA9IHBhcmFtcy5zcGFjZUJldHdlZW47XG4gIHZhciBzbGlkZVBvc2l0aW9uID0gLW9mZnNldEJlZm9yZTtcbiAgdmFyIHByZXZTbGlkZVNpemUgPSAwO1xuICB2YXIgaW5kZXggPSAwO1xuXG4gIGlmICh0eXBlb2Ygc3dpcGVyU2l6ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodHlwZW9mIHNwYWNlQmV0d2VlbiA9PT0gJ3N0cmluZycgJiYgc3BhY2VCZXR3ZWVuLmluZGV4T2YoJyUnKSA+PSAwKSB7XG4gICAgc3BhY2VCZXR3ZWVuID0gcGFyc2VGbG9hdChzcGFjZUJldHdlZW4ucmVwbGFjZSgnJScsICcnKSkgLyAxMDAgKiBzd2lwZXJTaXplO1xuICB9XG5cbiAgc3dpcGVyLnZpcnR1YWxTaXplID0gLXNwYWNlQmV0d2VlbjsgLy8gcmVzZXQgbWFyZ2luc1xuXG4gIGlmIChydGwp
118IHNsaWRlcy5jc3Moe1xuICAgIG1hcmdpbkxlZnQ6ICcnLFxuICAgIG1hcmdpbkJvdHRvbTogJycsXG4gICAgbWFyZ2luVG9wOiAnJ1xuICB9KTtlbHNlIHNsaWRlcy5jc3Moe1xuICAgIG1hcmdpblJpZ2h0OiAnJyxcbiAgICBtYXJnaW5Cb3R0b206ICcnLFxuICAgIG1hcmdpblRvcDogJydcbiAgfSk7XG4gIHZhciBzbGlkZXNOdW1iZXJFdmVuVG9Sb3dzO1xuXG4gIGlmIChwYXJhbXMuc2xpZGVzUGVyQ29sdW1uID4gMSkge1xuICAgIGlmIChNYXRoLmZsb29yKHNsaWRlc0xlbmd0aCAvIHBhcmFtcy5zbGlkZXNQZXJDb2x1bW4pID09PSBzbGlkZXNMZW5ndGggLyBzd2lwZXIucGFyYW1zLnNsaWRlc1BlckNvbHVtbikge1xuICAgICAgc2xpZGVzTnVtYmVyRXZlblRvUm93cyA9IHNsaWRlc0xlbmd0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgc2xpZGVzTnVtYmVyRXZlblRvUm93cyA9IE1hdGguY2VpbChzbGlkZXNMZW5ndGggLyBwYXJhbXMuc2xpZGVzUGVyQ29sdW1uKSAqIHBhcmFtcy5zbGlkZXNQZXJDb2x1bW47XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5zbGlkZXNQZXJWaWV3ICE9PSAnYXV0bycgJiYgcGFyYW1zLnNsaWRlc1BlckNvbHVtbkZpbGwgPT09ICdyb3cnKSB7XG4gICAgICBzbGlkZXNOdW1iZXJFdmVuVG9Sb3dzID0gTWF0aC5tYXgoc2xpZGVzTnVtYmVyRXZlblRvUm93cywgcGFyYW1zLnNsaWRlc1BlclZpZXcgKiBwYXJhbXMuc2xpZGVzUGVyQ29sdW1uKTtcbiAgICB9XG4gIH0gLy8gQ2FsYyBzbGlkZXNcblxuXG4gIHZhciBzbGlkZVNpemU7XG4gIHZhciBzbGlkZXNQZXJDb2x1bW4gPSBwYXJhbXMuc2xpZGVzUGVyQ29sdW1uO1xuICB2YXIgc2xpZGVzUGVyUm93ID0gc2xpZGVzTnVtYmVyRXZlblRvUm93cyAvIHNsaWRlc1BlckNvbHVtbjtcbiAgdmFyIG51bUZ1bGxDb2x1bW5zID0gTWF0aC5mbG9vcihzbGlkZXNMZW5ndGggLyBwYXJhbXMuc2xpZGVzUGVyQ29sdW1uKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWRlc0xlbmd0aDsgaSArPSAxKSB7XG4gICAgc2xpZGVTaXplID0gMDtcbiAgICB2YXIgc2xpZGUgPSBzbGlkZXMuZXEoaSk7XG5cbiAgICBpZiAocGFyYW1zLnNsaWRlc1BlckNvbHVtbiA+IDEpIHtcbiAgICAgIC8vIFNldCBzbGlkZXMgb3JkZXJcbiAgICAgIHZhciBuZXdTbGlkZU9yZGVySW5kZXggPSB2b2lkIDA7XG4gICAgICB2Y
118XIgY29sdW1uID0gdm9pZCAwO1xuICAgICAgdmFyIHJvdyA9IHZvaWQgMDtcblxuICAgICAgaWYgKHBhcmFtcy5zbGlkZXNQZXJDb2x1bW5GaWxsID09PSAncm93JyAmJiBwYXJhbXMuc2xpZGVzUGVyR3JvdXAgPiAxKSB7XG4gICAgICAgIHZhciBncm91cEluZGV4ID0gTWF0aC5mbG9vcihpIC8gKHBhcmFtcy5zbGlkZXNQZXJHcm91cCAqIHBhcmFtcy5zbGlkZXNQZXJDb2x1bW4pKTtcbiAgICAgICAgdmFyIHNsaWRlSW5kZXhJbkdyb3VwID0gaSAtIHBhcmFtcy5zbGlkZXNQZXJDb2x1bW4gKiBwYXJhbXMuc2xpZGVzUGVyR3JvdXAgKiBncm91cEluZGV4O1xuICAgICAgICB2YXIgY29sdW1uc0luR3JvdXAgPSBncm91cEluZGV4ID09PSAwID8gcGFyYW1zLnNsaWRlc1Blckdyb3VwIDogTWF0aC5taW4oTWF0aC5jZWlsKChzbGlkZXNMZW5ndGggLSBncm91cEluZGV4ICogc2xpZGVzUGVyQ29sdW1uICogcGFyYW1zLnNsaWRlc1Blckdyb3VwKSAvIHNsaWRlc1BlckNvbHVtbiksIHBhcmFtcy5zbGlkZXNQZXJHcm91cCk7XG4gICAgICAgIHJvdyA9IE1hdGguZmxvb3Ioc2xpZGVJbmRleEluR3JvdXAgLyBjb2x1bW5zSW5Hcm91cCk7XG4gICAgICAgIGNvbHVtbiA9IHNsaWRlSW5kZXhJbkdyb3VwIC0gcm93ICogY29sdW1uc0luR3JvdXAgKyBncm91cEluZGV4ICogcGFyYW1zLnNsaWRlc1Blckdyb3VwO1xuICAgICAgICBuZXdTbGlkZU9yZGVySW5kZXggPSBjb2x1bW4gKyByb3cgKiBzbGlkZXNOdW1iZXJFdmVuVG9Sb3dzIC8gc2xpZGVzUGVyQ29sdW1uO1xuICAgICAgICBzbGlkZS5jc3Moe1xuICAgICAgICAgICctd2Via2l0LWJveC1vcmRpbmFsLWdyb3VwJzogbmV3U2xpZGVPcmRlckluZGV4LFxuICAgICAgICAgICctbW96LWJveC1vcmRpbmFsLWdyb3VwJzogbmV3U2xpZGVPcmRlckluZGV4LFxuICAgICAgICAgICctbXMtZmxleC1vcmRlcic6IG5ld1NsaWRlT3JkZXJJbmRleCxcbiAgICAgICAgICAnLXdlYmtpdC1vcmRlcic6IG5ld1NsaWRlT3JkZXJJbmRleCxcbiAgICAgICAgICBvcmRlcjogbmV3U2xpZGVPcmRlckluZGV4XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChwYXJhbXMuc2xpZGVzUGVyQ29sdW1uRmlsbCA9PT0gJ2NvbHVtbicpIHtcbiAgICAgICAgY29sdW1uID0gTWF0aC5mbG9vcihpIC8gc2xpZGVzUGVyQ29sdW1uKTtcbiAgICAgICAgcm93ID0gaSAtIGNvbHVtbiAqIHNsaWRlc1BlckNvbHVtbjtcblxuICAgICAgICBpZiAoY29sdW1uID4gbnVtRnVsbENvbHVtbnMgfHwgY29sdW1uID09PSBudW1GdWxsQ29sdW1ucyAmJiByb3cgPT09IHNsaWRlc1BlckNvbHVtbiAtIDEpIHtcbiAgICAgICAgICByb3cgKz0gMTtcblxuICAgICAgICAgIGlmIChyb3cgPj0gc2xpZGVzUGVyQ29sdW1uKSB7XG4gICAgICAgICAgICByb3cgPSAwO1xuICAgICAgICAgICAgY29sdW1uICs9IDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByb3cgPSBNYXRoLmZsb29yKGkgLyBzbGlkZXNQZXJSb3cpO1xuICAgICAgICBjb2x1bW4gPSBpIC0gcm93ICogc2xpZGVzUGVyUm93O1xuICAgICAgfVxuXG4gICAgICBzbGlkZS5jc3MoZ2V0RGlyZWN0aW9uTGFiZWwoJ21hcmdpbi10b3AnKSwgcm93ICE9PSAwID8gcGFyYW1zLnNwYWNlQmV0d2VlbiAmJiBwYXJhbXMuc3BhY2VCZXR3ZWVuICsgXCJweFwiIDogJycpO1xuICAgIH1cblxuICAgIGlmIChzbGlkZS5jc3MoJ2Rpc3BsYXknKSA9PT0gJ25vbmUnKSBjb250aW51ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKHBhcmFtcy5zbGlkZXNQZXJWaWV3ID09PSAnYXV0bycpIHtcbiAgICAgIHZhciBzbGlkZVN0eWxlcyA9IGdldENvbXB1dGVkU3R5bGUoc2xpZGVbMF0pO1xuICAgICAgdmFyIGN1cnJlbnRUcmFuc2Zvcm0gPSBzbGlkZVswXS5zdHlsZS50cmFuc2Zvcm07XG4gICAgICB2Y
118XIgY3VycmVudFdlYktpdFRyYW5zZm9ybSA9IHNsaWRlWzBdLnN0eWxlLndlYmtpdFRyYW5zZm9ybTtcblxuICAgICAgaWYgKGN1cnJlbnRUcmFuc2Zvcm0pIHtcbiAgICAgICAgc2xpZGVbMF0uc3R5bGUudHJhbnNmb3JtID0gJ25vbmUnO1xuICAgICAgfVxuXG4gICAgICBpZiAoY3VycmVudFdlYktpdFRyYW5zZm9ybSkge1xuICAgICAgICBzbGlkZVswXS5zdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSAnbm9uZSc7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJhbXMucm91bmRMZW5ndGhzKSB7XG4gICAgICAgIHNsaWRlU2l6ZSA9IHN3aXBlci5pc0hvcml6b250YWwoKSA/IHNsaWRlLm91dGVyV2lkdGgodHJ1ZSkgOiBzbGlkZS5vdXRlckhlaWdodCh0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICB2YXIgd2lkdGggPSBnZXREaXJlY3Rpb25Qcm9wZXJ0eVZhbHVlKHNsaWRlU3R5bGVzLCAnd2lkdGgnKTtcbiAgICAgICAgdmFyIHBhZGRpbmdMZWZ0ID0gZ2V0RGlyZWN0aW9uUHJvcGVydHlWYWx1ZShzbGlkZVN0eWxlcywgJ3BhZGRpbmctbGVmdCcpO1xuICAgICAgICB2YXIgcGFkZGluZ1JpZ2h0ID0gZ2V0RGlyZWN0aW9uUHJvcGVydHlWYWx1ZShzbGlkZVN0eWxlcywgJ3BhZGRpbmctcmlnaHQnKTtcbiAgICAgICAgdmFyIG1hcmdpbkxlZnQgPSBnZXREaXJlY3Rpb25Qcm9wZXJ0eVZhbHVlKHNsaWRlU3R5bGVzLCAnbWFyZ2luLWxlZnQnKTtcbiAgICAgICAgdmFyIG1hcmdpblJpZ2h0ID0gZ2V0RGlyZWN0aW9uUHJvcGVydHlWYWx1ZShzbGlkZVN0eWxlcywgJ21hcmdpbi1yaWdodCcpO1xuICAgICAgICB2Y
118XIgYm94U2l6aW5nID0gc2xpZGVTdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZSgnYm94LXNpemluZycpO1xuXG4gICAgICAgIGlmIChib3hTaXppbmcgJiYgYm94U2l6aW5nID09PSAnYm9yZGVyLWJveCcpIHtcbiAgICAgICAgICBzbGlkZVNpemUgPSB3aWR0aCArIG1hcmdpbkxlZnQgKyBtYXJnaW5SaWdodDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgX3NsaWRlJCA9IHNsaWRlWzBdLFxuICAgICAgICAgICAgICBjbGllbnRXaWR0aCA9IF9zbGlkZSQuY2xpZW50V2lkdGgsXG4gICAgICAgICAgICAgIG9mZnNldFdpZHRoID0gX3NsaWRlJC5vZmZzZXRXaWR0aDtcbiAgICAgICAgICBzbGlkZVNpemUgPSB3aWR0aCArIHBhZGRpbmdMZWZ0ICsgcGFkZGluZ1JpZ2h0ICsgbWFyZ2luTGVmdCArIG1hcmdpblJpZ2h0ICsgKG9mZnNldFdpZHRoIC0gY2xpZW50V2lkdGgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChjdXJyZW50VHJhbnNmb3JtKSB7XG4gICAgICAgIHNsaWRlWzBdLnN0eWxlLnRyYW5zZm9ybSA9IGN1cnJlbnRUcmFuc2Zvcm07XG4gICAgICB9XG5cbiAgICAgIGlmIChjdXJyZW50V2ViS2l0VHJhbnNmb3JtKSB7XG4gICAgICAgIHNsaWRlWzBdLnN0eWxlLndlYmtpdFRyYW5zZm9ybSA9IGN1cnJlbnRXZWJLaXRUcmFuc2Zvcm07XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJhbXMucm91bmRMZW5ndGhzKSBzbGlkZVNpemUgPSBNYXRoLmZsb29yKHNsaWRlU2l6ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNsaWRlU2l6ZSA9IChzd2lwZXJTaXplIC0gKHBhcmFtcy5zbGlkZXNQZXJWaWV3IC0gMSkgKiBzcGFjZUJldHdlZW4pIC8gcGFyYW1zLnNsaWRlc1BlclZpZXc7XG4gICAgICBpZiAocGFyYW1zLnJvdW5kTGVuZ3Rocykgc2xpZGVTaXplID0gTWF0aC5mbG9vcihzbGlkZVNpemUpO1xuXG4gICAgICBpZiAoc2xpZGVzW2ldKSB7XG4gICAgICAgIHNsaWRlc1tpXS5zdHlsZVtnZXREaXJlY3Rpb25MYWJlbCgnd2lkdGgnKV0gPSBzbGlkZVNpemUgKyBcInB4XCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNsaWRlc1tpXSkge1xuICAgICAgc2xpZGVzW2ldLnN3aXBlclNsaWRlU2l6ZSA9IHNsaWRlU2l6ZTtcbiAgICB9XG5cbiAgICBzbGlkZXNTaXplc0dyaWQucHVzaChzbGlkZVNpemUpO1xuXG4gICAgaWYgKHBhcmFtcy5jZW50ZXJlZFNsaWRlcykge1xuICAgICAgc2xpZGVQb3NpdGlvbiA9IHNsaWRlUG9zaXRpb24gKyBzbGlkZVNpemUgLyAyICsgcHJldlNsaWRlU2l6ZSAvIDIgKyBzcGFjZUJldHdlZW47XG4gICAgICBpZiAocHJldlNsaWRlU2l6ZSA9PT0gMCAmJiBpICE9PSAwKSBzbGlkZVBvc2l0aW9uID0gc2xpZGVQb3NpdGlvbiAtIHN3aXBlclNpemUgLyAyIC0gc3BhY2VCZXR3ZWVuO1xuICAgICAgaWYgKGkgPT09IDApIHNsaWRlUG9zaXRpb24gPSBzbGlkZVBvc2l0aW9uIC0gc3dpcGVyU2l6ZSAvIDIgLSBzcGFjZUJldHdlZW47XG4gICAgICBpZiAoTWF0aC5hYnMoc2xpZGVQb3NpdGlvbikgPCAxIC8gMTAwMCkgc2xpZGVQb3NpdGlvbiA9IDA7XG4gICAgICBpZiAocGFyYW1zLnJvdW5kTGVuZ3Rocykgc2xpZGVQb3NpdGlvbiA9IE1hdGguZmxvb3Ioc2xpZGVQb3NpdGlvbik7XG4gICAgICBpZiAoaW5kZXggJSBwYXJhbXMuc2xpZGVzUGVyR3JvdXAgPT09IDApIHNuYXBHcmlkLnB1c2goc2xpZGVQb3NpdGlvbik7XG4gICAgICBzbGlkZXNHcmlkLnB1c2goc2xpZGVQb3NpdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwYXJhbXMucm91bmRMZW5ndGhzKSBzbGlkZVBvc2l0aW9uID0gTWF0aC5mbG9vcihzbGlkZVBvc2l0aW9uKTtcbiAgICAgIGlmICgoaW5kZXggLSBNYXRoLm1pbihzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwU2tpcCwgaW5kZXgpKSAlIHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXAgPT09IDApIHNuYXBHcmlkLnB1c2goc2xpZGVQb3NpdGlvbik7XG4gICAgICBzbGlkZXNHcmlkLnB1c2goc2xpZGVQb3NpdGlvbik7XG4gICAgICBzbGlkZVBvc2l0aW9uID0gc2xpZGVQb3NpdGlvbiArIHNsaWRlU2l6ZSArIHNwYWNlQmV0d2VlbjtcbiAgICB9XG5cbiAgICBzd2lwZXIudmlydHVhbFNpemUgKz0gc2xpZGVTaXplICsgc3BhY2VCZXR3ZWVuO1xuICAgIHByZXZTbGlkZVNpemUgPSBzbGlkZVNpemU7XG4gICAgaW5kZXggKz0gMTtcbiAgfVxuXG4gIHN3aXBlci52aXJ0dWFsU2l6ZSA9IE1hdGgubWF4KHN3aXBlci52aXJ0dWFsU2l6ZSwgc3dpcGVyU2l6ZSkgKyBvZmZzZXRBZnRlcjtcbiAgdmFyIG5ld1NsaWRlc0dyaWQ7XG5cbiAgaWYgKHJ0bCAmJiB3cm9uZ1JUTCAmJiAocGFyYW1zLmVmZmVjdCA9PT0gJ3NsaWRlJyB8fCBwYXJhbXMuZWZmZWN0ID09PSAnY292ZXJmbG93JykpIHtcbiAgICAkd3JhcHBlckVsLmNzcyh7XG4gICAgICB3aWR0aDogc3dpcGVyLnZpcnR1YWxTaXplICsgcGFyYW1zLnNwYWNlQmV0d2VlbiArIFwicHhcIlxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5zZXRXcmFwcGVyU2l6ZSkge1xuICAgIHZhciBfJHdyYXBwZXJFbCRjc3M7XG5cbiAgICAkd3JhcHBlckVsLmNzcygoXyR3cmFwcGVyRWwkY3NzID0ge30sIF8kd3JhcHBlckVsJGNzc1tnZXREaXJlY3Rpb25MYWJlbCgnd2lkdGgnKV0gPSBzd2lwZXIudmlydHVhbFNpemUgKyBwYXJhbXMuc3BhY2VCZXR3ZWVuICsgXCJweFwiLCBfJHdyYXBwZXJFbCRjc3MpKTtcbiAgfVxuXG4gIGlmIChwYXJhbXMuc2xpZGVzUGVyQ29sdW1uID4gMSkge1xuICAgIHZhciBfJHdyYXBwZXJFbCRjc3MyO1xuXG4gICAgc3dpcGVyLnZpcnR1YWxTaXplID0gKHNsaWRlU2l6ZSArIHBhcmFtcy5zcGFjZUJldHdlZW4pICogc2xpZGVzTnVtYmVyRXZlblRvUm93cztcbiAgICBzd2lwZXIudmlydHVhbFNpemUgPSBNYXRoLmNlaWwoc3dpcGVyLnZpcnR1YWxTaXplIC8gcGFyYW1zLnNsaWRlc1BlckNvbHVtbikgLSBwYXJhbXMuc3BhY2VCZXR3ZWVuO1xuICAgICR3cmFwcGVyRWwuY3NzKChfJHdyYXBwZXJFbCRjc3MyID0ge30sIF8kd3JhcHBlckVsJGNzczJbZ2V0RGlyZWN0aW9uTGFiZWwoJ3dpZHRoJyldID0gc3dpcGVyLnZpcnR1YWxTaXplICsgcGFyYW1zLnNwYWNlQmV0d2VlbiArIFwicHhcIiwgXyR3cmFwcGVyRWwkY3NzMikpO1xuXG4gICAgaWYgKHBhcmFtcy5jZW50ZXJlZFNsaWRlcykge1xuICAgICAgbmV3
118U2xpZGVzR3JpZCA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgc25hcEdyaWQubGVuZ3RoOyBfaSArPSAxKSB7XG4gICAgICAgIHZhciBzbGlkZXNHcmlkSXRlbSA9IHNuYXBHcmlkW19pXTtcbiAgICAgICAgaWYgKHBhcmFtcy5yb3VuZExlbmd0aHMpIHNsaWRlc0dyaWRJdGVtID0gTWF0aC5mbG9vcihzbGlkZXNHcmlkSXRlbSk7XG4gICAgICAgIGlmIChzbmFwR3JpZFtfaV0gPCBzd2lwZXIudmlydHVhbFNpemUgKyBzbmFwR3JpZFswXSkgbmV3U2xpZGVzR3JpZC5wdXNoKHNsaWRlc0dyaWRJdGVtKTtcbiAgICAgIH1cblxuICAgICAgc25hcEdyaWQgPSBuZXdTbGlkZXNHcmlkO1xuICAgIH1cbiAgfSAvLyBSZW1vdmUgbGFzdCBncmlkIGVsZW1lbnRzIGRlcGVuZGluZyBvbiB3aWR0aFxuXG5cbiAgaWYgKCFwYXJhbXMuY2VudGVyZWRTbGlkZXMpIHtcbiAgICBuZXdTbGlkZXNHcmlkID0gW107XG5cbiAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBzbmFwR3JpZC5sZW5ndGg7IF9pMiArPSAxKSB7XG4gICAgICB2YXIgX3NsaWRlc0dyaWRJdGVtID0gc25hcEdyaWRbX2kyXTtcbiAgICAgIGlmIChwYXJhbXMucm91bmRMZW5ndGhzKSBfc2xpZGVzR3JpZEl0ZW0gPSBNYXRoLmZsb29yKF9zbGlkZXNHcmlkSXRlbSk7XG5cbiAgICAgIGlmIChzbmFwR3JpZFtfaTJdIDw9IHN3aXBlci52aXJ0dWFsU2l6ZSAtIHN3aXBlclNpemUpIHtcbiAgICAgICAgbmV3U2xpZGVzR3JpZC5wdXNoKF9zbGlkZXNHcmlkSXRlbSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc25hcEdyaWQgPSBuZXdTbGlkZXNHcmlkO1xuXG4gICAgaWYgKE1hdGguZmxvb3Ioc3dpcGVyLnZpcnR1YWxTaXplIC0gc3dpcGVyU2l6ZSkgLSBNYXRoLmZsb29yKHNuYXBHcmlkW3NuYXBHcmlkLmxlbmd0aCAtIDFdKSA+IDEpIHtcbiAgICAgIHNuYXBHcmlkLnB1c2goc3dpcGVyLnZpcnR1YWxTaXplIC0gc3dpcGVyU2l6ZSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHNuYXBHcmlkLmxlbmd0aCA9PT0gMCkgc25hcEdyaWQgPSBbMF07XG5cbiAgaWYgKHBhcmFtcy5zcGFjZUJldHdlZW4gIT09IDApIHtcbiAgICB2YXIgX3NsaWRlcyRmaWx0ZXIkY3NzO1xuXG4gICAgdmFyIGtleSA9IHN3aXBlci5pc0hvcml6b250YWwoKSAmJiBydGwgPyAnbWFyZ2luTGVmdCcgOiBnZXREaXJlY3Rpb25MYWJlbCgnbWFyZ2luUmlnaHQnKTtcbiAgICBzbGlkZXMuZmlsdGVyKGZ1bmN0aW9uIChfLCBzbGlkZUluZGV4KSB7XG4gICAgICBpZiAoIXBhcmFtcy5jc3NNb2RlKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgaWYgKHNsaWRlSW5kZXggPT09IHNsaWRlcy5sZW5ndGggLSAxKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSkuY3NzKChfc2xpZGVzJGZpbHRlciRjc3MgPSB7fSwgX3NsaWRlcyRmaWx0ZXIkY3NzW2tleV0gPSBzcGFjZUJldHdlZW4gKyBcInB4XCIsIF9zbGlkZXMkZmlsdGVyJGNzcykpO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5jZW50ZXJlZFNsaWRlcyAmJiBwYXJhbXMuY2VudGVyZWRTbGlkZXNCb3VuZHMpIHtcbiAgICB2YXIgYWxsU2xpZGVzU2l6ZSA9IDA7XG4gICAgc2xpZGVzU2l6ZXNHcmlkLmZvckVhY2goZnVuY3Rpb24gKHNsaWRlU2l6ZVZhbHVlKSB7XG4gICAgICBhbGxTbGlkZXNTaXplICs9IHNsaWRlU2l6ZVZhbHVlICsgKHBhcmFtcy5zcGFjZUJldHdlZW4gPyBwYXJhbXMuc3BhY2VCZXR3ZWVuIDogMCk7XG4gICAgfSk7XG4gICAgYWxsU2xpZGVzU2l6ZSAtPSBwYXJhbXMuc3BhY2VCZXR3ZWVuO1xuICAgIHZhciBtYXhTbmFwID0gYWxsU2xpZGVzU2l6ZSAtIHN3aXBlclNpemU7XG4gICAgc25hcEdyaWQgPSBzbmFwR3JpZC5tYXAoZnVuY3Rpb24gKHNuYXApIHtcbiAgICAgIGlmIChzbmFwIDwgMCkgcmV0dXJuIC1vZmZzZXRCZWZvcmU7XG4gICAgICBpZiAoc25hcCA+IG1heFNuYXApIHJldHVybiBtYXhTbmFwICsgb2Zmc2V0QWZ0ZXI7XG4gICAgICByZXR1cm4gc25hcDtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChwYXJhbXMuY2VudGVySW5zdWZmaWNpZW50U2xpZGVzKSB7XG4gICAgdmFyIF9hbGxTbGlkZXNTaXplID0gMDtcbiAgICBzbGlkZXNTaXplc0dyaWQuZm9yRWFjaChmdW5jdGlvbiAoc2xpZGVTaXplVmFsdWUpIHtcbiAgICAgIF9hbGxTbGlkZXNTaXplICs9IHNsaWRlU2l6ZVZhbHVlICsgKHBhcmFtcy5zcGFjZUJldHdlZW4gPyBwYXJhbXMuc3BhY2VCZXR3ZWVuIDogMCk7XG4gICAgfSk7XG4gICAgX2FsbFNsaWRlc1NpemUgLT0gcGFyYW1zLnNwYWNlQmV0d2VlbjtcblxuICAgIGlmIChfYWxsU2xpZGVzU2l6ZSA8IHN3aXBlclNpemUpIHtcbiAgICAgIHZhciBhbGxTbGlkZXNPZmZzZXQgPSAoc3dpcGVyU2l6ZSAtIF9hbGxTbGlkZXNTaXplKSAvIDI7XG4gICAgICBzbmFwR3JpZC5mb3JFYWNoKGZ1bmN0aW9uIChzbmFwLCBzbmFwSW5kZXgpIHtcbiAgICAgICAgc25hcEdyaWRbc25hcEluZGV4XSA9IHNuYXAgLSBhbGxTbGlkZXNPZmZzZXQ7XG4gICAgICB9KTtcbiAgICAgIHNsaWRlc0dyaWQuZm9yRWFjaChmdW5jdGlvbiAoc25hcCwgc25hcEluZGV4KSB7XG4gICAgICAgIHNsaWRlc0dyaWRbc25hcEluZGV4XSA9IHNuYXAgKyBhbGxTbGlkZXNPZmZzZXQ7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBleHRlbmQoc3dpcGVyLCB7XG4gICAgc2xpZGVzOiBzbGlkZXMsXG4gICAgc25hcEdyaWQ6IHNuYXBHcmlkLFxuICAgIHNsaWRlc0dyaWQ6IHNsaWRlc0dyaWQsXG4gICAgc2xpZGVzU2l6ZXNHcmlkOiBzbGlkZXNTaXplc0dyaWRcbiAgfSk7XG5cbiAgaWYgKHNsaWRlc0xlbmd0aCAhPT0gcHJldmlvdXNTbGlkZXNMZW5ndGgpIHtcbiAgICBzd2lwZXIuZW1pdCgnc2xpZGVzTGVuZ3RoQ2hhbmdlJyk7XG4gIH1cblxuICBpZiAoc25hcEdyaWQubGVuZ3RoICE9PSBwcmV2aW91c1NuYXBHcmlkTGVuZ3RoKSB7XG4gICAgaWYgKHN3aXBlci5wYXJhbXMud2F0Y2hPdmVyZmxvdykgc3dpcGVyLmNoZWNrT3ZlcmZsb3coKTtcbiAgICBzd2lwZXIuZW1pdCgnc25hcEdyaWRMZW5ndGhDaGFuZ2UnKTtcbiAgfVxuXG4gIGlmIChzbGlkZXNHcmlkLmxlbmd0aCAhPT0gcHJldmlvdXNTbGlkZXNHcmlkTGVuZ3RoKSB7XG4gICAgc3dpcGVyLmVtaXQoJ3NsaWRlc0dyaWRMZW5ndGhDaGFuZ2UnKTtcbiAgfVxuXG4gIGlmIChwYXJhbXMud2F0Y2hTbGlkZXNQcm9ncmVzcyB8fCBwYXJhbXMud2F0Y2hTbGlkZXNWaXNpYmlsaXR5KSB7XG4gICAgc3dpcGVyLnVwZGF0ZVNsaWRlc09mZnNldCgpO1xuICB9XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXBkYXRlQXV0b0hlaWdodChzcGVlZCkge1xuICB2YXIgc3dpcGVyID0gdGhpcztcbiAgdmFyIGFjdGl2ZVNsaWRlcyA9IFtdO1xuICB2YXIgaXNWaXJ0dWFsID0gc3dpcGVyLnZpcnR1YWwgJiYgc3dpcGVyLnBhcmFtcy52aXJ0dWFsLmVuYWJsZWQ7XG4gIHZhciBuZXdIZWlnaHQgPSAwO1xuICB2YXIgaTtcblxuICBpZiAodHlwZW9mIHNwZWVkID09PSAnbnVtYmVyJykge1xuICAgIHN3aXBlci5zZXRUcmFuc2l0aW9uKHNwZWVkKTtcbiAgfSBlbHNlIGlmIChzcGVlZCA9PT0gdHJ1ZSkge1xuICAgIHN3aXBlci5zZXRUcmFuc2l0aW9uKHN3aXBlci5wYXJhbXMuc3BlZWQpO1xuICB9XG5cbiAgdmFyIGdldFNsaWRlQnlJbmRleCA9IGZ1bmN0aW9uIGdldFNsaWRlQnlJbmRleChpbmRleCkge1xuICAgIGlmIChpc1ZpcnR1YWwpIHtcbiAgICAgIHJldHVybi
118Bzd2lwZXIuc2xpZGVzLmZpbHRlcihmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKSwgMTApID09PSBpbmRleDtcbiAgICAgIH0pWzBdO1xuICAgIH1cblxuICAgIHJldHVybiBzd2lwZXIuc2xpZGVzLmVxKGluZGV4KVswXTtcbiAgfTsgLy8gRmluZCBzbGlkZXMgY3VycmVudGx5IGluIHZpZXdcblxuXG4gIGlmIChzd2lwZXIucGFyYW1zLnNsaWRlc1BlclZpZXcgIT09ICdhdXRvJyAmJiBzd2lwZXIucGFyYW1zLnNsaWRlc1BlclZpZXcgPiAxKSB7XG4gICAgaWYgKHN3aXBlci5wYXJhbXMuY2VudGVyZWRTbGlkZXMpIHtcbiAgICAgIHN3aXBlci52aXNpYmxlU2xpZGVzLmVhY2goZnVuY3Rpb24gKHNsaWRlKSB7XG4gICAgICAgIGFjdGl2ZVNsaWRlcy5wdXNoKHNsaWRlKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgTWF0aC5jZWlsKHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyVmlldyk7IGkgKz0gMSkge1xuICAgICAgICB2YXIgaW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXggKyBpO1xuICAgICAgICBpZiAoaW5kZXggPiBzd2lwZXIuc2xpZGVzLmxlbmd0aCAmJiAhaXNWaXJ0dWFsKSBicmVhaztcbiAgICAgICAgYWN0aXZlU2xpZGVzLnB1c2goZ2V0U2xpZGVCeUluZGV4KGluZGV4KSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGFjdGl2ZVNsaWRlcy5wdXNoKGdldFNsaWRlQnlJbmRleChzd2lwZXIuYWN0aXZlSW5kZXgpKTtcbiAgfSAvLyBGaW5kIG5ldyBoZWlnaHQgZnJvbSBoaWdoZXN0IHNsaWRlIGluIHZpZXdcblxuXG4gIGZvciAoaSA9IDA7IGkgPCBhY3RpdmVTbGlkZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBpZiAodHlwZW9mIGFjdGl2ZVNsaWRlc1tpXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHZhciBoZWlnaHQgPSBhY3RpdmVTbGlkZXNbaV0ub2Zmc2V0SGVpZ2h0O1xuICAgICAgbmV3SGVpZ2h0ID0gaGVpZ2h0ID4gbmV3SGVpZ2h0ID8gaGVpZ2h0IDogbmV3SGVpZ2h0O1xuICAgIH1cbiAgfSAvLyBVcGRhdGUgSGVpZ2h0XG5cblxuICBpZiAobmV3SGVpZ2h0KSBzd2lwZXIuJHdyYXBwZXJFbC5jc3MoJ2hlaWdodCcsIG5ld0hlaWdodCArIFwicHhcIik7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXBkYXRlU2xpZGVzT2Zmc2V0KCkge1xuICB2YXIgc3dpcGVyID0gdGhpcztcbiAgdmFyIHNsaWRlcyA9IHN3aXBlci5zbGlkZXM7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGlkZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBzbGlkZXNbaV0uc3dpcGVyU2xpZGVPZmZzZXQgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyBzbGlkZXNbaV0ub2Zmc2V0TGVmdCA6IHNsaWRlc1tpXS5vZmZzZXRUb3A7XG4gIH1cbn0iLCJpbXBvcnQgJCBmcm9tICcuLi8uLi8uLi91dGlscy9kb20nO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXBkYXRlU2xpZGVzUHJvZ3Jlc3ModHJhbnNsYXRlKSB7XG4gIGlmICh0cmFuc2xhdGUgPT09IHZvaWQgMCkge1xuICAgIHRyYW5zbGF0ZSA9IHRoaXMgJiYgdGhpcy50cmFuc2xhdGUgfHwgMDtcbiAgfVxuXG4gIHZhciBzd2lwZXIgPSB0aGlzO1xuICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgdmFyIHNsaWRlcyA9IHN3aXBlci5zbGlkZXMsXG4gICAgICBydGwgPSBzd2lwZXIucnRsVHJhbnNsYXRlO1xuICBpZiAoc2xpZGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICBpZiAodHlwZW9mIHNsaWRlc1swXS5zd2lwZXJTbGlkZU9mZnNldCA9PT0gJ3VuZGVmaW5lZCcpIHN3aXBlci51cGRhdGVTbGlkZXNPZmZzZXQoKTtcbiAgdmFyIG9mZnNldENlbnRlciA9IC10cmFuc2xhdGU7XG4gIGlmIChydGwpIG9mZnNldENlbnRlciA9IHRyYW5zbGF0ZTsgLy8gVmlzaWJsZSBTbGlkZXNcblxuICBzbGlkZXMucmVtb3ZlQ2xhc3MocGFyYW1zLnNsaWRlVmlzaWJsZUNsYXNzKTtcbiAgc3dpcGVyLnZpc2libGVTbGlkZXNJbmRleGVzID0gW107XG4gIHN3aXBlci52aXNpYmxlU2xpZGVzID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGlkZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICB2YXIgc2xpZGUgPSBzbGlkZXNbaV07XG4gICAgdmFyIHNsaWRlUHJvZ3Jlc3MgPSAob2Zmc2V0Q2VudGVyICsgKHBhcmFtcy5jZW50ZXJlZFNsaWRlcyA/IHN3aXBlci5taW5UcmFuc2xhdGUoKSA6IDApIC0gc2xpZGUuc3dpcGVyU2xpZGVPZmZzZXQpIC8gKHNsaWRlLnN3aXBlclNsaWRlU2l6ZSArIHBhcmFtcy5zcGFjZUJldHdlZW4pO1xuXG4gICAgaWYgKHBhcmFtcy53YXRjaFNsaWRlc1Zpc2liaWxpdHkgfHwgcGFyYW1zLmNlbnRlcmVkU2xpZGVzICYmIHBhcmFtcy5hdXRvSGVpZ2h0KSB7XG4gICAgICB2Y
118XIgc2xpZGVCZWZvcmUgPSAtKG9mZnNldENlbnRlciAtIHNsaWRlLnN3aXBlclNsaWRlT2Zmc2V0KTtcbiAgICAgIHZhciBzbGlkZUFmdGVyID0gc2xpZGVCZWZvcmUgKyBzd2lwZXIuc2xpZGVzU2l6ZXNHcmlkW2ldO1xuICAgICAgdmFyIGlzVmlzaWJsZSA9IHNsaWRlQmVmb3JlID49IDAgJiYgc2xpZGVCZWZvcmUgPCBzd2lwZXIuc2l6ZSAtIDEgfHwgc2xpZGVBZnRlciA+IDEgJiYgc2xpZGVBZnRlciA8PSBzd2lwZXIuc2l6ZSB8fCBzbGlkZUJlZm9yZSA8PSAwICYmIHNsaWRlQWZ0ZXIgPj0gc3dpcGVyLnNpemU7XG5cbiAgICAgIGlmIChpc1Zpc2libGUpIHtcbiAgICAgICAgc3dpcGVyLnZpc2libGVTbGlkZXMucHVzaChzbGlkZSk7XG4gICAgICAgIHN3aXBlci52aXNpYmxlU2xpZGVzSW5kZXhlcy5wdXNoKGkpO1xuICAgICAgICBzbGlkZXMuZXEoaSkuYWRkQ2xhc3MocGFyYW1zLnNsaWRlVmlzaWJsZUNsYXNzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzbGlkZS5wcm9ncmVzcyA9IHJ0bCA/IC1zbGlkZVByb2dyZXNzIDogc2xpZGVQcm9ncmVzcztcbiAgfVxuXG4gIHN3aXBlci52aXNpYmxlU2xpZGVzID0gJChzd2lwZXIudmlzaWJsZVNsaWRlcyk7XG59IiwiaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXBkYXRlUHJvZ3Jlc3ModHJhbnNsYXRlKSB7XG4gIHZhciBzd2lwZXIgPSB0aGlzO1xuXG4gIGlmICh0eXBlb2YgdHJhbnNsYXRlID09PSAndW5kZWZpbmVkJykge1xuICAgIHZhciBtdWx0aXBsaWVyID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZSA/IC0xIDogMTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG5cbiAgICB0cmFuc2xhdGUgPSBzd2lwZXIgJiYgc3dpcGVyLnRyYW5zbGF0ZSAmJiBzd2lwZXIudHJhbnNsYXRlICogbXVsdGlwbGllciB8fCAwO1xuICB9XG5cbiAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gIHZhciB0cmFuc2xhdGVzRGlmZiA9IHN3aXBlci5tYXhUcmFuc2xhdGUoKSAtIHN3aXBlci5taW5UcmFuc2xhdGUoKTtcbiAgdmFyIHByb2dyZXNzID0gc3dpcGVyLnByb2dyZXNzLFxuICAgICAgaXNCZWdpbm5pbmcgPSBzd2lwZXIuaXNCZWdpbm5pbmcsXG4gICAgICBpc0VuZCA9IHN3aXBlci5pc0VuZDtcbiAgdmFyIHdhc0JlZ2lubmluZyA9IGlzQmVnaW5uaW5nO1xuICB2YXIgd2FzRW5kID0gaXNFbmQ7XG5cbiAgaWYgKHRyYW5zbGF0ZXNEaWZmID09PSAwKSB7XG4gICAgcHJvZ3Jlc3MgPSAwO1xuICAgIGlzQmVnaW5uaW5nID0gdHJ1ZTtcbiAgICBpc0VuZCA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgcHJvZ3Jlc3MgPSAodHJhbnNsYXRlIC0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpKSAvIHRyYW5zbGF0ZXNEaWZmO1xuICAgIGlzQmVnaW5uaW5nID0gcHJvZ3Jlc3MgPD0gMDtcbiAgICBpc0VuZCA9IHByb2dyZXNzID49IDE7XG4gIH1cblxuICBleHRlbmQoc3dpcGVyLCB7XG4gICAgcHJvZ3Jlc3M6IHByb2dyZXNzLFxuICAgIGlzQmVnaW5uaW5nOiBpc0JlZ2lubmluZyxcbiAgICBpc0VuZDogaXNFbmRcbiAgfSk7XG4gIGlmIChwYXJhbXMud2F0Y2hTbGlkZXNQcm9ncmVzcyB8fCBwYXJhbXMud2F0Y2hTbGlkZXNWaXNpYmlsaXR5IHx8IHBhcmFtcy5jZW50ZXJlZFNsaWRlcyAmJiBwYXJhbXMuYXV0b0hlaWdodCkgc3dpcGVyLnVwZGF0ZVNsaWRlc1Byb2dyZXNzKHRyYW5zbGF0ZSk7XG5cbiAgaWYgKGlzQmVnaW5uaW5nICYmICF3YXNCZWdpbm5pbmcpIHtcbiAgICBzd2lwZXIuZW1pdCgncmVhY2hCZWdpbm5pbmcgdG9FZGdlJyk7XG4gIH1cblxuICBpZiAoaXNFbmQgJiYgIXdhc0VuZCkge1xuICAgIHN3aXBlci5lbWl0KCdyZWFjaEVuZCB0b0VkZ2UnKTtcbiAgfVxuXG4gIGlmICh3YXNCZWdpbm5pbmcgJiYgIWlzQmVnaW5uaW5nIHx8IHdhc0VuZCAmJiAhaXNFbmQpIHtcbiAgICBzd2lwZXIuZW1pdCgnZnJvbUVkZ2UnKTtcbiAgfVxuXG4gIHN3aXBlci5lbWl0KCdwcm9ncmVzcycsIHByb2dyZXNzKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1cGRhdGVTbGlkZXNDbGFzc2VzKCkge1xuICB2YXIgc3dpcGVyID0gdGhpcztcbiAgdmFyIHNsaWRlcyA9IHN3aXBlci5zbGlkZXMsXG4gICAgICBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLFxuICAgICAgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsLFxuICAgICAgYWN0aXZlSW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXgsXG4gICAgICByZWFsSW5kZXggPSBzd2lwZXIucmVhbEluZGV4O1xuICB2YXIgaXNWaXJ0dWFsID0gc3dpcGVyLnZpcnR1YWwgJiYgcGFyYW1zLnZpcnR1YWwuZW5hYmxlZDtcbiAgc2xpZGVzLnJlbW92ZUNsYXNzKHBhcmFtcy5zbGlkZUFjdGl2ZUNsYXNzICsgXCIgXCIgKyBwYXJhbXMuc2xpZGVOZXh0Q2xhc3MgKyBcIiBcIiArIHBhcmFtcy5zbGlkZVByZXZDbGFzcyArIFwiIFwiICsgcGFyYW1zLnNsaWRlRHVwbGljYXRlQWN0aXZlQ2xhc3MgKyBcIiBcIiArIHBhcmFtcy5zbGlkZUR1cGxpY2F0ZU5leHRDbGFzcyArIFwiIFwiICsgcGFyYW1zLnNsaWRlRHVwbGljYXRlUHJldkNsYXNzKTtcbiAgdmFyIGFjdGl2ZVNsaWRlO1xuXG4gIGlmIChpc1ZpcnR1YWwpIHtcbiAgICBhY3RpdmVTbGlkZSA9IHN3aXBlci4kd3JhcHBlckVsLmZpbmQoXCIuXCIgKyBwYXJhbXMuc2xpZGVDbGFzcyArIFwiW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVxcXCJcIiArIGFjdGl2ZUluZGV4ICsgXCJcXFwiXVwiKTtcbiAgfSBlbHNlIHtcbiAgICBhY3RpdmVTbGlkZSA9IHNsaWRlcy5lcShhY3RpdmVJbmRleCk7XG4gIH0gLy8gQWN0aXZlIGNsYXNzZXNcblxuXG4gIGFjdGl2ZVNsaWRlLmFkZENsYXNzKHBhcmFtcy5zbGlkZUFjdGl2ZUNsYXNzKTtcblxuICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICAvLyBEdXBsaWNhdGUgdG8gYWxsIGxvb3BlZCBzbGlkZXNcbiAgICBpZiAoYWN0aXZlU2xpZGUuaGFzQ2xhc3MocGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpKSB7XG4gICAgICAkd3JhcHBlckVsLmNoaWxkcmVuKFwiLlwiICsgcGFyYW1zLnNsaWRlQ2xhc3MgKyBcIjpub3QoLlwiICsgcGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MgKyBcIilbZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XFxcIlwiICsgcmVhbEluZGV4ICsgXCJcXFwiXVwiKS5hZGRDbGFzcyhwYXJhbXMuc2xpZGVEdXBsaWNhdGVBY3RpdmVDbGFzcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICR3cmFwcGVyRWwuY2hpbGRyZW4oXCIuXCIgKyBwYXJhbXMuc2xpZGVDbGFzcyArIFwiLlwiICsgcGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MgKyBcIltkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cXFwiXCIgKyByZWFsSW5kZXggKyBcIlxcXCJdXCIpLmFkZENsYXNzKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZUFjdGl2ZUNsYXNzKTtcbiAgICB9XG4gI
118H0gLy8gTmV4dCBTbGlkZVxuXG5cbiAgdmFyIG5leHRTbGlkZSA9IGFjdGl2ZVNsaWRlLm5leHRBbGwoXCIuXCIgKyBwYXJhbXMuc2xpZGVDbGFzcykuZXEoMCkuYWRkQ2xhc3MocGFyYW1zLnNsaWRlTmV4dENsYXNzKTtcblxuICBpZiAocGFyYW1zLmxvb3AgJiYgbmV4dFNsaWRlLmxlbmd0aCA9PT0gMCkge1xuICAgIG5leHRTbGlkZSA9IHNsaWRlcy5lcSgwKTtcbiAgICBuZXh0U2xpZGUuYWRkQ2xhc3MocGFyYW1zLnNsaWRlTmV4dENsYXNzKTtcbiAgfSAvLyBQcmV2IFNsaWRlXG5cblxuICB2YXIgcHJldlNsaWRlID0gYWN0aXZlU2xpZGUucHJldkFsbChcIi5cIiArIHBhcmFtcy5zbGlkZUNsYXNzKS5lcSgwKS5hZGRDbGFzcyhwYXJhbXMuc2xpZGVQcmV2Q2xhc3MpO1xuXG4gIGlmIChwYXJhbXMubG9vcCAmJiBwcmV2U2xpZGUubGVuZ3RoID09PSAwKSB7XG4gICAgcHJldlNsaWRlID0gc2xpZGVzLmVxKC0xKTtcbiAgICBwcmV2U2xpZGUuYWRkQ2xhc3MocGFyYW1zLnNsaWRlUHJldkNsYXNzKTtcbiAgfVxuXG4gIGlmIChwYXJhbXMubG9vcCkge1xuICAgIC8vIER1cGxpY2F0ZSB0byBhbGwgbG9vcGVkIHNsaWRlc1xuICAgIGlmIChuZXh0U2xpZGUuaGFzQ2xhc3MocGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpKSB7XG4gICAgICAkd3JhcHBlckVsLmNoaWxkcmVuKFwiLlwiICsgcGFyYW1zLnNsaWRlQ2xhc3MgKyBcIjpub3QoLlwiICsgcGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MgKyBcIilbZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XFxcIlwiICsgbmV4dFNsaWRlLmF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4JykgKyBcIlxcXCJdXCIpLmFkZENsYXNzKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZU5leHRDbGFzcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICR3cmFwcGVyRWwuY2hpbGRyZW4oXCIuXCIgKyBwYXJhbXMuc2xpZGVDbGFzcyArIFwiLlwiICsgcGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MgKyBcIltkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cXFwiXCIgKyBuZXh0U2xpZGUuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKSArIFwiXFxcIl1cIikuYWRkQ2xhc3MocGFyYW1zLnNsaWRlRHVwbGljYXRlTmV4dENsYXNzKTtcbiAgICB9XG5cbiAgICBpZiAocHJldlNsaWRlLmhhc0NsYXNzKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzKSkge1xuICAgICAgJHdyYXBwZXJFbC5jaGlsZHJlbihcIi5cIiArIHBhcmFtcy5zbGlkZUNsYXNzICsgXCI6bm90KC5cIiArIHBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzICsgXCIpW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVxcXCJcIiArIHByZXZTbGlkZS5hdHRyKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpICsgXCJcXFwiXVwiKS5hZGRDbGFzcyhwYXJhbXMuc2xpZGVEdXBsaWNhdGVQcmV2Q2xhc3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICAkd3JhcHBlckVsLmNoaWxkcmVuKFwiLlwiICsgcGFyYW1zLnNsaWRlQ2xhc3MgKyBcIi5cIiArIHBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzICsgXCJbZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XFxcIlwiICsgcHJldlNsaWRlLmF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4JykgKyBcIlxcXCJdXCIpLmFkZENsYXNzKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZVByZXZDbGFzcyk7XG4gICAgfVxuICB9XG5cbiAgc3dpcGVyLmVtaXRTbGlkZXNDbGFzc2VzKCk7XG59IiwiaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXBkYXRlQWN0aXZlSW5kZXgobmV3QWN0aXZlSW5kZXgpIHtcbiAgdmFyIHN3aXBlciA9IHRoaXM7XG4gIHZhciB0cmFuc2xhdGUgPSBzd2lwZXIucnRsVHJhbnNsYXRlID8gc3dpcGVyLnRyYW5zbGF0ZSA6IC1zd2lwZXIudHJhbnNsYXRlO1xuICB2YXIgc2xpZGVzR3JpZCA9IHN3aXBlci5zbGlkZXNHcmlkLFxuICAgICAgc25hcEdyaWQgPSBzd2lwZXIuc25hcEdyaWQsXG4gICAgICBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLFxuICAgICAgcHJldmlvdXNJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleCxcbiAgICAgIHByZXZpb3VzUmVhbEluZGV4ID0gc3dpcGVyLnJlYWxJbmRleCxcbiAgICAgIHByZXZpb3VzU25hcEluZGV4ID0gc3dpcGVyLnNuYXBJbmRleDtcbiAgdmFyIGFjdGl2ZUluZGV4ID0gbmV3QWN0aXZlSW5kZXg7XG4gIHZhciBzbmFwSW5kZXg7XG5cbiAgaWYgKHR5cGVvZiBhY3RpdmVJbmRleCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWRlc0dyaWQubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGlmICh0eXBlb2Ygc2xpZGVzR3JpZFtpICsgMV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGlmICh0cmFuc2xhdGUgPj0gc2xpZGVzR3JpZFtpXSAmJiB0cmFuc2xhdGUgPCBzbGlkZXNHcmlkW2kgKyAxXSAtIChzbGlkZXNHcmlkW2kgKyAxXSAtIHNsaWRlc0dyaWRbaV0pIC8gMikge1xuICAgICAgICAgIGFjdGl2ZUluZGV4ID0gaTtcbiAgICAgICAgfSBlbHNlIGlmICh0cmFuc2xhdGUgPj0gc2xpZGVzR3JpZFtpXSAmJiB0cmFuc2xhdGUgPCBzbGlkZXNHcmlkW2kgKyAxXSkge1xuICAgICAgICAgIGFjdGl2ZUluZGV4ID0gaSArIDE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHJhbnNsYXRlID49IHNsaWRlc0dyaWRbaV0pIHtcbiAgICAgICAgYWN0aXZlSW5kZXggPSBpO1xuICAgICAgfVxuICAgIH0gLy8gTm9ybWFsaXplIHNsaWRlSW5kZXhcblxuXG4gICAgaWYgKHBhcmFtcy5ub3JtYWxpemVTbGlkZUluZGV4KSB7XG4gICAgICBpZiAoYWN0aXZlSW5kZXggPCAwIHx8IHR5cGVvZiBhY3RpdmVJbmRleCA9PT0gJ3VuZGVmaW5lZCcpIGFjdGl2ZUluZGV4ID0gMDtcbiAgICB9XG4gIH1cblxuICBpZiAoc25hcEdyaWQuaW5kZXhPZih0cmFuc2xhdGUpID49IDApIHtcbiAgICBzbmFwSW5kZXggPSBzbmFwR3JpZC5pbmRleE9mKHRyYW5zbGF0ZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHNraXAgPSBNYXRoLm1pbihwYXJhbXMuc2xpZGVzUGVyR3JvdXBTa2lwLCBhY3RpdmVJbmRleCk7XG4gICAgc25hcEluZGV4ID0gc2tpcCArIE1hdGguZmxvb3IoKGFjdGl2ZUluZGV4IC0gc2tpcCkgLyBwYXJhbXMuc2xpZGVzUGVyR3JvdXApO1xuICB9XG5cbiAgaWYgKHNuYXBJbmRleCA+PS
118BzbmFwR3JpZC5sZW5ndGgpIHNuYXBJbmRleCA9IHNuYXBHcmlkLmxlbmd0aCAtIDE7XG5cbiAgaWYgKGFjdGl2ZUluZGV4ID09PSBwcmV2aW91c0luZGV4KSB7XG4gICAgaWYgKHNuYXBJbmRleCAhPT0gcHJldmlvdXNTbmFwSW5kZXgpIHtcbiAgICAgIHN3aXBlci5zbmFwSW5kZXggPSBzbmFwSW5kZXg7XG4gICAgICBzd2lwZXIuZW1pdCgnc25hcEluZGV4Q2hhbmdlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9IC8vIEdldCByZWFsIGluZGV4XG5cblxuICB2YXIgcmVhbEluZGV4ID0gcGFyc2VJbnQoc3dpcGVyLnNsaWRlcy5lcShhY3RpdmVJbmRleCkuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKSB8fCBhY3RpdmVJbmRleCwgMTApO1xuICBleHRlbmQoc3dpcGVyLCB7XG4gICAgc25hcEluZGV4OiBzbmFwSW5kZXgsXG4gICAgcmVhbEluZGV4OiByZWFsSW5kZXgsXG4gICAgcHJldmlvdXNJbmRleDogcHJldmlvdXNJbmRleCxcbiAgICBhY3RpdmVJbmRleDogYWN0aXZlSW5kZXhcbiAgfSk7XG4gIHN3aXBlci5lbWl0KCdhY3RpdmVJbmRleENoYW5nZScpO1xuICBzd2lwZXIuZW1pdCgnc25hcEluZGV4Q2hhbmdlJyk7XG5cbiAgaWYgKHByZXZpb3VzUmVhbEluZGV4ICE9PSByZWFsSW5kZXgpIHtcbiAgICBzd2lwZXIuZW1pdCgncmVhbEluZGV4Q2hhbmdlJyk7XG4gIH1cblxuICBpZiAoc3dpcGVyLmluaXRpYWxpemVkIHx8IHN3aXBlci5wYXJhbXMucnVuQ2FsbGJhY2tzT25Jbml0KSB7XG4gICAgc3dpcGVyLmVtaXQoJ3NsaWRlQ2hhbmdlJyk7XG4gIH1cbn0iLCJpbXBvcnQgJCBmcm9tICcuLi8uLi8uLi91dGlscy9kb20nO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXBkYXRlQ2xpY2tlZFNsaWRlKGUpIHtcbiAgdmFyIHN3aXBlciA9IHRoaXM7XG4gIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zO1xuICB2YXIgc2xpZGUgPSAkKGUudGFyZ2V0KS5jbG9zZXN0KFwiLlwiICsgcGFyYW1zLnNsaWRlQ2xhc3MpWzBdO1xuICB2YXIgc2xpZGVGb3VuZCA9IGZhbHNlO1xuICB2YXIgc2xpZGVJbmRleDtcblxuICBpZiAoc2xpZGUpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN3aXBlci5zbGlkZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGlmIChzd2lwZXIuc2xpZGVzW2ldID09PSBzbGlkZSkge1xuICAgICAgICBzbGlkZUZvdW5kID0gdHJ1ZTtcbiAgICAgICAgc2xpZGVJbmRleCA9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzbGlkZSAmJiBzbGlkZUZvdW5kKSB7XG4gICAgc3dpcGVyLmNsaWNrZWRTbGlkZSA9IHNsaWRlO1xuXG4gICAgaWYgKHN3aXBlci52aXJ0dWFsICYmIHN3aXBlci5wYXJhbXMudmlydHVhbC5lbmFibGVkKSB7XG4gICAgICBzd2lwZXIuY2xpY2tlZEluZGV4ID0gcGFyc2VJbnQoJChzbGlkZSkuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKSwgMTApO1xuICAgIH0gZWxzZSB7XG4gICAgICBzd2lwZXIuY2xpY2tlZEluZGV4ID0gc2xpZGVJbmRleDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc3dpcGVyLmNsaWNrZWRTbGlkZSA9IHVuZGVmaW5lZDtcbiAgICBzd2lwZXIuY2xpY2tlZEluZGV4ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChwYXJhbXMuc2xpZGVUb0NsaWNrZWRTbGlkZSAmJiBzd2lwZXIuY2xpY2tlZEluZGV4ICE9PSB1bmRlZmluZWQgJiYgc3dpcGVyLmNsaWNrZWRJbmRleCAhPT0gc3dpcGVyLmFjdGl2ZUluZGV4KSB7XG4gICAgc3dpcGVyLnNsaWRlVG9DbGlja2VkU2xpZGUoKTtcbiAgfVxufSIsImltcG9ydCBnZXRUcmFuc2xhdGUgZnJvbSAnLi9nZXRUcmFuc2xhdGUnO1xuaW1wb3J0IHNldFRyYW5zbGF0ZSBmcm9tICcuL3NldFRyYW5zbGF0ZSc7XG5pbXBvcnQgbWluVHJhbnNsYXRlIGZyb20gJy4vbWluVHJhbnNsYXRlJztcbmltcG9ydCBtYXhUcmFuc2xhdGUgZnJvbSAnLi9tYXhUcmFuc2xhdGUnO1xuaW1wb3J0IHRyYW5zbGF0ZVRvIGZyb20gJy4vdHJhbnNsYXRlVG8nO1xuZXhwb3J0IGRlZmF1bHQge1xuICBnZXRUcmFuc2xhdGU6IGdldFRyYW5zbGF0ZSxcbiAgc2V0VHJhbnNsYXRlOiBzZXRUcmFuc2xhdGUsXG4gIG1pblRyYW5zbGF0ZTogbWluVHJhbnNsYXRlLFxuICBtYXhUcmFuc2xhdGU6IG1heFRyYW5zbGF0ZSxcbiAgdHJhbnNsYXRlVG86IHRyYW5zbGF0ZVRvXG59OyIsImltcG9ydCB7IGdldFRyYW5zbGF0ZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFN3aXBlclRyYW5zbGF0ZShheGlzKSB7XG4gIGlmIChheGlzID09PSB2b2lkIDApIHtcbiAgICBheGlzID0gdGhpcy5pc0hvcml6b250YWwoKSA/ICd4JyA6ICd5JztcbiAgfVxuXG4gIHZhciBzd2lwZXIgPSB0aGlzO1xuICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcyxcbiAgICAgIHJ0bCA9IHN3aXBlci5ydGxUcmFuc2xhdGUsXG4gICAgICB0cmFuc2xhdGUgPSBzd2lwZXIudHJhbnNsYXRlLFxuICAgICAgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsO1xuXG4gIGlmIChwYXJhbXMudmlydHVhbFRyYW5zbGF0ZSkge1xuICAgIHJldHVybiBydGwgPyAtdHJhbnNsYXRlIDogdHJhbnNsYXRlO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5jc3NNb2RlKSB7XG4gICAgcmV0dXJuIHRyYW5zbGF0ZTtcbiAgfVxuXG4gIHZhciBjdXJyZW50VHJhbnNsYXRlID0gZ2V0VHJhbnNsYXRlKCR3cmFwcGVyRWxbMF0sIGF4aXMpO1xuICBpZiAocnRsKSBjdXJyZW50VHJhbnNsYXRlID0gLWN1cnJlbnRUcmFuc2xhdGU7XG4gIHJldHVybiBjdXJyZW50VHJhbnNsYXRlIHx8IDA7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2V0VHJhbnNsYXRlKHRyYW5zbGF0ZSwgYnlDb250cm9sbGVyKSB7XG4gIHZhciBzd2lwZXIgPSB0aGlzO1xuICB2YXIgcnRsID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZSxcbiAgICAgIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMsXG4gICAgICAkd3JhcHBlckVsID0gc3dpcGVyLiR3cmFwcGVyRWwsXG4gICAgICB3cmFwcGVyRWwgPSBzd2lwZXIud3JhcHBlckVsLFxuICAgICAgcHJvZ3Jlc3MgPSBzd2lwZXIucHJvZ3Jlc3M7XG4gIHZhciB4ID0gMDtcbiAgdmFyIHkgPSAwO1xuICB2YXIgeiA9IDA7XG5cbiAgaWYgKHN3aXBlci5pc0hvcml6b250YWwoKSkge1xuICAgIHggPSBydGwgPyAtdHJhbnNsYXRlIDogdHJhbnNsYXRlO1xuICB9IGVsc2Uge1xuICAgIHkgPSB0cmFuc2xhdGU7XG4gIH1cblxuICBpZiAocGFyYW1zLnJvdW5kTGVuZ3Rocykge1xuICAgIHggPSBNYXRoLmZsb29yKHgpO1xuICAgIHkgPSBNYXRoLmZsb29yKHkpO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5jc3NNb2RlKSB7XG4gICAgd3JhcHBlckVsW3N3aXBlci5pc0hvcml6b250YWwoKSA/ICdzY3JvbGxMZWZ0JyA6ICdzY3JvbGxUb3AnXSA9IHN3aXBlci5pc0hvcml6b250YWwoKSA/IC14IDogLXk7XG4gIH0gZWxzZSBpZiAoIXBhcmFtcy52aXJ0dWFsVHJhbnNsYXRlKSB7XG4gICAgJHdyYXBwZXJFbC50cmFuc2Zvcm0oXCJ0cmFuc2xhdGUzZChcIiArIHggKyBcInB4LCBcIiArIHkgKyBcInB4LCBcIiArIHogKyBcInB4KVwiKTtcbiAgfVxuXG4gIHN3aXBlci5wcmV2aW91c1RyYW5zbGF0ZSA9IHN3aXBlci50cmFuc2xhdGU7XG4gIHN3aXBlci50cmFuc2xhdGUgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyB4IDogeTsgLy8gQ2hlY2sgaWYgd2UgbmVlZCB0byB1cGRhdGUgcHJvZ3Jlc3NcblxuICB2Y
118XIgbmV3UHJvZ3Jlc3M7XG4gIHZhciB0cmFuc2xhdGVzRGlmZiA9IHN3aXBlci5tYXhUcmFuc2xhdGUoKSAtIHN3aXBlci5taW5UcmFuc2xhdGUoKTtcblxuICBpZiAodHJhbnNsYXRlc0RpZmYgPT09IDApIHtcbiAgICBuZXdQcm9ncmVzcyA9IDA7XG4gIH0gZWxzZSB7XG4gICAgbmV3UHJvZ3Jlc3MgPSAodHJhbnNsYXRlIC0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpKSAvIHRyYW5zbGF0ZXNEaWZmO1xuICB9XG5cbiAgaWYgKG5ld1Byb2dyZXNzICE9PSBwcm9ncmVzcykge1xuICAgIHN3aXBlci51cGRhdGVQcm9ncmVzcyh0cmFuc2xhdGUpO1xuICB9XG5cbiAgc3dpcGVyLmVtaXQoJ3NldFRyYW5zbGF0ZScsIHN3aXBlci50cmFuc2xhdGUsIGJ5Q29udHJvbGxlcik7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWluVHJhbnNsYXRlKCkge1xuICByZXR1cm4gLXRoaXMuc25hcEdyaWRbMF07XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWF4VHJhbnNsYXRlKCkge1xuICByZXR1cm4gLXRoaXMuc25hcEdyaWRbdGhpcy5zbmFwR3JpZC5sZW5ndGggLSAxXTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cmFuc2xhdGVUbyh0cmFuc2xhdGUsIHNwZWVkLCBydW5DYWxsYmFja3MsIHRyYW5zbGF0ZUJvdW5kcywgaW50ZXJuYWwpIHtcbiAgaWYgKHRyYW5zbGF0ZSA9PT0gdm9pZCAwKSB7XG4gICAgdHJhbnNsYXRlID0gMDtcbiAgfVxuXG4gIGlmIChzcGVlZCA9PT0gdm9pZCAwKSB7XG4gICAgc3BlZWQgPSB0aGlzLnBhcmFtcy5zcGVlZDtcbiAgfVxuXG4gIGlmIChydW5DYWxsYmFja3MgPT09IHZvaWQgMCkge1xuICAgIHJ1bkNhbGxiYWNrcyA9IHRydWU7XG4gIH1cblxuICBpZiAodHJhbnNsYXRlQm91bmRzID09PSB2b2lkIDApIHtcbiAgICB0cmFuc2xhdGVCb3VuZHMgPSB0cnVlO1xuICB9XG5cbiAgdmFyIHN3aXBlciA9IHRoaXM7XG4gIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLFxuICAgICAgd3JhcHBlckVsID0gc3dpcGVyLndyYXBwZXJFbDtcblxuICBpZiAoc3dpcGVyLmFuaW1hdGluZyAmJiBwYXJhbXMucHJldmVudEludGVyYWN0aW9uT25UcmFuc2l0aW9uKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIG1pblRyYW5zbGF0ZSA9IHN3aXBlci5taW5UcmFuc2xhdGUoKTtcbiAgdmFyIG1heFRyYW5zbGF0ZSA9IHN3aXBlci5tYXhUcmFuc2xhdGUoKTtcbiAgdmFyIG5ld1RyYW5zbGF0ZTtcbiAgaWYgKHRyYW5zbGF0ZUJvdW5kcyAmJiB0cmFuc2xhdGUgPiBtaW5UcmFuc2xhdGUpIG5ld1RyYW5zbGF0ZSA9IG1pblRyYW5zbGF0ZTtlbHNlIGlmICh0cmFuc2xhdGVCb3VuZHMgJiYgdHJhbnNsYXRlIDwgbWF4VHJhbnNsYXRlKSBuZXdUcmFuc2xhdGUgPSBtYXhUcmFuc2xhdGU7ZWxzZSBuZXdUcmFuc2xhdGUgPSB0cmFuc2xhdGU7IC8vIFVwZGF0ZSBwcm9ncmVzc1xuXG4gIHN3aXBlci51cGRhdGVQcm9ncmVzcyhuZXdUcmFuc2xhdGUpO1xuXG4gIGlmIChwYXJhbXMuY3NzTW9kZSkge1xuICAgIHZhciBpc0ggPSBzd2lwZXIuaXNIb3Jpem9udGFsKCk7XG5cbiAgICBpZiAoc3BlZWQgPT09IDApIHtcbiAgICAgIHdyYXBwZXJFbFtpc0ggPyAnc2Nyb2xsTGVmdCcgOiAnc2Nyb2xsVG9wJ10gPSAtbmV3VHJhbnNsYXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIGlmICh3cmFwcGVyRWwuc2Nyb2xsVG8pIHtcbiAgICAgICAgdmFyIF93cmFwcGVyRWwkc2Nyb2xsVG87XG5cbiAgICAgICAgd3JhcHBlckVsLnNjcm9sbFRvKChfd3JhcHBlckVsJHNjcm9sbFRvID0ge30sIF93cmFwcGVyRWwkc2Nyb2xsVG9baXNIID8gJ2xlZnQnIDogJ3RvcCddID0gLW5ld1RyYW5zbGF0ZSwgX3dyYXBwZXJFbCRzY3JvbGxUby5iZWhhdmlvciA9ICdzbW9vdGgnLCBfd3JhcHBlckVsJHNjcm9sbFRvKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3cmFwcGVyRWxbaXNIID8gJ3Njcm9sbExlZnQnIDogJ3Njcm9sbFRvcCddID0gLW5ld1RyYW5zbGF0ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChzcGVlZCA9PT0gMCkge1xuICAgIHN3aXBlci5zZXRUcmFuc2l0aW9uKDApO1xuICAgIHN3aXBlci5zZXRUcmFuc2xhdGUobmV3VHJhbnNsYXRlKTtcblxuICAgIGlmIChydW5DYWxsYmFja3MpIHtcbiAgICAgIHN3aXBlci5lbWl0KCdiZWZvcmVUcmFuc2l0aW9uU3RhcnQnLCBzcGVlZCwgaW50ZXJuYWwpO1xuICAgICAgc3dpcGVyLmVtaXQoJ3RyYW5zaXRpb25FbmQnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc3dpcGVyLnNldFRyYW5zaXRpb24oc3BlZWQpO1xuICAgIHN3aXBlci5zZXRUcmFuc2xhdGUobmV3VHJhbnNsYXRlKTtcblxuICAgIGlmIChydW5DYWxsYmFja3MpIHtcbiAgICAgIHN3aXBlci5lbWl0KCdiZWZvcmVUcmFuc2l0aW9uU3RhcnQnLCBzcGVlZCwgaW50ZXJuYWwpO1xuICAgICAgc3dpcGVyLmVtaXQoJ3RyYW5zaXRpb25TdGFydCcpO1xuICAgIH1cblxuICAgIGlmICghc3dpcGVyLmFuaW1hdGluZykge1xuICAgICAgc3dpcGVyLmFuaW1hdGluZyA9IHRydWU7XG5cbiAgICAgIGlmICghc3dpcGVyLm9uVHJhbnNsYXRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZCkge1xuICAgICAgICBzd2lwZXIub25UcmFuc2xhdGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kID0gZnVuY3Rpb24gdHJhbnNpdGlvbkVuZChlKSB7XG4gICAgICAgICAgaWYgKCFzd2lwZXIgfHwgc3dpcGVyLmRlc3Ryb3llZCkgcmV0dXJuO1xuICAgICAgICAgIGlmIChlLnRhcmdldCAhPT0gdGhpcykgcmV0dXJuO1xuICAgICAgICAgIHN3aXBlci4kd3JhcHBlckVsWzBdLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBzd2lwZXIub25UcmFuc2xhdGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kKTtcbiAgICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbFswXS5yZW1vdmVFdmVudExpc3RlbmVyKCd3ZWJraXRUcmFuc2l0aW9uRW5kJywgc3dpcGVyLm9uVHJhbnNsYXRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZCk7XG4gICAgICAgICAgc3dpcGVyLm9uVHJhbnNsYXRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZCA9IG51bGw7XG4gICAgICAgICAgZGVsZXRlIHN3aXBlci5vblRyYW5zbGF0ZVRvV3JhcHBlclRyYW5zaXRpb25FbmQ7XG5cbiAgICAgICAgICBpZiAocnVuQ2FsbGJhY2tzKSB7XG4gICAgICAgICAgICBzd2lwZXIuZW1pdCgndHJhbnNpdGlvbkVuZCcpO1xuICAgICAgICAgI
118H1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgc3dpcGVyLiR3cmFwcGVyRWxbMF0uYWRkRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIHN3aXBlci5vblRyYW5zbGF0ZVRvV3JhcHBlclRyYW5zaXRpb25FbmQpO1xuICAgICAgc3dpcGVyLiR3cmFwcGVyRWxbMF0uYWRkRXZlbnRMaXN0ZW5lcignd2Via2l0VHJhbnNpdGlvbkVuZCcsIHN3aXBlci5vblRyYW5zbGF0ZVRvV3JhcHBlclRyYW5zaXRpb25FbmQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufSIsImltcG9ydCBzbGlkZVRvIGZyb20gJy4vc2xpZGVUbyc7XG5pbXBvcnQgc2xpZGVUb0xvb3AgZnJvbSAnLi9zbGlkZVRvTG9vcCc7XG5pbXBvcnQgc2xpZGVOZXh0IGZyb20gJy4vc2xpZGVOZXh0JztcbmltcG9ydCBzbGlkZVByZXYgZnJvbSAnLi9zbGlkZVByZXYnO1xuaW1wb3J0IHNsaWRlUmVzZXQgZnJvbSAnLi9zbGlkZVJlc2V0JztcbmltcG9ydCBzbGlkZVRvQ2xvc2VzdCBmcm9tICcuL3NsaWRlVG9DbG9zZXN0JztcbmltcG9ydCBzbGlkZVRvQ2xpY2tlZFNsaWRlIGZyb20gJy4vc2xpZGVUb0NsaWNrZWRTbGlkZSc7XG5leHBvcnQgZGVmYXVsdCB7XG4gIHNsaWRlVG86IHNsaWRlVG8sXG4gIHNsaWRlVG9Mb29wOiBzbGlkZVRvTG9vcCxcbiAgc2xpZGVOZXh0OiBzbGlkZU5leHQsXG4gIHNsaWRlUHJldjogc2xpZGVQcmV2LFxuICBzbGlkZVJlc2V0OiBzbGlkZVJlc2V0LFxuICBzbGlkZVRvQ2xvc2VzdDogc2xpZGVUb0Nsb3Nlc3QsXG4gIHNsaWRlVG9DbGlja2VkU2xpZGU6IHNsaWRlVG9DbGlja2VkU2xpZGVcbn07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2xpZGVUbyhpbmRleCwgc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwsIGluaXRpYWwpIHtcbiAgaWYgKGluZGV4ID09PSB2b2lkIDApIHtcbiAgICBpbmRleCA9IDA7XG4gIH1cblxuICBpZiAoc3BlZWQgPT09IHZvaWQgMCkge1xuICAgIHNwZWVkID0gdGhpcy5wYXJhbXMuc3BlZWQ7XG4gIH1cblxuICBpZiAocnVuQ2FsbGJhY2tzID09PSB2b2lkIDApIHtcbiAgICBydW5DYWxsYmFja3MgPSB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBpbmRleCAhPT0gJ251bWJlcicgJiYgdHlwZW9mIGluZGV4ICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSAnaW5kZXgnIGFyZ3VtZW50IGNhbm5vdCBoYXZlIHR5cGUgb3RoZXIgdGhhbiAnbnVtYmVyJyBvciAnc3RyaW5nJy4gW1wiICsgdHlwZW9mIGluZGV4ICsgXCJdIGdpdmVuLlwiKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgaW5kZXggPT09ICdzdHJpbmcnKSB7XG4gICAgLyoqXG4gICAgICogVGhlIGBpbmRleGAgYXJndW1lbnQgY29udmVydGVkIGZyb20gYHN0cmluZ2AgdG8gYG51bWJlcmAuXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB2YXIgaW5kZXhBc051bWJlciA9IHBhcnNlSW50KGluZGV4LCAxMCk7XG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHR
118oZSBgaW5kZXhgIGFyZ3VtZW50IGlzIGEgdmFsaWQgYG51bWJlcmBcbiAgICAgKiBhZnRlciBiZWluZyBjb252ZXJ0ZWQgZnJvbSB0aGUgYHN0cmluZ2AgdHlwZS5cbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cblxuICAgIHZhciBpc1ZhbGlkTnVtYmVyID0gaXNGaW5pdGUoaW5kZXhBc051bWJlcik7XG5cbiAgICBpZiAoIWlzVmFsaWROdW1iZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBwYXNzZWQtaW4gJ2luZGV4JyAoc3RyaW5nKSBjb3VsZG4ndCBiZSBjb252ZXJ0ZWQgdG8gJ251bWJlcicuIFtcIiArIGluZGV4ICsgXCJdIGdpdmVuLlwiKTtcbiAgICB9IC8vIEtub3dpbmcgdGhhdCB0aGUgY29udmVydGVkIGBpbmRleGAgaXMgYSB2YWxpZCBudW1iZXIsXG4gICAgLy8gd2UgY2FuIHVwZGF0ZSB0aGUgb3JpZ2luYWwgYXJndW1lbnQncyB2YWx1ZS5cblxuXG4gICAgaW5kZXggPSBpbmRleEFzTnVtYmVyO1xuICB9XG5cbiAgdmFyIHN3aXBlciA9IHRoaXM7XG4gIHZhciBzbGlkZUluZGV4ID0gaW5kZXg7XG4gIGlmIChzbGlkZUluZGV4IDwgMCkgc2xpZGVJbmRleCA9IDA7XG4gIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLFxuICAgICAgc25hcEdyaWQgPSBzd2lwZXIuc25hcEdyaWQsXG4gICAgICBzbGlkZXNHcmlkID0gc3dpcGVyLnNsaWRlc0dyaWQsXG4gICAgICBwcmV2aW91c0luZGV4ID0gc3dpcGVyLnByZXZpb3VzSW5kZXgsXG4gICAgICBhY3RpdmVJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleCxcbiAgICAgIHJ0bCA9IHN3aXBlci5ydGxUcmFuc2xhdGUsXG4gICAgICB3cmFwcGVyRWwgPSBzd2lwZXIud3JhcHBlckVsLFxuICAgICAgZW5hYmxlZCA9IHN3aXBlci5lbmFibGVkO1xuXG4gIGlmIChzd2lwZXIuYW5pbWF0aW5nICYmIHBhcmFtcy5wcmV2ZW50SW50ZXJhY3Rpb25PblRyYW5zaXRpb24gfHwgIWVuYWJsZWQgJiYgIWludGVybmFsICYmICFpbml0aWFsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHNraXAgPSBNYXRoLm1pbihzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwU2tpcCwgc2xpZGVJbmRleCk7XG4gIHZhciBzbmFwSW5kZXggPSBza2lwICsgTWF0aC5mbG9vcigoc2xpZGVJbmRleCAtIHNraXApIC8gc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJHcm91cCk7XG4gIGlmIChzbmFwSW5kZXggPj0gc25hcEdyaWQubGVuZ3RoKSBzbmFwSW5kZXggPSBzbmFwR3JpZC5sZW5ndGggLSAxO1xuXG4gIGlmICgoYWN0aXZlSW5kZXggfHwgcGFyYW1zLmluaXRpYWxTbGlkZSB8fCAwKSA9PT0gKHByZXZpb3VzSW5kZXggfHwgMCkgJiYgcnVuQ2FsbGJhY2tzKSB7XG4gICAgc3dpcGVyLmVtaXQoJ2JlZm9yZVNsaWRlQ2hhbmdlU3RhcnQnKTtcbiAgfVxuXG4gIHZhciB0cmFuc2xhdGUgPSAtc25hcEdyaWRbc25hcEluZGV4XTsgLy8gVXBkYXRlIHByb2dyZXNzXG5cbiAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKHRyYW5zbGF0ZSk7IC8vIE5vcm1hbGl6ZSBzbGlkZUluZGV4XG5cbiAgaWYgKHBhcmFtcy5ub3JtYWxpemVTbGlkZUluZGV4KSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGlkZXNHcmlkLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICB2Y
118XIgbm9ybWFsaXplZFRyYW5zbGF0ZSA9IC1NYXRoLmZsb29yKHRyYW5zbGF0ZSAqIDEwMCk7XG4gICAgICB2YXIgbm9ybWFsaXplZEdpcmQgPSBNYXRoLmZsb29yKHNsaWRlc0dyaWRbaV0gKiAxMDApO1xuICAgICAgdmFyIG5vcm1hbGl6ZWRHcmlkTmV4dCA9IE1hdGguZmxvb3Ioc2xpZGVzR3JpZFtpICsgMV0gKiAxMDApO1xuXG4gICAgICBpZiAodHlwZW9mIHNsaWRlc0dyaWRbaSArIDFdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBpZiAobm9ybWFsaXplZFRyYW5zbGF0ZSA+PSBub3JtYWxpemVkR2lyZCAmJiBub3JtYWxpemVkVHJhbnNsYXRlIDwgbm9ybWFsaXplZEdyaWROZXh0IC0gKG5vcm1hbGl6ZWRHcmlkTmV4dCAtIG5vcm1hbGl6ZWRHaXJkKSAvIDIpIHtcbiAgICAgICAgICBzbGlkZUluZGV4ID0gaTtcbiAgICAgICAgfSBlbHNlIGlmIChub3JtYWxpemVkVHJhbnNsYXRlID49IG5vcm1hbGl6ZWRHaXJkICYmIG5vcm1hbGl6ZWRUcmFuc2xhdGUgPCBub3JtYWxpemVkR3JpZE5leHQpIHtcbiAgICAgICAgICBzbGlkZUluZGV4ID0gaSArIDE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobm9ybWFsaXplZFRyYW5zbGF0ZSA+PSBub3JtYWxpemVkR2lyZCkge1xuICAgICAgICBzbGlkZUluZGV4ID0gaTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gRGlyZWN0aW9ucyBsb2Nrc1xuXG5cbiAgaWYgKHN3aXBlci5pbml0aWFsaXplZCAmJiBzbGlkZUluZGV4ICE9PSBhY3RpdmVJbmRleCkge1xuICAgIGlmICghc3dpcGVyLmFsbG93U2xpZGVOZXh0ICYmIHRyYW5zbGF0ZSA8IHN3aXBlci50cmFuc2xhdGUgJiYgdHJhbnNsYXRlIDwgc3dpcGVyLm1pblRyYW5zbGF0ZSgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCFzd2lwZXIuYWxsb3dTbGlkZVByZXYgJiYgdHJhbnNsYXRlID4gc3dpcGVyLnRyYW5zbGF0ZSAmJiB0cmFuc2xhdGUgPiBzd2lwZXIubWF4VHJhbnNsYXRlKCkpIHtcbiAgICAgIGlmICgoYWN0aXZlSW5kZXggfHwgMCkgIT09IHNsaWRlSW5kZXgpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICB2YXIgZGlyZWN0aW9uO1xuICBpZiAoc2xpZGVJbmRleCA+IGFjdGl2ZUluZGV4KSBkaXJlY3Rpb24gPSAnbmV4dCc7ZWxzZSBpZiAoc2xpZGVJbmRleCA8IGFjdGl2ZUluZGV4KSBkaXJlY3Rpb24gPSAncHJldic7ZWxzZSBkaXJlY3Rpb24gPSAncmVzZXQnOyAvLyBVcGRhdGUgSW5kZXhcblxuICBpZiAocnRsICYmIC10cmFuc2xhdGUgPT09IHN3aXBlci50cmFuc2xhdGUgfHwgIXJ0bCAmJiB0cmFuc2xhdGUgPT09IHN3aXBlci50cmFuc2xhdGUpIHtcbiAgICBzd2lwZXIudXBkYXRlQWN0aXZlSW5kZXgoc2xpZGVJbmRleCk7IC8vIFVwZGF0ZSBIZWlnaHRcblxuICAgIGlmIChwYXJhbXMuYXV0b0hlaWdodCkge1xuICAgICAgc3dpcGVyLnVwZGF0ZUF1dG9IZWlnaHQoKTtcbiAgICB9XG5cbiAgICBzd2lwZXIudXBkYXRlU2xpZGVzQ2xhc3NlcygpO1xuXG4gICAgaWYgKHBhcmFtcy5lZmZlY3QgIT09ICdzbGlkZScpIHtcbiAgICAgIHN3aXBlci5zZXRUcmFuc2xhdGUodHJhbnNsYXRlKTtcbiAgICB9XG5cbiAgICBpZiAoZGlyZWN0aW9uICE9PSAncmVzZXQnKSB7XG4gICAgICBzd2lwZXIudHJhbnNpdGlvblN0YXJ0KHJ1bkNhbGxiYWNrcywgZGlyZWN0aW9uKTtcbiAgICAgIHN3aXBlci50cmFuc2l0aW9uRW5kKHJ1bkNhbGxiYWNrcywgZGlyZWN0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAocGFyYW1zLmNzc01vZGUpIHtcbiAgICB2YXIgaXNIID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpO1xuICAgIHZhciB0ID0gLXRyYW5zbGF0ZTtcblxuICAgIGlmIChydGwpIHtcbiAgICAgIHQgPSB3cmFwcGVyRWwuc2Nyb2xsV2lkdGggLSB3cmFwcGVyRWwub2Zmc2V0V2lkdGggLSB0O1xuICAgIH1cblxuICAgIGlmIChzcGVlZCA9PT0gMCkge1xuICAgICAgd3JhcHBlckVsW2lzSCA/ICdzY3JvbGxMZWZ0JyA6ICdzY3JvbGxUb3AnXSA9IHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgaWYgKHdyYXBwZXJFbC5zY3JvbGxUbykge1xuICAgICAgICB2Y
118XIgX3dyYXBwZXJFbCRzY3JvbGxUbztcblxuICAgICAgICB3cmFwcGVyRWwuc2Nyb2xsVG8oKF93cmFwcGVyRWwkc2Nyb2xsVG8gPSB7fSwgX3dyYXBwZXJFbCRzY3JvbGxUb1tpc0ggPyAnbGVmdCcgOiAndG9wJ10gPSB0LCBfd3JhcHBlckVsJHNjcm9sbFRvLmJlaGF2aW9yID0gJ3Ntb290aCcsIF93cmFwcGVyRWwkc2Nyb2xsVG8pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdyYXBwZXJFbFtpc0ggPyAnc2Nyb2xsTGVmdCcgOiAnc2Nyb2xsVG9wJ10gPSB0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHNwZWVkID09PSAwKSB7XG4gICAgc3dpcGVyLnNldFRyYW5zaXRpb24oMCk7XG4gICAgc3dpcGVyLnNldFRyYW5zbGF0ZSh0cmFuc2xhdGUpO1xuICAgIHN3aXBlci51cGRhdGVBY3RpdmVJbmRleChzbGlkZUluZGV4KTtcbiAgICBzd2lwZXIudXBkYXRlU2xpZGVzQ2xhc3NlcygpO1xuICAgIHN3aXBlci5lbWl0KCdiZWZvcmVUcmFuc2l0aW9uU3RhcnQnLCBzcGVlZCwgaW50ZXJuYWwpO1xuICAgIHN3aXBlci50cmFuc2l0aW9uU3RhcnQocnVuQ2FsbGJhY2tzLCBkaXJlY3Rpb24pO1xuICAgIHN3aXBlci50cmFuc2l0aW9uRW5kKHJ1bkNhbGxiYWNrcywgZGlyZWN0aW9uKTtcbiAgfSBlbHNlIHtcbiAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbihzcGVlZCk7XG4gICAgc3dpcGVyLnNldFRyYW5zbGF0ZSh0cmFuc2xhdGUpO1xuICAgIHN3aXBlci51cGRhdGVBY3RpdmVJbmRleChzbGlkZUluZGV4KTtcbiAgICBzd2lwZXIudXBkYXRlU2xpZGVzQ2xhc3NlcygpO1xuICAgIHN3aXBlci5lbWl0KCdiZWZvcmVUcmFuc2l0aW9uU3RhcnQnLCBzcGVlZCwgaW50ZXJuYWwpO1xuICAgIHN3aXBlci50cmFuc2l0aW9uU3RhcnQocnVuQ2FsbGJhY2tzLCBkaXJlY3Rpb24pO1xuXG4gICAgaWYgKCFzd2lwZXIuYW5pbWF0aW5nKSB7XG4gICAgICBzd2lwZXIuYW5pbWF0aW5nID0gdHJ1ZTtcblxuICAgICAgaWYgKCFzd2lwZXIub25TbGlkZVRvV3JhcHBlclRyYW5zaXRpb25FbmQpIHtcbiAgICAgICAgc3dpcGVyLm9uU2xpZGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kID0gZnVuY3Rpb24gdHJhbnNpdGlvbkVuZChlKSB7XG4gICAgICAgICAgaWYgKCFzd2lwZXIgfHwgc3dpcGVyLmRlc3Ryb3llZCkgcmV0dXJuO1xuICAgICAgICAgIGlmIChlLnRhcmdldCAhPT0gdGhpcykgcmV0dXJuO1xuICAgICAgICAgIHN3aXBlci4kd3JhcHBlckVsWzBdLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBzd2lwZXIub25TbGlkZVRvV3JhcHBlclRyYW5zaXRpb25FbmQpO1xuICAgICAgICAgIHN3aXBlci4kd3JhcHBlckVsWzBdLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dlYmtpdFRyYW5zaXRpb25FbmQnLCBzd2lwZXIub25TbGlkZVRvV3JhcHBlclRyYW5zaXRpb25FbmQpO1xuICAgICAgICAgIHN3aXBlci5vblNsaWRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZCA9IG51bGw7XG4gICAgICAgICAgZGVsZXRlIHN3aXBlci5vblNsaWRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZDtcbiAgICAgICAgICBzd2lwZXIudHJhbnNpdGlvbkVuZChydW5DYWxsYmFja3MsIGRpcmVjdGlvbik7XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHN3aXBlci4kd3JhcHBlckVsWzBdLmFkZEV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBzd2lwZXIub25TbGlkZVRvV3JhcHBlclRyYW5zaXRpb25FbmQpO1xuICAgICAgc3dpcGVyLiR3cmFwcGVyRWxbMF0uYWRkRXZlbnRMaXN0ZW5lcignd2Via2l0VHJhbnNpdGlvbkVuZCcsIHN3aXBlci5vblNsaWRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2xpZGVUb0xvb3AoaW5kZXgsIHNwZWVkLCBydW5DYWxsYmFja3MsIGludGVybmFsKSB7XG4gIGlmIChpbmRleCA9PT0gdm9pZCAwKSB7XG4gICAgaW5kZXggPSAwO1xuICB9XG5cbiAgaWYgKHNwZWVkID09PSB2b2lkIDApIHtcbiAgICBzcGVlZCA9IHRoaXMucGFyYW1zLnNwZWVkO1xuICB9XG5cbiAgaWYgKHJ1bkNhbGxiYWNrcyA9PT0gdm9pZCAwKSB7XG4gICAgcnVuQ2FsbGJhY2tzID0gdHJ1ZTtcbiAgfVxuXG4gIHZhciBzd2lwZXIgPSB0aGlzO1xuICB2YXIgbmV3SW5kZXggPSBpbmRleDtcblxuICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgbmV3SW5kZXggKz0gc3dpcGVyLmxvb3BlZFNsaWRlcztcbiAgfVxuXG4gIHJldHVybiBzd2lwZXIuc2xpZGVUbyhuZXdJbmRleCwgc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwpO1xufSIsIi8qIGVzbGludCBuby11bnVzZWQtdmFyczogXCJvZmZcIiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2xpZGVOZXh0KHNwZWVkLCBydW5DYWxsYmFja3MsIGludGVybmFsKSB7XG4gIGlmIChzcGVlZCA9PT0gdm9pZCAwKSB7XG4gICAgc3BlZWQgPSB0aGlzLnBhcmFtcy5zcGVlZDtcbiAgfVxuXG4gIGlmIChydW5DYWxsYmFja3MgPT09IHZvaWQgMCkge1xuICAgIHJ1bkNhbGxiYWNrcyA9IHRydWU7XG4gIH1cblxuICB2YXIgc3dpcGVyID0gdGhpcztcbiAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMsXG4gICAgICBhbmltYXRpbmcgPSBzd2lwZXIuYW5pbWF0aW5nLFxuICAgICAgZW5hYmxlZCA9IHN3aXBlci5lbmFibGVkO1xuICBpZiAoIWVuYWJsZWQpIHJldHVybiBzd2lwZXI7XG4gIHZhciBpbmNyZW1lbnQgPSBzd2lwZXIuYWN0aXZlSW5kZXggPCBwYXJhbXMuc2xpZGVzUGVyR3JvdXBTa2lwID8gMSA6IHBhcmFtcy5zbGlkZXNQZXJHcm91cDtcblxuICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICBpZiAoYW5pbWF0aW5nICYmIHBhcmFtcy5sb29wUHJldmVudHNTbGlkZSkgcmV0dXJuIGZhbHNlO1xuICAgIHN3aXBlci5sb29wRml4KCk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuXG4gICAgc3dpcGVyLl9jbGllbnRMZWZ0ID0gc3dpcGVyLiR3cmFwcGVyRWxbMF0uY2xpZW50TGVmdDtcbiAgfVxuXG4gIHJldHVybiBzd2lwZXIuc2xpZGVUbyhzd2lwZXIuYWN0aXZlSW5kZXggKyBpbmNyZW1lbnQsIHNwZWVkLCBydW5DYWxsYmFja3MsIGludGVybmFsKTtcbn0iLCIvKiBlc2xpbnQgbm8tdW51c2VkLXZhcnM6IFwib2ZmXCIgKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNsaWRlUHJldihzcGVlZCwgcnVuQ2FsbGJhY2tzLCBpbnRlcm5hbCkge1xuICBpZiAoc3BlZWQgPT09IHZvaWQgMCkge1xuICAgIHNwZWVkID0gdGhpcy5wYXJhbXMuc3BlZWQ7XG4gIH1cblxuICBpZiAocnVuQ2FsbGJhY2tzID09PSB2b2lkIDApIHtcbiAgICBydW5DYWxsYmFja3MgPSB0cnVlO1xuICB9XG5cbiAgdmFyIHN3aXBlciA9IHRoaXM7XG4gIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLFxuICAgICAgYW5pbWF0aW5nID0gc3dpcGVyLmFuaW1hdGluZyxcbiAgICAgIHNuYXBHcmlkID0gc3dpcGVyLnNuYXBHcmlkLFxuICAgICAgc2xpZGVzR3JpZCA9IHN3aXBlci5zbGlkZXNHcmlkLFxuICAgICAgcnRsVHJhbnNsYXRlID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZSxcbiAgICAgIGVuYWJsZWQgPSBzd2lwZXIuZW5hYmxlZDtcbiAgaWYgKCFlbmFibGVkKSByZXR1cm4gc3dpcGVyO1xuXG4gIGlmIChwYXJhbXMubG9vcCkge1xuICAgIGlmIChhbmltYXRpbmcgJiYgcGFyYW1zLmxvb3BQcmV2ZW50c1NsaWRlKSByZXR1cm4gZmFsc2U7XG4gICAgc3dpcGVyLmxvb3BGaXgoKTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG5cbiAgICBzd2lwZXIuX2NsaWVudExlZnQgPSBzd2lwZXIuJHdyYXBwZXJFbFswXS5jbGllbnRMZWZ0O1xuICB9XG5cbiAgdmFyIHRyYW5zbGF0ZSA9IHJ0bFRyYW5zbGF0ZSA/IHN3aXBlci50cmFuc2xhdGUgOiAtc3dpcGVyLnRyYW5zbGF0ZTtcblxuICBmdW5jdGlvbiBub3JtYWxpemUodmFsKSB7XG4gICAgaWYgKHZhbCA8IDApIHJldHVybiAtTWF0aC5mbG9vcihNYXRoLmFicyh2YWwpKTtcbiAgICByZXR1cm4gTWF0aC5mbG9vcih2YWwpO1xuICB9XG5cbiAgdmFyIG5vcm1hbGl6ZWRUcmFuc2xhdGUgPSBub3JtYWxpemUodHJhbnNsYXRlKTtcbiAgdmFyIG5vcm1hbGl6ZWRTbmFwR3JpZCA9IHNuYXBHcmlkLm1hcChmdW5jdGlvbiAodmFsKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZSh2YWwpO1xuICB9KTtcbiAgdmFyIHByZXZTbmFwID0gc25hcEdyaWRbbm9ybWFsaXplZFNuYXBHcmlkLmluZGV4T2Yobm9ybWFsaXplZFRyYW5zbGF0ZSkgLSAxXTtcblxuICBpZiAodHlwZW9mIHByZXZTbmFwID09PSAndW5kZWZpbmVkJyAmJiBwYXJhbXMuY3NzTW9kZSkge1xuICAgIHNuYXBHcmlkLmZvckVhY2goZnVuY3Rpb24gKHNuYXApIHtcbiAgICAgIGlmICghcHJldlNuYXAgJiYgbm9ybWFsaXplZFRyYW5zbGF0ZSA+PSBzbmFwKSBwcmV2U25hcCA9IHNuYXA7XG4gICAgfSk7XG4gIH1cblxuICB2Y
118XIgcHJldkluZGV4O1xuXG4gIGlmICh0eXBlb2YgcHJldlNuYXAgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcHJldkluZGV4ID0gc2xpZGVzR3JpZC5pbmRleE9mKHByZXZTbmFwKTtcbiAgICBpZiAocHJldkluZGV4IDwgMCkgcHJldkluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4IC0gMTtcbiAgfVxuXG4gIHJldHVybiBzd2lwZXIuc2xpZGVUbyhwcmV2SW5kZXgsIHNwZWVkLCBydW5DYWxsYmFja3MsIGludGVybmFsKTtcbn0iLCIvKiBlc2xpbnQgbm8tdW51c2VkLXZhcnM6IFwib2ZmXCIgKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNsaWRlUmVzZXQoc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwpIHtcbiAgaWYgKHNwZWVkID09PSB2b2lkIDApIHtcbiAgICBzcGVlZCA9IHRoaXMucGFyYW1zLnNwZWVkO1xuICB9XG5cbiAgaWYgKHJ1bkNhbGxiYWNrcyA9PT0gdm9pZCAwKSB7XG4gICAgcnVuQ2FsbGJhY2tzID0gdHJ1ZTtcbiAgfVxuXG4gIHZhciBzd2lwZXIgPSB0aGlzO1xuICByZXR1cm4gc3dpcGVyLnNsaWRlVG8oc3dpcGVyLmFjdGl2ZUluZGV4LCBzcGVlZCwgcnVuQ2FsbGJhY2tzLCBpbnRlcm5hbCk7XG59IiwiLyogZXNsaW50IG5vLXVudXNlZC12YXJzOiBcIm9mZlwiICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzbGlkZVRvQ2xvc2VzdChzcGVlZCwgcnVuQ2FsbGJhY2tzLCBpbnRlcm5hbCwgdGhyZXNob2xkKSB7XG4gIGlmIChzcGVlZCA9PT0gdm9pZCAwKSB7XG4gICAgc3BlZWQgPSB0aGlzLnBhcmFtcy5zcGVlZDtcbiAgfVxuXG4gIGlmIChydW5DYWxsYmFja3MgPT09IHZvaWQgMCkge1xuICAgIHJ1bkNhbGxiYWNrcyA9IHRydWU7XG4gIH1cblxuICBpZiAodGhyZXNob2xkID09PSB2b2lkIDApIHtcbiAgICB0aHJlc2hvbGQgPSAwLjU7XG4gIH1cblxuICB2YXIgc3dpcGVyID0gdGhpcztcbiAgdmFyIGluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4O1xuICB2YXIgc2tpcCA9IE1hdGgubWluKHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXBTa2lwLCBpbmRleCk7XG4gIHZhciBzbmFwSW5kZXggPSBza2lwICsgTWF0aC5mbG9vcigoaW5kZXggLSBza2lwKSAvIHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXApO1xuICB2YXIgdHJhbnNsYXRlID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZSA/IHN3aXBlci50cmFuc2xhdGUgOiAtc3dpcGVyLnRyYW5zbGF0ZTtcblxuICBpZiAodHJhbnNsYXRlID49IHN3aXBlci5zbmFwR3JpZFtzbmFwSW5kZXhdKSB7XG4gICAgLy8gVGhlIGN1cnJlbnQgdHJhbnNsYXRlIGlzIG9uIG9yIGFmdGVyIHRoZSBjdXJyZW50IHNuYXAgaW5kZXgsIHNvIHRoZSBjaG9pY2VcbiAgICAvLyBpcyBiZXR3ZWVuIHRoZSBjdXJyZW50IGluZGV4IGFuZCB0aGUgb25lIGFmdGVyIGl0LlxuICAgIHZhciBjdXJyZW50U25hcCA9IHN3aXBlci5zbmFwR3JpZFtzbmFwSW5kZXhdO1xuICAgIHZhciBuZXh0U25hcCA9IHN3aXBlci5zbmFwR3JpZFtzbmFwSW5kZXggKyAxXTtcblxuICAgIGlmICh0cmFuc2xhdGUgLSBjdXJyZW50U25hcCA+IChuZXh0U25hcCAtIGN1cnJlbnRTbmFwKSAqIHRocmVzaG9sZCkge1xuICAgICAgaW5kZXggKz0gc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJHcm91cDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhlIGN1cnJlbnQgdHJhbnNsYXRlIGlzIGJlZm9yZSB0aGUgY3VycmVudCBzbmFwIGluZGV4LCBzbyB0aGUgY2hvaWNlXG4gICAgLy8gaXMgYmV0d2VlbiB0aGUgY3VycmVudCBpbmRleCBhbmQgdGhlIG9uZSBiZWZvcmUgaXQuXG4gICAgdmFyIHByZXZTbmFwID0gc3dpcGVyLnNuYXBHcmlkW3NuYXBJbmRleCAtIDFdO1xuICAgIHZhciBfY3VycmVudFNuYXAgPSBzd2lwZXIuc25hcEdyaWRbc25hcEluZGV4XTtcblxuICAgIGlmICh0cmFuc2xhdGUgLSBwcmV2U25hcCA8PSAoX2N1cnJlbnRTbmFwIC0gcHJldlNuYXApICogdGhyZXNob2xkKSB7XG4gICAgICBpbmRleCAtPSBzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwO1xuICAgIH1cbiAgfVxuXG4gIGluZGV4ID0gTWF0aC5tYXgoaW5kZXgsIDApO1xuICBpbmRleCA9IE1hdGgubWluKGluZGV4LCBzd2lwZXIuc2xpZGVzR3JpZC5sZW5ndGggLSAxKTtcbiAgcmV0dXJuIHN3aXBlci5zbGlkZVRvKGluZGV4LCBzcGVlZCwgcnVuQ2FsbGJhY2tzLCBpbnRlcm5hbCk7XG59IiwiaW1wb3J0ICQgZnJvbSAnLi4vLi4vLi4vdXRpbHMvZG9tJztcbmltcG9ydCB7IG5leHRUaWNrIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2xpZGVUb0NsaWNrZWRTbGlkZSgpIHtcbiAgdmFyIHN3aXBlciA9IHRoaXM7XG4gIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLFxuICAgICAgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsO1xuICB2YXIgc2xpZGVzUGVyVmlldyA9IHBhcmFtcy5zbGlkZXNQZXJWaWV3ID09PSAnYXV0bycgPyBzd2lwZXIuc2xpZGVzUGVyVmlld0R5bmFtaWMoKSA6IHBhcmFtcy5zbGlkZXNQZXJWaWV3O1xuICB2YXIgc2xpZGVUb0luZGV4ID0gc3dpcGVyLmNsaWNrZWRJbmRleDtcbiAgdmFyIHJlYWxJbmRleDtcblxuICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICBpZiAoc3dpcGVyLmFuaW1hdGluZykgcmV0dXJuO1xuICAgIHJlYWxJbmRleCA9IHBhcnNlSW50KCQoc3dpcGVyLmNsaWNrZWRTbGlkZSkuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKSwgMTApO1xuXG4gICAgaWYgKHBhcmFtcy5jZW50ZXJlZFNsaWRlcykge1xuICAgICAgaWYgKHNsaWRlVG9JbmRleCA8IHN3aXBlci5sb29wZWRTbGlkZXMgLSBzbGlkZXNQZXJWaWV3IC8gMiB8fCBzbGlkZVRvSW5kZXggPiBzd2lwZXIuc2xpZGVzLmxlbmd0aCAtIHN3aXBlci5sb29wZWRTbGlkZXMgKyBzbGlkZXNQZXJWaWV3IC8gMikge1xuICAgICAgICBzd2lwZXIubG9vcEZpeCgpO1xuICAgICAgICBzbGlkZVRvSW5kZXggPSAkd3JhcHBlckVsLmNoaWxkcmVuKFwiLlwiICsgcGFyYW1zLnNsaWRlQ2xhc3MgKyBcIltkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cXFwiXCIgKyByZWFsSW5kZXggKyBcIlxcXCJdOm5vdCguXCIgKyBwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcyArIFwiKVwiKS5lcSgwKS5pbmRleCgpO1xuICAgICAgICBuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgc3dpcGVyLnNsaWRlVG8oc2xpZGVUb0luZGV4KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2lwZXIuc2xpZGVUbyhzbGlkZVRvSW5kZXgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc2xpZGVUb0luZGV4ID4gc3dpcGVyLnNsaWRlcy5sZW5ndGggLSBzbGlkZXNQZXJWaWV3
118KSB7XG4gICAgICBzd2lwZXIubG9vcEZpeCgpO1xuICAgICAgc2xpZGVUb0luZGV4ID0gJHdyYXBwZXJFbC5jaGlsZHJlbihcIi5cIiArIHBhcmFtcy5zbGlkZUNsYXNzICsgXCJbZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XFxcIlwiICsgcmVhbEluZGV4ICsgXCJcXFwiXTpub3QoLlwiICsgcGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MgKyBcIilcIikuZXEoMCkuaW5kZXgoKTtcbiAgICAgIG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc3dpcGVyLnNsaWRlVG8oc2xpZGVUb0luZGV4KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzd2lwZXIuc2xpZGVUbyhzbGlkZVRvSW5kZXgpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBzd2lwZXIuc2xpZGVUbyhzbGlkZVRvSW5kZXgpO1xuICB9XG59IiwiaW1wb3J0IGxvb3BDcmVhdGUgZnJvbSAnLi9sb29wQ3JlYXRlJztcbmltcG9ydCBsb29wRml4IGZyb20gJy4vbG9vcEZpeCc7XG5pbXBvcnQgbG9vcERlc3Ryb3kgZnJvbSAnLi9sb29wRGVzdHJveSc7XG5leHBvcnQgZGVmYXVsdCB7XG4gIGxvb3BDcmVhdGU6IGxvb3BDcmVhdGUsXG4gIGxvb3BGaXg6IGxvb3BGaXgsXG4gIGxvb3BEZXN0cm95OiBsb29wRGVzdHJveVxufTsiLCJpbXBvcnQgeyBnZXREb2N1bWVudCB9IGZyb20gJ3Nzci13aW5kb3cnO1xuaW1wb3J0ICQgZnJvbSAnLi4vLi4vLi4vdXRpbHMvZG9tJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxvb3BDcmVhdGUoKSB7XG4gIHZhciBzd2lwZXIgPSB0aGlzO1xuICB2YXIgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcyxcbiAgICAgICR3cmFwcGVyRWwgPSBzd2lwZXIuJHdyYXBwZXJFbDsgLy8gUmVtb3ZlIGR1cGxpY2F0ZWQgc2xpZGVzXG5cbiAgJHdyYXBwZXJFbC5jaGlsZHJlbihcIi5cIiArIHBhcmFtcy5zbGlkZUNsYXNzICsgXCIuXCIgKyBwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcykucmVtb3ZlKCk7XG4gIHZhciBzbGlkZXMgPSAkd3JhcHBlckVsLmNoaWxkcmVuKFwiLlwiICsgcGFyYW1zLnNsaWRlQ2xhc3MpO1xuXG4gIGlmIChwYXJhbXMubG9vcEZpbGxHcm91cFdpdGhCbGFuaykge1xuICAgIHZhciBibGFua1NsaWRlc051bSA9IHBhcmFtcy5zbGlkZXNQZXJHcm91cCAtIHNsaWRlcy5sZW5ndGggJSBwYXJhbXMuc2xpZGVzUGVyR3JvdXA7XG5cbiAgICBpZiAoYmxhbmtTbGlkZXNOdW0gIT09IHBhcmFtcy5zbGlkZXNQZXJHcm91cCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBibGFua1NsaWRlc051bTsgaSArPSAxKSB7XG4gICAgICAgIHZhciBibGFua05vZGUgPSAkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKS5hZGRDbGFzcyhwYXJhbXMuc2xpZGVDbGFzcyArIFwiIFwiICsgcGFyYW1zLnNsaWRlQmxhbmtDbGFzcyk7XG4gICAgICAgICR3cmFwcGVyRWwuYXBwZW5kKGJsYW5rTm9kZSk7XG4gICAgICB9XG5cbiAgICAgIHNsaWRlcyA9ICR3cmFwcGVyRWwuY2hpbGRyZW4oXCIuXCIgKyBwYXJhbXMuc2xpZGVDbGFzcyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHBhcmFtcy5zbGlkZXNQZXJWaWV3ID09PSAnYXV0bycgJiYgIXBhcmFtcy5sb29wZWRTbGlkZXMpIHBhcmFtcy5sb29wZWRTbGlkZXMgPSBzbGlkZXMubGVuZ3RoO1xuICBzd2lwZXIubG9vcGVkU2xpZGVzID0gTWF0aC5jZWlsKHBhcnNlRmxvYXQocGFyYW1zLmxvb3BlZFNsaWRlcyB8fCBwYXJhbXMuc2xpZGVzUGVyVmlldywgMTApKTtcbiAgc3dpcGVyLmxvb3BlZFNsaWRlcyArPSBwYXJhbXMubG9vcEFkZGl0aW9uYWxTbGlkZXM7XG5cbiAgaWYgKHN3aXBlci5sb29wZWRTbGlkZXMgPiBzbGlkZXMubGVuZ3RoKSB7XG4gICAgc3dpcGVyLmxvb3BlZFNsaWRlcyA9IHNsaWRlcy5sZW5ndGg7XG4gIH1cblxuICB2YXIgcHJlcGVuZFNsaWRlcyA9IFtdO1xuICB2YXIgYXBwZW5kU2xpZGVzID0gW107XG4gIHNsaWRlcy5lYWNoKGZ1bmN0aW9uIChlbCwgaW5kZXgpIHtcbiAgICB2YXIgc2xpZGUgPSAkKGVsKTtcblxuICAgIGlmIChpbmRleCA8IHN3aXBlci5sb29wZWRTbGlkZXMpIHtcbiAgICAgIGFwcGVuZFNsaWRlcy5wdXNoKGVsKTtcbiAgICB9XG5cbiAgICBpZiAoaW5kZXggPCBzbGlkZXMubGVuZ3RoICYmIGluZGV4ID49IHNsaWRlcy5sZW5ndGggLSBzd2lwZXIubG9vcGVkU2xpZGVzKSB7XG4gICAgICBwcmVwZW5kU2xpZGVzLnB1c2goZWwpO1xuICAgIH1cblxuICAgIHNsaWRlLmF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4JywgaW5kZXgpO1xuICB9KTtcblxuICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXBwZW5kU2xpZGVzLmxlbmd0aDsgX2kgKz0gMSkge1xuICAgICR3cmFwcGVyRWwuYXBwZW5kKCQoYXBwZW5kU2xpZGVzW19pXS5jbG9uZU5vZGUodHJ1ZSkpLmFkZENsYXNzKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzKSk7XG4gIH1cblxuICBmb3IgKHZhciBfaTIgPSBwcmVwZW5kU2xpZGVzLmxlbmd0aCAtIDE7IF9pMiA+PSAwOyBfaTIgLT0gMSkge1xuICAgICR3cmFwcGVyRWwucHJlcGVuZCgkKHByZXBlbmRTbGlkZXNbX2kyXS5jbG9uZU5vZGUodHJ1ZSkpLmFkZENsYXNzKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzKSk7XG4gIH1cbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsb29wRml4KCkge1xuICB2YXIgc3dpcGVyID0gdGhpcztcbiAgc3dpcGVyLmVtaXQoJ2JlZm9yZUxvb3BGaXgnKTtcbiAgdmFyIGFjdGl2ZUluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4LFxuICAgICAgc2xpZGVzID0gc3dpcGVyLnNsaWRlcyxcbiAgICAgIGxvb3BlZFNsaWRlcyA9IHN3aXBlci5sb29wZWRTbGlkZXMsXG4gICAgICBhbGxvd1NsaWRlUHJldiA9IHN3aXBlci5hbGxvd1NsaWRlUHJldixcbiAgICAgIGFsbG93U2xpZGVOZXh0ID0gc3dpcGVyLmFsbG93U2xpZGVOZXh0LFxuICAgICAgc25hcEdyaWQgPSBzd2lwZXIuc25hcEdyaWQsXG4gICAgICBydGwgPSBzd2lwZXIucnRsVHJhbnNsYXRlO1xuICB2YXIgbmV3SW5kZXg7XG4gIHN3aXBlci5hbGxvd1NsaWRlUHJldiA9IHRydWU7XG4gIHN3aXBlci5hbGxvd1NsaWRlTmV4dCA9IHRydWU7XG4gIHZhciBzbmFwVHJhbnNsYXRlID0gLXNuYXBHcmlkW2FjdGl2ZUluZGV4XTtcbiAgdmFyIGRpZmYgPSBzbmFwVHJhbnNsYXRlIC0gc3dpcGVyLmdldFRyYW5zbGF0ZSgpOyAvLyBGaXggRm9yIE5lZ2F0aXZlIE92ZXJzbGlkaW5nXG5cbiAgaWYgKGFjdGl2ZUluZGV4IDwgbG9vcGVkU2xpZGVzKSB7XG4gICAgbmV3SW5kZXggPSBzbGlkZXMubGVuZ3RoIC0gbG9vcGVkU2xpZGVzICogMyArIGFjdGl2ZUluZGV4O1xuICAgIG5ld0luZGV4ICs9IGxvb3BlZFNsaWRlcztcbiAgICB2YXIgc2xpZGVDaGFuZ2VkI
118D0gc3dpcGVyLnNsaWRlVG8obmV3SW5kZXgsIDAsIGZhbHNlLCB0cnVlKTtcblxuICAgIGlmIChzbGlkZUNoYW5nZWQgJiYgZGlmZiAhPT0gMCkge1xuICAgICAgc3dpcGVyLnNldFRyYW5zbGF0ZSgocnRsID8gLXN3aXBlci50cmFuc2xhdGUgOiBzd2lwZXIudHJhbnNsYXRlKSAtIGRpZmYpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChhY3RpdmVJbmRleCA+PSBzbGlkZXMubGVuZ3RoIC0gbG9vcGVkU2xpZGVzKSB7XG4gICAgLy8gRml4IEZvciBQb3NpdGl2ZSBPdmVyc2xpZGluZ1xuICAgIG5ld0luZGV4ID0gLXNsaWRlcy5sZW5ndGggKyBhY3RpdmVJbmRleCArIGxvb3BlZFNsaWRlcztcbiAgICBuZXdJbmRleCArPSBsb29wZWRTbGlkZXM7XG5cbiAgICB2YXIgX3NsaWRlQ2hhbmdlZCA9IHN3aXBlci5zbGlkZVRvKG5ld0luZGV4LCAwLCBmYWxzZSwgdHJ1ZSk7XG5cbiAgICBpZiAoX3NsaWRlQ2hhbmdlZCAmJiBkaWZmICE9PSAwKSB7XG4gICAgICBzd2lwZXIuc2V0VHJhbnNsYXRlKChydGwgPyAtc3dpcGVyLnRyYW5zbGF0ZSA6IHN3aXBlci50cmFuc2xhdGUpIC0gZGlmZik7XG4gICAgfVxuICB9XG5cbiAgc3dpcGVyLmFsbG93U2xpZGVQcmV2ID0gYWxsb3dTbGlkZVByZXY7XG4gIHN3aXBlci5hbGxvd1NsaWRlTmV4dCA9IGFsbG93U2xpZGVOZXh0O1xuICBzd2lwZXIuZW1pdCgnbG9vcEZpeCcpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxvb3BEZXN0cm95KCkge1xuICB2YXIgc3dpcGVyID0gdGhpcztcbiAgdmFyICR3cmFwcGVyRWwgPSBzd2lwZXIuJHdyYXBwZXJFbCxcbiAgICAgIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMsXG4gICAgICBzbGlkZXMgPSBzd2lwZXIuc2xpZGVzO1xuICAkd3JhcHBlckVsLmNoaWxkcmVuKFwiLlwiICsgcGFyYW1zLnNsaWRlQ2xhc3MgKyBcIi5cIiArIHBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzICsgXCIsLlwiICsgcGFyYW1zLnNsaWRlQ2xhc3MgKyBcIi5cIiArIHBhcmFtcy5zbGlkZUJsYW5rQ2xhc3MpLnJlbW92ZSgpO1xuICBzbGlkZXMucmVtb3ZlQXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKTtcbn0iLCJpbXBvcnQgYXBwZW5kU2xpZGUgZnJvbSAnLi9hcHBlbmRTbGlkZSc7XG5pbXBvcnQgcHJlcGVuZFNsaWRlIGZyb20gJy4vcHJlcGVuZFNsaWRlJztcbmltcG9ydCBhZGRTbGlkZSBmcm9tICcuL2FkZFNsaWRlJztcbmltcG9ydCByZW1vdmVTbGlkZSBmcm9tICcuL3JlbW92ZVNsaWRlJztcbmltcG9ydCByZW1vdmVBbGxTbGlkZXMgZnJvbSAnLi9yZW1vdmVBbGxTbGlkZXMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICBhcHBlbmRTbGlkZTogYXBwZW5kU2xpZGUsXG4gIHByZXBlbmRTbGlkZTogcHJlcGVuZFNsaWRlLFxuICBhZGRTbGlkZTogYWRkU2xpZGUsXG4gIHJlbW92ZVNsaWRlOiByZW1vdmVTbGlkZSxcbiAgcmVtb3ZlQWxsU2xpZGVzOiByZW1vdmVBbGxTbGlkZXNcbn07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYXBwZW5kU2xpZGUoc2xpZGVzKSB7XG4gIHZhciBzd2lwZXIgPSB0aGlzO1xuICB2YXIgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsLFxuICAgICAgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcblxuICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICBzd2lwZXIubG9vcERlc3Ryb3koKTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc2xpZGVzID09PSAnb2JqZWN0JyAmJiAnbGVuZ3RoJyBpbiBzbGlkZXMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgaWYgKHNsaWRlc1tpXSkgJHdyYXBwZXJFbC5hcHBlbmQoc2xpZGVzW2ldKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgJHdyYXBwZXJFbC5hcHBlbmQoc2xpZGVzKTtcbiAgfVxuXG4gIGlmIChwYXJhbXMubG9vcCkge1xuICAgIHN3aXBlci5sb29wQ3JlYXRlKCk7XG4gIH1cblxuICBpZiAoIShwYXJhbXMub2JzZXJ2ZXIgJiYgc3dpcGVyLnN1cHBvcnQub2JzZXJ2ZXIpKSB7XG4gICAgc3dpcGVyLnVwZGF0ZSgpO1xuICB9XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcHJlcGVuZFNsaWRlKHNsaWRlcykge1xuICB2YXIgc3dpcGVyID0gdGhpcztcbiAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMsXG4gICAgICAkd3JhcHBlckVsID0gc3dpcGVyLiR3cmFwcGVyRWwsXG4gICAgICBhY3RpdmVJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleDtcblxuICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICBzd2lwZXIubG9vcERlc3Ryb3koKTtcbiAgfVxuXG4gIHZhciBuZXdBY3RpdmVJbmRleCA9IGFjdGl2ZUluZGV4ICsgMTtcblxuICBpZiAodHlwZW9mIHNsaWRlcyA9PT0gJ29iamVjdCcgJiYgJ2xlbmd0aCcgaW4gc2xpZGVzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGlkZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGlmIChzbGlkZXNbaV0pICR3cmFwcGVyRWwucHJlcGVuZChzbGlkZXNbaV0pO1xuICAgIH1cblxuICAgIG5ld0FjdGl2ZUluZGV4ID0gYWN0aXZlSW5kZXggKyBzbGlkZXMubGVuZ3RoO1xuICB9IGVsc2Uge1xuICAgICR3cmFwcGVyRWwucHJlcGVuZChzbGlkZXMpO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgc3dpcGVyLmxvb3BDcmVhdGUoKTtcbiAgfVxuXG4gIGlmICghKHBhcmFtcy5vYnNlcnZlciAmJiBzd2lwZXIuc3VwcG9ydC5vYnNlcnZlcikpIHtcbiAgICBzd2lwZXIudXBkYXRlKCk7XG4gIH1cblxuICBzd2lwZXIuc2xpZGVUbyhuZXdBY3RpdmVJbmRleCwgMCwgZmFsc2UpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFkZFNsaWRlKGluZGV4LCBzbGlkZXMpIHtcbiAgdmFyIHN3aXBlciA9IHRoaXM7XG4gIHZhciAkd3JhcHBlckVsID0gc3dpcGVyLiR3cmFwcGVyRWwsXG4gICAgICBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLFxuICAgICAgYWN0aXZlSW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXg7XG4gIHZhciBhY3RpdmVJbmRleEJ1ZmZlciA9IGFjdGl2ZUluZGV4O1xuXG4gIGlmIChwYXJhbXMubG9vcCkge1xuICAgIGFjdGl2ZUluZGV4QnVmZmVyIC09IHN3aXBlci5sb29wZWRTbGlkZXM7XG4gICAgc3dpcGVyLmxvb3BEZXN0cm95KCk7XG4gICAgc3dpcGVyLnNsaWRlcyA9ICR3cmFwcGVyRWwuY2hpbGRyZW4oXCIuXCIgKyBwYXJhbXMuc2xpZGVDbGFzcyk7XG4gIH1cblxuICB2Y
118XIgYmFzZUxlbmd0aCA9IHN3aXBlci5zbGlkZXMubGVuZ3RoO1xuXG4gIGlmIChpbmRleCA8PSAwKSB7XG4gICAgc3dpcGVyLnByZXBlbmRTbGlkZShzbGlkZXMpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChpbmRleCA+PSBiYXNlTGVuZ3RoKSB7XG4gICAgc3dpcGVyLmFwcGVuZFNsaWRlKHNsaWRlcyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG5ld0FjdGl2ZUluZGV4ID0gYWN0aXZlSW5kZXhCdWZmZXIgPiBpbmRleCA/IGFjdGl2ZUluZGV4QnVmZmVyICsgMSA6IGFjdGl2ZUluZGV4QnVmZmVyO1xuICB2YXIgc2xpZGVzQnVmZmVyID0gW107XG5cbiAgZm9yICh2YXIgaSA9IGJhc2VMZW5ndGggLSAxOyBpID49IGluZGV4OyBpIC09IDEpIHtcbiAgICB2YXIgY3VycmVudFNsaWRlID0gc3dpcGVyLnNsaWRlcy5lcShpKTtcbiAgICBjdXJyZW50U2xpZGUucmVtb3ZlKCk7XG4gICAgc2xpZGVzQnVmZmVyLnVuc2hpZnQoY3VycmVudFNsaWRlKTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc2xpZGVzID09PSAnb2JqZWN0JyAmJiAnbGVuZ3RoJyBpbiBzbGlkZXMpIHtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgc2xpZGVzLmxlbmd0aDsgX2kgKz0gMSkge1xuICAgICAgaWYgKHNsaWRlc1tfaV0pICR3cmFwcGVyRWwuYXBwZW5kKHNsaWRlc1tfaV0pO1xuICAgIH1cblxuICAgIG5ld0FjdGl2ZUluZGV4ID0gYWN0aXZlSW5kZXhCdWZmZXIgPiBpbmRleCA/IGFjdGl2ZUluZGV4QnVmZmVyICsgc2xpZGVzLmxlbmd0aCA6IGFjdGl2ZUluZGV4QnVmZmVyO1xuICB9IGVsc2Uge1xuICAgICR3cmFwcGVyRWwuYXBwZW5kKHNsaWRlcyk7XG4gIH1cblxuICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBzbGlkZXNCdWZmZXIubGVuZ3RoOyBfaTIgKz0gMSkge1xuICAgICR3cmFwcGVyRWwuYXBwZW5kKHNsaWRlc0J1ZmZlcltfaTJdKTtcbiAgfVxuXG4gIGlmIChwYXJhbXMubG9vcCkge1xuICAgIHN3aXBlci5sb29wQ3JlYXRlKCk7XG4gIH1cblxuICBpZiAoIShwYXJhbXMub2JzZXJ2ZXIgJiYgc3dpcGVyLnN1cHBvcnQub2JzZXJ2ZXIpKSB7XG4gICAgc3dpcGVyLnVwZGF0ZSgpO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgc3dpcGVyLnNsaWRlVG8obmV3QWN0aXZlSW5kZXggKyBzd2lwZXIubG9vcGVkU2xpZGVzLCAwLCBmYWxzZSk7XG4gIH0gZWxzZSB7XG4gICAgc3dpcGVyLnNsaWRlVG8obmV3QWN0aXZlSW5kZXgsIDAsIGZhbHNlKTtcbiAgfVxufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlbW92ZVNsaWRlKHNsaWRlc0luZGV4ZXMpIHtcbiAgdmFyIHN3aXBlciA9IHRoaXM7XG4gIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLFxuICAgICAgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsLFxuICAgICAgYWN0aXZlSW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXg7XG4gIHZhciBhY3RpdmVJbmRleEJ1ZmZlciA9IGFjdGl2ZUluZGV4O1xuXG4gIGlmIChwYXJhbXMubG9vcCkge1xuICAgIGFjdGl2ZUluZGV4QnVmZmVyIC09IHN3aXBlci5sb29wZWRTbGlkZXM7XG4gICAgc3dpcGVyLmxvb3BEZXN0cm95KCk7XG4gICAgc3dpcGVyLnNsaWRlcyA9ICR3cmFwcGVyRWwuY2hpbGRyZW4oXCIuXCIgKyBwYXJhbXMuc2xpZGVDbGFzcyk7XG4gIH1cblxuICB2YXIgbmV3QWN0aXZlSW5kZXggPSBhY3RpdmVJbmRleEJ1ZmZlcjtcbiAgdmFyIGluZGV4VG9SZW1vdmU7XG5cbiAgaWYgKHR5cGVvZiBzbGlkZXNJbmRleGVzID09PSAnb2JqZWN0JyAmJiAnbGVuZ3RoJyBpbiBzbGlkZXNJbmRleGVzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGlkZXNJbmRleGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBpbmRleFRvUmVtb3ZlID0gc2xpZGVzSW5kZXhlc1tpXTtcbiAgICAgIGlmIChzd2lwZXIuc2xpZGVzW2luZGV4VG9SZW1vdmVdKSBzd2lwZXIuc2xpZGVzLmVxKGluZGV4VG9SZW1vdmUpLnJlbW92ZSgpO1xuICAgICAgaWYgKGluZGV4VG9SZW1vdmUgPCBuZXdBY3RpdmVJbmRleCkgbmV3QWN0aXZlSW5kZXggLT0gMTtcbiAgICB9XG5cbiAgICBuZXdBY3RpdmVJbmRleCA9IE1hdGgubWF4KG5ld0FjdGl2ZUluZGV4LCAwKTtcbiAgfSBlbHNlIHtcbiAgICBpbmRleFRvUmVtb3ZlID0gc2xpZGVzSW5kZXhlcztcbiAgICBpZiAoc3dpcGVyLnNsaWRlc1tpbmRleFRvUmVtb3ZlXSkgc3dpcGVyLnNsaWRlcy5lcShpbmRleFRvUmVtb3ZlKS5yZW1vdmUoKTtcbiAgICBpZiAoaW5kZXhUb1JlbW92ZSA8IG5ld0FjdGl2ZUluZGV4KSBuZXdBY3RpdmVJbmRleCAtPSAxO1xuICAgIG5ld0FjdGl2ZUluZGV4ID0gTWF0aC5tYXgobmV3QWN0aXZlSW5kZXgsIDApO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgc3dpcGVyLmxvb3BDcmVhdGUoKTtcbiAgfVxuXG4gIGlmICghKHBhcmFtcy5vYnNlcnZlciAmJiBzd2lwZXIuc3VwcG9ydC5vYnNlcnZlcikpIHtcbiAgICBzd2lwZXIudXBkYXRlKCk7XG4gIH1cblxuICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICBzd2lwZXIuc2xpZGVUbyhuZXdBY3RpdmVJbmRleCArIHN3aXBlci5sb29wZWRTbGlkZXMsIDAsIGZhbHNlKTtcbiAgfSBlbHNlIHtcbiAgICBzd2lwZXIuc2xpZGVUbyhuZXdBY3RpdmVJbmRleCwgMCwgZmFsc2UpO1xuICB9XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVtb3ZlQWxsU2xpZGVzKCkge1xuICB2YXIgc3dpcGVyID0gdGhpcztcbiAgdmFyIHNsaWRlc0luZGV4ZXMgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN3aXBlci5zbGlkZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBzbGlkZXNJbmRleGVzLnB1c2goaSk7XG4gIH1cblxuICBzd2lwZXIucmVtb3ZlU2xpZGUoc2xpZGVzSW5kZXhlcyk7XG59IiwiaW1wb3J0IHsgZ2V0V2luZG93LCBnZXREb2N1bWVudCB9IGZyb20gJ3Nzci13aW5kb3cnO1xuaW1wb3J0ICQgZnJvbSAnLi4vLi4vLi4vdXRpbHMvZG9tJztcbmltcG9ydCB7IGV4dGVuZCwgbm93IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvdXRpbHMnOyAvLyBNb2RpZmllZCBmcm9tIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzU0NTIwNTU0L2N1c3RvbS1lbGVtZW50LWdldHJvb3Rub2RlLWNsb3Nlc3QtZnVuY3Rpb24tY3Jvc3NpbmctbXVsdGlwbGUtcGFyZW50LXNoYWRvd2RcblxuZnVuY3Rpb24gY2xvc2VzdEVsZW1lbnQoc2VsZWN0b3IsIGJhc2UpIHtcbiAgaWYgKGJhc2UgPT09IHZvaWQgMCkge1xuICAgIGJhc2UgPSB0aGlzO1xuICB9XG5cbiAgZnVuY3Rpb24gX19jbG9zZXN0RnJvbShlbCkge1xuICAgIGlmICghZWwgfHwgZWwgPT09IGdldERvY3VtZW50KCkgfHwgZWwgPT09IGdldFdpbmRvdygpKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoZWwuYXNzaWduZWRTbG90KSBlbCA9IGVsLmFzc2lnbmVkU2xvdDtcbiAgICB2YXIgZm91bmQgPSBlbC5jbG9zZXN0KHNlbGVjdG9yKTtcbiAgICByZXR1cm4gZm91bmQgfHwgX19jbG9zZXN0RnJvbShlbC5nZXRSb290Tm9kZSgpLmhvc3QpO1xuICB9XG5cbiAgcmV0dXJuIF9fY2xvc2VzdEZyb20oYmFzZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9uVG91Y2hTdGFydChldmVudCkge1xuICB2YXIgc3dpcGVyID0gdGhpcztcbiAgdmFyIGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICB2YXIgZGF0YSA9IHN3aXBlci50b3VjaEV2ZW50c0RhdGE7XG4gIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLFxuICAgICAgdG91Y2hlcyA9IHN3aXBlci50b3VjaGVzLFxuICAgICAgZW5hYmxlZCA9IHN3aXBlci5lbmFibGVkO1xuICBpZiAoIWVuYWJsZWQpIHJldHVybjtcblxuICBpZiAoc3dpcGVyLmFuaW1hdGluZyAmJiBwYXJhbXMucHJldmVudEludGVyYWN0aW9uT25UcmFuc2l0aW9uKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGUgPSBldmVudDtcbiAgaWYgKGUub3JpZ2luYWxFdmVudCkgZSA9IGUub3JpZ2luYWxFdmVudDtcbiAgdmFyICR0YXJnZXRFbCA9ICQoZS50YXJnZXQpO1xuXG4gIGlmIChwYXJhbXMudG91Y2hFdmVudHNUYXJnZXQgPT09ICd3cmFwcGVyJykge1xuICAgIGlmICghJHRhcmdldEVsLmNsb3Nlc3Qoc3dpcGVyLndyYXBwZXJFbCkubGVuZ3RoKSByZXR1cm47XG4gIH1cblxuICBkYXRhLmlzVG91Y2hFdmVudCA9IGUudHlwZSA9PT0gJ3RvdWNoc3RhcnQnO1xuICBpZiAoIWRhdGEuaXNUb3VjaEV2ZW50ICYmICd3aGljaCcgaW4gZSAmJiBlLndoaWNoID09PSAzKSByZXR1cm47XG4gIGlmICghZGF0YS5pc1RvdWNoRXZlbnQgJiYgJ2J1dHRvbicgaW4gZSAmJiBlLmJ1dHRvbiA+IDApIHJldHVybjtcbiAgaWYgKGRhdGEuaXNUb3VjaGVkICYmIGRhdGEuaXNNb3ZlZCkgcmV0dXJuOyAvLyBjaGFuZ2UgdGFyZ2V0IGVsIGZvciBzaGFkb3cgcm9vdCBjb21wb25lbnRcblxuICB2Y
118XIgc3dpcGluZ0NsYXNzSGFzVmFsdWUgPSAhIXBhcmFtcy5ub1N3aXBpbmdDbGFzcyAmJiBwYXJhbXMubm9Td2lwaW5nQ2xhc3MgIT09ICcnO1xuXG4gIGlmIChzd2lwaW5nQ2xhc3NIYXNWYWx1ZSAmJiBlLnRhcmdldCAmJiBlLnRhcmdldC5zaGFkb3dSb290ICYmIGV2ZW50LnBhdGggJiYgZXZlbnQucGF0aFswXSkge1xuICAgICR0YXJnZXRFbCA9ICQoZXZlbnQucGF0aFswXSk7XG4gIH1cblxuICB2YXIgbm9Td2lwaW5nU2VsZWN0b3IgPSBwYXJhbXMubm9Td2lwaW5nU2VsZWN0b3IgPyBwYXJhbXMubm9Td2lwaW5nU2VsZWN0b3IgOiBcIi5cIiArIHBhcmFtcy5ub1N3aXBpbmdDbGFzcztcbiAgdmFyIGlzVGFyZ2V0U2hhZG93ID0gISEoZS50YXJnZXQgJiYgZS50YXJnZXQuc2hhZG93Um9vdCk7IC8vIHVzZSBjbG9zZXN0RWxlbWVudCBmb3Igc2hhZG93IHJvb3QgZWxlbWVudCB0byBnZXQgdGhlIGFjdHVhbCBjbG9zZXN0IGZvciBuZXN0ZWQgc2hhZG93IHJvb3QgZWxlbWVudFxuXG4gIGlmIChwYXJhbXMubm9Td2lwaW5nICYmIChpc1RhcmdldFNoYWRvdyA/IGNsb3Nlc3RFbGVtZW50KG5vU3dpcGluZ1NlbGVjdG9yLCBlLnRhcmdldCkgOiAkdGFyZ2V0RWwuY2xvc2VzdChub1N3aXBpbmdTZWxlY3RvcilbMF0pKSB7XG4gICAgc3dpcGVyLmFsbG93Q2xpY2sgPSB0cnVlO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChwYXJhbXMuc3dpcGVIYW5kbGVyKSB7XG4gICAgaWYgKCEkdGFyZ2V0RWwuY2xvc2VzdChwYXJhbXMuc3dpcGVIYW5kbGVyKVswXSkgcmV0dXJuO1xuICB9XG5cbiAgdG91Y2hlcy5jdXJyZW50WCA9IGUudHlwZSA9PT0gJ3RvdWNoc3RhcnQnID8gZS50YXJnZXRUb3VjaGVzWzBdLnBhZ2VYIDogZS5wYWdlWDtcbiAgdG91Y2hlcy5jdXJyZW50WSA9IGUudHlwZSA9PT0gJ3RvdWNoc3RhcnQnID8gZS50YXJnZXRUb3VjaGVzWzBdLnBhZ2VZIDogZS5wYWdlWTtcbiAgdmFyIHN0YXJ0WCA9IHRvdWNoZXMuY3VycmVudFg7XG4gIHZhciBzdGFydFkgPSB0b3VjaGVzLmN1cnJlbnRZOyAvLyBEbyBOT1Qgc3RhcnQgaWYgaU9TIGVkZ2Ugc3dpcGUgaXMgZGV0ZWN0ZWQuIE90aGVyd2lzZSBpT1MgYXBwIGNhbm5vdCBzd2lwZS10by1nby1iYWNrIGFueW1vcmVcblxuICB2YXIgZWRnZVN3aXBlRGV0ZWN0aW9uID0gcGFyYW1zLmVkZ2VTd2lwZURldGVjdGlvbiB8fCBwYXJhbXMuaU9TRWRnZVN3aXBlRGV0ZWN0aW9uO1xuICB2YXIgZWRnZVN3aXBlVGhyZXNob2xkID0gcGFyYW1zLmVkZ2VTd2lwZVRocmVzaG9sZCB8fCBwYXJhbXMuaU9TRWRnZVN3aXBlVGhyZXNob2xkO1xuXG4gIGlmIChlZGdlU3dpcGVEZXRlY3Rpb24gJiYgKHN0YXJ0WCA8PSBlZGdlU3dpcGVUaHJlc2hvbGQgfHwgc3RhcnRYID49IHdpbmRvdy5pbm5lcldpZHRoIC0gZWRnZVN3aXBlVGhyZXNob2xkKSkge1xuICAgIGlmIChlZGdlU3dpcGVEZXRlY3Rpb24gPT09ICdwcmV2ZW50Jykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGV4dGVuZChkYXRhLCB7XG4gICAgaXNUb3VjaGVkOiB0cnVlLFxuICAgIGlzTW92ZWQ6IGZhbHNlLFxuICAgIGFsbG93VG91Y2hDYWxsYmFja3M6IHRydWUsXG4gICAgaXNTY3JvbGxpbmc6IHVuZGVmaW5lZCxcbiAgICBzdGFydE1vdmluZzogdW5kZWZpbmVkXG4gIH0pO1xuICB0b3VjaGVzLnN0YXJ0WCA9IHN0YXJ0WDtcbiAgdG91Y2hlcy5zdGFydFkgPSBzdGFydFk7XG4gIGRhdGEudG91Y2hTdGFydFRpbWUgPSBub3coKTtcbiAgc3dpcGVyLmFsbG93Q2xpY2sgPSB0cnVlO1xuICBzd2lwZXIudXBkYXRlU2l6ZSgpO1xuICBzd2lwZXIuc3dpcGVEaXJlY3Rpb24gPSB1bmRlZmluZWQ7XG4gIGlmIChwYXJhbXMudGhyZXNob2xkID4gMCkgZGF0YS5hbGxvd1RocmVzaG9sZE1vdmUgPSBmYWxzZTtcblxuICBpZiAoZS50eXBlICE9PSAndG91Y2hzdGFydCcpIHtcbiAgICB2YXIgcHJldmVudERlZmF1bHQgPSB0cnVlO1xuICAgIGlmICgkdGFyZ2V0RWwuaXMoZGF0YS5mb2N1c2FibGVFbGVtZW50cykpIHByZXZlbnREZWZhdWx0ID0gZmFsc2U7XG5cbiAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiAkKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpLmlzKGRhdGEuZm9jdXNhYmxlRWxlbWVudHMpICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09ICR0YXJnZXRFbFswXSkge1xuICAgICAgZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKCk7XG4gICAgfVxuXG4gICAgdmFyIHNob3VsZFByZXZlbnREZWZhdWx0ID0gcHJldmVudERlZmF1bHQgJiYgc3dpcGVyLmFsbG93VG91Y2hNb3ZlICYmIHBhcmFtcy50b3VjaFN0YXJ0UHJldmVudERlZmF1bHQ7XG5cbiAgICBpZiAoKHBhcmFtcy50b3VjaFN0YXJ0Rm9yY2VQcmV2ZW50RGVmYXVsdCB8fCBzaG91bGRQcmV2ZW50RGVmYXVsdCkgJiYgISR0YXJnZXRFbFswXS5pc0NvbnRlbnRFZGl0YWJsZSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIHN3aXBlci5lbWl0KCd0b3VjaFN0YXJ0JywgZSk7XG59IiwiaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tICdzc3Itd2luZG93JztcbmltcG9ydCAkIGZyb20gJy4uLy4uLy4uL3V0aWxzL2RvbSc7XG5pbXBvcnQgeyBleHRlbmQsIG5vdyB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9uVG91Y2hNb3ZlKGV2ZW50KSB7XG4gIHZhciBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG4gIHZhciBzd2lwZXIgPSB0aGlzO1xuICB2YXIgZGF0YSA9IHN3aXBlci50b3VjaEV2ZW50c0RhdGE7XG4gIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLFxuICAgICAgdG91Y2hlcyA9IHN3aXBlci50b3VjaGVzLFxuICAgICAgcnRsID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZSxcbiAgICAgIGVuYWJsZWQgPSBzd2lwZXIuZW5hYmxlZDtcbiAgaWYgKCFlbmFibGVkKSByZXR1cm47XG4gIHZhciBlID0gZXZlbnQ7XG4gIGlmIChlLm9yaWdpbmFsRXZlbnQpIGUgPSBlLm9yaWdpbmFsRXZlbnQ7XG5cbiAgaWYgKCFkYXRhLmlzVG91Y2hlZCkge1xuICAgIGlmIChkYXRhLnN0YXJ0TW92aW5nICYmIGRhdGEuaXNTY3JvbGxpbmcpIHtcbiAgICAgIHN3aXBlci5lbWl0KCd0b3VjaE1vdmVPcHBvc2l0ZScsIGUpO1xuICAgIH1cblxuICAgI
118HJldHVybjtcbiAgfVxuXG4gIGlmIChkYXRhLmlzVG91Y2hFdmVudCAmJiBlLnR5cGUgIT09ICd0b3VjaG1vdmUnKSByZXR1cm47XG4gIHZhciB0YXJnZXRUb3VjaCA9IGUudHlwZSA9PT0gJ3RvdWNobW92ZScgJiYgZS50YXJnZXRUb3VjaGVzICYmIChlLnRhcmdldFRvdWNoZXNbMF0gfHwgZS5jaGFuZ2VkVG91Y2hlc1swXSk7XG4gIHZhciBwYWdlWCA9IGUudHlwZSA9PT0gJ3RvdWNobW92ZScgPyB0YXJnZXRUb3VjaC5wYWdlWCA6IGUucGFnZVg7XG4gIHZhciBwYWdlWSA9IGUudHlwZSA9PT0gJ3RvdWNobW92ZScgPyB0YXJnZXRUb3VjaC5wYWdlWSA6IGUucGFnZVk7XG5cbiAgaWYgKGUucHJldmVudGVkQnlOZXN0ZWRTd2lwZXIpIHtcbiAgICB0b3VjaGVzLnN0YXJ0WCA9IHBhZ2VYO1xuICAgIHRvdWNoZXMuc3RhcnRZID0gcGFnZVk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCFzd2lwZXIuYWxsb3dUb3VjaE1vdmUpIHtcbiAgICAvLyBpc01vdmVkID0gdHJ1ZTtcbiAgICBzd2lwZXIuYWxsb3dDbGljayA9IGZhbHNlO1xuXG4gICAgaWYgKGRhdGEuaXNUb3VjaGVkKSB7XG4gICAgICBleHRlbmQodG91Y2hlcywge1xuICAgICAgICBzdGFydFg6IHBhZ2VYLFxuICAgICAgICBzdGFydFk6IHBhZ2VZLFxuICAgICAgICBjdXJyZW50WDogcGFnZVgsXG4gICAgICAgIGN1cnJlbnRZOiBwYWdlWVxuICAgICAgfSk7XG4gICAgICBkYXRhLnRvdWNoU3RhcnRUaW1lID0gbm93KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGRhdGEuaXNUb3VjaEV2ZW50ICYmIHBhcmFtcy50b3VjaFJlbGVhc2VPbkVkZ2VzICYmICFwYXJhbXMubG9vcCkge1xuICAgIGlmIChzd2lwZXIuaXNWZXJ0aWNhbCgpKSB7XG4gICAgICAvLyBWZXJ0aWNhbFxuICAgICAgaWYgKHBhZ2VZIDwgdG91Y2hlcy5zdGFydFkgJiYgc3dpcGVyLnRyYW5zbGF0ZSA8PSBzd2lwZXIubWF4VHJhbnNsYXRlKCkgfHwgcGFnZVkgPiB0b3VjaGVzLnN0YXJ0WSAmJiBzd2lwZXIudHJhbnNsYXRlID49IHN3aXBlci5taW5UcmFuc2xhdGUoKSkge1xuICAgICAgICBkYXRhLmlzVG91Y2hlZCA9IGZhbHNlO1xuICAgICAgICBkYXRhLmlzTW92ZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocGFnZVggPCB0b3VjaGVzLnN0YXJ0WCAmJiBzd2lwZXIudHJhbnNsYXRlIDw9IHN3aXBlci5tYXhUcmFuc2xhdGUoKSB8fCBwYWdlWCA+IHRvdWNoZXMuc3RhcnRYICYmIHN3aXBlci50cmFuc2xhdGUgPj0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKGRhdGEuaXNUb3VjaEV2ZW50ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcbiAgICBpZiAoZS50YXJnZXQgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgJChlLnRhcmdldCkuaXMoZGF0YS5mb2N1c2FibGVFbGVtZW50cykpIHtcbiAgICAgIGRhdGEuaXNNb3ZlZCA9IHRydWU7XG4gICAgICBzd2lwZXIuYWxsb3dDbGljayA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmIChkYXRhLmFsbG93VG91Y2hDYWxsYmFja3MpIHtcbiAgICBzd2lwZXIuZW1pdCgndG91Y2hNb3ZlJywgZSk7XG4gIH1cblxuICBpZiAoZS50YXJnZXRUb3VjaGVzICYmIGUudGFyZ2V0VG91Y2hlcy5sZW5ndGggPiAxKSByZXR1cm47XG4gIHRvdWNoZXMuY3VycmVudFggPSBwYWdlWDtcbiAgdG91Y2hlcy5jdXJyZW50WSA9IHBhZ2VZO1xuICB2YXIgZGlmZlggPSB0b3VjaGVzLmN1cnJlbnRYIC0gdG91Y2hlcy5zdGFydFg7XG4gIHZhciBkaWZmWSA9IHRvdWNoZXMuY3VycmVudFkgLSB0b3VjaGVzLnN0YXJ0WTtcbiAgaWYgKHN3aXBlci5wYXJhbXMudGhyZXNob2xkICYmIE1hdGguc3FydChNYXRoLnBvdyhkaWZmWCwgMikgKyBNYXRoLnBvdyhkaWZmWSwgMikpIDwgc3dpcGVyLnBhcmFtcy50aHJlc2hvbGQpIHJldHVybjtcblxuICBpZiAodHlwZW9mIGRhdGEuaXNTY3JvbGxpbmcgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgdmFyIHRvdWNoQW5nbGU7XG5cbiAgICBpZiAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpICYmIHRvdWNoZXMuY3VycmVudFkgPT09IHRvdWNoZXMuc3RhcnRZIHx8IHN3aXBlci5pc1ZlcnRpY2FsKCkgJiYgdG91Y2hlcy5jdXJyZW50WCA9PT0gdG91Y2hlcy5zdGFydFgpIHtcbiAgICAgIGRhdGEuaXNTY3JvbGxpbmcgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICBpZiAoZGlmZlggKiBkaWZmWCArIGRpZmZZICogZGlmZlkgPj0gMjUpIHtcbiAgICAgICAgdG91Y2hBbmdsZSA9IE1hdGguYXRhbjIoTWF0aC5hYnMoZGlmZlkpLCBNYXRoLmFicyhkaWZmWCkpICogMTgwIC8gTWF0aC5QSTtcbiAgICAgICAgZGF0YS5pc1Njcm9sbGluZyA9IHN3aXBlci5pc0hvcml6b250YWwoKSA/IHRvdWNoQW5nbGUgPiBwYXJhbXMudG91Y2hBbmdsZSA6IDkwIC0gdG91Y2hBbmdsZSA+IHBhcmFtcy50b3VjaEFuZ2xlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChkYXRhLmlzU2Nyb2xsaW5nKSB7XG4gICAgc3dpcGVyLmVtaXQoJ3RvdWNoTW92ZU9wcG9zaXRlJywgZSk7XG4gIH1cblxuICBpZiAodHlwZW9mIGRhdGEuc3RhcnRNb3ZpbmcgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgaWYgKHRvdWNoZXMuY3VycmVudFggIT09IHRvdWNoZXMuc3RhcnRYIHx8IHRvdWNoZXMuY3VycmVudFkgIT09IHRvdWNoZXMuc3RhcnRZKSB7XG4gICAgICBkYXRhLnN0YXJ0TW92aW5nID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoZGF0YS5pc1Njcm9sbGluZykge1xuICAgIGRhdGEuaXNUb3VjaGVkID0gZmFsc2U7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCFkYXRhLnN0YXJ0TW92aW5nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3dpcGVyLmFsbG93Q2xpY2sgPSBmYWxzZTtcblxuICBpZiAoIXBhcmFtcy5jc3NNb2RlICYmIGUuY2FuY2VsYWJsZSkge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIGlmIChwYXJhbXMudG91Y2hNb3ZlU3RvcFByb3BhZ2F0aW9uICYmICFwYXJhbXMubmVzdGVkKSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIGlmICghZGF0YS5pc01vdmVkKSB7XG4gICAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgICBzd2lwZXIubG9vcEZpeCgpO1xuICAgIH1cblxuICAgIGRhdGEuc3RhcnRUcmFuc2xhdGUgPSBzd2lwZXIuZ2V0VHJhbnNsYXRlKCk7XG4gICAgc3dpcGVyLnNldFRyYW5zaXRpb24oMCk7XG5cbiAgICBpZiAoc3dpcGVyLmFuaW1hdGluZykge1xuICAgICAgc3dpcGVyLiR3cmFwcGVyRWwudHJpZ2dlcignd2Via2l0VHJhbnNpdGlvbkVuZCB0cmFuc2l0aW9uZW5kJyk7XG4gICAgfVxuXG4gICAgZGF0YS5hbGxvd01vbWVudHVtQm91bmNlID0gZmFsc2U7IC8vIEdyYWIgQ3Vyc29yXG5cbiAgICBpZiAocGFyYW1zLmdyYWJDdXJzb3IgJiYgKHN3aXBlci5hbGxvd1NsaWRlTmV4dCA9PT0gdHJ1ZSB8fCBzd2lwZXIuYWxsb3dTbGlkZVByZXYgPT09IHRydWUpKSB7XG4gICAgICBzd2lwZXIuc2V0R3JhYkN1cnNvcih0cnVlKTtcbiAgICB9XG5cbiAgICBzd2lwZXIuZW1pdCgnc2xpZGVyRmlyc3RNb3ZlJywgZSk7XG4gIH1cblxuICBzd2lwZXIuZW1pdCgnc2xpZGVyTW92ZScsIGUpO1xuICBkYXRhLmlzTW92ZWQgPSB0cnVlO1xuICB2YXIgZGlmZiA9IHN3aXBlci5pc0hvcml6b250YWwoKSA/IGRpZmZYIDogZGlmZlk7XG4gIHRvdWNoZXMuZGlmZiA9IGRpZmY7XG4gIGRpZmYgKj0gcGFyYW1zLnRvdWNoUmF0aW87XG4gIGlmIChydGwp
118IGRpZmYgPSAtZGlmZjtcbiAgc3dpcGVyLnN3aXBlRGlyZWN0aW9uID0gZGlmZiA+IDAgPyAncHJldicgOiAnbmV4dCc7XG4gIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA9IGRpZmYgKyBkYXRhLnN0YXJ0VHJhbnNsYXRlO1xuICB2YXIgZGlzYWJsZVBhcmVudFN3aXBlciA9IHRydWU7XG4gIHZhciByZXNpc3RhbmNlUmF0aW8gPSBwYXJhbXMucmVzaXN0YW5jZVJhdGlvO1xuXG4gIGlmIChwYXJhbXMudG91Y2hSZWxlYXNlT25FZGdlcykge1xuICAgIHJlc2lzdGFuY2VSYXRpbyA9IDA7XG4gIH1cblxuICBpZiAoZGlmZiA+IDAgJiYgZGF0YS5jdXJyZW50VHJhbnNsYXRlID4gc3dpcGVyLm1pblRyYW5zbGF0ZSgpKSB7XG4gICAgZGlzYWJsZVBhcmVudFN3aXBlciA9IGZhbHNlO1xuICAgIGlmIChwYXJhbXMucmVzaXN0YW5jZSkgZGF0YS5jdXJyZW50VHJhbnNsYXRlID0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpIC0gMSArIE1hdGgucG93KC1zd2lwZXIubWluVHJhbnNsYXRlKCkgKyBkYXRhLnN0YXJ0VHJhbnNsYXRlICsgZGlmZiwgcmVzaXN0YW5jZVJhdGlvKTtcbiAgfSBlbHNlIGlmIChkaWZmIDwgMCAmJiBkYXRhLmN1cnJlbnRUcmFuc2xhdGUgPCBzd2lwZXIubWF4VHJhbnNsYXRlKCkpIHtcbiAgICBkaXNhYmxlUGFyZW50U3dpcGVyID0gZmFsc2U7XG4gICAgaWYgKHBhcmFtcy5yZXNpc3RhbmNlKSBkYXRhLmN1cnJlbnRUcmFuc2xhdGUgPSBzd2lwZXIubWF4VHJhbnNsYXRlKCkgKyAxIC0gTWF0aC5wb3coc3dpcGVyLm1heFRyYW5zbGF0ZSgpIC0gZGF0YS5zdGFydFRyYW5zbGF0ZSAtIGRpZmYsIHJlc2lzdGFuY2VSYXRpbyk7XG4gIH1cblxuICBpZiAoZGlzYWJsZVBhcmVudFN3aXBlcikge1xuICAgIGUucHJldmVudGVkQnlOZXN0ZWRTd2lwZXIgPSB0cnVlO1xuICB9IC8vIERpcmVjdGlvbnMgbG9ja3NcblxuXG4gIGlmICghc3dpcGVyLmFsbG93U2xpZGVOZXh0ICYmIHN3aXBlci5zd2lwZURpcmVjdGlvbiA9PT0gJ25leHQnICYmIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA8IGRhdGEuc3RhcnRUcmFuc2xhdGUpIHtcbiAgICBkYXRhLmN1cnJlbnRUcmFuc2xhdGUgPSBkYXRhLnN0YXJ0VHJhbnNsYXRlO1xuICB9XG5cbiAgaWYgKCFzd2lwZXIuYWxsb3dTbGlkZVByZXYgJiYgc3dpcGVyLnN3aXBlRGlyZWN0aW9uID09PSAncHJldicgJiYgZGF0YS5jdXJyZW50VHJhbnNsYXRlID4gZGF0YS5zdGFydFRyYW5zbGF0ZSkge1xuICAgIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA9IGRhdGEuc3RhcnRUcmFuc2xhdGU7XG4gIH1cblxuICBpZiAoIXN3aXBlci5hbGxvd1NsaWRlUHJldiAmJiAhc3dpcGVyLmFsbG93U2xpZGVOZXh0KSB7XG4gICAgZGF0YS5jdXJyZW50VHJhbnNsYXRlID0gZGF0YS5zdGFydFRyYW5zbGF0ZTtcbiAgfSAvLyBUaHJlc2hvbGRcblxuXG4gIGlmIChwYXJhbXMudGhyZXNob2xkID4gMCkge1xuICAgIGlmIChNYXRoLmFicyhkaWZmKSA+IHBhcmFtcy50aHJlc2hvbGQgfHwgZGF0YS5hbGxvd1RocmVzaG9sZE1vdmUpIHtcbiAgICAgIGlmICghZGF0YS5hbGxvd1RocmVzaG9sZE1vdmUpIHtcbiAgICAgICAgZGF0YS5hbGxvd1RocmVzaG9sZE1vdmUgPSB0cnVlO1xuICAgICAgICB0b3VjaGVzLnN0YXJ0WCA9IHRvdWNoZXMuY3VycmVudFg7XG4gICAgICAgIHRvdWNoZXMuc3RhcnRZID0gdG91Y2hlcy5jdXJyZW50WTtcbiAgICAgICAgZGF0YS5jdXJyZW50VHJhbnNsYXRlID0gZGF0YS5zdGFydFRyYW5zbGF0ZTtcbiAgICAgICAgdG91Y2hlcy5kaWZmID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gdG91Y2hlcy5jdXJyZW50WCAtIHRvdWNoZXMuc3RhcnRYIDogdG91Y2hlcy5jdXJyZW50WSAtIHRvdWNoZXMuc3RhcnRZO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA9IGRhdGEuc3RhcnRUcmFuc2xhdGU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKCFwYXJhbXMuZm9sbG93RmluZ2VyIHx8IHBhcmFtcy5jc3NNb2RlKSByZXR1cm47IC8vIFVwZGF0ZSBhY3RpdmUgaW5kZXggaW4gZnJlZSBtb2RlXG5cbiAgaWYgKHBhcmFtcy5mcmVlTW9kZSB8fCBwYXJhbXMud2F0Y2hTbGlkZXNQcm9ncmVzcyB8fCBwYXJhbXMud2F0Y2hTbGlkZXNWaXNpYmlsaXR5KSB7XG4gICAgc3dpcGVyLnVwZGF0ZUFjdGl2ZUluZGV4KCk7XG4gICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgfVxuXG4gIGlmIChwYXJhbXMuZnJlZU1vZGUpIHtcbiAgICAvLyBWZWxvY2l0eVxuICAgIGlmIChkYXRhLnZlbG9jaXRpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBkYXRhLnZlbG9jaXRpZXMucHVzaCh7XG4gICAgICAgIHBvc2l0aW9uOiB0b3VjaGVzW3N3aXBlci5pc0hvcml6b250YWwoKSA/ICdzdGFydFgnIDogJ3N0YXJ0WSddLFxuICAgICAgICB0aW1lOiBkYXRhLnRvdWNoU3RhcnRUaW1lXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBkYXRhLnZlbG9jaXRpZXMucHVzaCh7XG4gICAgICBwb3NpdGlvbjogdG91Y2hlc1tzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAnY3VycmVudFgnIDogJ2N1cnJlbnRZJ10sXG4gICAgICB0aW1lOiBub3coKVxuICAgIH0pO1xuICB9IC8vIFVwZGF0ZSBwcm9ncmVzc1xuXG5cbiAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKGRhdGEuY3VycmVudFRyYW5zbGF0ZSk7IC8vIFVwZGF0ZSB0cmFuc2xhdGVcblxuICBzd2lwZXIuc2V0VHJhbnNsYXRlKGRhdGEuY3VycmVudFRyYW5zbGF0ZSk7XG59IiwiaW1wb3J0IHsgbm93LCBuZXh0VGljayB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9uVG91Y2hFbmQoZXZlbnQpIHtcbiAgdmFyIHN3aXBlciA9IHRoaXM7XG4gIHZhciBkYXRhID0gc3dpcGVyLnRvdWNoRXZlbnRzRGF0YTtcbiAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMsXG4gICAgICB0b3VjaGVzID0gc3dpcGVyLnRvdWNoZXMsXG4gICAgICBydGwgPSBzd2lwZXIucnRsVHJhbnNsYXRlLFxuICAgICAgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsLFxuICAgICAgc2xpZGVzR3JpZCA9IHN3aXBlci5zbGlkZXNHcmlkLFxuICAgICAgc25hcEdyaWQgPSBzd2lwZXIuc25hcEdyaWQsXG4gICAgICBlbmFibGVkID0gc3dpcGVyLmVuYWJsZWQ7XG4gIGlmICghZW5hYmxlZCkgcmV0dXJuO1xuICB2YXIgZSA9IGV2ZW50O1xuICBpZiAoZS5vcmlnaW5hbEV2ZW50KSBlID0gZS5vcmlnaW5hbEV2ZW50O1xuXG4gIGlmIChkYXRhLmFsbG93VG91Y2hDYWxsYmFja3MpIHtcbiAgICBzd2lwZXIuZW1pdCgndG91Y2hFbmQnLCBlKTtcbiAgfVxuXG4gIGRhdGEuYWxsb3dUb3VjaENhbGxiYWNrcyA9IGZhbHNlO1xuXG4gIGlmICghZGF0YS5pc1RvdWNoZWQpIHtcbiAgICBpZiAoZGF0YS5pc01vdmVkICYmIHBhcmFtcy5ncmFiQ3Vyc29yKSB7XG4gICAgICBzd2lwZXIuc2V0R3JhYkN1cnNvcihmYWxzZSk7XG4gICAgfVxuXG4gICAgZGF0YS5pc01vdmVkID0gZmFsc2U7XG4gICAgZGF0YS5zdGFydE1vdmluZyA9IGZhbHNlO1xuICAgIHJldHVybjtcbiAgfSAvLyBSZXR1cm4gR3JhYiBDdXJzb3JcblxuXG4gIGlmIChwYXJhbXMuZ3JhYkN1cnNvciAmJiBkYXRhLmlzTW92ZWQgJiYgZGF0YS5pc1RvdWNoZWQgJiYgKHN3aXBlci5hbGxvd1NsaWRlTmV4dCA9PT0gdHJ1ZSB8fCBzd2lwZXIuYWxsb3dTbGlkZVByZXYgPT09IHRydWUpKSB7XG4gICAgc3dpcGVyLnNldEdyYWJDdXJzb3IoZmFsc2UpO1xuICB9IC8vIFRpbWUgZGlmZlxuXG5cbiAgdmFyIHRvdWNoRW5kVGltZSA9IG5vdygpO1xuICB2YXIgdGltZURpZmYgPSB0b3VjaEVuZFRpbWUgLSBkYXRhLnRvdWNoU3RhcnRUaW1lOyAvLyBUYXAsIGRvdWJsZVRhcCwgQ2xpY2tcblxuICBpZiAoc3dpcGVyLmFsbG93Q2xpY2spIHtcbiAgICBzd2lwZXIudXBkYXRlQ2xpY2tlZFNsaWRlKGUpO1xuICAgIHN3aXBlci5lbWl0KCd0YXAgY2xpY2snLCBlKTtcblxuICAgIGlmICh0aW1lRGlmZiA8IDMwMCAmJiB0b3VjaEVuZFRpbWUgLSBkYXRhLmxhc3RDbGlja1RpbWUgPCAzMDApIHtcbiAgICAgIHN3aXBlci5lbWl0KCdkb3VibGVUYXAgZG91YmxlQ2xpY2snLCBlKTtcbiAgICB9XG4gI
118H1cblxuICBkYXRhLmxhc3RDbGlja1RpbWUgPSBub3coKTtcbiAgbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgIGlmICghc3dpcGVyLmRlc3Ryb3llZCkgc3dpcGVyLmFsbG93Q2xpY2sgPSB0cnVlO1xuICB9KTtcblxuICBpZiAoIWRhdGEuaXNUb3VjaGVkIHx8ICFkYXRhLmlzTW92ZWQgfHwgIXN3aXBlci5zd2lwZURpcmVjdGlvbiB8fCB0b3VjaGVzLmRpZmYgPT09IDAgfHwgZGF0YS5jdXJyZW50VHJhbnNsYXRlID09PSBkYXRhLnN0YXJ0VHJhbnNsYXRlKSB7XG4gICAgZGF0YS5pc1RvdWNoZWQgPSBmYWxzZTtcbiAgICBkYXRhLmlzTW92ZWQgPSBmYWxzZTtcbiAgICBkYXRhLnN0YXJ0TW92aW5nID0gZmFsc2U7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZGF0YS5pc1RvdWNoZWQgPSBmYWxzZTtcbiAgZGF0YS5pc01vdmVkID0gZmFsc2U7XG4gIGRhdGEuc3RhcnRNb3ZpbmcgPSBmYWxzZTtcbiAgdmFyIGN1cnJlbnRQb3M7XG5cbiAgaWYgKHBhcmFtcy5mb2xsb3dGaW5nZXIpIHtcbiAgICBjdXJyZW50UG9zID0gcnRsID8gc3dpcGVyLnRyYW5zbGF0ZSA6IC1zd2lwZXIudHJhbnNsYXRlO1xuICB9IGVsc2Uge1xuICAgIGN1cnJlbnRQb3MgPSAtZGF0YS5jdXJyZW50VHJhbnNsYXRlO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5jc3NNb2RlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5mcmVlTW9kZSkge1xuICAgIGlmIChjdXJyZW50UG9zIDwgLXN3aXBlci5taW5UcmFuc2xhdGUoKSkge1xuICAgICAgc3dpcGVyLnNsaWRlVG8oc3dpcGVyLmFjdGl2ZUluZGV4KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY3VycmVudFBvcyA+IC1zd2lwZXIubWF4VHJhbnNsYXRlKCkpIHtcbiAgICAgIGlmIChzd2lwZXIuc2xpZGVzLmxlbmd0aCA8IHNuYXBHcmlkLmxlbmd0aCkge1xuICAgICAgICBzd2lwZXIuc2xpZGVUbyhzbmFwR3JpZC5sZW5ndGggLSAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvKHN3aXBlci5zbGlkZXMubGVuZ3RoIC0gMSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLmZyZWVNb2RlTW9tZW50dW0pIHtcbiAgICAgIGlmIChkYXRhLnZlbG9jaXRpZXMubGVuZ3RoID4gMSkge1xuICAgICAgICB2Y
118XIgbGFzdE1vdmVFdmVudCA9IGRhdGEudmVsb2NpdGllcy5wb3AoKTtcbiAgICAgICAgdmFyIHZlbG9jaXR5RXZlbnQgPSBkYXRhLnZlbG9jaXRpZXMucG9wKCk7XG4gICAgICAgIHZhciBkaXN0YW5jZSA9IGxhc3RNb3ZlRXZlbnQucG9zaXRpb24gLSB2ZWxvY2l0eUV2ZW50LnBvc2l0aW9uO1xuICAgICAgICB2YXIgdGltZSA9IGxhc3RNb3ZlRXZlbnQudGltZSAtIHZlbG9jaXR5RXZlbnQudGltZTtcbiAgICAgICAgc3dpcGVyLnZlbG9jaXR5ID0gZGlzdGFuY2UgLyB0aW1lO1xuICAgICAgICBzd2lwZXIudmVsb2NpdHkgLz0gMjtcblxuICAgICAgICBpZiAoTWF0aC5hYnMoc3dpcGVyLnZlbG9jaXR5KSA8IHBhcmFtcy5mcmVlTW9kZU1pbmltdW1WZWxvY2l0eSkge1xuICAgICAgICAgIHN3aXBlci52ZWxvY2l0eSA9IDA7XG4gICAgICAgIH0gLy8gdGhpcyBpbXBsaWVzIHRoYXQgdGhlIHVzZXIgc3RvcHBlZCBtb3ZpbmcgYSBmaW5nZXIgdGhlbiByZWxlYXNlZC5cbiAgICAgICAgLy8gVGhlcmUgd291bGQgYmUgbm8gZXZlbnRzIHdpdGggZGlzdGFuY2UgemVybywgc28gdGhlIGxhc3QgZXZlbnQgaXMgc3RhbGUuXG5cblxuICAgICAgICBpZiAodGltZSA+IDE1MCB8fCBub3coKSAtIGxhc3RNb3ZlRXZlbnQudGltZSA+IDMwMCkge1xuICAgICAgICAgIHN3aXBlci52ZWxvY2l0eSA9IDA7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN3aXBlci52ZWxvY2l0eSA9IDA7XG4gICAgICB9XG5cbiAgICAgIHN3aXBlci52ZWxvY2l0eSAqPSBwYXJhbXMuZnJlZU1vZGVNb21lbnR1bVZlbG9jaXR5UmF0aW87XG4gICAgICBkYXRhLnZlbG9jaXRpZXMubGVuZ3RoID0gMDtcbiAgICAgIHZhciBtb21lbnR1bUR1cmF0aW9uID0gMTAwMCAqIHBhcmFtcy5mcmVlTW9kZU1vbWVudHVtUmF0aW87XG4gICAgICB2Y
118XIgbW9tZW50dW1EaXN0YW5jZSA9IHN3aXBlci52ZWxvY2l0eSAqIG1vbWVudHVtRHVyYXRpb247XG4gICAgICB2YXIgbmV3UG9zaXRpb24gPSBzd2lwZXIudHJhbnNsYXRlICsgbW9tZW50dW1EaXN0YW5jZTtcbiAgICAgIGlmIChydGwpIG5ld1Bvc2l0aW9uID0gLW5ld1Bvc2l0aW9uO1xuICAgICAgdmFyIGRvQm91bmNlID0gZmFsc2U7XG4gICAgICB2YXIgYWZ0ZXJCb3VuY2VQb3NpdGlvbjtcbiAgICAgIHZhciBib3VuY2VBbW91bnQgPSBNYXRoLmFicyhzd2lwZXIudmVsb2NpdHkpICogMjAgKiBwYXJhbXMuZnJlZU1vZGVNb21lbnR1bUJvdW5jZVJhdGlvO1xuICAgICAgdmFyIG5lZWRzTG9vcEZpeDtcblxuICAgICAgaWYgKG5ld1Bvc2l0aW9uIDwgc3dpcGVyLm1heFRyYW5zbGF0ZSgpKSB7XG4gICAgICAgIGlmIChwYXJhbXMuZnJlZU1vZGVNb21lbnR1bUJvdW5jZSkge1xuICAgICAgICAgIGlmIChuZXdQb3NpdGlvbiArIHN3aXBlci5tYXhUcmFuc2xhdGUoKSA8IC1ib3VuY2VBbW91bnQpIHtcbiAgICAgICAgICAgIG5ld1Bvc2l0aW9uID0gc3dpcGVyLm1heFRyYW5zbGF0ZSgpIC0gYm91bmNlQW1vdW50O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGFmdGVyQm91bmNlUG9zaXRpb24gPSBzd2lwZXIubWF4VHJhbnNsYXRlKCk7XG4gICAgICAgICAgZG9Cb3VuY2UgPSB0cnVlO1xuICAgICAgICAgIGRhdGEuYWxsb3dNb21lbnR1bUJvdW5jZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3UG9zaXRpb24gPSBzd2lwZXIubWF4VHJhbnNsYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyYW1zLmxvb3AgJiYgcGFyYW1zLmNlbnRlcmVkU2xpZGVzKSBuZWVkc0xvb3BGaXggPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChuZXdQb3NpdGlvbiA+IHN3aXBlci5taW5UcmFuc2xhdGUoKSkge1xuICAgICAgICBpZiAocGFyYW1zLmZyZWVNb2RlTW9tZW50dW1Cb3VuY2UpIHtcbiAgICAgICAgICBpZiAobmV3UG9zaXRpb24gLSBzd2lwZXIubWluVHJhbnNsYXRlKCkgPiBib3VuY2VBbW91bnQpIHtcbiAgICAgICAgICAgIG5ld1Bvc2l0aW9uID0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpICsgYm91bmNlQW1vdW50O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGFmdGVyQm91bmNlUG9zaXRpb24gPSBzd2lwZXIubWluVHJhbnNsYXRlKCk7XG4gICAgICAgICAgZG9Cb3VuY2UgPSB0cnVlO1xuICAgICAgICAgIGRhdGEuYWxsb3dNb21lbnR1bUJvdW5jZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3UG9zaXRpb24gPSBzd2lwZXIubWluVHJhbnNsYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyYW1zLmxvb3AgJiYgcGFyYW1zLmNlbnRlcmVkU2xpZGVzKSBuZWVkc0xvb3BGaXggPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChwYXJhbXMuZnJlZU1vZGVTdGlja3kpIHtcbiAgICAgICAgdmFyIG5leHRTbGlkZTtcblxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNuYXBHcmlkLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgICAgaWYgKHNuYXBHcmlkW2pdID4gLW5ld1Bvc2l0aW9uKSB7XG4gICAgICAgICAgICBuZXh0U2xpZGUgPSBqO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKE1hdGguYWJzKHNuYXBHcmlkW25leHRTbGlkZV0gLSBuZXdQb3NpdGlvbikgPCBNYXRoLmFicyhzbmFwR3JpZFtuZXh0U2xpZGUgLSAxXSAtIG5ld1Bvc2l0aW9uKSB8fCBzd2lwZXIuc3dpcGVEaXJlY3Rpb24gPT09ICduZXh0Jykge1xuICAgICAgICAgIG5ld1Bvc2l0aW9uID0gc25hcEdyaWRbbmV4dFNsaWRlXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdQb3NpdGlvbiA9IHNuYXBHcmlkW25leHRTbGlkZSAtIDFdO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV3UG9zaXRpb24gPSAtbmV3UG9zaXRpb247XG4gICAgICB9XG5cbiAgICAgIGlmIChuZWVkc0xvb3BGaXgpIHtcbiAgICAgICAgc3dpcGVyLm9uY2UoJ3RyYW5zaXRpb25FbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgc3dpcGVyLmxvb3BGaXgoKTtcbiAgICAgICAgfSk7XG4gICAgICB9IC8vIEZpeCBkdXJhdGlvblxuXG5cbiAgICAgIGlmIChzd2lwZXIudmVsb2NpdHkgIT09IDApIHtcbiAgICAgICAgaWYgKHJ0bCkge1xuICAgICAgICAgIG1vbWVudHVtRHVyYXRpb24gPSBNYXRoLmFicygoLW5ld1Bvc2l0aW9uIC0gc3dpcGVyLnRyYW5zbGF0ZSkgLyBzd2lwZXIudmVsb2NpdHkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1vbWVudHVtRHVyYXRpb24gPSBNYXRoLmFicygobmV3UG9zaXRpb24gLSBzd2lwZXIudHJhbnNsYXRlKSAvIHN3aXBlci52ZWxvY2l0eSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyYW1zLmZyZWVNb2RlU3RpY2t5KSB7XG4gICAgICAgICAgLy8gSWYgZnJlZU1vZGVTdGlja3kgaXMgYWN0aXZlIGFuZCB0aGUgdXNlciBlbmRzIGEgc3dpcGUgd2l0aCBhIHNsb3ctdmVsb2NpdHlcbiAgICAgICAgICAvLyBldmVudCwgdGhlbiBkdXJhdGlvbnMgY2FuIGJlIDIwKyBzZWNvbmRzIHRvIHNsaWRlIG9uZSAob3IgemVybyEpIHNsaWRlcy5cbiAgICAgICAgICAvLyBJdCdzIGVhc3kgdG8gc2VlIHRoaXMgd2hlbiBzaW11bGF0aW5nIHRvdWNoIHdpdGggbW91c2UgZXZlbnRzLiBUbyBmaXggdGhpcyxcbiAgICAgICAgICAvLyBsaW1pdCBzaW5nbGUtc2xpZGUgc3dpcGVzIHRvIHRoZSBkZWZhdWx0IHNsaWRlIGR1cmF0aW9uLiBUaGlzIGFsc28gaGFzIHRoZVxuICAgICAgICAgIC8vIG5pY2Ugc2lkZSBlZmZlY3Qgb2YgbWF0Y2hpbmcgc2xpZGUgc3BlZWQgaWYgdGhlIHVzZXIgc3RvcHBlZCBtb3ZpbmcgYmVmb3JlXG4gICAgICAgICAgLy8gbGlmdGluZyBmaW5nZXIgb3IgbW91c2UgdnMuIG1vdmluZyBzbG93bHkgYmVmb3JlIGxpZnRpbmcgdGhlIGZpbmdlci9tb3VzZS5cbiAgICAgICAgICAvLyBGb3IgZmFzdGVyIHN3aXBlcywgYWxzbyBhcHBseSBsaW1pdHMgKGFsYmVpdCBoaWdoZXIgb25lcykuXG4gICAgICAgICAgdmFyIG1vdmVEaXN0YW5jZSA9IE1hdGguYWJzKChydGwgPyAtbmV3
118UG9zaXRpb24gOiBuZXdQb3NpdGlvbikgLSBzd2lwZXIudHJhbnNsYXRlKTtcbiAgICAgICAgICB2YXIgY3VycmVudFNsaWRlU2l6ZSA9IHN3aXBlci5zbGlkZXNTaXplc0dyaWRbc3dpcGVyLmFjdGl2ZUluZGV4XTtcblxuICAgICAgICAgIGlmIChtb3ZlRGlzdGFuY2UgPCBjdXJyZW50U2xpZGVTaXplKSB7XG4gICAgICAgICAgICBtb21lbnR1bUR1cmF0aW9uID0gcGFyYW1zLnNwZWVkO1xuICAgICAgICAgIH0gZWxzZSBpZiAobW92ZURpc3RhbmNlIDwgMiAqIGN1cnJlbnRTbGlkZVNpemUpIHtcbiAgICAgICAgICAgIG1vbWVudHVtRHVyYXRpb24gPSBwYXJhbXMuc3BlZWQgKiAxLjU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1vbWVudHVtRHVyYXRpb24gPSBwYXJhbXMuc3BlZWQgKiAyLjU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHBhcmFtcy5mcmVlTW9kZVN0aWNreSkge1xuICAgICAgICBzd2lwZXIuc2xpZGVUb0Nsb3Nlc3QoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyYW1zLmZyZWVNb2RlTW9tZW50dW1Cb3VuY2UgJiYgZG9Cb3VuY2UpIHtcbiAgICAgICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKGFmdGVyQm91bmNlUG9zaXRpb24pO1xuICAgICAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbihtb21lbnR1bUR1cmF0aW9uKTtcbiAgICAgICAgc3dpcGVyLnNldFRyYW5zbGF0ZShuZXdQb3NpdGlvbik7XG4gICAgICAgIHN3aXBlci50cmFuc2l0aW9uU3RhcnQodHJ1ZSwgc3dpcGVyLnN3aXBlRGlyZWN0aW9uKTtcbiAgICAgICAgc3dpcGVyLmFuaW1hdGluZyA9IHRydWU7XG4gICAgICAgICR3cmFwcGVyRWwudHJhbnNpdGlvbkVuZChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKCFzd2lwZXIgfHwgc3dpcGVyLmRlc3Ryb3llZCB8fCAhZGF0YS5hbGxvd01vbWVudHVtQm91bmNlKSByZXR1cm47XG4gICAgICAgICAgc3dpcGVyLmVtaXQoJ21vbWVudHVtQm91bmNlJyk7XG4gICAgICAgICAgc3dpcGVyLnNldFRyYW5zaXRpb24ocGFyYW1zLnNwZWVkKTtcbiAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHN3aXBlci5zZXRUcmFuc2xhdGUoYWZ0ZXJCb3VuY2VQb3NpdGlvbik7XG4gICAgICAgICAgICAkd3JhcHBlckVsLnRyYW5zaXRpb25FbmQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBpZiAoIXN3aXBlciB8fCBzd2lwZXIuZGVzdHJveWVkKSByZXR1cm47XG4gICAgICAgICAgICAgIHN3aXBlci50cmFuc2l0aW9uRW5kKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHN3aXBlci52ZWxvY2l0eSkge1xuICAgICAgICBzd2lwZXIudXBkYXRlUHJvZ3Jlc3MobmV3UG9zaXRpb24pO1xuICAgICAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbihtb21lbnR1bUR1cmF0aW9uKTtcbiAgICAgICAgc3dpcGVyLnNldFRyYW5zbGF0ZShuZXdQb3NpdGlvbik7XG4gICAgICAgIHN3aXBlci50cmFuc2l0aW9uU3RhcnQodHJ1ZSwgc3dpcGVyLnN3aXBlRGlyZWN0aW9uKTtcblxuICAgICAgICBpZiAoIXN3aXBlci5hbmltYXRpbmcpIHtcbiAgICAgICAgICBzd2lwZXIuYW5pbWF0aW5nID0gdHJ1ZTtcbiAgICAgICAgICAkd3JhcHBlckVsLnRyYW5zaXRpb25FbmQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFzd2lwZXIgfHwgc3dpcGVyLmRlc3Ryb3llZCkgcmV0dXJuO1xuICAgICAgICAgICAgc3dpcGVyLnRyYW5zaXRpb25FbmQoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLmVtaXQoJ19mcmVlTW9kZU5vTW9tZW50dW1SZWxlYXNlJyk7XG4gICAgICAgIHN3aXBlci51cGRhdGVQcm9ncmVzcyhuZXdQb3NpdGlvbik7XG4gICAgICB9XG5cbiAgICAgIHN3aXBlci51cGRhdGVBY3RpdmVJbmRleCgpO1xuICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgICB9IGVsc2UgaWYgKHBhcmFtcy5mcmVlTW9kZVN0aWNreSkge1xuICAgICAgc3dpcGVyLnNsaWRlVG9DbG9zZXN0KCk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChwYXJhbXMuZnJlZU1vZGUpIHtcbiAgICAgIHN3aXBlci5lbWl0KCdfZnJlZU1vZGVOb01vbWVudHVtUmVsZWFzZScpO1xuICAgIH1cblxuICAgIGlmICghcGFyYW1zLmZyZWVNb2RlTW9tZW50dW0gfHwgdGltZURpZmYgPj0gcGFyYW1zLmxvbmdTd2lwZXNNcykge1xuICAgICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKCk7XG4gICAgICBzd2lwZXIudXBkYXRlQWN0aXZlSW5kZXgoKTtcbiAgICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9IC8vIEZpbmQgY3VycmVudCBzbGlkZVxuXG5cbiAgdmFyIHN0b3BJbmRleCA9IDA7XG4gIHZhciBncm91cFNpemUgPSBzd2lwZXIuc2xpZGVzU2l6ZXNHcmlkWzBdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc2xpZGVzR3JpZC5sZW5ndGg7IGkgKz0gaSA8IHBhcmFtcy5zbGlkZXNQZXJHcm91cFNraXAgPyAxIDogcGFyYW1zLnNsaWRlc1Blckdyb3VwKSB7XG4gICAgdmFyIF9pbmNyZW1lbnQgPSBpIDwgcGFyYW1zLnNsaWRlc1Blckdyb3VwU2tpcCAtIDEgPyAxIDogcGFyYW1zLnNsaWRlc1Blckdyb3VwO1xuXG4gICAgaWYgKHR5cGVvZiBzbGlkZXNHcmlkW2kgKyBfaW5jcmVtZW50XSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmIChjdXJyZW50UG9zID49IHNsaWRlc0dyaWRbaV0gJiYgY3VycmVudFBvcyA8IHNsaWRlc0dyaWRbaSArIF9pbmNyZW1lbnRdKSB7XG4gICAgICAgIHN0b3BJbmRleCA9IGk7XG4gICAgICAgIGdyb3VwU2l6ZSA9IHNsaWRlc0dyaWRbaSArIF9pbmNyZW1lbnRdIC0gc2xpZGVzR3JpZFtpXTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRQb3MgPj0gc2xpZGVzR3JpZFtpXSkge1xuICAgICAgc3RvcEluZGV4ID0gaTtcbiAgICAgIGdyb3VwU2l6ZSA9IHNsaWRlc0dyaWRbc2xpZGVzR3JpZC5sZW5ndGggLSAxXSAtIHNsaWRlc0dyaWRbc2xpZGVzR3JpZC5sZW5ndGggLSAyXTtcbiAgICB9XG4gI
118H0gLy8gRmluZCBjdXJyZW50IHNsaWRlIHNpemVcblxuXG4gIHZhciByYXRpbyA9IChjdXJyZW50UG9zIC0gc2xpZGVzR3JpZFtzdG9wSW5kZXhdKSAvIGdyb3VwU2l6ZTtcbiAgdmFyIGluY3JlbWVudCA9IHN0b3BJbmRleCA8IHBhcmFtcy5zbGlkZXNQZXJHcm91cFNraXAgLSAxID8gMSA6IHBhcmFtcy5zbGlkZXNQZXJHcm91cDtcblxuICBpZiAodGltZURpZmYgPiBwYXJhbXMubG9uZ1N3aXBlc01zKSB7XG4gICAgLy8gTG9uZyB0b3VjaGVzXG4gICAgaWYgKCFwYXJhbXMubG9uZ1N3aXBlcykge1xuICAgICAgc3dpcGVyLnNsaWRlVG8oc3dpcGVyLmFjdGl2ZUluZGV4KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc3dpcGVyLnN3aXBlRGlyZWN0aW9uID09PSAnbmV4dCcpIHtcbiAgICAgIGlmIChyYXRpbyA+PSBwYXJhbXMubG9uZ1N3aXBlc1JhdGlvKSBzd2lwZXIuc2xpZGVUbyhzdG9wSW5kZXggKyBpbmNyZW1lbnQpO2Vsc2Ugc3dpcGVyLnNsaWRlVG8oc3RvcEluZGV4KTtcbiAgICB9XG5cbiAgICBpZiAoc3dpcGVyLnN3aXBlRGlyZWN0aW9uID09PSAncHJldicpIHtcbiAgICAgIGlmIChyYXRpbyA+IDEgLSBwYXJhbXMubG9uZ1N3aXBlc1JhdGlvKSBzd2lwZXIuc2xpZGVUbyhzdG9wSW5kZXggKyBpbmNyZW1lbnQpO2Vsc2Ugc3dpcGVyLnNsaWRlVG8oc3RvcEluZGV4KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gU2hvcnQgc3dpcGVzXG4gICAgaWYgKCFwYXJhbXMuc2hvcnRTd2lwZXMpIHtcbiAgICAgIHN3aXBlci5zbGlkZVRvKHN3aXBlci5hY3RpdmVJbmRleCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGlzTmF2QnV0dG9uVGFyZ2V0ID0gc3dpcGVyLm5hdmlnYXRpb24gJiYgKGUudGFyZ2V0ID09PSBzd2lwZXIubmF2aWdhdGlvbi5uZXh0RWwgfHwgZS50YXJnZXQgPT09IHN3aXBlci5uYXZpZ2F0aW9uLnByZXZFbCk7XG5cbiAgICBpZiAoIWlzTmF2QnV0dG9uVGFyZ2V0KSB7XG4gICAgICBpZiAoc3dpcGVyLnN3aXBlRGlyZWN0aW9uID09PSAnbmV4dCcpIHtcbiAgICAgICAgc3dpcGVyLnNsaWRlVG8oc3RvcEluZGV4ICsgaW5jcmVtZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN3aXBlci5zd2lwZURpcmVjdGlvbiA9PT0gJ3ByZXYnKSB7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvKHN0b3BJbmRleCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlLnRhcmdldCA9PT0gc3dpcGVyLm5hdmlnYXRpb24ubmV4dEVsKSB7XG4gICAgICBzd2lwZXIuc2xpZGVUbyhzdG9wSW5kZXggKyBpbmNyZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzd2lwZXIuc2xpZGVUbyhzdG9wSW5kZXgpO1xuICAgIH1cbiAgfVxufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9uUmVzaXplKCkge1xuICB2YXIgc3dpcGVyID0gdGhpcztcbiAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMsXG4gICAgICBlbCA9IHN3aXBlci5lbDtcbiAgaWYgKGVsICYmIGVsLm9mZnNldFdpZHRoID09PSAwKSByZXR1cm47IC8vIEJyZWFrcG9pbnRzXG5cbiAgaWYgKHBhcmFtcy5icmVha3BvaW50cykge1xuICAgIHN3aXBlci5zZXRCcmVha3BvaW50KCk7XG4gIH0gLy8gU2F2ZSBsb2Nrc1xuXG5cbiAgdmFyIGFsbG93U2xpZGVOZXh0ID0gc3dpcGVyLmFsbG93U2xpZGVOZXh0LFxuICAgICAgYWxsb3dTbGlkZVByZXYgPSBzd2lwZXIuYWxsb3dTbGlkZVByZXYsXG4gICAgICBzbmFwR3JpZCA9IHN3aXBlci5zbmFwR3JpZDsgLy8gRGlzYWJsZSBsb2NrcyBvbiByZXNpemVcblxuICBzd2lwZXIuYWxsb3dTbGlkZU5leHQgPSB0cnVlO1xuICBzd2lwZXIuYWxsb3dTbGlkZVByZXYgPSB0cnVlO1xuICBzd2lwZXIudXBkYXRlU2l6ZSgpO1xuICBzd2lwZXIudXBkYXRlU2xpZGVzKCk7XG4gIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG5cbiAgaWYgKChwYXJhbXMuc2xpZGVzUGVyVmlldyA9PT0gJ2F1dG8nIHx8IHBhcmFtcy5zbGlkZXNQZXJWaWV3ID4gMSkgJiYgc3dpcGVyLmlzRW5kICYmICFzd2lwZXIuaXNCZWdpbm5pbmcgJiYgIXN3aXBlci5wYXJhbXMuY2VudGVyZWRTbGlkZXMpIHtcbiAgICBzd2lwZXIuc2xpZGVUbyhzd2lwZXIuc2xpZGVzLmxlbmd0aCAtIDEsIDAsIGZhbHNlLCB0cnVlKTtcbiAgfSBlbHNlIHtcbiAgICBzd2lwZXIuc2xpZGVUbyhzd2lwZXIuYWN0aXZlSW5kZXgsIDAsIGZhbHNlLCB0cnVlKTtcbiAgfVxuXG4gIGlmIChzd2lwZXIuYXV0b3BsYXkgJiYgc3dpcGVyLmF1dG9wbGF5LnJ1bm5pbmcgJiYgc3dpcGVyLmF1dG9wbGF5LnBhdXNlZCkge1xuICAgIHN3aXBlci5hdXRvcGxheS5ydW4oKTtcbiAgfSAvLyBSZXR1cm4gbG9ja3MgYWZ0ZXIgcmVzaXplXG5cblxuICBzd2lwZXIuYWxsb3dTbGlkZVByZXYgPSBhbGxvd1NsaWRlUHJldjtcbiAgc3dpcGVyLmFsbG93U2xpZGVOZXh0ID0gYWxsb3dTbGlkZU5leHQ7XG5cbiAgaWYgKHN3aXBlci5wYXJhbXMud2F0Y2hPdmVyZmxvdyAmJiBzbmFwR3JpZCAhPT0gc3dpcGVyLnNuYXBHcmlkKSB7XG4gICAgc3dpcGVyLmNoZWNrT3ZlcmZsb3coKTtcbiAgfVxufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9uQ2xpY2soZSkge1xuICB2YXIgc3dpcGVyID0gdGhpcztcbiAgaWYgKCFzd2lwZXIuZW5hYmxlZCkgcmV0dXJuO1xuXG4gIGlmICghc3dpcGVyLmFsbG93Q2xpY2spIHtcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5wcmV2ZW50Q2xpY2tzKSBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5wcmV2ZW50Q2xpY2tzUHJvcGFnYXRpb24gJiYgc3dpcGVyLmFuaW1hdGluZykge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICB9XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gb25TY3JvbGwoKSB7XG4gIHZhciBzd2lwZXIgPSB0aGlzO1xuICB2YXIgd3JhcHBlckVsID0gc3dpcGVyLndyYXBwZXJFbCxcbiAgICAgIHJ0bFRyYW5zbGF0ZSA9IHN3aXBlci5ydGxUcmFuc2xhdGUsXG4gICAgICBlbmFibGVkID0gc3dpcGVyLmVuYWJsZWQ7XG4gIGlmICghZW5hYmxlZCkgcmV0dXJuO1xuICBzd2lwZXIucHJldmlvdXNUcmFuc2xhdGUgPSBzd2lwZXIudHJhbnNsYXRlO1xuXG4gIGlmIChzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICBpZiAocnRsVHJhbnNsYXRlKSB7XG4gICAgICBzd2lwZXIudHJhbnNsYXRlID0gd3JhcHBlckVsLnNjcm9sbFdpZHR
118oIC0gd3JhcHBlckVsLm9mZnNldFdpZHRoIC0gd3JhcHBlckVsLnNjcm9sbExlZnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXBlci50cmFuc2xhdGUgPSAtd3JhcHBlckVsLnNjcm9sbExlZnQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHN3aXBlci50cmFuc2xhdGUgPSAtd3JhcHBlckVsLnNjcm9sbFRvcDtcbiAgfSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcblxuXG4gIGlmIChzd2lwZXIudHJhbnNsYXRlID09PSAtMCkgc3dpcGVyLnRyYW5zbGF0ZSA9IDA7XG4gIHN3aXBlci51cGRhdGVBY3RpdmVJbmRleCgpO1xuICBzd2lwZXIudXBkYXRlU2xpZGVzQ2xhc3NlcygpO1xuICB2YXIgbmV3UHJvZ3Jlc3M7XG4gIHZhciB0cmFuc2xhdGVzRGlmZiA9IHN3aXBlci5tYXhUcmFuc2xhdGUoKSAtIHN3aXBlci5taW5UcmFuc2xhdGUoKTtcblxuICBpZiAodHJhbnNsYXRlc0RpZmYgPT09IDApIHtcbiAgICBuZXdQcm9ncmVzcyA9IDA7XG4gIH0gZWxzZSB7XG4gICAgbmV3UHJvZ3Jlc3MgPSAoc3dpcGVyLnRyYW5zbGF0ZSAtIHN3aXBlci5taW5UcmFuc2xhdGUoKSkgLyB0cmFuc2xhdGVzRGlmZjtcbiAgfVxuXG4gIGlmIChuZXdQcm9ncmVzcyAhPT0gc3dpcGVyLnByb2dyZXNzKSB7XG4gICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKHJ0bFRyYW5zbGF0ZSA/IC1zd2lwZXIudHJhbnNsYXRlIDogc3dpcGVyLnRyYW5zbGF0ZSk7XG4gIH1cblxuICBzd2lwZXIuZW1pdCgnc2V0VHJhbnNsYXRlJywgc3dpcGVyLnRyYW5zbGF0ZSwgZmFsc2UpO1xufSIsImltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSAnc3NyLXdpbmRvdyc7XG5pbXBvcnQgb25Ub3VjaFN0YXJ0IGZyb20gJy4vb25Ub3VjaFN0YXJ0JztcbmltcG9ydCBvblRvdWNoTW92ZSBmcm9tICcuL29uVG91Y2hNb3ZlJztcbmltcG9ydCBvblRvdWNoRW5kIGZyb20gJy4vb25Ub3VjaEVuZCc7XG5pbXBvcnQgb25SZXNpemUgZnJvbSAnLi9vblJlc2l6ZSc7XG5pbXBvcnQgb25DbGljayBmcm9tICcuL29uQ2xpY2snO1xuaW1wb3J0IG9uU2Nyb2xsIGZyb20gJy4vb25TY3JvbGwnO1xudmFyIGR1bW15RXZlbnRBdHRhY2hlZCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBkdW1teUV2ZW50TGlzdGVuZXIoKSB7fVxuXG5mdW5jdGlvbiBhdHRhY2hFdmVudHMoKSB7XG4gIHZhciBzd2lwZXIgPSB0aGlzO1xuICB2YXIgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcyxcbiAgICAgIHRvdWNoRXZlbnRzID0gc3dpcGVyLnRvdWNoRXZlbnRzLFxuICAgICAgZWwgPSBzd2lwZXIuZWwsXG4gICAgICB3cmFwcGVyRWwgPSBzd2lwZXIud3JhcHBlckVsLFxuICAgICAgZGV2aWNlID0gc3dpcGVyLmRldmljZSxcbiAgICAgIHN1cHBvcnQgPSBzd2lwZXIuc3VwcG9ydDtcbiAgc3dpcGVyLm9uVG91Y2hTdGFydCA9IG9uVG91Y2hTdGFydC5iaW5kKHN3aXBlcik7XG4gIHN3aXBlci5vblRvdWNoTW92ZSA9IG9uVG91Y2hNb3ZlLmJpbmQoc3dpcGVyKTtcbiAgc3dpcGVyLm9uVG91Y2hFbmQgPSBvblRvdWNoRW5kLmJpbmQoc3dpcGVyKTtcblxuICBpZiAocGFyYW1zLmNzc01vZGUpIHtcbiAgICBzd2lwZXIub25TY3JvbGwgPSBvblNjcm9sbC5iaW5kKHN3aXBlcik7XG4gIH1cblxuICBzd2lwZXIub25DbGljayA9IG9uQ2xpY2suYmluZChzd2lwZXIpO1xuICB2YXIgY2FwdHVyZSA9ICEhcGFyYW1zLm5lc3RlZDsgLy8gVG91Y2ggRXZlbnRzXG5cbiAgaWYgKCFzdXBwb3J0LnRvdWNoICYmIHN1cHBvcnQucG9pbnRlckV2ZW50cykge1xuICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHMuc3RhcnQsIHN3aXBlci5vblRvdWNoU3RhcnQsIGZhbHNlKTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzLm1vdmUsIHN3aXBlci5vblRvdWNoTW92ZSwgY2FwdHVyZSk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50cy5lbmQsIHN3aXBlci5vblRvdWNoRW5kLCBmYWxzZSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHN1cHBvcnQudG91Y2gpIHtcbiAgICAgIHZhciBwYXNzaXZlTGlzdGVuZXIgPSB0b3VjaEV2ZW50cy5zdGFydCA9PT0gJ3RvdWNoc3RhcnQnICYmIHN1cHBvcnQucGFzc2l2ZUxpc3RlbmVyICYmIHBhcmFtcy5wYXNzaXZlTGlzdGVuZXJzID8ge1xuICAgICAgICBwYXNzaXZlOiB0cnVlLFxuICAgICAgICBjYXB0dXJlOiBmYWxzZVxuICAgICAgfSA6IGZhbHNlO1xuICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50cy5zdGFydCwgc3dpcGVyLm9uVG91Y2hTdGFydCwgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHMubW92ZSwgc3dpcGVyLm9uVG91Y2hNb3ZlLCBzdXBwb3J0LnBhc3NpdmVMaXN0ZW5lciA/IHtcbiAgICAgICAgcGFzc2l2ZTogZmFsc2UsXG4gICAgICAgIGNhcHR1cmU6IGNhcHR1cmVcbiAgICAgIH0gOiBjYXB0dXJlKTtcbiAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHMuZW5kLCBzd2lwZXIub25Ub3VjaEVuZCwgcGFzc2l2ZUxpc3RlbmVyKTtcblxuICAgICAgaWYgKHRvdWNoRXZlbnRzLmNhbmNlbCkge1xuICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzLmNhbmNlbCwgc3dpcGVyLm9uVG91Y2hFbmQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICB9XG5cbiAgICAgIGlmICghZHVtbXlFdmVudEF0dGFjaGVkKSB7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBkdW1teUV2ZW50TGlzdGVuZXIpO1xuICAgICAgICBkdW1teUV2ZW50QXR0YWNoZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwYXJhbXMuc2ltdWxhdGVUb3VjaCAmJiAhZGV2aWNlLmlvcyAmJiAhZGV2aWNlLmFuZHJvaWQgfHwgcGFyYW1zLnNpbXVsYXRlVG91Y2ggJiYgIXN1cHBvcnQudG91Y2ggJiYgZGV2aWNlLmlvcykge1xuICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgc3dpcGVyLm9uVG91Y2hTdGFydCwgZmFsc2UpO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgc3dpcGVyLm9uVG91Y2hNb3ZlLCBjYXB0dXJlKTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBzd2lwZXIub25Ub3VjaEVuZCwgZmFsc2UpO1xuICAgIH1cbiAgfSAvLyBQcmV2ZW50IExpbmtzIENsaWNrc1xuXG5cbiAgaWYgKHBhcmFtcy5wcmV2ZW50Q2xpY2tzIHx8IHBhcmFtcy5wcmV2ZW50Q2xpY2tzUHJvcGFnYXRpb24pIHtcbiAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHN3aXBlci5vbkNsaWNrLCB0cnVlKTtcbiAgfVxuXG4gIGlmIChwYXJhbXMuY3NzTW9kZSkge1xuICAgIHdyYXBwZXJFbC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBzd2lwZXIub25TY3JvbGwpO1xuICB9IC8vIFJlc2l6ZSBoYW5kbGVyXG5cblxuICBpZiAocGFyYW1zLnVwZGF0ZU9uV2luZG93UmVzaXplKSB7XG4gICAgc3dpcGVyLm9uKGRldmljZS5pb3MgfHwgZGV2aWNlLmFuZHJvaWQgPyAncmVzaXplIG9yaWVudGF0aW9uY2hhbmdlIG9ic2VydmVyVXBkYXRlJyA6ICdyZXNpemUgb2JzZXJ2ZXJVcGRhdGUnLCBvblJlc2l6ZSwgdHJ1ZSk7XG4gIH0gZWxzZSB7XG4gICAgc3dpcGVyLm9uKCdvYnNlcnZlclVwZGF0ZScsIG9uUmVzaXplLCB0cnVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZXRhY2hFdmVudHMoKSB7XG4gIHZhciBzd2lwZXIgPSB0aGlzO1xuICB2YXIgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcyxcbiAgICAgIHRvdWNoRXZlbnRzID0gc3dpcGVyLnRvdWNoRXZlbnRzLFxuICAgICAgZWwgPSBzd2lwZXIuZWwsXG4gICAgICB3cmFwcGVyRWwgPSBzd2lwZXIud3JhcHBlckVsLFxuICAgICAgZGV2aWNlID0gc3dpcGVyLmRldmljZSxcbiAgICAgIHN1cHBvcnQgPSBzd2lwZXIuc3VwcG9ydDtcbiAgdmFyIGNhcHR1cmUgPSAhIXBhcmFtcy5uZXN0ZWQ7IC8vIFRvdWNoIEV2ZW50c1xuXG4gIGlmICghc3VwcG9ydC50b3VjaCAmJi
118BzdXBwb3J0LnBvaW50ZXJFdmVudHMpIHtcbiAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzLnN0YXJ0LCBzd2lwZXIub25Ub3VjaFN0YXJ0LCBmYWxzZSk7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50cy5tb3ZlLCBzd2lwZXIub25Ub3VjaE1vdmUsIGNhcHR1cmUpO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHMuZW5kLCBzd2lwZXIub25Ub3VjaEVuZCwgZmFsc2UpO1xuICB9IGVsc2Uge1xuICAgIGlmIChzdXBwb3J0LnRvdWNoKSB7XG4gICAgICB2YXIgcGFzc2l2ZUxpc3RlbmVyID0gdG91Y2hFdmVudHMuc3RhcnQgPT09ICdvblRvdWNoU3RhcnQnICYmIHN1cHBvcnQucGFzc2l2ZUxpc3RlbmVyICYmIHBhcmFtcy5wYXNzaXZlTGlzdGVuZXJzID8ge1xuICAgICAgICBwYXNzaXZlOiB0cnVlLFxuICAgICAgICBjYXB0dXJlOiBmYWxzZVxuICAgICAgfSA6IGZhbHNlO1xuICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50cy5zdGFydCwgc3dpcGVyLm9uVG91Y2hTdGFydCwgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHMubW92ZSwgc3dpcGVyLm9uVG91Y2hNb3ZlLCBjYXB0dXJlKTtcbiAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHMuZW5kLCBzd2lwZXIub25Ub3VjaEVuZCwgcGFzc2l2ZUxpc3RlbmVyKTtcblxuICAgICAgaWYgKHRvdWNoRXZlbnRzLmNhbmNlbCkge1xuICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzLmNhbmNlbCwgc3dpcGVyLm9uVG91Y2hFbmQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5zaW11bGF0ZVRvdWNoICYmICFkZXZpY2UuaW9zICYmICFkZXZpY2UuYW5kcm9pZCB8fCBwYXJhbXMuc2ltdWxhdGVUb3VjaCAmJiAhc3VwcG9ydC50b3VjaCAmJiBkZXZpY2UuaW9zKSB7XG4gICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBzd2lwZXIub25Ub3VjaFN0YXJ0LCBmYWxzZSk7XG4gICAgICBkb2
118N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBzd2lwZXIub25Ub3VjaE1vdmUsIGNhcHR1cmUpO1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHN3aXBlci5vblRvdWNoRW5kLCBmYWxzZSk7XG4gICAgfVxuICB9IC8vIFByZXZlbnQgTGlua3MgQ2xpY2tzXG5cblxuICBpZiAocGFyYW1zLnByZXZlbnRDbGlja3MgfHwgcGFyYW1zLnByZXZlbnRDbGlja3NQcm9wYWdhdGlvbikge1xuICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc3dpcGVyLm9uQ2xpY2ssIHRydWUpO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5jc3NNb2RlKSB7XG4gICAgd3JhcHBlckVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHN3aXBlci5vblNjcm9sbCk7XG4gIH0gLy8gUmVzaXplIGhhbmRsZXJcblxuXG4gIHN3aXBlci5vZmYoZGV2aWNlLmlvcyB8fCBkZXZpY2UuYW5kcm9pZCA/ICdyZXNpemUgb3JpZW50YXRpb25jaGFuZ2Ugb2JzZXJ2ZXJVcGRhdGUnIDogJ3Jlc2l6ZSBvYnNlcnZlclVwZGF0ZScsIG9uUmVzaXplKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBhdHRhY2hFdmVudHM6IGF0dGFjaEV2ZW50cyxcbiAgZGV0YWNoRXZlbnRzOiBkZXRhY2hFdmVudHNcbn07IiwiaW1wb3J0IGFkZENsYXNzZXMgZnJvbSAnLi9hZGRDbGFzc2VzJztcbmltcG9ydCByZW1vdmVDbGFzc2VzIGZyb20gJy4vcmVtb3ZlQ2xhc3Nlcyc7XG5leHBvcnQgZGVmYXVsdCB7XG4gIGFkZENsYXNzZXM6IGFkZENsYXNzZXMsXG4gIHJlbW92ZUNsYXNzZXM6IHJlbW92ZUNsYXNzZXNcbn07IiwiZnVuY3Rpb24gcHJlcGFyZUNsYXNzZXMoZW50cmllcywgcHJlZml4KSB7XG4gIHZhciByZXN1bHRDbGFzc2VzID0gW107XG4gIGVudHJpZXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIE9iamVjdC5rZXlzKGl0ZW0pLmZvckVhY2goZnVuY3Rpb24gKGNsYXNzTmFtZXMpIHtcbiAgICAgICAgaWYgKGl0ZW1bY2xhc3NOYW1lc10pIHtcbiAgICAgICAgICByZXN1bHRDbGFzc2VzLnB1c2gocHJlZml4ICsgY2xhc3NOYW1lcyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXN1bHRDbGFzc2VzLnB1c2gocHJlZml4ICsgaXRlbSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdENsYXNzZXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFkZENsYXNzZXMoKSB7XG4gIHZhciBzd2lwZXIgPSB0aGlzO1xuICB2YXIgY2xhc3NOYW1lcyA9IHN3aXBlci5jbGFzc05hbWVzLFxuICAgICAgcGFyYW1zID0gc3dpcGVyLnBhcmFtcyxcbiAgICAgIHJ0bCA9IHN3aXBlci5ydGwsXG4gICAgICAkZWwgPSBzd2lwZXIuJGVsLFxuICAgICAgZGV2aWNlID0gc3dpcGVyLmRldmljZSxcbiAgICAgIHN1cHBvcnQgPSBzd2lwZXIuc3VwcG9ydDsgLy8gcHJldHRpZXItaWdub3JlXG5cbiAgdmFyIHN1ZmZpeGVzID0gcHJlcGFyZUNsYXNzZXMoWydpbml0aWFsaXplZCcsIHBhcmFtcy5kaXJlY3Rpb24sIHtcbiAgICAncG9pbnRlci1ldmVudHMnOiBzdXBwb3J0LnBvaW50ZXJFdmVudHMgJiYgIXN1cHBvcnQudG91Y2hcbiAgfSwge1xuICAgICdmcmVlLW1vZGUnOiBwYXJhbXMuZnJlZU1vZGVcbiAgfSwge1xuICAgICdhdXRvaGVpZ2h0JzogcGFyYW1zLmF1dG9IZWlnaHRcbiAgfSwge1xuICAgICdydGwnOiBydGxcbiAgfSwge1xuICAgICdtdWx0aXJvdyc6IHBhcmFtcy5zbGlkZXNQZXJDb2x1bW4gPiAxXG4gIH0sIHtcbiAgICAnbXVsdGlyb3ctY29sdW1uJzogcGFyYW1zLnNsaWRlc1BlckNvbHVtbiA+IDEgJiYgcGFyYW1zLnNsaWRlc1BlckNvbHVtbkZpbGwgPT09ICdjb2x1bW4nXG4gIH0sIHtcbiAgICAnYW5kcm9pZCc6IGRldmljZS5hbmRyb2lkXG4gIH0sIHtcbiAgICAnaW9zJzogZGV2aWNlLmlvc1xuICB9LCB7XG4gICAgJ2Nzcy1tb2RlJzogcGFyYW1zLmNzc01vZGVcbiAgfV0sIHBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzKTtcbiAgY2xhc3NOYW1lcy5wdXNoLmFwcGx5KGNsYXNzTmFtZXMsIHN1ZmZpeGVzKTtcbiAgJGVsLmFkZENsYXNzKFtdLmNvbmNhdChjbGFzc05hbWVzKS5qb2luKCcgJykpO1xuICBzd2lwZXIuZW1pdENvbnRhaW5lckNsYXNzZXMoKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZW1vdmVDbGFzc2VzKCkge1xuICB2YXIgc3dpcGVyID0gdGhpcztcbiAgdmFyICRlbCA9IHN3aXBlci4kZWwsXG4gICAgICBjbGFzc05hbWVzID0gc3dpcGVyLmNsYXNzTmFtZXM7XG4gICRlbC5yZW1vdmVDbGFzcyhjbGFzc05hbWVzLmpvaW4oJyAnKSk7XG4gIHN3aXBlci5lbWl0Q29udGFpbmVyQ2xhc3NlcygpO1xufSIsImV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdDogdHJ1ZSxcbiAgZGlyZWN0aW9uOiAnaG9yaXpvbnRhbCcsXG4gIHRvdWNoRXZlbnRzVGFyZ2V0OiAnY29udGFpbmVyJyxcbiAgaW5pdGlhbFNsaWRlOiAwLFxuICBzcGVlZDogMzAwLFxuICBjc3NNb2RlOiBmYWxzZSxcbiAgdXBkYXRlT25XaW5kb3dSZXNpemU6IHRydWUsXG4gIHJlc2l6ZU9ic2VydmVyOiBmYWxzZSxcbiAgbmVzdGVkOiBmYWxzZSxcbiAgY3JlYXRlRWxlbWVudHM6IGZhbHNlLFxuICBlbmFibGVkOiB0cnVlLFxuICBmb2N1c2FibGVFbGVtZW50czogJ2lucHV0LCBzZWxlY3QsIG9wdGlvbiwgdGV4dGFyZWEsIGJ1dHRvbiwgdmlkZW8sIGxhYmVsJyxcbiAgLy8gT3ZlcnJpZGVzXG4gIHdpZHRoOiBudWxsLFxuICBoZWlnaHQ6IG51bGwsXG4gIC8vXG4gIHByZXZlbnRJbnRlcmFjdGlvbk9uVHJhbnNpdGlvbjogZmFsc2UsXG4gIC8vIHNzclxuICB1c2VyQWdlbnQ6IG51bGwsXG4gIHVybDogbnVsbCxcbiAgLy8gVG8gc3VwcG9ydCBpT1MncyBzd2lwZS10by1nby1iYWNrIGdlc3R1cmUgKHdoZW4gYmVpbmcgdXNlZCBpbi1hcHApLlxuICBlZGdlU3dpcGVEZXRlY3Rpb246IGZhbHNlLFxuICBlZGdlU3dpcGVUaHJlc2hvbGQ6IDIwLFxuICAvLyBGcmVlIG1vZGVcbiAgZnJlZU1vZGU6IGZhbHNlLFxuICBmcmVlTW9kZU1vbWVudHVtOiB0cnVlLFxuICBmcmVlTW9kZU1vbWVudHVtUmF0aW86IDEsXG4gIGZyZWVNb2RlTW9tZW50dW1Cb3VuY2U6IHRydWUsXG4gIGZyZWVNb2RlTW9tZW50dW1Cb3VuY2VSYXRpbzogMSxcbiAgZnJlZU1vZGVNb21lbnR1bVZlbG9jaXR5UmF0aW86IDEsXG4gIGZyZWVNb2RlU3RpY2t5OiBmYWxzZSxcbiAgZnJlZU1vZGVNaW5pbXVtVmVsb2NpdHk6IDAuMDIsXG4gIC8vIEF1dG9oZWlnaHRcbiAgYXV0b0hlaWdodDogZmFsc2UsXG4gIC8vIFNldCB3cmFwcGVyIHdpZHRoXG4gIHNldFdyYXBwZXJTaXplOiBmYWxzZSxcbiAgLy8gVmlydHVhbCBUcmFuc2xhdGVcbiAgdmlydHVhbFRyYW5zbGF0ZTogZmFsc2UsXG4gIC8vIEVmZmVjdHNcbiAgZWZmZWN0OiAnc2xpZGUnLFxuICAvLyAnc2xpZGUnIG9yICdmYWRlJyBvciAnY3ViZScgb3IgJ2NvdmVyZmxvdycgb3IgJ2ZsaXAnXG4gIC8vIEJyZWFrcG9pbnRzXG4gIGJyZWFrcG9pbnRzOiB1bmRlZmluZWQsXG4gIGJyZWFrcG9pbnRzQmFzZTogJ3dpbmRvdycsXG4gIC8vIFNsaWRlcyBncmlkXG4gIHNwYWNlQmV0d2VlbjogMCxcbiAgc2xpZGVzUGVyVmlldzogMSxcbiAgc2xpZGVzUGVyQ29sdW1uOiAxLFxuICBzbGlkZXNQZXJDb2x1bW5GaWxsOiAnY29sdW1uJyxcbiAgc2xpZGVzUGVyR3JvdXA6IDEsXG4gIHNsaWRlc1Blckdyb3VwU2tpcDogMCxcbiAgY2VudGVyZWRTbGlkZXM6IGZhbHNlLFxuICBjZW50ZXJlZFNsaWRlc0JvdW5kczogZmFsc2UsXG4gIHNsaWRlc09mZnNldEJlZm9yZTogMCxcbiAgLy8gaW4gcHhcbiAgc2xpZGVzT2Zmc2V0QWZ0ZXI6IDAsXG4gIC8vIGluIHB4XG4gIG5vcm1hbGl6ZVNsaWRlSW5kZXg6IHRydWUsXG4gIGNlbnRlckluc3VmZmljaWVudFNsaWRlczogZmFsc2UsXG4gIC8vIERpc2FibGUgc3dpcGVyIGFuZCBoaWRlIG5hdmlnYXRpb24gd2hlbiBjb250YWluZXIgbm90IG92ZXJmbG93XG4gIHdhdGNoT3ZlcmZsb3c6IGZhbHNlLFxuICAvLyBSb3VuZCBsZW5ndGhcbiAgcm91bmRMZW5ndGhzOiBmYWxzZSxcbiAgLy8gVG91Y2hlc1xuICB0b3VjaFJhdGlvOiAxLFxuICB0b3VjaEFuZ2xlOiA0NSxcbiAgc2ltdWxhdGVUb3VjaDogdHJ1ZSxcbiAgc2hvcnRTd2lwZXM6IHRydWUsXG4gIGxvbmdTd2lwZXM6IHRydWUsXG4gIGxvbmdTd2lwZXNSYXRpbzogMC41LFxuICBsb25nU3dpcGVzTXM6IDMwMCxcbiAgZm9sbG93RmluZ2VyOiB0cnVlLFxuICBhbGxvd1RvdWNoTW92ZTogdHJ1ZSxcbiAgdGhyZXNob2xkOiAwLFxuICB0b3VjaE1vdmVTdG9wUHJvcGFnYXRpb246IGZhbHNlLFxuICB0b3VjaFN0YXJ0UHJldmVudERlZmF1bHQ6IHRydWUsXG4gIHRvdWNoU3RhcnRGb3JjZVByZXZlbn
118REZWZhdWx0OiBmYWxzZSxcbiAgdG91Y2hSZWxlYXNlT25FZGdlczogZmFsc2UsXG4gIC8vIFVuaXF1ZSBOYXZpZ2F0aW9uIEVsZW1lbnRzXG4gIHVuaXF1ZU5hdkVsZW1lbnRzOiB0cnVlLFxuICAvLyBSZXNpc3RhbmNlXG4gIHJlc2lzdGFuY2U6IHRydWUsXG4gIHJlc2lzdGFuY2VSYXRpbzogMC44NSxcbiAgLy8gUHJvZ3Jlc3NcbiAgd2F0Y2hTbGlkZXNQcm9ncmVzczogZmFsc2UsXG4gIHdhdGNoU2xpZGVzVmlzaWJpbGl0eTogZmFsc2UsXG4gIC8vIEN1cnNvclxuICBncmFiQ3Vyc29yOiBmYWxzZSxcbiAgLy8gQ2xpY2tzXG4gIHByZXZlbnRDbGlja3M6IHRydWUsXG4gIHByZXZlbnRDbGlja3NQcm9wYWdhdGlvbjogdHJ1ZSxcbiAgc2xpZGVUb0NsaWNrZWRTbGlkZTogZmFsc2UsXG4gIC8vIEltYWdlc1xuICBwcmVsb2FkSW1hZ2VzOiB0cnVlLFxuICB1cGRhdGVPbkltYWdlc1JlYWR5OiB0cnVlLFxuICAvLyBsb29wXG4gIGxvb3A6IGZhbHNlLFxuICBsb29wQWRkaXRpb25hbFNsaWRlczogMCxcbiAgbG9vcGVkU2xpZGVzOiBudWxsLFxuICBsb29wRmlsbEdyb3VwV2l0aEJsYW5rOiBmYWxzZSxcbiAgbG9vcFByZXZlbnRzU2xpZGU6IHRydWUsXG4gIC8vIFN3aXBpbmcvbm8gc3dpcGluZ1xuICBhbGxvd1NsaWRlUHJldjogdHJ1ZSxcbiAgYWxsb3dTbGlkZU5leHQ6IHRydWUsXG4gIHN3aXBlSGFuZGxlcjogbnVsbCxcbiAgLy8gJy5zd2lwZS1oYW5kbGVyJyxcbiAgbm9Td2lwaW5nOiB0cnVlLFxuICBub1N3aXBpbmdDbGFzczogJ3N3aXBlci1uby1zd2lwaW5nJyxcbiAgbm9Td2lwaW5nU2VsZWN0b3I6IG51bGwsXG4gIC8vIFBhc3NpdmUgTGlzdGVuZXJzXG4gIHBhc3NpdmVMaXN0ZW5lcnM6IHRydWUsXG4gIC8vIE5TXG4gIGNvbnRhaW5lck1vZGlmaWVyQ2xhc3M6ICdzd2lwZXItY29udGFpbmVyLScsXG4gIC8vIE5FV1xuICBzbGlkZUNsYXNzOiAnc3dpcGVyLXNsaWRlJyxcbiAgc2xpZGVCbGFua0NsYXNzOiAnc3dpcGVyLXNsaWRlLWludmlzaWJsZS1ibGFuaycsXG4gIHNsaWRlQWN0aXZlQ2xhc3M6ICdzd2lwZXItc2xpZGUtYWN0aXZlJyxcbiAgc2xpZGVEdXBsaWNhdGVBY3RpdmVDbGFzczogJ3N3aXBlci1zbGlkZS1kdXBsaWNhdGUtYWN0aXZlJyxcbiAgc2xpZGVWaXNpYmxlQ2xhc3M6ICdzd2lwZXItc2xpZGUtdmlzaWJsZScsXG4gIHNsaWRlRHVwbGljYXRlQ2xhc3M6ICdzd2lwZXItc2xpZGUtZHVwbGljYXRlJyxcbiAgc2xpZGVOZXh0Q2xhc3M6ICdzd2lwZXItc2xpZGUtbmV4dCcsXG4gIHNsaWRlRHVwbGljYXRlTmV4dENsYXNzOiAnc3dpcGVyLXNsaWRlLWR1cGxpY2F0ZS1uZXh0JyxcbiAgc2xpZGVQcmV2Q2xhc3M6ICdzd2lwZXItc2xpZGUtcHJldicsXG4gIHNsaWRlRHVwbGljYXRlUHJldkNsYXNzOiAnc3dpcGVyLXNsaWRlLWR1cGxpY2F0ZS1wcmV2JyxcbiAgd3JhcHBlckNsYXNzOiAnc3dpcGVyLXdyYXBwZXInLFxuICAvLyBDYWxsYmFja3NcbiAgcnVuQ2FsbGJhY2tzT25Jbml0OiB0cnVlLFxuICAvLyBJbnRlcm5hbHNcbiAgX2VtaXRDbGFzc2VzOiBmYWxzZVxufTsiLCJmdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci
1185lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbi8qIGVzbGludCBuby1wYXJhbS1yZWFzc2lnbjogXCJvZmZcIiAqL1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tICdzc3Itd2luZG93JztcbmltcG9ydCAkIGZyb20gJy4uLy4uL3V0aWxzL2RvbSc7XG5pbXBvcnQgeyBleHRlbmQsIG5vdywgZGVsZXRlUHJvcHMgfSBmcm9tICcuLi8uLi91dGlscy91dGlscyc7XG5pbXBvcnQgeyBnZXRTdXBwb3J0IH0gZnJvbSAnLi4vLi4vdXRpbHMvZ2V0LXN1cHBvcnQnO1xuaW1wb3J0IHsgZ2V0RGV2aWNlIH0gZnJvbSAnLi4vLi4vdXRpbHMvZ2V0LWRldmljZSc7XG5pbXBvcnQgeyBnZXRCcm93c2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvZ2V0LWJyb3dzZXInO1xuaW1wb3J0IFJlc2l6ZSBmcm9tICcuLi8uLi9tb2R1bGVzL3Jlc2l6ZS9yZXNpemUnO1xuaW1wb3J0IE9ic2VydmVyIGZyb20gJy4uLy4uL21vZHVsZXMvb2JzZXJ2ZXIvb2JzZXJ2ZXInO1xuaW1wb3J0IG1vZHVsYXIgZnJvbSAnLi9tb2R1bGFyJztcbmltcG9ydCBldmVudHNFbWl0dGVyIGZyb20gJy4vZXZlbnRzLWVtaXR0ZXInO1xuaW1wb3J0IHVwZGF0ZSBmcm9tICcuL3VwZGF0ZS9pbmRleCc7XG5pbXBvcnQgdHJhbnNsYXRlIGZyb20gJy4vdHJhbnNsYXRlL2luZGV4JztcbmltcG9ydCB0cmFuc2l0aW9uIGZyb20gJy4vdHJhbnNpdGlvbi9pbmRleCc7XG5pbXBvcnQgc2xpZGUgZnJvbSAnLi9zbGlkZS9pbmRleCc7XG5pbXBvcnQgbG9vcCBmcm9tICcuL2xvb3AvaW5kZXgnO1xuaW1wb3J0IGdyYWJDdXJzb3IgZnJvbSAnLi9ncmFiLWN1cnNvci9pbmRleCc7XG5pbXBvcnQgbWFuaXB1bGF0aW9uIGZyb20gJy4vbWFuaXB1bGF0aW9uL2luZGV4JztcbmltcG9ydCBldmVudHMgZnJvbSAnLi9ldmVudHMvaW5kZXgnO1xuaW1wb3J0IGJyZWFrcG9pbnRzIGZyb20gJy4vYnJlYWtwb2ludHMvaW5kZXgnO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSAnLi9jbGFzc2VzL2luZGV4JztcbmltcG9ydCBpbWFnZXMgZnJvbSAnLi9pbWFnZXMvaW5kZXgnO1xuaW1wb3J0IGNoZWNrT3ZlcmZsb3cgZnJvbSAnLi9jaGVjay1vdmVyZmxvdy9pbmRleCc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi9kZWZhdWx0cyc7XG52YXIgcHJvdG90eXBlcyA9IHtcbiAgbW9kdWxhcjogbW9kdWxhcixcbiAgZXZlbnRzRW1pdHRlcjogZXZlbnRzRW1pdHRlcixcbiAgdXBkYXRlOiB1cGRhdGUsXG4gIHRyYW5zbGF0ZTogdHJhbnNsYXRlLFxuICB0cmFuc2l0aW9uOiB0cmFuc2l0aW9uLFxuICBzbGlkZTogc2xpZGUsXG4gIGxvb3A6IGxvb3AsXG4gIGdyYWJDdXJzb3I6IGdyYWJDdXJzb3IsXG4gIG1hbmlwdWxhdGlvbjogbWFuaXB1bGF0aW9uLFxuICBldmVudHM6IGV2ZW50cyxcbiAgYnJlYWtwb2ludHM6IGJyZWFrcG9pbnRzLFxuICBjaGVja092ZXJmbG93OiBjaGVja092ZXJmbG93LFxuICBjbGFzc2VzOiBjbGFzc2VzLFxuICBpbWFnZXM6IGltYWdlc1xufTtcbnZhciBleHRlbmRlZERlZmF1bHRzID0ge307XG5cbnZhciBTd2lwZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTd2lwZXIoKSB7XG4gICAgdmFyIGVsO1xuICAgIHZhciBwYXJhbXM7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgaWYgKGFyZ3MubGVuZ3RoID09PSAxICYmIGFyZ3NbMF0uY29uc3RydWN0b3IgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZ3NbMF0pLnNsaWNlKDgsIC0xKSA9PT0gJ09iamVjdCcpIHtcbiAgICAgIHBhcmFtcyA9IGFyZ3NbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsID0gYXJnc1swXTtcbiAgICAgIHBhcmFtcyA9IGFyZ3NbMV07XG4gICAgfVxuXG4gICAgaWYgKCFwYXJhbXMpIHBhcmFtcyA9IHt9O1xuICAgIHBhcmFtcyA9IGV4dGVuZCh7fSwgcGFyYW1zKTtcbiAgICBpZiAoZWwgJiYgIXBhcmFtcy5lbCkgcGFyYW1zLmVsID0gZWw7XG5cbiAgICBpZiAocGFyYW1zLmVsICYmICQocGFyYW1zLmVsKS5sZW5ndGggPiAxKSB7XG4gICAgICB2Y
118XIgc3dpcGVycyA9IFtdO1xuICAgICAgJChwYXJhbXMuZWwpLmVhY2goZnVuY3Rpb24gKGNvbnRhaW5lckVsKSB7XG4gICAgICAgIHZhciBuZXdQYXJhbXMgPSBleHRlbmQoe30sIHBhcmFtcywge1xuICAgICAgICAgIGVsOiBjb250YWluZXJFbFxuICAgICAgICB9KTtcbiAgICAgICAgc3dpcGVycy5wdXNoKG5ldyBTd2lwZXIobmV3UGFyYW1zKSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBzd2lwZXJzO1xuICAgIH0gLy8gU3dpcGVyIEluc3RhbmNlXG5cblxuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHN3aXBlci5fX3N3aXBlcl9fID0gdHJ1ZTtcbiAgICBzd2lwZXIuc3VwcG9ydCA9IGdldFN1cHBvcnQoKTtcbiAgICBzd2lwZXIuZGV2aWNlID0gZ2V0RGV2aWNlKHtcbiAgICAgIHVzZXJBZ2VudDogcGFyYW1zLnVzZXJBZ2VudFxuICAgIH0pO1xuICAgIHN3aXBlci5icm93c2VyID0gZ2V0QnJvd3NlcigpO1xuICAgIHN3aXBlci5ldmVudHNMaXN0ZW5lcnMgPSB7fTtcbiAgICBzd2lwZXIuZXZlbnRzQW55TGlzdGVuZXJzID0gW107XG5cbiAgICBpZiAodHlwZW9mIHN3aXBlci5tb2R1bGVzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgc3dpcGVyLm1vZHVsZXMgPSB7fTtcbiAgICB9XG5cbiAgICBPYmplY3Qua2V5cyhzd2lwZXIubW9kdWxlcykuZm9yRWFjaChmdW5jdGlvbiAobW9kdWxlTmFtZSkge1xuICAgICAgdmFyIG1vZHVsZSA9IHN3aXBlci5tb2R1bGVzW21vZHVsZU5hbWVdO1xuXG4gICAgICBpZiAobW9kdWxlLnBhcmFtcykge1xuICAgICAgICB2Y
118XIgbW9kdWxlUGFyYW1OYW1lID0gT2JqZWN0LmtleXMobW9kdWxlLnBhcmFtcylbMF07XG4gICAgICAgIHZhciBtb2R1bGVQYXJhbXMgPSBtb2R1bGUucGFyYW1zW21vZHVsZVBhcmFtTmFtZV07XG4gICAgICAgIGlmICh0eXBlb2YgbW9kdWxlUGFyYW1zICE9PSAnb2JqZWN0JyB8fCBtb2R1bGVQYXJhbXMgPT09IG51bGwpIHJldHVybjtcblxuICAgICAgICBpZiAoWyduYXZpZ2F0aW9uJywgJ3BhZ2luYXRpb24nLCAnc2Nyb2xsYmFyJ10uaW5kZXhPZihtb2R1bGVQYXJhbU5hbWUpID49IDAgJiYgcGFyYW1zW21vZHVsZVBhcmFtTmFtZV0gPT09IHRydWUpIHtcbiAgICAgICAgICBwYXJhbXNbbW9kdWxlUGFyYW1OYW1lXSA9IHtcbiAgICAgICAgICAgIGF1dG86IHRydWVcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCEobW9kdWxlUGFyYW1OYW1lIGluIHBhcmFtcyAmJiAnZW5hYmxlZCcgaW4gbW9kdWxlUGFyYW1zKSkgcmV0dXJuO1xuXG4gICAgICAgIGlmIChwYXJhbXNbbW9kdWxlUGFyYW1OYW1lXSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHBhcmFtc1ttb2R1bGVQYXJhbU5hbWVdID0ge1xuICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHBhcmFtc1ttb2R1bGVQYXJhbU5hbWVdID09PSAnb2JqZWN0JyAmJiAhKCdlbmFibGVkJyBpbiBwYXJhbXNbbW9kdWxlUGFyYW1OYW1lXSkpIHtcbiAgICAgICAgICBwYXJhbXNbbW9kdWxlUGFyYW1OYW1lXS5lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcGFyYW1zW21vZHVsZVBhcmFtTmFtZV0pIHBhcmFtc1ttb2R1bGVQYXJhbU5hbWVdID0ge1xuICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSk7IC8vIEV4dGVuZCBkZWZhdWx0cyB3aXRoIG1vZHVsZXMgcGFyYW1zXG5cbiAgICB2YXIgc3dpcGVyUGFyYW1zID0gZXh0ZW5kKHt9LCBkZWZhdWx0cyk7XG4gICAgc3dpcGVyLnVzZVBhcmFtcyhzd2lwZXJQYXJhbXMpOyAvLyBFeHRlbmQgZGVmYXVsdHMgd2l0aCBwYXNzZWQgcGFyYW1zXG5cbiAgICBzd2lwZXIucGFyYW1zID0gZXh0ZW5kKHt9LCBzd2lwZXJQYXJhbXMsIGV4dGVuZGVkRGVmYXVsdHMsIHBhcmFtcyk7XG4gICAgc3dpcGVyLm9yaWdpbmFsUGFyYW1zID0gZXh0ZW5kKHt9LCBzd2lwZXIucGFyYW1zKTtcbiAgICBzd2lwZXIucGFzc2VkUGFyYW1zID0gZXh0ZW5kKHt9LCBwYXJhbXMpOyAvLyBhZGQgZXZlbnQgbGlzdGVuZXJzXG5cbiAgICBpZiAoc3dpcGVyLnBhcmFtcyAmJiBzd2lwZXIucGFyYW1zLm9uKSB7XG4gICAgICBPYmplY3Qua2V5cyhzd2lwZXIucGFyYW1zLm9uKS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudE5hbWUpIHtcbiAgICAgICAgc3dpcGVyLm9uKGV2ZW50TmFtZSwgc3dpcGVyLnBhcmFtcy5vbltldmVudE5hbWVdKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChzd2lwZXIucGFyYW1zICYmIHN3aXBlci5wYXJhbXMub25BbnkpIHtcbiAgICAgIHN3aXBlci5vbkFueShzd2lwZXIucGFyYW1zLm9uQW55KTtcbiAgICB9IC8vIFNhdmUgRG9tIGxpYlxuXG5cbiAgICBzd2lwZXIuJCA9ICQ7IC8vIEV4dGVuZCBTd2lwZXJcblxuICAgIGV4dGVuZChzd2lwZXIsIHtcbiAgICAgIGVuYWJsZWQ6IHN3aXBlci5wYXJhbXMuZW5hYmxlZCxcbiAgICAgIGVsOiBlbCxcbiAgICAgIC8vIENsYXNzZXNcbiAgICAgIGNsYXNzTmFtZXM6IFtdLFxuICAgICAgLy8gU2xpZGVzXG4gICAgICBzbGlkZXM6ICQoKSxcbiAgICAgIHNsaWRlc0dyaWQ6IFtdLFxuICAgICAgc25hcEdyaWQ6IFtdLFxuICAgICAgc2xpZGVzU2l6ZXNHcmlkOiBbXSxcbiAgICAgIC8vIGlzRGlyZWN0aW9uXG4gICAgICBpc0hvcml6b250YWw6IGZ1bmN0aW9uIGlzSG9yaXpvbnRhbCgpIHtcbiAgICAgICAgcmV0dXJuIHN3aXBlci5wYXJhbXMuZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCc7XG4gICAgICB9LFxuICAgICAgaXNWZXJ0aWNhbDogZnVuY3Rpb24gaXNWZXJ0aWNhbCgpIHtcbiAgICAgICAgcmV0dXJuIHN3aXBlci5wYXJhbXMuZGlyZWN0aW9uID09PSAndmVydGljYWwnO1xuICAgICAgfSxcbiAgICAgIC8vIEluZGV4ZXNcbiAgICAgIGFjdGl2ZUluZGV4OiAwLFxuICAgICAgcmVhbEluZGV4OiAwLFxuICAgICAgLy9cbiAgICAgIGlzQmVnaW5uaW5nOiB0cnVlLFxuICAgICAgaXNFbmQ6IGZhbHNlLFxuICAgICAgLy8gUHJvcHNcbiAgICAgIHRyYW5zbGF0ZTogMCxcbiAgICAgIHByZXZpb3VzVHJhbnNsYXRlOiAwLFxuICAgICAgcHJvZ3Jlc3M6IDAsXG4gICAgICB2ZWxvY2l0eTogMCxcbiAgICAgIGFuaW1hdGluZzogZmFsc2UsXG4gICAgICAvLyBMb2Nrc1xuICAgICAgYWxsb3dTbGlkZU5leHQ6IHN3aXBlci5wYXJhbXMuYWxsb3dTbGlkZU5leHQsXG4gICAgICBhbGxvd1NsaWRlUHJldjogc3dpcGVyLnBhcmFtcy5hbGxvd1NsaWRlUHJldixcbiAgICAgIC8vIFRvdWNoIEV2ZW50c1xuICAgICAgdG91Y2hFdmVudHM6IGZ1bmN0aW9uIHRvdWNoRXZlbnRzKCkge1xuICAgICAgICB2Y
118XIgdG91Y2ggPSBbJ3RvdWNoc3RhcnQnLCAndG91Y2htb3ZlJywgJ3RvdWNoZW5kJywgJ3RvdWNoY2FuY2VsJ107XG4gICAgICAgIHZhciBkZXNrdG9wID0gWydtb3VzZWRvd24nLCAnbW91c2Vtb3ZlJywgJ21vdXNldXAnXTtcblxuICAgICAgICBpZiAoc3dpcGVyLnN1cHBvcnQucG9pbnRlckV2ZW50cykge1xuICAgICAgICAgIGRlc2t0b3AgPSBbJ3BvaW50ZXJkb3duJywgJ3BvaW50ZXJtb3ZlJywgJ3BvaW50ZXJ1cCddO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpcGVyLnRvdWNoRXZlbnRzVG91Y2ggPSB7XG4gICAgICAgICAgc3RhcnQ6IHRvdWNoWzBdLFxuICAgICAgICAgIG1vdmU6IHRvdWNoWzFdLFxuICAgICAgICAgIGVuZDogdG91Y2hbMl0sXG4gICAgICAgICAgY2FuY2VsOiB0b3VjaFszXVxuICAgICAgICB9O1xuICAgICAgICBzd2lwZXIudG91Y2hFdmVudHNEZXNrdG9wID0ge1xuICAgICAgICAgIHN0YXJ0OiBkZXNrdG9wWzBdLFxuICAgICAgICAgIG1vdmU6IGRlc2t0b3BbMV0sXG4gICAgICAgICAgZW5kOiBkZXNrdG9wWzJdXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBzd2lwZXIuc3VwcG9ydC50b3VjaCB8fCAhc3dpcGVyLnBhcmFtcy5zaW11bGF0ZVRvdWNoID8gc3dpcGVyLnRvdWNoRXZlbnRzVG91Y2ggOiBzd2lwZXIudG91Y2hFdmVudHNEZXNrdG9wO1xuICAgICAgfSgpLFxuICAgICAgdG91Y2hFdmVudHNEYXRhOiB7XG4gICAgICAgIGlzVG91Y2hlZDogdW5kZWZpbmVkLFxuICAgICAgICBpc01vdmVkOiB1bmRlZmluZWQsXG4gICAgICAgIGFsbG93VG91Y2hDYWxsYmFja3M6IHVuZGVmaW5lZCxcbiAgICAgICAgdG91Y2hTdGFydFRpbWU6IHVuZGVmaW5lZCxcbiAgICAgICAgaXNTY3JvbGxpbmc6IHVuZGVmaW5lZCxcbiAgICAgICAgY3VycmVudFRyYW5zbGF0ZTogdW5kZWZpbmVkLFxuICAgICAgICBzdGFydFRyYW5zbGF0ZTogdW5kZWZpbmVkLFxuICAgICAgICBhbGxvd1RocmVzaG9sZE1vdmU6IHVuZGVmaW5lZCxcbiAgICAgICAgLy8gRm9ybSBlbGVtZW50cyB0byBtYXRjaFxuICAgICAgICBmb2N1c2FibGVFbGVtZW50czogc3dpcGVyLnBhcmFtcy5mb2N1c2FibGVFbGVtZW50cyxcbiAgICAgICAgLy8gTGFzdCBjbGljayB0aW1lXG4gICAgICAgIGxhc3RDbGlja1RpbWU6IG5vdygpLFxuICAgICAgICBjbGlja1RpbWVvdXQ6IHVuZGVmaW5lZCxcbiAgICAgICAgLy8gVmVsb2NpdGllc1xuICAgICAgICB2ZWxvY2l0aWVzOiBbXSxcbiAgICAgICAgYWxsb3dNb21lbnR1bUJvdW5jZTogdW5kZWZpbmVkLFxuICAgICAgICBpc1RvdWNoRXZlbnQ6IHVuZGVmaW5lZCxcbiAgICAgICAgc3RhcnRNb3Zpbmc6IHVuZGVmaW5lZFxuICAgICAgfSxcbiAgICAgIC8vIENsaWNrc1xuICAgICAgYWxsb3dDbGljazogdHJ1ZSxcbiAgICAgIC8vIFRvdWNoZXNcbiAgICAgIGFsbG93VG91Y2hNb3ZlOiBzd2lwZXIucGFyYW1zLmFsbG93VG91Y2hNb3ZlLFxuICAgICAgdG91Y2hlczoge1xuICAgICAgICBzdGFydFg6IDAsXG4gICAgICAgIHN0YXJ0WTogMCxcbiAgICAgICAgY3VycmVudFg6IDAsXG4gICAgICAgIGN1cnJlbnRZOiAwLFxuICAgICAgICBkaWZmOiAwXG4gICAgICB9LFxuICAgICAgLy8gSW1hZ2VzXG4gICAgICBpbWFnZXNUb0xvYWQ6IFtdLFxuICAgICAgaW1hZ2VzTG9hZGVkOiAwXG4gICAgfSk7IC8vIEluc3RhbGwgTW9kdWxlc1xuXG4gICAgc3dpcGVyLnVzZU1vZHVsZXMoKTtcbiAgICBzd2lwZXIuZW1pdCgnX3N3aXBlcicpOyAvLyBJbml0XG5cbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5pbml0KSB7XG4gICAgICBzd2lwZXIuaW5pdCgpO1xuICAgIH0gLy8gUmV0dXJuIGFwcCBpbnN0YW5jZVxuXG5cbiAgICByZXR1cm4gc3dpcGVyO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFN3aXBlci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmVuYWJsZSA9IGZ1bmN0aW9uIGVuYWJsZSgpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICBpZiAoc3dpcGVyLmVuYWJsZWQpIHJldHVybjtcbiAgICBzd2lwZXIuZW5hYmxlZCA9IHRydWU7XG5cbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5ncmFiQ3Vyc29yKSB7XG4gICAgICBzd2lwZXIuc2V0R3JhYkN1cnNvcigpO1xuICAgIH1cblxuICAgIHN3aXBlci5lbWl0KCdlbmFibGUnKTtcbiAgfTtcblxuICBfcHJvdG8uZGlzYWJsZSA9IGZ1bmN0aW9uIGRpc2FibGUoKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgaWYgKCFzd2lwZXIuZW5hYmxlZCkgcmV0dXJuO1xuICAgIHN3aXBlci5lbmFibGVkID0gZmFsc2U7XG5cbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5ncmFiQ3Vyc29yKSB7XG4gICAgICBzd2lwZXIudW5zZXRHcmFiQ3Vyc29yKCk7XG4gICAgfVxuXG4gICAgc3dpcGVyLmVtaXQoJ2Rpc2FibGUnKTtcbiAgfTtcblxuICBfcHJvdG8uc2V0UHJvZ3Jlc3MgPSBmdW5jdGlvbiBzZXRQcm9ncmVzcyhwcm9ncmVzcywgc3BlZWQpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICBwcm9ncmVzcyA9IE1hdGgubWluKE1hdGgubWF4KHByb2dyZXNzLCAwKSwgMSk7XG4gICAgdmFyIG1pbiA9IHN3aXBlci5taW5UcmFuc2xhdGUoKTtcbiAgICB2YXIgbWF4ID0gc3dpcGVyLm1heFRyYW5zbGF0ZSgpO1xuICAgIHZhciBjdXJyZW50ID0gKG1heCAtIG1pbikgKiBwcm9ncmVzcyArIG1pbjtcbiAgICBzd2lwZXIudHJhbnNsYXRlVG8oY3VycmVudCwgdHlwZW9mIHNwZWVkID09PSAndW5kZWZpbmVkJyA/IDAgOiBzcGVlZCk7XG4gICAgc3dpcGVyLnVwZGF0ZUFjdGl2ZUluZGV4KCk7XG4gICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgfTtcblxuICBfcHJvdG8uZW1pdENvbnRhaW5lckNsYXNzZXMgPSBmdW5jdGlvbiBlbWl0Q29udGFpbmVyQ2xhc3NlcygpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICBpZiAoIXN3aXBlci5wYXJhbXMuX2VtaXRDbGFzc2VzIHx8ICFzd2lwZXIuZWwpIHJldHVybjtcbiAgICB2YXIgY2xhc3NlcyA9IHN3aXBlci5lbC5jbGFzc05hbWUuc3BsaXQoJyAnKS5maWx0ZXIoZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xuICAgICAgcmV0dXJuIGNsYXNzTmFtZS5pbmRleE9mKCdzd2lwZXItY29udGFpbmVyJykgPT09IDAgfHwgY2xhc3NOYW1lLmluZGV4T2Yoc3dpcGVyLnBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzKSA9PT0gMDtcbiAgICB9KTtcbiAgICBzd2lwZXIuZW1pdCgnX2NvbnRhaW5lckNsYXNzZXMnLCBjbGFzc2VzLmpvaW4oJyAnKSk7XG4gIH07XG5cbiAgX3Byb3RvLmdldFNsaWRlQ2xhc3NlcyA9IGZ1bmN0aW9uIGdldFNsaWRlQ2xhc3NlcyhzbGlkZUVsKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgcmV0dXJuIHNsaWRlRWwuY2xhc3NOYW1lLnNwbGl0KCcgJykuZmlsdGVyKGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcbiAgICAgIHJldHVybi
118BjbGFzc05hbWUuaW5kZXhPZignc3dpcGVyLXNsaWRlJykgPT09IDAgfHwgY2xhc3NOYW1lLmluZGV4T2Yoc3dpcGVyLnBhcmFtcy5zbGlkZUNsYXNzKSA9PT0gMDtcbiAgICB9KS5qb2luKCcgJyk7XG4gIH07XG5cbiAgX3Byb3RvLmVtaXRTbGlkZXNDbGFzc2VzID0gZnVuY3Rpb24gZW1pdFNsaWRlc0NsYXNzZXMoKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgaWYgKCFzd2lwZXIucGFyYW1zLl9lbWl0Q2xhc3NlcyB8fCAhc3dpcGVyLmVsKSByZXR1cm47XG4gICAgdmFyIHVwZGF0ZXMgPSBbXTtcbiAgICBzd2lwZXIuc2xpZGVzLmVhY2goZnVuY3Rpb24gKHNsaWRlRWwpIHtcbiAgICAgIHZhciBjbGFzc05hbWVzID0gc3dpcGVyLmdldFNsaWRlQ2xhc3NlcyhzbGlkZUVsKTtcbiAgICAgIHVwZGF0ZXMucHVzaCh7XG4gICAgICAgIHNsaWRlRWw6IHNsaWRlRWwsXG4gICAgICAgIGNsYXNzTmFtZXM6IGNsYXNzTmFtZXNcbiAgICAgIH0pO1xuICAgICAgc3dpcGVyLmVtaXQoJ19zbGlkZUNsYXNzJywgc2xpZGVFbCwgY2xhc3NOYW1lcyk7XG4gICAgfSk7XG4gICAgc3dpcGVyLmVtaXQoJ19zbGlkZUNsYXNzZXMnLCB1cGRhdGVzKTtcbiAgfTtcblxuICBfcHJvdG8uc2xpZGVzUGVyVmlld0R5bmFtaWMgPSBmdW5jdGlvbiBzbGlkZXNQZXJWaWV3RHluYW1pYygpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcyxcbiAgICAgICAgc2xpZGVzID0gc3dpcGVyLnNsaWRlcyxcbiAgICAgICAgc2xpZGVzR3JpZCA9IHN3aXBlci5zbGlkZXNHcmlkLFxuICAgICAgICBzd2lwZXJTaXplID0gc3dpcGVyLnNpemUsXG4gICAgICAgIGFjdGl2ZUluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4O1xuICAgIHZhciBzcHYgPSAxO1xuXG4gICAgaWYgKHBhcmFtcy5jZW50ZXJlZFNsaWRlcykge1xuICAgICAgdmFyIHNsaWRlU2l6ZSA9IHNsaWRlc1thY3RpdmVJbmRleF0uc3dpcGVyU2xpZGVTaXplO1xuICAgICAgdmFyIGJyZWFrTG9vcDtcblxuICAgICAgZm9yICh2YXIgaSA9IGFjdGl2ZUluZGV4ICsgMTsgaSA8IHNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAoc2xpZGVzW2ldICYmICFicmVha0xvb3ApIHtcbiAgICAgICAgICBzbGlkZVNpemUgKz0gc2xpZGVzW2ldLnN3aXBlclNsaWRlU2l6ZTtcbiAgICAgICAgICBzcHYgKz0gMTtcbiAgICAgICAgICBpZiAoc2xpZGVTaXplID4gc3dpcGVyU2l6ZSkgYnJlYWtMb29wID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBfaSA9IGFjdGl2ZUluZGV4IC0gMTsgX2kgPj0gMDsgX2kgLT0gMSkge1xuICAgICAgICBpZiAoc2xpZGVzW19pXSAmJiAhYnJlYWtMb29wKSB7XG4gICAgICAgICAgc2xpZGVTaXplICs9IHNsaWRlc1tfaV0uc3dpcGVyU2xpZGVTaXplO1xuICAgICAgICAgIHNwdiArPSAxO1xuICAgICAgICAgIGlmIChzbGlkZVNpemUgPiBzd2lwZXJTaXplKSBicmVha0xvb3AgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIF9pMiA9IGFjdGl2ZUluZGV4ICsgMTsgX2kyIDwgc2xpZGVzLmxlbmd0aDsgX2kyICs9IDEpIHtcbiAgICAgICAgaWYgKHNsaWRlc0dyaWRbX2kyXSAtIHNsaWRlc0dyaWRbYWN0aXZlSW5kZXhdIDwgc3dpcGVyU2l6ZSkge1xuICAgICAgICAgIHNwdiArPSAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNwdjtcbiAgfTtcblxuICBfcHJvdG8udXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQpIHJldHVybjtcbiAgICB2YXIgc25hcEdyaWQgPSBzd2lwZXIuc25hcEdyaWQsXG4gICAgICAgIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7IC8vIEJyZWFrcG9pbnRzXG5cbiAgICBpZiAocGFyYW1zLmJyZWFrcG9pbnRzKSB7XG4gICAgICBzd2lwZXIuc2V0QnJlYWtwb2ludCgpO1xuICAgIH1cblxuICAgIHN3aXBlci51cGRhdGVTaXplKCk7XG4gICAgc3dpcGVyLnVwZGF0ZVNsaWRlcygpO1xuICAgIHN3aXBlci51cGRhdGVQcm9ncmVzcygpO1xuICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG5cbiAgICBmdW5jdGlvbiBzZXRUcmFuc2xhdGUoKSB7XG4gICAgICB2Y
118XIgdHJhbnNsYXRlVmFsdWUgPSBzd2lwZXIucnRsVHJhbnNsYXRlID8gc3dpcGVyLnRyYW5zbGF0ZSAqIC0xIDogc3dpcGVyLnRyYW5zbGF0ZTtcbiAgICAgIHZhciBuZXdUcmFuc2xhdGUgPSBNYXRoLm1pbihNYXRoLm1heCh0cmFuc2xhdGVWYWx1ZSwgc3dpcGVyLm1heFRyYW5zbGF0ZSgpKSwgc3dpcGVyLm1pblRyYW5zbGF0ZSgpKTtcbiAgICAgIHN3aXBlci5zZXRUcmFuc2xhdGUobmV3VHJhbnNsYXRlKTtcbiAgICAgIHN3aXBlci51cGRhdGVBY3RpdmVJbmRleCgpO1xuICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgICB9XG5cbiAgICB2YXIgdHJhbnNsYXRlZDtcblxuICAgIGlmIChzd2lwZXIucGFyYW1zLmZyZWVNb2RlKSB7XG4gICAgICBzZXRUcmFuc2xhdGUoKTtcblxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuYXV0b0hlaWdodCkge1xuICAgICAgICBzd2lwZXIudXBkYXRlQXV0b0hlaWdodCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoKHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyVmlldyA9PT0gJ2F1dG8nIHx8IHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyVmlldyA+IDEpICYmIHN3aXBlci5pc0VuZCAmJiAhc3dpcGVyLnBhcmFtcy5jZW50ZXJlZFNsaWRlcykge1xuICAgICAgICB0cmFuc2xhdGVkID0gc3dpcGVyLnNsaWRlVG8oc3dpcGVyLnNsaWRlcy5sZW5ndGggLSAxLCAwLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cmFuc2xhdGVkID0gc3dpcGVyLnNsaWRlVG8oc3dpcGVyLmFjdGl2ZUluZGV4LCAwLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdHJhbnNsYXRlZCkge1xuICAgICAgICBzZXRUcmFuc2xhdGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLndhdGNoT3ZlcmZsb3cgJiYgc25hcEdyaWQgIT09I
118HN3aXBlci5zbmFwR3JpZCkge1xuICAgICAgc3dpcGVyLmNoZWNrT3ZlcmZsb3coKTtcbiAgICB9XG5cbiAgICBzd2lwZXIuZW1pdCgndXBkYXRlJyk7XG4gIH07XG5cbiAgX3Byb3RvLmNoYW5nZURpcmVjdGlvbiA9IGZ1bmN0aW9uIGNoYW5nZURpcmVjdGlvbihuZXdEaXJlY3Rpb24sIG5lZWRVcGRhdGUpIHtcbiAgICBpZiAobmVlZFVwZGF0ZSA9PT0gdm9pZCAwKSB7XG4gICAgICBuZWVkVXBkYXRlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgY3VycmVudERpcmVjdGlvbiA9IHN3aXBlci5wYXJhbXMuZGlyZWN0aW9uO1xuXG4gICAgaWYgKCFuZXdEaXJlY3Rpb24pIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgbmV3RGlyZWN0aW9uID0gY3VycmVudERpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnID8gJ3ZlcnRpY2FsJyA6ICdob3Jpem9udGFsJztcbiAgICB9XG5cbiAgICBpZiAobmV3RGlyZWN0aW9uID09PSBjdXJyZW50RGlyZWN0aW9uIHx8IG5ld0RpcmVjdGlvbiAhPT0gJ2hvcml6b250YWwnICYmIG5ld0RpcmVjdGlvbiAhPT0gJ3ZlcnRpY2FsJykge1xuICAgICAgcmV0dXJuIHN3aXBlcjtcbiAgICB9XG5cbiAgICBzd2lwZXIuJGVsLnJlbW92ZUNsYXNzKFwiXCIgKyBzd2lwZXIucGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3MgKyBjdXJyZW50RGlyZWN0aW9uKS5hZGRDbGFzcyhcIlwiICsgc3dpcGVyLnBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzICsgbmV3RGlyZWN0aW9uKTtcbiAgICBzd2lwZXIuZW1pdENvbnRhaW5lckNsYXNzZXMoKTtcbiAgICBzd2lwZXIucGFyYW1zLmRpcmVjdGlvbiA9IG5ld0RpcmVjdGlvbjtcbiAgICBzd2lwZXIuc2xpZGVzLmVhY2goZnVuY3Rpb24gKHNsaWRlRWwpIHtcbiAgICAgIGlmIChuZXdEaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCcpIHtcbiAgICAgICAgc2xpZGVFbC5zdHlsZS53aWR0aCA9ICcnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2xpZGVFbC5zdHlsZS5oZWlnaHQgPSAnJztcbiAgICAgIH1cbiAgICB9KTtcbiAgICBzd2lwZXIuZW1pdCgnY2hhbmdlRGlyZWN0aW9uJyk7XG4gICAgaWYgKG5lZWRVcGRhdGUpIHN3aXBlci51cGRhdGUoKTtcbiAgICByZXR1cm4gc3dpcGVyO1xuICB9O1xuXG4gIF9wcm90by5tb3VudCA9IGZ1bmN0aW9uIG1vdW50KGVsKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgaWYgKHN3aXBlci5tb3VudGVkKSByZXR1cm4gdHJ1ZTsgLy8gRmluZCBlbFxuXG4gICAgdmFyICRlbCA9ICQoZWwgfHwgc3dpcGVyLnBhcmFtcy5lbCk7XG4gICAgZWwgPSAkZWxbMF07XG5cbiAgICBpZiAoIWVsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZWwuc3dpcGVyID0gc3dpcGVyO1xuXG4gICAgdmFyIGdldFdyYXBwZXJTZWxlY3RvciA9IGZ1bmN0aW9uIGdldFdyYXBwZXJTZWxlY3RvcigpIHtcbiAgICAgIHJldHVybiBcIi5cIiArIChzd2lwZXIucGFyYW1zLndyYXBwZXJDbGFzcyB8fCAnJykudHJpbSgpLnNwbGl0KCcgJykuam9pbignLicpO1xuICAgIH07XG5cbiAgICB2YXIgZ2V0V3JhcHBlciA9IGZ1bmN0aW9uIGdldFdyYXBwZXIoKSB7XG4gICAgICBpZiAoZWwgJiYgZWwuc2hhZG93Um9vdCAmJiBlbC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IpIHtcbiAgICAgICAgdmFyIHJlcyA9ICQoZWwuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKGdldFdyYXBwZXJTZWxlY3RvcigpKSk7IC8vIENoaWxkcmVuIG5lZWRzIHRvIHJldHVybiBzbG90IGl0ZW1zXG5cbiAgICAgICAgcmVzLmNoaWxkcmVuID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgICByZXR1cm4gJGVsLmNoaWxkcmVuKG9wdGlvbnMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAkZWwuY2hpbGRyZW4oZ2V0V3JhcHBlclNlbGVjdG9yKCkpO1xuICAgIH07IC8vIEZpbmQgV3JhcHBlclxuXG5cbiAgICB2YXIgJHdyYXBwZXJFbCA9IGdldFdyYXBwZXIoKTtcblxuICAgIGlmICgkd3JhcHBlckVsLmxlbmd0aCA9PT0gMCAmJiBzd2lwZXIucGFyYW1zLmNyZWF0ZUVsZW1lbnRzKSB7XG4gICAgICB2Y
118XIgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICAgICAgdmFyIHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICR3cmFwcGVyRWwgPSAkKHdyYXBwZXIpO1xuICAgICAgd3JhcHBlci5jbGFzc05hbWUgPSBzd2lwZXIucGFyYW1zLndyYXBwZXJDbGFzcztcbiAgICAgICRlbC5hcHBlbmQod3JhcHBlcik7XG4gICAgICAkZWwuY2hpbGRyZW4oXCIuXCIgKyBzd2lwZXIucGFyYW1zLnNsaWRlQ2xhc3MpLmVhY2goZnVuY3Rpb24gKHNsaWRlRWwpIHtcbiAgICAgICAgJHdyYXBwZXJFbC5hcHBlbmQoc2xpZGVFbCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBleHRlbmQoc3dpcGVyLCB7XG4gICAgICAkZWw6ICRlbCxcbiAgICAgIGVsOiBlbCxcbiAgICAgICR3cmFwcGVyRWw6ICR3cmFwcGVyRWwsXG4gICAgICB3cmFwcGVyRWw6ICR3cmFwcGVyRWxbMF0sXG4gICAgICBtb3VudGVkOiB0cnVlLFxuICAgICAgLy8gUlRMXG4gICAgICBydGw6IGVsLmRpci50b0xvd2VyQ2FzZSgpID09PSAncnRsJyB8fCAkZWwuY3NzKCdkaXJlY3Rpb24nKSA9PT0gJ3J0bCcsXG4gICAgICBydGxUcmFuc2xhdGU6IHN3aXBlci5wYXJhbXMuZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgJiYgKGVsLmRpci50b0xvd2VyQ2FzZSgpID09PSAncnRsJyB8fCAkZWwuY3NzKCdkaXJlY3Rpb24nKSA9PT0gJ3J0bCcpLFxuICAgICAgd3JvbmdSVEw6ICR3cmFwcGVyRWwuY3NzKCdkaXNwbGF5JykgPT09ICctd2Via2l0LWJveCdcbiAgICB9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICBfcHJvdG8uaW5pdCA9IGZ1bmN0aW9uIGluaXQoZWwpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICBpZiAoc3dpcGVyLmluaXRpYWxpemVkKSByZXR1cm4gc3dpcGVyO1xuICAgIHZhciBtb3VudGVkID0gc3dpcGVyLm1vdW50KGVsKTtcbiAgICBpZiAobW91bnRlZCA9PT0gZmFsc2UpIHJldHVybiBzd2lwZXI7XG4gICAgc3dpcGVyLmVtaXQoJ2JlZm9yZUluaXQnKTsgLy8gU2V0IGJyZWFrcG9pbnRcblxuICAgIGlmIChzd2lwZXIucGFyYW1zLmJyZWFrcG9pbnRzKSB7XG4gICAgICBzd2lwZXIuc2V0QnJlYWtwb2ludCgpO1xuICAgIH0gLy8gQWRkIENsYXNzZXNcblxuXG4gICAgc3dpcGVyLmFkZENsYXNzZXMoKT
118sgLy8gQ3JlYXRlIGxvb3BcblxuICAgIGlmIChzd2lwZXIucGFyYW1zLmxvb3ApIHtcbiAgICAgIHN3aXBlci5sb29wQ3JlYXRlKCk7XG4gICAgfSAvLyBVcGRhdGUgc2l6ZVxuXG5cbiAgICBzd2lwZXIudXBkYXRlU2l6ZSgpOyAvLyBVcGRhdGUgc2xpZGVzXG5cbiAgICBzd2lwZXIudXBkYXRlU2xpZGVzKCk7XG5cbiAgICBpZiAoc3dpcGVyLnBhcmFtcy53YXRjaE92ZXJmbG93KSB7XG4gICAgICBzd2lwZXIuY2hlY2tPdmVyZmxvdygpO1xuICAgIH0gLy8gU2V0IEdyYWIgQ3Vyc29yXG5cblxuICAgIGlmIChzd2lwZXIucGFyYW1zLmdyYWJDdXJzb3IgJiYgc3dpcGVyLmVuYWJsZWQpIHtcbiAgICAgIHN3aXBlci5zZXRHcmFiQ3Vyc29yKCk7XG4gICAgfVxuXG4gICAgaWYgKHN3aXBlci5wYXJhbXMucHJlbG9hZEltYWdlcykge1xuICAgICAgc3dpcGVyLnByZWxvYWRJbWFnZXMoKTtcbiAgICB9IC8vIFNsaWRlIFRvIEluaXRpYWwgU2xpZGVcblxuXG4gICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgc3dpcGVyLnNsaWRlVG8oc3dpcGVyLnBhcmFtcy5pbml0aWFsU2xpZGUgKyBzd2lwZXIubG9vcGVkU2xpZGVzLCAwLCBzd2lwZXIucGFyYW1zLnJ1bkNhbGxiYWNrc09uSW5pdCwgZmFsc2UsIHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzd2lwZXIuc2xpZGVUbyhzd2lwZXIucGFyYW1zLmluaXRpYWxTbGlkZSwgMCwgc3dpcGVyLnBhcmFtcy5ydW5DYWxsYmFja3NPbkluaXQsIGZhbHNlLCB0cnVlKTtcbiAgICB9IC8vIEF0dGFjaCBldmVudHNcblxuXG4gICAgc3dpcGVyLmF0dGFjaEV2ZW50cygpOyAvLyBJbml0IEZsYWdcblxuICAgIHN3aXBlci5pbml0aWFsaXplZCA9IHRydWU7IC8vIEVtaXRcblxuICAgI
118HN3aXBlci5lbWl0KCdpbml0Jyk7XG4gICAgc3dpcGVyLmVtaXQoJ2FmdGVySW5pdCcpO1xuICAgIHJldHVybiBzd2lwZXI7XG4gIH07XG5cbiAgX3Byb3RvLmRlc3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95KGRlbGV0ZUluc3RhbmNlLCBjbGVhblN0eWxlcykge1xuICAgIGlmIChkZWxldGVJbnN0YW5jZSA9PT0gdm9pZCAwKSB7XG4gICAgICBkZWxldGVJbnN0YW5jZSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGNsZWFuU3R5bGVzID09PSB2b2lkIDApIHtcbiAgICAgIGNsZWFuU3R5bGVzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcyxcbiAgICAgICAgJGVsID0gc3dpcGVyLiRlbCxcbiAgICAgICAgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsLFxuICAgICAgICBzbGlkZXMgPSBzd2lwZXIuc2xpZGVzO1xuXG4gICAgaWYgKHR5cGVvZiBzd2lwZXIucGFyYW1zID09PSAndW5kZWZpbmVkJyB8fCBzd2lwZXIuZGVzdHJveWVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBzd2lwZXIuZW1pdCgnYmVmb3JlRGVzdHJveScpOyAvLyBJbml0IEZsYWdcblxuICAgIHN3aXBlci5pbml0aWFsaXplZCA9IGZhbHNlOyAvLyBEZXRhY2ggZXZlbnRzXG5cbiAgICBzd2lwZXIuZGV0YWNoRXZlbnRzKCk7IC8vIERlc3Ryb3kgbG9vcFxuXG4gICAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgICBzd2lwZXIubG9vcERlc3Ryb3koKTtcbiAgICB9IC8vIENsZWFudXAgc3R5bGVzXG5cblxuICAgIGlmIChjbGVhblN0eWxlcykge1xuICAgICAgc3dpcGVyLnJlbW92ZUNsYXNzZXMoKTtcbiAgICAgICRlbC5yZW1vdmVBdHRyKCdzdHlsZScpO1xuICAgICAgJHdyYXBwZXJFbC5yZW1vdmVBdHRyKCdzdHlsZScpO1xuXG4gICAgICBpZiAoc2xpZGVzICYmIHNsaWRlcy5sZW5ndGgpIHtcbiAgICAgICAgc2xpZGVzLnJlbW92ZUNsYXNzKFtwYXJhbXMuc2xpZGVWaXNpYmxlQ2xhc3MsIHBhcmFtcy5zbGlkZUFjdGl2ZUNsYXNzLCBwYXJhbXMuc2xpZGVOZXh0Q2xhc3MsIHBhcmFtcy5zbGlkZVByZXZDbGFzc10uam9pbignICcpKS5yZW1vdmVBdHRyKCdzdHlsZScpLnJlbW92ZUF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpcGVyLmVtaXQoJ2Rlc3Ryb3knKTsgLy8gRGV0YWNoIGVtaXR0ZXIgZXZlbnRzXG5cbiAgICBPYmplY3Qua2V5cyhzd2lwZXIuZXZlbnRzTGlzdGVuZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudE5hbWUpIHtcbiAgICAgIHN3aXBlci5vZmYoZXZlbnROYW1lKTtcbiAgICB9KTtcblxuICAgIGlmIChkZWxldGVJbnN0YW5jZSAhPT0gZmFsc2UpIHtcbiAgICAgIHN3aXBlci4kZWxbMF0uc3dpcGVyID0gbnVsbDtcbiAgICAgIGRlbGV0ZVByb3BzKHN3aXBlcik7XG4gICAgfVxuXG4gICAgc3dpcGVyLmRlc3Ryb3llZCA9IHRydWU7XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgU3dpcGVyLmV4dGVuZERlZmF1bHRzID0gZnVuY3Rpb24gZXh0ZW5kRGVmYXVsdHMobmV3RGVmYXVsdHMpIHtcbiAgICBleHRlbmQoZXh0ZW5kZWREZWZhdWx0cywgbmV3RGVmYXVsdHMpO1xuICB9O1xuXG4gIFN3aXBlci5pbnN0YWxsTW9kdWxlID0gZnVuY3Rpb24gaW5zdGFsbE1vZHVsZShtb2R1bGUpIHtcbiAgICBpZiAoIVN3aXBlci5wcm90b3R5cGUubW9kdWxlcykgU3dpcGVyLnByb3RvdHlwZS5tb2R1bGVzID0ge307XG4gICAgdmFyIG5hbWUgPSBtb2R1bGUubmFtZSB8fCBPYmplY3Qua2V5cyhTd2lwZXIucHJvdG90eXBlLm1vZHVsZXMpLmxlbmd0aCArIFwiX1wiICsgbm93KCk7XG4gICAgU3dpcGVyLnByb3RvdHlwZS5tb2R1bGVzW25hbWVdID0gbW9kdWxlO1xuICB9O1xuXG4gIFN3aXBlci51c2UgPSBmdW5jdGlvbiB1c2UobW9kdWxlKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobW9kdWxlKSkge1xuICAgICAgbW9kdWxlLmZvckVhY2goZnVuY3Rpb24gKG
1180pIHtcbiAgICAgICAgcmV0dXJuIFN3aXBlci5pbnN0YWxsTW9kdWxlKG0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gU3dpcGVyO1xuICAgIH1cblxuICAgIFN3aXBlci5pbnN0YWxsTW9kdWxlKG1vZHVsZSk7XG4gICAgcmV0dXJuIFN3aXBlcjtcbiAgfTtcblxuICBfY3JlYXRlQ2xhc3MoU3dpcGVyLCBudWxsLCBbe1xuICAgIGtleTogXCJleHRlbmRlZERlZmF1bHRzXCIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gZXh0ZW5kZWREZWZhdWx0cztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZGVmYXVsdHNcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0cztcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3dpcGVyO1xufSgpO1xuXG5PYmplY3Qua2V5cyhwcm90b3R5cGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm90b3R5cGVHcm91cCkge1xuICBPYmplY3Qua2V5cyhwcm90b3R5cGVzW3Byb3RvdHlwZUdyb3VwXSkuZm9yRWFjaChmdW5jdGlvbiAocHJvdG9NZXRob2QpIHtcbiAgICBTd2lwZXIucHJvdG90eXBlW3Byb3RvTWV0aG9kXSA9IHByb3RvdHlwZXNbcHJvdG90eXBlR3JvdXBdW3Byb3RvTWV0aG9kXTtcbiAgfSk7XG59KTtcblN3aXBlci51c2UoW1Jlc2l6ZSwgT2JzZXJ2ZXJdKTtcbmV4cG9ydCBkZWZhdWx0IFN3aXBlcjsiLCJpbXBvcnQgeyBleHRlbmQgfSBmcm9tICcuLi8uLi91dGlscy91dGlscyc7XG5leHBvcnQgZGVmYXVsdCB7XG4gIHVzZVBhcmFtczogZnVuY3Rpb24gdXNlUGFyYW1zKGluc3RhbmNlUGFyYW1zKSB7XG4gICAgdmFyIGluc3RhbmNlID0gdGhpcztcbiAgICBpZiAoIWluc3RhbmNlLm1vZHVsZXMpIHJldHVybjtcbiAgICBPYmplY3Qua2V5cyhpbnN0YW5jZS5tb2R1bGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChtb2R1bGVOYW1lKSB7XG4gICAgICB2Y
118XIgbW9kdWxlID0gaW5zdGFuY2UubW9kdWxlc1ttb2R1bGVOYW1lXTsgLy8gRXh0ZW5kIHBhcmFtc1xuXG4gICAgICBpZiAobW9kdWxlLnBhcmFtcykge1xuICAgICAgICBleHRlbmQoaW5zdGFuY2VQYXJhbXMsIG1vZHVsZS5wYXJhbXMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LFxuICB1c2VNb2R1bGVzOiBmdW5jdGlvbiB1c2VNb2R1bGVzKG1vZHVsZXNQYXJhbXMpIHtcbiAgICBpZiAobW9kdWxlc1BhcmFtcyA9PT0gdm9pZCAwKSB7XG4gICAgICBtb2R1bGVzUGFyYW1zID0ge307XG4gICAgfVxuXG4gICAgdmFyIGluc3RhbmNlID0gdGhpcztcbiAgICBpZiAoIWluc3RhbmNlLm1vZHVsZXMpIHJldHVybjtcbiAgICBPYmplY3Qua2V5cyhpbnN0YW5jZS5tb2R1bGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChtb2R1bGVOYW1lKSB7XG4gICAgICB2YXIgbW9kdWxlID0gaW5zdGFuY2UubW9kdWxlc1ttb2R1bGVOYW1lXTtcbiAgICAgIHZhciBtb2R1bGVQYXJhbXMgPSBtb2R1bGVzUGFyYW1zW21vZHVsZU5hbWVdIHx8IHt9OyAvLyBBZGQgZXZlbnQgbGlzdGVuZXJzXG5cbiAgICAgIGlmIChtb2R1bGUub24gJiYgaW5zdGFuY2Uub24pIHtcbiAgICAgICAgT2JqZWN0LmtleXMobW9kdWxlLm9uKS5mb3JFYWNoKGZ1bmN0aW9uIChtb2R1bGVFdmVudE5hbWUpIHtcbiAgICAgICAgICBpbnN0YW5jZS5vbihtb2R1bGVFdmVudE5hbWUsIG1vZHVsZS5vblttb2R1bGVFdmVudE5hbWVdKTtcbiAgICAgICAgfSk7XG4gICAgICB9IC8vIE1vZHVsZSBjcmVhdGUgY2FsbGJhY2tcblxuXG4gICAgICBpZiAobW9kdWxlLmNyZWF0ZSkge1xuICAgICAgICBtb2R1bGUuY3JlYXRlLmJpbmQoaW5zdGFuY2UpKG1vZHVsZVBhcmFtcyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn07IiwiaW1wb3J0IHNldFRyYW5zaXRpb24gZnJvbSAnLi9zZXRUcmFuc2l0aW9uJztcbmltcG9ydCB0cmFuc2l0aW9uU3RhcnQgZnJvbSAnLi90cmFuc2l0aW9uU3RhcnQnO1xuaW1wb3J0IHRyYW5zaXRpb25FbmQgZnJvbSAnLi90cmFuc2l0aW9uRW5kJztcbmV4cG9ydCBkZWZhdWx0IHtcbiAgc2V0VHJhbnNpdGlvbjogc2V0VHJhbnNpdGlvbixcbiAgdHJhbnNpdGlvblN0YXJ0OiB0cmFuc2l0aW9uU3RhcnQsXG4gIHRyYW5zaXRpb25FbmQ6IHRyYW5zaXRpb25FbmRcbn07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2V0VHJhbnNpdGlvbihkdXJhdGlvbiwgYnlDb250cm9sbGVyKSB7XG4gIHZhciBzd2lwZXIgPSB0aGlzO1xuXG4gIGlmICghc3dpcGVyLnBhcmFtcy5jc3NNb2RlKSB7XG4gICAgc3dpcGVyLiR3cmFwcGVyRWwudHJhbnNpdGlvbihkdXJhdGlvbik7XG4gIH1cblxuICBzd2lwZXIuZW1pdCgnc2V0VHJhbnNpdGlvbicsIGR1cmF0aW9uLCBieUNvbnRyb2xsZXIpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRyYW5zaXRpb25TdGFydChydW5DYWxsYmFja3MsIGRpcmVjdGlvbikge1xuICBpZiAocnVuQ2FsbGJhY2tzID09PSB2b2lkIDApIHtcbiAgICBydW5DYWxsYmFja3MgPSB0cnVlO1xuICB9XG5cbiAgdmFyIHN3aXBlciA9IHRoaXM7XG4gIHZhciBhY3RpdmVJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleCxcbiAgICAgIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMsXG4gICAgICBwcmV2aW91c0luZGV4ID0gc3dpcGVyLnByZXZpb3VzSW5kZXg7XG4gIGlmIChwYXJhbXMuY3NzTW9kZSkgcmV0dXJuO1xuXG4gIGlmIChwYXJhbXMuYXV0b0hlaWdodCkge1xuICAgIHN3aXBlci51cGRhdGVBdXRvSGVpZ2h0KCk7XG4gIH1cblxuICB2YXIgZGlyID0gZGlyZWN0aW9uO1xuXG4gIGlmICghZGlyKSB7XG4gICAgaWYgKGFjdGl2ZUluZGV4ID4gcHJldmlvdXNJbmRleCkgZGlyID0gJ25leHQnO2Vsc2UgaWYgKGFjdGl2ZUluZGV4IDwgcHJldmlvdXNJbmRleCkgZGlyID0gJ3ByZXYnO2Vsc2UgZGlyID0gJ3Jlc2V0JztcbiAgfVxuXG4gIHN3aXBlci5lbWl0KCd0cmFuc2l0aW9uU3RhcnQnKTtcblxuICBpZiAocnVuQ2FsbGJhY2tzICYmIGFjdGl2ZUluZGV4ICE9PSBwcmV2aW91c0luZGV4KSB7XG4gICAgaWYgKGRpciA9PT0gJ3Jlc2V0Jykge1xuICAgICAgc3dpcGVyLmVtaXQoJ3NsaWRlUmVzZXRUcmFuc2l0aW9uU3RhcnQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzd2lwZXIuZW1pdCgnc2xpZGVDaGFuZ2VUcmFuc2l0aW9uU3RhcnQnKTtcblxuICAgIGlmIChkaXIgPT09ICduZXh0Jykge1xuICAgICAgc3dpcGVyLmVtaXQoJ3NsaWRlTmV4dFRyYW5zaXRpb25TdGFydCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzd2lwZXIuZW1pdCgnc2xpZGVQcmV2VHJhbnNpdGlvblN0YXJ0Jyk7XG4gICAgfVxuICB9XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJhbnNpdGlvbkVuZChydW5DYWxsYmFja3MsIGRpcmVjdGlvbikge1xuICBpZiAocnVuQ2FsbGJhY2tzID09PSB2b2lkIDApIHtcbiAgICBydW5DYWxsYmFja3MgPSB0cnVlO1xuICB9XG5cbiAgdmFyIHN3aXBlciA9IHRoaXM7XG4gIHZhciBhY3RpdmVJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleCxcbiAgICAgIHByZXZpb3VzSW5kZXggPSBzd2lwZXIucHJldmlvdXNJbmRleCxcbiAgICAgIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gIHN3aXBlci5hbmltYXRpbmcgPSBmYWxzZTtcbiAgaWYgKHBhcmFtcy5jc3NNb2RlKSByZXR1cm47XG4gIHN3aXBlci5zZXRUcmFuc2l0aW9uKDApO1xuICB2YXIgZGlyID0gZGlyZWN0aW9uO1xuXG4gIGlmICghZGlyKSB7XG4gICAgaWYgKGFjdGl2ZUluZGV4ID4gcHJldmlvdXNJbmRleCkgZGlyID0gJ25leHQnO2Vsc2UgaWYgKGFjdGl2ZUluZGV4IDwgcHJldmlvdXNJbmRleCkgZGlyID0gJ3ByZXYnO2Vsc2UgZGlyID0gJ3Jlc2V0JztcbiAgfVxuXG4gIHN3aXBlci5lbWl0KCd0cmFuc2l0aW9uRW5kJyk7XG5cbiAgaWYgKHJ1bkNhbGxiYWNrcyAmJiBhY3RpdmVJbmRleCAhPT0gcHJldmlvdXNJbmRleCkge1xuICAgIGlmIChkaXIgPT09ICdyZXNldCcpIHtcbiAgICAgIHN3aXBlci5lbWl0KCdzbGlkZVJlc2V0VHJhbnNpdGlvbkVuZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN3aXBlci5lbWl0KCdzbGlkZUNoYW5nZVRyYW5zaXRpb25FbmQnKTtcblxuICAgIGlmIChkaXIgPT09ICduZXh0Jykge1xuICAgICAgc3dpcGVyLmVtaXQoJ3NsaWRlTmV4dFRyYW5zaXRpb25FbmQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3dpcGVyLmVtaXQoJ3NsaWRlUHJldlRyYW5zaXRpb25FbmQnKTtcbiAgICB9XG4gI
118H1cbn0iLCJpbXBvcnQgc2V0R3JhYkN1cnNvciBmcm9tICcuL3NldEdyYWJDdXJzb3InO1xuaW1wb3J0IHVuc2V0R3JhYkN1cnNvciBmcm9tICcuL3Vuc2V0R3JhYkN1cnNvcic7XG5leHBvcnQgZGVmYXVsdCB7XG4gIHNldEdyYWJDdXJzb3I6IHNldEdyYWJDdXJzb3IsXG4gIHVuc2V0R3JhYkN1cnNvcjogdW5zZXRHcmFiQ3Vyc29yXG59OyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNldEdyYWJDdXJzb3IobW92aW5nKSB7XG4gIHZhciBzd2lwZXIgPSB0aGlzO1xuICBpZiAoc3dpcGVyLnN1cHBvcnQudG91Y2ggfHwgIXN3aXBlci5wYXJhbXMuc2ltdWxhdGVUb3VjaCB8fCBzd2lwZXIucGFyYW1zLndhdGNoT3ZlcmZsb3cgJiYgc3dpcGVyLmlzTG9ja2VkIHx8IHN3aXBlci5wYXJhbXMuY3NzTW9kZSkgcmV0dXJuO1xuICB2YXIgZWwgPSBzd2lwZXIuZWw7XG4gIGVsLnN0eWxlLmN1cnNvciA9ICdtb3ZlJztcbiAgZWwuc3R5bGUuY3Vyc29yID0gbW92aW5nID8gJy13ZWJraXQtZ3JhYmJpbmcnIDogJy13ZWJraXQtZ3JhYic7XG4gIGVsLnN0eWxlLmN1cnNvciA9IG1vdmluZyA/ICctbW96LWdyYWJiaW4nIDogJy1tb3otZ3JhYic7XG4gIGVsLnN0eWxlLmN1cnNvciA9IG1vdmluZyA/ICdncmFiYmluZycgOiAnZ3JhYic7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdW5zZXRHcmFiQ3Vyc29yKCkge1xuICB2YXIgc3dpcGVyID0gdGhpcztcblxuICBpZiAoc3dpcGVyLnN1cHBvcnQudG91Y2ggfHwgc3dpcGVyLnBhcmFtcy53YXRjaE92ZXJmbG93ICYmIHN3aXBlci5pc0xvY2tlZCB8fCBzd2lwZXIucGFyYW1zLmNzc01vZGUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBzd2lwZXIuZWwuc3R5bGUuY3Vyc29yID0gJyc7XG59IiwiaW1wb3J0IHNldEJyZWFrcG9pbnQgZnJvbSAnLi9zZXRCcmVha3BvaW50JztcbmltcG9ydCBnZXRCcmVha3BvaW50IGZyb20gJy4vZ2V0QnJlYWtwb2ludCc7XG5leHBvcnQgZGVmYXVsdCB7XG4gIHNldEJyZWFrcG9pbnQ6IHNldEJyZWFrcG9pbnQsXG4gIGdldEJyZWFrcG9pbnQ6IGdldEJyZWFrcG9pbnRcbn07IiwiaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2V0QnJlYWtwb2ludCgpIHtcbiAgdmFyIHN3aXBlciA9IHRoaXM7XG4gIHZhciBhY3RpdmVJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleCxcbiAgICAgIGluaXRpYWxpemVkID0gc3dpcGVyLmluaXRpYWxpemVkLFxuICAgICAgX3N3aXBlciRsb29wZWRTbGlkZXMgPSBzd2lwZXIubG9vcGVkU2xpZGVzLFxuICAgICAgbG9vcGVkU2xpZGVzID0gX3N3aXBlciRsb29wZWRTbGlkZXMgPT09IHZvaWQgMCA/IDAgOiBfc3dpcGVyJGxvb3BlZFNsaWRlcyxcbiAgICAgIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMsXG4gICAgICAkZWwgPSBzd2lwZXIuJGVsO1xuICB2YXIgYnJlYWtwb2ludHMgPSBwYXJhbXMuYnJlYWtwb2ludHM7XG4gIGlmICghYnJlYWtwb2ludHMgfHwgYnJlYWtwb2ludHMgJiYgT2JqZWN0LmtleXMoYnJlYWtwb2ludHMpLmxlbmd0aCA9PT0gMCkgcmV0dXJuOyAvLyBHZXQgYnJlYWtwb2ludCBmb3Igd2luZG93IHdpZHRoIGFuZCB1cGRhdGUgcGFyYW1ldGVyc1xuXG4gIHZhciBicmVha3BvaW50ID0gc3dpcGVyLmdldEJyZWFrcG9pbnQoYnJlYWtwb2ludHMsIHN3aXBlci5wYXJhbXMuYnJlYWtwb2ludHNCYXNlLCBzd2lwZXIuZWwpO1xuICBpZiAoIWJyZWFrcG9pbnQgfHwgc3dpcGVyLmN1cnJlbnRCcmVha3BvaW50ID09PSBicmVha3BvaW50KSByZXR1cm47XG4gIHZhciBicmVha3BvaW50T25seVBhcmFtcyA9IGJyZWFrcG9pbnQgaW4gYnJlYWtwb2ludHMgPyBicmVha3BvaW50c1ticmVha3BvaW50XSA6IHVuZGVmaW5lZDtcblxuICBpZiAoYnJlYWtwb2ludE9ubHlQYXJhbXMpIHtcbiAgICBbJ3NsaWRlc1BlclZpZXcnLCAnc3BhY2VCZXR3ZWVuJywgJ3NsaWRlc1Blckdyb3VwJywgJ3NsaWRlc1Blckdyb3VwU2tpcCcsICdzbGlkZXNQZXJDb2x1bW4nXS5mb3JFYWNoKGZ1bmN0aW9uIChwYXJhbSkge1xuICAgICAgdmFyIHBhcmFtVmFsdWUgPSBicmVha3BvaW50T25seVBhcmFtc1twYXJhbV07XG4gICAgICBpZiAodHlwZW9mIHBhcmFtVmFsdWUgPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG5cbiAgICAgIGlmIChwYXJhbSA9PT0gJ3NsaWRlc1BlclZpZXcnICYmIChwYXJhbVZhbHVlID09PSAnQVVUTycgfHwgcGFyYW1WYWx1ZSA9PT0gJ2F1dG8nKSkge1xuICAgICAgICBicmVha3BvaW50T25seVBhcmFtc1twYXJhbV0gPSAnYXV0byc7XG4gICAgICB9IGVsc2UgaWYgKHBhcmFtID09PSAnc2xpZGVzUGVyVmlldycpIHtcbiAgICAgICAgYnJlYWtwb2ludE9ubHlQYXJhbXNbcGFyYW1dID0gcGFyc2VGbG9hdChwYXJhbVZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrcG9pbnRPbmx5UGFyYW1zW3BhcmFtXSA9IHBhcnNlSW50KHBhcmFtVmFsdWUsIDEwKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHZhciBicmVha3BvaW50UGFyYW1zID0gYnJlYWtwb2ludE9ubHlQYXJhbXMgfHwgc3dpcGVyLm9yaWdpbmFsUGFyYW1zO1xuICB2YXIgd2FzTXVsdGlSb3cgPSBwYXJhbXMuc2xpZGVzUGVyQ29sdW1uID4gMTtcbiAgdmFyIGlzTXVsdGlSb3cgPSBicmVha3BvaW50UGFyYW1zLnNsaWRlc1BlckNvbHVtbiA+IDE7XG4gIHZhciB3YXNFbmFibGVkID0gcGFyYW1zLmVuYWJsZWQ7XG5cbiAgaWYgKHdhc011bHRpUm93ICYmICFpc011bHRpUm93KSB7XG4gICAgJGVsLnJlbW92ZUNsYXNzKHBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzICsgXCJtdWx0aXJvdyBcIiArIHBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzICsgXCJtdWx0aXJvdy1jb2x1bW5cIik7XG4gICAgc3dpcGVyLmVtaXRDb250YWluZXJDbGFzc2VzKCk7XG4gIH0gZWxzZSBpZiAoIXdhc011bHRpUm93ICYmIGlzTXVsdGlSb3cpIHtcbiAgICAkZWwuYWRkQ2xhc3MocGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3MgKyBcIm11bHRpcm93XCIpO1xuXG4gICAgaWYgKGJyZWFrcG9pbnRQYXJhbXMuc2xpZGVzUGVyQ29sdW1uRmlsbCAmJiBicmVha3BvaW50UGFyYW1zLnNsaWRlc1BlckNvbHVtbkZpbGwgPT09ICdjb2x1bW4nIHx8ICFicmVha3BvaW50UGFyYW1zLnNsaWRlc1BlckNvbHVtbkZpbGwgJiYgcGFyYW1zLnNsaWRlc1BlckNvbHVtbkZpbGwgPT09ICdjb2x1bW4nKSB7XG4gICAgICAkZWwuYWRkQ2xhc3MocGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3MgKyBcIm11bHRpcm93LWNvbHVtblwiKTtcbiAgICB9XG5cbiAgICBzd2lwZXIuZW1pdENvb
118nRhaW5lckNsYXNzZXMoKTtcbiAgfVxuXG4gIHZhciBkaXJlY3Rpb25DaGFuZ2VkID0gYnJlYWtwb2ludFBhcmFtcy5kaXJlY3Rpb24gJiYgYnJlYWtwb2ludFBhcmFtcy5kaXJlY3Rpb24gIT09IHBhcmFtcy5kaXJlY3Rpb247XG4gIHZhciBuZWVkc1JlTG9vcCA9IHBhcmFtcy5sb29wICYmIChicmVha3BvaW50UGFyYW1zLnNsaWRlc1BlclZpZXcgIT09IHBhcmFtcy5zbGlkZXNQZXJWaWV3IHx8IGRpcmVjdGlvbkNoYW5nZWQpO1xuXG4gIGlmIChkaXJlY3Rpb25DaGFuZ2VkICYmIGluaXRpYWxpemVkKSB7XG4gICAgc3dpcGVyLmNoYW5nZURpcmVjdGlvbigpO1xuICB9XG5cbiAgZXh0ZW5kKHN3aXBlci5wYXJhbXMsIGJyZWFrcG9pbnRQYXJhbXMpO1xuICB2YXIgaXNFbmFibGVkID0gc3dpcGVyLnBhcmFtcy5lbmFibGVkO1xuICBleHRlbmQoc3dpcGVyLCB7XG4gICAgYWxsb3dUb3VjaE1vdmU6IHN3aXBlci5wYXJhbXMuYWxsb3dUb3VjaE1vdmUsXG4gICAgYWxsb3dTbGlkZU5leHQ6IHN3aXBlci5wYXJhbXMuYWxsb3dTbGlkZU5leHQsXG4gICAgYWxsb3dTbGlkZVByZXY6IHN3aXBlci5wYXJhbXMuYWxsb3dTbGlkZVByZXZcbiAgfSk7XG5cbiAgaWYgKHdhc0VuYWJsZWQgJiYgIWlzRW5hYmxlZCkge1xuICAgIHN3aXBlci5kaXNhYmxlKCk7XG4gIH0gZWxzZSBpZiAoIXdhc0VuYWJsZWQgJiYgaXNFbmFibGVkKSB7XG4gICAgc3dpcGVyLmVuYWJsZSgpO1xuICB9XG5cbiAgc3dpcGVyLmN1cnJlbnRCcmVha3BvaW50ID0gYnJlYWtwb2ludDtcbiAgc3dpcGVyLmVtaXQoJ19iZWZvcmVCcmVha3BvaW50JywgYnJlYWtwb2ludFBhcmFtcyk7XG5cbiAgaWYgKG5lZWRzUmVMb29wICYmIGluaXRpYWxpemVkKSB7XG4gICAgc3dpcGVyLmxvb3BEZXN0cm95KCk7XG4gICAgc3dpcGVyLmxvb3BDcmVhdGUoKTtcbiAgICBzd2lwZXIudXBkYXRlU2xpZGVzKCk7XG4gICAgc3dpcGVyLnNsaWRlVG8oYWN0aXZlSW5kZXggLSBsb29wZWRTbGlkZXMgKyBzd2lwZXIubG9vcGVkU2xpZGVzLCAwLCBmYWxzZSk7XG4gIH1cblxuICBzd2lwZXIuZW1pdCgnYnJlYWtwb2ludCcsIGJyZWFrcG9pbnRQYXJhbXMpO1xufSIsImltcG9ydCB7IGdldFdpbmRvdyB9IGZyb20gJ3Nzci13aW5kb3cnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QnJlYWtwb2ludChicmVha3BvaW50cywgYmFzZSwgY29udGFpbmVyRWwpIHtcbiAgaWYgKGJhc2UgPT09IHZvaWQgMCkge1xuICAgIGJhc2UgPSAnd2luZG93JztcbiAgfVxuXG4gIGlmICghYnJlYWtwb2ludHMgfHwgYmFzZSA9PT0gJ2NvbnRhaW5lcicgJiYgIWNvbnRhaW5lckVsKSByZXR1cm4gdW5kZWZpbmVkO1xuICB2YXIgYnJlYWtwb2ludCA9IGZhbHNlO1xuICB2YXIgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gIHZhciBjdXJyZW50SGVpZ2h0ID0gYmFzZSA9PT0gJ3dpbmRvdycgPyB3aW5kb3cuaW5uZXJIZWlnaHQgOiBjb250YWluZXJFbC5jbGllbnRIZWlnaHQ7XG4gIHZhciBwb2ludHMgPSBPYmplY3Qua2V5cyhicmVha3BvaW50cykubWFwKGZ1bmN0aW9uIChwb2ludCkge1xuICAgIGlmICh0eXBlb2YgcG9pbnQgPT09ICdzdHJpbmcnICYmIHBvaW50LmluZGV4T2YoJ0AnKSA9PT0gMCkge1xuICAgICAgdmFyIG1pblJhdGlvID0gcGFyc2VGbG9hdChwb2ludC5zdWJzdHIoMSkpO1xuICAgICAgdmFyIHZhbHVlID0gY3VycmVudEhlaWdodCAqIG1pblJhdGlvO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBwb2ludDogcG9pbnRcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiBwb2ludCxcbiAgICAgIHBvaW50OiBwb2ludFxuICAgIH07XG4gIH0pO1xuICBwb2ludHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBwYXJzZUludChhLnZhbHVlLCAxMCkgLSBwYXJzZUludChiLnZhbHVlLCAxMCk7XG4gIH0pO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgdmFyIF9wb2ludHMkaSA9IHBvaW50c1tpXSxcbiAgICAgICAgcG9pbnQgPSBfcG9pbnRzJGkucG9pbnQsXG4gICAgICAgIHZhbHVlID0gX3BvaW50cyRpLnZhbHVlO1xuXG4gICAgaWYgKGJhc2UgPT09ICd3aW5kb3cnKSB7XG4gICAgICBpZiAod2luZG93Lm1hdGNoTWVkaWEoXCIobWluLXdpZHRoOiBcIiArIHZhbHVlICsgXCJweClcIikubWF0Y2hlcykge1xuICAgICAgICBicmVha3BvaW50ID0gcG9pbnQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA8PSBjb250YWluZXJFbC5jbGllbnRXaWR0aCkge1xuICAgICAgYnJlYWtwb2ludCA9IHBvaW50O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBicmVha3BvaW50IHx8ICdtYXgnO1xufSIsImZ1bmN0aW9uIGNoZWNrT3ZlcmZsb3coKSB7XG4gIHZhciBzd2lwZXIgPSB0aGlzO1xuICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgdmFyIHdhc0xvY2tlZCA9IHN3aXBlci5pc0xvY2tlZDtcbiAgdmFyIGxhc3RTbGlkZVBvc2l0aW9uID0gc3dpcGVyLnNsaWRlcy5sZW5ndGggPiAwICYmIHBhcmFtcy5zbGlkZXNPZmZzZXRCZWZvcmUgKyBwYXJhbXMuc3BhY2VCZXR3ZWVuICogKHN3aXBlci5zbGlkZXMubGVuZ3RoIC0gMSkgKyBzd2lwZXIuc2xpZGVzWzBdLm9mZnNldFdpZHRoICogc3dpcGVyLnNsaWRlcy5sZW5ndGg7XG5cbiAgaWYgKHBhcmFtcy5zbGlkZXNPZmZzZXRCZWZvcmUgJiYgcGFyYW1zLnNsaWRlc09mZnNldEFmdGVyICYmIGxhc3RTbGlkZVBvc2l0aW9uKSB7XG4gICAgc3dpcGVyLmlzTG9ja2VkID0gbGFzdFNsaWRlUG9zaXRpb24gPD0gc3dpcGVyLnNpemU7XG4gIH0gZWxzZSB7XG4gICAgc3dpcGVyLmlzTG9ja2VkID0gc3dpcGVyLnNuYXBHcmlkLmxlbmd0aCA9PT0gMTtcbiAgfVxuXG4gIHN3aXBlci5hbGxvd1NsaWRlTmV4dCA9ICFzd2lwZXIuaXNMb2NrZWQ7XG4gIHN3aXBlci5hbGxvd1NsaWRlUHJldiA9ICFzd2lwZXIuaXNMb2NrZWQ7IC8vIGV2ZW50c1xuXG4gIGlmICh3YXNMb2NrZWQgIT09IHN3aXBlci5pc0xvY2tlZCkgc3dpcGVyLmVtaXQoc3dpcGVyLmlzTG9ja2VkID8gJ2xvY2snIDogJ3VubG9jaycpO1xuXG4gIGlmICh3YXNMb2NrZWQgJiYgd2FzTG9ja2VkICE9PSBzd2lwZXIuaXNMb2NrZWQpIHtcbiAgICBzd2lwZXIuaXNFbmQgPSBmYWxzZTtcbiAgICBpZiAoc3dpcGVyLm5hdmlnYXRpb24pIHN3aXBlci5uYXZpZ2F0aW9uLnVwZGF0ZSgpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY2hlY2tPdmVyZmxvdzogY2hlY2tPdmVyZmxvd1xufTsiLCJpbXBvcnQgbG9hZEltYWdlIGZyb20gJy4vbG9hZEltYWdlJztcbmltcG9ydCBwcmVsb2FkSW1hZ2VzIGZyb20gJy4vcHJlbG9hZEltYWdlcyc7XG5leHBvcnQgZGVmYXVsdCB7XG4gIGxvYWRJbWFnZTogbG9hZEltYWdlLFxuICBwcmVsb2FkSW1hZ2VzOiBwcmVsb2FkSW1hZ2VzXG59OyIsImltcG9ydCB7
118IGdldFdpbmRvdyB9IGZyb20gJ3Nzci13aW5kb3cnO1xuaW1wb3J0ICQgZnJvbSAnLi4vLi4vLi4vdXRpbHMvZG9tJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxvYWRJbWFnZShpbWFnZUVsLCBzcmMsIHNyY3NldCwgc2l6ZXMsIGNoZWNrRm9yQ29tcGxldGUsIGNhbGxiYWNrKSB7XG4gIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgdmFyIGltYWdlO1xuXG4gIGZ1bmN0aW9uIG9uUmVhZHkoKSB7XG4gICAgaWYgKGNhbGxiYWNrKSBjYWxsYmFjaygpO1xuICB9XG5cbiAgdmFyIGlzUGljdHVyZSA9ICQoaW1hZ2VFbCkucGFyZW50KCdwaWN0dXJlJylbMF07XG5cbiAgaWYgKCFpc1BpY3R1cmUgJiYgKCFpbWFnZUVsLmNvbXBsZXRlIHx8ICFjaGVja0ZvckNvbXBsZXRlKSkge1xuICAgIGlmIChzcmMpIHtcbiAgICAgIGltYWdlID0gbmV3IHdpbmRvdy5JbWFnZSgpO1xuICAgICAgaW1hZ2Uub25sb2FkID0gb25SZWFkeTtcbiAgICAgIGltYWdlLm9uZXJyb3IgPSBvblJlYWR5O1xuXG4gICAgICBpZiAoc2l6ZXMpIHtcbiAgICAgICAgaW1hZ2Uuc2l6ZXMgPSBzaXplcztcbiAgICAgIH1cblxuICAgICAgaWYgKHNyY3NldCkge1xuICAgICAgICBpbWFnZS5zcmNzZXQgPSBzcmNzZXQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChzcmMpIHtcbiAgICAgICAgaW1hZ2Uuc3JjID0gc3JjO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvblJlYWR5KCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGltYWdlIGFscmVhZHkgbG9hZGVkLi4uXG4gICAgb25SZWFkeSgpO1xuICB9XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcHJlbG9hZEltYWdlcygpIHtcbiAgdmFyIHN3aXBlciA9IHRoaXM7XG4gIHN3aXBlci5pbWFnZXNUb0xvYWQgPSBzd2lwZXIuJGVsLmZpbmQoJ2ltZycpO1xuXG4gIGZ1bmN0aW9uIG9uUmVhZHkoKSB7XG4gICAgaWYgKHR5cGVvZiBzd2lwZXIgPT09ICd1bmRlZmluZWQnIHx8IHN3aXBlciA9PT0gbnVsbCB8fCAhc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQpIHJldHVybjtcbiAgICBpZiAoc3dpcGVyLmltYWdlc0xvYWRlZCAhPT0gdW5kZWZpbmVkKSBzd2lwZXIuaW1hZ2VzTG9hZGVkICs9IDE7XG5cbiAgICBpZiAoc3dpcGVyLmltYWdlc0xvYWRlZCA9PT0gc3dpcGVyLmltYWdlc1RvTG9hZC5sZW5ndGgpIHtcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLnVwZGF0ZU9uSW1hZ2VzUmVhZHkpIHN3aXBlci51cGRhdGUoKTtcbiAgICAgIHN3aXBlci5lbWl0KCdpbWFnZXNSZWFkeScpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3dpcGVyLmltYWdlc1RvTG9hZC5sZW5ndGg7IGkgKz0gMSkge1xuICAgIHZhciBpbWFnZUVsID0gc3dpcGVyLmltYWdlc1RvTG9hZFtpXTtcbiAgICBzd2lwZXIubG9hZEltYWdlKGltYWdlRWwsIGltYWdlRWwuY3VycmVudFNyYyB8fCBpbWFnZUVsLmdldEF0dHJpYnV0ZSgnc3JjJyksIGltYWdlRWwuc3Jjc2V0IHx8IGltYWdlRWwuZ2V0QXR0cmlidXRlKCdzcmNzZXQnKSwgaW1hZ2VFbC5zaXplcyB8fCBpbWFnZUVsLmdldEF0dHJpYnV0ZSgnc2l6ZXMnKSwgdHJ1ZSwgb25SZWFkeSk7XG4gIH1cbn0iLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5pbXBvcnQgJCBmcm9tICcuLi8uLi91dGlscy9kb20nO1xuaW1wb3J0IHsgZXh0ZW5kLCBiaW5kTW9kdWxlTWV0aG9kcywgY3JlYXRlRWxlbWVudElmTm90RGVmaW5lZCB9IGZyb20gJy4uLy4uL3V0aWxzL3V0aWxzJztcbnZhciBOYXZpZ2F0aW9uID0ge1xuICB0b2dnbGVFbDogZnVuY3Rpb24gdG9nZ2xlRWwoJGVsLCBkaXNhYmxlZCkge1xuICAgICRlbFtkaXNhYmxlZCA/ICdhZGRDbGFzcycgOiAncmVtb3ZlQ2xhc3MnXSh0aGlzLnBhcmFtcy5uYXZpZ2F0aW9uLmRpc2FibGVkQ2xhc3MpO1xuICAgIGlmICgkZWxbMF0gJiYgJGVsWzBdLnRhZ05hbWUgPT09ICdCVVRUT04nKSAkZWxbMF0uZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgfSxcbiAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgLy8gVXBkYXRlIE5hdmlnYXRpb24gQnV0dG9uc1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLm5hdmlnYXRpb247XG4gICAgdmFyIHRvZ2dsZUVsID0gc3dpcGVyLm5hdmlnYXRpb24udG9nZ2xlRWw7XG4gICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkgcmV0dXJuO1xuICAgIHZhciBfc3dpcGVyJG5hdmlnYXRpb24gPSBzd2lwZXIubmF2aWdhdGlvbixcbiAgICAgICAgJG5leHRFbCA9IF9zd2lwZXIkbmF2aWdhdGlvbi4kbmV4dEVsLFxuICAgICAgICAkcHJldkVsID0gX3N3aXBlciRuYXZpZ2F0aW9uLiRwcmV2RWw7XG5cbiAgICBpZiAoJHByZXZFbCAmJiAkcHJldkVsLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmIChzd2lwZXIuaXNCZWdpbm5pbmcpIHtcbiAgICAgICAgdG9nZ2xlRWwoJHByZXZFbCwgdHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b2dnbGVFbCgkcHJldkVsLCBmYWxzZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLndhdGNoT3ZlcmZsb3cgJiYgc3dpcGVyLmVuYWJsZWQpIHtcbiAgICAgICAgJHByZXZFbFtzd2lwZXIuaXNMb2NrZWQgPyAnYWRkQ2xhc3MnIDogJ3JlbW92ZUNsYXNzJ10ocGFyYW1zLmxvY2tDbGFzcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCRuZXh0RWwgJiYgJG5leHRFbC5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoc3dpcGVyLmlzRW5kKSB7XG4gICAgICAgIHRvZ2dsZUVsKCRuZXh0RWwsIHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9nZ2xlRWwoJG5leHRFbCwgZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy53YXRjaE92ZXJmbG93ICYmIHN3aXBlci5lbmFibGVkKSB7XG4gICAgICAgICRuZXh0RWxbc3dpcGVyLmlzTG9ja2VkID8gJ2FkZENsYXNzJyA6ICdyZW1vdmVDbGFzcyddKHBhcmFtcy5sb2NrQ2xhc3MpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgb25QcmV2Q2xpY2s6IGZ1bmN0aW9uIG9uUHJldkNsaWNrKGUpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICBlLnByZXZlbn
118REZWZhdWx0KCk7XG4gICAgaWYgKHN3aXBlci5pc0JlZ2lubmluZyAmJiAhc3dpcGVyLnBhcmFtcy5sb29wKSByZXR1cm47XG4gICAgc3dpcGVyLnNsaWRlUHJldigpO1xuICB9LFxuICBvbk5leHRDbGljazogZnVuY3Rpb24gb25OZXh0Q2xpY2soZSkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoc3dpcGVyLmlzRW5kICYmICFzd2lwZXIucGFyYW1zLmxvb3ApIHJldHVybjtcbiAgICBzd2lwZXIuc2xpZGVOZXh0KCk7XG4gIH0sXG4gIGluaXQ6IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMubmF2aWdhdGlvbjtcbiAgICBzd2lwZXIucGFyYW1zLm5hdmlnYXRpb24gPSBjcmVhdGVFbGVtZW50SWZOb3REZWZpbmVkKHN3aXBlci4kZWwsIHN3aXBlci5wYXJhbXMubmF2aWdhdGlvbiwgc3dpcGVyLnBhcmFtcy5jcmVhdGVFbGVtZW50cywge1xuICAgICAgbmV4dEVsOiAnc3dpcGVyLWJ1dHRvbi1uZXh0JyxcbiAgICAgIHByZXZFbDogJ3N3aXBlci1idXR0b24tcHJldidcbiAgICB9KTtcbiAgICBpZiAoIShwYXJhbXMubmV4dEVsIHx8IHBhcmFtcy5wcmV2RWwpKSByZXR1cm47XG4gICAgdmFyICRuZXh0RWw7XG4gICAgdmFyICRwcmV2RWw7XG5cbiAgICBpZiAocGFyYW1zLm5leHRFbCkge1xuICAgICAgJG5leHRFbCA9ICQocGFyYW1zLm5leHRFbCk7XG5cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLnVuaXF1ZU5hdkVsZW1lbnRzICYmIHR5cGVvZiBwYXJhbXMubmV4dEVsID09PSAnc3RyaW5nJyAmJiAkbmV4dEVsLmxlbmd0aCA+IDEgJiYgc3dpcGVyLiRlbC5maW5kKHBhcmFtcy5uZXh0RWwpLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAkbmV4dEVsID0gc3dpcGVyLiRlbC5maW5kKHBhcmFtcy5uZXh0RWwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwYXJhbXMucHJldkVsKSB7XG4gICAgICAkcHJldkVsID0gJChwYXJhbXMucHJldkVsKTtcblxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMudW5pcXVlTmF2RWxlbWVudHMgJiYgdHlwZW9mIHBhcmFtcy5wcmV2RWwgPT09ICdzdHJpbmcnICYmICRwcmV2RWwubGVuZ3RoID4gMSAmJiBzd2lwZXIuJGVsLmZpbmQocGFyYW1zLnByZXZFbCkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICRwcmV2RWwgPSBzd2lwZXIuJGVsLmZpbmQocGFyYW1zLnByZXZFbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCRuZXh0RWwgJiYgJG5leHRFbC5sZW5ndGggPiAwKSB7XG4gICAgICAkbmV4dEVsLm9uKCdjbGljaycsIHN3aXBlci5uYXZpZ2F0aW9uLm9uTmV4dENsaWNrKTtcbiAgICB9XG5cbiAgICBpZiAoJHByZXZFbCAmJiAkcHJldkVsLmxlbmd0aCA+IDApIHtcbiAgICAgICRwcmV2RWwub24oJ2NsaWNrJywgc3dpcGVyLm5hdmlnYXRpb24ub25QcmV2Q2xpY2spO1xuICAgIH1cblxuICAgIGV4dGVuZChzd2lwZXIubmF2aWdhdGlvbiwge1xuICAgICAgJG5leHRFbDogJG5leHRFbCxcbiAgICAgIG5leHRFbDogJG5leHRFbCAmJiAkbmV4dEVsWzBdLFxuICAgICAgJHByZXZFbDogJHByZXZFbCxcbiAgICAgIHByZXZFbDogJHByZXZFbCAmJiAkcHJldkVsWzBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXN3aXBlci5lbmFibGVkKSB7XG4gICAgICBpZiAoJG5leHRFbCkgJG5leHRFbC5hZGRDbGFzcyhwYXJhbXMubG9ja0NsYXNzKTtcbiAgICAgIGlmICgkcHJldkVsKSAkcHJldkVsLmFkZENsYXNzKHBhcmFtcy5sb2NrQ2xhc3MpO1xuICAgIH1cbiAgfSxcbiAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgX3N3aXBlciRuYXZpZ2F0aW9uMiA9IHN3aXBlci5uYXZpZ2F0aW9uLFxuICAgICAgICAkbmV4dEVsID0gX3N3aXBlciRuYXZpZ2F0aW9uMi4kbmV4dEVsLFxuICAgICAgICAkcHJldkVsID0gX3N3aXBlciRuYXZpZ2F0aW9uMi4kcHJldkVsO1xuXG4gICAgaWYgKCRuZXh0RWwgJiYgJG5leHRFbC5sZW5ndGgpIHtcbiAgICAgICRuZXh0RWwub2ZmKCdjbGljaycsIHN3aXBlci5uYXZpZ2F0aW9uLm9uTmV4dENsaWNrKTtcbiAgICAgICRuZXh0RWwucmVtb3ZlQ2xhc3Moc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uLmRpc2FibGVkQ2xhc3MpO1xuICAgIH1cblxuICAgIGlmICgkcHJldkVsICYmICRwcmV2RWwubGVuZ3RoKSB7XG4gICAgICAkcHJldkVsLm9mZignY2xpY2snLCBzd2lwZXIubmF2aWdhdGlvbi5vblByZXZDbGljayk7XG4gICAgICAkcHJldkVsLnJlbW92ZUNsYXNzKHN3aXBlci5wYXJhbXMubmF2aWdhdGlvbi5kaXNhYmxlZENsYXNzKTtcbiAgICB9XG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICduYXZpZ2F0aW9uJyxcbiAgcGFyYW1zOiB7XG4gICAgbmF2aWdhdGlvbjoge1xuICAgICAgbmV4dEVsOiBudWxsLFxuICAgICAgcHJldkVsOiBudWxsLFxuICAgICAgaGlkZU9uQ2xpY2s6IGZhbHNlLFxuICAgICAgZGlzYWJsZWRDbGFzczogJ3N3aXBlci1idXR0b24tZGlzYWJsZWQnLFxuICAgICAgaGlkZGVuQ2xhc3M6ICdzd2lwZXItYnV0dG9uLWhpZGRlbicsXG4gICAgICBsb2NrQ2xhc3M6ICdzd2lwZXItYnV0dG9uLWxvY2snXG4gICAgfVxuICB9LFxuICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICBiaW5kTW9kdWxlTWV0aG9kcyhzd2lwZXIsIHtcbiAgICAgIG5hdmlnYXRpb246IF9leHRlbmRzKHt9LCBOYXZpZ2F0aW9uKVxuICAgIH0pO1xuICB9LFxuICBvbjoge1xuICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoc3dpcGVyKSB7XG4gICAgICBzd2lwZXIubmF2aWdhdGlvbi5pbml0KCk7XG4gICAgICBzd2lwZXIubmF2aWdhdGlvbi51cGRhdGUoKTtcbiAgICB9LFxuICAgIHRvRWRnZTogZnVuY3Rpb24gdG9FZGdlKHN3aXBlcikge1xuICAgICAgc3dpcGVyLm5hdmlnYXRpb24udXBkYXRlKCk7XG4gICAgfSxcbiAgICBmcm9tRWRnZTogZnVuY3Rpb24gZnJvbUVkZ2Uoc3dpcGVyKSB7XG4gICAgICBzd2lwZXIubmF2aWdhdGlvbi51cGRhdGUoKTtcbiAgICB9LFxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koc3dpcGVyKSB7XG4gICAgICBzd2lwZXIubmF2aWdhdGlvbi5kZXN0cm95KCk7XG4gICAgfSxcbiAgICAnZW5hYmxlIGRpc2FibGUnOiBmdW5jdGlvbiBlbmFibGVEaXNhYmxlKHN3aXBlcikge1xuICAgICAgdmFyIF9zd2lwZXIkbmF2aWdhdGlvbjMgPSBzd2lwZXIubmF2aWdhdGlvbixcbiAgICAgICAgICAkbmV4dEVsID0gX3N3aXBlciRuYXZpZ2F0aW9uMy4kbmV4dEVsLFxuICAgICAgICAgICRwcmV2RWwgPSBfc3dpcGVyJG5hdmlnYXRpb24zLiRwcmV2RWw7XG5cbiAgICAgIGlmICgkbmV4dEVsKSB7XG4gICAgICAgICRuZXh0RWxbc3dpcGVyLmVuYWJsZWQgPyAncmVtb3ZlQ2xhc3MnIDogJ2FkZENsYXNzJ10oc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uLmxvY2tDbGFzcyk7XG4gICAgICB9XG5cbiAgICAgIGlmICgkcHJldkVsKSB7XG4gICAgICAgICRwcmV2RWxbc3dpcGVyLmVuYWJsZWQgPyAncmVtb3ZlQ2xhc3MnIDogJ2FkZENsYXNzJ10oc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uLmxvY2tDbGFzcyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBjbGljazogZnVuY3Rpb24gY2xpY2soc3dpcGVyLCBlKSB7XG4gICAgICB2Y
118XIgX3N3aXBlciRuYXZpZ2F0aW9uNCA9IHN3aXBlci5uYXZpZ2F0aW9uLFxuICAgICAgICAgICRuZXh0RWwgPSBfc3dpcGVyJG5hdmlnYXRpb240LiRuZXh0RWwsXG4gICAgICAgICAgJHByZXZFbCA9IF9zd2lwZXIkbmF2aWdhdGlvbjQuJHByZXZFbDtcbiAgICAgIHZhciB0YXJnZXRFbCA9IGUudGFyZ2V0O1xuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uLmhpZGVPbkNsaWNrICYmICEkKHRhcmdldEVsKS5pcygkcHJldkVsKSAmJiAhJCh0YXJnZXRFbCkuaXMoJG5leHRFbCkpIHtcbiAgICAgICAgaWYgKHN3aXBlci5wYWdpbmF0aW9uICYmIHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbiAmJiBzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24uY2xpY2thYmxlICYmIChzd2lwZXIucGFnaW5hdGlvbi5lbCA9PT0gdGFyZ2V0RWwgfHwgc3dpcGVyLnBhZ2luYXRpb24uZWwuY29udGFpbnModGFyZ2V0RWwpKSkgcmV0dXJuO1xuICAgICAgICB2YXIgaXNIaWRkZW47XG5cbiAgICAgICAgaWYgKCRuZXh0RWwpIHtcbiAgICAgICAgICBpc0hpZGRlbiA9ICRuZXh0RWwuaGFzQ2xhc3Moc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uLmhpZGRlbkNsYXNzKTtcbiAgICAgICAgfSBlbHNlIGlmICgkcHJldkVsKSB7XG4gICAgICAgICAgaXNIaWRkZW4gPSAkcHJldkVsLmhhc0NsYXNzKHN3aXBlci5wYXJhbXMubmF2aWdhdGlvbi5oaWRkZW5DbGFzcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNIaWRkZW4gPT09IHRydWUpIHtcbiAgICAgICAgICBzd2lwZXIuZW1pdCgnbmF2aWdhdGlvblNob3cnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzd2lwZXIuZW1pdCgnbmF2aWdhdGlvbkhpZGUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgkbmV4dEVsKSB7XG4gICAgICAgICAgJG5leHRFbC50b2dnbGVDbGFzcyhzd2lwZXIucGFyYW1zLm5hdmlnYXRpb24uaGlkZGVuQ2xhc3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCRwcmV2RWwpIHtcbiAgICAgICAgICAkcHJldkVsLnRvZ2dsZUNsYXNzKHN3aXBlci5wYXJhbXMubmF2aWdhdGlvbi5oaWRkZW5DbGFzcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn07IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuaW1wb3J0ICQgZnJvbSAnLi4vLi4vdXRpbHMvZG9tJztcbmltcG9ydCB7IGV4dGVuZCwgYmluZE1vZHVsZU1ldGhvZHMsIGNsYXNzZXNUb1NlbGVjdG9yLCBjcmVhdGVFbGVtZW50SWZOb3REZWZpbmVkIH0gZnJvbSAnLi4vLi4vdXRpbHMvdXRpbHMnO1xudmFyIFBhZ2luYXRpb24gPSB7XG4gIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgIC8vIFJlbmRlciB8fCBVcGRhdGUgUGFnaW5hdGlvbiBidWxsZXRzL2l0ZW1zXG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIHJ0bCA9IHN3aXBlci5ydGw7XG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbjtcbiAgICBpZiAoIXBhcmFtcy5lbCB8fCAhc3dpcGVyLnBhZ2luYXRpb24uZWwgfHwgIXN3aXBlci5wYWdpbmF0aW9uLiRlbCB8fCBzd2lwZXIucGFnaW5hdGlvbi4kZWwubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgdmFyIHNsaWRlc0xlbmd0aCA9IHN3aXBlci52aXJ0dWFsICYmIHN3aXBlci5wYXJhbXMudmlydHVhbC5lbmFibGVkID8gc3dpcGVyLnZpcnR1YWwuc2xpZGVzLmxlbmd0aCA6IHN3aXBlci5zbGlkZXMubGVuZ3RoO1xuICAgIHZhciAkZWwgPSBzd2lwZXIucGFnaW5hdGlvbi4kZWw7IC8vIEN1cnJlbnQvVG90YWxcblxuICAgIHZhciBjdXJyZW50O1xuICAgIHZhciB0b3RhbCA9IHN3aXBlci5wYXJhbXMubG9vcCA/IE1hdGguY2VpbCgoc2xpZGVzTGVuZ3RoIC0gc3dpcGVyLmxvb3BlZFNsaWRlcyAqIDIpIC8gc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJHcm91cCkgOiBzd2lwZXIuc25hcEdyaWQubGVuZ3RoO1xuXG4gICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgY3VycmVudCA9IE1hdGguY2VpbCgoc3dpcGVyLmFjdGl2ZUluZGV4IC0gc3dpcGVyLmxvb3BlZFNsaWRlcykgLyBzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwKTtcblxuICAgICAgaWYgKGN1cnJlbnQgPiBzbGlkZXNMZW5ndGggLSAxIC0gc3dpcGVyLmxvb3BlZFNsaWRlcyAqIDIpIHtcbiAgICAgICAgY3VycmVudCAtPSBzbGlkZXNMZW5ndGggLSBzd2lwZXIubG9vcGVkU2xpZGVzICogMjtcbiAgICAgIH1cblxuICAgICAgaWYgKGN1cnJlbnQgPiB0b3RhbCAtIDEpIGN1cnJlbnQgLT0gdG90YWw7XG4gICAgICBpZiAoY3VycmVudCA8IDAgJiYgc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uVHlwZSAhPT0gJ2J1bGxldHMnKSBjdXJyZW50ID0gdG90YWwgKyBjdXJyZW50O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHN3aXBlci5zbmFwSW5kZXggIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjdXJyZW50ID0gc3dpcGVyLnNuYXBJbmRleDtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudCA9IHN3aXBlci5hY3RpdmVJbmRleCB8fCAwO1xuICAgIH0gLy8gVHlwZXNcblxuXG4gICAgaWYgKHBhcmFtcy50eXBlID09PSAnYnVsbGV0cycgJiYgc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0cyAmJiBzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciBidWxsZXRzID0gc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0cztcbiAgICAgIHZhciBmaXJzdEluZGV4O1xuICAgICAgdmFyIGxhc3RJbmRleDtcbiAgICAgIHZhciBtaWRJbmRleDtcblxuICAgICAgaWYgKHBhcmFtcy5keW5hbWljQnVsbGV0cykge1xuICAgICAgICBzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRTaXplID0gYnVsbGV0cy5lcSgwKVtzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAnb3V0
118ZXJXaWR0aCcgOiAnb3V0ZXJIZWlnaHQnXSh0cnVlKTtcbiAgICAgICAgJGVsLmNzcyhzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAnd2lkdGgnIDogJ2hlaWdodCcsIHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldFNpemUgKiAocGFyYW1zLmR5bmFtaWNNYWluQnVsbGV0cyArIDQpICsgXCJweFwiKTtcblxuICAgICAgICBpZiAocGFyYW1zLmR5bmFtaWNNYWluQnVsbGV0cyA+IDEgJiYgc3dpcGVyLnByZXZpb3VzSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHN3aXBlci5wYWdpbmF0aW9uLmR5bmFtaWNCdWxsZXRJbmRleCArPSBjdXJyZW50IC0gc3dpcGVyLnByZXZpb3VzSW5kZXg7XG5cbiAgICAgICAgICBpZiAoc3dpcGVyLnBhZ2luYXRpb24uZHluYW1pY0J1bGxldEluZGV4ID4gcGFyYW1zLmR5bmFtaWNNYWluQnVsbGV0cyAtIDEpIHtcbiAgICAgICAgICAgIHN3aXBlci5wYWdpbmF0aW9uLmR5bmFtaWNCdWxsZXRJbmRleCA9IHBhcmFtcy5keW5hbWljTWFpbkJ1bGxldHMgLSAxO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3dpcGVyLnBhZ2luYXRpb24uZHluYW1pY0J1bGxldEluZGV4IDwgMCkge1xuICAgICAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24uZHluYW1pY0J1bGxldEluZGV4ID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmaXJzdEluZGV4ID0gY3VycmVudCAtIHN3aXBlci5wYWdpbmF0aW9uLmR5bmFtaWNCdWxsZXRJbmRleDtcbiAgICAgICAgbGFzdEluZGV4ID0gZmlyc3RJbmRleCArIChNYXRoLm1pbihidWxsZXRzLmxlbmd0aCwgcGFyYW1zLmR5bmFtaWNNYWluQnVsbGV0cykgLSAxKTtcbiAgICAgICAgbWlkSW5kZXggPSAobGFzdEluZGV4ICsgZmlyc3RJbmRleCkgLyAyO1xuICAgICAgfVxuXG4gICAgICBidWxsZXRzLnJlbW92ZUNsYXNzKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcyArIFwiIFwiICsgcGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzICsgXCItbmV4dCBcIiArIHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcyArIFwiLW5leHQtbmV4dCBcIiArIHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcyArIFwiLXByZXYgXCIgKyBwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MgKyBcIi1wcmV2LXByZXYgXCIgKyBwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MgKyBcIi1tYWluXCIpO1xuXG4gICAgICBpZiAoJGVsLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgYnVsbGV0cy5lYWNoKGZ1bmN0aW9uIChidWxsZXQpIHtcbiAgICAgICAgICB2Y
118XIgJGJ1bGxldCA9ICQoYnVsbGV0KTtcbiAgICAgICAgICB2YXIgYnVsbGV0SW5kZXggPSAkYnVsbGV0LmluZGV4KCk7XG5cbiAgICAgICAgICBpZiAoYnVsbGV0SW5kZXggPT09IGN1cnJlbnQpIHtcbiAgICAgICAgICAgICRidWxsZXQuYWRkQ2xhc3MocGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocGFyYW1zLmR5bmFtaWNCdWxsZXRzKSB7XG4gICAgICAgICAgICBpZiAoYnVsbGV0SW5kZXggPj0gZmlyc3RJbmRleCAmJiBidWxsZXRJbmRleCA8PSBsYXN0SW5kZXgpIHtcbiAgICAgICAgICAgICAgJGJ1bGxldC5hZGRDbGFzcyhwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MgKyBcIi1tYWluXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYnVsbGV0SW5kZXggPT09IGZpcnN0SW5kZXgpIHtcbiAgICAgICAgICAgICAgJGJ1bGxldC5wcmV2KCkuYWRkQ2xhc3MocGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzICsgXCItcHJldlwiKS5wcmV2KCkuYWRkQ2xhc3MocGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzICsgXCItcHJldi1wcmV2XCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYnVsbGV0SW5kZXggPT09IGxhc3RJbmRleCkge1xuICAgICAgICAgICAgICAkYnVsbGV0Lm5leHQoKS5hZGRDbGFzcyhwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MgKyBcIi1uZXh0XCIpLm5leHQoKS5hZGRDbGFzcyhwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MgKyBcIi1uZXh0LW5leHRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciAkYnVsbGV0ID0gYnVsbGV0cy5lcShjdXJyZW50KTtcbiAgICAgICAgdmFyIGJ1bGxldEluZGV4ID0gJGJ1bGxldC5pbmRleCgpO1xuICAgICAgICAkYnVsbGV0LmFkZENsYXNzKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcyk7XG5cbiAgICAgICAgaWYgKHBhcmFtcy5keW5hbWljQnVsbGV0cykge1xuICAgICAgICAgIHZhciAkZmlyc3REaXNwbGF5ZWRCdWxsZXQgPSBidWxsZXRzLmVxKGZpcnN0SW5kZXgpO1xuICAgICAgICAgIHZhciAkbGFzdERpc3BsYXllZEJ1bGxldCA9IGJ1bGxldHMuZXEobGFzdEluZGV4KTtcblxuICAgICAgICAgIGZvciAodmFyIGkgPSBmaXJzdEluZGV4OyBpIDw9IGxhc3RJbmRleDsgaSArPSAxKSB7XG4gICAgICAgICAgICBidWxsZXRzLmVxKGkpLmFkZENsYXNzKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcyArIFwiLW1haW5cIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgICAgICAgaWYgKGJ1bGxldEluZGV4ID49IGJ1bGxldHMubGVuZ3RoIC0gcGFyYW1zLmR5bmFtaWNNYWluQnVsbGV0cykge1xuICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IHBhcmFtcy5keW5hbWljTWFpbkJ1bGxldHM7IF9pID49IDA7IF9pIC09IDEpIHtcbiAgICAgICAgICAgICAgICBidWxsZXRzLmVxKGJ1bGxldHMubGVuZ3RoIC0gX2kpLmFkZENsYXNzKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcyArIFwiLW1haW5cIik7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBidWxsZXRzLmVxKGJ1bGxldHMubGVuZ3RoIC0gcGFyYW1zLmR5bmFtaWNNYWluQnVsbGV0cyAtIDEpLmFkZENsYXNzKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcyArIFwiLXByZXZcIik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAkZmlyc3REaXNwbGF5ZWRCdWxsZXQucHJldigpLmFkZENsYXNzKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcyArIFwiLXByZXZcIikucHJldigpLmFkZENsYXNzKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcyArIFwiLXByZXYtcHJldlwiKTtcbiAgICAgICAgICAgICAgJGxhc3REaXNwbGF5ZWRCdWxsZXQubmV4dCgpLmFkZENsYXNzKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcyArIFwiLW5leHRcIikubmV4dCgpLmFkZENsYXNzKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcyArIFwiLW5leHQtbmV4dFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJGZpcnN0RGlzcGxheWVkQnVsbGV0LnByZXYoKS5hZGRDbGFzcyhwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MgKyBcIi1wcmV2XCIpLnByZXYoKS5hZGRDbGFzcyhwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MgKyBcIi1wcmV2LXByZXZcIik7XG4gICAgICAgICAgICAkbGFzdERpc3BsYXllZEJ1bGxldC5uZXh0KCkuYWRkQ2xhc3MocGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzICsgXCItbmV4dFwiKS5uZXh0KCkuYWRkQ2xhc3MocGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzICsgXCItbmV4dC1uZXh0XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocGFyYW1zLmR5bmFtaWNCdWxsZXRzKSB7XG4gICAgICAgIHZhciBkeW5hbWljQnVsbGV0c0xlbmd0aCA9IE1hdGgubWluKGJ1bGxldHMubGVuZ3RoLCBwYXJhbXMuZHluYW1pY01haW5CdWxsZXRzICsgNCk7XG4gICAgICAgIHZhciBidWxsZXRzT2Zmc2V0ID0gKHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldFNpemUgKiBkeW5hbWljQnVsbGV0c0xlbmd0aCAtIHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldFNpemUpIC8gMiAtIG1pZEluZGV4ICogc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0U2l6ZTtcbiAgICAgICAgdmFyIG9mZnNldFByb3AgPSBydGwgPyAncmlnaHQnIDogJ2xlZnQnO1xuICAgICAgICBidWxsZXRzLmNzcyhzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyBvZmZzZXRQcm9wIDogJ3RvcCcsIGJ1bGxldHNPZmZzZXQgKyBcInB4XCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwYXJhbXMudHlwZSA9PT0gJ2ZyYWN0aW9uJykge1xuICAgICAgJGVsLmZpbmQoY2xhc3Nlc1RvU2VsZWN0b3IocGFyYW1zLmN1cnJlbnRDbGFzcykpLnRleHQocGFyYW1zLmZvcm1hdEZyYWN0aW9uQ3VycmVudChjdXJyZW50ICsgMSkpO1xuICAgICAgJGVsLmZpbmQoY2xhc3Nlc1RvU2VsZWN0b3IocGFyYW1zLnRvdGFsQ2xhc3MpKS50ZXh0KHBhcmFtcy5mb3JtYXRGcmFjdGlvblRvdGFsKHRvdGFsKSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy50eXBlID09PSAncHJvZ3Jlc3NiYXInKSB7XG4gICAgICB2Y
118XIgcHJvZ3Jlc3NiYXJEaXJlY3Rpb247XG5cbiAgICAgIGlmIChwYXJhbXMucHJvZ3Jlc3NiYXJPcHBvc2l0ZSkge1xuICAgICAgICBwcm9ncmVzc2JhckRpcmVjdGlvbiA9IHN3aXBlci5pc0hvcml6b250YWwoKSA/ICd2ZXJ0aWNhbCcgOiAnaG9yaXpvbnRhbCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9ncmVzc2JhckRpcmVjdGlvbiA9IHN3aXBlci5pc0hvcml6b250YWwoKSA/ICdob3Jpem9udGFsJyA6ICd2ZXJ0aWNhbCc7XG4gICAgICB9XG5cbiAgICAgIHZhciBzY2FsZSA9IChjdXJyZW50ICsgMSkgLyB0b3RhbDtcbiAgICAgIHZhciBzY2FsZVggPSAxO1xuICAgICAgdmFyIHNjYWxlWSA9IDE7XG5cbiAgICAgIGlmIChwcm9ncmVzc2JhckRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICAgIHNjYWxlWCA9IHNjYWxlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2NhbGVZID0gc2NhbGU7XG4gICAgICB9XG5cbiAgICAgICRlbC5maW5kKGNsYXNzZXNUb1NlbGVjdG9yKHBhcmFtcy5wcm9ncmVzc2JhckZpbGxDbGFzcykpLnRyYW5zZm9ybShcInRyYW5zbGF0ZTNkKDAsMCwwKSBzY2FsZVgoXCIgKyBzY2FsZVggKyBcIikgc2NhbGVZKFwiICsgc2NhbGVZICsgXCIpXCIpLnRyYW5zaXRpb24oc3dpcGVyLnBhcmFtcy5zcGVlZCk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy50eXBlID09PSAnY3VzdG9tJyAmJiBwYXJhbXMucmVuZGVyQ3VzdG9tKSB7XG4gICAgICAkZWwuaHRtbChwYXJhbXMucmVuZGVyQ3VzdG9tKHN3aXBlciwgY3VycmVudCArIDEsIHRvdGFsKSk7XG4gICAgICBzd2lwZXIuZW1pdCgncGFnaW5hdGlvblJlbmRlcicsICRlbFswXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXBlci5lbWl0KCdwYWdpbmF0aW9uVXBkYXRlJywgJGVsWzBdKTtcbiAgICB9XG5cbiAgICBpZiAoc3dpcGVyLnBhcmFtcy53YXRjaE92ZXJmbG93ICYmIHN3aXBlci5lbmFibGVkKSB7XG4gICAgICAkZWxbc3dpcGVyLmlzTG9ja2VkID8gJ2FkZENsYXNzJyA6ICdyZW1vdmVDbGFzcyddKHBhcmFtcy5sb2NrQ2xhc3MpO1xuICAgIH1cbiAgfSxcbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgLy8gUmVuZGVyIENvbnRhaW5lclxuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLnBhZ2luYXRpb247XG4gICAgaWYgKCFwYXJhbXMuZWwgfHwgIXN3aXBlci5wYWdpbmF0aW9uLmVsIHx8ICFzd2lwZXIucGFnaW5hdGlvbi4kZWwgfHwgc3dpcGVyLnBhZ2luYXRpb24uJGVsLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIHZhciBzbGlkZXNMZW5ndGggPSBzd2lwZXIudmlydHVhbCAmJiBzd2lwZXIucGFyYW1zLnZpcnR1YWwuZW5hYmxlZCA/IHN3aXBlci52aXJ0dWFsLnNsaWRlcy5sZW5ndGggOiBzd2lwZXIuc2xpZGVzLmxlbmd0aDtcbiAgICB2YXIgJGVsID0gc3dpcGVyLnBhZ2luYXRpb24uJGVsO1xuICAgIHZhciBwYWdpbmF0aW9uSFRNTCA9ICcnO1xuXG4gICAgaWYgKHBhcmFtcy50eXBlID09PSAnYnVsbGV0cycpIHtcbiAgICAgIHZhciBudW1iZXJPZkJ1bGxldHMgPSBzd2lwZXIucGFyYW1zLmxvb3AgPyBNYXRoLmNlaWwoKHNsaWRlc0xlbmd0aCAtIHN3aXBlci5sb29wZWRTbGlkZXMgKiAyKSAvIHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXApIDogc3dpcGVyLnNuYXBHcmlkLmxlbmd0aDtcblxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZnJlZU1vZGUgJiYgIXN3aXBlci5wYXJhbXMubG9vcCAmJiBudW1iZXJPZkJ1bGxldHMgPiBzbGlkZXNMZW5ndGgpIHtcbiAgICAgICAgbnVtYmVyT2ZCdWxsZXRzID0gc2xpZGVzTGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mQnVsbGV0czsgaSArPSAxKSB7XG4gICAgICAgIGlmIChwYXJhbXMucmVuZGVyQnVsbGV0KSB7XG4gICAgICAgICAgcGFnaW5hdGlvbkhUTUwgKz0gcGFyYW1zLnJlbmRlckJ1bGxldC5jYWxsKHN3aXBlciwgaSwgcGFyYW1zLmJ1bGxldENsYXNzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYWdpbmF0aW9uSFRNTCArPSBcIjxcIiArIHBhcmFtcy5idWxsZXRFbGVtZW50ICsgXCIgY2xhc3M9XFxcIlwiICsgcGFyYW1zLmJ1bGxldENsYXNzICsgXCJcXFwiPjwvXCIgKyBwYXJhbXMuYnVsbGV0RWxlbWVudCArIFwiPlwiO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICRlbC5odG1sKHBhZ2luYXRpb25IVE1MKTtcbiAgICAgIHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldHMgPSAkZWwuZmluZChjbGFzc2VzVG9TZWxlY3RvcihwYXJhbXMuYnVsbGV0Q2xhc3MpKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLnR5cGUgPT09ICdmcmFjdGlvbicpIHtcbiAgICAgIGlmIChwYXJhbXMucmVuZGVyRnJhY3Rpb24pIHtcbiAgICAgICAgcGFnaW5hdGlvbkhUTUwgPSBwYXJhbXMucmVuZGVyRnJhY3Rpb24uY2FsbChzd2lwZXIsIHBhcmFtcy5jdXJyZW50Q2xhc3MsIHBhcmFtcy50b3RhbENsYXNzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhZ2luYXRpb25IVE1MID0gXCI8c3BhbiBjbGFzcz1cXFwiXCIgKyBwYXJhbXMuY3VycmVudENsYXNzICsgXCJcXFwiPjwvc3Bhbj5cIiArICcgLyAnICsgKFwiPHNwYW4gY2xhc3M9XFxcIlwiICsgcGFyYW1zLnRvdGFsQ2xhc3MgKyBcIlxcXCI+PC9zcGFuPlwiKTtcbiAgICAgIH1cblxuICAgICAgJGVsLmh0bWwocGFnaW5hdGlvbkhUTUwpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMudHlwZSA9PT0gJ3Byb2dyZXNzYmFyJykge1xuICAgICAgaWYgKHBhcmFtcy5yZW5kZXJQcm9ncmVzc2Jhcikge1xuICAgICAgICBwYWdpbmF0aW9uSFRNTCA9IHBhcmFtcy5yZW5kZXJQcm9ncmVzc2Jhci5jYWxsKHN3aXBlciwgcGFyYW1zLnByb2dyZXNzYmFyRmlsbENsYXNzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhZ2luYXRpb25IVE1MID0gXCI8c3BhbiBjbGFzcz1cXFwiXCIgKyBwYXJhbXMucHJvZ3Jlc3NiYXJGaWxsQ2xhc3MgKyBcIlxcXCI+PC9zcGFuPlwiO1xuICAgICAgfVxuXG4gICAgICAkZWwuaHRtbChwYWdpbmF0aW9uSFRNTCk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy50eXBlICE9PSAnY3VzdG9tJykge1xuICAgICAgc3dpcGVyLmVtaXQoJ3BhZ2luYX
118Rpb25SZW5kZXInLCBzd2lwZXIucGFnaW5hdGlvbi4kZWxbMF0pO1xuICAgIH1cbiAgfSxcbiAgaW5pdDogZnVuY3Rpb24gaW5pdCgpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICBzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24gPSBjcmVhdGVFbGVtZW50SWZOb3REZWZpbmVkKHN3aXBlci4kZWwsIHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbiwgc3dpcGVyLnBhcmFtcy5jcmVhdGVFbGVtZW50cywge1xuICAgICAgZWw6ICdzd2lwZXItcGFnaW5hdGlvbidcbiAgICB9KTtcbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uO1xuICAgIGlmICghcGFyYW1zLmVsKSByZXR1cm47XG4gICAgdmFyICRlbCA9ICQocGFyYW1zLmVsKTtcbiAgICBpZiAoJGVsLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgaWYgKHN3aXBlci5wYXJhbXMudW5pcXVlTmF2RWxlbWVudHMgJiYgdHlwZW9mIHBhcmFtcy5lbCA9PT0gJ3N0cmluZycgJiYgJGVsLmxlbmd0aCA+IDEpIHtcbiAgICAgICRlbCA9IHN3aXBlci4kZWwuZmluZChwYXJhbXMuZWwpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMudHlwZSA9PT0gJ2J1bGxldHMnICYmIHBhcmFtcy5jbGlja2FibGUpIHtcbiAgICAgICRlbC5hZGRDbGFzcyhwYXJhbXMuY2xpY2thYmxlQ2xhc3MpO1xuICAgIH1cblxuICAgICRlbC5hZGRDbGFzcyhwYXJhbXMubW9kaWZpZXJDbGFzcyArIHBhcmFtcy50eXBlKTtcblxuICAgIGlmIChwYXJhbXMudHlwZSA9PT0gJ2J1bGxldHMnICYmIHBhcmFtcy5keW5hbWljQnVsbGV0cykge1xuICAgICAgJGVsLmFkZENsYXNzKFwiXCIgKyBwYXJhbXMubW9kaWZpZXJDbGFzcyArIHBhcmFtcy50eXBlICsgXCItZHluYW1pY1wiKTtcbiAgICAgIHN3aXBlci5wYWdpbmF0aW9uLmR5bmFtaWNCdWxsZXRJbmRleCA9IDA7XG5cbiAgICAgIGlmIChwYXJhbXMuZHluYW1pY01haW5CdWxsZXRzIDwgMSkge1xuICAgICAgICBwYXJhbXMuZHluYW1pY01haW5CdWxsZXRzID0gMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLnR5cGUgPT09ICdwcm9ncmVzc2JhcicgJiYgcGFyYW1zLnByb2dyZXNzYmFyT3Bwb3NpdGUpIHtcbiAgICAgICRlbC5hZGRDbGFzcyhwYXJhbXMucHJvZ3Jlc3NiYXJPcHBvc2l0ZUNsYXNzKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLmNsaWNrYWJsZSkge1xuICAgICAgJGVsLm9uKCdjbGljaycsIGNsYXNzZXNUb1NlbGVjdG9yKHBhcmFtcy5idWxsZXRDbGFzcyksIGZ1bmN0aW9uIG9uQ2xpY2soZSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHZhciBpbmRleCA9ICQodGhpcykuaW5kZXgoKSAqIHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXA7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmxvb3ApIGluZGV4ICs9IHN3aXBlci5sb29wZWRTbGlkZXM7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvKGluZGV4KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGV4dGVuZChzd2lwZXIucGFnaW5hdGlvbiwge1xuICAgICAgJGVsOiAkZWwsXG4gICAgICBlbDogJGVsWzBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXN3aXBlci5lbmFibGVkKSB7XG4gICAgICAkZWwuYWRkQ2xhc3MocGFyYW1zLmxvY2tDbGFzcyk7XG4gICAgfVxuICB9LFxuICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLnBhZ2luYXRpb247XG4gICAgaWYgKCFwYXJhbXMuZWwgfHwgIXN3aXBlci5wYWdpbmF0aW9uLmVsIHx8ICFzd2lwZXIucGFnaW5hdGlvbi4kZWwgfHwgc3dpcGVyLnBhZ2luYXRpb24uJGVsLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIHZhciAkZWwgPSBzd2lwZXIucGFnaW5hdGlvbi4kZWw7XG4gICAgJGVsLnJlbW92ZUNsYXNzKHBhcmFtcy5oaWRkZW5DbGFzcyk7XG4gICAgJGVsLnJlbW92ZUNsYXNzKHBhcmFtcy5tb2RpZmllckNsYXNzICsgcGFyYW1zLnR5cGUpO1xuICAgIGlmIChzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRzKSBzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRzLnJlbW92ZUNsYXNzKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcyk7XG5cbiAgICBpZiAocGFyYW1zLmNsaWNrYWJsZSkge1xuICAgICAgJGVsLm9mZignY2xpY2snLCBjbGFzc2VzVG9TZWxlY3RvcihwYXJhbXMuYnVsbGV0Q2xhc3MpKTtcbiAgICB9XG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdwYWdpbmF0aW9uJyxcbiAgcGFyYW1zOiB7XG4gICAgcGFnaW5hdGlvbjoge1xuICAgICAgZWw6IG51bGwsXG4gICAgICBidWxsZXRFbGVtZW50OiAnc3BhbicsXG4gICAgICBjbGlja2FibGU6IGZhbHNlLFxuICAgICAgaGlkZU9uQ2xpY2s6IGZhbHNlLFxuICAgICAgcmVuZGVyQnVsbGV0OiBudWxsLFxuICAgICAgcmVuZGVyUHJvZ3Jlc3NiYXI6IG51bGwsXG4gICAgICByZW5kZXJGcmFjdGlvbjogbnVsbCxcbiAgICAgIHJlbmRlckN1c3RvbTogbnVsbCxcbiAgICAgIHByb2dyZXNzYmFyT3Bwb3NpdGU6IGZhbHNlLFxuICAgICAgdHlwZTogJ2J1bGxldHMnLFxuICAgICAgLy8gJ2J1bGxldHMnIG9yICdwcm9ncmVzc2Jhcicgb3IgJ2ZyYWN0aW9uJyBvciAnY3VzdG9tJ1xuICAgICAgZHluYW1pY0J1bGxldHM6IGZhbHNlLFxuICAgICAgZHluYW1pY01haW5CdWxsZXRzOiAxLFxuICAgICAgZm9ybWF0RnJhY3Rpb25DdXJyZW50OiBmdW5jdGlvbiBmb3JtYXRGcmFjdGlvbkN1cnJlbnQobnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICB9LFxuICAgICAgZm9ybWF0RnJhY3Rpb25Ub3RhbDogZnVuY3Rpb24gZm9ybWF0RnJhY3Rpb25Ub3RhbChudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgIH0sXG4gICAgICBidWxsZXRDbGFzczogJ3N3aXBlci1wYWdpbmF0aW9uLWJ1bGxldCcsXG4gICAgICBidWxsZXRBY3RpdmVDbGFzczogJ3N3aXBlci1wYWdpbmF0aW9uLWJ1bGxldC1hY3RpdmUnLFxuICAgICAgbW9kaWZpZXJDbGFzczogJ3N3aXBlci1wYWdpbmF0aW9uLScsXG4gICAgICAvLyBORVdcbiAgICAgIGN1cnJlbnRDbGFzczogJ3N3aXBlci1wYWdpbmF0aW9uLWN1cnJlbnQnLFxuICAgICAgdG90YWxDbGFzczogJ3N3aXBlci1wYWdpbmF0aW9uLXRvdGFsJyxcbiAgICAgIGhpZGRlbkNsYXNzOiAnc3dpcGVyLXBhZ2luYXRpb24taGlkZGVuJyxcbiAgICAgIHByb2dyZXNzYmFyRmlsbENsYXNzOiAnc3dpcGVyLXBhZ2luYXRpb24tcHJvZ3Jlc3NiYXItZmlsbCcsXG4gICAgICBwcm9ncmVzc2Jhck9wcG9zaXRlQ2xhc3M6ICdzd2lwZXItcGFnaW5hdGlvbi1wcm9ncmVzc2Jhci1vcHBvc2l0ZScsXG4gICAgICBjbGlja2FibGVDbGFzczogJ3N3aXBlci1wYWdpbmF0aW9uLWNsaWNrYWJsZScsXG4gICAgICAvLyBORVdcbiAgICAgIGxvY2tDbGFzczogJ3N3aXBlci1wYWdpbmF0aW9uLWxvY2snXG4gICAgfVxuICB9LFxuICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICBiaW5kTW9kdWxlTWV0aG9kcyhzd2lwZXIsIHtcbiAgICAgIHBhZ2luYXRpb246IF9leHRlbmRzKHtcbiAgICAgICAgZHluYW1pY0J1bGxldEluZGV4OiAwXG4gICAgICB9LCBQYWdpbmF0aW9uKVxuICAgIH0pO1xuICB9LFxuICBvbjoge1xuICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoc3dpcGVyKSB7XG4gICAgICBzd2lwZXIucGFnaW5hdGlvbi5pbml0KCk7XG4gICAgICBzd2lwZXIucGFnaW5hdGlvbi5yZW5kZXIoKTtcbiAgICAgIHN3aXBlci5wYWdpbmF0aW9uLnVwZGF0ZSgpO1xuICAgIH0sXG4gICAgYWN0aXZlSW5kZXhDaGFuZ2U6IGZ1bmN0aW9uIGFjdGl2ZUluZGV4Q2hhbmdlKHN3aXBlcikge1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgICBzd2lwZXIucGFnaW5hdGlvbi51cGRhdGUoKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN3aXBlci5zbmFwSW5kZXggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgI
118HN3aXBlci5wYWdpbmF0aW9uLnVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgc25hcEluZGV4Q2hhbmdlOiBmdW5jdGlvbiBzbmFwSW5kZXhDaGFuZ2Uoc3dpcGVyKSB7XG4gICAgICBpZiAoIXN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgICBzd2lwZXIucGFnaW5hdGlvbi51cGRhdGUoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNsaWRlc0xlbmd0aENoYW5nZTogZnVuY3Rpb24gc2xpZGVzTGVuZ3RoQ2hhbmdlKHN3aXBlcikge1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgICBzd2lwZXIucGFnaW5hdGlvbi5yZW5kZXIoKTtcbiAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24udXBkYXRlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzbmFwR3JpZExlbmd0aENoYW5nZTogZnVuY3Rpb24gc25hcEdyaWRMZW5ndGhDaGFuZ2Uoc3dpcGVyKSB7XG4gICAgICBpZiAoIXN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgICBzd2lwZXIucGFnaW5hdGlvbi5yZW5kZXIoKTtcbiAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24udXBkYXRlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KHN3aXBlcikge1xuICAgICAgc3dpcGVyLnBhZ2luYXRpb24uZGVzdHJveSgpO1xuICAgIH0sXG4gICAgJ2VuYWJsZSBkaXNhYmxlJzogZnVuY3Rpb24gZW5hYmxlRGlzYWJsZShzd2lwZXIpIHtcbiAgICAgIHZhciAkZWwgPSBzd2lwZXIucGFnaW5hdGlvbi4kZWw7XG5cbiAgICAgIGlmICgkZWwpIHtcbiAgICAgICAgJGVsW3N3aXBlci5lbmFibGVkID8gJ3JlbW92ZUNsYXNzJyA6ICdhZGRDbGFzcyddKHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5sb2NrQ2xhc3MpO1xuICAgICAgfVxuICAgIH0sXG4gICAgY2xpY2s6IGZ1bmN0aW9uIGNsaWNrKHN3aXBlciwgZSkge1xuICAgICAgdmFyIHRhcmdldEVsID0gZS50YXJnZXQ7XG5cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24uZWwgJiYgc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmhpZGVPbkNsaWNrICYmIHN3aXBlci5wYWdpbmF0aW9uLiRlbC5sZW5ndGggPiAwICYmICEkKHRhcmdldEVsKS5oYXNDbGFzcyhzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24uYnVsbGV0Q2xhc3MpKSB7XG4gICAgICAgIGlmIChzd2lwZXIubmF2aWdhdGlvbiAmJiAoc3dpcGVyLm5hdmlnYXRpb24ubmV4dEVsICYmIHRhcmdldEVsID09PSBzd2lwZXIubmF2aWdhdGlvbi5uZXh0RWwgfHwgc3dpcGVyLm5hdmlnYXRpb24ucHJldkVsICYmIHRhcmdldEVsID09PSBzd2lwZXIubmF2aWdhdGlvbi5wcmV2RWwpKSByZXR1cm47XG4gICAgICAgIHZhciBpc0hpZGRlbiA9IHN3aXBlci5wYWdpbmF0aW9uLiRlbC5oYXNDbGFzcyhzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24uaGlkZGVuQ2xhc3MpO1xuXG4gICAgICAgIGlmIChpc0hpZGRlbiA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHN3aXBlci5lbWl0KCdwYWdpbmF0aW9uU2hvdycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN3aXBlci5lbWl0KCdwYWdpbmF0aW9uSGlkZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24uJGVsLnRvZ2dsZUNsYXNzKHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5oaWRkZW5DbGFzcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmltcG9ydCB7IGV4dGVuZCwgYmluZE1vZHVsZU1ldGhvZHMgfSBmcm9tICcuLi8uLi91dGlscy91dGlscyc7XG52YXIgRmFkZSA9IHtcbiAgc2V0VHJhbnNsYXRlOiBmdW5jdGlvbiBzZXRUcmFuc2xhdGUoKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIHNsaWRlcyA9IHN3aXBlci5zbGlkZXM7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgdmFyICRzbGlkZUVsID0gc3dpcGVyLnNsaWRlcy5lcShpKTtcbiAgICAgIHZhciBvZmZzZXQgPSAkc2xpZGVFbFswXS5zd2lwZXJTbGlkZU9mZnNldDtcbiAgICAgIHZhciB0eCA9IC1vZmZzZXQ7XG4gICAgICBpZiAoIXN3aXBlci5wYXJhbXMudmlydHVhbFRyYW5zbGF0ZSkgdHggLT0gc3dpcGVyLnRyYW5zbGF0ZTtcbiAgICAgIHZhciB0eSA9IDA7XG5cbiAgICAgIGlmICghc3dpcGVyLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICAgIHR5ID0gdHg7XG4gICAgICAgIHR4ID0gMDtcbiAgICAgIH1cblxuICAgICAgdmFyIHNsaWRlT3BhY2l0eSA9IHN3aXBlci5wYXJhbXMuZmFkZUVmZmVjdC5jcm9zc0ZhZGUgPyBNYXRoLm1heCgxIC0gTWF0aC5hYnMoJHNsaWRlRWxbMF0ucHJvZ3Jlc3MpLCAwKSA6IDEgKyBNYXRoLm1pbihNYXRoLm1heCgkc2xpZGVFbFswXS5wcm9ncmVzcywgLTEpLCAwKTtcbiAgICAgICRzbGlkZUVsLmNzcyh7XG4gICAgICAgIG9wYWNpdHk6IHNsaWRlT3BhY2l0eVxuICAgICAgfSkudHJhbnNmb3JtKFwidHJhbnNsYXRlM2QoXCIgKyB0eCArIFwicHgsIFwiICsgdHkgKyBcInB4LCAwcHgpXCIpO1xuICAgIH1cbiAgfSxcbiAgc2V0VHJhbnNpdGlvbjogZnVuY3Rpb24gc2V0VHJhbnNpdGlvbihkdXJhdGlvbikge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciBzbGlkZXMgPSBzd2lwZXIuc2xpZGVzLFxuICAgICAgICAkd3JhcHBlckVsID0gc3dpcGVyLiR3cmFwcGVyRWw7XG4gICAgc2xpZGVzLnRyYW5zaXRpb24oZHVyYXRpb24pO1xuXG4gICAgaWYgKHN3aXBlci5wYXJhbXMudmlydHVhbFRyYW5zbGF0ZSAmJiBkdXJhdGlvbiAhPT0gMCkge1xuICAgICAgdmFyIGV2ZW50VHJpZ2dlcmVkID0gZmFsc2U7XG4gICAgICBzbGlkZXMudHJhbnNpdGlvbkVuZChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChldmVudFRyaWdnZXJlZCkgcmV0dXJuO1xuICAgICAgICBpZiAoIXN3aXBlciB8fCBzd2lwZXIuZGVzdHJveWVkKSByZXR1cm47XG4gICAgICAgIGV2ZW50VHJpZ2dlcmVkID0gdHJ1ZTtcbiAgICAgICAgc3dpcGVyLmFuaW1hdGluZyA9IGZhbHNlO1xuICAgICAgICB2Y
118XIgdHJpZ2dlckV2ZW50cyA9IFsnd2Via2l0VHJhbnNpdGlvbkVuZCcsICd0cmFuc2l0aW9uZW5kJ107XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmlnZ2VyRXZlbnRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgJHdyYXBwZXJFbC50cmlnZ2VyKHRyaWdnZXJFdmVudHNbaV0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdlZmZlY3QtZmFkZScsXG4gIHBhcmFtczoge1xuICAgIGZhZGVFZmZlY3Q6IHtcbiAgICAgIGNyb3NzRmFkZTogZmFsc2VcbiAgICB9XG4gIH0sXG4gIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIGJpbmRNb2R1bGVNZXRob2RzKHN3aXBlciwge1xuICAgICAgZmFkZUVmZmVjdDogX2V4dGVuZHMoe30sIEZhZGUpXG4gICAgfSk7XG4gIH0sXG4gIG9uOiB7XG4gICAgYmVmb3JlSW5pdDogZnVuY3Rpb24gYmVmb3JlSW5pdChzd2lwZXIpIHtcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmVmZmVjdCAhPT0gJ2ZhZGUnKSByZXR1cm47XG4gICAgICBzd2lwZXIuY2xhc3NOYW1lcy5wdXNoKHN3aXBlci5wYXJhbXMuY29udGFpbmVyTW9kaWZpZXJDbGFzcyArIFwiZmFkZVwiKTtcbiAgICAgIHZhciBvdmVyd3JpdGVQYXJhbXMgPSB7XG4gICAgICAgIHNsaWRlc1BlclZpZXc6IDEsXG4gICAgICAgIHNsaWRlc1BlckNvbHVtbjogMSxcbiAgICAgICAgc2xpZGVzUGVyR3JvdXA6IDEsXG4gICAgICAgIHdhdGNoU2xpZGVzUHJvZ3Jlc3M6IHRydWUsXG4gICAgICAgIHNwYWNlQmV0d2VlbjogMCxcbiAgICAgICAgdmlydHVhbFRyYW5zbGF0ZTogdHJ1ZVxuICAgICAgfTtcbiAgICAgIGV4dGVuZChzd2lwZXIucGFyYW1zLCBvdmVyd3JpdGVQYXJhbXMpO1xuICAgICAgZXh0ZW5kKHN3aXBlci5vcmlnaW5hbFBhcmFtcywgb3ZlcndyaXRlUGFyYW1zKTtcbiAgICB9LFxuICAgIHNldFRyYW5zbGF0ZTogZnVuY3Rpb24gc2V0VHJhbnNsYXRlKHN3aXBlcikge1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZWZmZWN0ICE9PSAnZmFkZScpIHJldHVybjtcbiAgICAgIHN3aXBlci5mYWRlRWZmZWN0LnNldFRyYW5zbGF0ZSgpO1xuICAgIH0sXG4gICAgc2V0VHJhbnNpdGlvbjogZnVuY3Rpb24gc2V0VHJhbnNpdGlvbihzd2lwZXIsIGR1cmF0aW9uKSB7XG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5lZmZlY3QgIT09ICdmYWRlJykgcmV0dXJuO1xuICAgICAgc3dpcGVyLmZhZGVFZmZlY3Quc2V0VHJhbnNpdGlvbihkdXJhdGlvbik7XG4gICAgfVxuICB9XG59OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbi8qIGVzbGludCBuby11bmRlcnNjb3JlLWRhbmdsZTogXCJvZmZcIiAqL1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tICdzc3Itd2luZG93JztcbmltcG9ydCB7IG5leHRUaWNrLCBiaW5kTW9kdWxlTWV0aG9kcyB9IGZyb20gJy4uLy4uL3V0aWxzL3V0aWxzJztcbnZhciBBdXRvcGxheSA9IHtcbiAgcnVuOiBmdW5jdGlvbiBydW4oKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyICRhY3RpdmVTbGlkZUVsID0gc3dpcGVyLnNsaWRlcy5lcShzd2lwZXIuYWN0aXZlSW5kZXgpO1xuICAgIHZhciBkZWxheSA9IHN3aXBlci5wYXJhbXMuYXV0b3BsYXkuZGVsYXk7XG5cbiAgICBpZiAoJGFjdGl2ZVNsaWRlRWwuYXR0cignZGF0YS1zd2lwZXItYXV0b3BsYXknKSkge1xuICAgICAgZGVsYXkgPSAkYWN0aXZlU2xpZGVFbC5hdHRyKCdkYXRhLXN3aXBlci1hdXRvcGxheScpIHx8IHN3aXBlci5wYXJhbXMuYXV0b3BsYXkuZGVsYXk7XG4gICAgfVxuXG4gICAgY2xlYXJUaW1lb3V0KHN3aXBlci5hdXRvcGxheS50aW1lb3V0KTtcbiAgICBzd2lwZXIuYXV0b3BsYXkudGltZW91dCA9IG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBhdXRvcGxheVJlc3VsdDtcblxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuYXV0b3BsYXkucmV2ZXJzZURpcmVjdGlvbikge1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgICAgICAgc3dpcGVyLmxvb3BGaXgoKTtcbiAgICAgICAgICBhdXRvcGxheVJlc3VsdCA9IHN3aXBlci5zbGlkZVByZXYoc3dpcGVyLnBhcmFtcy5zcGVlZCwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgICAgc3dpcGVyLmVtaXQoJ2F1dG9wbGF5Jyk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXN3aXBlci5pc0JlZ2lubmluZykge1xuICAgICAgICAgIGF1dG9wbGF5UmVzdWx0ID0gc3dpcGVyLnNsaWRlUHJldihzd2lwZXIucGFyYW1zLnNwZWVkLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgICBzd2lwZXIuZW1pdCgnYXV0b3BsYXknKTtcbiAgICAgICAgfSBlbHNlIGlmICghc3dpcGVyLnBhcmFtcy5hdXRvcGxheS5zdG9wT25MYXN0U2xpZGUpIHtcbiAgICAgICAgICBhdXRvcGxheVJlc3VsdCA9IHN3aXBlci5zbGlkZVRvKHN3aXBlci5zbGlkZXMubGVuZ3RoIC0gMSwgc3dpcGVyLnBhcmFtcy5zcGVlZCwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgICAgc3dpcGVyLmVtaXQoJ2F1dG9wbGF5Jyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3dpcGVyLmF1dG9wbGF5LnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzd2lwZXIucGFyYW1zLmxvb3ApIHtcbiAgICAgICAgc3dpcGVyLmxvb3BGaXgoKTtcbiAgICAgICAgYXV0b3BsYXlSZXN1bHQgPSBzd2lwZXIuc2xpZGVOZXh0KHN3aXBlci5wYXJhbXMuc3BlZWQsIHRydWUsIHRydWUpO1xuICAgICAgICBzd2lwZXIuZW1pdCgnYXV0b3BsYXknKTtcbiAgICAgIH0gZWxzZSBpZiAoIXN3aXBlci5pc0VuZCkge1xuICAgICAgICBhdXRvcGxheVJlc3VsdCA9IHN3aXBlci5zbGlkZU5leHQoc3dpcGVyLnBhcmFtcy5zcGVlZCwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgI
118HN3aXBlci5lbWl0KCdhdXRvcGxheScpO1xuICAgICAgfSBlbHNlIGlmICghc3dpcGVyLnBhcmFtcy5hdXRvcGxheS5zdG9wT25MYXN0U2xpZGUpIHtcbiAgICAgICAgYXV0b3BsYXlSZXN1bHQgPSBzd2lwZXIuc2xpZGVUbygwLCBzd2lwZXIucGFyYW1zLnNwZWVkLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgc3dpcGVyLmVtaXQoJ2F1dG9wbGF5Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2lwZXIuYXV0b3BsYXkuc3RvcCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5jc3NNb2RlICYmIHN3aXBlci5hdXRvcGxheS5ydW5uaW5nKSBzd2lwZXIuYXV0b3BsYXkucnVuKCk7ZWxzZSBpZiAoYXV0b3BsYXlSZXN1bHQgPT09IGZhbHNlKSB7XG4gICAgICAgIHN3aXBlci5hdXRvcGxheS5ydW4oKTtcbiAgICAgIH1cbiAgICB9LCBkZWxheSk7XG4gIH0sXG4gIHN0YXJ0OiBmdW5jdGlvbiBzdGFydCgpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICBpZiAodHlwZW9mIHN3aXBlci5hdXRvcGxheS50aW1lb3V0ICE9PSAndW5kZWZpbmVkJykgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChzd2lwZXIuYXV0b3BsYXkucnVubmluZykgcmV0dXJuIGZhbHNlO1xuICAgIHN3aXBlci5hdXRvcGxheS5ydW5uaW5nID0gdHJ1ZTtcbiAgICBzd2lwZXIuZW1pdCgnYXV0b3BsYXlTdGFydCcpO1xuICAgIHN3aXBlci5hdXRvcGxheS5ydW4oKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgc3RvcDogZnVuY3Rpb24gc3RvcCgpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICBpZiAoIXN3aXBlci5hdXRvcGxheS5ydW5uaW5nKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBzd2lwZXIuYXV0b3BsYXkudGltZW91dCA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiBmYWxzZTtcblxuICAgIGlmIChzd2lwZXIuYXV0b3BsYXkudGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHN3aXBlci5hdXRvcGxheS50aW1lb3V0KTtcbiAgICAgIHN3aXBlci5hdXRvcGxheS50aW1lb3V0ID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHN3aXBlci5hdXRvcGxheS5ydW5uaW5nID0gZmFsc2U7XG4gICAgc3dpcGVyLmVtaXQoJ2F1dG9wbGF5U3RvcCcpO1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICBwYXVzZTogZnVuY3Rpb24gcGF1c2Uoc3BlZWQpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICBpZiAoIXN3aXBlci5hdXRvcGxheS5ydW5uaW5nKSByZXR1cm47XG4gICAgaWYgKHN3aXBlci5hdXRvcGxheS5wYXVzZWQpIHJldHVybjtcbiAgICBpZiAoc3dpcGVyLmF1dG9wbGF5LnRpbWVvdXQpIGNsZWFyVGltZW91dChzd2lwZXIuYXV0b3BsYXkudGltZW91dCk7XG4gICAgc3dpcGVyLmF1dG9wbGF5LnBhdXNlZCA9IHRydWU7XG5cbiAgICBpZiAoc3BlZWQgPT09IDAgfHwgIXN3aXBlci5wYXJhbXMuYXV0b3BsYXkud2FpdEZvclRyYW5zaXRpb24pIHtcbiAgICAgIHN3aXBlci5hdXRvcGxheS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgIHN3aXBlci5hdXRvcGxheS5ydW4oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgWyd0cmFuc2l0aW9uZW5kJywgJ3dlYmtpdFRyYW5zaXRpb25FbmQnXS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbFswXS5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBzd2lwZXIuYXV0b3BsYXkub25UcmFuc2l0aW9uRW5kKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgb25WaXNpYmlsaXR5Q2hhbmdlOiBmdW5jdGlvbiBvblZpc2liaWxpdHlDaGFuZ2UoKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcblxuICAgIGlmIChkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09ICdoaWRkZW4nICYmIHN3aXBlci5hdXRvcGxheS5ydW5uaW5nKSB7XG4gICAgICBzd2lwZXIuYXV0b3BsYXkucGF1c2UoKTtcbiAgICB9XG5cbiAgICBpZiAoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlID09PSAndmlzaWJsZScgJiYgc3dpcGVyLmF1dG9wbGF5LnBhdXNlZCkge1xuICAgICAgc3dpcGVyLmF1dG9wbGF5LnJ1bigpO1xuICAgICAgc3dpcGVyLmF1dG9wbGF5LnBhdXNlZCA9IGZhbHNlO1xuICAgIH1cbiAgfSxcbiAgb25UcmFuc2l0aW9uRW5kOiBmdW5jdGlvbiBvblRyYW5zaXRpb25FbmQoZSkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQgfHwgIXN3aXBlci4kd3JhcHBlckVsKSByZXR1cm47XG4gICAgaWYgKGUudGFyZ2V0ICE9PSBzd2lwZXIuJHdyYXBwZXJFbFswXSkgcmV0dXJuO1xuICAgIFsndHJhbnNpdGlvbmVuZCcsICd3ZWJraXRUcmFuc2l0aW9uRW5kJ10uZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHN3aXBlci4kd3JhcHBlckVsWzBdLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIHN3aXBlci5hdXRvcGxheS5vblRyYW5zaXRpb25FbmQpO1xuICAgIH0pO1xuICAgIHN3aXBlci5hdXRvcGxheS5wYXVzZWQgPSBmYWxzZTtcblxuICAgIGlmICghc3dpcGVyLmF1dG9wbGF5LnJ1bm5pbmcpIHtcbiAgICAgIHN3aXBlci5hdXRvcGxheS5zdG9wKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXBlci5hdXRvcGxheS5ydW4oKTtcbiAgICB9XG4gIH0sXG4gIG9uTW91c2VFbnRlcjogZnVuY3Rpb24gb25Nb3VzZUVudGVyKCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuXG4gICAgaWYgKHN3aXBlci5wYXJhbXMuYXV0b3BsYXkuZGlzYWJsZU9uSW50ZXJhY3Rpb24pIHtcbiAgICAgIHN3aXBlci5hdXRvcGxheS5zdG9wKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXBlci5hdXRvcGxheS5wYXVzZSgpO1xuICAgIH1cblxuICAgIFsndHJhbnNpdGlvbmVuZCcsICd3ZWJraXRUcmFuc2l0aW9uRW5kJ10uZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHN3aXBlci4kd3JhcHBlckVsWzBdLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIHN3aXBlci5hdXRvcGxheS5vblRyYW5zaXRpb25FbmQpO1xuICAgIH0pO1xuICB9LFxuICBvbk1vdXNlTGVhdmU6IGZ1bmN0aW9uIG9uTW91c2VMZWF2ZSgpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcblxuICAgIGlmIChzd2lwZXIucGFyYW1zLmF1dG9wbGF5LmRpc2FibGVPbkludGVyYWN0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3dpcGVyLmF1dG9wbGF5LnBhdXNlZCA9IGZhbHNlO1xuICAgIHN3aXBlci5hdXRvcGxheS5ydW4oKTtcbiAgfSxcbiAgYXR0YWNoTW91c2VFdmVudHM6IGZ1bmN0aW9uIGF0dGFjaE1vdXNlRXZlbnRzKCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuXG4gICAgaWYgKHN3aXBlci5wYXJhbXMuYXV0b3BsYXkucGF1c2VPbk1vdXNlRW50ZXIpIHtcbiAgICAgIHN3aXBlci4kZWwub24oJ21vdXNlZW50ZXInLCBzd2lwZXIuYXV0b3BsYXkub25Nb3VzZUVudGVyKTtcbiAgICAgIHN3aXBlci4kZWwub24oJ21vdXNlbGVhdmUnLCBzd2lwZXIuYXV0b3BsYXkub25Nb3VzZUxlYXZlKTtcbiAgICB9XG4gI
118H0sXG4gIGRldGFjaE1vdXNlRXZlbnRzOiBmdW5jdGlvbiBkZXRhY2hNb3VzZUV2ZW50cygpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICBzd2lwZXIuJGVsLm9mZignbW91c2VlbnRlcicsIHN3aXBlci5hdXRvcGxheS5vbk1vdXNlRW50ZXIpO1xuICAgIHN3aXBlci4kZWwub2ZmKCdtb3VzZWxlYXZlJywgc3dpcGVyLmF1dG9wbGF5Lm9uTW91c2VMZWF2ZSk7XG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdhdXRvcGxheScsXG4gIHBhcmFtczoge1xuICAgIGF1dG9wbGF5OiB7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIGRlbGF5OiAzMDAwLFxuICAgICAgd2FpdEZvclRyYW5zaXRpb246IHRydWUsXG4gICAgICBkaXNhYmxlT25JbnRlcmFjdGlvbjogdHJ1ZSxcbiAgICAgIHN0b3BPbkxhc3RTbGlkZTogZmFsc2UsXG4gICAgICByZXZlcnNlRGlyZWN0aW9uOiBmYWxzZSxcbiAgICAgIHBhdXNlT25Nb3VzZUVudGVyOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgYmluZE1vZHVsZU1ldGhvZHMoc3dpcGVyLCB7XG4gICAgICBhdXRvcGxheTogX2V4dGVuZHMoe30sIEF1dG9wbGF5LCB7XG4gICAgICAgIHJ1bm5pbmc6IGZhbHNlLFxuICAgICAgICBwYXVzZWQ6IGZhbHNlXG4gICAgICB9KVxuICAgIH0pO1xuICB9LFxuICBvbjoge1xuICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoc3dpcGVyKSB7XG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5hdXRvcGxheS5lbmFibGVkKSB7XG4gICAgICAgIHN3aXBlci5hdXRvcGxheS5zdGFydCgpO1xuICAgICAgICB2Y
118XIgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgc3dpcGVyLmF1dG9wbGF5Lm9uVmlzaWJpbGl0eUNoYW5nZSk7XG4gICAgICAgIHN3aXBlci5hdXRvcGxheS5hdHRhY2hNb3VzZUV2ZW50cygpO1xuICAgICAgfVxuICAgIH0sXG4gICAgYmVmb3JlVHJhbnNpdGlvblN0YXJ0OiBmdW5jdGlvbiBiZWZvcmVUcmFuc2l0aW9uU3RhcnQoc3dpcGVyLCBzcGVlZCwgaW50ZXJuYWwpIHtcbiAgICAgIGlmIChzd2lwZXIuYXV0b3BsYXkucnVubmluZykge1xuICAgICAgICBpZiAoaW50ZXJuYWwgfHwgIXN3aXBlci5wYXJhbXMuYXV0b3BsYXkuZGlzYWJsZU9uSW50ZXJhY3Rpb24pIHtcbiAgICAgICAgICBzd2lwZXIuYXV0b3BsYXkucGF1c2Uoc3BlZWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN3aXBlci5hdXRvcGxheS5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHNsaWRlckZpcnN0TW92ZTogZnVuY3Rpb24gc2xpZGVyRmlyc3RNb3ZlKHN3aXBlcikge1xuICAgICAgaWYgKHN3aXBlci5hdXRvcGxheS5ydW5uaW5nKSB7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmF1dG9wbGF5LmRpc2FibGVPbkludGVyYWN0aW9uKSB7XG4gICAgICAgICAgc3dpcGVyLmF1dG9wbGF5LnN0b3AoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzd2lwZXIuYXV0b3BsYXkucGF1c2UoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgdG91Y2hFbmQ6IGZ1bmN0aW9uIHRvdWNoRW5kKHN3aXBlcikge1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuY3NzTW9kZSAmJiBzd2lwZXIuYXV0b3BsYXkucGF1c2VkICYmICFzd2lwZXIucGFyYW1zLmF1dG9wbGF5LmRpc2FibGVPbkludGVyYWN0aW9uKSB7XG4gICAgICAgIHN3aXBlci5hdXRvcGxheS5ydW4oKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koc3dpcGVyKSB7XG4gICAgICBzd2lwZXIuYXV0b3BsYXkuZGV0YWNoTW91c2VFdmVudHMoKTtcblxuICAgICAgaWYgKHN3aXBlci5hdXRvcGxheS5ydW5uaW5nKSB7XG4gICAgICAgIHN3aXBlci5hdXRvcGxheS5zdG9wKCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG4gICAgICBkb2
118N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgc3dpcGVyLmF1dG9wbGF5Lm9uVmlzaWJpbGl0eUNoYW5nZSk7XG4gICAgfVxuICB9XG59OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSAnc3NyLXdpbmRvdyc7XG5pbXBvcnQgJCBmcm9tICcuLi8uLi91dGlscy9kb20nO1xuaW1wb3J0IHsgZXh0ZW5kLCBuZXh0VGljaywgYmluZE1vZHVsZU1ldGhvZHMsIGNyZWF0ZUVsZW1lbnRJZk5vdERlZmluZWQgfSBmcm9tICcuLi8uLi91dGlscy91dGlscyc7XG52YXIgU2Nyb2xsYmFyID0ge1xuICBzZXRUcmFuc2xhdGU6IGZ1bmN0aW9uIHNldFRyYW5zbGF0ZSgpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICBpZiAoIXN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyLmVsIHx8ICFzd2lwZXIuc2Nyb2xsYmFyLmVsKSByZXR1cm47XG4gICAgdmFyIHNjcm9sbGJhciA9IHN3aXBlci5zY3JvbGxiYXIsXG4gICAgICAgIHJ0bCA9IHN3aXBlci5ydGxUcmFuc2xhdGUsXG4gICAgICAgIHByb2dyZXNzID0gc3dpcGVyLnByb2dyZXNzO1xuICAgIHZhciBkcmFnU2l6ZSA9IHNjcm9sbGJhci5kcmFnU2l6ZSxcbiAgICAgICAgdHJhY2tTaXplID0gc2Nyb2xsYmFyLnRyYWNrU2l6ZSxcbiAgICAgICAgJGRyYWdFbCA9IHNjcm9sbGJhci4kZHJhZ0VsLFxuICAgICAgICAkZWwgPSBzY3JvbGxiYXIuJGVsO1xuICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLnNjcm9sbGJhcjtcbiAgICB2YXIgbmV3U2l6ZSA9IGRyYWdTaXplO1xuICAgIHZhciBuZXdQb3MgPSAodHJhY2tTaXplIC0gZHJhZ1NpemUpICogcHJvZ3Jlc3M7XG5cbiAgICBpZiAocnRsKSB7XG4gICAgICBuZXdQb3MgPSAtbmV3UG9zO1xuXG4gICAgICBpZiAobmV3UG9zID4gMCkge1xuICAgICAgICBuZXdTaXplID0gZHJhZ1NpemUgLSBuZXdQb3M7XG4gICAgICAgIG5ld1BvcyA9IDA7XG4gICAgICB9IGVsc2UgaWYgKC1uZXdQb3MgKyBkcmFnU2l6ZSA+IHRyYWNrU2l6ZSkge1xuICAgICAgICBuZXdTaXplID0gdHJhY2tTaXplICsgbmV3UG9zO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobmV3UG9zIDwgMCkge1xuICAgICAgbmV3U2l6ZSA9IGRyYWdTaXplICsgbmV3UG9zO1xuICAgICAgbmV3UG9zID0gMDtcbiAgICB9IGVsc2UgaWYgKG5ld1BvcyArIGRyYWdTaXplID4gdHJhY2tTaXplKSB7XG4gICAgICBuZXdTaXplID0gdHJhY2tTaXplIC0gbmV3UG9zO1xuICAgIH1cblxuICAgIGlmIChzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICRkcmFnRWwudHJhbnNmb3JtKFwidHJhbnNsYXRlM2QoXCIgKyBuZXdQb3MgKyBcInB4LCAwLCAwKVwiKTtcbiAgICAgICRkcmFnRWxbMF0uc3R5bGUud2lkdGggPSBuZXdTaXplICsgXCJweFwiO1xuICAgIH0gZWxzZSB7XG4gICAgICAkZHJhZ0VsLnRyYW5zZm9ybShcInRyYW5zbGF0ZTNkKDBweCwgXCIgKyBuZXdQb3MgKyBcInB4LCAwKVwiKTtcbiAgICAgICRkcmFnRWxbMF0uc3R5bGUuaGVpZ2h0ID0gbmV3U2l6ZSArIFwicHhcIjtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLmhpZGUpIHtcbiAgICAgIGNsZWFyVGltZW91dChzd2lwZXIuc2Nyb2xsYmFyLnRpbWVvdXQpO1xuICAgICAgJGVsWzBdLnN0eWxlLm9wYWNpdHkgPSAxO1xuICAgICAgc3dpcGVyLnNjcm9sbGJhci50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICRlbFswXS5zdHlsZS5vcGFjaXR5ID0gMDtcbiAgICAgICAgJGVsLnRyYW5zaXRpb24oNDAwKTtcbiAgICAgIH0sIDEwMDApO1xuICAgIH1cbiAgfSxcbiAgc2V0VHJhbnNpdGlvbjogZnVuY3Rpb24gc2V0VHJhbnNpdGlvbihkdXJhdGlvbikge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIGlmICghc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXIuZWwgfHwgIXN3aXBlci5zY3JvbGxiYXIuZWwpIHJldHVybjtcbiAgICBzd2lwZXIuc2Nyb2xsYmFyLiRkcmFnRWwudHJhbnNpdGlvbihkdXJhdGlvbik7XG4gIH0sXG4gIHVwZGF0ZVNpemU6IGZ1bmN0aW9uIHVwZGF0ZVNpemUoKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgaWYgKCFzd2lwZXIucGFyYW1zLnNjcm9sbGJhci5lbCB8fCAhc3dpcGVyLnNjcm9sbGJhci5lbCkgcmV0dXJuO1xuICAgIHZhciBzY3JvbGxiYXIgPSBzd2lwZXIuc2Nyb2xsYmFyO1xuICAgIHZhciAkZHJhZ0VsID0gc2Nyb2xsYmFyLiRkcmFnRWwsXG4gICAgICAgICRlbCA9IHNjcm9sbGJhci4kZWw7XG4gICAgJGRyYWdFbFswXS5zdHlsZS53aWR0aCA9ICcnO1xuICAgICRkcmFnRWxbMF0uc3R5bGUuaGVpZ2h0ID0gJyc7XG4gICAgdmFyIHRyYWNrU2l6ZSA9IHN3aXBlci5pc0hvcml6b250YWwoKSA/ICRlbFswXS5vZmZzZXRXaWR0aCA6ICRlbFswXS5vZmZzZXRIZWlnaHQ7XG4gICAgdmFyIGRpdmlkZXIgPSBzd2lwZXIuc2l6ZSAvIHN3aXBlci52aXJ0dWFsU2l6ZTtcbiAgICB2YXIgbW92ZURpdmlkZXIgPSBkaXZpZGVyICogKHRyYWNrU2l6ZSAvIHN3aXBlci5zaXplKTtcbiAgICB2YXIgZHJhZ1NpemU7XG5cbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXIuZHJhZ1NpemUgPT09ICdhdXRvJykge1xuICAgICAgZHJhZ1NpemUgPSB0cmFja1NpemUgKiBkaXZpZGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICBkcmFnU2l6ZSA9IHBhcnNlSW50KHN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyLmRyYWdTaXplLCAxMCk7XG4gICAgfVxuXG4gICAgaWYgKHN3aXBlci5pc0hvcml6b250YWwoKSkge1xuICAgICAgJGRyYWdFbFswXS5zdHlsZS53aWR0aCA9IGRyYWdTaXplICsgXCJweFwiO1xuICAgIH0gZWxzZSB7XG4gICAgICAkZHJhZ0VsWzBdLnN0eWxlLmhlaWdodCA9IGRyYWdTaXplICsgXCJweFwiO1xuICAgIH1cblxuICAgIGlmIChkaXZpZGVyID49IDEpIHtcbiAgICAgICRlbFswXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH0gZWxzZSB7XG4gICAgICAkZWxbMF0uc3R5bGUuZGlzcGxheSA9ICcnO1xuICAgIH1cblxuICAgIGlmIChzd2lwZXIucGFyYW1zLnNjcm9sbGJhci5oaWRlKSB7XG4gICAgICAkZWxbMF0uc3R5bGUub3BhY2l0eSA9IDA7XG4gICAgfVxuXG4gICAgZXh0ZW5kKHNjcm9sbGJhciwge1xuICAgICAgdHJhY2tTaXplOiB0cmFja1NpemUsXG4gICAgICBkaXZpZGVyOiBkaXZpZGVyLFxuICAgICAgbW92ZURpdmlkZXI6IG1vdmVEaXZpZG
118VyLFxuICAgICAgZHJhZ1NpemU6IGRyYWdTaXplXG4gICAgfSk7XG5cbiAgICBpZiAoc3dpcGVyLnBhcmFtcy53YXRjaE92ZXJmbG93ICYmIHN3aXBlci5lbmFibGVkKSB7XG4gICAgICBzY3JvbGxiYXIuJGVsW3N3aXBlci5pc0xvY2tlZCA/ICdhZGRDbGFzcycgOiAncmVtb3ZlQ2xhc3MnXShzd2lwZXIucGFyYW1zLnNjcm9sbGJhci5sb2NrQ2xhc3MpO1xuICAgIH1cbiAgfSxcbiAgZ2V0UG9pbnRlclBvc2l0aW9uOiBmdW5jdGlvbiBnZXRQb2ludGVyUG9zaXRpb24oZSkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuXG4gICAgaWYgKHN3aXBlci5pc0hvcml6b250YWwoKSkge1xuICAgICAgcmV0dXJuIGUudHlwZSA9PT0gJ3RvdWNoc3RhcnQnIHx8IGUudHlwZSA9PT0gJ3RvdWNobW92ZScgPyBlLnRhcmdldFRvdWNoZXNbMF0uY2xpZW50WCA6IGUuY2xpZW50WDtcbiAgICB9XG5cbiAgICByZXR1cm4gZS50eXBlID09PSAndG91Y2hzdGFydCcgfHwgZS50eXBlID09PSAndG91Y2htb3ZlJyA/IGUudGFyZ2V0VG91Y2hlc1swXS5jbGllbnRZIDogZS5jbGllbnRZO1xuICB9LFxuICBzZXREcmFnUG9zaXRpb246IGZ1bmN0aW9uIHNldERyYWdQb3NpdGlvbihlKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIHNjcm9sbGJhciA9IHN3aXBlci5zY3JvbGxiYXIsXG4gICAgICAgIHJ0bCA9IHN3aXBlci5ydGxUcmFuc2xhdGU7XG4gICAgdmFyICRlbCA9IHNjcm9sbGJhci4kZWwsXG4gICAgICAgIGRyYWdTaXplID0gc2Nyb2xsYmFyLmRyYWdTaXplLFxuICAgICAgICB0cmFja1NpemUgPSBzY3JvbGxiYXIudHJhY2tTaXplLFxuICAgICAgICBkcmFnU3RhcnRQb3MgPSBzY3JvbGxiYXIuZHJhZ1N0YXJ0UG9zO1xuICAgIHZhciBwb3NpdGlvblJhdGlvO1xuICAgIHBvc2l0aW9uUmF0aW8gPSAoc2Nyb2xsYmFyLmdldFBvaW50ZXJQb3NpdGlvbihlKSAtICRlbC5vZmZzZXQoKVtzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAnbGVmdCcgOiAndG9wJ10gLSAoZHJhZ1N0YXJ0UG9zICE9PSBudWxsID8gZHJhZ1N0YXJ0UG9zIDogZHJhZ1NpemUgLyAyKSkgLyAodHJhY2tTaXplIC0gZHJhZ1NpemUpO1xuICAgIHBvc2l0aW9uUmF0aW8gPSBNYXRoLm1heChNYXRoLm1pbihwb3NpdGlvblJhdGlvLCAxKSwgMCk7XG5cbiAgICBpZiAocnRsKSB7XG4gICAgICBwb3NpdGlvblJhdGlvID0gMSAtIHBvc2l0aW9uUmF0aW87XG4gICAgfVxuXG4gICAgdmFyIHBvc2l0aW9uID0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpICsgKHN3aXBlci5tYXhUcmFuc2xhdGUoKSAtIHN3aXBlci5taW5UcmFuc2xhdGUoKSkgKiBwb3NpdGlvblJhdGlvO1xuICAgIHN3aXBlci51cGRhdGVQcm9ncmVzcyhwb3NpdGlvbik7XG4gICAgc3dpcGVyLnNldFRyYW5zbGF0ZShwb3NpdGlvbik7XG4gICAgc3dpcGVyLnVwZGF0ZUFjdGl2ZUluZGV4KCk7XG4gICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgfSxcbiAgb25EcmFnU3RhcnQ6IGZ1bmN0aW9uIG9uRHJhZ1N0YXJ0KGUpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXI7XG4gICAgdmFyIHNjcm9sbGJhciA9IHN3aXBlci5zY3JvbGxiYXIsXG4gICAgICAgICR3cmFwcGVyRWwgPSBzd2lwZXIuJHdyYXBwZXJFbDtcbiAgICB2YXIgJGVsID0gc2Nyb2xsYmFyLiRlbCxcbiAgICAgICAgJGRyYWdFbCA9IHNjcm9sbGJhci4kZHJhZ0VsO1xuICAgIHN3aXBlci5zY3JvbGxiYXIuaXNUb3VjaGVkID0gdHJ1ZTtcbiAgICBzd2lwZXIuc2Nyb2xsYmFyLmRyYWdTdGFydFBvcyA9IGUudGFyZ2V0ID09PSAkZHJhZ0VsWzBdIHx8IGUudGFyZ2V0ID09PSAkZHJhZ0VsID8gc2Nyb2xsYmFyLmdldFBvaW50ZXJQb3NpdGlvbihlKSAtIGUudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3N3aXBlci5pc0hvcml6b250YWwoKSA/ICdsZWZ0JyA6ICd0b3AnXSA6IG51bGw7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgJHdyYXBwZXJFbC50cmFuc2l0aW9uKDEwMCk7XG4gICAgJGRyYWdFbC50cmFuc2l0aW9uKDEwMCk7XG4gICAgc2Nyb2xsYmFyLnNldERyYWdQb3NpdGlvbihlKTtcbiAgICBjbGVhclRpbWVvdXQoc3dpcGVyLnNjcm9sbGJhci5kcmFnVGltZW91dCk7XG4gICAgJGVsLnRyYW5zaXRpb24oMCk7XG5cbiAgICBpZiAocGFyYW1zLmhpZGUpIHtcbiAgICAgICRlbC5jc3MoJ29wYWNpdHknLCAxKTtcbiAgICB9XG5cbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5jc3NNb2RlKSB7XG4gICAgICBzd2lwZXIuJHdyYXBwZXJFbC5jc3MoJ3Njcm9sbC1zbmFwLXR5cGUnLCAnbm9uZScpO1xuICAgIH1cblxuICAgIHN3aXBlci5lbWl0KCdzY3JvbGxiYXJEcmFnU3RhcnQnLCBlKTtcbiAgfSxcbiAgb25EcmFnTW92ZTogZnVuY3Rpb24gb25EcmFnTW92ZShlKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIHNjcm9sbGJhciA9IHN3aXBlci5zY3JvbGxiYXIsXG4gICAgICAgICR3cmFwcGVyRWwgPSBzd2lwZXIuJHdyYXBwZXJFbDtcbiAgICB2YXIgJGVsID0gc2Nyb2xsYmFyLiRlbCxcbiAgICAgICAgJGRyYWdFbCA9IHNjcm9sbGJhci4kZHJhZ0VsO1xuICAgIGlmICghc3dpcGVyLnNjcm9sbGJhci5pc1RvdWNoZWQpIHJldHVybjtcbiAgICBpZiAoZS5wcmV2ZW50RGVmYXVsdCkgZS5wcmV2ZW50RGVmYXVsdCgpO2Vsc2UgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgIHNjcm9sbGJhci5zZXREcmFnUG9zaXRpb24oZSk7XG4gICAgJHdyYXBwZXJFbC50cmFuc2l0aW9uKDApO1xuICAgICRlbC50cmFuc2l0aW9uKDApO1xuICAgICRkcmFnRWwudHJhbnNpdGlvbigwKTtcbiAgICBzd2lwZXIuZW1pdCgnc2Nyb2xsYmFyRHJhZ01vdmUnLCBlKTtcbiAgfSxcbiAgb25EcmFnRW5kOiBmdW5jdGlvbiBvbkRyYWdFbmQoZSkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLnNjcm9sbGJhcjtcbiAgICB2YXIgc2Nyb2xsYmFyID0gc3dpcGVyLnNjcm9sbGJhcixcbiAgICAgICAgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsO1xuICAgIHZhciAkZWwgPSBzY3JvbGxiYXIuJGVsO1xuICAgIGlmICghc3dpcGVyLnNjcm9sbGJhci5pc1RvdWNoZWQpIHJldHVybjtcbiAgICBzd2lwZXIuc2Nyb2xsYmFyLmlzVG91Y2hlZCA9IGZhbHNlO1xuXG4gICAgaWYgKHN3aXBlci5wYXJhbXMuY3NzTW9kZSkge1xuICAgICAgc3dpcGVyLiR3cmFwcGVyRWwuY3NzKCdzY3JvbGwtc25hcC10eXBlJywgJycpO1xuICAgICAgJHdyYXBwZXJFbC50cmFuc2l0aW9uKCcnKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLmhpZGUpIHtcbiAgICAgIGNsZWFyVGltZW91dChzd2lwZXIuc2Nyb2xsYmFyLmRyYWdUaW1lb3V0KTtcbiAgICAgIHN3aXBlci5zY3JvbGxiYXIuZHJhZ1RpbWVvdXQgP
118SBuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICRlbC5jc3MoJ29wYWNpdHknLCAwKTtcbiAgICAgICAgJGVsLnRyYW5zaXRpb24oNDAwKTtcbiAgICAgIH0sIDEwMDApO1xuICAgIH1cblxuICAgIHN3aXBlci5lbWl0KCdzY3JvbGxiYXJEcmFnRW5kJywgZSk7XG5cbiAgICBpZiAocGFyYW1zLnNuYXBPblJlbGVhc2UpIHtcbiAgICAgIHN3aXBlci5zbGlkZVRvQ2xvc2VzdCgpO1xuICAgIH1cbiAgfSxcbiAgZW5hYmxlRHJhZ2dhYmxlOiBmdW5jdGlvbiBlbmFibGVEcmFnZ2FibGUoKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgaWYgKCFzd2lwZXIucGFyYW1zLnNjcm9sbGJhci5lbCkgcmV0dXJuO1xuICAgIHZhciBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG4gICAgdmFyIHNjcm9sbGJhciA9IHN3aXBlci5zY3JvbGxiYXIsXG4gICAgICAgIHRvdWNoRXZlbnRzVG91Y2ggPSBzd2lwZXIudG91Y2hFdmVudHNUb3VjaCxcbiAgICAgICAgdG91Y2hFdmVudHNEZXNrdG9wID0gc3dpcGVyLnRvdWNoRXZlbnRzRGVza3RvcCxcbiAgICAgICAgcGFyYW1zID0gc3dpcGVyLnBhcmFtcyxcbiAgICAgICAgc3VwcG9ydCA9IHN3aXBlci5zdXBwb3J0O1xuICAgIHZhciAkZWwgPSBzY3JvbGxiYXIuJGVsO1xuICAgIHZhciB0YXJnZXQgPSAkZWxbMF07XG4gICAgdmFyIGFjdGl2ZUxpc3RlbmVyID0gc3VwcG9ydC5wYXNzaXZlTGlzdGVuZXIgJiYgcGFyYW1zLnBhc3NpdmVMaXN0ZW5lcnMgPyB7XG4gICAgICBwYXNzaXZlOiBmYWxzZSxcbiAgICAgIGNhcHR1cmU6IGZhbHNlXG4gICAgfSA6IGZhbHNlO1xuICAgIHZhciBwYXNzaXZlTGlzdGVuZXIgPSBzdXBwb3J0LnBhc3NpdmVMaXN0ZW5lciAmJiBwYXJhbXMucGFzc2l2ZUxpc3RlbmVycyA/IHtcbiAgICAgIHBhc3NpdmU6IHRydWUsXG4gICAgICBjYXB0dXJlOiBmYWxzZVxuICAgIH0gOiBmYWxzZTtcbiAgICBpZiAoIXRhcmdldCkgcmV0dXJuO1xuXG4gICAgaWYgKCFzdXBwb3J0LnRvdWNoKSB7XG4gICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50c0Rlc2t0b3Auc3RhcnQsIHN3aXBlci5zY3JvbGxiYXIub25EcmFnU3RhcnQsIGFjdGl2ZUxpc3RlbmVyKTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHNEZXNrdG9wLm1vdmUsIHN3aXBlci5zY3JvbGxiYXIub25EcmFnTW92ZSwgYWN0aXZlTGlzdGVuZXIpO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50c0Rlc2t0b3AuZW5kLCBzd2lwZXIuc2Nyb2xsYmFyLm9uRHJhZ0VuZCwgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHNUb3VjaC5zdGFydCwgc3dpcGVyLnNjcm9sbGJhci5vbkRyYWdTdGFydCwgYWN0aXZlTGlzdGVuZXIpO1xuICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHNUb3VjaC5tb3ZlLCBzd2lwZXIuc2Nyb2xsYmFyLm9uRHJhZ01vdmUsIGFjdGl2ZUxpc3RlbmVyKTtcbiAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzVG91Y2guZW5kLCBzd2lwZXIuc2Nyb2xsYmFyLm9uRHJhZ0VuZCwgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICB9XG4gIH0sXG4gIGRpc2FibGVEcmFnZ2FibGU6IGZ1bmN0aW9uIGRpc2FibGVEcmFnZ2FibGUoKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgaWYgKCFzd2lwZXIucGFyYW1zLnNjcm9sbGJhci5lbCkgcmV0dXJuO1xuICAgIHZhciBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG4gICAgdmFyIHNjcm9sbGJhciA9IHN3aXBlci5zY3JvbGxiYXIsXG4gICAgICAgIHRvdWNoRXZlbnRzVG91Y2ggPSBzd2lwZXIudG91Y2hFdmVudHNUb3VjaCxcbiAgICAgICAgdG91Y2hFdmVudHNEZXNrdG9wID0gc3dpcGVyLnRvdWNoRXZlbnRzRGVza3RvcCxcbiAgICAgICAgcGFyYW1zID0gc3dpcGVyLnBhcmFtcyxcbiAgICAgICAgc3VwcG9ydCA9IHN3aXBlci5zdXBwb3J0O1xuICAgIHZhciAkZWwgPSBzY3JvbGxiYXIuJGVsO1xuICAgIHZhciB0YXJnZXQgPSAkZWxbMF07XG4gICAgdmFyIGFjdGl2ZUxpc3RlbmVyID0gc3VwcG9ydC5wYXNzaXZlTGlzdGVuZXIgJiYgcGFyYW1zLnBhc3NpdmVMaXN0ZW5lcnMgPyB7XG4gICAgICBwYXNzaXZlOiBmYWxzZSxcbiAgICAgIGNhcHR1cmU6IGZhbHNlXG4gICAgfSA6IGZhbHNlO1xuICAgIHZhciBwYXNzaXZlTGlzdGVuZXIgPSBzdXBwb3J0LnBhc3NpdmVMaXN0ZW5lciAmJiBwYXJhbXMucGFzc2l2ZUxpc3RlbmVycyA/IHtcbiAgICAgIHBhc3NpdmU6IHRydWUsXG4gICAgICBjYXB0dXJlOiBmYWxzZVxuICAgIH0gOiBmYWxzZTtcbiAgICBpZiAoIXRhcmdldCkgcmV0dXJuO1xuXG4gICAgaWYgKCFzdXBwb3J0LnRvdWNoKSB7XG4gICAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50c0Rlc2t0b3Auc3RhcnQsIHN3aXBlci5zY3JvbGxiYXIub25EcmFnU3RhcnQsIGFjdGl2ZUxpc3RlbmVyKTtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHNEZXNrdG9wLm1vdmUsIHN3aXBlci5zY3JvbGxiYXIub25EcmFnTW92ZSwgYWN0aXZlTGlzdGVuZXIpO1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50c0Rlc2t0b3AuZW5kLCBzd2lwZXIuc2Nyb2xsYmFyLm9uRHJhZ0VuZCwgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHNUb3VjaC5zdGFydCwgc3dpcGVyLnNjcm9sbGJhci5vbkRyYWdTdGFydCwgYWN0aXZlTGlzdGVuZXIpO1xuICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHNUb3VjaC5tb3ZlLCBzd2lwZXIuc2Nyb2xsYmFyLm9uRHJhZ01vdmUsIGFjdGl2ZUxpc3RlbmVyKTtcbiAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzVG91Y2guZW5kLCBzd2lwZXIuc2Nyb2xsYmFyLm9uRHJhZ0VuZCwgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICB9XG4gIH0sXG4gIGluaXQ6IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIHNjcm9sbGJhciA9IHN3aXBlci5zY3JvbGxiYXIsXG4gICAgICAgICRzd2lwZXJFbCA9IHN3aXBlci4kZWw7XG4gICAgc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXIgPSBjcmVhdGVFbGVtZW50SWZOb3REZWZpbmVkKCRzd2lwZXJFbCwgc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXIsIHN3aXBlci5wYXJhbXMuY3JlYXRlRWxlbWVudHMsIHtcbiAgICAgIGVsOiAnc3dpcGVyLXNjcm9sbGJhcidcbiAgICB9KTtcbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXI7XG4gICAgaWYgKCFwYXJhbXMuZWwpIHJldHVybjtcbiAgICB2YXIgJGVsID0gJChwYXJhbXMuZWwpO1xuXG4gICAgaWYgKHN3aXBlci5wYXJhbXMudW5pcXVlTmF2RWxlbWVudHMgJiYgdHlwZW9mIHBhcmFtcy5lbCA9PT0gJ3N0cmluZycgJiYgJGVsLmxlbmd0aCA+IDEgJiYgJHN3aXBlckVsLmZpbmQocGFyYW1zLmVsKS5sZW5ndGggPT09IDEpIHtcbiAgICAgICRlbCA9ICRzd2lwZXJFbC5maW5kKHBhcmFtcy5lbCk7XG4gICAgfVxuXG4gICAgdmFyICRkcmFnRWwgPSAkZWwuZmluZChcIi5cIiArIHN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyLmRyYWdDbGFzcyk7XG5cbiAgICBpZiAoJGRyYWdFbC5sZW5ndGggPT09IDApIHtcbiAgICAgICRkcmFnRWwgPSAkKFwiPGRpdiBjbGFzcz1cXFwiXCIgKyBzd2lwZXIucGFyYW1zLnNjcm9sbGJhci5kcmFnQ2xhc3MgKyBcIlxcXCI+PC9kaXY+XCIpO1xuICAgICAgJGVsLmFwcGVuZCgkZHJhZ0VsKTtcbiAgICB9XG5cbiAgICBleHRlbmQoc2Nyb2xsYmFyLCB7XG4gICAgICAkZWw6ICRlbCxcbiAgICAgIGVsOiAkZWxbMF0sXG4gICAgICAkZHJhZ0VsOiAkZHJhZ0VsLFxuICAgICAgZHJhZ0VsOiAkZHJhZ0VsWzBdXG4gICAgfSk7XG5cbiAgICBpZiAocGFyYW1zLmRyYWdnYWJsZSkge1xuICAgICAgc2Nyb2xsYmFyLmVuYWJsZURyYWdnYWJsZSgpO1xuICAgIH1cblxuICAgIGlmICgkZWwpIHtcbiAgICAgICRlbFtzd2lwZXIuZW5hYmxlZCA/ICdyZW1vdmVDbGFzcycgOiAnYWRkQ2xhc3MnXShzd2lwZXIucGFyYW1zLnNjcm9sbGJhci5sb2NrQ2xhc3MpO1xuICAgIH1cbiAgfSxcbiAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICBzd2lwZXIuc2Nyb2xsYmFyLmRpc2FibGVEcmFnZ2FibGUoKTtcbiAgfVxufTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ3Njcm9sbGJhcicsXG4gIHBhcmFtczoge1xuICAgIHNjcm9sbGJhcjoge1xuICAgICAgZWw6IG51bGwsXG4gICAgICBkcmFnU2l6ZTogJ2F1dG8nLFxuICAgICAgaGlkZTogZmFsc2UsXG4gICAgICBkcmFnZ2FibGU6IGZhbHNlLFxuICAgICAgc25hcE9uUmVsZWFzZTogdHJ1ZSxcbiAgICAgIGxvY2tDbGFzczogJ3N3aXBlci1zY3JvbGxiYXItbG9jaycsXG4gICAgICBkcmFnQ2xhc3M6ICdzd2lwZXItc2Nyb2xsYmFyLWRyYWcnXG4gICAgfVxuICB9LFxuICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICBiaW5kTW9kdWxlTWV0aG9kcyhzd2lwZXIsIHtcbiAgICAgIHNjcm9sbGJhcjogX2V4dGVuZHMoe1xuICAgICAgICBpc1RvdWNoZWQ6IGZhbHNlLFxuICAgICAgICB0aW1lb3V0OiBudWxsLFxuICAgICAgICBkcmFnVGltZW91dDogbnVsbFxuICAgICAgfSwgU2Nyb2xsYmFyKVxuICAgIH0pO1xuICB9LFxuICBvbjoge1xuICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoc3dpcGVyKSB7XG4gICAgICBzd2lwZXIuc2Nyb2xsYmFyLmluaXQoKTtcbiAgICAgIHN3aXBlci5zY3JvbGxiYXIudXBkYXRlU2l6ZSgpO1xuICAgICAgc3dpcGVyLnNjcm9sbGJhci5zZXRUcmFuc2xhdGUoKTtcbiAgICB9LFxuICAgIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKHN3aXBlcikge1xuICAgICAgc3dpcGVyLnNjcm9sbGJhci51cGRhdGVTaXplKCk7XG4gICAgfSxcbiAgICByZXNpemU6IGZ1bmN0aW9uIHJlc2l6ZShzd2lwZXIp
118IHtcbiAgICAgIHN3aXBlci5zY3JvbGxiYXIudXBkYXRlU2l6ZSgpO1xuICAgIH0sXG4gICAgb2JzZXJ2ZXJVcGRhdGU6IGZ1bmN0aW9uIG9ic2VydmVyVXBkYXRlKHN3aXBlcikge1xuICAgICAgc3dpcGVyLnNjcm9sbGJhci51cGRhdGVTaXplKCk7XG4gICAgfSxcbiAgICBzZXRUcmFuc2xhdGU6IGZ1bmN0aW9uIHNldFRyYW5zbGF0ZShzd2lwZXIpIHtcbiAgICAgIHN3aXBlci5zY3JvbGxiYXIuc2V0VHJhbnNsYXRlKCk7XG4gICAgfSxcbiAgICBzZXRUcmFuc2l0aW9uOiBmdW5jdGlvbiBzZXRUcmFuc2l0aW9uKHN3aXBlciwgZHVyYXRpb24pIHtcbiAgICAgIHN3aXBlci5zY3JvbGxiYXIuc2V0VHJhbnNpdGlvbihkdXJhdGlvbik7XG4gICAgfSxcbiAgICAnZW5hYmxlIGRpc2FibGUnOiBmdW5jdGlvbiBlbmFibGVEaXNhYmxlKHN3aXBlcikge1xuICAgICAgdmFyICRlbCA9IHN3aXBlci5zY3JvbGxiYXIuJGVsO1xuXG4gICAgICBpZiAoJGVsKSB7XG4gICAgICAgICRlbFtzd2lwZXIuZW5hYmxlZCA/ICdyZW1vdmVDbGFzcycgOiAnYWRkQ2xhc3MnXShzd2lwZXIucGFyYW1zLnNjcm9sbGJhci5sb2NrQ2xhc3MpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveShzd2lwZXIpIHtcbiAgICAgIHN3aXBlci5zY3JvbGxiYXIuZGVzdHJveSgpO1xuICAgIH1cbiAgfVxufTsiLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gTk9URTogTGVnYWN5IHN1cHBvcnQgdGFrZW4gZnJvbSBFWFBFUklFTkNFLUhVQi5cbmltcG9ydCBTd2lwZXIsIHtBdXRvcGxheSwgRWZmZWN0RmFkZSwgTmF2aWdhdGlvbiwgUGFnaW5hdGlvbiwgU2Nyb2xsYmFyfSBmcm9tICdzd2lwZXInO1xuU3dpcGVyLnVzZShbTmF2aWdhdGlvbiwgUGFnaW5hdGlvbiwgRWZmZWN0RmFkZSwgQXV0b3BsYXksIFNjcm9sbGJhcl0pO1xuY29uc3QgQ2Fyb3VzZWwgPSAoY2Fyb3VzZWxFbCkgPT4ge1xuICBjb25zdCBkYXRhID0ge1xuICAgIHNlbGVjdG9yczoge1xuICAgICAgcGFnaW5hdGlvbjogJy5zd2lwZXItYnVsbGV0cycsXG4gICAgICBidXR0b25OZXh0OiAnLnN3aXBlci1idXR0b24tbmV4dCcsXG4gICAgICBidXR0b25QcmV2OiAnLnN3aXBlci1idXR0b24tcHJldicsXG4gICAgICBjYXJvdXNlbENvbXBvbmVudFdyYXBwZXI6ICcuY2Fyb3VzZWwnLFxuICAgICAgY2Fyb3VzZWxUYWJzOiAnLmNhcm91c2VsX190YWJzJyxcbiAgICAgIGNhcm91c2VsVGFiQnV0dG9uOiAnLmNhcm91c2VsX190YWJidXR0b24nLFxuICAgICAgY2Fyb3VzZWxUYWJBY3RpdmVCdXR0b246ICcuY2Fyb3VzZWxfX3RhYmJ1dHRvbi0tYWN0aXZlJyxcbiAgICAgIGNhcm91c2VsQWN0aXZlVGFiOiAnLmNhcm91c2VsX190YWItLWFjdGl2ZScsXG4gICAgICBzd2lwZXJTbGlkZTogJy5zd2lwZXItc2xpZGUnXG4gICAgfSxcbiAgICBjbGFzc05hbWVzOiB7XG4gICAgICBzd2lwZXJTbGlkZVZpc2libGU6ICdzd2lwZXItc2xpZGUtdmlzaWJsZScsXG4gICAgICBjYXJvdXNlbEJNSUNhcmQ6ICdjb250ZW50cGFnZXRlYXNlci0tYm1pY2FyZCcsXG4gICAgICBjYXJvdXNlbFRhYnNIaWRkZW46ICdjYXJvdXNlbF9fdGFicy0taGlkZGVuJyxcbiAgICAgIGNhcm91c2VsVGFiYnV0dG9uQWN0aXZlOiAnY2Fyb3VzZWxfX3RhYmJ1dHRvbi0tYWN0aXZlJyxcbiAgICAgIGNhcm91c2VsUGFpbnBvaW50OiAnY29udGVudHBhZ2V0ZWFzZXItLXBhaW5wb2ludCcsXG4gICAgICBjYXJvdXNlbFBhaW5wb2ludEFjdGl2ZTogJ2NvbnRlbnRwYWdldGVhc2VyLS1wYWlucG9pbnQtLWFjdGl2ZSdcbiAgICB9LFxuICAgIGNhcm91c2VsTW9kZXM6IHtcbiAgICAgIHNsaWRlOiAnc2xpZGUnLFxuICAgICAgY2Fyb3VzZWw6ICdmYWRlJ1xuICAgIH0sXG4gICAgY29uZmlndXJhdGlvbjoge1xuICAgICAgZW5hYmxlZDogJ2VuYWJsZWQnXG4gICAgfSxcbiAgICBndXR0ZXJzOiB7XG4gICAgICBzbTogJzgnLFxuICAgICAgeGw6ICcyMCcsXG4gICAgICBsZzogJzIwJ1xuICAgIH1cbiAgfVxuICBjb25zdCBjYXJvdXNlbENvbXBvbmVudFdyYXBwZXJEaXYgPSBjYXJvdXNlbEVsLmNsb3Nlc3QoZGF0YS5zZWxlY3RvcnMuY2Fyb3VzZWxDb21wb25lbnRXcmFwcGVyKTtcbiAgY29uc3QgY2Fyb3VzZWxCdWxsZXRzRWwgPSBjYXJvdXNlbENvbXBvbmVudFdyYXBwZXJEaXYucXVlcnlTZWxlY3RvcihkYXRhLnNlbGVjdG9ycy5wYWdpbmF0aW9uKTtcbiAgY29uc3QgY2Fyb3VzZWxUYWJzRWwgPSBjYXJvdXNlbENvbXBvbmVudFdyYXBwZXJEaXYucXVlcnlTZWxlY3RvcihkYXRhLnNlbGVjdG9ycy5jYXJvdXNlbFRhYnMpO1xuICBjb25zdCBzbGlkZXMgPSBjYXJvdXNlbEVsLnF1ZXJ5U2VsZWN0b3JBbGwoZGF0YS5zZWxlY3RvcnMuc3dpcGVyU2xpZGUpO1xuICBjb25zdCB1c2VUYWJCdXR0b25zID0gY2Fyb3VzZWxFbC5kYXRhc2V0LnRhYnNjcm9sbCA9PT0gZGF0YS5jb25maWd1cmF0aW9uLmVuYWJsZWQ7XG4gIGNvbnN0IGlzUGFpbnBvaW50ID0gY2Fyb3VzZWxDb21wb25lbnRXcmFwcGVyRGl2LmNsYXNzTGlzdC5jb250YWlucyhkYXRhLmNsYXNzTmFtZXMuY2Fyb3VzZWxQYWlucG9pbnQpO1xuICBjb25zdCBpc0JNSUNhcmQgPSBjYXJvdXNlbENvbXBvbmVudFdyYXBwZXJEaXYuY2xhc3NMaXN0LmNvbnRhaW5zKGRhdGEuY2xhc3NOYW1lcy5jYXJvdXNlbEJNSUNhcmQpO1xuICBsZXQgcmVmZXJlbmNlcyA9IG51bGw7XG4gIGxldCByZWZlcmVuY2VzRWxlbWVudCA9IG51bGw7XG5cbiAgLypDb25maWcgaXMgbWFkZSBiYXNlZCBvbiBhdXRob3IgY29uZmlndXJlZCB2YWx1ZXMgaW4gY3E6ZGlhbG9nICovXG4gIGNvbnN0IGFkanVzdGFibGVDb25maWcgPSB7XG4gICAgZWZmZWN0OiBjYXJvdXNlbEVsLmRhdGFzZXQuc2xpZGVybW9kZSA9PT0gZGF0YS5jb25maWd1cmF0aW9uLmVuYWJsZWRcbiAgICAgICAgPyBkYXRhLmNhcm91c2VsTW9kZXMuc2xpZGUgOiBkYXRhLmNhcm91c2VsTW9kZXMuY2Fyb3VzZWwsXG4gICAgYXV0b3BsYXk6IHtcbiAgICAgIGRlbGF5OiBjYXJvdXNlbEVsLmRhdGFzZXQuYXV0b3BsYXkgPT09IGRhdGEuY29uZmlndXJhdGlvbi5lbmFibGVkXG4gICAgICAgICAgPyBwYXJzZUludChcbiAgICAgICAgICAgICAgY2Fyb3VzZWxFbC5kYXRhc2V0LmRlbGF5KSA6IHVuZGVmaW5lZFxuICAgIH0sXG4gICAgbmF2aWdhdGlvbjoge1xuICAgICAgbmV4dEVsOiBjYXJvdXNlbENvbX
118BvbmVudFdyYXBwZXJEaXYucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICBkYXRhLnNlbGVjdG9ycy5idXR0b25OZXh0KSxcbiAgICAgIHByZXZFbDogY2Fyb3VzZWxDb21wb25lbnRXcmFwcGVyRGl2LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgZGF0YS5zZWxlY3RvcnMuYnV0dG9uUHJldilcbiAgICB9LFxuICAgIGJyZWFrcG9pbnRzOiB7XG4gICAgICAvLyBpbmNsdWRpbmcgY2hnIGJyZWFrcG9pbnRzXG4gICAgICAwOiB7XG4gICAgICAgIHNsaWRlc1BlclZpZXc6IGlzUGFpbnBvaW50ID8gJzEuMicgOiBjYXJvdXNlbEVsLmRhdGFzZXQuYXV0b3NsaWRlaXRlbXMgPT09ICd0cnVlJyA/ICdhdXRvJyA6ICcxJyxcbiAgICAgICAgc3BhY2VCZXR3ZWVuOiBpc1BhaW5wb2ludCA/IGRhdGEuZ3V0dGVycy5zbSA6IGRhdGEuZ3V0dGVycy5sZyxcbiAgICAgICAgc2Nyb2xsYmFyOiB7XG4gICAgICAgICAgZHJhZ1NpemU6IDE1MCxcbiAgICAgICAgICBmcmVlTW9kZToge1xuICAgICAgICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNuYXBPblJlbGVhc2U6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHNsaWRlc09mZnNldEJlZm9yZTogaXNQYWlucG9pbnQgPyAyMCA6IDAsXG4gICAgICAgIHNsaWRlc09mZnNldEFmdGVyOiBpc1BhaW5wb2ludCA/IDIwIDogMCxcbiAgICAgIH0sXG4gICAgICAxMDI0OiB7XG4gICAgICAgIHNsaWRlc1BlclZpZXc6IGNhcm91c2VsRWwuZGF0YXNldC5hdXRvc2xpZGVpdGVtcyA9PT0gJ3RydWUnID8gJ2F1dG8nIDogcGFyc2VJbnQoY2Fyb3VzZWxFbC5kYXRhc2V0LnNsaWRlc2Ftb3VudHBlcnNjcmVlbiksXG4gICAgICAgIHNwYWNlQmV0d2VlbjogZGF0YS5ndXR0ZXJzLnhsLFxuICAgICAgICBzY3JvbGxiYXI6IHtcbiAgICAgICAgICBkcmFnU2l6ZTogNTAwLFxuICAgICAgICAgIHNuYXBPblJlbGVhc2U6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIC4uLighaXNCTUlDYXJkICYmIHtcbiAgICAgICAgICBmcmVlTW9kZToge1xuICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgIG1vbWVudHVtOiB0cnVlLFxuICAgICAgICAgICAgc3RpY2t5OiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICghYWRqdXN0YWJsZUNvbmZpZy5hdXRvcGxheS5kZWxheSkge1xuICAgIGRlbGV0ZSBhZGp1c3RhYmxlQ29uZmlnLmF1dG9wbGF5O1xuICB9XG5cbiAgY29uc3QgdXBkYXRlUmVmZXJlbmNlID0gKGluZGV4KSA9PiB7XG4gICAgaWYgKHJlZmVyZW5jZXMgJiYgcmVmZXJlbmNlcy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHJlZiA9IHJlZmVyZW5jZXNFbGVtZW50Py5xdWVyeVNlbGVjdG9yKCcucmVmZXJlbmNlcycpO1xuICAgICAgY29uc3QgaXNSZWZPcGVuID0gcmVmID8gcmVmLmhhc0F0dHJpYnV0ZSgnb3BlbicpIDogZmFsc2U7XG5cbiAgICAgIHJlZmVyZW5jZXNFbGVtZW50LmlubmVySFRNTCA9ICcnO1xuICAgICAgaWYgKHJlZmVyZW5jZXNbaW5kZXhdKSB7XG4gICAgICAgIGNvbnN0IGNsb25lZFJlZiA9IHJlZmVyZW5jZXNbaW5kZXhdLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgICAgcmVmZXJlbmNlc0VsZW1lbnQuYXBwZW5kQ2hpbGQoY2xvbmVkUmVmKTtcbiAgICAgICAgaWYgKGlzUmVmT3Blbikge1xuICAgICAgICAgIGNsb25lZFJlZi5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVCTUlDYXJkU2xpZGVDaGFuZ2UgPSAoc2xpZGVyKSA9PiB7XG4gICAgY29uc3QgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ3NsaWRlcjpjaGFuZ2UnLCB7XG4gICAgICBkZXRhaWw6IHtcbiAgICAgICAgb2xkSW5kZXg6IHNsaWRlci5wcmV2aW91c0luZGV4LFxuICAgICAgICBuZXdJbmRleDogc2xpZGVyLnJlYWxJbmRleCxcbiAgICAgICAgc2xpZGVyRWw6IGNhcm91c2VsQ29tcG9uZW50V3JhcHBlckRpdiB8fCBudWxsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpO1xuICB9XG5cbiAgY29uc3QgYWRkRXZlbnRsaXN0ZW5lcnMgPSAoKSA9PiB7XG4gICAgY2Fyb3VzZWxFbC5zd2lwZXIub24oJ3NsaWRlQ2hhbmdlJywgKHNsaWRlcikgPT4ge1xuICAgICAgdXBkYXRlUmVmZXJlbmNlKHNsaWRlci5yZWFsSW5kZXgpO1xuXG4gICAgICBpZiAoaXNCTUlDYXJkKSB7XG4gICAgICAgIGhhbmRsZUJNSUNhcmRTbGlkZUNoYW5nZShzbGlkZXIpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaGFuZGxlQk1JQ2FyZFNsaWRlQ2hhbmdlKGNhcm91c2VsRWwuc3dpcGVyKTtcblxuICAgIGlmKGlzQk1JQ2FyZCkge1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsICgpID0+IHtcbiAgICAgICAgY2VudGVyQWN0aXZlVGFiQmFja3JvdW5kKGNhcm91c2VsVGFic0VsLnF1ZXJ5U2VsZWN0b3IoZGF0YS5zZWxlY3RvcnMuY2Fyb3VzZWxUYWJBY3RpdmVCdXR0b24pKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNlbnRlckFjdGl2ZVRhYkJhY2tyb3VuZCA9IChhY3RpdmVCdXR0b24pID0+IHtcbiAgICBjb25zdCBhY3RpdmVCdXR0b25SZWN0ID0gYWN0aXZlQnV0dG9uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBjYXJvdXNlbFRhYnNFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBvZmZzZXQgPSBhY3RpdmVCdXR0b25SZWN0LmxlZnQgLSBjb250YWluZXJSZWN0LmxlZnQgKyBjYXJvdXNlbFRhYnNFbC5zY3JvbGxMZWZ0O1xuICAgIGNhcm91c2VsVGFic0VsLnN0eWxlLnNldFByb3BlcnR5KCctLWNhcm91c2VsLWxlZnQnLCBgJHtvZmZzZXR9cHhgKTtcbiAgICBjYXJvdXNlbFRhYnNFbC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1jYXJvdXNlbC13aWR0aCcsIGAke2FjdGl2ZUJ1dHRvblJlY3Qud2lkdGh9cHhgKTtcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVRhYkJ1dHRvbkNsaWNrID0gKGJ1dHRvbiwgaW5kZXgpID0+IHtcbiAgICAvLyBJcyB0aGVyZSBhbnkgdGFiIGFscmVhZHkgYWN0aXZlP1xuICAgIGNvbnN0IGFjdGl2ZUJ1dHRvbiA9IGNhcm91c2VsVGFic0VsLnF1ZXJ5U2VsZWN0b3IoZGF0YS5zZWxlY3RvcnMuY2Fyb3VzZWxUYWJBY3RpdmVCdXR0b24pO1xuICAgIGlmIChhY3RpdmVCdXR0b24gJiYgYWN0aXZlQnV0dG9uID09PSBidXR0b24gJiYgaXNQYWlucG9pbnQpIHtcbiAgICAgIC8vIENsb3NlIHRoZSB0YWJcbiAgICAgIGNhcm91c2VsQ29tcG9uZW50V3JhcHBlckRpdi5jbGFzc0xpc3QucmVtb3ZlKGRhdGEuY2xhc3NOYW1lcy5jYXJvdXNlbFBhaW5wb2ludEFjdGl2ZSk7XG4gICAgICBidXR0b24uY2xhc3NMaXN0LnJlbW92ZShkYXRhLmNsYXNzTmFtZXMuY2Fyb3VzZWxUYWJidXR0b25BY3RpdmUpO1xuICAgIH0gZWxzZSBpZiAoYWN0aXZlQnV0dG9uICYmIGFjdGl2ZUJ1dHRvbiAhPT0gYnV0dG9uKSB7XG4gICAgICAvLyBKdXN0IGNoYW5nZSB0aGUgdGFiXG4gICAgICBjYXJvdXNlbEVsLnN3aXBlci5zbGlkZVRvKGluZGV4KTtcbiAgICAgIGJ1dHRvbi5jbGFzc0xpc3QuYWRkKGRhdGEuY2xhc3NOYW1lcy5jYXJvdXNlbFRhYmJ1dHRvbkFjdGl2ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEFjdGl2YXRlIGFuZCBuYXZpZ2F0ZVxuICAgICAgY2Fyb3VzZWxDb21wb25lbnRXcmFwcGVyRGl2LmNsYXNzTGlzdC5hZGQoZGF0YS5jbGFzc05hbWVzLmNhcm91c2VsUGFpbnBvaW50QWN0aXZlKTtcbiAgICAgIC8vIFJlc3RhcnQgdGhlIHN3aXBlciB0byByZWNhbGN1bGF0ZSB0aGUgc2l6ZXNcbiAgICAgIHJlZnJlc2hTd2lwZXIoKTtcbiAgICAgIC8vIE5hdmlnYXRlIHRvIHRoZSBzbGlkZVxuICAgICAgY2Fyb3VzZWxFbC5zd2lwZXIuc2xpZGVUbyhpbmRleCk7XG4gICAgICBidXR0b24uY2xhc3NMaXN0LmFkZChkYXRhLmNsYXNzTmFtZXMuY2Fyb3VzZWxUYWJidXR0b25BY3RpdmUpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGFkZEV2ZW50bGlzdGVuZXJzRm9yVGFiQnV0dG9ucyA9ICh0YWJCdXR0b25zKSA9PiB7XG4gICAgLy8gQmVoYXZpb3VyXG4gICAgdGFiQnV0dG9ucy5mb3JFYWNoKChidXR0b24sIGluZGV4KSA9PiB7XG4gICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBlID0+IHtcbiAgICAgICAgaGFuZGxlVGFiQnV0dG9uQ2xpY2soYnV0dG9uLCBpbmRleCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIENoYW5nZSBhY3RpdmUgYnV0dG9uIG9uIHNsaWRlIGNoYW5nZVxuICAgIGNhcm91c2VsRWwuc3dpcGVyLm9uKCdzbGlkZUNoYW5nZScsIChzbGlkZXIpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHNsaWRlci5yZWFsSW5kZXg7XG4gICAgICB0YWJCdXR0b25zLmZvckVhY2goYnV0dG9uID0+IHtcbiAgICAgICAgYnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoZGF0YS5jbGFzc05hbWVzLmNhcm91c2VsVGFiYnV0dG9uQWN0aXZlKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKHRhYkJ1dHRvbnNbY3VycmVudEluZGV4XSkge1xuICAgICAgICB0YWJCdXR0b25zW2N1cnJlbnRJbmRleF0uY2xhc3NMaXN0LmFkZChkYXRhLmNsYXNzTmFtZXMuY2Fyb3VzZWxUYWJidXR0b25BY3RpdmUpO1xuICAgICAgICAvLyBTY3JvbGwgYWN0aXZlIHRhYiBpbnRvIHZpZXdcbiAgICAgICAgaWYgKGlzQk1JQ2FyZCkge1xuICAgICAgICAgI
118HRhYkJ1dHRvbnNbY3VycmVudEluZGV4XS5zY3JvbGxJbnRvVmlldyh7XG4gICAgICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICAgICAgICBpbmxpbmU6ICdjZW50ZXInLFxuICAgICAgICAgICAgYmxvY2s6ICduZWFyZXN0J1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNlbnRlckFjdGl2ZVRhYkJhY2tyb3VuZCh0YWJCdXR0b25zW2N1cnJlbnRJbmRleF0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBhY3RpdmF0ZVRhYkJ1dHRvbiA9ICgpID0+IHtcbiAgICAvLyBJZiB0aGVyZSBpcyBubyB0YWJzIGNvbnRhaW5lciBpbiB0aGlzIGNhcm91c2VsLCBza2lwIGFjdGl2YXRpb24gc2FmZWx5LlxuICAgIGlmICghY2Fyb3VzZWxUYWJzRWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0YWJCdXR0b25zID0gY2Fyb3VzZWxUYWJzRWwucXVlcnlTZWxlY3RvckFsbChkYXRhLnNlbGVjdG9ycy5jYXJvdXNlbFRhYkJ1dHRvbik7XG4gICAgY29uc3QgYWN0aXZlVGFiID0gY2Fyb3VzZWxUYWJzRWwucXVlcnlTZWxlY3RvcihkYXRhLnNlbGVjdG9ycy5jYXJvdXNlbEFjdGl2ZVRhYik7XG5cbiAgICBpZiAodXNlVGFiQnV0dG9ucyAmJiB0YWJCdXR0b25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNhcm91c2VsVGFic0VsLmNsYXNzTGlzdC5yZW1vdmUoZGF0YS5jbGFzc05hbWVzLmNhcm91c2VsVGFic0hpZGRlbik7XG4gICAgICBhZGRFdmVudGxpc3RlbmVyc0ZvclRhYkJ1dHRvbnModGFiQnV0dG9ucyk7XG4gICAgICBtYWtlQWxsU2xpZGVzU2FtZUhlaWdodChzbGlkZXMpO1xuXG4gICAgICBpZiAoYWN0aXZlVGFiKSB7XG4gICAgICAgIGNvbnN0IGJ0biA9IGFjdGl2ZVRhYi5xdWVyeVNlbGVjdG9yKCdidXR0b24nKTtcbiAgICAgICAgaWYgKGJ0bikge1xuICAgICAgICAgIC8vIEZpbmQgdGhlIGluZGV4IG9mIHRoaXMgYnV0dG9uXG4gICAgICAgICAgY29uc3QgaW5kZXggPSBBcnJheS5mcm9tKHRhYkJ1dHRvbnMpLmluZGV4T2YoYnRuKTtcbiAgICAgICAgICAvLyBEaXJlY3RseSBjYWxsIHRoZSBoYW5kbGVyIGluc3RlYWQgb2YgdHJpZ2dlcmluZyBhIGNsaWNrIGV2ZW50XG4gICAgICAgICAgaGFuZGxlVGFiQnV0dG9uQ2xpY2soYnRuLCBpbmRleCk7XG4gICAgICAgICAgY2VudGVyQWN0aXZlVGFiQmFja3JvdW5kKGJ0bik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCByZWZyZXNoU3dpcGVyID0gKCkgPT4ge1xuICAgIGlmIChjYXJvdXNlbEVsLnN3aXBlcikge1xuICAgICAgc2xpZGVzLmZvckVhY2goc2xpZGUgPT4ge1xuICAgICAgICBzbGlkZS5zdHlsZS5oZWlnaHQgPSAnYXV0byc7XG4gICAgICB9KTtcbiAgICAgIGNhcm91c2VsRWwuc3dpcGVyLnVwZGF0ZVNpemUoKTtcbiAgICAgIGNhcm91c2VsRWwuc3dpcGVyLnVwZGF0ZVNsaWRlcygpO1xuICAgICAgY2Fyb3VzZWxFbC5zd2lwZXIudXBkYXRlUHJvZ3Jlc3MoKTtcbiAgICAgIGNhcm91c2VsRWwuc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcblxuICAgICAgLy8gSWYgdXNpbmcgdGFiIGJ1dHRvbnMsIGFsc28gdXBkYXRlIHNsaWRlIGhlaWdodHNcbiAgICAgIGlmICh1c2VUYWJCdXR0b25zKSB7XG4gICAgICAgIG1ha2VBbGxTbGlkZXNTYW1lSGVpZ2h0KHNsaWRlcyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHNldHVwUmVmZXJlbmNlcyA9ICgpID0+IHtcbiAgICBjb25zdCByZWZlcmVuY2UgPSBjYXJvdXNlbEVsLnF1ZXJ5U2VsZWN0b3IoJy5yZWZlcmVuY2VzJyk7XG4gICAgaWYgKCFyZWZlcmVuY2UpIHJldHVybjtcblxuICAgIHJlZmVyZW5jZXMgPSBbXTtcbiAgICBzbGlkZXMuZm9yRWFjaChzbGlkZSA9PiB7XG4gICAgICBjb25zdCByZWYgPSBzbGlkZS5xdWVyeVNlbGVjdG9yKCcucmVmZXJlbmNlcycpO1xuICAgICAgcmVmZXJlbmNlcy5wdXNoKHJlZiA/IHJlZiA6IG51bGwpO1xuICAgIH0pO1xuICAgIHJlZmVyZW5jZXNFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgcmVmZXJlbmNlc0VsZW1lbnQuY2xhc3NMaXN0LmFkZCgnY2Fyb3VzZWwtcmVmZXJlbmNlcycpO1xuICAgIGNhcm91c2VsRWwucGFyZW50RWxlbWVudC5hcHBlbmRDaGlsZChyZWZlcmVuY2VzRWxlbWVudCk7XG4gICAgdXBkYXRlUmVmZXJlbmNlKDApO1xuICB9XG5cbiAgY29uc3QgaW5pdCA9ICgpID0+IHtcbiAgICBjb25zdCBzd2lwZXIgPSBuZXcgU3dpcGVyKGNhcm91c2VsRWwsIHtcbiAgICAgIGRpcmVjdGlvbjogJ2hvcml6b250YWwnLFxuICAgICAgZ3JhYkN1cnNvcjogZmFsc2UsXG4gICAgICB3YXRjaE92ZXJmbG93OiB0cnVlLFxuICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICBlbDogY2Fyb3VzZWxCdWxsZXRzRWwsXG4gICAgICAgIHR5cGU6IFwiYnVsbGV0c1wiLFxuICAgICAgICBjbGlja2FibGU6IHRydWUsXG4gICAgICB9LFxuICAgICAgc2Nyb2xsYmFyOiB7XG4gICAgICAgIGVsOiAnLnN3aXBlci1zY3JvbGxiYXInLFxuICAgICAgICBkcmFnZ2FibGU6IHRydWUsXG4gICAgICAgIGhpZGU6IGZhbHNlXG4gICAgICB9LFxuICAgICAgd2F0Y2hTbGlkZXNQcm9ncmVzczogdHJ1ZSxcbiAgICAgIHdhdGNoU2xpZGVzVmlzaWJpbGl0eTogdHJ1ZSxcbiAgICAgIHNwYWNlQmV0d2VlbjogZGF0YS5ndXR0ZXJzLmxnLFxuICAgICAgLi4uYWRqdXN0YWJsZUNvbmZpZ1xuICAgIH0pO1xuXG4gICAgc2V0dXBSZWZlcmVuY2VzKCk7XG4gICAgbWFrZVZpZGVvc1NsaWRlc1N0b3BwYWJsZShzd2lwZXIpO1xuICAgIGFjdGl2YXRlVGFiQnV0dG9uKCk7XG4gICAgYWRkRXZlbnRsaXN0ZW5lcnMoKTtcbiAgfVxuICBjb25zdCBtYWtlQWxsU2xpZGVzU2FtZUhlaWdodCA9IChzbGlkZXMpID0+IHtcbiAgICBjb25zdCBtYXhIZWlnaHRPZlNsaWRlID0gTWF0aC5tYXgoXG4gICAgICAgIC4uLkFycmF5LmZyb20oc2xpZGVzKS5tYXAoc2xpZGUgPT4gc2xpZGUuY2xpZW50SGVpZ2h0KSk7XG4gICAgc2xpZGVzLmZvckVhY2goXG4gICAgICAgIHNsaWRlID0+IHNsaWRlLnN0eWxlLmhlaWdodCA9IFttYXhIZWlnaHRPZlNsaWRlLCAncHgnXS5qb2luKCcnKSk7XG4gIH1cblxuICAvKlxuICAqIFRoaXMgZnVuY3Rpb24gaXMgdGhlIG9ubHkgcG9zc2libGUgdHJpY2sgaG93IHBsYXlpbmcgaWZyYW1lIHZpZGVvXG4gICogY2FuIGJlIHN0b3BwZWQgd2hlbiBzbGlkZSBpcyBvdXRzaWRlIG9mIHZpZXdwb3J0IGFuZCBub3QgdmlzaWJsZS5cbiAgKlxuICAqIFRPRE8gOiBpbXBsZW1lbnQgY2FjaGUgZm9yIGlmcmFtZSBpbiB0aGUgc2xpZGUgc28gd2UgYXJlIG5vdCBxdWVyeWluZyBldmVyeSB0aW1lIHVzZXIgbW92ZXMgc2xpZGVcbiAgKi9cbiAgY29uc3QgbWFrZVZpZGVvc1NsaWRlc1N0b3BwYWJsZSA9IChzd2lwZXIp
118ID0+IHtcbiAgICAvLyBXZSBuZWVkIHRvIHJ1biB0aGlzIGZ1bmN0aW9uYWxpdHkgb25seSBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgdmlkZW9cbiAgICAvLyBleGlzdHMgaW4gc2xpZGVyLlxuICAgIGlmICghY2Fyb3VzZWxDb21wb25lbnRXcmFwcGVyRGl2LnF1ZXJ5U2VsZWN0b3IoJ2lmcmFtZScpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN3aXBlci5vbignc2xpZGVDaGFuZ2UnLCAoc2xpZGVyKSA9PiB7XG4gICAgICBzbGlkZXIuc2xpZGVzLmZvckVhY2goKHNsaWRlKSA9PiB7XG4gICAgICAgIGlmICghc2xpZGUuY2xhc3NMaXN0LmNvbnRhaW5zKGRhdGEuY2xhc3NOYW1lcy5zd2lwZXJTbGlkZVZpc2libGUpKSB7XG4gICAgICAgICAgY29uc3QgaWZyYW1lID0gc2xpZGUucXVlcnlTZWxlY3RvcignaWZyYW1lJyk7XG4gICAgICAgICAgaWYgKGlmcmFtZSkge1xuICAgICAgICAgICAgaWZyYW1lLnNyYyA9IGlmcmFtZS5zcmM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pO1xuICB9XG5cbiAgaW5pdCgpO1xufVxuXG5jb25zdCBpbml0QWxsID0gKCkgPT4ge1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsICgpID0+IHtcbiAgICBjb25zdCBjYXJvdXNlbENvbXBvbmVudFNlbGVjdG9yID0gXCIuc3dpcGVyLWNvbnRhaW5lclwiO1xuICAgIGNvbnN0IGNhcm91c2VscyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoY2Fyb3VzZWxDb21wb25lbnRTZWxlY3Rvcik7XG4gICAgY2Fyb3VzZWxzLmZvckVhY2goY2Fyb3VzZWxFbCA9PiBuZXcgQ2Fyb3VzZWwoY2Fyb3VzZWxFbCkpO1xuICB9KTtcbn1cbmV4cG9ydCB7aW5pdEFsbH1cbi8qIGVzbGludC1lbmFibGUgKi9cbiIsImltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IFZ1ZUlzb3RvcGUgZnJvbSAnLi9jb21wb25lbnRzL2NvbnRlbnRjYXRlZ29yeWZpbHRlci52dWUnXG5pbXBvcnQgcm91dGVyIGZyb20gJy4vcm91dGVyLmpzJ1xuXG4vKlxuKiBUaGlzIGlzIHZ1ZS5qcyBpbml0aWFsaXphdGlvbiBwcm9jZXNzLCBpdCB3aWxsIGNyZWF0ZSBmZXcgdnVlLmpzIGluc3RhbmNlcyxcbiogYmFzZWQgb24gYWVtIGNvbXBvbmVudCBleGlzdGVuY2UuIEJ5IGRvaW5nIHRoYXQgd2UgZG8gbmVlZCB0byBoYXZlIGdsb2JhbCBzY29wZVxuKiBmb3IgdnVlLmpzIHdoaWNoIGJyaW5ncyBhIGxvdCBvZiBwcm9ibGVtcyBpbiBBRU0gd2Vic2l0ZS5cbiovXG5jb25zdCBWVUVfQ09NUE9ORU5UU19BRU1fQ09NUE9ORU5UU19NQVAgPSB7XG4gICAgXCJjb250ZW50Y2F0ZWdvcnlmaWx0ZXJcIjoge1xuICAgICAgICBcInZ1ZS1pc290b3BlXCI6IFZ1ZUlzb3RvcGVcbiAgICB9XG59O1xuXG5PYmplY3Qua2V5cyhWVUVfQ09NUE9ORU5UU19BRU1fQ09NUE9ORU5UU19NQVApLmZvckVhY2goYWVtQ29tcG9uZW50ID0+IHtcbiAgICBjb25zdCBhZW1Db21wb25lbnRDbGFzcyA9IFwiLlwiICsgYWVtQ29tcG9uZW50O1xuICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGFlbUNvbXBvbmVudENsYXNzKSkge1xuICAgICAgICBuZXcgVnVlKHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAgICAgICAgIHJvdXRlcixcbiAgICAgICAgICAgIGVsOiBhZW1Db21wb25lbnRDbGFzcyxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IFZVRV9DT01QT05FTlRTX0FFTV9DT01QT05FTlRTX01BUFthZW1Db21wb25lbnRdXG4gICAgICAgIH0pO1xuICAgIH1cbn0pO1xuXG4vKiBWdWUgaW5pdGlhbGl6YXRpb24gZW5kICovXG5cbi8vIEVsZW1lbnRzXG5pbXBvcnQgJy4vZWxlbWVudHMvaW1hZ2VzLmpzJyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHNvcnQtaW1wb3J0c1xuXG4vLyBDb21wb25lbnRzIGFuZCBTZXR0aW5nc1xuaW1wb3J0ICcuL2NvbXBvbmVudHMvc3RpY2t5QW5jaG9yTWVudS5qcydcbmltcG9ydCB7QW5pbWF0aW9uc30gZnJvbSAnLi9zZXR0aW5ncy9hbmltYXRpb25zLmpzJ1xuaW1wb3J0IHtGb290ZXJ9IGZyb20gJy4vY29tcG9uZW50cy9mb290ZXIuanMnXG5pbXBvcnQgSGNwTG9jYXRvciBmcm9tIFwiLi9jb21wb25lbnRzL2hjcC1sb2NhdG9yXCI7XG5pbXBvcnQge0hlYWRlcn0gZnJvbSAnLi9jb21wb25lbnRzL2hlYWRlci5qcydcbmltcG9ydCB7TW9kYWx9IGZyb20gJy4vY29tcG9uZW50cy9tb2RhbC9tb2RhbC5qcydcbmltcG9ydCB7U3RlcERlY2t9IGZyb20gJy4vY29tcG9uZW50cy9zdGVwRGVjay5qcydcbmltcG9ydCB7aW5pdEFsbH0gIGZyb20gJy4vY29tcG9uZW50cy9jYXJvdXNlbC5qcydcblxuXG5uZXcgSGVhZGVyKCkuaW5pdCgpXG5uZXcgQW5pbWF0aW9ucygpLmluaXQoKVxubmV3IE1vZGFsKCkuaW5pdCgpXG5uZXcgU3RlcERlY2soKS5pbml0KClcbkFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmNtcC1oY3AtbG9jYXRvcicpKS5mb3JFYWNoKGhjcFNlbGVjdG9yQ21wID0+IHtcbiAgICBjb25zdCBoY3BDb21wb25lbnQgPSBuZXcgSGNwTG9jYXRvcihoY3BTZWxlY3RvckNtcCk7XG4gICAgaGNwQ29tcG9uZW50LmluaXQoKTtcbn0pO1xubmV3IEZvb3RlcigpLmluaXQoKVxuaW5pdEFsbCgpIiwiaW1wb3J0IHtOZXdzbGV0dGVyUG9wdXBQYWdlTG9hZCwgTmV3c2xldHRlclBvcHVwVHJpZ2dlcmVkQnlUYXJnZXR9IGZyb20gJy4vcG9wdXAvbmV3c2xldHRlcidcbmltcG9ydCB7Q29uc3RhbnQgYXMgQ30gZnJvbSAnLi9oZWxwZXJzJ1xuaW1wb3J0IHtMZWF2ZVNpdGVQb3B1cH0gZnJvbSAnLi9wb3B1cC9sZWF2ZVNpdGUnXG5pbXBvcnQge09uQ29va2llUHJlc2VudH0gZnJvbSAnLi9wb3B1cC9vbkNvb2tpZVByZXNlbnQnXG5pbXBvcnQge09uUGFnZUxvYWRQb3B1cH0gZnJvbSAnLi9wb3B1cC9vblBhZ2VMb2FkJ1xuXG4vLyBNb2RhbHNcbmNvbnN0IE1vZGFsID0gKCkgPT4ge1xuICAgIGNvbnN0IGNsb3NlTW9kYWxCdXR0b25MaXN0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7Qy5NT0RBTF9DTE9TRV9CVVRUT059YClcbiAgICBjb25zdCBwYWdlTW9kYWxzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7Qy5NT0RBTF9XUkFQUEVSfWApXG5cbiAgICAvKipcbiAgICAgKiBXaGVuIGNsb3NlIG1vZGFsIGJ1dHRvbiBpcyBwcmVzc2VkLCB0aGVuXG4gICAgICogaGlkZSBtb2RhbCBwb3B1cCBhbmQgcm9sbGJhY2sgYm9keSBzY3JvbGxpbmdcbiAgICAgKiBAcGFyYW0ge2VsZW1lbnR9IGJ1dHRvbiBjbG9zZSBtb2RhbCBidXR0b25cbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICAgKi9cbiAgICBjb25zdCBjbG9zZU1vZGFsT25DbGljayA9IGJ1dHRvbiA9PiB7XG4gICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGV2dCA9PiB7XG5cbiAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICBkb2
118N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoQy5NT0RBTF9PUEVOKVxuICAgICAgICAgICAgYnV0dG9uLmNsb3Nlc3QoYC4ke0MuTU9EQUxfV1JBUFBFUn1gKT8uY2xhc3NMaXN0LnJlbW92ZShDLk1PREFMX09QRU4pXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgY29uc3QgaW5pdCA9ICgpID0+IHtcbiAgICAgICAgY2xvc2VNb2RhbEJ1dHRvbkxpc3QuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGNsb3NlTW9kYWxPbkNsaWNrKGl0ZW0pO1xuICAgICAgICB9KVxuXG4gICAgICAgIHBhZ2VNb2RhbHMuZm9yRWFjaChtb2RhbCA9PiB7XG4gICAgICAgICAgICBsZXQge2RhdGFzZXQ6IHt0cmlnZ2VyOiB0cmlnZ2VyVmFsdWUsIGNvbmRpdGlvbjogY29uZGl0aW9uVmFsdWV9fSA9IG1vZGFsO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKHRyaWdnZXJWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2xlYXZlc2l0ZSc6XG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXdcbiAgICAgICAgICAgICAgICAgICAgbmV3IExlYXZlU2l0ZVBvcHVwKG1vZGFsKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAncGFnZWxvYWQnOlxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvbmRpdGlvblZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtaXNzaW5nQ29va2llJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgT25Db29raWVQcmVzZW50KCkuaW5pdChtb2RhbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ25ld3NsZXR0ZXInOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBOZXdzbGV0dGVyUG9wdXBQYWdlTG9hZCgpLmluaXQobW9kYWwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBPblBhZ2VMb2FkUG9wdXAoKS5pbml0KG1vZGFsKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2V4dGVybmFsdHJpZ2dlcic6XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY29uZGl0aW9uVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ25ld3NsZXR0ZXInOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBOZXdzbGV0dGVyUG9wdXBUcmlnZ2VyZWRCeVRhcmdldCgpLmluaXQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKEMuTVNHX1BPUFVQX05PVF9GT1VORCwgY29uZGl0aW9uVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhDLk1TR19QT1BVUF9OT1RfRk9VTkQsIHRyaWdnZXJWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgaW5pdFxuICAgIH1cbn1cbmV4cG9ydCB7TW9kYWx9XG4iLCJjb25zdCBTdGVwRGVjayA9ICh7XG4gICAgc2VsZWN0b3IgPSB7XG4gICAgICAgIEJBTk5FUjogJy5iYW5uZXInLFxuICAgICAgICBCQU5ORVJfT1ZFUkxBWTogJy5iYW5uZXItb3ZlcmxheScsXG4gICAgICAgIFNURVBERUNLOiAnLnN0ZXBjb250YWluZXInXG4gICAgfVxufSA9IHt9KSA9PiB7XG5cbiAgICBjb25zdCBiYW5uZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAke3NlbGVjdG9yLkJBTk5FUn1gKVxuICAgIGNvbnN0IGJhbm5lck92ZXJsYXkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAke3NlbGVjdG9yLkJBTk5FUl9PVkVSTEFZfWApXG4gICAgY29uc3Qgc3RlcERlY2sgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAke3NlbGVjdG9yLlNURVBERUNLfWApXG5cbiAgICBjb25zdCBhZGp1c3RCYW5uZXJIZWlnaHQgPSAoKSA9PiB7XG5cbiAgICAgICAgYmFubmVyT3ZlcmxheS5jbGFzc0xpc3QuYWRkKCdiYW5uZXItb3ZlcmxheS0tY29udGVudC1jb250cm9sbGVkJyk7XG4gICAgICAgIGxldCBiYW5uZXJPdmVybGF5SGVpZ2h0ID0gYmFubmVyT3ZlcmxheS5vZmZzZXRIZWlnaHQgKyAzMDtcbiAgICAgICAgYmFubmVyLnN0eWxlLm1heEhlaWdodCA9IGJhbm5lck92ZXJsYXlIZWlnaHQgKyAncHgnO1xuICAgICAgICBiYW5uZXIuc3R5bGUuaGVpZ2h0ID0gYmFubmVyT3ZlcmxheUhlaWdodCArICdweCc7XG5cbiAgICB9XG5cbiAgICBjb25zdCBjaGVja0ZvclN0ZXBEZWNrID0gKCkgPT4ge1xuICAgICAgICBpZiAoc3RlcERlY2spIHtcbiAgICAgICAgICAgIGxldCB0aW1lb3V0ID0gMDtcbiAgICAgICAgICAgIGxldCBsYXN0V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoICE9PSBsYXN0V2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChhZGp1c3RCYW5uZXJIZWlnaHQsIDEwMCk7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYWRqdXN0QmFubmVySGVpZ2h0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJbml0XG4gICAgY29uc3QgaW5pdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2hlY2tGb3JTdGVwRGVjaygpXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgaW5pdFxuICAgIH1cblxufTtcblxuZXhwb3J0IHtTdGVwRGVja30iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuY29uc3QgRm9vdGVyID0gKHtcbiAgc2VsZWN0b3IgPSB7XG4gICAgRk9PVEVSOiAnLmZvb3RlcicsXG4gICAgQ09PS0lFX0JUTjogJy5jdGFidXR0b246aGFzKC5vdC1zZGstc2hvdy1zZXR0aW5ncyknLFxuICAgIExBTkdfT
118kFWOiAnLmxhbmd1YWdlbmF2aWdhdGlvbidcbiAgfVxufSA9IHt9KSA9PiB7XG4gIGNvbnN0IGZvb3RlckVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvci5GT09URVIpO1xuICBjb25zdCBjb29raWVCdG4gPSBmb290ZXJFbD8ucXVlcnlTZWxlY3RvcihzZWxlY3Rvci5DT09LSUVfQlROKTtcbiAgY29uc3QgbGFuZ05hdiA9IGZvb3RlckVsPy5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yLkxBTkdfTkFWKTtcblxuICAvLyBJbml0XG4gIGNvbnN0IGluaXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGNvb2tpZUJ0bikge1xuICAgICAgaWYgKGxhbmdOYXYpIHtcbiAgICAgICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB3cmFwcGVyLmNsYXNzTGlzdC5hZGQoJ2Zvb3Rlcl9fbGFuZ3VhZ2VuYXZpZ2F0aW9uLXdyYXBwZXInKTtcbiAgICAgICAgbGFuZ05hdi5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh3cmFwcGVyLCBsYW5nTmF2KTtcbiAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChjb29raWVCdG4pO1xuICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKGxhbmdOYXYpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaW5pdFxuICB9XG59XG5leHBvcnQge0Zvb3Rlcn1cbiJdLCJuYW1lcyI6WyJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJjbG9uZVN0aWNreUFuY2hvck1lbnUiLCJjbG9uZU5vZGUiLCJyZW1vdmUiLCJhcHBlbmRDaGlsZCIsInN0aWNreUFuY2hvck1lbnUiLCJzdGlja3lBbmNob3JNZW51Q29udGVudCIsInN0aWNreUFuY2hvck1lbnVMZWZ0QXJyb3ciLCJzdGlja3lBbmNob3JNZW51UmlnaHRBcnJvdyIsImRpc3BsYWNlbWVudCIsIm1lbnVMZWZ0UG9zIiwibWVudVdpZHRoIiwibWVudUNvbnRlbnRMZWZ0UG9zIiwibWVudUNvbnRlbnRXaWR0aCIsInN3aXBlIiwiZGlyZWN0aW9uIiwib2Zmc2V0TGVmdCIsIm9mZnNldFdpZHRoIiwic3R5bGUiLCJtYXJnaW5SaWdodCIsIm1hcmdpbkxlZnQiLCJzZXRUaW1lb3V0IiwiY29uc29sZSIsImxvZyIsIm5ld0NvbnRlbnRQb3NpdGlvbiIsImNoZWNrQ29udGVudFNjcm9sbFRpbWVvdXQiLCJtb2JpbGVWZXJzaW9uIiwiY2xhc3NMaXN0IiwiY29udGFpbnMiLCJhZGQiLCJhZGRFdmVudExpc3RlbmVyIiwiZXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsInRpbWVvdXQiLCJsYXN0V2lkdGgiLCJ3aW5kb3ciLCJpbm5lcldpZHRoIiwiY2xlYXJUaW1lb3V0Iiwib2xkU2Nyb2xsUG9zIiwibmV3U2Nyb2xsUG9zIiwicGFnZVlPZmZzZXQiLCJzZXRBdHRyaWJ1dGUiLCJzY3JvbGxZIiwic2Nyb2xsVGltZW91dCIsImZhY3RvcnkiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwiX191bnVzZWRfd2VicGFja19tb2R1bGUiLCJleHBvcnRzIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJ2YWx1ZSIsImNsZWFyQ2hvaWNlcyIsImFjdGl2YXRlQ2hvaWNlcyIsImZpbHRlckNob2ljZXMiLCJhZGRDaG9pY2UiLCJjb25zdGFudHNfMSIsIl9hIiwibGFiZWwiLCJpZCIsImdyb3VwSWQiLCJkaXNhYmxlZCIsImVsZW1lbnRJZCIsImN1c3RvbVByb3BlcnRpZXMiLCJwbGFjZWhvbGRlciIsImtleUNvZGUiLCJ0eXBlIiwiQUNUSU9OX1RZUEVTIiwiQUREX0NIT0lDRSIsInJlc3VsdHMiLCJGSUxURVJfQ0hPSUNFUyIsImFjdGl2ZSIsIkFDVElWQVRFX0NIT0lDRVMiLCJDTEVBUl9DSE9JQ0VTIiwiYWRkR3JvdXAiLCJBRERfR1JPVVAiLCJoaWdobGlnaHRJdGVtIiwicmVtb3ZlSXRlbSIsImFkZEl0ZW0iLCJjaG9pY2VJZCIsIkFERF9JVEVNIiwiUkVNT1ZFX0lURU0iLCJoaWdobGlnaHRlZCIsIkhJR0hMSUdIVF9JVEVNIiwic2V0SXNMb2FkaW5nIiwicmVzZXRUbyIsImNsZWFyQWxsIiwiQ0xFQVJfQUxMIiwic3RhdGUiLCJSRVNFVF9UTyIsImlzTG9hZGluZyIsIlNFVF9JU19MT0FESU5HIiwiX19zcHJlYWRBcnJheSIsInRoaXMiLCJ0byIsImZyb20iLCJwYWNrIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXIiLCJpIiwibCIsIkFycmF5IiwicHJvdG90eXBlIiwic2xpY2UiLCJjYWxsIiwiY29uY2F0IiwiX19pbXBvcnREZWZhdWx0IiwibW9kIiwiX19lc01vZHVsZSIsImRlZXBtZXJnZV8xIiwiZnVzZV9qc18xIiwiY2hvaWNlc18xIiwiZ3JvdXBzXzEiLCJpdGVtc18xIiwibWlzY18xIiwiY29tcG9uZW50c18xIiwiZGVmYXVsdHNfMSIsInV0aWxzXzEiLCJyZWR1Y2Vyc18xIiwic3RvcmVfMSIsInRlbXBsYXRlc18xIiwiSVNfSUUxMSIsImRvY3VtZW50RWxlbWVudCIsIlVTRVJfREVGQVVMVFMiLCJDaG9pY2VzIiwiZWxlbWVudCIsInVzZXJDb25maWciLCJfdGhpcyIsInVuZGVmaW5lZCIsImFsbG93SFRNTCIsIndhcm4iLCJjb25maWciLCJkZWZhdWx0IiwiYWxsIiwiREVGQVVMVF9DT05GSUciLCJkZWZhdWx0cyIsIm9wdGlvbnMiLCJhcnJheU1lcmdlIiwiXyIsInNvdXJjZUFycmF5IiwiaW52YWxpZENvbmZpZ09wdGlvbnMiLCJkaWZmIiwiam9pbiIsInBhc3NlZEVsZW1lbnQiLCJIVE1MSW5wdXRFbGVtZW50IiwiSFRNTFNlbGVjdEVsZW1lbnQiLCJUeXBlRXJyb3IiLCJfaXNUZXh0RWxlbWVudCIsIlRFWFRfVFlQRSIsIl9pc1NlbGVjdE9uZUVsZW1lbnQiLCJTRUxFQ1RfT05FX1RZUEUiLCJfaXNTZWxlY3RNdWx0aXBsZUVsZW1lbnQiLCJTRUxFQ1RfTVVMVElQTEVfVFlQRSIsIl9pc1NlbGVjdEVsZW1lbnQiLCJzZWFyY2hFbmFibGVkIiwiaW5jbHVkZXMiLCJyZW5kZXJTZWxlY3RlZENob2ljZXMiLCJhZGRJdGVtRmlsdGVyIiwicmUiLCJSZWdFeHAiLCJ0ZXN0IiwiYmluZCIsIldyYXBwZWRJbnB1dCIsImNsYXNzTmFtZXMiLCJkZWxpbWl0ZXIiLCJXcmFwcGVkU2VsZWN0IiwidGVtcGxhdGUiLCJkYXRhIiwiX3RlbXBsYXRlcyIsIm9wdGlvbiIsImluaXRpYWxpc2VkIiwiX3N0b3JlIiwiX2luaXRpYWxTdGF0ZSIsImRlZmF1bHRTdGF0ZSIsIl9jdXJyZW50U3RhdGUiLCJfcHJldlN0YXRlIiwiX2N1cnJlbnRWYWx1ZSIsIl9jYW5TZWFyY2giLCJfaXNTY3JvbGxpbmdPbkllIiwiX2hpZ2hsaWdodFBvc2l0aW9uIiwiX3dhc1RhcCIsIl9wbGFjZWhvbGRlclZhbHVlIiwiX2dlbmVyYXRlUGxhY2Vob2xkZXJWYWx1ZSIsIl9iYXNlSWQiLCJnZW5lcmF0ZUlkIiwiX2RpcmVjdGlvbiIsImRpciIsImVsZW1lbnREaXJlY3Rpb24iLCJnZXRDb21wdXRlZFN0eWxlIiwiX2lkTmFtZXMiLCJpdGVtQ2hvaWNlIiwiX3ByZXNldEdyb3VwcyIsIm9wdGlvbkdyb3VwcyIsIl9wcmVzZXRPcHRpb25zIiwiX3ByZXNldENob2ljZXMiLCJjaG9pY2VzIiwiX3ByZXNldEl0ZW1zIiwiaXRlbXMiLCJzcGxpdFZhbHVlcyIsInNwbGl0IiwiZm9yRWFjaCIsInB1c2giLCJpbm5lckhUTUwiLCJzZWxlY3RlZCIsInBhcmVudE5vZGUiLCJoYXNBdHRyaWJ1dGUiLCJkYXRhc2V0IiwiX3JlbmRlciIsIl9vbkZvY3VzIiwiX29uQmx1ciIsIl9vbktleVVwIiwiX29uS2V5RG93biIsIl9vbkNsaWNrIiwiX29uVG91Y2hNb3ZlIiwiX29uVG91Y2hFbmQiLCJfb25Nb3VzZURvd24
118iLCJfb25Nb3VzZU92ZXIiLCJfb25Gb3JtUmVzZXQiLCJfb25TZWxlY3RLZXkiLCJfb25FbnRlcktleSIsIl9vbkVzY2FwZUtleSIsIl9vbkRpcmVjdGlvbktleSIsIl9vbkRlbGV0ZUtleSIsImlzQWN0aXZlIiwic2lsZW50IiwiaW5pdCIsImdldCIsInByZXZlbnRFeHRlbnNpb25zIiwidGVtcGxhdGVzIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIl9jcmVhdGVUZW1wbGF0ZXMiLCJfY3JlYXRlRWxlbWVudHMiLCJfY3JlYXRlU3RydWN0dXJlIiwic3Vic2NyaWJlIiwiX2FkZEV2ZW50TGlzdGVuZXJzIiwiYWRkSXRlbXMiLCJkaXNhYmxlIiwiY2FsbGJhY2tPbkluaXQiLCJkZXN0cm95IiwiX3JlbW92ZUV2ZW50TGlzdGVuZXJzIiwicmV2ZWFsIiwiY29udGFpbmVyT3V0ZXIiLCJ1bndyYXAiLCJjbGVhclN0b3JlIiwiZW5hYmxlIiwiaXNEaXNhYmxlZCIsImlucHV0IiwiaXRlbSIsInJ1bkV2ZW50IiwiX2IiLCJfYyIsImdyb3VwIiwiZ2V0R3JvdXBCeUlkIiwiZGlzcGF0Y2giLCJ0cmlnZ2VyRXZlbnQiLCJFVkVOVFMiLCJncm91cFZhbHVlIiwidW5oaWdobGlnaHRJdGVtIiwiaGlnaGxpZ2h0QWxsIiwidW5oaWdobGlnaHRBbGwiLCJyZW1vdmVBY3RpdmVJdGVtc0J5VmFsdWUiLCJhY3RpdmVJdGVtcyIsImZpbHRlciIsIl9yZW1vdmVJdGVtIiwicmVtb3ZlQWN0aXZlSXRlbXMiLCJleGNsdWRlZElkIiwicmVtb3ZlSGlnaGxpZ2h0ZWRJdGVtcyIsImhpZ2hsaWdodGVkQWN0aXZlSXRlbXMiLCJfdHJpZ2dlckNoYW5nZSIsInNob3dEcm9wZG93biIsInByZXZlbnRJbnB1dEZvY3VzIiwiZHJvcGRvd24iLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJzaG93Iiwib3BlbiIsImRpc3RhbmNlRnJvbVRvcFdpbmRvdyIsImZvY3VzIiwiaGlkZURyb3Bkb3duIiwicHJldmVudElucHV0Qmx1ciIsImhpZGUiLCJjbG9zZSIsInJlbW92ZUFjdGl2ZURlc2NlbmRhbnQiLCJibHVyIiwiZ2V0VmFsdWUiLCJ2YWx1ZU9ubHkiLCJ2YWx1ZXMiLCJyZWR1Y2UiLCJzZWxlY3RlZEl0ZW1zIiwiaXRlbVZhbHVlIiwic2V0VmFsdWUiLCJfc2V0Q2hvaWNlT3JJdGVtIiwic2V0Q2hvaWNlQnlWYWx1ZSIsImlzQXJyYXkiLCJ2YWwiLCJfZmluZEFuZFNlbGVjdENob2ljZUJ5VmFsdWUiLCJzZXRDaG9pY2VzIiwiY2hvaWNlc0FycmF5T3JGZXRjaGVyIiwicmVwbGFjZUNob2ljZXMiLCJSZWZlcmVuY2VFcnJvciIsImZldGNoZXJfMSIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsIl9oYW5kbGVMb2FkaW5nU3RhdGUiLCJjYXRjaCIsImVyciIsImVycm9yIiwicmVtb3ZlTG9hZGluZ1N0YXRlIiwiX3N0YXJ0TG9hZGluZyIsImdyb3VwT3JDaG9pY2UiLCJfYWRkR3JvdXAiLCJwYXJzZUludCIsInZhbHVlS2V5IiwibGFiZWxLZXkiLCJjaG9pY2UiLCJfYWRkQ2hvaWNlIiwiaXNTZWxlY3RlZCIsIl9zdG9wTG9hZGluZyIsImNsZWFySW5wdXQiLCJzaG91bGRTZXRJbnB1dFdpZHRoIiwiY2xlYXIiLCJfaXNTZWFyY2hpbmciLCJzdGF0ZUNoYW5nZWQiLCJncm91cHMiLCJzaG91bGRSZW5kZXJDaG9pY2VzIiwic2hvdWxkUmVuZGVySXRlbXMiLCJfcmVuZGVyQ2hvaWNlcyIsIl9yZW5kZXJJdGVtcyIsImFjdGl2ZUdyb3VwcyIsImFjdGl2ZUNob2ljZXMiLCJjaG9pY2VMaXN0RnJhZ21lbnQiLCJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwiY2hvaWNlTGlzdCIsInJlc2V0U2Nyb2xsUG9zaXRpb24iLCJzY3JvbGxUb1RvcCIsImFjdGl2ZVBsYWNlaG9sZGVycyIsImFjdGl2ZUNob2ljZSIsIl9jcmVhdGVDaG9pY2VzRnJhZ21lbnQiLCJfY3JlYXRlR3JvdXBzRnJhZ21lbnQiLCJjaGlsZE5vZGVzIiwiY2FuQWRkSXRlbSIsIl9jYW5BZGRJdGVtIiwicmVzcG9uc2UiLCJhcHBlbmQiLCJfaGlnaGxpZ2h0Q2hvaWNlIiwibm90aWNlIiwiX2dldFRlbXBsYXRlIiwiZHJvcGRvd25JdGVtIiwibm9SZXN1bHRzVGV4dCIsIm5vQ2hvaWNlc1RleHQiLCJpdGVtTGlzdCIsIml0ZW1MaXN0RnJhZ21lbnQiLCJfY3JlYXRlSXRlbXNGcmFnbWVudCIsImZyYWdtZW50Iiwic2hvdWxkU29ydCIsInNvcnQiLCJzb3J0ZXIiLCJncm91cENob2ljZXMiLCJnZXRHcm91cENob2ljZXMiLCJkcm9wZG93bkdyb3VwIiwid2l0aGluR3JvdXAiLCJzZWFyY2hSZXN1bHRMaW1pdCIsInJlbmRlckNob2ljZUxpbWl0Iiwic29ydEJ5U2NvcmUiLCJhcHBlbmRDaG9pY2UiLCJpdGVtU2VsZWN0VGV4dCIsInJlbmRlcmVyYWJsZUNob2ljZXMiLCJhY2MiLCJwbGFjZWhvbGRlckNob2ljZXMiLCJub3JtYWxDaG9pY2VzIiwiY2hvaWNlTGltaXQiLCJzb3J0ZWRDaG9pY2VzIiwic2hvdWxkU29ydEl0ZW1zIiwicmVtb3ZlSXRlbUJ1dHRvbiIsIm1hcCIsImxpc3RJdGVtIiwiY2hhbmdlIiwiX3NlbGVjdFBsYWNlaG9sZGVyQ2hvaWNlIiwicGxhY2Vob2xkZXJDaG9pY2UiLCJfYWRkSXRlbSIsIl9oYW5kbGVCdXR0b25BY3Rpb24iLCJyZW1vdmVJdGVtcyIsIml0ZW1JZCIsIml0ZW1Ub1JlbW92ZSIsImZpbmQiLCJfaGFuZGxlSXRlbUFjdGlvbiIsImhhc1NoaWZ0S2V5IiwicGFzc2VkSWQiLCJfaGFuZGxlQ2hvaWNlQWN0aW9uIiwiZ2V0Q2hvaWNlQnlJZCIsInBhc3NlZEtleUNvZGUiLCJoYXNBY3RpdmVEcm9wZG93biIsIl9oYW5kbGVCYWNrc3BhY2UiLCJsYXN0SXRlbSIsImhhc0hpZ2hsaWdodGVkSXRlbXMiLCJzb21lIiwiZWRpdEl0ZW1zIiwic2V0V2lkdGgiLCJzZXRMb2FkaW5nIiwicGxhY2Vob2xkZXJJdGVtIiwiZ2V0Q2hpbGQiLCJhZGRMb2FkaW5nU3RhdGUiLCJsb2FkaW5nVGV4dCIsIl9oYW5kbGVTZWFyY2giLCJpc0ZvY3Vzc2VkIiwic2VhcmNoRmxvb3IiLCJzZWFyY2hDaG9pY2VzIiwiaGFzVW5hY3RpdmVDaG9pY2VzIiwicmVzdWx0Q291bnQiLCJfc2VhcmNoQ2hvaWNlcyIsInNlYXJjaCIsImFkZEl0ZW1UZXh0IiwiaXNEdXBsaWNhdGVWYWx1ZSIsImV4aXN0c0luQXJyYXkiLCJtYXhJdGVtQ291bnQiLCJtYXhJdGVtVGV4dCIsImR1cGxpY2F0ZUl0ZW1zQWxsb3dlZCIsInVuaXF1ZUl0ZW1UZXh0IiwiY3VzdG9tQWRkSXRlbVRleHQiLCJuZXdWYWx1ZSIsInRyaW0iLCJjdXJyZW50VmFsdWUiLCJoYXlzdGFjayIsInNlYXJjaGFibGVDaG9pY2VzIiwibmVlZGxlIiwiYXNzaWduIiwiZnVzZU9wdGlvbnMiLCJrZXlzIiwic2VhcmNoRmllbGRzIiwiaW5jbHVkZU1hdGNoZXMiLCJwYXNzaXZlIiwiZm9ybSIsImFkZEV2ZW50TGlzdGVuZXJzIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXJzIiwiaGFzRm9jdXNlZElucHV0IiwiaGFzSXRlbXMiLCJoYXNDaGlsZHJlbiIsImtleVN0cmluZyIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsIndhc0FscGhhTnVtZXJpY0NoYXIiLCJCQUNLX0tFWSIsIktFWV9DT0RFUyIsIkRFTEVURV9LRVkiLCJFTlRFUl9LRVkiLCJBX0tFWSIsIkVTQ19LRVkiLCJVUF9LRVkiLCJET1dOX0tFWSIsIlBBR0VfVVBfS0VZIiwiUEFHRV9ET1dOX0tFWSIsInRvTG93ZXJDYXNlIiwidGFyZ2V0IiwiYmFja0tleSIsImRlbGV0ZUtleSIsIm91dGVySFRNTCIsInVzZXJIYXNSZW1vdmVkVmFsdWUiLCJjYW5SZWFjdGl2YXRlQ2hvaWNlcyIsImNhblNlYXJjaCIsInJhd1ZhbHVlIiwiY3RybEtleSIsIm1ldGFLZXkiLCJhY3RpdmVFbGVtZW50IiwiZW50ZXJLZXkiLCJ0YXJnZXRXYXNCdXR0b24iLCJoaWdobGlnaHRlZENob2ljZSIsImhpZ2hsaWdodGVkU3RhdGUiLCJkb3duS2V5IiwicGFnZVVwS2V5IiwicGFnZURvd25LZXkiLCJkaXJlY3Rpb25JbnQiLCJzZWxlY3RhYmxlQ2hvaWNlSWRlbnRpZmllciIsIm5leHRFbCIsImN1cnJlbnRFbCIsImdldEFkamFjZW50RWwiLCJpc1Njcm9sbGVkSW50b1ZpZXciLCJzY3JvbGxUb0NoaWxkRWxlbWVudCIsInRvdWNoZXMiLCJjb250YWluZXJJbm5lciIsInN0b3BQcm9wYWdhdGlvbiIsIkhUTUxFbGVtZW50IiwiZmlyc3RDaG9pY2UiLCJmaXJzdEVsZW1lbnRDaGlsZCIsImlzT25TY3JvbGxiYXIiLCJvZmZzZXRYIiwiY2xvc2VzdCIsInNoaWZ0S2V5IiwicmVtb3ZlRm9jdXNTdGF0ZSIsImFkZEZvY3VzU3RhdGUiLCJoYXNIaWdobGlnaHRlZEl0ZW1zXzEiLCJlbCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJwYXNzZWRFbCIsImluZGV4T2YiLCJoaWdobGlnaHRDaG9pY2UiLCJzZXRBY3RpdmVEZXNjZW5kYW50IiwiX2QiLCJfZSIsIl9mIiwiX2ciLCJwYXNzZWRWYWx1ZSIsInBhc3NlZExhYmVsIiwicGFzc2VkT3B0aW9uSWQiLCJwcmVwZW5kVmFsdWUiLCJ0b1N0cmluZyIsImFwcGVuZFZhbHVlIiwiX2giLCJjaG9pY2VMYWJlbCIsImNob2ljZUVsZW1lbnRJZCIsImlzVHlwZSIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiTWF0aCIsImZsb29yIiwiRGF0ZSIsInZhbHVlT2YiLCJyYW5kb20iLCJpc09wdERpc2FibGVkIiwiYXJncyIsIl9pIiwiYXBwbHkiLCJjYWxsYmFja09uQ3JlYXRlVGVtcGxhdGVzIiwidXNlclRlbXBsYXRlcyIsInN0clRvRWwiLCJDb250YWluZXIiLCJsYWJlbElkIiwicG9zaXRpb24iLCJJbnB1dCIsInByZXZlbn
118RQYXN0ZSIsInBhc3RlIiwiTGlzdCIsIkRyb3Bkb3duIiwiY29uY2VhbCIsIndyYXAiLCJzZWFyY2hQbGFjZWhvbGRlclZhbHVlIiwiaW5zZXJ0QmVmb3JlIiwiZmlyc3RDaGlsZCIsIl9hZGRQcmVkZWZpbmVkR3JvdXBzIiwiX2FkZFByZWRlZmluZWRDaG9pY2VzIiwiX2FkZFByZWRlZmluZWRJdGVtcyIsInBsYWNlaG9sZGVyT3B0aW9uIiwidGFnTmFtZSIsImhhc1NlbGVjdGVkQ2hvaWNlIiwiZmlyc3RFbmFibGVkQ2hvaWNlSW5kZXgiLCJmaW5kSW5kZXgiLCJpbmRleCIsIm9iamVjdCIsInN0cmluZyIsImdldFR5cGUiLCJmb3VuZENob2ljZSIsInZhbHVlQ29tcGFyZXIiLCJ0ZXh0IiwicGxhY2Vob2xkZXJWYWx1ZSIsImlzT3BlbiIsImlzRmxpcHBlZCIsInNob3VsZEZsaXAiLCJkcm9wZG93blBvcyIsIm1hdGNoTWVkaWEiLCJtYXRjaGVzIiwiYWN0aXZlRGVzY2VuZGFudElEIiwicmVtb3ZlQXR0cmlidXRlIiwib3BlblN0YXRlIiwiZmxpcHBlZFN0YXRlIiwiZm9jdXNTdGF0ZSIsImRpc2FibGVkU3RhdGUiLCJyZW1vdmVDaGlsZCIsImxvYWRpbmdTdGF0ZSIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImJvdHRvbSIsInNlbGVjdG9yIiwiYWN0aXZlU3RhdGUiLCJkcm9wZG93bl8xIiwiY29udGFpbmVyXzEiLCJpbnB1dF8xIiwibGlzdF8xIiwid3JhcHBlZF9pbnB1dF8xIiwid3JhcHBlZF9zZWxlY3RfMSIsImlzRXF1YWxOb2RlIiwiX29uUGFzdGUiLCJfb25JbnB1dCIsInNldCIsInNhbml0aXNlIiwibWluV2lkdGgiLCJ3aWR0aCIsInNjcm9sbFBvcyIsInNjcm9sbFRvcCIsImhlaWdodCIsIm9mZnNldEhlaWdodCIsIm5vZGUiLCJoYXNDaGlsZE5vZGVzIiwibGlzdEhlaWdodCIsImxpc3RTY3JvbGxQb3NpdGlvbiIsImVsZW1lbnRIZWlnaHQiLCJlbGVtZW50UG9zIiwib2Zmc2V0VG9wIiwiZGVzdGluYXRpb24iLCJfYW5pbWF0ZVNjcm9sbCIsIl9zY3JvbGxEb3duIiwic3RyZW5ndGgiLCJlYXNpbmciLCJkaXN0YW5jZSIsIl9zY3JvbGxVcCIsIlNDUk9MTElOR19TUEVFRCIsImNob2ljZUxpc3RTY3JvbGxUb3AiLCJjb250aW51ZUFuaW1hdGlvbiIsIldyYXBwZWRFbGVtZW50IiwiaGlkZGVuIiwidGFiSW5kZXgiLCJvcmlnU3R5bGUiLCJnZXRBdHRyaWJ1dGUiLCJldmVudFR5cGUiLCJkaXNwYXRjaEV2ZW50IiwiZXh0ZW5kU3R
118hdGljcyIsIl9fZXh0ZW5kcyIsImQiLCJiIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJwIiwiaGFzT3duUHJvcGVydHkiLCJfXyIsImNvbnN0cnVjdG9yIiwiY3JlYXRlIiwiX3N1cGVyIiwib3B0aW9uRGF0YSIsImFwcGVuZERvY0ZyYWdtZW50IiwiREVGQVVMVF9DTEFTU05BTUVTIiwiaW5wdXRDbG9uZWQiLCJsaXN0IiwibGlzdEl0ZW1zIiwibGlzdFNpbmdsZSIsImxpc3REcm9wZG93biIsIml0ZW1TZWxlY3RhYmxlIiwiaXRlbURpc2FibGVkIiwiZ3JvdXBIZWFkaW5nIiwiYnV0dG9uIiwic2VsZWN0ZWRTdGF0ZSIsIm5vUmVzdWx0cyIsIm5vQ2hvaWNlcyIsInNvcnRCeUFscGhhIiwidmFsdWUxIiwidmFsdWUyIiwiaW5jbHVkZVNjb3JlIiwiX19jcmVhdGVCaW5kaW5nIiwibyIsIm0iLCJrIiwiazIiLCJfX2V4cG9ydFN0YXIiLCJ0bXBFbCIsImNsb25lT2JqZWN0IiwiZ2VuZXJhdGVDaGFycyIsImdldFJhbmRvbU51bWJlciIsIm1pbiIsIm1heCIsInByZWZpeCIsIm5hbWUiLCJyZXBsYWNlIiwib2JqIiwid3JhcHBlciIsImNyZWF0ZUVsZW1lbnQiLCJuZXh0U2libGluZyIsInN0YXJ0RWwiLCJwcm9wIiwic2libGluZyIsInBhcmVudCIsInN0ciIsImNsZWFuZWRJbnB1dCIsImZpcmxkQ2hpbGQiLCJjaGlsZHJlbiIsImxhYmVsMiIsImxvY2FsZUNvbXBhcmUiLCJzZW5zaXRpdml0eSIsImlnbm9yZVB1bmN0dWF0aW9uIiwibnVtZXJpYyIsImEiLCJzY29yZSIsInNjb3JlQSIsImN1c3RvbUFyZ3MiLCJDdXN0b21FdmVudCIsImRldGFpbCIsImJ1YmJsZXMiLCJjYW5jZWxhYmxlIiwiYXJyYXkiLCJrZXkiLCJKU09OIiwicGFyc2UiLCJzdHJpbmdpZnkiLCJhS2V5cyIsImJLZXlzIiwiYWN0aW9uIiwiYWRkQ2hvaWNlQWN0aW9uIiwiYWRkSXRlbUFjdGlvbl8xIiwicmVtb3ZlSXRlbUFjdGlvbl8xIiwiZmlsdGVyQ2hvaWNlc0FjdGlvbl8xIiwiYWN0aXZhdGVDaG9pY2VzQWN0aW9uXzEiLCJhZGRHcm91cEFjdGlvbiIsInJlZHV4XzEiLCJsb2FkaW5nXzEiLCJsb2FkaW5nIiwiYXBwUmVkdWNlciIsImNvbWJpbmVSZWR1Y2VycyIsInBhc3NlZFN0YXRlIiwiYWRkSXRlbUFjdGlvbiIsImhpZ2hsaWdodEl0ZW1BY3Rpb25fMSIsImluZGV4XzEiLCJTdG9yZSIsImNyZWF0ZVN0b3JlIiwiX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fXyIsIm9uQ2hhbmdlIiwiZ2V0U3RhdGUiLCJzZWxlY3RhYmxlQ2hvaWNlcyIsInJldmVyc2UiLCJoYXNBY3RpdmVPcHRpb25zIiwiaXNTZWxlY3RFbGVtZW50IiwiaXNTZWxlY3RPbmVFbGVtZW50IiwicGFzc2VkRWxlbWVudFR5cGUiLCJkaXYiLCJjbGFzc05hbWUiLCJpc1BsYWNlaG9sZGVyIiwiZGVsZXRhYmxlIiwiUkVNT1ZFX0lURU1fVEVYVCIsInJlbW92ZUJ1dHRvbiIsImNob2ljZUdyb3VwIiwic2VsZWN0VGV4dCIsImNob2ljZURpc2FibGVkIiwiY2hvaWNlU2VsZWN0YWJsZSIsImlucCIsImF1dG9jb21wbGV0ZSIsImF1dG9jYXBpdGFsaXplIiwic3BlbGxjaGVjayIsImlubmVyVGV4dCIsImNsYXNzZXMiLCJvcHQiLCJPcHRpb24iLCJtb2R1bGUiLCJpc01lcmdlYWJsZU9iamVjdCIsImlzTm9uTnVsbE9iamVjdCIsInN0cmluZ1ZhbHVlIiwiJCR0eXBlb2YiLCJSRUFDVF9FTEVNRU5UX1RZUEUiLCJpc1JlYWN0RWxlbWVudCIsImlzU3BlY2lhbCIsIlN5bWJvbCIsImZvciIsImNsb25lVW5sZXNzT3RoZXJ3aXNlU3BlY2lmaWVkIiwiY2xvbmUiLCJkZWVwbWVyZ2UiLCJkZWZhdWx0QXJyYXlNZXJnZSIsInNvdXJjZSIsImdldEtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJzeW1ib2wiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImdldEVudW1lcmFibGVPd25Qcm9wZXJ0eVN5bWJvbHMiLCJwcm9wZXJ0eUlzT25PYmplY3QiLCJwcm9wZXJ0eSIsInNvdXJjZUlzQXJyYXkiLCJwcm9wZXJ0eUlzVW5zYWZlIiwiY3VzdG9tTWVyZ2UiLCJnZXRNZXJnZUZ1bmN0aW9uIiwibWVyZ2VPYmplY3QiLCJFcnJvciIsInByZXYiLCJuZXh0IiwiX193ZWJwYWNrX2V4cG9ydHNfXyIsImdldFRhZyIsImlzU3RyaW5nIiwiaXNOdW1iZXIiLCJpc09iamVjdCIsImlzRGVmaW5lZCIsImlzQmxhbmsiLCJyIiwiRnVzZSIsImhhc093biIsIktleVN0b3JlIiwiX2tleXMiLCJfa2V5TWFwIiwidG90YWxXZWlnaHQiLCJjcmVhdGVLZXkiLCJ3ZWlnaHQiLCJrZXlJZCIsInRvSlNPTiIsInBhdGgiLCJzcmMiLCJjcmVhdGVLZXlQYXRoIiwiY3JlYXRlS2V5SWQiLCJJTlZBTElEX0tFWV9XRUlHSFRfVkFMVUUiLCJDb25maWciLCJpc0Nhc2VTZW5zaXRpdmUiLCJzb3J0Rm4iLCJpZHgiLCJmaW5kQWxsTWF0Y2hlcyIsIm1pbk1hdGNoQ2hhckxlbmd0aCIsImxvY2F0aW9uIiwidGhyZXNob2xkIiwidXNlRXh0ZW5kZWRTZWFyY2giLCJnZXRGbiIsImFyciIsImRlZXBHZXQiLCJpc09iamVjdExpa2UiLCJpc0Jvb2xlYW4iLCJyZXN1bHQiLCJiYXNlVG9TdHJpbmciLCJsZW4iLCJpZ25vcmVMb2NhdGlvbiIsImlnbm9yZUZpZWxkTm9ybSIsImZpZWxkTm9ybVdlaWdodCIsIlNQQUNFIiwiRnVzZUluZGV4Iiwibm9ybSIsIm1hbnRpc3NhIiwiY2FjaGUiLCJNYXAiLCJwb3ciLCJudW1Ub2tlbnMiLCJtYXRjaCIsImhhcyIsIm4iLCJwYXJzZUZsb2F0Iiwicm91bmQiLCJpc0NyZWF0ZWQiLCJzZXRJbmRleFJlY29yZHMiLCJzZXRTb3VyY2VzIiwiZG9jcyIsInJlY29yZHMiLCJzZXRLZXlzIiwiX2tleXNNYXAiLCJkb2MiLCJkb2NJbmRleCIsIl9hZGRTdHJpbmciLCJfYWRkT2JqZWN0Iiwic2l6ZSIsInJlbW92ZUF0Iiwic3BsaWNlIiwiZ2V0VmFsdWVGb3JJdGVtQXRLZXlJZCIsInJlY29yZCIsInYiLCIkIiwia2V5SW5kZXgiLCJzdWJSZWNvcmRzIiwic3RhY2siLCJuZXN0ZWRBcnJJbmRleCIsInBvcCIsInN1YlJlY29yZCIsImNyZWF0ZUluZGV4IiwibXlJbmRleCIsImNvbXB1dGVTY29yZSQxIiwicGF0dGVybiIsImVycm9ycyIsImN1cnJlbnRMb2NhdGlvbiIsImV4cGVjdGVkTG9jYXRpb24iLCJhY2N1cmFjeSIsInByb3hpbWl0eSIsImFicyIsIk1BWF9CSVRTIiwiY3JlYXRlUGF0dGVybkFscGhhYmV0IiwibWFzayIsIm
118NoYXIiLCJjaGFyQXQiLCJCaXRhcFNlYXJjaCIsImNodW5rcyIsImFkZENodW5rIiwic3RhcnRJbmRleCIsImFscGhhYmV0IiwicmVtYWluZGVyIiwiZW5kIiwic3Vic3RyIiwic2VhcmNoSW4iLCJpc01hdGNoIiwiaW5kaWNlcyIsImFsbEluZGljZXMiLCJ0b3RhbFNjb3JlIiwiaGFzTWF0Y2hlcyIsInBhdHRlcm5BbHBoYWJldCIsInBhdHRlcm5MZW4iLCJ0ZXh0TGVuIiwiY3VycmVudFRocmVzaG9sZCIsImJlc3RMb2NhdGlvbiIsImNvbXB1dGVNYXRjaGVzIiwibWF0Y2hNYXNrIiwibGFzdEJpdEFyciIsImZpbmFsU2NvcmUiLCJiaW5NYXgiLCJiaW5NaW4iLCJiaW5NaWQiLCJzdGFydCIsImZpbmlzaCIsImJpdEFyciIsImoiLCJjaGFyTWF0Y2giLCJtYXRjaG1hc2siLCJjb252ZXJ0TWFza1RvSW5kaWNlcyIsIkJhc2VNYXRjaCIsInN0YXRpYyIsImdldE1hdGNoIiwibXVsdGlSZWdleCIsInNpbmdsZVJlZ2V4IiwiZXhwIiwiRnV6enlNYXRjaCIsInN1cGVyIiwiX2JpdGFwU2VhcmNoIiwiSW5jbHVkZU1hdGNoIiwic2VhcmNoZXJzIiwic3RhcnRzV2l0aCIsImVuZHNXaXRoIiwic2VhcmNoZXJzTGVuIiwiU1BBQ0VfUkUiLCJNdWx0aU1hdGNoU2V0IiwiU2V0IiwicmVnaXN0ZXJlZFNlYXJjaGVycyIsImNyZWF0ZVNlYXJjaGVyIiwic2VhcmNoZXJDbGFzcyIsImNvbmRpdGlvbiIsIkxvZ2ljYWxPcGVyYXRvciIsImlzRXhwcmVzc2lvbiIsInF1ZXJ5IiwiY29udmVydFRvRXhwbGljaXQiLCJhdXRvIiwiaXNRdWVyeVBhdGgiLCJpc1BhdGgiLCJpc0xlYWYiLCJMT0dJQ0FMX1NFQVJDSF9JTlZBTElEX1FVRVJZX0ZPUl9LRVkiLCJzZWFyY2hlciIsIm9wZXJhdG9yIiwidHJhbnNmb3JtTWF0Y2hlcyIsInJlZkluZGV4IiwidHJhbnNmb3JtU2NvcmUiLCJfa2V5U3RvcmUiLCJzZXRDb2xsZWN0aW9uIiwiX2RvY3MiLCJfbXlJbmRleCIsInByZWRpY2F0ZSIsImdldEluZGV4IiwibGltaXQiLCJfc2VhcmNoU3RyaW5nTGlzdCIsIl9zZWFyY2hPYmplY3RMaXN0IiwiX3NlYXJjaExvZ2ljYWwiLCJOdW1iZXIiLCJFUFNJTE9OIiwiY29tcHV0ZVNjb3JlIiwidHJhbnNmb3JtZXJzIiwidHJhbnNmb3JtZXIiLCJmb3JtYXQiLCJleHByZXNzaW9uIiwiZXZhbHVhdGUiLCJfZmluZE1hdGNoZXMiLCJyZXMiLCJjaGlsZCIsInJlc3VsdE1hcCIsImV4cFJlc3VsdHMiLCJ2ZXJzaW9uIiwicGFyc2VJbmRleCIsInBhcnNlUXVlcnkiLCJyZWdpc3RlciIsInF1ZXJ5SXRlbSIsImZvdW5kIiwidG9rZW4iLCJpc011bHRpTWF0Y2giLCJpc1NpbmdsZU1hdGNoIiwibnVtTWF0Y2hlcyIsInFMZW4iLCJwTGVuIiwiX2RlZmluZVByb3BlcnR5Iiwid3JpdGFibGUiLCJvd25LZXlzIiwiZW51bWVyYWJsZU9ubHkiLCJzeW1ib2xzIiwic3ltIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiX29iamVjdFNwcmVhZDIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImZvcm1hdFByb2RFcnJvck1lc3NhZ2UiLCJjb2RlIiwiQWN0aW9uVHlwZXMiLCJhcHBseU1pZGRsZXdhcmUiLCJiaW5kQWN0aW9uQ3JlYXRvcnMiLCJjb21wb3NlIiwiJCRvYnNlcnZhYmxlIiwib2JzZXJ2YWJsZSIsInJhbmRvbVN0cmluZyIsInN1YnN0cmluZyIsIklOSVQiLCJSRVBMQUNFIiwiUFJPQkVfVU5LTk9XTl9BQ1RJT04iLCJpc1BsYWluT2JqZWN0IiwicHJvdG8iLCJnZXRQcm90b3R5cGVPZiIsInJlZHVjZXIiLCJwcmVsb2FkZWRTdGF0ZSIsImVuaGFuY2VyIiwiX3JlZjIiLCJjdXJyZW50UmVkdWNlciIsImN1cnJlbnRTdGF0ZSIsImN1cnJlbnRMaXN0ZW5lcnMiLCJuZXh0TGlzdGVuZXJzIiwiaXNEaXNwYXRjaGluZyIsImVuc3VyZUNhbk11dGF0ZU5leHRMaXN0ZW5lcnMiLCJsaXN0ZW5lciIsImlzU3Vic2NyaWJlZCIsImxpc3RlbmVycyIsInJlcGxhY2VSZWR1Y2VyIiwibmV4dFJlZHVjZXIiLCJfcmVmIiwib3V0ZXJTdWJzY3JpYmUiLCJvYnNlcnZlciIsIm9ic2VydmVTdGF0ZSIsInVuc3Vic2NyaWJlIiwicmVkdWNlcnMiLCJyZWR1Y2VyS2V5cyIsImZpbmFsUmVkdWNlcnMiLCJzaGFwZUFzc2VydGlvbkVycm9yIiwiZmluYWxSZWR1Y2VyS2V5cyIsImFzc2VydFJlZHVjZXJTaGFwZSIsImUiLCJoYXNDaGFuZ2VkIiwibmV4dFN0YXRlIiwiX2tleSIsInByZXZpb3VzU3RhdGVGb3JLZXkiLCJuZXh0U3RhdGVGb3JLZXkiLCJiaW5kQWN0aW9uQ3JlYXRvciIsImFjdGlvbkNyZWF0b3IiLCJhY3Rpb25DcmVhdG9ycyIsImJvdW5kQWN0aW9uQ3JlYXRvcnMiLCJfbGVuIiwiZnVuY3MiLCJhcmciLCJtaWRkbGV3YXJlcyIsInN0b3JlIiwiX2Rpc3BhdGNoIiwibWlkZGxld2FyZUFQSSIsImNoYWluIiwibWlkZGxld2FyZSIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwiZ2V0dGVyIiwiZGVmaW5pdGlvbiIsInRvU3RyaW5nVGFnIiwiX3NjcmlwdHNfY2hvaWNlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fIiwiX3NjcmlwdHNfY2hvaWNlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQiLCJtYXRjaGVzTWV0aG9kIiwiRWxlbVByb3RvIiwiRWxlbWVudCIsIm1hdGNoZXNTZWxlY3RvciIsInByZWZpeGVzIiwibWV0aG9kIiwiZWxlbSIsIkV2RW1pdHRlciIsIm9uIiwiZXZlbnROYW1lIiwiZXZlbnRzIiwiX2V2ZW50cyIsIm9uY2UiLCJvbmNlRXZlbnRzIiwiX29uY2VFdmVudHMiLCJvZmYiLCJlbWl0RXZlbnQiLCJvbmNlTGlzdGVuZXJzIiwiYWxsT2ZmIiwidXRpbHMiLCJudW0iLCJhcnJheVNsaWNlIiwibWFrZUFycmF5IiwicmVtb3ZlRnJvbSIsImFyeSIsImdldFBhcmVudCIsImJvZHkiLCJnZXRRdWVyeUVsZW1lbnQiLCJoYW5kbGVFdmVudCIsImZpbHRlckZpbmRFbGVtZW50cyIsImVsZW1zIiwiZmZFbGVtcyIsImNoaWxkRWxlbXMiLCJkZWJvdW5jZU1ldGhvZCIsIl9jbGFzcyIsIm1ldGhvZE5hbWUiLCJ0aW1lb3V0TmFtZSIsImRvY1JlYWR5IiwiY2FsbGJhY2siLCJyZWFkeVN0YXRlIiwidG9EYXNoZWQiLCIkMSIsIiQyIiwiaHRtbEluaXQiLCJXaWRnZXRDbGFzcyIsIm5hbWVzcGFjZSIsImRhc2hlZE5hbWVzcGFjZSIsImRhdGFBdHRyIiwiZGF0YUF0dHJFbGVtcyIsImpzRGFzaEVsZW1zIiwiZGF0YU9wdGlvbnNBdHRyIiwialF1ZXJ5IiwiYXR0ciIsImluc3RhbmNlIiwiZ2V0U3R5bGVTaXplIiwiaXNOYU4iLCJsb2dFcnJvciIsIm1lc3NhZ2UiLCJtZWFzdXJlbWVudHMiLCJtZWFzdXJlbWVudHNMZW5ndGgiLCJnZXRTdHlsZSIsImlzQm94U2l6ZU91dGVyIiwiaXNTZXR1cCIsImdldFNpemUiLCJwYWRkaW5nIiwiYm9yZGVyU3R5bGUiLCJib3JkZXJXaWR0aCIsImJveFNpemluZyIsInNldHVwIiwibm9kZVR5cGUiLCJkaXNwbGF5IiwiaW5uZXJIZWlnaHQiLCJvdXRlcldpZHRoIiwib3V0ZXJIZWlnaHQiLCJnZXRaZXJvU2l6ZSIsImlzQm9yZGVyQm94IiwibWVhc3VyZW1lbnQiLCJwYWRkaW5nV2lkdGgiLCJwYWRkaW5nTGVmdCIsInBhZGRpbmdSaWdodCIsInBhZGRpbmdIZWlnaHQiLCJwYWRkaW5nVG9wIiwicGFkZGluZ0JvdHRvbSIsIm1hcmdpbldpZHRoIiwibWFyZ2luSGVpZ2h0IiwibWFyZ2luVG9wIiwibWFyZ2luQm90dG9tIiwiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyUmlnaHRXaWR0aCIsImJvcmRlckhlaWdodCIsImJvcmRlclRvcFdpZHRoIiwiYm9yZGVyQm90dG9tV2lkdGgiLCJpc0JvcmRlckJveFNpemVPdXRlciIsInN0eWxlV2lkdGgiLCJzdHlsZUhlaWdodCIsImV4dGVuZCIsIkltYWdlc0xvYWRlZCIsIm9uQWx3YXlzIiwicXVlcnlFbGVtIiwiZWxlbWVudHMiLCJ
118nZXRJbWFnZXMiLCJqcURlZmVycmVkIiwiRGVmZXJyZWQiLCJjaGVjayIsImltYWdlcyIsImFkZEVsZW1lbnRJbWFnZXMiLCJub2RlTmFtZSIsImFkZEltYWdlIiwiYmFja2dyb3VuZCIsImFkZEVsZW1lbnRCYWNrZ3JvdW5kSW1hZ2VzIiwiZWxlbWVudE5vZGVUeXBlcyIsImNoaWxkSW1ncyIsImltZyIsIkxvYWRpbmdJbWFnZSIsIkJhY2tncm91bmQiLCJ1cmwiLCJJbWFnZSIsInJlVVJMIiwiZXhlYyIsImJhY2tncm91bmRJbWFnZSIsImFkZEJhY2tncm91bmQiLCJsb2FkaW5nSW1hZ2UiLCJvblByb2dyZXNzIiwiaW1hZ2UiLCJwcm9ncmVzcyIsInByb2dyZXNzZWRDb3VudCIsImhhc0FueUJyb2tlbiIsImNvbXBsZXRlIiwiaXNMb2FkZWQiLCJub3RpZnkiLCJkZWJ1ZyIsImlzQ29tcGxldGUiLCJqcU1ldGhvZCIsImdldElzSW1hZ2VDb21wbGV0ZSIsImNvbmZpcm0iLCJuYXR1cmFsV2lkdGgiLCJwcm94eUltYWdlIiwib25sb2FkIiwidW5iaW5kRXZlbnRzIiwib25lcnJvciIsIm1ha2VKUXVlcnlQbHVnaW4iLCJmbiIsImltYWdlc0xvYWRlZCIsInByb21pc2UiLCJPdXRsYXllciIsIkl0ZW0iLCJMYXlvdXRNb2RlIiwiSXNvdG9wZSIsImxheW91dE1vZGUiLCJpc0pRdWVyeUZpbHRlcmluZyIsInNvcnRBc2NlbmRpbmciLCJfY3JlYXRlIiwiaXRlbUdVSUQiLCJfc29ydGVycyIsIl9nZXRTb3J0ZXJzIiwibW9kZXMiLCJmaWx0ZXJlZEl0ZW1zIiwic29ydEhpc3RvcnkiLCJfaW5pdExheW91dE1vZGUiLCJyZWxvYWRJdGVtcyIsIl9pdGVtaXplIiwiX3VwZGF0ZUl0ZW1zU29ydERhdGEiLCJNb2RlIiwiaW5pdGlhbE9wdHMiLCJsYXlvdXQiLCJfaXNMYXlvdXRJbml0ZWQiLCJfZ2V0T3B0aW9uIiwiX2xheW91dCIsImFycmFuZ2UiLCJpc0luc3RhbnQiLCJfZ2V0SXNJbnN0YW50IiwiX3Jlc2V0TGF5b3V0IiwiX21hbmFnZVN0YW1wcyIsImxheW91dEl0ZW1zIiwib3B0cyIsImZpbHRlcmVkIiwiX2ZpbHRlciIsIl9iaW5kQXJyYW5nZUNvbXBsZXRlIiwiX2lzSW5zdGFudCIsIl9ub1RyYW5zaXRpb24iLCJfaGlkZVJldmVhbCIsIl9zb3J0IiwiX2luaXQiLCJuZWVkUmV2ZWFsIiwibmVlZEhpZGUiLCJpc0xheW91dEluc3RhbnQiLCJpc0xheW91dENvbXBsZXRlIiwiaXNIaWRlQ29tcGxldGUiLCJpc1JldmVhbENvbXBsZXRlIiwiYXJyYW5nZVBhcmFsbGVsQ2FsbGJhY2siLCJoaWRkZW5NYXRjaGVkIiwidmlzaWJsZVVubWF0Y2hlZCIsIl9nZXRGaWx0ZXJUZXN0IiwiaXNJZ25vcmVkIiwiaXNNYXRjaGVkIiwiaXNIaWRkZW4iLCJpcyIsInVwZGF0ZVNvcnREYXRhIiwiZ2V0SXRlbXMiLCJnZXRTb3J0RGF0YSIsIm11bmdlU29ydGVyIiwiYXR0ck1hdGNoIiwidGV4dENvbnRlbnQiLCJnZXRWYWx1ZUdldHRlciIsInBhcnNlciIsInNvcnREYXRhUGFyc2VycyIsInNvcnRCeSIsInNvcnRCeXMiLCJfZ2V0SXNTYW1lU29ydEJ5IiwiaXRlbVNvcnRlciIsInNvcnRBc2MiLCJpdGVtQSIsIml0ZW1CIiwic29ydERhdGEiLCJnZXRJdGVtU29ydGVyIiwiX21vZGUiLCJtb2RlIiwiX2dldEl0ZW1MYXlvdXRQb3NpdGlvbiIsIl9tYW5hZ2VTdGFtcCIsInN0YW1wIiwiX2dldENvbnRhaW5lclNpemUiLCJuZWVkc1Jlc2l6ZUxheW91dCIsImFwcGVuZGVkIiwiX2ZpbHRlclJldmVhbEFkZGVkIiwicHJlcGVuZGVkIiwiaW5zZXJ0IiwiZmlsdGVyZWRJbnNlcnRJdGVtcyIsIl9yZW1vdmUiLCJzaHVmZmxlIiwidHJhbnNpdGlvbkR1cmF0aW9uIiwicmV0dXJuVmFsdWUiLCJnZXRGaWx0ZXJlZEl0ZW1FbGVtZW50cyIsInNvcnRlcnMiLCJfZGVzdHJveSIsImNzcyIsImlzb3RvcGUiLCJuZWVkc1ZlcnRpY2FsUmVzaXplTGF5b3V0IiwiX2dldE1lYXN1cmVtZW50IiwiZ2V0Q29sdW1uV2lkdGgiLCJnZXRTZWdtZW50U2l6ZSIsImdldFJvd0hlaWdodCIsInNlZ21lbnQiLCJzZWdtZW50TmFtZSIsIm91dGVyU2l6ZSIsImZpcnN0SXRlbVNpemUiLCJnZXRGaXJzdEl0ZW1TaXplIiwiZmlyc3RJdGVtIiwiRml0Um93cyIsIngiLCJ5IiwibWF4WSIsIml0ZW1XaWR0aCIsImd1dHRlciIsImNvbnRhaW5lcldpZHRoIiwiTWFzb25yeSIsIk1hc29ucnlNb2RlIiwia2VlcE1vZGVNZXRob2RzIiwiX2dldEVsZW1lbnRPZmZzZXQiLCJtZWFzdXJlQ29sdW1ucyIsImlzRml0V2lkdGgiLCJmaXRXaWR0aCIsIlZlcnRpY2FsIiwiaG9yaXpvbnRhbEFsaWdubWVudCIsImNvbXBhdE9wdGlvbnMiLCJjb2xZcyIsImNvbHMiLCJob3Jpem9udGFsQ29sSW5kZXgiLCJnZXRDb250YWluZXJXaWR0aCIsImNvbHVtbldpZHRoIiwiZmlyc3RJdGVtRWxlbSIsImV4Y2VzcyIsImNvbnRhaW5lciIsImNvbFNwYW4iLCJjb2xQb3NpdGlvbiIsImhvcml6b250YWxPcmRlciIsImNvbCIsInNldEhlaWdodCIsInNldE1heCIsIl9nZXRUb3BDb2xQb3NpdGlvbiIsImNvbEdyb3VwIiwiX2dldFRvcENvbEdyb3VwIiwibWluaW11bVkiLCJncm91cENvdW50IiwiX2dldENvbEdyb3VwWSIsImdyb3VwQ29sWXMiLCJfZ2V0SG9yaXpvbn
118RhbENvbFBvc2l0aW9uIiwiaGFzU2l6ZSIsInN0YW1wU2l6ZSIsIm9mZnNldCIsImZpcnN0WCIsImxlZnQiLCJyaWdodCIsImxhc3RYIiwiZmlyc3RDb2wiLCJsYXN0Q29sIiwic3RhbXBNYXhZIiwidG9wIiwiX2dldENvbnRhaW5lckZpdFdpZHRoIiwidW51c2VkQ29scyIsInByZXZpb3VzV2lkdGgiLCJPRkkiLCJwcm9wUmVnZXgiLCJ0ZXN0SW1nIiwic3VwcG9ydHNPYmplY3RGaXQiLCJzdXBwb3J0c09iamVjdFBvc2l0aW9uIiwic3VwcG9ydHNPRkkiLCJzdXBwb3J0c0N1cnJlbnRTcmMiLCJjdXJyZW50U3JjIiwibmF0aXZlR2V0QXR0cmlidXRlIiwibmF0aXZlU2V0QXR0cmlidXRlIiwiYXV0b01vZGVFbmFibGVkIiwic2V0UGxhY2Vob2xkZXIiLCJvbkltYWdlUmVhZHkiLCJmaXhPbmUiLCJwYXJzZWQiLCJmb250RmFtaWx5IiwicHJvcHMiLCJvZmkiLCJza2lwVGVzdCIsInNyY3NldCIsIm5hdHVyYWxIZWlnaHQiLCJkZXNjcmlwdG9ycyIsInNzIiwia2VlcFNyY1VzYWJsZSIsInBpY3R1cmVmaWxsIiwicGYiLCJucyIsImV2YWxlZCIsImZpbGxJbWciLCJyZXNlbGVjdCIsImN1clNyYyIsInN1cHBvcnRlZCIsInBvbHlmaWxsQ3VycmVudFNyYyIsImJhY2tncm91bmRQb3NpdGlvbiIsImJhY2tncm91bmRSZXBlYXQiLCJiYWNrZ3JvdW5kT3JpZ2luIiwiYmFja2dyb3VuZFNpemUiLCJmaXgiLCJpbWdzIiwic3RhcnRBdXRvTW9kZSIsIndhdGNoTVEiLCJnZXRPZmlJbWFnZU1heWJlIiwiSFRNTEltYWdlRWxlbWVudCIsImhpamFja0F0dHJpYnV0ZXMiLCJkb2NFbGVtU3R5bGUiLCJ0cmFuc2l0aW9uUHJvcGVydHkiLCJ0cmFuc2l0aW9uIiwidHJhbnNmb3JtUHJvcGVydHkiLCJ0cmFuc2Zvcm0iLCJ0cmFuc2l0aW9uRW5kRXZlbnQiLCJXZWJraXRUcmFuc2l0aW9uIiwidmVuZG9yUHJvcGVydGllcyIsInRyYW5zaXRpb25EZWxheSIsIl90cmFuc24iLCJpbmdQcm9wZXJ0aWVzIiwiY2xlYW4iLCJvbkVuZCIsImVsZW1TdHlsZSIsImdldFBvc2l0aW9uIiwiaXNPcmlnaW5MZWZ0IiwiaXNPcmlnaW5Ub3AiLCJ4VmFsdWUiLCJ5VmFsdWUiLCJsYXlvdXRTaXplIiwibGF5b3V0UG9zaXRpb24iLCJ4UGFkZGluZyIsInhQcm9wZXJ0eSIsInhSZXNldFByb3BlcnR5IiwiZ2V0WFZhbHVlIiwieVBhZGRpbmciLCJ5UHJvcGVydHkiLCJ5UmVzZXRQcm9wZXJ0eSIsImdldFlWYWx1ZSIsImlzSG9yaXpvbnRhbCIsInBlcmNlbnRQb3NpdGlvbiIsIl90cmFuc2l0aW9uVG8iLCJjdXJYIiwiY3VyWSIsImRpZE5vdE1vdmUiLCJzZXRQb3NpdGlvbiIsImlzVHJhbnNpdGlvbmluZyIsInRyYW5zWCIsInRyYW5zWSIsInRyYW5zaXRpb25TdHlsZSIsImdldFRyYW5zbGF0ZSIsIm9uVHJhbnNpdGlvbkVuZCIsImlzQ2xlYW5pbmciLCJnb1RvIiwibW92ZVRvIiwiX25vblRyYW5zaXRpb24iLCJfcmVtb3ZlU3R5bGVzIiwiX3RyYW5zaXRpb24iLCJlbmFibGVUcmFuc2l0aW9uIiwidHJhbnNpdGlvblByb3BzIiwiZHVyYXRpb24iLCJzdGFnZ2VyRGVsYXkiLCJvbndlYmtpdFRyYW5zaXRpb25FbmQiLCJvbnRyYW5zaXRpb25lbmQiLCJvbm90cmFuc2l0aW9uZW5kIiwiZGFzaGVkVmVuZG9yUHJvcGVydGllcyIsInByb3BlcnR5TmFtZSIsImlzRW1wdHlPYmoiLCJkaXNhYmxlVHJhbnNpdGlvbiIsInJlbW92ZVRyYW5zaXRpb25TdHlsZXMiLCJjbGVhblN0eWxlIiwiY2xlYW5UcmFuc2l0aW9uU3R5bGUiLCJzdGFnZ2VyIiwiZGVsYXkiLCJyZW1vdmVFbGVtIiwiZ2V0SGlkZVJldmVhbFRyYW5zaXRpb25FbmRQcm9wZXJ0eSIsIm9uUmV2ZWFsVHJhbnNpdGlvbkVuZCIsImhpZGRlblN0eWxlIiwidmlzaWJsZVN0eWxlIiwic3R5bGVQcm9wZXJ0eSIsIm9wdGlvblN0eWxlIiwib3BhY2l0eSIsIm9uSGlkZVRyYW5zaXRpb25FbmQiLCJub29wIiwiR1VJRCIsImluc3RhbmNlcyIsInF1ZXJ5RWxlbWVudCIsIiRlbGVtZW50Iiwib3V0bGF5ZXJHVUlEIiwiY29udGFpbmVyU3R5bGUiLCJpbml0TGF5b3V0Iiwib3JpZ2luTGVmdCIsIm9yaWdpblRvcCIsInJlc2l6ZSIsInJlc2l6ZUNvbnRhaW5lciIsInN1YmNsYXNzIiwiUGFyZW50IiwiU3ViQ2xhc3MiLCJvbGRPcHRpb24iLCJob3Jpem9udGFsIiwibGF5b3V0SW5zdGFudCIsInN0YW1wcyIsImJpbmRSZXNpemUiLCJpdGVtRWxlbXMiLCJfZmlsdGVyRmluZEl0ZW1FbGVtZW50cyIsIml0ZW1TZWxlY3RvciIsImdldEl0ZW1FbGVtZW50cyIsIl9nZXRJdGVtc0ZvckxheW91dCIsIl9sYXlvdXRJdGVtcyIsIl9wb3N0TGF5b3V0IiwiX2VtaXRDb21wbGV0ZU9uSXRlbXMiLCJxdWV1ZSIsIl9wcm9jZXNzTGF5b3V0UXVldWUiLCJ1cGRhdGVTdGFnZ2VyIiwiX3Bvc2l0aW9uSXRlbSIsInRpbWUiLCJ1bml0IiwibXNVbml0cyIsImdldE1pbGxpc2Vjb25kcyIsIl9zZXRDb250YWluZXJNZWFzdXJlIiwibWVhc3VyZSIsImlzV2lkdGgiLCJlbGVtU2l6ZSIsIm9uQ29tcGxldGUiLCJjb3VudCIsImRvbmVDb3VudCIsInRpY2siLCJlbWl0QXJncyIsIiRldmVudCIsIkV2ZW50IiwidHJpZ2dlciIsImlnbm9yZSIsImdldEl0ZW0iLCJ1bmlnbm9yZSIsIl9maW5kIiwidW5zdGFtcCIsIl9nZXRCb3VuZGluZ1JlY3QiLCJib3VuZGluZ1JlY3QiLCJfYm91bmRpbmdSZWN0IiwidGhpc1JlY3QiLCJpc1Jlc2l6ZUJvdW5kIiwidW5iaW5kUmVzaXplIiwib25yZXNpemUiLCJwcmV2aW91c0l0ZW1zIiwicmV2ZWFsSXRlbUVsZW1lbnRzIiwiaGlkZUl0ZW1FbGVtZW50cyIsInJlbW92ZURhdGEiLCJMYXlvdXQiLCJicmlkZ2V0IiwibXMiLCJzIiwiZ2xvYmFsVGhpcyIsInNlbGYiLCJwb2x5ZmlsbCIsInQiLCJocmVmIiwicGF0aG5hbWUiLCJob3N0bmFtZSIsInBhcmVudEVsZW1lbnQiLCJjIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJ1IiwicHJldmVudFNjcm9sbCIsIm91dGxpbmVTdHlsZSIsImYiLCJoIiwic2Nyb2xsIiwiYmVoYXZpb3IiLCJzY3JvbGxJbnRvVmlldyIsImJsb2NrIiwic2Nyb2xsQmVoYXZpb3IiLCJnZXRQcm9wZXJ0eVZhbHVlIiwiX19mb3JjZVNtb290aHNjcm9sbEFuY2hvclBvbHlmaWxsX18iLCJmb3JjZSIsIlMiLCJkZWZhdWx0UHJldmVudGVkIiwiaGFzaCIsImhpc3RvcnkiLCJwdXNoU3RhdGUiLCJ0aXRsZSIsImciLCJFIiwidyIsIl9fZm9yY2VTbW9vdGhTY3JvbGxQb2x5ZmlsbF9fIiwidXNlckFnZW50Iiwib3JpZ2luYWwiLCJzY3JvbGxUbyIsInNjcm9sbEJ5IiwiZWxlbWVudFNjcm9sbCIsInNjcm9sbEVsZW1lbnQiLCJub3ciLCJwZXJmb3JtYW5jZSIsIlJPVU5ESU5HX1RPTEVSQU5DRSIsIm5hdmlnYXRvciIsInNob3VsZEJhaWxPdXQiLCJzbW9vdGhTY3JvbGwiLCJzY3JvbGxYIiwicGFnZVhPZmZzZXQiLCJzY3JvbGxMZWZ0IiwiU3ludGF4RXJyb3IiLCJzY3JvbGxhYmxlUGFyZW50Iiwi
118ZmluZFNjcm9sbGFibGVQYXJlbnQiLCJwYXJlbnRSZWN0cyIsImNsaWVudFJlY3RzIiwiZmlyc3RBcmciLCJoYXNTY3JvbGxhYmxlU3BhY2UiLCJheGlzIiwiY2xpZW50SGVpZ2h0Iiwic2Nyb2xsSGVpZ2h0IiwiY2xpZW50V2lkdGgiLCJzY3JvbGxXaWR0aCIsImNhbk92ZXJmbG93Iiwib3ZlcmZsb3dWYWx1ZSIsImlzU2Nyb2xsYWJsZSIsImlzU2Nyb2xsYWJsZVkiLCJpc1Njcm9sbGFibGVYIiwiaG9zdCIsInN0ZXAiLCJjb250ZXh0IiwiY3VycmVudFgiLCJjdXJyZW50WSIsImVsYXBzZWQiLCJzdGFydFRpbWUiLCJjb3MiLCJQSSIsInN0YXJ0WCIsInN0YXJ0WSIsInNjcm9sbGFibGUiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwiRnVuY3Rpb24iLCJlbXB0eU9iamVjdCIsImZyZWV6ZSIsImlzVW5kZWYiLCJpc0RlZiIsImlzVHJ1ZSIsImlzUHJpbWl0aXZlIiwiX3RvU3RyaW5nIiwiaXNWYWxpZEFycmF5SW5kZXgiLCJpc0Zpbml0ZSIsImlzUHJvbWlzZSIsInRvTnVtYmVyIiwibWFrZU1hcCIsImV4cGVjdHNMb3dlckNhc2UiLCJpc0J1aWx0SW5UYWciLCJpc1Jlc2VydmVkQXR0cmlidXRlIiwiY2FjaGVkIiwiY2FtZWxpemVSRSIsImNhbWVsaXplIiwidG9VcHBlckNhc2UiLCJjYXBpdGFsaXplIiwiaHlwaGVuYXRlUkUiLCJoeXBoZW5hdGUiLCJjdHgiLCJib3VuZEZuIiwiX2xlbmd0aCIsInRvQXJyYXkiLCJyZXQiLCJfZnJvbSIsInRvT2JqZWN0Iiwibm8iLCJpZGVudGl0eSIsImxvb3NlRXF1YWwiLCJpc09iamVjdEEiLCJpc09iamVjdEIiLCJpc0FycmF5QSIsImlzQXJyYXlCIiwiZXZlcnkiLCJnZXRUaW1lIiwia2V5c0EiLCJrZXlzQiIsImxvb3NlSW5kZXhPZiIsImNhbGxlZCIsIlNTUl9BVFRSIiwiQVNTRVRfVFlQRVMiLCJMSUZFQ1lDTEVfSE9PS1MiLCJvcHRpb25NZXJnZVN0cmF0ZWdpZXMiLCJwcm9kdWN0aW9uVGlwIiwiZGV2dG9vbHMiLCJlcnJvckhhbmRsZXIiLCJ3YXJuSGFuZGxlciIsImlnbm9yZWRFbGVtZW50cyIsImtleUNvZGVzIiwiaXNSZXNlcnZlZFRhZyIsImlzUmVzZXJ2ZWRBdHRyIiwiaXNVbmtub3duRWxlbWVudCIsImdldFRhZ05hbWVzcGFjZSIsInBhcnNlUGxhdGZvcm1UYWdOYW1lIiwibXVzdFVzZVByb3AiLCJhc3luYyIsIl9saWZlY3ljbGVIb29rcyIsInVuaWNvZGVSZWdFeHAiLCJpc1Jlc2VydmVkIiwiY2hhckNvZGVBdCIsImRlZiIsIl9pc1NlcnZlciIsImJhaWxSRSIsImhhc1Byb3RvIiwiaW5Ccm93c2VyIiwiaW5XZWV4IiwiV1hFbnZpcm9ubWVudCIsInBsYXRmb3JtIiwid2VleFBsYXRmb3JtIiwiVUEiLCJpc0lFIiwiaXNJRTkiLCJpc0VkZ2UiLCJpc0lPUyIsImlzRkYiLCJuYXRpdmVXYXRjaCIsIndhdGNoIiwic3VwcG9ydHNQYXNzaXZlIiwiaXNTZXJ2ZXJSZW5kZXJpbmciLCJlbnYiLCJWVUVfRU5WIiwiX19WVUVfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyIsImlzTmF0aXZlIiwiQ3RvciIsIl9TZXQiLCJoYXNTeW1ib2wiLCJSZWZsZWN0IiwidWlkIiwiRGVwIiwic3VicyIsImFkZFN1YiIsInN1YiIsInJlbW92ZVN1YiIsImRlcGVuZCIsImFkZERlcCIsInVwZGF0ZSIsInRhcmdldFN0YWNrIiwicHVzaFRhcmdldCIsInBvcFRhcmdldCIsIlZOb2RlIiwidGFnIiwiZWxtIiwiY29tcG9uZW50T3B0aW9ucyIsImFzeW5jRmFjdG9yeSIsImZuQ29udGV4dCIsImZuT3B0aW9ucyIsImZuU2NvcGVJZCIsImNvbXBvbmVudEluc3RhbmNlIiwicmF3IiwiaXNTdGF0aWMiLCJpc1Jvb3RJbnNlcnQiLCJpc0NvbW1lbnQiLCJpc0Nsb25lZCIsImlzT25jZSIsImFzeW5jTWV0YSIsImlzQXN5bmNQbGFjZWhvbGRlciIsInByb3RvdHlwZUFjY2Vzc29ycyIsImNyZWF0ZUVtcHR5Vk5vZGUiLCJjcmVhdGVUZXh0Vk5vZGUiLCJjbG9uZVZOb2RlIiwidm5vZGUiLCJjbG9uZWQiLCJhcnJheVByb3RvIiwiYXJyYXlNZXRob2RzIiwiaW5zZXJ0ZWQiLCJvYiIsIl9fb2JfXyIsIm9ic2VydmVBcnJheSIsImRlcCIsImFycmF5S2V5cyIsImdldE93blByb3BlcnR5TmFtZXMiLCJzaG91bGRPYnNlcnZlIiwidG9nZ2xlT2JzZXJ2aW5nIiwiT2JzZXJ2ZXIiLCJ2bUNvdW50IiwicHJvdG9BdWdtZW50IiwiY29weUF1Z21lbnQiLCJ3YWxrIiwib2JzZXJ2ZSIsImFzUm9vdERhdGEiLCJpc0V4dGVuc2libGUiLCJfaXNWdWUiLCJkZWZpbmVSZWFjdGl2ZSQkMSIsImN1c3RvbVNldHRlciIsInNoYWxsb3ciLCJzZXR0ZXIiLCJjaGlsZE9iIiwiZGVwZW5kQXJyYXkiLCJuZXdWYWwiLCJkZWwiLCJzdHJhdHMiLCJtZXJnZURhdGEiLCJ0b1ZhbCIsImZyb21WYWwiLCJtZXJnZURhdGFPckZuIiwicGFyZW50VmFsIiwiY2hpbGRWYWwiLCJ2bSIsImluc3RhbmNlRGF0YSIsImRlZmF1bHREYXRhIiwibWVyZ2VIb29rIiwiaG9va3MiLCJkZWR1cGVIb29rcyIsIm1lcmdlQXNzZXRzIiwiaG9vayIsImtleSQxIiwibWV0aG9kcyIsImluamVjdCIsImNvbXB1dGVkIiwicHJvdmlkZSIsImRlZmF1bHRTdHJhdCIsIm1lcmdlT3B0aW9ucyIsIm5vcm1hbGl6ZVByb3BzIiwibm9ybWFsaXplZCIsIm5vcm1hbGl6ZUluamVjdCIsImRpcnMiLCJkaXJlY3RpdmVzIiwiZGVmJCQxIiwibm9ybWFsaXplRGlyZWN0aXZlcyIsIl9iYXNlIiwiZXh0ZW5kcyIsIm1peGlucyIsIm1lcmdlRmllbGQiLCJzdHJhdCIsInJlc29sdmVBc3NldCIsIndhcm5NaXNzaW5nIiwiYXNzZXRzIiwiY2FtZWxpemVkSWQiLCJQYXNjYWxDYXNlSWQiLCJ2YWxpZGF0ZVByb3AiLCJwcm9wT3B0aW9ucyIsInByb3BzRGF0YSIsImFic2VudCIsImJvb2xlYW5JbmRleCIsImdldFR5cGVJbmRleCIsIkJvb2xlYW4iLCJzdHJpbmdJbmRleCIsIiRvcHRpb25zIiwiX3Byb3BzIiwiZ2V0UHJvcERlZmF1bHRWYWx1ZSIsInByZXZTaG91bGRPYnNlcnZlIiwiZnVuY3Rpb25UeXBlQ2hlY2tSRSIsImlzU2FtZVR5cGUiLCJleHBlY3RlZFR5cGVzIiwiaGFuZGxlRXJyb3IiLCJpbmZvIiwiY3VyIiwiJHBhcmVudCIsImVycm9yQ2FwdHVyZWQiLCJnbG9iYWxIYW5kbGVFcnJvciIsImludm9rZVdpdGhFcnJvckhhbmRsaW5nIiwiaGFuZGxlciIsIl9oYW5kbGVkIiwidGltZXJGdW5jIiwiaXNVc2luZ01pY3JvVGFzayIsImNhbGxiYWNrcyIsInBlbmRpbmciLCJmbHVzaENhbGxiYWNrcyIsImNvcGllcyIsIk11dGF0aW9uT2JzZXJ2ZXIiLCJzZXRJbW1lZGlhdGUiLCJjb3VudGVyIiwidGV4dE5vZGUiLCJjcmVhdGVUZXh0Tm9kZSIsImNoYXJhY3RlckRhdGEiLCJuZXh0VGljayIsImNiIiwiX3Jlc29sdmUiLCJzZWVuT2JqZWN0cyIsInRyYXZlcnNlIiwiX3RyYXZlcnNlIiwic2VlbiIsImlzQSIsImlzRnJvemVuIiwiZGVwSWQiLCJub3JtYWxpem
118VFdmVudCIsIm9uY2UkJDEiLCJjYXB0dXJlIiwiY3JlYXRlRm5JbnZva2VyIiwiZm5zIiwiaW52b2tlciIsImFyZ3VtZW50cyQxIiwidXBkYXRlTGlzdGVuZXJzIiwib2xkT24iLCJyZW1vdmUkJDEiLCJjcmVhdGVPbmNlSGFuZGxlciIsIm9sZCIsInBhcmFtcyIsIm1lcmdlVk5vZGVIb29rIiwiaG9va0tleSIsIm9sZEhvb2siLCJ3cmFwcGVkSG9vayIsIm1lcmdlZCIsImNoZWNrUHJvcCIsImFsdEtleSIsInByZXNlcnZlIiwibm9ybWFsaXplQ2hpbGRyZW4iLCJub3JtYWxpemVBcnJheUNoaWxkcmVuIiwiaXNUZXh0Tm9kZSIsIm5lc3RlZEluZGV4IiwibGFzdEluZGV4IiwibGFzdCIsInNoaWZ0IiwiX2lzVkxpc3QiLCJyZXNvbHZlSW5qZWN0IiwicHJvdmlkZUtleSIsIl9wcm92aWRlZCIsInByb3ZpZGVEZWZhdWx0IiwicmVzb2x2ZVNsb3RzIiwic2xvdHMiLCJhdHRycyIsInNsb3QiLCJuYW1lJDEiLCJpc1doaXRlc3BhY2UiLCJub3JtYWxpemVTY29wZWRTbG90cyIsIm5vcm1hbFNsb3RzIiwicHJldlNsb3RzIiwiaGFzTm9ybWFsU2xvdHMiLCJpc1N0YWJsZSIsIiRzdGFibGUiLCIka2V5IiwiX25vcm1hbGl6ZWQiLCIkaGFzTm9ybWFsIiwibm9ybWFsaXplU2NvcGVkU2xvdCIsImtleSQyIiwicHJveHlOb3JtYWxTbG90IiwicHJveHkiLCJyZW5kZXJMaXN0IiwicmVuZGVyIiwiaXRlcmF0b3IiLCJkb25lIiwicmVuZGVyU2xvdCIsImZhbGxiYWNrUmVuZGVyIiwiYmluZE9iamVjdCIsIm5vZGVzIiwic2NvcGVkU2xvdEZuIiwiJHNjb3BlZFNsb3RzIiwiJHNsb3RzIiwiJGNyZWF0ZUVsZW1lbnQiLCJyZXNvbHZlRmlsdGVyIiwiaXNLZXlOb3RNYXRjaCIsImV4cGVjdCIsImFjdHVhbCIsImNoZWNrS2V5Q29kZXMiLCJldmVudEtleUNvZGUiLCJidWlsdEluS2V5Q29kZSIsImV2ZW50S2V5TmFtZSIsImJ1aWx0SW5LZXlOYW1lIiwibWFwcGVkS2V5Q29kZSIsImJpbmRPYmplY3RQcm9wcyIsImFzUHJvcCIsImlzU3luYy
118IsImxvb3AiLCJkb21Qcm9wcyIsImNhbWVsaXplZEtleSIsImh5cGhlbmF0ZWRLZXkiLCJyZW5kZXJTdGF0aWMiLCJpc0luRm9yIiwiX3N0YXRpY1RyZWVzIiwidHJlZSIsIm1hcmtTdGF0aWMiLCJzdGF0aWNSZW5kZXJGbnMiLCJfcmVuZGVyUHJveHkiLCJtYXJrT25jZSIsIm1hcmtTdGF0aWNOb2RlIiwiYmluZE9iamVjdExpc3RlbmVycyIsImV4aXN0aW5nIiwib3VycyIsInJlc29sdmVTY29wZWRTbG90cyIsImhhc0R5bmFtaWNLZXlzIiwiY29udGVudEhhc2hLZXkiLCJiaW5kRHluYW1pY0tleXMiLCJiYXNlT2JqIiwicHJlcGVuZE1vZGlmaWVyIiwiaW5zdGFsbFJlbmRlckhlbHBlcnMiLCJfbyIsIl9uIiwiX3MiLCJfbCIsIl90IiwiX3EiLCJfbSIsIl9rIiwiX3YiLCJfdSIsIl9wIiwiRnVuY3Rpb25hbFJlbmRlckNvbnRleHQiLCJjb250ZXh0Vm0iLCJ0aGlzJDEiLCJfb3JpZ2luYWwiLCJpc0NvbXBpbGVkIiwiX2NvbXBpbGVkIiwibmVlZE5vcm1hbGl6YXRpb24iLCJpbmplY3Rpb25zIiwic2NvcGVkU2xvdHMiLCJfc2NvcGVJZCIsImNsb25lQW5kTWFya0Z1bmN0aW9uYWxSZXN1bHQiLCJyZW5kZXJDb250ZXh0IiwibWVyZ2VQcm9wcyIsImNvbXBvbmVudFZOb2RlSG9va3MiLCJoeWRyYXRpbmciLCJfaXNEZXN0cm95ZWQiLCJrZWVwQWxpdmUiLCJtb3VudGVkTm9kZSIsInByZXBhdGNoIiwiX2lzQ29tcG9uZW50IiwiX3BhcmVudFZub2RlIiwiaW5saW5lVGVtcGxhdGUiLCJjcmVhdGVDb21wb25lbnRJbnN0YW5jZUZvclZub2RlIiwiYWN0aXZlSW5zdGFuY2UiLCIkbW91bnQiLCJvbGRWbm9kZSIsInBhcmVudFZub2RlIiwicmVuZGVyQ2hpbGRyZW4iLCJuZXdTY29wZWRTbG90cyIsIm9sZFNjb3BlZFNsb3RzIiwiaGFzRHluYW1pY1Njb3BlZFNsb3QiLCJuZWVkc0ZvcmNlVXBkYXRlIiwiX3JlbmRlckNoaWxkcmVuIiwiJHZub2RlIiwiX3Zub2RlIiwiJGF0dHJzIiwiJGxpc3RlbmVycyIsInByb3BLZXlzIiwiX3Byb3BLZXlzIiwib2xkTGlzdGVuZXJzIiwiX3BhcmVudExpc3RlbmVycyIsInVwZGF0ZUNvbXBvbmVudExpc3RlbmVycyIsIiRmb3JjZVVwZGF0ZSIsInVwZGF0ZUNoaWxkQ29tcG9uZW50IiwiX2lzTW91bnRlZCIsImNhbGxIb29rIiwiX2luYWN0aXZlIiwiYWN0aXZhdGVkQ2hpbGRyZW4iLCJhY3RpdmF0ZUNoaWxkQ29tcG9uZW50IiwiZGVhY3RpdmF0ZUNoaWxkQ29tcG9uZW50IiwiJGRlc3Ryb3kiLCJob29rc1RvTWVyZ2UiLCJjcmVhdGVDb21wb25lbnQiLCJiYXNlQ3RvciIsImNpZCIsImVycm9yQ29tcCIsInJlc29sdmVkIiwib3duZXIiLCJjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UiLCJvd25lcnMiLCJsb2FkaW5nQ29tcCIsInN5bmMiLCJ0aW1lckxvYWRpbmciLCJ0aW1lclRpbWVvdXQiLCIkb24iLCJmb3JjZVJlbmRlciIsInJlbmRlckNvbXBsZXRlZCIsImVuc3VyZUN0b3IiLCJyZWplY3QiLCJyZWFzb24iLCJjb21wb25lbnQiLCJyZXNvbHZlQXN5bmNDb21wb25lbnQiLCJjcmVhdGVBc3luY1BsYWNlaG9sZGVyIiwicmVzb2x2ZUNvbnN0cnVjdG9yT3B0aW9ucyIsIm1vZGVsIiwidHJhbnNmb3JtTW9kZWwiLCJleHRyYWN0UHJvcHNGcm9tVk5vZGVEYXRhIiwiZnVuY3Rpb25hbCIsInZub2RlcyIsImNyZWF0ZUZ1bmN0aW9uYWxDb21wb25lbnQiLCJuYXRpdmVPbiIsImFic3RyYWN0IiwidG9NZXJnZSIsIl9tZXJnZWQiLCJtZXJnZUhvb2skMSIsImluc3RhbGxDb21wb25lbnRIb29rcyIsImYxIiwiZjIiLCJub3JtYWxpemF0aW9uVHlwZSIsImFsd2F5c05vcm1hbGl6ZSIsInNpbXBsZU5vcm1hbGl6ZUNoaWxkcmVuIiwicHJlIiwiYXBwbHlOUyIsImNsYXNzIiwicmVnaXN0ZXJEZWVwQmluZGluZ3MiLCJfY3JlYXRlRWxlbWVudCIsImNvbXAiLCJiYXNlIiwiZ2V0Rmlyc3RDb21wb25lbnRDaGlsZCIsInJlbW92ZSQxIiwiJG9mZiIsIl90YXJnZXQiLCJvbmNlSGFuZGxlciIsInNldEFjdGl2ZUluc3RhbmNlIiwicHJldkFjdGl2ZUluc3RhbmNlIiwiaXNJbkluYWN0aXZlVHJlZSIsImRpcmVjdCIsIl9kaXJlY3RJbmFjdGl2ZSIsIiRjaGlsZHJlbiIsImhhbmRsZXJzIiwiX2hhc0hvb2tFdmVudCIsIiRlbWl0Iiwid2FpdGluZyIsImZsdXNoaW5nIiwiY3VycmVudEZsdXNoVGltZXN0YW1wIiwi
118Z2V0Tm93IiwiY3JlYXRlRXZlbnQiLCJ0aW1lU3RhbXAiLCJmbHVzaFNjaGVkdWxlclF1ZXVlIiwid2F0Y2hlciIsImJlZm9yZSIsInJ1biIsImFjdGl2YXRlZFF1ZXVlIiwidXBkYXRlZFF1ZXVlIiwiY2FsbEFjdGl2YXRlZEhvb2tzIiwiX3dhdGNoZXIiLCJjYWxsVXBkYXRlZEhvb2tzIiwiZW1pdCIsInVpZCQyIiwiV2F0Y2hlciIsImV4cE9yRm4iLCJpc1JlbmRlcldhdGNoZXIiLCJfd2F0Y2hlcnMiLCJkZWVwIiwidXNlciIsImxhenkiLCJkaXJ0eSIsImRlcHMiLCJuZXdEZXBzIiwiZGVwSWRzIiwibmV3RGVwSWRzIiwic2VnbWVudHMiLCJwYXJzZVBhdGgiLCJjbGVhbnVwRGVwcyIsInRtcCIsInF1ZXVlV2F0Y2hlciIsIm9sZFZhbHVlIiwidGVhcmRvd24iLCJfaXNCZWluZ0Rlc3Ryb3llZCIsInNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbiIsInNvdXJjZUtleSIsImNvbXB1dGVkV2F0Y2hlck9wdGlvbnMiLCJkZWZpbmVDb21wdXRlZCIsInVzZXJEZWYiLCJzaG91bGRDYWNoZSIsImNyZWF0ZUNvbXB1dGVkR2V0dGVyIiwiY3JlYXRlR2V0dGVySW52b2tlciIsIl9jb21wdXRlZFdhdGNoZXJzIiwiY3JlYXRlV2F0Y2hlciIsIiR3YXRjaCIsInVpZCQzIiwic3VwZXJPcHRpb25zIiwibW9kaWZpZWRPcHRpb25zIiwibW9kaWZpZWQiLCJsYXRlc3QiLCJzZWFsZWQiLCJzZWFsZWRPcHRpb25zIiwicmVzb2x2ZU1vZGlmaWVkT3B0aW9ucyIsImV4dGVuZE9wdGlvbnMiLCJjb21wb25lbnRzIiwiVnVlIiwiZ2V0Q29tcG9uZW50TmFtZSIsInBydW5lQ2FjaGUiLCJrZWVwQWxpdmVJbnN0YW5jZSIsImVudHJ5IiwicHJ1bmVDYWNoZUVudHJ5IiwiY3VycmVudCIsIl91aWQiLCJ2bm9kZUNvbXBvbmVudE9wdGlvbnMiLCJfY29tcG9uZW50VGFnIiwiaW5pdEludGVybmFsQ29tcG9uZW50IiwiX3NlbGYiLCIkcm9vdCIsIiRyZWZzIiwiaW5pdExpZmVjeWNsZSIsImluaXRFdmVudHMiLCJwYXJlbnREYXRhIiwiaW5pdFJlbmRlciIsImluaXRJbmplY3Rpb25zIiwicHJvcHNPcHRpb25zIiwiaW5pdFByb3BzIiwiaW5pdE1ldGhvZHMiLCJfZGF0YSIsImdldERhdGEiLCJpbml0RGF0YSIsIndhdGNoZXJzIiwiaXNTU1IiLCJpbml0Q29tcHV0ZWQiLCJpbml0V2F0Y2giLCJpbml0U3RhdGUiLCJpbml0UHJvdmlkZSIsImluaXRNaXhpbiIsImRhdGFEZWYiLCJwcm9wc0RlZiIsIiRzZXQiLCIkZGVsZXRlIiwiaW1tZWRpYXRlIiwic3RhdGVNaXhpbiIsImhvb2tSRSIsIiRvbmNlIiwiaSQxIiwiY2JzIiwiZXZlbnRzTWl4aW4iLCJfdXBkYXRlIiwicHJldkVsIiwiJGVsIiwicHJldlZub2RlIiwicmVzdG9yZUFjdGl2ZUluc3RhbmNlIiwiX19wYXRjaF9fIiwiX192dWVfXyIsImxpZmVjeWNsZU1peGluIiwiJG5leHRUaWNrIiwicmVmIiwicmVuZGVyTWl4aW4iLCJwYXR0ZXJuVHlwZXMiLCJLZWVwQWxpdmUiLCJpbmNsdWRlIiwiZXhjbHVkZSIsImNhY2hlVk5vZGUiLCJ2bm9kZVRvQ2FjaGUiLCJrZXlUb0NhY2hlIiwiY3JlYXRlZCIsImRlc3Ryb3llZCIsIm1vdW50ZWQiLCJ1cGRhdGVkIiwiYnVpbHRJbkNvbXBvbmVudHMiLCJjb25maWdEZWYiLCJ1dGlsIiwiZGVmaW5lUmVhY3RpdmUiLCJkZWxldGUiLCJ1c2UiLCJwbHVnaW4iLCJpbnN0YWxsZWRQbHVnaW5zIiwiX2luc3RhbGxlZFBsdWdpbnMiLCJ1bnNoaWZ0IiwiaW5zdGFsbCIsImluaXRVc2UiLCJtaXhpbiIsImluaXRNaXhpbiQxIiwiU3VwZXIiLCJTdXBlcklkIiwiY2FjaGVkQ3RvcnMiLCJfQ3RvciIsIlN1YiIsIkNvbXAiLCJpbml0UHJvcHMkMSIsImluaXRDb21wdXRlZCQxIiwiaW5pdEV4dGVuZCIsImluaXRBc3NldFJlZ2lzdGVycyIsImluaXRHbG9iYWxBUEkiLCJzc3JDb250ZXh0IiwiYWNjZXB0VmFsdWUiLCJpc0VudW1lcmF0ZWRBdHRyIiwiaXNWYWxpZENvbnRlbnRFZGl0YWJsZVZhbHVlIiwiaXNCb29sZWFuQXR0ciIsInhsaW5rTlMiLCJpc1hsaW5rIiwiZ2V0WGxpbmtQcm9wIiwiaXNGYWxzeUF0dHJWYWx1ZSIsIm1lcmdlQ2xhc3NEYXRhIiwic3RhdGljQ2xhc3MiLCJzdHJpbmdpZnlDbGFzcyIsInN0cmluZ2lmaWVkIiwic3RyaW5naWZ5QXJyYXkiLCJzdHJpbmdpZnlPYmplY3QiLCJuYW1lc3BhY2VNYXAiLCJzdmciLCJtYXRoIiwiaXNIVE1MVGFnIiwiaXNTVkciLCJ1bmtub3duRWxlbWVudENhY2hlIiwiaXNUZXh0SW5wdXRUeXBlIiwibm9kZU9wcyIsIm11bHRpcGxlIiwiY3JlYXRlRWxlbWVudE5TIiwiY3JlYXRlQ29tbWVudCIsIm5ld05vZGUiLCJyZWZlcmVuY2VOb2RlIiwic2V0VGV4dENvbnRlbnQiLCJzZXRTdHlsZVNjb3BlIiwic2NvcGVJZCIsInJlZ2lzdGVyUmVmIiwiaXNSZW1vdmFsIiwicmVmcyIsInJlZkluRm9yIiwiZW1wdHlOb2RlIiwic2FtZVZub2RlIiwidHlwZUEiLCJ0eXBlQiIsInNhbWVJbnB1dFR5cGUiLCJjcmVhdGVLZXlUb09sZElkeCIsImJlZ2luSWR4IiwiZW5kSWR4IiwidXBkYXRlRGlyZWN0aXZlcyIsIm9sZERpciIsImlzQ3JlYXRlIiwiaXNEZXN0cm95Iiwib2xkRGlycyIsIm5vcm1hbGl6ZURpcmVjdGl2ZXMkMSIsIm5ld0RpcnMiLCJkaXJzV2l0aEluc2VydCIsImRpcnNXaXRoUG9zdHBhdGNoIiwib2xkQXJnIiwiY2FsbEhvb2skMSIsImNvbXBvbmVudFVwZGF0ZWQiLCJjYWxsSW5zZXJ0IiwiZW1wdHlNb2RpZmllcnMiLCJtb2RpZmllcnMiLCJnZXRSYXdEaXJOYW1lIiwicmF3TmFtZSIsImJhc2VNb2R1bGVzIiwidXBkYXRlQXR0cnMiLCJpbmhlcml0QXR0cnMiLCJvbGRBdHRycyIsInNldEF0dHIiLCJyZW1vdmVBdHRyaWJ1dGVOUyIsImlzSW5QcmUiLCJiYXNlU2V0QXR0ciIsImNvbnZlcnRFbnVtZXJhdGVkVmFsdWUiLCJzZXRBdHRyaWJ1dGVOUyIsIl9faWVwaCIsImJsb2NrZXIiLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLCJ1cGRhdGVDbGFzcyIsIm9sZERhdGEiLCJjbHMiLCJjaGlsZE5vZGUiLCJkeW5hbWljQ2xhc3MiLCJnZW5DbGFzc0ZvclZub2RlIiwidHJhbnNpdGlvbkNsYXNzIiwiX3RyYW5zaXRpb25DbGFzc2VzIiwiX3ByZXZDbGFzcyIsImNociIsImluZGV4JDEiLCJleHByZXNzaW9uUG9zIiwiZXhwcmVzc2lvbkVuZFBvcyIsImtsYXNzIiwidmFsaWREaXZpc2lvbkNoYXJSRSIsInBhcnNlRmlsdGVycyIsImZpbHRlcnMiLCJpblNpbmdsZSIsImluRG91YmxlIiwiaW5UZW1wbGF0ZVN0cmluZyIsImluUmVnZXgiLCJjdXJseSIsInNxdWFyZSIsInBhcmVuIiwibGFzdEZpbHRlckluZGV4IiwicHVzaEZpbHRlciIsIndyYXBGaWx0ZXIiLCJiYXNlV2FybiIsIm1zZyIsInJhbmdlIiwicGx1Y2tNb2R1bGVGdW5jdGlvbiIsIm1vZHVsZXMiLCJhZGRQcm9wIiwiZHluYW1pYyIsInJhbmdlU2V0SXRlbSIsInBsYWluIiwiYWRkQXR0ciIsImR5bmFtaWNBdHRycyIsImFkZFJhd0F0dHIiLCJhdHRyc01hcCIsImF0dHJzTGlzdCIsImFkZERpcmVjdGl2ZSIsImlzRHluYW1pY0FyZyIsInByZXBlbmRNb2RpZmllck1hcmtlciIsImFkZEhhbmRsZXIiLCJpbXBvcnRhbnQiLCJtaWRkbGUiLCJuYXRpdmUiLCJuYXRpdmVFdmVudHMiLCJuZXdIYW5kbGVyIiwiZ2V0QmluZGluZ0F0dHIiLCJnZXRTdGF0aWMiLCJkeW5hbWljVmFsdWUiLCJnZXRBbmRSZW1vdmVBdHRyIiwic3RhdGljVmFsdWUiLCJyZW1vdmVGcm9tTWFwIiwiZ2V0QW5kUmVtb3ZlQXR0ckJ5UmVnZXgiLCJnZW5Db21wb25lbnRNb2RlbCIsIm51bWJlciIsInZhbHVlRXhwcmVzc2lvbiIsImFzc2lnbm1lbnQiLCJnZW5Bc3NpZ25tZW50Q29kZSIsImxhc3RJbmRleE9mIiwiZW9mIiwiaXNTdHJpbmdTdGFydCIsInBhcnNlU3RyaW5nIiwicGFyc2VCcmFja2V0IiwicGFyc2VNb2RlbCIsImluQnJhY2tldCIsInN0cmluZ1F1b3RlIiwidGFyZ2V0JDEiLCJjcmVhdGVPbmNl
118SGFuZGxlciQxIiwicmVtb3ZlJDIiLCJ1c2VNaWNyb3Rhc2tGaXgiLCJhZGQkMSIsImF0dGFjaGVkVGltZXN0YW1wIiwiX3dyYXBwZXIiLCJjdXJyZW50VGFyZ2V0Iiwib3duZXJEb2N1bWVudCIsInVwZGF0ZURPTUxpc3RlbmVycyIsIm5vcm1hbGl6ZUV2ZW50cyIsInN2Z0NvbnRhaW5lciIsInVwZGF0ZURPTVByb3BzIiwib2xkUHJvcHMiLCJfdmFsdWUiLCJzdHJDdXIiLCJzaG91bGRVcGRhdGVWYWx1ZSIsImNoZWNrVmFsIiwiY29tcG9zaW5nIiwibm90SW5Gb2N1cyIsImlzTm90SW5Gb2N1c0FuZERpcnR5IiwiX3ZNb2RpZmllcnMiLCJpc0RpcnR5V2l0aE1vZGlmaWVycyIsInBhcnNlU3R5bGVUZXh0IiwiY3NzVGV4dCIsInByb3BlcnR5RGVsaW1pdGVyIiwibm9ybWFsaXplU3R5bGVEYXRhIiwibm9ybWFsaXplU3R5bGVCaW5kaW5nIiwic3RhdGljU3R5bGUiLCJiaW5kaW5nU3R5bGUiLCJlbXB0eVN0eWxlIiwiY3NzVmFyUkUiLCJpbXBvcnRhbnRSRSIsInNldFByb3AiLCJzZXRQcm9wZXJ0eSIsIm5vcm1hbGl6ZWROYW1lIiwibm9ybWFsaXplIiwidmVuZG9yTmFtZXMiLCJjYXBOYW1lIiwidXBkYXRlU3R5bGUiLCJvbGRTdGF0aWNTdHlsZSIsIm9sZFN0eWxlQmluZGluZyIsIm5vcm1hbGl6ZWRTdHlsZSIsIm9sZFN0eWxlIiwibmV3U3R5bGUiLCJjaGVja0NoaWxkIiwic3R5bGVEYXRhIiwid2hpdGVzcGFjZVJFIiwiYWRkQ2xhc3MiLCJyZW1vdmVDbGFzcyIsInRhciIsInJlc29sdmVUcmFuc2l0aW9uIiwiYXV0b0Nzc1RyYW5zaXRpb24iLCJlbnRlckNsYXNzIiwiZW50ZXJUb0NsYXNzIiwiZW50ZXJBY3RpdmVDbGFzcyIsImxlYXZlQ2xhc3MiLCJsZWF2ZVRvQ2xhc3MiLCJsZWF2ZUFjdGl2ZUNsYXNzIiwiaGFzVHJhbnNpdGlvbiIsIlRSQU5TSVRJT04iLCJBTklNQVRJT04iLCJ0cmFuc2l0aW9uUHJvcCIsImFuaW1hdGlvblByb3AiLCJhbmltYXRpb25FbmRFdmVudCIsIm9ud2Via2l0dHJhbnNpdGlvbmVuZCIsIm9uYW5pbWF0aW9uZW5kIiwib253ZWJraXRhbmltYXRpb25lbmQiLCJyYWYiLCJuZXh0RnJhbWUiLCJhZGRUcmFuc2l0aW9uQ2xhc3MiLCJ0cmFuc2l0aW9uQ2xhc3NlcyIsInJlbW92ZVRyYW5zaXRpb25DbGFzcyIsIndoZW5UcmFuc2l0aW9uRW5kcyIsImV4cGVjdGVkVHlwZSIsImdldFRyYW5zaXRpb25JbmZvIiwicHJvcENvdW50IiwiZW5kZWQiLCJ0cmFuc2Zvcm1SRSIsInN0eWxlcyIsInRyYW5zaXRpb25EZWxheXMiLCJ0cmFuc2l0aW9uRHVyYXRpb25zIiwidHJhbnNpdGlvblRpbWVvdXQiLCJnZXRUaW1lb3V0IiwiYW5pbWF0aW9uRGVsYXlzIiwiYW5pbWF0aW9uRHVyYXRpb25zIiwiYW5pbWF0aW9uVGltZW91dCIsImhhc1RyYW5zZm9ybSIsImRlbGF5cyIsImR1cmF0aW9ucyIsInRvTXMiLCJlbnRlciIsInRvZ2dsZURpc3BsYXkiLCJfbGVhdmVDYiIsImNhbmNlbGxlZCIsIl9lbnRlckNiIiwiYXBwZWFyQ2xhc3MiLCJhcHBlYXJUb0NsYXNzIiwiYXBwZWFyQWN0aXZlQ2xhc3MiLCJiZWZvcmVFbnRlciIsImFmdGVyRW50ZXIiLCJlbnRlckNhbmNlbGxlZCIsImJlZm9yZUFwcGVhciIsImFwcGVhciIsImFmdGVyQXBwZWFyIiwiYXBwZWFyQ2FuY2VsbGVkIiwidHJhbnNpdGlvbk5vZGUiLCJpc0FwcGVhciIsInN0YXJ0Q2xhc3MiLCJhY3RpdmVDbGFzcyIsInRvQ2xhc3MiLCJiZWZvcmVFbnRlckhvb2siLCJlbnRlckhvb2siLCJhZnRlckVudGVySG9vayIsImVudGVyQ2FuY2VsbGVkSG9vayIsImV4cGxpY2l0RW50ZXJEdXJhdGlvbiIsImV4cGVjdHNDU1MiLCJ1c2VyV2FudHNDb250cm9sIiwiZ2V0SG9va0FyZ3VtZW50c0xlbmd0aCIsInBlbmRpbmdOb2RlIiwiX3BlbmRpbmciLCJpc1ZhbGlkRHVyYXRpb24iLCJsZWF2ZSIsInJtIiwiYmVmb3JlTGVhdmUiLCJhZnRlckxlYXZlIiwibGVhdmVDYW5jZWxsZWQiLCJkZWxheUxlYXZlIiwiZXhwbGljaXRMZWF2ZUR1cmF0aW9uIiwicGVyZm9ybUxlYXZlIiwiaW52b2tlckZucyIsIl9lbnRlciIsInBhdGNoIiwiYmFja2VuZCIsInJlbW92ZU5vZGUiLCJjcmVhdGVFbG0iLCJpbnNlcnRlZFZub2RlUXVldWUiLCJwYXJlbnRFbG0iLCJyZWZFbG0iLCJuZXN0ZWQiLCJvd25lckFycmF5IiwiaXNSZWFjdGl2YXRlZCIsImluaXRDb21wb25lbnQiLCJpbm5lck5vZGUiLCJhY3RpdmF0ZSIsInJlYWN0aXZhdGVDb21wb25lbnQiLCJzZXRTY29wZSIsImNyZWF0ZUNoaWxkcmVuIiwiaW52b2tlQ3JlYXRlSG9va3MiLCJwZW5kaW5nSW5zZXJ0IiwiaXNQYXRjaGFibGUiLCJyZWYkJDEiLCJhbmNlc3RvciIsImFkZFZub2RlcyIsInN0YXJ0SWR4IiwiaW52b2tlRGVzdHJveUhvb2siLCJyZW1vdmVWbm9kZXMiLCJjaCIsInJlbW92ZUFuZEludm9rZVJlbW92ZUhvb2siLCJjaGlsZEVsbSIsImNyZWF0ZVJtQ2IiLCJmaW5kSWR4SW5PbGQiLCJvbGRDaCIsInBhdGNoVm5vZGUiLCJyZW1vdmVPbmx5IiwiaHlkcmF0ZSIsIm5ld0NoIiwib2xkS2V5VG9JZHgiLCJpZHhJbk9sZCIsInZub2RlVG9Nb3ZlIiwib2xkU3RhcnRJZHgiLCJuZXdTdGFydElkeCIsIm9sZEVuZElkeCIsIm9sZFN0YXJ0Vm5vZGUiLCJvbGRFbmRWbm9kZSIsIm5ld0VuZElkeCIsIm5ld1N0YXJ0Vm5vZGUiLCJuZXdFbmRWbm9kZSIsImNhbk1vdmUiLCJ1cGRhdGVDaGlsZHJlbiIsInBvc3RwYXRjaCIsImludm9rZUluc2VydEhvb2siLCJpbml0aWFsIiwiaXNSZW5kZXJlZE1vZHVsZSIsImluVlByZSIsImNoaWxkcmVuTWF0Y2giLCJmdWxsSW52b2tlIiwiaXNJbml0aWFsUGF0Y2giLCJpc1JlYWxFbGVtZW50Iiwib2xkRWxtIiwicGF0Y2hhYmxlIiwiaSQyIiwiY3JlYXRlUGF0Y2hGdW5jdGlvbiIsInZtb2RlbCIsImRpcmVjdGl2ZSIsImJpbmRpbmciLCJfdk9wdGlvbnMiLCJzZXRTZWxlY3RlZCIsIm9uQ29tcG9zaXRpb25TdGFydCIsIm9uQ29tcG9zaXRpb25FbmQiLCJwcmV2T3B0aW9ucyIsImN1ck9wdGlvbnMiLCJoYXNOb01hdGNoaW5nT3B0aW9uIiwiYWN0dWFsbHlTZXRTZWxlY3RlZCIsImlzTXVsdGlwbGUiLCJzZWxlY3RlZEluZGV4IiwiaW5pdEV2ZW50IiwibG9jYXRlTm9kZSIsInRyYW5zaXRpb24kJDEiLCJvcmlnaW5hbERpc3BsYXkiLCJfX3ZPcmlnaW5hbERpc3BsYXkiLCJ1bmJpbmQiLCJwbGF0Zm9ybURpcmVjdGl2ZXMiLCJnZXRSZWFsQ2hpbGQiLCJjb21wT3B0aW9ucyIsImV4dHJhY3RUcmFuc2l0aW9uRGF0YSIsInJhd0NoaWxkIiwiaXNOb3RUZXh0Tm9kZSIsImlzVlNob3dEaXJlY3RpdmUiLCJUcmFuc2l0aW9uIiwiaGFzUGFyZW50VHJhbnNpdGlvbiIsIl9sZWF2aW5nIiwib2xkUmF3Q2hpbGQiLCJvbGRDaGlsZCIsImlzU2FtZUNoaWxkIiwiZGVsYXllZExlYXZlIiwibW92ZUNsYXNzIiwiVHJhbnNpdGlvbkdyb3VwIiwiYmVmb3JlTW91bnQiLCJrZXB0IiwicHJldkNoaWxkcmVuIiwicmF3Q2hpbGRyZW4iLCJ0cmFuc2l0aW9uRGF0YSIsInJlbW92ZWQiLCJjJDEiLCJwb3MiLCJoYXNNb3ZlIiwiY2FsbFBlbmRpbmdDYnMiLCJyZWNvcmRQb3NpdGlvbiIsImFwcGx5VHJhbnNsYXRpb24iLCJfcmVmbG93IiwibW92ZWQiLCJXZWJraXRUcmFuc2Zvcm0iLCJfbW92ZUNiIiwiX2hhc01vdmUiLCJuZXdQb3MiLCJvbGRQb3MiLCJkeCIsImR5IiwicGxhdGZvcm1Db21wb25lbnRzIiwiSFRNTFVua25vd25FbGVtZW50IiwidXBkYXRlQ29tcG9uZW50IiwibW91bnRDb21wb25lbnQiLCJkZWNvZGVyIiwiZGVmYXVsdFRhZ1JFIiwicmVnZXhFc2NhcGVSRSIsImJ1aWxkUmVnZXgiLCJkZWxpbWl0ZXJzIiwia2xhc3MkMSIsInN0YXRpY0tleXMiLCJ0cmFuc2Zvcm1Ob2RlIiwiY2xhc3NCaW5kaW5nIiwiZ2VuRGF0YSIsInN0eWxlJDEiLCJzdHlsZUJpbmRpbmciLCJpc1VuYXJ5VGFnIiwiY2FuQmVMZWZ0T3BlblRhZyIsImlzTm9uUGhyYXNpbmdUYWciLCJhdHRyaWJ1dGUiLCJkeW5hbWljQXJnQXR0cmlidXRlIiwibmNuYW1lIiwicW5hbWVDYXB0dXJlIiwic3RhcnRUYWdPcGVuIiwic3RhcnRUYWdDbG9zZSIsImVuZF
118RhZyIsImRvY3R5cGUiLCJjb21tZW50IiwiY29uZGl0aW9uYWxDb21tZW50IiwiaXNQbGFpblRleHRFbGVtZW50IiwicmVDYWNoZSIsImRlY29kaW5nTWFwIiwiZW5jb2RlZEF0dHIiLCJlbmNvZGVkQXR0cldpdGhOZXdMaW5lcyIsImlzSWdub3JlTmV3bGluZVRhZyIsInNob3VsZElnbm9yZUZpcnN0TmV3bGluZSIsImh0bWwiLCJkZWNvZGVBdHRyIiwic2hvdWxkRGVjb2RlTmV3bGluZXMiLCJ3YXJuJDIiLCJ0cmFuc2Zvcm1zIiwicHJlVHJhbnNmb3JtcyIsInBvc3RUcmFuc2Zvcm1zIiwicGxhdGZvcm1Jc1ByZVRhZyIsInBsYXRmb3JtTXVzdFVzZVByb3AiLCJwbGF0Zm9ybUdldFRhZ05hbWVzcGFjZSIsIm9uUkUiLCJkaXJSRSIsImZvckFsaWFzUkUiLCJmb3JJdGVyYXRvclJFIiwic3RyaXBQYXJlbnNSRSIsImR5bmFtaWNBcmdSRSIsImFyZ1JFIiwiYmluZFJFIiwibW9kaWZpZXJSRSIsInNsb3RSRSIsImxpbmVCcmVha1JFIiwid2hpdGVzcGFjZVJFJDEiLCJkZWNvZGVIVE1MQ2FjaGVkIiwiZW1wdHlTbG90U2NvcGVUb2tlbiIsImNyZWF0ZUFTVEVsZW1lbnQiLCJtYWtlQXR0cnNNYXAiLCJyYXdBdHRyc01hcCIsInByb2Nlc3NFbGVtZW50IiwicHJvY2Vzc0tleSIsImNoZWNrSW5Gb3IiLCJwcm9jZXNzUmVmIiwic2xvdFNjb3BlIiwic2xvdFRhcmdldCIsInNsb3RUYXJnZXREeW5hbWljIiwiZ2V0UmF3QmluZGluZ0F0dHIiLCJzbG90QmluZGluZyIsImdldFNsb3ROYW1lIiwic2xvdEJpbmRpbmckMSIsInJlZiQxIiwiZHluYW1pYyQxIiwic2xvdENvbnRhaW5lciIsInByb2Nlc3NTbG90Q29udGVudCIsInNsb3ROYW1lIiwicHJvY2Vzc0NvbXBvbmVudCIsInN5bmNHZW4iLCJpc0R5bmFtaWMiLCJoYXNCaW5kaW5ncyIsInBhcnNlTW9kaWZpZXJzIiwiY2FtZWwiLCJhcmdNYXRjaCIsInByb2Nlc3NBdHRycyIsInByb2Nlc3NGb3IiLCJpbk1hdGNoIiwiYWxpYXMiLCJpdGVyYXRvck1hdGNoIiwiaXRlcmF0b3IxIiwiaXRlcmF0b3IyIiwicGFyc2VGb3IiLCJhZGRJZkNvbmRpdGlvbiIsImlmQ29uZGl0aW9ucyIsImllTlNCdWciLCJpZU5TUHJlZml4IiwiY2xvbmVBU1RFbGVtZW50IiwiaXNTdGF0aWNLZXkiLCJpc1BsYXRmb3JtUmVzZXJ2ZWRUYWciLCJtb2R1bGVzJDEiLCJwcmVUcmFuc2Zvcm1Ob2RlIiwidHlwZUJpbmRpbmciLCJpZkNvbmRpdGlvbiIsImlmQ29uZGl0aW9uRXh0cmEiLCJoYXNFbHNlIiwiZWxzZUlmQ29uZGl0aW9uIiwiYnJhbmNoMCIsInByb2Nlc3NlZCIsImlmIiwiYnJhbmNoMSIsImJyYW5jaDIiLCJlbHNlIiwiZWxzZWlmIiwiZGlyZWN0aXZlcyQxIiwiX3dhcm4iLCJnZW5TZWxlY3QiLCJ2YWx1ZUJpbmRpbmciLCJ0cnVlVmFsdWVCaW5kaW5nIiwiZmFsc2VWYWx1ZUJpbmRpbmciLCJnZW5DaGVja2JveE1vZGVsIiwiZ2VuUmFkaW9Nb2RlbCIsIm5lZWRDb21wb3NpdGlvbkd1YXJkIiwiZ2VuRGVmYXVsdE1vZGVsIiwiYmFzZU9wdGlvbnMiLCJleHBlY3RIVE1MIiwiaXNQcmVUYWciLCJnZW5TdGF0aWNLZXlzQ2FjaGVkIiwib3B0aW1pemUiLCJyb290IiwibWFya1N0YXRpYyQxIiwibWFya1N0YXRpY1Jvb3RzIiwiaXNEaXJlY3RDaGlsZE9mVGVtcGxhdGVGb3IiLCJsJDEiLCJzdGF0aWNJbkZvciIsInN0YXRpY1Jvb3QiLCJmbkV4cFJFIiwiZm5JbnZva2VSRSIsInNpbXBsZVBhdGhSRSIsImVzYyIsInRhYiIsInNwYWNlIiwidXAiLCJkb3duIiwia2V5TmFtZXMiLCJnZW5HdWFyZCIsIm1vZGlmaWVyQ29kZSIsInN0b3AiLCJwcmV2ZW50IiwiY3RybCIsImFsdCIsIm1ldGEiLCJnZW5IYW5kbGVycyIsInN0YXRpY0hhbmRsZXJzIiwiZHluYW1pY0hhbmRsZXJzIiwiaGFuZGxlckNvZGUiLCJnZW5IYW5kbGVyIiwiaXNNZXRob2RQYXRoIiwiaXNGdW5jdGlvbkV4cHJlc3Npb24iLCJpc0Z1bmN0aW9uSW52b2NhdGlvbiIsImdlbk1vZGlmaWVyQ29kZSIsImtleU1vZGlmaWVyIiwiZ2VuRmlsdGVyQ29kZSIsImdlbktleUZpbHRlciIsImtleVZhbCIsImtleU5hbWUiLCJiYXNlRGlyZWN0aXZlcyIsIndyYXBMaXN0ZW5lcnMiLCJ3cmFwRGF0YSIsImNsb2FrIiwiQ29kZWdlblN0YXRlIiwiZGF0YUdlbkZucyIsIm1heWJlQ29tcG9uZW50Iiwib25jZUlkIiwiZ2VuZXJhdGUiLCJhc3QiLCJnZW5FbGVtZW50Iiwic3RhdGljUHJvY2Vzc2VkIiwiZ2VuU3RhdGljIiwib25jZVByb2Nlc3NlZCIsImdlbk9uY2UiLCJmb3JQcm9jZXNzZWQiLCJnZW5Gb3IiLCJpZlByb2Nlc3NlZCIsImdlbklmIiwiZ2VuQ2hpbGRyZW4iLCJnZW5Qcm9wcyIsImJpbmQkJDEiLCJnZW5TbG90IiwiY29tcG9uZW50TmFtZSIsImdlbkRhdGEkMiIsImdlbkNvbXBvbmVudCIsIm9yaWdpbmFsUHJlU3RhdGUiLCJhbHRHZW4iLCJhbHRFbXB0eSIsImdlbklmQ29uZGl0aW9ucyIsImNvbmRpdGlvbnMiLCJnZW5UZXJuYXJ5RXhwIiwiYWx0SGVscGVyIiwibmVlZFJ1bnRpbWUiLCJoYXNSdW50aW1lIiwiZ2VuIiwiZ2VuRGlyZWN0aXZlcyIsImNvbnRhaW5zU2xvdENoaWxkIiwibmVlZHNLZXkiLCJnZW5lcmF0ZWRTbG90cyIsImdlblNjb3BlZFNsb3QiLCJpbmxpbmVSZW5kZXJGbnMiLCJ
118nZW5JbmxpbmVUZW1wbGF0ZSIsImlzTGVnYWN5U3ludGF4IiwicmV2ZXJzZVByb3h5IiwiY2hlY2tTa2lwIiwiYWx0R2VuRWxlbWVudCIsImFsdEdlbk5vZGUiLCJlbCQxIiwibm9ybWFsaXphdGlvblR5cGUkMSIsIm5lZWRzTm9ybWFsaXphdGlvbiIsImdldE5vcm1hbGl6YXRpb25UeXBlIiwiZ2VuTm9kZSIsImdlbkNvbW1lbnQiLCJ0cmFuc2Zvcm1TcGVjaWFsTmV3bGluZXMiLCJzdGF0aWNQcm9wcyIsImR5bmFtaWNQcm9wcyIsImNyZWF0ZUZ1bmN0aW9uIiwiY3JlYXRlQ29tcGlsZVRvRnVuY3Rpb25GbiIsImNvbXBpbGUiLCJjb21waWxlZCIsImZuR2VuRXJyb3JzIiwiYmFzZUNvbXBpbGUiLCJjcmVhdGVDb21waWxlciIsImN1cnJlbnRQYXJlbnQiLCJwcmVzZXJ2ZVdoaXRlc3BhY2UiLCJ3aGl0ZXNwYWNlT3B0aW9uIiwid2hpdGVzcGFjZSIsImluUHJlIiwiY2xvc2VFbGVtZW50IiwidHJpbUVuZGluZ1doaXRlc3BhY2UiLCJmb3JiaWRkZW4iLCJmaW5kUHJldkVsZW1lbnQiLCJsYXN0Tm9kZSIsImxhc3RUYWciLCJpc1VuYXJ5VGFnJCQxIiwiY2FuQmVMZWZ0T3BlblRhZyQkMSIsImVuZFRhZ0xlbmd0aCIsInN0YWNrZWRUYWciLCJyZVN0YWNrZWRUYWciLCJyZXN0JDEiLCJjaGFycyIsInBhcnNlRW5kVGFnIiwidGV4dEVuZCIsImNvbW1lbnRFbmQiLCJzaG91bGRLZWVwQ29tbWVudCIsImFkdmFuY2UiLCJjb25kaXRpb25hbEVuZCIsImRvY3R5cGVNYXRjaCIsImVuZFRhZ01hdGNoIiwiY3VySW5kZXgiLCJzdGFydFRhZ01hdGNoIiwicGFyc2VTdGFydFRhZyIsImhhbmRsZVN0YXJ0VGFnIiwicmVzdCIsInVuYXJ5U2xhc2giLCJ1bmFyeSIsInNob3VsZERlY29kZU5ld2xpbmVzRm9ySHJlZiIsImxvd2VyQ2FzZWRUYWciLCJsb3dlckNhc2VkVGFnTmFtZSIsInBhcnNlSFRNTCIsImNvbW1lbnRzIiwib3V0cHV0U291cmNlUmFuZ2UiLCJzdGFydCQxIiwiZ3VhcmRJRVNWR0J1ZyIsInByb2Nlc3NQcmUiLCJwcm9jZXNzUmF3QXR0cnMiLCJwcm9jZXNzSWYiLCJwcm9jZXNzT25jZSIsImVuZCQxIiwidGFnUkUiLCJ0b2tlblZhbHVlIiwidG9rZW5zIiwicmF3VG9rZW5zIiwicGFyc2VUZXh0IiwiZmluYWxPcHRpb25zIiwidGlwcyIsInRpcCIsImNvbXBpbGVUb0Z1bmN0aW9ucyIsImdldFNob3VsZERlY29kZSIsImlkVG9UZW1wbGF0ZSIsIm1vdW50IiwiZ2V0T3V0ZXJIVE1MIiwiX3ZtIiwicm9sZSIsImlzTm9uZUNhdGVnb3JpZXNTZWxlY3RlZCIsInRhYmluZGV4IiwiY2xpY2siLCJzZWxlY3RBbGwiLCJkYXRhTGFiZWwiLCJhbGxMYWJlbCIsImRhdGFDb25maWciLCJjYXRlZ29yaWVzIiwiY2F0ZWdvcnkiLCJzZWxlY3RlZENhdGVnb3JpZXMiLCJjaGVja2VkIiwiJCRhIiwiJCRlbCIsIiQkYyIsIiQkdiIsIiQkaSIsInRlYXNlcnMiLCJ0ZWFzZXIiLCJnZXRDbGFzc0Zyb21UZWFzZXJDYXRlZ29yaWVzIiwidGVhc2VyV2lkdGgiLCJpbWFnZUFsaWdubWVudHMiLCJpbWFnZUFsaWdubWVudCIsImltYWdlU291cmNlIiwidGVhc2VyTWVkaWEiLCJnZXRDbGFzc0hXIiwiZ2V0Q2xhc3NNZWRpYVJhdGlvIiwidGVhc2VyTWVkaWFSYXRpbyIsInNob3dPbmx5TWVkaWEiLCJ0aGVtZXMiLCJ0aGVtZSIsImxhYmVsTmV3IiwibmV3TGFiZWwiLCJ0ZWFzZXJIYXNDYXRlZ29yaWVzIiwidGVhc2VySGFzTWludXRlc1RvUmVhZExhYmVsIiwibWludXRlcyIsImlzTGFzdENhdGVnb3J5RWxlbWVudCIsInJlYWRUaW1lTGFiZWwiLCJhcnRpY2xlUHVibGlzaGVkRGF0ZSIsInhtbG5zIiwidmlld0JveCIsImZvY3VzYWJsZSIsImRlc2NyaXB0aW9uIiwicmVtb3ZlT3ZlcmxheUxpbmtJblZpZGVvVGVhc2VyIiwibGluayIsIl93aXRoU3RyaXBwZWQiLCJpc28iLCJzYW5kR3JleSIsImdyYW5pdGVHcmV5IiwibGlnaHRCbHVlIiwib2NlYW5HcmVlbiIsInJvc2VQaW5rIiwic2VhQmx1ZSIsIm5vcm1hbCIsIndpZGUiLCJvbkZpbHRlciIsInF1ZXJ5RmlsdGVycyIsImRhdGUiLCJmaWx0ZXJzU2VsZWN0b3IiLCJtZWRpYVJhdGlvcyIsIm1lZGlhUmF0aW8iLCJzY3JpcHRFeHBvcnRzIiwiZnVuY3Rpb25hbFRlbXBsYXRlIiwiaW5qZWN0U3R5bGVzIiwibW9kdWxlSWRlbnRpZmllciIsInNoYWRvd01vZGUiLCJfaW5qZWN0U3R5bGVzIiwib3JpZ2luYWxSZW5kZXIiLCJiZWZvcmVDcmVhdGUiLCJfX2ZpbGUiLCJlbmNvZGVSZXNlcnZlUkUiLCJlbmNvZGVSZXNlcnZlUmVwbGFjZXIiLCJjb21tYVJFIiwiZW5jb2RlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZGVjb2RlIiwiY2FzdFF1ZXJ5UGFyYW1WYWx1ZSIsInBhcmFtIiwicGFydHMiLCJzdHJpbmdpZnlRdWVyeSIsInZhbDIiLCJ0cmFpbGluZ1NsYXNoUkUiLCJjcmVhdGVSb3V0ZSIsInJlZGlyZWN0ZWRGcm9tIiwicm91dGVyIiwicm91dGUiLCJmdWxsUGF0aCIsImdldEZ1bGxQYXRoIiwibWF0Y2hlZCIsImZvcm1hdE1hdGNoIiwiU1RBUlQiLCJfc3RyaW5naWZ5UXVlcnkiLCJpc1NhbWVSb3V0ZSIsIm9ubHlQYXRoIiwiaXNPYmplY3RFcXVhbCIsImFWYWwiLCJiVmFsIiwiaGFuZGxlUm91dGVFbnRlcmVkIiwiZW50ZXJlZENicyIsIlZpZXciLCJyb3V0ZXJWaWV3IiwiJHJvdXRlIiwiX3JvdXRlclZpZXdDYWNoZSIsImRlcHRoIiwiaW5hY3RpdmUiLCJfcm91dGVyUm9vdCIsInZub2RlRGF0YSIsInJvdXRlclZpZXdEZXB0aCIsImNhY2hlZERhdGEiLCJjYWNoZWRDb21wb25lbnQiLCJjb25maWdQcm9wcyIsImZpbGxQcm9wc2luRGF0YSIsInJlZ2lzdGVyUm91dGVJbnN0YW5jZSIsInByb3BzVG9QYXNzIiwicmVzb2x2ZVByb3BzIiwicmVzb2x2ZVBhdGgiLCJyZWxhdGl2ZSIsImZpcnN0Q2hhciIsImNsZWFuUGF0aCIsImlzYXJyYXkiLCJwYXRoVG9SZWdleHBfMSIsInBhdGhUb1JlZ2V4cCIsIm9wdGlvbmFsIiwicmVwZWF0IiwicGFydGlhbCIsImFzdGVyaXNrIiwiYXR0YWNoS2V5cyIsInJlZ2V4cFRvUmVnZXhwIiwiZmxhZ3MiLCJhcnJheVRvUmVnZXhwIiwidG9rZW5zVG9SZWdFeHAiLCJzdHJpbmdUb1JlZ2V4cCIsInBhcnNlXzEiLCJ0b2tlbnNUb0Z1bmN0aW9uXzEiLCJ0b2tlbnNUb0Z1bmN0aW9uIiwidG9rZW5zVG9SZWdFeHBfMSIsIlBBVEhfUkVHRVhQIiwiZGVmYXVsdERlbGltaXRlciIsImVzY2FwZWQiLCJtb2RpZmllciIsImVzY2FwZUdyb3VwIiwiZXNjYXBlU3RyaW5nIiwiZW5jb2RlVVJJQ29tcG9uZW50UHJldHR5IiwiZW5jb2RlVVJJIiwiZW5jb2RlQXN0ZXJpc2siLCJwcmV0dHkiLCJzZW5zaXRpdmUiLCJzdHJpY3QiLCJlbmRzV2l0aERlbGltaXRlciIsInJlZ2V4cENvbXBpbGVDYWNoZSIsImZpbGxQYXJhbXMiLCJyb3V0ZU1zZyIsImZpbGxlciIsInBhdGhNYXRjaCIsIm5vcm1hbGl6ZUxvY2F0aW9uIiwicGFyYW1zJDEiLCJyYXdQYXRoIiwicGFyc2VkUGF0aCIsImhhc2hJbmRleCIsInF1ZXJ5SW5kZXgiLCJiYXNlUGF0aCIsImV4dHJhUXVlcnkiLCJfcGFyc2VRdWVyeSIsInBhcnNlZFF1ZXJ5IiwicmVzb2x2ZVF1ZXJ5IiwiX1Z1ZSIsIkxpbmsiLCJyZXF1aXJlZCIsImN1c3RvbSIsImV4YWN0IiwiZXhhY3RQYXRoIiwiZXhhY3RBY3RpdmVDbGFzcyIsImFyaWFDdXJyZW50VmFsdWUiLCIkcm91dGVyIiwi
118Z2xvYmFsQWN0aXZlQ2xhc3MiLCJsaW5rQWN0aXZlQ2xhc3MiLCJnbG9iYWxFeGFjdEFjdGl2ZUNsYXNzIiwibGlua0V4YWN0QWN0aXZlQ2xhc3MiLCJhY3RpdmVDbGFzc0ZhbGxiYWNrIiwiZXhhY3RBY3RpdmVDbGFzc0ZhbGxiYWNrIiwiY29tcGFyZVRhcmdldCIsInF1ZXJ5SW5jbHVkZXMiLCJpc0luY2x1ZGVkUm91dGUiLCJndWFyZEV2ZW50Iiwic2NvcGVkU2xvdCIsIm5hdmlnYXRlIiwiaXNFeGFjdEFjdGl2ZSIsImZpbmRBbmNob3IiLCJhRGF0YSIsImhhbmRsZXIkMSIsImV2ZW50JDEiLCJhQXR0cnMiLCJjcmVhdGVSb3V0ZU1hcCIsInJvdXRlcyIsIm9sZFBhdGhMaXN0Iiwib2xkUGF0aE1hcCIsIm9sZE5hbWVNYXAiLCJwYXJlbnRSb3V0ZSIsInBhdGhMaXN0IiwicGF0aE1hcCIsIm5hbWVNYXAiLCJhZGRSb3V0ZVJlY29yZCIsIm1hdGNoQXMiLCJwYXRoVG9SZWdleHBPcHRpb25zIiwibm9ybWFsaXplZFBhdGgiLCJub3JtYWxpemVQYXRoIiwiY2FzZVNlbnNpdGl2ZSIsInJlZ2V4IiwiY29tcGlsZVJvdXRlUmVnZXgiLCJyZWRpcmVjdCIsImNoaWxkTWF0Y2hBcyIsImFsaWFzZXMiLCJhbGlhc1JvdXRlIiwiY3JlYXRlTWF0Y2hlciIsImN1cnJlbnRSb3V0ZSIsIl9jcmVhdGVSb3V0ZSIsInBhcmFtTmFtZXMiLCJyZWNvcmQkMSIsIm1hdGNoUm91dGUiLCJvcmlnaW5hbFJlZGlyZWN0IiwicmVzb2x2ZVJlY29yZFBhdGgiLCJhbGlhc2VkTWF0Y2giLCJhbGlhc2VkUmVjb3JkIiwiYWRkUm91dGUiLCJwYXJlbnRPclJvdXRlIiwiZ2V0Um91dGVzIiwiYWRkUm91dGVzIiwiVGltZSIsImdlblN0YXRlS2V5IiwidG9GaXhlZCIsImdldFN0YXRlS2V5Iiwic2V0U3RhdGVLZXkiLCJwb3NpdGlvblN0b3JlIiwic2V0dXBTY3JvbGwiLCJzY3JvbGxSZXN0b3JhdGlvbiIsInByb3RvY29sQW5kUGF0aCIsInByb3RvY29sIiwiYWJzb2x1dGVQYXRoIiwic3RhdGVDb3B5IiwicmVwbGFjZVN0YXRlIiwiaGFuZGxlUG9wU3RhdGUiLCJoYW5kbGVTY3JvbGwiLCJpc1BvcCIsImFwcCIsImdldFNjcm9sbFBvc2l0aW9uIiwic2hvdWxkU2Nyb2xsIiwic2Nyb2xsVG9Qb3NpdGlvbiIsInNhdmVTY3JvbGxQb3NpdGlvbiIsImlzVmFsaWRQb3NpdGlvbiIsIm5vcm1hbGl6ZVBvc2l0aW9uIiwiaGFzaFN0YXJ0c1dpdGhOdW1iZXJSRSIsImRvY1JlY3QiLCJlbFJlY3QiLCJnZXRFbGVtZW50UG9zaXRpb24iLCJ1YSIsInN1cHBvcnRzUHVzaFN0YXRlIiwicnVuUXVldWUiLCJOYXZpZ2F0aW9uRmFpbHVyZVR5cGUiLCJyZWRpcmVjdGVkIiwiYWJvcnRlZCIsImR1cGxpY2F0ZWQiLCJjcmVhdGVOYXZpZ2F0aW9uQ2FuY2VsbGVkRXJyb3IiLCJjcmVhdGVSb3V0ZXJFcnJvciIsIl9pc1JvdXRlciIsInByb3BlcnRpZXNUb0xvZyIsImlzRXJyb3IiLCJpc05hdmlnYXRpb25GYWlsdXJlIiwiZXJyb3JUeXBlIiwiZmxhdE1hcENvbXBvbmVudHMiLCJmbGF0dGVuIiwiSGlzdG9yeSIsImJhc2VFbCIsIm5vcm1hbGl6ZUJhc2UiLCJyZWFkeSIsInJlYWR5Q2JzIiwicmVhZHlFcnJvckNicyIsImVycm9yQ2JzIiwiZXh0cmFjdEd1YXJkcyIsImd1YXJkcyIsImd1YXJkIiwiZXh0cmFjdEd1YXJkIiwiYmluZEd1YXJkIiwibGlzdGVuIiwib25SZWFkeSIsImVycm9yQ2IiLCJvbkVycm9yIiwidHJhbnNpdGlvblRvIiwib25BYm9ydCIsImNvbmZpcm1UcmFuc2l0aW9uIiwidXBkYXRlUm91dGUiLCJlbnN1cmVVUkwiLCJhZnRlckhvb2tzIiwiYWJvcnQiLCJsYXN0Um91dGVJbmRleCIsImxhc3RDdXJyZW50SW5kZXgiLCJhY3RpdmF0ZWQiLCJkZWFjdGl2YXRlZCIsInJlc29sdmVRdWV1ZSIsImV4dHJhY3RMZWF2ZUd1YXJkcyIsImJlZm9yZUhvb2tzIiwiZXh0cmFjdFVwZGF0ZUhvb2tzIiwiaGFzQXN5bmMiLCJyZXNvbHZlZERlZiIsImNyZWF0ZU5hdmlnYXRpb25BYm9ydGVkRXJyb3IiLCJjcmVhdGVOYXZpZ2F0aW9uUmVkaXJlY3RlZEVycm9yIiwiZW50ZXJHdWFyZHMiLCJiaW5kRW50ZXJHdWFyZCIsImV4dHJhY3RFbnRlckd1YXJkcyIsInJlc29sdmVIb29rcyIsInNldHVwTGlzdGVuZXJzIiwiY2xlYW51cExpc3RlbmVyIiwiSFRNTDVIaXN0b3J5IiwiX3N0YXJ0TG9jYXRpb24iLCJnZXRMb2NhdGlvbiIsImV4cGVjdFNjcm9sbCIsInN1cHBvcnRzU2Nyb2xsIiwiaGFuZGxlUm91dGluZ0V2ZW50IiwiZ28iLCJmcm9tUm91dGUiLCJnZXRDdXJyZW50TG9jYXRpb24iLCJwYXRoTG93ZXJDYXNlIiwiYmFzZUxvd2VyQ2FzZSIsIkhhc2hIaXN0b3J5IiwiZmFsbGJhY2siLCJjaGVja0ZhbGxiYWNrIiwiZW5zdXJlU2xhc2giLCJnZXRIYXNoIiwicmVwbGFjZUhhc2giLCJwdXNoSGFzaCIsImdldFVybCIsIkFic3RyYWN0SGlzdG9yeSIsInRhcmdldEluZGV4IiwiVnVlUm91dGVyIiwiYXBwcyIsIm1hdGNoZXIiLCJyZWdpc3Rlckhvb2siLCJyb3V0ZU9yRXJyb3IiLCJoYW5kbGVJbml0aWFsU2Nyb2xsIiwiX3JvdXRlIiwiYmVmb3JlRWFjaCIsImJlZm9yZVJlc29sdmUiLCJhZnRlckVhY2giLCJiYWNrIiwiZm9yd2FyZCIsImdldE1hdGNoZWRDb21wb25lbnRzIiwiY3JlYXRlSHJlZiIsIm5vcm1hbGl6ZWRUbyIsImluc3RhbGxlZCIsInJlZ2lzdGVySW5zdGFuY2UiLCJjYWxsVmFsIiwiX3JvdXRlciIsImJlZm9yZVJvdXRlRW50ZXIiLCJiZWZvcmVSb3V0ZUxlYXZlIiwiYmVmb3JlUm91dGVVcGRhdGUiLCJTVEFSVF9MT0NBVElPTiIsIm9iamVjdEZpdEltYWdlcyIsImNvbW1vbkMiLCJzbW9vdGhzY3JvbGxQb2x5ZmlsbCIsImhjcFNlbGVjdG9yQ21wIiwic2VsZWN0RWxlbWVudCIsImZpbmRQcm92aWRlckxpbmsiLCJldnQiLCJDb25zdGFudCIsIk1PREFMX0NMT1NFX0JVVFRPTiIsIk1PREFMX0xJTksiLCJNT0RBTF9PUEVOIiwiTU9EQUxfV1JBUFBFUiIsIk1PREFMX0NPTlRFTlRfSElEREVOIiwiTU9EQUxfQk9YIiwiUEFHRV9FWFRFUk5BTF9MSU5LU19DQU5ESURBVEVTIiwiRkVUQ0hfT1BUUyIsImhlYWRlcnMiLCJNRVRIT0QiLCJCT0RZIiwiRk9STSIsIkZPUk1fU1VDQ0VTU19TRUNUSU9OIiwiRk9STV9FUlJPUl9TRUNUSU9OIiwiQ09PS0lFX0ZPUk0iLCJNU0dfUE9QVVBfTk9UX0ZPVU5EIiwiU0NTU19NU0ciLCJTSUdOVVBfRk9
118STSIsIkNPT0tJRV9OQU1FIiwiQ1RBX0JUVE4iLCJpc0V4dGVybmFsTGluayIsImlzTm90Q1RBV2l0aE1vZGFsIiwiaXNOb3RQYXJ0bmVyTGluayIsImlzTm90SW5zaWRlTW9kYWwiLCJvcGVuTW9kYWwiLCJtb2RhbCIsImNsb3NlTW9kYWwiLCJjaGVja0lmQ29va2llIiwiY29va2llTmFtZSIsImNvb2tpZSIsInNhdmVDb29raWUiLCJOZXdzbGV0dGVyUG9wdXBUcmlnZ2VyZWRCeVRhcmdldCIsIm5ld3NsZXR0ZXJGb3JtSW5Nb2RhbCIsIkMiLCJuZXdzbGV0dGVyTW9kYWwiLCJuZXdzbGV0dGVyTW9kYWxDbG9zZUJ1dHRvbkxpc3QiLCJuZXdzbGV0dGVyU2lnbnVwRm9ybSIsImV2ZW50T25OZXdzbGV0dGVyTW9kYWwiLCJOZXdzbGV0dGVyUG9wdXBQYWdlTG9hZCIsImNvbmZpcm1hdGlvbkZvcm0iLCJjb29raWVQcmVzZW50TW9kYWxJbml0IiwiTGVhdmVTaXRlUG9wdXAiLCJ3aGl0ZWxpc3RlZFNpdGVzIiwiY3VycmVudEhyZWZWYWx1ZSIsInNlbGVjdG9ycyIsIm1vZGFsQ2xvc2VCdXR0b24iLCJtb2RhbExpbmsiLCJjdGFCdXR0b24iLCJwYWdlRXh0ZXJuYWxMaW5rc0NhbmRpZGF0ZXMiLCJwYXJ0bmVyUG9wdXAiLCJjdGFCdXR0b25XcmFwcGVyIiwiY3RhTGluayIsInNldFdoaXRlbGlzdGVkU2l0ZUFycmF5IiwiZ2V0RWxlbWVudHMiLCJzZXRCaW5kcyIsIm1vdmVNb2RhbFRvQm9keSIsImN1cnJlbnRUcmlnZ2VyIiwicG9wdXBUcmlnZ2VycyIsImdldFBvcHVwVHJpZ2dlcnMiLCJtb2RhbENsb3NlQnRuIiwibW9kYWxFeGl0Q29uZmlybUJ0biIsImdldE1vZGFsRXhpdENvbmZpcm1CdG4iLCJvbkV4dGVybmFsTGlua0NsaWNrIiwib25DbG9zZUNsaWNrIiwib25FeGl0Q29uZmlybUNsaWNrIiwib25PcGVuTGVhdmVTaXRlTW9kYWxXaXRoTWVzc2FnZSIsInBhcnRuZXJUcmlnZ2VycyIsImdldFBhcnRuZXJMaW5rSXRlbSIsImdldEV4dGVybmFsTGlua3NUcmlnZ2VycyIsImN0YUJ0biIsInBhcnRuZXJMaW5rIiwic2V0Q3VycmVudFRyaWdnZXIiLCJleHRlcm5hbExpbmtzIiwiY2hlY2tzIiwidGhlTGlua0lzTm90V2hpdGVsaXN0ZWQiLCJidG5JdGVtIiwiYnV0dG9uTGFiZWwiLCJ1cGRhdGVNb2RhbEV4aXRDb25maXJtQnRuQXR0cmlidXRlcyIsInBvcHVwT3BlblRyYWNraW5nIiwicGFnZUV4aXRUcmFja2luZyIsImNsb3NlQnRuTGFiZWwiLCJwb3B1cENsb3NlVHJhY2tpbmciLCJyZWRpcmVjdExpbmsiLCJpc0NoYXRib3QiLCJpc01lZ2FNZW51RWhlYWx0aCIsIm1lZ2FNZW51RWhlYWx0aE5hbWUiLCJlSGVhbHRoUGFydG5lck5hbWUiLCJoY3BMb2NhdG9yTmFtZSIsImlzSGNwTG9jYXRvck9yRWhlYWx0aCIsImhhc0NvbnZlcnNpb25UeXBlIiwiYXV0aG9yZWRNZWdhTWVudVB1cnBvc2UiLCJtZWdhTWVudVB1cnBvc2UiLCJlSGVhbHRoUGFydG5lciIsInB1cnBvc2UiLCJnZXRUcmlnZ2VyUGFydG5lck5hbWVEYXRhIiwiYXV0aG9yZWRNZWdhTWVudVBhcnRuZXJOYW1lIiwibWVnYU1lbnVQYXJ0bmVyTmFtZSIsInBhcnRuZXJOYW1lIiwiY3VzdG9tRXZlbnQiLCJidXR0b25OYW1lIiwiZGlnaXRhbERhdGEiLCJnbG9iYWxQYWdlUHJvcHMiLCJwYWdlIiwiZ2V0VHJpZ2dlclRyYWNraW5nRGF0YSIsInB1c2hFeGl0UG9wdXBFdmVudCIsIk9uQ29va2llUHJlc2VudCIsIm1vZGFsQm94IiwiZ2V0RGF0YUNvb2tpZSIsIk9uUGFnZUxvYWRQb3B1cCIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJhY2NlcHRDb29raWUiLCJzc3JEb2N1bWVudCIsImltcG9ydE5vZGUiLCJvcmlnaW4iLCJnZXREb2N1bWVudCIsInNzcldpbmRvdyIsInNjcmVlbiIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwid2luIiwiX2dldFByb3RvdHlwZU9mIiwiX3NldFByb3RvdHlwZU9mIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsImNvbnN0cnVjdCIsInNoYW0iLCJQcm94eSIsIl9jb25zdHJ1Y3QiLCJDbGFzcyIsIl93cmFwTmF0aXZlU3VwZXIiLCJfY2FjaGUiLCJXcmFwcGVyIiwiRG9tNyIsIl9BcnJheSIsInN1YkNsYXNzIiwic3VwZXJDbGFzcyIsIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJhcnJheUZsYXQiLCJhcnJheUZpbHRlciIsInRvQ3JlYXRlIiwidGVtcFBhcmVudCIsInFzYSIsInVuaXF1ZUFycmF5IiwiYXJyYXlVbmlxdWUiLCJub1RyaWdnZXIiLCJzaG9ydGN1dCIsIk1ldGhvZHMiLCJfZWwkY2xhc3NMaXN0IiwiX2xlbjIiLCJfa2V5MiIsIl9lbCRjbGFzc0xpc3QyIiwiaGFzQ2xhc3MiLCJfbGVuNCIsIl9rZXk0IiwidG9nZ2xlQ2xhc3MiLCJfbGVuMyIsIl9rZXkzIiwidG9nZ2xlIiwiYXR0ck5hbWUiLCJyZW1vdmVBdHRyIiwiX2xlbjUiLCJfa2V5NSIsInRhcmdldFNlbGVjdG9yIiwiaGFuZGxlTGl2ZUV2ZW50IiwiZXZlbnREYXRhIiwiZG9tN0V2ZW50RGF0YSIsIl9wYXJlbnRzIiwicGFyZW50cyIsIl9ldmVudCIsImRvbTdMaXZlTGlzdGVuZXJzIiwicHJveHlMaXN0ZW5lciIsImRvbTdMaXN0ZW5lcnMiLCJfbGVuNiIsIl9rZXk2IiwiZG9tN3Byb3h5IiwiX2xlbjkiLCJfa2V5OSIsImRhdGFJbmRleCIsInRyYW5zaXRpb25FbmQiLCJkb20iLCJmaXJlQ2FsbEJhY2siLCJpbmNsdWRlTWFyZ2lucyIsIl9zdHlsZXMiLCJfc3R5bGVzMiIsImJveCIsImNsaWVudFRvcCIsImNsaWVudExlZnQiLCJfcHJvcCIsImVhY2giLCJjb21wYXJlV2l0aCIsIndlYmtpdE1hdGNoZXNTZWxlY3RvciIsIm1zTWF0Y2hlc1NlbGVjdG9yIiwicHJldmlvdXNTaWJsaW5nIiwiZXEiLCJyZXR1cm5JbmRleCIsIm5ld0NoaWxkIiwidGVtcERpdiIsInByZXBlbmQiLCJuZXh0RWxlbWVudFNpYmxpbmciLCJuZXh0QWxsIiwibmV4dEVscyIsIl9uZXh0IiwicHJldmlvdXNFbGVtZW50U2libGluZyIsInByZXZBbGwiLCJwcmV2RWxzIiwiX3ByZXYiLCJfcGFyZW50IiwiZm91bmRFbGVtZW50cyIsImlzTm9kZSIsIm5vRXh0ZW5kIiwibmV4dFNvdXJjZSIsImtleXNBcnJheSIsIm5leHRJbmRleCIsIm5leHRLZXkiLCJkZXNjIiwiX19zd2lwZXJfXyIsImJpbmRNb2R1bGVNZXRob2RzIiwic3ViS2V5IiwiY2xhc3Nlc1RvU2VsZWN0b3IiLCJjcmVhdGVFbGVtZW50SWZOb3REZWZpbmVkIiwiJGNvbnRhaW5lciIsImNyZWF0ZUVsZW1lbnRzIiwiY2hlY2tQcm9wcyIsInN1cHBvcnQiLCJkZXZpY2UiLCJicm93c2VyIiwi
118Z2V0U3VwcG9ydCIsInRvdWNoIiwiRG9jdW1lbnRUb3VjaCIsInBvaW50ZXJFdmVudHMiLCJQb2ludGVyRXZlbnQiLCJtYXhUb3VjaFBvaW50cyIsInBhc3NpdmVMaXN0ZW5lciIsImdlc3R1cmVzIiwiY2FsY1N1cHBvcnQiLCJnZXREZXZpY2UiLCJvdmVycmlkZXMiLCJfdGVtcCIsImlvcyIsImFuZHJvaWQiLCJzY3JlZW5XaWR0aCIsInNjcmVlbkhlaWdodCIsImlwYWQiLCJpcG9kIiwiaXBob25lIiwid2luZG93cyIsIm1hY29zIiwib3MiLCJjYWxjRGV2aWNlIiwiZ2V0QnJvd3NlciIsImlzU2FmYXJpIiwiaXNXZWJWaWV3IiwiY2FsY0Jyb3dzZXIiLCJzd2lwZXIiLCJjcmVhdGVPYnNlcnZlciIsImluaXRpYWxpemVkIiwiUmVzaXplT2JzZXJ2ZXIiLCJlbnRyaWVzIiwibmV3V2lkdGgiLCJuZXdIZWlnaHQiLCJjb250ZW50Qm94U2l6ZSIsImNvbnRlbnRSZWN0IiwiaW5saW5lU2l6ZSIsImJsb2NrU2l6ZSIsInJlc2l6ZUhhbmRsZXIiLCJyZW1vdmVPYnNlcnZlciIsInVub2JzZXJ2ZSIsIm9yaWVudGF0aW9uQ2hhbmdlSGFuZGxlciIsInJlc2l6ZU9ic2VydmVyIiwiX2V4dGVuZHMiLCJhdHRhY2giLCJXZWJraXRNdXRhdGlvbk9ic2VydmVyIiwibXV0YXRpb25zIiwib2JzZXJ2ZXJVcGRhdGUiLCJhdHRyaWJ1dGVzIiwiY2hpbGRMaXN0Iiwib2JzZXJ2ZXJzIiwib2JzZXJ2ZVBhcmVudHMiLCJjb250YWluZXJQYXJlbnRzIiwib2JzZXJ2ZVNsaWRlQ2hpbGRyZW4iLCIkd3JhcHBlckVsIiwiZGlzY29ubmVjdCIsInByaW9yaXR5IiwiZXZlbnRzTGlzdGVuZXJzIiwiX19lbWl0dGVyUHJveHkiLCJvbkFueSIsImV2ZW50c0FueUxpc3RlbmVycyIsIm9mZkFueSIsImV2ZW50SGFuZGxlciIsImV2ZW50c0FycmF5IiwidXBkYXRlU2l6ZSIsImlzVmVydGljYWwiLCJ1cGRhdGVTbGlkZXMiLCJnZXREaXJlY3Rpb25MYWJlbCIsImdldERpcmVjdGlvblByb3BlcnR5VmFsdWUiLCJzd2lwZXJTaXplIiwicnRsIiwicnRsVHJhbnNsYXRlIiwid3JvbmdSVEwiLCJpc1ZpcnR1YWwiLCJ2aXJ0dWFsIiwiZW5hYmxlZCIsInByZXZpb3VzU2xpZGVzTGVuZ3RoIiwic2xpZGVzIiwic2xpZGVDbGFzcyIsInNsaWRlc0xlbmd0aCIsInNuYXBHcmlkIiwic2xpZGVzR3JpZCIsInNsaWRlc1NpemVzR3JpZCIsIm9mZnNldEJlZm9yZSIsInNsaWRlc09mZnNldEJlZm9yZSIsIm9mZnNldEFmdGVyIiwic2xpZGVzT2Zmc2V0QWZ0ZXIiLCJwcmV2aW91c1NuYXBHcmlkTGVuZ3RoIiwicHJldmlvdXNTbGlkZXNHcmlkTGVuZ3RoIiwic3BhY2VCZXR3ZWVuIiwic2xpZGVQb3NpdGlvbiIsInByZXZTbGlkZVNpemUiLCJzbGlkZXNOdW1iZXJFdmVuVG9Sb3dzIiwic2xpZGVTaXplIiwidmlydHVhbFNpemUiLCJzbGlkZXNQZXJDb2x1bW4iLCJjZWlsIiwic2xpZGVzUGVyVmlldyIsInNsaWRlc1BlckNvbHVtbkZpbGwiLCJuZXdTbGlkZXNHcmlkIiwiXyR3cmFwcGVyRWwkY3NzIiwiXyR3cmFwcGVyRWwkY3NzMiIsInNsaWRlc1BlclJvdyIsIm51bUZ1bGxDb2x1bW5zIiwic2xpZGUiLCJuZXdTbGlkZU9yZGVySW5kZXgiLCJjb2x1bW4iLCJyb3ciLCJzbGlkZXNQZXJHcm91cCIsImdyb3VwSW5kZXgiLCJzbGlkZUluZGV4SW5Hcm91cCIsImNvbHVtbnNJbkdyb3VwIiwib3JkZXIiLCJzbGlkZVN0eWxlcyIsImN1cnJlbnRUcmFuc2Zvcm0iLCJjdXJyZW50V2ViS2l0VHJhbnNmb3JtIiwid2Via2l0VHJhbnNmb3JtIiwicm91bmRMZW5ndGhzIiwiX3NsaWRlJCIsInN3aXBlclNsaWRlU2l6ZSIsImNlbn
118RlcmVkU2xpZGVzIiwic2xpZGVzUGVyR3JvdXBTa2lwIiwiZWZmZWN0Iiwic2V0V3JhcHBlclNpemUiLCJzbGlkZXNHcmlkSXRlbSIsIl9pMiIsIl9zbGlkZXNHcmlkSXRlbSIsIl9zbGlkZXMkZmlsdGVyJGNzcyIsInNsaWRlSW5kZXgiLCJjc3NNb2RlIiwiY2VudGVyZWRTbGlkZXNCb3VuZHMiLCJhbGxTbGlkZXNTaXplIiwic2xpZGVTaXplVmFsdWUiLCJtYXhTbmFwIiwic25hcCIsImNlbnRlckluc3VmZmljaWVudFNsaWRlcyIsIl9hbGxTbGlkZXNTaXplIiwiYWxsU2xpZGVzT2Zmc2V0Iiwic25hcEluZGV4Iiwid2F0Y2hPdmVyZmxvdyIsImNoZWNrT3ZlcmZsb3ciLCJ3YXRjaFNsaWRlc1Byb2dyZXNzIiwid2F0Y2hTbGlkZXNWaXNpYmlsaXR5IiwidXBkYXRlU2xpZGVzT2Zmc2V0IiwidXBkYXRlQXV0b0hlaWdodCIsInNwZWVkIiwiYWN0aXZlU2xpZGVzIiwic2V0VHJhbnNpdGlvbiIsImdldFNsaWRlQnlJbmRleCIsInZpc2libGVTbGlkZXMiLCJhY3RpdmVJbmRleCIsInN3aXBlclNsaWRlT2Zmc2V0IiwidXBkYXRlU2xpZGVzUHJvZ3Jlc3MiLCJ0cmFuc2xhdGUiLCJvZmZzZXRDZW50ZXIiLCJzbGlkZVZpc2libGVDbGFzcyIsInZpc2libGVTbGlkZXNJbmRleGVzIiwic2xpZGVQcm9ncmVzcyIsIm1pblRyYW5zbGF0ZSIsImF1dG9IZWlnaHQiLCJzbGlkZUJlZm9yZSIsInNsaWRlQWZ0ZXIiLCJ1cGRhdGVQcm9ncmVzcyIsIm11bHRpcGxpZXIiLCJ0cmFuc2xhdGVzRGlmZiIsIm1heFRyYW5zbGF0ZSIsImlzQmVnaW5uaW5nIiwiaXNFbmQiLCJ3YXNCZWdpbm5pbmciLCJ3YXNFbmQiLCJ1cGRhdGVTbGlkZXNDbGFzc2VzIiwiYWN0aXZlU2xpZGUiLCJyZWFsSW5kZXgiLCJzbGlkZUFjdGl2ZUNsYXNzIiwic2xpZGVOZXh0Q2xhc3MiLCJzbGlkZVByZXZDbGFzcyIsInNsaWRlRHVwbGljYXRlQWN0aXZlQ2xhc3MiLCJzbGlkZUR1cGxpY2F0ZU5leHRDbGFzcyIsInNsaWRlRHVwbGljYXRlUHJldkNsYXNzIiwic2xpZGVEdXBsaWNhdGVDbGFzcyIsIm5leHRTbGlkZSIsInByZXZTbGlkZSIsImVtaXRTbGlkZXNDbGFzc2VzIiwidXBkYXRlQWN0aXZlSW5kZXgiLCJuZXdBY3RpdmVJbmRleCIsInByZXZpb3VzSW5kZXgiLCJwcmV2aW91c1JlYWxJbmRleCIsInByZXZpb3VzU25hcEluZGV4Iiwibm9ybWFsaXplU2xpZGVJbmRleCIsInNraXAiLCJydW5DYWxsYmFja3NPbkluaXQiLCJ1cGRhdGVDbGlja2VkU2xpZGUiLCJzbGlkZUZvdW5kIiwiY2xpY2tlZFNsaWRlIiwiY2xpY2tlZEluZGV4Iiwic2xpZGVUb0NsaWNrZWRTbGlkZSIsInZpcnR1YWxUcmFuc2xhdGUiLCJjdXJyZW50VHJhbnNsYXRlIiwibWF0cml4IiwiY3VyVHJhbnNmb3JtIiwidHJhbnNmb3JtTWF0cml4IiwiY3VyU3R5bGUiLCJjdXJyZW50U3R5bGUiLCJXZWJLaXRDU1NNYXRyaXgiLCJNb3pUcmFuc2Zvcm0iLCJPVHJhbnNmb3JtIiwiTXNUcmFuc2Zvcm0iLCJtc1RyYW5zZm9ybSIsIm00MSIsIm00MiIsInNldFRyYW5zbGF0ZSIsImJ5Q29udHJvbGxlciIsIndyYXBwZXJFbCIsInByZXZpb3VzVHJhbnNsYXRlIiwidHJhbnNsYXRlVG8iLCJydW5DYWxsYmFja3MiLCJ0cmFuc2xhdGVCb3VuZHMiLCJpbnRlcm5hbCIsImFuaW1hdGluZyIsInByZXZlbnRJbnRlcmFjdGlvbk9uVHJhbnNpdGlvbiIsIm5ld1RyYW5zbGF0ZSIsIl93cmFwcGVyRWwkc2Nyb2xsVG8iLCJpc0giLCJvblRyYW5zbGF0ZVRvV3JhcHBlclRyYW5zaXRpb25FbmQiLCJzbGlkZVRvIiwiaW5kZXhBc051bWJlciIsImluaXRpYWxTbGlkZSIsIm5vcm1hbGl6ZWRUcmFuc2xhdGUiLCJub3JtYWxpemVkR2lyZCIsIm5vcm1hbGl6ZWRHcmlkTmV4dCIsImFsbG93U2xpZGVOZXh0IiwiYWxsb3dTbGlkZVByZXYiLCJ0cmFuc2l0aW9uU3RhcnQiLCJvblNsaWRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZCIsInNsaWRlVG9Mb29wIiwibmV3SW5kZXgiLCJsb29wZWRTbGlkZXMiLCJzbGlkZU5leHQiLCJpbmNyZW1lbnQiLCJsb29wUHJldmVudHNTbGlkZSIsImxvb3BGaXgiLCJfY2xpZW50TGVmdCIsInNsaWRlUHJldiIsInByZXZJbmRleCIsIm5vcm1hbGl6ZWRTbmFwR3JpZCIsInByZXZTbmFwIiwic2xpZGVSZXNldCIsInNsaWRlVG9DbG9zZXN0IiwiY3VycmVudFNuYXAiLCJzbGlkZXNQZXJWaWV3RHluYW1pYyIsInNsaWRlVG9JbmRleCIsImxvb3BDcmVhdGUiLCJsb29wRmlsbEdyb3VwV2l0aEJsYW5rIiwiYmxhbmtTbGlkZXNOdW0iLCJibGFua05vZGUiLCJzbGlkZUJsYW5rQ2xhc3MiLCJsb29wQWRkaXRpb25hbFNsaWRlcyIsInByZXBlbmRTbGlkZXMiLCJhcHBlbmRTbGlkZXMiLCJsb29wRGVzdHJveSIsImFwcGVuZFNsaWRlIiwicHJlcGVuZFNsaWRlIiwiYWRkU2xpZGUiLCJhY3RpdmVJbmRleEJ1ZmZlciIsImJhc2VMZW5ndGgiLCJzbGlkZXNCdWZmZXIiLCJjdXJyZW50U2xpZGUiLCJyZW1vdmVTbGlkZSIsInNsaWRlc0luZGV4ZXMiLCJpbmRleFRvUmVtb3ZlIiwicmVtb3ZlQWxsU2xpZGVzIiwib25Ub3VjaFN0YXJ0IiwidG91Y2hFdmVudHNEYXRhIiwib3JpZ2luYWxFdmVudCIsIiR0YXJnZXRFbCIsInRvdWNoRXZlbnRzVGFyZ2V0IiwiaXNUb3VjaEV2ZW50Iiwid2hpY2giLCJpc1RvdWNoZWQiLCJpc01vdmVkIiwibm9Td2lwaW5nQ2xhc3MiLCJzaGFkb3dSb290Iiwibm9Td2lwaW5nU2VsZWN0b3IiLCJpc1RhcmdldFNoYWRvdyIsIm5vU3dpcGluZyIsIl9fY2xvc2VzdEZyb20iLCJhc3NpZ25lZFNsb3QiLCJnZXRSb290Tm9kZSIsImNsb3Nlc3RFbGVtZW50IiwiYWxsb3dDbGljayIsInN3aXBlSGFuZGxlciIsInRhcmdldFRvdWNoZXMiLCJwYWdlWCIsInBhZ2VZIiwiZWRnZVN3aXBlRGV0ZWN0aW9uIiwiaU9TRWRnZVN3aXBlRGV0ZWN0aW9uIiwiZWRnZVN3aXBlVGhyZXNob2xkIiwiaU9TRWRnZVN3aXBlVGhyZXNob2xkIiwiYWxsb3dUb3VjaENhbGxiYWNrcyIsImlzU2Nyb2xsaW5nIiwic3RhcnRNb3ZpbmciLCJ0b3VjaFN0YXJ0VGltZSIsInN3aXBlRGlyZWN0aW9uIiwiYWxsb3dUaHJlc2hvbGRNb3ZlIiwiZm9jdXNhYmxlRWxlbWVudHMiLCJzaG91bGRQcmV2ZW50RGVmYXVsdCIsImFsbG93VG91Y2hNb3ZlIiwidG91Y2hTdGFydFByZXZlbnREZWZhdWx0IiwidG91Y2hTdGFydEZvcmNlUHJldmVudERlZmF1bHQiLCJpc0NvbnRlbnRFZGl0YWJsZSIsIm9uVG91Y2hNb3ZlIiwidGFyZ2V0VG91Y2giLCJjaGFuZ2VkVG91Y2hlcyIsInByZXZlbn
118RlZEJ5TmVzdGVkU3dpcGVyIiwidG91Y2hSZWxlYXNlT25FZGdlcyIsInRvdWNoQW5nbGUiLCJkaWZmWCIsImRpZmZZIiwic3FydCIsImF0YW4yIiwidG91Y2hNb3ZlU3RvcFByb3BhZ2F0aW9uIiwic3RhcnRUcmFuc2xhdGUiLCJhbGxvd01vbWVudHVtQm91bmNlIiwiZ3JhYkN1cnNvciIsInNldEdyYWJDdXJzb3IiLCJ0b3VjaFJhdGlvIiwiZGlzYWJsZVBhcmVudFN3aXBlciIsInJlc2lzdGFuY2VSYXRpbyIsInJlc2lzdGFuY2UiLCJmb2xsb3dGaW5nZXIiLCJmcmVlTW9kZSIsInZlbG9jaXRpZXMiLCJvblRvdWNoRW5kIiwiY3VycmVudFBvcyIsInRvdWNoRW5kVGltZSIsInRpbWVEaWZmIiwibGFzdENsaWNrVGltZSIsImZyZWVNb2RlTW9tZW50dW0iLCJsYXN0TW92ZUV2ZW50IiwidmVsb2NpdHlFdmVudCIsInZlbG9jaXR5IiwiZnJlZU1vZGVNaW5pbXVtVmVsb2NpdHkiLCJmcmVlTW9kZU1vbWVudHVtVmVsb2NpdHlSYXRpbyIsIm1vbWVudHVtRHVyYXRpb24iLCJmcmVlTW9kZU1vbWVudHVtUmF0aW8iLCJtb21lbnR1bURpc3RhbmNlIiwibmV3UG9zaXRpb24iLCJhZnRlckJvdW5jZVBvc2l0aW9uIiwibmVlZHNMb29wRml4IiwiZG9Cb3VuY2UiLCJib3VuY2VBbW91bnQiLCJmcmVlTW9kZU1vbWVudHVtQm91bmNlUmF0aW8iLCJmcmVlTW9kZU1vbWVudHVtQm91bmNlIiwiZnJlZU1vZGVTdGlja3kiLCJtb3ZlRGlzdGFuY2UiLCJjdXJyZW50U2xpZGVTaXplIiwibG9uZ1N3aXBlc01zIiwic3RvcEluZGV4IiwiZ3JvdXBTaXplIiwiX2luY3JlbWVudCIsInJhdGlvIiwibG9uZ1N3aXBlcyIsImxvbmdTd2lwZXNSYXRpbyIsInNob3J0U3dpcGVzIiwibmF2aWdhdGlvbiIsIm9uUmVzaXplIiwiYnJlYWtwb2ludHMiLCJzZXRCcmVha3BvaW50IiwiYXV0b3BsYXkiLCJydW5uaW5nIiwicGF1c2VkIiwib25DbGljayIsInByZXZlbnRDbGlja3MiLCJwcmV2ZW50Q2xpY2tzUHJvcGFnYXRpb24iLCJvblNjcm9sbCIsImR1bW15RXZlbnRBdHRhY2hlZCIsImR1bW15RXZlbnRMaXN0ZW5lciIsImF0dGFjaEV2ZW50cyIsInRvdWNoRXZlbnRzIiwibW92ZSIsInBhc3NpdmVMaXN0ZW5lcnMiLCJjYW5jZWwiLCJzaW11bGF0ZVRvdWNoIiwidXBkYXRlT25XaW5kb3dSZXNpemUiLCJkZXRhY2hFdmVudHMiLCJhZGRDbGFzc2VzIiwicmVzdWx0Q2xhc3NlcyIsInN1ZmZpeGVzIiwiY29udGFpbmVyTW9kaWZpZXJDbGFzcyIsImVtaXRDb250YWluZXJDbGFzc2VzIiwicmVtb3ZlQ2xhc3NlcyIsImJyZWFrcG9pbnRzQmFzZSIsInVuaXF1ZU5hdkVsZW1lbnRzIiwicHJlbG9hZEltYWdlcyIsInVwZGF0ZU9uSW1hZ2VzUmVhZHkiLCJ3cmFwcGVyQ2xhc3MiLCJfZW1pdENsYXNzZXMiLCJkZXNjcmlwdG9yIiwicHJvdG90eXBlcyIsIm1vZHVsYXIiLCJ1c2VQYXJhbXMiLCJpbnN0YW5jZVBhcmFtcyIsIm1vZHVsZU5hbWUiLCJ1c2VNb2R1bGVzIiwibW9kdWxlc1BhcmFtcyIsIm1vZHVsZVBhcmFtcyIsIm1vZHVsZUV2ZW50TmFtZSIsImV2ZW50c0VtaXR0ZXIiLCJtb3ZpbmciLCJpc0xvY2tlZCIsImN1cnNvciIsInVuc2V0R3JhYkN1cnNvciIsIm1hbmlwdWxhdGlvbiIsIl9zd2lwZXIkbG9vcGVkU2xpZGVzIiwiYnJlYWtwb2ludCIsImdldEJyZWFrcG9pbnQiLCJjdXJyZW50QnJlYWtwb2ludCIsImJyZWFrcG9pbnRPbmx5UGFyYW1zIiwicGFyYW1WYWx1ZSIsImJyZWFrcG9pbnRQYXJhbXMiLCJvcmlnaW5hbFBhcmFtcyIsIndhc011bHRpUm93IiwiaXNNdWx0aVJvdyIsIndhc0VuYWJsZWQiLCJkaXJlY3Rpb25DaGFuZ2VkIiwibmVlZHNSZUxvb3AiLCJjaGFuZ2VEaXJlY3Rpb24iLCJpc0VuYWJsZWQiLCJjb250YWluZXJFbCIsImN1cnJlbnRIZWlnaHQiLCJwb2ludHMiLCJwb2ludCIsIm1pblJhdGlvIiwiX3BvaW50cyRpIiwid2FzTG9ja2VkIiwibGFzdFNsaWRlUG9zaXRpb24iLCJsb2FkSW1hZ2UiLCJpbWFnZUVsIiwic2l6ZXMiLCJjaGVja0ZvckNvbXBsZXRlIiwiaW1hZ2VzVG9Mb2FkIiwiZXh0ZW5kZWREZWZhdWx0cyIsIlN3aXBlciIsInN3aXBlcnMiLCJuZXdQYXJhbXMiLCJtb2R1bGVQYXJhbU5hbWUiLCJkZXNrdG9wIiwic3dpcGVyUGFyYW1zIiwicGFzc2VkUGFyYW1zIiwidG91Y2hFdmVudHNUb3VjaCIsInRvdWNoRXZlbnRzRGVza3RvcCIsImNsaWNrVGltZW91dCIsIkNvbnN0cnVjdG9yIiwiX3Byb3RvIiwic2V0UHJvZ3Jlc3MiLCJnZXRTbGlkZUNsYXNzZXMiLCJzbGlkZUVsIiwidXBkYXRlcyIsInNwdiIsImJyZWFrTG9vcCIsInRyYW5zbGF0ZVZhbHVlIiwibmV3RGlyZWN0aW9uIiwibmVlZFVwZGF0ZSIsImN1cnJlbnREaXJlY3Rpb24iLCJnZXRXcmFwcGVyU2VsZWN0b3IiLCJnZXRXcmFwcGVyIiwiZGVsZXRlSW5zdGFuY2UiLCJjbGVhblN0eWxlcyIsImV4dGVuZERlZmF1bHRzIiwibmV3RGVmYXVsdHMiLCJpbnN0YWxsTW9kdWxlIiwicHJvdG90eXBlR3JvdXAiLCJwcm90b01ldGhvZCIsIk5hdmlnYXRpb24iLCJ0b2dnbGVFbCIsImRpc2FibGVkQ2xhc3MiLCJfc3dpcGVyJG5hdmlnYXRpb24iLCIkbmV4dEVsIiwiJHByZXZFbCIsImxvY2tDbGFzcyIsIm9uUHJldkNsaWNrIiwib25OZXh0Q2xpY2siLCJfc3dpcGVyJG5hdmlnYXRpb24yIiwiaGlkZU9uQ2xpY2siLCJoaWRkZW5DbGFzcyIsInRvRWRnZSIsImZyb21FZGdlIiwiX3N3aXBlciRuYXZpZ2F0aW9uMyIsIl9zd2lwZXIkbmF2aWdhdGlvbjQiLCJ0YXJnZXRFbCIsInBhZ2luYXRpb24iLCJjbGlja2FibGUiLCJQYWdpbmF0aW9uIiwidG90YWwiLCJwYWdpbmF0aW9uVHlwZSIsImJ1bGxldHMiLCJmaXJzdEluZGV4IiwibWlkSW5kZXgiLCJkeW5hbWljQnVsbGV0cyIsImJ1bGxldFNpemUiLCJkeW5hbWljTWFpbkJ1bGxldHMiLCJkeW5hbWljQnVsbGV0SW5kZXgiLCJidWxsZXRBY3RpdmVDbGFzcyIsImJ1bGxldCIsIiRidWxsZXQiLCJidWxsZXRJbmRleCIsIiRmaXJzdERpc3BsYXllZEJ1bGxldCIsIiRsYXN0RGlzcGxheWVkQnVsbGV0IiwiZHluYW1pY0J1bGxldHNMZW5ndGgiLCJidWxsZXRzT2Zmc2V0Iiwib2Zmc2V0UHJvcCIsImN1cnJlbnRDbGFzcyIsImZvcm1hdEZyYWN0aW9uQ3VycmVudCIsInRvdGFsQ2xhc3MiLCJmb3JtYXRGcmFjdGlvblRvdGFsIiwicHJvZ3Jlc3NiYXJEaXJlY3Rpb24iLCJwcm9ncmVzc2Jhck9wcG9zaXRlIiwic2NhbGUiLCJzY2FsZVgiLCJzY2FsZVkiLCJwcm9ncmVzc2JhckZpbGxDbGFzcyIsInJlbmRlckN1c3RvbSIsInBhZ2luYXRpb25IVE1MIiwibnVtYmVyT2ZCdWxsZXRzIiwicmVuZGVyQnVsbGV0IiwiYnVsbGV0Q2xhc3MiLCJidWxsZXRFbGVtZW50IiwicmVuZGVyRnJhY3Rpb24iLCJyZW5kZXJQcm9ncmVzc2JhciIsImNsaWNrYWJsZUNsYXNzIiwibW9kaWZpZXJDbGFzcyIsInByb2dyZXNzYmFyT3Bwb3NpdGVDbGFzcyIsImFjdGl2ZUluZGV4Q2hhbmdlIiwic25hcEluZGV4Q2hhbmdlIiwic2xpZGVzTGVuZ3RoQ2hhbmdlIiwic25hcEdyaWRMZW5ndGhDaGFuZ2UiLCJGYWRlIiwiJHNsaWRlRWwiLCJ0eCIsInR5Iiwic2xpZGVPcGFjaXR5IiwiZmFkZUVmZmVjdCIsIm
118Nyb3NzRmFkZSIsImV2ZW50VHJpZ2dlcmVkIiwidHJpZ2dlckV2ZW50cyIsImJlZm9yZUluaXQiLCJvdmVyd3JpdGVQYXJhbXMiLCJBdXRvcGxheSIsIiRhY3RpdmVTbGlkZUVsIiwiYXV0b3BsYXlSZXN1bHQiLCJyZXZlcnNlRGlyZWN0aW9uIiwic3RvcE9uTGFzdFNsaWRlIiwicGF1c2UiLCJ3YWl0Rm9yVHJhbnNpdGlvbiIsIm9uVmlzaWJpbGl0eUNoYW5nZSIsInZpc2liaWxpdHlTdGF0ZSIsIm9uTW91c2VFbnRlciIsImRpc2FibGVPbkludGVyYWN0aW9uIiwib25Nb3VzZUxlYXZlIiwiYXR0YWNoTW91c2VFdmVudHMiLCJwYXVzZU9uTW91c2VFbnRlciIsImRldGFjaE1vdXNlRXZlbnRzIiwiYmVmb3JlVHJhbnNpdGlvblN0YXJ0Iiwic2xpZGVyRmlyc3RNb3ZlIiwidG91Y2hFbmQiLCJTY3JvbGxiYXIiLCJzY3JvbGxiYXIiLCJkcmFnU2l6ZSIsInRyYWNrU2l6ZSIsIiRkcmFnRWwiLCJuZXdTaXplIiwiZGl2aWRlciIsIm1vdmVEaXZpZGVyIiwiZ2V0UG9pbnRlclBvc2l0aW9uIiwiY2xpZW50WCIsImNsaWVudFkiLCJzZXREcmFnUG9zaXRpb24iLCJwb3NpdGlvblJhdGlvIiwiZHJhZ1N0YXJ0UG9zIiwib25EcmFnU3RhcnQiLCJkcmFnVGltZW91dCIsIm9uRHJhZ01vdmUiLCJvbkRyYWdFbmQiLCJzbmFwT25SZWxlYXNlIiwiZW5hYmxlRHJhZ2dhYmxlIiwiYWN0aXZlTGlzdGVuZXIiLCJkaXNhYmxlRHJhZ2dhYmxlIiwiJHN3aXBlckVsIiwiZHJhZ0NsYXNzIiwiZHJhZ0VsIiwiZHJhZ2dhYmxlIiwiRWZmZWN0RmFkZSIsIkNhcm91c2VsIiwiY2Fyb3VzZWxFbCIsImNhcm91c2VsQ29tcG9uZW50V3JhcHBlckRpdiIsImNhcm91c2VsQnVsbGV0c0VsIiwiY2Fyb3VzZWxUYWJzRWwiLCJ1c2VUYWJCdXR0b25zIiwidGFic2Nyb2xsIiwiaXNQYWlucG9pbnQiLCJpc0JNSUNhcmQiLCJyZWZlcmVuY2VzIiwicmVmZXJlbmNlc0VsZW1lbnQiLCJhZGp1c3RhYmxlQ29uZmlnIiwic2xpZGVybW9kZSIsImF1dG9zbGlkZWl0ZW1zIiwic2xpZGVzYW1vdW50cGVyc2NyZWVuIiwibW9tZW50dW0iLCJzdGlja3kiLCJ1cGRhdGVSZWZlcmVuY2UiLCJpc1JlZk9wZW4iLCJjbG9uZWRSZWYiLCJoYW5kbGVCTUlDYXJkU2xpZGVDaGFuZ2UiLCJzbGlkZXIiLCJvbGRJbmRleCIsInNsaWRlckVsIiwiY2VudGVyQWN0aXZlVGFiQmFja3JvdW5kIiwiYWN0aXZlQnV0dG9uIiwiYWN0aXZlQnV0dG9uUmVjdCIsImNvbnRhaW5lclJlY3QiLCJoYW5kbGVUYWJCdXR0b25DbGljayIsInJlZnJlc2hTd2lwZXIiLCJtYWtlQWxsU2xpZGVzU2FtZUhlaWdodCIsIm1heEhlaWdodE9mU2xpZGUiLCJpZnJhbWUiLCJtYWtlVmlkZW9zU2xpZGVzU3RvcHBhYmxlIiwidGFiQnV0dG9ucyIsImFjdGl2ZVRhYiIsImN1cnJlbnRJbmRleCIsImlubGluZSIsImFkZEV2ZW50bGlzdGVuZXJzRm9yVGFiQnV0dG9ucyIsImJ0biIsImFjdGl2YXRlVGFiQnV0dG9uIiwiVlVFX0NPTVBPTkVOVFNfQUVNX0NPTVBPTkVOVFNfTUFQIiwiVnVlSXNvdG9wZSIsImFlbUNvbXBvbmVudCIsImFlbUNvbXBvbmVudENsYXNzIiwiQlVSR0VSIiwiQ0xPU0VfQlVSR0VSIiwiTkFWSUdBVElPTiIsIk1FR0FNRU5VIiwiVE9HR0xFX01FTlUiLCJIT1JJWk9OVEFMX05BViIsIk1FTlVJVEVNUyIsIkhPU1BJVEFMSVRZQ1RBIiwiTEFOR1VBR0VfRFJPUERPV04iLCJTRUFSQ0hfRFJPUERPV04iLCJ0b2dnbGVNZW51RWxMaXN0IiwiYnVyZ2VyRWwiLCJjbG9zZUJ1cmdlckVsIiwibmF2aWdhdGlvbkVsIiwibWVnYW1lbnVFbCIsImFjdGl2ZU5hdkVsIiwibWVudUl0ZW1zRWwiLCJob3NwaXRhbGl0eUN0YUVsIiwiaG9yaXpvbnRhbE5hdkhlYWRlciIsImxhbmd1YWdlRHJvcGRvd25FbCIsInNlYXJjaERyb3Bkb3duRWwiLCJvcHRIZWFkZXIiLCJoaWRlT3Blbkl0ZW1zIiwiY2xvc2VMYW5ndWFnZURyb3Bkb3duIiwiY2xvc2VTZWFyY2hEcm9wZG93biIsImNsb3NlSGVhZGVyRHJvcGRvd25zIiwiY2xvc2VIZWFkZXJEcm9wZG93bnNPbk1lZ2FtZW51T3BlbiIsIndhdGNoTWVnYW1lbnVPcGVuQ2xhc3MiLCJhdHRyaWJ1dGVGaWx0ZXIiLCJjbG9zZU5hdiIsInRvZ2dsZU5hdiIsIm5leHRBcmVhSGlkZGVuVmFsdWUiLCJpc0Nsb3NlIiwidG9nZ2xlTWVudSIsImRhdGFDb21wb25lbnQiLCJuZXh0QXJpYUhpZGRlblZhbHVlIiwibW92ZUVsZW1lbnQiLCJob3NwaXRhbGl0eUN0YU1vYmlsZUVsIiwiaGFuZGxlSG9yaXpvbnRhbE5hdiIsImJhbm5lck5hdiIsImhlcm9CYW5uZXIiLCJpc0hvbWVQYWdlIiwibWVudUhvcml6b250YWwiLCJoZWFkZXJIZWlnaHQiLCJob3Jpem9udGFsTmF2IiwiaG9yaXpvbnRhbE5hdkhlaWdodCIsIkhFQURFUiIsIkhFQURFUl9TQ1JPTEwiLCJIRVJPIiwiaGVhZGVyIiwiaGVybyIsIndpbmRvd0hlaWdodCIsImlzU2VjdGlvblZpc2libGUiLCJleHRyYVBvcyIsImlzQW5pbWF0aW9uQWN0aXZlIiwic3RhcnRIZWFkZXJPblNjcm9sbEFuaW1hdGlvbiIsInN0YXJ0QmxvY2tBbmltYXRpb24iLCJpbml0QW5pbWF0aW9ucyIsImNsb3NlTW9kYWxCdXR0b25MaXN0IiwicGFnZU1vZGFscyIsInRyaWdnZXJWYWx1ZSIsImNvbmRpdGlvblZhbHVlIiwiQkFOTkVSIiwiQkFOTkVSX09WRVJMQVkiLCJTVEVQREVDSyIsImJhbm5lciIsImJhbm5lck92ZXJsYXkiLCJzdGVwRGVjayIsImFkanVzdEJhbm5lckhlaWdodCIsImJhbm5lck92ZXJsYXlIZWlnaHQiLCJtYXhIZWlnaHQiLCJjaGVja0ZvclN0ZXBEZWNrIiwiSGNwTG9jYXRvciIsIkZPT1RFUiIsIkNPT0tJRV9CVE4iLCJMQU5HX05BViIsImZvb3RlckVsIiwiY29va2llQnRuIiwibGFuZ05hdiJdLCJzb3VyY2VSb290IjoiIn0=

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.