@digitransit-component/digitransit-component-autosuggest 1.8.9 → 1.8.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -42,5 +42,5 @@ function c(e,c,n,o){var t={m:["eine Minute","einer Minute"],h:["eine Stunde","ei
42
42
  /*!************************!*\
43
43
  !*** external "react" ***!
44
44
  \************************/
45
- /*! no static exports found */function(c,n){c.exports=e}})},e.exports=n(g.default)})),Qe=(Ve=Ke)&&Ve.__esModule&&Object.prototype.hasOwnProperty.call(Ve,"default")?Ve.default:Ve;function Je(e){var c=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,o=ne(e);if(c){var t=ne(this).constructor;n=Reflect.construct(o,arguments,t)}else n=o.apply(this,arguments);return ce(this,n)}}Pe.locale("en"),W.default.init({fallbackLng:"fi",defaultNS:"translation",interpolation:{escapeValue:!1}});"production"!==process.env.NODE_ENV&&N.default.node;var Ze=function(e){if(e&&e.GTFS.platform){var c=e.GTFS,n=c.modes,o=c.platform;return[n&&"RAIL"===n[0]?W.default.t("track"):W.default.t("platform"),o]}};function $e(e){if("FutureRoute"!==e.type){if("SelectFromMap"===e.type)return["",W.default.t("select-from-map")];if("CurrentLocation"===e.type)return["",W.default.t("use-own-position")];if("SelectFromOwnLocations"===e.type)return["",W.default.t("select-from-own-locations")];var c,n=oe(Ae(e.properties,!0),2),o=n[0],t=n[1];if(e.properties.layer.toLowerCase().includes("bikerental")||e.properties.layer.toLowerCase().includes("bikestation"))return[c=W.default.t("bikerentalstation"),o,void 0,e.properties.labelId];if("bikepark"===e.properties.layer)return[c=W.default.t("bikepark"),o,void 0,void 0];if("carpark"===e.properties.layer)return[c=W.default.t("carpark"),o,void 0,void 0];if(e.properties.mode)c=W.default.t(e.properties.mode.toLowerCase().replace("favourite",""));else{var a=e.properties.layer.replace("route-","").toLowerCase().replace("favourite","");c=W.default.t(a)}if(e.properties.id&&("stop"===e.properties.layer||"station"===e.properties.layer)){var i,r=de(e.properties),M=null===(i=e.properties.addendum)||void 0===i?void 0:i.GTFS.modes,s=Ze(e.properties.addendum);return[c,ue(o,r),t,r,M,s]}if("favouriteStop"===e.properties.layer||"favouriteStation"===e.properties.layer){var l=e.properties,u=l.address,p=l.code;return[c,u?ue(u.split(",")[0],p):o,t,p,void 0,Ze(e.properties.addendum)]}return[c,o,t]}var d=e.properties,b=d.origin,A=d.destination,f=b.locality?", ".concat(b.locality," foobar"):"",z=A.locality?", ".concat(A.locality):"",h=b.name,O=A.name;return[W.default.t("future-route"),"".concat(W.default.t("origin")," ").concat(h).concat(f," ").concat(W.default.t("destination")," ").concat(O).concat(z),e.translatedText]}function ec(e){var c=Pe.unix(e.properties.time),n=e.properties.arriveBy?W.default.t("arrival"):W.default.t("departure");return n=c.isSame(Pe(),"day")?"".concat(n," ").concat(W.default.t("today-at")):c.isSame(Pe().add(1,"day"),"day")?"".concat(n," ").concat(W.default.t("tomorrow-at")):"".concat(n," ").concat(c.format("dd D.M.")),n="".concat(n," ").concat(Pe(c).format("HH:mm"))}var cc=function(e){$(n,e);var c=Je(n);function n(e){var o;return K(this,n),(o=c.call(this,e)).componentDidUpdate=function(){W.default.language!==o.props.lang&&W.default.changeLanguage(o.props.lang)},o.UNSAFE_componentWillReceiveProps=function(e){e.value===o.state.value||o.state.editing||o.setState({value:e.value})},o.onChange=function(e,c){var n=c.newValue,t=c.method,a={value:o.fInput||n||"",renderMobileSearch:o.props.isMobile};if(o.fInput=null,o.state.editing){if("enter"!==t||o.state.valid){if(o.state.typingTimer&&clearTimeout(o.state.typingTimer),"type"===t){var i=setTimeout((function(){o.setState({typing:!1})}),1e3);a.typingTimer=i,a.typing=!0}o.setState(a)}}else a.editing=!0,o.setState(a,(function(){return o.fetchFunction({value:n||""})}))},o.onBlur=function(){o.state.renderMobileSearch||(o.state.editing&&o.input.focus(),o.setState({editing:!1,renderMobileSearch:!1,value:o.props.value}))},o.onSelected=function(e,c){if(o.state.valid){if("SelectFromOwnLocations"===c.suggestion.type)return void o.setState({sources:["Favourite","Back"],ownPlaces:!0,pendingSelection:c.suggestion.type,value:""},(function(){o.fetchFunction({value:""})}));if("back"===c.suggestion.type||"FutureRoute"===c.suggestion.type)return void o.setState({sources:o.props.sources,ownPlaces:!1,pendingSelection:c.suggestion.type,suggestionIndex:c.suggestionIndex},(function(){o.fetchFunction({value:""})}));o.selectionDone=!0,o.setState({editing:!1,value:c.suggestionValue},(function(){o.input.blur(),o.props.handleViaPoints?o.props.handleViaPoints(c.suggestion,c.suggestionIndex):o.props.onSelect(c.suggestion,o.props.id),o.setState({renderMobileSearch:!1,sources:o.props.sources,ownPlaces:!1,suggestions:[]},(function(){o.selectionDone=!1})),!o.props.focusChange||o.props.isMobile&&!o.props.isEmbedded||o.props.focusChange(),o.props.isMobile&&o.closeMobileSearch()}))}else o.setState((function(e){return{pendingSelection:e.value}}),(function(){return o.checkPendingSelection()}))},o.onSuggestionsClearRequested=function(){o.setState({suggestions:[],sources:o.props.sources,ownPlaces:!1,editing:!1})},o.getSuggestionValue=function(e){return"SelectFromOwnLocations"===e.type||"back"===e.type?"":function(e){var c=Ae(e,!0);switch(e.layer){case"selectFromMap":case"currentPosition":case"ownLocations":case"back":return c[1]||c[0];case"favouriteBikeRentalStation":case"favouritePlace":return c[0];default:return c.length>1&&""!==c[1]?c.join(", "):c[1]||c[0]}}(e.properties)},o.checkPendingSelection=function(){"SelectFromOwnLocations"!==o.state.pendingSelection&&"back"!==o.state.pendingSelection||!o.state.valid?o.state.pendingSelection&&o.state.valid&&o.setState({pendingSelection:null,editing:!1},(function(){o.state.suggestions.length&&(o.input.blur(),o.props.onSelect(o.state.suggestions[o.state.suggestionIndex],o.props.id),o.props.isMobile&&o.closeMobileSearch(),!o.props.focusChange||o.props.isMobile&&!o.props.isEmbedded||o.props.focusChange())})):o.setState({pendingSelection:null,editing:!0},(function(){o.input.focus()}))},o.clearButton=function(){return g.default.createElement("button",{type:"button",className:He["clear-input"],onClick:o.clearInput,"aria-label":W.default.t("clear-button-label")},g.default.createElement(x.default,{img:"close",color:o.props.color}))},o.fetchFunction=function(e){var c=e.value,n=e.cleanExecuted;return o.setState({valid:!1,cleanExecuted:n||!1},(function(){if(!o.selectionDone){var e,n=I.default(o.props.targets)||o.props.targets.includes("Locations");o.state.ownPlaces?(e=["Locations"],(I.default(o.props.targets)||o.props.targets.includes("Stops"))&&e.push("Stops"),(I.default(o.props.targets)||o.props.targets.includes("BikeRentalStations"))&&e.push("BikeRentalStations")):I.default(o.props.targets)||(e=V(o.props.targets),n&&!o.props.isMobile&&(I.default(o.props.sources)||o.props.sources.includes("Favourite"))&&e.push("SelectFromOwnLocations")),function(e,c,n,o,t,a,i,r,M,s){r(null),Te(e,c,n,o,t,a,i,r,M,s)}(e,o.state.sources&&o.state.sources.filter((function(e){return!(n&&"Favourite"===e&&!o.state.ownPlaces&&!o.props.isMobile)})),o.props.transportMode,o.props.searchContext,o.props.filterResults,o.props.geocodingSize,{input:c||""},(function(e){if(null!=e){var n=(e.results||[]).filter((function(e){return"FutureRoute"!==e.type||"FutureRoute"===e.type&&e.properties.time>Pe().unix()})).map((function(e){if("CurrentLocation"===e.type||"SelectFromMap"===e.type||"SelectFromOwnLocations"===e.type||"back"===e.type){var c=j({},e);return c.properties.labelId=W.default.t(e.properties.labelId),c}return e}));c!==o.state.value&&c!==o.state.pendingSelection&&"SelectFromOwnLocations"!==o.state.pendingSelection&&"back"!==o.state.pendingSelection&&"FutureRoute"!==o.state.pendingSelection||o.setState({valid:!0,suggestions:n},(function(){return o.checkPendingSelection()}))}}),o.props.pathOpts,o.props.refPoint)}}))},o.clearInput=function(){var e={editing:!0,value:"",sources:o.props.sources,ownPlaces:!1};o.setState(e,(function(){return o.fetchFunction({value:"",cleanExecuted:!0})})),o.props.onClear&&o.props.onClear(o.props.id),o.input.focus()},o.inputClicked=function(e){if(o.input.focus(),o.props.isMobile&&o.props.lock(),!o.state.editing){var c={editing:!0,pendingSelection:null,renderMobileSearch:o.props.isMobile},n={editing:!0,pendingSelection:null,value:e};o.state.suggestions.length?(o.fetchFunction({value:o.state.value}),o.setState(c)):"object"!==F(e)&&e?o.setState(n,(function(){return o.fetchFunction({value:e})})):o.setState(c,(function(){return o.fetchFunction({value:o.state.value})}))}},o.storeInputReference=function(e){null!==e&&(o.input=e.input,o.props.storeRef&&o.props.storeRef(e.input))},o.fillInput=function(e){o.fInput=e.properties.name;var c={editing:!0,value:e.properties.name,checkPendingSelection:e,valid:!0};o.setState(c),o.fetchFunction({value:e.properties.name}),o.input.focus()},o.renderItem=function(e){var c="FutureRoute"===e.type?j({},e,{translatedText:ec(e)}):e,n=$e(e);return g.default.createElement(P.default,{item:c,content:n,loading:!o.state.valid,isMobile:o.props.isMobile,ariaFavouriteString:W.default.t("favourite"),color:o.props.color,accessiblePrimaryColor:o.props.accessiblePrimaryColor,fillInput:o.fillInput,fontWeights:o.props.fontWeights,modeIconColors:o.props.modeIconColors,modeSet:o.props.modeSet})},o.closeMobileSearch=function(){o.props.unlock(),o.setState({renderMobileSearch:!1,value:o.props.value},(function(){window.scrollTo(0,o.state.scrollY),o.onSuggestionsClearRequested()}))},o.keyDown=function(e){if(!o.selectionDone){var c=e.key;if("Escape"===c&&o.setState({editing:!1}),o.state.editing)return"Enter"===c&&""!==o.state.value&&o.setState({pendingSelection:!0},(function(){o.fetchFunction({value:o.state.value})})),void o.inputClicked();if("Enter"!==c&&"ArrowDown"!==c||""!==o.state.value){if("ArrowDown"===c&&""!==o.state.value){var n={editing:!0,value:o.state.value};o.setState(n,(function(){return o.fetchFunction({value:o.state.value})}))}o.state.editing||o.setState({editing:!0}),"Tab"===c&&o.onBlur()}else o.clearInput()}},o.suggestionAsAriaContent=function(){var e=[],c=o.state.suggestions[0];return c&&(c.type&&c.type.includes("Favourite")&&e.push(W.default.t("favourite")),e=e.concat($e(o.state.suggestions[0]))),V(new Set(e)).join(" - ")},o.clearOldSearches=function(){var e=o.props.searchContext,c=e.context,n=e.clearOldSearches,t=e.clearFutureRoutes;c&&n&&(n(c),t&&t(c),o.fetchFunction({value:o.state.value}))},o.isOriginDestinationOrViapoint=function(){return"origin"===o.props.id||"destination"===o.props.id||"via-point"===o.props.id||"origin-stop-near-you"===o.props.id},o.onFocus=function(){["Valittu sijainti","Nykyinen sijaintisi","Current position","Selected location","Vald position","Använd min position","Min position","Käytä nykyistä sijaintia","Use current location","Your current location"].includes(o.state.value)&&o.clearInput();var e=window.pageYOffset;return o.setState({scrollY:e})},Pe.tz.setDefault(e.timeZone),Pe.locale(e.lang),o.state={value:e.value,suggestions:[],editing:!1,valid:!0,renderMobileSearch:!1,sources:e.sources,ownPlaces:!1,typingTimer:null,typing:!1,pendingSelection:null,suggestionIndex:0,cleanExecuted:!1,scrollY:0},Object.keys(xe).forEach((function(e){W.default.addResourceBundle(e,"translation",xe[e])})),o}return J(n,[{key:"shouldComponentUpdate",value:function(e,c){return!C.default(c,this.state)||!C.default(e,this.props)}},{key:"render",value:function(){var e=this;W.default.language!==this.props.lang&&W.default.changeLanguage(this.props.lang);var c=this.state,n=c.value,o=c.suggestions,t=c.renderMobileSearch,a=c.cleanExecuted,i={placeholder:this.props.translatedPlaceholder?this.props.translatedPlaceholder:W.default.t(this.props.placeholder),value:n,onChange:this.onChange,onBlur:this.onBlur,className:"".concat(He.input," ").concat(this.props.isMobile&&this.props.transportMode?He.thin:""," ").concat(He[this.props.id]||""," ").concat(this.state.value?He.hasValue:""," ").concat(this.props.inputClassName),onKeyDown:this.keyDown,required:this.props.required},r=this.props.id.replace("searchfield-",""),M=this.props.ariaLabel||W.default.t(r);M=M.replace("searchfield-","");var s=this.props.required?"".concat(W.default.t("required"),"."):"",l=this.props.isMobile?W.default.t("search-autosuggest-label-mobile"):W.default.t("search-autosuggest-label-desktop"),u=W.default.t("search-autosuggest-len",{count:o.length}),p=function(){return e.suggestionAsAriaContent()||e.props.value?W.default.t("search-current-suggestion",{selection:e.suggestionAsAriaContent()||e.props.value}):""};return g.default.createElement(g.default.Fragment,null,g.default.createElement("span",{className:He["sr-only"],role:"alert"},!this.state.typing&&this.state.editing&&"".concat(u," ").concat(p())),this.props.isMobile&&g.default.createElement(Ge,{searchOpen:t,appElement:this.props.appElement,clearOldSearches:this.clearOldSearches,id:this.props.id,clearInput:this.clearInput,value:this.state.value,suggestions:[].concat(V(o),[{type:"clear-search-history",labelId:W.default.t("clear-search-history")}]),inputProps:j({},i,{placeholder:this.isOriginDestinationOrViapoint()?W.default.t("address-place-or-business"):i.placeholder}),fetchFunction:this.fetchFunction,onSuggestionsClearRequested:this.onSuggestionsClearRequested,getSuggestionValue:this.getSuggestionValue,renderSuggestion:this.renderItem,closeHandle:this.closeMobileSearch,ariaLabel:s.concat(" ").concat(M).concat(" ").concat(p()),label:this.props.mobileLabel?this.props.mobileLabel:W.default.t(this.props.id),onSuggestionSelected:this.onSelected,dialogHeaderText:W.default.t("delete-old-searches-header"),dialogPrimaryButtonText:W.default.t("delete"),dialogSecondaryButtonText:W.default.t("cancel"),clearInputButtonText:W.default.t("clear-button-label"),focusInput:a,color:this.props.color,hoverColor:this.props.hoverColor,accessiblePrimaryColor:this.props.accessiblePrimaryColor,fontWeights:this.props.fontWeights,showScroll:this.props.showScroll}),!t&&g.default.createElement("div",{className:_.default(He["autosuggest-input-container"],He[this.props.id]),style:{"--color":"".concat(this.props.color),"--hover-color":"".concat(this.props.hoverColor)}},this.props.icon&&g.default.createElement("div",{className:_.default(He["autosuggest-input-icon"],He[this.props.id],this.props.inputClassName&&"".concat(this.props.inputClassName,"-input-icon"))},g.default.createElement(x.default,{img:"".concat(this.props.icon)})),g.default.createElement(T.default,{alwaysRenderSuggestions:this.state.editing,id:this.props.id,suggestions:o,onSuggestionsFetchRequested:this.fetchFunction,onSuggestionsClearRequested:this.onSuggestionsClearRequested,getSuggestionValue:this.getSuggestionValue,renderSuggestion:this.renderItem,inputProps:j({},i,{onFocus:this.onFocus}),focusInputOnSuggestionClick:!0,shouldRenderSuggestions:function(){return e.state.editing},highlightFirstSuggestion:!this.state.ownPlaces,theme:He,renderInputComponent:function(c){return g.default.createElement(g.default.Fragment,null,g.default.createElement("label",{className:He["sr-only"],htmlFor:e.props.id},p().concat(" ").concat(s).concat(" ").concat(M).concat(" ").concat(l)),g.default.createElement("input",Object.assign({"aria-label":p().concat(" ").concat(s).concat(" ").concat(M).concat(" ").concat(l),id:e.props.id,onClick:e.inputClicked,onKeyDown:e.keyDown},c)),e.state.value&&e.clearButton())},onSuggestionSelected:this.onSelected,ref:this.storeInputReference})))}}]),n}(g.default.Component);cc.defaultProps={autoFocus:!1,className:"",icon:void 0,value:"",transportMode:void 0,lang:"fi",sources:[],isMobile:!1,color:"#007ac9",hoverColor:"#0062a1",accessiblePrimaryColor:"#0074be",timeZone:"Europe/Helsinki",pathOpts:{routesPrefix:"linjat",stopsPrefix:"pysakit"},mobileLabel:void 0,inputClassName:"",translatedPlaceholder:void 0,fontWeights:{medium:500},modeIconColors:{"mode-bus":"#007ac9","mode-rail":"#8c4799","mode-tram":"#008151","mode-metro":"#ed8c00","mode-ferry":"#007A97","mode-citybike":"#f2b62d"},required:!1,modeSet:void 0,showScroll:!1},"production"!==process.env.NODE_ENV&&(cc.propTypes={appElement:N.default.string.isRequired,autoFocus:N.default.bool,className:N.default.string,icon:N.default.string,id:N.default.string.isRequired,placeholder:N.default.string.isRequired,translatedPlaceholder:N.default.string,value:N.default.string,searchContext:N.default.any.isRequired,ariaLabel:N.default.string,onSelect:N.default.func,transportMode:N.default.string,filterResults:N.default.func,geocodingSize:N.default.number,onClear:N.default.func,storeRef:N.default.func,handleViaPoints:N.default.func,focusChange:N.default.func,lang:N.default.string,sources:N.default.arrayOf(N.default.string),targets:N.default.arrayOf(N.default.string),isMobile:N.default.bool,color:N.default.string,hoverColor:N.default.string,accessiblePrimaryColor:N.default.string,timeZone:N.default.string,pathOpts:N.default.shape({routesPrefix:N.default.string,stopsPrefix:N.default.string}),mobileLabel:N.default.string,lock:N.default.func.isRequired,unlock:N.default.func.isRequired,refPoint:N.default.object,inputClassName:N.default.string,fontWeights:N.default.shape({medium:N.default.number}),modeIconColors:N.default.object,required:N.default.bool,modeSet:N.default.string,showScroll:N.default.bool,isEmbedded:N.default.bool});var nc,oc=(nc=cc,function(e){var c=Qe.useScrollLock(),n=c.lock,o=c.unlock;return g.default.createElement(nc,Object.assign({lock:n,unlock:o},e))});e.default=oc,Object.defineProperty(e,"__esModule",{value:!0})}));
46
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZGV2ZWxvcG1lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hcnJheUxpa2VUb0FycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5V2l0aG91dEhvbGVzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9ub25JdGVyYWJsZVNwcmVhZC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zZXRQcm90b3R5cGVPZi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0cy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9nZXRQcm90b3R5cGVPZi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5V2l0aEhvbGVzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL25vbkl0ZXJhYmxlUmVzdC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXRydS1lcS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWlzLWR1cGxpY2F0ZS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWhlbHBlcnMvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC11bmlxLWJ5LWxhYmVsL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZmlsdGVyLW1hdGNoaW5nLXRvLWlucHV0L2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtc2VyaWFsaXplL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWpzb24vaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1leGVjdXRlLXNlYXJjaC1pbW1pZGlhdGUvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9tb21lbnQtdGltZXpvbmUvbW9tZW50LXRpbWV6b25lLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21vbWVudC10aW1lem9uZS9pbmRleC5qcyIsIi4uL3NyYy9oZWxwZXJzL3RyYW5zbGF0aW9ucy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZpLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1pbmplY3QvZGlzdC9zdHlsZS1pbmplY3QuZXMuanMiLCIuLi9zcmMvaGVscGVycy9Nb2JpbGVTZWFyY2guanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGhzbC1maS9ob29rcy9saWIvaW5kZXguanMiLCIuLi9zcmMvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtbGFiZWwvaW5kZXguanMiLCIuLi9zcmMvaGVscGVycy93aXRoU2Nyb2xsTG9jay5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7XG4gICAgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBfdHlwZW9mKG9iaik7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcblxuICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcblxuICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHtcbiAgICBhcnIyW2ldID0gYXJyW2ldO1xuICB9XG5cbiAgcmV0dXJuIGFycjI7XG59IiwiaW1wb3J0IGFycmF5TGlrZVRvQXJyYXkgZnJvbSBcIi4vYXJyYXlMaWtlVG9BcnJheVwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICBpZiAoIW8pIHJldHVybjtcbiAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7XG4gIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pO1xuICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn0iLCJpbXBvcnQgYXJyYXlXaXRob3V0SG9sZXMgZnJvbSBcIi4vYXJyYXlXaXRob3V0SG9sZXNcIjtcbmltcG9ydCBpdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5XCI7XG5pbXBvcnQgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXlcIjtcbmltcG9ydCBub25JdGVyYWJsZVNwcmVhZCBmcm9tIFwiLi9ub25JdGVyYWJsZVNwcmVhZFwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikge1xuICByZXR1cm4gYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IG5vbkl0ZXJhYmxlU3ByZWFkKCk7XG59IiwiaW1wb3J0IGFycmF5TGlrZVRvQXJyYXkgZnJvbSBcIi4vYXJyYXlMaWtlVG9BcnJheVwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShhcnIpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikge1xuICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGl0ZXIpKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59IiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfTtcblxuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufSIsImltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZlwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGY7XG59IiwiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4uLy4uL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuaW1wb3J0IGFzc2VydFRoaXNJbml0aWFsaXplZCBmcm9tIFwiLi9hc3NlcnRUaGlzSW5pdGlhbGl6ZWRcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICByZXR1cm4gY2FsbDtcbiAgfVxuXG4gIHJldHVybiBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9O1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufSIsImltcG9ydCBhcnJheVdpdGhIb2xlcyBmcm9tIFwiLi9hcnJheVdpdGhIb2xlc1wiO1xuaW1wb3J0IGl0ZXJhYmxlVG9BcnJheUxpbWl0IGZyb20gXCIuL2l0ZXJhYmxlVG9BcnJheUxpbWl0XCI7XG5pbXBvcnQgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXlcIjtcbmltcG9ydCBub25JdGVyYWJsZVJlc3QgZnJvbSBcIi4vbm9uSXRlcmFibGVSZXN0XCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IG5vbkl0ZXJhYmxlUmVzdCgpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7XG4gIGlmICh0eXBlb2YgU3ltYm9sID09PSBcInVuZGVmaW5lZFwiIHx8ICEoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChhcnIpKSkgcmV0dXJuO1xuICB2YXIgX2FyciA9IFtdO1xuICB2YXIgX24gPSB0cnVlO1xuICB2YXIgX2QgPSBmYWxzZTtcbiAgdmFyIF9lID0gdW5kZWZpbmVkO1xuXG4gIHRyeSB7XG4gICAgZm9yICh2YXIgX2kgPSBhcnJbU3ltYm9sLml0ZXJhdG9yXSgpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkge1xuICAgICAgX2Fyci5wdXNoKF9zLnZhbHVlKTtcblxuICAgICAgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgX2QgPSB0cnVlO1xuICAgIF9lID0gZXJyO1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChfZCkgdGhyb3cgX2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIF9hcnI7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn0iLCIvKipcbiAqICBhY2NlcHQgZXF1YWxpdHkgb2Ygbm9uIG51bGxpc2ggdmFsdWVzXG4gKlxuICogQG5hbWUgdHJ1RXFcbiAqIEBwYXJhbSB7Qm9vbGVhbnxOdW1iZXJ8QmlnSW50fFN0cmluZ3xTeW1ib2x8T2JqZWN0fSB2YWwxIEZpcnN0IHZhbHVlIHRvIGJlIGNvbXBhcmVkXG4gKiBAcGFyYW0ge0Jvb2xlYW58TnVtYmVyfEJpZ0ludHxTdHJpbmd8U3ltYm9sfE9iamVjdH0gcGFyYW0yIFNlY29uZCB2YWx1ZSB0byBiZSBjb21wYXJlZFxuICogQHJldHVybnMge0Jvb2xlYW59IHRydWUvZmFsc2VcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC11dGlsLnRydUVxKCcyJywgJzInKTtcbiAqIC8vPXRydWVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJ1RXEodmFsMSwgdmFsMikge1xuICByZXR1cm4gdmFsMSAmJiB2YWwyICYmIHZhbDEgPT09IHZhbDI7XG59XG4iLCJpbXBvcnQgdHJ1RXEgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXRydS1lcSc7XG4vKipcbiAqIENoZWNrcyB0aGF0IGlzIGl0ZW1zIGR1cGxpY2F0ZVxuICpcbiAqIEBuYW1lIGlzRHVwbGljYXRlXG4gKiBAcGFyYW0ge09iamVjdH0gaXRlbTEgT2JqZWN0IGNvbnRhaW5pbmcgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKiB7XG4gKiAgcHJvcGVydGllcyB7XG4gKiAgICAgIGd0ZnNJZDogU3RyaW5nXG4gKiAgICAgIGdpZDogU3RyaW5nIGZyb20gZ2VvY29kZXJcbiAqICAgICAgbmFtZTogU3RyaW5nXG4gKiAgICAgIGxhYmVsOiBTdHJpbmdcbiAqICAgICAgIGFkZHJlc3M6IFN0cmluZ1xuICogICAgICBnZW9tZXRyeSB7XG4gKiAgICAgICAgIGNvb3JkaW5hdGVzIFtOdW1iZXIgbGF0LCBOdW1iZXIgbG9uXVxuICogICAgICB9XG4gKiAgfVxuICogfVxuICogQHBhcmFtIHtPYmplY3R9IGl0ZW0yIE9iamVjdCB3aXRoIHNhbWUgYXR0cmlidXRlcyBhcyBpdGVtMVxuICogQHJldHVybnMge0Jvb2xlYW59IHRydWUvZmFsc2VcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC11dGlsLmlzRHVwbGljYXRlKHBhcmFtMSwgcGFyYW0yKTtcbiAqIC8vPXRydWVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNEdXBsaWNhdGUoaXRlbTEsIGl0ZW0yKSB7XG4gIGNvbnN0IHByb3BzMSA9IGl0ZW0xLnByb3BlcnRpZXM7XG4gIGNvbnN0IHByb3BzMiA9IGl0ZW0yLnByb3BlcnRpZXM7XG5cbiAgaWYgKGl0ZW0xLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScgJiYgaXRlbTIudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJykge1xuICAgIGNvbnN0IG8xID0gcHJvcHMxLm9yaWdpbjtcbiAgICBjb25zdCBkMSA9IHByb3BzMS5kZXN0aW5hdGlvbjtcbiAgICBjb25zdCBvMiA9IHByb3BzMi5vcmlnaW47XG4gICAgY29uc3QgZDIgPSBwcm9wczIuZGVzdGluYXRpb247XG5cbiAgICBjb25zdCBuYW1lMSA9IGAke28xLm5hbWV9Ly8ke28xLmxvY2FsaXR5fS8vJHtkMS5uYW1lfS8vJHtkMS5sb2NhbGl0eX1gO1xuICAgIGNvbnN0IG5hbWUyID0gYCR7bzIubmFtZX0vLyR7bzIubG9jYWxpdHl9Ly8ke2QyLm5hbWV9Ly8ke2QyLmxvY2FsaXR5fWA7XG5cbiAgICByZXR1cm4gbmFtZTEgPT09IG5hbWUyO1xuICB9XG4gIGlmIChpdGVtMS50eXBlID09PSAnRnV0dXJlUm91dGUnIHx8IGl0ZW0yLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKFxuICAgICgocHJvcHMxLmxheWVyID09PSAnYmlrZVJlbnRhbFN0YXRpb24nIHx8XG4gICAgICBwcm9wczEubGF5ZXIgPT09ICdmYXZvdXJpdGVCaWtlUmVudGFsU3RhdGlvbicpICYmXG4gICAgICAocHJvcHMyLmxheWVyID09PSAnYmlrZVJlbnRhbFN0YXRpb24nIHx8XG4gICAgICAgIHByb3BzMi5sYXllciA9PT0gJ2Zhdm91cml0ZUJpa2VSZW50YWxTdGF0aW9uJykpIHx8XG4gICAgKHByb3BzMS5sYXllciA9PT0gJ2Jpa2VzdGF0aW9uJyAmJiBwcm9wczIubGF5ZXIgPT09ICdiaWtlc3RhdGlvbicpXG4gICkge1xuICAgIHJldHVybiBwcm9wczEubGFiZWxJZCA9PT0gcHJvcHMyLmxhYmVsSWQ7XG4gIH1cbiAgaWYgKHByb3BzMS5ndGZzSWQgJiYgcHJvcHMyLmd0ZnNJZCkge1xuICAgIHJldHVybiBwcm9wczEuZ3Rmc0lkID09PSBwcm9wczIuZ3Rmc0lkO1xuICB9XG4gIGlmIChwcm9wczEuZ3Rmc0lkICYmIHByb3BzMi5naWQgJiYgcHJvcHMyLmdpZC5pbmNsdWRlcyhwcm9wczEuZ3Rmc0lkKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChwcm9wczIuZ3Rmc0lkICYmIHByb3BzMS5naWQgJiYgcHJvcHMxLmdpZC5pbmNsdWRlcyhwcm9wczIuZ3Rmc0lkKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChcbiAgICAocHJvcHMxLmxheWVyID09PSAnc3RvcCcgfHwgcHJvcHMxLmxheWVyID09PSAnc3RhdGlvbicpICYmXG4gICAgKHByb3BzMi5sYXllciA9PT0gJ3N0b3AnIHx8IHByb3BzMi5sYXllciA9PT0gJ3N0YXRpb24nKSAmJlxuICAgIHByb3BzMS5naWQgJiZcbiAgICBwcm9wczIuZ2lkXG4gICkge1xuICAgIHJldHVybiBwcm9wczEuZ2lkID09PSBwcm9wczIuZ2lkO1xuICB9XG5cbiAgY29uc3QgcDEgPSBpdGVtMSAmJiBpdGVtMS5nZW9tZXRyeSA/IGl0ZW0xLmdlb21ldHJ5LmNvb3JkaW5hdGVzIDogdW5kZWZpbmVkO1xuICBjb25zdCBwMiA9IGl0ZW0yICYmIGl0ZW0yLmdlb21ldHJ5ID8gaXRlbTIuZ2VvbWV0cnkuY29vcmRpbmF0ZXMgOiB1bmRlZmluZWQ7XG5cbiAgaWYgKHAxICYmIHAyKSB7XG4gICAgLy8gYm90aCBoYXZlIGdlb21ldHJ5XG4gICAgaWYgKE1hdGguYWJzKHAxWzBdIC0gcDJbMF0pIDwgMWUtNiAmJiBNYXRoLmFicyhwMVsxXSAtIHAyWzFdKSA8IDFlLTYpIHtcbiAgICAgIC8vIGxvY2F0aW9uIG1hdGNoIGlzIG5vdCBlbm91Z2guIFJlcXVpcmUgYSBjb21tb24gcHJvcGVydHlcbiAgICAgIGlmIChcbiAgICAgICAgdHJ1RXEocHJvcHMxLm5hbWUsIHByb3BzMi5uYW1lKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEubGFiZWwsIHByb3BzMi5sYWJlbCkgfHxcbiAgICAgICAgdHJ1RXEocHJvcHMxLmFkZHJlc3MsIHByb3BzMi5hZGRyZXNzKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEuYWRkcmVzcywgcHJvcHMyLmxhYmVsKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEubGFiZWwsIHByb3BzMi5hZGRyZXNzKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG4iLCJpbXBvcnQgaXNTdHJpbmcgZnJvbSAnbG9kYXNoL2lzU3RyaW5nJztcbmltcG9ydCBvcmRlckJ5IGZyb20gJ2xvZGFzaC9vcmRlckJ5JztcbmltcG9ydCB1bmlxV2l0aCBmcm9tICdsb2Rhc2gvdW5pcVdpdGgnO1xuaW1wb3J0IGlzRHVwbGljYXRlIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1pcy1kdXBsaWNhdGUnO1xuXG5jb25zdCBub3JtYWxpemUgPSBzdHIgPT4ge1xuICBpZiAoIWlzU3RyaW5nKHN0cikpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpO1xufTtcblxuLyoqXG4gKiBMYXllclR5cGUgZGVwaWN0cyB0aGUgdHlwZSBvZiB0aGUgcG9pbnQtb2YtaW50ZXJlc3QuXG4gKi9cbmNvbnN0IExheWVyVHlwZSA9IHtcbiAgQWRkcmVzczogJ2FkZHJlc3MnLFxuICBCYWNrOiAnYmFjaycsXG4gIEN1cnJlbnRQb3NpdGlvbjogJ2N1cnJlbnRQb3NpdGlvbicsXG4gIEZhdm91cml0ZVN0b3A6ICdmYXZvdXJpdGVTdG9wJyxcbiAgRmF2b3VyaXRlU3RhdGlvbjogJ2Zhdm91cml0ZVN0YXRpb24nLFxuICBGYXZvdXJpdGVQbGFjZTogJ2Zhdm91cml0ZVBsYWNlJyxcbiAgRmF2b3VyaXRlUm91dGU6ICdmYXZvdXJpdGVSb3V0ZScsXG4gIEZ1dHVyZVJvdXRlOiAnZnV0dXJlUm91dGUnLFxuICBTdGF0aW9uOiAnc3RhdGlvbicsXG4gIFNlbGVjdEZyb21NYXA6ICdzZWxlY3RGcm9tTWFwJyxcbiAgU2VsZWN0RnJvbU93bkxvY2F0aW9uczogJ293bkxvY2F0aW9ucycsXG4gIFN0b3A6ICdzdG9wJyxcbiAgU3RyZWV0OiAnc3RyZWV0JyxcbiAgVmVudWU6ICd2ZW51ZScsXG4gIEJpa2VSZW50YWxTdGF0aW9uOiAnYmlrZVJlbnRhbFN0YXRpb24nLFxuICBDYXJQYXJrOiAnY2FycGFyaycsXG4gIEJpa2VQYXJrOiAnYmlrZXBhcmsnLFxufTtcbmV4cG9ydCBjb25zdCBpc1N0b3AgPSAoeyBsYXllciwgdHlwZSB9KSA9PlxuICBsYXllciA9PT0gJ3N0b3AnIHx8XG4gIGxheWVyID09PSAnZmF2b3VyaXRlU3RvcCcgfHxcbiAgdHlwZSA9PT0gJ3N0b3AnIHx8XG4gIHR5cGUgPT09ICdmYXZvdXJpdGVTdG9wJztcblxuY29uc3QgREVGQVVMVF9ST1VURVNfUFJFRklYID0gJ2xpbmphdCc7XG5jb25zdCBERUZBVUxUX1NUT1BTX1BSRUZJWCA9ICdweXNha2l0JztcblxuZXhwb3J0IGNvbnN0IG1hcFJvdXRlID0gKGl0ZW0sIHBhdGhPcHRzKSA9PiB7XG4gIGlmIChpdGVtID09PSBudWxsIHx8IGl0ZW0gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3Qgb3B0cyA9IHBhdGhPcHRzIHx8IHt9O1xuXG4gIGNvbnN0IHJvdXRlc1ByZWZpeCA9IG9wdHMucm91dGVzUHJlZml4IHx8IERFRkFVTFRfUk9VVEVTX1BSRUZJWDtcbiAgY29uc3Qgc3RvcHNQcmVmaXggPSBvcHRzLnN0b3BzUHJlZml4IHx8IERFRkFVTFRfU1RPUFNfUFJFRklYO1xuXG4gIGNvbnN0IGxpbmsgPSBgLyR7cm91dGVzUHJlZml4fS8ke2l0ZW0uZ3Rmc0lkfS8ke3N0b3BzUHJlZml4fWA7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ1JvdXRlJyxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAuLi5pdGVtLFxuICAgICAgbGF5ZXI6IGByb3V0ZS0ke2l0ZW0ubW9kZX1gLFxuICAgICAgbGluayxcbiAgICB9LFxuICAgIGdlb21ldHJ5OiB7XG4gICAgICBjb29yZGluYXRlczogbnVsbCxcbiAgICB9LFxuICB9O1xufTtcblxuLyoqXG4gKiBUcmllcyB0byBtYXRjaCB0aGUgZ2l2ZW4gc2VhcmNoIHRlcm0gYWdhaW5zIHRoZSBjb2xsZWN0aW9uIG9mIHByb3BlcnRpZXNcbiAqIGZvciBhIGdlb2NvZGluZyByZXN1bHQuIFRoZSBiZXN0IG1hdGNoIHdpbGwgYmUgcmV0dXJuZWQgKG1pbjogMCwgbWF4OiAxLjUpLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBub3JtYWxpemVkVGVybSB0aGUgbm9ybWFsaXplZCBzZWFyY2ggdGVybS5cbiAqIEBwYXJhbSB7Kn0gcmVzdWx0UHJvcGVydGllcyB0aGUgZ2VvY29kaW5nIHJlc3VsdCdzIHByb3BlcnR5IGNvbGxlY3Rpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBtYXRjaCA9IChub3JtYWxpemVkVGVybSwgcmVzdWx0UHJvcGVydGllcykgPT4ge1xuICBpZiAoIWlzU3RyaW5nKG5vcm1hbGl6ZWRUZXJtKSB8fCBub3JtYWxpemVkVGVybS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGNvbnN0IG1hdGNoUHJvcHMgPSBbJ25hbWUnLCAnbGFiZWwnLCAnYWRkcmVzcycsICdzaG9ydE5hbWUnXTtcbiAgcmV0dXJuIG1hdGNoUHJvcHNcbiAgICAubWFwKG5hbWUgPT4gcmVzdWx0UHJvcGVydGllc1tuYW1lXSlcbiAgICAuZmlsdGVyKHZhbHVlID0+IGlzU3RyaW5nKHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPiAwKVxuICAgIC5tYXAodmFsdWUgPT4ge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFZhbHVlID0gbm9ybWFsaXplKHZhbHVlKTtcbiAgICAgIGlmIChub3JtYWxpemVkVmFsdWUuaW5kZXhPZihub3JtYWxpemVkVGVybSkgPT09IDApIHtcbiAgICAgICAgLy8gZnVsbCBtYXRjaCBhdCBzdGFydC4gUmV0dXJuIG1heCByZXN1bHQgd2hlbiBtYXRjaCBpcyBmdWxsLCBub3Qgb25seSBwYXJ0aWFsXG4gICAgICAgIHJldHVybiAwLjUgKyBub3JtYWxpemVkVGVybS5sZW5ndGggLyBub3JtYWxpemVkVmFsdWUubGVuZ3RoO1xuICAgICAgfVxuICAgICAgLy8gYmVjYXVzZSBvZiBmaWx0ZXJtYXRjaGluZ3RvaW5wdXQsIHdlIGtub3cgdGhhdCBtYXRjaCBvY2N1cnJlZCBzb21ld2hlcmVcbiAgICAgIC8vIGRvbid0IHJ1biBmaWx0ZXJtYXRjaGluZyBhZ2FpbiBidXQgZXN0aW1hdGUgcm91Z2hseTpcbiAgICAgIC8vIHRoZSBsb25nZXIgdGhlIG1hdGNoaW5nIHN0cmluZywgdGhlIGJldHRlciBjb25maWRlbmNlLCBtYXggYmVpbmcgMC41XG4gICAgICByZXR1cm4gKDAuNSAqIG5vcm1hbGl6ZWRUZXJtLmxlbmd0aCkgLyAobm9ybWFsaXplZFRlcm0ubGVuZ3RoICsgMSk7XG4gICAgfSlcbiAgICAucmVkdWNlKFxuICAgICAgKHByZXZpb3VzLCBjdXJyZW50KSA9PiAoY3VycmVudCA+IHByZXZpb3VzID8gY3VycmVudCA6IHByZXZpb3VzKSxcbiAgICAgIDAsXG4gICAgKTtcbn07XG5cbi8qKlxuICogUmFua3MgdGhlIHJlc3VsdCBiYXNlZCBvbiBpdHMgbGF5ZXIgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxheWVyIHRoZSBsYXllciBwcm9wZXJ0eS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgdGhlIHNvdXJjZSBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldExheWVyUmFuayA9IChsYXllciwgc291cmNlKSA9PiB7XG4gIHN3aXRjaCAobGF5ZXIpIHtcbiAgICBjYXNlIExheWVyVHlwZS5DdXJyZW50UG9zaXRpb246XG4gICAgICByZXR1cm4gMTtcbiAgICBjYXNlIExheWVyVHlwZS5CYWNrOlxuICAgICAgcmV0dXJuIDAuOTtcbiAgICBjYXNlIExheWVyVHlwZS5TZWxlY3RGcm9tTWFwOlxuICAgICAgcmV0dXJuIDAuODtcbiAgICBjYXNlIExheWVyVHlwZS5TZWxlY3RGcm9tT3duTG9jYXRpb25zOlxuICAgICAgcmV0dXJuIDAuNzk7XG4gICAgY2FzZSBMYXllclR5cGUuRmF2b3VyaXRlU3RhdGlvbjpcbiAgICBjYXNlIExheWVyVHlwZS5GYXZvdXJpdGVQbGFjZTpcbiAgICBjYXNlIExheWVyVHlwZS5GYXZvdXJpdGVTdG9wOlxuICAgIGNhc2UgTGF5ZXJUeXBlLkZhdm91cml0ZVJvdXRlOlxuICAgICAgcmV0dXJuIDAuNDU7XG4gICAgY2FzZSBMYXllclR5cGUuRnV0dXJlUm91dGU6XG4gICAgICByZXR1cm4gMC40NDtcbiAgICBjYXNlIExheWVyVHlwZS5TdGF0aW9uOiB7XG4gICAgICBpZiAoaXNTdHJpbmcoc291cmNlKSAmJiBzb3VyY2UuaW5kZXhPZignZ3RmcycpID09PSAwKSB7XG4gICAgICAgIHJldHVybiAwLjQzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIDAuNDI7XG4gICAgfVxuICAgIGNhc2UgTGF5ZXJUeXBlLkZhdm91cml0ZUJpa2VSZW50YWxTdGF0aW9uOlxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyB2ZW51ZSwgYWRkcmVzcywgc3RyZWV0LCByb3V0ZS14eHhcbiAgICAgIHJldHVybiAwLjQxO1xuICAgIGNhc2UgTGF5ZXJUeXBlLkNhclBhcms6XG4gICAgICByZXR1cm4gMC4zODtcbiAgICBjYXNlIExheWVyVHlwZS5CaWtlUGFyazpcbiAgICAgIHJldHVybiAwLjM4O1xuICAgIGNhc2UgTGF5ZXJUeXBlLkJpa2VSZW50YWxTdGF0aW9uOlxuICAgICAgcmV0dXJuIDAuMzg7XG4gICAgY2FzZSBMYXllclR5cGUuU3RvcDpcbiAgICAgIHJldHVybiAwLjM2O1xuICB9XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBzb3J0IHRoZSByZXN1bHRzLiBPcmRlcnMgYXMgZm9sbG93czpcbiAqICAtIGN1cnJlbnQgcG9zaXRpb24gZmlyc3QgZm9yIGFuIGVtcHR5IHNlYXJjaFxuICogIC0gbWF0Y2hpbmcgcm91dGVzIGZpcnN0XG4gKiAgLSBvdGhlcndpc2UgYnkgY29uZmlkZW5jZSwgZXhjZXB0IHRoYXQ6XG4gKiAgICAtIGJvb3N0IHdlbGwgbWF0Y2hpbmcgc3RhdGlvbnMgKGVzcGVjaWFsbHkgZnJvbSBHVEZTKVxuICogICAgLSByYW5rIHN0b3BzIGxvd2VyIGFzIHRoZXkgdGVuZCB0byBvY2N1cHkgbW9zdCBvZiB0aGUgc2VhcmNoIHJlc3VsdHNcbiAqICAtIGl0ZW1zIHdpdGggbm8gY29uZmlkZW5jZSAob2xkIHNlYXJjaGVzIGFuZCBmYXZvcml0ZXMpOlxuICogICAgLSByYW5rIGZhdm91cml0ZXMgYmV0dGVyIHRoYW4gb3JkaW5hcnkgb2xkIHNlYXJjaGVzXG4gKiAgICAtIHJhbmsgZnVsbCBtYXRjaCBiZXR0ZXIgdGhhbiBwYXJ0aWFsIG1hdGNoXG4gKiAgICAtIHJhbmsgbWF0Y2ggYXQgbWlkZGxlIHdvcmQgbG93ZXIgdGhhbiBtYXRjaCBhdCB0aGUgYmVnaW5uaW5nXG4gKiAgICAtIHJhbmsgYmlrZSByZW50YWwgc3RhdGlvbnMgbG93ZXJcbiAqIEBwYXJhbSB7KltdfSByZXN1bHRzIFRoZSBzZWFyY2ggcmVzdWx0cyB0aGF0IHdlcmUgcmVjZWl2ZWRcbiAqIEBwYXJhbSB7U3RyaW5nfSB0ZXJtIFRoZSBzZWFyY2ggdGVybSB0aGF0IHdhcyB1c2VkXG4gKi9cbmV4cG9ydCBjb25zdCBzb3J0U2VhcmNoUmVzdWx0cyA9IChsaW5lUmVnZXhwLCByZXN1bHRzLCB0ZXJtID0gJycpID0+IHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3VsdHMpKSB7XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICBjb25zdCBpc0xpbmVJZGVudGlmaWVyID0gdmFsdWUgPT5cbiAgICBpc1N0cmluZyh2YWx1ZSkgJiYgbGluZVJlZ2V4cCAmJiBsaW5lUmVnZXhwLnRlc3QodmFsdWUpO1xuXG4gIGNvbnN0IG5vcm1hbGl6ZWRUZXJtID0gbm9ybWFsaXplKHRlcm0pO1xuICBjb25zdCBpc0xpbmVTZWFyY2ggPSBpc0xpbmVJZGVudGlmaWVyKG5vcm1hbGl6ZWRUZXJtKTtcblxuICBjb25zdCBvcmRlcmVkUmVzdWx0cyA9IG9yZGVyQnkoXG4gICAgcmVzdWx0cyxcbiAgICBbXG4gICAgICAvLyByYW5rIG1hdGNoaW5nIHJvdXRlcyBiZXN0XG4gICAgICByZXN1bHQgPT5cbiAgICAgICAgaXNMaW5lU2VhcmNoICYmXG4gICAgICAgIGlzTGluZUlkZW50aWZpZXIobm9ybWFsaXplKHJlc3VsdC5wcm9wZXJ0aWVzLnNob3J0TmFtZSkpICYmXG4gICAgICAgIG5vcm1hbGl6ZShyZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWUpLmluZGV4T2Yobm9ybWFsaXplZFRlcm0pID09PSAwXG4gICAgICAgICAgPyAxXG4gICAgICAgICAgOiAwLFxuXG4gICAgICByZXN1bHQgPT4ge1xuICAgICAgICBjb25zdCB7IGNvbmZpZGVuY2UsIGxheWVyLCBzb3VyY2UgfSA9IHJlc3VsdC5wcm9wZXJ0aWVzO1xuICAgICAgICBpZiAobm9ybWFsaXplZFRlcm0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgLy8gRG9pbmcgc2VhcmNoIHdpdGggZW1wdHkgc3RyaW5nLlxuICAgICAgICAgIC8vIE5vIGNvbmZpZGVuY2UgdG8gbWF0Y2gsIHNvIHVzZSByYW5rZWQgb2xkIHNlYXJjaGVzIGFuZCBmYXZvdXJpdGVzXG4gICAgICAgICAgcmV0dXJuIGdldExheWVyUmFuayhsYXllciwgc291cmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG11c3QgaGFuZGxlIGEgbWl4dXAgb2YgZ2VvY29kZXIgc2VhcmNoZXMgYW5kIGl0ZW1zIGFib3ZlXG4gICAgICAgIC8vIE5vcm1hbCBjb25maWRlbmNlIHJhbmdlIGZyb20gZ2VvY29kZXIgaXMgYWJvdXQgMC4zIC4uIDFcbiAgICAgICAgaWYgKCFjb25maWRlbmNlKSB7XG4gICAgICAgICAgLy8gbm90IGZyb20gZ2VvY29kZXIsIGVzdGltYXRlIGNvbmZpZGVuY2Ugb3Vyc2VsdmVzXG4gICAgICAgICAgY29uc3QgZXN0aW1hdGVkQ29uZmlkZW5jZSA9XG4gICAgICAgICAgICBnZXRMYXllclJhbmsobGF5ZXIsIHNvdXJjZSkgK1xuICAgICAgICAgICAgbWF0Y2gobm9ybWFsaXplZFRlcm0sIHJlc3VsdC5wcm9wZXJ0aWVzKTtcbiAgICAgICAgICByZXR1cm4gbGF5ZXIgPT09IExheWVyVHlwZS5CaWtlUmVudGFsU3RhdGlvblxuICAgICAgICAgICAgPyBlc3RpbWF0ZWRDb25maWRlbmNlIC0gMC44XG4gICAgICAgICAgICA6IGVzdGltYXRlZENvbmZpZGVuY2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBnZW9jb2RlZCBpdGVtcyB3aXRoIGNvbmZpZGVuY2UsIGp1c3QgYWRqdXN0IGEgbGl0dGxlXG4gICAgICAgIHN3aXRjaCAobGF5ZXIpIHtcbiAgICAgICAgICBjYXNlIExheWVyVHlwZS5TdGF0aW9uOiB7XG4gICAgICAgICAgICBjb25zdCBib29zdCA9IHNvdXJjZS5pbmRleE9mKCdndGZzJykgPT09IDAgPyAwLjAyIDogMC4wMTtcbiAgICAgICAgICAgIHJldHVybiBjb25maWRlbmNlICsgYm9vc3Q7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZTtcbiAgICAgICAgICBjYXNlIExheWVyVHlwZS5TdG9wOlxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2UgLSAwLjA1O1xuICAgICAgICAgIGNhc2UgTGF5ZXJUeXBlLkNhclBhcms6XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZSAtIDAuMDU7XG4gICAgICAgICAgY2FzZSBMYXllclR5cGUuQmlrZVBhcms6XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZSAtIDAuMDU7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgXSxcbiAgICBbJ2Rlc2MnLCAnZGVzYyddLFxuICApO1xuXG4gIHJldHVybiB1bmlxV2l0aChvcmRlcmVkUmVzdWx0cywgaXNEdXBsaWNhdGUpO1xufTtcblxuLyoqXG4gKiBQYXJzZXMgc3RvcCdzIG5hbWUgd2l0aG91dCBzdG9wIGNvZGUgZnJvbSBhIHN0b3AgbmFtZSBmcm9tIGdlb2NvZGluZyByZXN1bHRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIHN0b3AncyBuYW1lIGZyb20gZ2VvY29kaW5nIHJlc3VsdHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RvcENvZGUgc3RvcCBjb2RlLlxuICovXG5leHBvcnQgY29uc3QgZ2V0U3RvcE5hbWUgPSAobmFtZSwgc3RvcENvZGUpID0+IHtcbiAgaWYgKFxuICAgIHN0b3BDb2RlICE9PSB1bmRlZmluZWQgJiZcbiAgICBzdG9wQ29kZSAhPT0gbnVsbCAmJlxuICAgIG5hbWUubGFzdEluZGV4T2Yoc3RvcENvZGUpICE9PSAtMVxuICApIHtcbiAgICByZXR1cm4gbmFtZS5zdWJzdHJpbmcoMCwgbmFtZS5sYXN0SW5kZXhPZihzdG9wQ29kZSkgLSAxKTtcbiAgfVxuICByZXR1cm4gbmFtZTtcbn07XG4iLCJpbXBvcnQgdW5pcVdpdGggZnJvbSAnbG9kYXNoL3VuaXFXaXRoJztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC9pc0VxdWFsJztcbmltcG9ydCBtZW1vaXplIGZyb20gJ2xvZGFzaC9tZW1vaXplJztcbmltcG9ydCBlc2NhcGVSZWdFeHAgZnJvbSAnbG9kYXNoL2VzY2FwZVJlZ0V4cCc7XG5pbXBvcnQgY2xvbmVEZWVwIGZyb20gJ2xvZGFzaC9jbG9uZURlZXAnO1xuXG4vKipcbiAqIExvY2F0aW9uIHByb3BlcnRpZXMuXG4gKiBAdHlwZWRlZiB7TG9jYXRpb25Qcm9wZXJ0aWVzfVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGxheWVyIFN1Z2dlc3Rpb24gbGF5ZXIuXG4gKiBAcHJvcGVydHkge2xhdH0gW251bWJlcl1cbiAqIEBwcm9wZXJ0eSB7bG9ufSBbbnVtYmVyXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGFkZHJlc3MgQWRkcmVzcy5cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgbG9jYWxpdHkgKGNpdHkgbmFtZSkgZm9yIHN1Z2dlc3Rpb25zXG4gKlxuICogQG5hbWUgZ2V0TG9jYWxpdHlcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdWdnZXN0aW9uIHN1Z2dlc3Rpb24ncyBwcm9wZXJ0aWVzIGZyb20gZ2VvY29kaW5nIG9yIGEgZmF2b3VyaXRlIHN0b3Avc3RhdGlvbi5cbiAqIEV4cGVjdHMgbGFzdCBwYXJ0IG9mIGFuIGFkZHJlc3MgKGFmdGVyICcsJykgdG8gY29udGFpbiB0aGUgY2l0eSBuYW1lIG9mIHRoZSBzdWdnZXN0aW9uIGxvY2F0aW9uLlxuICogQHJldHVybnMge1N0cmluZ30gIENpdHkgbmFtZSBvciBlbXB0eSBzdHJpbmdcbiAqL1xuY29uc3QgZ2V0TG9jYWxpdHkgPSBzdWdnZXN0aW9uID0+XG4gIHN1Z2dlc3Rpb24ubG9jYWxhZG1pbiB8fFxuICBzdWdnZXN0aW9uLmxvY2FsaXR5IHx8XG4gIChzdWdnZXN0aW9uLmFkZHJlc3MgJiZcbiAgICBzdWdnZXN0aW9uLmFkZHJlc3MubGFzdEluZGV4T2YoJywnKSA8IHN1Z2dlc3Rpb24uYWRkcmVzcy5sZW5ndGggLSAyICYmXG4gICAgc3VnZ2VzdGlvbi5hZGRyZXNzLnN1YnN0cmluZyhzdWdnZXN0aW9uLmFkZHJlc3MubGFzdEluZGV4T2YoJywnKSArIDIpKSB8fFxuICAnJztcblxuZXhwb3J0IGNvbnN0IGdldFN0b3BDb2RlID0gKHsgaWQsIGNvZGUgfSkgPT4ge1xuICBpZiAoY29kZSkge1xuICAgIHJldHVybiBjb2RlO1xuICB9XG4gIGlmIChcbiAgICBpZCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgdHlwZW9mIGlkLmluZGV4T2YgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgaWQuaW5kZXhPZignIycpID09PSAtMVxuICApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIC8vIGlkIGZyb20gcGVsaWFzXG4gIHJldHVybiBpZC5zdWJzdHJpbmcoaWQuaW5kZXhPZignIycpICsgMSk7XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0RmF2b3VyaXRlUGxhY2VMYWJlbCA9IChuYW1lLCBhZGRyZXNzKSA9PiBbXG4gIG5hbWUgfHwgKGFkZHJlc3MgJiYgYWRkcmVzcy5zcGxpdCgnLCcpWzBdKSxcbiAgdHlwZW9mIGFkZHJlc3MgPT09ICdzdHJpbmcnXG4gICAgPyBhZGRyZXNzLnJlcGxhY2UobmV3IFJlZ0V4cChgJHtlc2NhcGVSZWdFeHAobmFtZSl9KFsgLF18JCkrYCksICcnKVxuICAgIDogJycsXG5dO1xuXG4vKipcbiAqIEZvcm1hdCBzdWdnZXN0aW9uLXBhaXIgW25hbWUsIGFkZHJlc3NdIGJ5IGBzdWdnZXN0aW9uLmxheWVyYC5cbiAqXG4gKiBAbmFtZSBnZXROYW1lTGFiZWxcbiAqIEBwYXJhbSB7TG9jYXRpb25Qcm9wZXJ0aWVzfSBzdWdnZXN0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwbGFpbl1cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXkuPHN0cmluZz59IEZvcm1hdHRlZCBsYWJlbC5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldE5hbWVMYWJlbCA9IG1lbW9pemUoXG4gIChzdWdnZXN0aW9uLCBwbGFpbiA9IGZhbHNlKSA9PiB7XG4gICAgc3dpdGNoIChzdWdnZXN0aW9uLmxheWVyKSB7XG4gICAgICBjYXNlICdjdXJyZW50UG9zaXRpb24nOlxuICAgICAgICByZXR1cm4gW3N1Z2dlc3Rpb24ubGFiZWxJZCwgc3VnZ2VzdGlvbi5hZGRyZXNzXTtcbiAgICAgIGNhc2UgJ3NlbGVjdEZyb21NYXAnOlxuICAgICAgY2FzZSAnb3duTG9jYXRpb25zJzpcbiAgICAgIGNhc2UgJ2JhY2snOlxuICAgICAgICByZXR1cm4gW3N1Z2dlc3Rpb24ubGFiZWxJZF07XG4gICAgICBjYXNlICdmYXZvdXJpdGVQbGFjZSc6XG4gICAgICAgIHJldHVybiBmb3JtYXRGYXZvdXJpdGVQbGFjZUxhYmVsKHN1Z2dlc3Rpb24ubmFtZSwgc3VnZ2VzdGlvbi5hZGRyZXNzKTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZUJpa2VSZW50YWxTdGF0aW9uJzpcbiAgICAgIGNhc2UgJ2Jpa2VSZW50YWxTdGF0aW9uJzpcbiAgICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uLm5hbWVdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlUm91dGUnOlxuICAgICAgY2FzZSAncm91dGUtQlVTJzpcbiAgICAgIGNhc2UgJ3JvdXRlLVRSQU0nOlxuICAgICAgY2FzZSAncm91dGUtUkFJTCc6XG4gICAgICBjYXNlICdyb3V0ZS1TVUJXQVknOlxuICAgICAgY2FzZSAncm91dGUtRkVSUlknOlxuICAgICAgY2FzZSAncm91dGUtQUlSUExBTkUnOlxuICAgICAgICByZXR1cm4gIXBsYWluICYmIHN1Z2dlc3Rpb24uc2hvcnROYW1lXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24uZ3Rmc0lkLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLm1vZGUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5sb25nTmFtZSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5zaG9ydE5hbWUsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubG9uZ05hbWUsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24uYWdlbmN5ID8gc3VnZ2VzdGlvbi5hZ2VuY3kubmFtZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIF07XG4gICAgICBjYXNlICd2ZW51ZSc6XG4gICAgICBjYXNlICdhZGRyZXNzJzpcbiAgICAgIGNhc2UgJ3N0cmVldCc6XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lLFxuICAgICAgICAgIHN1Z2dlc3Rpb24ubGFiZWwucmVwbGFjZShcbiAgICAgICAgICAgIG5ldyBSZWdFeHAoYCR7ZXNjYXBlUmVnRXhwKHN1Z2dlc3Rpb24ubmFtZSl9KCwpPyggKT9gKSxcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICksXG4gICAgICAgIF07XG4gICAgICBjYXNlICdmYXZvdXJpdGVTdG9wJzpcbiAgICAgIGNhc2UgJ3N0b3AnOlxuICAgICAgICByZXR1cm4gcGxhaW5cbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lIHx8XG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5sYWJlbCB8fFxuICAgICAgICAgICAgICAgIChzdWdnZXN0aW9uLmFkZHJlc3MgJiYgc3VnZ2VzdGlvbi5hZGRyZXNzLnNwbGl0KCcsJylbMF0pLFxuICAgICAgICAgICAgICBnZXRMb2NhbGl0eShzdWdnZXN0aW9uKSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmlkLFxuICAgICAgICAgICAgICBnZXRTdG9wQ29kZShzdWdnZXN0aW9uKSxcbiAgICAgICAgICAgICAgZ2V0TG9jYWxpdHkoc3VnZ2VzdGlvbiksXG4gICAgICAgICAgICBdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlU3RhdGlvbic6XG4gICAgICBjYXNlICdzdGF0aW9uJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lIHx8XG4gICAgICAgICAgICBzdWdnZXN0aW9uLmxhYmVsIHx8XG4gICAgICAgICAgICAoc3VnZ2VzdGlvbi5hZGRyZXNzICYmIHN1Z2dlc3Rpb24uYWRkcmVzcy5zcGxpdCgnLCcpWzBdKSxcbiAgICAgICAgICBnZXRMb2NhbGl0eShzdWdnZXN0aW9uKSxcbiAgICAgICAgXTtcbiAgICB9XG4gIH0sXG4gIChpdGVtLCBwbGFpbikgPT4ge1xuICAgIGNvbnN0IGkgPSBjbG9uZURlZXAoaXRlbSk7XG4gICAgaS5wbGFpbiA9IHBsYWluO1xuICAgIHJldHVybiBpO1xuICB9LFxuKTtcblxuLyoqXG4gKiBDaGVja3MgdGhhdCBmZWF0dXJlcyBhcmUgdW5pcXVlIGJ5IGxhYmVsXG4gKlxuICogQG5hbWUgdW5pcUJ5TGFiZWxcbiAqIEBwYXJhbSB7QXJyYXl9IGZlYXR1cmVzIEFycmF5IG9mIGZlYXR1cmVzXG4gKiBAcmV0dXJucyB7QXJyYXl9ICBBcnJheSBvZiB1bmlxdWUgZmVhdHVyZXNcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC51bmlxQnlMYWJlbChmZWF0dXJlcyk7XG4gKiAvLz0gQXJyYXkoMilcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdW5pcUJ5TGFiZWwoZmVhdHVyZXMpIHtcbiAgcmV0dXJuIHVuaXFXaXRoKGZlYXR1cmVzLCAoZmVhdDEsIGZlYXQyKSA9PiB7XG4gICAgY29uc3QgYm9vbCA9XG4gICAgICBpc0VxdWFsKGdldE5hbWVMYWJlbChmZWF0MS5wcm9wZXJ0aWVzKSwgZ2V0TmFtZUxhYmVsKGZlYXQyLnByb3BlcnRpZXMpKSAmJlxuICAgICAgZmVhdDEucHJvcGVydGllcy5sYXllciA9PT0gZmVhdDIucHJvcGVydGllcy5sYXllcjtcbiAgICBpZiAoXG4gICAgICBib29sICYmXG4gICAgICAoZmVhdDEudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJyB8fCBmZWF0Mi50eXBlID09PSAnRnV0dXJlUm91dGUnKVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gYm9vbDtcbiAgfSk7XG59XG4iLCJpbXBvcnQgZ2V0IGZyb20gJ2xvZGFzaC9nZXQnO1xuXG4vKipcbiAqIEZ1bmN0aW9uIHRoYXQgZmlsdGVycyBsaXN0IG1hdGNoaW5nIHRvIGlucHV0LlxuICpcbiAqIEBuYW1lIGZpbHRlck1hdGNoaW5nVG9JbnB1dFxuICogQHBhcmFtIHtBcnJheX0gbGlzdCBMaXN0IGNvbnRhaW5pbiBvYmplY3RzIGUuZyggIHtcbiAqICAgICAgICAgdHlwZTogJ0ZlYXR1cmUnXG4gKiAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAqICAgICAgICAgICBsYWJlbDogJ3Rlc3RhZGRyZXNzNCcsXG4gKiAgICAgICAgICAgbGF5ZXI6ICdhZGRyZXNzJyxcbiAqICAgICAgICAgICBuYW1lOiAndGVzdGFkZHJlc3M0JyxcbiAqICAgICAgICAgfSxcbiAqICAgICAgICAgZ2VvbWV0cnk6IHsgY29vcmRpbmF0ZXM6IFtsb24sIGxhdF0gfSxcbiAqICAgICAgIH0sKVxuICogQHBhcmFtIHtTdHJpbmd9IElucHV0IElucHV0IGdpdmVuIGZvciBmaWx0ZXJpbmcgdGhlIGxpc3RcbiAqIEBwYXJhbSB7QXJyYXl9IGZpZWxkcyBMaXN0IG9mIGZpZWxkcyB0aGF0IGxpc3QgaXMgZmlsdGVyZWQgYnkgZS5nIChbcHJvcGVydGllcy5sYWJlbCwgcHJvcGVydGllcy5uYW1lXSlcbiAqIEByZXR1cm5zIHtBcnJheX0gRmlsdGVyZWQgQXJyYXkuXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtdXRpbC5maWx0ZXJNYXRjaGluZ1RvSW5wdXQoW3t0eXBlOiBmZWF0dXJlLCBwcm9wZXJ0aWVzIHsgLi4uIG5hbWU6IHRlc3RhZGRyZXNzNCB9IC4uLiB9XSwgJ3Rlc3RhZGRyZXNzNCcsICdwcm9wZXJ0aWVzLm5hbWUnKTtcbiAqIC8vPSBMaXN0IGNvbnRhaW5pbmcgb2JqZWN0IHdpdGggZ2l2ZW4gbmFtZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZmlsdGVyTWF0Y2hpbmdUb0lucHV0KGxpc3QsIElucHV0LCBmaWVsZHMpIHtcbiAgaWYgKHR5cGVvZiBJbnB1dCA9PT0gJ3N0cmluZycgJiYgSW5wdXQubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGlucHV0ID0gSW5wdXQudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgY29uc3QgbXVsdGlXb3JkID0gaW5wdXQuaW5jbHVkZXMoJyAnKSB8fCBpbnB1dC5pbmNsdWRlcygnLCcpO1xuICAgIHJldHVybiBsaXN0LmZpbHRlcihpdGVtID0+IHtcbiAgICAgIGxldCBwYXJ0cyA9IFtdO1xuICAgICAgZmllbGRzLmZvckVhY2gocE5hbWUgPT4ge1xuICAgICAgICBsZXQgdmFsdWUgPSBnZXQoaXRlbSwgcE5hbWUpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhbXVsdGlXb3JkICYmXG4gICAgICAgICAgKHBOYW1lID09PSAncHJvcGVydGllcy5sYWJlbCcgfHwgcE5hbWUgPT09ICdhZGRyZXNzJykgJiZcbiAgICAgICAgICB2YWx1ZVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBzcGVjaWFsIGNhc2U6IGRyb3AgbGFzdCBwYXJ0cyBpLmUuIGNpdHkgYW5kIG5laWdoYm91cmhvb2RcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNwbGl0KCcsJyk7XG4gICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIHZhbHVlLnNwbGljZSh2YWx1ZS5sZW5ndGggLSAyLCAyKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHZhbHVlLnNwbGljZSh2YWx1ZS5sZW5ndGggLSAxLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZS5qb2luKCcsJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKG11bHRpV29yZCkge1xuICAgICAgICAgICAgcGFydHMgPSBwYXJ0cy5jb25jYXQodmFsdWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnRzID0gcGFydHMuY29uY2F0KFxuICAgICAgICAgICAgICB2YWx1ZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLywvZywgJyAnKS5zcGxpdCgnICcpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAocGFydHNbaV0uaW5kZXhPZihpbnB1dCkgPT09IDApIHtcbiAgICAgICAgICAvLyBhY2NlcHQgbWF0Y2ggb25seSBhdCB3b3JkIHN0YXJ0XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBsaXN0O1xufVxuIiwiLyoqXG4gKiBTZXJpYWxpemVzIG9iamVjdHNcbiAqXG4gKiBAbmFtZSBzZXJpYWxpemVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogT2JqZWN0IHRvIGJlIHNlcmlhbGl6ZWRcbiAqIEBwYXJhbSB7QW55fSBwcmVmaXhcbiAqIEByZXR1cm5zIHtTdHJpbmd9IFNlcmlhbGl6ZWQgb2JqZWN0XG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwuc2VyaWFsaXplKHBhcmFtMSwgcGFyYW0yKTtcbiAqIC8vPXRydWVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2VyaWFsaXplKG9iaiwgcHJlZml4KSB7XG4gIGlmICghb2JqKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopXG4gICAgLm1hcChwID0+IHtcbiAgICAgIGNvbnN0IGsgPSBwcmVmaXggfHwgcDtcbiAgICAgIGNvbnN0IHYgPSBvYmpbcF07XG5cbiAgICAgIHJldHVybiB0eXBlb2YgdiA9PT0gJ29iamVjdCdcbiAgICAgICAgPyBzZXJpYWxpemUodiwgaylcbiAgICAgICAgOiBgJHtlbmNvZGVVUklDb21wb25lbnQoayl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHYpfWA7XG4gICAgfSlcbiAgICAuam9pbignJicpO1xufVxuIiwiaW1wb3J0IHNlcmlhbGl6ZSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtc2VyaWFsaXplJztcbi8qKlxuICogIFJldHVybiBQcm9taXNlIGZvciBhIHVybCBqc29uIGdldCByZXF1ZXN0XG4gKlxuICogQG5hbWUgZ2V0SnNvblxuICogQHBhcmFtIHtTdHJpbmd9IHVybFxuICogQHBhcmFtIHtBcnJheX0gcGFyYW1zXG4gKiBAcmV0dXJucyB7T2JqZWN0fSByZXNwb25zZVxuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLmdldEpzb24ocGFyYW0xLCBwYXJhbTIpO1xuICogLy89cmVzcG9uc2VcbiAqL1xuY29uc3QgYXhpb3MgPSByZXF1aXJlKCdheGlvcycpLmRlZmF1bHQ7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEpzb24odXJsLCBwYXJhbXMpIHtcbiAgcmV0dXJuIGF4aW9zXG4gICAgLmdldChcbiAgICAgIGVuY29kZVVSSSh1cmwpICtcbiAgICAgICAgKHBhcmFtc1xuICAgICAgICAgID8gKHVybC5zZWFyY2goL1xcPy8pID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemUocGFyYW1zKVxuICAgICAgICAgIDogJycpLFxuICAgICAge1xuICAgICAgICB0aW1lb3V0OiAxMDAwMCxcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcblxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIClcbiAgICAudGhlbihyZXMgPT4ge1xuICAgICAgcmV0dXJuIHJlcy5kYXRhO1xuICAgIH0pO1xufVxuIiwiaW1wb3J0IGdldEpzb24gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1qc29uJztcblxuY29uc3QgREVGQVVMVF9QRUxJQVNfVVJMID0gJ2h0dHBzOi8vYXBpLmRpZ2l0cmFuc2l0LmZpL2dlb2NvZGluZy92MS9zZWFyY2gnO1xuLyoqXG4gKiA8REVTQ1JJUFRJT04+XG4gKlxuICogQG5hbWUgZ2V0R2VvY29kaW5nUmVzdWx0c1xuICogQHBhcmFtIHtTdHJpbmd9IHNlYXJjaFN0cmluZ1xuICogQHBhcmFtIHtTdHJpbmd9IHNlYXJjaFBhcmFtcyAoT3B0aW9uYWwpIFBhcmFtZXRlcnMgYXBwZW5kZWQgdG8gdXJsLCBiYXNpY2FsbHkgYm94IC8gcG9seWdvbiB0byByZXN0cmljdCBzZWFyY2ggYXJlYVxuICogQHBhcmFtIHtTdHJpbmd9IGxhbmcgKE9wdGlvbmFsKSBzZWFyY2ggbGFuZ3VhZ2VcbiAqIEBwYXJhbSB7T2JqZWN0fSBmb2N1c1BvaW50IChPcHRpb25hbCkgT3duIFBvc2l0aW9uIChQRUxJQVMgQVBJKVxuICogQHBhcmFtIHtTdHJpbmd9IHNvdXJjZXMgKE9wdGlvbmFsKSBzZWFyY2ggc291cmNlcyAoZS5nIE9TTSwgR1RGUy4uKVxuICogQHBhcmFtIHtPYmplY3R9IG1pbmltYWxSZWdleHAgKE9wdGlvbmFsKSBSZWdleHAgZm9yIHRlc3RpbmdcbiAqIEBwYXJhbSB7Kn0gZ2VvY29kaW5nTGF5ZXJzIChPcHRpb25hbCkgQXJyYXkgb2Ygc3RyaW5ncyB0aGF0IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIGxheWVycyBpcyBzZWFyY2hlZCwgZS5nLiBbJ3ZlbnVlJywgJ2FkZHJlc3MnLCAnc3RvcCddXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBSZXN1bHRzIGluIEpTT04gZm9ybVxuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLmdldEdlb2NvZGluZ1Jlc3VsdHMoXCJyZXN1bHRcIik7XG4gKiAvLz0gZS5nLiB7dGV4dDpcInJlc3VsdFwifVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICBzZWFyY2hTdHJpbmcsXG4gIHNlYXJjaFBhcmFtcyxcbiAgbGFuZyxcbiAgZm9jdXNQb2ludCxcbiAgc291cmNlcyxcbiAgcGVsaWFzVXJsLFxuICBtaW5pbWFsUmVnZXhwLFxuICBnZW9jb2RpbmdMYXllcnMsXG4pIHtcbiAgY29uc3QgdGV4dCA9IHNlYXJjaFN0cmluZyA/IHNlYXJjaFN0cmluZy50cmltKCkgOiBudWxsO1xuICBpZiAoXG4gICAgdGV4dCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgdGV4dCA9PT0gbnVsbCB8fFxuICAgIHRleHQubGVuZ3RoIDwgMSB8fFxuICAgIChtaW5pbWFsUmVnZXhwICYmICFtaW5pbWFsUmVnZXhwLnRlc3QodGV4dCkpXG4gICkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuICB9XG4gIGNvbnN0IFBFTElBU19VUkwgPSBwZWxpYXNVcmwgfHwgREVGQVVMVF9QRUxJQVNfVVJMO1xuICBsZXQgb3B0cyA9IHsgdGV4dCwgLi4uc2VhcmNoUGFyYW1zLCAuLi5mb2N1c1BvaW50LCBsYW5nIH07XG4gIGlmIChzb3VyY2VzKSB7XG4gICAgb3B0cyA9IHsgLi4ub3B0cywgc291cmNlcyB9O1xuICB9XG4gIGlmIChnZW9jb2RpbmdMYXllcnMpIHtcbiAgICBjb25zdCBsYXllcnMgPSBnZW9jb2RpbmdMYXllcnMudG9TdHJpbmcoKTtcbiAgICBvcHRzID0geyAuLi5vcHRzLCBsYXllcnMgfTtcbiAgfVxuICByZXR1cm4gZ2V0SnNvbihQRUxJQVNfVVJMLCBvcHRzKS50aGVuKHJlcyA9PiB7XG4gICAgcmV0dXJuIHJlcy5mZWF0dXJlcztcbiAgfSk7XG59XG4iLCJpbXBvcnQgZGVib3VuY2UgZnJvbSAnbG9kYXNoL2RlYm91bmNlJztcbmltcG9ydCBmbGF0dGVuIGZyb20gJ2xvZGFzaC9mbGF0dGVuJztcbmltcG9ydCB0YWtlIGZyb20gJ2xvZGFzaC90YWtlJztcbmltcG9ydCB7XG4gIHNvcnRTZWFyY2hSZXN1bHRzLFxuICBpc1N0b3AsXG59IGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1oZWxwZXJzJztcbmltcG9ydCB1bmlxQnlMYWJlbCBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtdW5pcS1ieS1sYWJlbCc7XG5pbXBvcnQgZmlsdGVyTWF0Y2hpbmdUb0lucHV0IGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1maWx0ZXItbWF0Y2hpbmctdG8taW5wdXQnO1xuaW1wb3J0IGdldEdlb2NvZGluZ1Jlc3VsdHMgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cyc7XG5pbXBvcnQgZ2V0SnNvbiBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWpzb24nO1xuXG5mdW5jdGlvbiBnZXRTdG9wc0Zyb21HZW9jb2Rpbmcoc3RvcHMsIFVSTF9QRUxJQVNfUExBQ0UpIHtcbiAgaWYgKCFzdG9wcyB8fCBzdG9wcy5sZW5ndGggPCAxKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG4gIH1cbiAgbGV0IGdpZHMgPSAnJztcbiAgY29uc3Qgc3RvcHNXaXRoR2lkcyA9IHN0b3BzLm1hcChzdG9wID0+IHtcbiAgICBjb25zdCB0eXBlID0gc3RvcC50eXBlID09PSAnc3RvcCcgPyAnc3RvcCcgOiAnc3RhdGlvbic7XG4gICAgbGV0IGdpZCA9IGBndGZzJHtzdG9wLmd0ZnNJZC5zcGxpdCgnOicpWzBdLnRvTG93ZXJDYXNlKCl9OiR7dHlwZX06R1RGUzoke1xuICAgICAgc3RvcC5ndGZzSWRcbiAgICB9YDtcbiAgICBpZiAoc3RvcC5jb2RlKSB7XG4gICAgICBnaWQgKz0gYCMke3N0b3AuY29kZX1gO1xuICAgIH1cbiAgICBnaWRzICs9IGAke2dpZH0sYDtcbiAgICByZXR1cm4geyAuLi5zdG9wLCBnaWQgfTtcbiAgfSk7XG4gIGNvbnN0IHN0b3BTdGF0aW9uTWFwID0gc3RvcHNXaXRoR2lkcy5yZWR1Y2UoZnVuY3Rpb24gKG1hcCwgc3RvcE9yU3RhdGlvbikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIG1hcFtzdG9wT3JTdGF0aW9uLmdpZF0gPSBzdG9wT3JTdGF0aW9uO1xuICAgIHJldHVybiBtYXA7XG4gIH0sIHt9KTtcbiAgcmV0dXJuIGdldEpzb24oVVJMX1BFTElBU19QTEFDRSwge1xuICAgIGlkczogZ2lkcy5zbGljZSgwLCAtMSksXG4gICAgLy8gbGFuZzogY29udGV4dC5nZXRTdG9yZSgnUHJlZmVyZW5jZXNTdG9yZScpLmdldExhbmd1YWdlKCksIFRPRE8gZW5hYmxlIHRoaXMgd2hlbiBPVFAgc3VwcG9ydHMgdHJhbnNsYXRpb25zXG4gIH0pLnRoZW4ocmVzID0+IHtcbiAgICByZXR1cm4gcmVzLmZlYXR1cmVzLm1hcChzdG9wID0+IHtcbiAgICAgIGNvbnN0IGZhdm91cml0ZSA9IHtcbiAgICAgICAgdHlwZTogJ0Zhdm91cml0ZVN0b3AnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgYWRkZW5kdW06IHN0b3AucHJvcGVydGllcy5hZGRlbmR1bSxcbiAgICAgICAgICBnaWQ6IHN0b3BTdGF0aW9uTWFwW3N0b3AucHJvcGVydGllcy5naWRdLmdpZCxcbiAgICAgICAgICBjb2RlOiBzdG9wU3RhdGlvbk1hcFtzdG9wLnByb3BlcnRpZXMuZ2lkXS5jb2RlLFxuICAgICAgICAgIGd0ZnNJZDogc3RvcFN0YXRpb25NYXBbc3RvcC5wcm9wZXJ0aWVzLmdpZF0uZ3Rmc0lkLFxuICAgICAgICAgIGxhc3RVcGRhdGVkOiBzdG9wU3RhdGlvbk1hcFtzdG9wLnByb3BlcnRpZXMuZ2lkXS5sYXN0VXBkYXRlZCxcbiAgICAgICAgICBmYXZvdXJpdGVJZDogc3RvcFN0YXRpb25NYXBbc3RvcC5wcm9wZXJ0aWVzLmdpZF0uZmF2b3VyaXRlSWQsXG4gICAgICAgICAgYWRkcmVzczogc3RvcC5wcm9wZXJ0aWVzLmxhYmVsLFxuICAgICAgICAgIGxheWVyOiBpc1N0b3Aoc3RvcC5wcm9wZXJ0aWVzKSA/ICdmYXZvdXJpdGVTdG9wJyA6ICdmYXZvdXJpdGVTdGF0aW9uJyxcbiAgICAgICAgfSxcbiAgICAgICAgZ2VvbWV0cnk6IHN0b3AuZ2VvbWV0cnksXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGZhdm91cml0ZTtcbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBnZXRGYXZvdXJpdGVMb2NhdGlvbnMoZmF2b3VyaXRlcywgaW5wdXQpIHtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQoZmF2b3VyaXRlcywgaW5wdXQsIFsnYWRkcmVzcycsICduYW1lJ10pLm1hcChpdGVtID0+ICh7XG4gICAgICB0eXBlOiAnRmF2b3VyaXRlUGxhY2UnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAuLi5pdGVtLFxuICAgICAgICBsYWJlbDogaXRlbS5uYW1lLFxuICAgICAgICBsYXllcjogJ2Zhdm91cml0ZVBsYWNlJyxcbiAgICAgIH0sXG4gICAgICBnZW9tZXRyeTogeyB0eXBlOiAnUG9pbnQnLCBjb29yZGluYXRlczogW2l0ZW0ubG9uLCBpdGVtLmxhdF0gfSxcbiAgICB9KSksXG4gICk7XG59XG5mdW5jdGlvbiBzZWxlY3RQb3NpdGlvbkZvbU1hcChpbnB1dCkge1xuICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJyB8fCBpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ1NlbGVjdEZyb21NYXAnLFxuICAgICAgICBhZGRyZXNzOiAnU2VsZWN0RnJvbU1hcCcsXG4gICAgICAgIGxhdDogbnVsbCxcbiAgICAgICAgbG9uOiBudWxsLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgbGFiZWxJZDogJ3NlbGVjdC1mcm9tLW1hcCcsXG4gICAgICAgICAgbGF5ZXI6ICdzZWxlY3RGcm9tTWFwJyxcbiAgICAgICAgICBhZGRyZXNzOiAnU2VsZWN0RnJvbU1hcCcsXG4gICAgICAgICAgbGF0OiBudWxsLFxuICAgICAgICAgIGxvbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgICAgIGNvb3JkaW5hdGVzOiBbXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXSk7XG4gIH1cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG59XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRQb3NpdGlvbklmRW1wdHkoaW5wdXQsIHBvc2l0aW9uKSB7XG4gIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnIHx8IGlucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnQ3VycmVudExvY2F0aW9uJyxcbiAgICAgICAgYWRkcmVzczogcG9zaXRpb24uYWRkcmVzcyxcbiAgICAgICAgbGF0OiBwb3NpdGlvbi5sYXQsXG4gICAgICAgIGxvbjogcG9zaXRpb24ubG9uLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgbGFiZWxJZDogJ3VzZS1vd24tcG9zaXRpb24nLFxuICAgICAgICAgIGxheWVyOiAnY3VycmVudFBvc2l0aW9uJyxcbiAgICAgICAgICBhZGRyZXNzOiBwb3NpdGlvbi5hZGRyZXNzLFxuICAgICAgICAgIGxhdDogcG9zaXRpb24ubGF0LFxuICAgICAgICAgIGxvbjogcG9zaXRpb24ubG9uLFxuICAgICAgICB9LFxuICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgIHR5cGU6ICdQb2ludCcsXG4gICAgICAgICAgY29vcmRpbmF0ZXM6IFtwb3NpdGlvbi5sb24sIHBvc2l0aW9uLmxhdF0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdEZyb21Pd25Mb2NhdGlvbnMoaW5wdXQpIHtcbiAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycgfHwgaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyxcbiAgICAgICAgYWRkcmVzczogJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnLFxuICAgICAgICBsYXQ6IG51bGwsXG4gICAgICAgIGxvbjogbnVsbCxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGxhYmVsSWQ6ICdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJyxcbiAgICAgICAgICBsYXllcjogJ293bkxvY2F0aW9ucycsXG4gICAgICAgICAgYWRkcmVzczogJ3NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnLFxuICAgICAgICAgIGxhdDogbnVsbCxcbiAgICAgICAgICBsb246IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIGdlb21ldHJ5OiB7XG4gICAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgICBjb29yZGluYXRlczogW10sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xufVxuXG5mdW5jdGlvbiBnZXRCYWNrU3VnZ2VzdGlvbigpIHtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXG4gICAge1xuICAgICAgdHlwZTogJ2JhY2snLFxuICAgICAgYWRkcmVzczogJ2JhY2snLFxuICAgICAgbGF0OiBudWxsLFxuICAgICAgbG9uOiBudWxsLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBsYWJlbElkOiAnYmFjaycsXG4gICAgICAgIGxheWVyOiAnYmFjaycsXG4gICAgICAgIGFkZHJlc3M6ICdiYWNrJyxcbiAgICAgICAgbGF0OiBudWxsLFxuICAgICAgICBsb246IG51bGwsXG4gICAgICB9LFxuICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgY29vcmRpbmF0ZXM6IFtdLFxuICAgICAgfSxcbiAgICB9LFxuICBdKTtcbn1cblxuZnVuY3Rpb24gZ2V0RmF2b3VyaXRlU3RvcHMoc3RvcHNBbmRTdGF0aW9ucywgaW5wdXQpIHtcbiAgcmV0dXJuIHN0b3BzQW5kU3RhdGlvbnMudGhlbihzdG9wcyA9PiB7XG4gICAgcmV0dXJuIGZpbHRlck1hdGNoaW5nVG9JbnB1dChzdG9wcywgaW5wdXQsIFtcbiAgICAgICdwcm9wZXJ0aWVzLm5hbWUnLFxuICAgICAgJ3Byb3BlcnRpZXMubmFtZScsXG4gICAgICAncHJvcGVydGllcy5hZGRyZXNzJyxcbiAgICBdKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldE9sZFNlYXJjaGVzKG9sZFNlYXJjaGVzLCBpbnB1dCwgZHJvcExheWVycykge1xuICBsZXQgbWF0Y2hpbmdPbGRTZWFyY2hlcyA9IGZpbHRlck1hdGNoaW5nVG9JbnB1dChvbGRTZWFyY2hlcywgaW5wdXQsIFtcbiAgICAncHJvcGVydGllcy5uYW1lJyxcbiAgICAncHJvcGVydGllcy5sYWJlbCcsXG4gICAgJ3Byb3BlcnRpZXMuYWRkcmVzcycsXG4gICAgJ3Byb3BlcnRpZXMuc2hvcnROYW1lJyxcbiAgICAncHJvcGVydGllcy5sb25nTmFtZScsXG4gIF0pO1xuICBpZiAoZHJvcExheWVycykge1xuICAgIC8vIGRvbid0IHdhbnQgdGhlc2VcbiAgICBtYXRjaGluZ09sZFNlYXJjaGVzID0gbWF0Y2hpbmdPbGRTZWFyY2hlcy5maWx0ZXIoXG4gICAgICBpdGVtID0+ICFkcm9wTGF5ZXJzLmluY2x1ZGVzKGl0ZW0ucHJvcGVydGllcy5sYXllciksXG4gICAgKTtcbiAgfVxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgIHRha2UobWF0Y2hpbmdPbGRTZWFyY2hlcywgMTApLm1hcChpdGVtID0+IHtcbiAgICAgIGNvbnN0IG5ld0l0ZW0gPSB7XG4gICAgICAgIC4uLml0ZW0sXG4gICAgICAgIHR5cGU6ICdPbGRTZWFyY2gnLFxuICAgICAgICB0aW1ldGFibGVDbGlja2VkOiBmYWxzZSwgLy8gcmVzZXQgbGF0ZXN0IHNlbGVjdGlvbiBhY3Rpb25cbiAgICAgICAgYXJyb3dDbGlja2VkOiBmYWxzZSxcbiAgICAgIH07XG4gICAgICBkZWxldGUgbmV3SXRlbS5wcm9wZXJ0aWVzLmNvbmZpZGVuY2U7XG4gICAgICByZXR1cm4gbmV3SXRlbTtcbiAgICB9KSxcbiAgKTtcbn1cblxuZnVuY3Rpb24gaGFzRmF2b3VyaXRlcyhjb250ZXh0LCBsb2NhdGlvbnMsIHN0b3BzKSB7XG4gIGNvbnN0IGZhdm91cml0ZUxvY2F0aW9ucyA9IGxvY2F0aW9ucyhjb250ZXh0KTtcbiAgaWYgKGZhdm91cml0ZUxvY2F0aW9ucyAmJiBmYXZvdXJpdGVMb2NhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IGZhdm91cml0ZVN0b3BzID0gc3RvcHMoY29udGV4dCk7XG4gIHJldHVybiBmYXZvdXJpdGVTdG9wcyAmJiBmYXZvdXJpdGVTdG9wcy5sZW5ndGggPiAwO1xufVxuXG5jb25zdCByb3V0ZUxheWVycyA9IFtcbiAgJ3JvdXRlLVRSQU0nLFxuICAncm91dGUtQlVTJyxcbiAgJ3JvdXRlLVJBSUwnLFxuICAncm91dGUtRkVSUlknLFxuICAncm91dGUtU1VCV0FZJyxcbiAgJ3JvdXRlLUFJUlBMQU5FJyxcbl07XG5jb25zdCBsb2NhdGlvbkxheWVycyA9IFsnZmF2b3VyaXRlUGxhY2UnLCAndmVudWUnLCAnYWRkcmVzcycsICdzdHJlZXQnXTtcbmNvbnN0IHBhcmtpbmdMYXllcnMgPSBbJ2NhcnBhcmsnLCAnYmlrZXBhcmsnXTtcbi8qKlxuICogRXhlY3V0ZXMgdGhlIHNlYXJjaFxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlYXJjaFJlc3VsdHMoXG4gIHRhcmdldHMsXG4gIHNvdXJjZXMsXG4gIHRyYW5zcG9ydE1vZGUsXG4gIHNlYXJjaENvbnRleHQsXG4gIGZpbHRlclJlc3VsdHMsXG4gIGdlb2NvZGluZ1NpemUsXG4gIHsgaW5wdXQgfSxcbiAgY2FsbGJhY2ssXG4gIHBhdGhPcHRzLFxuICByZWZQb2ludCxcbikge1xuICBjb25zdCB7XG4gICAgZ2V0UG9zaXRpb25zLFxuICAgIGdldEZhdm91cml0ZUxvY2F0aW9uczogbG9jYXRpb25zLFxuICAgIGdldE9sZFNlYXJjaGVzOiBwcmV2U2VhcmNoZXMsXG4gICAgZ2V0RmF2b3VyaXRlU3RvcHM6IHN0b3BzLFxuICAgIHBhcmtpbmdBcmVhU291cmNlcyxcbiAgICBnZXRMYW5ndWFnZSxcbiAgICBnZXRTdG9wQW5kU3RhdGlvbnNRdWVyeSxcbiAgICBnZXRGYXZvdXJpdGVCaWtlUmVudGFsU3RhdGlvbnNRdWVyeSxcbiAgICBnZXRGYXZvdXJpdGVCaWtlUmVudGFsU3RhdGlvbnMsXG4gICAgZ2V0RmF2b3VyaXRlUm91dGVzUXVlcnksXG4gICAgZ2V0RmF2b3VyaXRlUm91dGVzLFxuICAgIGdldFJvdXRlc1F1ZXJ5LFxuICAgIGNvbnRleHQsXG4gICAgaXNQZWxpYXNMb2NhdGlvbkF3YXJlOiBsb2NhdGlvbkF3YXJlLFxuICAgIG1pbmltYWxSZWdleHAsXG4gICAgbGluZVJlZ2V4cCxcbiAgICBVUkxfUEVMSUFTLFxuICAgIFVSTF9QRUxJQVNfUExBQ0UsXG4gICAgZmVlZElEcyxcbiAgICBnZW9jb2RpbmdTZWFyY2hQYXJhbXMsXG4gICAgZ2VvY29kaW5nU291cmNlcyxcbiAgICBnZXRGdXR1cmVSb3V0ZXMsXG4gICAgY2l0eUJpa2VOZXR3b3JrcyxcbiAgfSA9IHNlYXJjaENvbnRleHQ7XG4gIC8vIGlmIG5vIHRhcmdldHMgYXJlIHByb3ZpZGVkLCBzZWFyY2ggdGhlbSBhbGwuXG4gIGNvbnN0IGFsbFRhcmdldHMgPSAhdGFyZ2V0cyB8fCB0YXJnZXRzLmxlbmd0aCA9PT0gMDtcbiAgLy8gaWYgbm8gc291cmNlcyBhcmUgcHJvdmlkZWQsIHVzZSB0aGVtIGFsbC5cbiAgY29uc3QgYWxsU291cmNlcyA9ICFzb3VyY2VzIHx8IHNvdXJjZXMubGVuZ3RoID09PSAwO1xuICBjb25zdCBwb3NpdGlvbiA9IGdldFBvc2l0aW9ucyhjb250ZXh0KTtcbiAgY29uc3Qgc2VhcmNoQ29tcG9uZW50cyA9IFtdO1xuICBjb25zdCBzZWFyY2hlcyA9IHsgdHlwZTogJ2FsbCcsIHRlcm06IGlucHV0LCByZXN1bHRzOiBbXSB9O1xuICBjb25zdCBsYW5ndWFnZSA9IGdldExhbmd1YWdlKGNvbnRleHQpO1xuICBjb25zdCBmb2N1c1BvaW50ID1cbiAgICBsb2NhdGlvbkF3YXJlICYmIHJlZlBvaW50Py5sYXQgJiYgcmVmUG9pbnQ/LmxvblxuICAgICAgPyB7XG4gICAgICAgICAgLy8gUm91bmQgY29vcmRpbmF0ZXMgdG8gYXBwcm94IDEga20sIGluIG9yZGVyIHRvIGltcHJvdmUgY2FjaGluZ1xuICAgICAgICAgICdmb2N1cy5wb2ludC5sYXQnOiByZWZQb2ludC5sYXQudG9GaXhlZCgzKSxcbiAgICAgICAgICAnZm9jdXMucG9pbnQubG9uJzogcmVmUG9pbnQubG9uLnRvRml4ZWQoMyksXG4gICAgICAgIH1cbiAgICAgIDoge307XG4gIGNvbnN0IG1vZGUgPSB0cmFuc3BvcnRNb2RlID8gdHJhbnNwb3J0TW9kZS5zcGxpdCgnLScpWzFdIDogdW5kZWZpbmVkO1xuICBpZiAoXG4gICAgdGFyZ2V0cy5pbmNsdWRlcygnQ3VycmVudFBvc2l0aW9uJykgJiZcbiAgICBwb3NpdGlvbi5zdGF0dXMgIT09ICdnZW9sb2NhdGlvbi1ub3Qtc3VwcG9ydGVkJ1xuICApIHtcbiAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goZ2V0Q3VycmVudFBvc2l0aW9uSWZFbXB0eShpbnB1dCwgcG9zaXRpb24pKTtcbiAgfVxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdNYXBQb3NpdGlvbicpKSB7XG4gICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKHNlbGVjdFBvc2l0aW9uRm9tTWFwKGlucHV0KSk7XG4gIH1cbiAgaWYgKHRhcmdldHMuaW5jbHVkZXMoJ0Z1dHVyZVJvdXRlcycpKSB7XG4gICAgY29uc3QgaXRlbXMgPSBnZXRGdXR1cmVSb3V0ZXMoY29udGV4dCk7XG4gICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKHRha2UoaXRlbXMsIDMpKTtcbiAgfVxuICBpZiAoXG4gICAgdGFyZ2V0cy5pbmNsdWRlcygnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycpICYmXG4gICAgaGFzRmF2b3VyaXRlcyhjb250ZXh0LCBsb2NhdGlvbnMsIHN0b3BzKVxuICApIHtcbiAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goc2VsZWN0RnJvbU93bkxvY2F0aW9ucyhpbnB1dCkpO1xuICB9XG4gIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ0xvY2F0aW9ucycpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gZ2VvY29kaW5nU2VhcmNoUGFyYW1zO1xuICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgY29uc3QgZmF2b3VyaXRlTG9jYXRpb25zID0gbG9jYXRpb25zKGNvbnRleHQpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKGdldEZhdm91cml0ZUxvY2F0aW9ucyhmYXZvdXJpdGVMb2NhdGlvbnMsIGlucHV0KSk7XG4gICAgICBpZiAoc291cmNlcy5pbmNsdWRlcygnQmFjaycpKSB7XG4gICAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChnZXRCYWNrU3VnZ2VzdGlvbigpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdEYXRhc291cmNlJykpIHtcbiAgICAgIGNvbnN0IGdlb2NvZGluZ0xheWVycyA9IFsnc3RhdGlvbicsICd2ZW51ZScsICdhZGRyZXNzJywgJ3N0cmVldCddO1xuICAgICAgY29uc3QgZmVlZGlzID0gZmVlZElEcy5tYXAodiA9PiBgZ3RmcyR7dn1gKTtcbiAgICAgIGNvbnN0IGdlb3NvdXJjZXMgPSBnZW9jb2RpbmdTb3VyY2VzLmNvbmNhdChmZWVkaXMpLmpvaW4oJywnKTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0R2VvY29kaW5nUmVzdWx0cyhcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBzZWFyY2hQYXJhbXMsXG4gICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgZm9jdXNQb2ludCxcbiAgICAgICAgICBnZW9zb3VyY2VzLFxuICAgICAgICAgIFVSTF9QRUxJQVMsXG4gICAgICAgICAgbWluaW1hbFJlZ2V4cCxcbiAgICAgICAgICBnZW9jb2RpbmdMYXllcnMsXG4gICAgICAgICAgcmVmUG9pbnQsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdIaXN0b3J5JykpIHtcbiAgICAgIGNvbnN0IGxvY2F0aW9uSGlzdG9yeSA9IHByZXZTZWFyY2hlcyhjb250ZXh0LCAnZW5kcG9pbnQnKTtcbiAgICAgIGNvbnN0IGRyb3BMYXllcnMgPSBbXG4gICAgICAgICdjdXJyZW50UG9zaXRpb24nLFxuICAgICAgICAnc2VsZWN0RnJvbU1hcCcsXG4gICAgICAgICdmdXR1cmVSb3V0ZScsXG4gICAgICAgICdvd25Mb2NhdGlvbnMnLFxuICAgICAgICAnYmlrZVJlbnRhbFN0YXRpb24nLFxuICAgICAgICAnYmlrZXBhcmsnLFxuICAgICAgICAnY2FycGFyaycsXG4gICAgICAgICdzdG9wJyxcbiAgICAgICAgJ2JhY2snLFxuICAgICAgXTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5yb3V0ZUxheWVycyk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goZ2V0T2xkU2VhcmNoZXMobG9jYXRpb25IaXN0b3J5LCBpbnB1dCwgZHJvcExheWVycykpO1xuICAgIH1cbiAgfVxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdQYXJraW5nQXJlYXMnKSkge1xuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0RhdGFzb3VyY2UnKSkge1xuICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID1cbiAgICAgICAgZ2VvY29kaW5nU2l6ZSAmJiBnZW9jb2RpbmdTaXplICE9PSAxMCA/IHsgc2l6ZTogZ2VvY29kaW5nU2l6ZSB9IDoge307XG4gICAgICBjb25zdCBnZW9jb2RpbmdMYXllcnMgPSBbJ2NhcnBhcmsnLCAnYmlrZXBhcmsnXTtcbiAgICAgIGNvbnN0IGZlZWRJZHMgPSBwYXJraW5nQXJlYVNvdXJjZXMgPyBwYXJraW5nQXJlYVNvdXJjZXMuam9pbignLCcpIDogbnVsbDtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0R2VvY29kaW5nUmVzdWx0cyhcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBzZWFyY2hQYXJhbXMsXG4gICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgZm9jdXNQb2ludCxcbiAgICAgICAgICBmZWVkSWRzLFxuICAgICAgICAgIFVSTF9QRUxJQVMsXG4gICAgICAgICAgbWluaW1hbFJlZ2V4cCxcbiAgICAgICAgICBnZW9jb2RpbmdMYXllcnMsXG4gICAgICAgICkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICBpZiAoZmlsdGVyUmVzdWx0cykge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0hpc3RvcnknKSkge1xuICAgICAgY29uc3QgaGlzdG9yeSA9IHByZXZTZWFyY2hlcyhjb250ZXh0KTtcbiAgICAgIGNvbnN0IGRyb3BMYXllcnMgPSBbXG4gICAgICAgICdjdXJyZW50UG9zaXRpb24nLFxuICAgICAgICAnc2VsZWN0RnJvbU1hcCcsXG4gICAgICAgICdmdXR1cmVSb3V0ZScsXG4gICAgICAgICdvd25Mb2NhdGlvbnMnLFxuICAgICAgICAnZmF2b3VyaXRlUGxhY2UnLFxuICAgICAgICAnYmlrZXN0YXRpb24nLFxuICAgICAgICAnYmlrZVJlbnRhbFN0YXRpb24nLFxuICAgICAgICAnYmFjaycsXG4gICAgICBdO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnJvdXRlTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5sb2NhdGlvbkxheWVycyk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goZ2V0T2xkU2VhcmNoZXMoaGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpKTtcbiAgICB9XG4gIH1cblxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdTdG9wcycpKSB7XG4gICAgaWYgKHNvdXJjZXMuaW5jbHVkZXMoJ0Zhdm91cml0ZScpKSB7XG4gICAgICBjb25zdCBmYXZvdXJpdGVTdG9wcyA9IHN0b3BzKGNvbnRleHQpO1xuICAgICAgbGV0IHN0b3BzQW5kU3RhdGlvbnM7XG4gICAgICBpZiAoZmF2b3VyaXRlU3RvcHMuZXZlcnkoc3RvcCA9PiBzdG9wLnR5cGUgPT09ICdzdGF0aW9uJykpIHtcbiAgICAgICAgc3RvcHNBbmRTdGF0aW9ucyA9IGdldFN0b3BzRnJvbUdlb2NvZGluZyhcbiAgICAgICAgICBmYXZvdXJpdGVTdG9wcyxcbiAgICAgICAgICBVUkxfUEVMSUFTX1BMQUNFLFxuICAgICAgICApLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgaWYgKGZpbHRlclJlc3VsdHMpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdG9wc0FuZFN0YXRpb25zID0gZ2V0U3RvcEFuZFN0YXRpb25zUXVlcnkoZmF2b3VyaXRlU3RvcHMpXG4gICAgICAgICAgLnRoZW4oZmF2b3VyaXRlcyA9PlxuICAgICAgICAgICAgZ2V0U3RvcHNGcm9tR2VvY29kaW5nKGZhdm91cml0ZXMsIFVSTF9QRUxJQVNfUExBQ0UpLFxuICAgICAgICAgIClcbiAgICAgICAgICAudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJSZXN1bHRzKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goZ2V0RmF2b3VyaXRlU3RvcHMoc3RvcHNBbmRTdGF0aW9ucywgaW5wdXQpKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnRGF0YXNvdXJjZScpKSB7XG4gICAgICBjb25zdCBnZW9jb2RpbmdMYXllcnMgPSBbJ3N0b3AnLCAnc3RhdGlvbiddO1xuICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID1cbiAgICAgICAgZ2VvY29kaW5nU2l6ZSAmJiBnZW9jb2RpbmdTaXplICE9PSAxMCA/IHsgc2l6ZTogZ2VvY29kaW5nU2l6ZSB9IDoge307XG4gICAgICAvLyBhIGxpdHRsZSBoYWNrOiB3aGVuIHNlYXJjaGluZyBsb2NhdGlvbiBkYXRhLCBhdXRvbWF0aWNhbGx5IGRlZHVwZSBzdG9wc1xuICAgICAgLy8gdGhpcyBjb3VsZCBiZSBhIG5ldyBleHBsaWNpdCBwcm9wXG4gICAgICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdMb2NhdGlvbnMnKSkge1xuICAgICAgICBzZWFyY2hQYXJhbXMuZGVkdXBlc3RvcHMgPSAxO1xuICAgICAgfVxuICAgICAgY29uc3QgZmVlZGlzID0gZmVlZElEcy5tYXAodiA9PiBgZ3RmcyR7dn1gKS5qb2luKCcsJyk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGdldEdlb2NvZGluZ1Jlc3VsdHMoXG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgc2VhcmNoUGFyYW1zLFxuICAgICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAgIGZvY3VzUG9pbnQsXG4gICAgICAgICAgZmVlZGlzLFxuICAgICAgICAgIFVSTF9QRUxJQVMsXG4gICAgICAgICAgbWluaW1hbFJlZ2V4cCxcbiAgICAgICAgICBnZW9jb2RpbmdMYXllcnMsXG4gICAgICAgICkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICBpZiAoZmlsdGVyUmVzdWx0cykge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0hpc3RvcnknKSkge1xuICAgICAgY29uc3Qgc3RvcEhpc3RvcnkgPSBwcmV2U2VhcmNoZXMoY29udGV4dCkuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgICBpZiAoaXRlbS5wcm9wZXJ0aWVzLmdpZCkge1xuICAgICAgICAgIHJldHVybiBpdGVtLnByb3BlcnRpZXMuZ2lkLmluY2x1ZGVzKCdHVEZTOicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBkcm9wTGF5ZXJzID0gW1xuICAgICAgICAnY3VycmVudFBvc2l0aW9uJyxcbiAgICAgICAgJ3NlbGVjdEZyb21NYXAnLFxuICAgICAgICAnZnV0dXJlUm91dGUnLFxuICAgICAgICAnb3duTG9jYXRpb25zJyxcbiAgICAgICAgJ2Zhdm91cml0ZVBsYWNlJyxcbiAgICAgICAgJ2Jpa2VSZW50YWxTdGF0aW9uJyxcbiAgICAgICAgJ2JhY2snLFxuICAgICAgXTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5yb3V0ZUxheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ubG9jYXRpb25MYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnBhcmtpbmdMYXllcnMpO1xuICAgICAgaWYgKHRyYW5zcG9ydE1vZGUpIHtcbiAgICAgICAgaWYgKHRyYW5zcG9ydE1vZGUgIT09ICdyb3V0ZS1DSVRZQklLRScpIHtcbiAgICAgICAgICBkcm9wTGF5ZXJzLnB1c2goJ2Jpa2VSZW50YWxTdGF0aW9uJyk7XG4gICAgICAgICAgZHJvcExheWVycy5wdXNoKCdiaWtlc3RhdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgICBnZXRPbGRTZWFyY2hlcyhzdG9wSGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpLnRoZW4ocmVzdWx0ID0+XG4gICAgICAgICAgICBmaWx0ZXJSZXN1bHRzID8gZmlsdGVyUmVzdWx0cyhyZXN1bHQsIG1vZGUpIDogcmVzdWx0LFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goZ2V0T2xkU2VhcmNoZXMoc3RvcEhpc3RvcnksIGlucHV0LCBkcm9wTGF5ZXJzKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnUm91dGVzJykpIHtcbiAgICBpZiAoc291cmNlcy5pbmNsdWRlcygnRmF2b3VyaXRlJykpIHtcbiAgICAgIGNvbnN0IGZhdm91cml0ZVJvdXRlcyA9IGdldEZhdm91cml0ZVJvdXRlcyhjb250ZXh0KTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0RmF2b3VyaXRlUm91dGVzUXVlcnkoXG4gICAgICAgICAgZmF2b3VyaXRlUm91dGVzLFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIG1vZGUsXG4gICAgICAgICAgcGF0aE9wdHMsXG4gICAgICAgICkudGhlbihyZXN1bHQgPT5cbiAgICAgICAgICBmaWx0ZXJSZXN1bHRzID8gZmlsdGVyUmVzdWx0cyhyZXN1bHQsIG1vZGUsICdSb3V0ZXMnKSA6IHJlc3VsdCxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgIGdldFJvdXRlc1F1ZXJ5KGlucHV0LCBmZWVkSURzLCB0cmFuc3BvcnRNb2RlLCBwYXRoT3B0cykudGhlbihyZXN1bHQgPT5cbiAgICAgICAgZmlsdGVyUmVzdWx0cyA/IGZpbHRlclJlc3VsdHMocmVzdWx0LCBtb2RlLCAnUm91dGVzJykgOiByZXN1bHQsXG4gICAgICApLFxuICAgICk7XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnSGlzdG9yeScpKSB7XG4gICAgICBjb25zdCByb3V0ZUhpc3RvcnkgPSBwcmV2U2VhcmNoZXMoY29udGV4dCk7XG4gICAgICBjb25zdCBkcm9wTGF5ZXJzID0gW1xuICAgICAgICAnY3VycmVudFBvc2l0aW9uJyxcbiAgICAgICAgJ3NlbGVjdEZyb21NYXAnLFxuICAgICAgICAnZnV0dXJlUm91dGUnLFxuICAgICAgICAnZmF2b3VyaXRlUGxhY2UnLFxuICAgICAgICAnc3RvcCcsXG4gICAgICAgICdzdGF0aW9uJyxcbiAgICAgICAgJ2Jpa2VwYXJrJyxcbiAgICAgICAgJ2NhcnBhcmsnLFxuICAgICAgICAnb3duTG9jYXRpb25zJyxcbiAgICAgICAgJ2JhY2snLFxuICAgICAgXTtcbiAgICAgIGlmICh0cmFuc3BvcnRNb2RlKSB7XG4gICAgICAgIGlmICh0cmFuc3BvcnRNb2RlICE9PSAncm91dGUtQ0lUWUJJS0UnKSB7XG4gICAgICAgICAgZHJvcExheWVycy5wdXNoKCdiaWtlUmVudGFsU3RhdGlvbicpO1xuICAgICAgICAgIGRyb3BMYXllcnMucHVzaCgnYmlrZXN0YXRpb24nKTtcbiAgICAgICAgfVxuICAgICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucm91dGVMYXllcnMuZmlsdGVyKGkgPT4gIShpID09PSB0cmFuc3BvcnRNb2RlKSkpO1xuICAgICAgfVxuICAgICAgZHJvcExheWVycy5wdXNoKC4uLmxvY2F0aW9uTGF5ZXJzKTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0T2xkU2VhcmNoZXMocm91dGVIaXN0b3J5LCBpbnB1dCwgZHJvcExheWVycykudGhlbihyZXN1bHRzID0+XG4gICAgICAgICAgZmlsdGVyUmVzdWx0cyA/IGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSwgJ1JvdXRlcycpIDogcmVzdWx0cyxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ0Jpa2VSZW50YWxTdGF0aW9ucycpKSB7XG4gICAgaWYgKHNvdXJjZXMuaW5jbHVkZXMoJ0Zhdm91cml0ZScpKSB7XG4gICAgICBjb25zdCBmYXZvdXJpdGVCaWtlU3RhdGlvbnMgPSBnZXRGYXZvdXJpdGVCaWtlUmVudGFsU3RhdGlvbnMoY29udGV4dCk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGdldEZhdm91cml0ZUJpa2VSZW50YWxTdGF0aW9uc1F1ZXJ5KGZhdm91cml0ZUJpa2VTdGF0aW9ucywgaW5wdXQpLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnRGF0YXNvdXJjZScpKSB7XG4gICAgICBjb25zdCBnZW9jb2RpbmdMYXllcnMgPSBbJ2Jpa2VzdGF0aW9uJ107XG4gICAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSB7XG4gICAgICAgIHNpemU6IGdlb2NvZGluZ1NpemUsXG4gICAgICB9O1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBmb2N1c1BvaW50LFxuICAgICAgICAgIGNpdHlCaWtlTmV0d29ya3Muam9pbignLCcpLFxuICAgICAgICAgIFVSTF9QRUxJQVMsXG4gICAgICAgICAgbWluaW1hbFJlZ2V4cCxcbiAgICAgICAgICBnZW9jb2RpbmdMYXllcnMsXG4gICAgICAgICkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICBpZiAoZmlsdGVyUmVzdWx0cykge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSwgJ0Jpa2VSZW50YWxTdGF0aW9ucycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNlYXJjaFJlc3VsdHNQcm9taXNlID0gUHJvbWlzZS5hbGwoc2VhcmNoQ29tcG9uZW50cylcbiAgICAudGhlbihmbGF0dGVuKVxuICAgIC50aGVuKHVuaXFCeUxhYmVsKVxuICAgIC50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgc2VhcmNoZXMucmVzdWx0cyA9IHJlc3VsdHM7XG4gICAgfSlcbiAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgIHNlYXJjaGVzLmVycm9yID0gZXJyO1xuICAgIH0pO1xuICBzZWFyY2hSZXN1bHRzUHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICBjYWxsYmFjayh7XG4gICAgICAuLi5zZWFyY2hlcyxcbiAgICAgIHJlc3VsdHM6IHNvcnRTZWFyY2hSZXN1bHRzKGxpbmVSZWdleHAsIHNlYXJjaGVzLnJlc3VsdHMsIGlucHV0KSxcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNvbnN0IGRlYm91bmNlZFNlYXJjaCA9IGRlYm91bmNlKGdldFNlYXJjaFJlc3VsdHMsIDMwMCwge1xuICBsZWFkaW5nOiB0cnVlLFxufSk7XG5cbmV4cG9ydCBjb25zdCBleGVjdXRlU2VhcmNoID0gKFxuICB0YXJnZXRzLFxuICBzb3VyY2VzLFxuICB0cmFuc3BvcnRNb2RlLFxuICBzZWFyY2hDb250ZXh0LFxuICBmaWx0ZXJSZXN1bHRzLFxuICBnZW9jb2RpbmdTaXplLFxuICBkYXRhLFxuICBjYWxsYmFjayxcbiAgcGF0aE9wdHMsXG4gIHJlZlBvaW50LFxuKSA9PiB7XG4gIGNhbGxiYWNrKG51bGwpOyAvLyBUaGlzIG1lYW5zICd3ZSBhcmUgc2VhcmNoaW5nJ1xuICBkZWJvdW5jZWRTZWFyY2goXG4gICAgdGFyZ2V0cyxcbiAgICBzb3VyY2VzLFxuICAgIHRyYW5zcG9ydE1vZGUsXG4gICAgc2VhcmNoQ29udGV4dCxcbiAgICBmaWx0ZXJSZXN1bHRzLFxuICAgIGdlb2NvZGluZ1NpemUsXG4gICAgZGF0YSxcbiAgICBjYWxsYmFjayxcbiAgICBwYXRoT3B0cyxcbiAgICByZWZQb2ludCxcbiAgKTtcbn07XG4iLCIvLyEgbW9tZW50LmpzXG4vLyEgdmVyc2lvbiA6IDIuMjkuMVxuLy8hIGF1dGhvcnMgOiBUaW0gV29vZCwgSXNrcmVuIENoZXJuZXYsIE1vbWVudC5qcyBjb250cmlidXRvcnNcbi8vISBsaWNlbnNlIDogTUlUXG4vLyEgbW9tZW50anMuY29tXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDpcbiAgICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOlxuICAgIGdsb2JhbC5tb21lbnQgPSBmYWN0b3J5KClcbn0odGhpcywgKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIGhvb2tDYWxsYmFjaztcblxuICAgIGZ1bmN0aW9uIGhvb2tzKCkge1xuICAgICAgICByZXR1cm4gaG9va0NhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBpcyBkb25lIHRvIHJlZ2lzdGVyIHRoZSBtZXRob2QgY2FsbGVkIHdpdGggbW9tZW50KClcbiAgICAvLyB3aXRob3V0IGNyZWF0aW5nIGNpcmN1bGFyIGRlcGVuZGVuY2llcy5cbiAgICBmdW5jdGlvbiBzZXRIb29rQ2FsbGJhY2soY2FsbGJhY2spIHtcbiAgICAgICAgaG9va0NhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNBcnJheShpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBBcnJheSB8fFxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgQXJyYXldJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzT2JqZWN0KGlucHV0KSB7XG4gICAgICAgIC8vIElFOCB3aWxsIHRyZWF0IHVuZGVmaW5lZCBhbmQgbnVsbCBhcyBvYmplY3QgaWYgaXQgd2Fzbid0IGZvclxuICAgICAgICAvLyBpbnB1dCAhPSBudWxsXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpbnB1dCAhPSBudWxsICYmXG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBPYmplY3RdJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhc093blByb3AoYSwgYikge1xuICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsIGIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzT2JqZWN0RW1wdHkob2JqKSB7XG4gICAgICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikubGVuZ3RoID09PSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGs7XG4gICAgICAgICAgICBmb3IgKGsgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc093blByb3Aob2JqLCBrKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1VuZGVmaW5lZChpbnB1dCkge1xuICAgICAgICByZXR1cm4gaW5wdXQgPT09IHZvaWQgMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc051bWJlcihpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdHlwZW9mIGlucHV0ID09PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgTnVtYmVyXSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0RhdGUoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlucHV0IGluc3RhbmNlb2YgRGF0ZSB8fFxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgRGF0ZV0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFwKGFyciwgZm4pIHtcbiAgICAgICAgdmFyIHJlcyA9IFtdLFxuICAgICAgICAgICAgaTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyci5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgcmVzLnB1c2goZm4oYXJyW2ldLCBpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHRlbmQoYSwgYikge1xuICAgICAgICBmb3IgKHZhciBpIGluIGIpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGIsIGkpKSB7XG4gICAgICAgICAgICAgICAgYVtpXSA9IGJbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzT3duUHJvcChiLCAndG9TdHJpbmcnKSkge1xuICAgICAgICAgICAgYS50b1N0cmluZyA9IGIudG9TdHJpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzT3duUHJvcChiLCAndmFsdWVPZicpKSB7XG4gICAgICAgICAgICBhLnZhbHVlT2YgPSBiLnZhbHVlT2Y7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVVVEMoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsT3JVVEMoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QsIHRydWUpLnV0YygpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlZmF1bHRQYXJzaW5nRmxhZ3MoKSB7XG4gICAgICAgIC8vIFdlIG5lZWQgdG8gZGVlcCBjbG9uZSB0aGlzIG9iamVjdC5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVtcHR5OiBmYWxzZSxcbiAgICAgICAgICAgIHVudXNlZFRva2VuczogW10sXG4gICAgICAgICAgICB1bnVzZWRJbnB1dDogW10sXG4gICAgICAgICAgICBvdmVyZmxvdzogLTIsXG4gICAgICAgICAgICBjaGFyc0xlZnRPdmVyOiAwLFxuICAgICAgICAgICAgbnVsbElucHV0OiBmYWxzZSxcbiAgICAgICAgICAgIGludmFsaWRFcmE6IG51bGwsXG4gICAgICAgICAgICBpbnZhbGlkTW9udGg6IG51bGwsXG4gICAgICAgICAgICBpbnZhbGlkRm9ybWF0OiBmYWxzZSxcbiAgICAgICAgICAgIHVzZXJJbnZhbGlkYXRlZDogZmFsc2UsXG4gICAgICAgICAgICBpc286IGZhbHNlLFxuICAgICAgICAgICAgcGFyc2VkRGF0ZVBhcnRzOiBbXSxcbiAgICAgICAgICAgIGVyYTogbnVsbCxcbiAgICAgICAgICAgIG1lcmlkaWVtOiBudWxsLFxuICAgICAgICAgICAgcmZjMjgyMjogZmFsc2UsXG4gICAgICAgICAgICB3ZWVrZGF5TWlzbWF0Y2g6IGZhbHNlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFBhcnNpbmdGbGFncyhtKSB7XG4gICAgICAgIGlmIChtLl9wZiA9PSBudWxsKSB7XG4gICAgICAgICAgICBtLl9wZiA9IGRlZmF1bHRQYXJzaW5nRmxhZ3MoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbS5fcGY7XG4gICAgfVxuXG4gICAgdmFyIHNvbWU7XG4gICAgaWYgKEFycmF5LnByb3RvdHlwZS5zb21lKSB7XG4gICAgICAgIHNvbWUgPSBBcnJheS5wcm90b3R5cGUuc29tZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBzb21lID0gZnVuY3Rpb24gKGZ1bikge1xuICAgICAgICAgICAgdmFyIHQgPSBPYmplY3QodGhpcyksXG4gICAgICAgICAgICAgICAgbGVuID0gdC5sZW5ndGggPj4+IDAsXG4gICAgICAgICAgICAgICAgaTtcblxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgaW4gdCAmJiBmdW4uY2FsbCh0aGlzLCB0W2ldLCBpLCB0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1ZhbGlkKG0pIHtcbiAgICAgICAgaWYgKG0uX2lzVmFsaWQgPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGZsYWdzID0gZ2V0UGFyc2luZ0ZsYWdzKG0pLFxuICAgICAgICAgICAgICAgIHBhcnNlZFBhcnRzID0gc29tZS5jYWxsKGZsYWdzLnBhcnNlZERhdGVQYXJ0cywgZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkgIT0gbnVsbDtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBpc05vd1ZhbGlkID1cbiAgICAgICAgICAgICAgICAgICAgIWlzTmFOKG0uX2QuZ2V0VGltZSgpKSAmJlxuICAgICAgICAgICAgICAgICAgICBmbGFncy5vdmVyZmxvdyA8IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgIWZsYWdzLmVtcHR5ICYmXG4gICAgICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkRXJhICYmXG4gICAgICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkTW9udGggJiZcbiAgICAgICAgICAgICAgICAgICAgIWZsYWdzLmludmFsaWRXZWVrZGF5ICYmXG4gICAgICAgICAgICAgICAgICAgICFmbGFncy53ZWVrZGF5TWlzbWF0Y2ggJiZcbiAgICAgICAgICAgICAgICAgICAgIWZsYWdzLm51bGxJbnB1dCAmJlxuICAgICAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZEZvcm1hdCAmJlxuICAgICAgICAgICAgICAgICAgICAhZmxhZ3MudXNlckludmFsaWRhdGVkICYmXG4gICAgICAgICAgICAgICAgICAgICghZmxhZ3MubWVyaWRpZW0gfHwgKGZsYWdzLm1lcmlkaWVtICYmIHBhcnNlZFBhcnRzKSk7XG5cbiAgICAgICAgICAgIGlmIChtLl9zdHJpY3QpIHtcbiAgICAgICAgICAgICAgICBpc05vd1ZhbGlkID1cbiAgICAgICAgICAgICAgICAgICAgaXNOb3dWYWxpZCAmJlxuICAgICAgICAgICAgICAgICAgICBmbGFncy5jaGFyc0xlZnRPdmVyID09PSAwICYmXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLnVudXNlZFRva2Vucy5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYmlnSG91ciA9PT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoT2JqZWN0LmlzRnJvemVuID09IG51bGwgfHwgIU9iamVjdC5pc0Zyb3plbihtKSkge1xuICAgICAgICAgICAgICAgIG0uX2lzVmFsaWQgPSBpc05vd1ZhbGlkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNOb3dWYWxpZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbS5faXNWYWxpZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnZhbGlkKGZsYWdzKSB7XG4gICAgICAgIHZhciBtID0gY3JlYXRlVVRDKE5hTik7XG4gICAgICAgIGlmIChmbGFncyAhPSBudWxsKSB7XG4gICAgICAgICAgICBleHRlbmQoZ2V0UGFyc2luZ0ZsYWdzKG0pLCBmbGFncyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MobSkudXNlckludmFsaWRhdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIC8vIFBsdWdpbnMgdGhhdCBhZGQgcHJvcGVydGllcyBzaG91bGQgYWxzbyBhZGQgdGhlIGtleSBoZXJlIChudWxsIHZhbHVlKSxcbiAgICAvLyBzbyB3ZSBjYW4gcHJvcGVybHkgY2xvbmUgb3Vyc2VsdmVzLlxuICAgIHZhciBtb21lbnRQcm9wZXJ0aWVzID0gKGhvb2tzLm1vbWVudFByb3BlcnRpZXMgPSBbXSksXG4gICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcblxuICAgIGZ1bmN0aW9uIGNvcHlDb25maWcodG8sIGZyb20pIHtcbiAgICAgICAgdmFyIGksIHByb3AsIHZhbDtcblxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2lzQU1vbWVudE9iamVjdCkpIHtcbiAgICAgICAgICAgIHRvLl9pc0FNb21lbnRPYmplY3QgPSBmcm9tLl9pc0FNb21lbnRPYmplY3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9pKSkge1xuICAgICAgICAgICAgdG8uX2kgPSBmcm9tLl9pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fZikpIHtcbiAgICAgICAgICAgIHRvLl9mID0gZnJvbS5fZjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2wpKSB7XG4gICAgICAgICAgICB0by5fbCA9IGZyb20uX2w7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9zdHJpY3QpKSB7XG4gICAgICAgICAgICB0by5fc3RyaWN0ID0gZnJvbS5fc3RyaWN0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fdHptKSkge1xuICAgICAgICAgICAgdG8uX3R6bSA9IGZyb20uX3R6bTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2lzVVRDKSkge1xuICAgICAgICAgICAgdG8uX2lzVVRDID0gZnJvbS5faXNVVEM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9vZmZzZXQpKSB7XG4gICAgICAgICAgICB0by5fb2Zmc2V0ID0gZnJvbS5fb2Zmc2V0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fcGYpKSB7XG4gICAgICAgICAgICB0by5fcGYgPSBnZXRQYXJzaW5nRmxhZ3MoZnJvbSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9sb2NhbGUpKSB7XG4gICAgICAgICAgICB0by5fbG9jYWxlID0gZnJvbS5fbG9jYWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vbWVudFByb3BlcnRpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG1vbWVudFByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwcm9wID0gbW9tZW50UHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgICAgICB2YWwgPSBmcm9tW3Byb3BdO1xuICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQodmFsKSkge1xuICAgICAgICAgICAgICAgICAgICB0b1twcm9wXSA9IHZhbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdG87XG4gICAgfVxuXG4gICAgLy8gTW9tZW50IHByb3RvdHlwZSBvYmplY3RcbiAgICBmdW5jdGlvbiBNb21lbnQoY29uZmlnKSB7XG4gICAgICAgIGNvcHlDb25maWcodGhpcywgY29uZmlnKTtcbiAgICAgICAgdGhpcy5fZCA9IG5ldyBEYXRlKGNvbmZpZy5fZCAhPSBudWxsID8gY29uZmlnLl9kLmdldFRpbWUoKSA6IE5hTik7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2QgPSBuZXcgRGF0ZShOYU4pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFByZXZlbnQgaW5maW5pdGUgbG9vcCBpbiBjYXNlIHVwZGF0ZU9mZnNldCBjcmVhdGVzIG5ldyBtb21lbnRcbiAgICAgICAgLy8gb2JqZWN0cy5cbiAgICAgICAgaWYgKHVwZGF0ZUluUHJvZ3Jlc3MgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB1cGRhdGVJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTW9tZW50KG9iaikge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgb2JqIGluc3RhbmNlb2YgTW9tZW50IHx8IChvYmogIT0gbnVsbCAmJiBvYmouX2lzQU1vbWVudE9iamVjdCAhPSBudWxsKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdhcm4obXNnKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGhvb2tzLnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncyA9PT0gZmFsc2UgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgY29uc29sZS53YXJuXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdEZXByZWNhdGlvbiB3YXJuaW5nOiAnICsgbXNnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlcHJlY2F0ZShtc2csIGZuKSB7XG4gICAgICAgIHZhciBmaXJzdFRpbWUgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiBleHRlbmQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyKG51bGwsIG1zZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmlyc3RUaW1lKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgICAgICAgICAgICAgYXJnLFxuICAgICAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgICAgICBrZXk7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBhcmcgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbaV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgKz0gJ1xcblsnICsgaSArICddICc7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGtleSBpbiBhcmd1bWVudHNbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzT3duUHJvcChhcmd1bWVudHNbMF0sIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnICs9IGtleSArICc6ICcgKyBhcmd1bWVudHNbMF1ba2V5XSArICcsICc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJnLnNsaWNlKDAsIC0yKTsgLy8gUmVtb3ZlIHRyYWlsaW5nIGNvbW1hIGFuZCBzcGFjZVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChhcmcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgICAgICAgICBtc2cgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbkFyZ3VtZW50czogJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzKS5qb2luKCcnKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRXJyb3IoKS5zdGFja1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZmlyc3RUaW1lID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgZm4pO1xuICAgIH1cblxuICAgIHZhciBkZXByZWNhdGlvbnMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGRlcHJlY2F0ZVNpbXBsZShuYW1lLCBtc2cpIHtcbiAgICAgICAgaWYgKGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciAhPSBudWxsKSB7XG4gICAgICAgICAgICBob29rcy5kZXByZWNhdGlvbkhhbmRsZXIobmFtZSwgbXNnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRlcHJlY2F0aW9uc1tuYW1lXSkge1xuICAgICAgICAgICAgd2Fybihtc2cpO1xuICAgICAgICAgICAgZGVwcmVjYXRpb25zW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhvb2tzLnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncyA9IGZhbHNlO1xuICAgIGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciA9IG51bGw7XG5cbiAgICBmdW5jdGlvbiBpc0Z1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAodHlwZW9mIEZ1bmN0aW9uICE9PSAndW5kZWZpbmVkJyAmJiBpbnB1dCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB8fFxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldChjb25maWcpIHtcbiAgICAgICAgdmFyIHByb3AsIGk7XG4gICAgICAgIGZvciAoaSBpbiBjb25maWcpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGNvbmZpZywgaSkpIHtcbiAgICAgICAgICAgICAgICBwcm9wID0gY29uZmlnW2ldO1xuICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbaV0gPSBwcm9wO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbJ18nICsgaV0gPSBwcm9wO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jb25maWcgPSBjb25maWc7XG4gICAgICAgIC8vIExlbmllbnQgb3JkaW5hbCBwYXJzaW5nIGFjY2VwdHMganVzdCBhIG51bWJlciBpbiBhZGRpdGlvbiB0b1xuICAgICAgICAvLyBudW1iZXIgKyAocG9zc2libHkpIHN0dWZmIGNvbWluZyBmcm9tIF9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlLlxuICAgICAgICAvLyBUT0RPOiBSZW1vdmUgXCJvcmRpbmFsUGFyc2VcIiBmYWxsYmFjayBpbiBuZXh0IG1ham9yIHJlbGVhc2UuXG4gICAgICAgIHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICh0aGlzLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlLnNvdXJjZSB8fCB0aGlzLl9vcmRpbmFsUGFyc2Uuc291cmNlKSArXG4gICAgICAgICAgICAgICAgJ3wnICtcbiAgICAgICAgICAgICAgICAvXFxkezEsMn0vLnNvdXJjZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNoaWxkQ29uZmlnKSB7XG4gICAgICAgIHZhciByZXMgPSBleHRlbmQoe30sIHBhcmVudENvbmZpZyksXG4gICAgICAgICAgICBwcm9wO1xuICAgICAgICBmb3IgKHByb3AgaW4gY2hpbGRDb25maWcpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGNoaWxkQ29uZmlnLCBwcm9wKSkge1xuICAgICAgICAgICAgICAgIGlmIChpc09iamVjdChwYXJlbnRDb25maWdbcHJvcF0pICYmIGlzT2JqZWN0KGNoaWxkQ29uZmlnW3Byb3BdKSkge1xuICAgICAgICAgICAgICAgICAgICByZXNbcHJvcF0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKHJlc1twcm9wXSwgcGFyZW50Q29uZmlnW3Byb3BdKTtcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKHJlc1twcm9wXSwgY2hpbGRDb25maWdbcHJvcF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGRDb25maWdbcHJvcF0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXNbcHJvcF0gPSBjaGlsZENvbmZpZ1twcm9wXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmVzW3Byb3BdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKHByb3AgaW4gcGFyZW50Q29uZmlnKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgaGFzT3duUHJvcChwYXJlbnRDb25maWcsIHByb3ApICYmXG4gICAgICAgICAgICAgICAgIWhhc093blByb3AoY2hpbGRDb25maWcsIHByb3ApICYmXG4gICAgICAgICAgICAgICAgaXNPYmplY3QocGFyZW50Q29uZmlnW3Byb3BdKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIGNoYW5nZXMgdG8gcHJvcGVydGllcyBkb24ndCBtb2RpZnkgcGFyZW50IGNvbmZpZ1xuICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IGV4dGVuZCh7fSwgcmVzW3Byb3BdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIExvY2FsZShjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnNldChjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGtleXM7XG5cbiAgICBpZiAoT2JqZWN0LmtleXMpIHtcbiAgICAgICAga2V5cyA9IE9iamVjdC5rZXlzO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGtleXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgICAgICByZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoaSBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzT3duUHJvcChvYmosIGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKGkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRDYWxlbmRhciA9IHtcbiAgICAgICAgc2FtZURheTogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW1RvbW9ycm93IGF0XSBMVCcsXG4gICAgICAgIG5leHRXZWVrOiAnZGRkZCBbYXRdIExUJyxcbiAgICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgbGFzdFdlZWs6ICdbTGFzdF0gZGRkZCBbYXRdIExUJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gY2FsZW5kYXIoa2V5LCBtb20sIG5vdykge1xuICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fY2FsZW5kYXJba2V5XSB8fCB0aGlzLl9jYWxlbmRhclsnc2FtZUVsc2UnXTtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24ob3V0cHV0KSA/IG91dHB1dC5jYWxsKG1vbSwgbm93KSA6IG91dHB1dDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB6ZXJvRmlsbChudW1iZXIsIHRhcmdldExlbmd0aCwgZm9yY2VTaWduKSB7XG4gICAgICAgIHZhciBhYnNOdW1iZXIgPSAnJyArIE1hdGguYWJzKG51bWJlciksXG4gICAgICAgICAgICB6ZXJvc1RvRmlsbCA9IHRhcmdldExlbmd0aCAtIGFic051bWJlci5sZW5ndGgsXG4gICAgICAgICAgICBzaWduID0gbnVtYmVyID49IDA7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoc2lnbiA/IChmb3JjZVNpZ24gPyAnKycgOiAnJykgOiAnLScpICtcbiAgICAgICAgICAgIE1hdGgucG93KDEwLCBNYXRoLm1heCgwLCB6ZXJvc1RvRmlsbCkpLnRvU3RyaW5nKCkuc3Vic3RyKDEpICtcbiAgICAgICAgICAgIGFic051bWJlclxuICAgICAgICApO1xuICAgIH1cblxuICAgIHZhciBmb3JtYXR0aW5nVG9rZW5zID0gLyhcXFtbXlxcW10qXFxdKXwoXFxcXCk/KFtIaF1tbShzcyk/fE1vfE1NP00/TT98RG98REREb3xERD9EP0Q/fGRkZD9kP3xkbz98d1tvfHddP3xXW298V10/fFFvP3xOezEsNX18WVlZWVlZfFlZWVlZfFlZWVl8WVl8eXsyLDR9fHlvP3xnZyhnZ2c/KT98R0coR0dHPyk/fGV8RXxhfEF8aGg/fEhIP3xraz98bW0/fHNzP3xTezEsOX18eHxYfHp6P3xaWj98LikvZyxcbiAgICAgICAgbG9jYWxGb3JtYXR0aW5nVG9rZW5zID0gLyhcXFtbXlxcW10qXFxdKXwoXFxcXCk/KExUU3xMVHxMTD9MP0w/fGx7MSw0fSkvZyxcbiAgICAgICAgZm9ybWF0RnVuY3Rpb25zID0ge30sXG4gICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zID0ge307XG5cbiAgICAvLyB0b2tlbjogICAgJ00nXG4gICAgLy8gcGFkZGVkOiAgIFsnTU0nLCAyXVxuICAgIC8vIG9yZGluYWw6ICAnTW8nXG4gICAgLy8gY2FsbGJhY2s6IGZ1bmN0aW9uICgpIHsgdGhpcy5tb250aCgpICsgMSB9XG4gICAgZnVuY3Rpb24gYWRkRm9ybWF0VG9rZW4odG9rZW4sIHBhZGRlZCwgb3JkaW5hbCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZ1bmMgPSBjYWxsYmFjaztcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGJhY2tdKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnNbdG9rZW5dID0gZnVuYztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFkZGVkKSB7XG4gICAgICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9uc1twYWRkZWRbMF1dID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB6ZXJvRmlsbChmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHBhZGRlZFsxXSwgcGFkZGVkWzJdKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9yZGluYWwpIHtcbiAgICAgICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zW29yZGluYWxdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5vcmRpbmFsKFxuICAgICAgICAgICAgICAgICAgICBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgICAgICAgICAgICAgIHRva2VuXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW1vdmVGb3JtYXR0aW5nVG9rZW5zKGlucHV0KSB7XG4gICAgICAgIGlmIChpbnB1dC5tYXRjaCgvXFxbW1xcc1xcU10vKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL15cXFt8XFxdJC9nLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL1xcXFwvZywgJycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VGb3JtYXRGdW5jdGlvbihmb3JtYXQpIHtcbiAgICAgICAgdmFyIGFycmF5ID0gZm9ybWF0Lm1hdGNoKGZvcm1hdHRpbmdUb2tlbnMpLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGxlbmd0aDtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBhcnJheS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGZvcm1hdFRva2VuRnVuY3Rpb25zW2FycmF5W2ldXSkge1xuICAgICAgICAgICAgICAgIGFycmF5W2ldID0gZm9ybWF0VG9rZW5GdW5jdGlvbnNbYXJyYXlbaV1dO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHJlbW92ZUZvcm1hdHRpbmdUb2tlbnMoYXJyYXlbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtb20pIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSAnJyxcbiAgICAgICAgICAgICAgICBpO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IGlzRnVuY3Rpb24oYXJyYXlbaV0pXG4gICAgICAgICAgICAgICAgICAgID8gYXJyYXlbaV0uY2FsbChtb20sIGZvcm1hdClcbiAgICAgICAgICAgICAgICAgICAgOiBhcnJheVtpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gZm9ybWF0IGRhdGUgdXNpbmcgbmF0aXZlIGRhdGUgb2JqZWN0XG4gICAgZnVuY3Rpb24gZm9ybWF0TW9tZW50KG0sIGZvcm1hdCkge1xuICAgICAgICBpZiAoIW0uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbS5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcm1hdCA9IGV4cGFuZEZvcm1hdChmb3JtYXQsIG0ubG9jYWxlRGF0YSgpKTtcbiAgICAgICAgZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0gPVxuICAgICAgICAgICAgZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0gfHwgbWFrZUZvcm1hdEZ1bmN0aW9uKGZvcm1hdCk7XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdKG0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4cGFuZEZvcm1hdChmb3JtYXQsIGxvY2FsZSkge1xuICAgICAgICB2YXIgaSA9IDU7XG5cbiAgICAgICAgZnVuY3Rpb24gcmVwbGFjZUxvbmdEYXRlRm9ybWF0VG9rZW5zKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLmxvbmdEYXRlRm9ybWF0KGlucHV0KSB8fCBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy5sYXN0SW5kZXggPSAwO1xuICAgICAgICB3aGlsZSAoaSA+PSAwICYmIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKFxuICAgICAgICAgICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2VucyxcbiAgICAgICAgICAgICAgICByZXBsYWNlTG9uZ0RhdGVGb3JtYXRUb2tlbnNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgIGkgLT0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb25nRGF0ZUZvcm1hdCA9IHtcbiAgICAgICAgTFRTOiAnaDptbTpzcyBBJyxcbiAgICAgICAgTFQ6ICdoOm1tIEEnLFxuICAgICAgICBMOiAnTU0vREQvWVlZWScsXG4gICAgICAgIExMOiAnTU1NTSBELCBZWVlZJyxcbiAgICAgICAgTExMOiAnTU1NTSBELCBZWVlZIGg6bW0gQScsXG4gICAgICAgIExMTEw6ICdkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gbG9uZ0RhdGVGb3JtYXQoa2V5KSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldLFxuICAgICAgICAgICAgZm9ybWF0VXBwZXIgPSB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXkudG9VcHBlckNhc2UoKV07XG5cbiAgICAgICAgaWYgKGZvcm1hdCB8fCAhZm9ybWF0VXBwZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldID0gZm9ybWF0VXBwZXJcbiAgICAgICAgICAgIC5tYXRjaChmb3JtYXR0aW5nVG9rZW5zKVxuICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAodG9rKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdNTU1NJyB8fFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdNTScgfHxcbiAgICAgICAgICAgICAgICAgICAgdG9rID09PSAnREQnIHx8XG4gICAgICAgICAgICAgICAgICAgIHRvayA9PT0gJ2RkZGQnXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2suc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0b2s7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0SW52YWxpZERhdGUgPSAnSW52YWxpZCBkYXRlJztcblxuICAgIGZ1bmN0aW9uIGludmFsaWREYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52YWxpZERhdGU7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRPcmRpbmFsID0gJyVkJyxcbiAgICAgICAgZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UgPSAvXFxkezEsMn0vO1xuXG4gICAgZnVuY3Rpb24gb3JkaW5hbChudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29yZGluYWwucmVwbGFjZSgnJWQnLCBudW1iZXIpO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0UmVsYXRpdmVUaW1lID0ge1xuICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgIHBhc3Q6ICclcyBhZ28nLFxuICAgICAgICBzOiAnYSBmZXcgc2Vjb25kcycsXG4gICAgICAgIHNzOiAnJWQgc2Vjb25kcycsXG4gICAgICAgIG06ICdhIG1pbnV0ZScsXG4gICAgICAgIG1tOiAnJWQgbWludXRlcycsXG4gICAgICAgIGg6ICdhbiBob3VyJyxcbiAgICAgICAgaGg6ICclZCBob3VycycsXG4gICAgICAgIGQ6ICdhIGRheScsXG4gICAgICAgIGRkOiAnJWQgZGF5cycsXG4gICAgICAgIHc6ICdhIHdlZWsnLFxuICAgICAgICB3dzogJyVkIHdlZWtzJyxcbiAgICAgICAgTTogJ2EgbW9udGgnLFxuICAgICAgICBNTTogJyVkIG1vbnRocycsXG4gICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICB5eTogJyVkIHllYXJzJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fcmVsYXRpdmVUaW1lW3N0cmluZ107XG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKG91dHB1dClcbiAgICAgICAgICAgID8gb3V0cHV0KG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSlcbiAgICAgICAgICAgIDogb3V0cHV0LnJlcGxhY2UoLyVkL2ksIG51bWJlcik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFzdEZ1dHVyZShkaWZmLCBvdXRwdXQpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHRoaXMuX3JlbGF0aXZlVGltZVtkaWZmID4gMCA/ICdmdXR1cmUnIDogJ3Bhc3QnXTtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oZm9ybWF0KSA/IGZvcm1hdChvdXRwdXQpIDogZm9ybWF0LnJlcGxhY2UoLyVzL2ksIG91dHB1dCk7XG4gICAgfVxuXG4gICAgdmFyIGFsaWFzZXMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFVuaXRBbGlhcyh1bml0LCBzaG9ydGhhbmQpIHtcbiAgICAgICAgdmFyIGxvd2VyQ2FzZSA9IHVuaXQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgYWxpYXNlc1tsb3dlckNhc2VdID0gYWxpYXNlc1tsb3dlckNhc2UgKyAncyddID0gYWxpYXNlc1tzaG9ydGhhbmRdID0gdW5pdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBub3JtYWxpemVVbml0cyh1bml0cykge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHVuaXRzID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgPyBhbGlhc2VzW3VuaXRzXSB8fCBhbGlhc2VzW3VuaXRzLnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBub3JtYWxpemVPYmplY3RVbml0cyhpbnB1dE9iamVjdCkge1xuICAgICAgICB2YXIgbm9ybWFsaXplZElucHV0ID0ge30sXG4gICAgICAgICAgICBub3JtYWxpemVkUHJvcCxcbiAgICAgICAgICAgIHByb3A7XG5cbiAgICAgICAgZm9yIChwcm9wIGluIGlucHV0T2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcChpbnB1dE9iamVjdCwgcHJvcCkpIHtcbiAgICAgICAgICAgICAgICBub3JtYWxpemVkUHJvcCA9IG5vcm1hbGl6ZVVuaXRzKHByb3ApO1xuICAgICAgICAgICAgICAgIGlmIChub3JtYWxpemVkUHJvcCkge1xuICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkSW5wdXRbbm9ybWFsaXplZFByb3BdID0gaW5wdXRPYmplY3RbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRJbnB1dDtcbiAgICB9XG5cbiAgICB2YXIgcHJpb3JpdGllcyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gYWRkVW5pdFByaW9yaXR5KHVuaXQsIHByaW9yaXR5KSB7XG4gICAgICAgIHByaW9yaXRpZXNbdW5pdF0gPSBwcmlvcml0eTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRQcmlvcml0aXplZFVuaXRzKHVuaXRzT2JqKSB7XG4gICAgICAgIHZhciB1bml0cyA9IFtdLFxuICAgICAgICAgICAgdTtcbiAgICAgICAgZm9yICh1IGluIHVuaXRzT2JqKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcCh1bml0c09iaiwgdSkpIHtcbiAgICAgICAgICAgICAgICB1bml0cy5wdXNoKHsgdW5pdDogdSwgcHJpb3JpdHk6IHByaW9yaXRpZXNbdV0gfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGEucHJpb3JpdHkgLSBiLnByaW9yaXR5O1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHVuaXRzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTGVhcFllYXIoeWVhcikge1xuICAgICAgICByZXR1cm4gKHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDApIHx8IHllYXIgJSA0MDAgPT09IDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWJzRmxvb3IobnVtYmVyKSB7XG4gICAgICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICAgICAgICAvLyAtMCAtPiAwXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG51bWJlcikgfHwgMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0ludChhcmd1bWVudEZvckNvZXJjaW9uKSB7XG4gICAgICAgIHZhciBjb2VyY2VkTnVtYmVyID0gK2FyZ3VtZW50Rm9yQ29lcmNpb24sXG4gICAgICAgICAgICB2YWx1ZSA9IDA7XG5cbiAgICAgICAgaWYgKGNvZXJjZWROdW1iZXIgIT09IDAgJiYgaXNGaW5pdGUoY29lcmNlZE51bWJlcikpIHtcbiAgICAgICAgICAgIHZhbHVlID0gYWJzRmxvb3IoY29lcmNlZE51bWJlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUdldFNldCh1bml0LCBrZWVwVGltZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHNldCQxKHRoaXMsIHVuaXQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywga2VlcFRpbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsIHVuaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldChtb20sIHVuaXQpIHtcbiAgICAgICAgcmV0dXJuIG1vbS5pc1ZhbGlkKClcbiAgICAgICAgICAgID8gbW9tLl9kWydnZXQnICsgKG1vbS5faXNVVEMgPyAnVVRDJyA6ICcnKSArIHVuaXRdKClcbiAgICAgICAgICAgIDogTmFOO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldCQxKG1vbSwgdW5pdCwgdmFsdWUpIHtcbiAgICAgICAgaWYgKG1vbS5pc1ZhbGlkKCkgJiYgIWlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHVuaXQgPT09ICdGdWxsWWVhcicgJiZcbiAgICAgICAgICAgICAgICBpc0xlYXBZZWFyKG1vbS55ZWFyKCkpICYmXG4gICAgICAgICAgICAgICAgbW9tLm1vbnRoKCkgPT09IDEgJiZcbiAgICAgICAgICAgICAgICBtb20uZGF0ZSgpID09PSAyOVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0b0ludCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgbW9tLl9kWydzZXQnICsgKG1vbS5faXNVVEMgPyAnVVRDJyA6ICcnKSArIHVuaXRdKFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgbW9tLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgIGRheXNJbk1vbnRoKHZhbHVlLCBtb20ubW9udGgoKSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtb20uX2RbJ3NldCcgKyAobW9tLl9pc1VUQyA/ICdVVEMnIDogJycpICsgdW5pdF0odmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gc3RyaW5nR2V0KHVuaXRzKSB7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbih0aGlzW3VuaXRzXSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzW3VuaXRzXSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0cmluZ1NldCh1bml0cywgdmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB1bml0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHVuaXRzID0gbm9ybWFsaXplT2JqZWN0VW5pdHModW5pdHMpO1xuICAgICAgICAgICAgdmFyIHByaW9yaXRpemVkID0gZ2V0UHJpb3JpdGl6ZWRVbml0cyh1bml0cyksXG4gICAgICAgICAgICAgICAgaTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcmlvcml0aXplZC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXNbcHJpb3JpdGl6ZWRbaV0udW5pdF0odW5pdHNbcHJpb3JpdGl6ZWRbaV0udW5pdF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbih0aGlzW3VuaXRzXSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1t1bml0c10odmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciBtYXRjaDEgPSAvXFxkLywgLy8gICAgICAgMCAtIDlcbiAgICAgICAgbWF0Y2gyID0gL1xcZFxcZC8sIC8vICAgICAgMDAgLSA5OVxuICAgICAgICBtYXRjaDMgPSAvXFxkezN9LywgLy8gICAgIDAwMCAtIDk5OVxuICAgICAgICBtYXRjaDQgPSAvXFxkezR9LywgLy8gICAgMDAwMCAtIDk5OTlcbiAgICAgICAgbWF0Y2g2ID0gL1srLV0/XFxkezZ9LywgLy8gLTk5OTk5OSAtIDk5OTk5OVxuICAgICAgICBtYXRjaDF0bzIgPSAvXFxkXFxkPy8sIC8vICAgICAgIDAgLSA5OVxuICAgICAgICBtYXRjaDN0bzQgPSAvXFxkXFxkXFxkXFxkPy8sIC8vICAgICA5OTkgLSA5OTk5XG4gICAgICAgIG1hdGNoNXRvNiA9IC9cXGRcXGRcXGRcXGRcXGRcXGQ/LywgLy8gICA5OTk5OSAtIDk5OTk5OVxuICAgICAgICBtYXRjaDF0bzMgPSAvXFxkezEsM30vLCAvLyAgICAgICAwIC0gOTk5XG4gICAgICAgIG1hdGNoMXRvNCA9IC9cXGR7MSw0fS8sIC8vICAgICAgIDAgLSA5OTk5XG4gICAgICAgIG1hdGNoMXRvNiA9IC9bKy1dP1xcZHsxLDZ9LywgLy8gLTk5OTk5OSAtIDk5OTk5OVxuICAgICAgICBtYXRjaFVuc2lnbmVkID0gL1xcZCsvLCAvLyAgICAgICAwIC0gaW5mXG4gICAgICAgIG1hdGNoU2lnbmVkID0gL1srLV0/XFxkKy8sIC8vICAgIC1pbmYgLSBpbmZcbiAgICAgICAgbWF0Y2hPZmZzZXQgPSAvWnxbKy1dXFxkXFxkOj9cXGRcXGQvZ2ksIC8vICswMDowMCAtMDA6MDAgKzAwMDAgLTAwMDAgb3IgWlxuICAgICAgICBtYXRjaFNob3J0T2Zmc2V0ID0gL1p8WystXVxcZFxcZCg/Ojo/XFxkXFxkKT8vZ2ksIC8vICswMCAtMDAgKzAwOjAwIC0wMDowMCArMDAwMCAtMDAwMCBvciBaXG4gICAgICAgIG1hdGNoVGltZXN0YW1wID0gL1srLV0/XFxkKyhcXC5cXGR7MSwzfSk/LywgLy8gMTIzNDU2Nzg5IDEyMzQ1Njc4OS4xMjNcbiAgICAgICAgLy8gYW55IHdvcmQgKG9yIHR3bykgY2hhcmFjdGVycyBvciBudW1iZXJzIGluY2x1ZGluZyB0d28vdGhyZWUgd29yZCBtb250aCBpbiBhcmFiaWMuXG4gICAgICAgIC8vIGluY2x1ZGVzIHNjb3R0aXNoIGdhZWxpYyB0d28gd29yZCBhbmQgaHlwaGVuYXRlZCBtb250aHNcbiAgICAgICAgbWF0Y2hXb3JkID0gL1swLTldezAsMjU2fVsnYS16XFx1MDBBMC1cXHUwNUZGXFx1MDcwMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRjA3XFx1RkYxMC1cXHVGRkVGXXsxLDI1Nn18W1xcdTA2MDAtXFx1MDZGRlxcL117MSwyNTZ9KFxccyo/W1xcdTA2MDAtXFx1MDZGRl17MSwyNTZ9KXsxLDJ9L2ksXG4gICAgICAgIHJlZ2V4ZXM7XG5cbiAgICByZWdleGVzID0ge307XG5cbiAgICBmdW5jdGlvbiBhZGRSZWdleFRva2VuKHRva2VuLCByZWdleCwgc3RyaWN0UmVnZXgpIHtcbiAgICAgICAgcmVnZXhlc1t0b2tlbl0gPSBpc0Z1bmN0aW9uKHJlZ2V4KVxuICAgICAgICAgICAgPyByZWdleFxuICAgICAgICAgICAgOiBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZURhdGEpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpc1N0cmljdCAmJiBzdHJpY3RSZWdleCA/IHN0cmljdFJlZ2V4IDogcmVnZXg7XG4gICAgICAgICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UGFyc2VSZWdleEZvclRva2VuKHRva2VuLCBjb25maWcpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHJlZ2V4ZXMsIHRva2VuKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAodW5lc2NhcGVGb3JtYXQodG9rZW4pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZWdleGVzW3Rva2VuXShjb25maWcuX3N0cmljdCwgY29uZmlnLl9sb2NhbGUpO1xuICAgIH1cblxuICAgIC8vIENvZGUgZnJvbSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzM1NjE0OTMvaXMtdGhlcmUtYS1yZWdleHAtZXNjYXBlLWZ1bmN0aW9uLWluLWphdmFzY3JpcHRcbiAgICBmdW5jdGlvbiB1bmVzY2FwZUZvcm1hdChzKSB7XG4gICAgICAgIHJldHVybiByZWdleEVzY2FwZShcbiAgICAgICAgICAgIHNcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgnXFxcXCcsICcnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcKFxcWyl8XFxcXChcXF0pfFxcWyhbXlxcXVxcW10qKVxcXXxcXFxcKC4pL2csIGZ1bmN0aW9uIChcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZCxcbiAgICAgICAgICAgICAgICAgICAgcDEsXG4gICAgICAgICAgICAgICAgICAgIHAyLFxuICAgICAgICAgICAgICAgICAgICBwMyxcbiAgICAgICAgICAgICAgICAgICAgcDRcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAxIHx8IHAyIHx8IHAzIHx8IHA0O1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVnZXhFc2NhcGUocykge1xuICAgICAgICByZXR1cm4gcy5yZXBsYWNlKC9bLVxcL1xcXFxeJCorPy4oKXxbXFxde31dL2csICdcXFxcJCYnKTtcbiAgICB9XG5cbiAgICB2YXIgdG9rZW5zID0ge307XG5cbiAgICBmdW5jdGlvbiBhZGRQYXJzZVRva2VuKHRva2VuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGZ1bmMgPSBjYWxsYmFjaztcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRva2VuID0gW3Rva2VuXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNOdW1iZXIoY2FsbGJhY2spKSB7XG4gICAgICAgICAgICBmdW5jID0gZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICAgICAgICAgIGFycmF5W2NhbGxiYWNrXSA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRva2VuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0b2tlbnNbdG9rZW5baV1dID0gZnVuYztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFdlZWtQYXJzZVRva2VuKHRva2VuLCBjYWxsYmFjaykge1xuICAgICAgICBhZGRQYXJzZVRva2VuKHRva2VuLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgICAgICBjb25maWcuX3cgPSBjb25maWcuX3cgfHwge307XG4gICAgICAgICAgICBjYWxsYmFjayhpbnB1dCwgY29uZmlnLl93LCBjb25maWcsIHRva2VuKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkVGltZVRvQXJyYXlGcm9tVG9rZW4odG9rZW4sIGlucHV0LCBjb25maWcpIHtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwgJiYgaGFzT3duUHJvcCh0b2tlbnMsIHRva2VuKSkge1xuICAgICAgICAgICAgdG9rZW5zW3Rva2VuXShpbnB1dCwgY29uZmlnLl9hLCBjb25maWcsIHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBZRUFSID0gMCxcbiAgICAgICAgTU9OVEggPSAxLFxuICAgICAgICBEQVRFID0gMixcbiAgICAgICAgSE9VUiA9IDMsXG4gICAgICAgIE1JTlVURSA9IDQsXG4gICAgICAgIFNFQ09ORCA9IDUsXG4gICAgICAgIE1JTExJU0VDT05EID0gNixcbiAgICAgICAgV0VFSyA9IDcsXG4gICAgICAgIFdFRUtEQVkgPSA4O1xuXG4gICAgZnVuY3Rpb24gbW9kKG4sIHgpIHtcbiAgICAgICAgcmV0dXJuICgobiAlIHgpICsgeCkgJSB4O1xuICAgIH1cblxuICAgIHZhciBpbmRleE9mO1xuXG4gICAgaWYgKEFycmF5LnByb3RvdHlwZS5pbmRleE9mKSB7XG4gICAgICAgIGluZGV4T2YgPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZjtcbiAgICB9IGVsc2Uge1xuICAgICAgICBpbmRleE9mID0gZnVuY3Rpb24gKG8pIHtcbiAgICAgICAgICAgIC8vIEkga25vd1xuICAgICAgICAgICAgdmFyIGk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzW2ldID09PSBvKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkYXlzSW5Nb250aCh5ZWFyLCBtb250aCkge1xuICAgICAgICBpZiAoaXNOYU4oeWVhcikgfHwgaXNOYU4obW9udGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciBtb2RNb250aCA9IG1vZChtb250aCwgMTIpO1xuICAgICAgICB5ZWFyICs9IChtb250aCAtIG1vZE1vbnRoKSAvIDEyO1xuICAgICAgICByZXR1cm4gbW9kTW9udGggPT09IDFcbiAgICAgICAgICAgID8gaXNMZWFwWWVhcih5ZWFyKVxuICAgICAgICAgICAgICAgID8gMjlcbiAgICAgICAgICAgICAgICA6IDI4XG4gICAgICAgICAgICA6IDMxIC0gKChtb2RNb250aCAlIDcpICUgMik7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ00nLCBbJ01NJywgMl0sICdNbycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9udGgoKSArIDE7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTU1NJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzU2hvcnQodGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdNTU1NJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzKHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ21vbnRoJywgJ00nKTtcblxuICAgIC8vIFBSSU9SSVRZXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ21vbnRoJywgOCk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdNJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdNTScsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdNTU0nLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLm1vbnRoc1Nob3J0UmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ01NTU0nLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLm1vbnRoc1JlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydNJywgJ01NJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbTU9OVEhdID0gdG9JbnQoaW5wdXQpIC0gMTtcbiAgICB9KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydNTU0nLCAnTU1NTSddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHZhciBtb250aCA9IGNvbmZpZy5fbG9jYWxlLm1vbnRoc1BhcnNlKGlucHV0LCB0b2tlbiwgY29uZmlnLl9zdHJpY3QpO1xuICAgICAgICAvLyBpZiB3ZSBkaWRuJ3QgZmluZCBhIG1vbnRoIG5hbWUsIG1hcmsgdGhlIGRhdGUgYXMgaW52YWxpZC5cbiAgICAgICAgaWYgKG1vbnRoICE9IG51bGwpIHtcbiAgICAgICAgICAgIGFycmF5W01PTlRIXSA9IG1vbnRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZE1vbnRoID0gaW5wdXQ7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIExPQ0FMRVNcblxuICAgIHZhciBkZWZhdWx0TG9jYWxlTW9udGhzID0gJ0phbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydCA9ICdKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgTU9OVEhTX0lOX0ZPUk1BVCA9IC9EW29EXT8oXFxbW15cXFtcXF1dKlxcXXxcXHMpK01NTU0/LyxcbiAgICAgICAgZGVmYXVsdE1vbnRoc1Nob3J0UmVnZXggPSBtYXRjaFdvcmQsXG4gICAgICAgIGRlZmF1bHRNb250aHNSZWdleCA9IG1hdGNoV29yZDtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZU1vbnRocyhtLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHMpXG4gICAgICAgICAgICAgICAgPyB0aGlzLl9tb250aHNcbiAgICAgICAgICAgICAgICA6IHRoaXMuX21vbnRoc1snc3RhbmRhbG9uZSddO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRocylcbiAgICAgICAgICAgID8gdGhpcy5fbW9udGhzW20ubW9udGgoKV1cbiAgICAgICAgICAgIDogdGhpcy5fbW9udGhzW1xuICAgICAgICAgICAgICAgICAgKHRoaXMuX21vbnRocy5pc0Zvcm1hdCB8fCBNT05USFNfSU5fRk9STUFUKS50ZXN0KGZvcm1hdClcbiAgICAgICAgICAgICAgICAgICAgICA/ICdmb3JtYXQnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnc3RhbmRhbG9uZSdcbiAgICAgICAgICAgICAgXVttLm1vbnRoKCldO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZU1vbnRoc1Nob3J0KG0sIGZvcm1hdCkge1xuICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRoc1Nob3J0KVxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU2hvcnRcbiAgICAgICAgICAgICAgICA6IHRoaXMuX21vbnRoc1Nob3J0WydzdGFuZGFsb25lJ107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzU2hvcnQpXG4gICAgICAgICAgICA/IHRoaXMuX21vbnRoc1Nob3J0W20ubW9udGgoKV1cbiAgICAgICAgICAgIDogdGhpcy5fbW9udGhzU2hvcnRbXG4gICAgICAgICAgICAgICAgICBNT05USFNfSU5fRk9STUFULnRlc3QoZm9ybWF0KSA/ICdmb3JtYXQnIDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgICAgIF1bbS5tb250aCgpXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVTdHJpY3RQYXJzZShtb250aE5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgaWksXG4gICAgICAgICAgICBtb20sXG4gICAgICAgICAgICBsbGMgPSBtb250aE5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCF0aGlzLl9tb250aHNQYXJzZSkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyBub3QgdXNlZFxuICAgICAgICAgICAgdGhpcy5fbW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyArK2kpIHtcbiAgICAgICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIGldKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW2ldID0gdGhpcy5tb250aHNTaG9ydChcbiAgICAgICAgICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgICkudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0gPSB0aGlzLm1vbnRocyhtb20sICcnKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ01NTScpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ01NTScpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHNQYXJzZShtb250aE5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLCBtb20sIHJlZ2V4O1xuXG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlU3RyaWN0UGFyc2UuY2FsbCh0aGlzLCBtb250aE5hbWUsIGZvcm1hdCwgc3RyaWN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fbW9udGhzUGFyc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX21vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE86IGFkZCBzb3J0aW5nXG4gICAgICAgIC8vIFNvcnRpbmcgbWFrZXMgc3VyZSBpZiBvbmUgbW9udGggKG9yIGFiYnIpIGlzIGEgcHJlZml4IG9mIGFub3RoZXJcbiAgICAgICAgLy8gc2VlIHNvcnRpbmcgaW4gY29tcHV0ZU1vbnRoc1BhcnNlXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgaV0pO1xuICAgICAgICAgICAgaWYgKHN0cmljdCAmJiAhdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy5tb250aHMobW9tLCAnJykucmVwbGFjZSgnLicsICcnKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy5tb250aHNTaG9ydChtb20sICcnKS5yZXBsYWNlKCcuJywgJycpICsgJyQnLFxuICAgICAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdHJpY3QgJiYgIXRoaXMuX21vbnRoc1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgcmVnZXggPVxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLm1vbnRocyhtb20sICcnKSArICd8XicgKyB0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21vbnRoc1BhcnNlW2ldID0gbmV3IFJlZ0V4cChyZWdleC5yZXBsYWNlKCcuJywgJycpLCAnaScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGVzdCB0aGUgcmVnZXhcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdNTU1NJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZVtpXS50ZXN0KG1vbnRoTmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdNTU0nICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXS50ZXN0KG1vbnRoTmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyaWN0ICYmIHRoaXMuX21vbnRoc1BhcnNlW2ldLnRlc3QobW9udGhOYW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gc2V0TW9udGgobW9tLCB2YWx1ZSkge1xuICAgICAgICB2YXIgZGF5T2ZNb250aDtcblxuICAgICAgICBpZiAoIW1vbS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIC8vIE5vIG9wXG4gICAgICAgICAgICByZXR1cm4gbW9tO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICgvXlxcZCskLy50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdG9JbnQodmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IG1vbS5sb2NhbGVEYXRhKCkubW9udGhzUGFyc2UodmFsdWUpO1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IEFub3RoZXIgc2lsZW50IGZhaWx1cmU/XG4gICAgICAgICAgICAgICAgaWYgKCFpc051bWJlcih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vbTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkYXlPZk1vbnRoID0gTWF0aC5taW4obW9tLmRhdGUoKSwgZGF5c0luTW9udGgobW9tLnllYXIoKSwgdmFsdWUpKTtcbiAgICAgICAgbW9tLl9kWydzZXQnICsgKG1vbS5faXNVVEMgPyAnVVRDJyA6ICcnKSArICdNb250aCddKHZhbHVlLCBkYXlPZk1vbnRoKTtcbiAgICAgICAgcmV0dXJuIG1vbTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRNb250aCh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgc2V0TW9udGgodGhpcywgdmFsdWUpO1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsICdNb250aCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RGF5c0luTW9udGgoKSB7XG4gICAgICAgIHJldHVybiBkYXlzSW5Nb250aCh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aHNTaG9ydFJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZU1vbnRoc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNTaG9ydFJlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNTaG9ydFJlZ2V4ID0gZGVmYXVsdE1vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fbW9udGhzU2hvcnRSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoc1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZU1vbnRoc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNSZWdleCA9IGRlZmF1bHRNb250aHNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX21vbnRoc1JlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZU1vbnRoc1BhcnNlKCkge1xuICAgICAgICBmdW5jdGlvbiBjbXBMZW5SZXYoYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGIubGVuZ3RoIC0gYS5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2hvcnRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGxvbmdQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbW9tO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIGldKTtcbiAgICAgICAgICAgIHNob3J0UGllY2VzLnB1c2godGhpcy5tb250aHNTaG9ydChtb20sICcnKSk7XG4gICAgICAgICAgICBsb25nUGllY2VzLnB1c2godGhpcy5tb250aHMobW9tLCAnJykpO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaCh0aGlzLm1vbnRocyhtb20sICcnKSk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKHRoaXMubW9udGhzU2hvcnQobW9tLCAnJykpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNvcnRpbmcgbWFrZXMgc3VyZSBpZiBvbmUgbW9udGggKG9yIGFiYnIpIGlzIGEgcHJlZml4IG9mIGFub3RoZXIgaXRcbiAgICAgICAgLy8gd2lsbCBtYXRjaCB0aGUgbG9uZ2VyIHBpZWNlLlxuICAgICAgICBzaG9ydFBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIGxvbmdQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBtaXhlZFBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICBzaG9ydFBpZWNlc1tpXSA9IHJlZ2V4RXNjYXBlKHNob3J0UGllY2VzW2ldKTtcbiAgICAgICAgICAgIGxvbmdQaWVjZXNbaV0gPSByZWdleEVzY2FwZShsb25nUGllY2VzW2ldKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjQ7IGkrKykge1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXNbaV0gPSByZWdleEVzY2FwZShtaXhlZFBpZWNlc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9tb250aHNSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIG1peGVkUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRSZWdleCA9IHRoaXMuX21vbnRoc1JlZ2V4O1xuICAgICAgICB0aGlzLl9tb250aHNTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgbG9uZ1BpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgc2hvcnRQaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1knLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB5ID0gdGhpcy55ZWFyKCk7XG4gICAgICAgIHJldHVybiB5IDw9IDk5OTkgPyB6ZXJvRmlsbCh5LCA0KSA6ICcrJyArIHk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueWVhcigpICUgMTAwO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZJywgNF0sIDAsICd5ZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZWScsIDVdLCAwLCAneWVhcicpO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVlZWVlZJywgNiwgdHJ1ZV0sIDAsICd5ZWFyJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ3llYXInLCAneScpO1xuXG4gICAgLy8gUFJJT1JJVElFU1xuXG4gICAgYWRkVW5pdFByaW9yaXR5KCd5ZWFyJywgMSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdZJywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1lZJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1lZWVknLCBtYXRjaDF0bzQsIG1hdGNoNCk7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWVknLCBtYXRjaDF0bzYsIG1hdGNoNik7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWVlZJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ1lZWVlZJywgJ1lZWVlZWSddLCBZRUFSKTtcbiAgICBhZGRQYXJzZVRva2VuKCdZWVlZJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtZRUFSXSA9XG4gICAgICAgICAgICBpbnB1dC5sZW5ndGggPT09IDIgPyBob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCkgOiB0b0ludChpbnB1dCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignWVknLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID0gaG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1knLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID0gcGFyc2VJbnQoaW5wdXQsIDEwKTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIGZ1bmN0aW9uIGRheXNJblllYXIoeWVhcikge1xuICAgICAgICByZXR1cm4gaXNMZWFwWWVhcih5ZWFyKSA/IDM2NiA6IDM2NTtcbiAgICB9XG5cbiAgICAvLyBIT09LU1xuXG4gICAgaG9va3MucGFyc2VUd29EaWdpdFllYXIgPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIHRvSW50KGlucHV0KSArICh0b0ludChpbnB1dCkgPiA2OCA/IDE5MDAgOiAyMDAwKTtcbiAgICB9O1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldFllYXIgPSBtYWtlR2V0U2V0KCdGdWxsWWVhcicsIHRydWUpO1xuXG4gICAgZnVuY3Rpb24gZ2V0SXNMZWFwWWVhcigpIHtcbiAgICAgICAgcmV0dXJuIGlzTGVhcFllYXIodGhpcy55ZWFyKCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZURhdGUoeSwgbSwgZCwgaCwgTSwgcywgbXMpIHtcbiAgICAgICAgLy8gY2FuJ3QganVzdCBhcHBseSgpIHRvIGNyZWF0ZSBhIGRhdGU6XG4gICAgICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcS8xODEzNDhcbiAgICAgICAgdmFyIGRhdGU7XG4gICAgICAgIC8vIHRoZSBkYXRlIGNvbnN0cnVjdG9yIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoeSArIDQwMCwgbSwgZCwgaCwgTSwgcywgbXMpO1xuICAgICAgICAgICAgaWYgKGlzRmluaXRlKGRhdGUuZ2V0RnVsbFllYXIoKSkpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldEZ1bGxZZWFyKHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKHksIG0sIGQsIGgsIE0sIHMsIG1zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVUQ0RhdGUoeSkge1xuICAgICAgICB2YXIgZGF0ZSwgYXJncztcbiAgICAgICAgLy8gdGhlIERhdGUuVVRDIGZ1bmN0aW9uIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgLy8gcHJlc2VydmUgbGVhcCB5ZWFycyB1c2luZyBhIGZ1bGwgNDAwIHllYXIgY3ljbGUsIHRoZW4gcmVzZXRcbiAgICAgICAgICAgIGFyZ3NbMF0gPSB5ICsgNDAwO1xuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDLmFwcGx5KG51bGwsIGFyZ3MpKTtcbiAgICAgICAgICAgIGlmIChpc0Zpbml0ZShkYXRlLmdldFVUQ0Z1bGxZZWFyKCkpKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXRVVENGdWxsWWVhcih5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLCBhcmd1bWVudHMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cblxuICAgIC8vIHN0YXJ0LW9mLWZpcnN0LXdlZWsgLSBzdGFydC1vZi15ZWFyXG4gICAgZnVuY3Rpb24gZmlyc3RXZWVrT2Zmc2V0KHllYXIsIGRvdywgZG95KSB7XG4gICAgICAgIHZhciAvLyBmaXJzdC13ZWVrIGRheSAtLSB3aGljaCBqYW51YXJ5IGlzIGFsd2F5cyBpbiB0aGUgZmlyc3Qgd2VlayAoNCBmb3IgaXNvLCAxIGZvciBvdGhlcilcbiAgICAgICAgICAgIGZ3ZCA9IDcgKyBkb3cgLSBkb3ksXG4gICAgICAgICAgICAvLyBmaXJzdC13ZWVrIGRheSBsb2NhbCB3ZWVrZGF5IC0tIHdoaWNoIGxvY2FsIHdlZWtkYXkgaXMgZndkXG4gICAgICAgICAgICBmd2RsdyA9ICg3ICsgY3JlYXRlVVRDRGF0ZSh5ZWFyLCAwLCBmd2QpLmdldFVUQ0RheSgpIC0gZG93KSAlIDc7XG5cbiAgICAgICAgcmV0dXJuIC1md2RsdyArIGZ3ZCAtIDE7XG4gICAgfVxuXG4gICAgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPX3dlZWtfZGF0ZSNDYWxjdWxhdGluZ19hX2RhdGVfZ2l2ZW5fdGhlX3llYXIuMkNfd2Vla19udW1iZXJfYW5kX3dlZWtkYXlcbiAgICBmdW5jdGlvbiBkYXlPZlllYXJGcm9tV2Vla3MoeWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIGxvY2FsV2Vla2RheSA9ICg3ICsgd2Vla2RheSAtIGRvdykgJSA3LFxuICAgICAgICAgICAgd2Vla09mZnNldCA9IGZpcnN0V2Vla09mZnNldCh5ZWFyLCBkb3csIGRveSksXG4gICAgICAgICAgICBkYXlPZlllYXIgPSAxICsgNyAqICh3ZWVrIC0gMSkgKyBsb2NhbFdlZWtkYXkgKyB3ZWVrT2Zmc2V0LFxuICAgICAgICAgICAgcmVzWWVhcixcbiAgICAgICAgICAgIHJlc0RheU9mWWVhcjtcblxuICAgICAgICBpZiAoZGF5T2ZZZWFyIDw9IDApIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSB5ZWFyIC0gMTtcbiAgICAgICAgICAgIHJlc0RheU9mWWVhciA9IGRheXNJblllYXIocmVzWWVhcikgKyBkYXlPZlllYXI7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF5T2ZZZWFyID4gZGF5c0luWWVhcih5ZWFyKSkge1xuICAgICAgICAgICAgcmVzWWVhciA9IHllYXIgKyAxO1xuICAgICAgICAgICAgcmVzRGF5T2ZZZWFyID0gZGF5T2ZZZWFyIC0gZGF5c0luWWVhcih5ZWFyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSB5ZWFyO1xuICAgICAgICAgICAgcmVzRGF5T2ZZZWFyID0gZGF5T2ZZZWFyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHllYXI6IHJlc1llYXIsXG4gICAgICAgICAgICBkYXlPZlllYXI6IHJlc0RheU9mWWVhcixcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrT2ZZZWFyKG1vbSwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIHdlZWtPZmZzZXQgPSBmaXJzdFdlZWtPZmZzZXQobW9tLnllYXIoKSwgZG93LCBkb3kpLFxuICAgICAgICAgICAgd2VlayA9IE1hdGguZmxvb3IoKG1vbS5kYXlPZlllYXIoKSAtIHdlZWtPZmZzZXQgLSAxKSAvIDcpICsgMSxcbiAgICAgICAgICAgIHJlc1dlZWssXG4gICAgICAgICAgICByZXNZZWFyO1xuXG4gICAgICAgIGlmICh3ZWVrIDwgMSkge1xuICAgICAgICAgICAgcmVzWWVhciA9IG1vbS55ZWFyKCkgLSAxO1xuICAgICAgICAgICAgcmVzV2VlayA9IHdlZWsgKyB3ZWVrc0luWWVhcihyZXNZZWFyLCBkb3csIGRveSk7XG4gICAgICAgIH0gZWxzZSBpZiAod2VlayA+IHdlZWtzSW5ZZWFyKG1vbS55ZWFyKCksIGRvdywgZG95KSkge1xuICAgICAgICAgICAgcmVzV2VlayA9IHdlZWsgLSB3ZWVrc0luWWVhcihtb20ueWVhcigpLCBkb3csIGRveSk7XG4gICAgICAgICAgICByZXNZZWFyID0gbW9tLnllYXIoKSArIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNZZWFyID0gbW9tLnllYXIoKTtcbiAgICAgICAgICAgIHJlc1dlZWsgPSB3ZWVrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHdlZWs6IHJlc1dlZWssXG4gICAgICAgICAgICB5ZWFyOiByZXNZZWFyLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtzSW5ZZWFyKHllYXIsIGRvdywgZG95KSB7XG4gICAgICAgIHZhciB3ZWVrT2Zmc2V0ID0gZmlyc3RXZWVrT2Zmc2V0KHllYXIsIGRvdywgZG95KSxcbiAgICAgICAgICAgIHdlZWtPZmZzZXROZXh0ID0gZmlyc3RXZWVrT2Zmc2V0KHllYXIgKyAxLCBkb3csIGRveSk7XG4gICAgICAgIHJldHVybiAoZGF5c0luWWVhcih5ZWFyKSAtIHdlZWtPZmZzZXQgKyB3ZWVrT2Zmc2V0TmV4dCkgLyA3O1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCd3JywgWyd3dycsIDJdLCAnd28nLCAnd2VlaycpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdXJywgWydXVycsIDJdLCAnV28nLCAnaXNvV2VlaycpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCd3ZWVrJywgJ3cnKTtcbiAgICBhZGRVbml0QWxpYXMoJ2lzb1dlZWsnLCAnVycpO1xuXG4gICAgLy8gUFJJT1JJVElFU1xuXG4gICAgYWRkVW5pdFByaW9yaXR5KCd3ZWVrJywgNSk7XG4gICAgYWRkVW5pdFByaW9yaXR5KCdpc29XZWVrJywgNSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCd3JywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCd3dycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdXJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdXVycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsndycsICd3dycsICdXJywgJ1dXJ10sIGZ1bmN0aW9uIChcbiAgICAgICAgaW5wdXQsXG4gICAgICAgIHdlZWssXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgdG9rZW5cbiAgICApIHtcbiAgICAgICAgd2Vla1t0b2tlbi5zdWJzdHIoMCwgMSldID0gdG9JbnQoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgLy8gTE9DQUxFU1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vlayhtb20pIHtcbiAgICAgICAgcmV0dXJuIHdlZWtPZlllYXIobW9tLCB0aGlzLl93ZWVrLmRvdywgdGhpcy5fd2Vlay5kb3kpLndlZWs7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVXZWVrID0ge1xuICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlRmlyc3REYXlPZldlZWsoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl93ZWVrLmRvdztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVGaXJzdERheU9mWWVhcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWsuZG95O1xuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldFdlZWsoaW5wdXQpIHtcbiAgICAgICAgdmFyIHdlZWsgPSB0aGlzLmxvY2FsZURhdGEoKS53ZWVrKHRoaXMpO1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWsgOiB0aGlzLmFkZCgoaW5wdXQgLSB3ZWVrKSAqIDcsICdkJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPV2VlayhpbnB1dCkge1xuICAgICAgICB2YXIgd2VlayA9IHdlZWtPZlllYXIodGhpcywgMSwgNCkud2VlaztcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyB3ZWVrIDogdGhpcy5hZGQoKGlucHV0IC0gd2VlaykgKiA3LCAnZCcpO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkJywgMCwgJ2RvJywgJ2RheScpO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2RkJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNNaW4odGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkZGQnLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5c1Nob3J0KHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZGRkZCcsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzKHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZScsIDAsIDAsICd3ZWVrZGF5Jyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ0UnLCAwLCAwLCAnaXNvV2Vla2RheScpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdkYXknLCAnZCcpO1xuICAgIGFkZFVuaXRBbGlhcygnd2Vla2RheScsICdlJyk7XG4gICAgYWRkVW5pdEFsaWFzKCdpc29XZWVrZGF5JywgJ0UnKTtcblxuICAgIC8vIFBSSU9SSVRZXG4gICAgYWRkVW5pdFByaW9yaXR5KCdkYXknLCAxMSk7XG4gICAgYWRkVW5pdFByaW9yaXR5KCd3ZWVrZGF5JywgMTEpO1xuICAgIGFkZFVuaXRQcmlvcml0eSgnaXNvV2Vla2RheScsIDExKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ2QnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2UnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0UnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2RkJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c01pblJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcbiAgICBhZGRSZWdleFRva2VuKCdkZGQnLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzU2hvcnRSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG4gICAgYWRkUmVnZXhUb2tlbignZGRkZCcsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ2RkJywgJ2RkZCcsICdkZGRkJ10sIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB2YXIgd2Vla2RheSA9IGNvbmZpZy5fbG9jYWxlLndlZWtkYXlzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgIC8vIGlmIHdlIGRpZG4ndCBnZXQgYSB3ZWVrZGF5IG5hbWUsIG1hcmsgdGhlIGRhdGUgYXMgaW52YWxpZFxuICAgICAgICBpZiAod2Vla2RheSAhPSBudWxsKSB7XG4gICAgICAgICAgICB3ZWVrLmQgPSB3ZWVrZGF5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZFdlZWtkYXkgPSBpbnB1dDtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydkJywgJ2UnLCAnRSddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgd2Vla1t0b2tlbl0gPSB0b0ludChpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICBmdW5jdGlvbiBwYXJzZVdlZWtkYXkoaW5wdXQsIGxvY2FsZSkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc05hTihpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludChpbnB1dCwgMTApO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5wdXQgPSBsb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCk7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZUlzb1dlZWtkYXkoaW5wdXQsIGxvY2FsZSkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c1BhcnNlKGlucHV0KSAlIDcgfHwgNztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNOYU4oaW5wdXQpID8gbnVsbCA6IGlucHV0O1xuICAgIH1cblxuICAgIC8vIExPQ0FMRVNcbiAgICBmdW5jdGlvbiBzaGlmdFdlZWtkYXlzKHdzLCBuKSB7XG4gICAgICAgIHJldHVybiB3cy5zbGljZShuLCA3KS5jb25jYXQod3Muc2xpY2UoMCwgbikpO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2Vla2RheXMgPSAnU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXknLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIGRlZmF1bHRMb2NhbGVXZWVrZGF5c1Nob3J0ID0gJ1N1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgZGVmYXVsdExvY2FsZVdlZWtkYXlzTWluID0gJ1N1X01vX1R1X1dlX1RoX0ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICBkZWZhdWx0V2Vla2RheXNSZWdleCA9IG1hdGNoV29yZCxcbiAgICAgICAgZGVmYXVsdFdlZWtkYXlzU2hvcnRSZWdleCA9IG1hdGNoV29yZCxcbiAgICAgICAgZGVmYXVsdFdlZWtkYXlzTWluUmVnZXggPSBtYXRjaFdvcmQ7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5cyhtLCBmb3JtYXQpIHtcbiAgICAgICAgdmFyIHdlZWtkYXlzID0gaXNBcnJheSh0aGlzLl93ZWVrZGF5cylcbiAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNcbiAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNbXG4gICAgICAgICAgICAgICAgICBtICYmIG0gIT09IHRydWUgJiYgdGhpcy5fd2Vla2RheXMuaXNGb3JtYXQudGVzdChmb3JtYXQpXG4gICAgICAgICAgICAgICAgICAgICAgPyAnZm9ybWF0J1xuICAgICAgICAgICAgICAgICAgICAgIDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgICAgIF07XG4gICAgICAgIHJldHVybiBtID09PSB0cnVlXG4gICAgICAgICAgICA/IHNoaWZ0V2Vla2RheXMod2Vla2RheXMsIHRoaXMuX3dlZWsuZG93KVxuICAgICAgICAgICAgOiBtXG4gICAgICAgICAgICA/IHdlZWtkYXlzW20uZGF5KCldXG4gICAgICAgICAgICA6IHdlZWtkYXlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzU2hvcnQobSkge1xuICAgICAgICByZXR1cm4gbSA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyBzaGlmdFdlZWtkYXlzKHRoaXMuX3dlZWtkYXlzU2hvcnQsIHRoaXMuX3dlZWsuZG93KVxuICAgICAgICAgICAgOiBtXG4gICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzU2hvcnRbbS5kYXkoKV1cbiAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNTaG9ydDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5c01pbihtKSB7XG4gICAgICAgIHJldHVybiBtID09PSB0cnVlXG4gICAgICAgICAgICA/IHNoaWZ0V2Vla2RheXModGhpcy5fd2Vla2RheXNNaW4sIHRoaXMuX3dlZWsuZG93KVxuICAgICAgICAgICAgOiBtXG4gICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzTWluW20uZGF5KCldXG4gICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzTWluO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZVN0cmljdFBhcnNlJDEod2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgaWksXG4gICAgICAgICAgICBtb20sXG4gICAgICAgICAgICBsbGMgPSB3ZWVrZGF5TmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoIXRoaXMuX3dlZWtkYXlzUGFyc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZSA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgKytpKSB7XG4gICAgICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCAxXSkuZGF5KGkpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0gPSB0aGlzLndlZWtkYXlzTWluKFxuICAgICAgICAgICAgICAgICAgICBtb20sXG4gICAgICAgICAgICAgICAgICAgICcnXG4gICAgICAgICAgICAgICAgKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtpXSA9IHRoaXMud2Vla2RheXNTaG9ydChcbiAgICAgICAgICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgICkudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlW2ldID0gdGhpcy53ZWVrZGF5cyhtb20sICcnKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ2RkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09ICdkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdkZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09ICdkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXNQYXJzZSh3ZWVrZGF5TmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksIG1vbSwgcmVnZXg7XG5cbiAgICAgICAgaWYgKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVN0cmljdFBhcnNlJDEuY2FsbCh0aGlzLCB3ZWVrZGF5TmFtZSwgZm9ybWF0LCBzdHJpY3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl93ZWVrZGF5c1BhcnNlKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcblxuICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCAxXSkuZGF5KGkpO1xuICAgICAgICAgICAgaWYgKHN0cmljdCAmJiAhdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMud2Vla2RheXMobW9tLCAnJykucmVwbGFjZSgnLicsICdcXFxcLj8nKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJykucmVwbGFjZSgnLicsICdcXFxcLj8nKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy53ZWVrZGF5c01pbihtb20sICcnKS5yZXBsYWNlKCcuJywgJ1xcXFwuPycpICsgJyQnLFxuICAgICAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLl93ZWVrZGF5c1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgcmVnZXggPVxuICAgICAgICAgICAgICAgICAgICAnXicgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndlZWtkYXlzKG1vbSwgJycpICtcbiAgICAgICAgICAgICAgICAgICAgJ3xeJyArXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2Vla2RheXNTaG9ydChtb20sICcnKSArXG4gICAgICAgICAgICAgICAgICAgICd8XicgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndlZWtkYXlzTWluKG1vbSwgJycpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKHJlZ2V4LnJlcGxhY2UoJy4nLCAnJyksICdpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0ZXN0IHRoZSByZWdleFxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ2RkZGQnICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdkZGQnICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnZGQnICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJpY3QgJiYgdGhpcy5fd2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0RGF5T2ZXZWVrKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGF5ID0gdGhpcy5faXNVVEMgPyB0aGlzLl9kLmdldFVUQ0RheSgpIDogdGhpcy5fZC5nZXREYXkoKTtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlucHV0ID0gcGFyc2VXZWVrZGF5KGlucHV0LCB0aGlzLmxvY2FsZURhdGEoKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hZGQoaW5wdXQgLSBkYXksICdkJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZGF5O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0TG9jYWxlRGF5T2ZXZWVrKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd2Vla2RheSA9ICh0aGlzLmRheSgpICsgNyAtIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdykgJSA3O1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWtkYXkgOiB0aGlzLmFkZChpbnB1dCAtIHdlZWtkYXksICdkJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPRGF5T2ZXZWVrKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGJlaGF2ZXMgdGhlIHNhbWUgYXMgbW9tZW50I2RheSBleGNlcHRcbiAgICAgICAgLy8gYXMgYSBnZXR0ZXIsIHJldHVybnMgNyBpbnN0ZWFkIG9mIDAgKDEtNyByYW5nZSBpbnN0ZWFkIG9mIDAtNilcbiAgICAgICAgLy8gYXMgYSBzZXR0ZXIsIHN1bmRheSBzaG91bGQgYmVsb25nIHRvIHRoZSBwcmV2aW91cyB3ZWVrLlxuXG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgd2Vla2RheSA9IHBhcnNlSXNvV2Vla2RheShpbnB1dCwgdGhpcy5sb2NhbGVEYXRhKCkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF5KHRoaXMuZGF5KCkgJSA3ID8gd2Vla2RheSA6IHdlZWtkYXkgLSA3KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRheSgpIHx8IDc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrZGF5c1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1JlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtkYXlzU2hvcnRSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzU2hvcnRSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla2RheXNNaW5SZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNNaW5SZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNNaW5SZWdleCA9IGRlZmF1bHRXZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzTWluUmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlV2Vla2RheXNQYXJzZSgpIHtcbiAgICAgICAgZnVuY3Rpb24gY21wTGVuUmV2KGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBiLmxlbmd0aCAtIGEubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1pblBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgc2hvcnRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGxvbmdQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgbWlucCxcbiAgICAgICAgICAgIHNob3J0cCxcbiAgICAgICAgICAgIGxvbmdwO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgIG1pbnAgPSByZWdleEVzY2FwZSh0aGlzLndlZWtkYXlzTWluKG1vbSwgJycpKTtcbiAgICAgICAgICAgIHNob3J0cCA9IHJlZ2V4RXNjYXBlKHRoaXMud2Vla2RheXNTaG9ydChtb20sICcnKSk7XG4gICAgICAgICAgICBsb25ncCA9IHJlZ2V4RXNjYXBlKHRoaXMud2Vla2RheXMobW9tLCAnJykpO1xuICAgICAgICAgICAgbWluUGllY2VzLnB1c2gobWlucCk7XG4gICAgICAgICAgICBzaG9ydFBpZWNlcy5wdXNoKHNob3J0cCk7XG4gICAgICAgICAgICBsb25nUGllY2VzLnB1c2gobG9uZ3ApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChtaW5wKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goc2hvcnRwKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2gobG9uZ3ApO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNvcnRpbmcgbWFrZXMgc3VyZSBpZiBvbmUgd2Vla2RheSAob3IgYWJicikgaXMgYSBwcmVmaXggb2YgYW5vdGhlciBpdFxuICAgICAgICAvLyB3aWxsIG1hdGNoIHRoZSBsb25nZXIgcGllY2UuXG4gICAgICAgIG1pblBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIHNob3J0UGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbG9uZ1BpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIG1peGVkUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcblxuICAgICAgICB0aGlzLl93ZWVrZGF5c1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXggPSB0aGlzLl93ZWVrZGF5c1JlZ2V4O1xuICAgICAgICB0aGlzLl93ZWVrZGF5c01pblJlZ2V4ID0gdGhpcy5fd2Vla2RheXNSZWdleDtcblxuICAgICAgICB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBsb25nUGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIHNob3J0UGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBtaW5QaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgZnVuY3Rpb24gaEZvcm1hdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaG91cnMoKSAlIDEyIHx8IDEyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGtGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhvdXJzKCkgfHwgMjQ7XG4gICAgfVxuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0gnLCBbJ0hIJywgMl0sIDAsICdob3VyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ2gnLCBbJ2hoJywgMl0sIDAsIGhGb3JtYXQpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdrJywgWydraycsIDJdLCAwLCBrRm9ybWF0KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdobW0nLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnJyArIGhGb3JtYXQuYXBwbHkodGhpcykgKyB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMik7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignaG1tc3MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAnJyArXG4gICAgICAgICAgICBoRm9ybWF0LmFwcGx5KHRoaXMpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLnNlY29uZHMoKSwgMilcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdIbW0nLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnJyArIHRoaXMuaG91cnMoKSArIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdIbW1zcycsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICcnICtcbiAgICAgICAgICAgIHRoaXMuaG91cnMoKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMikgK1xuICAgICAgICAgICAgemVyb0ZpbGwodGhpcy5zZWNvbmRzKCksIDIpXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBtZXJpZGllbSh0b2tlbiwgbG93ZXJjYXNlKSB7XG4gICAgICAgIGFkZEZvcm1hdFRva2VuKHRva2VuLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubWVyaWRpZW0oXG4gICAgICAgICAgICAgICAgdGhpcy5ob3VycygpLFxuICAgICAgICAgICAgICAgIHRoaXMubWludXRlcygpLFxuICAgICAgICAgICAgICAgIGxvd2VyY2FzZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbWVyaWRpZW0oJ2EnLCB0cnVlKTtcbiAgICBtZXJpZGllbSgnQScsIGZhbHNlKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnaG91cicsICdoJyk7XG5cbiAgICAvLyBQUklPUklUWVxuICAgIGFkZFVuaXRQcmlvcml0eSgnaG91cicsIDEzKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGZ1bmN0aW9uIG1hdGNoTWVyaWRpZW0oaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLl9tZXJpZGllbVBhcnNlO1xuICAgIH1cblxuICAgIGFkZFJlZ2V4VG9rZW4oJ2EnLCBtYXRjaE1lcmlkaWVtKTtcbiAgICBhZGRSZWdleFRva2VuKCdBJywgbWF0Y2hNZXJpZGllbSk7XG4gICAgYWRkUmVnZXhUb2tlbignSCcsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignaCcsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignaycsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignSEgnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignaGgnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbigna2snLCBtYXRjaDF0bzIsIG1hdGNoMik7XG5cbiAgICBhZGRSZWdleFRva2VuKCdobW0nLCBtYXRjaDN0bzQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2htbXNzJywgbWF0Y2g1dG82KTtcbiAgICBhZGRSZWdleFRva2VuKCdIbW0nLCBtYXRjaDN0bzQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0htbXNzJywgbWF0Y2g1dG82KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydIJywgJ0hIJ10sIEhPVVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydrJywgJ2trJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIga0lucHV0ID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICBhcnJheVtIT1VSXSA9IGtJbnB1dCA9PT0gMjQgPyAwIDoga0lucHV0O1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oWydhJywgJ0EnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5faXNQbSA9IGNvbmZpZy5fbG9jYWxlLmlzUE0oaW5wdXQpO1xuICAgICAgICBjb25maWcuX21lcmlkaWVtID0gaW5wdXQ7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ2gnLCAnaGgnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdobW0nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvcyA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvcykpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvcykpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdobW1zcycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zMSA9IGlucHV0Lmxlbmd0aCAtIDQsXG4gICAgICAgICAgICBwb3MyID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zMSkpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczEsIDIpKTtcbiAgICAgICAgYXJyYXlbU0VDT05EXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MyKSk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB0cnVlO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ0htbScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zKSk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignSG1tc3MnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvczEgPSBpbnB1dC5sZW5ndGggLSA0LFxuICAgICAgICAgICAgcG9zMiA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvczEpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MxLCAyKSk7XG4gICAgICAgIGFycmF5W1NFQ09ORF0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMikpO1xuICAgIH0pO1xuXG4gICAgLy8gTE9DQUxFU1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlSXNQTShpbnB1dCkge1xuICAgICAgICAvLyBJRTggUXVpcmtzIE1vZGUgJiBJRTcgU3RhbmRhcmRzIE1vZGUgZG8gbm90IGFsbG93IGFjY2Vzc2luZyBzdHJpbmdzIGxpa2UgYXJyYXlzXG4gICAgICAgIC8vIFVzaW5nIGNoYXJBdCBzaG91bGQgYmUgbW9yZSBjb21wYXRpYmxlLlxuICAgICAgICByZXR1cm4gKGlucHV0ICsgJycpLnRvTG93ZXJDYXNlKCkuY2hhckF0KDApID09PSAncCc7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVNZXJpZGllbVBhcnNlID0gL1thcF1cXC4/bT9cXC4/L2ksXG4gICAgICAgIC8vIFNldHRpbmcgdGhlIGhvdXIgc2hvdWxkIGtlZXAgdGhlIHRpbWUsIGJlY2F1c2UgdGhlIHVzZXIgZXhwbGljaXRseVxuICAgICAgICAvLyBzcGVjaWZpZWQgd2hpY2ggaG91ciB0aGV5IHdhbnQuIFNvIHRyeWluZyB0byBtYWludGFpbiB0aGUgc2FtZSBob3VyIChpblxuICAgICAgICAvLyBhIG5ldyB0aW1lem9uZSkgbWFrZXMgc2Vuc2UuIEFkZGluZy9zdWJ0cmFjdGluZyBob3VycyBkb2VzIG5vdCBmb2xsb3dcbiAgICAgICAgLy8gdGhpcyBydWxlLlxuICAgICAgICBnZXRTZXRIb3VyID0gbWFrZUdldFNldCgnSG91cnMnLCB0cnVlKTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZU1lcmlkaWVtKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgIGlmIChob3VycyA+IDExKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdwbScgOiAnUE0nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnYW0nIDogJ0FNJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBiYXNlQ29uZmlnID0ge1xuICAgICAgICBjYWxlbmRhcjogZGVmYXVsdENhbGVuZGFyLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDogZGVmYXVsdExvbmdEYXRlRm9ybWF0LFxuICAgICAgICBpbnZhbGlkRGF0ZTogZGVmYXVsdEludmFsaWREYXRlLFxuICAgICAgICBvcmRpbmFsOiBkZWZhdWx0T3JkaW5hbCxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UsXG4gICAgICAgIHJlbGF0aXZlVGltZTogZGVmYXVsdFJlbGF0aXZlVGltZSxcblxuICAgICAgICBtb250aHM6IGRlZmF1bHRMb2NhbGVNb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0OiBkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQsXG5cbiAgICAgICAgd2VlazogZGVmYXVsdExvY2FsZVdlZWssXG5cbiAgICAgICAgd2Vla2RheXM6IGRlZmF1bHRMb2NhbGVXZWVrZGF5cyxcbiAgICAgICAgd2Vla2RheXNNaW46IGRlZmF1bHRMb2NhbGVXZWVrZGF5c01pbixcbiAgICAgICAgd2Vla2RheXNTaG9ydDogZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQsXG5cbiAgICAgICAgbWVyaWRpZW1QYXJzZTogZGVmYXVsdExvY2FsZU1lcmlkaWVtUGFyc2UsXG4gICAgfTtcblxuICAgIC8vIGludGVybmFsIHN0b3JhZ2UgZm9yIGxvY2FsZSBjb25maWcgZmlsZXNcbiAgICB2YXIgbG9jYWxlcyA9IHt9LFxuICAgICAgICBsb2NhbGVGYW1pbGllcyA9IHt9LFxuICAgICAgICBnbG9iYWxMb2NhbGU7XG5cbiAgICBmdW5jdGlvbiBjb21tb25QcmVmaXgoYXJyMSwgYXJyMikge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIG1pbmwgPSBNYXRoLm1pbihhcnIxLmxlbmd0aCwgYXJyMi5sZW5ndGgpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbWlubDsgaSArPSAxKSB7XG4gICAgICAgICAgICBpZiAoYXJyMVtpXSAhPT0gYXJyMltpXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW5sO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZUxvY2FsZShrZXkpIHtcbiAgICAgICAgcmV0dXJuIGtleSA/IGtleS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ18nLCAnLScpIDoga2V5O1xuICAgIH1cblxuICAgIC8vIHBpY2sgdGhlIGxvY2FsZSBmcm9tIHRoZSBhcnJheVxuICAgIC8vIHRyeSBbJ2VuLWF1JywgJ2VuLWdiJ10gYXMgJ2VuLWF1JywgJ2VuLWdiJywgJ2VuJywgYXMgaW4gbW92ZSB0aHJvdWdoIHRoZSBsaXN0IHRyeWluZyBlYWNoXG4gICAgLy8gc3Vic3RyaW5nIGZyb20gbW9zdCBzcGVjaWZpYyB0byBsZWFzdCwgYnV0IG1vdmUgdG8gdGhlIG5leHQgYXJyYXkgaXRlbSBpZiBpdCdzIGEgbW9yZSBzcGVjaWZpYyB2YXJpYW50IHRoYW4gdGhlIGN1cnJlbnQgcm9vdFxuICAgIGZ1bmN0aW9uIGNob29zZUxvY2FsZShuYW1lcykge1xuICAgICAgICB2YXIgaSA9IDAsXG4gICAgICAgICAgICBqLFxuICAgICAgICAgICAgbmV4dCxcbiAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgIHNwbGl0O1xuXG4gICAgICAgIHdoaWxlIChpIDwgbmFtZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBzcGxpdCA9IG5vcm1hbGl6ZUxvY2FsZShuYW1lc1tpXSkuc3BsaXQoJy0nKTtcbiAgICAgICAgICAgIGogPSBzcGxpdC5sZW5ndGg7XG4gICAgICAgICAgICBuZXh0ID0gbm9ybWFsaXplTG9jYWxlKG5hbWVzW2kgKyAxXSk7XG4gICAgICAgICAgICBuZXh0ID0gbmV4dCA/IG5leHQuc3BsaXQoJy0nKSA6IG51bGw7XG4gICAgICAgICAgICB3aGlsZSAoaiA+IDApIHtcbiAgICAgICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKHNwbGl0LnNsaWNlKDAsIGopLmpvaW4oJy0nKSk7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIG5leHQgJiZcbiAgICAgICAgICAgICAgICAgICAgbmV4dC5sZW5ndGggPj0gaiAmJlxuICAgICAgICAgICAgICAgICAgICBjb21tb25QcmVmaXgoc3BsaXQsIG5leHQpID49IGogLSAxXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vdGhlIG5leHQgYXJyYXkgaXRlbSBpcyBiZXR0ZXIgdGhhbiBhIHNoYWxsb3dlciBzdWJzdHJpbmcgb2YgdGhpcyBvbmVcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGotLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2xvYmFsTG9jYWxlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvYWRMb2NhbGUobmFtZSkge1xuICAgICAgICB2YXIgb2xkTG9jYWxlID0gbnVsbCxcbiAgICAgICAgICAgIGFsaWFzZWRSZXF1aXJlO1xuICAgICAgICAvLyBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byByZWdpc3RlciBhbmQgbG9hZCBhbGwgdGhlIGxvY2FsZXMgaW4gTm9kZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBsb2NhbGVzW25hbWVdID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICBtb2R1bGUgJiZcbiAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzXG4gICAgICAgICkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBvbGRMb2NhbGUgPSBnbG9iYWxMb2NhbGUuX2FiYnI7XG4gICAgICAgICAgICAgICAgYWxpYXNlZFJlcXVpcmUgPSByZXF1aXJlO1xuICAgICAgICAgICAgICAgIGFsaWFzZWRSZXF1aXJlKCcuL2xvY2FsZS8nICsgbmFtZSk7XG4gICAgICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG9sZExvY2FsZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gbWFyayBhcyBub3QgZm91bmQgdG8gYXZvaWQgcmVwZWF0aW5nIGV4cGVuc2l2ZSBmaWxlIHJlcXVpcmUgY2FsbCBjYXVzaW5nIGhpZ2ggQ1BVXG4gICAgICAgICAgICAgICAgLy8gd2hlbiB0cnlpbmcgdG8gZmluZCBlbi1VUywgZW5fVVMsIGVuLXVzIGZvciBldmVyeSBmb3JtYXQgY2FsbFxuICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBudWxsOyAvLyBudWxsIG1lYW5zIG5vdCBmb3VuZFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2NhbGVzW25hbWVdO1xuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBsb2FkIGxvY2FsZSBhbmQgdGhlbiBzZXQgdGhlIGdsb2JhbCBsb2NhbGUuICBJZlxuICAgIC8vIG5vIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGluLCBpdCB3aWxsIHNpbXBseSByZXR1cm4gdGhlIGN1cnJlbnQgZ2xvYmFsXG4gICAgLy8gbG9jYWxlIGtleS5cbiAgICBmdW5jdGlvbiBnZXRTZXRHbG9iYWxMb2NhbGUoa2V5LCB2YWx1ZXMpIHtcbiAgICAgICAgdmFyIGRhdGE7XG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZCh2YWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGdldExvY2FsZShrZXkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZGVmaW5lTG9jYWxlKGtleSwgdmFsdWVzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAvLyBtb21lbnQuZHVyYXRpb24uX2xvY2FsZSA9IG1vbWVudC5fbG9jYWxlID0gZGF0YTtcbiAgICAgICAgICAgICAgICBnbG9iYWxMb2NhbGUgPSBkYXRhO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIGNvbnNvbGUud2Fybikge1xuICAgICAgICAgICAgICAgICAgICAvL3dhcm4gdXNlciBpZiBhcmd1bWVudHMgYXJlIHBhc3NlZCBidXQgdGhlIGxvY2FsZSBjb3VsZCBub3QgYmUgc2V0XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgICAgICAgICAgICdMb2NhbGUgJyArIGtleSArICcgbm90IGZvdW5kLiBEaWQgeW91IGZvcmdldCB0byBsb2FkIGl0PydcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZ2xvYmFsTG9jYWxlLl9hYmJyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlZmluZUxvY2FsZShuYW1lLCBjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGxvY2FsZSxcbiAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBiYXNlQ29uZmlnO1xuICAgICAgICAgICAgY29uZmlnLmFiYnIgPSBuYW1lO1xuICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGRlcHJlY2F0ZVNpbXBsZShcbiAgICAgICAgICAgICAgICAgICAgJ2RlZmluZUxvY2FsZU92ZXJyaWRlJyxcbiAgICAgICAgICAgICAgICAgICAgJ3VzZSBtb21lbnQudXBkYXRlTG9jYWxlKGxvY2FsZU5hbWUsIGNvbmZpZykgdG8gY2hhbmdlICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2FuIGV4aXN0aW5nIGxvY2FsZS4gbW9tZW50LmRlZmluZUxvY2FsZShsb2NhbGVOYW1lLCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdjb25maWcpIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGNyZWF0aW5nIGEgbmV3IGxvY2FsZSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9kZWZpbmUtbG9jYWxlLyBmb3IgbW9yZSBpbmZvLidcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGxvY2FsZXNbbmFtZV0uX2NvbmZpZztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLnBhcmVudExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZXNbY29uZmlnLnBhcmVudExvY2FsZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBsb2NhbGVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdLl9jb25maWc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxlID0gbG9hZExvY2FsZShjb25maWcucGFyZW50TG9jYWxlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBsb2NhbGUuX2NvbmZpZztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbG9jYWxlRmFtaWxpZXNbY29uZmlnLnBhcmVudExvY2FsZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGVGYW1pbGllc1tjb25maWcucGFyZW50TG9jYWxlXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlRmFtaWxpZXNbY29uZmlnLnBhcmVudExvY2FsZV0ucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWc6IGNvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbmV3IExvY2FsZShtZXJnZUNvbmZpZ3MocGFyZW50Q29uZmlnLCBjb25maWcpKTtcblxuICAgICAgICAgICAgaWYgKGxvY2FsZUZhbWlsaWVzW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxlRmFtaWxpZXNbbmFtZV0uZm9yRWFjaChmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICBkZWZpbmVMb2NhbGUoeC5uYW1lLCB4LmNvbmZpZyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJhY2t3YXJkcyBjb21wYXQgZm9yIG5vdzogYWxzbyBzZXQgdGhlIGxvY2FsZVxuICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHdlIHNldCB0aGUgbG9jYWxlIEFGVEVSIGFsbCBjaGlsZCBsb2NhbGVzIGhhdmUgYmVlblxuICAgICAgICAgICAgLy8gY3JlYXRlZCwgc28gd2Ugd29uJ3QgZW5kIHVwIHdpdGggdGhlIGNoaWxkIGxvY2FsZSBzZXQuXG4gICAgICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGUobmFtZSk7XG5cbiAgICAgICAgICAgIHJldHVybiBsb2NhbGVzW25hbWVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gdXNlZnVsIGZvciB0ZXN0aW5nXG4gICAgICAgICAgICBkZWxldGUgbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlTG9jYWxlKG5hbWUsIGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBsb2NhbGUsXG4gICAgICAgICAgICAgICAgdG1wTG9jYWxlLFxuICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGJhc2VDb25maWc7XG5cbiAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwgJiYgbG9jYWxlc1tuYW1lXS5wYXJlbnRMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBleGlzdGluZyBjaGlsZCBsb2NhbGUgaW4tcGxhY2UgdG8gYXZvaWQgbWVtb3J5LWxlYWtzXG4gICAgICAgICAgICAgICAgbG9jYWxlc1tuYW1lXS5zZXQobWVyZ2VDb25maWdzKGxvY2FsZXNbbmFtZV0uX2NvbmZpZywgY29uZmlnKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIE1FUkdFXG4gICAgICAgICAgICAgICAgdG1wTG9jYWxlID0gbG9hZExvY2FsZShuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAodG1wTG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gdG1wTG9jYWxlLl9jb25maWc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbmZpZyA9IG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgaWYgKHRtcExvY2FsZSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZUxvY2FsZSBpcyBjYWxsZWQgZm9yIGNyZWF0aW5nIGEgbmV3IGxvY2FsZVxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgYWJiciBzbyBpdCB3aWxsIGhhdmUgYSBuYW1lIChnZXR0ZXJzIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAvLyB1bmRlZmluZWQgb3RoZXJ3aXNlKS5cbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLmFiYnIgPSBuYW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsb2NhbGUgPSBuZXcgTG9jYWxlKGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgbG9jYWxlLnBhcmVudExvY2FsZSA9IGxvY2FsZXNbbmFtZV07XG4gICAgICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IGxvY2FsZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gYmFja3dhcmRzIGNvbXBhdCBmb3Igbm93OiBhbHNvIHNldCB0aGUgbG9jYWxlXG4gICAgICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGUobmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBwYXNzIG51bGwgZm9yIGNvbmZpZyB0byB1bnVwZGF0ZSwgdXNlZnVsIGZvciB0ZXN0c1xuICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdLnBhcmVudExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBsb2NhbGVzW25hbWVdLnBhcmVudExvY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09IGdldFNldEdsb2JhbExvY2FsZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGUobmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvY2FsZXNbbmFtZV07XG4gICAgfVxuXG4gICAgLy8gcmV0dXJucyBsb2NhbGUgZGF0YVxuICAgIGZ1bmN0aW9uIGdldExvY2FsZShrZXkpIHtcbiAgICAgICAgdmFyIGxvY2FsZTtcblxuICAgICAgICBpZiAoa2V5ICYmIGtleS5fbG9jYWxlICYmIGtleS5fbG9jYWxlLl9hYmJyKSB7XG4gICAgICAgICAgICBrZXkgPSBrZXkuX2xvY2FsZS5fYWJicjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgha2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gZ2xvYmFsTG9jYWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc0FycmF5KGtleSkpIHtcbiAgICAgICAgICAgIC8vc2hvcnQtY2lyY3VpdCBldmVyeXRoaW5nIGVsc2VcbiAgICAgICAgICAgIGxvY2FsZSA9IGxvYWRMb2NhbGUoa2V5KTtcbiAgICAgICAgICAgIGlmIChsb2NhbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAga2V5ID0gW2tleV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2hvb3NlTG9jYWxlKGtleSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdExvY2FsZXMoKSB7XG4gICAgICAgIHJldHVybiBrZXlzKGxvY2FsZXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrT3ZlcmZsb3cobSkge1xuICAgICAgICB2YXIgb3ZlcmZsb3csXG4gICAgICAgICAgICBhID0gbS5fYTtcblxuICAgICAgICBpZiAoYSAmJiBnZXRQYXJzaW5nRmxhZ3MobSkub3ZlcmZsb3cgPT09IC0yKSB7XG4gICAgICAgICAgICBvdmVyZmxvdyA9XG4gICAgICAgICAgICAgICAgYVtNT05USF0gPCAwIHx8IGFbTU9OVEhdID4gMTFcbiAgICAgICAgICAgICAgICAgICAgPyBNT05USFxuICAgICAgICAgICAgICAgICAgICA6IGFbREFURV0gPCAxIHx8IGFbREFURV0gPiBkYXlzSW5Nb250aChhW1lFQVJdLCBhW01PTlRIXSlcbiAgICAgICAgICAgICAgICAgICAgPyBEQVRFXG4gICAgICAgICAgICAgICAgICAgIDogYVtIT1VSXSA8IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICBhW0hPVVJdID4gMjQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAoYVtIT1VSXSA9PT0gMjQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGFbTUlOVVRFXSAhPT0gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVtTRUNPTkRdICE9PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhW01JTExJU0VDT05EXSAhPT0gMCkpXG4gICAgICAgICAgICAgICAgICAgID8gSE9VUlxuICAgICAgICAgICAgICAgICAgICA6IGFbTUlOVVRFXSA8IDAgfHwgYVtNSU5VVEVdID4gNTlcbiAgICAgICAgICAgICAgICAgICAgPyBNSU5VVEVcbiAgICAgICAgICAgICAgICAgICAgOiBhW1NFQ09ORF0gPCAwIHx8IGFbU0VDT05EXSA+IDU5XG4gICAgICAgICAgICAgICAgICAgID8gU0VDT05EXG4gICAgICAgICAgICAgICAgICAgIDogYVtNSUxMSVNFQ09ORF0gPCAwIHx8IGFbTUlMTElTRUNPTkRdID4gOTk5XG4gICAgICAgICAgICAgICAgICAgID8gTUlMTElTRUNPTkRcbiAgICAgICAgICAgICAgICAgICAgOiAtMTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dEYXlPZlllYXIgJiZcbiAgICAgICAgICAgICAgICAob3ZlcmZsb3cgPCBZRUFSIHx8IG92ZXJmbG93ID4gREFURSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gREFURTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChnZXRQYXJzaW5nRmxhZ3MobSkuX292ZXJmbG93V2Vla3MgJiYgb3ZlcmZsb3cgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3cgPSBXRUVLO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dXZWVrZGF5ICYmIG92ZXJmbG93ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gV0VFS0RBWTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKG0pLm92ZXJmbG93ID0gb3ZlcmZsb3c7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICAvLyBpc28gODYwMSByZWdleFxuICAgIC8vIDAwMDAtMDAtMDAgMDAwMC1XMDAgb3IgMDAwMC1XMDAtMCArIFQgKyAwMCBvciAwMDowMCBvciAwMDowMDowMCBvciAwMDowMDowMC4wMDAgKyArMDA6MDAgb3IgKzAwMDAgb3IgKzAwKVxuICAgIHZhciBleHRlbmRlZElzb1JlZ2V4ID0gL15cXHMqKCg/OlsrLV1cXGR7Nn18XFxkezR9KS0oPzpcXGRcXGQtXFxkXFxkfFdcXGRcXGQtXFxkfFdcXGRcXGR8XFxkXFxkXFxkfFxcZFxcZCkpKD86KFR8ICkoXFxkXFxkKD86OlxcZFxcZCg/OjpcXGRcXGQoPzpbLixdXFxkKyk/KT8pPykoWystXVxcZFxcZCg/Ojo/XFxkXFxkKT98XFxzKlopPyk/JC8sXG4gICAgICAgIGJhc2ljSXNvUmVnZXggPSAvXlxccyooKD86WystXVxcZHs2fXxcXGR7NH0pKD86XFxkXFxkXFxkXFxkfFdcXGRcXGRcXGR8V1xcZFxcZHxcXGRcXGRcXGR8XFxkXFxkfCkpKD86KFR8ICkoXFxkXFxkKD86XFxkXFxkKD86XFxkXFxkKD86Wy4sXVxcZCspPyk/KT8pKFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/fFxccypaKT8pPyQvLFxuICAgICAgICB0elJlZ2V4ID0gL1p8WystXVxcZFxcZCg/Ojo/XFxkXFxkKT8vLFxuICAgICAgICBpc29EYXRlcyA9IFtcbiAgICAgICAgICAgIFsnWVlZWVlZLU1NLUREJywgL1srLV1cXGR7Nn0tXFxkXFxkLVxcZFxcZC9dLFxuICAgICAgICAgICAgWydZWVlZLU1NLUREJywgL1xcZHs0fS1cXGRcXGQtXFxkXFxkL10sXG4gICAgICAgICAgICBbJ0dHR0ctW1ddV1ctRScsIC9cXGR7NH0tV1xcZFxcZC1cXGQvXSxcbiAgICAgICAgICAgIFsnR0dHRy1bV11XVycsIC9cXGR7NH0tV1xcZFxcZC8sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnWVlZWS1EREQnLCAvXFxkezR9LVxcZHszfS9dLFxuICAgICAgICAgICAgWydZWVlZLU1NJywgL1xcZHs0fS1cXGRcXGQvLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ1lZWVlZWU1NREQnLCAvWystXVxcZHsxMH0vXSxcbiAgICAgICAgICAgIFsnWVlZWU1NREQnLCAvXFxkezh9L10sXG4gICAgICAgICAgICBbJ0dHR0dbV11XV0UnLCAvXFxkezR9V1xcZHszfS9dLFxuICAgICAgICAgICAgWydHR0dHW1ddV1cnLCAvXFxkezR9V1xcZHsyfS8sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnWVlZWURERCcsIC9cXGR7N30vXSxcbiAgICAgICAgICAgIFsnWVlZWU1NJywgL1xcZHs2fS8sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnWVlZWScsIC9cXGR7NH0vLCBmYWxzZV0sXG4gICAgICAgIF0sXG4gICAgICAgIC8vIGlzbyB0aW1lIGZvcm1hdHMgYW5kIHJlZ2V4ZXNcbiAgICAgICAgaXNvVGltZXMgPSBbXG4gICAgICAgICAgICBbJ0hIOm1tOnNzLlNTU1MnLCAvXFxkXFxkOlxcZFxcZDpcXGRcXGRcXC5cXGQrL10sXG4gICAgICAgICAgICBbJ0hIOm1tOnNzLFNTU1MnLCAvXFxkXFxkOlxcZFxcZDpcXGRcXGQsXFxkKy9dLFxuICAgICAgICAgICAgWydISDptbTpzcycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZC9dLFxuICAgICAgICAgICAgWydISDptbScsIC9cXGRcXGQ6XFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIbW1zcy5TU1NTJywgL1xcZFxcZFxcZFxcZFxcZFxcZFxcLlxcZCsvXSxcbiAgICAgICAgICAgIFsnSEhtbXNzLFNTU1MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkLFxcZCsvXSxcbiAgICAgICAgICAgIFsnSEhtbXNzJywgL1xcZFxcZFxcZFxcZFxcZFxcZC9dLFxuICAgICAgICAgICAgWydISG1tJywgL1xcZFxcZFxcZFxcZC9dLFxuICAgICAgICAgICAgWydISCcsIC9cXGRcXGQvXSxcbiAgICAgICAgXSxcbiAgICAgICAgYXNwTmV0SnNvblJlZ2V4ID0gL15cXC8/RGF0ZVxcKCgtP1xcZCspL2ksXG4gICAgICAgIC8vIFJGQyAyODIyIHJlZ2V4OiBGb3IgZGV0YWlscyBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzI4MjIjc2VjdGlvbi0zLjNcbiAgICAgICAgcmZjMjgyMiA9IC9eKD86KE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksP1xccyk/KFxcZHsxLDJ9KVxccyhKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYylcXHMoXFxkezIsNH0pXFxzKFxcZFxcZCk6KFxcZFxcZCkoPzo6KFxcZFxcZCkpP1xccyg/OihVVHxHTVR8W0VDTVBdW1NEXVQpfChbWnpdKXwoWystXVxcZHs0fSkpJC8sXG4gICAgICAgIG9ic09mZnNldHMgPSB7XG4gICAgICAgICAgICBVVDogMCxcbiAgICAgICAgICAgIEdNVDogMCxcbiAgICAgICAgICAgIEVEVDogLTQgKiA2MCxcbiAgICAgICAgICAgIEVTVDogLTUgKiA2MCxcbiAgICAgICAgICAgIENEVDogLTUgKiA2MCxcbiAgICAgICAgICAgIENTVDogLTYgKiA2MCxcbiAgICAgICAgICAgIE1EVDogLTYgKiA2MCxcbiAgICAgICAgICAgIE1TVDogLTcgKiA2MCxcbiAgICAgICAgICAgIFBEVDogLTcgKiA2MCxcbiAgICAgICAgICAgIFBTVDogLTggKiA2MCxcbiAgICAgICAgfTtcblxuICAgIC8vIGRhdGUgZnJvbSBpc28gZm9ybWF0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUlTTyhjb25maWcpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgc3RyaW5nID0gY29uZmlnLl9pLFxuICAgICAgICAgICAgbWF0Y2ggPSBleHRlbmRlZElzb1JlZ2V4LmV4ZWMoc3RyaW5nKSB8fCBiYXNpY0lzb1JlZ2V4LmV4ZWMoc3RyaW5nKSxcbiAgICAgICAgICAgIGFsbG93VGltZSxcbiAgICAgICAgICAgIGRhdGVGb3JtYXQsXG4gICAgICAgICAgICB0aW1lRm9ybWF0LFxuICAgICAgICAgICAgdHpGb3JtYXQ7XG5cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pc28gPSB0cnVlO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gaXNvRGF0ZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzb0RhdGVzW2ldWzFdLmV4ZWMobWF0Y2hbMV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGVGb3JtYXQgPSBpc29EYXRlc1tpXVswXTtcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dUaW1lID0gaXNvRGF0ZXNbaV1bMl0gIT09IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0ZUZvcm1hdCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hdGNoWzNdKSB7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMCwgbCA9IGlzb1RpbWVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNvVGltZXNbaV1bMV0uZXhlYyhtYXRjaFszXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hdGNoWzJdIHNob3VsZCBiZSAnVCcgb3Igc3BhY2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVGb3JtYXQgPSAobWF0Y2hbMl0gfHwgJyAnKSArIGlzb1RpbWVzW2ldWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRpbWVGb3JtYXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghYWxsb3dUaW1lICYmIHRpbWVGb3JtYXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFs0XSkge1xuICAgICAgICAgICAgICAgIGlmICh0elJlZ2V4LmV4ZWMobWF0Y2hbNF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHR6Rm9ybWF0ID0gJ1onO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uZmlnLl9mID0gZGF0ZUZvcm1hdCArICh0aW1lRm9ybWF0IHx8ICcnKSArICh0ekZvcm1hdCB8fCAnJyk7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dHJhY3RGcm9tUkZDMjgyMlN0cmluZ3MoXG4gICAgICAgIHllYXJTdHIsXG4gICAgICAgIG1vbnRoU3RyLFxuICAgICAgICBkYXlTdHIsXG4gICAgICAgIGhvdXJTdHIsXG4gICAgICAgIG1pbnV0ZVN0cixcbiAgICAgICAgc2Vjb25kU3RyXG4gICAgKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXG4gICAgICAgICAgICB1bnRydW5jYXRlWWVhcih5ZWFyU3RyKSxcbiAgICAgICAgICAgIGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydC5pbmRleE9mKG1vbnRoU3RyKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGRheVN0ciwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQoaG91clN0ciwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQobWludXRlU3RyLCAxMCksXG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKHNlY29uZFN0cikge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gocGFyc2VJbnQoc2Vjb25kU3RyLCAxMCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1bnRydW5jYXRlWWVhcih5ZWFyU3RyKSB7XG4gICAgICAgIHZhciB5ZWFyID0gcGFyc2VJbnQoeWVhclN0ciwgMTApO1xuICAgICAgICBpZiAoeWVhciA8PSA0OSkge1xuICAgICAgICAgICAgcmV0dXJuIDIwMDAgKyB5ZWFyO1xuICAgICAgICB9IGVsc2UgaWYgKHllYXIgPD0gOTk5KSB7XG4gICAgICAgICAgICByZXR1cm4gMTkwMCArIHllYXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHllYXI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcHJvY2Vzc1JGQzI4MjIocykge1xuICAgICAgICAvLyBSZW1vdmUgY29tbWVudHMgYW5kIGZvbGRpbmcgd2hpdGVzcGFjZSBhbmQgcmVwbGFjZSBtdWx0aXBsZS1zcGFjZXMgd2l0aCBhIHNpbmdsZSBzcGFjZVxuICAgICAgICByZXR1cm4gc1xuICAgICAgICAgICAgLnJlcGxhY2UoL1xcKFteKV0qXFwpfFtcXG5cXHRdL2csICcgJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC8oXFxzXFxzKykvZywgJyAnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL15cXHNcXHMqLywgJycpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxzXFxzKiQvLCAnJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2tXZWVrZGF5KHdlZWtkYXlTdHIsIHBhcnNlZElucHV0LCBjb25maWcpIHtcbiAgICAgICAgaWYgKHdlZWtkYXlTdHIpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IFJlcGxhY2UgdGhlIHZhbmlsbGEgSlMgRGF0ZSBvYmplY3Qgd2l0aCBhbiBpbmRlcGVuZGVudCBkYXktb2Ytd2VlayBjaGVjay5cbiAgICAgICAgICAgIHZhciB3ZWVrZGF5UHJvdmlkZWQgPSBkZWZhdWx0TG9jYWxlV2Vla2RheXNTaG9ydC5pbmRleE9mKHdlZWtkYXlTdHIpLFxuICAgICAgICAgICAgICAgIHdlZWtkYXlBY3R1YWwgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkSW5wdXRbMF0sXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZElucHV0WzFdLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRJbnB1dFsyXVxuICAgICAgICAgICAgICAgICkuZ2V0RGF5KCk7XG4gICAgICAgICAgICBpZiAod2Vla2RheVByb3ZpZGVkICE9PSB3ZWVrZGF5QWN0dWFsKSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykud2Vla2RheU1pc21hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FsY3VsYXRlT2Zmc2V0KG9ic09mZnNldCwgbWlsaXRhcnlPZmZzZXQsIG51bU9mZnNldCkge1xuICAgICAgICBpZiAob2JzT2Zmc2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gb2JzT2Zmc2V0c1tvYnNPZmZzZXRdO1xuICAgICAgICB9IGVsc2UgaWYgKG1pbGl0YXJ5T2Zmc2V0KSB7XG4gICAgICAgICAgICAvLyB0aGUgb25seSBhbGxvd2VkIG1pbGl0YXJ5IHR6IGlzIFpcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGhtID0gcGFyc2VJbnQobnVtT2Zmc2V0LCAxMCksXG4gICAgICAgICAgICAgICAgbSA9IGhtICUgMTAwLFxuICAgICAgICAgICAgICAgIGggPSAoaG0gLSBtKSAvIDEwMDtcbiAgICAgICAgICAgIHJldHVybiBoICogNjAgKyBtO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGF0ZSBhbmQgdGltZSBmcm9tIHJlZiAyODIyIGZvcm1hdFxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21SRkMyODIyKGNvbmZpZykge1xuICAgICAgICB2YXIgbWF0Y2ggPSByZmMyODIyLmV4ZWMocHJlcHJvY2Vzc1JGQzI4MjIoY29uZmlnLl9pKSksXG4gICAgICAgICAgICBwYXJzZWRBcnJheTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBwYXJzZWRBcnJheSA9IGV4dHJhY3RGcm9tUkZDMjgyMlN0cmluZ3MoXG4gICAgICAgICAgICAgICAgbWF0Y2hbNF0sXG4gICAgICAgICAgICAgICAgbWF0Y2hbM10sXG4gICAgICAgICAgICAgICAgbWF0Y2hbMl0sXG4gICAgICAgICAgICAgICAgbWF0Y2hbNV0sXG4gICAgICAgICAgICAgICAgbWF0Y2hbNl0sXG4gICAgICAgICAgICAgICAgbWF0Y2hbN11cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoIWNoZWNrV2Vla2RheShtYXRjaFsxXSwgcGFyc2VkQXJyYXksIGNvbmZpZykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbmZpZy5fYSA9IHBhcnNlZEFycmF5O1xuICAgICAgICAgICAgY29uZmlnLl90em0gPSBjYWxjdWxhdGVPZmZzZXQobWF0Y2hbOF0sIG1hdGNoWzldLCBtYXRjaFsxMF0pO1xuXG4gICAgICAgICAgICBjb25maWcuX2QgPSBjcmVhdGVVVENEYXRlLmFwcGx5KG51bGwsIGNvbmZpZy5fYSk7XG4gICAgICAgICAgICBjb25maWcuX2Quc2V0VVRDTWludXRlcyhjb25maWcuX2QuZ2V0VVRDTWludXRlcygpIC0gY29uZmlnLl90em0pO1xuXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5yZmMyODIyID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGF0ZSBmcm9tIDEpIEFTUC5ORVQsIDIpIElTTywgMykgUkZDIDI4MjIgZm9ybWF0cywgb3IgNCkgb3B0aW9uYWwgZmFsbGJhY2sgaWYgcGFyc2luZyBpc24ndCBzdHJpY3RcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tU3RyaW5nKGNvbmZpZykge1xuICAgICAgICB2YXIgbWF0Y2hlZCA9IGFzcE5ldEpzb25SZWdleC5leGVjKGNvbmZpZy5faSk7XG4gICAgICAgIGlmIChtYXRjaGVkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZSgrbWF0Y2hlZFsxXSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWdGcm9tSVNPKGNvbmZpZyk7XG4gICAgICAgIGlmIChjb25maWcuX2lzVmFsaWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBkZWxldGUgY29uZmlnLl9pc1ZhbGlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnRnJvbVJGQzI4MjIoY29uZmlnKTtcbiAgICAgICAgaWYgKGNvbmZpZy5faXNWYWxpZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBjb25maWcuX2lzVmFsaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLl9zdHJpY3QpIHtcbiAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRmluYWwgYXR0ZW1wdCwgdXNlIElucHV0IEZhbGxiYWNrXG4gICAgICAgICAgICBob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaG9va3MuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2sgPSBkZXByZWNhdGUoXG4gICAgICAgICd2YWx1ZSBwcm92aWRlZCBpcyBub3QgaW4gYSByZWNvZ25pemVkIFJGQzI4MjIgb3IgSVNPIGZvcm1hdC4gbW9tZW50IGNvbnN0cnVjdGlvbiBmYWxscyBiYWNrIHRvIGpzIERhdGUoKSwgJyArXG4gICAgICAgICAgICAnd2hpY2ggaXMgbm90IHJlbGlhYmxlIGFjcm9zcyBhbGwgYnJvd3NlcnMgYW5kIHZlcnNpb25zLiBOb24gUkZDMjgyMi9JU08gZGF0ZSBmb3JtYXRzIGFyZSAnICtcbiAgICAgICAgICAgICdkaXNjb3VyYWdlZC4gUGxlYXNlIHJlZmVyIHRvIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvanMtZGF0ZS8gZm9yIG1vcmUgaW5mby4nLFxuICAgICAgICBmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShjb25maWcuX2kgKyAoY29uZmlnLl91c2VVVEMgPyAnIFVUQycgOiAnJykpO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8vIFBpY2sgdGhlIGZpcnN0IGRlZmluZWQgb2YgdHdvIG9yIHRocmVlIGFyZ3VtZW50cy5cbiAgICBmdW5jdGlvbiBkZWZhdWx0cyhhLCBiLCBjKSB7XG4gICAgICAgIGlmIChhICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICB9XG4gICAgICAgIGlmIChiICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGN1cnJlbnREYXRlQXJyYXkoY29uZmlnKSB7XG4gICAgICAgIC8vIGhvb2tzIGlzIGFjdHVhbGx5IHRoZSBleHBvcnRlZCBtb21lbnQgb2JqZWN0XG4gICAgICAgIHZhciBub3dWYWx1ZSA9IG5ldyBEYXRlKGhvb2tzLm5vdygpKTtcbiAgICAgICAgaWYgKGNvbmZpZy5fdXNlVVRDKSB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIG5vd1ZhbHVlLmdldFVUQ0Z1bGxZZWFyKCksXG4gICAgICAgICAgICAgICAgbm93VmFsdWUuZ2V0VVRDTW9udGgoKSxcbiAgICAgICAgICAgICAgICBub3dWYWx1ZS5nZXRVVENEYXRlKCksXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbbm93VmFsdWUuZ2V0RnVsbFllYXIoKSwgbm93VmFsdWUuZ2V0TW9udGgoKSwgbm93VmFsdWUuZ2V0RGF0ZSgpXTtcbiAgICB9XG5cbiAgICAvLyBjb252ZXJ0IGFuIGFycmF5IHRvIGEgZGF0ZS5cbiAgICAvLyB0aGUgYXJyYXkgc2hvdWxkIG1pcnJvciB0aGUgcGFyYW1ldGVycyBiZWxvd1xuICAgIC8vIG5vdGU6IGFsbCB2YWx1ZXMgcGFzdCB0aGUgeWVhciBhcmUgb3B0aW9uYWwgYW5kIHdpbGwgZGVmYXVsdCB0byB0aGUgbG93ZXN0IHBvc3NpYmxlIHZhbHVlLlxuICAgIC8vIFt5ZWFyLCBtb250aCwgZGF5ICwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kXVxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21BcnJheShjb25maWcpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgaW5wdXQgPSBbXSxcbiAgICAgICAgICAgIGN1cnJlbnREYXRlLFxuICAgICAgICAgICAgZXhwZWN0ZWRXZWVrZGF5LFxuICAgICAgICAgICAgeWVhclRvVXNlO1xuXG4gICAgICAgIGlmIChjb25maWcuX2QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnREYXRlID0gY3VycmVudERhdGVBcnJheShjb25maWcpO1xuXG4gICAgICAgIC8vY29tcHV0ZSBkYXkgb2YgdGhlIHllYXIgZnJvbSB3ZWVrcyBhbmQgd2Vla2RheXNcbiAgICAgICAgaWYgKGNvbmZpZy5fdyAmJiBjb25maWcuX2FbREFURV0gPT0gbnVsbCAmJiBjb25maWcuX2FbTU9OVEhdID09IG51bGwpIHtcbiAgICAgICAgICAgIGRheU9mWWVhckZyb21XZWVrSW5mbyhjb25maWcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9pZiB0aGUgZGF5IG9mIHRoZSB5ZWFyIGlzIHNldCwgZmlndXJlIG91dCB3aGF0IGl0IGlzXG4gICAgICAgIGlmIChjb25maWcuX2RheU9mWWVhciAhPSBudWxsKSB7XG4gICAgICAgICAgICB5ZWFyVG9Vc2UgPSBkZWZhdWx0cyhjb25maWcuX2FbWUVBUl0sIGN1cnJlbnREYXRlW1lFQVJdKTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID4gZGF5c0luWWVhcih5ZWFyVG9Vc2UpIHx8XG4gICAgICAgICAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPT09IDBcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLl9vdmVyZmxvd0RheU9mWWVhciA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRhdGUgPSBjcmVhdGVVVENEYXRlKHllYXJUb1VzZSwgMCwgY29uZmlnLl9kYXlPZlllYXIpO1xuICAgICAgICAgICAgY29uZmlnLl9hW01PTlRIXSA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtEQVRFXSA9IGRhdGUuZ2V0VVRDRGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGVmYXVsdCB0byBjdXJyZW50IGRhdGUuXG4gICAgICAgIC8vICogaWYgbm8geWVhciwgbW9udGgsIGRheSBvZiBtb250aCBhcmUgZ2l2ZW4sIGRlZmF1bHQgdG8gdG9kYXlcbiAgICAgICAgLy8gKiBpZiBkYXkgb2YgbW9udGggaXMgZ2l2ZW4sIGRlZmF1bHQgbW9udGggYW5kIHllYXJcbiAgICAgICAgLy8gKiBpZiBtb250aCBpcyBnaXZlbiwgZGVmYXVsdCBvbmx5IHllYXJcbiAgICAgICAgLy8gKiBpZiB5ZWFyIGlzIGdpdmVuLCBkb24ndCBkZWZhdWx0IGFueXRoaW5nXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAzICYmIGNvbmZpZy5fYVtpXSA9PSBudWxsOyArK2kpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtpXSA9IGlucHV0W2ldID0gY3VycmVudERhdGVbaV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBaZXJvIG91dCB3aGF0ZXZlciB3YXMgbm90IGRlZmF1bHRlZCwgaW5jbHVkaW5nIHRpbWVcbiAgICAgICAgZm9yICg7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtpXSA9IGlucHV0W2ldID1cbiAgICAgICAgICAgICAgICBjb25maWcuX2FbaV0gPT0gbnVsbCA/IChpID09PSAyID8gMSA6IDApIDogY29uZmlnLl9hW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgZm9yIDI0OjAwOjAwLjAwMFxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPT09IDI0ICYmXG4gICAgICAgICAgICBjb25maWcuX2FbTUlOVVRFXSA9PT0gMCAmJlxuICAgICAgICAgICAgY29uZmlnLl9hW1NFQ09ORF0gPT09IDAgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fYVtNSUxMSVNFQ09ORF0gPT09IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25maWcuX25leHREYXkgPSB0cnVlO1xuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZy5fZCA9IChjb25maWcuX3VzZVVUQyA/IGNyZWF0ZVVUQ0RhdGUgOiBjcmVhdGVEYXRlKS5hcHBseShcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICBpbnB1dFxuICAgICAgICApO1xuICAgICAgICBleHBlY3RlZFdlZWtkYXkgPSBjb25maWcuX3VzZVVUQ1xuICAgICAgICAgICAgPyBjb25maWcuX2QuZ2V0VVRDRGF5KClcbiAgICAgICAgICAgIDogY29uZmlnLl9kLmdldERheSgpO1xuXG4gICAgICAgIC8vIEFwcGx5IHRpbWV6b25lIG9mZnNldCBmcm9tIGlucHV0LiBUaGUgYWN0dWFsIHV0Y09mZnNldCBjYW4gYmUgY2hhbmdlZFxuICAgICAgICAvLyB3aXRoIHBhcnNlWm9uZS5cbiAgICAgICAgaWYgKGNvbmZpZy5fdHptICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZC5zZXRVVENNaW51dGVzKGNvbmZpZy5fZC5nZXRVVENNaW51dGVzKCkgLSBjb25maWcuX3R6bSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLl9uZXh0RGF5KSB7XG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPSAyNDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNoZWNrIGZvciBtaXNtYXRjaGluZyBkYXkgb2Ygd2Vla1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb25maWcuX3cgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjb25maWcuX3cuZCAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fdy5kICE9PSBleHBlY3RlZFdlZWtkYXlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS53ZWVrZGF5TWlzbWF0Y2ggPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGF5T2ZZZWFyRnJvbVdlZWtJbmZvKGNvbmZpZykge1xuICAgICAgICB2YXIgdywgd2Vla1llYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95LCB0ZW1wLCB3ZWVrZGF5T3ZlcmZsb3csIGN1cldlZWs7XG5cbiAgICAgICAgdyA9IGNvbmZpZy5fdztcbiAgICAgICAgaWYgKHcuR0cgIT0gbnVsbCB8fCB3LlcgIT0gbnVsbCB8fCB3LkUgIT0gbnVsbCkge1xuICAgICAgICAgICAgZG93ID0gMTtcbiAgICAgICAgICAgIGRveSA9IDQ7XG5cbiAgICAgICAgICAgIC8vIFRPRE86IFdlIG5lZWQgdG8gdGFrZSB0aGUgY3VycmVudCBpc29XZWVrWWVhciwgYnV0IHRoYXQgZGVwZW5kcyBvblxuICAgICAgICAgICAgLy8gaG93IHdlIGludGVycHJldCBub3cgKGxvY2FsLCB1dGMsIGZpeGVkIG9mZnNldCkuIFNvIGNyZWF0ZVxuICAgICAgICAgICAgLy8gYSBub3cgdmVyc2lvbiBvZiBjdXJyZW50IGNvbmZpZyAodGFrZSBsb2NhbC91dGMvb2Zmc2V0IGZsYWdzLCBhbmRcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBub3cpLlxuICAgICAgICAgICAgd2Vla1llYXIgPSBkZWZhdWx0cyhcbiAgICAgICAgICAgICAgICB3LkdHLFxuICAgICAgICAgICAgICAgIGNvbmZpZy5fYVtZRUFSXSxcbiAgICAgICAgICAgICAgICB3ZWVrT2ZZZWFyKGNyZWF0ZUxvY2FsKCksIDEsIDQpLnllYXJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB3ZWVrID0gZGVmYXVsdHMody5XLCAxKTtcbiAgICAgICAgICAgIHdlZWtkYXkgPSBkZWZhdWx0cyh3LkUsIDEpO1xuICAgICAgICAgICAgaWYgKHdlZWtkYXkgPCAxIHx8IHdlZWtkYXkgPiA3KSB7XG4gICAgICAgICAgICAgICAgd2Vla2RheU92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRvdyA9IGNvbmZpZy5fbG9jYWxlLl93ZWVrLmRvdztcbiAgICAgICAgICAgIGRveSA9IGNvbmZpZy5fbG9jYWxlLl93ZWVrLmRveTtcblxuICAgICAgICAgICAgY3VyV2VlayA9IHdlZWtPZlllYXIoY3JlYXRlTG9jYWwoKSwgZG93LCBkb3kpO1xuXG4gICAgICAgICAgICB3ZWVrWWVhciA9IGRlZmF1bHRzKHcuZ2csIGNvbmZpZy5fYVtZRUFSXSwgY3VyV2Vlay55ZWFyKTtcblxuICAgICAgICAgICAgLy8gRGVmYXVsdCB0byBjdXJyZW50IHdlZWsuXG4gICAgICAgICAgICB3ZWVrID0gZGVmYXVsdHMody53LCBjdXJXZWVrLndlZWspO1xuXG4gICAgICAgICAgICBpZiAody5kICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyB3ZWVrZGF5IC0tIGxvdyBkYXkgbnVtYmVycyBhcmUgY29uc2lkZXJlZCBuZXh0IHdlZWtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5ID0gdy5kO1xuICAgICAgICAgICAgICAgIGlmICh3ZWVrZGF5IDwgMCB8fCB3ZWVrZGF5ID4gNikge1xuICAgICAgICAgICAgICAgICAgICB3ZWVrZGF5T3ZlcmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAody5lICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBsb2NhbCB3ZWVrZGF5IC0tIGNvdW50aW5nIHN0YXJ0cyBmcm9tIGJlZ2lubmluZyBvZiB3ZWVrXG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IHcuZSArIGRvdztcbiAgICAgICAgICAgICAgICBpZiAody5lIDwgMCB8fCB3LmUgPiA2KSB7XG4gICAgICAgICAgICAgICAgICAgIHdlZWtkYXlPdmVyZmxvdyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBkZWZhdWx0IHRvIGJlZ2lubmluZyBvZiB3ZWVrXG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IGRvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAod2VlayA8IDEgfHwgd2VlayA+IHdlZWtzSW5ZZWFyKHdlZWtZZWFyLCBkb3csIGRveSkpIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLl9vdmVyZmxvd1dlZWtzID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh3ZWVrZGF5T3ZlcmZsb3cgIT0gbnVsbCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuX292ZXJmbG93V2Vla2RheSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0ZW1wID0gZGF5T2ZZZWFyRnJvbVdlZWtzKHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSk7XG4gICAgICAgICAgICBjb25maWcuX2FbWUVBUl0gPSB0ZW1wLnllYXI7XG4gICAgICAgICAgICBjb25maWcuX2RheU9mWWVhciA9IHRlbXAuZGF5T2ZZZWFyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gY29uc3RhbnQgdGhhdCByZWZlcnMgdG8gdGhlIElTTyBzdGFuZGFyZFxuICAgIGhvb2tzLklTT184NjAxID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAvLyBjb25zdGFudCB0aGF0IHJlZmVycyB0byB0aGUgUkZDIDI4MjIgZm9ybVxuICAgIGhvb2tzLlJGQ18yODIyID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAvLyBkYXRlIGZyb20gc3RyaW5nIGFuZCBmb3JtYXQgc3RyaW5nXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpIHtcbiAgICAgICAgLy8gVE9ETzogTW92ZSB0aGlzIHRvIGFub3RoZXIgcGFydCBvZiB0aGUgY3JlYXRpb24gZmxvdyB0byBwcmV2ZW50IGNpcmN1bGFyIGRlcHNcbiAgICAgICAgaWYgKGNvbmZpZy5fZiA9PT0gaG9va3MuSVNPXzg2MDEpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21JU08oY29uZmlnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlnLl9mID09PSBob29rcy5SRkNfMjgyMikge1xuICAgICAgICAgICAgY29uZmlnRnJvbVJGQzI4MjIoY29uZmlnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25maWcuX2EgPSBbXTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZW1wdHkgPSB0cnVlO1xuXG4gICAgICAgIC8vIFRoaXMgYXJyYXkgaXMgdXNlZCB0byBtYWtlIGEgRGF0ZSwgZWl0aGVyIHdpdGggYG5ldyBEYXRlYCBvciBgRGF0ZS5VVENgXG4gICAgICAgIHZhciBzdHJpbmcgPSAnJyArIGNvbmZpZy5faSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBwYXJzZWRJbnB1dCxcbiAgICAgICAgICAgIHRva2VucyxcbiAgICAgICAgICAgIHRva2VuLFxuICAgICAgICAgICAgc2tpcHBlZCxcbiAgICAgICAgICAgIHN0cmluZ0xlbmd0aCA9IHN0cmluZy5sZW5ndGgsXG4gICAgICAgICAgICB0b3RhbFBhcnNlZElucHV0TGVuZ3RoID0gMCxcbiAgICAgICAgICAgIGVyYTtcblxuICAgICAgICB0b2tlbnMgPVxuICAgICAgICAgICAgZXhwYW5kRm9ybWF0KGNvbmZpZy5fZiwgY29uZmlnLl9sb2NhbGUpLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnMpIHx8IFtdO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2ldO1xuICAgICAgICAgICAgcGFyc2VkSW5wdXQgPSAoc3RyaW5nLm1hdGNoKGdldFBhcnNlUmVnZXhGb3JUb2tlbih0b2tlbiwgY29uZmlnKSkgfHxcbiAgICAgICAgICAgICAgICBbXSlbMF07XG4gICAgICAgICAgICBpZiAocGFyc2VkSW5wdXQpIHtcbiAgICAgICAgICAgICAgICBza2lwcGVkID0gc3RyaW5nLnN1YnN0cigwLCBzdHJpbmcuaW5kZXhPZihwYXJzZWRJbnB1dCkpO1xuICAgICAgICAgICAgICAgIGlmIChza2lwcGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkSW5wdXQucHVzaChza2lwcGVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnNsaWNlKFxuICAgICAgICAgICAgICAgICAgICBzdHJpbmcuaW5kZXhPZihwYXJzZWRJbnB1dCkgKyBwYXJzZWRJbnB1dC5sZW5ndGhcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRvdGFsUGFyc2VkSW5wdXRMZW5ndGggKz0gcGFyc2VkSW5wdXQubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZG9uJ3QgcGFyc2UgaWYgaXQncyBub3QgYSBrbm93biB0b2tlblxuICAgICAgICAgICAgaWYgKGZvcm1hdFRva2VuRnVuY3Rpb25zW3Rva2VuXSkge1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZWRJbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5lbXB0eSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZFRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYWRkVGltZVRvQXJyYXlGcm9tVG9rZW4odG9rZW4sIHBhcnNlZElucHV0LCBjb25maWcpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb25maWcuX3N0cmljdCAmJiAhcGFyc2VkSW5wdXQpIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRUb2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhZGQgcmVtYWluaW5nIHVucGFyc2VkIGlucHV0IGxlbmd0aCB0byB0aGUgc3RyaW5nXG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmNoYXJzTGVmdE92ZXIgPVxuICAgICAgICAgICAgc3RyaW5nTGVuZ3RoIC0gdG90YWxQYXJzZWRJbnB1dExlbmd0aDtcbiAgICAgICAgaWYgKHN0cmluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRJbnB1dC5wdXNoKHN0cmluZyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjbGVhciBfMTJoIGZsYWcgaWYgaG91ciBpcyA8PSAxMlxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPD0gMTIgJiZcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPT09IHRydWUgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA+IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykucGFyc2VkRGF0ZVBhcnRzID0gY29uZmlnLl9hLnNsaWNlKDApO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5tZXJpZGllbSA9IGNvbmZpZy5fbWVyaWRpZW07XG4gICAgICAgIC8vIGhhbmRsZSBtZXJpZGllbVxuICAgICAgICBjb25maWcuX2FbSE9VUl0gPSBtZXJpZGllbUZpeFdyYXAoXG4gICAgICAgICAgICBjb25maWcuX2xvY2FsZSxcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSxcbiAgICAgICAgICAgIGNvbmZpZy5fbWVyaWRpZW1cbiAgICAgICAgKTtcblxuICAgICAgICAvLyBoYW5kbGUgZXJhXG4gICAgICAgIGVyYSA9IGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVyYTtcbiAgICAgICAgaWYgKGVyYSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uZmlnLl9hW1lFQVJdID0gY29uZmlnLl9sb2NhbGUuZXJhc0NvbnZlcnRZZWFyKGVyYSwgY29uZmlnLl9hW1lFQVJdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZ0Zyb21BcnJheShjb25maWcpO1xuICAgICAgICBjaGVja092ZXJmbG93KGNvbmZpZyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWVyaWRpZW1GaXhXcmFwKGxvY2FsZSwgaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgdmFyIGlzUG07XG5cbiAgICAgICAgaWYgKG1lcmlkaWVtID09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIG5vdGhpbmcgdG8gZG9cbiAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbGUubWVyaWRpZW1Ib3VyICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbGUubWVyaWRpZW1Ib3VyKGhvdXIsIG1lcmlkaWVtKTtcbiAgICAgICAgfSBlbHNlIGlmIChsb2NhbGUuaXNQTSAhPSBudWxsKSB7XG4gICAgICAgICAgICAvLyBGYWxsYmFja1xuICAgICAgICAgICAgaXNQbSA9IGxvY2FsZS5pc1BNKG1lcmlkaWVtKTtcbiAgICAgICAgICAgIGlmIChpc1BtICYmIGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWlzUG0gJiYgaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyBub3Qgc3VwcG9zZWQgdG8gaGFwcGVuXG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgZnJvbSBzdHJpbmcgYW5kIGFycmF5IG9mIGZvcm1hdCBzdHJpbmdzXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVN0cmluZ0FuZEFycmF5KGNvbmZpZykge1xuICAgICAgICB2YXIgdGVtcENvbmZpZyxcbiAgICAgICAgICAgIGJlc3RNb21lbnQsXG4gICAgICAgICAgICBzY29yZVRvQmVhdCxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBjdXJyZW50U2NvcmUsXG4gICAgICAgICAgICB2YWxpZEZvcm1hdEZvdW5kLFxuICAgICAgICAgICAgYmVzdEZvcm1hdElzVmFsaWQgPSBmYWxzZTtcblxuICAgICAgICBpZiAoY29uZmlnLl9mLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZEZvcm1hdCA9IHRydWU7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShOYU4pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbmZpZy5fZi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY3VycmVudFNjb3JlID0gMDtcbiAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRlbXBDb25maWcgPSBjb3B5Q29uZmlnKHt9LCBjb25maWcpO1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5fdXNlVVRDICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0ZW1wQ29uZmlnLl91c2VVVEMgPSBjb25maWcuX3VzZVVUQztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRlbXBDb25maWcuX2YgPSBjb25maWcuX2ZbaV07XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KHRlbXBDb25maWcpO1xuXG4gICAgICAgICAgICBpZiAoaXNWYWxpZCh0ZW1wQ29uZmlnKSkge1xuICAgICAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbnkgaW5wdXQgdGhhdCB3YXMgbm90IHBhcnNlZCBhZGQgYSBwZW5hbHR5IGZvciB0aGF0IGZvcm1hdFxuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5jaGFyc0xlZnRPdmVyO1xuXG4gICAgICAgICAgICAvL29yIHRva2Vuc1xuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS51bnVzZWRUb2tlbnMubGVuZ3RoICogMTA7XG5cbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5zY29yZSA9IGN1cnJlbnRTY29yZTtcblxuICAgICAgICAgICAgaWYgKCFiZXN0Rm9ybWF0SXNWYWxpZCkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgc2NvcmVUb0JlYXQgPT0gbnVsbCB8fFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcmUgPCBzY29yZVRvQmVhdCB8fFxuICAgICAgICAgICAgICAgICAgICB2YWxpZEZvcm1hdEZvdW5kXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3JlVG9CZWF0ID0gY3VycmVudFNjb3JlO1xuICAgICAgICAgICAgICAgICAgICBiZXN0TW9tZW50ID0gdGVtcENvbmZpZztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkRm9ybWF0Rm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlc3RGb3JtYXRJc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRTY29yZSA8IHNjb3JlVG9CZWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3JlVG9CZWF0ID0gY3VycmVudFNjb3JlO1xuICAgICAgICAgICAgICAgICAgICBiZXN0TW9tZW50ID0gdGVtcENvbmZpZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBleHRlbmQoY29uZmlnLCBiZXN0TW9tZW50IHx8IHRlbXBDb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21PYmplY3QoY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcuX2QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpID0gbm9ybWFsaXplT2JqZWN0VW5pdHMoY29uZmlnLl9pKSxcbiAgICAgICAgICAgIGRheU9yRGF0ZSA9IGkuZGF5ID09PSB1bmRlZmluZWQgPyBpLmRhdGUgOiBpLmRheTtcbiAgICAgICAgY29uZmlnLl9hID0gbWFwKFxuICAgICAgICAgICAgW2kueWVhciwgaS5tb250aCwgZGF5T3JEYXRlLCBpLmhvdXIsIGkubWludXRlLCBpLnNlY29uZCwgaS5taWxsaXNlY29uZF0sXG4gICAgICAgICAgICBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iaiAmJiBwYXJzZUludChvYmosIDEwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVGcm9tQ29uZmlnKGNvbmZpZykge1xuICAgICAgICB2YXIgcmVzID0gbmV3IE1vbWVudChjaGVja092ZXJmbG93KHByZXBhcmVDb25maWcoY29uZmlnKSkpO1xuICAgICAgICBpZiAocmVzLl9uZXh0RGF5KSB7XG4gICAgICAgICAgICAvLyBBZGRpbmcgaXMgc21hcnQgZW5vdWdoIGFyb3VuZCBEU1RcbiAgICAgICAgICAgIHJlcy5hZGQoMSwgJ2QnKTtcbiAgICAgICAgICAgIHJlcy5fbmV4dERheSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcGFyZUNvbmZpZyhjb25maWcpIHtcbiAgICAgICAgdmFyIGlucHV0ID0gY29uZmlnLl9pLFxuICAgICAgICAgICAgZm9ybWF0ID0gY29uZmlnLl9mO1xuXG4gICAgICAgIGNvbmZpZy5fbG9jYWxlID0gY29uZmlnLl9sb2NhbGUgfHwgZ2V0TG9jYWxlKGNvbmZpZy5fbCk7XG5cbiAgICAgICAgaWYgKGlucHV0ID09PSBudWxsIHx8IChmb3JtYXQgPT09IHVuZGVmaW5lZCAmJiBpbnB1dCA9PT0gJycpKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlSW52YWxpZCh7IG51bGxJbnB1dDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25maWcuX2kgPSBpbnB1dCA9IGNvbmZpZy5fbG9jYWxlLnByZXBhcnNlKGlucHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc01vbWVudChpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9tZW50KGNoZWNrT3ZlcmZsb3coaW5wdXQpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBpbnB1dDtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheShjb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCkge1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnRnJvbUlucHV0KGNvbmZpZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzVmFsaWQoY29uZmlnKSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUlucHV0KGNvbmZpZykge1xuICAgICAgICB2YXIgaW5wdXQgPSBjb25maWcuX2k7XG4gICAgICAgIGlmIChpc1VuZGVmaW5lZChpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGhvb2tzLm5vdygpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShpbnB1dC52YWx1ZU9mKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmcoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9hID0gbWFwKGlucHV0LnNsaWNlKDApLCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KG9iaiwgMTApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdChpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21PYmplY3QoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihpbnB1dCkpIHtcbiAgICAgICAgICAgIC8vIGZyb20gbWlsbGlzZWNvbmRzXG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShpbnB1dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgaXNVVEMpIHtcbiAgICAgICAgdmFyIGMgPSB7fTtcblxuICAgICAgICBpZiAoZm9ybWF0ID09PSB0cnVlIHx8IGZvcm1hdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHN0cmljdCA9IGZvcm1hdDtcbiAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsb2NhbGUgPT09IHRydWUgfHwgbG9jYWxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgc3RyaWN0ID0gbG9jYWxlO1xuICAgICAgICAgICAgbG9jYWxlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGlzT2JqZWN0KGlucHV0KSAmJiBpc09iamVjdEVtcHR5KGlucHV0KSkgfHxcbiAgICAgICAgICAgIChpc0FycmF5KGlucHV0KSAmJiBpbnB1dC5sZW5ndGggPT09IDApXG4gICAgICAgICkge1xuICAgICAgICAgICAgaW5wdXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gb2JqZWN0IGNvbnN0cnVjdGlvbiBtdXN0IGJlIGRvbmUgdGhpcyB3YXkuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8xNDIzXG4gICAgICAgIGMuX2lzQU1vbWVudE9iamVjdCA9IHRydWU7XG4gICAgICAgIGMuX3VzZVVUQyA9IGMuX2lzVVRDID0gaXNVVEM7XG4gICAgICAgIGMuX2wgPSBsb2NhbGU7XG4gICAgICAgIGMuX2kgPSBpbnB1dDtcbiAgICAgICAgYy5fZiA9IGZvcm1hdDtcbiAgICAgICAgYy5fc3RyaWN0ID0gc3RyaWN0O1xuXG4gICAgICAgIHJldHVybiBjcmVhdGVGcm9tQ29uZmlnKGMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUxvY2FsKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbE9yVVRDKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvdHlwZU1pbiA9IGRlcHJlY2F0ZShcbiAgICAgICAgICAgICdtb21lbnQoKS5taW4gaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5tYXggaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LycsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciA8IHRoaXMgPyB0aGlzIDogb3RoZXI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIHByb3RvdHlwZU1heCA9IGRlcHJlY2F0ZShcbiAgICAgICAgICAgICdtb21lbnQoKS5tYXggaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5taW4gaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LycsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciA+IHRoaXMgPyB0aGlzIDogb3RoZXI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAvLyBQaWNrIGEgbW9tZW50IG0gZnJvbSBtb21lbnRzIHNvIHRoYXQgbVtmbl0ob3RoZXIpIGlzIHRydWUgZm9yIGFsbFxuICAgIC8vIG90aGVyLiBUaGlzIHJlbGllcyBvbiB0aGUgZnVuY3Rpb24gZm4gdG8gYmUgdHJhbnNpdGl2ZS5cbiAgICAvL1xuICAgIC8vIG1vbWVudHMgc2hvdWxkIGVpdGhlciBiZSBhbiBhcnJheSBvZiBtb21lbnQgb2JqZWN0cyBvciBhbiBhcnJheSwgd2hvc2VcbiAgICAvLyBmaXJzdCBlbGVtZW50IGlzIGFuIGFycmF5IG9mIG1vbWVudCBvYmplY3RzLlxuICAgIGZ1bmN0aW9uIHBpY2tCeShmbiwgbW9tZW50cykge1xuICAgICAgICB2YXIgcmVzLCBpO1xuICAgICAgICBpZiAobW9tZW50cy5sZW5ndGggPT09IDEgJiYgaXNBcnJheShtb21lbnRzWzBdKSkge1xuICAgICAgICAgICAgbW9tZW50cyA9IG1vbWVudHNbMF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtb21lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzID0gbW9tZW50c1swXTtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IG1vbWVudHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGlmICghbW9tZW50c1tpXS5pc1ZhbGlkKCkgfHwgbW9tZW50c1tpXVtmbl0ocmVzKSkge1xuICAgICAgICAgICAgICAgIHJlcyA9IG1vbWVudHNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBVc2UgW10uc29ydCBpbnN0ZWFkP1xuICAgIGZ1bmN0aW9uIG1pbigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG5cbiAgICAgICAgcmV0dXJuIHBpY2tCeSgnaXNCZWZvcmUnLCBhcmdzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXgoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuXG4gICAgICAgIHJldHVybiBwaWNrQnkoJ2lzQWZ0ZXInLCBhcmdzKTtcbiAgICB9XG5cbiAgICB2YXIgbm93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gRGF0ZS5ub3cgPyBEYXRlLm5vdygpIDogK25ldyBEYXRlKCk7XG4gICAgfTtcblxuICAgIHZhciBvcmRlcmluZyA9IFtcbiAgICAgICAgJ3llYXInLFxuICAgICAgICAncXVhcnRlcicsXG4gICAgICAgICdtb250aCcsXG4gICAgICAgICd3ZWVrJyxcbiAgICAgICAgJ2RheScsXG4gICAgICAgICdob3VyJyxcbiAgICAgICAgJ21pbnV0ZScsXG4gICAgICAgICdzZWNvbmQnLFxuICAgICAgICAnbWlsbGlzZWNvbmQnLFxuICAgIF07XG5cbiAgICBmdW5jdGlvbiBpc0R1cmF0aW9uVmFsaWQobSkge1xuICAgICAgICB2YXIga2V5LFxuICAgICAgICAgICAgdW5pdEhhc0RlY2ltYWwgPSBmYWxzZSxcbiAgICAgICAgICAgIGk7XG4gICAgICAgIGZvciAoa2V5IGluIG0pIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBoYXNPd25Qcm9wKG0sIGtleSkgJiZcbiAgICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgICAgICBpbmRleE9mLmNhbGwob3JkZXJpbmcsIGtleSkgIT09IC0xICYmXG4gICAgICAgICAgICAgICAgICAgIChtW2tleV0gPT0gbnVsbCB8fCAhaXNOYU4obVtrZXldKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgb3JkZXJpbmcubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGlmIChtW29yZGVyaW5nW2ldXSkge1xuICAgICAgICAgICAgICAgIGlmICh1bml0SGFzRGVjaW1hbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIG9ubHkgYWxsb3cgbm9uLWludGVnZXJzIGZvciBzbWFsbGVzdCB1bml0XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwYXJzZUZsb2F0KG1bb3JkZXJpbmdbaV1dKSAhPT0gdG9JbnQobVtvcmRlcmluZ1tpXV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHVuaXRIYXNEZWNpbWFsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1ZhbGlkJDEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1ZhbGlkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUludmFsaWQkMSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUR1cmF0aW9uKE5hTik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gRHVyYXRpb24oZHVyYXRpb24pIHtcbiAgICAgICAgdmFyIG5vcm1hbGl6ZWRJbnB1dCA9IG5vcm1hbGl6ZU9iamVjdFVuaXRzKGR1cmF0aW9uKSxcbiAgICAgICAgICAgIHllYXJzID0gbm9ybWFsaXplZElucHV0LnllYXIgfHwgMCxcbiAgICAgICAgICAgIHF1YXJ0ZXJzID0gbm9ybWFsaXplZElucHV0LnF1YXJ0ZXIgfHwgMCxcbiAgICAgICAgICAgIG1vbnRocyA9IG5vcm1hbGl6ZWRJbnB1dC5tb250aCB8fCAwLFxuICAgICAgICAgICAgd2Vla3MgPSBub3JtYWxpemVkSW5wdXQud2VlayB8fCBub3JtYWxpemVkSW5wdXQuaXNvV2VlayB8fCAwLFxuICAgICAgICAgICAgZGF5cyA9IG5vcm1hbGl6ZWRJbnB1dC5kYXkgfHwgMCxcbiAgICAgICAgICAgIGhvdXJzID0gbm9ybWFsaXplZElucHV0LmhvdXIgfHwgMCxcbiAgICAgICAgICAgIG1pbnV0ZXMgPSBub3JtYWxpemVkSW5wdXQubWludXRlIHx8IDAsXG4gICAgICAgICAgICBzZWNvbmRzID0gbm9ybWFsaXplZElucHV0LnNlY29uZCB8fCAwLFxuICAgICAgICAgICAgbWlsbGlzZWNvbmRzID0gbm9ybWFsaXplZElucHV0Lm1pbGxpc2Vjb25kIHx8IDA7XG5cbiAgICAgICAgdGhpcy5faXNWYWxpZCA9IGlzRHVyYXRpb25WYWxpZChub3JtYWxpemVkSW5wdXQpO1xuXG4gICAgICAgIC8vIHJlcHJlc2VudGF0aW9uIGZvciBkYXRlQWRkUmVtb3ZlXG4gICAgICAgIHRoaXMuX21pbGxpc2Vjb25kcyA9XG4gICAgICAgICAgICArbWlsbGlzZWNvbmRzICtcbiAgICAgICAgICAgIHNlY29uZHMgKiAxZTMgKyAvLyAxMDAwXG4gICAgICAgICAgICBtaW51dGVzICogNmU0ICsgLy8gMTAwMCAqIDYwXG4gICAgICAgICAgICBob3VycyAqIDEwMDAgKiA2MCAqIDYwOyAvL3VzaW5nIDEwMDAgKiA2MCAqIDYwIGluc3RlYWQgb2YgMzZlNSB0byBhdm9pZCBmbG9hdGluZyBwb2ludCByb3VuZGluZyBlcnJvcnMgaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvaXNzdWVzLzI5NzhcbiAgICAgICAgLy8gQmVjYXVzZSBvZiBkYXRlQWRkUmVtb3ZlIHRyZWF0cyAyNCBob3VycyBhcyBkaWZmZXJlbnQgZnJvbSBhXG4gICAgICAgIC8vIGRheSB3aGVuIHdvcmtpbmcgYXJvdW5kIERTVCwgd2UgbmVlZCB0byBzdG9yZSB0aGVtIHNlcGFyYXRlbHlcbiAgICAgICAgdGhpcy5fZGF5cyA9ICtkYXlzICsgd2Vla3MgKiA3O1xuICAgICAgICAvLyBJdCBpcyBpbXBvc3NpYmxlIHRvIHRyYW5zbGF0ZSBtb250aHMgaW50byBkYXlzIHdpdGhvdXQga25vd2luZ1xuICAgICAgICAvLyB3aGljaCBtb250aHMgeW91IGFyZSBhcmUgdGFsa2luZyBhYm91dCwgc28gd2UgaGF2ZSB0byBzdG9yZVxuICAgICAgICAvLyBpdCBzZXBhcmF0ZWx5LlxuICAgICAgICB0aGlzLl9tb250aHMgPSArbW9udGhzICsgcXVhcnRlcnMgKiAzICsgeWVhcnMgKiAxMjtcblxuICAgICAgICB0aGlzLl9kYXRhID0ge307XG5cbiAgICAgICAgdGhpcy5fbG9jYWxlID0gZ2V0TG9jYWxlKCk7XG5cbiAgICAgICAgdGhpcy5fYnViYmxlKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNEdXJhdGlvbihvYmopIHtcbiAgICAgICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIER1cmF0aW9uO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFic1JvdW5kKG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoLTEgKiBudW1iZXIpICogLTE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gY29tcGFyZSB0d28gYXJyYXlzLCByZXR1cm4gdGhlIG51bWJlciBvZiBkaWZmZXJlbmNlc1xuICAgIGZ1bmN0aW9uIGNvbXBhcmVBcnJheXMoYXJyYXkxLCBhcnJheTIsIGRvbnRDb252ZXJ0KSB7XG4gICAgICAgIHZhciBsZW4gPSBNYXRoLm1pbihhcnJheTEubGVuZ3RoLCBhcnJheTIubGVuZ3RoKSxcbiAgICAgICAgICAgIGxlbmd0aERpZmYgPSBNYXRoLmFicyhhcnJheTEubGVuZ3RoIC0gYXJyYXkyLmxlbmd0aCksXG4gICAgICAgICAgICBkaWZmcyA9IDAsXG4gICAgICAgICAgICBpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAoZG9udENvbnZlcnQgJiYgYXJyYXkxW2ldICE9PSBhcnJheTJbaV0pIHx8XG4gICAgICAgICAgICAgICAgKCFkb250Q29udmVydCAmJiB0b0ludChhcnJheTFbaV0pICE9PSB0b0ludChhcnJheTJbaV0pKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZGlmZnMrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGlmZnMgKyBsZW5ndGhEaWZmO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGZ1bmN0aW9uIG9mZnNldCh0b2tlbiwgc2VwYXJhdG9yKSB7XG4gICAgICAgIGFkZEZvcm1hdFRva2VuKHRva2VuLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdGhpcy51dGNPZmZzZXQoKSxcbiAgICAgICAgICAgICAgICBzaWduID0gJysnO1xuICAgICAgICAgICAgaWYgKG9mZnNldCA8IDApIHtcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSAtb2Zmc2V0O1xuICAgICAgICAgICAgICAgIHNpZ24gPSAnLSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHNpZ24gK1xuICAgICAgICAgICAgICAgIHplcm9GaWxsKH5+KG9mZnNldCAvIDYwKSwgMikgK1xuICAgICAgICAgICAgICAgIHNlcGFyYXRvciArXG4gICAgICAgICAgICAgICAgemVyb0ZpbGwofn5vZmZzZXQgJSA2MCwgMilcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9mZnNldCgnWicsICc6Jyk7XG4gICAgb2Zmc2V0KCdaWicsICcnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1onLCBtYXRjaFNob3J0T2Zmc2V0KTtcbiAgICBhZGRSZWdleFRva2VuKCdaWicsIG1hdGNoU2hvcnRPZmZzZXQpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydaJywgJ1paJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX3VzZVVUQyA9IHRydWU7XG4gICAgICAgIGNvbmZpZy5fdHptID0gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaFNob3J0T2Zmc2V0LCBpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICAvLyB0aW1lem9uZSBjaHVua2VyXG4gICAgLy8gJysxMDowMCcgPiBbJzEwJywgICcwMCddXG4gICAgLy8gJy0xNTMwJyAgPiBbJy0xNScsICczMCddXG4gICAgdmFyIGNodW5rT2Zmc2V0ID0gLyhbXFwrXFwtXXxcXGRcXGQpL2dpO1xuXG4gICAgZnVuY3Rpb24gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaGVyLCBzdHJpbmcpIHtcbiAgICAgICAgdmFyIG1hdGNoZXMgPSAoc3RyaW5nIHx8ICcnKS5tYXRjaChtYXRjaGVyKSxcbiAgICAgICAgICAgIGNodW5rLFxuICAgICAgICAgICAgcGFydHMsXG4gICAgICAgICAgICBtaW51dGVzO1xuXG4gICAgICAgIGlmIChtYXRjaGVzID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNodW5rID0gbWF0Y2hlc1ttYXRjaGVzLmxlbmd0aCAtIDFdIHx8IFtdO1xuICAgICAgICBwYXJ0cyA9IChjaHVuayArICcnKS5tYXRjaChjaHVua09mZnNldCkgfHwgWyctJywgMCwgMF07XG4gICAgICAgIG1pbnV0ZXMgPSArKHBhcnRzWzFdICogNjApICsgdG9JbnQocGFydHNbMl0pO1xuXG4gICAgICAgIHJldHVybiBtaW51dGVzID09PSAwID8gMCA6IHBhcnRzWzBdID09PSAnKycgPyBtaW51dGVzIDogLW1pbnV0ZXM7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGEgbW9tZW50IGZyb20gaW5wdXQsIHRoYXQgaXMgbG9jYWwvdXRjL3pvbmUgZXF1aXZhbGVudCB0byBtb2RlbC5cbiAgICBmdW5jdGlvbiBjbG9uZVdpdGhPZmZzZXQoaW5wdXQsIG1vZGVsKSB7XG4gICAgICAgIHZhciByZXMsIGRpZmY7XG4gICAgICAgIGlmIChtb2RlbC5faXNVVEMpIHtcbiAgICAgICAgICAgIHJlcyA9IG1vZGVsLmNsb25lKCk7XG4gICAgICAgICAgICBkaWZmID1cbiAgICAgICAgICAgICAgICAoaXNNb21lbnQoaW5wdXQpIHx8IGlzRGF0ZShpbnB1dClcbiAgICAgICAgICAgICAgICAgICAgPyBpbnB1dC52YWx1ZU9mKClcbiAgICAgICAgICAgICAgICAgICAgOiBjcmVhdGVMb2NhbChpbnB1dCkudmFsdWVPZigpKSAtIHJlcy52YWx1ZU9mKCk7XG4gICAgICAgICAgICAvLyBVc2UgbG93LWxldmVsIGFwaSwgYmVjYXVzZSB0aGlzIGZuIGlzIGxvdy1sZXZlbCBhcGkuXG4gICAgICAgICAgICByZXMuX2Quc2V0VGltZShyZXMuX2QudmFsdWVPZigpICsgZGlmZik7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQocmVzLCBmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKGlucHV0KS5sb2NhbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RGF0ZU9mZnNldChtKSB7XG4gICAgICAgIC8vIE9uIEZpcmVmb3guMjQgRGF0ZSNnZXRUaW1lem9uZU9mZnNldCByZXR1cm5zIGEgZmxvYXRpbmcgcG9pbnQuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L3B1bGwvMTg3MVxuICAgICAgICByZXR1cm4gLU1hdGgucm91bmQobS5fZC5nZXRUaW1lem9uZU9mZnNldCgpKTtcbiAgICB9XG5cbiAgICAvLyBIT09LU1xuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciBhIG1vbWVudCBpcyBtdXRhdGVkLlxuICAgIC8vIEl0IGlzIGludGVuZGVkIHRvIGtlZXAgdGhlIG9mZnNldCBpbiBzeW5jIHdpdGggdGhlIHRpbWV6b25lLlxuICAgIGhvb2tzLnVwZGF0ZU9mZnNldCA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgLy8ga2VlcExvY2FsVGltZSA9IHRydWUgbWVhbnMgb25seSBjaGFuZ2UgdGhlIHRpbWV6b25lLCB3aXRob3V0XG4gICAgLy8gYWZmZWN0aW5nIHRoZSBsb2NhbCBob3VyLiBTbyA1OjMxOjI2ICswMzAwIC0tW3V0Y09mZnNldCgyLCB0cnVlKV0tLT5cbiAgICAvLyA1OjMxOjI2ICswMjAwIEl0IGlzIHBvc3NpYmxlIHRoYXQgNTozMToyNiBkb2Vzbid0IGV4aXN0IHdpdGggb2Zmc2V0XG4gICAgLy8gKzAyMDAsIHNvIHdlIGFkanVzdCB0aGUgdGltZSBhcyBuZWVkZWQsIHRvIGJlIHZhbGlkLlxuICAgIC8vXG4gICAgLy8gS2VlcGluZyB0aGUgdGltZSBhY3R1YWxseSBhZGRzL3N1YnRyYWN0cyAob25lIGhvdXIpXG4gICAgLy8gZnJvbSB0aGUgYWN0dWFsIHJlcHJlc2VudGVkIHRpbWUuIFRoYXQgaXMgd2h5IHdlIGNhbGwgdXBkYXRlT2Zmc2V0XG4gICAgLy8gYSBzZWNvbmQgdGltZS4gSW4gY2FzZSBpdCB3YW50cyB1cyB0byBjaGFuZ2UgdGhlIG9mZnNldCBhZ2FpblxuICAgIC8vIF9jaGFuZ2VJblByb2dyZXNzID09IHRydWUgY2FzZSwgdGhlbiB3ZSBoYXZlIHRvIGFkanVzdCwgYmVjYXVzZVxuICAgIC8vIHRoZXJlIGlzIG5vIHN1Y2ggdGltZSBpbiB0aGUgZ2l2ZW4gdGltZXpvbmUuXG4gICAgZnVuY3Rpb24gZ2V0U2V0T2Zmc2V0KGlucHV0LCBrZWVwTG9jYWxUaW1lLCBrZWVwTWludXRlcykge1xuICAgICAgICB2YXIgb2Zmc2V0ID0gdGhpcy5fb2Zmc2V0IHx8IDAsXG4gICAgICAgICAgICBsb2NhbEFkanVzdDtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgPyB0aGlzIDogTmFOO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaFNob3J0T2Zmc2V0LCBpbnB1dCk7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoTWF0aC5hYnMoaW5wdXQpIDwgMTYgJiYgIWtlZXBNaW51dGVzKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSBpbnB1dCAqIDYwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc1VUQyAmJiBrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxBZGp1c3QgPSBnZXREYXRlT2Zmc2V0KHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fb2Zmc2V0ID0gaW5wdXQ7XG4gICAgICAgICAgICB0aGlzLl9pc1VUQyA9IHRydWU7XG4gICAgICAgICAgICBpZiAobG9jYWxBZGp1c3QgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkKGxvY2FsQWRqdXN0LCAnbScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9mZnNldCAhPT0gaW5wdXQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWtlZXBMb2NhbFRpbWUgfHwgdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICBhZGRTdWJ0cmFjdChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVEdXJhdGlvbihpbnB1dCAtIG9mZnNldCwgJ20nKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faXNVVEMgPyBvZmZzZXQgOiBnZXREYXRlT2Zmc2V0KHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0Wm9uZShpbnB1dCwga2VlcExvY2FsVGltZSkge1xuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IC1pbnB1dDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoaW5wdXQsIGtlZXBMb2NhbFRpbWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAtdGhpcy51dGNPZmZzZXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldE9mZnNldFRvVVRDKGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXRjT2Zmc2V0KDAsIGtlZXBMb2NhbFRpbWUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldE9mZnNldFRvTG9jYWwoa2VlcExvY2FsVGltZSkge1xuICAgICAgICBpZiAodGhpcy5faXNVVEMpIHtcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KDAsIGtlZXBMb2NhbFRpbWUpO1xuICAgICAgICAgICAgdGhpcy5faXNVVEMgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnRyYWN0KGdldERhdGVPZmZzZXQodGhpcyksICdtJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0T2Zmc2V0VG9QYXJzZWRPZmZzZXQoKSB7XG4gICAgICAgIGlmICh0aGlzLl90em0gIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQodGhpcy5fdHptLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuX2kgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB2YXIgdFpvbmUgPSBvZmZzZXRGcm9tU3RyaW5nKG1hdGNoT2Zmc2V0LCB0aGlzLl9pKTtcbiAgICAgICAgICAgIGlmICh0Wm9uZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQodFpvbmUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgwLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYXNBbGlnbmVkSG91ck9mZnNldChpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaW5wdXQgPSBpbnB1dCA/IGNyZWF0ZUxvY2FsKGlucHV0KS51dGNPZmZzZXQoKSA6IDA7XG5cbiAgICAgICAgcmV0dXJuICh0aGlzLnV0Y09mZnNldCgpIC0gaW5wdXQpICUgNjAgPT09IDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNEYXlsaWdodFNhdmluZ1RpbWUoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgpID4gdGhpcy5jbG9uZSgpLm1vbnRoKDApLnV0Y09mZnNldCgpIHx8XG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgpID4gdGhpcy5jbG9uZSgpLm1vbnRoKDUpLnV0Y09mZnNldCgpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNEYXlsaWdodFNhdmluZ1RpbWVTaGlmdGVkKCkge1xuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHRoaXMuX2lzRFNUU2hpZnRlZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYyA9IHt9LFxuICAgICAgICAgICAgb3RoZXI7XG5cbiAgICAgICAgY29weUNvbmZpZyhjLCB0aGlzKTtcbiAgICAgICAgYyA9IHByZXBhcmVDb25maWcoYyk7XG5cbiAgICAgICAgaWYgKGMuX2EpIHtcbiAgICAgICAgICAgIG90aGVyID0gYy5faXNVVEMgPyBjcmVhdGVVVEMoYy5fYSkgOiBjcmVhdGVMb2NhbChjLl9hKTtcbiAgICAgICAgICAgIHRoaXMuX2lzRFNUU2hpZnRlZCA9XG4gICAgICAgICAgICAgICAgdGhpcy5pc1ZhbGlkKCkgJiYgY29tcGFyZUFycmF5cyhjLl9hLCBvdGhlci50b0FycmF5KCkpID4gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2lzRFNUU2hpZnRlZCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzRFNUU2hpZnRlZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0xvY2FsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyAhdGhpcy5faXNVVEMgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1V0Y09mZnNldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy5faXNVVEMgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1V0YygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy5faXNVVEMgJiYgdGhpcy5fb2Zmc2V0ID09PSAwIDogZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQVNQLk5FVCBqc29uIGRhdGUgZm9ybWF0IHJlZ2V4XG4gICAgdmFyIGFzcE5ldFJlZ2V4ID0gL14oLXxcXCspPyg/OihcXGQqKVsuIF0pPyhcXGQrKTooXFxkKykoPzo6KFxcZCspKFxcLlxcZCopPyk/JC8sXG4gICAgICAgIC8vIGZyb20gaHR0cDovL2RvY3MuY2xvc3VyZS1saWJyYXJ5Lmdvb2dsZWNvZGUuY29tL2dpdC9jbG9zdXJlX2dvb2dfZGF0ZV9kYXRlLmpzLnNvdXJjZS5odG1sXG4gICAgICAgIC8vIHNvbWV3aGF0IG1vcmUgaW4gbGluZSB3aXRoIDQuNC4zLjIgMjAwNCBzcGVjLCBidXQgYWxsb3dzIGRlY2ltYWwgYW55d2hlcmVcbiAgICAgICAgLy8gYW5kIGZ1cnRoZXIgbW9kaWZpZWQgdG8gYWxsb3cgZm9yIHN0cmluZ3MgY29udGFpbmluZyBib3RoIHdlZWsgYW5kIGRheVxuICAgICAgICBpc29SZWdleCA9IC9eKC18XFwrKT9QKD86KFstK10/WzAtOSwuXSopWSk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopVyk/KD86KFstK10/WzAtOSwuXSopRCk/KD86VCg/OihbLStdP1swLTksLl0qKUgpPyg/OihbLStdP1swLTksLl0qKU0pPyg/OihbLStdP1swLTksLl0qKVMpPyk/JC87XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVEdXJhdGlvbihpbnB1dCwga2V5KSB7XG4gICAgICAgIHZhciBkdXJhdGlvbiA9IGlucHV0LFxuICAgICAgICAgICAgLy8gbWF0Y2hpbmcgYWdhaW5zdCByZWdleHAgaXMgZXhwZW5zaXZlLCBkbyBpdCBvbiBkZW1hbmRcbiAgICAgICAgICAgIG1hdGNoID0gbnVsbCxcbiAgICAgICAgICAgIHNpZ24sXG4gICAgICAgICAgICByZXQsXG4gICAgICAgICAgICBkaWZmUmVzO1xuXG4gICAgICAgIGlmIChpc0R1cmF0aW9uKGlucHV0KSkge1xuICAgICAgICAgICAgZHVyYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgbXM6IGlucHV0Ll9taWxsaXNlY29uZHMsXG4gICAgICAgICAgICAgICAgZDogaW5wdXQuX2RheXMsXG4gICAgICAgICAgICAgICAgTTogaW5wdXQuX21vbnRocyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXIoaW5wdXQpIHx8ICFpc05hTigraW5wdXQpKSB7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uW2tleV0gPSAraW5wdXQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uLm1pbGxpc2Vjb25kcyA9ICtpbnB1dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICgobWF0Y2ggPSBhc3BOZXRSZWdleC5leGVjKGlucHV0KSkpIHtcbiAgICAgICAgICAgIHNpZ24gPSBtYXRjaFsxXSA9PT0gJy0nID8gLTEgOiAxO1xuICAgICAgICAgICAgZHVyYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgeTogMCxcbiAgICAgICAgICAgICAgICBkOiB0b0ludChtYXRjaFtEQVRFXSkgKiBzaWduLFxuICAgICAgICAgICAgICAgIGg6IHRvSW50KG1hdGNoW0hPVVJdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgbTogdG9JbnQobWF0Y2hbTUlOVVRFXSkgKiBzaWduLFxuICAgICAgICAgICAgICAgIHM6IHRvSW50KG1hdGNoW1NFQ09ORF0pICogc2lnbixcbiAgICAgICAgICAgICAgICBtczogdG9JbnQoYWJzUm91bmQobWF0Y2hbTUlMTElTRUNPTkRdICogMTAwMCkpICogc2lnbiwgLy8gdGhlIG1pbGxpc2Vjb25kIGRlY2ltYWwgcG9pbnQgaXMgaW5jbHVkZWQgaW4gdGhlIG1hdGNoXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKChtYXRjaCA9IGlzb1JlZ2V4LmV4ZWMoaW5wdXQpKSkge1xuICAgICAgICAgICAgc2lnbiA9IG1hdGNoWzFdID09PSAnLScgPyAtMSA6IDE7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICB5OiBwYXJzZUlzbyhtYXRjaFsyXSwgc2lnbiksXG4gICAgICAgICAgICAgICAgTTogcGFyc2VJc28obWF0Y2hbM10sIHNpZ24pLFxuICAgICAgICAgICAgICAgIHc6IHBhcnNlSXNvKG1hdGNoWzRdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBkOiBwYXJzZUlzbyhtYXRjaFs1XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgaDogcGFyc2VJc28obWF0Y2hbNl0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIG06IHBhcnNlSXNvKG1hdGNoWzddLCBzaWduKSxcbiAgICAgICAgICAgICAgICBzOiBwYXJzZUlzbyhtYXRjaFs4XSwgc2lnbiksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKGR1cmF0aW9uID09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIGNoZWNrcyBmb3IgbnVsbCBvciB1bmRlZmluZWRcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge307XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgZHVyYXRpb24gPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAoJ2Zyb20nIGluIGR1cmF0aW9uIHx8ICd0bycgaW4gZHVyYXRpb24pXG4gICAgICAgICkge1xuICAgICAgICAgICAgZGlmZlJlcyA9IG1vbWVudHNEaWZmZXJlbmNlKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUxvY2FsKGR1cmF0aW9uLmZyb20pLFxuICAgICAgICAgICAgICAgIGNyZWF0ZUxvY2FsKGR1cmF0aW9uLnRvKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZHVyYXRpb24gPSB7fTtcbiAgICAgICAgICAgIGR1cmF0aW9uLm1zID0gZGlmZlJlcy5taWxsaXNlY29uZHM7XG4gICAgICAgICAgICBkdXJhdGlvbi5NID0gZGlmZlJlcy5tb250aHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXQgPSBuZXcgRHVyYXRpb24oZHVyYXRpb24pO1xuXG4gICAgICAgIGlmIChpc0R1cmF0aW9uKGlucHV0KSAmJiBoYXNPd25Qcm9wKGlucHV0LCAnX2xvY2FsZScpKSB7XG4gICAgICAgICAgICByZXQuX2xvY2FsZSA9IGlucHV0Ll9sb2NhbGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNEdXJhdGlvbihpbnB1dCkgJiYgaGFzT3duUHJvcChpbnB1dCwgJ19pc1ZhbGlkJykpIHtcbiAgICAgICAgICAgIHJldC5faXNWYWxpZCA9IGlucHV0Ll9pc1ZhbGlkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG5cbiAgICBjcmVhdGVEdXJhdGlvbi5mbiA9IER1cmF0aW9uLnByb3RvdHlwZTtcbiAgICBjcmVhdGVEdXJhdGlvbi5pbnZhbGlkID0gY3JlYXRlSW52YWxpZCQxO1xuXG4gICAgZnVuY3Rpb24gcGFyc2VJc28oaW5wLCBzaWduKSB7XG4gICAgICAgIC8vIFdlJ2Qgbm9ybWFsbHkgdXNlIH5+aW5wIGZvciB0aGlzLCBidXQgdW5mb3J0dW5hdGVseSBpdCBhbHNvXG4gICAgICAgIC8vIGNvbnZlcnRzIGZsb2F0cyB0byBpbnRzLlxuICAgICAgICAvLyBpbnAgbWF5IGJlIHVuZGVmaW5lZCwgc28gY2FyZWZ1bCBjYWxsaW5nIHJlcGxhY2Ugb24gaXQuXG4gICAgICAgIHZhciByZXMgPSBpbnAgJiYgcGFyc2VGbG9hdChpbnAucmVwbGFjZSgnLCcsICcuJykpO1xuICAgICAgICAvLyBhcHBseSBzaWduIHdoaWxlIHdlJ3JlIGF0IGl0XG4gICAgICAgIHJldHVybiAoaXNOYU4ocmVzKSA/IDAgOiByZXMpICogc2lnbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwb3NpdGl2ZU1vbWVudHNEaWZmZXJlbmNlKGJhc2UsIG90aGVyKSB7XG4gICAgICAgIHZhciByZXMgPSB7fTtcblxuICAgICAgICByZXMubW9udGhzID1cbiAgICAgICAgICAgIG90aGVyLm1vbnRoKCkgLSBiYXNlLm1vbnRoKCkgKyAob3RoZXIueWVhcigpIC0gYmFzZS55ZWFyKCkpICogMTI7XG4gICAgICAgIGlmIChiYXNlLmNsb25lKCkuYWRkKHJlcy5tb250aHMsICdNJykuaXNBZnRlcihvdGhlcikpIHtcbiAgICAgICAgICAgIC0tcmVzLm1vbnRocztcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcy5taWxsaXNlY29uZHMgPSArb3RoZXIgLSArYmFzZS5jbG9uZSgpLmFkZChyZXMubW9udGhzLCAnTScpO1xuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpIHtcbiAgICAgICAgdmFyIHJlcztcbiAgICAgICAgaWYgKCEoYmFzZS5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgbWlsbGlzZWNvbmRzOiAwLCBtb250aHM6IDAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIG90aGVyID0gY2xvbmVXaXRoT2Zmc2V0KG90aGVyLCBiYXNlKTtcbiAgICAgICAgaWYgKGJhc2UuaXNCZWZvcmUob3RoZXIpKSB7XG4gICAgICAgICAgICByZXMgPSBwb3NpdGl2ZU1vbWVudHNEaWZmZXJlbmNlKGJhc2UsIG90aGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcyA9IHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2Uob3RoZXIsIGJhc2UpO1xuICAgICAgICAgICAgcmVzLm1pbGxpc2Vjb25kcyA9IC1yZXMubWlsbGlzZWNvbmRzO1xuICAgICAgICAgICAgcmVzLm1vbnRocyA9IC1yZXMubW9udGhzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvLyBUT0RPOiByZW1vdmUgJ25hbWUnIGFyZyBhZnRlciBkZXByZWNhdGlvbiBpcyByZW1vdmVkXG4gICAgZnVuY3Rpb24gY3JlYXRlQWRkZXIoZGlyZWN0aW9uLCBuYW1lKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHZhciBkdXIsIHRtcDtcbiAgICAgICAgICAgIC8vaW52ZXJ0IHRoZSBhcmd1bWVudHMsIGJ1dCBjb21wbGFpbiBhYm91dCBpdFxuICAgICAgICAgICAgaWYgKHBlcmlvZCAhPT0gbnVsbCAmJiAhaXNOYU4oK3BlcmlvZCkpIHtcbiAgICAgICAgICAgICAgICBkZXByZWNhdGVTaW1wbGUoXG4gICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICdtb21lbnQoKS4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJyhwZXJpb2QsIG51bWJlcikgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBtb21lbnQoKS4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJyhudW1iZXIsIHBlcmlvZCkuICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1NlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2FkZC1pbnZlcnRlZC1wYXJhbS8gZm9yIG1vcmUgaW5mby4nXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0bXAgPSB2YWw7XG4gICAgICAgICAgICAgICAgdmFsID0gcGVyaW9kO1xuICAgICAgICAgICAgICAgIHBlcmlvZCA9IHRtcDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZHVyID0gY3JlYXRlRHVyYXRpb24odmFsLCBwZXJpb2QpO1xuICAgICAgICAgICAgYWRkU3VidHJhY3QodGhpcywgZHVyLCBkaXJlY3Rpb24pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkU3VidHJhY3QobW9tLCBkdXJhdGlvbiwgaXNBZGRpbmcsIHVwZGF0ZU9mZnNldCkge1xuICAgICAgICB2YXIgbWlsbGlzZWNvbmRzID0gZHVyYXRpb24uX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgIGRheXMgPSBhYnNSb3VuZChkdXJhdGlvbi5fZGF5cyksXG4gICAgICAgICAgICBtb250aHMgPSBhYnNSb3VuZChkdXJhdGlvbi5fbW9udGhzKTtcblxuICAgICAgICBpZiAoIW1vbS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIC8vIE5vIG9wXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB1cGRhdGVPZmZzZXQgPSB1cGRhdGVPZmZzZXQgPT0gbnVsbCA/IHRydWUgOiB1cGRhdGVPZmZzZXQ7XG5cbiAgICAgICAgaWYgKG1vbnRocykge1xuICAgICAgICAgICAgc2V0TW9udGgobW9tLCBnZXQobW9tLCAnTW9udGgnKSArIG1vbnRocyAqIGlzQWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF5cykge1xuICAgICAgICAgICAgc2V0JDEobW9tLCAnRGF0ZScsIGdldChtb20sICdEYXRlJykgKyBkYXlzICogaXNBZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtaWxsaXNlY29uZHMpIHtcbiAgICAgICAgICAgIG1vbS5fZC5zZXRUaW1lKG1vbS5fZC52YWx1ZU9mKCkgKyBtaWxsaXNlY29uZHMgKiBpc0FkZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVwZGF0ZU9mZnNldCkge1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KG1vbSwgZGF5cyB8fCBtb250aHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGFkZCA9IGNyZWF0ZUFkZGVyKDEsICdhZGQnKSxcbiAgICAgICAgc3VidHJhY3QgPSBjcmVhdGVBZGRlcigtMSwgJ3N1YnRyYWN0Jyk7XG5cbiAgICBmdW5jdGlvbiBpc1N0cmluZyhpbnB1dCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJyB8fCBpbnB1dCBpbnN0YW5jZW9mIFN0cmluZztcbiAgICB9XG5cbiAgICAvLyB0eXBlIE1vbWVudElucHV0ID0gTW9tZW50IHwgRGF0ZSB8IHN0cmluZyB8IG51bWJlciB8IChudW1iZXIgfCBzdHJpbmcpW10gfCBNb21lbnRJbnB1dE9iamVjdCB8IHZvaWQ7IC8vIG51bGwgfCB1bmRlZmluZWRcbiAgICBmdW5jdGlvbiBpc01vbWVudElucHV0KGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpc01vbWVudChpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzRGF0ZShpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzU3RyaW5nKGlucHV0KSB8fFxuICAgICAgICAgICAgaXNOdW1iZXIoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc051bWJlck9yU3RyaW5nQXJyYXkoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc01vbWVudElucHV0T2JqZWN0KGlucHV0KSB8fFxuICAgICAgICAgICAgaW5wdXQgPT09IG51bGwgfHxcbiAgICAgICAgICAgIGlucHV0ID09PSB1bmRlZmluZWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc01vbWVudElucHV0T2JqZWN0KGlucHV0KSB7XG4gICAgICAgIHZhciBvYmplY3RUZXN0ID0gaXNPYmplY3QoaW5wdXQpICYmICFpc09iamVjdEVtcHR5KGlucHV0KSxcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IGZhbHNlLFxuICAgICAgICAgICAgcHJvcGVydGllcyA9IFtcbiAgICAgICAgICAgICAgICAneWVhcnMnLFxuICAgICAgICAgICAgICAgICd5ZWFyJyxcbiAgICAgICAgICAgICAgICAneScsXG4gICAgICAgICAgICAgICAgJ21vbnRocycsXG4gICAgICAgICAgICAgICAgJ21vbnRoJyxcbiAgICAgICAgICAgICAgICAnTScsXG4gICAgICAgICAgICAgICAgJ2RheXMnLFxuICAgICAgICAgICAgICAgICdkYXknLFxuICAgICAgICAgICAgICAgICdkJyxcbiAgICAgICAgICAgICAgICAnZGF0ZXMnLFxuICAgICAgICAgICAgICAgICdkYXRlJyxcbiAgICAgICAgICAgICAgICAnRCcsXG4gICAgICAgICAgICAgICAgJ2hvdXJzJyxcbiAgICAgICAgICAgICAgICAnaG91cicsXG4gICAgICAgICAgICAgICAgJ2gnLFxuICAgICAgICAgICAgICAgICdtaW51dGVzJyxcbiAgICAgICAgICAgICAgICAnbWludXRlJyxcbiAgICAgICAgICAgICAgICAnbScsXG4gICAgICAgICAgICAgICAgJ3NlY29uZHMnLFxuICAgICAgICAgICAgICAgICdzZWNvbmQnLFxuICAgICAgICAgICAgICAgICdzJyxcbiAgICAgICAgICAgICAgICAnbWlsbGlzZWNvbmRzJyxcbiAgICAgICAgICAgICAgICAnbWlsbGlzZWNvbmQnLFxuICAgICAgICAgICAgICAgICdtcycsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIHByb3BlcnR5O1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICBwcm9wZXJ0eVRlc3QgPSBwcm9wZXJ0eVRlc3QgfHwgaGFzT3duUHJvcChpbnB1dCwgcHJvcGVydHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9iamVjdFRlc3QgJiYgcHJvcGVydHlUZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTnVtYmVyT3JTdHJpbmdBcnJheShpbnB1dCkge1xuICAgICAgICB2YXIgYXJyYXlUZXN0ID0gaXNBcnJheShpbnB1dCksXG4gICAgICAgICAgICBkYXRhVHlwZVRlc3QgPSBmYWxzZTtcbiAgICAgICAgaWYgKGFycmF5VGVzdCkge1xuICAgICAgICAgICAgZGF0YVR5cGVUZXN0ID1cbiAgICAgICAgICAgICAgICBpbnB1dC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFpc051bWJlcihpdGVtKSAmJiBpc1N0cmluZyhpbnB1dCk7XG4gICAgICAgICAgICAgICAgfSkubGVuZ3RoID09PSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnJheVRlc3QgJiYgZGF0YVR5cGVUZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQ2FsZW5kYXJTcGVjKGlucHV0KSB7XG4gICAgICAgIHZhciBvYmplY3RUZXN0ID0gaXNPYmplY3QoaW5wdXQpICYmICFpc09iamVjdEVtcHR5KGlucHV0KSxcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IGZhbHNlLFxuICAgICAgICAgICAgcHJvcGVydGllcyA9IFtcbiAgICAgICAgICAgICAgICAnc2FtZURheScsXG4gICAgICAgICAgICAgICAgJ25leHREYXknLFxuICAgICAgICAgICAgICAgICdsYXN0RGF5JyxcbiAgICAgICAgICAgICAgICAnbmV4dFdlZWsnLFxuICAgICAgICAgICAgICAgICdsYXN0V2VlaycsXG4gICAgICAgICAgICAgICAgJ3NhbWVFbHNlJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcHJvcGVydHk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IHByb3BlcnR5VGVzdCB8fCBoYXNPd25Qcm9wKGlucHV0LCBwcm9wZXJ0eSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2JqZWN0VGVzdCAmJiBwcm9wZXJ0eVRlc3Q7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Q2FsZW5kYXJGb3JtYXQobXlNb21lbnQsIG5vdykge1xuICAgICAgICB2YXIgZGlmZiA9IG15TW9tZW50LmRpZmYobm93LCAnZGF5cycsIHRydWUpO1xuICAgICAgICByZXR1cm4gZGlmZiA8IC02XG4gICAgICAgICAgICA/ICdzYW1lRWxzZSdcbiAgICAgICAgICAgIDogZGlmZiA8IC0xXG4gICAgICAgICAgICA/ICdsYXN0V2VlaydcbiAgICAgICAgICAgIDogZGlmZiA8IDBcbiAgICAgICAgICAgID8gJ2xhc3REYXknXG4gICAgICAgICAgICA6IGRpZmYgPCAxXG4gICAgICAgICAgICA/ICdzYW1lRGF5J1xuICAgICAgICAgICAgOiBkaWZmIDwgMlxuICAgICAgICAgICAgPyAnbmV4dERheSdcbiAgICAgICAgICAgIDogZGlmZiA8IDdcbiAgICAgICAgICAgID8gJ25leHRXZWVrJ1xuICAgICAgICAgICAgOiAnc2FtZUVsc2UnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGVuZGFyJDEodGltZSwgZm9ybWF0cykge1xuICAgICAgICAvLyBTdXBwb3J0IGZvciBzaW5nbGUgcGFyYW1ldGVyLCBmb3JtYXRzIG9ubHkgb3ZlcmxvYWQgdG8gdGhlIGNhbGVuZGFyIGZ1bmN0aW9uXG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBpZiAoIWFyZ3VtZW50c1swXSkge1xuICAgICAgICAgICAgICAgIHRpbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNNb21lbnRJbnB1dChhcmd1bWVudHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgdGltZSA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICBmb3JtYXRzID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0NhbGVuZGFyU3BlYyhhcmd1bWVudHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgZm9ybWF0cyA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICB0aW1lID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFdlIHdhbnQgdG8gY29tcGFyZSB0aGUgc3RhcnQgb2YgdG9kYXksIHZzIHRoaXMuXG4gICAgICAgIC8vIEdldHRpbmcgc3RhcnQtb2YtdG9kYXkgZGVwZW5kcyBvbiB3aGV0aGVyIHdlJ3JlIGxvY2FsL3V0Yy9vZmZzZXQgb3Igbm90LlxuICAgICAgICB2YXIgbm93ID0gdGltZSB8fCBjcmVhdGVMb2NhbCgpLFxuICAgICAgICAgICAgc29kID0gY2xvbmVXaXRoT2Zmc2V0KG5vdywgdGhpcykuc3RhcnRPZignZGF5JyksXG4gICAgICAgICAgICBmb3JtYXQgPSBob29rcy5jYWxlbmRhckZvcm1hdCh0aGlzLCBzb2QpIHx8ICdzYW1lRWxzZScsXG4gICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgIGZvcm1hdHMgJiZcbiAgICAgICAgICAgICAgICAoaXNGdW5jdGlvbihmb3JtYXRzW2Zvcm1hdF0pXG4gICAgICAgICAgICAgICAgICAgID8gZm9ybWF0c1tmb3JtYXRdLmNhbGwodGhpcywgbm93KVxuICAgICAgICAgICAgICAgICAgICA6IGZvcm1hdHNbZm9ybWF0XSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KFxuICAgICAgICAgICAgb3V0cHV0IHx8IHRoaXMubG9jYWxlRGF0YSgpLmNhbGVuZGFyKGZvcm1hdCwgdGhpcywgY3JlYXRlTG9jYWwobm93KSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbG9uZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNb21lbnQodGhpcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNBZnRlcihpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPiBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbElucHV0LnZhbHVlT2YoKSA8IHRoaXMuY2xvbmUoKS5zdGFydE9mKHVuaXRzKS52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0JlZm9yZShpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPCBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb25lKCkuZW5kT2YodW5pdHMpLnZhbHVlT2YoKSA8IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNCZXR3ZWVuKGZyb20sIHRvLCB1bml0cywgaW5jbHVzaXZpdHkpIHtcbiAgICAgICAgdmFyIGxvY2FsRnJvbSA9IGlzTW9tZW50KGZyb20pID8gZnJvbSA6IGNyZWF0ZUxvY2FsKGZyb20pLFxuICAgICAgICAgICAgbG9jYWxUbyA9IGlzTW9tZW50KHRvKSA/IHRvIDogY3JlYXRlTG9jYWwodG8pO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbEZyb20uaXNWYWxpZCgpICYmIGxvY2FsVG8uaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGluY2x1c2l2aXR5ID0gaW5jbHVzaXZpdHkgfHwgJygpJztcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChpbmNsdXNpdml0eVswXSA9PT0gJygnXG4gICAgICAgICAgICAgICAgPyB0aGlzLmlzQWZ0ZXIobG9jYWxGcm9tLCB1bml0cylcbiAgICAgICAgICAgICAgICA6ICF0aGlzLmlzQmVmb3JlKGxvY2FsRnJvbSwgdW5pdHMpKSAmJlxuICAgICAgICAgICAgKGluY2x1c2l2aXR5WzFdID09PSAnKSdcbiAgICAgICAgICAgICAgICA/IHRoaXMuaXNCZWZvcmUobG9jYWxUbywgdW5pdHMpXG4gICAgICAgICAgICAgICAgOiAhdGhpcy5pc0FmdGVyKGxvY2FsVG8sIHVuaXRzKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWUoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHZhciBsb2NhbElucHV0ID0gaXNNb21lbnQoaW5wdXQpID8gaW5wdXQgOiBjcmVhdGVMb2NhbChpbnB1dCksXG4gICAgICAgICAgICBpbnB1dE1zO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbElucHV0LmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB8fCAnbWlsbGlzZWNvbmQnO1xuICAgICAgICBpZiAodW5pdHMgPT09ICdtaWxsaXNlY29uZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSA9PT0gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnB1dE1zID0gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHRoaXMuY2xvbmUoKS5zdGFydE9mKHVuaXRzKS52YWx1ZU9mKCkgPD0gaW5wdXRNcyAmJlxuICAgICAgICAgICAgICAgIGlucHV0TXMgPD0gdGhpcy5jbG9uZSgpLmVuZE9mKHVuaXRzKS52YWx1ZU9mKClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWVPckFmdGVyKGlucHV0LCB1bml0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1NhbWUoaW5wdXQsIHVuaXRzKSB8fCB0aGlzLmlzQWZ0ZXIoaW5wdXQsIHVuaXRzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWVPckJlZm9yZShpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTYW1lKGlucHV0LCB1bml0cykgfHwgdGhpcy5pc0JlZm9yZShpbnB1dCwgdW5pdHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRpZmYoaW5wdXQsIHVuaXRzLCBhc0Zsb2F0KSB7XG4gICAgICAgIHZhciB0aGF0LCB6b25lRGVsdGEsIG91dHB1dDtcblxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhhdCA9IGNsb25lV2l0aE9mZnNldChpbnB1dCwgdGhpcyk7XG5cbiAgICAgICAgaWYgKCF0aGF0LmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIHpvbmVEZWx0YSA9ICh0aGF0LnV0Y09mZnNldCgpIC0gdGhpcy51dGNPZmZzZXQoKSkgKiA2ZTQ7XG5cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG5cbiAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpIC8gMTI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpIC8gMztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0KSAvIDFlMztcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gMTAwMFxuICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQpIC8gNmU0O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjBcbiAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCkgLyAzNmU1O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjAgKiA2MFxuICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQgLSB6b25lRGVsdGEpIC8gODY0ZTU7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwICogMjQsIG5lZ2F0ZSBkc3RcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCAtIHpvbmVEZWx0YSkgLyA2MDQ4ZTU7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwICogMjQgKiA3LCBuZWdhdGUgZHN0XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIG91dHB1dCA9IHRoaXMgLSB0aGF0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFzRmxvYXQgPyBvdXRwdXQgOiBhYnNGbG9vcihvdXRwdXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoRGlmZihhLCBiKSB7XG4gICAgICAgIGlmIChhLmRhdGUoKSA8IGIuZGF0ZSgpKSB7XG4gICAgICAgICAgICAvLyBlbmQtb2YtbW9udGggY2FsY3VsYXRpb25zIHdvcmsgY29ycmVjdCB3aGVuIHRoZSBzdGFydCBtb250aCBoYXMgbW9yZVxuICAgICAgICAgICAgLy8gZGF5cyB0aGFuIHRoZSBlbmQgbW9udGguXG4gICAgICAgICAgICByZXR1cm4gLW1vbnRoRGlmZihiLCBhKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBkaWZmZXJlbmNlIGluIG1vbnRoc1xuICAgICAgICB2YXIgd2hvbGVNb250aERpZmYgPSAoYi55ZWFyKCkgLSBhLnllYXIoKSkgKiAxMiArIChiLm1vbnRoKCkgLSBhLm1vbnRoKCkpLFxuICAgICAgICAgICAgLy8gYiBpcyBpbiAoYW5jaG9yIC0gMSBtb250aCwgYW5jaG9yICsgMSBtb250aClcbiAgICAgICAgICAgIGFuY2hvciA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYsICdtb250aHMnKSxcbiAgICAgICAgICAgIGFuY2hvcjIsXG4gICAgICAgICAgICBhZGp1c3Q7XG5cbiAgICAgICAgaWYgKGIgLSBhbmNob3IgPCAwKSB7XG4gICAgICAgICAgICBhbmNob3IyID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiAtIDEsICdtb250aHMnKTtcbiAgICAgICAgICAgIC8vIGxpbmVhciBhY3Jvc3MgdGhlIG1vbnRoXG4gICAgICAgICAgICBhZGp1c3QgPSAoYiAtIGFuY2hvcikgLyAoYW5jaG9yIC0gYW5jaG9yMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhbmNob3IyID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiArIDEsICdtb250aHMnKTtcbiAgICAgICAgICAgIC8vIGxpbmVhciBhY3Jvc3MgdGhlIG1vbnRoXG4gICAgICAgICAgICBhZGp1c3QgPSAoYiAtIGFuY2hvcikgLyAoYW5jaG9yMiAtIGFuY2hvcik7XG4gICAgICAgIH1cblxuICAgICAgICAvL2NoZWNrIGZvciBuZWdhdGl2ZSB6ZXJvLCByZXR1cm4gemVybyBpZiBuZWdhdGl2ZSB6ZXJvXG4gICAgICAgIHJldHVybiAtKHdob2xlTW9udGhEaWZmICsgYWRqdXN0KSB8fCAwO1xuICAgIH1cblxuICAgIGhvb2tzLmRlZmF1bHRGb3JtYXQgPSAnWVlZWS1NTS1ERFRISDptbTpzc1onO1xuICAgIGhvb2tzLmRlZmF1bHRGb3JtYXRVdGMgPSAnWVlZWS1NTS1ERFRISDptbTpzc1taXSc7XG5cbiAgICBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5sb2NhbGUoJ2VuJykuZm9ybWF0KCdkZGQgTU1NIEREIFlZWVkgSEg6bW06c3MgW0dNVF1aWicpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSVNPU3RyaW5nKGtlZXBPZmZzZXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHV0YyA9IGtlZXBPZmZzZXQgIT09IHRydWUsXG4gICAgICAgICAgICBtID0gdXRjID8gdGhpcy5jbG9uZSgpLnV0YygpIDogdGhpcztcbiAgICAgICAgaWYgKG0ueWVhcigpIDwgMCB8fCBtLnllYXIoKSA+IDk5OTkpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRNb21lbnQoXG4gICAgICAgICAgICAgICAgbSxcbiAgICAgICAgICAgICAgICB1dGNcbiAgICAgICAgICAgICAgICAgICAgPyAnWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdJ1xuICAgICAgICAgICAgICAgICAgICA6ICdZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNGdW5jdGlvbihEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZykpIHtcbiAgICAgICAgICAgIC8vIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiBpcyB+NTB4IGZhc3RlciwgdXNlIGl0IHdoZW4gd2UgY2FuXG4gICAgICAgICAgICBpZiAodXRjKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9EYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMudmFsdWVPZigpICsgdGhpcy51dGNPZmZzZXQoKSAqIDYwICogMTAwMClcbiAgICAgICAgICAgICAgICAgICAgLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJ1onLCBmb3JtYXRNb21lbnQobSwgJ1onKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1hdE1vbWVudChcbiAgICAgICAgICAgIG0sXG4gICAgICAgICAgICB1dGMgPyAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXScgOiAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1onXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgaHVtYW4gcmVhZGFibGUgcmVwcmVzZW50YXRpb24gb2YgYSBtb21lbnQgdGhhdCBjYW5cbiAgICAgKiBhbHNvIGJlIGV2YWx1YXRlZCB0byBnZXQgYSBuZXcgbW9tZW50IHdoaWNoIGlzIHRoZSBzYW1lXG4gICAgICpcbiAgICAgKiBAbGluayBodHRwczovL25vZGVqcy5vcmcvZGlzdC9sYXRlc3QvZG9jcy9hcGkvdXRpbC5odG1sI3V0aWxfY3VzdG9tX2luc3BlY3RfZnVuY3Rpb25fb25fb2JqZWN0c1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluc3BlY3QoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiAnbW9tZW50LmludmFsaWQoLyogJyArIHRoaXMuX2kgKyAnICovKSc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGZ1bmMgPSAnbW9tZW50JyxcbiAgICAgICAgICAgIHpvbmUgPSAnJyxcbiAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgIHllYXIsXG4gICAgICAgICAgICBkYXRldGltZSxcbiAgICAgICAgICAgIHN1ZmZpeDtcbiAgICAgICAgaWYgKCF0aGlzLmlzTG9jYWwoKSkge1xuICAgICAgICAgICAgZnVuYyA9IHRoaXMudXRjT2Zmc2V0KCkgPT09IDAgPyAnbW9tZW50LnV0YycgOiAnbW9tZW50LnBhcnNlWm9uZSc7XG4gICAgICAgICAgICB6b25lID0gJ1onO1xuICAgICAgICB9XG4gICAgICAgIHByZWZpeCA9ICdbJyArIGZ1bmMgKyAnKFwiXSc7XG4gICAgICAgIHllYXIgPSAwIDw9IHRoaXMueWVhcigpICYmIHRoaXMueWVhcigpIDw9IDk5OTkgPyAnWVlZWScgOiAnWVlZWVlZJztcbiAgICAgICAgZGF0ZXRpbWUgPSAnLU1NLUREW1RdSEg6bW06c3MuU1NTJztcbiAgICAgICAgc3VmZml4ID0gem9uZSArICdbXCIpXSc7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KHByZWZpeCArIHllYXIgKyBkYXRldGltZSArIHN1ZmZpeCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZm9ybWF0KGlucHV0U3RyaW5nKSB7XG4gICAgICAgIGlmICghaW5wdXRTdHJpbmcpIHtcbiAgICAgICAgICAgIGlucHV0U3RyaW5nID0gdGhpcy5pc1V0YygpXG4gICAgICAgICAgICAgICAgPyBob29rcy5kZWZhdWx0Rm9ybWF0VXRjXG4gICAgICAgICAgICAgICAgOiBob29rcy5kZWZhdWx0Rm9ybWF0O1xuICAgICAgICB9XG4gICAgICAgIHZhciBvdXRwdXQgPSBmb3JtYXRNb21lbnQodGhpcywgaW5wdXRTdHJpbmcpO1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkucG9zdGZvcm1hdChvdXRwdXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZyb20odGltZSwgd2l0aG91dFN1ZmZpeCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWQoKSAmJlxuICAgICAgICAgICAgKChpc01vbWVudCh0aW1lKSAmJiB0aW1lLmlzVmFsaWQoKSkgfHwgY3JlYXRlTG9jYWwodGltZSkuaXNWYWxpZCgpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih7IHRvOiB0aGlzLCBmcm9tOiB0aW1lIH0pXG4gICAgICAgICAgICAgICAgLmxvY2FsZSh0aGlzLmxvY2FsZSgpKVxuICAgICAgICAgICAgICAgIC5odW1hbml6ZSghd2l0aG91dFN1ZmZpeCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZyb21Ob3cod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mcm9tKGNyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvKHRpbWUsIHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkKCkgJiZcbiAgICAgICAgICAgICgoaXNNb21lbnQodGltZSkgJiYgdGltZS5pc1ZhbGlkKCkpIHx8IGNyZWF0ZUxvY2FsKHRpbWUpLmlzVmFsaWQoKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24oeyBmcm9tOiB0aGlzLCB0bzogdGltZSB9KVxuICAgICAgICAgICAgICAgIC5sb2NhbGUodGhpcy5sb2NhbGUoKSlcbiAgICAgICAgICAgICAgICAuaHVtYW5pemUoIXdpdGhvdXRTdWZmaXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b05vdyh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvKGNyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cblxuICAgIC8vIElmIHBhc3NlZCBhIGxvY2FsZSBrZXksIGl0IHdpbGwgc2V0IHRoZSBsb2NhbGUgZm9yIHRoaXNcbiAgICAvLyBpbnN0YW5jZS4gIE90aGVyd2lzZSwgaXQgd2lsbCByZXR1cm4gdGhlIGxvY2FsZSBjb25maWd1cmF0aW9uXG4gICAgLy8gdmFyaWFibGVzIGZvciB0aGlzIGluc3RhbmNlLlxuICAgIGZ1bmN0aW9uIGxvY2FsZShrZXkpIHtcbiAgICAgICAgdmFyIG5ld0xvY2FsZURhdGE7XG5cbiAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxlLl9hYmJyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3TG9jYWxlRGF0YSA9IGdldExvY2FsZShrZXkpO1xuICAgICAgICAgICAgaWYgKG5ld0xvY2FsZURhdGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvY2FsZSA9IG5ld0xvY2FsZURhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBsYW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50KCkubGFuZygpIGlzIGRlcHJlY2F0ZWQuIEluc3RlYWQsIHVzZSBtb21lbnQoKS5sb2NhbGVEYXRhKCkgdG8gZ2V0IHRoZSBsYW5ndWFnZSBjb25maWd1cmF0aW9uLiBVc2UgbW9tZW50KCkubG9jYWxlKCkgdG8gY2hhbmdlIGxhbmd1YWdlcy4nLFxuICAgICAgICBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZShrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZURhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGU7XG4gICAgfVxuXG4gICAgdmFyIE1TX1BFUl9TRUNPTkQgPSAxMDAwLFxuICAgICAgICBNU19QRVJfTUlOVVRFID0gNjAgKiBNU19QRVJfU0VDT05ELFxuICAgICAgICBNU19QRVJfSE9VUiA9IDYwICogTVNfUEVSX01JTlVURSxcbiAgICAgICAgTVNfUEVSXzQwMF9ZRUFSUyA9ICgzNjUgKiA0MDAgKyA5NykgKiAyNCAqIE1TX1BFUl9IT1VSO1xuXG4gICAgLy8gYWN0dWFsIG1vZHVsbyAtIGhhbmRsZXMgbmVnYXRpdmUgbnVtYmVycyAoZm9yIGRhdGVzIGJlZm9yZSAxOTcwKTpcbiAgICBmdW5jdGlvbiBtb2QkMShkaXZpZGVuZCwgZGl2aXNvcikge1xuICAgICAgICByZXR1cm4gKChkaXZpZGVuZCAlIGRpdmlzb3IpICsgZGl2aXNvcikgJSBkaXZpc29yO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsU3RhcnRPZkRhdGUoeSwgbSwgZCkge1xuICAgICAgICAvLyB0aGUgZGF0ZSBjb25zdHJ1Y3RvciByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHkgKyA0MDAsIG0sIGQpIC0gTVNfUEVSXzQwMF9ZRUFSUztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh5LCBtLCBkKS52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1dGNTdGFydE9mRGF0ZSh5LCBtLCBkKSB7XG4gICAgICAgIC8vIERhdGUuVVRDIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICByZXR1cm4gRGF0ZS5VVEMoeSArIDQwMCwgbSwgZCkgLSBNU19QRVJfNDAwX1lFQVJTO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIERhdGUuVVRDKHksIG0sIGQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhcnRPZih1bml0cykge1xuICAgICAgICB2YXIgdGltZSwgc3RhcnRPZkRhdGU7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAodW5pdHMgPT09IHVuZGVmaW5lZCB8fCB1bml0cyA9PT0gJ21pbGxpc2Vjb25kJyB8fCAhdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnRPZkRhdGUgPSB0aGlzLl9pc1VUQyA/IHV0Y1N0YXJ0T2ZEYXRlIDogbG9jYWxTdGFydE9mRGF0ZTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIDAsIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpIC0gKHRoaXMubW9udGgoKSAlIDMpLFxuICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZSgpIC0gdGhpcy53ZWVrZGF5KClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaXNvV2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtICh0aGlzLmlzb1dlZWtkYXkoKSAtIDEpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgdGhpcy5kYXRlKCkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgLT0gbW9kJDEoXG4gICAgICAgICAgICAgICAgICAgIHRpbWUgKyAodGhpcy5faXNVVEMgPyAwIDogdGhpcy51dGNPZmZzZXQoKSAqIE1TX1BFUl9NSU5VVEUpLFxuICAgICAgICAgICAgICAgICAgICBNU19QRVJfSE9VUlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lIC09IG1vZCQxKHRpbWUsIE1TX1BFUl9NSU5VVEUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSAtPSBtb2QkMSh0aW1lLCBNU19QRVJfU0VDT05EKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2Quc2V0VGltZSh0aW1lKTtcbiAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbmRPZih1bml0cykge1xuICAgICAgICB2YXIgdGltZSwgc3RhcnRPZkRhdGU7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAodW5pdHMgPT09IHVuZGVmaW5lZCB8fCB1bml0cyA9PT0gJ21pbGxpc2Vjb25kJyB8fCAhdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnRPZkRhdGUgPSB0aGlzLl9pc1VUQyA/IHV0Y1N0YXJ0T2ZEYXRlIDogbG9jYWxTdGFydE9mRGF0ZTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCkgKyAxLCAwLCAxKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgICAgICAgICB0aW1lID1cbiAgICAgICAgICAgICAgICAgICAgc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSAtICh0aGlzLm1vbnRoKCkgJSAzKSArIDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpICsgMSwgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtIHRoaXMud2Vla2RheSgpICsgN1xuICAgICAgICAgICAgICAgICAgICApIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2lzb1dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPVxuICAgICAgICAgICAgICAgICAgICBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlKCkgLSAodGhpcy5pc29XZWVrZGF5KCkgLSAxKSArIDdcbiAgICAgICAgICAgICAgICAgICAgKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCksIHRoaXMuZGF0ZSgpICsgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgKz1cbiAgICAgICAgICAgICAgICAgICAgTVNfUEVSX0hPVVIgLVxuICAgICAgICAgICAgICAgICAgICBtb2QkMShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUgKyAodGhpcy5faXNVVEMgPyAwIDogdGhpcy51dGNPZmZzZXQoKSAqIE1TX1BFUl9NSU5VVEUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgTVNfUEVSX0hPVVJcbiAgICAgICAgICAgICAgICAgICAgKSAtXG4gICAgICAgICAgICAgICAgICAgIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9IE1TX1BFUl9NSU5VVEUgLSBtb2QkMSh0aW1lLCBNU19QRVJfTUlOVVRFKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9IE1TX1BFUl9TRUNPTkQgLSBtb2QkMSh0aW1lLCBNU19QRVJfU0VDT05EKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kLnNldFRpbWUodGltZSk7XG4gICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsdWVPZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2QudmFsdWVPZigpIC0gKHRoaXMuX29mZnNldCB8fCAwKSAqIDYwMDAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVuaXgoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKHRoaXMudmFsdWVPZigpIC8gMTAwMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9EYXRlKCkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvQXJyYXkoKSB7XG4gICAgICAgIHZhciBtID0gdGhpcztcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG0ueWVhcigpLFxuICAgICAgICAgICAgbS5tb250aCgpLFxuICAgICAgICAgICAgbS5kYXRlKCksXG4gICAgICAgICAgICBtLmhvdXIoKSxcbiAgICAgICAgICAgIG0ubWludXRlKCksXG4gICAgICAgICAgICBtLnNlY29uZCgpLFxuICAgICAgICAgICAgbS5taWxsaXNlY29uZCgpLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvT2JqZWN0KCkge1xuICAgICAgICB2YXIgbSA9IHRoaXM7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB5ZWFyczogbS55ZWFyKCksXG4gICAgICAgICAgICBtb250aHM6IG0ubW9udGgoKSxcbiAgICAgICAgICAgIGRhdGU6IG0uZGF0ZSgpLFxuICAgICAgICAgICAgaG91cnM6IG0uaG91cnMoKSxcbiAgICAgICAgICAgIG1pbnV0ZXM6IG0ubWludXRlcygpLFxuICAgICAgICAgICAgc2Vjb25kczogbS5zZWNvbmRzKCksXG4gICAgICAgICAgICBtaWxsaXNlY29uZHM6IG0ubWlsbGlzZWNvbmRzKCksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgICAvLyBuZXcgRGF0ZShOYU4pLnRvSlNPTigpID09PSBudWxsXG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMudG9JU09TdHJpbmcoKSA6IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZCQyKCkge1xuICAgICAgICByZXR1cm4gaXNWYWxpZCh0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzaW5nRmxhZ3MoKSB7XG4gICAgICAgIHJldHVybiBleHRlbmQoe30sIGdldFBhcnNpbmdGbGFncyh0aGlzKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW52YWxpZEF0KCkge1xuICAgICAgICByZXR1cm4gZ2V0UGFyc2luZ0ZsYWdzKHRoaXMpLm92ZXJmbG93O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0aW9uRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlucHV0OiB0aGlzLl9pLFxuICAgICAgICAgICAgZm9ybWF0OiB0aGlzLl9mLFxuICAgICAgICAgICAgbG9jYWxlOiB0aGlzLl9sb2NhbGUsXG4gICAgICAgICAgICBpc1VUQzogdGhpcy5faXNVVEMsXG4gICAgICAgICAgICBzdHJpY3Q6IHRoaXMuX3N0cmljdCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTicsIDAsIDAsICdlcmFBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OJywgMCwgMCwgJ2VyYUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk5OJywgMCwgMCwgJ2VyYUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk5OTicsIDAsIDAsICdlcmFOYW1lJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OTk5OJywgMCwgMCwgJ2VyYU5hcnJvdycpO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3knLCAxXSwgJ3lvJywgJ2VyYVllYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneXknLCAyXSwgMCwgJ2VyYVllYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneXl5JywgM10sIDAsICdlcmFZZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3l5eXknLCA0XSwgMCwgJ2VyYVllYXInKTtcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ04nLCBtYXRjaEVyYUFiYnIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OJywgbWF0Y2hFcmFBYmJyKTtcbiAgICBhZGRSZWdleFRva2VuKCdOTk4nLCBtYXRjaEVyYUFiYnIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OTk4nLCBtYXRjaEVyYU5hbWUpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OTk5OJywgbWF0Y2hFcmFOYXJyb3cpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ04nLCAnTk4nLCAnTk5OJywgJ05OTk4nLCAnTk5OTk4nXSwgZnVuY3Rpb24gKFxuICAgICAgICBpbnB1dCxcbiAgICAgICAgYXJyYXksXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgdG9rZW5cbiAgICApIHtcbiAgICAgICAgdmFyIGVyYSA9IGNvbmZpZy5fbG9jYWxlLmVyYXNQYXJzZShpbnB1dCwgdG9rZW4sIGNvbmZpZy5fc3RyaWN0KTtcbiAgICAgICAgaWYgKGVyYSkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZXJhID0gZXJhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZEVyYSA9IGlucHV0O1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBhZGRSZWdleFRva2VuKCd5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneXknLCBtYXRjaFVuc2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCd5eXknLCBtYXRjaFVuc2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCd5eXl5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneW8nLCBtYXRjaEVyYVllYXJPcmRpbmFsKTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWyd5JywgJ3l5JywgJ3l5eScsICd5eXl5J10sIFlFQVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWyd5byddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHZhciBtYXRjaDtcbiAgICAgICAgaWYgKGNvbmZpZy5fbG9jYWxlLl9lcmFZZWFyT3JkaW5hbFJlZ2V4KSB7XG4gICAgICAgICAgICBtYXRjaCA9IGlucHV0Lm1hdGNoKGNvbmZpZy5fbG9jYWxlLl9lcmFZZWFyT3JkaW5hbFJlZ2V4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcuX2xvY2FsZS5lcmFZZWFyT3JkaW5hbFBhcnNlKSB7XG4gICAgICAgICAgICBhcnJheVtZRUFSXSA9IGNvbmZpZy5fbG9jYWxlLmVyYVllYXJPcmRpbmFsUGFyc2UoaW5wdXQsIG1hdGNoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFycmF5W1lFQVJdID0gcGFyc2VJbnQoaW5wdXQsIDEwKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlRXJhcyhtLCBmb3JtYXQpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLl9lcmFzIHx8IGdldExvY2FsZSgnZW4nKS5fZXJhcztcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBlcmFzW2ldLnNpbmNlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgICAgICAgICBkYXRlID0gaG9va3MoZXJhc1tpXS5zaW5jZSkuc3RhcnRPZignZGF5Jyk7XG4gICAgICAgICAgICAgICAgICAgIGVyYXNbaV0uc2luY2UgPSBkYXRlLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN3aXRjaCAodHlwZW9mIGVyYXNbaV0udW50aWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLnVudGlsID0gK0luZmluaXR5O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICAgICAgICAgIGRhdGUgPSBob29rcyhlcmFzW2ldLnVudGlsKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgICAgIGVyYXNbaV0udW50aWwgPSBkYXRlLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVyYXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlRXJhc1BhcnNlKGVyYU5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmVyYXMoKSxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBhYmJyLFxuICAgICAgICAgICAgbmFycm93O1xuICAgICAgICBlcmFOYW1lID0gZXJhTmFtZS50b1VwcGVyQ2FzZSgpO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgbmFtZSA9IGVyYXNbaV0ubmFtZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgYWJiciA9IGVyYXNbaV0uYWJici50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgbmFycm93ID0gZXJhc1tpXS5uYXJyb3cudG9VcHBlckNhc2UoKTtcblxuICAgICAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ04nOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdOTic6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OTic6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWJiciA9PT0gZXJhTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTk5OTic6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gZXJhTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTk5OTk4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hcnJvdyA9PT0gZXJhTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChbbmFtZSwgYWJiciwgbmFycm93XS5pbmRleE9mKGVyYU5hbWUpID49IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZUVyYXNDb252ZXJ0WWVhcihlcmEsIHllYXIpIHtcbiAgICAgICAgdmFyIGRpciA9IGVyYS5zaW5jZSA8PSBlcmEudW50aWwgPyArMSA6IC0xO1xuICAgICAgICBpZiAoeWVhciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gaG9va3MoZXJhLnNpbmNlKS55ZWFyKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaG9va3MoZXJhLnNpbmNlKS55ZWFyKCkgKyAoeWVhciAtIGVyYS5vZmZzZXQpICogZGlyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RXJhTmFtZSgpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICB2YWwgPSB0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuXG4gICAgICAgICAgICBpZiAoZXJhc1tpXS5zaW5jZSA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0udW50aWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5uYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVyYXNbaV0udW50aWwgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnNpbmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0ubmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRFcmFOYXJyb3coKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKGVyYXNbaV0uc2luY2UgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0ubmFycm93O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVyYXNbaV0udW50aWwgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnNpbmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0ubmFycm93O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYUFiYnIoKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKGVyYXNbaV0uc2luY2UgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0uYWJicjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLmFiYnI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RXJhWWVhcigpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgZGlyLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICBkaXIgPSBlcmFzW2ldLnNpbmNlIDw9IGVyYXNbaV0udW50aWwgPyArMSA6IC0xO1xuXG4gICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICB2YWwgPSB0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKGVyYXNbaV0uc2luY2UgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnVudGlsKSB8fFxuICAgICAgICAgICAgICAgIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLnllYXIoKSAtIGhvb2tzKGVyYXNbaV0uc2luY2UpLnllYXIoKSkgKiBkaXIgK1xuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLm9mZnNldFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy55ZWFyKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXJhc05hbWVSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19lcmFzTmFtZVJlZ2V4JykpIHtcbiAgICAgICAgICAgIGNvbXB1dGVFcmFzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNTdHJpY3QgPyB0aGlzLl9lcmFzTmFtZVJlZ2V4IDogdGhpcy5fZXJhc1JlZ2V4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVyYXNBYmJyUmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfZXJhc0FiYnJSZWdleCcpKSB7XG4gICAgICAgICAgICBjb21wdXRlRXJhc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0ID8gdGhpcy5fZXJhc0FiYnJSZWdleCA6IHRoaXMuX2VyYXNSZWdleDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlcmFzTmFycm93UmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfZXJhc05hcnJvd1JlZ2V4JykpIHtcbiAgICAgICAgICAgIGNvbXB1dGVFcmFzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNTdHJpY3QgPyB0aGlzLl9lcmFzTmFycm93UmVnZXggOiB0aGlzLl9lcmFzUmVnZXg7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF0Y2hFcmFBYmJyKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5lcmFzQWJiclJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYU5hbWUoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLmVyYXNOYW1lUmVnZXgoaXNTdHJpY3QpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hdGNoRXJhTmFycm93KGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5lcmFzTmFycm93UmVnZXgoaXNTdHJpY3QpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hdGNoRXJhWWVhck9yZGluYWwoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLl9lcmFZZWFyT3JkaW5hbFJlZ2V4IHx8IG1hdGNoVW5zaWduZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZUVyYXNQYXJzZSgpIHtcbiAgICAgICAgdmFyIGFiYnJQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG5hbWVQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG5hcnJvd1BpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbWl4ZWRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMuZXJhcygpO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgbmFtZVBpZWNlcy5wdXNoKHJlZ2V4RXNjYXBlKGVyYXNbaV0ubmFtZSkpO1xuICAgICAgICAgICAgYWJiclBpZWNlcy5wdXNoKHJlZ2V4RXNjYXBlKGVyYXNbaV0uYWJicikpO1xuICAgICAgICAgICAgbmFycm93UGllY2VzLnB1c2gocmVnZXhFc2NhcGUoZXJhc1tpXS5uYXJyb3cpKTtcblxuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChyZWdleEVzY2FwZShlcmFzW2ldLm5hbWUpKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2gocmVnZXhFc2NhcGUoZXJhc1tpXS5hYmJyKSk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKHJlZ2V4RXNjYXBlKGVyYXNbaV0ubmFycm93KSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9lcmFzUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBtaXhlZFBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX2VyYXNOYW1lUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBuYW1lUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fZXJhc0FiYnJSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIGFiYnJQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9lcmFzTmFycm93UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIG5hcnJvd1BpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ2dnJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2Vla1llYXIoKSAlIDEwMDtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnR0cnLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc29XZWVrWWVhcigpICUgMTAwO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gYWRkV2Vla1llYXJGb3JtYXRUb2tlbih0b2tlbiwgZ2V0dGVyKSB7XG4gICAgICAgIGFkZEZvcm1hdFRva2VuKDAsIFt0b2tlbiwgdG9rZW4ubGVuZ3RoXSwgMCwgZ2V0dGVyKTtcbiAgICB9XG5cbiAgICBhZGRXZWVrWWVhckZvcm1hdFRva2VuKCdnZ2dnJywgJ3dlZWtZZWFyJyk7XG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignZ2dnZ2cnLCAnd2Vla1llYXInKTtcbiAgICBhZGRXZWVrWWVhckZvcm1hdFRva2VuKCdHR0dHJywgJ2lzb1dlZWtZZWFyJyk7XG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignR0dHR0cnLCAnaXNvV2Vla1llYXInKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnd2Vla1llYXInLCAnZ2cnKTtcbiAgICBhZGRVbml0QWxpYXMoJ2lzb1dlZWtZZWFyJywgJ0dHJyk7XG5cbiAgICAvLyBQUklPUklUWVxuXG4gICAgYWRkVW5pdFByaW9yaXR5KCd3ZWVrWWVhcicsIDEpO1xuICAgIGFkZFVuaXRQcmlvcml0eSgnaXNvV2Vla1llYXInLCAxKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0cnLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignZycsIG1hdGNoU2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCdHRycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdnZycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdHR0dHJywgbWF0Y2gxdG80LCBtYXRjaDQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2dnZ2cnLCBtYXRjaDF0bzQsIG1hdGNoNCk7XG4gICAgYWRkUmVnZXhUb2tlbignR0dHR0cnLCBtYXRjaDF0bzYsIG1hdGNoNik7XG4gICAgYWRkUmVnZXhUb2tlbignZ2dnZ2cnLCBtYXRjaDF0bzYsIG1hdGNoNik7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ2dnZ2cnLCAnZ2dnZ2cnLCAnR0dHRycsICdHR0dHRyddLCBmdW5jdGlvbiAoXG4gICAgICAgIGlucHV0LFxuICAgICAgICB3ZWVrLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHRva2VuXG4gICAgKSB7XG4gICAgICAgIHdlZWtbdG9rZW4uc3Vic3RyKDAsIDIpXSA9IHRvSW50KGlucHV0KTtcbiAgICB9KTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZ2cnLCAnR0cnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHdlZWtbdG9rZW5dID0gaG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0V2Vla1llYXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFNldFdlZWtZZWFySGVscGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICB0aGlzLndlZWsoKSxcbiAgICAgICAgICAgIHRoaXMud2Vla2RheSgpLFxuICAgICAgICAgICAgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LFxuICAgICAgICAgICAgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG95XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPV2Vla1llYXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFNldFdlZWtZZWFySGVscGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICB0aGlzLmlzb1dlZWsoKSxcbiAgICAgICAgICAgIHRoaXMuaXNvV2Vla2RheSgpLFxuICAgICAgICAgICAgMSxcbiAgICAgICAgICAgIDRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJU09XZWVrc0luWWVhcigpIHtcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMueWVhcigpLCAxLCA0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJU09XZWVrc0luSVNPV2Vla1llYXIoKSB7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLmlzb1dlZWtZZWFyKCksIDEsIDQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFdlZWtzSW5ZZWFyKCkge1xuICAgICAgICB2YXIgd2Vla0luZm8gPSB0aGlzLmxvY2FsZURhdGEoKS5fd2VlaztcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMueWVhcigpLCB3ZWVrSW5mby5kb3csIHdlZWtJbmZvLmRveSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0V2Vla3NJbldlZWtZZWFyKCkge1xuICAgICAgICB2YXIgd2Vla0luZm8gPSB0aGlzLmxvY2FsZURhdGEoKS5fd2VlaztcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMud2Vla1llYXIoKSwgd2Vla0luZm8uZG93LCB3ZWVrSW5mby5kb3kpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldFdlZWtZZWFySGVscGVyKGlucHV0LCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla3NUYXJnZXQ7XG4gICAgICAgIGlmIChpbnB1dCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gd2Vla09mWWVhcih0aGlzLCBkb3csIGRveSkueWVhcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdlZWtzVGFyZ2V0ID0gd2Vla3NJblllYXIoaW5wdXQsIGRvdywgZG95KTtcbiAgICAgICAgICAgIGlmICh3ZWVrID4gd2Vla3NUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICB3ZWVrID0gd2Vla3NUYXJnZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2V0V2Vla0FsbC5jYWxsKHRoaXMsIGlucHV0LCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRXZWVrQWxsKHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgZGF5T2ZZZWFyRGF0YSA9IGRheU9mWWVhckZyb21XZWVrcyh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpLFxuICAgICAgICAgICAgZGF0ZSA9IGNyZWF0ZVVUQ0RhdGUoZGF5T2ZZZWFyRGF0YS55ZWFyLCAwLCBkYXlPZlllYXJEYXRhLmRheU9mWWVhcik7XG5cbiAgICAgICAgdGhpcy55ZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSk7XG4gICAgICAgIHRoaXMubW9udGgoZGF0ZS5nZXRVVENNb250aCgpKTtcbiAgICAgICAgdGhpcy5kYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1EnLCAwLCAnUW8nLCAncXVhcnRlcicpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdxdWFydGVyJywgJ1EnKTtcblxuICAgIC8vIFBSSU9SSVRZXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ3F1YXJ0ZXInLCA3KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1EnLCBtYXRjaDEpO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1EnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W01PTlRIXSA9ICh0b0ludChpbnB1dCkgLSAxKSAqIDM7XG4gICAgfSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXRRdWFydGVyKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsXG4gICAgICAgICAgICA/IE1hdGguY2VpbCgodGhpcy5tb250aCgpICsgMSkgLyAzKVxuICAgICAgICAgICAgOiB0aGlzLm1vbnRoKChpbnB1dCAtIDEpICogMyArICh0aGlzLm1vbnRoKCkgJSAzKSk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0QnLCBbJ0REJywgMl0sICdEbycsICdkYXRlJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ2RhdGUnLCAnRCcpO1xuXG4gICAgLy8gUFJJT1JJVFlcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2RhdGUnLCA5KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0QnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0REJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0RvJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgLy8gVE9ETzogUmVtb3ZlIFwib3JkaW5hbFBhcnNlXCIgZmFsbGJhY2sgaW4gbmV4dCBtYWpvciByZWxlYXNlLlxuICAgICAgICByZXR1cm4gaXNTdHJpY3RcbiAgICAgICAgICAgID8gbG9jYWxlLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlIHx8IGxvY2FsZS5fb3JkaW5hbFBhcnNlXG4gICAgICAgICAgICA6IGxvY2FsZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQ7XG4gICAgfSk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnRCcsICdERCddLCBEQVRFKTtcbiAgICBhZGRQYXJzZVRva2VuKCdEbycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbREFURV0gPSB0b0ludChpbnB1dC5tYXRjaChtYXRjaDF0bzIpWzBdKTtcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXREYXlPZk1vbnRoID0gbWFrZUdldFNldCgnRGF0ZScsIHRydWUpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0RERCcsIFsnRERERCcsIDNdLCAnREREbycsICdkYXlPZlllYXInKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnZGF5T2ZZZWFyJywgJ0RERCcpO1xuXG4gICAgLy8gUFJJT1JJVFlcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2RheU9mWWVhcicsIDQpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignREREJywgbWF0Y2gxdG8zKTtcbiAgICBhZGRSZWdleFRva2VuKCdEREREJywgbWF0Y2gzKTtcbiAgICBhZGRQYXJzZVRva2VuKFsnREREJywgJ0REREQnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID0gdG9JbnQoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0RGF5T2ZZZWFyKGlucHV0KSB7XG4gICAgICAgIHZhciBkYXlPZlllYXIgPVxuICAgICAgICAgICAgTWF0aC5yb3VuZChcbiAgICAgICAgICAgICAgICAodGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpIC0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ3llYXInKSkgLyA4NjRlNVxuICAgICAgICAgICAgKSArIDE7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gZGF5T2ZZZWFyIDogdGhpcy5hZGQoaW5wdXQgLSBkYXlPZlllYXIsICdkJyk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ20nLCBbJ21tJywgMl0sIDAsICdtaW51dGUnKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnbWludXRlJywgJ20nKTtcblxuICAgIC8vIFBSSU9SSVRZXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ21pbnV0ZScsIDE0KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ20nLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ21tJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydtJywgJ21tJ10sIE1JTlVURSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0TWludXRlID0gbWFrZUdldFNldCgnTWludXRlcycsIGZhbHNlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdzJywgWydzcycsIDJdLCAwLCAnc2Vjb25kJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ3NlY29uZCcsICdzJyk7XG5cbiAgICAvLyBQUklPUklUWVxuXG4gICAgYWRkVW5pdFByaW9yaXR5KCdzZWNvbmQnLCAxNSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdzJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdzcycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRQYXJzZVRva2VuKFsncycsICdzcyddLCBTRUNPTkQpO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldFNlY29uZCA9IG1ha2VHZXRTZXQoJ1NlY29uZHMnLCBmYWxzZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignUycsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIH5+KHRoaXMubWlsbGlzZWNvbmQoKSAvIDEwMCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIH5+KHRoaXMubWlsbGlzZWNvbmQoKSAvIDEwKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTJywgM10sIDAsICdtaWxsaXNlY29uZCcpO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTUycsIDRdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTJywgNV0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTUycsIDZdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTUycsIDddLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTU1NTJywgOF0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDAwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTU1NTUycsIDldLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwMDAwO1xuICAgIH0pO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdtaWxsaXNlY29uZCcsICdtcycpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgnbWlsbGlzZWNvbmQnLCAxNik7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdTJywgbWF0Y2gxdG8zLCBtYXRjaDEpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1NTJywgbWF0Y2gxdG8zLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1NTUycsIG1hdGNoMXRvMywgbWF0Y2gzKTtcblxuICAgIHZhciB0b2tlbiwgZ2V0U2V0TWlsbGlzZWNvbmQ7XG4gICAgZm9yICh0b2tlbiA9ICdTU1NTJzsgdG9rZW4ubGVuZ3RoIDw9IDk7IHRva2VuICs9ICdTJykge1xuICAgICAgICBhZGRSZWdleFRva2VuKHRva2VuLCBtYXRjaFVuc2lnbmVkKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZU1zKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtNSUxMSVNFQ09ORF0gPSB0b0ludCgoJzAuJyArIGlucHV0KSAqIDEwMDApO1xuICAgIH1cblxuICAgIGZvciAodG9rZW4gPSAnUyc7IHRva2VuLmxlbmd0aCA8PSA5OyB0b2tlbiArPSAnUycpIHtcbiAgICAgICAgYWRkUGFyc2VUb2tlbih0b2tlbiwgcGFyc2VNcyk7XG4gICAgfVxuXG4gICAgZ2V0U2V0TWlsbGlzZWNvbmQgPSBtYWtlR2V0U2V0KCdNaWxsaXNlY29uZHMnLCBmYWxzZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigneicsIDAsIDAsICd6b25lQWJicicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd6eicsIDAsIDAsICd6b25lTmFtZScpO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0Wm9uZUFiYnIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1VUQyA/ICdVVEMnIDogJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Wm9uZU5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1VUQyA/ICdDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZScgOiAnJztcbiAgICB9XG5cbiAgICB2YXIgcHJvdG8gPSBNb21lbnQucHJvdG90eXBlO1xuXG4gICAgcHJvdG8uYWRkID0gYWRkO1xuICAgIHByb3RvLmNhbGVuZGFyID0gY2FsZW5kYXIkMTtcbiAgICBwcm90by5jbG9uZSA9IGNsb25lO1xuICAgIHByb3RvLmRpZmYgPSBkaWZmO1xuICAgIHByb3RvLmVuZE9mID0gZW5kT2Y7XG4gICAgcHJvdG8uZm9ybWF0ID0gZm9ybWF0O1xuICAgIHByb3RvLmZyb20gPSBmcm9tO1xuICAgIHByb3RvLmZyb21Ob3cgPSBmcm9tTm93O1xuICAgIHByb3RvLnRvID0gdG87XG4gICAgcHJvdG8udG9Ob3cgPSB0b05vdztcbiAgICBwcm90by5nZXQgPSBzdHJpbmdHZXQ7XG4gICAgcHJvdG8uaW52YWxpZEF0ID0gaW52YWxpZEF0O1xuICAgIHByb3RvLmlzQWZ0ZXIgPSBpc0FmdGVyO1xuICAgIHByb3RvLmlzQmVmb3JlID0gaXNCZWZvcmU7XG4gICAgcHJvdG8uaXNCZXR3ZWVuID0gaXNCZXR3ZWVuO1xuICAgIHByb3RvLmlzU2FtZSA9IGlzU2FtZTtcbiAgICBwcm90by5pc1NhbWVPckFmdGVyID0gaXNTYW1lT3JBZnRlcjtcbiAgICBwcm90by5pc1NhbWVPckJlZm9yZSA9IGlzU2FtZU9yQmVmb3JlO1xuICAgIHByb3RvLmlzVmFsaWQgPSBpc1ZhbGlkJDI7XG4gICAgcHJvdG8ubGFuZyA9IGxhbmc7XG4gICAgcHJvdG8ubG9jYWxlID0gbG9jYWxlO1xuICAgIHByb3RvLmxvY2FsZURhdGEgPSBsb2NhbGVEYXRhO1xuICAgIHByb3RvLm1heCA9IHByb3RvdHlwZU1heDtcbiAgICBwcm90by5taW4gPSBwcm90b3R5cGVNaW47XG4gICAgcHJvdG8ucGFyc2luZ0ZsYWdzID0gcGFyc2luZ0ZsYWdzO1xuICAgIHByb3RvLnNldCA9IHN0cmluZ1NldDtcbiAgICBwcm90by5zdGFydE9mID0gc3RhcnRPZjtcbiAgICBwcm90by5zdWJ0cmFjdCA9IHN1YnRyYWN0O1xuICAgIHByb3RvLnRvQXJyYXkgPSB0b0FycmF5O1xuICAgIHByb3RvLnRvT2JqZWN0ID0gdG9PYmplY3Q7XG4gICAgcHJvdG8udG9EYXRlID0gdG9EYXRlO1xuICAgIHByb3RvLnRvSVNPU3RyaW5nID0gdG9JU09TdHJpbmc7XG4gICAgcHJvdG8uaW5zcGVjdCA9IGluc3BlY3Q7XG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC5mb3IgIT0gbnVsbCkge1xuICAgICAgICBwcm90b1tTeW1ib2wuZm9yKCdub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbScpXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAnTW9tZW50PCcgKyB0aGlzLmZvcm1hdCgpICsgJz4nO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBwcm90by50b0pTT04gPSB0b0pTT047XG4gICAgcHJvdG8udG9TdHJpbmcgPSB0b1N0cmluZztcbiAgICBwcm90by51bml4ID0gdW5peDtcbiAgICBwcm90by52YWx1ZU9mID0gdmFsdWVPZjtcbiAgICBwcm90by5jcmVhdGlvbkRhdGEgPSBjcmVhdGlvbkRhdGE7XG4gICAgcHJvdG8uZXJhTmFtZSA9IGdldEVyYU5hbWU7XG4gICAgcHJvdG8uZXJhTmFycm93ID0gZ2V0RXJhTmFycm93O1xuICAgIHByb3RvLmVyYUFiYnIgPSBnZXRFcmFBYmJyO1xuICAgIHByb3RvLmVyYVllYXIgPSBnZXRFcmFZZWFyO1xuICAgIHByb3RvLnllYXIgPSBnZXRTZXRZZWFyO1xuICAgIHByb3RvLmlzTGVhcFllYXIgPSBnZXRJc0xlYXBZZWFyO1xuICAgIHByb3RvLndlZWtZZWFyID0gZ2V0U2V0V2Vla1llYXI7XG4gICAgcHJvdG8uaXNvV2Vla1llYXIgPSBnZXRTZXRJU09XZWVrWWVhcjtcbiAgICBwcm90by5xdWFydGVyID0gcHJvdG8ucXVhcnRlcnMgPSBnZXRTZXRRdWFydGVyO1xuICAgIHByb3RvLm1vbnRoID0gZ2V0U2V0TW9udGg7XG4gICAgcHJvdG8uZGF5c0luTW9udGggPSBnZXREYXlzSW5Nb250aDtcbiAgICBwcm90by53ZWVrID0gcHJvdG8ud2Vla3MgPSBnZXRTZXRXZWVrO1xuICAgIHByb3RvLmlzb1dlZWsgPSBwcm90by5pc29XZWVrcyA9IGdldFNldElTT1dlZWs7XG4gICAgcHJvdG8ud2Vla3NJblllYXIgPSBnZXRXZWVrc0luWWVhcjtcbiAgICBwcm90by53ZWVrc0luV2Vla1llYXIgPSBnZXRXZWVrc0luV2Vla1llYXI7XG4gICAgcHJvdG8uaXNvV2Vla3NJblllYXIgPSBnZXRJU09XZWVrc0luWWVhcjtcbiAgICBwcm90by5pc29XZWVrc0luSVNPV2Vla1llYXIgPSBnZXRJU09XZWVrc0luSVNPV2Vla1llYXI7XG4gICAgcHJvdG8uZGF0ZSA9IGdldFNldERheU9mTW9udGg7XG4gICAgcHJvdG8uZGF5ID0gcHJvdG8uZGF5cyA9IGdldFNldERheU9mV2VlaztcbiAgICBwcm90by53ZWVrZGF5ID0gZ2V0U2V0TG9jYWxlRGF5T2ZXZWVrO1xuICAgIHByb3RvLmlzb1dlZWtkYXkgPSBnZXRTZXRJU09EYXlPZldlZWs7XG4gICAgcHJvdG8uZGF5T2ZZZWFyID0gZ2V0U2V0RGF5T2ZZZWFyO1xuICAgIHByb3RvLmhvdXIgPSBwcm90by5ob3VycyA9IGdldFNldEhvdXI7XG4gICAgcHJvdG8ubWludXRlID0gcHJvdG8ubWludXRlcyA9IGdldFNldE1pbnV0ZTtcbiAgICBwcm90by5zZWNvbmQgPSBwcm90by5zZWNvbmRzID0gZ2V0U2V0U2Vjb25kO1xuICAgIHByb3RvLm1pbGxpc2Vjb25kID0gcHJvdG8ubWlsbGlzZWNvbmRzID0gZ2V0U2V0TWlsbGlzZWNvbmQ7XG4gICAgcHJvdG8udXRjT2Zmc2V0ID0gZ2V0U2V0T2Zmc2V0O1xuICAgIHByb3RvLnV0YyA9IHNldE9mZnNldFRvVVRDO1xuICAgIHByb3RvLmxvY2FsID0gc2V0T2Zmc2V0VG9Mb2NhbDtcbiAgICBwcm90by5wYXJzZVpvbmUgPSBzZXRPZmZzZXRUb1BhcnNlZE9mZnNldDtcbiAgICBwcm90by5oYXNBbGlnbmVkSG91ck9mZnNldCA9IGhhc0FsaWduZWRIb3VyT2Zmc2V0O1xuICAgIHByb3RvLmlzRFNUID0gaXNEYXlsaWdodFNhdmluZ1RpbWU7XG4gICAgcHJvdG8uaXNMb2NhbCA9IGlzTG9jYWw7XG4gICAgcHJvdG8uaXNVdGNPZmZzZXQgPSBpc1V0Y09mZnNldDtcbiAgICBwcm90by5pc1V0YyA9IGlzVXRjO1xuICAgIHByb3RvLmlzVVRDID0gaXNVdGM7XG4gICAgcHJvdG8uem9uZUFiYnIgPSBnZXRab25lQWJicjtcbiAgICBwcm90by56b25lTmFtZSA9IGdldFpvbmVOYW1lO1xuICAgIHByb3RvLmRhdGVzID0gZGVwcmVjYXRlKFxuICAgICAgICAnZGF0ZXMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIGRhdGUgaW5zdGVhZC4nLFxuICAgICAgICBnZXRTZXREYXlPZk1vbnRoXG4gICAgKTtcbiAgICBwcm90by5tb250aHMgPSBkZXByZWNhdGUoXG4gICAgICAgICdtb250aHMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbnRoIGluc3RlYWQnLFxuICAgICAgICBnZXRTZXRNb250aFxuICAgICk7XG4gICAgcHJvdG8ueWVhcnMgPSBkZXByZWNhdGUoXG4gICAgICAgICd5ZWFycyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgeWVhciBpbnN0ZWFkJyxcbiAgICAgICAgZ2V0U2V0WWVhclxuICAgICk7XG4gICAgcHJvdG8uem9uZSA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudCgpLnpvbmUgaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudCgpLnV0Y09mZnNldCBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL3pvbmUvJyxcbiAgICAgICAgZ2V0U2V0Wm9uZVxuICAgICk7XG4gICAgcHJvdG8uaXNEU1RTaGlmdGVkID0gZGVwcmVjYXRlKFxuICAgICAgICAnaXNEU1RTaGlmdGVkIGlzIGRlcHJlY2F0ZWQuIFNlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2RzdC1zaGlmdGVkLyBmb3IgbW9yZSBpbmZvcm1hdGlvbicsXG4gICAgICAgIGlzRGF5bGlnaHRTYXZpbmdUaW1lU2hpZnRlZFxuICAgICk7XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVVbml4KGlucHV0KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbChpbnB1dCAqIDEwMDApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUluWm9uZSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsLmFwcGx5KG51bGwsIGFyZ3VtZW50cykucGFyc2Vab25lKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlUGFyc2VQb3N0Rm9ybWF0KHN0cmluZykge1xuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgIH1cblxuICAgIHZhciBwcm90byQxID0gTG9jYWxlLnByb3RvdHlwZTtcblxuICAgIHByb3RvJDEuY2FsZW5kYXIgPSBjYWxlbmRhcjtcbiAgICBwcm90byQxLmxvbmdEYXRlRm9ybWF0ID0gbG9uZ0RhdGVGb3JtYXQ7XG4gICAgcHJvdG8kMS5pbnZhbGlkRGF0ZSA9IGludmFsaWREYXRlO1xuICAgIHByb3RvJDEub3JkaW5hbCA9IG9yZGluYWw7XG4gICAgcHJvdG8kMS5wcmVwYXJzZSA9IHByZVBhcnNlUG9zdEZvcm1hdDtcbiAgICBwcm90byQxLnBvc3Rmb3JtYXQgPSBwcmVQYXJzZVBvc3RGb3JtYXQ7XG4gICAgcHJvdG8kMS5yZWxhdGl2ZVRpbWUgPSByZWxhdGl2ZVRpbWU7XG4gICAgcHJvdG8kMS5wYXN0RnV0dXJlID0gcGFzdEZ1dHVyZTtcbiAgICBwcm90byQxLnNldCA9IHNldDtcbiAgICBwcm90byQxLmVyYXMgPSBsb2NhbGVFcmFzO1xuICAgIHByb3RvJDEuZXJhc1BhcnNlID0gbG9jYWxlRXJhc1BhcnNlO1xuICAgIHByb3RvJDEuZXJhc0NvbnZlcnRZZWFyID0gbG9jYWxlRXJhc0NvbnZlcnRZZWFyO1xuICAgIHByb3RvJDEuZXJhc0FiYnJSZWdleCA9IGVyYXNBYmJyUmVnZXg7XG4gICAgcHJvdG8kMS5lcmFzTmFtZVJlZ2V4ID0gZXJhc05hbWVSZWdleDtcbiAgICBwcm90byQxLmVyYXNOYXJyb3dSZWdleCA9IGVyYXNOYXJyb3dSZWdleDtcblxuICAgIHByb3RvJDEubW9udGhzID0gbG9jYWxlTW9udGhzO1xuICAgIHByb3RvJDEubW9udGhzU2hvcnQgPSBsb2NhbGVNb250aHNTaG9ydDtcbiAgICBwcm90byQxLm1vbnRoc1BhcnNlID0gbG9jYWxlTW9udGhzUGFyc2U7XG4gICAgcHJvdG8kMS5tb250aHNSZWdleCA9IG1vbnRoc1JlZ2V4O1xuICAgIHByb3RvJDEubW9udGhzU2hvcnRSZWdleCA9IG1vbnRoc1Nob3J0UmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrID0gbG9jYWxlV2VlaztcbiAgICBwcm90byQxLmZpcnN0RGF5T2ZZZWFyID0gbG9jYWxlRmlyc3REYXlPZlllYXI7XG4gICAgcHJvdG8kMS5maXJzdERheU9mV2VlayA9IGxvY2FsZUZpcnN0RGF5T2ZXZWVrO1xuXG4gICAgcHJvdG8kMS53ZWVrZGF5cyA9IGxvY2FsZVdlZWtkYXlzO1xuICAgIHByb3RvJDEud2Vla2RheXNNaW4gPSBsb2NhbGVXZWVrZGF5c01pbjtcbiAgICBwcm90byQxLndlZWtkYXlzU2hvcnQgPSBsb2NhbGVXZWVrZGF5c1Nob3J0O1xuICAgIHByb3RvJDEud2Vla2RheXNQYXJzZSA9IGxvY2FsZVdlZWtkYXlzUGFyc2U7XG5cbiAgICBwcm90byQxLndlZWtkYXlzUmVnZXggPSB3ZWVrZGF5c1JlZ2V4O1xuICAgIHByb3RvJDEud2Vla2RheXNTaG9ydFJlZ2V4ID0gd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgIHByb3RvJDEud2Vla2RheXNNaW5SZWdleCA9IHdlZWtkYXlzTWluUmVnZXg7XG5cbiAgICBwcm90byQxLmlzUE0gPSBsb2NhbGVJc1BNO1xuICAgIHByb3RvJDEubWVyaWRpZW0gPSBsb2NhbGVNZXJpZGllbTtcblxuICAgIGZ1bmN0aW9uIGdldCQxKGZvcm1hdCwgaW5kZXgsIGZpZWxkLCBzZXR0ZXIpIHtcbiAgICAgICAgdmFyIGxvY2FsZSA9IGdldExvY2FsZSgpLFxuICAgICAgICAgICAgdXRjID0gY3JlYXRlVVRDKCkuc2V0KHNldHRlciwgaW5kZXgpO1xuICAgICAgICByZXR1cm4gbG9jYWxlW2ZpZWxkXSh1dGMsIGZvcm1hdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRoc0ltcGwoZm9ybWF0LCBpbmRleCwgZmllbGQpIHtcbiAgICAgICAgaWYgKGlzTnVtYmVyKGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuXG4gICAgICAgIGlmIChpbmRleCAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0JDEoZm9ybWF0LCBpbmRleCwgZmllbGQsICdtb250aCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBvdXQgPSBbXTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIG91dFtpXSA9IGdldCQxKGZvcm1hdCwgaSwgZmllbGQsICdtb250aCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuXG4gICAgLy8gKClcbiAgICAvLyAoNSlcbiAgICAvLyAoZm10LCA1KVxuICAgIC8vIChmbXQpXG4gICAgLy8gKHRydWUpXG4gICAgLy8gKHRydWUsIDUpXG4gICAgLy8gKHRydWUsIGZtdCwgNSlcbiAgICAvLyAodHJ1ZSwgZm10KVxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCBmaWVsZCkge1xuICAgICAgICBpZiAodHlwZW9mIGxvY2FsZVNvcnRlZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9ybWF0ID0gbG9jYWxlU29ydGVkO1xuICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICBsb2NhbGVTb3J0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKGlzTnVtYmVyKGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGZvcm1hdDtcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdCB8fCAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsb2NhbGUgPSBnZXRMb2NhbGUoKSxcbiAgICAgICAgICAgIHNoaWZ0ID0gbG9jYWxlU29ydGVkID8gbG9jYWxlLl93ZWVrLmRvdyA6IDAsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgb3V0ID0gW107XG5cbiAgICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQkMShmb3JtYXQsIChpbmRleCArIHNoaWZ0KSAlIDcsIGZpZWxkLCAnZGF5Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICBvdXRbaV0gPSBnZXQkMShmb3JtYXQsIChpICsgc2hpZnQpICUgNywgZmllbGQsICdkYXknKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RNb250aHMoZm9ybWF0LCBpbmRleCkge1xuICAgICAgICByZXR1cm4gbGlzdE1vbnRoc0ltcGwoZm9ybWF0LCBpbmRleCwgJ21vbnRocycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RNb250aHNTaG9ydChmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCAnbW9udGhzU2hvcnQnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXMobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgJ3dlZWtkYXlzJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzU2hvcnQobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgJ3dlZWtkYXlzU2hvcnQnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXNNaW4obG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgJ3dlZWtkYXlzTWluJyk7XG4gICAgfVxuXG4gICAgZ2V0U2V0R2xvYmFsTG9jYWxlKCdlbicsIHtcbiAgICAgICAgZXJhczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNpbmNlOiAnMDAwMS0wMS0wMScsXG4gICAgICAgICAgICAgICAgdW50aWw6ICtJbmZpbml0eSxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IDEsXG4gICAgICAgICAgICAgICAgbmFtZTogJ0Fubm8gRG9taW5pJyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICdBRCcsXG4gICAgICAgICAgICAgICAgYWJicjogJ0FEJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcwMDAwLTEyLTMxJyxcbiAgICAgICAgICAgICAgICB1bnRpbDogLUluZmluaXR5LFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnQmVmb3JlIENocmlzdCcsXG4gICAgICAgICAgICAgICAgbmFycm93OiAnQkMnLFxuICAgICAgICAgICAgICAgIGFiYnI6ICdCQycsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0odGh8c3R8bmR8cmQpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgICAgICB0b0ludCgobnVtYmVyICUgMTAwKSAvIDEwKSA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAndGgnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3N0J1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICduZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gM1xuICAgICAgICAgICAgICAgICAgICAgICAgPyAncmQnXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICd0aCc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gU2lkZSBlZmZlY3QgaW1wb3J0c1xuXG4gICAgaG9va3MubGFuZyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudC5sYW5nIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlIGluc3RlYWQuJyxcbiAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlXG4gICAgKTtcbiAgICBob29rcy5sYW5nRGF0YSA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudC5sYW5nRGF0YSBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZURhdGEgaW5zdGVhZC4nLFxuICAgICAgICBnZXRMb2NhbGVcbiAgICApO1xuXG4gICAgdmFyIG1hdGhBYnMgPSBNYXRoLmFicztcblxuICAgIGZ1bmN0aW9uIGFicygpIHtcbiAgICAgICAgdmFyIGRhdGEgPSB0aGlzLl9kYXRhO1xuXG4gICAgICAgIHRoaXMuX21pbGxpc2Vjb25kcyA9IG1hdGhBYnModGhpcy5fbWlsbGlzZWNvbmRzKTtcbiAgICAgICAgdGhpcy5fZGF5cyA9IG1hdGhBYnModGhpcy5fZGF5cyk7XG4gICAgICAgIHRoaXMuX21vbnRocyA9IG1hdGhBYnModGhpcy5fbW9udGhzKTtcblxuICAgICAgICBkYXRhLm1pbGxpc2Vjb25kcyA9IG1hdGhBYnMoZGF0YS5taWxsaXNlY29uZHMpO1xuICAgICAgICBkYXRhLnNlY29uZHMgPSBtYXRoQWJzKGRhdGEuc2Vjb25kcyk7XG4gICAgICAgIGRhdGEubWludXRlcyA9IG1hdGhBYnMoZGF0YS5taW51dGVzKTtcbiAgICAgICAgZGF0YS5ob3VycyA9IG1hdGhBYnMoZGF0YS5ob3Vycyk7XG4gICAgICAgIGRhdGEubW9udGhzID0gbWF0aEFicyhkYXRhLm1vbnRocyk7XG4gICAgICAgIGRhdGEueWVhcnMgPSBtYXRoQWJzKGRhdGEueWVhcnMpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFN1YnRyYWN0JDEoZHVyYXRpb24sIGlucHV0LCB2YWx1ZSwgZGlyZWN0aW9uKSB7XG4gICAgICAgIHZhciBvdGhlciA9IGNyZWF0ZUR1cmF0aW9uKGlucHV0LCB2YWx1ZSk7XG5cbiAgICAgICAgZHVyYXRpb24uX21pbGxpc2Vjb25kcyArPSBkaXJlY3Rpb24gKiBvdGhlci5fbWlsbGlzZWNvbmRzO1xuICAgICAgICBkdXJhdGlvbi5fZGF5cyArPSBkaXJlY3Rpb24gKiBvdGhlci5fZGF5cztcbiAgICAgICAgZHVyYXRpb24uX21vbnRocyArPSBkaXJlY3Rpb24gKiBvdGhlci5fbW9udGhzO1xuXG4gICAgICAgIHJldHVybiBkdXJhdGlvbi5fYnViYmxlKCk7XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydHMgb25seSAyLjAtc3R5bGUgYWRkKDEsICdzJykgb3IgYWRkKGR1cmF0aW9uKVxuICAgIGZ1bmN0aW9uIGFkZCQxKGlucHV0LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gYWRkU3VidHJhY3QkMSh0aGlzLCBpbnB1dCwgdmFsdWUsIDEpO1xuICAgIH1cblxuICAgIC8vIHN1cHBvcnRzIG9ubHkgMi4wLXN0eWxlIHN1YnRyYWN0KDEsICdzJykgb3Igc3VidHJhY3QoZHVyYXRpb24pXG4gICAgZnVuY3Rpb24gc3VidHJhY3QkMShpbnB1dCwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGFkZFN1YnRyYWN0JDEodGhpcywgaW5wdXQsIHZhbHVlLCAtMSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWJzQ2VpbChudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKG51bWJlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWJibGUoKSB7XG4gICAgICAgIHZhciBtaWxsaXNlY29uZHMgPSB0aGlzLl9taWxsaXNlY29uZHMsXG4gICAgICAgICAgICBkYXlzID0gdGhpcy5fZGF5cyxcbiAgICAgICAgICAgIG1vbnRocyA9IHRoaXMuX21vbnRocyxcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLl9kYXRhLFxuICAgICAgICAgICAgc2Vjb25kcyxcbiAgICAgICAgICAgIG1pbnV0ZXMsXG4gICAgICAgICAgICBob3VycyxcbiAgICAgICAgICAgIHllYXJzLFxuICAgICAgICAgICAgbW9udGhzRnJvbURheXM7XG5cbiAgICAgICAgLy8gaWYgd2UgaGF2ZSBhIG1peCBvZiBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgdmFsdWVzLCBidWJibGUgZG93biBmaXJzdFxuICAgICAgICAvLyBjaGVjazogaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvaXNzdWVzLzIxNjZcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAobWlsbGlzZWNvbmRzID49IDAgJiYgZGF5cyA+PSAwICYmIG1vbnRocyA+PSAwKSB8fFxuICAgICAgICAgICAgICAgIChtaWxsaXNlY29uZHMgPD0gMCAmJiBkYXlzIDw9IDAgJiYgbW9udGhzIDw9IDApXG4gICAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgICAgbWlsbGlzZWNvbmRzICs9IGFic0NlaWwobW9udGhzVG9EYXlzKG1vbnRocykgKyBkYXlzKSAqIDg2NGU1O1xuICAgICAgICAgICAgZGF5cyA9IDA7XG4gICAgICAgICAgICBtb250aHMgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGJ1YmJsZXMgdXAgdmFsdWVzLCBzZWUgdGhlIHRlc3RzIGZvclxuICAgICAgICAvLyBleGFtcGxlcyBvZiB3aGF0IHRoYXQgbWVhbnMuXG4gICAgICAgIGRhdGEubWlsbGlzZWNvbmRzID0gbWlsbGlzZWNvbmRzICUgMTAwMDtcblxuICAgICAgICBzZWNvbmRzID0gYWJzRmxvb3IobWlsbGlzZWNvbmRzIC8gMTAwMCk7XG4gICAgICAgIGRhdGEuc2Vjb25kcyA9IHNlY29uZHMgJSA2MDtcblxuICAgICAgICBtaW51dGVzID0gYWJzRmxvb3Ioc2Vjb25kcyAvIDYwKTtcbiAgICAgICAgZGF0YS5taW51dGVzID0gbWludXRlcyAlIDYwO1xuXG4gICAgICAgIGhvdXJzID0gYWJzRmxvb3IobWludXRlcyAvIDYwKTtcbiAgICAgICAgZGF0YS5ob3VycyA9IGhvdXJzICUgMjQ7XG5cbiAgICAgICAgZGF5cyArPSBhYnNGbG9vcihob3VycyAvIDI0KTtcblxuICAgICAgICAvLyBjb252ZXJ0IGRheXMgdG8gbW9udGhzXG4gICAgICAgIG1vbnRoc0Zyb21EYXlzID0gYWJzRmxvb3IoZGF5c1RvTW9udGhzKGRheXMpKTtcbiAgICAgICAgbW9udGhzICs9IG1vbnRoc0Zyb21EYXlzO1xuICAgICAgICBkYXlzIC09IGFic0NlaWwobW9udGhzVG9EYXlzKG1vbnRoc0Zyb21EYXlzKSk7XG5cbiAgICAgICAgLy8gMTIgbW9udGhzIC0+IDEgeWVhclxuICAgICAgICB5ZWFycyA9IGFic0Zsb29yKG1vbnRocyAvIDEyKTtcbiAgICAgICAgbW9udGhzICU9IDEyO1xuXG4gICAgICAgIGRhdGEuZGF5cyA9IGRheXM7XG4gICAgICAgIGRhdGEubW9udGhzID0gbW9udGhzO1xuICAgICAgICBkYXRhLnllYXJzID0geWVhcnM7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGF5c1RvTW9udGhzKGRheXMpIHtcbiAgICAgICAgLy8gNDAwIHllYXJzIGhhdmUgMTQ2MDk3IGRheXMgKHRha2luZyBpbnRvIGFjY291bnQgbGVhcCB5ZWFyIHJ1bGVzKVxuICAgICAgICAvLyA0MDAgeWVhcnMgaGF2ZSAxMiBtb250aHMgPT09IDQ4MDBcbiAgICAgICAgcmV0dXJuIChkYXlzICogNDgwMCkgLyAxNDYwOTc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9udGhzVG9EYXlzKG1vbnRocykge1xuICAgICAgICAvLyB0aGUgcmV2ZXJzZSBvZiBkYXlzVG9Nb250aHNcbiAgICAgICAgcmV0dXJuIChtb250aHMgKiAxNDYwOTcpIC8gNDgwMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhcyh1bml0cykge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkYXlzLFxuICAgICAgICAgICAgbW9udGhzLFxuICAgICAgICAgICAgbWlsbGlzZWNvbmRzID0gdGhpcy5fbWlsbGlzZWNvbmRzO1xuXG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuXG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21vbnRoJyB8fCB1bml0cyA9PT0gJ3F1YXJ0ZXInIHx8IHVuaXRzID09PSAneWVhcicpIHtcbiAgICAgICAgICAgIGRheXMgPSB0aGlzLl9kYXlzICsgbWlsbGlzZWNvbmRzIC8gODY0ZTU7XG4gICAgICAgICAgICBtb250aHMgPSB0aGlzLl9tb250aHMgKyBkYXlzVG9Nb250aHMoZGF5cyk7XG4gICAgICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzIC8gMztcbiAgICAgICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRocyAvIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gaGFuZGxlIG1pbGxpc2Vjb25kcyBzZXBhcmF0ZWx5IGJlY2F1c2Ugb2YgZmxvYXRpbmcgcG9pbnQgbWF0aCBlcnJvcnMgKGlzc3VlICMxODY3KVxuICAgICAgICAgICAgZGF5cyA9IHRoaXMuX2RheXMgKyBNYXRoLnJvdW5kKG1vbnRoc1RvRGF5cyh0aGlzLl9tb250aHMpKTtcbiAgICAgICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgLyA3ICsgbWlsbGlzZWNvbmRzIC8gNjA0OGU1O1xuICAgICAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICsgbWlsbGlzZWNvbmRzIC8gODY0ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICogMjQgKyBtaWxsaXNlY29uZHMgLyAzNmU1O1xuICAgICAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICogMTQ0MCArIG1pbGxpc2Vjb25kcyAvIDZlNDtcbiAgICAgICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF5cyAqIDg2NDAwICsgbWlsbGlzZWNvbmRzIC8gMTAwMDtcbiAgICAgICAgICAgICAgICAvLyBNYXRoLmZsb29yIHByZXZlbnRzIGZsb2F0aW5nIHBvaW50IG1hdGggZXJyb3JzIGhlcmVcbiAgICAgICAgICAgICAgICBjYXNlICdtaWxsaXNlY29uZCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKGRheXMgKiA4NjRlNSkgKyBtaWxsaXNlY29uZHM7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHVuaXQgJyArIHVuaXRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE86IFVzZSB0aGlzLmFzKCdtcycpP1xuICAgIGZ1bmN0aW9uIHZhbHVlT2YkMSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5fbWlsbGlzZWNvbmRzICtcbiAgICAgICAgICAgIHRoaXMuX2RheXMgKiA4NjRlNSArXG4gICAgICAgICAgICAodGhpcy5fbW9udGhzICUgMTIpICogMjU5MmU2ICtcbiAgICAgICAgICAgIHRvSW50KHRoaXMuX21vbnRocyAvIDEyKSAqIDMxNTM2ZTZcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlQXMoYWxpYXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFzKGFsaWFzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgYXNNaWxsaXNlY29uZHMgPSBtYWtlQXMoJ21zJyksXG4gICAgICAgIGFzU2Vjb25kcyA9IG1ha2VBcygncycpLFxuICAgICAgICBhc01pbnV0ZXMgPSBtYWtlQXMoJ20nKSxcbiAgICAgICAgYXNIb3VycyA9IG1ha2VBcygnaCcpLFxuICAgICAgICBhc0RheXMgPSBtYWtlQXMoJ2QnKSxcbiAgICAgICAgYXNXZWVrcyA9IG1ha2VBcygndycpLFxuICAgICAgICBhc01vbnRocyA9IG1ha2VBcygnTScpLFxuICAgICAgICBhc1F1YXJ0ZXJzID0gbWFrZUFzKCdRJyksXG4gICAgICAgIGFzWWVhcnMgPSBtYWtlQXMoJ3knKTtcblxuICAgIGZ1bmN0aW9uIGNsb25lJDEoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXQkMih1bml0cykge1xuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpc1t1bml0cyArICdzJ10oKSA6IE5hTjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlR2V0dGVyKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2RhdGFbbmFtZV0gOiBOYU47XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIG1pbGxpc2Vjb25kcyA9IG1ha2VHZXR0ZXIoJ21pbGxpc2Vjb25kcycpLFxuICAgICAgICBzZWNvbmRzID0gbWFrZUdldHRlcignc2Vjb25kcycpLFxuICAgICAgICBtaW51dGVzID0gbWFrZUdldHRlcignbWludXRlcycpLFxuICAgICAgICBob3VycyA9IG1ha2VHZXR0ZXIoJ2hvdXJzJyksXG4gICAgICAgIGRheXMgPSBtYWtlR2V0dGVyKCdkYXlzJyksXG4gICAgICAgIG1vbnRocyA9IG1ha2VHZXR0ZXIoJ21vbnRocycpLFxuICAgICAgICB5ZWFycyA9IG1ha2VHZXR0ZXIoJ3llYXJzJyk7XG5cbiAgICBmdW5jdGlvbiB3ZWVrcygpIHtcbiAgICAgICAgcmV0dXJuIGFic0Zsb29yKHRoaXMuZGF5cygpIC8gNyk7XG4gICAgfVxuXG4gICAgdmFyIHJvdW5kID0gTWF0aC5yb3VuZCxcbiAgICAgICAgdGhyZXNob2xkcyA9IHtcbiAgICAgICAgICAgIHNzOiA0NCwgLy8gYSBmZXcgc2Vjb25kcyB0byBzZWNvbmRzXG4gICAgICAgICAgICBzOiA0NSwgLy8gc2Vjb25kcyB0byBtaW51dGVcbiAgICAgICAgICAgIG06IDQ1LCAvLyBtaW51dGVzIHRvIGhvdXJcbiAgICAgICAgICAgIGg6IDIyLCAvLyBob3VycyB0byBkYXlcbiAgICAgICAgICAgIGQ6IDI2LCAvLyBkYXlzIHRvIG1vbnRoL3dlZWtcbiAgICAgICAgICAgIHc6IG51bGwsIC8vIHdlZWtzIHRvIG1vbnRoXG4gICAgICAgICAgICBNOiAxMSwgLy8gbW9udGhzIHRvIHllYXJcbiAgICAgICAgfTtcblxuICAgIC8vIGhlbHBlciBmdW5jdGlvbiBmb3IgbW9tZW50LmZuLmZyb20sIG1vbWVudC5mbi5mcm9tTm93LCBhbmQgbW9tZW50LmR1cmF0aW9uLmZuLmh1bWFuaXplXG4gICAgZnVuY3Rpb24gc3Vic3RpdHV0ZVRpbWVBZ28oc3RyaW5nLCBudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGlzRnV0dXJlLCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5yZWxhdGl2ZVRpbWUobnVtYmVyIHx8IDEsICEhd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lJDEocG9zTmVnRHVyYXRpb24sIHdpdGhvdXRTdWZmaXgsIHRocmVzaG9sZHMsIGxvY2FsZSkge1xuICAgICAgICB2YXIgZHVyYXRpb24gPSBjcmVhdGVEdXJhdGlvbihwb3NOZWdEdXJhdGlvbikuYWJzKCksXG4gICAgICAgICAgICBzZWNvbmRzID0gcm91bmQoZHVyYXRpb24uYXMoJ3MnKSksXG4gICAgICAgICAgICBtaW51dGVzID0gcm91bmQoZHVyYXRpb24uYXMoJ20nKSksXG4gICAgICAgICAgICBob3VycyA9IHJvdW5kKGR1cmF0aW9uLmFzKCdoJykpLFxuICAgICAgICAgICAgZGF5cyA9IHJvdW5kKGR1cmF0aW9uLmFzKCdkJykpLFxuICAgICAgICAgICAgbW9udGhzID0gcm91bmQoZHVyYXRpb24uYXMoJ00nKSksXG4gICAgICAgICAgICB3ZWVrcyA9IHJvdW5kKGR1cmF0aW9uLmFzKCd3JykpLFxuICAgICAgICAgICAgeWVhcnMgPSByb3VuZChkdXJhdGlvbi5hcygneScpKSxcbiAgICAgICAgICAgIGEgPVxuICAgICAgICAgICAgICAgIChzZWNvbmRzIDw9IHRocmVzaG9sZHMuc3MgJiYgWydzJywgc2Vjb25kc10pIHx8XG4gICAgICAgICAgICAgICAgKHNlY29uZHMgPCB0aHJlc2hvbGRzLnMgJiYgWydzcycsIHNlY29uZHNdKSB8fFxuICAgICAgICAgICAgICAgIChtaW51dGVzIDw9IDEgJiYgWydtJ10pIHx8XG4gICAgICAgICAgICAgICAgKG1pbnV0ZXMgPCB0aHJlc2hvbGRzLm0gJiYgWydtbScsIG1pbnV0ZXNdKSB8fFxuICAgICAgICAgICAgICAgIChob3VycyA8PSAxICYmIFsnaCddKSB8fFxuICAgICAgICAgICAgICAgIChob3VycyA8IHRocmVzaG9sZHMuaCAmJiBbJ2hoJywgaG91cnNdKSB8fFxuICAgICAgICAgICAgICAgIChkYXlzIDw9IDEgJiYgWydkJ10pIHx8XG4gICAgICAgICAgICAgICAgKGRheXMgPCB0aHJlc2hvbGRzLmQgJiYgWydkZCcsIGRheXNdKTtcblxuICAgICAgICBpZiAodGhyZXNob2xkcy53ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGEgPVxuICAgICAgICAgICAgICAgIGEgfHxcbiAgICAgICAgICAgICAgICAod2Vla3MgPD0gMSAmJiBbJ3cnXSkgfHxcbiAgICAgICAgICAgICAgICAod2Vla3MgPCB0aHJlc2hvbGRzLncgJiYgWyd3dycsIHdlZWtzXSk7XG4gICAgICAgIH1cbiAgICAgICAgYSA9IGEgfHxcbiAgICAgICAgICAgIChtb250aHMgPD0gMSAmJiBbJ00nXSkgfHxcbiAgICAgICAgICAgIChtb250aHMgPCB0aHJlc2hvbGRzLk0gJiYgWydNTScsIG1vbnRoc10pIHx8XG4gICAgICAgICAgICAoeWVhcnMgPD0gMSAmJiBbJ3knXSkgfHwgWyd5eScsIHllYXJzXTtcblxuICAgICAgICBhWzJdID0gd2l0aG91dFN1ZmZpeDtcbiAgICAgICAgYVszXSA9ICtwb3NOZWdEdXJhdGlvbiA+IDA7XG4gICAgICAgIGFbNF0gPSBsb2NhbGU7XG4gICAgICAgIHJldHVybiBzdWJzdGl0dXRlVGltZUFnby5hcHBseShudWxsLCBhKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc2V0IHRoZSByb3VuZGluZyBmdW5jdGlvbiBmb3IgcmVsYXRpdmUgdGltZSBzdHJpbmdzXG4gICAgZnVuY3Rpb24gZ2V0U2V0UmVsYXRpdmVUaW1lUm91bmRpbmcocm91bmRpbmdGdW5jdGlvbikge1xuICAgICAgICBpZiAocm91bmRpbmdGdW5jdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcm91bmQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiByb3VuZGluZ0Z1bmN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByb3VuZCA9IHJvdW5kaW5nRnVuY3Rpb247XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIHNldCBhIHRocmVzaG9sZCBmb3IgcmVsYXRpdmUgdGltZSBzdHJpbmdzXG4gICAgZnVuY3Rpb24gZ2V0U2V0UmVsYXRpdmVUaW1lVGhyZXNob2xkKHRocmVzaG9sZCwgbGltaXQpIHtcbiAgICAgICAgaWYgKHRocmVzaG9sZHNbdGhyZXNob2xkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpbWl0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJlc2hvbGRzW3RocmVzaG9sZF07XG4gICAgICAgIH1cbiAgICAgICAgdGhyZXNob2xkc1t0aHJlc2hvbGRdID0gbGltaXQ7XG4gICAgICAgIGlmICh0aHJlc2hvbGQgPT09ICdzJykge1xuICAgICAgICAgICAgdGhyZXNob2xkcy5zcyA9IGxpbWl0IC0gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBodW1hbml6ZShhcmdXaXRoU3VmZml4LCBhcmdUaHJlc2hvbGRzKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdpdGhTdWZmaXggPSBmYWxzZSxcbiAgICAgICAgICAgIHRoID0gdGhyZXNob2xkcyxcbiAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgIG91dHB1dDtcblxuICAgICAgICBpZiAodHlwZW9mIGFyZ1dpdGhTdWZmaXggPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBhcmdUaHJlc2hvbGRzID0gYXJnV2l0aFN1ZmZpeDtcbiAgICAgICAgICAgIGFyZ1dpdGhTdWZmaXggPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFyZ1dpdGhTdWZmaXggPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgd2l0aFN1ZmZpeCA9IGFyZ1dpdGhTdWZmaXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhcmdUaHJlc2hvbGRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdGggPSBPYmplY3QuYXNzaWduKHt9LCB0aHJlc2hvbGRzLCBhcmdUaHJlc2hvbGRzKTtcbiAgICAgICAgICAgIGlmIChhcmdUaHJlc2hvbGRzLnMgIT0gbnVsbCAmJiBhcmdUaHJlc2hvbGRzLnNzID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aC5zcyA9IGFyZ1RocmVzaG9sZHMucyAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsb2NhbGUgPSB0aGlzLmxvY2FsZURhdGEoKTtcbiAgICAgICAgb3V0cHV0ID0gcmVsYXRpdmVUaW1lJDEodGhpcywgIXdpdGhTdWZmaXgsIHRoLCBsb2NhbGUpO1xuXG4gICAgICAgIGlmICh3aXRoU3VmZml4KSB7XG4gICAgICAgICAgICBvdXRwdXQgPSBsb2NhbGUucGFzdEZ1dHVyZSgrdGhpcywgb3V0cHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsb2NhbGUucG9zdGZvcm1hdChvdXRwdXQpO1xuICAgIH1cblxuICAgIHZhciBhYnMkMSA9IE1hdGguYWJzO1xuXG4gICAgZnVuY3Rpb24gc2lnbih4KSB7XG4gICAgICAgIHJldHVybiAoeCA+IDApIC0gKHggPCAwKSB8fCAreDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0lTT1N0cmluZyQxKCkge1xuICAgICAgICAvLyBmb3IgSVNPIHN0cmluZ3Mgd2UgZG8gbm90IHVzZSB0aGUgbm9ybWFsIGJ1YmJsaW5nIHJ1bGVzOlxuICAgICAgICAvLyAgKiBtaWxsaXNlY29uZHMgYnViYmxlIHVwIHVudGlsIHRoZXkgYmVjb21lIGhvdXJzXG4gICAgICAgIC8vICAqIGRheXMgZG8gbm90IGJ1YmJsZSBhdCBhbGxcbiAgICAgICAgLy8gICogbW9udGhzIGJ1YmJsZSB1cCB1bnRpbCB0aGV5IGJlY29tZSB5ZWFyc1xuICAgICAgICAvLyBUaGlzIGlzIGJlY2F1c2UgdGhlcmUgaXMgbm8gY29udGV4dC1mcmVlIGNvbnZlcnNpb24gYmV0d2VlbiBob3VycyBhbmQgZGF5c1xuICAgICAgICAvLyAodGhpbmsgb2YgY2xvY2sgY2hhbmdlcylcbiAgICAgICAgLy8gYW5kIGFsc28gbm90IGJldHdlZW4gZGF5cyBhbmQgbW9udGhzICgyOC0zMSBkYXlzIHBlciBtb250aClcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2Vjb25kcyA9IGFicyQxKHRoaXMuX21pbGxpc2Vjb25kcykgLyAxMDAwLFxuICAgICAgICAgICAgZGF5cyA9IGFicyQxKHRoaXMuX2RheXMpLFxuICAgICAgICAgICAgbW9udGhzID0gYWJzJDEodGhpcy5fbW9udGhzKSxcbiAgICAgICAgICAgIG1pbnV0ZXMsXG4gICAgICAgICAgICBob3VycyxcbiAgICAgICAgICAgIHllYXJzLFxuICAgICAgICAgICAgcyxcbiAgICAgICAgICAgIHRvdGFsID0gdGhpcy5hc1NlY29uZHMoKSxcbiAgICAgICAgICAgIHRvdGFsU2lnbixcbiAgICAgICAgICAgIHltU2lnbixcbiAgICAgICAgICAgIGRheXNTaWduLFxuICAgICAgICAgICAgaG1zU2lnbjtcblxuICAgICAgICBpZiAoIXRvdGFsKSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIHRoZSBzYW1lIGFzIEMjJ3MgKE5vZGEpIGFuZCBweXRob24gKGlzb2RhdGUpLi4uXG4gICAgICAgICAgICAvLyBidXQgbm90IG90aGVyIEpTIChnb29nLmRhdGUpXG4gICAgICAgICAgICByZXR1cm4gJ1AwRCc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAzNjAwIHNlY29uZHMgLT4gNjAgbWludXRlcyAtPiAxIGhvdXJcbiAgICAgICAgbWludXRlcyA9IGFic0Zsb29yKHNlY29uZHMgLyA2MCk7XG4gICAgICAgIGhvdXJzID0gYWJzRmxvb3IobWludXRlcyAvIDYwKTtcbiAgICAgICAgc2Vjb25kcyAlPSA2MDtcbiAgICAgICAgbWludXRlcyAlPSA2MDtcblxuICAgICAgICAvLyAxMiBtb250aHMgLT4gMSB5ZWFyXG4gICAgICAgIHllYXJzID0gYWJzRmxvb3IobW9udGhzIC8gMTIpO1xuICAgICAgICBtb250aHMgJT0gMTI7XG5cbiAgICAgICAgLy8gaW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL2RvcmRpbGxlL21vbWVudC1pc29kdXJhdGlvbi9ibG9iL21hc3Rlci9tb21lbnQuaXNvZHVyYXRpb24uanNcbiAgICAgICAgcyA9IHNlY29uZHMgPyBzZWNvbmRzLnRvRml4ZWQoMykucmVwbGFjZSgvXFwuPzArJC8sICcnKSA6ICcnO1xuXG4gICAgICAgIHRvdGFsU2lnbiA9IHRvdGFsIDwgMCA/ICctJyA6ICcnO1xuICAgICAgICB5bVNpZ24gPSBzaWduKHRoaXMuX21vbnRocykgIT09IHNpZ24odG90YWwpID8gJy0nIDogJyc7XG4gICAgICAgIGRheXNTaWduID0gc2lnbih0aGlzLl9kYXlzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcbiAgICAgICAgaG1zU2lnbiA9IHNpZ24odGhpcy5fbWlsbGlzZWNvbmRzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdG90YWxTaWduICtcbiAgICAgICAgICAgICdQJyArXG4gICAgICAgICAgICAoeWVhcnMgPyB5bVNpZ24gKyB5ZWFycyArICdZJyA6ICcnKSArXG4gICAgICAgICAgICAobW9udGhzID8geW1TaWduICsgbW9udGhzICsgJ00nIDogJycpICtcbiAgICAgICAgICAgIChkYXlzID8gZGF5c1NpZ24gKyBkYXlzICsgJ0QnIDogJycpICtcbiAgICAgICAgICAgIChob3VycyB8fCBtaW51dGVzIHx8IHNlY29uZHMgPyAnVCcgOiAnJykgK1xuICAgICAgICAgICAgKGhvdXJzID8gaG1zU2lnbiArIGhvdXJzICsgJ0gnIDogJycpICtcbiAgICAgICAgICAgIChtaW51dGVzID8gaG1zU2lnbiArIG1pbnV0ZXMgKyAnTScgOiAnJykgK1xuICAgICAgICAgICAgKHNlY29uZHMgPyBobXNTaWduICsgcyArICdTJyA6ICcnKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHZhciBwcm90byQyID0gRHVyYXRpb24ucHJvdG90eXBlO1xuXG4gICAgcHJvdG8kMi5pc1ZhbGlkID0gaXNWYWxpZCQxO1xuICAgIHByb3RvJDIuYWJzID0gYWJzO1xuICAgIHByb3RvJDIuYWRkID0gYWRkJDE7XG4gICAgcHJvdG8kMi5zdWJ0cmFjdCA9IHN1YnRyYWN0JDE7XG4gICAgcHJvdG8kMi5hcyA9IGFzO1xuICAgIHByb3RvJDIuYXNNaWxsaXNlY29uZHMgPSBhc01pbGxpc2Vjb25kcztcbiAgICBwcm90byQyLmFzU2Vjb25kcyA9IGFzU2Vjb25kcztcbiAgICBwcm90byQyLmFzTWludXRlcyA9IGFzTWludXRlcztcbiAgICBwcm90byQyLmFzSG91cnMgPSBhc0hvdXJzO1xuICAgIHByb3RvJDIuYXNEYXlzID0gYXNEYXlzO1xuICAgIHByb3RvJDIuYXNXZWVrcyA9IGFzV2Vla3M7XG4gICAgcHJvdG8kMi5hc01vbnRocyA9IGFzTW9udGhzO1xuICAgIHByb3RvJDIuYXNRdWFydGVycyA9IGFzUXVhcnRlcnM7XG4gICAgcHJvdG8kMi5hc1llYXJzID0gYXNZZWFycztcbiAgICBwcm90byQyLnZhbHVlT2YgPSB2YWx1ZU9mJDE7XG4gICAgcHJvdG8kMi5fYnViYmxlID0gYnViYmxlO1xuICAgIHByb3RvJDIuY2xvbmUgPSBjbG9uZSQxO1xuICAgIHByb3RvJDIuZ2V0ID0gZ2V0JDI7XG4gICAgcHJvdG8kMi5taWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZHM7XG4gICAgcHJvdG8kMi5zZWNvbmRzID0gc2Vjb25kcztcbiAgICBwcm90byQyLm1pbnV0ZXMgPSBtaW51dGVzO1xuICAgIHByb3RvJDIuaG91cnMgPSBob3VycztcbiAgICBwcm90byQyLmRheXMgPSBkYXlzO1xuICAgIHByb3RvJDIud2Vla3MgPSB3ZWVrcztcbiAgICBwcm90byQyLm1vbnRocyA9IG1vbnRocztcbiAgICBwcm90byQyLnllYXJzID0geWVhcnM7XG4gICAgcHJvdG8kMi5odW1hbml6ZSA9IGh1bWFuaXplO1xuICAgIHByb3RvJDIudG9JU09TdHJpbmcgPSB0b0lTT1N0cmluZyQxO1xuICAgIHByb3RvJDIudG9TdHJpbmcgPSB0b0lTT1N0cmluZyQxO1xuICAgIHByb3RvJDIudG9KU09OID0gdG9JU09TdHJpbmckMTtcbiAgICBwcm90byQyLmxvY2FsZSA9IGxvY2FsZTtcbiAgICBwcm90byQyLmxvY2FsZURhdGEgPSBsb2NhbGVEYXRhO1xuXG4gICAgcHJvdG8kMi50b0lzb1N0cmluZyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ3RvSXNvU3RyaW5nKCkgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSB0b0lTT1N0cmluZygpIGluc3RlYWQgKG5vdGljZSB0aGUgY2FwaXRhbHMpJyxcbiAgICAgICAgdG9JU09TdHJpbmckMVxuICAgICk7XG4gICAgcHJvdG8kMi5sYW5nID0gbGFuZztcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdYJywgMCwgMCwgJ3VuaXgnKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneCcsIDAsIDAsICd2YWx1ZU9mJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCd4JywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1gnLCBtYXRjaFRpbWVzdGFtcCk7XG4gICAgYWRkUGFyc2VUb2tlbignWCcsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShwYXJzZUZsb2F0KGlucHV0KSAqIDEwMDApO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ3gnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUodG9JbnQoaW5wdXQpKTtcbiAgICB9KTtcblxuICAgIC8vISBtb21lbnQuanNcblxuICAgIGhvb2tzLnZlcnNpb24gPSAnMi4yOS4xJztcblxuICAgIHNldEhvb2tDYWxsYmFjayhjcmVhdGVMb2NhbCk7XG5cbiAgICBob29rcy5mbiA9IHByb3RvO1xuICAgIGhvb2tzLm1pbiA9IG1pbjtcbiAgICBob29rcy5tYXggPSBtYXg7XG4gICAgaG9va3Mubm93ID0gbm93O1xuICAgIGhvb2tzLnV0YyA9IGNyZWF0ZVVUQztcbiAgICBob29rcy51bml4ID0gY3JlYXRlVW5peDtcbiAgICBob29rcy5tb250aHMgPSBsaXN0TW9udGhzO1xuICAgIGhvb2tzLmlzRGF0ZSA9IGlzRGF0ZTtcbiAgICBob29rcy5sb2NhbGUgPSBnZXRTZXRHbG9iYWxMb2NhbGU7XG4gICAgaG9va3MuaW52YWxpZCA9IGNyZWF0ZUludmFsaWQ7XG4gICAgaG9va3MuZHVyYXRpb24gPSBjcmVhdGVEdXJhdGlvbjtcbiAgICBob29rcy5pc01vbWVudCA9IGlzTW9tZW50O1xuICAgIGhvb2tzLndlZWtkYXlzID0gbGlzdFdlZWtkYXlzO1xuICAgIGhvb2tzLnBhcnNlWm9uZSA9IGNyZWF0ZUluWm9uZTtcbiAgICBob29rcy5sb2NhbGVEYXRhID0gZ2V0TG9jYWxlO1xuICAgIGhvb2tzLmlzRHVyYXRpb24gPSBpc0R1cmF0aW9uO1xuICAgIGhvb2tzLm1vbnRoc1Nob3J0ID0gbGlzdE1vbnRoc1Nob3J0O1xuICAgIGhvb2tzLndlZWtkYXlzTWluID0gbGlzdFdlZWtkYXlzTWluO1xuICAgIGhvb2tzLmRlZmluZUxvY2FsZSA9IGRlZmluZUxvY2FsZTtcbiAgICBob29rcy51cGRhdGVMb2NhbGUgPSB1cGRhdGVMb2NhbGU7XG4gICAgaG9va3MubG9jYWxlcyA9IGxpc3RMb2NhbGVzO1xuICAgIGhvb2tzLndlZWtkYXlzU2hvcnQgPSBsaXN0V2Vla2RheXNTaG9ydDtcbiAgICBob29rcy5ub3JtYWxpemVVbml0cyA9IG5vcm1hbGl6ZVVuaXRzO1xuICAgIGhvb2tzLnJlbGF0aXZlVGltZVJvdW5kaW5nID0gZ2V0U2V0UmVsYXRpdmVUaW1lUm91bmRpbmc7XG4gICAgaG9va3MucmVsYXRpdmVUaW1lVGhyZXNob2xkID0gZ2V0U2V0UmVsYXRpdmVUaW1lVGhyZXNob2xkO1xuICAgIGhvb2tzLmNhbGVuZGFyRm9ybWF0ID0gZ2V0Q2FsZW5kYXJGb3JtYXQ7XG4gICAgaG9va3MucHJvdG90eXBlID0gcHJvdG87XG5cbiAgICAvLyBjdXJyZW50bHkgSFRNTDUgaW5wdXQgdHlwZSBvbmx5IHN1cHBvcnRzIDI0LWhvdXIgZm9ybWF0c1xuICAgIGhvb2tzLkhUTUw1X0ZNVCA9IHtcbiAgICAgICAgREFURVRJTUVfTE9DQUw6ICdZWVlZLU1NLUREVEhIOm1tJywgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIC8+XG4gICAgICAgIERBVEVUSU1FX0xPQ0FMX1NFQ09ORFM6ICdZWVlZLU1NLUREVEhIOm1tOnNzJywgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIHN0ZXA9XCIxXCIgLz5cbiAgICAgICAgREFURVRJTUVfTE9DQUxfTVM6ICdZWVlZLU1NLUREVEhIOm1tOnNzLlNTUycsIC8vIDxpbnB1dCB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIiBzdGVwPVwiMC4wMDFcIiAvPlxuICAgICAgICBEQVRFOiAnWVlZWS1NTS1ERCcsIC8vIDxpbnB1dCB0eXBlPVwiZGF0ZVwiIC8+XG4gICAgICAgIFRJTUU6ICdISDptbScsIC8vIDxpbnB1dCB0eXBlPVwidGltZVwiIC8+XG4gICAgICAgIFRJTUVfU0VDT05EUzogJ0hIOm1tOnNzJywgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgc3RlcD1cIjFcIiAvPlxuICAgICAgICBUSU1FX01TOiAnSEg6bW06c3MuU1NTJywgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgc3RlcD1cIjAuMDAxXCIgLz5cbiAgICAgICAgV0VFSzogJ0dHR0ctW1ddV1cnLCAvLyA8aW5wdXQgdHlwZT1cIndlZWtcIiAvPlxuICAgICAgICBNT05USDogJ1lZWVktTU0nLCAvLyA8aW5wdXQgdHlwZT1cIm1vbnRoXCIgLz5cbiAgICB9O1xuXG4gICAgcmV0dXJuIGhvb2tzO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC10aW1lem9uZS5qc1xuLy8hIHZlcnNpb24gOiAwLjUuMzRcbi8vISBDb3B5cmlnaHQgKGMpIEpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuLy8hIGxpY2Vuc2UgOiBNSVRcbi8vISBnaXRodWIuY29tL21vbWVudC9tb21lbnQtdGltZXpvbmVcblxuKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdC8qZ2xvYmFsIGRlZmluZSovXG5cdGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cykge1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCdtb21lbnQnKSk7IC8vIE5vZGVcblx0fSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcblx0XHRkZWZpbmUoWydtb21lbnQnXSwgZmFjdG9yeSk7ICAgICAgICAgICAgICAgICAvLyBBTURcblx0fSBlbHNlIHtcblx0XHRmYWN0b3J5KHJvb3QubW9tZW50KTsgICAgICAgICAgICAgICAgICAgICAgICAvLyBCcm93c2VyXG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKG1vbWVudCkge1xuXHRcInVzZSBzdHJpY3RcIjtcblxuXHQvLyBSZXNvbHZlcyBlczYgbW9kdWxlIGxvYWRpbmcgaXNzdWVcblx0aWYgKG1vbWVudC52ZXJzaW9uID09PSB1bmRlZmluZWQgJiYgbW9tZW50LmRlZmF1bHQpIHtcblx0XHRtb21lbnQgPSBtb21lbnQuZGVmYXVsdDtcblx0fVxuXG5cdC8vIERvIG5vdCBsb2FkIG1vbWVudC10aW1lem9uZSBhIHNlY29uZCB0aW1lLlxuXHQvLyBpZiAobW9tZW50LnR6ICE9PSB1bmRlZmluZWQpIHtcblx0Ly8gXHRsb2dFcnJvcignTW9tZW50IFRpbWV6b25lICcgKyBtb21lbnQudHoudmVyc2lvbiArICcgd2FzIGFscmVhZHkgbG9hZGVkICcgKyAobW9tZW50LnR6LmRhdGFWZXJzaW9uID8gJ3dpdGggZGF0YSBmcm9tICcgOiAnd2l0aG91dCBhbnkgZGF0YScpICsgbW9tZW50LnR6LmRhdGFWZXJzaW9uKTtcblx0Ly8gXHRyZXR1cm4gbW9tZW50O1xuXHQvLyB9XG5cblx0dmFyIFZFUlNJT04gPSBcIjAuNS4zNFwiLFxuXHRcdHpvbmVzID0ge30sXG5cdFx0bGlua3MgPSB7fSxcblx0XHRjb3VudHJpZXMgPSB7fSxcblx0XHRuYW1lcyA9IHt9LFxuXHRcdGd1ZXNzZXMgPSB7fSxcblx0XHRjYWNoZWRHdWVzcztcblxuXHRpZiAoIW1vbWVudCB8fCB0eXBlb2YgbW9tZW50LnZlcnNpb24gIT09ICdzdHJpbmcnKSB7XG5cdFx0bG9nRXJyb3IoJ01vbWVudCBUaW1lem9uZSByZXF1aXJlcyBNb21lbnQuanMuIFNlZSBodHRwczovL21vbWVudGpzLmNvbS90aW1lem9uZS9kb2NzLyMvdXNlLWl0L2Jyb3dzZXIvJyk7XG5cdH1cblxuXHR2YXIgbW9tZW50VmVyc2lvbiA9IG1vbWVudC52ZXJzaW9uLnNwbGl0KCcuJyksXG5cdFx0bWFqb3IgPSArbW9tZW50VmVyc2lvblswXSxcblx0XHRtaW5vciA9ICttb21lbnRWZXJzaW9uWzFdO1xuXG5cdC8vIE1vbWVudC5qcyB2ZXJzaW9uIGNoZWNrXG5cdGlmIChtYWpvciA8IDIgfHwgKG1ham9yID09PSAyICYmIG1pbm9yIDwgNikpIHtcblx0XHRsb2dFcnJvcignTW9tZW50IFRpbWV6b25lIHJlcXVpcmVzIE1vbWVudC5qcyA+PSAyLjYuMC4gWW91IGFyZSB1c2luZyBNb21lbnQuanMgJyArIG1vbWVudC52ZXJzaW9uICsgJy4gU2VlIG1vbWVudGpzLmNvbScpO1xuXHR9XG5cblx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXHRcdFVucGFja2luZ1xuXHQqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cblx0ZnVuY3Rpb24gY2hhckNvZGVUb0ludChjaGFyQ29kZSkge1xuXHRcdGlmIChjaGFyQ29kZSA+IDk2KSB7XG5cdFx0XHRyZXR1cm4gY2hhckNvZGUgLSA4Nztcblx0XHR9IGVsc2UgaWYgKGNoYXJDb2RlID4gNjQpIHtcblx0XHRcdHJldHVybiBjaGFyQ29kZSAtIDI5O1xuXHRcdH1cblx0XHRyZXR1cm4gY2hhckNvZGUgLSA0ODtcblx0fVxuXG5cdGZ1bmN0aW9uIHVucGFja0Jhc2U2MChzdHJpbmcpIHtcblx0XHR2YXIgaSA9IDAsXG5cdFx0XHRwYXJ0cyA9IHN0cmluZy5zcGxpdCgnLicpLFxuXHRcdFx0d2hvbGUgPSBwYXJ0c1swXSxcblx0XHRcdGZyYWN0aW9uYWwgPSBwYXJ0c1sxXSB8fCAnJyxcblx0XHRcdG11bHRpcGxpZXIgPSAxLFxuXHRcdFx0bnVtLFxuXHRcdFx0b3V0ID0gMCxcblx0XHRcdHNpZ24gPSAxO1xuXG5cdFx0Ly8gaGFuZGxlIG5lZ2F0aXZlIG51bWJlcnNcblx0XHRpZiAoc3RyaW5nLmNoYXJDb2RlQXQoMCkgPT09IDQ1KSB7XG5cdFx0XHRpID0gMTtcblx0XHRcdHNpZ24gPSAtMTtcblx0XHR9XG5cblx0XHQvLyBoYW5kbGUgZGlnaXRzIGJlZm9yZSB0aGUgZGVjaW1hbFxuXHRcdGZvciAoaTsgaSA8IHdob2xlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRudW0gPSBjaGFyQ29kZVRvSW50KHdob2xlLmNoYXJDb2RlQXQoaSkpO1xuXHRcdFx0b3V0ID0gNjAgKiBvdXQgKyBudW07XG5cdFx0fVxuXG5cdFx0Ly8gaGFuZGxlIGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbFxuXHRcdGZvciAoaSA9IDA7IGkgPCBmcmFjdGlvbmFsLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRtdWx0aXBsaWVyID0gbXVsdGlwbGllciAvIDYwO1xuXHRcdFx0bnVtID0gY2hhckNvZGVUb0ludChmcmFjdGlvbmFsLmNoYXJDb2RlQXQoaSkpO1xuXHRcdFx0b3V0ICs9IG51bSAqIG11bHRpcGxpZXI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG91dCAqIHNpZ247XG5cdH1cblxuXHRmdW5jdGlvbiBhcnJheVRvSW50IChhcnJheSkge1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcblx0XHRcdGFycmF5W2ldID0gdW5wYWNrQmFzZTYwKGFycmF5W2ldKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBpbnRUb1VudGlsIChhcnJheSwgbGVuZ3RoKSB7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuXHRcdFx0YXJyYXlbaV0gPSBNYXRoLnJvdW5kKChhcnJheVtpIC0gMV0gfHwgMCkgKyAoYXJyYXlbaV0gKiA2MDAwMCkpOyAvLyBtaW51dGVzIHRvIG1pbGxpc2Vjb25kc1xuXHRcdH1cblxuXHRcdGFycmF5W2xlbmd0aCAtIDFdID0gSW5maW5pdHk7XG5cdH1cblxuXHRmdW5jdGlvbiBtYXBJbmRpY2VzIChzb3VyY2UsIGluZGljZXMpIHtcblx0XHR2YXIgb3V0ID0gW10sIGk7XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0b3V0W2ldID0gc291cmNlW2luZGljZXNbaV1dO1xuXHRcdH1cblxuXHRcdHJldHVybiBvdXQ7XG5cdH1cblxuXHRmdW5jdGlvbiB1bnBhY2sgKHN0cmluZykge1xuXHRcdHZhciBkYXRhID0gc3RyaW5nLnNwbGl0KCd8JyksXG5cdFx0XHRvZmZzZXRzID0gZGF0YVsyXS5zcGxpdCgnICcpLFxuXHRcdFx0aW5kaWNlcyA9IGRhdGFbM10uc3BsaXQoJycpLFxuXHRcdFx0dW50aWxzICA9IGRhdGFbNF0uc3BsaXQoJyAnKTtcblxuXHRcdGFycmF5VG9JbnQob2Zmc2V0cyk7XG5cdFx0YXJyYXlUb0ludChpbmRpY2VzKTtcblx0XHRhcnJheVRvSW50KHVudGlscyk7XG5cblx0XHRpbnRUb1VudGlsKHVudGlscywgaW5kaWNlcy5sZW5ndGgpO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdG5hbWUgICAgICAgOiBkYXRhWzBdLFxuXHRcdFx0YWJicnMgICAgICA6IG1hcEluZGljZXMoZGF0YVsxXS5zcGxpdCgnICcpLCBpbmRpY2VzKSxcblx0XHRcdG9mZnNldHMgICAgOiBtYXBJbmRpY2VzKG9mZnNldHMsIGluZGljZXMpLFxuXHRcdFx0dW50aWxzICAgICA6IHVudGlscyxcblx0XHRcdHBvcHVsYXRpb24gOiBkYXRhWzVdIHwgMFxuXHRcdH07XG5cdH1cblxuXHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cdFx0Wm9uZSBvYmplY3Rcblx0KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cdGZ1bmN0aW9uIFpvbmUgKHBhY2tlZFN0cmluZykge1xuXHRcdGlmIChwYWNrZWRTdHJpbmcpIHtcblx0XHRcdHRoaXMuX3NldCh1bnBhY2socGFja2VkU3RyaW5nKSk7XG5cdFx0fVxuXHR9XG5cblx0Wm9uZS5wcm90b3R5cGUgPSB7XG5cdFx0X3NldCA6IGZ1bmN0aW9uICh1bnBhY2tlZCkge1xuXHRcdFx0dGhpcy5uYW1lICAgICAgID0gdW5wYWNrZWQubmFtZTtcblx0XHRcdHRoaXMuYWJicnMgICAgICA9IHVucGFja2VkLmFiYnJzO1xuXHRcdFx0dGhpcy51bnRpbHMgICAgID0gdW5wYWNrZWQudW50aWxzO1xuXHRcdFx0dGhpcy5vZmZzZXRzICAgID0gdW5wYWNrZWQub2Zmc2V0cztcblx0XHRcdHRoaXMucG9wdWxhdGlvbiA9IHVucGFja2VkLnBvcHVsYXRpb247XG5cdFx0fSxcblxuXHRcdF9pbmRleCA6IGZ1bmN0aW9uICh0aW1lc3RhbXApIHtcblx0XHRcdHZhciB0YXJnZXQgPSArdGltZXN0YW1wLFxuXHRcdFx0XHR1bnRpbHMgPSB0aGlzLnVudGlscyxcblx0XHRcdFx0aTtcblxuXHRcdFx0Zm9yIChpID0gMDsgaSA8IHVudGlscy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAodGFyZ2V0IDwgdW50aWxzW2ldKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y291bnRyaWVzIDogZnVuY3Rpb24gKCkge1xuXHRcdFx0dmFyIHpvbmVfbmFtZSA9IHRoaXMubmFtZTtcblx0XHRcdHJldHVybiBPYmplY3Qua2V5cyhjb3VudHJpZXMpLmZpbHRlcihmdW5jdGlvbiAoY291bnRyeV9jb2RlKSB7XG5cdFx0XHRcdHJldHVybiBjb3VudHJpZXNbY291bnRyeV9jb2RlXS56b25lcy5pbmRleE9mKHpvbmVfbmFtZSkgIT09IC0xO1xuXHRcdFx0fSk7XG5cdFx0fSxcblxuXHRcdHBhcnNlIDogZnVuY3Rpb24gKHRpbWVzdGFtcCkge1xuXHRcdFx0dmFyIHRhcmdldCAgPSArdGltZXN0YW1wLFxuXHRcdFx0XHRvZmZzZXRzID0gdGhpcy5vZmZzZXRzLFxuXHRcdFx0XHR1bnRpbHMgID0gdGhpcy51bnRpbHMsXG5cdFx0XHRcdG1heCAgICAgPSB1bnRpbHMubGVuZ3RoIC0gMSxcblx0XHRcdFx0b2Zmc2V0LCBvZmZzZXROZXh0LCBvZmZzZXRQcmV2LCBpO1xuXG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgbWF4OyBpKyspIHtcblx0XHRcdFx0b2Zmc2V0ICAgICA9IG9mZnNldHNbaV07XG5cdFx0XHRcdG9mZnNldE5leHQgPSBvZmZzZXRzW2kgKyAxXTtcblx0XHRcdFx0b2Zmc2V0UHJldiA9IG9mZnNldHNbaSA/IGkgLSAxIDogaV07XG5cblx0XHRcdFx0aWYgKG9mZnNldCA8IG9mZnNldE5leHQgJiYgdHoubW92ZUFtYmlndW91c0ZvcndhcmQpIHtcblx0XHRcdFx0XHRvZmZzZXQgPSBvZmZzZXROZXh0O1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9mZnNldCA+IG9mZnNldFByZXYgJiYgdHoubW92ZUludmFsaWRGb3J3YXJkKSB7XG5cdFx0XHRcdFx0b2Zmc2V0ID0gb2Zmc2V0UHJldjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0YXJnZXQgPCB1bnRpbHNbaV0gLSAob2Zmc2V0ICogNjAwMDApKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9mZnNldHNbaV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG9mZnNldHNbbWF4XTtcblx0XHR9LFxuXG5cdFx0YWJiciA6IGZ1bmN0aW9uIChtb20pIHtcblx0XHRcdHJldHVybiB0aGlzLmFiYnJzW3RoaXMuX2luZGV4KG1vbSldO1xuXHRcdH0sXG5cblx0XHRvZmZzZXQgOiBmdW5jdGlvbiAobW9tKSB7XG5cdFx0XHRsb2dFcnJvcihcInpvbmUub2Zmc2V0IGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2Ygem9uZS51dGNPZmZzZXRcIik7XG5cdFx0XHRyZXR1cm4gdGhpcy5vZmZzZXRzW3RoaXMuX2luZGV4KG1vbSldO1xuXHRcdH0sXG5cblx0XHR1dGNPZmZzZXQgOiBmdW5jdGlvbiAobW9tKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5vZmZzZXRzW3RoaXMuX2luZGV4KG1vbSldO1xuXHRcdH1cblx0fTtcblxuXHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cdFx0Q291bnRyeSBvYmplY3Rcblx0KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cdGZ1bmN0aW9uIENvdW50cnkgKGNvdW50cnlfbmFtZSwgem9uZV9uYW1lcykge1xuXHRcdHRoaXMubmFtZSA9IGNvdW50cnlfbmFtZTtcblx0XHR0aGlzLnpvbmVzID0gem9uZV9uYW1lcztcblx0fVxuXG5cdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblx0XHRDdXJyZW50IFRpbWV6b25lXG5cdCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuXHRmdW5jdGlvbiBPZmZzZXRBdChhdCkge1xuXHRcdHZhciB0aW1lU3RyaW5nID0gYXQudG9UaW1lU3RyaW5nKCk7XG5cdFx0dmFyIGFiYnIgPSB0aW1lU3RyaW5nLm1hdGNoKC9cXChbYS16IF0rXFwpL2kpO1xuXHRcdGlmIChhYmJyICYmIGFiYnJbMF0pIHtcblx0XHRcdC8vIDE3OjU2OjMxIEdNVC0wNjAwIChDU1QpXG5cdFx0XHQvLyAxNzo1NjozMSBHTVQtMDYwMCAoQ2VudHJhbCBTdGFuZGFyZCBUaW1lKVxuXHRcdFx0YWJiciA9IGFiYnJbMF0ubWF0Y2goL1tBLVpdL2cpO1xuXHRcdFx0YWJiciA9IGFiYnIgPyBhYmJyLmpvaW4oJycpIDogdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyAxNzo1NjozMSBDU1Rcblx0XHRcdC8vIDE3OjU2OjMxIEdNVCswODAwICjlj7DljJfmqJnmupbmmYLplpMpXG5cdFx0XHRhYmJyID0gdGltZVN0cmluZy5tYXRjaCgvW0EtWl17Myw1fS9nKTtcblx0XHRcdGFiYnIgPSBhYmJyID8gYWJiclswXSA6IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRpZiAoYWJiciA9PT0gJ0dNVCcpIHtcblx0XHRcdGFiYnIgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0dGhpcy5hdCA9ICthdDtcblx0XHR0aGlzLmFiYnIgPSBhYmJyO1xuXHRcdHRoaXMub2Zmc2V0ID0gYXQuZ2V0VGltZXpvbmVPZmZzZXQoKTtcblx0fVxuXG5cdGZ1bmN0aW9uIFpvbmVTY29yZSh6b25lKSB7XG5cdFx0dGhpcy56b25lID0gem9uZTtcblx0XHR0aGlzLm9mZnNldFNjb3JlID0gMDtcblx0XHR0aGlzLmFiYnJTY29yZSA9IDA7XG5cdH1cblxuXHRab25lU2NvcmUucHJvdG90eXBlLnNjb3JlT2Zmc2V0QXQgPSBmdW5jdGlvbiAob2Zmc2V0QXQpIHtcblx0XHR0aGlzLm9mZnNldFNjb3JlICs9IE1hdGguYWJzKHRoaXMuem9uZS51dGNPZmZzZXQob2Zmc2V0QXQuYXQpIC0gb2Zmc2V0QXQub2Zmc2V0KTtcblx0XHRpZiAodGhpcy56b25lLmFiYnIob2Zmc2V0QXQuYXQpLnJlcGxhY2UoL1teQS1aXS9nLCAnJykgIT09IG9mZnNldEF0LmFiYnIpIHtcblx0XHRcdHRoaXMuYWJiclNjb3JlKys7XG5cdFx0fVxuXHR9O1xuXG5cdGZ1bmN0aW9uIGZpbmRDaGFuZ2UobG93LCBoaWdoKSB7XG5cdFx0dmFyIG1pZCwgZGlmZjtcblxuXHRcdHdoaWxlICgoZGlmZiA9ICgoaGlnaC5hdCAtIGxvdy5hdCkgLyAxMmU0IHwgMCkgKiA2ZTQpKSB7XG5cdFx0XHRtaWQgPSBuZXcgT2Zmc2V0QXQobmV3IERhdGUobG93LmF0ICsgZGlmZikpO1xuXHRcdFx0aWYgKG1pZC5vZmZzZXQgPT09IGxvdy5vZmZzZXQpIHtcblx0XHRcdFx0bG93ID0gbWlkO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aGlnaCA9IG1pZDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gbG93O1xuXHR9XG5cblx0ZnVuY3Rpb24gdXNlck9mZnNldHMoKSB7XG5cdFx0dmFyIHN0YXJ0WWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSAtIDIsXG5cdFx0XHRsYXN0ID0gbmV3IE9mZnNldEF0KG5ldyBEYXRlKHN0YXJ0WWVhciwgMCwgMSkpLFxuXHRcdFx0b2Zmc2V0cyA9IFtsYXN0XSxcblx0XHRcdGNoYW5nZSwgbmV4dCwgaTtcblxuXHRcdGZvciAoaSA9IDE7IGkgPCA0ODsgaSsrKSB7XG5cdFx0XHRuZXh0ID0gbmV3IE9mZnNldEF0KG5ldyBEYXRlKHN0YXJ0WWVhciwgaSwgMSkpO1xuXHRcdFx0aWYgKG5leHQub2Zmc2V0ICE9PSBsYXN0Lm9mZnNldCkge1xuXHRcdFx0XHRjaGFuZ2UgPSBmaW5kQ2hhbmdlKGxhc3QsIG5leHQpO1xuXHRcdFx0XHRvZmZzZXRzLnB1c2goY2hhbmdlKTtcblx0XHRcdFx0b2Zmc2V0cy5wdXNoKG5ldyBPZmZzZXRBdChuZXcgRGF0ZShjaGFuZ2UuYXQgKyA2ZTQpKSk7XG5cdFx0XHR9XG5cdFx0XHRsYXN0ID0gbmV4dDtcblx0XHR9XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7XG5cdFx0XHRvZmZzZXRzLnB1c2gobmV3IE9mZnNldEF0KG5ldyBEYXRlKHN0YXJ0WWVhciArIGksIDAsIDEpKSk7XG5cdFx0XHRvZmZzZXRzLnB1c2gobmV3IE9mZnNldEF0KG5ldyBEYXRlKHN0YXJ0WWVhciArIGksIDYsIDEpKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG9mZnNldHM7XG5cdH1cblxuXHRmdW5jdGlvbiBzb3J0Wm9uZVNjb3JlcyAoYSwgYikge1xuXHRcdGlmIChhLm9mZnNldFNjb3JlICE9PSBiLm9mZnNldFNjb3JlKSB7XG5cdFx0XHRyZXR1cm4gYS5vZmZzZXRTY29yZSAtIGIub2Zmc2V0U2NvcmU7XG5cdFx0fVxuXHRcdGlmIChhLmFiYnJTY29yZSAhPT0gYi5hYmJyU2NvcmUpIHtcblx0XHRcdHJldHVybiBhLmFiYnJTY29yZSAtIGIuYWJiclNjb3JlO1xuXHRcdH1cblx0XHRpZiAoYS56b25lLnBvcHVsYXRpb24gIT09IGIuem9uZS5wb3B1bGF0aW9uKSB7XG5cdFx0XHRyZXR1cm4gYi56b25lLnBvcHVsYXRpb24gLSBhLnpvbmUucG9wdWxhdGlvbjtcblx0XHR9XG5cdFx0cmV0dXJuIGIuem9uZS5uYW1lLmxvY2FsZUNvbXBhcmUoYS56b25lLm5hbWUpO1xuXHR9XG5cblx0ZnVuY3Rpb24gYWRkVG9HdWVzc2VzIChuYW1lLCBvZmZzZXRzKSB7XG5cdFx0dmFyIGksIG9mZnNldDtcblx0XHRhcnJheVRvSW50KG9mZnNldHMpO1xuXHRcdGZvciAoaSA9IDA7IGkgPCBvZmZzZXRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRvZmZzZXQgPSBvZmZzZXRzW2ldO1xuXHRcdFx0Z3Vlc3Nlc1tvZmZzZXRdID0gZ3Vlc3Nlc1tvZmZzZXRdIHx8IHt9O1xuXHRcdFx0Z3Vlc3Nlc1tvZmZzZXRdW25hbWVdID0gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBndWVzc2VzRm9yVXNlck9mZnNldHMgKG9mZnNldHMpIHtcblx0XHR2YXIgb2Zmc2V0c0xlbmd0aCA9IG9mZnNldHMubGVuZ3RoLFxuXHRcdFx0ZmlsdGVyZWRHdWVzc2VzID0ge30sXG5cdFx0XHRvdXQgPSBbXSxcblx0XHRcdGksIGosIGd1ZXNzZXNPZmZzZXQ7XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgb2Zmc2V0c0xlbmd0aDsgaSsrKSB7XG5cdFx0XHRndWVzc2VzT2Zmc2V0ID0gZ3Vlc3Nlc1tvZmZzZXRzW2ldLm9mZnNldF0gfHwge307XG5cdFx0XHRmb3IgKGogaW4gZ3Vlc3Nlc09mZnNldCkge1xuXHRcdFx0XHRpZiAoZ3Vlc3Nlc09mZnNldC5oYXNPd25Qcm9wZXJ0eShqKSkge1xuXHRcdFx0XHRcdGZpbHRlcmVkR3Vlc3Nlc1tqXSA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IgKGkgaW4gZmlsdGVyZWRHdWVzc2VzKSB7XG5cdFx0XHRpZiAoZmlsdGVyZWRHdWVzc2VzLmhhc093blByb3BlcnR5KGkpKSB7XG5cdFx0XHRcdG91dC5wdXNoKG5hbWVzW2ldKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gb3V0O1xuXHR9XG5cblx0ZnVuY3Rpb24gcmVidWlsZEd1ZXNzICgpIHtcblxuXHRcdC8vIHVzZSBJbnRsIEFQSSB3aGVuIGF2YWlsYWJsZSBhbmQgcmV0dXJuaW5nIHZhbGlkIHRpbWUgem9uZVxuXHRcdHRyeSB7XG5cdFx0XHR2YXIgaW50bE5hbWUgPSBJbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkudGltZVpvbmU7XG5cdFx0XHRpZiAoaW50bE5hbWUgJiYgaW50bE5hbWUubGVuZ3RoID4gMykge1xuXHRcdFx0XHR2YXIgbmFtZSA9IG5hbWVzW25vcm1hbGl6ZU5hbWUoaW50bE5hbWUpXTtcblx0XHRcdFx0aWYgKG5hbWUpIHtcblx0XHRcdFx0XHRyZXR1cm4gbmFtZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRsb2dFcnJvcihcIk1vbWVudCBUaW1lem9uZSBmb3VuZCBcIiArIGludGxOYW1lICsgXCIgZnJvbSB0aGUgSW50bCBhcGksIGJ1dCBkaWQgbm90IGhhdmUgdGhhdCBkYXRhIGxvYWRlZC5cIik7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0Ly8gSW50bCB1bmF2YWlsYWJsZSwgZmFsbCBiYWNrIHRvIG1hbnVhbCBndWVzc2luZy5cblx0XHR9XG5cblx0XHR2YXIgb2Zmc2V0cyA9IHVzZXJPZmZzZXRzKCksXG5cdFx0XHRvZmZzZXRzTGVuZ3RoID0gb2Zmc2V0cy5sZW5ndGgsXG5cdFx0XHRndWVzc2VzID0gZ3Vlc3Nlc0ZvclVzZXJPZmZzZXRzKG9mZnNldHMpLFxuXHRcdFx0em9uZVNjb3JlcyA9IFtdLFxuXHRcdFx0em9uZVNjb3JlLCBpLCBqO1xuXG5cdFx0Zm9yIChpID0gMDsgaSA8IGd1ZXNzZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHpvbmVTY29yZSA9IG5ldyBab25lU2NvcmUoZ2V0Wm9uZShndWVzc2VzW2ldKSwgb2Zmc2V0c0xlbmd0aCk7XG5cdFx0XHRmb3IgKGogPSAwOyBqIDwgb2Zmc2V0c0xlbmd0aDsgaisrKSB7XG5cdFx0XHRcdHpvbmVTY29yZS5zY29yZU9mZnNldEF0KG9mZnNldHNbal0pO1xuXHRcdFx0fVxuXHRcdFx0em9uZVNjb3Jlcy5wdXNoKHpvbmVTY29yZSk7XG5cdFx0fVxuXG5cdFx0em9uZVNjb3Jlcy5zb3J0KHNvcnRab25lU2NvcmVzKTtcblxuXHRcdHJldHVybiB6b25lU2NvcmVzLmxlbmd0aCA+IDAgPyB6b25lU2NvcmVzWzBdLnpvbmUubmFtZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdGZ1bmN0aW9uIGd1ZXNzIChpZ25vcmVDYWNoZSkge1xuXHRcdGlmICghY2FjaGVkR3Vlc3MgfHwgaWdub3JlQ2FjaGUpIHtcblx0XHRcdGNhY2hlZEd1ZXNzID0gcmVidWlsZEd1ZXNzKCk7XG5cdFx0fVxuXHRcdHJldHVybiBjYWNoZWRHdWVzcztcblx0fVxuXG5cdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblx0XHRHbG9iYWwgTWV0aG9kc1xuXHQqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cblx0ZnVuY3Rpb24gbm9ybWFsaXplTmFtZSAobmFtZSkge1xuXHRcdHJldHVybiAobmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXC8vZywgJ18nKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGFkZFpvbmUgKHBhY2tlZCkge1xuXHRcdHZhciBpLCBuYW1lLCBzcGxpdCwgbm9ybWFsaXplZDtcblxuXHRcdGlmICh0eXBlb2YgcGFja2VkID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRwYWNrZWQgPSBbcGFja2VkXTtcblx0XHR9XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgcGFja2VkLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRzcGxpdCA9IHBhY2tlZFtpXS5zcGxpdCgnfCcpO1xuXHRcdFx0bmFtZSA9IHNwbGl0WzBdO1xuXHRcdFx0bm9ybWFsaXplZCA9IG5vcm1hbGl6ZU5hbWUobmFtZSk7XG5cdFx0XHR6b25lc1tub3JtYWxpemVkXSA9IHBhY2tlZFtpXTtcblx0XHRcdG5hbWVzW25vcm1hbGl6ZWRdID0gbmFtZTtcblx0XHRcdGFkZFRvR3Vlc3Nlcyhub3JtYWxpemVkLCBzcGxpdFsyXS5zcGxpdCgnICcpKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRab25lIChuYW1lLCBjYWxsZXIpIHtcblxuXHRcdG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpO1xuXG5cdFx0dmFyIHpvbmUgPSB6b25lc1tuYW1lXTtcblx0XHR2YXIgbGluaztcblxuXHRcdGlmICh6b25lIGluc3RhbmNlb2YgWm9uZSkge1xuXHRcdFx0cmV0dXJuIHpvbmU7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiB6b25lID09PSAnc3RyaW5nJykge1xuXHRcdFx0em9uZSA9IG5ldyBab25lKHpvbmUpO1xuXHRcdFx0em9uZXNbbmFtZV0gPSB6b25lO1xuXHRcdFx0cmV0dXJuIHpvbmU7XG5cdFx0fVxuXG5cdFx0Ly8gUGFzcyBnZXRab25lIHRvIHByZXZlbnQgcmVjdXJzaW9uIG1vcmUgdGhhbiAxIGxldmVsIGRlZXBcblx0XHRpZiAobGlua3NbbmFtZV0gJiYgY2FsbGVyICE9PSBnZXRab25lICYmIChsaW5rID0gZ2V0Wm9uZShsaW5rc1tuYW1lXSwgZ2V0Wm9uZSkpKSB7XG5cdFx0XHR6b25lID0gem9uZXNbbmFtZV0gPSBuZXcgWm9uZSgpO1xuXHRcdFx0em9uZS5fc2V0KGxpbmspO1xuXHRcdFx0em9uZS5uYW1lID0gbmFtZXNbbmFtZV07XG5cdFx0XHRyZXR1cm4gem9uZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGZ1bmN0aW9uIGdldE5hbWVzICgpIHtcblx0XHR2YXIgaSwgb3V0ID0gW107XG5cblx0XHRmb3IgKGkgaW4gbmFtZXMpIHtcblx0XHRcdGlmIChuYW1lcy5oYXNPd25Qcm9wZXJ0eShpKSAmJiAoem9uZXNbaV0gfHwgem9uZXNbbGlua3NbaV1dKSAmJiBuYW1lc1tpXSkge1xuXHRcdFx0XHRvdXQucHVzaChuYW1lc1tpXSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG91dC5zb3J0KCk7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRDb3VudHJ5TmFtZXMgKCkge1xuXHRcdHJldHVybiBPYmplY3Qua2V5cyhjb3VudHJpZXMpO1xuXHR9XG5cblx0ZnVuY3Rpb24gYWRkTGluayAoYWxpYXNlcykge1xuXHRcdHZhciBpLCBhbGlhcywgbm9ybWFsMCwgbm9ybWFsMTtcblxuXHRcdGlmICh0eXBlb2YgYWxpYXNlcyA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0YWxpYXNlcyA9IFthbGlhc2VzXTtcblx0XHR9XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgYWxpYXNlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0YWxpYXMgPSBhbGlhc2VzW2ldLnNwbGl0KCd8Jyk7XG5cblx0XHRcdG5vcm1hbDAgPSBub3JtYWxpemVOYW1lKGFsaWFzWzBdKTtcblx0XHRcdG5vcm1hbDEgPSBub3JtYWxpemVOYW1lKGFsaWFzWzFdKTtcblxuXHRcdFx0bGlua3Nbbm9ybWFsMF0gPSBub3JtYWwxO1xuXHRcdFx0bmFtZXNbbm9ybWFsMF0gPSBhbGlhc1swXTtcblxuXHRcdFx0bGlua3Nbbm9ybWFsMV0gPSBub3JtYWwwO1xuXHRcdFx0bmFtZXNbbm9ybWFsMV0gPSBhbGlhc1sxXTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBhZGRDb3VudHJpZXMgKGRhdGEpIHtcblx0XHR2YXIgaSwgY291bnRyeV9jb2RlLCBjb3VudHJ5X3pvbmVzLCBzcGxpdDtcblx0XHRpZiAoIWRhdGEgfHwgIWRhdGEubGVuZ3RoKSByZXR1cm47XG5cdFx0Zm9yIChpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcblx0XHRcdHNwbGl0ID0gZGF0YVtpXS5zcGxpdCgnfCcpO1xuXHRcdFx0Y291bnRyeV9jb2RlID0gc3BsaXRbMF0udG9VcHBlckNhc2UoKTtcblx0XHRcdGNvdW50cnlfem9uZXMgPSBzcGxpdFsxXS5zcGxpdCgnICcpO1xuXHRcdFx0Y291bnRyaWVzW2NvdW50cnlfY29kZV0gPSBuZXcgQ291bnRyeShcblx0XHRcdFx0Y291bnRyeV9jb2RlLFxuXHRcdFx0XHRjb3VudHJ5X3pvbmVzXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGdldENvdW50cnkgKG5hbWUpIHtcblx0XHRuYW1lID0gbmFtZS50b1VwcGVyQ2FzZSgpO1xuXHRcdHJldHVybiBjb3VudHJpZXNbbmFtZV0gfHwgbnVsbDtcblx0fVxuXG5cdGZ1bmN0aW9uIHpvbmVzRm9yQ291bnRyeShjb3VudHJ5LCB3aXRoX29mZnNldCkge1xuXHRcdGNvdW50cnkgPSBnZXRDb3VudHJ5KGNvdW50cnkpO1xuXG5cdFx0aWYgKCFjb3VudHJ5KSByZXR1cm4gbnVsbDtcblxuXHRcdHZhciB6b25lcyA9IGNvdW50cnkuem9uZXMuc29ydCgpO1xuXG5cdFx0aWYgKHdpdGhfb2Zmc2V0KSB7XG5cdFx0XHRyZXR1cm4gem9uZXMubWFwKGZ1bmN0aW9uICh6b25lX25hbWUpIHtcblx0XHRcdFx0dmFyIHpvbmUgPSBnZXRab25lKHpvbmVfbmFtZSk7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0bmFtZTogem9uZV9uYW1lLFxuXHRcdFx0XHRcdG9mZnNldDogem9uZS51dGNPZmZzZXQobmV3IERhdGUoKSlcblx0XHRcdFx0fTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiB6b25lcztcblx0fVxuXG5cdGZ1bmN0aW9uIGxvYWREYXRhIChkYXRhKSB7XG5cdFx0YWRkWm9uZShkYXRhLnpvbmVzKTtcblx0XHRhZGRMaW5rKGRhdGEubGlua3MpO1xuXHRcdGFkZENvdW50cmllcyhkYXRhLmNvdW50cmllcyk7XG5cdFx0dHouZGF0YVZlcnNpb24gPSBkYXRhLnZlcnNpb247XG5cdH1cblxuXHRmdW5jdGlvbiB6b25lRXhpc3RzIChuYW1lKSB7XG5cdFx0aWYgKCF6b25lRXhpc3RzLmRpZFNob3dFcnJvcikge1xuXHRcdFx0em9uZUV4aXN0cy5kaWRTaG93RXJyb3IgPSB0cnVlO1xuXHRcdFx0XHRsb2dFcnJvcihcIm1vbWVudC50ei56b25lRXhpc3RzKCdcIiArIG5hbWUgKyBcIicpIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgIW1vbWVudC50ei56b25lKCdcIiArIG5hbWUgKyBcIicpXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gISFnZXRab25lKG5hbWUpO1xuXHR9XG5cblx0ZnVuY3Rpb24gbmVlZHNPZmZzZXQgKG0pIHtcblx0XHR2YXIgaXNVbml4VGltZXN0YW1wID0gKG0uX2YgPT09ICdYJyB8fCBtLl9mID09PSAneCcpO1xuXHRcdHJldHVybiAhIShtLl9hICYmIChtLl90em0gPT09IHVuZGVmaW5lZCkgJiYgIWlzVW5peFRpbWVzdGFtcCk7XG5cdH1cblxuXHRmdW5jdGlvbiBsb2dFcnJvciAobWVzc2FnZSkge1xuXHRcdGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXHRcdG1vbWVudC50eiBuYW1lc3BhY2Vcblx0KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cdGZ1bmN0aW9uIHR6IChpbnB1dCkge1xuXHRcdHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwLCAtMSksXG5cdFx0XHRuYW1lID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXSxcblx0XHRcdHpvbmUgPSBnZXRab25lKG5hbWUpLFxuXHRcdFx0b3V0ICA9IG1vbWVudC51dGMuYXBwbHkobnVsbCwgYXJncyk7XG5cblx0XHRpZiAoem9uZSAmJiAhbW9tZW50LmlzTW9tZW50KGlucHV0KSAmJiBuZWVkc09mZnNldChvdXQpKSB7XG5cdFx0XHRvdXQuYWRkKHpvbmUucGFyc2Uob3V0KSwgJ21pbnV0ZXMnKTtcblx0XHR9XG5cblx0XHRvdXQudHoobmFtZSk7XG5cblx0XHRyZXR1cm4gb3V0O1xuXHR9XG5cblx0dHoudmVyc2lvbiAgICAgID0gVkVSU0lPTjtcblx0dHouZGF0YVZlcnNpb24gID0gJyc7XG5cdHR6Ll96b25lcyAgICAgICA9IHpvbmVzO1xuXHR0ei5fbGlua3MgICAgICAgPSBsaW5rcztcblx0dHouX25hbWVzICAgICAgID0gbmFtZXM7XG5cdHR6Ll9jb3VudHJpZXNcdD0gY291bnRyaWVzO1xuXHR0ei5hZGQgICAgICAgICAgPSBhZGRab25lO1xuXHR0ei5saW5rICAgICAgICAgPSBhZGRMaW5rO1xuXHR0ei5sb2FkICAgICAgICAgPSBsb2FkRGF0YTtcblx0dHouem9uZSAgICAgICAgID0gZ2V0Wm9uZTtcblx0dHouem9uZUV4aXN0cyAgID0gem9uZUV4aXN0czsgLy8gZGVwcmVjYXRlZCBpbiAwLjEuMFxuXHR0ei5ndWVzcyAgICAgICAgPSBndWVzcztcblx0dHoubmFtZXMgICAgICAgID0gZ2V0TmFtZXM7XG5cdHR6LlpvbmUgICAgICAgICA9IFpvbmU7XG5cdHR6LnVucGFjayAgICAgICA9IHVucGFjaztcblx0dHoudW5wYWNrQmFzZTYwID0gdW5wYWNrQmFzZTYwO1xuXHR0ei5uZWVkc09mZnNldCAgPSBuZWVkc09mZnNldDtcblx0dHoubW92ZUludmFsaWRGb3J3YXJkICAgPSB0cnVlO1xuXHR0ei5tb3ZlQW1iaWd1b3VzRm9yd2FyZCA9IGZhbHNlO1xuXHR0ei5jb3VudHJpZXMgICAgPSBnZXRDb3VudHJ5TmFtZXM7XG5cdHR6LnpvbmVzRm9yQ291bnRyeSA9IHpvbmVzRm9yQ291bnRyeTtcblxuXHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cdFx0SW50ZXJmYWNlIHdpdGggTW9tZW50LmpzXG5cdCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuXHR2YXIgZm4gPSBtb21lbnQuZm47XG5cblx0bW9tZW50LnR6ID0gdHo7XG5cblx0bW9tZW50LmRlZmF1bHRab25lID0gbnVsbDtcblxuXHRtb21lbnQudXBkYXRlT2Zmc2V0ID0gZnVuY3Rpb24gKG1vbSwga2VlcFRpbWUpIHtcblx0XHR2YXIgem9uZSA9IG1vbWVudC5kZWZhdWx0Wm9uZSxcblx0XHRcdG9mZnNldDtcblxuXHRcdGlmIChtb20uX3ogPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKHpvbmUgJiYgbmVlZHNPZmZzZXQobW9tKSAmJiAhbW9tLl9pc1VUQykge1xuXHRcdFx0XHRtb20uX2QgPSBtb21lbnQudXRjKG1vbS5fYSkuX2Q7XG5cdFx0XHRcdG1vbS51dGMoKS5hZGQoem9uZS5wYXJzZShtb20pLCAnbWludXRlcycpO1xuXHRcdFx0fVxuXHRcdFx0bW9tLl96ID0gem9uZTtcblx0XHR9XG5cdFx0aWYgKG1vbS5feikge1xuXHRcdFx0b2Zmc2V0ID0gbW9tLl96LnV0Y09mZnNldChtb20pO1xuXHRcdFx0aWYgKE1hdGguYWJzKG9mZnNldCkgPCAxNikge1xuXHRcdFx0XHRvZmZzZXQgPSBvZmZzZXQgLyA2MDtcblx0XHRcdH1cblx0XHRcdGlmIChtb20udXRjT2Zmc2V0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dmFyIHogPSBtb20uX3o7XG5cdFx0XHRcdG1vbS51dGNPZmZzZXQoLW9mZnNldCwga2VlcFRpbWUpO1xuXHRcdFx0XHRtb20uX3ogPSB6O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bW9tLnpvbmUob2Zmc2V0LCBrZWVwVGltZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdGZuLnR6ID0gZnVuY3Rpb24gKG5hbWUsIGtlZXBUaW1lKSB7XG5cdFx0aWYgKG5hbWUpIHtcblx0XHRcdGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdUaW1lIHpvbmUgbmFtZSBtdXN0IGJlIGEgc3RyaW5nLCBnb3QgJyArIG5hbWUgKyAnIFsnICsgdHlwZW9mIG5hbWUgKyAnXScpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5feiA9IGdldFpvbmUobmFtZSk7XG5cdFx0XHRpZiAodGhpcy5feikge1xuXHRcdFx0XHRtb21lbnQudXBkYXRlT2Zmc2V0KHRoaXMsIGtlZXBUaW1lKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGxvZ0Vycm9yKFwiTW9tZW50IFRpbWV6b25lIGhhcyBubyBkYXRhIGZvciBcIiArIG5hbWUgKyBcIi4gU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vdGltZXpvbmUvZG9jcy8jL2RhdGEtbG9hZGluZy8uXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmICh0aGlzLl96KSB7IHJldHVybiB0aGlzLl96Lm5hbWU7IH1cblx0fTtcblxuXHRmdW5jdGlvbiBhYmJyV3JhcCAob2xkKSB7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uICgpIHtcblx0XHRcdGlmICh0aGlzLl96KSB7IHJldHVybiB0aGlzLl96LmFiYnIodGhpcyk7IH1cblx0XHRcdHJldHVybiBvbGQuY2FsbCh0aGlzKTtcblx0XHR9O1xuXHR9XG5cblx0ZnVuY3Rpb24gcmVzZXRab25lV3JhcCAob2xkKSB7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uICgpIHtcblx0XHRcdHRoaXMuX3ogPSBudWxsO1xuXHRcdFx0cmV0dXJuIG9sZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHRcdH07XG5cdH1cblxuXHRmdW5jdGlvbiByZXNldFpvbmVXcmFwMiAob2xkKSB7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uICgpIHtcblx0XHRcdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMCkgdGhpcy5feiA9IG51bGw7XG5cdFx0XHRyZXR1cm4gb2xkLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdFx0fTtcblx0fVxuXG5cdGZuLnpvbmVOYW1lICA9IGFiYnJXcmFwKGZuLnpvbmVOYW1lKTtcblx0Zm4uem9uZUFiYnIgID0gYWJicldyYXAoZm4uem9uZUFiYnIpO1xuXHRmbi51dGMgICAgICAgPSByZXNldFpvbmVXcmFwKGZuLnV0Yyk7XG5cdGZuLmxvY2FsICAgICA9IHJlc2V0Wm9uZVdyYXAoZm4ubG9jYWwpO1xuXHRmbi51dGNPZmZzZXQgPSByZXNldFpvbmVXcmFwMihmbi51dGNPZmZzZXQpO1xuXG5cdG1vbWVudC50ei5zZXREZWZhdWx0ID0gZnVuY3Rpb24obmFtZSkge1xuXHRcdGlmIChtYWpvciA8IDIgfHwgKG1ham9yID09PSAyICYmIG1pbm9yIDwgOSkpIHtcblx0XHRcdGxvZ0Vycm9yKCdNb21lbnQgVGltZXpvbmUgc2V0RGVmYXVsdCgpIHJlcXVpcmVzIE1vbWVudC5qcyA+PSAyLjkuMC4gWW91IGFyZSB1c2luZyBNb21lbnQuanMgJyArIG1vbWVudC52ZXJzaW9uICsgJy4nKTtcblx0XHR9XG5cdFx0bW9tZW50LmRlZmF1bHRab25lID0gbmFtZSA/IGdldFpvbmUobmFtZSkgOiBudWxsO1xuXHRcdHJldHVybiBtb21lbnQ7XG5cdH07XG5cblx0Ly8gQ2xvbmluZyBhIG1vbWVudCBzaG91bGQgaW5jbHVkZSB0aGUgX3ogcHJvcGVydHkuXG5cdHZhciBtb21lbnRQcm9wZXJ0aWVzID0gbW9tZW50Lm1vbWVudFByb3BlcnRpZXM7XG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobW9tZW50UHJvcGVydGllcykgPT09ICdbb2JqZWN0IEFycmF5XScpIHtcblx0XHQvLyBtb21lbnQgMi44LjErXG5cdFx0bW9tZW50UHJvcGVydGllcy5wdXNoKCdfeicpO1xuXHRcdG1vbWVudFByb3BlcnRpZXMucHVzaCgnX2EnKTtcblx0fSBlbHNlIGlmIChtb21lbnRQcm9wZXJ0aWVzKSB7XG5cdFx0Ly8gbW9tZW50IDIuNy4wXG5cdFx0bW9tZW50UHJvcGVydGllcy5feiA9IG51bGw7XG5cdH1cblxuXHQvLyBJTkpFQ1QgREFUQVxuXG5cdHJldHVybiBtb21lbnQ7XG59KSk7XG4iLCJ2YXIgbW9tZW50ID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi9tb21lbnQtdGltZXpvbmVcIik7XG5tb21lbnQudHoubG9hZChyZXF1aXJlKCcuL2RhdGEvcGFja2VkL2xhdGVzdC5qc29uJykpO1xuIiwiY29uc3QgdHJhbnNsYXRpb25zID0ge1xuICBkZToge1xuICAgIGFkZHJlc3M6ICdBZHJlc3NlJyxcbiAgICAnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcyc6ICdBZHJlc3MsIE9ydCBvciBHZXNjaMOkZnQnLFxuICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdGw7xnZSBad2lzY2hlbnppZWwgaGluenUnLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6ICdTZXQgc3RvcCBkdXJhdGlvbiBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgJ0Nsb3NlIHN0b3AgZHVyYXRpb24gc2VsZWN0b3IgYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgJ09wZW4gc3RvcCBkdXJhdGlvbiBzZWxlY3RvciBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICBhaXJwbGFuZTogJ0ZsdWcnLFxuICAgIGFycml2YWw6ICdBbmt1bmZ0JyxcbiAgICBiYWNrOiAnWnVyw7xjaycsXG4gICAgYmlrZXJlbnRhbHN0YXRpb246ICdMZWlocmFkLVN0YXRpb24nLFxuICAgIGJ1czogJ0J1cycsXG4gICAgY2FuY2VsOiAnQWJicmVjaGVuJyxcbiAgICAnY2xlYXItYnV0dG9uLWxhYmVsJzogJ0zDtnNjaGVuJyxcbiAgICAnY2xlYXItc2VhcmNoLWhpc3RvcnknOiAnU3VjaGhpc3RvcmllIGzDtnNjaGVuJyxcbiAgICBjdXJyZW50cG9zaXRpb246ICdBa3R1ZWxsZSBQb3NpdGlvbicsXG4gICAgZGVsZXRlOiAnTMO2c2NoZW4nLFxuICAgICdkZWxldGUtb2xkLXNlYXJjaGVzLWhlYWRlcic6ICdXb2xsZW4gU2llIGRpZSBTdWNoLUhpc3RvcmllIGzDtnNjaGVuPycsXG4gICAgZGVwYXJ0dXJlOiAnQWJmYWhydCcsXG4gICAgZGVzdGluYXRpb246ICdaaWVsJyxcbiAgICAnZ2l2ZS1vcmlnaW4nOiAnU3RhcnQgZWluZ2ViZW4uJyxcbiAgICAnZ2l2ZS1kZXN0aW5hdGlvbic6ICdaaWVsIGVpbmdlYmVuLicsXG4gICAgZmF2b3VyaXRlOiAnRmF2b3JpdGVuJyxcbiAgICBmZXJyeTogJ0bDpGhyZScsXG4gICAgJ2Z1dHVyZS1yb3V0ZSc6ICdadWvDvG5mdGlnZSBWZXJiaW5kdW5nJyxcbiAgICBvcmlnaW46ICdTdGFydCcsXG4gICAgJ29yaWdpbi1zdG9wLW5lYXIteW91JzogJ1N0YXJ0JyxcbiAgICBvd25sb2NhdGlvbnM6ICdFaWdlbmUgRmF2b3JpdGVuJyxcbiAgICBsb2FkaW5nOiAnTGFkZW4uLi4nLFxuICAgICdtaW51dGUtc2hvcnQnOiAnbWluJyxcbiAgICByYWlsOiAnWnVnJyxcbiAgICBzZWFyY2g6ICdTdWNoZScsXG4gICAgJ3NlYXJjaC1hZGRyZXNzLW9yLXBsYWNlJzogJ1N1Y2hlIGFuaGFuZCB2b24gQWRyZXNzZSBvZGVyIE9ydHNhbmdhYmUnLFxuICAgICdzZWFyY2gtYnV0dG9uLWxhYmVsJzogJ1N1Y2hlJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uJzogJ1N1Y2hlIFppZWxvcnQsIExpbmllIG9yIEhhbHRlc3RlbGxlJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLWluZGV4JzogJ1ppZWxvcnQgZWluZ2ViZW4nLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24tcmVzdWx0cy1idXQtbm8tc2VhcmNoJzpcbiAgICAgICdFcmdlYm5pc3NlIGluIOKAnFppZWxvcnTigJ0tUmVpdGVyIGFuemVpZ2VuJyxcbiAgICAnc2VhcmNoLW5vLXJlc3VsdHMnOiAnS2VpbiBPcnQgZ2VmdW5kZW4uJyxcbiAgICAnc2VhcmNoLW9yaWdpbic6ICdTdWNoZSBTdGFydG9ydCwgTGluaWUgb2RlciBIYWx0ZXN0ZWxsZScsXG4gICAgJ3NlYXJjaC1vcmlnaW4taW5kZXgnOiAnU3RhcnRvcnQgZWluZ2ViZW4nLFxuICAgICdzZWFyY2gtcG9zaXRpb24nOiAnU3RhbmRvcnQgZXJtaXR0ZWxuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWRlc2t0b3AnOlxuICAgICAgJ1ZlbnVlLCBwbGFjZSBhbmQgc3RvcHNlYXJjaC4gTmF2aWdhdGUgbGlzdCB3aXRoIGFycm93IGtleXMgYW5kIHNlbGVjdCB3aXRoIGVudGVyIGtleScsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb2JpbGUnOiAnVmVudWUsIHBsYWNlIGFuZCBzdG9wc2VhcmNoLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nOiAnVGhlcmUgaXMge3tjb3VudH19IHN1Z2dlc3Rpb24gYXZhaWxhYmxlJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbl9wbHVyYWwnOlxuICAgICAgJ1RoZXJlIGFyZSB7e2NvdW50fX0gc3VnZ2VzdGlvbnMgYXZhaWxhYmxlJyxcbiAgICAnc2VhcmNoLWN1cnJlbnQtc3VnZ2VzdGlvbic6ICdBa3R1ZWxsZSBBdXN3YWhsOiB7e3NlbGVjdGlvbn19JyxcbiAgICBzdHJlZXQ6ICdTdHJhw59lJyxcbiAgICBzdWJ3YXk6ICdVLUJhaG4nLFxuICAgIHN0YXRpb246ICdTdGF0aW9uJyxcbiAgICBzdG9wOiAnSGFsdGVzdGVsbGUnLFxuICAgICdzdG9wLW5lYXIteW91JzogJ1N1Y2hlIEhhbHRlc3RlbGxlbiB1bmQgTGluaWVuIGluIGRlciBOw6RoZScsXG4gICAgJ3N0b3AtbmVhci15b3UtYnVzJzogJ1N1Y2hlIEJ1c2xpbmllbiBvciBIYWx0ZXN0ZWxsZW4nLFxuICAgICdzdG9wLW5lYXIteW91LWNpdHliaWtlJzogJ1N1Y2hlIExlaWhyYWQtU3RhdGlvbmVuJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1yYWlsJzogJ1N1Y2hlIFp1Z3ZlcmJpbmR1bmdlbiBvZGVyIEJhaG5ow7ZmZScsXG4gICAgJ3N0b3AtbmVhci15b3Utc3Vid2F5JzogJ1N1Y2hlIFUtQmFobi1MaW5pZW4gb2RlciBIYWx0ZXN0ZWxsZW4nLFxuICAgICdzdG9wLW5lYXIteW91LXRyYW0nOiAnU3VjaGUgU3RhZHRiYWhuLUhhbHRlc3RlbGxlbi1TdWNoZScsXG4gICAgJ3RvZGF5LWF0JzogJ0hldXRlIHVtJyxcbiAgICAndG9tb3Jyb3ctYXQnOiAnTW9yZ2VuIHVtJyxcbiAgICB0cmFtOiAnU3RyYcOfZW5iYWhuJyxcbiAgICAndXNlLW93bi1wb3NpdGlvbic6ICdCZW51dHplIGFrdHVlbGxlbiBTdGFuZG9ydCcsXG4gICAgJ3NlbGVjdC1mcm9tLW1hcCc6ICdXw6RobGUgUG9zaXRpb24gYW5oYW5kIEthcnRlJyxcbiAgICAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucyc6ICdBdXMgZWlnZW5lbiBGYXZvcml0ZW4gYXVzd8OkaGxlbicsXG4gICAgdmVudWU6ICdWZW51ZScsXG4gICAgJ3ZpYS1wb2ludCc6ICdad2lzY2hlbnppZWwnLFxuICAgIHdoZXJlOiAnV29oaW4/JyxcbiAgICBwbGFjZTogJ09ydCcsXG4gIH0sXG4gIGVuOiB7XG4gICAgYWRkcmVzczogJ0FkZHJlc3MnLFxuICAgICdhZGRyZXNzLXBsYWNlLW9yLWJ1c2luZXNzJzogJ0FkZHJlc3MsIHBsYWNlIG9yIGJ1c2luZXNzJyxcbiAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnQWRkIHZpYSBwb2ludCcsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzogJ1NldCBzdG9wIGR1cmF0aW9uIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAnQ2xvc2Ugc3RvcCBkdXJhdGlvbiBzZWxlY3RvciBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAnT3BlbiBzdG9wIGR1cmF0aW9uIHNlbGVjdG9yIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgIGFpcnBsYW5lOiAnRmxpZ2h0JyxcbiAgICBhcnJpdmFsOiAnQXJyaXZhbCcsXG4gICAgYmFjazogJ0JhY2snLFxuICAgIGJpa2VwYXJrOiAnUGFyayAmIFJpZGUgZm9yIGJpa2VzJyxcbiAgICBiaWtlcmVudGFsc3RhdGlvbjogJ0Jpa2Ugc3RhdGlvbicsXG4gICAgYnVzOiAnYnVzJyxcbiAgICBjYW5jZWw6ICdDYW5jZWwnLFxuICAgIGNhcnBhcms6ICdQYXJrICYgUmlkZScsXG4gICAgJ2NsZWFyLWJ1dHRvbi1sYWJlbCc6ICdDbGVhcicsXG4gICAgJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JzogJ0NsZWFyIHNlYXJjaCBoaXN0b3J5JyxcbiAgICBjdXJyZW50cG9zaXRpb246ICdDdXJyZW50IHBvc2l0aW9uJyxcbiAgICBkZWxldGU6ICdEZWxldGUnLFxuICAgICdkZWxldGUtb2xkLXNlYXJjaGVzLWhlYWRlcic6ICdEbyB5b3Ugd2FudCB0byBjbGVhciB0aGUgc2VhcmNoIGhpc3Rvcnk/JyxcbiAgICBkZXBhcnR1cmU6ICdEZXBhcnR1cmUnLFxuICAgIGRlc3RpbmF0aW9uOiAnRGVzdGluYXRpb24nLFxuICAgICdnaXZlLW9yaWdpbic6ICdFbnRlciB5b3VyIG9yaWdpbi4nLFxuICAgICdnaXZlLWRlc3RpbmF0aW9uJzogJ0VudGVyIHlvdXIgZGVzdGluYXRpb24nLFxuICAgIGZhdm91cml0ZTogJ0Zhdm91cml0ZScsXG4gICAgZmVycnk6ICdGZXJyeScsXG4gICAgJ2Z1dHVyZS1yb3V0ZSc6ICdGdXR1cmUgcm91dGUnLFxuICAgIG9yaWdpbjogJ1N0YXJ0JyxcbiAgICAnb3JpZ2luLXN0b3AtbmVhci15b3UnOiAnU3RhcnQnLFxuICAgIG93bmxvY2F0aW9uczogJ093biBsb2NhdGlvbnMnLFxuICAgIGxvYWRpbmc6ICdMb2FkaW5nLi4uJyxcbiAgICAnbWludXRlLXNob3J0JzogJ20nLFxuICAgIHBsYXRmb3JtOiAnUGxhdGZvcm0nLFxuICAgIHJhaWw6ICdUcmFpbicsXG4gICAgcmVxdWlyZWQ6ICdyZXF1aXJlZCBmaWVsZCcsXG4gICAgc2VhcmNoOiAnU2VhcmNoJyxcbiAgICAnc2VhcmNoLWFkZHJlc3Mtb3ItcGxhY2UnOiAnU2VhcmNoIGJ5IGFkZHJlc3Mgb3IgcGxhY2UgbmFtZScsXG4gICAgJ3NlYXJjaC1idXR0b24tbGFiZWwnOiAnU2VhcmNoJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uJzogJ1NlYXJjaCBkZXN0aW5hdGlvbiwgcm91dGUgb3Igc3RvcCcsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1pbmRleCc6ICdFbnRlciBkZXN0aW5hdGlvbicsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1yZXN1bHRzLWJ1dC1uby1zZWFyY2gnOlxuICAgICAgJ1ZpZXcgcmVzdWx0cyBpbiB0aGUgYWRqYWNlbnQg4oCcRGVzdGluYXRpb27igJ0gdGFiJyxcbiAgICAnc2VhcmNoLW5vLXJlc3VsdHMnOiAnTm8gbG9jYXRpb24nLFxuICAgICdzZWFyY2gtb3JpZ2luJzogJ1NlYXJjaCBvcmlnaW4sIHJvdXRlIG9yIHN0b3AnLFxuICAgICdzZWFyY2gtb3JpZ2luLWluZGV4JzogJ0VudGVyIG9yaWdpbicsXG4gICAgJ3NlYXJjaC1wb3NpdGlvbic6ICdEZXRlY3QgbG9jYXRpb24nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtZGVza3RvcCc6XG4gICAgICAnVmVudWUsIHBsYWNlIGFuZCBzdG9wc2VhcmNoLiBOYXZpZ2F0ZSBsaXN0IHdpdGggYXJyb3cga2V5cyBhbmQgc2VsZWN0IHdpdGggZW50ZXIga2V5JyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLW1vYmlsZSc6XG4gICAgICAnVmVudWUsIHBsYWNlIGFuZCBzdG9wc2VhcmNoLiBFbnRlciB0aGUgbG9jYXRpb24gYW5kIG5hdmlnYXRlIGluIHRoZSBsaXN0IGJ5IHN3aXBpbmcuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbic6ICdUaGVyZSBpcyB7e2NvdW50fX0gc3VnZ2VzdGlvbiBhdmFpbGFibGUnLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuX3BsdXJhbCc6XG4gICAgICAnVGhlcmUgYXJlIHt7Y291bnR9fSBzdWdnZXN0aW9ucyBhdmFpbGFibGUnLFxuICAgICdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJzogJ0N1cnJlbnQgc2VsZWN0aW9uOiB7e3NlbGVjdGlvbn19JyxcbiAgICBzdHJlZXQ6ICdTdHJlZXQnLFxuICAgIHN1YndheTogJ01ldHJvJyxcbiAgICBzdGF0aW9uOiAnU3RhdGlvbicsXG4gICAgc3RvcDogJ1N0b3AnLFxuICAgICdzdG9wLW5lYXIteW91JzogJ1NlYXJjaCBzdG9wcyBhbmQgcm91dGVzJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1haXJwbGFuZSc6ICdTZWFyY2ggZmxpZ2h0cyBvciBhaXJwb3J0cycsXG4gICAgJ3N0b3AtbmVhci15b3UtYnVzJzogJ1NlYXJjaCBidXMgcm91dGVzIG9yIHN0b3BzJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1jaXR5YmlrZSc6ICdTZWFyY2ggY2l0eSBiaWtlIHN0YXRpb25zJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1yYWlsJzogJ1NlYXJjaCB0cmFpbiByb3V0ZXMgb3Igc3RhdGlvbnMnLFxuICAgICdzdG9wLW5lYXIteW91LXN1YndheSc6ICdTZWFyY2ggbWV0cm8gcm91dGVzIG9yIHN0YXRpb25zICcsXG4gICAgJ3N0b3AtbmVhci15b3UtdHJhbSc6ICdTZWFyY2ggdHJhbSByb3V0ZXMgb3Igc3RvcHMnLFxuICAgICdzdG9wLXJvdXRlLXN0YXRpb24nOiAnQnVzIGFuZCBzdG9wIHNlYXJjaCcsXG4gICAgJ3RvZGF5LWF0JzogJ3RvZGF5IGF0JyxcbiAgICAndG9tb3Jyb3ctYXQnOiAndG9tb3Jyb3cgYXQnLFxuICAgIHRyYW06ICdUcmFtJyxcbiAgICB0cmFjazogJ1RyYWNrJyxcbiAgICAndXNlLW93bi1wb3NpdGlvbic6ICdVc2UgY3VycmVudCBsb2NhdGlvbicsXG4gICAgJ3NlbGVjdC1mcm9tLW1hcCc6ICdTZWxlY3QgcG9zaXRpb24gZnJvbSBtYXAnLFxuICAgICdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJzogJ1NlbGVjdCBmcm9tIG93biBsb2NhdGlvbnMnLFxuICAgIHZlbnVlOiAnVmVudWUnLFxuICAgICd2aWEtcG9pbnQnOiAnVmlhIHBvaW50JyxcbiAgICB3aGVyZTogJ1doZXJlIHRvPycsXG4gICAgcGxhY2U6ICdMb2NhdGlvbicsXG4gIH0sXG4gIGZpOiB7XG4gICAgYWRkcmVzczogJ09zb2l0ZScsXG4gICAgJ2FkZHJlc3MtcGxhY2Utb3ItYnVzaW5lc3MnOiAnT3NvaXRlLCBwYWlra2EgdGFpIHlyaXR5cycsXG4gICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0xpc8Okw6QgdsOkbGlwaXN0ZScsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzpcbiAgICAgICdBc2V0YSB2w6RsaXBpc3RlZWxsZSB7e2luZGV4fX0gcHlzw6RoZHlrc2VuIGtlc3RvJyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgJ0F2YWEgdsOkbGlwaXN0ZWVuIHt7aW5kZXh9fSBweXPDpGhkeWtzZW4ga2VzdG8gdmFsaXRzaW4nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICdTdWxqZSB2w6RsaXBpc3RlZW4ge3tpbmRleH19IHB5c8OkaGR5a3NlbiBrZXN0byB2YWxpdHNpbicsXG4gICAgYWlycGxhbmU6ICdMZW50b2tvbmUnLFxuICAgIGFycml2YWw6ICdQZXJpbGzDpCcsXG4gICAgYmFjazogJ1Rha2Fpc2luJyxcbiAgICBiaWtlcmVudGFsc3RhdGlvbjogJ1B5w7Zyw6Rhc2VtYScsXG4gICAgYmlrZXBhcms6ICdMaWl0eW50w6RwecO2csOkcGFya2tpJyxcbiAgICBidXM6ICdidXNzaScsXG4gICAgY2FuY2VsOiAnUGVydXV0YScsXG4gICAgY2FycGFyazogJ0xpaXR5bnTDpHB5c8Oka29pbnRpJyxcbiAgICAnY2xlYXItYnV0dG9uLWxhYmVsJzogJ1R5aGplbm7DpCcsXG4gICAgJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JzogJ1R5aGplbm7DpCBoYWt1aGlzdG9yaWEnLFxuICAgIGN1cnJlbnRwb3NpdGlvbjogJ1TDpG3DpG5oZXRraW5lbiBzaWphaW50aScsXG4gICAgZGVsZXRlOiAnUG9pc3RhJyxcbiAgICAnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInOiAnSGFsdWF0a28gdHloamVudMOkw6QgaGFrdWhpc3Rvcmlhbj8nLFxuICAgIGRlcGFydHVyZTogJ0zDpGh0w7ZhaWthJyxcbiAgICBkZXN0aW5hdGlvbjogJ03DpMOkcsOkbnDDpMOkJyxcbiAgICBmYXZvdXJpdGU6ICdTdW9zaWtraScsXG4gICAgZmVycnk6ICdMYXV0dGEnLFxuICAgICdmdXR1cmUtcm91dGUnOiAnVHVsZXZhIHJlaXR0aScsXG4gICAgJ2dpdmUtb3JpZ2luJzogJ0zDpGh0w7ZwYWlra2EnLFxuICAgICdnaXZlLWRlc3RpbmF0aW9uJzogJ03DpMOkcsOkbnDDpMOkJyxcbiAgICBvcmlnaW46ICdMw6RodMO2cGFpa2thJyxcbiAgICAnb3JpZ2luLXN0b3AtbmVhci15b3UnOiAnTMOkaHTDtnBhaWtrYScsXG4gICAgb3dubG9jYXRpb25zOiAnT21hdCBwYWlrYXQnLFxuICAgIGxvYWRpbmc6ICdMYWRhdGFhbi4uLicsXG4gICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4nLFxuICAgIHBsYXRmb3JtOiAnTGFpdHVyaScsXG4gICAgcmFpbDogJ0p1bmEnLFxuICAgIHJlcXVpcmVkOiAncGFrb2xsaW5lbiBrZW50dMOkJyxcbiAgICBzZWFyY2g6ICdFdHNpJyxcbiAgICAnc2VhcmNoLWFkZHJlc3Mtb3ItcGxhY2UnOiAnSGFlIG9zb2l0dGVlbGxhIHRhaSBwYWlrYW4gbmltZWxsw6QnLFxuICAgICdzZWFyY2gtYnV0dG9uLWxhYmVsJzogJ0hhZScsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbic6ICdIYWUgbcOkw6Ryw6RucMOkw6R0w6QsIGxpbmphYSB0YWkgcHlzw6Rra2nDpCcsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1pbmRleCc6ICdTecO2dMOkIG3DpMOkcsOkbnDDpMOkJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLXJlc3VsdHMtYnV0LW5vLXNlYXJjaCc6XG4gICAgICAnS2F0c28gdHVsb2tzZXQgdmllcmVpc2VsdMOkIE3DpMOkcsOkbnDDpMOkLXbDpGxpbGVoZGVsdMOkJyxcbiAgICAnc2VhcmNoLW5vLXJlc3VsdHMnOiAnRWkgdHVsb2tzaWEnLFxuICAgICdzZWFyY2gtb3JpZ2luJzogJ0hhZSBsw6RodMO2cGFpa2thYSwgbGluamFhIHRhaSBweXPDpGtracOkJyxcbiAgICAnc2VhcmNoLW9yaWdpbi1pbmRleCc6ICdTecO2dMOkIGzDpGh0w7ZwYWlra2EnLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtZGVza3RvcCc6XG4gICAgICAnUGFpa2thLCBsaW5qYSBqYSBweXPDpGtraWhha3UuIE5hdmlnb2kgbGlzdGFzc2EgbnVvbGluw6RwcMOkaW1pbGzDpCBqYSB2YWxpdHNlIGVudGVyaWxsw6QnLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW9iaWxlJzpcbiAgICAgICdQYWlra2EsIGxpbmphIGphIHB5c8Oka2tpaGFrdS4gU3nDtnTDpCBzaWphaW50aSBqYSBuYXZpZ29pIGxpc3Rhc3NhIHB5eWhrw6Rpc2Vtw6RsbMOkLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nOiAnIEzDtnlkZXR0aWluIHt7Y291bnR9fSBlaGRvdHVzJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbl9wbHVyYWwnOiAnIEzDtnlkZXR0aWluIHt7Y291bnR9fSBlaGRvdHVzdGEnLFxuICAgICdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJzogJ1TDpG3DpG5oZXRraW5lbiB2YWxpbnRhOiB7e3NlbGVjdGlvbn19JyxcbiAgICAnc2VhcmNoLXBvc2l0aW9uJzogJ1BhaWthbm5hJyxcbiAgICBzdHJlZXQ6ICdLYXR1JyxcbiAgICBzdWJ3YXk6ICdNZXRybycsXG4gICAgc3RhdGlvbjogJ0FzZW1hJyxcbiAgICBzdG9wOiAnUHlzw6Rra2knLFxuICAgICdzdG9wLW5lYXIteW91JzogJ0xpbmphLCBweXPDpGtraSB0YWkgYXNlbWEnLFxuICAgICdzdG9wLW5lYXIteW91LWFpcnBsYW5lJzogJ0hhZSBsZW50b2phIHRhaSBsZW50b2FzZW1hYScsXG4gICAgJ3N0b3AtbmVhci15b3UtYnVzJzogJ0hhZSBidXNzaWxpbmphYSB0YWkgcHlzw6Rra2nDpCcsXG4gICAgJ3N0b3AtbmVhci15b3UtY2l0eWJpa2UnOiAnSGFlIGthdXB1bmtpcHnDtnLDpGFzZW1hYScsXG4gICAgJ3N0b3AtbmVhci15b3UtcmFpbCc6ICdIYWUgbMOkaGlqdW5hYSB0YWkgYXNlbWFhJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1zdWJ3YXknOiAnSGFlIG1ldHJvbGluamFhIHRhaSBhc2VtYWEnLFxuICAgICdzdG9wLW5lYXIteW91LXRyYW0nOiAnSGFlIHJhaXRpb2xpbmphYSB0YWkgcHlzw6Rra2nDpCcsXG4gICAgJ3N0b3Atcm91dGUtc3RhdGlvbic6ICdMaW5qYS0gamEgcHlzw6Rra2loYWt1JyxcbiAgICAndG9kYXktYXQnOiAndMOkbsOkw6RuIGtsbycsXG4gICAgJ3RvbW9ycm93LWF0JzogJ2h1b21lbm5hIGtsbycsXG4gICAgdHJhbTogJ1JhaXRpb3ZhdW51JyxcbiAgICB0cmFjazogJ1JhaWRlJyxcbiAgICAndXNlLW93bi1wb3NpdGlvbic6ICdLw6R5dMOkIG55a3lpc3TDpCBzaWphaW50aWEnLFxuICAgICdzZWxlY3QtZnJvbS1tYXAnOiAnVmFsaXRzZSBzaWphaW50aSBrYXJ0YWx0YScsXG4gICAgJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnOiAnVmFsaXRzZSBvbWlzdGEgcGFpa29pc3RhJyxcbiAgICB2ZW51ZTogJ1BhaWtrYScsXG4gICAgJ3ZpYS1wb2ludCc6ICdWw6RsaXBpc3RlJyxcbiAgICB3aGVyZTogJ01pbm5lIG1lbm7DpMOkbj8nLFxuICAgIHBsYWNlOiAnUGFpa2thJyxcbiAgfSxcbiAgc3Y6IHtcbiAgICBhZGRyZXNzOiAnQWRyZXNzJyxcbiAgICAnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcyc6ICdBZHJlc3MsIHBsYXRzIGVsbGVyIGbDtnJldGFnJyxcbiAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnTMOkZ2cgdGlsbCB2aWFwdW5rdCcsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzpcbiAgICAgICdTdMOkbGwgaW4gdmFyYWt0aWdoZXQgZsO2ciB2aWFwdW5rdGVuIHt7aW5kZXh9fScsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICdTdMOkbmcgdsOkbGphcmVuIGbDtnIgdmFyYWt0aWdoZXQgdmlkIHZpYS1wdW5rdGVuIHt7aW5kZXh9fScsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgJ8OWcHBuYSB2w6RsamFyZW4gZsO2ciB2YXJha3RpZ2hldCB2aWQgdmlhLXB1bmt0ZW4ge3tpbmRleH19JyxcbiAgICBhaXJwbGFuZTogJ0ZseWcnLFxuICAgIGFycml2YWw6ICdBbmzDpG5kZXInLFxuICAgIGJhY2s6ICdUaWxsYmFrYScsXG4gICAgYmlrZXJlbnRhbHN0YXRpb246ICdTdGFkc2N5a2Vsc3RhdGlvbicsXG4gICAgYmlrZXBhcms6ICdBbnNsdXRuaW5nc3BhcmtlcmluZyBmw7ZyIGN5a2xhcicsXG4gICAgYnVzOiAnQnVzc2knLFxuICAgIGNhbmNlbDogJ0F2YnJ5dCcsXG4gICAgY2FycGFyazogJ0luZmFydHNwYXJrZXJpbmcnLFxuICAgICdjbGVhci1idXR0b24tbGFiZWwnOiAnVMO2bScsXG4gICAgJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JzogJ1TDtm0gc8O2a2hpc3RvcmlrZW4nLFxuICAgIGN1cnJlbnRwb3NpdGlvbjogJ051dmFyYW5kZSBwb3NpdGlvbicsXG4gICAgZGVsZXRlOiAnVGEgYm9ydCcsXG4gICAgJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJzogJ1ZpbGwgZHUgdMO2bW1hIHPDtmtoaXN0b3Jpa2VuPycsXG4gICAgZGVwYXJ0dXJlOiAnQXZnw6VuZ3N0aWQnLFxuICAgIGRlc3RpbmF0aW9uOiAnRGVzdGluYXRpb24nLFxuICAgIGZhdm91cml0ZTogJ0Zhdm9yaXQnLFxuICAgIGZlcnJ5OiAnRsOkcmphJyxcbiAgICAnZnV0dXJlLXJvdXRlJzogJ0ZyYW10aWRhIHJ1dHQnLFxuICAgICdnaXZlLWRlc3RpbmF0aW9uJzogJ1Nrcml2IGluIGRpbiBkZXN0aW5hdGlvbicsXG4gICAgJ2dpdmUtb3JpZ2luJzogJ1Nrcml2IGluIGRpbiBhdmbDpHJkc3BsYXRzJyxcbiAgICBvcmlnaW46ICdBdmbDpHJkc3BsYXRzJyxcbiAgICAnb3JpZ2luLXN0b3AtbmVhci15b3UnOiAnQXZmw6RyZHNwbGF0cycsXG4gICAgb3dubG9jYXRpb25zOiAnRWduYSBwbGF0c2VyJyxcbiAgICBsb2FkaW5nOiAnTGFkZGFyLi4uJyxcbiAgICAnbWludXRlLXNob3J0JzogJ21pbicsXG4gICAgcGxhdGZvcm06ICdQbGF0dGZvcm0nLFxuICAgIHJhaWw6ICdUw6VnJyxcbiAgICByZXF1aXJlZDogJ29ibGlnYXRvcmlza3QgZsOkbHQnLFxuICAgIHNlYXJjaDogJ1PDtmsnLFxuICAgICdzZWFyY2gtYWRkcmVzcy1vci1wbGFjZSc6ICdTw7ZrIG1lZCBhZHJlc3NlbiBlbGxlciBwbGF0c2VucyBuYW1uJyxcbiAgICAnc2VhcmNoLWJ1dHRvbi1sYWJlbCc6ICdTw7ZrJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uJzogJ1PDtmsgZGVzdGluYXRpb24sIGxpbmplIGVsbGVyIGjDpWxscGxhdHMnLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24taW5kZXgnOiAnU2tyaXYgZGVzdGluYXRpb24nLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24tcmVzdWx0cy1idXQtbm8tc2VhcmNoJzpcbiAgICAgICdTZSByZXN1bHRhdGVuIHVuZGVyIGZsaWtlbiBEZXN0aW5hdGlvbicsXG4gICAgJ3NlYXJjaC1uby1yZXN1bHRzJzogJ0luZ2Egc8O2a3Jlc3VsdGF0JyxcbiAgICAnc2VhcmNoLW9yaWdpbic6ICdTw7ZrIGF2ZsOkcmRzcGxhdHMsIGxpbmplIGVsbGVyIGjDpWxscGxhdHMnLFxuICAgICdzZWFyY2gtb3JpZ2luLWluZGV4JzogJ1Nrcml2IGF2ZsOkcmRzcGxhdHMnLFxuICAgICdzZWFyY2gtcG9zaXRpb24nOiAnU8O2ayBwb3NpdGlvbicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1kZXNrdG9wJzpcbiAgICAgICdQbGF0cywgbGluamUgb2NoIGjDpWxscGxhdHNzw7ZrbmluZy4gTmF2aWdlcmEgbGlzdGFuIG1lZCBwaWx0YW5nZW50ZXJuYSBvY2ggdsOkbGogbWVkIEVudGVyLXRhbmdldGVuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLW1vYmlsZSc6XG4gICAgICAnUGxhdHMsIGxpbmplIG9jaCBow6VsbHBsYXRzc8O2a25pbmcuIEFuZ2UgcGxhdHNlbiBvY2ggbmF2aWdlcmEgaSBsaXN0YW4gZ2Vub20gYXR0IHN2ZXBhLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nOiAnSGl0dGFkZSB7e2NvdW50fX0gZsO2cnNsYWcnLFxuICAgICdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJzogJ051dmFyYW5kZSB2YWw6IHt7c2VsZWN0aW9ufX0nLFxuICAgIHN0cmVldDogJ0dhdGEnLFxuICAgIHN1YndheTogJ01ldHJvJyxcbiAgICBzdGF0aW9uOiAnU3RhdGlvbicsXG4gICAgc3RvcDogJ0jDpWxscGxhdHMnLFxuICAgICdzdG9wLW5lYXIteW91JzogJ1PDtmsgaMOlbGxwbGF0c2VyIGVsbGVyIGxpbmplcicsXG4gICAgJ3N0b3AtbmVhci15b3UtYWlycGxhbmUnOiAnU8O2ayBmbHlnIGVsbGVyIGZseWdwbGF0c2VyJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1idXMnOiAnU8O2ayBidXNzbGluamVyIGVsbGVyIGjDpWxscGxhdHNlcicsXG4gICAgJ3N0b3AtbmVhci15b3UtY2l0eWJpa2UnOiAnU8O2ayBzdGFkc2N5a2Vsc3RhdGlvbmVyJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1yYWlsJzogJ1PDtmsgbsOkcnTDpWdlciBlbGxlciBzdGF0aW9uZXInLFxuICAgICdzdG9wLW5lYXIteW91LXN1YndheSc6ICdTw7ZrIG1ldHJvbGluamVyIGVsbGVyIHN0YXRpb25lcicsXG4gICAgJ3N0b3AtbmVhci15b3UtdHJhbSc6ICdTw7ZrIHNww6VydmFnbmxpbmplciBlbGxlciBow6VsbHBsYXRzZXInLFxuICAgICdzdG9wLXJvdXRlLXN0YXRpb24nOiAnQnVzcyBvY2ggc3RvcHAgc8O2a25pbmdlbicsXG4gICAgJ3RvZGF5LWF0JzogJ2kgZGFnIGtsJyxcbiAgICAndG9tb3Jyb3ctYXQnOiAnaSBtb3Jnb24nLFxuICAgIHRyYW06ICdTcMOlcnZhZ24nLFxuICAgIHRyYWNrOiAnU3DDpXInLFxuICAgICd1c2Utb3duLXBvc2l0aW9uJzogJ0FudsOkbmQgbWluIHBvc2l0aW9uJyxcbiAgICAnc2VsZWN0LWZyb20tbWFwJzogJ1bDpGxqIHBvc2l0aW9uIGZyw6VuIGthcnRhbicsXG4gICAgJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnOiAnVsOkbGogZnLDpW4gZWduYSBwbGF0c2VyJyxcbiAgICB2ZW51ZTogJ03DtnRlc3BsYXRzJyxcbiAgICAndmlhLXBvaW50JzogJ1ZpYSBwdW5rdCcsXG4gICAgd2hlcmU6ICdWYXJ0IHZpbGwgZHUgw6VrYT8nLFxuICAgIHBsYWNlOiAnUGxhdHMnLFxuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgdHJhbnNsYXRpb25zO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEZpbm5pc2ggW2ZpXVxuLy8hIGF1dGhvciA6IFRhcm1vIEFpZGFudGF1c3RhIDogaHR0cHM6Ly9naXRodWIuY29tL2JsZWFkb2ZcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBudW1iZXJzUGFzdCA9ICdub2xsYSB5a3NpIGtha3NpIGtvbG1lIG5lbGrDpCB2aWlzaSBrdXVzaSBzZWl0c2Vtw6RuIGthaGRla3NhbiB5aGRla3PDpG4nLnNwbGl0KFxuICAgICAgICAgICAgJyAnXG4gICAgICAgICksXG4gICAgICAgIG51bWJlcnNGdXR1cmUgPSBbXG4gICAgICAgICAgICAnbm9sbGEnLFxuICAgICAgICAgICAgJ3loZGVuJyxcbiAgICAgICAgICAgICdrYWhkZW4nLFxuICAgICAgICAgICAgJ2tvbG1lbicsXG4gICAgICAgICAgICAnbmVsasOkbicsXG4gICAgICAgICAgICAndmlpZGVuJyxcbiAgICAgICAgICAgICdrdXVkZW4nLFxuICAgICAgICAgICAgbnVtYmVyc1Bhc3RbN10sXG4gICAgICAgICAgICBudW1iZXJzUGFzdFs4XSxcbiAgICAgICAgICAgIG51bWJlcnNQYXN0WzldLFxuICAgICAgICBdO1xuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ211dXRhbWFuIHNla3VubmluJyA6ICdtdXV0YW1hIHNla3VudGknO1xuICAgICAgICAgICAgY2FzZSAnc3MnOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGlzRnV0dXJlID8gJ3Nla3VubmluJyA6ICdzZWt1bnRpYSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAnbWludXV0aW4nIDogJ21pbnV1dHRpJztcbiAgICAgICAgICAgIGNhc2UgJ21tJzpcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpc0Z1dHVyZSA/ICdtaW51dXRpbicgOiAnbWludXV0dGlhJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2gnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc0Z1dHVyZSA/ICd0dW5uaW4nIDogJ3R1bnRpJztcbiAgICAgICAgICAgIGNhc2UgJ2hoJzpcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpc0Z1dHVyZSA/ICd0dW5uaW4nIDogJ3R1bnRpYSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAncMOkaXbDpG4nIDogJ3DDpGl2w6QnO1xuICAgICAgICAgICAgY2FzZSAnZGQnOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGlzRnV0dXJlID8gJ3DDpGl2w6RuJyA6ICdww6RpdsOkw6QnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ2t1dWthdWRlbicgOiAna3V1a2F1c2knO1xuICAgICAgICAgICAgY2FzZSAnTU0nOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGlzRnV0dXJlID8gJ2t1dWthdWRlbicgOiAna3V1a2F1dHRhJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3knOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc0Z1dHVyZSA/ICd2dW9kZW4nIDogJ3Z1b3NpJztcbiAgICAgICAgICAgIGNhc2UgJ3l5JzpcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpc0Z1dHVyZSA/ICd2dW9kZW4nIDogJ3Z1b3R0YSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gdmVyYmFsTnVtYmVyKG51bWJlciwgaXNGdXR1cmUpICsgJyAnICsgcmVzdWx0O1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBmdW5jdGlvbiB2ZXJiYWxOdW1iZXIobnVtYmVyLCBpc0Z1dHVyZSkge1xuICAgICAgICByZXR1cm4gbnVtYmVyIDwgMTBcbiAgICAgICAgICAgID8gaXNGdXR1cmVcbiAgICAgICAgICAgICAgICA/IG51bWJlcnNGdXR1cmVbbnVtYmVyXVxuICAgICAgICAgICAgICAgIDogbnVtYmVyc1Bhc3RbbnVtYmVyXVxuICAgICAgICAgICAgOiBudW1iZXI7XG4gICAgfVxuXG4gICAgdmFyIGZpID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZmknLCB7XG4gICAgICAgIG1vbnRoczogJ3RhbW1pa3V1X2hlbG1pa3V1X21hYWxpc2t1dV9odWh0aWt1dV90b3Vrb2t1dV9rZXPDpGt1dV9oZWluw6RrdXVfZWxva3V1X3N5eXNrdXVfbG9rYWt1dV9tYXJyYXNrdXVfam91bHVrdXUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAndGFtbWlfaGVsbWlfbWFhbGlzX2h1aHRpX3RvdWtvX2tlc8OkX2hlaW7DpF9lbG9fc3l5c19sb2thX21hcnJhc19qb3VsdScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICdzdW5udW50YWlfbWFhbmFudGFpX3RpaXN0YWlfa2Vza2l2aWlra29fdG9yc3RhaV9wZXJqYW50YWlfbGF1YW50YWknLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdzdV9tYV90aV9rZV90b19wZV9sYScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdzdV9tYV90aV9rZV90b19wZV9sYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEgubW0nLFxuICAgICAgICAgICAgTFRTOiAnSEgubW0uc3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEbyBNTU1NW3RhXSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0RvIE1NTU1bdGFdIFlZWVksIFtrbG9dIEhILm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEbyBNTU1NW3RhXSBZWVlZLCBba2xvXSBISC5tbScsXG4gICAgICAgICAgICBsOiAnRC5NLllZWVknLFxuICAgICAgICAgICAgbGw6ICdEbyBNTU0gWVlZWScsXG4gICAgICAgICAgICBsbGw6ICdEbyBNTU0gWVlZWSwgW2tsb10gSEgubW0nLFxuICAgICAgICAgICAgbGxsbDogJ2RkZCwgRG8gTU1NIFlZWVksIFtrbG9dIEhILm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbdMOkbsOkw6RuXSBba2xvXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW2h1b21lbm5hXSBba2xvXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2tsb10gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tlaWxlbl0gW2tsb10gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbdmlpbWVdIGRkZGRbbmFdIFtrbG9dIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMgcMOkw6RzdMOkJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBzaXR0ZW4nLFxuICAgICAgICAgICAgczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgc3M6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1tOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE1NOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5OiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5eTogdHJhbnNsYXRlLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZpO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFN3ZWRpc2ggW3N2XVxuLy8hIGF1dGhvciA6IEplbnMgQWxtIDogaHR0cHM6Ly9naXRodWIuY29tL3VsbXVzXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3YgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdzdicsIHtcbiAgICAgICAgbW9udGhzOiAnamFudWFyaV9mZWJydWFyaV9tYXJzX2FwcmlsX21hal9qdW5pX2p1bGlfYXVndXN0aV9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdqYW5fZmViX21hcl9hcHJfbWFqX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlYycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdzw7ZuZGFnX23DpW5kYWdfdGlzZGFnX29uc2RhZ190b3JzZGFnX2ZyZWRhZ19sw7ZyZGFnJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnc8O2bl9tw6VuX3Rpc19vbnNfdG9yX2ZyZV9sw7ZyJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ3PDtl9tw6VfdGlfb25fdG9fZnJfbMO2Jy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnWVlZWS1NTS1ERCcsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIFtrbC5dIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIFtrbC5dIEhIOm1tJyxcbiAgICAgICAgICAgIGxsbDogJ0QgTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgbGxsbDogJ2RkZCBEIE1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbSWRhZ10gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tJbW9yZ29uXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0lnw6VyXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ1tQw6VdIGRkZGQgTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbSV0gZGRkZFtzXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ29tICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdmw7ZyICVzIHNlZGFuJyxcbiAgICAgICAgICAgIHM6ICduw6VncmEgc2VrdW5kZXInLFxuICAgICAgICAgICAgc3M6ICclZCBzZWt1bmRlcicsXG4gICAgICAgICAgICBtOiAnZW4gbWludXQnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dGVyJyxcbiAgICAgICAgICAgIGg6ICdlbiB0aW1tZScsXG4gICAgICAgICAgICBoaDogJyVkIHRpbW1hcicsXG4gICAgICAgICAgICBkOiAnZW4gZGFnJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGFnYXInLFxuICAgICAgICAgICAgTTogJ2VuIG3DpW5hZCcsXG4gICAgICAgICAgICBNTTogJyVkIG3DpW5hZGVyJyxcbiAgICAgICAgICAgIHk6ICdldHQgw6VyJyxcbiAgICAgICAgICAgIHl5OiAnJWQgw6VyJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KFxcOmV8XFw6YSkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIH5+KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICc6ZSdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnOmEnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJzphJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICc6ZSdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJzplJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBzdjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBHZXJtYW4gW2RlXVxuLy8hIGF1dGhvciA6IGxsdWNocyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9sbHVjaHNcbi8vISBhdXRob3I6IE1lbmVsaW9uIEVsZW5zw7psZTogaHR0cHM6Ly9naXRodWIuY29tL09pcmVcbi8vISBhdXRob3IgOiBNaWtvbGFqIERhZGVsYSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9taWswMWFqXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzUmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgZm9ybWF0ID0ge1xuICAgICAgICAgICAgbTogWydlaW5lIE1pbnV0ZScsICdlaW5lciBNaW51dGUnXSxcbiAgICAgICAgICAgIGg6IFsnZWluZSBTdHVuZGUnLCAnZWluZXIgU3R1bmRlJ10sXG4gICAgICAgICAgICBkOiBbJ2VpbiBUYWcnLCAnZWluZW0gVGFnJ10sXG4gICAgICAgICAgICBkZDogW251bWJlciArICcgVGFnZScsIG51bWJlciArICcgVGFnZW4nXSxcbiAgICAgICAgICAgIHc6IFsnZWluZSBXb2NoZScsICdlaW5lciBXb2NoZSddLFxuICAgICAgICAgICAgTTogWydlaW4gTW9uYXQnLCAnZWluZW0gTW9uYXQnXSxcbiAgICAgICAgICAgIE1NOiBbbnVtYmVyICsgJyBNb25hdGUnLCBudW1iZXIgKyAnIE1vbmF0ZW4nXSxcbiAgICAgICAgICAgIHk6IFsnZWluIEphaHInLCAnZWluZW0gSmFociddLFxuICAgICAgICAgICAgeXk6IFtudW1iZXIgKyAnIEphaHJlJywgbnVtYmVyICsgJyBKYWhyZW4nXSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyBmb3JtYXRba2V5XVswXSA6IGZvcm1hdFtrZXldWzFdO1xuICAgIH1cblxuICAgIHZhciBkZSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2RlJywge1xuICAgICAgICBtb250aHM6ICdKYW51YXJfRmVicnVhcl9Nw6Ryel9BcHJpbF9NYWlfSnVuaV9KdWxpX0F1Z3VzdF9TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXplbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdKYW4uX0ZlYi5fTcOkcnpfQXByLl9NYWlfSnVuaV9KdWxpX0F1Zy5fU2VwLl9Pa3QuX05vdi5fRGV6Licuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICdTb25udGFnX01vbnRhZ19EaWVuc3RhZ19NaXR0d29jaF9Eb25uZXJzdGFnX0ZyZWl0YWdfU2Ftc3RhZycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1NvLl9Nby5fRGkuX01pLl9Eby5fRnIuX1NhLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTb19Nb19EaV9NaV9Eb19Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2hldXRlIHVtXSBMVCBbVWhyXScsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICAgICAgbmV4dERheTogJ1ttb3JnZW4gdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbZ2VzdGVybiB1bV0gTFQgW1Vocl0nLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbbGV0enRlbl0gZGRkZCBbdW1dIExUIFtVaHJdJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgICAgICBwYXN0OiAndm9yICVzJyxcbiAgICAgICAgICAgIHM6ICdlaW4gcGFhciBTZWt1bmRlbicsXG4gICAgICAgICAgICBzczogJyVkIFNla3VuZGVuJyxcbiAgICAgICAgICAgIG06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtbTogJyVkIE1pbnV0ZW4nLFxuICAgICAgICAgICAgaDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGhoOiAnJWQgU3R1bmRlbicsXG4gICAgICAgICAgICBkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB3OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgd3c6ICclZCBXb2NoZW4nLFxuICAgICAgICAgICAgTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIE1NOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHl5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRlO1xuXG59KSkpO1xuIiwiZnVuY3Rpb24gc3R5bGVJbmplY3QoY3NzLCByZWYpIHtcbiAgaWYgKCByZWYgPT09IHZvaWQgMCApIHJlZiA9IHt9O1xuICB2YXIgaW5zZXJ0QXQgPSByZWYuaW5zZXJ0QXQ7XG5cbiAgaWYgKCFjc3MgfHwgdHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm47IH1cblxuICB2YXIgaGVhZCA9IGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcbiAgdmFyIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgc3R5bGUudHlwZSA9ICd0ZXh0L2Nzcyc7XG5cbiAgaWYgKGluc2VydEF0ID09PSAndG9wJykge1xuICAgIGlmIChoZWFkLmZpcnN0Q2hpbGQpIHtcbiAgICAgIGhlYWQuaW5zZXJ0QmVmb3JlKHN0eWxlLCBoZWFkLmZpcnN0Q2hpbGQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gIH1cblxuICBpZiAoc3R5bGUuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgfSBlbHNlIHtcbiAgICBzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBzdHlsZUluamVjdDtcbiIsImltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUVmZmVjdCwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3RNb2RhbCBmcm9tICdyZWFjdC1tb2RhbCc7XG5pbXBvcnQgY3ggZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgSWNvbiBmcm9tICdAZGlnaXRyYW5zaXQtY29tcG9uZW50L2RpZ2l0cmFuc2l0LWNvbXBvbmVudC1pY29uJztcbmltcG9ydCBEaWFsb2dNb2RhbCBmcm9tICdAZGlnaXRyYW5zaXQtY29tcG9uZW50L2RpZ2l0cmFuc2l0LWNvbXBvbmVudC1kaWFsb2ctbW9kYWwnO1xuaW1wb3J0IEF1dG9zdWdnZXN0IGZyb20gJ3JlYWN0LWF1dG9zdWdnZXN0JztcbmltcG9ydCBtb2JpbGVTdHlsZXMgZnJvbSAnLi9Nb2JpbGVTZWFyY2guc2Nzcyc7XG5pbXBvcnQgbW9iaWxlTm9TY3JvbGxTdHlsZXMgZnJvbSAnLi9Nb2JpbGVOb1Njcm9sbC5zY3NzJztcblxuY2xhc3MgQXV0b3N1Z2dlc3RQYXRjaCBleHRlbmRzIEF1dG9zdWdnZXN0IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgc2VsZi5vblN1Z2dlc3Rpb25Ub3VjaE1vdmUgPSAoKSA9PiB7XG4gICAgICBzZWxmLmp1c3RTZWxlY3RlZFN1Z2dlc3Rpb24gPSBmYWxzZTtcbiAgICAgIHNlbGYucHJlc3NlZFN1Z2dlc3Rpb24gPSBudWxsO1xuICAgIH07XG4gIH1cbn1cblxuY29uc3QgTW9iaWxlU2VhcmNoID0gKHtcbiAgYXBwRWxlbWVudCxcbiAgaWQsXG4gIGNsb3NlSGFuZGxlLFxuICBjbGVhcklucHV0LFxuICB2YWx1ZSxcbiAgc3VnZ2VzdGlvbnMsXG4gIGlucHV0UHJvcHMsXG4gIGZldGNoRnVuY3Rpb24sXG4gIHJlbmRlclN1Z2dlc3Rpb24sXG4gIGdldFN1Z2dlc3Rpb25WYWx1ZSxcbiAgYXJpYUxhYmVsLFxuICBsYWJlbCxcbiAgb25TdWdnZXN0aW9uU2VsZWN0ZWQsXG4gIGNsZWFyT2xkU2VhcmNoZXMsXG4gIGRpYWxvZ0hlYWRlclRleHQsXG4gIGRpYWxvZ1ByaW1hcnlCdXR0b25UZXh0LFxuICBkaWFsb2dTZWNvbmRhcnlCdXR0b25UZXh0LFxuICBjbGVhcklucHV0QnV0dG9uVGV4dCxcbiAgZm9jdXNJbnB1dCxcbiAgY29sb3IsXG4gIGhvdmVyQ29sb3IsXG4gIGFjY2Vzc2libGVQcmltYXJ5Q29sb3IsXG4gIHNlYXJjaE9wZW4sXG4gIGZvbnRXZWlnaHRzLFxuICBzaG93U2Nyb2xsLFxufSkgPT4ge1xuICBjb25zdCBzdHlsZXMgPSBzaG93U2Nyb2xsID8gbW9iaWxlU3R5bGVzIDogbW9iaWxlTm9TY3JvbGxTdHlsZXM7XG5cbiAgY29uc3QgaW5wdXRJZCA9IGAke2lkfS1pbnB1dGA7XG4gIGNvbnN0IGxhYmVsSWQgPSBgJHtpZH0tbGFiZWxgO1xuXG4gIGNvbnN0IFtpc0RpYWxvZ09wZW4sIHNldERpYWxvZ09wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBpbnB1dFJlZiA9IFJlYWN0LnVzZVJlZigpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgUmVhY3RNb2RhbC5zZXRBcHBFbGVtZW50KGFwcEVsZW1lbnQpO1xuICB9LCBbXSk7XG5cbiAgY29uc3Qgb25DbG9zZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjbG9zZUhhbmRsZSgpO1xuICB9KTtcblxuICBjb25zdCBvblNlbGVjdCA9IChlLCByZWYpID0+IHtcbiAgICBpZiAocmVmLnN1Z2dlc3Rpb24udHlwZSA9PT0gJ2NsZWFyLXNlYXJjaC1oaXN0b3J5Jykge1xuICAgICAgc2V0RGlhbG9nT3Blbih0cnVlKTtcbiAgICB9IGVsc2UgaWYgKCFyZWYuc3VnZ2VzdGlvbi5wcm9wZXJ0aWVzLmFycm93Q2xpY2tlZCkge1xuICAgICAgLy8gU2VsZWN0IGl0ZW0gaWYgZmlsbCBpbnB1dCBidXR0b24gaXMgbm90IHByZXNzZWQgKGRpYWdvbmFsIGFycm93IGluIHN1Z2dlc3Rpb24gaXRlbXMpXG4gICAgICBvblN1Z2dlc3Rpb25TZWxlY3RlZChlLCByZWYpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQgPSBldmVudCA9PiB7XG4gICAgY29uc3Qgc3BhY2UgPSBbMTMsICcgJywgJ1NwYWNlYmFyJ107XG4gICAgY29uc3QgZW50ZXIgPSBbMzIsICdFbnRlciddO1xuICAgIGNvbnN0IGtleSA9IChldmVudCAmJiAoZXZlbnQua2V5IHx8IGV2ZW50LndoaWNoIHx8IGV2ZW50LmtleUNvZGUpKSB8fCAnJztcblxuICAgIGlmICgha2V5IHx8ICFzcGFjZS5jb25jYXQoZW50ZXIpLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICBjb25zdCBnZXRWYWx1ZSA9IHN1Z2dlc3Rpb24gPT4ge1xuICAgIGlmIChzdWdnZXN0aW9uLnR5cGUgPT09ICdjbGVhci1zZWFyY2gtaGlzdG9yeScpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIGdldFN1Z2dlc3Rpb25WYWx1ZShzdWdnZXN0aW9uKTtcbiAgfTtcblxuICBjb25zdCByZW5kZXJJdGVtID0gaXRlbSA9PiB7XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ2NsZWFyLXNlYXJjaC1oaXN0b3J5Jykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPXtzdHlsZXNbJ2NsZWFyLXNlYXJjaC1oaXN0b3J5J119PlxuICAgICAgICAgIHtpdGVtLmxhYmVsSWR9XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlbmRlclN1Z2dlc3Rpb24oaXRlbSk7XG4gIH07XG5cbiAgY29uc3QgcmVuZGVyRGlhbG9nTW9kYWwgPSAoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxEaWFsb2dNb2RhbFxuICAgICAgICBhcHBFbGVtZW50PXthcHBFbGVtZW50fVxuICAgICAgICBpc01vZGFsT3Blbj17aXNEaWFsb2dPcGVufVxuICAgICAgICBoYW5kbGVDbG9zZT17KCkgPT4gc2V0RGlhbG9nT3BlbihmYWxzZSl9XG4gICAgICAgIGhlYWRlclRleHQ9e2RpYWxvZ0hlYWRlclRleHR9XG4gICAgICAgIHByaW1hcnlCdXR0b25UZXh0PXtkaWFsb2dQcmltYXJ5QnV0dG9uVGV4dH1cbiAgICAgICAgc2Vjb25kYXJ5QnV0dG9uVGV4dD17ZGlhbG9nU2Vjb25kYXJ5QnV0dG9uVGV4dH1cbiAgICAgICAgcHJpbWFyeUJ1dHRvbk9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICBjbGVhck9sZFNlYXJjaGVzKCk7XG4gICAgICAgICAgc2V0RGlhbG9nT3BlbihmYWxzZSk7XG4gICAgICAgIH19XG4gICAgICAgIHNlY29uZGFyeUJ1dHRvbk9uQ2xpY2s9eygpID0+IHNldERpYWxvZ09wZW4oZmFsc2UpfVxuICAgICAgICBjb2xvcj17Y29sb3J9XG4gICAgICAgIGhvdmVyQ29sb3I9e2hvdmVyQ29sb3J9XG4gICAgICAgIGZvbnRXZWlnaHRzPXtmb250V2VpZ2h0c31cbiAgICAgIC8+XG4gICAgKTtcbiAgfTtcblxuICBjb25zdCBjbGVhckJ1dHRvbiA9ICgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ2NsZWFyLWlucHV0J119XG4gICAgICAgIG9uQ2xpY2s9e2NsZWFySW5wdXR9XG4gICAgICAgIG9uS2V5RG93bj17ZSA9PiBpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQoZSkgJiYgY2xlYXJJbnB1dCgpfVxuICAgICAgICBhcmlhLWxhYmVsPXtjbGVhcklucHV0QnV0dG9uVGV4dH1cbiAgICAgID5cbiAgICAgICAgPEljb24gaW1nPVwiY2xvc2VcIiBjb2xvcj17Y29sb3J9IC8+XG4gICAgICA8L2J1dHRvbj5cbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IHJlbmRlckNvbnRlbnQgPSAoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ2NvbWJvYm94LWNvbnRhaW5lciddfSBodG1sRm9yPXtpbnB1dElkfT5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydjb21ib2JveC1pY29uJ119XG4gICAgICAgICAgb25DbGljaz17KCkgPT4gb25DbG9zZSgpfVxuICAgICAgICAgIG9uS2V5RG93bj17ZSA9PiBpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQoZSkgJiYgb25DbG9zZSgpfVxuICAgICAgICAgIGFyaWEtbGFiZWw9e2RpYWxvZ1NlY29uZGFyeUJ1dHRvblRleHR9XG4gICAgICAgICAgdGFiSW5kZXg9ezB9XG4gICAgICAgID5cbiAgICAgICAgICA8SWNvbiBpbWc9XCJhcnJvd1wiIC8+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlc1sncmlnaHQtY29sdW1uJ119PlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzWydjb21ib2JveC1sYWJlbCddfSBpZD17bGFiZWxJZH0+XG4gICAgICAgICAgICB7bGFiZWx9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxBdXRvc3VnZ2VzdFBhdGNoXG4gICAgICAgICAgICBhbHdheXNSZW5kZXJTdWdnZXN0aW9uc1xuICAgICAgICAgICAgaWQ9e2lkfVxuICAgICAgICAgICAgc3VnZ2VzdGlvbnM9e3N1Z2dlc3Rpb25zfVxuICAgICAgICAgICAgb25TdWdnZXN0aW9uc0ZldGNoUmVxdWVzdGVkPXtmZXRjaEZ1bmN0aW9ufVxuICAgICAgICAgICAgZ2V0U3VnZ2VzdGlvblZhbHVlPXtnZXRWYWx1ZX1cbiAgICAgICAgICAgIHJlbmRlclN1Z2dlc3Rpb249e3JlbmRlckl0ZW19XG4gICAgICAgICAgICAvLyBmb2N1c0lucHV0T25TdWdnZXN0aW9uQ2xpY2sgbXVzdCBiZSBzZXQgdG8gdHJ1ZS5cbiAgICAgICAgICAgIC8vIElmIHNldCB0byBmYWxzZSwgaW5wdXQgd29uJ3QgYmUgZm9jdXNlZCB3aGVuIHVzZXIgY2xpY2tzIG9uXG4gICAgICAgICAgICAvLyBGaWxsIGlucHV0IGJ1dHRvbiBpbiBzdWdnZXN0aW9uIGxpc3QuIChkaWFnb25hbCBhcnJvdyBpbiBzdHJlZXQgbmFtZSBpdGVtcylcbiAgICAgICAgICAgIGZvY3VzSW5wdXRPblN1Z2dlc3Rpb25DbGlja1xuICAgICAgICAgICAgc2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnM9eygpID0+IHRydWV9XG4gICAgICAgICAgICBpbnB1dFByb3BzPXt7XG4gICAgICAgICAgICAgIC4uLmlucHV0UHJvcHMsXG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogY3goXG4gICAgICAgICAgICAgICAgYCR7c3R5bGVzLmlucHV0fSAke3N0eWxlc1tpZF0gfHwgJyd9ICR7XG4gICAgICAgICAgICAgICAgICBpbnB1dFByb3BzLnZhbHVlID8gc3R5bGVzLmhhc1ZhbHVlIDogJydcbiAgICAgICAgICAgICAgICB9YCxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgYXV0b0ZvY3VzOiB0cnVlLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHJlbmRlcklucHV0Q29tcG9uZW50PXtwID0+IChcbiAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgYXJpYS1sYWJlbD17YXJpYUxhYmVsfSBpZD17aWR9IHsuLi5wfSAvPlxuICAgICAgICAgICAgICAgIHt2YWx1ZSAmJiBjbGVhckJ1dHRvbigpfVxuICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB0aGVtZT17c3R5bGVzfVxuICAgICAgICAgICAgb25TdWdnZXN0aW9uU2VsZWN0ZWQ9e29uU2VsZWN0fVxuICAgICAgICAgICAgcmVmPXtpbnB1dFJlZn1cbiAgICAgICAgICAvPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9O1xuICBpZiAoZm9jdXNJbnB1dCAmJiBpbnB1dFJlZi5jdXJyZW50Py5pbnB1dCkge1xuICAgIGlucHV0UmVmLmN1cnJlbnQuaW5wdXQuZm9jdXMoKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFJlYWN0TW9kYWxcbiAgICAgIGlzT3Blbj17c2VhcmNoT3Blbn1cbiAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydtb2JpbGUtbW9kYWwnXX1cbiAgICAgIG92ZXJsYXlDbGFzc05hbWU9e3N0eWxlc1snbW9iaWxlLW1vZGFsLW92ZXJsYXknXX1cbiAgICAgIG9uQWZ0ZXJDbG9zZT17b25DbG9zZX1cbiAgICAgIHNob3VsZENsb3NlT25Fc2NcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydtb2JpbGUtbW9kYWwtY29udGVudCddfVxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICctLWNvbG9yJzogYCR7Y29sb3J9YCxcbiAgICAgICAgICAnLS1hY2Nlc3NpYmxlLXByaW1hcnktY29sb3InOiBhY2Nlc3NpYmxlUHJpbWFyeUNvbG9yLFxuICAgICAgICAgICctLWhvdmVyLWNvbG9yJzogYCR7aG92ZXJDb2xvcn1gLFxuICAgICAgICAgICctLWZvbnQtd2VpZ2h0LW1lZGl1bSc6IGZvbnRXZWlnaHRzLm1lZGl1bSxcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge3JlbmRlckNvbnRlbnQoKX1cbiAgICAgICAge3JlbmRlckRpYWxvZ01vZGFsKCl9XG4gICAgICA8L2Rpdj5cbiAgICA8L1JlYWN0TW9kYWw+XG4gICk7XG59O1xuXG5Nb2JpbGVTZWFyY2gucHJvcFR5cGVzID0ge1xuICBhcHBFbGVtZW50OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGNsb3NlSGFuZGxlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBjbGVhcklucHV0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgY2xlYXJJbnB1dEJ1dHRvblRleHQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgc3VnZ2VzdGlvbnM6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICBpbnB1dFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIH0pLmlzUmVxdWlyZWQsXG4gIGZldGNoRnVuY3Rpb246IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGdldFN1Z2dlc3Rpb25WYWx1ZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgcmVuZGVyU3VnZ2VzdGlvbjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25TdWdnZXN0aW9uU2VsZWN0ZWQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGNsZWFyT2xkU2VhcmNoZXM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGFyaWFMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgZGlhbG9nSGVhZGVyVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgZGlhbG9nUHJpbWFyeUJ1dHRvblRleHQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGRpYWxvZ1NlY29uZGFyeUJ1dHRvblRleHQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGZvY3VzSW5wdXQ6IFByb3BUeXBlcy5ib29sLFxuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgaG92ZXJDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgYWNjZXNzaWJsZVByaW1hcnlDb2xvcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBzZWFyY2hPcGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBmb250V2VpZ2h0czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBtZWRpdW06IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgfSkuaXNSZXF1aXJlZCxcbiAgc2hvd1Njcm9sbDogUHJvcFR5cGVzLmJvb2wsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBNb2JpbGVTZWFyY2g7XG4iLCIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXCJyZWFjdFwiXSwgZmFjdG9yeSk7XG5cdGVsc2Uge1xuXHRcdHZhciBhID0gdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnID8gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIikpIDogZmFjdG9yeShyb290W1wicmVhY3RcIl0pO1xuXHRcdGZvcih2YXIgaSBpbiBhKSAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnID8gZXhwb3J0cyA6IHJvb3QpW2ldID0gYVtpXTtcblx0fVxufSkodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHRoaXMsIGZ1bmN0aW9uKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfcmVhY3RfXykge1xucmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4vKioqKioqLyBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4vKioqKioqLyBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuLyoqKioqKi8gXHRcdHJldHVybiBucztcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3BhY2thZ2VzL2hvb2tzL3NyYy9pbmRleC50c1wiKTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKHtcblxuLyoqKi8gXCIuL3BhY2thZ2VzL2hvb2tzL3NyYy9pbmRleC50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3BhY2thZ2VzL2hvb2tzL3NyYy9pbmRleC50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX2V4cG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9fZXhwb3J0U3RhcikgfHwgZnVuY3Rpb24obSwgZXhwb3J0cykge1xuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXhwb3J0cywgcCkpIF9fY3JlYXRlQmluZGluZyhleHBvcnRzLCBtLCBwKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5fX2V4cG9ydFN0YXIoX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi91c2VPdXRzaWRlUmVhY3RlciAqLyBcIi4vcGFja2FnZXMvaG9va3Mvc3JjL3VzZU91dHNpZGVSZWFjdGVyLnRzeFwiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIoX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi91c2VTY3JvbGxMb2NrICovIFwiLi9wYWNrYWdlcy9ob29rcy9zcmMvdXNlU2Nyb2xsTG9jay50c1wiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIoX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi91c2VBcnJvd05hdmlnYXRpb24gKi8gXCIuL3BhY2thZ2VzL2hvb2tzL3NyYy91c2VBcnJvd05hdmlnYXRpb24udHN4XCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3VzZUludGVyc2VjdGlvbk9ic2VydmVyICovIFwiLi9wYWNrYWdlcy9ob29rcy9zcmMvdXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIudHNcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdXNlSXNCcmVha3BvaW50ICovIFwiLi9wYWNrYWdlcy9ob29rcy9zcmMvdXNlSXNCcmVha3BvaW50LnRzXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3VzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QgKi8gXCIuL3BhY2thZ2VzL2hvb2tzL3NyYy91c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0LnRzXCIpLCBleHBvcnRzKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3BhY2thZ2VzL2hvb2tzL3NyYy91c2VBcnJvd05hdmlnYXRpb24udHN4XCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9wYWNrYWdlcy9ob29rcy9zcmMvdXNlQXJyb3dOYXZpZ2F0aW9uLnRzeCAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnVzZUFycm93TmF2aWdhdGlvbiA9IHZvaWQgMDtcbnZhciByZWFjdF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgcmVhY3QgKi8gXCJyZWFjdFwiKTtcbnZhciB1c2VBcnJvd05hdmlnYXRpb24gPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgbGlzdEl0ZW1zID0gX2EubGlzdEl0ZW1zLCBvbkFycm93VXBPckRvd24gPSBfYS5vbkFycm93VXBPckRvd247XG4gICAgdmFyIF9iID0gKDAsIHJlYWN0XzEudXNlU3RhdGUpKDApLCBzZWxlY3RlZEluZGV4ID0gX2JbMF0sIHNldFNlbGVjdGVkSW5kZXggPSBfYlsxXTtcbiAgICB2YXIgc2V0U2VsZWN0ZWRJbmRleFdpdGhVc2VDYWxsYmFjayA9ICgwLCByZWFjdF8xLnVzZUNhbGxiYWNrKShmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgc2V0U2VsZWN0ZWRJbmRleChpbmRleCk7XG4gICAgfSwgW2xpc3RJdGVtc10pO1xuICAgIHZhciBoYW5kbGVVcEFycm93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoc2VsZWN0ZWRJbmRleCA+IDApIHtcbiAgICAgICAgICAgIHNldFNlbGVjdGVkSW5kZXhXaXRoVXNlQ2FsbGJhY2soc2VsZWN0ZWRJbmRleCAtIDEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2V0U2VsZWN0ZWRJbmRleFdpdGhVc2VDYWxsYmFjayhsaXN0SXRlbXMubGVuZ3RoIC0gMSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHZhciBoYW5kbGVEb3duQXJyb3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChzZWxlY3RlZEluZGV4IDwgbGlzdEl0ZW1zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIHNldFNlbGVjdGVkSW5kZXhXaXRoVXNlQ2FsbGJhY2soc2VsZWN0ZWRJbmRleCArIDEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2V0U2VsZWN0ZWRJbmRleFdpdGhVc2VDYWxsYmFjaygwKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdmFyIGhhbmRsZUtleURvd24gPSBmdW5jdGlvbiAoa2V5Ym9hcmRFdmVudCkge1xuICAgICAgICB2YXIga2V5ID0ga2V5Ym9hcmRFdmVudC5rZXk7XG4gICAgICAgIGlmIChsaXN0SXRlbXMgPT09IG51bGwgfHwgbGlzdEl0ZW1zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBsaXN0SXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgICAgICAgICAgICBvbkFycm93VXBPckRvd24gJiYgb25BcnJvd1VwT3JEb3duKCk7XG4gICAgICAgICAgICAgICAga2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGhhbmRsZVVwQXJyb3coKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgICAgICAgICAgICBvbkFycm93VXBPckRvd24gJiYgb25BcnJvd1VwT3JEb3duKCk7XG4gICAgICAgICAgICAgICAga2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGhhbmRsZURvd25BcnJvdygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAoMCwgcmVhY3RfMS51c2VFZmZlY3QpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVLZXlEb3duKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlS2V5RG93bik7IH07XG4gICAgfSk7XG4gICAgKDAsIHJlYWN0XzEudXNlRWZmZWN0KShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNldFNlbGVjdGVkSW5kZXhXaXRoVXNlQ2FsbGJhY2soMCk7XG4gICAgfSwgW2xpc3RJdGVtc10pO1xuICAgIHJldHVybiB7IHNlbGVjdGVkSW5kZXg6IHNlbGVjdGVkSW5kZXggfTtcbn07XG5leHBvcnRzLnVzZUFycm93TmF2aWdhdGlvbiA9IHVzZUFycm93TmF2aWdhdGlvbjtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3BhY2thZ2VzL2hvb2tzL3NyYy91c2VJbnRlcnNlY3Rpb25PYnNlcnZlci50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3BhY2thZ2VzL2hvb2tzL3NyYy91c2VJbnRlcnNlY3Rpb25PYnNlcnZlci50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy51c2VJbnRlcnNlY3Rpb25PYnNlcnZlciA9IHZvaWQgMDtcbnZhciByZWFjdF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgcmVhY3QgKi8gXCJyZWFjdFwiKTtcbnZhciB1c2VJbnRlcnNlY3Rpb25PYnNlcnZlciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGNvbnRhaW5lclJlZiA9ICgwLCByZWFjdF8xLnVzZVJlZikobnVsbCk7XG4gICAgdmFyIF9hID0gKDAsIHJlYWN0XzEudXNlU3RhdGUpKGZhbHNlKSwgaXNWaXNpYmxlID0gX2FbMF0sIHNldElzVmlzaWJsZSA9IF9hWzFdO1xuICAgIHZhciBoYW5kbGVJbnRlcnNlY3Rpb24gPSBmdW5jdGlvbiAoZW50cmllcykge1xuICAgICAgICB2YXIgZW50cnkgPSBlbnRyaWVzWzBdO1xuICAgICAgICBzZXRJc1Zpc2libGUoZW50cnkuaXNJbnRlcnNlY3RpbmcpO1xuICAgIH07XG4gICAgKDAsIHJlYWN0XzEudXNlRWZmZWN0KShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh3aW5kb3cgJiYgd2luZG93LkludGVyc2VjdGlvbk9ic2VydmVyKSB7XG4gICAgICAgICAgICB2YXIgb2JzZXJ2ZXJfMSA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihoYW5kbGVJbnRlcnNlY3Rpb24sIG9wdGlvbnMpO1xuICAgICAgICAgICAgdmFyIGVsZW1lbnRfMSA9IGNvbnRhaW5lclJlZi5jdXJyZW50O1xuICAgICAgICAgICAgaWYgKGNvbnRhaW5lclJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXJfMS5vYnNlcnZlKGNvbnRhaW5lclJlZi5jdXJyZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRfMSkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcl8xLnVub2JzZXJ2ZShlbGVtZW50XzEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzZXRJc1Zpc2libGUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgfSwgW2NvbnRhaW5lclJlZiwgb3B0aW9uc10pO1xuICAgIHJldHVybiB7IGNvbnRhaW5lclJlZjogY29udGFpbmVyUmVmLCBpc1Zpc2libGU6IGlzVmlzaWJsZSB9O1xufTtcbmV4cG9ydHMudXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSB1c2VJbnRlcnNlY3Rpb25PYnNlcnZlcjtcbmV4cG9ydHMuZGVmYXVsdCA9IGV4cG9ydHMudXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXI7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9wYWNrYWdlcy9ob29rcy9zcmMvdXNlSXNCcmVha3BvaW50LnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3BhY2thZ2VzL2hvb2tzL3NyYy91c2VJc0JyZWFrcG9pbnQudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnVzZUlzQnJlYWtwb2ludCA9IHZvaWQgMDtcbnZhciByZWFjdF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgcmVhY3QgKi8gXCJyZWFjdFwiKTtcbnZhciBicmVha3BvaW50cyA9IHtcbiAgICB4czogMSxcbiAgICBtb2JpbGVTbWFsbDogMzIwLFxuICAgIG1vYmlsZTogMzc1LFxuICAgIHRhYmxldDogNzY4LFxuICAgIHRhYmxldExhcmdlOiA5MjAsXG4gICAgZGVza3RvcFNtYWxsOiAxMDI0LFxuICAgIGRlc2t0b3A6IDEyNjAsXG4gICAgZGVza3RvcExhcmdlOiAxNDQwXG59O1xudmFyIHVzZUlzQnJlYWtwb2ludCA9IGZ1bmN0aW9uIChicmVha3BvaW50KSB7XG4gICAgdmFyIF9hID0gKDAsIHJlYWN0XzEudXNlU3RhdGUpKG51bGwpLCBzY3JlZW5XaWR0aCA9IF9hWzBdLCBzZXRTY3JlZW5XaWR0aCA9IF9hWzFdO1xuICAgIHZhciBoYW5kbGVSZXNpemUgPSAoMCwgcmVhY3RfMS51c2VDYWxsYmFjaykoZnVuY3Rpb24gKCkge1xuICAgICAgICBzZXRTY3JlZW5XaWR0aCh3aW5kb3cuaW5uZXJXaWR0aCk7XG4gICAgfSwgW10pO1xuICAgICgwLCByZWFjdF8xLnVzZUVmZmVjdCkoZnVuY3Rpb24gKCkge1xuICAgICAgICBoYW5kbGVSZXNpemUoKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIH0sIFtdKTtcbiAgICAoMCwgcmVhY3RfMS51c2VFZmZlY3QpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZVJlc2l6ZSwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZVJlc2l6ZSk7IH07XG4gICAgfSwgW2hhbmRsZVJlc2l6ZSwgc2NyZWVuV2lkdGhdKTtcbiAgICByZXR1cm4gc2NyZWVuV2lkdGggPj0gYnJlYWtwb2ludHNbYnJlYWtwb2ludF07XG59O1xuZXhwb3J0cy51c2VJc0JyZWFrcG9pbnQgPSB1c2VJc0JyZWFrcG9pbnQ7XG5leHBvcnRzLmRlZmF1bHQgPSBleHBvcnRzLnVzZUlzQnJlYWtwb2ludDtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3BhY2thZ2VzL2hvb2tzL3NyYy91c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0LnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9wYWNrYWdlcy9ob29rcy9zcmMvdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdC50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QgPSB2b2lkIDA7XG52YXIgcmVhY3RfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHJlYWN0ICovIFwicmVhY3RcIik7XG5leHBvcnRzLnVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHJlYWN0XzEudXNlTGF5b3V0RWZmZWN0IDogcmVhY3RfMS51c2VFZmZlY3Q7XG5leHBvcnRzLmRlZmF1bHQgPSBleHBvcnRzLnVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3Q7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9wYWNrYWdlcy9ob29rcy9zcmMvdXNlT3V0c2lkZVJlYWN0ZXIudHN4XCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3BhY2thZ2VzL2hvb2tzL3NyYy91c2VPdXRzaWRlUmVhY3Rlci50c3ggKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnVzZU91dHNpZGVSZWFjdGVyID0gdm9pZCAwO1xudmFyIHJlYWN0XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISByZWFjdCAqLyBcInJlYWN0XCIpO1xuLyoqXG4gKiBDYWxscyByZWFjdGVyRnVuY3Rpb24gaWYgdGhlIHVzZXIgY2xpY2tzIG91dHNpZGUgdGhlIGVsZW1lbnQgdGhhdCBoYXMgcmVmIGFzIGEgcmVmZXJlbmNlLlxuICovXG5mdW5jdGlvbiB1c2VPdXRzaWRlUmVhY3RlcihyZWYsIHJlYWN0ZXJGdW5jdGlvbikge1xuICAgIGZ1bmN0aW9uIGhhbmRsZUNsaWNrT3V0c2lkZShldmVudCkge1xuICAgICAgICBpZiAocmVmLmN1cnJlbnQgJiYgIXJlZi5jdXJyZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICAgIHJlYWN0ZXJGdW5jdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuICAgICgwLCByZWFjdF8xLnVzZUVmZmVjdCkoZnVuY3Rpb24gKCkge1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVDbGlja091dHNpZGUpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgaGFuZGxlQ2xpY2tPdXRzaWRlKTtcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbmV4cG9ydHMudXNlT3V0c2lkZVJlYWN0ZXIgPSB1c2VPdXRzaWRlUmVhY3RlcjtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3BhY2thZ2VzL2hvb2tzL3NyYy91c2VTY3JvbGxMb2NrLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9wYWNrYWdlcy9ob29rcy9zcmMvdXNlU2Nyb2xsTG9jay50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnVzZVNjcm9sbExvY2sgPSB2b2lkIDA7XG52YXIgcmVhY3RfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHJlYWN0ICovIFwicmVhY3RcIik7XG4vLyBEaXNhYmxlIGJvZHkgc2Nyb2xsaW5nIHdoZW4gb3ZlcmxheSBpcyB2aXNpYmxlLlxuLy8gUHJhY3RpY2FsIGluIGNvbmp1bmN0aW9uIHdpdGggZS5nLiByZWFjdC1tb2RhbDpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LW1vZGFsL2lzc3Vlcy8xOTFcbnZhciB1c2VTY3JvbGxMb2NrID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBsb2NrID0gKDAsIHJlYWN0XzEudXNlQ2FsbGJhY2spKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHNjcm9sbFkgPSB3aW5kb3cuc2Nyb2xsWSArIFwicHhcIjtcbiAgICAgICAgdmFyIGJvZHkgPSBkb2N1bWVudC5ib2R5O1xuICAgICAgICBib2R5LnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJztcbiAgICAgICAgYm9keS5zdHlsZS50b3AgPSBcIi1cIiArIHNjcm9sbFk7XG4gICAgfSwgW10pO1xuICAgIHZhciB1bmxvY2sgPSAoMCwgcmVhY3RfMS51c2VDYWxsYmFjaykoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYm9keSA9IGRvY3VtZW50LmJvZHk7XG4gICAgICAgIHZhciBzY3JvbGxZID0gYm9keS5zdHlsZS50b3A7XG4gICAgICAgIHZhciBwYXJzZWRTY3JvbGxZID0gcGFyc2VJbnQoc2Nyb2xsWSB8fCAnMCcpICogLTE7XG4gICAgICAgIGJvZHkuc3R5bGUucG9zaXRpb24gPSAnJztcbiAgICAgICAgYm9keS5zdHlsZS50b3AgPSAnJztcbiAgICAgICAgaWYgKHBhcnNlZFNjcm9sbFkpIHtcbiAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCBwYXJzZUludChzY3JvbGxZIHx8ICcwJykgKiAtMSk7XG4gICAgICAgIH1cbiAgICB9LCBbXSk7XG4gICAgcmV0dXJuIHsgbG9jazogbG9jaywgdW5sb2NrOiB1bmxvY2sgfTtcbn07XG5leHBvcnRzLnVzZVNjcm9sbExvY2sgPSB1c2VTY3JvbGxMb2NrO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcInJlYWN0XCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogZXh0ZXJuYWwgXCJyZWFjdFwiICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3JlYWN0X187XG5cbi8qKiovIH0pXG5cbi8qKioqKiovIH0pO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgKi9cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGkxOG5leHQgZnJvbSAnaTE4bmV4dCc7XG5pbXBvcnQgY3ggZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgQXV0b3N1Z2dlc3QgZnJvbSAncmVhY3QtYXV0b3N1Z2dlc3QnO1xuaW1wb3J0IHsgZXhlY3V0ZVNlYXJjaCB9IGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1leGVjdXRlLXNlYXJjaC1pbW1pZGlhdGUnO1xuaW1wb3J0IFN1Z2dlc3Rpb25JdGVtIGZyb20gJ0BkaWdpdHJhbnNpdC1jb21wb25lbnQvZGlnaXRyYW5zaXQtY29tcG9uZW50LXN1Z2dlc3Rpb24taXRlbSc7XG5pbXBvcnQge1xuICBnZXROYW1lTGFiZWwsXG4gIGdldFN0b3BDb2RlLFxufSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtdW5pcS1ieS1sYWJlbCc7XG5pbXBvcnQgeyBnZXRTdG9wTmFtZSB9IGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1oZWxwZXJzJztcbmltcG9ydCBnZXRMYWJlbCBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWxhYmVsJztcbmltcG9ydCBJY29uIGZyb20gJ0BkaWdpdHJhbnNpdC1jb21wb25lbnQvZGlnaXRyYW5zaXQtY29tcG9uZW50LWljb24nO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQtdGltZXpvbmUnO1xuaW1wb3J0ICdtb21lbnQvbG9jYWxlL2ZpJztcbmltcG9ydCAnbW9tZW50L2xvY2FsZS9zdic7XG5pbXBvcnQgJ21vbWVudC9sb2NhbGUvZGUnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoL2lzRXF1YWwnO1xuaW1wb3J0IGlzRW1wdHkgZnJvbSAnbG9kYXNoL2lzRW1wdHknO1xuaW1wb3J0IHRyYW5zbGF0aW9ucyBmcm9tICcuL2hlbHBlcnMvdHJhbnNsYXRpb25zJztcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9oZWxwZXJzL3N0eWxlcy5zY3NzJztcbmltcG9ydCBNb2JpbGVTZWFyY2ggZnJvbSAnLi9oZWxwZXJzL01vYmlsZVNlYXJjaCc7XG5pbXBvcnQgd2l0aFNjcm9sbExvY2sgZnJvbSAnLi9oZWxwZXJzL3dpdGhTY3JvbGxMb2NrJztcblxubW9tZW50LmxvY2FsZSgnZW4nKTtcblxuaTE4bmV4dC5pbml0KHtcbiAgZmFsbGJhY2tMbmc6ICdmaScsXG4gIGRlZmF1bHROUzogJ3RyYW5zbGF0aW9uJyxcbiAgaW50ZXJwb2xhdGlvbjoge1xuICAgIGVzY2FwZVZhbHVlOiBmYWxzZSwgLy8gbm90IG5lZWRlZCBmb3IgcmVhY3QgYXMgaXQgZXNjYXBlcyBieSBkZWZhdWx0XG4gIH0sXG59KTtcblxuY29uc3QgTG9hZGluZyA9IHByb3BzID0+IChcbiAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1snc3Bpbm5lci1sb2FkZXInXX0+XG4gICAgeyhwcm9wcyAmJiBwcm9wcy5jaGlsZHJlbikgfHwgKFxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXNbJ3NyLW9ubHknXX0+e2kxOG5leHQudCgnbG9hZGluZycpfTwvc3Bhbj5cbiAgICApfVxuICA8L2Rpdj5cbik7XG5cbkxvYWRpbmcucHJvcFR5cGVzID0ge1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG59O1xuXG5jb25zdCBnZXRQbGF0Zm9ybSA9IGFkZGVuZHVtID0+IHtcbiAgaWYgKCFhZGRlbmR1bSB8fCAhYWRkZW5kdW0uR1RGUy5wbGF0Zm9ybSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgeyBtb2RlcywgcGxhdGZvcm0gfSA9IGFkZGVuZHVtLkdURlM7XG4gIGNvbnN0IHR5cGUgPVxuICAgIG1vZGVzICYmIG1vZGVzWzBdID09PSAnUkFJTCcgPyBpMThuZXh0LnQoJ3RyYWNrJykgOiBpMThuZXh0LnQoJ3BsYXRmb3JtJyk7XG4gIHJldHVybiBbdHlwZSwgcGxhdGZvcm1dO1xufTtcblxuZnVuY3Rpb24gZ2V0U3VnZ2VzdGlvbkNvbnRlbnQoaXRlbSkge1xuICBpZiAoaXRlbS50eXBlICE9PSAnRnV0dXJlUm91dGUnKSB7XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ1NlbGVjdEZyb21NYXAnKSB7XG4gICAgICByZXR1cm4gWycnLCBpMThuZXh0LnQoJ3NlbGVjdC1mcm9tLW1hcCcpXTtcbiAgICB9XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ0N1cnJlbnRMb2NhdGlvbicpIHtcbiAgICAgIHJldHVybiBbJycsIGkxOG5leHQudCgndXNlLW93bi1wb3NpdGlvbicpXTtcbiAgICB9XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnKSB7XG4gICAgICByZXR1cm4gWycnLCBpMThuZXh0LnQoJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnKV07XG4gICAgfVxuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3QgKi9cbiAgICBsZXQgW25hbWUsIGxhYmVsXSA9IGdldE5hbWVMYWJlbChpdGVtLnByb3BlcnRpZXMsIHRydWUpO1xuICAgIGxldCBzdWdnZXN0aW9uVHlwZTtcbiAgICBpZiAoXG4gICAgICBpdGVtLnByb3BlcnRpZXMubGF5ZXIudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnYmlrZXJlbnRhbCcpIHx8XG4gICAgICBpdGVtLnByb3BlcnRpZXMubGF5ZXIudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnYmlrZXN0YXRpb24nKVxuICAgICkge1xuICAgICAgc3VnZ2VzdGlvblR5cGUgPSBpMThuZXh0LnQoJ2Jpa2VyZW50YWxzdGF0aW9uJyk7XG4gICAgICBjb25zdCBzdG9wQ29kZSA9IGl0ZW0ucHJvcGVydGllcy5sYWJlbElkO1xuICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uVHlwZSwgbmFtZSwgdW5kZWZpbmVkLCBzdG9wQ29kZV07XG4gICAgfVxuXG4gICAgaWYgKGl0ZW0ucHJvcGVydGllcy5sYXllciA9PT0gJ2Jpa2VwYXJrJykge1xuICAgICAgc3VnZ2VzdGlvblR5cGUgPSBpMThuZXh0LnQoJ2Jpa2VwYXJrJyk7XG4gICAgICByZXR1cm4gW3N1Z2dlc3Rpb25UeXBlLCBuYW1lLCB1bmRlZmluZWQsIHVuZGVmaW5lZF07XG4gICAgfVxuXG4gICAgaWYgKGl0ZW0ucHJvcGVydGllcy5sYXllciA9PT0gJ2NhcnBhcmsnKSB7XG4gICAgICBzdWdnZXN0aW9uVHlwZSA9IGkxOG5leHQudCgnY2FycGFyaycpO1xuICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uVHlwZSwgbmFtZSwgdW5kZWZpbmVkLCB1bmRlZmluZWRdO1xuICAgIH1cblxuICAgIGlmIChpdGVtLnByb3BlcnRpZXMubW9kZSkge1xuICAgICAgc3VnZ2VzdGlvblR5cGUgPSBpMThuZXh0LnQoXG4gICAgICAgIGl0ZW0ucHJvcGVydGllcy5tb2RlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnZmF2b3VyaXRlJywgJycpLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbGF5ZXIgPSBpdGVtLnByb3BlcnRpZXMubGF5ZXJcbiAgICAgICAgLnJlcGxhY2UoJ3JvdXRlLScsICcnKVxuICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAucmVwbGFjZSgnZmF2b3VyaXRlJywgJycpO1xuICAgICAgc3VnZ2VzdGlvblR5cGUgPSBpMThuZXh0LnQobGF5ZXIpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGl0ZW0ucHJvcGVydGllcy5pZCAmJlxuICAgICAgKGl0ZW0ucHJvcGVydGllcy5sYXllciA9PT0gJ3N0b3AnIHx8IGl0ZW0ucHJvcGVydGllcy5sYXllciA9PT0gJ3N0YXRpb24nKVxuICAgICkge1xuICAgICAgY29uc3Qgc3RvcENvZGUgPSBnZXRTdG9wQ29kZShpdGVtLnByb3BlcnRpZXMpO1xuICAgICAgY29uc3QgbW9kZSA9IGl0ZW0ucHJvcGVydGllcy5hZGRlbmR1bT8uR1RGUy5tb2RlcztcbiAgICAgIGNvbnN0IHBsYXRmb3JtID0gZ2V0UGxhdGZvcm0oaXRlbS5wcm9wZXJ0aWVzLmFkZGVuZHVtKTtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHN1Z2dlc3Rpb25UeXBlLFxuICAgICAgICBnZXRTdG9wTmFtZShuYW1lLCBzdG9wQ29kZSksXG4gICAgICAgIGxhYmVsLFxuICAgICAgICBzdG9wQ29kZSxcbiAgICAgICAgbW9kZSxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICBdO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdmYXZvdXJpdGVTdG9wJyB8fFxuICAgICAgaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnZmF2b3VyaXRlU3RhdGlvbidcbiAgICApIHtcbiAgICAgIGNvbnN0IHsgYWRkcmVzcywgY29kZSB9ID0gaXRlbS5wcm9wZXJ0aWVzO1xuICAgICAgY29uc3Qgc3RvTmFtZSA9IGFkZHJlc3MgPyBnZXRTdG9wTmFtZShhZGRyZXNzLnNwbGl0KCcsJylbMF0sIGNvZGUpIDogbmFtZTtcbiAgICAgIGNvbnN0IHBsYXRmb3JtID0gZ2V0UGxhdGZvcm0oaXRlbS5wcm9wZXJ0aWVzLmFkZGVuZHVtKTtcbiAgICAgIHJldHVybiBbc3VnZ2VzdGlvblR5cGUsIHN0b05hbWUsIGxhYmVsLCBjb2RlLCB1bmRlZmluZWQsIHBsYXRmb3JtXTtcbiAgICB9XG4gICAgcmV0dXJuIFtzdWdnZXN0aW9uVHlwZSwgbmFtZSwgbGFiZWxdO1xuICB9XG4gIGNvbnN0IHsgb3JpZ2luLCBkZXN0aW5hdGlvbiB9ID0gaXRlbS5wcm9wZXJ0aWVzO1xuICBjb25zdCB0YWlsMSA9IG9yaWdpbi5sb2NhbGl0eSA/IGAsICR7b3JpZ2luLmxvY2FsaXR5fSBmb29iYXJgIDogJyc7XG4gIGNvbnN0IHRhaWwyID0gZGVzdGluYXRpb24ubG9jYWxpdHkgPyBgLCAke2Rlc3RpbmF0aW9uLmxvY2FsaXR5fWAgOiAnJztcbiAgY29uc3QgbmFtZTEgPSBvcmlnaW4ubmFtZTtcbiAgY29uc3QgbmFtZTIgPSBkZXN0aW5hdGlvbi5uYW1lO1xuICByZXR1cm4gW1xuICAgIGkxOG5leHQudCgnZnV0dXJlLXJvdXRlJyksXG4gICAgYCR7aTE4bmV4dC50KCdvcmlnaW4nKX0gJHtuYW1lMX0ke3RhaWwxfSAke2kxOG5leHQudChcbiAgICAgICdkZXN0aW5hdGlvbicsXG4gICAgKX0gJHtuYW1lMn0ke3RhaWwyfWAsXG4gICAgaXRlbS50cmFuc2xhdGVkVGV4dCxcbiAgXTtcbn1cblxuZnVuY3Rpb24gdHJhbnNsYXRlRnV0dXJlUm91dGVTdWdnZXN0aW9uVGltZShpdGVtKSB7XG4gIGNvbnN0IHRpbWUgPSBtb21lbnQudW5peChpdGVtLnByb3BlcnRpZXMudGltZSk7XG4gIGxldCBzdHIgPSBpdGVtLnByb3BlcnRpZXMuYXJyaXZlQnlcbiAgICA/IGkxOG5leHQudCgnYXJyaXZhbCcpXG4gICAgOiBpMThuZXh0LnQoJ2RlcGFydHVyZScpO1xuICBpZiAodGltZS5pc1NhbWUobW9tZW50KCksICdkYXknKSkge1xuICAgIHN0ciA9IGAke3N0cn0gJHtpMThuZXh0LnQoJ3RvZGF5LWF0Jyl9YDtcbiAgfSBlbHNlIGlmICh0aW1lLmlzU2FtZShtb21lbnQoKS5hZGQoMSwgJ2RheScpLCAnZGF5JykpIHtcbiAgICBzdHIgPSBgJHtzdHJ9ICR7aTE4bmV4dC50KCd0b21vcnJvdy1hdCcpfWA7XG4gIH0gZWxzZSB7XG4gICAgc3RyID0gYCR7c3RyfSAke3RpbWUuZm9ybWF0KCdkZCBELk0uJyl9YDtcbiAgfVxuICBzdHIgPSBgJHtzdHJ9ICR7bW9tZW50KHRpbWUpLmZvcm1hdCgnSEg6bW0nKX1gO1xuICByZXR1cm4gc3RyO1xufVxuLyoqXG4gKiBAZXhhbXBsZVxuICogY29uc3Qgc2VhcmNoQ29udGV4dCA9IHtcbiAqICAgaXNQZWxpYXNMb2NhdGlvbkF3YXJlOiBmYWxzZSAvLyB0cnVlIC8gZmFsc2UgZG9lcyBMZXQgUGVsaWFzIHN1Z2dlc3QgYmFzZWQgb24gY3VycmVudCB1c2VyIGxvY2F0aW9uXG4gKiAgIG1pbmltYWxSZWdleHA6IHVuZGVmaW5lZCAvLyB1c2VkIGZvciB0ZXN0aW5nIG1pbi4gcmVnZXhwLiBGb3IgZXhhbXBsZTogbmV3IFJlZ0V4cCgnLnsyLH0nKSxcbiAqICAgbGluZVJlZ2V4cDogdW5kZWZpbmVkIC8vICBpZGVudGlmeSBzZWFyY2hlcyBmb3Igcm91dGUgbnVtYmVycy9sYWJlbHM6IGJ1cyB8IHRyYWluIHwgbWV0cm8uIEZvciBleGFtcGxlOiBuZXcgUmVnRXhwKFxuICogICAgLy8gICAnKF5bMC05XStbYS16XT8kfF5beXVsZWFwaW5rcnRkel0kfChebVsxMl0/Yj8kKSknLFxuICogICAgLy8gICdpJyxcbiAqICAgIC8vICApLFxuICogICBVUkxfUEVMSUFTOiAnJyAvLyB1cmwgZm9yIHBlbGlhcyBzZWFyY2hlc1xuICogICBmZWVkSURzOiBbJ0hTTCcsICdIU0xMYXV0dGEnXSAvLyBGZWVkSWQncyBsaWtlICBbSFNMLCBIU0xMYXV0dGFdXG4gKiAgIGdlb2NvZGluZ1NvdXJjZXM6IFsnb2EnLCdvc20nLCdubHNmaSddICAvLyBzb3VyY2VzIGZvciBnZW9jb2RpbmdcbiAqICAgZ2VvY29kaW5nU2VhcmNoUGFyYW1zOyB7fSAgLy8gU2VhcmNocGFybWFzIGZybyBnZW9jb2RpbmdcbiAqICAgZ2V0RmF2b3VyaXRlTG9jYXRpb25zOiAoKSA9PiAoe30pLCAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgYXJyYXkgb2YgZmF2b3VyaXRlIGxvY2F0aW9ucy5cbiAqICAgZ2V0RmF2b3VyaXRlU3RvcHM6ICgpID0+ICh7fSksICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgYXJyYXkgb2YgZmF2b3VyaXRlIHN0b3BzLlxuICogICBnZXRMYW5ndWFnZTogKCkgPT4gKHt9KSwgICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBjdXJyZW50IGxhbmd1YWdlLlxuICogICBnZXRGYXZvdXJpdGVSb3V0ZXM6ICgpID0+ICh7fSksICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhcnJheSBvZiBmYXZvdXJpdGUgcm91dGVzLlxuICogICBnZXRQb3NpdGlvbnM6ICgpID0+ICh7fSksICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyB1c2VyJ3MgZ2VvbG9jYXRpb24uXG4gKiAgIGdldFJvdXRlc1F1ZXJ5OiAoKSA9PiAoe30pLCAgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHF1ZXJ5IGZvciBmZXRjaGluZyByb3V0ZXMuXG4gKiAgIGdldEFsbEJpa2VSZW50YWxTdGF0aW9uczogKCkgPT4gKHt9KSwgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGFsbCBiaWtlIHJlbnRhbCBzdGF0aW9ucyBmcm9tIGdyYXBocWwgQVBJLlxuICogICBnZXRTdG9wQW5kU3RhdGlvbnNRdWVyeTogKCkgPT4gKHt9KSwgIC8vIEZ1bmN0aW9uIHRoYXQgZmV0Y2hlcyBmYXZvdXJpdGUgc3RvcHMgYW5kIHN0YXRpb25zIGZyb20gZ3JhcGhxbCBBUEkuXG4gKiAgIGdldEZhdm91cml0ZVJvdXRlc1F1ZXJ5OiAoKSA9PiAoe30pLCAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHF1ZXJ5IGZvciBmZXRjaGluZyBmYXZvdXJpdGUgcm91dGVzLlxuICogICBnZXRGYXZvdXJpdGVCaWtlUmVudGFsU3RhdGlvbnM6ICgpID0+ICh7fSksICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgZmF2b3VyaXRlIGJpa2UgcmVudGFsIHN0YXRpb24uXG4gKiAgIGdldEZhdm91cml0ZUJpa2VSZW50YWxTdGF0aW9uc1F1ZXJ5OiAoKSA9PiAoe30pLCAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgcXVlcnkgZm9yIGZldGNoaW5nIGZhdm91cml0ZSBiaWtlIHJlbnRhbCBzdGF0aW9ucy5cbiAqICAgc3RhcnRMb2NhdGlvbldhdGNoOiAoKSA9PiAoe30pLCAgICAgICAvLyBGdW5jdGlvbiB0aGF0IGxvY2F0ZXMgdXNlcnMgZ2VvbG9jYXRpb24uXG4gKiAgIHNhdmVTZWFyY2g6ICgpID0+ICh7fSksICAgICAgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBzYXZlcyBzZWFyY2ggdG8gb2xkIHNlYXJjaGVzIHN0b3JlLlxuICogICBjbGVhck9sZFNlYXJjaGVzOiAoKSA9PiAoe30pLCAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgY2xlYXJzIG9sZCBzZWFyY2hlcyBzdG9yZS5cbiAqICAgZ2V0RnV0dXJlUm91dGVzOiAoKSA9PiAoe30pLCAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybiBmdXR1cmUgcm91dGVzXG4gKiAgIHNhdmVGdXR1cmVSb3V0ZTogKCkgPT4gKHt9KSwgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBzYXZlcyBhIGZ1dHVyZSByb3V0ZVxuICogICBjbGVhckZ1dHVyZVJvdXRlczogKCkgPT4gKHt9KSwgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgY2xlYXJzIGZ1dHVyZSByb3V0ZXNcbiAqIH07XG4gKiBjb25zdCBsYW5nID0gJ2ZpJzsgLy8gZW4sIGZpIG9yIHN2XG4gKiBjb25zdCBvblNlbGVjdCA9IChpdGVtLCBpZCkgPT4ge1xuICogICAgLy8gRnVudGlvbmFsaXR5IHdoZW4gdXNlciBzZWxlY3RzIGEgc3VnZ2VzaW9ucy4gTm8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyBnaXZlbi5cbiAqICAgIHJldHVybiBudWxsO1xuICogfTtcbiAqIGNvbnN0IG9uQ2xlYXIgPSBpZCA9PiB7XG4gKiAgICAvLyBDYWxsZWQgIHdoZW4gdXNlciBjbGlja3MgdGhlIGNsZWFyIHNlYXJjaCBzdHJpbmcgYnV0dG9uLiBObyBkZWZhdWx0IGltcGxlbWVudGF0aW9uLlxuICogICAgcmV0dXJuIG51bGw7XG4gKiB9O1xuICogY29uc3QgdHJhbnNwb3J0TW9kZSA9IHVuZGVmaW5lZDtcbiAqIGNvbnN0IHBsYWNlaG9sZGVyID0gXCJzdG9wLW5lYXIteW91XCI7XG4gKiBjb25zdCB0YXJnZXRzID0gWydMb2NhdGlvbnMnLCAnU3RvcHMnLCAnUm91dGVzJ107IC8vIERlZmluZXMgd2hhdCB5b3UgYXJlIHNlYXJjaGluZy4gYWxsIGF2YWlsYWJsZSBvcHRpb25zIGFyZSBMb2NhdGlvbnMsIFN0b3BzLCBSb3V0ZXMsIEJpa2VSZW50YWxTdGF0aW9ucywgRnV0dXJlUm91dGVzLCBNYXBQb3NpdGlvbiBhbmQgQ3VycmVudFBvc2l0aW9uLiBMZWF2ZSBlbXB0eSB0byBzZWFyY2ggYWxsIHRhcmdldHMuXG4gKiBjb25zdCBzb3VyY2VzID0gWydGYXZvdXJpdGUnLCAnSGlzdG9yeScsICdEYXRhc291cmNlJ10gLy8gRGVmaW5lcyB3aGVyZSB5b3UgYXJlIHNlYXJjaGluZy4gYWxsIGF2YWlsYWJsZSBhcmU6IEZhdm91cml0ZSwgSGlzdG9yeSAocHJldmlvdXNseSBzZWFyY2hlZCBzZWFyY2hlcykgYW5kIERhdGFzb3VyY2UuIExlYXZlIGVtcHR5IHRvIHVzZSBhbGwgc291cmNlcy5cbiAqIHJldHVybiAoXG4gKiAgPERUQXV0b3N1Z2dlc3RcbiAqICAgIGFwcEVsZW1lbnQ9e2FwcEVsZW1lbnR9IC8vIFJlcXVpcmVkLiBSb290IGVsZW1lbnQncyBpZC4gTmVlZGVkIGZvciByZWFjdC1tb2RhbCBjb21wb25lbnQuXG4gKiAgICBzZWFyY2hDb250ZXh0PXtzZWFyY2hDb250ZXh0fVxuICogICAgaWNvbj1cIm9yaWdpblwiIC8vIE9wdGlvbmFsIFN0cmluZyBmb3IgaWNvbiB0aGF0IGlzIHNob3duIGxlZnQgb2Ygc2VhcmNoZmllbGQuIHVzZWQgd2l0aCBJY29uIGxpYnJhcnlcbiAqICAgIGlkPVwib3JpZ2luXCIgLy8gdXNlZCBmb3Igc3R5bGUgcHJvcHMgYW5kIGluZm8gZm9yIGNvbXBvbmVudC5cbiAqICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn0gLy8gU3RyaW5nIHRoYXQgaXMgc2hvd25zIGluaXRhbGx5IGluIHNlYXJjaCBmaWVsZFxuICogICAgdmFsdWU9XCJcIiAvLyBlLmcuIHVzZXIgdHlwZWQgc3RyaW5nIHRoYXQgaXMgc2hvd24gaW4gc2VhcmNoIGZpZWxkXG4gKiAgICBvblNlbGVjdD17b25TZWxlY3R9XG4gKiAgICBvbkNsZWFyPXtvbkNsZWFyfVxuICogICAgYXV0b0ZvY3VzPXtmYWxzZX0gLy8gZGVmaW5lcyB0aGF0IHNob3VsZCB0aGlzIGZpZWxkIGJlIGF1dG9tYXRpY2FsbHkgZm9jdXNlZCB3aGVuIHBhZ2UgaXMgbG9hZGVkLlxuICogICAgbGFuZz17bGFuZ31cbiAqICAgIHRyYW5zcG9ydE1vZGU9e3RyYW5zcG9ydE1vZGV9IC8vIHRyYW5zcG9ydG1vZGUgd2l0aCB3aGljaCB3ZSBmaWx0ZXIgdGhlIHJvdXRlcywgZS5nLiByb3V0ZS1CVVNcbiAqICAgIGdlb2NvZGluZ1NpemU9ezEwfSAvLyBkZWZpbmVzIGhvdyBtYW55IHN0b3BzIGFuZCBzdGF0aW9ucyB0byBmZXRjaCBmcm9tIGdlb2NvZGluZy4gVXNlZnVsIGlmIHlvdSB3YW50IHRvIGZpbHRlciB0aGUgcmVzdWx0cyBhbmQgc3RpbGwgZ2V0IGEgcmVhc29uYWJsZSBhbW91bnQgb2Ygc3VnZ2VzdGlvbnMuXG4gKiAgICBmaWx0ZXJSZXN1bHRzPXtyZXN1bHRzID0+IHJldHVybiByZXN1bHRzfSAvLyBPcHRpb25hbCBmaWx0ZXJpbmcgZnVuY3Rpb24gZm9yIHJvdXRlcyBhbmQgc3RvcHNcbiAqICAgIGhhbmRlbFZpYVBvaW50cz17KCkgPT4gcmV0dXJuIG51bGwgfSAvLyBPcHRpb25hbCBWaWEgcG9pbnQgaGFuZGxpbmcgbG9naWMuIFRoaXMgaXMgY3VycmVudGx5IG1hbmFnZWQgd2l0aCBEVEF1dG9zdWdnZXN0cGFuZWwgYnkgZGVmYXVsdCwgYnV0IGlmIERUQXV0b3N1Z2dlc3QgaXMgdXNlZCBzZXBlcmF0ZWxseSBvd24gaW1wbGVtZW50YXRpb24gbXVzdCBiZSBwcm92aWRlZC5cbiAqICAgIGZvY3VzQ2hhbmdlPXsoKSA9PiByZXR1cm4gbnVsbH0gLy8gV2hlbiBzdWdnZXN0aW9uIGlzIHNlbGVjdGVkLCBoYW5kbGUgY2hhbmdpbmcgZm9jdXMuIFRoaXMgaXMgY3VycmVudGx5IG1hbmFnZWQgd2l0aCBEVEF1dG9zdWdnZXN0cGFuZWwgYnkgZGVmYXVsdCwgYnV0IGlmIERUQXV0b3N1Z2dlc3QgaXMgdXNlZCBzZXBlcmF0ZWxseSBvd24gaW1wbGVtZW50YXRpb24gbXVzdCBiZSBwcm92aWRlZC5cbiAqICAgIHN0b3JlUmVmPXsoKSA9PiByZXR1cm4gbnVsbH0gLy8gRnVuY3Rpb25hbGl0eSB0byBzdG9yZSByZWZzLiBDdXJyZW5sdHkgbWFuYWdlZCB3aXRoIERUQXV0b3N1Z2dlc3RwYW5lbCBieSBkZWZhdWx0LCBidXQgaWYgRFRBdXRvc3VnZ2VzdCBpcyB1c2VkIHNlcGVyYXRlbGx5IG93biBpbXBsZW1lbnRhdGlvbiBtdXN0IGJlIHByb3ZpZGVkLlxuICogICAgc291cmNlcz17c291cmNlc31cbiAqICAgIHRhcmdldHM9e3RhcmdldHN9XG4gKiAgICBpc01vYmlsZSAgLy8gT3B0aW9uYWwuIERlZmF1bHRzIHRvIGZhbHNlLiBXaGV0aGVyIHRvIHVzZSBtb2JpbGUgc2VhcmNoLlxuICogICAgbW9iaWxlTGFiZWw9XCJDdXN0b20gbGFiZWxcIiAvLyBPcHRpb25hbC4gQ3VzdG9tIGxhYmVsIHRleHQgZm9yIGF1dG9zdWdnZXN0IGZpZWxkIG9uIG1vYmlsZS5cbiAqICAgIGlucHV0Q2xhc3NOYW1lPVwiXCIgLy8gT3B0aW9uYWwuIEN1c3RvbSBjbGFzc25hbWUgYXBwbGllZCB0byB0aGUgaW5wdXQgZWxlbWVudCBvZiB0aGUgY29tcG9uZW50IGZvciBwcm92aWRpbmcgQ1NTIHN0eWxlcy5cbiAqICAgIHRyYW5zbGF0ZWRQbGFjZWhvbGRlcj0gLy8gT3B0aW9uYWwuIEN1c3RvbiB0cmFuc2xhdGVkIHBsYWNlaG9sZGVyIHRleHQgZm9yIGF1dG9zdWdnZXN0IGZpZWxkLlxuICovXG5jbGFzcyBEVEF1dG9zdWdnZXN0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBhcHBFbGVtZW50OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgaWNvbjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgdHJhbnNsYXRlZFBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNlYXJjaENvbnRleHQ6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgICBhcmlhTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgb25TZWxlY3Q6IFByb3BUeXBlcy5mdW5jLFxuICAgIHRyYW5zcG9ydE1vZGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZmlsdGVyUmVzdWx0czogUHJvcFR5cGVzLmZ1bmMsXG4gICAgZ2VvY29kaW5nU2l6ZTogUHJvcFR5cGVzLm51bWJlcixcbiAgICBvbkNsZWFyOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBzdG9yZVJlZjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgaGFuZGxlVmlhUG9pbnRzOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBmb2N1c0NoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgbGFuZzogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzb3VyY2VzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nKSxcbiAgICB0YXJnZXRzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nKSxcbiAgICBpc01vYmlsZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgaG92ZXJDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBhY2Nlc3NpYmxlUHJpbWFyeUNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHRpbWVab25lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHBhdGhPcHRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgcm91dGVzUHJlZml4OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgc3RvcHNQcmVmaXg6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgfSksXG4gICAgbW9iaWxlTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgbG9jazogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICB1bmxvY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgcmVmUG9pbnQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgaW5wdXRDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZm9udFdlaWdodHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBtZWRpdW06IFByb3BUeXBlcy5udW1iZXIsXG4gICAgfSksXG4gICAgbW9kZUljb25Db2xvcnM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIG1vZGVTZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc2hvd1Njcm9sbDogUHJvcFR5cGVzLmJvb2wsXG4gICAgaXNFbWJlZGRlZDogUHJvcFR5cGVzLmJvb2wsXG4gIH07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgIGNsYXNzTmFtZTogJycsXG4gICAgaWNvbjogdW5kZWZpbmVkLFxuICAgIHZhbHVlOiAnJyxcbiAgICB0cmFuc3BvcnRNb2RlOiB1bmRlZmluZWQsXG4gICAgbGFuZzogJ2ZpJyxcbiAgICBzb3VyY2VzOiBbXSxcbiAgICBpc01vYmlsZTogZmFsc2UsXG4gICAgY29sb3I6ICcjMDA3YWM5JyxcbiAgICBob3ZlckNvbG9yOiAnIzAwNjJhMScsXG4gICAgYWNjZXNzaWJsZVByaW1hcnlDb2xvcjogJyMwMDc0YmUnLFxuICAgIHRpbWVab25lOiAnRXVyb3BlL0hlbHNpbmtpJyxcbiAgICBwYXRoT3B0czoge1xuICAgICAgcm91dGVzUHJlZml4OiAnbGluamF0JyxcbiAgICAgIHN0b3BzUHJlZml4OiAncHlzYWtpdCcsXG4gICAgfSxcbiAgICBtb2JpbGVMYWJlbDogdW5kZWZpbmVkLFxuICAgIGlucHV0Q2xhc3NOYW1lOiAnJyxcbiAgICB0cmFuc2xhdGVkUGxhY2Vob2xkZXI6IHVuZGVmaW5lZCxcbiAgICBmb250V2VpZ2h0czoge1xuICAgICAgbWVkaXVtOiA1MDAsXG4gICAgfSxcbiAgICBtb2RlSWNvbkNvbG9yczoge1xuICAgICAgJ21vZGUtYnVzJzogJyMwMDdhYzknLFxuICAgICAgJ21vZGUtcmFpbCc6ICcjOGM0Nzk5JyxcbiAgICAgICdtb2RlLXRyYW0nOiAnIzAwODE1MScsXG4gICAgICAnbW9kZS1tZXRybyc6ICcjZWQ4YzAwJyxcbiAgICAgICdtb2RlLWZlcnJ5JzogJyMwMDdBOTcnLFxuICAgICAgJ21vZGUtY2l0eWJpa2UnOiAnI2YyYjYyZCcsXG4gICAgfSxcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgbW9kZVNldDogdW5kZWZpbmVkLFxuICAgIHNob3dTY3JvbGw6IGZhbHNlLFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIG1vbWVudC50ei5zZXREZWZhdWx0KHByb3BzLnRpbWVab25lKTtcbiAgICBtb21lbnQubG9jYWxlKHByb3BzLmxhbmcpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHZhbHVlOiBwcm9wcy52YWx1ZSxcbiAgICAgIHN1Z2dlc3Rpb25zOiBbXSxcbiAgICAgIGVkaXRpbmc6IGZhbHNlLFxuICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICByZW5kZXJNb2JpbGVTZWFyY2g6IGZhbHNlLFxuICAgICAgc291cmNlczogcHJvcHMuc291cmNlcyxcbiAgICAgIG93blBsYWNlczogZmFsc2UsXG4gICAgICB0eXBpbmdUaW1lcjogbnVsbCxcbiAgICAgIHR5cGluZzogZmFsc2UsXG4gICAgICBwZW5kaW5nU2VsZWN0aW9uOiBudWxsLFxuICAgICAgc3VnZ2VzdGlvbkluZGV4OiAwLFxuICAgICAgY2xlYW5FeGVjdXRlZDogZmFsc2UsXG4gICAgICBzY3JvbGxZOiAwLFxuICAgIH07XG4gICAgT2JqZWN0LmtleXModHJhbnNsYXRpb25zKS5mb3JFYWNoKGxhbmcgPT4ge1xuICAgICAgaTE4bmV4dC5hZGRSZXNvdXJjZUJ1bmRsZShsYW5nLCAndHJhbnNsYXRpb24nLCB0cmFuc2xhdGlvbnNbbGFuZ10pO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gRFQtNDA3NDogV2hlbiBhIHVzZXIncyBsb2NhdGlvbiBpcyB1cGRhdGVkIERUQXV0b3N1Z2dlc3Qgd291bGQgcmUtcmVuZGVyIGNhdXNpbmcgc3VnZ2VzdGlvbiBsaXN0IHRvIHJlc2V0LlxuICAvLyBUaGlzIHdpbGwgcHJldmVudCBpdC5cbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlKSB7XG4gICAgcmV0dXJuICFpc0VxdWFsKG5leHRTdGF0ZSwgdGhpcy5zdGF0ZSkgfHwgIWlzRXF1YWwobmV4dFByb3BzLCB0aGlzLnByb3BzKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZSA9ICgpID0+IHtcbiAgICBpZiAoaTE4bmV4dC5sYW5ndWFnZSAhPT0gdGhpcy5wcm9wcy5sYW5nKSB7XG4gICAgICBpMThuZXh0LmNoYW5nZUxhbmd1YWdlKHRoaXMucHJvcHMubGFuZyk7XG4gICAgfVxuICB9O1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjYW1lbGNhc2VcbiAgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPSBuZXh0UHJvcHMgPT4ge1xuICAgIC8vIHdhaXQgdW50aWwgYWRkcmVzcyBpcyBzZXQgb3IgZ2VvbG9jYXRpb25pbmcgZmFpbHNcbiAgICBpZiAobmV4dFByb3BzLnZhbHVlICE9PSB0aGlzLnN0YXRlLnZhbHVlICYmICF0aGlzLnN0YXRlLmVkaXRpbmcpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICB2YWx1ZTogbmV4dFByb3BzLnZhbHVlLFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIG9uQ2hhbmdlID0gKGV2ZW50LCB7IG5ld1ZhbHVlLCBtZXRob2QgfSkgPT4ge1xuICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgdmFsdWU6IHRoaXMuZklucHV0IHx8IG5ld1ZhbHVlIHx8ICcnLFxuICAgICAgcmVuZGVyTW9iaWxlU2VhcmNoOiB0aGlzLnByb3BzLmlzTW9iaWxlLFxuICAgIH07XG4gICAgLy8gUmVtb3ZlIGZpbGxlZCBpbnB1dCB2YWx1ZSBzbyBpdCB3b250IGJlIHJldXNlZCB1bm5lY2Vzc2FyeVxuICAgIHRoaXMuZklucHV0ID0gbnVsbDtcbiAgICBpZiAoIXRoaXMuc3RhdGUuZWRpdGluZykge1xuICAgICAgbmV3U3RhdGUuZWRpdGluZyA9IHRydWU7XG4gICAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlLCAoKSA9PlxuICAgICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogbmV3VmFsdWUgfHwgJycgfSksXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAobWV0aG9kICE9PSAnZW50ZXInIHx8IHRoaXMuc3RhdGUudmFsaWQpIHtcbiAgICAgIC8vIHRlc3QgYWJvdmUgZHJvcHMgdW5uZWNlc3NhcnkgdXBkYXRlXG4gICAgICAvLyB3aGVuIHVzZXIgaGl0cyBlbnRlciBidXQgc2VhcmNoIGlzIHVuZmluaXNoZWRcbiAgICAgIGlmICh0aGlzLnN0YXRlLnR5cGluZ1RpbWVyKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnN0YXRlLnR5cGluZ1RpbWVyKTtcbiAgICAgIH1cbiAgICAgIGlmIChtZXRob2QgPT09ICd0eXBlJykge1xuICAgICAgICAvLyBhZnRlciB0aW1lb3V0IHJ1bnMsIGFyaWEgYWxlcnQgd2lsbCBhbm5vdW5jZSBjdXJyZW50IHNlbGVjdGlvblxuICAgICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyB0eXBpbmc6IGZhbHNlIH0pO1xuICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgbmV3U3RhdGUudHlwaW5nVGltZXIgPSB0aW1lcjtcbiAgICAgICAgbmV3U3RhdGUudHlwaW5nID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUpO1xuICAgIH1cbiAgfTtcblxuICBvbkJsdXIgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuc3RhdGUucmVuZGVyTW9iaWxlU2VhcmNoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnN0YXRlLmVkaXRpbmcpIHtcbiAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBlZGl0aW5nOiBmYWxzZSxcbiAgICAgIHJlbmRlck1vYmlsZVNlYXJjaDogZmFsc2UsXG4gICAgICB2YWx1ZTogdGhpcy5wcm9wcy52YWx1ZSxcbiAgICB9KTtcbiAgfTtcblxuICBvblNlbGVjdGVkID0gKGUsIHJlZikgPT4ge1xuICAgIGlmICh0aGlzLnN0YXRlLnZhbGlkKSB7XG4gICAgICBpZiAocmVmLnN1Z2dlc3Rpb24udHlwZSA9PT0gJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgICAge1xuICAgICAgICAgICAgc291cmNlczogWydGYXZvdXJpdGUnLCAnQmFjayddLFxuICAgICAgICAgICAgb3duUGxhY2VzOiB0cnVlLFxuICAgICAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogcmVmLnN1Z2dlc3Rpb24udHlwZSxcbiAgICAgICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiAnJyB9KTtcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHJlZi5zdWdnZXN0aW9uLnR5cGUgPT09ICdiYWNrJyB8fFxuICAgICAgICByZWYuc3VnZ2VzdGlvbi50eXBlID09PSAnRnV0dXJlUm91dGUnXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2VzOiB0aGlzLnByb3BzLnNvdXJjZXMsXG4gICAgICAgICAgICBvd25QbGFjZXM6IGZhbHNlLFxuICAgICAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogcmVmLnN1Z2dlc3Rpb24udHlwZSxcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25JbmRleDogcmVmLnN1Z2dlc3Rpb25JbmRleCxcbiAgICAgICAgICB9LFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiAnJyB9KTtcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnNlbGVjdGlvbkRvbmUgPSB0cnVlOyAvLyBzZWxlY3Rpb24gZG9uZSwgZG8gbm90IGxldCB1cGNvbWluZyBrZXlib2FyZCBldmVudHMgY29uZnVzZSB0aGUgZmxvd1xuICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAge1xuICAgICAgICAgIGVkaXRpbmc6IGZhbHNlLFxuICAgICAgICAgIHZhbHVlOiByZWYuc3VnZ2VzdGlvblZhbHVlLFxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pbnB1dC5ibHVyKCk7XG4gICAgICAgICAgaWYgKHRoaXMucHJvcHMuaGFuZGxlVmlhUG9pbnRzKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLmhhbmRsZVZpYVBvaW50cyhyZWYuc3VnZ2VzdGlvbiwgcmVmLnN1Z2dlc3Rpb25JbmRleCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMub25TZWxlY3QocmVmLnN1Z2dlc3Rpb24sIHRoaXMucHJvcHMuaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICByZW5kZXJNb2JpbGVTZWFyY2g6IGZhbHNlLFxuICAgICAgICAgICAgICBzb3VyY2VzOiB0aGlzLnByb3BzLnNvdXJjZXMsXG4gICAgICAgICAgICAgIG93blBsYWNlczogZmFsc2UsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb25zOiBbXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uRG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMucHJvcHMuZm9jdXNDaGFuZ2UgJiZcbiAgICAgICAgICAgICghdGhpcy5wcm9wcy5pc01vYmlsZSB8fCB0aGlzLnByb3BzLmlzRW1iZWRkZWQpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLmZvY3VzQ2hhbmdlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLnByb3BzLmlzTW9iaWxlKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlTW9iaWxlU2VhcmNoKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAgcHJldlN0YXRlID0+ICh7XG4gICAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogcHJldlN0YXRlLnZhbHVlLFxuICAgICAgICB9KSxcbiAgICAgICAgKCkgPT4gdGhpcy5jaGVja1BlbmRpbmdTZWxlY3Rpb24oKSwgLy8gc2VhcmNoIG1heSBmaW5pc2ggZHVyaW5nIHN0YXRlIGNoYW5nZVxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgb25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkID0gKCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgc3VnZ2VzdGlvbnM6IFtdLFxuICAgICAgc291cmNlczogdGhpcy5wcm9wcy5zb3VyY2VzLFxuICAgICAgb3duUGxhY2VzOiBmYWxzZSxcbiAgICAgIGVkaXRpbmc6IGZhbHNlLFxuICAgIH0pO1xuICB9O1xuXG4gIGdldFN1Z2dlc3Rpb25WYWx1ZSA9IHN1Z2dlc3Rpb24gPT4ge1xuICAgIGlmIChcbiAgICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnIHx8XG4gICAgICBzdWdnZXN0aW9uLnR5cGUgPT09ICdiYWNrJ1xuICAgICkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gZ2V0TGFiZWwoc3VnZ2VzdGlvbi5wcm9wZXJ0aWVzKTtcbiAgfTtcblxuICBjaGVja1BlbmRpbmdTZWxlY3Rpb24gPSAoKSA9PiB7XG4gICAgaWYgKFxuICAgICAgKHRoaXMuc3RhdGUucGVuZGluZ1NlbGVjdGlvbiA9PT0gJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnIHx8XG4gICAgICAgIHRoaXMuc3RhdGUucGVuZGluZ1NlbGVjdGlvbiA9PT0gJ2JhY2snKSAmJlxuICAgICAgdGhpcy5zdGF0ZS52YWxpZFxuICAgICkge1xuICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAge1xuICAgICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IG51bGwsXG4gICAgICAgICAgZWRpdGluZzogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICAvLyBhY2NlcHQgYWZ0ZXIgYWxsIG9uZ29pbmcgc2VhcmNoZXMgaGF2ZSBmaW5pc2hlZFxuICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZS5wZW5kaW5nU2VsZWN0aW9uICYmIHRoaXMuc3RhdGUudmFsaWQpIHtcbiAgICAgIC8vIGZpbmlzaCB0aGUgc2VsZWN0aW9uIGJ5IHBpY2tpbmcgZmlyc3QgPSBiZXN0IG1hdGNoIG9yIHdpdGggJ0Z1dHVyZVJvdXRlJyBieSBzdWdnZXN0aW9uSW5kZXhcbiAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgIHtcbiAgICAgICAgICBwZW5kaW5nU2VsZWN0aW9uOiBudWxsLFxuICAgICAgICAgIGVkaXRpbmc6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuc3RhdGUuc3VnZ2VzdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0LmJsdXIoKTtcbiAgICAgICAgICAgIHRoaXMucHJvcHMub25TZWxlY3QoXG4gICAgICAgICAgICAgIHRoaXMuc3RhdGUuc3VnZ2VzdGlvbnNbdGhpcy5zdGF0ZS5zdWdnZXN0aW9uSW5kZXhdLFxuICAgICAgICAgICAgICB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMucHJvcHMuaXNNb2JpbGUpIHtcbiAgICAgICAgICAgICAgdGhpcy5jbG9zZU1vYmlsZVNlYXJjaCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB0aGlzLnByb3BzLmZvY3VzQ2hhbmdlICYmXG4gICAgICAgICAgICAgICghdGhpcy5wcm9wcy5pc01vYmlsZSB8fCB0aGlzLnByb3BzLmlzRW1iZWRkZWQpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5wcm9wcy5mb2N1c0NoYW5nZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIGNsZWFyQnV0dG9uID0gKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1snY2xlYXItaW5wdXQnXX1cbiAgICAgICAgb25DbGljaz17dGhpcy5jbGVhcklucHV0fVxuICAgICAgICBhcmlhLWxhYmVsPXtpMThuZXh0LnQoJ2NsZWFyLWJ1dHRvbi1sYWJlbCcpfVxuICAgICAgPlxuICAgICAgICA8SWNvbiBpbWc9XCJjbG9zZVwiIGNvbG9yPXt0aGlzLnByb3BzLmNvbG9yfSAvPlxuICAgICAgPC9idXR0b24+XG4gICAgKTtcbiAgfTtcblxuICBmZXRjaEZ1bmN0aW9uID0gKHsgdmFsdWUsIGNsZWFuRXhlY3V0ZWQgfSkgPT4ge1xuICAgIHJldHVybiB0aGlzLnNldFN0YXRlKFxuICAgICAgeyB2YWxpZDogZmFsc2UsIGNsZWFuRXhlY3V0ZWQ6ICFjbGVhbkV4ZWN1dGVkID8gZmFsc2UgOiBjbGVhbkV4ZWN1dGVkIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbkRvbmUpIHtcbiAgICAgICAgICAvLyBkbyBub3QgbGV0IGNvbXBvbmVudCBjYXN0IHVubmVjZXNzYXJ5IHJlcXVlc3RzXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlzTG9jYXRpb25TZWFyY2ggPVxuICAgICAgICAgIGlzRW1wdHkodGhpcy5wcm9wcy50YXJnZXRzKSB8fFxuICAgICAgICAgIHRoaXMucHJvcHMudGFyZ2V0cy5pbmNsdWRlcygnTG9jYXRpb25zJyk7XG4gICAgICAgIGxldCB0YXJnZXRzO1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5vd25QbGFjZXMpIHtcbiAgICAgICAgICB0YXJnZXRzID0gWydMb2NhdGlvbnMnXTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBpc0VtcHR5KHRoaXMucHJvcHMudGFyZ2V0cykgfHxcbiAgICAgICAgICAgIHRoaXMucHJvcHMudGFyZ2V0cy5pbmNsdWRlcygnU3RvcHMnKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGFyZ2V0cy5wdXNoKCdTdG9wcycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBpc0VtcHR5KHRoaXMucHJvcHMudGFyZ2V0cykgfHxcbiAgICAgICAgICAgIHRoaXMucHJvcHMudGFyZ2V0cy5pbmNsdWRlcygnQmlrZVJlbnRhbFN0YXRpb25zJylcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRhcmdldHMucHVzaCgnQmlrZVJlbnRhbFN0YXRpb25zJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCFpc0VtcHR5KHRoaXMucHJvcHMudGFyZ2V0cykpIHtcbiAgICAgICAgICB0YXJnZXRzID0gWy4uLnRoaXMucHJvcHMudGFyZ2V0c107XG4gICAgICAgICAgLy8gaW4gZGVza3RvcCwgZmF2b3JpdGVzIGFyZSBhY2Nlc3NlZCB2aWEgc3ViIHNlYXJjaFxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGlzTG9jYXRpb25TZWFyY2ggJiZcbiAgICAgICAgICAgICF0aGlzLnByb3BzLmlzTW9iaWxlICYmXG4gICAgICAgICAgICAoaXNFbXB0eSh0aGlzLnByb3BzLnNvdXJjZXMpIHx8XG4gICAgICAgICAgICAgIHRoaXMucHJvcHMuc291cmNlcy5pbmNsdWRlcygnRmF2b3VyaXRlJykpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0YXJnZXRzLnB1c2goJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVtb3ZlICBsb2NhdGlvbiBmYXZvdXJpdGVzIGluIGRlc2t0b3Agc2VhcmNoIChjb2xsZWN0aW9uIGl0ZW0gcmVwbGFjZXMgaXQgaW4gdGFyZ2V0IGFycmF5KVxuICAgICAgICBjb25zdCBzb3VyY2VzID1cbiAgICAgICAgICB0aGlzLnN0YXRlLnNvdXJjZXMgJiZcbiAgICAgICAgICB0aGlzLnN0YXRlLnNvdXJjZXMuZmlsdGVyKFxuICAgICAgICAgICAgcyA9PlxuICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgIGlzTG9jYXRpb25TZWFyY2ggJiZcbiAgICAgICAgICAgICAgICBzID09PSAnRmF2b3VyaXRlJyAmJlxuICAgICAgICAgICAgICAgICF0aGlzLnN0YXRlLm93blBsYWNlcyAmJlxuICAgICAgICAgICAgICAgICF0aGlzLnByb3BzLmlzTW9iaWxlXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgKTtcblxuICAgICAgICBleGVjdXRlU2VhcmNoKFxuICAgICAgICAgIHRhcmdldHMsXG4gICAgICAgICAgc291cmNlcyxcbiAgICAgICAgICB0aGlzLnByb3BzLnRyYW5zcG9ydE1vZGUsXG4gICAgICAgICAgdGhpcy5wcm9wcy5zZWFyY2hDb250ZXh0LFxuICAgICAgICAgIHRoaXMucHJvcHMuZmlsdGVyUmVzdWx0cyxcbiAgICAgICAgICB0aGlzLnByb3BzLmdlb2NvZGluZ1NpemUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaW5wdXQ6IHZhbHVlIHx8ICcnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2VhcmNoUmVzdWx0ID0+IHtcbiAgICAgICAgICAgIGlmIChzZWFyY2hSZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBYWFggdHJhbnNsYXRlcyBjdXJyZW50IGxvY2F0aW9uXG4gICAgICAgICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IChzZWFyY2hSZXN1bHQucmVzdWx0cyB8fCBbXSlcbiAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9uID0+XG4gICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnR5cGUgIT09ICdGdXR1cmVSb3V0ZScgfHxcbiAgICAgICAgICAgICAgICAgIChzdWdnZXN0aW9uLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScgJiZcbiAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5wcm9wZXJ0aWVzLnRpbWUgPiBtb21lbnQoKS51bml4KCkpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5tYXAoc3VnZ2VzdGlvbiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi50eXBlID09PSAnQ3VycmVudExvY2F0aW9uJyB8fFxuICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi50eXBlID09PSAnU2VsZWN0RnJvbU1hcCcgfHxcbiAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnIHx8XG4gICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnR5cGUgPT09ICdiYWNrJ1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRlZCA9IHsgLi4uc3VnZ2VzdGlvbiB9O1xuICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZC5wcm9wZXJ0aWVzLmxhYmVsSWQgPSBpMThuZXh0LnQoXG4gICAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24ucHJvcGVydGllcy5sYWJlbElkLFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc2xhdGVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gc3VnZ2VzdGlvbjtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHZhbHVlID09PSB0aGlzLnN0YXRlLnZhbHVlIHx8XG4gICAgICAgICAgICAgIHZhbHVlID09PSB0aGlzLnN0YXRlLnBlbmRpbmdTZWxlY3Rpb24gfHxcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5wZW5kaW5nU2VsZWN0aW9uID09PSAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycgfHxcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5wZW5kaW5nU2VsZWN0aW9uID09PSAnYmFjaycgfHxcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5wZW5kaW5nU2VsZWN0aW9uID09PSAnRnV0dXJlUm91dGUnXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb25zLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKCkgPT4gdGhpcy5jaGVja1BlbmRpbmdTZWxlY3Rpb24oKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMucHJvcHMucGF0aE9wdHMsXG4gICAgICAgICAgdGhpcy5wcm9wcy5yZWZQb2ludCxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgKTtcbiAgfTtcblxuICBjbGVhcklucHV0ID0gKCkgPT4ge1xuICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgZWRpdGluZzogdHJ1ZSxcbiAgICAgIHZhbHVlOiAnJyxcbiAgICAgIHNvdXJjZXM6IHRoaXMucHJvcHMuc291cmNlcyxcbiAgICAgIG93blBsYWNlczogZmFsc2UsXG4gICAgfTtcbiAgICAvLyBtdXN0IHVwZGF0ZSBzdWdnZXN0aW9uc1xuICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUsICgpID0+XG4gICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogJycsIGNsZWFuRXhlY3V0ZWQ6IHRydWUgfSksXG4gICAgKTtcbiAgICBpZiAodGhpcy5wcm9wcy5vbkNsZWFyKSB7XG4gICAgICB0aGlzLnByb3BzLm9uQ2xlYXIodGhpcy5wcm9wcy5pZCk7XG4gICAgfVxuICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgfTtcblxuICBpbnB1dENsaWNrZWQgPSBpbnB1dFZhbHVlID0+IHtcbiAgICB0aGlzLmlucHV0LmZvY3VzKCk7XG4gICAgaWYgKHRoaXMucHJvcHMuaXNNb2JpbGUpIHtcbiAgICAgIHRoaXMucHJvcHMubG9jaygpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc3RhdGUuZWRpdGluZykge1xuICAgICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICAgIGVkaXRpbmc6IHRydWUsXG4gICAgICAgIC8vIHJlc2V0IGF0IHN0YXJ0LCBqdXN0IGluIGNhc2Ugd2UgbWlzc2VkIHNvbWV0aGluZ1xuICAgICAgICBwZW5kaW5nU2VsZWN0aW9uOiBudWxsLFxuICAgICAgICByZW5kZXJNb2JpbGVTZWFyY2g6IHRoaXMucHJvcHMuaXNNb2JpbGUsXG4gICAgICB9O1xuXG4gICAgICAvLyBEVC0zMjYzOiBhZGRlZCBzdGF0ZUtleURvd25cbiAgICAgIGNvbnN0IHN0YXRlS2V5RG93biA9IHtcbiAgICAgICAgZWRpdGluZzogdHJ1ZSxcbiAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogbnVsbCxcbiAgICAgICAgdmFsdWU6IGlucHV0VmFsdWUsXG4gICAgICB9O1xuXG4gICAgICBpZiAoIXRoaXMuc3RhdGUuc3VnZ2VzdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIC8vIERULTMyNjM6IGFkZGVkIGlmLWVsc2Ugc3RhdGVtZW50XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXRWYWx1ZSA9PT0gJ29iamVjdCcgfHwgIWlucHV0VmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlLCAoKSA9PlxuICAgICAgICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6IHRoaXMuc3RhdGUudmFsdWUgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHN0YXRlS2V5RG93biwgKCkgPT5cbiAgICAgICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiBpbnB1dFZhbHVlIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiB0aGlzLnN0YXRlLnZhbHVlIH0pO1xuICAgICAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgc3RvcmVJbnB1dFJlZmVyZW5jZSA9IGF1dG9zdWdnZXN0ID0+IHtcbiAgICBpZiAoYXV0b3N1Z2dlc3QgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuaW5wdXQgPSBhdXRvc3VnZ2VzdC5pbnB1dDtcbiAgICAgIGlmICh0aGlzLnByb3BzLnN0b3JlUmVmKSB7XG4gICAgICAgIHRoaXMucHJvcHMuc3RvcmVSZWYoYXV0b3N1Z2dlc3QuaW5wdXQpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvLyBGaWxsIGlucHV0IHdoZW4gdXNlciBjbGlja3MgZmlsbCBpbnB1dCBidXR0b24gaW4gc3RyZWV0IHN1Z2dlc3Rpb24gaXRlbVxuICBmaWxsSW5wdXQgPSBuZXdWYWx1ZSA9PiB7XG4gICAgdGhpcy5mSW5wdXQgPSBuZXdWYWx1ZS5wcm9wZXJ0aWVzLm5hbWU7XG4gICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICBlZGl0aW5nOiB0cnVlLFxuICAgICAgdmFsdWU6IG5ld1ZhbHVlLnByb3BlcnRpZXMubmFtZSxcbiAgICAgIGNoZWNrUGVuZGluZ1NlbGVjdGlvbjogbmV3VmFsdWUsXG4gICAgICB2YWxpZDogdHJ1ZSxcbiAgICB9O1xuICAgIC8vIG11c3QgdXBkYXRlIHN1Z2dlc3Rpb25zXG4gICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSk7XG4gICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6IG5ld1ZhbHVlLnByb3BlcnRpZXMubmFtZSB9KTtcbiAgICB0aGlzLmlucHV0LmZvY3VzKCk7XG4gIH07XG5cbiAgcmVuZGVySXRlbSA9IGl0ZW0gPT4ge1xuICAgIGNvbnN0IG5ld0l0ZW0gPVxuICAgICAgaXRlbS50eXBlID09PSAnRnV0dXJlUm91dGUnXG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgIHRyYW5zbGF0ZWRUZXh0OiB0cmFuc2xhdGVGdXR1cmVSb3V0ZVN1Z2dlc3Rpb25UaW1lKGl0ZW0pLFxuICAgICAgICAgIH1cbiAgICAgICAgOiBpdGVtO1xuICAgIGNvbnN0IGNvbnRlbnQgPSBnZXRTdWdnZXN0aW9uQ29udGVudChpdGVtKTtcbiAgICByZXR1cm4gKFxuICAgICAgPFN1Z2dlc3Rpb25JdGVtXG4gICAgICAgIGl0ZW09e25ld0l0ZW19XG4gICAgICAgIGNvbnRlbnQ9e2NvbnRlbnR9XG4gICAgICAgIGxvYWRpbmc9eyF0aGlzLnN0YXRlLnZhbGlkfVxuICAgICAgICBpc01vYmlsZT17dGhpcy5wcm9wcy5pc01vYmlsZX1cbiAgICAgICAgYXJpYUZhdm91cml0ZVN0cmluZz17aTE4bmV4dC50KCdmYXZvdXJpdGUnKX1cbiAgICAgICAgY29sb3I9e3RoaXMucHJvcHMuY29sb3J9XG4gICAgICAgIGFjY2Vzc2libGVQcmltYXJ5Q29sb3I9e3RoaXMucHJvcHMuYWNjZXNzaWJsZVByaW1hcnlDb2xvcn1cbiAgICAgICAgZmlsbElucHV0PXt0aGlzLmZpbGxJbnB1dH1cbiAgICAgICAgZm9udFdlaWdodHM9e3RoaXMucHJvcHMuZm9udFdlaWdodHN9XG4gICAgICAgIG1vZGVJY29uQ29sb3JzPXt0aGlzLnByb3BzLm1vZGVJY29uQ29sb3JzfVxuICAgICAgICBtb2RlU2V0PXt0aGlzLnByb3BzLm1vZGVTZXR9XG4gICAgICAvPlxuICAgICk7XG4gIH07XG5cbiAgY2xvc2VNb2JpbGVTZWFyY2ggPSAoKSA9PiB7XG4gICAgdGhpcy5wcm9wcy51bmxvY2soKTtcbiAgICB0aGlzLnNldFN0YXRlKFxuICAgICAge1xuICAgICAgICByZW5kZXJNb2JpbGVTZWFyY2g6IGZhbHNlLFxuICAgICAgICB2YWx1ZTogdGhpcy5wcm9wcy52YWx1ZSxcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCB0aGlzLnN0YXRlLnNjcm9sbFkpO1xuICAgICAgICB0aGlzLm9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZCgpO1xuICAgICAgfSxcbiAgICApO1xuICB9O1xuXG4gIGtleURvd24gPSBldmVudCA9PiB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uRG9uZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBrZXlDb2RlID0gZXZlbnQua2V5O1xuICAgIGlmIChrZXlDb2RlID09PSAnRXNjYXBlJykge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGVkaXRpbmc6IGZhbHNlIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdGF0ZS5lZGl0aW5nKSB7XG4gICAgICBpZiAoa2V5Q29kZSA9PT0gJ0VudGVyJyAmJiB0aGlzLnN0YXRlLnZhbHVlICE9PSAnJykge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsgcGVuZGluZ1NlbGVjdGlvbjogdHJ1ZSB9LCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6IHRoaXMuc3RhdGUudmFsdWUgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5pbnB1dENsaWNrZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAoa2V5Q29kZSA9PT0gJ0VudGVyJyB8fCBrZXlDb2RlID09PSAnQXJyb3dEb3duJykgJiZcbiAgICAgIHRoaXMuc3RhdGUudmFsdWUgPT09ICcnXG4gICAgKSB7XG4gICAgICB0aGlzLmNsZWFySW5wdXQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5Q29kZSA9PT0gJ0Fycm93RG93bicgJiYgdGhpcy5zdGF0ZS52YWx1ZSAhPT0gJycpIHtcbiAgICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgICBlZGl0aW5nOiB0cnVlLFxuICAgICAgICB2YWx1ZTogdGhpcy5zdGF0ZS52YWx1ZSxcbiAgICAgIH07XG4gICAgICAvLyBtdXN0IHVwZGF0ZSBzdWdnZXN0aW9uc1xuICAgICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSwgKCkgPT5cbiAgICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6IHRoaXMuc3RhdGUudmFsdWUgfSksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc3RhdGUuZWRpdGluZykge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGVkaXRpbmc6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgaWYgKGtleUNvZGUgPT09ICdUYWInKSB7XG4gICAgICB0aGlzLm9uQmx1cigpO1xuICAgIH1cbiAgfTtcblxuICBzdWdnZXN0aW9uQXNBcmlhQ29udGVudCA9ICgpID0+IHtcbiAgICBsZXQgbGFiZWwgPSBbXTtcbiAgICBjb25zdCBmaXJzdFN1Z2dlc3Rpb24gPSB0aGlzLnN0YXRlLnN1Z2dlc3Rpb25zWzBdO1xuICAgIGlmIChmaXJzdFN1Z2dlc3Rpb24pIHtcbiAgICAgIGlmIChmaXJzdFN1Z2dlc3Rpb24udHlwZSAmJiBmaXJzdFN1Z2dlc3Rpb24udHlwZS5pbmNsdWRlcygnRmF2b3VyaXRlJykpIHtcbiAgICAgICAgbGFiZWwucHVzaChpMThuZXh0LnQoJ2Zhdm91cml0ZScpKTtcbiAgICAgIH1cbiAgICAgIGxhYmVsID0gbGFiZWwuY29uY2F0KGdldFN1Z2dlc3Rpb25Db250ZW50KHRoaXMuc3RhdGUuc3VnZ2VzdGlvbnNbMF0pKTtcbiAgICB9XG4gICAgcmV0dXJuIFsuLi5uZXcgU2V0KGxhYmVsKV0uam9pbignIC0gJyk7XG4gIH07XG5cbiAgY2xlYXJPbGRTZWFyY2hlcyA9ICgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjb250ZXh0LFxuICAgICAgY2xlYXJPbGRTZWFyY2hlcyxcbiAgICAgIGNsZWFyRnV0dXJlUm91dGVzLFxuICAgIH0gPSB0aGlzLnByb3BzLnNlYXJjaENvbnRleHQ7XG4gICAgaWYgKGNvbnRleHQgJiYgY2xlYXJPbGRTZWFyY2hlcykge1xuICAgICAgY2xlYXJPbGRTZWFyY2hlcyhjb250ZXh0KTtcbiAgICAgIGlmIChjbGVhckZ1dHVyZVJvdXRlcykge1xuICAgICAgICBjbGVhckZ1dHVyZVJvdXRlcyhjb250ZXh0KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiB0aGlzLnN0YXRlLnZhbHVlIH0pO1xuICAgIH1cbiAgfTtcblxuICBpc09yaWdpbkRlc3RpbmF0aW9uT3JWaWFwb2ludCA9ICgpID0+XG4gICAgdGhpcy5wcm9wcy5pZCA9PT0gJ29yaWdpbicgfHxcbiAgICB0aGlzLnByb3BzLmlkID09PSAnZGVzdGluYXRpb24nIHx8XG4gICAgdGhpcy5wcm9wcy5pZCA9PT0gJ3ZpYS1wb2ludCcgfHxcbiAgICB0aGlzLnByb3BzLmlkID09PSAnb3JpZ2luLXN0b3AtbmVhci15b3UnO1xuXG4gIG9uRm9jdXMgPSAoKSA9PiB7XG4gICAgY29uc3QgcG9zaXRpb25zID0gW1xuICAgICAgJ1ZhbGl0dHUgc2lqYWludGknLFxuICAgICAgJ055a3lpbmVuIHNpamFpbnRpc2knLFxuICAgICAgJ0N1cnJlbnQgcG9zaXRpb24nLFxuICAgICAgJ1NlbGVjdGVkIGxvY2F0aW9uJyxcbiAgICAgICdWYWxkIHBvc2l0aW9uJyxcbiAgICAgICdBbnbDpG5kIG1pbiBwb3NpdGlvbicsXG4gICAgICAnTWluIHBvc2l0aW9uJyxcbiAgICAgICdLw6R5dMOkIG55a3lpc3TDpCBzaWphaW50aWEnLFxuICAgICAgJ1VzZSBjdXJyZW50IGxvY2F0aW9uJyxcbiAgICAgICdZb3VyIGN1cnJlbnQgbG9jYXRpb24nLFxuICAgIF07XG4gICAgaWYgKHBvc2l0aW9ucy5pbmNsdWRlcyh0aGlzLnN0YXRlLnZhbHVlKSkge1xuICAgICAgdGhpcy5jbGVhcklucHV0KCk7XG4gICAgfVxuICAgIGNvbnN0IHNjcm9sbFkgPSB3aW5kb3cucGFnZVlPZmZzZXQ7XG4gICAgcmV0dXJuIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgc2Nyb2xsWSxcbiAgICB9KTtcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgaWYgKGkxOG5leHQubGFuZ3VhZ2UgIT09IHRoaXMucHJvcHMubGFuZykge1xuICAgICAgaTE4bmV4dC5jaGFuZ2VMYW5ndWFnZSh0aGlzLnByb3BzLmxhbmcpO1xuICAgIH1cbiAgICBjb25zdCB7XG4gICAgICB2YWx1ZSxcbiAgICAgIHN1Z2dlc3Rpb25zLFxuICAgICAgcmVuZGVyTW9iaWxlU2VhcmNoLFxuICAgICAgY2xlYW5FeGVjdXRlZCxcbiAgICB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBpbnB1dFByb3BzID0ge1xuICAgICAgcGxhY2Vob2xkZXI6IHRoaXMucHJvcHMudHJhbnNsYXRlZFBsYWNlaG9sZGVyXG4gICAgICAgID8gdGhpcy5wcm9wcy50cmFuc2xhdGVkUGxhY2Vob2xkZXJcbiAgICAgICAgOiBpMThuZXh0LnQodGhpcy5wcm9wcy5wbGFjZWhvbGRlciksXG4gICAgICB2YWx1ZSxcbiAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlLFxuICAgICAgb25CbHVyOiB0aGlzLm9uQmx1cixcbiAgICAgIGNsYXNzTmFtZTogY3goXG4gICAgICAgIGAke3N0eWxlcy5pbnB1dH0gJHtcbiAgICAgICAgICB0aGlzLnByb3BzLmlzTW9iaWxlICYmIHRoaXMucHJvcHMudHJhbnNwb3J0TW9kZSA/IHN0eWxlcy50aGluIDogJydcbiAgICAgICAgfSAke3N0eWxlc1t0aGlzLnByb3BzLmlkXSB8fCAnJ30gJHtcbiAgICAgICAgICB0aGlzLnN0YXRlLnZhbHVlID8gc3R5bGVzLmhhc1ZhbHVlIDogJydcbiAgICAgICAgfSAke3RoaXMucHJvcHMuaW5wdXRDbGFzc05hbWV9YCxcbiAgICAgICksXG4gICAgICBvbktleURvd246IHRoaXMua2V5RG93biwgLy8gRFQtMzI2M1xuICAgICAgcmVxdWlyZWQ6IHRoaXMucHJvcHMucmVxdWlyZWQsXG4gICAgfTtcbiAgICBjb25zdCBhcmlhQmFySWQgPSB0aGlzLnByb3BzLmlkLnJlcGxhY2UoJ3NlYXJjaGZpZWxkLScsICcnKTtcbiAgICBsZXQgU2VhcmNoQmFySWQgPSB0aGlzLnByb3BzLmFyaWFMYWJlbCB8fCBpMThuZXh0LnQoYXJpYUJhcklkKTtcbiAgICBTZWFyY2hCYXJJZCA9IFNlYXJjaEJhcklkLnJlcGxhY2UoJ3NlYXJjaGZpZWxkLScsICcnKTtcbiAgICBjb25zdCBhcmlhUmVxdWlyZWRUZXh0ID0gdGhpcy5wcm9wcy5yZXF1aXJlZFxuICAgICAgPyBgJHtpMThuZXh0LnQoJ3JlcXVpcmVkJyl9LmBcbiAgICAgIDogJyc7XG4gICAgY29uc3QgYXJpYUxhYmVsVGV4dCA9IHRoaXMucHJvcHMuaXNNb2JpbGVcbiAgICAgID8gaTE4bmV4dC50KCdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW9iaWxlJylcbiAgICAgIDogaTE4bmV4dC50KCdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtZGVza3RvcCcpO1xuICAgIGNvbnN0IGFyaWFTdWdnZXN0aW9uTGVuID0gaTE4bmV4dC50KCdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuJywge1xuICAgICAgY291bnQ6IHN1Z2dlc3Rpb25zLmxlbmd0aCxcbiAgICB9KTtcblxuICAgIGNvbnN0IGFyaWFDdXJyZW50U3VnZ2VzdGlvbiA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25Bc0FyaWFDb250ZW50KCkgfHwgdGhpcy5wcm9wcy52YWx1ZSkge1xuICAgICAgICByZXR1cm4gaTE4bmV4dC50KCdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJywge1xuICAgICAgICAgIHNlbGVjdGlvbjogdGhpcy5zdWdnZXN0aW9uQXNBcmlhQ29udGVudCgpIHx8IHRoaXMucHJvcHMudmFsdWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuICcnO1xuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlc1snc3Itb25seSddfSByb2xlPVwiYWxlcnRcIj5cbiAgICAgICAgICB7IXRoaXMuc3RhdGUudHlwaW5nICYmXG4gICAgICAgICAgICB0aGlzLnN0YXRlLmVkaXRpbmcgJiZcbiAgICAgICAgICAgIGAke2FyaWFTdWdnZXN0aW9uTGVufSAke2FyaWFDdXJyZW50U3VnZ2VzdGlvbigpfWB9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAge3RoaXMucHJvcHMuaXNNb2JpbGUgJiYgKFxuICAgICAgICAgIDxNb2JpbGVTZWFyY2hcbiAgICAgICAgICAgIHNlYXJjaE9wZW49e3JlbmRlck1vYmlsZVNlYXJjaH1cbiAgICAgICAgICAgIGFwcEVsZW1lbnQ9e3RoaXMucHJvcHMuYXBwRWxlbWVudH1cbiAgICAgICAgICAgIGNsZWFyT2xkU2VhcmNoZXM9e3RoaXMuY2xlYXJPbGRTZWFyY2hlc31cbiAgICAgICAgICAgIGlkPXt0aGlzLnByb3BzLmlkfVxuICAgICAgICAgICAgY2xlYXJJbnB1dD17dGhpcy5jbGVhcklucHV0fVxuICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUudmFsdWV9XG4gICAgICAgICAgICBzdWdnZXN0aW9ucz17W1xuICAgICAgICAgICAgICAuLi5zdWdnZXN0aW9ucyxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdjbGVhci1zZWFyY2gtaGlzdG9yeScsXG4gICAgICAgICAgICAgICAgbGFiZWxJZDogaTE4bmV4dC50KCdjbGVhci1zZWFyY2gtaGlzdG9yeScpLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIGlucHV0UHJvcHM9e3tcbiAgICAgICAgICAgICAgLi4uaW5wdXRQcm9wcyxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMuaXNPcmlnaW5EZXN0aW5hdGlvbk9yVmlhcG9pbnQoKVxuICAgICAgICAgICAgICAgID8gaTE4bmV4dC50KCdhZGRyZXNzLXBsYWNlLW9yLWJ1c2luZXNzJylcbiAgICAgICAgICAgICAgICA6IGlucHV0UHJvcHMucGxhY2Vob2xkZXIsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgZmV0Y2hGdW5jdGlvbj17dGhpcy5mZXRjaEZ1bmN0aW9ufVxuICAgICAgICAgICAgb25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkPXt0aGlzLm9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZH1cbiAgICAgICAgICAgIGdldFN1Z2dlc3Rpb25WYWx1ZT17dGhpcy5nZXRTdWdnZXN0aW9uVmFsdWV9XG4gICAgICAgICAgICByZW5kZXJTdWdnZXN0aW9uPXt0aGlzLnJlbmRlckl0ZW19XG4gICAgICAgICAgICBjbG9zZUhhbmRsZT17dGhpcy5jbG9zZU1vYmlsZVNlYXJjaH1cbiAgICAgICAgICAgIGFyaWFMYWJlbD17YXJpYVJlcXVpcmVkVGV4dFxuICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgLmNvbmNhdChTZWFyY2hCYXJJZClcbiAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgIC5jb25jYXQoYXJpYUN1cnJlbnRTdWdnZXN0aW9uKCkpfVxuICAgICAgICAgICAgbGFiZWw9e1xuICAgICAgICAgICAgICB0aGlzLnByb3BzLm1vYmlsZUxhYmVsXG4gICAgICAgICAgICAgICAgPyB0aGlzLnByb3BzLm1vYmlsZUxhYmVsXG4gICAgICAgICAgICAgICAgOiBpMThuZXh0LnQodGhpcy5wcm9wcy5pZClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9uU3VnZ2VzdGlvblNlbGVjdGVkPXt0aGlzLm9uU2VsZWN0ZWR9XG4gICAgICAgICAgICBkaWFsb2dIZWFkZXJUZXh0PXtpMThuZXh0LnQoJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJyl9XG4gICAgICAgICAgICBkaWFsb2dQcmltYXJ5QnV0dG9uVGV4dD17aTE4bmV4dC50KCdkZWxldGUnKX1cbiAgICAgICAgICAgIGRpYWxvZ1NlY29uZGFyeUJ1dHRvblRleHQ9e2kxOG5leHQudCgnY2FuY2VsJyl9XG4gICAgICAgICAgICBjbGVhcklucHV0QnV0dG9uVGV4dD17aTE4bmV4dC50KCdjbGVhci1idXR0b24tbGFiZWwnKX1cbiAgICAgICAgICAgIGZvY3VzSW5wdXQ9e2NsZWFuRXhlY3V0ZWR9XG4gICAgICAgICAgICBjb2xvcj17dGhpcy5wcm9wcy5jb2xvcn1cbiAgICAgICAgICAgIGhvdmVyQ29sb3I9e3RoaXMucHJvcHMuaG92ZXJDb2xvcn1cbiAgICAgICAgICAgIGFjY2Vzc2libGVQcmltYXJ5Q29sb3I9e3RoaXMucHJvcHMuYWNjZXNzaWJsZVByaW1hcnlDb2xvcn1cbiAgICAgICAgICAgIGZvbnRXZWlnaHRzPXt0aGlzLnByb3BzLmZvbnRXZWlnaHRzfVxuICAgICAgICAgICAgc2hvd1Njcm9sbD17dGhpcy5wcm9wcy5zaG93U2Nyb2xsfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIHshcmVuZGVyTW9iaWxlU2VhcmNoICYmIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e2N4KFtcbiAgICAgICAgICAgICAgc3R5bGVzWydhdXRvc3VnZ2VzdC1pbnB1dC1jb250YWluZXInXSxcbiAgICAgICAgICAgICAgc3R5bGVzW3RoaXMucHJvcHMuaWRdLFxuICAgICAgICAgICAgXSl9XG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAnLS1jb2xvcic6IGAke3RoaXMucHJvcHMuY29sb3J9YCxcbiAgICAgICAgICAgICAgJy0taG92ZXItY29sb3InOiBgJHt0aGlzLnByb3BzLmhvdmVyQ29sb3J9YCxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RoaXMucHJvcHMuaWNvbiAmJiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2N4KFtcbiAgICAgICAgICAgICAgICAgIHN0eWxlc1tgYXV0b3N1Z2dlc3QtaW5wdXQtaWNvbmBdLFxuICAgICAgICAgICAgICAgICAgc3R5bGVzW3RoaXMucHJvcHMuaWRdLFxuICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5pbnB1dENsYXNzTmFtZSAmJlxuICAgICAgICAgICAgICAgICAgICBgJHt0aGlzLnByb3BzLmlucHV0Q2xhc3NOYW1lfS1pbnB1dC1pY29uYCxcbiAgICAgICAgICAgICAgICBdKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxJY29uIGltZz17YCR7dGhpcy5wcm9wcy5pY29ufWB9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxBdXRvc3VnZ2VzdFxuICAgICAgICAgICAgICBhbHdheXNSZW5kZXJTdWdnZXN0aW9ucz17dGhpcy5zdGF0ZS5lZGl0aW5nfVxuICAgICAgICAgICAgICBpZD17dGhpcy5wcm9wcy5pZH1cbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbnM9e3N1Z2dlc3Rpb25zfVxuICAgICAgICAgICAgICBvblN1Z2dlc3Rpb25zRmV0Y2hSZXF1ZXN0ZWQ9e3RoaXMuZmV0Y2hGdW5jdGlvbn1cbiAgICAgICAgICAgICAgb25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkPXt0aGlzLm9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZH1cbiAgICAgICAgICAgICAgZ2V0U3VnZ2VzdGlvblZhbHVlPXt0aGlzLmdldFN1Z2dlc3Rpb25WYWx1ZX1cbiAgICAgICAgICAgICAgcmVuZGVyU3VnZ2VzdGlvbj17dGhpcy5yZW5kZXJJdGVtfVxuICAgICAgICAgICAgICBpbnB1dFByb3BzPXt7XG4gICAgICAgICAgICAgICAgLi4uaW5wdXRQcm9wcyxcbiAgICAgICAgICAgICAgICBvbkZvY3VzOiB0aGlzLm9uRm9jdXMsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIGZvY3VzSW5wdXRPblN1Z2dlc3Rpb25DbGlja1xuICAgICAgICAgICAgICBzaG91bGRSZW5kZXJTdWdnZXN0aW9ucz17KCkgPT4gdGhpcy5zdGF0ZS5lZGl0aW5nfVxuICAgICAgICAgICAgICBoaWdobGlnaHRGaXJzdFN1Z2dlc3Rpb249eyF0aGlzLnN0YXRlLm93blBsYWNlc31cbiAgICAgICAgICAgICAgdGhlbWU9e3N0eWxlc31cbiAgICAgICAgICAgICAgcmVuZGVySW5wdXRDb21wb25lbnQ9e3AgPT4gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPXtzdHlsZXNbJ3NyLW9ubHknXX0gaHRtbEZvcj17dGhpcy5wcm9wcy5pZH0+XG4gICAgICAgICAgICAgICAgICAgIHthcmlhQ3VycmVudFN1Z2dlc3Rpb24oKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoYXJpYVJlcXVpcmVkVGV4dClcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KFNlYXJjaEJhcklkKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoYXJpYUxhYmVsVGV4dCl9XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2FyaWFDdXJyZW50U3VnZ2VzdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChhcmlhUmVxdWlyZWRUZXh0KVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoU2VhcmNoQmFySWQpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChhcmlhTGFiZWxUZXh0KX1cbiAgICAgICAgICAgICAgICAgICAgaWQ9e3RoaXMucHJvcHMuaWR9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuaW5wdXRDbGlja2VkfVxuICAgICAgICAgICAgICAgICAgICBvbktleURvd249e3RoaXMua2V5RG93bn1cbiAgICAgICAgICAgICAgICAgICAgey4uLnB9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAge3RoaXMuc3RhdGUudmFsdWUgJiYgdGhpcy5jbGVhckJ1dHRvbigpfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICBvblN1Z2dlc3Rpb25TZWxlY3RlZD17dGhpcy5vblNlbGVjdGVkfVxuICAgICAgICAgICAgICByZWY9e3RoaXMuc3RvcmVJbnB1dFJlZmVyZW5jZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICk7XG4gIH1cbn1cblxuY29uc3QgRFRBdXRvc3VnZ2VzdFdpdGhTY3JvbGxMb2NrID0gd2l0aFNjcm9sbExvY2soRFRBdXRvc3VnZ2VzdCk7XG5cbmV4cG9ydCBkZWZhdWx0IERUQXV0b3N1Z2dlc3RXaXRoU2Nyb2xsTG9jaztcbiIsImltcG9ydCB7IGdldE5hbWVMYWJlbCB9IGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC11bmlxLWJ5LWxhYmVsJztcbi8qKlxuICogUmV0dXJucyBsYWJlbCBmb3IgcHJvcGVydGllc1xuICpcbiAqIEBuYW1lIGdldExhYmVsXG4gKiBAcGFyYW0geyp9IHByb3BlcnRpZXMgb2JqZWN0IHRoYXQgY29udGFpbnMgXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZS9mYWxzZVxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHByb3BlcnRpZXM6IHtcbiAgICBcImlkXCI6IFwiR1RGUzpNQVRLQTozMTg5MTVcIixcbiAgICBcImdpZFwiOiBcImd0ZnNtYXRrYTpzdGF0aW9uOkdURlM6TUFUS0E6MzE4OTE1XCIsXG4gICAgXCJsYXllclwiOiBcInN0YXRpb25cIixcbiAgICBcInNvdXJjZVwiOiBcImd0ZnNtYXRrYVwiLFxuICAgIFwic291cmNlX2lkXCI6IFwiR1RGUzpNQVRLQTozMTg5MTVcIixcbiAgICBcIm5hbWVcIjogXCJSYXV0YXRpZW50b3JpXCIsXG4gICAgXCJwb3N0YWxjb2RlXCI6IFwiMDAxMDBcIixcbiAgICBcInBvc3RhbGNvZGVfZ2lkXCI6IFwid2hvc29uZmlyc3Q6cG9zdGFsY29kZTo0MjE0Nzk1NjlcIixcbiAgICBcImNvbmZpZGVuY2VcIjogMSxcbiAgICBcImFjY3VyYWN5XCI6IFwiY2VudHJvaWRcIixcbiAgICBcImNvdW50cnlcIjogXCJTdW9taVwiLFxuICAgIFwiY291bnRyeV9naWRcIjogXCJ3aG9zb25maXJzdDpjb3VudHJ5OjBcIixcbiAgICBcImNvdW50cnlfYVwiOiBcIkZJTlwiLFxuICAgIFwicmVnaW9uXCI6IFwiVXVzaW1hYVwiLFxuICAgIFwicmVnaW9uX2dpZFwiOiBcIndob3NvbmZpcnN0OnJlZ2lvbjo4NTY4MzA2N1wiLFxuICAgIFwibG9jYWxhZG1pblwiOiBcIkhlbHNpbmtpXCIsXG4gICAgXCJsb2NhbGFkbWluX2dpZFwiOiBcIndob3NvbmZpcnN0OmxvY2FsYWRtaW46OTA3MTk5NzE1XCIsXG4gICAgXCJsb2NhbGl0eVwiOiBcIkhlbHNpbmtpXCIsXG4gICAgXCJsb2NhbGl0eV9naWRcIjogXCJ3aG9zb25maXJzdDpsb2NhbGl0eToxMDE3NDg0MTdcIixcbiAgICBcIm5laWdoYm91cmhvb2RcIjogXCJLbHV1dmlcIixcbiAgICBcIm5laWdoYm91cmhvb2RfZ2lkXCI6IFwid2hvc29uZmlyc3Q6bmVpZ2hib3VyaG9vZDo4NTg5ODg0N1wiLFxuICAgIFwibGFiZWxcIjogXCJSYXV0YXRpZW50b3JpLCBrb2lsbGluZW4sIEtsdXV2aSwgSGVsc2lua2lcIlxuICAgIH1cbiAqIGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLmdldExhYmVsKHBhcmFtMSwgcGFyYW0yKTtcbiAqIC8vPXRydWVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0TGFiZWwocHJvcGVydGllcykge1xuICBjb25zdCBwYXJ0cyA9IGdldE5hbWVMYWJlbChwcm9wZXJ0aWVzLCB0cnVlKTtcbiAgc3dpdGNoIChwcm9wZXJ0aWVzLmxheWVyKSB7XG4gICAgY2FzZSAnc2VsZWN0RnJvbU1hcCc6XG4gICAgY2FzZSAnY3VycmVudFBvc2l0aW9uJzpcbiAgICBjYXNlICdvd25Mb2NhdGlvbnMnOlxuICAgIGNhc2UgJ2JhY2snOlxuICAgICAgcmV0dXJuIHBhcnRzWzFdIHx8IHBhcnRzWzBdO1xuICAgIGNhc2UgJ2Zhdm91cml0ZUJpa2VSZW50YWxTdGF0aW9uJzpcbiAgICBjYXNlICdmYXZvdXJpdGVQbGFjZSc6XG4gICAgICByZXR1cm4gcGFydHNbMF07XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBwYXJ0cy5sZW5ndGggPiAxICYmIHBhcnRzWzFdICE9PSAnJ1xuICAgICAgICA/IHBhcnRzLmpvaW4oJywgJylcbiAgICAgICAgOiBwYXJ0c1sxXSB8fCBwYXJ0c1swXTtcbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBob29rcyBmcm9tICdAaHNsLWZpL2hvb2tzJztcblxuY29uc3Qgd2l0aFNjcm9sbExvY2sgPSBDb21wb25lbnQgPT4ge1xuICByZXR1cm4gcHJvcHMgPT4ge1xuICAgIGNvbnN0IHsgbG9jaywgdW5sb2NrIH0gPSBob29rcy51c2VTY3JvbGxMb2NrKCk7XG5cbiAgICByZXR1cm4gPENvbXBvbmVudCBsb2NrPXtsb2NrfSB1bmxvY2s9e3VubG9ja30gey4uLnByb3BzfSAvPjtcbiAgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTY3JvbGxMb2NrO1xuIl0sIm5hbWVzIjpbIl90eXBlb2YiLCJvYmoiLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwiX2V4dGVuZHMiLCJPYmplY3QiLCJhc3NpZ24iLCJ0YXJnZXQiLCJpIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwic291cmNlIiwia2V5IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiYXBwbHkiLCJ0aGlzIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJhcnIiLCJsZW4iLCJhcnIyIiwiQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJvIiwibWluTGVuIiwiYXJyYXlMaWtlVG9BcnJheSIsIm4iLCJ0b1N0cmluZyIsInNsaWNlIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiaXNBcnJheSIsImFycmF5V2l0aG91dEhvbGVzIiwiaXRlciIsIml0ZXJhYmxlVG9BcnJheSIsInVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiVHlwZUVycm9yIiwibm9uSXRlcmFibGVTcHJlYWQiLCJfY2xhc3NDYWxsQ2hlY2siLCJpbnN0YW5jZSIsIkNvbnN0cnVjdG9yIiwiX2RlZmluZVByb3BlcnRpZXMiLCJwcm9wcyIsImRlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJkZWZpbmVQcm9wZXJ0eSIsIl9jcmVhdGVDbGFzcyIsInByb3RvUHJvcHMiLCJzdGF0aWNQcm9wcyIsIl9zZXRQcm90b3R5cGVPZiIsInAiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsIl9pbmhlcml0cyIsInN1YkNsYXNzIiwic3VwZXJDbGFzcyIsImNyZWF0ZSIsInZhbHVlIiwiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsInNlbGYiLCJSZWZlcmVuY2VFcnJvciIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwiYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwiX2dldFByb3RvdHlwZU9mIiwiZ2V0UHJvdG90eXBlT2YiLCJfc2xpY2VkVG9BcnJheSIsImFycmF5V2l0aEhvbGVzIiwiX2FyciIsIl9uIiwiX2QiLCJfZSIsInVuZGVmaW5lZCIsIl9zIiwiX2kiLCJuZXh0IiwiZG9uZSIsInB1c2giLCJlcnIiLCJpdGVyYWJsZVRvQXJyYXlMaW1pdCIsIm5vbkl0ZXJhYmxlUmVzdCIsInRydUVxIiwidmFsMSIsInZhbDIiLCJpc0R1cGxpY2F0ZSIsIml0ZW0xIiwiaXRlbTIiLCJwcm9wczEiLCJwcm9wZXJ0aWVzIiwicHJvcHMyIiwidHlwZSIsIm8xIiwib3JpZ2luIiwiZDEiLCJkZXN0aW5hdGlvbiIsIm8yIiwiZDIiLCJsb2NhbGl0eSIsImxheWVyIiwibGFiZWxJZCIsImd0ZnNJZCIsImdpZCIsImluY2x1ZGVzIiwicDEiLCJnZW9tZXRyeSIsImNvb3JkaW5hdGVzIiwicDIiLCJNYXRoIiwiYWJzIiwibGFiZWwiLCJhZGRyZXNzIiwibm9ybWFsaXplIiwic3RyIiwiaXNTdHJpbmciLCJ0b0xvd2VyQ2FzZSIsIkxheWVyVHlwZSIsIkFkZHJlc3MiLCJCYWNrIiwiQ3VycmVudFBvc2l0aW9uIiwiRmF2b3VyaXRlU3RvcCIsIkZhdm91cml0ZVN0YXRpb24iLCJGYXZvdXJpdGVQbGFjZSIsIkZhdm91cml0ZVJvdXRlIiwiRnV0dXJlUm91dGUiLCJTdGF0aW9uIiwiU2VsZWN0RnJvbU1hcCIsIlNlbGVjdEZyb21Pd25Mb2NhdGlvbnMiLCJTdG9wIiwiU3RyZWV0IiwiVmVudWUiLCJCaWtlUmVudGFsU3RhdGlvbiIsIkNhclBhcmsiLCJCaWtlUGFyayIsIm1hdGNoIiwibm9ybWFsaXplZFRlcm0iLCJyZXN1bHRQcm9wZXJ0aWVzIiwibWFwIiwiZmlsdGVyIiwibm9ybWFsaXplZFZhbHVlIiwiaW5kZXhPZiIsInJlZHVjZSIsInByZXZpb3VzIiwiY3VycmVudCIsImdldExheWVyUmFuayIsIkZhdm91cml0ZUJpa2VSZW50YWxTdGF0aW9uIiwic29ydFNlYXJjaFJlc3VsdHMiLCJsaW5lUmVnZXhwIiwicmVzdWx0cyIsInRlcm0iLCJpc0xpbmVJZGVudGlmaWVyIiwiaXNMaW5lU2VhcmNoIiwib3JkZXJlZFJlc3VsdHMiLCJvcmRlckJ5IiwicmVzdWx0Iiwic2hvcnROYW1lIiwiY29uZmlkZW5jZSIsImVzdGltYXRlZENvbmZpZGVuY2UiLCJ1bmlxV2l0aCIsImdldFN0b3BOYW1lIiwic3RvcENvZGUiLCJsYXN0SW5kZXhPZiIsInN1YnN0cmluZyIsImdldExvY2FsaXR5Iiwic3VnZ2VzdGlvbiIsImxvY2FsYWRtaW4iLCJnZXRTdG9wQ29kZSIsImlkIiwiY29kZSIsImZvcm1hdEZhdm91cml0ZVBsYWNlTGFiZWwiLCJzcGxpdCIsInJlcGxhY2UiLCJSZWdFeHAiLCJlc2NhcGVSZWdFeHAiLCJnZXROYW1lTGFiZWwiLCJtZW1vaXplIiwicGxhaW4iLCJtb2RlIiwibG9uZ05hbWUiLCJhZ2VuY3kiLCJpdGVtIiwiY2xvbmVEZWVwIiwidW5pcUJ5TGFiZWwiLCJmZWF0dXJlcyIsImZlYXQxIiwiZmVhdDIiLCJib29sIiwiaXNFcXVhbCIsImZpbHRlck1hdGNoaW5nVG9JbnB1dCIsImxpc3QiLCJJbnB1dCIsImZpZWxkcyIsImlucHV0IiwidHJpbSIsIm11bHRpV29yZCIsInBhcnRzIiwiZm9yRWFjaCIsInBOYW1lIiwiZ2V0Iiwic3BsaWNlIiwiam9pbiIsImNvbmNhdCIsInNlcmlhbGl6ZSIsInByZWZpeCIsImtleXMiLCJrIiwidiIsImVuY29kZVVSSUNvbXBvbmVudCIsImF4aW9zIiwicmVxdWlyZSIsImdldEpzb24iLCJ1cmwiLCJwYXJhbXMiLCJlbmNvZGVVUkkiLCJzZWFyY2giLCJ0aW1lb3V0IiwibWV0aG9kIiwiaGVhZGVycyIsIkFjY2VwdCIsInRoZW4iLCJyZXMiLCJkYXRhIiwiZ2V0R2VvY29kaW5nUmVzdWx0cyIsInNlYXJjaFN0cmluZyIsInNlYXJjaFBhcmFtcyIsImxhbmciLCJmb2N1c1BvaW50Iiwic291cmNlcyIsInBlbGlhc1VybCIsIm1pbmltYWxSZWdleHAiLCJnZW9jb2RpbmdMYXllcnMiLCJ0ZXh0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJQRUxJQVNfVVJMIiwib3B0cyIsImxheWVycyIsImdldFN0b3BzRnJvbUdlb2NvZGluZyIsInN0b3BzIiwiVVJMX1BFTElBU19QTEFDRSIsImdpZHMiLCJzdG9wU3RhdGlvbk1hcCIsInN0b3AiLCJzdG9wT3JTdGF0aW9uIiwiaWRzIiwiYWRkZW5kdW0iLCJsYXN0VXBkYXRlZCIsImZhdm91cml0ZUlkIiwiZ2V0T2xkU2VhcmNoZXMiLCJvbGRTZWFyY2hlcyIsImRyb3BMYXllcnMiLCJtYXRjaGluZ09sZFNlYXJjaGVzIiwidGFrZSIsIm5ld0l0ZW0iLCJ0aW1ldGFibGVDbGlja2VkIiwiYXJyb3dDbGlja2VkIiwicm91dGVMYXllcnMiLCJsb2NhdGlvbkxheWVycyIsInBhcmtpbmdMYXllcnMiLCJkZWJvdW5jZWRTZWFyY2giLCJkZWJvdW5jZSIsInRhcmdldHMiLCJ0cmFuc3BvcnRNb2RlIiwic2VhcmNoQ29udGV4dCIsImZpbHRlclJlc3VsdHMiLCJnZW9jb2RpbmdTaXplIiwiY2FsbGJhY2siLCJwYXRoT3B0cyIsInJlZlBvaW50IiwiZ2V0UG9zaXRpb25zIiwibG9jYXRpb25zIiwiZ2V0RmF2b3VyaXRlTG9jYXRpb25zIiwicHJldlNlYXJjaGVzIiwiZ2V0RmF2b3VyaXRlU3RvcHMiLCJwYXJraW5nQXJlYVNvdXJjZXMiLCJnZXRMYW5ndWFnZSIsImdldFN0b3BBbmRTdGF0aW9uc1F1ZXJ5IiwiZ2V0RmF2b3VyaXRlQmlrZVJlbnRhbFN0YXRpb25zUXVlcnkiLCJnZXRGYXZvdXJpdGVCaWtlUmVudGFsU3RhdGlvbnMiLCJnZXRGYXZvdXJpdGVSb3V0ZXNRdWVyeSIsImdldEZhdm91cml0ZVJvdXRlcyIsImdldFJvdXRlc1F1ZXJ5IiwiY29udGV4dCIsImxvY2F0aW9uQXdhcmUiLCJpc1BlbGlhc0xvY2F0aW9uQXdhcmUiLCJVUkxfUEVMSUFTIiwiZmVlZElEcyIsImdlb2NvZGluZ1NlYXJjaFBhcmFtcyIsImdlb2NvZGluZ1NvdXJjZXMiLCJnZXRGdXR1cmVSb3V0ZXMiLCJjaXR5QmlrZU5ldHdvcmtzIiwiYWxsVGFyZ2V0cyIsImFsbFNvdXJjZXMiLCJwb3NpdGlvbiIsInNlYXJjaENvbXBvbmVudHMiLCJzZWFyY2hlcyIsImxhbmd1YWdlIiwibGF0IiwibG9uIiwidG9GaXhlZCIsInN0YXR1cyIsImdldEN1cnJlbnRQb3NpdGlvbklmRW1wdHkiLCJzZWxlY3RQb3NpdGlvbkZvbU1hcCIsIml0ZW1zIiwiZmF2b3VyaXRlTG9jYXRpb25zIiwiZmF2b3VyaXRlU3RvcHMiLCJoYXNGYXZvdXJpdGVzIiwic2VsZWN0RnJvbU93bkxvY2F0aW9ucyIsImZhdm91cml0ZXMiLCJmZWVkaXMiLCJnZW9zb3VyY2VzIiwibG9jYXRpb25IaXN0b3J5Iiwic2l6ZSIsImZlZWRJZHMiLCJoaXN0b3J5Iiwic3RvcHNBbmRTdGF0aW9ucyIsImV2ZXJ5IiwiZGVkdXBlc3RvcHMiLCJzdG9wSGlzdG9yeSIsImZhdm91cml0ZVJvdXRlcyIsInJvdXRlSGlzdG9yeSIsImZhdm91cml0ZUJpa2VTdGF0aW9ucyIsImFsbCIsImZsYXR0ZW4iLCJlcnJvciIsImxlYWRpbmciLCJtb2R1bGUiLCJob29rQ2FsbGJhY2siLCJzb21lIiwiaG9va3MiLCJzZXRIb29rQ2FsbGJhY2siLCJpc09iamVjdCIsImhhc093blByb3AiLCJhIiwiYiIsImlzT2JqZWN0RW1wdHkiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiaXNVbmRlZmluZWQiLCJpc051bWJlciIsImlzRGF0ZSIsIkRhdGUiLCJmbiIsImV4dGVuZCIsInZhbHVlT2YiLCJjcmVhdGVVVEMiLCJmb3JtYXQiLCJsb2NhbGUiLCJzdHJpY3QiLCJjcmVhdGVMb2NhbE9yVVRDIiwidXRjIiwiZGVmYXVsdFBhcnNpbmdGbGFncyIsImVtcHR5IiwidW51c2VkVG9rZW5zIiwidW51c2VkSW5wdXQiLCJvdmVyZmxvdyIsImNoYXJzTGVmdE92ZXIiLCJudWxsSW5wdXQiLCJpbnZhbGlkRXJhIiwiaW52YWxpZE1vbnRoIiwiaW52YWxpZEZvcm1hdCIsInVzZXJJbnZhbGlkYXRlZCIsImlzbyIsInBhcnNlZERhdGVQYXJ0cyIsImVyYSIsIm1lcmlkaWVtIiwicmZjMjgyMiIsIndlZWtkYXlNaXNtYXRjaCIsImdldFBhcnNpbmdGbGFncyIsIm0iLCJfcGYiLCJpc1ZhbGlkIiwiX2lzVmFsaWQiLCJmbGFncyIsInBhcnNlZFBhcnRzIiwiaXNOb3dWYWxpZCIsImlzTmFOIiwiZ2V0VGltZSIsImludmFsaWRXZWVrZGF5IiwiX3N0cmljdCIsImJpZ0hvdXIiLCJpc0Zyb3plbiIsImNyZWF0ZUludmFsaWQiLCJOYU4iLCJmdW4iLCJ0IiwibW9tZW50UHJvcGVydGllcyIsInVwZGF0ZUluUHJvZ3Jlc3MiLCJjb3B5Q29uZmlnIiwidG8iLCJwcm9wIiwidmFsIiwiX2lzQU1vbWVudE9iamVjdCIsIl9mIiwiX2wiLCJfdHptIiwiX2lzVVRDIiwiX29mZnNldCIsIl9sb2NhbGUiLCJNb21lbnQiLCJjb25maWciLCJ1cGRhdGVPZmZzZXQiLCJpc01vbWVudCIsIndhcm4iLCJtc2ciLCJzdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3MiLCJjb25zb2xlIiwiZGVwcmVjYXRlIiwiZmlyc3RUaW1lIiwiZGVwcmVjYXRpb25IYW5kbGVyIiwiYXJnIiwiYXJncyIsIkVycm9yIiwic3RhY2siLCJkZXByZWNhdGlvbnMiLCJkZXByZWNhdGVTaW1wbGUiLCJpc0Z1bmN0aW9uIiwiRnVuY3Rpb24iLCJzZXQiLCJfY29uZmlnIiwiX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50IiwiX2RheU9mTW9udGhPcmRpbmFsUGFyc2UiLCJfb3JkaW5hbFBhcnNlIiwibWVyZ2VDb25maWdzIiwicGFyZW50Q29uZmlnIiwiY2hpbGRDb25maWciLCJMb2NhbGUiLCJkZWZhdWx0Q2FsZW5kYXIiLCJzYW1lRGF5IiwibmV4dERheSIsIm5leHRXZWVrIiwibGFzdERheSIsImxhc3RXZWVrIiwic2FtZUVsc2UiLCJjYWxlbmRhciIsIm1vbSIsIm5vdyIsIm91dHB1dCIsIl9jYWxlbmRhciIsInplcm9GaWxsIiwibnVtYmVyIiwidGFyZ2V0TGVuZ3RoIiwiZm9yY2VTaWduIiwiYWJzTnVtYmVyIiwiemVyb3NUb0ZpbGwiLCJwb3ciLCJtYXgiLCJzdWJzdHIiLCJmb3JtYXR0aW5nVG9rZW5zIiwibG9jYWxGb3JtYXR0aW5nVG9rZW5zIiwiZm9ybWF0RnVuY3Rpb25zIiwiZm9ybWF0VG9rZW5GdW5jdGlvbnMiLCJhZGRGb3JtYXRUb2tlbiIsInRva2VuIiwicGFkZGVkIiwib3JkaW5hbCIsImZ1bmMiLCJsb2NhbGVEYXRhIiwicmVtb3ZlRm9ybWF0dGluZ1Rva2VucyIsIm1ha2VGb3JtYXRGdW5jdGlvbiIsImFycmF5IiwiZm9ybWF0TW9tZW50IiwiZXhwYW5kRm9ybWF0IiwiaW52YWxpZERhdGUiLCJyZXBsYWNlTG9uZ0RhdGVGb3JtYXRUb2tlbnMiLCJsb25nRGF0ZUZvcm1hdCIsImxhc3RJbmRleCIsImRlZmF1bHRMb25nRGF0ZUZvcm1hdCIsIkxUUyIsIkxUIiwiTCIsIkxMIiwiTExMIiwiTExMTCIsIl9sb25nRGF0ZUZvcm1hdCIsImZvcm1hdFVwcGVyIiwidG9VcHBlckNhc2UiLCJ0b2siLCJkZWZhdWx0SW52YWxpZERhdGUiLCJfaW52YWxpZERhdGUiLCJkZWZhdWx0T3JkaW5hbCIsImRlZmF1bHREYXlPZk1vbnRoT3JkaW5hbFBhcnNlIiwiX29yZGluYWwiLCJkZWZhdWx0UmVsYXRpdmVUaW1lIiwiZnV0dXJlIiwicGFzdCIsInMiLCJzcyIsIm1tIiwiaCIsImhoIiwiZCIsImRkIiwidyIsInd3IiwiTSIsIk1NIiwieSIsInl5IiwicmVsYXRpdmVUaW1lIiwid2l0aG91dFN1ZmZpeCIsInN0cmluZyIsImlzRnV0dXJlIiwiX3JlbGF0aXZlVGltZSIsInBhc3RGdXR1cmUiLCJkaWZmIiwiYWxpYXNlcyIsImFkZFVuaXRBbGlhcyIsInVuaXQiLCJzaG9ydGhhbmQiLCJsb3dlckNhc2UiLCJub3JtYWxpemVVbml0cyIsInVuaXRzIiwibm9ybWFsaXplT2JqZWN0VW5pdHMiLCJpbnB1dE9iamVjdCIsIm5vcm1hbGl6ZWRQcm9wIiwibm9ybWFsaXplZElucHV0IiwicHJpb3JpdGllcyIsImFkZFVuaXRQcmlvcml0eSIsInByaW9yaXR5IiwiZ2V0UHJpb3JpdGl6ZWRVbml0cyIsInVuaXRzT2JqIiwidSIsInNvcnQiLCJpc0xlYXBZZWFyIiwieWVhciIsImFic0Zsb29yIiwiY2VpbCIsImZsb29yIiwidG9JbnQiLCJhcmd1bWVudEZvckNvZXJjaW9uIiwiY29lcmNlZE51bWJlciIsImlzRmluaXRlIiwibWFrZUdldFNldCIsImtlZXBUaW1lIiwic2V0JDEiLCJtb250aCIsImRhdGUiLCJkYXlzSW5Nb250aCIsInN0cmluZ0dldCIsInN0cmluZ1NldCIsInByaW9yaXRpemVkIiwicmVnZXhlcyIsIm1hdGNoMSIsIm1hdGNoMiIsIm1hdGNoMyIsIm1hdGNoNCIsIm1hdGNoNiIsIm1hdGNoMXRvMiIsIm1hdGNoM3RvNCIsIm1hdGNoNXRvNiIsIm1hdGNoMXRvMyIsIm1hdGNoMXRvNCIsIm1hdGNoMXRvNiIsIm1hdGNoVW5zaWduZWQiLCJtYXRjaFNpZ25lZCIsIm1hdGNoT2Zmc2V0IiwibWF0Y2hTaG9ydE9mZnNldCIsIm1hdGNoVGltZXN0YW1wIiwibWF0Y2hXb3JkIiwiYWRkUmVnZXhUb2tlbiIsInJlZ2V4Iiwic3RyaWN0UmVnZXgiLCJpc1N0cmljdCIsImdldFBhcnNlUmVnZXhGb3JUb2tlbiIsInVuZXNjYXBlRm9ybWF0IiwicmVnZXhFc2NhcGUiLCJtYXRjaGVkIiwicDMiLCJwNCIsInRva2VucyIsImFkZFBhcnNlVG9rZW4iLCJhZGRXZWVrUGFyc2VUb2tlbiIsIl93IiwiYWRkVGltZVRvQXJyYXlGcm9tVG9rZW4iLCJfYSIsIllFQVIiLCJNT05USCIsIkRBVEUiLCJIT1VSIiwiTUlOVVRFIiwiU0VDT05EIiwiTUlMTElTRUNPTkQiLCJXRUVLIiwiV0VFS0RBWSIsIm1vZCIsIngiLCJtb2RNb250aCIsIm1vbnRoc1Nob3J0IiwibW9udGhzIiwibW9udGhzU2hvcnRSZWdleCIsIm1vbnRoc1JlZ2V4IiwibW9udGhzUGFyc2UiLCJkZWZhdWx0TG9jYWxlTW9udGhzIiwiZGVmYXVsdExvY2FsZU1vbnRoc1Nob3J0IiwiTU9OVEhTX0lOX0ZPUk1BVCIsImRlZmF1bHRNb250aHNTaG9ydFJlZ2V4IiwiZGVmYXVsdE1vbnRoc1JlZ2V4IiwibG9jYWxlTW9udGhzIiwiX21vbnRocyIsImlzRm9ybWF0IiwibG9jYWxlTW9udGhzU2hvcnQiLCJfbW9udGhzU2hvcnQiLCJoYW5kbGVTdHJpY3RQYXJzZSIsIm1vbnRoTmFtZSIsImlpIiwibGxjIiwidG9Mb2NhbGVMb3dlckNhc2UiLCJfbW9udGhzUGFyc2UiLCJfbG9uZ01vbnRoc1BhcnNlIiwiX3Nob3J0TW9udGhzUGFyc2UiLCJsb2NhbGVNb250aHNQYXJzZSIsIl9tb250aHNQYXJzZUV4YWN0Iiwic2V0TW9udGgiLCJkYXlPZk1vbnRoIiwibWluIiwiZ2V0U2V0TW9udGgiLCJnZXREYXlzSW5Nb250aCIsImNvbXB1dGVNb250aHNQYXJzZSIsIl9tb250aHNTaG9ydFN0cmljdFJlZ2V4IiwiX21vbnRoc1Nob3J0UmVnZXgiLCJfbW9udGhzU3RyaWN0UmVnZXgiLCJfbW9udGhzUmVnZXgiLCJjbXBMZW5SZXYiLCJzaG9ydFBpZWNlcyIsImxvbmdQaWVjZXMiLCJtaXhlZFBpZWNlcyIsImRheXNJblllYXIiLCJwYXJzZVR3b0RpZ2l0WWVhciIsInBhcnNlSW50IiwiZ2V0U2V0WWVhciIsImdldElzTGVhcFllYXIiLCJjcmVhdGVEYXRlIiwibXMiLCJnZXRGdWxsWWVhciIsInNldEZ1bGxZZWFyIiwiY3JlYXRlVVRDRGF0ZSIsIlVUQyIsImdldFVUQ0Z1bGxZZWFyIiwic2V0VVRDRnVsbFllYXIiLCJmaXJzdFdlZWtPZmZzZXQiLCJkb3ciLCJkb3kiLCJmd2QiLCJnZXRVVENEYXkiLCJkYXlPZlllYXJGcm9tV2Vla3MiLCJ3ZWVrIiwid2Vla2RheSIsInJlc1llYXIiLCJyZXNEYXlPZlllYXIiLCJkYXlPZlllYXIiLCJ3ZWVrT2ZZZWFyIiwicmVzV2VlayIsIndlZWtPZmZzZXQiLCJ3ZWVrc0luWWVhciIsIndlZWtPZmZzZXROZXh0IiwibG9jYWxlV2VlayIsIl93ZWVrIiwiZGVmYXVsdExvY2FsZVdlZWsiLCJsb2NhbGVGaXJzdERheU9mV2VlayIsImxvY2FsZUZpcnN0RGF5T2ZZZWFyIiwiZ2V0U2V0V2VlayIsImFkZCIsImdldFNldElTT1dlZWsiLCJwYXJzZVdlZWtkYXkiLCJ3ZWVrZGF5c1BhcnNlIiwicGFyc2VJc29XZWVrZGF5Iiwic2hpZnRXZWVrZGF5cyIsIndzIiwid2Vla2RheXNNaW4iLCJ3ZWVrZGF5c1Nob3J0Iiwid2Vla2RheXMiLCJ3ZWVrZGF5c01pblJlZ2V4Iiwid2Vla2RheXNTaG9ydFJlZ2V4Iiwid2Vla2RheXNSZWdleCIsImRlZmF1bHRMb2NhbGVXZWVrZGF5cyIsImRlZmF1bHRMb2NhbGVXZWVrZGF5c1Nob3J0IiwiZGVmYXVsdExvY2FsZVdlZWtkYXlzTWluIiwiZGVmYXVsdFdlZWtkYXlzUmVnZXgiLCJkZWZhdWx0V2Vla2RheXNTaG9ydFJlZ2V4IiwiZGVmYXVsdFdlZWtkYXlzTWluUmVnZXgiLCJsb2NhbGVXZWVrZGF5cyIsIl93ZWVrZGF5cyIsImRheSIsImxvY2FsZVdlZWtkYXlzU2hvcnQiLCJfd2Vla2RheXNTaG9ydCIsImxvY2FsZVdlZWtkYXlzTWluIiwiX3dlZWtkYXlzTWluIiwiaGFuZGxlU3RyaWN0UGFyc2UkMSIsIndlZWtkYXlOYW1lIiwiX3dlZWtkYXlzUGFyc2UiLCJfc2hvcnRXZWVrZGF5c1BhcnNlIiwiX21pbldlZWtkYXlzUGFyc2UiLCJsb2NhbGVXZWVrZGF5c1BhcnNlIiwiX3dlZWtkYXlzUGFyc2VFeGFjdCIsIl9mdWxsV2Vla2RheXNQYXJzZSIsImdldFNldERheU9mV2VlayIsImdldERheSIsImdldFNldExvY2FsZURheU9mV2VlayIsImdldFNldElTT0RheU9mV2VlayIsImNvbXB1dGVXZWVrZGF5c1BhcnNlIiwiX3dlZWtkYXlzU3RyaWN0UmVnZXgiLCJfd2Vla2RheXNSZWdleCIsIl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXgiLCJfd2Vla2RheXNTaG9ydFJlZ2V4IiwiX3dlZWtkYXlzTWluU3RyaWN0UmVnZXgiLCJfd2Vla2RheXNNaW5SZWdleCIsIm1pbnAiLCJzaG9ydHAiLCJsb25ncCIsIm1pblBpZWNlcyIsImhGb3JtYXQiLCJob3VycyIsImtGb3JtYXQiLCJsb3dlcmNhc2UiLCJtaW51dGVzIiwibWF0Y2hNZXJpZGllbSIsIl9tZXJpZGllbVBhcnNlIiwibG9jYWxlSXNQTSIsImNoYXJBdCIsInNlY29uZHMiLCJrSW5wdXQiLCJfaXNQbSIsImlzUE0iLCJfbWVyaWRpZW0iLCJwb3MiLCJwb3MxIiwicG9zMiIsImRlZmF1bHRMb2NhbGVNZXJpZGllbVBhcnNlIiwiZ2V0U2V0SG91ciIsImxvY2FsZU1lcmlkaWVtIiwiaXNMb3dlciIsImdsb2JhbExvY2FsZSIsImJhc2VDb25maWciLCJkYXlPZk1vbnRoT3JkaW5hbFBhcnNlIiwibWVyaWRpZW1QYXJzZSIsImxvY2FsZXMiLCJsb2NhbGVGYW1pbGllcyIsImNvbW1vblByZWZpeCIsImFycjEiLCJtaW5sIiwibm9ybWFsaXplTG9jYWxlIiwiY2hvb3NlTG9jYWxlIiwibmFtZXMiLCJqIiwibG9hZExvY2FsZSIsIm9sZExvY2FsZSIsImV4cG9ydHMiLCJfYWJiciIsImdldFNldEdsb2JhbExvY2FsZSIsImUiLCJ2YWx1ZXMiLCJnZXRMb2NhbGUiLCJkZWZpbmVMb2NhbGUiLCJhYmJyIiwicGFyZW50TG9jYWxlIiwidXBkYXRlTG9jYWxlIiwidG1wTG9jYWxlIiwibGlzdExvY2FsZXMiLCJjaGVja092ZXJmbG93IiwiX292ZXJmbG93RGF5T2ZZZWFyIiwiX292ZXJmbG93V2Vla3MiLCJfb3ZlcmZsb3dXZWVrZGF5IiwiZXh0ZW5kZWRJc29SZWdleCIsImJhc2ljSXNvUmVnZXgiLCJ0elJlZ2V4IiwiaXNvRGF0ZXMiLCJpc29UaW1lcyIsImFzcE5ldEpzb25SZWdleCIsIm9ic09mZnNldHMiLCJVVCIsIkdNVCIsIkVEVCIsIkVTVCIsIkNEVCIsIkNTVCIsIk1EVCIsIk1TVCIsIlBEVCIsIlBTVCIsImNvbmZpZ0Zyb21JU08iLCJsIiwiYWxsb3dUaW1lIiwiZGF0ZUZvcm1hdCIsInRpbWVGb3JtYXQiLCJ0ekZvcm1hdCIsImV4ZWMiLCJjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0IiwiZXh0cmFjdEZyb21SRkMyODIyU3RyaW5ncyIsInllYXJTdHIiLCJtb250aFN0ciIsImRheVN0ciIsImhvdXJTdHIiLCJtaW51dGVTdHIiLCJzZWNvbmRTdHIiLCJ1bnRydW5jYXRlWWVhciIsInByZXByb2Nlc3NSRkMyODIyIiwiY2hlY2tXZWVrZGF5Iiwid2Vla2RheVN0ciIsInBhcnNlZElucHV0IiwiY2FsY3VsYXRlT2Zmc2V0Iiwib2JzT2Zmc2V0IiwibWlsaXRhcnlPZmZzZXQiLCJudW1PZmZzZXQiLCJobSIsImNvbmZpZ0Zyb21SRkMyODIyIiwicGFyc2VkQXJyYXkiLCJzZXRVVENNaW51dGVzIiwiZ2V0VVRDTWludXRlcyIsImNvbmZpZ0Zyb21TdHJpbmciLCJjcmVhdGVGcm9tSW5wdXRGYWxsYmFjayIsImRlZmF1bHRzIiwiYyIsImN1cnJlbnREYXRlQXJyYXkiLCJub3dWYWx1ZSIsIl91c2VVVEMiLCJnZXRVVENNb250aCIsImdldFVUQ0RhdGUiLCJnZXRNb250aCIsImdldERhdGUiLCJjb25maWdGcm9tQXJyYXkiLCJjdXJyZW50RGF0ZSIsImV4cGVjdGVkV2Vla2RheSIsInllYXJUb1VzZSIsImRheU9mWWVhckZyb21XZWVrSW5mbyIsIl9kYXlPZlllYXIiLCJfbmV4dERheSIsIndlZWtZZWFyIiwidGVtcCIsIndlZWtkYXlPdmVyZmxvdyIsImN1cldlZWsiLCJHRyIsIlciLCJFIiwiY3JlYXRlTG9jYWwiLCJnZyIsIklTT184NjAxIiwiUkZDXzI4MjIiLCJza2lwcGVkIiwic3RyaW5nTGVuZ3RoIiwidG90YWxQYXJzZWRJbnB1dExlbmd0aCIsIm1lcmlkaWVtRml4V3JhcCIsImVyYXNDb252ZXJ0WWVhciIsImhvdXIiLCJpc1BtIiwibWVyaWRpZW1Ib3VyIiwiY29uZmlnRnJvbVN0cmluZ0FuZEFycmF5IiwidGVtcENvbmZpZyIsImJlc3RNb21lbnQiLCJzY29yZVRvQmVhdCIsImN1cnJlbnRTY29yZSIsInZhbGlkRm9ybWF0Rm91bmQiLCJiZXN0Rm9ybWF0SXNWYWxpZCIsInNjb3JlIiwiY29uZmlnRnJvbU9iamVjdCIsImRheU9yRGF0ZSIsIm1pbnV0ZSIsInNlY29uZCIsIm1pbGxpc2Vjb25kIiwiY3JlYXRlRnJvbUNvbmZpZyIsInByZXBhcmVDb25maWciLCJwcmVwYXJzZSIsImNvbmZpZ0Zyb21JbnB1dCIsImlzVVRDIiwicHJvdG90eXBlTWluIiwib3RoZXIiLCJwcm90b3R5cGVNYXgiLCJwaWNrQnkiLCJtb21lbnRzIiwib3JkZXJpbmciLCJpc0R1cmF0aW9uVmFsaWQiLCJ1bml0SGFzRGVjaW1hbCIsInBhcnNlRmxvYXQiLCJpc1ZhbGlkJDEiLCJjcmVhdGVJbnZhbGlkJDEiLCJjcmVhdGVEdXJhdGlvbiIsIkR1cmF0aW9uIiwiZHVyYXRpb24iLCJ5ZWFycyIsInF1YXJ0ZXJzIiwicXVhcnRlciIsIndlZWtzIiwiaXNvV2VlayIsImRheXMiLCJtaWxsaXNlY29uZHMiLCJfbWlsbGlzZWNvbmRzIiwiX2RheXMiLCJfZGF0YSIsIl9idWJibGUiLCJpc0R1cmF0aW9uIiwiYWJzUm91bmQiLCJyb3VuZCIsImNvbXBhcmVBcnJheXMiLCJhcnJheTEiLCJhcnJheTIiLCJkb250Q29udmVydCIsImxlbmd0aERpZmYiLCJkaWZmcyIsIm9mZnNldCIsInNlcGFyYXRvciIsInV0Y09mZnNldCIsInNpZ24iLCJvZmZzZXRGcm9tU3RyaW5nIiwiY2h1bmtPZmZzZXQiLCJtYXRjaGVyIiwibWF0Y2hlcyIsImNsb25lV2l0aE9mZnNldCIsIm1vZGVsIiwiY2xvbmUiLCJzZXRUaW1lIiwibG9jYWwiLCJnZXREYXRlT2Zmc2V0IiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJnZXRTZXRPZmZzZXQiLCJrZWVwTG9jYWxUaW1lIiwia2VlcE1pbnV0ZXMiLCJsb2NhbEFkanVzdCIsIl9jaGFuZ2VJblByb2dyZXNzIiwiYWRkU3VidHJhY3QiLCJnZXRTZXRab25lIiwic2V0T2Zmc2V0VG9VVEMiLCJzZXRPZmZzZXRUb0xvY2FsIiwic3VidHJhY3QiLCJzZXRPZmZzZXRUb1BhcnNlZE9mZnNldCIsInRab25lIiwiaGFzQWxpZ25lZEhvdXJPZmZzZXQiLCJpc0RheWxpZ2h0U2F2aW5nVGltZSIsImlzRGF5bGlnaHRTYXZpbmdUaW1lU2hpZnRlZCIsIl9pc0RTVFNoaWZ0ZWQiLCJ0b0FycmF5IiwiaXNMb2NhbCIsImlzVXRjT2Zmc2V0IiwiaXNVdGMiLCJhc3BOZXRSZWdleCIsImlzb1JlZ2V4IiwicmV0IiwiZGlmZlJlcyIsInBhcnNlSXNvIiwibW9tZW50c0RpZmZlcmVuY2UiLCJpbnAiLCJwb3NpdGl2ZU1vbWVudHNEaWZmZXJlbmNlIiwiYmFzZSIsImlzQWZ0ZXIiLCJpc0JlZm9yZSIsImNyZWF0ZUFkZGVyIiwiZGlyZWN0aW9uIiwicGVyaW9kIiwidG1wIiwiaXNBZGRpbmciLCJpbnZhbGlkIiwiU3RyaW5nIiwiaXNNb21lbnRJbnB1dCIsImlzTnVtYmVyT3JTdHJpbmdBcnJheSIsImlzTW9tZW50SW5wdXRPYmplY3QiLCJwcm9wZXJ0eSIsIm9iamVjdFRlc3QiLCJwcm9wZXJ0eVRlc3QiLCJhcnJheVRlc3QiLCJkYXRhVHlwZVRlc3QiLCJpc0NhbGVuZGFyU3BlYyIsImdldENhbGVuZGFyRm9ybWF0IiwibXlNb21lbnQiLCJjYWxlbmRhciQxIiwidGltZSIsImZvcm1hdHMiLCJzb2QiLCJzdGFydE9mIiwiY2FsZW5kYXJGb3JtYXQiLCJsb2NhbElucHV0IiwiZW5kT2YiLCJpc0JldHdlZW4iLCJpbmNsdXNpdml0eSIsImxvY2FsRnJvbSIsImxvY2FsVG8iLCJpc1NhbWUiLCJpbnB1dE1zIiwiaXNTYW1lT3JBZnRlciIsImlzU2FtZU9yQmVmb3JlIiwiYXNGbG9hdCIsInRoYXQiLCJ6b25lRGVsdGEiLCJtb250aERpZmYiLCJ3aG9sZU1vbnRoRGlmZiIsImFuY2hvciIsInRvSVNPU3RyaW5nIiwia2VlcE9mZnNldCIsInRvRGF0ZSIsImluc3BlY3QiLCJkYXRldGltZSIsInN1ZmZpeCIsInpvbmUiLCJpbnB1dFN0cmluZyIsImRlZmF1bHRGb3JtYXRVdGMiLCJkZWZhdWx0Rm9ybWF0IiwicG9zdGZvcm1hdCIsImh1bWFuaXplIiwiZnJvbU5vdyIsInRvTm93IiwibmV3TG9jYWxlRGF0YSIsIk1TX1BFUl9TRUNPTkQiLCJNU19QRVJfTUlOVVRFIiwiTVNfUEVSX0hPVVIiLCJNU19QRVJfNDAwX1lFQVJTIiwibW9kJDEiLCJkaXZpZGVuZCIsImRpdmlzb3IiLCJsb2NhbFN0YXJ0T2ZEYXRlIiwidXRjU3RhcnRPZkRhdGUiLCJzdGFydE9mRGF0ZSIsImlzb1dlZWtkYXkiLCJ1bml4IiwidG9PYmplY3QiLCJ0b0pTT04iLCJpc1ZhbGlkJDIiLCJwYXJzaW5nRmxhZ3MiLCJpbnZhbGlkQXQiLCJjcmVhdGlvbkRhdGEiLCJsb2NhbGVFcmFzIiwiZXJhcyIsIl9lcmFzIiwic2luY2UiLCJ1bnRpbCIsImxvY2FsZUVyYXNQYXJzZSIsImVyYU5hbWUiLCJuYXJyb3ciLCJsb2NhbGVFcmFzQ29udmVydFllYXIiLCJkaXIiLCJnZXRFcmFOYW1lIiwiZ2V0RXJhTmFycm93IiwiZ2V0RXJhQWJiciIsImdldEVyYVllYXIiLCJlcmFzTmFtZVJlZ2V4IiwiY29tcHV0ZUVyYXNQYXJzZSIsIl9lcmFzTmFtZVJlZ2V4IiwiX2VyYXNSZWdleCIsImVyYXNBYmJyUmVnZXgiLCJfZXJhc0FiYnJSZWdleCIsImVyYXNOYXJyb3dSZWdleCIsIl9lcmFzTmFycm93UmVnZXgiLCJtYXRjaEVyYUFiYnIiLCJtYXRjaEVyYU5hbWUiLCJtYXRjaEVyYU5hcnJvdyIsIm1hdGNoRXJhWWVhck9yZGluYWwiLCJfZXJhWWVhck9yZGluYWxSZWdleCIsImFiYnJQaWVjZXMiLCJuYW1lUGllY2VzIiwibmFycm93UGllY2VzIiwiYWRkV2Vla1llYXJGb3JtYXRUb2tlbiIsImdldHRlciIsImdldFNldFdlZWtZZWFyIiwiZ2V0U2V0V2Vla1llYXJIZWxwZXIiLCJnZXRTZXRJU09XZWVrWWVhciIsImdldElTT1dlZWtzSW5ZZWFyIiwiZ2V0SVNPV2Vla3NJbklTT1dlZWtZZWFyIiwiaXNvV2Vla1llYXIiLCJnZXRXZWVrc0luWWVhciIsIndlZWtJbmZvIiwiZ2V0V2Vla3NJbldlZWtZZWFyIiwid2Vla3NUYXJnZXQiLCJzZXRXZWVrQWxsIiwiZGF5T2ZZZWFyRGF0YSIsImdldFNldFF1YXJ0ZXIiLCJlcmFzUGFyc2UiLCJlcmFZZWFyT3JkaW5hbFBhcnNlIiwiZ2V0U2V0RGF5T2ZNb250aCIsImdldFNldERheU9mWWVhciIsImdldFNldE1pbnV0ZSIsImdldFNldE1pbGxpc2Vjb25kIiwiZ2V0U2V0U2Vjb25kIiwicGFyc2VNcyIsImdldFpvbmVBYmJyIiwiZ2V0Wm9uZU5hbWUiLCJwcm90byIsImNyZWF0ZVVuaXgiLCJjcmVhdGVJblpvbmUiLCJwYXJzZVpvbmUiLCJwcmVQYXJzZVBvc3RGb3JtYXQiLCJmb3IiLCJlcmFOYXJyb3ciLCJlcmFBYmJyIiwiZXJhWWVhciIsImlzb1dlZWtzIiwid2Vla3NJbldlZWtZZWFyIiwiaXNvV2Vla3NJblllYXIiLCJpc29XZWVrc0luSVNPV2Vla1llYXIiLCJpc0RTVCIsInpvbmVBYmJyIiwiem9uZU5hbWUiLCJkYXRlcyIsImlzRFNUU2hpZnRlZCIsInByb3RvJDEiLCJnZXQkMSIsImluZGV4IiwiZmllbGQiLCJzZXR0ZXIiLCJsaXN0TW9udGhzSW1wbCIsIm91dCIsImxpc3RXZWVrZGF5c0ltcGwiLCJsb2NhbGVTb3J0ZWQiLCJzaGlmdCIsImxpc3RNb250aHMiLCJsaXN0TW9udGhzU2hvcnQiLCJsaXN0V2Vla2RheXMiLCJsaXN0V2Vla2RheXNTaG9ydCIsImxpc3RXZWVrZGF5c01pbiIsImZpcnN0RGF5T2ZZZWFyIiwiZmlyc3REYXlPZldlZWsiLCJsYW5nRGF0YSIsIm1hdGhBYnMiLCJhZGRTdWJ0cmFjdCQxIiwiYWRkJDEiLCJzdWJ0cmFjdCQxIiwiYWJzQ2VpbCIsImJ1YmJsZSIsIm1vbnRoc0Zyb21EYXlzIiwibW9udGhzVG9EYXlzIiwiZGF5c1RvTW9udGhzIiwiYXMiLCJ2YWx1ZU9mJDEiLCJtYWtlQXMiLCJhbGlhcyIsImFzTWlsbGlzZWNvbmRzIiwiYXNTZWNvbmRzIiwiYXNNaW51dGVzIiwiYXNIb3VycyIsImFzRGF5cyIsImFzV2Vla3MiLCJhc01vbnRocyIsImFzUXVhcnRlcnMiLCJhc1llYXJzIiwiY2xvbmUkMSIsImdldCQyIiwibWFrZUdldHRlciIsInRocmVzaG9sZHMiLCJzdWJzdGl0dXRlVGltZUFnbyIsInJlbGF0aXZlVGltZSQxIiwicG9zTmVnRHVyYXRpb24iLCJnZXRTZXRSZWxhdGl2ZVRpbWVSb3VuZGluZyIsInJvdW5kaW5nRnVuY3Rpb24iLCJnZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQiLCJ0aHJlc2hvbGQiLCJsaW1pdCIsImFyZ1dpdGhTdWZmaXgiLCJhcmdUaHJlc2hvbGRzIiwid2l0aFN1ZmZpeCIsInRoIiwiYWJzJDEiLCJ0b0lTT1N0cmluZyQxIiwidG90YWxTaWduIiwieW1TaWduIiwiZGF5c1NpZ24iLCJobXNTaWduIiwidG90YWwiLCJwcm90byQyIiwidG9Jc29TdHJpbmciLCJ2ZXJzaW9uIiwicmVsYXRpdmVUaW1lUm91bmRpbmciLCJyZWxhdGl2ZVRpbWVUaHJlc2hvbGQiLCJIVE1MNV9GTVQiLCJEQVRFVElNRV9MT0NBTCIsIkRBVEVUSU1FX0xPQ0FMX1NFQ09ORFMiLCJEQVRFVElNRV9MT0NBTF9NUyIsIlRJTUUiLCJUSU1FX1NFQ09ORFMiLCJUSU1FX01TIiwiZmFjdG9yeSIsInJvb3QiLCJtb21lbnQiLCJkZWZhdWx0IiwiY2FjaGVkR3Vlc3MiLCJ6b25lcyIsImxpbmtzIiwiY291bnRyaWVzIiwiZ3Vlc3NlcyIsImxvZ0Vycm9yIiwibW9tZW50VmVyc2lvbiIsIm1ham9yIiwibWlub3IiLCJjaGFyQ29kZVRvSW50IiwiY2hhckNvZGUiLCJ1bnBhY2tCYXNlNjAiLCJ3aG9sZSIsImZyYWN0aW9uYWwiLCJtdWx0aXBsaWVyIiwiY2hhckNvZGVBdCIsImFycmF5VG9JbnQiLCJtYXBJbmRpY2VzIiwiaW5kaWNlcyIsInVucGFjayIsIm9mZnNldHMiLCJ1bnRpbHMiLCJJbmZpbml0eSIsImludFRvVW50aWwiLCJhYmJycyIsInBvcHVsYXRpb24iLCJab25lIiwicGFja2VkU3RyaW5nIiwiX3NldCIsIkNvdW50cnkiLCJjb3VudHJ5X25hbWUiLCJ6b25lX25hbWVzIiwiT2Zmc2V0QXQiLCJhdCIsInRpbWVTdHJpbmciLCJ0b1RpbWVTdHJpbmciLCJab25lU2NvcmUiLCJvZmZzZXRTY29yZSIsImFiYnJTY29yZSIsImZpbmRDaGFuZ2UiLCJsb3ciLCJoaWdoIiwibWlkIiwic29ydFpvbmVTY29yZXMiLCJsb2NhbGVDb21wYXJlIiwiYWRkVG9HdWVzc2VzIiwiZ3Vlc3Nlc0ZvclVzZXJPZmZzZXRzIiwiZ3Vlc3Nlc09mZnNldCIsIm9mZnNldHNMZW5ndGgiLCJmaWx0ZXJlZEd1ZXNzZXMiLCJyZWJ1aWxkR3Vlc3MiLCJpbnRsTmFtZSIsIkludGwiLCJEYXRlVGltZUZvcm1hdCIsInJlc29sdmVkT3B0aW9ucyIsInRpbWVab25lIiwibm9ybWFsaXplTmFtZSIsInpvbmVTY29yZSIsImNoYW5nZSIsInN0YXJ0WWVhciIsImxhc3QiLCJ1c2VyT2Zmc2V0cyIsInpvbmVTY29yZXMiLCJnZXRab25lIiwic2NvcmVPZmZzZXRBdCIsImFkZFpvbmUiLCJwYWNrZWQiLCJub3JtYWxpemVkIiwiY2FsbGVyIiwibGluayIsImFkZExpbmsiLCJub3JtYWwwIiwibm9ybWFsMSIsIm5lZWRzT2Zmc2V0IiwiaXNVbml4VGltZXN0YW1wIiwibWVzc2FnZSIsInR6IiwicGFyc2UiLCJ1bnBhY2tlZCIsIl9pbmRleCIsInRpbWVzdGFtcCIsInpvbmVfbmFtZSIsImNvdW50cnlfY29kZSIsIm9mZnNldE5leHQiLCJvZmZzZXRQcmV2IiwibW92ZUFtYmlndW91c0ZvcndhcmQiLCJtb3ZlSW52YWxpZEZvcndhcmQiLCJvZmZzZXRBdCIsImRhdGFWZXJzaW9uIiwiX3pvbmVzIiwiX2xpbmtzIiwiX25hbWVzIiwiX2NvdW50cmllcyIsImxvYWQiLCJjb3VudHJ5X3pvbmVzIiwiYWRkQ291bnRyaWVzIiwiem9uZUV4aXN0cyIsImRpZFNob3dFcnJvciIsImd1ZXNzIiwiaWdub3JlQ2FjaGUiLCJ6b25lc0ZvckNvdW50cnkiLCJjb3VudHJ5Iiwid2l0aF9vZmZzZXQiLCJvbGQiLCJhYmJyV3JhcCIsIl96IiwicmVzZXRab25lV3JhcCIsImRlZmF1bHRab25lIiwieiIsInNldERlZmF1bHQiLCJyZXF1aXJlJCQwIiwicmVxdWlyZSQkMSIsInRyYW5zbGF0aW9ucyIsIm51bWJlcnNQYXN0IiwibnVtYmVyc0Z1dHVyZSIsInRyYW5zbGF0ZSIsInZlcmJhbE51bWJlciIsImxsIiwibGxsIiwibGxsbCIsInByb2Nlc3NSZWxhdGl2ZVRpbWUiLCJtb250aHNQYXJzZUV4YWN0Iiwid2Vla2RheXNQYXJzZUV4YWN0IiwiZGUiLCJhaXJwbGFuZSIsImFycml2YWwiLCJiYWNrIiwiYmlrZXJlbnRhbHN0YXRpb24iLCJidXMiLCJjYW5jZWwiLCJjdXJyZW50cG9zaXRpb24iLCJkZXBhcnR1cmUiLCJmYXZvdXJpdGUiLCJmZXJyeSIsIm93bmxvY2F0aW9ucyIsImxvYWRpbmciLCJyYWlsIiwic3RyZWV0Iiwic3Vid2F5Iiwic3RhdGlvbiIsInRyYW0iLCJ2ZW51ZSIsIndoZXJlIiwicGxhY2UiLCJlbiIsImJpa2VwYXJrIiwiY2FycGFyayIsInBsYXRmb3JtIiwicmVxdWlyZWQiLCJ0cmFjayIsImZpIiwic3YiLCJzdHlsZUluamVjdCIsImNzcyIsInJlZiIsImluc2VydEF0IiwiZG9jdW1lbnQiLCJoZWFkIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJzdHlsZSIsImNyZWF0ZUVsZW1lbnQiLCJmaXJzdENoaWxkIiwiaW5zZXJ0QmVmb3JlIiwiYXBwZW5kQ2hpbGQiLCJzdHlsZVNoZWV0IiwiY3NzVGV4dCIsImNyZWF0ZVRleHROb2RlIiwiQXV0b3N1Z2dlc3RQYXRjaCIsIm9uU3VnZ2VzdGlvblRvdWNoTW92ZSIsImp1c3RTZWxlY3RlZFN1Z2dlc3Rpb24iLCJwcmVzc2VkU3VnZ2VzdGlvbiIsIkF1dG9zdWdnZXN0IiwiTW9iaWxlU2VhcmNoIiwiYXBwRWxlbWVudCIsImNsb3NlSGFuZGxlIiwiY2xlYXJJbnB1dCIsInN1Z2dlc3Rpb25zIiwiaW5wdXRQcm9wcyIsImZldGNoRnVuY3Rpb24iLCJyZW5kZXJTdWdnZXN0aW9uIiwiZ2V0U3VnZ2VzdGlvblZhbHVlIiwiYXJpYUxhYmVsIiwib25TdWdnZXN0aW9uU2VsZWN0ZWQiLCJjbGVhck9sZFNlYXJjaGVzIiwiZGlhbG9nSGVhZGVyVGV4dCIsImRpYWxvZ1ByaW1hcnlCdXR0b25UZXh0IiwiZGlhbG9nU2Vjb25kYXJ5QnV0dG9uVGV4dCIsImNsZWFySW5wdXRCdXR0b25UZXh0IiwiZm9jdXNJbnB1dCIsImNvbG9yIiwiaG92ZXJDb2xvciIsImFjY2Vzc2libGVQcmltYXJ5Q29sb3IiLCJzZWFyY2hPcGVuIiwiZm9udFdlaWdodHMiLCJzdHlsZXMiLCJzaG93U2Nyb2xsIiwibW9iaWxlU3R5bGVzIiwibW9iaWxlTm9TY3JvbGxTdHlsZXMiLCJpbnB1dElkIiwidXNlU3RhdGUiLCJpc0RpYWxvZ09wZW4iLCJzZXREaWFsb2dPcGVuIiwiaW5wdXRSZWYiLCJSZWFjdCIsInVzZVJlZiIsInVzZUVmZmVjdCIsIlJlYWN0TW9kYWwiLCJzZXRBcHBFbGVtZW50Iiwib25DbG9zZSIsInVzZUNhbGxiYWNrIiwib25TZWxlY3QiLCJpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQiLCJldmVudCIsIndoaWNoIiwia2V5Q29kZSIsInByZXZlbnREZWZhdWx0IiwiZ2V0VmFsdWUiLCJyZW5kZXJJdGVtIiwiY2xhc3NOYW1lIiwiX2lucHV0UmVmJGN1cnJlbnQiLCJmb2N1cyIsImlzT3BlbiIsIm92ZXJsYXlDbGFzc05hbWUiLCJvbkFmdGVyQ2xvc2UiLCJzaG91bGRDbG9zZU9uRXNjIiwibWVkaXVtIiwiaHRtbEZvciIsIm9uQ2xpY2siLCJvbktleURvd24iLCJ0YWJJbmRleCIsIkljb24iLCJpbWciLCJhbHdheXNSZW5kZXJTdWdnZXN0aW9ucyIsIm9uU3VnZ2VzdGlvbnNGZXRjaFJlcXVlc3RlZCIsImZvY3VzSW5wdXRPblN1Z2dlc3Rpb25DbGljayIsInNob3VsZFJlbmRlclN1Z2dlc3Rpb25zIiwiaGFzVmFsdWUiLCJhdXRvRm9jdXMiLCJyZW5kZXJJbnB1dENvbXBvbmVudCIsInRoZW1lIiwiRGlhbG9nTW9kYWwiLCJpc01vZGFsT3BlbiIsImhhbmRsZUNsb3NlIiwiaGVhZGVyVGV4dCIsInByaW1hcnlCdXR0b25UZXh0Iiwic2Vjb25kYXJ5QnV0dG9uVGV4dCIsInByaW1hcnlCdXR0b25PbkNsaWNrIiwic2Vjb25kYXJ5QnV0dG9uT25DbGljayIsInByb2Nlc3MiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJpc1JlcXVpcmVkIiwic2hhcGUiLCJvbkNoYW5nZSIsIm9uQmx1ciIsInBsYWNlaG9sZGVyIiwiX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9yZWFjdF9fIiwibW9kdWxlcyIsImluc3RhbGxlZE1vZHVsZXMiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJyIiwidG9TdHJpbmdUYWciLCJfX2VzTW9kdWxlIiwibnMiLCJiaW5kIiwib2JqZWN0IiwiX19jcmVhdGVCaW5kaW5nIiwiazIiLCJfX2V4cG9ydFN0YXIiLCJ1c2VBcnJvd05hdmlnYXRpb24iLCJyZWFjdF8xIiwibGlzdEl0ZW1zIiwib25BcnJvd1VwT3JEb3duIiwiX2IiLCJzZWxlY3RlZEluZGV4Iiwic2V0U2VsZWN0ZWRJbmRleCIsInNldFNlbGVjdGVkSW5kZXhXaXRoVXNlQ2FsbGJhY2siLCJoYW5kbGVLZXlEb3duIiwia2V5Ym9hcmRFdmVudCIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwidXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJvcHRpb25zIiwiY29udGFpbmVyUmVmIiwiaXNWaXNpYmxlIiwic2V0SXNWaXNpYmxlIiwiaGFuZGxlSW50ZXJzZWN0aW9uIiwiZW50cmllcyIsImVudHJ5IiwiaXNJbnRlcnNlY3RpbmciLCJJbnRlcnNlY3Rpb25PYnNlcnZlciIsIm9ic2VydmVyXzEiLCJlbGVtZW50XzEiLCJvYnNlcnZlIiwidW5vYnNlcnZlIiwidXNlSXNCcmVha3BvaW50IiwiYnJlYWtwb2ludHMiLCJ4cyIsIm1vYmlsZVNtYWxsIiwibW9iaWxlIiwidGFibGV0IiwidGFibGV0TGFyZ2UiLCJkZXNrdG9wU21hbGwiLCJkZXNrdG9wIiwiZGVza3RvcExhcmdlIiwiYnJlYWtwb2ludCIsInNjcmVlbldpZHRoIiwic2V0U2NyZWVuV2lkdGgiLCJoYW5kbGVSZXNpemUiLCJpbm5lcldpZHRoIiwicGFzc2l2ZSIsInVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QiLCJ1c2VMYXlvdXRFZmZlY3QiLCJ1c2VPdXRzaWRlUmVhY3RlciIsInJlYWN0ZXJGdW5jdGlvbiIsImhhbmRsZUNsaWNrT3V0c2lkZSIsImNvbnRhaW5zIiwidXNlU2Nyb2xsTG9jayIsImxvY2siLCJzY3JvbGxZIiwiYm9keSIsInRvcCIsInVubG9jayIsInBhcnNlZFNjcm9sbFkiLCJzY3JvbGxUbyIsInJlYWN0IiwiaW5pdCIsImZhbGxiYWNrTG5nIiwiZGVmYXVsdE5TIiwiaW50ZXJwb2xhdGlvbiIsImVzY2FwZVZhbHVlIiwibm9kZSIsImdldFBsYXRmb3JtIiwiR1RGUyIsIm1vZGVzIiwiaTE4bmV4dCIsImdldFN1Z2dlc3Rpb25Db250ZW50Iiwic3VnZ2VzdGlvblR5cGUiLCJfaXRlbSRwcm9wZXJ0aWVzJGFkZGUiLCJ0YWlsMSIsInRhaWwyIiwibmFtZTEiLCJuYW1lMiIsInRyYW5zbGF0ZWRUZXh0IiwidHJhbnNsYXRlRnV0dXJlUm91dGVTdWdnZXN0aW9uVGltZSIsImFycml2ZUJ5IiwiRFRBdXRvc3VnZ2VzdCIsImNvbXBvbmVudERpZFVwZGF0ZSIsIl90aGlzIiwiY2hhbmdlTGFuZ3VhZ2UiLCJVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsIm5leHRQcm9wcyIsInN0YXRlIiwiZWRpdGluZyIsInNldFN0YXRlIiwibmV3VmFsdWUiLCJuZXdTdGF0ZSIsImZJbnB1dCIsInJlbmRlck1vYmlsZVNlYXJjaCIsImlzTW9iaWxlIiwidmFsaWQiLCJ0eXBpbmdUaW1lciIsImNsZWFyVGltZW91dCIsInRpbWVyIiwic2V0VGltZW91dCIsInR5cGluZyIsIm9uU2VsZWN0ZWQiLCJvd25QbGFjZXMiLCJwZW5kaW5nU2VsZWN0aW9uIiwic3VnZ2VzdGlvbkluZGV4Iiwic2VsZWN0aW9uRG9uZSIsInN1Z2dlc3Rpb25WYWx1ZSIsImJsdXIiLCJoYW5kbGVWaWFQb2ludHMiLCJmb2N1c0NoYW5nZSIsImlzRW1iZWRkZWQiLCJjbG9zZU1vYmlsZVNlYXJjaCIsInByZXZTdGF0ZSIsImNoZWNrUGVuZGluZ1NlbGVjdGlvbiIsIm9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZCIsImdldExhYmVsIiwiY2xlYXJCdXR0b24iLCJjbGVhbkV4ZWN1dGVkIiwiaXNMb2NhdGlvblNlYXJjaCIsImlzRW1wdHkiLCJleGVjdXRlU2VhcmNoIiwic2VhcmNoUmVzdWx0IiwidHJhbnNsYXRlZCIsIm9uQ2xlYXIiLCJpbnB1dENsaWNrZWQiLCJpbnB1dFZhbHVlIiwic3RhdGVLZXlEb3duIiwic3RvcmVJbnB1dFJlZmVyZW5jZSIsImF1dG9zdWdnZXN0Iiwic3RvcmVSZWYiLCJmaWxsSW5wdXQiLCJjb250ZW50IiwiU3VnZ2VzdGlvbkl0ZW0iLCJhcmlhRmF2b3VyaXRlU3RyaW5nIiwibW9kZUljb25Db2xvcnMiLCJtb2RlU2V0Iiwia2V5RG93biIsInN1Z2dlc3Rpb25Bc0FyaWFDb250ZW50IiwiZmlyc3RTdWdnZXN0aW9uIiwiU2V0IiwiY2xlYXJGdXR1cmVSb3V0ZXMiLCJpc09yaWdpbkRlc3RpbmF0aW9uT3JWaWFwb2ludCIsIm9uRm9jdXMiLCJwYWdlWU9mZnNldCIsImFkZFJlc291cmNlQnVuZGxlIiwibmV4dFN0YXRlIiwidHJhbnNsYXRlZFBsYWNlaG9sZGVyIiwidGhpbiIsImlucHV0Q2xhc3NOYW1lIiwiYXJpYUJhcklkIiwiU2VhcmNoQmFySWQiLCJhcmlhUmVxdWlyZWRUZXh0IiwiYXJpYUxhYmVsVGV4dCIsImFyaWFTdWdnZXN0aW9uTGVuIiwiY291bnQiLCJhcmlhQ3VycmVudFN1Z2dlc3Rpb24iLCJfdGhpczIiLCJzZWxlY3Rpb24iLCJGcmFnbWVudCIsInJvbGUiLCJtb2JpbGVMYWJlbCIsImN4IiwiaWNvbiIsImhpZ2hsaWdodEZpcnN0U3VnZ2VzdGlvbiIsIkNvbXBvbmVudCIsImRlZmF1bHRQcm9wcyIsInJvdXRlc1ByZWZpeCIsInN0b3BzUHJlZml4IiwiYW55IiwiYXJyYXlPZiIsIkRUQXV0b3N1Z2dlc3RXaXRoU2Nyb2xsTG9jayJdLCJtYXBwaW5ncyI6Imt6REFBZSxTQUFTQSxFQUFRQyxHQWE5QixPQVRFRCxFQURvQixtQkFBWEUsUUFBb0QsaUJBQXBCQSxPQUFPQyxTQUN0QyxTQUFpQkYsR0FDekIsY0FBY0EsR0FHTixTQUFpQkEsR0FDekIsT0FBT0EsR0FBeUIsbUJBQVhDLFFBQXlCRCxFQUFJRyxjQUFnQkYsUUFBVUQsSUFBUUMsT0FBT0csVUFBWSxnQkFBa0JKLEdBSXRIRCxFQUFRQyxHQ2JGLFNBQVNLLElBZXRCLE9BZEFBLEVBQVdDLE9BQU9DLFFBQVUsU0FBVUMsR0FDcEMsSUFBSyxJQUFJQyxFQUFJLEVBQUdBLEVBQUlDLFVBQVVDLE9BQVFGLElBQUssQ0FDekMsSUFBSUcsRUFBU0YsVUFBVUQsR0FFdkIsSUFBSyxJQUFJSSxLQUFPRCxFQUNWTixPQUFPRixVQUFVVSxlQUFlQyxLQUFLSCxFQUFRQyxLQUMvQ0wsRUFBT0ssR0FBT0QsRUFBT0MsSUFLM0IsT0FBT0wsR0FHRkgsRUFBU1csTUFBTUMsS0FBTVAsV0NmZixTQUFTUSxFQUFrQkMsRUFBS0MsSUFDbEMsTUFBUEEsR0FBZUEsRUFBTUQsRUFBSVIsVUFBUVMsRUFBTUQsRUFBSVIsUUFFL0MsSUFBSyxJQUFJRixFQUFJLEVBQUdZLEVBQU8sSUFBSUMsTUFBTUYsR0FBTVgsRUFBSVcsRUFBS1gsSUFDOUNZLEVBQUtaLEdBQUtVLEVBQUlWLEdBR2hCLE9BQU9ZLEVDTk0sU0FBU0UsRUFBNEJDLEVBQUdDLEdBQ3JELEdBQUtELEVBQUwsQ0FDQSxHQUFpQixpQkFBTkEsRUFBZ0IsT0FBT0UsRUFBaUJGLEVBQUdDLEdBQ3RELElBQUlFLEVBQUlyQixPQUFPRixVQUFVd0IsU0FBU2IsS0FBS1MsR0FBR0ssTUFBTSxHQUFJLEdBRXBELE1BRFUsV0FBTkYsR0FBa0JILEVBQUVyQixjQUFhd0IsRUFBSUgsRUFBRXJCLFlBQVkyQixNQUM3QyxRQUFOSCxHQUFxQixRQUFOQSxFQUFvQkwsTUFBTVMsS0FBS1AsR0FDeEMsY0FBTkcsR0FBcUIsMkNBQTJDSyxLQUFLTCxHQUFXRCxFQUFpQkYsRUFBR0MsUUFBeEcsR0NIYSxTQUFTUSxFQUFtQmQsR0FDekMsT0NKYSxTQUE0QkEsR0FDekMsR0FBSUcsTUFBTVksUUFBUWYsR0FBTSxPQUFPTyxFQUFpQlAsR0RHekNnQixDQUFrQmhCLElFTFosU0FBMEJpQixHQUN2QyxHQUFzQixvQkFBWG5DLFFBQTBCQSxPQUFPQyxZQUFZSSxPQUFPOEIsR0FBTyxPQUFPZCxNQUFNUyxLQUFLSyxHRkl2REMsQ0FBZ0JsQixJQUFRbUIsRUFBMkJuQixJR0x2RSxXQUNiLE1BQU0sSUFBSW9CLFVBQVUsd0lISXdFQyxHSUwvRSxTQUFTQyxFQUFnQkMsRUFBVUMsR0FDaEQsS0FBTUQsYUFBb0JDLEdBQ3hCLE1BQU0sSUFBSUosVUFBVSxxQ0NGeEIsU0FBU0ssRUFBa0JwQyxFQUFRcUMsR0FDakMsSUFBSyxJQUFJcEMsRUFBSSxFQUFHQSxFQUFJb0MsRUFBTWxDLE9BQVFGLElBQUssQ0FDckMsSUFBSXFDLEVBQWFELEVBQU1wQyxHQUN2QnFDLEVBQVdDLFdBQWFELEVBQVdDLGFBQWMsRUFDakRELEVBQVdFLGNBQWUsRUFDdEIsVUFBV0YsSUFBWUEsRUFBV0csVUFBVyxHQUNqRDNDLE9BQU80QyxlQUFlMUMsRUFBUXNDLEVBQVdqQyxJQUFLaUMsSUFJbkMsU0FBU0ssRUFBYVIsRUFBYVMsRUFBWUMsR0FHNUQsT0FGSUQsR0FBWVIsRUFBa0JELEVBQVl2QyxVQUFXZ0QsR0FDckRDLEdBQWFULEVBQWtCRCxFQUFhVSxHQUN6Q1YsRUNiTSxTQUFTVyxFQUFnQjlCLEVBQUcrQixHQU16QyxPQUxBRCxFQUFrQmhELE9BQU9rRCxnQkFBa0IsU0FBeUJoQyxFQUFHK0IsR0FFckUsT0FEQS9CLEVBQUVpQyxVQUFZRixFQUNQL0IsR0FHRjhCLEVBQWdCOUIsRUFBRytCLEdDTGIsU0FBU0csRUFBVUMsRUFBVUMsR0FDMUMsR0FBMEIsbUJBQWZBLEdBQTRDLE9BQWZBLEVBQ3RDLE1BQU0sSUFBSXJCLFVBQVUsc0RBR3RCb0IsRUFBU3ZELFVBQVlFLE9BQU91RCxPQUFPRCxHQUFjQSxFQUFXeEQsVUFBVyxDQUNyRUQsWUFBYSxDQUNYMkQsTUFBT0gsRUFDUFYsVUFBVSxFQUNWRCxjQUFjLEtBR2RZLEdBQVlKLEVBQWVHLEVBQVVDLEdDYjVCLFNBQVNHLEdBQXVCQyxHQUM3QyxRQUFhLElBQVRBLEVBQ0YsTUFBTSxJQUFJQyxlQUFlLDZEQUczQixPQUFPRCxFQ0hNLFNBQVNFLEdBQTJCRixFQUFNakQsR0FDdkQsT0FBSUEsR0FBMkIsV0FBbEJoQixFQUFRZ0IsSUFBc0MsbUJBQVRBLEVBSTNDb0QsR0FBc0JILEdBSHBCakQsRUNKSSxTQUFTcUQsR0FBZ0I1QyxHQUl0QyxPQUhBNEMsR0FBa0I5RCxPQUFPa0QsZUFBaUJsRCxPQUFPK0QsZUFBaUIsU0FBeUI3QyxHQUN6RixPQUFPQSxFQUFFaUMsV0FBYW5ELE9BQU8rRCxlQUFlN0MsSUFFdkM0QyxHQUFnQjVDLEdDQVYsU0FBUzhDLEdBQWVuRCxFQUFLVixHQUMxQyxPQ0xhLFNBQXlCVSxHQUN0QyxHQUFJRyxNQUFNWSxRQUFRZixHQUFNLE9BQU9BLEVESXhCb0QsQ0FBZXBELElFTFQsU0FBK0JBLEVBQUtWLEdBQ2pELEdBQXNCLG9CQUFYUixRQUE0QkEsT0FBT0MsWUFBWUksT0FBT2EsR0FBakUsQ0FDQSxJQUFJcUQsRUFBTyxHQUNQQyxHQUFLLEVBQ0xDLEdBQUssRUFDTEMsT0FBS0MsRUFFVCxJQUNFLElBQUssSUFBaUNDLEVBQTdCQyxFQUFLM0QsRUFBSWxCLE9BQU9DLGNBQW1CdUUsR0FBTUksRUFBS0MsRUFBR0MsUUFBUUMsUUFDaEVSLEVBQUtTLEtBQUtKLEVBQUdmLFFBRVRyRCxHQUFLK0QsRUFBSzdELFNBQVdGLEdBSDhDZ0UsR0FBSyxJQUs5RSxNQUFPUyxHQUNQUixHQUFLLEVBQ0xDLEVBQUtPLFVBRUwsSUFDT1QsR0FBc0IsTUFBaEJLLEVBQVcsUUFBV0EsRUFBVyxpQkFFNUMsR0FBSUosRUFBSSxNQUFNQyxHQUlsQixPQUFPSCxHRm5CdUJXLENBQXFCaEUsRUFBS1YsSUFBTTZCLEVBQTJCbkIsRUFBS1YsSUdMakYsV0FDYixNQUFNLElBQUk4QixVQUFVLDZJSElnRjZDLEdJTXZGLFNBQVNDLEdBQU1DLEVBQU1DLFVBQzNCRCxHQUFRQyxHQUFRRCxJQUFTQyxFQ1luQixTQUFTQyxHQUFZQyxFQUFPQyxPQUNuQ0MsRUFBU0YsRUFBTUcsV0FDZkMsRUFBU0gsRUFBTUUsY0FFRixnQkFBZkgsRUFBTUssTUFBeUMsZ0JBQWZKLEVBQU1JLEtBQXdCLEtBQzFEQyxFQUFLSixFQUFPSyxPQUNaQyxFQUFLTixFQUFPTyxZQUNaQyxFQUFLTixFQUFPRyxPQUNaSSxFQUFLUCxFQUFPSyw0QkFFREgsRUFBR2pFLGtCQUFTaUUsRUFBR00sc0JBQWFKLEVBQUduRSxrQkFBU21FLEVBQUdJLHNCQUMzQ0YsRUFBR3JFLGtCQUFTcUUsRUFBR0Usc0JBQWFELEVBQUd0RSxrQkFBU3NFLEVBQUdDLGFBSTNDLGdCQUFmWixFQUFNSyxNQUF5QyxnQkFBZkosRUFBTUksWUFDakMsTUFHWSxzQkFBakJILEVBQU9XLE9BQ1UsK0JBQWpCWCxFQUFPVyxTQUNXLHNCQUFqQlQsRUFBT1MsT0FDVywrQkFBakJULEVBQU9TLFFBQ08sZ0JBQWpCWCxFQUFPVyxPQUE0QyxnQkFBakJULEVBQU9TLGFBRW5DWCxFQUFPWSxVQUFZVixFQUFPVSxXQUUvQlosRUFBT2EsUUFBVVgsRUFBT1csY0FDbkJiLEVBQU9hLFNBQVdYLEVBQU9XLFVBRTlCYixFQUFPYSxRQUFVWCxFQUFPWSxLQUFPWixFQUFPWSxJQUFJQyxTQUFTZixFQUFPYSxlQUNyRCxLQUVMWCxFQUFPVyxRQUFVYixFQUFPYyxLQUFPZCxFQUFPYyxJQUFJQyxTQUFTYixFQUFPVyxlQUNyRCxNQUdXLFNBQWpCYixFQUFPVyxPQUFxQyxZQUFqQlgsRUFBT1csU0FDakIsU0FBakJULEVBQU9TLE9BQXFDLFlBQWpCVCxFQUFPUyxRQUNuQ1gsRUFBT2MsS0FDUFosRUFBT1ksV0FFQWQsRUFBT2MsTUFBUVosRUFBT1ksUUFHekJFLEVBQUtsQixHQUFTQSxFQUFNbUIsU0FBV25CLEVBQU1tQixTQUFTQyxpQkFBY2pDLEVBQzVEa0MsRUFBS3BCLEdBQVNBLEVBQU1rQixTQUFXbEIsRUFBTWtCLFNBQVNDLGlCQUFjakMsV0FFOUQrQixHQUFNRyxHQUVKQyxLQUFLQyxJQUFJTCxFQUFHLEdBQUtHLEVBQUcsSUFBTSxNQUFRQyxLQUFLQyxJQUFJTCxFQUFHLEdBQUtHLEVBQUcsSUFBTSxPQUc1RHpCLEdBQU1NLEVBQU83RCxLQUFNK0QsRUFBTy9ELE9BQzFCdUQsR0FBTU0sRUFBT3NCLE1BQU9wQixFQUFPb0IsUUFDM0I1QixHQUFNTSxFQUFPdUIsUUFBU3JCLEVBQU9xQixVQUM3QjdCLEdBQU1NLEVBQU91QixRQUFTckIsRUFBT29CLFFBQzdCNUIsR0FBTU0sRUFBT3NCLE1BQU9wQixFQUFPcUIsV0M1RW5DLElBQU1DLEdBQVksU0FBQUMsVUFDWEMsVUFBU0QsR0FHUEEsRUFBSUUsY0FGRixJQVFMQyxHQUFZLENBQ2hCQyxRQUFTLFVBQ1RDLEtBQU0sT0FDTkMsZ0JBQWlCLGtCQUNqQkMsY0FBZSxnQkFDZkMsaUJBQWtCLG1CQUNsQkMsZUFBZ0IsaUJBQ2hCQyxlQUFnQixpQkFDaEJDLFlBQWEsY0FDYkMsUUFBUyxVQUNUQyxjQUFlLGdCQUNmQyx1QkFBd0IsZUFDeEJDLEtBQU0sT0FDTkMsT0FBUSxTQUNSQyxNQUFPLFFBQ1BDLGtCQUFtQixvQkFDbkJDLFFBQVMsVUFDVEMsU0FBVSxZQTBDQ0MsR0FBUSxTQUFDQyxFQUFnQkMsT0FDL0J0QixVQUFTcUIsSUFBNkMsSUFBMUJBLEVBQWUvSCxjQUN2QyxRQUdVLENBQUMsT0FBUSxRQUFTLFVBQVcsYUFFN0NpSSxLQUFJLFNBQUE5RyxVQUFRNkcsRUFBaUI3RyxNQUM3QitHLFFBQU8sU0FBQS9FLFVBQVN1RCxVQUFTdkQsSUFBVUEsRUFBTW5ELE9BQVMsS0FDbERpSSxLQUFJLFNBQUE5RSxPQUNHZ0YsRUFBa0IzQixHQUFVckQsVUFDYyxJQUE1Q2dGLEVBQWdCQyxRQUFRTCxHQUVuQixHQUFNQSxFQUFlL0gsT0FBU21JLEVBQWdCbkksT0FLL0MsR0FBTStILEVBQWUvSCxRQUFXK0gsRUFBZS9ILE9BQVMsTUFFakVxSSxRQUNDLFNBQUNDLEVBQVVDLFVBQWFBLEVBQVVELEVBQVdDLEVBQVVELElBQ3ZELElBVU9FLEdBQWUsU0FBQzdDLEVBQU8xRixVQUMxQjBGLFFBQ0RpQixHQUFVRyx1QkFDTixPQUNKSCxHQUFVRSxXQUNOLFFBQ0pGLEdBQVVVLG9CQUNOLFFBQ0pWLEdBQVVXLDZCQUNOLFNBQ0pYLEdBQVVLLHNCQUNWTCxHQUFVTSxvQkFDVk4sR0FBVUksbUJBQ1ZKLEdBQVVPLHFCQUNOLFNBQ0pQLEdBQVVRLGtCQUNOLFNBQ0pSLEdBQVVTLGVBQ1RYLFVBQVN6RyxJQUFzQyxJQUEzQkEsRUFBT21JLFFBQVEsUUFDOUIsSUFFRixTQUVKeEIsR0FBVTZCLHlDQUdOLFNBQ0o3QixHQUFVZ0IsYUFFVmhCLEdBQVVpQixjQUVWakIsR0FBVWUsd0JBQ04sU0FDSmYsR0FBVVksV0FDTixNQW1CQWtCLEdBQW9CLFNBQUNDLEVBQVlDLE9BQVNDLHlEQUFPLE9BQ3ZEbEksTUFBTVksUUFBUXFILFVBQ1ZBLE1BR0hFLEVBQW1CLFNBQUEzRixVQUN2QnVELFVBQVN2RCxJQUFVd0YsR0FBY0EsRUFBV3RILEtBQUs4QixJQUU3QzRFLEVBQWlCdkIsR0FBVXFDLEdBQzNCRSxFQUFlRCxFQUFpQmYsR0FFaENpQixFQUFpQkMsVUFDckJMLEVBQ0EsVUFFRU0sVUFDRUgsR0FDQUQsRUFBaUJ0QyxHQUFVMEMsRUFBT2pFLFdBQVdrRSxhQUNzQixJQUFuRTNDLEdBQVUwQyxFQUFPakUsV0FBV2tFLFdBQVdmLFFBQVFMLEdBQzNDLEVBQ0EsR0FFTixTQUFBbUIsU0FDd0NBLEVBQU9qRSxXQUFyQ21FLElBQUFBLFdBQVl6RCxJQUFBQSxNQUFPMUYsSUFBQUEsVUFDRyxJQUExQjhILEVBQWUvSCxjQUdWd0ksR0FBYTdDLEVBQU8xRixPQUt4Qm1KLEVBQVksS0FFVEMsRUFDSmIsR0FBYTdDLEVBQU8xRixHQUNwQjZILEdBQU1DLEVBQWdCbUIsRUFBT2pFLG1CQUN4QlUsSUFBVWlCLEdBQVVlLGtCQUN2QjBCLEVBQXNCLEdBQ3RCQSxTQUlFMUQsUUFDRGlCLEdBQVVTLGVBRU4rQixHQURrQyxJQUEzQm5KLEVBQU9tSSxRQUFRLFFBQWdCLElBQU8sb0JBSTdDZ0IsT0FDSnhDLEdBQVVZLFVBRVZaLEdBQVVnQixhQUVWaEIsR0FBVWlCLGdCQUNOdUIsRUFBYSxPQUk1QixDQUFDLE9BQVEsZ0JBR0pFLFVBQVNOLEVBQWdCbkUsS0FTckIwRSxHQUFjLFNBQUNwSSxFQUFNcUksVUFFOUJBLE1BQUFBLElBRWdDLElBQWhDckksRUFBS3NJLFlBQVlELEdBRVZySSxFQUFLdUksVUFBVSxFQUFHdkksRUFBS3NJLFlBQVlELEdBQVksR0FFakRySSxHQ3ZOSHdJLEdBQWMsU0FBQUMsVUFDbEJBLEVBQVdDLFlBQ1hELEVBQVdsRSxVQUNWa0UsRUFBV3JELFNBQ1ZxRCxFQUFXckQsUUFBUWtELFlBQVksS0FBT0csRUFBV3JELFFBQVF2RyxPQUFTLEdBQ2xFNEosRUFBV3JELFFBQVFtRCxVQUFVRSxFQUFXckQsUUFBUWtELFlBQVksS0FBTyxJQUNyRSxJQUVXSyxHQUFjLGdCQUFHQyxJQUFBQSxHQUFJQyxJQUFBQSxZQUM1QkEsU0FJSy9GLElBQVA4RixRQUNzQixJQUFmQSxFQUFHM0IsVUFDVyxJQUFyQjJCLEVBQUczQixRQUFRLEtBS04yQixFQUFHTCxVQUFVSyxFQUFHM0IsUUFBUSxLQUFPLFlBRzNCNkIsR0FBNEIsU0FBQzlJLEVBQU1vRixTQUFZLENBQzFEcEYsR0FBU29GLEdBQVdBLEVBQVEyRCxNQUFNLEtBQUssR0FDcEIsaUJBQVozRCxFQUNIQSxFQUFRNEQsUUFBUSxJQUFJQyxpQkFBVUMsVUFBYWxKLGlCQUFtQixJQUM5RCxLQVlPbUosR0FBZUMsV0FDMUIsU0FBQ1gsT0FBWVksaUVBQ0haLEVBQVdqRSxXQUNaLHdCQUNJLENBQUNpRSxFQUFXaEUsUUFBU2dFLEVBQVdyRCxhQUNwQyxvQkFDQSxtQkFDQSxhQUNJLENBQUNxRCxFQUFXaEUsYUFDaEIsd0JBQ0lxRSxHQUEwQkwsRUFBV3pJLEtBQU15SSxFQUFXckQsYUFDMUQsaUNBQ0EsMEJBQ0ksQ0FBQ3FELEVBQVd6SSxVQUNoQixxQkFDQSxnQkFDQSxpQkFDQSxpQkFDQSxtQkFDQSxrQkFDQSx3QkFDS3FKLEdBQVNaLEVBQVdULFVBQ3hCLENBQ0VTLEVBQVcvRCxPQUNYK0QsRUFBV2EsS0FBSzlELGNBQ2hCaUQsRUFBV2MsVUFFYixDQUNFZCxFQUFXVCxVQUNYUyxFQUFXYyxTQUNYZCxFQUFXZSxPQUFTZixFQUFXZSxPQUFPeEosVUFBTzhDLE9BRWhELFlBQ0EsY0FDQSxlQUNJLENBQ0wyRixFQUFXekksS0FDWHlJLEVBQVd0RCxNQUFNNkQsUUFDZixJQUFJQyxpQkFBVUMsVUFBYVQsRUFBV3pJLG1CQUN0QyxTQUdELG9CQUNBLGNBQ0lxSixFQUNILENBQ0VaLEVBQVd6SSxNQUNUeUksRUFBV3RELE9BQ1ZzRCxFQUFXckQsU0FBV3FELEVBQVdyRCxRQUFRMkQsTUFBTSxLQUFLLEdBQ3ZEUCxHQUFZQyxJQUVkLENBQ0VBLEVBQVd6SSxLQUNYeUksRUFBV0csR0FDWEQsR0FBWUYsR0FDWkQsR0FBWUMsa0JBS1gsQ0FDTEEsRUFBV3pJLE1BQ1R5SSxFQUFXdEQsT0FDVnNELEVBQVdyRCxTQUFXcUQsRUFBV3JELFFBQVEyRCxNQUFNLEtBQUssR0FDdkRQLEdBQVlDLFFBSXBCLFNBQUNnQixFQUFNSixPQUNDMUssRUFBSStLLFVBQVVELFVBQ3BCOUssRUFBRTBLLE1BQVFBLEVBQ0gxSyxLQWNJLFNBQVNnTCxHQUFZQyxVQUMzQnpCLFVBQVN5QixHQUFVLFNBQUNDLEVBQU9DLE9BQzFCQyxFQUNKQyxVQUFRYixHQUFhVSxFQUFNL0YsWUFBYXFGLEdBQWFXLEVBQU1oRyxjQUMzRCtGLEVBQU0vRixXQUFXVSxRQUFVc0YsRUFBTWhHLFdBQVdVLGNBRTVDdUYsR0FDZ0IsZ0JBQWZGLEVBQU03RixNQUF5QyxnQkFBZjhGLEVBQU05RixPQUlsQytGLEtDeElJLFNBQVNFLEdBQXNCQyxFQUFNQyxFQUFPQyxNQUNwQyxpQkFBVkQsR0FBc0JBLEVBQU10TCxPQUFTLEVBQUcsS0FDM0N3TCxFQUFRRixFQUFNM0UsY0FBYzhFLE9BQzVCQyxFQUFZRixFQUFNekYsU0FBUyxNQUFReUYsRUFBTXpGLFNBQVMsWUFDakRzRixFQUFLbkQsUUFBTyxTQUFBMEMsT0FDYmUsRUFBUSxHQUNaSixFQUFPSyxTQUFRLFNBQUFDLE9BQ1QxSSxFQUFRMkksVUFBSWxCLEVBQU1pQixHQUduQkgsR0FDVSxxQkFBVkcsR0FBMEMsWUFBVkEsSUFDakMxSSxLQUdBQSxFQUFRQSxFQUFNK0csTUFBTSxNQUNWbEssT0FBUyxFQUNqQm1ELEVBQU00SSxPQUFPNUksRUFBTW5ELE9BQVMsRUFBRyxHQUN0Qm1ELEVBQU1uRCxPQUFTLEdBQ3hCbUQsRUFBTTRJLE9BQU81SSxFQUFNbkQsT0FBUyxFQUFHLEdBRWpDbUQsRUFBUUEsRUFBTTZJLEtBQUssTUFFakI3SSxJQUVBd0ksRUFERUQsRUFDTUMsRUFBTU0sT0FBTzlJLEVBQU13RCxlQUVuQmdGLEVBQU1NLE9BQ1o5SSxFQUFNd0QsY0FBY3dELFFBQVEsS0FBTSxLQUFLRCxNQUFNLGNBS2hELElBQUlwSyxFQUFJLEVBQUdBLEVBQUk2TCxFQUFNM0wsT0FBUUYsT0FDQSxJQUE1QjZMLEVBQU03TCxHQUFHc0ksUUFBUW9ELFVBRVosU0FHSixZQUlKSCxFQ3RETSxTQUFTYSxHQUFVN00sRUFBSzhNLFVBQ2hDOU0sRUFHRU0sT0FBT3lNLEtBQUsvTSxHQUNoQjRJLEtBQUksU0FBQXJGLE9BQ0d5SixFQUFJRixHQUFVdkosRUFDZDBKLEVBQUlqTixFQUFJdUQsU0FFTSxXQUFieEQsRUFBT2tOLEdBQ1ZKLEdBQVVJLEVBQUdELGFBQ1ZFLG1CQUFtQkYsZUFBTUUsbUJBQW1CRCxPQUVwRE4sS0FBSyxLQVhDLEdDRFgsSUFBTVEsR0FBUUMsUUFBUSxpQkFFUCxTQUFTQyxHQUFRQyxFQUFLQyxVQUM1QkosR0FDSlYsSUFDQ2UsVUFBVUYsSUFDUEMsSUFDMEIsSUFBdEJELEVBQUlHLE9BQU8sTUFBZSxJQUFNLEtBQU9aLEdBQVVVLEdBQ2xELElBQ04sQ0FDRUcsUUFBUyxJQUNUQyxPQUFRLE1BRVJDLFFBQVMsQ0FDUEMsT0FBUSxzQkFJYkMsTUFBSyxTQUFBQyxVQUNHQSxFQUFJQyxRQ1pGLFNBQVNDLEdBQ3RCQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxPQUVNQyxFQUFPUixFQUFlQSxFQUFhOUIsT0FBUyxRQUVoRHNDLE1BQUFBLEdBRUFBLEVBQUsvTixPQUFTLEdBQ2I2TixJQUFrQkEsRUFBY3hNLEtBQUswTSxVQUUvQkMsUUFBUUMsUUFBUSxRQUVuQkMsRUFBYU4sR0FwQ00saURBcUNyQk8sS0FBU0osS0FBQUEsR0FBU1AsRUFBaUJFLEdBQVlELEtBQUFBLEtBQy9DRSxJQUNGUSxPQUFZQSxHQUFNUixRQUFBQSxLQUVoQkcsS0FFRkssT0FBWUEsR0FBTUMsT0FESE4sRUFBZ0I3TSxxQkFHMUJ5TCxHQUFRd0IsRUFBWUMsR0FBTWhCLE1BQUssU0FBQUMsVUFDN0JBLEVBQUlyQyxZQ3BDZixTQUFTc0QsR0FBc0JDLEVBQU9DLE9BQy9CRCxHQUFTQSxFQUFNdE8sT0FBUyxTQUNwQmdPLFFBQVFDLFFBQVEsUUFFckJPLEVBQU8sR0FZTEMsRUFYZ0JILEVBQU1yRyxLQUFJLFNBQUF5RyxPQUN4QnZKLEVBQXFCLFNBQWR1SixFQUFLdkosS0FBa0IsT0FBUyxVQUN6Q1csZ0JBQWE0SSxFQUFLN0ksT0FBT3FFLE1BQU0sS0FBSyxHQUFHdkQsMEJBQWlCeEIsbUJBQzFEdUosRUFBSzdJLGVBRUg2SSxFQUFLMUUsT0FDUGxFLGNBQVc0SSxFQUFLMUUsT0FFbEJ3RSxhQUFXMUksWUFDQzRJLEdBQU01SSxJQUFBQSxPQUVpQnVDLFFBQU8sU0FBVUosRUFBSzBHLFVBRXpEMUcsRUFBSTBHLEVBQWM3SSxLQUFPNkksRUFDbEIxRyxJQUNOLFdBQ0l5RSxHQUFRNkIsRUFBa0IsQ0FDL0JLLElBQUtKLEVBQUt0TixNQUFNLEdBQUksS0FFbkJpTSxNQUFLLFNBQUFDLFVBQ0NBLEVBQUlyQyxTQUFTOUMsS0FBSSxTQUFBeUcsU05ISC9JLEVBQU9SLFFNSVIsQ0FDaEJBLEtBQU0sZ0JBQ05GLFdBQVksQ0FDVjRKLFNBQVVILEVBQUt6SixXQUFXNEosU0FDMUIvSSxJQUFLMkksRUFBZUMsRUFBS3pKLFdBQVdhLEtBQUtBLElBQ3pDa0UsS0FBTXlFLEVBQWVDLEVBQUt6SixXQUFXYSxLQUFLa0UsS0FDMUNuRSxPQUFRNEksRUFBZUMsRUFBS3pKLFdBQVdhLEtBQUtELE9BQzVDaUosWUFBYUwsRUFBZUMsRUFBS3pKLFdBQVdhLEtBQUtnSixZQUNqREMsWUFBYU4sRUFBZUMsRUFBS3pKLFdBQVdhLEtBQUtpSixZQUNqRHhJLFFBQVNtSSxFQUFLekosV0FBV3FCLE1BQ3pCWCxTQUFjK0ksRUFBS3pKLFdOZEpVLElBQUFBLE1BQU9SLElBQUFBLEtBQ3BCLFNBQVZRLEdBQ1Usa0JBQVZBLEdBQ1MsU0FBVFIsR0FDUyxrQkFBVEEsRU1VeUMsZ0JBQWtCLHFCQUVyRGMsU0FBVXlJLEVBQUt6SSxnQkErSHZCLFNBQVMrSSxHQUFlQyxFQUFhekQsRUFBTzBELE9BQ3RDQyxFQUFzQi9ELEdBQXNCNkQsRUFBYXpELEVBQU8sQ0FDbEUsa0JBQ0EsbUJBQ0EscUJBQ0EsdUJBQ0EsK0JBRUUwRCxJQUVGQyxFQUFzQkEsRUFBb0JqSCxRQUN4QyxTQUFBMEMsVUFBU3NFLEVBQVduSixTQUFTNkUsRUFBSzNGLFdBQVdVLFdBRzFDcUksUUFBUUMsUUFDYm1CLFVBQUtELEVBQXFCLElBQUlsSCxLQUFJLFNBQUEyQyxPQUMxQnlFLE9BQ0R6RSxHQUNIekYsS0FBTSxZQUNObUssa0JBQWtCLEVBQ2xCQyxjQUFjLGtCQUVURixFQUFRcEssV0FBV21FLFdBQ25CaUcsTUFjYixJQUFNRyxHQUFjLENBQ2xCLGFBQ0EsWUFDQSxhQUNBLGNBQ0EsZUFDQSxrQkFFSUMsR0FBaUIsQ0FBQyxpQkFBa0IsUUFBUyxVQUFXLFVBQ3hEQyxHQUFnQixDQUFDLFVBQVcsWUFrV2xDLElBQU1DLEdBQWtCQyxXQTdWakIsU0FDTEMsRUFDQWxDLEVBQ0FtQyxFQUNBQyxFQUNBQyxFQUNBQyxJQUVBQyxFQUNBQyxFQUNBQyxPQUhFNUUsSUFBQUEsTUFNQTZFLEVBdUJFTixFQXZCRk0sYUFDdUJDLEVBc0JyQlAsRUF0QkZRLHNCQUNnQkMsRUFxQmRULEVBckJGZixlQUNtQlYsRUFvQmpCeUIsRUFwQkZVLGtCQUNBQyxFQW1CRVgsRUFuQkZXLG1CQUNBQyxFQWtCRVosRUFsQkZZLFlBQ0FDLEVBaUJFYixFQWpCRmEsd0JBQ0FDLEVBZ0JFZCxFQWhCRmMsb0NBQ0FDLEVBZUVmLEVBZkZlLCtCQUNBQyxFQWNFaEIsRUFkRmdCLHdCQUNBQyxFQWFFakIsRUFiRmlCLG1CQUNBQyxFQVlFbEIsRUFaRmtCLGVBQ0FDLEVBV0VuQixFQVhGbUIsUUFDdUJDLEVBVXJCcEIsRUFWRnFCLHNCQUNBdkQsRUFTRWtDLEVBVEZsQyxjQUNBbEYsRUFRRW9ILEVBUkZwSCxXQUNBMEksRUFPRXRCLEVBUEZzQixXQUNBOUMsRUFNRXdCLEVBTkZ4QixpQkFDQStDLEVBS0V2QixFQUxGdUIsUUFDQUMsRUFJRXhCLEVBSkZ3QixzQkFDQUMsRUFHRXpCLEVBSEZ5QixpQkFDQUMsRUFFRTFCLEVBRkYwQixnQkFDQUMsRUFDRTNCLEVBREYyQixpQkFHSUMsR0FBYzlCLEdBQThCLElBQW5CQSxFQUFRN1AsT0FFakM0UixHQUFjakUsR0FBOEIsSUFBbkJBLEVBQVEzTixPQUNqQzZSLEVBQVd4QixFQUFhYSxHQUN4QlksRUFBbUIsR0FDbkJDLEVBQVcsQ0FBRTVNLEtBQU0sTUFBTzBELEtBQU0yQyxFQUFPNUMsUUFBUyxJQUNoRG9KLEVBQVdyQixFQUFZTyxHQUN2QnhELEVBQ0p5RCxHQUFBQSxNQUFpQmYsR0FBQUEsRUFBVTZCLEtBQTNCZCxNQUFrQ2YsR0FBQUEsRUFBVThCLElBQ3hDLG1CQUVxQjlCLEVBQVM2QixJQUFJRSxRQUFRLHFCQUNyQi9CLEVBQVM4QixJQUFJQyxRQUFRLElBRTFDLEdBQ0ExSCxFQUFPcUYsRUFBZ0JBLEVBQWM1RixNQUFNLEtBQUssUUFBS2pHLEtBRXpENEwsRUFBUTlKLFNBQVMsb0JBQ0csOEJBQXBCOEwsRUFBU08sUUFFVE4sRUFBaUJ4TixLQWhNckIsU0FBbUNrSCxFQUFPcUcsU0FDbkIsaUJBQVZyRyxHQUF1QyxJQUFqQkEsRUFBTXhMLE9BQzlCZ08sUUFBUUMsUUFBUSxDQUNyQixDQUNFOUksS0FBTSxrQkFDTm9CLFFBQVNzTCxFQUFTdEwsUUFDbEIwTCxJQUFLSixFQUFTSSxJQUNkQyxJQUFLTCxFQUFTSyxJQUNkak4sV0FBWSxDQUNWVyxRQUFTLG1CQUNURCxNQUFPLGtCQUNQWSxRQUFTc0wsRUFBU3RMLFFBQ2xCMEwsSUFBS0osRUFBU0ksSUFDZEMsSUFBS0wsRUFBU0ssS0FFaEJqTSxTQUFVLENBQ1JkLEtBQU0sUUFDTmUsWUFBYSxDQUFDMkwsRUFBU0ssSUFBS0wsRUFBU0ksU0FNdENqRSxRQUFRQyxRQUFRLElBeUtDb0UsQ0FBMEI3RyxFQUFPcUcsS0FFckRGLEdBQWM5QixFQUFROUosU0FBUyxpQkFDakMrTCxFQUFpQnhOLEtBNU5yQixTQUE4QmtILFNBQ1AsaUJBQVZBLEdBQXVDLElBQWpCQSxFQUFNeEwsT0FDOUJnTyxRQUFRQyxRQUFRLENBQ3JCLENBQ0U5SSxLQUFNLGdCQUNOb0IsUUFBUyxnQkFDVDBMLElBQUssS0FDTEMsSUFBSyxLQUNMak4sV0FBWSxDQUNWVyxRQUFTLGtCQUNURCxNQUFPLGdCQUNQWSxRQUFTLGdCQUNUMEwsSUFBSyxLQUNMQyxJQUFLLE1BRVBqTSxTQUFVLENBQ1JkLEtBQU0sUUFDTmUsWUFBYSxPQUtkOEgsUUFBUUMsUUFBUSxJQXNNQ3FFLENBQXFCOUcsSUFFekNxRSxFQUFROUosU0FBUyxnQkFBaUIsS0FDOUJ3TSxFQUFRZCxFQUFnQlAsR0FDOUJZLEVBQWlCeE4sS0FBSzhLLFVBQUttRCxFQUFPLE9BR2xDMUMsRUFBUTlKLFNBQVMsMkJBM0ZyQixTQUF1Qm1MLEVBQVNaLEVBQVdoQyxPQUNuQ2tFLEVBQXFCbEMsRUFBVVksTUFDakNzQixHQUFzQkEsRUFBbUJ4UyxPQUFTLFNBQzdDLE1BRUh5UyxFQUFpQm5FLEVBQU00QyxVQUN0QnVCLEdBQWtCQSxFQUFlelMsT0FBUyxFQXNGL0MwUyxDQUFjeEIsRUFBU1osRUFBV2hDLElBRWxDd0QsRUFBaUJ4TixLQW5MckIsU0FBZ0NrSCxTQUNULGlCQUFWQSxHQUF1QyxJQUFqQkEsRUFBTXhMLE9BQzlCZ08sUUFBUUMsUUFBUSxDQUNyQixDQUNFOUksS0FBTSx5QkFDTm9CLFFBQVMseUJBQ1QwTCxJQUFLLEtBQ0xDLElBQUssS0FDTGpOLFdBQVksQ0FDVlcsUUFBUyw0QkFDVEQsTUFBTyxlQUNQWSxRQUFTLHlCQUNUMEwsSUFBSyxLQUNMQyxJQUFLLE1BRVBqTSxTQUFVLENBQ1JkLEtBQU0sUUFDTmUsWUFBYSxPQUtkOEgsUUFBUUMsUUFBUSxJQTZKQzBFLENBQXVCbkgsSUFFM0NtRyxHQUFjOUIsRUFBUTlKLFNBQVMsYUFBYyxLQUV6Q3lILEVBQWUrRCxLQUNqQjVELEVBQVE1SCxTQUFTLGFBQWMsS0FDM0J5TSxFQUFxQmxDLEVBQVVZLEdBQ3JDWSxFQUFpQnhOLEtBMVB2QixTQUErQnNPLEVBQVlwSCxVQUNsQ3dDLFFBQVFDLFFBQ2I3QyxHQUFzQndILEVBQVlwSCxFQUFPLENBQUMsVUFBVyxTQUFTdkQsS0FBSSxTQUFBMkMsU0FBUyxDQUN6RXpGLEtBQU0saUJBQ05GLGdCQUNLMkYsR0FDSHRFLE1BQU9zRSxFQUFLekosS0FDWndFLE1BQU8sbUJBRVRNLFNBQVUsQ0FBRWQsS0FBTSxRQUFTZSxZQUFhLENBQUMwRSxFQUFLc0gsSUFBS3RILEVBQUtxSCxXQWlQbEMxQixDQUFzQmlDLEVBQW9CaEgsSUFDNURtQyxFQUFRNUgsU0FBUyxTQUNuQitMLEVBQWlCeE4sS0FsS2hCMEosUUFBUUMsUUFBUSxDQUNyQixDQUNFOUksS0FBTSxPQUNOb0IsUUFBUyxPQUNUMEwsSUFBSyxLQUNMQyxJQUFLLEtBQ0xqTixXQUFZLENBQ1ZXLFFBQVMsT0FDVEQsTUFBTyxPQUNQWSxRQUFTLE9BQ1QwTCxJQUFLLEtBQ0xDLElBQUssTUFFUGpNLFNBQVUsQ0FDUmQsS0FBTSxRQUNOZSxZQUFhLFdBdUpiMEwsR0FBY2pFLEVBQVE1SCxTQUFTLGNBQWUsS0FFMUM4TSxFQUFTdkIsRUFBUXJKLEtBQUksU0FBQXFFLHVCQUFZQSxNQUNqQ3dHLEVBQWF0QixFQUFpQnZGLE9BQU80RyxHQUFRN0csS0FBSyxLQUN4RDhGLEVBQWlCeE4sS0FDZmdKLEdBQ0U5QixFQUNBZ0MsRUFDQXdFLEVBQ0F0RSxFQUNBb0YsRUFDQXpCLEVBQ0F4RCxFQVhvQixDQUFDLFVBQVcsUUFBUyxVQUFXLGVBaUJ0RCtELEdBQWNqRSxFQUFRNUgsU0FBUyxXQUFZLEtBQ3ZDZ04sRUFBa0J2QyxFQUFhVSxFQUFTLFlBQ3hDaEMsRUFBYSxDQUNqQixrQkFDQSxnQkFDQSxjQUNBLGVBQ0Esb0JBQ0EsV0FDQSxVQUNBLE9BQ0EsUUFFRkEsRUFBVzVLLFdBQVg0SyxFQUFtQk0sSUFDbkJzQyxFQUFpQnhOLEtBQUswSyxHQUFlK0QsRUFBaUJ2SCxFQUFPMEQsUUFHN0R5QyxHQUFjOUIsRUFBUTlKLFNBQVMsZ0JBQWlCLElBQzlDNkwsR0FBY2pFLEVBQVE1SCxTQUFTLGNBQWUsS0FDMUN5SCxFQUNKeUMsR0FBbUMsS0FBbEJBLEVBQXVCLENBQUUrQyxLQUFNL0MsR0FBa0IsR0FFOURnRCxHQUFVdkMsRUFBcUJBLEVBQW1CMUUsS0FBSyxLQUFPLEtBQ3BFOEYsRUFBaUJ4TixLQUNmZ0osR0FDRTlCLEVBQ0FnQyxFQUNBd0UsRUFDQXRFLEVBQ0F1RixHQUNBNUIsRUFDQXhELEVBVm9CLENBQUMsVUFBVyxhQVloQ1YsTUFBSyxTQUFBdkUsVUFDRG9ILEVBQ0tBLEVBQWNwSCxFQUFTNkIsR0FFekI3QixTQUlUZ0osR0FBY2pFLEVBQVE1SCxTQUFTLFdBQVksS0FDdkNtTixHQUFVMUMsRUFBYVUsR0FDdkJoQyxHQUFhLENBQ2pCLGtCQUNBLGdCQUNBLGNBQ0EsZUFDQSxpQkFDQSxjQUNBLG9CQUNBLFFBRUZBLEdBQVc1SyxXQUFYNEssR0FBbUJNLElBQ25CTixHQUFXNUssV0FBWDRLLEdBQW1CTyxJQUNuQnFDLEVBQWlCeE4sS0FBSzBLLEdBQWVrRSxHQUFTMUgsRUFBTzBELFNBSXJEeUMsR0FBYzlCLEVBQVE5SixTQUFTLFNBQVUsSUFDdkM0SCxFQUFRNUgsU0FBUyxhQUFjLEtBRTdCb04sR0FERVYsR0FBaUJuRSxFQUFNNEMsR0FHM0JpQyxHQURFVixHQUFlVyxPQUFNLFNBQUExRSxTQUFzQixZQUFkQSxFQUFLdkosUUFDakJrSixHQUNqQm9FLEdBQ0FsRSxHQUNBcEIsTUFBSyxTQUFBdkUsVUFDRG9ILEVBQ0tBLEVBQWNwSCxFQUFTNkIsR0FFekI3QixLQUdVZ0ksRUFBd0I2QixJQUN4Q3RGLE1BQUssU0FBQXlGLFVBQ0p2RSxHQUFzQnVFLEVBQVlyRSxNQUVuQ3BCLE1BQUssU0FBQXZFLFVBQ0FvSCxFQUNLQSxFQUFjcEgsRUFBUzZCLEdBRXpCN0IsS0FHYmtKLEVBQWlCeE4sS0F4UHZCLFNBQTJCNk8sRUFBa0IzSCxVQUNwQzJILEVBQWlCaEcsTUFBSyxTQUFBbUIsVUFDcEJsRCxHQUFzQmtELEVBQU85QyxFQUFPLENBQ3pDLGtCQUNBLGtCQUNBLDBCQW1Qc0JpRixDQUFrQjBDLEdBQWtCM0gsT0FFeERvRyxHQUFjakUsRUFBUTVILFNBQVMsY0FBZSxLQUUxQ3lILEdBQ0p5QyxHQUFtQyxLQUFsQkEsRUFBdUIsQ0FBRStDLEtBQU0vQyxHQUFrQixJQUdoRTBCLEdBQWM5QixFQUFROUosU0FBUyxnQkFDakN5SCxHQUFhNkYsWUFBYyxPQUV2QlIsR0FBU3ZCLEVBQVFySixLQUFJLFNBQUFxRSx1QkFBWUEsTUFBS04sS0FBSyxLQUNqRDhGLEVBQWlCeE4sS0FDZmdKLEdBQ0U5QixFQUNBZ0MsR0FDQXdFLEVBQ0F0RSxFQUNBbUYsR0FDQXhCLEVBQ0F4RCxFQWpCb0IsQ0FBQyxPQUFRLFlBbUI3QlYsTUFBSyxTQUFBdkUsVUFDRG9ILEVBQ0tBLEVBQWNwSCxFQUFTNkIsR0FFekI3QixTQUlUZ0osR0FBY2pFLEVBQVE1SCxTQUFTLFdBQVksS0FDdkN1TixHQUFjOUMsRUFBYVUsR0FBU2hKLFFBQU8sU0FBQTBDLFVBQzNDQSxFQUFLM0YsV0FBV2EsS0FDWDhFLEVBQUszRixXQUFXYSxJQUFJQyxTQUFTLFlBSWxDbUosR0FBYSxDQUNqQixrQkFDQSxnQkFDQSxjQUNBLGVBQ0EsaUJBQ0Esb0JBQ0EsUUFFRkEsR0FBVzVLLFdBQVg0SyxHQUFtQk0sSUFDbkJOLEdBQVc1SyxXQUFYNEssR0FBbUJPLElBQ25CUCxHQUFXNUssV0FBWDRLLEdBQW1CUSxJQUNmSSxHQUNvQixtQkFBbEJBLElBQ0ZaLEdBQVc1SyxLQUFLLHFCQUNoQjRLLEdBQVc1SyxLQUFLLGdCQUVsQndOLEVBQWlCeE4sS0FDZjBLLEdBQWVzRSxHQUFhOUgsRUFBTzBELElBQVkvQixNQUFLLFNBQUFqRSxVQUNsRDhHLEVBQWdCQSxFQUFjOUcsRUFBUXVCLEdBQVF2QixPQUlsRDRJLEVBQWlCeE4sS0FBSzBLLEdBQWVzRSxHQUFhOUgsRUFBTzBELFNBSzNEeUMsR0FBYzlCLEVBQVE5SixTQUFTLFVBQVcsSUFDeEM0SCxFQUFRNUgsU0FBUyxhQUFjLEtBQzNCd04sR0FBa0J2QyxFQUFtQkUsR0FDM0NZLEVBQWlCeE4sS0FDZnlNLEVBQ0V3QyxHQUNBL0gsRUFDQWYsRUFDQTBGLEdBQ0FoRCxNQUFLLFNBQUFqRSxVQUNMOEcsRUFBZ0JBLEVBQWM5RyxFQUFRdUIsRUFBTSxVQUFZdkIsU0FJOUQ0SSxFQUFpQnhOLEtBQ2YyTSxFQUFlekYsRUFBTzhGLEVBQVN4QixFQUFlSyxHQUFVaEQsTUFBSyxTQUFBakUsVUFDM0Q4RyxFQUFnQkEsRUFBYzlHLEVBQVF1QixFQUFNLFVBQVl2QixNQUd4RDBJLEdBQWNqRSxFQUFRNUgsU0FBUyxXQUFZLEtBQ3ZDeU4sR0FBZWhELEVBQWFVLEdBQzVCaEMsR0FBYSxDQUNqQixrQkFDQSxnQkFDQSxjQUNBLGlCQUNBLE9BQ0EsVUFDQSxXQUNBLFVBQ0EsZUFDQSxRQUVFWSxJQUNvQixtQkFBbEJBLElBQ0ZaLEdBQVc1SyxLQUFLLHFCQUNoQjRLLEdBQVc1SyxLQUFLLGdCQUVsQjRLLEdBQVc1SyxXQUFYNEssS0FBbUJNLEdBQVl0SCxRQUFPLFNBQUFwSSxXQUFPQSxJQUFNZ1EsU0FFckRaLEdBQVc1SyxXQUFYNEssR0FBbUJPLElBQ25CcUMsRUFBaUJ4TixLQUNmMEssR0FBZXdFLEdBQWNoSSxFQUFPMEQsSUFBWS9CLE1BQUssU0FBQXZFLFVBQ25Eb0gsRUFBZ0JBLEVBQWNwSCxFQUFTNkIsRUFBTSxVQUFZN0IsVUFLN0QrSSxHQUFjOUIsRUFBUTlKLFNBQVMsc0JBQXVCLElBQ3BENEgsRUFBUTVILFNBQVMsYUFBYyxLQUMzQjBOLEdBQXdCM0MsRUFBK0JJLEdBQzdEWSxFQUFpQnhOLEtBQ2Z1TSxFQUFvQzRDLEdBQXVCakksT0FHM0RvRyxHQUFjakUsRUFBUTVILFNBQVMsY0FBZSxLQUUxQ3lILEdBQWUsQ0FDbkJ3RixLQUFNL0MsR0FFUjZCLEVBQWlCeE4sS0FDZmdKLEdBQ0U5QixFQUNBZ0MsR0FDQXdFLEVBQ0F0RSxFQUNBZ0UsRUFBaUIxRixLQUFLLEtBQ3RCcUYsRUFDQXhELEVBWm9CLENBQUMsZ0JBY3JCVixNQUFLLFNBQUF2RSxVQUNEb0gsRUFDS0EsRUFBY3BILEVBQVM2QixFQUFNLHNCQUUvQjdCLE9BTWNvRixRQUFRMEYsSUFBSTVCLEdBQ3RDM0UsS0FBS3dHLFdBQ0x4RyxLQUFLckMsSUFDTHFDLE1BQUssU0FBQXZFLEdBQ0ptSixFQUFTbkosUUFBVUEsWUFFZCxTQUFBckUsR0FDTHdOLEVBQVM2QixNQUFRclAsS0FFQTRJLE1BQUssV0FDeEIrQyxPQUNLNkIsR0FDSG5KLFFBQVNGLEdBQWtCQyxFQUFZb0osRUFBU25KLFFBQVM0QyxXQUtaLElBQUssQ0FDdERxSSxTQUFTLHNNQzNqQndEQyxxQkFLL0QsSUFBSUMsRUE0SEFDLEVBMUhKLFNBQVNDLElBQ0wsT0FBT0YsRUFBYTFULE1BQU0sS0FBTU4sV0FLcEMsU0FBU21VLEVBQWdCaEUsR0FDckI2RCxFQUFlN0QsRUFHbkIsU0FBUzNPLEVBQVFpSyxHQUNiLE9BQ0lBLGFBQWlCN0ssT0FDeUIsbUJBQTFDaEIsT0FBT0YsVUFBVXdCLFNBQVNiLEtBQUtvTCxHQUl2QyxTQUFTMkksRUFBUzNJLEdBR2QsT0FDYSxNQUFUQSxHQUMwQyxvQkFBMUM3TCxPQUFPRixVQUFVd0IsU0FBU2IsS0FBS29MLEdBSXZDLFNBQVM0SSxFQUFXQyxFQUFHQyxHQUNuQixPQUFPM1UsT0FBT0YsVUFBVVUsZUFBZUMsS0FBS2lVLEVBQUdDLEdBR25ELFNBQVNDLEVBQWNsVixHQUNuQixHQUFJTSxPQUFPNlUsb0JBQ1AsT0FBa0QsSUFBM0M3VSxPQUFPNlUsb0JBQW9CblYsR0FBS1csT0FFdkMsSUFBSXFNLEVBQ0osSUFBS0EsS0FBS2hOLEVBQ04sR0FBSStVLEVBQVcvVSxFQUFLZ04sR0FDaEIsT0FBTyxFQUdmLE9BQU8sRUFJZixTQUFTb0ksRUFBWWpKLEdBQ2pCLFlBQWlCLElBQVZBLEVBR1gsU0FBU2tKLEVBQVNsSixHQUNkLE1BQ3FCLGlCQUFWQSxHQUNtQyxvQkFBMUM3TCxPQUFPRixVQUFVd0IsU0FBU2IsS0FBS29MLEdBSXZDLFNBQVNtSixFQUFPbkosR0FDWixPQUNJQSxhQUFpQm9KLE1BQ3lCLGtCQUExQ2pWLE9BQU9GLFVBQVV3QixTQUFTYixLQUFLb0wsR0FJdkMsU0FBU3ZELEVBQUl6SCxFQUFLcVUsR0FDZCxJQUNJL1UsRUFEQXNOLEVBQU0sR0FFVixJQUFLdE4sRUFBSSxFQUFHQSxFQUFJVSxFQUFJUixTQUFVRixFQUMxQnNOLEVBQUk5SSxLQUFLdVEsRUFBR3JVLEVBQUlWLEdBQUlBLElBRXhCLE9BQU9zTixFQUdYLFNBQVMwSCxFQUFPVCxFQUFHQyxHQUNmLElBQUssSUFBSXhVLEtBQUt3VSxFQUNORixFQUFXRSxFQUFHeFUsS0FDZHVVLEVBQUV2VSxHQUFLd1UsRUFBRXhVLElBWWpCLE9BUklzVSxFQUFXRSxFQUFHLGNBQ2RELEVBQUVwVCxTQUFXcVQsRUFBRXJULFVBR2ZtVCxFQUFXRSxFQUFHLGFBQ2RELEVBQUVVLFFBQVVULEVBQUVTLFNBR1hWLEVBR1gsU0FBU1csRUFBVXhKLEVBQU95SixFQUFRQyxFQUFRQyxHQUN0QyxPQUFPQyxHQUFpQjVKLEVBQU95SixFQUFRQyxFQUFRQyxHQUFRLEdBQU1FLE1BR2pFLFNBQVNDLElBRUwsTUFBTyxDQUNIQyxPQUFPLEVBQ1BDLGFBQWMsR0FDZEMsWUFBYSxHQUNiQyxVQUFXLEVBQ1hDLGNBQWUsRUFDZkMsV0FBVyxFQUNYQyxXQUFZLEtBQ1pDLGFBQWMsS0FDZEMsZUFBZSxFQUNmQyxpQkFBaUIsRUFDakJDLEtBQUssRUFDTEMsZ0JBQWlCLEdBQ2pCQyxJQUFLLEtBQ0xDLFNBQVUsS0FDVkMsU0FBUyxFQUNUQyxpQkFBaUIsR0FJekIsU0FBU0MsRUFBZ0JDLEdBSXJCLE9BSGEsTUFBVEEsRUFBRUMsTUFDRkQsRUFBRUMsSUFBTW5CLEtBRUxrQixFQUFFQyxJQXNCYixTQUFTQyxFQUFRRixHQUNiLEdBQWtCLE1BQWRBLEVBQUVHLFNBQWtCLENBQ3BCLElBQUlDLEVBQVFMLEVBQWdCQyxHQUN4QkssRUFBYzdDLEVBQUs1VCxLQUFLd1csRUFBTVYsaUJBQWlCLFNBQVVwVyxHQUNyRCxPQUFZLE1BQUxBLEtBRVhnWCxHQUNLQyxNQUFNUCxFQUFFelMsR0FBR2lULFlBQ1pKLEVBQU1sQixTQUFXLElBQ2hCa0IsRUFBTXJCLFFBQ05xQixFQUFNZixhQUNOZSxFQUFNZCxlQUNOYyxFQUFNSyxpQkFDTkwsRUFBTU4sa0JBQ05NLEVBQU1oQixZQUNOZ0IsRUFBTWIsZ0JBQ05hLEVBQU1aLG1CQUNMWSxFQUFNUixVQUFhUSxFQUFNUixVQUFZUyxHQVUvQyxHQVJJTCxFQUFFVSxVQUNGSixFQUNJQSxHQUN3QixJQUF4QkYsRUFBTWpCLGVBQ3dCLElBQTlCaUIsRUFBTXBCLGFBQWF4VixhQUNEaUUsSUFBbEIyUyxFQUFNTyxTQUdTLE1BQW5CeFgsT0FBT3lYLFVBQXFCelgsT0FBT3lYLFNBQVNaLEdBRzVDLE9BQU9NLEVBRlBOLEVBQUVHLFNBQVdHLEVBS3JCLE9BQU9OLEVBQUVHLFNBR2IsU0FBU1UsRUFBY1QsR0FDbkIsSUFBSUosRUFBSXhCLEVBQVVzQyxLQU9sQixPQU5hLE1BQVRWLEVBQ0E5QixFQUFPeUIsRUFBZ0JDLEdBQUlJLEdBRTNCTCxFQUFnQkMsR0FBR1IsaUJBQWtCLEVBR2xDUSxFQTdEUHhDLEVBREFyVCxNQUFNbEIsVUFBVXVVLEtBQ1RyVCxNQUFNbEIsVUFBVXVVLEtBRWhCLFNBQVV1RCxHQUNiLElBRUl6WCxFQUZBMFgsRUFBSTdYLE9BQU9XLE1BQ1hHLEVBQU0rVyxFQUFFeFgsU0FBVyxFQUd2QixJQUFLRixFQUFJLEVBQUdBLEVBQUlXLEVBQUtYLElBQ2pCLEdBQUlBLEtBQUswWCxHQUFLRCxFQUFJblgsS0FBS0UsS0FBTWtYLEVBQUUxWCxHQUFJQSxFQUFHMFgsR0FDbEMsT0FBTyxFQUlmLE9BQU8sR0FxRGYsSUFBSUMsRUFBb0J4RCxFQUFNd0QsaUJBQW1CLEdBQzdDQyxHQUFtQixFQUV2QixTQUFTQyxFQUFXQyxFQUFJeFcsR0FDcEIsSUFBSXRCLEVBQUcrWCxFQUFNQyxFQWlDYixHQS9CS3JELEVBQVlyVCxFQUFLMlcsb0JBQ2xCSCxFQUFHRyxpQkFBbUIzVyxFQUFLMlcsa0JBRTFCdEQsRUFBWXJULEVBQUsrQyxNQUNsQnlULEVBQUd6VCxHQUFLL0MsRUFBSytDLElBRVpzUSxFQUFZclQsRUFBSzRXLE1BQ2xCSixFQUFHSSxHQUFLNVcsRUFBSzRXLElBRVp2RCxFQUFZclQsRUFBSzZXLE1BQ2xCTCxFQUFHSyxHQUFLN1csRUFBSzZXLElBRVp4RCxFQUFZclQsRUFBSzhWLFdBQ2xCVSxFQUFHVixRQUFVOVYsRUFBSzhWLFNBRWpCekMsRUFBWXJULEVBQUs4VyxRQUNsQk4sRUFBR00sS0FBTzlXLEVBQUs4VyxNQUVkekQsRUFBWXJULEVBQUsrVyxVQUNsQlAsRUFBR08sT0FBUy9XLEVBQUsrVyxRQUVoQjFELEVBQVlyVCxFQUFLZ1gsV0FDbEJSLEVBQUdRLFFBQVVoWCxFQUFLZ1gsU0FFakIzRCxFQUFZclQsRUFBS3FWLE9BQ2xCbUIsRUFBR25CLElBQU1GLEVBQWdCblYsSUFFeEJxVCxFQUFZclQsRUFBS2lYLFdBQ2xCVCxFQUFHUyxRQUFValgsRUFBS2lYLFNBR2xCWixFQUFpQnpYLE9BQVMsRUFDMUIsSUFBS0YsRUFBSSxFQUFHQSxFQUFJMlgsRUFBaUJ6WCxPQUFRRixJQUdoQzJVLEVBRExxRCxFQUFNMVcsRUFETnlXLEVBQU9KLEVBQWlCM1gsT0FHcEI4WCxFQUFHQyxHQUFRQyxHQUt2QixPQUFPRixFQUlYLFNBQVNVLEVBQU9DLEdBQ1paLEVBQVdyWCxLQUFNaVksR0FDakJqWSxLQUFLeUQsR0FBSyxJQUFJNlEsS0FBa0IsTUFBYjJELEVBQU94VSxHQUFhd1UsRUFBT3hVLEdBQUdpVCxVQUFZTSxLQUN4RGhYLEtBQUtvVyxZQUNOcFcsS0FBS3lELEdBQUssSUFBSTZRLEtBQUswQyxPQUlFLElBQXJCSSxJQUNBQSxHQUFtQixFQUNuQnpELEVBQU11RSxhQUFhbFksTUFDbkJvWCxHQUFtQixHQUkzQixTQUFTZSxFQUFTcFosR0FDZCxPQUNJQSxhQUFlaVosR0FBa0IsTUFBUGpaLEdBQXVDLE1BQXhCQSxFQUFJMFksaUJBSXJELFNBQVNXLEVBQUtDLElBRWdDLElBQXRDMUUsRUFBTTJFLDZCQUNhLG9CQUFaQyxTQUNQQSxRQUFRSCxNQUVSRyxRQUFRSCxLQUFLLHdCQUEwQkMsR0FJL0MsU0FBU0csRUFBVUgsRUFBSzlELEdBQ3BCLElBQUlrRSxHQUFZLEVBRWhCLE9BQU9qRSxHQUFPLFdBSVYsR0FIZ0MsTUFBNUJiLEVBQU0rRSxvQkFDTi9FLEVBQU0rRSxtQkFBbUIsS0FBTUwsR0FFL0JJLEVBQVcsQ0FDWCxJQUNJRSxFQUNBblosRUFDQUksRUFIQWdaLEVBQU8sR0FJWCxJQUFLcFosRUFBSSxFQUFHQSxFQUFJQyxVQUFVQyxPQUFRRixJQUFLLENBRW5DLEdBREFtWixFQUFNLEdBQ3NCLGlCQUFqQmxaLFVBQVVELEdBQWlCLENBRWxDLElBQUtJLEtBREwrWSxHQUFPLE1BQVFuWixFQUFJLEtBQ1BDLFVBQVUsR0FDZHFVLEVBQVdyVSxVQUFVLEdBQUlHLEtBQ3pCK1ksR0FBTy9ZLEVBQU0sS0FBT0gsVUFBVSxHQUFHRyxHQUFPLE1BR2hEK1ksRUFBTUEsRUFBSS9YLE1BQU0sR0FBSSxRQUVwQitYLEVBQU1sWixVQUFVRCxHQUVwQm9aLEVBQUs1VSxLQUFLMlUsR0FFZFAsRUFDSUMsRUFDSSxnQkFDQWhZLE1BQU1sQixVQUFVeUIsTUFBTWQsS0FBSzhZLEdBQU1sTixLQUFLLElBQ3RDLE1BQ0EsSUFBSW1OLE9BQVFDLE9BRXBCTCxHQUFZLEVBRWhCLE9BQU9sRSxFQUFHeFUsTUFBTUMsS0FBTVAsYUFDdkI4VSxHQUdQLElBZ0ZJekksRUFoRkFpTixFQUFlLEdBRW5CLFNBQVNDLEVBQWdCblksRUFBTXdYLEdBQ0ssTUFBNUIxRSxFQUFNK0Usb0JBQ04vRSxFQUFNK0UsbUJBQW1CN1gsRUFBTXdYLEdBRTlCVSxFQUFhbFksS0FDZHVYLEVBQUtDLEdBQ0xVLEVBQWFsWSxJQUFRLEdBTzdCLFNBQVNvWSxFQUFXL04sR0FDaEIsTUFDeUIsb0JBQWJnTyxVQUE0QmhPLGFBQWlCZ08sVUFDWCxzQkFBMUM3WixPQUFPRixVQUFVd0IsU0FBU2IsS0FBS29MLEdBSXZDLFNBQVNpTyxFQUFJbEIsR0FDVCxJQUFJVixFQUFNL1gsRUFDVixJQUFLQSxLQUFLeVksRUFDRm5FLEVBQVdtRSxFQUFRelksS0FFZnlaLEVBREoxQixFQUFPVSxFQUFPelksSUFFVlEsS0FBS1IsR0FBSytYLEVBRVZ2WCxLQUFLLElBQU1SLEdBQUsrWCxHQUk1QnZYLEtBQUtvWixRQUFVbkIsRUFJZmpZLEtBQUtxWiwrQkFBaUMsSUFBSXZQLFFBQ3JDOUosS0FBS3NaLHdCQUF3QjNaLFFBQVVLLEtBQUt1WixjQUFjNVosUUFDdkQsSUFDQSxVQUFVQSxRQUl0QixTQUFTNlosRUFBYUMsRUFBY0MsR0FDaEMsSUFDSW5DLEVBREF6SyxFQUFNMEgsRUFBTyxHQUFJaUYsR0FFckIsSUFBS2xDLEtBQVFtQyxFQUNMNUYsRUFBVzRGLEVBQWFuQyxLQUNwQjFELEVBQVM0RixFQUFhbEMsS0FBVTFELEVBQVM2RixFQUFZbkMsS0FDckR6SyxFQUFJeUssR0FBUSxHQUNaL0MsRUFBTzFILEVBQUl5SyxHQUFPa0MsRUFBYWxDLElBQy9CL0MsRUFBTzFILEVBQUl5SyxHQUFPbUMsRUFBWW5DLEtBQ0YsTUFBckJtQyxFQUFZbkMsR0FDbkJ6SyxFQUFJeUssR0FBUW1DLEVBQVluQyxVQUVqQnpLLEVBQUl5SyxJQUl2QixJQUFLQSxLQUFRa0MsRUFFTDNGLEVBQVcyRixFQUFjbEMsS0FDeEJ6RCxFQUFXNEYsRUFBYW5DLElBQ3pCMUQsRUFBUzRGLEVBQWFsQyxNQUd0QnpLLEVBQUl5SyxHQUFRL0MsRUFBTyxHQUFJMUgsRUFBSXlLLEtBR25DLE9BQU96SyxFQUdYLFNBQVM2TSxFQUFPMUIsR0FDRSxNQUFWQSxHQUNBalksS0FBS21aLElBQUlsQixHQWhFakJ0RSxFQUFNMkUsNkJBQThCLEVBQ3BDM0UsRUFBTStFLG1CQUFxQixLQXNFdkI1TSxFQURBek0sT0FBT3lNLEtBQ0F6TSxPQUFPeU0sS0FFUCxTQUFVL00sR0FDYixJQUFJUyxFQUNBc04sRUFBTSxHQUNWLElBQUt0TixLQUFLVCxFQUNGK1UsRUFBVy9VLEVBQUtTLElBQ2hCc04sRUFBSTlJLEtBQUt4RSxHQUdqQixPQUFPc04sR0FJZixJQUFJOE0sRUFBa0IsQ0FDbEJDLFFBQVMsZ0JBQ1RDLFFBQVMsbUJBQ1RDLFNBQVUsZUFDVkMsUUFBUyxvQkFDVEMsU0FBVSxzQkFDVkMsU0FBVSxLQUdkLFNBQVNDLEVBQVN2YSxFQUFLd2EsRUFBS0MsR0FDeEIsSUFBSUMsRUFBU3RhLEtBQUt1YSxVQUFVM2EsSUFBUUksS0FBS3VhLFVBQW9CLFNBQzdELE9BQU90QixFQUFXcUIsR0FBVUEsRUFBT3hhLEtBQUtzYSxFQUFLQyxHQUFPQyxFQUd4RCxTQUFTRSxFQUFTQyxFQUFRQyxFQUFjQyxHQUNwQyxJQUFJQyxFQUFZLEdBQUs5VSxLQUFLQyxJQUFJMFUsR0FDMUJJLEVBQWNILEVBQWVFLEVBQVVsYixPQUUzQyxPQURXK2EsR0FBVSxFQUVSRSxFQUFZLElBQU0sR0FBTSxLQUNqQzdVLEtBQUtnVixJQUFJLEdBQUloVixLQUFLaVYsSUFBSSxFQUFHRixJQUFjbGEsV0FBV3FhLE9BQU8sR0FDekRKLEVBSVIsSUFBSUssRUFBbUIseU1BQ25CQyxFQUF3Qiw2Q0FDeEJDLEVBQWtCLEdBQ2xCQyxFQUF1QixHQU0zQixTQUFTQyxFQUFlQyxFQUFPQyxFQUFRQyxFQUFTNUwsR0FDNUMsSUFBSTZMLEVBQU83TCxFQUNhLGlCQUFiQSxJQUNQNkwsRUFBTyxXQUNILE9BQU96YixLQUFLNFAsT0FHaEIwTCxJQUNBRixFQUFxQkUsR0FBU0csR0FFOUJGLElBQ0FILEVBQXFCRyxFQUFPLElBQU0sV0FDOUIsT0FBT2YsRUFBU2lCLEVBQUsxYixNQUFNQyxLQUFNUCxXQUFZOGIsRUFBTyxHQUFJQSxFQUFPLE1BR25FQyxJQUNBSixFQUFxQkksR0FBVyxXQUM1QixPQUFPeGIsS0FBSzBiLGFBQWFGLFFBQ3JCQyxFQUFLMWIsTUFBTUMsS0FBTVAsV0FDakI2YixLQU1oQixTQUFTSyxFQUF1QnpRLEdBQzVCLE9BQUlBLEVBQU0xRCxNQUFNLFlBQ0wwRCxFQUFNckIsUUFBUSxXQUFZLElBRTlCcUIsRUFBTXJCLFFBQVEsTUFBTyxJQUdoQyxTQUFTK1IsRUFBbUJqSCxHQUN4QixJQUNJblYsRUFDQUUsRUFGQW1jLEVBQVFsSCxFQUFPbk4sTUFBTXlULEdBSXpCLElBQUt6YixFQUFJLEVBQUdFLEVBQVNtYyxFQUFNbmMsT0FBUUYsRUFBSUUsRUFBUUYsSUFDdkM0YixFQUFxQlMsRUFBTXJjLElBQzNCcWMsRUFBTXJjLEdBQUs0YixFQUFxQlMsRUFBTXJjLElBRXRDcWMsRUFBTXJjLEdBQUttYyxFQUF1QkUsRUFBTXJjLElBSWhELE9BQU8sU0FBVTRhLEdBQ2IsSUFDSTVhLEVBREE4YSxFQUFTLEdBRWIsSUFBSzlhLEVBQUksRUFBR0EsRUFBSUUsRUFBUUYsSUFDcEI4YSxHQUFVckIsRUFBVzRDLEVBQU1yYyxJQUNyQnFjLEVBQU1yYyxHQUFHTSxLQUFLc2EsRUFBS3pGLEdBQ25Ca0gsRUFBTXJjLEdBRWhCLE9BQU84YSxHQUtmLFNBQVN3QixFQUFhNUYsRUFBR3ZCLEdBQ3JCLE9BQUt1QixFQUFFRSxXQUlQekIsRUFBU29ILEVBQWFwSCxFQUFRdUIsRUFBRXdGLGNBQ2hDUCxFQUFnQnhHLEdBQ1p3RyxFQUFnQnhHLElBQVdpSCxFQUFtQmpILEdBRTNDd0csRUFBZ0J4RyxHQUFRdUIsSUFQcEJBLEVBQUV3RixhQUFhTSxjQVU5QixTQUFTRCxFQUFhcEgsRUFBUUMsR0FDMUIsSUFBSXBWLEVBQUksRUFFUixTQUFTeWMsRUFBNEIvUSxHQUNqQyxPQUFPMEosRUFBT3NILGVBQWVoUixJQUFVQSxFQUkzQyxJQURBZ1EsRUFBc0JpQixVQUFZLEVBQzNCM2MsR0FBSyxHQUFLMGIsRUFBc0JuYSxLQUFLNFQsSUFDeENBLEVBQVNBLEVBQU85SyxRQUNacVIsRUFDQWUsR0FFSmYsRUFBc0JpQixVQUFZLEVBQ2xDM2MsR0FBSyxFQUdULE9BQU9tVixFQUdYLElBQUl5SCxFQUF3QixDQUN4QkMsSUFBSyxZQUNMQyxHQUFJLFNBQ0pDLEVBQUcsYUFDSEMsR0FBSSxlQUNKQyxJQUFLLHNCQUNMQyxLQUFNLDZCQUdWLFNBQVNSLEVBQWV0YyxHQUNwQixJQUFJK1UsRUFBUzNVLEtBQUsyYyxnQkFBZ0IvYyxHQUM5QmdkLEVBQWM1YyxLQUFLMmMsZ0JBQWdCL2MsRUFBSWlkLGVBRTNDLE9BQUlsSSxJQUFXaUksRUFDSmpJLEdBR1gzVSxLQUFLMmMsZ0JBQWdCL2MsR0FBT2dkLEVBQ3ZCcFYsTUFBTXlULEdBQ050VCxLQUFJLFNBQVVtVixHQUNYLE1BQ1ksU0FBUkEsR0FDUSxPQUFSQSxHQUNRLE9BQVJBLEdBQ1EsU0FBUkEsRUFFT0EsRUFBSWxjLE1BQU0sR0FFZGtjLEtBRVZwUixLQUFLLElBRUgxTCxLQUFLMmMsZ0JBQWdCL2MsSUFHaEMsSUFBSW1kLEVBQXFCLGVBRXpCLFNBQVNmLElBQ0wsT0FBT2hjLEtBQUtnZCxhQUdoQixJQUFJQyxFQUFpQixLQUNqQkMsRUFBZ0MsVUFFcEMsU0FBUzFCLEVBQVFmLEdBQ2IsT0FBT3phLEtBQUttZCxTQUFTdFQsUUFBUSxLQUFNNFEsR0FHdkMsSUFBSTJDLEVBQXNCLENBQ3RCQyxPQUFRLFFBQ1JDLEtBQU0sU0FDTkMsRUFBRyxnQkFDSEMsR0FBSSxhQUNKdEgsRUFBRyxXQUNIdUgsR0FBSSxhQUNKQyxFQUFHLFVBQ0hDLEdBQUksV0FDSkMsRUFBRyxRQUNIQyxHQUFJLFVBQ0pDLEVBQUcsU0FDSEMsR0FBSSxXQUNKQyxFQUFHLFVBQ0hDLEdBQUksWUFDSkMsRUFBRyxTQUNIQyxHQUFJLFlBR1IsU0FBU0MsRUFBYTNELEVBQVE0RCxFQUFlQyxFQUFRQyxHQUNqRCxJQUFJakUsRUFBU3RhLEtBQUt3ZSxjQUFjRixHQUNoQyxPQUFPckYsRUFBV3FCLEdBQ1pBLEVBQU9HLEVBQVE0RCxFQUFlQyxFQUFRQyxHQUN0Q2pFLEVBQU96USxRQUFRLE1BQU80USxHQUdoQyxTQUFTZ0UsR0FBV0MsRUFBTXBFLEdBQ3RCLElBQUkzRixFQUFTM1UsS0FBS3dlLGNBQWNFLEVBQU8sRUFBSSxTQUFXLFFBQ3RELE9BQU96RixFQUFXdEUsR0FBVUEsRUFBTzJGLEdBQVUzRixFQUFPOUssUUFBUSxNQUFPeVEsR0FHdkUsSUFBSXFFLEdBQVUsR0FFZCxTQUFTQyxHQUFhQyxFQUFNQyxHQUN4QixJQUFJQyxFQUFZRixFQUFLeFksY0FDckJzWSxHQUFRSSxHQUFhSixHQUFRSSxFQUFZLEtBQU9KLEdBQVFHLEdBQWFELEVBR3pFLFNBQVNHLEdBQWVDLEdBQ3BCLE1BQXdCLGlCQUFWQSxFQUNSTixHQUFRTSxJQUFVTixHQUFRTSxFQUFNNVksb0JBQ2hDMUMsRUFHVixTQUFTdWIsR0FBcUJDLEdBQzFCLElBQ0lDLEVBQ0E3SCxFQUZBOEgsRUFBa0IsR0FJdEIsSUFBSzlILEtBQVE0SCxFQUNMckwsRUFBV3FMLEVBQWE1SCxLQUN4QjZILEVBQWlCSixHQUFlekgsTUFFNUI4SCxFQUFnQkQsR0FBa0JELEVBQVk1SCxJQUsxRCxPQUFPOEgsRUFHWCxJQUFJQyxHQUFhLEdBRWpCLFNBQVNDLEdBQWdCVixFQUFNVyxHQUMzQkYsR0FBV1QsR0FBUVcsRUFHdkIsU0FBU0MsR0FBb0JDLEdBQ3pCLElBQ0lDLEVBREFWLEVBQVEsR0FFWixJQUFLVSxLQUFLRCxFQUNGNUwsRUFBVzRMLEVBQVVDLElBQ3JCVixFQUFNamIsS0FBSyxDQUFFNmEsS0FBTWMsRUFBR0gsU0FBVUYsR0FBV0ssS0FNbkQsT0FIQVYsRUFBTVcsTUFBSyxTQUFVN0wsRUFBR0MsR0FDcEIsT0FBT0QsRUFBRXlMLFNBQVd4TCxFQUFFd0wsWUFFbkJQLEVBR1gsU0FBU1ksR0FBV0MsR0FDaEIsT0FBUUEsRUFBTyxHQUFNLEdBQUtBLEVBQU8sS0FBUSxHQUFNQSxFQUFPLEtBQVEsRUFHbEUsU0FBU0MsR0FBU3RGLEdBQ2QsT0FBSUEsRUFBUyxFQUVGM1UsS0FBS2thLEtBQUt2RixJQUFXLEVBRXJCM1UsS0FBS21hLE1BQU14RixHQUkxQixTQUFTeUYsR0FBTUMsR0FDWCxJQUFJQyxHQUFpQkQsRUFDakJ0ZCxFQUFRLEVBTVosT0FKc0IsSUFBbEJ1ZCxHQUF1QkMsU0FBU0QsS0FDaEN2ZCxFQUFRa2QsR0FBU0ssSUFHZHZkLEVBR1gsU0FBU3lkLEdBQVd6QixFQUFNMEIsR0FDdEIsT0FBTyxTQUFVMWQsR0FDYixPQUFhLE1BQVRBLEdBQ0EyZCxHQUFNeGdCLEtBQU02ZSxFQUFNaGMsR0FDbEI4USxFQUFNdUUsYUFBYWxZLEtBQU11Z0IsR0FDbEJ2Z0IsTUFFQXdMLEdBQUl4TCxLQUFNNmUsSUFLN0IsU0FBU3JULEdBQUk0TyxFQUFLeUUsR0FDZCxPQUFPekUsRUFBSWhFLFVBQ0xnRSxFQUFJM1csR0FBRyxPQUFTMlcsRUFBSXZDLE9BQVMsTUFBUSxJQUFNZ0gsS0FDM0M3SCxJQUdWLFNBQVN3SixHQUFNcEcsRUFBS3lFLEVBQU1oYyxHQUNsQnVYLEVBQUloRSxZQUFjSyxNQUFNNVQsS0FFWCxhQUFUZ2MsR0FDQWdCLEdBQVd6RixFQUFJMEYsU0FDQyxJQUFoQjFGLEVBQUlxRyxTQUNXLEtBQWZyRyxFQUFJc0csUUFFSjdkLEVBQVFxZCxHQUFNcmQsR0FDZHVYLEVBQUkzVyxHQUFHLE9BQVMyVyxFQUFJdkMsT0FBUyxNQUFRLElBQU1nSCxHQUN2Q2hjLEVBQ0F1WCxFQUFJcUcsUUFDSkUsR0FBWTlkLEVBQU91WCxFQUFJcUcsV0FHM0JyRyxFQUFJM1csR0FBRyxPQUFTMlcsRUFBSXZDLE9BQVMsTUFBUSxJQUFNZ0gsR0FBTWhjLElBTzdELFNBQVMrZCxHQUFVM0IsR0FFZixPQUFJaEcsRUFBV2paLEtBRGZpZixFQUFRRCxHQUFlQyxLQUVaamYsS0FBS2lmLEtBRVRqZixLQUdYLFNBQVM2Z0IsR0FBVTVCLEVBQU9wYyxHQUN0QixHQUFxQixpQkFBVm9jLEVBQW9CLENBRTNCLElBQ0l6ZixFQURBc2hCLEVBQWNyQixHQURsQlIsRUFBUUMsR0FBcUJELElBRzdCLElBQUt6ZixFQUFJLEVBQUdBLEVBQUlzaEIsRUFBWXBoQixPQUFRRixJQUNoQ1EsS0FBSzhnQixFQUFZdGhCLEdBQUdxZixNQUFNSSxFQUFNNkIsRUFBWXRoQixHQUFHcWYsWUFJbkQsR0FBSTVGLEVBQVdqWixLQURmaWYsRUFBUUQsR0FBZUMsS0FFbkIsT0FBT2pmLEtBQUtpZixHQUFPcGMsR0FHM0IsT0FBTzdDLEtBR1gsSUFtQkkrZ0IsR0FuQkFDLEdBQVMsS0FDVEMsR0FBUyxPQUNUQyxHQUFTLFFBQ1RDLEdBQVMsUUFDVEMsR0FBUyxhQUNUQyxHQUFZLFFBQ1pDLEdBQVksWUFDWkMsR0FBWSxnQkFDWkMsR0FBWSxVQUNaQyxHQUFZLFVBQ1pDLEdBQVksZUFDWkMsR0FBZ0IsTUFDaEJDLEdBQWMsV0FDZEMsR0FBYyxxQkFDZEMsR0FBbUIsMEJBQ25CQyxHQUFpQix1QkFHakJDLEdBQVksd0pBS2hCLFNBQVNDLEdBQWMzRyxFQUFPNEcsRUFBT0MsR0FDakNwQixHQUFRekYsR0FBU3JDLEVBQVdpSixHQUN0QkEsRUFDQSxTQUFVRSxFQUFVMUcsR0FDaEIsT0FBTzBHLEdBQVlELEVBQWNBLEVBQWNELEdBSTdELFNBQVNHLEdBQXNCL0csRUFBT3JELEdBQ2xDLE9BQUtuRSxFQUFXaU4sR0FBU3pGLEdBSWxCeUYsR0FBUXpGLEdBQU9yRCxFQUFPckIsUUFBU3FCLEVBQU9GLFNBSGxDLElBQUlqTyxPQUFPd1ksR0FBZWhILElBT3pDLFNBQVNnSCxHQUFlL0UsR0FDcEIsT0FBT2dGLEdBQ0hoRixFQUNLMVQsUUFBUSxLQUFNLElBQ2RBLFFBQVEsdUNBQXVDLFNBQzVDMlksRUFDQTljLEVBQ0FHLEVBQ0E0YyxFQUNBQyxHQUVBLE9BQU9oZCxHQUFNRyxHQUFNNGMsR0FBTUMsTUFLekMsU0FBU0gsR0FBWWhGLEdBQ2pCLE9BQU9BLEVBQUUxVCxRQUFRLHlCQUEwQixRQXBDL0NrWCxHQUFVLEdBdUNWLElBQUk0QixHQUFTLEdBRWIsU0FBU0MsR0FBY3RILEVBQU8xTCxHQUMxQixJQUFJcFEsRUFDQWljLEVBQU83TCxFQVNYLElBUnFCLGlCQUFWMEwsSUFDUEEsRUFBUSxDQUFDQSxJQUVUbEgsRUFBU3hFLEtBQ1Q2TCxFQUFPLFNBQVV2USxFQUFPMlEsR0FDcEJBLEVBQU1qTSxHQUFZc1EsR0FBTWhWLEtBRzNCMUwsRUFBSSxFQUFHQSxFQUFJOGIsRUFBTTViLE9BQVFGLElBQzFCbWpCLEdBQU9ySCxFQUFNOWIsSUFBTWljLEVBSTNCLFNBQVNvSCxHQUFrQnZILEVBQU8xTCxHQUM5QmdULEdBQWN0SCxHQUFPLFNBQVVwUSxFQUFPMlEsRUFBTzVELEVBQVFxRCxHQUNqRHJELEVBQU82SyxHQUFLN0ssRUFBTzZLLElBQU0sR0FDekJsVCxFQUFTMUUsRUFBTytNLEVBQU82SyxHQUFJN0ssRUFBUXFELE1BSTNDLFNBQVN5SCxHQUF3QnpILEVBQU9wUSxFQUFPK00sR0FDOUIsTUFBVC9NLEdBQWlCNEksRUFBVzZPLEdBQVFySCxJQUNwQ3FILEdBQU9ySCxHQUFPcFEsRUFBTytNLEVBQU8rSyxHQUFJL0ssRUFBUXFELEdBSWhELElBY0l4VCxHQWRBbWIsR0FBTyxFQUNQQyxHQUFRLEVBQ1JDLEdBQU8sRUFDUEMsR0FBTyxFQUNQQyxHQUFTLEVBQ1RDLEdBQVMsRUFDVEMsR0FBYyxFQUNkQyxHQUFPLEVBQ1BDLEdBQVUsRUFFZCxTQUFTQyxHQUFJaGpCLEVBQUdpakIsR0FDWixPQUFTampCLEVBQUlpakIsRUFBS0EsR0FBS0EsRUFvQjNCLFNBQVNoRCxHQUFZYixFQUFNVyxHQUN2QixHQUFJaEssTUFBTXFKLElBQVNySixNQUFNZ0ssR0FDckIsT0FBT3pKLElBRVgsSUFBSTRNLEVBQVdGLEdBQUlqRCxFQUFPLElBRTFCLE9BREFYLElBQVNXLEVBQVFtRCxHQUFZLEdBQ1QsSUFBYkEsRUFDRC9ELEdBQVdDLEdBQ1AsR0FDQSxHQUNKLEdBQU84RCxFQUFXLEVBQUssRUF4QjdCOWIsR0FEQXpILE1BQU1sQixVQUFVMkksUUFDTnpILE1BQU1sQixVQUFVMkksUUFFaEIsU0FBVXZILEdBRWhCLElBQUlmLEVBQ0osSUFBS0EsRUFBSSxFQUFHQSxFQUFJUSxLQUFLTixTQUFVRixFQUMzQixHQUFJUSxLQUFLUixLQUFPZSxFQUNaLE9BQU9mLEVBR2YsT0FBUSxHQW1CaEI2YixFQUFlLElBQUssQ0FBQyxLQUFNLEdBQUksTUFBTSxXQUNqQyxPQUFPcmIsS0FBS3lnQixRQUFVLEtBRzFCcEYsRUFBZSxNQUFPLEVBQUcsR0FBRyxTQUFVMUcsR0FDbEMsT0FBTzNVLEtBQUswYixhQUFhbUksWUFBWTdqQixLQUFNMlUsTUFHL0MwRyxFQUFlLE9BQVEsRUFBRyxHQUFHLFNBQVUxRyxHQUNuQyxPQUFPM1UsS0FBSzBiLGFBQWFvSSxPQUFPOWpCLEtBQU0yVSxNQUsxQ2lLLEdBQWEsUUFBUyxLQUl0QlcsR0FBZ0IsUUFBUyxHQUl6QjBDLEdBQWMsSUFBS1osSUFDbkJZLEdBQWMsS0FBTVosR0FBV0osSUFDL0JnQixHQUFjLE9BQU8sU0FBVUcsRUFBVXhOLEdBQ3JDLE9BQU9BLEVBQU9tUCxpQkFBaUIzQixNQUVuQ0gsR0FBYyxRQUFRLFNBQVVHLEVBQVV4TixHQUN0QyxPQUFPQSxFQUFPb1AsWUFBWTVCLE1BRzlCUSxHQUFjLENBQUMsSUFBSyxPQUFPLFNBQVUxWCxFQUFPMlEsR0FDeENBLEVBQU1xSCxJQUFTaEQsR0FBTWhWLEdBQVMsS0FHbEMwWCxHQUFjLENBQUMsTUFBTyxTQUFTLFNBQVUxWCxFQUFPMlEsRUFBTzVELEVBQVFxRCxHQUMzRCxJQUFJbUYsRUFBUXhJLEVBQU9GLFFBQVFrTSxZQUFZL1ksRUFBT29RLEVBQU9yRCxFQUFPckIsU0FFL0MsTUFBVDZKLEVBQ0E1RSxFQUFNcUgsSUFBU3pDLEVBRWZ4SyxFQUFnQmdDLEdBQVF6QyxhQUFldEssS0FNL0MsSUFBSWdaLEdBQXNCLHdGQUF3RnRhLE1BQzFHLEtBRUp1YSxHQUEyQixrREFBa0R2YSxNQUN6RSxLQUVKd2EsR0FBbUIsZ0NBQ25CQyxHQUEwQnJDLEdBQzFCc0MsR0FBcUJ0QyxHQUV6QixTQUFTdUMsR0FBYXJPLEVBQUd2QixHQUNyQixPQUFLdUIsRUFLRWpWLEVBQVFqQixLQUFLd2tCLFNBQ2R4a0IsS0FBS3drQixRQUFRdE8sRUFBRXVLLFNBQ2Z6Z0IsS0FBS3drQixTQUNBeGtCLEtBQUt3a0IsUUFBUUMsVUFBWUwsSUFBa0JyakIsS0FBSzRULEdBQzNDLFNBQ0EsY0FDUnVCLEVBQUV1SyxTQVZDeGYsRUFBUWpCLEtBQUt3a0IsU0FDZHhrQixLQUFLd2tCLFFBQ0x4a0IsS0FBS3drQixRQUFvQixXQVd2QyxTQUFTRSxHQUFrQnhPLEVBQUd2QixHQUMxQixPQUFLdUIsRUFLRWpWLEVBQVFqQixLQUFLMmtCLGNBQ2Qza0IsS0FBSzJrQixhQUFhek8sRUFBRXVLLFNBQ3BCemdCLEtBQUsya0IsYUFDRFAsR0FBaUJyakIsS0FBSzRULEdBQVUsU0FBVyxjQUM3Q3VCLEVBQUV1SyxTQVJDeGYsRUFBUWpCLEtBQUsya0IsY0FDZDNrQixLQUFLMmtCLGFBQ0wza0IsS0FBSzJrQixhQUF5QixXQVM1QyxTQUFTQyxHQUFrQkMsRUFBV2xRLEVBQVFFLEdBQzFDLElBQUlyVixFQUNBc2xCLEVBQ0ExSyxFQUNBMkssRUFBTUYsRUFBVUcsb0JBQ3BCLElBQUtobEIsS0FBS2lsQixhQUtOLElBSEFqbEIsS0FBS2lsQixhQUFlLEdBQ3BCamxCLEtBQUtrbEIsaUJBQW1CLEdBQ3hCbGxCLEtBQUttbEIsa0JBQW9CLEdBQ3BCM2xCLEVBQUksRUFBR0EsRUFBSSxLQUFNQSxFQUNsQjRhLEVBQU0xRixFQUFVLENBQUMsSUFBTWxWLElBQ3ZCUSxLQUFLbWxCLGtCQUFrQjNsQixHQUFLUSxLQUFLNmpCLFlBQzdCekosRUFDQSxJQUNGNEssb0JBQ0ZobEIsS0FBS2tsQixpQkFBaUIxbEIsR0FBS1EsS0FBSzhqQixPQUFPMUosRUFBSyxJQUFJNEssb0JBSXhELE9BQUluUSxFQUNlLFFBQVhGLEdBRWUsS0FEZm1RLEVBQUtoZCxHQUFRaEksS0FBS0UsS0FBS21sQixrQkFBbUJKLElBQ3ZCRCxFQUFLLE1BR1QsS0FEZkEsRUFBS2hkLEdBQVFoSSxLQUFLRSxLQUFLa2xCLGlCQUFrQkgsSUFDdEJELEVBQUssS0FHYixRQUFYblEsR0FFWSxLQURabVEsRUFBS2hkLEdBQVFoSSxLQUFLRSxLQUFLbWxCLGtCQUFtQkosTUFLM0IsS0FEZkQsRUFBS2hkLEdBQVFoSSxLQUFLRSxLQUFLa2xCLGlCQUFrQkgsSUFGOUJELEVBR2EsTUFHWixLQURaQSxFQUFLaGQsR0FBUWhJLEtBQUtFLEtBQUtrbEIsaUJBQWtCSCxNQUsxQixLQURmRCxFQUFLaGQsR0FBUWhJLEtBQUtFLEtBQUttbEIsa0JBQW1CSixJQUYvQkQsRUFHYSxLQUtwQyxTQUFTTSxHQUFrQlAsRUFBV2xRLEVBQVFFLEdBQzFDLElBQUlyVixFQUFHNGEsRUFBSzhILEVBRVosR0FBSWxpQixLQUFLcWxCLGtCQUNMLE9BQU9ULEdBQWtCOWtCLEtBQUtFLEtBQU02a0IsRUFBV2xRLEVBQVFFLEdBWTNELElBVEs3VSxLQUFLaWxCLGVBQ05qbEIsS0FBS2lsQixhQUFlLEdBQ3BCamxCLEtBQUtrbEIsaUJBQW1CLEdBQ3hCbGxCLEtBQUttbEIsa0JBQW9CLElBTXhCM2xCLEVBQUksRUFBR0EsRUFBSSxHQUFJQSxJQUFLLENBbUJyQixHQWpCQTRhLEVBQU0xRixFQUFVLENBQUMsSUFBTWxWLElBQ25CcVYsSUFBVzdVLEtBQUtrbEIsaUJBQWlCMWxCLEtBQ2pDUSxLQUFLa2xCLGlCQUFpQjFsQixHQUFLLElBQUlzSyxPQUMzQixJQUFNOUosS0FBSzhqQixPQUFPMUosRUFBSyxJQUFJdlEsUUFBUSxJQUFLLElBQU0sSUFDOUMsS0FFSjdKLEtBQUttbEIsa0JBQWtCM2xCLEdBQUssSUFBSXNLLE9BQzVCLElBQU05SixLQUFLNmpCLFlBQVl6SixFQUFLLElBQUl2USxRQUFRLElBQUssSUFBTSxJQUNuRCxNQUdIZ0wsR0FBVzdVLEtBQUtpbEIsYUFBYXpsQixLQUM5QjBpQixFQUNJLElBQU1saUIsS0FBSzhqQixPQUFPMUosRUFBSyxJQUFNLEtBQU9wYSxLQUFLNmpCLFlBQVl6SixFQUFLLElBQzlEcGEsS0FBS2lsQixhQUFhemxCLEdBQUssSUFBSXNLLE9BQU9vWSxFQUFNclksUUFBUSxJQUFLLElBQUssTUFJMURnTCxHQUNXLFNBQVhGLEdBQ0EzVSxLQUFLa2xCLGlCQUFpQjFsQixHQUFHdUIsS0FBSzhqQixHQUU5QixPQUFPcmxCLEVBQ0osR0FDSHFWLEdBQ1csUUFBWEYsR0FDQTNVLEtBQUttbEIsa0JBQWtCM2xCLEdBQUd1QixLQUFLOGpCLEdBRS9CLE9BQU9ybEIsRUFDSixJQUFLcVYsR0FBVTdVLEtBQUtpbEIsYUFBYXpsQixHQUFHdUIsS0FBSzhqQixHQUM1QyxPQUFPcmxCLEdBT25CLFNBQVM4bEIsR0FBU2xMLEVBQUt2WCxHQUNuQixJQUFJMGlCLEVBRUosSUFBS25MLEVBQUloRSxVQUVMLE9BQU9nRSxFQUdYLEdBQXFCLGlCQUFWdlgsRUFDUCxHQUFJLFFBQVE5QixLQUFLOEIsR0FDYkEsRUFBUXFkLEdBQU1yZCxRQUlkLElBQUt1UixFQUZMdlIsRUFBUXVYLEVBQUlzQixhQUFhdUksWUFBWXBoQixJQUdqQyxPQUFPdVgsRUFPbkIsT0FGQW1MLEVBQWF6ZixLQUFLMGYsSUFBSXBMLEVBQUlzRyxPQUFRQyxHQUFZdkcsRUFBSTBGLE9BQVFqZCxJQUMxRHVYLEVBQUkzVyxHQUFHLE9BQVMyVyxFQUFJdkMsT0FBUyxNQUFRLElBQU0sU0FBU2hWLEVBQU8waUIsR0FDcERuTCxFQUdYLFNBQVNxTCxHQUFZNWlCLEdBQ2pCLE9BQWEsTUFBVEEsR0FDQXlpQixHQUFTdGxCLEtBQU02QyxHQUNmOFEsRUFBTXVFLGFBQWFsWSxNQUFNLEdBQ2xCQSxNQUVBd0wsR0FBSXhMLEtBQU0sU0FJekIsU0FBUzBsQixLQUNMLE9BQU8vRSxHQUFZM2dCLEtBQUs4ZixPQUFROWYsS0FBS3lnQixTQUd6QyxTQUFTc0QsR0FBaUIzQixHQUN0QixPQUFJcGlCLEtBQUtxbEIsbUJBQ0F2UixFQUFXOVQsS0FBTSxpQkFDbEIybEIsR0FBbUI3bEIsS0FBS0UsTUFFeEJvaUIsRUFDT3BpQixLQUFLNGxCLHdCQUVMNWxCLEtBQUs2bEIsb0JBR1gvUixFQUFXOVQsS0FBTSx1QkFDbEJBLEtBQUs2bEIsa0JBQW9CeEIsSUFFdEJya0IsS0FBSzRsQix5QkFBMkJ4RCxFQUNqQ3BpQixLQUFLNGxCLHdCQUNMNWxCLEtBQUs2bEIsbUJBSW5CLFNBQVM3QixHQUFZNUIsR0FDakIsT0FBSXBpQixLQUFLcWxCLG1CQUNBdlIsRUFBVzlULEtBQU0saUJBQ2xCMmxCLEdBQW1CN2xCLEtBQUtFLE1BRXhCb2lCLEVBQ09waUIsS0FBSzhsQixtQkFFTDlsQixLQUFLK2xCLGVBR1hqUyxFQUFXOVQsS0FBTSxrQkFDbEJBLEtBQUsrbEIsYUFBZXpCLElBRWpCdGtCLEtBQUs4bEIsb0JBQXNCMUQsRUFDNUJwaUIsS0FBSzhsQixtQkFDTDlsQixLQUFLK2xCLGNBSW5CLFNBQVNKLEtBQ0wsU0FBU0ssRUFBVWpTLEVBQUdDLEdBQ2xCLE9BQU9BLEVBQUV0VSxPQUFTcVUsRUFBRXJVLE9BR3hCLElBR0lGLEVBQ0E0YSxFQUpBNkwsRUFBYyxHQUNkQyxFQUFhLEdBQ2JDLEVBQWMsR0FHbEIsSUFBSzNtQixFQUFJLEVBQUdBLEVBQUksR0FBSUEsSUFFaEI0YSxFQUFNMUYsRUFBVSxDQUFDLElBQU1sVixJQUN2QnltQixFQUFZamlCLEtBQUtoRSxLQUFLNmpCLFlBQVl6SixFQUFLLEtBQ3ZDOEwsRUFBV2xpQixLQUFLaEUsS0FBSzhqQixPQUFPMUosRUFBSyxLQUNqQytMLEVBQVluaUIsS0FBS2hFLEtBQUs4akIsT0FBTzFKLEVBQUssS0FDbEMrTCxFQUFZbmlCLEtBQUtoRSxLQUFLNmpCLFlBQVl6SixFQUFLLEtBTzNDLElBSEE2TCxFQUFZckcsS0FBS29HLEdBQ2pCRSxFQUFXdEcsS0FBS29HLEdBQ2hCRyxFQUFZdkcsS0FBS29HLEdBQ1p4bUIsRUFBSSxFQUFHQSxFQUFJLEdBQUlBLElBQ2hCeW1CLEVBQVl6bUIsR0FBSytpQixHQUFZMEQsRUFBWXptQixJQUN6QzBtQixFQUFXMW1CLEdBQUsraUIsR0FBWTJELEVBQVcxbUIsSUFFM0MsSUFBS0EsRUFBSSxFQUFHQSxFQUFJLEdBQUlBLElBQ2hCMm1CLEVBQVkzbUIsR0FBSytpQixHQUFZNEQsRUFBWTNtQixJQUc3Q1EsS0FBSytsQixhQUFlLElBQUlqYyxPQUFPLEtBQU9xYyxFQUFZemEsS0FBSyxLQUFPLElBQUssS0FDbkUxTCxLQUFLNmxCLGtCQUFvQjdsQixLQUFLK2xCLGFBQzlCL2xCLEtBQUs4bEIsbUJBQXFCLElBQUloYyxPQUMxQixLQUFPb2MsRUFBV3hhLEtBQUssS0FBTyxJQUM5QixLQUVKMUwsS0FBSzRsQix3QkFBMEIsSUFBSTliLE9BQy9CLEtBQU9tYyxFQUFZdmEsS0FBSyxLQUFPLElBQy9CLEtBaURSLFNBQVMwYSxHQUFXdEcsR0FDaEIsT0FBT0QsR0FBV0MsR0FBUSxJQUFNLElBNUNwQ3pFLEVBQWUsSUFBSyxFQUFHLEdBQUcsV0FDdEIsSUFBSTZDLEVBQUlsZSxLQUFLOGYsT0FDYixPQUFPNUIsR0FBSyxLQUFPMUQsRUFBUzBELEVBQUcsR0FBSyxJQUFNQSxLQUc5QzdDLEVBQWUsRUFBRyxDQUFDLEtBQU0sR0FBSSxHQUFHLFdBQzVCLE9BQU9yYixLQUFLOGYsT0FBUyxPQUd6QnpFLEVBQWUsRUFBRyxDQUFDLE9BQVEsR0FBSSxFQUFHLFFBQ2xDQSxFQUFlLEVBQUcsQ0FBQyxRQUFTLEdBQUksRUFBRyxRQUNuQ0EsRUFBZSxFQUFHLENBQUMsU0FBVSxHQUFHLEdBQU8sRUFBRyxRQUkxQ3VELEdBQWEsT0FBUSxLQUlyQlcsR0FBZ0IsT0FBUSxHQUl4QjBDLEdBQWMsSUFBS0wsSUFDbkJLLEdBQWMsS0FBTVosR0FBV0osSUFDL0JnQixHQUFjLE9BQVFSLEdBQVdOLElBQ2pDYyxHQUFjLFFBQVNQLEdBQVdOLElBQ2xDYSxHQUFjLFNBQVVQLEdBQVdOLElBRW5Dd0IsR0FBYyxDQUFDLFFBQVMsVUFBV0ssSUFDbkNMLEdBQWMsUUFBUSxTQUFVMVgsRUFBTzJRLEdBQ25DQSxFQUFNb0gsSUFDZSxJQUFqQi9YLEVBQU14TCxPQUFlaVUsRUFBTTBTLGtCQUFrQm5iLEdBQVNnVixHQUFNaFYsTUFFcEUwWCxHQUFjLE1BQU0sU0FBVTFYLEVBQU8yUSxHQUNqQ0EsRUFBTW9ILElBQVF0UCxFQUFNMFMsa0JBQWtCbmIsTUFFMUMwWCxHQUFjLEtBQUssU0FBVTFYLEVBQU8yUSxHQUNoQ0EsRUFBTW9ILElBQVFxRCxTQUFTcGIsRUFBTyxPQVdsQ3lJLEVBQU0wUyxrQkFBb0IsU0FBVW5iLEdBQ2hDLE9BQU9nVixHQUFNaFYsSUFBVWdWLEdBQU1oVixHQUFTLEdBQUssS0FBTyxNQUt0RCxJQUFJcWIsR0FBYWpHLEdBQVcsWUFBWSxHQUV4QyxTQUFTa0csS0FDTCxPQUFPM0csR0FBVzdmLEtBQUs4ZixRQUczQixTQUFTMkcsR0FBV3ZJLEVBQUdoSSxFQUFHMEgsRUFBR0YsRUFBR00sRUFBR1QsRUFBR21KLEdBR2xDLElBQUloRyxFQVlKLE9BVkl4QyxFQUFJLEtBQU9BLEdBQUssR0FFaEJ3QyxFQUFPLElBQUlwTSxLQUFLNEosRUFBSSxJQUFLaEksRUFBRzBILEVBQUdGLEVBQUdNLEVBQUdULEVBQUdtSixHQUNwQ3JHLFNBQVNLLEVBQUtpRyxnQkFDZGpHLEVBQUtrRyxZQUFZMUksSUFHckJ3QyxFQUFPLElBQUlwTSxLQUFLNEosRUFBR2hJLEVBQUcwSCxFQUFHRixFQUFHTSxFQUFHVCxFQUFHbUosR0FHL0JoRyxFQUdYLFNBQVNtRyxHQUFjM0ksR0FDbkIsSUFBSXdDLEVBQU05SCxFQWNWLE9BWklzRixFQUFJLEtBQU9BLEdBQUssSUFDaEJ0RixFQUFPdlksTUFBTWxCLFVBQVV5QixNQUFNZCxLQUFLTCxZQUU3QixHQUFLeWUsRUFBSSxJQUNkd0MsRUFBTyxJQUFJcE0sS0FBS0EsS0FBS3dTLElBQUkvbUIsTUFBTSxLQUFNNlksSUFDakN5SCxTQUFTSyxFQUFLcUcsbUJBQ2RyRyxFQUFLc0csZUFBZTlJLElBR3hCd0MsRUFBTyxJQUFJcE0sS0FBS0EsS0FBS3dTLElBQUkvbUIsTUFBTSxLQUFNTixZQUdsQ2loQixFQUlYLFNBQVN1RyxHQUFnQm5ILEVBQU1vSCxFQUFLQyxHQUNoQyxJQUNJQyxFQUFNLEVBQUlGLEVBQU1DLEVBSXBCLFFBRmEsRUFBSU4sR0FBYy9HLEVBQU0sRUFBR3NILEdBQUtDLFlBQWNILEdBQU8sRUFFbERFLEVBQU0sRUFJMUIsU0FBU0UsR0FBbUJ4SCxFQUFNeUgsRUFBTUMsRUFBU04sRUFBS0MsR0FDbEQsSUFHSU0sRUFDQUMsRUFGQUMsRUFBWSxFQUFJLEdBQUtKLEVBQU8sSUFGWixFQUFJQyxFQUFVTixHQUFPLEVBQ3hCRCxHQUFnQm5ILEVBQU1vSCxFQUFLQyxHQWdCNUMsT0FYSVEsR0FBYSxFQUViRCxFQUFldEIsR0FEZnFCLEVBQVUzSCxFQUFPLEdBQ29CNkgsRUFDOUJBLEVBQVl2QixHQUFXdEcsSUFDOUIySCxFQUFVM0gsRUFBTyxFQUNqQjRILEVBQWVDLEVBQVl2QixHQUFXdEcsS0FFdEMySCxFQUFVM0gsRUFDVjRILEVBQWVDLEdBR1osQ0FDSDdILEtBQU0ySCxFQUNORSxVQUFXRCxHQUluQixTQUFTRSxHQUFXeE4sRUFBSzhNLEVBQUtDLEdBQzFCLElBRUlVLEVBQ0FKLEVBSEFLLEVBQWFiLEdBQWdCN00sRUFBSTBGLE9BQVFvSCxFQUFLQyxHQUM5Q0ksRUFBT3poQixLQUFLbWEsT0FBTzdGLEVBQUl1TixZQUFjRyxFQUFhLEdBQUssR0FBSyxFQWVoRSxPQVhJUCxFQUFPLEVBRVBNLEVBQVVOLEVBQU9RLEdBRGpCTixFQUFVck4sRUFBSTBGLE9BQVMsRUFDZW9ILEVBQUtDLEdBQ3BDSSxFQUFPUSxHQUFZM04sRUFBSTBGLE9BQVFvSCxFQUFLQyxJQUMzQ1UsRUFBVU4sRUFBT1EsR0FBWTNOLEVBQUkwRixPQUFRb0gsRUFBS0MsR0FDOUNNLEVBQVVyTixFQUFJMEYsT0FBUyxJQUV2QjJILEVBQVVyTixFQUFJMEYsT0FDZCtILEVBQVVOLEdBR1AsQ0FDSEEsS0FBTU0sRUFDTi9ILEtBQU0ySCxHQUlkLFNBQVNNLEdBQVlqSSxFQUFNb0gsRUFBS0MsR0FDNUIsSUFBSVcsRUFBYWIsR0FBZ0JuSCxFQUFNb0gsRUFBS0MsR0FDeENhLEVBQWlCZixHQUFnQm5ILEVBQU8sRUFBR29ILEVBQUtDLEdBQ3BELE9BQVFmLEdBQVd0RyxHQUFRZ0ksRUFBYUUsR0FBa0IsRUFzQzlELFNBQVNDLEdBQVc3TixHQUNoQixPQUFPd04sR0FBV3hOLEVBQUtwYSxLQUFLa29CLE1BQU1oQixJQUFLbG5CLEtBQUtrb0IsTUFBTWYsS0FBS0ksS0FsQzNEbE0sRUFBZSxJQUFLLENBQUMsS0FBTSxHQUFJLEtBQU0sUUFDckNBLEVBQWUsSUFBSyxDQUFDLEtBQU0sR0FBSSxLQUFNLFdBSXJDdUQsR0FBYSxPQUFRLEtBQ3JCQSxHQUFhLFVBQVcsS0FJeEJXLEdBQWdCLE9BQVEsR0FDeEJBLEdBQWdCLFVBQVcsR0FJM0IwQyxHQUFjLElBQUtaLElBQ25CWSxHQUFjLEtBQU1aLEdBQVdKLElBQy9CZ0IsR0FBYyxJQUFLWixJQUNuQlksR0FBYyxLQUFNWixHQUFXSixJQUUvQjRCLEdBQWtCLENBQUMsSUFBSyxLQUFNLElBQUssT0FBTyxTQUN0QzNYLEVBQ0FxYyxFQUNBdFAsRUFDQXFELEdBRUFpTSxFQUFLak0sRUFBTU4sT0FBTyxFQUFHLElBQU1rRixHQUFNaFYsTUFXckMsSUFBSWlkLEdBQW9CLENBQ3BCakIsSUFBSyxFQUNMQyxJQUFLLEdBR1QsU0FBU2lCLEtBQ0wsT0FBT3BvQixLQUFLa29CLE1BQU1oQixJQUd0QixTQUFTbUIsS0FDTCxPQUFPcm9CLEtBQUtrb0IsTUFBTWYsSUFLdEIsU0FBU21CLEdBQVdwZCxHQUNoQixJQUFJcWMsRUFBT3ZuQixLQUFLMGIsYUFBYTZMLEtBQUt2bkIsTUFDbEMsT0FBZ0IsTUFBVGtMLEVBQWdCcWMsRUFBT3ZuQixLQUFLdW9CLElBQXFCLEdBQWhCcmQsRUFBUXFjLEdBQVcsS0FHL0QsU0FBU2lCLEdBQWN0ZCxHQUNuQixJQUFJcWMsRUFBT0ssR0FBVzVuQixLQUFNLEVBQUcsR0FBR3VuQixLQUNsQyxPQUFnQixNQUFUcmMsRUFBZ0JxYyxFQUFPdm5CLEtBQUt1b0IsSUFBcUIsR0FBaEJyZCxFQUFRcWMsR0FBVyxLQWdFL0QsU0FBU2tCLEdBQWF2ZCxFQUFPMEosR0FDekIsTUFBcUIsaUJBQVYxSixFQUNBQSxFQUdOdUwsTUFBTXZMLEdBS1UsaUJBRHJCQSxFQUFRMEosRUFBTzhULGNBQWN4ZCxJQUVsQkEsRUFHSixLQVJJb2IsU0FBU3BiLEVBQU8sSUFXL0IsU0FBU3lkLEdBQWdCemQsRUFBTzBKLEdBQzVCLE1BQXFCLGlCQUFWMUosRUFDQTBKLEVBQU84VCxjQUFjeGQsR0FBUyxHQUFLLEVBRXZDdUwsTUFBTXZMLEdBQVMsS0FBT0EsRUFJakMsU0FBUzBkLEdBQWNDLEVBQUlub0IsR0FDdkIsT0FBT21vQixFQUFHam9CLE1BQU1GLEVBQUcsR0FBR2lMLE9BQU9rZCxFQUFHam9CLE1BQU0sRUFBR0YsSUFyRjdDMmEsRUFBZSxJQUFLLEVBQUcsS0FBTSxPQUU3QkEsRUFBZSxLQUFNLEVBQUcsR0FBRyxTQUFVMUcsR0FDakMsT0FBTzNVLEtBQUswYixhQUFhb04sWUFBWTlvQixLQUFNMlUsTUFHL0MwRyxFQUFlLE1BQU8sRUFBRyxHQUFHLFNBQVUxRyxHQUNsQyxPQUFPM1UsS0FBSzBiLGFBQWFxTixjQUFjL29CLEtBQU0yVSxNQUdqRDBHLEVBQWUsT0FBUSxFQUFHLEdBQUcsU0FBVTFHLEdBQ25DLE9BQU8zVSxLQUFLMGIsYUFBYXNOLFNBQVNocEIsS0FBTTJVLE1BRzVDMEcsRUFBZSxJQUFLLEVBQUcsRUFBRyxXQUMxQkEsRUFBZSxJQUFLLEVBQUcsRUFBRyxjQUkxQnVELEdBQWEsTUFBTyxLQUNwQkEsR0FBYSxVQUFXLEtBQ3hCQSxHQUFhLGFBQWMsS0FHM0JXLEdBQWdCLE1BQU8sSUFDdkJBLEdBQWdCLFVBQVcsSUFDM0JBLEdBQWdCLGFBQWMsSUFJOUIwQyxHQUFjLElBQUtaLElBQ25CWSxHQUFjLElBQUtaLElBQ25CWSxHQUFjLElBQUtaLElBQ25CWSxHQUFjLE1BQU0sU0FBVUcsRUFBVXhOLEdBQ3BDLE9BQU9BLEVBQU9xVSxpQkFBaUI3RyxNQUVuQ0gsR0FBYyxPQUFPLFNBQVVHLEVBQVV4TixHQUNyQyxPQUFPQSxFQUFPc1UsbUJBQW1COUcsTUFFckNILEdBQWMsUUFBUSxTQUFVRyxFQUFVeE4sR0FDdEMsT0FBT0EsRUFBT3VVLGNBQWMvRyxNQUdoQ1MsR0FBa0IsQ0FBQyxLQUFNLE1BQU8sU0FBUyxTQUFVM1gsRUFBT3FjLEVBQU10UCxFQUFRcUQsR0FDcEUsSUFBSWtNLEVBQVV2UCxFQUFPRixRQUFRMlEsY0FBY3hkLEVBQU9vUSxFQUFPckQsRUFBT3JCLFNBRWpELE1BQVg0USxFQUNBRCxFQUFLM0osRUFBSTRKLEVBRVR2UixFQUFnQmdDLEdBQVF0QixlQUFpQnpMLEtBSWpEMlgsR0FBa0IsQ0FBQyxJQUFLLElBQUssTUFBTSxTQUFVM1gsRUFBT3FjLEVBQU10UCxFQUFRcUQsR0FDOURpTSxFQUFLak0sR0FBUzRFLEdBQU1oVixNQWtDeEIsSUFBSWtlLEdBQXdCLDJEQUEyRHhmLE1BQy9FLEtBRUp5ZixHQUE2Qiw4QkFBOEJ6ZixNQUFNLEtBQ2pFMGYsR0FBMkIsdUJBQXVCMWYsTUFBTSxLQUN4RDJmLEdBQXVCdkgsR0FDdkJ3SCxHQUE0QnhILEdBQzVCeUgsR0FBMEJ6SCxHQUU5QixTQUFTMEgsR0FBZXhULEVBQUd2QixHQUN2QixJQUFJcVUsRUFBVy9uQixFQUFRakIsS0FBSzJwQixXQUN0QjNwQixLQUFLMnBCLFVBQ0wzcEIsS0FBSzJwQixVQUNEelQsSUFBVyxJQUFOQSxHQUFjbFcsS0FBSzJwQixVQUFVbEYsU0FBUzFqQixLQUFLNFQsR0FDMUMsU0FDQSxjQUVoQixPQUFhLElBQU51QixFQUNEMFMsR0FBY0ksRUFBVWhwQixLQUFLa29CLE1BQU1oQixLQUNuQ2hSLEVBQ0E4UyxFQUFTOVMsRUFBRTBULE9BQ1haLEVBR1YsU0FBU2EsR0FBb0IzVCxHQUN6QixPQUFhLElBQU5BLEVBQ0QwUyxHQUFjNW9CLEtBQUs4cEIsZUFBZ0I5cEIsS0FBS2tvQixNQUFNaEIsS0FDOUNoUixFQUNBbFcsS0FBSzhwQixlQUFlNVQsRUFBRTBULE9BQ3RCNXBCLEtBQUs4cEIsZUFHZixTQUFTQyxHQUFrQjdULEdBQ3ZCLE9BQWEsSUFBTkEsRUFDRDBTLEdBQWM1b0IsS0FBS2dxQixhQUFjaHFCLEtBQUtrb0IsTUFBTWhCLEtBQzVDaFIsRUFDQWxXLEtBQUtncUIsYUFBYTlULEVBQUUwVCxPQUNwQjVwQixLQUFLZ3FCLGFBR2YsU0FBU0MsR0FBb0JDLEVBQWF2VixFQUFRRSxHQUM5QyxJQUFJclYsRUFDQXNsQixFQUNBMUssRUFDQTJLLEVBQU1tRixFQUFZbEYsb0JBQ3RCLElBQUtobEIsS0FBS21xQixlQUtOLElBSkFucUIsS0FBS21xQixlQUFpQixHQUN0Qm5xQixLQUFLb3FCLG9CQUFzQixHQUMzQnBxQixLQUFLcXFCLGtCQUFvQixHQUVwQjdxQixFQUFJLEVBQUdBLEVBQUksSUFBS0EsRUFDakI0YSxFQUFNMUYsRUFBVSxDQUFDLElBQU0sSUFBSWtWLElBQUlwcUIsR0FDL0JRLEtBQUtxcUIsa0JBQWtCN3FCLEdBQUtRLEtBQUs4b0IsWUFDN0IxTyxFQUNBLElBQ0Y0SyxvQkFDRmhsQixLQUFLb3FCLG9CQUFvQjVxQixHQUFLUSxLQUFLK29CLGNBQy9CM08sRUFDQSxJQUNGNEssb0JBQ0ZobEIsS0FBS21xQixlQUFlM3FCLEdBQUtRLEtBQUtncEIsU0FBUzVPLEVBQUssSUFBSTRLLG9CQUl4RCxPQUFJblEsRUFDZSxTQUFYRixHQUVlLEtBRGZtUSxFQUFLaGQsR0FBUWhJLEtBQUtFLEtBQUttcUIsZUFBZ0JwRixJQUNwQkQsRUFBSyxLQUNOLFFBQVhuUSxHQUVRLEtBRGZtUSxFQUFLaGQsR0FBUWhJLEtBQUtFLEtBQUtvcUIsb0JBQXFCckYsSUFDekJELEVBQUssTUFHVCxLQURmQSxFQUFLaGQsR0FBUWhJLEtBQUtFLEtBQUtxcUIsa0JBQW1CdEYsSUFDdkJELEVBQUssS0FHYixTQUFYblEsR0FFWSxLQURabVEsRUFBS2hkLEdBQVFoSSxLQUFLRSxLQUFLbXFCLGVBQWdCcEYsTUFLM0IsS0FEWkQsRUFBS2hkLEdBQVFoSSxLQUFLRSxLQUFLb3FCLG9CQUFxQnJGLE1BSzdCLEtBRGZELEVBQUtoZCxHQUFRaEksS0FBS0UsS0FBS3FxQixrQkFBbUJ0RixJQU4vQkQsRUFPYSxLQUNOLFFBQVhuUSxHQUVLLEtBRFptUSxFQUFLaGQsR0FBUWhJLEtBQUtFLEtBQUtvcUIsb0JBQXFCckYsTUFLaEMsS0FEWkQsRUFBS2hkLEdBQVFoSSxLQUFLRSxLQUFLbXFCLGVBQWdCcEYsTUFLeEIsS0FEZkQsRUFBS2hkLEdBQVFoSSxLQUFLRSxLQUFLcXFCLGtCQUFtQnRGLElBTi9CRCxFQU9hLE1BR1osS0FEWkEsRUFBS2hkLEdBQVFoSSxLQUFLRSxLQUFLcXFCLGtCQUFtQnRGLE1BSzlCLEtBRFpELEVBQUtoZCxHQUFRaEksS0FBS0UsS0FBS21xQixlQUFnQnBGLE1BS3hCLEtBRGZELEVBQUtoZCxHQUFRaEksS0FBS0UsS0FBS29xQixvQkFBcUJyRixJQU5qQ0QsRUFPYSxLQUtwQyxTQUFTd0YsR0FBb0JKLEVBQWF2VixFQUFRRSxHQUM5QyxJQUFJclYsRUFBRzRhLEVBQUs4SCxFQUVaLEdBQUlsaUIsS0FBS3VxQixvQkFDTCxPQUFPTixHQUFvQm5xQixLQUFLRSxLQUFNa3FCLEVBQWF2VixFQUFRRSxHQVUvRCxJQVBLN1UsS0FBS21xQixpQkFDTm5xQixLQUFLbXFCLGVBQWlCLEdBQ3RCbnFCLEtBQUtxcUIsa0JBQW9CLEdBQ3pCcnFCLEtBQUtvcUIsb0JBQXNCLEdBQzNCcHFCLEtBQUt3cUIsbUJBQXFCLElBR3pCaHJCLEVBQUksRUFBR0EsRUFBSSxFQUFHQSxJQUFLLENBNkJwQixHQTFCQTRhLEVBQU0xRixFQUFVLENBQUMsSUFBTSxJQUFJa1YsSUFBSXBxQixHQUMzQnFWLElBQVc3VSxLQUFLd3FCLG1CQUFtQmhyQixLQUNuQ1EsS0FBS3dxQixtQkFBbUJockIsR0FBSyxJQUFJc0ssT0FDN0IsSUFBTTlKLEtBQUtncEIsU0FBUzVPLEVBQUssSUFBSXZRLFFBQVEsSUFBSyxRQUFVLElBQ3BELEtBRUo3SixLQUFLb3FCLG9CQUFvQjVxQixHQUFLLElBQUlzSyxPQUM5QixJQUFNOUosS0FBSytvQixjQUFjM08sRUFBSyxJQUFJdlEsUUFBUSxJQUFLLFFBQVUsSUFDekQsS0FFSjdKLEtBQUtxcUIsa0JBQWtCN3FCLEdBQUssSUFBSXNLLE9BQzVCLElBQU05SixLQUFLOG9CLFlBQVkxTyxFQUFLLElBQUl2USxRQUFRLElBQUssUUFBVSxJQUN2RCxNQUdIN0osS0FBS21xQixlQUFlM3FCLEtBQ3JCMGlCLEVBQ0ksSUFDQWxpQixLQUFLZ3BCLFNBQVM1TyxFQUFLLElBQ25CLEtBQ0FwYSxLQUFLK29CLGNBQWMzTyxFQUFLLElBQ3hCLEtBQ0FwYSxLQUFLOG9CLFlBQVkxTyxFQUFLLElBQzFCcGEsS0FBS21xQixlQUFlM3FCLEdBQUssSUFBSXNLLE9BQU9vWSxFQUFNclksUUFBUSxJQUFLLElBQUssTUFJNURnTCxHQUNXLFNBQVhGLEdBQ0EzVSxLQUFLd3FCLG1CQUFtQmhyQixHQUFHdUIsS0FBS21wQixHQUVoQyxPQUFPMXFCLEVBQ0osR0FDSHFWLEdBQ1csUUFBWEYsR0FDQTNVLEtBQUtvcUIsb0JBQW9CNXFCLEdBQUd1QixLQUFLbXBCLEdBRWpDLE9BQU8xcUIsRUFDSixHQUNIcVYsR0FDVyxPQUFYRixHQUNBM1UsS0FBS3FxQixrQkFBa0I3cUIsR0FBR3VCLEtBQUttcEIsR0FFL0IsT0FBTzFxQixFQUNKLElBQUtxVixHQUFVN1UsS0FBS21xQixlQUFlM3FCLEdBQUd1QixLQUFLbXBCLEdBQzlDLE9BQU8xcUIsR0FPbkIsU0FBU2lyQixHQUFnQnZmLEdBQ3JCLElBQUtsTCxLQUFLb1csVUFDTixPQUFnQixNQUFUbEwsRUFBZ0JsTCxLQUFPZ1gsSUFFbEMsSUFBSTRTLEVBQU01cEIsS0FBSzZYLE9BQVM3WCxLQUFLeUQsR0FBRzRqQixZQUFjcm5CLEtBQUt5RCxHQUFHaW5CLFNBQ3RELE9BQWEsTUFBVHhmLEdBQ0FBLEVBQVF1ZCxHQUFhdmQsRUFBT2xMLEtBQUswYixjQUMxQjFiLEtBQUt1b0IsSUFBSXJkLEVBQVEwZSxFQUFLLE1BRXRCQSxFQUlmLFNBQVNlLEdBQXNCemYsR0FDM0IsSUFBS2xMLEtBQUtvVyxVQUNOLE9BQWdCLE1BQVRsTCxFQUFnQmxMLEtBQU9nWCxJQUVsQyxJQUFJd1EsR0FBV3huQixLQUFLNHBCLE1BQVEsRUFBSTVwQixLQUFLMGIsYUFBYXdNLE1BQU1oQixLQUFPLEVBQy9ELE9BQWdCLE1BQVRoYyxFQUFnQnNjLEVBQVV4bkIsS0FBS3VvQixJQUFJcmQsRUFBUXNjLEVBQVMsS0FHL0QsU0FBU29ELEdBQW1CMWYsR0FDeEIsSUFBS2xMLEtBQUtvVyxVQUNOLE9BQWdCLE1BQVRsTCxFQUFnQmxMLEtBQU9nWCxJQU9sQyxHQUFhLE1BQVQ5TCxFQUFlLENBQ2YsSUFBSXNjLEVBQVVtQixHQUFnQnpkLEVBQU9sTCxLQUFLMGIsY0FDMUMsT0FBTzFiLEtBQUs0cEIsSUFBSTVwQixLQUFLNHBCLE1BQVEsRUFBSXBDLEVBQVVBLEVBQVUsR0FFckQsT0FBT3huQixLQUFLNHBCLE9BQVMsRUFJN0IsU0FBU1QsR0FBYy9HLEdBQ25CLE9BQUlwaUIsS0FBS3VxQixxQkFDQXpXLEVBQVc5VCxLQUFNLG1CQUNsQjZxQixHQUFxQi9xQixLQUFLRSxNQUUxQm9pQixFQUNPcGlCLEtBQUs4cUIscUJBRUw5cUIsS0FBSytxQixpQkFHWGpYLEVBQVc5VCxLQUFNLG9CQUNsQkEsS0FBSytxQixlQUFpQnhCLElBRW5CdnBCLEtBQUs4cUIsc0JBQXdCMUksRUFDOUJwaUIsS0FBSzhxQixxQkFDTDlxQixLQUFLK3FCLGdCQUluQixTQUFTN0IsR0FBbUI5RyxHQUN4QixPQUFJcGlCLEtBQUt1cUIscUJBQ0F6VyxFQUFXOVQsS0FBTSxtQkFDbEI2cUIsR0FBcUIvcUIsS0FBS0UsTUFFMUJvaUIsRUFDT3BpQixLQUFLZ3JCLDBCQUVMaHJCLEtBQUtpckIsc0JBR1huWCxFQUFXOVQsS0FBTSx5QkFDbEJBLEtBQUtpckIsb0JBQXNCekIsSUFFeEJ4cEIsS0FBS2dyQiwyQkFBNkI1SSxFQUNuQ3BpQixLQUFLZ3JCLDBCQUNMaHJCLEtBQUtpckIscUJBSW5CLFNBQVNoQyxHQUFpQjdHLEdBQ3RCLE9BQUlwaUIsS0FBS3VxQixxQkFDQXpXLEVBQVc5VCxLQUFNLG1CQUNsQjZxQixHQUFxQi9xQixLQUFLRSxNQUUxQm9pQixFQUNPcGlCLEtBQUtrckIsd0JBRUxsckIsS0FBS21yQixvQkFHWHJYLEVBQVc5VCxLQUFNLHVCQUNsQkEsS0FBS21yQixrQkFBb0IxQixJQUV0QnpwQixLQUFLa3JCLHlCQUEyQjlJLEVBQ2pDcGlCLEtBQUtrckIsd0JBQ0xsckIsS0FBS21yQixtQkFJbkIsU0FBU04sS0FDTCxTQUFTN0UsRUFBVWpTLEVBQUdDLEdBQ2xCLE9BQU9BLEVBQUV0VSxPQUFTcVUsRUFBRXJVLE9BR3hCLElBSUlGLEVBQ0E0YSxFQUNBZ1IsRUFDQUMsRUFDQUMsRUFSQUMsRUFBWSxHQUNadEYsRUFBYyxHQUNkQyxFQUFhLEdBQ2JDLEVBQWMsR0FNbEIsSUFBSzNtQixFQUFJLEVBQUdBLEVBQUksRUFBR0EsSUFFZjRhLEVBQU0xRixFQUFVLENBQUMsSUFBTSxJQUFJa1YsSUFBSXBxQixHQUMvQjRyQixFQUFPN0ksR0FBWXZpQixLQUFLOG9CLFlBQVkxTyxFQUFLLEtBQ3pDaVIsRUFBUzlJLEdBQVl2aUIsS0FBSytvQixjQUFjM08sRUFBSyxLQUM3Q2tSLEVBQVEvSSxHQUFZdmlCLEtBQUtncEIsU0FBUzVPLEVBQUssS0FDdkNtUixFQUFVdm5CLEtBQUtvbkIsR0FDZm5GLEVBQVlqaUIsS0FBS3FuQixHQUNqQm5GLEVBQVdsaUIsS0FBS3NuQixHQUNoQm5GLEVBQVluaUIsS0FBS29uQixHQUNqQmpGLEVBQVluaUIsS0FBS3FuQixHQUNqQmxGLEVBQVluaUIsS0FBS3NuQixHQUlyQkMsRUFBVTNMLEtBQUtvRyxHQUNmQyxFQUFZckcsS0FBS29HLEdBQ2pCRSxFQUFXdEcsS0FBS29HLEdBQ2hCRyxFQUFZdkcsS0FBS29HLEdBRWpCaG1CLEtBQUsrcUIsZUFBaUIsSUFBSWpoQixPQUFPLEtBQU9xYyxFQUFZemEsS0FBSyxLQUFPLElBQUssS0FDckUxTCxLQUFLaXJCLG9CQUFzQmpyQixLQUFLK3FCLGVBQ2hDL3FCLEtBQUttckIsa0JBQW9CbnJCLEtBQUsrcUIsZUFFOUIvcUIsS0FBSzhxQixxQkFBdUIsSUFBSWhoQixPQUM1QixLQUFPb2MsRUFBV3hhLEtBQUssS0FBTyxJQUM5QixLQUVKMUwsS0FBS2dyQiwwQkFBNEIsSUFBSWxoQixPQUNqQyxLQUFPbWMsRUFBWXZhLEtBQUssS0FBTyxJQUMvQixLQUVKMUwsS0FBS2tyQix3QkFBMEIsSUFBSXBoQixPQUMvQixLQUFPeWhCLEVBQVU3ZixLQUFLLEtBQU8sSUFDN0IsS0FNUixTQUFTOGYsS0FDTCxPQUFPeHJCLEtBQUt5ckIsUUFBVSxJQUFNLEdBR2hDLFNBQVNDLEtBQ0wsT0FBTzFyQixLQUFLeXJCLFNBQVcsR0FpQzNCLFNBQVMzVixHQUFTd0YsRUFBT3FRLEdBQ3JCdFEsRUFBZUMsRUFBTyxFQUFHLEdBQUcsV0FDeEIsT0FBT3RiLEtBQUswYixhQUFhNUYsU0FDckI5VixLQUFLeXJCLFFBQ0x6ckIsS0FBSzRyQixVQUNMRCxNQWlCWixTQUFTRSxHQUFjekosRUFBVXhOLEdBQzdCLE9BQU9BLEVBQU9rWCxlQTJEbEIsU0FBU0MsR0FBVzdnQixHQUdoQixNQUFnRCxPQUF4Q0EsRUFBUSxJQUFJN0UsY0FBYzJsQixPQUFPLEdBbkg3QzNRLEVBQWUsSUFBSyxDQUFDLEtBQU0sR0FBSSxFQUFHLFFBQ2xDQSxFQUFlLElBQUssQ0FBQyxLQUFNLEdBQUksRUFBR21RLElBQ2xDblEsRUFBZSxJQUFLLENBQUMsS0FBTSxHQUFJLEVBQUdxUSxJQUVsQ3JRLEVBQWUsTUFBTyxFQUFHLEdBQUcsV0FDeEIsTUFBTyxHQUFLbVEsR0FBUXpyQixNQUFNQyxNQUFRd2EsRUFBU3hhLEtBQUs0ckIsVUFBVyxNQUcvRHZRLEVBQWUsUUFBUyxFQUFHLEdBQUcsV0FDMUIsTUFDSSxHQUNBbVEsR0FBUXpyQixNQUFNQyxNQUNkd2EsRUFBU3hhLEtBQUs0ckIsVUFBVyxHQUN6QnBSLEVBQVN4YSxLQUFLaXNCLFVBQVcsTUFJakM1USxFQUFlLE1BQU8sRUFBRyxHQUFHLFdBQ3hCLE1BQU8sR0FBS3JiLEtBQUt5ckIsUUFBVWpSLEVBQVN4YSxLQUFLNHJCLFVBQVcsTUFHeER2USxFQUFlLFFBQVMsRUFBRyxHQUFHLFdBQzFCLE1BQ0ksR0FDQXJiLEtBQUt5ckIsUUFDTGpSLEVBQVN4YSxLQUFLNHJCLFVBQVcsR0FDekJwUixFQUFTeGEsS0FBS2lzQixVQUFXLE1BY2pDblcsR0FBUyxLQUFLLEdBQ2RBLEdBQVMsS0FBSyxHQUlkOEksR0FBYSxPQUFRLEtBR3JCVyxHQUFnQixPQUFRLElBUXhCMEMsR0FBYyxJQUFLNEosSUFDbkI1SixHQUFjLElBQUs0SixJQUNuQjVKLEdBQWMsSUFBS1osSUFDbkJZLEdBQWMsSUFBS1osSUFDbkJZLEdBQWMsSUFBS1osSUFDbkJZLEdBQWMsS0FBTVosR0FBV0osSUFDL0JnQixHQUFjLEtBQU1aLEdBQVdKLElBQy9CZ0IsR0FBYyxLQUFNWixHQUFXSixJQUUvQmdCLEdBQWMsTUFBT1gsSUFDckJXLEdBQWMsUUFBU1YsSUFDdkJVLEdBQWMsTUFBT1gsSUFDckJXLEdBQWMsUUFBU1YsSUFFdkJxQixHQUFjLENBQUMsSUFBSyxNQUFPUSxJQUMzQlIsR0FBYyxDQUFDLElBQUssT0FBTyxTQUFVMVgsRUFBTzJRLEVBQU81RCxHQUMvQyxJQUFJaVUsRUFBU2hNLEdBQU1oVixHQUNuQjJRLEVBQU11SCxJQUFtQixLQUFYOEksRUFBZ0IsRUFBSUEsS0FFdEN0SixHQUFjLENBQUMsSUFBSyxNQUFNLFNBQVUxWCxFQUFPMlEsRUFBTzVELEdBQzlDQSxFQUFPa1UsTUFBUWxVLEVBQU9GLFFBQVFxVSxLQUFLbGhCLEdBQ25DK00sRUFBT29VLFVBQVluaEIsS0FFdkIwWCxHQUFjLENBQUMsSUFBSyxPQUFPLFNBQVUxWCxFQUFPMlEsRUFBTzVELEdBQy9DNEQsRUFBTXVILElBQVFsRCxHQUFNaFYsR0FDcEIrSyxFQUFnQmdDLEdBQVFwQixTQUFVLEtBRXRDK0wsR0FBYyxPQUFPLFNBQVUxWCxFQUFPMlEsRUFBTzVELEdBQ3pDLElBQUlxVSxFQUFNcGhCLEVBQU14TCxPQUFTLEVBQ3pCbWMsRUFBTXVILElBQVFsRCxHQUFNaFYsRUFBTThQLE9BQU8sRUFBR3NSLElBQ3BDelEsRUFBTXdILElBQVVuRCxHQUFNaFYsRUFBTThQLE9BQU9zUixJQUNuQ3JXLEVBQWdCZ0MsR0FBUXBCLFNBQVUsS0FFdEMrTCxHQUFjLFNBQVMsU0FBVTFYLEVBQU8yUSxFQUFPNUQsR0FDM0MsSUFBSXNVLEVBQU9yaEIsRUFBTXhMLE9BQVMsRUFDdEI4c0IsRUFBT3RoQixFQUFNeEwsT0FBUyxFQUMxQm1jLEVBQU11SCxJQUFRbEQsR0FBTWhWLEVBQU04UCxPQUFPLEVBQUd1UixJQUNwQzFRLEVBQU13SCxJQUFVbkQsR0FBTWhWLEVBQU04UCxPQUFPdVIsRUFBTSxJQUN6QzFRLEVBQU15SCxJQUFVcEQsR0FBTWhWLEVBQU04UCxPQUFPd1IsSUFDbkN2VyxFQUFnQmdDLEdBQVFwQixTQUFVLEtBRXRDK0wsR0FBYyxPQUFPLFNBQVUxWCxFQUFPMlEsRUFBTzVELEdBQ3pDLElBQUlxVSxFQUFNcGhCLEVBQU14TCxPQUFTLEVBQ3pCbWMsRUFBTXVILElBQVFsRCxHQUFNaFYsRUFBTThQLE9BQU8sRUFBR3NSLElBQ3BDelEsRUFBTXdILElBQVVuRCxHQUFNaFYsRUFBTThQLE9BQU9zUixPQUV2QzFKLEdBQWMsU0FBUyxTQUFVMVgsRUFBTzJRLEVBQU81RCxHQUMzQyxJQUFJc1UsRUFBT3JoQixFQUFNeEwsT0FBUyxFQUN0QjhzQixFQUFPdGhCLEVBQU14TCxPQUFTLEVBQzFCbWMsRUFBTXVILElBQVFsRCxHQUFNaFYsRUFBTThQLE9BQU8sRUFBR3VSLElBQ3BDMVEsRUFBTXdILElBQVVuRCxHQUFNaFYsRUFBTThQLE9BQU91UixFQUFNLElBQ3pDMVEsRUFBTXlILElBQVVwRCxHQUFNaFYsRUFBTThQLE9BQU93UixPQVd2QyxJQUFJQyxHQUE2QixnQkFLN0JDLEdBQWFwTSxHQUFXLFNBQVMsR0FFckMsU0FBU3FNLEdBQWVsQixFQUFPRyxFQUFTZ0IsR0FDcEMsT0FBSW5CLEVBQVEsR0FDRG1CLEVBQVUsS0FBTyxLQUVqQkEsRUFBVSxLQUFPLEtBSWhDLElBdUJJQyxHQXZCQUMsR0FBYSxDQUNiM1MsU0FBVVAsRUFDVnNDLGVBQWdCRSxFQUNoQkosWUFBYWUsRUFDYnZCLFFBQVN5QixFQUNUOFAsdUJBQXdCN1AsRUFDeEJrQixhQUFjaEIsRUFFZDBHLE9BQVFJLEdBQ1JMLFlBQWFNLEdBRWJvRCxLQUFNWSxHQUVOYSxTQUFVSSxHQUNWTixZQUFhUSxHQUNiUCxjQUFlTSxHQUVmMkQsY0FBZVAsSUFJZlEsR0FBVSxHQUNWQyxHQUFpQixHQUdyQixTQUFTQyxHQUFhQyxFQUFNaHRCLEdBQ3hCLElBQUlaLEVBQ0E2dEIsRUFBT3ZuQixLQUFLMGYsSUFBSTRILEVBQUsxdEIsT0FBUVUsRUFBS1YsUUFDdEMsSUFBS0YsRUFBSSxFQUFHQSxFQUFJNnRCLEVBQU03dEIsR0FBSyxFQUN2QixHQUFJNHRCLEVBQUs1dEIsS0FBT1ksRUFBS1osR0FDakIsT0FBT0EsRUFHZixPQUFPNnRCLEVBR1gsU0FBU0MsR0FBZ0IxdEIsR0FDckIsT0FBT0EsRUFBTUEsRUFBSXlHLGNBQWN3RCxRQUFRLElBQUssS0FBT2pLLEVBTXZELFNBQVMydEIsR0FBYUMsR0FPbEIsSUFOQSxJQUNJQyxFQUNBM3BCLEVBQ0E4USxFQUNBaEwsRUFKQXBLLEVBQUksRUFNREEsRUFBSWd1QixFQUFNOXRCLFFBQVEsQ0FLckIsSUFIQSt0QixHQURBN2pCLEVBQVEwakIsR0FBZ0JFLEVBQU1odUIsSUFBSW9LLE1BQU0sTUFDOUJsSyxPQUVWb0UsR0FEQUEsRUFBT3dwQixHQUFnQkUsRUFBTWh1QixFQUFJLEtBQ25Cc0UsRUFBSzhGLE1BQU0sS0FBTyxLQUN6QjZqQixFQUFJLEdBQUcsQ0FFVixHQURBN1ksRUFBUzhZLEdBQVc5akIsRUFBTWhKLE1BQU0sRUFBRzZzQixHQUFHL2hCLEtBQUssTUFFdkMsT0FBT2tKLEVBRVgsR0FDSTlRLEdBQ0FBLEVBQUtwRSxRQUFVK3RCLEdBQ2ZOLEdBQWF2akIsRUFBTzlGLElBQVMycEIsRUFBSSxFQUdqQyxNQUVKQSxJQUVKanVCLElBRUosT0FBT3F0QixHQUdYLFNBQVNhLEdBQVc3c0IsR0FDaEIsSUFBSThzQixFQUFZLEtBR2hCLFFBQ3NCaHFCLElBQWxCc3BCLEdBQVFwc0IsSUFFUjJTLEdBQ0FBLEVBQU9vYSxRQUVQLElBQ0lELEVBQVlkLEdBQWFnQixNQUNSMWhCLEtBRWpCMmhCLEdBQW1CSCxHQUNyQixNQUFPSSxHQUdMZCxHQUFRcHNCLEdBQVEsS0FHeEIsT0FBT29zQixHQUFRcHNCLEdBTW5CLFNBQVNpdEIsR0FBbUJsdUIsRUFBS291QixHQUM3QixJQUFJamhCLEVBcUJKLE9BcEJJbk4sS0FFSW1OLEVBREFvSCxFQUFZNlosR0FDTEMsR0FBVXJ1QixHQUVWc3VCLEdBQWF0dUIsRUFBS291QixJQUt6Qm5CLEdBQWU5ZixFQUVRLG9CQUFad0wsU0FBMkJBLFFBQVFILE1BRTFDRyxRQUFRSCxLQUNKLFVBQVl4WSxFQUFNLDJDQU0zQml0QixHQUFhZ0IsTUFHeEIsU0FBU0ssR0FBYXJ0QixFQUFNb1gsR0FDeEIsR0FBZSxPQUFYQSxFQUFpQixDQUNqQixJQUFJckQsRUFDQTZFLEVBQWVxVCxHQUVuQixHQURBN1UsRUFBT2tXLEtBQU90dEIsRUFDTyxNQUFqQm9zQixHQUFRcHNCLEdBQ1JtWSxFQUNJLHVCQUNBLDJPQUtKUyxFQUFld1QsR0FBUXBzQixHQUFNdVksYUFDMUIsR0FBMkIsTUFBdkJuQixFQUFPbVcsYUFDZCxHQUFvQyxNQUFoQ25CLEdBQVFoVixFQUFPbVcsY0FDZjNVLEVBQWV3VCxHQUFRaFYsRUFBT21XLGNBQWNoVixZQUN6QyxDQUVILEdBQWMsT0FEZHhFLEVBQVM4WSxHQUFXelYsRUFBT21XLGVBV3ZCLE9BUEtsQixHQUFlalYsRUFBT21XLGdCQUN2QmxCLEdBQWVqVixFQUFPbVcsY0FBZ0IsSUFFMUNsQixHQUFlalYsRUFBT21XLGNBQWNwcUIsS0FBSyxDQUNyQ25ELEtBQU1BLEVBQ05vWCxPQUFRQSxJQUVMLEtBVFB3QixFQUFlN0UsRUFBT3dFLFFBMEJsQyxPQWJBNlQsR0FBUXBzQixHQUFRLElBQUk4WSxFQUFPSCxFQUFhQyxFQUFjeEIsSUFFbERpVixHQUFlcnNCLElBQ2Zxc0IsR0FBZXJzQixHQUFNeUssU0FBUSxTQUFVcVksR0FDbkN1SyxHQUFhdkssRUFBRTlpQixLQUFNOGlCLEVBQUUxTCxXQU8vQjZWLEdBQW1CanRCLEdBRVpvc0IsR0FBUXBzQixHQUlmLGNBRE9vc0IsR0FBUXBzQixHQUNSLEtBSWYsU0FBU3d0QixHQUFheHRCLEVBQU1vWCxHQUN4QixHQUFjLE1BQVZBLEVBQWdCLENBQ2hCLElBQUlyRCxFQUNBMFosRUFDQTdVLEVBQWVxVCxHQUVFLE1BQWpCRyxHQUFRcHNCLElBQStDLE1BQTlCb3NCLEdBQVFwc0IsR0FBTXV0QixhQUV2Q25CLEdBQVFwc0IsR0FBTXNZLElBQUlLLEVBQWF5VCxHQUFRcHNCLEdBQU11WSxRQUFTbkIsS0FJckMsT0FEakJxVyxFQUFZWixHQUFXN3NCLE1BRW5CNFksRUFBZTZVLEVBQVVsVixTQUU3Qm5CLEVBQVN1QixFQUFhQyxFQUFjeEIsR0FDbkIsTUFBYnFXLElBSUFyVyxFQUFPa1csS0FBT3R0QixJQUVsQitULEVBQVMsSUFBSStFLEVBQU8xQixJQUNibVcsYUFBZW5CLEdBQVFwc0IsR0FDOUJvc0IsR0FBUXBzQixHQUFRK1QsR0FJcEJrWixHQUFtQmp0QixRQUdFLE1BQWpCb3NCLEdBQVFwc0IsS0FDMEIsTUFBOUJvc0IsR0FBUXBzQixHQUFNdXRCLGNBQ2RuQixHQUFRcHNCLEdBQVFvc0IsR0FBUXBzQixHQUFNdXRCLGFBQzFCdnRCLElBQVNpdEIsTUFDVEEsR0FBbUJqdEIsSUFFQyxNQUFqQm9zQixHQUFRcHNCLFdBQ1Jvc0IsR0FBUXBzQixJQUkzQixPQUFPb3NCLEdBQVFwc0IsR0FJbkIsU0FBU290QixHQUFVcnVCLEdBQ2YsSUFBSWdWLEVBTUosR0FKSWhWLEdBQU9BLEVBQUltWSxTQUFXblksRUFBSW1ZLFFBQVE4VixRQUNsQ2p1QixFQUFNQSxFQUFJbVksUUFBUThWLFFBR2pCanVCLEVBQ0QsT0FBT2l0QixHQUdYLElBQUs1ckIsRUFBUXJCLEdBQU0sQ0FHZixHQURBZ1YsRUFBUzhZLEdBQVc5dEIsR0FFaEIsT0FBT2dWLEVBRVhoVixFQUFNLENBQUNBLEdBR1gsT0FBTzJ0QixHQUFhM3RCLEdBR3hCLFNBQVMydUIsS0FDTCxPQUFPemlCLEVBQUttaEIsSUFHaEIsU0FBU3VCLEdBQWN0WSxHQUNuQixJQUFJZCxFQUNBckIsRUFBSW1DLEVBQUU4TSxHQXVDVixPQXJDSWpQLElBQXNDLElBQWpDa0MsRUFBZ0JDLEdBQUdkLFdBQ3hCQSxFQUNJckIsRUFBRW1QLElBQVMsR0FBS25QLEVBQUVtUCxJQUFTLEdBQ3JCQSxHQUNBblAsRUFBRW9QLElBQVEsR0FBS3BQLEVBQUVvUCxJQUFReEMsR0FBWTVNLEVBQUVrUCxJQUFPbFAsRUFBRW1QLEtBQ2hEQyxHQUNBcFAsRUFBRXFQLElBQVEsR0FDVnJQLEVBQUVxUCxJQUFRLElBQ0csS0FBWnJQLEVBQUVxUCxNQUNnQixJQUFkclAsRUFBRXNQLEtBQ2UsSUFBZHRQLEVBQUV1UCxLQUNpQixJQUFuQnZQLEVBQUV3UCxLQUNWSCxHQUNBclAsRUFBRXNQLElBQVUsR0FBS3RQLEVBQUVzUCxJQUFVLEdBQzdCQSxHQUNBdFAsRUFBRXVQLElBQVUsR0FBS3ZQLEVBQUV1UCxJQUFVLEdBQzdCQSxHQUNBdlAsRUFBRXdQLElBQWUsR0FBS3hQLEVBQUV3UCxJQUFlLElBQ3ZDQSxJQUNDLEVBR1B0TixFQUFnQkMsR0FBR3VZLHFCQUNsQnJaLEVBQVc2TixJQUFRN04sRUFBVytOLE1BRS9CL04sRUFBVytOLElBRVhsTixFQUFnQkMsR0FBR3dZLGlCQUFnQyxJQUFkdFosSUFDckNBLEVBQVdvTyxJQUVYdk4sRUFBZ0JDLEdBQUd5WSxtQkFBa0MsSUFBZHZaLElBQ3ZDQSxFQUFXcU8sSUFHZnhOLEVBQWdCQyxHQUFHZCxTQUFXQSxHQUczQmMsRUFLWCxJQUFJMFksR0FBbUIsaUpBQ25CQyxHQUFnQiw2SUFDaEJDLEdBQVUsd0JBQ1ZDLEdBQVcsQ0FDUCxDQUFDLGVBQWdCLHVCQUNqQixDQUFDLGFBQWMsbUJBQ2YsQ0FBQyxlQUFnQixrQkFDakIsQ0FBQyxhQUFjLGVBQWUsR0FDOUIsQ0FBQyxXQUFZLGVBQ2IsQ0FBQyxVQUFXLGNBQWMsR0FDMUIsQ0FBQyxhQUFjLGNBQ2YsQ0FBQyxXQUFZLFNBQ2IsQ0FBQyxhQUFjLGVBQ2YsQ0FBQyxZQUFhLGVBQWUsR0FDN0IsQ0FBQyxVQUFXLFNBQ1osQ0FBQyxTQUFVLFNBQVMsR0FDcEIsQ0FBQyxPQUFRLFNBQVMsSUFHdEJDLEdBQVcsQ0FDUCxDQUFDLGdCQUFpQix1QkFDbEIsQ0FBQyxnQkFBaUIsc0JBQ2xCLENBQUMsV0FBWSxrQkFDYixDQUFDLFFBQVMsYUFDVixDQUFDLGNBQWUscUJBQ2hCLENBQUMsY0FBZSxvQkFDaEIsQ0FBQyxTQUFVLGdCQUNYLENBQUMsT0FBUSxZQUNULENBQUMsS0FBTSxTQUVYQyxHQUFrQixxQkFFbEJsWixHQUFVLDBMQUNWbVosR0FBYSxDQUNUQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsS0FBSyxJQUNMQyxLQUFLLElBQ0xDLEtBQUssSUFDTEMsS0FBSyxJQUNMQyxLQUFLLElBQ0xDLEtBQUssSUFDTEMsS0FBSyxJQUNMQyxLQUFLLEtBSWIsU0FBU0MsR0FBYzVYLEdBQ25CLElBQUl6WSxFQUNBc3dCLEVBR0FDLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBTEE1UixFQUFTckcsRUFBT3BVLEdBQ2hCMkQsRUFBUW9uQixHQUFpQnVCLEtBQUs3UixJQUFXdVEsR0FBY3NCLEtBQUs3UixHQU1oRSxHQUFJOVcsRUFBTyxDQUdQLElBRkF5TyxFQUFnQmdDLEdBQVF0QyxLQUFNLEVBRXpCblcsRUFBSSxFQUFHc3dCLEVBQUlmLEdBQVNydkIsT0FBUUYsRUFBSXN3QixFQUFHdHdCLElBQ3BDLEdBQUl1dkIsR0FBU3Z2QixHQUFHLEdBQUcyd0IsS0FBSzNvQixFQUFNLElBQUssQ0FDL0J3b0IsRUFBYWpCLEdBQVN2dkIsR0FBRyxHQUN6QnV3QixHQUErQixJQUFuQmhCLEdBQVN2dkIsR0FBRyxHQUN4QixNQUdSLEdBQWtCLE1BQWR3d0IsRUFFQSxZQURBL1gsRUFBTzVCLFVBQVcsR0FHdEIsR0FBSTdPLEVBQU0sR0FBSSxDQUNWLElBQUtoSSxFQUFJLEVBQUdzd0IsRUFBSWQsR0FBU3R2QixPQUFRRixFQUFJc3dCLEVBQUd0d0IsSUFDcEMsR0FBSXd2QixHQUFTeHZCLEdBQUcsR0FBRzJ3QixLQUFLM29CLEVBQU0sSUFBSyxDQUUvQnlvQixHQUFjem9CLEVBQU0sSUFBTSxLQUFPd25CLEdBQVN4dkIsR0FBRyxHQUM3QyxNQUdSLEdBQWtCLE1BQWR5d0IsRUFFQSxZQURBaFksRUFBTzVCLFVBQVcsR0FJMUIsSUFBSzBaLEdBQTJCLE1BQWRFLEVBRWQsWUFEQWhZLEVBQU81QixVQUFXLEdBR3RCLEdBQUk3TyxFQUFNLEdBQUksQ0FDVixJQUFJc25CLEdBQVFxQixLQUFLM29CLEVBQU0sSUFJbkIsWUFEQXlRLEVBQU81QixVQUFXLEdBRmxCNlosRUFBVyxJQU1uQmpZLEVBQU9QLEdBQUtzWSxHQUFjQyxHQUFjLEtBQU9DLEdBQVksSUFDM0RFLEdBQTBCblksUUFFMUJBLEVBQU81QixVQUFXLEVBSTFCLFNBQVNnYSxHQUNMQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxHQUVBLElBQUkvbkIsRUFBUyxDQUNUZ29CLEdBQWVOLEdBQ2ZuTSxHQUF5QnJjLFFBQVF5b0IsR0FDakNqSyxTQUFTa0ssRUFBUSxJQUNqQmxLLFNBQVNtSyxFQUFTLElBQ2xCbkssU0FBU29LLEVBQVcsS0FPeEIsT0FKSUMsR0FDQS9uQixFQUFPNUUsS0FBS3NpQixTQUFTcUssRUFBVyxLQUc3Qi9uQixFQUdYLFNBQVNnb0IsR0FBZU4sR0FDcEIsSUFBSXhRLEVBQU93RyxTQUFTZ0ssRUFBUyxJQUM3QixPQUFJeFEsR0FBUSxHQUNELElBQU9BLEVBQ1BBLEdBQVEsSUFDUixLQUFPQSxFQUVYQSxFQUdYLFNBQVMrUSxHQUFrQnRULEdBRXZCLE9BQU9BLEVBQ0YxVCxRQUFRLG9CQUFxQixLQUM3QkEsUUFBUSxXQUFZLEtBQ3BCQSxRQUFRLFNBQVUsSUFDbEJBLFFBQVEsU0FBVSxJQUczQixTQUFTaW5CLEdBQWFDLEVBQVlDLEVBQWEvWSxHQUMzQyxPQUFJOFksR0FFc0IxSCxHQUEyQnZoQixRQUFRaXBCLEtBQ3JDLElBQUl6YyxLQUNoQjBjLEVBQVksR0FDWkEsRUFBWSxHQUNaQSxFQUFZLElBQ2R0RyxXQUVGelUsRUFBZ0JnQyxHQUFRakMsaUJBQWtCLEVBQzFDaUMsRUFBTzVCLFVBQVcsR0FDWCxHQU1uQixTQUFTNGEsR0FBZ0JDLEVBQVdDLEVBQWdCQyxHQUNoRCxHQUFJRixFQUNBLE9BQU9oQyxHQUFXZ0MsR0FDZixHQUFJQyxFQUVQLE9BQU8sRUFFUCxJQUFJRSxFQUFLL0ssU0FBUzhLLEVBQVcsSUFDekJsYixFQUFJbWIsRUFBSyxJQUViLE9BRFNBLEVBQUtuYixHQUFLLElBQ1IsR0FBS0EsRUFLeEIsU0FBU29iLEdBQWtCclosR0FDdkIsSUFDSXNaLEVBREEvcEIsRUFBUXVPLEdBQVFvYSxLQUFLVSxHQUFrQjVZLEVBQU9wVSxLQUVsRCxHQUFJMkQsRUFBTyxDQVNQLEdBUkErcEIsRUFBY2xCLEdBQ1Y3b0IsRUFBTSxHQUNOQSxFQUFNLEdBQ05BLEVBQU0sR0FDTkEsRUFBTSxHQUNOQSxFQUFNLEdBQ05BLEVBQU0sS0FFTHNwQixHQUFhdHBCLEVBQU0sR0FBSStwQixFQUFhdFosR0FDckMsT0FHSkEsRUFBTytLLEdBQUt1TyxFQUNadFosRUFBT0wsS0FBT3FaLEdBQWdCenBCLEVBQU0sR0FBSUEsRUFBTSxHQUFJQSxFQUFNLEtBRXhEeVEsRUFBT3hVLEdBQUtvakIsR0FBYzltQixNQUFNLEtBQU1rWSxFQUFPK0ssSUFDN0MvSyxFQUFPeFUsR0FBRyt0QixjQUFjdlosRUFBT3hVLEdBQUdndUIsZ0JBQWtCeFosRUFBT0wsTUFFM0QzQixFQUFnQmdDLEdBQVFsQyxTQUFVLE9BRWxDa0MsRUFBTzVCLFVBQVcsRUFLMUIsU0FBU3FiLEdBQWlCelosR0FDdEIsSUFBSXVLLEVBQVV5TSxHQUFnQmtCLEtBQUtsWSxFQUFPcFUsSUFDMUIsT0FBWjJlLEdBS0pxTixHQUFjNVgsSUFDVSxJQUFwQkEsRUFBTzVCLGtCQUNBNEIsRUFBTzVCLFNBS2xCaWIsR0FBa0JyWixJQUNNLElBQXBCQSxFQUFPNUIsa0JBQ0E0QixFQUFPNUIsU0FLZDRCLEVBQU9yQixRQUNQcUIsRUFBTzVCLFVBQVcsRUFHbEIxQyxFQUFNZ2Usd0JBQXdCMVosTUF0QjlCQSxFQUFPeFUsR0FBSyxJQUFJNlEsTUFBTWtPLEVBQVEsSUFvQ3RDLFNBQVNvUCxHQUFTN2QsRUFBR0MsRUFBRzZkLEdBQ3BCLE9BQVMsTUFBTDlkLEVBQ09BLEVBRUYsTUFBTEMsRUFDT0EsRUFFSjZkLEVBR1gsU0FBU0MsR0FBaUI3WixHQUV0QixJQUFJOFosRUFBVyxJQUFJemQsS0FBS1gsRUFBTTBHLE9BQzlCLE9BQUlwQyxFQUFPK1osUUFDQSxDQUNIRCxFQUFTaEwsaUJBQ1RnTCxFQUFTRSxjQUNURixFQUFTRyxjQUdWLENBQUNILEVBQVNwTCxjQUFlb0wsRUFBU0ksV0FBWUosRUFBU0ssV0FPbEUsU0FBU0MsR0FBZ0JwYSxHQUNyQixJQUFJelksRUFDQWtoQixFQUVBNFIsRUFDQUMsRUFDQUMsRUFIQXRuQixFQUFRLEdBS1osSUFBSStNLEVBQU94VSxHQUFYLENBZ0NBLElBNUJBNnVCLEVBQWNSLEdBQWlCN1osR0FHM0JBLEVBQU82SyxJQUF5QixNQUFuQjdLLEVBQU8rSyxHQUFHRyxLQUFxQyxNQUFwQmxMLEVBQU8rSyxHQUFHRSxLQUNsRHVQLEdBQXNCeGEsR0FJRCxNQUFyQkEsRUFBT3lhLGFBQ1BGLEVBQVlaLEdBQVMzWixFQUFPK0ssR0FBR0MsSUFBT3FQLEVBQVlyUCxNQUc5Q2hMLEVBQU95YSxXQUFhdE0sR0FBV29NLElBQ1QsSUFBdEJ2YSxFQUFPeWEsY0FFUHpjLEVBQWdCZ0MsR0FBUXdXLG9CQUFxQixHQUdqRC9OLEVBQU9tRyxHQUFjMkwsRUFBVyxFQUFHdmEsRUFBT3lhLFlBQzFDemEsRUFBTytLLEdBQUdFLElBQVN4QyxFQUFLdVIsY0FDeEJoYSxFQUFPK0ssR0FBR0csSUFBUXpDLEVBQUt3UixjQVF0QjF5QixFQUFJLEVBQUdBLEVBQUksR0FBcUIsTUFBaEJ5WSxFQUFPK0ssR0FBR3hqQixLQUFjQSxFQUN6Q3lZLEVBQU8rSyxHQUFHeGpCLEdBQUswTCxFQUFNMUwsR0FBSzh5QixFQUFZOXlCLEdBSTFDLEtBQU9BLEVBQUksRUFBR0EsSUFDVnlZLEVBQU8rSyxHQUFHeGpCLEdBQUswTCxFQUFNMUwsR0FDRCxNQUFoQnlZLEVBQU8rSyxHQUFHeGpCLEdBQW9CLElBQU5BLEVBQVUsRUFBSSxFQUFLeVksRUFBTytLLEdBQUd4akIsR0FLckMsS0FBcEJ5WSxFQUFPK0ssR0FBR0ksS0FDWSxJQUF0Qm5MLEVBQU8rSyxHQUFHSyxLQUNZLElBQXRCcEwsRUFBTytLLEdBQUdNLEtBQ2lCLElBQTNCckwsRUFBTytLLEdBQUdPLE1BRVZ0TCxFQUFPMGEsVUFBVyxFQUNsQjFhLEVBQU8rSyxHQUFHSSxJQUFRLEdBR3RCbkwsRUFBT3hVLElBQU13VSxFQUFPK1osUUFBVW5MLEdBQWdCSixJQUFZMW1CLE1BQ3RELEtBQ0FtTCxHQUVKcW5CLEVBQWtCdGEsRUFBTytaLFFBQ25CL1osRUFBT3hVLEdBQUc0akIsWUFDVnBQLEVBQU94VSxHQUFHaW5CLFNBSUcsTUFBZnpTLEVBQU9MLE1BQ1BLLEVBQU94VSxHQUFHK3RCLGNBQWN2WixFQUFPeFUsR0FBR2d1QixnQkFBa0J4WixFQUFPTCxNQUczREssRUFBTzBhLFdBQ1AxYSxFQUFPK0ssR0FBR0ksSUFBUSxJQUtsQm5MLEVBQU82SyxTQUNnQixJQUFoQjdLLEVBQU82SyxHQUFHbEYsR0FDakIzRixFQUFPNkssR0FBR2xGLElBQU0yVSxJQUVoQnRjLEVBQWdCZ0MsR0FBUWpDLGlCQUFrQixJQUlsRCxTQUFTeWMsR0FBc0J4YSxHQUMzQixJQUFJNkYsRUFBRzhVLEVBQVVyTCxFQUFNQyxFQUFTTixFQUFLQyxFQUFLMEwsRUFBTUMsRUFBaUJDLEVBR3JELE9BRFpqVixFQUFJN0YsRUFBTzZLLElBQ0xrUSxJQUFxQixNQUFQbFYsRUFBRW1WLEdBQW9CLE1BQVBuVixFQUFFb1YsR0FDakNoTSxFQUFNLEVBQ05DLEVBQU0sRUFNTnlMLEVBQVdoQixHQUNQOVQsRUFBRWtWLEdBQ0YvYSxFQUFPK0ssR0FBR0MsSUFDVjJFLEdBQVd1TCxLQUFlLEVBQUcsR0FBR3JULE1BRXBDeUgsRUFBT3FLLEdBQVM5VCxFQUFFbVYsRUFBRyxLQUNyQnpMLEVBQVVvSyxHQUFTOVQsRUFBRW9WLEVBQUcsSUFDVixHQUFLMUwsRUFBVSxLQUN6QnNMLEdBQWtCLEtBR3RCNUwsRUFBTWpQLEVBQU9GLFFBQVFtUSxNQUFNaEIsSUFDM0JDLEVBQU1sUCxFQUFPRixRQUFRbVEsTUFBTWYsSUFFM0I0TCxFQUFVbkwsR0FBV3VMLEtBQWVqTSxFQUFLQyxHQUV6Q3lMLEVBQVdoQixHQUFTOVQsRUFBRXNWLEdBQUluYixFQUFPK0ssR0FBR0MsSUFBTzhQLEVBQVFqVCxNQUduRHlILEVBQU9xSyxHQUFTOVQsRUFBRUEsRUFBR2lWLEVBQVF4TCxNQUVsQixNQUFQekosRUFBRUYsSUFFRjRKLEVBQVUxSixFQUFFRixHQUNFLEdBQUs0SixFQUFVLEtBQ3pCc0wsR0FBa0IsR0FFUixNQUFQaFYsRUFBRWlRLEdBRVR2RyxFQUFVMUosRUFBRWlRLEVBQUk3RyxHQUNacEosRUFBRWlRLEVBQUksR0FBS2pRLEVBQUVpUSxFQUFJLEtBQ2pCK0UsR0FBa0IsSUFJdEJ0TCxFQUFVTixHQUdkSyxFQUFPLEdBQUtBLEVBQU9RLEdBQVk2SyxFQUFVMUwsRUFBS0MsR0FDOUNsUixFQUFnQmdDLEdBQVF5VyxnQkFBaUIsRUFDZixNQUFuQm9FLEVBQ1A3YyxFQUFnQmdDLEdBQVEwVyxrQkFBbUIsR0FFM0NrRSxFQUFPdkwsR0FBbUJzTCxFQUFVckwsRUFBTUMsRUFBU04sRUFBS0MsR0FDeERsUCxFQUFPK0ssR0FBR0MsSUFBUTRQLEVBQUsvUyxLQUN2QjdILEVBQU95YSxXQUFhRyxFQUFLbEwsV0FXakMsU0FBU3lJLEdBQTBCblksR0FFL0IsR0FBSUEsRUFBT1AsS0FBTy9ELEVBQU0wZixTQUl4QixHQUFJcGIsRUFBT1AsS0FBTy9ELEVBQU0yZixTQUF4QixDQUlBcmIsRUFBTytLLEdBQUssR0FDWi9NLEVBQWdCZ0MsR0FBUWhELE9BQVEsRUFHaEMsSUFDSXpWLEVBQ0F3eEIsRUFDQXJPLEVBQ0FySCxFQUNBaVksRUFHQTFkLEVBUkF5SSxFQUFTLEdBQUtyRyxFQUFPcFUsR0FNckIydkIsRUFBZWxWLEVBQU81ZSxPQUN0Qit6QixFQUF5QixFQU03QixJQUhBOVEsRUFDSTVHLEVBQWE5RCxFQUFPUCxHQUFJTyxFQUFPRixTQUFTdlEsTUFBTXlULElBQXFCLEdBRWxFemIsRUFBSSxFQUFHQSxFQUFJbWpCLEVBQU9qakIsT0FBUUYsSUFDM0I4YixFQUFRcUgsRUFBT25qQixJQUNmd3hCLEdBQWUxUyxFQUFPOVcsTUFBTTZhLEdBQXNCL0csRUFBT3JELEtBQ3JELElBQUksT0FFSnNiLEVBQVVqVixFQUFPdEQsT0FBTyxFQUFHc0QsRUFBT3hXLFFBQVFrcEIsS0FDOUJ0eEIsT0FBUyxHQUNqQnVXLEVBQWdCZ0MsR0FBUTlDLFlBQVluUixLQUFLdXZCLEdBRTdDalYsRUFBU0EsRUFBTzFkLE1BQ1owZCxFQUFPeFcsUUFBUWtwQixHQUFlQSxFQUFZdHhCLFFBRTlDK3pCLEdBQTBCekMsRUFBWXR4QixRQUd0QzBiLEVBQXFCRSxJQUNqQjBWLEVBQ0EvYSxFQUFnQmdDLEdBQVFoRCxPQUFRLEVBRWhDZ0IsRUFBZ0JnQyxHQUFRL0MsYUFBYWxSLEtBQUtzWCxHQUU5Q3lILEdBQXdCekgsRUFBTzBWLEVBQWEvWSxJQUNyQ0EsRUFBT3JCLFVBQVlvYSxHQUMxQi9hLEVBQWdCZ0MsR0FBUS9DLGFBQWFsUixLQUFLc1gsR0FLbERyRixFQUFnQmdDLEdBQVE1QyxjQUNwQm1lLEVBQWVDLEVBQ2ZuVixFQUFPNWUsT0FBUyxHQUNoQnVXLEVBQWdCZ0MsR0FBUTlDLFlBQVluUixLQUFLc2EsR0FLekNyRyxFQUFPK0ssR0FBR0ksS0FBUyxLQUNpQixJQUFwQ25OLEVBQWdCZ0MsR0FBUXBCLFNBQ3hCb0IsRUFBTytLLEdBQUdJLElBQVEsSUFFbEJuTixFQUFnQmdDLEdBQVFwQixhQUFVbFQsR0FHdENzUyxFQUFnQmdDLEdBQVFyQyxnQkFBa0JxQyxFQUFPK0ssR0FBR3BpQixNQUFNLEdBQzFEcVYsRUFBZ0JnQyxHQUFRbkMsU0FBV21DLEVBQU9vVSxVQUUxQ3BVLEVBQU8rSyxHQUFHSSxJQUFRc1EsR0FDZHpiLEVBQU9GLFFBQ1BFLEVBQU8rSyxHQUFHSSxJQUNWbkwsRUFBT29VLFdBS0MsUUFEWnhXLEVBQU1JLEVBQWdCZ0MsR0FBUXBDLE9BRTFCb0MsRUFBTytLLEdBQUdDLElBQVFoTCxFQUFPRixRQUFRNGIsZ0JBQWdCOWQsRUFBS29DLEVBQU8rSyxHQUFHQyxNQUdwRW9QLEdBQWdCcGEsR0FDaEJ1VyxHQUFjdlcsUUEvRVZxWixHQUFrQnJaLFFBSmxCNFgsR0FBYzVYLEdBc0Z0QixTQUFTeWIsR0FBZ0I5ZSxFQUFRZ2YsRUFBTTlkLEdBQ25DLElBQUkrZCxFQUVKLE9BQWdCLE1BQVovZCxFQUVPOGQsRUFFZ0IsTUFBdkJoZixFQUFPa2YsYUFDQWxmLEVBQU9rZixhQUFhRixFQUFNOWQsR0FDWCxNQUFmbEIsRUFBT3dYLE9BRWR5SCxFQUFPamYsRUFBT3dYLEtBQUt0VyxLQUNQOGQsRUFBTyxLQUNmQSxHQUFRLElBRVBDLEdBQWlCLEtBQVRELElBQ1RBLEVBQU8sR0FFSkEsR0FHQUEsRUFLZixTQUFTRyxHQUF5QjliLEdBQzlCLElBQUkrYixFQUNBQyxFQUNBQyxFQUNBMTBCLEVBQ0EyMEIsRUFDQUMsRUFDQUMsR0FBb0IsRUFFeEIsR0FBeUIsSUFBckJwYyxFQUFPUCxHQUFHaFksT0FHVixPQUZBdVcsRUFBZ0JnQyxHQUFReEMsZUFBZ0IsT0FDeEN3QyxFQUFPeFUsR0FBSyxJQUFJNlEsS0FBSzBDLE1BSXpCLElBQUt4WCxFQUFJLEVBQUdBLEVBQUl5WSxFQUFPUCxHQUFHaFksT0FBUUYsSUFDOUIyMEIsRUFBZSxFQUNmQyxHQUFtQixFQUNuQkosRUFBYTNjLEVBQVcsR0FBSVksR0FDTixNQUFsQkEsRUFBTytaLFVBQ1BnQyxFQUFXaEMsUUFBVS9aLEVBQU8rWixTQUVoQ2dDLEVBQVd0YyxHQUFLTyxFQUFPUCxHQUFHbFksR0FDMUI0d0IsR0FBMEI0RCxHQUV0QjVkLEVBQVE0ZCxLQUNSSSxHQUFtQixHQUl2QkQsR0FBZ0JsZSxFQUFnQitkLEdBQVkzZSxjQUc1QzhlLEdBQWtFLEdBQWxEbGUsRUFBZ0IrZCxHQUFZOWUsYUFBYXhWLE9BRXpEdVcsRUFBZ0IrZCxHQUFZTSxNQUFRSCxFQUUvQkUsRUFhR0YsRUFBZUQsSUFDZkEsRUFBY0MsRUFDZEYsRUFBYUQsSUFiRSxNQUFmRSxHQUNBQyxFQUFlRCxHQUNmRSxLQUVBRixFQUFjQyxFQUNkRixFQUFhRCxFQUNUSSxJQUNBQyxHQUFvQixJQVdwQzdmLEVBQU95RCxFQUFRZ2MsR0FBY0QsR0FHakMsU0FBU08sR0FBaUJ0YyxHQUN0QixJQUFJQSxFQUFPeFUsR0FBWCxDQUlBLElBQUlqRSxFQUFJMGYsR0FBcUJqSCxFQUFPcFUsSUFDaEMyd0IsT0FBc0I3d0IsSUFBVm5FLEVBQUVvcUIsSUFBb0JwcUIsRUFBRWtoQixLQUFPbGhCLEVBQUVvcUIsSUFDakQzUixFQUFPK0ssR0FBS3JiLEVBQ1IsQ0FBQ25JLEVBQUVzZ0IsS0FBTXRnQixFQUFFaWhCLE1BQU8rVCxFQUFXaDFCLEVBQUVvMEIsS0FBTXAwQixFQUFFaTFCLE9BQVFqMUIsRUFBRWsxQixPQUFRbDFCLEVBQUVtMUIsY0FDM0QsU0FBVTUxQixHQUNOLE9BQU9BLEdBQU91bkIsU0FBU3ZuQixFQUFLLE9BSXBDc3pCLEdBQWdCcGEsSUFHcEIsU0FBUzJjLEdBQWlCM2MsR0FDdEIsSUFBSW5MLEVBQU0sSUFBSWtMLEVBQU93VyxHQUFjcUcsR0FBYzVjLEtBT2pELE9BTkluTCxFQUFJNmxCLFdBRUo3bEIsRUFBSXliLElBQUksRUFBRyxLQUNYemIsRUFBSTZsQixjQUFXaHZCLEdBR1ptSixFQUdYLFNBQVMrbkIsR0FBYzVjLEdBQ25CLElBQUkvTSxFQUFRK00sRUFBT3BVLEdBQ2Y4USxFQUFTc0QsRUFBT1AsR0FJcEIsT0FGQU8sRUFBT0YsUUFBVUUsRUFBT0YsU0FBV2tXLEdBQVVoVyxFQUFPTixJQUV0QyxPQUFWek0sUUFBOEJ2SCxJQUFYZ1IsR0FBa0MsS0FBVnpKLEVBQ3BDNkwsRUFBYyxDQUFFekIsV0FBVyxLQUdqQixpQkFBVnBLLElBQ1ArTSxFQUFPcFUsR0FBS3FILEVBQVErTSxFQUFPRixRQUFRK2MsU0FBUzVwQixJQUc1Q2lOLEVBQVNqTixHQUNGLElBQUk4TSxFQUFPd1csR0FBY3RqQixLQUN6Qm1KLEVBQU9uSixHQUNkK00sRUFBT3hVLEdBQUt5SCxFQUNMakssRUFBUTBULEdBQ2ZvZixHQUF5QjliLEdBQ2xCdEQsRUFDUHliLEdBQTBCblksR0FFMUI4YyxHQUFnQjljLEdBR2Y3QixFQUFRNkIsS0FDVEEsRUFBT3hVLEdBQUssTUFHVHdVLElBR1gsU0FBUzhjLEdBQWdCOWMsR0FDckIsSUFBSS9NLEVBQVErTSxFQUFPcFUsR0FDZnNRLEVBQVlqSixHQUNaK00sRUFBT3hVLEdBQUssSUFBSTZRLEtBQUtYLEVBQU0wRyxPQUNwQmhHLEVBQU9uSixHQUNkK00sRUFBT3hVLEdBQUssSUFBSTZRLEtBQUtwSixFQUFNdUosV0FDSCxpQkFBVnZKLEVBQ2R3bUIsR0FBaUJ6WixHQUNWaFgsRUFBUWlLLElBQ2YrTSxFQUFPK0ssR0FBS3JiLEVBQUl1RCxFQUFNdEssTUFBTSxJQUFJLFNBQVU3QixHQUN0QyxPQUFPdW5CLFNBQVN2bkIsRUFBSyxPQUV6QnN6QixHQUFnQnBhLElBQ1RwRSxFQUFTM0ksR0FDaEJxcEIsR0FBaUJ0YyxHQUNWN0QsRUFBU2xKLEdBRWhCK00sRUFBT3hVLEdBQUssSUFBSTZRLEtBQUtwSixHQUVyQnlJLEVBQU1nZSx3QkFBd0IxWixHQUl0QyxTQUFTbkQsR0FBaUI1SixFQUFPeUosRUFBUUMsRUFBUUMsRUFBUW1nQixHQUNyRCxJQUFJbkQsRUFBSSxHQTJCUixPQXpCZSxJQUFYbGQsSUFBOEIsSUFBWEEsSUFDbkJFLEVBQVNGLEVBQ1RBLE9BQVNoUixJQUdFLElBQVhpUixJQUE4QixJQUFYQSxJQUNuQkMsRUFBU0QsRUFDVEEsT0FBU2pSLElBSVJrUSxFQUFTM0ksSUFBVStJLEVBQWMvSSxJQUNqQ2pLLEVBQVFpSyxJQUEyQixJQUFqQkEsRUFBTXhMLFVBRXpCd0wsT0FBUXZILEdBSVprdUIsRUFBRXBhLGtCQUFtQixFQUNyQm9hLEVBQUVHLFFBQVVILEVBQUVoYSxPQUFTbWQsRUFDdkJuRCxFQUFFbGEsR0FBSy9DLEVBQ1BpZCxFQUFFaHVCLEdBQUtxSCxFQUNQMm1CLEVBQUVuYSxHQUFLL0MsRUFDUGtkLEVBQUVqYixRQUFVL0IsRUFFTCtmLEdBQWlCL0MsR0FHNUIsU0FBU3NCLEdBQVlqb0IsRUFBT3lKLEVBQVFDLEVBQVFDLEdBQ3hDLE9BQU9DLEdBQWlCNUosRUFBT3lKLEVBQVFDLEVBQVFDLEdBQVEsR0FyZTNEbEIsRUFBTWdlLHdCQUEwQm5aLEVBQzVCLGlTQUdBLFNBQVVQLEdBQ05BLEVBQU94VSxHQUFLLElBQUk2USxLQUFLMkQsRUFBT3BVLElBQU1vVSxFQUFPK1osUUFBVSxPQUFTLFFBdUxwRXJlLEVBQU0wZixTQUFXLGFBR2pCMWYsRUFBTTJmLFNBQVcsYUF5U2pCLElBQUkyQixHQUFlemMsRUFDWCxzR0FDQSxXQUNJLElBQUkwYyxFQUFRL0IsR0FBWXB6QixNQUFNLEtBQU1OLFdBQ3BDLE9BQUlPLEtBQUtvVyxXQUFhOGUsRUFBTTllLFVBQ2pCOGUsRUFBUWwxQixLQUFPQSxLQUFPazFCLEVBRXRCbmUsT0FJbkJvZSxHQUFlM2MsRUFDWCxzR0FDQSxXQUNJLElBQUkwYyxFQUFRL0IsR0FBWXB6QixNQUFNLEtBQU1OLFdBQ3BDLE9BQUlPLEtBQUtvVyxXQUFhOGUsRUFBTTllLFVBQ2pCOGUsRUFBUWwxQixLQUFPQSxLQUFPazFCLEVBRXRCbmUsT0FVdkIsU0FBU3FlLEdBQU83Z0IsRUFBSThnQixHQUNoQixJQUFJdm9CLEVBQUt0TixFQUlULEdBSHVCLElBQW5CNjFCLEVBQVEzMUIsUUFBZ0J1QixFQUFRbzBCLEVBQVEsTUFDeENBLEVBQVVBLEVBQVEsS0FFakJBLEVBQVEzMUIsT0FDVCxPQUFPeXpCLEtBR1gsSUFEQXJtQixFQUFNdW9CLEVBQVEsR0FDVDcxQixFQUFJLEVBQUdBLEVBQUk2MUIsRUFBUTMxQixTQUFVRixFQUN6QjYxQixFQUFRNzFCLEdBQUc0VyxZQUFhaWYsRUFBUTcxQixHQUFHK1UsR0FBSXpILEtBQ3hDQSxFQUFNdW9CLEVBQVE3MUIsSUFHdEIsT0FBT3NOLEVBSVgsU0FBUzBZLEtBR0wsT0FBTzRQLEdBQU8sV0FGSCxHQUFHeDBCLE1BQU1kLEtBQUtMLFVBQVcsSUFLeEMsU0FBU3NiLEtBR0wsT0FBT3FhLEdBQU8sVUFGSCxHQUFHeDBCLE1BQU1kLEtBQUtMLFVBQVcsSUFLeEMsSUFBSTRhLEdBQU0sV0FDTixPQUFPL0YsS0FBSytGLElBQU0vRixLQUFLK0YsT0FBUyxJQUFJL0YsTUFHcENnaEIsR0FBVyxDQUNYLE9BQ0EsVUFDQSxRQUNBLE9BQ0EsTUFDQSxPQUNBLFNBQ0EsU0FDQSxlQUdKLFNBQVNDLEdBQWdCcmYsR0FDckIsSUFBSXRXLEVBRUFKLEVBREFnMkIsR0FBaUIsRUFFckIsSUFBSzUxQixLQUFPc1csRUFDUixHQUNJcEMsRUFBV29DLEVBQUd0VyxNQUV1QixJQUFqQ2tJLEdBQVFoSSxLQUFLdzFCLEdBQVUxMUIsSUFDWixNQUFWc1csRUFBRXRXLElBQWlCNlcsTUFBTVAsRUFBRXRXLEtBR2hDLE9BQU8sRUFJZixJQUFLSixFQUFJLEVBQUdBLEVBQUk4MUIsR0FBUzUxQixTQUFVRixFQUMvQixHQUFJMFcsRUFBRW9mLEdBQVM5MUIsSUFBSyxDQUNoQixHQUFJZzJCLEVBQ0EsT0FBTyxFQUVQQyxXQUFXdmYsRUFBRW9mLEdBQVM5MUIsT0FBUzBnQixHQUFNaEssRUFBRW9mLEdBQVM5MUIsT0FDaERnMkIsR0FBaUIsR0FLN0IsT0FBTyxFQUdYLFNBQVNFLEtBQ0wsT0FBTzExQixLQUFLcVcsU0FHaEIsU0FBU3NmLEtBQ0wsT0FBT0MsR0FBZTVlLEtBRzFCLFNBQVM2ZSxHQUFTQyxHQUNkLElBQUl6VyxFQUFrQkgsR0FBcUI0VyxHQUN2Q0MsRUFBUTFXLEVBQWdCUyxNQUFRLEVBQ2hDa1csRUFBVzNXLEVBQWdCNFcsU0FBVyxFQUN0Q25TLEVBQVN6RSxFQUFnQm9CLE9BQVMsRUFDbEN5VixFQUFRN1csRUFBZ0JrSSxNQUFRbEksRUFBZ0I4VyxTQUFXLEVBQzNEQyxFQUFPL1csRUFBZ0J1SyxLQUFPLEVBQzlCNkIsRUFBUXBNLEVBQWdCdVUsTUFBUSxFQUNoQ2hJLEVBQVV2TSxFQUFnQm9WLFFBQVUsRUFDcEN4SSxFQUFVNU0sRUFBZ0JxVixRQUFVLEVBQ3BDMkIsRUFBZWhYLEVBQWdCc1YsYUFBZSxFQUVsRDMwQixLQUFLcVcsU0FBV2tmLEdBQWdCbFcsR0FHaENyZixLQUFLczJCLGVBQ0FELEVBQ1MsSUFBVnBLLEVBQ1UsSUFBVkwsRUFDUSxJQUFSSCxFQUFlLEdBQUssR0FHeEJ6ckIsS0FBS3UyQixPQUFTSCxFQUFlLEVBQVJGLEVBSXJCbDJCLEtBQUt3a0IsU0FBV1YsRUFBb0IsRUFBWGtTLEVBQXVCLEdBQVJELEVBRXhDLzFCLEtBQUt3MkIsTUFBUSxHQUVieDJCLEtBQUsrWCxRQUFVa1csS0FFZmp1QixLQUFLeTJCLFVBR1QsU0FBU0MsR0FBVzMzQixHQUNoQixPQUFPQSxhQUFlODJCLEdBRzFCLFNBQVNjLEdBQVNsYyxHQUNkLE9BQUlBLEVBQVMsR0FDeUIsRUFBM0IzVSxLQUFLOHdCLE9BQU8sRUFBSW5jLEdBRWhCM1UsS0FBSzh3QixNQUFNbmMsR0FLMUIsU0FBU29jLEdBQWNDLEVBQVFDLEVBQVFDLEdBQ25DLElBR0l4M0IsRUFIQVcsRUFBTTJGLEtBQUswZixJQUFJc1IsRUFBT3AzQixPQUFRcTNCLEVBQU9yM0IsUUFDckN1M0IsRUFBYW54QixLQUFLQyxJQUFJK3dCLEVBQU9wM0IsT0FBU3EzQixFQUFPcjNCLFFBQzdDdzNCLEVBQVEsRUFFWixJQUFLMTNCLEVBQUksRUFBR0EsRUFBSVcsRUFBS1gsS0FFWnczQixHQUFlRixFQUFPdDNCLEtBQU91M0IsRUFBT3YzQixLQUNuQ3czQixHQUFlOVcsR0FBTTRXLEVBQU90M0IsTUFBUTBnQixHQUFNNlcsRUFBT3YzQixNQUVuRDAzQixJQUdSLE9BQU9BLEVBQVFELEVBS25CLFNBQVNFLEdBQU83YixFQUFPOGIsR0FDbkIvYixFQUFlQyxFQUFPLEVBQUcsR0FBRyxXQUN4QixJQUFJNmIsRUFBU24zQixLQUFLcTNCLFlBQ2RDLEVBQU8sSUFLWCxPQUpJSCxFQUFTLElBQ1RBLEdBQVVBLEVBQ1ZHLEVBQU8sS0FHUEEsRUFDQTljLEtBQVkyYyxFQUFTLElBQUssR0FDMUJDLEVBQ0E1YyxJQUFXMmMsRUFBUyxHQUFJLE1BS3BDQSxHQUFPLElBQUssS0FDWkEsR0FBTyxLQUFNLElBSWJsVixHQUFjLElBQUtILElBQ25CRyxHQUFjLEtBQU1ILElBQ3BCYyxHQUFjLENBQUMsSUFBSyxPQUFPLFNBQVUxWCxFQUFPMlEsRUFBTzVELEdBQy9DQSxFQUFPK1osU0FBVSxFQUNqQi9aLEVBQU9MLEtBQU8yZixHQUFpQnpWLEdBQWtCNVcsTUFRckQsSUFBSXNzQixHQUFjLGtCQUVsQixTQUFTRCxHQUFpQkUsRUFBU25aLEdBQy9CLElBRUlqVCxFQUNBdWdCLEVBSEE4TCxHQUFXcFosR0FBVSxJQUFJOVcsTUFBTWl3QixHQUtuQyxPQUFnQixPQUFaQyxFQUNPLEtBT1EsS0FGbkI5TCxFQUF1QixJQUR2QnZnQixJQURRcXNCLEVBQVFBLEVBQVFoNEIsT0FBUyxJQUFNLElBQ3RCLElBQUk4SCxNQUFNZ3dCLEtBQWdCLENBQUMsSUFBSyxFQUFHLElBQ2xDLEdBQVd0WCxHQUFNN1UsRUFBTSxLQUVsQixFQUFpQixNQUFiQSxFQUFNLEdBQWF1Z0IsR0FBV0EsRUFJN0QsU0FBUytMLEdBQWdCenNCLEVBQU8wc0IsR0FDNUIsSUFBSTlxQixFQUFLNFIsRUFDVCxPQUFJa1osRUFBTS9mLFFBQ04vSyxFQUFNOHFCLEVBQU1DLFFBQ1puWixHQUNLdkcsRUFBU2pOLElBQVVtSixFQUFPbkosR0FDckJBLEVBQU11SixVQUNOMGUsR0FBWWpvQixHQUFPdUosV0FBYTNILEVBQUkySCxVQUU5QzNILEVBQUlySixHQUFHcTBCLFFBQVFockIsRUFBSXJKLEdBQUdnUixVQUFZaUssR0FDbEMvSyxFQUFNdUUsYUFBYXBMLEdBQUssR0FDakJBLEdBRUFxbUIsR0FBWWpvQixHQUFPNnNCLFFBSWxDLFNBQVNDLEdBQWM5aEIsR0FHbkIsT0FBUXBRLEtBQUs4d0IsTUFBTTFnQixFQUFFelMsR0FBR3cwQixxQkFxQjVCLFNBQVNDLEdBQWFodEIsRUFBT2l0QixFQUFlQyxHQUN4QyxJQUNJQyxFQURBbEIsRUFBU24zQixLQUFLOFgsU0FBVyxFQUU3QixJQUFLOVgsS0FBS29XLFVBQ04sT0FBZ0IsTUFBVGxMLEVBQWdCbEwsS0FBT2dYLElBRWxDLEdBQWEsTUFBVDlMLEVBQWUsQ0FDZixHQUFxQixpQkFBVkEsR0FFUCxHQUFjLFFBRGRBLEVBQVFxc0IsR0FBaUJ6VixHQUFrQjVXLElBRXZDLE9BQU9sTCxVQUVKOEYsS0FBS0MsSUFBSW1GLEdBQVMsS0FBT2t0QixJQUNoQ2x0QixHQUFnQixJQXdCcEIsT0F0QktsTCxLQUFLNlgsUUFBVXNnQixJQUNoQkUsRUFBY0wsR0FBY2g0QixPQUVoQ0EsS0FBSzhYLFFBQVU1TSxFQUNmbEwsS0FBSzZYLFFBQVMsRUFDSyxNQUFmd2dCLEdBQ0FyNEIsS0FBS3VvQixJQUFJOFAsRUFBYSxLQUV0QmxCLElBQVdqc0IsS0FDTml0QixHQUFpQm40QixLQUFLczRCLGtCQUN2QkMsR0FDSXY0QixLQUNBNDFCLEdBQWUxcUIsRUFBUWlzQixFQUFRLEtBQy9CLEdBQ0EsR0FFSW4zQixLQUFLczRCLG9CQUNidDRCLEtBQUtzNEIsbUJBQW9CLEVBQ3pCM2tCLEVBQU11RSxhQUFhbFksTUFBTSxHQUN6QkEsS0FBS3M0QixrQkFBb0IsT0FHMUJ0NEIsS0FFUCxPQUFPQSxLQUFLNlgsT0FBU3NmLEVBQVNhLEdBQWNoNEIsTUFJcEQsU0FBU3c0QixHQUFXdHRCLEVBQU9pdEIsR0FDdkIsT0FBYSxNQUFUanRCLEdBQ3FCLGlCQUFWQSxJQUNQQSxHQUFTQSxHQUdibEwsS0FBS3EzQixVQUFVbnNCLEVBQU9pdEIsR0FFZm40QixPQUVDQSxLQUFLcTNCLFlBSXJCLFNBQVNvQixHQUFlTixHQUNwQixPQUFPbjRCLEtBQUtxM0IsVUFBVSxFQUFHYyxHQUc3QixTQUFTTyxHQUFpQlAsR0FTdEIsT0FSSW40QixLQUFLNlgsU0FDTDdYLEtBQUtxM0IsVUFBVSxFQUFHYyxHQUNsQm40QixLQUFLNlgsUUFBUyxFQUVWc2dCLEdBQ0FuNEIsS0FBSzI0QixTQUFTWCxHQUFjaDRCLE1BQU8sTUFHcENBLEtBR1gsU0FBUzQ0QixLQUNMLEdBQWlCLE1BQWI1NEIsS0FBSzRYLEtBQ0w1WCxLQUFLcTNCLFVBQVVyM0IsS0FBSzRYLE1BQU0sR0FBTyxRQUM5QixHQUF1QixpQkFBWjVYLEtBQUs2RCxHQUFpQixDQUNwQyxJQUFJZzFCLEVBQVF0QixHQUFpQjFWLEdBQWE3aEIsS0FBSzZELElBQ2xDLE1BQVRnMUIsRUFDQTc0QixLQUFLcTNCLFVBQVV3QixHQUVmNzRCLEtBQUtxM0IsVUFBVSxHQUFHLEdBRzFCLE9BQU9yM0IsS0FHWCxTQUFTODRCLEdBQXFCNXRCLEdBQzFCLFFBQUtsTCxLQUFLb1csWUFHVmxMLEVBQVFBLEVBQVFpb0IsR0FBWWpvQixHQUFPbXNCLFlBQWMsR0FFekNyM0IsS0FBS3EzQixZQUFjbnNCLEdBQVMsSUFBTyxHQUcvQyxTQUFTNnRCLEtBQ0wsT0FDSS80QixLQUFLcTNCLFlBQWNyM0IsS0FBSzYzQixRQUFRcFgsTUFBTSxHQUFHNFcsYUFDekNyM0IsS0FBS3EzQixZQUFjcjNCLEtBQUs2M0IsUUFBUXBYLE1BQU0sR0FBRzRXLFlBSWpELFNBQVMyQixLQUNMLElBQUs3a0IsRUFBWW5VLEtBQUtpNUIsZUFDbEIsT0FBT2o1QixLQUFLaTVCLGNBR2hCLElBQ0kvRCxFQURBckQsRUFBSSxHQWNSLE9BWEF4YSxFQUFXd2EsRUFBRzd4QixPQUNkNnhCLEVBQUlnRCxHQUFjaEQsSUFFWjdPLElBQ0ZrUyxFQUFRckQsRUFBRWhhLE9BQVNuRCxFQUFVbWQsRUFBRTdPLElBQU1tUSxHQUFZdEIsRUFBRTdPLElBQ25EaGpCLEtBQUtpNUIsY0FDRGo1QixLQUFLb1csV0FBYXlnQixHQUFjaEYsRUFBRTdPLEdBQUlrUyxFQUFNZ0UsV0FBYSxHQUU3RGw1QixLQUFLaTVCLGVBQWdCLEVBR2xCajVCLEtBQUtpNUIsY0FHaEIsU0FBU0UsS0FDTCxRQUFPbjVCLEtBQUtvVyxZQUFhcFcsS0FBSzZYLE9BR2xDLFNBQVN1aEIsS0FDTCxRQUFPcDVCLEtBQUtvVyxXQUFZcFcsS0FBSzZYLE9BR2pDLFNBQVN3aEIsS0FDTCxRQUFPcjVCLEtBQUtvVyxXQUFZcFcsS0FBSzZYLFFBQTJCLElBQWpCN1gsS0FBSzhYLFFBcEpoRG5FLEVBQU11RSxhQUFlLGFBd0pyQixJQUFJb2hCLEdBQWMsd0RBSWRDLEdBQVcsc0tBRWYsU0FBUzNELEdBQWUxcUIsRUFBT3RMLEdBQzNCLElBR0kwM0IsRUFDQWtDLEVBQ0FDLEVBTEEzRCxFQUFXNXFCLEVBRVgxRCxFQUFRLEtBa0VaLE9BN0RJa3ZCLEdBQVd4ckIsR0FDWDRxQixFQUFXLENBQ1BwUCxHQUFJeGIsRUFBTW9yQixjQUNWMVksRUFBRzFTLEVBQU1xckIsTUFDVHZZLEVBQUc5UyxFQUFNc1osU0FFTnBRLEVBQVNsSixLQUFXdUwsT0FBT3ZMLElBQ2xDNHFCLEVBQVcsR0FDUGwyQixFQUNBazJCLEVBQVNsMkIsSUFBUXNMLEVBRWpCNHFCLEVBQVNPLGNBQWdCbnJCLElBRXJCMUQsRUFBUTh4QixHQUFZbkosS0FBS2psQixLQUNqQ29zQixFQUFvQixNQUFiOXZCLEVBQU0sSUFBYyxFQUFJLEVBQy9Cc3VCLEVBQVcsQ0FDUDVYLEVBQUcsRUFDSE4sRUFBR3NDLEdBQU0xWSxFQUFNMmIsS0FBU21VLEVBQ3hCNVosRUFBR3dDLEdBQU0xWSxFQUFNNGIsS0FBU2tVLEVBQ3hCcGhCLEVBQUdnSyxHQUFNMVksRUFBTTZiLEtBQVdpVSxFQUMxQi9aLEVBQUcyQyxHQUFNMVksRUFBTThiLEtBQVdnVSxFQUMxQjVRLEdBQUl4RyxHQUFNeVcsR0FBOEIsSUFBckJudkIsRUFBTStiLE1BQXdCK1QsS0FFN0M5dkIsRUFBUSt4QixHQUFTcEosS0FBS2psQixLQUM5Qm9zQixFQUFvQixNQUFiOXZCLEVBQU0sSUFBYyxFQUFJLEVBQy9Cc3VCLEVBQVcsQ0FDUDVYLEVBQUd3YixHQUFTbHlCLEVBQU0sR0FBSTh2QixHQUN0QnRaLEVBQUcwYixHQUFTbHlCLEVBQU0sR0FBSTh2QixHQUN0QnhaLEVBQUc0YixHQUFTbHlCLEVBQU0sR0FBSTh2QixHQUN0QjFaLEVBQUc4YixHQUFTbHlCLEVBQU0sR0FBSTh2QixHQUN0QjVaLEVBQUdnYyxHQUFTbHlCLEVBQU0sR0FBSTh2QixHQUN0QnBoQixFQUFHd2pCLEdBQVNseUIsRUFBTSxHQUFJOHZCLEdBQ3RCL1osRUFBR21jLEdBQVNseUIsRUFBTSxHQUFJOHZCLEtBRVAsTUFBWnhCLEVBRVBBLEVBQVcsR0FFUyxpQkFBYkEsSUFDTixTQUFVQSxHQUFZLE9BQVFBLEtBRS9CMkQsRUFBVUUsR0FDTnhHLEdBQVkyQyxFQUFTaDFCLE1BQ3JCcXlCLEdBQVkyQyxFQUFTeGUsTUFHekJ3ZSxFQUFXLElBQ0ZwUCxHQUFLK1MsRUFBUXBELGFBQ3RCUCxFQUFTOVgsRUFBSXliLEVBQVEzVixRQUd6QjBWLEVBQU0sSUFBSTNELEdBQVNDLEdBRWZZLEdBQVd4ckIsSUFBVTRJLEVBQVc1SSxFQUFPLGFBQ3ZDc3VCLEVBQUl6aEIsUUFBVTdNLEVBQU02TSxTQUdwQjJlLEdBQVd4ckIsSUFBVTRJLEVBQVc1SSxFQUFPLGNBQ3ZDc3VCLEVBQUluakIsU0FBV25MLEVBQU1tTCxVQUdsQm1qQixFQU1YLFNBQVNFLEdBQVNFLEVBQUt0QyxHQUluQixJQUFJeHFCLEVBQU04c0IsR0FBT25FLFdBQVdtRSxFQUFJL3ZCLFFBQVEsSUFBSyxNQUU3QyxPQUFRNE0sTUFBTTNKLEdBQU8sRUFBSUEsR0FBT3dxQixFQUdwQyxTQUFTdUMsR0FBMEJDLEVBQU01RSxHQUNyQyxJQUFJcG9CLEVBQU0sR0FVVixPQVJBQSxFQUFJZ1gsT0FDQW9SLEVBQU16VSxRQUFVcVosRUFBS3JaLFFBQXlDLElBQTlCeVUsRUFBTXBWLE9BQVNnYSxFQUFLaGEsUUFDcERnYSxFQUFLakMsUUFBUXRQLElBQUl6YixFQUFJZ1gsT0FBUSxLQUFLaVcsUUFBUTdFLE1BQ3hDcG9CLEVBQUlnWCxPQUdWaFgsRUFBSXVwQixjQUFnQm5CLEdBQVM0RSxFQUFLakMsUUFBUXRQLElBQUl6YixFQUFJZ1gsT0FBUSxLQUVuRGhYLEVBR1gsU0FBUzZzQixHQUFrQkcsRUFBTTVFLEdBQzdCLElBQUlwb0IsRUFDSixPQUFNZ3RCLEVBQUsxakIsV0FBYThlLEVBQU05ZSxXQUk5QjhlLEVBQVF5QyxHQUFnQnpDLEVBQU80RSxHQUMzQkEsRUFBS0UsU0FBUzlFLEdBQ2Rwb0IsRUFBTStzQixHQUEwQkMsRUFBTTVFLEtBRXRDcG9CLEVBQU0rc0IsR0FBMEIzRSxFQUFPNEUsSUFDbkN6RCxjQUFnQnZwQixFQUFJdXBCLGFBQ3hCdnBCLEVBQUlnWCxRQUFVaFgsRUFBSWdYLFFBR2ZoWCxHQVpJLENBQUV1cEIsYUFBYyxFQUFHdlMsT0FBUSxHQWdCMUMsU0FBU21XLEdBQVlDLEVBQVdyNUIsR0FDNUIsT0FBTyxTQUFVMlcsRUFBSzJpQixHQUNsQixJQUFTQyxFQW1CVCxPQWpCZSxPQUFYRCxHQUFvQjFqQixPQUFPMGpCLEtBQzNCbmhCLEVBQ0luWSxFQUNBLFlBQ0lBLEVBQ0EsdURBQ0FBLEVBSEosa0dBT0p1NUIsRUFBTTVpQixFQUNOQSxFQUFNMmlCLEVBQ05BLEVBQVNDLEdBSWI3QixHQUFZdjRCLEtBRE40MUIsR0FBZXBlLEVBQUsyaUIsR0FDSEQsR0FDaEJsNkIsTUFJZixTQUFTdTRCLEdBQVluZSxFQUFLMGIsRUFBVXVFLEVBQVVuaUIsR0FDMUMsSUFBSW1lLEVBQWVQLEVBQVNRLGNBQ3hCRixFQUFPTyxHQUFTYixFQUFTUyxPQUN6QnpTLEVBQVM2UyxHQUFTYixFQUFTdFIsU0FFMUJwSyxFQUFJaEUsWUFLVDhCLEVBQStCLE1BQWhCQSxHQUE4QkEsRUFFekM0TCxHQUNBd0IsR0FBU2xMLEVBQUs1TyxHQUFJNE8sRUFBSyxTQUFXMEosRUFBU3VXLEdBRTNDakUsR0FDQTVWLEdBQU1wRyxFQUFLLE9BQVE1TyxHQUFJNE8sRUFBSyxRQUFVZ2MsRUFBT2lFLEdBRTdDaEUsR0FDQWpjLEVBQUkzVyxHQUFHcTBCLFFBQVExZCxFQUFJM1csR0FBR2dSLFVBQVk0aEIsRUFBZWdFLEdBRWpEbmlCLEdBQ0F2RSxFQUFNdUUsYUFBYWtDLEVBQUtnYyxHQUFRdFMsSUE1RnhDOFIsR0FBZXJoQixHQUFLc2hCLEdBQVMxMkIsVUFDN0J5MkIsR0FBZTBFLFFBQVUzRSxHQStGekIsSUFBSXBOLEdBQU0wUixHQUFZLEVBQUcsT0FDckJ0QixHQUFXc0IsSUFBYSxFQUFHLFlBRS9CLFNBQVM3ekIsR0FBUzhFLEdBQ2QsTUFBd0IsaUJBQVZBLEdBQXNCQSxhQUFpQnF2QixPQUl6RCxTQUFTQyxHQUFjdHZCLEdBQ25CLE9BQ0lpTixFQUFTak4sSUFDVG1KLEVBQU9uSixJQUNQOUUsR0FBUzhFLElBQ1RrSixFQUFTbEosSUFDVHV2QixHQUFzQnZ2QixJQUN0Qnd2QixHQUFvQnh2QixVQUNwQkEsRUFLUixTQUFTd3ZCLEdBQW9CeHZCLEdBQ3pCLElBNEJJMUwsRUFDQW03QixFQTdCQUMsRUFBYS9tQixFQUFTM0ksS0FBVytJLEVBQWMvSSxHQUMvQzJ2QixHQUFlLEVBQ2ZsMkIsRUFBYSxDQUNULFFBQ0EsT0FDQSxJQUNBLFNBQ0EsUUFDQSxJQUNBLE9BQ0EsTUFDQSxJQUNBLFFBQ0EsT0FDQSxJQUNBLFFBQ0EsT0FDQSxJQUNBLFVBQ0EsU0FDQSxJQUNBLFVBQ0EsU0FDQSxJQUNBLGVBQ0EsY0FDQSxNQUtSLElBQUtuRixFQUFJLEVBQUdBLEVBQUltRixFQUFXakYsT0FBUUYsR0FBSyxFQUNwQ203QixFQUFXaDJCLEVBQVduRixHQUN0QnE3QixFQUFlQSxHQUFnQi9tQixFQUFXNUksRUFBT3l2QixHQUdyRCxPQUFPQyxHQUFjQyxFQUd6QixTQUFTSixHQUFzQnZ2QixHQUMzQixJQUFJNHZCLEVBQVk3NUIsRUFBUWlLLEdBQ3BCNnZCLEdBQWUsRUFPbkIsT0FOSUQsSUFDQUMsRUFHa0IsSUFGZDd2QixFQUFNdEQsUUFBTyxTQUFVMEMsR0FDbkIsT0FBUThKLEVBQVM5SixJQUFTbEUsR0FBUzhFLE1BQ3BDeEwsUUFFSm83QixHQUFhQyxFQUd4QixTQUFTQyxHQUFlOXZCLEdBQ3BCLElBVUkxTCxFQUNBbTdCLEVBWEFDLEVBQWEvbUIsRUFBUzNJLEtBQVcrSSxFQUFjL0ksR0FDL0MydkIsR0FBZSxFQUNmbDJCLEVBQWEsQ0FDVCxVQUNBLFVBQ0EsVUFDQSxXQUNBLFdBQ0EsWUFLUixJQUFLbkYsRUFBSSxFQUFHQSxFQUFJbUYsRUFBV2pGLE9BQVFGLEdBQUssRUFDcENtN0IsRUFBV2gyQixFQUFXbkYsR0FDdEJxN0IsRUFBZUEsR0FBZ0IvbUIsRUFBVzVJLEVBQU95dkIsR0FHckQsT0FBT0MsR0FBY0MsRUFHekIsU0FBU0ksR0FBa0JDLEVBQVU3Z0IsR0FDakMsSUFBSXFFLEVBQU93YyxFQUFTeGMsS0FBS3JFLEVBQUssUUFBUSxHQUN0QyxPQUFPcUUsR0FBUSxFQUNULFdBQ0FBLEdBQVEsRUFDUixXQUNBQSxFQUFPLEVBQ1AsVUFDQUEsRUFBTyxFQUNQLFVBQ0FBLEVBQU8sRUFDUCxVQUNBQSxFQUFPLEVBQ1AsV0FDQSxXQUdWLFNBQVN5YyxHQUFXQyxFQUFNQyxHQUVHLElBQXJCNTdCLFVBQVVDLFNBQ0xELFVBQVUsR0FHSis2QixHQUFjLzZCLFVBQVUsS0FDL0IyN0IsRUFBTzM3QixVQUFVLEdBQ2pCNDdCLE9BQVUxM0IsR0FDSHEzQixHQUFldjdCLFVBQVUsTUFDaEM0N0IsRUFBVTU3QixVQUFVLEdBQ3BCMjdCLE9BQU96M0IsSUFQUHkzQixPQUFPejNCLEVBQ1AwM0IsT0FBVTEzQixJQVdsQixJQUFJMFcsRUFBTStnQixHQUFRakksS0FDZG1JLEVBQU0zRCxHQUFnQnRkLEVBQUtyYSxNQUFNdTdCLFFBQVEsT0FDekM1bUIsRUFBU2hCLEVBQU02bkIsZUFBZXg3QixLQUFNczdCLElBQVEsV0FDNUNoaEIsRUFDSStnQixJQUNDcGlCLEVBQVdvaUIsRUFBUTFtQixJQUNkMG1CLEVBQVExbUIsR0FBUTdVLEtBQUtFLEtBQU1xYSxHQUMzQmdoQixFQUFRMW1CLElBRXRCLE9BQU8zVSxLQUFLMlUsT0FDUjJGLEdBQVV0YSxLQUFLMGIsYUFBYXZCLFNBQVN4RixFQUFRM1UsS0FBTW16QixHQUFZOVksS0FJdkUsU0FBU3dkLEtBQ0wsT0FBTyxJQUFJN2YsRUFBT2hZLE1BR3RCLFNBQVMrNUIsR0FBUTd1QixFQUFPK1QsR0FDcEIsSUFBSXdjLEVBQWF0akIsRUFBU2pOLEdBQVNBLEVBQVFpb0IsR0FBWWpvQixHQUN2RCxTQUFNbEwsS0FBS29XLFlBQWFxbEIsRUFBV3JsQixhQUlyQixpQkFEZDZJLEVBQVFELEdBQWVDLElBQVUsZUFFdEJqZixLQUFLeVUsVUFBWWduQixFQUFXaG5CLFVBRTVCZ25CLEVBQVdobkIsVUFBWXpVLEtBQUs2M0IsUUFBUTBELFFBQVF0YyxHQUFPeEssV0FJbEUsU0FBU3VsQixHQUFTOXVCLEVBQU8rVCxHQUNyQixJQUFJd2MsRUFBYXRqQixFQUFTak4sR0FBU0EsRUFBUWlvQixHQUFZam9CLEdBQ3ZELFNBQU1sTCxLQUFLb1csWUFBYXFsQixFQUFXcmxCLGFBSXJCLGlCQURkNkksRUFBUUQsR0FBZUMsSUFBVSxlQUV0QmpmLEtBQUt5VSxVQUFZZ25CLEVBQVdobkIsVUFFNUJ6VSxLQUFLNjNCLFFBQVE2RCxNQUFNemMsR0FBT3hLLFVBQVlnbkIsRUFBV2huQixXQUloRSxTQUFTa25CLEdBQVU3NkIsRUFBTXdXLEVBQUkySCxFQUFPMmMsR0FDaEMsSUFBSUMsRUFBWTFqQixFQUFTclgsR0FBUUEsRUFBT3F5QixHQUFZcnlCLEdBQ2hEZzdCLEVBQVUzakIsRUFBU2IsR0FBTUEsRUFBSzZiLEdBQVk3YixHQUM5QyxTQUFNdFgsS0FBS29XLFdBQWF5bEIsRUFBVXpsQixXQUFhMGxCLEVBQVExbEIsYUFLL0IsT0FGeEJ3bEIsRUFBY0EsR0FBZSxNQUVaLEdBQ1A1N0IsS0FBSys1QixRQUFROEIsRUFBVzVjLElBQ3ZCamYsS0FBS2c2QixTQUFTNkIsRUFBVzVjLE1BQ1osTUFBbkIyYyxFQUFZLEdBQ1A1N0IsS0FBS2c2QixTQUFTOEIsRUFBUzdjLElBQ3RCamYsS0FBSys1QixRQUFRK0IsRUFBUzdjLElBSXJDLFNBQVM4YyxHQUFPN3dCLEVBQU8rVCxHQUNuQixJQUNJK2MsRUFEQVAsRUFBYXRqQixFQUFTak4sR0FBU0EsRUFBUWlvQixHQUFZam9CLEdBRXZELFNBQU1sTCxLQUFLb1csWUFBYXFsQixFQUFXcmxCLGFBSXJCLGlCQURkNkksRUFBUUQsR0FBZUMsSUFBVSxlQUV0QmpmLEtBQUt5VSxZQUFjZ25CLEVBQVdobkIsV0FFckN1bkIsRUFBVVAsRUFBV2huQixVQUVqQnpVLEtBQUs2M0IsUUFBUTBELFFBQVF0YyxHQUFPeEssV0FBYXVuQixHQUN6Q0EsR0FBV2g4QixLQUFLNjNCLFFBQVE2RCxNQUFNemMsR0FBT3hLLFlBS2pELFNBQVN3bkIsR0FBYy93QixFQUFPK1QsR0FDMUIsT0FBT2pmLEtBQUsrN0IsT0FBTzd3QixFQUFPK1QsSUFBVWpmLEtBQUsrNUIsUUFBUTd1QixFQUFPK1QsR0FHNUQsU0FBU2lkLEdBQWVoeEIsRUFBTytULEdBQzNCLE9BQU9qZixLQUFLKzdCLE9BQU83d0IsRUFBTytULElBQVVqZixLQUFLZzZCLFNBQVM5dUIsRUFBTytULEdBRzdELFNBQVNQLEdBQUt4VCxFQUFPK1QsRUFBT2tkLEdBQ3hCLElBQUlDLEVBQU1DLEVBQVcvaEIsRUFFckIsSUFBS3RhLEtBQUtvVyxVQUNOLE9BQU9ZLElBS1gsS0FGQW9sQixFQUFPekUsR0FBZ0J6c0IsRUFBT2xMLE9BRXBCb1csVUFDTixPQUFPWSxJQU9YLE9BSkFxbEIsRUFBb0QsS0FBdkNELEVBQUsvRSxZQUFjcjNCLEtBQUtxM0IsYUFFckNwWSxFQUFRRCxHQUFlQyxJQUduQixJQUFLLE9BQ0QzRSxFQUFTZ2lCLEdBQVV0OEIsS0FBTW84QixHQUFRLEdBQ2pDLE1BQ0osSUFBSyxRQUNEOWhCLEVBQVNnaUIsR0FBVXQ4QixLQUFNbzhCLEdBQ3pCLE1BQ0osSUFBSyxVQUNEOWhCLEVBQVNnaUIsR0FBVXQ4QixLQUFNbzhCLEdBQVEsRUFDakMsTUFDSixJQUFLLFNBQ0Q5aEIsR0FBVXRhLEtBQU9vOEIsR0FBUSxJQUN6QixNQUNKLElBQUssU0FDRDloQixHQUFVdGEsS0FBT284QixHQUFRLElBQ3pCLE1BQ0osSUFBSyxPQUNEOWhCLEdBQVV0YSxLQUFPbzhCLEdBQVEsS0FDekIsTUFDSixJQUFLLE1BQ0Q5aEIsR0FBVXRhLEtBQU9vOEIsRUFBT0MsR0FBYSxNQUNyQyxNQUNKLElBQUssT0FDRC9oQixHQUFVdGEsS0FBT284QixFQUFPQyxHQUFhLE9BQ3JDLE1BQ0osUUFDSS9oQixFQUFTdGEsS0FBT284QixFQUd4QixPQUFPRCxFQUFVN2hCLEVBQVN5RixHQUFTekYsR0FHdkMsU0FBU2dpQixHQUFVdm9CLEVBQUdDLEdBQ2xCLEdBQUlELEVBQUUyTSxPQUFTMU0sRUFBRTBNLE9BR2IsT0FBUTRiLEdBQVV0b0IsRUFBR0QsR0FHekIsSUFBSXdvQixFQUF5QyxJQUF2QnZvQixFQUFFOEwsT0FBUy9MLEVBQUUrTCxTQUFnQjlMLEVBQUV5TSxRQUFVMU0sRUFBRTBNLFNBRTdEK2IsRUFBU3pvQixFQUFFOGpCLFFBQVF0UCxJQUFJZ1UsRUFBZ0IsVUFlM0MsUUFBU0EsR0FYTHZvQixFQUFJd29CLEVBQVMsR0FHSHhvQixFQUFJd29CLElBQVdBLEVBRmZ6b0IsRUFBRThqQixRQUFRdFAsSUFBSWdVLEVBQWlCLEVBQUcsWUFNbEN2b0IsRUFBSXdvQixJQUZKem9CLEVBQUU4akIsUUFBUXRQLElBQUlnVSxFQUFpQixFQUFHLFVBRVRDLE1BSUYsRUFNekMsU0FBUzc3QixLQUNMLE9BQU9YLEtBQUs2M0IsUUFBUWpqQixPQUFPLE1BQU1ELE9BQU8sb0NBRzVDLFNBQVM4bkIsR0FBWUMsR0FDakIsSUFBSzE4QixLQUFLb1csVUFDTixPQUFPLEtBRVgsSUFBSXJCLEdBQXFCLElBQWYybkIsRUFDTnhtQixFQUFJbkIsRUFBTS9VLEtBQUs2M0IsUUFBUTlpQixNQUFRL1UsS0FDbkMsT0FBSWtXLEVBQUU0SixPQUFTLEdBQUs1SixFQUFFNEosT0FBUyxLQUNwQmhFLEVBQ0g1RixFQUNBbkIsRUFDTSxpQ0FDQSxnQ0FHVmtFLEVBQVczRSxLQUFLblYsVUFBVXM5QixhQUV0QjFuQixFQUNPL1UsS0FBSzI4QixTQUFTRixjQUVkLElBQUlub0IsS0FBS3RVLEtBQUt5VSxVQUErQixHQUFuQnpVLEtBQUtxM0IsWUFBbUIsS0FDcERvRixjQUNBNXlCLFFBQVEsSUFBS2lTLEVBQWE1RixFQUFHLE1BR25DNEYsRUFDSDVGLEVBQ0FuQixFQUFNLCtCQUFpQyw4QkFVL0MsU0FBUzZuQixLQUNMLElBQUs1OEIsS0FBS29XLFVBQ04sTUFBTyxxQkFBdUJwVyxLQUFLNkQsR0FBSyxPQUU1QyxJQUVJZ0ksRUFDQWlVLEVBQ0ErYyxFQUNBQyxFQUxBcmhCLEVBQU8sU0FDUHNoQixFQUFPLEdBY1gsT0FUSy84QixLQUFLbTVCLFlBQ04xZCxFQUE0QixJQUFyQnpiLEtBQUtxM0IsWUFBb0IsYUFBZSxtQkFDL0MwRixFQUFPLEtBRVhseEIsRUFBUyxJQUFNNFAsRUFBTyxNQUN0QnFFLEVBQU8sR0FBSzlmLEtBQUs4ZixRQUFVOWYsS0FBSzhmLFFBQVUsS0FBTyxPQUFTLFNBQzFEK2MsRUFBVyx3QkFDWEMsRUFBU0MsRUFBTyxPQUVULzhCLEtBQUsyVSxPQUFPOUksRUFBU2lVLEVBQU8rYyxFQUFXQyxHQUdsRCxTQUFTbm9CLEdBQU9xb0IsR0FDUEEsSUFDREEsRUFBY2g5QixLQUFLcTVCLFFBQ2IxbEIsRUFBTXNwQixpQkFDTnRwQixFQUFNdXBCLGVBRWhCLElBQUk1aUIsRUFBU3dCLEVBQWE5YixLQUFNZzlCLEdBQ2hDLE9BQU9oOUIsS0FBSzBiLGFBQWF5aEIsV0FBVzdpQixHQUd4QyxTQUFTeFosR0FBS3M2QixFQUFNL2MsR0FDaEIsT0FDSXJlLEtBQUtvVyxZQUNIK0IsRUFBU2lqQixJQUFTQSxFQUFLaGxCLFdBQWMrYyxHQUFZaUksR0FBTWhsQixXQUVsRHdmLEdBQWUsQ0FBRXRlLEdBQUl0WCxLQUFNYyxLQUFNczZCLElBQ25DeG1CLE9BQU81VSxLQUFLNFUsVUFDWndvQixVQUFVL2UsR0FFUnJlLEtBQUswYixhQUFhTSxjQUlqQyxTQUFTcWhCLEdBQVFoZixHQUNiLE9BQU9yZSxLQUFLYyxLQUFLcXlCLEtBQWU5VSxHQUdwQyxTQUFTL0csR0FBRzhqQixFQUFNL2MsR0FDZCxPQUNJcmUsS0FBS29XLFlBQ0grQixFQUFTaWpCLElBQVNBLEVBQUtobEIsV0FBYytjLEdBQVlpSSxHQUFNaGxCLFdBRWxEd2YsR0FBZSxDQUFFOTBCLEtBQU1kLEtBQU1zWCxHQUFJOGpCLElBQ25DeG1CLE9BQU81VSxLQUFLNFUsVUFDWndvQixVQUFVL2UsR0FFUnJlLEtBQUswYixhQUFhTSxjQUlqQyxTQUFTc2hCLEdBQU1qZixHQUNYLE9BQU9yZSxLQUFLc1gsR0FBRzZiLEtBQWU5VSxHQU1sQyxTQUFTekosR0FBT2hWLEdBQ1osSUFBSTI5QixFQUVKLFlBQVk1NUIsSUFBUi9ELEVBQ09JLEtBQUsrWCxRQUFROFYsT0FHQyxPQURyQjBQLEVBQWdCdFAsR0FBVXJ1QixNQUV0QkksS0FBSytYLFFBQVV3bEIsR0FFWnY5QixNQTFIZjJULEVBQU11cEIsY0FBZ0IsdUJBQ3RCdnBCLEVBQU1zcEIsaUJBQW1CLHlCQTZIekIsSUFBSTl2QixHQUFPcUwsRUFDUCxtSkFDQSxTQUFVNVksR0FDTixZQUFZK0QsSUFBUi9ELEVBQ09JLEtBQUswYixhQUVMMWIsS0FBSzRVLE9BQU9oVixNQUsvQixTQUFTOGIsS0FDTCxPQUFPMWIsS0FBSytYLFFBR2hCLElBQUl5bEIsR0FBZ0IsSUFDaEJDLEdBQWdCLEdBQUtELEdBQ3JCRSxHQUFjLEdBQUtELEdBQ25CRSxHQUFtQixRQUF3QkQsR0FHL0MsU0FBU0UsR0FBTUMsRUFBVUMsR0FDckIsT0FBU0QsRUFBV0MsRUFBV0EsR0FBV0EsRUFHOUMsU0FBU0MsR0FBaUI3ZixFQUFHaEksRUFBRzBILEdBRTVCLE9BQUlNLEVBQUksS0FBT0EsR0FBSyxFQUVULElBQUk1SixLQUFLNEosRUFBSSxJQUFLaEksRUFBRzBILEdBQUsrZixHQUUxQixJQUFJcnBCLEtBQUs0SixFQUFHaEksRUFBRzBILEdBQUduSixVQUlqQyxTQUFTdXBCLEdBQWU5ZixFQUFHaEksRUFBRzBILEdBRTFCLE9BQUlNLEVBQUksS0FBT0EsR0FBSyxFQUVUNUosS0FBS3dTLElBQUk1SSxFQUFJLElBQUtoSSxFQUFHMEgsR0FBSytmLEdBRTFCcnBCLEtBQUt3UyxJQUFJNUksRUFBR2hJLEVBQUcwSCxHQUk5QixTQUFTMmQsR0FBUXRjLEdBQ2IsSUFBSW1jLEVBQU02QyxFQUVWLFFBQWN0NkIsS0FEZHNiLEVBQVFELEdBQWVDLEtBQ2MsZ0JBQVZBLElBQTRCamYsS0FBS29XLFVBQ3hELE9BQU9wVyxLQUtYLE9BRkFpK0IsRUFBY2orQixLQUFLNlgsT0FBU21tQixHQUFpQkQsR0FFckM5ZSxHQUNKLElBQUssT0FDRG1jLEVBQU82QyxFQUFZaitCLEtBQUs4ZixPQUFRLEVBQUcsR0FDbkMsTUFDSixJQUFLLFVBQ0RzYixFQUFPNkMsRUFDSGorQixLQUFLOGYsT0FDTDlmLEtBQUt5Z0IsUUFBV3pnQixLQUFLeWdCLFFBQVUsRUFDL0IsR0FFSixNQUNKLElBQUssUUFDRDJhLEVBQU82QyxFQUFZaitCLEtBQUs4ZixPQUFROWYsS0FBS3lnQixRQUFTLEdBQzlDLE1BQ0osSUFBSyxPQUNEMmEsRUFBTzZDLEVBQ0hqK0IsS0FBSzhmLE9BQ0w5ZixLQUFLeWdCLFFBQ0x6Z0IsS0FBSzBnQixPQUFTMWdCLEtBQUt3bkIsV0FFdkIsTUFDSixJQUFLLFVBQ0Q0VCxFQUFPNkMsRUFDSGorQixLQUFLOGYsT0FDTDlmLEtBQUt5Z0IsUUFDTHpnQixLQUFLMGdCLFFBQVUxZ0IsS0FBS2srQixhQUFlLElBRXZDLE1BQ0osSUFBSyxNQUNMLElBQUssT0FDRDlDLEVBQU82QyxFQUFZaitCLEtBQUs4ZixPQUFROWYsS0FBS3lnQixRQUFTemdCLEtBQUswZ0IsUUFDbkQsTUFDSixJQUFLLE9BQ0QwYSxFQUFPcDdCLEtBQUt5RCxHQUFHZ1IsVUFDZjJtQixHQUFRd0MsR0FDSnhDLEdBQVFwN0IsS0FBSzZYLE9BQVMsRUFBSTdYLEtBQUtxM0IsWUFBY29HLElBQzdDQyxJQUVKLE1BQ0osSUFBSyxTQUNEdEMsRUFBT3A3QixLQUFLeUQsR0FBR2dSLFVBQ2YybUIsR0FBUXdDLEdBQU14QyxFQUFNcUMsSUFDcEIsTUFDSixJQUFLLFNBQ0RyQyxFQUFPcDdCLEtBQUt5RCxHQUFHZ1IsVUFDZjJtQixHQUFRd0MsR0FBTXhDLEVBQU1vQyxJQU01QixPQUZBeDlCLEtBQUt5RCxHQUFHcTBCLFFBQVFzRCxHQUNoQnpuQixFQUFNdUUsYUFBYWxZLE1BQU0sR0FDbEJBLEtBR1gsU0FBUzA3QixHQUFNemMsR0FDWCxJQUFJbWMsRUFBTTZDLEVBRVYsUUFBY3Q2QixLQURkc2IsRUFBUUQsR0FBZUMsS0FDYyxnQkFBVkEsSUFBNEJqZixLQUFLb1csVUFDeEQsT0FBT3BXLEtBS1gsT0FGQWkrQixFQUFjaitCLEtBQUs2WCxPQUFTbW1CLEdBQWlCRCxHQUVyQzllLEdBQ0osSUFBSyxPQUNEbWMsRUFBTzZDLEVBQVlqK0IsS0FBSzhmLE9BQVMsRUFBRyxFQUFHLEdBQUssRUFDNUMsTUFDSixJQUFLLFVBQ0RzYixFQUNJNkMsRUFDSWorQixLQUFLOGYsT0FDTDlmLEtBQUt5Z0IsUUFBV3pnQixLQUFLeWdCLFFBQVUsRUFBSyxFQUNwQyxHQUNBLEVBQ1IsTUFDSixJQUFLLFFBQ0QyYSxFQUFPNkMsRUFBWWorQixLQUFLOGYsT0FBUTlmLEtBQUt5Z0IsUUFBVSxFQUFHLEdBQUssRUFDdkQsTUFDSixJQUFLLE9BQ0QyYSxFQUNJNkMsRUFDSWorQixLQUFLOGYsT0FDTDlmLEtBQUt5Z0IsUUFDTHpnQixLQUFLMGdCLE9BQVMxZ0IsS0FBS3duQixVQUFZLEdBQy9CLEVBQ1IsTUFDSixJQUFLLFVBQ0Q0VCxFQUNJNkMsRUFDSWorQixLQUFLOGYsT0FDTDlmLEtBQUt5Z0IsUUFDTHpnQixLQUFLMGdCLFFBQVUxZ0IsS0FBS2srQixhQUFlLEdBQUssR0FDeEMsRUFDUixNQUNKLElBQUssTUFDTCxJQUFLLE9BQ0Q5QyxFQUFPNkMsRUFBWWorQixLQUFLOGYsT0FBUTlmLEtBQUt5Z0IsUUFBU3pnQixLQUFLMGdCLE9BQVMsR0FBSyxFQUNqRSxNQUNKLElBQUssT0FDRDBhLEVBQU9wN0IsS0FBS3lELEdBQUdnUixVQUNmMm1CLEdBQ0lzQyxHQUNBRSxHQUNJeEMsR0FBUXA3QixLQUFLNlgsT0FBUyxFQUFJN1gsS0FBS3EzQixZQUFjb0csSUFDN0NDLElBRUosRUFDSixNQUNKLElBQUssU0FDRHRDLEVBQU9wN0IsS0FBS3lELEdBQUdnUixVQUNmMm1CLEdBQVFxQyxHQUFnQkcsR0FBTXhDLEVBQU1xQyxJQUFpQixFQUNyRCxNQUNKLElBQUssU0FDRHJDLEVBQU9wN0IsS0FBS3lELEdBQUdnUixVQUNmMm1CLEdBQVFvQyxHQUFnQkksR0FBTXhDLEVBQU1vQyxJQUFpQixFQU03RCxPQUZBeDlCLEtBQUt5RCxHQUFHcTBCLFFBQVFzRCxHQUNoQnpuQixFQUFNdUUsYUFBYWxZLE1BQU0sR0FDbEJBLEtBR1gsU0FBU3lVLEtBQ0wsT0FBT3pVLEtBQUt5RCxHQUFHZ1IsVUFBa0MsS0FBckJ6VSxLQUFLOFgsU0FBVyxHQUdoRCxTQUFTcW1CLEtBQ0wsT0FBT3I0QixLQUFLbWEsTUFBTWpnQixLQUFLeVUsVUFBWSxLQUd2QyxTQUFTa29CLEtBQ0wsT0FBTyxJQUFJcm9CLEtBQUt0VSxLQUFLeVUsV0FHekIsU0FBU3lrQixLQUNMLElBQUloakIsRUFBSWxXLEtBQ1IsTUFBTyxDQUNIa1csRUFBRTRKLE9BQ0Y1SixFQUFFdUssUUFDRnZLLEVBQUV3SyxPQUNGeEssRUFBRTBkLE9BQ0YxZCxFQUFFdWUsU0FDRnZlLEVBQUV3ZSxTQUNGeGUsRUFBRXllLGVBSVYsU0FBU3lKLEtBQ0wsSUFBSWxvQixFQUFJbFcsS0FDUixNQUFPLENBQ0grMUIsTUFBTzdmLEVBQUU0SixPQUNUZ0UsT0FBUTVOLEVBQUV1SyxRQUNWQyxLQUFNeEssRUFBRXdLLE9BQ1IrSyxNQUFPdlYsRUFBRXVWLFFBQ1RHLFFBQVMxVixFQUFFMFYsVUFDWEssUUFBUy9WLEVBQUUrVixVQUNYb0ssYUFBY25nQixFQUFFbWdCLGdCQUl4QixTQUFTZ0ksS0FFTCxPQUFPcitCLEtBQUtvVyxVQUFZcFcsS0FBS3k4QixjQUFnQixLQUdqRCxTQUFTNkIsS0FDTCxPQUFPbG9CLEVBQVFwVyxNQUduQixTQUFTdStCLEtBQ0wsT0FBTy9wQixFQUFPLEdBQUl5QixFQUFnQmpXLE9BR3RDLFNBQVN3K0IsS0FDTCxPQUFPdm9CLEVBQWdCalcsTUFBTW9WLFNBR2pDLFNBQVNxcEIsS0FDTCxNQUFPLENBQ0h2ekIsTUFBT2xMLEtBQUs2RCxHQUNaOFEsT0FBUTNVLEtBQUswWCxHQUNiOUMsT0FBUTVVLEtBQUsrWCxRQUNiaWQsTUFBT2gxQixLQUFLNlgsT0FDWmhELE9BQVE3VSxLQUFLNFcsU0F1RHJCLFNBQVM4bkIsR0FBV3hvQixFQUFHdkIsR0FDbkIsSUFBSW5WLEVBQ0Fzd0IsRUFDQXBQLEVBQ0FpZSxFQUFPMytCLEtBQUs0K0IsT0FBUzNRLEdBQVUsTUFBTTJRLE1BQ3pDLElBQUtwL0IsRUFBSSxFQUFHc3dCLEVBQUk2TyxFQUFLai9CLE9BQVFGLEVBQUlzd0IsSUFBS3R3QixFQVNsQyxPQVBTLGlCQURNbS9CLEVBQUtuL0IsR0FBR3EvQixRQUdmbmUsRUFBTy9NLEVBQU1nckIsRUFBS24vQixHQUFHcS9CLE9BQU90RCxRQUFRLE9BQ3BDb0QsRUFBS24vQixHQUFHcS9CLE1BQVFuZSxFQUFLak0sa0JBSWRrcUIsRUFBS24vQixHQUFHcy9CLE9BQ25CLElBQUssWUFDREgsRUFBS24vQixHQUFHcy9CLE1BQVEsRUFBQSxFQUNoQixNQUNKLElBQUssU0FFRHBlLEVBQU8vTSxFQUFNZ3JCLEVBQUtuL0IsR0FBR3MvQixPQUFPdkQsUUFBUSxPQUFPOW1CLFVBQzNDa3FCLEVBQUtuL0IsR0FBR3MvQixNQUFRcGUsRUFBS2pNLFVBSWpDLE9BQU9rcUIsRUFHWCxTQUFTSSxHQUFnQkMsRUFBU3JxQixFQUFRRSxHQUN0QyxJQUFJclYsRUFDQXN3QixFQUVBanZCLEVBQ0FzdEIsRUFDQThRLEVBSEFOLEVBQU8zK0IsS0FBSzIrQixPQU1oQixJQUZBSyxFQUFVQSxFQUFRbmlCLGNBRWJyZCxFQUFJLEVBQUdzd0IsRUFBSTZPLEVBQUtqL0IsT0FBUUYsRUFBSXN3QixJQUFLdHdCLEVBS2xDLEdBSkFxQixFQUFPODlCLEVBQUtuL0IsR0FBR3FCLEtBQUtnYyxjQUNwQnNSLEVBQU93USxFQUFLbi9CLEdBQUcydUIsS0FBS3RSLGNBQ3BCb2lCLEVBQVNOLEVBQUtuL0IsR0FBR3kvQixPQUFPcGlCLGNBRXBCaEksRUFDQSxPQUFRRixHQUNKLElBQUssSUFDTCxJQUFLLEtBQ0wsSUFBSyxNQUNELEdBQUl3WixJQUFTNlEsRUFDVCxPQUFPTCxFQUFLbi9CLEdBRWhCLE1BRUosSUFBSyxPQUNELEdBQUlxQixJQUFTbStCLEVBQ1QsT0FBT0wsRUFBS24vQixHQUVoQixNQUVKLElBQUssUUFDRCxHQUFJeS9CLElBQVdELEVBQ1gsT0FBT0wsRUFBS24vQixRQUlyQixHQUFJLENBQUNxQixFQUFNc3RCLEVBQU04USxHQUFRbjNCLFFBQVFrM0IsSUFBWSxFQUNoRCxPQUFPTCxFQUFLbi9CLEdBS3hCLFNBQVMwL0IsR0FBc0JycEIsRUFBS2lLLEdBQ2hDLElBQUlxZixFQUFNdHBCLEVBQUlncEIsT0FBU2hwQixFQUFJaXBCLE1BQVEsR0FBTSxFQUN6QyxZQUFhbjdCLElBQVRtYyxFQUNPbk0sRUFBTWtDLEVBQUlncEIsT0FBTy9lLE9BRWpCbk0sRUFBTWtDLEVBQUlncEIsT0FBTy9lLFFBQVVBLEVBQU9qSyxFQUFJc2hCLFFBQVVnSSxFQUkvRCxTQUFTQyxLQUNMLElBQUk1L0IsRUFDQXN3QixFQUNBdFksRUFDQW1uQixFQUFPMytCLEtBQUswYixhQUFhaWpCLE9BQzdCLElBQUtuL0IsRUFBSSxFQUFHc3dCLEVBQUk2TyxFQUFLai9CLE9BQVFGLEVBQUlzd0IsSUFBS3R3QixFQUFHLENBSXJDLEdBRkFnWSxFQUFNeFgsS0FBSzYzQixRQUFRMEQsUUFBUSxPQUFPOW1CLFVBRTlCa3FCLEVBQUtuL0IsR0FBR3EvQixPQUFTcm5CLEdBQU9BLEdBQU9tbkIsRUFBS24vQixHQUFHcy9CLE1BQ3ZDLE9BQU9ILEVBQUtuL0IsR0FBR3FCLEtBRW5CLEdBQUk4OUIsRUFBS24vQixHQUFHcy9CLE9BQVN0bkIsR0FBT0EsR0FBT21uQixFQUFLbi9CLEdBQUdxL0IsTUFDdkMsT0FBT0YsRUFBS24vQixHQUFHcUIsS0FJdkIsTUFBTyxHQUdYLFNBQVN3K0IsS0FDTCxJQUFJNy9CLEVBQ0Fzd0IsRUFDQXRZLEVBQ0FtbkIsRUFBTzMrQixLQUFLMGIsYUFBYWlqQixPQUM3QixJQUFLbi9CLEVBQUksRUFBR3N3QixFQUFJNk8sRUFBS2ovQixPQUFRRixFQUFJc3dCLElBQUt0d0IsRUFBRyxDQUlyQyxHQUZBZ1ksRUFBTXhYLEtBQUs2M0IsUUFBUTBELFFBQVEsT0FBTzltQixVQUU5QmtxQixFQUFLbi9CLEdBQUdxL0IsT0FBU3JuQixHQUFPQSxHQUFPbW5CLEVBQUtuL0IsR0FBR3MvQixNQUN2QyxPQUFPSCxFQUFLbi9CLEdBQUd5L0IsT0FFbkIsR0FBSU4sRUFBS24vQixHQUFHcy9CLE9BQVN0bkIsR0FBT0EsR0FBT21uQixFQUFLbi9CLEdBQUdxL0IsTUFDdkMsT0FBT0YsRUFBS24vQixHQUFHeS9CLE9BSXZCLE1BQU8sR0FHWCxTQUFTSyxLQUNMLElBQUk5L0IsRUFDQXN3QixFQUNBdFksRUFDQW1uQixFQUFPMytCLEtBQUswYixhQUFhaWpCLE9BQzdCLElBQUtuL0IsRUFBSSxFQUFHc3dCLEVBQUk2TyxFQUFLai9CLE9BQVFGLEVBQUlzd0IsSUFBS3R3QixFQUFHLENBSXJDLEdBRkFnWSxFQUFNeFgsS0FBSzYzQixRQUFRMEQsUUFBUSxPQUFPOW1CLFVBRTlCa3FCLEVBQUtuL0IsR0FBR3EvQixPQUFTcm5CLEdBQU9BLEdBQU9tbkIsRUFBS24vQixHQUFHcy9CLE1BQ3ZDLE9BQU9ILEVBQUtuL0IsR0FBRzJ1QixLQUVuQixHQUFJd1EsRUFBS24vQixHQUFHcy9CLE9BQVN0bkIsR0FBT0EsR0FBT21uQixFQUFLbi9CLEdBQUdxL0IsTUFDdkMsT0FBT0YsRUFBS24vQixHQUFHMnVCLEtBSXZCLE1BQU8sR0FHWCxTQUFTb1IsS0FDTCxJQUFJLy9CLEVBQ0Fzd0IsRUFDQXFQLEVBQ0EzbkIsRUFDQW1uQixFQUFPMytCLEtBQUswYixhQUFhaWpCLE9BQzdCLElBQUtuL0IsRUFBSSxFQUFHc3dCLEVBQUk2TyxFQUFLai9CLE9BQVFGLEVBQUlzd0IsSUFBS3R3QixFQU1sQyxHQUxBMi9CLEVBQU1SLEVBQUtuL0IsR0FBR3EvQixPQUFTRixFQUFLbi9CLEdBQUdzL0IsTUFBUSxHQUFNLEVBRzdDdG5CLEVBQU14WCxLQUFLNjNCLFFBQVEwRCxRQUFRLE9BQU85bUIsVUFHN0JrcUIsRUFBS24vQixHQUFHcS9CLE9BQVNybkIsR0FBT0EsR0FBT21uQixFQUFLbi9CLEdBQUdzL0IsT0FDdkNILEVBQUtuL0IsR0FBR3MvQixPQUFTdG5CLEdBQU9BLEdBQU9tbkIsRUFBS24vQixHQUFHcS9CLE1BRXhDLE9BQ0s3K0IsS0FBSzhmLE9BQVNuTSxFQUFNZ3JCLEVBQUtuL0IsR0FBR3EvQixPQUFPL2UsUUFBVXFmLEVBQzlDUixFQUFLbi9CLEdBQUcyM0IsT0FLcEIsT0FBT24zQixLQUFLOGYsT0FHaEIsU0FBUzBmLEdBQWNwZCxHQUluQixPQUhLdE8sRUFBVzlULEtBQU0sbUJBQ2xCeS9CLEdBQWlCMy9CLEtBQUtFLE1BRW5Cb2lCLEVBQVdwaUIsS0FBSzAvQixlQUFpQjEvQixLQUFLMi9CLFdBR2pELFNBQVNDLEdBQWN4ZCxHQUluQixPQUhLdE8sRUFBVzlULEtBQU0sbUJBQ2xCeS9CLEdBQWlCMy9CLEtBQUtFLE1BRW5Cb2lCLEVBQVdwaUIsS0FBSzYvQixlQUFpQjcvQixLQUFLMi9CLFdBR2pELFNBQVNHLEdBQWdCMWQsR0FJckIsT0FIS3RPLEVBQVc5VCxLQUFNLHFCQUNsQnkvQixHQUFpQjMvQixLQUFLRSxNQUVuQm9pQixFQUFXcGlCLEtBQUsrL0IsaUJBQW1CLy9CLEtBQUsyL0IsV0FHbkQsU0FBU0ssR0FBYTVkLEVBQVV4TixHQUM1QixPQUFPQSxFQUFPZ3JCLGNBQWN4ZCxHQUdoQyxTQUFTNmQsR0FBYTdkLEVBQVV4TixHQUM1QixPQUFPQSxFQUFPNHFCLGNBQWNwZCxHQUdoQyxTQUFTOGQsR0FBZTlkLEVBQVV4TixHQUM5QixPQUFPQSxFQUFPa3JCLGdCQUFnQjFkLEdBR2xDLFNBQVMrZCxHQUFvQi9kLEVBQVV4TixHQUNuQyxPQUFPQSxFQUFPd3JCLHNCQUF3QnplLEdBRzFDLFNBQVM4ZCxLQUNMLElBSUlqZ0MsRUFDQXN3QixFQUxBdVEsRUFBYSxHQUNiQyxFQUFhLEdBQ2JDLEVBQWUsR0FDZnBhLEVBQWMsR0FHZHdZLEVBQU8zK0IsS0FBSzIrQixPQUVoQixJQUFLbi9CLEVBQUksRUFBR3N3QixFQUFJNk8sRUFBS2ovQixPQUFRRixFQUFJc3dCLElBQUt0d0IsRUFDbEM4Z0MsRUFBV3Q4QixLQUFLdWUsR0FBWW9jLEVBQUtuL0IsR0FBR3FCLE9BQ3BDdy9CLEVBQVdyOEIsS0FBS3VlLEdBQVlvYyxFQUFLbi9CLEdBQUcydUIsT0FDcENvUyxFQUFhdjhCLEtBQUt1ZSxHQUFZb2MsRUFBS24vQixHQUFHeS9CLFNBRXRDOVksRUFBWW5pQixLQUFLdWUsR0FBWW9jLEVBQUtuL0IsR0FBR3FCLE9BQ3JDc2xCLEVBQVluaUIsS0FBS3VlLEdBQVlvYyxFQUFLbi9CLEdBQUcydUIsT0FDckNoSSxFQUFZbmlCLEtBQUt1ZSxHQUFZb2MsRUFBS24vQixHQUFHeS9CLFNBR3pDai9CLEtBQUsyL0IsV0FBYSxJQUFJNzFCLE9BQU8sS0FBT3FjLEVBQVl6YSxLQUFLLEtBQU8sSUFBSyxLQUNqRTFMLEtBQUswL0IsZUFBaUIsSUFBSTUxQixPQUFPLEtBQU93MkIsRUFBVzUwQixLQUFLLEtBQU8sSUFBSyxLQUNwRTFMLEtBQUs2L0IsZUFBaUIsSUFBSS8xQixPQUFPLEtBQU91MkIsRUFBVzMwQixLQUFLLEtBQU8sSUFBSyxLQUNwRTFMLEtBQUsrL0IsaUJBQW1CLElBQUlqMkIsT0FDeEIsS0FBT3kyQixFQUFhNzBCLEtBQUssS0FBTyxJQUNoQyxLQWNSLFNBQVM4MEIsR0FBdUJsbEIsRUFBT21sQixHQUNuQ3BsQixFQUFlLEVBQUcsQ0FBQ0MsRUFBT0EsRUFBTTViLFFBQVMsRUFBRytnQyxHQTRDaEQsU0FBU0MsR0FBZXgxQixHQUNwQixPQUFPeTFCLEdBQXFCN2dDLEtBQ3hCRSxLQUNBa0wsRUFDQWxMLEtBQUt1bkIsT0FDTHZuQixLQUFLd25CLFVBQ0x4bkIsS0FBSzBiLGFBQWF3TSxNQUFNaEIsSUFDeEJsbkIsS0FBSzBiLGFBQWF3TSxNQUFNZixLQUloQyxTQUFTeVosR0FBa0IxMUIsR0FDdkIsT0FBT3kxQixHQUFxQjdnQyxLQUN4QkUsS0FDQWtMLEVBQ0FsTCxLQUFLbTJCLFVBQ0xuMkIsS0FBS2srQixhQUNMLEVBQ0EsR0FJUixTQUFTMkMsS0FDTCxPQUFPOVksR0FBWS9uQixLQUFLOGYsT0FBUSxFQUFHLEdBR3ZDLFNBQVNnaEIsS0FDTCxPQUFPL1ksR0FBWS9uQixLQUFLK2dDLGNBQWUsRUFBRyxHQUc5QyxTQUFTQyxLQUNMLElBQUlDLEVBQVdqaEMsS0FBSzBiLGFBQWF3TSxNQUNqQyxPQUFPSCxHQUFZL25CLEtBQUs4ZixPQUFRbWhCLEVBQVMvWixJQUFLK1osRUFBUzlaLEtBRzNELFNBQVMrWixLQUNMLElBQUlELEVBQVdqaEMsS0FBSzBiLGFBQWF3TSxNQUNqQyxPQUFPSCxHQUFZL25CLEtBQUs0eUIsV0FBWXFPLEVBQVMvWixJQUFLK1osRUFBUzlaLEtBRy9ELFNBQVN3WixHQUFxQnoxQixFQUFPcWMsRUFBTUMsRUFBU04sRUFBS0MsR0FDckQsSUFBSWdhLEVBQ0osT0FBYSxNQUFUajJCLEVBQ08wYyxHQUFXNW5CLEtBQU1rbkIsRUFBS0MsR0FBS3JILE1BRzlCeUgsR0FESjRaLEVBQWNwWixHQUFZN2MsRUFBT2djLEVBQUtDLE1BRWxDSSxFQUFPNFosR0FFSkMsR0FBV3RoQyxLQUFLRSxLQUFNa0wsRUFBT3FjLEVBQU1DLEVBQVNOLEVBQUtDLElBSWhFLFNBQVNpYSxHQUFXeE8sRUFBVXJMLEVBQU1DLEVBQVNOLEVBQUtDLEdBQzlDLElBQUlrYSxFQUFnQi9aLEdBQW1Cc0wsRUFBVXJMLEVBQU1DLEVBQVNOLEVBQUtDLEdBQ2pFekcsRUFBT21HLEdBQWN3YSxFQUFjdmhCLEtBQU0sRUFBR3VoQixFQUFjMVosV0FLOUQsT0FIQTNuQixLQUFLOGYsS0FBS1ksRUFBS3FHLGtCQUNmL21CLEtBQUt5Z0IsTUFBTUMsRUFBS3VSLGVBQ2hCanlCLEtBQUswZ0IsS0FBS0EsRUFBS3dSLGNBQ1JseUIsS0F3QlgsU0FBU3NoQyxHQUFjcDJCLEdBQ25CLE9BQWdCLE1BQVRBLEVBQ0RwRixLQUFLa2EsTUFBTWhnQixLQUFLeWdCLFFBQVUsR0FBSyxHQUMvQnpnQixLQUFLeWdCLE1BQW9CLEdBQWJ2VixFQUFRLEdBQVVsTCxLQUFLeWdCLFFBQVUsR0F2YXZEcEYsRUFBZSxJQUFLLEVBQUcsRUFBRyxXQUMxQkEsRUFBZSxLQUFNLEVBQUcsRUFBRyxXQUMzQkEsRUFBZSxNQUFPLEVBQUcsRUFBRyxXQUM1QkEsRUFBZSxPQUFRLEVBQUcsRUFBRyxXQUM3QkEsRUFBZSxRQUFTLEVBQUcsRUFBRyxhQUU5QkEsRUFBZSxJQUFLLENBQUMsSUFBSyxHQUFJLEtBQU0sV0FDcENBLEVBQWUsSUFBSyxDQUFDLEtBQU0sR0FBSSxFQUFHLFdBQ2xDQSxFQUFlLElBQUssQ0FBQyxNQUFPLEdBQUksRUFBRyxXQUNuQ0EsRUFBZSxJQUFLLENBQUMsT0FBUSxHQUFJLEVBQUcsV0FFcEM0RyxHQUFjLElBQUsrZCxJQUNuQi9kLEdBQWMsS0FBTStkLElBQ3BCL2QsR0FBYyxNQUFPK2QsSUFDckIvZCxHQUFjLE9BQVFnZSxJQUN0QmhlLEdBQWMsUUFBU2llLElBRXZCdGQsR0FBYyxDQUFDLElBQUssS0FBTSxNQUFPLE9BQVEsVUFBVSxTQUMvQzFYLEVBQ0EyUSxFQUNBNUQsRUFDQXFELEdBRUEsSUFBSXpGLEVBQU1vQyxFQUFPRixRQUFRd3BCLFVBQVVyMkIsRUFBT29RLEVBQU9yRCxFQUFPckIsU0FDcERmLEVBQ0FJLEVBQWdCZ0MsR0FBUXBDLElBQU1BLEVBRTlCSSxFQUFnQmdDLEdBQVExQyxXQUFhckssS0FJN0MrVyxHQUFjLElBQUtOLElBQ25CTSxHQUFjLEtBQU1OLElBQ3BCTSxHQUFjLE1BQU9OLElBQ3JCTSxHQUFjLE9BQVFOLElBQ3RCTSxHQUFjLEtBQU1rZSxJQUVwQnZkLEdBQWMsQ0FBQyxJQUFLLEtBQU0sTUFBTyxRQUFTSyxJQUMxQ0wsR0FBYyxDQUFDLE9BQU8sU0FBVTFYLEVBQU8yUSxFQUFPNUQsRUFBUXFELEdBQ2xELElBQUk5VCxFQUNBeVEsRUFBT0YsUUFBUXFvQix1QkFDZjU0QixFQUFRMEQsRUFBTTFELE1BQU15USxFQUFPRixRQUFRcW9CLHVCQUduQ25vQixFQUFPRixRQUFReXBCLG9CQUNmM2xCLEVBQU1vSCxJQUFRaEwsRUFBT0YsUUFBUXlwQixvQkFBb0J0MkIsRUFBTzFELEdBRXhEcVUsRUFBTW9ILElBQVFxRCxTQUFTcGIsRUFBTyxPQTRPdENtUSxFQUFlLEVBQUcsQ0FBQyxLQUFNLEdBQUksR0FBRyxXQUM1QixPQUFPcmIsS0FBSzR5QixXQUFhLE9BRzdCdlgsRUFBZSxFQUFHLENBQUMsS0FBTSxHQUFJLEdBQUcsV0FDNUIsT0FBT3JiLEtBQUsrZ0MsY0FBZ0IsT0FPaENQLEdBQXVCLE9BQVEsWUFDL0JBLEdBQXVCLFFBQVMsWUFDaENBLEdBQXVCLE9BQVEsZUFDL0JBLEdBQXVCLFFBQVMsZUFJaEM1aEIsR0FBYSxXQUFZLE1BQ3pCQSxHQUFhLGNBQWUsTUFJNUJXLEdBQWdCLFdBQVksR0FDNUJBLEdBQWdCLGNBQWUsR0FJL0IwQyxHQUFjLElBQUtMLElBQ25CSyxHQUFjLElBQUtMLElBQ25CSyxHQUFjLEtBQU1aLEdBQVdKLElBQy9CZ0IsR0FBYyxLQUFNWixHQUFXSixJQUMvQmdCLEdBQWMsT0FBUVIsR0FBV04sSUFDakNjLEdBQWMsT0FBUVIsR0FBV04sSUFDakNjLEdBQWMsUUFBU1AsR0FBV04sSUFDbENhLEdBQWMsUUFBU1AsR0FBV04sSUFFbEN5QixHQUFrQixDQUFDLE9BQVEsUUFBUyxPQUFRLFVBQVUsU0FDbEQzWCxFQUNBcWMsRUFDQXRQLEVBQ0FxRCxHQUVBaU0sRUFBS2pNLEVBQU1OLE9BQU8sRUFBRyxJQUFNa0YsR0FBTWhWLE1BR3JDMlgsR0FBa0IsQ0FBQyxLQUFNLE9BQU8sU0FBVTNYLEVBQU9xYyxFQUFNdFAsRUFBUXFELEdBQzNEaU0sRUFBS2pNLEdBQVMzSCxFQUFNMFMsa0JBQWtCbmIsTUFzRTFDbVEsRUFBZSxJQUFLLEVBQUcsS0FBTSxXQUk3QnVELEdBQWEsVUFBVyxLQUl4QlcsR0FBZ0IsVUFBVyxHQUkzQjBDLEdBQWMsSUFBS2pCLElBQ25CNEIsR0FBYyxLQUFLLFNBQVUxWCxFQUFPMlEsR0FDaENBLEVBQU1xSCxJQUE4QixHQUFwQmhELEdBQU1oVixHQUFTLE1BYW5DbVEsRUFBZSxJQUFLLENBQUMsS0FBTSxHQUFJLEtBQU0sUUFJckN1RCxHQUFhLE9BQVEsS0FHckJXLEdBQWdCLE9BQVEsR0FJeEIwQyxHQUFjLElBQUtaLElBQ25CWSxHQUFjLEtBQU1aLEdBQVdKLElBQy9CZ0IsR0FBYyxNQUFNLFNBQVVHLEVBQVV4TixHQUVwQyxPQUFPd04sRUFDRHhOLEVBQU8wRSx5QkFBMkIxRSxFQUFPMkUsY0FDekMzRSxFQUFPeUUsa0NBR2pCdUosR0FBYyxDQUFDLElBQUssTUFBT08sSUFDM0JQLEdBQWMsTUFBTSxTQUFVMVgsRUFBTzJRLEdBQ2pDQSxFQUFNc0gsSUFBUWpELEdBQU1oVixFQUFNMUQsTUFBTTZaLElBQVcsT0FLL0MsSUFBSW9nQixHQUFtQm5oQixHQUFXLFFBQVEsR0F5QjFDLFNBQVNvaEIsR0FBZ0J4MkIsR0FDckIsSUFBSXljLEVBQ0E3aEIsS0FBSzh3QixPQUNBNTJCLEtBQUs2M0IsUUFBUTBELFFBQVEsT0FBU3Y3QixLQUFLNjNCLFFBQVEwRCxRQUFRLFNBQVcsT0FDL0QsRUFDUixPQUFnQixNQUFUcndCLEVBQWdCeWMsRUFBWTNuQixLQUFLdW9CLElBQUlyZCxFQUFReWMsRUFBVyxLQTFCbkV0TSxFQUFlLE1BQU8sQ0FBQyxPQUFRLEdBQUksT0FBUSxhQUkzQ3VELEdBQWEsWUFBYSxPQUcxQlcsR0FBZ0IsWUFBYSxHQUk3QjBDLEdBQWMsTUFBT1QsSUFDckJTLEdBQWMsT0FBUWYsSUFDdEIwQixHQUFjLENBQUMsTUFBTyxTQUFTLFNBQVUxWCxFQUFPMlEsRUFBTzVELEdBQ25EQSxFQUFPeWEsV0FBYXhTLEdBQU1oVixNQWlCOUJtUSxFQUFlLElBQUssQ0FBQyxLQUFNLEdBQUksRUFBRyxVQUlsQ3VELEdBQWEsU0FBVSxLQUl2QlcsR0FBZ0IsU0FBVSxJQUkxQjBDLEdBQWMsSUFBS1osSUFDbkJZLEdBQWMsS0FBTVosR0FBV0osSUFDL0IyQixHQUFjLENBQUMsSUFBSyxNQUFPUyxJQUkzQixJQUFJc2UsR0FBZXJoQixHQUFXLFdBQVcsR0FJekNqRixFQUFlLElBQUssQ0FBQyxLQUFNLEdBQUksRUFBRyxVQUlsQ3VELEdBQWEsU0FBVSxLQUl2QlcsR0FBZ0IsU0FBVSxJQUkxQjBDLEdBQWMsSUFBS1osSUFDbkJZLEdBQWMsS0FBTVosR0FBV0osSUFDL0IyQixHQUFjLENBQUMsSUFBSyxNQUFPVSxJQUkzQixJQThDSWhJLEdBQU9zbUIsR0E5Q1BDLEdBQWV2aEIsR0FBVyxXQUFXLEdBK0N6QyxJQTNDQWpGLEVBQWUsSUFBSyxFQUFHLEdBQUcsV0FDdEIsU0FBVXJiLEtBQUsyMEIsY0FBZ0IsUUFHbkN0WixFQUFlLEVBQUcsQ0FBQyxLQUFNLEdBQUksR0FBRyxXQUM1QixTQUFVcmIsS0FBSzIwQixjQUFnQixPQUduQ3RaLEVBQWUsRUFBRyxDQUFDLE1BQU8sR0FBSSxFQUFHLGVBQ2pDQSxFQUFlLEVBQUcsQ0FBQyxPQUFRLEdBQUksR0FBRyxXQUM5QixPQUE0QixHQUFyQnJiLEtBQUsyMEIsaUJBRWhCdFosRUFBZSxFQUFHLENBQUMsUUFBUyxHQUFJLEdBQUcsV0FDL0IsT0FBNEIsSUFBckJyYixLQUFLMjBCLGlCQUVoQnRaLEVBQWUsRUFBRyxDQUFDLFNBQVUsR0FBSSxHQUFHLFdBQ2hDLE9BQTRCLElBQXJCcmIsS0FBSzIwQixpQkFFaEJ0WixFQUFlLEVBQUcsQ0FBQyxVQUFXLEdBQUksR0FBRyxXQUNqQyxPQUE0QixJQUFyQnJiLEtBQUsyMEIsaUJBRWhCdFosRUFBZSxFQUFHLENBQUMsV0FBWSxHQUFJLEdBQUcsV0FDbEMsT0FBNEIsSUFBckJyYixLQUFLMjBCLGlCQUVoQnRaLEVBQWUsRUFBRyxDQUFDLFlBQWEsR0FBSSxHQUFHLFdBQ25DLE9BQTRCLElBQXJCcmIsS0FBSzIwQixpQkFLaEIvVixHQUFhLGNBQWUsTUFJNUJXLEdBQWdCLGNBQWUsSUFJL0IwQyxHQUFjLElBQUtULEdBQVdSLElBQzlCaUIsR0FBYyxLQUFNVCxHQUFXUCxJQUMvQmdCLEdBQWMsTUFBT1QsR0FBV04sSUFHM0I1RixHQUFRLE9BQVFBLEdBQU01YixRQUFVLEVBQUc0YixJQUFTLElBQzdDMkcsR0FBYzNHLEdBQU9xRyxJQUd6QixTQUFTbWdCLEdBQVE1MkIsRUFBTzJRLEdBQ3BCQSxFQUFNMEgsSUFBZXJELEdBQXVCLEtBQWhCLEtBQU9oVixJQUd2QyxJQUFLb1EsR0FBUSxJQUFLQSxHQUFNNWIsUUFBVSxFQUFHNGIsSUFBUyxJQUMxQ3NILEdBQWN0SCxHQUFPd21CLElBWXpCLFNBQVNDLEtBQ0wsT0FBTy9oQyxLQUFLNlgsT0FBUyxNQUFRLEdBR2pDLFNBQVNtcUIsS0FDTCxPQUFPaGlDLEtBQUs2WCxPQUFTLDZCQUErQixHQWR4RCtwQixHQUFvQnRoQixHQUFXLGdCQUFnQixHQUkvQ2pGLEVBQWUsSUFBSyxFQUFHLEVBQUcsWUFDMUJBLEVBQWUsS0FBTSxFQUFHLEVBQUcsWUFZM0IsSUFBSTRtQixHQUFRanFCLEVBQU83WSxVQXdHbkIsU0FBUytpQyxHQUFXaDNCLEdBQ2hCLE9BQU9pb0IsR0FBb0IsSUFBUmpvQixHQUd2QixTQUFTaTNCLEtBQ0wsT0FBT2hQLEdBQVlwekIsTUFBTSxLQUFNTixXQUFXMmlDLFlBRzlDLFNBQVNDLEdBQW1CL2pCLEdBQ3hCLE9BQU9BLEVBL0dYMmpCLEdBQU0xWixJQUFNQSxHQUNaMFosR0FBTTluQixTQUFXZ2hCLEdBQ2pCOEcsR0FBTXBLLE1BQVFBLEdBQ2RvSyxHQUFNdmpCLEtBQU9BLEdBQ2J1akIsR0FBTXZHLE1BQVFBLEdBQ2R1RyxHQUFNdHRCLE9BQVNBLEdBQ2ZzdEIsR0FBTW5oQyxLQUFPQSxHQUNibWhDLEdBQU01RSxRQUFVQSxHQUNoQjRFLEdBQU0zcUIsR0FBS0EsR0FDWDJxQixHQUFNM0UsTUFBUUEsR0FDZDJFLEdBQU16MkIsSUFBTW9WLEdBQ1pxaEIsR0FBTXpELFVBQVlBLEdBQ2xCeUQsR0FBTWxJLFFBQVVBLEdBQ2hCa0ksR0FBTWpJLFNBQVdBLEdBQ2pCaUksR0FBTXRHLFVBQVlBLEdBQ2xCc0csR0FBTWxHLE9BQVNBLEdBQ2ZrRyxHQUFNaEcsY0FBZ0JBLEdBQ3RCZ0csR0FBTS9GLGVBQWlCQSxHQUN2QitGLEdBQU03ckIsUUFBVWtvQixHQUNoQjJELEdBQU05MEIsS0FBT0EsR0FDYjgwQixHQUFNcnRCLE9BQVNBLEdBQ2ZxdEIsR0FBTXZtQixXQUFhQSxHQUNuQnVtQixHQUFNbG5CLElBQU1vYSxHQUNaOE0sR0FBTXpjLElBQU15UCxHQUNaZ04sR0FBTTFELGFBQWVBLEdBQ3JCMEQsR0FBTTlvQixJQUFNMEgsR0FDWm9oQixHQUFNMUcsUUFBVUEsR0FDaEIwRyxHQUFNdEosU0FBV0EsR0FDakJzSixHQUFNL0ksUUFBVUEsR0FDaEIrSSxHQUFNN0QsU0FBV0EsR0FDakI2RCxHQUFNdEYsT0FBU0EsR0FDZnNGLEdBQU14RixZQUFjQSxHQUNwQndGLEdBQU1yRixRQUFVQSxHQUNNLG9CQUFYNTlCLFFBQXdDLE1BQWRBLE9BQU9zakMsTUFDeENMLEdBQU1qakMsT0FBT3NqQyxJQUFJLCtCQUFpQyxXQUM5QyxNQUFPLFVBQVl0aUMsS0FBSzJVLFNBQVcsTUFHM0NzdEIsR0FBTTVELE9BQVNBLEdBQ2Y0RCxHQUFNdGhDLFNBQVdBLEdBQ2pCc2hDLEdBQU05RCxLQUFPQSxHQUNiOEQsR0FBTXh0QixRQUFVQSxHQUNoQnd0QixHQUFNeEQsYUFBZUEsR0FDckJ3RCxHQUFNakQsUUFBVUksR0FDaEI2QyxHQUFNTSxVQUFZbEQsR0FDbEI0QyxHQUFNTyxRQUFVbEQsR0FDaEIyQyxHQUFNUSxRQUFVbEQsR0FDaEIwQyxHQUFNbmlCLEtBQU95RyxHQUNiMGIsR0FBTXBpQixXQUFhMkcsR0FDbkJ5YixHQUFNclAsU0FBVzhOLEdBQ2pCdUIsR0FBTWxCLFlBQWNILEdBQ3BCcUIsR0FBTWhNLFFBQVVnTSxHQUFNak0sU0FBV3NMLEdBQ2pDVyxHQUFNeGhCLE1BQVFnRixHQUNkd2MsR0FBTXRoQixZQUFjK0UsR0FDcEJ1YyxHQUFNMWEsS0FBTzBhLEdBQU0vTCxNQUFRNU4sR0FDM0IyWixHQUFNOUwsUUFBVThMLEdBQU1TLFNBQVdsYSxHQUNqQ3laLEdBQU1sYSxZQUFjaVosR0FDcEJpQixHQUFNVSxnQkFBa0J6QixHQUN4QmUsR0FBTVcsZUFBaUIvQixHQUN2Qm9CLEdBQU1ZLHNCQUF3Qi9CLEdBQzlCbUIsR0FBTXZoQixLQUFPK2dCLEdBQ2JRLEdBQU1yWSxJQUFNcVksR0FBTTdMLEtBQU8zTCxHQUN6QndYLEdBQU16YSxRQUFVbUQsR0FDaEJzWCxHQUFNL0QsV0FBYXRULEdBQ25CcVgsR0FBTXRhLFVBQVkrWixHQUNsQk8sR0FBTXJPLEtBQU9xTyxHQUFNeFcsTUFBUWlCLEdBQzNCdVYsR0FBTXhOLE9BQVN3TixHQUFNclcsUUFBVStWLEdBQy9CTSxHQUFNdk4sT0FBU3VOLEdBQU1oVyxRQUFVNFYsR0FDL0JJLEdBQU10TixZQUFjc04sR0FBTTVMLGFBQWV1TCxHQUN6Q0ssR0FBTTVLLFVBQVlhLEdBQ2xCK0osR0FBTWx0QixJQUFNMGpCLEdBQ1p3SixHQUFNbEssTUFBUVcsR0FDZHVKLEdBQU1HLFVBQVl4SixHQUNsQnFKLEdBQU1uSixxQkFBdUJBLEdBQzdCbUosR0FBTWEsTUFBUS9KLEdBQ2RrSixHQUFNOUksUUFBVUEsR0FDaEI4SSxHQUFNN0ksWUFBY0EsR0FDcEI2SSxHQUFNNUksTUFBUUEsR0FDZDRJLEdBQU1qTixNQUFRcUUsR0FDZDRJLEdBQU1jLFNBQVdoQixHQUNqQkUsR0FBTWUsU0FBV2hCLEdBQ2pCQyxHQUFNZ0IsTUFBUXpxQixFQUNWLGtEQUNBaXBCLElBRUpRLEdBQU1uZSxPQUFTdEwsRUFDWCxtREFDQWlOLElBRUp3YyxHQUFNbE0sTUFBUXZkLEVBQ1YsaURBQ0ErTixJQUVKMGIsR0FBTWxGLEtBQU92a0IsRUFDVCwyR0FDQWdnQixJQUVKeUosR0FBTWlCLGFBQWUxcUIsRUFDakIsMEdBQ0F3Z0IsSUFlSixJQUFJbUssR0FBVXhwQixFQUFPeGEsVUF1Q3JCLFNBQVNpa0MsR0FBTXp1QixFQUFRMHVCLEVBQU9DLEVBQU9DLEdBQ2pDLElBQUkzdUIsRUFBU3FaLEtBQ1RsWixFQUFNTCxJQUFZeUUsSUFBSW9xQixFQUFRRixHQUNsQyxPQUFPenVCLEVBQU8wdUIsR0FBT3Z1QixFQUFLSixHQUc5QixTQUFTNnVCLEdBQWU3dUIsRUFBUTB1QixFQUFPQyxHQVFuQyxHQVBJbHZCLEVBQVNPLEtBQ1QwdUIsRUFBUTF1QixFQUNSQSxPQUFTaFIsR0FHYmdSLEVBQVNBLEdBQVUsR0FFTixNQUFUMHVCLEVBQ0EsT0FBT0QsR0FBTXp1QixFQUFRMHVCLEVBQU9DLEVBQU8sU0FHdkMsSUFBSTlqQyxFQUNBaWtDLEVBQU0sR0FDVixJQUFLamtDLEVBQUksRUFBR0EsRUFBSSxHQUFJQSxJQUNoQmlrQyxFQUFJamtDLEdBQUs0akMsR0FBTXp1QixFQUFRblYsRUFBRzhqQyxFQUFPLFNBRXJDLE9BQU9HLEVBV1gsU0FBU0MsR0FBaUJDLEVBQWNodkIsRUFBUTB1QixFQUFPQyxHQUN2QixrQkFBakJLLEdBQ0h2dkIsRUFBU08sS0FDVDB1QixFQUFRMXVCLEVBQ1JBLE9BQVNoUixHQUdiZ1IsRUFBU0EsR0FBVSxLQUduQjB1QixFQURBMXVCLEVBQVNndkIsRUFFVEEsR0FBZSxFQUVYdnZCLEVBQVNPLEtBQ1QwdUIsRUFBUTF1QixFQUNSQSxPQUFTaFIsR0FHYmdSLEVBQVNBLEdBQVUsSUFHdkIsSUFFSW5WLEVBRkFvVixFQUFTcVosS0FDVDJWLEVBQVFELEVBQWUvdUIsRUFBT3NULE1BQU1oQixJQUFNLEVBRTFDdWMsRUFBTSxHQUVWLEdBQWEsTUFBVEosRUFDQSxPQUFPRCxHQUFNenVCLEdBQVMwdUIsRUFBUU8sR0FBUyxFQUFHTixFQUFPLE9BR3JELElBQUs5akMsRUFBSSxFQUFHQSxFQUFJLEVBQUdBLElBQ2Zpa0MsRUFBSWprQyxHQUFLNGpDLEdBQU16dUIsR0FBU25WLEVBQUlva0MsR0FBUyxFQUFHTixFQUFPLE9BRW5ELE9BQU9HLEVBR1gsU0FBU0ksR0FBV2x2QixFQUFRMHVCLEdBQ3hCLE9BQU9HLEdBQWU3dUIsRUFBUTB1QixFQUFPLFVBR3pDLFNBQVNTLEdBQWdCbnZCLEVBQVEwdUIsR0FDN0IsT0FBT0csR0FBZTd1QixFQUFRMHVCLEVBQU8sZUFHekMsU0FBU1UsR0FBYUosRUFBY2h2QixFQUFRMHVCLEdBQ3hDLE9BQU9LLEdBQWlCQyxFQUFjaHZCLEVBQVEwdUIsRUFBTyxZQUd6RCxTQUFTVyxHQUFrQkwsRUFBY2h2QixFQUFRMHVCLEdBQzdDLE9BQU9LLEdBQWlCQyxFQUFjaHZCLEVBQVEwdUIsRUFBTyxpQkFHekQsU0FBU1ksR0FBZ0JOLEVBQWNodkIsRUFBUTB1QixHQUMzQyxPQUFPSyxHQUFpQkMsRUFBY2h2QixFQUFRMHVCLEVBQU8sZUE1SHpERixHQUFRaHBCLFNBQVdBLEVBQ25CZ3BCLEdBQVFqbkIsZUFBaUJBLEVBQ3pCaW5CLEdBQVFubkIsWUFBY0EsRUFDdEJtbkIsR0FBUTNuQixRQUFVQSxFQUNsQjJuQixHQUFRck8sU0FBV3VOLEdBQ25CYyxHQUFRaEcsV0FBYWtGLEdBQ3JCYyxHQUFRL2tCLGFBQWVBLEVBQ3ZCK2tCLEdBQVExa0IsV0FBYUEsR0FDckIwa0IsR0FBUWhxQixJQUFNQSxFQUNkZ3FCLEdBQVF4RSxLQUFPRCxHQUNmeUUsR0FBUTVCLFVBQVl4QyxHQUNwQm9FLEdBQVF4UCxnQkFBa0J1TCxHQUMxQmlFLEdBQVF2RCxjQUFnQkEsR0FDeEJ1RCxHQUFRM0QsY0FBZ0JBLEdBQ3hCMkQsR0FBUXJELGdCQUFrQkEsR0FFMUJxRCxHQUFRcmYsT0FBU1MsR0FDakI0ZSxHQUFRdGYsWUFBY2EsR0FDdEJ5ZSxHQUFRbGYsWUFBY21CLEdBQ3RCK2QsR0FBUW5mLFlBQWNBLEdBQ3RCbWYsR0FBUXBmLGlCQUFtQkEsR0FDM0JvZixHQUFRNWIsS0FBT1UsR0FDZmtiLEdBQVFlLGVBQWlCN2IsR0FDekI4YSxHQUFRZ0IsZUFBaUIvYixHQUV6QithLEdBQVFuYSxTQUFXVSxHQUNuQnlaLEdBQVFyYSxZQUFjaUIsR0FDdEJvWixHQUFRcGEsY0FBZ0JjLEdBQ3hCc1osR0FBUXphLGNBQWdCNEIsR0FFeEI2WSxHQUFRaGEsY0FBZ0JBLEdBQ3hCZ2EsR0FBUWphLG1CQUFxQkEsR0FDN0JpYSxHQUFRbGEsaUJBQW1CQSxHQUUzQmthLEdBQVEvVyxLQUFPTCxHQUNmb1gsR0FBUXJ0QixTQUFXNlcsR0E0Rm5CbUIsR0FBbUIsS0FBTSxDQUNyQjZRLEtBQU0sQ0FDRixDQUNJRSxNQUFPLGFBQ1BDLE1BQU8sRUFBQSxFQUNQM0gsT0FBUSxFQUNSdDJCLEtBQU0sY0FDTm8rQixPQUFRLEtBQ1I5USxLQUFNLE1BRVYsQ0FDSTBRLE1BQU8sYUFDUEMsT0FBTyxFQUFBLEVBQ1AzSCxPQUFRLEVBQ1J0MkIsS0FBTSxnQkFDTm8rQixPQUFRLEtBQ1I5USxLQUFNLE9BR2RwQix1QkFBd0IsdUJBQ3hCdlIsUUFBUyxTQUFVZixHQUNmLElBQUl6RyxFQUFJeUcsRUFBUyxHQVdqQixPQUFPQSxHQVRnQyxJQUEvQnlGLEdBQU96RixFQUFTLElBQU8sSUFDakIsS0FDTSxJQUFOekcsRUFDQSxLQUNNLElBQU5BLEVBQ0EsS0FDTSxJQUFOQSxFQUNBLEtBQ0EsU0FPdEJMLEVBQU14RyxLQUFPcUwsRUFDVCx3REFDQXNWLElBRUpuYSxFQUFNeXdCLFNBQVc1ckIsRUFDYixnRUFDQXlWLElBR0osSUFBSW9XLEdBQVV2K0IsS0FBS0MsSUFFbkIsU0FBU0EsS0FDTCxJQUFJZ0gsRUFBTy9NLEtBQUt3MkIsTUFhaEIsT0FYQXgyQixLQUFLczJCLGNBQWdCK04sR0FBUXJrQyxLQUFLczJCLGVBQ2xDdDJCLEtBQUt1MkIsTUFBUThOLEdBQVFya0MsS0FBS3UyQixPQUMxQnYyQixLQUFLd2tCLFFBQVU2ZixHQUFRcmtDLEtBQUt3a0IsU0FFNUJ6WCxFQUFLc3BCLGFBQWVnTyxHQUFRdDNCLEVBQUtzcEIsY0FDakN0cEIsRUFBS2tmLFFBQVVvWSxHQUFRdDNCLEVBQUtrZixTQUM1QmxmLEVBQUs2ZSxRQUFVeVksR0FBUXQzQixFQUFLNmUsU0FDNUI3ZSxFQUFLMGUsTUFBUTRZLEdBQVF0M0IsRUFBSzBlLE9BQzFCMWUsRUFBSytXLE9BQVN1Z0IsR0FBUXQzQixFQUFLK1csUUFDM0IvVyxFQUFLZ3BCLE1BQVFzTyxHQUFRdDNCLEVBQUtncEIsT0FFbkIvMUIsS0FHWCxTQUFTc2tDLEdBQWN4TyxFQUFVNXFCLEVBQU9ySSxFQUFPcTNCLEdBQzNDLElBQUloRixFQUFRVSxHQUFlMXFCLEVBQU9ySSxHQU1sQyxPQUpBaXpCLEVBQVNRLGVBQWlCNEQsRUFBWWhGLEVBQU1vQixjQUM1Q1IsRUFBU1MsT0FBUzJELEVBQVloRixFQUFNcUIsTUFDcENULEVBQVN0UixTQUFXMFYsRUFBWWhGLEVBQU0xUSxRQUUvQnNSLEVBQVNXLFVBSXBCLFNBQVM4TixHQUFNcjVCLEVBQU9ySSxHQUNsQixPQUFPeWhDLEdBQWN0a0MsS0FBTWtMLEVBQU9ySSxFQUFPLEdBSTdDLFNBQVMyaEMsR0FBV3Q1QixFQUFPckksR0FDdkIsT0FBT3loQyxHQUFjdGtDLEtBQU1rTCxFQUFPckksR0FBUSxHQUc5QyxTQUFTNGhDLEdBQVFocUIsR0FDYixPQUFJQSxFQUFTLEVBQ0YzVSxLQUFLbWEsTUFBTXhGLEdBRVgzVSxLQUFLa2EsS0FBS3ZGLEdBSXpCLFNBQVNpcUIsS0FDTCxJQUlJelksRUFDQUwsRUFDQUgsRUFDQXNLLEVBQ0E0TyxFQVJBdE8sRUFBZXIyQixLQUFLczJCLGNBQ3BCRixFQUFPcDJCLEtBQUt1MkIsTUFDWnpTLEVBQVM5akIsS0FBS3drQixRQUNkelgsRUFBTy9NLEtBQUt3MkIsTUFnRGhCLE9BckNTSCxHQUFnQixHQUFLRCxHQUFRLEdBQUt0UyxHQUFVLEdBQzVDdVMsR0FBZ0IsR0FBS0QsR0FBUSxHQUFLdFMsR0FBVSxJQUdqRHVTLEdBQXVELE1BQXZDb08sR0FBUUcsR0FBYTlnQixHQUFVc1MsR0FDL0NBLEVBQU8sRUFDUHRTLEVBQVMsR0FLYi9XLEVBQUtzcEIsYUFBZUEsRUFBZSxJQUVuQ3BLLEVBQVVsTSxHQUFTc1csRUFBZSxLQUNsQ3RwQixFQUFLa2YsUUFBVUEsRUFBVSxHQUV6QkwsRUFBVTdMLEdBQVNrTSxFQUFVLElBQzdCbGYsRUFBSzZlLFFBQVVBLEVBQVUsR0FFekJILEVBQVExTCxHQUFTNkwsRUFBVSxJQUMzQjdlLEVBQUswZSxNQUFRQSxFQUFRLEdBRXJCMkssR0FBUXJXLEdBQVMwTCxFQUFRLElBSXpCM0gsR0FEQTZnQixFQUFpQjVrQixHQUFTOGtCLEdBQWF6TyxJQUV2Q0EsR0FBUXFPLEdBQVFHLEdBQWFELElBRzdCNU8sRUFBUWhXLEdBQVMrRCxFQUFTLElBQzFCQSxHQUFVLEdBRVYvVyxFQUFLcXBCLEtBQU9BLEVBQ1pycEIsRUFBSytXLE9BQVNBLEVBQ2QvVyxFQUFLZ3BCLE1BQVFBLEVBRU4vMUIsS0FHWCxTQUFTNmtDLEdBQWF6TyxHQUdsQixPQUFlLEtBQVBBLEVBQWUsT0FHM0IsU0FBU3dPLEdBQWE5Z0IsR0FFbEIsT0FBaUIsT0FBVEEsRUFBbUIsS0FHL0IsU0FBU2doQixHQUFHN2xCLEdBQ1IsSUFBS2pmLEtBQUtvVyxVQUNOLE9BQU9ZLElBRVgsSUFBSW9mLEVBQ0F0UyxFQUNBdVMsRUFBZXIyQixLQUFLczJCLGNBSXhCLEdBQWMsV0FGZHJYLEVBQVFELEdBQWVDLEtBRVksWUFBVkEsR0FBaUMsU0FBVkEsRUFHNUMsT0FGQW1YLEVBQU9wMkIsS0FBS3UyQixNQUFRRixFQUFlLE1BQ25DdlMsRUFBUzlqQixLQUFLd2tCLFFBQVVxZ0IsR0FBYXpPLEdBQzdCblgsR0FDSixJQUFLLFFBQ0QsT0FBTzZFLEVBQ1gsSUFBSyxVQUNELE9BQU9BLEVBQVMsRUFDcEIsSUFBSyxPQUNELE9BQU9BLEVBQVMsUUFLeEIsT0FEQXNTLEVBQU9wMkIsS0FBS3UyQixNQUFRendCLEtBQUs4d0IsTUFBTWdPLEdBQWE1a0MsS0FBS3drQixVQUN6Q3ZGLEdBQ0osSUFBSyxPQUNELE9BQU9tWCxFQUFPLEVBQUlDLEVBQWUsT0FDckMsSUFBSyxNQUNELE9BQU9ELEVBQU9DLEVBQWUsTUFDakMsSUFBSyxPQUNELE9BQWMsR0FBUEQsRUFBWUMsRUFBZSxLQUN0QyxJQUFLLFNBQ0QsT0FBYyxLQUFQRCxFQUFjQyxFQUFlLElBQ3hDLElBQUssU0FDRCxPQUFjLE1BQVBELEVBQWVDLEVBQWUsSUFFekMsSUFBSyxjQUNELE9BQU92d0IsS0FBS21hLE1BQWEsTUFBUG1XLEdBQWdCQyxFQUN0QyxRQUNJLE1BQU0sSUFBSXhkLE1BQU0sZ0JBQWtCb0csSUFNbEQsU0FBUzhsQixLQUNMLE9BQUsva0MsS0FBS29XLFVBSU5wVyxLQUFLczJCLGNBQ1EsTUFBYnQyQixLQUFLdTJCLE1BQ0p2MkIsS0FBS3drQixRQUFVLEdBQU0sT0FDSyxRQUEzQnRFLEdBQU1sZ0IsS0FBS3drQixRQUFVLElBTmR4TixJQVVmLFNBQVNndUIsR0FBT0MsR0FDWixPQUFPLFdBQ0gsT0FBT2psQyxLQUFLOGtDLEdBQUdHLElBSXZCLElBQUlDLEdBQWlCRixHQUFPLE1BQ3hCRyxHQUFZSCxHQUFPLEtBQ25CSSxHQUFZSixHQUFPLEtBQ25CSyxHQUFVTCxHQUFPLEtBQ2pCTSxHQUFTTixHQUFPLEtBQ2hCTyxHQUFVUCxHQUFPLEtBQ2pCUSxHQUFXUixHQUFPLEtBQ2xCUyxHQUFhVCxHQUFPLEtBQ3BCVSxHQUFVVixHQUFPLEtBRXJCLFNBQVNXLEtBQ0wsT0FBTy9QLEdBQWU1MUIsTUFHMUIsU0FBUzRsQyxHQUFNM21CLEdBRVgsT0FEQUEsRUFBUUQsR0FBZUMsR0FDaEJqZixLQUFLb1csVUFBWXBXLEtBQUtpZixFQUFRLE9BQVNqSSxJQUdsRCxTQUFTNnVCLEdBQVdobEMsR0FDaEIsT0FBTyxXQUNILE9BQU9iLEtBQUtvVyxVQUFZcFcsS0FBS3cyQixNQUFNMzFCLEdBQVFtVyxLQUluRCxJQUFJcWYsR0FBZXdQLEdBQVcsZ0JBQzFCNVosR0FBVTRaLEdBQVcsV0FDckJqYSxHQUFVaWEsR0FBVyxXQUNyQnBhLEdBQVFvYSxHQUFXLFNBQ25CelAsR0FBT3lQLEdBQVcsUUFDbEIvaEIsR0FBUytoQixHQUFXLFVBQ3BCOVAsR0FBUThQLEdBQVcsU0FFdkIsU0FBUzNQLEtBQ0wsT0FBT25XLEdBQVMvZixLQUFLbzJCLE9BQVMsR0FHbEMsSUFBSVEsR0FBUTl3QixLQUFLOHdCLE1BQ2JrUCxHQUFhLENBQ1R0b0IsR0FBSSxHQUNKRCxFQUFHLEdBQ0hySCxFQUFHLEdBQ0h3SCxFQUFHLEdBQ0hFLEVBQUcsR0FDSEUsRUFBRyxLQUNIRSxFQUFHLElBSVgsU0FBUytuQixHQUFrQnpuQixFQUFRN0QsRUFBUTRELEVBQWVFLEVBQVUzSixHQUNoRSxPQUFPQSxFQUFPd0osYUFBYTNELEdBQVUsSUFBSzRELEVBQWVDLEVBQVFDLEdBR3JFLFNBQVN5bkIsR0FBZUMsRUFBZ0I1bkIsRUFBZXluQixFQUFZbHhCLEdBQy9ELElBQUlraEIsRUFBV0YsR0FBZXFRLEdBQWdCbGdDLE1BQzFDa21CLEVBQVUySyxHQUFNZCxFQUFTZ1AsR0FBRyxNQUM1QmxaLEVBQVVnTCxHQUFNZCxFQUFTZ1AsR0FBRyxNQUM1QnJaLEVBQVFtTCxHQUFNZCxFQUFTZ1AsR0FBRyxNQUMxQjFPLEVBQU9RLEdBQU1kLEVBQVNnUCxHQUFHLE1BQ3pCaGhCLEVBQVM4UyxHQUFNZCxFQUFTZ1AsR0FBRyxNQUMzQjVPLEVBQVFVLEdBQU1kLEVBQVNnUCxHQUFHLE1BQzFCL08sRUFBUWEsR0FBTWQsRUFBU2dQLEdBQUcsTUFDMUIvd0IsRUFDS2tZLEdBQVc2WixFQUFXdG9CLElBQU0sQ0FBQyxJQUFLeU8sSUFDbENBLEVBQVU2WixFQUFXdm9CLEdBQUssQ0FBQyxLQUFNME8sSUFDakNMLEdBQVcsR0FBSyxDQUFDLE1BQ2pCQSxFQUFVa2EsRUFBVzV2QixHQUFLLENBQUMsS0FBTTBWLElBQ2pDSCxHQUFTLEdBQUssQ0FBQyxNQUNmQSxFQUFRcWEsRUFBV3BvQixHQUFLLENBQUMsS0FBTStOLElBQy9CMkssR0FBUSxHQUFLLENBQUMsTUFDZEEsRUFBTzBQLEVBQVdsb0IsR0FBSyxDQUFDLEtBQU13WSxHQWdCdkMsT0Fkb0IsTUFBaEIwUCxFQUFXaG9CLElBQ1gvSixFQUNJQSxHQUNDbWlCLEdBQVMsR0FBSyxDQUFDLE1BQ2ZBLEVBQVE0UCxFQUFXaG9CLEdBQUssQ0FBQyxLQUFNb1ksS0FFeENuaUIsRUFBSUEsR0FDQytQLEdBQVUsR0FBSyxDQUFDLE1BQ2hCQSxFQUFTZ2lCLEVBQVc5bkIsR0FBSyxDQUFDLEtBQU04RixJQUNoQ2lTLEdBQVMsR0FBSyxDQUFDLE1BQVMsQ0FBQyxLQUFNQSxJQUVsQyxHQUFLMVgsRUFDUHRLLEVBQUUsSUFBTWt5QixFQUFpQixFQUN6Qmx5QixFQUFFLEdBQUthLEVBQ0FteEIsR0FBa0JobUMsTUFBTSxLQUFNZ1UsR0FJekMsU0FBU215QixHQUEyQkMsR0FDaEMsWUFBeUJ4aUMsSUFBckJ3aUMsRUFDT3ZQLEdBRXFCLG1CQUFyQnVQLElBQ1B2UCxHQUFRdVAsR0FDRCxHQU1mLFNBQVNDLEdBQTRCQyxFQUFXQyxHQUM1QyxZQUE4QjNpQyxJQUExQm1pQyxHQUFXTyxVQUdEMWlDLElBQVYyaUMsRUFDT1IsR0FBV08sSUFFdEJQLEdBQVdPLEdBQWFDLEVBQ04sTUFBZEQsSUFDQVAsR0FBV3RvQixHQUFLOG9CLEVBQVEsSUFFckIsSUFHWCxTQUFTbEosR0FBU21KLEVBQWVDLEdBQzdCLElBQUt4bUMsS0FBS29XLFVBQ04sT0FBT3BXLEtBQUswYixhQUFhTSxjQUc3QixJQUVJcEgsRUFDQTBGLEVBSEFtc0IsR0FBYSxFQUNiQyxFQUFLWixHQXlCVCxNQXJCNkIsaUJBQWxCUyxJQUNQQyxFQUFnQkQsRUFDaEJBLEdBQWdCLEdBRVMsa0JBQWxCQSxJQUNQRSxFQUFhRixHQUVZLGlCQUFsQkMsSUFDUEUsRUFBS3JuQyxPQUFPQyxPQUFPLEdBQUl3bUMsR0FBWVUsR0FDWixNQUFuQkEsRUFBY2pwQixHQUFpQyxNQUFwQmlwQixFQUFjaHBCLEtBQ3pDa3BCLEVBQUdscEIsR0FBS2dwQixFQUFjanBCLEVBQUksSUFLbENqRCxFQUFTMHJCLEdBQWVobUMsTUFBT3ltQyxFQUFZQyxFQUQzQzl4QixFQUFTNVUsS0FBSzBiLGNBR1YrcUIsSUFDQW5zQixFQUFTMUYsRUFBTzZKLFlBQVl6ZSxLQUFNc2EsSUFHL0IxRixFQUFPdW9CLFdBQVc3aUIsR0FHN0IsSUFBSXFzQixHQUFRN2dDLEtBQUtDLElBRWpCLFNBQVN1eEIsR0FBSzNULEdBQ1YsT0FBUUEsRUFBSSxJQUFNQSxFQUFJLEtBQU9BLEVBR2pDLFNBQVNpakIsS0FRTCxJQUFLNW1DLEtBQUtvVyxVQUNOLE9BQU9wVyxLQUFLMGIsYUFBYU0sY0FHN0IsSUFHSTRQLEVBQ0FILEVBQ0FzSyxFQUNBeFksRUFFQXNwQixFQUNBQyxFQUNBQyxFQUNBQyxFQVhBL2EsRUFBVTBhLEdBQU0zbUMsS0FBS3MyQixlQUFpQixJQUN0Q0YsRUFBT3VRLEdBQU0zbUMsS0FBS3UyQixPQUNsQnpTLEVBQVM2aUIsR0FBTTNtQyxLQUFLd2tCLFNBS3BCeWlCLEVBQVFqbkMsS0FBS21sQyxZQU1qQixPQUFLOEIsR0FPTHJiLEVBQVU3TCxHQUFTa00sRUFBVSxJQUM3QlIsRUFBUTFMLEdBQVM2TCxFQUFVLElBQzNCSyxHQUFXLEdBQ1hMLEdBQVcsR0FHWG1LLEVBQVFoVyxHQUFTK0QsRUFBUyxJQUMxQkEsR0FBVSxHQUdWdkcsRUFBSTBPLEVBQVVBLEVBQVFwYSxRQUFRLEdBQUdoSSxRQUFRLFNBQVUsSUFBTSxHQUV6RGc5QixFQUFZSSxFQUFRLEVBQUksSUFBTSxHQUM5QkgsRUFBU3hQLEdBQUt0M0IsS0FBS3drQixXQUFhOFMsR0FBSzJQLEdBQVMsSUFBTSxHQUNwREYsRUFBV3pQLEdBQUt0M0IsS0FBS3UyQixTQUFXZSxHQUFLMlAsR0FBUyxJQUFNLEdBQ3BERCxFQUFVMVAsR0FBS3QzQixLQUFLczJCLGlCQUFtQmdCLEdBQUsyUCxHQUFTLElBQU0sR0FHdkRKLEVBQ0EsS0FDQzlRLEVBQVErUSxFQUFTL1EsRUFBUSxJQUFNLEtBQy9CalMsRUFBU2dqQixFQUFTaGpCLEVBQVMsSUFBTSxLQUNqQ3NTLEVBQU8yUSxFQUFXM1EsRUFBTyxJQUFNLEtBQy9CM0ssR0FBU0csR0FBV0ssRUFBVSxJQUFNLEtBQ3BDUixFQUFRdWIsRUFBVXZiLEVBQVEsSUFBTSxLQUNoQ0csRUFBVW9iLEVBQVVwYixFQUFVLElBQU0sS0FDcENLLEVBQVUrYSxFQUFVenBCLEVBQUksSUFBTSxLQTlCeEIsTUFrQ2YsSUFBSTJwQixHQUFVclIsR0FBUzEyQixVQXdHdkIsT0F0R0ErbkMsR0FBUTl3QixRQUFVc2YsR0FDbEJ3UixHQUFRbmhDLElBQU1BLEdBQ2RtaEMsR0FBUTNlLElBQU1nYyxHQUNkMkMsR0FBUXZPLFNBQVc2TCxHQUNuQjBDLEdBQVFwQyxHQUFLQSxHQUNib0MsR0FBUWhDLGVBQWlCQSxHQUN6QmdDLEdBQVEvQixVQUFZQSxHQUNwQitCLEdBQVE5QixVQUFZQSxHQUNwQjhCLEdBQVE3QixRQUFVQSxHQUNsQjZCLEdBQVE1QixPQUFTQSxHQUNqQjRCLEdBQVEzQixRQUFVQSxHQUNsQjJCLEdBQVExQixTQUFXQSxHQUNuQjBCLEdBQVF6QixXQUFhQSxHQUNyQnlCLEdBQVF4QixRQUFVQSxHQUNsQndCLEdBQVF6eUIsUUFBVXN3QixHQUNsQm1DLEdBQVF6USxRQUFVaU8sR0FDbEJ3QyxHQUFRclAsTUFBUThOLEdBQ2hCdUIsR0FBUTE3QixJQUFNbzZCLEdBQ2RzQixHQUFRN1EsYUFBZUEsR0FDdkI2USxHQUFRamIsUUFBVUEsR0FDbEJpYixHQUFRdGIsUUFBVUEsR0FDbEJzYixHQUFRemIsTUFBUUEsR0FDaEJ5YixHQUFROVEsS0FBT0EsR0FDZjhRLEdBQVFoUixNQUFRQSxHQUNoQmdSLEdBQVFwakIsT0FBU0EsR0FDakJvakIsR0FBUW5SLE1BQVFBLEdBQ2hCbVIsR0FBUTlKLFNBQVdBLEdBQ25COEosR0FBUXpLLFlBQWNtSyxHQUN0Qk0sR0FBUXZtQyxTQUFXaW1DLEdBQ25CTSxHQUFRN0ksT0FBU3VJLEdBQ2pCTSxHQUFRdHlCLE9BQVNBLEdBQ2pCc3lCLEdBQVF4ckIsV0FBYUEsR0FFckJ3ckIsR0FBUUMsWUFBYzN1QixFQUNsQixzRkFDQW91QixJQUVKTSxHQUFRLzVCLEtBQU9BLEdBSWZrTyxFQUFlLElBQUssRUFBRyxFQUFHLFFBQzFCQSxFQUFlLElBQUssRUFBRyxFQUFHLFdBSTFCNEcsR0FBYyxJQUFLTCxJQUNuQkssR0FBYyxJQUFLRixJQUNuQmEsR0FBYyxLQUFLLFNBQVUxWCxFQUFPMlEsRUFBTzVELEdBQ3ZDQSxFQUFPeFUsR0FBSyxJQUFJNlEsS0FBeUIsSUFBcEJtaEIsV0FBV3ZxQixPQUVwQzBYLEdBQWMsS0FBSyxTQUFVMVgsRUFBTzJRLEVBQU81RCxHQUN2Q0EsRUFBT3hVLEdBQUssSUFBSTZRLEtBQUs0TCxHQUFNaFY7O0FBSy9CeUksRUFBTXl6QixRQUFVLFNBRWhCeHpCLEVBQWdCdWYsSUFFaEJ4ZixFQUFNWSxHQUFLMHRCLEdBQ1h0dUIsRUFBTTZSLElBQU1BLEdBQ1o3UixFQUFNb0gsSUFBTUEsR0FDWnBILEVBQU0wRyxJQUFNQSxHQUNaMUcsRUFBTW9CLElBQU1MLEVBQ1pmLEVBQU13cUIsS0FBTytELEdBQ2J2dUIsRUFBTW1RLE9BQVMrZixHQUNmbHdCLEVBQU1VLE9BQVNBLEVBQ2ZWLEVBQU1pQixPQUFTa1osR0FDZm5hLEVBQU0ybUIsUUFBVXZqQixFQUNoQnBELEVBQU1taUIsU0FBV0YsR0FDakJqaUIsRUFBTXdFLFNBQVdBLEVBQ2pCeEUsRUFBTXFWLFNBQVcrYSxHQUNqQnB3QixFQUFNeXVCLFVBQVlELEdBQ2xCeHVCLEVBQU0rSCxXQUFhdVMsR0FDbkJ0YSxFQUFNK2lCLFdBQWFBLEdBQ25CL2lCLEVBQU1rUSxZQUFjaWdCLEdBQ3BCbndCLEVBQU1tVixZQUFjbWIsR0FDcEJ0d0IsRUFBTXVhLGFBQWVBLEdBQ3JCdmEsRUFBTTBhLGFBQWVBLEdBQ3JCMWEsRUFBTXNaLFFBQVVzQixHQUNoQjVhLEVBQU1vVixjQUFnQmliLEdBQ3RCcndCLEVBQU1xTCxlQUFpQkEsR0FDdkJyTCxFQUFNMHpCLHFCQUF1Qm5CLEdBQzdCdnlCLEVBQU0yekIsc0JBQXdCbEIsR0FDOUJ6eUIsRUFBTTZuQixlQUFpQlAsR0FDdkJ0bkIsRUFBTXhVLFVBQVk4aUMsR0FHbEJ0dUIsRUFBTTR6QixVQUFZLENBQ2RDLGVBQWdCLG1CQUNoQkMsdUJBQXdCLHNCQUN4QkMsa0JBQW1CLDBCQUNuQnZrQixLQUFNLGFBQ053a0IsS0FBTSxRQUNOQyxhQUFjLFdBQ2RDLFFBQVMsZUFDVHJrQixLQUFNLGFBQ05OLE1BQU8sV0FHSnZQLEVBNWhMeUVtMEI7Ozs7OztBQ0RuRixJQUFVQyxFQUFNRCxFQUFOQyxFQVdUL25DLEtBWGU4bkMsRUFXVCxTQUFVRSxRQUlNcmtDLElBQW5CcWtDLEVBQU9aLFNBQXlCWSxFQUFPQyxVQUMxQ0QsRUFBU0EsRUFBT0MsU0FTakIsSUFNQ0MsRUFMQUMsRUFBUSxHQUNSQyxFQUFRLEdBQ1JDLEVBQVksR0FDWjdhLEVBQVEsR0FDUjhhLEVBQVUsR0FHTk4sR0FBb0MsaUJBQW5CQSxFQUFPWixTQUM1Qm1CLEVBQVMsZ0dBR1YsSUFBSUMsRUFBZ0JSLEVBQU9aLFFBQVF4OUIsTUFBTSxLQUN4QzYrQixHQUFTRCxFQUFjLEdBQ3ZCRSxHQUFTRixFQUFjLEdBV3hCLFNBQVNHLEVBQWNDLEdBQ3RCLE9BQUlBLEVBQVcsR0FDUEEsRUFBVyxHQUNSQSxFQUFXLEdBQ2RBLEVBQVcsR0FFWkEsRUFBVyxHQUduQixTQUFTQyxFQUFhdnFCLEdBQ3JCLElBQUk5ZSxFQUFJLEVBQ1A2TCxFQUFRaVQsRUFBTzFVLE1BQU0sS0FDckJrL0IsRUFBUXo5QixFQUFNLEdBQ2QwOUIsRUFBYTE5QixFQUFNLElBQU0sR0FDekIyOUIsRUFBYSxFQUVidkYsRUFBTSxFQUNObk0sRUFBTyxFQVNSLElBTjZCLEtBQXpCaFosRUFBTzJxQixXQUFXLEtBQ3JCenBDLEVBQUksRUFDSjgzQixHQUFRLEdBSUQ5M0IsRUFBSXNwQyxFQUFNcHBDLE9BQVFGLElBRXpCaWtDLEVBQU0sR0FBS0EsRUFETGtGLEVBQWNHLEVBQU1HLFdBQVd6cEMsSUFLdEMsSUFBS0EsRUFBSSxFQUFHQSxFQUFJdXBDLEVBQVdycEMsT0FBUUYsSUFDbEN3cEMsR0FBMEIsR0FFMUJ2RixHQURNa0YsRUFBY0ksRUFBV0UsV0FBV3pwQyxJQUM3QndwQyxFQUdkLE9BQU92RixFQUFNbk0sRUFHZCxTQUFTNFIsRUFBWXJ0QixHQUNwQixJQUFLLElBQUlyYyxFQUFJLEVBQUdBLEVBQUlxYyxFQUFNbmMsT0FBUUYsSUFDakNxYyxFQUFNcmMsR0FBS3FwQyxFQUFhaHRCLEVBQU1yYyxJQVloQyxTQUFTMnBDLEVBQVl4cEMsRUFBUXlwQyxHQUM1QixJQUFjNXBDLEVBQVZpa0MsRUFBTSxHQUVWLElBQUtqa0MsRUFBSSxFQUFHQSxFQUFJNHBDLEVBQVExcEMsT0FBUUYsSUFDL0Jpa0MsRUFBSWprQyxHQUFLRyxFQUFPeXBDLEVBQVE1cEMsSUFHekIsT0FBT2lrQyxFQUdSLFNBQVM0RixFQUFRL3FCLEdBQ2hCLElBQUl2UixFQUFPdVIsRUFBTzFVLE1BQU0sS0FDdkIwL0IsRUFBVXY4QixFQUFLLEdBQUduRCxNQUFNLEtBQ3hCdy9CLEVBQVVyOEIsRUFBSyxHQUFHbkQsTUFBTSxJQUN4QjIvQixFQUFVeDhCLEVBQUssR0FBR25ELE1BQU0sS0FRekIsT0FOQXMvQixFQUFXSSxHQUNYSixFQUFXRSxHQUNYRixFQUFXSyxHQTFCWixTQUFxQjF0QixFQUFPbmMsR0FDM0IsSUFBSyxJQUFJRixFQUFJLEVBQUdBLEVBQUlFLEVBQVFGLElBQzNCcWMsRUFBTXJjLEdBQUtzRyxLQUFLOHdCLE9BQU8vYSxFQUFNcmMsRUFBSSxJQUFNLEdBQWlCLElBQVhxYyxFQUFNcmMsSUFHcERxYyxFQUFNbmMsRUFBUyxHQUFLOHBDLEVBQUFBLEVBdUJwQkMsQ0FBV0YsRUFBUUgsRUFBUTFwQyxRQUVwQixDQUNObUIsS0FBYWtNLEVBQUssR0FDbEIyOEIsTUFBYVAsRUFBV3A4QixFQUFLLEdBQUduRCxNQUFNLEtBQU13L0IsR0FDNUNFLFFBQWFILEVBQVdHLEVBQVNGLEdBQ2pDRyxPQUFhQSxFQUNiSSxXQUF1QixFQUFWNThCLEVBQUssSUFRcEIsU0FBUzY4QixFQUFNQyxHQUNWQSxHQUNIN3BDLEtBQUs4cEMsS0FBS1QsRUFBT1EsSUE0RW5CLFNBQVNFLEVBQVNDLEVBQWNDLEdBQy9CanFDLEtBQUthLEtBQU9tcEMsRUFDWmhxQyxLQUFLbW9DLE1BQVE4QixFQU9kLFNBQVNDLEVBQVNDLEdBQ2pCLElBQUlDLEVBQWFELEVBQUdFLGVBQ2hCbGMsRUFBT2ljLEVBQVc1aUMsTUFBTSxnQkFhZixTQVJaMm1CLEVBSkdBLEdBQVFBLEVBQUssSUFHaEJBLEVBQU9BLEVBQUssR0FBRzNtQixNQUFNLFdBQ1AybUIsRUFBS3ppQixLQUFLLFNBQU0vSCxHQUk5QndxQixFQUFPaWMsRUFBVzVpQyxNQUFNLGdCQUNWMm1CLEVBQUssUUFBS3hxQixLQUl4QndxQixPQUFPeHFCLEdBR1IzRCxLQUFLbXFDLElBQU1BLEVBQ1hucUMsS0FBS211QixLQUFPQSxFQUNabnVCLEtBQUttM0IsT0FBU2dULEVBQUdsUyxvQkFHbEIsU0FBU3FTLEVBQVV2TixHQUNsQi84QixLQUFLKzhCLEtBQU9BLEVBQ1ovOEIsS0FBS3VxQyxZQUFjLEVBQ25CdnFDLEtBQUt3cUMsVUFBWSxFQVVsQixTQUFTQyxFQUFXQyxFQUFLQyxHQUd4QixJQUZBLElBQUlDLEVBQUtsc0IsRUFFREEsRUFBeUMsTUFBaENpc0IsRUFBS1IsR0FBS08sRUFBSVAsSUFBTSxLQUFPLEtBQzNDUyxFQUFNLElBQUlWLEVBQVMsSUFBSTUxQixLQUFLbzJCLEVBQUlQLEdBQUt6ckIsS0FDN0J5WSxTQUFXdVQsRUFBSXZULE9BQ3RCdVQsRUFBTUUsRUFFTkQsRUFBT0MsRUFJVCxPQUFPRixFQTJCUixTQUFTRyxFQUFnQjkyQixFQUFHQyxHQUMzQixPQUFJRCxFQUFFdzJCLGNBQWdCdjJCLEVBQUV1MkIsWUFDaEJ4MkIsRUFBRXcyQixZQUFjdjJCLEVBQUV1MkIsWUFFdEJ4MkIsRUFBRXkyQixZQUFjeDJCLEVBQUV3MkIsVUFDZHoyQixFQUFFeTJCLFVBQVl4MkIsRUFBRXcyQixVQUVwQnoyQixFQUFFZ3BCLEtBQUs0TSxhQUFlMzFCLEVBQUUrb0IsS0FBSzRNLFdBQ3pCMzFCLEVBQUUrb0IsS0FBSzRNLFdBQWE1MUIsRUFBRWdwQixLQUFLNE0sV0FFNUIzMUIsRUFBRStvQixLQUFLbDhCLEtBQUtpcUMsY0FBYy8yQixFQUFFZ3BCLEtBQUtsOEIsTUFHekMsU0FBU2txQyxFQUFjbHFDLEVBQU15b0MsR0FDNUIsSUFBSTlwQyxFQUFHMjNCLEVBRVAsSUFEQStSLEVBQVdJLEdBQ045cEMsRUFBSSxFQUFHQSxFQUFJOHBDLEVBQVE1cEMsT0FBUUYsSUFDL0IyM0IsRUFBU21TLEVBQVE5cEMsR0FDakI4b0MsRUFBUW5SLEdBQVVtUixFQUFRblIsSUFBVyxHQUNyQ21SLEVBQVFuUixHQUFRdDJCLElBQVEsRUFJMUIsU0FBU21xQyxFQUF1QjFCLEdBQy9CLElBR0M5cEMsRUFBR2l1QixFQUFHd2QsRUFISEMsRUFBZ0I1QixFQUFRNXBDLE9BQzNCeXJDLEVBQWtCLEdBQ2xCMUgsRUFBTSxHQUdQLElBQUtqa0MsRUFBSSxFQUFHQSxFQUFJMHJDLEVBQWUxckMsSUFFOUIsSUFBS2l1QixLQURMd2QsRUFBZ0IzQyxFQUFRZ0IsRUFBUTlwQyxHQUFHMjNCLFNBQVcsR0FFekM4VCxFQUFjcHJDLGVBQWU0dEIsS0FDaEMwZCxFQUFnQjFkLElBQUssR0FLeEIsSUFBS2p1QixLQUFLMnJDLEVBQ0xBLEVBQWdCdHJDLGVBQWVMLElBQ2xDaWtDLEVBQUl6L0IsS0FBS3dwQixFQUFNaHVCLElBSWpCLE9BQU9pa0MsRUFHUixTQUFTMkgsSUFHUixJQUNDLElBQUlDLEVBQVdDLEtBQUtDLGlCQUFpQkMsa0JBQWtCQyxTQUN2RCxHQUFJSixHQUFZQSxFQUFTM3JDLE9BQVMsRUFBRyxDQUNwQyxJQUFJbUIsRUFBTzJzQixFQUFNa2UsRUFBY0wsSUFDL0IsR0FBSXhxQyxFQUNILE9BQU9BLEVBRVIwbkMsRUFBUyx5QkFBMkI4QyxFQUFXLDJEQUUvQyxNQUFPdGQsSUFJVCxJQUlDNGQsRUFBV25zQyxFQUFHaXVCLEVBSlg2YixFQXZGTCxXQUNDLElBR0NzQyxFQUFROW5DLEVBQU10RSxFQUhYcXNDLEdBQVksSUFBSXYzQixNQUFPcVMsY0FBZ0IsRUFDMUNtbEIsRUFBTyxJQUFJNUIsRUFBUyxJQUFJNTFCLEtBQUt1M0IsRUFBVyxFQUFHLElBQzNDdkMsRUFBVSxDQUFDd0MsR0FHWixJQUFLdHNDLEVBQUksRUFBR0EsRUFBSSxHQUFJQSxLQUNuQnNFLEVBQU8sSUFBSW9tQyxFQUFTLElBQUk1MUIsS0FBS3UzQixFQUFXcnNDLEVBQUcsS0FDbEMyM0IsU0FBVzJVLEVBQUszVSxTQUN4QnlVLEVBQVNuQixFQUFXcUIsRUFBTWhvQyxHQUMxQndsQyxFQUFRdGxDLEtBQUs0bkMsR0FDYnRDLEVBQVF0bEMsS0FBSyxJQUFJa21DLEVBQVMsSUFBSTUxQixLQUFLczNCLEVBQU96QixHQUFLLFFBRWhEMkIsRUFBT2hvQyxFQUdSLElBQUt0RSxFQUFJLEVBQUdBLEVBQUksRUFBR0EsSUFDbEI4cEMsRUFBUXRsQyxLQUFLLElBQUlrbUMsRUFBUyxJQUFJNTFCLEtBQUt1M0IsRUFBWXJzQyxFQUFHLEVBQUcsS0FDckQ4cEMsRUFBUXRsQyxLQUFLLElBQUlrbUMsRUFBUyxJQUFJNTFCLEtBQUt1M0IsRUFBWXJzQyxFQUFHLEVBQUcsS0FHdEQsT0FBTzhwQyxFQWtFT3lDLEdBQ2JiLEVBQWdCNUIsRUFBUTVwQyxPQUN4QjRvQyxFQUFVMEMsRUFBc0IxQixHQUNoQzBDLEVBQWEsR0FHZCxJQUFLeHNDLEVBQUksRUFBR0EsRUFBSThvQyxFQUFRNW9DLE9BQVFGLElBQUssQ0FFcEMsSUFEQW1zQyxFQUFZLElBQUlyQixFQUFVMkIsRUFBUTNELEVBQVE5b0MsSUFBSzByQyxHQUMxQ3pkLEVBQUksRUFBR0EsRUFBSXlkLEVBQWV6ZCxJQUM5QmtlLEVBQVVPLGNBQWM1QyxFQUFRN2IsSUFFakN1ZSxFQUFXaG9DLEtBQUsybkMsR0FLakIsT0FGQUssRUFBV3BzQixLQUFLaXJCLEdBRVRtQixFQUFXdHNDLE9BQVMsRUFBSXNzQyxFQUFXLEdBQUdqUCxLQUFLbDhCLFVBQU84QyxFQWMxRCxTQUFTK25DLEVBQWU3cUMsR0FDdkIsT0FBUUEsR0FBUSxJQUFJd0YsY0FBY3dELFFBQVEsTUFBTyxLQUdsRCxTQUFTc2lDLEVBQVNDLEdBQ2pCLElBQUk1c0MsRUFBR3FCLEVBQU0rSSxFQUFPeWlDLEVBTXBCLElBSnNCLGlCQUFYRCxJQUNWQSxFQUFTLENBQUNBLElBR041c0MsRUFBSSxFQUFHQSxFQUFJNHNDLEVBQU8xc0MsT0FBUUYsSUFHOUI2c0MsRUFBYVgsRUFEYjdxQyxHQURBK0ksRUFBUXdpQyxFQUFPNXNDLEdBQUdvSyxNQUFNLE1BQ1gsSUFFYnUrQixFQUFNa0UsR0FBY0QsRUFBTzVzQyxHQUMzQmd1QixFQUFNNmUsR0FBY3hyQyxFQUNwQmtxQyxFQUFhc0IsRUFBWXppQyxFQUFNLEdBQUdBLE1BQU0sTUFJMUMsU0FBU3FpQyxFQUFTcHJDLEVBQU15ckMsR0FFdkJ6ckMsRUFBTzZxQyxFQUFjN3FDLEdBRXJCLElBQ0kwckMsRUFEQXhQLEVBQU9vTCxFQUFNdG5DLEdBR2pCLE9BQUlrOEIsYUFBZ0I2TSxFQUNaN00sRUFHWSxpQkFBVEEsR0FDVkEsRUFBTyxJQUFJNk0sRUFBSzdNLEdBQ2hCb0wsRUFBTXRuQyxHQUFRazhCLEVBQ1BBLEdBSUpxTCxFQUFNdm5DLElBQVN5ckMsSUFBV0wsSUFBWU0sRUFBT04sRUFBUTdELEVBQU12bkMsR0FBT29yQyxNQUNyRWxQLEVBQU9vTCxFQUFNdG5DLEdBQVEsSUFBSStvQyxHQUNwQkUsS0FBS3lDLEdBQ1Z4UCxFQUFLbDhCLEtBQU8yc0IsRUFBTTNzQixHQUNYazhCLEdBR0QsS0FtQlIsU0FBU3lQLEVBQVM3dEIsR0FDakIsSUFBSW5mLEVBQUd5bEMsRUFBT3dILEVBQVNDLEVBTXZCLElBSnVCLGlCQUFaL3RCLElBQ1ZBLEVBQVUsQ0FBQ0EsSUFHUG5mLEVBQUksRUFBR0EsRUFBSW1mLEVBQVFqZixPQUFRRixJQUcvQml0QyxFQUFVZixHQUZWekcsRUFBUXRtQixFQUFRbmYsR0FBR29LLE1BQU0sTUFFSyxJQUM5QjhpQyxFQUFVaEIsRUFBY3pHLEVBQU0sSUFFOUJtRCxFQUFNcUUsR0FBV0MsRUFDakJsZixFQUFNaWYsR0FBV3hILEVBQU0sR0FFdkJtRCxFQUFNc0UsR0FBV0QsRUFDakJqZixFQUFNa2YsR0FBV3pILEVBQU0sR0EwRHpCLFNBQVMwSCxFQUFhejJCLEdBQ3JCLElBQUkwMkIsRUFBNEIsTUFBVDEyQixFQUFFd0IsSUFBdUIsTUFBVHhCLEVBQUV3QixHQUN6QyxTQUFVeEIsRUFBRThNLFNBQWtCcmYsSUFBWHVTLEVBQUUwQixNQUF3QmcxQixHQUc5QyxTQUFTckUsRUFBVXNFLEdBQ0ssb0JBQVp0MEIsU0FBb0QsbUJBQWxCQSxRQUFRakYsT0FDcERpRixRQUFRakYsTUFBTXU1QixHQVFoQixTQUFTQyxFQUFJNWhDLEdBQ1osSUFBSTBOLEVBQU92WSxNQUFNbEIsVUFBVXlCLE1BQU1kLEtBQUtMLFVBQVcsR0FBSSxHQUNwRG9CLEVBQU9wQixVQUFVQSxVQUFVQyxPQUFTLEdBQ3BDcTlCLEVBQU9rUCxFQUFRcHJDLEdBQ2Y0aUMsRUFBT3VFLEVBQU9qekIsSUFBSWhWLE1BQU0sS0FBTTZZLEdBUS9CLE9BTklta0IsSUFBU2lMLEVBQU83dkIsU0FBU2pOLElBQVV5aEMsRUFBWWxKLElBQ2xEQSxFQUFJbGIsSUFBSXdVLEVBQUtnUSxNQUFNdEosR0FBTSxXQUcxQkEsRUFBSXFKLEdBQUdqc0MsR0FFQTRpQyxHQXpnQkpnRixFQUFRLEdBQWdCLElBQVZBLEdBQWVDLEVBQVEsSUFDeENILEVBQVMsd0VBQTBFUCxFQUFPWixRQUFVLHNCQXVHckd3QyxFQUFLenFDLFVBQVksQ0FDaEIycUMsS0FBTyxTQUFVa0QsR0FDaEJodEMsS0FBS2EsS0FBYW1zQyxFQUFTbnNDLEtBQzNCYixLQUFLMHBDLE1BQWFzRCxFQUFTdEQsTUFDM0IxcEMsS0FBS3VwQyxPQUFheUQsRUFBU3pELE9BQzNCdnBDLEtBQUtzcEMsUUFBYTBELEVBQVMxRCxRQUMzQnRwQyxLQUFLMnBDLFdBQWFxRCxFQUFTckQsWUFHNUJzRCxPQUFTLFNBQVVDLEdBQ2xCLElBRUMxdEMsRUFGR0QsR0FBVTJ0QyxFQUNiM0QsRUFBU3ZwQyxLQUFLdXBDLE9BR2YsSUFBSy9wQyxFQUFJLEVBQUdBLEVBQUkrcEMsRUFBTzdwQyxPQUFRRixJQUM5QixHQUFJRCxFQUFTZ3FDLEVBQU8vcEMsR0FDbkIsT0FBT0EsR0FLVjZvQyxVQUFZLFdBQ1gsSUFBSThFLEVBQVludEMsS0FBS2EsS0FDckIsT0FBT3hCLE9BQU95TSxLQUFLdThCLEdBQVd6Z0MsUUFBTyxTQUFVd2xDLEdBQzlDLE9BQTZELElBQXREL0UsRUFBVStFLEdBQWNqRixNQUFNcmdDLFFBQVFxbEMsT0FJL0NKLE1BQVEsU0FBVUcsR0FDakIsSUFJQy9WLEVBQVFrVyxFQUFZQyxFQUFZOXRDLEVBSjdCRCxHQUFXMnRDLEVBQ2Q1RCxFQUFVdHBDLEtBQUtzcEMsUUFDZkMsRUFBVXZwQyxLQUFLdXBDLE9BQ2Z4dUIsRUFBVXd1QixFQUFPN3BDLE9BQVMsRUFHM0IsSUFBS0YsRUFBSSxFQUFHQSxFQUFJdWIsRUFBS3ZiLElBV3BCLEdBVkEyM0IsRUFBYW1TLEVBQVE5cEMsR0FDckI2dEMsRUFBYS9ELEVBQVE5cEMsRUFBSSxHQUN6Qjh0QyxFQUFhaEUsRUFBUTlwQyxFQUFJQSxFQUFJLEVBQUlBLEdBRTdCMjNCLEVBQVNrVyxHQUFjUCxFQUFHUyxxQkFDN0JwVyxFQUFTa1csRUFDQ2xXLEVBQVNtVyxHQUFjUixFQUFHVSxxQkFDcENyVyxFQUFTbVcsR0FHTi90QyxFQUFTZ3FDLEVBQU8vcEMsR0FBZSxJQUFUMjNCLEVBQ3pCLE9BQU9tUyxFQUFROXBDLEdBSWpCLE9BQU84cEMsRUFBUXZ1QixJQUdoQm9ULEtBQU8sU0FBVS9ULEdBQ2hCLE9BQU9wYSxLQUFLMHBDLE1BQU0xcEMsS0FBS2l0QyxPQUFPN3lCLEtBRy9CK2MsT0FBUyxTQUFVL2MsR0FFbEIsT0FEQW11QixFQUFTLDhEQUNGdm9DLEtBQUtzcEMsUUFBUXRwQyxLQUFLaXRDLE9BQU83eUIsS0FHakNpZCxVQUFZLFNBQVVqZCxHQUNyQixPQUFPcGEsS0FBS3NwQyxRQUFRdHBDLEtBQUtpdEMsT0FBTzd5QixNQStDbENrd0IsRUFBVW5yQyxVQUFVK3NDLGNBQWdCLFNBQVV1QixHQUM3Q3p0QyxLQUFLdXFDLGFBQWV6a0MsS0FBS0MsSUFBSS9GLEtBQUsrOEIsS0FBSzFGLFVBQVVvVyxFQUFTdEQsSUFBTXNELEVBQVN0VyxRQUNyRW4zQixLQUFLKzhCLEtBQUs1TyxLQUFLc2YsRUFBU3RELElBQUl0Z0MsUUFBUSxVQUFXLE1BQVE0akMsRUFBU3RmLE1BQ25FbnVCLEtBQUt3cUMsYUFrVFBzQyxFQUFHMUYsUUE3aEJXLFNBOGhCZDBGLEVBQUdZLFlBQWUsR0FDbEJaLEVBQUdhLE9BQWV4RixFQUNsQjJFLEVBQUdjLE9BQWV4RixFQUNsQjBFLEVBQUdlLE9BQWVyZ0IsRUFDbEJzZixFQUFHZ0IsV0FBYXpGLEVBQ2hCeUUsRUFBR3ZrQixJQUFlNGpCLEVBQ2xCVyxFQUFHUCxLQUFlQyxFQUNsQk0sRUFBR2lCLEtBckRILFNBQW1CaGhDLEdBQ2xCby9CLEVBQVFwL0IsRUFBS283QixPQUNicUUsRUFBUXovQixFQUFLcTdCLE9BekNkLFNBQXVCcjdCLEdBQ3RCLElBQUl2TixFQUFHNHRDLEVBQWNZLEVBQWVwa0MsRUFDcEMsR0FBS21ELEdBQVNBLEVBQUtyTixPQUNuQixJQUFLRixFQUFJLEVBQUdBLEVBQUl1TixFQUFLck4sT0FBUUYsSUFFNUI0dEMsR0FEQXhqQyxFQUFRbUQsRUFBS3ZOLEdBQUdvSyxNQUFNLE1BQ0QsR0FBR2lULGNBQ3hCbXhCLEVBQWdCcGtDLEVBQU0sR0FBR0EsTUFBTSxLQUMvQnkrQixFQUFVK0UsR0FBZ0IsSUFBSXJELEVBQzdCcUQsRUFDQVksR0FpQ0ZDLENBQWFsaEMsRUFBS3M3QixXQUNsQnlFLEVBQUdZLFlBQWMzZ0MsRUFBS3E2QixTQWtEdkIwRixFQUFHL1AsS0FBZWtQLEVBQ2xCYSxFQUFHb0IsV0FoREgsU0FBU0EsRUFBWXJ0QyxHQUtwQixPQUpLcXRDLEVBQVdDLGVBQ2ZELEVBQVdDLGNBQWUsRUFDekI1RixFQUFTLHlCQUEyQjFuQyxFQUFPLHVEQUF5REEsRUFBTyxTQUVwR29yQyxFQUFRcHJDLElBNENsQmlzQyxFQUFHc0IsTUFoTUgsU0FBZ0JDLEdBSWYsT0FIS25HLElBQWVtRyxJQUNuQm5HLEVBQWNrRCxLQUVSbEQsR0E2TFI0RSxFQUFHdGYsTUFySUgsV0FDQyxJQUFJaHVCLEVBQUdpa0MsRUFBTSxHQUViLElBQUtqa0MsS0FBS2d1QixFQUNMQSxFQUFNM3RCLGVBQWVMLEtBQU8yb0MsRUFBTTNvQyxJQUFNMm9DLEVBQU1DLEVBQU01b0MsTUFBUWd1QixFQUFNaHVCLElBQ3JFaWtDLEVBQUl6L0IsS0FBS3dwQixFQUFNaHVCLElBSWpCLE9BQU9pa0MsRUFBSTdqQixRQTZIWmt0QixFQUFHbEQsS0FBZUEsRUFDbEJrRCxFQUFHekQsT0FBZUEsRUFDbEJ5RCxFQUFHakUsYUFBZUEsRUFDbEJpRSxFQUFHSCxZQUFlQSxFQUNsQkcsRUFBR1Usb0JBQXVCLEVBQzFCVixFQUFHUyxzQkFBdUIsRUFDMUJULEVBQUd6RSxVQWhJSCxXQUNDLE9BQU9ocEMsT0FBT3lNLEtBQUt1OEIsSUFnSXBCeUUsRUFBR3dCLGdCQXJGSCxTQUF5QkMsRUFBU0MsR0FMbEMsSUFBcUIzdEMsRUFRcEIsR0FQQUEsR0FEb0JBLEVBTUMwdEMsR0FMVDF4QixnQkFLWjB4QixFQUpPbEcsRUFBVXhuQyxJQUFTLE1BTVosT0FBTyxLQUVyQixJQUFJc25DLEVBQVFvRyxFQUFRcEcsTUFBTXZvQixPQUUxQixPQUFJNHVCLEVBQ0lyRyxFQUFNeGdDLEtBQUksU0FBVXdsQyxHQUUxQixNQUFPLENBQ050c0MsS0FBTXNzQyxFQUNOaFcsT0FIVThVLEVBQVFrQixHQUdMOVYsVUFBVSxJQUFJL2lCLFVBS3ZCNnpCLEdBMEVSLElBOER5QnNHLEVBOURyQmw2QixFQUFLeXpCLEVBQU96ekIsR0FnRGhCLFNBQVNtNkIsRUFBVUQsR0FDbEIsT0FBTyxXQUNOLE9BQUl6dUMsS0FBSzJ1QyxHQUFhM3VDLEtBQUsydUMsR0FBR3hnQixLQUFLbnVCLE1BQzVCeXVDLEVBQUkzdUMsS0FBS0UsT0FJbEIsU0FBUzR1QyxFQUFlSCxHQUN2QixPQUFPLFdBRU4sT0FEQXp1QyxLQUFLMnVDLEdBQUssS0FDSEYsRUFBSTF1QyxNQUFNQyxLQUFNUCxZQXhEekJ1b0MsRUFBTzhFLEdBQUtBLEVBRVo5RSxFQUFPNkcsWUFBYyxLQUVyQjdHLEVBQU85dkIsYUFBZSxTQUFVa0MsRUFBS21HLEdBQ3BDLElBQ0M0VyxFQURHNEYsRUFBT2lMLEVBQU82RyxZQVVsQixRQVBlbHJDLElBQVh5VyxFQUFJdTBCLEtBQ0g1UixHQUFRNFAsRUFBWXZ5QixLQUFTQSxFQUFJdkMsU0FDcEN1QyxFQUFJM1csR0FBS3VrQyxFQUFPanpCLElBQUlxRixFQUFJNEksSUFBSXZmLEdBQzVCMlcsRUFBSXJGLE1BQU13VCxJQUFJd1UsRUFBS2dRLE1BQU0zeUIsR0FBTSxZQUVoQ0EsRUFBSXUwQixHQUFLNVIsR0FFTjNpQixFQUFJdTBCLEdBS1AsR0FKQXhYLEVBQVMvYyxFQUFJdTBCLEdBQUd0WCxVQUFVamQsR0FDdEJ0VSxLQUFLQyxJQUFJb3hCLEdBQVUsS0FDdEJBLEdBQWtCLFNBRUd4ekIsSUFBbEJ5VyxFQUFJaWQsVUFBeUIsQ0FDaEMsSUFBSXlYLEVBQUkxMEIsRUFBSXUwQixHQUNadjBCLEVBQUlpZCxXQUFXRixFQUFRNVcsR0FDdkJuRyxFQUFJdTBCLEdBQUtHLE9BRVQxMEIsRUFBSTJpQixLQUFLNUYsRUFBUTVXLElBS3BCaE0sRUFBR3U0QixHQUFLLFNBQVVqc0MsRUFBTTBmLEdBQ3ZCLEdBQUkxZixFQUFNLENBQ1QsR0FBb0IsaUJBQVRBLEVBQ1YsTUFBTSxJQUFJZ1ksTUFBTSx3Q0FBMENoWSxFQUFPLFlBQWNBLEVBQU8sS0FRdkYsT0FOQWIsS0FBSzJ1QyxHQUFLMUMsRUFBUXByQyxHQUNkYixLQUFLMnVDLEdBQ1IzRyxFQUFPOXZCLGFBQWFsWSxLQUFNdWdCLEdBRTFCZ29CLEVBQVMsbUNBQXFDMW5DLEVBQU8sNERBRS9DYixLQUVSLEdBQUlBLEtBQUsydUMsR0FBTSxPQUFPM3VDLEtBQUsydUMsR0FBRzl0QyxNQXdCL0IwVCxFQUFHeXVCLFNBQVkwTCxFQUFTbjZCLEVBQUd5dUIsVUFDM0J6dUIsRUFBR3d1QixTQUFZMkwsRUFBU242QixFQUFHd3VCLFVBQzNCeHVCLEVBQUdRLElBQVk2NUIsRUFBY3I2QixFQUFHUSxLQUNoQ1IsRUFBR3dqQixNQUFZNlcsRUFBY3I2QixFQUFHd2pCLE9BQ2hDeGpCLEVBQUc4aUIsV0FYc0JvWCxFQVdLbDZCLEVBQUc4aUIsVUFWekIsV0FFTixPQURJNTNCLFVBQVVDLE9BQVMsSUFBR00sS0FBSzJ1QyxHQUFLLE1BQzdCRixFQUFJMXVDLE1BQU1DLEtBQU1QLGFBVXpCdW9DLEVBQU84RSxHQUFHaUMsV0FBYSxTQUFTbHVDLEdBSy9CLE9BSkk0bkMsRUFBUSxHQUFnQixJQUFWQSxHQUFlQyxFQUFRLElBQ3hDSCxFQUFTLHFGQUF1RlAsRUFBT1osUUFBVSxLQUVsSFksRUFBTzZHLFlBQWNodUMsRUFBT29yQyxFQUFRcHJDLEdBQVEsS0FDckNtbkMsR0FJUixJQUFJN3dCLEVBQW1CNndCLEVBQU83d0IsaUJBWTlCLE1BWHlELG1CQUFyRDlYLE9BQU9GLFVBQVV3QixTQUFTYixLQUFLcVgsSUFFbENBLEVBQWlCblQsS0FBSyxNQUN0Qm1ULEVBQWlCblQsS0FBSyxPQUNabVQsSUFFVkEsRUFBaUJ3M0IsR0FBSyxNQUtoQjNHLEdBNXFCMkJ4MEIsRUFBT29hLFFBQ3hDcGEsVUFBaUJzMEIsRUFBUWtILElBSXpCbEgsRUFBUUMsRUFBS0MsaStzTENmRngwQixVQUFpQnc3QixJQUN2QmxDLEdBQUdpQixLQUFLa0IsT0NEVEMsc0JDSUosSUFBa0JwSCxFQUFBQSxXQUtERTs7QUFJZixJQUFJbUgsRUFBYyx3RUFBd0V2bEMsTUFDbEYsS0FFSndsQyxFQUFnQixDQUNaLFFBQ0EsUUFDQSxTQUNBLFNBQ0EsU0FDQSxTQUNBLFNBQ0FELEVBQVksR0FDWkEsRUFBWSxHQUNaQSxFQUFZLElBRXBCLFNBQVNFLEVBQVU1MEIsRUFBUTRELEVBQWV6ZSxFQUFLMmUsR0FDM0MsSUFBSTNWLEVBQVMsR0FDYixPQUFRaEosR0FDSixJQUFLLElBQ0QsT0FBTzJlLEVBQVcsb0JBQXNCLGtCQUM1QyxJQUFLLEtBQ0QzVixFQUFTMlYsRUFBVyxXQUFhLFdBQ2pDLE1BQ0osSUFBSyxJQUNELE9BQU9BLEVBQVcsV0FBYSxXQUNuQyxJQUFLLEtBQ0QzVixFQUFTMlYsRUFBVyxXQUFhLFlBQ2pDLE1BQ0osSUFBSyxJQUNELE9BQU9BLEVBQVcsU0FBVyxRQUNqQyxJQUFLLEtBQ0QzVixFQUFTMlYsRUFBVyxTQUFXLFNBQy9CLE1BQ0osSUFBSyxJQUNELE9BQU9BLEVBQVcsU0FBVyxRQUNqQyxJQUFLLEtBQ0QzVixFQUFTMlYsRUFBVyxTQUFXLFNBQy9CLE1BQ0osSUFBSyxJQUNELE9BQU9BLEVBQVcsWUFBYyxXQUNwQyxJQUFLLEtBQ0QzVixFQUFTMlYsRUFBVyxZQUFjLFlBQ2xDLE1BQ0osSUFBSyxJQUNELE9BQU9BLEVBQVcsU0FBVyxRQUNqQyxJQUFLLEtBQ0QzVixFQUFTMlYsRUFBVyxTQUFXLFNBSXZDLE9BREEzVixFQUdKLFNBQXNCNlIsRUFBUThELEdBQzFCLE9BQU85RCxFQUFTLEdBQ1Y4RCxFQUNJNndCLEVBQWMzMEIsR0FDZDAwQixFQUFZMTBCLEdBQ2hCQSxFQVJHNjBCLENBQWE3MEIsRUFBUThELEdBQVksSUFBTTNWLEVBQ3pDQSxFQWtFWCxPQXhEU28vQixFQUFPOVosYUFBYSxLQUFNLENBQy9CcEssT0FBUSwyR0FBMkdsYSxNQUMvRyxLQUVKaWEsWUFBYSx1RUFBdUVqYSxNQUNoRixLQUVKb2YsU0FBVSxxRUFBcUVwZixNQUMzRSxLQUVKbWYsY0FBZSx1QkFBdUJuZixNQUFNLEtBQzVDa2YsWUFBYSx1QkFBdUJsZixNQUFNLEtBQzFDc1MsZUFBZ0IsQ0FDWkksR0FBSSxRQUNKRCxJQUFLLFdBQ0xFLEVBQUcsYUFDSEMsR0FBSSxtQkFDSkMsSUFBSyxnQ0FDTEMsS0FBTSxzQ0FDTm9ULEVBQUcsV0FDSHlmLEdBQUksY0FDSkMsSUFBSywyQkFDTEMsS0FBTSxpQ0FFVnQxQixTQUFVLENBQ05OLFFBQVMsb0JBQ1RDLFFBQVMsc0JBQ1RDLFNBQVUsZ0JBQ1ZDLFFBQVMsbUJBQ1RDLFNBQVUsNEJBQ1ZDLFNBQVUsS0FFZGtFLGFBQWMsQ0FDVmYsT0FBUSxZQUNSQyxLQUFNLFlBQ05DLEVBQUc4eEIsRUFDSDd4QixHQUFJNnhCLEVBQ0puNUIsRUFBR201QixFQUNINXhCLEdBQUk0eEIsRUFDSjN4QixFQUFHMnhCLEVBQ0gxeEIsR0FBSTB4QixFQUNKenhCLEVBQUd5eEIsRUFDSHh4QixHQUFJd3hCLEVBQ0pyeEIsRUFBR3F4QixFQUNIcHhCLEdBQUlveEIsRUFDSm54QixFQUFHbXhCLEVBQ0hseEIsR0FBSWt4QixHQUVSdGlCLHVCQUF3QixZQUN4QnZSLFFBQVMsTUFDVCtMLEtBQU0sQ0FDRkwsSUFBSyxFQUNMQyxJQUFLLE1Bdkh5QjJnQixFQUFRa0gseUJDRmhELElBQWtCbEgsRUFBQUEsV0FLREUsR0FtRWYsT0EvRFNBLEVBQU85WixhQUFhLEtBQU0sQ0FDL0JwSyxPQUFRLHdGQUF3RmxhLE1BQzVGLEtBRUppYSxZQUFhLGtEQUFrRGphLE1BQU0sS0FDckVvZixTQUFVLG9EQUFvRHBmLE1BQU0sS0FDcEVtZixjQUFlLDhCQUE4Qm5mLE1BQU0sS0FDbkRrZixZQUFhLHVCQUF1QmxmLE1BQU0sS0FDMUNzUyxlQUFnQixDQUNaSSxHQUFJLFFBQ0pELElBQUssV0FDTEUsRUFBRyxhQUNIQyxHQUFJLGNBQ0pDLElBQUssMEJBQ0xDLEtBQU0sK0JBQ044eUIsSUFBSyxtQkFDTEMsS0FBTSx3QkFFVnQxQixTQUFVLENBQ05OLFFBQVMsWUFDVEMsUUFBUyxlQUNURSxRQUFTLFlBQ1RELFNBQVUsZUFDVkUsU0FBVSxpQkFDVkMsU0FBVSxLQUVka0UsYUFBYyxDQUNWZixPQUFRLFFBQ1JDLEtBQU0sZUFDTkMsRUFBRyxpQkFDSEMsR0FBSSxjQUNKdEgsRUFBRyxXQUNIdUgsR0FBSSxhQUNKQyxFQUFHLFdBQ0hDLEdBQUksWUFDSkMsRUFBRyxTQUNIQyxHQUFJLFdBQ0pHLEVBQUcsV0FDSEMsR0FBSSxhQUNKQyxFQUFHLFNBQ0hDLEdBQUksU0FFUjRPLHVCQUF3QixtQkFDeEJ2UixRQUFTLFNBQVVmLEdBQ2YsSUFBSXpHLEVBQUl5RyxFQUFTLEdBV2pCLE9BQU9BLEdBVDZCLE1BQXhCQSxFQUFTLElBQU8sSUFDZCxLQUNNLElBQU56RyxHQUVNLElBQU5BLEVBREEsS0FJQSxPQUlsQnVULEtBQU0sQ0FDRkwsSUFBSyxFQUNMQyxJQUFLLE1BbEV5QjJnQixFQUFRa0gseUJDQWhELElBQWtCbEgsRUFBQUEsV0FLREU7O0FBSWYsU0FBUzBILEVBQW9CajFCLEVBQVE0RCxFQUFlemUsRUFBSzJlLEdBQ3JELElBQUk1SixFQUFTLENBQ1R1QixFQUFHLENBQUMsY0FBZSxnQkFDbkJ3SCxFQUFHLENBQUMsY0FBZSxnQkFDbkJFLEVBQUcsQ0FBQyxVQUFXLGFBQ2ZDLEdBQUksQ0FBQ3BELEVBQVMsUUFBU0EsRUFBUyxVQUNoQ3FELEVBQUcsQ0FBQyxhQUFjLGVBQ2xCRSxFQUFHLENBQUMsWUFBYSxlQUNqQkMsR0FBSSxDQUFDeEQsRUFBUyxVQUFXQSxFQUFTLFlBQ2xDeUQsRUFBRyxDQUFDLFdBQVksY0FDaEJDLEdBQUksQ0FBQzFELEVBQVMsU0FBVUEsRUFBUyxZQUVyQyxPQUFPNEQsRUFBZ0IxSixFQUFPL1UsR0FBSyxHQUFLK1UsRUFBTy9VLEdBQUssR0EyRHhELE9BeERTb29DLEVBQU85WixhQUFhLEtBQU0sQ0FDL0JwSyxPQUFRLHFGQUFxRmxhLE1BQ3pGLEtBRUppYSxZQUFhLDZEQUE2RGphLE1BQ3RFLEtBRUorbEMsa0JBQWtCLEVBQ2xCM21CLFNBQVUsOERBQThEcGYsTUFDcEUsS0FFSm1mLGNBQWUsOEJBQThCbmYsTUFBTSxLQUNuRGtmLFlBQWEsdUJBQXVCbGYsTUFBTSxLQUMxQ2dtQyxvQkFBb0IsRUFDcEIxekIsZUFBZ0IsQ0FDWkksR0FBSSxRQUNKRCxJQUFLLFdBQ0xFLEVBQUcsYUFDSEMsR0FBSSxlQUNKQyxJQUFLLHFCQUNMQyxLQUFNLDRCQUVWdkMsU0FBVSxDQUNOTixRQUFTLHNCQUNUSyxTQUFVLElBQ1ZKLFFBQVMsdUJBQ1RDLFNBQVUscUJBQ1ZDLFFBQVMsd0JBQ1RDLFNBQVUsZ0NBRWRtRSxhQUFjLENBQ1ZmLE9BQVEsUUFDUkMsS0FBTSxTQUNOQyxFQUFHLG9CQUNIQyxHQUFJLGNBQ0p0SCxFQUFHdzVCLEVBQ0hqeUIsR0FBSSxhQUNKQyxFQUFHZ3lCLEVBQ0gveEIsR0FBSSxhQUNKQyxFQUFHOHhCLEVBQ0g3eEIsR0FBSTZ4QixFQUNKNXhCLEVBQUc0eEIsRUFDSDN4QixHQUFJLFlBQ0pDLEVBQUcweEIsRUFDSHp4QixHQUFJeXhCLEVBQ0p4eEIsRUFBR3d4QixFQUNIdnhCLEdBQUl1eEIsR0FFUjNpQix1QkFBd0IsWUFDeEJ2UixRQUFTLE1BQ1QrTCxLQUFNLENBQ0ZMLElBQUssRUFDTEMsSUFBSyxNQTFFeUIyZ0IsRUFBUWtILE9IUjdCLENBQ25CYSxHQUFJLENBQ0Y1cEMsUUFBUyxzQ0FDb0IsaURBQ0wsMERBQ1MsaUZBRS9CLDJGQUVBLHFEQUNGNnBDLFNBQVUsT0FDVkMsUUFBUyxVQUNUQyxLQUFNLFNBQ05DLGtCQUFtQixrQkFDbkJDLElBQUssTUFDTEMsT0FBUSxpQ0FDYyxpQ0FDRSx1QkFDeEJDLGdCQUFpQiwyQkFDVCx1Q0FDc0Isd0NBQzlCQyxVQUFXLFVBQ1hwckMsWUFBYSxxQkFDRSxxQ0FDSyxpQkFDcEJxckMsVUFBVyxZQUNYQyxNQUFPLHVCQUNTLHdCQUNoQnhyQyxPQUFRLCtCQUNnQixRQUN4QnlyQyxhQUFjLG1CQUNkQyxRQUFTLDBCQUNPLE1BQ2hCQyxLQUFNLE1BQ05sa0MsT0FBUSxrQ0FDbUIsaUVBQ0osNkJBQ0QsaUVBQ00sOERBRTFCLDhEQUNtQixxQ0FDSiwrREFDTSxzQ0FDSix3REFFakIseUhBQ2lDLHdEQUNULDBFQUV4Qix3RUFDMkIsa0NBQzdCbWtDLE9BQVEsU0FDUkMsT0FBUSxTQUNSQyxRQUFTLFVBQ1R6aUMsS0FBTSw4QkFDVyxnRUFDSSwyREFDSywrQ0FDSiw2REFDRSw2REFDRixnREFDVix5QkFDRyxZQUNmMGlDLEtBQU0saUNBQ2MsK0NBQ0QsMERBQ1Usa0NBQzdCQyxNQUFPLG9CQUNNLGVBQ2JDLE1BQU8sU0FDUEMsTUFBTyxPQUVUQyxHQUFJLENBQ0ZqckMsUUFBUyxzQ0FDb0Isb0RBQ0wsZ0RBQ1MsaUZBRS9CLDJGQUVBLHFEQUNGNnBDLFNBQVUsU0FDVkMsUUFBUyxVQUNUQyxLQUFNLE9BQ05tQixTQUFVLHdCQUNWbEIsa0JBQW1CLGVBQ25CQyxJQUFLLE1BQ0xDLE9BQVEsU0FDUmlCLFFBQVMsbUNBQ2EsK0JBQ0UsdUJBQ3hCaEIsZ0JBQWlCLDBCQUNULHNDQUNzQiwyQ0FDOUJDLFVBQVcsWUFDWHByQyxZQUFhLDRCQUNFLHdDQUNLLHlCQUNwQnFyQyxVQUFXLFlBQ1hDLE1BQU8sdUJBQ1MsZUFDaEJ4ckMsT0FBUSwrQkFDZ0IsUUFDeEJ5ckMsYUFBYyxnQkFDZEMsUUFBUyw0QkFDTyxJQUNoQlksU0FBVSxXQUNWWCxLQUFNLFFBQ05ZLFNBQVUsaUJBQ1Y5a0MsT0FBUSxtQ0FDbUIsd0RBQ0osOEJBQ0QsK0RBQ00sK0RBRTFCLHFFQUNtQiw4QkFDSixxREFDTSxpQ0FDSixxREFFakIseUhBRUEsZ0hBQ3dCLDBFQUV4Qix3RUFDMkIsbUNBQzdCbWtDLE9BQVEsU0FDUkMsT0FBUSxRQUNSQyxRQUFTLFVBQ1R6aUMsS0FBTSx1QkFDVyxtREFDUyxpREFDTCxzREFDSyxpREFDSix5REFDRSx3REFDRixtREFDQSxpQ0FDVix5QkFDRyxjQUNmMGlDLEtBQU0sT0FDTlMsTUFBTywyQkFDYSx5Q0FDRCx1REFDVSw0QkFDN0JSLE1BQU8sb0JBQ00sWUFDYkMsTUFBTyxZQUNQQyxNQUFPLFlBRVRPLEdBQUksQ0FDRnZyQyxRQUFTLHFDQUNvQixtREFDTCxrREFFdEIsd0ZBRUEsNkZBRUEseURBQ0Y2cEMsU0FBVSxZQUNWQyxRQUFTLFVBQ1RDLEtBQU0sV0FDTkMsa0JBQW1CLGFBQ25Ca0IsU0FBVSxzQkFDVmpCLElBQUssUUFDTEMsT0FBUSxVQUNSaUIsUUFBUywwQ0FDYSxrQ0FDRSx3QkFDeEJoQixnQkFBaUIsZ0NBQ1Qsc0NBQ3NCLG9DQUM5QkMsVUFBVyxZQUNYcHJDLFlBQWEsWUFDYnFyQyxVQUFXLFdBQ1hDLE1BQU8sd0JBQ1MsOEJBQ0QsaUNBQ0ssWUFDcEJ4ckMsT0FBUSxxQ0FDZ0IsY0FDeEJ5ckMsYUFBYyxjQUNkQyxRQUFTLDZCQUNPLE1BQ2hCWSxTQUFVLFVBQ1ZYLEtBQU0sT0FDTlksU0FBVSxvQkFDVjlrQyxPQUFRLGlDQUNtQiwyREFDSiwyQkFDRCxrRUFDTSw2REFFMUIsd0VBQ21CLDhCQUNKLDhEQUNNLHVEQUVyQix5SEFFQSw0R0FDd0IsZ0VBQ08sOERBQ0oseURBQ1YsV0FDbkJta0MsT0FBUSxPQUNSQyxPQUFRLFFBQ1JDLFFBQVMsUUFDVHppQyxLQUFNLDBCQUNXLG9EQUNTLGtEQUNMLHdEQUNLLCtDQUNKLGtEQUNFLGtEQUNGLHFEQUNBLG1DQUNWLDJCQUNHLGVBQ2YwaUMsS0FBTSxjQUNOUyxNQUFPLDJCQUNhLDZDQUNELHdEQUNVLDJCQUM3QlIsTUFBTyxxQkFDTSxZQUNiQyxNQUFPLGlCQUNQQyxNQUFPLFVBRVRRLEdBQUksQ0FDRnhyQyxRQUFTLHFDQUNvQixxREFDTCxxREFFdEIsc0ZBRUEsZ0dBRUEsMkRBQ0Y2cEMsU0FBVSxPQUNWQyxRQUFTLFdBQ1RDLEtBQU0sV0FDTkMsa0JBQW1CLG9CQUNuQmtCLFNBQVUsa0NBQ1ZqQixJQUFLLFFBQ0xDLE9BQVEsU0FDUmlCLFFBQVMsd0NBQ2EsNkJBQ0Usb0JBQ3hCaEIsZ0JBQWlCLDRCQUNULHVDQUNzQiwrQkFDOUJDLFVBQVcsYUFDWHByQyxZQUFhLGNBQ2JxckMsVUFBVyxVQUNYQyxNQUFPLHVCQUNTLG1DQUNJLHlDQUNMLDRCQUNmeHJDLE9BQVEsc0NBQ2dCLGVBQ3hCeXJDLGFBQWMsZUFDZEMsUUFBUywyQkFDTyxNQUNoQlksU0FBVSxZQUNWWCxLQUFNLE1BQ05ZLFNBQVUscUJBQ1Y5a0MsT0FBUSxnQ0FDbUIsNkRBQ0osMkJBQ0Qsb0VBQ00sK0RBRTFCLDZEQUNtQixtQ0FDSixnRUFDTSx1Q0FDSixrREFFakIsc0lBRUEsa0hBQ3dCLHdEQUNHLCtCQUM3Qm1rQyxPQUFRLE9BQ1JDLE9BQVEsUUFDUkMsUUFBUyxVQUNUemlDLEtBQU0sNEJBQ1csd0RBQ1MsaURBQ0wsNERBQ0ssK0NBQ0osc0RBQ0UsdURBQ0YsNERBQ0Esc0NBQ1YseUJBQ0csV0FDZjBpQyxLQUFNLFdBQ05TLE1BQU8sMEJBQ2Esd0NBQ0Qsd0RBQ1UseUJBQzdCUixNQUFPLHlCQUNNLFlBQ2JDLE1BQU8sb0JBQ1BDLE1BQU8sV0l0VFgsU0FBU1MsR0FBWUMsRUFBS0MsUUFDWCxJQUFSQSxJQUFpQkEsRUFBTSxJQUM1QixJQUFJQyxFQUFXRCxFQUFJQyxTQUVuQixHQUFLRixHQUEyQixvQkFBYkcsU0FBbkIsQ0FFQSxJQUFJQyxFQUFPRCxTQUFTQyxNQUFRRCxTQUFTRSxxQkFBcUIsUUFBUSxHQUM5REMsRUFBUUgsU0FBU0ksY0FBYyxTQUNuQ0QsRUFBTXB0QyxLQUFPLFdBRUksUUFBYmd0QyxHQUNFRSxFQUFLSSxXQUNQSixFQUFLSyxhQUFhSCxFQUFPRixFQUFLSSxZQUtoQ0osRUFBS00sWUFBWUosR0FHZkEsRUFBTUssV0FDUkwsRUFBTUssV0FBV0MsUUFBVVosRUFFM0JNLEVBQU1JLFlBQVlQLFNBQVNVLGVBQWViLDRyakJDYnhDYyw2Q0FDUTd3Qyx1QkFFSm1CLG1CQURBbkIsV0FFTm1CLEVBQUsydkMsc0JBQXdCLFdBQzNCM3ZDLEVBQUs0dkMsd0JBQXlCLEVBQzlCNXZDLEVBQUs2dkMsa0JBQW9CLHFCQU5BQyxXQVd6QkMsR0FBZSxrQkFDbkJDLElBQUFBLFdBQ0F0cEMsSUFBQUEsR0FDQXVwQyxJQUFBQSxZQUNBQyxJQUFBQSxXQUNBcHdDLElBQUFBLE1BQ0Fxd0MsSUFBQUEsWUFDQUMsSUFBQUEsV0FDQUMsSUFBQUEsY0FDQUMsSUFBQUEsaUJBQ0FDLElBQUFBLG1CQUNBQyxJQUFBQSxVQUNBdnRDLElBQUFBLE1BQ0F3dEMsSUFBQUEscUJBQ0FDLElBQUFBLGlCQUNBQyxJQUFBQSxpQkFDQUMsSUFBQUEsd0JBQ0FDLElBQUFBLDBCQUNBQyxJQUFBQSxxQkFDQUMsSUFBQUEsV0FDQUMsSUFBQUEsTUFDQUMsSUFBQUEsV0FDQUMsSUFBQUEsdUJBQ0FDLElBQUFBLFdBQ0FDLElBQUFBLFlBR01DLElBRk5DLFdBRTRCQyxHQUFlQyxHQUVyQ0MsWUFBYS9xQyxZQUNibkUsWUFBYW1FLGlCQUVtQmdyQyxZQUFTLE1BQXhDQyxPQUFjQyxPQUNmQyxFQUFXQyxVQUFNQyxTQUV2QkMsYUFBVSxXQUNSQyxVQUFXQyxjQUFjbEMsS0FDeEIsUUFFR21DLEVBQVVDLGVBQVksV0FDMUJuQyxPQUdJb0MsRUFBVyxTQUFDcm5CLEVBQUc2akIsR0FDUyx5QkFBeEJBLEVBQUl0b0MsV0FBV3pFLEtBQ2pCOHZDLEdBQWMsR0FDSi9DLEVBQUl0b0MsV0FBVzNFLFdBQVdzSyxjQUVwQ3VrQyxFQUFxQnpsQixFQUFHNmpCLElBSXRCeUQsRUFBMkIsU0FBQUMsT0FHekIxMUMsRUFBTzAxQyxJQUFVQSxFQUFNMTFDLEtBQU8wMUMsRUFBTUMsT0FBU0QsRUFBTUUsVUFBYSxZQUVqRTUxQyxJQUpTLENBQUMsR0FBSSxJQUFLLFlBSUwrTCxPQUhMLENBQUMsR0FBSSxVQUdjbEcsU0FBUzdGLE1BRzFDMDFDLEVBQU1HLGtCQUNDLElBR0hDLEVBQVcsU0FBQXBzQyxTQUNTLHlCQUFwQkEsRUFBV3pFLEtBQ04sR0FFRnl1QyxFQUFtQmhxQyxJQUd0QnFzQyxFQUFhLFNBQUFyckMsU0FDQyx5QkFBZEEsRUFBS3pGLEtBRUxnd0Msa0NBQVFod0MsS0FBSyxTQUFTK3dDLFVBQVd4QixFQUFPLHlCQUNyQzlwQyxFQUFLaEYsU0FJTCt0QyxFQUFpQi9vQyxXQTBGdEJ3cEMsYUFBY2MsRUFBUzNzQyxzQkFBVDR0QyxFQUFrQjNxQyxPQUNsQzBwQyxFQUFTM3NDLFFBQVFpRCxNQUFNNHFDLFFBSXZCakIsd0JBQUNHLFdBQ0NlLE9BQVE3QixFQUNSMEIsVUFBV3hCLEVBQU8sZ0JBQ2xCNEIsaUJBQWtCNUIsRUFBTyx3QkFDekI2QixhQUFjZixFQUNkZ0IscUJBRUFyQiwrQkFDRWUsVUFBV3hCLEVBQU8sd0JBQ2xCbkMsTUFBTyxxQkFDUzhCLGdDQUNnQkUsNEJBQ1ZELDBCQUNJRyxFQUFZZ0MsU0FwRXhDdEIsK0JBQUtlLFVBQVd4QixFQUFPLHNCQUF1QmdDLFFBQVM1QixHQUNyREssa0NBQ0Vod0MsS0FBSyxTQUNMK3dDLFVBQVd4QixFQUFPLGlCQUNsQmlDLFFBQVMsa0JBQU1uQixLQUNmb0IsVUFBVyxTQUFBdm9CLFVBQUtzbkIsRUFBeUJ0bkIsSUFBTW1uQixrQkFDbkN0QixFQUNaMkMsU0FBVSxHQUVWMUIsd0JBQUMyQixXQUFLQyxJQUFJLFdBRVo1QixnQ0FBTWUsVUFBV3hCLEVBQU8saUJBQ3RCUyxnQ0FBTWUsVUFBV3hCLEVBQU8sa0JBQW1CM3FDLEdBQUluRSxHQUM1Q1UsR0FFSDZ1Qyx3QkFBQ3BDLElBQ0NpRSwyQkFDQWp0QyxHQUFJQSxFQUNKeXBDLFlBQWFBLEVBQ2J5RCw0QkFBNkJ2RCxFQUM3QkUsbUJBQW9Cb0MsRUFDcEJyQyxpQkFBa0JzQyxFQUlsQmlCLCtCQUNBQyx3QkFBeUIsa0JBQU0sR0FDL0IxRCxnQkFDS0EsR0FDSHlDLG9CQUNLeEIsRUFBT2xwQyxrQkFBU2twQyxFQUFPM3FDLElBQU8sZUFDL0IwcEMsRUFBV3R3QyxNQUFRdXhDLEVBQU8wQyxTQUFXLElBR3pDQyxXQUFXLElBRWJDLHFCQUFzQixTQUFBMTBDLFVBQ3BCdXlDLGdEQUNFQSw0REFBbUJ0QixFQUFXOXBDLEdBQUlBLEdBQVFuSCxJQUN6Q08sR0FyRFhneUMsa0NBQ0Vod0MsS0FBSyxTQUNMK3dDLFVBQVd4QixFQUFPLGVBQ2xCaUMsUUFBU3BELEVBQ1RxRCxVQUFXLFNBQUF2b0IsVUFBS3NuQixFQUF5QnRuQixJQUFNa2xCLGtCQUNuQ1ksR0FFWmdCLHdCQUFDMkIsV0FBS0MsSUFBSSxRQUFRMUMsTUFBT0EsT0FpRHJCa0QsTUFBTzdDLEVBQ1BaLHFCQUFzQjRCLEVBQ3RCeEQsSUFBS2dELE1BL0VYQyx3QkFBQ3FDLFdBQ0NuRSxXQUFZQSxFQUNab0UsWUFBYXpDLEVBQ2IwQyxZQUFhLGtCQUFNekMsR0FBYyxJQUNqQzBDLFdBQVkzRCxFQUNaNEQsa0JBQW1CM0QsRUFDbkI0RCxvQkFBcUIzRCxFQUNyQjRELHFCQUFzQixXQUNwQi9ELElBQ0FrQixHQUFjLElBRWhCOEMsdUJBQXdCLGtCQUFNOUMsR0FBYyxJQUM1Q1osTUFBT0EsRUFDUEMsV0FBWUEsRUFDWkcsWUFBYUEsc0JBbUdyQnVELHVCQUFBNUUsR0FBYTZFLFVBQVksQ0FDdkI1RSxXQUFZNkUsVUFBVXQ1QixPQUFPdTVCLFdBQzdCcHVDLEdBQUltdUMsVUFBVXQ1QixPQUFPdTVCLFdBQ3JCN0UsWUFBYTRFLFVBQVVuOEIsS0FBS284QixXQUM1QjVFLFdBQVkyRSxVQUFVbjhCLEtBQUtvOEIsV0FDM0JoMUMsTUFBTyswQyxVQUFVdDVCLE9BQ2pCdTFCLHFCQUFzQitELFVBQVV0NUIsT0FBT3U1QixXQUN2QzNFLFlBQWEwRSxVQUFVLzdCLE1BQU1nOEIsV0FDN0IxRSxXQUFZeUUsVUFBVUUsTUFBTSxDQUMxQkMsU0FBVUgsVUFBVW44QixLQUFLbzhCLFdBQ3pCRyxPQUFRSixVQUFVbjhCLEtBQUtvOEIsV0FDdkJoMUMsTUFBTyswQyxVQUFVdDVCLE9BQU91NUIsV0FDeEJJLFlBQWFMLFVBQVV0NUIsT0FBT3U1QixXQUM5QmpDLFVBQVdnQyxVQUFVdDVCLE9BQU91NUIsYUFDM0JBLFdBQ0h6RSxjQUFld0UsVUFBVW44QixLQUFLbzhCLFdBQzlCdkUsbUJBQW9Cc0UsVUFBVW44QixLQUFLbzhCLFdBQ25DeEUsaUJBQWtCdUUsVUFBVW44QixLQUFLbzhCLFdBQ2pDckUscUJBQXNCb0UsVUFBVW44QixLQUFLbzhCLFdBQ3JDN3hDLE1BQU80eEMsVUFBVXQ1QixPQUFPdTVCLFdBQ3hCcEUsaUJBQWtCbUUsVUFBVW44QixLQUFLbzhCLFdBQ2pDdEUsVUFBV3FFLFVBQVV0NUIsT0FDckJvMUIsaUJBQWtCa0UsVUFBVXQ1QixPQUM1QnExQix3QkFBeUJpRSxVQUFVdDVCLE9BQ25DczFCLDBCQUEyQmdFLFVBQVV0NUIsT0FDckN3MUIsV0FBWThELFVBQVVodEMsS0FDdEJtcEMsTUFBTzZELFVBQVV0NUIsT0FDakIwMUIsV0FBWTRELFVBQVV0NUIsT0FDdEIyMUIsdUJBQXdCMkQsVUFBVXQ1QixPQUFPdTVCLFdBQ3pDM0QsV0FBWTBELFVBQVVodEMsS0FBS2l0QyxXQUMzQjFELFlBQWF5RCxVQUFVRSxNQUFNLENBQzNCM0IsT0FBUXlCLFVBQVVuOUIsT0FBT285QixhQUN4QkEsV0FDSHhELFdBQVl1RCxVQUFVaHRDLG1DQzNQeEIsSUFBaURrOUIsRUFTOUIsb0JBQVQva0MsTUFBdUJBLEtBVGdCK2tDLEVBU0gsU0FBU29RLEdBQ3ZELE9BQWdCLFNBQVVDLEdBRWhCLElBQUlDLEVBQW1CLEdBR3ZCLFNBQVNDLEVBQW9CQyxHQUc1QixHQUFHRixFQUFpQkUsR0FDbkIsT0FBT0YsRUFBaUJFLEdBQVUxcUIsUUFHbkMsSUFBSXBhLEVBQVM0a0MsRUFBaUJFLEdBQVksQ0FDekM5NEMsRUFBRzg0QyxFQUNIeG9CLEdBQUcsRUFDSGxDLFFBQVMsSUFVVixPQU5BdXFCLEVBQVFHLEdBQVV4NEMsS0FBSzBULEVBQU9vYSxRQUFTcGEsRUFBUUEsRUFBT29hLFFBQVN5cUIsR0FHL0Q3a0MsRUFBT3NjLEdBQUksRUFHSnRjLEVBQU9vYSxRQTBEZixPQXJEQXlxQixFQUFvQm5pQyxFQUFJaWlDLEVBR3hCRSxFQUFvQnhtQixFQUFJdW1CLEVBR3hCQyxFQUFvQno2QixFQUFJLFNBQVNnUSxFQUFTL3NCLEVBQU00L0IsR0FDM0M0WCxFQUFvQjkzQyxFQUFFcXRCLEVBQVMvc0IsSUFDbEN4QixPQUFPNEMsZUFBZTJyQixFQUFTL3NCLEVBQU0sQ0FBRWlCLFlBQVksRUFBTTBKLElBQUtpMUIsS0FLaEU0WCxFQUFvQkUsRUFBSSxTQUFTM3FCLEdBQ1gsb0JBQVg1dUIsUUFBMEJBLE9BQU93NUMsYUFDMUNuNUMsT0FBTzRDLGVBQWUyckIsRUFBUzV1QixPQUFPdzVDLFlBQWEsQ0FBRTMxQyxNQUFPLFdBRTdEeEQsT0FBTzRDLGVBQWUyckIsRUFBUyxhQUFjLENBQUUvcUIsT0FBTyxLQVF2RHcxQyxFQUFvQm5oQyxFQUFJLFNBQVNyVSxFQUFPc0gsR0FFdkMsR0FEVSxFQUFQQSxJQUFVdEgsRUFBUXcxQyxFQUFvQngxQyxJQUMvQixFQUFQc0gsRUFBVSxPQUFPdEgsRUFDcEIsR0FBVyxFQUFQc0gsR0FBOEIsaUJBQVZ0SCxHQUFzQkEsR0FBU0EsRUFBTTQxQyxXQUFZLE9BQU81MUMsRUFDaEYsSUFBSTYxQyxFQUFLcjVDLE9BQU91RCxPQUFPLE1BR3ZCLEdBRkF5MUMsRUFBb0JFLEVBQUVHLEdBQ3RCcjVDLE9BQU80QyxlQUFleTJDLEVBQUksVUFBVyxDQUFFNTJDLFlBQVksRUFBTWUsTUFBT0EsSUFDdEQsRUFBUHNILEdBQTRCLGlCQUFUdEgsRUFBbUIsSUFBSSxJQUFJakQsS0FBT2lELEVBQU93MUMsRUFBb0J6NkIsRUFBRTg2QixFQUFJOTRDLEVBQUssU0FBU0EsR0FBTyxPQUFPaUQsRUFBTWpELElBQVErNEMsS0FBSyxLQUFNLzRDLElBQzlJLE9BQU84NEMsR0FJUkwsRUFBb0IzM0MsRUFBSSxTQUFTOFMsR0FDaEMsSUFBSWl0QixFQUFTanRCLEdBQVVBLEVBQU9pbEMsV0FDN0IsV0FBd0IsT0FBT2psQyxFQUFnQixTQUMvQyxXQUE4QixPQUFPQSxHQUV0QyxPQURBNmtDLEVBQW9CejZCLEVBQUU2aUIsRUFBUSxJQUFLQSxHQUM1QkEsR0FJUjRYLEVBQW9COTNDLEVBQUksU0FBU3E0QyxFQUFRamUsR0FBWSxPQUFPdDdCLE9BQU9GLFVBQVVVLGVBQWVDLEtBQUs4NEMsRUFBUWplLElBR3pHMGQsRUFBb0IvMUMsRUFBSSxHQUlqQisxQyxFQUFvQkEsRUFBb0I5NkIsRUFBSSxpQ0FuRjdDLENBc0ZOLENBRUo7Ozs7dUNBS1UvSixFQUFRb2EsRUFBU3lxQixHQUlqQyxJQUFJUSxFQUFtQjc0QyxNQUFRQSxLQUFLNjRDLGtCQUFxQng1QyxPQUFPdUQsZ0JBQW1CckMsRUFBRzJWLEVBQUduSyxFQUFHK3NDLFFBQzdFbjFDLElBQVBtMUMsSUFBa0JBLEVBQUsvc0MsR0FDM0IxTSxPQUFPNEMsZUFBZTFCLEVBQUd1NEMsRUFBSSxDQUFFaDNDLFlBQVksRUFBTTBKLElBQUssV0FBYSxPQUFPMEssRUFBRW5LLGdCQUNqRXhMLEVBQUcyVixFQUFHbkssRUFBRytzQyxRQUNUbjFDLElBQVBtMUMsSUFBa0JBLEVBQUsvc0MsR0FDM0J4TCxFQUFFdTRDLEdBQU01aUMsRUFBRW5LLEtBRVZndEMsRUFBZ0IvNEMsTUFBUUEsS0FBSys0QyxjQUFpQixTQUFTN2lDLEVBQUcwWCxHQUMxRCxJQUFLLElBQUl0ckIsS0FBSzRULEVBQWEsWUFBTjVULEdBQW9CakQsT0FBT0YsVUFBVVUsZUFBZUMsS0FBSzh0QixFQUFTdHJCLElBQUl1MkMsRUFBZ0JqckIsRUFBUzFYLEVBQUc1VCxJQUUzSGpELE9BQU80QyxlQUFlMnJCLEVBQVMsYUFBYyxDQUFFL3FCLE9BQU8sSUFDdERrMkMsRUFBYVYsNEJBQStDLDhDQUErQ3pxQixHQUMzR21yQixFQUFhVix3QkFBMkMseUNBQTBDenFCLEdBQ2xHbXJCLEVBQWFWLDZCQUFnRCwrQ0FBZ0R6cUIsR0FDN0dtckIsRUFBYVYsa0NBQXFELG1EQUFvRHpxQixHQUN0SG1yQixFQUFhViwwQkFBNkMsMkNBQTRDenFCLEdBQ3RHbXJCLEVBQWFWLG9DQUF1RCxxREFBc0R6cUIsSUFLcEg7Ozs7dUNBS1VwYSxFQUFRb2EsRUFBU3lxQixHQUlqQ2g1QyxPQUFPNEMsZUFBZTJyQixFQUFTLGFBQWMsQ0FBRS9xQixPQUFPLElBQ3REK3FCLEVBQVFvckIsd0JBQXFCLEVBQzdCLElBQUlDLEVBQVVaLGNBQWlDLFNBcUQvQ3pxQixFQUFRb3JCLG1CQXBEaUIsU0FBVWgyQixHQUMvQixJQUFJazJCLEVBQVlsMkIsRUFBR2syQixVQUFXQyxFQUFrQm4yQixFQUFHbTJCLGdCQUMvQ0MsR0FBSyxFQUFJSCxFQUFReEUsVUFBVSxHQUFJNEUsRUFBZ0JELEVBQUcsR0FBSUUsRUFBbUJGLEVBQUcsR0FDNUVHLEdBQWtDLEVBQUlOLEVBQVE5RCxjQUFhLFNBQVU5UixHQUNyRWlXLEVBQWlCalcsS0FDbEIsQ0FBQzZWLElBaUJBTSxFQUFnQixTQUFVQyxHQUMxQixJQUFJNzVDLEVBQU02NUMsRUFBYzc1QyxJQUN4QixHQUFJczVDLE1BQUFBLE9BQTZDLEVBQVNBLEVBQVV4NUMsT0FDaEUsR0FBWSxZQUFSRSxFQUNBdTVDLEdBQW1CQSxJQUNuQk0sRUFBY2hFLGlCQW5CbEI4RCxFQURBRixFQUFnQixFQUNnQkEsRUFBZ0IsRUFHaEJILEVBQVV4NUMsT0FBUyxPQW1COUMsQ0FBQSxHQUFZLGNBQVJFLEVBTUwsT0FMQXU1QyxHQUFtQkEsSUFDbkJNLEVBQWNoRSxpQkFqQmxCNEQsRUFBZ0JILEVBQVV4NUMsT0FBUyxFQUNuQzY1QyxFQUFnQ0YsRUFBZ0IsR0FHaERFLEVBQWdDLEtBK0J4QyxPQVBBLEVBQUlOLEVBQVFsRSxZQUFXLFdBRW5CLE9BREEyRSxPQUFPQyxpQkFBaUIsVUFBV0gsR0FDNUIsV0FBYyxPQUFPRSxPQUFPRSxvQkFBb0IsVUFBV0osUUFFdEUsRUFBSVAsRUFBUWxFLFlBQVcsV0FDbkJ3RSxFQUFnQyxLQUNqQyxDQUFDTCxJQUNHLENBQUVHLGNBQWVBLEtBT3RCOzs7O3VDQUtVN2xDLEVBQVFvYSxFQUFTeXFCLEdBSWpDaDVDLE9BQU80QyxlQUFlMnJCLEVBQVMsYUFBYyxDQUFFL3FCLE9BQU8sSUFDdEQrcUIsRUFBUWlzQiw2QkFBMEIsRUFDbEMsSUFBSVosRUFBVVosY0FBaUMsU0EyQi9DenFCLEVBQVFpc0Isd0JBMUJzQixTQUFVQyxHQUNwQyxJQUFJQyxHQUFlLEVBQUlkLEVBQVFuRSxRQUFRLE1BQ25DOXhCLEdBQUssRUFBSWkyQixFQUFReEUsV0FBVSxHQUFRdUYsRUFBWWgzQixFQUFHLEdBQUlpM0IsRUFBZWozQixFQUFHLEdBQ3hFazNCLEVBQXFCLFNBQVVDLEdBQy9CLElBQUlDLEVBQVFELEVBQVEsR0FDcEJGLEVBQWFHLEVBQU1DLGlCQW1CdkIsT0FqQkEsRUFBSXBCLEVBQVFsRSxZQUFXLFdBQ25CLEdBQUkyRSxRQUFVQSxPQUFPWSxxQkFBc0IsQ0FDdkMsSUFBSUMsRUFBYSxJQUFJRCxxQkFBcUJKLEVBQW9CSixHQUMxRFUsRUFBWVQsRUFBYTl4QyxRQUk3QixPQUhJOHhDLEVBQWE5eEMsU0FDYnN5QyxFQUFXRSxRQUFRVixFQUFhOXhDLFNBRTdCLFdBQ0N1eUMsR0FDQUQsRUFBV0csVUFBVUYsSUFLN0JQLEdBQWEsS0FFbEIsQ0FBQ0YsRUFBY0QsSUFDWCxDQUFFQyxhQUFjQSxFQUFjQyxVQUFXQSxJQUdwRHBzQixFQUFRcWEsUUFBVXJhLEVBQVFpc0IseUJBS3BCOzs7O3VDQUtVcm1DLEVBQVFvYSxFQUFTeXFCLEdBSWpDaDVDLE9BQU80QyxlQUFlMnJCLEVBQVMsYUFBYyxDQUFFL3FCLE9BQU8sSUFDdEQrcUIsRUFBUStzQixxQkFBa0IsRUFDMUIsSUFBSTFCLEVBQVVaLGNBQWlDLFNBQzNDdUMsRUFBYyxDQUNkQyxHQUFJLEVBQ0pDLFlBQWEsSUFDYkMsT0FBUSxJQUNSQyxPQUFRLElBQ1JDLFlBQWEsSUFDYkMsYUFBYyxLQUNkQyxRQUFTLEtBQ1RDLGFBQWMsTUFpQmxCeHRCLEVBQVErc0IsZ0JBZmMsU0FBVVUsR0FDNUIsSUFBSXI0QixHQUFLLEVBQUlpMkIsRUFBUXhFLFVBQVUsTUFBTzZHLEVBQWN0NEIsRUFBRyxHQUFJdTRCLEVBQWlCdjRCLEVBQUcsR0FDM0V3NEIsR0FBZSxFQUFJdkMsRUFBUTlELGNBQWEsV0FDeENvRyxFQUFlN0IsT0FBTytCLGNBQ3ZCLElBU0gsT0FSQSxFQUFJeEMsRUFBUWxFLFlBQVcsV0FDbkJ5RyxNQUVELEtBQ0gsRUFBSXZDLEVBQVFsRSxZQUFXLFdBRW5CLE9BREEyRSxPQUFPQyxpQkFBaUIsU0FBVTZCLEVBQWMsQ0FBRUUsU0FBUyxJQUNwRCxXQUFjLE9BQU9oQyxPQUFPRSxvQkFBb0IsU0FBVTRCLE1BQ2xFLENBQUNBLEVBQWNGLElBQ1hBLEdBQWVWLEVBQVlTLElBR3RDenRCLEVBQVFxYSxRQUFVcmEsRUFBUStzQixpQkFLcEI7Ozs7dUNBS1VubkMsRUFBUW9hLEVBQVN5cUIsR0FJakNoNUMsT0FBTzRDLGVBQWUyckIsRUFBUyxhQUFjLENBQUUvcUIsT0FBTyxJQUN0RCtxQixFQUFRK3RCLCtCQUE0QixFQUNwQyxJQUFJMUMsRUFBVVosY0FBaUMsU0FDL0N6cUIsRUFBUSt0QiwwQkFBOEMsb0JBQVhqQyxPQUF5QlQsRUFBUTJDLGdCQUFrQjNDLEVBQVFsRSxVQUN0R25uQixFQUFRcWEsUUFBVXJhLEVBQVErdEIsMkJBS3BCOzs7O3VDQUtVbm9DLEVBQVFvYSxFQUFTeXFCLEdBSWpDaDVDLE9BQU80QyxlQUFlMnJCLEVBQVMsYUFBYyxDQUFFL3FCLE9BQU8sSUFDdEQrcUIsRUFBUWl1Qix1QkFBb0IsRUFDNUIsSUFBSTVDLEVBQVVaLGNBQWlDLFNBaUIvQ3pxQixFQUFRaXVCLGtCQWJSLFNBQTJCakssRUFBS2tLLEdBQzVCLFNBQVNDLEVBQW1CekcsR0FDcEIxRCxFQUFJM3BDLFVBQVkycEMsRUFBSTNwQyxRQUFRK3pDLFNBQVMxRyxFQUFNLzFDLFNBQzNDdThDLEtBR1IsRUFBSTdDLEVBQVFsRSxZQUFXLFdBRW5CLE9BREFqRCxTQUFTNkgsaUJBQWlCLFlBQWFvQyxHQUNoQyxXQUNIakssU0FBUzhILG9CQUFvQixZQUFhbUMsU0FTaEQ7Ozs7dUNBS1V2b0MsRUFBUW9hLEVBQVN5cUIsR0FJakNoNUMsT0FBTzRDLGVBQWUyckIsRUFBUyxhQUFjLENBQUUvcUIsT0FBTyxJQUN0RCtxQixFQUFRcXVCLG1CQUFnQixFQUN4QixJQUFJaEQsRUFBVVosY0FBaUMsU0F1Qi9DenFCLEVBQVFxdUIsY0FuQlksV0FpQmhCLE1BQU8sQ0FBRUMsTUFoQkUsRUFBSWpELEVBQVE5RCxjQUFhLFdBQ2hDLElBQUlnSCxFQUFVekMsT0FBT3lDLFFBQVUsS0FDM0JDLEVBQU90SyxTQUFTc0ssS0FDcEJBLEVBQUtuSyxNQUFNMWdDLFNBQVcsUUFDdEI2cUMsRUFBS25LLE1BQU1vSyxJQUFNLElBQU1GLElBQ3hCLElBV2tCRyxRQVZSLEVBQUlyRCxFQUFROUQsY0FBYSxXQUNsQyxJQUFJaUgsRUFBT3RLLFNBQVNzSyxLQUNoQkQsRUFBVUMsRUFBS25LLE1BQU1vSyxJQUNyQkUsR0FBNEMsRUFBNUJqMkIsU0FBUzYxQixHQUFXLEtBQ3hDQyxFQUFLbkssTUFBTTFnQyxTQUFXLEdBQ3RCNnFDLEVBQUtuSyxNQUFNb0ssSUFBTSxHQUNiRSxHQUNBN0MsT0FBTzhDLFNBQVMsR0FBK0IsRUFBNUJsMkIsU0FBUzYxQixHQUFXLFFBRTVDLE9BUURNOzs7O3VDQUtVanBDLEVBQVFvYSxHQUV4QnBhLEVBQU9vYSxRQUFVc3FCLE1BM1hmMWtDLFVBQWlCczBCLEVBQVFrSCx3aEJDd0JwQnA2QixPQUFPLGdCQUVOOG5DLEtBQUssQ0FDWEMsWUFBYSxLQUNiQyxVQUFXLGNBQ1hDLGNBQWUsQ0FDYkMsYUFBYSxvQkFZakJwRixzQkFDWUUsVUFBVW1GLEtBR3RCLElBQU1DLEdBQWMsU0FBQXp1QyxNQUNiQSxHQUFhQSxFQUFTMHVDLEtBQUs1TCxnQkFHSjlpQyxFQUFTMHVDLEtBQTdCQyxJQUFBQSxNQUFPN0wsSUFBQUEsZUFHUixDQURMNkwsR0FBc0IsU0FBYkEsRUFBTSxHQUFnQkMsVUFBUWptQyxFQUFFLFNBQVdpbUMsVUFBUWptQyxFQUFFLFlBQ2xEbTZCLEtBR2hCLFNBQVMrTCxHQUFxQjl5QyxNQUNWLGdCQUFkQSxFQUFLekYsS0FBd0IsSUFDYixrQkFBZHlGLEVBQUt6RixXQUNBLENBQUMsR0FBSXM0QyxVQUFRam1DLEVBQUUsdUJBRU4sb0JBQWQ1TSxFQUFLekYsV0FDQSxDQUFDLEdBQUlzNEMsVUFBUWptQyxFQUFFLHdCQUVOLDJCQUFkNU0sRUFBS3pGLFdBQ0EsQ0FBQyxHQUFJczRDLFVBQVFqbUMsRUFBRSxrQ0FJcEJtbUMsT0FEZ0JyekMsR0FBYU0sRUFBSzNGLFlBQVksTUFBN0M5RCxPQUFNbUYsVUFHVHNFLEVBQUszRixXQUFXVSxNQUFNZ0IsY0FBY1osU0FBUyxlQUM3QzZFLEVBQUszRixXQUFXVSxNQUFNZ0IsY0FBY1osU0FBUyxxQkFJdEMsQ0FGUDQzQyxFQUFpQkYsVUFBUWptQyxFQUFFLHFCQUVIclcsT0FBTThDLEVBRGIyRyxFQUFLM0YsV0FBV1csWUFJTCxhQUExQmdGLEVBQUszRixXQUFXVSxZQUVYLENBRFBnNEMsRUFBaUJGLFVBQVFqbUMsRUFBRSxZQUNIclcsT0FBTThDLE9BQVdBLE1BR2IsWUFBMUIyRyxFQUFLM0YsV0FBV1UsWUFFWCxDQURQZzRDLEVBQWlCRixVQUFRam1DLEVBQUUsV0FDSHJXLE9BQU04QyxPQUFXQSxNQUd2QzJHLEVBQUszRixXQUFXd0YsS0FDbEJrekMsRUFBaUJGLFVBQVFqbUMsRUFDdkI1TSxFQUFLM0YsV0FBV3dGLEtBQUs5RCxjQUFjd0QsUUFBUSxZQUFhLFNBRXJELEtBQ0N4RSxFQUFRaUYsRUFBSzNGLFdBQVdVLE1BQzNCd0UsUUFBUSxTQUFVLElBQ2xCeEQsY0FDQXdELFFBQVEsWUFBYSxJQUN4Qnd6QyxFQUFpQkYsVUFBUWptQyxFQUFFN1IsTUFJM0JpRixFQUFLM0YsV0FBVzhFLEtBQ1csU0FBMUJhLEVBQUszRixXQUFXVSxPQUE4QyxZQUExQmlGLEVBQUszRixXQUFXVSxPQUNyRCxPQUNNNkQsRUFBV00sR0FBWWMsRUFBSzNGLFlBQzVCd0YsWUFBT0csRUFBSzNGLFdBQVc0Siw2QkFBaEIrdUMsRUFBMEJMLEtBQUtDLE1BQ3RDN0wsRUFBVzJMLEdBQVkxeUMsRUFBSzNGLFdBQVc0SixnQkFDdEMsQ0FDTDh1QyxFQUNBcDBDLEdBQVlwSSxFQUFNcUksR0FDbEJsRCxFQUNBa0QsRUFDQWlCLEVBQ0FrbkMsTUFJd0Isa0JBQTFCL21DLEVBQUszRixXQUFXVSxPQUNVLHFCQUExQmlGLEVBQUszRixXQUFXVSxNQUNoQixPQUMwQmlGLEVBQUszRixXQUF2QnNCLElBQUFBLFFBQVN5RCxJQUFBQSxXQUdWLENBQUMyekMsRUFGUXAzQyxFQUFVZ0QsR0FBWWhELEVBQVEyRCxNQUFNLEtBQUssR0FBSUYsR0FBUTdJLEVBRXBDbUYsRUFBTzBELE9BQU0vRixFQUQ3QnE1QyxHQUFZMXlDLEVBQUszRixXQUFXNEosaUJBR3hDLENBQUM4dUMsRUFBZ0J4OEMsRUFBTW1GLFNBRUFzRSxFQUFLM0YsV0FBN0JJLElBQUFBLE9BQVFFLElBQUFBLFlBQ1ZzNEMsRUFBUXg0QyxFQUFPSyxxQkFBZ0JMLEVBQU9LLG9CQUFvQixHQUMxRG80QyxFQUFRdjRDLEVBQVlHLHFCQUFnQkgsRUFBWUcsVUFBYSxHQUM3RHE0QyxFQUFRMTRDLEVBQU9sRSxLQUNmNjhDLEVBQVF6NEMsRUFBWXBFLFdBQ25CLENBQ0xzOEMsVUFBUWptQyxFQUFFLDBCQUNQaW1DLFVBQVFqbUMsRUFBRSxzQkFBYXVtQyxVQUFRRixjQUFTSixVQUFRam1DLEVBQ2pELDJCQUNHd21DLFVBQVFGLEdBQ2JsekMsRUFBS3F6QyxnQkFJVCxTQUFTQyxHQUFtQ3R6QyxPQUNwQzh3QixFQUFPNE0sR0FBTzdKLEtBQUs3ekIsRUFBSzNGLFdBQVd5MkIsTUFDckNqMUIsRUFBTW1FLEVBQUszRixXQUFXazVDLFNBQ3RCVixVQUFRam1DLEVBQUUsV0FDVmltQyxVQUFRam1DLEVBQUUsb0JBRVovUSxFQURFaTFCLEVBQUtXLE9BQU9pTSxLQUFVLGlCQUNmN2hDLGNBQU9nM0MsVUFBUWptQyxFQUFFLGFBQ2pCa2tCLEVBQUtXLE9BQU9pTSxLQUFTemYsSUFBSSxFQUFHLE9BQVEsaUJBQ3BDcGlCLGNBQU9nM0MsVUFBUWptQyxFQUFFLDBCQUVqQi9RLGNBQU9pMUIsRUFBS3ptQixPQUFPLFlBRTlCeE8sWUFBU0EsY0FBTzZoQyxHQUFPNU0sR0FBTXptQixPQUFPLGNBd0VoQ21wQyw2Q0FtRlFsOEMseUNBQ0pBLElBOEJSbThDLG1CQUFxQixXQUNmWixVQUFRenJDLFdBQWFzc0MsRUFBS3A4QyxNQUFNdUwsTUFDbENnd0MsVUFBUWMsZUFBZUQsRUFBS3A4QyxNQUFNdUwsU0FLdEMrd0MsaUNBQW1DLFNBQUFDLEdBRTdCQSxFQUFVdDdDLFFBQVVtN0MsRUFBS0ksTUFBTXY3QyxPQUFVbTdDLEVBQUtJLE1BQU1DLFdBQ2pEQyxTQUFTLENBQ1p6N0MsTUFBT3M3QyxFQUFVdDdDLFdBS3ZCazFDLFNBQVcsU0FBQ3pDLFNBQVNpSixJQUFBQSxTQUFVN3hDLElBQUFBLE9BQ3ZCOHhDLEVBQVcsQ0FDZjM3QyxNQUFPbTdDLEVBQUtTLFFBQVVGLEdBQVksR0FDbENHLG1CQUFvQlYsRUFBS3A4QyxNQUFNKzhDLGVBRzVCRixPQUFTLEtBQ1RULEVBQUtJLE1BQU1DLFNBS1QsR0FBZSxVQUFYM3hDLEdBQXNCc3hDLEVBQUtJLE1BQU1RLE1BQU8sSUFHN0NaLEVBQUtJLE1BQU1TLGFBQ2JDLGFBQWFkLEVBQUtJLE1BQU1TLGFBRVgsU0FBWG55QyxFQUFtQixLQUVmcXlDLEVBQVFDLFlBQVcsYUFDbEJWLFNBQVMsQ0FBRVcsUUFBUSxNQUN2QixLQUNIVCxFQUFTSyxZQUFjRSxFQUN2QlAsRUFBU1MsUUFBUyxJQUVmWCxTQUFTRSxTQWxCZEEsRUFBU0gsU0FBVSxJQUNkQyxTQUFTRSxHQUFVLGtCQUN0QlIsRUFBSzVLLGNBQWMsQ0FBRXZ3QyxNQUFPMDdDLEdBQVksV0FvQjlDdkcsT0FBUyxXQUNIZ0csRUFBS0ksTUFBTU0scUJBR1hWLEVBQUtJLE1BQU1DLFdBQ1JuekMsTUFBTTRxQyxVQUVSd0ksU0FBUyxDQUNaRCxTQUFTLEVBQ1RLLG9CQUFvQixFQUNwQjc3QyxNQUFPbTdDLEVBQUtwOEMsTUFBTWlCLFlBSXRCcThDLFdBQWEsU0FBQ254QixFQUFHNmpCLE1BQ1hvTSxFQUFLSSxNQUFNUSxNQUFPLElBQ1EsMkJBQXhCaE4sRUFBSXRvQyxXQUFXekUsbUJBQ1p5NUMsU0FDSCxDQUNFanhDLFFBQVMsQ0FBQyxZQUFhLFFBQ3ZCOHhDLFdBQVcsRUFDWEMsaUJBQWtCeE4sRUFBSXRvQyxXQUFXekUsS0FDakNoQyxNQUFPLEtBRVQsYUFDT3V3QyxjQUFjLENBQUV2d0MsTUFBTyxXQU1SLFNBQXhCK3VDLEVBQUl0b0MsV0FBV3pFLE1BQ1MsZ0JBQXhCK3NDLEVBQUl0b0MsV0FBV3pFLG1CQUVWeTVDLFNBQ0gsQ0FDRWp4QyxRQUFTMndDLEVBQUtwOEMsTUFBTXlMLFFBQ3BCOHhDLFdBQVcsRUFDWEMsaUJBQWtCeE4sRUFBSXRvQyxXQUFXekUsS0FDakN3NkMsZ0JBQWlCek4sRUFBSXlOLGtCQUV2QixhQUNPak0sY0FBYyxDQUFFdndDLE1BQU8sVUFLN0J5OEMsZUFBZ0IsSUFDaEJoQixTQUNILENBQ0VELFNBQVMsRUFDVHg3QyxNQUFPK3VDLEVBQUkyTixrQkFFYixhQUNPcjBDLE1BQU1zMEMsT0FDUHhCLEVBQUtwOEMsTUFBTTY5QyxrQkFDUjc5QyxNQUFNNjlDLGdCQUFnQjdOLEVBQUl0b0MsV0FBWXNvQyxFQUFJeU4sbUJBRTFDejlDLE1BQU13ekMsU0FBU3hELEVBQUl0b0MsV0FBWTAwQyxFQUFLcDhDLE1BQU02SCxNQUU1QzYwQyxTQUNILENBQ0VJLG9CQUFvQixFQUNwQnJ4QyxRQUFTMndDLEVBQUtwOEMsTUFBTXlMLFFBQ3BCOHhDLFdBQVcsRUFDWGpNLFlBQWEsS0FFZixhQUNPb00sZUFBZ0IsTUFJdkJ0QixFQUFLcDhDLE1BQU04OUMsYUFDVDFCLEVBQUtwOEMsTUFBTSs4QyxXQUFZWCxFQUFLcDhDLE1BQU0rOUMsY0FFL0IvOUMsTUFBTTg5QyxjQUVUMUIsRUFBS3A4QyxNQUFNKzhDLFlBQ1JpQiw4QkFLTnRCLFVBQ0gsU0FBQXVCLFNBQWMsQ0FDWlQsaUJBQWtCUyxFQUFVaDlDLFVBRTlCLGtCQUFNbTdDLEVBQUs4Qiw4QkFLakJDLDRCQUE4QixhQUN2QnpCLFNBQVMsQ0FDWnBMLFlBQWEsR0FDYjdsQyxRQUFTMndDLEVBQUtwOEMsTUFBTXlMLFFBQ3BCOHhDLFdBQVcsRUFDWGQsU0FBUyxPQUliL0ssbUJBQXFCLFNBQUFocUMsU0FFRywyQkFBcEJBLEVBQVd6RSxNQUNTLFNBQXBCeUUsRUFBV3pFLEtBRUosR0MzY0UsU0FBa0JGLE9BQ3pCMEcsRUFBUXJCLEdBQWFyRixHQUFZLFVBQy9CQSxFQUFXVSxXQUNaLG9CQUNBLHNCQUNBLG1CQUNBLGNBQ0lnRyxFQUFNLElBQU1BLEVBQU0sT0FDdEIsaUNBQ0Esd0JBQ0lBLEVBQU0sa0JBRU5BLEVBQU0zTCxPQUFTLEdBQWtCLEtBQWIyTCxFQUFNLEdBQzdCQSxFQUFNSyxLQUFLLE1BQ1hMLEVBQU0sSUFBTUEsRUFBTSxJRCtiakIyMEMsQ0FBUzEyQyxFQUFXM0UsZUFHN0JtN0Msc0JBQXdCLFdBRWEsMkJBQWhDOUIsRUFBS0ksTUFBTWdCLGtCQUNzQixTQUFoQ3BCLEVBQUtJLE1BQU1nQixtQkFDYnBCLEVBQUtJLE1BQU1RLE1BWUZaLEVBQUtJLE1BQU1nQixrQkFBb0JwQixFQUFLSSxNQUFNUSxTQUU5Q04sU0FDSCxDQUNFYyxpQkFBa0IsS0FDbEJmLFNBQVMsSUFFWCxXQUNNTCxFQUFLSSxNQUFNbEwsWUFBWXh6QyxXQUNwQndMLE1BQU1zMEMsU0FDTjU5QyxNQUFNd3pDLFNBQ1Q0SSxFQUFLSSxNQUFNbEwsWUFBWThLLEVBQUtJLE1BQU1pQixpQkFDbENyQixFQUFLcDhDLE1BQU02SCxJQUdUdTBDLEVBQUtwOEMsTUFBTSs4QyxZQUNSaUIscUJBR0w1QixFQUFLcDhDLE1BQU04OUMsYUFDVDFCLEVBQUtwOEMsTUFBTSs4QyxXQUFZWCxFQUFLcDhDLE1BQU0rOUMsY0FFL0IvOUMsTUFBTTg5QyxvQkFoQ2RwQixTQUNILENBQ0VjLGlCQUFrQixLQUNsQmYsU0FBUyxJQUVYLGFBQ09uekMsTUFBTTRxQyxjQWtDbkJtSyxZQUFjLGtCQUVWcEwsa0NBQ0Vod0MsS0FBSyxTQUNMK3dDLFVBQVd4QixHQUFPLGVBQ2xCaUMsUUFBUzJILEVBQUsvSyx3QkFDRmtLLFVBQVFqbUMsRUFBRSx1QkFFdEIyOUIsd0JBQUMyQixXQUFLQyxJQUFJLFFBQVExQyxNQUFPaUssRUFBS3A4QyxNQUFNbXlDLFlBSzFDWCxjQUFnQixnQkFBR3Z3QyxJQUFBQSxNQUFPcTlDLElBQUFBLHFCQUNqQmxDLEVBQUtNLFNBQ1YsQ0FBRU0sT0FBTyxFQUFPc0IsY0FBZ0JBLElBQWdCLElBQ2hELGVBQ01sQyxFQUFLc0IsbUJBT0wvdkMsRUFIRTR3QyxFQUNKQyxVQUFRcEMsRUFBS3A4QyxNQUFNMk4sVUFDbkJ5dUMsRUFBS3A4QyxNQUFNMk4sUUFBUTlKLFNBQVMsYUFFMUJ1NEMsRUFBS0ksTUFBTWUsV0FDYjV2QyxFQUFVLENBQUMsY0FFVDZ3QyxVQUFRcEMsRUFBS3A4QyxNQUFNMk4sVUFDbkJ5dUMsRUFBS3A4QyxNQUFNMk4sUUFBUTlKLFNBQVMsV0FFNUI4SixFQUFRdkwsS0FBSyxVQUdibzhDLFVBQVFwQyxFQUFLcDhDLE1BQU0yTixVQUNuQnl1QyxFQUFLcDhDLE1BQU0yTixRQUFROUosU0FBUyx3QkFFNUI4SixFQUFRdkwsS0FBSyx1QkFFTG84QyxVQUFRcEMsRUFBS3A4QyxNQUFNMk4sV0FDN0JBLElBQWN5dUMsRUFBS3A4QyxNQUFNMk4sU0FHdkI0d0MsSUFDQ25DLEVBQUtwOEMsTUFBTSs4QyxXQUNYeUIsVUFBUXBDLEVBQUtwOEMsTUFBTXlMLFVBQ2xCMndDLEVBQUtwOEMsTUFBTXlMLFFBQVE1SCxTQUFTLGVBRTlCOEosRUFBUXZMLEtBQUssMkJYWkksU0FDM0J1TCxFQUNBbEMsRUFDQW1DLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBQ0E1QyxFQUNBNkMsRUFDQUMsRUFDQUMsR0FFQUYsRUFBUyxNQUNUUCxHQUNFRSxFQUNBbEMsRUFDQW1DLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBQ0E1QyxFQUNBNkMsRUFDQUMsRUFDQUMsR1dLSXV3QyxDQUNFOXdDLEVBWkF5dUMsRUFBS0ksTUFBTS93QyxTQUNYMndDLEVBQUtJLE1BQU0vd0MsUUFBUXpGLFFBQ2pCLFNBQUEyVixXQUVJNGlDLEdBQ00sY0FBTjVpQyxJQUNDeWdDLEVBQUtJLE1BQU1lLFlBQ1huQixFQUFLcDhDLE1BQU0rOEMsYUFPbEJYLEVBQUtwOEMsTUFBTTROLGNBQ1h3dUMsRUFBS3A4QyxNQUFNNk4sY0FDWHV1QyxFQUFLcDhDLE1BQU04TixjQUNYc3VDLEVBQUtwOEMsTUFBTStOLGNBQ1gsQ0FDRXpFLE1BQU9ySSxHQUFTLEtBRWxCLFNBQUF5OUMsTUFDc0IsTUFBaEJBLE9BSUVwTixHQUFlb04sRUFBYWg0QyxTQUFXLElBQzFDVixRQUNDLFNBQUEwQixTQUNzQixnQkFBcEJBLEVBQVd6RSxNQUNVLGdCQUFwQnlFLEVBQVd6RSxNQUNWeUUsRUFBVzNFLFdBQVd5MkIsS0FBTzRNLEtBQVM3SixVQUUzQ3gyQixLQUFJLFNBQUEyQixNQUVtQixvQkFBcEJBLEVBQVd6RSxNQUNTLGtCQUFwQnlFLEVBQVd6RSxNQUNTLDJCQUFwQnlFLEVBQVd6RSxNQUNTLFNBQXBCeUUsRUFBV3pFLEtBQ1gsS0FDTTA3QyxPQUFrQmozQyxVQUN4QmkzQyxFQUFXNTdDLFdBQVdXLFFBQVU2M0MsVUFBUWptQyxFQUN0QzVOLEVBQVczRSxXQUFXVyxTQUVqQmk3QyxTQUVGajNDLEtBR1R6RyxJQUFVbTdDLEVBQUtJLE1BQU12N0MsT0FDckJBLElBQVVtN0MsRUFBS0ksTUFBTWdCLGtCQUNXLDJCQUFoQ3BCLEVBQUtJLE1BQU1nQixrQkFDcUIsU0FBaENwQixFQUFLSSxNQUFNZ0Isa0JBQ3FCLGdCQUFoQ3BCLEVBQUtJLE1BQU1nQixvQkFFTmQsU0FDSCxDQUNFTSxPQUFPLEVBQ1AxTCxZQUFBQSxJQUVGLGtCQUFNOEssRUFBSzhCLDhCQUlqQjlCLEVBQUtwOEMsTUFBTWlPLFNBQ1htdUMsRUFBS3A4QyxNQUFNa08saUJBTW5CbWpDLFdBQWEsZUFDTHVMLEVBQVcsQ0FDZkgsU0FBUyxFQUNUeDdDLE1BQU8sR0FDUHdLLFFBQVMyd0MsRUFBS3A4QyxNQUFNeUwsUUFDcEI4eEMsV0FBVyxLQUdSYixTQUFTRSxHQUFVLGtCQUN0QlIsRUFBSzVLLGNBQWMsQ0FBRXZ3QyxNQUFPLEdBQUlxOUMsZUFBZSxPQUU3Q2xDLEVBQUtwOEMsTUFBTTQrQyxXQUNSNStDLE1BQU00K0MsUUFBUXhDLEVBQUtwOEMsTUFBTTZILE1BRTNCeUIsTUFBTTRxQyxXQUdiMkssYUFBZSxTQUFBQyxRQUNSeDFDLE1BQU00cUMsUUFDUGtJLEVBQUtwOEMsTUFBTSs4QyxZQUNSLzhDLE1BQU1zNkMsUUFFUjhCLEVBQUtJLE1BQU1DLFFBQVMsS0FDakJHLEVBQVcsQ0FDZkgsU0FBUyxFQUVUZSxpQkFBa0IsS0FDbEJWLG1CQUFvQlYsRUFBS3A4QyxNQUFNKzhDLFVBSTNCZ0MsRUFBZSxDQUNuQnRDLFNBQVMsRUFDVGUsaUJBQWtCLEtBQ2xCdjhDLE1BQU82OUMsR0FHSjFDLEVBQUtJLE1BQU1sTCxZQUFZeHpDLFVBWXJCMHpDLGNBQWMsQ0FBRXZ3QyxNQUFPbTdDLEVBQUtJLE1BQU12N0MsVUFDbEN5N0MsU0FBU0UsSUFYWSxXQUF0QjEvQyxFQUFPNGhELElBQTRCQSxJQUtoQ3BDLFNBQVNxQyxHQUFjLGtCQUMxQjNDLEVBQUs1SyxjQUFjLENBQUV2d0MsTUFBTzY5QyxTQUx6QnBDLFNBQVNFLEdBQVUsa0JBQ3RCUixFQUFLNUssY0FBYyxDQUFFdndDLE1BQU9tN0MsRUFBS0ksTUFBTXY3QyxlQWNqRCs5QyxvQkFBc0IsU0FBQUMsR0FDQSxPQUFoQkEsTUFDRzMxQyxNQUFRMjFDLEVBQVkzMUMsTUFDckI4eUMsRUFBS3A4QyxNQUFNay9DLFlBQ1JsL0MsTUFBTWsvQyxTQUFTRCxFQUFZMzFDLFdBTXRDNjFDLFVBQVksU0FBQXhDLEtBQ0xFLE9BQVNGLEVBQVM1NUMsV0FBVzlELFNBQzVCMjlDLEVBQVcsQ0FDZkgsU0FBUyxFQUNUeDdDLE1BQU8wN0MsRUFBUzU1QyxXQUFXOUQsS0FDM0JpL0Msc0JBQXVCdkIsRUFDdkJLLE9BQU8sS0FHSk4sU0FBU0UsS0FDVHBMLGNBQWMsQ0FBRXZ3QyxNQUFPMDdDLEVBQVM1NUMsV0FBVzlELFNBQzNDcUssTUFBTTRxQyxXQUdiSCxXQUFhLFNBQUFyckMsT0FDTHlFLEVBQ1UsZ0JBQWR6RSxFQUFLekYsVUFFSXlGLEdBQ0hxekMsZUFBZ0JDLEdBQW1DdHpDLEtBRXJEQSxFQUNBMDJDLEVBQVU1RCxHQUFxQjl5QyxVQUVuQ3VxQyx3QkFBQ29NLFdBQ0MzMkMsS0FBTXlFLEVBQ05peUMsUUFBU0EsRUFDVHZRLFNBQVV1TixFQUFLSSxNQUFNUSxNQUNyQkQsU0FBVVgsRUFBS3A4QyxNQUFNKzhDLFNBQ3JCdUMsb0JBQXFCL0QsVUFBUWptQyxFQUFFLGFBQy9CNjhCLE1BQU9pSyxFQUFLcDhDLE1BQU1teUMsTUFDbEJFLHVCQUF3QitKLEVBQUtwOEMsTUFBTXF5Qyx1QkFDbkM4TSxVQUFXL0MsRUFBSytDLFVBQ2hCNU0sWUFBYTZKLEVBQUtwOEMsTUFBTXV5QyxZQUN4QmdOLGVBQWdCbkQsRUFBS3A4QyxNQUFNdS9DLGVBQzNCQyxRQUFTcEQsRUFBS3A4QyxNQUFNdy9DLGFBSzFCeEIsa0JBQW9CLGFBQ2JoK0MsTUFBTTA2QyxXQUNOZ0MsU0FDSCxDQUNFSSxvQkFBb0IsRUFDcEI3N0MsTUFBT203QyxFQUFLcDhDLE1BQU1pQixRQUVwQixXQUNFNjJDLE9BQU84QyxTQUFTLEVBQUd3QixFQUFLSSxNQUFNakMsV0FDekI0RCxvQ0FLWHNCLFFBQVUsU0FBQS9MLE9BQ0owSSxFQUFLc0IsbUJBR0g5SixFQUFVRixFQUFNMTFDLE9BQ04sV0FBWjQxQyxLQUNHOEksU0FBUyxDQUFFRCxTQUFTLElBRXZCTCxFQUFLSSxNQUFNQyxjQUNHLFVBQVo3SSxHQUE0QyxLQUFyQndJLEVBQUtJLE1BQU12N0MsU0FDL0J5N0MsU0FBUyxDQUFFYyxrQkFBa0IsSUFBUSxhQUNuQ2hNLGNBQWMsQ0FBRXZ3QyxNQUFPbTdDLEVBQUtJLE1BQU12N0Msa0JBR3RDNDlDLGtCQUtRLFVBQVpqTCxHQUFtQyxjQUFaQSxHQUNILEtBQXJCd0ksRUFBS0ksTUFBTXY3QyxVQU1HLGNBQVoyeUMsR0FBZ0QsS0FBckJ3SSxFQUFLSSxNQUFNdjdDLE1BQWMsS0FDaEQyN0MsRUFBVyxDQUNmSCxTQUFTLEVBQ1R4N0MsTUFBT203QyxFQUFLSSxNQUFNdjdDLFNBR2Z5N0MsU0FBU0UsR0FBVSxrQkFDdEJSLEVBQUs1SyxjQUFjLENBQUV2d0MsTUFBT203QyxFQUFLSSxNQUFNdjdDLFdBR3RDbTdDLEVBQUtJLE1BQU1DLFdBQ1RDLFNBQVMsQ0FBRUQsU0FBUyxJQUdYLFFBQVo3SSxLQUNHd0MsZ0JBbkJBL0UsaUJBdUJUcU8sd0JBQTBCLGVBQ3BCdDdDLEVBQVEsR0FDTnU3QyxFQUFrQnZELEVBQUtJLE1BQU1sTCxZQUFZLFVBQzNDcU8sSUFDRUEsRUFBZ0IxOEMsTUFBUTA4QyxFQUFnQjE4QyxLQUFLWSxTQUFTLGNBQ3hETyxFQUFNaEMsS0FBS201QyxVQUFRam1DLEVBQUUsY0FFdkJsUixFQUFRQSxFQUFNMkYsT0FBT3l4QyxHQUFxQlksRUFBS0ksTUFBTWxMLFlBQVksTUFFNURseUMsRUFBSSxJQUFJd2dELElBQUl4N0MsSUFBUTBGLEtBQUssVUFHbEMrbkMsaUJBQW1CLGlCQUtidUssRUFBS3A4QyxNQUFNNk4sY0FIYm1CLElBQUFBLFFBQ0E2aUMsSUFBQUEsaUJBQ0FnTyxJQUFBQSxrQkFFRTd3QyxHQUFXNmlDLElBQ2JBLEVBQWlCN2lDLEdBQ2I2d0MsR0FDRkEsRUFBa0I3d0MsS0FFZndpQyxjQUFjLENBQUV2d0MsTUFBT203QyxFQUFLSSxNQUFNdjdDLFlBSTNDNitDLDhCQUFnQyxpQkFDWixXQUFsQjFELEVBQUtwOEMsTUFBTTZILElBQ08sZ0JBQWxCdTBDLEVBQUtwOEMsTUFBTTZILElBQ08sY0FBbEJ1MEMsRUFBS3A4QyxNQUFNNkgsSUFDTyx5QkFBbEJ1MEMsRUFBS3A4QyxNQUFNNkgsTUFFYms0QyxRQUFVLFdBQ1UsQ0FDaEIsbUJBQ0Esc0JBQ0EsbUJBQ0Esb0JBQ0EsZ0JBQ0Esc0JBQ0EsZUFDQSwyQkFDQSx1QkFDQSx5QkFFWWw4QyxTQUFTdTRDLEVBQUtJLE1BQU12N0MsVUFDM0Jvd0MsaUJBRURrSixFQUFVekMsT0FBT2tJLG1CQUNoQjVELEVBQUtNLFNBQVMsQ0FDbkJuQyxRQUFBQSxLQTNqQkZuVSxHQUFPOEUsR0FBR2lDLFdBQVdudEMsRUFBTTZwQyxVQUMzQnpELEdBQU9wekIsT0FBT2hULEVBQU11TCxRQUVmaXhDLE1BQVEsQ0FDWHY3QyxNQUFPakIsRUFBTWlCLE1BQ2Jxd0MsWUFBYSxHQUNibUwsU0FBUyxFQUNUTyxPQUFPLEVBQ1BGLG9CQUFvQixFQUNwQnJ4QyxRQUFTekwsRUFBTXlMLFFBQ2Y4eEMsV0FBVyxFQUNYTixZQUFhLEtBQ2JJLFFBQVEsRUFDUkcsaUJBQWtCLEtBQ2xCQyxnQkFBaUIsRUFDakJhLGVBQWUsRUFDZi9ELFFBQVMsR0FFWDk4QyxPQUFPeU0sS0FBS29qQyxJQUFjNWpDLFNBQVEsU0FBQTZCLEdBQ2hDZ3dDLFVBQVEwRSxrQkFBa0IxMEMsRUFBTSxjQUFlK2hDLEdBQWEvaEMsd0RBTWhFLFNBQXNCZ3hDLEVBQVcyRCxVQUN2QmozQyxVQUFRaTNDLEVBQVc5aEQsS0FBS28rQyxTQUFXdnpDLFVBQVFzekMsRUFBV24rQyxLQUFLNEIsNkJBcWlCckUsc0JBQ011N0MsVUFBUXpyQyxXQUFhMVIsS0FBSzRCLE1BQU11TCxNQUNsQ2d3QyxVQUFRYyxlQUFlaitDLEtBQUs0QixNQUFNdUwsWUFPaENuTixLQUFLbytDLE1BSlB2N0MsSUFBQUEsTUFDQXF3QyxJQUFBQSxZQUNBd0wsSUFBQUEsbUJBQ0F3QixJQUFBQSxjQUVJL00sRUFBYSxDQUNqQjhFLFlBQWFqNEMsS0FBSzRCLE1BQU1tZ0Qsc0JBQ3BCL2hELEtBQUs0QixNQUFNbWdELHNCQUNYNUUsVUFBUWptQyxFQUFFbFgsS0FBSzRCLE1BQU1xMkMsYUFDekJwMUMsTUFBQUEsRUFDQWsxQyxTQUFVLzNDLEtBQUsrM0MsU0FDZkMsT0FBUWg0QyxLQUFLZzRDLE9BQ2JwQyxvQkFDS3hCLEdBQU9scEMsa0JBQ1JsTCxLQUFLNEIsTUFBTSs4QyxVQUFZMytDLEtBQUs0QixNQUFNNE4sY0FBZ0I0a0MsR0FBTzROLEtBQU8sZUFDOUQ1TixHQUFPcDBDLEtBQUs0QixNQUFNNkgsS0FBTyxlQUMzQnpKLEtBQUtvK0MsTUFBTXY3QyxNQUFRdXhDLEdBQU8wQyxTQUFXLGVBQ25DOTJDLEtBQUs0QixNQUFNcWdELGdCQUVqQjNMLFVBQVd0MkMsS0FBS3FoRCxRQUNoQi9QLFNBQVV0eEMsS0FBSzRCLE1BQU0wdkMsVUFFakI0USxFQUFZbGlELEtBQUs0QixNQUFNNkgsR0FBR0ksUUFBUSxlQUFnQixJQUNwRHM0QyxFQUFjbmlELEtBQUs0QixNQUFNMnhDLFdBQWE0SixVQUFRam1DLEVBQUVnckMsR0FDcERDLEVBQWNBLEVBQVl0NEMsUUFBUSxlQUFnQixRQUM1Q3U0QyxFQUFtQnBpRCxLQUFLNEIsTUFBTTB2QyxtQkFDN0I2TCxVQUFRam1DLEVBQUUsaUJBQ2IsR0FDRW1yQyxFQUFnQnJpRCxLQUFLNEIsTUFBTSs4QyxTQUM3QnhCLFVBQVFqbUMsRUFBRSxtQ0FDVmltQyxVQUFRam1DLEVBQUUsb0NBQ1JvckMsRUFBb0JuRixVQUFRam1DLEVBQUUseUJBQTBCLENBQzVEcXJDLE1BQU9yUCxFQUFZeHpDLFNBR2Y4aUQsRUFBd0Isa0JBQ3hCQyxFQUFLbkIsMkJBQTZCbUIsRUFBSzdnRCxNQUFNaUIsTUFDeENzNkMsVUFBUWptQyxFQUFFLDRCQUE2QixDQUM1Q3dyQyxVQUFXRCxFQUFLbkIsMkJBQTZCbUIsRUFBSzdnRCxNQUFNaUIsUUFHckQsV0FJUGd5Qyx3QkFBQ0EsVUFBTThOLGNBQ0w5TixnQ0FBTWUsVUFBV3hCLEdBQU8sV0FBWXdPLEtBQUssVUFDckM1aUQsS0FBS28rQyxNQUFNYSxRQUNYai9DLEtBQUtvK0MsTUFBTUMsbUJBQ1JpRSxjQUFxQkUsTUFFM0J4aUQsS0FBSzRCLE1BQU0rOEMsVUFDVjlKLHdCQUFDL0IsSUFDQ29CLFdBQVl3SyxFQUNaM0wsV0FBWS95QyxLQUFLNEIsTUFBTW14QyxXQUN2QlUsaUJBQWtCenpDLEtBQUt5ekMsaUJBQ3ZCaHFDLEdBQUl6SixLQUFLNEIsTUFBTTZILEdBQ2Z3cEMsV0FBWWp6QyxLQUFLaXpDLFdBQ2pCcHdDLE1BQU83QyxLQUFLbytDLE1BQU12N0MsTUFDbEJxd0Msd0JBQ0tBLElBQ0gsQ0FDRXJ1QyxLQUFNLHVCQUNOUyxRQUFTNjNDLFVBQVFqbUMsRUFBRSwyQkFHdkJpOEIsZ0JBQ0tBLEdBQ0g4RSxZQUFhajRDLEtBQUswaEQsZ0NBQ2R2RSxVQUFRam1DLEVBQUUsNkJBQ1ZpOEIsRUFBVzhFLGNBRWpCN0UsY0FBZXB6QyxLQUFLb3pDLGNBQ3BCMk0sNEJBQTZCLy9DLEtBQUsrL0MsNEJBQ2xDek0sbUJBQW9CdHpDLEtBQUtzekMsbUJBQ3pCRCxpQkFBa0JyekMsS0FBSzIxQyxXQUN2QjNDLFlBQWFoekMsS0FBSzQvQyxrQkFDbEJyTSxVQUFXNk8sRUFDUnoyQyxPQUFPLEtBQ1BBLE9BQU93MkMsR0FDUHgyQyxPQUFPLEtBQ1BBLE9BQU82MkMsS0FDVng4QyxNQUNFaEcsS0FBSzRCLE1BQU1paEQsWUFDUDdpRCxLQUFLNEIsTUFBTWloRCxZQUNYMUYsVUFBUWptQyxFQUFFbFgsS0FBSzRCLE1BQU02SCxJQUUzQitwQyxxQkFBc0J4ekMsS0FBS2svQyxXQUMzQnhMLGlCQUFrQnlKLFVBQVFqbUMsRUFBRSw4QkFDNUJ5OEIsd0JBQXlCd0osVUFBUWptQyxFQUFFLFVBQ25DMDhCLDBCQUEyQnVKLFVBQVFqbUMsRUFBRSxVQUNyQzI4QixxQkFBc0JzSixVQUFRam1DLEVBQUUsc0JBQ2hDNDhCLFdBQVlvTSxFQUNabk0sTUFBTy96QyxLQUFLNEIsTUFBTW15QyxNQUNsQkMsV0FBWWgwQyxLQUFLNEIsTUFBTW95QyxXQUN2QkMsdUJBQXdCajBDLEtBQUs0QixNQUFNcXlDLHVCQUNuQ0UsWUFBYW4wQyxLQUFLNEIsTUFBTXV5QyxZQUN4QkUsV0FBWXIwQyxLQUFLNEIsTUFBTXl5QyxjQUd6QnFLLEdBQ0E3SiwrQkFDRWUsVUFBV2tOLFVBQ1QxTyxHQUFPLCtCQUNQQSxHQUFPcDBDLEtBQUs0QixNQUFNNkgsS0FFcEJ3b0MsTUFBTyxxQkFDU2p5QyxLQUFLNEIsTUFBTW15QyxpQ0FDTC96QyxLQUFLNEIsTUFBTW95QyxjQUdoQ2gwQyxLQUFLNEIsTUFBTW1oRCxNQUNWbE8sK0JBQ0VlLFVBQVdrTixVQUNUMU8sNkJBQ0FBLEdBQU9wMEMsS0FBSzRCLE1BQU02SCxJQUNsQnpKLEtBQUs0QixNQUFNcWdELDBCQUNOamlELEtBQUs0QixNQUFNcWdELGdDQUdsQnBOLHdCQUFDMkIsV0FBS0MsY0FBUXoyQyxLQUFLNEIsTUFBTW1oRCxTQUc3QmxPLHdCQUFDaEMsV0FDQzZELHdCQUF5QjEyQyxLQUFLbytDLE1BQU1DLFFBQ3BDNTBDLEdBQUl6SixLQUFLNEIsTUFBTTZILEdBQ2Z5cEMsWUFBYUEsRUFDYnlELDRCQUE2QjMyQyxLQUFLb3pDLGNBQ2xDMk0sNEJBQTZCLy9DLEtBQUsrL0MsNEJBQ2xDek0sbUJBQW9CdHpDLEtBQUtzekMsbUJBQ3pCRCxpQkFBa0JyekMsS0FBSzIxQyxXQUN2QnhDLGdCQUNLQSxHQUNId08sUUFBUzNoRCxLQUFLMmhELFVBRWhCL0ssK0JBQ0FDLHdCQUF5QixrQkFBTTRMLEVBQUtyRSxNQUFNQyxTQUMxQzJFLDBCQUEyQmhqRCxLQUFLbytDLE1BQU1lLFVBQ3RDbEksTUFBTzdDLEdBQ1A0QyxxQkFBc0IsU0FBQTEwQyxVQUNwQnV5QyxnREFDRUEsaUNBQU9lLFVBQVd4QixHQUFPLFdBQVlnQyxRQUFTcU0sRUFBSzdnRCxNQUFNNkgsSUFDdEQrNEMsSUFDRTcyQyxPQUFPLEtBQ1BBLE9BQU95MkMsR0FDUHoyQyxPQUFPLEtBQ1BBLE9BQU93MkMsR0FDUHgyQyxPQUFPLEtBQ1BBLE9BQU8wMkMsSUFFWnhOLDREQUNjMk4sSUFDVDcyQyxPQUFPLEtBQ1BBLE9BQU95MkMsR0FDUHoyQyxPQUFPLEtBQ1BBLE9BQU93MkMsR0FDUHgyQyxPQUFPLEtBQ1BBLE9BQU8wMkMsR0FDVjU0QyxHQUFJZzVDLEVBQUs3Z0QsTUFBTTZILEdBQ2Y0c0MsUUFBU29NLEVBQUtoQyxhQUNkbkssVUFBV21NLEVBQUtwQixTQUNaLytDLElBRUxtZ0QsRUFBS3JFLE1BQU12N0MsT0FBUzQvQyxFQUFLeEMsZ0JBRzlCek0scUJBQXNCeHpDLEtBQUtrL0MsV0FDM0J0TixJQUFLNXhDLEtBQUs0Z0QsK0JBaDBCSS9MLFVBQU1vTyxXQUE1Qm5GLEdBK0NHb0YsYUFBZSxDQUNwQm5NLFdBQVcsRUFDWG5CLFVBQVcsR0FDWG1OLFVBQU1wL0MsRUFDTmQsTUFBTyxHQUNQMk0sbUJBQWU3TCxFQUNmd0osS0FBTSxLQUNORSxRQUFTLEdBQ1RzeEMsVUFBVSxFQUNWNUssTUFBTyxVQUNQQyxXQUFZLFVBQ1pDLHVCQUF3QixVQUN4QnhJLFNBQVUsa0JBQ1Y1N0IsU0FBVSxDQUNSc3pDLGFBQWMsU0FDZEMsWUFBYSxXQUVmUCxpQkFBYWwvQyxFQUNicytDLGVBQWdCLEdBQ2hCRiwyQkFBdUJwK0MsRUFDdkJ3d0MsWUFBYSxDQUNYZ0MsT0FBUSxLQUVWZ0wsZUFBZ0IsWUFDRixzQkFDQyxzQkFDQSx1QkFDQyx1QkFDQSwwQkFDRyxXQUVuQjdQLFVBQVUsRUFDVjhQLGFBQVN6OUMsRUFDVDB3QyxZQUFZLHlDQWhGVnlKLEdBQ0duRyxVQUFZLENBQ2pCNUUsV0FBWTZFLFVBQVV0NUIsT0FBT3U1QixXQUM3QmQsVUFBV2EsVUFBVWh0QyxLQUNyQmdyQyxVQUFXZ0MsVUFBVXQ1QixPQUNyQnlrQyxLQUFNbkwsVUFBVXQ1QixPQUNoQjdVLEdBQUltdUMsVUFBVXQ1QixPQUFPdTVCLFdBQ3JCSSxZQUFhTCxVQUFVdDVCLE9BQU91NUIsV0FDOUJrSyxzQkFBdUJuSyxVQUFVdDVCLE9BQ2pDemIsTUFBTyswQyxVQUFVdDVCLE9BQ2pCN08sY0FBZW1vQyxVQUFVeUwsSUFBSXhMLFdBQzdCdEUsVUFBV3FFLFVBQVV0NUIsT0FDckI4MkIsU0FBVXdDLFVBQVVuOEIsS0FDcEJqTSxjQUFlb29DLFVBQVV0NUIsT0FDekI1TyxjQUFla29DLFVBQVVuOEIsS0FDekI5TCxjQUFlaW9DLFVBQVVuOUIsT0FDekIrbEMsUUFBUzVJLFVBQVVuOEIsS0FDbkJxbEMsU0FBVWxKLFVBQVVuOEIsS0FDcEJna0MsZ0JBQWlCN0gsVUFBVW44QixLQUMzQmlrQyxZQUFhOUgsVUFBVW44QixLQUN2QnRPLEtBQU15cUMsVUFBVXQ1QixPQUNoQmpSLFFBQVN1cUMsVUFBVTBMLFFBQVExTCxVQUFVdDVCLFFBQ3JDL08sUUFBU3FvQyxVQUFVMEwsUUFBUTFMLFVBQVV0NUIsUUFDckNxZ0MsU0FBVS9HLFVBQVVodEMsS0FDcEJtcEMsTUFBTzZELFVBQVV0NUIsT0FDakIwMUIsV0FBWTRELFVBQVV0NUIsT0FDdEIyMUIsdUJBQXdCMkQsVUFBVXQ1QixPQUNsQ210QixTQUFVbU0sVUFBVXQ1QixPQUNwQnpPLFNBQVUrbkMsVUFBVUUsTUFBTSxDQUN4QnFMLGFBQWN2TCxVQUFVdDVCLE9BQ3hCOGtDLFlBQWF4TCxVQUFVdDVCLFNBRXpCdWtDLFlBQWFqTCxVQUFVdDVCLE9BQ3ZCNDlCLEtBQU10RSxVQUFVbjhCLEtBQUtvOEIsV0FDckJ5RSxPQUFRMUUsVUFBVW44QixLQUFLbzhCLFdBQ3ZCL25DLFNBQVU4bkMsVUFBVWdCLE9BQ3BCcUosZUFBZ0JySyxVQUFVdDVCLE9BQzFCNjFCLFlBQWF5RCxVQUFVRSxNQUFNLENBQzNCM0IsT0FBUXlCLFVBQVVuOUIsU0FFcEIwbUMsZUFBZ0J2SixVQUFVZ0IsT0FDMUJ0SCxTQUFVc0csVUFBVWh0QyxLQUNwQncyQyxRQUFTeEosVUFBVXQ1QixPQUNuQisxQixXQUFZdUQsVUFBVWh0QyxLQUN0QiswQyxXQUFZL0gsVUFBVWh0QyxXRTdRSHE0QyxHRjBpQ2pCTSxJRTFpQ2lCTixHRjBpQzRCbkYsR0V6aUMxQyxTQUFBbDhDLFNBQ29CK1IsR0FBTXNvQyxnQkFBdkJDLElBQUFBLEtBQU1JLElBQUFBLGNBRVB6SCx3QkFBQ29PLGtCQUFVL0csS0FBTUEsRUFBTUksT0FBUUEsR0FBWTE2QyJ9
45
+ /*! no static exports found */function(c,n){c.exports=e}})},e.exports=n(g.default)})),Qe=(Ve=Ke)&&Ve.__esModule&&Object.prototype.hasOwnProperty.call(Ve,"default")?Ve.default:Ve;function Je(e){var c=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,o=ne(e);if(c){var t=ne(this).constructor;n=Reflect.construct(o,arguments,t)}else n=o.apply(this,arguments);return ce(this,n)}}Pe.locale("en"),W.default.init({fallbackLng:"fi",defaultNS:"translation",interpolation:{escapeValue:!1}});"production"!==process.env.NODE_ENV&&N.default.node;var Ze=function(e){if(e&&e.GTFS.platform){var c=e.GTFS,n=c.modes,o=c.platform;return[n&&"RAIL"===n[0]?W.default.t("track"):W.default.t("platform"),o]}};function $e(e){if("FutureRoute"!==e.type){if("SelectFromMap"===e.type)return["",W.default.t("select-from-map")];if("CurrentLocation"===e.type)return["",W.default.t("use-own-position")];if("SelectFromOwnLocations"===e.type)return["",W.default.t("select-from-own-locations")];var c,n=oe(Ae(e.properties,!0),2),o=n[0],t=n[1];if(e.properties.layer.toLowerCase().includes("bikerental")||e.properties.layer.toLowerCase().includes("bikestation"))return[c=W.default.t("bikerentalstation"),o,void 0,e.properties.labelId];if("bikepark"===e.properties.layer)return[c=W.default.t("bikepark"),o,void 0,void 0];if("carpark"===e.properties.layer)return[c=W.default.t("carpark"),o,void 0,void 0];if(e.properties.mode)c=W.default.t(e.properties.mode.toLowerCase().replace("favourite",""));else{var a=e.properties.layer.replace("route-","").toLowerCase().replace("favourite","");c=W.default.t(a)}if(e.properties.id&&("stop"===e.properties.layer||"station"===e.properties.layer)){var i,r=de(e.properties),M=null===(i=e.properties.addendum)||void 0===i?void 0:i.GTFS.modes,s=Ze(e.properties.addendum);return[c,ue(o,r),t,r,M,s]}if("favouriteStop"===e.properties.layer||"favouriteStation"===e.properties.layer){var l=e.properties,u=l.address,p=l.code;return[c,u?ue(u.split(",")[0],p):o,t,p,void 0,Ze(e.properties.addendum)]}return[c,o,t]}var d=e.properties,b=d.origin,A=d.destination,f=b.locality?", ".concat(b.locality," foobar"):"",z=A.locality?", ".concat(A.locality):"",h=b.name,O=A.name;return[W.default.t("future-route"),"".concat(W.default.t("origin")," ").concat(h).concat(f," ").concat(W.default.t("destination")," ").concat(O).concat(z),e.translatedText]}function ec(e){var c=Pe.unix(e.properties.time),n=e.properties.arriveBy?W.default.t("arrival"):W.default.t("departure");return n=c.isSame(Pe(),"day")?"".concat(n," ").concat(W.default.t("today-at")):c.isSame(Pe().add(1,"day"),"day")?"".concat(n," ").concat(W.default.t("tomorrow-at")):"".concat(n," ").concat(c.format("dd D.M.")),n="".concat(n," ").concat(Pe(c).format("HH:mm"))}var cc=function(e){$(n,e);var c=Je(n);function n(e){var o;return K(this,n),(o=c.call(this,e)).componentDidUpdate=function(){W.default.language!==o.props.lang&&W.default.changeLanguage(o.props.lang)},o.UNSAFE_componentWillReceiveProps=function(e){e.value===o.state.value||o.state.editing||o.setState({value:e.value})},o.onChange=function(e,c){var n=c.newValue,t=c.method,a={value:o.fInput||n||"",renderMobileSearch:o.props.isMobile};if(o.fInput=null,o.state.editing){if("enter"!==t||o.state.valid){if(o.state.typingTimer&&clearTimeout(o.state.typingTimer),"type"===t){var i=setTimeout((function(){o.setState({typing:!1})}),1e3);a.typingTimer=i,a.typing=!0}o.setState(a)}}else a.editing=!0,o.setState(a,(function(){return o.fetchFunction({value:n||""})}))},o.onBlur=function(){o.state.renderMobileSearch||(o.state.editing&&o.input.focus(),o.setState({editing:!1,renderMobileSearch:!1,value:o.props.value}))},o.onSelected=function(e,c){if(o.state.valid){if("SelectFromOwnLocations"===c.suggestion.type)return void o.setState({sources:["Favourite","Back"],ownPlaces:!0,pendingSelection:c.suggestion.type,value:""},(function(){o.fetchFunction({value:""})}));if("back"===c.suggestion.type||"FutureRoute"===c.suggestion.type)return void o.setState({sources:o.props.sources,ownPlaces:!1,pendingSelection:c.suggestion.type,suggestionIndex:c.suggestionIndex},(function(){o.fetchFunction({value:""})}));o.selectionDone=!0,o.setState({editing:!1,value:c.suggestionValue},(function(){o.input.blur(),o.props.handleViaPoints?o.props.handleViaPoints(c.suggestion,c.suggestionIndex):o.props.onSelect(c.suggestion,o.props.id),o.setState({renderMobileSearch:!1,sources:o.props.sources,ownPlaces:!1,suggestions:[]},(function(){o.selectionDone=!1})),!o.props.focusChange||o.props.isMobile&&!o.props.isEmbedded||o.props.focusChange(),o.props.isMobile&&o.closeMobileSearch()}))}else o.setState((function(e){return{pendingSelection:e.value}}),(function(){return o.checkPendingSelection()}))},o.onSuggestionsClearRequested=function(){o.setState({suggestions:[],sources:o.props.sources,ownPlaces:!1,editing:!1})},o.getSuggestionValue=function(e){return"SelectFromOwnLocations"===e.type||"back"===e.type?"":function(e){var c=Ae(e,!0);switch(e.layer){case"selectFromMap":case"currentPosition":case"ownLocations":case"back":return c[1]||c[0];case"favouriteBikeRentalStation":case"favouritePlace":return c[0];default:return c.length>1&&""!==c[1]?c.join(", "):c[1]||c[0]}}(e.properties)},o.checkPendingSelection=function(){"SelectFromOwnLocations"!==o.state.pendingSelection&&"back"!==o.state.pendingSelection||!o.state.valid?o.state.pendingSelection&&o.state.valid&&o.setState({pendingSelection:null,editing:!1},(function(){o.state.suggestions.length&&(o.input.blur(),o.props.onSelect(o.state.suggestions[o.state.suggestionIndex],o.props.id),o.props.isMobile&&o.closeMobileSearch(),!o.props.focusChange||o.props.isMobile&&!o.props.isEmbedded||o.props.focusChange())})):o.setState({pendingSelection:null,editing:!0},(function(){o.input.focus()}))},o.clearButton=function(){return g.default.createElement("button",{type:"button",className:He["clear-input"],onClick:o.clearInput,"aria-label":W.default.t("clear-button-label")},g.default.createElement(x.default,{img:"close",color:o.props.color}))},o.fetchFunction=function(e){var c=e.value,n=e.cleanExecuted;return o.setState({valid:!1,cleanExecuted:n||!1},(function(){if(!o.selectionDone){var e,n=I.default(o.props.targets)||o.props.targets.includes("Locations");o.state.ownPlaces?(e=["Locations"],(I.default(o.props.targets)||o.props.targets.includes("Stops"))&&e.push("Stops"),(I.default(o.props.targets)||o.props.targets.includes("BikeRentalStations"))&&e.push("BikeRentalStations")):I.default(o.props.targets)||(e=V(o.props.targets),n&&!o.props.isMobile&&(I.default(o.props.sources)||o.props.sources.includes("Favourite"))&&e.push("SelectFromOwnLocations")),function(e,c,n,o,t,a,i,r,M,s){r(null),Te(e,c,n,o,t,a,i,r,M,s)}(e,o.state.sources&&o.state.sources.filter((function(e){return!(n&&"Favourite"===e&&!o.state.ownPlaces&&!o.props.isMobile)})),o.props.transportMode,o.props.searchContext,o.props.filterResults,o.props.geocodingSize,{input:c||""},(function(e){if(null!=e){var n=(e.results||[]).filter((function(e){return"FutureRoute"!==e.type||"FutureRoute"===e.type&&e.properties.time>Pe().unix()})).map((function(e){if("CurrentLocation"===e.type||"SelectFromMap"===e.type||"SelectFromOwnLocations"===e.type||"back"===e.type){var c=j({},e);return c.properties.labelId=W.default.t(e.properties.labelId),c}return e}));c!==o.state.value&&c!==o.state.pendingSelection&&"SelectFromOwnLocations"!==o.state.pendingSelection&&"back"!==o.state.pendingSelection&&"FutureRoute"!==o.state.pendingSelection||o.setState({valid:!0,suggestions:n},(function(){return o.checkPendingSelection()}))}}),o.props.pathOpts,o.props.refPoint)}}))},o.clearInput=function(){var e={editing:!0,value:"",sources:o.props.sources,ownPlaces:!1};o.setState(e,(function(){return o.fetchFunction({value:"",cleanExecuted:!0})})),o.props.onClear&&o.props.onClear(o.props.id),o.input.focus()},o.inputClicked=function(e){if(o.input.focus(),o.props.isMobile&&o.props.lock(),!o.state.editing){var c={editing:!0,pendingSelection:null,renderMobileSearch:o.props.isMobile},n={editing:!0,pendingSelection:null,value:e};o.state.suggestions.length?(o.fetchFunction({value:o.state.value}),o.setState(c)):"object"!==F(e)&&e?o.setState(n,(function(){return o.fetchFunction({value:e})})):o.setState(c,(function(){return o.fetchFunction({value:o.state.value})}))}},o.storeInputReference=function(e){null!==e&&(o.input=e.input,o.props.storeRef&&o.props.storeRef(e.input))},o.fillInput=function(e){o.fInput=e.properties.name;var c={editing:!0,value:e.properties.name,checkPendingSelection:e,valid:!0};o.setState(c),o.fetchFunction({value:e.properties.name}),o.input.focus()},o.renderItem=function(e){var c="FutureRoute"===e.type?j({},e,{translatedText:ec(e)}):e,n=$e(e);return g.default.createElement(P.default,{item:c,content:n,loading:!o.state.valid,isMobile:o.props.isMobile,ariaFavouriteString:W.default.t("favourite"),color:o.props.color,accessiblePrimaryColor:o.props.accessiblePrimaryColor,fillInput:o.fillInput,fontWeights:o.props.fontWeights,getAutoSuggestIcons:o.props.getAutoSuggestIcons,modeIconColors:o.props.modeIconColors,modeSet:o.props.modeSet})},o.closeMobileSearch=function(){o.props.unlock(),o.setState({renderMobileSearch:!1,value:o.props.value},(function(){window.scrollTo(0,o.state.scrollY),o.onSuggestionsClearRequested()}))},o.keyDown=function(e){if(!o.selectionDone){var c=e.key;if("Escape"===c&&o.setState({editing:!1}),o.state.editing)return"Enter"===c&&""!==o.state.value&&o.setState({pendingSelection:!0},(function(){o.fetchFunction({value:o.state.value})})),void o.inputClicked();if("Enter"!==c&&"ArrowDown"!==c||""!==o.state.value){if("ArrowDown"===c&&""!==o.state.value){var n={editing:!0,value:o.state.value};o.setState(n,(function(){return o.fetchFunction({value:o.state.value})}))}o.state.editing||o.setState({editing:!0}),"Tab"===c&&o.onBlur()}else o.clearInput()}},o.suggestionAsAriaContent=function(){var e=[],c=o.state.suggestions[0];return c&&(c.type&&c.type.includes("Favourite")&&e.push(W.default.t("favourite")),e=e.concat($e(o.state.suggestions[0]))),V(new Set(e)).join(" - ")},o.clearOldSearches=function(){var e=o.props.searchContext,c=e.context,n=e.clearOldSearches,t=e.clearFutureRoutes;c&&n&&(n(c),t&&t(c),o.fetchFunction({value:o.state.value}))},o.isOriginDestinationOrViapoint=function(){return"origin"===o.props.id||"destination"===o.props.id||"via-point"===o.props.id||"origin-stop-near-you"===o.props.id},o.onFocus=function(){["Valittu sijainti","Nykyinen sijaintisi","Current position","Selected location","Vald position","Använd min position","Min position","Käytä nykyistä sijaintia","Use current location","Your current location"].includes(o.state.value)&&o.clearInput();var e=window.pageYOffset;return o.setState({scrollY:e})},Pe.tz.setDefault(e.timeZone),Pe.locale(e.lang),o.state={value:e.value,suggestions:[],editing:!1,valid:!0,renderMobileSearch:!1,sources:e.sources,ownPlaces:!1,typingTimer:null,typing:!1,pendingSelection:null,suggestionIndex:0,cleanExecuted:!1,scrollY:0},Object.keys(xe).forEach((function(e){W.default.addResourceBundle(e,"translation",xe[e])})),o}return J(n,[{key:"shouldComponentUpdate",value:function(e,c){return!C.default(c,this.state)||!C.default(e,this.props)}},{key:"render",value:function(){var e=this;W.default.language!==this.props.lang&&W.default.changeLanguage(this.props.lang);var c=this.state,n=c.value,o=c.suggestions,t=c.renderMobileSearch,a=c.cleanExecuted,i={placeholder:this.props.translatedPlaceholder?this.props.translatedPlaceholder:W.default.t(this.props.placeholder),value:n,onChange:this.onChange,onBlur:this.onBlur,className:"".concat(He.input," ").concat(this.props.isMobile&&this.props.transportMode?He.thin:""," ").concat(He[this.props.id]||""," ").concat(this.state.value?He.hasValue:""," ").concat(this.props.inputClassName),onKeyDown:this.keyDown,required:this.props.required},r=this.props.id.replace("searchfield-",""),M=this.props.ariaLabel||W.default.t(r);M=M.replace("searchfield-","");var s=this.props.required?"".concat(W.default.t("required"),"."):"",l=this.props.isMobile?W.default.t("search-autosuggest-label-mobile"):W.default.t("search-autosuggest-label-desktop"),u=W.default.t("search-autosuggest-len",{count:o.length}),p=function(){return e.suggestionAsAriaContent()||e.props.value?W.default.t("search-current-suggestion",{selection:e.suggestionAsAriaContent()||e.props.value}):""};return g.default.createElement(g.default.Fragment,null,g.default.createElement("span",{className:He["sr-only"],role:"alert"},!this.state.typing&&this.state.editing&&"".concat(u," ").concat(p())),this.props.isMobile&&g.default.createElement(Ge,{searchOpen:t,appElement:this.props.appElement,clearOldSearches:this.clearOldSearches,id:this.props.id,clearInput:this.clearInput,value:this.state.value,suggestions:[].concat(V(o),[{type:"clear-search-history",labelId:W.default.t("clear-search-history")}]),inputProps:j({},i,{placeholder:this.isOriginDestinationOrViapoint()?W.default.t("address-place-or-business"):i.placeholder}),fetchFunction:this.fetchFunction,onSuggestionsClearRequested:this.onSuggestionsClearRequested,getSuggestionValue:this.getSuggestionValue,renderSuggestion:this.renderItem,closeHandle:this.closeMobileSearch,ariaLabel:s.concat(" ").concat(M).concat(" ").concat(p()),label:this.props.mobileLabel?this.props.mobileLabel:W.default.t(this.props.id),onSuggestionSelected:this.onSelected,dialogHeaderText:W.default.t("delete-old-searches-header"),dialogPrimaryButtonText:W.default.t("delete"),dialogSecondaryButtonText:W.default.t("cancel"),clearInputButtonText:W.default.t("clear-button-label"),focusInput:a,color:this.props.color,hoverColor:this.props.hoverColor,accessiblePrimaryColor:this.props.accessiblePrimaryColor,fontWeights:this.props.fontWeights,showScroll:this.props.showScroll}),!t&&g.default.createElement("div",{className:_.default(He["autosuggest-input-container"],He[this.props.id]),style:{"--color":"".concat(this.props.color),"--hover-color":"".concat(this.props.hoverColor)}},this.props.icon&&g.default.createElement("div",{className:_.default(He["autosuggest-input-icon"],He[this.props.id],this.props.inputClassName&&"".concat(this.props.inputClassName,"-input-icon"))},g.default.createElement(x.default,{img:"".concat(this.props.icon)})),g.default.createElement(T.default,{alwaysRenderSuggestions:this.state.editing,id:this.props.id,suggestions:o,onSuggestionsFetchRequested:this.fetchFunction,onSuggestionsClearRequested:this.onSuggestionsClearRequested,getSuggestionValue:this.getSuggestionValue,renderSuggestion:this.renderItem,inputProps:j({},i,{onFocus:this.onFocus}),focusInputOnSuggestionClick:!0,shouldRenderSuggestions:function(){return e.state.editing},highlightFirstSuggestion:!this.state.ownPlaces,theme:He,renderInputComponent:function(c){return g.default.createElement(g.default.Fragment,null,g.default.createElement("label",{className:He["sr-only"],htmlFor:e.props.id},p().concat(" ").concat(s).concat(" ").concat(M).concat(" ").concat(l)),g.default.createElement("input",Object.assign({"aria-label":p().concat(" ").concat(s).concat(" ").concat(M).concat(" ").concat(l),id:e.props.id,onClick:e.inputClicked,onKeyDown:e.keyDown},c)),e.state.value&&e.clearButton())},onSuggestionSelected:this.onSelected,ref:this.storeInputReference})))}}]),n}(g.default.Component);cc.defaultProps={autoFocus:!1,className:"",icon:void 0,value:"",transportMode:void 0,lang:"fi",sources:[],isMobile:!1,color:"#007ac9",hoverColor:"#0062a1",accessiblePrimaryColor:"#0074be",timeZone:"Europe/Helsinki",pathOpts:{routesPrefix:"linjat",stopsPrefix:"pysakit"},mobileLabel:void 0,inputClassName:"",translatedPlaceholder:void 0,fontWeights:{medium:500},modeIconColors:{"mode-bus":"#007ac9","mode-rail":"#8c4799","mode-tram":"#008151","mode-metro":"#ed8c00","mode-ferry":"#007A97","mode-citybike":"#f2b62d"},required:!1,modeSet:void 0,showScroll:!1},"production"!==process.env.NODE_ENV&&(cc.propTypes={appElement:N.default.string.isRequired,autoFocus:N.default.bool,className:N.default.string,icon:N.default.string,id:N.default.string.isRequired,placeholder:N.default.string.isRequired,translatedPlaceholder:N.default.string,value:N.default.string,searchContext:N.default.any.isRequired,ariaLabel:N.default.string,onSelect:N.default.func,transportMode:N.default.string,filterResults:N.default.func,geocodingSize:N.default.number,onClear:N.default.func,storeRef:N.default.func,handleViaPoints:N.default.func,focusChange:N.default.func,lang:N.default.string,sources:N.default.arrayOf(N.default.string),targets:N.default.arrayOf(N.default.string),isMobile:N.default.bool,color:N.default.string,hoverColor:N.default.string,accessiblePrimaryColor:N.default.string,timeZone:N.default.string,pathOpts:N.default.shape({routesPrefix:N.default.string,stopsPrefix:N.default.string}),mobileLabel:N.default.string,lock:N.default.func.isRequired,unlock:N.default.func.isRequired,refPoint:N.default.object,inputClassName:N.default.string,fontWeights:N.default.shape({medium:N.default.number}),modeIconColors:N.default.object,getAutoSuggestIcons:N.default.object,required:N.default.bool,modeSet:N.default.string,showScroll:N.default.bool,isEmbedded:N.default.bool});var nc,oc=(nc=cc,function(e){var c=Qe.useScrollLock(),n=c.lock,o=c.unlock;return g.default.createElement(nc,Object.assign({lock:n,unlock:o},e))});e.default=oc,Object.defineProperty(e,"__esModule",{value:!0})}));
46
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZGV2ZWxvcG1lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hcnJheUxpa2VUb0FycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5V2l0aG91dEhvbGVzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9ub25JdGVyYWJsZVNwcmVhZC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zZXRQcm90b3R5cGVPZi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0cy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9nZXRQcm90b3R5cGVPZi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5V2l0aEhvbGVzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL25vbkl0ZXJhYmxlUmVzdC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXRydS1lcS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWlzLWR1cGxpY2F0ZS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWhlbHBlcnMvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC11bmlxLWJ5LWxhYmVsL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZmlsdGVyLW1hdGNoaW5nLXRvLWlucHV0L2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtc2VyaWFsaXplL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWpzb24vaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1leGVjdXRlLXNlYXJjaC1pbW1pZGlhdGUvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9tb21lbnQtdGltZXpvbmUvbW9tZW50LXRpbWV6b25lLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21vbWVudC10aW1lem9uZS9pbmRleC5qcyIsIi4uL3NyYy9oZWxwZXJzL3RyYW5zbGF0aW9ucy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZpLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1pbmplY3QvZGlzdC9zdHlsZS1pbmplY3QuZXMuanMiLCIuLi9zcmMvaGVscGVycy9Nb2JpbGVTZWFyY2guanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGhzbC1maS9ob29rcy9saWIvaW5kZXguanMiLCIuLi9zcmMvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtbGFiZWwvaW5kZXguanMiLCIuLi9zcmMvaGVscGVycy93aXRoU2Nyb2xsTG9jay5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7XG4gICAgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBfdHlwZW9mKG9iaik7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcblxuICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcblxuICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHtcbiAgICBhcnIyW2ldID0gYXJyW2ldO1xuICB9XG5cbiAgcmV0dXJuIGFycjI7XG59IiwiaW1wb3J0IGFycmF5TGlrZVRvQXJyYXkgZnJvbSBcIi4vYXJyYXlMaWtlVG9BcnJheVwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICBpZiAoIW8pIHJldHVybjtcbiAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7XG4gIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pO1xuICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn0iLCJpbXBvcnQgYXJyYXlXaXRob3V0SG9sZXMgZnJvbSBcIi4vYXJyYXlXaXRob3V0SG9sZXNcIjtcbmltcG9ydCBpdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5XCI7XG5pbXBvcnQgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXlcIjtcbmltcG9ydCBub25JdGVyYWJsZVNwcmVhZCBmcm9tIFwiLi9ub25JdGVyYWJsZVNwcmVhZFwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikge1xuICByZXR1cm4gYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IG5vbkl0ZXJhYmxlU3ByZWFkKCk7XG59IiwiaW1wb3J0IGFycmF5TGlrZVRvQXJyYXkgZnJvbSBcIi4vYXJyYXlMaWtlVG9BcnJheVwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShhcnIpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikge1xuICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGl0ZXIpKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59IiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfTtcblxuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufSIsImltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZlwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGY7XG59IiwiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4uLy4uL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuaW1wb3J0IGFzc2VydFRoaXNJbml0aWFsaXplZCBmcm9tIFwiLi9hc3NlcnRUaGlzSW5pdGlhbGl6ZWRcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICByZXR1cm4gY2FsbDtcbiAgfVxuXG4gIHJldHVybiBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9O1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufSIsImltcG9ydCBhcnJheVdpdGhIb2xlcyBmcm9tIFwiLi9hcnJheVdpdGhIb2xlc1wiO1xuaW1wb3J0IGl0ZXJhYmxlVG9BcnJheUxpbWl0IGZyb20gXCIuL2l0ZXJhYmxlVG9BcnJheUxpbWl0XCI7XG5pbXBvcnQgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXlcIjtcbmltcG9ydCBub25JdGVyYWJsZVJlc3QgZnJvbSBcIi4vbm9uSXRlcmFibGVSZXN0XCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IG5vbkl0ZXJhYmxlUmVzdCgpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7XG4gIGlmICh0eXBlb2YgU3ltYm9sID09PSBcInVuZGVmaW5lZFwiIHx8ICEoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChhcnIpKSkgcmV0dXJuO1xuICB2YXIgX2FyciA9IFtdO1xuICB2YXIgX24gPSB0cnVlO1xuICB2YXIgX2QgPSBmYWxzZTtcbiAgdmFyIF9lID0gdW5kZWZpbmVkO1xuXG4gIHRyeSB7XG4gICAgZm9yICh2YXIgX2kgPSBhcnJbU3ltYm9sLml0ZXJhdG9yXSgpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkge1xuICAgICAgX2Fyci5wdXNoKF9zLnZhbHVlKTtcblxuICAgICAgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgX2QgPSB0cnVlO1xuICAgIF9lID0gZXJyO1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChfZCkgdGhyb3cgX2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIF9hcnI7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn0iLCIvKipcbiAqICBhY2NlcHQgZXF1YWxpdHkgb2Ygbm9uIG51bGxpc2ggdmFsdWVzXG4gKlxuICogQG5hbWUgdHJ1RXFcbiAqIEBwYXJhbSB7Qm9vbGVhbnxOdW1iZXJ8QmlnSW50fFN0cmluZ3xTeW1ib2x8T2JqZWN0fSB2YWwxIEZpcnN0IHZhbHVlIHRvIGJlIGNvbXBhcmVkXG4gKiBAcGFyYW0ge0Jvb2xlYW58TnVtYmVyfEJpZ0ludHxTdHJpbmd8U3ltYm9sfE9iamVjdH0gcGFyYW0yIFNlY29uZCB2YWx1ZSB0byBiZSBjb21wYXJlZFxuICogQHJldHVybnMge0Jvb2xlYW59IHRydWUvZmFsc2VcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC11dGlsLnRydUVxKCcyJywgJzInKTtcbiAqIC8vPXRydWVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJ1RXEodmFsMSwgdmFsMikge1xuICByZXR1cm4gdmFsMSAmJiB2YWwyICYmIHZhbDEgPT09IHZhbDI7XG59XG4iLCJpbXBvcnQgdHJ1RXEgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXRydS1lcSc7XG4vKipcbiAqIENoZWNrcyB0aGF0IGlzIGl0ZW1zIGR1cGxpY2F0ZVxuICpcbiAqIEBuYW1lIGlzRHVwbGljYXRlXG4gKiBAcGFyYW0ge09iamVjdH0gaXRlbTEgT2JqZWN0IGNvbnRhaW5pbmcgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKiB7XG4gKiAgcHJvcGVydGllcyB7XG4gKiAgICAgIGd0ZnNJZDogU3RyaW5nXG4gKiAgICAgIGdpZDogU3RyaW5nIGZyb20gZ2VvY29kZXJcbiAqICAgICAgbmFtZTogU3RyaW5nXG4gKiAgICAgIGxhYmVsOiBTdHJpbmdcbiAqICAgICAgIGFkZHJlc3M6IFN0cmluZ1xuICogICAgICBnZW9tZXRyeSB7XG4gKiAgICAgICAgIGNvb3JkaW5hdGVzIFtOdW1iZXIgbGF0LCBOdW1iZXIgbG9uXVxuICogICAgICB9XG4gKiAgfVxuICogfVxuICogQHBhcmFtIHtPYmplY3R9IGl0ZW0yIE9iamVjdCB3aXRoIHNhbWUgYXR0cmlidXRlcyBhcyBpdGVtMVxuICogQHJldHVybnMge0Jvb2xlYW59IHRydWUvZmFsc2VcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC11dGlsLmlzRHVwbGljYXRlKHBhcmFtMSwgcGFyYW0yKTtcbiAqIC8vPXRydWVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNEdXBsaWNhdGUoaXRlbTEsIGl0ZW0yKSB7XG4gIGNvbnN0IHByb3BzMSA9IGl0ZW0xLnByb3BlcnRpZXM7XG4gIGNvbnN0IHByb3BzMiA9IGl0ZW0yLnByb3BlcnRpZXM7XG5cbiAgaWYgKGl0ZW0xLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScgJiYgaXRlbTIudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJykge1xuICAgIGNvbnN0IG8xID0gcHJvcHMxLm9yaWdpbjtcbiAgICBjb25zdCBkMSA9IHByb3BzMS5kZXN0aW5hdGlvbjtcbiAgICBjb25zdCBvMiA9IHByb3BzMi5vcmlnaW47XG4gICAgY29uc3QgZDIgPSBwcm9wczIuZGVzdGluYXRpb247XG5cbiAgICBjb25zdCBuYW1lMSA9IGAke28xLm5hbWV9Ly8ke28xLmxvY2FsaXR5fS8vJHtkMS5uYW1lfS8vJHtkMS5sb2NhbGl0eX1gO1xuICAgIGNvbnN0IG5hbWUyID0gYCR7bzIubmFtZX0vLyR7bzIubG9jYWxpdHl9Ly8ke2QyLm5hbWV9Ly8ke2QyLmxvY2FsaXR5fWA7XG5cbiAgICByZXR1cm4gbmFtZTEgPT09IG5hbWUyO1xuICB9XG4gIGlmIChpdGVtMS50eXBlID09PSAnRnV0dXJlUm91dGUnIHx8IGl0ZW0yLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKFxuICAgICgocHJvcHMxLmxheWVyID09PSAnYmlrZVJlbnRhbFN0YXRpb24nIHx8XG4gICAgICBwcm9wczEubGF5ZXIgPT09ICdmYXZvdXJpdGVCaWtlUmVudGFsU3RhdGlvbicpICYmXG4gICAgICAocHJvcHMyLmxheWVyID09PSAnYmlrZVJlbnRhbFN0YXRpb24nIHx8XG4gICAgICAgIHByb3BzMi5sYXllciA9PT0gJ2Zhdm91cml0ZUJpa2VSZW50YWxTdGF0aW9uJykpIHx8XG4gICAgKHByb3BzMS5sYXllciA9PT0gJ2Jpa2VzdGF0aW9uJyAmJiBwcm9wczIubGF5ZXIgPT09ICdiaWtlc3RhdGlvbicpXG4gICkge1xuICAgIHJldHVybiBwcm9wczEubGFiZWxJZCA9PT0gcHJvcHMyLmxhYmVsSWQ7XG4gIH1cbiAgaWYgKHByb3BzMS5ndGZzSWQgJiYgcHJvcHMyLmd0ZnNJZCkge1xuICAgIHJldHVybiBwcm9wczEuZ3Rmc0lkID09PSBwcm9wczIuZ3Rmc0lkO1xuICB9XG4gIGlmIChwcm9wczEuZ3Rmc0lkICYmIHByb3BzMi5naWQgJiYgcHJvcHMyLmdpZC5pbmNsdWRlcyhwcm9wczEuZ3Rmc0lkKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChwcm9wczIuZ3Rmc0lkICYmIHByb3BzMS5naWQgJiYgcHJvcHMxLmdpZC5pbmNsdWRlcyhwcm9wczIuZ3Rmc0lkKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChcbiAgICAocHJvcHMxLmxheWVyID09PSAnc3RvcCcgfHwgcHJvcHMxLmxheWVyID09PSAnc3RhdGlvbicpICYmXG4gICAgKHByb3BzMi5sYXllciA9PT0gJ3N0b3AnIHx8IHByb3BzMi5sYXllciA9PT0gJ3N0YXRpb24nKSAmJlxuICAgIHByb3BzMS5naWQgJiZcbiAgICBwcm9wczIuZ2lkXG4gICkge1xuICAgIHJldHVybiBwcm9wczEuZ2lkID09PSBwcm9wczIuZ2lkO1xuICB9XG5cbiAgY29uc3QgcDEgPSBpdGVtMSAmJiBpdGVtMS5nZW9tZXRyeSA/IGl0ZW0xLmdlb21ldHJ5LmNvb3JkaW5hdGVzIDogdW5kZWZpbmVkO1xuICBjb25zdCBwMiA9IGl0ZW0yICYmIGl0ZW0yLmdlb21ldHJ5ID8gaXRlbTIuZ2VvbWV0cnkuY29vcmRpbmF0ZXMgOiB1bmRlZmluZWQ7XG5cbiAgaWYgKHAxICYmIHAyKSB7XG4gICAgLy8gYm90aCBoYXZlIGdlb21ldHJ5XG4gICAgaWYgKE1hdGguYWJzKHAxWzBdIC0gcDJbMF0pIDwgMWUtNiAmJiBNYXRoLmFicyhwMVsxXSAtIHAyWzFdKSA8IDFlLTYpIHtcbiAgICAgIC8vIGxvY2F0aW9uIG1hdGNoIGlzIG5vdCBlbm91Z2guIFJlcXVpcmUgYSBjb21tb24gcHJvcGVydHlcbiAgICAgIGlmIChcbiAgICAgICAgdHJ1RXEocHJvcHMxLm5hbWUsIHByb3BzMi5uYW1lKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEubGFiZWwsIHByb3BzMi5sYWJlbCkgfHxcbiAgICAgICAgdHJ1RXEocHJvcHMxLmFkZHJlc3MsIHByb3BzMi5hZGRyZXNzKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEuYWRkcmVzcywgcHJvcHMyLmxhYmVsKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEubGFiZWwsIHByb3BzMi5hZGRyZXNzKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG4iLCJpbXBvcnQgaXNTdHJpbmcgZnJvbSAnbG9kYXNoL2lzU3RyaW5nJztcbmltcG9ydCBvcmRlckJ5IGZyb20gJ2xvZGFzaC9vcmRlckJ5JztcbmltcG9ydCB1bmlxV2l0aCBmcm9tICdsb2Rhc2gvdW5pcVdpdGgnO1xuaW1wb3J0IGlzRHVwbGljYXRlIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1pcy1kdXBsaWNhdGUnO1xuXG5jb25zdCBub3JtYWxpemUgPSBzdHIgPT4ge1xuICBpZiAoIWlzU3RyaW5nKHN0cikpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpO1xufTtcblxuLyoqXG4gKiBMYXllclR5cGUgZGVwaWN0cyB0aGUgdHlwZSBvZiB0aGUgcG9pbnQtb2YtaW50ZXJlc3QuXG4gKi9cbmNvbnN0IExheWVyVHlwZSA9IHtcbiAgQWRkcmVzczogJ2FkZHJlc3MnLFxuICBCYWNrOiAnYmFjaycsXG4gIEN1cnJlbnRQb3NpdGlvbjogJ2N1cnJlbnRQb3NpdGlvbicsXG4gIEZhdm91cml0ZVN0b3A6ICdmYXZvdXJpdGVTdG9wJyxcbiAgRmF2b3VyaXRlU3RhdGlvbjogJ2Zhdm91cml0ZVN0YXRpb24nLFxuICBGYXZvdXJpdGVQbGFjZTogJ2Zhdm91cml0ZVBsYWNlJyxcbiAgRmF2b3VyaXRlUm91dGU6ICdmYXZvdXJpdGVSb3V0ZScsXG4gIEZ1dHVyZVJvdXRlOiAnZnV0dXJlUm91dGUnLFxuICBTdGF0aW9uOiAnc3RhdGlvbicsXG4gIFNlbGVjdEZyb21NYXA6ICdzZWxlY3RGcm9tTWFwJyxcbiAgU2VsZWN0RnJvbU93bkxvY2F0aW9uczogJ293bkxvY2F0aW9ucycsXG4gIFN0b3A6ICdzdG9wJyxcbiAgU3RyZWV0OiAnc3RyZWV0JyxcbiAgVmVudWU6ICd2ZW51ZScsXG4gIEJpa2VSZW50YWxTdGF0aW9uOiAnYmlrZVJlbnRhbFN0YXRpb24nLFxuICBDYXJQYXJrOiAnY2FycGFyaycsXG4gIEJpa2VQYXJrOiAnYmlrZXBhcmsnLFxufTtcbmV4cG9ydCBjb25zdCBpc1N0b3AgPSAoeyBsYXllciwgdHlwZSB9KSA9PlxuICBsYXllciA9PT0gJ3N0b3AnIHx8XG4gIGxheWVyID09PSAnZmF2b3VyaXRlU3RvcCcgfHxcbiAgdHlwZSA9PT0gJ3N0b3AnIHx8XG4gIHR5cGUgPT09ICdmYXZvdXJpdGVTdG9wJztcblxuY29uc3QgREVGQVVMVF9ST1VURVNfUFJFRklYID0gJ2xpbmphdCc7XG5jb25zdCBERUZBVUxUX1NUT1BTX1BSRUZJWCA9ICdweXNha2l0JztcblxuZXhwb3J0IGNvbnN0IG1hcFJvdXRlID0gKGl0ZW0sIHBhdGhPcHRzKSA9PiB7XG4gIGlmIChpdGVtID09PSBudWxsIHx8IGl0ZW0gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3Qgb3B0cyA9IHBhdGhPcHRzIHx8IHt9O1xuXG4gIGNvbnN0IHJvdXRlc1ByZWZpeCA9IG9wdHMucm91dGVzUHJlZml4IHx8IERFRkFVTFRfUk9VVEVTX1BSRUZJWDtcbiAgY29uc3Qgc3RvcHNQcmVmaXggPSBvcHRzLnN0b3BzUHJlZml4IHx8IERFRkFVTFRfU1RPUFNfUFJFRklYO1xuXG4gIGNvbnN0IGxpbmsgPSBgLyR7cm91dGVzUHJlZml4fS8ke2l0ZW0uZ3Rmc0lkfS8ke3N0b3BzUHJlZml4fWA7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ1JvdXRlJyxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAuLi5pdGVtLFxuICAgICAgbGF5ZXI6IGByb3V0ZS0ke2l0ZW0ubW9kZX1gLFxuICAgICAgbGluayxcbiAgICB9LFxuICAgIGdlb21ldHJ5OiB7XG4gICAgICBjb29yZGluYXRlczogbnVsbCxcbiAgICB9LFxuICB9O1xufTtcblxuLyoqXG4gKiBUcmllcyB0byBtYXRjaCB0aGUgZ2l2ZW4gc2VhcmNoIHRlcm0gYWdhaW5zIHRoZSBjb2xsZWN0aW9uIG9mIHByb3BlcnRpZXNcbiAqIGZvciBhIGdlb2NvZGluZyByZXN1bHQuIFRoZSBiZXN0IG1hdGNoIHdpbGwgYmUgcmV0dXJuZWQgKG1pbjogMCwgbWF4OiAxLjUpLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBub3JtYWxpemVkVGVybSB0aGUgbm9ybWFsaXplZCBzZWFyY2ggdGVybS5cbiAqIEBwYXJhbSB7Kn0gcmVzdWx0UHJvcGVydGllcyB0aGUgZ2VvY29kaW5nIHJlc3VsdCdzIHByb3BlcnR5IGNvbGxlY3Rpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBtYXRjaCA9IChub3JtYWxpemVkVGVybSwgcmVzdWx0UHJvcGVydGllcykgPT4ge1xuICBpZiAoIWlzU3RyaW5nKG5vcm1hbGl6ZWRUZXJtKSB8fCBub3JtYWxpemVkVGVybS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGNvbnN0IG1hdGNoUHJvcHMgPSBbJ25hbWUnLCAnbGFiZWwnLCAnYWRkcmVzcycsICdzaG9ydE5hbWUnXTtcbiAgcmV0dXJuIG1hdGNoUHJvcHNcbiAgICAubWFwKG5hbWUgPT4gcmVzdWx0UHJvcGVydGllc1tuYW1lXSlcbiAgICAuZmlsdGVyKHZhbHVlID0+IGlzU3RyaW5nKHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPiAwKVxuICAgIC5tYXAodmFsdWUgPT4ge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFZhbHVlID0gbm9ybWFsaXplKHZhbHVlKTtcbiAgICAgIGlmIChub3JtYWxpemVkVmFsdWUuaW5kZXhPZihub3JtYWxpemVkVGVybSkgPT09IDApIHtcbiAgICAgICAgLy8gZnVsbCBtYXRjaCBhdCBzdGFydC4gUmV0dXJuIG1heCByZXN1bHQgd2hlbiBtYXRjaCBpcyBmdWxsLCBub3Qgb25seSBwYXJ0aWFsXG4gICAgICAgIHJldHVybiAwLjUgKyBub3JtYWxpemVkVGVybS5sZW5ndGggLyBub3JtYWxpemVkVmFsdWUubGVuZ3RoO1xuICAgICAgfVxuICAgICAgLy8gYmVjYXVzZSBvZiBmaWx0ZXJtYXRjaGluZ3RvaW5wdXQsIHdlIGtub3cgdGhhdCBtYXRjaCBvY2N1cnJlZCBzb21ld2hlcmVcbiAgICAgIC8vIGRvbid0IHJ1biBmaWx0ZXJtYXRjaGluZyBhZ2FpbiBidXQgZXN0aW1hdGUgcm91Z2hseTpcbiAgICAgIC8vIHRoZSBsb25nZXIgdGhlIG1hdGNoaW5nIHN0cmluZywgdGhlIGJldHRlciBjb25maWRlbmNlLCBtYXggYmVpbmcgMC41XG4gICAgICByZXR1cm4gKDAuNSAqIG5vcm1hbGl6ZWRUZXJtLmxlbmd0aCkgLyAobm9ybWFsaXplZFRlcm0ubGVuZ3RoICsgMSk7XG4gICAgfSlcbiAgICAucmVkdWNlKFxuICAgICAgKHByZXZpb3VzLCBjdXJyZW50KSA9PiAoY3VycmVudCA+IHByZXZpb3VzID8gY3VycmVudCA6IHByZXZpb3VzKSxcbiAgICAgIDAsXG4gICAgKTtcbn07XG5cbi8qKlxuICogUmFua3MgdGhlIHJlc3VsdCBiYXNlZCBvbiBpdHMgbGF5ZXIgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxheWVyIHRoZSBsYXllciBwcm9wZXJ0eS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgdGhlIHNvdXJjZSBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldExheWVyUmFuayA9IChsYXllciwgc291cmNlKSA9PiB7XG4gIHN3aXRjaCAobGF5ZXIpIHtcbiAgICBjYXNlIExheWVyVHlwZS5DdXJyZW50UG9zaXRpb246XG4gICAgICByZXR1cm4gMTtcbiAgICBjYXNlIExheWVyVHlwZS5CYWNrOlxuICAgICAgcmV0dXJuIDAuOTtcbiAgICBjYXNlIExheWVyVHlwZS5TZWxlY3RGcm9tTWFwOlxuICAgICAgcmV0dXJuIDAuODtcbiAgICBjYXNlIExheWVyVHlwZS5TZWxlY3RGcm9tT3duTG9jYXRpb25zOlxuICAgICAgcmV0dXJuIDAuNzk7XG4gICAgY2FzZSBMYXllclR5cGUuRmF2b3VyaXRlU3RhdGlvbjpcbiAgICBjYXNlIExheWVyVHlwZS5GYXZvdXJpdGVQbGFjZTpcbiAgICBjYXNlIExheWVyVHlwZS5GYXZvdXJpdGVTdG9wOlxuICAgIGNhc2UgTGF5ZXJUeXBlLkZhdm91cml0ZVJvdXRlOlxuICAgICAgcmV0dXJuIDAuNDU7XG4gICAgY2FzZSBMYXllclR5cGUuRnV0dXJlUm91dGU6XG4gICAgICByZXR1cm4gMC40NDtcbiAgICBjYXNlIExheWVyVHlwZS5TdGF0aW9uOiB7XG4gICAgICBpZiAoaXNTdHJpbmcoc291cmNlKSAmJiBzb3VyY2UuaW5kZXhPZignZ3RmcycpID09PSAwKSB7XG4gICAgICAgIHJldHVybiAwLjQzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIDAuNDI7XG4gICAgfVxuICAgIGNhc2UgTGF5ZXJUeXBlLkZhdm91cml0ZUJpa2VSZW50YWxTdGF0aW9uOlxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyB2ZW51ZSwgYWRkcmVzcywgc3RyZWV0LCByb3V0ZS14eHhcbiAgICAgIHJldHVybiAwLjQxO1xuICAgIGNhc2UgTGF5ZXJUeXBlLkNhclBhcms6XG4gICAgICByZXR1cm4gMC4zODtcbiAgICBjYXNlIExheWVyVHlwZS5CaWtlUGFyazpcbiAgICAgIHJldHVybiAwLjM4O1xuICAgIGNhc2UgTGF5ZXJUeXBlLkJpa2VSZW50YWxTdGF0aW9uOlxuICAgICAgcmV0dXJuIDAuMzg7XG4gICAgY2FzZSBMYXllclR5cGUuU3RvcDpcbiAgICAgIHJldHVybiAwLjM2O1xuICB9XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBzb3J0IHRoZSByZXN1bHRzLiBPcmRlcnMgYXMgZm9sbG93czpcbiAqICAtIGN1cnJlbnQgcG9zaXRpb24gZmlyc3QgZm9yIGFuIGVtcHR5IHNlYXJjaFxuICogIC0gbWF0Y2hpbmcgcm91dGVzIGZpcnN0XG4gKiAgLSBvdGhlcndpc2UgYnkgY29uZmlkZW5jZSwgZXhjZXB0IHRoYXQ6XG4gKiAgICAtIGJvb3N0IHdlbGwgbWF0Y2hpbmcgc3RhdGlvbnMgKGVzcGVjaWFsbHkgZnJvbSBHVEZTKVxuICogICAgLSByYW5rIHN0b3BzIGxvd2VyIGFzIHRoZXkgdGVuZCB0byBvY2N1cHkgbW9zdCBvZiB0aGUgc2VhcmNoIHJlc3VsdHNcbiAqICAtIGl0ZW1zIHdpdGggbm8gY29uZmlkZW5jZSAob2xkIHNlYXJjaGVzIGFuZCBmYXZvcml0ZXMpOlxuICogICAgLSByYW5rIGZhdm91cml0ZXMgYmV0dGVyIHRoYW4gb3JkaW5hcnkgb2xkIHNlYXJjaGVzXG4gKiAgICAtIHJhbmsgZnVsbCBtYXRjaCBiZXR0ZXIgdGhhbiBwYXJ0aWFsIG1hdGNoXG4gKiAgICAtIHJhbmsgbWF0Y2ggYXQgbWlkZGxlIHdvcmQgbG93ZXIgdGhhbiBtYXRjaCBhdCB0aGUgYmVnaW5uaW5nXG4gKiAgICAtIHJhbmsgYmlrZSByZW50YWwgc3RhdGlvbnMgbG93ZXJcbiAqIEBwYXJhbSB7KltdfSByZXN1bHRzIFRoZSBzZWFyY2ggcmVzdWx0cyB0aGF0IHdlcmUgcmVjZWl2ZWRcbiAqIEBwYXJhbSB7U3RyaW5nfSB0ZXJtIFRoZSBzZWFyY2ggdGVybSB0aGF0IHdhcyB1c2VkXG4gKi9cbmV4cG9ydCBjb25zdCBzb3J0U2VhcmNoUmVzdWx0cyA9IChsaW5lUmVnZXhwLCByZXN1bHRzLCB0ZXJtID0gJycpID0+IHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3VsdHMpKSB7XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICBjb25zdCBpc0xpbmVJZGVudGlmaWVyID0gdmFsdWUgPT5cbiAgICBpc1N0cmluZyh2YWx1ZSkgJiYgbGluZVJlZ2V4cCAmJiBsaW5lUmVnZXhwLnRlc3QodmFsdWUpO1xuXG4gIGNvbnN0IG5vcm1hbGl6ZWRUZXJtID0gbm9ybWFsaXplKHRlcm0pO1xuICBjb25zdCBpc0xpbmVTZWFyY2ggPSBpc0xpbmVJZGVudGlmaWVyKG5vcm1hbGl6ZWRUZXJtKTtcblxuICBjb25zdCBvcmRlcmVkUmVzdWx0cyA9IG9yZGVyQnkoXG4gICAgcmVzdWx0cyxcbiAgICBbXG4gICAgICAvLyByYW5rIG1hdGNoaW5nIHJvdXRlcyBiZXN0XG4gICAgICByZXN1bHQgPT5cbiAgICAgICAgaXNMaW5lU2VhcmNoICYmXG4gICAgICAgIGlzTGluZUlkZW50aWZpZXIobm9ybWFsaXplKHJlc3VsdC5wcm9wZXJ0aWVzLnNob3J0TmFtZSkpICYmXG4gICAgICAgIG5vcm1hbGl6ZShyZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWUpLmluZGV4T2Yobm9ybWFsaXplZFRlcm0pID09PSAwXG4gICAgICAgICAgPyAxXG4gICAgICAgICAgOiAwLFxuXG4gICAgICByZXN1bHQgPT4ge1xuICAgICAgICBjb25zdCB7IGNvbmZpZGVuY2UsIGxheWVyLCBzb3VyY2UgfSA9IHJlc3VsdC5wcm9wZXJ0aWVzO1xuICAgICAgICBpZiAobm9ybWFsaXplZFRlcm0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgLy8gRG9pbmcgc2VhcmNoIHdpdGggZW1wdHkgc3RyaW5nLlxuICAgICAgICAgIC8vIE5vIGNvbmZpZGVuY2UgdG8gbWF0Y2gsIHNvIHVzZSByYW5rZWQgb2xkIHNlYXJjaGVzIGFuZCBmYXZvdXJpdGVzXG4gICAgICAgICAgcmV0dXJuIGdldExheWVyUmFuayhsYXllciwgc291cmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG11c3QgaGFuZGxlIGEgbWl4dXAgb2YgZ2VvY29kZXIgc2VhcmNoZXMgYW5kIGl0ZW1zIGFib3ZlXG4gICAgICAgIC8vIE5vcm1hbCBjb25maWRlbmNlIHJhbmdlIGZyb20gZ2VvY29kZXIgaXMgYWJvdXQgMC4zIC4uIDFcbiAgICAgICAgaWYgKCFjb25maWRlbmNlKSB7XG4gICAgICAgICAgLy8gbm90IGZyb20gZ2VvY29kZXIsIGVzdGltYXRlIGNvbmZpZGVuY2Ugb3Vyc2VsdmVzXG4gICAgICAgICAgY29uc3QgZXN0aW1hdGVkQ29uZmlkZW5jZSA9XG4gICAgICAgICAgICBnZXRMYXllclJhbmsobGF5ZXIsIHNvdXJjZSkgK1xuICAgICAgICAgICAgbWF0Y2gobm9ybWFsaXplZFRlcm0sIHJlc3VsdC5wcm9wZXJ0aWVzKTtcbiAgICAgICAgICByZXR1cm4gbGF5ZXIgPT09IExheWVyVHlwZS5CaWtlUmVudGFsU3RhdGlvblxuICAgICAgICAgICAgPyBlc3RpbWF0ZWRDb25maWRlbmNlIC0gMC44XG4gICAgICAgICAgICA6IGVzdGltYXRlZENvbmZpZGVuY2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBnZW9jb2RlZCBpdGVtcyB3aXRoIGNvbmZpZGVuY2UsIGp1c3QgYWRqdXN0IGEgbGl0dGxlXG4gICAgICAgIHN3aXRjaCAobGF5ZXIpIHtcbiAgICAgICAgICBjYXNlIExheWVyVHlwZS5TdGF0aW9uOiB7XG4gICAgICAgICAgICBjb25zdCBib29zdCA9IHNvdXJjZS5pbmRleE9mKCdndGZzJykgPT09IDAgPyAwLjAyIDogMC4wMTtcbiAgICAgICAgICAgIHJldHVybiBjb25maWRlbmNlICsgYm9vc3Q7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZTtcbiAgICAgICAgICBjYXNlIExheWVyVHlwZS5TdG9wOlxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2UgLSAwLjA1O1xuICAgICAgICAgIGNhc2UgTGF5ZXJUeXBlLkNhclBhcms6XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZSAtIDAuMDU7XG4gICAgICAgICAgY2FzZSBMYXllclR5cGUuQmlrZVBhcms6XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZSAtIDAuMDU7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgXSxcbiAgICBbJ2Rlc2MnLCAnZGVzYyddLFxuICApO1xuXG4gIHJldHVybiB1bmlxV2l0aChvcmRlcmVkUmVzdWx0cywgaXNEdXBsaWNhdGUpO1xufTtcblxuLyoqXG4gKiBQYXJzZXMgc3RvcCdzIG5hbWUgd2l0aG91dCBzdG9wIGNvZGUgZnJvbSBhIHN0b3AgbmFtZSBmcm9tIGdlb2NvZGluZyByZXN1bHRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIHN0b3AncyBuYW1lIGZyb20gZ2VvY29kaW5nIHJlc3VsdHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RvcENvZGUgc3RvcCBjb2RlLlxuICovXG5leHBvcnQgY29uc3QgZ2V0U3RvcE5hbWUgPSAobmFtZSwgc3RvcENvZGUpID0+IHtcbiAgaWYgKFxuICAgIHN0b3BDb2RlICE9PSB1bmRlZmluZWQgJiZcbiAgICBzdG9wQ29kZSAhPT0gbnVsbCAmJlxuICAgIG5hbWUubGFzdEluZGV4T2Yoc3RvcENvZGUpICE9PSAtMVxuICApIHtcbiAgICByZXR1cm4gbmFtZS5zdWJzdHJpbmcoMCwgbmFtZS5sYXN0SW5kZXhPZihzdG9wQ29kZSkgLSAxKTtcbiAgfVxuICByZXR1cm4gbmFtZTtcbn07XG4iLCJpbXBvcnQgdW5pcVdpdGggZnJvbSAnbG9kYXNoL3VuaXFXaXRoJztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC9pc0VxdWFsJztcbmltcG9ydCBtZW1vaXplIGZyb20gJ2xvZGFzaC9tZW1vaXplJztcbmltcG9ydCBlc2NhcGVSZWdFeHAgZnJvbSAnbG9kYXNoL2VzY2FwZVJlZ0V4cCc7XG5pbXBvcnQgY2xvbmVEZWVwIGZyb20gJ2xvZGFzaC9jbG9uZURlZXAnO1xuXG4vKipcbiAqIExvY2F0aW9uIHByb3BlcnRpZXMuXG4gKiBAdHlwZWRlZiB7TG9jYXRpb25Qcm9wZXJ0aWVzfVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGxheWVyIFN1Z2dlc3Rpb24gbGF5ZXIuXG4gKiBAcHJvcGVydHkge2xhdH0gW251bWJlcl1cbiAqIEBwcm9wZXJ0eSB7bG9ufSBbbnVtYmVyXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGFkZHJlc3MgQWRkcmVzcy5cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgbG9jYWxpdHkgKGNpdHkgbmFtZSkgZm9yIHN1Z2dlc3Rpb25zXG4gKlxuICogQG5hbWUgZ2V0TG9jYWxpdHlcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdWdnZXN0aW9uIHN1Z2dlc3Rpb24ncyBwcm9wZXJ0aWVzIGZyb20gZ2VvY29kaW5nIG9yIGEgZmF2b3VyaXRlIHN0b3Avc3RhdGlvbi5cbiAqIEV4cGVjdHMgbGFzdCBwYXJ0IG9mIGFuIGFkZHJlc3MgKGFmdGVyICcsJykgdG8gY29udGFpbiB0aGUgY2l0eSBuYW1lIG9mIHRoZSBzdWdnZXN0aW9uIGxvY2F0aW9uLlxuICogQHJldHVybnMge1N0cmluZ30gIENpdHkgbmFtZSBvciBlbXB0eSBzdHJpbmdcbiAqL1xuY29uc3QgZ2V0TG9jYWxpdHkgPSBzdWdnZXN0aW9uID0+XG4gIHN1Z2dlc3Rpb24ubG9jYWxhZG1pbiB8fFxuICBzdWdnZXN0aW9uLmxvY2FsaXR5IHx8XG4gIChzdWdnZXN0aW9uLmFkZHJlc3MgJiZcbiAgICBzdWdnZXN0aW9uLmFkZHJlc3MubGFzdEluZGV4T2YoJywnKSA8IHN1Z2dlc3Rpb24uYWRkcmVzcy5sZW5ndGggLSAyICYmXG4gICAgc3VnZ2VzdGlvbi5hZGRyZXNzLnN1YnN0cmluZyhzdWdnZXN0aW9uLmFkZHJlc3MubGFzdEluZGV4T2YoJywnKSArIDIpKSB8fFxuICAnJztcblxuZXhwb3J0IGNvbnN0IGdldFN0b3BDb2RlID0gKHsgaWQsIGNvZGUgfSkgPT4ge1xuICBpZiAoY29kZSkge1xuICAgIHJldHVybiBjb2RlO1xuICB9XG4gIGlmIChcbiAgICBpZCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgdHlwZW9mIGlkLmluZGV4T2YgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgaWQuaW5kZXhPZignIycpID09PSAtMVxuICApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIC8vIGlkIGZyb20gcGVsaWFzXG4gIHJldHVybiBpZC5zdWJzdHJpbmcoaWQuaW5kZXhPZignIycpICsgMSk7XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0RmF2b3VyaXRlUGxhY2VMYWJlbCA9IChuYW1lLCBhZGRyZXNzKSA9PiBbXG4gIG5hbWUgfHwgKGFkZHJlc3MgJiYgYWRkcmVzcy5zcGxpdCgnLCcpWzBdKSxcbiAgdHlwZW9mIGFkZHJlc3MgPT09ICdzdHJpbmcnXG4gICAgPyBhZGRyZXNzLnJlcGxhY2UobmV3IFJlZ0V4cChgJHtlc2NhcGVSZWdFeHAobmFtZSl9KFsgLF18JCkrYCksICcnKVxuICAgIDogJycsXG5dO1xuXG4vKipcbiAqIEZvcm1hdCBzdWdnZXN0aW9uLXBhaXIgW25hbWUsIGFkZHJlc3NdIGJ5IGBzdWdnZXN0aW9uLmxheWVyYC5cbiAqXG4gKiBAbmFtZSBnZXROYW1lTGFiZWxcbiAqIEBwYXJhbSB7TG9jYXRpb25Qcm9wZXJ0aWVzfSBzdWdnZXN0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwbGFpbl1cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXkuPHN0cmluZz59IEZvcm1hdHRlZCBsYWJlbC5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldE5hbWVMYWJlbCA9IG1lbW9pemUoXG4gIChzdWdnZXN0aW9uLCBwbGFpbiA9IGZhbHNlKSA9PiB7XG4gICAgc3dpdGNoIChzdWdnZXN0aW9uLmxheWVyKSB7XG4gICAgICBjYXNlICdjdXJyZW50UG9zaXRpb24nOlxuICAgICAgICByZXR1cm4gW3N1Z2dlc3Rpb24ubGFiZWxJZCwgc3VnZ2VzdGlvbi5hZGRyZXNzXTtcbiAgICAgIGNhc2UgJ3NlbGVjdEZyb21NYXAnOlxuICAgICAgY2FzZSAnb3duTG9jYXRpb25zJzpcbiAgICAgIGNhc2UgJ2JhY2snOlxuICAgICAgICByZXR1cm4gW3N1Z2dlc3Rpb24ubGFiZWxJZF07XG4gICAgICBjYXNlICdmYXZvdXJpdGVQbGFjZSc6XG4gICAgICAgIHJldHVybiBmb3JtYXRGYXZvdXJpdGVQbGFjZUxhYmVsKHN1Z2dlc3Rpb24ubmFtZSwgc3VnZ2VzdGlvbi5hZGRyZXNzKTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZUJpa2VSZW50YWxTdGF0aW9uJzpcbiAgICAgIGNhc2UgJ2Jpa2VSZW50YWxTdGF0aW9uJzpcbiAgICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uLm5hbWVdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlUm91dGUnOlxuICAgICAgY2FzZSAncm91dGUtQlVTJzpcbiAgICAgIGNhc2UgJ3JvdXRlLVRSQU0nOlxuICAgICAgY2FzZSAncm91dGUtUkFJTCc6XG4gICAgICBjYXNlICdyb3V0ZS1TVUJXQVknOlxuICAgICAgY2FzZSAncm91dGUtRkVSUlknOlxuICAgICAgY2FzZSAncm91dGUtQUlSUExBTkUnOlxuICAgICAgICByZXR1cm4gIXBsYWluICYmIHN1Z2dlc3Rpb24uc2hvcnROYW1lXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24uZ3Rmc0lkLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLm1vZGUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5sb25nTmFtZSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5zaG9ydE5hbWUsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubG9uZ05hbWUsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24uYWdlbmN5ID8gc3VnZ2VzdGlvbi5hZ2VuY3kubmFtZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIF07XG4gICAgICBjYXNlICd2ZW51ZSc6XG4gICAgICBjYXNlICdhZGRyZXNzJzpcbiAgICAgIGNhc2UgJ3N0cmVldCc6XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lLFxuICAgICAgICAgIHN1Z2dlc3Rpb24ubGFiZWwucmVwbGFjZShcbiAgICAgICAgICAgIG5ldyBSZWdFeHAoYCR7ZXNjYXBlUmVnRXhwKHN1Z2dlc3Rpb24ubmFtZSl9KCwpPyggKT9gKSxcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICksXG4gICAgICAgIF07XG4gICAgICBjYXNlICdmYXZvdXJpdGVTdG9wJzpcbiAgICAgIGNhc2UgJ3N0b3AnOlxuICAgICAgICByZXR1cm4gcGxhaW5cbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lIHx8XG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5sYWJlbCB8fFxuICAgICAgICAgICAgICAgIChzdWdnZXN0aW9uLmFkZHJlc3MgJiYgc3VnZ2VzdGlvbi5hZGRyZXNzLnNwbGl0KCcsJylbMF0pLFxuICAgICAgICAgICAgICBnZXRMb2NhbGl0eShzdWdnZXN0aW9uKSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmlkLFxuICAgICAgICAgICAgICBnZXRTdG9wQ29kZShzdWdnZXN0aW9uKSxcbiAgICAgICAgICAgICAgZ2V0TG9jYWxpdHkoc3VnZ2VzdGlvbiksXG4gICAgICAgICAgICBdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlU3RhdGlvbic6XG4gICAgICBjYXNlICdzdGF0aW9uJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lIHx8XG4gICAgICAgICAgICBzdWdnZXN0aW9uLmxhYmVsIHx8XG4gICAgICAgICAgICAoc3VnZ2VzdGlvbi5hZGRyZXNzICYmIHN1Z2dlc3Rpb24uYWRkcmVzcy5zcGxpdCgnLCcpWzBdKSxcbiAgICAgICAgICBnZXRMb2NhbGl0eShzdWdnZXN0aW9uKSxcbiAgICAgICAgXTtcbiAgICB9XG4gIH0sXG4gIChpdGVtLCBwbGFpbikgPT4ge1xuICAgIGNvbnN0IGkgPSBjbG9uZURlZXAoaXRlbSk7XG4gICAgaS5wbGFpbiA9IHBsYWluO1xuICAgIHJldHVybiBpO1xuICB9LFxuKTtcblxuLyoqXG4gKiBDaGVja3MgdGhhdCBmZWF0dXJlcyBhcmUgdW5pcXVlIGJ5IGxhYmVsXG4gKlxuICogQG5hbWUgdW5pcUJ5TGFiZWxcbiAqIEBwYXJhbSB7QXJyYXl9IGZlYXR1cmVzIEFycmF5IG9mIGZlYXR1cmVzXG4gKiBAcmV0dXJucyB7QXJyYXl9ICBBcnJheSBvZiB1bmlxdWUgZmVhdHVyZXNcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC51bmlxQnlMYWJlbChmZWF0dXJlcyk7XG4gKiAvLz0gQXJyYXkoMilcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdW5pcUJ5TGFiZWwoZmVhdHVyZXMpIHtcbiAgcmV0dXJuIHVuaXFXaXRoKGZlYXR1cmVzLCAoZmVhdDEsIGZlYXQyKSA9PiB7XG4gICAgY29uc3QgYm9vbCA9XG4gICAgICBpc0VxdWFsKGdldE5hbWVMYWJlbChmZWF0MS5wcm9wZXJ0aWVzKSwgZ2V0TmFtZUxhYmVsKGZlYXQyLnByb3BlcnRpZXMpKSAmJlxuICAgICAgZmVhdDEucHJvcGVydGllcy5sYXllciA9PT0gZmVhdDIucHJvcGVydGllcy5sYXllcjtcbiAgICBpZiAoXG4gICAgICBib29sICYmXG4gICAgICAoZmVhdDEudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJyB8fCBmZWF0Mi50eXBlID09PSAnRnV0dXJlUm91dGUnKVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gYm9vbDtcbiAgfSk7XG59XG4iLCJpbXBvcnQgZ2V0IGZyb20gJ2xvZGFzaC9nZXQnO1xuXG4vKipcbiAqIEZ1bmN0aW9uIHRoYXQgZmlsdGVycyBsaXN0IG1hdGNoaW5nIHRvIGlucHV0LlxuICpcbiAqIEBuYW1lIGZpbHRlck1hdGNoaW5nVG9JbnB1dFxuICogQHBhcmFtIHtBcnJheX0gbGlzdCBMaXN0IGNvbnRhaW5pbiBvYmplY3RzIGUuZyggIHtcbiAqICAgICAgICAgdHlwZTogJ0ZlYXR1cmUnXG4gKiAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAqICAgICAgICAgICBsYWJlbDogJ3Rlc3RhZGRyZXNzNCcsXG4gKiAgICAgICAgICAgbGF5ZXI6ICdhZGRyZXNzJyxcbiAqICAgICAgICAgICBuYW1lOiAndGVzdGFkZHJlc3M0JyxcbiAqICAgICAgICAgfSxcbiAqICAgICAgICAgZ2VvbWV0cnk6IHsgY29vcmRpbmF0ZXM6IFtsb24sIGxhdF0gfSxcbiAqICAgICAgIH0sKVxuICogQHBhcmFtIHtTdHJpbmd9IElucHV0IElucHV0IGdpdmVuIGZvciBmaWx0ZXJpbmcgdGhlIGxpc3RcbiAqIEBwYXJhbSB7QXJyYXl9IGZpZWxkcyBMaXN0IG9mIGZpZWxkcyB0aGF0IGxpc3QgaXMgZmlsdGVyZWQgYnkgZS5nIChbcHJvcGVydGllcy5sYWJlbCwgcHJvcGVydGllcy5uYW1lXSlcbiAqIEByZXR1cm5zIHtBcnJheX0gRmlsdGVyZWQgQXJyYXkuXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtdXRpbC5maWx0ZXJNYXRjaGluZ1RvSW5wdXQoW3t0eXBlOiBmZWF0dXJlLCBwcm9wZXJ0aWVzIHsgLi4uIG5hbWU6IHRlc3RhZGRyZXNzNCB9IC4uLiB9XSwgJ3Rlc3RhZGRyZXNzNCcsICdwcm9wZXJ0aWVzLm5hbWUnKTtcbiAqIC8vPSBMaXN0IGNvbnRhaW5pbmcgb2JqZWN0IHdpdGggZ2l2ZW4gbmFtZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZmlsdGVyTWF0Y2hpbmdUb0lucHV0KGxpc3QsIElucHV0LCBmaWVsZHMpIHtcbiAgaWYgKHR5cGVvZiBJbnB1dCA9PT0gJ3N0cmluZycgJiYgSW5wdXQubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGlucHV0ID0gSW5wdXQudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgY29uc3QgbXVsdGlXb3JkID0gaW5wdXQuaW5jbHVkZXMoJyAnKSB8fCBpbnB1dC5pbmNsdWRlcygnLCcpO1xuICAgIHJldHVybiBsaXN0LmZpbHRlcihpdGVtID0+IHtcbiAgICAgIGxldCBwYXJ0cyA9IFtdO1xuICAgICAgZmllbGRzLmZvckVhY2gocE5hbWUgPT4ge1xuICAgICAgICBsZXQgdmFsdWUgPSBnZXQoaXRlbSwgcE5hbWUpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhbXVsdGlXb3JkICYmXG4gICAgICAgICAgKHBOYW1lID09PSAncHJvcGVydGllcy5sYWJlbCcgfHwgcE5hbWUgPT09ICdhZGRyZXNzJykgJiZcbiAgICAgICAgICB2YWx1ZVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBzcGVjaWFsIGNhc2U6IGRyb3AgbGFzdCBwYXJ0cyBpLmUuIGNpdHkgYW5kIG5laWdoYm91cmhvb2RcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNwbGl0KCcsJyk7XG4gICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIHZhbHVlLnNwbGljZSh2YWx1ZS5sZW5ndGggLSAyLCAyKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHZhbHVlLnNwbGljZSh2YWx1ZS5sZW5ndGggLSAxLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZS5qb2luKCcsJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKG11bHRpV29yZCkge1xuICAgICAgICAgICAgcGFydHMgPSBwYXJ0cy5jb25jYXQodmFsdWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnRzID0gcGFydHMuY29uY2F0KFxuICAgICAgICAgICAgICB2YWx1ZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLywvZywgJyAnKS5zcGxpdCgnICcpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAocGFydHNbaV0uaW5kZXhPZihpbnB1dCkgPT09IDApIHtcbiAgICAgICAgICAvLyBhY2NlcHQgbWF0Y2ggb25seSBhdCB3b3JkIHN0YXJ0XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBsaXN0O1xufVxuIiwiLyoqXG4gKiBTZXJpYWxpemVzIG9iamVjdHNcbiAqXG4gKiBAbmFtZSBzZXJpYWxpemVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogT2JqZWN0IHRvIGJlIHNlcmlhbGl6ZWRcbiAqIEBwYXJhbSB7QW55fSBwcmVmaXhcbiAqIEByZXR1cm5zIHtTdHJpbmd9IFNlcmlhbGl6ZWQgb2JqZWN0XG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwuc2VyaWFsaXplKHBhcmFtMSwgcGFyYW0yKTtcbiAqIC8vPXRydWVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2VyaWFsaXplKG9iaiwgcHJlZml4KSB7XG4gIGlmICghb2JqKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopXG4gICAgLm1hcChwID0+IHtcbiAgICAgIGNvbnN0IGsgPSBwcmVmaXggfHwgcDtcbiAgICAgIGNvbnN0IHYgPSBvYmpbcF07XG5cbiAgICAgIHJldHVybiB0eXBlb2YgdiA9PT0gJ29iamVjdCdcbiAgICAgICAgPyBzZXJpYWxpemUodiwgaylcbiAgICAgICAgOiBgJHtlbmNvZGVVUklDb21wb25lbnQoayl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHYpfWA7XG4gICAgfSlcbiAgICAuam9pbignJicpO1xufVxuIiwiaW1wb3J0IHNlcmlhbGl6ZSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtc2VyaWFsaXplJztcbi8qKlxuICogIFJldHVybiBQcm9taXNlIGZvciBhIHVybCBqc29uIGdldCByZXF1ZXN0XG4gKlxuICogQG5hbWUgZ2V0SnNvblxuICogQHBhcmFtIHtTdHJpbmd9IHVybFxuICogQHBhcmFtIHtBcnJheX0gcGFyYW1zXG4gKiBAcmV0dXJucyB7T2JqZWN0fSByZXNwb25zZVxuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLmdldEpzb24ocGFyYW0xLCBwYXJhbTIpO1xuICogLy89cmVzcG9uc2VcbiAqL1xuY29uc3QgYXhpb3MgPSByZXF1aXJlKCdheGlvcycpLmRlZmF1bHQ7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEpzb24odXJsLCBwYXJhbXMpIHtcbiAgcmV0dXJuIGF4aW9zXG4gICAgLmdldChcbiAgICAgIGVuY29kZVVSSSh1cmwpICtcbiAgICAgICAgKHBhcmFtc1xuICAgICAgICAgID8gKHVybC5zZWFyY2goL1xcPy8pID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemUocGFyYW1zKVxuICAgICAgICAgIDogJycpLFxuICAgICAge1xuICAgICAgICB0aW1lb3V0OiAxMDAwMCxcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcblxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIClcbiAgICAudGhlbihyZXMgPT4ge1xuICAgICAgcmV0dXJuIHJlcy5kYXRhO1xuICAgIH0pO1xufVxuIiwiaW1wb3J0IGdldEpzb24gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1qc29uJztcblxuY29uc3QgREVGQVVMVF9QRUxJQVNfVVJMID0gJ2h0dHBzOi8vYXBpLmRpZ2l0cmFuc2l0LmZpL2dlb2NvZGluZy92MS9zZWFyY2gnO1xuLyoqXG4gKiA8REVTQ1JJUFRJT04+XG4gKlxuICogQG5hbWUgZ2V0R2VvY29kaW5nUmVzdWx0c1xuICogQHBhcmFtIHtTdHJpbmd9IHNlYXJjaFN0cmluZ1xuICogQHBhcmFtIHtTdHJpbmd9IHNlYXJjaFBhcmFtcyAoT3B0aW9uYWwpIFBhcmFtZXRlcnMgYXBwZW5kZWQgdG8gdXJsLCBiYXNpY2FsbHkgYm94IC8gcG9seWdvbiB0byByZXN0cmljdCBzZWFyY2ggYXJlYVxuICogQHBhcmFtIHtTdHJpbmd9IGxhbmcgKE9wdGlvbmFsKSBzZWFyY2ggbGFuZ3VhZ2VcbiAqIEBwYXJhbSB7T2JqZWN0fSBmb2N1c1BvaW50IChPcHRpb25hbCkgT3duIFBvc2l0aW9uIChQRUxJQVMgQVBJKVxuICogQHBhcmFtIHtTdHJpbmd9IHNvdXJjZXMgKE9wdGlvbmFsKSBzZWFyY2ggc291cmNlcyAoZS5nIE9TTSwgR1RGUy4uKVxuICogQHBhcmFtIHtPYmplY3R9IG1pbmltYWxSZWdleHAgKE9wdGlvbmFsKSBSZWdleHAgZm9yIHRlc3RpbmdcbiAqIEBwYXJhbSB7Kn0gZ2VvY29kaW5nTGF5ZXJzIChPcHRpb25hbCkgQXJyYXkgb2Ygc3RyaW5ncyB0aGF0IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIGxheWVycyBpcyBzZWFyY2hlZCwgZS5nLiBbJ3ZlbnVlJywgJ2FkZHJlc3MnLCAnc3RvcCddXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBSZXN1bHRzIGluIEpTT04gZm9ybVxuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLmdldEdlb2NvZGluZ1Jlc3VsdHMoXCJyZXN1bHRcIik7XG4gKiAvLz0gZS5nLiB7dGV4dDpcInJlc3VsdFwifVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICBzZWFyY2hTdHJpbmcsXG4gIHNlYXJjaFBhcmFtcyxcbiAgbGFuZyxcbiAgZm9jdXNQb2ludCxcbiAgc291cmNlcyxcbiAgcGVsaWFzVXJsLFxuICBtaW5pbWFsUmVnZXhwLFxuICBnZW9jb2RpbmdMYXllcnMsXG4pIHtcbiAgY29uc3QgdGV4dCA9IHNlYXJjaFN0cmluZyA/IHNlYXJjaFN0cmluZy50cmltKCkgOiBudWxsO1xuICBpZiAoXG4gICAgdGV4dCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgdGV4dCA9PT0gbnVsbCB8fFxuICAgIHRleHQubGVuZ3RoIDwgMSB8fFxuICAgIChtaW5pbWFsUmVnZXhwICYmICFtaW5pbWFsUmVnZXhwLnRlc3QodGV4dCkpXG4gICkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuICB9XG4gIGNvbnN0IFBFTElBU19VUkwgPSBwZWxpYXNVcmwgfHwgREVGQVVMVF9QRUxJQVNfVVJMO1xuICBsZXQgb3B0cyA9IHsgdGV4dCwgLi4uc2VhcmNoUGFyYW1zLCAuLi5mb2N1c1BvaW50LCBsYW5nIH07XG4gIGlmIChzb3VyY2VzKSB7XG4gICAgb3B0cyA9IHsgLi4ub3B0cywgc291cmNlcyB9O1xuICB9XG4gIGlmIChnZW9jb2RpbmdMYXllcnMpIHtcbiAgICBjb25zdCBsYXllcnMgPSBnZW9jb2RpbmdMYXllcnMudG9TdHJpbmcoKTtcbiAgICBvcHRzID0geyAuLi5vcHRzLCBsYXllcnMgfTtcbiAgfVxuICByZXR1cm4gZ2V0SnNvbihQRUxJQVNfVVJMLCBvcHRzKS50aGVuKHJlcyA9PiB7XG4gICAgcmV0dXJuIHJlcy5mZWF0dXJlcztcbiAgfSk7XG59XG4iLCJpbXBvcnQgZGVib3VuY2UgZnJvbSAnbG9kYXNoL2RlYm91bmNlJztcbmltcG9ydCBmbGF0dGVuIGZyb20gJ2xvZGFzaC9mbGF0dGVuJztcbmltcG9ydCB0YWtlIGZyb20gJ2xvZGFzaC90YWtlJztcbmltcG9ydCB7XG4gIHNvcnRTZWFyY2hSZXN1bHRzLFxuICBpc1N0b3AsXG59IGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1oZWxwZXJzJztcbmltcG9ydCB1bmlxQnlMYWJlbCBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtdW5pcS1ieS1sYWJlbCc7XG5pbXBvcnQgZmlsdGVyTWF0Y2hpbmdUb0lucHV0IGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1maWx0ZXItbWF0Y2hpbmctdG8taW5wdXQnO1xuaW1wb3J0IGdldEdlb2NvZGluZ1Jlc3VsdHMgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cyc7XG5pbXBvcnQgZ2V0SnNvbiBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWpzb24nO1xuXG5mdW5jdGlvbiBnZXRTdG9wc0Zyb21HZW9jb2Rpbmcoc3RvcHMsIFVSTF9QRUxJQVNfUExBQ0UpIHtcbiAgaWYgKCFzdG9wcyB8fCBzdG9wcy5sZW5ndGggPCAxKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG4gIH1cbiAgbGV0IGdpZHMgPSAnJztcbiAgY29uc3Qgc3RvcHNXaXRoR2lkcyA9IHN0b3BzLm1hcChzdG9wID0+IHtcbiAgICBjb25zdCB0eXBlID0gc3RvcC50eXBlID09PSAnc3RvcCcgPyAnc3RvcCcgOiAnc3RhdGlvbic7XG4gICAgbGV0IGdpZCA9IGBndGZzJHtzdG9wLmd0ZnNJZC5zcGxpdCgnOicpWzBdLnRvTG93ZXJDYXNlKCl9OiR7dHlwZX06R1RGUzoke1xuICAgICAgc3RvcC5ndGZzSWRcbiAgICB9YDtcbiAgICBpZiAoc3RvcC5jb2RlKSB7XG4gICAgICBnaWQgKz0gYCMke3N0b3AuY29kZX1gO1xuICAgIH1cbiAgICBnaWRzICs9IGAke2dpZH0sYDtcbiAgICByZXR1cm4geyAuLi5zdG9wLCBnaWQgfTtcbiAgfSk7XG4gIGNvbnN0IHN0b3BTdGF0aW9uTWFwID0gc3RvcHNXaXRoR2lkcy5yZWR1Y2UoZnVuY3Rpb24gKG1hcCwgc3RvcE9yU3RhdGlvbikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIG1hcFtzdG9wT3JTdGF0aW9uLmdpZF0gPSBzdG9wT3JTdGF0aW9uO1xuICAgIHJldHVybiBtYXA7XG4gIH0sIHt9KTtcbiAgcmV0dXJuIGdldEpzb24oVVJMX1BFTElBU19QTEFDRSwge1xuICAgIGlkczogZ2lkcy5zbGljZSgwLCAtMSksXG4gICAgLy8gbGFuZzogY29udGV4dC5nZXRTdG9yZSgnUHJlZmVyZW5jZXNTdG9yZScpLmdldExhbmd1YWdlKCksIFRPRE8gZW5hYmxlIHRoaXMgd2hlbiBPVFAgc3VwcG9ydHMgdHJhbnNsYXRpb25zXG4gIH0pLnRoZW4ocmVzID0+IHtcbiAgICByZXR1cm4gcmVzLmZlYXR1cmVzLm1hcChzdG9wID0+IHtcbiAgICAgIGNvbnN0IGZhdm91cml0ZSA9IHtcbiAgICAgICAgdHlwZTogJ0Zhdm91cml0ZVN0b3AnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgYWRkZW5kdW06IHN0b3AucHJvcGVydGllcy5hZGRlbmR1bSxcbiAgICAgICAgICBnaWQ6IHN0b3BTdGF0aW9uTWFwW3N0b3AucHJvcGVydGllcy5naWRdLmdpZCxcbiAgICAgICAgICBjb2RlOiBzdG9wU3RhdGlvbk1hcFtzdG9wLnByb3BlcnRpZXMuZ2lkXS5jb2RlLFxuICAgICAgICAgIGd0ZnNJZDogc3RvcFN0YXRpb25NYXBbc3RvcC5wcm9wZXJ0aWVzLmdpZF0uZ3Rmc0lkLFxuICAgICAgICAgIGxhc3RVcGRhdGVkOiBzdG9wU3RhdGlvbk1hcFtzdG9wLnByb3BlcnRpZXMuZ2lkXS5sYXN0VXBkYXRlZCxcbiAgICAgICAgICBmYXZvdXJpdGVJZDogc3RvcFN0YXRpb25NYXBbc3RvcC5wcm9wZXJ0aWVzLmdpZF0uZmF2b3VyaXRlSWQsXG4gICAgICAgICAgYWRkcmVzczogc3RvcC5wcm9wZXJ0aWVzLmxhYmVsLFxuICAgICAgICAgIGxheWVyOiBpc1N0b3Aoc3RvcC5wcm9wZXJ0aWVzKSA/ICdmYXZvdXJpdGVTdG9wJyA6ICdmYXZvdXJpdGVTdGF0aW9uJyxcbiAgICAgICAgfSxcbiAgICAgICAgZ2VvbWV0cnk6IHN0b3AuZ2VvbWV0cnksXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGZhdm91cml0ZTtcbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBnZXRGYXZvdXJpdGVMb2NhdGlvbnMoZmF2b3VyaXRlcywgaW5wdXQpIHtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQoZmF2b3VyaXRlcywgaW5wdXQsIFsnYWRkcmVzcycsICduYW1lJ10pLm1hcChpdGVtID0+ICh7XG4gICAgICB0eXBlOiAnRmF2b3VyaXRlUGxhY2UnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAuLi5pdGVtLFxuICAgICAgICBsYWJlbDogaXRlbS5uYW1lLFxuICAgICAgICBsYXllcjogJ2Zhdm91cml0ZVBsYWNlJyxcbiAgICAgIH0sXG4gICAgICBnZW9tZXRyeTogeyB0eXBlOiAnUG9pbnQnLCBjb29yZGluYXRlczogW2l0ZW0ubG9uLCBpdGVtLmxhdF0gfSxcbiAgICB9KSksXG4gICk7XG59XG5mdW5jdGlvbiBzZWxlY3RQb3NpdGlvbkZvbU1hcChpbnB1dCkge1xuICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJyB8fCBpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ1NlbGVjdEZyb21NYXAnLFxuICAgICAgICBhZGRyZXNzOiAnU2VsZWN0RnJvbU1hcCcsXG4gICAgICAgIGxhdDogbnVsbCxcbiAgICAgICAgbG9uOiBudWxsLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgbGFiZWxJZDogJ3NlbGVjdC1mcm9tLW1hcCcsXG4gICAgICAgICAgbGF5ZXI6ICdzZWxlY3RGcm9tTWFwJyxcbiAgICAgICAgICBhZGRyZXNzOiAnU2VsZWN0RnJvbU1hcCcsXG4gICAgICAgICAgbGF0OiBudWxsLFxuICAgICAgICAgIGxvbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgICAgIGNvb3JkaW5hdGVzOiBbXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXSk7XG4gIH1cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG59XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRQb3NpdGlvbklmRW1wdHkoaW5wdXQsIHBvc2l0aW9uKSB7XG4gIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnIHx8IGlucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnQ3VycmVudExvY2F0aW9uJyxcbiAgICAgICAgYWRkcmVzczogcG9zaXRpb24uYWRkcmVzcyxcbiAgICAgICAgbGF0OiBwb3NpdGlvbi5sYXQsXG4gICAgICAgIGxvbjogcG9zaXRpb24ubG9uLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgbGFiZWxJZDogJ3VzZS1vd24tcG9zaXRpb24nLFxuICAgICAgICAgIGxheWVyOiAnY3VycmVudFBvc2l0aW9uJyxcbiAgICAgICAgICBhZGRyZXNzOiBwb3NpdGlvbi5hZGRyZXNzLFxuICAgICAgICAgIGxhdDogcG9zaXRpb24ubGF0LFxuICAgICAgICAgIGxvbjogcG9zaXRpb24ubG9uLFxuICAgICAgICB9LFxuICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgIHR5cGU6ICdQb2ludCcsXG4gICAgICAgICAgY29vcmRpbmF0ZXM6IFtwb3NpdGlvbi5sb24sIHBvc2l0aW9uLmxhdF0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdEZyb21Pd25Mb2NhdGlvbnMoaW5wdXQpIHtcbiAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycgfHwgaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyxcbiAgICAgICAgYWRkcmVzczogJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnLFxuICAgICAgICBsYXQ6IG51bGwsXG4gICAgICAgIGxvbjogbnVsbCxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGxhYmVsSWQ6ICdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJyxcbiAgICAgICAgICBsYXllcjogJ293bkxvY2F0aW9ucycsXG4gICAgICAgICAgYWRkcmVzczogJ3NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnLFxuICAgICAgICAgIGxhdDogbnVsbCxcbiAgICAgICAgICBsb246IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIGdlb21ldHJ5OiB7XG4gICAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgICBjb29yZGluYXRlczogW10sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xufVxuXG5mdW5jdGlvbiBnZXRCYWNrU3VnZ2VzdGlvbigpIHtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXG4gICAge1xuICAgICAgdHlwZTogJ2JhY2snLFxuICAgICAgYWRkcmVzczogJ2JhY2snLFxuICAgICAgbGF0OiBudWxsLFxuICAgICAgbG9uOiBudWxsLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBsYWJlbElkOiAnYmFjaycsXG4gICAgICAgIGxheWVyOiAnYmFjaycsXG4gICAgICAgIGFkZHJlc3M6ICdiYWNrJyxcbiAgICAgICAgbGF0OiBudWxsLFxuICAgICAgICBsb246IG51bGwsXG4gICAgICB9LFxuICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgY29vcmRpbmF0ZXM6IFtdLFxuICAgICAgfSxcbiAgICB9LFxuICBdKTtcbn1cblxuZnVuY3Rpb24gZ2V0RmF2b3VyaXRlU3RvcHMoc3RvcHNBbmRTdGF0aW9ucywgaW5wdXQpIHtcbiAgcmV0dXJuIHN0b3BzQW5kU3RhdGlvbnMudGhlbihzdG9wcyA9PiB7XG4gICAgcmV0dXJuIGZpbHRlck1hdGNoaW5nVG9JbnB1dChzdG9wcywgaW5wdXQsIFtcbiAgICAgICdwcm9wZXJ0aWVzLm5hbWUnLFxuICAgICAgJ3Byb3BlcnRpZXMubmFtZScsXG4gICAgICAncHJvcGVydGllcy5hZGRyZXNzJyxcbiAgICBdKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldE9sZFNlYXJjaGVzKG9sZFNlYXJjaGVzLCBpbnB1dCwgZHJvcExheWVycykge1xuICBsZXQgbWF0Y2hpbmdPbGRTZWFyY2hlcyA9IGZpbHRlck1hdGNoaW5nVG9JbnB1dChvbGRTZWFyY2hlcywgaW5wdXQsIFtcbiAgICAncHJvcGVydGllcy5uYW1lJyxcbiAgICAncHJvcGVydGllcy5sYWJlbCcsXG4gICAgJ3Byb3BlcnRpZXMuYWRkcmVzcycsXG4gICAgJ3Byb3BlcnRpZXMuc2hvcnROYW1lJyxcbiAgICAncHJvcGVydGllcy5sb25nTmFtZScsXG4gIF0pO1xuICBpZiAoZHJvcExheWVycykge1xuICAgIC8vIGRvbid0IHdhbnQgdGhlc2VcbiAgICBtYXRjaGluZ09sZFNlYXJjaGVzID0gbWF0Y2hpbmdPbGRTZWFyY2hlcy5maWx0ZXIoXG4gICAgICBpdGVtID0+ICFkcm9wTGF5ZXJzLmluY2x1ZGVzKGl0ZW0ucHJvcGVydGllcy5sYXllciksXG4gICAgKTtcbiAgfVxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgIHRha2UobWF0Y2hpbmdPbGRTZWFyY2hlcywgMTApLm1hcChpdGVtID0+IHtcbiAgICAgIGNvbnN0IG5ld0l0ZW0gPSB7XG4gICAgICAgIC4uLml0ZW0sXG4gICAgICAgIHR5cGU6ICdPbGRTZWFyY2gnLFxuICAgICAgICB0aW1ldGFibGVDbGlja2VkOiBmYWxzZSwgLy8gcmVzZXQgbGF0ZXN0IHNlbGVjdGlvbiBhY3Rpb25cbiAgICAgICAgYXJyb3dDbGlja2VkOiBmYWxzZSxcbiAgICAgIH07XG4gICAgICBkZWxldGUgbmV3SXRlbS5wcm9wZXJ0aWVzLmNvbmZpZGVuY2U7XG4gICAgICByZXR1cm4gbmV3SXRlbTtcbiAgICB9KSxcbiAgKTtcbn1cblxuZnVuY3Rpb24gaGFzRmF2b3VyaXRlcyhjb250ZXh0LCBsb2NhdGlvbnMsIHN0b3BzKSB7XG4gIGNvbnN0IGZhdm91cml0ZUxvY2F0aW9ucyA9IGxvY2F0aW9ucyhjb250ZXh0KTtcbiAgaWYgKGZhdm91cml0ZUxvY2F0aW9ucyAmJiBmYXZvdXJpdGVMb2NhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IGZhdm91cml0ZVN0b3BzID0gc3RvcHMoY29udGV4dCk7XG4gIHJldHVybiBmYXZvdXJpdGVTdG9wcyAmJiBmYXZvdXJpdGVTdG9wcy5sZW5ndGggPiAwO1xufVxuXG5jb25zdCByb3V0ZUxheWVycyA9IFtcbiAgJ3JvdXRlLVRSQU0nLFxuICAncm91dGUtQlVTJyxcbiAgJ3JvdXRlLVJBSUwnLFxuICAncm91dGUtRkVSUlknLFxuICAncm91dGUtU1VCV0FZJyxcbiAgJ3JvdXRlLUFJUlBMQU5FJyxcbl07XG5jb25zdCBsb2NhdGlvbkxheWVycyA9IFsnZmF2b3VyaXRlUGxhY2UnLCAndmVudWUnLCAnYWRkcmVzcycsICdzdHJlZXQnXTtcbmNvbnN0IHBhcmtpbmdMYXllcnMgPSBbJ2NhcnBhcmsnLCAnYmlrZXBhcmsnXTtcbi8qKlxuICogRXhlY3V0ZXMgdGhlIHNlYXJjaFxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlYXJjaFJlc3VsdHMoXG4gIHRhcmdldHMsXG4gIHNvdXJjZXMsXG4gIHRyYW5zcG9ydE1vZGUsXG4gIHNlYXJjaENvbnRleHQsXG4gIGZpbHRlclJlc3VsdHMsXG4gIGdlb2NvZGluZ1NpemUsXG4gIHsgaW5wdXQgfSxcbiAgY2FsbGJhY2ssXG4gIHBhdGhPcHRzLFxuICByZWZQb2ludCxcbikge1xuICBjb25zdCB7XG4gICAgZ2V0UG9zaXRpb25zLFxuICAgIGdldEZhdm91cml0ZUxvY2F0aW9uczogbG9jYXRpb25zLFxuICAgIGdldE9sZFNlYXJjaGVzOiBwcmV2U2VhcmNoZXMsXG4gICAgZ2V0RmF2b3VyaXRlU3RvcHM6IHN0b3BzLFxuICAgIHBhcmtpbmdBcmVhU291cmNlcyxcbiAgICBnZXRMYW5ndWFnZSxcbiAgICBnZXRTdG9wQW5kU3RhdGlvbnNRdWVyeSxcbiAgICBnZXRGYXZvdXJpdGVCaWtlUmVudGFsU3RhdGlvbnNRdWVyeSxcbiAgICBnZXRGYXZvdXJpdGVCaWtlUmVudGFsU3RhdGlvbnMsXG4gICAgZ2V0RmF2b3VyaXRlUm91dGVzUXVlcnksXG4gICAgZ2V0RmF2b3VyaXRlUm91dGVzLFxuICAgIGdldFJvdXRlc1F1ZXJ5LFxuICAgIGNvbnRleHQsXG4gICAgaXNQZWxpYXNMb2NhdGlvbkF3YXJlOiBsb2NhdGlvbkF3YXJlLFxuICAgIG1pbmltYWxSZWdleHAsXG4gICAgbGluZVJlZ2V4cCxcbiAgICBVUkxfUEVMSUFTLFxuICAgIFVSTF9QRUxJQVNfUExBQ0UsXG4gICAgZmVlZElEcyxcbiAgICBnZW9jb2RpbmdTZWFyY2hQYXJhbXMsXG4gICAgZ2VvY29kaW5nU291cmNlcyxcbiAgICBnZXRGdXR1cmVSb3V0ZXMsXG4gICAgY2l0eUJpa2VOZXR3b3JrcyxcbiAgfSA9IHNlYXJjaENvbnRleHQ7XG4gIC8vIGlmIG5vIHRhcmdldHMgYXJlIHByb3ZpZGVkLCBzZWFyY2ggdGhlbSBhbGwuXG4gIGNvbnN0IGFsbFRhcmdldHMgPSAhdGFyZ2V0cyB8fCB0YXJnZXRzLmxlbmd0aCA9PT0gMDtcbiAgLy8gaWYgbm8gc291cmNlcyBhcmUgcHJvdmlkZWQsIHVzZSB0aGVtIGFsbC5cbiAgY29uc3QgYWxsU291cmNlcyA9ICFzb3VyY2VzIHx8IHNvdXJjZXMubGVuZ3RoID09PSAwO1xuICBjb25zdCBwb3NpdGlvbiA9IGdldFBvc2l0aW9ucyhjb250ZXh0KTtcbiAgY29uc3Qgc2VhcmNoQ29tcG9uZW50cyA9IFtdO1xuICBjb25zdCBzZWFyY2hlcyA9IHsgdHlwZTogJ2FsbCcsIHRlcm06IGlucHV0LCByZXN1bHRzOiBbXSB9O1xuICBjb25zdCBsYW5ndWFnZSA9IGdldExhbmd1YWdlKGNvbnRleHQpO1xuICBjb25zdCBmb2N1c1BvaW50ID1cbiAgICBsb2NhdGlvbkF3YXJlICYmIHJlZlBvaW50Py5sYXQgJiYgcmVmUG9pbnQ/LmxvblxuICAgICAgPyB7XG4gICAgICAgICAgLy8gUm91bmQgY29vcmRpbmF0ZXMgdG8gYXBwcm94IDEga20sIGluIG9yZGVyIHRvIGltcHJvdmUgY2FjaGluZ1xuICAgICAgICAgICdmb2N1cy5wb2ludC5sYXQnOiByZWZQb2ludC5sYXQudG9GaXhlZCgzKSxcbiAgICAgICAgICAnZm9jdXMucG9pbnQubG9uJzogcmVmUG9pbnQubG9uLnRvRml4ZWQoMyksXG4gICAgICAgIH1cbiAgICAgIDoge307XG4gIGNvbnN0IG1vZGUgPSB0cmFuc3BvcnRNb2RlID8gdHJhbnNwb3J0TW9kZS5zcGxpdCgnLScpWzFdIDogdW5kZWZpbmVkO1xuICBpZiAoXG4gICAgdGFyZ2V0cy5pbmNsdWRlcygnQ3VycmVudFBvc2l0aW9uJykgJiZcbiAgICBwb3NpdGlvbi5zdGF0dXMgIT09ICdnZW9sb2NhdGlvbi1ub3Qtc3VwcG9ydGVkJ1xuICApIHtcbiAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goZ2V0Q3VycmVudFBvc2l0aW9uSWZFbXB0eShpbnB1dCwgcG9zaXRpb24pKTtcbiAgfVxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdNYXBQb3NpdGlvbicpKSB7XG4gICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKHNlbGVjdFBvc2l0aW9uRm9tTWFwKGlucHV0KSk7XG4gIH1cbiAgaWYgKHRhcmdldHMuaW5jbHVkZXMoJ0Z1dHVyZVJvdXRlcycpKSB7XG4gICAgY29uc3QgaXRlbXMgPSBnZXRGdXR1cmVSb3V0ZXMoY29udGV4dCk7XG4gICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKHRha2UoaXRlbXMsIDMpKTtcbiAgfVxuICBpZiAoXG4gICAgdGFyZ2V0cy5pbmNsdWRlcygnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycpICYmXG4gICAgaGFzRmF2b3VyaXRlcyhjb250ZXh0LCBsb2NhdGlvbnMsIHN0b3BzKVxuICApIHtcbiAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goc2VsZWN0RnJvbU93bkxvY2F0aW9ucyhpbnB1dCkpO1xuICB9XG4gIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ0xvY2F0aW9ucycpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gZ2VvY29kaW5nU2VhcmNoUGFyYW1zO1xuICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgY29uc3QgZmF2b3VyaXRlTG9jYXRpb25zID0gbG9jYXRpb25zKGNvbnRleHQpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKGdldEZhdm91cml0ZUxvY2F0aW9ucyhmYXZvdXJpdGVMb2NhdGlvbnMsIGlucHV0KSk7XG4gICAgICBpZiAoc291cmNlcy5pbmNsdWRlcygnQmFjaycpKSB7XG4gICAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChnZXRCYWNrU3VnZ2VzdGlvbigpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdEYXRhc291cmNlJykpIHtcbiAgICAgIGNvbnN0IGdlb2NvZGluZ0xheWVycyA9IFsnc3RhdGlvbicsICd2ZW51ZScsICdhZGRyZXNzJywgJ3N0cmVldCddO1xuICAgICAgY29uc3QgZmVlZGlzID0gZmVlZElEcy5tYXAodiA9PiBgZ3RmcyR7dn1gKTtcbiAgICAgIGNvbnN0IGdlb3NvdXJjZXMgPSBnZW9jb2RpbmdTb3VyY2VzLmNvbmNhdChmZWVkaXMpLmpvaW4oJywnKTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0R2VvY29kaW5nUmVzdWx0cyhcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBzZWFyY2hQYXJhbXMsXG4gICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgZm9jdXNQb2ludCxcbiAgICAgICAgICBnZW9zb3VyY2VzLFxuICAgICAgICAgIFVSTF9QRUxJQVMsXG4gICAgICAgICAgbWluaW1hbFJlZ2V4cCxcbiAgICAgICAgICBnZW9jb2RpbmdMYXllcnMsXG4gICAgICAgICAgcmVmUG9pbnQsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdIaXN0b3J5JykpIHtcbiAgICAgIGNvbnN0IGxvY2F0aW9uSGlzdG9yeSA9IHByZXZTZWFyY2hlcyhjb250ZXh0LCAnZW5kcG9pbnQnKTtcbiAgICAgIGNvbnN0IGRyb3BMYXllcnMgPSBbXG4gICAgICAgICdjdXJyZW50UG9zaXRpb24nLFxuICAgICAgICAnc2VsZWN0RnJvbU1hcCcsXG4gICAgICAgICdmdXR1cmVSb3V0ZScsXG4gICAgICAgICdvd25Mb2NhdGlvbnMnLFxuICAgICAgICAnYmlrZVJlbnRhbFN0YXRpb24nLFxuICAgICAgICAnYmlrZXBhcmsnLFxuICAgICAgICAnY2FycGFyaycsXG4gICAgICAgICdzdG9wJyxcbiAgICAgICAgJ2JhY2snLFxuICAgICAgXTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5yb3V0ZUxheWVycyk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goZ2V0T2xkU2VhcmNoZXMobG9jYXRpb25IaXN0b3J5LCBpbnB1dCwgZHJvcExheWVycykpO1xuICAgIH1cbiAgfVxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdQYXJraW5nQXJlYXMnKSkge1xuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0RhdGFzb3VyY2UnKSkge1xuICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID1cbiAgICAgICAgZ2VvY29kaW5nU2l6ZSAmJiBnZW9jb2RpbmdTaXplICE9PSAxMCA/IHsgc2l6ZTogZ2VvY29kaW5nU2l6ZSB9IDoge307XG4gICAgICBjb25zdCBnZW9jb2RpbmdMYXllcnMgPSBbJ2NhcnBhcmsnLCAnYmlrZXBhcmsnXTtcbiAgICAgIGNvbnN0IGZlZWRJZHMgPSBwYXJraW5nQXJlYVNvdXJjZXMgPyBwYXJraW5nQXJlYVNvdXJjZXMuam9pbignLCcpIDogbnVsbDtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0R2VvY29kaW5nUmVzdWx0cyhcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBzZWFyY2hQYXJhbXMsXG4gICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgZm9jdXNQb2ludCxcbiAgICAgICAgICBmZWVkSWRzLFxuICAgICAgICAgIFVSTF9QRUxJQVMsXG4gICAgICAgICAgbWluaW1hbFJlZ2V4cCxcbiAgICAgICAgICBnZW9jb2RpbmdMYXllcnMsXG4gICAgICAgICkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICBpZiAoZmlsdGVyUmVzdWx0cykge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0hpc3RvcnknKSkge1xuICAgICAgY29uc3QgaGlzdG9yeSA9IHByZXZTZWFyY2hlcyhjb250ZXh0KTtcbiAgICAgIGNvbnN0IGRyb3BMYXllcnMgPSBbXG4gICAgICAgICdjdXJyZW50UG9zaXRpb24nLFxuICAgICAgICAnc2VsZWN0RnJvbU1hcCcsXG4gICAgICAgICdmdXR1cmVSb3V0ZScsXG4gICAgICAgICdvd25Mb2NhdGlvbnMnLFxuICAgICAgICAnZmF2b3VyaXRlUGxhY2UnLFxuICAgICAgICAnYmlrZXN0YXRpb24nLFxuICAgICAgICAnYmlrZVJlbnRhbFN0YXRpb24nLFxuICAgICAgICAnYmFjaycsXG4gICAgICBdO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnJvdXRlTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5sb2NhdGlvbkxheWVycyk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goZ2V0T2xkU2VhcmNoZXMoaGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpKTtcbiAgICB9XG4gIH1cblxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdTdG9wcycpKSB7XG4gICAgaWYgKHNvdXJjZXMuaW5jbHVkZXMoJ0Zhdm91cml0ZScpKSB7XG4gICAgICBjb25zdCBmYXZvdXJpdGVTdG9wcyA9IHN0b3BzKGNvbnRleHQpO1xuICAgICAgbGV0IHN0b3BzQW5kU3RhdGlvbnM7XG4gICAgICBpZiAoZmF2b3VyaXRlU3RvcHMuZXZlcnkoc3RvcCA9PiBzdG9wLnR5cGUgPT09ICdzdGF0aW9uJykpIHtcbiAgICAgICAgc3RvcHNBbmRTdGF0aW9ucyA9IGdldFN0b3BzRnJvbUdlb2NvZGluZyhcbiAgICAgICAgICBmYXZvdXJpdGVTdG9wcyxcbiAgICAgICAgICBVUkxfUEVMSUFTX1BMQUNFLFxuICAgICAgICApLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgaWYgKGZpbHRlclJlc3VsdHMpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdG9wc0FuZFN0YXRpb25zID0gZ2V0U3RvcEFuZFN0YXRpb25zUXVlcnkoZmF2b3VyaXRlU3RvcHMpXG4gICAgICAgICAgLnRoZW4oZmF2b3VyaXRlcyA9PlxuICAgICAgICAgICAgZ2V0U3RvcHNGcm9tR2VvY29kaW5nKGZhdm91cml0ZXMsIFVSTF9QRUxJQVNfUExBQ0UpLFxuICAgICAgICAgIClcbiAgICAgICAgICAudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJSZXN1bHRzKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goZ2V0RmF2b3VyaXRlU3RvcHMoc3RvcHNBbmRTdGF0aW9ucywgaW5wdXQpKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnRGF0YXNvdXJjZScpKSB7XG4gICAgICBjb25zdCBnZW9jb2RpbmdMYXllcnMgPSBbJ3N0b3AnLCAnc3RhdGlvbiddO1xuICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID1cbiAgICAgICAgZ2VvY29kaW5nU2l6ZSAmJiBnZW9jb2RpbmdTaXplICE9PSAxMCA/IHsgc2l6ZTogZ2VvY29kaW5nU2l6ZSB9IDoge307XG4gICAgICAvLyBhIGxpdHRsZSBoYWNrOiB3aGVuIHNlYXJjaGluZyBsb2NhdGlvbiBkYXRhLCBhdXRvbWF0aWNhbGx5IGRlZHVwZSBzdG9wc1xuICAgICAgLy8gdGhpcyBjb3VsZCBiZSBhIG5ldyBleHBsaWNpdCBwcm9wXG4gICAgICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdMb2NhdGlvbnMnKSkge1xuICAgICAgICBzZWFyY2hQYXJhbXMuZGVkdXBlc3RvcHMgPSAxO1xuICAgICAgfVxuICAgICAgY29uc3QgZmVlZGlzID0gZmVlZElEcy5tYXAodiA9PiBgZ3RmcyR7dn1gKS5qb2luKCcsJyk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGdldEdlb2NvZGluZ1Jlc3VsdHMoXG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgc2VhcmNoUGFyYW1zLFxuICAgICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAgIGZvY3VzUG9pbnQsXG4gICAgICAgICAgZmVlZGlzLFxuICAgICAgICAgIFVSTF9QRUxJQVMsXG4gICAgICAgICAgbWluaW1hbFJlZ2V4cCxcbiAgICAgICAgICBnZW9jb2RpbmdMYXllcnMsXG4gICAgICAgICkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICBpZiAoZmlsdGVyUmVzdWx0cykge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0hpc3RvcnknKSkge1xuICAgICAgY29uc3Qgc3RvcEhpc3RvcnkgPSBwcmV2U2VhcmNoZXMoY29udGV4dCkuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgICBpZiAoaXRlbS5wcm9wZXJ0aWVzLmdpZCkge1xuICAgICAgICAgIHJldHVybiBpdGVtLnByb3BlcnRpZXMuZ2lkLmluY2x1ZGVzKCdHVEZTOicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBkcm9wTGF5ZXJzID0gW1xuICAgICAgICAnY3VycmVudFBvc2l0aW9uJyxcbiAgICAgICAgJ3NlbGVjdEZyb21NYXAnLFxuICAgICAgICAnZnV0dXJlUm91dGUnLFxuICAgICAgICAnb3duTG9jYXRpb25zJyxcbiAgICAgICAgJ2Zhdm91cml0ZVBsYWNlJyxcbiAgICAgICAgJ2Jpa2VSZW50YWxTdGF0aW9uJyxcbiAgICAgICAgJ2JhY2snLFxuICAgICAgXTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5yb3V0ZUxheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ubG9jYXRpb25MYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnBhcmtpbmdMYXllcnMpO1xuICAgICAgaWYgKHRyYW5zcG9ydE1vZGUpIHtcbiAgICAgICAgaWYgKHRyYW5zcG9ydE1vZGUgIT09ICdyb3V0ZS1DSVRZQklLRScpIHtcbiAgICAgICAgICBkcm9wTGF5ZXJzLnB1c2goJ2Jpa2VSZW50YWxTdGF0aW9uJyk7XG4gICAgICAgICAgZHJvcExheWVycy5wdXNoKCdiaWtlc3RhdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgICBnZXRPbGRTZWFyY2hlcyhzdG9wSGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpLnRoZW4ocmVzdWx0ID0+XG4gICAgICAgICAgICBmaWx0ZXJSZXN1bHRzID8gZmlsdGVyUmVzdWx0cyhyZXN1bHQsIG1vZGUpIDogcmVzdWx0LFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goZ2V0T2xkU2VhcmNoZXMoc3RvcEhpc3RvcnksIGlucHV0LCBkcm9wTGF5ZXJzKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnUm91dGVzJykpIHtcbiAgICBpZiAoc291cmNlcy5pbmNsdWRlcygnRmF2b3VyaXRlJykpIHtcbiAgICAgIGNvbnN0IGZhdm91cml0ZVJvdXRlcyA9IGdldEZhdm91cml0ZVJvdXRlcyhjb250ZXh0KTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0RmF2b3VyaXRlUm91dGVzUXVlcnkoXG4gICAgICAgICAgZmF2b3VyaXRlUm91dGVzLFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIG1vZGUsXG4gICAgICAgICAgcGF0aE9wdHMsXG4gICAgICAgICkudGhlbihyZXN1bHQgPT5cbiAgICAgICAgICBmaWx0ZXJSZXN1bHRzID8gZmlsdGVyUmVzdWx0cyhyZXN1bHQsIG1vZGUsICdSb3V0ZXMnKSA6IHJlc3VsdCxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgIGdldFJvdXRlc1F1ZXJ5KGlucHV0LCBmZWVkSURzLCB0cmFuc3BvcnRNb2RlLCBwYXRoT3B0cykudGhlbihyZXN1bHQgPT5cbiAgICAgICAgZmlsdGVyUmVzdWx0cyA/IGZpbHRlclJlc3VsdHMocmVzdWx0LCBtb2RlLCAnUm91dGVzJykgOiByZXN1bHQsXG4gICAgICApLFxuICAgICk7XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnSGlzdG9yeScpKSB7XG4gICAgICBjb25zdCByb3V0ZUhpc3RvcnkgPSBwcmV2U2VhcmNoZXMoY29udGV4dCk7XG4gICAgICBjb25zdCBkcm9wTGF5ZXJzID0gW1xuICAgICAgICAnY3VycmVudFBvc2l0aW9uJyxcbiAgICAgICAgJ3NlbGVjdEZyb21NYXAnLFxuICAgICAgICAnZnV0dXJlUm91dGUnLFxuICAgICAgICAnZmF2b3VyaXRlUGxhY2UnLFxuICAgICAgICAnc3RvcCcsXG4gICAgICAgICdzdGF0aW9uJyxcbiAgICAgICAgJ2Jpa2VwYXJrJyxcbiAgICAgICAgJ2NhcnBhcmsnLFxuICAgICAgICAnb3duTG9jYXRpb25zJyxcbiAgICAgICAgJ2JhY2snLFxuICAgICAgXTtcbiAgICAgIGlmICh0cmFuc3BvcnRNb2RlKSB7XG4gICAgICAgIGlmICh0cmFuc3BvcnRNb2RlICE9PSAncm91dGUtQ0lUWUJJS0UnKSB7XG4gICAgICAgICAgZHJvcExheWVycy5wdXNoKCdiaWtlUmVudGFsU3RhdGlvbicpO1xuICAgICAgICAgIGRyb3BMYXllcnMucHVzaCgnYmlrZXN0YXRpb24nKTtcbiAgICAgICAgfVxuICAgICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucm91dGVMYXllcnMuZmlsdGVyKGkgPT4gIShpID09PSB0cmFuc3BvcnRNb2RlKSkpO1xuICAgICAgfVxuICAgICAgZHJvcExheWVycy5wdXNoKC4uLmxvY2F0aW9uTGF5ZXJzKTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0T2xkU2VhcmNoZXMocm91dGVIaXN0b3J5LCBpbnB1dCwgZHJvcExheWVycykudGhlbihyZXN1bHRzID0+XG4gICAgICAgICAgZmlsdGVyUmVzdWx0cyA/IGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSwgJ1JvdXRlcycpIDogcmVzdWx0cyxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ0Jpa2VSZW50YWxTdGF0aW9ucycpKSB7XG4gICAgaWYgKHNvdXJjZXMuaW5jbHVkZXMoJ0Zhdm91cml0ZScpKSB7XG4gICAgICBjb25zdCBmYXZvdXJpdGVCaWtlU3RhdGlvbnMgPSBnZXRGYXZvdXJpdGVCaWtlUmVudGFsU3RhdGlvbnMoY29udGV4dCk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGdldEZhdm91cml0ZUJpa2VSZW50YWxTdGF0aW9uc1F1ZXJ5KGZhdm91cml0ZUJpa2VTdGF0aW9ucywgaW5wdXQpLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnRGF0YXNvdXJjZScpKSB7XG4gICAgICBjb25zdCBnZW9jb2RpbmdMYXllcnMgPSBbJ2Jpa2VzdGF0aW9uJ107XG4gICAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSB7XG4gICAgICAgIHNpemU6IGdlb2NvZGluZ1NpemUsXG4gICAgICB9O1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBmb2N1c1BvaW50LFxuICAgICAgICAgIGNpdHlCaWtlTmV0d29ya3Muam9pbignLCcpLFxuICAgICAgICAgIFVSTF9QRUxJQVMsXG4gICAgICAgICAgbWluaW1hbFJlZ2V4cCxcbiAgICAgICAgICBnZW9jb2RpbmdMYXllcnMsXG4gICAgICAgICkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICBpZiAoZmlsdGVyUmVzdWx0cykge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSwgJ0Jpa2VSZW50YWxTdGF0aW9ucycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNlYXJjaFJlc3VsdHNQcm9taXNlID0gUHJvbWlzZS5hbGwoc2VhcmNoQ29tcG9uZW50cylcbiAgICAudGhlbihmbGF0dGVuKVxuICAgIC50aGVuKHVuaXFCeUxhYmVsKVxuICAgIC50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgc2VhcmNoZXMucmVzdWx0cyA9IHJlc3VsdHM7XG4gICAgfSlcbiAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgIHNlYXJjaGVzLmVycm9yID0gZXJyO1xuICAgIH0pO1xuICBzZWFyY2hSZXN1bHRzUHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICBjYWxsYmFjayh7XG4gICAgICAuLi5zZWFyY2hlcyxcbiAgICAgIHJlc3VsdHM6IHNvcnRTZWFyY2hSZXN1bHRzKGxpbmVSZWdleHAsIHNlYXJjaGVzLnJlc3VsdHMsIGlucHV0KSxcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNvbnN0IGRlYm91bmNlZFNlYXJjaCA9IGRlYm91bmNlKGdldFNlYXJjaFJlc3VsdHMsIDMwMCwge1xuICBsZWFkaW5nOiB0cnVlLFxufSk7XG5cbmV4cG9ydCBjb25zdCBleGVjdXRlU2VhcmNoID0gKFxuICB0YXJnZXRzLFxuICBzb3VyY2VzLFxuICB0cmFuc3BvcnRNb2RlLFxuICBzZWFyY2hDb250ZXh0LFxuICBmaWx0ZXJSZXN1bHRzLFxuICBnZW9jb2RpbmdTaXplLFxuICBkYXRhLFxuICBjYWxsYmFjayxcbiAgcGF0aE9wdHMsXG4gIHJlZlBvaW50LFxuKSA9PiB7XG4gIGNhbGxiYWNrKG51bGwpOyAvLyBUaGlzIG1lYW5zICd3ZSBhcmUgc2VhcmNoaW5nJ1xuICBkZWJvdW5jZWRTZWFyY2goXG4gICAgdGFyZ2V0cyxcbiAgICBzb3VyY2VzLFxuICAgIHRyYW5zcG9ydE1vZGUsXG4gICAgc2VhcmNoQ29udGV4dCxcbiAgICBmaWx0ZXJSZXN1bHRzLFxuICAgIGdlb2NvZGluZ1NpemUsXG4gICAgZGF0YSxcbiAgICBjYWxsYmFjayxcbiAgICBwYXRoT3B0cyxcbiAgICByZWZQb2ludCxcbiAgKTtcbn07XG4iLCIvLyEgbW9tZW50LmpzXG4vLyEgdmVyc2lvbiA6IDIuMjkuMVxuLy8hIGF1dGhvcnMgOiBUaW0gV29vZCwgSXNrcmVuIENoZXJuZXYsIE1vbWVudC5qcyBjb250cmlidXRvcnNcbi8vISBsaWNlbnNlIDogTUlUXG4vLyEgbW9tZW50anMuY29tXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDpcbiAgICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOlxuICAgIGdsb2JhbC5tb21lbnQgPSBmYWN0b3J5KClcbn0odGhpcywgKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIGhvb2tDYWxsYmFjaztcblxuICAgIGZ1bmN0aW9uIGhvb2tzKCkge1xuICAgICAgICByZXR1cm4gaG9va0NhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBpcyBkb25lIHRvIHJlZ2lzdGVyIHRoZSBtZXRob2QgY2FsbGVkIHdpdGggbW9tZW50KClcbiAgICAvLyB3aXRob3V0IGNyZWF0aW5nIGNpcmN1bGFyIGRlcGVuZGVuY2llcy5cbiAgICBmdW5jdGlvbiBzZXRIb29rQ2FsbGJhY2soY2FsbGJhY2spIHtcbiAgICAgICAgaG9va0NhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNBcnJheShpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBBcnJheSB8fFxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgQXJyYXldJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzT2JqZWN0KGlucHV0KSB7XG4gICAgICAgIC8vIElFOCB3aWxsIHRyZWF0IHVuZGVmaW5lZCBhbmQgbnVsbCBhcyBvYmplY3QgaWYgaXQgd2Fzbid0IGZvclxuICAgICAgICAvLyBpbnB1dCAhPSBudWxsXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpbnB1dCAhPSBudWxsICYmXG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBPYmplY3RdJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhc093blByb3AoYSwgYikge1xuICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsIGIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzT2JqZWN0RW1wdHkob2JqKSB7XG4gICAgICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikubGVuZ3RoID09PSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGs7XG4gICAgICAgICAgICBmb3IgKGsgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc093blByb3Aob2JqLCBrKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1VuZGVmaW5lZChpbnB1dCkge1xuICAgICAgICByZXR1cm4gaW5wdXQgPT09IHZvaWQgMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc051bWJlcihpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdHlwZW9mIGlucHV0ID09PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgTnVtYmVyXSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0RhdGUoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlucHV0IGluc3RhbmNlb2YgRGF0ZSB8fFxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgRGF0ZV0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFwKGFyciwgZm4pIHtcbiAgICAgICAgdmFyIHJlcyA9IFtdLFxuICAgICAgICAgICAgaTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyci5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgcmVzLnB1c2goZm4oYXJyW2ldLCBpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHRlbmQoYSwgYikge1xuICAgICAgICBmb3IgKHZhciBpIGluIGIpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGIsIGkpKSB7XG4gICAgICAgICAgICAgICAgYVtpXSA9IGJbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzT3duUHJvcChiLCAndG9TdHJpbmcnKSkge1xuICAgICAgICAgICAgYS50b1N0cmluZyA9IGIudG9TdHJpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzT3duUHJvcChiLCAndmFsdWVPZicpKSB7XG4gICAgICAgICAgICBhLnZhbHVlT2YgPSBiLnZhbHVlT2Y7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVVVEMoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsT3JVVEMoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QsIHRydWUpLnV0YygpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlZmF1bHRQYXJzaW5nRmxhZ3MoKSB7XG4gICAgICAgIC8vIFdlIG5lZWQgdG8gZGVlcCBjbG9uZSB0aGlzIG9iamVjdC5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVtcHR5OiBmYWxzZSxcbiAgICAgICAgICAgIHVudXNlZFRva2VuczogW10sXG4gICAgICAgICAgICB1bnVzZWRJbnB1dDogW10sXG4gICAgICAgICAgICBvdmVyZmxvdzogLTIsXG4gICAgICAgICAgICBjaGFyc0xlZnRPdmVyOiAwLFxuICAgICAgICAgICAgbnVsbElucHV0OiBmYWxzZSxcbiAgICAgICAgICAgIGludmFsaWRFcmE6IG51bGwsXG4gICAgICAgICAgICBpbnZhbGlkTW9udGg6IG51bGwsXG4gICAgICAgICAgICBpbnZhbGlkRm9ybWF0OiBmYWxzZSxcbiAgICAgICAgICAgIHVzZXJJbnZhbGlkYXRlZDogZmFsc2UsXG4gICAgICAgICAgICBpc286IGZhbHNlLFxuICAgICAgICAgICAgcGFyc2VkRGF0ZVBhcnRzOiBbXSxcbiAgICAgICAgICAgIGVyYTogbnVsbCxcbiAgICAgICAgICAgIG1lcmlkaWVtOiBudWxsLFxuICAgICAgICAgICAgcmZjMjgyMjogZmFsc2UsXG4gICAgICAgICAgICB3ZWVrZGF5TWlzbWF0Y2g6IGZhbHNlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFBhcnNpbmdGbGFncyhtKSB7XG4gICAgICAgIGlmIChtLl9wZiA9PSBudWxsKSB7XG4gICAgICAgICAgICBtLl9wZiA9IGRlZmF1bHRQYXJzaW5nRmxhZ3MoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbS5fcGY7XG4gICAgfVxuXG4gICAgdmFyIHNvbWU7XG4gICAgaWYgKEFycmF5LnByb3RvdHlwZS5zb21lKSB7XG4gICAgICAgIHNvbWUgPSBBcnJheS5wcm90b3R5cGUuc29tZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBzb21lID0gZnVuY3Rpb24gKGZ1bikge1xuICAgICAgICAgICAgdmFyIHQgPSBPYmplY3QodGhpcyksXG4gICAgICAgICAgICAgICAgbGVuID0gdC5sZW5ndGggPj4+IDAsXG4gICAgICAgICAgICAgICAgaTtcblxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgaW4gdCAmJiBmdW4uY2FsbCh0aGlzLCB0W2ldLCBpLCB0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1ZhbGlkKG0pIHtcbiAgICAgICAgaWYgKG0uX2lzVmFsaWQgPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGZsYWdzID0gZ2V0UGFyc2luZ0ZsYWdzKG0pLFxuICAgICAgICAgICAgICAgIHBhcnNlZFBhcnRzID0gc29tZS5jYWxsKGZsYWdzLnBhcnNlZERhdGVQYXJ0cywgZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkgIT0gbnVsbDtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBpc05vd1ZhbGlkID1cbiAgICAgICAgICAgICAgICAgICAgIWlzTmFOKG0uX2QuZ2V0VGltZSgpKSAmJlxuICAgICAgICAgICAgICAgICAgICBmbGFncy5vdmVyZmxvdyA8IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgIWZsYWdzLmVtcHR5ICYmXG4gICAgICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkRXJhICYmXG4gICAgICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkTW9udGggJiZcbiAgICAgICAgICAgICAgICAgICAgIWZsYWdzLmludmFsaWRXZWVrZGF5ICYmXG4gICAgICAgICAgICAgICAgICAgICFmbGFncy53ZWVrZGF5TWlzbWF0Y2ggJiZcbiAgICAgICAgICAgICAgICAgICAgIWZsYWdzLm51bGxJbnB1dCAmJlxuICAgICAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZEZvcm1hdCAmJlxuICAgICAgICAgICAgICAgICAgICAhZmxhZ3MudXNlckludmFsaWRhdGVkICYmXG4gICAgICAgICAgICAgICAgICAgICghZmxhZ3MubWVyaWRpZW0gfHwgKGZsYWdzLm1lcmlkaWVtICYmIHBhcnNlZFBhcnRzKSk7XG5cbiAgICAgICAgICAgIGlmIChtLl9zdHJpY3QpIHtcbiAgICAgICAgICAgICAgICBpc05vd1ZhbGlkID1cbiAgICAgICAgICAgICAgICAgICAgaXNOb3dWYWxpZCAmJlxuICAgICAgICAgICAgICAgICAgICBmbGFncy5jaGFyc0xlZnRPdmVyID09PSAwICYmXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLnVudXNlZFRva2Vucy5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYmlnSG91ciA9PT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoT2JqZWN0LmlzRnJvemVuID09IG51bGwgfHwgIU9iamVjdC5pc0Zyb3plbihtKSkge1xuICAgICAgICAgICAgICAgIG0uX2lzVmFsaWQgPSBpc05vd1ZhbGlkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNOb3dWYWxpZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbS5faXNWYWxpZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnZhbGlkKGZsYWdzKSB7XG4gICAgICAgIHZhciBtID0gY3JlYXRlVVRDKE5hTik7XG4gICAgICAgIGlmIChmbGFncyAhPSBudWxsKSB7XG4gICAgICAgICAgICBleHRlbmQoZ2V0UGFyc2luZ0ZsYWdzKG0pLCBmbGFncyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MobSkudXNlckludmFsaWRhdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIC8vIFBsdWdpbnMgdGhhdCBhZGQgcHJvcGVydGllcyBzaG91bGQgYWxzbyBhZGQgdGhlIGtleSBoZXJlIChudWxsIHZhbHVlKSxcbiAgICAvLyBzbyB3ZSBjYW4gcHJvcGVybHkgY2xvbmUgb3Vyc2VsdmVzLlxuICAgIHZhciBtb21lbnRQcm9wZXJ0aWVzID0gKGhvb2tzLm1vbWVudFByb3BlcnRpZXMgPSBbXSksXG4gICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcblxuICAgIGZ1bmN0aW9uIGNvcHlDb25maWcodG8sIGZyb20pIHtcbiAgICAgICAgdmFyIGksIHByb3AsIHZhbDtcblxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2lzQU1vbWVudE9iamVjdCkpIHtcbiAgICAgICAgICAgIHRvLl9pc0FNb21lbnRPYmplY3QgPSBmcm9tLl9pc0FNb21lbnRPYmplY3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9pKSkge1xuICAgICAgICAgICAgdG8uX2kgPSBmcm9tLl9pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fZikpIHtcbiAgICAgICAgICAgIHRvLl9mID0gZnJvbS5fZjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2wpKSB7XG4gICAgICAgICAgICB0by5fbCA9IGZyb20uX2w7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9zdHJpY3QpKSB7XG4gICAgICAgICAgICB0by5fc3RyaWN0ID0gZnJvbS5fc3RyaWN0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fdHptKSkge1xuICAgICAgICAgICAgdG8uX3R6bSA9IGZyb20uX3R6bTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2lzVVRDKSkge1xuICAgICAgICAgICAgdG8uX2lzVVRDID0gZnJvbS5faXNVVEM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9vZmZzZXQpKSB7XG4gICAgICAgICAgICB0by5fb2Zmc2V0ID0gZnJvbS5fb2Zmc2V0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fcGYpKSB7XG4gICAgICAgICAgICB0by5fcGYgPSBnZXRQYXJzaW5nRmxhZ3MoZnJvbSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9sb2NhbGUpKSB7XG4gICAgICAgICAgICB0by5fbG9jYWxlID0gZnJvbS5fbG9jYWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vbWVudFByb3BlcnRpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG1vbWVudFByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwcm9wID0gbW9tZW50UHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgICAgICB2YWwgPSBmcm9tW3Byb3BdO1xuICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQodmFsKSkge1xuICAgICAgICAgICAgICAgICAgICB0b1twcm9wXSA9IHZhbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdG87XG4gICAgfVxuXG4gICAgLy8gTW9tZW50IHByb3RvdHlwZSBvYmplY3RcbiAgICBmdW5jdGlvbiBNb21lbnQoY29uZmlnKSB7XG4gICAgICAgIGNvcHlDb25maWcodGhpcywgY29uZmlnKTtcbiAgICAgICAgdGhpcy5fZCA9IG5ldyBEYXRlKGNvbmZpZy5fZCAhPSBudWxsID8gY29uZmlnLl9kLmdldFRpbWUoKSA6IE5hTik7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2QgPSBuZXcgRGF0ZShOYU4pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFByZXZlbnQgaW5maW5pdGUgbG9vcCBpbiBjYXNlIHVwZGF0ZU9mZnNldCBjcmVhdGVzIG5ldyBtb21lbnRcbiAgICAgICAgLy8gb2JqZWN0cy5cbiAgICAgICAgaWYgKHVwZGF0ZUluUHJvZ3Jlc3MgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB1cGRhdGVJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTW9tZW50KG9iaikge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgb2JqIGluc3RhbmNlb2YgTW9tZW50IHx8IChvYmogIT0gbnVsbCAmJiBvYmouX2lzQU1vbWVudE9iamVjdCAhPSBudWxsKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdhcm4obXNnKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGhvb2tzLnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncyA9PT0gZmFsc2UgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgY29uc29sZS53YXJuXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdEZXByZWNhdGlvbiB3YXJuaW5nOiAnICsgbXNnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlcHJlY2F0ZShtc2csIGZuKSB7XG4gICAgICAgIHZhciBmaXJzdFRpbWUgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiBleHRlbmQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyKG51bGwsIG1zZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmlyc3RUaW1lKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgICAgICAgICAgICAgYXJnLFxuICAgICAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgICAgICBrZXk7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBhcmcgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbaV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgKz0gJ1xcblsnICsgaSArICddICc7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGtleSBpbiBhcmd1bWVudHNbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzT3duUHJvcChhcmd1bWVudHNbMF0sIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnICs9IGtleSArICc6ICcgKyBhcmd1bWVudHNbMF1ba2V5XSArICcsICc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJnLnNsaWNlKDAsIC0yKTsgLy8gUmVtb3ZlIHRyYWlsaW5nIGNvbW1hIGFuZCBzcGFjZVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChhcmcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgICAgICAgICBtc2cgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbkFyZ3VtZW50czogJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzKS5qb2luKCcnKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRXJyb3IoKS5zdGFja1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZmlyc3RUaW1lID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgZm4pO1xuICAgIH1cblxuICAgIHZhciBkZXByZWNhdGlvbnMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGRlcHJlY2F0ZVNpbXBsZShuYW1lLCBtc2cpIHtcbiAgICAgICAgaWYgKGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciAhPSBudWxsKSB7XG4gICAgICAgICAgICBob29rcy5kZXByZWNhdGlvbkhhbmRsZXIobmFtZSwgbXNnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRlcHJlY2F0aW9uc1tuYW1lXSkge1xuICAgICAgICAgICAgd2Fybihtc2cpO1xuICAgICAgICAgICAgZGVwcmVjYXRpb25zW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhvb2tzLnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncyA9IGZhbHNlO1xuICAgIGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciA9IG51bGw7XG5cbiAgICBmdW5jdGlvbiBpc0Z1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAodHlwZW9mIEZ1bmN0aW9uICE9PSAndW5kZWZpbmVkJyAmJiBpbnB1dCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB8fFxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldChjb25maWcpIHtcbiAgICAgICAgdmFyIHByb3AsIGk7XG4gICAgICAgIGZvciAoaSBpbiBjb25maWcpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGNvbmZpZywgaSkpIHtcbiAgICAgICAgICAgICAgICBwcm9wID0gY29uZmlnW2ldO1xuICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbaV0gPSBwcm9wO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbJ18nICsgaV0gPSBwcm9wO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jb25maWcgPSBjb25maWc7XG4gICAgICAgIC8vIExlbmllbnQgb3JkaW5hbCBwYXJzaW5nIGFjY2VwdHMganVzdCBhIG51bWJlciBpbiBhZGRpdGlvbiB0b1xuICAgICAgICAvLyBudW1iZXIgKyAocG9zc2libHkpIHN0dWZmIGNvbWluZyBmcm9tIF9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlLlxuICAgICAgICAvLyBUT0RPOiBSZW1vdmUgXCJvcmRpbmFsUGFyc2VcIiBmYWxsYmFjayBpbiBuZXh0IG1ham9yIHJlbGVhc2UuXG4gICAgICAgIHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICh0aGlzLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlLnNvdXJjZSB8fCB0aGlzLl9vcmRpbmFsUGFyc2Uuc291cmNlKSArXG4gICAgICAgICAgICAgICAgJ3wnICtcbiAgICAgICAgICAgICAgICAvXFxkezEsMn0vLnNvdXJjZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNoaWxkQ29uZmlnKSB7XG4gICAgICAgIHZhciByZXMgPSBleHRlbmQoe30sIHBhcmVudENvbmZpZyksXG4gICAgICAgICAgICBwcm9wO1xuICAgICAgICBmb3IgKHByb3AgaW4gY2hpbGRDb25maWcpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGNoaWxkQ29uZmlnLCBwcm9wKSkge1xuICAgICAgICAgICAgICAgIGlmIChpc09iamVjdChwYXJlbnRDb25maWdbcHJvcF0pICYmIGlzT2JqZWN0KGNoaWxkQ29uZmlnW3Byb3BdKSkge1xuICAgICAgICAgICAgICAgICAgICByZXNbcHJvcF0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKHJlc1twcm9wXSwgcGFyZW50Q29uZmlnW3Byb3BdKTtcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKHJlc1twcm9wXSwgY2hpbGRDb25maWdbcHJvcF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGRDb25maWdbcHJvcF0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXNbcHJvcF0gPSBjaGlsZENvbmZpZ1twcm9wXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmVzW3Byb3BdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKHByb3AgaW4gcGFyZW50Q29uZmlnKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgaGFzT3duUHJvcChwYXJlbnRDb25maWcsIHByb3ApICYmXG4gICAgICAgICAgICAgICAgIWhhc093blByb3AoY2hpbGRDb25maWcsIHByb3ApICYmXG4gICAgICAgICAgICAgICAgaXNPYmplY3QocGFyZW50Q29uZmlnW3Byb3BdKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIGNoYW5nZXMgdG8gcHJvcGVydGllcyBkb24ndCBtb2RpZnkgcGFyZW50IGNvbmZpZ1xuICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IGV4dGVuZCh7fSwgcmVzW3Byb3BdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIExvY2FsZShjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnNldChjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGtleXM7XG5cbiAgICBpZiAoT2JqZWN0LmtleXMpIHtcbiAgICAgICAga2V5cyA9IE9iamVjdC5rZXlzO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGtleXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgICAgICByZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoaSBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzT3duUHJvcChvYmosIGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKGkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRDYWxlbmRhciA9IHtcbiAgICAgICAgc2FtZURheTogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW1RvbW9ycm93IGF0XSBMVCcsXG4gICAgICAgIG5leHRXZWVrOiAnZGRkZCBbYXRdIExUJyxcbiAgICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgbGFzdFdlZWs6ICdbTGFzdF0gZGRkZCBbYXRdIExUJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gY2FsZW5kYXIoa2V5LCBtb20sIG5vdykge1xuICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fY2FsZW5kYXJba2V5XSB8fCB0aGlzLl9jYWxlbmRhclsnc2FtZUVsc2UnXTtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24ob3V0cHV0KSA/IG91dHB1dC5jYWxsKG1vbSwgbm93KSA6IG91dHB1dDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB6ZXJvRmlsbChudW1iZXIsIHRhcmdldExlbmd0aCwgZm9yY2VTaWduKSB7XG4gICAgICAgIHZhciBhYnNOdW1iZXIgPSAnJyArIE1hdGguYWJzKG51bWJlciksXG4gICAgICAgICAgICB6ZXJvc1RvRmlsbCA9IHRhcmdldExlbmd0aCAtIGFic051bWJlci5sZW5ndGgsXG4gICAgICAgICAgICBzaWduID0gbnVtYmVyID49IDA7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoc2lnbiA/IChmb3JjZVNpZ24gPyAnKycgOiAnJykgOiAnLScpICtcbiAgICAgICAgICAgIE1hdGgucG93KDEwLCBNYXRoLm1heCgwLCB6ZXJvc1RvRmlsbCkpLnRvU3RyaW5nKCkuc3Vic3RyKDEpICtcbiAgICAgICAgICAgIGFic051bWJlclxuICAgICAgICApO1xuICAgIH1cblxuICAgIHZhciBmb3JtYXR0aW5nVG9rZW5zID0gLyhcXFtbXlxcW10qXFxdKXwoXFxcXCk/KFtIaF1tbShzcyk/fE1vfE1NP00/TT98RG98REREb3xERD9EP0Q/fGRkZD9kP3xkbz98d1tvfHddP3xXW298V10/fFFvP3xOezEsNX18WVlZWVlZfFlZWVlZfFlZWVl8WVl8eXsyLDR9fHlvP3xnZyhnZ2c/KT98R0coR0dHPyk/fGV8RXxhfEF8aGg/fEhIP3xraz98bW0/fHNzP3xTezEsOX18eHxYfHp6P3xaWj98LikvZyxcbiAgICAgICAgbG9jYWxGb3JtYXR0aW5nVG9rZW5zID0gLyhcXFtbXlxcW10qXFxdKXwoXFxcXCk/KExUU3xMVHxMTD9MP0w/fGx7MSw0fSkvZyxcbiAgICAgICAgZm9ybWF0RnVuY3Rpb25zID0ge30sXG4gICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zID0ge307XG5cbiAgICAvLyB0b2tlbjogICAgJ00nXG4gICAgLy8gcGFkZGVkOiAgIFsnTU0nLCAyXVxuICAgIC8vIG9yZGluYWw6ICAnTW8nXG4gICAgLy8gY2FsbGJhY2s6IGZ1bmN0aW9uICgpIHsgdGhpcy5tb250aCgpICsgMSB9XG4gICAgZnVuY3Rpb24gYWRkRm9ybWF0VG9rZW4odG9rZW4sIHBhZGRlZCwgb3JkaW5hbCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZ1bmMgPSBjYWxsYmFjaztcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGJhY2tdKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnNbdG9rZW5dID0gZnVuYztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFkZGVkKSB7XG4gICAgICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9uc1twYWRkZWRbMF1dID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB6ZXJvRmlsbChmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHBhZGRlZFsxXSwgcGFkZGVkWzJdKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9yZGluYWwpIHtcbiAgICAgICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zW29yZGluYWxdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5vcmRpbmFsKFxuICAgICAgICAgICAgICAgICAgICBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgICAgICAgICAgICAgIHRva2VuXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW1vdmVGb3JtYXR0aW5nVG9rZW5zKGlucHV0KSB7XG4gICAgICAgIGlmIChpbnB1dC5tYXRjaCgvXFxbW1xcc1xcU10vKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL15cXFt8XFxdJC9nLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL1xcXFwvZywgJycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VGb3JtYXRGdW5jdGlvbihmb3JtYXQpIHtcbiAgICAgICAgdmFyIGFycmF5ID0gZm9ybWF0Lm1hdGNoKGZvcm1hdHRpbmdUb2tlbnMpLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGxlbmd0aDtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBhcnJheS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGZvcm1hdFRva2VuRnVuY3Rpb25zW2FycmF5W2ldXSkge1xuICAgICAgICAgICAgICAgIGFycmF5W2ldID0gZm9ybWF0VG9rZW5GdW5jdGlvbnNbYXJyYXlbaV1dO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHJlbW92ZUZvcm1hdHRpbmdUb2tlbnMoYXJyYXlbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtb20pIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSAnJyxcbiAgICAgICAgICAgICAgICBpO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IGlzRnVuY3Rpb24oYXJyYXlbaV0pXG4gICAgICAgICAgICAgICAgICAgID8gYXJyYXlbaV0uY2FsbChtb20sIGZvcm1hdClcbiAgICAgICAgICAgICAgICAgICAgOiBhcnJheVtpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gZm9ybWF0IGRhdGUgdXNpbmcgbmF0aXZlIGRhdGUgb2JqZWN0XG4gICAgZnVuY3Rpb24gZm9ybWF0TW9tZW50KG0sIGZvcm1hdCkge1xuICAgICAgICBpZiAoIW0uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbS5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcm1hdCA9IGV4cGFuZEZvcm1hdChmb3JtYXQsIG0ubG9jYWxlRGF0YSgpKTtcbiAgICAgICAgZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0gPVxuICAgICAgICAgICAgZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0gfHwgbWFrZUZvcm1hdEZ1bmN0aW9uKGZvcm1hdCk7XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdKG0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4cGFuZEZvcm1hdChmb3JtYXQsIGxvY2FsZSkge1xuICAgICAgICB2YXIgaSA9IDU7XG5cbiAgICAgICAgZnVuY3Rpb24gcmVwbGFjZUxvbmdEYXRlRm9ybWF0VG9rZW5zKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLmxvbmdEYXRlRm9ybWF0KGlucHV0KSB8fCBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy5sYXN0SW5kZXggPSAwO1xuICAgICAgICB3aGlsZSAoaSA+PSAwICYmIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKFxuICAgICAgICAgICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2VucyxcbiAgICAgICAgICAgICAgICByZXBsYWNlTG9uZ0RhdGVGb3JtYXRUb2tlbnNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgIGkgLT0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb25nRGF0ZUZvcm1hdCA9IHtcbiAgICAgICAgTFRTOiAnaDptbTpzcyBBJyxcbiAgICAgICAgTFQ6ICdoOm1tIEEnLFxuICAgICAgICBMOiAnTU0vREQvWVlZWScsXG4gICAgICAgIExMOiAnTU1NTSBELCBZWVlZJyxcbiAgICAgICAgTExMOiAnTU1NTSBELCBZWVlZIGg6bW0gQScsXG4gICAgICAgIExMTEw6ICdkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gbG9uZ0RhdGVGb3JtYXQoa2V5KSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldLFxuICAgICAgICAgICAgZm9ybWF0VXBwZXIgPSB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXkudG9VcHBlckNhc2UoKV07XG5cbiAgICAgICAgaWYgKGZvcm1hdCB8fCAhZm9ybWF0VXBwZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldID0gZm9ybWF0VXBwZXJcbiAgICAgICAgICAgIC5tYXRjaChmb3JtYXR0aW5nVG9rZW5zKVxuICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAodG9rKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdNTU1NJyB8fFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdNTScgfHxcbiAgICAgICAgICAgICAgICAgICAgdG9rID09PSAnREQnIHx8XG4gICAgICAgICAgICAgICAgICAgIHRvayA9PT0gJ2RkZGQnXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2suc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0b2s7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0SW52YWxpZERhdGUgPSAnSW52YWxpZCBkYXRlJztcblxuICAgIGZ1bmN0aW9uIGludmFsaWREYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52YWxpZERhdGU7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRPcmRpbmFsID0gJyVkJyxcbiAgICAgICAgZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UgPSAvXFxkezEsMn0vO1xuXG4gICAgZnVuY3Rpb24gb3JkaW5hbChudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29yZGluYWwucmVwbGFjZSgnJWQnLCBudW1iZXIpO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0UmVsYXRpdmVUaW1lID0ge1xuICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgIHBhc3Q6ICclcyBhZ28nLFxuICAgICAgICBzOiAnYSBmZXcgc2Vjb25kcycsXG4gICAgICAgIHNzOiAnJWQgc2Vjb25kcycsXG4gICAgICAgIG06ICdhIG1pbnV0ZScsXG4gICAgICAgIG1tOiAnJWQgbWludXRlcycsXG4gICAgICAgIGg6ICdhbiBob3VyJyxcbiAgICAgICAgaGg6ICclZCBob3VycycsXG4gICAgICAgIGQ6ICdhIGRheScsXG4gICAgICAgIGRkOiAnJWQgZGF5cycsXG4gICAgICAgIHc6ICdhIHdlZWsnLFxuICAgICAgICB3dzogJyVkIHdlZWtzJyxcbiAgICAgICAgTTogJ2EgbW9udGgnLFxuICAgICAgICBNTTogJyVkIG1vbnRocycsXG4gICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICB5eTogJyVkIHllYXJzJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fcmVsYXRpdmVUaW1lW3N0cmluZ107XG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKG91dHB1dClcbiAgICAgICAgICAgID8gb3V0cHV0KG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSlcbiAgICAgICAgICAgIDogb3V0cHV0LnJlcGxhY2UoLyVkL2ksIG51bWJlcik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFzdEZ1dHVyZShkaWZmLCBvdXRwdXQpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHRoaXMuX3JlbGF0aXZlVGltZVtkaWZmID4gMCA/ICdmdXR1cmUnIDogJ3Bhc3QnXTtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oZm9ybWF0KSA/IGZvcm1hdChvdXRwdXQpIDogZm9ybWF0LnJlcGxhY2UoLyVzL2ksIG91dHB1dCk7XG4gICAgfVxuXG4gICAgdmFyIGFsaWFzZXMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFVuaXRBbGlhcyh1bml0LCBzaG9ydGhhbmQpIHtcbiAgICAgICAgdmFyIGxvd2VyQ2FzZSA9IHVuaXQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgYWxpYXNlc1tsb3dlckNhc2VdID0gYWxpYXNlc1tsb3dlckNhc2UgKyAncyddID0gYWxpYXNlc1tzaG9ydGhhbmRdID0gdW5pdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBub3JtYWxpemVVbml0cyh1bml0cykge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHVuaXRzID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgPyBhbGlhc2VzW3VuaXRzXSB8fCBhbGlhc2VzW3VuaXRzLnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBub3JtYWxpemVPYmplY3RVbml0cyhpbnB1dE9iamVjdCkge1xuICAgICAgICB2YXIgbm9ybWFsaXplZElucHV0ID0ge30sXG4gICAgICAgICAgICBub3JtYWxpemVkUHJvcCxcbiAgICAgICAgICAgIHByb3A7XG5cbiAgICAgICAgZm9yIChwcm9wIGluIGlucHV0T2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcChpbnB1dE9iamVjdCwgcHJvcCkpIHtcbiAgICAgICAgICAgICAgICBub3JtYWxpemVkUHJvcCA9IG5vcm1hbGl6ZVVuaXRzKHByb3ApO1xuICAgICAgICAgICAgICAgIGlmIChub3JtYWxpemVkUHJvcCkge1xuICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkSW5wdXRbbm9ybWFsaXplZFByb3BdID0gaW5wdXRPYmplY3RbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRJbnB1dDtcbiAgICB9XG5cbiAgICB2YXIgcHJpb3JpdGllcyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gYWRkVW5pdFByaW9yaXR5KHVuaXQsIHByaW9yaXR5KSB7XG4gICAgICAgIHByaW9yaXRpZXNbdW5pdF0gPSBwcmlvcml0eTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRQcmlvcml0aXplZFVuaXRzKHVuaXRzT2JqKSB7XG4gICAgICAgIHZhciB1bml0cyA9IFtdLFxuICAgICAgICAgICAgdTtcbiAgICAgICAgZm9yICh1IGluIHVuaXRzT2JqKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcCh1bml0c09iaiwgdSkpIHtcbiAgICAgICAgICAgICAgICB1bml0cy5wdXNoKHsgdW5pdDogdSwgcHJpb3JpdHk6IHByaW9yaXRpZXNbdV0gfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGEucHJpb3JpdHkgLSBiLnByaW9yaXR5O1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHVuaXRzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTGVhcFllYXIoeWVhcikge1xuICAgICAgICByZXR1cm4gKHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDApIHx8IHllYXIgJSA0MDAgPT09IDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWJzRmxvb3IobnVtYmVyKSB7XG4gICAgICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICAgICAgICAvLyAtMCAtPiAwXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG51bWJlcikgfHwgMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0ludChhcmd1bWVudEZvckNvZXJjaW9uKSB7XG4gICAgICAgIHZhciBjb2VyY2VkTnVtYmVyID0gK2FyZ3VtZW50Rm9yQ29lcmNpb24sXG4gICAgICAgICAgICB2YWx1ZSA9IDA7XG5cbiAgICAgICAgaWYgKGNvZXJjZWROdW1iZXIgIT09IDAgJiYgaXNGaW5pdGUoY29lcmNlZE51bWJlcikpIHtcbiAgICAgICAgICAgIHZhbHVlID0gYWJzRmxvb3IoY29lcmNlZE51bWJlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUdldFNldCh1bml0LCBrZWVwVGltZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHNldCQxKHRoaXMsIHVuaXQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywga2VlcFRpbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsIHVuaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldChtb20sIHVuaXQpIHtcbiAgICAgICAgcmV0dXJuIG1vbS5pc1ZhbGlkKClcbiAgICAgICAgICAgID8gbW9tLl9kWydnZXQnICsgKG1vbS5faXNVVEMgPyAnVVRDJyA6ICcnKSArIHVuaXRdKClcbiAgICAgICAgICAgIDogTmFOO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldCQxKG1vbSwgdW5pdCwgdmFsdWUpIHtcbiAgICAgICAgaWYgKG1vbS5pc1ZhbGlkKCkgJiYgIWlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHVuaXQgPT09ICdGdWxsWWVhcicgJiZcbiAgICAgICAgICAgICAgICBpc0xlYXBZZWFyKG1vbS55ZWFyKCkpICYmXG4gICAgICAgICAgICAgICAgbW9tLm1vbnRoKCkgPT09IDEgJiZcbiAgICAgICAgICAgICAgICBtb20uZGF0ZSgpID09PSAyOVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0b0ludCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgbW9tLl9kWydzZXQnICsgKG1vbS5faXNVVEMgPyAnVVRDJyA6ICcnKSArIHVuaXRdKFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgbW9tLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgIGRheXNJbk1vbnRoKHZhbHVlLCBtb20ubW9udGgoKSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtb20uX2RbJ3NldCcgKyAobW9tLl9pc1VUQyA/ICdVVEMnIDogJycpICsgdW5pdF0odmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gc3RyaW5nR2V0KHVuaXRzKSB7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbih0aGlzW3VuaXRzXSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzW3VuaXRzXSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0cmluZ1NldCh1bml0cywgdmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB1bml0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHVuaXRzID0gbm9ybWFsaXplT2JqZWN0VW5pdHModW5pdHMpO1xuICAgICAgICAgICAgdmFyIHByaW9yaXRpemVkID0gZ2V0UHJpb3JpdGl6ZWRVbml0cyh1bml0cyksXG4gICAgICAgICAgICAgICAgaTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcmlvcml0aXplZC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXNbcHJpb3JpdGl6ZWRbaV0udW5pdF0odW5pdHNbcHJpb3JpdGl6ZWRbaV0udW5pdF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbih0aGlzW3VuaXRzXSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1t1bml0c10odmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciBtYXRjaDEgPSAvXFxkLywgLy8gICAgICAgMCAtIDlcbiAgICAgICAgbWF0Y2gyID0gL1xcZFxcZC8sIC8vICAgICAgMDAgLSA5OVxuICAgICAgICBtYXRjaDMgPSAvXFxkezN9LywgLy8gICAgIDAwMCAtIDk5OVxuICAgICAgICBtYXRjaDQgPSAvXFxkezR9LywgLy8gICAgMDAwMCAtIDk5OTlcbiAgICAgICAgbWF0Y2g2ID0gL1srLV0/XFxkezZ9LywgLy8gLTk5OTk5OSAtIDk5OTk5OVxuICAgICAgICBtYXRjaDF0bzIgPSAvXFxkXFxkPy8sIC8vICAgICAgIDAgLSA5OVxuICAgICAgICBtYXRjaDN0bzQgPSAvXFxkXFxkXFxkXFxkPy8sIC8vICAgICA5OTkgLSA5OTk5XG4gICAgICAgIG1hdGNoNXRvNiA9IC9cXGRcXGRcXGRcXGRcXGRcXGQ/LywgLy8gICA5OTk5OSAtIDk5OTk5OVxuICAgICAgICBtYXRjaDF0bzMgPSAvXFxkezEsM30vLCAvLyAgICAgICAwIC0gOTk5XG4gICAgICAgIG1hdGNoMXRvNCA9IC9cXGR7MSw0fS8sIC8vICAgICAgIDAgLSA5OTk5XG4gICAgICAgIG1hdGNoMXRvNiA9IC9bKy1dP1xcZHsxLDZ9LywgLy8gLTk5OTk5OSAtIDk5OTk5OVxuICAgICAgICBtYXRjaFVuc2lnbmVkID0gL1xcZCsvLCAvLyAgICAgICAwIC0gaW5mXG4gICAgICAgIG1hdGNoU2lnbmVkID0gL1srLV0/XFxkKy8sIC8vICAgIC1pbmYgLSBpbmZcbiAgICAgICAgbWF0Y2hPZmZzZXQgPSAvWnxbKy1dXFxkXFxkOj9cXGRcXGQvZ2ksIC8vICswMDowMCAtMDA6MDAgKzAwMDAgLTAwMDAgb3IgWlxuICAgICAgICBtYXRjaFNob3J0T2Zmc2V0ID0gL1p8WystXVxcZFxcZCg/Ojo/XFxkXFxkKT8vZ2ksIC8vICswMCAtMDAgKzAwOjAwIC0wMDowMCArMDAwMCAtMDAwMCBvciBaXG4gICAgICAgIG1hdGNoVGltZXN0YW1wID0gL1srLV0/XFxkKyhcXC5cXGR7MSwzfSk/LywgLy8gMTIzNDU2Nzg5IDEyMzQ1Njc4OS4xMjNcbiAgICAgICAgLy8gYW55IHdvcmQgKG9yIHR3bykgY2hhcmFjdGVycyBvciBudW1iZXJzIGluY2x1ZGluZyB0d28vdGhyZWUgd29yZCBtb250aCBpbiBhcmFiaWMuXG4gICAgICAgIC8vIGluY2x1ZGVzIHNjb3R0aXNoIGdhZWxpYyB0d28gd29yZCBhbmQgaHlwaGVuYXRlZCBtb250aHNcbiAgICAgICAgbWF0Y2hXb3JkID0gL1swLTldezAsMjU2fVsnYS16XFx1MDBBMC1cXHUwNUZGXFx1MDcwMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRjA3XFx1RkYxMC1cXHVGRkVGXXsxLDI1Nn18W1xcdTA2MDAtXFx1MDZGRlxcL117MSwyNTZ9KFxccyo/W1xcdTA2MDAtXFx1MDZGRl17MSwyNTZ9KXsxLDJ9L2ksXG4gICAgICAgIHJlZ2V4ZXM7XG5cbiAgICByZWdleGVzID0ge307XG5cbiAgICBmdW5jdGlvbiBhZGRSZWdleFRva2VuKHRva2VuLCByZWdleCwgc3RyaWN0UmVnZXgpIHtcbiAgICAgICAgcmVnZXhlc1t0b2tlbl0gPSBpc0Z1bmN0aW9uKHJlZ2V4KVxuICAgICAgICAgICAgPyByZWdleFxuICAgICAgICAgICAgOiBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZURhdGEpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpc1N0cmljdCAmJiBzdHJpY3RSZWdleCA/IHN0cmljdFJlZ2V4IDogcmVnZXg7XG4gICAgICAgICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UGFyc2VSZWdleEZvclRva2VuKHRva2VuLCBjb25maWcpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHJlZ2V4ZXMsIHRva2VuKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAodW5lc2NhcGVGb3JtYXQodG9rZW4pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZWdleGVzW3Rva2VuXShjb25maWcuX3N0cmljdCwgY29uZmlnLl9sb2NhbGUpO1xuICAgIH1cblxuICAgIC8vIENvZGUgZnJvbSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzM1NjE0OTMvaXMtdGhlcmUtYS1yZWdleHAtZXNjYXBlLWZ1bmN0aW9uLWluLWphdmFzY3JpcHRcbiAgICBmdW5jdGlvbiB1bmVzY2FwZUZvcm1hdChzKSB7XG4gICAgICAgIHJldHVybiByZWdleEVzY2FwZShcbiAgICAgICAgICAgIHNcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgnXFxcXCcsICcnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcKFxcWyl8XFxcXChcXF0pfFxcWyhbXlxcXVxcW10qKVxcXXxcXFxcKC4pL2csIGZ1bmN0aW9uIChcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZCxcbiAgICAgICAgICAgICAgICAgICAgcDEsXG4gICAgICAgICAgICAgICAgICAgIHAyLFxuICAgICAgICAgICAgICAgICAgICBwMyxcbiAgICAgICAgICAgICAgICAgICAgcDRcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAxIHx8IHAyIHx8IHAzIHx8IHA0O1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVnZXhFc2NhcGUocykge1xuICAgICAgICByZXR1cm4gcy5yZXBsYWNlKC9bLVxcL1xcXFxeJCorPy4oKXxbXFxde31dL2csICdcXFxcJCYnKTtcbiAgICB9XG5cbiAgICB2YXIgdG9rZW5zID0ge307XG5cbiAgICBmdW5jdGlvbiBhZGRQYXJzZVRva2VuKHRva2VuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGZ1bmMgPSBjYWxsYmFjaztcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRva2VuID0gW3Rva2VuXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNOdW1iZXIoY2FsbGJhY2spKSB7XG4gICAgICAgICAgICBmdW5jID0gZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICAgICAgICAgIGFycmF5W2NhbGxiYWNrXSA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRva2VuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0b2tlbnNbdG9rZW5baV1dID0gZnVuYztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFdlZWtQYXJzZVRva2VuKHRva2VuLCBjYWxsYmFjaykge1xuICAgICAgICBhZGRQYXJzZVRva2VuKHRva2VuLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgICAgICBjb25maWcuX3cgPSBjb25maWcuX3cgfHwge307XG4gICAgICAgICAgICBjYWxsYmFjayhpbnB1dCwgY29uZmlnLl93LCBjb25maWcsIHRva2VuKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkVGltZVRvQXJyYXlGcm9tVG9rZW4odG9rZW4sIGlucHV0LCBjb25maWcpIHtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwgJiYgaGFzT3duUHJvcCh0b2tlbnMsIHRva2VuKSkge1xuICAgICAgICAgICAgdG9rZW5zW3Rva2VuXShpbnB1dCwgY29uZmlnLl9hLCBjb25maWcsIHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBZRUFSID0gMCxcbiAgICAgICAgTU9OVEggPSAxLFxuICAgICAgICBEQVRFID0gMixcbiAgICAgICAgSE9VUiA9IDMsXG4gICAgICAgIE1JTlVURSA9IDQsXG4gICAgICAgIFNFQ09ORCA9IDUsXG4gICAgICAgIE1JTExJU0VDT05EID0gNixcbiAgICAgICAgV0VFSyA9IDcsXG4gICAgICAgIFdFRUtEQVkgPSA4O1xuXG4gICAgZnVuY3Rpb24gbW9kKG4sIHgpIHtcbiAgICAgICAgcmV0dXJuICgobiAlIHgpICsgeCkgJSB4O1xuICAgIH1cblxuICAgIHZhciBpbmRleE9mO1xuXG4gICAgaWYgKEFycmF5LnByb3RvdHlwZS5pbmRleE9mKSB7XG4gICAgICAgIGluZGV4T2YgPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZjtcbiAgICB9IGVsc2Uge1xuICAgICAgICBpbmRleE9mID0gZnVuY3Rpb24gKG8pIHtcbiAgICAgICAgICAgIC8vIEkga25vd1xuICAgICAgICAgICAgdmFyIGk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzW2ldID09PSBvKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkYXlzSW5Nb250aCh5ZWFyLCBtb250aCkge1xuICAgICAgICBpZiAoaXNOYU4oeWVhcikgfHwgaXNOYU4obW9udGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciBtb2RNb250aCA9IG1vZChtb250aCwgMTIpO1xuICAgICAgICB5ZWFyICs9IChtb250aCAtIG1vZE1vbnRoKSAvIDEyO1xuICAgICAgICByZXR1cm4gbW9kTW9udGggPT09IDFcbiAgICAgICAgICAgID8gaXNMZWFwWWVhcih5ZWFyKVxuICAgICAgICAgICAgICAgID8gMjlcbiAgICAgICAgICAgICAgICA6IDI4XG4gICAgICAgICAgICA6IDMxIC0gKChtb2RNb250aCAlIDcpICUgMik7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ00nLCBbJ01NJywgMl0sICdNbycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9udGgoKSArIDE7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTU1NJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzU2hvcnQodGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdNTU1NJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzKHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ21vbnRoJywgJ00nKTtcblxuICAgIC8vIFBSSU9SSVRZXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ21vbnRoJywgOCk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdNJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdNTScsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdNTU0nLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLm1vbnRoc1Nob3J0UmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ01NTU0nLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLm1vbnRoc1JlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydNJywgJ01NJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbTU9OVEhdID0gdG9JbnQoaW5wdXQpIC0gMTtcbiAgICB9KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydNTU0nLCAnTU1NTSddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHZhciBtb250aCA9IGNvbmZpZy5fbG9jYWxlLm1vbnRoc1BhcnNlKGlucHV0LCB0b2tlbiwgY29uZmlnLl9zdHJpY3QpO1xuICAgICAgICAvLyBpZiB3ZSBkaWRuJ3QgZmluZCBhIG1vbnRoIG5hbWUsIG1hcmsgdGhlIGRhdGUgYXMgaW52YWxpZC5cbiAgICAgICAgaWYgKG1vbnRoICE9IG51bGwpIHtcbiAgICAgICAgICAgIGFycmF5W01PTlRIXSA9IG1vbnRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZE1vbnRoID0gaW5wdXQ7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIExPQ0FMRVNcblxuICAgIHZhciBkZWZhdWx0TG9jYWxlTW9udGhzID0gJ0phbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydCA9ICdKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgTU9OVEhTX0lOX0ZPUk1BVCA9IC9EW29EXT8oXFxbW15cXFtcXF1dKlxcXXxcXHMpK01NTU0/LyxcbiAgICAgICAgZGVmYXVsdE1vbnRoc1Nob3J0UmVnZXggPSBtYXRjaFdvcmQsXG4gICAgICAgIGRlZmF1bHRNb250aHNSZWdleCA9IG1hdGNoV29yZDtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZU1vbnRocyhtLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHMpXG4gICAgICAgICAgICAgICAgPyB0aGlzLl9tb250aHNcbiAgICAgICAgICAgICAgICA6IHRoaXMuX21vbnRoc1snc3RhbmRhbG9uZSddO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRocylcbiAgICAgICAgICAgID8gdGhpcy5fbW9udGhzW20ubW9udGgoKV1cbiAgICAgICAgICAgIDogdGhpcy5fbW9udGhzW1xuICAgICAgICAgICAgICAgICAgKHRoaXMuX21vbnRocy5pc0Zvcm1hdCB8fCBNT05USFNfSU5fRk9STUFUKS50ZXN0KGZvcm1hdClcbiAgICAgICAgICAgICAgICAgICAgICA/ICdmb3JtYXQnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnc3RhbmRhbG9uZSdcbiAgICAgICAgICAgICAgXVttLm1vbnRoKCldO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZU1vbnRoc1Nob3J0KG0sIGZvcm1hdCkge1xuICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRoc1Nob3J0KVxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU2hvcnRcbiAgICAgICAgICAgICAgICA6IHRoaXMuX21vbnRoc1Nob3J0WydzdGFuZGFsb25lJ107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzU2hvcnQpXG4gICAgICAgICAgICA/IHRoaXMuX21vbnRoc1Nob3J0W20ubW9udGgoKV1cbiAgICAgICAgICAgIDogdGhpcy5fbW9udGhzU2hvcnRbXG4gICAgICAgICAgICAgICAgICBNT05USFNfSU5fRk9STUFULnRlc3QoZm9ybWF0KSA/ICdmb3JtYXQnIDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgICAgIF1bbS5tb250aCgpXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVTdHJpY3RQYXJzZShtb250aE5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgaWksXG4gICAgICAgICAgICBtb20sXG4gICAgICAgICAgICBsbGMgPSBtb250aE5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCF0aGlzLl9tb250aHNQYXJzZSkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyBub3QgdXNlZFxuICAgICAgICAgICAgdGhpcy5fbW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyArK2kpIHtcbiAgICAgICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIGldKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW2ldID0gdGhpcy5tb250aHNTaG9ydChcbiAgICAgICAgICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgICkudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0gPSB0aGlzLm1vbnRocyhtb20sICcnKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ01NTScpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ01NTScpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHNQYXJzZShtb250aE5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLCBtb20sIHJlZ2V4O1xuXG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlU3RyaWN0UGFyc2UuY2FsbCh0aGlzLCBtb250aE5hbWUsIGZvcm1hdCwgc3RyaWN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fbW9udGhzUGFyc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX21vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE86IGFkZCBzb3J0aW5nXG4gICAgICAgIC8vIFNvcnRpbmcgbWFrZXMgc3VyZSBpZiBvbmUgbW9udGggKG9yIGFiYnIpIGlzIGEgcHJlZml4IG9mIGFub3RoZXJcbiAgICAgICAgLy8gc2VlIHNvcnRpbmcgaW4gY29tcHV0ZU1vbnRoc1BhcnNlXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgaV0pO1xuICAgICAgICAgICAgaWYgKHN0cmljdCAmJiAhdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy5tb250aHMobW9tLCAnJykucmVwbGFjZSgnLicsICcnKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy5tb250aHNTaG9ydChtb20sICcnKS5yZXBsYWNlKCcuJywgJycpICsgJyQnLFxuICAgICAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdHJpY3QgJiYgIXRoaXMuX21vbnRoc1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgcmVnZXggPVxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLm1vbnRocyhtb20sICcnKSArICd8XicgKyB0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21vbnRoc1BhcnNlW2ldID0gbmV3IFJlZ0V4cChyZWdleC5yZXBsYWNlKCcuJywgJycpLCAnaScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGVzdCB0aGUgcmVnZXhcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdNTU1NJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZVtpXS50ZXN0KG1vbnRoTmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdNTU0nICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXS50ZXN0KG1vbnRoTmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyaWN0ICYmIHRoaXMuX21vbnRoc1BhcnNlW2ldLnRlc3QobW9udGhOYW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gc2V0TW9udGgobW9tLCB2YWx1ZSkge1xuICAgICAgICB2YXIgZGF5T2ZNb250aDtcblxuICAgICAgICBpZiAoIW1vbS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIC8vIE5vIG9wXG4gICAgICAgICAgICByZXR1cm4gbW9tO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICgvXlxcZCskLy50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdG9JbnQodmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IG1vbS5sb2NhbGVEYXRhKCkubW9udGhzUGFyc2UodmFsdWUpO1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IEFub3RoZXIgc2lsZW50IGZhaWx1cmU/XG4gICAgICAgICAgICAgICAgaWYgKCFpc051bWJlcih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vbTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkYXlPZk1vbnRoID0gTWF0aC5taW4obW9tLmRhdGUoKSwgZGF5c0luTW9udGgobW9tLnllYXIoKSwgdmFsdWUpKTtcbiAgICAgICAgbW9tLl9kWydzZXQnICsgKG1vbS5faXNVVEMgPyAnVVRDJyA6ICcnKSArICdNb250aCddKHZhbHVlLCBkYXlPZk1vbnRoKTtcbiAgICAgICAgcmV0dXJuIG1vbTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRNb250aCh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgc2V0TW9udGgodGhpcywgdmFsdWUpO1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsICdNb250aCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RGF5c0luTW9udGgoKSB7XG4gICAgICAgIHJldHVybiBkYXlzSW5Nb250aCh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aHNTaG9ydFJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZU1vbnRoc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNTaG9ydFJlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNTaG9ydFJlZ2V4ID0gZGVmYXVsdE1vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fbW9udGhzU2hvcnRSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoc1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZU1vbnRoc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNSZWdleCA9IGRlZmF1bHRNb250aHNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX21vbnRoc1JlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZU1vbnRoc1BhcnNlKCkge1xuICAgICAgICBmdW5jdGlvbiBjbXBMZW5SZXYoYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGIubGVuZ3RoIC0gYS5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2hvcnRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGxvbmdQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbW9tO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIGldKTtcbiAgICAgICAgICAgIHNob3J0UGllY2VzLnB1c2godGhpcy5tb250aHNTaG9ydChtb20sICcnKSk7XG4gICAgICAgICAgICBsb25nUGllY2VzLnB1c2godGhpcy5tb250aHMobW9tLCAnJykpO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaCh0aGlzLm1vbnRocyhtb20sICcnKSk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKHRoaXMubW9udGhzU2hvcnQobW9tLCAnJykpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNvcnRpbmcgbWFrZXMgc3VyZSBpZiBvbmUgbW9udGggKG9yIGFiYnIpIGlzIGEgcHJlZml4IG9mIGFub3RoZXIgaXRcbiAgICAgICAgLy8gd2lsbCBtYXRjaCB0aGUgbG9uZ2VyIHBpZWNlLlxuICAgICAgICBzaG9ydFBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIGxvbmdQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBtaXhlZFBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICBzaG9ydFBpZWNlc1tpXSA9IHJlZ2V4RXNjYXBlKHNob3J0UGllY2VzW2ldKTtcbiAgICAgICAgICAgIGxvbmdQaWVjZXNbaV0gPSByZWdleEVzY2FwZShsb25nUGllY2VzW2ldKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjQ7IGkrKykge1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXNbaV0gPSByZWdleEVzY2FwZShtaXhlZFBpZWNlc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9tb250aHNSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIG1peGVkUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRSZWdleCA9IHRoaXMuX21vbnRoc1JlZ2V4O1xuICAgICAgICB0aGlzLl9tb250aHNTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgbG9uZ1BpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgc2hvcnRQaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1knLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB5ID0gdGhpcy55ZWFyKCk7XG4gICAgICAgIHJldHVybiB5IDw9IDk5OTkgPyB6ZXJvRmlsbCh5LCA0KSA6ICcrJyArIHk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueWVhcigpICUgMTAwO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZJywgNF0sIDAsICd5ZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZWScsIDVdLCAwLCAneWVhcicpO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVlZWVlZJywgNiwgdHJ1ZV0sIDAsICd5ZWFyJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ3llYXInLCAneScpO1xuXG4gICAgLy8gUFJJT1JJVElFU1xuXG4gICAgYWRkVW5pdFByaW9yaXR5KCd5ZWFyJywgMSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdZJywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1lZJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1lZWVknLCBtYXRjaDF0bzQsIG1hdGNoNCk7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWVknLCBtYXRjaDF0bzYsIG1hdGNoNik7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWVlZJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ1lZWVlZJywgJ1lZWVlZWSddLCBZRUFSKTtcbiAgICBhZGRQYXJzZVRva2VuKCdZWVlZJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtZRUFSXSA9XG4gICAgICAgICAgICBpbnB1dC5sZW5ndGggPT09IDIgPyBob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCkgOiB0b0ludChpbnB1dCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignWVknLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID0gaG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1knLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID0gcGFyc2VJbnQoaW5wdXQsIDEwKTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIGZ1bmN0aW9uIGRheXNJblllYXIoeWVhcikge1xuICAgICAgICByZXR1cm4gaXNMZWFwWWVhcih5ZWFyKSA/IDM2NiA6IDM2NTtcbiAgICB9XG5cbiAgICAvLyBIT09LU1xuXG4gICAgaG9va3MucGFyc2VUd29EaWdpdFllYXIgPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIHRvSW50KGlucHV0KSArICh0b0ludChpbnB1dCkgPiA2OCA/IDE5MDAgOiAyMDAwKTtcbiAgICB9O1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldFllYXIgPSBtYWtlR2V0U2V0KCdGdWxsWWVhcicsIHRydWUpO1xuXG4gICAgZnVuY3Rpb24gZ2V0SXNMZWFwWWVhcigpIHtcbiAgICAgICAgcmV0dXJuIGlzTGVhcFllYXIodGhpcy55ZWFyKCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZURhdGUoeSwgbSwgZCwgaCwgTSwgcywgbXMpIHtcbiAgICAgICAgLy8gY2FuJ3QganVzdCBhcHBseSgpIHRvIGNyZWF0ZSBhIGRhdGU6XG4gICAgICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcS8xODEzNDhcbiAgICAgICAgdmFyIGRhdGU7XG4gICAgICAgIC8vIHRoZSBkYXRlIGNvbnN0cnVjdG9yIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoeSArIDQwMCwgbSwgZCwgaCwgTSwgcywgbXMpO1xuICAgICAgICAgICAgaWYgKGlzRmluaXRlKGRhdGUuZ2V0RnVsbFllYXIoKSkpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldEZ1bGxZZWFyKHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKHksIG0sIGQsIGgsIE0sIHMsIG1zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVUQ0RhdGUoeSkge1xuICAgICAgICB2YXIgZGF0ZSwgYXJncztcbiAgICAgICAgLy8gdGhlIERhdGUuVVRDIGZ1bmN0aW9uIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgLy8gcHJlc2VydmUgbGVhcCB5ZWFycyB1c2luZyBhIGZ1bGwgNDAwIHllYXIgY3ljbGUsIHRoZW4gcmVzZXRcbiAgICAgICAgICAgIGFyZ3NbMF0gPSB5ICsgNDAwO1xuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDLmFwcGx5KG51bGwsIGFyZ3MpKTtcbiAgICAgICAgICAgIGlmIChpc0Zpbml0ZShkYXRlLmdldFVUQ0Z1bGxZZWFyKCkpKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXRVVENGdWxsWWVhcih5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLCBhcmd1bWVudHMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cblxuICAgIC8vIHN0YXJ0LW9mLWZpcnN0LXdlZWsgLSBzdGFydC1vZi15ZWFyXG4gICAgZnVuY3Rpb24gZmlyc3RXZWVrT2Zmc2V0KHllYXIsIGRvdywgZG95KSB7XG4gICAgICAgIHZhciAvLyBmaXJzdC13ZWVrIGRheSAtLSB3aGljaCBqYW51YXJ5IGlzIGFsd2F5cyBpbiB0aGUgZmlyc3Qgd2VlayAoNCBmb3IgaXNvLCAxIGZvciBvdGhlcilcbiAgICAgICAgICAgIGZ3ZCA9IDcgKyBkb3cgLSBkb3ksXG4gICAgICAgICAgICAvLyBmaXJzdC13ZWVrIGRheSBsb2NhbCB3ZWVrZGF5IC0tIHdoaWNoIGxvY2FsIHdlZWtkYXkgaXMgZndkXG4gICAgICAgICAgICBmd2RsdyA9ICg3ICsgY3JlYXRlVVRDRGF0ZSh5ZWFyLCAwLCBmd2QpLmdldFVUQ0RheSgpIC0gZG93KSAlIDc7XG5cbiAgICAgICAgcmV0dXJuIC1md2RsdyArIGZ3ZCAtIDE7XG4gICAgfVxuXG4gICAgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPX3dlZWtfZGF0ZSNDYWxjdWxhdGluZ19hX2RhdGVfZ2l2ZW5fdGhlX3llYXIuMkNfd2Vla19udW1iZXJfYW5kX3dlZWtkYXlcbiAgICBmdW5jdGlvbiBkYXlPZlllYXJGcm9tV2Vla3MoeWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIGxvY2FsV2Vla2RheSA9ICg3ICsgd2Vla2RheSAtIGRvdykgJSA3LFxuICAgICAgICAgICAgd2Vla09mZnNldCA9IGZpcnN0V2Vla09mZnNldCh5ZWFyLCBkb3csIGRveSksXG4gICAgICAgICAgICBkYXlPZlllYXIgPSAxICsgNyAqICh3ZWVrIC0gMSkgKyBsb2NhbFdlZWtkYXkgKyB3ZWVrT2Zmc2V0LFxuICAgICAgICAgICAgcmVzWWVhcixcbiAgICAgICAgICAgIHJlc0RheU9mWWVhcjtcblxuICAgICAgICBpZiAoZGF5T2ZZZWFyIDw9IDApIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSB5ZWFyIC0gMTtcbiAgICAgICAgICAgIHJlc0RheU9mWWVhciA9IGRheXNJblllYXIocmVzWWVhcikgKyBkYXlPZlllYXI7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF5T2ZZZWFyID4gZGF5c0luWWVhcih5ZWFyKSkge1xuICAgICAgICAgICAgcmVzWWVhciA9IHllYXIgKyAxO1xuICAgICAgICAgICAgcmVzRGF5T2ZZZWFyID0gZGF5T2ZZZWFyIC0gZGF5c0luWWVhcih5ZWFyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSB5ZWFyO1xuICAgICAgICAgICAgcmVzRGF5T2ZZZWFyID0gZGF5T2ZZZWFyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHllYXI6IHJlc1llYXIsXG4gICAgICAgICAgICBkYXlPZlllYXI6IHJlc0RheU9mWWVhcixcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrT2ZZZWFyKG1vbSwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIHdlZWtPZmZzZXQgPSBmaXJzdFdlZWtPZmZzZXQobW9tLnllYXIoKSwgZG93LCBkb3kpLFxuICAgICAgICAgICAgd2VlayA9IE1hdGguZmxvb3IoKG1vbS5kYXlPZlllYXIoKSAtIHdlZWtPZmZzZXQgLSAxKSAvIDcpICsgMSxcbiAgICAgICAgICAgIHJlc1dlZWssXG4gICAgICAgICAgICByZXNZZWFyO1xuXG4gICAgICAgIGlmICh3ZWVrIDwgMSkge1xuICAgICAgICAgICAgcmVzWWVhciA9IG1vbS55ZWFyKCkgLSAxO1xuICAgICAgICAgICAgcmVzV2VlayA9IHdlZWsgKyB3ZWVrc0luWWVhcihyZXNZZWFyLCBkb3csIGRveSk7XG4gICAgICAgIH0gZWxzZSBpZiAod2VlayA+IHdlZWtzSW5ZZWFyKG1vbS55ZWFyKCksIGRvdywgZG95KSkge1xuICAgICAgICAgICAgcmVzV2VlayA9IHdlZWsgLSB3ZWVrc0luWWVhcihtb20ueWVhcigpLCBkb3csIGRveSk7XG4gICAgICAgICAgICByZXNZZWFyID0gbW9tLnllYXIoKSArIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNZZWFyID0gbW9tLnllYXIoKTtcbiAgICAgICAgICAgIHJlc1dlZWsgPSB3ZWVrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHdlZWs6IHJlc1dlZWssXG4gICAgICAgICAgICB5ZWFyOiByZXNZZWFyLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtzSW5ZZWFyKHllYXIsIGRvdywgZG95KSB7XG4gICAgICAgIHZhciB3ZWVrT2Zmc2V0ID0gZmlyc3RXZWVrT2Zmc2V0KHllYXIsIGRvdywgZG95KSxcbiAgICAgICAgICAgIHdlZWtPZmZzZXROZXh0ID0gZmlyc3RXZWVrT2Zmc2V0KHllYXIgKyAxLCBkb3csIGRveSk7XG4gICAgICAgIHJldHVybiAoZGF5c0luWWVhcih5ZWFyKSAtIHdlZWtPZmZzZXQgKyB3ZWVrT2Zmc2V0TmV4dCkgLyA3O1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCd3JywgWyd3dycsIDJdLCAnd28nLCAnd2VlaycpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdXJywgWydXVycsIDJdLCAnV28nLCAnaXNvV2VlaycpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCd3ZWVrJywgJ3cnKTtcbiAgICBhZGRVbml0QWxpYXMoJ2lzb1dlZWsnLCAnVycpO1xuXG4gICAgLy8gUFJJT1JJVElFU1xuXG4gICAgYWRkVW5pdFByaW9yaXR5KCd3ZWVrJywgNSk7XG4gICAgYWRkVW5pdFByaW9yaXR5KCdpc29XZWVrJywgNSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCd3JywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCd3dycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdXJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdXVycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsndycsICd3dycsICdXJywgJ1dXJ10sIGZ1bmN0aW9uIChcbiAgICAgICAgaW5wdXQsXG4gICAgICAgIHdlZWssXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgdG9rZW5cbiAgICApIHtcbiAgICAgICAgd2Vla1t0b2tlbi5zdWJzdHIoMCwgMSldID0gdG9JbnQoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgLy8gTE9DQUxFU1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vlayhtb20pIHtcbiAgICAgICAgcmV0dXJuIHdlZWtPZlllYXIobW9tLCB0aGlzLl93ZWVrLmRvdywgdGhpcy5fd2Vlay5kb3kpLndlZWs7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVXZWVrID0ge1xuICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlRmlyc3REYXlPZldlZWsoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl93ZWVrLmRvdztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVGaXJzdERheU9mWWVhcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWsuZG95O1xuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldFdlZWsoaW5wdXQpIHtcbiAgICAgICAgdmFyIHdlZWsgPSB0aGlzLmxvY2FsZURhdGEoKS53ZWVrKHRoaXMpO1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWsgOiB0aGlzLmFkZCgoaW5wdXQgLSB3ZWVrKSAqIDcsICdkJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPV2VlayhpbnB1dCkge1xuICAgICAgICB2YXIgd2VlayA9IHdlZWtPZlllYXIodGhpcywgMSwgNCkud2VlaztcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyB3ZWVrIDogdGhpcy5hZGQoKGlucHV0IC0gd2VlaykgKiA3LCAnZCcpO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkJywgMCwgJ2RvJywgJ2RheScpO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2RkJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNNaW4odGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkZGQnLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5c1Nob3J0KHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZGRkZCcsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzKHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZScsIDAsIDAsICd3ZWVrZGF5Jyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ0UnLCAwLCAwLCAnaXNvV2Vla2RheScpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdkYXknLCAnZCcpO1xuICAgIGFkZFVuaXRBbGlhcygnd2Vla2RheScsICdlJyk7XG4gICAgYWRkVW5pdEFsaWFzKCdpc29XZWVrZGF5JywgJ0UnKTtcblxuICAgIC8vIFBSSU9SSVRZXG4gICAgYWRkVW5pdFByaW9yaXR5KCdkYXknLCAxMSk7XG4gICAgYWRkVW5pdFByaW9yaXR5KCd3ZWVrZGF5JywgMTEpO1xuICAgIGFkZFVuaXRQcmlvcml0eSgnaXNvV2Vla2RheScsIDExKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ2QnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2UnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0UnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2RkJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c01pblJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcbiAgICBhZGRSZWdleFRva2VuKCdkZGQnLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzU2hvcnRSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG4gICAgYWRkUmVnZXhUb2tlbignZGRkZCcsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ2RkJywgJ2RkZCcsICdkZGRkJ10sIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB2YXIgd2Vla2RheSA9IGNvbmZpZy5fbG9jYWxlLndlZWtkYXlzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgIC8vIGlmIHdlIGRpZG4ndCBnZXQgYSB3ZWVrZGF5IG5hbWUsIG1hcmsgdGhlIGRhdGUgYXMgaW52YWxpZFxuICAgICAgICBpZiAod2Vla2RheSAhPSBudWxsKSB7XG4gICAgICAgICAgICB3ZWVrLmQgPSB3ZWVrZGF5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZFdlZWtkYXkgPSBpbnB1dDtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydkJywgJ2UnLCAnRSddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgd2Vla1t0b2tlbl0gPSB0b0ludChpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICBmdW5jdGlvbiBwYXJzZVdlZWtkYXkoaW5wdXQsIGxvY2FsZSkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc05hTihpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludChpbnB1dCwgMTApO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5wdXQgPSBsb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCk7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZUlzb1dlZWtkYXkoaW5wdXQsIGxvY2FsZSkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c1BhcnNlKGlucHV0KSAlIDcgfHwgNztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNOYU4oaW5wdXQpID8gbnVsbCA6IGlucHV0O1xuICAgIH1cblxuICAgIC8vIExPQ0FMRVNcbiAgICBmdW5jdGlvbiBzaGlmdFdlZWtkYXlzKHdzLCBuKSB7XG4gICAgICAgIHJldHVybiB3cy5zbGljZShuLCA3KS5jb25jYXQod3Muc2xpY2UoMCwgbikpO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2Vla2RheXMgPSAnU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXknLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIGRlZmF1bHRMb2NhbGVXZWVrZGF5c1Nob3J0ID0gJ1N1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgZGVmYXVsdExvY2FsZVdlZWtkYXlzTWluID0gJ1N1X01vX1R1X1dlX1RoX0ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICBkZWZhdWx0V2Vla2RheXNSZWdleCA9IG1hdGNoV29yZCxcbiAgICAgICAgZGVmYXVsdFdlZWtkYXlzU2hvcnRSZWdleCA9IG1hdGNoV29yZCxcbiAgICAgICAgZGVmYXVsdFdlZWtkYXlzTWluUmVnZXggPSBtYXRjaFdvcmQ7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5cyhtLCBmb3JtYXQpIHtcbiAgICAgICAgdmFyIHdlZWtkYXlzID0gaXNBcnJheSh0aGlzLl93ZWVrZGF5cylcbiAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNcbiAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNbXG4gICAgICAgICAgICAgICAgICBtICYmIG0gIT09IHRydWUgJiYgdGhpcy5fd2Vla2RheXMuaXNGb3JtYXQudGVzdChmb3JtYXQpXG4gICAgICAgICAgICAgICAgICAgICAgPyAnZm9ybWF0J1xuICAgICAgICAgICAgICAgICAgICAgIDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgICAgIF07XG4gICAgICAgIHJldHVybiBtID09PSB0cnVlXG4gICAgICAgICAgICA/IHNoaWZ0V2Vla2RheXMod2Vla2RheXMsIHRoaXMuX3dlZWsuZG93KVxuICAgICAgICAgICAgOiBtXG4gICAgICAgICAgICA/IHdlZWtkYXlzW20uZGF5KCldXG4gICAgICAgICAgICA6IHdlZWtkYXlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzU2hvcnQobSkge1xuICAgICAgICByZXR1cm4gbSA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyBzaGlmdFdlZWtkYXlzKHRoaXMuX3dlZWtkYXlzU2hvcnQsIHRoaXMuX3dlZWsuZG93KVxuICAgICAgICAgICAgOiBtXG4gICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzU2hvcnRbbS5kYXkoKV1cbiAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNTaG9ydDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5c01pbihtKSB7XG4gICAgICAgIHJldHVybiBtID09PSB0cnVlXG4gICAgICAgICAgICA/IHNoaWZ0V2Vla2RheXModGhpcy5fd2Vla2RheXNNaW4sIHRoaXMuX3dlZWsuZG93KVxuICAgICAgICAgICAgOiBtXG4gICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzTWluW20uZGF5KCldXG4gICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzTWluO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZVN0cmljdFBhcnNlJDEod2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgaWksXG4gICAgICAgICAgICBtb20sXG4gICAgICAgICAgICBsbGMgPSB3ZWVrZGF5TmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoIXRoaXMuX3dlZWtkYXlzUGFyc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZSA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgKytpKSB7XG4gICAgICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCAxXSkuZGF5KGkpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0gPSB0aGlzLndlZWtkYXlzTWluKFxuICAgICAgICAgICAgICAgICAgICBtb20sXG4gICAgICAgICAgICAgICAgICAgICcnXG4gICAgICAgICAgICAgICAgKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtpXSA9IHRoaXMud2Vla2RheXNTaG9ydChcbiAgICAgICAgICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgICkudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlW2ldID0gdGhpcy53ZWVrZGF5cyhtb20sICcnKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ2RkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09ICdkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdkZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09ICdkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXNQYXJzZSh3ZWVrZGF5TmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksIG1vbSwgcmVnZXg7XG5cbiAgICAgICAgaWYgKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVN0cmljdFBhcnNlJDEuY2FsbCh0aGlzLCB3ZWVrZGF5TmFtZSwgZm9ybWF0LCBzdHJpY3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl93ZWVrZGF5c1BhcnNlKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcblxuICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCAxXSkuZGF5KGkpO1xuICAgICAgICAgICAgaWYgKHN0cmljdCAmJiAhdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMud2Vla2RheXMobW9tLCAnJykucmVwbGFjZSgnLicsICdcXFxcLj8nKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJykucmVwbGFjZSgnLicsICdcXFxcLj8nKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy53ZWVrZGF5c01pbihtb20sICcnKS5yZXBsYWNlKCcuJywgJ1xcXFwuPycpICsgJyQnLFxuICAgICAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLl93ZWVrZGF5c1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgcmVnZXggPVxuICAgICAgICAgICAgICAgICAgICAnXicgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndlZWtkYXlzKG1vbSwgJycpICtcbiAgICAgICAgICAgICAgICAgICAgJ3xeJyArXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2Vla2RheXNTaG9ydChtb20sICcnKSArXG4gICAgICAgICAgICAgICAgICAgICd8XicgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndlZWtkYXlzTWluKG1vbSwgJycpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKHJlZ2V4LnJlcGxhY2UoJy4nLCAnJyksICdpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0ZXN0IHRoZSByZWdleFxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ2RkZGQnICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdkZGQnICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnZGQnICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJpY3QgJiYgdGhpcy5fd2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0RGF5T2ZXZWVrKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGF5ID0gdGhpcy5faXNVVEMgPyB0aGlzLl9kLmdldFVUQ0RheSgpIDogdGhpcy5fZC5nZXREYXkoKTtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlucHV0ID0gcGFyc2VXZWVrZGF5KGlucHV0LCB0aGlzLmxvY2FsZURhdGEoKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hZGQoaW5wdXQgLSBkYXksICdkJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZGF5O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0TG9jYWxlRGF5T2ZXZWVrKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd2Vla2RheSA9ICh0aGlzLmRheSgpICsgNyAtIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdykgJSA3O1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWtkYXkgOiB0aGlzLmFkZChpbnB1dCAtIHdlZWtkYXksICdkJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPRGF5T2ZXZWVrKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGJlaGF2ZXMgdGhlIHNhbWUgYXMgbW9tZW50I2RheSBleGNlcHRcbiAgICAgICAgLy8gYXMgYSBnZXR0ZXIsIHJldHVybnMgNyBpbnN0ZWFkIG9mIDAgKDEtNyByYW5nZSBpbnN0ZWFkIG9mIDAtNilcbiAgICAgICAgLy8gYXMgYSBzZXR0ZXIsIHN1bmRheSBzaG91bGQgYmVsb25nIHRvIHRoZSBwcmV2aW91cyB3ZWVrLlxuXG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgd2Vla2RheSA9IHBhcnNlSXNvV2Vla2RheShpbnB1dCwgdGhpcy5sb2NhbGVEYXRhKCkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF5KHRoaXMuZGF5KCkgJSA3ID8gd2Vla2RheSA6IHdlZWtkYXkgLSA3KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRheSgpIHx8IDc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrZGF5c1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1JlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtkYXlzU2hvcnRSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzU2hvcnRSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla2RheXNNaW5SZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNNaW5SZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNNaW5SZWdleCA9IGRlZmF1bHRXZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzTWluUmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlV2Vla2RheXNQYXJzZSgpIHtcbiAgICAgICAgZnVuY3Rpb24gY21wTGVuUmV2KGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBiLmxlbmd0aCAtIGEubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1pblBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgc2hvcnRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGxvbmdQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgbWlucCxcbiAgICAgICAgICAgIHNob3J0cCxcbiAgICAgICAgICAgIGxvbmdwO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgIG1pbnAgPSByZWdleEVzY2FwZSh0aGlzLndlZWtkYXlzTWluKG1vbSwgJycpKTtcbiAgICAgICAgICAgIHNob3J0cCA9IHJlZ2V4RXNjYXBlKHRoaXMud2Vla2RheXNTaG9ydChtb20sICcnKSk7XG4gICAgICAgICAgICBsb25ncCA9IHJlZ2V4RXNjYXBlKHRoaXMud2Vla2RheXMobW9tLCAnJykpO1xuICAgICAgICAgICAgbWluUGllY2VzLnB1c2gobWlucCk7XG4gICAgICAgICAgICBzaG9ydFBpZWNlcy5wdXNoKHNob3J0cCk7XG4gICAgICAgICAgICBsb25nUGllY2VzLnB1c2gobG9uZ3ApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChtaW5wKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goc2hvcnRwKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2gobG9uZ3ApO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNvcnRpbmcgbWFrZXMgc3VyZSBpZiBvbmUgd2Vla2RheSAob3IgYWJicikgaXMgYSBwcmVmaXggb2YgYW5vdGhlciBpdFxuICAgICAgICAvLyB3aWxsIG1hdGNoIHRoZSBsb25nZXIgcGllY2UuXG4gICAgICAgIG1pblBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIHNob3J0UGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbG9uZ1BpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIG1peGVkUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcblxuICAgICAgICB0aGlzLl93ZWVrZGF5c1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXggPSB0aGlzLl93ZWVrZGF5c1JlZ2V4O1xuICAgICAgICB0aGlzLl93ZWVrZGF5c01pblJlZ2V4ID0gdGhpcy5fd2Vla2RheXNSZWdleDtcblxuICAgICAgICB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBsb25nUGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIHNob3J0UGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBtaW5QaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgZnVuY3Rpb24gaEZvcm1hdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaG91cnMoKSAlIDEyIHx8IDEyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGtGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhvdXJzKCkgfHwgMjQ7XG4gICAgfVxuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0gnLCBbJ0hIJywgMl0sIDAsICdob3VyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ2gnLCBbJ2hoJywgMl0sIDAsIGhGb3JtYXQpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdrJywgWydraycsIDJdLCAwLCBrRm9ybWF0KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdobW0nLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnJyArIGhGb3JtYXQuYXBwbHkodGhpcykgKyB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMik7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignaG1tc3MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAnJyArXG4gICAgICAgICAgICBoRm9ybWF0LmFwcGx5KHRoaXMpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLnNlY29uZHMoKSwgMilcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdIbW0nLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnJyArIHRoaXMuaG91cnMoKSArIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdIbW1zcycsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICcnICtcbiAgICAgICAgICAgIHRoaXMuaG91cnMoKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMikgK1xuICAgICAgICAgICAgemVyb0ZpbGwodGhpcy5zZWNvbmRzKCksIDIpXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBtZXJpZGllbSh0b2tlbiwgbG93ZXJjYXNlKSB7XG4gICAgICAgIGFkZEZvcm1hdFRva2VuKHRva2VuLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubWVyaWRpZW0oXG4gICAgICAgICAgICAgICAgdGhpcy5ob3VycygpLFxuICAgICAgICAgICAgICAgIHRoaXMubWludXRlcygpLFxuICAgICAgICAgICAgICAgIGxvd2VyY2FzZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbWVyaWRpZW0oJ2EnLCB0cnVlKTtcbiAgICBtZXJpZGllbSgnQScsIGZhbHNlKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnaG91cicsICdoJyk7XG5cbiAgICAvLyBQUklPUklUWVxuICAgIGFkZFVuaXRQcmlvcml0eSgnaG91cicsIDEzKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGZ1bmN0aW9uIG1hdGNoTWVyaWRpZW0oaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLl9tZXJpZGllbVBhcnNlO1xuICAgIH1cblxuICAgIGFkZFJlZ2V4VG9rZW4oJ2EnLCBtYXRjaE1lcmlkaWVtKTtcbiAgICBhZGRSZWdleFRva2VuKCdBJywgbWF0Y2hNZXJpZGllbSk7XG4gICAgYWRkUmVnZXhUb2tlbignSCcsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignaCcsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignaycsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignSEgnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignaGgnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbigna2snLCBtYXRjaDF0bzIsIG1hdGNoMik7XG5cbiAgICBhZGRSZWdleFRva2VuKCdobW0nLCBtYXRjaDN0bzQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2htbXNzJywgbWF0Y2g1dG82KTtcbiAgICBhZGRSZWdleFRva2VuKCdIbW0nLCBtYXRjaDN0bzQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0htbXNzJywgbWF0Y2g1dG82KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydIJywgJ0hIJ10sIEhPVVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydrJywgJ2trJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIga0lucHV0ID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICBhcnJheVtIT1VSXSA9IGtJbnB1dCA9PT0gMjQgPyAwIDoga0lucHV0O1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oWydhJywgJ0EnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5faXNQbSA9IGNvbmZpZy5fbG9jYWxlLmlzUE0oaW5wdXQpO1xuICAgICAgICBjb25maWcuX21lcmlkaWVtID0gaW5wdXQ7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ2gnLCAnaGgnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdobW0nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvcyA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvcykpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvcykpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdobW1zcycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zMSA9IGlucHV0Lmxlbmd0aCAtIDQsXG4gICAgICAgICAgICBwb3MyID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zMSkpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczEsIDIpKTtcbiAgICAgICAgYXJyYXlbU0VDT05EXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MyKSk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB0cnVlO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ0htbScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zKSk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignSG1tc3MnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvczEgPSBpbnB1dC5sZW5ndGggLSA0LFxuICAgICAgICAgICAgcG9zMiA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvczEpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MxLCAyKSk7XG4gICAgICAgIGFycmF5W1NFQ09ORF0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMikpO1xuICAgIH0pO1xuXG4gICAgLy8gTE9DQUxFU1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlSXNQTShpbnB1dCkge1xuICAgICAgICAvLyBJRTggUXVpcmtzIE1vZGUgJiBJRTcgU3RhbmRhcmRzIE1vZGUgZG8gbm90IGFsbG93IGFjY2Vzc2luZyBzdHJpbmdzIGxpa2UgYXJyYXlzXG4gICAgICAgIC8vIFVzaW5nIGNoYXJBdCBzaG91bGQgYmUgbW9yZSBjb21wYXRpYmxlLlxuICAgICAgICByZXR1cm4gKGlucHV0ICsgJycpLnRvTG93ZXJDYXNlKCkuY2hhckF0KDApID09PSAncCc7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVNZXJpZGllbVBhcnNlID0gL1thcF1cXC4/bT9cXC4/L2ksXG4gICAgICAgIC8vIFNldHRpbmcgdGhlIGhvdXIgc2hvdWxkIGtlZXAgdGhlIHRpbWUsIGJlY2F1c2UgdGhlIHVzZXIgZXhwbGljaXRseVxuICAgICAgICAvLyBzcGVjaWZpZWQgd2hpY2ggaG91ciB0aGV5IHdhbnQuIFNvIHRyeWluZyB0byBtYWludGFpbiB0aGUgc2FtZSBob3VyIChpblxuICAgICAgICAvLyBhIG5ldyB0aW1lem9uZSkgbWFrZXMgc2Vuc2UuIEFkZGluZy9zdWJ0cmFjdGluZyBob3VycyBkb2VzIG5vdCBmb2xsb3dcbiAgICAgICAgLy8gdGhpcyBydWxlLlxuICAgICAgICBnZXRTZXRIb3VyID0gbWFrZUdldFNldCgnSG91cnMnLCB0cnVlKTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZU1lcmlkaWVtKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgIGlmIChob3VycyA+IDExKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdwbScgOiAnUE0nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnYW0nIDogJ0FNJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBiYXNlQ29uZmlnID0ge1xuICAgICAgICBjYWxlbmRhcjogZGVmYXVsdENhbGVuZGFyLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDogZGVmYXVsdExvbmdEYXRlRm9ybWF0LFxuICAgICAgICBpbnZhbGlkRGF0ZTogZGVmYXVsdEludmFsaWREYXRlLFxuICAgICAgICBvcmRpbmFsOiBkZWZhdWx0T3JkaW5hbCxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UsXG4gICAgICAgIHJlbGF0aXZlVGltZTogZGVmYXVsdFJlbGF0aXZlVGltZSxcblxuICAgICAgICBtb250aHM6IGRlZmF1bHRMb2NhbGVNb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0OiBkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQsXG5cbiAgICAgICAgd2VlazogZGVmYXVsdExvY2FsZVdlZWssXG5cbiAgICAgICAgd2Vla2RheXM6IGRlZmF1bHRMb2NhbGVXZWVrZGF5cyxcbiAgICAgICAgd2Vla2RheXNNaW46IGRlZmF1bHRMb2NhbGVXZWVrZGF5c01pbixcbiAgICAgICAgd2Vla2RheXNTaG9ydDogZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQsXG5cbiAgICAgICAgbWVyaWRpZW1QYXJzZTogZGVmYXVsdExvY2FsZU1lcmlkaWVtUGFyc2UsXG4gICAgfTtcblxuICAgIC8vIGludGVybmFsIHN0b3JhZ2UgZm9yIGxvY2FsZSBjb25maWcgZmlsZXNcbiAgICB2YXIgbG9jYWxlcyA9IHt9LFxuICAgICAgICBsb2NhbGVGYW1pbGllcyA9IHt9LFxuICAgICAgICBnbG9iYWxMb2NhbGU7XG5cbiAgICBmdW5jdGlvbiBjb21tb25QcmVmaXgoYXJyMSwgYXJyMikge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIG1pbmwgPSBNYXRoLm1pbihhcnIxLmxlbmd0aCwgYXJyMi5sZW5ndGgpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbWlubDsgaSArPSAxKSB7XG4gICAgICAgICAgICBpZiAoYXJyMVtpXSAhPT0gYXJyMltpXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW5sO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZUxvY2FsZShrZXkpIHtcbiAgICAgICAgcmV0dXJuIGtleSA/IGtleS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ18nLCAnLScpIDoga2V5O1xuICAgIH1cblxuICAgIC8vIHBpY2sgdGhlIGxvY2FsZSBmcm9tIHRoZSBhcnJheVxuICAgIC8vIHRyeSBbJ2VuLWF1JywgJ2VuLWdiJ10gYXMgJ2VuLWF1JywgJ2VuLWdiJywgJ2VuJywgYXMgaW4gbW92ZSB0aHJvdWdoIHRoZSBsaXN0IHRyeWluZyBlYWNoXG4gICAgLy8gc3Vic3RyaW5nIGZyb20gbW9zdCBzcGVjaWZpYyB0byBsZWFzdCwgYnV0IG1vdmUgdG8gdGhlIG5leHQgYXJyYXkgaXRlbSBpZiBpdCdzIGEgbW9yZSBzcGVjaWZpYyB2YXJpYW50IHRoYW4gdGhlIGN1cnJlbnQgcm9vdFxuICAgIGZ1bmN0aW9uIGNob29zZUxvY2FsZShuYW1lcykge1xuICAgICAgICB2YXIgaSA9IDAsXG4gICAgICAgICAgICBqLFxuICAgICAgICAgICAgbmV4dCxcbiAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgIHNwbGl0O1xuXG4gICAgICAgIHdoaWxlIChpIDwgbmFtZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBzcGxpdCA9IG5vcm1hbGl6ZUxvY2FsZShuYW1lc1tpXSkuc3BsaXQoJy0nKTtcbiAgICAgICAgICAgIGogPSBzcGxpdC5sZW5ndGg7XG4gICAgICAgICAgICBuZXh0ID0gbm9ybWFsaXplTG9jYWxlKG5hbWVzW2kgKyAxXSk7XG4gICAgICAgICAgICBuZXh0ID0gbmV4dCA/IG5leHQuc3BsaXQoJy0nKSA6IG51bGw7XG4gICAgICAgICAgICB3aGlsZSAoaiA+IDApIHtcbiAgICAgICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKHNwbGl0LnNsaWNlKDAsIGopLmpvaW4oJy0nKSk7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIG5leHQgJiZcbiAgICAgICAgICAgICAgICAgICAgbmV4dC5sZW5ndGggPj0gaiAmJlxuICAgICAgICAgICAgICAgICAgICBjb21tb25QcmVmaXgoc3BsaXQsIG5leHQpID49IGogLSAxXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vdGhlIG5leHQgYXJyYXkgaXRlbSBpcyBiZXR0ZXIgdGhhbiBhIHNoYWxsb3dlciBzdWJzdHJpbmcgb2YgdGhpcyBvbmVcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGotLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2xvYmFsTG9jYWxlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvYWRMb2NhbGUobmFtZSkge1xuICAgICAgICB2YXIgb2xkTG9jYWxlID0gbnVsbCxcbiAgICAgICAgICAgIGFsaWFzZWRSZXF1aXJlO1xuICAgICAgICAvLyBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byByZWdpc3RlciBhbmQgbG9hZCBhbGwgdGhlIGxvY2FsZXMgaW4gTm9kZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBsb2NhbGVzW25hbWVdID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICBtb2R1bGUgJiZcbiAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzXG4gICAgICAgICkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBvbGRMb2NhbGUgPSBnbG9iYWxMb2NhbGUuX2FiYnI7XG4gICAgICAgICAgICAgICAgYWxpYXNlZFJlcXVpcmUgPSByZXF1aXJlO1xuICAgICAgICAgICAgICAgIGFsaWFzZWRSZXF1aXJlKCcuL2xvY2FsZS8nICsgbmFtZSk7XG4gICAgICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG9sZExvY2FsZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gbWFyayBhcyBub3QgZm91bmQgdG8gYXZvaWQgcmVwZWF0aW5nIGV4cGVuc2l2ZSBmaWxlIHJlcXVpcmUgY2FsbCBjYXVzaW5nIGhpZ2ggQ1BVXG4gICAgICAgICAgICAgICAgLy8gd2hlbiB0cnlpbmcgdG8gZmluZCBlbi1VUywgZW5fVVMsIGVuLXVzIGZvciBldmVyeSBmb3JtYXQgY2FsbFxuICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBudWxsOyAvLyBudWxsIG1lYW5zIG5vdCBmb3VuZFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2NhbGVzW25hbWVdO1xuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBsb2FkIGxvY2FsZSBhbmQgdGhlbiBzZXQgdGhlIGdsb2JhbCBsb2NhbGUuICBJZlxuICAgIC8vIG5vIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGluLCBpdCB3aWxsIHNpbXBseSByZXR1cm4gdGhlIGN1cnJlbnQgZ2xvYmFsXG4gICAgLy8gbG9jYWxlIGtleS5cbiAgICBmdW5jdGlvbiBnZXRTZXRHbG9iYWxMb2NhbGUoa2V5LCB2YWx1ZXMpIHtcbiAgICAgICAgdmFyIGRhdGE7XG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZCh2YWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGdldExvY2FsZShrZXkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZGVmaW5lTG9jYWxlKGtleSwgdmFsdWVzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAvLyBtb21lbnQuZHVyYXRpb24uX2xvY2FsZSA9IG1vbWVudC5fbG9jYWxlID0gZGF0YTtcbiAgICAgICAgICAgICAgICBnbG9iYWxMb2NhbGUgPSBkYXRhO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIGNvbnNvbGUud2Fybikge1xuICAgICAgICAgICAgICAgICAgICAvL3dhcm4gdXNlciBpZiBhcmd1bWVudHMgYXJlIHBhc3NlZCBidXQgdGhlIGxvY2FsZSBjb3VsZCBub3QgYmUgc2V0XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgICAgICAgICAgICdMb2NhbGUgJyArIGtleSArICcgbm90IGZvdW5kLiBEaWQgeW91IGZvcmdldCB0byBsb2FkIGl0PydcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZ2xvYmFsTG9jYWxlLl9hYmJyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlZmluZUxvY2FsZShuYW1lLCBjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGxvY2FsZSxcbiAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBiYXNlQ29uZmlnO1xuICAgICAgICAgICAgY29uZmlnLmFiYnIgPSBuYW1lO1xuICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGRlcHJlY2F0ZVNpbXBsZShcbiAgICAgICAgICAgICAgICAgICAgJ2RlZmluZUxvY2FsZU92ZXJyaWRlJyxcbiAgICAgICAgICAgICAgICAgICAgJ3VzZSBtb21lbnQudXBkYXRlTG9jYWxlKGxvY2FsZU5hbWUsIGNvbmZpZykgdG8gY2hhbmdlICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2FuIGV4aXN0aW5nIGxvY2FsZS4gbW9tZW50LmRlZmluZUxvY2FsZShsb2NhbGVOYW1lLCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdjb25maWcpIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGNyZWF0aW5nIGEgbmV3IGxvY2FsZSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9kZWZpbmUtbG9jYWxlLyBmb3IgbW9yZSBpbmZvLidcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGxvY2FsZXNbbmFtZV0uX2NvbmZpZztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLnBhcmVudExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZXNbY29uZmlnLnBhcmVudExvY2FsZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBsb2NhbGVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdLl9jb25maWc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxlID0gbG9hZExvY2FsZShjb25maWcucGFyZW50TG9jYWxlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBsb2NhbGUuX2NvbmZpZztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbG9jYWxlRmFtaWxpZXNbY29uZmlnLnBhcmVudExvY2FsZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGVGYW1pbGllc1tjb25maWcucGFyZW50TG9jYWxlXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlRmFtaWxpZXNbY29uZmlnLnBhcmVudExvY2FsZV0ucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWc6IGNvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbmV3IExvY2FsZShtZXJnZUNvbmZpZ3MocGFyZW50Q29uZmlnLCBjb25maWcpKTtcblxuICAgICAgICAgICAgaWYgKGxvY2FsZUZhbWlsaWVzW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxlRmFtaWxpZXNbbmFtZV0uZm9yRWFjaChmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICBkZWZpbmVMb2NhbGUoeC5uYW1lLCB4LmNvbmZpZyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJhY2t3YXJkcyBjb21wYXQgZm9yIG5vdzogYWxzbyBzZXQgdGhlIGxvY2FsZVxuICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHdlIHNldCB0aGUgbG9jYWxlIEFGVEVSIGFsbCBjaGlsZCBsb2NhbGVzIGhhdmUgYmVlblxuICAgICAgICAgICAgLy8gY3JlYXRlZCwgc28gd2Ugd29uJ3QgZW5kIHVwIHdpdGggdGhlIGNoaWxkIGxvY2FsZSBzZXQuXG4gICAgICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGUobmFtZSk7XG5cbiAgICAgICAgICAgIHJldHVybiBsb2NhbGVzW25hbWVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gdXNlZnVsIGZvciB0ZXN0aW5nXG4gICAgICAgICAgICBkZWxldGUgbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlTG9jYWxlKG5hbWUsIGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBsb2NhbGUsXG4gICAgICAgICAgICAgICAgdG1wTG9jYWxlLFxuICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGJhc2VDb25maWc7XG5cbiAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwgJiYgbG9jYWxlc1tuYW1lXS5wYXJlbnRMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBleGlzdGluZyBjaGlsZCBsb2NhbGUgaW4tcGxhY2UgdG8gYXZvaWQgbWVtb3J5LWxlYWtzXG4gICAgICAgICAgICAgICAgbG9jYWxlc1tuYW1lXS5zZXQobWVyZ2VDb25maWdzKGxvY2FsZXNbbmFtZV0uX2NvbmZpZywgY29uZmlnKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIE1FUkdFXG4gICAgICAgICAgICAgICAgdG1wTG9jYWxlID0gbG9hZExvY2FsZShuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAodG1wTG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gdG1wTG9jYWxlLl9jb25maWc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbmZpZyA9IG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgaWYgKHRtcExvY2FsZSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZUxvY2FsZSBpcyBjYWxsZWQgZm9yIGNyZWF0aW5nIGEgbmV3IGxvY2FsZVxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgYWJiciBzbyBpdCB3aWxsIGhhdmUgYSBuYW1lIChnZXR0ZXJzIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAvLyB1bmRlZmluZWQgb3RoZXJ3aXNlKS5cbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLmFiYnIgPSBuYW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsb2NhbGUgPSBuZXcgTG9jYWxlKGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgbG9jYWxlLnBhcmVudExvY2FsZSA9IGxvY2FsZXNbbmFtZV07XG4gICAgICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IGxvY2FsZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gYmFja3dhcmRzIGNvbXBhdCBmb3Igbm93OiBhbHNvIHNldCB0aGUgbG9jYWxlXG4gICAgICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGUobmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBwYXNzIG51bGwgZm9yIGNvbmZpZyB0byB1bnVwZGF0ZSwgdXNlZnVsIGZvciB0ZXN0c1xuICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdLnBhcmVudExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBsb2NhbGVzW25hbWVdLnBhcmVudExvY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09IGdldFNldEdsb2JhbExvY2FsZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGUobmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvY2FsZXNbbmFtZV07XG4gICAgfVxuXG4gICAgLy8gcmV0dXJucyBsb2NhbGUgZGF0YVxuICAgIGZ1bmN0aW9uIGdldExvY2FsZShrZXkpIHtcbiAgICAgICAgdmFyIGxvY2FsZTtcblxuICAgICAgICBpZiAoa2V5ICYmIGtleS5fbG9jYWxlICYmIGtleS5fbG9jYWxlLl9hYmJyKSB7XG4gICAgICAgICAgICBrZXkgPSBrZXkuX2xvY2FsZS5fYWJicjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgha2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gZ2xvYmFsTG9jYWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc0FycmF5KGtleSkpIHtcbiAgICAgICAgICAgIC8vc2hvcnQtY2lyY3VpdCBldmVyeXRoaW5nIGVsc2VcbiAgICAgICAgICAgIGxvY2FsZSA9IGxvYWRMb2NhbGUoa2V5KTtcbiAgICAgICAgICAgIGlmIChsb2NhbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAga2V5ID0gW2tleV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2hvb3NlTG9jYWxlKGtleSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdExvY2FsZXMoKSB7XG4gICAgICAgIHJldHVybiBrZXlzKGxvY2FsZXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrT3ZlcmZsb3cobSkge1xuICAgICAgICB2YXIgb3ZlcmZsb3csXG4gICAgICAgICAgICBhID0gbS5fYTtcblxuICAgICAgICBpZiAoYSAmJiBnZXRQYXJzaW5nRmxhZ3MobSkub3ZlcmZsb3cgPT09IC0yKSB7XG4gICAgICAgICAgICBvdmVyZmxvdyA9XG4gICAgICAgICAgICAgICAgYVtNT05USF0gPCAwIHx8IGFbTU9OVEhdID4gMTFcbiAgICAgICAgICAgICAgICAgICAgPyBNT05USFxuICAgICAgICAgICAgICAgICAgICA6IGFbREFURV0gPCAxIHx8IGFbREFURV0gPiBkYXlzSW5Nb250aChhW1lFQVJdLCBhW01PTlRIXSlcbiAgICAgICAgICAgICAgICAgICAgPyBEQVRFXG4gICAgICAgICAgICAgICAgICAgIDogYVtIT1VSXSA8IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICBhW0hPVVJdID4gMjQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAoYVtIT1VSXSA9PT0gMjQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGFbTUlOVVRFXSAhPT0gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVtTRUNPTkRdICE9PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhW01JTExJU0VDT05EXSAhPT0gMCkpXG4gICAgICAgICAgICAgICAgICAgID8gSE9VUlxuICAgICAgICAgICAgICAgICAgICA6IGFbTUlOVVRFXSA8IDAgfHwgYVtNSU5VVEVdID4gNTlcbiAgICAgICAgICAgICAgICAgICAgPyBNSU5VVEVcbiAgICAgICAgICAgICAgICAgICAgOiBhW1NFQ09ORF0gPCAwIHx8IGFbU0VDT05EXSA+IDU5XG4gICAgICAgICAgICAgICAgICAgID8gU0VDT05EXG4gICAgICAgICAgICAgICAgICAgIDogYVtNSUxMSVNFQ09ORF0gPCAwIHx8IGFbTUlMTElTRUNPTkRdID4gOTk5XG4gICAgICAgICAgICAgICAgICAgID8gTUlMTElTRUNPTkRcbiAgICAgICAgICAgICAgICAgICAgOiAtMTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dEYXlPZlllYXIgJiZcbiAgICAgICAgICAgICAgICAob3ZlcmZsb3cgPCBZRUFSIHx8IG92ZXJmbG93ID4gREFURSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gREFURTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChnZXRQYXJzaW5nRmxhZ3MobSkuX292ZXJmbG93V2Vla3MgJiYgb3ZlcmZsb3cgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3cgPSBXRUVLO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dXZWVrZGF5ICYmIG92ZXJmbG93ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gV0VFS0RBWTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKG0pLm92ZXJmbG93ID0gb3ZlcmZsb3c7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICAvLyBpc28gODYwMSByZWdleFxuICAgIC8vIDAwMDAtMDAtMDAgMDAwMC1XMDAgb3IgMDAwMC1XMDAtMCArIFQgKyAwMCBvciAwMDowMCBvciAwMDowMDowMCBvciAwMDowMDowMC4wMDAgKyArMDA6MDAgb3IgKzAwMDAgb3IgKzAwKVxuICAgIHZhciBleHRlbmRlZElzb1JlZ2V4ID0gL15cXHMqKCg/OlsrLV1cXGR7Nn18XFxkezR9KS0oPzpcXGRcXGQtXFxkXFxkfFdcXGRcXGQtXFxkfFdcXGRcXGR8XFxkXFxkXFxkfFxcZFxcZCkpKD86KFR8ICkoXFxkXFxkKD86OlxcZFxcZCg/OjpcXGRcXGQoPzpbLixdXFxkKyk/KT8pPykoWystXVxcZFxcZCg/Ojo/XFxkXFxkKT98XFxzKlopPyk/JC8sXG4gICAgICAgIGJhc2ljSXNvUmVnZXggPSAvXlxccyooKD86WystXVxcZHs2fXxcXGR7NH0pKD86XFxkXFxkXFxkXFxkfFdcXGRcXGRcXGR8V1xcZFxcZHxcXGRcXGRcXGR8XFxkXFxkfCkpKD86KFR8ICkoXFxkXFxkKD86XFxkXFxkKD86XFxkXFxkKD86Wy4sXVxcZCspPyk/KT8pKFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/fFxccypaKT8pPyQvLFxuICAgICAgICB0elJlZ2V4ID0gL1p8WystXVxcZFxcZCg/Ojo/XFxkXFxkKT8vLFxuICAgICAgICBpc29EYXRlcyA9IFtcbiAgICAgICAgICAgIFsnWVlZWVlZLU1NLUREJywgL1srLV1cXGR7Nn0tXFxkXFxkLVxcZFxcZC9dLFxuICAgICAgICAgICAgWydZWVlZLU1NLUREJywgL1xcZHs0fS1cXGRcXGQtXFxkXFxkL10sXG4gICAgICAgICAgICBbJ0dHR0ctW1ddV1ctRScsIC9cXGR7NH0tV1xcZFxcZC1cXGQvXSxcbiAgICAgICAgICAgIFsnR0dHRy1bV11XVycsIC9cXGR7NH0tV1xcZFxcZC8sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnWVlZWS1EREQnLCAvXFxkezR9LVxcZHszfS9dLFxuICAgICAgICAgICAgWydZWVlZLU1NJywgL1xcZHs0fS1cXGRcXGQvLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ1lZWVlZWU1NREQnLCAvWystXVxcZHsxMH0vXSxcbiAgICAgICAgICAgIFsnWVlZWU1NREQnLCAvXFxkezh9L10sXG4gICAgICAgICAgICBbJ0dHR0dbV11XV0UnLCAvXFxkezR9V1xcZHszfS9dLFxuICAgICAgICAgICAgWydHR0dHW1ddV1cnLCAvXFxkezR9V1xcZHsyfS8sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnWVlZWURERCcsIC9cXGR7N30vXSxcbiAgICAgICAgICAgIFsnWVlZWU1NJywgL1xcZHs2fS8sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnWVlZWScsIC9cXGR7NH0vLCBmYWxzZV0sXG4gICAgICAgIF0sXG4gICAgICAgIC8vIGlzbyB0aW1lIGZvcm1hdHMgYW5kIHJlZ2V4ZXNcbiAgICAgICAgaXNvVGltZXMgPSBbXG4gICAgICAgICAgICBbJ0hIOm1tOnNzLlNTU1MnLCAvXFxkXFxkOlxcZFxcZDpcXGRcXGRcXC5cXGQrL10sXG4gICAgICAgICAgICBbJ0hIOm1tOnNzLFNTU1MnLCAvXFxkXFxkOlxcZFxcZDpcXGRcXGQsXFxkKy9dLFxuICAgICAgICAgICAgWydISDptbTpzcycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZC9dLFxuICAgICAgICAgICAgWydISDptbScsIC9cXGRcXGQ6XFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIbW1zcy5TU1NTJywgL1xcZFxcZFxcZFxcZFxcZFxcZFxcLlxcZCsvXSxcbiAgICAgICAgICAgIFsnSEhtbXNzLFNTU1MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkLFxcZCsvXSxcbiAgICAgICAgICAgIFsnSEhtbXNzJywgL1xcZFxcZFxcZFxcZFxcZFxcZC9dLFxuICAgICAgICAgICAgWydISG1tJywgL1xcZFxcZFxcZFxcZC9dLFxuICAgICAgICAgICAgWydISCcsIC9cXGRcXGQvXSxcbiAgICAgICAgXSxcbiAgICAgICAgYXNwTmV0SnNvblJlZ2V4ID0gL15cXC8/RGF0ZVxcKCgtP1xcZCspL2ksXG4gICAgICAgIC8vIFJGQyAyODIyIHJlZ2V4OiBGb3IgZGV0YWlscyBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzI4MjIjc2VjdGlvbi0zLjNcbiAgICAgICAgcmZjMjgyMiA9IC9eKD86KE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksP1xccyk/KFxcZHsxLDJ9KVxccyhKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYylcXHMoXFxkezIsNH0pXFxzKFxcZFxcZCk6KFxcZFxcZCkoPzo6KFxcZFxcZCkpP1xccyg/OihVVHxHTVR8W0VDTVBdW1NEXVQpfChbWnpdKXwoWystXVxcZHs0fSkpJC8sXG4gICAgICAgIG9ic09mZnNldHMgPSB7XG4gICAgICAgICAgICBVVDogMCxcbiAgICAgICAgICAgIEdNVDogMCxcbiAgICAgICAgICAgIEVEVDogLTQgKiA2MCxcbiAgICAgICAgICAgIEVTVDogLTUgKiA2MCxcbiAgICAgICAgICAgIENEVDogLTUgKiA2MCxcbiAgICAgICAgICAgIENTVDogLTYgKiA2MCxcbiAgICAgICAgICAgIE1EVDogLTYgKiA2MCxcbiAgICAgICAgICAgIE1TVDogLTcgKiA2MCxcbiAgICAgICAgICAgIFBEVDogLTcgKiA2MCxcbiAgICAgICAgICAgIFBTVDogLTggKiA2MCxcbiAgICAgICAgfTtcblxuICAgIC8vIGRhdGUgZnJvbSBpc28gZm9ybWF0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUlTTyhjb25maWcpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgc3RyaW5nID0gY29uZmlnLl9pLFxuICAgICAgICAgICAgbWF0Y2ggPSBleHRlbmRlZElzb1JlZ2V4LmV4ZWMoc3RyaW5nKSB8fCBiYXNpY0lzb1JlZ2V4LmV4ZWMoc3RyaW5nKSxcbiAgICAgICAgICAgIGFsbG93VGltZSxcbiAgICAgICAgICAgIGRhdGVGb3JtYXQsXG4gICAgICAgICAgICB0aW1lRm9ybWF0LFxuICAgICAgICAgICAgdHpGb3JtYXQ7XG5cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pc28gPSB0cnVlO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gaXNvRGF0ZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzb0RhdGVzW2ldWzFdLmV4ZWMobWF0Y2hbMV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGVGb3JtYXQgPSBpc29EYXRlc1tpXVswXTtcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dUaW1lID0gaXNvRGF0ZXNbaV1bMl0gIT09IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0ZUZvcm1hdCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hdGNoWzNdKSB7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMCwgbCA9IGlzb1RpbWVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNvVGltZXNbaV1bMV0uZXhlYyhtYXRjaFszXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hdGNoWzJdIHNob3VsZCBiZSAnVCcgb3Igc3BhY2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVGb3JtYXQgPSAobWF0Y2hbMl0gfHwgJyAnKSArIGlzb1RpbWVzW2ldWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRpbWVGb3JtYXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghYWxsb3dUaW1lICYmIHRpbWVGb3JtYXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFs0XSkge1xuICAgICAgICAgICAgICAgIGlmICh0elJlZ2V4LmV4ZWMobWF0Y2hbNF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHR6Rm9ybWF0ID0gJ1onO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uZmlnLl9mID0gZGF0ZUZvcm1hdCArICh0aW1lRm9ybWF0IHx8ICcnKSArICh0ekZvcm1hdCB8fCAnJyk7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dHJhY3RGcm9tUkZDMjgyMlN0cmluZ3MoXG4gICAgICAgIHllYXJTdHIsXG4gICAgICAgIG1vbnRoU3RyLFxuICAgICAgICBkYXlTdHIsXG4gICAgICAgIGhvdXJTdHIsXG4gICAgICAgIG1pbnV0ZVN0cixcbiAgICAgICAgc2Vjb25kU3RyXG4gICAgKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXG4gICAgICAgICAgICB1bnRydW5jYXRlWWVhcih5ZWFyU3RyKSxcbiAgICAgICAgICAgIGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydC5pbmRleE9mKG1vbnRoU3RyKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGRheVN0ciwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQoaG91clN0ciwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQobWludXRlU3RyLCAxMCksXG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKHNlY29uZFN0cikge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gocGFyc2VJbnQoc2Vjb25kU3RyLCAxMCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1bnRydW5jYXRlWWVhcih5ZWFyU3RyKSB7XG4gICAgICAgIHZhciB5ZWFyID0gcGFyc2VJbnQoeWVhclN0ciwgMTApO1xuICAgICAgICBpZiAoeWVhciA8PSA0OSkge1xuICAgICAgICAgICAgcmV0dXJuIDIwMDAgKyB5ZWFyO1xuICAgICAgICB9IGVsc2UgaWYgKHllYXIgPD0gOTk5KSB7XG4gICAgICAgICAgICByZXR1cm4gMTkwMCArIHllYXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHllYXI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcHJvY2Vzc1JGQzI4MjIocykge1xuICAgICAgICAvLyBSZW1vdmUgY29tbWVudHMgYW5kIGZvbGRpbmcgd2hpdGVzcGFjZSBhbmQgcmVwbGFjZSBtdWx0aXBsZS1zcGFjZXMgd2l0aCBhIHNpbmdsZSBzcGFjZVxuICAgICAgICByZXR1cm4gc1xuICAgICAgICAgICAgLnJlcGxhY2UoL1xcKFteKV0qXFwpfFtcXG5cXHRdL2csICcgJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC8oXFxzXFxzKykvZywgJyAnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL15cXHNcXHMqLywgJycpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxzXFxzKiQvLCAnJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2tXZWVrZGF5KHdlZWtkYXlTdHIsIHBhcnNlZElucHV0LCBjb25maWcpIHtcbiAgICAgICAgaWYgKHdlZWtkYXlTdHIpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IFJlcGxhY2UgdGhlIHZhbmlsbGEgSlMgRGF0ZSBvYmplY3Qgd2l0aCBhbiBpbmRlcGVuZGVudCBkYXktb2Ytd2VlayBjaGVjay5cbiAgICAgICAgICAgIHZhciB3ZWVrZGF5UHJvdmlkZWQgPSBkZWZhdWx0TG9jYWxlV2Vla2RheXNTaG9ydC5pbmRleE9mKHdlZWtkYXlTdHIpLFxuICAgICAgICAgICAgICAgIHdlZWtkYXlBY3R1YWwgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkSW5wdXRbMF0sXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZElucHV0WzFdLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRJbnB1dFsyXVxuICAgICAgICAgICAgICAgICkuZ2V0RGF5KCk7XG4gICAgICAgICAgICBpZiAod2Vla2RheVByb3ZpZGVkICE9PSB3ZWVrZGF5QWN0dWFsKSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykud2Vla2RheU1pc21hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FsY3VsYXRlT2Zmc2V0KG9ic09mZnNldCwgbWlsaXRhcnlPZmZzZXQsIG51bU9mZnNldCkge1xuICAgICAgICBpZiAob2JzT2Zmc2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gb2JzT2Zmc2V0c1tvYnNPZmZzZXRdO1xuICAgICAgICB9IGVsc2UgaWYgKG1pbGl0YXJ5T2Zmc2V0KSB7XG4gICAgICAgICAgICAvLyB0aGUgb25seSBhbGxvd2VkIG1pbGl0YXJ5IHR6IGlzIFpcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGhtID0gcGFyc2VJbnQobnVtT2Zmc2V0LCAxMCksXG4gICAgICAgICAgICAgICAgbSA9IGhtICUgMTAwLFxuICAgICAgICAgICAgICAgIGggPSAoaG0gLSBtKSAvIDEwMDtcbiAgICAgICAgICAgIHJldHVybiBoICogNjAgKyBtO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGF0ZSBhbmQgdGltZSBmcm9tIHJlZiAyODIyIGZvcm1hdFxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21SRkMyODIyKGNvbmZpZykge1xuICAgICAgICB2YXIgbWF0Y2ggPSByZmMyODIyLmV4ZWMocHJlcHJvY2Vzc1JGQzI4MjIoY29uZmlnLl9pKSksXG4gICAgICAgICAgICBwYXJzZWRBcnJheTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBwYXJzZWRBcnJheSA9IGV4dHJhY3RGcm9tUkZDMjgyMlN0cmluZ3MoXG4gICAgICAgICAgICAgICAgbWF0Y2hbNF0sXG4gICAgICAgICAgICAgICAgbWF0Y2hbM10sXG4gICAgICAgICAgICAgICAgbWF0Y2hbMl0sXG4gICAgICAgICAgICAgICAgbWF0Y2hbNV0sXG4gICAgICAgICAgICAgICAgbWF0Y2hbNl0sXG4gICAgICAgICAgICAgICAgbWF0Y2hbN11cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoIWNoZWNrV2Vla2RheShtYXRjaFsxXSwgcGFyc2VkQXJyYXksIGNvbmZpZykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbmZpZy5fYSA9IHBhcnNlZEFycmF5O1xuICAgICAgICAgICAgY29uZmlnLl90em0gPSBjYWxjdWxhdGVPZmZzZXQobWF0Y2hbOF0sIG1hdGNoWzldLCBtYXRjaFsxMF0pO1xuXG4gICAgICAgICAgICBjb25maWcuX2QgPSBjcmVhdGVVVENEYXRlLmFwcGx5KG51bGwsIGNvbmZpZy5fYSk7XG4gICAgICAgICAgICBjb25maWcuX2Quc2V0VVRDTWludXRlcyhjb25maWcuX2QuZ2V0VVRDTWludXRlcygpIC0gY29uZmlnLl90em0pO1xuXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5yZmMyODIyID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGF0ZSBmcm9tIDEpIEFTUC5ORVQsIDIpIElTTywgMykgUkZDIDI4MjIgZm9ybWF0cywgb3IgNCkgb3B0aW9uYWwgZmFsbGJhY2sgaWYgcGFyc2luZyBpc24ndCBzdHJpY3RcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tU3RyaW5nKGNvbmZpZykge1xuICAgICAgICB2YXIgbWF0Y2hlZCA9IGFzcE5ldEpzb25SZWdleC5leGVjKGNvbmZpZy5faSk7XG4gICAgICAgIGlmIChtYXRjaGVkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZSgrbWF0Y2hlZFsxXSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWdGcm9tSVNPKGNvbmZpZyk7XG4gICAgICAgIGlmIChjb25maWcuX2lzVmFsaWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBkZWxldGUgY29uZmlnLl9pc1ZhbGlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnRnJvbVJGQzI4MjIoY29uZmlnKTtcbiAgICAgICAgaWYgKGNvbmZpZy5faXNWYWxpZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBjb25maWcuX2lzVmFsaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLl9zdHJpY3QpIHtcbiAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRmluYWwgYXR0ZW1wdCwgdXNlIElucHV0IEZhbGxiYWNrXG4gICAgICAgICAgICBob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaG9va3MuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2sgPSBkZXByZWNhdGUoXG4gICAgICAgICd2YWx1ZSBwcm92aWRlZCBpcyBub3QgaW4gYSByZWNvZ25pemVkIFJGQzI4MjIgb3IgSVNPIGZvcm1hdC4gbW9tZW50IGNvbnN0cnVjdGlvbiBmYWxscyBiYWNrIHRvIGpzIERhdGUoKSwgJyArXG4gICAgICAgICAgICAnd2hpY2ggaXMgbm90IHJlbGlhYmxlIGFjcm9zcyBhbGwgYnJvd3NlcnMgYW5kIHZlcnNpb25zLiBOb24gUkZDMjgyMi9JU08gZGF0ZSBmb3JtYXRzIGFyZSAnICtcbiAgICAgICAgICAgICdkaXNjb3VyYWdlZC4gUGxlYXNlIHJlZmVyIHRvIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvanMtZGF0ZS8gZm9yIG1vcmUgaW5mby4nLFxuICAgICAgICBmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShjb25maWcuX2kgKyAoY29uZmlnLl91c2VVVEMgPyAnIFVUQycgOiAnJykpO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8vIFBpY2sgdGhlIGZpcnN0IGRlZmluZWQgb2YgdHdvIG9yIHRocmVlIGFyZ3VtZW50cy5cbiAgICBmdW5jdGlvbiBkZWZhdWx0cyhhLCBiLCBjKSB7XG4gICAgICAgIGlmIChhICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICB9XG4gICAgICAgIGlmIChiICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGN1cnJlbnREYXRlQXJyYXkoY29uZmlnKSB7XG4gICAgICAgIC8vIGhvb2tzIGlzIGFjdHVhbGx5IHRoZSBleHBvcnRlZCBtb21lbnQgb2JqZWN0XG4gICAgICAgIHZhciBub3dWYWx1ZSA9IG5ldyBEYXRlKGhvb2tzLm5vdygpKTtcbiAgICAgICAgaWYgKGNvbmZpZy5fdXNlVVRDKSB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIG5vd1ZhbHVlLmdldFVUQ0Z1bGxZZWFyKCksXG4gICAgICAgICAgICAgICAgbm93VmFsdWUuZ2V0VVRDTW9udGgoKSxcbiAgICAgICAgICAgICAgICBub3dWYWx1ZS5nZXRVVENEYXRlKCksXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbbm93VmFsdWUuZ2V0RnVsbFllYXIoKSwgbm93VmFsdWUuZ2V0TW9udGgoKSwgbm93VmFsdWUuZ2V0RGF0ZSgpXTtcbiAgICB9XG5cbiAgICAvLyBjb252ZXJ0IGFuIGFycmF5IHRvIGEgZGF0ZS5cbiAgICAvLyB0aGUgYXJyYXkgc2hvdWxkIG1pcnJvciB0aGUgcGFyYW1ldGVycyBiZWxvd1xuICAgIC8vIG5vdGU6IGFsbCB2YWx1ZXMgcGFzdCB0aGUgeWVhciBhcmUgb3B0aW9uYWwgYW5kIHdpbGwgZGVmYXVsdCB0byB0aGUgbG93ZXN0IHBvc3NpYmxlIHZhbHVlLlxuICAgIC8vIFt5ZWFyLCBtb250aCwgZGF5ICwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kXVxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21BcnJheShjb25maWcpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgaW5wdXQgPSBbXSxcbiAgICAgICAgICAgIGN1cnJlbnREYXRlLFxuICAgICAgICAgICAgZXhwZWN0ZWRXZWVrZGF5LFxuICAgICAgICAgICAgeWVhclRvVXNlO1xuXG4gICAgICAgIGlmIChjb25maWcuX2QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnREYXRlID0gY3VycmVudERhdGVBcnJheShjb25maWcpO1xuXG4gICAgICAgIC8vY29tcHV0ZSBkYXkgb2YgdGhlIHllYXIgZnJvbSB3ZWVrcyBhbmQgd2Vla2RheXNcbiAgICAgICAgaWYgKGNvbmZpZy5fdyAmJiBjb25maWcuX2FbREFURV0gPT0gbnVsbCAmJiBjb25maWcuX2FbTU9OVEhdID09IG51bGwpIHtcbiAgICAgICAgICAgIGRheU9mWWVhckZyb21XZWVrSW5mbyhjb25maWcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9pZiB0aGUgZGF5IG9mIHRoZSB5ZWFyIGlzIHNldCwgZmlndXJlIG91dCB3aGF0IGl0IGlzXG4gICAgICAgIGlmIChjb25maWcuX2RheU9mWWVhciAhPSBudWxsKSB7XG4gICAgICAgICAgICB5ZWFyVG9Vc2UgPSBkZWZhdWx0cyhjb25maWcuX2FbWUVBUl0sIGN1cnJlbnREYXRlW1lFQVJdKTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID4gZGF5c0luWWVhcih5ZWFyVG9Vc2UpIHx8XG4gICAgICAgICAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPT09IDBcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLl9vdmVyZmxvd0RheU9mWWVhciA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRhdGUgPSBjcmVhdGVVVENEYXRlKHllYXJUb1VzZSwgMCwgY29uZmlnLl9kYXlPZlllYXIpO1xuICAgICAgICAgICAgY29uZmlnLl9hW01PTlRIXSA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtEQVRFXSA9IGRhdGUuZ2V0VVRDRGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGVmYXVsdCB0byBjdXJyZW50IGRhdGUuXG4gICAgICAgIC8vICogaWYgbm8geWVhciwgbW9udGgsIGRheSBvZiBtb250aCBhcmUgZ2l2ZW4sIGRlZmF1bHQgdG8gdG9kYXlcbiAgICAgICAgLy8gKiBpZiBkYXkgb2YgbW9udGggaXMgZ2l2ZW4sIGRlZmF1bHQgbW9udGggYW5kIHllYXJcbiAgICAgICAgLy8gKiBpZiBtb250aCBpcyBnaXZlbiwgZGVmYXVsdCBvbmx5IHllYXJcbiAgICAgICAgLy8gKiBpZiB5ZWFyIGlzIGdpdmVuLCBkb24ndCBkZWZhdWx0IGFueXRoaW5nXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAzICYmIGNvbmZpZy5fYVtpXSA9PSBudWxsOyArK2kpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtpXSA9IGlucHV0W2ldID0gY3VycmVudERhdGVbaV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBaZXJvIG91dCB3aGF0ZXZlciB3YXMgbm90IGRlZmF1bHRlZCwgaW5jbHVkaW5nIHRpbWVcbiAgICAgICAgZm9yICg7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtpXSA9IGlucHV0W2ldID1cbiAgICAgICAgICAgICAgICBjb25maWcuX2FbaV0gPT0gbnVsbCA/IChpID09PSAyID8gMSA6IDApIDogY29uZmlnLl9hW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgZm9yIDI0OjAwOjAwLjAwMFxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPT09IDI0ICYmXG4gICAgICAgICAgICBjb25maWcuX2FbTUlOVVRFXSA9PT0gMCAmJlxuICAgICAgICAgICAgY29uZmlnLl9hW1NFQ09ORF0gPT09IDAgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fYVtNSUxMSVNFQ09ORF0gPT09IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25maWcuX25leHREYXkgPSB0cnVlO1xuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZy5fZCA9IChjb25maWcuX3VzZVVUQyA/IGNyZWF0ZVVUQ0RhdGUgOiBjcmVhdGVEYXRlKS5hcHBseShcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICBpbnB1dFxuICAgICAgICApO1xuICAgICAgICBleHBlY3RlZFdlZWtkYXkgPSBjb25maWcuX3VzZVVUQ1xuICAgICAgICAgICAgPyBjb25maWcuX2QuZ2V0VVRDRGF5KClcbiAgICAgICAgICAgIDogY29uZmlnLl9kLmdldERheSgpO1xuXG4gICAgICAgIC8vIEFwcGx5IHRpbWV6b25lIG9mZnNldCBmcm9tIGlucHV0LiBUaGUgYWN0dWFsIHV0Y09mZnNldCBjYW4gYmUgY2hhbmdlZFxuICAgICAgICAvLyB3aXRoIHBhcnNlWm9uZS5cbiAgICAgICAgaWYgKGNvbmZpZy5fdHptICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZC5zZXRVVENNaW51dGVzKGNvbmZpZy5fZC5nZXRVVENNaW51dGVzKCkgLSBjb25maWcuX3R6bSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLl9uZXh0RGF5KSB7XG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPSAyNDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNoZWNrIGZvciBtaXNtYXRjaGluZyBkYXkgb2Ygd2Vla1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb25maWcuX3cgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjb25maWcuX3cuZCAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fdy5kICE9PSBleHBlY3RlZFdlZWtkYXlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS53ZWVrZGF5TWlzbWF0Y2ggPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGF5T2ZZZWFyRnJvbVdlZWtJbmZvKGNvbmZpZykge1xuICAgICAgICB2YXIgdywgd2Vla1llYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95LCB0ZW1wLCB3ZWVrZGF5T3ZlcmZsb3csIGN1cldlZWs7XG5cbiAgICAgICAgdyA9IGNvbmZpZy5fdztcbiAgICAgICAgaWYgKHcuR0cgIT0gbnVsbCB8fCB3LlcgIT0gbnVsbCB8fCB3LkUgIT0gbnVsbCkge1xuICAgICAgICAgICAgZG93ID0gMTtcbiAgICAgICAgICAgIGRveSA9IDQ7XG5cbiAgICAgICAgICAgIC8vIFRPRE86IFdlIG5lZWQgdG8gdGFrZSB0aGUgY3VycmVudCBpc29XZWVrWWVhciwgYnV0IHRoYXQgZGVwZW5kcyBvblxuICAgICAgICAgICAgLy8gaG93IHdlIGludGVycHJldCBub3cgKGxvY2FsLCB1dGMsIGZpeGVkIG9mZnNldCkuIFNvIGNyZWF0ZVxuICAgICAgICAgICAgLy8gYSBub3cgdmVyc2lvbiBvZiBjdXJyZW50IGNvbmZpZyAodGFrZSBsb2NhbC91dGMvb2Zmc2V0IGZsYWdzLCBhbmRcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBub3cpLlxuICAgICAgICAgICAgd2Vla1llYXIgPSBkZWZhdWx0cyhcbiAgICAgICAgICAgICAgICB3LkdHLFxuICAgICAgICAgICAgICAgIGNvbmZpZy5fYVtZRUFSXSxcbiAgICAgICAgICAgICAgICB3ZWVrT2ZZZWFyKGNyZWF0ZUxvY2FsKCksIDEsIDQpLnllYXJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB3ZWVrID0gZGVmYXVsdHMody5XLCAxKTtcbiAgICAgICAgICAgIHdlZWtkYXkgPSBkZWZhdWx0cyh3LkUsIDEpO1xuICAgICAgICAgICAgaWYgKHdlZWtkYXkgPCAxIHx8IHdlZWtkYXkgPiA3KSB7XG4gICAgICAgICAgICAgICAgd2Vla2RheU92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRvdyA9IGNvbmZpZy5fbG9jYWxlLl93ZWVrLmRvdztcbiAgICAgICAgICAgIGRveSA9IGNvbmZpZy5fbG9jYWxlLl93ZWVrLmRveTtcblxuICAgICAgICAgICAgY3VyV2VlayA9IHdlZWtPZlllYXIoY3JlYXRlTG9jYWwoKSwgZG93LCBkb3kpO1xuXG4gICAgICAgICAgICB3ZWVrWWVhciA9IGRlZmF1bHRzKHcuZ2csIGNvbmZpZy5fYVtZRUFSXSwgY3VyV2Vlay55ZWFyKTtcblxuICAgICAgICAgICAgLy8gRGVmYXVsdCB0byBjdXJyZW50IHdlZWsuXG4gICAgICAgICAgICB3ZWVrID0gZGVmYXVsdHMody53LCBjdXJXZWVrLndlZWspO1xuXG4gICAgICAgICAgICBpZiAody5kICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyB3ZWVrZGF5IC0tIGxvdyBkYXkgbnVtYmVycyBhcmUgY29uc2lkZXJlZCBuZXh0IHdlZWtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5ID0gdy5kO1xuICAgICAgICAgICAgICAgIGlmICh3ZWVrZGF5IDwgMCB8fCB3ZWVrZGF5ID4gNikge1xuICAgICAgICAgICAgICAgICAgICB3ZWVrZGF5T3ZlcmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAody5lICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBsb2NhbCB3ZWVrZGF5IC0tIGNvdW50aW5nIHN0YXJ0cyBmcm9tIGJlZ2lubmluZyBvZiB3ZWVrXG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IHcuZSArIGRvdztcbiAgICAgICAgICAgICAgICBpZiAody5lIDwgMCB8fCB3LmUgPiA2KSB7XG4gICAgICAgICAgICAgICAgICAgIHdlZWtkYXlPdmVyZmxvdyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBkZWZhdWx0IHRvIGJlZ2lubmluZyBvZiB3ZWVrXG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IGRvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAod2VlayA8IDEgfHwgd2VlayA+IHdlZWtzSW5ZZWFyKHdlZWtZZWFyLCBkb3csIGRveSkpIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLl9vdmVyZmxvd1dlZWtzID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh3ZWVrZGF5T3ZlcmZsb3cgIT0gbnVsbCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuX292ZXJmbG93V2Vla2RheSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0ZW1wID0gZGF5T2ZZZWFyRnJvbVdlZWtzKHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSk7XG4gICAgICAgICAgICBjb25maWcuX2FbWUVBUl0gPSB0ZW1wLnllYXI7XG4gICAgICAgICAgICBjb25maWcuX2RheU9mWWVhciA9IHRlbXAuZGF5T2ZZZWFyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gY29uc3RhbnQgdGhhdCByZWZlcnMgdG8gdGhlIElTTyBzdGFuZGFyZFxuICAgIGhvb2tzLklTT184NjAxID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAvLyBjb25zdGFudCB0aGF0IHJlZmVycyB0byB0aGUgUkZDIDI4MjIgZm9ybVxuICAgIGhvb2tzLlJGQ18yODIyID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAvLyBkYXRlIGZyb20gc3RyaW5nIGFuZCBmb3JtYXQgc3RyaW5nXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpIHtcbiAgICAgICAgLy8gVE9ETzogTW92ZSB0aGlzIHRvIGFub3RoZXIgcGFydCBvZiB0aGUgY3JlYXRpb24gZmxvdyB0byBwcmV2ZW50IGNpcmN1bGFyIGRlcHNcbiAgICAgICAgaWYgKGNvbmZpZy5fZiA9PT0gaG9va3MuSVNPXzg2MDEpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21JU08oY29uZmlnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlnLl9mID09PSBob29rcy5SRkNfMjgyMikge1xuICAgICAgICAgICAgY29uZmlnRnJvbVJGQzI4MjIoY29uZmlnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25maWcuX2EgPSBbXTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZW1wdHkgPSB0cnVlO1xuXG4gICAgICAgIC8vIFRoaXMgYXJyYXkgaXMgdXNlZCB0byBtYWtlIGEgRGF0ZSwgZWl0aGVyIHdpdGggYG5ldyBEYXRlYCBvciBgRGF0ZS5VVENgXG4gICAgICAgIHZhciBzdHJpbmcgPSAnJyArIGNvbmZpZy5faSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBwYXJzZWRJbnB1dCxcbiAgICAgICAgICAgIHRva2VucyxcbiAgICAgICAgICAgIHRva2VuLFxuICAgICAgICAgICAgc2tpcHBlZCxcbiAgICAgICAgICAgIHN0cmluZ0xlbmd0aCA9IHN0cmluZy5sZW5ndGgsXG4gICAgICAgICAgICB0b3RhbFBhcnNlZElucHV0TGVuZ3RoID0gMCxcbiAgICAgICAgICAgIGVyYTtcblxuICAgICAgICB0b2tlbnMgPVxuICAgICAgICAgICAgZXhwYW5kRm9ybWF0KGNvbmZpZy5fZiwgY29uZmlnLl9sb2NhbGUpLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnMpIHx8IFtdO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2ldO1xuICAgICAgICAgICAgcGFyc2VkSW5wdXQgPSAoc3RyaW5nLm1hdGNoKGdldFBhcnNlUmVnZXhGb3JUb2tlbih0b2tlbiwgY29uZmlnKSkgfHxcbiAgICAgICAgICAgICAgICBbXSlbMF07XG4gICAgICAgICAgICBpZiAocGFyc2VkSW5wdXQpIHtcbiAgICAgICAgICAgICAgICBza2lwcGVkID0gc3RyaW5nLnN1YnN0cigwLCBzdHJpbmcuaW5kZXhPZihwYXJzZWRJbnB1dCkpO1xuICAgICAgICAgICAgICAgIGlmIChza2lwcGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkSW5wdXQucHVzaChza2lwcGVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnNsaWNlKFxuICAgICAgICAgICAgICAgICAgICBzdHJpbmcuaW5kZXhPZihwYXJzZWRJbnB1dCkgKyBwYXJzZWRJbnB1dC5sZW5ndGhcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRvdGFsUGFyc2VkSW5wdXRMZW5ndGggKz0gcGFyc2VkSW5wdXQubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZG9uJ3QgcGFyc2UgaWYgaXQncyBub3QgYSBrbm93biB0b2tlblxuICAgICAgICAgICAgaWYgKGZvcm1hdFRva2VuRnVuY3Rpb25zW3Rva2VuXSkge1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZWRJbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5lbXB0eSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZFRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYWRkVGltZVRvQXJyYXlGcm9tVG9rZW4odG9rZW4sIHBhcnNlZElucHV0LCBjb25maWcpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb25maWcuX3N0cmljdCAmJiAhcGFyc2VkSW5wdXQpIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRUb2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhZGQgcmVtYWluaW5nIHVucGFyc2VkIGlucHV0IGxlbmd0aCB0byB0aGUgc3RyaW5nXG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmNoYXJzTGVmdE92ZXIgPVxuICAgICAgICAgICAgc3RyaW5nTGVuZ3RoIC0gdG90YWxQYXJzZWRJbnB1dExlbmd0aDtcbiAgICAgICAgaWYgKHN0cmluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRJbnB1dC5wdXNoKHN0cmluZyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjbGVhciBfMTJoIGZsYWcgaWYgaG91ciBpcyA8PSAxMlxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPD0gMTIgJiZcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPT09IHRydWUgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA+IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykucGFyc2VkRGF0ZVBhcnRzID0gY29uZmlnLl9hLnNsaWNlKDApO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5tZXJpZGllbSA9IGNvbmZpZy5fbWVyaWRpZW07XG4gICAgICAgIC8vIGhhbmRsZSBtZXJpZGllbVxuICAgICAgICBjb25maWcuX2FbSE9VUl0gPSBtZXJpZGllbUZpeFdyYXAoXG4gICAgICAgICAgICBjb25maWcuX2xvY2FsZSxcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSxcbiAgICAgICAgICAgIGNvbmZpZy5fbWVyaWRpZW1cbiAgICAgICAgKTtcblxuICAgICAgICAvLyBoYW5kbGUgZXJhXG4gICAgICAgIGVyYSA9IGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVyYTtcbiAgICAgICAgaWYgKGVyYSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uZmlnLl9hW1lFQVJdID0gY29uZmlnLl9sb2NhbGUuZXJhc0NvbnZlcnRZZWFyKGVyYSwgY29uZmlnLl9hW1lFQVJdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZ0Zyb21BcnJheShjb25maWcpO1xuICAgICAgICBjaGVja092ZXJmbG93KGNvbmZpZyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWVyaWRpZW1GaXhXcmFwKGxvY2FsZSwgaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgdmFyIGlzUG07XG5cbiAgICAgICAgaWYgKG1lcmlkaWVtID09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIG5vdGhpbmcgdG8gZG9cbiAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbGUubWVyaWRpZW1Ib3VyICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbGUubWVyaWRpZW1Ib3VyKGhvdXIsIG1lcmlkaWVtKTtcbiAgICAgICAgfSBlbHNlIGlmIChsb2NhbGUuaXNQTSAhPSBudWxsKSB7XG4gICAgICAgICAgICAvLyBGYWxsYmFja1xuICAgICAgICAgICAgaXNQbSA9IGxvY2FsZS5pc1BNKG1lcmlkaWVtKTtcbiAgICAgICAgICAgIGlmIChpc1BtICYmIGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWlzUG0gJiYgaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyBub3Qgc3VwcG9zZWQgdG8gaGFwcGVuXG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgZnJvbSBzdHJpbmcgYW5kIGFycmF5IG9mIGZvcm1hdCBzdHJpbmdzXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVN0cmluZ0FuZEFycmF5KGNvbmZpZykge1xuICAgICAgICB2YXIgdGVtcENvbmZpZyxcbiAgICAgICAgICAgIGJlc3RNb21lbnQsXG4gICAgICAgICAgICBzY29yZVRvQmVhdCxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBjdXJyZW50U2NvcmUsXG4gICAgICAgICAgICB2YWxpZEZvcm1hdEZvdW5kLFxuICAgICAgICAgICAgYmVzdEZvcm1hdElzVmFsaWQgPSBmYWxzZTtcblxuICAgICAgICBpZiAoY29uZmlnLl9mLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZEZvcm1hdCA9IHRydWU7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShOYU4pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbmZpZy5fZi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY3VycmVudFNjb3JlID0gMDtcbiAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRlbXBDb25maWcgPSBjb3B5Q29uZmlnKHt9LCBjb25maWcpO1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5fdXNlVVRDICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0ZW1wQ29uZmlnLl91c2VVVEMgPSBjb25maWcuX3VzZVVUQztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRlbXBDb25maWcuX2YgPSBjb25maWcuX2ZbaV07XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KHRlbXBDb25maWcpO1xuXG4gICAgICAgICAgICBpZiAoaXNWYWxpZCh0ZW1wQ29uZmlnKSkge1xuICAgICAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbnkgaW5wdXQgdGhhdCB3YXMgbm90IHBhcnNlZCBhZGQgYSBwZW5hbHR5IGZvciB0aGF0IGZvcm1hdFxuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5jaGFyc0xlZnRPdmVyO1xuXG4gICAgICAgICAgICAvL29yIHRva2Vuc1xuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS51bnVzZWRUb2tlbnMubGVuZ3RoICogMTA7XG5cbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5zY29yZSA9IGN1cnJlbnRTY29yZTtcblxuICAgICAgICAgICAgaWYgKCFiZXN0Rm9ybWF0SXNWYWxpZCkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgc2NvcmVUb0JlYXQgPT0gbnVsbCB8fFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcmUgPCBzY29yZVRvQmVhdCB8fFxuICAgICAgICAgICAgICAgICAgICB2YWxpZEZvcm1hdEZvdW5kXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3JlVG9CZWF0ID0gY3VycmVudFNjb3JlO1xuICAgICAgICAgICAgICAgICAgICBiZXN0TW9tZW50ID0gdGVtcENvbmZpZztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkRm9ybWF0Rm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlc3RGb3JtYXRJc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRTY29yZSA8IHNjb3JlVG9CZWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3JlVG9CZWF0ID0gY3VycmVudFNjb3JlO1xuICAgICAgICAgICAgICAgICAgICBiZXN0TW9tZW50ID0gdGVtcENvbmZpZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBleHRlbmQoY29uZmlnLCBiZXN0TW9tZW50IHx8IHRlbXBDb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21PYmplY3QoY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcuX2QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpID0gbm9ybWFsaXplT2JqZWN0VW5pdHMoY29uZmlnLl9pKSxcbiAgICAgICAgICAgIGRheU9yRGF0ZSA9IGkuZGF5ID09PSB1bmRlZmluZWQgPyBpLmRhdGUgOiBpLmRheTtcbiAgICAgICAgY29uZmlnLl9hID0gbWFwKFxuICAgICAgICAgICAgW2kueWVhciwgaS5tb250aCwgZGF5T3JEYXRlLCBpLmhvdXIsIGkubWludXRlLCBpLnNlY29uZCwgaS5taWxsaXNlY29uZF0sXG4gICAgICAgICAgICBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iaiAmJiBwYXJzZUludChvYmosIDEwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVGcm9tQ29uZmlnKGNvbmZpZykge1xuICAgICAgICB2YXIgcmVzID0gbmV3IE1vbWVudChjaGVja092ZXJmbG93KHByZXBhcmVDb25maWcoY29uZmlnKSkpO1xuICAgICAgICBpZiAocmVzLl9uZXh0RGF5KSB7XG4gICAgICAgICAgICAvLyBBZGRpbmcgaXMgc21hcnQgZW5vdWdoIGFyb3VuZCBEU1RcbiAgICAgICAgICAgIHJlcy5hZGQoMSwgJ2QnKTtcbiAgICAgICAgICAgIHJlcy5fbmV4dERheSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcGFyZUNvbmZpZyhjb25maWcpIHtcbiAgICAgICAgdmFyIGlucHV0ID0gY29uZmlnLl9pLFxuICAgICAgICAgICAgZm9ybWF0ID0gY29uZmlnLl9mO1xuXG4gICAgICAgIGNvbmZpZy5fbG9jYWxlID0gY29uZmlnLl9sb2NhbGUgfHwgZ2V0TG9jYWxlKGNvbmZpZy5fbCk7XG5cbiAgICAgICAgaWYgKGlucHV0ID09PSBudWxsIHx8IChmb3JtYXQgPT09IHVuZGVmaW5lZCAmJiBpbnB1dCA9PT0gJycpKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlSW52YWxpZCh7IG51bGxJbnB1dDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25maWcuX2kgPSBpbnB1dCA9IGNvbmZpZy5fbG9jYWxlLnByZXBhcnNlKGlucHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc01vbWVudChpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9tZW50KGNoZWNrT3ZlcmZsb3coaW5wdXQpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBpbnB1dDtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheShjb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCkge1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnRnJvbUlucHV0KGNvbmZpZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzVmFsaWQoY29uZmlnKSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUlucHV0KGNvbmZpZykge1xuICAgICAgICB2YXIgaW5wdXQgPSBjb25maWcuX2k7XG4gICAgICAgIGlmIChpc1VuZGVmaW5lZChpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGhvb2tzLm5vdygpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShpbnB1dC52YWx1ZU9mKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmcoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9hID0gbWFwKGlucHV0LnNsaWNlKDApLCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KG9iaiwgMTApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdChpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21PYmplY3QoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihpbnB1dCkpIHtcbiAgICAgICAgICAgIC8vIGZyb20gbWlsbGlzZWNvbmRzXG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShpbnB1dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgaXNVVEMpIHtcbiAgICAgICAgdmFyIGMgPSB7fTtcblxuICAgICAgICBpZiAoZm9ybWF0ID09PSB0cnVlIHx8IGZvcm1hdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHN0cmljdCA9IGZvcm1hdDtcbiAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsb2NhbGUgPT09IHRydWUgfHwgbG9jYWxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgc3RyaWN0ID0gbG9jYWxlO1xuICAgICAgICAgICAgbG9jYWxlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGlzT2JqZWN0KGlucHV0KSAmJiBpc09iamVjdEVtcHR5KGlucHV0KSkgfHxcbiAgICAgICAgICAgIChpc0FycmF5KGlucHV0KSAmJiBpbnB1dC5sZW5ndGggPT09IDApXG4gICAgICAgICkge1xuICAgICAgICAgICAgaW5wdXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gb2JqZWN0IGNvbnN0cnVjdGlvbiBtdXN0IGJlIGRvbmUgdGhpcyB3YXkuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8xNDIzXG4gICAgICAgIGMuX2lzQU1vbWVudE9iamVjdCA9IHRydWU7XG4gICAgICAgIGMuX3VzZVVUQyA9IGMuX2lzVVRDID0gaXNVVEM7XG4gICAgICAgIGMuX2wgPSBsb2NhbGU7XG4gICAgICAgIGMuX2kgPSBpbnB1dDtcbiAgICAgICAgYy5fZiA9IGZvcm1hdDtcbiAgICAgICAgYy5fc3RyaWN0ID0gc3RyaWN0O1xuXG4gICAgICAgIHJldHVybiBjcmVhdGVGcm9tQ29uZmlnKGMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUxvY2FsKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbE9yVVRDKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvdHlwZU1pbiA9IGRlcHJlY2F0ZShcbiAgICAgICAgICAgICdtb21lbnQoKS5taW4gaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5tYXggaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LycsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciA8IHRoaXMgPyB0aGlzIDogb3RoZXI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIHByb3RvdHlwZU1heCA9IGRlcHJlY2F0ZShcbiAgICAgICAgICAgICdtb21lbnQoKS5tYXggaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5taW4gaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LycsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciA+IHRoaXMgPyB0aGlzIDogb3RoZXI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAvLyBQaWNrIGEgbW9tZW50IG0gZnJvbSBtb21lbnRzIHNvIHRoYXQgbVtmbl0ob3RoZXIpIGlzIHRydWUgZm9yIGFsbFxuICAgIC8vIG90aGVyLiBUaGlzIHJlbGllcyBvbiB0aGUgZnVuY3Rpb24gZm4gdG8gYmUgdHJhbnNpdGl2ZS5cbiAgICAvL1xuICAgIC8vIG1vbWVudHMgc2hvdWxkIGVpdGhlciBiZSBhbiBhcnJheSBvZiBtb21lbnQgb2JqZWN0cyBvciBhbiBhcnJheSwgd2hvc2VcbiAgICAvLyBmaXJzdCBlbGVtZW50IGlzIGFuIGFycmF5IG9mIG1vbWVudCBvYmplY3RzLlxuICAgIGZ1bmN0aW9uIHBpY2tCeShmbiwgbW9tZW50cykge1xuICAgICAgICB2YXIgcmVzLCBpO1xuICAgICAgICBpZiAobW9tZW50cy5sZW5ndGggPT09IDEgJiYgaXNBcnJheShtb21lbnRzWzBdKSkge1xuICAgICAgICAgICAgbW9tZW50cyA9IG1vbWVudHNbMF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtb21lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzID0gbW9tZW50c1swXTtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IG1vbWVudHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGlmICghbW9tZW50c1tpXS5pc1ZhbGlkKCkgfHwgbW9tZW50c1tpXVtmbl0ocmVzKSkge1xuICAgICAgICAgICAgICAgIHJlcyA9IG1vbWVudHNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBVc2UgW10uc29ydCBpbnN0ZWFkP1xuICAgIGZ1bmN0aW9uIG1pbigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG5cbiAgICAgICAgcmV0dXJuIHBpY2tCeSgnaXNCZWZvcmUnLCBhcmdzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXgoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuXG4gICAgICAgIHJldHVybiBwaWNrQnkoJ2lzQWZ0ZXInLCBhcmdzKTtcbiAgICB9XG5cbiAgICB2YXIgbm93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gRGF0ZS5ub3cgPyBEYXRlLm5vdygpIDogK25ldyBEYXRlKCk7XG4gICAgfTtcblxuICAgIHZhciBvcmRlcmluZyA9IFtcbiAgICAgICAgJ3llYXInLFxuICAgICAgICAncXVhcnRlcicsXG4gICAgICAgICdtb250aCcsXG4gICAgICAgICd3ZWVrJyxcbiAgICAgICAgJ2RheScsXG4gICAgICAgICdob3VyJyxcbiAgICAgICAgJ21pbnV0ZScsXG4gICAgICAgICdzZWNvbmQnLFxuICAgICAgICAnbWlsbGlzZWNvbmQnLFxuICAgIF07XG5cbiAgICBmdW5jdGlvbiBpc0R1cmF0aW9uVmFsaWQobSkge1xuICAgICAgICB2YXIga2V5LFxuICAgICAgICAgICAgdW5pdEhhc0RlY2ltYWwgPSBmYWxzZSxcbiAgICAgICAgICAgIGk7XG4gICAgICAgIGZvciAoa2V5IGluIG0pIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBoYXNPd25Qcm9wKG0sIGtleSkgJiZcbiAgICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgICAgICBpbmRleE9mLmNhbGwob3JkZXJpbmcsIGtleSkgIT09IC0xICYmXG4gICAgICAgICAgICAgICAgICAgIChtW2tleV0gPT0gbnVsbCB8fCAhaXNOYU4obVtrZXldKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgb3JkZXJpbmcubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGlmIChtW29yZGVyaW5nW2ldXSkge1xuICAgICAgICAgICAgICAgIGlmICh1bml0SGFzRGVjaW1hbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIG9ubHkgYWxsb3cgbm9uLWludGVnZXJzIGZvciBzbWFsbGVzdCB1bml0XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwYXJzZUZsb2F0KG1bb3JkZXJpbmdbaV1dKSAhPT0gdG9JbnQobVtvcmRlcmluZ1tpXV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHVuaXRIYXNEZWNpbWFsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1ZhbGlkJDEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1ZhbGlkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUludmFsaWQkMSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUR1cmF0aW9uKE5hTik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gRHVyYXRpb24oZHVyYXRpb24pIHtcbiAgICAgICAgdmFyIG5vcm1hbGl6ZWRJbnB1dCA9IG5vcm1hbGl6ZU9iamVjdFVuaXRzKGR1cmF0aW9uKSxcbiAgICAgICAgICAgIHllYXJzID0gbm9ybWFsaXplZElucHV0LnllYXIgfHwgMCxcbiAgICAgICAgICAgIHF1YXJ0ZXJzID0gbm9ybWFsaXplZElucHV0LnF1YXJ0ZXIgfHwgMCxcbiAgICAgICAgICAgIG1vbnRocyA9IG5vcm1hbGl6ZWRJbnB1dC5tb250aCB8fCAwLFxuICAgICAgICAgICAgd2Vla3MgPSBub3JtYWxpemVkSW5wdXQud2VlayB8fCBub3JtYWxpemVkSW5wdXQuaXNvV2VlayB8fCAwLFxuICAgICAgICAgICAgZGF5cyA9IG5vcm1hbGl6ZWRJbnB1dC5kYXkgfHwgMCxcbiAgICAgICAgICAgIGhvdXJzID0gbm9ybWFsaXplZElucHV0LmhvdXIgfHwgMCxcbiAgICAgICAgICAgIG1pbnV0ZXMgPSBub3JtYWxpemVkSW5wdXQubWludXRlIHx8IDAsXG4gICAgICAgICAgICBzZWNvbmRzID0gbm9ybWFsaXplZElucHV0LnNlY29uZCB8fCAwLFxuICAgICAgICAgICAgbWlsbGlzZWNvbmRzID0gbm9ybWFsaXplZElucHV0Lm1pbGxpc2Vjb25kIHx8IDA7XG5cbiAgICAgICAgdGhpcy5faXNWYWxpZCA9IGlzRHVyYXRpb25WYWxpZChub3JtYWxpemVkSW5wdXQpO1xuXG4gICAgICAgIC8vIHJlcHJlc2VudGF0aW9uIGZvciBkYXRlQWRkUmVtb3ZlXG4gICAgICAgIHRoaXMuX21pbGxpc2Vjb25kcyA9XG4gICAgICAgICAgICArbWlsbGlzZWNvbmRzICtcbiAgICAgICAgICAgIHNlY29uZHMgKiAxZTMgKyAvLyAxMDAwXG4gICAgICAgICAgICBtaW51dGVzICogNmU0ICsgLy8gMTAwMCAqIDYwXG4gICAgICAgICAgICBob3VycyAqIDEwMDAgKiA2MCAqIDYwOyAvL3VzaW5nIDEwMDAgKiA2MCAqIDYwIGluc3RlYWQgb2YgMzZlNSB0byBhdm9pZCBmbG9hdGluZyBwb2ludCByb3VuZGluZyBlcnJvcnMgaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvaXNzdWVzLzI5NzhcbiAgICAgICAgLy8gQmVjYXVzZSBvZiBkYXRlQWRkUmVtb3ZlIHRyZWF0cyAyNCBob3VycyBhcyBkaWZmZXJlbnQgZnJvbSBhXG4gICAgICAgIC8vIGRheSB3aGVuIHdvcmtpbmcgYXJvdW5kIERTVCwgd2UgbmVlZCB0byBzdG9yZSB0aGVtIHNlcGFyYXRlbHlcbiAgICAgICAgdGhpcy5fZGF5cyA9ICtkYXlzICsgd2Vla3MgKiA3O1xuICAgICAgICAvLyBJdCBpcyBpbXBvc3NpYmxlIHRvIHRyYW5zbGF0ZSBtb250aHMgaW50byBkYXlzIHdpdGhvdXQga25vd2luZ1xuICAgICAgICAvLyB3aGljaCBtb250aHMgeW91IGFyZSBhcmUgdGFsa2luZyBhYm91dCwgc28gd2UgaGF2ZSB0byBzdG9yZVxuICAgICAgICAvLyBpdCBzZXBhcmF0ZWx5LlxuICAgICAgICB0aGlzLl9tb250aHMgPSArbW9udGhzICsgcXVhcnRlcnMgKiAzICsgeWVhcnMgKiAxMjtcblxuICAgICAgICB0aGlzLl9kYXRhID0ge307XG5cbiAgICAgICAgdGhpcy5fbG9jYWxlID0gZ2V0TG9jYWxlKCk7XG5cbiAgICAgICAgdGhpcy5fYnViYmxlKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNEdXJhdGlvbihvYmopIHtcbiAgICAgICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIER1cmF0aW9uO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFic1JvdW5kKG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoLTEgKiBudW1iZXIpICogLTE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gY29tcGFyZSB0d28gYXJyYXlzLCByZXR1cm4gdGhlIG51bWJlciBvZiBkaWZmZXJlbmNlc1xuICAgIGZ1bmN0aW9uIGNvbXBhcmVBcnJheXMoYXJyYXkxLCBhcnJheTIsIGRvbnRDb252ZXJ0KSB7XG4gICAgICAgIHZhciBsZW4gPSBNYXRoLm1pbihhcnJheTEubGVuZ3RoLCBhcnJheTIubGVuZ3RoKSxcbiAgICAgICAgICAgIGxlbmd0aERpZmYgPSBNYXRoLmFicyhhcnJheTEubGVuZ3RoIC0gYXJyYXkyLmxlbmd0aCksXG4gICAgICAgICAgICBkaWZmcyA9IDAsXG4gICAgICAgICAgICBpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAoZG9udENvbnZlcnQgJiYgYXJyYXkxW2ldICE9PSBhcnJheTJbaV0pIHx8XG4gICAgICAgICAgICAgICAgKCFkb250Q29udmVydCAmJiB0b0ludChhcnJheTFbaV0pICE9PSB0b0ludChhcnJheTJbaV0pKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZGlmZnMrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGlmZnMgKyBsZW5ndGhEaWZmO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGZ1bmN0aW9uIG9mZnNldCh0b2tlbiwgc2VwYXJhdG9yKSB7XG4gICAgICAgIGFkZEZvcm1hdFRva2VuKHRva2VuLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdGhpcy51dGNPZmZzZXQoKSxcbiAgICAgICAgICAgICAgICBzaWduID0gJysnO1xuICAgICAgICAgICAgaWYgKG9mZnNldCA8IDApIHtcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSAtb2Zmc2V0O1xuICAgICAgICAgICAgICAgIHNpZ24gPSAnLSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHNpZ24gK1xuICAgICAgICAgICAgICAgIHplcm9GaWxsKH5+KG9mZnNldCAvIDYwKSwgMikgK1xuICAgICAgICAgICAgICAgIHNlcGFyYXRvciArXG4gICAgICAgICAgICAgICAgemVyb0ZpbGwofn5vZmZzZXQgJSA2MCwgMilcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9mZnNldCgnWicsICc6Jyk7XG4gICAgb2Zmc2V0KCdaWicsICcnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1onLCBtYXRjaFNob3J0T2Zmc2V0KTtcbiAgICBhZGRSZWdleFRva2VuKCdaWicsIG1hdGNoU2hvcnRPZmZzZXQpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydaJywgJ1paJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX3VzZVVUQyA9IHRydWU7XG4gICAgICAgIGNvbmZpZy5fdHptID0gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaFNob3J0T2Zmc2V0LCBpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICAvLyB0aW1lem9uZSBjaHVua2VyXG4gICAgLy8gJysxMDowMCcgPiBbJzEwJywgICcwMCddXG4gICAgLy8gJy0xNTMwJyAgPiBbJy0xNScsICczMCddXG4gICAgdmFyIGNodW5rT2Zmc2V0ID0gLyhbXFwrXFwtXXxcXGRcXGQpL2dpO1xuXG4gICAgZnVuY3Rpb24gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaGVyLCBzdHJpbmcpIHtcbiAgICAgICAgdmFyIG1hdGNoZXMgPSAoc3RyaW5nIHx8ICcnKS5tYXRjaChtYXRjaGVyKSxcbiAgICAgICAgICAgIGNodW5rLFxuICAgICAgICAgICAgcGFydHMsXG4gICAgICAgICAgICBtaW51dGVzO1xuXG4gICAgICAgIGlmIChtYXRjaGVzID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNodW5rID0gbWF0Y2hlc1ttYXRjaGVzLmxlbmd0aCAtIDFdIHx8IFtdO1xuICAgICAgICBwYXJ0cyA9IChjaHVuayArICcnKS5tYXRjaChjaHVua09mZnNldCkgfHwgWyctJywgMCwgMF07XG4gICAgICAgIG1pbnV0ZXMgPSArKHBhcnRzWzFdICogNjApICsgdG9JbnQocGFydHNbMl0pO1xuXG4gICAgICAgIHJldHVybiBtaW51dGVzID09PSAwID8gMCA6IHBhcnRzWzBdID09PSAnKycgPyBtaW51dGVzIDogLW1pbnV0ZXM7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGEgbW9tZW50IGZyb20gaW5wdXQsIHRoYXQgaXMgbG9jYWwvdXRjL3pvbmUgZXF1aXZhbGVudCB0byBtb2RlbC5cbiAgICBmdW5jdGlvbiBjbG9uZVdpdGhPZmZzZXQoaW5wdXQsIG1vZGVsKSB7XG4gICAgICAgIHZhciByZXMsIGRpZmY7XG4gICAgICAgIGlmIChtb2RlbC5faXNVVEMpIHtcbiAgICAgICAgICAgIHJlcyA9IG1vZGVsLmNsb25lKCk7XG4gICAgICAgICAgICBkaWZmID1cbiAgICAgICAgICAgICAgICAoaXNNb21lbnQoaW5wdXQpIHx8IGlzRGF0ZShpbnB1dClcbiAgICAgICAgICAgICAgICAgICAgPyBpbnB1dC52YWx1ZU9mKClcbiAgICAgICAgICAgICAgICAgICAgOiBjcmVhdGVMb2NhbChpbnB1dCkudmFsdWVPZigpKSAtIHJlcy52YWx1ZU9mKCk7XG4gICAgICAgICAgICAvLyBVc2UgbG93LWxldmVsIGFwaSwgYmVjYXVzZSB0aGlzIGZuIGlzIGxvdy1sZXZlbCBhcGkuXG4gICAgICAgICAgICByZXMuX2Quc2V0VGltZShyZXMuX2QudmFsdWVPZigpICsgZGlmZik7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQocmVzLCBmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKGlucHV0KS5sb2NhbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RGF0ZU9mZnNldChtKSB7XG4gICAgICAgIC8vIE9uIEZpcmVmb3guMjQgRGF0ZSNnZXRUaW1lem9uZU9mZnNldCByZXR1cm5zIGEgZmxvYXRpbmcgcG9pbnQuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L3B1bGwvMTg3MVxuICAgICAgICByZXR1cm4gLU1hdGgucm91bmQobS5fZC5nZXRUaW1lem9uZU9mZnNldCgpKTtcbiAgICB9XG5cbiAgICAvLyBIT09LU1xuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciBhIG1vbWVudCBpcyBtdXRhdGVkLlxuICAgIC8vIEl0IGlzIGludGVuZGVkIHRvIGtlZXAgdGhlIG9mZnNldCBpbiBzeW5jIHdpdGggdGhlIHRpbWV6b25lLlxuICAgIGhvb2tzLnVwZGF0ZU9mZnNldCA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgLy8ga2VlcExvY2FsVGltZSA9IHRydWUgbWVhbnMgb25seSBjaGFuZ2UgdGhlIHRpbWV6b25lLCB3aXRob3V0XG4gICAgLy8gYWZmZWN0aW5nIHRoZSBsb2NhbCBob3VyLiBTbyA1OjMxOjI2ICswMzAwIC0tW3V0Y09mZnNldCgyLCB0cnVlKV0tLT5cbiAgICAvLyA1OjMxOjI2ICswMjAwIEl0IGlzIHBvc3NpYmxlIHRoYXQgNTozMToyNiBkb2Vzbid0IGV4aXN0IHdpdGggb2Zmc2V0XG4gICAgLy8gKzAyMDAsIHNvIHdlIGFkanVzdCB0aGUgdGltZSBhcyBuZWVkZWQsIHRvIGJlIHZhbGlkLlxuICAgIC8vXG4gICAgLy8gS2VlcGluZyB0aGUgdGltZSBhY3R1YWxseSBhZGRzL3N1YnRyYWN0cyAob25lIGhvdXIpXG4gICAgLy8gZnJvbSB0aGUgYWN0dWFsIHJlcHJlc2VudGVkIHRpbWUuIFRoYXQgaXMgd2h5IHdlIGNhbGwgdXBkYXRlT2Zmc2V0XG4gICAgLy8gYSBzZWNvbmQgdGltZS4gSW4gY2FzZSBpdCB3YW50cyB1cyB0byBjaGFuZ2UgdGhlIG9mZnNldCBhZ2FpblxuICAgIC8vIF9jaGFuZ2VJblByb2dyZXNzID09IHRydWUgY2FzZSwgdGhlbiB3ZSBoYXZlIHRvIGFkanVzdCwgYmVjYXVzZVxuICAgIC8vIHRoZXJlIGlzIG5vIHN1Y2ggdGltZSBpbiB0aGUgZ2l2ZW4gdGltZXpvbmUuXG4gICAgZnVuY3Rpb24gZ2V0U2V0T2Zmc2V0KGlucHV0LCBrZWVwTG9jYWxUaW1lLCBrZWVwTWludXRlcykge1xuICAgICAgICB2YXIgb2Zmc2V0ID0gdGhpcy5fb2Zmc2V0IHx8IDAsXG4gICAgICAgICAgICBsb2NhbEFkanVzdDtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgPyB0aGlzIDogTmFOO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaFNob3J0T2Zmc2V0LCBpbnB1dCk7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoTWF0aC5hYnMoaW5wdXQpIDwgMTYgJiYgIWtlZXBNaW51dGVzKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSBpbnB1dCAqIDYwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc1VUQyAmJiBrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxBZGp1c3QgPSBnZXREYXRlT2Zmc2V0KHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fb2Zmc2V0ID0gaW5wdXQ7XG4gICAgICAgICAgICB0aGlzLl9pc1VUQyA9IHRydWU7XG4gICAgICAgICAgICBpZiAobG9jYWxBZGp1c3QgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkKGxvY2FsQWRqdXN0LCAnbScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9mZnNldCAhPT0gaW5wdXQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWtlZXBMb2NhbFRpbWUgfHwgdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICBhZGRTdWJ0cmFjdChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVEdXJhdGlvbihpbnB1dCAtIG9mZnNldCwgJ20nKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faXNVVEMgPyBvZmZzZXQgOiBnZXREYXRlT2Zmc2V0KHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0Wm9uZShpbnB1dCwga2VlcExvY2FsVGltZSkge1xuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IC1pbnB1dDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoaW5wdXQsIGtlZXBMb2NhbFRpbWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAtdGhpcy51dGNPZmZzZXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldE9mZnNldFRvVVRDKGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXRjT2Zmc2V0KDAsIGtlZXBMb2NhbFRpbWUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldE9mZnNldFRvTG9jYWwoa2VlcExvY2FsVGltZSkge1xuICAgICAgICBpZiAodGhpcy5faXNVVEMpIHtcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KDAsIGtlZXBMb2NhbFRpbWUpO1xuICAgICAgICAgICAgdGhpcy5faXNVVEMgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnRyYWN0KGdldERhdGVPZmZzZXQodGhpcyksICdtJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0T2Zmc2V0VG9QYXJzZWRPZmZzZXQoKSB7XG4gICAgICAgIGlmICh0aGlzLl90em0gIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQodGhpcy5fdHptLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuX2kgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB2YXIgdFpvbmUgPSBvZmZzZXRGcm9tU3RyaW5nKG1hdGNoT2Zmc2V0LCB0aGlzLl9pKTtcbiAgICAgICAgICAgIGlmICh0Wm9uZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQodFpvbmUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgwLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYXNBbGlnbmVkSG91ck9mZnNldChpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaW5wdXQgPSBpbnB1dCA/IGNyZWF0ZUxvY2FsKGlucHV0KS51dGNPZmZzZXQoKSA6IDA7XG5cbiAgICAgICAgcmV0dXJuICh0aGlzLnV0Y09mZnNldCgpIC0gaW5wdXQpICUgNjAgPT09IDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNEYXlsaWdodFNhdmluZ1RpbWUoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgpID4gdGhpcy5jbG9uZSgpLm1vbnRoKDApLnV0Y09mZnNldCgpIHx8XG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgpID4gdGhpcy5jbG9uZSgpLm1vbnRoKDUpLnV0Y09mZnNldCgpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNEYXlsaWdodFNhdmluZ1RpbWVTaGlmdGVkKCkge1xuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHRoaXMuX2lzRFNUU2hpZnRlZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYyA9IHt9LFxuICAgICAgICAgICAgb3RoZXI7XG5cbiAgICAgICAgY29weUNvbmZpZyhjLCB0aGlzKTtcbiAgICAgICAgYyA9IHByZXBhcmVDb25maWcoYyk7XG5cbiAgICAgICAgaWYgKGMuX2EpIHtcbiAgICAgICAgICAgIG90aGVyID0gYy5faXNVVEMgPyBjcmVhdGVVVEMoYy5fYSkgOiBjcmVhdGVMb2NhbChjLl9hKTtcbiAgICAgICAgICAgIHRoaXMuX2lzRFNUU2hpZnRlZCA9XG4gICAgICAgICAgICAgICAgdGhpcy5pc1ZhbGlkKCkgJiYgY29tcGFyZUFycmF5cyhjLl9hLCBvdGhlci50b0FycmF5KCkpID4gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2lzRFNUU2hpZnRlZCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzRFNUU2hpZnRlZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0xvY2FsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyAhdGhpcy5faXNVVEMgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1V0Y09mZnNldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy5faXNVVEMgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1V0YygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy5faXNVVEMgJiYgdGhpcy5fb2Zmc2V0ID09PSAwIDogZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQVNQLk5FVCBqc29uIGRhdGUgZm9ybWF0IHJlZ2V4XG4gICAgdmFyIGFzcE5ldFJlZ2V4ID0gL14oLXxcXCspPyg/OihcXGQqKVsuIF0pPyhcXGQrKTooXFxkKykoPzo6KFxcZCspKFxcLlxcZCopPyk/JC8sXG4gICAgICAgIC8vIGZyb20gaHR0cDovL2RvY3MuY2xvc3VyZS1saWJyYXJ5Lmdvb2dsZWNvZGUuY29tL2dpdC9jbG9zdXJlX2dvb2dfZGF0ZV9kYXRlLmpzLnNvdXJjZS5odG1sXG4gICAgICAgIC8vIHNvbWV3aGF0IG1vcmUgaW4gbGluZSB3aXRoIDQuNC4zLjIgMjAwNCBzcGVjLCBidXQgYWxsb3dzIGRlY2ltYWwgYW55d2hlcmVcbiAgICAgICAgLy8gYW5kIGZ1cnRoZXIgbW9kaWZpZWQgdG8gYWxsb3cgZm9yIHN0cmluZ3MgY29udGFpbmluZyBib3RoIHdlZWsgYW5kIGRheVxuICAgICAgICBpc29SZWdleCA9IC9eKC18XFwrKT9QKD86KFstK10/WzAtOSwuXSopWSk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopVyk/KD86KFstK10/WzAtOSwuXSopRCk/KD86VCg/OihbLStdP1swLTksLl0qKUgpPyg/OihbLStdP1swLTksLl0qKU0pPyg/OihbLStdP1swLTksLl0qKVMpPyk/JC87XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVEdXJhdGlvbihpbnB1dCwga2V5KSB7XG4gICAgICAgIHZhciBkdXJhdGlvbiA9IGlucHV0LFxuICAgICAgICAgICAgLy8gbWF0Y2hpbmcgYWdhaW5zdCByZWdleHAgaXMgZXhwZW5zaXZlLCBkbyBpdCBvbiBkZW1hbmRcbiAgICAgICAgICAgIG1hdGNoID0gbnVsbCxcbiAgICAgICAgICAgIHNpZ24sXG4gICAgICAgICAgICByZXQsXG4gICAgICAgICAgICBkaWZmUmVzO1xuXG4gICAgICAgIGlmIChpc0R1cmF0aW9uKGlucHV0KSkge1xuICAgICAgICAgICAgZHVyYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgbXM6IGlucHV0Ll9taWxsaXNlY29uZHMsXG4gICAgICAgICAgICAgICAgZDogaW5wdXQuX2RheXMsXG4gICAgICAgICAgICAgICAgTTogaW5wdXQuX21vbnRocyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXIoaW5wdXQpIHx8ICFpc05hTigraW5wdXQpKSB7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uW2tleV0gPSAraW5wdXQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uLm1pbGxpc2Vjb25kcyA9ICtpbnB1dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICgobWF0Y2ggPSBhc3BOZXRSZWdleC5leGVjKGlucHV0KSkpIHtcbiAgICAgICAgICAgIHNpZ24gPSBtYXRjaFsxXSA9PT0gJy0nID8gLTEgOiAxO1xuICAgICAgICAgICAgZHVyYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgeTogMCxcbiAgICAgICAgICAgICAgICBkOiB0b0ludChtYXRjaFtEQVRFXSkgKiBzaWduLFxuICAgICAgICAgICAgICAgIGg6IHRvSW50KG1hdGNoW0hPVVJdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgbTogdG9JbnQobWF0Y2hbTUlOVVRFXSkgKiBzaWduLFxuICAgICAgICAgICAgICAgIHM6IHRvSW50KG1hdGNoW1NFQ09ORF0pICogc2lnbixcbiAgICAgICAgICAgICAgICBtczogdG9JbnQoYWJzUm91bmQobWF0Y2hbTUlMTElTRUNPTkRdICogMTAwMCkpICogc2lnbiwgLy8gdGhlIG1pbGxpc2Vjb25kIGRlY2ltYWwgcG9pbnQgaXMgaW5jbHVkZWQgaW4gdGhlIG1hdGNoXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKChtYXRjaCA9IGlzb1JlZ2V4LmV4ZWMoaW5wdXQpKSkge1xuICAgICAgICAgICAgc2lnbiA9IG1hdGNoWzFdID09PSAnLScgPyAtMSA6IDE7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICB5OiBwYXJzZUlzbyhtYXRjaFsyXSwgc2lnbiksXG4gICAgICAgICAgICAgICAgTTogcGFyc2VJc28obWF0Y2hbM10sIHNpZ24pLFxuICAgICAgICAgICAgICAgIHc6IHBhcnNlSXNvKG1hdGNoWzRdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBkOiBwYXJzZUlzbyhtYXRjaFs1XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgaDogcGFyc2VJc28obWF0Y2hbNl0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIG06IHBhcnNlSXNvKG1hdGNoWzddLCBzaWduKSxcbiAgICAgICAgICAgICAgICBzOiBwYXJzZUlzbyhtYXRjaFs4XSwgc2lnbiksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKGR1cmF0aW9uID09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIGNoZWNrcyBmb3IgbnVsbCBvciB1bmRlZmluZWRcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge307XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgZHVyYXRpb24gPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAoJ2Zyb20nIGluIGR1cmF0aW9uIHx8ICd0bycgaW4gZHVyYXRpb24pXG4gICAgICAgICkge1xuICAgICAgICAgICAgZGlmZlJlcyA9IG1vbWVudHNEaWZmZXJlbmNlKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUxvY2FsKGR1cmF0aW9uLmZyb20pLFxuICAgICAgICAgICAgICAgIGNyZWF0ZUxvY2FsKGR1cmF0aW9uLnRvKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZHVyYXRpb24gPSB7fTtcbiAgICAgICAgICAgIGR1cmF0aW9uLm1zID0gZGlmZlJlcy5taWxsaXNlY29uZHM7XG4gICAgICAgICAgICBkdXJhdGlvbi5NID0gZGlmZlJlcy5tb250aHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXQgPSBuZXcgRHVyYXRpb24oZHVyYXRpb24pO1xuXG4gICAgICAgIGlmIChpc0R1cmF0aW9uKGlucHV0KSAmJiBoYXNPd25Qcm9wKGlucHV0LCAnX2xvY2FsZScpKSB7XG4gICAgICAgICAgICByZXQuX2xvY2FsZSA9IGlucHV0Ll9sb2NhbGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNEdXJhdGlvbihpbnB1dCkgJiYgaGFzT3duUHJvcChpbnB1dCwgJ19pc1ZhbGlkJykpIHtcbiAgICAgICAgICAgIHJldC5faXNWYWxpZCA9IGlucHV0Ll9pc1ZhbGlkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG5cbiAgICBjcmVhdGVEdXJhdGlvbi5mbiA9IER1cmF0aW9uLnByb3RvdHlwZTtcbiAgICBjcmVhdGVEdXJhdGlvbi5pbnZhbGlkID0gY3JlYXRlSW52YWxpZCQxO1xuXG4gICAgZnVuY3Rpb24gcGFyc2VJc28oaW5wLCBzaWduKSB7XG4gICAgICAgIC8vIFdlJ2Qgbm9ybWFsbHkgdXNlIH5+aW5wIGZvciB0aGlzLCBidXQgdW5mb3J0dW5hdGVseSBpdCBhbHNvXG4gICAgICAgIC8vIGNvbnZlcnRzIGZsb2F0cyB0byBpbnRzLlxuICAgICAgICAvLyBpbnAgbWF5IGJlIHVuZGVmaW5lZCwgc28gY2FyZWZ1bCBjYWxsaW5nIHJlcGxhY2Ugb24gaXQuXG4gICAgICAgIHZhciByZXMgPSBpbnAgJiYgcGFyc2VGbG9hdChpbnAucmVwbGFjZSgnLCcsICcuJykpO1xuICAgICAgICAvLyBhcHBseSBzaWduIHdoaWxlIHdlJ3JlIGF0IGl0XG4gICAgICAgIHJldHVybiAoaXNOYU4ocmVzKSA/IDAgOiByZXMpICogc2lnbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwb3NpdGl2ZU1vbWVudHNEaWZmZXJlbmNlKGJhc2UsIG90aGVyKSB7XG4gICAgICAgIHZhciByZXMgPSB7fTtcblxuICAgICAgICByZXMubW9udGhzID1cbiAgICAgICAgICAgIG90aGVyLm1vbnRoKCkgLSBiYXNlLm1vbnRoKCkgKyAob3RoZXIueWVhcigpIC0gYmFzZS55ZWFyKCkpICogMTI7XG4gICAgICAgIGlmIChiYXNlLmNsb25lKCkuYWRkKHJlcy5tb250aHMsICdNJykuaXNBZnRlcihvdGhlcikpIHtcbiAgICAgICAgICAgIC0tcmVzLm1vbnRocztcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcy5taWxsaXNlY29uZHMgPSArb3RoZXIgLSArYmFzZS5jbG9uZSgpLmFkZChyZXMubW9udGhzLCAnTScpO1xuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpIHtcbiAgICAgICAgdmFyIHJlcztcbiAgICAgICAgaWYgKCEoYmFzZS5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgbWlsbGlzZWNvbmRzOiAwLCBtb250aHM6IDAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIG90aGVyID0gY2xvbmVXaXRoT2Zmc2V0KG90aGVyLCBiYXNlKTtcbiAgICAgICAgaWYgKGJhc2UuaXNCZWZvcmUob3RoZXIpKSB7XG4gICAgICAgICAgICByZXMgPSBwb3NpdGl2ZU1vbWVudHNEaWZmZXJlbmNlKGJhc2UsIG90aGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcyA9IHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2Uob3RoZXIsIGJhc2UpO1xuICAgICAgICAgICAgcmVzLm1pbGxpc2Vjb25kcyA9IC1yZXMubWlsbGlzZWNvbmRzO1xuICAgICAgICAgICAgcmVzLm1vbnRocyA9IC1yZXMubW9udGhzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvLyBUT0RPOiByZW1vdmUgJ25hbWUnIGFyZyBhZnRlciBkZXByZWNhdGlvbiBpcyByZW1vdmVkXG4gICAgZnVuY3Rpb24gY3JlYXRlQWRkZXIoZGlyZWN0aW9uLCBuYW1lKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHZhciBkdXIsIHRtcDtcbiAgICAgICAgICAgIC8vaW52ZXJ0IHRoZSBhcmd1bWVudHMsIGJ1dCBjb21wbGFpbiBhYm91dCBpdFxuICAgICAgICAgICAgaWYgKHBlcmlvZCAhPT0gbnVsbCAmJiAhaXNOYU4oK3BlcmlvZCkpIHtcbiAgICAgICAgICAgICAgICBkZXByZWNhdGVTaW1wbGUoXG4gICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICdtb21lbnQoKS4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJyhwZXJpb2QsIG51bWJlcikgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBtb21lbnQoKS4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJyhudW1iZXIsIHBlcmlvZCkuICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1NlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2FkZC1pbnZlcnRlZC1wYXJhbS8gZm9yIG1vcmUgaW5mby4nXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0bXAgPSB2YWw7XG4gICAgICAgICAgICAgICAgdmFsID0gcGVyaW9kO1xuICAgICAgICAgICAgICAgIHBlcmlvZCA9IHRtcDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZHVyID0gY3JlYXRlRHVyYXRpb24odmFsLCBwZXJpb2QpO1xuICAgICAgICAgICAgYWRkU3VidHJhY3QodGhpcywgZHVyLCBkaXJlY3Rpb24pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkU3VidHJhY3QobW9tLCBkdXJhdGlvbiwgaXNBZGRpbmcsIHVwZGF0ZU9mZnNldCkge1xuICAgICAgICB2YXIgbWlsbGlzZWNvbmRzID0gZHVyYXRpb24uX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgIGRheXMgPSBhYnNSb3VuZChkdXJhdGlvbi5fZGF5cyksXG4gICAgICAgICAgICBtb250aHMgPSBhYnNSb3VuZChkdXJhdGlvbi5fbW9udGhzKTtcblxuICAgICAgICBpZiAoIW1vbS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIC8vIE5vIG9wXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB1cGRhdGVPZmZzZXQgPSB1cGRhdGVPZmZzZXQgPT0gbnVsbCA/IHRydWUgOiB1cGRhdGVPZmZzZXQ7XG5cbiAgICAgICAgaWYgKG1vbnRocykge1xuICAgICAgICAgICAgc2V0TW9udGgobW9tLCBnZXQobW9tLCAnTW9udGgnKSArIG1vbnRocyAqIGlzQWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF5cykge1xuICAgICAgICAgICAgc2V0JDEobW9tLCAnRGF0ZScsIGdldChtb20sICdEYXRlJykgKyBkYXlzICogaXNBZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtaWxsaXNlY29uZHMpIHtcbiAgICAgICAgICAgIG1vbS5fZC5zZXRUaW1lKG1vbS5fZC52YWx1ZU9mKCkgKyBtaWxsaXNlY29uZHMgKiBpc0FkZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVwZGF0ZU9mZnNldCkge1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KG1vbSwgZGF5cyB8fCBtb250aHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGFkZCA9IGNyZWF0ZUFkZGVyKDEsICdhZGQnKSxcbiAgICAgICAgc3VidHJhY3QgPSBjcmVhdGVBZGRlcigtMSwgJ3N1YnRyYWN0Jyk7XG5cbiAgICBmdW5jdGlvbiBpc1N0cmluZyhpbnB1dCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJyB8fCBpbnB1dCBpbnN0YW5jZW9mIFN0cmluZztcbiAgICB9XG5cbiAgICAvLyB0eXBlIE1vbWVudElucHV0ID0gTW9tZW50IHwgRGF0ZSB8IHN0cmluZyB8IG51bWJlciB8IChudW1iZXIgfCBzdHJpbmcpW10gfCBNb21lbnRJbnB1dE9iamVjdCB8IHZvaWQ7IC8vIG51bGwgfCB1bmRlZmluZWRcbiAgICBmdW5jdGlvbiBpc01vbWVudElucHV0KGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpc01vbWVudChpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzRGF0ZShpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzU3RyaW5nKGlucHV0KSB8fFxuICAgICAgICAgICAgaXNOdW1iZXIoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc051bWJlck9yU3RyaW5nQXJyYXkoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc01vbWVudElucHV0T2JqZWN0KGlucHV0KSB8fFxuICAgICAgICAgICAgaW5wdXQgPT09IG51bGwgfHxcbiAgICAgICAgICAgIGlucHV0ID09PSB1bmRlZmluZWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc01vbWVudElucHV0T2JqZWN0KGlucHV0KSB7XG4gICAgICAgIHZhciBvYmplY3RUZXN0ID0gaXNPYmplY3QoaW5wdXQpICYmICFpc09iamVjdEVtcHR5KGlucHV0KSxcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IGZhbHNlLFxuICAgICAgICAgICAgcHJvcGVydGllcyA9IFtcbiAgICAgICAgICAgICAgICAneWVhcnMnLFxuICAgICAgICAgICAgICAgICd5ZWFyJyxcbiAgICAgICAgICAgICAgICAneScsXG4gICAgICAgICAgICAgICAgJ21vbnRocycsXG4gICAgICAgICAgICAgICAgJ21vbnRoJyxcbiAgICAgICAgICAgICAgICAnTScsXG4gICAgICAgICAgICAgICAgJ2RheXMnLFxuICAgICAgICAgICAgICAgICdkYXknLFxuICAgICAgICAgICAgICAgICdkJyxcbiAgICAgICAgICAgICAgICAnZGF0ZXMnLFxuICAgICAgICAgICAgICAgICdkYXRlJyxcbiAgICAgICAgICAgICAgICAnRCcsXG4gICAgICAgICAgICAgICAgJ2hvdXJzJyxcbiAgICAgICAgICAgICAgICAnaG91cicsXG4gICAgICAgICAgICAgICAgJ2gnLFxuICAgICAgICAgICAgICAgICdtaW51dGVzJyxcbiAgICAgICAgICAgICAgICAnbWludXRlJyxcbiAgICAgICAgICAgICAgICAnbScsXG4gICAgICAgICAgICAgICAgJ3NlY29uZHMnLFxuICAgICAgICAgICAgICAgICdzZWNvbmQnLFxuICAgICAgICAgICAgICAgICdzJyxcbiAgICAgICAgICAgICAgICAnbWlsbGlzZWNvbmRzJyxcbiAgICAgICAgICAgICAgICAnbWlsbGlzZWNvbmQnLFxuICAgICAgICAgICAgICAgICdtcycsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIHByb3BlcnR5O1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICBwcm9wZXJ0eVRlc3QgPSBwcm9wZXJ0eVRlc3QgfHwgaGFzT3duUHJvcChpbnB1dCwgcHJvcGVydHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9iamVjdFRlc3QgJiYgcHJvcGVydHlUZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTnVtYmVyT3JTdHJpbmdBcnJheShpbnB1dCkge1xuICAgICAgICB2YXIgYXJyYXlUZXN0ID0gaXNBcnJheShpbnB1dCksXG4gICAgICAgICAgICBkYXRhVHlwZVRlc3QgPSBmYWxzZTtcbiAgICAgICAgaWYgKGFycmF5VGVzdCkge1xuICAgICAgICAgICAgZGF0YVR5cGVUZXN0ID1cbiAgICAgICAgICAgICAgICBpbnB1dC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFpc051bWJlcihpdGVtKSAmJiBpc1N0cmluZyhpbnB1dCk7XG4gICAgICAgICAgICAgICAgfSkubGVuZ3RoID09PSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnJheVRlc3QgJiYgZGF0YVR5cGVUZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQ2FsZW5kYXJTcGVjKGlucHV0KSB7XG4gICAgICAgIHZhciBvYmplY3RUZXN0ID0gaXNPYmplY3QoaW5wdXQpICYmICFpc09iamVjdEVtcHR5KGlucHV0KSxcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IGZhbHNlLFxuICAgICAgICAgICAgcHJvcGVydGllcyA9IFtcbiAgICAgICAgICAgICAgICAnc2FtZURheScsXG4gICAgICAgICAgICAgICAgJ25leHREYXknLFxuICAgICAgICAgICAgICAgICdsYXN0RGF5JyxcbiAgICAgICAgICAgICAgICAnbmV4dFdlZWsnLFxuICAgICAgICAgICAgICAgICdsYXN0V2VlaycsXG4gICAgICAgICAgICAgICAgJ3NhbWVFbHNlJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcHJvcGVydHk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IHByb3BlcnR5VGVzdCB8fCBoYXNPd25Qcm9wKGlucHV0LCBwcm9wZXJ0eSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2JqZWN0VGVzdCAmJiBwcm9wZXJ0eVRlc3Q7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Q2FsZW5kYXJGb3JtYXQobXlNb21lbnQsIG5vdykge1xuICAgICAgICB2YXIgZGlmZiA9IG15TW9tZW50LmRpZmYobm93LCAnZGF5cycsIHRydWUpO1xuICAgICAgICByZXR1cm4gZGlmZiA8IC02XG4gICAgICAgICAgICA/ICdzYW1lRWxzZSdcbiAgICAgICAgICAgIDogZGlmZiA8IC0xXG4gICAgICAgICAgICA/ICdsYXN0V2VlaydcbiAgICAgICAgICAgIDogZGlmZiA8IDBcbiAgICAgICAgICAgID8gJ2xhc3REYXknXG4gICAgICAgICAgICA6IGRpZmYgPCAxXG4gICAgICAgICAgICA/ICdzYW1lRGF5J1xuICAgICAgICAgICAgOiBkaWZmIDwgMlxuICAgICAgICAgICAgPyAnbmV4dERheSdcbiAgICAgICAgICAgIDogZGlmZiA8IDdcbiAgICAgICAgICAgID8gJ25leHRXZWVrJ1xuICAgICAgICAgICAgOiAnc2FtZUVsc2UnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGVuZGFyJDEodGltZSwgZm9ybWF0cykge1xuICAgICAgICAvLyBTdXBwb3J0IGZvciBzaW5nbGUgcGFyYW1ldGVyLCBmb3JtYXRzIG9ubHkgb3ZlcmxvYWQgdG8gdGhlIGNhbGVuZGFyIGZ1bmN0aW9uXG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBpZiAoIWFyZ3VtZW50c1swXSkge1xuICAgICAgICAgICAgICAgIHRpbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNNb21lbnRJbnB1dChhcmd1bWVudHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgdGltZSA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICBmb3JtYXRzID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0NhbGVuZGFyU3BlYyhhcmd1bWVudHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgZm9ybWF0cyA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICB0aW1lID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFdlIHdhbnQgdG8gY29tcGFyZSB0aGUgc3RhcnQgb2YgdG9kYXksIHZzIHRoaXMuXG4gICAgICAgIC8vIEdldHRpbmcgc3RhcnQtb2YtdG9kYXkgZGVwZW5kcyBvbiB3aGV0aGVyIHdlJ3JlIGxvY2FsL3V0Yy9vZmZzZXQgb3Igbm90LlxuICAgICAgICB2YXIgbm93ID0gdGltZSB8fCBjcmVhdGVMb2NhbCgpLFxuICAgICAgICAgICAgc29kID0gY2xvbmVXaXRoT2Zmc2V0KG5vdywgdGhpcykuc3RhcnRPZignZGF5JyksXG4gICAgICAgICAgICBmb3JtYXQgPSBob29rcy5jYWxlbmRhckZvcm1hdCh0aGlzLCBzb2QpIHx8ICdzYW1lRWxzZScsXG4gICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgIGZvcm1hdHMgJiZcbiAgICAgICAgICAgICAgICAoaXNGdW5jdGlvbihmb3JtYXRzW2Zvcm1hdF0pXG4gICAgICAgICAgICAgICAgICAgID8gZm9ybWF0c1tmb3JtYXRdLmNhbGwodGhpcywgbm93KVxuICAgICAgICAgICAgICAgICAgICA6IGZvcm1hdHNbZm9ybWF0XSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KFxuICAgICAgICAgICAgb3V0cHV0IHx8IHRoaXMubG9jYWxlRGF0YSgpLmNhbGVuZGFyKGZvcm1hdCwgdGhpcywgY3JlYXRlTG9jYWwobm93KSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbG9uZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNb21lbnQodGhpcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNBZnRlcihpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPiBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbElucHV0LnZhbHVlT2YoKSA8IHRoaXMuY2xvbmUoKS5zdGFydE9mKHVuaXRzKS52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0JlZm9yZShpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPCBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb25lKCkuZW5kT2YodW5pdHMpLnZhbHVlT2YoKSA8IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNCZXR3ZWVuKGZyb20sIHRvLCB1bml0cywgaW5jbHVzaXZpdHkpIHtcbiAgICAgICAgdmFyIGxvY2FsRnJvbSA9IGlzTW9tZW50KGZyb20pID8gZnJvbSA6IGNyZWF0ZUxvY2FsKGZyb20pLFxuICAgICAgICAgICAgbG9jYWxUbyA9IGlzTW9tZW50KHRvKSA/IHRvIDogY3JlYXRlTG9jYWwodG8pO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbEZyb20uaXNWYWxpZCgpICYmIGxvY2FsVG8uaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGluY2x1c2l2aXR5ID0gaW5jbHVzaXZpdHkgfHwgJygpJztcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChpbmNsdXNpdml0eVswXSA9PT0gJygnXG4gICAgICAgICAgICAgICAgPyB0aGlzLmlzQWZ0ZXIobG9jYWxGcm9tLCB1bml0cylcbiAgICAgICAgICAgICAgICA6ICF0aGlzLmlzQmVmb3JlKGxvY2FsRnJvbSwgdW5pdHMpKSAmJlxuICAgICAgICAgICAgKGluY2x1c2l2aXR5WzFdID09PSAnKSdcbiAgICAgICAgICAgICAgICA/IHRoaXMuaXNCZWZvcmUobG9jYWxUbywgdW5pdHMpXG4gICAgICAgICAgICAgICAgOiAhdGhpcy5pc0FmdGVyKGxvY2FsVG8sIHVuaXRzKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWUoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHZhciBsb2NhbElucHV0ID0gaXNNb21lbnQoaW5wdXQpID8gaW5wdXQgOiBjcmVhdGVMb2NhbChpbnB1dCksXG4gICAgICAgICAgICBpbnB1dE1zO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbElucHV0LmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB8fCAnbWlsbGlzZWNvbmQnO1xuICAgICAgICBpZiAodW5pdHMgPT09ICdtaWxsaXNlY29uZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSA9PT0gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnB1dE1zID0gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHRoaXMuY2xvbmUoKS5zdGFydE9mKHVuaXRzKS52YWx1ZU9mKCkgPD0gaW5wdXRNcyAmJlxuICAgICAgICAgICAgICAgIGlucHV0TXMgPD0gdGhpcy5jbG9uZSgpLmVuZE9mKHVuaXRzKS52YWx1ZU9mKClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWVPckFmdGVyKGlucHV0LCB1bml0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1NhbWUoaW5wdXQsIHVuaXRzKSB8fCB0aGlzLmlzQWZ0ZXIoaW5wdXQsIHVuaXRzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWVPckJlZm9yZShpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTYW1lKGlucHV0LCB1bml0cykgfHwgdGhpcy5pc0JlZm9yZShpbnB1dCwgdW5pdHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRpZmYoaW5wdXQsIHVuaXRzLCBhc0Zsb2F0KSB7XG4gICAgICAgIHZhciB0aGF0LCB6b25lRGVsdGEsIG91dHB1dDtcblxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhhdCA9IGNsb25lV2l0aE9mZnNldChpbnB1dCwgdGhpcyk7XG5cbiAgICAgICAgaWYgKCF0aGF0LmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIHpvbmVEZWx0YSA9ICh0aGF0LnV0Y09mZnNldCgpIC0gdGhpcy51dGNPZmZzZXQoKSkgKiA2ZTQ7XG5cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG5cbiAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpIC8gMTI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpIC8gMztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0KSAvIDFlMztcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gMTAwMFxuICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQpIC8gNmU0O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjBcbiAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCkgLyAzNmU1O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjAgKiA2MFxuICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQgLSB6b25lRGVsdGEpIC8gODY0ZTU7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwICogMjQsIG5lZ2F0ZSBkc3RcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCAtIHpvbmVEZWx0YSkgLyA2MDQ4ZTU7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwICogMjQgKiA3LCBuZWdhdGUgZHN0XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIG91dHB1dCA9IHRoaXMgLSB0aGF0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFzRmxvYXQgPyBvdXRwdXQgOiBhYnNGbG9vcihvdXRwdXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoRGlmZihhLCBiKSB7XG4gICAgICAgIGlmIChhLmRhdGUoKSA8IGIuZGF0ZSgpKSB7XG4gICAgICAgICAgICAvLyBlbmQtb2YtbW9udGggY2FsY3VsYXRpb25zIHdvcmsgY29ycmVjdCB3aGVuIHRoZSBzdGFydCBtb250aCBoYXMgbW9yZVxuICAgICAgICAgICAgLy8gZGF5cyB0aGFuIHRoZSBlbmQgbW9udGguXG4gICAgICAgICAgICByZXR1cm4gLW1vbnRoRGlmZihiLCBhKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBkaWZmZXJlbmNlIGluIG1vbnRoc1xuICAgICAgICB2YXIgd2hvbGVNb250aERpZmYgPSAoYi55ZWFyKCkgLSBhLnllYXIoKSkgKiAxMiArIChiLm1vbnRoKCkgLSBhLm1vbnRoKCkpLFxuICAgICAgICAgICAgLy8gYiBpcyBpbiAoYW5jaG9yIC0gMSBtb250aCwgYW5jaG9yICsgMSBtb250aClcbiAgICAgICAgICAgIGFuY2hvciA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYsICdtb250aHMnKSxcbiAgICAgICAgICAgIGFuY2hvcjIsXG4gICAgICAgICAgICBhZGp1c3Q7XG5cbiAgICAgICAgaWYgKGIgLSBhbmNob3IgPCAwKSB7XG4gICAgICAgICAgICBhbmNob3IyID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiAtIDEsICdtb250aHMnKTtcbiAgICAgICAgICAgIC8vIGxpbmVhciBhY3Jvc3MgdGhlIG1vbnRoXG4gICAgICAgICAgICBhZGp1c3QgPSAoYiAtIGFuY2hvcikgLyAoYW5jaG9yIC0gYW5jaG9yMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhbmNob3IyID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiArIDEsICdtb250aHMnKTtcbiAgICAgICAgICAgIC8vIGxpbmVhciBhY3Jvc3MgdGhlIG1vbnRoXG4gICAgICAgICAgICBhZGp1c3QgPSAoYiAtIGFuY2hvcikgLyAoYW5jaG9yMiAtIGFuY2hvcik7XG4gICAgICAgIH1cblxuICAgICAgICAvL2NoZWNrIGZvciBuZWdhdGl2ZSB6ZXJvLCByZXR1cm4gemVybyBpZiBuZWdhdGl2ZSB6ZXJvXG4gICAgICAgIHJldHVybiAtKHdob2xlTW9udGhEaWZmICsgYWRqdXN0KSB8fCAwO1xuICAgIH1cblxuICAgIGhvb2tzLmRlZmF1bHRGb3JtYXQgPSAnWVlZWS1NTS1ERFRISDptbTpzc1onO1xuICAgIGhvb2tzLmRlZmF1bHRGb3JtYXRVdGMgPSAnWVlZWS1NTS1ERFRISDptbTpzc1taXSc7XG5cbiAgICBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5sb2NhbGUoJ2VuJykuZm9ybWF0KCdkZGQgTU1NIEREIFlZWVkgSEg6bW06c3MgW0dNVF1aWicpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSVNPU3RyaW5nKGtlZXBPZmZzZXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHV0YyA9IGtlZXBPZmZzZXQgIT09IHRydWUsXG4gICAgICAgICAgICBtID0gdXRjID8gdGhpcy5jbG9uZSgpLnV0YygpIDogdGhpcztcbiAgICAgICAgaWYgKG0ueWVhcigpIDwgMCB8fCBtLnllYXIoKSA+IDk5OTkpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRNb21lbnQoXG4gICAgICAgICAgICAgICAgbSxcbiAgICAgICAgICAgICAgICB1dGNcbiAgICAgICAgICAgICAgICAgICAgPyAnWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdJ1xuICAgICAgICAgICAgICAgICAgICA6ICdZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNGdW5jdGlvbihEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZykpIHtcbiAgICAgICAgICAgIC8vIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiBpcyB+NTB4IGZhc3RlciwgdXNlIGl0IHdoZW4gd2UgY2FuXG4gICAgICAgICAgICBpZiAodXRjKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9EYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMudmFsdWVPZigpICsgdGhpcy51dGNPZmZzZXQoKSAqIDYwICogMTAwMClcbiAgICAgICAgICAgICAgICAgICAgLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJ1onLCBmb3JtYXRNb21lbnQobSwgJ1onKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1hdE1vbWVudChcbiAgICAgICAgICAgIG0sXG4gICAgICAgICAgICB1dGMgPyAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXScgOiAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1onXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgaHVtYW4gcmVhZGFibGUgcmVwcmVzZW50YXRpb24gb2YgYSBtb21lbnQgdGhhdCBjYW5cbiAgICAgKiBhbHNvIGJlIGV2YWx1YXRlZCB0byBnZXQgYSBuZXcgbW9tZW50IHdoaWNoIGlzIHRoZSBzYW1lXG4gICAgICpcbiAgICAgKiBAbGluayBodHRwczovL25vZGVqcy5vcmcvZGlzdC9sYXRlc3QvZG9jcy9hcGkvdXRpbC5odG1sI3V0aWxfY3VzdG9tX2luc3BlY3RfZnVuY3Rpb25fb25fb2JqZWN0c1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluc3BlY3QoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiAnbW9tZW50LmludmFsaWQoLyogJyArIHRoaXMuX2kgKyAnICovKSc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGZ1bmMgPSAnbW9tZW50JyxcbiAgICAgICAgICAgIHpvbmUgPSAnJyxcbiAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgIHllYXIsXG4gICAgICAgICAgICBkYXRldGltZSxcbiAgICAgICAgICAgIHN1ZmZpeDtcbiAgICAgICAgaWYgKCF0aGlzLmlzTG9jYWwoKSkge1xuICAgICAgICAgICAgZnVuYyA9IHRoaXMudXRjT2Zmc2V0KCkgPT09IDAgPyAnbW9tZW50LnV0YycgOiAnbW9tZW50LnBhcnNlWm9uZSc7XG4gICAgICAgICAgICB6b25lID0gJ1onO1xuICAgICAgICB9XG4gICAgICAgIHByZWZpeCA9ICdbJyArIGZ1bmMgKyAnKFwiXSc7XG4gICAgICAgIHllYXIgPSAwIDw9IHRoaXMueWVhcigpICYmIHRoaXMueWVhcigpIDw9IDk5OTkgPyAnWVlZWScgOiAnWVlZWVlZJztcbiAgICAgICAgZGF0ZXRpbWUgPSAnLU1NLUREW1RdSEg6bW06c3MuU1NTJztcbiAgICAgICAgc3VmZml4ID0gem9uZSArICdbXCIpXSc7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KHByZWZpeCArIHllYXIgKyBkYXRldGltZSArIHN1ZmZpeCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZm9ybWF0KGlucHV0U3RyaW5nKSB7XG4gICAgICAgIGlmICghaW5wdXRTdHJpbmcpIHtcbiAgICAgICAgICAgIGlucHV0U3RyaW5nID0gdGhpcy5pc1V0YygpXG4gICAgICAgICAgICAgICAgPyBob29rcy5kZWZhdWx0Rm9ybWF0VXRjXG4gICAgICAgICAgICAgICAgOiBob29rcy5kZWZhdWx0Rm9ybWF0O1xuICAgICAgICB9XG4gICAgICAgIHZhciBvdXRwdXQgPSBmb3JtYXRNb21lbnQodGhpcywgaW5wdXRTdHJpbmcpO1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkucG9zdGZvcm1hdChvdXRwdXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZyb20odGltZSwgd2l0aG91dFN1ZmZpeCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWQoKSAmJlxuICAgICAgICAgICAgKChpc01vbWVudCh0aW1lKSAmJiB0aW1lLmlzVmFsaWQoKSkgfHwgY3JlYXRlTG9jYWwodGltZSkuaXNWYWxpZCgpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih7IHRvOiB0aGlzLCBmcm9tOiB0aW1lIH0pXG4gICAgICAgICAgICAgICAgLmxvY2FsZSh0aGlzLmxvY2FsZSgpKVxuICAgICAgICAgICAgICAgIC5odW1hbml6ZSghd2l0aG91dFN1ZmZpeCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZyb21Ob3cod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mcm9tKGNyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvKHRpbWUsIHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkKCkgJiZcbiAgICAgICAgICAgICgoaXNNb21lbnQodGltZSkgJiYgdGltZS5pc1ZhbGlkKCkpIHx8IGNyZWF0ZUxvY2FsKHRpbWUpLmlzVmFsaWQoKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24oeyBmcm9tOiB0aGlzLCB0bzogdGltZSB9KVxuICAgICAgICAgICAgICAgIC5sb2NhbGUodGhpcy5sb2NhbGUoKSlcbiAgICAgICAgICAgICAgICAuaHVtYW5pemUoIXdpdGhvdXRTdWZmaXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b05vdyh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvKGNyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cblxuICAgIC8vIElmIHBhc3NlZCBhIGxvY2FsZSBrZXksIGl0IHdpbGwgc2V0IHRoZSBsb2NhbGUgZm9yIHRoaXNcbiAgICAvLyBpbnN0YW5jZS4gIE90aGVyd2lzZSwgaXQgd2lsbCByZXR1cm4gdGhlIGxvY2FsZSBjb25maWd1cmF0aW9uXG4gICAgLy8gdmFyaWFibGVzIGZvciB0aGlzIGluc3RhbmNlLlxuICAgIGZ1bmN0aW9uIGxvY2FsZShrZXkpIHtcbiAgICAgICAgdmFyIG5ld0xvY2FsZURhdGE7XG5cbiAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxlLl9hYmJyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3TG9jYWxlRGF0YSA9IGdldExvY2FsZShrZXkpO1xuICAgICAgICAgICAgaWYgKG5ld0xvY2FsZURhdGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvY2FsZSA9IG5ld0xvY2FsZURhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBsYW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50KCkubGFuZygpIGlzIGRlcHJlY2F0ZWQuIEluc3RlYWQsIHVzZSBtb21lbnQoKS5sb2NhbGVEYXRhKCkgdG8gZ2V0IHRoZSBsYW5ndWFnZSBjb25maWd1cmF0aW9uLiBVc2UgbW9tZW50KCkubG9jYWxlKCkgdG8gY2hhbmdlIGxhbmd1YWdlcy4nLFxuICAgICAgICBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZShrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZURhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGU7XG4gICAgfVxuXG4gICAgdmFyIE1TX1BFUl9TRUNPTkQgPSAxMDAwLFxuICAgICAgICBNU19QRVJfTUlOVVRFID0gNjAgKiBNU19QRVJfU0VDT05ELFxuICAgICAgICBNU19QRVJfSE9VUiA9IDYwICogTVNfUEVSX01JTlVURSxcbiAgICAgICAgTVNfUEVSXzQwMF9ZRUFSUyA9ICgzNjUgKiA0MDAgKyA5NykgKiAyNCAqIE1TX1BFUl9IT1VSO1xuXG4gICAgLy8gYWN0dWFsIG1vZHVsbyAtIGhhbmRsZXMgbmVnYXRpdmUgbnVtYmVycyAoZm9yIGRhdGVzIGJlZm9yZSAxOTcwKTpcbiAgICBmdW5jdGlvbiBtb2QkMShkaXZpZGVuZCwgZGl2aXNvcikge1xuICAgICAgICByZXR1cm4gKChkaXZpZGVuZCAlIGRpdmlzb3IpICsgZGl2aXNvcikgJSBkaXZpc29yO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsU3RhcnRPZkRhdGUoeSwgbSwgZCkge1xuICAgICAgICAvLyB0aGUgZGF0ZSBjb25zdHJ1Y3RvciByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHkgKyA0MDAsIG0sIGQpIC0gTVNfUEVSXzQwMF9ZRUFSUztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh5LCBtLCBkKS52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1dGNTdGFydE9mRGF0ZSh5LCBtLCBkKSB7XG4gICAgICAgIC8vIERhdGUuVVRDIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICByZXR1cm4gRGF0ZS5VVEMoeSArIDQwMCwgbSwgZCkgLSBNU19QRVJfNDAwX1lFQVJTO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIERhdGUuVVRDKHksIG0sIGQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhcnRPZih1bml0cykge1xuICAgICAgICB2YXIgdGltZSwgc3RhcnRPZkRhdGU7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAodW5pdHMgPT09IHVuZGVmaW5lZCB8fCB1bml0cyA9PT0gJ21pbGxpc2Vjb25kJyB8fCAhdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnRPZkRhdGUgPSB0aGlzLl9pc1VUQyA/IHV0Y1N0YXJ0T2ZEYXRlIDogbG9jYWxTdGFydE9mRGF0ZTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIDAsIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpIC0gKHRoaXMubW9udGgoKSAlIDMpLFxuICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZSgpIC0gdGhpcy53ZWVrZGF5KClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaXNvV2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtICh0aGlzLmlzb1dlZWtkYXkoKSAtIDEpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgdGhpcy5kYXRlKCkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgLT0gbW9kJDEoXG4gICAgICAgICAgICAgICAgICAgIHRpbWUgKyAodGhpcy5faXNVVEMgPyAwIDogdGhpcy51dGNPZmZzZXQoKSAqIE1TX1BFUl9NSU5VVEUpLFxuICAgICAgICAgICAgICAgICAgICBNU19QRVJfSE9VUlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lIC09IG1vZCQxKHRpbWUsIE1TX1BFUl9NSU5VVEUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSAtPSBtb2QkMSh0aW1lLCBNU19QRVJfU0VDT05EKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2Quc2V0VGltZSh0aW1lKTtcbiAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbmRPZih1bml0cykge1xuICAgICAgICB2YXIgdGltZSwgc3RhcnRPZkRhdGU7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAodW5pdHMgPT09IHVuZGVmaW5lZCB8fCB1bml0cyA9PT0gJ21pbGxpc2Vjb25kJyB8fCAhdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnRPZkRhdGUgPSB0aGlzLl9pc1VUQyA/IHV0Y1N0YXJ0T2ZEYXRlIDogbG9jYWxTdGFydE9mRGF0ZTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCkgKyAxLCAwLCAxKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgICAgICAgICB0aW1lID1cbiAgICAgICAgICAgICAgICAgICAgc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSAtICh0aGlzLm1vbnRoKCkgJSAzKSArIDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpICsgMSwgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtIHRoaXMud2Vla2RheSgpICsgN1xuICAgICAgICAgICAgICAgICAgICApIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2lzb1dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPVxuICAgICAgICAgICAgICAgICAgICBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlKCkgLSAodGhpcy5pc29XZWVrZGF5KCkgLSAxKSArIDdcbiAgICAgICAgICAgICAgICAgICAgKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCksIHRoaXMuZGF0ZSgpICsgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgKz1cbiAgICAgICAgICAgICAgICAgICAgTVNfUEVSX0hPVVIgLVxuICAgICAgICAgICAgICAgICAgICBtb2QkMShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUgKyAodGhpcy5faXNVVEMgPyAwIDogdGhpcy51dGNPZmZzZXQoKSAqIE1TX1BFUl9NSU5VVEUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgTVNfUEVSX0hPVVJcbiAgICAgICAgICAgICAgICAgICAgKSAtXG4gICAgICAgICAgICAgICAgICAgIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9IE1TX1BFUl9NSU5VVEUgLSBtb2QkMSh0aW1lLCBNU19QRVJfTUlOVVRFKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9IE1TX1BFUl9TRUNPTkQgLSBtb2QkMSh0aW1lLCBNU19QRVJfU0VDT05EKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kLnNldFRpbWUodGltZSk7XG4gICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsdWVPZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2QudmFsdWVPZigpIC0gKHRoaXMuX29mZnNldCB8fCAwKSAqIDYwMDAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVuaXgoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKHRoaXMudmFsdWVPZigpIC8gMTAwMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9EYXRlKCkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvQXJyYXkoKSB7XG4gICAgICAgIHZhciBtID0gdGhpcztcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG0ueWVhcigpLFxuICAgICAgICAgICAgbS5tb250aCgpLFxuICAgICAgICAgICAgbS5kYXRlKCksXG4gICAgICAgICAgICBtLmhvdXIoKSxcbiAgICAgICAgICAgIG0ubWludXRlKCksXG4gICAgICAgICAgICBtLnNlY29uZCgpLFxuICAgICAgICAgICAgbS5taWxsaXNlY29uZCgpLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvT2JqZWN0KCkge1xuICAgICAgICB2YXIgbSA9IHRoaXM7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB5ZWFyczogbS55ZWFyKCksXG4gICAgICAgICAgICBtb250aHM6IG0ubW9udGgoKSxcbiAgICAgICAgICAgIGRhdGU6IG0uZGF0ZSgpLFxuICAgICAgICAgICAgaG91cnM6IG0uaG91cnMoKSxcbiAgICAgICAgICAgIG1pbnV0ZXM6IG0ubWludXRlcygpLFxuICAgICAgICAgICAgc2Vjb25kczogbS5zZWNvbmRzKCksXG4gICAgICAgICAgICBtaWxsaXNlY29uZHM6IG0ubWlsbGlzZWNvbmRzKCksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgICAvLyBuZXcgRGF0ZShOYU4pLnRvSlNPTigpID09PSBudWxsXG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMudG9JU09TdHJpbmcoKSA6IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZCQyKCkge1xuICAgICAgICByZXR1cm4gaXNWYWxpZCh0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzaW5nRmxhZ3MoKSB7XG4gICAgICAgIHJldHVybiBleHRlbmQoe30sIGdldFBhcnNpbmdGbGFncyh0aGlzKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW52YWxpZEF0KCkge1xuICAgICAgICByZXR1cm4gZ2V0UGFyc2luZ0ZsYWdzKHRoaXMpLm92ZXJmbG93O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0aW9uRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlucHV0OiB0aGlzLl9pLFxuICAgICAgICAgICAgZm9ybWF0OiB0aGlzLl9mLFxuICAgICAgICAgICAgbG9jYWxlOiB0aGlzLl9sb2NhbGUsXG4gICAgICAgICAgICBpc1VUQzogdGhpcy5faXNVVEMsXG4gICAgICAgICAgICBzdHJpY3Q6IHRoaXMuX3N0cmljdCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTicsIDAsIDAsICdlcmFBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OJywgMCwgMCwgJ2VyYUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk5OJywgMCwgMCwgJ2VyYUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk5OTicsIDAsIDAsICdlcmFOYW1lJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OTk5OJywgMCwgMCwgJ2VyYU5hcnJvdycpO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3knLCAxXSwgJ3lvJywgJ2VyYVllYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneXknLCAyXSwgMCwgJ2VyYVllYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneXl5JywgM10sIDAsICdlcmFZZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3l5eXknLCA0XSwgMCwgJ2VyYVllYXInKTtcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ04nLCBtYXRjaEVyYUFiYnIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OJywgbWF0Y2hFcmFBYmJyKTtcbiAgICBhZGRSZWdleFRva2VuKCdOTk4nLCBtYXRjaEVyYUFiYnIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OTk4nLCBtYXRjaEVyYU5hbWUpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OTk5OJywgbWF0Y2hFcmFOYXJyb3cpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ04nLCAnTk4nLCAnTk5OJywgJ05OTk4nLCAnTk5OTk4nXSwgZnVuY3Rpb24gKFxuICAgICAgICBpbnB1dCxcbiAgICAgICAgYXJyYXksXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgdG9rZW5cbiAgICApIHtcbiAgICAgICAgdmFyIGVyYSA9IGNvbmZpZy5fbG9jYWxlLmVyYXNQYXJzZShpbnB1dCwgdG9rZW4sIGNvbmZpZy5fc3RyaWN0KTtcbiAgICAgICAgaWYgKGVyYSkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZXJhID0gZXJhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZEVyYSA9IGlucHV0O1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBhZGRSZWdleFRva2VuKCd5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneXknLCBtYXRjaFVuc2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCd5eXknLCBtYXRjaFVuc2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCd5eXl5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneW8nLCBtYXRjaEVyYVllYXJPcmRpbmFsKTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWyd5JywgJ3l5JywgJ3l5eScsICd5eXl5J10sIFlFQVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWyd5byddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHZhciBtYXRjaDtcbiAgICAgICAgaWYgKGNvbmZpZy5fbG9jYWxlLl9lcmFZZWFyT3JkaW5hbFJlZ2V4KSB7XG4gICAgICAgICAgICBtYXRjaCA9IGlucHV0Lm1hdGNoKGNvbmZpZy5fbG9jYWxlLl9lcmFZZWFyT3JkaW5hbFJlZ2V4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcuX2xvY2FsZS5lcmFZZWFyT3JkaW5hbFBhcnNlKSB7XG4gICAgICAgICAgICBhcnJheVtZRUFSXSA9IGNvbmZpZy5fbG9jYWxlLmVyYVllYXJPcmRpbmFsUGFyc2UoaW5wdXQsIG1hdGNoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFycmF5W1lFQVJdID0gcGFyc2VJbnQoaW5wdXQsIDEwKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlRXJhcyhtLCBmb3JtYXQpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLl9lcmFzIHx8IGdldExvY2FsZSgnZW4nKS5fZXJhcztcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBlcmFzW2ldLnNpbmNlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgICAgICAgICBkYXRlID0gaG9va3MoZXJhc1tpXS5zaW5jZSkuc3RhcnRPZignZGF5Jyk7XG4gICAgICAgICAgICAgICAgICAgIGVyYXNbaV0uc2luY2UgPSBkYXRlLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN3aXRjaCAodHlwZW9mIGVyYXNbaV0udW50aWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLnVudGlsID0gK0luZmluaXR5O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICAgICAgICAgIGRhdGUgPSBob29rcyhlcmFzW2ldLnVudGlsKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgICAgIGVyYXNbaV0udW50aWwgPSBkYXRlLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVyYXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlRXJhc1BhcnNlKGVyYU5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmVyYXMoKSxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBhYmJyLFxuICAgICAgICAgICAgbmFycm93O1xuICAgICAgICBlcmFOYW1lID0gZXJhTmFtZS50b1VwcGVyQ2FzZSgpO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgbmFtZSA9IGVyYXNbaV0ubmFtZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgYWJiciA9IGVyYXNbaV0uYWJici50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgbmFycm93ID0gZXJhc1tpXS5uYXJyb3cudG9VcHBlckNhc2UoKTtcblxuICAgICAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ04nOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdOTic6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OTic6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWJiciA9PT0gZXJhTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTk5OTic6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gZXJhTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTk5OTk4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hcnJvdyA9PT0gZXJhTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChbbmFtZSwgYWJiciwgbmFycm93XS5pbmRleE9mKGVyYU5hbWUpID49IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZUVyYXNDb252ZXJ0WWVhcihlcmEsIHllYXIpIHtcbiAgICAgICAgdmFyIGRpciA9IGVyYS5zaW5jZSA8PSBlcmEudW50aWwgPyArMSA6IC0xO1xuICAgICAgICBpZiAoeWVhciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gaG9va3MoZXJhLnNpbmNlKS55ZWFyKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaG9va3MoZXJhLnNpbmNlKS55ZWFyKCkgKyAoeWVhciAtIGVyYS5vZmZzZXQpICogZGlyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RXJhTmFtZSgpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICB2YWwgPSB0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuXG4gICAgICAgICAgICBpZiAoZXJhc1tpXS5zaW5jZSA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0udW50aWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5uYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVyYXNbaV0udW50aWwgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnNpbmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0ubmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRFcmFOYXJyb3coKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKGVyYXNbaV0uc2luY2UgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0ubmFycm93O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVyYXNbaV0udW50aWwgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnNpbmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0ubmFycm93O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYUFiYnIoKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKGVyYXNbaV0uc2luY2UgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0uYWJicjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLmFiYnI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RXJhWWVhcigpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgZGlyLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICBkaXIgPSBlcmFzW2ldLnNpbmNlIDw9IGVyYXNbaV0udW50aWwgPyArMSA6IC0xO1xuXG4gICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICB2YWwgPSB0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKGVyYXNbaV0uc2luY2UgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnVudGlsKSB8fFxuICAgICAgICAgICAgICAgIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLnllYXIoKSAtIGhvb2tzKGVyYXNbaV0uc2luY2UpLnllYXIoKSkgKiBkaXIgK1xuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLm9mZnNldFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy55ZWFyKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXJhc05hbWVSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19lcmFzTmFtZVJlZ2V4JykpIHtcbiAgICAgICAgICAgIGNvbXB1dGVFcmFzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNTdHJpY3QgPyB0aGlzLl9lcmFzTmFtZVJlZ2V4IDogdGhpcy5fZXJhc1JlZ2V4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVyYXNBYmJyUmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfZXJhc0FiYnJSZWdleCcpKSB7XG4gICAgICAgICAgICBjb21wdXRlRXJhc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0ID8gdGhpcy5fZXJhc0FiYnJSZWdleCA6IHRoaXMuX2VyYXNSZWdleDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlcmFzTmFycm93UmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfZXJhc05hcnJvd1JlZ2V4JykpIHtcbiAgICAgICAgICAgIGNvbXB1dGVFcmFzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNTdHJpY3QgPyB0aGlzLl9lcmFzTmFycm93UmVnZXggOiB0aGlzLl9lcmFzUmVnZXg7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF0Y2hFcmFBYmJyKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5lcmFzQWJiclJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYU5hbWUoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLmVyYXNOYW1lUmVnZXgoaXNTdHJpY3QpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hdGNoRXJhTmFycm93KGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5lcmFzTmFycm93UmVnZXgoaXNTdHJpY3QpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hdGNoRXJhWWVhck9yZGluYWwoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLl9lcmFZZWFyT3JkaW5hbFJlZ2V4IHx8IG1hdGNoVW5zaWduZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZUVyYXNQYXJzZSgpIHtcbiAgICAgICAgdmFyIGFiYnJQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG5hbWVQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG5hcnJvd1BpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbWl4ZWRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMuZXJhcygpO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgbmFtZVBpZWNlcy5wdXNoKHJlZ2V4RXNjYXBlKGVyYXNbaV0ubmFtZSkpO1xuICAgICAgICAgICAgYWJiclBpZWNlcy5wdXNoKHJlZ2V4RXNjYXBlKGVyYXNbaV0uYWJicikpO1xuICAgICAgICAgICAgbmFycm93UGllY2VzLnB1c2gocmVnZXhFc2NhcGUoZXJhc1tpXS5uYXJyb3cpKTtcblxuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChyZWdleEVzY2FwZShlcmFzW2ldLm5hbWUpKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2gocmVnZXhFc2NhcGUoZXJhc1tpXS5hYmJyKSk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKHJlZ2V4RXNjYXBlKGVyYXNbaV0ubmFycm93KSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9lcmFzUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBtaXhlZFBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX2VyYXNOYW1lUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBuYW1lUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fZXJhc0FiYnJSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIGFiYnJQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9lcmFzTmFycm93UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIG5hcnJvd1BpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ2dnJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2Vla1llYXIoKSAlIDEwMDtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnR0cnLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc29XZWVrWWVhcigpICUgMTAwO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gYWRkV2Vla1llYXJGb3JtYXRUb2tlbih0b2tlbiwgZ2V0dGVyKSB7XG4gICAgICAgIGFkZEZvcm1hdFRva2VuKDAsIFt0b2tlbiwgdG9rZW4ubGVuZ3RoXSwgMCwgZ2V0dGVyKTtcbiAgICB9XG5cbiAgICBhZGRXZWVrWWVhckZvcm1hdFRva2VuKCdnZ2dnJywgJ3dlZWtZZWFyJyk7XG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignZ2dnZ2cnLCAnd2Vla1llYXInKTtcbiAgICBhZGRXZWVrWWVhckZvcm1hdFRva2VuKCdHR0dHJywgJ2lzb1dlZWtZZWFyJyk7XG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignR0dHR0cnLCAnaXNvV2Vla1llYXInKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnd2Vla1llYXInLCAnZ2cnKTtcbiAgICBhZGRVbml0QWxpYXMoJ2lzb1dlZWtZZWFyJywgJ0dHJyk7XG5cbiAgICAvLyBQUklPUklUWVxuXG4gICAgYWRkVW5pdFByaW9yaXR5KCd3ZWVrWWVhcicsIDEpO1xuICAgIGFkZFVuaXRQcmlvcml0eSgnaXNvV2Vla1llYXInLCAxKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0cnLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignZycsIG1hdGNoU2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCdHRycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdnZycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdHR0dHJywgbWF0Y2gxdG80LCBtYXRjaDQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2dnZ2cnLCBtYXRjaDF0bzQsIG1hdGNoNCk7XG4gICAgYWRkUmVnZXhUb2tlbignR0dHR0cnLCBtYXRjaDF0bzYsIG1hdGNoNik7XG4gICAgYWRkUmVnZXhUb2tlbignZ2dnZ2cnLCBtYXRjaDF0bzYsIG1hdGNoNik7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ2dnZ2cnLCAnZ2dnZ2cnLCAnR0dHRycsICdHR0dHRyddLCBmdW5jdGlvbiAoXG4gICAgICAgIGlucHV0LFxuICAgICAgICB3ZWVrLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHRva2VuXG4gICAgKSB7XG4gICAgICAgIHdlZWtbdG9rZW4uc3Vic3RyKDAsIDIpXSA9IHRvSW50KGlucHV0KTtcbiAgICB9KTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZ2cnLCAnR0cnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHdlZWtbdG9rZW5dID0gaG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0V2Vla1llYXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFNldFdlZWtZZWFySGVscGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICB0aGlzLndlZWsoKSxcbiAgICAgICAgICAgIHRoaXMud2Vla2RheSgpLFxuICAgICAgICAgICAgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LFxuICAgICAgICAgICAgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG95XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPV2Vla1llYXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFNldFdlZWtZZWFySGVscGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICB0aGlzLmlzb1dlZWsoKSxcbiAgICAgICAgICAgIHRoaXMuaXNvV2Vla2RheSgpLFxuICAgICAgICAgICAgMSxcbiAgICAgICAgICAgIDRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJU09XZWVrc0luWWVhcigpIHtcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMueWVhcigpLCAxLCA0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJU09XZWVrc0luSVNPV2Vla1llYXIoKSB7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLmlzb1dlZWtZZWFyKCksIDEsIDQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFdlZWtzSW5ZZWFyKCkge1xuICAgICAgICB2YXIgd2Vla0luZm8gPSB0aGlzLmxvY2FsZURhdGEoKS5fd2VlaztcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMueWVhcigpLCB3ZWVrSW5mby5kb3csIHdlZWtJbmZvLmRveSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0V2Vla3NJbldlZWtZZWFyKCkge1xuICAgICAgICB2YXIgd2Vla0luZm8gPSB0aGlzLmxvY2FsZURhdGEoKS5fd2VlaztcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMud2Vla1llYXIoKSwgd2Vla0luZm8uZG93LCB3ZWVrSW5mby5kb3kpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldFdlZWtZZWFySGVscGVyKGlucHV0LCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla3NUYXJnZXQ7XG4gICAgICAgIGlmIChpbnB1dCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gd2Vla09mWWVhcih0aGlzLCBkb3csIGRveSkueWVhcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdlZWtzVGFyZ2V0ID0gd2Vla3NJblllYXIoaW5wdXQsIGRvdywgZG95KTtcbiAgICAgICAgICAgIGlmICh3ZWVrID4gd2Vla3NUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICB3ZWVrID0gd2Vla3NUYXJnZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2V0V2Vla0FsbC5jYWxsKHRoaXMsIGlucHV0LCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRXZWVrQWxsKHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgZGF5T2ZZZWFyRGF0YSA9IGRheU9mWWVhckZyb21XZWVrcyh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpLFxuICAgICAgICAgICAgZGF0ZSA9IGNyZWF0ZVVUQ0RhdGUoZGF5T2ZZZWFyRGF0YS55ZWFyLCAwLCBkYXlPZlllYXJEYXRhLmRheU9mWWVhcik7XG5cbiAgICAgICAgdGhpcy55ZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSk7XG4gICAgICAgIHRoaXMubW9udGgoZGF0ZS5nZXRVVENNb250aCgpKTtcbiAgICAgICAgdGhpcy5kYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1EnLCAwLCAnUW8nLCAncXVhcnRlcicpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdxdWFydGVyJywgJ1EnKTtcblxuICAgIC8vIFBSSU9SSVRZXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ3F1YXJ0ZXInLCA3KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1EnLCBtYXRjaDEpO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1EnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W01PTlRIXSA9ICh0b0ludChpbnB1dCkgLSAxKSAqIDM7XG4gICAgfSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXRRdWFydGVyKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsXG4gICAgICAgICAgICA/IE1hdGguY2VpbCgodGhpcy5tb250aCgpICsgMSkgLyAzKVxuICAgICAgICAgICAgOiB0aGlzLm1vbnRoKChpbnB1dCAtIDEpICogMyArICh0aGlzLm1vbnRoKCkgJSAzKSk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0QnLCBbJ0REJywgMl0sICdEbycsICdkYXRlJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ2RhdGUnLCAnRCcpO1xuXG4gICAgLy8gUFJJT1JJVFlcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2RhdGUnLCA5KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0QnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0REJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0RvJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgLy8gVE9ETzogUmVtb3ZlIFwib3JkaW5hbFBhcnNlXCIgZmFsbGJhY2sgaW4gbmV4dCBtYWpvciByZWxlYXNlLlxuICAgICAgICByZXR1cm4gaXNTdHJpY3RcbiAgICAgICAgICAgID8gbG9jYWxlLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlIHx8IGxvY2FsZS5fb3JkaW5hbFBhcnNlXG4gICAgICAgICAgICA6IGxvY2FsZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQ7XG4gICAgfSk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnRCcsICdERCddLCBEQVRFKTtcbiAgICBhZGRQYXJzZVRva2VuKCdEbycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbREFURV0gPSB0b0ludChpbnB1dC5tYXRjaChtYXRjaDF0bzIpWzBdKTtcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXREYXlPZk1vbnRoID0gbWFrZUdldFNldCgnRGF0ZScsIHRydWUpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0RERCcsIFsnRERERCcsIDNdLCAnREREbycsICdkYXlPZlllYXInKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnZGF5T2ZZZWFyJywgJ0RERCcpO1xuXG4gICAgLy8gUFJJT1JJVFlcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2RheU9mWWVhcicsIDQpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignREREJywgbWF0Y2gxdG8zKTtcbiAgICBhZGRSZWdleFRva2VuKCdEREREJywgbWF0Y2gzKTtcbiAgICBhZGRQYXJzZVRva2VuKFsnREREJywgJ0REREQnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID0gdG9JbnQoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0RGF5T2ZZZWFyKGlucHV0KSB7XG4gICAgICAgIHZhciBkYXlPZlllYXIgPVxuICAgICAgICAgICAgTWF0aC5yb3VuZChcbiAgICAgICAgICAgICAgICAodGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpIC0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ3llYXInKSkgLyA4NjRlNVxuICAgICAgICAgICAgKSArIDE7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gZGF5T2ZZZWFyIDogdGhpcy5hZGQoaW5wdXQgLSBkYXlPZlllYXIsICdkJyk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ20nLCBbJ21tJywgMl0sIDAsICdtaW51dGUnKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnbWludXRlJywgJ20nKTtcblxuICAgIC8vIFBSSU9SSVRZXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ21pbnV0ZScsIDE0KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ20nLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ21tJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydtJywgJ21tJ10sIE1JTlVURSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0TWludXRlID0gbWFrZUdldFNldCgnTWludXRlcycsIGZhbHNlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdzJywgWydzcycsIDJdLCAwLCAnc2Vjb25kJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ3NlY29uZCcsICdzJyk7XG5cbiAgICAvLyBQUklPUklUWVxuXG4gICAgYWRkVW5pdFByaW9yaXR5KCdzZWNvbmQnLCAxNSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdzJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdzcycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRQYXJzZVRva2VuKFsncycsICdzcyddLCBTRUNPTkQpO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldFNlY29uZCA9IG1ha2VHZXRTZXQoJ1NlY29uZHMnLCBmYWxzZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignUycsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIH5+KHRoaXMubWlsbGlzZWNvbmQoKSAvIDEwMCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIH5+KHRoaXMubWlsbGlzZWNvbmQoKSAvIDEwKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTJywgM10sIDAsICdtaWxsaXNlY29uZCcpO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTUycsIDRdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTJywgNV0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTUycsIDZdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTUycsIDddLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTU1NTJywgOF0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDAwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTU1NTUycsIDldLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwMDAwO1xuICAgIH0pO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdtaWxsaXNlY29uZCcsICdtcycpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgnbWlsbGlzZWNvbmQnLCAxNik7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdTJywgbWF0Y2gxdG8zLCBtYXRjaDEpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1NTJywgbWF0Y2gxdG8zLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1NTUycsIG1hdGNoMXRvMywgbWF0Y2gzKTtcblxuICAgIHZhciB0b2tlbiwgZ2V0U2V0TWlsbGlzZWNvbmQ7XG4gICAgZm9yICh0b2tlbiA9ICdTU1NTJzsgdG9rZW4ubGVuZ3RoIDw9IDk7IHRva2VuICs9ICdTJykge1xuICAgICAgICBhZGRSZWdleFRva2VuKHRva2VuLCBtYXRjaFVuc2lnbmVkKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZU1zKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtNSUxMSVNFQ09ORF0gPSB0b0ludCgoJzAuJyArIGlucHV0KSAqIDEwMDApO1xuICAgIH1cblxuICAgIGZvciAodG9rZW4gPSAnUyc7IHRva2VuLmxlbmd0aCA8PSA5OyB0b2tlbiArPSAnUycpIHtcbiAgICAgICAgYWRkUGFyc2VUb2tlbih0b2tlbiwgcGFyc2VNcyk7XG4gICAgfVxuXG4gICAgZ2V0U2V0TWlsbGlzZWNvbmQgPSBtYWtlR2V0U2V0KCdNaWxsaXNlY29uZHMnLCBmYWxzZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigneicsIDAsIDAsICd6b25lQWJicicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd6eicsIDAsIDAsICd6b25lTmFtZScpO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0Wm9uZUFiYnIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1VUQyA/ICdVVEMnIDogJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Wm9uZU5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1VUQyA/ICdDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZScgOiAnJztcbiAgICB9XG5cbiAgICB2YXIgcHJvdG8gPSBNb21lbnQucHJvdG90eXBlO1xuXG4gICAgcHJvdG8uYWRkID0gYWRkO1xuICAgIHByb3RvLmNhbGVuZGFyID0gY2FsZW5kYXIkMTtcbiAgICBwcm90by5jbG9uZSA9IGNsb25lO1xuICAgIHByb3RvLmRpZmYgPSBkaWZmO1xuICAgIHByb3RvLmVuZE9mID0gZW5kT2Y7XG4gICAgcHJvdG8uZm9ybWF0ID0gZm9ybWF0O1xuICAgIHByb3RvLmZyb20gPSBmcm9tO1xuICAgIHByb3RvLmZyb21Ob3cgPSBmcm9tTm93O1xuICAgIHByb3RvLnRvID0gdG87XG4gICAgcHJvdG8udG9Ob3cgPSB0b05vdztcbiAgICBwcm90by5nZXQgPSBzdHJpbmdHZXQ7XG4gICAgcHJvdG8uaW52YWxpZEF0ID0gaW52YWxpZEF0O1xuICAgIHByb3RvLmlzQWZ0ZXIgPSBpc0FmdGVyO1xuICAgIHByb3RvLmlzQmVmb3JlID0gaXNCZWZvcmU7XG4gICAgcHJvdG8uaXNCZXR3ZWVuID0gaXNCZXR3ZWVuO1xuICAgIHByb3RvLmlzU2FtZSA9IGlzU2FtZTtcbiAgICBwcm90by5pc1NhbWVPckFmdGVyID0gaXNTYW1lT3JBZnRlcjtcbiAgICBwcm90by5pc1NhbWVPckJlZm9yZSA9IGlzU2FtZU9yQmVmb3JlO1xuICAgIHByb3RvLmlzVmFsaWQgPSBpc1ZhbGlkJDI7XG4gICAgcHJvdG8ubGFuZyA9IGxhbmc7XG4gICAgcHJvdG8ubG9jYWxlID0gbG9jYWxlO1xuICAgIHByb3RvLmxvY2FsZURhdGEgPSBsb2NhbGVEYXRhO1xuICAgIHByb3RvLm1heCA9IHByb3RvdHlwZU1heDtcbiAgICBwcm90by5taW4gPSBwcm90b3R5cGVNaW47XG4gICAgcHJvdG8ucGFyc2luZ0ZsYWdzID0gcGFyc2luZ0ZsYWdzO1xuICAgIHByb3RvLnNldCA9IHN0cmluZ1NldDtcbiAgICBwcm90by5zdGFydE9mID0gc3RhcnRPZjtcbiAgICBwcm90by5zdWJ0cmFjdCA9IHN1YnRyYWN0O1xuICAgIHByb3RvLnRvQXJyYXkgPSB0b0FycmF5O1xuICAgIHByb3RvLnRvT2JqZWN0ID0gdG9PYmplY3Q7XG4gICAgcHJvdG8udG9EYXRlID0gdG9EYXRlO1xuICAgIHByb3RvLnRvSVNPU3RyaW5nID0gdG9JU09TdHJpbmc7XG4gICAgcHJvdG8uaW5zcGVjdCA9IGluc3BlY3Q7XG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC5mb3IgIT0gbnVsbCkge1xuICAgICAgICBwcm90b1tTeW1ib2wuZm9yKCdub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbScpXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAnTW9tZW50PCcgKyB0aGlzLmZvcm1hdCgpICsgJz4nO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBwcm90by50b0pTT04gPSB0b0pTT047XG4gICAgcHJvdG8udG9TdHJpbmcgPSB0b1N0cmluZztcbiAgICBwcm90by51bml4ID0gdW5peDtcbiAgICBwcm90by52YWx1ZU9mID0gdmFsdWVPZjtcbiAgICBwcm90by5jcmVhdGlvbkRhdGEgPSBjcmVhdGlvbkRhdGE7XG4gICAgcHJvdG8uZXJhTmFtZSA9IGdldEVyYU5hbWU7XG4gICAgcHJvdG8uZXJhTmFycm93ID0gZ2V0RXJhTmFycm93O1xuICAgIHByb3RvLmVyYUFiYnIgPSBnZXRFcmFBYmJyO1xuICAgIHByb3RvLmVyYVllYXIgPSBnZXRFcmFZZWFyO1xuICAgIHByb3RvLnllYXIgPSBnZXRTZXRZZWFyO1xuICAgIHByb3RvLmlzTGVhcFllYXIgPSBnZXRJc0xlYXBZZWFyO1xuICAgIHByb3RvLndlZWtZZWFyID0gZ2V0U2V0V2Vla1llYXI7XG4gICAgcHJvdG8uaXNvV2Vla1llYXIgPSBnZXRTZXRJU09XZWVrWWVhcjtcbiAgICBwcm90by5xdWFydGVyID0gcHJvdG8ucXVhcnRlcnMgPSBnZXRTZXRRdWFydGVyO1xuICAgIHByb3RvLm1vbnRoID0gZ2V0U2V0TW9udGg7XG4gICAgcHJvdG8uZGF5c0luTW9udGggPSBnZXREYXlzSW5Nb250aDtcbiAgICBwcm90by53ZWVrID0gcHJvdG8ud2Vla3MgPSBnZXRTZXRXZWVrO1xuICAgIHByb3RvLmlzb1dlZWsgPSBwcm90by5pc29XZWVrcyA9IGdldFNldElTT1dlZWs7XG4gICAgcHJvdG8ud2Vla3NJblllYXIgPSBnZXRXZWVrc0luWWVhcjtcbiAgICBwcm90by53ZWVrc0luV2Vla1llYXIgPSBnZXRXZWVrc0luV2Vla1llYXI7XG4gICAgcHJvdG8uaXNvV2Vla3NJblllYXIgPSBnZXRJU09XZWVrc0luWWVhcjtcbiAgICBwcm90by5pc29XZWVrc0luSVNPV2Vla1llYXIgPSBnZXRJU09XZWVrc0luSVNPV2Vla1llYXI7XG4gICAgcHJvdG8uZGF0ZSA9IGdldFNldERheU9mTW9udGg7XG4gICAgcHJvdG8uZGF5ID0gcHJvdG8uZGF5cyA9IGdldFNldERheU9mV2VlaztcbiAgICBwcm90by53ZWVrZGF5ID0gZ2V0U2V0TG9jYWxlRGF5T2ZXZWVrO1xuICAgIHByb3RvLmlzb1dlZWtkYXkgPSBnZXRTZXRJU09EYXlPZldlZWs7XG4gICAgcHJvdG8uZGF5T2ZZZWFyID0gZ2V0U2V0RGF5T2ZZZWFyO1xuICAgIHByb3RvLmhvdXIgPSBwcm90by5ob3VycyA9IGdldFNldEhvdXI7XG4gICAgcHJvdG8ubWludXRlID0gcHJvdG8ubWludXRlcyA9IGdldFNldE1pbnV0ZTtcbiAgICBwcm90by5zZWNvbmQgPSBwcm90by5zZWNvbmRzID0gZ2V0U2V0U2Vjb25kO1xuICAgIHByb3RvLm1pbGxpc2Vjb25kID0gcHJvdG8ubWlsbGlzZWNvbmRzID0gZ2V0U2V0TWlsbGlzZWNvbmQ7XG4gICAgcHJvdG8udXRjT2Zmc2V0ID0gZ2V0U2V0T2Zmc2V0O1xuICAgIHByb3RvLnV0YyA9IHNldE9mZnNldFRvVVRDO1xuICAgIHByb3RvLmxvY2FsID0gc2V0T2Zmc2V0VG9Mb2NhbDtcbiAgICBwcm90by5wYXJzZVpvbmUgPSBzZXRPZmZzZXRUb1BhcnNlZE9mZnNldDtcbiAgICBwcm90by5oYXNBbGlnbmVkSG91ck9mZnNldCA9IGhhc0FsaWduZWRIb3VyT2Zmc2V0O1xuICAgIHByb3RvLmlzRFNUID0gaXNEYXlsaWdodFNhdmluZ1RpbWU7XG4gICAgcHJvdG8uaXNMb2NhbCA9IGlzTG9jYWw7XG4gICAgcHJvdG8uaXNVdGNPZmZzZXQgPSBpc1V0Y09mZnNldDtcbiAgICBwcm90by5pc1V0YyA9IGlzVXRjO1xuICAgIHByb3RvLmlzVVRDID0gaXNVdGM7XG4gICAgcHJvdG8uem9uZUFiYnIgPSBnZXRab25lQWJicjtcbiAgICBwcm90by56b25lTmFtZSA9IGdldFpvbmVOYW1lO1xuICAgIHByb3RvLmRhdGVzID0gZGVwcmVjYXRlKFxuICAgICAgICAnZGF0ZXMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIGRhdGUgaW5zdGVhZC4nLFxuICAgICAgICBnZXRTZXREYXlPZk1vbnRoXG4gICAgKTtcbiAgICBwcm90by5tb250aHMgPSBkZXByZWNhdGUoXG4gICAgICAgICdtb250aHMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbnRoIGluc3RlYWQnLFxuICAgICAgICBnZXRTZXRNb250aFxuICAgICk7XG4gICAgcHJvdG8ueWVhcnMgPSBkZXByZWNhdGUoXG4gICAgICAgICd5ZWFycyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgeWVhciBpbnN0ZWFkJyxcbiAgICAgICAgZ2V0U2V0WWVhclxuICAgICk7XG4gICAgcHJvdG8uem9uZSA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudCgpLnpvbmUgaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudCgpLnV0Y09mZnNldCBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL3pvbmUvJyxcbiAgICAgICAgZ2V0U2V0Wm9uZVxuICAgICk7XG4gICAgcHJvdG8uaXNEU1RTaGlmdGVkID0gZGVwcmVjYXRlKFxuICAgICAgICAnaXNEU1RTaGlmdGVkIGlzIGRlcHJlY2F0ZWQuIFNlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2RzdC1zaGlmdGVkLyBmb3IgbW9yZSBpbmZvcm1hdGlvbicsXG4gICAgICAgIGlzRGF5bGlnaHRTYXZpbmdUaW1lU2hpZnRlZFxuICAgICk7XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVVbml4KGlucHV0KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbChpbnB1dCAqIDEwMDApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUluWm9uZSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsLmFwcGx5KG51bGwsIGFyZ3VtZW50cykucGFyc2Vab25lKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlUGFyc2VQb3N0Rm9ybWF0KHN0cmluZykge1xuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgIH1cblxuICAgIHZhciBwcm90byQxID0gTG9jYWxlLnByb3RvdHlwZTtcblxuICAgIHByb3RvJDEuY2FsZW5kYXIgPSBjYWxlbmRhcjtcbiAgICBwcm90byQxLmxvbmdEYXRlRm9ybWF0ID0gbG9uZ0RhdGVGb3JtYXQ7XG4gICAgcHJvdG8kMS5pbnZhbGlkRGF0ZSA9IGludmFsaWREYXRlO1xuICAgIHByb3RvJDEub3JkaW5hbCA9IG9yZGluYWw7XG4gICAgcHJvdG8kMS5wcmVwYXJzZSA9IHByZVBhcnNlUG9zdEZvcm1hdDtcbiAgICBwcm90byQxLnBvc3Rmb3JtYXQgPSBwcmVQYXJzZVBvc3RGb3JtYXQ7XG4gICAgcHJvdG8kMS5yZWxhdGl2ZVRpbWUgPSByZWxhdGl2ZVRpbWU7XG4gICAgcHJvdG8kMS5wYXN0RnV0dXJlID0gcGFzdEZ1dHVyZTtcbiAgICBwcm90byQxLnNldCA9IHNldDtcbiAgICBwcm90byQxLmVyYXMgPSBsb2NhbGVFcmFzO1xuICAgIHByb3RvJDEuZXJhc1BhcnNlID0gbG9jYWxlRXJhc1BhcnNlO1xuICAgIHByb3RvJDEuZXJhc0NvbnZlcnRZZWFyID0gbG9jYWxlRXJhc0NvbnZlcnRZZWFyO1xuICAgIHByb3RvJDEuZXJhc0FiYnJSZWdleCA9IGVyYXNBYmJyUmVnZXg7XG4gICAgcHJvdG8kMS5lcmFzTmFtZVJlZ2V4ID0gZXJhc05hbWVSZWdleDtcbiAgICBwcm90byQxLmVyYXNOYXJyb3dSZWdleCA9IGVyYXNOYXJyb3dSZWdleDtcblxuICAgIHByb3RvJDEubW9udGhzID0gbG9jYWxlTW9udGhzO1xuICAgIHByb3RvJDEubW9udGhzU2hvcnQgPSBsb2NhbGVNb250aHNTaG9ydDtcbiAgICBwcm90byQxLm1vbnRoc1BhcnNlID0gbG9jYWxlTW9udGhzUGFyc2U7XG4gICAgcHJvdG8kMS5tb250aHNSZWdleCA9IG1vbnRoc1JlZ2V4O1xuICAgIHByb3RvJDEubW9udGhzU2hvcnRSZWdleCA9IG1vbnRoc1Nob3J0UmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrID0gbG9jYWxlV2VlaztcbiAgICBwcm90byQxLmZpcnN0RGF5T2ZZZWFyID0gbG9jYWxlRmlyc3REYXlPZlllYXI7XG4gICAgcHJvdG8kMS5maXJzdERheU9mV2VlayA9IGxvY2FsZUZpcnN0RGF5T2ZXZWVrO1xuXG4gICAgcHJvdG8kMS53ZWVrZGF5cyA9IGxvY2FsZVdlZWtkYXlzO1xuICAgIHByb3RvJDEud2Vla2RheXNNaW4gPSBsb2NhbGVXZWVrZGF5c01pbjtcbiAgICBwcm90byQxLndlZWtkYXlzU2hvcnQgPSBsb2NhbGVXZWVrZGF5c1Nob3J0O1xuICAgIHByb3RvJDEud2Vla2RheXNQYXJzZSA9IGxvY2FsZVdlZWtkYXlzUGFyc2U7XG5cbiAgICBwcm90byQxLndlZWtkYXlzUmVnZXggPSB3ZWVrZGF5c1JlZ2V4O1xuICAgIHByb3RvJDEud2Vla2RheXNTaG9ydFJlZ2V4ID0gd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgIHByb3RvJDEud2Vla2RheXNNaW5SZWdleCA9IHdlZWtkYXlzTWluUmVnZXg7XG5cbiAgICBwcm90byQxLmlzUE0gPSBsb2NhbGVJc1BNO1xuICAgIHByb3RvJDEubWVyaWRpZW0gPSBsb2NhbGVNZXJpZGllbTtcblxuICAgIGZ1bmN0aW9uIGdldCQxKGZvcm1hdCwgaW5kZXgsIGZpZWxkLCBzZXR0ZXIpIHtcbiAgICAgICAgdmFyIGxvY2FsZSA9IGdldExvY2FsZSgpLFxuICAgICAgICAgICAgdXRjID0gY3JlYXRlVVRDKCkuc2V0KHNldHRlciwgaW5kZXgpO1xuICAgICAgICByZXR1cm4gbG9jYWxlW2ZpZWxkXSh1dGMsIGZvcm1hdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRoc0ltcGwoZm9ybWF0LCBpbmRleCwgZmllbGQpIHtcbiAgICAgICAgaWYgKGlzTnVtYmVyKGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuXG4gICAgICAgIGlmIChpbmRleCAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0JDEoZm9ybWF0LCBpbmRleCwgZmllbGQsICdtb250aCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBvdXQgPSBbXTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIG91dFtpXSA9IGdldCQxKGZvcm1hdCwgaSwgZmllbGQsICdtb250aCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuXG4gICAgLy8gKClcbiAgICAvLyAoNSlcbiAgICAvLyAoZm10LCA1KVxuICAgIC8vIChmbXQpXG4gICAgLy8gKHRydWUpXG4gICAgLy8gKHRydWUsIDUpXG4gICAgLy8gKHRydWUsIGZtdCwgNSlcbiAgICAvLyAodHJ1ZSwgZm10KVxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCBmaWVsZCkge1xuICAgICAgICBpZiAodHlwZW9mIGxvY2FsZVNvcnRlZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9ybWF0ID0gbG9jYWxlU29ydGVkO1xuICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICBsb2NhbGVTb3J0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKGlzTnVtYmVyKGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGZvcm1hdDtcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdCB8fCAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsb2NhbGUgPSBnZXRMb2NhbGUoKSxcbiAgICAgICAgICAgIHNoaWZ0ID0gbG9jYWxlU29ydGVkID8gbG9jYWxlLl93ZWVrLmRvdyA6IDAsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgb3V0ID0gW107XG5cbiAgICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQkMShmb3JtYXQsIChpbmRleCArIHNoaWZ0KSAlIDcsIGZpZWxkLCAnZGF5Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICBvdXRbaV0gPSBnZXQkMShmb3JtYXQsIChpICsgc2hpZnQpICUgNywgZmllbGQsICdkYXknKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RNb250aHMoZm9ybWF0LCBpbmRleCkge1xuICAgICAgICByZXR1cm4gbGlzdE1vbnRoc0ltcGwoZm9ybWF0LCBpbmRleCwgJ21vbnRocycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RNb250aHNTaG9ydChmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCAnbW9udGhzU2hvcnQnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXMobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgJ3dlZWtkYXlzJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzU2hvcnQobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgJ3dlZWtkYXlzU2hvcnQnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXNNaW4obG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgJ3dlZWtkYXlzTWluJyk7XG4gICAgfVxuXG4gICAgZ2V0U2V0R2xvYmFsTG9jYWxlKCdlbicsIHtcbiAgICAgICAgZXJhczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNpbmNlOiAnMDAwMS0wMS0wMScsXG4gICAgICAgICAgICAgICAgdW50aWw6ICtJbmZpbml0eSxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IDEsXG4gICAgICAgICAgICAgICAgbmFtZTogJ0Fubm8gRG9taW5pJyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICdBRCcsXG4gICAgICAgICAgICAgICAgYWJicjogJ0FEJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcwMDAwLTEyLTMxJyxcbiAgICAgICAgICAgICAgICB1bnRpbDogLUluZmluaXR5LFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnQmVmb3JlIENocmlzdCcsXG4gICAgICAgICAgICAgICAgbmFycm93OiAnQkMnLFxuICAgICAgICAgICAgICAgIGFiYnI6ICdCQycsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0odGh8c3R8bmR8cmQpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgICAgICB0b0ludCgobnVtYmVyICUgMTAwKSAvIDEwKSA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAndGgnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3N0J1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICduZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gM1xuICAgICAgICAgICAgICAgICAgICAgICAgPyAncmQnXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICd0aCc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gU2lkZSBlZmZlY3QgaW1wb3J0c1xuXG4gICAgaG9va3MubGFuZyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudC5sYW5nIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlIGluc3RlYWQuJyxcbiAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlXG4gICAgKTtcbiAgICBob29rcy5sYW5nRGF0YSA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudC5sYW5nRGF0YSBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZURhdGEgaW5zdGVhZC4nLFxuICAgICAgICBnZXRMb2NhbGVcbiAgICApO1xuXG4gICAgdmFyIG1hdGhBYnMgPSBNYXRoLmFicztcblxuICAgIGZ1bmN0aW9uIGFicygpIHtcbiAgICAgICAgdmFyIGRhdGEgPSB0aGlzLl9kYXRhO1xuXG4gICAgICAgIHRoaXMuX21pbGxpc2Vjb25kcyA9IG1hdGhBYnModGhpcy5fbWlsbGlzZWNvbmRzKTtcbiAgICAgICAgdGhpcy5fZGF5cyA9IG1hdGhBYnModGhpcy5fZGF5cyk7XG4gICAgICAgIHRoaXMuX21vbnRocyA9IG1hdGhBYnModGhpcy5fbW9udGhzKTtcblxuICAgICAgICBkYXRhLm1pbGxpc2Vjb25kcyA9IG1hdGhBYnMoZGF0YS5taWxsaXNlY29uZHMpO1xuICAgICAgICBkYXRhLnNlY29uZHMgPSBtYXRoQWJzKGRhdGEuc2Vjb25kcyk7XG4gICAgICAgIGRhdGEubWludXRlcyA9IG1hdGhBYnMoZGF0YS5taW51dGVzKTtcbiAgICAgICAgZGF0YS5ob3VycyA9IG1hdGhBYnMoZGF0YS5ob3Vycyk7XG4gICAgICAgIGRhdGEubW9udGhzID0gbWF0aEFicyhkYXRhLm1vbnRocyk7XG4gICAgICAgIGRhdGEueWVhcnMgPSBtYXRoQWJzKGRhdGEueWVhcnMpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFN1YnRyYWN0JDEoZHVyYXRpb24sIGlucHV0LCB2YWx1ZSwgZGlyZWN0aW9uKSB7XG4gICAgICAgIHZhciBvdGhlciA9IGNyZWF0ZUR1cmF0aW9uKGlucHV0LCB2YWx1ZSk7XG5cbiAgICAgICAgZHVyYXRpb24uX21pbGxpc2Vjb25kcyArPSBkaXJlY3Rpb24gKiBvdGhlci5fbWlsbGlzZWNvbmRzO1xuICAgICAgICBkdXJhdGlvbi5fZGF5cyArPSBkaXJlY3Rpb24gKiBvdGhlci5fZGF5cztcbiAgICAgICAgZHVyYXRpb24uX21vbnRocyArPSBkaXJlY3Rpb24gKiBvdGhlci5fbW9udGhzO1xuXG4gICAgICAgIHJldHVybiBkdXJhdGlvbi5fYnViYmxlKCk7XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydHMgb25seSAyLjAtc3R5bGUgYWRkKDEsICdzJykgb3IgYWRkKGR1cmF0aW9uKVxuICAgIGZ1bmN0aW9uIGFkZCQxKGlucHV0LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gYWRkU3VidHJhY3QkMSh0aGlzLCBpbnB1dCwgdmFsdWUsIDEpO1xuICAgIH1cblxuICAgIC8vIHN1cHBvcnRzIG9ubHkgMi4wLXN0eWxlIHN1YnRyYWN0KDEsICdzJykgb3Igc3VidHJhY3QoZHVyYXRpb24pXG4gICAgZnVuY3Rpb24gc3VidHJhY3QkMShpbnB1dCwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGFkZFN1YnRyYWN0JDEodGhpcywgaW5wdXQsIHZhbHVlLCAtMSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWJzQ2VpbChudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKG51bWJlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWJibGUoKSB7XG4gICAgICAgIHZhciBtaWxsaXNlY29uZHMgPSB0aGlzLl9taWxsaXNlY29uZHMsXG4gICAgICAgICAgICBkYXlzID0gdGhpcy5fZGF5cyxcbiAgICAgICAgICAgIG1vbnRocyA9IHRoaXMuX21vbnRocyxcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLl9kYXRhLFxuICAgICAgICAgICAgc2Vjb25kcyxcbiAgICAgICAgICAgIG1pbnV0ZXMsXG4gICAgICAgICAgICBob3VycyxcbiAgICAgICAgICAgIHllYXJzLFxuICAgICAgICAgICAgbW9udGhzRnJvbURheXM7XG5cbiAgICAgICAgLy8gaWYgd2UgaGF2ZSBhIG1peCBvZiBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgdmFsdWVzLCBidWJibGUgZG93biBmaXJzdFxuICAgICAgICAvLyBjaGVjazogaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvaXNzdWVzLzIxNjZcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAobWlsbGlzZWNvbmRzID49IDAgJiYgZGF5cyA+PSAwICYmIG1vbnRocyA+PSAwKSB8fFxuICAgICAgICAgICAgICAgIChtaWxsaXNlY29uZHMgPD0gMCAmJiBkYXlzIDw9IDAgJiYgbW9udGhzIDw9IDApXG4gICAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgICAgbWlsbGlzZWNvbmRzICs9IGFic0NlaWwobW9udGhzVG9EYXlzKG1vbnRocykgKyBkYXlzKSAqIDg2NGU1O1xuICAgICAgICAgICAgZGF5cyA9IDA7XG4gICAgICAgICAgICBtb250aHMgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGJ1YmJsZXMgdXAgdmFsdWVzLCBzZWUgdGhlIHRlc3RzIGZvclxuICAgICAgICAvLyBleGFtcGxlcyBvZiB3aGF0IHRoYXQgbWVhbnMuXG4gICAgICAgIGRhdGEubWlsbGlzZWNvbmRzID0gbWlsbGlzZWNvbmRzICUgMTAwMDtcblxuICAgICAgICBzZWNvbmRzID0gYWJzRmxvb3IobWlsbGlzZWNvbmRzIC8gMTAwMCk7XG4gICAgICAgIGRhdGEuc2Vjb25kcyA9IHNlY29uZHMgJSA2MDtcblxuICAgICAgICBtaW51dGVzID0gYWJzRmxvb3Ioc2Vjb25kcyAvIDYwKTtcbiAgICAgICAgZGF0YS5taW51dGVzID0gbWludXRlcyAlIDYwO1xuXG4gICAgICAgIGhvdXJzID0gYWJzRmxvb3IobWludXRlcyAvIDYwKTtcbiAgICAgICAgZGF0YS5ob3VycyA9IGhvdXJzICUgMjQ7XG5cbiAgICAgICAgZGF5cyArPSBhYnNGbG9vcihob3VycyAvIDI0KTtcblxuICAgICAgICAvLyBjb252ZXJ0IGRheXMgdG8gbW9udGhzXG4gICAgICAgIG1vbnRoc0Zyb21EYXlzID0gYWJzRmxvb3IoZGF5c1RvTW9udGhzKGRheXMpKTtcbiAgICAgICAgbW9udGhzICs9IG1vbnRoc0Zyb21EYXlzO1xuICAgICAgICBkYXlzIC09IGFic0NlaWwobW9udGhzVG9EYXlzKG1vbnRoc0Zyb21EYXlzKSk7XG5cbiAgICAgICAgLy8gMTIgbW9udGhzIC0+IDEgeWVhclxuICAgICAgICB5ZWFycyA9IGFic0Zsb29yKG1vbnRocyAvIDEyKTtcbiAgICAgICAgbW9udGhzICU9IDEyO1xuXG4gICAgICAgIGRhdGEuZGF5cyA9IGRheXM7XG4gICAgICAgIGRhdGEubW9udGhzID0gbW9udGhzO1xuICAgICAgICBkYXRhLnllYXJzID0geWVhcnM7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGF5c1RvTW9udGhzKGRheXMpIHtcbiAgICAgICAgLy8gNDAwIHllYXJzIGhhdmUgMTQ2MDk3IGRheXMgKHRha2luZyBpbnRvIGFjY291bnQgbGVhcCB5ZWFyIHJ1bGVzKVxuICAgICAgICAvLyA0MDAgeWVhcnMgaGF2ZSAxMiBtb250aHMgPT09IDQ4MDBcbiAgICAgICAgcmV0dXJuIChkYXlzICogNDgwMCkgLyAxNDYwOTc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9udGhzVG9EYXlzKG1vbnRocykge1xuICAgICAgICAvLyB0aGUgcmV2ZXJzZSBvZiBkYXlzVG9Nb250aHNcbiAgICAgICAgcmV0dXJuIChtb250aHMgKiAxNDYwOTcpIC8gNDgwMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhcyh1bml0cykge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkYXlzLFxuICAgICAgICAgICAgbW9udGhzLFxuICAgICAgICAgICAgbWlsbGlzZWNvbmRzID0gdGhpcy5fbWlsbGlzZWNvbmRzO1xuXG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuXG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21vbnRoJyB8fCB1bml0cyA9PT0gJ3F1YXJ0ZXInIHx8IHVuaXRzID09PSAneWVhcicpIHtcbiAgICAgICAgICAgIGRheXMgPSB0aGlzLl9kYXlzICsgbWlsbGlzZWNvbmRzIC8gODY0ZTU7XG4gICAgICAgICAgICBtb250aHMgPSB0aGlzLl9tb250aHMgKyBkYXlzVG9Nb250aHMoZGF5cyk7XG4gICAgICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzIC8gMztcbiAgICAgICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRocyAvIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gaGFuZGxlIG1pbGxpc2Vjb25kcyBzZXBhcmF0ZWx5IGJlY2F1c2Ugb2YgZmxvYXRpbmcgcG9pbnQgbWF0aCBlcnJvcnMgKGlzc3VlICMxODY3KVxuICAgICAgICAgICAgZGF5cyA9IHRoaXMuX2RheXMgKyBNYXRoLnJvdW5kKG1vbnRoc1RvRGF5cyh0aGlzLl9tb250aHMpKTtcbiAgICAgICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgLyA3ICsgbWlsbGlzZWNvbmRzIC8gNjA0OGU1O1xuICAgICAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICsgbWlsbGlzZWNvbmRzIC8gODY0ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICogMjQgKyBtaWxsaXNlY29uZHMgLyAzNmU1O1xuICAgICAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICogMTQ0MCArIG1pbGxpc2Vjb25kcyAvIDZlNDtcbiAgICAgICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF5cyAqIDg2NDAwICsgbWlsbGlzZWNvbmRzIC8gMTAwMDtcbiAgICAgICAgICAgICAgICAvLyBNYXRoLmZsb29yIHByZXZlbnRzIGZsb2F0aW5nIHBvaW50IG1hdGggZXJyb3JzIGhlcmVcbiAgICAgICAgICAgICAgICBjYXNlICdtaWxsaXNlY29uZCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKGRheXMgKiA4NjRlNSkgKyBtaWxsaXNlY29uZHM7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHVuaXQgJyArIHVuaXRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE86IFVzZSB0aGlzLmFzKCdtcycpP1xuICAgIGZ1bmN0aW9uIHZhbHVlT2YkMSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5fbWlsbGlzZWNvbmRzICtcbiAgICAgICAgICAgIHRoaXMuX2RheXMgKiA4NjRlNSArXG4gICAgICAgICAgICAodGhpcy5fbW9udGhzICUgMTIpICogMjU5MmU2ICtcbiAgICAgICAgICAgIHRvSW50KHRoaXMuX21vbnRocyAvIDEyKSAqIDMxNTM2ZTZcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlQXMoYWxpYXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFzKGFsaWFzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgYXNNaWxsaXNlY29uZHMgPSBtYWtlQXMoJ21zJyksXG4gICAgICAgIGFzU2Vjb25kcyA9IG1ha2VBcygncycpLFxuICAgICAgICBhc01pbnV0ZXMgPSBtYWtlQXMoJ20nKSxcbiAgICAgICAgYXNIb3VycyA9IG1ha2VBcygnaCcpLFxuICAgICAgICBhc0RheXMgPSBtYWtlQXMoJ2QnKSxcbiAgICAgICAgYXNXZWVrcyA9IG1ha2VBcygndycpLFxuICAgICAgICBhc01vbnRocyA9IG1ha2VBcygnTScpLFxuICAgICAgICBhc1F1YXJ0ZXJzID0gbWFrZUFzKCdRJyksXG4gICAgICAgIGFzWWVhcnMgPSBtYWtlQXMoJ3knKTtcblxuICAgIGZ1bmN0aW9uIGNsb25lJDEoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXQkMih1bml0cykge1xuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpc1t1bml0cyArICdzJ10oKSA6IE5hTjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlR2V0dGVyKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2RhdGFbbmFtZV0gOiBOYU47XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIG1pbGxpc2Vjb25kcyA9IG1ha2VHZXR0ZXIoJ21pbGxpc2Vjb25kcycpLFxuICAgICAgICBzZWNvbmRzID0gbWFrZUdldHRlcignc2Vjb25kcycpLFxuICAgICAgICBtaW51dGVzID0gbWFrZUdldHRlcignbWludXRlcycpLFxuICAgICAgICBob3VycyA9IG1ha2VHZXR0ZXIoJ2hvdXJzJyksXG4gICAgICAgIGRheXMgPSBtYWtlR2V0dGVyKCdkYXlzJyksXG4gICAgICAgIG1vbnRocyA9IG1ha2VHZXR0ZXIoJ21vbnRocycpLFxuICAgICAgICB5ZWFycyA9IG1ha2VHZXR0ZXIoJ3llYXJzJyk7XG5cbiAgICBmdW5jdGlvbiB3ZWVrcygpIHtcbiAgICAgICAgcmV0dXJuIGFic0Zsb29yKHRoaXMuZGF5cygpIC8gNyk7XG4gICAgfVxuXG4gICAgdmFyIHJvdW5kID0gTWF0aC5yb3VuZCxcbiAgICAgICAgdGhyZXNob2xkcyA9IHtcbiAgICAgICAgICAgIHNzOiA0NCwgLy8gYSBmZXcgc2Vjb25kcyB0byBzZWNvbmRzXG4gICAgICAgICAgICBzOiA0NSwgLy8gc2Vjb25kcyB0byBtaW51dGVcbiAgICAgICAgICAgIG06IDQ1LCAvLyBtaW51dGVzIHRvIGhvdXJcbiAgICAgICAgICAgIGg6IDIyLCAvLyBob3VycyB0byBkYXlcbiAgICAgICAgICAgIGQ6IDI2LCAvLyBkYXlzIHRvIG1vbnRoL3dlZWtcbiAgICAgICAgICAgIHc6IG51bGwsIC8vIHdlZWtzIHRvIG1vbnRoXG4gICAgICAgICAgICBNOiAxMSwgLy8gbW9udGhzIHRvIHllYXJcbiAgICAgICAgfTtcblxuICAgIC8vIGhlbHBlciBmdW5jdGlvbiBmb3IgbW9tZW50LmZuLmZyb20sIG1vbWVudC5mbi5mcm9tTm93LCBhbmQgbW9tZW50LmR1cmF0aW9uLmZuLmh1bWFuaXplXG4gICAgZnVuY3Rpb24gc3Vic3RpdHV0ZVRpbWVBZ28oc3RyaW5nLCBudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGlzRnV0dXJlLCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5yZWxhdGl2ZVRpbWUobnVtYmVyIHx8IDEsICEhd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lJDEocG9zTmVnRHVyYXRpb24sIHdpdGhvdXRTdWZmaXgsIHRocmVzaG9sZHMsIGxvY2FsZSkge1xuICAgICAgICB2YXIgZHVyYXRpb24gPSBjcmVhdGVEdXJhdGlvbihwb3NOZWdEdXJhdGlvbikuYWJzKCksXG4gICAgICAgICAgICBzZWNvbmRzID0gcm91bmQoZHVyYXRpb24uYXMoJ3MnKSksXG4gICAgICAgICAgICBtaW51dGVzID0gcm91bmQoZHVyYXRpb24uYXMoJ20nKSksXG4gICAgICAgICAgICBob3VycyA9IHJvdW5kKGR1cmF0aW9uLmFzKCdoJykpLFxuICAgICAgICAgICAgZGF5cyA9IHJvdW5kKGR1cmF0aW9uLmFzKCdkJykpLFxuICAgICAgICAgICAgbW9udGhzID0gcm91bmQoZHVyYXRpb24uYXMoJ00nKSksXG4gICAgICAgICAgICB3ZWVrcyA9IHJvdW5kKGR1cmF0aW9uLmFzKCd3JykpLFxuICAgICAgICAgICAgeWVhcnMgPSByb3VuZChkdXJhdGlvbi5hcygneScpKSxcbiAgICAgICAgICAgIGEgPVxuICAgICAgICAgICAgICAgIChzZWNvbmRzIDw9IHRocmVzaG9sZHMuc3MgJiYgWydzJywgc2Vjb25kc10pIHx8XG4gICAgICAgICAgICAgICAgKHNlY29uZHMgPCB0aHJlc2hvbGRzLnMgJiYgWydzcycsIHNlY29uZHNdKSB8fFxuICAgICAgICAgICAgICAgIChtaW51dGVzIDw9IDEgJiYgWydtJ10pIHx8XG4gICAgICAgICAgICAgICAgKG1pbnV0ZXMgPCB0aHJlc2hvbGRzLm0gJiYgWydtbScsIG1pbnV0ZXNdKSB8fFxuICAgICAgICAgICAgICAgIChob3VycyA8PSAxICYmIFsnaCddKSB8fFxuICAgICAgICAgICAgICAgIChob3VycyA8IHRocmVzaG9sZHMuaCAmJiBbJ2hoJywgaG91cnNdKSB8fFxuICAgICAgICAgICAgICAgIChkYXlzIDw9IDEgJiYgWydkJ10pIHx8XG4gICAgICAgICAgICAgICAgKGRheXMgPCB0aHJlc2hvbGRzLmQgJiYgWydkZCcsIGRheXNdKTtcblxuICAgICAgICBpZiAodGhyZXNob2xkcy53ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGEgPVxuICAgICAgICAgICAgICAgIGEgfHxcbiAgICAgICAgICAgICAgICAod2Vla3MgPD0gMSAmJiBbJ3cnXSkgfHxcbiAgICAgICAgICAgICAgICAod2Vla3MgPCB0aHJlc2hvbGRzLncgJiYgWyd3dycsIHdlZWtzXSk7XG4gICAgICAgIH1cbiAgICAgICAgYSA9IGEgfHxcbiAgICAgICAgICAgIChtb250aHMgPD0gMSAmJiBbJ00nXSkgfHxcbiAgICAgICAgICAgIChtb250aHMgPCB0aHJlc2hvbGRzLk0gJiYgWydNTScsIG1vbnRoc10pIHx8XG4gICAgICAgICAgICAoeWVhcnMgPD0gMSAmJiBbJ3knXSkgfHwgWyd5eScsIHllYXJzXTtcblxuICAgICAgICBhWzJdID0gd2l0aG91dFN1ZmZpeDtcbiAgICAgICAgYVszXSA9ICtwb3NOZWdEdXJhdGlvbiA+IDA7XG4gICAgICAgIGFbNF0gPSBsb2NhbGU7XG4gICAgICAgIHJldHVybiBzdWJzdGl0dXRlVGltZUFnby5hcHBseShudWxsLCBhKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc2V0IHRoZSByb3VuZGluZyBmdW5jdGlvbiBmb3IgcmVsYXRpdmUgdGltZSBzdHJpbmdzXG4gICAgZnVuY3Rpb24gZ2V0U2V0UmVsYXRpdmVUaW1lUm91bmRpbmcocm91bmRpbmdGdW5jdGlvbikge1xuICAgICAgICBpZiAocm91bmRpbmdGdW5jdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcm91bmQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiByb3VuZGluZ0Z1bmN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByb3VuZCA9IHJvdW5kaW5nRnVuY3Rpb247XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIHNldCBhIHRocmVzaG9sZCBmb3IgcmVsYXRpdmUgdGltZSBzdHJpbmdzXG4gICAgZnVuY3Rpb24gZ2V0U2V0UmVsYXRpdmVUaW1lVGhyZXNob2xkKHRocmVzaG9sZCwgbGltaXQpIHtcbiAgICAgICAgaWYgKHRocmVzaG9sZHNbdGhyZXNob2xkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpbWl0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJlc2hvbGRzW3RocmVzaG9sZF07XG4gICAgICAgIH1cbiAgICAgICAgdGhyZXNob2xkc1t0aHJlc2hvbGRdID0gbGltaXQ7XG4gICAgICAgIGlmICh0aHJlc2hvbGQgPT09ICdzJykge1xuICAgICAgICAgICAgdGhyZXNob2xkcy5zcyA9IGxpbWl0IC0gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBodW1hbml6ZShhcmdXaXRoU3VmZml4LCBhcmdUaHJlc2hvbGRzKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdpdGhTdWZmaXggPSBmYWxzZSxcbiAgICAgICAgICAgIHRoID0gdGhyZXNob2xkcyxcbiAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgIG91dHB1dDtcblxuICAgICAgICBpZiAodHlwZW9mIGFyZ1dpdGhTdWZmaXggPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBhcmdUaHJlc2hvbGRzID0gYXJnV2l0aFN1ZmZpeDtcbiAgICAgICAgICAgIGFyZ1dpdGhTdWZmaXggPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFyZ1dpdGhTdWZmaXggPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgd2l0aFN1ZmZpeCA9IGFyZ1dpdGhTdWZmaXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhcmdUaHJlc2hvbGRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdGggPSBPYmplY3QuYXNzaWduKHt9LCB0aHJlc2hvbGRzLCBhcmdUaHJlc2hvbGRzKTtcbiAgICAgICAgICAgIGlmIChhcmdUaHJlc2hvbGRzLnMgIT0gbnVsbCAmJiBhcmdUaHJlc2hvbGRzLnNzID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aC5zcyA9IGFyZ1RocmVzaG9sZHMucyAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsb2NhbGUgPSB0aGlzLmxvY2FsZURhdGEoKTtcbiAgICAgICAgb3V0cHV0ID0gcmVsYXRpdmVUaW1lJDEodGhpcywgIXdpdGhTdWZmaXgsIHRoLCBsb2NhbGUpO1xuXG4gICAgICAgIGlmICh3aXRoU3VmZml4KSB7XG4gICAgICAgICAgICBvdXRwdXQgPSBsb2NhbGUucGFzdEZ1dHVyZSgrdGhpcywgb3V0cHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsb2NhbGUucG9zdGZvcm1hdChvdXRwdXQpO1xuICAgIH1cblxuICAgIHZhciBhYnMkMSA9IE1hdGguYWJzO1xuXG4gICAgZnVuY3Rpb24gc2lnbih4KSB7XG4gICAgICAgIHJldHVybiAoeCA+IDApIC0gKHggPCAwKSB8fCAreDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0lTT1N0cmluZyQxKCkge1xuICAgICAgICAvLyBmb3IgSVNPIHN0cmluZ3Mgd2UgZG8gbm90IHVzZSB0aGUgbm9ybWFsIGJ1YmJsaW5nIHJ1bGVzOlxuICAgICAgICAvLyAgKiBtaWxsaXNlY29uZHMgYnViYmxlIHVwIHVudGlsIHRoZXkgYmVjb21lIGhvdXJzXG4gICAgICAgIC8vICAqIGRheXMgZG8gbm90IGJ1YmJsZSBhdCBhbGxcbiAgICAgICAgLy8gICogbW9udGhzIGJ1YmJsZSB1cCB1bnRpbCB0aGV5IGJlY29tZSB5ZWFyc1xuICAgICAgICAvLyBUaGlzIGlzIGJlY2F1c2UgdGhlcmUgaXMgbm8gY29udGV4dC1mcmVlIGNvbnZlcnNpb24gYmV0d2VlbiBob3VycyBhbmQgZGF5c1xuICAgICAgICAvLyAodGhpbmsgb2YgY2xvY2sgY2hhbmdlcylcbiAgICAgICAgLy8gYW5kIGFsc28gbm90IGJldHdlZW4gZGF5cyBhbmQgbW9udGhzICgyOC0zMSBkYXlzIHBlciBtb250aClcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2Vjb25kcyA9IGFicyQxKHRoaXMuX21pbGxpc2Vjb25kcykgLyAxMDAwLFxuICAgICAgICAgICAgZGF5cyA9IGFicyQxKHRoaXMuX2RheXMpLFxuICAgICAgICAgICAgbW9udGhzID0gYWJzJDEodGhpcy5fbW9udGhzKSxcbiAgICAgICAgICAgIG1pbnV0ZXMsXG4gICAgICAgICAgICBob3VycyxcbiAgICAgICAgICAgIHllYXJzLFxuICAgICAgICAgICAgcyxcbiAgICAgICAgICAgIHRvdGFsID0gdGhpcy5hc1NlY29uZHMoKSxcbiAgICAgICAgICAgIHRvdGFsU2lnbixcbiAgICAgICAgICAgIHltU2lnbixcbiAgICAgICAgICAgIGRheXNTaWduLFxuICAgICAgICAgICAgaG1zU2lnbjtcblxuICAgICAgICBpZiAoIXRvdGFsKSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIHRoZSBzYW1lIGFzIEMjJ3MgKE5vZGEpIGFuZCBweXRob24gKGlzb2RhdGUpLi4uXG4gICAgICAgICAgICAvLyBidXQgbm90IG90aGVyIEpTIChnb29nLmRhdGUpXG4gICAgICAgICAgICByZXR1cm4gJ1AwRCc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAzNjAwIHNlY29uZHMgLT4gNjAgbWludXRlcyAtPiAxIGhvdXJcbiAgICAgICAgbWludXRlcyA9IGFic0Zsb29yKHNlY29uZHMgLyA2MCk7XG4gICAgICAgIGhvdXJzID0gYWJzRmxvb3IobWludXRlcyAvIDYwKTtcbiAgICAgICAgc2Vjb25kcyAlPSA2MDtcbiAgICAgICAgbWludXRlcyAlPSA2MDtcblxuICAgICAgICAvLyAxMiBtb250aHMgLT4gMSB5ZWFyXG4gICAgICAgIHllYXJzID0gYWJzRmxvb3IobW9udGhzIC8gMTIpO1xuICAgICAgICBtb250aHMgJT0gMTI7XG5cbiAgICAgICAgLy8gaW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL2RvcmRpbGxlL21vbWVudC1pc29kdXJhdGlvbi9ibG9iL21hc3Rlci9tb21lbnQuaXNvZHVyYXRpb24uanNcbiAgICAgICAgcyA9IHNlY29uZHMgPyBzZWNvbmRzLnRvRml4ZWQoMykucmVwbGFjZSgvXFwuPzArJC8sICcnKSA6ICcnO1xuXG4gICAgICAgIHRvdGFsU2lnbiA9IHRvdGFsIDwgMCA/ICctJyA6ICcnO1xuICAgICAgICB5bVNpZ24gPSBzaWduKHRoaXMuX21vbnRocykgIT09IHNpZ24odG90YWwpID8gJy0nIDogJyc7XG4gICAgICAgIGRheXNTaWduID0gc2lnbih0aGlzLl9kYXlzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcbiAgICAgICAgaG1zU2lnbiA9IHNpZ24odGhpcy5fbWlsbGlzZWNvbmRzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdG90YWxTaWduICtcbiAgICAgICAgICAgICdQJyArXG4gICAgICAgICAgICAoeWVhcnMgPyB5bVNpZ24gKyB5ZWFycyArICdZJyA6ICcnKSArXG4gICAgICAgICAgICAobW9udGhzID8geW1TaWduICsgbW9udGhzICsgJ00nIDogJycpICtcbiAgICAgICAgICAgIChkYXlzID8gZGF5c1NpZ24gKyBkYXlzICsgJ0QnIDogJycpICtcbiAgICAgICAgICAgIChob3VycyB8fCBtaW51dGVzIHx8IHNlY29uZHMgPyAnVCcgOiAnJykgK1xuICAgICAgICAgICAgKGhvdXJzID8gaG1zU2lnbiArIGhvdXJzICsgJ0gnIDogJycpICtcbiAgICAgICAgICAgIChtaW51dGVzID8gaG1zU2lnbiArIG1pbnV0ZXMgKyAnTScgOiAnJykgK1xuICAgICAgICAgICAgKHNlY29uZHMgPyBobXNTaWduICsgcyArICdTJyA6ICcnKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHZhciBwcm90byQyID0gRHVyYXRpb24ucHJvdG90eXBlO1xuXG4gICAgcHJvdG8kMi5pc1ZhbGlkID0gaXNWYWxpZCQxO1xuICAgIHByb3RvJDIuYWJzID0gYWJzO1xuICAgIHByb3RvJDIuYWRkID0gYWRkJDE7XG4gICAgcHJvdG8kMi5zdWJ0cmFjdCA9IHN1YnRyYWN0JDE7XG4gICAgcHJvdG8kMi5hcyA9IGFzO1xuICAgIHByb3RvJDIuYXNNaWxsaXNlY29uZHMgPSBhc01pbGxpc2Vjb25kcztcbiAgICBwcm90byQyLmFzU2Vjb25kcyA9IGFzU2Vjb25kcztcbiAgICBwcm90byQyLmFzTWludXRlcyA9IGFzTWludXRlcztcbiAgICBwcm90byQyLmFzSG91cnMgPSBhc0hvdXJzO1xuICAgIHByb3RvJDIuYXNEYXlzID0gYXNEYXlzO1xuICAgIHByb3RvJDIuYXNXZWVrcyA9IGFzV2Vla3M7XG4gICAgcHJvdG8kMi5hc01vbnRocyA9IGFzTW9udGhzO1xuICAgIHByb3RvJDIuYXNRdWFydGVycyA9IGFzUXVhcnRlcnM7XG4gICAgcHJvdG8kMi5hc1llYXJzID0gYXNZZWFycztcbiAgICBwcm90byQyLnZhbHVlT2YgPSB2YWx1ZU9mJDE7XG4gICAgcHJvdG8kMi5fYnViYmxlID0gYnViYmxlO1xuICAgIHByb3RvJDIuY2xvbmUgPSBjbG9uZSQxO1xuICAgIHByb3RvJDIuZ2V0ID0gZ2V0JDI7XG4gICAgcHJvdG8kMi5taWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZHM7XG4gICAgcHJvdG8kMi5zZWNvbmRzID0gc2Vjb25kcztcbiAgICBwcm90byQyLm1pbnV0ZXMgPSBtaW51dGVzO1xuICAgIHByb3RvJDIuaG91cnMgPSBob3VycztcbiAgICBwcm90byQyLmRheXMgPSBkYXlzO1xuICAgIHByb3RvJDIud2Vla3MgPSB3ZWVrcztcbiAgICBwcm90byQyLm1vbnRocyA9IG1vbnRocztcbiAgICBwcm90byQyLnllYXJzID0geWVhcnM7XG4gICAgcHJvdG8kMi5odW1hbml6ZSA9IGh1bWFuaXplO1xuICAgIHByb3RvJDIudG9JU09TdHJpbmcgPSB0b0lTT1N0cmluZyQxO1xuICAgIHByb3RvJDIudG9TdHJpbmcgPSB0b0lTT1N0cmluZyQxO1xuICAgIHByb3RvJDIudG9KU09OID0gdG9JU09TdHJpbmckMTtcbiAgICBwcm90byQyLmxvY2FsZSA9IGxvY2FsZTtcbiAgICBwcm90byQyLmxvY2FsZURhdGEgPSBsb2NhbGVEYXRhO1xuXG4gICAgcHJvdG8kMi50b0lzb1N0cmluZyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ3RvSXNvU3RyaW5nKCkgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSB0b0lTT1N0cmluZygpIGluc3RlYWQgKG5vdGljZSB0aGUgY2FwaXRhbHMpJyxcbiAgICAgICAgdG9JU09TdHJpbmckMVxuICAgICk7XG4gICAgcHJvdG8kMi5sYW5nID0gbGFuZztcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdYJywgMCwgMCwgJ3VuaXgnKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneCcsIDAsIDAsICd2YWx1ZU9mJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCd4JywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1gnLCBtYXRjaFRpbWVzdGFtcCk7XG4gICAgYWRkUGFyc2VUb2tlbignWCcsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShwYXJzZUZsb2F0KGlucHV0KSAqIDEwMDApO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ3gnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUodG9JbnQoaW5wdXQpKTtcbiAgICB9KTtcblxuICAgIC8vISBtb21lbnQuanNcblxuICAgIGhvb2tzLnZlcnNpb24gPSAnMi4yOS4xJztcblxuICAgIHNldEhvb2tDYWxsYmFjayhjcmVhdGVMb2NhbCk7XG5cbiAgICBob29rcy5mbiA9IHByb3RvO1xuICAgIGhvb2tzLm1pbiA9IG1pbjtcbiAgICBob29rcy5tYXggPSBtYXg7XG4gICAgaG9va3Mubm93ID0gbm93O1xuICAgIGhvb2tzLnV0YyA9IGNyZWF0ZVVUQztcbiAgICBob29rcy51bml4ID0gY3JlYXRlVW5peDtcbiAgICBob29rcy5tb250aHMgPSBsaXN0TW9udGhzO1xuICAgIGhvb2tzLmlzRGF0ZSA9IGlzRGF0ZTtcbiAgICBob29rcy5sb2NhbGUgPSBnZXRTZXRHbG9iYWxMb2NhbGU7XG4gICAgaG9va3MuaW52YWxpZCA9IGNyZWF0ZUludmFsaWQ7XG4gICAgaG9va3MuZHVyYXRpb24gPSBjcmVhdGVEdXJhdGlvbjtcbiAgICBob29rcy5pc01vbWVudCA9IGlzTW9tZW50O1xuICAgIGhvb2tzLndlZWtkYXlzID0gbGlzdFdlZWtkYXlzO1xuICAgIGhvb2tzLnBhcnNlWm9uZSA9IGNyZWF0ZUluWm9uZTtcbiAgICBob29rcy5sb2NhbGVEYXRhID0gZ2V0TG9jYWxlO1xuICAgIGhvb2tzLmlzRHVyYXRpb24gPSBpc0R1cmF0aW9uO1xuICAgIGhvb2tzLm1vbnRoc1Nob3J0ID0gbGlzdE1vbnRoc1Nob3J0O1xuICAgIGhvb2tzLndlZWtkYXlzTWluID0gbGlzdFdlZWtkYXlzTWluO1xuICAgIGhvb2tzLmRlZmluZUxvY2FsZSA9IGRlZmluZUxvY2FsZTtcbiAgICBob29rcy51cGRhdGVMb2NhbGUgPSB1cGRhdGVMb2NhbGU7XG4gICAgaG9va3MubG9jYWxlcyA9IGxpc3RMb2NhbGVzO1xuICAgIGhvb2tzLndlZWtkYXlzU2hvcnQgPSBsaXN0V2Vla2RheXNTaG9ydDtcbiAgICBob29rcy5ub3JtYWxpemVVbml0cyA9IG5vcm1hbGl6ZVVuaXRzO1xuICAgIGhvb2tzLnJlbGF0aXZlVGltZVJvdW5kaW5nID0gZ2V0U2V0UmVsYXRpdmVUaW1lUm91bmRpbmc7XG4gICAgaG9va3MucmVsYXRpdmVUaW1lVGhyZXNob2xkID0gZ2V0U2V0UmVsYXRpdmVUaW1lVGhyZXNob2xkO1xuICAgIGhvb2tzLmNhbGVuZGFyRm9ybWF0ID0gZ2V0Q2FsZW5kYXJGb3JtYXQ7XG4gICAgaG9va3MucHJvdG90eXBlID0gcHJvdG87XG5cbiAgICAvLyBjdXJyZW50bHkgSFRNTDUgaW5wdXQgdHlwZSBvbmx5IHN1cHBvcnRzIDI0LWhvdXIgZm9ybWF0c1xuICAgIGhvb2tzLkhUTUw1X0ZNVCA9IHtcbiAgICAgICAgREFURVRJTUVfTE9DQUw6ICdZWVlZLU1NLUREVEhIOm1tJywgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIC8+XG4gICAgICAgIERBVEVUSU1FX0xPQ0FMX1NFQ09ORFM6ICdZWVlZLU1NLUREVEhIOm1tOnNzJywgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIHN0ZXA9XCIxXCIgLz5cbiAgICAgICAgREFURVRJTUVfTE9DQUxfTVM6ICdZWVlZLU1NLUREVEhIOm1tOnNzLlNTUycsIC8vIDxpbnB1dCB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIiBzdGVwPVwiMC4wMDFcIiAvPlxuICAgICAgICBEQVRFOiAnWVlZWS1NTS1ERCcsIC8vIDxpbnB1dCB0eXBlPVwiZGF0ZVwiIC8+XG4gICAgICAgIFRJTUU6ICdISDptbScsIC8vIDxpbnB1dCB0eXBlPVwidGltZVwiIC8+XG4gICAgICAgIFRJTUVfU0VDT05EUzogJ0hIOm1tOnNzJywgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgc3RlcD1cIjFcIiAvPlxuICAgICAgICBUSU1FX01TOiAnSEg6bW06c3MuU1NTJywgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgc3RlcD1cIjAuMDAxXCIgLz5cbiAgICAgICAgV0VFSzogJ0dHR0ctW1ddV1cnLCAvLyA8aW5wdXQgdHlwZT1cIndlZWtcIiAvPlxuICAgICAgICBNT05USDogJ1lZWVktTU0nLCAvLyA8aW5wdXQgdHlwZT1cIm1vbnRoXCIgLz5cbiAgICB9O1xuXG4gICAgcmV0dXJuIGhvb2tzO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC10aW1lem9uZS5qc1xuLy8hIHZlcnNpb24gOiAwLjUuMzRcbi8vISBDb3B5cmlnaHQgKGMpIEpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuLy8hIGxpY2Vuc2UgOiBNSVRcbi8vISBnaXRodWIuY29tL21vbWVudC9tb21lbnQtdGltZXpvbmVcblxuKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdC8qZ2xvYmFsIGRlZmluZSovXG5cdGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cykge1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCdtb21lbnQnKSk7IC8vIE5vZGVcblx0fSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcblx0XHRkZWZpbmUoWydtb21lbnQnXSwgZmFjdG9yeSk7ICAgICAgICAgICAgICAgICAvLyBBTURcblx0fSBlbHNlIHtcblx0XHRmYWN0b3J5KHJvb3QubW9tZW50KTsgICAgICAgICAgICAgICAgICAgICAgICAvLyBCcm93c2VyXG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKG1vbWVudCkge1xuXHRcInVzZSBzdHJpY3RcIjtcblxuXHQvLyBSZXNvbHZlcyBlczYgbW9kdWxlIGxvYWRpbmcgaXNzdWVcblx0aWYgKG1vbWVudC52ZXJzaW9uID09PSB1bmRlZmluZWQgJiYgbW9tZW50LmRlZmF1bHQpIHtcblx0XHRtb21lbnQgPSBtb21lbnQuZGVmYXVsdDtcblx0fVxuXG5cdC8vIERvIG5vdCBsb2FkIG1vbWVudC10aW1lem9uZSBhIHNlY29uZCB0aW1lLlxuXHQvLyBpZiAobW9tZW50LnR6ICE9PSB1bmRlZmluZWQpIHtcblx0Ly8gXHRsb2dFcnJvcignTW9tZW50IFRpbWV6b25lICcgKyBtb21lbnQudHoudmVyc2lvbiArICcgd2FzIGFscmVhZHkgbG9hZGVkICcgKyAobW9tZW50LnR6LmRhdGFWZXJzaW9uID8gJ3dpdGggZGF0YSBmcm9tICcgOiAnd2l0aG91dCBhbnkgZGF0YScpICsgbW9tZW50LnR6LmRhdGFWZXJzaW9uKTtcblx0Ly8gXHRyZXR1cm4gbW9tZW50O1xuXHQvLyB9XG5cblx0dmFyIFZFUlNJT04gPSBcIjAuNS4zNFwiLFxuXHRcdHpvbmVzID0ge30sXG5cdFx0bGlua3MgPSB7fSxcblx0XHRjb3VudHJpZXMgPSB7fSxcblx0XHRuYW1lcyA9IHt9LFxuXHRcdGd1ZXNzZXMgPSB7fSxcblx0XHRjYWNoZWRHdWVzcztcblxuXHRpZiAoIW1vbWVudCB8fCB0eXBlb2YgbW9tZW50LnZlcnNpb24gIT09ICdzdHJpbmcnKSB7XG5cdFx0bG9nRXJyb3IoJ01vbWVudCBUaW1lem9uZSByZXF1aXJlcyBNb21lbnQuanMuIFNlZSBodHRwczovL21vbWVudGpzLmNvbS90aW1lem9uZS9kb2NzLyMvdXNlLWl0L2Jyb3dzZXIvJyk7XG5cdH1cblxuXHR2YXIgbW9tZW50VmVyc2lvbiA9IG1vbWVudC52ZXJzaW9uLnNwbGl0KCcuJyksXG5cdFx0bWFqb3IgPSArbW9tZW50VmVyc2lvblswXSxcblx0XHRtaW5vciA9ICttb21lbnRWZXJzaW9uWzFdO1xuXG5cdC8vIE1vbWVudC5qcyB2ZXJzaW9uIGNoZWNrXG5cdGlmIChtYWpvciA8IDIgfHwgKG1ham9yID09PSAyICYmIG1pbm9yIDwgNikpIHtcblx0XHRsb2dFcnJvcignTW9tZW50IFRpbWV6b25lIHJlcXVpcmVzIE1vbWVudC5qcyA+PSAyLjYuMC4gWW91IGFyZSB1c2luZyBNb21lbnQuanMgJyArIG1vbWVudC52ZXJzaW9uICsgJy4gU2VlIG1vbWVudGpzLmNvbScpO1xuXHR9XG5cblx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXHRcdFVucGFja2luZ1xuXHQqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cblx0ZnVuY3Rpb24gY2hhckNvZGVUb0ludChjaGFyQ29kZSkge1xuXHRcdGlmIChjaGFyQ29kZSA+IDk2KSB7XG5cdFx0XHRyZXR1cm4gY2hhckNvZGUgLSA4Nztcblx0XHR9IGVsc2UgaWYgKGNoYXJDb2RlID4gNjQpIHtcblx0XHRcdHJldHVybiBjaGFyQ29kZSAtIDI5O1xuXHRcdH1cblx0XHRyZXR1cm4gY2hhckNvZGUgLSA0ODtcblx0fVxuXG5cdGZ1bmN0aW9uIHVucGFja0Jhc2U2MChzdHJpbmcpIHtcblx0XHR2YXIgaSA9IDAsXG5cdFx0XHRwYXJ0cyA9IHN0cmluZy5zcGxpdCgnLicpLFxuXHRcdFx0d2hvbGUgPSBwYXJ0c1swXSxcblx0XHRcdGZyYWN0aW9uYWwgPSBwYXJ0c1sxXSB8fCAnJyxcblx0XHRcdG11bHRpcGxpZXIgPSAxLFxuXHRcdFx0bnVtLFxuXHRcdFx0b3V0ID0gMCxcblx0XHRcdHNpZ24gPSAxO1xuXG5cdFx0Ly8gaGFuZGxlIG5lZ2F0aXZlIG51bWJlcnNcblx0XHRpZiAoc3RyaW5nLmNoYXJDb2RlQXQoMCkgPT09IDQ1KSB7XG5cdFx0XHRpID0gMTtcblx0XHRcdHNpZ24gPSAtMTtcblx0XHR9XG5cblx0XHQvLyBoYW5kbGUgZGlnaXRzIGJlZm9yZSB0aGUgZGVjaW1hbFxuXHRcdGZvciAoaTsgaSA8IHdob2xlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRudW0gPSBjaGFyQ29kZVRvSW50KHdob2xlLmNoYXJDb2RlQXQoaSkpO1xuXHRcdFx0b3V0ID0gNjAgKiBvdXQgKyBudW07XG5cdFx0fVxuXG5cdFx0Ly8gaGFuZGxlIGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbFxuXHRcdGZvciAoaSA9IDA7IGkgPCBmcmFjdGlvbmFsLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRtdWx0aXBsaWVyID0gbXVsdGlwbGllciAvIDYwO1xuXHRcdFx0bnVtID0gY2hhckNvZGVUb0ludChmcmFjdGlvbmFsLmNoYXJDb2RlQXQoaSkpO1xuXHRcdFx0b3V0ICs9IG51bSAqIG11bHRpcGxpZXI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG91dCAqIHNpZ247XG5cdH1cblxuXHRmdW5jdGlvbiBhcnJheVRvSW50IChhcnJheSkge1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcblx0XHRcdGFycmF5W2ldID0gdW5wYWNrQmFzZTYwKGFycmF5W2ldKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBpbnRUb1VudGlsIChhcnJheSwgbGVuZ3RoKSB7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuXHRcdFx0YXJyYXlbaV0gPSBNYXRoLnJvdW5kKChhcnJheVtpIC0gMV0gfHwgMCkgKyAoYXJyYXlbaV0gKiA2MDAwMCkpOyAvLyBtaW51dGVzIHRvIG1pbGxpc2Vjb25kc1xuXHRcdH1cblxuXHRcdGFycmF5W2xlbmd0aCAtIDFdID0gSW5maW5pdHk7XG5cdH1cblxuXHRmdW5jdGlvbiBtYXBJbmRpY2VzIChzb3VyY2UsIGluZGljZXMpIHtcblx0XHR2YXIgb3V0ID0gW10sIGk7XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0b3V0W2ldID0gc291cmNlW2luZGljZXNbaV1dO1xuXHRcdH1cblxuXHRcdHJldHVybiBvdXQ7XG5cdH1cblxuXHRmdW5jdGlvbiB1bnBhY2sgKHN0cmluZykge1xuXHRcdHZhciBkYXRhID0gc3RyaW5nLnNwbGl0KCd8JyksXG5cdFx0XHRvZmZzZXRzID0gZGF0YVsyXS5zcGxpdCgnICcpLFxuXHRcdFx0aW5kaWNlcyA9IGRhdGFbM10uc3BsaXQoJycpLFxuXHRcdFx0dW50aWxzICA9IGRhdGFbNF0uc3BsaXQoJyAnKTtcblxuXHRcdGFycmF5VG9JbnQob2Zmc2V0cyk7XG5cdFx0YXJyYXlUb0ludChpbmRpY2VzKTtcblx0XHRhcnJheVRvSW50KHVudGlscyk7XG5cblx0XHRpbnRUb1VudGlsKHVudGlscywgaW5kaWNlcy5sZW5ndGgpO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdG5hbWUgICAgICAgOiBkYXRhWzBdLFxuXHRcdFx0YWJicnMgICAgICA6IG1hcEluZGljZXMoZGF0YVsxXS5zcGxpdCgnICcpLCBpbmRpY2VzKSxcblx0XHRcdG9mZnNldHMgICAgOiBtYXBJbmRpY2VzKG9mZnNldHMsIGluZGljZXMpLFxuXHRcdFx0dW50aWxzICAgICA6IHVudGlscyxcblx0XHRcdHBvcHVsYXRpb24gOiBkYXRhWzVdIHwgMFxuXHRcdH07XG5cdH1cblxuXHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cdFx0Wm9uZSBvYmplY3Rcblx0KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cdGZ1bmN0aW9uIFpvbmUgKHBhY2tlZFN0cmluZykge1xuXHRcdGlmIChwYWNrZWRTdHJpbmcpIHtcblx0XHRcdHRoaXMuX3NldCh1bnBhY2socGFja2VkU3RyaW5nKSk7XG5cdFx0fVxuXHR9XG5cblx0Wm9uZS5wcm90b3R5cGUgPSB7XG5cdFx0X3NldCA6IGZ1bmN0aW9uICh1bnBhY2tlZCkge1xuXHRcdFx0dGhpcy5uYW1lICAgICAgID0gdW5wYWNrZWQubmFtZTtcblx0XHRcdHRoaXMuYWJicnMgICAgICA9IHVucGFja2VkLmFiYnJzO1xuXHRcdFx0dGhpcy51bnRpbHMgICAgID0gdW5wYWNrZWQudW50aWxzO1xuXHRcdFx0dGhpcy5vZmZzZXRzICAgID0gdW5wYWNrZWQub2Zmc2V0cztcblx0XHRcdHRoaXMucG9wdWxhdGlvbiA9IHVucGFja2VkLnBvcHVsYXRpb247XG5cdFx0fSxcblxuXHRcdF9pbmRleCA6IGZ1bmN0aW9uICh0aW1lc3RhbXApIHtcblx0XHRcdHZhciB0YXJnZXQgPSArdGltZXN0YW1wLFxuXHRcdFx0XHR1bnRpbHMgPSB0aGlzLnVudGlscyxcblx0XHRcdFx0aTtcblxuXHRcdFx0Zm9yIChpID0gMDsgaSA8IHVudGlscy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAodGFyZ2V0IDwgdW50aWxzW2ldKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y291bnRyaWVzIDogZnVuY3Rpb24gKCkge1xuXHRcdFx0dmFyIHpvbmVfbmFtZSA9IHRoaXMubmFtZTtcblx0XHRcdHJldHVybiBPYmplY3Qua2V5cyhjb3VudHJpZXMpLmZpbHRlcihmdW5jdGlvbiAoY291bnRyeV9jb2RlKSB7XG5cdFx0XHRcdHJldHVybiBjb3VudHJpZXNbY291bnRyeV9jb2RlXS56b25lcy5pbmRleE9mKHpvbmVfbmFtZSkgIT09IC0xO1xuXHRcdFx0fSk7XG5cdFx0fSxcblxuXHRcdHBhcnNlIDogZnVuY3Rpb24gKHRpbWVzdGFtcCkge1xuXHRcdFx0dmFyIHRhcmdldCAgPSArdGltZXN0YW1wLFxuXHRcdFx0XHRvZmZzZXRzID0gdGhpcy5vZmZzZXRzLFxuXHRcdFx0XHR1bnRpbHMgID0gdGhpcy51bnRpbHMsXG5cdFx0XHRcdG1heCAgICAgPSB1bnRpbHMubGVuZ3RoIC0gMSxcblx0XHRcdFx0b2Zmc2V0LCBvZmZzZXROZXh0LCBvZmZzZXRQcmV2LCBpO1xuXG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgbWF4OyBpKyspIHtcblx0XHRcdFx0b2Zmc2V0ICAgICA9IG9mZnNldHNbaV07XG5cdFx0XHRcdG9mZnNldE5leHQgPSBvZmZzZXRzW2kgKyAxXTtcblx0XHRcdFx0b2Zmc2V0UHJldiA9IG9mZnNldHNbaSA/IGkgLSAxIDogaV07XG5cblx0XHRcdFx0aWYgKG9mZnNldCA8IG9mZnNldE5leHQgJiYgdHoubW92ZUFtYmlndW91c0ZvcndhcmQpIHtcblx0XHRcdFx0XHRvZmZzZXQgPSBvZmZzZXROZXh0O1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9mZnNldCA+IG9mZnNldFByZXYgJiYgdHoubW92ZUludmFsaWRGb3J3YXJkKSB7XG5cdFx0XHRcdFx0b2Zmc2V0ID0gb2Zmc2V0UHJldjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0YXJnZXQgPCB1bnRpbHNbaV0gLSAob2Zmc2V0ICogNjAwMDApKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9mZnNldHNbaV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG9mZnNldHNbbWF4XTtcblx0XHR9LFxuXG5cdFx0YWJiciA6IGZ1bmN0aW9uIChtb20pIHtcblx0XHRcdHJldHVybiB0aGlzLmFiYnJzW3RoaXMuX2luZGV4KG1vbSldO1xuXHRcdH0sXG5cblx0XHRvZmZzZXQgOiBmdW5jdGlvbiAobW9tKSB7XG5cdFx0XHRsb2dFcnJvcihcInpvbmUub2Zmc2V0IGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2Ygem9uZS51dGNPZmZzZXRcIik7XG5cdFx0XHRyZXR1cm4gdGhpcy5vZmZzZXRzW3RoaXMuX2luZGV4KG1vbSldO1xuXHRcdH0sXG5cblx0XHR1dGNPZmZzZXQgOiBmdW5jdGlvbiAobW9tKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5vZmZzZXRzW3RoaXMuX2luZGV4KG1vbSldO1xuXHRcdH1cblx0fTtcblxuXHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cdFx0Q291bnRyeSBvYmplY3Rcblx0KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cdGZ1bmN0aW9uIENvdW50cnkgKGNvdW50cnlfbmFtZSwgem9uZV9uYW1lcykge1xuXHRcdHRoaXMubmFtZSA9IGNvdW50cnlfbmFtZTtcblx0XHR0aGlzLnpvbmVzID0gem9uZV9uYW1lcztcblx0fVxuXG5cdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblx0XHRDdXJyZW50IFRpbWV6b25lXG5cdCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuXHRmdW5jdGlvbiBPZmZzZXRBdChhdCkge1xuXHRcdHZhciB0aW1lU3RyaW5nID0gYXQudG9UaW1lU3RyaW5nKCk7XG5cdFx0dmFyIGFiYnIgPSB0aW1lU3RyaW5nLm1hdGNoKC9cXChbYS16IF0rXFwpL2kpO1xuXHRcdGlmIChhYmJyICYmIGFiYnJbMF0pIHtcblx0XHRcdC8vIDE3OjU2OjMxIEdNVC0wNjAwIChDU1QpXG5cdFx0XHQvLyAxNzo1NjozMSBHTVQtMDYwMCAoQ2VudHJhbCBTdGFuZGFyZCBUaW1lKVxuXHRcdFx0YWJiciA9IGFiYnJbMF0ubWF0Y2goL1tBLVpdL2cpO1xuXHRcdFx0YWJiciA9IGFiYnIgPyBhYmJyLmpvaW4oJycpIDogdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyAxNzo1NjozMSBDU1Rcblx0XHRcdC8vIDE3OjU2OjMxIEdNVCswODAwICjlj7DljJfmqJnmupbmmYLplpMpXG5cdFx0XHRhYmJyID0gdGltZVN0cmluZy5tYXRjaCgvW0EtWl17Myw1fS9nKTtcblx0XHRcdGFiYnIgPSBhYmJyID8gYWJiclswXSA6IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRpZiAoYWJiciA9PT0gJ0dNVCcpIHtcblx0XHRcdGFiYnIgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0dGhpcy5hdCA9ICthdDtcblx0XHR0aGlzLmFiYnIgPSBhYmJyO1xuXHRcdHRoaXMub2Zmc2V0ID0gYXQuZ2V0VGltZXpvbmVPZmZzZXQoKTtcblx0fVxuXG5cdGZ1bmN0aW9uIFpvbmVTY29yZSh6b25lKSB7XG5cdFx0dGhpcy56b25lID0gem9uZTtcblx0XHR0aGlzLm9mZnNldFNjb3JlID0gMDtcblx0XHR0aGlzLmFiYnJTY29yZSA9IDA7XG5cdH1cblxuXHRab25lU2NvcmUucHJvdG90eXBlLnNjb3JlT2Zmc2V0QXQgPSBmdW5jdGlvbiAob2Zmc2V0QXQpIHtcblx0XHR0aGlzLm9mZnNldFNjb3JlICs9IE1hdGguYWJzKHRoaXMuem9uZS51dGNPZmZzZXQob2Zmc2V0QXQuYXQpIC0gb2Zmc2V0QXQub2Zmc2V0KTtcblx0XHRpZiAodGhpcy56b25lLmFiYnIob2Zmc2V0QXQuYXQpLnJlcGxhY2UoL1teQS1aXS9nLCAnJykgIT09IG9mZnNldEF0LmFiYnIpIHtcblx0XHRcdHRoaXMuYWJiclNjb3JlKys7XG5cdFx0fVxuXHR9O1xuXG5cdGZ1bmN0aW9uIGZpbmRDaGFuZ2UobG93LCBoaWdoKSB7XG5cdFx0dmFyIG1pZCwgZGlmZjtcblxuXHRcdHdoaWxlICgoZGlmZiA9ICgoaGlnaC5hdCAtIGxvdy5hdCkgLyAxMmU0IHwgMCkgKiA2ZTQpKSB7XG5cdFx0XHRtaWQgPSBuZXcgT2Zmc2V0QXQobmV3IERhdGUobG93LmF0ICsgZGlmZikpO1xuXHRcdFx0aWYgKG1pZC5vZmZzZXQgPT09IGxvdy5vZmZzZXQpIHtcblx0XHRcdFx0bG93ID0gbWlkO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aGlnaCA9IG1pZDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gbG93O1xuXHR9XG5cblx0ZnVuY3Rpb24gdXNlck9mZnNldHMoKSB7XG5cdFx0dmFyIHN0YXJ0WWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSAtIDIsXG5cdFx0XHRsYXN0ID0gbmV3IE9mZnNldEF0KG5ldyBEYXRlKHN0YXJ0WWVhciwgMCwgMSkpLFxuXHRcdFx0b2Zmc2V0cyA9IFtsYXN0XSxcblx0XHRcdGNoYW5nZSwgbmV4dCwgaTtcblxuXHRcdGZvciAoaSA9IDE7IGkgPCA0ODsgaSsrKSB7XG5cdFx0XHRuZXh0ID0gbmV3IE9mZnNldEF0KG5ldyBEYXRlKHN0YXJ0WWVhciwgaSwgMSkpO1xuXHRcdFx0aWYgKG5leHQub2Zmc2V0ICE9PSBsYXN0Lm9mZnNldCkge1xuXHRcdFx0XHRjaGFuZ2UgPSBmaW5kQ2hhbmdlKGxhc3QsIG5leHQpO1xuXHRcdFx0XHRvZmZzZXRzLnB1c2goY2hhbmdlKTtcblx0XHRcdFx0b2Zmc2V0cy5wdXNoKG5ldyBPZmZzZXRBdChuZXcgRGF0ZShjaGFuZ2UuYXQgKyA2ZTQpKSk7XG5cdFx0XHR9XG5cdFx0XHRsYXN0ID0gbmV4dDtcblx0XHR9XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7XG5cdFx0XHRvZmZzZXRzLnB1c2gobmV3IE9mZnNldEF0KG5ldyBEYXRlKHN0YXJ0WWVhciArIGksIDAsIDEpKSk7XG5cdFx0XHRvZmZzZXRzLnB1c2gobmV3IE9mZnNldEF0KG5ldyBEYXRlKHN0YXJ0WWVhciArIGksIDYsIDEpKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG9mZnNldHM7XG5cdH1cblxuXHRmdW5jdGlvbiBzb3J0Wm9uZVNjb3JlcyAoYSwgYikge1xuXHRcdGlmIChhLm9mZnNldFNjb3JlICE9PSBiLm9mZnNldFNjb3JlKSB7XG5cdFx0XHRyZXR1cm4gYS5vZmZzZXRTY29yZSAtIGIub2Zmc2V0U2NvcmU7XG5cdFx0fVxuXHRcdGlmIChhLmFiYnJTY29yZSAhPT0gYi5hYmJyU2NvcmUpIHtcblx0XHRcdHJldHVybiBhLmFiYnJTY29yZSAtIGIuYWJiclNjb3JlO1xuXHRcdH1cblx0XHRpZiAoYS56b25lLnBvcHVsYXRpb24gIT09IGIuem9uZS5wb3B1bGF0aW9uKSB7XG5cdFx0XHRyZXR1cm4gYi56b25lLnBvcHVsYXRpb24gLSBhLnpvbmUucG9wdWxhdGlvbjtcblx0XHR9XG5cdFx0cmV0dXJuIGIuem9uZS5uYW1lLmxvY2FsZUNvbXBhcmUoYS56b25lLm5hbWUpO1xuXHR9XG5cblx0ZnVuY3Rpb24gYWRkVG9HdWVzc2VzIChuYW1lLCBvZmZzZXRzKSB7XG5cdFx0dmFyIGksIG9mZnNldDtcblx0XHRhcnJheVRvSW50KG9mZnNldHMpO1xuXHRcdGZvciAoaSA9IDA7IGkgPCBvZmZzZXRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRvZmZzZXQgPSBvZmZzZXRzW2ldO1xuXHRcdFx0Z3Vlc3Nlc1tvZmZzZXRdID0gZ3Vlc3Nlc1tvZmZzZXRdIHx8IHt9O1xuXHRcdFx0Z3Vlc3Nlc1tvZmZzZXRdW25hbWVdID0gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBndWVzc2VzRm9yVXNlck9mZnNldHMgKG9mZnNldHMpIHtcblx0XHR2YXIgb2Zmc2V0c0xlbmd0aCA9IG9mZnNldHMubGVuZ3RoLFxuXHRcdFx0ZmlsdGVyZWRHdWVzc2VzID0ge30sXG5cdFx0XHRvdXQgPSBbXSxcblx0XHRcdGksIGosIGd1ZXNzZXNPZmZzZXQ7XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgb2Zmc2V0c0xlbmd0aDsgaSsrKSB7XG5cdFx0XHRndWVzc2VzT2Zmc2V0ID0gZ3Vlc3Nlc1tvZmZzZXRzW2ldLm9mZnNldF0gfHwge307XG5cdFx0XHRmb3IgKGogaW4gZ3Vlc3Nlc09mZnNldCkge1xuXHRcdFx0XHRpZiAoZ3Vlc3Nlc09mZnNldC5oYXNPd25Qcm9wZXJ0eShqKSkge1xuXHRcdFx0XHRcdGZpbHRlcmVkR3Vlc3Nlc1tqXSA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IgKGkgaW4gZmlsdGVyZWRHdWVzc2VzKSB7XG5cdFx0XHRpZiAoZmlsdGVyZWRHdWVzc2VzLmhhc093blByb3BlcnR5KGkpKSB7XG5cdFx0XHRcdG91dC5wdXNoKG5hbWVzW2ldKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gb3V0O1xuXHR9XG5cblx0ZnVuY3Rpb24gcmVidWlsZEd1ZXNzICgpIHtcblxuXHRcdC8vIHVzZSBJbnRsIEFQSSB3aGVuIGF2YWlsYWJsZSBhbmQgcmV0dXJuaW5nIHZhbGlkIHRpbWUgem9uZVxuXHRcdHRyeSB7XG5cdFx0XHR2YXIgaW50bE5hbWUgPSBJbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkudGltZVpvbmU7XG5cdFx0XHRpZiAoaW50bE5hbWUgJiYgaW50bE5hbWUubGVuZ3RoID4gMykge1xuXHRcdFx0XHR2YXIgbmFtZSA9IG5hbWVzW25vcm1hbGl6ZU5hbWUoaW50bE5hbWUpXTtcblx0XHRcdFx0aWYgKG5hbWUpIHtcblx0XHRcdFx0XHRyZXR1cm4gbmFtZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRsb2dFcnJvcihcIk1vbWVudCBUaW1lem9uZSBmb3VuZCBcIiArIGludGxOYW1lICsgXCIgZnJvbSB0aGUgSW50bCBhcGksIGJ1dCBkaWQgbm90IGhhdmUgdGhhdCBkYXRhIGxvYWRlZC5cIik7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0Ly8gSW50bCB1bmF2YWlsYWJsZSwgZmFsbCBiYWNrIHRvIG1hbnVhbCBndWVzc2luZy5cblx0XHR9XG5cblx0XHR2YXIgb2Zmc2V0cyA9IHVzZXJPZmZzZXRzKCksXG5cdFx0XHRvZmZzZXRzTGVuZ3RoID0gb2Zmc2V0cy5sZW5ndGgsXG5cdFx0XHRndWVzc2VzID0gZ3Vlc3Nlc0ZvclVzZXJPZmZzZXRzKG9mZnNldHMpLFxuXHRcdFx0em9uZVNjb3JlcyA9IFtdLFxuXHRcdFx0em9uZVNjb3JlLCBpLCBqO1xuXG5cdFx0Zm9yIChpID0gMDsgaSA8IGd1ZXNzZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHpvbmVTY29yZSA9IG5ldyBab25lU2NvcmUoZ2V0Wm9uZShndWVzc2VzW2ldKSwgb2Zmc2V0c0xlbmd0aCk7XG5cdFx0XHRmb3IgKGogPSAwOyBqIDwgb2Zmc2V0c0xlbmd0aDsgaisrKSB7XG5cdFx0XHRcdHpvbmVTY29yZS5zY29yZU9mZnNldEF0KG9mZnNldHNbal0pO1xuXHRcdFx0fVxuXHRcdFx0em9uZVNjb3Jlcy5wdXNoKHpvbmVTY29yZSk7XG5cdFx0fVxuXG5cdFx0em9uZVNjb3Jlcy5zb3J0KHNvcnRab25lU2NvcmVzKTtcblxuXHRcdHJldHVybiB6b25lU2NvcmVzLmxlbmd0aCA+IDAgPyB6b25lU2NvcmVzWzBdLnpvbmUubmFtZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdGZ1bmN0aW9uIGd1ZXNzIChpZ25vcmVDYWNoZSkge1xuXHRcdGlmICghY2FjaGVkR3Vlc3MgfHwgaWdub3JlQ2FjaGUpIHtcblx0XHRcdGNhY2hlZEd1ZXNzID0gcmVidWlsZEd1ZXNzKCk7XG5cdFx0fVxuXHRcdHJldHVybiBjYWNoZWRHdWVzcztcblx0fVxuXG5cdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblx0XHRHbG9iYWwgTWV0aG9kc1xuXHQqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cblx0ZnVuY3Rpb24gbm9ybWFsaXplTmFtZSAobmFtZSkge1xuXHRcdHJldHVybiAobmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXC8vZywgJ18nKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGFkZFpvbmUgKHBhY2tlZCkge1xuXHRcdHZhciBpLCBuYW1lLCBzcGxpdCwgbm9ybWFsaXplZDtcblxuXHRcdGlmICh0eXBlb2YgcGFja2VkID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRwYWNrZWQgPSBbcGFja2VkXTtcblx0XHR9XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgcGFja2VkLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRzcGxpdCA9IHBhY2tlZFtpXS5zcGxpdCgnfCcpO1xuXHRcdFx0bmFtZSA9IHNwbGl0WzBdO1xuXHRcdFx0bm9ybWFsaXplZCA9IG5vcm1hbGl6ZU5hbWUobmFtZSk7XG5cdFx0XHR6b25lc1tub3JtYWxpemVkXSA9IHBhY2tlZFtpXTtcblx0XHRcdG5hbWVzW25vcm1hbGl6ZWRdID0gbmFtZTtcblx0XHRcdGFkZFRvR3Vlc3Nlcyhub3JtYWxpemVkLCBzcGxpdFsyXS5zcGxpdCgnICcpKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRab25lIChuYW1lLCBjYWxsZXIpIHtcblxuXHRcdG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpO1xuXG5cdFx0dmFyIHpvbmUgPSB6b25lc1tuYW1lXTtcblx0XHR2YXIgbGluaztcblxuXHRcdGlmICh6b25lIGluc3RhbmNlb2YgWm9uZSkge1xuXHRcdFx0cmV0dXJuIHpvbmU7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiB6b25lID09PSAnc3RyaW5nJykge1xuXHRcdFx0em9uZSA9IG5ldyBab25lKHpvbmUpO1xuXHRcdFx0em9uZXNbbmFtZV0gPSB6b25lO1xuXHRcdFx0cmV0dXJuIHpvbmU7XG5cdFx0fVxuXG5cdFx0Ly8gUGFzcyBnZXRab25lIHRvIHByZXZlbnQgcmVjdXJzaW9uIG1vcmUgdGhhbiAxIGxldmVsIGRlZXBcblx0XHRpZiAobGlua3NbbmFtZV0gJiYgY2FsbGVyICE9PSBnZXRab25lICYmIChsaW5rID0gZ2V0Wm9uZShsaW5rc1tuYW1lXSwgZ2V0Wm9uZSkpKSB7XG5cdFx0XHR6b25lID0gem9uZXNbbmFtZV0gPSBuZXcgWm9uZSgpO1xuXHRcdFx0em9uZS5fc2V0KGxpbmspO1xuXHRcdFx0em9uZS5uYW1lID0gbmFtZXNbbmFtZV07XG5cdFx0XHRyZXR1cm4gem9uZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGZ1bmN0aW9uIGdldE5hbWVzICgpIHtcblx0XHR2YXIgaSwgb3V0ID0gW107XG5cblx0XHRmb3IgKGkgaW4gbmFtZXMpIHtcblx0XHRcdGlmIChuYW1lcy5oYXNPd25Qcm9wZXJ0eShpKSAmJiAoem9uZXNbaV0gfHwgem9uZXNbbGlua3NbaV1dKSAmJiBuYW1lc1tpXSkge1xuXHRcdFx0XHRvdXQucHVzaChuYW1lc1tpXSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG91dC5zb3J0KCk7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRDb3VudHJ5TmFtZXMgKCkge1xuXHRcdHJldHVybiBPYmplY3Qua2V5cyhjb3VudHJpZXMpO1xuXHR9XG5cblx0ZnVuY3Rpb24gYWRkTGluayAoYWxpYXNlcykge1xuXHRcdHZhciBpLCBhbGlhcywgbm9ybWFsMCwgbm9ybWFsMTtcblxuXHRcdGlmICh0eXBlb2YgYWxpYXNlcyA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0YWxpYXNlcyA9IFthbGlhc2VzXTtcblx0XHR9XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgYWxpYXNlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0YWxpYXMgPSBhbGlhc2VzW2ldLnNwbGl0KCd8Jyk7XG5cblx0XHRcdG5vcm1hbDAgPSBub3JtYWxpemVOYW1lKGFsaWFzWzBdKTtcblx0XHRcdG5vcm1hbDEgPSBub3JtYWxpemVOYW1lKGFsaWFzWzFdKTtcblxuXHRcdFx0bGlua3Nbbm9ybWFsMF0gPSBub3JtYWwxO1xuXHRcdFx0bmFtZXNbbm9ybWFsMF0gPSBhbGlhc1swXTtcblxuXHRcdFx0bGlua3Nbbm9ybWFsMV0gPSBub3JtYWwwO1xuXHRcdFx0bmFtZXNbbm9ybWFsMV0gPSBhbGlhc1sxXTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBhZGRDb3VudHJpZXMgKGRhdGEpIHtcblx0XHR2YXIgaSwgY291bnRyeV9jb2RlLCBjb3VudHJ5X3pvbmVzLCBzcGxpdDtcblx0XHRpZiAoIWRhdGEgfHwgIWRhdGEubGVuZ3RoKSByZXR1cm47XG5cdFx0Zm9yIChpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcblx0XHRcdHNwbGl0ID0gZGF0YVtpXS5zcGxpdCgnfCcpO1xuXHRcdFx0Y291bnRyeV9jb2RlID0gc3BsaXRbMF0udG9VcHBlckNhc2UoKTtcblx0XHRcdGNvdW50cnlfem9uZXMgPSBzcGxpdFsxXS5zcGxpdCgnICcpO1xuXHRcdFx0Y291bnRyaWVzW2NvdW50cnlfY29kZV0gPSBuZXcgQ291bnRyeShcblx0XHRcdFx0Y291bnRyeV9jb2RlLFxuXHRcdFx0XHRjb3VudHJ5X3pvbmVzXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGdldENvdW50cnkgKG5hbWUpIHtcblx0XHRuYW1lID0gbmFtZS50b1VwcGVyQ2FzZSgpO1xuXHRcdHJldHVybiBjb3VudHJpZXNbbmFtZV0gfHwgbnVsbDtcblx0fVxuXG5cdGZ1bmN0aW9uIHpvbmVzRm9yQ291bnRyeShjb3VudHJ5LCB3aXRoX29mZnNldCkge1xuXHRcdGNvdW50cnkgPSBnZXRDb3VudHJ5KGNvdW50cnkpO1xuXG5cdFx0aWYgKCFjb3VudHJ5KSByZXR1cm4gbnVsbDtcblxuXHRcdHZhciB6b25lcyA9IGNvdW50cnkuem9uZXMuc29ydCgpO1xuXG5cdFx0aWYgKHdpdGhfb2Zmc2V0KSB7XG5cdFx0XHRyZXR1cm4gem9uZXMubWFwKGZ1bmN0aW9uICh6b25lX25hbWUpIHtcblx0XHRcdFx0dmFyIHpvbmUgPSBnZXRab25lKHpvbmVfbmFtZSk7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0bmFtZTogem9uZV9uYW1lLFxuXHRcdFx0XHRcdG9mZnNldDogem9uZS51dGNPZmZzZXQobmV3IERhdGUoKSlcblx0XHRcdFx0fTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiB6b25lcztcblx0fVxuXG5cdGZ1bmN0aW9uIGxvYWREYXRhIChkYXRhKSB7XG5cdFx0YWRkWm9uZShkYXRhLnpvbmVzKTtcblx0XHRhZGRMaW5rKGRhdGEubGlua3MpO1xuXHRcdGFkZENvdW50cmllcyhkYXRhLmNvdW50cmllcyk7XG5cdFx0dHouZGF0YVZlcnNpb24gPSBkYXRhLnZlcnNpb247XG5cdH1cblxuXHRmdW5jdGlvbiB6b25lRXhpc3RzIChuYW1lKSB7XG5cdFx0aWYgKCF6b25lRXhpc3RzLmRpZFNob3dFcnJvcikge1xuXHRcdFx0em9uZUV4aXN0cy5kaWRTaG93RXJyb3IgPSB0cnVlO1xuXHRcdFx0XHRsb2dFcnJvcihcIm1vbWVudC50ei56b25lRXhpc3RzKCdcIiArIG5hbWUgKyBcIicpIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgIW1vbWVudC50ei56b25lKCdcIiArIG5hbWUgKyBcIicpXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gISFnZXRab25lKG5hbWUpO1xuXHR9XG5cblx0ZnVuY3Rpb24gbmVlZHNPZmZzZXQgKG0pIHtcblx0XHR2YXIgaXNVbml4VGltZXN0YW1wID0gKG0uX2YgPT09ICdYJyB8fCBtLl9mID09PSAneCcpO1xuXHRcdHJldHVybiAhIShtLl9hICYmIChtLl90em0gPT09IHVuZGVmaW5lZCkgJiYgIWlzVW5peFRpbWVzdGFtcCk7XG5cdH1cblxuXHRmdW5jdGlvbiBsb2dFcnJvciAobWVzc2FnZSkge1xuXHRcdGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXHRcdG1vbWVudC50eiBuYW1lc3BhY2Vcblx0KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cdGZ1bmN0aW9uIHR6IChpbnB1dCkge1xuXHRcdHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwLCAtMSksXG5cdFx0XHRuYW1lID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXSxcblx0XHRcdHpvbmUgPSBnZXRab25lKG5hbWUpLFxuXHRcdFx0b3V0ICA9IG1vbWVudC51dGMuYXBwbHkobnVsbCwgYXJncyk7XG5cblx0XHRpZiAoem9uZSAmJiAhbW9tZW50LmlzTW9tZW50KGlucHV0KSAmJiBuZWVkc09mZnNldChvdXQpKSB7XG5cdFx0XHRvdXQuYWRkKHpvbmUucGFyc2Uob3V0KSwgJ21pbnV0ZXMnKTtcblx0XHR9XG5cblx0XHRvdXQudHoobmFtZSk7XG5cblx0XHRyZXR1cm4gb3V0O1xuXHR9XG5cblx0dHoudmVyc2lvbiAgICAgID0gVkVSU0lPTjtcblx0dHouZGF0YVZlcnNpb24gID0gJyc7XG5cdHR6Ll96b25lcyAgICAgICA9IHpvbmVzO1xuXHR0ei5fbGlua3MgICAgICAgPSBsaW5rcztcblx0dHouX25hbWVzICAgICAgID0gbmFtZXM7XG5cdHR6Ll9jb3VudHJpZXNcdD0gY291bnRyaWVzO1xuXHR0ei5hZGQgICAgICAgICAgPSBhZGRab25lO1xuXHR0ei5saW5rICAgICAgICAgPSBhZGRMaW5rO1xuXHR0ei5sb2FkICAgICAgICAgPSBsb2FkRGF0YTtcblx0dHouem9uZSAgICAgICAgID0gZ2V0Wm9uZTtcblx0dHouem9uZUV4aXN0cyAgID0gem9uZUV4aXN0czsgLy8gZGVwcmVjYXRlZCBpbiAwLjEuMFxuXHR0ei5ndWVzcyAgICAgICAgPSBndWVzcztcblx0dHoubmFtZXMgICAgICAgID0gZ2V0TmFtZXM7XG5cdHR6LlpvbmUgICAgICAgICA9IFpvbmU7XG5cdHR6LnVucGFjayAgICAgICA9IHVucGFjaztcblx0dHoudW5wYWNrQmFzZTYwID0gdW5wYWNrQmFzZTYwO1xuXHR0ei5uZWVkc09mZnNldCAgPSBuZWVkc09mZnNldDtcblx0dHoubW92ZUludmFsaWRGb3J3YXJkICAgPSB0cnVlO1xuXHR0ei5tb3ZlQW1iaWd1b3VzRm9yd2FyZCA9IGZhbHNlO1xuXHR0ei5jb3VudHJpZXMgICAgPSBnZXRDb3VudHJ5TmFtZXM7XG5cdHR6LnpvbmVzRm9yQ291bnRyeSA9IHpvbmVzRm9yQ291bnRyeTtcblxuXHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cdFx0SW50ZXJmYWNlIHdpdGggTW9tZW50LmpzXG5cdCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuXHR2YXIgZm4gPSBtb21lbnQuZm47XG5cblx0bW9tZW50LnR6ID0gdHo7XG5cblx0bW9tZW50LmRlZmF1bHRab25lID0gbnVsbDtcblxuXHRtb21lbnQudXBkYXRlT2Zmc2V0ID0gZnVuY3Rpb24gKG1vbSwga2VlcFRpbWUpIHtcblx0XHR2YXIgem9uZSA9IG1vbWVudC5kZWZhdWx0Wm9uZSxcblx0XHRcdG9mZnNldDtcblxuXHRcdGlmIChtb20uX3ogPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKHpvbmUgJiYgbmVlZHNPZmZzZXQobW9tKSAmJiAhbW9tLl9pc1VUQykge1xuXHRcdFx0XHRtb20uX2QgPSBtb21lbnQudXRjKG1vbS5fYSkuX2Q7XG5cdFx0XHRcdG1vbS51dGMoKS5hZGQoem9uZS5wYXJzZShtb20pLCAnbWludXRlcycpO1xuXHRcdFx0fVxuXHRcdFx0bW9tLl96ID0gem9uZTtcblx0XHR9XG5cdFx0aWYgKG1vbS5feikge1xuXHRcdFx0b2Zmc2V0ID0gbW9tLl96LnV0Y09mZnNldChtb20pO1xuXHRcdFx0aWYgKE1hdGguYWJzKG9mZnNldCkgPCAxNikge1xuXHRcdFx0XHRvZmZzZXQgPSBvZmZzZXQgLyA2MDtcblx0XHRcdH1cblx0XHRcdGlmIChtb20udXRjT2Zmc2V0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dmFyIHogPSBtb20uX3o7XG5cdFx0XHRcdG1vbS51dGNPZmZzZXQoLW9mZnNldCwga2VlcFRpbWUpO1xuXHRcdFx0XHRtb20uX3ogPSB6O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bW9tLnpvbmUob2Zmc2V0LCBrZWVwVGltZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdGZuLnR6ID0gZnVuY3Rpb24gKG5hbWUsIGtlZXBUaW1lKSB7XG5cdFx0aWYgKG5hbWUpIHtcblx0XHRcdGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdUaW1lIHpvbmUgbmFtZSBtdXN0IGJlIGEgc3RyaW5nLCBnb3QgJyArIG5hbWUgKyAnIFsnICsgdHlwZW9mIG5hbWUgKyAnXScpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5feiA9IGdldFpvbmUobmFtZSk7XG5cdFx0XHRpZiAodGhpcy5feikge1xuXHRcdFx0XHRtb21lbnQudXBkYXRlT2Zmc2V0KHRoaXMsIGtlZXBUaW1lKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGxvZ0Vycm9yKFwiTW9tZW50IFRpbWV6b25lIGhhcyBubyBkYXRhIGZvciBcIiArIG5hbWUgKyBcIi4gU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vdGltZXpvbmUvZG9jcy8jL2RhdGEtbG9hZGluZy8uXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmICh0aGlzLl96KSB7IHJldHVybiB0aGlzLl96Lm5hbWU7IH1cblx0fTtcblxuXHRmdW5jdGlvbiBhYmJyV3JhcCAob2xkKSB7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uICgpIHtcblx0XHRcdGlmICh0aGlzLl96KSB7IHJldHVybiB0aGlzLl96LmFiYnIodGhpcyk7IH1cblx0XHRcdHJldHVybiBvbGQuY2FsbCh0aGlzKTtcblx0XHR9O1xuXHR9XG5cblx0ZnVuY3Rpb24gcmVzZXRab25lV3JhcCAob2xkKSB7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uICgpIHtcblx0XHRcdHRoaXMuX3ogPSBudWxsO1xuXHRcdFx0cmV0dXJuIG9sZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHRcdH07XG5cdH1cblxuXHRmdW5jdGlvbiByZXNldFpvbmVXcmFwMiAob2xkKSB7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uICgpIHtcblx0XHRcdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMCkgdGhpcy5feiA9IG51bGw7XG5cdFx0XHRyZXR1cm4gb2xkLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdFx0fTtcblx0fVxuXG5cdGZuLnpvbmVOYW1lICA9IGFiYnJXcmFwKGZuLnpvbmVOYW1lKTtcblx0Zm4uem9uZUFiYnIgID0gYWJicldyYXAoZm4uem9uZUFiYnIpO1xuXHRmbi51dGMgICAgICAgPSByZXNldFpvbmVXcmFwKGZuLnV0Yyk7XG5cdGZuLmxvY2FsICAgICA9IHJlc2V0Wm9uZVdyYXAoZm4ubG9jYWwpO1xuXHRmbi51dGNPZmZzZXQgPSByZXNldFpvbmVXcmFwMihmbi51dGNPZmZzZXQpO1xuXG5cdG1vbWVudC50ei5zZXREZWZhdWx0ID0gZnVuY3Rpb24obmFtZSkge1xuXHRcdGlmIChtYWpvciA8IDIgfHwgKG1ham9yID09PSAyICYmIG1pbm9yIDwgOSkpIHtcblx0XHRcdGxvZ0Vycm9yKCdNb21lbnQgVGltZXpvbmUgc2V0RGVmYXVsdCgpIHJlcXVpcmVzIE1vbWVudC5qcyA+PSAyLjkuMC4gWW91IGFyZSB1c2luZyBNb21lbnQuanMgJyArIG1vbWVudC52ZXJzaW9uICsgJy4nKTtcblx0XHR9XG5cdFx0bW9tZW50LmRlZmF1bHRab25lID0gbmFtZSA/IGdldFpvbmUobmFtZSkgOiBudWxsO1xuXHRcdHJldHVybiBtb21lbnQ7XG5cdH07XG5cblx0Ly8gQ2xvbmluZyBhIG1vbWVudCBzaG91bGQgaW5jbHVkZSB0aGUgX3ogcHJvcGVydHkuXG5cdHZhciBtb21lbnRQcm9wZXJ0aWVzID0gbW9tZW50Lm1vbWVudFByb3BlcnRpZXM7XG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobW9tZW50UHJvcGVydGllcykgPT09ICdbb2JqZWN0IEFycmF5XScpIHtcblx0XHQvLyBtb21lbnQgMi44LjErXG5cdFx0bW9tZW50UHJvcGVydGllcy5wdXNoKCdfeicpO1xuXHRcdG1vbWVudFByb3BlcnRpZXMucHVzaCgnX2EnKTtcblx0fSBlbHNlIGlmIChtb21lbnRQcm9wZXJ0aWVzKSB7XG5cdFx0Ly8gbW9tZW50IDIuNy4wXG5cdFx0bW9tZW50UHJvcGVydGllcy5feiA9IG51bGw7XG5cdH1cblxuXHQvLyBJTkpFQ1QgREFUQVxuXG5cdHJldHVybiBtb21lbnQ7XG59KSk7XG4iLCJ2YXIgbW9tZW50ID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi9tb21lbnQtdGltZXpvbmVcIik7XG5tb21lbnQudHoubG9hZChyZXF1aXJlKCcuL2RhdGEvcGFja2VkL2xhdGVzdC5qc29uJykpO1xuIiwiY29uc3QgdHJhbnNsYXRpb25zID0ge1xuICBkZToge1xuICAgIGFkZHJlc3M6ICdBZHJlc3NlJyxcbiAgICAnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcyc6ICdBZHJlc3MsIE9ydCBvciBHZXNjaMOkZnQnLFxuICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdGw7xnZSBad2lzY2hlbnppZWwgaGluenUnLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6ICdTZXQgc3RvcCBkdXJhdGlvbiBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgJ0Nsb3NlIHN0b3AgZHVyYXRpb24gc2VsZWN0b3IgYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgJ09wZW4gc3RvcCBkdXJhdGlvbiBzZWxlY3RvciBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICBhaXJwbGFuZTogJ0ZsdWcnLFxuICAgIGFycml2YWw6ICdBbmt1bmZ0JyxcbiAgICBiYWNrOiAnWnVyw7xjaycsXG4gICAgYmlrZXJlbnRhbHN0YXRpb246ICdMZWlocmFkLVN0YXRpb24nLFxuICAgIGJ1czogJ0J1cycsXG4gICAgY2FuY2VsOiAnQWJicmVjaGVuJyxcbiAgICAnY2xlYXItYnV0dG9uLWxhYmVsJzogJ0zDtnNjaGVuJyxcbiAgICAnY2xlYXItc2VhcmNoLWhpc3RvcnknOiAnU3VjaGhpc3RvcmllIGzDtnNjaGVuJyxcbiAgICBjdXJyZW50cG9zaXRpb246ICdBa3R1ZWxsZSBQb3NpdGlvbicsXG4gICAgZGVsZXRlOiAnTMO2c2NoZW4nLFxuICAgICdkZWxldGUtb2xkLXNlYXJjaGVzLWhlYWRlcic6ICdXb2xsZW4gU2llIGRpZSBTdWNoLUhpc3RvcmllIGzDtnNjaGVuPycsXG4gICAgZGVwYXJ0dXJlOiAnQWJmYWhydCcsXG4gICAgZGVzdGluYXRpb246ICdaaWVsJyxcbiAgICAnZ2l2ZS1vcmlnaW4nOiAnU3RhcnQgZWluZ2ViZW4uJyxcbiAgICAnZ2l2ZS1kZXN0aW5hdGlvbic6ICdaaWVsIGVpbmdlYmVuLicsXG4gICAgZmF2b3VyaXRlOiAnRmF2b3JpdGVuJyxcbiAgICBmZXJyeTogJ0bDpGhyZScsXG4gICAgJ2Z1dHVyZS1yb3V0ZSc6ICdadWvDvG5mdGlnZSBWZXJiaW5kdW5nJyxcbiAgICBvcmlnaW46ICdTdGFydCcsXG4gICAgJ29yaWdpbi1zdG9wLW5lYXIteW91JzogJ1N0YXJ0JyxcbiAgICBvd25sb2NhdGlvbnM6ICdFaWdlbmUgRmF2b3JpdGVuJyxcbiAgICBsb2FkaW5nOiAnTGFkZW4uLi4nLFxuICAgICdtaW51dGUtc2hvcnQnOiAnbWluJyxcbiAgICByYWlsOiAnWnVnJyxcbiAgICBzZWFyY2g6ICdTdWNoZScsXG4gICAgJ3NlYXJjaC1hZGRyZXNzLW9yLXBsYWNlJzogJ1N1Y2hlIGFuaGFuZCB2b24gQWRyZXNzZSBvZGVyIE9ydHNhbmdhYmUnLFxuICAgICdzZWFyY2gtYnV0dG9uLWxhYmVsJzogJ1N1Y2hlJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uJzogJ1N1Y2hlIFppZWxvcnQsIExpbmllIG9yIEhhbHRlc3RlbGxlJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLWluZGV4JzogJ1ppZWxvcnQgZWluZ2ViZW4nLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24tcmVzdWx0cy1idXQtbm8tc2VhcmNoJzpcbiAgICAgICdFcmdlYm5pc3NlIGluIOKAnFppZWxvcnTigJ0tUmVpdGVyIGFuemVpZ2VuJyxcbiAgICAnc2VhcmNoLW5vLXJlc3VsdHMnOiAnS2VpbiBPcnQgZ2VmdW5kZW4uJyxcbiAgICAnc2VhcmNoLW9yaWdpbic6ICdTdWNoZSBTdGFydG9ydCwgTGluaWUgb2RlciBIYWx0ZXN0ZWxsZScsXG4gICAgJ3NlYXJjaC1vcmlnaW4taW5kZXgnOiAnU3RhcnRvcnQgZWluZ2ViZW4nLFxuICAgICdzZWFyY2gtcG9zaXRpb24nOiAnU3RhbmRvcnQgZXJtaXR0ZWxuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWRlc2t0b3AnOlxuICAgICAgJ1ZlbnVlLCBwbGFjZSBhbmQgc3RvcHNlYXJjaC4gTmF2aWdhdGUgbGlzdCB3aXRoIGFycm93IGtleXMgYW5kIHNlbGVjdCB3aXRoIGVudGVyIGtleScsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb2JpbGUnOiAnVmVudWUsIHBsYWNlIGFuZCBzdG9wc2VhcmNoLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nOiAnVGhlcmUgaXMge3tjb3VudH19IHN1Z2dlc3Rpb24gYXZhaWxhYmxlJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbl9wbHVyYWwnOlxuICAgICAgJ1RoZXJlIGFyZSB7e2NvdW50fX0gc3VnZ2VzdGlvbnMgYXZhaWxhYmxlJyxcbiAgICAnc2VhcmNoLWN1cnJlbnQtc3VnZ2VzdGlvbic6ICdBa3R1ZWxsZSBBdXN3YWhsOiB7e3NlbGVjdGlvbn19JyxcbiAgICBzdHJlZXQ6ICdTdHJhw59lJyxcbiAgICBzdWJ3YXk6ICdVLUJhaG4nLFxuICAgIHN0YXRpb246ICdTdGF0aW9uJyxcbiAgICBzdG9wOiAnSGFsdGVzdGVsbGUnLFxuICAgICdzdG9wLW5lYXIteW91JzogJ1N1Y2hlIEhhbHRlc3RlbGxlbiB1bmQgTGluaWVuIGluIGRlciBOw6RoZScsXG4gICAgJ3N0b3AtbmVhci15b3UtYnVzJzogJ1N1Y2hlIEJ1c2xpbmllbiBvciBIYWx0ZXN0ZWxsZW4nLFxuICAgICdzdG9wLW5lYXIteW91LWNpdHliaWtlJzogJ1N1Y2hlIExlaWhyYWQtU3RhdGlvbmVuJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1yYWlsJzogJ1N1Y2hlIFp1Z3ZlcmJpbmR1bmdlbiBvZGVyIEJhaG5ow7ZmZScsXG4gICAgJ3N0b3AtbmVhci15b3Utc3Vid2F5JzogJ1N1Y2hlIFUtQmFobi1MaW5pZW4gb2RlciBIYWx0ZXN0ZWxsZW4nLFxuICAgICdzdG9wLW5lYXIteW91LXRyYW0nOiAnU3VjaGUgU3RhZHRiYWhuLUhhbHRlc3RlbGxlbi1TdWNoZScsXG4gICAgJ3RvZGF5LWF0JzogJ0hldXRlIHVtJyxcbiAgICAndG9tb3Jyb3ctYXQnOiAnTW9yZ2VuIHVtJyxcbiAgICB0cmFtOiAnU3RyYcOfZW5iYWhuJyxcbiAgICAndXNlLW93bi1wb3NpdGlvbic6ICdCZW51dHplIGFrdHVlbGxlbiBTdGFuZG9ydCcsXG4gICAgJ3NlbGVjdC1mcm9tLW1hcCc6ICdXw6RobGUgUG9zaXRpb24gYW5oYW5kIEthcnRlJyxcbiAgICAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucyc6ICdBdXMgZWlnZW5lbiBGYXZvcml0ZW4gYXVzd8OkaGxlbicsXG4gICAgdmVudWU6ICdWZW51ZScsXG4gICAgJ3ZpYS1wb2ludCc6ICdad2lzY2hlbnppZWwnLFxuICAgIHdoZXJlOiAnV29oaW4/JyxcbiAgICBwbGFjZTogJ09ydCcsXG4gIH0sXG4gIGVuOiB7XG4gICAgYWRkcmVzczogJ0FkZHJlc3MnLFxuICAgICdhZGRyZXNzLXBsYWNlLW9yLWJ1c2luZXNzJzogJ0FkZHJlc3MsIHBsYWNlIG9yIGJ1c2luZXNzJyxcbiAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnQWRkIHZpYSBwb2ludCcsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzogJ1NldCBzdG9wIGR1cmF0aW9uIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAnQ2xvc2Ugc3RvcCBkdXJhdGlvbiBzZWxlY3RvciBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAnT3BlbiBzdG9wIGR1cmF0aW9uIHNlbGVjdG9yIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgIGFpcnBsYW5lOiAnRmxpZ2h0JyxcbiAgICBhcnJpdmFsOiAnQXJyaXZhbCcsXG4gICAgYmFjazogJ0JhY2snLFxuICAgIGJpa2VwYXJrOiAnUGFyayAmIFJpZGUgZm9yIGJpa2VzJyxcbiAgICBiaWtlcmVudGFsc3RhdGlvbjogJ0Jpa2Ugc3RhdGlvbicsXG4gICAgYnVzOiAnYnVzJyxcbiAgICBjYW5jZWw6ICdDYW5jZWwnLFxuICAgIGNhcnBhcms6ICdQYXJrICYgUmlkZScsXG4gICAgJ2NsZWFyLWJ1dHRvbi1sYWJlbCc6ICdDbGVhcicsXG4gICAgJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JzogJ0NsZWFyIHNlYXJjaCBoaXN0b3J5JyxcbiAgICBjdXJyZW50cG9zaXRpb246ICdDdXJyZW50IHBvc2l0aW9uJyxcbiAgICBkZWxldGU6ICdEZWxldGUnLFxuICAgICdkZWxldGUtb2xkLXNlYXJjaGVzLWhlYWRlcic6ICdEbyB5b3Ugd2FudCB0byBjbGVhciB0aGUgc2VhcmNoIGhpc3Rvcnk/JyxcbiAgICBkZXBhcnR1cmU6ICdEZXBhcnR1cmUnLFxuICAgIGRlc3RpbmF0aW9uOiAnRGVzdGluYXRpb24nLFxuICAgICdnaXZlLW9yaWdpbic6ICdFbnRlciB5b3VyIG9yaWdpbi4nLFxuICAgICdnaXZlLWRlc3RpbmF0aW9uJzogJ0VudGVyIHlvdXIgZGVzdGluYXRpb24nLFxuICAgIGZhdm91cml0ZTogJ0Zhdm91cml0ZScsXG4gICAgZmVycnk6ICdGZXJyeScsXG4gICAgJ2Z1dHVyZS1yb3V0ZSc6ICdGdXR1cmUgcm91dGUnLFxuICAgIG9yaWdpbjogJ1N0YXJ0JyxcbiAgICAnb3JpZ2luLXN0b3AtbmVhci15b3UnOiAnU3RhcnQnLFxuICAgIG93bmxvY2F0aW9uczogJ093biBsb2NhdGlvbnMnLFxuICAgIGxvYWRpbmc6ICdMb2FkaW5nLi4uJyxcbiAgICAnbWludXRlLXNob3J0JzogJ20nLFxuICAgIHBsYXRmb3JtOiAnUGxhdGZvcm0nLFxuICAgIHJhaWw6ICdUcmFpbicsXG4gICAgcmVxdWlyZWQ6ICdyZXF1aXJlZCBmaWVsZCcsXG4gICAgc2VhcmNoOiAnU2VhcmNoJyxcbiAgICAnc2VhcmNoLWFkZHJlc3Mtb3ItcGxhY2UnOiAnU2VhcmNoIGJ5IGFkZHJlc3Mgb3IgcGxhY2UgbmFtZScsXG4gICAgJ3NlYXJjaC1idXR0b24tbGFiZWwnOiAnU2VhcmNoJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uJzogJ1NlYXJjaCBkZXN0aW5hdGlvbiwgcm91dGUgb3Igc3RvcCcsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1pbmRleCc6ICdFbnRlciBkZXN0aW5hdGlvbicsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1yZXN1bHRzLWJ1dC1uby1zZWFyY2gnOlxuICAgICAgJ1ZpZXcgcmVzdWx0cyBpbiB0aGUgYWRqYWNlbnQg4oCcRGVzdGluYXRpb27igJ0gdGFiJyxcbiAgICAnc2VhcmNoLW5vLXJlc3VsdHMnOiAnTm8gbG9jYXRpb24nLFxuICAgICdzZWFyY2gtb3JpZ2luJzogJ1NlYXJjaCBvcmlnaW4sIHJvdXRlIG9yIHN0b3AnLFxuICAgICdzZWFyY2gtb3JpZ2luLWluZGV4JzogJ0VudGVyIG9yaWdpbicsXG4gICAgJ3NlYXJjaC1wb3NpdGlvbic6ICdEZXRlY3QgbG9jYXRpb24nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtZGVza3RvcCc6XG4gICAgICAnVmVudWUsIHBsYWNlIGFuZCBzdG9wc2VhcmNoLiBOYXZpZ2F0ZSBsaXN0IHdpdGggYXJyb3cga2V5cyBhbmQgc2VsZWN0IHdpdGggZW50ZXIga2V5JyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLW1vYmlsZSc6XG4gICAgICAnVmVudWUsIHBsYWNlIGFuZCBzdG9wc2VhcmNoLiBFbnRlciB0aGUgbG9jYXRpb24gYW5kIG5hdmlnYXRlIGluIHRoZSBsaXN0IGJ5IHN3aXBpbmcuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbic6ICdUaGVyZSBpcyB7e2NvdW50fX0gc3VnZ2VzdGlvbiBhdmFpbGFibGUnLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuX3BsdXJhbCc6XG4gICAgICAnVGhlcmUgYXJlIHt7Y291bnR9fSBzdWdnZXN0aW9ucyBhdmFpbGFibGUnLFxuICAgICdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJzogJ0N1cnJlbnQgc2VsZWN0aW9uOiB7e3NlbGVjdGlvbn19JyxcbiAgICBzdHJlZXQ6ICdTdHJlZXQnLFxuICAgIHN1YndheTogJ01ldHJvJyxcbiAgICBzdGF0aW9uOiAnU3RhdGlvbicsXG4gICAgc3RvcDogJ1N0b3AnLFxuICAgICdzdG9wLW5lYXIteW91JzogJ1NlYXJjaCBzdG9wcyBhbmQgcm91dGVzJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1haXJwbGFuZSc6ICdTZWFyY2ggZmxpZ2h0cyBvciBhaXJwb3J0cycsXG4gICAgJ3N0b3AtbmVhci15b3UtYnVzJzogJ1NlYXJjaCBidXMgcm91dGVzIG9yIHN0b3BzJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1jaXR5YmlrZSc6ICdTZWFyY2ggY2l0eSBiaWtlIHN0YXRpb25zJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1yYWlsJzogJ1NlYXJjaCB0cmFpbiByb3V0ZXMgb3Igc3RhdGlvbnMnLFxuICAgICdzdG9wLW5lYXIteW91LXN1YndheSc6ICdTZWFyY2ggbWV0cm8gcm91dGVzIG9yIHN0YXRpb25zICcsXG4gICAgJ3N0b3AtbmVhci15b3UtdHJhbSc6ICdTZWFyY2ggdHJhbSByb3V0ZXMgb3Igc3RvcHMnLFxuICAgICdzdG9wLXJvdXRlLXN0YXRpb24nOiAnQnVzIGFuZCBzdG9wIHNlYXJjaCcsXG4gICAgJ3RvZGF5LWF0JzogJ3RvZGF5IGF0JyxcbiAgICAndG9tb3Jyb3ctYXQnOiAndG9tb3Jyb3cgYXQnLFxuICAgIHRyYW06ICdUcmFtJyxcbiAgICB0cmFjazogJ1RyYWNrJyxcbiAgICAndXNlLW93bi1wb3NpdGlvbic6ICdVc2UgY3VycmVudCBsb2NhdGlvbicsXG4gICAgJ3NlbGVjdC1mcm9tLW1hcCc6ICdTZWxlY3QgcG9zaXRpb24gZnJvbSBtYXAnLFxuICAgICdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJzogJ1NlbGVjdCBmcm9tIG93biBsb2NhdGlvbnMnLFxuICAgIHZlbnVlOiAnVmVudWUnLFxuICAgICd2aWEtcG9pbnQnOiAnVmlhIHBvaW50JyxcbiAgICB3aGVyZTogJ1doZXJlIHRvPycsXG4gICAgcGxhY2U6ICdMb2NhdGlvbicsXG4gIH0sXG4gIGZpOiB7XG4gICAgYWRkcmVzczogJ09zb2l0ZScsXG4gICAgJ2FkZHJlc3MtcGxhY2Utb3ItYnVzaW5lc3MnOiAnT3NvaXRlLCBwYWlra2EgdGFpIHlyaXR5cycsXG4gICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0xpc8Okw6QgdsOkbGlwaXN0ZScsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzpcbiAgICAgICdBc2V0YSB2w6RsaXBpc3RlZWxsZSB7e2luZGV4fX0gcHlzw6RoZHlrc2VuIGtlc3RvJyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgJ0F2YWEgdsOkbGlwaXN0ZWVuIHt7aW5kZXh9fSBweXPDpGhkeWtzZW4ga2VzdG8gdmFsaXRzaW4nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICdTdWxqZSB2w6RsaXBpc3RlZW4ge3tpbmRleH19IHB5c8OkaGR5a3NlbiBrZXN0byB2YWxpdHNpbicsXG4gICAgYWlycGxhbmU6ICdMZW50b2tvbmUnLFxuICAgIGFycml2YWw6ICdQZXJpbGzDpCcsXG4gICAgYmFjazogJ1Rha2Fpc2luJyxcbiAgICBiaWtlcmVudGFsc3RhdGlvbjogJ1B5w7Zyw6Rhc2VtYScsXG4gICAgYmlrZXBhcms6ICdMaWl0eW50w6RwecO2csOkcGFya2tpJyxcbiAgICBidXM6ICdidXNzaScsXG4gICAgY2FuY2VsOiAnUGVydXV0YScsXG4gICAgY2FycGFyazogJ0xpaXR5bnTDpHB5c8Oka29pbnRpJyxcbiAgICAnY2xlYXItYnV0dG9uLWxhYmVsJzogJ1R5aGplbm7DpCcsXG4gICAgJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JzogJ1R5aGplbm7DpCBoYWt1aGlzdG9yaWEnLFxuICAgIGN1cnJlbnRwb3NpdGlvbjogJ1TDpG3DpG5oZXRraW5lbiBzaWphaW50aScsXG4gICAgZGVsZXRlOiAnUG9pc3RhJyxcbiAgICAnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInOiAnSGFsdWF0a28gdHloamVudMOkw6QgaGFrdWhpc3Rvcmlhbj8nLFxuICAgIGRlcGFydHVyZTogJ0zDpGh0w7ZhaWthJyxcbiAgICBkZXN0aW5hdGlvbjogJ03DpMOkcsOkbnDDpMOkJyxcbiAgICBmYXZvdXJpdGU6ICdTdW9zaWtraScsXG4gICAgZmVycnk6ICdMYXV0dGEnLFxuICAgICdmdXR1cmUtcm91dGUnOiAnVHVsZXZhIHJlaXR0aScsXG4gICAgJ2dpdmUtb3JpZ2luJzogJ0zDpGh0w7ZwYWlra2EnLFxuICAgICdnaXZlLWRlc3RpbmF0aW9uJzogJ03DpMOkcsOkbnDDpMOkJyxcbiAgICBvcmlnaW46ICdMw6RodMO2cGFpa2thJyxcbiAgICAnb3JpZ2luLXN0b3AtbmVhci15b3UnOiAnTMOkaHTDtnBhaWtrYScsXG4gICAgb3dubG9jYXRpb25zOiAnT21hdCBwYWlrYXQnLFxuICAgIGxvYWRpbmc6ICdMYWRhdGFhbi4uLicsXG4gICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4nLFxuICAgIHBsYXRmb3JtOiAnTGFpdHVyaScsXG4gICAgcmFpbDogJ0p1bmEnLFxuICAgIHJlcXVpcmVkOiAncGFrb2xsaW5lbiBrZW50dMOkJyxcbiAgICBzZWFyY2g6ICdFdHNpJyxcbiAgICAnc2VhcmNoLWFkZHJlc3Mtb3ItcGxhY2UnOiAnSGFlIG9zb2l0dGVlbGxhIHRhaSBwYWlrYW4gbmltZWxsw6QnLFxuICAgICdzZWFyY2gtYnV0dG9uLWxhYmVsJzogJ0hhZScsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbic6ICdIYWUgbcOkw6Ryw6RucMOkw6R0w6QsIGxpbmphYSB0YWkgcHlzw6Rra2nDpCcsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1pbmRleCc6ICdTecO2dMOkIG3DpMOkcsOkbnDDpMOkJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLXJlc3VsdHMtYnV0LW5vLXNlYXJjaCc6XG4gICAgICAnS2F0c28gdHVsb2tzZXQgdmllcmVpc2VsdMOkIE3DpMOkcsOkbnDDpMOkLXbDpGxpbGVoZGVsdMOkJyxcbiAgICAnc2VhcmNoLW5vLXJlc3VsdHMnOiAnRWkgdHVsb2tzaWEnLFxuICAgICdzZWFyY2gtb3JpZ2luJzogJ0hhZSBsw6RodMO2cGFpa2thYSwgbGluamFhIHRhaSBweXPDpGtracOkJyxcbiAgICAnc2VhcmNoLW9yaWdpbi1pbmRleCc6ICdTecO2dMOkIGzDpGh0w7ZwYWlra2EnLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtZGVza3RvcCc6XG4gICAgICAnUGFpa2thLCBsaW5qYSBqYSBweXPDpGtraWhha3UuIE5hdmlnb2kgbGlzdGFzc2EgbnVvbGluw6RwcMOkaW1pbGzDpCBqYSB2YWxpdHNlIGVudGVyaWxsw6QnLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW9iaWxlJzpcbiAgICAgICdQYWlra2EsIGxpbmphIGphIHB5c8Oka2tpaGFrdS4gU3nDtnTDpCBzaWphaW50aSBqYSBuYXZpZ29pIGxpc3Rhc3NhIHB5eWhrw6Rpc2Vtw6RsbMOkLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nOiAnIEzDtnlkZXR0aWluIHt7Y291bnR9fSBlaGRvdHVzJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbl9wbHVyYWwnOiAnIEzDtnlkZXR0aWluIHt7Y291bnR9fSBlaGRvdHVzdGEnLFxuICAgICdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJzogJ1TDpG3DpG5oZXRraW5lbiB2YWxpbnRhOiB7e3NlbGVjdGlvbn19JyxcbiAgICAnc2VhcmNoLXBvc2l0aW9uJzogJ1BhaWthbm5hJyxcbiAgICBzdHJlZXQ6ICdLYXR1JyxcbiAgICBzdWJ3YXk6ICdNZXRybycsXG4gICAgc3RhdGlvbjogJ0FzZW1hJyxcbiAgICBzdG9wOiAnUHlzw6Rra2knLFxuICAgICdzdG9wLW5lYXIteW91JzogJ0xpbmphLCBweXPDpGtraSB0YWkgYXNlbWEnLFxuICAgICdzdG9wLW5lYXIteW91LWFpcnBsYW5lJzogJ0hhZSBsZW50b2phIHRhaSBsZW50b2FzZW1hYScsXG4gICAgJ3N0b3AtbmVhci15b3UtYnVzJzogJ0hhZSBidXNzaWxpbmphYSB0YWkgcHlzw6Rra2nDpCcsXG4gICAgJ3N0b3AtbmVhci15b3UtY2l0eWJpa2UnOiAnSGFlIGthdXB1bmtpcHnDtnLDpGFzZW1hYScsXG4gICAgJ3N0b3AtbmVhci15b3UtcmFpbCc6ICdIYWUgbMOkaGlqdW5hYSB0YWkgYXNlbWFhJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1zdWJ3YXknOiAnSGFlIG1ldHJvbGluamFhIHRhaSBhc2VtYWEnLFxuICAgICdzdG9wLW5lYXIteW91LXRyYW0nOiAnSGFlIHJhaXRpb2xpbmphYSB0YWkgcHlzw6Rra2nDpCcsXG4gICAgJ3N0b3Atcm91dGUtc3RhdGlvbic6ICdMaW5qYS0gamEgcHlzw6Rra2loYWt1JyxcbiAgICAndG9kYXktYXQnOiAndMOkbsOkw6RuIGtsbycsXG4gICAgJ3RvbW9ycm93LWF0JzogJ2h1b21lbm5hIGtsbycsXG4gICAgdHJhbTogJ1JhaXRpb3ZhdW51JyxcbiAgICB0cmFjazogJ1JhaWRlJyxcbiAgICAndXNlLW93bi1wb3NpdGlvbic6ICdLw6R5dMOkIG55a3lpc3TDpCBzaWphaW50aWEnLFxuICAgICdzZWxlY3QtZnJvbS1tYXAnOiAnVmFsaXRzZSBzaWphaW50aSBrYXJ0YWx0YScsXG4gICAgJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnOiAnVmFsaXRzZSBvbWlzdGEgcGFpa29pc3RhJyxcbiAgICB2ZW51ZTogJ1BhaWtrYScsXG4gICAgJ3ZpYS1wb2ludCc6ICdWw6RsaXBpc3RlJyxcbiAgICB3aGVyZTogJ01pbm5lIG1lbm7DpMOkbj8nLFxuICAgIHBsYWNlOiAnUGFpa2thJyxcbiAgfSxcbiAgc3Y6IHtcbiAgICBhZGRyZXNzOiAnQWRyZXNzJyxcbiAgICAnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcyc6ICdBZHJlc3MsIHBsYXRzIGVsbGVyIGbDtnJldGFnJyxcbiAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnTMOkZ2cgdGlsbCB2aWFwdW5rdCcsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzpcbiAgICAgICdTdMOkbGwgaW4gdmFyYWt0aWdoZXQgZsO2ciB2aWFwdW5rdGVuIHt7aW5kZXh9fScsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICdTdMOkbmcgdsOkbGphcmVuIGbDtnIgdmFyYWt0aWdoZXQgdmlkIHZpYS1wdW5rdGVuIHt7aW5kZXh9fScsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgJ8OWcHBuYSB2w6RsamFyZW4gZsO2ciB2YXJha3RpZ2hldCB2aWQgdmlhLXB1bmt0ZW4ge3tpbmRleH19JyxcbiAgICBhaXJwbGFuZTogJ0ZseWcnLFxuICAgIGFycml2YWw6ICdBbmzDpG5kZXInLFxuICAgIGJhY2s6ICdUaWxsYmFrYScsXG4gICAgYmlrZXJlbnRhbHN0YXRpb246ICdTdGFkc2N5a2Vsc3RhdGlvbicsXG4gICAgYmlrZXBhcms6ICdBbnNsdXRuaW5nc3BhcmtlcmluZyBmw7ZyIGN5a2xhcicsXG4gICAgYnVzOiAnQnVzc2knLFxuICAgIGNhbmNlbDogJ0F2YnJ5dCcsXG4gICAgY2FycGFyazogJ0luZmFydHNwYXJrZXJpbmcnLFxuICAgICdjbGVhci1idXR0b24tbGFiZWwnOiAnVMO2bScsXG4gICAgJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JzogJ1TDtm0gc8O2a2hpc3RvcmlrZW4nLFxuICAgIGN1cnJlbnRwb3NpdGlvbjogJ051dmFyYW5kZSBwb3NpdGlvbicsXG4gICAgZGVsZXRlOiAnVGEgYm9ydCcsXG4gICAgJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJzogJ1ZpbGwgZHUgdMO2bW1hIHPDtmtoaXN0b3Jpa2VuPycsXG4gICAgZGVwYXJ0dXJlOiAnQXZnw6VuZ3N0aWQnLFxuICAgIGRlc3RpbmF0aW9uOiAnRGVzdGluYXRpb24nLFxuICAgIGZhdm91cml0ZTogJ0Zhdm9yaXQnLFxuICAgIGZlcnJ5OiAnRsOkcmphJyxcbiAgICAnZnV0dXJlLXJvdXRlJzogJ0ZyYW10aWRhIHJ1dHQnLFxuICAgICdnaXZlLWRlc3RpbmF0aW9uJzogJ1Nrcml2IGluIGRpbiBkZXN0aW5hdGlvbicsXG4gICAgJ2dpdmUtb3JpZ2luJzogJ1Nrcml2IGluIGRpbiBhdmbDpHJkc3BsYXRzJyxcbiAgICBvcmlnaW46ICdBdmbDpHJkc3BsYXRzJyxcbiAgICAnb3JpZ2luLXN0b3AtbmVhci15b3UnOiAnQXZmw6RyZHNwbGF0cycsXG4gICAgb3dubG9jYXRpb25zOiAnRWduYSBwbGF0c2VyJyxcbiAgICBsb2FkaW5nOiAnTGFkZGFyLi4uJyxcbiAgICAnbWludXRlLXNob3J0JzogJ21pbicsXG4gICAgcGxhdGZvcm06ICdQbGF0dGZvcm0nLFxuICAgIHJhaWw6ICdUw6VnJyxcbiAgICByZXF1aXJlZDogJ29ibGlnYXRvcmlza3QgZsOkbHQnLFxuICAgIHNlYXJjaDogJ1PDtmsnLFxuICAgICdzZWFyY2gtYWRkcmVzcy1vci1wbGFjZSc6ICdTw7ZrIG1lZCBhZHJlc3NlbiBlbGxlciBwbGF0c2VucyBuYW1uJyxcbiAgICAnc2VhcmNoLWJ1dHRvbi1sYWJlbCc6ICdTw7ZrJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uJzogJ1PDtmsgZGVzdGluYXRpb24sIGxpbmplIGVsbGVyIGjDpWxscGxhdHMnLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24taW5kZXgnOiAnU2tyaXYgZGVzdGluYXRpb24nLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24tcmVzdWx0cy1idXQtbm8tc2VhcmNoJzpcbiAgICAgICdTZSByZXN1bHRhdGVuIHVuZGVyIGZsaWtlbiBEZXN0aW5hdGlvbicsXG4gICAgJ3NlYXJjaC1uby1yZXN1bHRzJzogJ0luZ2Egc8O2a3Jlc3VsdGF0JyxcbiAgICAnc2VhcmNoLW9yaWdpbic6ICdTw7ZrIGF2ZsOkcmRzcGxhdHMsIGxpbmplIGVsbGVyIGjDpWxscGxhdHMnLFxuICAgICdzZWFyY2gtb3JpZ2luLWluZGV4JzogJ1Nrcml2IGF2ZsOkcmRzcGxhdHMnLFxuICAgICdzZWFyY2gtcG9zaXRpb24nOiAnU8O2ayBwb3NpdGlvbicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1kZXNrdG9wJzpcbiAgICAgICdQbGF0cywgbGluamUgb2NoIGjDpWxscGxhdHNzw7ZrbmluZy4gTmF2aWdlcmEgbGlzdGFuIG1lZCBwaWx0YW5nZW50ZXJuYSBvY2ggdsOkbGogbWVkIEVudGVyLXRhbmdldGVuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLW1vYmlsZSc6XG4gICAgICAnUGxhdHMsIGxpbmplIG9jaCBow6VsbHBsYXRzc8O2a25pbmcuIEFuZ2UgcGxhdHNlbiBvY2ggbmF2aWdlcmEgaSBsaXN0YW4gZ2Vub20gYXR0IHN2ZXBhLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nOiAnSGl0dGFkZSB7e2NvdW50fX0gZsO2cnNsYWcnLFxuICAgICdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJzogJ051dmFyYW5kZSB2YWw6IHt7c2VsZWN0aW9ufX0nLFxuICAgIHN0cmVldDogJ0dhdGEnLFxuICAgIHN1YndheTogJ01ldHJvJyxcbiAgICBzdGF0aW9uOiAnU3RhdGlvbicsXG4gICAgc3RvcDogJ0jDpWxscGxhdHMnLFxuICAgICdzdG9wLW5lYXIteW91JzogJ1PDtmsgaMOlbGxwbGF0c2VyIGVsbGVyIGxpbmplcicsXG4gICAgJ3N0b3AtbmVhci15b3UtYWlycGxhbmUnOiAnU8O2ayBmbHlnIGVsbGVyIGZseWdwbGF0c2VyJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1idXMnOiAnU8O2ayBidXNzbGluamVyIGVsbGVyIGjDpWxscGxhdHNlcicsXG4gICAgJ3N0b3AtbmVhci15b3UtY2l0eWJpa2UnOiAnU8O2ayBzdGFkc2N5a2Vsc3RhdGlvbmVyJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1yYWlsJzogJ1PDtmsgbsOkcnTDpWdlciBlbGxlciBzdGF0aW9uZXInLFxuICAgICdzdG9wLW5lYXIteW91LXN1YndheSc6ICdTw7ZrIG1ldHJvbGluamVyIGVsbGVyIHN0YXRpb25lcicsXG4gICAgJ3N0b3AtbmVhci15b3UtdHJhbSc6ICdTw7ZrIHNww6VydmFnbmxpbmplciBlbGxlciBow6VsbHBsYXRzZXInLFxuICAgICdzdG9wLXJvdXRlLXN0YXRpb24nOiAnQnVzcyBvY2ggc3RvcHAgc8O2a25pbmdlbicsXG4gICAgJ3RvZGF5LWF0JzogJ2kgZGFnIGtsJyxcbiAgICAndG9tb3Jyb3ctYXQnOiAnaSBtb3Jnb24nLFxuICAgIHRyYW06ICdTcMOlcnZhZ24nLFxuICAgIHRyYWNrOiAnU3DDpXInLFxuICAgICd1c2Utb3duLXBvc2l0aW9uJzogJ0FudsOkbmQgbWluIHBvc2l0aW9uJyxcbiAgICAnc2VsZWN0LWZyb20tbWFwJzogJ1bDpGxqIHBvc2l0aW9uIGZyw6VuIGthcnRhbicsXG4gICAgJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnOiAnVsOkbGogZnLDpW4gZWduYSBwbGF0c2VyJyxcbiAgICB2ZW51ZTogJ03DtnRlc3BsYXRzJyxcbiAgICAndmlhLXBvaW50JzogJ1ZpYSBwdW5rdCcsXG4gICAgd2hlcmU6ICdWYXJ0IHZpbGwgZHUgw6VrYT8nLFxuICAgIHBsYWNlOiAnUGxhdHMnLFxuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgdHJhbnNsYXRpb25zO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEZpbm5pc2ggW2ZpXVxuLy8hIGF1dGhvciA6IFRhcm1vIEFpZGFudGF1c3RhIDogaHR0cHM6Ly9naXRodWIuY29tL2JsZWFkb2ZcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBudW1iZXJzUGFzdCA9ICdub2xsYSB5a3NpIGtha3NpIGtvbG1lIG5lbGrDpCB2aWlzaSBrdXVzaSBzZWl0c2Vtw6RuIGthaGRla3NhbiB5aGRla3PDpG4nLnNwbGl0KFxuICAgICAgICAgICAgJyAnXG4gICAgICAgICksXG4gICAgICAgIG51bWJlcnNGdXR1cmUgPSBbXG4gICAgICAgICAgICAnbm9sbGEnLFxuICAgICAgICAgICAgJ3loZGVuJyxcbiAgICAgICAgICAgICdrYWhkZW4nLFxuICAgICAgICAgICAgJ2tvbG1lbicsXG4gICAgICAgICAgICAnbmVsasOkbicsXG4gICAgICAgICAgICAndmlpZGVuJyxcbiAgICAgICAgICAgICdrdXVkZW4nLFxuICAgICAgICAgICAgbnVtYmVyc1Bhc3RbN10sXG4gICAgICAgICAgICBudW1iZXJzUGFzdFs4XSxcbiAgICAgICAgICAgIG51bWJlcnNQYXN0WzldLFxuICAgICAgICBdO1xuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ211dXRhbWFuIHNla3VubmluJyA6ICdtdXV0YW1hIHNla3VudGknO1xuICAgICAgICAgICAgY2FzZSAnc3MnOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGlzRnV0dXJlID8gJ3Nla3VubmluJyA6ICdzZWt1bnRpYSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAnbWludXV0aW4nIDogJ21pbnV1dHRpJztcbiAgICAgICAgICAgIGNhc2UgJ21tJzpcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpc0Z1dHVyZSA/ICdtaW51dXRpbicgOiAnbWludXV0dGlhJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2gnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc0Z1dHVyZSA/ICd0dW5uaW4nIDogJ3R1bnRpJztcbiAgICAgICAgICAgIGNhc2UgJ2hoJzpcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpc0Z1dHVyZSA/ICd0dW5uaW4nIDogJ3R1bnRpYSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAncMOkaXbDpG4nIDogJ3DDpGl2w6QnO1xuICAgICAgICAgICAgY2FzZSAnZGQnOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGlzRnV0dXJlID8gJ3DDpGl2w6RuJyA6ICdww6RpdsOkw6QnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ2t1dWthdWRlbicgOiAna3V1a2F1c2knO1xuICAgICAgICAgICAgY2FzZSAnTU0nOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGlzRnV0dXJlID8gJ2t1dWthdWRlbicgOiAna3V1a2F1dHRhJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3knOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc0Z1dHVyZSA/ICd2dW9kZW4nIDogJ3Z1b3NpJztcbiAgICAgICAgICAgIGNhc2UgJ3l5JzpcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpc0Z1dHVyZSA/ICd2dW9kZW4nIDogJ3Z1b3R0YSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gdmVyYmFsTnVtYmVyKG51bWJlciwgaXNGdXR1cmUpICsgJyAnICsgcmVzdWx0O1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBmdW5jdGlvbiB2ZXJiYWxOdW1iZXIobnVtYmVyLCBpc0Z1dHVyZSkge1xuICAgICAgICByZXR1cm4gbnVtYmVyIDwgMTBcbiAgICAgICAgICAgID8gaXNGdXR1cmVcbiAgICAgICAgICAgICAgICA/IG51bWJlcnNGdXR1cmVbbnVtYmVyXVxuICAgICAgICAgICAgICAgIDogbnVtYmVyc1Bhc3RbbnVtYmVyXVxuICAgICAgICAgICAgOiBudW1iZXI7XG4gICAgfVxuXG4gICAgdmFyIGZpID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZmknLCB7XG4gICAgICAgIG1vbnRoczogJ3RhbW1pa3V1X2hlbG1pa3V1X21hYWxpc2t1dV9odWh0aWt1dV90b3Vrb2t1dV9rZXPDpGt1dV9oZWluw6RrdXVfZWxva3V1X3N5eXNrdXVfbG9rYWt1dV9tYXJyYXNrdXVfam91bHVrdXUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAndGFtbWlfaGVsbWlfbWFhbGlzX2h1aHRpX3RvdWtvX2tlc8OkX2hlaW7DpF9lbG9fc3l5c19sb2thX21hcnJhc19qb3VsdScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICdzdW5udW50YWlfbWFhbmFudGFpX3RpaXN0YWlfa2Vza2l2aWlra29fdG9yc3RhaV9wZXJqYW50YWlfbGF1YW50YWknLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdzdV9tYV90aV9rZV90b19wZV9sYScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdzdV9tYV90aV9rZV90b19wZV9sYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEgubW0nLFxuICAgICAgICAgICAgTFRTOiAnSEgubW0uc3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEbyBNTU1NW3RhXSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0RvIE1NTU1bdGFdIFlZWVksIFtrbG9dIEhILm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEbyBNTU1NW3RhXSBZWVlZLCBba2xvXSBISC5tbScsXG4gICAgICAgICAgICBsOiAnRC5NLllZWVknLFxuICAgICAgICAgICAgbGw6ICdEbyBNTU0gWVlZWScsXG4gICAgICAgICAgICBsbGw6ICdEbyBNTU0gWVlZWSwgW2tsb10gSEgubW0nLFxuICAgICAgICAgICAgbGxsbDogJ2RkZCwgRG8gTU1NIFlZWVksIFtrbG9dIEhILm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbdMOkbsOkw6RuXSBba2xvXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW2h1b21lbm5hXSBba2xvXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2tsb10gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tlaWxlbl0gW2tsb10gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbdmlpbWVdIGRkZGRbbmFdIFtrbG9dIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMgcMOkw6RzdMOkJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBzaXR0ZW4nLFxuICAgICAgICAgICAgczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgc3M6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1tOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE1NOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5OiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5eTogdHJhbnNsYXRlLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZpO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFN3ZWRpc2ggW3N2XVxuLy8hIGF1dGhvciA6IEplbnMgQWxtIDogaHR0cHM6Ly9naXRodWIuY29tL3VsbXVzXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3YgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdzdicsIHtcbiAgICAgICAgbW9udGhzOiAnamFudWFyaV9mZWJydWFyaV9tYXJzX2FwcmlsX21hal9qdW5pX2p1bGlfYXVndXN0aV9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdqYW5fZmViX21hcl9hcHJfbWFqX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlYycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdzw7ZuZGFnX23DpW5kYWdfdGlzZGFnX29uc2RhZ190b3JzZGFnX2ZyZWRhZ19sw7ZyZGFnJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnc8O2bl9tw6VuX3Rpc19vbnNfdG9yX2ZyZV9sw7ZyJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ3PDtl9tw6VfdGlfb25fdG9fZnJfbMO2Jy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnWVlZWS1NTS1ERCcsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIFtrbC5dIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIFtrbC5dIEhIOm1tJyxcbiAgICAgICAgICAgIGxsbDogJ0QgTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgbGxsbDogJ2RkZCBEIE1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbSWRhZ10gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tJbW9yZ29uXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0lnw6VyXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ1tQw6VdIGRkZGQgTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbSV0gZGRkZFtzXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ29tICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdmw7ZyICVzIHNlZGFuJyxcbiAgICAgICAgICAgIHM6ICduw6VncmEgc2VrdW5kZXInLFxuICAgICAgICAgICAgc3M6ICclZCBzZWt1bmRlcicsXG4gICAgICAgICAgICBtOiAnZW4gbWludXQnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dGVyJyxcbiAgICAgICAgICAgIGg6ICdlbiB0aW1tZScsXG4gICAgICAgICAgICBoaDogJyVkIHRpbW1hcicsXG4gICAgICAgICAgICBkOiAnZW4gZGFnJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGFnYXInLFxuICAgICAgICAgICAgTTogJ2VuIG3DpW5hZCcsXG4gICAgICAgICAgICBNTTogJyVkIG3DpW5hZGVyJyxcbiAgICAgICAgICAgIHk6ICdldHQgw6VyJyxcbiAgICAgICAgICAgIHl5OiAnJWQgw6VyJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KFxcOmV8XFw6YSkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIH5+KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICc6ZSdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnOmEnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJzphJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICc6ZSdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJzplJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBzdjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBHZXJtYW4gW2RlXVxuLy8hIGF1dGhvciA6IGxsdWNocyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9sbHVjaHNcbi8vISBhdXRob3I6IE1lbmVsaW9uIEVsZW5zw7psZTogaHR0cHM6Ly9naXRodWIuY29tL09pcmVcbi8vISBhdXRob3IgOiBNaWtvbGFqIERhZGVsYSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9taWswMWFqXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzUmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgZm9ybWF0ID0ge1xuICAgICAgICAgICAgbTogWydlaW5lIE1pbnV0ZScsICdlaW5lciBNaW51dGUnXSxcbiAgICAgICAgICAgIGg6IFsnZWluZSBTdHVuZGUnLCAnZWluZXIgU3R1bmRlJ10sXG4gICAgICAgICAgICBkOiBbJ2VpbiBUYWcnLCAnZWluZW0gVGFnJ10sXG4gICAgICAgICAgICBkZDogW251bWJlciArICcgVGFnZScsIG51bWJlciArICcgVGFnZW4nXSxcbiAgICAgICAgICAgIHc6IFsnZWluZSBXb2NoZScsICdlaW5lciBXb2NoZSddLFxuICAgICAgICAgICAgTTogWydlaW4gTW9uYXQnLCAnZWluZW0gTW9uYXQnXSxcbiAgICAgICAgICAgIE1NOiBbbnVtYmVyICsgJyBNb25hdGUnLCBudW1iZXIgKyAnIE1vbmF0ZW4nXSxcbiAgICAgICAgICAgIHk6IFsnZWluIEphaHInLCAnZWluZW0gSmFociddLFxuICAgICAgICAgICAgeXk6IFtudW1iZXIgKyAnIEphaHJlJywgbnVtYmVyICsgJyBKYWhyZW4nXSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyBmb3JtYXRba2V5XVswXSA6IGZvcm1hdFtrZXldWzFdO1xuICAgIH1cblxuICAgIHZhciBkZSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2RlJywge1xuICAgICAgICBtb250aHM6ICdKYW51YXJfRmVicnVhcl9Nw6Ryel9BcHJpbF9NYWlfSnVuaV9KdWxpX0F1Z3VzdF9TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXplbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdKYW4uX0ZlYi5fTcOkcnpfQXByLl9NYWlfSnVuaV9KdWxpX0F1Zy5fU2VwLl9Pa3QuX05vdi5fRGV6Licuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICdTb25udGFnX01vbnRhZ19EaWVuc3RhZ19NaXR0d29jaF9Eb25uZXJzdGFnX0ZyZWl0YWdfU2Ftc3RhZycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1NvLl9Nby5fRGkuX01pLl9Eby5fRnIuX1NhLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTb19Nb19EaV9NaV9Eb19Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2hldXRlIHVtXSBMVCBbVWhyXScsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICAgICAgbmV4dERheTogJ1ttb3JnZW4gdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbZ2VzdGVybiB1bV0gTFQgW1Vocl0nLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbbGV0enRlbl0gZGRkZCBbdW1dIExUIFtVaHJdJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgICAgICBwYXN0OiAndm9yICVzJyxcbiAgICAgICAgICAgIHM6ICdlaW4gcGFhciBTZWt1bmRlbicsXG4gICAgICAgICAgICBzczogJyVkIFNla3VuZGVuJyxcbiAgICAgICAgICAgIG06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtbTogJyVkIE1pbnV0ZW4nLFxuICAgICAgICAgICAgaDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGhoOiAnJWQgU3R1bmRlbicsXG4gICAgICAgICAgICBkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB3OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgd3c6ICclZCBXb2NoZW4nLFxuICAgICAgICAgICAgTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIE1NOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHl5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRlO1xuXG59KSkpO1xuIiwiZnVuY3Rpb24gc3R5bGVJbmplY3QoY3NzLCByZWYpIHtcbiAgaWYgKCByZWYgPT09IHZvaWQgMCApIHJlZiA9IHt9O1xuICB2YXIgaW5zZXJ0QXQgPSByZWYuaW5zZXJ0QXQ7XG5cbiAgaWYgKCFjc3MgfHwgdHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm47IH1cblxuICB2YXIgaGVhZCA9IGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcbiAgdmFyIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgc3R5bGUudHlwZSA9ICd0ZXh0L2Nzcyc7XG5cbiAgaWYgKGluc2VydEF0ID09PSAndG9wJykge1xuICAgIGlmIChoZWFkLmZpcnN0Q2hpbGQpIHtcbiAgICAgIGhlYWQuaW5zZXJ0QmVmb3JlKHN0eWxlLCBoZWFkLmZpcnN0Q2hpbGQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gIH1cblxuICBpZiAoc3R5bGUuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgfSBlbHNlIHtcbiAgICBzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBzdHlsZUluamVjdDtcbiIsImltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUVmZmVjdCwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3RNb2RhbCBmcm9tICdyZWFjdC1tb2RhbCc7XG5pbXBvcnQgY3ggZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgSWNvbiBmcm9tICdAZGlnaXRyYW5zaXQtY29tcG9uZW50L2RpZ2l0cmFuc2l0LWNvbXBvbmVudC1pY29uJztcbmltcG9ydCBEaWFsb2dNb2RhbCBmcm9tICdAZGlnaXRyYW5zaXQtY29tcG9uZW50L2RpZ2l0cmFuc2l0LWNvbXBvbmVudC1kaWFsb2ctbW9kYWwnO1xuaW1wb3J0IEF1dG9zdWdnZXN0IGZyb20gJ3JlYWN0LWF1dG9zdWdnZXN0JztcbmltcG9ydCBtb2JpbGVTdHlsZXMgZnJvbSAnLi9Nb2JpbGVTZWFyY2guc2Nzcyc7XG5pbXBvcnQgbW9iaWxlTm9TY3JvbGxTdHlsZXMgZnJvbSAnLi9Nb2JpbGVOb1Njcm9sbC5zY3NzJztcblxuY2xhc3MgQXV0b3N1Z2dlc3RQYXRjaCBleHRlbmRzIEF1dG9zdWdnZXN0IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgc2VsZi5vblN1Z2dlc3Rpb25Ub3VjaE1vdmUgPSAoKSA9PiB7XG4gICAgICBzZWxmLmp1c3RTZWxlY3RlZFN1Z2dlc3Rpb24gPSBmYWxzZTtcbiAgICAgIHNlbGYucHJlc3NlZFN1Z2dlc3Rpb24gPSBudWxsO1xuICAgIH07XG4gIH1cbn1cblxuY29uc3QgTW9iaWxlU2VhcmNoID0gKHtcbiAgYXBwRWxlbWVudCxcbiAgaWQsXG4gIGNsb3NlSGFuZGxlLFxuICBjbGVhcklucHV0LFxuICB2YWx1ZSxcbiAgc3VnZ2VzdGlvbnMsXG4gIGlucHV0UHJvcHMsXG4gIGZldGNoRnVuY3Rpb24sXG4gIHJlbmRlclN1Z2dlc3Rpb24sXG4gIGdldFN1Z2dlc3Rpb25WYWx1ZSxcbiAgYXJpYUxhYmVsLFxuICBsYWJlbCxcbiAgb25TdWdnZXN0aW9uU2VsZWN0ZWQsXG4gIGNsZWFyT2xkU2VhcmNoZXMsXG4gIGRpYWxvZ0hlYWRlclRleHQsXG4gIGRpYWxvZ1ByaW1hcnlCdXR0b25UZXh0LFxuICBkaWFsb2dTZWNvbmRhcnlCdXR0b25UZXh0LFxuICBjbGVhcklucHV0QnV0dG9uVGV4dCxcbiAgZm9jdXNJbnB1dCxcbiAgY29sb3IsXG4gIGhvdmVyQ29sb3IsXG4gIGFjY2Vzc2libGVQcmltYXJ5Q29sb3IsXG4gIHNlYXJjaE9wZW4sXG4gIGZvbnRXZWlnaHRzLFxuICBzaG93U2Nyb2xsLFxufSkgPT4ge1xuICBjb25zdCBzdHlsZXMgPSBzaG93U2Nyb2xsID8gbW9iaWxlU3R5bGVzIDogbW9iaWxlTm9TY3JvbGxTdHlsZXM7XG5cbiAgY29uc3QgaW5wdXRJZCA9IGAke2lkfS1pbnB1dGA7XG4gIGNvbnN0IGxhYmVsSWQgPSBgJHtpZH0tbGFiZWxgO1xuXG4gIGNvbnN0IFtpc0RpYWxvZ09wZW4sIHNldERpYWxvZ09wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBpbnB1dFJlZiA9IFJlYWN0LnVzZVJlZigpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgUmVhY3RNb2RhbC5zZXRBcHBFbGVtZW50KGFwcEVsZW1lbnQpO1xuICB9LCBbXSk7XG5cbiAgY29uc3Qgb25DbG9zZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjbG9zZUhhbmRsZSgpO1xuICB9KTtcblxuICBjb25zdCBvblNlbGVjdCA9IChlLCByZWYpID0+IHtcbiAgICBpZiAocmVmLnN1Z2dlc3Rpb24udHlwZSA9PT0gJ2NsZWFyLXNlYXJjaC1oaXN0b3J5Jykge1xuICAgICAgc2V0RGlhbG9nT3Blbih0cnVlKTtcbiAgICB9IGVsc2UgaWYgKCFyZWYuc3VnZ2VzdGlvbi5wcm9wZXJ0aWVzLmFycm93Q2xpY2tlZCkge1xuICAgICAgLy8gU2VsZWN0IGl0ZW0gaWYgZmlsbCBpbnB1dCBidXR0b24gaXMgbm90IHByZXNzZWQgKGRpYWdvbmFsIGFycm93IGluIHN1Z2dlc3Rpb24gaXRlbXMpXG4gICAgICBvblN1Z2dlc3Rpb25TZWxlY3RlZChlLCByZWYpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQgPSBldmVudCA9PiB7XG4gICAgY29uc3Qgc3BhY2UgPSBbMTMsICcgJywgJ1NwYWNlYmFyJ107XG4gICAgY29uc3QgZW50ZXIgPSBbMzIsICdFbnRlciddO1xuICAgIGNvbnN0IGtleSA9IChldmVudCAmJiAoZXZlbnQua2V5IHx8IGV2ZW50LndoaWNoIHx8IGV2ZW50LmtleUNvZGUpKSB8fCAnJztcblxuICAgIGlmICgha2V5IHx8ICFzcGFjZS5jb25jYXQoZW50ZXIpLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICBjb25zdCBnZXRWYWx1ZSA9IHN1Z2dlc3Rpb24gPT4ge1xuICAgIGlmIChzdWdnZXN0aW9uLnR5cGUgPT09ICdjbGVhci1zZWFyY2gtaGlzdG9yeScpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIGdldFN1Z2dlc3Rpb25WYWx1ZShzdWdnZXN0aW9uKTtcbiAgfTtcblxuICBjb25zdCByZW5kZXJJdGVtID0gaXRlbSA9PiB7XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ2NsZWFyLXNlYXJjaC1oaXN0b3J5Jykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPXtzdHlsZXNbJ2NsZWFyLXNlYXJjaC1oaXN0b3J5J119PlxuICAgICAgICAgIHtpdGVtLmxhYmVsSWR9XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlbmRlclN1Z2dlc3Rpb24oaXRlbSk7XG4gIH07XG5cbiAgY29uc3QgcmVuZGVyRGlhbG9nTW9kYWwgPSAoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxEaWFsb2dNb2RhbFxuICAgICAgICBhcHBFbGVtZW50PXthcHBFbGVtZW50fVxuICAgICAgICBpc01vZGFsT3Blbj17aXNEaWFsb2dPcGVufVxuICAgICAgICBoYW5kbGVDbG9zZT17KCkgPT4gc2V0RGlhbG9nT3BlbihmYWxzZSl9XG4gICAgICAgIGhlYWRlclRleHQ9e2RpYWxvZ0hlYWRlclRleHR9XG4gICAgICAgIHByaW1hcnlCdXR0b25UZXh0PXtkaWFsb2dQcmltYXJ5QnV0dG9uVGV4dH1cbiAgICAgICAgc2Vjb25kYXJ5QnV0dG9uVGV4dD17ZGlhbG9nU2Vjb25kYXJ5QnV0dG9uVGV4dH1cbiAgICAgICAgcHJpbWFyeUJ1dHRvbk9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICBjbGVhck9sZFNlYXJjaGVzKCk7XG4gICAgICAgICAgc2V0RGlhbG9nT3BlbihmYWxzZSk7XG4gICAgICAgIH19XG4gICAgICAgIHNlY29uZGFyeUJ1dHRvbk9uQ2xpY2s9eygpID0+IHNldERpYWxvZ09wZW4oZmFsc2UpfVxuICAgICAgICBjb2xvcj17Y29sb3J9XG4gICAgICAgIGhvdmVyQ29sb3I9e2hvdmVyQ29sb3J9XG4gICAgICAgIGZvbnRXZWlnaHRzPXtmb250V2VpZ2h0c31cbiAgICAgIC8+XG4gICAgKTtcbiAgfTtcblxuICBjb25zdCBjbGVhckJ1dHRvbiA9ICgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ2NsZWFyLWlucHV0J119XG4gICAgICAgIG9uQ2xpY2s9e2NsZWFySW5wdXR9XG4gICAgICAgIG9uS2V5RG93bj17ZSA9PiBpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQoZSkgJiYgY2xlYXJJbnB1dCgpfVxuICAgICAgICBhcmlhLWxhYmVsPXtjbGVhcklucHV0QnV0dG9uVGV4dH1cbiAgICAgID5cbiAgICAgICAgPEljb24gaW1nPVwiY2xvc2VcIiBjb2xvcj17Y29sb3J9IC8+XG4gICAgICA8L2J1dHRvbj5cbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IHJlbmRlckNvbnRlbnQgPSAoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ2NvbWJvYm94LWNvbnRhaW5lciddfSBodG1sRm9yPXtpbnB1dElkfT5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydjb21ib2JveC1pY29uJ119XG4gICAgICAgICAgb25DbGljaz17KCkgPT4gb25DbG9zZSgpfVxuICAgICAgICAgIG9uS2V5RG93bj17ZSA9PiBpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQoZSkgJiYgb25DbG9zZSgpfVxuICAgICAgICAgIGFyaWEtbGFiZWw9e2RpYWxvZ1NlY29uZGFyeUJ1dHRvblRleHR9XG4gICAgICAgICAgdGFiSW5kZXg9ezB9XG4gICAgICAgID5cbiAgICAgICAgICA8SWNvbiBpbWc9XCJhcnJvd1wiIC8+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlc1sncmlnaHQtY29sdW1uJ119PlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzWydjb21ib2JveC1sYWJlbCddfSBpZD17bGFiZWxJZH0+XG4gICAgICAgICAgICB7bGFiZWx9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxBdXRvc3VnZ2VzdFBhdGNoXG4gICAgICAgICAgICBhbHdheXNSZW5kZXJTdWdnZXN0aW9uc1xuICAgICAgICAgICAgaWQ9e2lkfVxuICAgICAgICAgICAgc3VnZ2VzdGlvbnM9e3N1Z2dlc3Rpb25zfVxuICAgICAgICAgICAgb25TdWdnZXN0aW9uc0ZldGNoUmVxdWVzdGVkPXtmZXRjaEZ1bmN0aW9ufVxuICAgICAgICAgICAgZ2V0U3VnZ2VzdGlvblZhbHVlPXtnZXRWYWx1ZX1cbiAgICAgICAgICAgIHJlbmRlclN1Z2dlc3Rpb249e3JlbmRlckl0ZW19XG4gICAgICAgICAgICAvLyBmb2N1c0lucHV0T25TdWdnZXN0aW9uQ2xpY2sgbXVzdCBiZSBzZXQgdG8gdHJ1ZS5cbiAgICAgICAgICAgIC8vIElmIHNldCB0byBmYWxzZSwgaW5wdXQgd29uJ3QgYmUgZm9jdXNlZCB3aGVuIHVzZXIgY2xpY2tzIG9uXG4gICAgICAgICAgICAvLyBGaWxsIGlucHV0IGJ1dHRvbiBpbiBzdWdnZXN0aW9uIGxpc3QuIChkaWFnb25hbCBhcnJvdyBpbiBzdHJlZXQgbmFtZSBpdGVtcylcbiAgICAgICAgICAgIGZvY3VzSW5wdXRPblN1Z2dlc3Rpb25DbGlja1xuICAgICAgICAgICAgc2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnM9eygpID0+IHRydWV9XG4gICAgICAgICAgICBpbnB1dFByb3BzPXt7XG4gICAgICAgICAgICAgIC4uLmlucHV0UHJvcHMsXG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogY3goXG4gICAgICAgICAgICAgICAgYCR7c3R5bGVzLmlucHV0fSAke3N0eWxlc1tpZF0gfHwgJyd9ICR7XG4gICAgICAgICAgICAgICAgICBpbnB1dFByb3BzLnZhbHVlID8gc3R5bGVzLmhhc1ZhbHVlIDogJydcbiAgICAgICAgICAgICAgICB9YCxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgYXV0b0ZvY3VzOiB0cnVlLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHJlbmRlcklucHV0Q29tcG9uZW50PXtwID0+IChcbiAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgYXJpYS1sYWJlbD17YXJpYUxhYmVsfSBpZD17aWR9IHsuLi5wfSAvPlxuICAgICAgICAgICAgICAgIHt2YWx1ZSAmJiBjbGVhckJ1dHRvbigpfVxuICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB0aGVtZT17c3R5bGVzfVxuICAgICAgICAgICAgb25TdWdnZXN0aW9uU2VsZWN0ZWQ9e29uU2VsZWN0fVxuICAgICAgICAgICAgcmVmPXtpbnB1dFJlZn1cbiAgICAgICAgICAvPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9O1xuICBpZiAoZm9jdXNJbnB1dCAmJiBpbnB1dFJlZi5jdXJyZW50Py5pbnB1dCkge1xuICAgIGlucHV0UmVmLmN1cnJlbnQuaW5wdXQuZm9jdXMoKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFJlYWN0TW9kYWxcbiAgICAgIGlzT3Blbj17c2VhcmNoT3Blbn1cbiAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydtb2JpbGUtbW9kYWwnXX1cbiAgICAgIG92ZXJsYXlDbGFzc05hbWU9e3N0eWxlc1snbW9iaWxlLW1vZGFsLW92ZXJsYXknXX1cbiAgICAgIG9uQWZ0ZXJDbG9zZT17b25DbG9zZX1cbiAgICAgIHNob3VsZENsb3NlT25Fc2NcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydtb2JpbGUtbW9kYWwtY29udGVudCddfVxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICctLWNvbG9yJzogYCR7Y29sb3J9YCxcbiAgICAgICAgICAnLS1hY2Nlc3NpYmxlLXByaW1hcnktY29sb3InOiBhY2Nlc3NpYmxlUHJpbWFyeUNvbG9yLFxuICAgICAgICAgICctLWhvdmVyLWNvbG9yJzogYCR7aG92ZXJDb2xvcn1gLFxuICAgICAgICAgICctLWZvbnQtd2VpZ2h0LW1lZGl1bSc6IGZvbnRXZWlnaHRzLm1lZGl1bSxcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge3JlbmRlckNvbnRlbnQoKX1cbiAgICAgICAge3JlbmRlckRpYWxvZ01vZGFsKCl9XG4gICAgICA8L2Rpdj5cbiAgICA8L1JlYWN0TW9kYWw+XG4gICk7XG59O1xuXG5Nb2JpbGVTZWFyY2gucHJvcFR5cGVzID0ge1xuICBhcHBFbGVtZW50OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGNsb3NlSGFuZGxlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBjbGVhcklucHV0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgY2xlYXJJbnB1dEJ1dHRvblRleHQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgc3VnZ2VzdGlvbnM6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICBpbnB1dFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIH0pLmlzUmVxdWlyZWQsXG4gIGZldGNoRnVuY3Rpb246IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGdldFN1Z2dlc3Rpb25WYWx1ZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgcmVuZGVyU3VnZ2VzdGlvbjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25TdWdnZXN0aW9uU2VsZWN0ZWQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGNsZWFyT2xkU2VhcmNoZXM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGFyaWFMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgZGlhbG9nSGVhZGVyVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgZGlhbG9nUHJpbWFyeUJ1dHRvblRleHQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGRpYWxvZ1NlY29uZGFyeUJ1dHRvblRleHQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGZvY3VzSW5wdXQ6IFByb3BUeXBlcy5ib29sLFxuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgaG92ZXJDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgYWNjZXNzaWJsZVByaW1hcnlDb2xvcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBzZWFyY2hPcGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBmb250V2VpZ2h0czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBtZWRpdW06IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgfSkuaXNSZXF1aXJlZCxcbiAgc2hvd1Njcm9sbDogUHJvcFR5cGVzLmJvb2wsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBNb2JpbGVTZWFyY2g7XG4iLCIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXCJyZWFjdFwiXSwgZmFjdG9yeSk7XG5cdGVsc2Uge1xuXHRcdHZhciBhID0gdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnID8gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIikpIDogZmFjdG9yeShyb290W1wicmVhY3RcIl0pO1xuXHRcdGZvcih2YXIgaSBpbiBhKSAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnID8gZXhwb3J0cyA6IHJvb3QpW2ldID0gYVtpXTtcblx0fVxufSkodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHRoaXMsIGZ1bmN0aW9uKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfcmVhY3RfXykge1xucmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4vKioqKioqLyBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4vKioqKioqLyBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuLyoqKioqKi8gXHRcdHJldHVybiBucztcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3BhY2thZ2VzL2hvb2tzL3NyYy9pbmRleC50c1wiKTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKHtcblxuLyoqKi8gXCIuL3BhY2thZ2VzL2hvb2tzL3NyYy9pbmRleC50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3BhY2thZ2VzL2hvb2tzL3NyYy9pbmRleC50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX2V4cG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9fZXhwb3J0U3RhcikgfHwgZnVuY3Rpb24obSwgZXhwb3J0cykge1xuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXhwb3J0cywgcCkpIF9fY3JlYXRlQmluZGluZyhleHBvcnRzLCBtLCBwKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5fX2V4cG9ydFN0YXIoX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi91c2VPdXRzaWRlUmVhY3RlciAqLyBcIi4vcGFja2FnZXMvaG9va3Mvc3JjL3VzZU91dHNpZGVSZWFjdGVyLnRzeFwiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIoX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi91c2VTY3JvbGxMb2NrICovIFwiLi9wYWNrYWdlcy9ob29rcy9zcmMvdXNlU2Nyb2xsTG9jay50c1wiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIoX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi91c2VBcnJvd05hdmlnYXRpb24gKi8gXCIuL3BhY2thZ2VzL2hvb2tzL3NyYy91c2VBcnJvd05hdmlnYXRpb24udHN4XCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3VzZUludGVyc2VjdGlvbk9ic2VydmVyICovIFwiLi9wYWNrYWdlcy9ob29rcy9zcmMvdXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIudHNcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdXNlSXNCcmVha3BvaW50ICovIFwiLi9wYWNrYWdlcy9ob29rcy9zcmMvdXNlSXNCcmVha3BvaW50LnRzXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3VzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QgKi8gXCIuL3BhY2thZ2VzL2hvb2tzL3NyYy91c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0LnRzXCIpLCBleHBvcnRzKTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3BhY2thZ2VzL2hvb2tzL3NyYy91c2VBcnJvd05hdmlnYXRpb24udHN4XCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9wYWNrYWdlcy9ob29rcy9zcmMvdXNlQXJyb3dOYXZpZ2F0aW9uLnRzeCAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnVzZUFycm93TmF2aWdhdGlvbiA9IHZvaWQgMDtcbnZhciByZWFjdF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgcmVhY3QgKi8gXCJyZWFjdFwiKTtcbnZhciB1c2VBcnJvd05hdmlnYXRpb24gPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgbGlzdEl0ZW1zID0gX2EubGlzdEl0ZW1zLCBvbkFycm93VXBPckRvd24gPSBfYS5vbkFycm93VXBPckRvd247XG4gICAgdmFyIF9iID0gKDAsIHJlYWN0XzEudXNlU3RhdGUpKDApLCBzZWxlY3RlZEluZGV4ID0gX2JbMF0sIHNldFNlbGVjdGVkSW5kZXggPSBfYlsxXTtcbiAgICB2YXIgc2V0U2VsZWN0ZWRJbmRleFdpdGhVc2VDYWxsYmFjayA9ICgwLCByZWFjdF8xLnVzZUNhbGxiYWNrKShmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgc2V0U2VsZWN0ZWRJbmRleChpbmRleCk7XG4gICAgfSwgW2xpc3RJdGVtc10pO1xuICAgIHZhciBoYW5kbGVVcEFycm93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoc2VsZWN0ZWRJbmRleCA+IDApIHtcbiAgICAgICAgICAgIHNldFNlbGVjdGVkSW5kZXhXaXRoVXNlQ2FsbGJhY2soc2VsZWN0ZWRJbmRleCAtIDEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2V0U2VsZWN0ZWRJbmRleFdpdGhVc2VDYWxsYmFjayhsaXN0SXRlbXMubGVuZ3RoIC0gMSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHZhciBoYW5kbGVEb3duQXJyb3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChzZWxlY3RlZEluZGV4IDwgbGlzdEl0ZW1zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIHNldFNlbGVjdGVkSW5kZXhXaXRoVXNlQ2FsbGJhY2soc2VsZWN0ZWRJbmRleCArIDEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2V0U2VsZWN0ZWRJbmRleFdpdGhVc2VDYWxsYmFjaygwKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdmFyIGhhbmRsZUtleURvd24gPSBmdW5jdGlvbiAoa2V5Ym9hcmRFdmVudCkge1xuICAgICAgICB2YXIga2V5ID0ga2V5Ym9hcmRFdmVudC5rZXk7XG4gICAgICAgIGlmIChsaXN0SXRlbXMgPT09IG51bGwgfHwgbGlzdEl0ZW1zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBsaXN0SXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgICAgICAgICAgICBvbkFycm93VXBPckRvd24gJiYgb25BcnJvd1VwT3JEb3duKCk7XG4gICAgICAgICAgICAgICAga2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGhhbmRsZVVwQXJyb3coKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgICAgICAgICAgICBvbkFycm93VXBPckRvd24gJiYgb25BcnJvd1VwT3JEb3duKCk7XG4gICAgICAgICAgICAgICAga2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGhhbmRsZURvd25BcnJvdygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAoMCwgcmVhY3RfMS51c2VFZmZlY3QpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVLZXlEb3duKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlS2V5RG93bik7IH07XG4gICAgfSk7XG4gICAgKDAsIHJlYWN0XzEudXNlRWZmZWN0KShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNldFNlbGVjdGVkSW5kZXhXaXRoVXNlQ2FsbGJhY2soMCk7XG4gICAgfSwgW2xpc3RJdGVtc10pO1xuICAgIHJldHVybiB7IHNlbGVjdGVkSW5kZXg6IHNlbGVjdGVkSW5kZXggfTtcbn07XG5leHBvcnRzLnVzZUFycm93TmF2aWdhdGlvbiA9IHVzZUFycm93TmF2aWdhdGlvbjtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3BhY2thZ2VzL2hvb2tzL3NyYy91c2VJbnRlcnNlY3Rpb25PYnNlcnZlci50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3BhY2thZ2VzL2hvb2tzL3NyYy91c2VJbnRlcnNlY3Rpb25PYnNlcnZlci50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy51c2VJbnRlcnNlY3Rpb25PYnNlcnZlciA9IHZvaWQgMDtcbnZhciByZWFjdF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgcmVhY3QgKi8gXCJyZWFjdFwiKTtcbnZhciB1c2VJbnRlcnNlY3Rpb25PYnNlcnZlciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGNvbnRhaW5lclJlZiA9ICgwLCByZWFjdF8xLnVzZVJlZikobnVsbCk7XG4gICAgdmFyIF9hID0gKDAsIHJlYWN0XzEudXNlU3RhdGUpKGZhbHNlKSwgaXNWaXNpYmxlID0gX2FbMF0sIHNldElzVmlzaWJsZSA9IF9hWzFdO1xuICAgIHZhciBoYW5kbGVJbnRlcnNlY3Rpb24gPSBmdW5jdGlvbiAoZW50cmllcykge1xuICAgICAgICB2YXIgZW50cnkgPSBlbnRyaWVzWzBdO1xuICAgICAgICBzZXRJc1Zpc2libGUoZW50cnkuaXNJbnRlcnNlY3RpbmcpO1xuICAgIH07XG4gICAgKDAsIHJlYWN0XzEudXNlRWZmZWN0KShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh3aW5kb3cgJiYgd2luZG93LkludGVyc2VjdGlvbk9ic2VydmVyKSB7XG4gICAgICAgICAgICB2YXIgb2JzZXJ2ZXJfMSA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihoYW5kbGVJbnRlcnNlY3Rpb24sIG9wdGlvbnMpO1xuICAgICAgICAgICAgdmFyIGVsZW1lbnRfMSA9IGNvbnRhaW5lclJlZi5jdXJyZW50O1xuICAgICAgICAgICAgaWYgKGNvbnRhaW5lclJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXJfMS5vYnNlcnZlKGNvbnRhaW5lclJlZi5jdXJyZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRfMSkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcl8xLnVub2JzZXJ2ZShlbGVtZW50XzEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzZXRJc1Zpc2libGUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgfSwgW2NvbnRhaW5lclJlZiwgb3B0aW9uc10pO1xuICAgIHJldHVybiB7IGNvbnRhaW5lclJlZjogY29udGFpbmVyUmVmLCBpc1Zpc2libGU6IGlzVmlzaWJsZSB9O1xufTtcbmV4cG9ydHMudXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSB1c2VJbnRlcnNlY3Rpb25PYnNlcnZlcjtcbmV4cG9ydHMuZGVmYXVsdCA9IGV4cG9ydHMudXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXI7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9wYWNrYWdlcy9ob29rcy9zcmMvdXNlSXNCcmVha3BvaW50LnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3BhY2thZ2VzL2hvb2tzL3NyYy91c2VJc0JyZWFrcG9pbnQudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnVzZUlzQnJlYWtwb2ludCA9IHZvaWQgMDtcbnZhciByZWFjdF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgcmVhY3QgKi8gXCJyZWFjdFwiKTtcbnZhciBicmVha3BvaW50cyA9IHtcbiAgICB4czogMSxcbiAgICBtb2JpbGVTbWFsbDogMzIwLFxuICAgIG1vYmlsZTogMzc1LFxuICAgIHRhYmxldDogNzY4LFxuICAgIHRhYmxldExhcmdlOiA5MjAsXG4gICAgZGVza3RvcFNtYWxsOiAxMDI0LFxuICAgIGRlc2t0b3A6IDEyNjAsXG4gICAgZGVza3RvcExhcmdlOiAxNDQwXG59O1xudmFyIHVzZUlzQnJlYWtwb2ludCA9IGZ1bmN0aW9uIChicmVha3BvaW50KSB7XG4gICAgdmFyIF9hID0gKDAsIHJlYWN0XzEudXNlU3RhdGUpKG51bGwpLCBzY3JlZW5XaWR0aCA9IF9hWzBdLCBzZXRTY3JlZW5XaWR0aCA9IF9hWzFdO1xuICAgIHZhciBoYW5kbGVSZXNpemUgPSAoMCwgcmVhY3RfMS51c2VDYWxsYmFjaykoZnVuY3Rpb24gKCkge1xuICAgICAgICBzZXRTY3JlZW5XaWR0aCh3aW5kb3cuaW5uZXJXaWR0aCk7XG4gICAgfSwgW10pO1xuICAgICgwLCByZWFjdF8xLnVzZUVmZmVjdCkoZnVuY3Rpb24gKCkge1xuICAgICAgICBoYW5kbGVSZXNpemUoKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIH0sIFtdKTtcbiAgICAoMCwgcmVhY3RfMS51c2VFZmZlY3QpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZVJlc2l6ZSwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZVJlc2l6ZSk7IH07XG4gICAgfSwgW2hhbmRsZVJlc2l6ZSwgc2NyZWVuV2lkdGhdKTtcbiAgICByZXR1cm4gc2NyZWVuV2lkdGggPj0gYnJlYWtwb2ludHNbYnJlYWtwb2ludF07XG59O1xuZXhwb3J0cy51c2VJc0JyZWFrcG9pbnQgPSB1c2VJc0JyZWFrcG9pbnQ7XG5leHBvcnRzLmRlZmF1bHQgPSBleHBvcnRzLnVzZUlzQnJlYWtwb2ludDtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3BhY2thZ2VzL2hvb2tzL3NyYy91c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0LnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9wYWNrYWdlcy9ob29rcy9zcmMvdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdC50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QgPSB2b2lkIDA7XG52YXIgcmVhY3RfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHJlYWN0ICovIFwicmVhY3RcIik7XG5leHBvcnRzLnVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHJlYWN0XzEudXNlTGF5b3V0RWZmZWN0IDogcmVhY3RfMS51c2VFZmZlY3Q7XG5leHBvcnRzLmRlZmF1bHQgPSBleHBvcnRzLnVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3Q7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9wYWNrYWdlcy9ob29rcy9zcmMvdXNlT3V0c2lkZVJlYWN0ZXIudHN4XCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3BhY2thZ2VzL2hvb2tzL3NyYy91c2VPdXRzaWRlUmVhY3Rlci50c3ggKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnVzZU91dHNpZGVSZWFjdGVyID0gdm9pZCAwO1xudmFyIHJlYWN0XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISByZWFjdCAqLyBcInJlYWN0XCIpO1xuLyoqXG4gKiBDYWxscyByZWFjdGVyRnVuY3Rpb24gaWYgdGhlIHVzZXIgY2xpY2tzIG91dHNpZGUgdGhlIGVsZW1lbnQgdGhhdCBoYXMgcmVmIGFzIGEgcmVmZXJlbmNlLlxuICovXG5mdW5jdGlvbiB1c2VPdXRzaWRlUmVhY3RlcihyZWYsIHJlYWN0ZXJGdW5jdGlvbikge1xuICAgIGZ1bmN0aW9uIGhhbmRsZUNsaWNrT3V0c2lkZShldmVudCkge1xuICAgICAgICBpZiAocmVmLmN1cnJlbnQgJiYgIXJlZi5jdXJyZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICAgIHJlYWN0ZXJGdW5jdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuICAgICgwLCByZWFjdF8xLnVzZUVmZmVjdCkoZnVuY3Rpb24gKCkge1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVDbGlja091dHNpZGUpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgaGFuZGxlQ2xpY2tPdXRzaWRlKTtcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbmV4cG9ydHMudXNlT3V0c2lkZVJlYWN0ZXIgPSB1c2VPdXRzaWRlUmVhY3RlcjtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3BhY2thZ2VzL2hvb2tzL3NyYy91c2VTY3JvbGxMb2NrLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9wYWNrYWdlcy9ob29rcy9zcmMvdXNlU2Nyb2xsTG9jay50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnVzZVNjcm9sbExvY2sgPSB2b2lkIDA7XG52YXIgcmVhY3RfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHJlYWN0ICovIFwicmVhY3RcIik7XG4vLyBEaXNhYmxlIGJvZHkgc2Nyb2xsaW5nIHdoZW4gb3ZlcmxheSBpcyB2aXNpYmxlLlxuLy8gUHJhY3RpY2FsIGluIGNvbmp1bmN0aW9uIHdpdGggZS5nLiByZWFjdC1tb2RhbDpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LW1vZGFsL2lzc3Vlcy8xOTFcbnZhciB1c2VTY3JvbGxMb2NrID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBsb2NrID0gKDAsIHJlYWN0XzEudXNlQ2FsbGJhY2spKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHNjcm9sbFkgPSB3aW5kb3cuc2Nyb2xsWSArIFwicHhcIjtcbiAgICAgICAgdmFyIGJvZHkgPSBkb2N1bWVudC5ib2R5O1xuICAgICAgICBib2R5LnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJztcbiAgICAgICAgYm9keS5zdHlsZS50b3AgPSBcIi1cIiArIHNjcm9sbFk7XG4gICAgfSwgW10pO1xuICAgIHZhciB1bmxvY2sgPSAoMCwgcmVhY3RfMS51c2VDYWxsYmFjaykoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYm9keSA9IGRvY3VtZW50LmJvZHk7XG4gICAgICAgIHZhciBzY3JvbGxZID0gYm9keS5zdHlsZS50b3A7XG4gICAgICAgIHZhciBwYXJzZWRTY3JvbGxZID0gcGFyc2VJbnQoc2Nyb2xsWSB8fCAnMCcpICogLTE7XG4gICAgICAgIGJvZHkuc3R5bGUucG9zaXRpb24gPSAnJztcbiAgICAgICAgYm9keS5zdHlsZS50b3AgPSAnJztcbiAgICAgICAgaWYgKHBhcnNlZFNjcm9sbFkpIHtcbiAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCBwYXJzZUludChzY3JvbGxZIHx8ICcwJykgKiAtMSk7XG4gICAgICAgIH1cbiAgICB9LCBbXSk7XG4gICAgcmV0dXJuIHsgbG9jazogbG9jaywgdW5sb2NrOiB1bmxvY2sgfTtcbn07XG5leHBvcnRzLnVzZVNjcm9sbExvY2sgPSB1c2VTY3JvbGxMb2NrO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcInJlYWN0XCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogZXh0ZXJuYWwgXCJyZWFjdFwiICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3JlYWN0X187XG5cbi8qKiovIH0pXG5cbi8qKioqKiovIH0pO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgKi9cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGkxOG5leHQgZnJvbSAnaTE4bmV4dCc7XG5pbXBvcnQgY3ggZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgQXV0b3N1Z2dlc3QgZnJvbSAncmVhY3QtYXV0b3N1Z2dlc3QnO1xuaW1wb3J0IHsgZXhlY3V0ZVNlYXJjaCB9IGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1leGVjdXRlLXNlYXJjaC1pbW1pZGlhdGUnO1xuaW1wb3J0IFN1Z2dlc3Rpb25JdGVtIGZyb20gJ0BkaWdpdHJhbnNpdC1jb21wb25lbnQvZGlnaXRyYW5zaXQtY29tcG9uZW50LXN1Z2dlc3Rpb24taXRlbSc7XG5pbXBvcnQge1xuICBnZXROYW1lTGFiZWwsXG4gIGdldFN0b3BDb2RlLFxufSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtdW5pcS1ieS1sYWJlbCc7XG5pbXBvcnQgeyBnZXRTdG9wTmFtZSB9IGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1oZWxwZXJzJztcbmltcG9ydCBnZXRMYWJlbCBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWxhYmVsJztcbmltcG9ydCBJY29uIGZyb20gJ0BkaWdpdHJhbnNpdC1jb21wb25lbnQvZGlnaXRyYW5zaXQtY29tcG9uZW50LWljb24nO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQtdGltZXpvbmUnO1xuaW1wb3J0ICdtb21lbnQvbG9jYWxlL2ZpJztcbmltcG9ydCAnbW9tZW50L2xvY2FsZS9zdic7XG5pbXBvcnQgJ21vbWVudC9sb2NhbGUvZGUnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoL2lzRXF1YWwnO1xuaW1wb3J0IGlzRW1wdHkgZnJvbSAnbG9kYXNoL2lzRW1wdHknO1xuaW1wb3J0IHRyYW5zbGF0aW9ucyBmcm9tICcuL2hlbHBlcnMvdHJhbnNsYXRpb25zJztcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9oZWxwZXJzL3N0eWxlcy5zY3NzJztcbmltcG9ydCBNb2JpbGVTZWFyY2ggZnJvbSAnLi9oZWxwZXJzL01vYmlsZVNlYXJjaCc7XG5pbXBvcnQgd2l0aFNjcm9sbExvY2sgZnJvbSAnLi9oZWxwZXJzL3dpdGhTY3JvbGxMb2NrJztcblxubW9tZW50LmxvY2FsZSgnZW4nKTtcblxuaTE4bmV4dC5pbml0KHtcbiAgZmFsbGJhY2tMbmc6ICdmaScsXG4gIGRlZmF1bHROUzogJ3RyYW5zbGF0aW9uJyxcbiAgaW50ZXJwb2xhdGlvbjoge1xuICAgIGVzY2FwZVZhbHVlOiBmYWxzZSwgLy8gbm90IG5lZWRlZCBmb3IgcmVhY3QgYXMgaXQgZXNjYXBlcyBieSBkZWZhdWx0XG4gIH0sXG59KTtcblxuY29uc3QgTG9hZGluZyA9IHByb3BzID0+IChcbiAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1snc3Bpbm5lci1sb2FkZXInXX0+XG4gICAgeyhwcm9wcyAmJiBwcm9wcy5jaGlsZHJlbikgfHwgKFxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXNbJ3NyLW9ubHknXX0+e2kxOG5leHQudCgnbG9hZGluZycpfTwvc3Bhbj5cbiAgICApfVxuICA8L2Rpdj5cbik7XG5cbkxvYWRpbmcucHJvcFR5cGVzID0ge1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG59O1xuXG5jb25zdCBnZXRQbGF0Zm9ybSA9IGFkZGVuZHVtID0+IHtcbiAgaWYgKCFhZGRlbmR1bSB8fCAhYWRkZW5kdW0uR1RGUy5wbGF0Zm9ybSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgeyBtb2RlcywgcGxhdGZvcm0gfSA9IGFkZGVuZHVtLkdURlM7XG4gIGNvbnN0IHR5cGUgPVxuICAgIG1vZGVzICYmIG1vZGVzWzBdID09PSAnUkFJTCcgPyBpMThuZXh0LnQoJ3RyYWNrJykgOiBpMThuZXh0LnQoJ3BsYXRmb3JtJyk7XG4gIHJldHVybiBbdHlwZSwgcGxhdGZvcm1dO1xufTtcblxuZnVuY3Rpb24gZ2V0U3VnZ2VzdGlvbkNvbnRlbnQoaXRlbSkge1xuICBpZiAoaXRlbS50eXBlICE9PSAnRnV0dXJlUm91dGUnKSB7XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ1NlbGVjdEZyb21NYXAnKSB7XG4gICAgICByZXR1cm4gWycnLCBpMThuZXh0LnQoJ3NlbGVjdC1mcm9tLW1hcCcpXTtcbiAgICB9XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ0N1cnJlbnRMb2NhdGlvbicpIHtcbiAgICAgIHJldHVybiBbJycsIGkxOG5leHQudCgndXNlLW93bi1wb3NpdGlvbicpXTtcbiAgICB9XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnKSB7XG4gICAgICByZXR1cm4gWycnLCBpMThuZXh0LnQoJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnKV07XG4gICAgfVxuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3QgKi9cbiAgICBsZXQgW25hbWUsIGxhYmVsXSA9IGdldE5hbWVMYWJlbChpdGVtLnByb3BlcnRpZXMsIHRydWUpO1xuICAgIGxldCBzdWdnZXN0aW9uVHlwZTtcbiAgICBpZiAoXG4gICAgICBpdGVtLnByb3BlcnRpZXMubGF5ZXIudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnYmlrZXJlbnRhbCcpIHx8XG4gICAgICBpdGVtLnByb3BlcnRpZXMubGF5ZXIudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnYmlrZXN0YXRpb24nKVxuICAgICkge1xuICAgICAgc3VnZ2VzdGlvblR5cGUgPSBpMThuZXh0LnQoJ2Jpa2VyZW50YWxzdGF0aW9uJyk7XG4gICAgICBjb25zdCBzdG9wQ29kZSA9IGl0ZW0ucHJvcGVydGllcy5sYWJlbElkO1xuICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uVHlwZSwgbmFtZSwgdW5kZWZpbmVkLCBzdG9wQ29kZV07XG4gICAgfVxuXG4gICAgaWYgKGl0ZW0ucHJvcGVydGllcy5sYXllciA9PT0gJ2Jpa2VwYXJrJykge1xuICAgICAgc3VnZ2VzdGlvblR5cGUgPSBpMThuZXh0LnQoJ2Jpa2VwYXJrJyk7XG4gICAgICByZXR1cm4gW3N1Z2dlc3Rpb25UeXBlLCBuYW1lLCB1bmRlZmluZWQsIHVuZGVmaW5lZF07XG4gICAgfVxuXG4gICAgaWYgKGl0ZW0ucHJvcGVydGllcy5sYXllciA9PT0gJ2NhcnBhcmsnKSB7XG4gICAgICBzdWdnZXN0aW9uVHlwZSA9IGkxOG5leHQudCgnY2FycGFyaycpO1xuICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uVHlwZSwgbmFtZSwgdW5kZWZpbmVkLCB1bmRlZmluZWRdO1xuICAgIH1cblxuICAgIGlmIChpdGVtLnByb3BlcnRpZXMubW9kZSkge1xuICAgICAgc3VnZ2VzdGlvblR5cGUgPSBpMThuZXh0LnQoXG4gICAgICAgIGl0ZW0ucHJvcGVydGllcy5tb2RlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnZmF2b3VyaXRlJywgJycpLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbGF5ZXIgPSBpdGVtLnByb3BlcnRpZXMubGF5ZXJcbiAgICAgICAgLnJlcGxhY2UoJ3JvdXRlLScsICcnKVxuICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAucmVwbGFjZSgnZmF2b3VyaXRlJywgJycpO1xuICAgICAgc3VnZ2VzdGlvblR5cGUgPSBpMThuZXh0LnQobGF5ZXIpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGl0ZW0ucHJvcGVydGllcy5pZCAmJlxuICAgICAgKGl0ZW0ucHJvcGVydGllcy5sYXllciA9PT0gJ3N0b3AnIHx8IGl0ZW0ucHJvcGVydGllcy5sYXllciA9PT0gJ3N0YXRpb24nKVxuICAgICkge1xuICAgICAgY29uc3Qgc3RvcENvZGUgPSBnZXRTdG9wQ29kZShpdGVtLnByb3BlcnRpZXMpO1xuICAgICAgY29uc3QgbW9kZSA9IGl0ZW0ucHJvcGVydGllcy5hZGRlbmR1bT8uR1RGUy5tb2RlcztcbiAgICAgIGNvbnN0IHBsYXRmb3JtID0gZ2V0UGxhdGZvcm0oaXRlbS5wcm9wZXJ0aWVzLmFkZGVuZHVtKTtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHN1Z2dlc3Rpb25UeXBlLFxuICAgICAgICBnZXRTdG9wTmFtZShuYW1lLCBzdG9wQ29kZSksXG4gICAgICAgIGxhYmVsLFxuICAgICAgICBzdG9wQ29kZSxcbiAgICAgICAgbW9kZSxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICBdO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdmYXZvdXJpdGVTdG9wJyB8fFxuICAgICAgaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnZmF2b3VyaXRlU3RhdGlvbidcbiAgICApIHtcbiAgICAgIGNvbnN0IHsgYWRkcmVzcywgY29kZSB9ID0gaXRlbS5wcm9wZXJ0aWVzO1xuICAgICAgY29uc3Qgc3RvTmFtZSA9IGFkZHJlc3MgPyBnZXRTdG9wTmFtZShhZGRyZXNzLnNwbGl0KCcsJylbMF0sIGNvZGUpIDogbmFtZTtcbiAgICAgIGNvbnN0IHBsYXRmb3JtID0gZ2V0UGxhdGZvcm0oaXRlbS5wcm9wZXJ0aWVzLmFkZGVuZHVtKTtcbiAgICAgIHJldHVybiBbc3VnZ2VzdGlvblR5cGUsIHN0b05hbWUsIGxhYmVsLCBjb2RlLCB1bmRlZmluZWQsIHBsYXRmb3JtXTtcbiAgICB9XG4gICAgcmV0dXJuIFtzdWdnZXN0aW9uVHlwZSwgbmFtZSwgbGFiZWxdO1xuICB9XG4gIGNvbnN0IHsgb3JpZ2luLCBkZXN0aW5hdGlvbiB9ID0gaXRlbS5wcm9wZXJ0aWVzO1xuICBjb25zdCB0YWlsMSA9IG9yaWdpbi5sb2NhbGl0eSA/IGAsICR7b3JpZ2luLmxvY2FsaXR5fSBmb29iYXJgIDogJyc7XG4gIGNvbnN0IHRhaWwyID0gZGVzdGluYXRpb24ubG9jYWxpdHkgPyBgLCAke2Rlc3RpbmF0aW9uLmxvY2FsaXR5fWAgOiAnJztcbiAgY29uc3QgbmFtZTEgPSBvcmlnaW4ubmFtZTtcbiAgY29uc3QgbmFtZTIgPSBkZXN0aW5hdGlvbi5uYW1lO1xuICByZXR1cm4gW1xuICAgIGkxOG5leHQudCgnZnV0dXJlLXJvdXRlJyksXG4gICAgYCR7aTE4bmV4dC50KCdvcmlnaW4nKX0gJHtuYW1lMX0ke3RhaWwxfSAke2kxOG5leHQudChcbiAgICAgICdkZXN0aW5hdGlvbicsXG4gICAgKX0gJHtuYW1lMn0ke3RhaWwyfWAsXG4gICAgaXRlbS50cmFuc2xhdGVkVGV4dCxcbiAgXTtcbn1cblxuZnVuY3Rpb24gdHJhbnNsYXRlRnV0dXJlUm91dGVTdWdnZXN0aW9uVGltZShpdGVtKSB7XG4gIGNvbnN0IHRpbWUgPSBtb21lbnQudW5peChpdGVtLnByb3BlcnRpZXMudGltZSk7XG4gIGxldCBzdHIgPSBpdGVtLnByb3BlcnRpZXMuYXJyaXZlQnlcbiAgICA/IGkxOG5leHQudCgnYXJyaXZhbCcpXG4gICAgOiBpMThuZXh0LnQoJ2RlcGFydHVyZScpO1xuICBpZiAodGltZS5pc1NhbWUobW9tZW50KCksICdkYXknKSkge1xuICAgIHN0ciA9IGAke3N0cn0gJHtpMThuZXh0LnQoJ3RvZGF5LWF0Jyl9YDtcbiAgfSBlbHNlIGlmICh0aW1lLmlzU2FtZShtb21lbnQoKS5hZGQoMSwgJ2RheScpLCAnZGF5JykpIHtcbiAgICBzdHIgPSBgJHtzdHJ9ICR7aTE4bmV4dC50KCd0b21vcnJvdy1hdCcpfWA7XG4gIH0gZWxzZSB7XG4gICAgc3RyID0gYCR7c3RyfSAke3RpbWUuZm9ybWF0KCdkZCBELk0uJyl9YDtcbiAgfVxuICBzdHIgPSBgJHtzdHJ9ICR7bW9tZW50KHRpbWUpLmZvcm1hdCgnSEg6bW0nKX1gO1xuICByZXR1cm4gc3RyO1xufVxuLyoqXG4gKiBAZXhhbXBsZVxuICogY29uc3Qgc2VhcmNoQ29udGV4dCA9IHtcbiAqICAgaXNQZWxpYXNMb2NhdGlvbkF3YXJlOiBmYWxzZSAvLyB0cnVlIC8gZmFsc2UgZG9lcyBMZXQgUGVsaWFzIHN1Z2dlc3QgYmFzZWQgb24gY3VycmVudCB1c2VyIGxvY2F0aW9uXG4gKiAgIG1pbmltYWxSZWdleHA6IHVuZGVmaW5lZCAvLyB1c2VkIGZvciB0ZXN0aW5nIG1pbi4gcmVnZXhwLiBGb3IgZXhhbXBsZTogbmV3IFJlZ0V4cCgnLnsyLH0nKSxcbiAqICAgbGluZVJlZ2V4cDogdW5kZWZpbmVkIC8vICBpZGVudGlmeSBzZWFyY2hlcyBmb3Igcm91dGUgbnVtYmVycy9sYWJlbHM6IGJ1cyB8IHRyYWluIHwgbWV0cm8uIEZvciBleGFtcGxlOiBuZXcgUmVnRXhwKFxuICogICAgLy8gICAnKF5bMC05XStbYS16XT8kfF5beXVsZWFwaW5rcnRkel0kfChebVsxMl0/Yj8kKSknLFxuICogICAgLy8gICdpJyxcbiAqICAgIC8vICApLFxuICogICBVUkxfUEVMSUFTOiAnJyAvLyB1cmwgZm9yIHBlbGlhcyBzZWFyY2hlc1xuICogICBmZWVkSURzOiBbJ0hTTCcsICdIU0xMYXV0dGEnXSAvLyBGZWVkSWQncyBsaWtlICBbSFNMLCBIU0xMYXV0dGFdXG4gKiAgIGdlb2NvZGluZ1NvdXJjZXM6IFsnb2EnLCdvc20nLCdubHNmaSddICAvLyBzb3VyY2VzIGZvciBnZW9jb2RpbmdcbiAqICAgZ2VvY29kaW5nU2VhcmNoUGFyYW1zOyB7fSAgLy8gU2VhcmNocGFybWFzIGZybyBnZW9jb2RpbmdcbiAqICAgZ2V0RmF2b3VyaXRlTG9jYXRpb25zOiAoKSA9PiAoe30pLCAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgYXJyYXkgb2YgZmF2b3VyaXRlIGxvY2F0aW9ucy5cbiAqICAgZ2V0RmF2b3VyaXRlU3RvcHM6ICgpID0+ICh7fSksICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgYXJyYXkgb2YgZmF2b3VyaXRlIHN0b3BzLlxuICogICBnZXRMYW5ndWFnZTogKCkgPT4gKHt9KSwgICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBjdXJyZW50IGxhbmd1YWdlLlxuICogICBnZXRGYXZvdXJpdGVSb3V0ZXM6ICgpID0+ICh7fSksICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhcnJheSBvZiBmYXZvdXJpdGUgcm91dGVzLlxuICogICBnZXRQb3NpdGlvbnM6ICgpID0+ICh7fSksICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyB1c2VyJ3MgZ2VvbG9jYXRpb24uXG4gKiAgIGdldFJvdXRlc1F1ZXJ5OiAoKSA9PiAoe30pLCAgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHF1ZXJ5IGZvciBmZXRjaGluZyByb3V0ZXMuXG4gKiAgIGdldEFsbEJpa2VSZW50YWxTdGF0aW9uczogKCkgPT4gKHt9KSwgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGFsbCBiaWtlIHJlbnRhbCBzdGF0aW9ucyBmcm9tIGdyYXBocWwgQVBJLlxuICogICBnZXRTdG9wQW5kU3RhdGlvbnNRdWVyeTogKCkgPT4gKHt9KSwgIC8vIEZ1bmN0aW9uIHRoYXQgZmV0Y2hlcyBmYXZvdXJpdGUgc3RvcHMgYW5kIHN0YXRpb25zIGZyb20gZ3JhcGhxbCBBUEkuXG4gKiAgIGdldEZhdm91cml0ZVJvdXRlc1F1ZXJ5OiAoKSA9PiAoe30pLCAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHF1ZXJ5IGZvciBmZXRjaGluZyBmYXZvdXJpdGUgcm91dGVzLlxuICogICBnZXRGYXZvdXJpdGVCaWtlUmVudGFsU3RhdGlvbnM6ICgpID0+ICh7fSksICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgZmF2b3VyaXRlIGJpa2UgcmVudGFsIHN0YXRpb24uXG4gKiAgIGdldEZhdm91cml0ZUJpa2VSZW50YWxTdGF0aW9uc1F1ZXJ5OiAoKSA9PiAoe30pLCAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgcXVlcnkgZm9yIGZldGNoaW5nIGZhdm91cml0ZSBiaWtlIHJlbnRhbCBzdGF0aW9ucy5cbiAqICAgc3RhcnRMb2NhdGlvbldhdGNoOiAoKSA9PiAoe30pLCAgICAgICAvLyBGdW5jdGlvbiB0aGF0IGxvY2F0ZXMgdXNlcnMgZ2VvbG9jYXRpb24uXG4gKiAgIHNhdmVTZWFyY2g6ICgpID0+ICh7fSksICAgICAgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBzYXZlcyBzZWFyY2ggdG8gb2xkIHNlYXJjaGVzIHN0b3JlLlxuICogICBjbGVhck9sZFNlYXJjaGVzOiAoKSA9PiAoe30pLCAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgY2xlYXJzIG9sZCBzZWFyY2hlcyBzdG9yZS5cbiAqICAgZ2V0RnV0dXJlUm91dGVzOiAoKSA9PiAoe30pLCAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybiBmdXR1cmUgcm91dGVzXG4gKiAgIHNhdmVGdXR1cmVSb3V0ZTogKCkgPT4gKHt9KSwgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBzYXZlcyBhIGZ1dHVyZSByb3V0ZVxuICogICBjbGVhckZ1dHVyZVJvdXRlczogKCkgPT4gKHt9KSwgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgY2xlYXJzIGZ1dHVyZSByb3V0ZXNcbiAqIH07XG4gKiBjb25zdCBsYW5nID0gJ2ZpJzsgLy8gZW4sIGZpIG9yIHN2XG4gKiBjb25zdCBvblNlbGVjdCA9IChpdGVtLCBpZCkgPT4ge1xuICogICAgLy8gRnVudGlvbmFsaXR5IHdoZW4gdXNlciBzZWxlY3RzIGEgc3VnZ2VzaW9ucy4gTm8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyBnaXZlbi5cbiAqICAgIHJldHVybiBudWxsO1xuICogfTtcbiAqIGNvbnN0IG9uQ2xlYXIgPSBpZCA9PiB7XG4gKiAgICAvLyBDYWxsZWQgIHdoZW4gdXNlciBjbGlja3MgdGhlIGNsZWFyIHNlYXJjaCBzdHJpbmcgYnV0dG9uLiBObyBkZWZhdWx0IGltcGxlbWVudGF0aW9uLlxuICogICAgcmV0dXJuIG51bGw7XG4gKiB9O1xuICogY29uc3QgZ2V0QXV0b1N1Z2dlc3RJY29uczoge1xuICogICAvLyBDYWxsZWQgZm9yIGV2ZXJ5IGNpdHkgYmlrZSBzdGF0aW9uIHJlbmRlcmVkIGFzIGEgc2VhcmNoIHN1Z2dlc3Rpb24uIFNob3VsZCByZXR1cm4gdGhlIGljb24gYW5kXG4gKiAgIC8vIGNvbG9yIHVzZWQgZm9yIHRoYXQgc3RhdGlvbi4gVHdvIGljb25zIGFyZSBhdmFpbGFibGUsICdjaXR5YmlrZS1zdG9wLWRpZ2l0cmFuc2l0JyBhbmRpdHliaWtlLXN0b3AtZGlnaXRyYW5zaXQtc2Vjb25kYXJ5Jy5cbiAqICAgY2l0eWJpa2VzOiBzdGF0aW9uID0+IHtcbiAqICAgICAgcmV0dXJuIFsnY2l0eWJpa2Utc3RvcC1kaWdpdHJhbnNpdCcsICcjZjJiNjJkJ107XG4gKiAgIH1cbiAqIH1cbiAqIGNvbnN0IHRyYW5zcG9ydE1vZGUgPSB1bmRlZmluZWQ7XG4gKiBjb25zdCBwbGFjZWhvbGRlciA9IFwic3RvcC1uZWFyLXlvdVwiO1xuICogY29uc3QgdGFyZ2V0cyA9IFsnTG9jYXRpb25zJywgJ1N0b3BzJywgJ1JvdXRlcyddOyAvLyBEZWZpbmVzIHdoYXQgeW91IGFyZSBzZWFyY2hpbmcuIGFsbCBhdmFpbGFibGUgb3B0aW9ucyBhcmUgTG9jYXRpb25zLCBTdG9wcywgUm91dGVzLCBCaWtlUmVudGFsU3RhdGlvbnMsIEZ1dHVyZVJvdXRlcywgTWFwUG9zaXRpb24gYW5kIEN1cnJlbnRQb3NpdGlvbi4gTGVhdmUgZW1wdHkgdG8gc2VhcmNoIGFsbCB0YXJnZXRzLlxuICogY29uc3Qgc291cmNlcyA9IFsnRmF2b3VyaXRlJywgJ0hpc3RvcnknLCAnRGF0YXNvdXJjZSddIC8vIERlZmluZXMgd2hlcmUgeW91IGFyZSBzZWFyY2hpbmcuIGFsbCBhdmFpbGFibGUgYXJlOiBGYXZvdXJpdGUsIEhpc3RvcnkgKHByZXZpb3VzbHkgc2VhcmNoZWQgc2VhcmNoZXMpIGFuZCBEYXRhc291cmNlLiBMZWF2ZSBlbXB0eSB0byB1c2UgYWxsIHNvdXJjZXMuXG4gKiByZXR1cm4gKFxuICogIDxEVEF1dG9zdWdnZXN0XG4gKiAgICBhcHBFbGVtZW50PXthcHBFbGVtZW50fSAvLyBSZXF1aXJlZC4gUm9vdCBlbGVtZW50J3MgaWQuIE5lZWRlZCBmb3IgcmVhY3QtbW9kYWwgY29tcG9uZW50LlxuICogICAgc2VhcmNoQ29udGV4dD17c2VhcmNoQ29udGV4dH1cbiAqICAgIGljb249XCJvcmlnaW5cIiAvLyBPcHRpb25hbCBTdHJpbmcgZm9yIGljb24gdGhhdCBpcyBzaG93biBsZWZ0IG9mIHNlYXJjaGZpZWxkLiB1c2VkIHdpdGggSWNvbiBsaWJyYXJ5XG4gKiAgICBpZD1cIm9yaWdpblwiIC8vIHVzZWQgZm9yIHN0eWxlIHByb3BzIGFuZCBpbmZvIGZvciBjb21wb25lbnQuXG4gKiAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9IC8vIFN0cmluZyB0aGF0IGlzIHNob3ducyBpbml0YWxseSBpbiBzZWFyY2ggZmllbGRcbiAqICAgIHZhbHVlPVwiXCIgLy8gZS5nLiB1c2VyIHR5cGVkIHN0cmluZyB0aGF0IGlzIHNob3duIGluIHNlYXJjaCBmaWVsZFxuICogICAgb25TZWxlY3Q9e29uU2VsZWN0fVxuICogICAgb25DbGVhcj17b25DbGVhcn1cbiAqICAgIGF1dG9Gb2N1cz17ZmFsc2V9IC8vIGRlZmluZXMgdGhhdCBzaG91bGQgdGhpcyBmaWVsZCBiZSBhdXRvbWF0aWNhbGx5IGZvY3VzZWQgd2hlbiBwYWdlIGlzIGxvYWRlZC5cbiAqICAgIGxhbmc9e2xhbmd9XG4gKiAgICBnZXRBdXRvU3VnZ2VzdEljb25zPXtnZXRBdXRvU3VnZ2VzdEljb25zfVxuICogICAgdHJhbnNwb3J0TW9kZT17dHJhbnNwb3J0TW9kZX0gLy8gdHJhbnNwb3J0bW9kZSB3aXRoIHdoaWNoIHdlIGZpbHRlciB0aGUgcm91dGVzLCBlLmcuIHJvdXRlLUJVU1xuICogICAgZ2VvY29kaW5nU2l6ZT17MTB9IC8vIGRlZmluZXMgaG93IG1hbnkgc3RvcHMgYW5kIHN0YXRpb25zIHRvIGZldGNoIGZyb20gZ2VvY29kaW5nLiBVc2VmdWwgaWYgeW91IHdhbnQgdG8gZmlsdGVyIHRoZSByZXN1bHRzIGFuZCBzdGlsbCBnZXQgYSByZWFzb25hYmxlIGFtb3VudCBvZiBzdWdnZXN0aW9ucy5cbiAqICAgIGZpbHRlclJlc3VsdHM9e3Jlc3VsdHMgPT4gcmV0dXJuIHJlc3VsdHN9IC8vIE9wdGlvbmFsIGZpbHRlcmluZyBmdW5jdGlvbiBmb3Igcm91dGVzIGFuZCBzdG9wc1xuICogICAgaGFuZGVsVmlhUG9pbnRzPXsoKSA9PiByZXR1cm4gbnVsbCB9IC8vIE9wdGlvbmFsIFZpYSBwb2ludCBoYW5kbGluZyBsb2dpYy4gVGhpcyBpcyBjdXJyZW50bHkgbWFuYWdlZCB3aXRoIERUQXV0b3N1Z2dlc3RwYW5lbCBieSBkZWZhdWx0LCBidXQgaWYgRFRBdXRvc3VnZ2VzdCBpcyB1c2VkIHNlcGVyYXRlbGx5IG93biBpbXBsZW1lbnRhdGlvbiBtdXN0IGJlIHByb3ZpZGVkLlxuICogICAgZm9jdXNDaGFuZ2U9eygpID0+IHJldHVybiBudWxsfSAvLyBXaGVuIHN1Z2dlc3Rpb24gaXMgc2VsZWN0ZWQsIGhhbmRsZSBjaGFuZ2luZyBmb2N1cy4gVGhpcyBpcyBjdXJyZW50bHkgbWFuYWdlZCB3aXRoIERUQXV0b3N1Z2dlc3RwYW5lbCBieSBkZWZhdWx0LCBidXQgaWYgRFRBdXRvc3VnZ2VzdCBpcyB1c2VkIHNlcGVyYXRlbGx5IG93biBpbXBsZW1lbnRhdGlvbiBtdXN0IGJlIHByb3ZpZGVkLlxuICogICAgc3RvcmVSZWY9eygpID0+IHJldHVybiBudWxsfSAvLyBGdW5jdGlvbmFsaXR5IHRvIHN0b3JlIHJlZnMuIEN1cnJlbmx0eSBtYW5hZ2VkIHdpdGggRFRBdXRvc3VnZ2VzdHBhbmVsIGJ5IGRlZmF1bHQsIGJ1dCBpZiBEVEF1dG9zdWdnZXN0IGlzIHVzZWQgc2VwZXJhdGVsbHkgb3duIGltcGxlbWVudGF0aW9uIG11c3QgYmUgcHJvdmlkZWQuXG4gKiAgICBzb3VyY2VzPXtzb3VyY2VzfVxuICogICAgdGFyZ2V0cz17dGFyZ2V0c31cbiAqICAgIGlzTW9iaWxlICAvLyBPcHRpb25hbC4gRGVmYXVsdHMgdG8gZmFsc2UuIFdoZXRoZXIgdG8gdXNlIG1vYmlsZSBzZWFyY2guXG4gKiAgICBtb2JpbGVMYWJlbD1cIkN1c3RvbSBsYWJlbFwiIC8vIE9wdGlvbmFsLiBDdXN0b20gbGFiZWwgdGV4dCBmb3IgYXV0b3N1Z2dlc3QgZmllbGQgb24gbW9iaWxlLlxuICogICAgaW5wdXRDbGFzc05hbWU9XCJcIiAvLyBPcHRpb25hbC4gQ3VzdG9tIGNsYXNzbmFtZSBhcHBsaWVkIHRvIHRoZSBpbnB1dCBlbGVtZW50IG9mIHRoZSBjb21wb25lbnQgZm9yIHByb3ZpZGluZyBDU1Mgc3R5bGVzLlxuICogICAgdHJhbnNsYXRlZFBsYWNlaG9sZGVyPSAvLyBPcHRpb25hbC4gQ3VzdG9uIHRyYW5zbGF0ZWQgcGxhY2Vob2xkZXIgdGV4dCBmb3IgYXV0b3N1Z2dlc3QgZmllbGQuXG4gKi9cbmNsYXNzIERUQXV0b3N1Z2dlc3QgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIGFwcEVsZW1lbnQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBpY29uOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICB0cmFuc2xhdGVkUGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc2VhcmNoQ29udGV4dDogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICAgIGFyaWFMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBvblNlbGVjdDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgdHJhbnNwb3J0TW9kZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBmaWx0ZXJSZXN1bHRzOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBnZW9jb2RpbmdTaXplOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIG9uQ2xlYXI6IFByb3BUeXBlcy5mdW5jLFxuICAgIHN0b3JlUmVmOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBoYW5kbGVWaWFQb2ludHM6IFByb3BUeXBlcy5mdW5jLFxuICAgIGZvY3VzQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBsYW5nOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNvdXJjZXM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zdHJpbmcpLFxuICAgIHRhcmdldHM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zdHJpbmcpLFxuICAgIGlzTW9iaWxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBob3ZlckNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGFjY2Vzc2libGVQcmltYXJ5Q29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgdGltZVpvbmU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgcGF0aE9wdHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICByb3V0ZXNQcmVmaXg6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBzdG9wc1ByZWZpeDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB9KSxcbiAgICBtb2JpbGVMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBsb2NrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHVubG9jazogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICByZWZQb2ludDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBpbnB1dENsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBmb250V2VpZ2h0czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIG1lZGl1bTogUHJvcFR5cGVzLm51bWJlcixcbiAgICB9KSxcbiAgICBtb2RlSWNvbkNvbG9yczogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBnZXRBdXRvU3VnZ2VzdEljb25zOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBtb2RlU2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNob3dTY3JvbGw6IFByb3BUeXBlcy5ib29sLFxuICAgIGlzRW1iZWRkZWQ6IFByb3BUeXBlcy5ib29sLFxuICB9O1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICBjbGFzc05hbWU6ICcnLFxuICAgIGljb246IHVuZGVmaW5lZCxcbiAgICB2YWx1ZTogJycsXG4gICAgdHJhbnNwb3J0TW9kZTogdW5kZWZpbmVkLFxuICAgIGxhbmc6ICdmaScsXG4gICAgc291cmNlczogW10sXG4gICAgaXNNb2JpbGU6IGZhbHNlLFxuICAgIGNvbG9yOiAnIzAwN2FjOScsXG4gICAgaG92ZXJDb2xvcjogJyMwMDYyYTEnLFxuICAgIGFjY2Vzc2libGVQcmltYXJ5Q29sb3I6ICcjMDA3NGJlJyxcbiAgICB0aW1lWm9uZTogJ0V1cm9wZS9IZWxzaW5raScsXG4gICAgcGF0aE9wdHM6IHtcbiAgICAgIHJvdXRlc1ByZWZpeDogJ2xpbmphdCcsXG4gICAgICBzdG9wc1ByZWZpeDogJ3B5c2FraXQnLFxuICAgIH0sXG4gICAgbW9iaWxlTGFiZWw6IHVuZGVmaW5lZCxcbiAgICBpbnB1dENsYXNzTmFtZTogJycsXG4gICAgdHJhbnNsYXRlZFBsYWNlaG9sZGVyOiB1bmRlZmluZWQsXG4gICAgZm9udFdlaWdodHM6IHtcbiAgICAgIG1lZGl1bTogNTAwLFxuICAgIH0sXG4gICAgbW9kZUljb25Db2xvcnM6IHtcbiAgICAgICdtb2RlLWJ1cyc6ICcjMDA3YWM5JyxcbiAgICAgICdtb2RlLXJhaWwnOiAnIzhjNDc5OScsXG4gICAgICAnbW9kZS10cmFtJzogJyMwMDgxNTEnLFxuICAgICAgJ21vZGUtbWV0cm8nOiAnI2VkOGMwMCcsXG4gICAgICAnbW9kZS1mZXJyeSc6ICcjMDA3QTk3JyxcbiAgICAgICdtb2RlLWNpdHliaWtlJzogJyNmMmI2MmQnLFxuICAgIH0sXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIG1vZGVTZXQ6IHVuZGVmaW5lZCxcbiAgICBzaG93U2Nyb2xsOiBmYWxzZSxcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBtb21lbnQudHouc2V0RGVmYXVsdChwcm9wcy50aW1lWm9uZSk7XG4gICAgbW9tZW50LmxvY2FsZShwcm9wcy5sYW5nKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICB2YWx1ZTogcHJvcHMudmFsdWUsXG4gICAgICBzdWdnZXN0aW9uczogW10sXG4gICAgICBlZGl0aW5nOiBmYWxzZSxcbiAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgcmVuZGVyTW9iaWxlU2VhcmNoOiBmYWxzZSxcbiAgICAgIHNvdXJjZXM6IHByb3BzLnNvdXJjZXMsXG4gICAgICBvd25QbGFjZXM6IGZhbHNlLFxuICAgICAgdHlwaW5nVGltZXI6IG51bGwsXG4gICAgICB0eXBpbmc6IGZhbHNlLFxuICAgICAgcGVuZGluZ1NlbGVjdGlvbjogbnVsbCxcbiAgICAgIHN1Z2dlc3Rpb25JbmRleDogMCxcbiAgICAgIGNsZWFuRXhlY3V0ZWQ6IGZhbHNlLFxuICAgICAgc2Nyb2xsWTogMCxcbiAgICB9O1xuICAgIE9iamVjdC5rZXlzKHRyYW5zbGF0aW9ucykuZm9yRWFjaChsYW5nID0+IHtcbiAgICAgIGkxOG5leHQuYWRkUmVzb3VyY2VCdW5kbGUobGFuZywgJ3RyYW5zbGF0aW9uJywgdHJhbnNsYXRpb25zW2xhbmddKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIERULTQwNzQ6IFdoZW4gYSB1c2VyJ3MgbG9jYXRpb24gaXMgdXBkYXRlZCBEVEF1dG9zdWdnZXN0IHdvdWxkIHJlLXJlbmRlciBjYXVzaW5nIHN1Z2dlc3Rpb24gbGlzdCB0byByZXNldC5cbiAgLy8gVGhpcyB3aWxsIHByZXZlbnQgaXQuXG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkge1xuICAgIHJldHVybiAhaXNFcXVhbChuZXh0U3RhdGUsIHRoaXMuc3RhdGUpIHx8ICFpc0VxdWFsKG5leHRQcm9wcywgdGhpcy5wcm9wcyk7XG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUgPSAoKSA9PiB7XG4gICAgaWYgKGkxOG5leHQubGFuZ3VhZ2UgIT09IHRoaXMucHJvcHMubGFuZykge1xuICAgICAgaTE4bmV4dC5jaGFuZ2VMYW5ndWFnZSh0aGlzLnByb3BzLmxhbmcpO1xuICAgIH1cbiAgfTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2FtZWxjYXNlXG4gIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID0gbmV4dFByb3BzID0+IHtcbiAgICAvLyB3YWl0IHVudGlsIGFkZHJlc3MgaXMgc2V0IG9yIGdlb2xvY2F0aW9uaW5nIGZhaWxzXG4gICAgaWYgKG5leHRQcm9wcy52YWx1ZSAhPT0gdGhpcy5zdGF0ZS52YWx1ZSAmJiAhdGhpcy5zdGF0ZS5lZGl0aW5nKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgdmFsdWU6IG5leHRQcm9wcy52YWx1ZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBvbkNoYW5nZSA9IChldmVudCwgeyBuZXdWYWx1ZSwgbWV0aG9kIH0pID0+IHtcbiAgICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAgIHZhbHVlOiB0aGlzLmZJbnB1dCB8fCBuZXdWYWx1ZSB8fCAnJyxcbiAgICAgIHJlbmRlck1vYmlsZVNlYXJjaDogdGhpcy5wcm9wcy5pc01vYmlsZSxcbiAgICB9O1xuICAgIC8vIFJlbW92ZSBmaWxsZWQgaW5wdXQgdmFsdWUgc28gaXQgd29udCBiZSByZXVzZWQgdW5uZWNlc3NhcnlcbiAgICB0aGlzLmZJbnB1dCA9IG51bGw7XG4gICAgaWYgKCF0aGlzLnN0YXRlLmVkaXRpbmcpIHtcbiAgICAgIG5ld1N0YXRlLmVkaXRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSwgKCkgPT5cbiAgICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6IG5ld1ZhbHVlIHx8ICcnIH0pLFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKG1ldGhvZCAhPT0gJ2VudGVyJyB8fCB0aGlzLnN0YXRlLnZhbGlkKSB7XG4gICAgICAvLyB0ZXN0IGFib3ZlIGRyb3BzIHVubmVjZXNzYXJ5IHVwZGF0ZVxuICAgICAgLy8gd2hlbiB1c2VyIGhpdHMgZW50ZXIgYnV0IHNlYXJjaCBpcyB1bmZpbmlzaGVkXG4gICAgICBpZiAodGhpcy5zdGF0ZS50eXBpbmdUaW1lcikge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5zdGF0ZS50eXBpbmdUaW1lcik7XG4gICAgICB9XG4gICAgICBpZiAobWV0aG9kID09PSAndHlwZScpIHtcbiAgICAgICAgLy8gYWZ0ZXIgdGltZW91dCBydW5zLCBhcmlhIGFsZXJ0IHdpbGwgYW5ub3VuY2UgY3VycmVudCBzZWxlY3Rpb25cbiAgICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgdHlwaW5nOiBmYWxzZSB9KTtcbiAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgIG5ld1N0YXRlLnR5cGluZ1RpbWVyID0gdGltZXI7XG4gICAgICAgIG5ld1N0YXRlLnR5cGluZyA9IHRydWU7XG4gICAgICB9XG4gICAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlKTtcbiAgICB9XG4gIH07XG5cbiAgb25CbHVyID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLnN0YXRlLnJlbmRlck1vYmlsZVNlYXJjaCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdGF0ZS5lZGl0aW5nKSB7XG4gICAgICB0aGlzLmlucHV0LmZvY3VzKCk7XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgZWRpdGluZzogZmFsc2UsXG4gICAgICByZW5kZXJNb2JpbGVTZWFyY2g6IGZhbHNlLFxuICAgICAgdmFsdWU6IHRoaXMucHJvcHMudmFsdWUsXG4gICAgfSk7XG4gIH07XG5cbiAgb25TZWxlY3RlZCA9IChlLCByZWYpID0+IHtcbiAgICBpZiAodGhpcy5zdGF0ZS52YWxpZCkge1xuICAgICAgaWYgKHJlZi5zdWdnZXN0aW9uLnR5cGUgPT09ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJykge1xuICAgICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNvdXJjZXM6IFsnRmF2b3VyaXRlJywgJ0JhY2snXSxcbiAgICAgICAgICAgIG93blBsYWNlczogdHJ1ZSxcbiAgICAgICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IHJlZi5zdWdnZXN0aW9uLnR5cGUsXG4gICAgICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogJycgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICByZWYuc3VnZ2VzdGlvbi50eXBlID09PSAnYmFjaycgfHxcbiAgICAgICAgcmVmLnN1Z2dlc3Rpb24udHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJ1xuICAgICAgKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgICAge1xuICAgICAgICAgICAgc291cmNlczogdGhpcy5wcm9wcy5zb3VyY2VzLFxuICAgICAgICAgICAgb3duUGxhY2VzOiBmYWxzZSxcbiAgICAgICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IHJlZi5zdWdnZXN0aW9uLnR5cGUsXG4gICAgICAgICAgICBzdWdnZXN0aW9uSW5kZXg6IHJlZi5zdWdnZXN0aW9uSW5kZXgsXG4gICAgICAgICAgfSxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogJycgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWxlY3Rpb25Eb25lID0gdHJ1ZTsgLy8gc2VsZWN0aW9uIGRvbmUsIGRvIG5vdCBsZXQgdXBjb21pbmcga2V5Ym9hcmQgZXZlbnRzIGNvbmZ1c2UgdGhlIGZsb3dcbiAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgIHtcbiAgICAgICAgICBlZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgICB2YWx1ZTogcmVmLnN1Z2dlc3Rpb25WYWx1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaW5wdXQuYmx1cigpO1xuICAgICAgICAgIGlmICh0aGlzLnByb3BzLmhhbmRsZVZpYVBvaW50cykge1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5oYW5kbGVWaWFQb2ludHMocmVmLnN1Z2dlc3Rpb24sIHJlZi5zdWdnZXN0aW9uSW5kZXgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uU2VsZWN0KHJlZi5zdWdnZXN0aW9uLCB0aGlzLnByb3BzLmlkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcmVuZGVyTW9iaWxlU2VhcmNoOiBmYWxzZSxcbiAgICAgICAgICAgICAgc291cmNlczogdGhpcy5wcm9wcy5zb3VyY2VzLFxuICAgICAgICAgICAgICBvd25QbGFjZXM6IGZhbHNlLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uczogW10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnByb3BzLmZvY3VzQ2hhbmdlICYmXG4gICAgICAgICAgICAoIXRoaXMucHJvcHMuaXNNb2JpbGUgfHwgdGhpcy5wcm9wcy5pc0VtYmVkZGVkKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5mb2N1c0NoYW5nZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5wcm9wcy5pc01vYmlsZSkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZU1vYmlsZVNlYXJjaCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgIHByZXZTdGF0ZSA9PiAoe1xuICAgICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IHByZXZTdGF0ZS52YWx1ZSxcbiAgICAgICAgfSksXG4gICAgICAgICgpID0+IHRoaXMuY2hlY2tQZW5kaW5nU2VsZWN0aW9uKCksIC8vIHNlYXJjaCBtYXkgZmluaXNoIGR1cmluZyBzdGF0ZSBjaGFuZ2VcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIG9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZCA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHN1Z2dlc3Rpb25zOiBbXSxcbiAgICAgIHNvdXJjZXM6IHRoaXMucHJvcHMuc291cmNlcyxcbiAgICAgIG93blBsYWNlczogZmFsc2UsXG4gICAgICBlZGl0aW5nOiBmYWxzZSxcbiAgICB9KTtcbiAgfTtcblxuICBnZXRTdWdnZXN0aW9uVmFsdWUgPSBzdWdnZXN0aW9uID0+IHtcbiAgICBpZiAoXG4gICAgICBzdWdnZXN0aW9uLnR5cGUgPT09ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyB8fFxuICAgICAgc3VnZ2VzdGlvbi50eXBlID09PSAnYmFjaydcbiAgICApIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIGdldExhYmVsKHN1Z2dlc3Rpb24ucHJvcGVydGllcyk7XG4gIH07XG5cbiAgY2hlY2tQZW5kaW5nU2VsZWN0aW9uID0gKCkgPT4ge1xuICAgIGlmIChcbiAgICAgICh0aGlzLnN0YXRlLnBlbmRpbmdTZWxlY3Rpb24gPT09ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyB8fFxuICAgICAgICB0aGlzLnN0YXRlLnBlbmRpbmdTZWxlY3Rpb24gPT09ICdiYWNrJykgJiZcbiAgICAgIHRoaXMuc3RhdGUudmFsaWRcbiAgICApIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgIHtcbiAgICAgICAgICBwZW5kaW5nU2VsZWN0aW9uOiBudWxsLFxuICAgICAgICAgIGVkaXRpbmc6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0aGlzLmlucHV0LmZvY3VzKCk7XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgLy8gYWNjZXB0IGFmdGVyIGFsbCBvbmdvaW5nIHNlYXJjaGVzIGhhdmUgZmluaXNoZWRcbiAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdGUucGVuZGluZ1NlbGVjdGlvbiAmJiB0aGlzLnN0YXRlLnZhbGlkKSB7XG4gICAgICAvLyBmaW5pc2ggdGhlIHNlbGVjdGlvbiBieSBwaWNraW5nIGZpcnN0ID0gYmVzdCBtYXRjaCBvciB3aXRoICdGdXR1cmVSb3V0ZScgYnkgc3VnZ2VzdGlvbkluZGV4XG4gICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICB7XG4gICAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogbnVsbCxcbiAgICAgICAgICBlZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnN0YXRlLnN1Z2dlc3Rpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5pbnB1dC5ibHVyKCk7XG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uU2VsZWN0KFxuICAgICAgICAgICAgICB0aGlzLnN0YXRlLnN1Z2dlc3Rpb25zW3RoaXMuc3RhdGUuc3VnZ2VzdGlvbkluZGV4XSxcbiAgICAgICAgICAgICAgdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnByb3BzLmlzTW9iaWxlKSB7XG4gICAgICAgICAgICAgIHRoaXMuY2xvc2VNb2JpbGVTZWFyY2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdGhpcy5wcm9wcy5mb2N1c0NoYW5nZSAmJlxuICAgICAgICAgICAgICAoIXRoaXMucHJvcHMuaXNNb2JpbGUgfHwgdGhpcy5wcm9wcy5pc0VtYmVkZGVkKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMucHJvcHMuZm9jdXNDaGFuZ2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICBjbGVhckJ1dHRvbiA9ICgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ2NsZWFyLWlucHV0J119XG4gICAgICAgIG9uQ2xpY2s9e3RoaXMuY2xlYXJJbnB1dH1cbiAgICAgICAgYXJpYS1sYWJlbD17aTE4bmV4dC50KCdjbGVhci1idXR0b24tbGFiZWwnKX1cbiAgICAgID5cbiAgICAgICAgPEljb24gaW1nPVwiY2xvc2VcIiBjb2xvcj17dGhpcy5wcm9wcy5jb2xvcn0gLz5cbiAgICAgIDwvYnV0dG9uPlxuICAgICk7XG4gIH07XG5cbiAgZmV0Y2hGdW5jdGlvbiA9ICh7IHZhbHVlLCBjbGVhbkV4ZWN1dGVkIH0pID0+IHtcbiAgICByZXR1cm4gdGhpcy5zZXRTdGF0ZShcbiAgICAgIHsgdmFsaWQ6IGZhbHNlLCBjbGVhbkV4ZWN1dGVkOiAhY2xlYW5FeGVjdXRlZCA/IGZhbHNlIDogY2xlYW5FeGVjdXRlZCB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Eb25lKSB7XG4gICAgICAgICAgLy8gZG8gbm90IGxldCBjb21wb25lbnQgY2FzdCB1bm5lY2Vzc2FyeSByZXF1ZXN0c1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc0xvY2F0aW9uU2VhcmNoID1cbiAgICAgICAgICBpc0VtcHR5KHRoaXMucHJvcHMudGFyZ2V0cykgfHxcbiAgICAgICAgICB0aGlzLnByb3BzLnRhcmdldHMuaW5jbHVkZXMoJ0xvY2F0aW9ucycpO1xuICAgICAgICBsZXQgdGFyZ2V0cztcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUub3duUGxhY2VzKSB7XG4gICAgICAgICAgdGFyZ2V0cyA9IFsnTG9jYXRpb25zJ107XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaXNFbXB0eSh0aGlzLnByb3BzLnRhcmdldHMpIHx8XG4gICAgICAgICAgICB0aGlzLnByb3BzLnRhcmdldHMuaW5jbHVkZXMoJ1N0b3BzJylcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRhcmdldHMucHVzaCgnU3RvcHMnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaXNFbXB0eSh0aGlzLnByb3BzLnRhcmdldHMpIHx8XG4gICAgICAgICAgICB0aGlzLnByb3BzLnRhcmdldHMuaW5jbHVkZXMoJ0Jpa2VSZW50YWxTdGF0aW9ucycpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0YXJnZXRzLnB1c2goJ0Jpa2VSZW50YWxTdGF0aW9ucycpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICghaXNFbXB0eSh0aGlzLnByb3BzLnRhcmdldHMpKSB7XG4gICAgICAgICAgdGFyZ2V0cyA9IFsuLi50aGlzLnByb3BzLnRhcmdldHNdO1xuICAgICAgICAgIC8vIGluIGRlc2t0b3AsIGZhdm9yaXRlcyBhcmUgYWNjZXNzZWQgdmlhIHN1YiBzZWFyY2hcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBpc0xvY2F0aW9uU2VhcmNoICYmXG4gICAgICAgICAgICAhdGhpcy5wcm9wcy5pc01vYmlsZSAmJlxuICAgICAgICAgICAgKGlzRW1wdHkodGhpcy5wcm9wcy5zb3VyY2VzKSB8fFxuICAgICAgICAgICAgICB0aGlzLnByb3BzLnNvdXJjZXMuaW5jbHVkZXMoJ0Zhdm91cml0ZScpKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGFyZ2V0cy5wdXNoKCdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHJlbW92ZSAgbG9jYXRpb24gZmF2b3VyaXRlcyBpbiBkZXNrdG9wIHNlYXJjaCAoY29sbGVjdGlvbiBpdGVtIHJlcGxhY2VzIGl0IGluIHRhcmdldCBhcnJheSlcbiAgICAgICAgY29uc3Qgc291cmNlcyA9XG4gICAgICAgICAgdGhpcy5zdGF0ZS5zb3VyY2VzICYmXG4gICAgICAgICAgdGhpcy5zdGF0ZS5zb3VyY2VzLmZpbHRlcihcbiAgICAgICAgICAgIHMgPT5cbiAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICBpc0xvY2F0aW9uU2VhcmNoICYmXG4gICAgICAgICAgICAgICAgcyA9PT0gJ0Zhdm91cml0ZScgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy5zdGF0ZS5vd25QbGFjZXMgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy5wcm9wcy5pc01vYmlsZVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgZXhlY3V0ZVNlYXJjaChcbiAgICAgICAgICB0YXJnZXRzLFxuICAgICAgICAgIHNvdXJjZXMsXG4gICAgICAgICAgdGhpcy5wcm9wcy50cmFuc3BvcnRNb2RlLFxuICAgICAgICAgIHRoaXMucHJvcHMuc2VhcmNoQ29udGV4dCxcbiAgICAgICAgICB0aGlzLnByb3BzLmZpbHRlclJlc3VsdHMsXG4gICAgICAgICAgdGhpcy5wcm9wcy5nZW9jb2RpbmdTaXplLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlucHV0OiB2YWx1ZSB8fCAnJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlYXJjaFJlc3VsdCA9PiB7XG4gICAgICAgICAgICBpZiAoc2VhcmNoUmVzdWx0ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gWFhYIHRyYW5zbGF0ZXMgY3VycmVudCBsb2NhdGlvblxuICAgICAgICAgICAgY29uc3Qgc3VnZ2VzdGlvbnMgPSAoc2VhcmNoUmVzdWx0LnJlc3VsdHMgfHwgW10pXG4gICAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbiA9PlxuICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi50eXBlICE9PSAnRnV0dXJlUm91dGUnIHx8XG4gICAgICAgICAgICAgICAgICAoc3VnZ2VzdGlvbi50eXBlID09PSAnRnV0dXJlUm91dGUnICYmXG4gICAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24ucHJvcGVydGllcy50aW1lID4gbW9tZW50KCkudW5peCgpKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAubWFwKHN1Z2dlc3Rpb24gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ0N1cnJlbnRMb2NhdGlvbicgfHxcbiAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ1NlbGVjdEZyb21NYXAnIHx8XG4gICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnR5cGUgPT09ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyB8fFxuICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi50eXBlID09PSAnYmFjaydcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0ZWQgPSB7IC4uLnN1Z2dlc3Rpb24gfTtcbiAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWQucHJvcGVydGllcy5sYWJlbElkID0gaTE4bmV4dC50KFxuICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnByb3BlcnRpZXMubGFiZWxJZCxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdHJhbnNsYXRlZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN1Z2dlc3Rpb247XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB2YWx1ZSA9PT0gdGhpcy5zdGF0ZS52YWx1ZSB8fFxuICAgICAgICAgICAgICB2YWx1ZSA9PT0gdGhpcy5zdGF0ZS5wZW5kaW5nU2VsZWN0aW9uIHx8XG4gICAgICAgICAgICAgIHRoaXMuc3RhdGUucGVuZGluZ1NlbGVjdGlvbiA9PT0gJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnIHx8XG4gICAgICAgICAgICAgIHRoaXMuc3RhdGUucGVuZGluZ1NlbGVjdGlvbiA9PT0gJ2JhY2snIHx8XG4gICAgICAgICAgICAgIHRoaXMuc3RhdGUucGVuZGluZ1NlbGVjdGlvbiA9PT0gJ0Z1dHVyZVJvdXRlJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICBzdWdnZXN0aW9ucyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICgpID0+IHRoaXMuY2hlY2tQZW5kaW5nU2VsZWN0aW9uKCksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGlzLnByb3BzLnBhdGhPcHRzLFxuICAgICAgICAgIHRoaXMucHJvcHMucmVmUG9pbnQsXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICk7XG4gIH07XG5cbiAgY2xlYXJJbnB1dCA9ICgpID0+IHtcbiAgICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAgIGVkaXRpbmc6IHRydWUsXG4gICAgICB2YWx1ZTogJycsXG4gICAgICBzb3VyY2VzOiB0aGlzLnByb3BzLnNvdXJjZXMsXG4gICAgICBvd25QbGFjZXM6IGZhbHNlLFxuICAgIH07XG4gICAgLy8gbXVzdCB1cGRhdGUgc3VnZ2VzdGlvbnNcbiAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlLCAoKSA9PlxuICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6ICcnLCBjbGVhbkV4ZWN1dGVkOiB0cnVlIH0pLFxuICAgICk7XG4gICAgaWYgKHRoaXMucHJvcHMub25DbGVhcikge1xuICAgICAgdGhpcy5wcm9wcy5vbkNsZWFyKHRoaXMucHJvcHMuaWQpO1xuICAgIH1cbiAgICB0aGlzLmlucHV0LmZvY3VzKCk7XG4gIH07XG5cbiAgaW5wdXRDbGlja2VkID0gaW5wdXRWYWx1ZSA9PiB7XG4gICAgdGhpcy5pbnB1dC5mb2N1cygpO1xuICAgIGlmICh0aGlzLnByb3BzLmlzTW9iaWxlKSB7XG4gICAgICB0aGlzLnByb3BzLmxvY2soKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnN0YXRlLmVkaXRpbmcpIHtcbiAgICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgICBlZGl0aW5nOiB0cnVlLFxuICAgICAgICAvLyByZXNldCBhdCBzdGFydCwganVzdCBpbiBjYXNlIHdlIG1pc3NlZCBzb21ldGhpbmdcbiAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogbnVsbCxcbiAgICAgICAgcmVuZGVyTW9iaWxlU2VhcmNoOiB0aGlzLnByb3BzLmlzTW9iaWxlLFxuICAgICAgfTtcblxuICAgICAgLy8gRFQtMzI2MzogYWRkZWQgc3RhdGVLZXlEb3duXG4gICAgICBjb25zdCBzdGF0ZUtleURvd24gPSB7XG4gICAgICAgIGVkaXRpbmc6IHRydWUsXG4gICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IG51bGwsXG4gICAgICAgIHZhbHVlOiBpbnB1dFZhbHVlLFxuICAgICAgfTtcblxuICAgICAgaWYgKCF0aGlzLnN0YXRlLnN1Z2dlc3Rpb25zLmxlbmd0aCkge1xuICAgICAgICAvLyBEVC0zMjYzOiBhZGRlZCBpZi1lbHNlIHN0YXRlbWVudFxuICAgICAgICBpZiAodHlwZW9mIGlucHV0VmFsdWUgPT09ICdvYmplY3QnIHx8ICFpbnB1dFZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSwgKCkgPT5cbiAgICAgICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiB0aGlzLnN0YXRlLnZhbHVlIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZShzdGF0ZUtleURvd24sICgpID0+XG4gICAgICAgICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogaW5wdXRWYWx1ZSB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogdGhpcy5zdGF0ZS52YWx1ZSB9KTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHN0b3JlSW5wdXRSZWZlcmVuY2UgPSBhdXRvc3VnZ2VzdCA9PiB7XG4gICAgaWYgKGF1dG9zdWdnZXN0ICE9PSBudWxsKSB7XG4gICAgICB0aGlzLmlucHV0ID0gYXV0b3N1Z2dlc3QuaW5wdXQ7XG4gICAgICBpZiAodGhpcy5wcm9wcy5zdG9yZVJlZikge1xuICAgICAgICB0aGlzLnByb3BzLnN0b3JlUmVmKGF1dG9zdWdnZXN0LmlucHV0KTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLy8gRmlsbCBpbnB1dCB3aGVuIHVzZXIgY2xpY2tzIGZpbGwgaW5wdXQgYnV0dG9uIGluIHN0cmVldCBzdWdnZXN0aW9uIGl0ZW1cbiAgZmlsbElucHV0ID0gbmV3VmFsdWUgPT4ge1xuICAgIHRoaXMuZklucHV0ID0gbmV3VmFsdWUucHJvcGVydGllcy5uYW1lO1xuICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgZWRpdGluZzogdHJ1ZSxcbiAgICAgIHZhbHVlOiBuZXdWYWx1ZS5wcm9wZXJ0aWVzLm5hbWUsXG4gICAgICBjaGVja1BlbmRpbmdTZWxlY3Rpb246IG5ld1ZhbHVlLFxuICAgICAgdmFsaWQ6IHRydWUsXG4gICAgfTtcbiAgICAvLyBtdXN0IHVwZGF0ZSBzdWdnZXN0aW9uc1xuICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUpO1xuICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiBuZXdWYWx1ZS5wcm9wZXJ0aWVzLm5hbWUgfSk7XG4gICAgdGhpcy5pbnB1dC5mb2N1cygpO1xuICB9O1xuXG4gIHJlbmRlckl0ZW0gPSBpdGVtID0+IHtcbiAgICBjb25zdCBuZXdJdGVtID1cbiAgICAgIGl0ZW0udHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJ1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICB0cmFuc2xhdGVkVGV4dDogdHJhbnNsYXRlRnV0dXJlUm91dGVTdWdnZXN0aW9uVGltZShpdGVtKSxcbiAgICAgICAgICB9XG4gICAgICAgIDogaXRlbTtcbiAgICBjb25zdCBjb250ZW50ID0gZ2V0U3VnZ2VzdGlvbkNvbnRlbnQoaXRlbSk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdWdnZXN0aW9uSXRlbVxuICAgICAgICBpdGVtPXtuZXdJdGVtfVxuICAgICAgICBjb250ZW50PXtjb250ZW50fVxuICAgICAgICBsb2FkaW5nPXshdGhpcy5zdGF0ZS52YWxpZH1cbiAgICAgICAgaXNNb2JpbGU9e3RoaXMucHJvcHMuaXNNb2JpbGV9XG4gICAgICAgIGFyaWFGYXZvdXJpdGVTdHJpbmc9e2kxOG5leHQudCgnZmF2b3VyaXRlJyl9XG4gICAgICAgIGNvbG9yPXt0aGlzLnByb3BzLmNvbG9yfVxuICAgICAgICBhY2Nlc3NpYmxlUHJpbWFyeUNvbG9yPXt0aGlzLnByb3BzLmFjY2Vzc2libGVQcmltYXJ5Q29sb3J9XG4gICAgICAgIGZpbGxJbnB1dD17dGhpcy5maWxsSW5wdXR9XG4gICAgICAgIGZvbnRXZWlnaHRzPXt0aGlzLnByb3BzLmZvbnRXZWlnaHRzfVxuICAgICAgICBnZXRBdXRvU3VnZ2VzdEljb25zPXt0aGlzLnByb3BzLmdldEF1dG9TdWdnZXN0SWNvbnN9XG4gICAgICAgIG1vZGVJY29uQ29sb3JzPXt0aGlzLnByb3BzLm1vZGVJY29uQ29sb3JzfVxuICAgICAgICBtb2RlU2V0PXt0aGlzLnByb3BzLm1vZGVTZXR9XG4gICAgICAvPlxuICAgICk7XG4gIH07XG5cbiAgY2xvc2VNb2JpbGVTZWFyY2ggPSAoKSA9PiB7XG4gICAgdGhpcy5wcm9wcy51bmxvY2soKTtcbiAgICB0aGlzLnNldFN0YXRlKFxuICAgICAge1xuICAgICAgICByZW5kZXJNb2JpbGVTZWFyY2g6IGZhbHNlLFxuICAgICAgICB2YWx1ZTogdGhpcy5wcm9wcy52YWx1ZSxcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCB0aGlzLnN0YXRlLnNjcm9sbFkpO1xuICAgICAgICB0aGlzLm9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZCgpO1xuICAgICAgfSxcbiAgICApO1xuICB9O1xuXG4gIGtleURvd24gPSBldmVudCA9PiB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uRG9uZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBrZXlDb2RlID0gZXZlbnQua2V5O1xuICAgIGlmIChrZXlDb2RlID09PSAnRXNjYXBlJykge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGVkaXRpbmc6IGZhbHNlIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdGF0ZS5lZGl0aW5nKSB7XG4gICAgICBpZiAoa2V5Q29kZSA9PT0gJ0VudGVyJyAmJiB0aGlzLnN0YXRlLnZhbHVlICE9PSAnJykge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsgcGVuZGluZ1NlbGVjdGlvbjogdHJ1ZSB9LCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6IHRoaXMuc3RhdGUudmFsdWUgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5pbnB1dENsaWNrZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAoa2V5Q29kZSA9PT0gJ0VudGVyJyB8fCBrZXlDb2RlID09PSAnQXJyb3dEb3duJykgJiZcbiAgICAgIHRoaXMuc3RhdGUudmFsdWUgPT09ICcnXG4gICAgKSB7XG4gICAgICB0aGlzLmNsZWFySW5wdXQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5Q29kZSA9PT0gJ0Fycm93RG93bicgJiYgdGhpcy5zdGF0ZS52YWx1ZSAhPT0gJycpIHtcbiAgICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgICBlZGl0aW5nOiB0cnVlLFxuICAgICAgICB2YWx1ZTogdGhpcy5zdGF0ZS52YWx1ZSxcbiAgICAgIH07XG4gICAgICAvLyBtdXN0IHVwZGF0ZSBzdWdnZXN0aW9uc1xuICAgICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSwgKCkgPT5cbiAgICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6IHRoaXMuc3RhdGUudmFsdWUgfSksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc3RhdGUuZWRpdGluZykge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGVkaXRpbmc6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgaWYgKGtleUNvZGUgPT09ICdUYWInKSB7XG4gICAgICB0aGlzLm9uQmx1cigpO1xuICAgIH1cbiAgfTtcblxuICBzdWdnZXN0aW9uQXNBcmlhQ29udGVudCA9ICgpID0+IHtcbiAgICBsZXQgbGFiZWwgPSBbXTtcbiAgICBjb25zdCBmaXJzdFN1Z2dlc3Rpb24gPSB0aGlzLnN0YXRlLnN1Z2dlc3Rpb25zWzBdO1xuICAgIGlmIChmaXJzdFN1Z2dlc3Rpb24pIHtcbiAgICAgIGlmIChmaXJzdFN1Z2dlc3Rpb24udHlwZSAmJiBmaXJzdFN1Z2dlc3Rpb24udHlwZS5pbmNsdWRlcygnRmF2b3VyaXRlJykpIHtcbiAgICAgICAgbGFiZWwucHVzaChpMThuZXh0LnQoJ2Zhdm91cml0ZScpKTtcbiAgICAgIH1cbiAgICAgIGxhYmVsID0gbGFiZWwuY29uY2F0KGdldFN1Z2dlc3Rpb25Db250ZW50KHRoaXMuc3RhdGUuc3VnZ2VzdGlvbnNbMF0pKTtcbiAgICB9XG4gICAgcmV0dXJuIFsuLi5uZXcgU2V0KGxhYmVsKV0uam9pbignIC0gJyk7XG4gIH07XG5cbiAgY2xlYXJPbGRTZWFyY2hlcyA9ICgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjb250ZXh0LFxuICAgICAgY2xlYXJPbGRTZWFyY2hlcyxcbiAgICAgIGNsZWFyRnV0dXJlUm91dGVzLFxuICAgIH0gPSB0aGlzLnByb3BzLnNlYXJjaENvbnRleHQ7XG4gICAgaWYgKGNvbnRleHQgJiYgY2xlYXJPbGRTZWFyY2hlcykge1xuICAgICAgY2xlYXJPbGRTZWFyY2hlcyhjb250ZXh0KTtcbiAgICAgIGlmIChjbGVhckZ1dHVyZVJvdXRlcykge1xuICAgICAgICBjbGVhckZ1dHVyZVJvdXRlcyhjb250ZXh0KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiB0aGlzLnN0YXRlLnZhbHVlIH0pO1xuICAgIH1cbiAgfTtcblxuICBpc09yaWdpbkRlc3RpbmF0aW9uT3JWaWFwb2ludCA9ICgpID0+XG4gICAgdGhpcy5wcm9wcy5pZCA9PT0gJ29yaWdpbicgfHxcbiAgICB0aGlzLnByb3BzLmlkID09PSAnZGVzdGluYXRpb24nIHx8XG4gICAgdGhpcy5wcm9wcy5pZCA9PT0gJ3ZpYS1wb2ludCcgfHxcbiAgICB0aGlzLnByb3BzLmlkID09PSAnb3JpZ2luLXN0b3AtbmVhci15b3UnO1xuXG4gIG9uRm9jdXMgPSAoKSA9PiB7XG4gICAgY29uc3QgcG9zaXRpb25zID0gW1xuICAgICAgJ1ZhbGl0dHUgc2lqYWludGknLFxuICAgICAgJ055a3lpbmVuIHNpamFpbnRpc2knLFxuICAgICAgJ0N1cnJlbnQgcG9zaXRpb24nLFxuICAgICAgJ1NlbGVjdGVkIGxvY2F0aW9uJyxcbiAgICAgICdWYWxkIHBvc2l0aW9uJyxcbiAgICAgICdBbnbDpG5kIG1pbiBwb3NpdGlvbicsXG4gICAgICAnTWluIHBvc2l0aW9uJyxcbiAgICAgICdLw6R5dMOkIG55a3lpc3TDpCBzaWphaW50aWEnLFxuICAgICAgJ1VzZSBjdXJyZW50IGxvY2F0aW9uJyxcbiAgICAgICdZb3VyIGN1cnJlbnQgbG9jYXRpb24nLFxuICAgIF07XG4gICAgaWYgKHBvc2l0aW9ucy5pbmNsdWRlcyh0aGlzLnN0YXRlLnZhbHVlKSkge1xuICAgICAgdGhpcy5jbGVhcklucHV0KCk7XG4gICAgfVxuICAgIGNvbnN0IHNjcm9sbFkgPSB3aW5kb3cucGFnZVlPZmZzZXQ7XG4gICAgcmV0dXJuIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgc2Nyb2xsWSxcbiAgICB9KTtcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgaWYgKGkxOG5leHQubGFuZ3VhZ2UgIT09IHRoaXMucHJvcHMubGFuZykge1xuICAgICAgaTE4bmV4dC5jaGFuZ2VMYW5ndWFnZSh0aGlzLnByb3BzLmxhbmcpO1xuICAgIH1cbiAgICBjb25zdCB7XG4gICAgICB2YWx1ZSxcbiAgICAgIHN1Z2dlc3Rpb25zLFxuICAgICAgcmVuZGVyTW9iaWxlU2VhcmNoLFxuICAgICAgY2xlYW5FeGVjdXRlZCxcbiAgICB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBpbnB1dFByb3BzID0ge1xuICAgICAgcGxhY2Vob2xkZXI6IHRoaXMucHJvcHMudHJhbnNsYXRlZFBsYWNlaG9sZGVyXG4gICAgICAgID8gdGhpcy5wcm9wcy50cmFuc2xhdGVkUGxhY2Vob2xkZXJcbiAgICAgICAgOiBpMThuZXh0LnQodGhpcy5wcm9wcy5wbGFjZWhvbGRlciksXG4gICAgICB2YWx1ZSxcbiAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlLFxuICAgICAgb25CbHVyOiB0aGlzLm9uQmx1cixcbiAgICAgIGNsYXNzTmFtZTogY3goXG4gICAgICAgIGAke3N0eWxlcy5pbnB1dH0gJHtcbiAgICAgICAgICB0aGlzLnByb3BzLmlzTW9iaWxlICYmIHRoaXMucHJvcHMudHJhbnNwb3J0TW9kZSA/IHN0eWxlcy50aGluIDogJydcbiAgICAgICAgfSAke3N0eWxlc1t0aGlzLnByb3BzLmlkXSB8fCAnJ30gJHtcbiAgICAgICAgICB0aGlzLnN0YXRlLnZhbHVlID8gc3R5bGVzLmhhc1ZhbHVlIDogJydcbiAgICAgICAgfSAke3RoaXMucHJvcHMuaW5wdXRDbGFzc05hbWV9YCxcbiAgICAgICksXG4gICAgICBvbktleURvd246IHRoaXMua2V5RG93biwgLy8gRFQtMzI2M1xuICAgICAgcmVxdWlyZWQ6IHRoaXMucHJvcHMucmVxdWlyZWQsXG4gICAgfTtcbiAgICBjb25zdCBhcmlhQmFySWQgPSB0aGlzLnByb3BzLmlkLnJlcGxhY2UoJ3NlYXJjaGZpZWxkLScsICcnKTtcbiAgICBsZXQgU2VhcmNoQmFySWQgPSB0aGlzLnByb3BzLmFyaWFMYWJlbCB8fCBpMThuZXh0LnQoYXJpYUJhcklkKTtcbiAgICBTZWFyY2hCYXJJZCA9IFNlYXJjaEJhcklkLnJlcGxhY2UoJ3NlYXJjaGZpZWxkLScsICcnKTtcbiAgICBjb25zdCBhcmlhUmVxdWlyZWRUZXh0ID0gdGhpcy5wcm9wcy5yZXF1aXJlZFxuICAgICAgPyBgJHtpMThuZXh0LnQoJ3JlcXVpcmVkJyl9LmBcbiAgICAgIDogJyc7XG4gICAgY29uc3QgYXJpYUxhYmVsVGV4dCA9IHRoaXMucHJvcHMuaXNNb2JpbGVcbiAgICAgID8gaTE4bmV4dC50KCdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW9iaWxlJylcbiAgICAgIDogaTE4bmV4dC50KCdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtZGVza3RvcCcpO1xuICAgIGNvbnN0IGFyaWFTdWdnZXN0aW9uTGVuID0gaTE4bmV4dC50KCdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuJywge1xuICAgICAgY291bnQ6IHN1Z2dlc3Rpb25zLmxlbmd0aCxcbiAgICB9KTtcblxuICAgIGNvbnN0IGFyaWFDdXJyZW50U3VnZ2VzdGlvbiA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25Bc0FyaWFDb250ZW50KCkgfHwgdGhpcy5wcm9wcy52YWx1ZSkge1xuICAgICAgICByZXR1cm4gaTE4bmV4dC50KCdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJywge1xuICAgICAgICAgIHNlbGVjdGlvbjogdGhpcy5zdWdnZXN0aW9uQXNBcmlhQ29udGVudCgpIHx8IHRoaXMucHJvcHMudmFsdWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuICcnO1xuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlc1snc3Itb25seSddfSByb2xlPVwiYWxlcnRcIj5cbiAgICAgICAgICB7IXRoaXMuc3RhdGUudHlwaW5nICYmXG4gICAgICAgICAgICB0aGlzLnN0YXRlLmVkaXRpbmcgJiZcbiAgICAgICAgICAgIGAke2FyaWFTdWdnZXN0aW9uTGVufSAke2FyaWFDdXJyZW50U3VnZ2VzdGlvbigpfWB9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAge3RoaXMucHJvcHMuaXNNb2JpbGUgJiYgKFxuICAgICAgICAgIDxNb2JpbGVTZWFyY2hcbiAgICAgICAgICAgIHNlYXJjaE9wZW49e3JlbmRlck1vYmlsZVNlYXJjaH1cbiAgICAgICAgICAgIGFwcEVsZW1lbnQ9e3RoaXMucHJvcHMuYXBwRWxlbWVudH1cbiAgICAgICAgICAgIGNsZWFyT2xkU2VhcmNoZXM9e3RoaXMuY2xlYXJPbGRTZWFyY2hlc31cbiAgICAgICAgICAgIGlkPXt0aGlzLnByb3BzLmlkfVxuICAgICAgICAgICAgY2xlYXJJbnB1dD17dGhpcy5jbGVhcklucHV0fVxuICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUudmFsdWV9XG4gICAgICAgICAgICBzdWdnZXN0aW9ucz17W1xuICAgICAgICAgICAgICAuLi5zdWdnZXN0aW9ucyxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdjbGVhci1zZWFyY2gtaGlzdG9yeScsXG4gICAgICAgICAgICAgICAgbGFiZWxJZDogaTE4bmV4dC50KCdjbGVhci1zZWFyY2gtaGlzdG9yeScpLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIGlucHV0UHJvcHM9e3tcbiAgICAgICAgICAgICAgLi4uaW5wdXRQcm9wcyxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMuaXNPcmlnaW5EZXN0aW5hdGlvbk9yVmlhcG9pbnQoKVxuICAgICAgICAgICAgICAgID8gaTE4bmV4dC50KCdhZGRyZXNzLXBsYWNlLW9yLWJ1c2luZXNzJylcbiAgICAgICAgICAgICAgICA6IGlucHV0UHJvcHMucGxhY2Vob2xkZXIsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgZmV0Y2hGdW5jdGlvbj17dGhpcy5mZXRjaEZ1bmN0aW9ufVxuICAgICAgICAgICAgb25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkPXt0aGlzLm9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZH1cbiAgICAgICAgICAgIGdldFN1Z2dlc3Rpb25WYWx1ZT17dGhpcy5nZXRTdWdnZXN0aW9uVmFsdWV9XG4gICAgICAgICAgICByZW5kZXJTdWdnZXN0aW9uPXt0aGlzLnJlbmRlckl0ZW19XG4gICAgICAgICAgICBjbG9zZUhhbmRsZT17dGhpcy5jbG9zZU1vYmlsZVNlYXJjaH1cbiAgICAgICAgICAgIGFyaWFMYWJlbD17YXJpYVJlcXVpcmVkVGV4dFxuICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgLmNvbmNhdChTZWFyY2hCYXJJZClcbiAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgIC5jb25jYXQoYXJpYUN1cnJlbnRTdWdnZXN0aW9uKCkpfVxuICAgICAgICAgICAgbGFiZWw9e1xuICAgICAgICAgICAgICB0aGlzLnByb3BzLm1vYmlsZUxhYmVsXG4gICAgICAgICAgICAgICAgPyB0aGlzLnByb3BzLm1vYmlsZUxhYmVsXG4gICAgICAgICAgICAgICAgOiBpMThuZXh0LnQodGhpcy5wcm9wcy5pZClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9uU3VnZ2VzdGlvblNlbGVjdGVkPXt0aGlzLm9uU2VsZWN0ZWR9XG4gICAgICAgICAgICBkaWFsb2dIZWFkZXJUZXh0PXtpMThuZXh0LnQoJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJyl9XG4gICAgICAgICAgICBkaWFsb2dQcmltYXJ5QnV0dG9uVGV4dD17aTE4bmV4dC50KCdkZWxldGUnKX1cbiAgICAgICAgICAgIGRpYWxvZ1NlY29uZGFyeUJ1dHRvblRleHQ9e2kxOG5leHQudCgnY2FuY2VsJyl9XG4gICAgICAgICAgICBjbGVhcklucHV0QnV0dG9uVGV4dD17aTE4bmV4dC50KCdjbGVhci1idXR0b24tbGFiZWwnKX1cbiAgICAgICAgICAgIGZvY3VzSW5wdXQ9e2NsZWFuRXhlY3V0ZWR9XG4gICAgICAgICAgICBjb2xvcj17dGhpcy5wcm9wcy5jb2xvcn1cbiAgICAgICAgICAgIGhvdmVyQ29sb3I9e3RoaXMucHJvcHMuaG92ZXJDb2xvcn1cbiAgICAgICAgICAgIGFjY2Vzc2libGVQcmltYXJ5Q29sb3I9e3RoaXMucHJvcHMuYWNjZXNzaWJsZVByaW1hcnlDb2xvcn1cbiAgICAgICAgICAgIGZvbnRXZWlnaHRzPXt0aGlzLnByb3BzLmZvbnRXZWlnaHRzfVxuICAgICAgICAgICAgc2hvd1Njcm9sbD17dGhpcy5wcm9wcy5zaG93U2Nyb2xsfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIHshcmVuZGVyTW9iaWxlU2VhcmNoICYmIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e2N4KFtcbiAgICAgICAgICAgICAgc3R5bGVzWydhdXRvc3VnZ2VzdC1pbnB1dC1jb250YWluZXInXSxcbiAgICAgICAgICAgICAgc3R5bGVzW3RoaXMucHJvcHMuaWRdLFxuICAgICAgICAgICAgXSl9XG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAnLS1jb2xvcic6IGAke3RoaXMucHJvcHMuY29sb3J9YCxcbiAgICAgICAgICAgICAgJy0taG92ZXItY29sb3InOiBgJHt0aGlzLnByb3BzLmhvdmVyQ29sb3J9YCxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RoaXMucHJvcHMuaWNvbiAmJiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2N4KFtcbiAgICAgICAgICAgICAgICAgIHN0eWxlc1tgYXV0b3N1Z2dlc3QtaW5wdXQtaWNvbmBdLFxuICAgICAgICAgICAgICAgICAgc3R5bGVzW3RoaXMucHJvcHMuaWRdLFxuICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5pbnB1dENsYXNzTmFtZSAmJlxuICAgICAgICAgICAgICAgICAgICBgJHt0aGlzLnByb3BzLmlucHV0Q2xhc3NOYW1lfS1pbnB1dC1pY29uYCxcbiAgICAgICAgICAgICAgICBdKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxJY29uIGltZz17YCR7dGhpcy5wcm9wcy5pY29ufWB9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxBdXRvc3VnZ2VzdFxuICAgICAgICAgICAgICBhbHdheXNSZW5kZXJTdWdnZXN0aW9ucz17dGhpcy5zdGF0ZS5lZGl0aW5nfVxuICAgICAgICAgICAgICBpZD17dGhpcy5wcm9wcy5pZH1cbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbnM9e3N1Z2dlc3Rpb25zfVxuICAgICAgICAgICAgICBvblN1Z2dlc3Rpb25zRmV0Y2hSZXF1ZXN0ZWQ9e3RoaXMuZmV0Y2hGdW5jdGlvbn1cbiAgICAgICAgICAgICAgb25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkPXt0aGlzLm9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZH1cbiAgICAgICAgICAgICAgZ2V0U3VnZ2VzdGlvblZhbHVlPXt0aGlzLmdldFN1Z2dlc3Rpb25WYWx1ZX1cbiAgICAgICAgICAgICAgcmVuZGVyU3VnZ2VzdGlvbj17dGhpcy5yZW5kZXJJdGVtfVxuICAgICAgICAgICAgICBpbnB1dFByb3BzPXt7XG4gICAgICAgICAgICAgICAgLi4uaW5wdXRQcm9wcyxcbiAgICAgICAgICAgICAgICBvbkZvY3VzOiB0aGlzLm9uRm9jdXMsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIGZvY3VzSW5wdXRPblN1Z2dlc3Rpb25DbGlja1xuICAgICAgICAgICAgICBzaG91bGRSZW5kZXJTdWdnZXN0aW9ucz17KCkgPT4gdGhpcy5zdGF0ZS5lZGl0aW5nfVxuICAgICAgICAgICAgICBoaWdobGlnaHRGaXJzdFN1Z2dlc3Rpb249eyF0aGlzLnN0YXRlLm93blBsYWNlc31cbiAgICAgICAgICAgICAgdGhlbWU9e3N0eWxlc31cbiAgICAgICAgICAgICAgcmVuZGVySW5wdXRDb21wb25lbnQ9e3AgPT4gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPXtzdHlsZXNbJ3NyLW9ubHknXX0gaHRtbEZvcj17dGhpcy5wcm9wcy5pZH0+XG4gICAgICAgICAgICAgICAgICAgIHthcmlhQ3VycmVudFN1Z2dlc3Rpb24oKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoYXJpYVJlcXVpcmVkVGV4dClcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KFNlYXJjaEJhcklkKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoYXJpYUxhYmVsVGV4dCl9XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2FyaWFDdXJyZW50U3VnZ2VzdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChhcmlhUmVxdWlyZWRUZXh0KVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoU2VhcmNoQmFySWQpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChhcmlhTGFiZWxUZXh0KX1cbiAgICAgICAgICAgICAgICAgICAgaWQ9e3RoaXMucHJvcHMuaWR9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuaW5wdXRDbGlja2VkfVxuICAgICAgICAgICAgICAgICAgICBvbktleURvd249e3RoaXMua2V5RG93bn1cbiAgICAgICAgICAgICAgICAgICAgey4uLnB9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAge3RoaXMuc3RhdGUudmFsdWUgJiYgdGhpcy5jbGVhckJ1dHRvbigpfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICBvblN1Z2dlc3Rpb25TZWxlY3RlZD17dGhpcy5vblNlbGVjdGVkfVxuICAgICAgICAgICAgICByZWY9e3RoaXMuc3RvcmVJbnB1dFJlZmVyZW5jZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICk7XG4gIH1cbn1cblxuY29uc3QgRFRBdXRvc3VnZ2VzdFdpdGhTY3JvbGxMb2NrID0gd2l0aFNjcm9sbExvY2soRFRBdXRvc3VnZ2VzdCk7XG5cbmV4cG9ydCBkZWZhdWx0IERUQXV0b3N1Z2dlc3RXaXRoU2Nyb2xsTG9jaztcbiIsImltcG9ydCB7IGdldE5hbWVMYWJlbCB9IGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC11bmlxLWJ5LWxhYmVsJztcbi8qKlxuICogUmV0dXJucyBsYWJlbCBmb3IgcHJvcGVydGllc1xuICpcbiAqIEBuYW1lIGdldExhYmVsXG4gKiBAcGFyYW0geyp9IHByb3BlcnRpZXMgb2JqZWN0IHRoYXQgY29udGFpbnMgXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZS9mYWxzZVxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHByb3BlcnRpZXM6IHtcbiAgICBcImlkXCI6IFwiR1RGUzpNQVRLQTozMTg5MTVcIixcbiAgICBcImdpZFwiOiBcImd0ZnNtYXRrYTpzdGF0aW9uOkdURlM6TUFUS0E6MzE4OTE1XCIsXG4gICAgXCJsYXllclwiOiBcInN0YXRpb25cIixcbiAgICBcInNvdXJjZVwiOiBcImd0ZnNtYXRrYVwiLFxuICAgIFwic291cmNlX2lkXCI6IFwiR1RGUzpNQVRLQTozMTg5MTVcIixcbiAgICBcIm5hbWVcIjogXCJSYXV0YXRpZW50b3JpXCIsXG4gICAgXCJwb3N0YWxjb2RlXCI6IFwiMDAxMDBcIixcbiAgICBcInBvc3RhbGNvZGVfZ2lkXCI6IFwid2hvc29uZmlyc3Q6cG9zdGFsY29kZTo0MjE0Nzk1NjlcIixcbiAgICBcImNvbmZpZGVuY2VcIjogMSxcbiAgICBcImFjY3VyYWN5XCI6IFwiY2VudHJvaWRcIixcbiAgICBcImNvdW50cnlcIjogXCJTdW9taVwiLFxuICAgIFwiY291bnRyeV9naWRcIjogXCJ3aG9zb25maXJzdDpjb3VudHJ5OjBcIixcbiAgICBcImNvdW50cnlfYVwiOiBcIkZJTlwiLFxuICAgIFwicmVnaW9uXCI6IFwiVXVzaW1hYVwiLFxuICAgIFwicmVnaW9uX2dpZFwiOiBcIndob3NvbmZpcnN0OnJlZ2lvbjo4NTY4MzA2N1wiLFxuICAgIFwibG9jYWxhZG1pblwiOiBcIkhlbHNpbmtpXCIsXG4gICAgXCJsb2NhbGFkbWluX2dpZFwiOiBcIndob3NvbmZpcnN0OmxvY2FsYWRtaW46OTA3MTk5NzE1XCIsXG4gICAgXCJsb2NhbGl0eVwiOiBcIkhlbHNpbmtpXCIsXG4gICAgXCJsb2NhbGl0eV9naWRcIjogXCJ3aG9zb25maXJzdDpsb2NhbGl0eToxMDE3NDg0MTdcIixcbiAgICBcIm5laWdoYm91cmhvb2RcIjogXCJLbHV1dmlcIixcbiAgICBcIm5laWdoYm91cmhvb2RfZ2lkXCI6IFwid2hvc29uZmlyc3Q6bmVpZ2hib3VyaG9vZDo4NTg5ODg0N1wiLFxuICAgIFwibGFiZWxcIjogXCJSYXV0YXRpZW50b3JpLCBrb2lsbGluZW4sIEtsdXV2aSwgSGVsc2lua2lcIlxuICAgIH1cbiAqIGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLmdldExhYmVsKHBhcmFtMSwgcGFyYW0yKTtcbiAqIC8vPXRydWVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0TGFiZWwocHJvcGVydGllcykge1xuICBjb25zdCBwYXJ0cyA9IGdldE5hbWVMYWJlbChwcm9wZXJ0aWVzLCB0cnVlKTtcbiAgc3dpdGNoIChwcm9wZXJ0aWVzLmxheWVyKSB7XG4gICAgY2FzZSAnc2VsZWN0RnJvbU1hcCc6XG4gICAgY2FzZSAnY3VycmVudFBvc2l0aW9uJzpcbiAgICBjYXNlICdvd25Mb2NhdGlvbnMnOlxuICAgIGNhc2UgJ2JhY2snOlxuICAgICAgcmV0dXJuIHBhcnRzWzFdIHx8IHBhcnRzWzBdO1xuICAgIGNhc2UgJ2Zhdm91cml0ZUJpa2VSZW50YWxTdGF0aW9uJzpcbiAgICBjYXNlICdmYXZvdXJpdGVQbGFjZSc6XG4gICAgICByZXR1cm4gcGFydHNbMF07XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBwYXJ0cy5sZW5ndGggPiAxICYmIHBhcnRzWzFdICE9PSAnJ1xuICAgICAgICA/IHBhcnRzLmpvaW4oJywgJylcbiAgICAgICAgOiBwYXJ0c1sxXSB8fCBwYXJ0c1swXTtcbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBob29rcyBmcm9tICdAaHNsLWZpL2hvb2tzJztcblxuY29uc3Qgd2l0aFNjcm9sbExvY2sgPSBDb21wb25lbnQgPT4ge1xuICByZXR1cm4gcHJvcHMgPT4ge1xuICAgIGNvbnN0IHsgbG9jaywgdW5sb2NrIH0gPSBob29rcy51c2VTY3JvbGxMb2NrKCk7XG5cbiAgICByZXR1cm4gPENvbXBvbmVudCBsb2NrPXtsb2NrfSB1bmxvY2s9e3VubG9ja30gey4uLnByb3BzfSAvPjtcbiAgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTY3JvbGxMb2NrO1xuIl0sIm5hbWVzIjpbIl90eXBlb2YiLCJvYmoiLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwiX2V4dGVuZHMiLCJPYmplY3QiLCJhc3NpZ24iLCJ0YXJnZXQiLCJpIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwic291cmNlIiwia2V5IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiYXBwbHkiLCJ0aGlzIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJhcnIiLCJsZW4iLCJhcnIyIiwiQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJvIiwibWluTGVuIiwiYXJyYXlMaWtlVG9BcnJheSIsIm4iLCJ0b1N0cmluZyIsInNsaWNlIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiaXNBcnJheSIsImFycmF5V2l0aG91dEhvbGVzIiwiaXRlciIsIml0ZXJhYmxlVG9BcnJheSIsInVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiVHlwZUVycm9yIiwibm9uSXRlcmFibGVTcHJlYWQiLCJfY2xhc3NDYWxsQ2hlY2siLCJpbnN0YW5jZSIsIkNvbnN0cnVjdG9yIiwiX2RlZmluZVByb3BlcnRpZXMiLCJwcm9wcyIsImRlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJkZWZpbmVQcm9wZXJ0eSIsIl9jcmVhdGVDbGFzcyIsInByb3RvUHJvcHMiLCJzdGF0aWNQcm9wcyIsIl9zZXRQcm90b3R5cGVPZiIsInAiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsIl9pbmhlcml0cyIsInN1YkNsYXNzIiwic3VwZXJDbGFzcyIsImNyZWF0ZSIsInZhbHVlIiwiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsInNlbGYiLCJSZWZlcmVuY2VFcnJvciIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwiYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwiX2dldFByb3RvdHlwZU9mIiwiZ2V0UHJvdG90eXBlT2YiLCJfc2xpY2VkVG9BcnJheSIsImFycmF5V2l0aEhvbGVzIiwiX2FyciIsIl9uIiwiX2QiLCJfZSIsInVuZGVmaW5lZCIsIl9zIiwiX2kiLCJuZXh0IiwiZG9uZSIsInB1c2giLCJlcnIiLCJpdGVyYWJsZVRvQXJyYXlMaW1pdCIsIm5vbkl0ZXJhYmxlUmVzdCIsInRydUVxIiwidmFsMSIsInZhbDIiLCJpc0R1cGxpY2F0ZSIsIml0ZW0xIiwiaXRlbTIiLCJwcm9wczEiLCJwcm9wZXJ0aWVzIiwicHJvcHMyIiwidHlwZSIsIm8xIiwib3JpZ2luIiwiZDEiLCJkZXN0aW5hdGlvbiIsIm8yIiwiZDIiLCJsb2NhbGl0eSIsImxheWVyIiwibGFiZWxJZCIsImd0ZnNJZCIsImdpZCIsImluY2x1ZGVzIiwicDEiLCJnZW9tZXRyeSIsImNvb3JkaW5hdGVzIiwicDIiLCJNYXRoIiwiYWJzIiwibGFiZWwiLCJhZGRyZXNzIiwibm9ybWFsaXplIiwic3RyIiwiaXNTdHJpbmciLCJ0b0xvd2VyQ2FzZSIsIkxheWVyVHlwZSIsIkFkZHJlc3MiLCJCYWNrIiwiQ3VycmVudFBvc2l0aW9uIiwiRmF2b3VyaXRlU3RvcCIsIkZhdm91cml0ZVN0YXRpb24iLCJGYXZvdXJpdGVQbGFjZSIsIkZhdm91cml0ZVJvdXRlIiwiRnV0dXJlUm91dGUiLCJTdGF0aW9uIiwiU2VsZWN0RnJvbU1hcCIsIlNlbGVjdEZyb21Pd25Mb2NhdGlvbnMiLCJTdG9wIiwiU3RyZWV0IiwiVmVudWUiLCJCaWtlUmVudGFsU3RhdGlvbiIsIkNhclBhcmsiLCJCaWtlUGFyayIsIm1hdGNoIiwibm9ybWFsaXplZFRlcm0iLCJyZXN1bHRQcm9wZXJ0aWVzIiwibWFwIiwiZmlsdGVyIiwibm9ybWFsaXplZFZhbHVlIiwiaW5kZXhPZiIsInJlZHVjZSIsInByZXZpb3VzIiwiY3VycmVudCIsImdldExheWVyUmFuayIsIkZhdm91cml0ZUJpa2VSZW50YWxTdGF0aW9uIiwic29ydFNlYXJjaFJlc3VsdHMiLCJsaW5lUmVnZXhwIiwicmVzdWx0cyIsInRlcm0iLCJpc0xpbmVJZGVudGlmaWVyIiwiaXNMaW5lU2VhcmNoIiwib3JkZXJlZFJlc3VsdHMiLCJvcmRlckJ5IiwicmVzdWx0Iiwic2hvcnROYW1lIiwiY29uZmlkZW5jZSIsImVzdGltYXRlZENvbmZpZGVuY2UiLCJ1bmlxV2l0aCIsImdldFN0b3BOYW1lIiwic3RvcENvZGUiLCJsYXN0SW5kZXhPZiIsInN1YnN0cmluZyIsImdldExvY2FsaXR5Iiwic3VnZ2VzdGlvbiIsImxvY2FsYWRtaW4iLCJnZXRTdG9wQ29kZSIsImlkIiwiY29kZSIsImZvcm1hdEZhdm91cml0ZVBsYWNlTGFiZWwiLCJzcGxpdCIsInJlcGxhY2UiLCJSZWdFeHAiLCJlc2NhcGVSZWdFeHAiLCJnZXROYW1lTGFiZWwiLCJtZW1vaXplIiwicGxhaW4iLCJtb2RlIiwibG9uZ05hbWUiLCJhZ2VuY3kiLCJpdGVtIiwiY2xvbmVEZWVwIiwidW5pcUJ5TGFiZWwiLCJmZWF0dXJlcyIsImZlYXQxIiwiZmVhdDIiLCJib29sIiwiaXNFcXVhbCIsImZpbHRlck1hdGNoaW5nVG9JbnB1dCIsImxpc3QiLCJJbnB1dCIsImZpZWxkcyIsImlucHV0IiwidHJpbSIsIm11bHRpV29yZCIsInBhcnRzIiwiZm9yRWFjaCIsInBOYW1lIiwiZ2V0Iiwic3BsaWNlIiwiam9pbiIsImNvbmNhdCIsInNlcmlhbGl6ZSIsInByZWZpeCIsImtleXMiLCJrIiwidiIsImVuY29kZVVSSUNvbXBvbmVudCIsImF4aW9zIiwicmVxdWlyZSIsImdldEpzb24iLCJ1cmwiLCJwYXJhbXMiLCJlbmNvZGVVUkkiLCJzZWFyY2giLCJ0aW1lb3V0IiwibWV0aG9kIiwiaGVhZGVycyIsIkFjY2VwdCIsInRoZW4iLCJyZXMiLCJkYXRhIiwiZ2V0R2VvY29kaW5nUmVzdWx0cyIsInNlYXJjaFN0cmluZyIsInNlYXJjaFBhcmFtcyIsImxhbmciLCJmb2N1c1BvaW50Iiwic291cmNlcyIsInBlbGlhc1VybCIsIm1pbmltYWxSZWdleHAiLCJnZW9jb2RpbmdMYXllcnMiLCJ0ZXh0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJQRUxJQVNfVVJMIiwib3B0cyIsImxheWVycyIsImdldFN0b3BzRnJvbUdlb2NvZGluZyIsInN0b3BzIiwiVVJMX1BFTElBU19QTEFDRSIsImdpZHMiLCJzdG9wU3RhdGlvbk1hcCIsInN0b3AiLCJzdG9wT3JTdGF0aW9uIiwiaWRzIiwiYWRkZW5kdW0iLCJsYXN0VXBkYXRlZCIsImZhdm91cml0ZUlkIiwiZ2V0T2xkU2VhcmNoZXMiLCJvbGRTZWFyY2hlcyIsImRyb3BMYXllcnMiLCJtYXRjaGluZ09sZFNlYXJjaGVzIiwidGFrZSIsIm5ld0l0ZW0iLCJ0aW1ldGFibGVDbGlja2VkIiwiYXJyb3dDbGlja2VkIiwicm91dGVMYXllcnMiLCJsb2NhdGlvbkxheWVycyIsInBhcmtpbmdMYXllcnMiLCJkZWJvdW5jZWRTZWFyY2giLCJkZWJvdW5jZSIsInRhcmdldHMiLCJ0cmFuc3BvcnRNb2RlIiwic2VhcmNoQ29udGV4dCIsImZpbHRlclJlc3VsdHMiLCJnZW9jb2RpbmdTaXplIiwiY2FsbGJhY2siLCJwYXRoT3B0cyIsInJlZlBvaW50IiwiZ2V0UG9zaXRpb25zIiwibG9jYXRpb25zIiwiZ2V0RmF2b3VyaXRlTG9jYXRpb25zIiwicHJldlNlYXJjaGVzIiwiZ2V0RmF2b3VyaXRlU3RvcHMiLCJwYXJraW5nQXJlYVNvdXJjZXMiLCJnZXRMYW5ndWFnZSIsImdldFN0b3BBbmRTdGF0aW9uc1F1ZXJ5IiwiZ2V0RmF2b3VyaXRlQmlrZVJlbnRhbFN0YXRpb25zUXVlcnkiLCJnZXRGYXZvdXJpdGVCaWtlUmVudGFsU3RhdGlvbnMiLCJnZXRGYXZvdXJpdGVSb3V0ZXNRdWVyeSIsImdldEZhdm91cml0ZVJvdXRlcyIsImdldFJvdXRlc1F1ZXJ5IiwiY29udGV4dCIsImxvY2F0aW9uQXdhcmUiLCJpc1BlbGlhc0xvY2F0aW9uQXdhcmUiLCJVUkxfUEVMSUFTIiwiZmVlZElEcyIsImdlb2NvZGluZ1NlYXJjaFBhcmFtcyIsImdlb2NvZGluZ1NvdXJjZXMiLCJnZXRGdXR1cmVSb3V0ZXMiLCJjaXR5QmlrZU5ldHdvcmtzIiwiYWxsVGFyZ2V0cyIsImFsbFNvdXJjZXMiLCJwb3NpdGlvbiIsInNlYXJjaENvbXBvbmVudHMiLCJzZWFyY2hlcyIsImxhbmd1YWdlIiwibGF0IiwibG9uIiwidG9GaXhlZCIsInN0YXR1cyIsImdldEN1cnJlbnRQb3NpdGlvbklmRW1wdHkiLCJzZWxlY3RQb3NpdGlvbkZvbU1hcCIsIml0ZW1zIiwiZmF2b3VyaXRlTG9jYXRpb25zIiwiZmF2b3VyaXRlU3RvcHMiLCJoYXNGYXZvdXJpdGVzIiwic2VsZWN0RnJvbU93bkxvY2F0aW9ucyIsImZhdm91cml0ZXMiLCJmZWVkaXMiLCJnZW9zb3VyY2VzIiwibG9jYXRpb25IaXN0b3J5Iiwic2l6ZSIsImZlZWRJZHMiLCJoaXN0b3J5Iiwic3RvcHNBbmRTdGF0aW9ucyIsImV2ZXJ5IiwiZGVkdXBlc3RvcHMiLCJzdG9wSGlzdG9yeSIsImZhdm91cml0ZVJvdXRlcyIsInJvdXRlSGlzdG9yeSIsImZhdm91cml0ZUJpa2VTdGF0aW9ucyIsImFsbCIsImZsYXR0ZW4iLCJlcnJvciIsImxlYWRpbmciLCJtb2R1bGUiLCJob29rQ2FsbGJhY2siLCJzb21lIiwiaG9va3MiLCJzZXRIb29rQ2FsbGJhY2siLCJpc09iamVjdCIsImhhc093blByb3AiLCJhIiwiYiIsImlzT2JqZWN0RW1wdHkiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiaXNVbmRlZmluZWQiLCJpc051bWJlciIsImlzRGF0ZSIsIkRhdGUiLCJmbiIsImV4dGVuZCIsInZhbHVlT2YiLCJjcmVhdGVVVEMiLCJmb3JtYXQiLCJsb2NhbGUiLCJzdHJpY3QiLCJjcmVhdGVMb2NhbE9yVVRDIiwidXRjIiwiZGVmYXVsdFBhcnNpbmdGbGFncyIsImVtcHR5IiwidW51c2VkVG9rZW5zIiwidW51c2VkSW5wdXQiLCJvdmVyZmxvdyIsImNoYXJzTGVmdE92ZXIiLCJudWxsSW5wdXQiLCJpbnZhbGlkRXJhIiwiaW52YWxpZE1vbnRoIiwiaW52YWxpZEZvcm1hdCIsInVzZXJJbnZhbGlkYXRlZCIsImlzbyIsInBhcnNlZERhdGVQYXJ0cyIsImVyYSIsIm1lcmlkaWVtIiwicmZjMjgyMiIsIndlZWtkYXlNaXNtYXRjaCIsImdldFBhcnNpbmdGbGFncyIsIm0iLCJfcGYiLCJpc1ZhbGlkIiwiX2lzVmFsaWQiLCJmbGFncyIsInBhcnNlZFBhcnRzIiwiaXNOb3dWYWxpZCIsImlzTmFOIiwiZ2V0VGltZSIsImludmFsaWRXZWVrZGF5IiwiX3N0cmljdCIsImJpZ0hvdXIiLCJpc0Zyb3plbiIsImNyZWF0ZUludmFsaWQiLCJOYU4iLCJmdW4iLCJ0IiwibW9tZW50UHJvcGVydGllcyIsInVwZGF0ZUluUHJvZ3Jlc3MiLCJjb3B5Q29uZmlnIiwidG8iLCJwcm9wIiwidmFsIiwiX2lzQU1vbWVudE9iamVjdCIsIl9mIiwiX2wiLCJfdHptIiwiX2lzVVRDIiwiX29mZnNldCIsIl9sb2NhbGUiLCJNb21lbnQiLCJjb25maWciLCJ1cGRhdGVPZmZzZXQiLCJpc01vbWVudCIsIndhcm4iLCJtc2ciLCJzdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3MiLCJjb25zb2xlIiwiZGVwcmVjYXRlIiwiZmlyc3RUaW1lIiwiZGVwcmVjYXRpb25IYW5kbGVyIiwiYXJnIiwiYXJncyIsIkVycm9yIiwic3RhY2siLCJkZXByZWNhdGlvbnMiLCJkZXByZWNhdGVTaW1wbGUiLCJpc0Z1bmN0aW9uIiwiRnVuY3Rpb24iLCJzZXQiLCJfY29uZmlnIiwiX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50IiwiX2RheU9mTW9udGhPcmRpbmFsUGFyc2UiLCJfb3JkaW5hbFBhcnNlIiwibWVyZ2VDb25maWdzIiwicGFyZW50Q29uZmlnIiwiY2hpbGRDb25maWciLCJMb2NhbGUiLCJkZWZhdWx0Q2FsZW5kYXIiLCJzYW1lRGF5IiwibmV4dERheSIsIm5leHRXZWVrIiwibGFzdERheSIsImxhc3RXZWVrIiwic2FtZUVsc2UiLCJjYWxlbmRhciIsIm1vbSIsIm5vdyIsIm91dHB1dCIsIl9jYWxlbmRhciIsInplcm9GaWxsIiwibnVtYmVyIiwidGFyZ2V0TGVuZ3RoIiwiZm9yY2VTaWduIiwiYWJzTnVtYmVyIiwiemVyb3NUb0ZpbGwiLCJwb3ciLCJtYXgiLCJzdWJzdHIiLCJmb3JtYXR0aW5nVG9rZW5zIiwibG9jYWxGb3JtYXR0aW5nVG9rZW5zIiwiZm9ybWF0RnVuY3Rpb25zIiwiZm9ybWF0VG9rZW5GdW5jdGlvbnMiLCJhZGRGb3JtYXRUb2tlbiIsInRva2VuIiwicGFkZGVkIiwib3JkaW5hbCIsImZ1bmMiLCJsb2NhbGVEYXRhIiwicmVtb3ZlRm9ybWF0dGluZ1Rva2VucyIsIm1ha2VGb3JtYXRGdW5jdGlvbiIsImFycmF5IiwiZm9ybWF0TW9tZW50IiwiZXhwYW5kRm9ybWF0IiwiaW52YWxpZERhdGUiLCJyZXBsYWNlTG9uZ0RhdGVGb3JtYXRUb2tlbnMiLCJsb25nRGF0ZUZvcm1hdCIsImxhc3RJbmRleCIsImRlZmF1bHRMb25nRGF0ZUZvcm1hdCIsIkxUUyIsIkxUIiwiTCIsIkxMIiwiTExMIiwiTExMTCIsIl9sb25nRGF0ZUZvcm1hdCIsImZvcm1hdFVwcGVyIiwidG9VcHBlckNhc2UiLCJ0b2siLCJkZWZhdWx0SW52YWxpZERhdGUiLCJfaW52YWxpZERhdGUiLCJkZWZhdWx0T3JkaW5hbCIsImRlZmF1bHREYXlPZk1vbnRoT3JkaW5hbFBhcnNlIiwiX29yZGluYWwiLCJkZWZhdWx0UmVsYXRpdmVUaW1lIiwiZnV0dXJlIiwicGFzdCIsInMiLCJzcyIsIm1tIiwiaCIsImhoIiwiZCIsImRkIiwidyIsInd3IiwiTSIsIk1NIiwieSIsInl5IiwicmVsYXRpdmVUaW1lIiwid2l0aG91dFN1ZmZpeCIsInN0cmluZyIsImlzRnV0dXJlIiwiX3JlbGF0aXZlVGltZSIsInBhc3RGdXR1cmUiLCJkaWZmIiwiYWxpYXNlcyIsImFkZFVuaXRBbGlhcyIsInVuaXQiLCJzaG9ydGhhbmQiLCJsb3dlckNhc2UiLCJub3JtYWxpemVVbml0cyIsInVuaXRzIiwibm9ybWFsaXplT2JqZWN0VW5pdHMiLCJpbnB1dE9iamVjdCIsIm5vcm1hbGl6ZWRQcm9wIiwibm9ybWFsaXplZElucHV0IiwicHJpb3JpdGllcyIsImFkZFVuaXRQcmlvcml0eSIsInByaW9yaXR5IiwiZ2V0UHJpb3JpdGl6ZWRVbml0cyIsInVuaXRzT2JqIiwidSIsInNvcnQiLCJpc0xlYXBZZWFyIiwieWVhciIsImFic0Zsb29yIiwiY2VpbCIsImZsb29yIiwidG9JbnQiLCJhcmd1bWVudEZvckNvZXJjaW9uIiwiY29lcmNlZE51bWJlciIsImlzRmluaXRlIiwibWFrZUdldFNldCIsImtlZXBUaW1lIiwic2V0JDEiLCJtb250aCIsImRhdGUiLCJkYXlzSW5Nb250aCIsInN0cmluZ0dldCIsInN0cmluZ1NldCIsInByaW9yaXRpemVkIiwicmVnZXhlcyIsIm1hdGNoMSIsIm1hdGNoMiIsIm1hdGNoMyIsIm1hdGNoNCIsIm1hdGNoNiIsIm1hdGNoMXRvMiIsIm1hdGNoM3RvNCIsIm1hdGNoNXRvNiIsIm1hdGNoMXRvMyIsIm1hdGNoMXRvNCIsIm1hdGNoMXRvNiIsIm1hdGNoVW5zaWduZWQiLCJtYXRjaFNpZ25lZCIsIm1hdGNoT2Zmc2V0IiwibWF0Y2hTaG9ydE9mZnNldCIsIm1hdGNoVGltZXN0YW1wIiwibWF0Y2hXb3JkIiwiYWRkUmVnZXhUb2tlbiIsInJlZ2V4Iiwic3RyaWN0UmVnZXgiLCJpc1N0cmljdCIsImdldFBhcnNlUmVnZXhGb3JUb2tlbiIsInVuZXNjYXBlRm9ybWF0IiwicmVnZXhFc2NhcGUiLCJtYXRjaGVkIiwicDMiLCJwNCIsInRva2VucyIsImFkZFBhcnNlVG9rZW4iLCJhZGRXZWVrUGFyc2VUb2tlbiIsIl93IiwiYWRkVGltZVRvQXJyYXlGcm9tVG9rZW4iLCJfYSIsIllFQVIiLCJNT05USCIsIkRBVEUiLCJIT1VSIiwiTUlOVVRFIiwiU0VDT05EIiwiTUlMTElTRUNPTkQiLCJXRUVLIiwiV0VFS0RBWSIsIm1vZCIsIngiLCJtb2RNb250aCIsIm1vbnRoc1Nob3J0IiwibW9udGhzIiwibW9udGhzU2hvcnRSZWdleCIsIm1vbnRoc1JlZ2V4IiwibW9udGhzUGFyc2UiLCJkZWZhdWx0TG9jYWxlTW9udGhzIiwiZGVmYXVsdExvY2FsZU1vbnRoc1Nob3J0IiwiTU9OVEhTX0lOX0ZPUk1BVCIsImRlZmF1bHRNb250aHNTaG9ydFJlZ2V4IiwiZGVmYXVsdE1vbnRoc1JlZ2V4IiwibG9jYWxlTW9udGhzIiwiX21vbnRocyIsImlzRm9ybWF0IiwibG9jYWxlTW9udGhzU2hvcnQiLCJfbW9udGhzU2hvcnQiLCJoYW5kbGVTdHJpY3RQYXJzZSIsIm1vbnRoTmFtZSIsImlpIiwibGxjIiwidG9Mb2NhbGVMb3dlckNhc2UiLCJfbW9udGhzUGFyc2UiLCJfbG9uZ01vbnRoc1BhcnNlIiwiX3Nob3J0TW9udGhzUGFyc2UiLCJsb2NhbGVNb250aHNQYXJzZSIsIl9tb250aHNQYXJzZUV4YWN0Iiwic2V0TW9udGgiLCJkYXlPZk1vbnRoIiwibWluIiwiZ2V0U2V0TW9udGgiLCJnZXREYXlzSW5Nb250aCIsImNvbXB1dGVNb250aHNQYXJzZSIsIl9tb250aHNTaG9ydFN0cmljdFJlZ2V4IiwiX21vbnRoc1Nob3J0UmVnZXgiLCJfbW9udGhzU3RyaWN0UmVnZXgiLCJfbW9udGhzUmVnZXgiLCJjbXBMZW5SZXYiLCJzaG9ydFBpZWNlcyIsImxvbmdQaWVjZXMiLCJtaXhlZFBpZWNlcyIsImRheXNJblllYXIiLCJwYXJzZVR3b0RpZ2l0WWVhciIsInBhcnNlSW50IiwiZ2V0U2V0WWVhciIsImdldElzTGVhcFllYXIiLCJjcmVhdGVEYXRlIiwibXMiLCJnZXRGdWxsWWVhciIsInNldEZ1bGxZZWFyIiwiY3JlYXRlVVRDRGF0ZSIsIlVUQyIsImdldFVUQ0Z1bGxZZWFyIiwic2V0VVRDRnVsbFllYXIiLCJmaXJzdFdlZWtPZmZzZXQiLCJkb3ciLCJkb3kiLCJmd2QiLCJnZXRVVENEYXkiLCJkYXlPZlllYXJGcm9tV2Vla3MiLCJ3ZWVrIiwid2Vla2RheSIsInJlc1llYXIiLCJyZXNEYXlPZlllYXIiLCJkYXlPZlllYXIiLCJ3ZWVrT2ZZZWFyIiwicmVzV2VlayIsIndlZWtPZmZzZXQiLCJ3ZWVrc0luWWVhciIsIndlZWtPZmZzZXROZXh0IiwibG9jYWxlV2VlayIsIl93ZWVrIiwiZGVmYXVsdExvY2FsZVdlZWsiLCJsb2NhbGVGaXJzdERheU9mV2VlayIsImxvY2FsZUZpcnN0RGF5T2ZZZWFyIiwiZ2V0U2V0V2VlayIsImFkZCIsImdldFNldElTT1dlZWsiLCJwYXJzZVdlZWtkYXkiLCJ3ZWVrZGF5c1BhcnNlIiwicGFyc2VJc29XZWVrZGF5Iiwic2hpZnRXZWVrZGF5cyIsIndzIiwid2Vla2RheXNNaW4iLCJ3ZWVrZGF5c1Nob3J0Iiwid2Vla2RheXMiLCJ3ZWVrZGF5c01pblJlZ2V4Iiwid2Vla2RheXNTaG9ydFJlZ2V4Iiwid2Vla2RheXNSZWdleCIsImRlZmF1bHRMb2NhbGVXZWVrZGF5cyIsImRlZmF1bHRMb2NhbGVXZWVrZGF5c1Nob3J0IiwiZGVmYXVsdExvY2FsZVdlZWtkYXlzTWluIiwiZGVmYXVsdFdlZWtkYXlzUmVnZXgiLCJkZWZhdWx0V2Vla2RheXNTaG9ydFJlZ2V4IiwiZGVmYXVsdFdlZWtkYXlzTWluUmVnZXgiLCJsb2NhbGVXZWVrZGF5cyIsIl93ZWVrZGF5cyIsImRheSIsImxvY2FsZVdlZWtkYXlzU2hvcnQiLCJfd2Vla2RheXNTaG9ydCIsImxvY2FsZVdlZWtkYXlzTWluIiwiX3dlZWtkYXlzTWluIiwiaGFuZGxlU3RyaWN0UGFyc2UkMSIsIndlZWtkYXlOYW1lIiwiX3dlZWtkYXlzUGFyc2UiLCJfc2hvcnRXZWVrZGF5c1BhcnNlIiwiX21pbldlZWtkYXlzUGFyc2UiLCJsb2NhbGVXZWVrZGF5c1BhcnNlIiwiX3dlZWtkYXlzUGFyc2VFeGFjdCIsIl9mdWxsV2Vla2RheXNQYXJzZSIsImdldFNldERheU9mV2VlayIsImdldERheSIsImdldFNldExvY2FsZURheU9mV2VlayIsImdldFNldElTT0RheU9mV2VlayIsImNvbXB1dGVXZWVrZGF5c1BhcnNlIiwiX3dlZWtkYXlzU3RyaWN0UmVnZXgiLCJfd2Vla2RheXNSZWdleCIsIl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXgiLCJfd2Vla2RheXNTaG9ydFJlZ2V4IiwiX3dlZWtkYXlzTWluU3RyaWN0UmVnZXgiLCJfd2Vla2RheXNNaW5SZWdleCIsIm1pbnAiLCJzaG9ydHAiLCJsb25ncCIsIm1pblBpZWNlcyIsImhGb3JtYXQiLCJob3VycyIsImtGb3JtYXQiLCJsb3dlcmNhc2UiLCJtaW51dGVzIiwibWF0Y2hNZXJpZGllbSIsIl9tZXJpZGllbVBhcnNlIiwibG9jYWxlSXNQTSIsImNoYXJBdCIsInNlY29uZHMiLCJrSW5wdXQiLCJfaXNQbSIsImlzUE0iLCJfbWVyaWRpZW0iLCJwb3MiLCJwb3MxIiwicG9zMiIsImRlZmF1bHRMb2NhbGVNZXJpZGllbVBhcnNlIiwiZ2V0U2V0SG91ciIsImxvY2FsZU1lcmlkaWVtIiwiaXNMb3dlciIsImdsb2JhbExvY2FsZSIsImJhc2VDb25maWciLCJkYXlPZk1vbnRoT3JkaW5hbFBhcnNlIiwibWVyaWRpZW1QYXJzZSIsImxvY2FsZXMiLCJsb2NhbGVGYW1pbGllcyIsImNvbW1vblByZWZpeCIsImFycjEiLCJtaW5sIiwibm9ybWFsaXplTG9jYWxlIiwiY2hvb3NlTG9jYWxlIiwibmFtZXMiLCJqIiwibG9hZExvY2FsZSIsIm9sZExvY2FsZSIsImV4cG9ydHMiLCJfYWJiciIsImdldFNldEdsb2JhbExvY2FsZSIsImUiLCJ2YWx1ZXMiLCJnZXRMb2NhbGUiLCJkZWZpbmVMb2NhbGUiLCJhYmJyIiwicGFyZW50TG9jYWxlIiwidXBkYXRlTG9jYWxlIiwidG1wTG9jYWxlIiwibGlzdExvY2FsZXMiLCJjaGVja092ZXJmbG93IiwiX292ZXJmbG93RGF5T2ZZZWFyIiwiX292ZXJmbG93V2Vla3MiLCJfb3ZlcmZsb3dXZWVrZGF5IiwiZXh0ZW5kZWRJc29SZWdleCIsImJhc2ljSXNvUmVnZXgiLCJ0elJlZ2V4IiwiaXNvRGF0ZXMiLCJpc29UaW1lcyIsImFzcE5ldEpzb25SZWdleCIsIm9ic09mZnNldHMiLCJVVCIsIkdNVCIsIkVEVCIsIkVTVCIsIkNEVCIsIkNTVCIsIk1EVCIsIk1TVCIsIlBEVCIsIlBTVCIsImNvbmZpZ0Zyb21JU08iLCJsIiwiYWxsb3dUaW1lIiwiZGF0ZUZvcm1hdCIsInRpbWVGb3JtYXQiLCJ0ekZvcm1hdCIsImV4ZWMiLCJjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0IiwiZXh0cmFjdEZyb21SRkMyODIyU3RyaW5ncyIsInllYXJTdHIiLCJtb250aFN0ciIsImRheVN0ciIsImhvdXJTdHIiLCJtaW51dGVTdHIiLCJzZWNvbmRTdHIiLCJ1bnRydW5jYXRlWWVhciIsInByZXByb2Nlc3NSRkMyODIyIiwiY2hlY2tXZWVrZGF5Iiwid2Vla2RheVN0ciIsInBhcnNlZElucHV0IiwiY2FsY3VsYXRlT2Zmc2V0Iiwib2JzT2Zmc2V0IiwibWlsaXRhcnlPZmZzZXQiLCJudW1PZmZzZXQiLCJobSIsImNvbmZpZ0Zyb21SRkMyODIyIiwicGFyc2VkQXJyYXkiLCJzZXRVVENNaW51dGVzIiwiZ2V0VVRDTWludXRlcyIsImNvbmZpZ0Zyb21TdHJpbmciLCJjcmVhdGVGcm9tSW5wdXRGYWxsYmFjayIsImRlZmF1bHRzIiwiYyIsImN1cnJlbnREYXRlQXJyYXkiLCJub3dWYWx1ZSIsIl91c2VVVEMiLCJnZXRVVENNb250aCIsImdldFVUQ0RhdGUiLCJnZXRNb250aCIsImdldERhdGUiLCJjb25maWdGcm9tQXJyYXkiLCJjdXJyZW50RGF0ZSIsImV4cGVjdGVkV2Vla2RheSIsInllYXJUb1VzZSIsImRheU9mWWVhckZyb21XZWVrSW5mbyIsIl9kYXlPZlllYXIiLCJfbmV4dERheSIsIndlZWtZZWFyIiwidGVtcCIsIndlZWtkYXlPdmVyZmxvdyIsImN1cldlZWsiLCJHRyIsIlciLCJFIiwiY3JlYXRlTG9jYWwiLCJnZyIsIklTT184NjAxIiwiUkZDXzI4MjIiLCJza2lwcGVkIiwic3RyaW5nTGVuZ3RoIiwidG90YWxQYXJzZWRJbnB1dExlbmd0aCIsIm1lcmlkaWVtRml4V3JhcCIsImVyYXNDb252ZXJ0WWVhciIsImhvdXIiLCJpc1BtIiwibWVyaWRpZW1Ib3VyIiwiY29uZmlnRnJvbVN0cmluZ0FuZEFycmF5IiwidGVtcENvbmZpZyIsImJlc3RNb21lbnQiLCJzY29yZVRvQmVhdCIsImN1cnJlbnRTY29yZSIsInZhbGlkRm9ybWF0Rm91bmQiLCJiZXN0Rm9ybWF0SXNWYWxpZCIsInNjb3JlIiwiY29uZmlnRnJvbU9iamVjdCIsImRheU9yRGF0ZSIsIm1pbnV0ZSIsInNlY29uZCIsIm1pbGxpc2Vjb25kIiwiY3JlYXRlRnJvbUNvbmZpZyIsInByZXBhcmVDb25maWciLCJwcmVwYXJzZSIsImNvbmZpZ0Zyb21JbnB1dCIsImlzVVRDIiwicHJvdG90eXBlTWluIiwib3RoZXIiLCJwcm90b3R5cGVNYXgiLCJwaWNrQnkiLCJtb21lbnRzIiwib3JkZXJpbmciLCJpc0R1cmF0aW9uVmFsaWQiLCJ1bml0SGFzRGVjaW1hbCIsInBhcnNlRmxvYXQiLCJpc1ZhbGlkJDEiLCJjcmVhdGVJbnZhbGlkJDEiLCJjcmVhdGVEdXJhdGlvbiIsIkR1cmF0aW9uIiwiZHVyYXRpb24iLCJ5ZWFycyIsInF1YXJ0ZXJzIiwicXVhcnRlciIsIndlZWtzIiwiaXNvV2VlayIsImRheXMiLCJtaWxsaXNlY29uZHMiLCJfbWlsbGlzZWNvbmRzIiwiX2RheXMiLCJfZGF0YSIsIl9idWJibGUiLCJpc0R1cmF0aW9uIiwiYWJzUm91bmQiLCJyb3VuZCIsImNvbXBhcmVBcnJheXMiLCJhcnJheTEiLCJhcnJheTIiLCJkb250Q29udmVydCIsImxlbmd0aERpZmYiLCJkaWZmcyIsIm9mZnNldCIsInNlcGFyYXRvciIsInV0Y09mZnNldCIsInNpZ24iLCJvZmZzZXRGcm9tU3RyaW5nIiwiY2h1bmtPZmZzZXQiLCJtYXRjaGVyIiwibWF0Y2hlcyIsImNsb25lV2l0aE9mZnNldCIsIm1vZGVsIiwiY2xvbmUiLCJzZXRUaW1lIiwibG9jYWwiLCJnZXREYXRlT2Zmc2V0IiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJnZXRTZXRPZmZzZXQiLCJrZWVwTG9jYWxUaW1lIiwia2VlcE1pbnV0ZXMiLCJsb2NhbEFkanVzdCIsIl9jaGFuZ2VJblByb2dyZXNzIiwiYWRkU3VidHJhY3QiLCJnZXRTZXRab25lIiwic2V0T2Zmc2V0VG9VVEMiLCJzZXRPZmZzZXRUb0xvY2FsIiwic3VidHJhY3QiLCJzZXRPZmZzZXRUb1BhcnNlZE9mZnNldCIsInRab25lIiwiaGFzQWxpZ25lZEhvdXJPZmZzZXQiLCJpc0RheWxpZ2h0U2F2aW5nVGltZSIsImlzRGF5bGlnaHRTYXZpbmdUaW1lU2hpZnRlZCIsIl9pc0RTVFNoaWZ0ZWQiLCJ0b0FycmF5IiwiaXNMb2NhbCIsImlzVXRjT2Zmc2V0IiwiaXNVdGMiLCJhc3BOZXRSZWdleCIsImlzb1JlZ2V4IiwicmV0IiwiZGlmZlJlcyIsInBhcnNlSXNvIiwibW9tZW50c0RpZmZlcmVuY2UiLCJpbnAiLCJwb3NpdGl2ZU1vbWVudHNEaWZmZXJlbmNlIiwiYmFzZSIsImlzQWZ0ZXIiLCJpc0JlZm9yZSIsImNyZWF0ZUFkZGVyIiwiZGlyZWN0aW9uIiwicGVyaW9kIiwidG1wIiwiaXNBZGRpbmciLCJpbnZhbGlkIiwiU3RyaW5nIiwiaXNNb21lbnRJbnB1dCIsImlzTnVtYmVyT3JTdHJpbmdBcnJheSIsImlzTW9tZW50SW5wdXRPYmplY3QiLCJwcm9wZXJ0eSIsIm9iamVjdFRlc3QiLCJwcm9wZXJ0eVRlc3QiLCJhcnJheVRlc3QiLCJkYXRhVHlwZVRlc3QiLCJpc0NhbGVuZGFyU3BlYyIsImdldENhbGVuZGFyRm9ybWF0IiwibXlNb21lbnQiLCJjYWxlbmRhciQxIiwidGltZSIsImZvcm1hdHMiLCJzb2QiLCJzdGFydE9mIiwiY2FsZW5kYXJGb3JtYXQiLCJsb2NhbElucHV0IiwiZW5kT2YiLCJpc0JldHdlZW4iLCJpbmNsdXNpdml0eSIsImxvY2FsRnJvbSIsImxvY2FsVG8iLCJpc1NhbWUiLCJpbnB1dE1zIiwiaXNTYW1lT3JBZnRlciIsImlzU2FtZU9yQmVmb3JlIiwiYXNGbG9hdCIsInRoYXQiLCJ6b25lRGVsdGEiLCJtb250aERpZmYiLCJ3aG9sZU1vbnRoRGlmZiIsImFuY2hvciIsInRvSVNPU3RyaW5nIiwia2VlcE9mZnNldCIsInRvRGF0ZSIsImluc3BlY3QiLCJkYXRldGltZSIsInN1ZmZpeCIsInpvbmUiLCJpbnB1dFN0cmluZyIsImRlZmF1bHRGb3JtYXRVdGMiLCJkZWZhdWx0Rm9ybWF0IiwicG9zdGZvcm1hdCIsImh1bWFuaXplIiwiZnJvbU5vdyIsInRvTm93IiwibmV3TG9jYWxlRGF0YSIsIk1TX1BFUl9TRUNPTkQiLCJNU19QRVJfTUlOVVRFIiwiTVNfUEVSX0hPVVIiLCJNU19QRVJfNDAwX1lFQVJTIiwibW9kJDEiLCJkaXZpZGVuZCIsImRpdmlzb3IiLCJsb2NhbFN0YXJ0T2ZEYXRlIiwidXRjU3RhcnRPZkRhdGUiLCJzdGFydE9mRGF0ZSIsImlzb1dlZWtkYXkiLCJ1bml4IiwidG9PYmplY3QiLCJ0b0pTT04iLCJpc1ZhbGlkJDIiLCJwYXJzaW5nRmxhZ3MiLCJpbnZhbGlkQXQiLCJjcmVhdGlvbkRhdGEiLCJsb2NhbGVFcmFzIiwiZXJhcyIsIl9lcmFzIiwic2luY2UiLCJ1bnRpbCIsImxvY2FsZUVyYXNQYXJzZSIsImVyYU5hbWUiLCJuYXJyb3ciLCJsb2NhbGVFcmFzQ29udmVydFllYXIiLCJkaXIiLCJnZXRFcmFOYW1lIiwiZ2V0RXJhTmFycm93IiwiZ2V0RXJhQWJiciIsImdldEVyYVllYXIiLCJlcmFzTmFtZVJlZ2V4IiwiY29tcHV0ZUVyYXNQYXJzZSIsIl9lcmFzTmFtZVJlZ2V4IiwiX2VyYXNSZWdleCIsImVyYXNBYmJyUmVnZXgiLCJfZXJhc0FiYnJSZWdleCIsImVyYXNOYXJyb3dSZWdleCIsIl9lcmFzTmFycm93UmVnZXgiLCJtYXRjaEVyYUFiYnIiLCJtYXRjaEVyYU5hbWUiLCJtYXRjaEVyYU5hcnJvdyIsIm1hdGNoRXJhWWVhck9yZGluYWwiLCJfZXJhWWVhck9yZGluYWxSZWdleCIsImFiYnJQaWVjZXMiLCJuYW1lUGllY2VzIiwibmFycm93UGllY2VzIiwiYWRkV2Vla1llYXJGb3JtYXRUb2tlbiIsImdldHRlciIsImdldFNldFdlZWtZZWFyIiwiZ2V0U2V0V2Vla1llYXJIZWxwZXIiLCJnZXRTZXRJU09XZWVrWWVhciIsImdldElTT1dlZWtzSW5ZZWFyIiwiZ2V0SVNPV2Vla3NJbklTT1dlZWtZZWFyIiwiaXNvV2Vla1llYXIiLCJnZXRXZWVrc0luWWVhciIsIndlZWtJbmZvIiwiZ2V0V2Vla3NJbldlZWtZZWFyIiwid2Vla3NUYXJnZXQiLCJzZXRXZWVrQWxsIiwiZGF5T2ZZZWFyRGF0YSIsImdldFNldFF1YXJ0ZXIiLCJlcmFzUGFyc2UiLCJlcmFZZWFyT3JkaW5hbFBhcnNlIiwiZ2V0U2V0RGF5T2ZNb250aCIsImdldFNldERheU9mWWVhciIsImdldFNldE1pbnV0ZSIsImdldFNldE1pbGxpc2Vjb25kIiwiZ2V0U2V0U2Vjb25kIiwicGFyc2VNcyIsImdldFpvbmVBYmJyIiwiZ2V0Wm9uZU5hbWUiLCJwcm90byIsImNyZWF0ZVVuaXgiLCJjcmVhdGVJblpvbmUiLCJwYXJzZVpvbmUiLCJwcmVQYXJzZVBvc3RGb3JtYXQiLCJmb3IiLCJlcmFOYXJyb3ciLCJlcmFBYmJyIiwiZXJhWWVhciIsImlzb1dlZWtzIiwid2Vla3NJbldlZWtZZWFyIiwiaXNvV2Vla3NJblllYXIiLCJpc29XZWVrc0luSVNPV2Vla1llYXIiLCJpc0RTVCIsInpvbmVBYmJyIiwiem9uZU5hbWUiLCJkYXRlcyIsImlzRFNUU2hpZnRlZCIsInByb3RvJDEiLCJnZXQkMSIsImluZGV4IiwiZmllbGQiLCJzZXR0ZXIiLCJsaXN0TW9udGhzSW1wbCIsIm91dCIsImxpc3RXZWVrZGF5c0ltcGwiLCJsb2NhbGVTb3J0ZWQiLCJzaGlmdCIsImxpc3RNb250aHMiLCJsaXN0TW9udGhzU2hvcnQiLCJsaXN0V2Vla2RheXMiLCJsaXN0V2Vla2RheXNTaG9ydCIsImxpc3RXZWVrZGF5c01pbiIsImZpcnN0RGF5T2ZZZWFyIiwiZmlyc3REYXlPZldlZWsiLCJsYW5nRGF0YSIsIm1hdGhBYnMiLCJhZGRTdWJ0cmFjdCQxIiwiYWRkJDEiLCJzdWJ0cmFjdCQxIiwiYWJzQ2VpbCIsImJ1YmJsZSIsIm1vbnRoc0Zyb21EYXlzIiwibW9udGhzVG9EYXlzIiwiZGF5c1RvTW9udGhzIiwiYXMiLCJ2YWx1ZU9mJDEiLCJtYWtlQXMiLCJhbGlhcyIsImFzTWlsbGlzZWNvbmRzIiwiYXNTZWNvbmRzIiwiYXNNaW51dGVzIiwiYXNIb3VycyIsImFzRGF5cyIsImFzV2Vla3MiLCJhc01vbnRocyIsImFzUXVhcnRlcnMiLCJhc1llYXJzIiwiY2xvbmUkMSIsImdldCQyIiwibWFrZUdldHRlciIsInRocmVzaG9sZHMiLCJzdWJzdGl0dXRlVGltZUFnbyIsInJlbGF0aXZlVGltZSQxIiwicG9zTmVnRHVyYXRpb24iLCJnZXRTZXRSZWxhdGl2ZVRpbWVSb3VuZGluZyIsInJvdW5kaW5nRnVuY3Rpb24iLCJnZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQiLCJ0aHJlc2hvbGQiLCJsaW1pdCIsImFyZ1dpdGhTdWZmaXgiLCJhcmdUaHJlc2hvbGRzIiwid2l0aFN1ZmZpeCIsInRoIiwiYWJzJDEiLCJ0b0lTT1N0cmluZyQxIiwidG90YWxTaWduIiwieW1TaWduIiwiZGF5c1NpZ24iLCJobXNTaWduIiwidG90YWwiLCJwcm90byQyIiwidG9Jc29TdHJpbmciLCJ2ZXJzaW9uIiwicmVsYXRpdmVUaW1lUm91bmRpbmciLCJyZWxhdGl2ZVRpbWVUaHJlc2hvbGQiLCJIVE1MNV9GTVQiLCJEQVRFVElNRV9MT0NBTCIsIkRBVEVUSU1FX0xPQ0FMX1NFQ09ORFMiLCJEQVRFVElNRV9MT0NBTF9NUyIsIlRJTUUiLCJUSU1FX1NFQ09ORFMiLCJUSU1FX01TIiwiZmFjdG9yeSIsInJvb3QiLCJtb21lbnQiLCJkZWZhdWx0IiwiY2FjaGVkR3Vlc3MiLCJ6b25lcyIsImxpbmtzIiwiY291bnRyaWVzIiwiZ3Vlc3NlcyIsImxvZ0Vycm9yIiwibW9tZW50VmVyc2lvbiIsIm1ham9yIiwibWlub3IiLCJjaGFyQ29kZVRvSW50IiwiY2hhckNvZGUiLCJ1bnBhY2tCYXNlNjAiLCJ3aG9sZSIsImZyYWN0aW9uYWwiLCJtdWx0aXBsaWVyIiwiY2hhckNvZGVBdCIsImFycmF5VG9JbnQiLCJtYXBJbmRpY2VzIiwiaW5kaWNlcyIsInVucGFjayIsIm9mZnNldHMiLCJ1bnRpbHMiLCJJbmZpbml0eSIsImludFRvVW50aWwiLCJhYmJycyIsInBvcHVsYXRpb24iLCJab25lIiwicGFja2VkU3RyaW5nIiwiX3NldCIsIkNvdW50cnkiLCJjb3VudHJ5X25hbWUiLCJ6b25lX25hbWVzIiwiT2Zmc2V0QXQiLCJhdCIsInRpbWVTdHJpbmciLCJ0b1RpbWVTdHJpbmciLCJab25lU2NvcmUiLCJvZmZzZXRTY29yZSIsImFiYnJTY29yZSIsImZpbmRDaGFuZ2UiLCJsb3ciLCJoaWdoIiwibWlkIiwic29ydFpvbmVTY29yZXMiLCJsb2NhbGVDb21wYXJlIiwiYWRkVG9HdWVzc2VzIiwiZ3Vlc3Nlc0ZvclVzZXJPZmZzZXRzIiwiZ3Vlc3Nlc09mZnNldCIsIm9mZnNldHNMZW5ndGgiLCJmaWx0ZXJlZEd1ZXNzZXMiLCJyZWJ1aWxkR3Vlc3MiLCJpbnRsTmFtZSIsIkludGwiLCJEYXRlVGltZUZvcm1hdCIsInJlc29sdmVkT3B0aW9ucyIsInRpbWVab25lIiwibm9ybWFsaXplTmFtZSIsInpvbmVTY29yZSIsImNoYW5nZSIsInN0YXJ0WWVhciIsImxhc3QiLCJ1c2VyT2Zmc2V0cyIsInpvbmVTY29yZXMiLCJnZXRab25lIiwic2NvcmVPZmZzZXRBdCIsImFkZFpvbmUiLCJwYWNrZWQiLCJub3JtYWxpemVkIiwiY2FsbGVyIiwibGluayIsImFkZExpbmsiLCJub3JtYWwwIiwibm9ybWFsMSIsIm5lZWRzT2Zmc2V0IiwiaXNVbml4VGltZXN0YW1wIiwibWVzc2FnZSIsInR6IiwicGFyc2UiLCJ1bnBhY2tlZCIsIl9pbmRleCIsInRpbWVzdGFtcCIsInpvbmVfbmFtZSIsImNvdW50cnlfY29kZSIsIm9mZnNldE5leHQiLCJvZmZzZXRQcmV2IiwibW92ZUFtYmlndW91c0ZvcndhcmQiLCJtb3ZlSW52YWxpZEZvcndhcmQiLCJvZmZzZXRBdCIsImRhdGFWZXJzaW9uIiwiX3pvbmVzIiwiX2xpbmtzIiwiX25hbWVzIiwiX2NvdW50cmllcyIsImxvYWQiLCJjb3VudHJ5X3pvbmVzIiwiYWRkQ291bnRyaWVzIiwiem9uZUV4aXN0cyIsImRpZFNob3dFcnJvciIsImd1ZXNzIiwiaWdub3JlQ2FjaGUiLCJ6b25lc0ZvckNvdW50cnkiLCJjb3VudHJ5Iiwid2l0aF9vZmZzZXQiLCJvbGQiLCJhYmJyV3JhcCIsIl96IiwicmVzZXRab25lV3JhcCIsImRlZmF1bHRab25lIiwieiIsInNldERlZmF1bHQiLCJyZXF1aXJlJCQwIiwicmVxdWlyZSQkMSIsInRyYW5zbGF0aW9ucyIsIm51bWJlcnNQYXN0IiwibnVtYmVyc0Z1dHVyZSIsInRyYW5zbGF0ZSIsInZlcmJhbE51bWJlciIsImxsIiwibGxsIiwibGxsbCIsInByb2Nlc3NSZWxhdGl2ZVRpbWUiLCJtb250aHNQYXJzZUV4YWN0Iiwid2Vla2RheXNQYXJzZUV4YWN0IiwiZGUiLCJhaXJwbGFuZSIsImFycml2YWwiLCJiYWNrIiwiYmlrZXJlbnRhbHN0YXRpb24iLCJidXMiLCJjYW5jZWwiLCJjdXJyZW50cG9zaXRpb24iLCJkZXBhcnR1cmUiLCJmYXZvdXJpdGUiLCJmZXJyeSIsIm93bmxvY2F0aW9ucyIsImxvYWRpbmciLCJyYWlsIiwic3RyZWV0Iiwic3Vid2F5Iiwic3RhdGlvbiIsInRyYW0iLCJ2ZW51ZSIsIndoZXJlIiwicGxhY2UiLCJlbiIsImJpa2VwYXJrIiwiY2FycGFyayIsInBsYXRmb3JtIiwicmVxdWlyZWQiLCJ0cmFjayIsImZpIiwic3YiLCJzdHlsZUluamVjdCIsImNzcyIsInJlZiIsImluc2VydEF0IiwiZG9jdW1lbnQiLCJoZWFkIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJzdHlsZSIsImNyZWF0ZUVsZW1lbnQiLCJmaXJzdENoaWxkIiwiaW5zZXJ0QmVmb3JlIiwiYXBwZW5kQ2hpbGQiLCJzdHlsZVNoZWV0IiwiY3NzVGV4dCIsImNyZWF0ZVRleHROb2RlIiwiQXV0b3N1Z2dlc3RQYXRjaCIsIm9uU3VnZ2VzdGlvblRvdWNoTW92ZSIsImp1c3RTZWxlY3RlZFN1Z2dlc3Rpb24iLCJwcmVzc2VkU3VnZ2VzdGlvbiIsIkF1dG9zdWdnZXN0IiwiTW9iaWxlU2VhcmNoIiwiYXBwRWxlbWVudCIsImNsb3NlSGFuZGxlIiwiY2xlYXJJbnB1dCIsInN1Z2dlc3Rpb25zIiwiaW5wdXRQcm9wcyIsImZldGNoRnVuY3Rpb24iLCJyZW5kZXJTdWdnZXN0aW9uIiwiZ2V0U3VnZ2VzdGlvblZhbHVlIiwiYXJpYUxhYmVsIiwib25TdWdnZXN0aW9uU2VsZWN0ZWQiLCJjbGVhck9sZFNlYXJjaGVzIiwiZGlhbG9nSGVhZGVyVGV4dCIsImRpYWxvZ1ByaW1hcnlCdXR0b25UZXh0IiwiZGlhbG9nU2Vjb25kYXJ5QnV0dG9uVGV4dCIsImNsZWFySW5wdXRCdXR0b25UZXh0IiwiZm9jdXNJbnB1dCIsImNvbG9yIiwiaG92ZXJDb2xvciIsImFjY2Vzc2libGVQcmltYXJ5Q29sb3IiLCJzZWFyY2hPcGVuIiwiZm9udFdlaWdodHMiLCJzdHlsZXMiLCJzaG93U2Nyb2xsIiwibW9iaWxlU3R5bGVzIiwibW9iaWxlTm9TY3JvbGxTdHlsZXMiLCJpbnB1dElkIiwidXNlU3RhdGUiLCJpc0RpYWxvZ09wZW4iLCJzZXREaWFsb2dPcGVuIiwiaW5wdXRSZWYiLCJSZWFjdCIsInVzZVJlZiIsInVzZUVmZmVjdCIsIlJlYWN0TW9kYWwiLCJzZXRBcHBFbGVtZW50Iiwib25DbG9zZSIsInVzZUNhbGxiYWNrIiwib25TZWxlY3QiLCJpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQiLCJldmVudCIsIndoaWNoIiwia2V5Q29kZSIsInByZXZlbnREZWZhdWx0IiwiZ2V0VmFsdWUiLCJyZW5kZXJJdGVtIiwiY2xhc3NOYW1lIiwiX2lucHV0UmVmJGN1cnJlbnQiLCJmb2N1cyIsImlzT3BlbiIsIm92ZXJsYXlDbGFzc05hbWUiLCJvbkFmdGVyQ2xvc2UiLCJzaG91bGRDbG9zZU9uRXNjIiwibWVkaXVtIiwiaHRtbEZvciIsIm9uQ2xpY2siLCJvbktleURvd24iLCJ0YWJJbmRleCIsIkljb24iLCJpbWciLCJhbHdheXNSZW5kZXJTdWdnZXN0aW9ucyIsIm9uU3VnZ2VzdGlvbnNGZXRjaFJlcXVlc3RlZCIsImZvY3VzSW5wdXRPblN1Z2dlc3Rpb25DbGljayIsInNob3VsZFJlbmRlclN1Z2dlc3Rpb25zIiwiaGFzVmFsdWUiLCJhdXRvRm9jdXMiLCJyZW5kZXJJbnB1dENvbXBvbmVudCIsInRoZW1lIiwiRGlhbG9nTW9kYWwiLCJpc01vZGFsT3BlbiIsImhhbmRsZUNsb3NlIiwiaGVhZGVyVGV4dCIsInByaW1hcnlCdXR0b25UZXh0Iiwic2Vjb25kYXJ5QnV0dG9uVGV4dCIsInByaW1hcnlCdXR0b25PbkNsaWNrIiwic2Vjb25kYXJ5QnV0dG9uT25DbGljayIsInByb2Nlc3MiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJpc1JlcXVpcmVkIiwic2hhcGUiLCJvbkNoYW5nZSIsIm9uQmx1ciIsInBsYWNlaG9sZGVyIiwiX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9yZWFjdF9fIiwibW9kdWxlcyIsImluc3RhbGxlZE1vZHVsZXMiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJyIiwidG9TdHJpbmdUYWciLCJfX2VzTW9kdWxlIiwibnMiLCJiaW5kIiwib2JqZWN0IiwiX19jcmVhdGVCaW5kaW5nIiwiazIiLCJfX2V4cG9ydFN0YXIiLCJ1c2VBcnJvd05hdmlnYXRpb24iLCJyZWFjdF8xIiwibGlzdEl0ZW1zIiwib25BcnJvd1VwT3JEb3duIiwiX2IiLCJzZWxlY3RlZEluZGV4Iiwic2V0U2VsZWN0ZWRJbmRleCIsInNldFNlbGVjdGVkSW5kZXhXaXRoVXNlQ2FsbGJhY2siLCJoYW5kbGVLZXlEb3duIiwia2V5Ym9hcmRFdmVudCIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwidXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJvcHRpb25zIiwiY29udGFpbmVyUmVmIiwiaXNWaXNpYmxlIiwic2V0SXNWaXNpYmxlIiwiaGFuZGxlSW50ZXJzZWN0aW9uIiwiZW50cmllcyIsImVudHJ5IiwiaXNJbnRlcnNlY3RpbmciLCJJbnRlcnNlY3Rpb25PYnNlcnZlciIsIm9ic2VydmVyXzEiLCJlbGVtZW50XzEiLCJvYnNlcnZlIiwidW5vYnNlcnZlIiwidXNlSXNCcmVha3BvaW50IiwiYnJlYWtwb2ludHMiLCJ4cyIsIm1vYmlsZVNtYWxsIiwibW9iaWxlIiwidGFibGV0IiwidGFibGV0TGFyZ2UiLCJkZXNrdG9wU21hbGwiLCJkZXNrdG9wIiwiZGVza3RvcExhcmdlIiwiYnJlYWtwb2ludCIsInNjcmVlbldpZHRoIiwic2V0U2NyZWVuV2lkdGgiLCJoYW5kbGVSZXNpemUiLCJpbm5lcldpZHRoIiwicGFzc2l2ZSIsInVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QiLCJ1c2VMYXlvdXRFZmZlY3QiLCJ1c2VPdXRzaWRlUmVhY3RlciIsInJlYWN0ZXJGdW5jdGlvbiIsImhhbmRsZUNsaWNrT3V0c2lkZSIsImNvbnRhaW5zIiwidXNlU2Nyb2xsTG9jayIsImxvY2siLCJzY3JvbGxZIiwiYm9keSIsInRvcCIsInVubG9jayIsInBhcnNlZFNjcm9sbFkiLCJzY3JvbGxUbyIsInJlYWN0IiwiaW5pdCIsImZhbGxiYWNrTG5nIiwiZGVmYXVsdE5TIiwiaW50ZXJwb2xhdGlvbiIsImVzY2FwZVZhbHVlIiwibm9kZSIsImdldFBsYXRmb3JtIiwiR1RGUyIsIm1vZGVzIiwiaTE4bmV4dCIsImdldFN1Z2dlc3Rpb25Db250ZW50Iiwic3VnZ2VzdGlvblR5cGUiLCJfaXRlbSRwcm9wZXJ0aWVzJGFkZGUiLCJ0YWlsMSIsInRhaWwyIiwibmFtZTEiLCJuYW1lMiIsInRyYW5zbGF0ZWRUZXh0IiwidHJhbnNsYXRlRnV0dXJlUm91dGVTdWdnZXN0aW9uVGltZSIsImFycml2ZUJ5IiwiRFRBdXRvc3VnZ2VzdCIsImNvbXBvbmVudERpZFVwZGF0ZSIsIl90aGlzIiwiY2hhbmdlTGFuZ3VhZ2UiLCJVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsIm5leHRQcm9wcyIsInN0YXRlIiwiZWRpdGluZyIsInNldFN0YXRlIiwibmV3VmFsdWUiLCJuZXdTdGF0ZSIsImZJbnB1dCIsInJlbmRlck1vYmlsZVNlYXJjaCIsImlzTW9iaWxlIiwidmFsaWQiLCJ0eXBpbmdUaW1lciIsImNsZWFyVGltZW91dCIsInRpbWVyIiwic2V0VGltZW91dCIsInR5cGluZyIsIm9uU2VsZWN0ZWQiLCJvd25QbGFjZXMiLCJwZW5kaW5nU2VsZWN0aW9uIiwic3VnZ2VzdGlvbkluZGV4Iiwic2VsZWN0aW9uRG9uZSIsInN1Z2dlc3Rpb25WYWx1ZSIsImJsdXIiLCJoYW5kbGVWaWFQb2ludHMiLCJmb2N1c0NoYW5nZSIsImlzRW1iZWRkZWQiLCJjbG9zZU1vYmlsZVNlYXJjaCIsInByZXZTdGF0ZSIsImNoZWNrUGVuZGluZ1NlbGVjdGlvbiIsIm9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZCIsImdldExhYmVsIiwiY2xlYXJCdXR0b24iLCJjbGVhbkV4ZWN1dGVkIiwiaXNMb2NhdGlvblNlYXJjaCIsImlzRW1wdHkiLCJleGVjdXRlU2VhcmNoIiwic2VhcmNoUmVzdWx0IiwidHJhbnNsYXRlZCIsIm9uQ2xlYXIiLCJpbnB1dENsaWNrZWQiLCJpbnB1dFZhbHVlIiwic3RhdGVLZXlEb3duIiwic3RvcmVJbnB1dFJlZmVyZW5jZSIsImF1dG9zdWdnZXN0Iiwic3RvcmVSZWYiLCJmaWxsSW5wdXQiLCJjb250ZW50IiwiU3VnZ2VzdGlvbkl0ZW0iLCJhcmlhRmF2b3VyaXRlU3RyaW5nIiwiZ2V0QXV0b1N1Z2dlc3RJY29ucyIsIm1vZGVJY29uQ29sb3JzIiwibW9kZVNldCIsImtleURvd24iLCJzdWdnZXN0aW9uQXNBcmlhQ29udGVudCIsImZpcnN0U3VnZ2VzdGlvbiIsIlNldCIsImNsZWFyRnV0dXJlUm91dGVzIiwiaXNPcmlnaW5EZXN0aW5hdGlvbk9yVmlhcG9pbnQiLCJvbkZvY3VzIiwicGFnZVlPZmZzZXQiLCJhZGRSZXNvdXJjZUJ1bmRsZSIsIm5leHRTdGF0ZSIsInRyYW5zbGF0ZWRQbGFjZWhvbGRlciIsInRoaW4iLCJpbnB1dENsYXNzTmFtZSIsImFyaWFCYXJJZCIsIlNlYXJjaEJhcklkIiwiYXJpYVJlcXVpcmVkVGV4dCIsImFyaWFMYWJlbFRleHQiLCJhcmlhU3VnZ2VzdGlvbkxlbiIsImNvdW50IiwiYXJpYUN1cnJlbnRTdWdnZXN0aW9uIiwiX3RoaXMyIiwic2VsZWN0aW9uIiwiRnJhZ21lbnQiLCJyb2xlIiwibW9iaWxlTGFiZWwiLCJjeCIsImljb24iLCJoaWdobGlnaHRGaXJzdFN1Z2dlc3Rpb24iLCJDb21wb25lbnQiLCJkZWZhdWx0UHJvcHMiLCJyb3V0ZXNQcmVmaXgiLCJzdG9wc1ByZWZpeCIsImFueSIsImFycmF5T2YiLCJEVEF1dG9zdWdnZXN0V2l0aFNjcm9sbExvY2siXSwibWFwcGluZ3MiOiJrekRBQWUsU0FBU0EsRUFBUUMsR0FhOUIsT0FURUQsRUFEb0IsbUJBQVhFLFFBQW9ELGlCQUFwQkEsT0FBT0MsU0FDdEMsU0FBaUJGLEdBQ3pCLGNBQWNBLEdBR04sU0FBaUJBLEdBQ3pCLE9BQU9BLEdBQXlCLG1CQUFYQyxRQUF5QkQsRUFBSUcsY0FBZ0JGLFFBQVVELElBQVFDLE9BQU9HLFVBQVksZ0JBQWtCSixHQUl0SEQsRUFBUUMsR0NiRixTQUFTSyxJQWV0QixPQWRBQSxFQUFXQyxPQUFPQyxRQUFVLFNBQVVDLEdBQ3BDLElBQUssSUFBSUMsRUFBSSxFQUFHQSxFQUFJQyxVQUFVQyxPQUFRRixJQUFLLENBQ3pDLElBQUlHLEVBQVNGLFVBQVVELEdBRXZCLElBQUssSUFBSUksS0FBT0QsRUFDVk4sT0FBT0YsVUFBVVUsZUFBZUMsS0FBS0gsRUFBUUMsS0FDL0NMLEVBQU9LLEdBQU9ELEVBQU9DLElBSzNCLE9BQU9MLEdBR0ZILEVBQVNXLE1BQU1DLEtBQU1QLFdDZmYsU0FBU1EsRUFBa0JDLEVBQUtDLElBQ2xDLE1BQVBBLEdBQWVBLEVBQU1ELEVBQUlSLFVBQVFTLEVBQU1ELEVBQUlSLFFBRS9DLElBQUssSUFBSUYsRUFBSSxFQUFHWSxFQUFPLElBQUlDLE1BQU1GLEdBQU1YLEVBQUlXLEVBQUtYLElBQzlDWSxFQUFLWixHQUFLVSxFQUFJVixHQUdoQixPQUFPWSxFQ05NLFNBQVNFLEVBQTRCQyxFQUFHQyxHQUNyRCxHQUFLRCxFQUFMLENBQ0EsR0FBaUIsaUJBQU5BLEVBQWdCLE9BQU9FLEVBQWlCRixFQUFHQyxHQUN0RCxJQUFJRSxFQUFJckIsT0FBT0YsVUFBVXdCLFNBQVNiLEtBQUtTLEdBQUdLLE1BQU0sR0FBSSxHQUVwRCxNQURVLFdBQU5GLEdBQWtCSCxFQUFFckIsY0FBYXdCLEVBQUlILEVBQUVy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