@ditojs/admin 2.50.0 → 2.51.2
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.
package/dist/dito-admin.umd.js
CHANGED
|
@@ -4,4 +4,4 @@
|
|
|
4
4
|
${a.message}
|
|
5
5
|
`))}return this.checkClipboardData(t)},updateCopy(){this.copyEnabled=this.parentComponent.hasData},async updatePaste(){if(this.pasteEnabled=!!this.checkClipboardData(this.appState.clipboardData),!this.pasteEnabled&&this.appState.agent.chrome){const e=await this.getClipboardData(!1);this.pasteEnabled=!!e}},async onCopy(){var t,o;let e=this.parentComponent.clipboardData;try{e&&(e={$schema:this.schema.name,...this.copyData(e)}),this.appState.clipboardData=e,this.pasteEnabled=!0;try{const s=JSON.stringify(e,null,2);await((o=(t=navigator.clipboard)==null?void 0:t.writeText)==null?void 0:o.call(t,s))}catch(s){console.error(s,s.name,s.message)}}catch(s){console.error(s),alert(s.message)}},async onPaste(){let e=await this.getClipboardData(!0);try{e=e&&this.pasteData(e),e&&(this.parentComponent.clipboardData=e)}catch(t){console.error(t),alert(t.message)}}}}),Rr=y(Mr,[["render",jr]]),on={data(){return{isLoading:!1}},methods:{setLoading(e,{updateRoot:t=!1,updateView:o=!1}={}){!this.isLoading^!e&&(this.isLoading=!!e,t&&this.rootComponent.registerLoading(e),o&&this.viewComponent.setLoading(this.isLoading))}}},ve={mixins:[$e,on],provide(){return{$resourceComponent:()=>this,$verbs:()=>this.verbs,$isPopulated:()=>this.hasData}},data(){return{loadedData:null,abortController:null}},computed:{resourceComponent(){return this},resource(){return this.getResource()},providesData(){return!!this.resource},linksToView(){return!1},isTransient(){const e=this.formComponent;return!this.providesData&&!this.linksToView||e&&(e.isTransient||e.isCreating)},transientNote(){return this.isTransient&&"<b>Note</b>: the parent still needs to be saved in order to persist this change."},shouldLoad(){return!this.isTransient&&!this.isLoading},hasData(){return!!this.loadedData},verbs(){return this.getVerbs()},paginationRange(){const{paginate:e}=this.sourceSchema;if(this.isListSource&&e){const{page:t=0}=this.query||{},o=t*e;return[o,o+e-1]}return null},queryParams(){const e=this.paginationRange,{page:t,...o}=this.query||{};return{...o,...e&&{range:e.join(",")}}}},created(){(this.providesData||this.isCreating)&&this.setupData()},methods:{getResource({method:e="get",child:t}={}){var s,a;const o=(s=this.sourceSchema)==null?void 0:s.resource;return M(o,{type:"collection",method:e,parent:((a=this.parentResourceComponent)==null?void 0:a.getResource({method:e,child:o}))??null,child:t})},getVerbs(){const e=this.$verbs();return this.isTransient?{...e,create:"add",created:"added",save:"apply",saved:"applied",delete:"remove",deleted:"removed"}:e},clearData(){this.loadedData=null},setData(e){this.loadedData=e},setupData(){this.ensureData()},ensureData(){this.shouldLoad&&(this.hasData?this.reloadData():this.loadData(!0))},reloadData(){this.loadData(!1)},loadData(e){this.isTransient||(e&&this.clearData(),this.requestData())},createData(e,t){return Ft(e,t?{type:t}:{},this)},requestData(){const e=this.queryParams;this.handleRequest({method:"get",query:e},(t,o)=>{var s;if(t){if(o){const{data:a}=o;if((a==null?void 0:a.type)==="FilterValidation"&&((s=this.onFilterErrors)!=null&&s.call(this,a.errors)))return!0;if(this.isUnauthorizedError(o))return!0}}else this.setData(o.data),this.emitSchemaEvent("load")})},isValidationError(e){return(e==null?void 0:e.status)===400},isUnauthorizedError(e){return(e==null?void 0:e.status)===401},async handleRequest({method:e,resource:t=this.getResource({method:e}),query:o,data:s},a){var h;const i={updateRoot:!0,updateView:this.isInView};(h=this.abortController)==null||h.abort();const r=new AbortController;this.abortController=r;const{signal:l}=r;e=t.method||e;const d={method:e,resource:t,query:o,data:s,signal:l};this.setLoading(!0,i);try{const u=await this.sendRequest(d);a(null,u)}catch(u){if(u.name!=="AbortError"){const{response:p}=u;if(!a(u,p)){const m=p==null?void 0:p.data,f=c.isString(m==null?void 0:m.type)?c.labelize(m.type):"Error",g=(m==null?void 0:m.message)??u;this.notify({type:"error",error:u,title:f,text:g})}}}this.abortController===r&&(this.abortController=null,this.setLoading(!1,i))},getPayloadData(e,t){return["post","put","patch"].includes(t)&&(e.getSchemaValue(["resource","data"])||e.processedItem)},async submit(e){let{resource:t}=e.schema;if(t=M(t,{parent:this.getResource({method:t==null?void 0:t.method,child:t})}),t){const{method:o}=t,s=this.getPayloadData(e,o);return this.submitResource(e,t,o,s)}return!1},async submitResource(e,t,o,s,{setData:a=!1,onSuccess:i,onError:r,notifySuccess:l=()=>this.notify({type:"success",title:"Request Successful",text:"Request was successfully sent."}),notifyError:d=h=>this.notify({type:"error",error:h,title:"Request Error",text:[`Unable to send request${h?":":""}`,(h==null?void 0:h.message)||h]})}={}){return new Promise(h=>{this.handleRequest({method:o,resource:t,data:s},async(u,p)=>{var f,g;const m=p==null?void 0:p.data;if(u){const k=this.isValidationError(p)&&m.errors;if(k)await this.showValidationErrors(k,!0);else{const V=c.isObject(m)?m:u;r==null||r(V),await this.emitButtonEvent(e,"error",{notify:d,error:V})}h(!1)}else{if(a&&m){const{foreignData:k}=this.mainSchemaComponent.filterData(this.data),V=(g=(f=this.parentRouteComponent)==null?void 0:f.routeRecord)==null?void 0:g.meta;V&&(V.reload=!0),this.setData(c.assignDeeply({},k,m))}i==null||i(),await this.emitButtonEvent(e,"success",{notify:l}),h(!0)}})})},async emitButtonEvent(e,t,{notify:o,error:s}){const a=new S(e,{nested:!1,data:this.data,itemLabel:this.itemLabel,error:s}),i=await e.emitEvent(t,{context:a});return o&&i===void 0&&!a.wasNotified&&o(s),i}}};function Ir(e){return new URL(`file:${e}`).pathname}const zr=["data-resource"],qr={type:"submit",disabled:""};function Ur(e,t,o,s,a,i){const r=n.resolveComponent("RouterView"),l=n.resolveComponent("DitoButtons"),d=n.resolveComponent("DitoSchema"),h=n.resolveComponent("DitoFormInner");return n.openBlock(),n.createElementBlock("div",{class:n.normalizeClass(["dito-form dito-scroll-parent",{"dito-form-nested":e.isNestedRoute}]),"data-resource":e.sourceSchema.path},[!e.isLastUnnestedRoute&&!e.isNestedRoute?n.withDirectives((n.openBlock(),n.createBlock(r,{key:0},null,512)),[[n.vShow,!e.isActiveRoute]]):n.createCommentVNode("",!0),n.withDirectives(n.createVNode(h,{nested:e.isNestedRoute},{default:n.withCtx(()=>[n.withDirectives(n.createElementVNode("button",qr,null,512),[[n.vShow,!1]]),n.createVNode(d,{schema:e.schema,dataPath:e.dataPath,data:e.data,meta:e.meta,store:e.store,padding:e.isNestedRoute?"nested":"root",active:e.isActiveRoute,disabled:e.isLoading,scrollable:!e.isNestedRoute,generateLabels:""},{buttons:n.withCtx(()=>[n.createVNode(l,{class:n.normalizeClass(["dito-buttons-round dito-buttons-large dito-buttons-main",{"dito-buttons-sticky":!e.isNestedRoute}]),buttons:e.buttonSchemas,dataPath:e.dataPath,data:e.data,meta:e.meta,store:e.store,disabled:e.isLoading},null,8,["class","buttons","dataPath","data","meta","store","disabled"])]),_:1},8,["schema","dataPath","data","meta","store","padding","active","disabled","scrollable"])]),_:1},8,["nested"]),[[n.vShow,e.isActiveRoute]])],10,zr)}const Ar=C.component("DitoForm",{mixins:[xt,ve],data(){return{createdData:null,clonedData:void 0,sourceKey:null,isForm:!0}},computed:{verbs(){const e=this.getVerbs(),{isCreating:t,providesData:o}=this;return{...e,submit:t?e.create:e.save,submitted:t?e.created:e.saved,cancel:o?e.cancel:e.close,cancelled:o?e.cancelled:e.closed}},schema(){return this.getItemFormSchema(this.sourceSchema,this.data||(this.creationType?{type:this.creationType}:null),this.context)},buttonSchemas(){return x(c.assignDeeply({cancel:{type:"button",events:{click:()=>this.cancel()}},submit:!this.isMutating&&{type:"submit",closeForm:!0,events:{click:({component:e})=>e.submit()}}},this.schema.buttons))},isActiveRoute(){return this.isLastRoute||this.isLastUnnestedRoute},isTransient(){return!this.providesData},isCreating(){return this.param==="create"},isDirty(){var e;return!this.isMutating&&!!((e=this.mainSchemaComponent)!=null&&e.isDirty)},isMutating(){return!!this.sourceSchema.mutate},selectedTab(){var e;return((e=this.mainSchemaComponent)==null?void 0:e.selectedTab)||null},creationType(){return this.$route.query.type},itemId(){return this.isCreating?null:this.param??null},method(){return this.isCreating?"post":"patch"},breadcrumbPrefix(){return c.capitalize(this.isCreating?this.verbs.create:this.verbs.edit)},data(){return this.createdData||this.loadedData||this.inheritedData||null},dataPath(){return this.getDataPathFrom(this.dataComponent)},sourceData(){let e=this.routeRecord?this.parentRouteComponent.data:null;if(e){const t=c.parseDataPath(this.getDataPathFrom(this.parentRouteComponent)),o=this.routeRecord.path.split("/"),s=o.slice(o.length-t.length);this.sourceKey=null;const a=t[t.length-1];ee(this.sourceSchema)&&a==="create"&&t.length--;for(let i=0,r=t.length;i<r&&e;i++){const l=t[i],d=/^:id/.test(s[i])?l==="create"?null:this.findItemIdIndex(this.sourceSchema,e,l):l;i===r-1?this.sourceKey=d:e=e[d]}}return e},inheritedData(){if(this.isTransient&&this.clonedData===void 0&&this.sourceData&&this.sourceKey!==null){let e=this.sourceData[this.sourceKey];return this.isMutating||(this.clonedData=e=c.clone(e)),e===null&&!this.isCreating&&ee(this.sourceSchema)&&this.$router.push({path:`${this.path}/create`}),e}return this.clonedData},hasData(){return!!this.data},itemLabel(){return this.getItemLabel(this.sourceSchema,this.data,{extended:!0})}},watch:{$route:{flush:"post",handler(e,t){var s;const o=(s=this.meta)==null?void 0:s.param;o&&this.providesData&&t.matched[0].path===e.matched[0].path&&t.params[o]!=="create"&&e.params[o]!==t.params[o]&&this.loadData(!0)}},sourceData:"clearClonedData",create:"setupData"},methods:{emitSchemaEvent(e,t){var o;return(o=this.mainSchemaComponent)==null?void 0:o.emitEvent(e,t)},getDataPathFrom(e){return this.api.denormalizePath(this.path.slice((e.isView?0:e.path.length)+1))},getResource(e){const t=ve.methods.getResource.call(this,e);return Ye(this.itemId,t)||t},setupData(){this.isCreating?this.createdData||(this.createdData=this.createData(this.schema,this.creationType)):this.ensureData()},setSourceData(e){if(this.sourceData&&this.sourceKey!==null){const{mainSchemaComponent:t}=this;return this.sourceData[this.sourceKey]=t.filterData(e).localData,t.onChange(),!0}return!1},addSourceData(e){var t;return ee(this.sourceSchema)?this.setSourceData(e):!!((t=this.sourceData)!=null&&t.push(e))},clearData(){this.setData(null)},setData(e){this.isTransient?this.setSourceData(e):(this.createdData=null,this.loadedData=e)},clearClonedData(e,t){e!==t&&(this.clonedData=void 0)},async cancel(){return this.close()},async close(){return this.navigate(this.parentRouteComponent.path)},getSubmitVerb(e=!0){return this.isCreating?e?"create":"created":e?"submit":"submitted"},async submit(e,{validate:t=!0,closeForm:o=!1}={}){if(t&&!this.validateAll())return!1;const s=h=>this.verbs[this.getSubmitVerb(h)];let{method:a}=this,i=this.getResource({method:a});const r=M(e.schema.resource,{parent:i});i=r||i,a=(i==null?void 0:i.method)||a;const l=this.getPayloadData(e,a);let d;if(!r&&this.isTransient?d=await this.submitTransient(e,i,a,l,{onSuccess:()=>this.emitSchemaEvent(this.getSubmitVerb()),onError:h=>this.emitSchemaEvent("error",{context:{error:h}}),notifySuccess:()=>{const h=s(!1);this.notify({type:"info",title:this.isCreating?`Item ${c.capitalize(h)}`:`Change ${c.capitalize(h)}`,text:[this.isCreating?`${this.itemLabel} was ${h}.`:`Changes to ${this.itemLabel} were ${h}.`,this.transientNote]})},notifyError:h=>{const u=s(!0);this.notify({type:"error",error:h,title:"Request Error",text:`Unable to ${u} ${this.itemLabel}.`})}}):d=await this.submitResource(e,i,a,l,{setData:!0,onSuccess:()=>this.emitSchemaEvent(this.getSubmitVerb()),onError:h=>this.emitSchemaEvent("error",{context:{error:h}}),notifySuccess:()=>{const h=s(!1);this.notify({type:"success",title:`Successfully ${c.capitalize(h)}`,text:`${this.itemLabel} was ${h}.`})},notifyError:h=>{const u=s(!0);this.notify({type:"error",error:h,title:"Request Error",text:[`Unable to ${u} ${this.itemLabel}${h?":":""}`,(h==null?void 0:h.message)||h]})}}),d){if(this.resetValidation(),o||e.closeForm)this.close();else if(this.isCreating){const h=this.getItemId(this.schema,this.data);this.$router.replace({path:Ir(`${this.path}/../${h}`),hash:this.$route.hash})}}return d},async submitTransient(e,t,o,s,{onSuccess:a,onError:i,notifySuccess:r,notifyError:l}){const d=this.isCreating?this.addSourceData(s):this.setSourceData(s);if(d)a==null||a(),await this.emitButtonEvent(e,"success",{notify:r});else{const h="Could not submit transient item";i==null||i(h),await this.emitButtonEvent(e,"error",{notify:l,error:h})}return d}}}),sn=y(Ar,[["render",Ur]]),Hr={key:0};function Wr(e,t,o,s,a,i){return e.nested?(n.openBlock(),n.createElementBlock("div",Hr,[n.renderSlot(e.$slots,"default")])):(n.openBlock(),n.createElementBlock("form",{key:1,class:"dito-scroll-parent",onSubmit:t[0]||(t[0]=n.withModifiers(()=>{},["prevent"]))},[n.renderSlot(e.$slots,"default")],32))}const Kr=C.component("DitoFormInner",{props:{nested:{type:Boolean,default:!1}}}),Yr=y(Kr,[["render",Wr]]),Jr=C.component("DitoFormNested",{extends:sn}),Gr={key:0,class:"dito-errors"};function Qr(e,t,o,s,a,i){return e.errors?(n.openBlock(),n.createElementBlock("div",Gr,[n.createElementVNode("ul",null,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.errors,r=>(n.openBlock(),n.createElementBlock("li",null,n.toDisplayString(r),1))),256))])])):n.createCommentVNode("",!0)}const Xr=C.component("DitoErrors",{props:{errors:{type:Array,default:null}},data(){return{tip:null}},watch:{errors(){this.$nextTick(this.updateErrors)}},unmounted(){var e;(e=this.tip)==null||e.destroy()},methods:{updateErrors(){let{tip:e}=this;e==null||e.hide(),this.errors&&(e=this.tip??(this.tip=n.markRaw(ot(this.$el.closest(".dito-container")))),e.setProps({content:this.errors.join(`
|
|
6
6
|
`),theme:"error",trigger:"manual",appendTo:"parent",placement:"bottom-start",animation:"shift-away-subtle",popperOptions:{modifiers:[{name:"flip",enabled:!1}]},interactive:!0,hideOnClick:!1,offset:[3,3],zIndex:1}),e.popper.addEventListener("mousedown",()=>e.hide()),e.show())}}}),Zr=y(Xr,[["render",Qr]]),_r={class:"dito-scopes"},vr=["title","onClick"];function xr(e,t,o,s,a,i){const r=n.resolveComponent("RouterLink");return n.openBlock(),n.createElementBlock("div",_r,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.scopes,(l,d)=>(n.openBlock(),n.createBlock(r,{key:d,to:e.getScopeLink(l),custom:""},{default:n.withCtx(({navigate:h})=>[n.createElementVNode("button",{class:n.normalizeClass(["dito-button",{"dito-selected":l.name===e.query.scope}]),type:"button",title:l.hint||e.getLabel(l),onClick:h},n.toDisplayString(e.getLabel(l)),11,vr)]),_:2},1032,["to"]))),128))])}const ei=C.component("DitoScopes",{props:{query:{type:Object,required:!0},scopes:{type:Object,required:!0}},methods:{getScopeLink(e){const t={...this.query,scope:e.name};return t.page&&(t.page=0),this.getQueryLink(t)}}}),ti=y(ei,[["render",xr]]);function ni(e,t,o,s,a,i){const r=n.resolveComponent("Pagination");return n.openBlock(),n.createBlock(r,{page:e.page,"onUpdate:page":t[0]||(t[0]=l=>e.page=l),pageSize:e.limit,total:e.total},null,8,["page","pageSize","total"])}const oi=C.component("DitoPagination",{components:{Pagination:Fs},props:{query:{type:Object,required:!0},limit:{type:Number,required:!0},total:{type:Number,required:!0}},computed:{page:{get(){return(+this.query.page||0)+1},set(e){this.page!==e&&this.$router.push(this.getQueryLink({...this.query,page:e-1}))}}}}),si=y(oi,[["render",ni]]),Be={data(){return{isDragging:!1}},methods:{getDraggableOptions(e=!1){const t="dito-draggable";return{animation:150,handle:".dito-button-drag",dragClass:`${t}__drag`,chosenClass:`${t}__chosen`,ghostClass:`${t}__ghost`,fallbackClass:`${t}__fallback`,forceFallback:e,onStart:this.onStartDrag,onEnd:this.onEndDrag}},onStartDrag(){this.isDragging=!0},onEndDrag({oldIndex:e,newIndex:t}){this.isDragging=!1,e!==t&&this.onChange()},updateOrder(e,t,o){const{orderKey:s}=e;if(s){const a=(o==null?void 0:o[0])||0;for(let i=0;i<t.length;i++)t[i][s]=i+a}return t}}},ai=["id","data-path"],ri={key:0,class:"dito-tree-header"},ii=["innerHTML"],li={key:1,class:"dito-tree-info"},di={key:1,class:"dito-tree-leaf"},ci=["innerHTML"],hi={key:2,class:"dito-buttons dito-buttons-small"},ui={key:1,class:"dito-properties"};function pi(e,t,o,s,a,i){const r=n.resolveComponent("DitoLabel"),l=n.resolveComponent("DitoTableCell"),d=n.resolveComponent("DitoTreeItem",!0),h=n.resolveComponent("DitoDraggable");return n.openBlock(),n.createElementBlock("div",{class:n.normalizeClass(["dito-tree-item",{"dito-dragging":e.isDragging,"dito-active":e.active}]),id:e.dataPath,style:n.normalizeStyle(e.level>0&&{"--level":e.level}),"data-path":e.path},[e.label?(n.openBlock(),n.createElementBlock("div",ri,[e.numEntries?(n.openBlock(),n.createElementBlock("div",{key:0,class:"dito-tree-branch",onClick:t[0]||(t[0]=n.withModifiers(u=>e.opened=!e.opened,["stop"]))},[e.numEntries?(n.openBlock(),n.createElementBlock("div",{key:0,class:n.normalizeClass(["dito-chevron",{"dito-open":e.opened}])},null,2)):n.createCommentVNode("",!0),n.createElementVNode("div",{class:"dito-tree-label",innerHTML:e.label},null,8,ii),e.details?(n.openBlock(),n.createElementBlock("div",li,n.toDisplayString(e.details),1)):n.createCommentVNode("",!0)])):(n.openBlock(),n.createElementBlock("div",di,[n.createElementVNode("div",{class:"dito-tree-label",innerHTML:e.label},null,8,ci)])),e.hasEditButtons?(n.openBlock(),n.createElementBlock("div",hi,[e.draggable?(n.openBlock(),n.createElementBlock("a",n.mergeProps({key:0,class:"dito-button"},e.getButtonAttributes(e.verbs.drag)),null,16)):n.createCommentVNode("",!0),e.editable?(n.openBlock(),n.createElementBlock("button",n.mergeProps({key:1,class:"dito-button",type:"button"},e.getButtonAttributes(e.verbs.edit),{onClick:t[1]||(t[1]=(...u)=>e.onEdit&&e.onEdit(...u))}),null,16)):n.createCommentVNode("",!0),e.deletable?(n.openBlock(),n.createElementBlock("button",n.mergeProps({key:2,class:"dito-button",type:"button"},e.getButtonAttributes(e.verbs.delete),{onClick:t[2]||(t[2]=(...u)=>e.onDelete&&e.onDelete(...u))}),null,16)):n.createCommentVNode("",!0)])):n.createCommentVNode("",!0)])):n.createCommentVNode("",!0),e.properties?n.withDirectives((n.openBlock(),n.createElementBlock("table",ui,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.properties,u=>(n.openBlock(),n.createElementBlock("tr",null,[n.createElementVNode("td",null,[u.label!==!1?(n.openBlock(),n.createBlock(r,{key:0,dataPath:e.getPropertyDataPath(u),label:e.getLabel(u)},null,8,["dataPath","label"])):n.createCommentVNode("",!0)]),n.createVNode(l,{cell:u,schema:u,dataPath:e.getPropertyDataPath(u),data:e.data,meta:e.nestedMeta,store:e.store,disabled:e.disabled},null,8,["cell","schema","dataPath","data","meta","store","disabled"])]))),256))],512)),[[n.vShow,e.opened]]):n.createCommentVNode("",!0),e.childrenSchema?n.withDirectives((n.openBlock(),n.createBlock(h,{key:2,options:e.getDraggableOptions(!0),draggable:e.childrenDraggable,modelValue:e.updateOrder(e.childrenSchema,e.childrenList),"onUpdate:modelValue":t[3]||(t[3]=u=>e.childrenList=u)},{default:n.withCtx(()=>[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.childrenItems,(u,p)=>(n.openBlock(),n.createBlock(d,{key:e.getItemUid(e.childrenSchema,u.data),schema:e.childrenSchema,dataPath:e.getItemDataPath(e.childrenSchema,p),data:u.data,path:u.path,open:u.open,active:u.active,draggable:e.childrenDraggable,label:e.getItemLabel(e.childrenSchema,u.data,{index:p}),level:e.level+1},null,8,["schema","dataPath","data","path","open","active","draggable","label","level"]))),128))]),_:1},8,["options","draggable","modelValue"])),[[n.vShow,e.opened]]):n.createCommentVNode("",!0)],14,ai)}const mi=C.component("DitoTreeItem",{mixins:[$e,Be],emits:["update:data"],inject:["container"],props:{schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:[Array,Object],default:null},path:{type:String,default:""},open:{type:Boolean,default:!1},active:{type:Boolean,default:!1},draggable:{type:Boolean,default:!1},label:{type:String,default:null},level:{type:Number,default:0}},data(){return{opened:this.open||this.schema.open}},computed:{meta(){return this.container.meta},store(){return this.container.store},disabled(){return this.container.disabled},nestedMeta(){return{...this.meta,schema:this.schema}},properties(){return G(this.schema.properties)},childrenSchema(){return this.schema.children},childrenList:{get(){var t;const e=(t=this.childrenSchema)==null?void 0:t.name;return e&&this.data[e]},set(e){var o;const t=(o=this.childrenSchema)==null?void 0:o.name;t&&(this.updateOrder(this.childrenSchema,e),this.data[t]=e,this.$emit("update:data",e))}},childrenDraggable(){var e;return((e=this.childrenList)==null?void 0:e.length)>1&&this.getSchemaValue("draggable",{type:Boolean,default:!1,schema:this.childrenSchema})},numChildren(){var e;return((e=this.childrenList)==null?void 0:e.length)||0},numProperties(){var e;return((e=this.properties)==null?void 0:e.length)||0},numEntries(){return this.numProperties+this.numChildren},childrenItems(){const{childrenSchema:e,childrenList:t}=this;if(e&&t){const{editPath:o}=this.container,s=!this.path&&e.open;return t.map((a,i)=>{const r=e.path&&`${this.path}/${e.path}/${i}`,l=s||o.startsWith(r)&&r.length<o.length;return{data:a,path:r,open:l,active:o===r}})}return[]},details(){const{numChildren:e}=this;return e&&`${e} ${e===1?"item":"items"}`},hasEditButtons(){return this.draggable||this.editable||this.deletable},creatable:b("creatable",{type:Boolean,default:!1,get(e){return e&&A(this.schema)}}),editable:b("editable",{type:Boolean,default:!1,get(e){return e&&A(this.schema)}}),deletable:b("deletable",{type:Boolean,default:!1})},methods:{getPropertyDataPath(e){return O(this.dataPath,e.name)},editPath(e){this.$router.push({path:`${this.container.path}${e}`,query:this.$route.query})},onEdit(){this.editPath(this.path)},onDelete(){},onChange(){this.container.onChange()},onEndDrag(e){Be.methods.onEndDrag.call(this,e);const{item:t}=e;t.classList.contains("dito-active")&&this.$nextTick(()=>{this.editPath(e.item.dataset.path)})}}}),fi=y(mi,[["render",pi]]),gi={class:"dito-table-head"},bi=["onClick"],yi={key:1},ki={key:0};function Ci(e,t,o,s,a,i){const r=n.resolveComponent("RouterLink");return n.openBlock(),n.createElementBlock("thead",gi,[n.createElementVNode("tr",null,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.columns,l=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[e.shouldRenderSchema(l)?(n.openBlock(),n.createElementBlock("th",{key:0,class:n.normalizeClass(e.getColumnClass(l))},[l.sortable?(n.openBlock(),n.createBlock(r,{key:0,to:e.getSortLink(l),custom:""},{default:n.withCtx(({navigate:d})=>[n.createElementVNode("button",{class:n.normalizeClass(["dito-button",e.getSortClass(l)]),type:"button",onClick:d},[t[0]||(t[0]=n.createElementVNode("div",{class:"dito-order-arrows"},null,-1)),n.createElementVNode("span",null,n.toDisplayString(e.getLabel(l)),1)],10,bi)]),_:2},1032,["to"])):(n.openBlock(),n.createElementBlock("span",yi,n.toDisplayString(e.getLabel(l)),1))],2)):n.createCommentVNode("",!0)],64))),256)),e.hasEditButtons?(n.openBlock(),n.createElementBlock("th",ki,t[1]||(t[1]=[n.createElementVNode("span",null,null,-1)]))):n.createCommentVNode("",!0)])])}const $i=C.component("DitoTableHead",{props:{query:{type:Object,required:!0},columns:{type:Object,required:!0},hasEditButtons:{type:Boolean,required:!0}},computed:{sort(){const e=(this.query.order||"").split(/\s+/);return{name:e[0],order:e[1]}}},methods:{getColumnClass(e){return`dito-column-${c.hyphenate(e.name)}`},getSortClass(e){return this.sort.name===e.name?`dito-selected dito-order-${this.sort.order}`:null},getSortLink(e){const t=this.sort.name===e.name&&this.sort.order==="asc"?"desc":"asc";return this.getQueryLink({...this.query,order:`${e.name} ${t}`})}}}),Bi=y($i,[["render",Ci]]),Di=["innerHTML"];function wi(e,t,o,s,a,i){return n.openBlock(),n.createElementBlock("td",{class:n.normalizeClass(e.cell.class),style:n.normalizeStyle(e.cell.style)},[e.cell.component?(n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.cell.component),{key:0,schema:e.schema,dataPath:e.dataPath,data:e.data,meta:e.meta,store:e.store,nested:e.nested,disabled:e.disabled},null,8,["schema","dataPath","data","meta","store","nested","disabled"])):(n.openBlock(),n.createElementBlock("span",{key:1,innerHTML:e.renderCell(e.data)},null,8,Di))],6)}const Si=C.component("DitoTableCell",{mixins:[j],props:{cell:{type:Object,required:!0},schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:Object,required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},nested:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1}},methods:{renderCell(e){const{name:t,render:o}=this.cell,s=e[t];return o?o.call(this,new S(this,{name:t,value:s,data:e,dataPath:O(this.dataPath,t)})):c.escapeHtml(s)}}}),Vi=y(Si,[["render",wi]]),Pi={class:"dito-upload-file"},Ei={class:"dito-thumbnail__inner"},Ni=["src"],Oi={key:1,class:"dito-thumbnail__type"};function Fi(e,t,o,s,a,i){return n.openBlock(),n.createElementBlock("div",Pi,[e.thumbnail?(n.openBlock(),n.createElementBlock("div",{key:0,class:n.normalizeClass(["dito-thumbnail",`dito-thumbnail--${e.thumbnail}`])},[n.createElementVNode("div",Ei,[e.source?(n.openBlock(),n.createElementBlock("img",{key:0,src:e.source,crossorigin:"anonymous"},null,8,Ni)):(n.openBlock(),n.createElementBlock("div",Oi,[n.createElementVNode("span",null,n.toDisplayString(e.type),1)]))])],2)):n.createCommentVNode("",!0),n.createElementVNode("span",null,n.toDisplayString(e.file.name),1)])}const Li=C.component("DitoUploadFile",{props:{file:{type:Object,required:!0},thumbnail:{type:String,default:null},thumbnailUrl:{type:String,default:null}},data(){return{uploadUrl:null}},computed:{type(){return Ti[this.file.type]||this.file.name.split(".").pop().toUpperCase()},source(){return this.uploadUrl||this.thumbnailUrl}},watch:{"file.upload.file":{immediate:!0,handler(e){if(this.thumbnail&&(e!=null&&e.type.startsWith("image/"))){const t=new FileReader;t.onload=()=>{this.uploadUrl=t.result},t.readAsDataURL(e)}else this.uploadUrl=null}}}}),Ti={"text/plain":"TXT","text/html":"HTML","text/css":"CSS","text/javascript":"JS","image/jpeg":"JPG","image/png":"PNG","image/gif":"GIF","image/svg+xml":"SVG","movie/mp4":"MP4","audio/mpeg":"MP3","application/json":"JSON","application/xml":"XML","application/pdf":"PDF","application/zip":"ZIP"},ji=y(Li,[["render",Fi]]);function Mi(e,t,o={}){let s;const{document:a=W.defaultDocument,...i}=o,r={onUpdate:u=>{zi(t,u.oldIndex,u.newIndex,u)}},l=()=>{const u=typeof e=="string"?a==null?void 0:a.querySelector(e):W.unrefElement(e);!u||s!==void 0||(s=new kn(u,{...r,...i}))},d=()=>{s==null||s.destroy(),s=void 0},h=(u,p)=>{if(p!==void 0)s==null||s.option(u,p);else return s==null?void 0:s.option(u)};return W.tryOnMounted(l),W.tryOnScopeDispose(d),{stop:d,start:l,option:h}}function Ri(e,t,o){const s=e.children[o];e.insertBefore(t,s)}function Ii(e){e.parentNode&&e.parentNode.removeChild(e)}function zi(e,t,o,s=null){s!=null&&(Ii(s.item),Ri(s.from,s.item,t));const a=n.isRef(e),i=a?[...n.toValue(e)]:n.toValue(e);if(o>=0&&o<i.length){const r=i.splice(t,1)[0];n.nextTick(()=>{i.splice(o,0,r),a&&(e.value=i)})}}const qi=n.defineComponent({name:"UseSortable",props:{modelValue:{type:Array,required:!0},tag:{type:String,default:"div"},options:{type:Object,required:!0}},setup(e,{slots:t}){const o=W.useVModel(e,"modelValue"),s=n.ref(),a=n.reactive(Mi(s,o,e.options));return()=>{if(t.default)return n.h(e.tag,{ref:s},t.default(a))}}});function Ui(e,t,o,s,a,i){const r=n.resolveComponent("UseSortable");return e.draggable?(n.openBlock(),n.createBlock(r,{key:0,class:n.normalizeClass(["dito-draggable",{"dito-draggable--dragging":e.isDragging}]),tag:e.tag,modelValue:e.modelValue,options:{...e.options,onStart:e.onStart,onEnd:e.onEnd},"onUpdate:modelValue":t[0]||(t[0]=l=>e.$emit("update:modelValue",l))},{default:n.withCtx(()=>[n.renderSlot(e.$slots,"default")]),_:3},8,["class","tag","modelValue","options"])):(n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.tag),{key:1},{default:n.withCtx(()=>[n.renderSlot(e.$slots,"default")]),_:3}))}const Ai=C.component("DitoDraggable",{mixins:[H],components:{UseSortable:qi},emits:["update:modelValue"],props:{modelValue:{type:Array,required:!0},tag:{type:String,default:"div"},options:{type:Object,required:!0},draggable:{type:Boolean,default:!0}},data(){return{mouseEvents:null,isDragging:!1}},methods:{onStart(e){var t,o,s;(o=(t=this.options).onStart)==null||o.call(t,e),this.isDragging=!0,(s=this.mouseEvents)==null||s.remove()},onEnd(e){var t,o;(o=(t=this.options).onEnd)==null||o.call(t,e),this.mouseEvents=this.domOn(document,{mousedown:this.onMouse,mousemove:this.onMouse,mouseleave:this.onMouse})},onMouse(){var e;this.isDragging=!1,(e=this.mouseEvents)==null||e.remove(),this.mouseEvents=null}}}),Hi=y(Ai,[["render",Ui]]);function Wi(e,t,o,s,a,i){return n.withDirectives((n.openBlock(),n.createElementBlock("div",{class:"dito-spinner",style:n.normalizeStyle({"--color":e.color,"--size":e.size,"--margin":e.margin})},t[0]||(t[0]=[n.createElementVNode("div",{class:"dito-spinner__pulse dito-spinner__pulse1"},null,-1),n.createElementVNode("div",{class:"dito-spinner__pulse dito-spinner__pulse2"},null,-1),n.createElementVNode("div",{class:"dito-spinner__pulse dito-spinner__pulse3"},null,-1)]),4)),[[n.vShow,e.loading]])}const Ki=C.component("DitoSpinner",{props:{loading:{type:Boolean,default:!0},color:{type:String,default:null},size:{type:String,default:null},margin:{type:String,default:null}}}),Yi=y(Ki,[["render",Wi]]);function an({vnode:e}){return e}an.props={vnode:{type:Object,required:!0}};const Ji=C.component("DitoVnode",an),Gi=Object.freeze(Object.defineProperty({__proto__:null,DitoAccount:Na,DitoButtons:kr,DitoClipboard:Rr,DitoContainer:nr,DitoCreateButton:Or,DitoDialog:tn,DitoDraggable:Hi,DitoEditButtons:Dr,DitoElement:La,DitoErrors:Zr,DitoForm:sn,DitoFormInner:Yr,DitoFormNested:Jr,DitoHeader:ha,DitoLabel:Ua,DitoMenu:na,DitoNavigation:fa,DitoNotifications:Ca,DitoPagination:si,DitoPane:va,DitoPanel:cr,DitoPanels:mr,DitoRoot:_e,DitoSchema:Ka,DitoSchemaInlined:Ga,DitoScopes:ti,DitoSidebar:wa,DitoSpinner:Yi,DitoTableCell:Vi,DitoTableHead:Bi,DitoTabs:ir,DitoTrail:ia,DitoTreeItem:fi,DitoUploadFile:ji,DitoVNode:Ji,DitoView:en},Symbol.toStringTag,{value:"Module"})),B={extends:C,mixins:[Le],nativeField:!1,textField:!1,defaultValue:null,defaultNested:!0,defaultVisible:!0,generateLabel:!0,excludeValue:!1,ignoreMissingValue:null,omitSpacing:!1,component:C.component,get:le,register(e,t={}){e=c.asArray(e);const o=this.component(`DitoType${c.camelize(e[0],!0)}`,t);for(const s of e)co(s,o);return o}},Qi=["id","type","title"],Xi={key:0,class:"dito-button__text"},Zi=["data-info"];function _i(e,t,o,s,a,i){return n.openBlock(),n.createElementBlock("button",n.mergeProps({class:["dito-button",e.buttonClass],id:e.dataPath,ref:"element",type:e.type,title:e.title},e.attributes),[e.text?(n.openBlock(),n.createElementBlock("div",Xi,n.toDisplayString(e.text),1)):n.createCommentVNode("",!0),!e.label&&e.info?(n.openBlock(),n.createElementBlock("div",{key:1,class:"dito-info","data-info":e.info},null,8,Zi)):n.createCommentVNode("",!0)],16,Qi)}const vi=B.register(["button","submit"],{defaultValue:()=>{},excludeValue:!0,defaultWidth:"auto",generateLabel:!1,computed:{verb(){return this.verbs[this.name]},buttonClass(){return this.verb?`dito-button-${this.verb}`:null},text:b("text",{type:String}),title(){return this.text||c.labelize(this.verb)},info:b("info",{type:String,default:null}),closeForm:b("closeForm",{type:Boolean,default:!1})},methods:{getEvents(){const{onFocus:e,onBlur:t,onClick:o}=this;return{onFocus:e,onBlur:t,onClick:o}},async submit(e){var t;return(t=this.resourceComponent)==null?void 0:t.submit(this,e)},async onClick(){await this.emitEvent("click",{parent:this.schemaComponent})===void 0&&Ut(this.schema)&&await this.submit()}}}),xi=y(vi,[["render",_i]]),el={class:"dito-checkbox"},tl=["id"];function nl(e,t,o,s,a,i){return n.openBlock(),n.createElementBlock("div",el,[n.withDirectives(n.createElementVNode("input",n.mergeProps({id:e.dataPath,ref:"element","onUpdate:modelValue":t[0]||(t[0]=r=>e.value=r),type:"checkbox"},e.attributes),null,16,tl),[[n.vModelCheckbox,e.value]])])}const ol=B.register("checkbox",{nativeField:!0}),sl=y(ol,[["render",nl]]),rn={mixins:[on],data(){return{isLoading:!1,asyncDataEntries:n.markRaw({})}},methods:{handleDataSchema(e,t,o){var r,l;c.isObject(e)||(e={data:e});let{data:s=void 0,dataPath:a=null}=e;const i=(r=this.asyncDataEntries)[t]??(r[t]={reactiveVersion:n.ref(1),dependencyFunction:null,resolvedData:void 0,resolving:!1,resolved:!1});if(i.reactiveVersion.value&&((l=i.dependencyFunction)==null||l.call(i,this.context)),i.resolved){const{resolvedData:d}=i;return i.resolvedData=void 0,i.resolved=!1,d}if(i.resolving)s=null;else if(s){if(c.isFunction(s)){const d=s(this.context);c.isFunction(d)?(i.dependencyFunction=s,s=d(this.context)):s=d}c.isPromise(s)&&(i.resolving=!0,this.resolveData(s,o).then(d=>{i.resolvedData=d,i.resolving=!1,i.resolved=!0,i.reactiveVersion.value++}).catch(d=>{console.error(d),i.resolving=!1}),s=null)}else a&&(s=c.getValueAtDataPath(this.rootData,c.normalizeDataPath(`${this.dataPath}/${a}`)));return s},async resolveData(e,t={}){let o=!1;const s=setTimeout(()=>{this.setLoading(!0,t),o=!0},0);let a=null;try{a=await(c.isFunction(e)?e():e)}catch(i){this.addError(i.message||i)}return o?this.setLoading(!1,t):clearTimeout(s),a}}},De={mixins:[rn],computed:{selectedValue:{get(){const e=o=>{const s=this.relate?this.getValueForOption(o):o;return this.hasOptions?this.getOptionForValue(s)?s:null:o},t=c.isArray(this.value)?this.value.map(e).filter(o=>o!==null):e(this.value);return this.hasOptions&&(t===null&&this.value!==null||vn(this.value))&&(this.selectedValue=t),t},set(e){const t=o=>this.relate?this.getOptionForValue(o):o;this.value=c.isArray(e)?e.map(t):t(e)}},selectedOption(){return this.getOptionForValue(this.selectedValue)},options(){const e=this.handleDataSchema(this.schema.options,"options")??[];if(!c.isArray(e))throw new Error(`Invalid options data, should be array: ${e}`);return this.processOptions(e)},activeOptions(){return this.options},hasOptions(){return this.activeOptions.length>0},relate:b("relate",{type:Boolean,default:!1,callback:!1}),groupBy:b("groupBy",{type:String,default:null}),optionLabel:b("options.label",{type:[String,Function],default:null,get(e){return e||this.getOptionKey("label")||null}}),optionValue:b("options.value",{type:[String,Function],default:null,get(e){return e||this.relate&&"id"||this.getOptionKey("value")||null}}),searchFilter:b("search",{type:[Object,Function],default:null,get(e){if(e){const{filter:t,debounce:o}=c.isFunction(e)?{filter:e}:e;return o?c.debounceAsync(t,o):t}}}),editable:b("editable",{type:Boolean,default:!1,get(e){return e&&Do(this.schema,this.context)}}),editPath(){return this.editable&&this.selectedValue?St(this.schema,this.selectedValue,this.context):null},groupByLabel(){return this.groupBy?"label":null},groupByOptions(){return this.groupBy?"options":null}},methods:{getOptionKey(e){const[t]=this.activeOptions;return c.isObject(t)&&e in t?e:null},processOptions(e){if(e.length){if(this.relate)for(const t of e)"id"in t||_n(t,"id");if(this.groupBy){const t={};e=e.reduce((o,s)=>{const a=s[this.groupBy];let i=t[a];return i||(i=t[a]={[this.groupByLabel]:a,[this.groupByOptions]:[]},o.push(i)),i[this.groupByOptions].push(s),o},[])}}return e},getOptionForValue(e){const t=(o,s,a)=>{for(const i of o)if(a){const r=t(i.options,s,null);if(r)return r}else if(s===this.getValueForOption(i))return i};return this.optionValue?t(this.activeOptions,e,this.groupBy):e},getValueForOption(e){const{optionValue:t}=this;return c.isString(t)?(e==null?void 0:e[t])??null:c.isFunction(t)?t(new S(this,{option:e})):e},getLabelForOption(e){const{optionLabel:t}=this;return c.isString(t)?e==null?void 0:e[t]:c.isFunction(t)?t(new S(this,{option:e})):c.labelize(`${e}`)}},processValue({schema:e,value:t,dataPath:o},s){var a;if(e.relate){const i=(a=e.options)==null?void 0:a.dataPath,r=i?c.normalizeDataPath(`${o}/${i}`):null;s.addRelation(o,r,e),r&&s.setSourceRelated(r);const l=d=>d&&{id:d.id};t=c.isArray(t)?t.map(l):l(t)}return t}},al=["id"],rl={class:"dito-checkbox"},il=["value"];function ll(e,t,o,s,a,i){return n.openBlock(),n.createElementBlock("ul",{class:n.normalizeClass(["dito-checkboxes",`dito-layout-${e.schema.layout||"vertical"}`]),id:e.dataPath},[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.options,r=>(n.openBlock(),n.createElementBlock("li",null,[n.createElementVNode("label",null,[n.createElementVNode("div",rl,[n.withDirectives(n.createElementVNode("input",n.mergeProps({ref_for:!0,ref:"element","onUpdate:modelValue":t[0]||(t[0]=l=>e.selectedOptions=l),type:"checkbox",value:e.getValueForOption(r)},e.attributes),null,16,il),[[n.vModelCheckbox,e.selectedOptions]]),n.createElementVNode("span",null,n.toDisplayString(e.getLabelForOption(r)),1)])])]))),256))],10,al)}const dl=B.register("checkboxes",{mixins:[De],nativeField:!0,defaultValue:[],defaultWidth:"auto",computed:{selectedOptions:{get(){return(this.selectedValue||[]).filter(e=>e)},set(e){this.selectedValue=e||[]}}}}),cl=y(dl,[["render",ll]]),hl=["id"],ul={class:"dito-code__editor",ref:"editor"};function pl(e,t,o,s,a,i){return n.openBlock(),n.createElementBlock("div",{class:"dito-code",id:e.dataPath,style:n.normalizeStyle(e.style)},[n.createElementVNode("div",ul,null,512),e.resizable?(n.openBlock(),n.createElementBlock("div",{key:0,class:"dito-resize",onMousedown:t[0]||(t[0]=n.withModifiers((...r)=>e.onDragResize&&e.onDragResize(...r),["stop","prevent"]))},null,32)):n.createCommentVNode("",!0)],12,hl)}const ml=B.register("code",{mixins:[H],data(){return{height:null}},computed:{lines:b("lines",{type:Number,default:3}),language:b("language",{type:String,default:"javascript"}),indentSize:b("indentSize",{type:Number,default:2}),resizable:b("resizable",{type:Boolean,default:!1}),style(){return{height:this.height||`calc(${this.lines}em * var(--line-height))`}}},mounted(){const e=new Cn(this.$refs.editor,{language:this.language,indentSize:this.indentSize,lineNumbers:!1});let t=!1,o=!1,s=!1;const a=()=>{!this.focused&&t&&(t=!1,this.onChange())},i=()=>this.onFocus(),r=()=>{this.onBlur(),a()};this.domOn(this.$refs.editor.querySelector("textarea"),{focus:i,blur:r});const l=h=>{h!==e.code&&(s=!0,e.updateCode(h))},d=h=>{h!==this.value&&(o=!0,this.value=h,t=!0,a())};e.onUpdate(h=>{s?s=!1:d(h)}),this.$watch("value",h=>{o?o=!1:l(h||"")}),this.$watch("language",h=>{e.updateLanguage(h)}),l(this.value||"")},methods:{focusElement(){var e;(e=this.$el.querySelector("textarea"))==null||e.focus()},blurElement(){var e;(e=this.$el.querySelector("textarea"))==null||e.blur()},onDragResize(e){const t=({clientX:r,clientY:l})=>({x:r,y:l});let o=t(e).y,s=parseFloat(getComputedStyle(this.$el).height);const a=r=>{const{y:l}=t(r);s+=l-o,o=l,this.height=`${Math.max(s,0)}px`},i=this.domOn(document,{mousemove:a,mouseup(r){a(r),i.remove()}})}}}),fl=y(ml,[["render",pl]]),gl=["id"],bl={key:0,class:"dito-color-preview dito-inherit-focus"},yl=["disabled"];function kl(e,t,o,s,a,i){const r=n.resolveComponent("SketchPicker"),l=n.resolveComponent("Trigger");return n.openBlock(),n.createBlock(l,{class:"dito-color",show:e.showPopup,"onUpdate:show":t[3]||(t[3]=d=>e.showPopup=d),trigger:"focus"},{trigger:n.withCtx(()=>[n.createElementVNode("div",{class:n.normalizeClass(["dito-input",{"dito-focus":e.showPopup}])},[n.withDirectives(n.createElementVNode("input",n.mergeProps({id:e.dataPath,ref:"element","onUpdate:modelValue":t[0]||(t[0]=d=>e.hexValue=d),type:"input",size:"8"},e.attributes),null,16,gl),[[n.vModelText,e.hexValue]]),e.value?(n.openBlock(),n.createElementBlock("div",bl,[n.createElementVNode("div",{style:n.normalizeStyle({background:`#${e.hexValue||"00000000"}`})},null,4)])):n.createCommentVNode("",!0),e.showClearButton?(n.openBlock(),n.createElementBlock("button",{key:1,class:"dito-button-clear dito-button-overlay",disabled:e.disabled,onClick:t[1]||(t[1]=n.withModifiers((...d)=>e.clear&&e.clear(...d),["stop"]))},null,8,yl)):n.createCommentVNode("",!0)],2)]),popup:n.withCtx(()=>[n.createVNode(r,{class:"dito-color-picker",modelValue:e.colorValue,"onUpdate:modelValue":t[2]||(t[2]=d=>e.colorValue=d),disableAlpha:!e.alpha,disableFields:!e.inputs,presetColors:e.presets},null,8,["modelValue","disableAlpha","disableFields","presetColors"])]),_:1},8,["show"])}const{hex:Cl}=Ve.Sketch.computed;Ve.Sketch.computed.hex=function(){return Cl.call(this).toLowerCase()};const $l=B.register("color",{components:{Trigger:Ze,SketchPicker:Ve.Sketch},data(){return{showPopup:!1,convertedValue:null}},computed:{canUpdateValue(){return!this.focused||this.readonly},colorValue:{get(){return this.convertedValue||this.value||(this.colorFormat==="hex"?"":{})},set(e){this.value=ln(e,this.colorFormat)}},hexValue:{get(){const e=Se(this.value);return e.isValid()?e.toString(e.getAlpha()<1?"hex8":"hex6").slice(1).toLowerCase():null},set(e){if(Se(e).isValid()){const o=ln(e,this.colorFormat);this.canUpdateValue?this.value=o:this.convertedValue=o}}},colorFormat:b("format",{type:String,default:"hex"}),alpha:b("alpha",{type:Boolean,default:!1}),inputs:b("inputs",{type:Boolean,default:!0}),presets:b("presets",{type:Array,default:["#ffffff","#c3c3c3","#7f7f7f","#000000","#880015","#ed1c24","#ff7f27","#fff200","#22b14c","#00a2e8","#3f48cc","#a349a4","#b97a57","#ffaec9","#ffc90e","#00000000"]})},watch:{value:"onChange",canUpdateValue(e){e&&this.convertedValue!==null&&(this.value=this.convertedValue,this.convertedValue=null)}}});function ln(e,t){return c.isObject(e)?Bl(e,t):Dl(Se(e),t)}function Bl(e,t){const o=e[{hex:(e==null?void 0:e.a)<1?"hex8":"hex",rgb:"rgba"}[t]||t];return c.isString(o)&&o[0]==="#"?o.toLowerCase():o}function Dl(e,t){switch(t){case"rgb":return e.toRgb();case"prgb":return e.toPercentageRgb();case"name":return e.toName();case"hsl":return e.toHsl();case"hsv":return e.toHsv();case"hex3":return`#${e.toHex(!0)}`;case"hex4":return`#${e.toHex8(!0)}`;case"hex8":return`#${e.toHex8()}`;case"hex":case"hex6":default:return`#${e.toHex()}`}}const wl=y($l,[["render",kl]]);function Sl(e,t,o,s,a,i){return n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.schema.component),n.normalizeProps(n.guardReactiveProps(e.$props)),null,16)}const Vl=B.register("component",{defaultValue:()=>{},ignoreMissingValue:({schema:e})=>!("default"in e),async processSchema(e,t){await he(t)}}),Pl=y(Vl,[["render",Sl]]),El=["id","name","value","disabled"];function Nl(e,t,o,s,a,i){return n.openBlock(),n.createElementBlock("input",{class:"dito-text dito-input",id:e.dataPath,ref:"element",name:e.name,type:"text",value:e.value,disabled:e.disabled,readonly:!0},null,8,El)}const Ol=B.register(["computed","data","hidden"],{mixins:[rn],defaultValue:()=>{},defaultVisible:!1,computed:{value:{get(){const{schema:e}=this;if(e.data||e.dataPath){const t=this.handleDataSchema(e,"value");this.data[this.name]=t}return ie.computed.value.get.call(this)},set(e){ie.computed.value.set.call(this,e)}}}}),Fl=y(Ol,[["render",Nl]]),Ll={class:"dito-date"},Tl=["disabled"];function jl(e,t,o,s,a,i){return n.openBlock(),n.createElementBlock("div",Ll,[(n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.getComponent(e.type)),n.mergeProps({id:e.dataPath,ref:"element",modelValue:e.dateValue,"onUpdate:modelValue":t[2]||(t[2]=r=>e.dateValue=r),locale:e.locale,format:e.formats},e.attributes),{after:n.withCtx(()=>[e.showClearButton?(n.openBlock(),n.createElementBlock("button",{key:0,class:"dito-button-clear dito-button-overlay",disabled:e.disabled,onClick:t[0]||(t[0]=n.withModifiers((...r)=>e.clear&&e.clear(...r),["stop"])),onMousedown:t[1]||(t[1]=n.withModifiers(()=>{},["stop"]))},null,40,Tl)):n.createCommentVNode("",!0)]),_:1},16,["id","modelValue","locale","format"]))])}const Ml=B.register(["date","datetime","time"],{components:{DatePicker:Jt,TimePicker:Gt,DateTimePicker:ws},nativeField:!0,textField:!0,computed:{dateValue:{get(){const{value:e}=this;return e&&new Date(e)},set(e){this.value=e}},formats:b("formats",{type:Object,default:null,get(e){const{date:t,time:o}=c.assignDeeply({},this.api.formats,e);return{date:["date","datetime"].includes(this.type)?t:null,time:["time","datetime"].includes(this.type)?o:null}}})},methods:{getComponent(e){return{date:"date-picker",time:"time-picker",datetime:"date-time-picker"}[e]}},processValue({value:e}){return c.isDate(e)?e.toISOString():e}}),Rl=y(Ml,[["render",jl]]);function dn(e){const t=e?c.isArray(e)?e:Object.entries(e):[];return new URLSearchParams(t.reduce((o,[s,a])=>{if(c.isArray(a))for(const i of a)o.push([s,i??""]);else a!=null&&o.push([s,a]);return o},[])).toString().replaceAll(/%(?:21|24|28|29|2C|2F|3A|3B|3D|3F|40)/g,decodeURIComponent)}function Il({path:e,query:t,hash:o}){const{location:s}=window;history.replaceState(history.state,null,`${s.origin}${e??s.pathname}?${t?dn(t):s.search.slice(1)}${o??s.hash}`)}const Z={mixins:[$e,ve,_t],defaultValue:e=>te(e.schema)?[]:null,excludeValue:e=>!!e.schema.resource,provide(){return{$sourceComponent:()=>this}},data(){return{wrappedPrimitives:null,unwrappingPrimitives:$n.raw(!1)}},computed:{sourceComponent(){return this},isObjectSource(){return ee(this.type)},isListSource(){return te(this.type)},hasData(){return!!this.value},shouldRender(){return this.sourceDepth<this.maxDepth},isReady(){return this.shouldRender&&(this.hasData||!this.providesData)},isInView(){return!!this.viewComponent},wrapPrimitives(){return this.schema.wrapPrimitives},listData:{get(){let e=this.value;this.isObjectSource?e=e!=null?[e]:[]:e=this.unwrapListData(e)||e,e||(e=[]);const{wrapPrimitives:t}=this;return t?(this.unwrappingPrimitives.value?this.unwrappingPrimitives.value=!1:this.wrappedPrimitives=e.map(o=>({[t]:o})),this.wrappedPrimitives):e},set(e){this.wrapPrimitives?this.wrappedPrimitives=e:this.value=this.isObjectSource?e&&e.length>0?e[0]:null:e}},objectData:{get(){return this.listData[0]||null},set(e){this.listData=e?[e]:[]}},sourceSchema(){return this.schema},sourceDepth(){return this.$route.matched.reduce((e,t)=>e+(t.meta.schema===this.sourceSchema?1:0),0)},path(){return this.routeComponent.getChildPath(this.schema.path)},defaultQuery(){const{defaultOrder:e}=this;return e?{order:e}:{}},query:Fe("query",{get(e){return{...this.defaultQuery,...e}},set(e){var s;const{scope:t=(s=this.defaultScope)==null?void 0:s.name,page:o=this.schema.page}=this.query;return e={...this.query,...t!=null&&{scope:t},...o!=null&&{page:o},...e},c.equals(e,this.$route.query)||Il({query:e}),e}}),total:Fe("total"),columns(){return G(this.schema.columns)},scopes(){return G(this.schema.scopes)},defaultScope(){let e=null;if(this.scopes)for(const t of Object.values(this.scopes)){if(t.defaultScope)return t;e||(e=t)}return e},defaultOrder(){if(this.columns)for(const e of Object.values(this.columns)){const{defaultSort:t}=e;if(t){const o=c.isString(t)?t:"asc";return`${e.name} ${o}`}}return null},nestedMeta(){return{...this.meta,schema:this.schema}},forms(){return Object.values(Y(this.schema,this.context))},view(){return qe(this.schema,this.context)},linksToView(){return!!this.view},buttonSchemas(){return x(this.schema.buttons)},isCompact(){return this.forms.every(Pt)},isInlined(){return Ae(this.schema)},paginate:b("paginate",{type:Number}),render:b("render",{type:Function,default:null}),creatable:b("creatable",{type:Boolean,default:!1,get(e){return e&&A(this.schema)?this.isObjectSource?!this.value:!0:!1}}),editable:b("editable",{type:Boolean,default:!1,get(e){return e&&!this.isInlined}}),deletable:b("deletable",{type:Boolean,default:!1}),draggable:b("draggable",{type:Boolean,default:!1,get(e){return this.isListSource&&this.listData.length>1&&e}}),collapsible:b("collapsible",{type:Boolean,default:!1,get(e){return e&&this.isInlined}}),collapsed:b("collapsed",{type:Boolean,default:!1,get(e){return e&&this.collapsible}}),maxDepth:b("maxDepth",{type:Number,default:1})},watch:{$route:{flush:"post",handler(e,t){this.providesData&&(t.path===e.path&&t.hash===e.hash?(this.query=e.query,this.loadData(!1)):this.meta.reload&&t.path!==e.path&&t.path.startsWith(e.path)&&(this.meta.reload=!1,this.loadData(!1)))}},wrappedPrimitives:{deep:!0,handler(e,t){const{wrapPrimitives:o}=this;o&&t!==null&&(this.unwrappingPrimitives.value=!0,this.value=e.map(s=>s[o]))}}},methods:{setupData(){this.query=this.$route.query,this.ensureData()},clearData(){this.total=0,this.value=null},setData(e){!e||this.isListSource&&c.isArray(e)||this.isObjectSource&&c.isObject(e)?this.value=e:this.unwrapListData(e)||c.isObject(e)&&this.isInView&&this.viewComponent.setData(e)},unwrapListData(e){if(this.isListSource&&c.isObject(e)&&c.isNumber(e.total)&&c.isArray(e.results))return this.total=e.total,this.value=e.results,this.value},createItem(e,t){const o=this.createData(e,t);return this.isObjectSource?this.objectData=o:this.listData.push(o),this.collapsible&&this.$nextTick(()=>this.openSchemaComponent(-1)),this.onChange(),o},removeItem(e,t){let o=!1;if(this.isObjectSource)this.objectData=null,o=!0;else{const{listData:s}=this;t>=0&&(s.splice(t,1),o=!0)}o&&(this.removeItemStore(this.schema,e,t),this.onChange())},deleteItem(e,t){const o=e&&this.getItemLabel(this.schema,e,{index:t,extended:!0}),s=()=>this.notify({type:this.isTransient?"info":"success",title:"Successfully Removed",text:[`${o} was ${this.verbs.deleted}.`,this.transientNote]});if(e&&window.confirm(`Do you really want to ${this.verbs.delete} ${o}?`))if(this.isTransient)this.removeItem(e,t),s();else{const a=this.getItemId(this.schema,e,t),i="delete",r=Ye(a,this.getResource({method:i}));r&&this.handleRequest({method:i,resource:r},l=>{l||(this.removeItem(e,t),s()),this.reloadData()})}},getSchemaComponent(e){const{schemaComponents:t}=this,{length:o}=t;return t[(e%o+o)%o]},openSchemaComponent(e){const t=this.getSchemaComponent(e);t&&(t.opened=!0)},async navigateToComponent(e,t){if(this.collapsible){const o=e.startsWith(this.dataPath)?this.isListSource?c.parseDataPath(e.slice(this.dataPath.length+1))[0]??null:0:null;if(o!==null&&c.isNumber(+o)){const s=this.getSchemaComponent(+o);if(s){const{opened:a}=s;a||(s.opened=!0,await this.$nextTick());const i=s.getComponentsByDataPath(e);if(i.length>0&&((t==null?void 0:t(i))??!0))return!0;s.opened=a}}}return this.navigateToRouteComponent(e,t)},navigateToRouteComponent(e,t){return new Promise((o,s)=>{const a=()=>{const{routeComponents:r}=this.appState,l=r[r.length-1];o((t==null?void 0:t([l]))??!0)},i=c.parseDataPath(e);for(;i.length>0;){const r=this.routeComponent.getChildPath(this.api.normalizePath(c.normalizeDataPath(i))),{matched:l}=this.$router.resolve(r);if(l.length&&l[0].name!=="catch-all"){this.$route.path===r?a():this.$router.push({path:r}).catch(s).then(()=>{this.$nextTick(a)});return}i.pop()}o(!1)})}},async processSchema(e,t,o,s,a,i=!1,r=!1,l=null){Bt(e,t,o);const d=Ae(t);if(d&&t.resource)throw new Error(`Nested ${this.isListSource?"lists":this.isObjectSource?"objects":"schema"} cannot load data from their own resources`);const h=`id${a+1}`,u={api:e,schema:t},p={...u,flatten:r,nested:i,param:h},m=await ko(e,t,a);if(l&&await l(m,a+1),A(t)&&!d){const f=a===0?"":t.path,g={path:cn(f,te(t)?h:null),component:C.component(i?"DitoFormNested":"DitoForm"),meta:p};ee(t)&&s.push({...g,path:cn(f,h)}),f&&s.push({path:f,redirect:".",meta:u});const[k,V]=m.reduce((D,w)=>(D[w.meta.flatten?0:1].push(w),D),[[],[]]);if(V.length&&(g.children=V),s.push(g),k.length)for(const D of k)s.push({...D.redirect?D:g,path:`${g.path}/${D.path}`,meta:{...D.meta,flatten:r}})}},processValue({schema:e,value:t,dataPath:o},s){return s.addSource(o,e),t}};function cn(e,t){return t?e?`${e}/:${t}`:`:${t}`:e}const xe={text(e){const t=[{label:"contains",value:"contains"},{label:"equals",value:"equals"},{label:"starts with",value:"starts-with"},{label:"ends with",value:"ends-with"}];return{operator:e.operators?{type:"select",width:"2/5",options:c.isArray(e.operators)?t.filter(o=>e.operators.includes(o.value)):t,clearable:!0}:null,text:{type:"text",width:e.operators?"3/5":"fill",clearable:!0}}},"date-range"(){const e={type:"datetime",width:"1/2",formats:{date:{day:"2-digit",month:"2-digit",year:"numeric"}},clearable:!0};return{from:e,to:e}}};function zl(e,t,o,s){const{sticky:a,...i}=t,r={type:"panel",label:"Filters",name:"$filters",disabled:!1,sticky:a,data(){return Hl(r,s.value)},components:Ul(i),buttons:hn(!1),panelButtons:hn(!0),events:{change(){this.applyFilters()}},computed:{filters(){return Al(this.schema,this.data)},hasFilters(){return this.filters.length>0}},methods:{applyFilters(){s.value={...s.value,filter:this.filters,page:void 0}},clearFilters(){this.resetData(),this.applyFilters()}}};return $t(e,r),r}function hn(e){return{clear:{type:"button",text:e?null:"Clear",disabled:({schemaComponent:t})=>!t.hasFilters,events:{click({schemaComponent:t}){t.clearFilters()}}},submit:{type:"submit",text:e?null:"Filter",visible:!e,events:{click({schemaComponent:t}){t.applyFilters()}}}}}function ql(e){return`$${e}`}function un(e){return e.startsWith("$")?e.slice(1):null}function Ul(e){var o;const t={};for(const s of Object.values(G(e)||{})){const{filter:a,width:i,...r}=s,l=a?(o=xe[a])==null?void 0:o.call(xe,s):s.components;if(l){r.type="form",r.components={};for(const[d,h]of Object.entries(l))if(h){const u=h.label||c.labelize(h.name||d);r.components[d]={...h,label:!1,placeholder:u}}t[ql(s.name)]={label:r.label??c.labelize(s.name),type:"object",width:i,default:()=>({}),form:r,inlined:!0}}else throw new Error(`Invalid filter '${s.name}': Unknown filter type '${a}'.`)}return t}function pn(e,t){var s;const o=e.components[t];return(s=o==null?void 0:o.form)==null?void 0:s.components}function Al(e,t){const o=[];for(const s in t){const a=t[s];if(a){const i=Object.keys(pn(e,s)).map(r=>a[r]??null);i.some(r=>r!==null)&&o.push(`${un(s)}:${i.map(JSON.stringify).join(",")}`)}}return o}function Hl(e,t){const o={};if(t)for(const a of c.asArray(t.filter)){const[,i,r]=a.match(/^(\w+):(.*)$/);try{o[i]=c.asArray(JSON.parse(`[${r}]`))}catch{}}const s={};for(const a in e.components){const i={},r=o[un(a)];if(r){const l=pn(e,a);if(l){let d=0;for(const h in l)i[h]=r[d++]}}s[a]=i}return s}const Wl=["id"],Kl={key:0,class:"dito-list__header"},Yl={key:1,class:"dito-spacer"},Jl=["id"],Gl={key:1},Ql=["innerHTML"],Xl=["innerHTML"],Zl={key:2,class:"dito-cell-edit-buttons"},_l={key:1},vl=["colspan"];function xl(e,t,o,s,a,i){const r=n.resolveComponent("DitoScopes"),l=n.resolveComponent("DitoPagination"),d=n.resolveComponent("DitoTableHead"),h=n.resolveComponent("DitoTableCell"),u=n.resolveComponent("DitoSchemaInlined"),p=n.resolveComponent("DitoEditButtons"),m=n.resolveComponent("DitoDraggable");return e.isReady?(n.openBlock(),n.createElementBlock("div",{key:0,class:"dito-list",id:e.dataPath},[e.scopes||e.hasPagination?(n.openBlock(),n.createElementBlock("div",Kl,[e.scopes?(n.openBlock(),n.createBlock(r,{key:0,query:e.query,scopes:e.scopes},null,8,["query","scopes"])):e.hasPagination?(n.openBlock(),n.createElementBlock("div",Yl)):n.createCommentVNode("",!0),e.hasPagination?(n.openBlock(),n.createBlock(l,{key:2,query:e.query,limit:e.paginate,total:e.total||0},null,8,["query","limit","total"])):n.createCommentVNode("",!0)])):n.createCommentVNode("",!0),n.createElementVNode("table",{class:n.normalizeClass(["dito-table",{"dito-table-separators":e.isInlined,"dito-table-larger-padding":e.hasEditButtons&&!e.isInlined,"dito-table-alternate-colors":!e.isInlined,"dito-table-even-count":e.hasEvenCount}])},[e.columns?(n.openBlock(),n.createBlock(d,{key:0,query:e.query,columns:e.columns,hasEditButtons:e.hasEditButtons},null,8,["query","columns","hasEditButtons"])):n.createCommentVNode("",!0),n.createVNode(m,{tag:"tbody",options:e.getDraggableOptions(),draggable:e.draggable,modelValue:e.updateOrder(e.sourceSchema,e.listData,e.paginationRange),"onUpdate:modelValue":t[0]||(t[0]=f=>e.listData=f)},{default:n.withCtx(()=>[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.listData,(f,g)=>(n.openBlock(),n.createElementBlock("tr",{id:e.getDataPath(g),key:e.getItemUid(e.schema,f)},[e.columns?(n.openBlock(!0),n.createElementBlock(n.Fragment,{key:0},n.renderList(e.columns,k=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[e.shouldRenderSchema(k)?(n.openBlock(),n.createBlock(h,{key:k.name,class:n.normalizeClass(e.getCellClass(k)),cell:k,schema:e.schema,dataPath:e.getDataPath(g),data:f,meta:e.nestedMeta,store:e.store,nested:!1,disabled:e.disabled||e.isLoading},null,8,["class","cell","schema","dataPath","data","meta","store","disabled"])):n.createCommentVNode("",!0)],64))),256)):(n.openBlock(),n.createElementBlock("td",Gl,[e.isInlined?(n.openBlock(),n.createBlock(u,{key:0,label:e.getItemLabel(e.schema,f,{index:g,asObject:!0}),schema:e.getItemFormSchema(e.schema,f,e.context),dataPath:e.getDataPath(g),data:f,meta:e.nestedMeta,store:e.getItemStore(e.schema,f,g),disabled:e.disabled||e.isLoading,collapsed:e.collapsed,collapsible:e.collapsible,deletable:e.deletable,draggable:e.draggable,editable:e.editable,editPath:e.getEditPath(f,g),onDelete:k=>e.deleteItem(f,g)},null,8,["label","schema","dataPath","data","meta","store","disabled","collapsed","collapsible","deletable","draggable","editable","editPath","onDelete"])):e.schema.component?(n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.schema.component),{key:1,dataPath:e.getDataPath(g),data:f,nested:!1},null,8,["dataPath","data"])):e.render?(n.openBlock(),n.createElementBlock("span",{key:2,innerHTML:e.render(e.getContext(f,g))},null,8,Ql)):(n.openBlock(),n.createElementBlock("span",{key:3,innerHTML:e.getItemLabel(e.schema,f,{index:g})},null,8,Xl))])),e.hasCellEditButtons?(n.openBlock(),n.createElementBlock("td",Zl,[n.createVNode(p,{schema:e.getItemFormSchema(e.schema,f,e.context),dataPath:e.getDataPath(g),data:f,meta:e.nestedMeta,store:e.getItemStore(e.schema,f,g),disabled:e.disabled||e.isLoading,deletable:e.deletable,draggable:e.draggable,editable:e.editable,editPath:e.getEditPath(f,g),onDelete:k=>e.deleteItem(f,g)},null,8,["schema","dataPath","data","meta","store","disabled","deletable","draggable","editable","editPath","onDelete"])])):n.createCommentVNode("",!0)],8,Jl))),128))]),_:1},8,["options","draggable","modelValue"]),e.hasListButtons&&!e.single?(n.openBlock(),n.createElementBlock("tfoot",_l,[n.createElementVNode("tr",null,[n.createElementVNode("td",{class:"dito-cell-edit-buttons",colspan:e.numColumns},[n.createVNode(p,{buttons:e.buttonSchemas,schema:e.schema,dataPath:e.dataPath,data:e.listData,meta:e.meta,store:e.store,nested:e.nested,disabled:e.disabled||e.isLoading,creatable:e.creatable,createPath:e.path},null,8,["buttons","schema","dataPath","data","meta","store","nested","disabled","creatable","createPath"])],8,vl)])])):n.createCommentVNode("",!0)],2),e.hasListButtons&&e.single?(n.openBlock(),n.createBlock(p,{key:1,class:"dito-buttons-large dito-buttons-main dito-buttons-sticky",buttons:e.buttonSchemas,schema:e.schema,dataPath:e.dataPath,data:e.listData,meta:e.meta,store:e.store,disabled:e.disabled||e.isLoading,creatable:e.creatable,createPath:e.path},null,8,["buttons","schema","dataPath","data","meta","store","disabled","creatable","createPath"])):n.createCommentVNode("",!0)],8,Wl)):n.createCommentVNode("",!0)}const ed=B.register("list",{mixins:[Z,Be],getSourceType(e){return e},getPanelSchema(e,t,o,s){const{filters:a}=t;if(a)return zl(e,a,o,n.computed({get(){return s.query},set(i){const r=l=>c.pickBy(l,d=>d!==void 0);c.equals(r(i),r(s.query))||(s.query=i,s.loadData(!1))}}))},computed:{hasPagination(){return!!this.paginate},hasListButtons(){return!!(this.buttonSchemas||this.creatable)},hasEditButtons(){const{listData:e}=this;return e.length>0&&(this.editable||this.deletable||this.draggable)},hasCellEditButtons(){return!this.isInlined&&this.hasEditButtons},hasEvenCount(){return!(this.listData.length%2)},numColumns(){return(this.columns?Object.keys(this.columns).length:1)+(this.hasCellEditButtons?1:0)}},methods:{getDataPath(e){return O(this.dataPath,e)},getEditPath(e,t){if(this.editable){const o=this.getItemId(this.schema,e,t);return St(this.schema,o,this.context)||`${this.path}/${o}`}return null},getCellClass(e){return`dito-cell-${c.hyphenate(e.name)}`},getContext(e,t){return new S(this,{data:e,value:e,index:t,dataPath:this.getDataPath(t)})},onFilterErrors(e){const t=O(this.dataPath,"$filters"),o=this.schemaComponent.getPanelByDataPath(t);if(o)return o.showValidationErrors(e,!0),!0}},async processSchema(e,t,o,s,a,i=!1,r=!1,l=null){await Promise.all([he(t),yt(t.columns),Z.processSchema(e,t,o,s,a,i,r,l)])}}),td=y(ed,[["render",xl]]);function nd(e,t,o,s,a,i){const r=n.resolveComponent("DitoLabel");return n.openBlock(),n.createBlock(r,{class:"dito-label-component",label:e.value,dataPath:e.dataPath},null,8,["label","dataPath"])}const od=B.register("label",{excludeValue:!0,generateLabel:!1}),sd=y(od,[["render",nd]]),ad=["id"],rd={key:0,class:"dito-buttons dito-buttons-toolbar"},id={class:"dito-button-group"},ld=["onClick"];function dd(e,t,o,s,a,i){const r=n.resolveComponent("Icon"),l=n.resolveComponent("EditorContent");return n.openBlock(),n.createElementBlock("div",{class:"dito-markup",id:e.dataPath},[e.groupedButtons.length>0?(n.openBlock(),n.createElementBlock("div",rd,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.groupedButtons,d=>(n.openBlock(),n.createElementBlock("div",id,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(d,({name:h,icon:u,isActive:p,onClick:m})=>(n.openBlock(),n.createElementBlock("button",{class:n.normalizeClass(["dito-button",{"dito-active":p}]),key:h,onClick:m},[n.createVNode(r,{name:u},null,8,["name"])],10,ld))),128))]))),256))])):n.createCommentVNode("",!0),n.createVNode(l,{class:"dito-markup-editor",ref:"editor",editor:e.editor,style:n.normalizeStyle(e.styles)},null,8,["editor","style"]),e.resizable?(n.openBlock(),n.createElementBlock("div",{key:1,class:"dito-resize",onMousedown:t[0]||(t[0]=n.withModifiers((...d)=>e.onDragResize&&e.onDragResize(...d),["stop","prevent"]))},null,32)):n.createCommentVNode("",!0)],8,ad)}const cd=B.register("markup",{mixins:[H],components:{EditorContent:ae.EditorContent,Icon:ye},data(){return{editor:null,height:null}},computed:{lines(){return this.schema.lines||10},hardBreak(){return!!this.schema.hardBreak},styles(){return{height:this.height||`calc(${this.lines}em * var(--line-height))`}},markButtons(){return this.getButtons("marks",{bold:!0,italic:!0,underline:!0,strike:!0,small:!0,code:!0,subscript:!0,superscript:!0,link:{onClick:e=>this.onClickLink(e)}})},basicNodeButtons(){return this.getButtons("nodes",{paragraph:{command:"setParagraph"},heading:{attribute:"level",values:[1,2,3,4,5,6]}})},advancedNodeButtons(){return this.getButtons("nodes",{bulletList:!0,orderedList:!0,blockquote:!0,codeBlock:!0})},toolButtons(){return this.getButtons("tools",{undo:!0,redo:!0,footnotes:{command:"addFootnote"}})},groupedButtons(){return[this.markButtons,this.basicNodeButtons,this.advancedNodeButtons,this.toolButtons].filter(e=>e.length>0)},parseOptions(){return{preserveWhitespace:{collapse:!1,preserve:!0,"preserve-all":"full"}[this.whitespace]}},editorOptions(){return{editable:!this.readyonly,autoFocus:this.autofocus,disableInputRules:!this.enableRules.input,disablePasteRules:!this.enableRules.paste,parseOptions:this.parseOptions}},resizable:b("resizable",{type:Boolean,default:!1}),whitespace:b("whitespace",{type:String,default:"collapse"}),enableRules:b("enableRules",{type:[Object,Boolean],default:!1,get(e){return c.isObject(e)?e:{input:!!e,paste:!!e}}})},watch:{readyonly:"updateEditorOptions",autofocus:"updateEditorOptions",enableRules:"updateEditorOptions"},created(){let e=!1;const t=()=>this.onFocus(),o=()=>{this.onBlur(),i()},s=()=>{a(),this.onInput()},a=c.debounce(()=>{e=!0,i()},100),i=()=>{const r=this.editor.getHTML(),l=this.hardBreak?r.replace(/^<p>(.*?)<\/p>$/s,"$1"):r;l!==this.value&&(this.value=l,this.focused||this.onChange())};this.$watch("value",r=>{if(e)e=!1;else{const l=this.hardBreak?`<p>${r}</p>`:r;this.editor.commands.setContent(l,!1,this.parseOptions)}}),this.editor=new ae.Editor({...this.editorOptions,onFocus:t,onBlur:o,onUpdate:s,extensions:this.getExtensions(),content:this.value||""})},unmounted(){this.editor.destroy()},methods:{onDragResize(e){const t=({clientX:r,clientY:l})=>({x:r,y:l});let o=t(e).y,s=parseFloat(getComputedStyle(this.$refs.editor.$el).height);const a=r=>{const{y:l}=t(r);s+=l-o,o=l,this.height=`${Math.max(s,0)}px`},i=this.domOn(document,{mousemove:a,mouseup(r){a(r),i.remove()}})},updateEditorOptions(){this.editor.setOptions(this.editorOptions)},async onClickLink(e){const t=await this.rootComponent.showDialog({components:{href:{type:"url",label:"Link",autofocus:!0},title:{type:"text",label:"Title"}},buttons:{cancel:{},apply:{type:"submit"},remove:{events:{click({dialogComponent:o}){o.resolve(null)}}}},data:ae.getMarkAttributes(this.editor.state,"link")});if(t){let{href:o,title:s}=t;if(o)try{new URL(o)}catch{o=`https://${o}`}e.commands.setLink({href:o,title:s})}else t===null&&e.commands.unsetLink()},getExtensions(){const{marks:e={},nodes:t={},tools:o={}}=this.schema;return[o.footnotes?st.Document.extend({content:"block+ footnotes?"}):st.Document,Bn.Text,Mn.Paragraph,e.bold&&Dn.Bold,e.italic&&Sn.Italic,e.underline&&On.Underline,e.strike&&Pn.Strike,e.small&&hd,e.code&&wn.Code,e.subscript&&Nn.Superscript,e.superscript&&En.Subscript,e.link&&ud,t.blockquote&&Fn.Blockquote,t.codeBlock&&Ln.CodeBlock,t.heading&&jn.Heading.configure({levels:t.heading}),t.horizontalRule&&Rn.HorizontalRule,(t.orderedList||t.bulletList)&&qn.ListItem,t.bulletList&&zn.BulletList,t.orderedList&&In.OrderedList,...o.footnotes?[Pe.Footnotes,Pe.Footnote,Pe.FootnoteReference]:[],o.history&&Un.History,Tn.HardBreak.extend({addKeyboardShortcuts:()=>{const s=()=>this.editor.commands.setHardBreak();return{"Mod-Enter":s,"Shift-Enter":s,...this.hardBreak?{Enter:s}:null}}})].filter(s=>!!s)},getButtons(e,t){const o=[],{commands:s}=this.editor,a=({name:r,icon:l,command:d,attributes:h,onClick:u})=>{o.push({name:r,icon:l,isActive:this.editor.isActive(r,h),onClick:()=>{d??(d=r in s?r:`toggle${c.camelize(r,!0)}`),d in s&&(u?u(this.editor,h):(m=>this.editor.chain()[d](m).focus().run())(h))}})},i=this.schema[e];if(i)for(const[r,l]of Object.entries(t)){const d=["undo","redo"].includes(r)?"history":r,h=i[d],u=c.hyphenate(r);if(h){if(l===!0)a({name:r,icon:u});else if(c.isObject(l)){const{command:p,attribute:m,values:f,onClick:g}=l;if(m){if(c.isArray(f)&&c.isArray(h))for(const k of f)h.includes(k)&&a({name:r,icon:`${u}-${k}`,command:p,attributes:{[m]:k},onClick:g})}else a({name:r,icon:u,command:p,onClick:g})}}}return o},focusElement(){this.editor.commands.focus()},blurElement(){this.editor.commands.blur()}}}),hd=ae.Mark.create({name:"small",parseHTML(){return[{tag:"small"}]},renderHTML(){return["small",0]},addCommands(){return{setSmall:e=>({commands:t})=>t.setMark(this.name,e),toggleSmall:e=>({commands:t})=>t.toggleMark(this.name,e),unsetSmall:()=>({commands:e})=>e.unsetMark(this.name)}}}),ud=Vn.Link.extend({inclusive:!1,schema:{attrs:{href:{default:null},title:{default:null}},parseHTML(){return[{tag:"a",getAttrs:e=>({href:e.getAttribute("href"),title:e.getAttribute("title")})}]},renderHTML(e){return["a",e.attrs,0]}}}),pd=y(cd,[["render",dd]]),md={class:"dito-multiselect"},fd={class:"dito-multiselect__inner"},gd=["disabled"];function bd(e,t,o,s,a,i){const r=n.resolveComponent("VueMultiselect"),l=n.resolveComponent("DitoEditButtons");return n.openBlock(),n.createElementBlock("div",md,[n.createElementVNode("div",fd,[n.createVNode(r,n.mergeProps({ref:"element",modelValue:e.selectedOptions,"onUpdate:modelValue":t[0]||(t[0]=d=>e.selectedOptions=d),class:{"multiselect--multiple":e.multiple,"multiselect--loading":e.isLoading,"multiselect--highlight":e.showHighlight},showLabels:!1,placeholder:e.placeholder,tagPlaceholder:"Press enter to add new tag",options:e.populate&&e.activeOptions||[],customLabel:e.getLabelForOption,trackBy:e.optionValue,groupLabel:e.groupByLabel,groupValues:e.groupByOptions,multiple:e.multiple,taggable:e.taggable,searchable:e.searchable,internalSearch:!e.searchFilter,preserveSearch:!!e.searchFilter,clearOnSelect:!e.searchFilter,closeOnSelect:!e.stayOpen,loading:e.isLoading},e.attributes,{onOpen:e.onOpen,onClose:e.onClose,onTag:e.onAddTag,onSearchChange:e.onSearchChange}),null,16,["modelValue","class","placeholder","options","customLabel","trackBy","groupLabel","groupValues","multiple","taggable","searchable","internalSearch","preserveSearch","clearOnSelect","closeOnSelect","loading","onOpen","onClose","onTag","onSearchChange"]),e.showClearButton?(n.openBlock(),n.createElementBlock("button",{key:0,class:"dito-button-clear dito-button-overlay",type:"button",disabled:e.disabled,onClick:t[1]||(t[1]=(...d)=>e.clear&&e.clear(...d))},null,8,gd)):n.createCommentVNode("",!0)]),e.editable?(n.openBlock(),n.createBlock(l,{key:0,schema:e.schema,dataPath:e.dataPath,data:e.data,meta:e.meta,store:e.store,disabled:!1,editable:e.editable,editPath:e.editPath},null,8,["schema","dataPath","data","meta","store","editable","editPath"])):n.createCommentVNode("",!0)])}const yd=B.register("multiselect",{mixins:[De],components:{VueMultiselect:An},data(){return{searchedOptions:null,populate:!1}},computed:{selectedOptions:{get(){return this.multiple?(this.selectedValue||[]).map(e=>this.getOptionForValue(e)||this.addTagOption(e)).filter(Boolean):this.selectedOption},set(e){this.selectedValue=this.multiple?(e||[]).map(t=>this.getValueForOption(t)):this.getValueForOption(e),this.onChange()}},activeOptions(){return this.searchedOptions||this.options},multiple:b("multiple",{type:Boolean,default:!1}),searchable:b("searchable",{type:Boolean,default:!1}),taggable:b("taggable",{type:Boolean,default:!1}),stayOpen:b("stayOpen",{type:Boolean,default:!1}),placeholder(){let{placeholder:e,searchable:t,taggable:o}=this.schema;return c.isBoolean(e)&&(e=e?void 0:null),e===void 0?t&&o?`Search or add a ${this.label}`:t?`Select or search ${this.label}`:void 0:e},showHighlight(){return this.isMounted&&this.$refs.element.pointerDirty}},mounted(){this.autofocus&&this.focus()},methods:{addTagOption(e){if(this.taggable){const{optionLabel:t,optionValue:o}=this,s=t&&o?{[t]:e,[o]:e}:e;return this.options.push(s),s}},focusElement(){this.$refs.element.activate()},blurElement(){this.$refs.element.deactivate()},onOpen(){this.populate=!0},onClose(){this.focused&&this.onBlur()},onBlur(){this.$refs.element.isOpen||Le.methods.onBlur.call(this)},onAddTag(e){const t=this.addTagOption(e);t&&this.value.push(this.getValueForOption(t))},async onSearchChange(e){this.searchFilter&&(e?(this.searchedOptions=[],this.searchedOptions=await this.resolveData(()=>this.searchFilter(new S(this,{query:e})))):this.searchedOptions=null)}}}),kd=y(yd,[["render",bd]]),et={computed:{inputValue:{get(){return this.value!==null?this.value:""},set(e){this.value=e!==""?this.isInteger?Number(e):parseFloat(e):null}},isInteger(){return!1},stepValue(){return this.clearable?null:this.step==null&&!this.isInteger?"any":this.step},decimals:b("decimals",{type:Number}),step:b("step",{type:Number,get(e){return this.isInteger&&e!=null?Math.ceil(e):e}}),min:b("min",{type:Number,get(e){var t;return e=e===void 0?(t=this.getSchemaValue("range",{type:Array}))==null?void 0:t[0]:e,this.isInteger&&e!=null?Math.floor(e):e}}),max:b("max",{type:Number,get(e){var t;return e=e===void 0?(t=this.getSchemaValue("range",{type:Array}))==null?void 0:t[1]:e,this.isInteger&&e!=null?Math.ceil(e):e}}),range:b("range",{type:Array,get(){const{min:e,max:t}=this;return e!=null&&t!=null?[e,t]:void 0},set(e){c.isArray(e)&&([this.min,this.max]=e)}})},methods:{getValidations(){const e={},{range:t,min:o,max:s,decimals:a,step:i}=this;if(t?e.range=t:(o!=null&&(e.min=o),s!=null&&(e.max=s)),a!=null)e.decimals=a;else if(i){const r=(`${i}`.split(".")[1]||"").length;r>0?e.decimals=r:e.integer=!0}return this.isInteger&&(e.integer=!0),e}}},Cd=["disabled"];function $d(e,t,o,s,a,i){const r=n.resolveComponent("InputField");return n.openBlock(),n.createBlock(r,n.mergeProps({class:"dito-number",id:e.dataPath,ref:"element",modelValue:e.inputValue,"onUpdate:modelValue":t[1]||(t[1]=l=>e.inputValue=l),type:"number"},e.attributes,{min:e.min,max:e.max,step:e.stepValue}),{after:n.withCtx(()=>[e.showClearButton?(n.openBlock(),n.createElementBlock("button",{key:0,class:"dito-button-clear dito-button-overlay",disabled:e.disabled,onClick:t[0]||(t[0]=n.withModifiers((...l)=>e.clear&&e.clear(...l),["stop"]))},null,8,Cd)):n.createCommentVNode("",!0)]),_:1},16,["id","modelValue","min","max","step"])}const Bd=B.register(["number","integer"],{mixins:[et],components:{InputField:Q},nativeField:!0,textField:!0,computed:{isInteger(){return this.type==="integer"}}}),Dd=y(Bd,[["render",$d]]),wd=["id"],Sd={key:0,class:"dito-object-content"},Vd=["innerHTML"],Pd=["innerHTML"];function Ed(e,t,o,s,a,i){const r=n.resolveComponent("DitoSchemaInlined"),l=n.resolveComponent("DitoEditButtons");return e.isReady?(n.openBlock(),n.createElementBlock("div",{key:0,class:"dito-object",id:e.dataPath},[e.objectData?(n.openBlock(),n.createElementBlock("div",Sd,[e.isInlined?(n.openBlock(),n.createBlock(r,{key:0,label:e.objectLabel,schema:e.getItemFormSchema(e.schema,e.objectData,e.context),dataPath:e.dataPath,data:e.objectData,meta:e.nestedMeta,store:e.store,disabled:e.disabled||e.isLoading,collapsed:e.collapsed,collapsible:e.collapsible,deletable:e.objectData&&e.deletable,editable:e.objectData&&e.editable,editPath:e.path,accumulatedBasis:e.accumulatedBasis,onDelete:t[0]||(t[0]=d=>e.deleteItem(e.objectData))},null,8,["label","schema","dataPath","data","meta","store","disabled","collapsed","collapsible","deletable","editable","editPath","accumulatedBasis"])):e.schema.component?(n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.schema.component),{key:1,dataPath:e.dataPath,data:e.objectData,nested:!1},null,8,["dataPath","data"])):e.render?(n.openBlock(),n.createElementBlock("span",{key:2,innerHTML:e.render(e.getContext())},null,8,Vd)):(n.openBlock(),n.createElementBlock("span",{key:3,innerHTML:e.getItemLabel(e.schema,e.objectData)},null,8,Pd))])):n.createCommentVNode("",!0),n.createVNode(l,{buttons:e.buttonSchemas,schema:e.schema,dataPath:e.dataPath,data:e.objectData,path:e.path,meta:e.meta,store:e.store,disabled:e.disabled||e.isLoading,creatable:e.creatable,createPath:e.path},null,8,["buttons","schema","dataPath","data","path","meta","store","disabled","creatable","createPath"])],8,wd)):n.createCommentVNode("",!0)}const Nd=B.register("object",{mixins:[Z],getSourceType(e){return e},computed:{objectLabel(){return this.collapsible?this.getItemLabel(this.schema,this.objectData,{asObject:!0}):null}},methods:{getContext(){return new S(this,{data:this.objectData})}},async processSchema(e,t,o,s,a,i=!1,r=!1,l=null){await Promise.all([he(t),Z.processSchema(e,t,o,s,a,i,r,l)])}}),Od=y(Nd,[["render",Ed]]),Fd=B.register("panel",{defaultValue:()=>{},excludeValue:!0,generateLabel:!1,omitSpacing:!0,getPanelSchema(e,t){const{name:o,...s}=t;return s}}),Ld=["id","value","max"];function Td(e,t,o,s,a,i){return n.openBlock(),n.createElementBlock("progress",n.mergeProps({class:"dito-progress",id:e.dataPath,ref:"element",value:e.progressValue,max:e.progressMax},e.attributes),null,16,Ld)}const jd=B.register("progress",{mixins:[et],computed:{progressValue(){let{value:e,range:t,step:o}=this;return e!==null?(t&&(e-=t[0]),o&&(e=Math.round(e/o)*o)):e="",e},progressMax(){const{range:e}=this;return e?e[1]-e[0]:null}}}),Md=y(jd,[["render",Td]]),Rd=["id"],Id=["value"];function zd(e,t,o,s,a,i){return n.openBlock(),n.createElementBlock("ul",{class:n.normalizeClass(["dito-radio-buttons",`dito-layout-${e.schema.layout||"vertical"}`]),id:e.dataPath},[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.options,r=>(n.openBlock(),n.createElementBlock("li",null,[n.createElementVNode("label",null,[n.withDirectives(n.createElementVNode("input",n.mergeProps({class:"dito-radio-button",ref_for:!0,ref:"element","onUpdate:modelValue":t[0]||(t[0]=l=>e.selectedValue=l),type:"radio",value:e.getValueForOption(r)},e.attributes),null,16,Id),[[n.vModelRadio,e.selectedValue]]),n.createTextVNode(n.toDisplayString(e.getLabelForOption(r)),1)])]))),256))],10,Rd)}const qd=B.register("radio",{mixins:[De],nativeField:!0,defaultWidth:"auto"}),Ud=y(qd,[["render",zd]]);function Ad(e,t,o,s,a,i){const r=n.resolveComponent("DitoSchemaInlined");return n.openBlock(),n.createElementBlock("div",{class:n.normalizeClass(["dito-section",{"dito-section--labelled":e.hasLabel}])},[n.createVNode(r,{class:"dito-section__schema",label:e.label,schema:e.getItemFormSchema(e.schema,e.item,e.context),dataPath:e.dataPath,data:e.item,meta:e.meta,store:e.store,padding:e.hasLabel?"nested":"inlined",disabled:e.disabled,collapsed:e.collapsed,collapsible:e.collapsible,labelNode:e.labelNode},null,8,["label","schema","dataPath","data","meta","store","padding","disabled","collapsed","collapsible","labelNode"])],2)}const Hd=B.register("section",{defaultValue:()=>{},ignoreMissingValue:({schema:e})=>!e.nested&&!("default"in e),defaultNested:!1,generateLabel:!1,computed:{item(){return this.nested?this.value:this.data},hasLabel(){return!!this.schema.label},collapsible:b("collapsible",{type:Boolean,default:!1}),collapsed:b("collapsed",{type:Boolean,default:!1,get(e){return e&&this.collapsible}})},methods:{getItemFormSchema:Ue},async processSchema(e,t,o,s,a){await v(e,t,s,a)}}),Wd=y(Hd,[["render",Ad]]),Kd={class:"dito-select"},Yd={class:"dito-select__inner"},Jd=["id"],Gd=["label"],Qd=["value"],Xd=["value"],Zd=["value"],_d=["disabled"];function vd(e,t,o,s,a,i){const r=n.resolveComponent("DitoEditButtons");return n.openBlock(),n.createElementBlock("div",Kd,[n.createElementVNode("div",Yd,[n.withDirectives(n.createElementVNode("select",n.mergeProps({id:e.dataPath,ref:"element","onUpdate:modelValue":t[0]||(t[0]=l=>e.selectedValue=l)},e.attributes,{onMousedown:t[1]||(t[1]=l=>e.populate=!0),onFocus:t[2]||(t[2]=l=>e.populate=!0)}),[e.populate?(n.openBlock(!0),n.createElementBlock(n.Fragment,{key:0},n.renderList(e.options,l=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[e.groupBy?(n.openBlock(),n.createElementBlock("optgroup",{key:0,label:l[e.groupByLabel]},[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(l[e.groupByOptions],d=>(n.openBlock(),n.createElementBlock("option",{value:e.getValueForOption(d)},n.toDisplayString(e.getLabelForOption(d)),9,Qd))),256))],8,Gd)):(n.openBlock(),n.createElementBlock("option",{key:1,value:e.getValueForOption(l)},n.toDisplayString(e.getLabelForOption(l)),9,Xd))],64))),256)):e.selectedOption?(n.openBlock(),n.createElementBlock("option",{key:1,value:e.selectedValue},n.toDisplayString(e.getLabelForOption(e.selectedOption)),9,Zd)):n.createCommentVNode("",!0)],16,Jd),[[n.vModelSelect,e.selectedValue]]),e.showClearButton?(n.openBlock(),n.createElementBlock("button",{key:0,class:"dito-button-clear dito-button-overlay",disabled:e.disabled,onClick:t[3]||(t[3]=(...l)=>e.clear&&e.clear(...l))},null,8,_d)):n.createCommentVNode("",!0)]),e.editable?(n.openBlock(),n.createBlock(r,{key:0,schema:e.schema,dataPath:e.dataPath,data:e.data,meta:e.meta,store:e.store,disabled:!1,editable:e.editable,editPath:e.editPath},null,8,["schema","dataPath","data","meta","store","editable","editPath"])):n.createCommentVNode("",!0)])}const xd=B.register("select",{mixins:[De],nativeField:!0,data(){return{populate:!0}}}),ec=y(xd,[["render",vd]]),tc={class:"dito-slider"},nc=["id","min","max","step"];function oc(e,t,o,s,a,i){const r=n.resolveComponent("InputField");return n.openBlock(),n.createElementBlock("div",tc,[n.withDirectives(n.createElementVNode("input",n.mergeProps({class:"dito-range",id:e.dataPath,ref:"element","onUpdate:modelValue":t[0]||(t[0]=l=>e.inputValue=l),type:"range"},e.attributes,{min:e.min,max:e.max,step:e.stepValue}),null,16,nc),[[n.vModelText,e.inputValue]]),e.input?(n.openBlock(),n.createBlock(r,n.mergeProps({key:0,class:"dito-number",modelValue:e.inputValue,"onUpdate:modelValue":t[1]||(t[1]=l=>e.inputValue=l),type:"number"},e.attributes,{min:e.min,max:e.max,step:e.stepValue}),null,16,["modelValue","min","max","step"])):n.createCommentVNode("",!0)])}const sc=B.register("slider",{mixins:[et],components:{InputField:Q},nativeField:!0,computed:{input:b("input",{type:Boolean,default:!0})}}),ac=y(sc,[["render",oc]]);function rc(e,t,o,s,a,i){return null}const ic=B.register("spacer",{defaultValue:()=>{},excludeValue:!0,generateLabel:!1}),lc=y(ic,[["render",rc]]);function dc(e,t,o,s,a,i){const r=n.resolveComponent("SwitchButton");return n.openBlock(),n.createBlock(r,n.mergeProps({class:"dito-switch",id:e.dataPath,ref:"element",modelValue:e.value,"onUpdate:modelValue":t[0]||(t[0]=l=>e.value=l),labels:e.labels},e.attributes),null,16,["id","modelValue","labels"])}const cc=B.register("switch",{defaultValue:!1,defaultWidth:"auto",components:{SwitchButton:Rs},computed:{labels(){return this.schema.labels}}}),hc=y(cc,[["render",dc]]),mn={computed:{trim:b("trim",{type:Boolean,default:!1})},processValue(e){let{schema:t,value:o}=e;return t.trim&&o!=null&&c.isString(o)&&(o=o.trim()),o===""&&(o=We(t,e)),o}},uc=["disabled"];function pc(e,t,o,s,a,i){const r=n.resolveComponent("InputField");return n.openBlock(),n.createBlock(r,n.mergeProps({class:"dito-text",id:e.dataPath,ref:"element",modelValue:e.inputValue,"onUpdate:modelValue":t[1]||(t[1]=l=>e.inputValue=l),type:e.inputType},e.attributes),{after:n.withCtx(()=>[e.showClearButton?(n.openBlock(),n.createElementBlock("button",{key:0,class:"dito-button-clear dito-button-overlay",disabled:e.disabled,onClick:t[0]||(t[0]=n.withModifiers((...l)=>e.clear&&e.clear(...l),["stop"]))},null,8,uc)):n.createCommentVNode("",!0)]),_:1},16,["id","modelValue","type"])}const mc="****************",fc=B.register(["text","email","url","hostname","domain","tel","password","creditcard"],{mixins:[mn],components:{InputField:Q},nativeField:!0,textField:!0,ignoreMissingValue:({schema:e})=>e.type==="password",computed:{inputType(){return{creditcard:"text",hostname:"text",domain:"text"}[this.type]||this.type},inputValue:{get(){return this.type==="password"&&this.value===void 0&&!this.focused?mc:this.value},set(e){this.value=e}}},methods:{getValidations(){const e={email:"email",url:"url",hostname:"hostname",domain:"domain",password:"password",creditcard:"creditcard"}[this.type];return e?{[e]:!0}:{}}}}),gc=y(fc,[["render",pc]]),bc=["id","rows"];function yc(e,t,o,s,a,i){return n.withDirectives((n.openBlock(),n.createElementBlock("textarea",n.mergeProps({class:"dito-textarea dito-input",id:e.dataPath,ref:"element","onUpdate:modelValue":t[0]||(t[0]=r=>e.value=r)},e.attributes,{rows:e.lines,class:{"dito-resizable":e.resizable}}),null,16,bc)),[[n.vModelText,e.value]])}const kc=B.register("textarea",{mixins:[mn],nativeField:!0,textField:!0,computed:{lines(){return this.schema.lines||4},resizable:b("resizable",{type:Boolean,default:!1})}}),Cc=y(kc,[["render",yc]]),$c={class:"dito-tree-list"},Bc={class:"dito-tree-panel"},Dc={key:0,class:"dito-tree-form-container"};function wc(e,t,o,s,a,i){const r=n.resolveComponent("DitoScopes"),l=n.resolveComponent("DitoTreeItem"),d=n.resolveComponent("RouterView");return n.openBlock(),n.createElementBlock("div",$c,[e.scopes?(n.openBlock(),n.createBlock(r,{key:0,query:e.query,scopes:e.scopes},null,8,["query","scopes"])):n.createCommentVNode("",!0),n.createElementVNode("div",Bc,[n.createVNode(l,{schema:e.treeSchema,dataPath:e.treeDataPath,data:e.treeData,draggable:e.draggable,open:!0,"onUpdate:data":t[0]||(t[0]=h=>e.value=h)},null,8,["schema","dataPath","data","draggable"]),e.hasEditableForms?(n.openBlock(),n.createElementBlock("div",Dc,[n.createVNode(d)])):n.createCommentVNode("",!0)])])}const Sc=B.register(["tree-list","tree-object"],{mixins:[Z],provide(){return{container:this}},getSourceType(e){return e==="tree-object"?"object":"list"},computed:{path(){var e;return(e=this.formComponent)==null?void 0:e.path},editPath(){var e;return this.$route.path.slice((e=this.path)==null?void 0:e.length)},treeData(){return this.isListSource?{[this.name]:this.value}:this.value},treeDataPath(){return this.isListSource?this.dataPath.slice(0,this.dataPath.length-this.name.length):this.dataPath},treeSchema(){return this.isListSource?{children:{name:this.name,...this.schema}}:this.schema},hasEditableForms(){const e=t=>A(t)&&(this.getSchemaValue("editable",{type:Boolean,default:!1,schema:t})||t.children&&e(t.children));return e(this.schema)}},async processSchema(e,t,o,s,a,i=!0,r=!1,l=null){await Promise.all([yt(t.properties),Z.processSchema(e,t,o,s,a,i,r,(d,h)=>{const{children:u}=t;if(u)return u.type="tree-list",this.processSchema(e,u,u.name,d,h,i,!0,l)})])},getFormSchemasForProcessing(e,t){const{children:o}=e;return Y(e,t,o?s=>({...s,components:{...s.components,[o.name]:o}}):null)}}),Vc=y(Sc,[["render",wc]]);function fn(e){return Wn.filesize(e,{base:10})}const Pc={class:"dito-upload"},Ec={class:"dito-table dito-table-separators dito-table-background"},Nc=["innerHTML"],Oc={key:1},Fc=["download","href","onClick"],Lc={key:2},Tc={class:"dito-upload__size"},jc={class:"dito-upload__status"},Mc={class:"dito-cell-edit-buttons"},Rc={class:"dito-buttons dito-buttons-round"},Ic=["title"],zc=["onClick"],qc={key:0},Uc={colspan:4},Ac={class:"dito-upload-footer"},Hc=["value"],Wc={class:"dito-buttons dito-buttons-round"},Kc=["title"];function Yc(e,t,o,s,a,i){var h;const r=n.resolveComponent("VueUpload"),l=n.resolveComponent("DitoUploadFile"),d=n.resolveComponent("DitoDraggable");return n.openBlock(),n.createElementBlock("div",Pc,[n.createVNode(r,{class:"dito-upload__input",ref:"upload",modelValue:e.uploads,"onUpdate:modelValue":t[0]||(t[0]=u=>e.uploads=u),inputId:e.dataPath,name:e.dataPath,disabled:e.disabled,postAction:e.uploadPath,extensions:e.extensions,accept:e.accept,multiple:e.multiple,size:e.maxSize,drop:(h=e.$el)==null?void 0:h.closest(".dito-container"),dropDirectory:!0,onInputFilter:e.onInputFilter,onInputFile:e.onInputFile},null,8,["modelValue","inputId","name","disabled","postAction","extensions","accept","multiple","size","drop","onInputFilter","onInputFile"]),n.createElementVNode("table",Ec,[t[5]||(t[5]=n.createElementVNode("thead",{class:"dito-table-head"},[n.createElementVNode("tr",null,[n.createElementVNode("th",null,[n.createElementVNode("span",null,"File")]),n.createElementVNode("th",null,[n.createElementVNode("span",null,"Size")]),n.createElementVNode("th",null,[n.createElementVNode("span",null,"Status")]),n.createElementVNode("th",null,[n.createElementVNode("span")])])],-1)),n.createVNode(d,{modelValue:e.files,"onUpdate:modelValue":t[2]||(t[2]=u=>e.files=u),tag:"tbody",options:e.getDraggableOptions(),draggable:e.draggable},{default:n.withCtx(()=>[e.multiple||!e.isUploadActive?(n.openBlock(!0),n.createElementBlock(n.Fragment,{key:0},n.renderList(e.files,(u,p)=>(n.openBlock(),n.createElementBlock("tr",{key:u.name},[e.render?(n.openBlock(),n.createElementBlock("td",{key:0,innerHTML:e.renderFile(u,p)},null,8,Nc)):e.downloadUrls[p]?(n.openBlock(),n.createElementBlock("td",Oc,[n.createElementVNode("a",{download:u.name,href:e.downloadUrls[p],target:"_blank",onClick:n.withModifiers(m=>e.onClickDownload(u,p),["prevent"])},[n.createVNode(l,{file:u,thumbnail:e.thumbnails,thumbnailUrl:e.thumbnailUrls[p]},null,8,["file","thumbnail","thumbnailUrl"])],8,Fc)])):(n.openBlock(),n.createElementBlock("td",Lc,[n.createVNode(l,{file:u,thumbnail:e.thumbnails,thumbnailUrl:e.thumbnailUrls[p]},null,8,["file","thumbnail","thumbnailUrl"])])),n.createElementVNode("td",Tc,n.toDisplayString(e.formatFileSize(u.size)),1),n.createElementVNode("td",jc,[u.upload?(n.openBlock(),n.createElementBlock(n.Fragment,{key:0},[u.upload.error?(n.openBlock(),n.createElementBlock(n.Fragment,{key:0},[n.createTextVNode("Error: "+n.toDisplayString(u.upload.error),1)],64)):u.upload.active?(n.openBlock(),n.createElementBlock(n.Fragment,{key:1},[n.createTextVNode("Uploading...")],64)):u.upload.success?(n.openBlock(),n.createElementBlock(n.Fragment,{key:2},[n.createTextVNode("Uploaded")],64)):n.createCommentVNode("",!0)],64)):(n.openBlock(),n.createElementBlock(n.Fragment,{key:1},[n.createTextVNode("Stored")],64))]),n.createElementVNode("td",Mc,[n.createElementVNode("div",Rc,[e.multiple?n.createCommentVNode("",!0):(n.openBlock(),n.createElementBlock("button",{key:0,class:"dito-button dito-button-upload",title:e.uploadTitle,onClick:t[1]||(t[1]=(...m)=>e.onClickUpload&&e.onClickUpload(...m))},null,8,Ic)),e.draggable?(n.openBlock(),n.createElementBlock("a",n.mergeProps({key:1,class:"dito-button",ref_for:!0},e.getButtonAttributes(e.verbs.drag)),null,16)):n.createCommentVNode("",!0),e.deletable?(n.openBlock(),n.createElementBlock("button",n.mergeProps({key:2,class:"dito-button",type:"button",ref_for:!0},e.getButtonAttributes(e.verbs.delete),{onClick:m=>e.deleteFile(u,p)}),null,16,zc)):n.createCommentVNode("",!0)])])]))),128)):n.createCommentVNode("",!0)]),_:1},8,["modelValue","options","draggable"]),e.multiple||e.isUploadActive||!e.hasFiles?(n.openBlock(),n.createElementBlock("tfoot",qc,[n.createElementVNode("tr",null,[n.createElementVNode("td",Uc,[n.createElementVNode("div",Ac,[e.isUploadActive?(n.openBlock(),n.createElementBlock("progress",{key:0,class:"dito-progress",value:e.uploadProgress,max:"100"},null,8,Hc)):n.createCommentVNode("",!0),n.createElementVNode("div",Wc,[e.isUploadActive?(n.openBlock(),n.createElementBlock("button",{key:0,class:"dito-button",type:"button",onClick:t[3]||(t[3]=n.withModifiers(u=>e.upload.active=!1,["prevent"]))},"Cancel")):n.createCommentVNode("",!0),e.multiple||!e.hasFiles?(n.openBlock(),n.createElementBlock("button",{key:1,class:"dito-button dito-button-upload",title:e.uploadTitle,onClick:t[4]||(t[4]=(...u)=>e.onClickUpload&&e.onClickUpload(...u))},null,8,Kc)):n.createCommentVNode("",!0)])])])])])):n.createCommentVNode("",!0)])])}const Jc=B.register("upload",{mixins:[Be],components:{VueUpload:Kn},data(){return{uploads:[]}},computed:{upload(){return this.$refs.upload},uploadTitle(){return this.multiple?"Upload Files":"Upload File"},files(){return gn(this.value)},downloadUrls(){return this.files.map((e,t)=>this.getDownloadUrl(e,t))},thumbnailUrls(){return this.files.map((e,t)=>this.getThumbnailUrl(e,t))},multiple:b("multiple",{type:Boolean,default:!1,callback:!1}),extensions:b("extensions",{type:[Array,String,RegExp]}),accept:b("accept",{type:Array,get(e){return c.isArray(e)?e.join(","):e}}),maxSize:b("maxSize",{type:[String,Number],get(e){return e?Hn(e):void 0}}),draggable:b("draggable",{type:Boolean,default:!1,get(e){return e&&this.files.length>1}}),deletable:b("deletable",{type:Boolean,default:!1}),render:b("render",{type:Function,default:null}),thumbnails:b("thumbnails",{type:[Boolean,String],default(e){return e??!!this.schema.thumbnailUrl},get(e){return e===!0?"medium":e||null}}),hasFiles(){return this.files.length>0},hasUploads(){return this.uploads.length>0},isUploadReady(){return this.hasUploads&&!(this.upload.active||this.upload.uploaded)},isUploadActive(){return this.hasUploads&&this.upload.active},uploadProgress(){return this.uploads.reduce((e,t)=>e+ +t.progress,0)/this.uploads.length},uploadPath(){return this.getResourceUrl({type:"upload",method:"post",path:this.api.normalizePath(this.dataPath)})}},watch:{isUploadReady(e){e&&this.$nextTick(()=>{this.upload.active=!0})}},methods:{formatFileSize:fn,getFileContext(e,t){return this.multiple?new S(this,{value:e,data:this.files,index:t,dataPath:O(this.dataPath,t)}):this.context},renderFile(e,t){return this.render(this.getFileContext(e,t))},getDownloadUrl(e,t){return e.url?e.url:!e.upload||e.upload.success?this.getSchemaValue("downloadUrl",{type:"String",default:null,context:this.getFileContext(e,t)}):null},getThumbnailUrl(e,t){return!e.upload||e.upload.success?this.getSchemaValue("thumbnailUrl",{type:"String",default:null,context:this.getFileContext(e,t)})||(e.type.startsWith("image/")?e.url:null):null},deleteFile(e,t){const{name:o}=e;e&&window.confirm(`Do you really want to ${this.verbs.remove} ${o}?`)&&(this.multiple?this.value.splice(t,1):this.value=null,e.upload&&this.upload.remove(e.upload),this.onChange(),this.notify({type:"info",title:"Successfully Removed",text:`${o} was ${this.verbs.deleted}.`}))},getFileIndex(e){return this.multiple&&this.value?this.value.findIndex(t=>t.id===e.id):-1},addFile(e){this.multiple?this.value?this.value.push(e):this.value=[e]:this.value=e},replaceFile(e,t){if(this.multiple){const o=this.getFileIndex(e);o>=0&&(t?this.value[o]=t:this.value.splice(o,1))}else this.value=t},removeFile(e){this.replaceFile(e,null)},onInputFile(e,t){if(e&&!t){const{id:o,name:s,size:a}=e;this.addFile({id:o,name:s,size:a,upload:e})}if(e&&t){const{success:o,error:s}=e;if(o){this.onChange();const a=e.response[0];a?(a.upload=e,this.replaceFile(e,a)):this.removeFile(e)}else if(s){this.removeFile(e);const a={abort:"Upload aborted",denied:"Upload denied",extension:`Unsupported file-type: ${e.name}`,network:"Network error encountered during upload",server:"Server error occurred during upload",size:`File is too large: ${fn(e.size)}`,timeout:"Timeout occurred during upload"}[s]||`Unknown File Upload Error: '${s}'`;this.notify({type:"error",error:s,title:"File Upload Error",text:a})}}},onInputFilter(e){var o;const t=e==null?void 0:e.xhr;(o=this.api.cors)!=null&&o.credentials&&t&&!t.withCredentials&&(t.withCredentials=!0)},async onClickDownload(e,t){try{const s=await(await fetch(this.downloadUrls[t])).blob();this.download({filename:e.name,url:URL.createObjectURL(s)})}catch(o){console.error(o)}},onClickUpload(e){this.upload.$el.querySelector("input").dispatchEvent(new e.constructor(e.type,e))}},processValue({schema:e,value:t}){const o=gn(t).map(({upload:s,...a})=>!s||s.success?a:null).filter(s=>s);return e.multiple?o:o[0]||null}});function gn(e){return e?c.asArray(e):[]}const Gc=Object.freeze(Object.defineProperty({__proto__:null,DitoDitoTypeComponent:Pl,DitoTypeButton:xi,DitoTypeCheckbox:sl,DitoTypeCheckboxes:cl,DitoTypeCode:fl,DitoTypeColor:wl,DitoTypeComputed:Fl,DitoTypeDate:Rl,DitoTypeLabel:sd,DitoTypeList:td,DitoTypeMarkup:pd,DitoTypeMultiselect:kd,DitoTypeNumber:Dd,DitoTypeObject:Od,DitoTypePanel:Fd,DitoTypeProgress:Md,DitoTypeRadio:Ud,DitoTypeSection:Wd,DitoTypeSelect:ec,DitoTypeSlider:ac,DitoTypeSpacer:lc,DitoTypeSwitch:hc,DitoTypeText:gc,DitoTypeTextarea:Cc,DitoTypeTreeList:Vc,DitoTypeUpload:y(Jc,[["render",Yc]])},Symbol.toStringTag,{value:"Module"})),Qc={mounted(e,t){Xc(e,t.value,t.arg)},unmounted(e,t){Zc(e,t.value,t.arg)}};function Xc(e,t,o){we.getObserver(o).observe(e,t)}function Zc(e,t,o){we.getObserver(o).unobserve(e,t)}const _c=typeof ResizeObserver<"u",oe={};class we{constructor(t,o){this.key=t,this.options=o,this.observer=_c?new ResizeObserver(s=>this.handle(s)):null,this.handlersByNode=new WeakMap,this.nodeCount=0}observe(t,o){var a;let s=this.handlersByNode.get(t);s||(s=new Set,this.handlersByNode.set(t,s),(a=this.observer)==null||a.observe(t,this.options),this.nodeCount++),s.add(o)}unobserve(t,o){var a;const s=this.handlersByNode.get(t);s!=null&&s.delete(o)&&s.size===0&&(this.handlersByNode.delete(t),(a=this.observer)==null||a.unobserve(t),--this.nodeCount===0&&delete oe[this.key])}handle(t){for(const o of t){const s=this.handlersByNode.get(o.target);if(s){const a={target:o.target,contentRect:o.contentRect,borderBoxSize:c.asArray(o.borderBoxSize),contentBoxSize:c.asArray(o.contentBoxSize),devicePixelContentBoxSize:c.asArray(o.devicePixelContentBoxSize)};for(const i of s)i(a)}}}static getObserver({box:t="content-box"}={}){const o={box:t},s=JSON.stringify(o);return oe[s]||(oe[s]=new we(s,o)),oe[s]}}const vc=["create","created","save","saved","apply","applied","submit","submitted","delete","deleted","remove","removed","clear","cleared","edit","edited","close","closed","cancel","cancelled","drag","dragged","login","logged in"].reduce((e,t)=>(e[t]=t,e),{});class xc{constructor(t,{dito:o={},api:s,views:a={},...i}={}){this.el=t,this.api=s=c.assignDeeply({base:"/"},o.api,s),this.options=i,s.locale||(s.locale="en-US"),s.formats=c.assignDeeply({},c.defaultFormats,s.formats),s.request||(s.request=d=>th(s,d)),s.getApiUrl||(s.getApiUrl=d=>oh(s,d)),s.isApiUrl||(s.isApiUrl=d=>nh(s,d)),s.normalizePath||(s.normalizePath=s.normalizePaths?c.hyphenate:d=>d),s.denormalizePath||(s.denormalizePath=s.normalizePaths?c.camelize:d=>d),s.defaults||(s.defaults={});const r=M(s.users,{type:"collection"})||{};r.login=M(r.login||"login",{method:"post",parent:r}),r.logout=M(r.logout||"logout",{method:"post",parent:r}),r.session=M(r.session||"session",{method:"get",parent:r}),s.users=r,s.resources={any(d){const h=this[d==null?void 0:d.type]||this.default;return d&&h.call(this,d)},default(d){const h=this.any(d.parent);return h?`${h}/${d.path}`:d.path},collection(d){return this.default(d)},member(d){return`${this.default(d)}/${d.id}`},upload(d){return`${this.collection(d.parent)}/upload/${d.path}`},...s.resources},s.headers={"Content-Type":"application/json",...s.headers},c.isString(t)&&(t=document.querySelector(t));const l=this.app=n.createApp({components:{DitoRoot:_e,VueNotifications:q,...Gi,...Gc},provide:{api:s,$verbs:()=>vc,$views:()=>{},$isPopulated:()=>!0,$parentComponent:()=>null,$schemaComponent:()=>null,$schemaParentComponent:()=>null,$routeComponent:()=>null,$dataComponent:()=>null,$sourceComponent:()=>null,$resourceComponent:()=>null,$dialogComponent:()=>null,$panelComponent:()=>null,$tabComponent:()=>null},render:()=>n.h(_e,{ref:"root",class:o.settings.rootClass,unresolvedViews:a,options:i})});l.config.errorHandler=console.error,l.use(q,{componentName:"VueNotifications",name:"notify"}),l.directive("resize",Qc),l.use(N.createRouter({routes:[{name:"catch-all",path:"/:_(.*)",components:{}}],history:N.createWebHistory(o.base),linkActiveClass:"",linkExactActiveClass:""})),t.classList.add("dito-app"),l.mount(t)}register(t,o){return B.register(t,o)}}class eh extends Error{constructor(t){super(`Request failed with status code: ${t.status} (${t.statusText})`),this.response=t}}async function th(e,{url:t,method:o="get",query:s=null,headers:a=null,data:i=null,signal:r=null}){var h,u;const l=e.isApiUrl(t),d=await fetch(e.getApiUrl({url:t,query:s}),{method:o.toUpperCase(),...i&&{body:JSON.stringify(i)},headers:{...l&&e.headers,...a},credentials:l&&((h=e.cors)!=null&&h.credentials)?"include":"same-origin",signal:r});if((u=d.headers.get("Content-Type"))!=null&&u.includes("application/json")&&(d.data=await d.json()),!d.ok)throw new eh(d);return d}function nh(e,t){return!c.isAbsoluteUrl(t)||t.startsWith(e.url)}function oh(e,{url:t,query:o}){!t.startsWith(e.url)&&!c.isAbsoluteUrl(t)&&(t=sh(e.url,t));const s=dn(o);return s?`${t}${t.includes("?")?"&":"?"}${s}`:t}function sh(e,t){return`${e.replace(/\/+$/,"")}/${t.replace(/^\/+/,"")}`}return xc});
|
|
7
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by1hZG1pbi51bWQuanMiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlscy9hZ2VudC5qcyIsIi4uL3NyYy9hcHBTdGF0ZS5qcyIsIi4uL3NyYy91dGlscy9kYXRhLmpzIiwiLi4vc3JjL0RpdG9Db250ZXh0LmpzIiwiLi4vc3JjL21peGlucy9FbWl0dGVyTWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL1ZhbHVlTWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL0NvbnRleHRNaXhpbi5qcyIsIi4uL3NyYy92YWxpZGF0b3JzL19jcmVkaXRjYXJkLmpzIiwiLi4vc3JjL3ZhbGlkYXRvcnMvX2RlY2ltYWxzLmpzIiwiLi4vc3JjL3ZhbGlkYXRvcnMvX2RvbWFpbi5qcyIsIi4uL3NyYy92YWxpZGF0b3JzL19lbWFpbC5qcyIsIi4uL3NyYy92YWxpZGF0b3JzL19ob3N0bmFtZS5qcyIsIi4uL3NyYy92YWxpZGF0b3JzL19pbnRlZ2VyLmpzIiwiLi4vc3JjL3ZhbGlkYXRvcnMvX21heC5qcyIsIi4uL3NyYy92YWxpZGF0b3JzL19taW4uanMiLCIuLi9zcmMvdmFsaWRhdG9ycy9fcGFzc3dvcmQuanMiLCIuLi9zcmMvdmFsaWRhdG9ycy9fcmFuZ2UuanMiLCIuLi9zcmMvdmFsaWRhdG9ycy9fcmVxdWlyZWQuanMiLCIuLi9zcmMvdmFsaWRhdG9ycy9fdXJsLmpzIiwiLi4vc3JjL21peGlucy9WYWxpZGF0aW9uTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvYWNjZXNzb3IuanMiLCIuLi9zcmMvbWl4aW5zL1R5cGVNaXhpbi5qcyIsIi4uL3NyYy91dGlscy91aWQuanMiLCIuLi9zcmMvdXRpbHMvU2NoZW1hR3JhcGguanMiLCIuLi9zcmMvdXRpbHMvdHlwZS5qcyIsIi4uL3NyYy91dGlscy9zY2hlbWEuanMiLCIuLi9zcmMvdXRpbHMvcmVzb3VyY2UuanMiLCIuLi9zcmMvbWl4aW5zL0RpdG9NaXhpbi5qcyIsIi4uL3NyYy91dGlscy9vcHRpb25zLmpzIiwiLi4vc3JjL0RpdG9Db21wb25lbnQuanMiLCIuLi8uLi91aS9zcmMvdXRpbHMvZGF0ZS5qcyIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0NhbGVuZGFyLnZ1ZSIsIi4uLy4uL3VpL3NyYy91dGlscy9ldmVudC5qcyIsIi4uLy4uL3VpL3NyYy91dGlscy90cmlnZ2VyLmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvVHJpZ2dlci52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9JbnB1dEZpZWxkLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0ljb24udnVlIiwiLi4vLi4vdWkvc3JjL3V0aWxzL3NlbGVjdGlvbi5qcyIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0RhdGVQaWNrZXIudnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvVGltZVBpY2tlci52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9EYXRlVGltZVBpY2tlci52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9QYWdpbmF0aW9uLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL1N3aXRjaEJ1dHRvbi52dWUiLCIuLi8uLi91aS9zcmMvdHJhbnNpdGlvbnMvVHJhbnNpdGlvbkhlaWdodC52dWUiLCIuLi8uLi91aS9zcmMvdXRpbHMvdnVlLmpzIiwiLi4vc3JjL21peGlucy9Eb21NaXhpbi5qcyIsIi4uL3NyYy9EaXRvVXNlci5qcyIsIi4uL3NyYy9taXhpbnMvU2NoZW1hUGFyZW50TWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL1ZhbGlkYXRvck1peGluLmpzIiwiLi4vc3JjL21peGlucy9Sb3V0ZU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1ZpZXcudnVlIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWV1c2UvaW50ZWdyYXRpb25zL3VzZUZvY3VzVHJhcC9jb21wb25lbnQubWpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0RpYWxvZy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUm9vdC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTWVudS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVHJhaWwudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0hlYWRlci52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTmF2aWdhdGlvbi52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTm90aWZpY2F0aW9ucy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2lkZWJhci52dWUiLCIuLi9zcmMvbWl4aW5zL1B1bGxkb3duTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQWNjb3VudC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRWxlbWVudC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTGFiZWwudnVlIiwiLi4vc3JjL21peGlucy9JdGVtTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NoZW1hLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY2hlbWFJbmxpbmVkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lLnZ1ZSIsIi4uL3NyYy91dGlscy9tYXRoLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NvbnRhaW5lci52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFicy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZWwudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmVscy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQnV0dG9ucy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRWRpdEJ1dHRvbnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NyZWF0ZUJ1dHRvbi52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ2xpcGJvYXJkLnZ1ZSIsIi4uL3NyYy9taXhpbnMvTG9hZGluZ01peGluLmpzIiwiLi4vc3JjL21peGlucy9SZXNvdXJjZU1peGluLmpzIiwiLi4vc3JjL3V0aWxzL3BhdGguanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRm9ybS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRm9ybUlubmVyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Gb3JtTmVzdGVkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FcnJvcnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1Njb3Blcy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFnaW5hdGlvbi52dWUiLCIuLi9zcmMvbWl4aW5zL1NvcnRhYmxlTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVHJlZUl0ZW0udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYmxlSGVhZC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVDZWxsLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9VcGxvYWRGaWxlLnZ1ZSIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVldXNlL2ludGVncmF0aW9ucy91c2VTb3J0YWJsZS9jb21wb25lbnQubWpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0RyYWdnYWJsZS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU3Bpbm5lci52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVk5vZGUudnVlIiwiLi4vc3JjL0RpdG9UeXBlQ29tcG9uZW50LmpzIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQnV0dG9uLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUNoZWNrYm94LnZ1ZSIsIi4uL3NyYy9taXhpbnMvRGF0YU1peGluLmpzIiwiLi4vc3JjL21peGlucy9PcHRpb25zTWl4aW4uanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVDaGVja2JveGVzLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUNvZGUudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ29sb3IudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ29tcG9uZW50LnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUNvbXB1dGVkLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZURhdGUudnVlIiwiLi4vc3JjL3V0aWxzL3JvdXRlLmpzIiwiLi4vc3JjL21peGlucy9Tb3VyY2VNaXhpbi5qcyIsIi4uL3NyYy91dGlscy9maWx0ZXIuanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVMaXN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUxhYmVsLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZU1hcmt1cC52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVNdWx0aXNlbGVjdC52dWUiLCIuLi9zcmMvbWl4aW5zL051bWJlck1peGluLmpzIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlTnVtYmVyLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZU9iamVjdC52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVQYW5lbC52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVQcm9ncmVzcy52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVSYWRpby52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVTZWN0aW9uLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVNlbGVjdC52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVTbGlkZXIudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlU3BhY2VyLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVN3aXRjaC52dWUiLCIuLi9zcmMvbWl4aW5zL1RleHRNaXhpbi5qcyIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVRleHQudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlVGV4dGFyZWEudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlVHJlZUxpc3QudnVlIiwiLi4vc3JjL3V0aWxzL3VuaXRzLmpzIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlVXBsb2FkLnZ1ZSIsIi4uL3NyYy9kaXJlY3RpdmVzL3Jlc2l6ZS5qcyIsIi4uL3NyYy92ZXJicy5qcyIsIi4uL3NyYy9EaXRvQWRtaW4uanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhpcyB1c2VyLWFnZW50IHBhcnNlciB3YXMgbGlmdGVkIGZyb20gUGFwZXIuanM6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vcGFwZXJqcy9wYXBlci5qcy9ibG9iL2NjMTU2OTY3NTAwMzVhYjAwZTAwYzY0YzdjOTVkYWEyYzg1ZWZlMDEvc3JjL2NvcmUvUGFwZXJTY29wZS5qcyNMNzUtTDEwN1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VVc2VyQWdlbnQodXNlckFnZW50ID0gJycpIHtcbiAgY29uc3QgYWdlbnQgPSB7fVxuICAvLyBVc2UgcmVwbGFjZSgpIHRvIGdldCBhbGwgbWF0Y2hlcywgYW5kIGRlYWwgd2l0aCBDaHJvbWUvV2Via2l0IG92ZXJsYXA6XG4gIGNvbnN0IHVhID0gdXNlckFnZW50LnRvTG93ZXJDYXNlKClcbiAgY29uc3QgW29zXSA9XG4gICAgLyhpcGhvbmV8aXBhZHxsaW51eDsgYW5kcm9pZHxkYXJ3aW58d2lufG1hY3xsaW51eHxmcmVlYnNkfHN1bm9zKS8uZXhlYyhcbiAgICAgIHVhXG4gICAgKSB8fCBbXVxuICBjb25zdCBwbGF0Zm9ybSA9IChcbiAgICB7XG4gICAgICAnZGFyd2luJzogJ21hYycsXG4gICAgICAnaXBob25lJzogJ2lvcycsXG4gICAgICAnaXBhZCc6ICdpb3MnLFxuICAgICAgJ2xpbnV4OyBhbmRyb2lkJzogJ2FuZHJvaWQnXG4gICAgfVtvc10gfHxcbiAgICBvc1xuICApXG4gIGlmIChwbGF0Zm9ybSkge1xuICAgIGFnZW50LnBsYXRmb3JtID0gcGxhdGZvcm1cbiAgICBhZ2VudFtwbGF0Zm9ybV0gPSB0cnVlXG4gIH1cbiAgdWEucmVwbGFjZShcbiAgICAvKG9wZXJhfGNocm9tZXxzYWZhcml8d2Via2l0fGZpcmVmb3h8bXNpZXx0cmlkZW50KVxcLz9cXHMqKFsuXFxkXSspKD86Lip2ZXJzaW9uXFwvKFsuXFxkXSspKT8oPzouKnJ2OnY/KFsuXFxkXSspKT8vZyxcbiAgICAobWF0Y2gsIGJyb3dzZXIsIHYxLCB2MiwgcnYpID0+IHtcbiAgICAgIC8vIERvIG5vdCBzZXQgYWRkaXRpb25hbCBicm93c2VycyBvbmNlIGNocm9tZSBpcyBkZXRlY3RlZC5cbiAgICAgIGlmICghYWdlbnQuY2hyb21lKSB7XG4gICAgICAgIGNvbnN0IHZlcnNpb24gPSBydiB8fCB2MiB8fCB2MVxuICAgICAgICBpZiAoIWFnZW50LnZlcnNpb24gfHwgYnJvd3NlciAhPT0gJ3NhZmFyaScpIHtcbiAgICAgICAgICAvLyBVc2UgdGhlIHZlcnNpb24gd2UgZ2V0IGZvciB3ZWJraXQgZm9yIFNhZmFyaSwgd2hpY2ggaXMgYWN0dWFsbHlcbiAgICAgICAgICAvLyBUaGUgU2FmYXJpIHZlcnNpb24sIGUuZy4gMTYuMFxuICAgICAgICAgIGFnZW50LnZlcnNpb24gPSB2ZXJzaW9uXG4gICAgICAgICAgYWdlbnQudmVyc2lvbk51bWJlciA9IHBhcnNlRmxvYXQodmVyc2lvbilcbiAgICAgICAgfVxuICAgICAgICBhZ2VudC5icm93c2VyID0gYnJvd3NlclxuICAgICAgICBhZ2VudFticm93c2VyXSA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIClcbiAgaWYgKGFnZW50LmNocm9tZSkge1xuICAgIC8vIENhbid0IGhhdmUgaXQgYm90aCB3YXlzLCBDaHJvbWUuXG4gICAgZGVsZXRlIGFnZW50LndlYmtpdFxuICB9XG4gIHJldHVybiBhZ2VudFxufVxuIiwiaW1wb3J0IHsgcmVhY3RpdmUgfSBmcm9tICd2dWUnXG5pbXBvcnQgeyBwYXJzZVVzZXJBZ2VudCB9IGZyb20gJy4vdXRpbHMvYWdlbnQnXG5cbmV4cG9ydCBkZWZhdWx0IHJlYWN0aXZlKHtcbiAgdGl0bGU6ICcnLFxuICByb3V0ZUNvbXBvbmVudHM6IFtdLFxuICB1c2VyOiBudWxsLFxuICBhZ2VudDogcGFyc2VVc2VyQWdlbnQobmF2aWdhdG9yLnVzZXJBZ2VudCB8fCAnJyksXG4gIGxvYWRDYWNoZToge30sIC8vIFNlZSBUeXBlTWl4aW4ubG9hZCgpXG4gIGFjdGl2ZUxhYmVsOiBudWxsLFxuICBjbGlwYm9hcmREYXRhOiBudWxsXG59KVxuIiwiaW1wb3J0IHtcbiAgaXNJbnRlZ2VyLFxuICBwYXJzZURhdGFQYXRoLFxuICBnZXRWYWx1ZUF0RGF0YVBhdGgsXG4gIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgdG9rZW4pIHtcbiAgcmV0dXJuIGRhdGFQYXRoXG4gICAgPyBgJHtkYXRhUGF0aH0vJHt0b2tlbn1gXG4gICAgOiB0b2tlblxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkge1xuICBjb25zdCBwYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgcGF0aD8ucG9wKClcbiAgcmV0dXJuIHBhdGhcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSB7XG4gIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChwYXJzZVBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbmVzdGVkID8gcGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkgOiBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpXG4gIGlmIChwYXRoKSB7XG4gICAgLy8gUmVtb3ZlIHRoZSBwYXJlbnQgdG9rZW4uIElmIGl0J3MgYSBudW1iZXIsIHRoZW4gd2UncmUgZGVhbGluZyB3aXRoIGFuXG4gICAgLy8gYXJyYXkgYW5kIG5lZWQgdG8gcmVtb3ZlIG1vcmUgdG9rZW5zIHVudGlsIHdlIG1lZXQgdGhlIGFjdHVhbCBwYXJlbnQ6XG4gICAgbGV0IHRva2VuXG4gICAgZG8ge1xuICAgICAgdG9rZW4gPSBwYXRoLnBvcCgpXG4gICAgfSB3aGlsZSAodG9rZW4gIT0gbnVsbCAmJiBpc0ludGVnZXIoK3Rva2VuKSlcbiAgICAvLyBJZiB0aGUgcmVtb3ZlZCB0b2tlbiBpcyB2YWxpZCwgd2UgY2FuIGdldCB0aGUgcGFyZW50IGRhdGE6XG4gICAgaWYgKHRva2VuICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBwYXRoXG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW0ocm9vdEl0ZW0sIGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICBjb25zdCBwYXRoID0gcGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZClcbiAgcmV0dXJuIHBhdGggPyBnZXRWYWx1ZUF0RGF0YVBhdGgocm9vdEl0ZW0sIHBhdGgpIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50SXRlbShyb290SXRlbSwgZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKVxuICByZXR1cm4gcGF0aCA/IGdldFZhbHVlQXREYXRhUGF0aChyb290SXRlbSwgcGF0aCkgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aCkge1xuICBjb25zdCBwYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgcmV0dXJuIHBhdGhbcGF0aC5sZW5ndGggLSAxXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoTmFtZShkYXRhUGF0aCkge1xuICBjb25zdCB0b2tlbiA9IGdldExhc3REYXRhUGF0aFRva2VuKGRhdGFQYXRoKVxuICByZXR1cm4gdG9rZW4gPT0gbnVsbCB8fCBpc0ludGVnZXIoK3Rva2VuKSA/IG51bGwgOiB0b2tlblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoSW5kZXgoZGF0YVBhdGgpIHtcbiAgY29uc3QgdG9rZW4gPSBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aClcbiAgY29uc3QgaW5kZXggPSB0b2tlbiA9PSBudWxsID8gbnVsbCA6ICt0b2tlblxuICByZXR1cm4gaXNJbnRlZ2VyKGluZGV4KSA/IGluZGV4IDogbnVsbFxufVxuXG5sZXQgdGVtcG9yYXJ5SWQgPSAwXG5leHBvcnQgZnVuY3Rpb24gc2V0VGVtcG9yYXJ5SWQoZGF0YSwgaWRLZXkgPSAnaWQnKSB7XG4gIC8vIFRlbXBvcmFyeSBpZHMgYXJlIG1hcmtlZCB3aXRoIGEgJ0AnIGF0IHRoZSBiZWdpbm5pbmcuXG4gIGRhdGFbaWRLZXldID0gYEAkeysrdGVtcG9yYXJ5SWR9YFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUZW1wb3JhcnlJZChpZCkge1xuICByZXR1cm4gL15ALy50ZXN0KGlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZWZlcmVuY2UoZGF0YSwgaWRLZXkgPSAnaWQnKSB7XG4gIC8vIFJldHVybnMgdHJ1ZSBpZiB2YWx1ZSBpcyBhbiBvYmplY3QgdGhhdCBob2xkcyBub3RoaW5nIG1vcmUgdGhhbiBhbiBpZC5cbiAgcmV0dXJuIGRhdGE/LltpZEtleV0gIT0gbnVsbCAmJiBPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGggPT09IDFcbn1cbiIsImltcG9ydCB7IHRvUmF3IH0gZnJvbSAndnVlJ1xuaW1wb3J0IHsgZ2V0VmFsdWVBdERhdGFQYXRoLCBpc0Z1bmN0aW9uIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7XG4gIGdldEl0ZW1EYXRhUGF0aCxcbiAgZ2V0UGFyZW50SXRlbURhdGFQYXRoLFxuICBnZXRQYXJlbnRJdGVtLFxuICBnZXRJdGVtLFxuICBnZXRMYXN0RGF0YVBhdGhOYW1lLFxuICBnZXRMYXN0RGF0YVBhdGhJbmRleFxufSBmcm9tICcuL3V0aWxzL2RhdGEuanMnXG5cbmNvbnN0IHsgaGFzT3duUHJvcGVydHkgfSA9IE9iamVjdC5wcm90b3R5cGVcblxuLy8gU2VlIGFsc28gYENvbnRleHRNaXhpbmA6IGBEaXRvQ29udGV4dGAgaW5zdGFuY2VzIGFyZSBhIHRoaW4gd3JhcHBlciBhcm91bmRcbi8vIHJhdyBgY29udGV4dGAgb2JqZWN0cywgd2hpY2ggdGhlbXNlbHZlcyBhY3R1YWxseSBpbmhlcml0IGZyb20gdGhlIGxpbmtlZFxuLy8gYGNvbXBvbmVudGAgaW5zdGFuY2UsIHNvIHRoYXQgdGhleSBvbmx5IG5lZWQgdG8gcHJvdmlkZSB0aGUgdmFsdWVzIHRoYXRcbi8vIHNob3VsZCBiZSBkaWZmZXJlbnQgdGhhbiBpbiB0aGUgdW5kZXJseWluZyBjb21wb25lbnQuIEluIG9yZGVyIHRvIG5vdCBleHBvc2Vcbi8vIGFsbCBmaWVsZHMgZnJvbSB0aGUgY29tcG9uZW50LCB0aGUgd3JhcHBlciBpcyBpbnRyb2R1Y2VkLlxuXG4vLyBVc2UgV2Vha01hcCBmb3IgdGhlIHJhdyBgY29udGV4dGAgb2JqZWN0cywgc28gd2UgZG9uJ3QgaGF2ZSB0byBwb2xsdXRlIHRoZVxuLy8gYWN0dWFsIGBEaXRvQ29udGV4dGAgaW5zdGFuY2Ugd2l0aCBpdC5cbmNvbnN0IGNvbnRleHRzID0gbmV3IFdlYWtNYXAoKVxuXG5mdW5jdGlvbiB0b09iamVjdChjb250ZXh0KSB7XG4gIGNvbnN0IHJhd1N0YXJ0ID0gdG9SYXcoY29udGV4dClcbiAgbGV0IHJhdyA9IHJhd1N0YXJ0XG4gIGxldCBvYmplY3QgPSBudWxsXG4gIC8vIEluIGNhc2UgYERpdG9Db250ZXh0LmV4dGVuZCgpYCB3YXMgdXNlZCwgd2UgbmVlZCB0byBmaW5kIHRoZSBhY3R1YWwgY29udGV4dFxuICAvLyBvYmplY3QgZnJvbSB0aGUgb2JqZWN0J3MgdGhlIGluaGVyaXRhbmNlIGNoYWluOlxuICBkbyB7XG4gICAgb2JqZWN0ID0gY29udGV4dHMuZ2V0KHJhdylcbiAgICBpZiAob2JqZWN0KSBicmVha1xuICAgIHJhdyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihyYXcpXG4gIH0gd2hpbGUgKHJhdylcbiAgaWYgKG9iamVjdCAmJiByYXcgIT09IHJhd1N0YXJ0KSB7XG4gICAgLy8gQXNzaWduIHRoZSBwYXNzZWQgY29udGV4dCB3aXRoIHRoZSBvcmlnaW5hbCBvYmplY3QgYXMgd2VsbCwgc28gd2UgZG9uJ3RcbiAgICAvLyBoYXZlIHRvIHNlYXJjaCBmb3IgaXQgYWdhaW46XG4gICAgY29udGV4dHMuc2V0KHJhdywgb2JqZWN0KVxuICB9XG4gIHJldHVybiBvYmplY3Rcbn1cblxuZnVuY3Rpb24gZ2V0KGNvbnRleHQsIGtleSwgZGVmYXVsdFZhbHVlKSB7XG4gIGNvbnN0IG9iamVjdCA9IHRvT2JqZWN0KGNvbnRleHQpXG4gIGNvbnN0IHZhbHVlID0ga2V5IGluIG9iamVjdCA/IG9iamVjdFtrZXldIDogdW5kZWZpbmVkXG4gIC8vIElmIGBvYmplY3RgIGV4cGxpY2l0bHkgc2V0cyB0aGUga2V5IHRvIGB1bmRlZmluZWRgLCByZXR1cm4gaXQuXG4gIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkIHx8IGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpXG4gICAgPyB2YWx1ZVxuICAgIDogaXNGdW5jdGlvbihkZWZhdWx0VmFsdWUpXG4gICAgICA/IGRlZmF1bHRWYWx1ZSgpXG4gICAgICA6IGRlZmF1bHRWYWx1ZVxufVxuXG5mdW5jdGlvbiBzZXQoY29udGV4dCwga2V5LCB2YWx1ZSkge1xuICB0b09iamVjdChjb250ZXh0KVtrZXldID0gdmFsdWVcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b0NvbnRleHQge1xuICBjb25zdHJ1Y3Rvcihjb21wb25lbnQsIGNvbnRleHQpIHtcbiAgICAvLyBVc2UgdGhlIHByb3ZpZGVkIHBhcmFtcyBvYmplY3QgLyBmdW5jdGlvbiwgb3IgY3JlYXRlIGEgbmV3IG9uZTpcbiAgICBjb250ZXh0ID0gY29udGV4dFxuICAgICAgPyBpc0Z1bmN0aW9uKGNvbnRleHQpXG4gICAgICAgID8gY29udGV4dCgpXG4gICAgICAgIDogeyAuLi5jb250ZXh0IH1cbiAgICAgIDoge31cbiAgICAvLyBJZiBub3QgZXhwbGljaXRseSBzZXQgKHRvIGZhbHNlKSwgZGVmYXVsdCB0byB0cnVlIHNvIHdlIGRvbid0IGZhbGwgYmFja1xuICAgIC8vIHRvIGBjb21wb25lbnRgIGZvciBpdHMgdmFsdWUuXG4gICAgY29udGV4dC5uZXN0ZWQgPz89IHRydWVcbiAgICBjb250ZXh0LmNvbXBvbmVudCA9IGNvbXBvbmVudFxuICAgIC8vIEhhdmUgYG9iamVjdGAgaW5oZXJpdCBmcm9tIHRoZSBgY29tcG9uZW50YCBpbnN0YW5jZSwgc28gaXQgY2FuIG92ZXJyaWRlXG4gICAgLy8gaXRzIHZhbHVlcyBhbmQgc3RpbGwgcmV0cmlldmUgZnJvbSBpdCwgYW5kIGFzc29jaWF0ZSBpdCB3aXRoIGB0aGlzYFxuICAgIC8vIHRocm91Z2ggYGNvbnRleHRzYCBtYXA6XG4gICAgY29uc3Qgb2JqZWN0ID0gT2JqZWN0LnNldFByb3RvdHlwZU9mKGNvbnRleHQsIGNvbXBvbmVudClcbiAgICAvLyBObyBuZWVkIGZvciBgdG9SYXcodGhpcylgIGhlcmUgYXMgaXQncyBhbHdheXMgcmF3IGluc2lkZSB0aGUgY29uc3RydWN0b3IuXG4gICAgY29udGV4dHMuc2V0KHRoaXMsIG9iamVjdClcbiAgfVxuXG4gIHN0YXRpYyBnZXQoY29tcG9uZW50LCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNvbnRleHQgaW5zdGFuY2VvZiBEaXRvQ29udGV4dFxuICAgICAgPyBjb250ZXh0XG4gICAgICA6IG5ldyBEaXRvQ29udGV4dChjb21wb25lbnQsIGNvbnRleHQpXG4gIH1cblxuICBleHRlbmQob2JqZWN0KSB7XG4gICAgLy8gQ3JlYXRlIGEgY29weSBvZiB0aGlzIGNvbnRleHQgdGhhdCBpbmhlcml0cyBmcm9tIHRoZSByZWFsIG9uZSwgYnV0XG4gICAgLy8gb3ZlcnJpZGVzIHNvbWUgcHJvcGVydGllcyB3aXRoIHRoZSBvbmVzIGZyb20gdGhlIHBhc3NlZCBgb2JqZWN0YC5cbiAgICByZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKG9iamVjdCwgdGhpcylcbiAgfVxuXG4gIC8vIGBuZXN0ZWRgIGlzIGB0cnVlYCB3aGVuIHRoZSBkYXRhLXBhdGggcG9pbnRzIGEgdmFsdWUgaW5zaWRlIGFuIGl0ZW0sIGFuZFxuICAvLyBgZmFsc2VgIHdoZW4gaXQgcG9pbnRzIHRvIHRoZSBpdGVtIGl0c2VsZi5cbiAgZ2V0IG5lc3RlZCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICduZXN0ZWQnLCB0cnVlKVxuICB9XG5cbiAgZ2V0IHNjaGVtYSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdzY2hlbWEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiBnZXQoXG4gICAgICB0aGlzLFxuICAgICAgJ3ZhbHVlJyxcbiAgICAgICgpID0+XG4gICAgICAgIC8vIElmIHRoZSB2YWx1ZSBpcyBub3QgZGVmaW5lZCBvbiB0aGUgdW5kZXJseWluZyBvYmplY3QsIGl0J3Mgbm90IGEgdHlwZVxuICAgICAgICAvLyBjb21wb25lbnQuIElmIGl0IGlzIG5lc3RlZCwgd2UgY2FuIHN0aWxsIGdldCB0aGUgdmFsdWUgZnJvbSB0aGUgcm9vdC5cbiAgICAgICAgdGhpcy5uZXN0ZWRcbiAgICAgICAgICA/IGdldFZhbHVlQXREYXRhUGF0aCh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoKVxuICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgKVxuICB9XG5cbiAgZ2V0IGRhdGFQYXRoKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2RhdGFQYXRoJywgJycpXG4gIH1cblxuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICduYW1lJywgKCkgPT4gZ2V0TGFzdERhdGFQYXRoTmFtZSh0aGlzLmRhdGFQYXRoKSlcbiAgfVxuXG4gIGdldCBpbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdpbmRleCcsICgpID0+IGdldExhc3REYXRhUGF0aEluZGV4KHRoaXMuZGF0YVBhdGgpKVxuICB9XG5cbiAgZ2V0IGl0ZW1EYXRhUGF0aCgpIHtcbiAgICByZXR1cm4gZ2V0SXRlbURhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICB9XG5cbiAgZ2V0IHBhcmVudEl0ZW1EYXRhUGF0aCgpIHtcbiAgICByZXR1cm4gZ2V0UGFyZW50SXRlbURhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICB9XG5cbiAgZ2V0IGl0ZW1JbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0TGFzdERhdGFQYXRoSW5kZXgodGhpcy5pdGVtRGF0YVBhdGgpXG4gIH1cblxuICBnZXQgcGFyZW50SXRlbUluZGV4KCkge1xuICAgIHJldHVybiBnZXRMYXN0RGF0YVBhdGhJbmRleCh0aGlzLnBhcmVudEl0ZW1EYXRhUGF0aClcbiAgfVxuXG4gIC8vIE5PVEU6IFdoaWxlIGludGVybmFsbHksIHdlIHNwZWFrIG9mIGBkYXRhYCwgaW4gdGhlIEFQSSBzdXJmYWNlIHRoZVxuICAvLyB0ZXJtIGBpdGVtYCBpcyB1c2VkIGZvciB0aGUgZGF0YSB0aGF0IHJlbGF0ZXMgdG8gZWRpdGluZyBvYmplY3RzOlxuICBnZXQgaXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KFxuICAgICAgdGhpcyxcbiAgICAgICdkYXRhJyxcbiAgICAgIC8vIElmIGBkYXRhYCBpc24ndCBwcm92aWRlZCwgd2UgY2FuIGRldGVybWluZSBpdCBmcm9tIHJvb3REYXRhICYgZGF0YVBhdGg6XG4gICAgICAoKSA9PiBnZXRJdGVtKHRoaXMucm9vdEl0ZW0sIHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKSB8fCBudWxsXG4gICAgKVxuICB9XG5cbiAgLy8gTk9URTogYHBhcmVudEl0ZW1gIGlzbid0IHRoZSBjbG9zZXN0IGRhdGEgcGFyZW50IHRvIGBpdGVtYCwgaXQncyB0aGVcbiAgLy8gY2xvc2VzdCBwYXJlbnQgdGhhdCBpc24ndCBhbiBhcnJheSwgZS5nLiBmb3IgcmVsYXRpb25zIG9yIG5lc3RlZCBKU09OIGRhdGEuXG4gIC8vIFRoaXMgaXMgd2h5IHRoZSB0ZXJtIGBpdGVtYCB3YXMgY2hvc2VuIG92ZXIgYGRhdGFgLCBlLmcuIFZTIHRoZSB1c2Ugb2ZcbiAgLy8gYHBhcmVudERhdGFgIGluIHNlcnZlci1zaWRlZCB2YWxpZGF0aW9uLCB3aGljaCBpcyB0aGUgY2xvc2VzdCBwYXJlbnQuIElmXG4gIC8vIG5lZWRlZCwgd2UgY291bGQgZXhwb3NlIHRoaXMgZGF0YSBoZXJlIHRvbywgYXMgd2UgY2FuIGRvIGFsbCBzb3J0cyBvZiBkYXRhXG4gIC8vIHByb2Nlc3Npbmcgd2l0aCBgcm9vdERhdGFgIGFuZCBgZGF0YVBhdGhgLlxuICBnZXQgcGFyZW50SXRlbSgpIHtcbiAgICBjb25zdCBpdGVtID0gKFxuICAgICAgZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZCkgfHwgbnVsbFxuICAgIClcbiAgICByZXR1cm4gaXRlbSAhPT0gdGhpcy5pdGVtID8gaXRlbSA6IG51bGxcbiAgfVxuXG4gIGdldCByb290SXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdyb290RGF0YScsIG51bGwpXG4gIH1cblxuICBnZXQgcHJvY2Vzc2VkSXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdwcm9jZXNzZWREYXRhJywgbnVsbClcbiAgfVxuXG4gIGdldCBwcm9jZXNzZWRSb290SXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdwcm9jZXNzZWRSb290RGF0YScsIG51bGwpXG4gIH1cblxuICBnZXQgY2xpcGJvYXJkSXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdjbGlwYm9hcmREYXRhJywgbnVsbClcbiAgfVxuXG4gIGdldCB1c2VyKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3VzZXInLCBudWxsKVxuICB9XG5cbiAgZ2V0IGFwaSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdhcGknLCBudWxsKVxuICB9XG5cbiAgZ2V0IHZpZXdzKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3ZpZXdzJywgbnVsbClcbiAgfVxuXG4gIGdldCBmbGF0dGVuZWRWaWV3cygpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdmbGF0dGVuZWRWaWV3cycsIG51bGwpXG4gIH1cblxuICBnZXQgaXRlbUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2l0ZW1MYWJlbCcsIG51bGwpXG4gIH1cblxuICBnZXQgZm9ybUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Zvcm1MYWJlbCcsIG51bGwpXG4gIH1cblxuICAvLyBOT1RFOiBMaWtlICdvcHRpb25zJywgdGhlIGFzc29jaWF0ZWQgY29tcG9uZW50IGRvZXNuJ3QgYWx3YXlzIGV4aXN0LCBlLmcuXG4gIC8vIGluIG5lc3RlZCBmb3JtcyBkdXJpbmcgYHByb2Nlc3NEYXRhKClgLiBCdXQgYHNjaGVtYWAgaXMgZ3VhcmFudGVlZCB0b1xuICAvLyBhbHdheXMgYmUgYXZhaWxhYmxlLlxuICBnZXQgY29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICAvLyBUT0RPOiBBZGQgYGNvbXBvbmVudFNjaGVtYWAgZ2V0dGVyIGZvciB0aGUgc2NoZW1hIG9mIHRoZSBjdXJyZW50IGNvbXBvbmVudCxcbiAgLy8gZXZlbiB3aGVuIHRoZSBjb21wb25lbnQgaXNuJ3QgYWN0dWFsbHkgaW5zdGFudGlhdGVkLiBDb25zaWRlciBhZGRpbmdcbiAgLy8gYHNvdXJjZVNjaGVtYWAgYXMgd2VsbD9cblxuICAvLyBUT0RPOiBGaXggdW5jbGVhciBuYW1pbmc6IFdoaWNoIHNjaGVtYSBpcyB0aGlzLCB0aGF0IG9mIHRoZSBjb21wb25lbnQgb3Igb2ZcbiAgLy8gaXRzIHBhcmVudD8gSXNuJ3QgZXhwb3NpbmcgYGZvcm1Db21wb25lbnRgIGFuZCBgdmlld0NvbXBvbmVudGAgZW5vdWdoLCBvbmNlXG4gIC8vIHdlIG9mZmVyIGFjY2VzcyB0byB0aGVpciBjb21wb25lbnRzIHRoZXJlIHRocm91Z2ggYGdldENvbXBvbmVudCgpYCAmIGNvLiBvblxuICAvLyBgRGl0b01peGluYCBwZXJoYXBzPyAgQWxzbywgdGhlcmUgY291bGQgYmUgYSBgdGFiQ29tcG9uZW50YCBnZXR0ZXIgZm9yXG4gIC8vIHNjaGVtYXMgaW4gdGFicz9cbiAgZ2V0IHNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdzY2hlbWFDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGZvcm1Db21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZm9ybUNvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgdmlld0NvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd2aWV3Q29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBkaWFsb2dDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZGlhbG9nQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBwYW5lbENvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdwYW5lbENvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgcmVzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncmVzb3VyY2VDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdzb3VyY2VDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgLy8gV2hlbiB1c2VkIGluIE9wdGlvbnNNaXhpbiBmb3IgYHNjaGVtYS5vcHRpb25zLnZhbHVlKClgLFxuICAvLyBgc2NoZW1hLm9wdGlvbnMubGFiZWwoKWAgYW5kICBgc2NoZW1hLnNlYXJjaC5maWx0ZXIoKWAgY2FsbGJhY2tzOlxuICBnZXQgb3B0aW9uKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ29wdGlvbicsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCBvcHRpb25zKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ29wdGlvbnMnLCB1bmRlZmluZWQpXG4gIH1cblxuICBnZXQgb3BlbigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdvcGVuJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgLy8gVE9ETzogUmVuYW1lIHRoaXMgdG8gYHNlYXJjaFRlcm1gIG9yIGBzZWFyY2hRdWVyeWAsIHRvIHBlcmhhcHMgZnJlZSBgcXVlcnlgXG4gIC8vIGZvciB0aGUgYWN0dWFsIGByZXNvdXJjZUNvbXBvbmVudC5xdWVyeWAgb2JqZWN0P1xuICBnZXQgcXVlcnkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncXVlcnknLCB1bmRlZmluZWQpXG4gIH1cblxuICAvLyBUaGUgZXJyb3IgZmllbGQgaXMgb25seSBwb3B1bGF0ZWQgaW4gdGhlIGNvbnRleHQgb2YgYnV0dG9ucyB0aGF0IHNlbmRcbiAgLy8gcmVxdWVzdHMsIHNlZSBgUmVzb3VyY2VNaXhpbi5lbWl0QnV0dG9uRXZlbnQoKWA6XG4gIGdldCBlcnJvcigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdlcnJvcicsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCB3YXNOb3RpZmllZCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIGZhbHNlKVxuICB9XG5cbiAgLy8gSGVscGVyIE1ldGhvZHNcblxuICBnZXQgcmVxdWVzdCgpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA9PiB0aGlzLmNvbXBvbmVudC5yZXF1ZXN0KG9wdGlvbnMpXG4gIH1cblxuICBnZXQgZm9ybWF0KCkge1xuICAgIHJldHVybiAodmFsdWUsIG9wdGlvbnMpID0+IHRoaXMuY29tcG9uZW50LmZvcm1hdCh2YWx1ZSwgb3B0aW9ucylcbiAgfVxuXG4gIGdldCBuYXZpZ2F0ZSgpIHtcbiAgICByZXR1cm4gbG9jYXRpb24gPT4gdGhpcy5jb21wb25lbnQubmF2aWdhdGUobG9jYXRpb24pXG4gIH1cblxuICBnZXQgZG93bmxvYWQoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPT4gdGhpcy5jb21wb25lbnQuZG93bmxvYWQob3B0aW9ucylcbiAgfVxuXG4gIGdldCBnZXRSZXNvdXJjZVVybCgpIHtcbiAgICByZXR1cm4gcmVzb3VyY2UgPT4gdGhpcy5jb21wb25lbnQuZ2V0UmVzb3VyY2VVcmwocmVzb3VyY2UpXG4gIH1cblxuICBnZXQgbm90aWZ5KCkge1xuICAgIHJldHVybiBvcHRpb25zID0+IHtcbiAgICAgIHRoaXMuY29tcG9uZW50Lm5vdGlmeShvcHRpb25zKVxuICAgICAgc2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIHRydWUpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBpc1BsYWluT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGlzdGVuZXJzOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICAvLyBBc3luYyBvbigpIGFuZCAkb2ZmKCkgbWV0aG9kcyB0aGF0IGtlZXAgdHJhY2sgb2YgdGhlIGV2ZW50cyBhZGRlZCAvXG4gICAgLy8gcmVtb3ZlZCwgYW5kIHByb3ZpZGUgYSBoYXNMaXN0ZW5lcnMoKSBtZXRob2QgdGhhdCBjaGVja3MgaWYgdGhlIGNvbXBvbmVudFxuICAgIC8vIGhhcyBsaXN0ZW5lcnMgZm9yIGEgZ2l2ZW4gZXZlbnQuXG5cbiAgICAvLyBBbHNvIGFkZHMgcHJvcGVyIGhhbmRsaW5nIG9mIGFzeW5jIGV2ZW50cywgaW5jbHVkaW5nIGEgYXN5bmMgZW1pdCgpIHRoYXRcbiAgICAvLyBkZWFscyB3aXRoIHByb3BlciBldmVudCBxdWV1ZWluZy5cbiAgICBvbihldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5vbihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9uKGtleSwgZXZlbnRba2V5XSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gKHRoaXMubGlzdGVuZXJzIHx8PSBPYmplY3QuY3JlYXRlKG51bGwpKVxuICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyB9ID0gKGxpc3RlbmVyc1tldmVudF0gfHw9IHtcbiAgICAgICAgICBjYWxsYmFja3M6IFtdLFxuICAgICAgICAgIHF1ZXVlOiBbXVxuICAgICAgICB9KVxuICAgICAgICBjYWxsYmFja3MucHVzaChjYWxsYmFjaylcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIG9uY2UoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBvbiA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIHRoaXMub2ZmKGV2ZW50LCBvbilcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgICB9XG4gICAgICBvbi5jYWxsYmFjayA9IGNhbGxiYWNrIC8vIE5lZWRlZCBmb3IgYG9mZigpYCwgc2VlIGJlbG93LlxuICAgICAgcmV0dXJuIHRoaXMub24oZXZlbnQsIG9uKVxuICAgIH0sXG5cbiAgICBvZmYoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgLy8gUmVtb3ZlIGFsbCBldmVudHNcbiAgICAgICAgZGVsZXRlIHRoaXMubGlzdGVuZXJzXG4gICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihrZXksIGV2ZW50W2tleV0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbW92ZSBzcGVjaWZpYyBldmVudFxuICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMubGlzdGVuZXJzPy5bZXZlbnRdXG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSBhbGwgaGFuZGxlcnMgZm9yIHRoaXMgZXZlbnRcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmxpc3RlbmVyc1tldmVudF1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIGEgc3BlY2lmaWMgaGFuZGxlcjogZmluZCB0aGUgaW5kZXggaW4gY2FsbGJhY2tzXG4gICAgICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gY2FsbGJhY2tzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgLy8gTWF0Y2ggYGNiLmNhbGxiYWNrYCBhbHNvLCBhcyB1c2VkIGJ5IGBvbmNlKClgLCBzZWUgIGFib3ZlOlxuICAgICAgICAgICAgICBjYiA9PiBjYiA9PT0gY2FsbGJhY2sgfHwgY2IuY2FsbGJhY2sgPT09IGNhbGxiYWNrXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrcy5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBlbWl0KGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgICAvLyBPbmx5IHF1ZXVlIGV2ZW50IGlmIHRoZXJlIGFjdHVhbGx5IGFyZSBsaXN0ZW5lcnMgZm9yIGl0LlxuICAgICAgY29uc3QgZW50cnkgPSB0aGlzLmxpc3RlbmVycz8uW2V2ZW50XVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGNvbnN0IHsgcXVldWUsIGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgIGNvbnN0IG5leHQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAvLyBFbWl0IHRoZSBuZXh0IGV2ZW50IGluIHRoZSBxdWV1ZSB3aXRoIGl0cyBwYXJhbXMuXG4gICAgICAgICAgICAvLyBOb3RlIHRoYXQgaXQgb25seSBnZXRzIHJlbW92ZWQgb25jZSBgbmV4dCgpYCBpcyBjYWxsZWQuXG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHF1ZXVlLnNoaWZ0KClcbiAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICBsZXQgcmVzdWx0XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNhbGxiYWNrLmFwcGx5KHRoaXMsIGVudHJ5LmFyZ3MpXG4gICAgICAgICAgICAgICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBFcnJvciBkdXJpbmcgZXZlbnQgaGFuZGxlciBmb3IgJyR7ZXZlbnR9JzpgLFxuICAgICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBSZXNvbHZlIHRoZSBwcm9taXNlIHRoYXQgd2FzIGFkZGVkIHRvIHRoZSBxdWV1ZSBmb3IgdGhlIGV2ZW50XG4gICAgICAgICAgICAgIC8vIHRoYXQgd2FzIGp1c3QgY29tcGxldGVkIGJ5IHRoZSB3cmFwcGVyIHRoYXQgY2FsbGVkIGBuZXh0KClgXG4gICAgICAgICAgICAgIGVudHJ5LnJlc29sdmUocmVzdWx0KVxuICAgICAgICAgICAgICBuZXh0KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcXVldWUucHVzaCh7IGFyZ3MsIHJlc29sdmUgfSlcbiAgICAgICAgICAvLyBGb3IgbmV3IHF1ZXVlcyAoPSBvbmx5IG9uZSBlbnRyeSkgZW1pdCB0aGUgZmlyc3QgZXZlbnQgaW1tZWRpYXRlbHksXG4gICAgICAgICAgLy8gdG8gZ2V0IHRoZSBxdWV1ZSBydW5uaW5nLlxuICAgICAgICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIG5leHQoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIC8vIE1ha2Ugc3VyZSBpdCdzIHRoZW5hYmxlIGV2ZW4gaWYgdGhlcmUgYXJlIG5vIGxpc3RlbmVycy5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgIH0sXG5cbiAgICAvLyBDaGVja3MgaWYgdGhlIGNvbXBvbmVudCBoYXMgbGlzdGVuZXJzIGZvciBhIGdpdmVuIGV2ZW50IHR5cGU6XG4gICAgaGFzTGlzdGVuZXJzKGV2ZW50KSB7XG4gICAgICBpZiAoaXNBcnJheShldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBldiBvZiBldmVudCkge1xuICAgICAgICAgIGlmICghdGhpcy5oYXNMaXN0ZW5lcnMoZXYpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGV2ZW50Lmxlbmd0aCA+IDBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMubGlzdGVuZXJzPy5bZXZlbnRdXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRlbGVnYXRlKGV2ZW50LCB0YXJnZXQpIHtcbiAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBldiBvZiBldmVudCkge1xuICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZShldiwgdGFyZ2V0KVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm9uKGV2ZW50LCAoLi4uYXJncykgPT4gdGFyZ2V0LmVtaXQoZXZlbnQsIC4uLmFyZ3MpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IHsgY29tcHV0ZVZhbHVlIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXB1dGVkOiB7XG4gICAgdmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBjb21wdXRlVmFsdWUoXG4gICAgICAgICAgdGhpcy5zY2hlbWEsXG4gICAgICAgICAgdGhpcy5kYXRhLFxuICAgICAgICAgIHRoaXMubmFtZSxcbiAgICAgICAgICB0aGlzLmRhdGFQYXRoLFxuICAgICAgICAgIHsgY29tcG9uZW50OiB0aGlzIH1cbiAgICAgICAgKVxuICAgICAgICBjb25zdCB7IGZvcm1hdCB9ID0gdGhpcy5zY2hlbWFcbiAgICAgICAgcmV0dXJuIGZvcm1hdFxuICAgICAgICAgID8gZm9ybWF0KG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IHZhbHVlIH0pKVxuICAgICAgICAgIDogdmFsdWVcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBjb25zdCB7IHBhcnNlIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgICBpZiAocGFyc2UpIHtcbiAgICAgICAgICB2YWx1ZSA9IHBhcnNlKG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IHZhbHVlIH0pKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucGFyc2VkVmFsdWUgPSB2YWx1ZVxuICAgICAgICB0aGlzLmRhdGFbdGhpcy5uYW1lXSA9IHZhbHVlXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgeyBnZXRJdGVtLCBnZXRQYXJlbnRJdGVtIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcHV0ZWQ6IHtcbiAgICBjb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG5lc3RlZDogdGhpcy5uZXN0ZWQgfSlcbiAgICB9LFxuXG4gICAgLy8gVGhlIGZvbGxvd2luZyBjb21wdXRlZCBwcm9wZXJ0aWVzIGFyZSBzaW1pbGFyIHRvIGBEaXRvQ29udGV4dGBcbiAgICAvLyBwcm9wZXJ0aWVzLCBzbyB0aGF0IHdlIGNhbiBhY2Nlc3MgdGhlc2Ugb24gYHRoaXNgIGFzIHdlbGw6XG4gICAgLy8gTk9URTogV2hpbGUgaW50ZXJuYWxseSwgd2Ugc3BlYWsgb2YgYGRhdGFgLCBpbiB0aGUgQVBJIHN1cmZhY2UgdGhlXG4gICAgLy8gdGVybSBgaXRlbWAgaXMgdXNlZCBmb3IgdGhlIGRhdGEgdGhhdCByZWxhdGVzIHRvIGVkaXRpbmcgb2JqZWN0cy5cbiAgICAvLyBOT1RFOiBUaGlzIHNob3VsZCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIGFzOlxuICAgIC8vIHJldHVybiBnZXRJdGVtKHRoaXMucm9vdERhdGEsIHRoaXMuZGF0YVBhdGgsIGZhbHNlKVxuICAgIHBhcmVudERhdGEoKSB7XG4gICAgICBjb25zdCBkYXRhID0gZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3REYXRhLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgICAgIHJldHVybiBkYXRhICE9PSB0aGlzLmRhdGEgPyBkYXRhIDogbnVsbFxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBwcm9jZXNzZWREYXRhKCkge1xuICAgICAgcmV0dXJuIGdldFByb2Nlc3NlZFBhcmVudERhdGEodGhpcywgdGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gICAgfSxcblxuICAgIHByb2Nlc3NlZFJvb3REYXRhKCkge1xuICAgICAgcmV0dXJuIGdldFByb2Nlc3NlZFBhcmVudERhdGEodGhpcywgJycsIGZhbHNlKVxuICAgIH0sXG5cbiAgICBpdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBwYXJlbnRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucGFyZW50RGF0YVxuICAgIH0sXG5cbiAgICByb290SXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3REYXRhXG4gICAgfSxcblxuICAgIHByb2Nlc3NlZEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzZWREYXRhXG4gICAgfSxcblxuICAgIHByb2Nlc3NlZFJvb3RJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc2VkUm9vdERhdGFcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0UHJvY2Vzc2VkUGFyZW50RGF0YShjb21wb25lbnQsIGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICAvLyBXZSBjYW4gb25seSBnZXQgdGhlIHByb2Nlc3NlZCBkYXRhIHRocm91Z2ggdGhlIHNjaGVtYUNvbXBvbmVudCwgYnV0XG4gIC8vIHRoYXQncyBub3QgbmVjZXNzYXJpbHkgdGhlIGl0ZW0gcmVwcmVzZW50ZWQgYnkgdGhpcyBjb21wb25lbnQuXG4gIC8vIFNvbHV0aW9uOiBGaW5kIHRoZSByZWxhdGl2ZSBwYXRoIGFuZCB0aGUgcHJvY2Vzc2VkIHN1Yi1pdGVtIGZyb20gdGhlcmU6XG4gIGxldCB7IHNjaGVtYUNvbXBvbmVudCB9ID0gY29tcG9uZW50XG4gIC8vIEZpbmQgdGhlIHNjaGVtYSBjb21wb25lbnQgdGhhdCBjb250YWlucyB0aGUgZGVzaXJlZCBkYXRhLXBhdGg6XG4gIHdoaWxlIChzY2hlbWFDb21wb25lbnQuZGF0YVBhdGgubGVuZ3RoID4gZGF0YVBhdGgubGVuZ3RoKSB7XG4gICAgc2NoZW1hQ29tcG9uZW50ID0gc2NoZW1hQ29tcG9uZW50LnBhcmVudFNjaGVtYUNvbXBvbmVudFxuICB9XG4gIHJldHVybiBnZXRJdGVtKFxuICAgIHNjaGVtYUNvbXBvbmVudC5wcm9jZXNzZWREYXRhLFxuICAgIC8vIEdldCB0aGUgZGF0YVBhdGggcmVsYXRpdmUgdG8gdGhlIHNjaGVtYUNvbXBvbmVudCdzIGRhdGE6XG4gICAgZGF0YVBhdGguc2xpY2Uoc2NoZW1hQ29tcG9uZW50LmRhdGFQYXRoLmxlbmd0aCksXG4gICAgbmVzdGVkXG4gIClcbn1cbiIsImltcG9ydCB7IGlzQ3JlZGl0Q2FyZCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBjcmVkaXRjYXJkID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNDcmVkaXRDYXJkKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIGludmFsaWQnXG59XG4iLCJleHBvcnQgY29uc3QgZGVjaW1hbHMgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIGRlY2ltYWxzKSA9PiB7XG4gICAgY29uc3QgbWF0Y2ggPSBkZWNpbWFscyA9PT0gJyonID8gJysnIDogYHsxLCR7ZGVjaW1hbHN9fWBcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXlstK10/XFxcXGQqKFxcXFwuXFxcXGQke21hdGNofSk/JGApLnRlc3QodmFsdWUpXG4gIH0sXG5cbiAgbWVzc2FnZTogKHZhbHVlLCBkZWNpbWFscykgPT5cbiAgICBgbXVzdCBiZSBudW1lcmljIGFuZCBtYXkgY29udGFpbiAke1xuICAgICAgIWRlY2ltYWxzIHx8IGRlY2ltYWxzID09PSAnKicgPyAnJyA6IGRlY2ltYWxzXG4gICAgfSBkZWNpbWFsIHBvaW50c2Bcbn1cbiIsImltcG9ydCB7IGlzRG9tYWluIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGRvbWFpbiA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzRG9tYWluKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIG5vdCBhIGRvbWFpbidcbn1cbiIsImltcG9ydCB7IGlzRW1haWwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgZW1haWwgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0VtYWlsKHZhbHVlKSxcbiAgbWVzc2FnZTogJ211c3QgYmUgYSB2YWxpZCBlbWFpbCdcbn1cbiIsImltcG9ydCB7IGlzSG9zdG5hbWUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgaG9zdG5hbWUgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0hvc3RuYW1lKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIG5vdCBhIGhvc3QgbmFtZSdcbn1cbiIsImltcG9ydCB7IGlzSW50ZWdlciB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBpbnRlZ2VyID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNJbnRlZ2VyKHZhbHVlKSxcbiAgbWVzc2FnZTogJ211c3QgYmUgd2hvbGUgbnVtYmVyJ1xufVxuIiwiZXhwb3J0IGNvbnN0IG1heCA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgbWF4KSA9PiB2YWx1ZSA8PSBtYXgsXG4gIG1lc3NhZ2UodmFsdWUsIG1heCkge1xuICAgIHJldHVybiBgbXVzdCBiZSAke21heH0gb3IgbGVzc2BcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IG1pbiA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgbWluKSA9PiB2YWx1ZSA+PSBtaW4sXG4gIG1lc3NhZ2UodmFsdWUsIG1pbikge1xuICAgIHJldHVybiBgbXVzdCBiZSAke21pbn0gb3IgbW9yZWBcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IHBhc3N3b3JkID0ge1xuICAvLyBBbGxvdyBhbnkgdmFsdWUuIEZvciBub3cgdGhpcyBpcyBvbmx5IHVzZWQgYXMgYSBtYXJrZXIsIHRvIGFsbG93IHRoZVxuICAvLyByZXF1aXJlZCB2YWxpZGF0aW9uIHRvIGhhbmRsZSB1bmNoYW5nZWQgcGFzc3dvcmRzIHNlcGFyYXRlbHkuXG4gIHZhbGlkYXRlOiAoKSA9PiB0cnVlXG59XG4iLCJleHBvcnQgY29uc3QgcmFuZ2UgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIFttaW4sIG1heF0pID0+IHZhbHVlID49IG1pbiAmJiB2YWx1ZSA8PSBtYXgsXG4gIG1lc3NhZ2UodmFsdWUsIFttaW4sIG1heF0pIHtcbiAgICByZXR1cm4gYG11c3QgYmUgYmV0d2VlbiAke21pbn0gYW5kICR7bWF4fWBcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IHJlcXVpcmVkID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBzZXR0aW5ncywgeyBwYXNzd29yZCB9KSA9PiAoXG4gICAgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT09ICcnKSB8fFxuICAgIC8vIFBhc3N3b3JkIGZpZWxkcyB1c2UgYHVuZGVmaW5lZGAgYXMgb3Bwb3NlZCB0byBgbnVsbGAgd2hlbiB0aGV5J3JlIHNldFxuICAgIC8vIGJ1dCB1bmNoYW5nZWQsIGFsbG93IHRoaXMgdG8gcGFzcyB0aHJvdWdoOlxuICAgIChwYXNzd29yZCAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuICApLFxuICBtZXNzYWdlOiAnaXMgcmVxdWlyZWQnXG59XG4iLCJpbXBvcnQgeyBpc1VybCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCB1cmwgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc1VybCh2YWx1ZSksXG4gIG1lc3NhZ2U6ICdpcyBub3QgYSB2YWxpZCBVUkwnXG59XG4iLCJpbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCAqIGFzIHZhbGlkYXRvcnMgZnJvbSAnLi4vdmFsaWRhdG9ycy9pbmRleC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZW1pdHM6IFsnZXJyb3JzJ10sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNUb3VjaGVkOiBmYWxzZSxcbiAgICAgIGlzRGlydHk6IGZhbHNlLFxuICAgICAgaXNWYWxpZGF0ZWQ6IGZhbHNlLFxuICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICBlcnJvcnM6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBoYXNFcnJvcnMoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmVycm9yc1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgcmVzZXRWYWxpZGF0aW9uKCkge1xuICAgICAgdGhpcy5pc1RvdWNoZWQgPSBmYWxzZVxuICAgICAgdGhpcy5pc0RpcnR5ID0gZmFsc2VcbiAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkID0gZmFsc2VcbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgIH0sXG5cbiAgICB2YWxpZGF0ZShub3RpZnkgPSB0cnVlKSB7XG4gICAgICBsZXQgaXNWYWxpZCA9IHRydWVcbiAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgICB9XG4gICAgICBjb25zdCB7IHZhbHVlIH0gPSB0aGlzXG4gICAgICBmb3IgKGNvbnN0IFtydWxlLCBzZXR0aW5nXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnZhbGlkYXRpb25zKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25hbWVzcGFjZVxuICAgICAgICBjb25zdCB2YWxpZGF0b3IgPSB2YWxpZGF0b3JzW3J1bGVdXG4gICAgICAgIGlmIChcbiAgICAgICAgICB2YWxpZGF0b3IgJiZcbiAgICAgICAgICAvLyBPbmx5IGFwcGx5ICdyZXF1aXJlZCcgdmFsaWRhdG9yIHRvIGVtcHR5IHZhbHVlcy5cbiAgICAgICAgICAvLyBBcHBseSBhbGwgb3RoZXIgdmFsaWRhdG9ycyBvbmx5IHRvIG5vbi1lbXB0eSB2YWx1ZXMuXG4gICAgICAgICAgKHJ1bGUgPT09ICdyZXF1aXJlZCcgfHwgdmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPT0gJycpXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IHsgdmFsaWRhdGUsIG1lc3NhZ2UgfSA9IHZhbGlkYXRvclxuICAgICAgICAgIGlmICghdmFsaWRhdGUodmFsdWUsIHNldHRpbmcsIHRoaXMudmFsaWRhdGlvbnMpKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2VcbiAgICAgICAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBpc0Z1bmN0aW9uKG1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgPyBtZXNzYWdlKHZhbHVlLCBzZXR0aW5nLCB0aGlzKVxuICAgICAgICAgICAgICAgIDogbWVzc2FnZVxuICAgICAgICAgICAgICB0aGlzLmFkZEVycm9yKGVycm9yLCB0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICB0aGlzLmlzVmFsaWRhdGVkID0gdHJ1ZVxuICAgICAgICB0aGlzLmlzVmFsaWQgPSBpc1ZhbGlkXG4gICAgICB9XG4gICAgICByZXR1cm4gaXNWYWxpZFxuICAgIH0sXG5cbiAgICB2ZXJpZnkoKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZShmYWxzZSlcbiAgICB9LFxuXG4gICAgbWFya1RvdWNoZWQoKSB7XG4gICAgICB0aGlzLmlzVG91Y2hlZCA9IHRydWVcbiAgICAgIC8vIENsZWFyIGN1cnJlbnRseSBkaXNwbGF5ZWQgZXJyb3JzIHdoZW4gZm9jdXNpbmcgaW5wdXQuXG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICB9LFxuXG4gICAgbWFya0RpcnR5KCkge1xuICAgICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZVxuICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzVmFsaWQgPSBmYWxzZVxuICAgICAgLy8gQ2xlYXIgY3VycmVudGx5IGRpc3BsYXllZCBlcnJvcnMgb24gbmV3IGlucHV0LlxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIGFkZEVycm9yKGVycm9yLCBhZGRMYWJlbCA9IGZhbHNlKSB7XG4gICAgICB0aGlzLmVycm9ycyB8fD0gW11cbiAgICAgIGlmIChhZGRMYWJlbCkge1xuICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMubGFiZWwgfHwgdGhpcy5wbGFjZWhvbGRlciB8fCB0aGlzLm5hbWVcbiAgICAgICAgZXJyb3IgPSBgVGhlICR7bGFiZWx9IGZpZWxkICR7ZXJyb3J9LmBcbiAgICAgIH1cbiAgICAgIHRoaXMuZXJyb3JzLnB1c2goZXJyb3IpXG4gICAgICB0aGlzLiRlbWl0KCdlcnJvcnMnLCB0aGlzLmVycm9ycylcbiAgICB9LFxuXG4gICAgc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cykge1xuICAgICAgLy8gQ29udmVydCBmcm9tIEFKViBlcnJvcnMgb2JqZWN0cyB0byBhbiBhcnJheSBvZiBlcnJvciBtZXNzYWdlc1xuICAgICAgdGhpcy5lcnJvcnMgPSBbXVxuICAgICAgaWYgKGVycm9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IHsgbWVzc2FnZSB9IG9mIGVycm9ycykge1xuICAgICAgICB0aGlzLmFkZEVycm9yKG1lc3NhZ2UsIHRydWUpXG4gICAgICB9XG4gICAgICBpZiAoZm9jdXMpIHtcbiAgICAgICAgdGhpcy5zY3JvbGxJbnRvVmlldygpXG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0sXG5cbiAgICBnZXRFcnJvcnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5lcnJvcnMgPyBbLi4udGhpcy5lcnJvcnNdIDogbnVsbFxuICAgIH0sXG5cbiAgICBjbGVhckVycm9ycygpIHtcbiAgICAgIHRoaXMuZXJyb3JzID0gbnVsbFxuICAgICAgdGhpcy4kZW1pdCgnZXJyb3JzJywgdGhpcy5lcnJvcnMpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQge1xuICBpc0Z1bmN0aW9uLFxuICBpc1N0cmluZyxcbiAgcGFyc2VEYXRhUGF0aCxcbiAgbm9ybWFsaXplRGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjaGVtYUFjY2Vzc29yKFxuICBrZXlPckRhdGFQYXRoLFxuICB7IHR5cGUsIGRlZmF1bHQ6IGRlZiwgZ2V0LCBzZXQsIGNhbGxiYWNrID0gdHJ1ZSB9ID0ge31cbikge1xuICAvLyBga2V5T3JEYXRhUGF0aGAgY2FuIGJlIGEgc2ltcGxlIHByb3BlcnR5IGtleSxcbiAgLy8gb3IgYSBkYXRhLXBhdGggaW50byBzdWItcHJvcGVydGllcywgYm90aCBpbiBhcnJheSBvciBzdHJpbmcgZm9ybWF0LlxuICBpZiAoaXNTdHJpbmcoa2V5T3JEYXRhUGF0aCkgJiYga2V5T3JEYXRhUGF0aC5pbmNsdWRlcygnLicpKSB7XG4gICAga2V5T3JEYXRhUGF0aCA9IHBhcnNlRGF0YVBhdGgoa2V5T3JEYXRhUGF0aClcbiAgfVxuICAvLyBVc2UgdGhlIG5vcm1hbGl6ZWQgZGF0YSBwYXRoIGZvciB0aGUgaGFuZGxpbmcgb3ZlcnJpZGVzXG4gIGNvbnN0IG5hbWUgPSBub3JtYWxpemVEYXRhUGF0aChrZXlPckRhdGFQYXRoKVxuICByZXR1cm4ge1xuICAgIGdldCgpIHtcbiAgICAgIC8vIE9ubHkgZGV0ZXJtaW5lIHNjaGVtYSB2YWx1ZSBpZiB3ZSBoYXZlIG5vIGdldHRlciwgb3IgdGhlIGdldHRlclxuICAgICAgLy8gd2FudHMgdG8gcmVjZWl2ZSB0aGUgdmFsdWUgYW5kIHByb2Nlc3MgaXQgZnVydGhlcjpcbiAgICAgIGNvbnN0IHZhbHVlID1cbiAgICAgICAgIWdldCB8fCBnZXQubGVuZ3RoID4gMFxuICAgICAgICAgID8gLy8gTk9URTogQmVjYXVzZSBgc2NoZW1hYCBvYmplY3RzIGFyZSByZXRyaWV2ZWQgZnJvbSBgbWV0YWAsIHRoZXlcbiAgICAgICAgICAgIC8vIGRvbid0IHNlZW0gdG8gYmUgcmVhY3RpdmUuIFRvIGFsbG93IGNoYW5nZWQgaW4gYHNjaGVtYWAgdmFsdWVzLFxuICAgICAgICAgICAgLy8gYHNldCgpYCBzdG9yZXMgY2hhbmdlZCB2YWx1ZXMgaW4gdGhlIHNlcGFyYXRlIGBvdmVycmlkZXNgIG9iamVjdC5cbiAgICAgICAgICAgIHRoaXMub3ZlcnJpZGVzICYmIG5hbWUgaW4gdGhpcy5vdmVycmlkZXNcbiAgICAgICAgICAgID8gdGhpcy5vdmVycmlkZXNbbmFtZV1cbiAgICAgICAgICAgIDogdGhpcy5nZXRTY2hlbWFWYWx1ZShrZXlPckRhdGFQYXRoLCB7XG4gICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBkZWYsXG4gICAgICAgICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgcmV0dXJuIGdldCA/IGdldC5jYWxsKHRoaXMsIHZhbHVlKSA6IHZhbHVlXG4gICAgfSxcblxuICAgIHNldCh2YWx1ZSkge1xuICAgICAgaWYgKHNldCkge1xuICAgICAgICBzZXQuY2FsbCh0aGlzLCB2YWx1ZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3ZlcnJpZGVzIHx8PSB7fVxuICAgICAgICB0aGlzLm92ZXJyaWRlc1tuYW1lXSA9IHZhbHVlXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdG9yZUFjY2Vzc29yKG5hbWUsIHsgZGVmYXVsdDogZGVmLCBnZXQsIHNldCB9ID0ge30pIHtcbiAgcmV0dXJuIHtcbiAgICBnZXQoKSB7XG4gICAgICBsZXQgdmFsdWUgPSB0aGlzLmdldFN0b3JlKG5hbWUpXG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBkZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBTdXBwb3J0IGBkZWZhdWx0KClgIGZ1bmN0aW9uczpcbiAgICAgICAgdmFsdWUgPSBpc0Z1bmN0aW9uKGRlZikgPyBkZWYuY2FsbCh0aGlzKSA6IGRlZlxuICAgICAgICAvLyBUcmlnZ2VyIHNldHRlciBieSBzZXR0aW5nIHZhbHVlIGFuZCBhY2Nlc3NvciB0byBkZWZhdWx0OlxuICAgICAgICB0aGlzW25hbWVdID0gdmFsdWVcbiAgICAgICAgLy8gTm93IGFjY2VzcyBzdG9yZSBhZ2FpbiwgZm9yIHJlYWN0aXZpdHkgdHJhY2tpbmdcbiAgICAgICAgdGhpcy5nZXRTdG9yZShuYW1lKVxuICAgICAgfVxuICAgICAgLy8gQWxsb3cgdGhlIHByb3ZpZGVkIGdldHRlciB0byBmdXJ0aGVyIGNoYW5nZSBvciBwcm9jZXNzIHRoZSB2YWx1ZVxuICAgICAgLy8gcmV0cmlldmVkIGZyb20gdGhlIHN0b3JlOlxuICAgICAgcmV0dXJuIGdldCA/IGdldC5jYWxsKHRoaXMsIHZhbHVlKSA6IHZhbHVlXG4gICAgfSxcblxuICAgIHNldCh2YWx1ZSkge1xuICAgICAgLy8gQWxsb3cgdGhlIHByb3ZpZGVkIHNldHRlciB0byByZXR1cm4gYSBuZXcgdmFsdWUgdG8gc2V0LCBvciBkbyB0aGVcbiAgICAgIC8vIHNldHRpbmcgaXRzZWxmLCBhbmQgdGhlbiByZXR1cm4gYHVuZGVmaW5lZGA6XG4gICAgICBpZiAoIXNldCB8fCAodmFsdWUgPSBzZXQuY2FsbCh0aGlzLCB2YWx1ZSkpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5zZXRTdG9yZShuYW1lLCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBWYWx1ZU1peGluIGZyb20gJy4vVmFsdWVNaXhpbi5qcydcbmltcG9ydCBDb250ZXh0TWl4aW4gZnJvbSAnLi9Db250ZXh0TWl4aW4uanMnXG5pbXBvcnQgVmFsaWRhdGlvbk1peGluIGZyb20gJy4vVmFsaWRhdGlvbk1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGFzQXJyYXksIGNhbWVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbVmFsdWVNaXhpbiwgQ29udGV4dE1peGluLCBWYWxpZGF0aW9uTWl4aW5dLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAvLyBOT1RFOiBXaGlsZSBgZGF0YVBhdGhgIHBvaW50cyB0byB0aGUgYWN0dWFsIGB2YWx1ZWAsIGBkYXRhYCByZXByZXNlbnRzXG4gICAgLy8gdGhlIGBpdGVtYCBpbiB3aGljaCB0aGUgYHZhbHVlYCBpcyBjb250YWluZWQsIHVuZGVyIHRoZSBrZXkgYG5hbWVgLlxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgd2lkdGg6IHsgdHlwZTogW051bWJlciwgU3RyaW5nXSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGxhYmVsOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBhY2N1bXVsYXRlZEJhc2lzOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFyc2VkVmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgIGZvY3VzZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5uYW1lXG4gICAgfSxcblxuICAgIHR5cGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEudHlwZVxuICAgIH0sXG5cbiAgICBsYWJlbE5vZGUoKSB7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy5pc01vdW50ZWQgPyB0aGlzLiRlbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nIDogbnVsbFxuICAgICAgcmV0dXJuIG5vZGU/Lm1hdGNoZXMoJy5kaXRvLWxhYmVsJykgPyBub2RlIDogbnVsbFxuICAgIH0sXG5cbiAgICB2aXNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndmlzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kb3B0aW9ucy5kZWZhdWx0VmlzaWJsZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBleGNsdWRlZGAgZm9yIGNvbnNpc3RlbnQgbmFtaW5nP1xuICAgIGV4Y2x1ZGU6IGdldFNjaGVtYUFjY2Vzc29yKCdleGNsdWRlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICByZXF1aXJlZDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlcXVpcmVkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBNb3ZlIHRoZXNlIHRvIGEgc3ViLWNsYXNzIGNvbXBvbmVudCB1c2VkIGZvciBhbGwgaW5wdXQgY29tcG9uZW50cz9cbiAgICByZWFkb25seTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlYWRvbmx5Jywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBhdXRvZm9jdXM6IGdldFNjaGVtYUFjY2Vzc29yKCdhdXRvZm9jdXMnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIC8vIFRvIGJlIHVzZWQgZm9yIHNlbGVjdHMgYW5kIGlucHV0cyBvbmx5P1xuICAgIGNsZWFyYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NsZWFyYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcblxuICAgICAgZ2V0KGNsZWFyYWJsZSkge1xuICAgICAgICByZXR1cm4gY2xlYXJhYmxlICYmICF0aGlzLnJlYWRvbmx5XG4gICAgICB9XG4gICAgfSksXG5cbiAgICBtYXhMZW5ndGg6IGdldFNjaGVtYUFjY2Vzc29yKCdtYXhMZW5ndGgnLCB7XG4gICAgICB0eXBlOiBOdW1iZXJcbiAgICB9KSxcblxuICAgIHBsYWNlaG9sZGVyOiBnZXRTY2hlbWFBY2Nlc3NvcigncGxhY2Vob2xkZXInLCB7XG4gICAgICB0eXBlOiBTdHJpbmdcbiAgICB9KSxcblxuICAgIGF1dG9jb21wbGV0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2F1dG9jb21wbGV0ZScsIHtcbiAgICAgIHR5cGU6IFN0cmluZ1xuICAgIH0pLFxuXG4gICAgZXZlbnRzKCkge1xuICAgICAgY29uc3QgZXZlbnRzID0gdGhpcy5nZXRFdmVudHMoKVxuICAgICAgLy8gUmVnaXN0ZXIgY2FsbGJhY2tzIGZvciBhbGwgcHJvdmlkZXMgbm9uLXJlY29nbml6ZWQgZXZlbnRzLFxuICAgICAgLy8gYXNzdW1pbmcgdGhleSBhcmUgbmF0aXZlIGV2ZW50cy5cbiAgICAgIC8vIFRPRE86IE1vdmUgdG8gdnVlMy1zdHlsZSBgb25bQS1aXWAgZXZlbnQgaGFuZGxlcnMgbmFtaW5nIHRoYXQgYXJlbid0XG4gICAgICAvLyBuYW1lc3BhY2VkIGluIGBzY2hlbWEuZXZlbnRzYCBvbmNlIHRoZSB0cmFuc2l0aW9uIGlzIGNvbXBsZXRlLlxuICAgICAgZm9yIChjb25zdCBldmVudCBvZiBPYmplY3Qua2V5cyh0aGlzLnNjaGVtYS5ldmVudHMgfHwge30pKSB7XG4gICAgICAgIGV2ZW50c1tgb24ke2NhbWVsaXplKGV2ZW50LCB0cnVlKX1gXSA/Pz0gKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZW1pdEV2ZW50KGV2ZW50KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZXZlbnRzXG4gICAgfSxcblxuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICBjb25zdCB7IG5hdGl2ZUZpZWxkLCB0ZXh0RmllbGQgfSA9IHRoaXMuJG9wdGlvbnNcblxuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgLi4udGhpcy5ldmVudHMsXG4gICAgICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkXG4gICAgICB9XG5cbiAgICAgIGlmIChuYXRpdmVGaWVsZCkge1xuICAgICAgICBhdHRyaWJ1dGVzLm5hbWUgPSB0aGlzLmRhdGFQYXRoXG4gICAgICAgIGlmICh0aGlzLmxhYmVsKSB7XG4gICAgICAgICAgYXR0cmlidXRlcy50aXRsZSA9IHRoaXMubGFiZWxcbiAgICAgICAgfVxuICAgICAgICBhdHRyaWJ1dGVzLnJlYWRvbmx5ID0gdGhpcy5yZWFkb25seVxuICAgICAgICBhdHRyaWJ1dGVzLmF1dG9mb2N1cyA9IHRoaXMuYXV0b2ZvY3VzXG4gICAgICAgIGlmICh0ZXh0RmllbGQpIHtcbiAgICAgICAgICBhdHRyaWJ1dGVzLm1heGxlbmd0aCA9IHRoaXMubWF4TGVuZ3RoXG4gICAgICAgICAgYXR0cmlidXRlcy5wbGFjZWhvbGRlciA9IHRoaXMucGxhY2Vob2xkZXJcbiAgICAgICAgICBhdHRyaWJ1dGVzLmF1dG9jb21wbGV0ZSA9IHRoaXMuYXV0b2NvbXBsZXRlXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF0dHJpYnV0ZXNcbiAgICB9LFxuXG4gICAgdmFsaWRhdGlvbnMoKSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9ucyA9IHsgLi4udGhpcy5nZXRWYWxpZGF0aW9ucygpIH1cbiAgICAgIGlmICh0aGlzLnJlcXVpcmVkKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLnJlcXVpcmVkID0gdHJ1ZVxuICAgICAgfVxuICAgICAgLy8gQWxsb3cgc2NoZW1hIHRvIG92ZXJyaWRlIGRlZmF1bHQgcnVsZXMgYW5kIGFkZCBhbnkgbmV3IG9uZXM6XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYS5ydWxlcyB8fCB7fSkpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkZWxldGUgdmFsaWRhdGlvbnNba2V5XVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkYXRpb25zW2tleV0gPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsaWRhdGlvbnNcbiAgICB9LFxuXG4gICAgc2hvd0NsZWFyQnV0dG9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xlYXJhYmxlICYmIHRoaXMudmFsdWUgIT0gbnVsbFxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gICAgdGhpcy5zZXR1cFNjaGVtYUZpZWxkcygpXG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICAvLyBQcmV2ZW50IHVubmVzdGVkIHR5cGUgY29tcG9uZW50cyBmcm9tIG92ZXJyaWRpbmcgcGFyZW50IGRhdGEgcGF0aHNcbiAgICAgIGlmICh0aGlzLm5lc3RlZCkge1xuICAgICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5fcmVnaXN0ZXJDb21wb25lbnQodGhpcywgYWRkKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBnZXRFdmVudHMoKSB7XG4gICAgICBjb25zdCB7IG9uRm9jdXMsIG9uQmx1ciwgb25JbnB1dCwgb25DaGFuZ2UgfSA9IHRoaXNcbiAgICAgIHJldHVybiB7IG9uRm9jdXMsIG9uQmx1ciwgb25JbnB1dCwgb25DaGFuZ2UgfVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBnZXRWYWxpZGF0aW9ucygpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGFzeW5jIHNjcm9sbEludG9WaWV3KCkge1xuICAgICAgYXdhaXQgdGhpcy5mb2N1c1NjaGVtYSgpXG4gICAgICB0aGlzLmdldEZvY3VzRWxlbWVudCgpPy5zY3JvbGxJbnRvVmlldz8uKHtcbiAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgICAgICBibG9jazogJ2NlbnRlcidcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuZ2V0Rm9jdXNFbGVtZW50KCk/LmZvY3VzPy4oKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBibHVyRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuZ2V0Rm9jdXNFbGVtZW50KCk/LmJsdXI/LigpXG4gICAgfSxcblxuICAgIGdldEZvY3VzRWxlbWVudCgpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBhc0FycmF5KHRoaXMuJHJlZnMuZWxlbWVudClbMF0gPz8gdGhpc1xuICAgICAgcmV0dXJuIGVsZW1lbnQuJGVsID8/IGVsZW1lbnRcbiAgICB9LFxuXG4gICAgYXN5bmMgZm9jdXNTY2hlbWEoKSB7XG4gICAgICAvLyBBbHNvIGZvY3VzIHRoaXMgY29tcG9uZW50J3Mgc2NoZW1hIGFuZCBwYW5lbCBpbiBjYXNlIGl0J3MgYSB0YWIuXG4gICAgICBhd2FpdCB0aGlzLnNjaGVtYUNvbXBvbmVudC5mb2N1cygpXG4gICAgICBhd2FpdCB0aGlzLnRhYkNvbXBvbmVudD8uZm9jdXMoKVxuICAgIH0sXG5cbiAgICBhc3luYyBmb2N1cygpIHtcbiAgICAgIGF3YWl0IHRoaXMuZm9jdXNTY2hlbWEoKVxuICAgICAgdGhpcy5zY3JvbGxJbnRvVmlldygpXG4gICAgICB0aGlzLmZvY3VzRWxlbWVudCgpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLmJsdXJFbGVtZW50KClcbiAgICB9LFxuXG4gICAgY2xlYXIoKSB7XG4gICAgICB0aGlzLnZhbHVlID0gbnVsbFxuICAgICAgdGhpcy5ibHVyKClcbiAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgIH0sXG5cbiAgICBvbkZvY3VzKCkge1xuICAgICAgdGhpcy5mb2N1c2VkID0gdHJ1ZVxuICAgICAgdGhpcy5tYXJrVG91Y2hlZCgpXG4gICAgICB0aGlzLmVtaXRFdmVudCgnZm9jdXMnKVxuICAgIH0sXG5cbiAgICBvbkJsdXIoKSB7XG4gICAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZVxuICAgICAgdGhpcy52YWxpZGF0ZSgpXG4gICAgICB0aGlzLmVtaXRFdmVudCgnYmx1cicpXG4gICAgfSxcblxuICAgIG9uSW5wdXQoKSB7XG4gICAgICB0aGlzLm1hcmtEaXJ0eSgpXG4gICAgICB0aGlzLmVtaXRFdmVudCgnaW5wdXQnKVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIHRoaXMubWFya0RpcnR5KClcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdjaGFuZ2UnLCB7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAvLyBQcmV2ZW50IGVuZGxlc3MgcGFyc2UgcmVjdXJzaW9uOlxuICAgICAgICAgIHZhbHVlOiB0aGlzLnBhcnNlZFZhbHVlICE9PSB1bmRlZmluZWQgPyB0aGlzLnBhcnNlZFZhbHVlIDogdGhpcy52YWx1ZVxuICAgICAgICB9LFxuICAgICAgICAvLyBQYXNzIGBzY2hlbWFDb21wb25lbnRgIGFzIHBhcmVudCwgc28gY2hhbmdlIGV2ZW50cyBjYW4gcHJvcGFnYXRlIHVwLlxuICAgICAgICBwYXJlbnQ6IHRoaXMuc2NoZW1hQ29tcG9uZW50XG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgdG9SYXcgfSBmcm9tICd2dWUnXG5cbmNvbnN0IHVpZE1hcCA9IG5ldyBXZWFrTWFwKClcblxuLy8gR2VuZXJhdGVkIGFuZCByZW1lbWJlcnMgdW5pcXVlIGlkcyBwZXIgcGFzc2VkIG9iamVjdCB1c2luZyBhIHdlYWsgbWFwLlxubGV0IHVpZCA9IDBcbmV4cG9ydCBmdW5jdGlvbiBnZXRVaWQoaXRlbSwgZ2V0SXRlbUlkID0gbnVsbCkge1xuICBjb25zdCByYXcgPSB0b1JhdyhpdGVtKVxuICBsZXQgaWQgPSB1aWRNYXAuZ2V0KHJhdylcbiAgaWYgKCFpZCAmJiBpdGVtKSB7XG4gICAgaWQgPSBnZXRJdGVtSWQ/LihpdGVtKSB8fCBgQCR7Kyt1aWR9YFxuICAgIHVpZE1hcC5zZXQocmF3LCBpZClcbiAgfVxuICByZXR1cm4gaWRcbn1cbiIsImltcG9ydCB7IGlzVGVtcG9yYXJ5SWQgfSBmcm9tICcuL2RhdGEuanMnXG5pbXBvcnQge1xuICBpc0ludGVnZXIsXG4gIGFzQXJyYXksXG4gIHBhcnNlRGF0YVBhdGgsXG4gIGdldFZhbHVlQXREYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgbmFub2lkIH0gZnJvbSAnbmFub2lkJ1xuXG4vLyBTY2hlbWFHcmFwaCBpcyBhIGNsYXNzIHRvIGNvbGxlY3Qgc2NoZW1hIGdyYXBoIG1ldGEgaW5mb3JtYXRpb24gaW4gb3JkZXIgdG9cbi8vIHByb2Nlc3Mgc291cmNlcyBhbmQgcmVsYXRpb25zIGZvciB0aGUgZ2l2ZW4gdGFyZ2V0cyAnc2VydmVyJyBhbmQgJ2NsaXBib2FyZCcsXG4vLyBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyB0YWJsZTpcbi8vXG4vLyB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0gfFxuLy8gfCBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VydmVyICAgIHwgY2xpcGJvYXJkIHxcbi8vIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLSB8IC0tLS0tLS0tLSB8XG4vLyB8IHR5cGU6ICdyZWxhdGlvbicsIGludGVybmFsOiBmYWxzZSAgICAgICAgICAgfCBrZWVwIGlkICAgfCBrZWVwIGlkICAgfFxuLy8gfCB0eXBlOiAncmVsYXRpb24nLCBpbnRlcm5hbDogdHJ1ZSAgICAgICAgICAgIHwga2VlcCBpZCAgIHwgcmVmLCAjcmVmIHxcbi8vIHwgdHlwZTogJ3JlbGF0aW9uJywgaW50ZXJuYWw6IHRydWUsIHRlbXBvcmFyeSB8IHJlZiwgI3JlZiB8IHJlZiwgI3JlZiB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiBmYWxzZSAgICAgICAgICAgICAgfCBrZWVwIGlkICAgfCByZW1vdmUgaWQgfFxuLy8gfCB0eXBlOiAnc291cmNlJywgcmVsYXRlZDogZmFsc2UsIHRlbXBvcmFyeSAgIHwgcmVmLCAjaWQgIHwgcmVtb3ZlIGlkIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IHRydWUgICAgICAgICAgICAgICB8IGtlZXAgaWQgICB8IHJlZiwgI2lkICB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiB0cnVlLCB0ZW1wb3JhcnkgICAgfCByZWYsICNpZCAgfCByZWYsICNpZCAgfFxuLy8gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tIHxcblxuZXhwb3J0IGNsYXNzIFNjaGVtYUdyYXBoIHtcbiAgZ3JhcGggPSB7fVxuICByZWZlcmVuY2VzID0ge31cblxuICBzZXQoZGF0YVBhdGgsIHNldHRpbmdzLCBkZWZhdWx0cykge1xuICAgIGRhdGFQYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgICBsZXQgc3ViR3JhcGggPSB0aGlzLmdyYXBoXG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIGRhdGFQYXRoKSB7XG4gICAgICBjb25zdCBrZXkgPSBpc0ludGVnZXIoK3BhcnQpID8gJyonIDogcGFydFxuICAgICAgc3ViR3JhcGggPSBzdWJHcmFwaFtrZXldID8/PSB7fVxuICAgIH1cbiAgICBzdWJHcmFwaC4kc2V0dGluZ3MgPSB7XG4gICAgICAuLi5kZWZhdWx0cywgLy8gU2VlIGBhZGRTb3VyY2UoZGF0YVBhdGgpYFxuICAgICAgLi4uc3ViR3JhcGguJHNldHRpbmdzLFxuICAgICAgLi4uc2V0dGluZ3NcbiAgICB9XG4gIH1cblxuICBhZGRTb3VyY2UoZGF0YVBhdGgsIHNjaGVtYSkge1xuICAgIC8vIE9ubHkgc2V0IGByZWxhdGVkOiBmYWxzZWAgdGhyb3VnaCB0aGUgZGVmYXVsdHMsIGFzIGBzZXRTb3VyY2VSZWxhdGVkKClgXG4gICAgLy8gbWF5IGJlIGNhbGxlZCBiZWZvcmUgYGFkZFNvdXJjZSgpYCwgZGVwZW5kaW5nIG9uIHRoZSBncmFwaCBzdHJ1Y3R1cmUuXG4gICAgdGhpcy5zZXQoZGF0YVBhdGgsIHsgdHlwZTogJ3NvdXJjZScsIHNjaGVtYSB9LCB7IHJlbGF0ZWQ6IGZhbHNlIH0pXG4gIH1cblxuICBzZXRTb3VyY2VSZWxhdGVkKGRhdGFQYXRoKSB7XG4gICAgdGhpcy5zZXQoZGF0YVBhdGgsIHtcbiAgICAgIHJlbGF0ZWQ6IHRydWUsXG4gICAgICByZWZlcmVuY2U6IHRoaXMuZ2V0UmVmZXJlbmNlUHJlZml4KGRhdGFQYXRoKVxuICAgIH0pXG4gIH1cblxuICBhZGRSZWxhdGlvbihkYXRhUGF0aCwgcmVsYXRlZERhdGFQYXRoLCBzY2hlbWEpIHtcbiAgICB0aGlzLnNldChkYXRhUGF0aCwge1xuICAgICAgdHlwZTogJ3JlbGF0aW9uJyxcbiAgICAgIHNjaGVtYSxcbiAgICAgIGludGVybmFsOiAhIXJlbGF0ZWREYXRhUGF0aCxcbiAgICAgIHJlZmVyZW5jZTogdGhpcy5nZXRSZWZlcmVuY2VQcmVmaXgocmVsYXRlZERhdGFQYXRoKVxuICAgIH0pXG4gIH1cblxuICBnZXRSZWZlcmVuY2VQcmVmaXgoZGF0YVBhdGgpIHtcbiAgICByZXR1cm4gZGF0YVBhdGhcbiAgICAgID8gKHRoaXMucmVmZXJlbmNlc1tkYXRhUGF0aF0gPz89IG5hbm9pZCg2KSlcbiAgICAgIDogbnVsbFxuICB9XG5cbiAgZmxhdHRlbigpIHtcbiAgICBjb25zdCBmbGF0dGVuID0gZ3JhcGggPT4ge1xuICAgICAgY29uc3QgZW50cmllcyA9IFtdXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHsgJHNldHRpbmdzLCAuLi5zdWJHcmFwaCB9XSBvZiBPYmplY3QuZW50cmllcyhncmFwaCkpIHtcbiAgICAgICAgaWYgKCRzZXR0aW5ncykge1xuICAgICAgICAgIGVudHJpZXMucHVzaChba2V5LCAkc2V0dGluZ3NdKVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgW3N1YktleSwgc2V0dGluZ3NdIG9mIGZsYXR0ZW4oc3ViR3JhcGgpKSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKFtgJHtrZXl9LyR7c3ViS2V5fWAsIHNldHRpbmdzXSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGVudHJpZXNcbiAgICB9XG5cbiAgICByZXR1cm4gZmxhdHRlbih0aGlzLmdyYXBoKVxuICB9XG5cbiAgcHJvY2Vzcyhzb3VyY2VTY2hlbWEsIGRhdGEsIHsgdGFyZ2V0IH0pIHtcbiAgICBjb25zdCBjbGlwYm9hcmQgPSB0YXJnZXQgPT09ICdjbGlwYm9hcmQnXG4gICAgaWYgKGNsaXBib2FyZCkge1xuICAgICAgZGVsZXRlIGRhdGFbc291cmNlU2NoZW1hLmlkS2V5IHx8ICdpZCddXG4gICAgfVxuICAgIGZvciAoY29uc3QgW2RhdGFQYXRoLCBzZXR0aW5nc10gb2YgdGhpcy5mbGF0dGVuKCkpIHtcbiAgICAgIGNvbnN0IHsgdHlwZSwgc2NoZW1hLCBpbnRlcm5hbCwgcmVsYXRlZCwgcmVmZXJlbmNlIH0gPSBzZXR0aW5nc1xuICAgICAgY29uc3Qgc291cmNlID0gdHlwZSA9PT0gJ3NvdXJjZSdcbiAgICAgIGNvbnN0IHJlbGF0aW9uID0gdHlwZSA9PT0gJ3JlbGF0aW9uJ1xuICAgICAgaWYgKHNvdXJjZSB8fCByZWxhdGlvbiAmJiBpbnRlcm5hbCkge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBnZXRWYWx1ZUF0RGF0YVBhdGgoZGF0YSwgZGF0YVBhdGgsICgpID0+IG51bGwpXG4gICAgICAgIGNvbnN0IHJlbW92ZUlkID0gY2xpcGJvYXJkICYmIHNvdXJjZSAmJiAhcmVsYXRlZFxuICAgICAgICBjb25zdCByZWZlcmVuY2VJZCA9IChcbiAgICAgICAgICBjbGlwYm9hcmQgJiYgKFxuICAgICAgICAgICAgcmVsYXRpb24gJiYgaW50ZXJuYWwgfHxcbiAgICAgICAgICAgIHNvdXJjZSAmJiByZWxhdGVkXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgYXNBcnJheSh2YWx1ZXMpLmZsYXQoKSkge1xuICAgICAgICAgIGNvbnN0IGlkS2V5ID0gKFxuICAgICAgICAgICAgc291cmNlICYmIHNjaGVtYS5pZEtleSB8fFxuICAgICAgICAgICAgcmVsYXRpb24gJiYgc2NoZW1hLnJlbGF0ZUJ5IHx8XG4gICAgICAgICAgICAnaWQnXG4gICAgICAgICAgKVxuICAgICAgICAgIGxldCBpZCA9IHZhbHVlPy5baWRLZXldXG4gICAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChyZW1vdmVJZCkge1xuICAgICAgICAgICAgICBkZWxldGUgdmFsdWVbaWRLZXldXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVmZXJlbmNlSWQgfHwgaXNUZW1wb3JhcnlJZChpZCkpIHtcbiAgICAgICAgICAgICAgaWYgKGlzVGVtcG9yYXJ5SWQoaWQpKSB7XG4gICAgICAgICAgICAgICAgaWQgPSBpZC5zbGljZSgxKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHJlZktleSA9IGNsaXBib2FyZFxuICAgICAgICAgICAgICAgID8gLy8gQ2xpcGJvYXJkIGp1c3QgbmVlZHMgdGVtcG9yYXJ5IGlkcyB1bmRlciB0aGUgYWN0dWFsIGBpZEtleWBcbiAgICAgICAgICAgICAgICAgIGlkS2V5XG4gICAgICAgICAgICAgICAgOiAvLyBTZXJ2ZXIgd2FudHMgT2JqZWN0aW9uLXN0eWxlICcjaWQnIC8gJyNyZWYnIHBhaXJzLlxuICAgICAgICAgICAgICAgICAgc291cmNlXG4gICAgICAgICAgICAgICAgICA/ICcjaWQnXG4gICAgICAgICAgICAgICAgICA6ICcjcmVmJ1xuICAgICAgICAgICAgICBjb25zdCByZXZWYWx1ZSA9IGNsaXBib2FyZFxuICAgICAgICAgICAgICAgID8gYEAke2lkfWBcbiAgICAgICAgICAgICAgICA6IC8vIEtlZXAgdGhlIGlkcyB1bmlxdWUgaW4gcmVmZXJlbmNlIGdyb3Vwcywgc2luY2UgdGhleVxuICAgICAgICAgICAgICAgICAgLy8gcmVmZXJlbmNlIGFjcm9zcyB0aGUgZnVsbCBncmFwaC5cbiAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZVxuICAgICAgICAgICAgICAgICAgPyBgJHtyZWZlcmVuY2V9LSR7aWR9YFxuICAgICAgICAgICAgICAgICAgOiBpZCAvLyBBIHRlbXBvcmFyeSBpZCB3aXRob3V0IGEgcmVsYXRlZCwganVzdCBwcmVzZXJ2ZSBpdC5cbiAgICAgICAgICAgICAgdmFsdWVbcmVmS2V5XSA9IHJldlZhbHVlXG4gICAgICAgICAgICAgIGlmIChyZWZLZXkgIT09IGlkS2V5KSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlW2lkS2V5XVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhXG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIGlzQXJyYXksXG4gIGlzT2JqZWN0LFxuICBpc1N0cmluZyxcbiAgaXNCb29sZWFuLFxuICBpc051bWJlcixcbiAgaXNGdW5jdGlvbixcbiAgaXNEYXRlLFxuICBpc1JlZ0V4cCxcbiAgYXNBcnJheVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5jb25zdCB0eXBlQ2hlY2tlcnMgPSB7XG4gIEJvb2xlYW46IGlzQm9vbGVhbixcbiAgTnVtYmVyOiBpc051bWJlcixcbiAgU3RyaW5nOiBpc1N0cmluZyxcbiAgRGF0ZTogaXNEYXRlLFxuICBBcnJheTogaXNBcnJheSxcbiAgT2JqZWN0OiBpc09iamVjdCxcbiAgUmVnRXhwOiBpc1JlZ0V4cCxcbiAgRnVuY3Rpb246IGlzRnVuY3Rpb25cbn1cblxuLy8gRGVjbGFyZSB0aGVzZSBzZXBhcmF0ZWx5IGZyb20gdGhlIGB0eXBlQ29udmVydGVyc2Agb2JqZWN0LCB0byBwcmV2ZW50XG4vLyBCYWJlbCBpc3N1ZXMgd2l0aCBgT2JqZWN0YCBvdmVycmlkaW5nIHRoZSBnbG9iYWwgYE9iamVjdGA6XG5jb25zdCB0b0Jvb2xlYW4gPSB2YWx1ZSA9PiAhIXZhbHVlXG5jb25zdCB0b051bWJlciA9IHZhbHVlID0+ICt2YWx1ZVxuY29uc3QgdG9TdHJpbmcgPSB2YWx1ZSA9PiBTdHJpbmcodmFsdWUpXG5cbmNvbnN0IHRvRGF0ZSA9IHZhbHVlID0+XG4gIGlzRGF0ZSh2YWx1ZSlcbiAgICA/IHZhbHVlXG4gICAgOiBuZXcgRGF0ZSh2YWx1ZSlcblxuY29uc3QgdG9BcnJheSA9IHZhbHVlID0+XG4gIGlzQXJyYXkodmFsdWUpXG4gICAgPyB2YWx1ZVxuICAgIDogaXNTdHJpbmcodmFsdWUpXG4gICAgICA/IHZhbHVlLnNwbGl0KCcsJylcbiAgICAgIDogYXNBcnJheSh2YWx1ZSlcblxuY29uc3QgdG9PYmplY3QgPSB2YWx1ZSA9PlxuICBpc09iamVjdCh2YWx1ZSlcbiAgICA/IHZhbHVlXG4gICAgOiAvLyBJZiBhIE9iamVjdCBpcyBleHBlY3RlZCBidXQgYSBCb29sZWFuIHByb3ZpZGUsIGNvbnZlcnQgdG8gYW4gZW1wdHlcbiAgICAgIC8vIG9iamVjdC4gVXNlZCBieSBgY3JlYXRhYmxlYCAmIGNvLCB0aGF0IGNhbiBiZSBib3RoLlxuICAgICAgdmFsdWUgPT09IHRydWVcbiAgICAgID8ge31cbiAgICAgIDogbnVsbFxuXG5jb25zdCB0b1JlZ0V4cCA9IHZhbHVlID0+XG4gIGlzUmVnRXhwKHZhbHVlKVxuICAgID8gdmFsdWVcbiAgICA6IG5ldyBSZWdFeHAodmFsdWUpXG5cbmNvbnN0IHR5cGVDb252ZXJ0ZXJzID0ge1xuICBCb29sZWFuOiB0b0Jvb2xlYW4sXG4gIE51bWJlcjogdG9OdW1iZXIsXG4gIFN0cmluZzogdG9TdHJpbmcsXG4gIERhdGU6IHRvRGF0ZSxcbiAgQXJyYXk6IHRvQXJyYXksXG4gIE9iamVjdDogdG9PYmplY3QsXG4gIFJlZ0V4cDogdG9SZWdFeHBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkge1xuICAvLyBTZWUgaWYgYW55IG9mIHRoZSBleHBlY3QgdHlwZXMgbWF0Y2gsIHJldHVybiBpbW1lZGlhdGVseSBpZiB0aGV5IGRvOlxuICBpZiAodHlwZXMgJiYgdmFsdWUgIT0gbnVsbCkge1xuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgaWYgKHR5cGVDaGVja2Vyc1t0eXBlLm5hbWVdPy4odmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFR5cGUodHlwZSwgdmFsdWUpIHtcbiAgY29uc3QgY29udmVydGVyID0gdHlwZSAmJiB0eXBlQ29udmVydGVyc1t0eXBlLm5hbWUgfHwgdHlwZV1cbiAgcmV0dXJuIGNvbnZlcnRlciA/IGNvbnZlcnRlcih2YWx1ZSkgOiB2YWx1ZVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IERpdG9NaXhpbiBmcm9tICcuLi9taXhpbnMvRGl0b01peGluLmpzJ1xuaW1wb3J0IFR5cGVNaXhpbiBmcm9tICcuLi9taXhpbnMvVHlwZU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0VWlkIH0gZnJvbSAnLi91aWQuanMnXG5pbXBvcnQgeyBTY2hlbWFHcmFwaCB9IGZyb20gJy4vU2NoZW1hR3JhcGguanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCwgaXNUZW1wb3JhcnlJZCB9IGZyb20gJy4vZGF0YS5qcydcbmltcG9ydCB7IGlzTWF0Y2hpbmdUeXBlLCBjb252ZXJ0VHlwZSB9IGZyb20gJy4vdHlwZS5qcydcbmltcG9ydCB7XG4gIGlzT2JqZWN0LFxuICBpc1N0cmluZyxcbiAgaXNBcnJheSxcbiAgaXNGdW5jdGlvbixcbiAgaXNQcm9taXNlLFxuICBpc01vZHVsZSxcbiAgYXNBcnJheSxcbiAgY2xvbmUsXG4gIGNhbWVsaXplLFxuICBhc3NpZ25EZWVwbHksXG4gIG1hcENvbmN1cnJlbnRseSxcbiAgZ2V0VmFsdWVBdERhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBtYXJrUmF3LCByZWFjdGl2ZSB9IGZyb20gJ3Z1ZSdcblxuY29uc3QgdHlwZUNvbXBvbmVudHMgPSB7fVxuY29uc3QgdW5rbm93blR5cGVSZXBvcnRlZCA9IHt9XG5jb25zdCBlbXB0eVNjaGVtYSA9IHt9XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclR5cGVDb21wb25lbnQodHlwZSwgY29tcG9uZW50KSB7XG4gIHR5cGVDb21wb25lbnRzW3R5cGVdID0gY29tcG9uZW50XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlQ29tcG9uZW50KHR5cGUsIGFsbG93TnVsbCA9IGZhbHNlKSB7XG4gIGNvbnN0IGNvbXBvbmVudCA9IHR5cGVDb21wb25lbnRzW3R5cGVdIHx8IG51bGxcbiAgaWYgKCFjb21wb25lbnQgJiYgIWFsbG93TnVsbCAmJiAhdW5rbm93blR5cGVSZXBvcnRlZFt0eXBlXSkge1xuICAgIC8vIFJlcG9ydCBlYWNoIG1pc3NpbmcgdHlwZSBvbmx5IG9uY2UsIHRvIGF2b2lkIGZsb29kaW5nIHRoZSBjb25zb2xlOlxuICAgIHVua25vd25UeXBlUmVwb3J0ZWRbdHlwZV0gPSB0cnVlXG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIERpdG8uanMgY29tcG9uZW50IHR5cGU6ICcke3R5cGV9J2ApXG4gIH1cbiAgcmV0dXJuIGNvbXBvbmVudFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXRlcmF0ZVNjaGVtYUNvbXBvbmVudHMoc2NoZW1hcywgY2FsbGJhY2spIHtcbiAgZm9yIChjb25zdCBzY2hlbWEgb2Ygc2NoZW1hcykge1xuICAgIGlmIChpc1NpbmdsZUNvbXBvbmVudFZpZXcoc2NoZW1hKSkge1xuICAgICAgY29uc3QgcmVzID0gY2FsbGJhY2soc2NoZW1hLmNvbXBvbmVudCwgc2NoZW1hLm5hbWUsIDApXG4gICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNTY2hlbWEoc2NoZW1hKSkge1xuICAgICAgZm9yIChjb25zdCBbbmFtZSwgY29tcG9uZW50XSBvZiBPYmplY3QuZW50cmllcyhzY2hlbWEuY29tcG9uZW50cyB8fCB7fSkpIHtcbiAgICAgICAgY29uc3QgcmVzID0gY2FsbGJhY2soY29tcG9uZW50LCBuYW1lLCAxKVxuICAgICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGl0ZXJhdGVOZXN0ZWRTY2hlbWFDb21wb25lbnRzKHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIHNjaGVtYVxuICAgID8gaXRlcmF0ZVNjaGVtYUNvbXBvbmVudHMoW3NjaGVtYSwgLi4uZ2V0VGFiU2NoZW1hcyhzY2hlbWEpXSwgY2FsbGJhY2spXG4gICAgOiB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmROZXN0ZWRTY2hlbWFDb21wb25lbnQoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gKFxuICAgIGl0ZXJhdGVOZXN0ZWRTY2hlbWFDb21wb25lbnRzKFxuICAgICAgc2NoZW1hLFxuICAgICAgY29tcG9uZW50ID0+IChjYWxsYmFjayhjb21wb25lbnQpID8gY29tcG9uZW50IDogdW5kZWZpbmVkKVxuICAgICkgPz8gbnVsbFxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb21lTmVzdGVkU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIChcbiAgICBpdGVyYXRlTmVzdGVkU2NoZW1hQ29tcG9uZW50cyhcbiAgICAgIHNjaGVtYSxcbiAgICAgIGNvbXBvbmVudCA9PiAoY2FsbGJhY2soY29tcG9uZW50KSA/IHRydWUgOiB1bmRlZmluZWQpXG4gICAgKSA/PyBmYWxzZVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVyeU5lc3RlZFNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiAoXG4gICAgaXRlcmF0ZU5lc3RlZFNjaGVtYUNvbXBvbmVudHMoXG4gICAgICBzY2hlbWEsXG4gICAgICBjb21wb25lbnQgPT4gKGNhbGxiYWNrKGNvbXBvbmVudCkgPyB1bmRlZmluZWQgOiBmYWxzZSlcbiAgICApID8/IHRydWVcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzTmVzdGVkU2NoZW1hQ29tcG9uZW50cyhzY2hlbWEpIHtcbiAgcmV0dXJuIHNvbWVOZXN0ZWRTY2hlbWFDb21wb25lbnQoc2NoZW1hLCAoKSA9PiB0cnVlKSA/PyBmYWxzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTY2hlbWEoc2NoZW1hKSB7XG4gIHJldHVybiBpc09iamVjdChzY2hlbWEpICYmIGlzU3RyaW5nKHNjaGVtYS50eXBlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNGb3JtKHNjaGVtYSkge1xuICByZXR1cm4gaXNTY2hlbWEoc2NoZW1hKSAmJiBzY2hlbWEudHlwZSA9PT0gJ2Zvcm0nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ZpZXcoc2NoZW1hKSB7XG4gIHJldHVybiBpc1NjaGVtYShzY2hlbWEpICYmIHNjaGVtYS50eXBlID09PSAndmlldydcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGFiKHNjaGVtYSkge1xuICByZXR1cm4gaXNTY2hlbWEoc2NoZW1hKSAmJiBzY2hlbWEudHlwZSA9PT0gJ3RhYidcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGFuZWwoc2NoZW1hKSB7XG4gIHJldHVybiBpc1NjaGVtYShzY2hlbWEpICYmIHNjaGVtYS50eXBlID09PSAncGFuZWwnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc01lbnUoc2NoZW1hKSB7XG4gIHJldHVybiBpc1NjaGVtYShzY2hlbWEpICYmIHNjaGVtYS50eXBlID09PSAnbWVudSdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjaGVtYUlkZW50aWZpZXIoc2NoZW1hKSB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShzY2hlbWEpXG59XG5cbmNvbnN0IHJlc29sdmVkU2NoZW1hcyA9IG5ldyBXZWFrTWFwKClcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlU2NoZW1hKHZhbHVlLCB1bndyYXBNb2R1bGUgPSBmYWxzZSkge1xuICBpZiAocmVzb2x2ZWRTY2hlbWFzLmhhcyh2YWx1ZSkpIHtcbiAgICByZXR1cm4gcmVzb2x2ZWRTY2hlbWFzLmdldCh2YWx1ZSlcbiAgfVxuICBsZXQgc2NoZW1hID0gdmFsdWVcbiAgaWYgKGlzRnVuY3Rpb24oc2NoZW1hKSkge1xuICAgIHNjaGVtYSA9IHNjaGVtYSgpXG4gIH1cbiAgaWYgKGlzUHJvbWlzZShzY2hlbWEpKSB7XG4gICAgc2NoZW1hID0gYXdhaXQgc2NoZW1hXG4gIH1cbiAgaWYgKGlzTW9kdWxlKHNjaGVtYSkpIHtcbiAgICAvLyBDb3B5IHRvIGNvbnZlcnQgZnJvbSBtb2R1bGUgdG8gb2JqZWN0OlxuICAgIHNjaGVtYSA9IHsgLi4uc2NoZW1hIH1cbiAgICAvLyBVbndyYXAgZGVmYXVsdCBvciBuYW1lZCBzY2hlbWFcbiAgICBpZiAoIXNjaGVtYS5uYW1lICYmICh1bndyYXBNb2R1bGUgfHwgc2NoZW1hLmRlZmF1bHQpKSB7XG4gICAgICAvLyBGaWx0ZXIgb3V0IGludGVybmFsIGtleSBhZGRlZCBieSB2aXRlIC8gdnVlIDMgcGx1Z2luIHdoZW4gY2hhbmdpbmdcbiAgICAgIC8vIGNvZGUgaW4gYSBkeW5hbWljYWxseSBpbXBvcnRlZCB2dWUgY29tcG9uZW50LCBzZWU6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdml0ZWpzL3ZpdGUtcGx1Z2luLXZ1ZS9ibG9iL2FiZGY1ZjRmMzJkMDJhZjY0MWU1ZjYwODcxYmRlMTQ1MzU1NjliMWUvcGFja2FnZXMvcGx1Z2luLXZ1ZS9zcmMvbWFpbi50cyNMMTMzXG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hKS5maWx0ZXIoa2V5ID0+IGtleSAhPT0gJ19yZXJlbmRlcl9vbmx5JylcbiAgICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBjb25zdCBuYW1lID0ga2V5c1swXVxuICAgICAgICBzY2hlbWEgPSBzY2hlbWFbbmFtZV1cbiAgICAgICAgaWYgKG5hbWUgIT09ICdkZWZhdWx0Jykge1xuICAgICAgICAgIHNjaGVtYS5uYW1lID0gbmFtZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJlc29sdmVkU2NoZW1hcy5zZXQodmFsdWUsIHNjaGVtYSlcbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYXMoXG4gIHVucmVzb2x2ZWRTY2hlbWFzLFxuICByZXNvbHZlSXRlbSA9IHJlc29sdmVTY2hlbWFcbikge1xuICBsZXQgc2NoZW1hcyA9IGlzRnVuY3Rpb24odW5yZXNvbHZlZFNjaGVtYXMpXG4gICAgPyB1bnJlc29sdmVkU2NoZW1hcygpXG4gICAgOiB1bnJlc29sdmVkU2NoZW1hc1xuICBzY2hlbWFzID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWFzLCBmYWxzZSlcbiAgaWYgKGlzQXJyYXkoc2NoZW1hcykpIHtcbiAgICAvLyBUcmFuc2xhdGUgYW4gYXJyYXkgb2YgZHluYW1pYyBpbXBvcnQsIGVhY2ggaW1wb3J0aW5nIG9uZSBuYW1lZCBzY2hlbWFcbiAgICAvLyBtb2R1bGUgdG8gYW4gb2JqZWN0IHdpdGggbmFtZWQgZW50cmllcy5cbiAgICBzY2hlbWFzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgYXdhaXQgbWFwQ29uY3VycmVudGx5KFxuICAgICAgICBzY2hlbWFzLFxuICAgICAgICBhc3luYyBpdGVtID0+IHtcbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICAgIHJldHVybiBbc2NoZW1hLm5hbWUsIHNjaGVtYV1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIClcbiAgfSBlbHNlIGlmIChpc09iamVjdChzY2hlbWFzKSkge1xuICAgIHNjaGVtYXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBhd2FpdCBtYXBDb25jdXJyZW50bHkoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHNjaGVtYXMpLFxuICAgICAgICBhc3luYyAoW2tleSwgaXRlbV0pID0+IHtcbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICAgIHJldHVybiBba2V5LCBzY2hlbWFdXG4gICAgICAgIH1cbiAgICAgIClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHNjaGVtYXNcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVWaWV3cyh1bnJlc29sdmVkVmlld3MpIHtcbiAgcmV0dXJuIHJlc29sdmVTY2hlbWFzKHVucmVzb2x2ZWRWaWV3cywgYXN5bmMgKHNjaGVtYSwgdW53cmFwTW9kdWxlKSA9PiB7XG4gICAgc2NoZW1hID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWEsIHVud3JhcE1vZHVsZSlcbiAgICBpZiAoIXNjaGVtYS5uYW1lICYmIGlzTWVudShzY2hlbWEpKSB7XG4gICAgICAvLyBHZW5lcmF0ZSBhIG5hbWUgZm9yIHN1Yi1tZW51cyBmcm9tIHRoZWlyIGxhYmVsIGlmIGl0J3MgbWlzc2luZy5cbiAgICAgIC8vIE5PVEU6IFRoaXMgaXMgbmV2ZXIgYWN0dWFsbHkgcmVmZXJlbmNlZCBmcm9tIGFueXdoZXJlLCBidXQgdGhleSBuZWVkXG4gICAgICAvLyBhIG5hbWUgYnkgd2hpY2ggdGhleSdyZSBzdG9yZWQgaW4gdGhlIHBhcmVudCBvYmplY3QuXG4gICAgICBzY2hlbWEubmFtZSA9IGNhbWVsaXplKHNjaGVtYS5sYWJlbClcbiAgICAgIHNjaGVtYS5pdGVtcyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKHNjaGVtYS5pdGVtcylcbiAgICB9XG4gICAgcmV0dXJuIHNjaGVtYVxuICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmxhdHRlblZpZXdzKHZpZXdzKSB7XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXModmlld3MpLnJlZHVjZShcbiAgICAgIChlbnRyaWVzLCBba2V5LCBzY2hlbWFdKSA9PiB7XG4gICAgICAgIGlmIChpc01lbnUoc2NoZW1hKSkge1xuICAgICAgICAgIGVudHJpZXMucHVzaCguLi5PYmplY3QuZW50cmllcyhzY2hlbWEuaXRlbXMpKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVudHJpZXMucHVzaChba2V5LCBzY2hlbWFdKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRyaWVzXG4gICAgICB9LFxuICAgICAgW11cbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWFDb21wb25lbnQoc2NoZW1hKSB7XG4gIC8vIFJlc29sdmVzIGFzeW5jIHNjaGVtYSBjb21wb25lbnRzIGFuZCBhZGRzIERpdG9NaXhpbiBhbmQgVHlwZU1peGluIHRvIHRoZW0uXG4gIGxldCB7IGNvbXBvbmVudCB9ID0gc2NoZW1hXG4gIGlmIChjb21wb25lbnQpIHtcbiAgICBjb21wb25lbnQgPSBhd2FpdCByZXNvbHZlU2NoZW1hKGNvbXBvbmVudCwgdHJ1ZSlcbiAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAvLyBQcmV2ZW50IHdhcm5pbmc6IFwiVnVlIHJlY2VpdmVkIGEgQ29tcG9uZW50IHdoaWNoIHdhcyBtYWRlIGEgcmVhY3RpdmVcbiAgICAgIC8vIG9iamVjdC4gVGhpcyBjYW4gbGVhZCB0byB1bm5lY2Vzc2FyeSBwZXJmb3JtYW5jZSBvdmVyaGVhZCwgYW5kIHNob3VsZFxuICAgICAgLy8gYmUgYXZvaWRlZCBieSBtYXJraW5nIHRoZSBjb21wb25lbnQgd2l0aCBgbWFya1Jhd2BcIjpcbiAgICAgIHNjaGVtYS5jb21wb25lbnQgPSBtYXJrUmF3KHtcbiAgICAgICAgLi4uY29tcG9uZW50LFxuICAgICAgICBtaXhpbnM6IFtEaXRvTWl4aW4sIFR5cGVNaXhpbiwgLi4uKGNvbXBvbmVudC5taXhpbnMgfHwgW10pXVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWFDb21wb25lbnRzKHNjaGVtYXMpIHtcbiAgLy8gYHNjaGVtYXNgIGFyZSBvZiB0aGUgc2FtZSBwb3NzaWJsZSBmb3JtcyBhcyBwYXNzZWQgdG8gYGdldE5hbWVkU2NoZW1hcygpYFxuICBhd2FpdCBtYXBDb25jdXJyZW50bHkoT2JqZWN0LnZhbHVlcyhzY2hlbWFzIHx8IHt9KSwgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudClcbn1cblxuY29uc3QgcHJvY2Vzc2VkU2NoZW1hRGVwdGhzID0gbmV3IFdlYWtNYXAoKVxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKFxuICBhcGksXG4gIHNjaGVtYSxcbiAgcm91dGVzID0gbnVsbCxcbiAgbGV2ZWwgPSAwLFxuICBtYXhEZXB0aCA9IDFcbikge1xuICBpZiAoc2NoZW1hKSB7XG4gICAgY29uc3QgZGVwdGggPSBwcm9jZXNzZWRTY2hlbWFEZXB0aHMuZ2V0KHNjaGVtYSkgPz8gMFxuICAgIGlmIChkZXB0aCA8IG1heERlcHRoKSB7XG4gICAgICBwcm9jZXNzZWRTY2hlbWFEZXB0aHMuc2V0KHNjaGVtYSwgZGVwdGggKyAxKVxuICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXVxuICAgICAgY29uc3QgcHJvY2VzcyA9IChjb21wb25lbnQsIG5hbWUsIHJlbGF0aXZlTGV2ZWwpID0+IHtcbiAgICAgICAgcHJvbWlzZXMucHVzaChcbiAgICAgICAgICBwcm9jZXNzU2NoZW1hQ29tcG9uZW50KFxuICAgICAgICAgICAgYXBpLFxuICAgICAgICAgICAgY29tcG9uZW50LFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHJvdXRlcyxcbiAgICAgICAgICAgIGxldmVsICsgcmVsYXRpdmVMZXZlbFxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBpdGVyYXRlTmVzdGVkU2NoZW1hQ29tcG9uZW50cyhzY2hlbWEsIHByb2Nlc3MpXG4gICAgICBpdGVyYXRlU2NoZW1hQ29tcG9uZW50cyhnZXRQYW5lbFNjaGVtYXMoc2NoZW1hKSwgcHJvY2VzcylcblxuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYUNvbXBvbmVudChcbiAgYXBpLFxuICBzY2hlbWEsXG4gIG5hbWUsXG4gIHJvdXRlcyA9IG51bGwsXG4gIGxldmVsID0gMFxuKSB7XG4gIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIHNjaGVtYSlcblxuICByZXR1cm4gUHJvbWlzZS5hbGwoW1xuICAgIC8vIEFsc28gcHJvY2VzcyBuZXN0ZWQgcGFuZWwgc2NoZW1hcy5cbiAgICBtYXBDb25jdXJyZW50bHkoXG4gICAgICBnZXRQYW5lbFNjaGVtYXMoc2NoZW1hKSxcbiAgICAgIHBhbmVsID0+IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKGFwaSwgcGFuZWwsIHJvdXRlcywgbGV2ZWwpXG4gICAgKSxcbiAgICAvLyBEZWxlZ2F0ZSBzY2hlbWEgcHJvY2Vzc2luZyB0byB0aGUgYWN0dWFsIHR5cGUgY29tcG9uZW50cy5cbiAgICBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5wcm9jZXNzU2NoZW1hPy4oXG4gICAgICBhcGksXG4gICAgICBzY2hlbWEsXG4gICAgICBuYW1lLFxuICAgICAgcm91dGVzLFxuICAgICAgbGV2ZWxcbiAgICApXG4gIF0pXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzVmlldyhjb21wb25lbnQsIGFwaSwgc2NoZW1hLCBuYW1lLCBmdWxsUGF0aCA9ICcnKSB7XG4gIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIHNjaGVtYSlcbiAgcHJvY2Vzc1JvdXRlU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lLCBmdWxsUGF0aClcbiAgbGV0IGNoaWxkcmVuID0gW11cbiAgaWYgKGlzVmlldyhzY2hlbWEpKSB7XG4gICAgYXdhaXQgcHJvY2Vzc05lc3RlZFNjaGVtYXMoYXBpLCBzY2hlbWEpXG4gICAgYXdhaXQgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBzY2hlbWEsIGNoaWxkcmVuKVxuICB9IGVsc2UgaWYgKGlzTWVudShzY2hlbWEpKSB7XG4gICAgY2hpbGRyZW4gPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIE9iamVjdC5lbnRyaWVzKHNjaGVtYS5pdGVtcykubWFwKGFzeW5jIChbbmFtZSwgaXRlbV0pID0+XG4gICAgICAgIHByb2Nlc3NWaWV3KGNvbXBvbmVudCwgYXBpLCBpdGVtLCBuYW1lLCBzY2hlbWEuZnVsbFBhdGgpXG4gICAgICApXG4gICAgKVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB2aWV3IHNjaGVtYTogJyR7Z2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpfSdgKVxuICB9XG4gIHJldHVybiB7XG4gICAgcGF0aDogc2NoZW1hLmZ1bGxQYXRoLFxuICAgIGNoaWxkcmVuLFxuICAgIGNvbXBvbmVudCxcbiAgICBtZXRhOiB7XG4gICAgICBhcGksXG4gICAgICBzY2hlbWFcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIHNjaGVtYSkge1xuICBsZXQgZGVmYXVsdHMgPSBhcGkuZGVmYXVsdHNbc2NoZW1hLnR5cGVdXG4gIGlmIChkZWZhdWx0cykge1xuICAgIGlmIChpc0Z1bmN0aW9uKGRlZmF1bHRzKSkge1xuICAgICAgZGVmYXVsdHMgPSBkZWZhdWx0cyhzY2hlbWEpXG4gICAgfVxuICAgIGlmIChpc09iamVjdChkZWZhdWx0cykpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRlZmF1bHRzKSkge1xuICAgICAgICBpZiAoc2NoZW1hW2tleV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNjaGVtYVtrZXldID0gdmFsdWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzY2hlbWFba2V5XSA9IGFzc2lnbkRlZXBseShzY2hlbWFba2V5XSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NOZXN0ZWRTY2hlbWFEZWZhdWx0cyhhcGksIHNjaGVtYSkge1xuICAvLyBQcm9jZXNzIGRlZmF1bHRzIGZvciBuZXN0ZWQgc2NoZW1hcy4gTm90ZSB0aGF0IHRoaXMgaXMgYWxzbyBkb25lIHdoZW5cbiAgLy8gY2FsbGluZyBgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoKWAsIGJ1dCB0aGF0IGZ1bmN0aW9uIGlzIGFzeW5jLCBhbmQgd2VcbiAgLy8gbmVlZCBhIHN5bmMgdmVyc2lvbiB0aGF0IG9ubHkgaGFuZGxlcyB0aGUgZGVmYXVsdHMgZm9yIGZpbHRlcnMsIHNlZVxuICAvLyBgZ2V0RmlsdGVyc1BhbmVsKClgLlxuICBpdGVyYXRlTmVzdGVkU2NoZW1hQ29tcG9uZW50cyhzY2hlbWEsIGNvbXBvbmVudCA9PiB7XG4gICAgcHJvY2Vzc1NjaGVtYURlZmF1bHRzKGFwaSwgY29tcG9uZW50KVxuICAgIGNvbnN0IGZvcm1zID0gZ2V0Rm9ybVNjaGVtYXMoY29tcG9uZW50KVxuICAgIGZvciAoY29uc3QgZm9ybSBvZiBPYmplY3QudmFsdWVzKGZvcm1zKSkge1xuICAgICAgcHJvY2Vzc05lc3RlZFNjaGVtYURlZmF1bHRzKGFwaSwgZm9ybSlcbiAgICB9XG4gIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzUm91dGVTY2hlbWEoYXBpLCBzY2hlbWEsIG5hbWUsIGZ1bGxQYXRoID0gbnVsbCkge1xuICAvLyBVc2VkIGZvciB2aWV3IGFuZCBzb3VyY2Ugc2NoZW1hcywgc2VlIFNvdXJjZU1peGluLlxuICBzY2hlbWEubmFtZSA/Pz0gbmFtZVxuICBzY2hlbWEucGF0aCA/Pz0gYXBpLm5vcm1hbGl6ZVBhdGgobmFtZSlcbiAgaWYgKGZ1bGxQYXRoICE9PSBudWxsKSB7XG4gICAgc2NoZW1hLmZ1bGxQYXRoID0gYCR7ZnVsbFBhdGh9LyR7c2NoZW1hLnBhdGh9YFxuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzRm9ybXMoYXBpLCBzY2hlbWEsIGxldmVsKSB7XG4gIGNvbnN0IHJvdXRlcyA9IFtdXG4gIC8vIEZpcnN0IHJlc29sdmUgdGhlIGZvcm1zIGFuZCBzdG9yZSB0aGUgcmVzdWx0cyBiYWNrIG9uIHRoZSBzY2hlbWEuXG4gIGNvbnN0IHsgZm9ybSwgZm9ybXMsIGNvbXBvbmVudHMsIG1heERlcHRoID0gMSB9ID0gc2NoZW1hXG4gIGlmIChmb3Jtcykge1xuICAgIHNjaGVtYS5mb3JtcyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKGZvcm1zLCBmb3JtID0+XG4gICAgICBwcm9jZXNzRm9ybShhcGksIGZvcm0sIHJvdXRlcywgbGV2ZWwsIG1heERlcHRoKVxuICAgIClcbiAgfSBlbHNlIGlmIChmb3JtKSB7XG4gICAgc2NoZW1hLmZvcm0gPSBhd2FpdCBwcm9jZXNzRm9ybShhcGksIGZvcm0sIHJvdXRlcywgbGV2ZWwsIG1heERlcHRoKVxuICB9IGVsc2UgaWYgKGlzT2JqZWN0KGNvbXBvbmVudHMpKSB7XG4gICAgLy8gTk9URTogUHJvY2Vzc2luZyBmb3JtcyBpbiBjb21wdXRlZCBjb21wb25lbnRzIGlzIG5vdCBzdXBwb3J0ZWQsIHNpbmNlIGl0XG4gICAgLy8gb25seSBjYW4gYmUgY29tcHV0ZWQgaW4gY29uanVuY3Rpb24gd2l0aCBhY3R1YWwgZGF0YS5cbiAgICBjb25zdCBmb3JtID0ge1xuICAgICAgdHlwZTogJ2Zvcm0nLFxuICAgICAgY29tcG9uZW50c1xuICAgIH1cbiAgICBhd2FpdCBwcm9jZXNzRm9ybShhcGksIGZvcm0sIHJvdXRlcywgbGV2ZWwsIG1heERlcHRoKVxuICB9XG4gIHJldHVybiByb3V0ZXNcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NGb3JtKFxuICBhcGksXG4gIHNjaGVtYSxcbiAgcm91dGVzID0gbnVsbCxcbiAgbGV2ZWwgPSAwLFxuICBtYXhEZXB0aCA9IDFcbikge1xuICBzY2hlbWEgPSBhd2FpdCByZXNvbHZlU2NoZW1hKHNjaGVtYSwgdHJ1ZSlcbiAgaWYgKCFpc0Zvcm0oc2NoZW1hKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBmb3JtIHNjaGVtYTogJyR7Z2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpfSdgKVxuICB9XG4gIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIHNjaGVtYSlcbiAgYXdhaXQgcHJvY2Vzc05lc3RlZFNjaGVtYXMoYXBpLCBzY2hlbWEpXG4gIGF3YWl0IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKGFwaSwgc2NoZW1hLCByb3V0ZXMsIGxldmVsLCBtYXhEZXB0aClcbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1RhYihhcGksIHNjaGVtYSkge1xuICBzY2hlbWEgPSBhd2FpdCByZXNvbHZlU2NoZW1hKHNjaGVtYSwgdHJ1ZSlcbiAgaWYgKCFpc1RhYihzY2hlbWEpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRhYiBzY2hlbWE6ICcke2dldFNjaGVtYUlkZW50aWZpZXIoc2NoZW1hKX0nYClcbiAgfVxuICBwcm9jZXNzU2NoZW1hRGVmYXVsdHMoYXBpLCBzY2hlbWEpXG4gIHJldHVybiBzY2hlbWFcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NQYW5lbChhcGksIHNjaGVtYSkge1xuICBzY2hlbWEgPSBhd2FpdCByZXNvbHZlU2NoZW1hKHNjaGVtYSwgdHJ1ZSlcbiAgaWYgKCFpc1BhbmVsKHNjaGVtYSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGFuZWwgc2NoZW1hOiAnJHtnZXRTY2hlbWFJZGVudGlmaWVyKHNjaGVtYSl9J2ApXG4gIH1cbiAgcHJvY2Vzc1NjaGVtYURlZmF1bHRzKGFwaSwgc2NoZW1hKVxuICByZXR1cm4gc2NoZW1hXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzTmVzdGVkU2NoZW1hcyhhcGksIHNjaGVtYSkge1xuICBjb25zdCB7IHRhYnMsIHBhbmVscyB9ID0gc2NoZW1hXG4gIGlmICh0YWJzKSB7XG4gICAgc2NoZW1hLnRhYnMgPSBhd2FpdCByZXNvbHZlU2NoZW1hcyhcbiAgICAgIHRhYnMsXG4gICAgICB0YWIgPT4gcHJvY2Vzc1RhYihhcGksIHRhYilcbiAgICApXG4gIH1cbiAgaWYgKHBhbmVscykge1xuICAgIHNjaGVtYS5wYW5lbHMgPSBhd2FpdCByZXNvbHZlU2NoZW1hcyhcbiAgICAgIHBhbmVscyxcbiAgICAgIHBhbmVsID0+IHByb2Nlc3NQYW5lbChhcGksIHBhbmVsKVxuICAgIClcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzRm9ybVNjaGVtYShzY2hlbWEpIHtcbiAgLy8gU3VwcG9ydCBib3RoIHNpbmdsZSBmb3JtIGFuZCBtdWx0aXBsZSBmb3JtcyBub3RhdGlvbiwgYXMgd2VsbCBhcyBpbmxpbmVkXG4gIC8vIGNvbXBvbmVudHMuXG4gIHJldHVybiAoXG4gICAgaXNTY2hlbWEoc2NoZW1hKSAmJlxuICAgIGlzT2JqZWN0KHNjaGVtYS5mb3JtIHx8IHNjaGVtYS5mb3JtcyB8fCBzY2hlbWEuY29tcG9uZW50cylcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzTXVsdGlwbGVGb3JtU2NoZW1hcyhzY2hlbWEpIHtcbiAgcmV0dXJuIChcbiAgICBpc1NjaGVtYShzY2hlbWEpICYmXG4gICAgT2JqZWN0LmtleXMoc2NoZW1hPy5mb3JtcyB8fCB7fSkubGVuZ3RoID4gMVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NpbmdsZUNvbXBvbmVudFZpZXcoc2NoZW1hKSB7XG4gIHJldHVybiAoXG4gICAgaXNWaWV3KHNjaGVtYSkgJiZcbiAgICBpc09iamVjdChzY2hlbWEuY29tcG9uZW50KVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3Rm9ybVNjaGVtYShzY2hlbWEsIGNvbnRleHQpIHtcbiAgY29uc3QgeyB2aWV3IH0gPSBzY2hlbWFcbiAgY29uc3Qgdmlld1NjaGVtYSA9IHZpZXcgJiYgY29udGV4dC5mbGF0dGVuZWRWaWV3c1t2aWV3XVxuICByZXR1cm4gdmlld1NjaGVtYVxuICAgID8gLy8gTk9URTogVmlld3MgY2FuIGhhdmUgdGFicywgaW4gd2hpY2ggY2FzZSB0aGUgdmlldyBjb21wb25lbnQgaXMgbmVzdGVkXG4gICAgICAvLyBpbiBvbmUgb2YgdGhlIHRhYnMsIGdvIGZpbmQgaXQuXG4gICAgICBmaW5kTmVzdGVkU2NoZW1hQ29tcG9uZW50KHZpZXdTY2hlbWEsIGhhc0Zvcm1TY2hlbWEpIHx8IG51bGxcbiAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdTY2hlbWEoc2NoZW1hLCBjb250ZXh0KSB7XG4gIHJldHVybiBnZXRWaWV3Rm9ybVNjaGVtYShzY2hlbWEsIGNvbnRleHQpXG4gICAgPyBjb250ZXh0LmZsYXR0ZW5lZFZpZXdzW3NjaGVtYS52aWV3XVxuICAgIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzVmlld1NjaGVtYShzY2hlbWEsIGNvbnRleHQpIHtcbiAgcmV0dXJuICEhZ2V0Vmlld1NjaGVtYShzY2hlbWEsIGNvbnRleHQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3RWRpdFBhdGgoc2NoZW1hLCBpZCwgY29udGV4dCkge1xuICBjb25zdCB2aWV3ID0gZ2V0Vmlld1NjaGVtYShzY2hlbWEsIGNvbnRleHQpXG4gIGlmICh2aWV3KSB7XG4gICAgY29uc3QgcGF0aCA9IGlzU2luZ2xlQ29tcG9uZW50Vmlldyh2aWV3KVxuICAgICAgPyB2aWV3LmZ1bGxQYXRoXG4gICAgICA6IGAke3ZpZXcuZnVsbFBhdGh9LyR7dmlldy5wYXRofWBcbiAgICByZXR1cm4gYCR7cGF0aH0vJHtpZH1gXG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1TY2hlbWFzKHNjaGVtYSwgY29udGV4dCwgbW9kaWZ5Rm9ybSkge1xuICBjb25zdCB2aWV3U2NoZW1hID0gY29udGV4dCAmJiBnZXRWaWV3Rm9ybVNjaGVtYShzY2hlbWEsIGNvbnRleHQpXG4gIGlmICh2aWV3U2NoZW1hKSB7XG4gICAgc2NoZW1hID0gdmlld1NjaGVtYVxuICB9IGVsc2UgaWYgKHNjaGVtYS52aWV3KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHZpZXc6ICcke3NjaGVtYS52aWV3fSdgKVxuICB9XG5cbiAgbGV0IHsgZm9ybSwgZm9ybXMgfSA9IHNjaGVtYVxuICBpZiAoIWZvcm0gJiYgIWZvcm1zKSB7XG4gICAgY29uc3QgeyBuYW1lLCBjb21wYWN0LCBjbGlwYm9hcmQsIHRhYnMsIGNvbXBvbmVudHMgfSA9IHNjaGVtYVxuICAgIGlmIChjb21wb25lbnRzIHx8IHRhYnMpIHtcbiAgICAgIC8vIENvbnZlcnQgaW5saW5lZCBmb3JtcyB0byBzdGFuZC1hbG9uZSBmb3Jtcywgc3VwcG9ydGluZyBgbmFtZWAsXG4gICAgICAvLyBgY29tcGFjdGAsIGBjbGlwYm9hcmRgLCBgdGFic2AgYW5kIGBjb21wb25lbnRzYCBzZXR0aW5ncy5cbiAgICAgIGZvcm0gPSB7IHR5cGU6ICdmb3JtJywgbmFtZSwgY29tcGFjdCwgY2xpcGJvYXJkLCB0YWJzLCBjb21wb25lbnRzIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gYGZvcm1zYCwgYGZvcm1gIG9yIGBjb21wb25lbnRzYCwgcmV0dXJuIGFuZCBlbXB0eSBgZm9ybXNgIG9iamVjdC5cbiAgICAgIHJldHVybiB7fVxuICAgIH1cbiAgfVxuICBmb3JtcyB8fD0geyBkZWZhdWx0OiBmb3JtIH1cbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhmb3JtcykubWFwKChbdHlwZSwgZm9ybV0pID0+IHtcbiAgICAgIC8vIFN1cHBvcnQgYHNjaGVtYS5jb21wb25lbnRzYCBjYWxsYmFja3MgdG8gY3JlYXRlIGNvbXBvbmVudHMgb24gdGhlIGZseS5cbiAgICAgIGlmIChjb250ZXh0ICYmIGlzRnVuY3Rpb24oZm9ybS5jb21wb25lbnRzKSkge1xuICAgICAgICAvLyBNYWtlIHRoZSBmb3JtIHNjaGVtYSByZWFjdGl2ZSBzaW5jZSBgcHJvY2Vzc0Zvcm0oKWAgaXMgYXN5bmMsIHNvIHRoYXRcbiAgICAgICAgLy8gdGhlIHNldHRpbmcgb2YgZGVmYXVsdHMgd2lsbCBiZSBwaWNrZWQgdXAgYnkgZG93bnN0cmVhbSBjb2RlLlxuICAgICAgICBmb3JtID0gcmVhY3RpdmUoe1xuICAgICAgICAgIC4uLmZvcm0sXG4gICAgICAgICAgY29tcG9uZW50czogZm9ybS5jb21wb25lbnRzKGNvbnRleHQpXG4gICAgICAgIH0pXG4gICAgICAgIC8vIFByb2Nlc3MgdGhlIGZvcm0gYWdhaW4sIG5vdyB0aGF0IHdlIGhhdmUgdGhlIGNvbXBvbmVudHMuXG4gICAgICAgIHByb2Nlc3NGb3JtKGNvbnRleHQuYXBpLCBmb3JtKS5jYXRjaChjb25zb2xlLmVycm9yKVxuICAgICAgfVxuICAgICAgcmV0dXJuIFt0eXBlLCBtb2RpZnlGb3JtPy4oZm9ybSkgPz8gZm9ybV1cbiAgICB9KVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3Jtcyhmb3JtcywgaXRlbSkge1xuICByZXR1cm4gZm9ybXNbaXRlbT8udHlwZV0gfHwgZm9ybXMuZGVmYXVsdCB8fCBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpIHtcbiAgcmV0dXJuIChcbiAgICBnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3JtcyhnZXRGb3JtU2NoZW1hcyhzY2hlbWEsIGNvbnRleHQpLCBpdGVtKSB8fFxuICAgIC8vIEFsd2F5cyByZXR1cm4gYSBzY2hlbWEgb2JqZWN0IHNvIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZm9yIGl0LlxuICAgIGVtcHR5U2NoZW1hXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHlTY2hlbWEoc2NoZW1hKSB7XG4gIHJldHVybiBzY2hlbWEgPT09IGVtcHR5U2NoZW1hXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbXBhY3Qoc2NoZW1hKSB7XG4gIHJldHVybiAhIXNjaGVtYS5jb21wYWN0XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0lubGluZWQoc2NoZW1hKSB7XG4gIHJldHVybiAhIShzY2hlbWEuaW5saW5lZCB8fCBzY2hlbWEuY29tcG9uZW50cylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTmVzdGVkKHNjaGVtYSkge1xuICByZXR1cm4gISEoc2NoZW1hLm5lc3RlZCB8fCBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5kZWZhdWx0TmVzdGVkID09PSB0cnVlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzTGFiZWwoc2NoZW1hLCBnZW5lcmF0ZUxhYmVscykge1xuICBjb25zdCB7IGxhYmVsIH0gPSBzY2hlbWFcbiAgcmV0dXJuIChcbiAgICBsYWJlbCAhPT0gZmFsc2UgJiYgKFxuICAgICAgISFsYWJlbCB8fFxuICAgICAgZ2VuZXJhdGVMYWJlbHMgJiYgZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uZ2VuZXJhdGVMYWJlbFxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gb21pdFNwYWNpbmcoc2NoZW1hKSB7XG4gIHJldHVybiAhIWdldFR5cGVPcHRpb25zKHNjaGVtYSk/Lm9taXRTcGFjaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2hlbWFWYWx1ZShcbiAga2V5T3JEYXRhUGF0aCxcbiAgeyB0eXBlLCBzY2hlbWEsIGNhbGxiYWNrID0gdHJ1ZSwgZGVmYXVsdDogZGVmLCBjb250ZXh0IH0gPSB7fVxuKSB7XG4gIGNvbnN0IHR5cGVzID0gdHlwZSAmJiBhc0FycmF5KHR5cGUpXG4gIC8vIEZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBkYXRhLXBhdGhzIGluIGBrZXlPckRhdGFQYXRoYCBjYW4gb25seSBiZVxuICAvLyBwcm92aWRlZCBpbiBpbiBhcnJheSBmb3JtYXQgaGVyZTpcbiAgbGV0IHZhbHVlID0gc2NoZW1hXG4gICAgPyBpc0FycmF5KGtleU9yRGF0YVBhdGgpXG4gICAgICA/IGdldFZhbHVlQXREYXRhUGF0aChzY2hlbWEsIGtleU9yRGF0YVBhdGgsICgpID0+IHVuZGVmaW5lZClcbiAgICAgIDogc2NoZW1hW2tleU9yRGF0YVBhdGhdXG4gICAgOiB1bmRlZmluZWRcblxuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBkZWYgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChjYWxsYmFjayAmJiBpc0Z1bmN0aW9uKGRlZikgJiYgIWlzTWF0Y2hpbmdUeXBlKHR5cGVzLCBkZWYpKSB7XG4gICAgICAvLyBTdXBwb3J0IGBkZWZhdWx0KClgIGZ1bmN0aW9ucyBmb3IgYW55IHR5cGUgZXhjZXB0IGBGdW5jdGlvbmA6XG4gICAgICBkZWYgPSBkZWYoY29udGV4dClcbiAgICB9XG4gICAgcmV0dXJuIGRlZlxuICB9XG5cbiAgaWYgKGlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuICAvLyBBbnkgc2NoZW1hIHZhbHVlIGhhbmRsZWQgdGhyb3VnaCBgZ2V0U2NoZW1hVmFsdWUoKWAgY2FuIHByb3ZpZGVcbiAgLy8gYSBmdW5jdGlvbiB0aGF0J3MgcmVzb2x2ZWQgd2hlbiB0aGUgdmFsdWUgaXMgZXZhbHVhdGVkOlxuICBpZiAoY2FsbGJhY2sgJiYgaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICB2YWx1ZSA9IHZhbHVlKGNvbnRleHQpXG4gIH1cbiAgLy8gTm93IGZpbmFsbHkgc2VlIGlmIHdlIGNhbiBjb252ZXJ0IHRvIHRoZSBleHBlY3QgdHlwZXMuXG4gIGlmICh0eXBlcyAmJiB2YWx1ZSAhPSBudWxsICYmICFpc01hdGNoaW5nVHlwZSh0eXBlcywgdmFsdWUpKSB7XG4gICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICBjb25zdCBjb252ZXJ0ZWQgPSBjb252ZXJ0VHlwZSh0eXBlLCB2YWx1ZSlcbiAgICAgIGlmIChjb252ZXJ0ZWQgIT09IHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBjb252ZXJ0ZWRcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRSZW5kZXJTY2hlbWEoc2NoZW1hLCBjb250ZXh0KSB7XG4gIHJldHVybiAoXG4gICAgZ2V0U2NoZW1hVmFsdWUoJ2lmJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIHNjaGVtYSxcbiAgICAgIGNvbnRleHQsXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSkgJiYgKFxuICAgICAgIWhhc05lc3RlZFNjaGVtYUNvbXBvbmVudHMoc2NoZW1hKSB8fFxuICAgICAgc29tZU5lc3RlZFNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNvbXBvbmVudCA9PlxuICAgICAgICBzaG91bGRSZW5kZXJTY2hlbWEoY29tcG9uZW50LCBjb250ZXh0KVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5mdW5jdGlvbiBnZXRDb250ZXh0KGNvbnRleHQpIHtcbiAgcmV0dXJuIGlzRnVuY3Rpb24oY29udGV4dCkgPyBjb250ZXh0KCkgOiBjb250ZXh0XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0VmFsdWUoc2NoZW1hLCBjb250ZXh0KSB7XG4gIC8vIFN1cHBvcnQgZGVmYXVsdCB2YWx1ZXMgYm90aCBvbiBzY2hlbWEgYW5kIG9uIGNvbXBvbmVudCBsZXZlbC5cbiAgLy8gTk9URTogQXQgdGhlIHRpbWUgb2YgY3JlYXRpb24sIGNvbXBvbmVudHMgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQsIChlLmcuIGlmXG4gIC8vIGVudHJpZXMgYXJlIGNyZWF0ZWQgdGhyb3VnaCBuZXN0ZWQgZm9ybXMsIHRoZSBwYXJlbnQgZm9ybSBpc24ndCBtb3VudGVkKSBzb1xuICAvLyB3ZSBjYW4ndCB1c2UgYGRhdGFQYXRoYCB0byBnZXQgdG8gY29tcG9uZW50cywgYW5kIHRoZSBgZGVmYXVsdFZhbHVlYCBmcm9tXG4gIC8vIHRoZXJlLiBUaGF0J3Mgd2h5IGBkZWZhdWx0VmFsdWVgIGlzIGRlZmluZWQgc3RhdGljYWxseSBpbiB0aGUgY29tcG9uZW50czpcbiAgY29uc3QgZGVmYXVsdFZhbHVlID1cbiAgICBzY2hlbWEuZGVmYXVsdCAhPT0gdW5kZWZpbmVkXG4gICAgICA/IHNjaGVtYS5kZWZhdWx0XG4gICAgICA6IGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LmRlZmF1bHRWYWx1ZVxuICByZXR1cm4gaXNGdW5jdGlvbihkZWZhdWx0VmFsdWUpXG4gICAgPyBkZWZhdWx0VmFsdWUoZ2V0Q29udGV4dChjb250ZXh0KSlcbiAgICA6IGNsb25lKGRlZmF1bHRWYWx1ZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZEV4Y2x1ZGVWYWx1ZShzY2hlbWEsIGNvbnRleHQpIHtcbiAgY29uc3QgZXhjbHVkZVZhbHVlID1cbiAgICBzY2hlbWEuZXhjbHVkZSAhPT0gdW5kZWZpbmVkXG4gICAgICA/IHNjaGVtYS5leGNsdWRlXG4gICAgICA6IGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LmV4Y2x1ZGVWYWx1ZVxuICByZXR1cm4gaXNGdW5jdGlvbihleGNsdWRlVmFsdWUpXG4gICAgPyBleGNsdWRlVmFsdWUoZ2V0Q29udGV4dChjb250ZXh0KSlcbiAgICA6ICEhZXhjbHVkZVZhbHVlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRJZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hLCBjb250ZXh0KSB7XG4gIHJldHVybiAhIWdldFR5cGVPcHRpb25zKHNjaGVtYSk/Lmlnbm9yZU1pc3NpbmdWYWx1ZT8uKGdldENvbnRleHQoY29udGV4dCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXREZWZhdWx0VmFsdWVzKHNjaGVtYSwgZGF0YSA9IHt9LCBjb21wb25lbnQpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHsgY29tcG9uZW50LCByb290RGF0YTogZGF0YSB9XG5cbiAgY29uc3QgcHJvY2Vzc0JlZm9yZSA9IChzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoKSA9PiB7XG4gICAgY29uc3QgY29udGV4dCA9ICgpID0+XG4gICAgICBuZXcgRGl0b0NvbnRleHQoY29tcG9uZW50LCB7XG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgIHJvb3REYXRhOiBvcHRpb25zLnJvb3REYXRhXG4gICAgICB9KVxuICAgIGlmICghKG5hbWUgaW4gZGF0YSkgJiYgIXNob3VsZElnbm9yZU1pc3NpbmdWYWx1ZShzY2hlbWEsIGNvbnRleHQpKSB7XG4gICAgICBkYXRhW25hbWVdID0gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSwgY29udGV4dClcbiAgICB9XG4gIH1cblxuICAvLyBTZXRzIHVwIGEgZGF0YSBvYmplY3QgdGhhdCBoYXMga2V5cyB3aXRoIGRlZmF1bHQgdmFsdWVzIGZvciBhbGxcbiAgLy8gZm9ybSBmaWVsZHMsIHNvIHRoZXkgY2FuIGJlIGNvcnJlY3RseSB3YXRjaGVkIGZvciBjaGFuZ2VzLlxuICByZXR1cm4gcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgc2NoZW1hLFxuICAgIGRhdGEsXG4gICAgbnVsbCxcbiAgICBudWxsLFxuICAgIHByb2Nlc3NCZWZvcmUsXG4gICAgbnVsbCxcbiAgICBvcHRpb25zXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVWYWx1ZShzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCB7XG4gIGNvbXBvbmVudCA9IG51bGwsXG4gIHJvb3REYXRhID0gY29tcG9uZW50Py5yb290RGF0YVxufSA9IHt9KSB7XG4gIGNvbnN0IGNvbnRleHQgPSAoKSA9PlxuICAgIG5ldyBEaXRvQ29udGV4dChjb21wb25lbnQsIHtcbiAgICAgIHNjaGVtYSxcbiAgICAgIC8vIE92ZXJyaWRlIHZhbHVlIHRvIHByZXZlbnQgZW5kbGVzcyByZWN1cnNpb24gdGhyb3VnaCBjYWxsaW5nIHRoZVxuICAgICAgLy8gZ2V0dGVyIGZvciBgdGhpcy52YWx1ZWAgaW4gYERpdG9Db250ZXh0YDpcbiAgICAgIHZhbHVlOiBkYXRhW25hbWVdLFxuICAgICAgbmFtZSxcbiAgICAgIGRhdGEsXG4gICAgICBkYXRhUGF0aCxcbiAgICAgIHJvb3REYXRhXG4gICAgfSlcbiAgY29uc3QgeyBjb21wdXRlIH0gPSBzY2hlbWFcbiAgaWYgKGNvbXB1dGUpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGNvbXB1dGUoZ2V0Q29udGV4dChjb250ZXh0KSlcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQWNjZXNzIGBkYXRhW25hbWVdYCBkaXJlY3RseSB0byB1cGRhdGUgdGhlIHZhbHVlIHdpdGhvdXQgY2FsbGluZ1xuICAgICAgLy8gcGFyc2UoKTpcbiAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgIGRhdGFbbmFtZV0gPSB2YWx1ZVxuICAgIH1cbiAgfVxuICAvLyBJZiB0aGUgdmFsdWUgaXMgc3RpbGwgbWlzc2luZyBhZnRlciBjb21wdXRlLCBzZXQgdGhlIGRlZmF1bHQgZm9yIGl0OlxuICBpZiAoIShuYW1lIGluIGRhdGEpICYmICFzaG91bGRJZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hLCBjb250ZXh0KSkge1xuICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICBkYXRhW25hbWVdID0gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSwgY29udGV4dClcbiAgfVxuICAvLyBOb3cgYWNjZXNzIHRoZSB2YWx1ZS4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHJlYWN0aXZpdHkgYW5kIG5lZWRzIHRvXG4gIC8vIGhhcHBlbiBhZnRlciBhbGwgcHJpb3IgbWFuaXB1bGF0aW9uIG9mIGBkYXRhW25hbWVdYCwgc2VlIGFib3ZlOlxuICByZXR1cm4gZGF0YVtuYW1lXVxufVxuXG5mdW5jdGlvbiBjbG9uZUl0ZW0oc291cmNlU2NoZW1hLCBpdGVtLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zLnNjaGVtYU9ubHkpIHtcbiAgICBjb25zdCBjb3B5ID0ge31cbiAgICBjb25zdCB7IGlkS2V5ID0gJ2lkJywgb3JkZXJLZXkgfSA9IHNvdXJjZVNjaGVtYVxuICAgIGNvbnN0IGlkID0gaXRlbVtpZEtleV1cbiAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29weVtpZEtleV0gPSBpZFxuICAgIH1cbiAgICAvLyBDb3B5IG92ZXIgdHlwZSBpbiBjYXNlIHRoZXJlIGFyZSBtdWx0aXBsZSBmb3JtcyB0byBjaG9vc2UgZnJvbS5cbiAgICBpZiAoaGFzTXVsdGlwbGVGb3JtU2NoZW1hcyhzb3VyY2VTY2hlbWEpKSB7XG4gICAgICBjb3B5LnR5cGUgPSBpdGVtLnR5cGVcbiAgICB9XG4gICAgaWYgKG9yZGVyS2V5KSB7XG4gICAgICBjb3B5W29yZGVyS2V5XSA9IGl0ZW1bb3JkZXJLZXldXG4gICAgfVxuICAgIHJldHVybiBjb3B5XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHsgLi4uaXRlbSB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NEYXRhKHNjaGVtYSwgc291cmNlU2NoZW1hLCBkYXRhLCBkYXRhUGF0aCwge1xuICBjb21wb25lbnQsXG4gIHJvb3REYXRhLFxuICBzY2hlbWFPbmx5LCAvLyB3aGV0aGVyIHRvIG9ubHkgaW5jbHVkZSBkYXRhIGNvdmVyZWQgYnkgdGhlIHNjaGVtYSwgb3IgYWxsIGRhdGFcbiAgdGFyZ2V0XG59ID0ge30pIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHsgY29tcG9uZW50LCByb290RGF0YSwgc2NoZW1hT25seSwgdGFyZ2V0IH1cbiAgY29uc3QgcHJvY2Vzc2VkRGF0YSA9IGNsb25lSXRlbShzb3VyY2VTY2hlbWEsIGRhdGEsIG9wdGlvbnMpXG4gIGNvbnN0IGdyYXBoID0gbmV3IFNjaGVtYUdyYXBoKClcblxuICBjb25zdCBwcm9jZXNzQmVmb3JlID0gKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIHByb2Nlc3NlZERhdGEpID0+IHtcbiAgICBsZXQgdmFsdWUgPSBjb21wdXRlVmFsdWUoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwgb3B0aW9ucylcbiAgICAvLyBUaGUgc2NoZW1hIGV4cGVjdHMgdGhlIGB3cmFwUHJpbWl0aXZlc2AgdHJhbnNmb3JtYXRpb25zIHRvIGJlIHByZXNlbnQgb25cbiAgICAvLyB0aGUgZGF0YSB0aGF0IGl0IGlzIGFwcGxpZWQgb24sIHNvIHdhcnAgYmVmb3JlIGFuZCB1bndyYXAgYWZ0ZXIuXG4gICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzLCBvcmRlcktleSwgaWRLZXkgPSAnaWQnIH0gPSBzY2hlbWFcbiAgICAgIGlmICh3cmFwUHJpbWl0aXZlcykge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLm1hcChlbnRyeSA9PiAoe1xuICAgICAgICAgIFt3cmFwUHJpbWl0aXZlc106IGVudHJ5XG4gICAgICAgIH0pKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQWx3YXlzIHNoYWxsb3ctY2xvbmUgYXJyYXkgdmFsdWVzOlxuICAgICAgICB2YWx1ZSA9IFsuLi52YWx1ZV1cbiAgICAgIH1cbiAgICAgIGlmIChvcmRlcktleSAmJiB0YXJnZXQgPT09ICdjbGlwYm9hcmQnKSB7XG4gICAgICAgIC8vIFNvcnQgdGhlIGRhdGEgYmFjayBpbnRvIHRoZSBuYXR1cmFsIHNlcXVlbmNlIGFzIGRlZmluZWQgYnkgdGhlaXIgaWRzLFxuICAgICAgICAvLyBzbyBjb3B5LXBhc3RpbmcgYmV0d2VlbiBzZXJ2ZXJzIChlLmcuIG5lc3RlZCBmb250LWN1dHMgb24gTGluZXRvKVxuICAgICAgICAvLyBuYXR1cmFsbHkgZ2V0cyBtYXBwZWQgdG8gdGhlIHNhbWUgZW50cmllcyBpbiB0aGUgZ3JhcGguXG4gICAgICAgIHZhbHVlLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICBjb25zdCBpZDEgPSBhPy5baWRLZXldXG4gICAgICAgICAgY29uc3QgaWQyID0gYj8uW2lkS2V5XVxuICAgICAgICAgIHJldHVybiBpZDEgPT0gbnVsbCB8fCBpc1RlbXBvcmFyeUlkKGlkMSlcbiAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgOiBpZDIgPT0gbnVsbCB8fCBpc1RlbXBvcmFyeUlkKGlkMilcbiAgICAgICAgICAgICAgPyAtMVxuICAgICAgICAgICAgICA6IGlkMSAtIGlkMlxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgICBwcm9jZXNzZWREYXRhW25hbWVdID0gdmFsdWVcbiAgfVxuXG4gIGNvbnN0IHByb2Nlc3NBZnRlciA9IChzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCBwcm9jZXNzZWREYXRhKSA9PiB7XG4gICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcywgcHJvY2VzcyB9ID0gc2NoZW1hXG4gICAgbGV0IHZhbHVlID0gcHJvY2Vzc2VkRGF0YVtuYW1lXVxuXG4gICAgLy8gTk9URTogV2UgZG9uJ3QgY2FjaGUgdGhpcyBjb250ZXh0LCBzaW5jZSBgdmFsdWVgIGlzIGNoYW5naW5nLlxuICAgIGNvbnN0IGNvbnRleHQgPSAoKSA9PlxuICAgICAgbmV3IERpdG9Db250ZXh0KGNvbXBvbmVudCwge1xuICAgICAgICBzY2hlbWEsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBuYW1lLFxuICAgICAgICBkYXRhLFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgcm9vdERhdGE6IG9wdGlvbnMucm9vdERhdGEsXG4gICAgICAgIC8vIFBhc3MgdGhlIGFscmVhZHkgcHJvY2Vzc2VkIGRhdGEgdG8gYHByb2Nlc3MoKWAsIHNvIGl0IGNhbiBiZSBtb2RpZmllZFxuICAgICAgICAvLyB0aHJvdWdoIGBwcm9jZXNzZWRJdGVtYCBmcm9tIHRoZXJlLlxuICAgICAgICBwcm9jZXNzZWREYXRhXG4gICAgICB9KVxuXG4gICAgLy8gRmlyc3QgdW53cmFwIHRoZSB3cmFwcGVkIHByaW1pdGl2ZXMgYWdhaW4sIHRvIGJyaW5nIHRoZSBkYXRhIGJhY2sgaW50b1xuICAgIC8vIGl0cyBuYXRpdmUgZm9ybS4gU2UgYHByb2Nlc3NCZWZvcmUoKWAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICBpZiAod3JhcFByaW1pdGl2ZXMgJiYgaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUubWFwKG9iamVjdCA9PiBvYmplY3Rbd3JhcFByaW1pdGl2ZXNdKVxuICAgIH1cblxuICAgIC8vIEVhY2ggY29tcG9uZW50IHR5cGUgY2FuIHByb3ZpZGUgaXRzIG93biBzdGF0aWMgYHByb2Nlc3NWYWx1ZSgpYCBtZXRob2RcbiAgICAvLyB0byBjb252ZXJ0IHRoZSBkYXRhIGZvciBzdG9yYWdlLlxuICAgIGNvbnN0IHByb2Nlc3NWYWx1ZSA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LnByb2Nlc3NWYWx1ZVxuICAgIGlmIChwcm9jZXNzVmFsdWUpIHtcbiAgICAgIHZhbHVlID0gcHJvY2Vzc1ZhbHVlKGdldENvbnRleHQoY29udGV4dCksIGdyYXBoKVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSB0aGUgdXNlcidzIGBwcm9jZXNzKClgIGNhbGxiYWNrIG5leHQsIGlmIG9uZSBpcyBwcm92aWRlZCwgc28gdGhhdFxuICAgIC8vIGl0IGNhbiBtb2RpZnkgZGF0YSBpbiBgcHJvY2Vzc2VkRGF0YWAgZXZlbiBpZiBpdCBwcm92aWRlcyBgZXhjbHVkZTogdHJ1ZWBcbiAgICBpZiAocHJvY2Vzcykge1xuICAgICAgdmFsdWUgPSBwcm9jZXNzKGdldENvbnRleHQoY29udGV4dCkpXG4gICAgfVxuXG4gICAgaWYgKHNob3VsZEV4Y2x1ZGVWYWx1ZShzY2hlbWEsIGNvbnRleHQpKSB7XG4gICAgICBkZWxldGUgcHJvY2Vzc2VkRGF0YVtuYW1lXVxuICAgIH0gZWxzZSB7XG4gICAgICBwcm9jZXNzZWREYXRhW25hbWVdID0gdmFsdWVcbiAgICB9XG4gIH1cblxuICBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICBzY2hlbWEsXG4gICAgZGF0YSxcbiAgICBkYXRhUGF0aCxcbiAgICBwcm9jZXNzZWREYXRhLFxuICAgIHByb2Nlc3NCZWZvcmUsXG4gICAgcHJvY2Vzc0FmdGVyLFxuICAgIG9wdGlvbnNcbiAgKVxuXG4gIHJldHVybiBncmFwaC5wcm9jZXNzKHNvdXJjZVNjaGVtYSwgcHJvY2Vzc2VkRGF0YSwgb3B0aW9ucylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NTY2hlbWFEYXRhKFxuICBzY2hlbWEsXG4gIGRhdGEsXG4gIGRhdGFQYXRoLFxuICBwcm9jZXNzZWREYXRhLFxuICBwcm9jZXNzQmVmb3JlLFxuICBwcm9jZXNzQWZ0ZXIsXG4gIG9wdGlvbnNcbikge1xuICBjb25zdCBwcm9jZXNzQ29tcG9uZW50cyA9IGNvbXBvbmVudHMgPT4ge1xuICAgIGNvbnN0IGdldERhdGFQYXRoID0gKGRhdGFQYXRoLCB0b2tlbikgPT5cbiAgICAgIGRhdGFQYXRoICE9IG51bGxcbiAgICAgICAgPyBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgdG9rZW4pXG4gICAgICAgIDogbnVsbFxuXG4gICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGNvbXBvbmVudFNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMoY29tcG9uZW50cykpIHtcbiAgICAgICAgaWYgKCFpc05lc3RlZChjb21wb25lbnRTY2hlbWEpKSB7XG4gICAgICAgICAgLy8gUmVjdXJzaXZlbHkgcHJvY2VzcyBkYXRhIG9uIHVubmVzdGVkIGNvbXBvbmVudHMuXG4gICAgICAgICAgcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgICAgICAgICBjb21wb25lbnRTY2hlbWEsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgICBwcm9jZXNzZWREYXRhLFxuICAgICAgICAgICAgcHJvY2Vzc0JlZm9yZSxcbiAgICAgICAgICAgIHByb2Nlc3NBZnRlcixcbiAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY29tcG9uZW50RGF0YVBhdGggPSBnZXREYXRhUGF0aChkYXRhUGF0aCwgbmFtZSlcblxuICAgICAgICAgIGNvbnN0IHByb2Nlc3NJdGVtID0gKGl0ZW0sIGluZGV4ID0gbnVsbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXRlbURhdGFQYXRoID1cbiAgICAgICAgICAgICAgaW5kZXggIT09IG51bGxcbiAgICAgICAgICAgICAgICA/IGdldERhdGFQYXRoKGNvbXBvbmVudERhdGFQYXRoLCBpbmRleClcbiAgICAgICAgICAgICAgICA6IGNvbXBvbmVudERhdGFQYXRoXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gbmV3IERpdG9Db250ZXh0KG9wdGlvbnMuY29tcG9uZW50LCB7XG4gICAgICAgICAgICAgIHNjaGVtYTogY29tcG9uZW50U2NoZW1hLFxuICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICBkYXRhUGF0aDogY29tcG9uZW50RGF0YVBhdGgsXG4gICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgIHJvb3REYXRhOiBvcHRpb25zLnJvb3REYXRhXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgY29uc3QgZ2V0Rm9ybXMgPSAoXG4gICAgICAgICAgICAgIGdldFR5cGVPcHRpb25zKGNvbXBvbmVudFNjaGVtYSk/LmdldEZvcm1TY2hlbWFzRm9yUHJvY2Vzc2luZyB8fFxuICAgICAgICAgICAgICBnZXRGb3JtU2NoZW1hc1xuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3QgZm9ybXMgPSBnZXRGb3Jtcyhjb21wb25lbnRTY2hlbWEsIGNvbnRleHQpXG4gICAgICAgICAgICBjb25zdCBmb3JtID0gZ2V0SXRlbUZvcm1TY2hlbWFGcm9tRm9ybXMoZm9ybXMsIGl0ZW0pXG4gICAgICAgICAgICBpZiAoZm9ybSkge1xuICAgICAgICAgICAgICBjb25zdCBwcm9jZXNzZWRJdGVtID0gcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgICAgICAgID8gY2xvbmVJdGVtKGNvbXBvbmVudFNjaGVtYSwgaXRlbSwgb3B0aW9ucylcbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgcmV0dXJuIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgICAgICAgICAgICAgIGZvcm0sXG4gICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICBpdGVtRGF0YVBhdGgsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkSXRlbSxcbiAgICAgICAgICAgICAgICBwcm9jZXNzQmVmb3JlLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NBZnRlcixcbiAgICAgICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIEl0ZW1zIHdpdGhvdXQgZm9ybXMgc3RpbGwgZ2V0IGZ1bGx5IChidXQgc2hhbGxvd2x5KSBjbG9uZWQuXG4gICAgICAgICAgICAgIC8vIFRPRE86IEZpbmQgb3V0IG9mIHRoaXMgaXMgYWN0dWFsbHkgbmVlZGVkIC8gdXNlZCBhdCBhbGw/XG4gICAgICAgICAgICAgIHJldHVybiB7IC4uLml0ZW0gfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHByb2Nlc3NCZWZvcmU/LihcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgY29tcG9uZW50RGF0YVBhdGgsXG4gICAgICAgICAgICBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgKVxuXG4gICAgICAgICAgbGV0IHZhbHVlID0gcHJvY2Vzc2VkRGF0YSA/IHByb2Nlc3NlZERhdGFbbmFtZV0gOiBkYXRhW25hbWVdXG4gICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgaGFzRm9ybVNjaGVtYShjb21wb25lbnRTY2hlbWEpKSB7XG4gICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBwcm9jZXNzIGRhdGEgb24gbmVzdGVkIGZvcm0gaXRlbXMuXG4gICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgLy8gT3B0aW1pemF0aW9uOiBObyBuZWVkIHRvIGNvbGxlY3QgdmFsdWVzIGlmIHdlJ3JlIG5vdCBjbG9uaW5nIVxuICAgICAgICAgICAgICB2YWx1ZSA9IHByb2Nlc3NlZERhdGFcbiAgICAgICAgICAgICAgICA/IHZhbHVlLm1hcChwcm9jZXNzSXRlbSlcbiAgICAgICAgICAgICAgICA6IHZhbHVlLmZvckVhY2gocHJvY2Vzc0l0ZW0pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YWx1ZSA9IHByb2Nlc3NJdGVtKHZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb2Nlc3NlZERhdGEpIHtcbiAgICAgICAgICAgICAgcHJvY2Vzc2VkRGF0YVtuYW1lXSA9IHZhbHVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcHJvY2Vzc0FmdGVyPy4oXG4gICAgICAgICAgICBjb21wb25lbnRTY2hlbWEsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGNvbXBvbmVudERhdGFQYXRoLFxuICAgICAgICAgICAgcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NDb21wb25lbnRzKHNjaGVtYS5jb21wb25lbnRzKVxuICBmb3IgKGNvbnN0IHRhYiBvZiBnZXRUYWJTY2hlbWFzKHNjaGVtYSkpIHtcbiAgICBwcm9jZXNzQ29tcG9uZW50cyh0YWIuY29tcG9uZW50cylcbiAgfVxuICBmb3IgKGNvbnN0IHBhbmVsIG9mIGdldFBhbmVsU2NoZW1hcyhzY2hlbWEpKSB7XG4gICAgcHJvY2Vzc0NvbXBvbmVudHMocGFuZWwuY29tcG9uZW50cylcbiAgfVxuXG4gIHJldHVybiBwcm9jZXNzZWREYXRhIHx8IGRhdGFcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5hbWVkU2NoZW1hcyhzY2hlbWFzLCBkZWZhdWx0cykge1xuICBjb25zdCB0b09iamVjdCA9IChhcnJheSwgdG9TY2hlbWEpID0+IHtcbiAgICByZXR1cm4gYXJyYXkubGVuZ3RoID4gMFxuICAgICAgPyBhcnJheS5yZWR1Y2UoKG9iamVjdCwgdmFsdWUpID0+IHtcbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSB0b1NjaGVtYSh2YWx1ZSlcbiAgICAgICAgICBpZiAoc2NoZW1hKSB7XG4gICAgICAgICAgICBvYmplY3Rbc2NoZW1hLm5hbWVdID1cbiAgICAgICAgICAgICAgc2NoZW1hICYmIGRlZmF1bHRzXG4gICAgICAgICAgICAgICAgPyB7IC4uLmRlZmF1bHRzLCAuLi5zY2hlbWEgfVxuICAgICAgICAgICAgICAgIDogc2NoZW1hXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvYmplY3RcbiAgICAgICAgfSwge30pXG4gICAgICA6IG51bGxcbiAgfVxuXG4gIHJldHVybiBpc0FycmF5KHNjaGVtYXMpXG4gICAgPyB0b09iamVjdChzY2hlbWFzLCB2YWx1ZSA9PlxuICAgICAgICBpc09iamVjdCh2YWx1ZSlcbiAgICAgICAgICA/IHZhbHVlXG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIG5hbWU6IGNhbWVsaXplKHZhbHVlLCBmYWxzZSlcbiAgICAgICAgICAgIH1cbiAgICAgIClcbiAgICA6IGlzT2JqZWN0KHNjaGVtYXMpXG4gICAgICA/IHRvT2JqZWN0KFxuICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHNjaGVtYXMpLFxuICAgICAgICAgIChbbmFtZSwgdmFsdWVdKSA9PlxuICAgICAgICAgICAgaXNPYmplY3QodmFsdWUpXG4gICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgIC4uLnZhbHVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA6IGlzU3RyaW5nKHZhbHVlKVxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogdmFsdWVcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgKVxuICAgICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCdXR0b25TY2hlbWFzKGJ1dHRvbnMpIHtcbiAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyhcbiAgICBidXR0b25zLFxuICAgIHsgdHlwZTogJ2J1dHRvbicgfSAvLyBEZWZhdWx0c1xuICApXG59XG5cbmZ1bmN0aW9uIGdldFR5cGUoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBpc09iamVjdChzY2hlbWFPclR5cGUpID8gc2NoZW1hT3JUeXBlLnR5cGUgOiBzY2hlbWFPclR5cGVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVPcHRpb25zKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0VHlwZUNvbXBvbmVudChnZXRUeXBlKHNjaGVtYU9yVHlwZSksIHRydWUpID8/IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiAoXG4gICAgZ2V0VHlwZU9wdGlvbnMoc2NoZW1hT3JUeXBlKT8uZ2V0U291cmNlVHlwZT8uKGdldFR5cGUoc2NoZW1hT3JUeXBlKSkgPz9cbiAgICBudWxsXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhbmVsRW50cnkoc2NoZW1hLCBkYXRhUGF0aCA9IG51bGwsIHRhYkNvbXBvbmVudCA9IG51bGwpIHtcbiAgcmV0dXJuIHNjaGVtYVxuICAgID8ge1xuICAgICAgICBzY2hlbWEsXG4gICAgICAgIC8vIElmIHRoZSBwYW5lbCBwcm92aWRlcyBpdHMgb3duIG5hbWUsIGFwcGVuZCBpdCB0byB0aGUgZGF0YVBhdGguXG4gICAgICAgIC8vIFRoaXMgaXMgdXNlZCBlLmcuIGZvciAkZmlsdGVycyBwYW5lbHMuXG4gICAgICAgIGRhdGFQYXRoOlxuICAgICAgICAgIGRhdGFQYXRoICE9IG51bGwgJiYgc2NoZW1hLm5hbWVcbiAgICAgICAgICAgID8gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHNjaGVtYS5uYW1lKVxuICAgICAgICAgICAgOiBkYXRhUGF0aCxcbiAgICAgICAgdGFiQ29tcG9uZW50XG4gICAgICB9XG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYW5lbEVudHJpZXMoXG4gIHBhbmVsU2NoZW1hcyxcbiAgZGF0YVBhdGgsXG4gIHRhYkNvbXBvbmVudCA9IG51bGwsXG4gIHBhbmVsRW50cmllcyA9IFtdXG4pIHtcbiAgaWYgKHBhbmVsU2NoZW1hcykge1xuICAgIGZvciAoY29uc3QgW2tleSwgc2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyhwYW5lbFNjaGVtYXMpKSB7XG4gICAgICBjb25zdCBlbnRyeSA9IGdldFBhbmVsRW50cnkoXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIGtleSksXG4gICAgICAgIHRhYkNvbXBvbmVudFxuICAgICAgKVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIHBhbmVsRW50cmllcy5wdXNoKGVudHJ5KVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcGFuZWxFbnRyaWVzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJTY2hlbWFzKHNjaGVtYSkge1xuICByZXR1cm4gc2NoZW1hPy50YWJzID8gT2JqZWN0LnZhbHVlcyhzY2hlbWEudGFicykgOiBbXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFuZWxTY2hlbWFzKHNjaGVtYSkge1xuICByZXR1cm4gc2NoZW1hPy5wYW5lbHMgPyBPYmplY3QudmFsdWVzKHNjaGVtYS5wYW5lbHMpIDogW11cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFsbFBhbmVsRW50cmllcyhcbiAgYXBpLFxuICBzY2hlbWEsXG4gIGRhdGFQYXRoLFxuICBjb21wb25lbnQgPSBudWxsLFxuICB0YWJDb21wb25lbnQgPSBudWxsXG4pIHtcbiAgY29uc3QgcGFuZWxTY2hlbWEgPSBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5nZXRQYW5lbFNjaGVtYT8uKFxuICAgIGFwaSxcbiAgICBzY2hlbWEsXG4gICAgZGF0YVBhdGgsXG4gICAgY29tcG9uZW50XG4gIClcbiAgY29uc3QgcGFuZWxFbnRyaWVzID0gcGFuZWxTY2hlbWFcbiAgICA/IFtnZXRQYW5lbEVudHJ5KHBhbmVsU2NoZW1hLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50KV1cbiAgICA6IFtdXG4gIC8vIEFsbG93IGVhY2ggY29tcG9uZW50IHRvIHByb3ZpZGUgaXRzIG93biBzZXQgb2YgcGFuZWxzLCBpblxuICAvLyBhZGRpdGlvbiB0byB0aGUgZGVmYXVsdCBvbmUgKGUuZy4gZ2V0RmlsdGVyc1BhbmVsKCksICRmaWx0ZXJzKTpcbiAgZ2V0UGFuZWxFbnRyaWVzKHNjaGVtYT8ucGFuZWxzLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50LCBwYW5lbEVudHJpZXMpXG4gIHJldHVybiBwYW5lbEVudHJpZXNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0U291cmNlKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0U291cmNlVHlwZShzY2hlbWFPclR5cGUpID09PSAnb2JqZWN0J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNMaXN0U291cmNlKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0U291cmNlVHlwZShzY2hlbWFPclR5cGUpID09PSAnbGlzdCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0pIHtcbiAgY29uc3QgaWQgPSBpdGVtW3NvdXJjZVNjaGVtYS5pZEtleSB8fCAnaWQnXVxuICByZXR1cm4gaWQgIT0gbnVsbCA/IFN0cmluZyhpZCkgOiB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1VaWQoc291cmNlU2NoZW1hLCBpdGVtKSB7XG4gIC8vIFRyeSB0byB1c2UgdGhlIGl0ZW0gaWQgYXMgdGhlIHVpZCwgZmFsbGluZyBiYWNrIG9uIGF1dG8tZ2VuZXJhdGVkIGlkcywgYnV0XG4gIC8vIGVpdGhlciB3YXksIHBhc3MgdGhyb3VnaCBgZ2V0VWlkKClgIHNvIHRoYXQgdGhlIGlkcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZVxuICAvLyBpdGVtIHRocm91Z2ggYSB3ZWFrIG1hcCwgYXMgdGhlIGlkcyBjYW4gYmUgZmlsdGVyZWQgb3V0IGluIGBwcm9jZXNzRGF0YSgpYFxuICAvLyB3aGlsZSB0aGUgY29tcG9uZW50cyB0aGF0IHVzZSB0aGUgdWlkcyBhcyBrZXkgYXJlIHN0aWxsIHZpc2libGUuXG4gIHJldHVybiBnZXRVaWQoaXRlbSwgaXRlbSA9PiBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKSlcbn1cbiIsImltcG9ydCB7IGlzRnVuY3Rpb24sIGlzT2JqZWN0LCBpc1N0cmluZywgcGlja0J5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1Jlc291cmNlKHNjaGVtYSkge1xuICByZXR1cm4gISFnZXRSZXNvdXJjZShzY2hlbWEucmVzb3VyY2UpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZXNvdXJjZShyZXNvdXJjZSwgZGVmYXVsdHMgPSB7fSkge1xuICBjb25zdCB7IHBhcmVudCwgLi4uZGVmcyB9ID0gZGVmYXVsdHNcbiAgaWYgKGlzRnVuY3Rpb24ocmVzb3VyY2UpKSB7XG4gICAgcmVzb3VyY2UgPSByZXNvdXJjZShkZWZhdWx0cylcbiAgfVxuICByZXNvdXJjZSA9IGlzT2JqZWN0KHJlc291cmNlKVxuICAgID8geyAuLi5kZWZzLCAuLi5yZXNvdXJjZSB9XG4gICAgOiBpc1N0cmluZyhyZXNvdXJjZSlcbiAgICAgID8geyAuLi5kZWZzLCBwYXRoOiByZXNvdXJjZSB9XG4gICAgICA6IG51bGxcbiAgLy8gT25seSBzZXQgcGFyZW50IGlmIHBhdGggZG9lc24ndCBzdGFydCB3aXRoICcvJywgc28gcmVsYXRpdmUgVVJMcyBhcmVcbiAgLy8gZGVhbHQgd2l0aCBjb3JyZWN0bHkuXG4gIGlmIChcbiAgICByZXNvdXJjZSAmJlxuICAgIHBhcmVudCAhPT0gdW5kZWZpbmVkICYmXG4gICAgcmVzb3VyY2UucGFyZW50ID09PSB1bmRlZmluZWQgJiZcbiAgICAhcmVzb3VyY2UucGF0aD8uc3RhcnRzV2l0aCgnLycpXG4gICkge1xuICAgIHJlc291cmNlLnBhcmVudCA9IHBhcmVudFxuICAgIGlmICghcmVzb3VyY2UucGF0aCkge1xuICAgICAgcmVzb3VyY2UucGF0aCA9ICcuJ1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzb3VyY2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1lbWJlclJlc291cmNlKGlkLCByZXNvdXJjZSkge1xuICByZXR1cm4gaWQgIT0gbnVsbCAmJiByZXNvdXJjZT8udHlwZSA9PT0gJ2NvbGxlY3Rpb24nXG4gICAgPyB7XG4gICAgICAgIHR5cGU6ICdtZW1iZXInLFxuICAgICAgICAuLi5waWNrQnkoXG4gICAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgICAgKHZhbHVlLCBrZXkpID0+IFsnbWV0aG9kJywgJ3BhdGgnLCAncGFyZW50J10uaW5jbHVkZXMoa2V5KVxuICAgICAgICApLFxuICAgICAgICBpZDogYCR7aWR9YFxuICAgICAgfVxuICAgIDogbnVsbFxufVxuIiwiaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGlzU3RyaW5nLFxuICBpc0Z1bmN0aW9uLFxuICBlcXVhbHMsXG4gIGxhYmVsaXplLFxuICBoeXBoZW5hdGUsXG4gIGZvcm1hdFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IGFwcFN0YXRlIGZyb20gJy4uL2FwcFN0YXRlLmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IEVtaXR0ZXJNaXhpbiBmcm9tICcuL0VtaXR0ZXJNaXhpbi5qcydcbmltcG9ydCB7XG4gIGZsYXR0ZW5WaWV3cyxcbiAgZ2V0U2NoZW1hVmFsdWUsXG4gIHNob3VsZFJlbmRlclNjaGVtYVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRSZXNvdXJjZSwgZ2V0TWVtYmVyUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7IGNvbXB1dGVkLCByZWFjdGl2ZSB9IGZyb20gJ3Z1ZSdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbRW1pdHRlck1peGluXSxcblxuICBpbmplY3Q6IFtcbiAgICAnYXBpJyxcbiAgICAnJHZlcmJzJyxcbiAgICAnJHZpZXdzJyxcbiAgICAnJGlzUG9wdWxhdGVkJyxcbiAgICAnJHBhcmVudENvbXBvbmVudCcsXG4gICAgJyRzY2hlbWFDb21wb25lbnQnLFxuICAgICckcm91dGVDb21wb25lbnQnLFxuICAgICckZGF0YUNvbXBvbmVudCcsXG4gICAgJyRzb3VyY2VDb21wb25lbnQnLFxuICAgICckcmVzb3VyY2VDb21wb25lbnQnLFxuICAgICckZGlhbG9nQ29tcG9uZW50JyxcbiAgICAnJHBhbmVsQ29tcG9uZW50JyxcbiAgICAnJHRhYkNvbXBvbmVudCdcbiAgXSxcblxuICBwcm92aWRlKCkge1xuICAgIGNvbnN0IHNlbGYgPSAoKSA9PiB0aGlzXG4gICAgcmV0dXJuIHRoaXMucHJvdmlkZXNEYXRhXG4gICAgICA/IHtcbiAgICAgICAgICAkcGFyZW50Q29tcG9uZW50OiBzZWxmLFxuICAgICAgICAgICRkYXRhQ29tcG9uZW50OiBzZWxmXG4gICAgICAgIH1cbiAgICAgIDoge1xuICAgICAgICAgICRwYXJlbnRDb21wb25lbnQ6IHNlbGZcbiAgICAgICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFwcFN0YXRlLFxuICAgICAgaXNNb3VudGVkOiBmYWxzZSxcbiAgICAgIG92ZXJyaWRlczogbnVsbCAvLyBTZWUgYWNjZXNzb3IuanNcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICAvLyBOT1RFOiBUaGlzIGlzIG92ZXJyaWRkZW4gaW4gUmVzb3VyY2VNaXhpbiwgdXNlZCBieSBsaXN0cy5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBzb3VyY2VTY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXRhPy5zY2hlbWFcbiAgICB9LFxuXG4gICAgdXNlcigpIHtcbiAgICAgIHJldHVybiBhcHBTdGF0ZS51c2VyXG4gICAgfSxcblxuICAgIC8vICR2ZXJicywgJHZlcmJzIGFuZCAkaXNQb3B1bGF0ZWQgYXJlIGRlZmluZWQgYXMgZnVuY3Rpb25zLCB0byBwcmVzZXJ2ZVxuICAgIC8vIHJlYWN0aXZlbmVzcyBhY3Jvc3MgcHJvdmlkZS9pbmplY3QuXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlL2lzc3Vlcy83MDE3I2lzc3VlY29tbWVudC00ODA5MDY2OTFcbiAgICB2ZXJicygpIHtcbiAgICAgIHJldHVybiB0aGlzLiR2ZXJicygpXG4gICAgfSxcblxuICAgIHZpZXdzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHZpZXdzKClcbiAgICB9LFxuXG4gICAgZmxhdHRlbmVkVmlld3MoKSB7XG4gICAgICByZXR1cm4gZmxhdHRlblZpZXdzKHRoaXMudmlld3MpXG4gICAgfSxcblxuICAgIGlzUG9wdWxhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJGlzUG9wdWxhdGVkKClcbiAgICB9LFxuXG4gICAgbG9jYWxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBpLmxvY2FsZVxuICAgIH0sXG5cbiAgICBjb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG5lc3RlZDogZmFsc2UgfSlcbiAgICB9LFxuXG4gICAgcm9vdENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyb290LiRyZWZzLnJvb3RcbiAgICB9LFxuXG4gICAgLy8gVXNlIGNvbXB1dGVkIHByb3BlcnRpZXMgYXMgbGlua3MgdG8gaW5qZWN0cywgc28gRGl0b1NjaGVtYSBjYW5cbiAgICAvLyBvdmVycmlkZSB0aGUgcHJvcGVydHkgYW5kIHJldHVybiBgdGhpc2AgaW5zdGVhZCBvZiB0aGUgcGFyZW50LlxuICAgIHBhcmVudENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYXJlbnRDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc2NoZW1hQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcm91dGVDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcm91dGVDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBmb3JtQ29tcG9uZW50KCkge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5yb3V0ZUNvbXBvbmVudFxuICAgICAgcmV0dXJuIGNvbXBvbmVudD8uaXNGb3JtID8gY29tcG9uZW50IDogbnVsbFxuICAgIH0sXG5cbiAgICB2aWV3Q29tcG9uZW50KCkge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5yb3V0ZUNvbXBvbmVudFxuICAgICAgcmV0dXJuIGNvbXBvbmVudD8uaXNWaWV3ID8gY29tcG9uZW50IDogbnVsbFxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBmaXJzdCByb3V0ZSBjb21wb25lbnQgaW4gdGhlIGNoYWluIG9mIHBhcmVudHMsIGluY2x1ZGluZ1xuICAgIC8vIHRoaXMgY3VycmVudCBjb21wb25lbnQsIHRoYXQgaXMgbGlua2VkIHRvIGEgcmVzb3VyY2UgKGFuZCB0aHVzIGxvYWRzIGl0c1xuICAgIC8vIG93biBkYXRhIGFuZCBkb2Vzbid0IGhvbGQgbmVzdGVkIGRhdGEpLlxuICAgIGRhdGFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm92aWRlc0RhdGEgPyB0aGlzIDogdGhpcy4kZGF0YUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzb3VyY2VDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZXNvdXJjZUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRkaWFsb2dDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBwYW5lbENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYW5lbENvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiR0YWJDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBwYXJlbnRTY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gZ2V0UGFyZW50Q29tcG9uZW50KHRoaXMsICdzY2hlbWFDb21wb25lbnQnKVxuICAgIH0sXG5cbiAgICBwYXJlbnRSb3V0ZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiBnZXRQYXJlbnRDb21wb25lbnQodGhpcywgJ3JvdXRlQ29tcG9uZW50JylcbiAgICB9LFxuXG4gICAgcGFyZW50Rm9ybUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiBnZXRQYXJlbnRDb21wb25lbnQodGhpcywgJ2Zvcm1Db21wb25lbnQnKVxuICAgIH0sXG5cbiAgICBwYXJlbnRSZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiBnZXRQYXJlbnRDb21wb25lbnQodGhpcywgJ3Jlc291cmNlQ29tcG9uZW50JylcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgZGF0YSBvZiB0aGUgZmlyc3Qgcm91dGUgY29tcG9uZW50IGluIHRoZSBjaGFpbiBvZiBwYXJlbnRzXG4gICAgLy8gdGhhdCBsb2FkcyBpdHMgb3duIGRhdGEgZnJvbSBhbiBhc3NvY2lhdGVkIEFQSSByZXNvdXJjZS5cbiAgICByb290RGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFDb21wb25lbnQ/LmRhdGFcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLmlzTW91bnRlZCA9IHRydWVcbiAgfSxcblxuICBiZWZvcmVDcmVhdGUoKSB7XG4gICAgY29uc3QgdWlkID0gbmV4dFVpZCsrXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICckdWlkJywgeyBnZXQ6ICgpID0+IHVpZCB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBsYWJlbGl6ZSxcblxuICAgIC8vIFRoZSBzdGF0ZSBvZiBjb21wb25lbnRzIGlzIG9ubHkgYXZhaWxhYmxlIGR1cmluZyB0aGUgbGlmZS1jeWNsZSBvZiBhXG4gICAgLy8gY29tcG9uZW50LiBTb21lIGluZm9ybWF0aW9uIHdlIG5lZWQgYXZhaWxhYmxlIGxvbmdlciB0aGFuIHRoYXQsIGUuZy5cbiAgICAvLyBgcXVlcnlgICYgYHRvdGFsYCBvbiBUeXBlTGlzdCwgc28gdGhhdCB3aGVuIHRoZSB1c2VyIG5hdmlnYXRlcyBiYWNrIGZyb21cbiAgICAvLyBlZGl0aW5nIGFuIGl0ZW0gaW4gdGhlIGxpc3QsIHRoZSBzdGF0ZSBvZiB0aGUgbGlzdCBpcyBzdGlsbCB0aGUgc2FtZS5cbiAgICAvLyBXZSBjYW4ndCBzdG9yZSB0aGlzIGluIGBkYXRhYCwgYXMgdGhpcyBpcyBhbHJlYWR5IHRoZSBwdXJlIGRhdGEgZnJvbSB0aGVcbiAgICAvLyBBUEkgc2VydmVyLiBUaGF0J3Mgd2hhdCB0aGUgYHN0b3JlYCBpcyBmb3I6IE1lbW9yeSB0aGF0J3MgYXZhaWxhYmxlIGFzXG4gICAgLy8gbG9uZyBhcyB0aGUgY3VycmVudCBlZGl0aW5nIHBhdGggaXMgc3RpbGwgdmFsaWQuIEZvciB0eXBlIGNvbXBvbmVudHMsXG4gICAgLy8gdGhpcyBtZW1vcnkgaXMgcHJvdmlkZWQgYnkgdGhlIHBhcmVudCwgc2VlIFJvdXRlTWl4aW4gYW5kIERpdG9QYW5lLlxuICAgIGdldFN0b3JlKGtleSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RvcmVba2V5XVxuICAgIH0sXG5cbiAgICBzZXRTdG9yZShrZXksIHZhbHVlKSB7XG4gICAgICB0aGlzLnN0b3JlW2tleV0gPSB2YWx1ZVxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfSxcblxuICAgIHJlbW92ZVN0b3JlKGtleSkge1xuICAgICAgZGVsZXRlIHRoaXMuc3RvcmVba2V5XVxuICAgIH0sXG5cbiAgICBnZXRTdG9yZUtleUJ5SW5kZXgoaW5kZXgpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0b3JlLiRrZXlzQnlJbmRleD8uW2luZGV4XVxuICAgIH0sXG5cbiAgICBzZXRTdG9yZUtleUJ5SW5kZXgoaW5kZXgsIGtleSkge1xuICAgICAgdGhpcy5zdG9yZS4ka2V5c0J5SW5kZXggPz89IHt9XG4gICAgICB0aGlzLnN0b3JlLiRrZXlzQnlJbmRleFtpbmRleF0gPSBrZXlcbiAgICB9LFxuXG4gICAgZ2V0Q2hpbGRTdG9yZShrZXksIGluZGV4KSB7XG4gICAgICBsZXQgc3RvcmUgPSB0aGlzLmdldFN0b3JlKGtleSlcbiAgICAgIGlmICghc3RvcmUgJiYgaW5kZXggIT0gbnVsbCkge1xuICAgICAgICAvLyBXaGVuIHN0b3JpbmcsIHRlbXBvcmFyeSBpZHMgY2hhbmdlIHRvIHBlcm1hbmVudCBvbmVzIGFuZCB0aHVzIHRoZSBrZXlcbiAgICAgICAgLy8gY2FuIGNoYW5nZS4gVG8gc3RpbGwgZmluZCB0aGUgc3RvcmUsIHdlIHJlZmVyZW5jZSBieSBpbmRleCBhcyB3ZWxsLFxuICAgICAgICAvLyB0byBiZSBhYmxlIHRvIGZpbmQgdGhlIHN0b3JlIGFnYWluIGFmdGVyIHRoZSBpdGVtIHdhcyBzYXZlZC5cbiAgICAgICAgY29uc3Qgb2xkS2V5ID0gdGhpcy5nZXRTdG9yZUtleUJ5SW5kZXgoaW5kZXgpXG4gICAgICAgIHN0b3JlID0gdGhpcy5nZXRTdG9yZShvbGRLZXkpXG4gICAgICAgIGlmIChzdG9yZSkge1xuICAgICAgICAgIHRoaXMuc2V0U3RvcmUoa2V5LCBzdG9yZSlcbiAgICAgICAgICB0aGlzLnJlbW92ZVN0b3JlKG9sZEtleSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFzdG9yZSkge1xuICAgICAgICBzdG9yZSA9IHRoaXMuc2V0U3RvcmUoa2V5LCByZWFjdGl2ZSh7fSkpXG4gICAgICB9XG4gICAgICBpZiAoaW5kZXggIT0gbnVsbCkge1xuICAgICAgICAvLyB0ZW1wb3JhcnkgdWlkIGtleXMgd2lsbCBjaGFuZ2UgYmV0d2VlbiBwZXJzaXN0ZW5jZSwgc28gd2UgbmVlZCB0b1xuICAgICAgICAvLyBhc3NpZ24gdGhlIGtleSB0byB0aGUgaW5kZXggZXZlbiB3aGVuIHRoZSBzdG9yZSBhbHJlYWR5IGV4aXN0ZWQuXG4gICAgICAgIHRoaXMuc2V0U3RvcmVLZXlCeUluZGV4KGluZGV4LCBrZXkpXG4gICAgICB9XG4gICAgICByZXR1cm4gc3RvcmVcbiAgICB9LFxuXG4gICAgcmVtb3ZlQ2hpbGRTdG9yZShrZXksIGluZGV4KSB7XG4gICAgICAvLyBHRXQgdGhlIGNoaWxkLXN0b3JlIGZpcnN0LCBzbyB0aGF0IGluZGljZXMgY2FuIGJlIHRyYW5zZmVycmVkIG92ZXJcbiAgICAgIC8vIHRlbXBvcmFyeSBpZCBjaGFuZ2VzIGR1cmluZyBwZXJzaXN0ZW5jZS5cbiAgICAgIHRoaXMuZ2V0Q2hpbGRTdG9yZShrZXksIGluZGV4KVxuICAgICAgdGhpcy5yZW1vdmVTdG9yZShrZXkpXG4gICAgfSxcblxuICAgIGdldFNjaGVtYVZhbHVlKFxuICAgICAga2V5T3JEYXRhUGF0aCxcbiAgICAgIHtcbiAgICAgICAgdHlwZSxcbiAgICAgICAgZGVmYXVsdDogZGVmLFxuICAgICAgICBzY2hlbWEgPSB0aGlzLnNjaGVtYSxcbiAgICAgICAgY29udGV4dCA9IHRoaXMuY29udGV4dCxcbiAgICAgICAgY2FsbGJhY2sgPSB0cnVlXG4gICAgICB9ID0ge31cbiAgICApIHtcbiAgICAgIHJldHVybiBnZXRTY2hlbWFWYWx1ZShrZXlPckRhdGFQYXRoLCB7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgY2FsbGJhY2ssXG4gICAgICAgIGRlZmF1bHQ6IGlzRnVuY3Rpb24oZGVmKSA/ICgpID0+IGRlZi5jYWxsKHRoaXMpIDogZGVmXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRMYWJlbChzY2hlbWEsIG5hbWUpIHtcbiAgICAgIHJldHVybiBzY2hlbWFcbiAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCdsYWJlbCcsIHsgc2NoZW1hLCB0eXBlOiBbU3RyaW5nLCBPYmplY3RdIH0pIHx8XG4gICAgICAgICAgbGFiZWxpemUobmFtZSB8fCBzY2hlbWEubmFtZSlcbiAgICAgICAgOiBsYWJlbGl6ZShuYW1lKSB8fCAnJ1xuICAgIH0sXG5cbiAgICBnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNsYXNzOiBgZGl0by1idXR0b24tJHt2ZXJifWAsXG4gICAgICAgIHRpdGxlOiBsYWJlbGl6ZSh2ZXJiKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBSZW5hbWUgKkxpbmsoKSB0byAqUm91dGUoKS5cbiAgICBnZXRRdWVyeUxpbmsocXVlcnkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICAvLyBQcmVzZXJ2ZSBoYXNoIGZvciB0YWJzOlxuICAgICAgICBoYXNoOiB0aGlzLiRyb3V0ZS5oYXNoXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNob3VsZFJlbmRlclNjaGVtYShzY2hlbWEgPSBudWxsKSB7XG4gICAgICByZXR1cm4gc2hvdWxkUmVuZGVyU2NoZW1hKHNjaGVtYSwgdGhpcy5jb250ZXh0KVxuICAgIH0sXG5cbiAgICBzaG91bGRTaG93U2NoZW1hKHNjaGVtYSA9IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFNjaGVtYVZhbHVlKCd2aXNpYmxlJywge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICBzY2hlbWFcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHNob3VsZERpc2FibGVTY2hlbWEoc2NoZW1hID0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2Rpc2FibGVkJywge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgc2NoZW1hXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRSZXNvdXJjZVBhdGgocmVzb3VyY2UpIHtcbiAgICAgIHJlc291cmNlID0gZ2V0UmVzb3VyY2UocmVzb3VyY2UsIHtcbiAgICAgICAgLy8gUmVzb3VyY2VzIHdpdGhvdXQgYSBwYXJlbnQgaW5oZXJpdCB0aGUgb25lIGZyb20gYGRhdGFDb21wb25lbnRgXG4gICAgICAgIC8vIGF1dG9tYXRpY2FsbHkuXG4gICAgICAgIHBhcmVudDogdGhpcy5kYXRhQ29tcG9uZW50Py5nZXRSZXNvdXJjZSh7XG4gICAgICAgICAgbWV0aG9kOiByZXNvdXJjZT8ubWV0aG9kLFxuICAgICAgICAgIGNoaWxkOiByZXNvdXJjZVxuICAgICAgICB9KSA/PyBudWxsXG4gICAgICB9KVxuICAgICAgcmV0dXJuIHRoaXMuYXBpLnJlc291cmNlcy5hbnkocmVzb3VyY2UpXG4gICAgfSxcblxuICAgIGdldFJlc291cmNlVXJsKHJlc291cmNlKSB7XG4gICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFJlc291cmNlUGF0aChyZXNvdXJjZSlcbiAgICAgIHJldHVybiB1cmwgPyB0aGlzLmFwaS5nZXRBcGlVcmwoeyB1cmwsIHF1ZXJ5OiByZXNvdXJjZS5xdWVyeSB9KSA6IG51bGxcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZFJlcXVlc3Qoe1xuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgcmVzb3VyY2UsXG4gICAgICBxdWVyeSxcbiAgICAgIGRhdGEsXG4gICAgICBzaWduYWwsXG4gICAgICBpbnRlcm5hbFxuICAgIH0pIHtcbiAgICAgIHVybCB8fD0gdGhpcy5nZXRSZXNvdXJjZVVybChyZXNvdXJjZSlcbiAgICAgIG1ldGhvZCB8fD0gcmVzb3VyY2U/Lm1ldGhvZFxuICAgICAgY29uc3QgY2hlY2tVc2VyID0gIWludGVybmFsICYmIHRoaXMuYXBpLmlzQXBpVXJsKHVybClcbiAgICAgIGlmIChjaGVja1VzZXIpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yb290Q29tcG9uZW50LmVuc3VyZVVzZXIoKVxuICAgICAgfVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmFwaS5yZXF1ZXN0KHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICB1cmwsXG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICBkYXRhLFxuICAgICAgICBzaWduYWxcbiAgICAgIH0pXG4gICAgICAvLyBEZXRlY3QgY2hhbmdlIG9mIHRoZSBvd24gdXNlciwgYW5kIGZldGNoIGl0IGFnYWluIGlmIGl0IHdhcyBjaGFuZ2VkLlxuICAgICAgaWYgKFxuICAgICAgICBjaGVja1VzZXIgJiZcbiAgICAgICAgbWV0aG9kID09PSAncGF0Y2gnICYmXG4gICAgICAgIGVxdWFscyhyZXNvdXJjZSwgZ2V0TWVtYmVyUmVzb3VyY2UodGhpcy51c2VyLmlkLCB0aGlzLmFwaS51c2VycykpXG4gICAgICApIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yb290Q29tcG9uZW50LmZldGNoVXNlcigpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICB9LFxuXG4gICAgc2hvd0RpYWxvZyh7IGNvbXBvbmVudHMsIGJ1dHRvbnMsIGRhdGEsIHNldHRpbmdzIH0pIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3RDb21wb25lbnQuc2hvd0RpYWxvZyh7XG4gICAgICAgIGNvbXBvbmVudHMsXG4gICAgICAgIGJ1dHRvbnMsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIHNldHRpbmdzXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICByZXF1ZXN0KHsgY2FjaGUsIC4uLm9wdGlvbnMgfSkge1xuICAgICAgLy8gQWxsb3cgY2FjaGluZyBvZiBsb2FkZWQgZGF0YSBvbiB0d28gbGV2ZWxzOlxuICAgICAgLy8gLSAnZ2xvYmFsJzogY2FjaGUgZ2xvYmFsbHksIGZvciB0aGUgZW50aXJlIGFkbWluIHNlc3Npb25cbiAgICAgIC8vIC0gJ2xvY2FsJzogY2FjaGUgbG9jYWxseSB3aXRoaW4gdGhlIGNsb3Nlc3Qgcm91dGUgY29tcG9uZW50IHRoYXQgaXNcbiAgICAgIC8vICAgIGFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlIGFuZCBsb2FkcyBpdHMgb3duIGRhdGEuXG4gICAgICBjb25zdCBjYWNoZVBhcmVudCA9IChcbiAgICAgICAgY2FjaGUgJiZcbiAgICAgICAge1xuICAgICAgICAgIGdsb2JhbDogdGhpcy5hcHBTdGF0ZSxcbiAgICAgICAgICBsb2NhbDogdGhpcy5kYXRhQ29tcG9uZW50XG4gICAgICAgIH1bY2FjaGVdXG4gICAgICApXG4gICAgICBjb25zdCBsb2FkQ2FjaGUgPSBjYWNoZVBhcmVudD8ubG9hZENhY2hlXG4gICAgICAvLyBCdWlsZCBhIGNhY2hlIGtleSBmcm9tIHRoZSBjb25maWc6XG4gICAgICBjb25zdCBjYWNoZUtleSA9IChcbiAgICAgICAgbG9hZENhY2hlICYmXG4gICAgICAgIGAke1xuICAgICAgICAgIG9wdGlvbnMubWV0aG9kIHx8ICdnZXQnXG4gICAgICAgIH0gJHtcbiAgICAgICAgICBvcHRpb25zLnVybFxuICAgICAgICB9ICR7XG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5xdWVyeSB8fCAnJylcbiAgICAgICAgfSAke1xuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMuZGF0YSB8fCAnJylcbiAgICAgICAgfWBcbiAgICAgIClcbiAgICAgIGlmIChsb2FkQ2FjaGUgJiYgKGNhY2hlS2V5IGluIGxvYWRDYWNoZSkpIHtcbiAgICAgICAgcmV0dXJuIGxvYWRDYWNoZVtjYWNoZUtleV1cbiAgICAgIH1cbiAgICAgIC8vIE5PVEU6IE5vIGF3YWl0IGhlcmUsIHJlcyBpcyBhIHByb21pc2UgdGhhdCB3ZSBjYW4gZWFzaWx5IGNhY2hlLlxuICAgICAgLy8gVGhhdCdzIGZpbmUgYmVjYXVzZSBwcm9taXNlcyBjYW4gYmUgcmVzb2x2ZWQgb3ZlciBhbmQgb3ZlciBhZ2Fpbi5cbiAgICAgIGNvbnN0IHJlcyA9IHRoaXMuc2VuZFJlcXVlc3Qob3B0aW9ucylcbiAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2UuZGF0YSlcbiAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAvLyBDb252ZXJ0IGF4aW9zIGVycm9ycyB0byBub3JtYWwgZXJyb3JzXG4gICAgICAgICAgY29uc3QgZGF0YSA9IGVycm9yLnJlc3BvbnNlPy5kYXRhXG4gICAgICAgICAgdGhyb3cgZGF0YVxuICAgICAgICAgICAgPyBPYmplY3QuYXNzaWduKG5ldyBFcnJvcihkYXRhLm1lc3NhZ2UpLCBkYXRhKVxuICAgICAgICAgICAgOiBlcnJvclxuICAgICAgICB9KVxuICAgICAgaWYgKGxvYWRDYWNoZSkge1xuICAgICAgICBsb2FkQ2FjaGVbY2FjaGVLZXldID0gcmVzXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzXG4gICAgfSxcblxuICAgIGZvcm1hdCh2YWx1ZSwge1xuICAgICAgbG9jYWxlID0gdGhpcy5hcGkubG9jYWxlLFxuICAgICAgZGVmYXVsdHMgPSB0aGlzLmFwaS5mb3JtYXRzLFxuICAgICAgLi4ub3B0aW9uc1xuICAgIH0gPSB7fSkge1xuICAgICAgcmV0dXJuIGZvcm1hdCh2YWx1ZSwge1xuICAgICAgICBsb2NhbGUsXG4gICAgICAgIGRlZmF1bHRzLFxuICAgICAgICAuLi5vcHRpb25zXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBuYXZpZ2F0ZShsb2NhdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlci5wdXNoKGxvY2F0aW9uKVxuICAgIH0sXG5cbiAgICBkb3dubG9hZChvcHRpb25zID0ge30pIHtcbiAgICAgIGlmIChpc1N0cmluZyhvcHRpb25zKSkge1xuICAgICAgICBvcHRpb25zID0geyB1cmw6IG9wdGlvbnMgfVxuICAgICAgfVxuICAgICAgLy8gU2VlOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDk5MTcwNjYvMTE2MzcwOFxuICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgICAgYS5ocmVmID0gb3B0aW9ucy51cmw/LnN0YXJ0c1dpdGgoJ2Jsb2I6JylcbiAgICAgICAgPyBvcHRpb25zLnVybFxuICAgICAgICA6IHRoaXMuYXBpLmdldEFwaVVybChvcHRpb25zKVxuICAgICAgYS5kb3dubG9hZCA9IG9wdGlvbnMuZmlsZW5hbWUgPz8gbnVsbFxuICAgICAgY29uc3QgeyBib2R5IH0gPSBkb2N1bWVudFxuICAgICAgYm9keS5hcHBlbmRDaGlsZChhKVxuICAgICAgYS5jbGljaygpXG4gICAgICBib2R5LnJlbW92ZUNoaWxkKGEpXG4gICAgfSxcblxuICAgIG5vdGlmeShvcHRpb25zKSB7XG4gICAgICB0aGlzLnJvb3RDb21wb25lbnQubm90aWZ5KG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGNsb3NlTm90aWZpY2F0aW9ucygpIHtcbiAgICAgIHRoaXMucm9vdENvbXBvbmVudC5jbG9zZU5vdGlmaWNhdGlvbnMoKVxuICAgIH0sXG5cbiAgICBzZXR1cFNjaGVtYUZpZWxkcygpIHtcbiAgICAgIHRoaXMuc2V0dXBNZXRob2RzKClcbiAgICAgIHRoaXMuc2V0dXBDb21wdXRlZCgpXG4gICAgICB0aGlzLnNldHVwRXZlbnRzKClcbiAgICB9LFxuXG4gICAgc2V0dXBNZXRob2RzKCkge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEubWV0aG9kcyB8fCB7fSkpIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgICAgdGhpc1trZXldID0gdmFsdWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIG1ldGhvZCBkZWZpbml0aW9uOiAke2tleX06ICR7dmFsdWV9YClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXR1cENvbXB1dGVkKCkge1xuICAgICAgY29uc3QgZ2V0Q29tcHV0ZWRBY2Nlc3NvciA9ICh7IGdldCwgc2V0IH0pID0+IHtcbiAgICAgICAgY29uc3QgZ2V0dGVyID0gY29tcHV0ZWQoKCkgPT4gZ2V0LmNhbGwodGhpcykpXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZ2V0OiAoKSA9PiBnZXR0ZXIudmFsdWUsXG4gICAgICAgICAgc2V0OiBzZXQgPyB2YWx1ZSA9PiBzZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIGl0ZW1dIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hLmNvbXB1dGVkIHx8IHt9KSkge1xuICAgICAgICBjb25zdCBhY2Nlc3NvciA9IGlzRnVuY3Rpb24oaXRlbSlcbiAgICAgICAgICA/IGdldENvbXB1dGVkQWNjZXNzb3IoeyBnZXQ6IGl0ZW0gfSlcbiAgICAgICAgICA6IGlzT2JqZWN0KGl0ZW0pICYmIGlzRnVuY3Rpb24oaXRlbS5nZXQpXG4gICAgICAgICAgICA/IGdldENvbXB1dGVkQWNjZXNzb3IoaXRlbSlcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICBpZiAoYWNjZXNzb3IpIHtcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywga2V5LCBhY2Nlc3NvcilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgYEludmFsaWQgY29tcHV0ZWQgcHJvcGVydHkgZGVmaW5pdGlvbjogJHtrZXl9OiAke2l0ZW19YFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXR1cEV2ZW50cygpIHtcbiAgICAgIGNvbnN0IHsgd2F0Y2gsIGV2ZW50cyB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIGlmICh3YXRjaCkge1xuICAgICAgICBjb25zdCBoYW5kbGVycyA9IGlzRnVuY3Rpb24od2F0Y2gpID8gd2F0Y2guY2FsbCh0aGlzKSA6IHdhdGNoXG4gICAgICAgIGlmIChpc09iamVjdChoYW5kbGVycykpIHtcbiAgICAgICAgICAvLyBJbnN0YWxsIHRoZSB3YXRjaCBoYW5kbGVycyBpbiB0aGUgbmV4dCB0aWNrLCBzbyBhbGwgY29tcG9uZW50cyBhcmVcbiAgICAgICAgICAvLyBpbml0aWFsaXplZCBhbmQgd2UgY2FuIGNoZWNrIGFnYWluc3QgdGhlaXIgbmFtZXMuXG4gICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCBjYWxsYmFja10gb2YgT2JqZWN0LmVudHJpZXMoaGFuZGxlcnMpKSB7XG4gICAgICAgICAgICAgIC8vIEV4cGFuZCBwcm9wZXJ0eSBuYW1lcyB0byAnZGF0YS5wcm9wZXJ0eSc6XG4gICAgICAgICAgICAgIGNvbnN0IGV4cHIgPSB0aGlzLnNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRCeU5hbWUoa2V5KVxuICAgICAgICAgICAgICAgID8gYGRhdGEuJHtrZXl9YFxuICAgICAgICAgICAgICAgIDoga2V5XG4gICAgICAgICAgICAgIHRoaXMuJHdhdGNoKGV4cHIsIGNhbGxiYWNrKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgYWRkRXZlbnQgPSAoa2V5LCBldmVudCwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG4gICAgICAgICAgdGhpcy5vbihoeXBoZW5hdGUoZXZlbnQpLCBjYWxsYmFjaylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIGV2ZW50IGRlZmluaXRpb246ICR7a2V5fTogJHtjYWxsYmFja31gKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudHMpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZXZlbnRzKSkge1xuICAgICAgICAgIGFkZEV2ZW50KGtleSwga2V5LCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gQWxzbyBzY2FuIHNjaGVtYSBmb3IgYG9uW0EtWl1gLXN0eWxlIGNhbGxiYWNrcyBhbmQgYWRkIHRoZW1cbiAgICAgIC8vIFRPRE86IERlcHJlY2F0ZSBvbmUgZm9ybWF0IG9yIHRoZSBvdGhlciwgaW4gZmF2b3VyIG9mIG9ubHkgb25lIHdheSBvZlxuICAgICAgLy8gZG9pbmcgdGhpbmdzLiBEZWNpZGUgd2hpY2ggb25lIHRvIHJlbW92ZS5cbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hKSkge1xuICAgICAgICBpZiAoL15vbltBLVpdLy50ZXN0KGtleSkpIHtcbiAgICAgICAgICBhZGRFdmVudChrZXksIGtleS5zbGljZSgyKSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZW1pdEV2ZW50KGV2ZW50LCB7XG4gICAgICBjb250ZXh0ID0gbnVsbCxcbiAgICAgIHBhcmVudCA9IG51bGxcbiAgICB9ID0ge30pIHtcbiAgICAgIGNvbnN0IGhhc0xpc3RlbmVycyA9IHRoaXMuaGFzTGlzdGVuZXJzKGV2ZW50KVxuICAgICAgY29uc3QgcGFyZW50SGFzTGlzdGVuZXJzID0gcGFyZW50Py5oYXNMaXN0ZW5lcnMoZXZlbnQpXG4gICAgICBpZiAoaGFzTGlzdGVuZXJzIHx8IHBhcmVudEhhc0xpc3RlbmVycykge1xuICAgICAgICBjb25zdCBlbWl0RXZlbnQgPSB0YXJnZXQgPT5cbiAgICAgICAgICB0YXJnZXQuZW1pdChldmVudCwgKGNvbnRleHQgPSBEaXRvQ29udGV4dC5nZXQodGhpcywgY29udGV4dCkpKVxuXG4gICAgICAgIGNvbnN0IGhhbmRsZVBhcmVudExpc3RlbmVycyA9IHJlc3VsdCA9PlxuICAgICAgICAgIC8vIERvbid0IGJ1YmJsZSB0byBwYXJlbnQgaWYgaGFuZGxlZCBldmVudCByZXR1cm5lZCBgZmFsc2VgXG4gICAgICAgICAgcGFyZW50SGFzTGlzdGVuZXJzICYmIHJlc3VsdCAhPT0gZmFsc2VcbiAgICAgICAgICAgID8gZW1pdEV2ZW50KHBhcmVudCkudGhlbigoKSA9PiByZXN1bHQpXG4gICAgICAgICAgICA6IHJlc3VsdFxuXG4gICAgICAgIGNvbnN0IGhhbmRsZUxpc3RlbmVycyA9ICgpID0+XG4gICAgICAgICAgaGFzTGlzdGVuZXJzXG4gICAgICAgICAgICA/IGVtaXRFdmVudCh0aGlzKS50aGVuKGhhbmRsZVBhcmVudExpc3RlbmVycylcbiAgICAgICAgICAgIDogaGFuZGxlUGFyZW50TGlzdGVuZXJzKHVuZGVmaW5lZClcblxuICAgICAgICByZXR1cm4gWydsb2FkJywgJ2NoYW5nZSddLmluY2x1ZGVzKGV2ZW50KVxuICAgICAgICAgID8gLy8gVGhlIGVmZmVjdHMgb2Ygc29tZSBldmVudHMgbmVlZCB0aW1lIHRvIHByb3BhZ2F0ZSB0aHJvdWdoIFZ1ZS5cbiAgICAgICAgICAgIC8vIFVzZSAkbmV4dFRpY2soKSB0byBtYWtlIHN1cmUgb3VyIGhhbmRsZXJzIHNlZSB0aGVzZSBjaGFuZ2VzLlxuICAgICAgICAgICAgLy8gRm9yIGV4YW1wbGUsIGBwcm9jZXNzZWRJdGVtYCBpcyBvbmx5IGNvcnJlY3QgYWZ0ZXIgY29tcG9uZW50c1xuICAgICAgICAgICAgLy8gdGhhdCBhcmUgbmV3bHkgcmVuZGVyZWQgZHVlIHRvIGRhdGEgY2hhbmdlcyBoYXZlIHJlZ2lzdGVyZWQuXG4gICAgICAgICAgICAvLyBOT1RFOiBUaGUgcmVzdWx0IG9mIGBoYW5kbGVMaXN0ZW5lcnMoKWAgbWFrZXMgaXQgdGhyb3VnaCB0aGVcbiAgICAgICAgICAgIC8vIGAkbmV4dFRpY2soKWAgY2FsbCBhbmQgd2lsbCBiZSByZXR1cm5lZCBhcyBleHBlY3RlZC5cbiAgICAgICAgICAgIHRoaXMuJG5leHRUaWNrKGhhbmRsZUxpc3RlbmVycylcbiAgICAgICAgICA6IGhhbmRsZUxpc3RlbmVycygpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGVtaXRTY2hlbWFFdmVudChldmVudCwgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnQuZW1pdEV2ZW50KGV2ZW50LCBwYXJhbXMpXG4gICAgfVxuICB9XG59XG5cbmxldCBuZXh0VWlkID0gMFxuXG5mdW5jdGlvbiBnZXRQYXJlbnRDb21wb25lbnQoY29tcG9uZW50LCBrZXkpIHtcbiAgY29uc3QgY3VycmVudCA9IGNvbXBvbmVudFtrZXldXG4gIGxldCBwYXJlbnQgPSBjb21wb25lbnQucGFyZW50Q29tcG9uZW50XG4gIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50W2tleV0gPT09IGN1cnJlbnQpIHtcbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Q29tcG9uZW50XG4gIH1cbiAgcmV0dXJuIHBhcmVudD8uW2tleV0gPz8gbnVsbFxufVxuIiwiLy8gQSBtaW5pLXJlcGxpY2F0aW9uIG9mIHZ1ZSdzIGludGVybmFsIGByZXNvbHZlTWVyZ2VkT3B0aW9ucygpYCBidXQgb25seVxuLy8gaGFuZGxpbmcgb3VyIG93biBhZGRlZCBvcHRpb25zIHByb3BlcnRpZXMgYW5kIG1lcmdpbmcgdGhlbSBlYXJseSBpbnN0ZWFkXG4vLyBvZiBsYXppbHkuXG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlTWVyZ2VkT3B0aW9ucyhvcHRpb25zKSB7XG4gIGNvbnN0IHsgbWl4aW5zIH0gPSBvcHRpb25zXG4gIHJldHVybiBtaXhpbnMgfHwgb3B0aW9ucy5leHRlbmRzXG4gICAgPyBtZXJnZU9wdGlvbnMoXG4gICAgICAgIHsgLi4ub3B0aW9ucyB9LFxuICAgICAgICBvcHRpb25zXG4gICAgICApXG4gICAgOiBvcHRpb25zXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZU9wdGlvbnModG8sIGZyb20pIHtcbiAgaWYgKGZyb20uZXh0ZW5kcykge1xuICAgIG1lcmdlT3B0aW9ucyh0bywgZnJvbS5leHRlbmRzKVxuICB9XG4gIGlmIChmcm9tLm1peGlucykge1xuICAgIGZvciAoY29uc3QgbWl4aW4gb2YgZnJvbS5taXhpbnMpIHtcbiAgICAgIG1lcmdlT3B0aW9ucyh0bywgbWl4aW4pXG4gICAgfVxuICB9XG4gIGZvciAoY29uc3Qga2V5IG9mIGRpdG9PcHRpb25LZXlzKSB7XG4gICAgaWYgKGtleSBpbiBmcm9tKSB7XG4gICAgICB0b1trZXldID0gZnJvbVtrZXldXG4gICAgfVxuICB9XG4gIHJldHVybiB0b1xufVxuXG5jb25zdCBkaXRvT3B0aW9uS2V5cyA9IFtcbiAgJ2RlZmF1bHRWYWx1ZScsXG4gICdkZWZhdWx0TmVzdGVkJyxcbiAgJ2RlZmF1bHRWaXNpYmxlJyxcbiAgJ2dlbmVyYXRlTGFiZWwnLFxuICAnZXhjbHVkZVZhbHVlJyxcbiAgJ2lnbm9yZU1pc3NpbmdWYWx1ZScsXG4gICdvbWl0U3BhY2luZycsXG4gICdwcm9jZXNzVmFsdWUnLFxuICAncHJvY2Vzc1NjaGVtYScsXG4gICdnZXRQYW5lbFNjaGVtYScsXG4gICdnZXRGb3JtU2NoZW1hc0ZvclByb2Nlc3NpbmcnLFxuICAvLyBWdWUgMyAvIFZ1ZS1yb3V0ZXIgNCBmb3JnZXRzIHRoZXNlLlxuICAvLyBUT0RPOiBDcmVhdGUgYnVnLXJlcG9ydD9cbiAgJ2JlZm9yZVJvdXRlVXBkYXRlJyxcbiAgJ2JlZm9yZVJvdXRlTGVhdmUnXG5dXG4iLCJpbXBvcnQgRGl0b01peGluIGZyb20gJy4vbWl4aW5zL0RpdG9NaXhpbi5qcydcbmltcG9ydCB7IGdldFR5cGVDb21wb25lbnQgfSBmcm9tICcuL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IHJlc29sdmVNZXJnZWRPcHRpb25zIH0gZnJvbSAnLi91dGlscy9vcHRpb25zLmpzJ1xuaW1wb3J0IHsgaXNQbGFpbk9iamVjdCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmNvbnN0IGNvbXBvbmVudHMgPSB7fVxuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtEaXRvTWl4aW5dLFxuICAvLyBNYWtlIHN1cmUgdGhhdCByZWdpc3RlcmVkIGNvbXBvbmVudHMgYXJlIHByZXNlbnQgaW4gYWxsIERpdG9Db21wb25lbnQuXG4gIGNvbXBvbmVudHMsXG5cbiAgY29tcG9uZW50KG5hbWUsIGRlZmluaXRpb24pIHtcbiAgICBpZiAoZGVmaW5pdGlvbikge1xuICAgICAgaWYgKGlzUGxhaW5PYmplY3QoZGVmaW5pdGlvbikpIHtcbiAgICAgICAgZGVmaW5pdGlvbiA9IHJlc29sdmVNZXJnZWRPcHRpb25zKHtcbiAgICAgICAgICBleHRlbmRzOiB0aGlzLFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgLi4uZGVmaW5pdGlvblxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgY29tcG9uZW50c1tuYW1lXSA9IGRlZmluaXRpb25cbiAgICB9XG4gICAgaWYgKCEobmFtZSBpbiBjb21wb25lbnRzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgXCIke25hbWV9XCIgbm90IHJlZ2lzdGVyZWRgKVxuICAgIH1cbiAgICByZXR1cm4gY29tcG9uZW50c1tuYW1lXVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRUeXBlQ29tcG9uZW50XG4gIH1cbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBkZXNjcmliZURhdGUoZGF0ZSkge1xuICByZXR1cm4ge1xuICAgIHllYXI6IGRhdGU/LmdldEZ1bGxZZWFyKCkgPz8gMCxcbiAgICBtb250aDogZGF0ZT8uZ2V0TW9udGgoKSA/PyAwLFxuICAgIGRheTogZGF0ZT8uZ2V0RGF0ZSgpID8/IDAsXG4gICAgaG91cjogZGF0ZT8uZ2V0SG91cnMoKSA/PyAwLFxuICAgIG1pbnV0ZTogZGF0ZT8uZ2V0TWludXRlcygpID8/IDAsXG4gICAgc2Vjb25kOiBkYXRlPy5nZXRTZWNvbmRzKCkgPz8gMCxcbiAgICBtaWxsaXNlY29uZDogZGF0ZT8uZ2V0TWlsbGlzZWNvbmRzKCkgPz8gMFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbHRlckRhdGUoZGF0ZSwgb3ZlcnJpZGVzID0ge30pIHtcbiAgcmV0dXJuIG5ldyBEYXRlKC4uLk9iamVjdC52YWx1ZXMoeyAuLi5kZXNjcmliZURhdGUoZGF0ZSksIC4uLm92ZXJyaWRlcyB9KSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGF0ZShzdHJpbmcsIHtcbiAgbG9jYWxlID0gJ2VuLVVTJyxcbiAgZGF0ZSA9IHRydWUsXG4gIHRpbWUgPSB0cnVlXG59ID0ge30pIHtcbiAgY29uc3QgdGltZURlZmF1bHQgPSB0aW1lID8gbnVsbCA6IDBcbiAgbGV0IFtcbiAgICBkYXksXG4gICAgc2VwMSxcbiAgICBtb250aCxcbiAgICBzZXAyLFxuICAgIHllYXIsXG4gICAgLFxuICAgIGhvdXIgPSB0aW1lRGVmYXVsdCxcbiAgICAsXG4gICAgbWludXRlID0gdGltZURlZmF1bHQsXG4gICAgLFxuICAgIHNlY29uZCA9IHRpbWVEZWZhdWx0LFxuICAgICxcbiAgICBtaWxsaXNlY29uZCA9IHRpbWVEZWZhdWx0XG4gIF0gPSBnZXREYXRlUGFydHMoc3RyaW5nLCB7IGRhdGUsIHRpbWUgfSlcbiAgaWYgKHllYXIgJiYgeWVhci5sZW5ndGggPj0gNCkge1xuICAgIGlmIChsb2NhbGUgPT09ICdlbi1VUycgJiYgc2VwMSA9PT0gJy8nICYmIHNlcDIgPT09ICcvJykge1xuICAgICAgLy8gQW1lcmljYW4gZm9ybWF0OiBNTS9ERC9ZWVlZXG4gICAgICA7W2RheSwgbW9udGhdID0gW21vbnRoLCBkYXldXG4gICAgfVxuICAgIG1vbnRoID0gZ2V0TW9udGhJbmRleChtb250aCwgeyBsb2NhbGUgfSlcbiAgICBjb25zdCBpc1ZhbGlkVGltZVBhcnQgPSBwYXJ0ID0+IHBhcnQgPT09IG51bGwgfHwgcGFydC5sZW5ndGggPT09IDJcbiAgICBpZiAoXG4gICAgICBtb250aCAhPT0gbnVsbCAmJiAoXG4gICAgICAgICF0aW1lIHx8IChcbiAgICAgICAgICBpc1ZhbGlkVGltZVBhcnQoaG91cikgJiZcbiAgICAgICAgICBpc1ZhbGlkVGltZVBhcnQobWludXRlKSAmJlxuICAgICAgICAgIGlzVmFsaWRUaW1lUGFydChzZWNvbmQpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShcbiAgICAgICAgK3llYXIsXG4gICAgICAgICttb250aCxcbiAgICAgICAgK2RheSxcbiAgICAgICAgK2hvdXIsXG4gICAgICAgICttaW51dGUsXG4gICAgICAgICtzZWNvbmQsXG4gICAgICAgICttaWxsaXNlY29uZFxuICAgICAgKVxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0ZVBhcnRBdFBvc2l0aW9uKHN0cmluZywgcG9zaXRpb24sIHtcbiAgbG9jYWxlID0gJ2VuLVVTJyxcbiAgZGF0ZSA9IHRydWUsXG4gIHRpbWUgPSB0cnVlXG59ID0ge30pIHtcbiAgY29uc3QgcGFydHMgPSBnZXREYXRlUGFydHMoc3RyaW5nLCB7IGRhdGUsIHRpbWUgfSlcblxuICBjb25zdCBnZXRQb3NpdGlvbiA9IChwb3NpdGlvbiwgbGVuZ3RoID0gcGFydHMubGVuZ3RoKSA9PiB7XG4gICAgbGV0IHBvcyA9IDBcbiAgICBsZXQgaW5kZXggPSAwXG4gICAgd2hpbGUgKChwb3NpdGlvbiA9PT0gbnVsbCB8fCBwb3MgPD0gcG9zaXRpb24pICYmIGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBwb3MgKz0gcGFydHNbaW5kZXgrK10/Lmxlbmd0aCA/PyAwXG4gICAgfVxuICAgIHJldHVybiB7IHBvc2l0aW9uOiBwb3MsIGluZGV4IH1cbiAgfVxuXG4gIC8vIFRpbWUgc3RhcnRzIGF0IGluZGV4IDYsIGR1ZSB0byB0aGUgc2VwYXJhdG9yIGFmdGVyIHRoZSBkYXRlLlxuICBjb25zdCBvZmZzZXQgPSAhZGF0ZSA/IGdldFBvc2l0aW9uKG51bGwsIDYpLnBvc2l0aW9uIDogMFxuICBwb3NpdGlvbiArPSBvZmZzZXRcblxuICBsZXQgeyBpbmRleCB9ID0gZ2V0UG9zaXRpb24ocG9zaXRpb24pXG5cbiAgY29uc3QgaXNVUyA9IGxvY2FsZSA9PT0gJ2VuLVVTJ1xuICBjb25zdCB2YWx1ZXMgPSBbXG4gICAgaXNVUyA/ICdtb250aCcgOiAnZGF5JyxcbiAgICBudWxsLFxuICAgIGlzVVMgPyAnZGF5JyA6ICdtb250aCcsXG4gICAgbnVsbCxcbiAgICAneWVhcicsXG4gICAgbnVsbCxcbiAgICAnaG91cicsXG4gICAgbnVsbCxcbiAgICAnbWludXRlJyxcbiAgICBudWxsLFxuICAgICdzZWNvbmQnLFxuICAgIG51bGwsXG4gICAgJ21pbGxpc2Vjb25kJ1xuICBdXG4gIHdoaWxlIChpbmRleC0tKSB7XG4gICAgaWYgKHZhbHVlc1tpbmRleF0pIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gZ2V0UG9zaXRpb24obnVsbCwgaW5kZXgpLnBvc2l0aW9uIC0gb2Zmc2V0XG4gICAgICBjb25zdCBlbmQgPSBzdGFydCArIHBhcnRzW2luZGV4XS5sZW5ndGhcbiAgICAgIHJldHVybiB7IG5hbWU6IHZhbHVlc1tpbmRleF0sIHN0YXJ0LCBlbmQgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5mdW5jdGlvbiBnZXREYXRlUGFydHMoc3RyaW5nLCB7IGRhdGUgPSB0cnVlLCB0aW1lID0gdHJ1ZSB9ID0ge30pIHtcbiAgY29uc3QgcGFydHMgPSBzdHJpbmc/LnNwbGl0KC8oW1xccy4sOi9dKykvKSB8fCBbXVxuICBpZiAoIWRhdGUpIHtcbiAgICAvLyBBZGQgZHVtbXkgZGF0ZSBwYXJ0cyB0byBtYWtlIHN1cmUgd2UgZ2V0IGEgdGltZS1vbmx5IGRhdGUuXG4gICAgcGFydHMudW5zaGlmdCgnMScsICcuJywgJzEnLCAnLicsICcyMDAwJywgJyAnKVxuICB9XG4gIGlmICghdGltZSAmJiBwYXJ0cy5sZW5ndGggPiA1KSB7XG4gICAgcGFydHMubGVuZ3RoID0gNVxuICB9XG4gIHJldHVybiBwYXJ0c1xufVxuXG5mdW5jdGlvbiBnZXRNb250aEluZGV4KG1vbnRoLCB7IGxvY2FsZSA9ICdlbi1VUycgfSA9IHt9KSB7XG4gIGNvbnN0IHZhbHVlID0gK21vbnRoXG4gIGlmICghaXNOYU4odmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlIC0gMVxuICB9XG4gIGNvbnN0IG1hdGNoID0gbW9udGgudHJpbSgpLnRvTG93ZXJDYXNlKClcbiAgaWYgKG1hdGNoLmxlbmd0aCA8IDMpIHJldHVybiBudWxsXG4gIGNvbnN0IHNob3J0Rm9ybWF0ID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQobG9jYWxlLCB7IG1vbnRoOiAnc2hvcnQnIH0pXG4gIGNvbnN0IGxvbmdGb3JtYXQgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChsb2NhbGUsIHsgbW9udGg6ICdsb25nJyB9KVxuICBmb3IgKGxldCBpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoMjAwMCwgaSwgMSlcbiAgICBpZiAoXG4gICAgICBzaG9ydEZvcm1hdC5mb3JtYXQoZGF0ZSkudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKG1hdGNoKSB8fFxuICAgICAgbG9uZ0Zvcm1hdC5mb3JtYXQoZGF0ZSkudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKG1hdGNoKVxuICAgICkge1xuICAgICAgcmV0dXJuIGlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cbiIsIjwhLS0gRGVyaXZlZCBmcm9tIEFUVUksIGFuZCBmdXJ0aGVyIGV4dGVuZGVkOiBodHRwczovL2FsaXFpbi5naXRodWIuaW8vYXR1aS8gLS0+XG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tY2FsZW5kYXJcbiAgLmRpdG8tY2FsZW5kYXItcG9wdXBcbiAgICAuZGl0by1jYWxlbmRhci1pbm5lclxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtaWY9XCJjdXJyZW50TW9kZSA9PT0gJ2RheSdcIlxuICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1oZWFkZXJcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2LmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyKFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoLTEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldi5kaXRvLWNhbGVuZGFyLXN0ZXAtbW9udGgoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwTW9udGgoLTEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgc3BhblxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC15ZWFyKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZXRNb2RlKCd5ZWFyJylcIlxuICAgICAgICAgICAgKSB7eyBkYXRlVG9TdHJpbmcoY3VycmVudFZhbHVlLCB7IHllYXI6IHRydWUgfSkgfX1cbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QtbW9udGgoXG4gICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ21vbnRoJylcIlxuICAgICAgICAgICAgKSB7eyBkYXRlVG9TdHJpbmcoY3VycmVudFZhbHVlLCB7IG1vbnRoOiB0cnVlIH0pIH19XG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dC5kaXRvLWNhbGVuZGFyLXN0ZXAtbW9udGgoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwTW9udGgoMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0LmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyKFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLXdlZWtkYXlzXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWZvcj1cIndlZWtkYXkgaW4gd2Vla2RheU5hbWVzXCJcbiAgICAgICAgICAgICkge3sgd2Vla2RheS5zaG9ydCB9fVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLWRhdGVzXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWZvcj1cImRhdGUgaW4gZGF0ZVJhbmdlXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwiZGF0ZS5zdGF0ZSAmJiBgZGl0by1jYWxlbmRhci1pdGVtLSR7ZGF0ZS5zdGF0ZX1gXCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwiZGF0ZS5zdGF0ZSAhPT0gJ2Rpc2FibGVkJyAmJiBzZWxlY3REYXRlKGRhdGUuZGF0ZSlcIlxuICAgICAgICAgICAgKSB7eyBkYXRlLnRleHQgfX1cbiAgICAgICAgLmRpdG8tY2FsZW5kYXItZm9vdGVyXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC1ub3coXG4gICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIDp0aXRsZT1cImRhdGVUb1N0cmluZyhuZXcgRGF0ZSgpKVwiXG4gICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3REYXRlKG5ldyBEYXRlKCkpXCJcbiAgICAgICAgICApXG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1lbHNlLWlmPVwiY3VycmVudE1vZGUgPT09ICdtb250aCdcIlxuICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1oZWFkZXJcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2KFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoLTEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgc3BhblxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC15ZWFyKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZXRNb2RlKCd5ZWFyJylcIlxuICAgICAgICAgICAgKSB7eyBkYXRlVG9TdHJpbmcoY3VycmVudFZhbHVlLCB7IHllYXI6IHRydWUgfSkgfX1cbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0KFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLW1vbnRoc1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCIobW9udGgsIGluZGV4KSBpbiBtb250aE5hbWVzXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwiZ2V0TW9udGhDbGFzcyhpbmRleClcIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3RNb250aChpbmRleClcIlxuICAgICAgICAgICAgKSB7eyBtb250aC5zaG9ydCB9fVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtZWxzZS1pZj1cImN1cnJlbnRNb2RlID09PSAneWVhcidcIlxuICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1oZWFkZXJcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2KFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcERlY2FkZSgtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBzcGFuIHt7IGRlY2FkZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSkgfX1cbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0KFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcERlY2FkZSgxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXIteWVhcnNcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZm9yPVwieWVhciBpbiB5ZWFyUmFuZ2VcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRZZWFyQ2xhc3MoeWVhcilcIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3RZZWFyKHllYXIpXCJcbiAgICAgICAgICAgICkge3sgeWVhciB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGRlc2NyaWJlRGF0ZSwgYWx0ZXJEYXRlIH0gZnJvbSAnLi4vdXRpbHMvZGF0ZS5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZScsICdzZWxlY3QnXSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGxvY2FsZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdlbi1VUycgfSxcbiAgICBkaXNhYmxlZERhdGU6IHsgdHlwZTogRnVuY3Rpb24sIGRlZmF1bHQ6ICgpID0+IGZhbHNlIH0sXG4gICAgbW9kZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdkYXknIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIGNvbnN0IHsgd2Vla2RheU5hbWVzLCBtb250aE5hbWVzIH0gPSBnZXRMb2NhbGVOYW1lcyh0aGlzLmxvY2FsZSlcbiAgICByZXR1cm4ge1xuICAgICAgd2Vla2RheU5hbWVzLFxuICAgICAgbW9udGhOYW1lcyxcbiAgICAgIGRhdGVSYW5nZTogW10sXG4gICAgICB5ZWFyUmFuZ2U6IFtdLFxuICAgICAgY3VycmVudFZhbHVlOiAoXG4gICAgICAgIHRoaXMubW9kZWxWYWx1ZSB8fFxuICAgICAgICAvLyBJZiBubyB2YWx1ZSBpcyBwcm92aWRlZCwgdXNlIGN1cnJlbnQgZGF0ZSBidXQgY2xlYXIgdGltZSBmaWVsZHM6XG4gICAgICAgIGFsdGVyRGF0ZShuZXcgRGF0ZSgpLCB7IGhvdXI6IDAsIG1pbnV0ZTogMCwgc2Vjb25kOiAwLCBtaWxsaXNlY29uZDogMCB9KVxuICAgICAgKSxcbiAgICAgIGN1cnJlbnRNb2RlOiB0aGlzLm1vZGVcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAoK3RvICE9PSArZnJvbSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRvIHx8IG5ldyBEYXRlKClcbiAgICAgICAgdGhpcy51cGRhdGVEYXRlUmFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VmFsdWUodG8sIGZyb20pIHtcbiAgICAgIGlmICgrdG8gIT09ICtmcm9tKSB7XG4gICAgICAgIHRoaXMudXBkYXRlRGF0ZVJhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGlzYWJsZWREYXRlOiAndXBkYXRlRGF0ZVJhbmdlJyxcblxuICAgIG1vZGUobW9kZSkge1xuICAgICAgdGhpcy5jdXJyZW50TW9kZSA9IG1vZGVcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLnVwZGF0ZURhdGVSYW5nZSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldE1vbnRoQ2xhc3MobW9udGgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLWNhbGVuZGFyLWl0ZW0tYWN0aXZlJzogKFxuICAgICAgICAgIHRoaXMubW9kZWxWYWx1ZSAmJlxuICAgICAgICAgIG1vbnRoID09PSB0aGlzLm1vZGVsVmFsdWUuZ2V0TW9udGgoKSAmJlxuICAgICAgICAgIHRoaXMuY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCkgPT09IHRoaXMubW9kZWxWYWx1ZS5nZXRGdWxsWWVhcigpXG4gICAgICAgICksXG4gICAgICAgICdkaXRvLWNhbGVuZGFyLWl0ZW0tY3VycmVudCc6IG1vbnRoID09PSB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRNb250aCgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldFllYXJDbGFzcyh5ZWFyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1jYWxlbmRhci1pdGVtLWFjdGl2ZSc6IChcbiAgICAgICAgICB0aGlzLm1vZGVsVmFsdWUgJiYgeWVhciA9PT0gdGhpcy5tb2RlbFZhbHVlLmdldEZ1bGxZZWFyKClcbiAgICAgICAgKSxcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1jdXJyZW50JzogeWVhciA9PT0gdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXREYXRlKG92ZXJyaWRlcywgdXBkYXRlID0gZmFsc2UpIHtcbiAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gYWx0ZXJEYXRlKHRoaXMuY3VycmVudFZhbHVlLCBvdmVycmlkZXMpXG4gICAgICBpZiAodXBkYXRlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgdGhpcy5jdXJyZW50VmFsdWUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHN0ZXBEZWNhZGUoc3RlcCkge1xuICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgeWVhcjogdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSArIHN0ZXAgKiAxMFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc2V0TW9kZShtb2RlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRNb2RlID0gbW9kZVxuICAgIH0sXG5cbiAgICBzdGVwTW9udGgoc3RlcCkge1xuICAgICAgY29uc3QgeyBjdXJyZW50VmFsdWUgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHsgeWVhciwgbW9udGggfSA9IHRoaXMuZ2V0WWVhck1vbnRoKFxuICAgICAgICBjdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgY3VycmVudFZhbHVlLmdldE1vbnRoKCkgKyBzdGVwXG4gICAgICApXG4gICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICBtb250aCxcbiAgICAgICAgZGF5OiBNYXRoLm1pbihcbiAgICAgICAgICB0aGlzLmdldERheXNJbk1vbnRoKHllYXIsIG1vbnRoKSxcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZS5nZXREYXRlKClcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc3RlcFllYXIoc3RlcCkge1xuICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgeWVhcjogdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSArIHN0ZXBcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHNlbGVjdERhdGUoZGF0ZSkge1xuICAgICAgdGhpcy5zZXREYXRlKGRlc2NyaWJlRGF0ZShkYXRlKSwgdHJ1ZSlcbiAgICAgIHRoaXMuJGVtaXQoJ3NlbGVjdCcpXG4gICAgfSxcblxuICAgIHNlbGVjdE1vbnRoKG1vbnRoKSB7XG4gICAgICB0aGlzLnNldE1vZGUoJ2RheScpXG4gICAgICAvLyBTZXQgZGF5IHRvIDEgdG8gYXZvaWQgc2VsZWN0aW5nIGEgZGF0ZSB0aGF0IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlXG4gICAgICAvLyBuZXcgbW9udGgsIGUuZy4gRmViIDMxIC0+IE1hciAzLlxuICAgICAgdGhpcy5zZXREYXRlKHsgbW9udGgsIGRheTogMSB9LCB0cnVlKVxuICAgIH0sXG5cbiAgICBzZWxlY3RZZWFyKHllYXIpIHtcbiAgICAgIHRoaXMuc2V0TW9kZSgnbW9udGgnKVxuICAgICAgdGhpcy5zZXREYXRlKHsgeWVhciB9LCB0cnVlKVxuICAgIH0sXG5cbiAgICBnZXRZZWFyTW9udGgoeWVhciwgbW9udGgpIHtcbiAgICAgIGlmIChtb250aCA+IDExKSB7XG4gICAgICAgIHllYXIrK1xuICAgICAgICBtb250aCA9IDBcbiAgICAgIH0gZWxzZSBpZiAobW9udGggPCAwKSB7XG4gICAgICAgIHllYXItLVxuICAgICAgICBtb250aCA9IDExXG4gICAgICB9XG4gICAgICByZXR1cm4geyB5ZWFyLCBtb250aCB9XG4gICAgfSxcblxuICAgIGRhdGVUb1N0cmluZyhcbiAgICAgIGRhdGUsXG4gICAgICB7IHllYXIsIG1vbnRoLCBkYXkgfSA9IHsgeWVhcjogdHJ1ZSwgbW9udGg6IHRydWUsIGRheTogdHJ1ZSB9XG4gICAgKSB7XG4gICAgICByZXR1cm4gZGF0ZS50b0xvY2FsZVN0cmluZyh0aGlzLmxvY2FsZSwge1xuICAgICAgICB5ZWFyOiB5ZWFyICYmICdudW1lcmljJyxcbiAgICAgICAgbW9udGg6IG1vbnRoICYmICdsb25nJyxcbiAgICAgICAgZGF5OiBkYXkgJiYgJ251bWVyaWMnXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBkZWNhZGVUb1N0cmluZyhkYXRlKSB7XG4gICAgICBjb25zdCB5ZWFyID0gdGhpcy5nZXRGaXJzdFllYXJPZkRlY2FkZShkYXRlLmdldEZ1bGxZZWFyKCkpXG4gICAgICByZXR1cm4gYCR7eWVhcn0g4oCTICR7eWVhciArIDl9YFxuICAgIH0sXG5cbiAgICBnZXREYXlzSW5Nb250aCh5ZWFyLCBtb250aCkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKHllYXIsIG1vbnRoICsgMSwgMCkuZ2V0RGF0ZSgpXG4gICAgfSxcblxuICAgIGdldEZpcnN0WWVhck9mRGVjYWRlKHllYXIpIHtcbiAgICAgIGNvbnN0IHllYXJTdHIgPSB5ZWFyLnRvU3RyaW5nKClcbiAgICAgIHJldHVybiArYCR7eWVhclN0ci5zbGljZSgwLCAtMSl9MGBcbiAgICB9LFxuXG4gICAgbmF2aWdhdGUoeyBzdGVwLCBlbnRlciwgbW9kZSA9IHRoaXMuY3VycmVudE1vZGUsIHVwZGF0ZSA9IGZhbHNlIH0pIHtcbiAgICAgIGNvbnN0IHsgY3VycmVudFZhbHVlIH0gPSB0aGlzXG4gICAgICBpZiAoc3RlcCkge1xuICAgICAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgdGhpcy5zZXREYXRlKHsgZGF5OiBjdXJyZW50VmFsdWUuZ2V0RGF0ZSgpICsgc3RlcCB9LCB1cGRhdGUpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZSh7IG1vbnRoOiBjdXJyZW50VmFsdWUuZ2V0TW9udGgoKSArIHN0ZXAgfSwgdXBkYXRlKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZSh7IHllYXI6IGN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpICsgc3RlcCB9LCB1cGRhdGUpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9IGVsc2UgaWYgKGVudGVyKSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5jdXJyZW50TW9kZSkge1xuICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICB0aGlzLnNlbGVjdERhdGUoY3VycmVudFZhbHVlKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICB0aGlzLnNldE1vZGUoJ2RheScpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgdGhpcy5zZXRNb2RlKCdtb250aCcpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIHVwZGF0ZURhdGVSYW5nZSgpIHtcbiAgICAgIHRoaXMuZGF0ZVJhbmdlID0gW11cbiAgICAgIHRoaXMueWVhclJhbmdlID0gW11cblxuICAgICAgY29uc3QgeyBjdXJyZW50VmFsdWUgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHllYXIgPSBjdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKVxuICAgICAgY29uc3QgbW9udGggPSBjdXJyZW50VmFsdWUuZ2V0TW9udGgoKVxuICAgICAgY29uc3Qgc3RhcnRZZWFyID0gdGhpcy5nZXRGaXJzdFllYXJPZkRlY2FkZSh5ZWFyKVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG4gICAgICAgIHRoaXMueWVhclJhbmdlLnB1c2goc3RhcnRZZWFyICsgaSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGN1cnJNb250aEZpcnN0RGF5ID0gbmV3IERhdGUoeWVhciwgbW9udGgsIDEpXG4gICAgICBsZXQgZmlyc3REYXlXZWVrID0gY3Vyck1vbnRoRmlyc3REYXkuZ2V0RGF5KCkgKyAxXG4gICAgICBpZiAoZmlyc3REYXlXZWVrID09PSAwKSB7XG4gICAgICAgIGZpcnN0RGF5V2VlayA9IDdcbiAgICAgIH1cbiAgICAgIGNvbnN0IG51bURheXMgPSB0aGlzLmdldERheXNJbk1vbnRoKHllYXIsIG1vbnRoKVxuICAgICAgaWYgKGZpcnN0RGF5V2VlayA+IDEpIHtcbiAgICAgICAgY29uc3QgcHJldk1vbnRoID0gdGhpcy5nZXRZZWFyTW9udGgoeWVhciwgbW9udGggLSAxKVxuICAgICAgICBjb25zdCBwcmV2TW9udGhOdW1EYXlzID0gdGhpcy5nZXREYXlzSW5Nb250aChcbiAgICAgICAgICBwcmV2TW9udGgueWVhcixcbiAgICAgICAgICBwcmV2TW9udGgubW9udGhcbiAgICAgICAgKVxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGZpcnN0RGF5V2VlazsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZGF5ID0gcHJldk1vbnRoTnVtRGF5cyAtIGZpcnN0RGF5V2VlayArIGkgKyAxXG4gICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHByZXZNb250aC55ZWFyLCBwcmV2TW9udGgubW9udGgsIGRheSlcbiAgICAgICAgICB0aGlzLmRhdGVSYW5nZS5wdXNoKHtcbiAgICAgICAgICAgIHRleHQ6IGRheSxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBzdGF0ZTogdGhpcy5kaXNhYmxlZERhdGUoZGF0ZSkgPyAnZGlzYWJsZWQnIDogJ2dyYXknXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpXG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBudW1EYXlzOyBpKyspIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCBpKVxuICAgICAgICBjb25zdCBpc0RheSA9IGRhdGUgPT4gKFxuICAgICAgICAgIGRhdGUgJiZcbiAgICAgICAgICBkYXRlLmdldERhdGUoKSA9PT0gaSAmJlxuICAgICAgICAgIGRhdGUuZ2V0RnVsbFllYXIoKSA9PT0geWVhciAmJlxuICAgICAgICAgIGRhdGUuZ2V0TW9udGgoKSA9PT0gbW9udGhcbiAgICAgICAgKVxuICAgICAgICBjb25zdCBzdGF0ZSA9IGlzRGF5KHRoaXMubW9kZWxWYWx1ZSlcbiAgICAgICAgICA/ICdhY3RpdmUnXG4gICAgICAgICAgOiBpc0RheShub3cpXG4gICAgICAgICAgICA/ICd0b2RheSdcbiAgICAgICAgICAgIDogdGhpcy5kaXNhYmxlZERhdGUoZGF0ZSlcbiAgICAgICAgICAgICAgPyAnZGlzYWJsZWQnXG4gICAgICAgICAgICAgIDogaXNEYXkoY3VycmVudFZhbHVlKVxuICAgICAgICAgICAgICAgID8gJ2N1cnJlbnQnXG4gICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgIHRoaXMuZGF0ZVJhbmdlLnB1c2goe1xuICAgICAgICAgIHRleHQ6IGksXG4gICAgICAgICAgZGF0ZSxcbiAgICAgICAgICBzdGF0ZVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXh0TW9udGhOZWVkID0gNDIgLSB0aGlzLmRhdGVSYW5nZS5sZW5ndGhcbiAgICAgIGlmIChuZXh0TW9udGhOZWVkID4gMCkge1xuICAgICAgICBjb25zdCBuZXh0TW9udGggPSB0aGlzLmdldFllYXJNb250aCh5ZWFyLCBtb250aCArIDEpXG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG5leHRNb250aE5lZWQ7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShuZXh0TW9udGgueWVhciwgbmV4dE1vbnRoLm1vbnRoLCBpKVxuICAgICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5kaXNhYmxlZERhdGUoZGF0ZSkgPyAnZGlzYWJsZWQnIDogJ2dyYXknXG4gICAgICAgICAgdGhpcy5kYXRlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgICB0ZXh0OiBpLFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5jb25zdCBsb2NhbGVOYW1lcyA9IHt9XG5cbi8vIENhbGxpbmcgYHRvTG9jYWxlU3RyaW5nKClgIHRoaXMgbXVjaCBhcHBlYXJzIHRvIGJlIGV4cGVuc2l2ZSwgc28gY2FjaGUgaXQ6XG5mdW5jdGlvbiBnZXRMb2NhbGVOYW1lcyhsb2NhbGUpIHtcbiAgbGV0IG5hbWVzID0gbG9jYWxlTmFtZXNbbG9jYWxlXVxuICBpZiAoIW5hbWVzKSB7XG4gICAgY29uc3Qgd2Vla2RheU5hbWVzID0gW11cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKDAsIDAsIGkpXG4gICAgICB3ZWVrZGF5TmFtZXMucHVzaCh7XG4gICAgICAgIGxvbmc6IGRhdGUudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IHdlZWtkYXk6ICdsb25nJyB9KSxcbiAgICAgICAgc2hvcnQ6IGRhdGUudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IHdlZWtkYXk6ICdzaG9ydCcgfSlcbiAgICAgIH0pXG4gICAgfVxuICAgIGNvbnN0IG1vbnRoTmFtZXMgPSBbXVxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IDEyOyBpKyspIHtcbiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgwLCBpLCAwKVxuICAgICAgbW9udGhOYW1lcy5wdXNoKHtcbiAgICAgICAgbG9uZzogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgbW9udGg6ICdsb25nJyB9KSxcbiAgICAgICAgc2hvcnQ6IGRhdGUudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IG1vbnRoOiAnc2hvcnQnIH0pXG4gICAgICB9KVxuICAgIH1cbiAgICBuYW1lcyA9IGxvY2FsZU5hbWVzW2xvY2FsZV0gPSB7XG4gICAgICB3ZWVrZGF5TmFtZXMsXG4gICAgICBtb250aE5hbWVzXG4gICAgfVxuICB9XG4gIHJldHVybiBuYW1lc1xufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tY2FsZW5kYXIge1xuICBtaW4td2lkdGg6IDI0MHB4O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG4uZGl0by1jYWxlbmRhci1wb3B1cCB7XG4gIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgYm94LXNoYWRvdzogJHNoYWRvdy13aW5kb3c7XG4gIHotaW5kZXg6ICR6LWluZGV4LXBvcHVwO1xufVxuXG4uZGl0by1jYWxlbmRhci1ib2R5IHtcbiAgcGFkZGluZzogMCAwLjVlbTtcblxuICBzcGFuIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2lkdGg6IGNhbGMoMTAwJSAvIDcpO1xuICAgIGhlaWdodDogJGlucHV0LWhlaWdodDtcbiAgICBsaW5lLWhlaWdodDogY2FsYygjeyRpbnB1dC1oZWlnaHR9IC0gMnB4KTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cblxuICAuZGl0by1jYWxlbmRhci1pdGVtLXRvZGF5IHtcbiAgICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgJGNvbG9yLWFjdGl2ZTtcbiAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgfVxuXG4gIC5kaXRvLWNhbGVuZGFyLWl0ZW0tYWN0aXZlIHtcbiAgICAmLFxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZTtcbiAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICB9XG4gIH1cblxuICAuZGl0by1jYWxlbmRhci1pdGVtLWRpc2FibGVkIHtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gIH1cblxuICAuZGl0by1jYWxlbmRhci1pdGVtLWRpc2FibGVkLFxuICAuZGl0by1jYWxlbmRhci1pdGVtLWdyYXkge1xuICAgIGNvbG9yOiAjOTk5OTk5O1xuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLW1vbnRocyxcbi5kaXRvLWNhbGVuZGFyLXllYXJzIHtcbiAgc3BhbiB7XG4gICAgd2lkdGg6IGNhbGMoMTAwJSAvIDQpO1xuICAgIG1hcmdpbjogMC41ZW0gMDtcbiAgfVxufVxuXG4uZGl0by1jYWxlbmRhci15ZWFycyBzcGFuIHtcbiAgd2lkdGg6IGNhbGMoMTAwJSAvIDUpO1xufVxuXG4uZGl0by1jYWxlbmRhciBhLFxuLmRpdG8tY2FsZW5kYXItZGF0ZXMgc3Bhbixcbi5kaXRvLWNhbGVuZGFyLW1vbnRocyBzcGFuLFxuLmRpdG8tY2FsZW5kYXIteWVhcnMgc3BhbiB7XG4gIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLmRpdG8tY2FsZW5kYXItaGVhZGVyIHNwYW4ge1xuICBjdXJzb3I6IGRlZmF1bHQ7XG5cbiAgYSB7XG4gICAgcGFkZGluZzogMCAwLjJlbTtcbiAgfVxufVxuXG4uZGl0by1jYWxlbmRhci1kYXRlcyBzcGFuOmhvdmVyLFxuLmRpdG8tY2FsZW5kYXItbW9udGhzIHNwYW46aG92ZXIsXG4uZGl0by1jYWxlbmRhci15ZWFycyBzcGFuOmhvdmVyLFxuLmRpdG8tY2FsZW5kYXI6bm90KDpob3ZlcikgLmRpdG8tY2FsZW5kYXItaXRlbS1jdXJyZW50IHtcbiAgYmFja2dyb3VuZDogJGNvbG9yLWhpZ2hsaWdodDtcbn1cblxuLmRpdG8tY2FsZW5kYXItd2Vla2RheXMgc3BhbiB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcbn1cblxuLmRpdG8tY2FsZW5kYXItaGVhZGVyLFxuLmRpdG8tY2FsZW5kYXItZm9vdGVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGhlaWdodDogJGlucHV0LWhlaWdodDtcbiAgbGluZS1oZWlnaHQ6ICRpbnB1dC1oZWlnaHQ7XG59XG5cbi5kaXRvLWNhbGVuZGFyLWZvb3RlciB7XG4gIGJvcmRlci10b3A6ICRib3JkZXItc3R5bGU7XG59XG5cbi5kaXRvLWNhbGVuZGFyLWhlYWRlciB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBib3JkZXItYm90dG9tOiAkYm9yZGVyLXN0eWxlO1xuICBkaXNwbGF5OiBmbGV4O1xuXG4gID4gc3BhbiB7XG4gICAgbWFyZ2luOiBhdXRvO1xuICAgIHBhZGRpbmc6IDAgMC41ZW07XG4gIH1cblxuICBhIHtcbiAgICBmb250LXdlaWdodDogYm9sZDtcblxuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6ICRjb2xvci1hY3RpdmU7XG4gICAgfVxuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldixcbi5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgd2lkdGg6IDUlO1xuICBtaW4td2lkdGg6IDJlbTtcbiAgbWF4LXdpZHRoOiAzZW07XG5cbiAgJjo6YWZ0ZXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBsZWZ0OiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGZvbnQtc2l6ZTogMS4yNWVtO1xuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldiB7XG4gICY6OmFmdGVyIHtcbiAgICBjb250ZW50OiAn4oC5JztcbiAgfVxuXG4gICYuZGl0by1jYWxlbmRhci1zdGVwLXllYXI6OmFmdGVyIHtcbiAgICBjb250ZW50OiAnwqsnO1xuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dCB7XG4gICY6OmFmdGVyIHtcbiAgICBjb250ZW50OiAn4oC6JztcbiAgfVxuXG4gICYuZGl0by1jYWxlbmRhci1zdGVwLXllYXI6OmFmdGVyIHtcbiAgICBjb250ZW50OiAnwrsnO1xuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLXNlbGVjdC1ub3cge1xuICAmOjphZnRlciB7XG4gICAgY29udGVudDogJ05vdyc7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGFkZEV2ZW50cyh0YXJnZXRzLCBldmVudHMpIHtcbiAgdGFyZ2V0cyA9XG4gICAgdGFyZ2V0cyBpbnN0YW5jZW9mIE5vZGVMaXN0XG4gICAgICA/IEFycmF5LmZyb20odGFyZ2V0cylcbiAgICAgIDogYXNBcnJheSh0YXJnZXRzKVxuXG4gIGZvciAoY29uc3QgW3R5cGUsIGhhbmRsZXJdIG9mIE9iamVjdC5lbnRyaWVzKGV2ZW50cykpIHtcbiAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBoYW5kbGVyLCBmYWxzZSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHJlbW92ZSgpIHtcbiAgICAgIGZvciAoY29uc3QgW3R5cGUsIGhhbmRsZXJdIG9mIE9iamVjdC5lbnRyaWVzKGV2ZW50cykpIHtcbiAgICAgICAgZm9yIChjb25zdCB0YXJnZXQgb2YgdGFyZ2V0cykge1xuICAgICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lRXZlbnRzKC4uLmV2ZW50cykge1xuICByZXR1cm4ge1xuICAgIHJlbW92ZSgpIHtcbiAgICAgIGZvciAoY29uc3QgZXZlbnQgb2YgZXZlbnRzKSB7XG4gICAgICAgIGV2ZW50LnJlbW92ZSgpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRLZXkoZXZlbnQpIHtcbiAgcmV0dXJuIHtcbiAgICAzNzogJ2xlZnQnLFxuICAgIDM4OiAndXAnLFxuICAgIDM5OiAncmlnaHQnLFxuICAgIDQwOiAnZG93bicsXG4gICAgMTM6ICdlbnRlcidcbiAgfVtldmVudD8ua2V5Q29kZV1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEtleU5hdmlnYXRpb24oZXZlbnQpIHtcbiAgY29uc3Qga2V5ID0gZ2V0S2V5KGV2ZW50KVxuICByZXR1cm4ge1xuICAgIGhvcjogeyBsZWZ0OiAtMSwgcmlnaHQ6IDEgfVtrZXldIHx8IDAsXG4gICAgdmVyOiB7IHVwOiAtMSwgZG93bjogMSB9W2tleV0gfHwgMCxcbiAgICBlbnRlcjoga2V5ID09PSAnZW50ZXInXG4gIH1cbn1cbiIsImltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhcmdldChjb21wb25lbnQpIHtcbiAgY29uc3QgdGFyZ2V0ID0gaXNTdHJpbmcoY29tcG9uZW50LnRhcmdldClcbiAgICA/IGNvbXBvbmVudC4kcmVmc1tjb21wb25lbnQudGFyZ2V0XVxuICAgIDogY29tcG9uZW50LnRhcmdldFxuICByZXR1cm4gdGFyZ2V0Py4kZWwgPz8gdGFyZ2V0XG59XG4iLCI8IS0tIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvIC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXRyaWdnZXItY29udGFpbmVyXG4gIC5kaXRvLXRyaWdnZXIoXG4gICAgdi1pZj1cImFsd2F5c1Nob3dcIlxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gIClcbiAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gIC5kaXRvLXRyaWdnZXIoXG4gICAgdi1lbHNlLWlmPVwidHJpZ2dlciA9PT0gJ2NsaWNrJ1wiXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgICBAY2xpY2s9XCJvbkNsaWNrXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnaG92ZXInXCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICAgIEBtb3VzZWVudGVyPVwib25Ib3Zlcih0cnVlKVwiXG4gICAgQG1vdXNlbGVhdmU9XCJvbkhvdmVyKGZhbHNlKVwiXG4gIClcbiAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gIC5kaXRvLXRyaWdnZXIoXG4gICAgdi1lbHNlLWlmPVwidHJpZ2dlciA9PT0gJ2ZvY3VzJyB8fCB0cmlnZ2VyID09PSAnYWx3YXlzJ1wiXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgVHJhbnNpdGlvbig6bmFtZT1cImBkaXRvLSR7dHJhbnNpdGlvbn1gXCIpXG4gICAgLmRpdG8tcG9wdXAoXG4gICAgICB2LWlmPVwidHJpZ2dlciA9PT0gJ2hvdmVyJ1wiXG4gICAgICB2LXNob3c9XCJzaG93UG9wdXBcIlxuICAgICAgcmVmPVwicG9wdXBcIlxuICAgICAgOmNsYXNzPVwicG9wdXBDbGFzc1wiXG4gICAgICA6c3R5bGU9XCJwb3B1cFN0eWxlXCJcbiAgICAgIEBtb3VzZWVudGVyPVwib25Ib3Zlcih0cnVlKVwiXG4gICAgICBAbW91c2VsZWF2ZT1cIm9uSG92ZXIoZmFsc2UpXCJcbiAgICApXG4gICAgICBzbG90KFxuICAgICAgICB2LWlmPVwic2hvd1BvcHVwXCJcbiAgICAgICAgbmFtZT1cInBvcHVwXCJcbiAgICAgIClcbiAgICAuZGl0by1wb3B1cChcbiAgICAgIHYtZWxzZVxuICAgICAgdi1zaG93PVwic2hvd1BvcHVwXCJcbiAgICAgIHJlZj1cInBvcHVwXCJcbiAgICAgIDpjbGFzcz1cInBvcHVwQ2xhc3NcIlxuICAgICAgOnN0eWxlPVwicG9wdXBTdHlsZVwiXG4gICAgKVxuICAgICAgc2xvdChcbiAgICAgICAgdi1pZj1cInNob3dQb3B1cFwiXG4gICAgICAgIG5hbWU9XCJwb3B1cFwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaHlwaGVuYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGFkZEV2ZW50cywgY29tYmluZUV2ZW50cyB9IGZyb20gJy4uL3V0aWxzL2V2ZW50LmpzJ1xuaW1wb3J0IHsgZ2V0VGFyZ2V0IH0gZnJvbSAnLi4vdXRpbHMvdHJpZ2dlcidcblxuZXhwb3J0IGRlZmF1bHQge1xuICBlbWl0czogWyd1cGRhdGU6c2hvdyddLFxuXG4gIHByb3BzOiB7XG4gICAgdHJpZ2dlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdjbGljaycgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlbWVudDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdib3R0b20nIH0sXG4gICAgc2hvdzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdGFyZ2V0OiB7IHR5cGU6IFtTdHJpbmcsIEhUTUxFbGVtZW50XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGN1c3RvbUNsYXNzOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHpJbmRleDogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfSxcbiAgICBrZWVwSW5WaWV3OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBoaWRlV2hlbkNsaWNrT3V0c2lkZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgYWx3YXlzU2hvdzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvdmVyOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgaGlkZURlbGF5OiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvd1BvcHVwOiB0aGlzLnNob3csXG4gICAgICBwb3B1cFBsYWNlbWVudDogdGhpcy5wbGFjZW1lbnQsXG4gICAgICBmb2N1c0V2ZW50czogbnVsbCxcbiAgICAgIGNsb3NlRXZlbnRzOiBudWxsLFxuICAgICAgcG9wdXBFdmVudHM6IG51bGwsXG4gICAgICBibHVyVGltZXI6IG51bGwsXG4gICAgICBtb3VzZUxlYXZlVGltZXI6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0cmlnZ2VyQ2xhc3MoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by10cmlnZ2VyLWRpc2FibGVkJzogdGhpcy5kaXNhYmxlZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwb3B1cENsYXNzKCkge1xuICAgICAgY29uc3QgY2xhc3NlcyA9IHtcbiAgICAgICAgW2BkaXRvLXBvcHVwLSR7aHlwaGVuYXRlKHRoaXMucGxhY2VtZW50KX1gXTogdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY3VzdG9tQ2xhc3MpIHtcbiAgICAgICAgY2xhc3Nlc1t0aGlzLmN1c3RvbUNsYXNzXSA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBjbGFzc2VzXG4gICAgfSxcblxuICAgIHBvcHVwU3R5bGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy56SW5kZXggPyBgei1pbmRleDogJHt0aGlzLnpJbmRleH1gIDogJydcbiAgICB9LFxuXG4gICAgdHJpZ2dlclRhcmdldCgpIHtcbiAgICAgIHJldHVybiBnZXRUYXJnZXQodGhpcylcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBzaG93KHNob3cpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gc2hvdyB8fCB0aGlzLmFsd2F5c1Nob3dcbiAgICB9LFxuXG4gICAgc2hvd1BvcHVwKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gXiBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpzaG93JywgdG8pXG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHRoaXMub25TaG93UG9wdXAodG8pKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIGNvbnN0IHsgdHJpZ2dlciwgcG9wdXAgfSA9IHRoaXMuJHJlZnNcbiAgICBpZiAodGhpcy50cmlnZ2VyID09PSAnZm9jdXMnKSB7XG4gICAgICB0aGlzLmZvY3VzRXZlbnRzID0gdGhpcy5hZGRGb2N1c0V2ZW50cyh0aGlzLnRyaWdnZXJUYXJnZXQgPz8gdHJpZ2dlcilcbiAgICB9XG5cbiAgICBpZiAodGhpcy5oaWRlV2hlbkNsaWNrT3V0c2lkZSAmJiAhdGhpcy5hbHdheXNTaG93KSB7XG4gICAgICAvLyBVc2UgJ21vdXNldXAnIGluc3RlYWQgb2YgJ2NsaWNrJywgc2luY2UgY2xpY2sgYXBwZWFycyB0byBoYXBwZW4gYWZ0ZXJcbiAgICAgIC8vIHRoZSBET00gaW5zaWRlIG9mIHBvcHVwcyBjb3VsZCBjaGFuZ2UgaW4gYSB3YXkgc28gdGhhdCB0aGUgY2hlY2tcbiAgICAgIC8vIGBwb3B1cC5jb250YWlucyhldmVudC50YXJnZXQpYCB3b3VsZCBmYWlsOlxuICAgICAgdGhpcy5jbG9zZUV2ZW50cyA9IGFkZEV2ZW50cyh3aW5kb3csIHtcbiAgICAgICAgbW91c2V1cDogZXZlbnQgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwICYmXG4gICAgICAgICAgICAhcG9wdXAuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgICAgICAgIXRyaWdnZXIuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgICAgICAgIXRoaXMudHJpZ2dlclRhcmdldD8uY29udGFpbnMoZXZlbnQudGFyZ2V0KVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBibHVyOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0aGlzLmFsd2F5c1Nob3cpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuc2hvd1BvcHVwID0gdGhpcy5zaG93XG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIHRoaXMuZm9jdXNFdmVudHM/LnJlbW92ZSgpXG4gICAgdGhpcy5jbG9zZUV2ZW50cz8ucmVtb3ZlKClcbiAgICB0aGlzLnBvcHVwRXZlbnRzPy5yZW1vdmUoKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICB1cGRhdGVQb3NpdGlvbigpIHtcbiAgICAgIGNvbnN0IHsgdHJpZ2dlciwgcG9wdXAgfSA9IHRoaXMuJHJlZnNcbiAgICAgIGlmICh0aGlzLnNob3cgJiYgcG9wdXAub2Zmc2V0V2lkdGggPT09IDApIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVBvc2l0aW9uKCksIDApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLnRyaWdnZXJUYXJnZXQgPz8gdHJpZ2dlclxuICAgICAgLy8gQWN0dWFsbHkgcmVzaXplIHRoZSBwb3B1cCdzIGZpcnN0IGNoaWxkLCBzbyB0aGV5IGNhbiBzZXQgc2l6ZSBsaW1pdHMuXG4gICAgICBjb25zdCBlbCA9IHRoaXMudGFyZ2V0ID09PSAncG9wdXAnID8gdHJpZ2dlciA6IHBvcHVwLmZpcnN0RWxlbWVudENoaWxkXG4gICAgICBpZiAoZWwpIHtcbiAgICAgICAgZWwuc3R5bGUud2lkdGggPSBnZXRDb21wdXRlZFN0eWxlKHRhcmdldCkud2lkdGhcbiAgICAgIH1cblxuICAgICAgY29uc3QgYm91bmRzID0gdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICBjb25zdCB0cmlnZ2VyTGVmdCA9IGJvdW5kcy5sZWZ0ICsgd2luZG93LnNjcm9sbFhcbiAgICAgIGNvbnN0IHRyaWdnZXJUb3AgPSBib3VuZHMudG9wICsgd2luZG93LnNjcm9sbFlcbiAgICAgIGNvbnN0IHRyaWdnZXJXaWR0aCA9IGJvdW5kcy53aWR0aFxuICAgICAgY29uc3QgdHJpZ2dlckhlaWdodCA9IGJvdW5kcy5oZWlnaHRcbiAgICAgIGNvbnN0IHBvcHVwV2lkdGggPSBwb3B1cC5vZmZzZXRXaWR0aFxuICAgICAgY29uc3QgcG9wdXBIZWlnaHQgPSBwb3B1cC5vZmZzZXRIZWlnaHRcblxuICAgICAgbGV0IFtwYXJ0MSwgcGFydDJdID0gdGhpcy5wb3B1cFBsYWNlbWVudC5zcGxpdCgnLScpIHx8IFtdXG4gICAgICBpZiAodGhpcy5rZWVwSW5WaWV3KSB7XG4gICAgICAgIGNvbnN0IHdpbldpZHRoID0gd2luZG93LmlubmVyV2lkdGhcbiAgICAgICAgY29uc3Qgd2luSGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0XG4gICAgICAgIGlmIChwYXJ0MSA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICBpZiAodHJpZ2dlclRvcCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MSA9ICdib3R0b20nXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQxID09PSAnYm90dG9tJykge1xuICAgICAgICAgIGlmICh3aW5IZWlnaHQgLSB0cmlnZ2VyVG9wIC0gdHJpZ2dlckhlaWdodCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MSA9ICd0b3AnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQxID09PSAnbGVmdCcpIHtcbiAgICAgICAgICBpZiAodHJpZ2dlckxlZnQgPCBwb3B1cFdpZHRoKSB7XG4gICAgICAgICAgICBwYXJ0MSA9ICdyaWdodCdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDEgPT09ICdyaWdodCcpIHtcbiAgICAgICAgICBpZiAod2luV2lkdGggLSB0cmlnZ2VyTGVmdCAtIHRyaWdnZXJXaWR0aCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQxID0gJ2xlZnQnXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnQyID09PSAndG9wJykge1xuICAgICAgICAgIGlmICh3aW5IZWlnaHQgLSB0cmlnZ2VyVG9wIDwgcG9wdXBIZWlnaHQpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ2JvdHRvbSdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDIgPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJUb3AgKyB0cmlnZ2VySGVpZ2h0IDwgcG9wdXBIZWlnaHQpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ3RvcCdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDIgPT09ICdsZWZ0Jykge1xuICAgICAgICAgIGlmICh3aW5XaWR0aCAtIHRyaWdnZXJMZWZ0IDwgcG9wdXBXaWR0aCkge1xuICAgICAgICAgICAgcGFydDIgPSAncmlnaHQnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQyID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJMZWZ0ICsgdHJpZ2dlcldpZHRoIDwgcG9wdXBXaWR0aCkge1xuICAgICAgICAgICAgcGFydDIgPSAnbGVmdCdcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGV0IGxlZnQgPSAwXG4gICAgICBsZXQgdG9wID0gMFxuICAgICAgc3dpdGNoIChwYXJ0MSkge1xuICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgIHRvcCAtPSBwb3B1cEhlaWdodFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICAgIGxlZnQgLT0gcG9wdXBXaWR0aFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICBsZWZ0ICs9IHRyaWdnZXJXaWR0aFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgdG9wICs9IHRyaWdnZXJIZWlnaHRcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgc3dpdGNoIChwYXJ0Mikge1xuICAgICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgICAgbGVmdCAtPSBwb3B1cFdpZHRoIC0gdHJpZ2dlcldpZHRoXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgICB0b3AgLT0gcG9wdXBIZWlnaHQgLSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvdmVyKSB7XG4gICAgICAgIGlmIChwYXJ0MSA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICB0b3AgKz0gdHJpZ2dlckhlaWdodFxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQxID09PSAnYm90dG9tJykge1xuICAgICAgICAgIHRvcCAtPSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0YXJnZXQgIT09IHRyaWdnZXIpIHtcbiAgICAgICAgY29uc3QgdHJpZ2dlckJvdW5kcyA9IHRyaWdnZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgbGVmdCArPSB0cmlnZ2VyTGVmdCAtIHRyaWdnZXJCb3VuZHMubGVmdFxuICAgICAgICB0b3AgKz0gdHJpZ2dlclRvcCAtIHRyaWdnZXJCb3VuZHMudG9wXG4gICAgICB9XG4gICAgICBwb3B1cC5zdHlsZS5sZWZ0ID0gYCR7bGVmdH1weGBcbiAgICAgIHBvcHVwLnN0eWxlLnRvcCA9IGAke3RvcH1weGBcbiAgICB9LFxuXG4gICAgYWRkRm9jdXNFdmVudHMocGFyZW50KSB7XG4gICAgICBjb25zdCB0YXJnZXRzID0gcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0LCB0ZXh0YXJlYScpXG4gICAgICBsZXQgaW5wdXRcblxuICAgICAgcmV0dXJuIGNvbWJpbmVFdmVudHMoXG4gICAgICAgIGFkZEV2ZW50cyh0YXJnZXRzLCB7XG4gICAgICAgICAgZm9jdXM6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuYmx1clRpbWVyKVxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBibHVyOiAoKSA9PiB7XG4gICAgICAgICAgICAvLyBVc2UgdGltZW91dCB0byBhbGxvdyBjbGlja2VkIGlucHV0cyB0byBncmFiIGZvY3VzXG4gICAgICAgICAgICB0aGlzLmJsdXJUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIXRoaXMuJHJlZnMucG9wdXAubWF0Y2hlcygnOmZvY3VzLXdpdGhpbicpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAwKVxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG5cbiAgICAgICAgYWRkRXZlbnRzKHBhcmVudCwge1xuICAgICAgICAgIG1vdXNlZG93bjogZXZlbnQgPT4ge1xuICAgICAgICAgICAgaWYgKCFldmVudC50YXJnZXQubWF0Y2hlcygnaW5wdXQsIHRleHRhcmVhLCBidXR0b24nKSkge1xuICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWV2ZW50LnRhcmdldC5tYXRjaGVzKCcuZGl0by1idXR0b24tY2xlYXInKSkge1xuICAgICAgICAgICAgICBjb25zdCB0cmlnZ2VyID0gdGhpcy50cmlnZ2VyVGFyZ2V0ID8/IHRoaXMuJHJlZnMudHJpZ2dlclxuICAgICAgICAgICAgICAvLyBNYXJrIHRyaWdnZXIgaW5wdXQgYXMgcmVhZG9ubHkgc28gaXQgY2FuJ3QgbG9vc2UgZm9jdXMgd2hpbGVcbiAgICAgICAgICAgICAgLy8gdXNlciBkb2VzIG90aGVyIG1vdXNlLWFjdGl2aXRpZXMgaW4gcG9wdXAuXG4gICAgICAgICAgICAgIGlucHV0ID0gdHJpZ2dlci5xdWVyeVNlbGVjdG9yKCdpbnB1dCwgdGV4dGFyZWEnKVxuICAgICAgICAgICAgICBpZiAoaW5wdXQgJiYgIWlucHV0Lmhhc0F0dHJpYnV0ZSgncmVhZG9ubHknKSkge1xuICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgncmVhZG9ubHknLCAndHJ1ZScpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSBudWxsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgbW91c2V1cDogZXZlbnQgPT4ge1xuICAgICAgICAgICAgaWYgKGlucHV0KSB7XG4gICAgICAgICAgICAgIC8vIEdpdmUgc29tZSB0aW1lIGZvciBvdGhlciBldmVudHMgdG8gdXBkYXRlIGlucHV0IGJlZm9yZSBpdFxuICAgICAgICAgICAgICAvLyBiZWNvbWVzIGVkaXRhYmxlIGFuZCBzdGlsbCBmb2N1c2VkIGFnYWluLlxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBpbnB1dC5yZW1vdmVBdHRyaWJ1dGUoJ3JlYWRvbmx5JylcbiAgICAgICAgICAgICAgICBpZiAoIWV2ZW50LnRhcmdldC5tYXRjaGVzKCdpbnB1dCwgdGV4dGFyZWEsIGJ1dHRvbicpKSB7XG4gICAgICAgICAgICAgICAgICBpbnB1dC5mb2N1cygpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlucHV0ID0gbnVsbFxuICAgICAgICAgICAgICB9LCAwKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgb25TaG93UG9wdXAoc2hvdykge1xuICAgICAgaWYgKHNob3cpIHtcbiAgICAgICAgaWYgKHRoaXMudHJpZ2dlciA9PT0gJ2ZvY3VzJykge1xuICAgICAgICAgIHRoaXMucG9wdXBFdmVudHMgPSB0aGlzLmFkZEZvY3VzRXZlbnRzKHRoaXMuJHJlZnMucG9wdXApXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbigpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBvcHVwRXZlbnRzPy5yZW1vdmUoKVxuICAgICAgICB0aGlzLnBvcHVwRXZlbnRzID0gbnVsbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbkNsaWNrKCkge1xuICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbkhvdmVyKGVudGVyKSB7XG4gICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubW91c2VMZWF2ZVRpbWVyKVxuICAgICAgICBpZiAoZW50ZXIpIHtcbiAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IHRydWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5oaWRlRGVsYXkpIHtcbiAgICAgICAgICAgIHRoaXMubW91c2VMZWF2ZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgICAgIH0sIHRoaXMuaGlkZURlbGF5KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuQGltcG9ydCAnLi4vc3R5bGVzL3RyYW5zaXRpb25zJztcblxuLmRpdG8tdHJpZ2dlci1jb250YWluZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5kaXRvLXRyaWdnZXItZGlzYWJsZWQge1xuICBjb2xvcjogJGNvbG9yLWRpc2FibGVkO1xuICBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7XG4gIGN1cnNvcjogZGVmYXVsdDtcblxuICAqIHtcbiAgICBjdXJzb3I6IGRlZmF1bHQgIWltcG9ydGFudDtcbiAgICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAgICY6Zm9jdXMge1xuICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICB9XG4gIH1cbn1cblxuLmRpdG8tcG9wdXAge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogJHotaW5kZXgtcG9wdXA7XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWlucHV0KDpjbGFzcz1cImNsYXNzZXNcIilcbiAgc2xvdChuYW1lPVwiYmVmb3JlXCIpXG4gIGlucHV0KFxuICAgIDppZD1cImlkXCJcbiAgICByZWY9XCJpbnB1dFwiXG4gICAgdi1tb2RlbD1cImN1cnJlbnRWYWx1ZVwiXG4gICAgOnR5cGU9XCJ0eXBlXCJcbiAgICA6bmFtZT1cIm5hbWVcIlxuICAgIDp0aXRsZT1cInRpdGxlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgOnJlYWRvbmx5PVwicmVhZG9ubHlcIlxuICAgIDphdXRvZm9jdXM9XCJhdXRvZm9jdXNcIlxuICAgIDpwbGFjZWhvbGRlcj1cInBsYWNlaG9sZGVyXCJcbiAgICA6YXV0b2NvbXBsZXRlPVwiYXV0b2NvbXBsZXRlXCJcbiAgICA6YXJpYS1sYWJlbD1cInRpdGxlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgKVxuICBzbG90KG5hbWU9XCJhZnRlclwiKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnXSxcbiAgaW5oZXJpdEF0dHJzOiBmYWxzZSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogW1N0cmluZywgTnVtYmVyXSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHR5cGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAndGV4dCcgfSxcbiAgICBpZDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBuYW1lOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRpdGxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgcmVhZG9ubHk6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBhdXRvZm9jdXM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBhdXRvY29tcGxldGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnb2ZmJyB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFZhbHVlOiB0aGlzLm1vZGVsVmFsdWUsXG4gICAgICBob3ZlcmluZzogZmFsc2UsXG4gICAgICBmb2N1c2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsYXNzZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kYXR0cnMuY2xhc3NcbiAgICB9LFxuXG4gICAgYXR0cmlidXRlcygpIHtcbiAgICAgIGNvbnN0IHsgY2xhc3M6IF8sIC4uLmF0dHJpYnV0ZXMgfSA9IHRoaXMuJGF0dHJzXG4gICAgICByZXR1cm4gYXR0cmlidXRlc1xuICAgIH0sXG5cbiAgICBpbnB1dCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZWZzLmlucHV0XG4gICAgfSxcblxuICAgIHNpemUoKSB7XG4gICAgICAvLyBEZXRlcm1pbmUgc2l6ZSBiYXNlZCBvbiBtaW4gJiBtYXggc2V0dGluZ3MsIGlmIHRoZXkncmUgcHJvdmlkZWQuXG4gICAgICBjb25zdCB7IHNpemUsIG1pbiwgbWF4IH0gPSB0aGlzLiRhdHRyc1xuICAgICAgY29uc3QgZ2V0TGVuZ3RoID0gdmFsdWUgPT4gKHZhbHVlICE9IG51bGwgPyBgJHt2YWx1ZX1gLmxlbmd0aCA6IDApXG4gICAgICByZXR1cm4gc2l6ZSB8fCBnZXRMZW5ndGgobWluKSB8fCBnZXRMZW5ndGgobWF4KSB8fCB1bmRlZmluZWRcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gIT09IGZyb20pIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSB0b1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VmFsdWUoY3VycmVudFZhbHVlKSB7XG4gICAgICBpZiAoY3VycmVudFZhbHVlICE9PSB0aGlzLm1vZGVsVmFsdWUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCBjdXJyZW50VmFsdWUpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyKCkge1xuICAgICAgdGhpcy5pbnB1dC5ibHVyKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWlucHV0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXG4gIEBleHRlbmQgJWlucHV0O1xuXG4gIGlucHV0IHtcbiAgICAvLyBJbmhlcml0IGFsbCBzdHlsaW5nIGZyb20gLmRpdG8taW5wdXRcbiAgICBhbGw6IGluaGVyaXQ7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJvcmRlcjogMDtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5pLmRpdG8taWNvbihcbiAgOmNsYXNzPWB7XG4gICAgWydkaXRvLWljb24tLScgKyBuYW1lXTogdHJ1ZSxcbiAgICAnZGl0by1pY29uLS1kaXNhYmxlZCc6IGRpc2FibGVkXG4gIH1gXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIG5hbWU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBkaXNhYmxlZDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4vLyBgeWFybiBidWlsZDppY29uc2AgY29udmVydHMgdGhlIGljb24gU1ZHIGZpbGVzIHRvIHNpbGVudCBjbGFzc2VzIGluc2lkZVxuLy8gYHNyYy9zdHlsZXMvbWl4aW5zL19pY29ucy5zY3NzYCwgbWFraW5nIHRoZW0gYXZhaWxhYmxlIHRvIGFsbCBvdGhlciBzYXNzXG4vLyBjb2RlIHRocm91Z2ggYF9pbXBvcnRzYC5cbi8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gdXNlIHRoZW0gYXMgbm9ybWFsIENTUyBjbGFzc2VzLCBjb252ZXJ0IHRoZW0gaGVyZTpcbkBlYWNoICRuYW1lIGluICRpY29ucyB7XG4gIC5kaXRvLWljb24tLSN7JG5hbWV9IHtcbiAgICAmOjphZnRlciB7XG4gICAgICBAZXh0ZW5kICVpY29uLSN7JG5hbWV9O1xuXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgfVxuICB9XG59XG5cbi5kaXRvLWljb24ge1xuICBAYXQtcm9vdCAuZGl0by1pbnB1dCAmIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgaW5zZXQ6ICRib3JkZXItd2lkdGg7XG4gICAgbGVmdDogdW5zZXQ7XG4gICAgd2lkdGg6IDJlbTtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgY29sb3I6ICRjb2xvci1ncmV5O1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcblxuICAgICYtLWRpc2FibGVkIHtcbiAgICAgIGNvbG9yOiAkY29sb3ItbGlnaHQ7XG4gICAgfVxuICB9XG5cbiAgQGF0LXJvb3QgLmRpdG8taW5wdXQ6Zm9jdXMtd2l0aGluICYge1xuICAgIGNvbG9yOiAkY29sb3ItYWN0aXZlO1xuICB9XG59XG48L3N0eWxlPlxuIiwiZXhwb3J0IGZ1bmN0aW9uIHNldFNlbGVjdGlvbihpbnB1dCwgeyBzdGFydCwgZW5kIH0pIHtcbiAgaWYgKGlucHV0Py5zZXRTZWxlY3Rpb25SYW5nZSkge1xuICAgIGlucHV0LmZvY3VzKClcbiAgICBpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3Rpb24oaW5wdXQpIHtcbiAgcmV0dXJuIGlucHV0ICYmICdzZWxlY3Rpb25TdGFydCcgaW4gaW5wdXRcbiAgICA/IHsgc3RhcnQ6IGlucHV0LnNlbGVjdGlvblN0YXJ0LCBlbmQ6IGlucHV0LnNlbGVjdGlvbkVuZCB9XG4gICAgOiBudWxsXG59XG4iLCI8IS0tIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvIC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cblRyaWdnZXIuZGl0by1kYXRlLXBpY2tlcihcbiAgcmVmPVwidHJpZ2dlclwiXG4gIHYtbW9kZWw6c2hvdz1cInNob3dQb3B1cFwiXG4gIHRyaWdnZXI9XCJmb2N1c1wiXG4gIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgcGxhY2VtZW50LCBkaXNhYmxlZCwgdGFyZ2V0IH1cIlxuKVxuICB0ZW1wbGF0ZSgjdHJpZ2dlcilcbiAgICBzbG90KFxuICAgICAgdi1pZj1cIiRzbG90cy50cmlnZ2VyXCJcbiAgICAgIG5hbWU9XCJ0cmlnZ2VyXCJcbiAgICApXG4gICAgSW5wdXRGaWVsZC5kaXRvLWRhdGUtcGlja2VyLWlucHV0KFxuICAgICAgdi1lbHNlXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFRleHRcIlxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IGZvY3VzZWQgfVwiXG4gICAgICB2LWJpbmQ9XCJ7IHBsYWNlaG9sZGVyLCBkaXNhYmxlZCwgLi4uJGF0dHJzIH1cIlxuICAgICAgQGZvY3VzPVwib25Gb2N1cyh0cnVlKVwiXG4gICAgICBAYmx1cj1cIm9uRm9jdXMoZmFsc2UpXCJcbiAgICAgIEBrZXlkb3duPVwib25LZXlEb3duXCJcbiAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uTW91c2VEb3duKGZhbHNlKVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoI2JlZm9yZSlcbiAgICAgICAgc2xvdChuYW1lPVwiYmVmb3JlXCIpXG4gICAgICB0ZW1wbGF0ZSgjYWZ0ZXIpXG4gICAgICAgIEljb24oXG4gICAgICAgICAgbmFtZT1cImNhbGVuZGFyXCJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgICAgQG1vdXNlZG93bi5wcmV2ZW50PVwib25Nb3VzZURvd24odHJ1ZSlcIlxuICAgICAgICApXG4gICAgICAgIHNsb3QobmFtZT1cImFmdGVyXCIpXG4gIHRlbXBsYXRlKCNwb3B1cClcbiAgICBDYWxlbmRhci5kaXRvLWRhdGUtcGlja2VyLXBvcHVwKFxuICAgICAgcmVmPVwiY2FsZW5kYXJcIlxuICAgICAgdi1tb2RlbD1cImN1cnJlbnRWYWx1ZVwiXG4gICAgICB2LWJpbmQ9XCJ7IGxvY2FsZSwgZGlzYWJsZWREYXRlIH1cIlxuICAgICAgQHNlbGVjdD1cInNob3dQb3B1cCA9IGZhbHNlXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgZm9ybWF0LCBkZWZhdWx0Rm9ybWF0cyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgVHJpZ2dlciBmcm9tICcuL1RyaWdnZXIudnVlJ1xuaW1wb3J0IENhbGVuZGFyIGZyb20gJy4vQ2FsZW5kYXIudnVlJ1xuaW1wb3J0IElucHV0RmllbGQgZnJvbSAnLi9JbnB1dEZpZWxkLnZ1ZSdcbmltcG9ydCBJY29uIGZyb20gJy4vSWNvbi52dWUnXG5pbXBvcnQgeyBwYXJzZURhdGUsIGdldERhdGVQYXJ0QXRQb3NpdGlvbiB9IGZyb20gJy4uL3V0aWxzL2RhdGUuanMnXG5pbXBvcnQgeyBnZXRTZWxlY3Rpb24sIHNldFNlbGVjdGlvbiB9IGZyb20gJy4uL3V0aWxzL3NlbGVjdGlvbi5qcydcbmltcG9ydCB7IGdldEtleU5hdmlnYXRpb24gfSBmcm9tICcuLi91dGlscy9ldmVudC5qcydcbmltcG9ydCB7IGdldFRhcmdldCB9IGZyb20gJy4uL3V0aWxzL3RyaWdnZXIuanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czogeyBUcmlnZ2VyLCBDYWxlbmRhciwgSW5wdXRGaWVsZCwgSWNvbiB9LFxuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZScsICd1cGRhdGU6c2hvdycsICdjaGFuZ2UnLCAnZm9jdXMnLCAnYmx1ciddLFxuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBEYXRlLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdHJhbnNpdGlvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdzbGlkZScgfSxcbiAgICBwbGFjZW1lbnQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnYm90dG9tLWxlZnQnIH0sXG4gICAgcGxhY2Vob2xkZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2hvdzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdGFyZ2V0OiB7IHR5cGU6IFtTdHJpbmcsIEhUTUxFbGVtZW50XSwgZGVmYXVsdDogJ3RyaWdnZXInIH0sXG4gICAgbG9jYWxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2VuLVVTJyB9LFxuICAgIGZvcm1hdDoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogKCkgPT4gKHtcbiAgICAgICAgZGF0ZTogZGVmYXVsdEZvcm1hdHMuZGF0ZSxcbiAgICAgICAgdGltZTogZmFsc2VcbiAgICAgIH0pXG4gICAgfSxcbiAgICBkaXNhYmxlZERhdGU6IHsgdHlwZTogRnVuY3Rpb24sIGRlZmF1bHQ6ICgpID0+IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VmFsdWU6IHRoaXMubW9kZWxWYWx1ZSxcbiAgICAgIHNob3dQb3B1cDogdGhpcy5zaG93LFxuICAgICAgaW5wdXRGb2N1c2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvY3VzZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnB1dEZvY3VzZWQgfHwgdGhpcy5zaG93UG9wdXBcbiAgICB9LFxuXG4gICAgaW5wdXQoKSB7XG4gICAgICByZXR1cm4gZ2V0VGFyZ2V0KHRoaXMpPy5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpXG4gICAgfSxcblxuICAgIGZvcm1hdE9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsb2NhbGU6IHRoaXMubG9jYWxlLFxuICAgICAgICAuLi50aGlzLmZvcm1hdFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VGV4dDoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gZm9ybWF0KHRoaXMuY3VycmVudFZhbHVlLCB0aGlzLmZvcm1hdE9wdGlvbnMpIHx8ICcnXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IHBhcnNlRGF0ZSh2YWx1ZSwgdGhpcy5mb3JtYXRPcHRpb25zKVxuICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gZGF0ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgbW9kZWxWYWx1ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKCt0byAhPT0gK2Zyb20pIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSB0b1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VmFsdWUodmFsdWUpIHtcbiAgICAgIGlmICgrdmFsdWUgIT09ICt0aGlzLm1vZGVsVmFsdWUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCB2YWx1ZSlcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdmFsdWUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNob3coc2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBzaG93XG4gICAgfSxcblxuICAgIHNob3dQb3B1cCh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvIF4gZnJvbSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6c2hvdycsIHRvKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1c2VkKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gXiBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQodG8gPyAnZm9jdXMnIDogJ2JsdXInKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25Gb2N1cyhmb2N1cykge1xuICAgICAgdGhpcy5pbnB1dEZvY3VzZWQgPSBmb2N1c1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBmb2N1c1xuICAgIH0sXG5cbiAgICBvbktleURvd24oZXZlbnQpIHtcbiAgICAgIGNvbnN0IHsgdmVyOiBzdGVwLCBlbnRlciB9ID0gZ2V0S2V5TmF2aWdhdGlvbihldmVudClcbiAgICAgIGlmIChzdGVwIHx8IGVudGVyKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcblxuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IGdldFNlbGVjdGlvbih0aGlzLmlucHV0KT8uc3RhcnRcbiAgICAgICAgY29uc3QgZ2V0RGF0ZVBhcnQgPSBwb3NpdGlvbiA9PlxuICAgICAgICAgIGdldERhdGVQYXJ0QXRQb3NpdGlvbih0aGlzLmN1cnJlbnRUZXh0LCBwb3NpdGlvbiwgdGhpcy5mb3JtYXRPcHRpb25zKVxuXG4gICAgICAgIGlmIChzdGVwICYmICF0aGlzLnNob3dQb3B1cCkge1xuICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHsgY2FsZW5kYXIgfSA9IHRoaXMuJHJlZnNcbiAgICAgICAgICBpZiAoY2FsZW5kYXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgbmFtZTogbW9kZSwgc3RhcnQgfSA9IGdldERhdGVQYXJ0KHBvc2l0aW9uKSB8fCB7fVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBtb2RlICYmXG4gICAgICAgICAgICAgIGNhbGVuZGFyLm5hdmlnYXRlKHsgc3RlcCwgZW50ZXIsIG1vZGUsIHVwZGF0ZTogdHJ1ZSB9KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHNldFNlbGVjdGlvbih0aGlzLmlucHV0LCBnZXREYXRlUGFydChzdGFydCkpKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbk1vdXNlRG93bih0b2dnbGUpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gIXRoaXMuZGlzYWJsZWQgJiYgKCF0b2dnbGUgfHwgIXRoaXMuc2hvd1BvcHVwKVxuICAgICAgaWYgKHRoaXMuc2hvd1BvcHVwKSB7XG4gICAgICAgIHRoaXMuZm9jdXMoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyKCkge1xuICAgICAgdGhpcy5pbnB1dC5ibHVyKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWRhdGUtcGlja2VyIHtcbiAgLmRpdG8taW5wdXQge1xuICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWluLXdpZHRoOiA4ZW07XG4gIH1cbn1cblxuLmRpdG8tZGF0ZS1waWNrZXItcG9wdXAge1xuICBtYXJnaW46ICRwb3B1cC1tYXJnaW47XG59XG48L3N0eWxlPlxuIiwiPCEtLSBEZXJpdmVkIGZyb20gQVRVSSwgYW5kIGZ1cnRoZXIgZXh0ZW5kZWQ6IGh0dHBzOi8vYWxpcWluLmdpdGh1Yi5pby9hdHVpLyAtLT5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5UcmlnZ2VyLmRpdG8tdGltZS1waWNrZXIoXG4gIHJlZj1cInRyaWdnZXJcIlxuICB2LW1vZGVsOnNob3c9XCJzaG93UG9wdXBcIlxuICB0cmlnZ2VyPVwiZm9jdXNcIlxuICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlbWVudCwgZGlzYWJsZWQsIHRhcmdldCB9XCJcbilcbiAgdGVtcGxhdGUoI3RyaWdnZXIpXG4gICAgc2xvdChcbiAgICAgIHYtaWY9XCIkc2xvdHMudHJpZ2dlclwiXG4gICAgICBuYW1lPVwidHJpZ2dlclwiXG4gICAgKVxuICAgIElucHV0RmllbGQuZGl0by10aW1lLXBpY2tlci1pbnB1dChcbiAgICAgIHYtZWxzZVxuICAgICAgcmVmPVwiaW5wdXRcIlxuICAgICAgdi1tb2RlbD1cImN1cnJlbnRUZXh0XCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBmb2N1c2VkIH1cIlxuICAgICAgdi1iaW5kPVwieyBwbGFjZWhvbGRlciwgZGlzYWJsZWQsIC4uLiRhdHRycyB9XCJcbiAgICAgIEBmb2N1cz1cIm9uRm9jdXModHJ1ZSlcIlxuICAgICAgQGJsdXI9XCJvbkZvY3VzKGZhbHNlKVwiXG4gICAgICBAa2V5ZG93bj1cIm9uS2V5RG93blwiXG4gICAgICBAbW91c2Vkb3duLnN0b3A9XCJvbk1vdXNlRG93bihmYWxzZSlcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKCNiZWZvcmUpXG4gICAgICAgIHNsb3QobmFtZT1cImJlZm9yZVwiKVxuICAgICAgdGVtcGxhdGUoI2FmdGVyKVxuICAgICAgICBJY29uKFxuICAgICAgICAgIG5hbWU9XCJjbG9ja1wiXG4gICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICAgIEBtb3VzZWRvd24ucHJldmVudD1cIm9uTW91c2VEb3duKHRydWUpXCJcbiAgICAgICAgKVxuICAgICAgICBzbG90KG5hbWU9XCJhZnRlclwiKVxuICB0ZW1wbGF0ZSgjcG9wdXApXG4gICAgLmRpdG8tdGltZS1waWNrZXItcG9wdXBcbiAgICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICAgIHVsLmRpdG8tdGltZS1waWNrZXItaG91cihyZWY9XCJob3VyXCIpXG4gICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDI0XCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBsaShcbiAgICAgICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZEhvdXIoaW5kZXggLSAxKVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IGhvdXIgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwiaG91ciA9IGluZGV4IC0gMVwiXG4gICAgICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuICAgICAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICAgICAgdWwuZGl0by10aW1lLXBpY2tlci1taW51dGUocmVmPVwibWludXRlXCIpXG4gICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDYwXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBsaShcbiAgICAgICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZE1pbnV0ZShpbmRleCAtIDEpXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwieyBzZWxlY3RlZDogbWludXRlID09PSBpbmRleCAtIDEgfVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cIm1pbnV0ZSA9IGluZGV4IC0gMVwiXG4gICAgICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuICAgICAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICAgICAgdWwuZGl0by10aW1lLXBpY2tlci1zZWNvbmQocmVmPVwic2Vjb25kXCIpXG4gICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDYwXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBsaShcbiAgICAgICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZFNlY29uZChpbmRleCAtIDEpXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwieyBzZWxlY3RlZDogc2Vjb25kID09PSBpbmRleCAtIDEgfVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlY29uZCA9IGluZGV4IC0gMVwiXG4gICAgICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGZvcm1hdCwgZGVmYXVsdEZvcm1hdHMgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IFRyaWdnZXIgZnJvbSAnLi9UcmlnZ2VyLnZ1ZSdcbmltcG9ydCBJbnB1dEZpZWxkIGZyb20gJy4vSW5wdXRGaWVsZC52dWUnXG5pbXBvcnQgSWNvbiBmcm9tICcuL0ljb24udnVlJ1xuaW1wb3J0IHsgYWx0ZXJEYXRlLCBwYXJzZURhdGUsIGdldERhdGVQYXJ0QXRQb3NpdGlvbiB9IGZyb20gJy4uL3V0aWxzL2RhdGUuanMnXG5pbXBvcnQgeyBnZXRTZWxlY3Rpb24sIHNldFNlbGVjdGlvbiB9IGZyb20gJy4uL3V0aWxzL3NlbGVjdGlvbi5qcydcbmltcG9ydCB7IGdldEtleU5hdmlnYXRpb24gfSBmcm9tICcuLi91dGlscy9ldmVudC5qcydcbmltcG9ydCB7IGdldFRhcmdldCB9IGZyb20gJy4uL3V0aWxzL3RyaWdnZXIuanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czogeyBUcmlnZ2VyLCBJbnB1dEZpZWxkLCBJY29uIH0sXG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJywgJ3VwZGF0ZTpzaG93JywgJ2NoYW5nZScsICdmb2N1cycsICdibHVyJ10sXG4gIGluaGVyaXRBdHRyczogZmFsc2UsXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlbWVudDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdib3R0b20tbGVmdCcgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB0YXJnZXQ6IHsgdHlwZTogW1N0cmluZywgSFRNTEVsZW1lbnRdLCBkZWZhdWx0OiAndHJpZ2dlcicgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZm9ybWF0OiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiAoKSA9PiAoe1xuICAgICAgICB0aW1lOiBkZWZhdWx0Rm9ybWF0cy50aW1lLFxuICAgICAgICBkYXRlOiBmYWxzZVxuICAgICAgfSlcbiAgICB9LFxuICAgIGRpc2FibGVkSG91cjogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfSxcbiAgICBkaXNhYmxlZE1pbnV0ZTogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfSxcbiAgICBkaXNhYmxlZFNlY29uZDogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy5tb2RlbFZhbHVlLFxuICAgICAgc2hvd1BvcHVwOiB0aGlzLnNob3csXG4gICAgICBpbnB1dEZvY3VzZWQ6IGZhbHNlLFxuICAgICAgaWdub3JlTmV4dENoYW5nZTogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb2N1c2VkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5wdXRGb2N1c2VkIHx8IHRoaXMuc2hvd1BvcHVwXG4gICAgfSxcblxuICAgIGlucHV0KCkge1xuICAgICAgcmV0dXJuIGdldFRhcmdldCh0aGlzKT8ucXVlcnlTZWxlY3RvcignaW5wdXQnKVxuICAgIH0sXG5cbiAgICBmb3JtYXRPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZSxcbiAgICAgICAgLi4udGhpcy5mb3JtYXRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFRleHQ6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdCh0aGlzLmN1cnJlbnRWYWx1ZSwgdGhpcy5mb3JtYXRPcHRpb25zKSB8fCAnJ1xuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBwYXJzZURhdGUodmFsdWUsIHRoaXMuZm9ybWF0T3B0aW9ucylcbiAgICAgICAgaWYgKGRhdGUpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGRhdGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50RGF0ZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlIHx8XG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBEYXRlKCkgb2JqZWN0IHdpdGggdGhlIHRpbWUgc2V0IHRvIDAsIHRvIGJlIHVzZWQgd2hlblxuICAgICAgICAvLyBmaXJzdCBzZXR0aW5nIGFueSBvZiB0aGUgdGltZXMsIGZvciBtZWFuaW5nZnVsIGRhdGVzIGluIGNhc2UgdGhlXG4gICAgICAgIC8vIG9iamVjdCBpcyBzaGFyZWQgd2l0aCBhIERhdGVQaWNrZXIsIGUuZy4gdGhyb3VnaCBEYXRlVGltZVBpY2tlci5cbiAgICAgICAgYWx0ZXJEYXRlKG5ldyBEYXRlKCksIHsgaG91cjogMCwgbWludXRlOiAwLCBzZWNvbmQ6IDAsIG1pbGxpc2Vjb25kOiAwIH0pXG4gICAgICApXG4gICAgfSxcblxuICAgIGhvdXI6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudERhdGUuZ2V0SG91cnMoKVxuICAgICAgfSxcblxuICAgICAgc2V0KGhvdXIpIHtcbiAgICAgICAgdGhpcy5zZXRUaW1lKHsgaG91ciB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtaW51dGU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudERhdGUuZ2V0TWludXRlcygpXG4gICAgICB9LFxuXG4gICAgICBzZXQobWludXRlKSB7XG4gICAgICAgIHRoaXMuc2V0VGltZSh7IG1pbnV0ZSB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZWNvbmQ6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudERhdGUuZ2V0U2Vjb25kcygpXG4gICAgICB9LFxuXG4gICAgICBzZXQoc2Vjb25kKSB7XG4gICAgICAgIHRoaXMuc2V0VGltZSh7IHNlY29uZCB9KVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUodG8sIGZyb20pIHtcbiAgICAgIGlmICgrdG8gIT09ICtmcm9tKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdG9cbiAgICAgICAgdGhpcy5zY3JvbGxBbGwodHJ1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKHZhbHVlKSB7XG4gICAgICBpZiAoK3ZhbHVlICE9PSArdGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgdmFsdWUpXG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHZhbHVlKVxuICAgICAgICB0aGlzLnNjcm9sbEFsbCh0cnVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VGV4dCgpIHtcbiAgICAgIGNvbnN0IHsgaW5wdXQgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IGdldFNlbGVjdGlvbihpbnB1dClcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5mb2N1c2VkICYmXG4gICAgICAgICF0aGlzLmlnbm9yZU5leHRDaGFuZ2UgJiZcbiAgICAgICAgc2VsZWN0aW9uLnN0YXJ0ID09PSBzZWxlY3Rpb24uZW5kXG4gICAgICApIHtcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gc2V0U2VsZWN0aW9uKGlucHV0LCBzZWxlY3Rpb24pKVxuICAgICAgfVxuICAgICAgdGhpcy5pZ25vcmVOZXh0Q2hhbmdlID0gZmFsc2VcbiAgICB9LFxuXG4gICAgc2hvdyhzaG93KSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9IHNob3dcbiAgICB9LFxuXG4gICAgc2hvd1BvcHVwKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8pIHtcbiAgICAgICAgdGhpcy5zY3JvbGxBbGwoZmFsc2UpXG4gICAgICB9XG4gICAgICBpZiAodG8gXiBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpzaG93JywgdG8pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCh0byA/ICdmb2N1cycgOiAnYmx1cicpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBsZWZ0UGFkKHZhbHVlKSB7XG4gICAgICByZXR1cm4gKCcwJyArIHZhbHVlKS5zbGljZSgtMilcbiAgICB9LFxuXG4gICAgc2V0VGltZShvdmVycmlkZXMpIHtcbiAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gYWx0ZXJEYXRlKHRoaXMuY3VycmVudERhdGUsIHtcbiAgICAgICAgLi4ub3ZlcnJpZGVzLFxuICAgICAgICBtaWxsaXNlY29uZDogMFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc2Nyb2xsQWxsKHNtb290aCkge1xuICAgICAgY29uc3Qgc2Nyb2xsID0gKHJlZiwgdmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy4kcmVmc1tyZWZdXG4gICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICBjb25zdCBsaW5lSGVpZ2h0ID0gKFxuICAgICAgICAgICAgdGFyZ2V0LnNjcm9sbEhlaWdodCAvXG4gICAgICAgICAgICAvLyBGaXJzdCBhbmQgbGFzdCBvbmUgYWRkIDMgdGltZXMgdGhlIG1hcmdpbi5cbiAgICAgICAgICAgICh0YXJnZXQuY2hpbGRFbGVtZW50Q291bnQgKyA2KVxuICAgICAgICAgIClcbiAgICAgICAgICBjb25zdCB0b3AgPSBNYXRoLnJvdW5kKHZhbHVlICogbGluZUhlaWdodClcbiAgICAgICAgICBjb25zdCBkaXN0YW5jZSA9IE1hdGguYWJzKHRhcmdldC5zY3JvbGxUb3AgLSB0b3ApXG4gICAgICAgICAgdGFyZ2V0LnNjcm9sbFRvKHtcbiAgICAgICAgICAgIHRvcCxcbiAgICAgICAgICAgIGJlaGF2aW9yOiBzbW9vdGggJiYgZGlzdGFuY2UgPCAxMDAgPyAnc21vb3RoJyA6ICdhdXRvJ1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgc2Nyb2xsKCdob3VyJywgdGhpcy5ob3VyKVxuICAgICAgICBzY3JvbGwoJ21pbnV0ZScsIHRoaXMubWludXRlKVxuICAgICAgICBzY3JvbGwoJ3NlY29uZCcsIHRoaXMuc2Vjb25kKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb25Gb2N1cyhmb2N1cykge1xuICAgICAgdGhpcy5pbnB1dEZvY3VzZWQgPSBmb2N1c1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBmb2N1c1xuICAgIH0sXG5cbiAgICBvbktleURvd24oZXZlbnQpIHtcbiAgICAgIGNvbnN0IHsgaW5wdXQgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IGdldFNlbGVjdGlvbihpbnB1dClcbiAgICAgIGNvbnN0IHsgdmVyOiBzdGVwLCBlbnRlciB9ID0gZ2V0S2V5TmF2aWdhdGlvbihldmVudClcbiAgICAgIGlmIChzdGVwIHx8IGVudGVyKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcblxuICAgICAgICBjb25zdCBnZXREYXRlUGFydCA9IHBvc2l0aW9uID0+XG4gICAgICAgICAgZ2V0RGF0ZVBhcnRBdFBvc2l0aW9uKHRoaXMuY3VycmVudFRleHQsIHBvc2l0aW9uLCB0aGlzLmZvcm1hdE9wdGlvbnMpXG5cbiAgICAgICAgaWYgKHN0ZXApIHtcbiAgICAgICAgICBpZiAoIXRoaXMuc2hvd1BvcHVwKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IHRydWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeyBuYW1lLCBzdGFydCB9ID0gZ2V0RGF0ZVBhcnQoc2VsZWN0aW9uLnN0YXJ0KSB8fCB7fVxuICAgICAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW25hbWVdICsgc3RlcFxuICAgICAgICAgICAgICBjb25zdCBjb3VudCA9IHRoaXMuJHJlZnNbbmFtZV0uY2hpbGRFbGVtZW50Q291bnRcbiAgICAgICAgICAgICAgdGhpc1tuYW1lXSA9XG4gICAgICAgICAgICAgICAgdmFsdWUgPCAwXG4gICAgICAgICAgICAgICAgICA/IHZhbHVlICsgY291bnRcbiAgICAgICAgICAgICAgICAgIDogdmFsdWUgPj0gY291bnRcbiAgICAgICAgICAgICAgICAgICAgPyB2YWx1ZSAtIGNvdW50XG4gICAgICAgICAgICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgICAgICAgdGhpcy5pZ25vcmVOZXh0Q2hhbmdlID0gdHJ1ZVxuICAgICAgICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiBzZXRTZWxlY3Rpb24oaW5wdXQsIGdldERhdGVQYXJ0KHN0YXJ0KSkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGVudGVyKSB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNlbGVjdGlvbi5zdGFydCA9PT0gc2VsZWN0aW9uLmVuZCkge1xuICAgICAgICBjb25zdCB7IHZhbHVlIH0gPSBpbnB1dFxuICAgICAgICBsZXQgcG9zID0gc2VsZWN0aW9uLnN0YXJ0XG5cbiAgICAgICAgY29uc3QgaXNEaWdpdCA9IGNoYXIgPT4gIWlzTmFOKE51bWJlcihjaGFyKSlcblxuICAgICAgICBpZiAoZXZlbnQua2V5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIGlmIChpc0RpZ2l0KGV2ZW50LmtleSkgJiYgcG9zIDwgdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHZhbHVlW3Bvc10gPT09ICc6JyAmJlxuICAgICAgICAgICAgICBpc0RpZ2l0KHZhbHVlW3BvcyAtIDFdKSAmJlxuICAgICAgICAgICAgICBpc0RpZ2l0KHZhbHVlW3BvcyAtIDJdKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHBvcysrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBSZW1vdmUgbmV4dCBkaWdpdCBzbyB0aGUgZXZlbnQgb3ZlcnJpZGVzIGl0IGluc3RlYWQgb2YgaW5zZXJ0aW5nXG4gICAgICAgICAgICAvLyBuZXcgY2hhcnMuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGlzRGlnaXQodmFsdWVbcG9zXSkgJiYgKFxuICAgICAgICAgICAgICAgIGlzRGlnaXQodmFsdWVbcG9zICsgMV0pIHx8XG4gICAgICAgICAgICAgICAgaXNEaWdpdCh2YWx1ZVtwb3MgLSAxXSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGlucHV0LnZhbHVlID0gKFxuICAgICAgICAgICAgICAgIHZhbHVlLnNsaWNlKDAsIHBvcykgK1xuICAgICAgICAgICAgICAgIHZhbHVlLnNsaWNlKHBvcyArIDEpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc2V0U2VsZWN0aW9uKGlucHV0LCB7IHN0YXJ0OiBwb3MsIGVuZDogcG9zIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IGZvcm1hdCh0aGlzLmN1cnJlbnRWYWx1ZSwgdGhpcy5mb3JtYXRPcHRpb25zKS5sZW5ndGhcbiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IGxlbmd0aCkge1xuICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA+IGxlbmd0aCkge1xuICAgICAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIGxlbmd0aClcbiAgICAgICAgICAgICAgc2V0U2VsZWN0aW9uKGlucHV0LCBzZWxlY3Rpb24pXG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJykge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHBvcyA9PT0gMSB8fFxuICAgICAgICAgICAgWycgJywgJzonXS5pbmNsdWRlcyh2YWx1ZVtwb3MgLSAyXSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgcG9zID09PSB2YWx1ZS5sZW5ndGggfHxcbiAgICAgICAgICAgICAgdmFsdWVbcG9zXSA9PT0gJzonXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcG9zLS1cbiAgICAgICAgICAgICAgaW5wdXQudmFsdWUgPSAoXG4gICAgICAgICAgICAgICAgdmFsdWUuc2xpY2UoMCwgcG9zKSArXG4gICAgICAgICAgICAgICAgKCh2YWx1ZVtwb3MgLSAxXSA/PyAnJykgKyAnMDAnKSArXG4gICAgICAgICAgICAgICAgdmFsdWUuc2xpY2UocG9zICsgMSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBzZXRTZWxlY3Rpb24oaW5wdXQsIHsgc3RhcnQ6IHBvcywgZW5kOiBwb3MgfSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgIGlzRGlnaXQodmFsdWVbcG9zXSkgJiZcbiAgICAgICAgICAgICAgIWlzRGlnaXQoK3ZhbHVlW3BvcyArIDFdKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIC8vIFdoZW4gcmVtb3ZpbmcgdGhlIGZpcnN0IG9mIHR3byBkaWdpdHMsIHJlcGxhY2Ugd2l0aCAwXG4gICAgICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgcG9zKSArICcwJyArIHZhbHVlLnNsaWNlKHBvcylcbiAgICAgICAgICAgICAgc2V0U2VsZWN0aW9uKGlucHV0LCB7IHN0YXJ0OiBwb3MsIGVuZDogcG9zIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uTW91c2VEb3duKHRvZ2dsZSkge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSAhdGhpcy5kaXNhYmxlZCAmJiAoIXRvZ2dsZSB8fCAhdGhpcy5zaG93UG9wdXApXG4gICAgICBpZiAodGhpcy5zaG93UG9wdXApIHtcbiAgICAgICAgdGhpcy5mb2N1cygpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy5pbnB1dC5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLmlucHV0LmJsdXIoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdGltZS1waWNrZXIge1xuICAuZGl0by1pbnB1dCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWluLXdpZHRoOiA2ZW07XG4gIH1cbn1cblxuLmRpdG8tdGltZS1waWNrZXItcG9wdXAge1xuICBtYXgtd2lkdGg6IDE2MHB4O1xuICBtYXJnaW46ICRwb3B1cC1tYXJnaW47XG59XG5cbiR0aW1lLXBpY2tlci1saW5lLWhlaWdodDogMjRweDtcblxuLmRpdG8tdGltZS1waWNrZXIge1xuICAuZGl0by1pbnB1dCB7XG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxufVxuXG4uZGl0by10aW1lLXBpY2tlci1wb3B1cCB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgYm94LXNoYWRvdzogJHNoYWRvdy13aW5kb3c7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5kaXRvLXRpbWUtcGlja2VyLXBvcHVwIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsIHtcbiAgZmxvYXQ6IGxlZnQ7XG4gIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgYm9yZGVyLXdpZHRoOiAwIDFweCAwO1xuICBtYXJnaW4tbGVmdDogLTFweDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgd2lkdGg6IGNhbGMoMTAwJSAvIDMgKyAxcHgpO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICY6bGFzdC1jaGlsZCB7XG4gICAgYm9yZGVyLXJpZ2h0OiAwO1xuICB9XG5cbiAgdWwge1xuICAgIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luOiAwO1xuICAgIC8vIEhpZGUgc2Nyb2xsYmFyOlxuICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICAgIHBhZGRpbmc6IDAgMTdweCAwIDA7XG4gICAgaGVpZ2h0OiA3ICogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0O1xuXG4gICAgJiA+IGxpIHtcbiAgICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6ICR0aW1lLXBpY2tlci1saW5lLWhlaWdodDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAkdGltZS1waWNrZXItbGluZS1oZWlnaHQ7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi10b3A6IDMgKiAkdGltZS1waWNrZXItbGluZS1oZWlnaHQ7XG4gICAgICB9XG5cbiAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDMgKiAkdGltZS1waWNrZXItbGluZS1oZWlnaHQ7XG4gICAgICB9XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItaGlnaGxpZ2h0O1xuICAgICAgfVxuXG4gICAgICAmLnNlbGVjdGVkLFxuICAgICAgJi5zZWxlY3RlZDpob3ZlciB7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZDtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZTtcbiAgICAgIH1cblxuICAgICAgJi5kaXNhYmxlZCB7XG4gICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICAgY29sb3I6ICRjb2xvci1kaXNhYmxlZDtcbiAgICAgIH1cblxuICAgICAgJi5kaXNhYmxlZDpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1kYXRlLXRpbWUtcGlja2VyKHJlZj1cInBpY2tlclwiKVxuICAuZGl0by1kYXRlLXRpbWUtcGlja2VyX19pbm5lcig6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogZm9jdXNlZCB9XCIpXG4gICAgSW5wdXRGaWVsZC5kaXRvLWRhdGUtdGltZS1waWNrZXJfX2lucHV0KFxuICAgICAgcmVmPVwiaW5wdXRcIlxuICAgICAgdi1tb2RlbD1cImN1cnJlbnRUZXh0XCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBmb2N1c2VkIH1cIlxuICAgICAgdi1iaW5kPVwieyBwbGFjZWhvbGRlciwgZGlzYWJsZWQsIC4uLiRhdHRycyB9XCJcbiAgICAgIEBmb2N1cz1cIm9uRm9jdXModHJ1ZSlcIlxuICAgICAgQGJsdXI9XCJvbkZvY3VzKGZhbHNlKVwiXG4gICAgICBAa2V5ZG93bj1cIm9uS2V5RG93blwiXG4gICAgICBAbW91c2Vkb3duLnN0b3A9XCJvbk1vdXNlRG93bihmYWxzZSlcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKCNiZWZvcmUpXG4gICAgICAgIHNsb3QobmFtZT1cImJlZm9yZVwiKVxuICAgICAgdGVtcGxhdGUoI2FmdGVyKVxuICAgICAgICBJY29uKFxuICAgICAgICAgIG5hbWU9XCJjYWxlbmRhclwiXG4gICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICAgIEBtb3VzZWRvd24ucHJldmVudD1cIm9uTW91c2VEb3duKHRydWUpXCJcbiAgICAgICAgKVxuICAgICAgICBzbG90KG5hbWU9XCJhZnRlclwiKVxuICAgIERhdGVQaWNrZXIoXG4gICAgICByZWY9XCJkYXRlXCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgdi1tb2RlbDpzaG93PVwic2hvd0RhdGVcIlxuICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgOnRhcmdldD1cIiRyZWZzLnBpY2tlclwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZSgjdHJpZ2dlcilcbiAgICAgICAgLy8tIEludGVudGlvbmFsbHkgZW1wdHlcbiAgICBUaW1lUGlja2VyKFxuICAgICAgcmVmPVwidGltZVwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICAgIHYtbW9kZWw6c2hvdz1cInNob3dUaW1lXCJcbiAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiXG4gICAgICA6dGFyZ2V0PVwiJHJlZnMucGlja2VyXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKCN0cmlnZ2VyKVxuICAgICAgICAvLy0gSW50ZW50aW9uYWxseSBlbXB0eVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGZvcm1hdCwgZGVmYXVsdEZvcm1hdHMsIGFzc2lnbkRlZXBseSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgSW5wdXRGaWVsZCBmcm9tICcuL0lucHV0RmllbGQudnVlJ1xuaW1wb3J0IERhdGVQaWNrZXIgZnJvbSAnLi9EYXRlUGlja2VyLnZ1ZSdcbmltcG9ydCBUaW1lUGlja2VyIGZyb20gJy4vVGltZVBpY2tlci52dWUnXG5pbXBvcnQgSWNvbiBmcm9tICcuL0ljb24udnVlJ1xuaW1wb3J0IHsgcGFyc2VEYXRlIH0gZnJvbSAnLi4vdXRpbHMvZGF0ZS5qcydcbmltcG9ydCB7IGdldFNlbGVjdGlvbiwgc2V0U2VsZWN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvc2VsZWN0aW9uLmpzJ1xuaW1wb3J0IHsgZ2V0S2V5TmF2aWdhdGlvbiB9IGZyb20gJy4uL3V0aWxzL2V2ZW50LmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHsgSW5wdXRGaWVsZCwgRGF0ZVBpY2tlciwgVGltZVBpY2tlciwgSWNvbiB9LFxuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZScsICdjaGFuZ2UnLCAnZm9jdXMnLCAnYmx1ciddLFxuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBEYXRlLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdHJhbnNpdGlvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdzbGlkZScgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGxvY2FsZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdlbi1VUycgfSxcbiAgICBmb3JtYXQ6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VmFsdWU6IHRoaXMubW9kZWxWYWx1ZSxcbiAgICAgIHNob3dEYXRlOiBmYWxzZSxcbiAgICAgIHNob3dUaW1lOiBmYWxzZSxcbiAgICAgIGlucHV0Rm9jdXNlZDogZmFsc2UsXG4gICAgICBkYXRlRm9jdXNlZDogZmFsc2UsXG4gICAgICB0aW1lRm9jdXNlZDogZmFsc2UsXG4gICAgICBjbG9zZWRNb2RlOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgYXR0cmlidXRlcygpIHtcbiAgICAgIGNvbnN0IHsgdHJhbnNpdGlvbiwgZGlzYWJsZWQsIGxvY2FsZSwgZm9ybWF0T3B0aW9uczogZm9ybWF0IH0gPSB0aGlzXG4gICAgICByZXR1cm4geyB0cmFuc2l0aW9uLCBkaXNhYmxlZCwgbG9jYWxlLCBmb3JtYXQgfVxuICAgIH0sXG5cbiAgICBmb2N1c2VkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5wdXRGb2N1c2VkIHx8IHRoaXMuc2hvd0RhdGUgfHwgdGhpcy5zaG93VGltZVxuICAgIH0sXG5cbiAgICBpbnB1dCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZWZzLmlucHV0LmlucHV0XG4gICAgfSxcblxuICAgIGZvcm1hdE9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gYXNzaWduRGVlcGx5KFxuICAgICAgICB7XG4gICAgICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZSxcbiAgICAgICAgICB0aW1lOiBkZWZhdWx0Rm9ybWF0cy50aW1lLFxuICAgICAgICAgIGRhdGU6IGRlZmF1bHRGb3JtYXRzLmRhdGVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgIG1vbnRoOiAnc2hvcnQnLFxuICAgICAgICAgICAgZm9ybWF0OiAodmFsdWUsIHR5cGUsIG9wdGlvbnMpID0+XG4gICAgICAgICAgICAgIHR5cGUgPT09ICdsaXRlcmFsJyAmJiAvXFxiYXRcXGIvLnRlc3QodmFsdWUpXG4gICAgICAgICAgICAgICAgPyAnLCAnXG4gICAgICAgICAgICAgICAgOiB0aGlzLmZvcm1hdD8uZGF0ZT8uZm9ybWF0Py4odmFsdWUsIHR5cGUsIG9wdGlvbnMpID8/IHZhbHVlXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB0aGlzLmZvcm1hdFxuICAgICAgKVxuICAgIH0sXG5cbiAgICB0aW1lSW5kZXgoKSB7XG4gICAgICBjb25zdCB0ZXh0ID0gdGhpcy5jdXJyZW50VGV4dFxuICAgICAgaWYgKHRleHQpIHtcbiAgICAgICAgY29uc3QgdGltZSA9IHRleHQubWF0Y2goLyhbXFxTXStcXHMqKSQvKT8uWzFdXG4gICAgICAgIGlmICh0aW1lKSB7XG4gICAgICAgICAgcmV0dXJuIHRleHQubGVuZ3RoIC0gdGltZS5sZW5ndGhcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgY3VycmVudFRleHQ6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdCh0aGlzLmN1cnJlbnRWYWx1ZSwgdGhpcy5mb3JtYXRPcHRpb25zKSB8fCAnJ1xuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBwYXJzZURhdGUodmFsdWUsIHRoaXMuZm9ybWF0T3B0aW9ucylcbiAgICAgICAgaWYgKGRhdGUpIHtcbiAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSBnZXRTZWxlY3Rpb24odGhpcy5pbnB1dClcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGRhdGVcbiAgICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiBzZXRTZWxlY3Rpb24odGhpcy5pbnB1dCwgc2VsZWN0aW9uKSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUodG8sIGZyb20pIHtcbiAgICAgIGlmICgrdG8gIT09ICtmcm9tKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdG9cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKHZhbHVlKSB7XG4gICAgICBpZiAoK3ZhbHVlICE9PSArdGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgdmFsdWUpXG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1c2VkKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gXiBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQodG8gPyAnZm9jdXMnIDogJ2JsdXInKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25Gb2N1cyhmb2N1cykge1xuICAgICAgdGhpcy5pbnB1dEZvY3VzZWQgPSBmb2N1c1xuICAgICAgaWYgKGZvY3VzKSB7XG4gICAgICAgIHRoaXMudXBkYXRlUG9wdXBzKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2hvd0RhdGUgPSBmYWxzZVxuICAgICAgICB0aGlzLnNob3dUaW1lID0gZmFsc2VcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25Nb3VzZURvd24odG9nZ2xlKSB7XG4gICAgICBpZiAodG9nZ2xlICYmICh0aGlzLnNob3dEYXRlIHx8IHRoaXMuc2hvd1RpbWUpKSB7XG4gICAgICAgIHRoaXMuc2hvd0RhdGUgPSBmYWxzZVxuICAgICAgICB0aGlzLnNob3dUaW1lID0gZmFsc2VcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5mb2N1cygpXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLnVwZGF0ZVBvcHVwcygpKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbktleURvd24oZXZlbnQpIHtcbiAgICAgIGNvbnN0IG1vZGUgPSB0aGlzLmdldE1vZGUoZXZlbnQpXG4gICAgICB0aGlzLiRyZWZzW21vZGVdLm9uS2V5RG93bihldmVudClcbiAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgIHRoaXMuY2xvc2VkTW9kZSA9IG1vZGVcbiAgICAgIH0gZWxzZSBpZiAobW9kZSAhPT0gdGhpcy5jbG9zZWRNb2RlKSB7XG4gICAgICAgIHRoaXMudXBkYXRlUG9wdXBzKG1vZGUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldE1vZGUoZXZlbnQgPSBudWxsKSB7XG4gICAgICBjb25zdCB7IHN0YXJ0IH0gPSBnZXRTZWxlY3Rpb24odGhpcy5pbnB1dClcbiAgICAgIGNvbnN0IHsgaG9yOiBzdGVwIH0gPSBnZXRLZXlOYXZpZ2F0aW9uKGV2ZW50KVxuICAgICAgcmV0dXJuIHRoaXMudGltZUluZGV4ID09PSBudWxsIHx8IHN0YXJ0ICsgc3RlcCA8IHRoaXMudGltZUluZGV4XG4gICAgICAgID8gJ2RhdGUnXG4gICAgICAgIDogJ3RpbWUnXG4gICAgfSxcblxuICAgIHVwZGF0ZVBvcHVwcyhtb2RlID0gdGhpcy5nZXRNb2RlKCkpIHtcbiAgICAgIGlmIChtb2RlKSB7XG4gICAgICAgIHRoaXMuY2xvc2VkTW9kZSA9IG51bGxcbiAgICAgIH1cbiAgICAgIHRoaXMuc2hvd0RhdGUgPSBtb2RlID09PSAnZGF0ZSdcbiAgICAgIHRoaXMuc2hvd1RpbWUgPSBtb2RlID09PSAndGltZSdcbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLmlucHV0LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuaW5wdXQuYmx1cigpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1kYXRlLXRpbWUtcGlja2VyIHtcbiAgJl9faW5uZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gIH1cblxuICAmX19pbnB1dCB7XG4gICAgZmxleDogMTtcbiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgIG1pbi13aWR0aDogMTJlbTtcbiAgfVxuXG4gIC5kaXRvLWRhdGUtcGlja2VyLFxuICAuZGl0by10aW1lLXBpY2tlciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPCEtLSBlc2xpbnQtZGlzYWJsZSB2dWUvbm8tdGVtcGxhdGUtc2hhZG93IC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXBhZ2luYXRpb25cbiAgLmRpdG8tcGFnaW5hdGlvbi10b3RhbChcbiAgICB2LWlmPVwic2hvd1RvdGFsXCJcbiAgKVxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1pZj1cInRvdGFsID4gMFwiXG4gICAgKSB7eyBmaXJzdCB9fSDigJMge3sgbGFzdCB9fSAvIHt7IHRvdGFsIH19XG4gIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICAgIHYtaWY9XCJudW1QYWdlcyA+IDFcIlxuICApXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgdi1mb3I9XCJidXR0b24gaW4gYnV0dG9uc1wiXG4gICAgICA6Y2xhc3M9XCJnZXRCdXR0b25DbGFzc2VzKGJ1dHRvbilcIlxuICAgICAgOmRpc2FibGVkPVwiYnV0dG9uLmRpc2FibGVkXCJcbiAgICAgIEBjbGljaz1cIm9uQ2xpY2tCdXR0b24oYnV0dG9uKVwiXG4gICAgKVxuICAgICAgc3BhbihcbiAgICAgICAgdi1pZj1cImJ1dHRvbi50ZXh0XCJcbiAgICAgICkge3sgYnV0dG9uLnRleHQgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTpwYWdlJ10sXG5cbiAgcHJvcHM6IHtcbiAgICB0b3RhbDogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfSxcbiAgICBwYWdlOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMSB9LFxuICAgIHBhZ2VTaXplOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMTAgfSxcbiAgICBzaG93VG90YWw6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvd1ByZXY6IHRydWUsXG4gICAgICBzaG93TmV4dDogdHJ1ZSxcbiAgICAgIGN1cnJlbnRQYWdlOiB0aGlzLnBhZ2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmaXJzdCgpIHtcbiAgICAgIHJldHVybiAodGhpcy5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5wYWdlU2l6ZSArIDFcbiAgICB9LFxuXG4gICAgbGFzdCgpIHtcbiAgICAgIHJldHVybiBNYXRoLm1pbih0aGlzLmZpcnN0ICsgdGhpcy5wYWdlU2l6ZSAtIDEsIHRoaXMudG90YWwpXG4gICAgfSxcblxuICAgIG51bVBhZ2VzKCkge1xuICAgICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLnRvdGFsIC8gdGhpcy5wYWdlU2l6ZSlcbiAgICB9LFxuXG4gICAgYnV0dG9ucygpIHtcbiAgICAgIGNvbnN0IHsgc2hvd1ByZXYsIHNob3dOZXh0LCBjdXJyZW50UGFnZSwgbnVtUGFnZXMgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHNob3dMZW5ndGggPSBzaG93UHJldiArIHNob3dOZXh0ICsgMVxuXG4gICAgICBsZXQgc3RhcnQgPSAxXG4gICAgICBsZXQgZW5kID0gMVxuICAgICAgaWYgKG51bVBhZ2VzIDw9IHNob3dMZW5ndGgpIHtcbiAgICAgICAgZW5kID0gbnVtUGFnZXNcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFBhZ2UgPD0gc2hvd1ByZXYgKyAxKSB7XG4gICAgICAgIGVuZCA9IHNob3dMZW5ndGhcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFBhZ2UgPj0gbnVtUGFnZXMgLSBzaG93TmV4dCkge1xuICAgICAgICBlbmQgPSBudW1QYWdlc1xuICAgICAgICBzdGFydCA9IG51bVBhZ2VzIC0gc2hvd0xlbmd0aCArIDFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0ID0gY3VycmVudFBhZ2UgLSBzaG93UHJldlxuICAgICAgICBlbmQgPSBjdXJyZW50UGFnZSArIHNob3dOZXh0XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJ1dHRvbnMgPSBbXVxuICAgICAgYnV0dG9ucy5wdXNoKHtcbiAgICAgICAgaW5kZXg6IGN1cnJlbnRQYWdlIC0gMSxcbiAgICAgICAgdHlwZTogJ3ByZXYnLFxuICAgICAgICBkaXNhYmxlZDogY3VycmVudFBhZ2UgPD0gMVxuICAgICAgfSlcbiAgICAgIGlmIChzdGFydCA+PSAyKSB7XG4gICAgICAgIGJ1dHRvbnMucHVzaCh7IGluZGV4OiAxLCB0ZXh0OiAxIH0pXG4gICAgICB9XG4gICAgICBpZiAoc3RhcnQgPiAyKSB7XG4gICAgICAgIGJ1dHRvbnMucHVzaCh7XG4gICAgICAgICAgaW5kZXg6IE1hdGgubWF4KDEsIGN1cnJlbnRQYWdlIC0gMTApLFxuICAgICAgICAgIHR5cGU6ICdlbGxpcHNpcy1wcmV2J1xuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKSB7XG4gICAgICAgIGJ1dHRvbnMucHVzaCh7XG4gICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgdGV4dDogaSxcbiAgICAgICAgICBhY3RpdmU6IGkgPT09IGN1cnJlbnRQYWdlXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoZW5kIDwgbnVtUGFnZXMgLSAxKSB7XG4gICAgICAgIGJ1dHRvbnMucHVzaCh7XG4gICAgICAgICAgaW5kZXg6IE1hdGgubWluKG51bVBhZ2VzLCBjdXJyZW50UGFnZSArIDEwKSxcbiAgICAgICAgICB0eXBlOiAnZWxsaXBzaXMtbmV4dCdcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgPD0gbnVtUGFnZXMgLSAxKSB7XG4gICAgICAgIGJ1dHRvbnMucHVzaCh7IGluZGV4OiBudW1QYWdlcywgdGV4dDogbnVtUGFnZXMgfSlcbiAgICAgIH1cbiAgICAgIGJ1dHRvbnMucHVzaCh7XG4gICAgICAgIGluZGV4OiBjdXJyZW50UGFnZSArIDEsXG4gICAgICAgIHR5cGU6ICduZXh0JyxcbiAgICAgICAgZGlzYWJsZWQ6IGN1cnJlbnRQYWdlID49IG51bVBhZ2VzXG4gICAgICB9KVxuXG4gICAgICByZXR1cm4gYnV0dG9uc1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHBhZ2UocGFnZSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2VcbiAgICB9LFxuXG4gICAgcGFnZVNpemUoKSB7XG4gICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA+IHRoaXMubnVtUGFnZXMpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMubnVtUGFnZXNcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFBhZ2UodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byAhPT0gZnJvbSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6cGFnZScsIHRvKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0QnV0dG9uQ2xhc3NlcyhidXR0b24pIHtcbiAgICAgIGNvbnN0IGNsYXNzZXMgPSB7XG4gICAgICAgICdkaXRvLXNlbGVjdGVkJzogYnV0dG9uLmFjdGl2ZVxuICAgICAgfVxuICAgICAgaWYgKGJ1dHRvbi50eXBlKSB7XG4gICAgICAgIGNsYXNzZXNbYGRpdG8tYnV0dG9uLSR7YnV0dG9uLnR5cGV9YF0gPSB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gY2xhc3Nlc1xuICAgIH0sXG5cbiAgICBvbkNsaWNrQnV0dG9uKGJ1dHRvbikge1xuICAgICAgaWYgKFxuICAgICAgICBidXR0b24uaW5kZXggJiZcbiAgICAgICAgIWJ1dHRvbi5kaXNhYmxlZCAmJlxuICAgICAgICBidXR0b24uaW5kZXggIT09IHRoaXMuY3VycmVudFBhZ2VcbiAgICAgICkge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gYnV0dG9uLmluZGV4XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1wYWdpbmF0aW9uIHtcbiAgZGlzcGxheTogZmxleDtcblxuICAuZGl0by1wYWdpbmF0aW9uLXRvdGFsIHtcbiAgICBAaW5jbHVkZSBlbGxpcHNpcztcblxuICAgIG1hcmdpbjogMCAwLjVlbTtcbiAgICBsaW5lLWhlaWdodDogJGlucHV0LWhlaWdodDtcbiAgfVxuXG4gIC5kaXRvLWJ1dHRvbiB7XG4gICAgdHJhbnNpdGlvbjpcbiAgICAgIGFsbCAwLjNzIGVhc2UsXG4gICAgICBjb2xvciAwcyxcbiAgICAgIGJhY2tncm91bmQgMHMsXG4gICAgICBib3JkZXIgMHM7XG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICBwYWRkaW5nOiAwIDAuNWVtO1xuXG4gICAgJi1wcmV2LFxuICAgICYtbmV4dCB7XG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBAZXh0ZW5kICVpY29uLWFycm93O1xuICAgICAgfVxuICAgIH1cblxuICAgICYtcHJldjo6YmVmb3JlIHtcbiAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC0xKTtcbiAgICB9XG5cbiAgICAmLWVsbGlwc2lzLXByZXYsXG4gICAgJi1lbGxpcHNpcy1uZXh0IHtcbiAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICBib3JkZXI6IDA7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgY29sb3I6ICRjb2xvci10ZXh0O1xuXG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBAZXh0ZW5kICVpY29uLWVsbGlwc2lzO1xuICAgICAgfVxuXG4gICAgICAmOmhvdmVyOjpiZWZvcmUge1xuICAgICAgICBAZXh0ZW5kICVpY29uLWNoZXZyb25zO1xuICAgICAgfVxuXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci1hY3RpdmU7XG4gICAgICB9XG5cbiAgICAgICY6YWN0aXZlIHtcbiAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLWVsbGlwc2lzLXByZXY6OmJlZm9yZSB7XG4gICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXN3aXRjaChcbiAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4gIDpzdHlsZT1cInN0eWxlc1wiXG4pXG4gIC5kaXRvLXN3aXRjaC1wYW5lXG4gICAgaW5wdXQoXG4gICAgICA6aWQ9XCJpZFwiXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIHYtbW9kZWw9XCJjaGVja2VkXCJcbiAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICA6bmFtZT1cIm5hbWVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiAgICAuZGl0by1zd2l0Y2gtYnV0dG9uXG4gICAgc3Bhbi5kaXRvLXN3aXRjaC1sYWJlbChcbiAgICAgIHYtaWY9XCJsYWJlbHNcIlxuICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIHYtaWY9XCJjaGVja2VkXCJcbiAgICAgICAgbmFtZT1cImNoZWNrZWRcIlxuICAgICAgKSB7eyBsYWJlbHMuY2hlY2tlZCB8fCAnb24nIH19XG4gICAgICBzbG90KFxuICAgICAgICB2LWVsc2VcbiAgICAgICAgbmFtZT1cInVuY2hlY2tlZFwiXG4gICAgICApIHt7IGxhYmVscy51bmNoZWNrZWQgfHwgJ29mZicgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJywgJ2NoYW5nZSddLFxuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGlkOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIG5hbWU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBsYWJlbHM6IHsgdHlwZTogW09iamVjdCwgQm9vbGVhbl0sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjaGVja2VkOiB0aGlzLm1vZGVsVmFsdWVcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjbGFzc2VzKCkge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgdGhpcy4kYXR0cnMuY2xhc3MsXG4gICAgICAgIHtcbiAgICAgICAgICAnZGl0by1jaGVja2VkJzogdGhpcy5jaGVja2VkLFxuICAgICAgICAgICdkaXRvLWRpc2FibGVkJzogdGhpcy5kaXNhYmxlZFxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcblxuICAgIHN0eWxlcygpIHtcbiAgICAgIGNvbnN0IHsgbGFiZWxzOiB7IGNoZWNrZWQsIHVuY2hlY2tlZCB9ID0ge30gfSA9IHRoaXNcbiAgICAgIC8vIENhbGN1bGF0ZSBgLS1zd2l0Y2gtd2lkdGhgIGluIGByZW1gLCBiYXNlZCBvbiBsYWJlbCBsZW5ndGguXG4gICAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1heCgwLCBjaGVja2VkPy5sZW5ndGgsIHVuY2hlY2tlZD8ubGVuZ3RoKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJy0tc3dpdGNoLXdpZHRoJzogbGVuZ3RoID8gYCR7bGVuZ3RoICogMS41fXJlbWAgOiBudWxsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICBjb25zdCB7IGNsYXNzOiBfLCAuLi5hdHRyaWJ1dGVzIH0gPSB0aGlzLiRhdHRyc1xuICAgICAgcmV0dXJuIGF0dHJpYnV0ZXNcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKG1vZGVsVmFsdWUpIHtcbiAgICAgIHRoaXMuY2hlY2tlZCA9IG1vZGVsVmFsdWVcbiAgICB9LFxuXG4gICAgY2hlY2tlZChjaGVja2VkKSB7XG4gICAgICBpZiAoY2hlY2tlZCAhPT0gdGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgY2hlY2tlZClcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgY2hlY2tlZClcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5mb2N1cygpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zd2l0Y2gge1xuICAvLyBVc2Ugd2hvbGUgbXVsdGlwbGVzIG9mIGByZW1gIGZvciBzaXplcyBhbmQgYHB4YCBtYXJnaW5zL3BhZGRpbmcgYWxvbmdcbiAgLy8gd2l0aCBgY2FsYygpYCB0byBlbmQgdXAgd2l0aCBldmVuIHBpeGVsIHNpemVzLlxuICAtLXN3aXRjaC13aWR0aDogNGVtO1xuICAtLXN3aXRjaC1oZWlnaHQ6IDJlbTtcbiAgLS1zd2l0Y2gtbWFyZ2luOiAycHg7XG4gIC0tc3dpdGNoLXBhZGRpbmc6IDNweDtcbiAgLS1zd2l0Y2gtc3BlZWQ6IDMwMG1zO1xuICAtLWxhYmVsLW1hcmdpbjogMC41ZW07XG4gIC0td2lkdGg6IGNhbGModmFyKC0tc3dpdGNoLXdpZHRoKSAtIDIgKiB2YXIoLS1zd2l0Y2gtbWFyZ2luKSk7XG4gIC0taGVpZ2h0OiBjYWxjKHZhcigtLXN3aXRjaC1oZWlnaHQpIC0gMiAqIHZhcigtLXN3aXRjaC1tYXJnaW4pKTtcbiAgLS1vZmZzZXQ6IGNhbGModmFyKC0td2lkdGgpIC0gdmFyKC0taGVpZ2h0KSk7XG5cbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGhlaWdodDogdmFyKC0tc3dpdGNoLWhlaWdodCk7XG4gIC8vIFRvIG1ha2UgaW5saW5lIGxhYmVscyBhcHBlYXIgb24gY29uc2lzdGVudCBiYXNlbGluZTpcbiAgdmVydGljYWwtYWxpZ246IGJvdHRvbTtcbiAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgLmRpdG8tc3dpdGNoLXBhbmUge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB3aWR0aDogdmFyKC0td2lkdGgpO1xuICAgIGhlaWdodDogdmFyKC0taGVpZ2h0KTtcbiAgfVxuXG4gIC5kaXRvLXN3aXRjaC1wYW5lLFxuICAuZGl0by1zd2l0Y2gtbGFiZWwge1xuICAgIHRvcDogNTAlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgfVxuXG4gIGlucHV0IHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgYm9yZGVyLXJhZGl1czogMWVtO1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodDtcbiAgICB0cmFuc2l0aW9uOlxuICAgICAgYm9yZGVyLWNvbG9yIDAuM3MsXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yIDAuM3M7XG4gIH1cblxuICAuZGl0by1zd2l0Y2gtYnV0dG9uIHtcbiAgICAtLXNpemU6IGNhbGModmFyKC0taGVpZ2h0KSAtIDIgKiB2YXIoLS1zd2l0Y2gtcGFkZGluZykpO1xuXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogdmFyKC0tc3dpdGNoLXBhZGRpbmcpO1xuICAgIGxlZnQ6IHZhcigtLXN3aXRjaC1wYWRkaW5nKTtcbiAgICB3aWR0aDogdmFyKC0tc2l6ZSk7XG4gICAgaGVpZ2h0OiB2YXIoLS1zaXplKTtcbiAgICBib3JkZXItcmFkaXVzOiBjYWxjKHZhcigtLXNpemUpIC8gMik7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIHZhcigtLXN3aXRjaC1zcGVlZCk7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xuICB9XG5cbiAgLmRpdG8tc3dpdGNoLWJ1dHRvbixcbiAgLmRpdG8tc3dpdGNoLWxhYmVsIHtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgfVxuXG4gIC5kaXRvLXN3aXRjaC1sYWJlbCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiB2YXIoLS1sYWJlbC1tYXJnaW4pO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgfVxuXG4gICYuZGl0by1jaGVja2VkIHtcbiAgICBpbnB1dCB7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgIH1cblxuICAgIC5kaXRvLXN3aXRjaC1idXR0b24ge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKHZhcigtLW9mZnNldCkpO1xuICAgIH1cblxuICAgIC5kaXRvLXN3aXRjaC1sYWJlbCB7XG4gICAgICBsZWZ0OiB2YXIoLS1sYWJlbC1tYXJnaW4pO1xuICAgICAgcmlnaHQ6IHVuc2V0O1xuICAgIH1cbiAgfVxuXG4gICYuZGl0by1kaXNhYmxlZCB7XG4gICAgQGV4dGVuZCAlYnV0dG9uLWRpc2FibGVkO1xuICB9XG5cbiAgJjpmb2N1cy13aXRoaW46bm90KDpob3Zlcikge1xuICAgIC5kaXRvLXN3aXRjaC1idXR0b24ge1xuICAgICAgYm94LXNoYWRvdzogJHNoYWRvdy1mb2N1cztcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8c2NyaXB0PlxuaW1wb3J0IHsgaCBhcyBjcmVhdGVFbGVtZW50LCBUcmFuc2l0aW9uIH0gZnJvbSAndnVlJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZnVuY3Rpb24gVHJhbnNpdGlvbkhlaWdodCh7IGVuYWJsZWQgfSwgeyBzbG90cyB9KSB7XG4gIHJldHVybiBlbmFibGVkXG4gICAgPyBjcmVhdGVFbGVtZW50KFRyYW5zaXRpb24sIHByb3BzLCBzbG90cylcbiAgICA6IHNsb3RzLmRlZmF1bHQoKVxufVxuXG5UcmFuc2l0aW9uSGVpZ2h0LnByb3BzID0ge1xuICBlbmFibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBUcmFuc2l0aW9uSGVpZ2h0XG5cbmNvbnN0IHNldFN0eWxlID0gKGVsZW1lbnQsIHN0eWxlKSA9PiBPYmplY3QuYXNzaWduKGVsZW1lbnQuc3R5bGUsIHN0eWxlKVxuXG5jb25zdCBuZXh0VGltZW91dCA9IGNhbGxiYWNrID0+IHNldFRpbWVvdXQoY2FsbGJhY2ssIDApXG5cbi8vIEZvcmNlIHJlcGFpbnQgdG8gbWFrZSBzdXJlIHRoZSBhbmltYXRpb24gaXMgdHJpZ2dlcmVkIGNvcnJlY3RseS5cbmNvbnN0IGZvcmNlUmVwYWludCA9IGVsZW1lbnQgPT4gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5oZWlnaHRcblxuY29uc3QgcHJvcHMgPSB7XG4gIG5hbWU6ICdkaXRvLWhlaWdodCcsXG5cbiAgb25BZnRlckVudGVyKGVsZW1lbnQpIHtcbiAgICAvLyBBIHRpbWVvdXQgYmVmb3JlIHNldHRpbmcgc3R5bGUgaXMgb25seSByZWFsbHkgbmVlZGVkIGFmdGVyIGNhbGxzIHRvXG4gICAgLy8gYGZvcmNlUmVwYWludCgpYCwgYnV0IHVzaW5nIG9uZSBoZXJlIHRvbyBwcmVzZXJ2ZXMgZXhlY3V0aW9uIHNlcXVlbmNlIHNvXG4gICAgLy8gdGhhdCB0aGUgY2FsbCBmcm9tIGBlbnRlcigpYCBjYW4gbmV2ZXIgb3V0cnVuIHRoZSBvbmUgZnJvbSBgYWZ0ZXJFbnRlcigpYFxuICAgIG5leHRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0OiBudWxsIH0pKVxuICB9LFxuXG4gIG9uRW50ZXIoZWxlbWVudCkge1xuICAgIC8vIEZvciBzb21lIHJlYXNvbiB3ZSdyZSBnZXR0aW5nIHR3byBgb25FbnRlcigpYCBjYWxscyBwZXIgdHJhbnNpdGlvbixcbiAgICAvLyBzbyB3ZSBuZWVkIHRvIGlnbm9yZSB0aGUgc2Vjb25kIG9uZS4gVGhpcyBtaWdodCBiZSBsaW5rZWQgdG8gdGhlIHVzZVxuICAgIC8vIG9mIGBuZXh0VGltZW91dCgpYCwgd2hpY2ggaXMgcmVxdWlyZWQgdG8gZ2V0IHRoZSBjb3JyZWN0IHZhbHVlIGZvclxuICAgIC8vIGBoZWlnaHRgLCBiYXNlZCBvbiBgJi0tbGFiZWwtdmVydGljYWxgIGNhbGN1bGF0aW9ucy5cbiAgICBjb25zdCB7IHdpZHRoIH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgc2V0U3R5bGUoZWxlbWVudCwge1xuICAgICAgd2lkdGgsXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHZpc2liaWxpdHk6ICdoaWRkZW4nLFxuICAgICAgaGVpZ2h0OiAnYXV0bydcbiAgICB9KVxuICAgIG5leHRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IHsgaGVpZ2h0IH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgICBzZXRTdHlsZShlbGVtZW50LCB7XG4gICAgICAgIHdpZHRoOiBudWxsLFxuICAgICAgICBwb3NpdGlvbjogbnVsbCxcbiAgICAgICAgdmlzaWJpbGl0eTogbnVsbCxcbiAgICAgICAgaGVpZ2h0OiAwXG4gICAgICB9KVxuICAgICAgZm9yY2VSZXBhaW50KGVsZW1lbnQpXG4gICAgICBuZXh0VGltZW91dCgoKSA9PiBzZXRTdHlsZShlbGVtZW50LCB7IGhlaWdodCB9KSlcbiAgICB9KVxuICB9LFxuXG4gIG9uTGVhdmUoZWxlbWVudCkge1xuICAgIGNvbnN0IHsgaGVpZ2h0IH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgc2V0U3R5bGUoZWxlbWVudCwgeyBoZWlnaHQgfSlcbiAgICBmb3JjZVJlcGFpbnQoZWxlbWVudClcbiAgICBuZXh0VGltZW91dCgoKSA9PiBzZXRTdHlsZShlbGVtZW50LCB7IGhlaWdodDogMCB9KSlcbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuJGR1cmF0aW9uOiAwLjE1cztcblxuLmRpdG8taGVpZ2h0LWVudGVyLWFjdGl2ZSxcbi5kaXRvLWhlaWdodC1sZWF2ZS1hY3RpdmUge1xuICB0cmFuc2l0aW9uOiBoZWlnaHQgJGR1cmF0aW9uICRlYXNlLW91dC1xdWFydDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLmRpdG8taGVpZ2h0LWVudGVyLWFjdGl2ZSB7XG4gIGFuaW1hdGlvbjogZGl0by1zbGlkZS1lbnRlciAkZHVyYXRpb24gJGVhc2Utb3V0LXF1YXJ0O1xufVxuXG4uZGl0by1oZWlnaHQtbGVhdmUtYWN0aXZlIHtcbiAgYW5pbWF0aW9uOiBkaXRvLXNsaWRlLWxlYXZlICRkdXJhdGlvbiAkZWFzZS1vdXQtcXVhcnQ7XG59XG5cbi5kaXRvLWhlaWdodC1lbnRlci1mcm9tLFxuLmRpdG8taGVpZ2h0LWxlYXZlLXRvIHtcbiAgaGVpZ2h0OiAwO1xufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7IG1hcmtSYXcsIHVzZVNsb3RzLCBDb21tZW50IH0gZnJvbSAndnVlJ1xuaW1wb3J0IHsgaXNTdHJpbmcsIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzVk5vZGVDb250ZW50KHZub2RlKSB7XG4gIHJldHVybiB2bm9kZSAmJiBhc0FycmF5KHZub2RlKS5zb21lKHZub2RlID0+IHZub2RlLnR5cGUgIT09IENvbW1lbnQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNTbG90Q29udGVudChzbG90LCBwcm9wcyA9IHt9KSB7XG4gIHNsb3QgPSBpc1N0cmluZyhzbG90KSA/IHVzZVNsb3RzKClbc2xvdF0gOiBzbG90XG4gIHJldHVybiBoYXNWTm9kZUNvbnRlbnQoc2xvdD8uKHByb3BzKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJhdyh2YWx1ZSkge1xuICByZXR1cm4gbWFya1Jhdyh7IHZhbHVlIH0pXG59XG4iLCJpbXBvcnQgeyBpc09iamVjdCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBhZGRFdmVudHMgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZG9tSGFuZGxlcnM6IFtdXG4gICAgfVxuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICBmb3IgKGNvbnN0IHsgcmVtb3ZlIH0gb2YgdGhpcy5kb21IYW5kbGVycykge1xuICAgICAgcmVtb3ZlKClcbiAgICB9XG4gICAgdGhpcy5kb21IYW5kbGVycyA9IFtdXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGRvbU9uKGVsZW1lbnQsIHR5cGUsIGhhbmRsZXIpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGFkZEV2ZW50cyhcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgaXNPYmplY3QodHlwZSkgPyB0eXBlIDogeyBbdHlwZV06IGhhbmRsZXIgfVxuICAgICAgKVxuICAgICAgdGhpcy5kb21IYW5kbGVycy5wdXNoKHJlc3VsdClcbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG4gIH1cbn1cbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIERpdG9Vc2VyIHtcbiAgaGFzUm9sZSguLi5yb2xlcykge1xuICAgIGlmICh0aGlzLnJvbGVzKSB7XG4gICAgICBmb3IgKGNvbnN0IHJvbGUgb2Ygcm9sZXMpIHtcbiAgICAgICAgaWYgKHRoaXMucm9sZXMuaW5jbHVkZXMocm9sZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG4iLCIvLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkc2NoZW1hUGFyZW50Q29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjaGVtYUNvbXBvbmVudHM6IFtdXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbWFpblNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHNbMF1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSBgRGl0b1NjaGVtYS5jcmVhdGVkKCkvdW5tb3VudGVkKClgIG9uIGl0c1xuICAgIC8vIGAkc2NoZW1hUGFyZW50Q29tcG9uZW50YCwgaWYgdGhlIHBhcmVudCB1c2VzIHRoZSBgU2NoZW1hUGFyZW50TWl4aW5gOlxuICAgIF9yZWdpc3RlclNjaGVtYUNvbXBvbmVudChzY2hlbWFDb21wb25lbnQsIGFkZCkge1xuICAgICAgY29uc3QgeyBzY2hlbWFDb21wb25lbnRzIH0gPSB0aGlzXG4gICAgICBpZiAoYWRkKSB7XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudHMucHVzaChzY2hlbWFDb21wb25lbnQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzY2hlbWFDb21wb25lbnRzLnNwbGljZShzY2hlbWFDb21wb25lbnRzLmluZGV4T2Yoc2NoZW1hQ29tcG9uZW50KSwgMSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBTY2hlbWFQYXJlbnRNaXhpbiBmcm9tICcuL1NjaGVtYVBhcmVudE1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtTY2hlbWFQYXJlbnRNaXhpbl0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBlcnJvcnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmZsYXRNYXAoKHsgZXJyb3JzIH0pID0+IGVycm9ycyB8fCBbXSlcbiAgICB9LFxuXG4gICAgaXNUb3VjaGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5zb21lKGl0ID0+IGl0LmlzVG91Y2hlZClcbiAgICB9LFxuXG4gICAgaXNEaXJ0eSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuc29tZShpdCA9PiBpdC5pc0RpcnR5KVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC5pc1ZhbGlkKVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkYXRlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQuaXNWYWxpZClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHZhbGlkYXRlQWxsKG1hdGNoLCBub3RpZnkgPSB0cnVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LnZhbGlkYXRlQWxsKG1hdGNoLCBub3RpZnkpKVxuICAgIH0sXG5cbiAgICB2ZXJpZnlBbGwobWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQudmVyaWZ5QWxsKG1hdGNoKSlcbiAgICB9LFxuXG4gICAgcmVzZXRWYWxpZGF0aW9uKCkge1xuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnRzLmZvckVhY2goaXQgPT4gaXQucmVzZXRWYWxpZGF0aW9uKCkpXG4gICAgfSxcblxuICAgIGNsZWFyRXJyb3JzKCkge1xuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnRzLmZvckVhY2goaXQgPT4gaXQuY2xlYXJFcnJvcnMoKSlcbiAgICB9LFxuXG4gICAgc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cywgZmlyc3QgPSB0cnVlKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZm9yRWFjaChcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50ID0+IHtcbiAgICAgICAgICBpZiAoc2NoZW1hQ29tcG9uZW50LnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMsIGZpcnN0KSkge1xuICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKVxuICAgICAgcmV0dXJuICFmaXJzdFxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFZhbGlkYXRvck1peGluIGZyb20gJy4uL21peGlucy9WYWxpZGF0b3JNaXhpbi5qcydcbmltcG9ydCB7IGdldENvbW1vblByZWZpeCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1ZhbGlkYXRvck1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcm91dGVDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVsb2FkOiBmYWxzZSxcbiAgICAgIC8vIEVhY2ggcm91dGUtY29tcG9uZW50IGRlZmluZXMgYSBzdG9yZSB0aGF0IGdldHMgcGFzc2VkIG9uIHRvIGl0c1xuICAgICAgLy8gY2hpbGQgY29tcG9uZW50cywgc28gdGhleSBjYW4gc3RvcmUgdmFsdWVzIGluIHRoZW0gdGhhdCBsaXZlIGJleW9uZFxuICAgICAgLy8gdGhlaXIgbGlmZS1jeWNsZS4gU2VlOiBEaXRvUGFuZSwgU291cmNlTWl4aW5cbiAgICAgIHN0b3JlOiB7fSxcbiAgICAgIGxvYWRDYWNoZToge30gLy8gU2VlIFR5cGVNaXhpbi5sb2FkKClcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICByb3V0ZUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIE92ZXJyaWRlIERpdG9NaXhpbidzIHJvdXRlQ29tcG9uZW50KCkgd2hpY2ggdXNlcyB0aGUgaW5qZWN0ZWQgdmFsdWUuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICByb3V0ZUxldmVsKCkge1xuICAgICAgbGV0IGxldmVsID0gMFxuICAgICAgbGV0IHJvdXRlQ29tcG9uZW50ID0gdGhpc1xuICAgICAgd2hpbGUgKChyb3V0ZUNvbXBvbmVudCA9IHJvdXRlQ29tcG9uZW50LnBhcmVudFJvdXRlQ29tcG9uZW50KSkge1xuICAgICAgICBsZXZlbCsrXG4gICAgICB9XG4gICAgICByZXR1cm4gbGV2ZWxcbiAgICB9LFxuXG4gICAgcm91dGVSZWNvcmQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcm91dGUubWF0Y2hlZFt0aGlzLnJvdXRlTGV2ZWxdXG4gICAgfSxcblxuICAgIGlzTGFzdFJvdXRlKCkge1xuICAgICAgLy8gUmV0dXJucyB0cnVlIHdoZW4gdGhpcyByb3V0ZXIgY29tcG9uZW50IGlzIHRoZSBsYXN0IG9uZSBpbiB0aGUgcm91dGUuXG4gICAgICBjb25zdCB7IG1hdGNoZWQgfSA9IHRoaXMuJHJvdXRlXG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZVJlY29yZCA9PT0gbWF0Y2hlZFttYXRjaGVkLmxlbmd0aCAtIDFdXG4gICAgfSxcblxuICAgIGlzTGFzdFVubmVzdGVkUm91dGUoKSB7XG4gICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyByb3V0ZSBjb21wb25lbnQgaXMgdGhlIGxhc3Qgb25lIGluIHRoZSByb3V0ZSB0aGF0XG4gICAgICAvLyBuZWVkcyBpdHMgb3duIHJvdXRlci12aWV3ICg9IGlzIG5vdCBuZXN0ZWQpLlxuICAgICAgY29uc3QgeyBtYXRjaGVkIH0gPSB0aGlzLiRyb3V0ZVxuICAgICAgZm9yIChsZXQgaSA9IG1hdGNoZWQubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgcmVjb3JkID0gbWF0Y2hlZFtpXVxuICAgICAgICBpZiAoIXJlY29yZC5tZXRhLm5lc3RlZCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnJvdXRlUmVjb3JkID09PSByZWNvcmRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGlzTmVzdGVkUm91dGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXRhLm5lc3RlZFxuICAgIH0sXG5cbiAgICBpc1ZpZXcoKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgbWV0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlUmVjb3JkPy5tZXRhXG4gICAgfSxcblxuICAgIHBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSb3V0ZVBhdGgodGhpcy5yb3V0ZVJlY29yZD8ucGF0aClcbiAgICB9LFxuXG4gICAgbGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMYWJlbCh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgYnJlYWRjcnVtYigpIHtcbiAgICAgIGNvbnN0IHsgYnJlYWRjcnVtYiB9ID0gdGhpcy5zY2hlbWEgfHwge31cbiAgICAgIHJldHVybiBicmVhZGNydW1iIHx8IGAke3RoaXMuYnJlYWRjcnVtYlByZWZpeH0gJHt0aGlzLmxhYmVsfWBcbiAgICB9LFxuXG4gICAgYnJlYWRjcnVtYlByZWZpeCgpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH0sXG5cbiAgICBwYXJhbSgpIHtcbiAgICAgIC8vIFdvcmthcm91bmQgZm9yIHZ1ZS1yb3V0ZXIgbm90IGJlaW5nIGFibGUgdG8gbWFwIG11bHRpcGxlIHVybCBwYXJhbWV0ZXJzXG4gICAgICAvLyB3aXRoIHRoZSBzYW1lIG5hbWUgdG8gbXVsdGlwbGUgY29tcG9uZW50cywgc2VlOlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzEzNDVcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5wYXJhbXNbdGhpcy5tZXRhPy5wYXJhbV0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGUsIHNlZSBEaXRvRm9ybVxuICAgIGlzTXV0YXRpbmcoKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlUm91dGVVcGRhdGUodG8sIGZyb20sIG5leHQpIHtcbiAgICB0aGlzPy5iZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dClcbiAgfSxcblxuICBiZWZvcmVSb3V0ZUxlYXZlKHRvLCBmcm9tLCBuZXh0KSB7XG4gICAgdGhpcz8uYmVmb3JlUm91dGVDaGFuZ2UodG8sIGZyb20sIG5leHQpXG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICAvLyBLZWVwIGEgc2hhcmVkIHN0YWNrIG9mIHJvb3QgY29tcG9uZW50cyBmb3IgRGl0b1RyYWlsIHRvIHVzZSB0byByZW5kZXJcbiAgICAvLyBsYWJlbHMuIENhbid0IHJlbHkgb24gJHJvdXRlLm1hdGNoZWRbaV0uaW5zdGFuY2VzLmRlZmF1bHQgdW5mb3J0dW5hdGVseSxcbiAgICAvLyBhcyBpbnN0YW5jZXMgYXJlbid0IGltbWVkaWF0ZWx5IHJlYWR5LCBhbmQgaW5zdGFuY2VzIGlzIG5vdCByZWFjdGl2ZS5cbiAgICB0aGlzLmFwcFN0YXRlLnJvdXRlQ29tcG9uZW50cy5wdXNoKHRoaXMpXG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIGNvbnN0IHsgcm91dGVDb21wb25lbnRzIH0gPSB0aGlzLmFwcFN0YXRlXG4gICAgcm91dGVDb21wb25lbnRzLnNwbGljZShyb3V0ZUNvbXBvbmVudHMuaW5kZXhPZih0aGlzKSwgMSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgYmVmb3JlUm91dGVDaGFuZ2UodG8sIGZyb20sIG5leHQpIHtcbiAgICAgIGxldCBvayA9IHRydWVcbiAgICAgIGNvbnN0IGlzQ2xvc2luZyA9IChcbiAgICAgICAgLy8gT25seSBoYW5kbGUgdGhpcyByb3V0ZSBjaGFuZ2UgaWYgdGhlIGZvcm0gaXMgYWN0dWFsbHkgbWFwcGVkIHRvIHRoZVxuICAgICAgICAvLyBgZnJvbWAgcm91dGUsIGJ1dCBpbmNsdWRlIHBhcmVudCBmb3JtcyBvZiBjbG9zaW5nIG5lc3RlZCBmb3JtcyBhcyBhc1xuICAgICAgICAvLyB3ZWxsLCBieSBtYXRjaGluZyB0aGUgdGhlIHN0YXJ0IG9mIGZyb20vdG8gcGF0aCBhZ2FpbnN0IGB0aGlzLnBhdGhgOlxuICAgICAgICBmcm9tLnBhdGguc3RhcnRzV2l0aCh0aGlzLnBhdGgpICYmXG4gICAgICAgICF0by5wYXRoLnN0YXJ0c1dpdGgodGhpcy5wYXRoKSAmJlxuICAgICAgICAvLyBFeGNsdWRlIGhhc2ggY2hhbmdlcyBvbmx5ICg9IHRhYiBjaGFuZ2VzKTpcbiAgICAgICAgZnJvbS5wYXRoICE9PSB0by5wYXRoICYmIChcbiAgICAgICAgICB0aGlzLmlzRnVsbFJvdXRlQ2hhbmdlKHRvLCBmcm9tKSB8fFxuICAgICAgICAgIC8vIERlY2lkZSBpZiB3ZSdyZSBtb3ZpbmcgdG93YXJkcyBhIG5ldyBuZXN0ZWQgZm9ybSwgb3IgY2xvc2luZyAvXG4gICAgICAgICAgLy8gcmVwbGFjaW5nIGFuIGFscmVhZHkgb3BlbiBvbmUgYnkgY29tcGFyaW5nIHBhdGggbGVuZ3Rocy5cbiAgICAgICAgICAvLyBUaGUgY2FzZSBvZiBgPWAgbWF0Y2hlcyB0aGUgcmVwbGFjaW5nIG9mIGFuIGFscmVhZHkgb3BlbiBvbmUuXG4gICAgICAgICAgdG8ucGF0aC5sZW5ndGggPD0gZnJvbS5wYXRoLmxlbmd0aFxuICAgICAgICApXG4gICAgICApXG4gICAgICBpZiAoaXNDbG9zaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLmlzTXV0YXRpbmcpIHtcbiAgICAgICAgICAvLyBGb3IgYWN0aXZlIGRpcmVjdGx5IG11dGF0aW5nIChuZXN0ZWQpIGZvcm1zIHRoYXQgd2VyZSBub3QgdmFsaWRhdGVkXG4gICAgICAgICAgLy8geWV0LCB2YWxpZGF0ZSB0aGVtIG9uY2UuIElmIHRoZSB1c2VyIHRoZW4gc3RpbGwgd2FudHMgdG8gbGVhdmVcbiAgICAgICAgICAvLyB0aGVtLCB0aGV5IGNhbiBjbGljayBjbG9zZSAvIG5hdmlnYXRlIGF3YXkgYWdhaW4uXG4gICAgICAgICAgb2sgPSAoXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWRhdGVkIHx8XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlQWxsKClcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVGhlIGZvcm0gZG9lc24ndCBkaXJlY3RseSBtdXRhdGUgZGF0YS4gSWYgaXQgaXMgZGlydHksIGFzayBpZiB1c2VyXG4gICAgICAgICAgLy8gd2FudHMgdG8gcGVyc2lzdCBkYXRhIGZpcnN0LlxuICAgICAgICAgIGlmICh0aGlzLmlzRGlydHkpIHtcbiAgICAgICAgICAgIG9rID0gd2luZG93LmNvbmZpcm0oXG4gICAgICAgICAgICAgIGBZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMuIERvIHlvdSByZWFsbHkgd2FudCB0byAke1xuICAgICAgICAgICAgICAgIHRoaXMudmVyYnMuY2FuY2VsXG4gICAgICAgICAgICAgIH0/YFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbmV4dChvaylcbiAgICB9LFxuXG4gICAgZ2V0Um91dGVQYXRoKHJlY29yZFBhdGgpIHtcbiAgICAgIC8vIE1hcHMgdGhlIHJvdXRlJ3MgYWN0dWFsIHBhdGggdG8gdGhlIG1hdGNoZWQgcm91dGVzIGJ5IGNvdW50aW5nIGl0c1xuICAgICAgLy8gcGFydHMgc2VwYXJhdGVkIGJ5ICcvJywgc3BsaXR0aW5nIHRoZSBwYXRoIGludG8gdGhlIG1hcHBlZCBwYXJ0c1xuICAgICAgLy8gY29udGFpbmluZyBhY3R1YWwgcGFyYW1ldGVycy5cbiAgICAgIGNvbnN0IHsgcGF0aCB9ID0gdGhpcy4kcm91dGVcbiAgICAgIHJldHVybiByZWNvcmRQYXRoXG4gICAgICAgID8gcGF0aFxuICAgICAgICAgICAgLnNwbGl0KCcvJylcbiAgICAgICAgICAgIC5zbGljZSgwLCByZWNvcmRQYXRoLnNwbGl0KCcvJykubGVuZ3RoKVxuICAgICAgICAgICAgLmpvaW4oJy8nKVxuICAgICAgICA6IHBhdGhcbiAgICB9LFxuXG4gICAgZ2V0Q2hpbGRQYXRoKHBhdGgpIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLnBhdGh9LyR7cGF0aH1gXG4gICAgfSxcblxuICAgIGlzRnVsbFJvdXRlQ2hhbmdlKHRvLCBmcm9tKSB7XG4gICAgICAvLyBUaGUgcm91dGUgcGF0aCBpcyB0aGUgcGF0aCB1cCB0byB0aGUgZmlyc3QgLyAoZXhjbHVkaW5nIHRoZSBpbml0aWFsIC8pOlxuICAgICAgY29uc3Qgcm9vdFBhdGggPSB0aGlzLnBhdGgubWF0Y2goL14oXFwvW14vXSopLylbMV1cbiAgICAgIHJldHVybiAhZ2V0Q29tbW9uUHJlZml4KHRvLnBhdGgsIGZyb20ucGF0aCkuc3RhcnRzV2l0aChyb290UGF0aClcbiAgICB9XG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG50ZW1wbGF0ZShcbiAgdi1pZj1cInVzZXJcIlxuKVxuICAvLy0gT25seSByZW5kZXIgRGl0b1ZpZXcgd2hlbiBpdCBpcyBhY3RpdmUsIG90aGVyd2lzZSBhIG5vcm1hbCByb3V0ZXItdmlld1xuICAvLy0gaW5zdGVhZCwgdG8gbmVzdCBmdXJ0aGVyIHJvdXRlIGNvbXBvbmVudHMuXG4gIC8vLSBOT1RFOiBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBoYW5kbGluZyBpbiBEaXRvRm9ybSwgd2hlcmUgYHYtc2hvd2AgaXNcbiAgLy8tIHVzZWQgdG8gYWx3YXlzIHJlbmRlciBmb3JtcyBldmVuIHdoZW4gb3RoZXIgbmVzdGVkIGZvcm1zIGFyZSBwcmVzZW50LlxuICBSb3V0ZXJWaWV3KFxuICAgIHYtaWY9XCIhaXNMYXN0Um91dGVcIlxuICAgIDprZXk9XCJuYW1lXCJcbiAgKVxuICAuZGl0by12aWV3LmRpdG8tc2Nyb2xsLXBhcmVudChcbiAgICB2LWVsc2UtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEodmlld1NjaGVtYSlcIlxuICAgIDpkYXRhLXJlc291cmNlPVwic291cmNlU2NoZW1hLnBhdGhcIlxuICApXG4gICAgRGl0b1NjaGVtYShcbiAgICAgIDprZXk9XCJuYW1lXCJcbiAgICAgIDpzY2hlbWE9XCJ2aWV3U2NoZW1hXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShuYW1lKVwiXG4gICAgICBwYWRkaW5nPVwicm9vdFwiXG4gICAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgICAgc2Nyb2xsYWJsZVxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFJvdXRlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1JvdXRlTWl4aW4uanMnXG5pbXBvcnQge1xuICBpc1NpbmdsZUNvbXBvbmVudFZpZXcsXG4gIHNvbWVOZXN0ZWRTY2hlbWFDb21wb25lbnRcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgaGFzUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvVmlldycsIHtcbiAgbWl4aW5zOiBbUm91dGVNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICAvLyBSZWRpcmVjdCAkc291cmNlQ29tcG9uZW50IGFuZCAkcmVzb3VyY2VDb21wb25lbnQgdG8gdGhlIG1haW4gY29tcG9uZW50OlxuICAgIHJldHVybiB7XG4gICAgICAkc291cmNlQ29tcG9uZW50OiAoKSA9PiB0aGlzLm1haW5Db21wb25lbnQ/LnNvdXJjZUNvbXBvbmVudCB8fCBudWxsLFxuICAgICAgJHJlc291cmNlQ29tcG9uZW50OiAoKSA9PiB0aGlzLm1haW5Db21wb25lbnQ/LnJlc291cmNlQ29tcG9uZW50IHx8IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gVXBkYXRlZCBmcm9tIExvYWRpbmdNaXhpbiB0aHJvdWdoIGBzZXRMb2FkaW5nKGlzTG9hZGluZylgOlxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIC8vIE5PVEU6IERhdGEgaXMgc2hhcmVkIGFjcm9zcyBhbGwgdmlld3MgYmVjYXVzZSB0aGUgcm91dGVyIHJlY3ljbGVzIHRoZVxuICAgICAgLy8gRGl0b1ZpZXcgY29tcG9uZW50LlxuICAgICAgZGF0YToge31cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXRhLnNjaGVtYVxuICAgIH0sXG5cbiAgICBuYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLm5hbWVcbiAgICB9LFxuXG4gICAgaXNWaWV3KCkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9LFxuXG4gICAgaXNTaW5nbGVDb21wb25lbnRWaWV3KCkge1xuICAgICAgcmV0dXJuIGlzU2luZ2xlQ29tcG9uZW50Vmlldyh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgbWFpbkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1haW5TY2hlbWFDb21wb25lbnQ/LmdldENvbXBvbmVudEJ5RGF0YVBhdGgodGhpcy5uYW1lKVxuICAgIH0sXG5cbiAgICB2aWV3U2NoZW1hKCkge1xuICAgICAgY29uc3QgeyBjb21wb25lbnQsIC4uLnNjaGVtYSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIC8vIFRyYW5zbGF0ZSBzaW5nbGUtY29tcG9uZW50IHNjaGVtYXMgaW50byBtdWx0aS1jb21wb25lbnQgc2NoZW1hcyxcbiAgICAgIC8vIHNvIHRoZXkgY2FuIGJlIHJlbmRlcmVkIGRpcmVjdGx5IHRocm91Z2ggRGl0b1NjaGVtYSBhbHNvOlxuICAgICAgcmV0dXJuIHRoaXMuaXNTaW5nbGVDb21wb25lbnRWaWV3XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uc2NoZW1hLFxuICAgICAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgICAgICBbc2NoZW1hLm5hbWVdOiB7XG4gICAgICAgICAgICAgICAgbmFtZTogc2NoZW1hLm5hbWUsXG4gICAgICAgICAgICAgICAgbGFiZWw6IGZhbHNlLFxuICAgICAgICAgICAgICAgIC4uLmNvbXBvbmVudFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA6IHNjaGVtYVxuICAgIH0sXG5cbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICByZXR1cm4gc29tZU5lc3RlZFNjaGVtYUNvbXBvbmVudCh0aGlzLnZpZXdTY2hlbWEsIGhhc1Jlc291cmNlKVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgICRyb3V0ZToge1xuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzMzOTMjaXNzdWVjb21tZW50LTExNTg0NzAxNDlcbiAgICAgIGZsdXNoOiAncG9zdCcsXG4gICAgICBoYW5kbGVyKHRvLCBmcm9tKSB7XG4gICAgICAgIC8vIFNlZSBpZiB0aGUgcm91dGUgY2hhbmdlcyBjb21wbGV0ZWx5LCBhbmQgY2xlYXIgdGhlIGRhdGEgaWYgaXQgZG9lcy5cbiAgICAgICAgaWYgKHRoaXMuaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pKSB7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuZGF0YSA9IHt9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgdGhpcy5kYXRhID0gZGF0YVxuICAgIH0sXG5cbiAgICBnZXRDaGlsZFBhdGgocGF0aCkge1xuICAgICAgLy8gTGlzdHMgaW5zaWRlIHNpbmdsZS1jb21wb25lbnQgdmlld3MgdXNlIHRoZSB2aWV3J3MgcGF0aCBmb3Igc3ViLXBhdGhzOlxuICAgICAgcmV0dXJuIHRoaXMuaXNTaW5nbGVDb21wb25lbnRWaWV3XG4gICAgICAgID8gdGhpcy5wYXRoXG4gICAgICAgIDogYCR7dGhpcy5wYXRofS8ke3BhdGh9YFxuICAgIH0sXG5cbiAgICBzZXRMb2FkaW5nKGlzTG9hZGluZykge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSAhIWlzTG9hZGluZ1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHsgdW5yZWZFbGVtZW50IH0gZnJvbSAnQHZ1ZXVzZS9jb3JlJztcbmltcG9ydCB7IGNyZWF0ZUZvY3VzVHJhcCB9IGZyb20gJ2ZvY3VzLXRyYXAnO1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50LCByZWYsIHdhdGNoLCBvblNjb3BlRGlzcG9zZSwgaCB9IGZyb20gJ3Z1ZSc7XG5cbmNvbnN0IFVzZUZvY3VzVHJhcCA9IC8qIEBfX1BVUkVfXyAqLyAvKkBfX1BVUkVfXyovIGRlZmluZUNvbXBvbmVudCh7XG4gIG5hbWU6IFwiVXNlRm9jdXNUcmFwXCIsXG4gIHByb3BzOiBbXCJhc1wiLCBcIm9wdGlvbnNcIl0sXG4gIHNldHVwKHByb3BzLCB7IHNsb3RzIH0pIHtcbiAgICBsZXQgdHJhcDtcbiAgICBjb25zdCB0YXJnZXQgPSByZWYoKTtcbiAgICBjb25zdCBhY3RpdmF0ZSA9ICgpID0+IHRyYXAgJiYgdHJhcC5hY3RpdmF0ZSgpO1xuICAgIGNvbnN0IGRlYWN0aXZhdGUgPSAoKSA9PiB0cmFwICYmIHRyYXAuZGVhY3RpdmF0ZSgpO1xuICAgIHdhdGNoKFxuICAgICAgKCkgPT4gdW5yZWZFbGVtZW50KHRhcmdldCksXG4gICAgICAoZWwpID0+IHtcbiAgICAgICAgaWYgKCFlbClcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRyYXAgPSBjcmVhdGVGb2N1c1RyYXAoZWwsIHByb3BzLm9wdGlvbnMgfHwge30pO1xuICAgICAgICBhY3RpdmF0ZSgpO1xuICAgICAgfSxcbiAgICAgIHsgZmx1c2g6IFwicG9zdFwiIH1cbiAgICApO1xuICAgIG9uU2NvcGVEaXNwb3NlKCgpID0+IGRlYWN0aXZhdGUoKSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChzbG90cy5kZWZhdWx0KVxuICAgICAgICByZXR1cm4gaChwcm9wcy5hcyB8fCBcImRpdlwiLCB7IHJlZjogdGFyZ2V0IH0sIHNsb3RzLmRlZmF1bHQoKSk7XG4gICAgfTtcbiAgfVxufSk7XG5cbmV4cG9ydCB7IFVzZUZvY3VzVHJhcCB9O1xuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWRpYWxvZyhcbiAgcmVmPVwiZGlhbG9nXCJcbiAgcm9sZT1cImRpYWxvZ1wiXG4gIGFyaWEtZXhwYW5kZWQ9XCJ0cnVlXCJcbiAgYXJpYS1tb2RhbD1cInRydWVcIlxuICA6c3R5bGU9XCJ7ICctLXdpZHRoJzogc2V0dGluZ3Mud2lkdGggPyBgJHtzZXR0aW5ncy53aWR0aH1weGAgOiBudWxsIH1cIlxuICBAbW91c2V1cD1cIm9uTW91c2VVcFwiXG4pXG4gIFVzZUZvY3VzVHJhcC5kaXRvLWRpYWxvZ19fZm9jdXMtdHJhcCg6b3B0aW9ucz1cImZvY3VzVHJhcE9wdGlvbnNcIilcbiAgICBmb3JtLmRpdG8tc2Nyb2xsLXBhcmVudChcbiAgICAgIEBzdWJtaXQucHJldmVudD1cInN1Ym1pdFwiXG4gICAgKVxuICAgICAgLy8gQWRkIGFuIGludmlzaWJsZSBidXR0b24gdGhhdCBwcmV2ZW50cyB0aGUgY2xlYXJhYmxlIGJ1dHRvbnMgZnJvbSBiZWluZ1xuICAgICAgLy8gcHJlc3NlZCB3aGVuIHRoZSB1c2VyIHByZXNzZXMgdGhlIEVudGVyIGtleTpcbiAgICAgIGJ1dHRvbihcbiAgICAgICAgdi1zaG93PVwiZmFsc2VcIlxuICAgICAgKVxuICAgICAgRGl0b1NjaGVtYShcbiAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgIDpkYXRhPVwiZGlhbG9nRGF0YVwiXG4gICAgICAgIHBhZGRpbmc9XCJyb290XCJcbiAgICAgICAgc2Nyb2xsYWJsZVxuICAgICAgICBnZW5lcmF0ZUxhYmVsc1xuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZSgjYnV0dG9ucylcbiAgICAgICAgICBEaXRvQnV0dG9ucy5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICAgICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgICAgICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgICAgICAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgY2xvbmUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgVXNlRm9jdXNUcmFwIH0gZnJvbSAnQHZ1ZXVzZS9pbnRlZ3JhdGlvbnMvdXNlRm9jdXNUcmFwL2NvbXBvbmVudCdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRGlhbG9nJywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG4gIGNvbXBvbmVudHM6IHsgVXNlRm9jdXNUcmFwIH0sXG4gIGVtaXRzOiBbJ3JlbW92ZSddLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRkaWFsb2dDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBjb21wb25lbnRzOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBidXR0b25zOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwcm9taXNlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIHNldHRpbmdzOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiAoKSA9PiAoe1xuICAgICAgICB3aWR0aDogNDgwLFxuICAgICAgICBjbGlja1RvQ2xvc2U6IGZhbHNlXG4gICAgICB9KVxuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIC8vIE1ha2Ugc3VyZSBkaWFsb2cgZGF0YSBjb250YWlucyBhbGwgdGhlIGV4cGVjdGVkIGtleXNcbiAgICBjb25zdCBkaWFsb2dEYXRhID0gY2xvbmUodGhpcy5kYXRhKVxuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuY29tcG9uZW50cykge1xuICAgICAgaWYgKCEoa2V5IGluIGRpYWxvZ0RhdGEpKSB7XG4gICAgICAgIGRpYWxvZ0RhdGFba2V5XSA9IG51bGxcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGRpYWxvZ0RhdGFcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBkaWFsb2dDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBzY2hlbWEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAnZGlhbG9nJyxcbiAgICAgICAgY29tcG9uZW50czogdGhpcy5jb21wb25lbnRzXG4gICAgICB9XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBPYmplY3QuZW50cmllcyhnZXRCdXR0b25TY2hlbWFzKHRoaXMuYnV0dG9ucykpLm1hcChcbiAgICAgICAgICAvLyBQcm9jZXNzIHRoZSBidXR0b24gc2NoZW1hcyB0byBhZGQgZGVmYXVsdCBjbGljayBldmVudHNcbiAgICAgICAgICAvLyBmb3IgYm90aCAnc3VibWl0JyBhbmQgJ2NhbmNlbCcgYnV0dG9uczpcbiAgICAgICAgICAoW2tleSwgc2NoZW1hXSkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2NhbmNlbCcgJiYgIXNjaGVtYS5ldmVudHMpIHtcbiAgICAgICAgICAgICAgc2NoZW1hID0ge1xuICAgICAgICAgICAgICAgIC4uLnNjaGVtYSxcbiAgICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLmNhbmNlbCgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW2tleSwgc2NoZW1hXVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBmb2N1c1RyYXBPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW1tZWRpYXRlOiB0cnVlLFxuICAgICAgICBmYWxsYmFja0ZvY3VzOiAoKSA9PiB0aGlzLiRyZWZzLmRpYWxvZyxcbiAgICAgICAgb25EZWFjdGl2YXRlOiB0aGlzLmNhbmNlbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBoYXNCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuYnV0dG9uU2NoZW1hcykubGVuZ3RoID4gMFxuICAgIH0sXG5cbiAgICBoYXNDYW5jZWwoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmJ1dHRvblNjaGVtYXMuY2FuY2VsXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy5kb21Pbih3aW5kb3csIHtcbiAgICAgIGtleXVwOiBldmVudCA9PiB7XG4gICAgICAgIGlmICgodGhpcy5oYXNDYW5jZWwgfHwgIXRoaXMuaGFzQnV0dG9ucykgJiYgZXZlbnQua2V5Q29kZSA9PT0gMjcpIHtcbiAgICAgICAgICB0aGlzLmNhbmNlbCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICByZW1vdmUoKSB7XG4gICAgICB0aGlzLiRlbWl0KCdyZW1vdmUnKVxuICAgIH0sXG5cbiAgICByZXNvbHZlKHZhbHVlKSB7XG4gICAgICB0aGlzLnByb21pc2UucmVzb2x2ZSh2YWx1ZSlcbiAgICAgIHRoaXMucmVtb3ZlKClcbiAgICB9LFxuXG4gICAgcmVqZWN0KHZhbHVlKSB7XG4gICAgICB0aGlzLnByb21pc2UucmVqZWN0KHZhbHVlKVxuICAgICAgdGhpcy5yZW1vdmUoKVxuICAgIH0sXG5cbiAgICBzdWJtaXQoKSB7XG4gICAgICB0aGlzLnJlc29sdmUodGhpcy5kaWFsb2dEYXRhKVxuICAgIH0sXG5cbiAgICBjYW5jZWwoKSB7XG4gICAgICAvLyBXaGVuIGNhbmNlbGxpbmcsIHJlc29sdmUgYXMgYHVuZGVmaW5lZGAgc28gd2UgY2FuIGhhdmUgZGlhbG9nc1xuICAgICAgLy8gcmV0dXJuaW5nIG51bGwgYXMgYSBkZWZpbmVkIHZhbHVlIGFzIHdlbGwuXG4gICAgICB0aGlzLnJlc29sdmUodW5kZWZpbmVkKVxuICAgIH0sXG5cbiAgICBjbG9zZSgpIHtcbiAgICAgIHRoaXMuY2FuY2VsKClcbiAgICB9LFxuXG4gICAgb25Nb3VzZVVwKCkge1xuICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuY2xpY2tUb0Nsb3NlKSB7XG4gICAgICAgIHRoaXMuY2xvc2UoKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWRpYWxvZyB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgZGlzcGxheTogZmxleDtcbiAgaW5zZXQ6IDA7XG4gIHotaW5kZXg6ICR6LWluZGV4LWRpYWxvZztcbiAgcGFkZGluZzogJGNvbnRlbnQtcGFkZGluZztcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIC8vIFByZXZlbnQgc2Nyb2xsaW5nIG9mIHRoZSBwYWdlIGJlaGluZCB0aGUgZGlhbG9nOlxuICBvdmVyZmxvdzogaGlkZGVuO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7XG5cbiAgJl9fZm9jdXMtdHJhcCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBtYXgtaGVpZ2h0OiAxMDAlO1xuICB9XG5cbiAgLy8gVE9ETzogYCZfX2lubmVyYFxuICBmb3JtIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIG1heC13aWR0aDogdmFyKC0td2lkdGgsIDQ4MHB4KTtcbiAgICBtYXgtaGVpZ2h0OiAxMDAlO1xuICAgIGJveC1zaGFkb3c6IDAgMjBweCA2MHB4IC0ycHggcmdiYSgyNywgMzMsIDU4LCAwLjQpO1xuICB9XG59XG5cbi5kaXRvLWRpYWxvZy1lbnRlci1hY3RpdmUsXG4uZGl0by1kaWFsb2ctbGVhdmUtYWN0aXZlIHtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cztcblxuICBmb3JtIHtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXM7XG4gIH1cbn1cblxuLmRpdG8tZGlhbG9nLWVudGVyLWZyb20sXG4uZGl0by1kaWFsb2ctbGVhdmUtdG8ge1xuICBvcGFjaXR5OiAwO1xuXG4gIGZvcm0ge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMjBweCk7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tcm9vdChcbiAgOmRhdGEtYWdlbnQtYnJvd3Nlcj1cImFwcFN0YXRlLmFnZW50LmJyb3dzZXJcIlxuICA6ZGF0YS1hZ2VudC1wbGF0Zm9ybT1cImFwcFN0YXRlLmFnZW50LnBsYXRmb3JtXCJcbiAgOmRhdGEtYWdlbnQtdmVyc2lvbj1cImFwcFN0YXRlLmFnZW50LnZlcnNpb25OdW1iZXJcIlxuKVxuICBUcmFuc2l0aW9uKG5hbWU9XCJkaXRvLWRyYWdcIilcbiAgICAuZGl0by1kcmFnLW92ZXJsYXkoXG4gICAgICB2LWlmPVwiaXNEcmFnZ2luZ0ZpbGVzXCJcbiAgICApXG4gIFRyYW5zaXRpb25Hcm91cChuYW1lPVwiZGl0by1kaWFsb2dcIilcbiAgICBEaXRvRGlhbG9nKFxuICAgICAgdi1mb3I9XCIoZGlhbG9nLCBrZXkpIGluIGRpYWxvZ3NcIlxuICAgICAgOmtleT1cImtleVwiXG4gICAgICA6Y29tcG9uZW50cz1cImRpYWxvZy5jb21wb25lbnRzXCJcbiAgICAgIDpidXR0b25zPVwiZGlhbG9nLmJ1dHRvbnNcIlxuICAgICAgOnByb21pc2U9XCJkaWFsb2cucHJvbWlzZVwiXG4gICAgICA6ZGF0YT1cImRpYWxvZy5kYXRhXCJcbiAgICAgIDpzZXR0aW5ncz1cImRpYWxvZy5zZXR0aW5nc1wiXG4gICAgICBAcmVtb3ZlPVwicmVtb3ZlRGlhbG9nKGtleSlcIlxuICAgIClcbiAgRGl0b05hdmlnYXRpb25cbiAgbWFpbi5kaXRvLXBhZ2UuZGl0by1zY3JvbGwtcGFyZW50KFxuICAgIHYtcmVzaXplPVwib25SZXNpemVQYWdlXCJcbiAgICA6Y2xhc3M9XCJwYWdlQ2xhc3Nlc1wiXG4gIClcbiAgICBEaXRvSGVhZGVyKFxuICAgICAgOnNwaW5uZXI9XCJvcHRpb25zLnNwaW5uZXJcIlxuICAgICAgOmlzTG9hZGluZz1cImlzTG9hZGluZ1wiXG4gICAgKVxuICAgIFJvdXRlclZpZXdcbiAgRGl0b1NpZGViYXJcbiAgICBEaXRvQWNjb3VudChcbiAgICAgIHYtaWY9XCJ1c2VyXCJcbiAgICApXG4gICAgYS5kaXRvLWxvZ2luKFxuICAgICAgdi1lbHNlLWlmPVwiYWxsb3dMb2dpblwiXG4gICAgICBAY2xpY2s9XCJyb290Q29tcG9uZW50LmxvZ2luKClcIlxuICAgIClcbiAgICAgIHNwYW4gTG9naW5cbiAgRGl0b05vdGlmaWNhdGlvbnMocmVmPVwibm90aWZpY2F0aW9uc1wiKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGRlbGVnYXRlIGFzIHRpcHB5RGVsZWdhdGUgfSBmcm9tICd0aXBweS5qcydcbmltcG9ydCB7IG1hcENvbmN1cnJlbnRseSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCBEaXRvVXNlciBmcm9tICcuLi9EaXRvVXNlci5qcydcbmltcG9ydCBEaXRvVmlldyBmcm9tICcuLi9jb21wb25lbnRzL0RpdG9WaWV3LnZ1ZSdcbmltcG9ydCBEaXRvRGlhbG9nIGZyb20gJy4vRGl0b0RpYWxvZy52dWUnXG5pbXBvcnQge1xuICBwcm9jZXNzVmlldyxcbiAgcmVzb2x2ZVZpZXdzLFxuICBwcm9jZXNzU2NoZW1hQ29tcG9uZW50c1xufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1Jvb3QnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcbiAgY29tcG9uZW50czogeyBEaXRvRGlhbG9nIH0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHZpZXdzOiAoKSA9PiB0aGlzLnJlc29sdmVkVmlld3NcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICB1bnJlc29sdmVkVmlld3M6IHsgdHlwZTogW09iamVjdCwgRnVuY3Rpb24sIFByb21pc2VdLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG9wdGlvbnM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICByZXNvbHZlZFZpZXdzOiB7fSxcbiAgICAgIHJlbW92ZVJvdXRlczogbnVsbCxcbiAgICAgIGRpYWxvZ3M6IHt9LFxuICAgICAgcGFnZVdpZHRoOiAwLFxuICAgICAgbG9hZGluZ0NvdW50OiAwLFxuICAgICAgYWxsb3dMb2dpbjogZmFsc2UsXG4gICAgICBpc0RyYWdnaW5nRmlsZXM6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbm90aWZpY2F0aW9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzTW91bnRlZCAmJiB0aGlzLiRyZWZzLm5vdGlmaWNhdGlvbnNcbiAgICB9LFxuXG4gICAgaXNMb2FkaW5nKCkge1xuICAgICAgcmV0dXJuIHRoaXMubG9hZGluZ0NvdW50ID4gMFxuICAgIH0sXG5cbiAgICBwYWdlQ2xhc3NlcygpIHtcbiAgICAgIGNvbnN0IHByZWZpeCA9ICdkaXRvLXBhZ2UnXG4gICAgICAvLyBOT1RFOiBLZWVwIHN5bmNlZCB3aXRoICRjb250ZW50LXdpZHRoIGluIFNDU1M6XG4gICAgICBjb25zdCBjb250ZW50V2lkdGggPSA5MDBcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHRoaXMuYXBwU3RhdGUucGFnZUNsYXNzLFxuICAgICAgICB7XG4gICAgICAgICAgW2Ake3ByZWZpeH0tLXdpZHRoLTgwYF06IHRoaXMucGFnZVdpZHRoIDw9IGNvbnRlbnRXaWR0aCAqIDAuOCxcbiAgICAgICAgICBbYCR7cHJlZml4fS0td2lkdGgtNjBgXTogdGhpcy5wYWdlV2lkdGggPD0gY29udGVudFdpZHRoICogMC42XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLmFwcFN0YXRlLnRpdGxlID0gZG9jdW1lbnQudGl0bGUgfHwgJ0RpdG8uanMgQWRtaW4nXG4gICAgLy8gV2l0aCBob3QtcmVsb2FkaW5nLCBpdCBsb29rcyBsaWtlIGRlc3Ryb3llZCBob29rcyBhcmVuJ3QgYWx3YXlzIGNhbGxlZFxuICAgIC8vIGZvciByb3V0ZSBjb21wb25lbnRzIHNvIHJlc2V0IHRoZSBhcnJheSBvZiByZWdpc3RlcmVkIGNvbXBvbmVudHMgaW5zdGVhZC5cbiAgICB0aGlzLmFwcFN0YXRlLnJvdXRlQ29tcG9uZW50cyA9IFtdXG4gIH0sXG5cbiAgYXN5bmMgbW91bnRlZCgpIHtcbiAgICB0aGlzLnNldHVwRHJhZ0FuZERyb3AoKVxuXG4gICAgdGlwcHlEZWxlZ2F0ZSh0aGlzLiRlbCwge1xuICAgICAgdGFyZ2V0OiAnLmRpdG8taW5mbycsXG4gICAgICB0aGVtZTogJ2luZm8nLFxuICAgICAgYW5pbWF0aW9uOiAnc2hpZnQtYXdheS1zdWJ0bGUnLFxuICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICBkZWxheTogMjUwLFxuICAgICAgekluZGV4OiAxLFxuICAgICAgYXBwZW5kVG86IG5vZGUgPT4gbm9kZS5jbG9zZXN0KCcuZGl0by1wYW5lJyksXG4gICAgICBvblNob3c6IGluc3RhbmNlID0+IGluc3RhbmNlLnNldENvbnRlbnQoaW5zdGFuY2UucmVmZXJlbmNlLmRhdGFzZXQuaW5mbylcbiAgICB9KVxuXG4gICAgLy8gQ2xlYXIgdGhlIGxhYmVsIG1hcmtlZCBhcyBhY3RpdmUgb24gYWxsIG1vdXNlIGFuZCBrZXlib2FyZCBldmVudHMsIGV4Y2VwdFxuICAgIC8vIHRoZSBvbmVzIHRoYXQgRGl0b0xhYmVsIGl0c2VsZiBpbnRlcmNlcHRzLlxuICAgIHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgIGNsaWNrOiBldmVudCA9PiB7XG4gICAgICAgIGlmICghZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJy5kaXRvLWxhYmVsJykpIHtcbiAgICAgICAgICB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBrZXl1cDogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoZXZlbnQuY29kZSA9PT0gJ1RhYicpIHtcbiAgICAgICAgICB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmFsbG93TG9naW4gPSBmYWxzZVxuICAgICAgaWYgKGF3YWl0IHRoaXMuZmV0Y2hVc2VyKCkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yZXNvbHZlVmlld3MoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2dpbigpXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycilcbiAgICB9XG4gICAgdGhpcy5hbGxvd0xvZ2luID0gdHJ1ZVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXR1cERyYWdBbmREcm9wKCkge1xuICAgICAgLy8gVGhpcyBjb2RlIG9ubHkgaGFwcGVucyB0aGUgdmlzdWFsIGVmZmVjdHMgYXJvdW5kIGRyYWdnaW5nIGFuZCBkcm9wcGluZ1xuICAgICAgLy8gZmlsZXMgaW50byBhIGBEaXRvVHlwZVVwbG9hZGAgY29tcG9uZW50LiBUaGUgYWN0dWFsIHVwbG9hZGluZyBpc1xuICAgICAgLy8gaGFuZGxlZCBieSB0aGUgYERpdG9UeXBlVXBsb2FkYCBjb21wb25lbnQgaXRzZWxmLlxuXG4gICAgICBsZXQgZHJhZ0NvdW50ID0gMFxuICAgICAgbGV0IHVwbG9hZHMgPSBbXVxuXG4gICAgICBjb25zdCB0b2dnbGVEcm9wVGFyZ2V0Q2xhc3MgPSBlbmFibGVkID0+IHtcbiAgICAgICAgZm9yIChjb25zdCB1cGxvYWQgb2YgdXBsb2Fkcykge1xuICAgICAgICAgIHVwbG9hZFxuICAgICAgICAgICAgLmNsb3Nlc3QoJy5kaXRvLWNvbnRhaW5lcicpXG4gICAgICAgICAgICAuY2xhc3NMaXN0LnRvZ2dsZSgnZGl0by1kcm9wLXRhcmdldCcsIGVuYWJsZWQpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFlbmFibGVkKSB7XG4gICAgICAgICAgdXBsb2FkcyA9IFtdXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2V0RHJhZ2dpbmdGaWxlcyA9IGVuYWJsZWQgPT4ge1xuICAgICAgICB0aGlzLmlzRHJhZ2dpbmdGaWxlcyA9IGVuYWJsZWRcbiAgICAgICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgICAgICB0b2dnbGVEcm9wVGFyZ2V0Q2xhc3ModHJ1ZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRvZ2dsZURyb3BUYXJnZXRDbGFzcyhmYWxzZSksIDE1MClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmRvbU9uKGRvY3VtZW50LCB7XG4gICAgICAgIGRyYWdlbnRlcjogZXZlbnQgPT4ge1xuICAgICAgICAgIGlmICghZHJhZ0NvdW50ICYmIGV2ZW50LmRhdGFUcmFuc2Zlcikge1xuICAgICAgICAgICAgdXBsb2FkcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5kaXRvLXVwbG9hZCcpXG4gICAgICAgICAgICBjb25zdCBoYXNVcGxvYWRzID0gdXBsb2Fkcy5sZW5ndGggPiAwXG4gICAgICAgICAgICBldmVudC5kYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZCA9IGhhc1VwbG9hZHMgPyAnY29weScgOiAnbm9uZSdcbiAgICAgICAgICAgIGlmIChoYXNVcGxvYWRzKSB7XG4gICAgICAgICAgICAgIHNldERyYWdnaW5nRmlsZXModHJ1ZSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGRyYWdDb3VudCsrXG4gICAgICAgIH0sXG5cbiAgICAgICAgZHJhZ2xlYXZlOiBldmVudCA9PiB7XG4gICAgICAgICAgZHJhZ0NvdW50LS1cbiAgICAgICAgICBpZiAoIWRyYWdDb3VudCAmJiBldmVudC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgICAgICAgIHNldERyYWdnaW5nRmlsZXMoZmFsc2UpXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGRyYWdvdmVyOiBldmVudCA9PiB7XG4gICAgICAgICAgaWYgKGV2ZW50LmRhdGFUcmFuc2Zlcikge1xuICAgICAgICAgICAgY29uc3QgY2FuRHJvcCA9IGV2ZW50LnRhcmdldC5jbG9zZXN0KFxuICAgICAgICAgICAgICAnLmRpdG8tY29udGFpbmVyOmhhcyguZGl0by11cGxvYWQpJ1xuICAgICAgICAgICAgKVxuICAgICAgICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSBjYW5Ecm9wID8gJ2NvcHknIDogJ25vbmUnXG4gICAgICAgICAgICBpZiAoIWNhbkRyb3ApIHtcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBkcm9wOiBldmVudCA9PiB7XG4gICAgICAgICAgZHJhZ0NvdW50ID0gMFxuICAgICAgICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgICAgICAgIHNldERyYWdnaW5nRmlsZXMoZmFsc2UpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBub3RpZnkoeyB0eXBlID0gJ2luZm8nLCB0aXRsZSwgdGV4dCwgZXJyb3IgfSA9IHt9KSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbnMubm90aWZ5KHsgdHlwZSwgdGl0bGUsIHRleHQsIGVycm9yIH0pXG4gICAgfSxcblxuICAgIGNsb3NlTm90aWZpY2F0aW9ucygpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9ucy5kZXN0cm95QWxsKClcbiAgICB9LFxuXG4gICAgcmVnaXN0ZXJMb2FkaW5nKGlzTG9hZGluZykge1xuICAgICAgdGhpcy5sb2FkaW5nQ291bnQgKz0gaXNMb2FkaW5nID8gMSA6IC0xXG4gICAgfSxcblxuICAgIHNob3dEaWFsb2coeyBjb21wb25lbnRzLCBidXR0b25zLCBkYXRhLCBzZXR0aW5ncyB9KSB7XG4gICAgICAvLyBTaG93cyBhIGRpdG8tZGlhbG9nIGNvbXBvbmVudCBhbmQgd3JhcHMgaXQgaW4gYSBwcm9taXNlIHNvIHRoYXQgdGhlXG4gICAgICAvLyBidXR0b25zIGluIHRoZSBkaWFsb2cgY2FuIHVzZSBgZGlhbG9nLnJlc29sdmUoKWAgYW5kIGBkaWFsb2cucmVqZWN0KClgXG4gICAgICAvLyB0byBjbG9zZSB0aGUgbW9kYWwgZGlhbG9nIGFuZCByZXNvbHZlIC8gcmVqZWN0IHRoZSBwcm9taXNlIGF0IG9uY2UuXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoXG4gICAgICAgIGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAvLyBQcm9jZXNzIGNvbXBvbmVudHMgdG8gcmVzb2x2ZSBhc3luYyBzY2hlbWFzLlxuICAgICAgICAgIGNvbnN0IHJvdXRlcyA9IFtdXG4gICAgICAgICAgYXdhaXQgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoXG4gICAgICAgICAgICB0aGlzLmFwaSxcbiAgICAgICAgICAgIHsgdHlwZTogJ2RpYWxvZycsIGNvbXBvbmVudHMgfSxcbiAgICAgICAgICAgIHJvdXRlcyxcbiAgICAgICAgICAgIDBcbiAgICAgICAgICApXG4gICAgICAgICAgaWYgKHJvdXRlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICdEaWFsb2dzIGRvIG5vdCBzdXBwb3J0IGNvbXBvbmVudHMgdGhhdCBwcm9kdWNlIHJvdXRlcydcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qga2V5ID0gYGRpYWxvZy0keysrZGlhbG9nSWR9YFxuICAgICAgICAgIHRoaXMuZGlhbG9nc1trZXldID0ge1xuICAgICAgICAgICAgY29tcG9uZW50cyxcbiAgICAgICAgICAgIGJ1dHRvbnMsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgc2V0dGluZ3MsXG4gICAgICAgICAgICBwcm9taXNlOiB7IHJlc29sdmUsIHJlamVjdCB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gICAgfSxcblxuICAgIHJlbW92ZURpYWxvZyhrZXkpIHtcbiAgICAgIGRlbGV0ZSB0aGlzLmRpYWxvZ3Nba2V5XVxuICAgIH0sXG5cbiAgICBhc3luYyBsb2dpbigpIHtcbiAgICAgIHRoaXMuYWxsb3dMb2dpbiA9IHRydWVcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgYWRkaXRpb25hbENvbXBvbmVudHMsXG4gICAgICAgIHJlZGlyZWN0QWZ0ZXJMb2dpblxuICAgICAgfSA9IHRoaXMub3B0aW9ucy5sb2dpbiB8fCB7fVxuICAgICAgY29uc3QgbG9naW5EYXRhID0gYXdhaXQgdGhpcy5zaG93RGlhbG9nKHtcbiAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgIHVzZXJuYW1lOiB7XG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICBhdXRvZm9jdXM6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHBhc3N3b3JkOiB7XG4gICAgICAgICAgICB0eXBlOiAncGFzc3dvcmQnXG4gICAgICAgICAgfSxcbiAgICAgICAgICAuLi5hZGRpdGlvbmFsQ29tcG9uZW50c1xuICAgICAgICB9LFxuICAgICAgICBidXR0b25zOiB7XG4gICAgICAgICAgY2FuY2VsOiB7XG4gICAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgICAgIHRleHQ6ICdDYW5jZWwnXG4gICAgICAgICAgICAvLyBOT1RFOiBUaGUgY2xpY2sgZXZlbnQgaXMgYWRkZWQgaW4gRGl0b0RpYWxvZy5idXR0b25TY2hlbWFzKClcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgbG9naW46IHtcbiAgICAgICAgICAgIHR5cGU6ICdzdWJtaXQnLFxuICAgICAgICAgICAgdGV4dDogJ0xvZ2luJ1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIGlmIChsb2dpbkRhdGEpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3Qoe1xuICAgICAgICAgICAgcmVzb3VyY2U6IHRoaXMuYXBpLnVzZXJzLmxvZ2luLFxuICAgICAgICAgICAgZGF0YTogbG9naW5EYXRhLFxuICAgICAgICAgICAgaW50ZXJuYWw6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICAgIGlmIChyZWRpcmVjdEFmdGVyTG9naW4pIHtcbiAgICAgICAgICAgIGxvY2F0aW9uLnJlcGxhY2UocmVkaXJlY3RBZnRlckxvZ2luKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldFVzZXIocmVzcG9uc2UuZGF0YS51c2VyKVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXNvbHZlVmlld3MoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSBlcnIucmVzcG9uc2U/LmRhdGE/LmVycm9yIHx8IGVyclxuICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgIHRpdGxlOiAnQXV0aGVudGljYXRpb24gRXJyb3InLFxuICAgICAgICAgICAgdGV4dDogZXJyb3JcbiAgICAgICAgICB9KVxuICAgICAgICAgIHRoaXMubG9naW4oKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG5hdmlnYXRlSG9tZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlKCcvJylcbiAgICB9LFxuXG4gICAgYXN5bmMgbG9nb3V0KCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHtcbiAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMubG9nb3V0LFxuICAgICAgICAgIGludGVybmFsOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aGlzLnNldFVzZXIobnVsbClcbiAgICAgICAgICB0aGlzLm5hdmlnYXRlSG9tZSgpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hVc2VyKCkge1xuICAgICAgbGV0IHVzZXIgPSBudWxsXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3Qoe1xuICAgICAgICAgIHJlc291cmNlOiB0aGlzLmFwaS51c2Vycy5zZXNzaW9uLFxuICAgICAgICAgIGludGVybmFsOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICAgIHVzZXIgPSByZXNwb25zZS5kYXRhLnVzZXIgfHwgbnVsbFxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gZXJyLnJlc3BvbnNlPy5kYXRhPy5lcnJvciB8fCBlcnJcbiAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgdGl0bGU6ICdBdXRoZW50aWNhdGlvbiBFcnJvcicsXG4gICAgICAgICAgdGV4dDogZXJyb3JcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0VXNlcih1c2VyKVxuICAgICAgcmV0dXJuIHVzZXJcbiAgICB9LFxuXG4gICAgc2V0VXNlcih1c2VyKSB7XG4gICAgICB0aGlzLmFwcFN0YXRlLnVzZXIgPSAoXG4gICAgICAgIHVzZXIgJiZcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHVzZXIsIERpdG9Vc2VyLnByb3RvdHlwZSlcbiAgICAgIClcbiAgICAgIC8vIENsZWFyIHJlc29sdmVkIHZpZXdzIHdoZW4gdXNlciBpcyBsb2dnZWQgb3V0LlxuICAgICAgaWYgKCF1c2VyKSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZWRWaWV3cyA9IHt9XG4gICAgICAgIHRoaXMubmF2aWdhdGVIb21lKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZW5zdXJlVXNlcigpIHtcbiAgICAgIGlmICghKGF3YWl0IHRoaXMuZmV0Y2hVc2VyKCkpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyByZXNvbHZlVmlld3MoKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnJlc29sdmVkVmlld3MgPSBhd2FpdCByZXNvbHZlVmlld3ModGhpcy51bnJlc29sdmVkVmlld3MpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoIWVycm9yLnJlcXVlc3QpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmxvZ2luKClcbiAgICAgIH1cbiAgICAgIC8vIENvbGxlY3QgYWxsIHJvdXRlcyBmcm9tIHRoZSByb290IHNjaGVtYSBjb21wb25lbnRzXG4gICAgICBjb25zdCByb3V0ZXMgPSBhd2FpdCBtYXBDb25jdXJyZW50bHkoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHRoaXMucmVzb2x2ZWRWaWV3cyksXG4gICAgICAgIChbbmFtZSwgc2NoZW1hXSkgPT4gcHJvY2Vzc1ZpZXcoRGl0b1ZpZXcsIHRoaXMuYXBpLCBzY2hlbWEsIG5hbWUpXG4gICAgICApXG4gICAgICAvLyBOb3cgdGhhdCB0aGUgcm91dGVzIGFyZSBsb2FkZWQsIHJlcGxhY2UgYWxsIGV4aXN0aW5nIHJvdXRlcyB3aXRoIHRoZVxuICAgICAgLy8gbmV3IHJvdXRlcywgYW5kIHJlc3RvcmUgdGhlIGN1cnJlbnQgcGF0aC5cbiAgICAgIGNvbnN0IHsgZnVsbFBhdGggfSA9IHRoaXMuJHJvdXRlXG4gICAgICB0aGlzLnJlbW92ZVJvdXRlcz8uKClcbiAgICAgIHRoaXMucmVtb3ZlUm91dGVzID0gYWRkUm91dGVzKHRoaXMuJHJvdXRlciwgW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3Jvb3QnLFxuICAgICAgICAgIHBhdGg6ICcvJyxcbiAgICAgICAgICBjb21wb25lbnRzOiB7fVxuICAgICAgICB9LFxuICAgICAgICAuLi5yb3V0ZXMuZmxhdCgpXG4gICAgICBdKVxuICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2UoZnVsbFBhdGgpXG4gICAgfSxcblxuICAgIG9uUmVzaXplUGFnZSh7IGNvbnRlbnRSZWN0OiB7IHdpZHRoIH0gfSkge1xuICAgICAgdGhpcy5wYWdlV2lkdGggPSB3aWR0aFxuICAgIH1cbiAgfVxufSlcblxubGV0IGRpYWxvZ0lkID0gMFxuXG5mdW5jdGlvbiBhZGRSb3V0ZXMocm91dGVyLCByb3V0ZXMpIHtcbiAgY29uc3QgcmVtb3ZlcnMgPSBbXVxuICBmb3IgKGNvbnN0IHJvdXRlIG9mIHJvdXRlcykge1xuICAgIGNvbnN0IHJlbW92ZSA9IHJvdXRlci5hZGRSb3V0ZShyb3V0ZSlcbiAgICByZW1vdmVycy5wdXNoKHJlbW92ZSlcbiAgfVxuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgZm9yIChjb25zdCByZW1vdmUgb2YgcmVtb3ZlcnMpIHtcbiAgICAgIHJlbW92ZSgpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvc3R5bGUnO1xuXG4uZGl0by1hcHAsXG4uZGl0by1yb290IHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgZGlzcGxheTogZmxleDtcbn1cblxuLmRpdG8tcGFnZSB7XG4gIC0tbWF4LWNvbnRlbnQtd2lkdGg6ICN7JGNvbnRlbnQtd2lkdGh9O1xuICAtLW1heC1wYWdlLXdpZHRoOiBjYWxjKHZhcigtLW1heC1jb250ZW50LXdpZHRoKSArIDIgKiAjeyRjb250ZW50LXBhZGRpbmd9KTtcblxuICBmbGV4OiAwIDEgdmFyKC0tbWF4LXBhZ2Utd2lkdGgpO1xuICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kO1xuICBtaW4td2lkdGg6IDAlO1xuICBtYXgtd2lkdGg6IHZhcigtLW1heC1wYWdlLXdpZHRoKTtcbiAgb3ZlcmZsb3c6IHZpc2libGU7IC8vIEZvciAuZGl0by1oZWFkZXIgZnVsbC13aWR0aCBiYWNrZ3JvdW5kLlxuXG4gICYtLXdpZGUge1xuICAgIC0tbWF4LWNvbnRlbnQtd2lkdGg6ICN7JGNvbnRlbnQtd2lkdGgtd2lkZX07XG4gIH1cbn1cblxuLmRpdG8tYWNjb3VudCxcbi5kaXRvLWxvZ2luIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4uZGl0by1kcmFnLW92ZXJsYXkge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgei1pbmRleDogJHotaW5kZXgtZHJhZy1vdmVybGF5O1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDhweCk7XG59XG5cbi5kaXRvLWRyb3AtdGFyZ2V0IHtcbiAgLS1zaGFkb3ctYWxwaGE6IDAuMjU7XG5cbiAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZDtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gIHotaW5kZXg6ICR6LWluZGV4LWRyYWctb3ZlcmxheSArIDE7XG4gIGZpbHRlcjogZHJvcC1zaGFkb3coMCA0cHggOHB4IHJnYmEoMCwgMCwgMCwgdmFyKC0tc2hhZG93LWFscGhhKSkpO1xufVxuXG4uZGl0by1kcmFnLWVudGVyLWFjdGl2ZSxcbi5kaXRvLWRyYWctbGVhdmUtYWN0aXZlIHtcbiAgJGR1cmF0aW9uOiAwLjE1cztcblxuICB0cmFuc2l0aW9uOlxuICAgIG9wYWNpdHkgJGR1cmF0aW9uLFxuICAgIGJhY2tkcm9wLWZpbHRlciAkZHVyYXRpb247XG5cbiAgfiAqIC5kaXRvLWRyb3AtdGFyZ2V0IHtcbiAgICB0cmFuc2l0aW9uOiBmaWx0ZXIgJGR1cmF0aW9uO1xuICB9XG59XG5cbi5kaXRvLWRyYWctZW50ZXItZnJvbSxcbi5kaXRvLWRyYWctbGVhdmUtdG8ge1xuICBvcGFjaXR5OiAwO1xuICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMCk7XG5cbiAgfiAqIC5kaXRvLWRyb3AtdGFyZ2V0IHtcbiAgICAtLXNoYWRvdy1hbHBoYTogMDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG51bC5kaXRvLW1lbnUoXG4gIHYtcmVzaXplPVwib25SZXNpemVcIlxuICA6c3R5bGU9XCJ7ICctLXdpZHRoJzogd2lkdGggPyBgJHt3aWR0aH1weGAgOiBudWxsIH1cIlxuKVxuICBsaShcbiAgICB2LWZvcj1cIml0ZW0gaW4gaXRlbXNcIlxuICApXG4gICAgdGVtcGxhdGUoXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKGl0ZW0pXCJcbiAgICApXG4gICAgICBhLmRpdG8tbGluayhcbiAgICAgICAgOmhyZWY9XCJnZXRJdGVtSHJlZihpdGVtKVwiXG4gICAgICAgIDpjbGFzcz1cImdldEl0ZW1DbGFzcyhpdGVtLCAnZGl0by1zdWItbWVudS1saW5rJylcIlxuICAgICAgICBAY2xpY2sucHJldmVudC5zdG9wPVwib25DbGlja0l0ZW0oaXRlbSlcIlxuICAgICAgKSB7eyBnZXRMYWJlbChpdGVtKSB9fVxuICAgICAgRGl0b01lbnUoXG4gICAgICAgIHYtaWY9XCJpdGVtLml0ZW1zXCJcbiAgICAgICAgOmNsYXNzPVwiZ2V0SXRlbUNsYXNzKGl0ZW0sICdkaXRvLXN1Yi1tZW51JylcIlxuICAgICAgICA6aXRlbXM9XCJpdGVtLml0ZW1zXCJcbiAgICAgICAgOnBhdGg9XCJnZXRJdGVtUGF0aChpdGVtLCBmYWxzZSlcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b01lbnUnLCB7XG4gIHByb3BzOiB7XG4gICAgaXRlbXM6IHtcbiAgICAgIHR5cGU6IFtPYmplY3QsIEFycmF5XSxcbiAgICAgIGRlZmF1bHQ6ICgpID0+IFtdXG4gICAgfSxcbiAgICBwYXRoOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB3aWR0aDogMFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25SZXNpemUoeyBjb250ZW50UmVjdDogeyB3aWR0aCB9IH0pIHtcbiAgICAgIGlmICh3aWR0aCkge1xuICAgICAgICB0aGlzLndpZHRoID0gd2lkdGhcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0SXRlbUNsYXNzKGl0ZW0sIHN1Yk1lbnVDbGFzcykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW3N1Yk1lbnVDbGFzc106ICEhaXRlbS5pdGVtcyxcbiAgICAgICAgJ2RpdG8tYWN0aXZlJzogdGhpcy5pc0FjdGl2ZUl0ZW0oaXRlbSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0SXRlbVBhdGgoaXRlbSwgZmlyc3RDaGlsZCkge1xuICAgICAgY29uc3QgcGF0aCA9IGl0ZW0ucGF0aCA/IGAke3RoaXMucGF0aH0vJHtpdGVtLnBhdGh9YCA6IG51bGxcbiAgICAgIHJldHVybiBmaXJzdENoaWxkICYmIHBhdGggJiYgaXRlbS5pdGVtc1xuICAgICAgICA/IGAke3BhdGh9JHt0aGlzLmdldEl0ZW1QYXRoKE9iamVjdC52YWx1ZXMoaXRlbS5pdGVtcylbMF0sIGZhbHNlKX1gXG4gICAgICAgIDogcGF0aFxuICAgIH0sXG5cbiAgICBnZXRJdGVtSHJlZihpdGVtKSB7XG4gICAgICBjb25zdCBwYXRoID0gdGhpcy5nZXRJdGVtUGF0aChpdGVtLCB0cnVlKVxuICAgICAgcmV0dXJuIHBhdGggPyB0aGlzLiRyb3V0ZXIucmVzb2x2ZShwYXRoKS5ocmVmIDogbnVsbFxuICAgIH0sXG5cbiAgICBpc0FjdGl2ZUl0ZW0oaXRlbSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy4kcm91dGUucGF0aC5zdGFydHNXaXRoKHRoaXMuZ2V0SXRlbVBhdGgoaXRlbSwgZmFsc2UpKSB8fFxuICAgICAgICBpdGVtLml0ZW1zICYmIE9iamVjdC52YWx1ZXMoaXRlbS5pdGVtcykuc29tZSh0aGlzLmlzQWN0aXZlSXRlbSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgb25DbGlja0l0ZW0oaXRlbSkge1xuICAgICAgY29uc3QgcGF0aCA9IHRoaXMuZ2V0SXRlbVBhdGgoaXRlbSwgdHJ1ZSlcbiAgICAgIGlmIChwYXRoKSB7XG4gICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgcGF0aCwgZm9yY2U6IHRydWUgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AdXNlICdzYXNzOmNvbG9yJztcbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLW1lbnUge1xuICAkaXRlbS1oZWlnaHQ6ICRtZW51LWZvbnQtc2l6ZSArIDIgKiAkbWVudS1wYWRkaW5nLXZlcjtcblxuICBib3JkZXItcmlnaHQ6ICRib3JkZXItc3R5bGU7XG4gIHBhZGRpbmc6IDAgJG1lbnUtc3BhY2luZztcblxuICBsaSB7XG4gICAgJjpoYXMoLmRpdG8tc3ViLW1lbnU6bm90KC5kaXRvLWFjdGl2ZSkpIHtcbiAgICAgIC8vIFBvcC1vdXQgc3ViLW1lbnVzIG9uIGhvdmVyOlxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIC5kaXRvLXN1Yi1tZW51LWxpbmsge1xuICAgICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVzdDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5kaXRvLXN1Yi1tZW51IHtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgd2lkdGg6IHZhcigtLXdpZHRoKTtcbiAgICAgICAgICB6LWluZGV4OiAkei1pbmRleC1oZWFkZXI7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKGNhbGModmFyKC0td2lkdGgpICsgMiAqICRtZW51LXNwYWNpbmcpKVxuICAgICAgICAgICAgdHJhbnNsYXRlWSgtJGl0ZW0taGVpZ2h0KTtcblxuICAgICAgICAgIGxpOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgICAgIC5kaXRvLWxpbmsge1xuICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgICAgICAvLyBGaWxsIHRoZSBnYXAgdG8gbm90IGxvb3NlIHRoZSBob3ZlciB3aGVuIG1vdmluZyBvdmVyIGl0LlxuICAgICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgICBsZWZ0OiAtMiAqICRtZW51LXNwYWNpbmc7XG4gICAgICAgICAgICB3aWR0aDogMiAqICRtZW51LXNwYWNpbmc7XG4gICAgICAgICAgICBoZWlnaHQ6ICRpdGVtLWhlaWdodDtcbiAgICAgICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gLmRpdG8tc3ViLW1lbnUtbGluayxcbiAgICAgICAgLmRpdG8tc3ViLW1lbnUge1xuICAgICAgICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tbGluayB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcGFkZGluZzogJG1lbnUtcGFkZGluZztcbiAgICBsaW5lLWhlaWdodDogJG1lbnUtbGluZS1oZWlnaHQ7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgbWFyZ2luLXRvcDogJG1lbnUtc3BhY2luZztcblxuICAgICY6Zm9jdXM6bm90KDphY3RpdmUsIC5kaXRvLWFjdGl2ZSkge1xuICAgICAgYm94LXNoYWRvdzogJHNoYWRvdy1mb2N1cztcbiAgICB9XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTtcbiAgICB9XG5cbiAgICAmLmRpdG8tYWN0aXZlIHtcbiAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLXN1Yi1tZW51LWxpbmsge1xuICAgICYuZGl0by1hY3RpdmUge1xuICAgICAgYmFja2dyb3VuZDogY29sb3IuYWRqdXN0KCRjb2xvci1hY3RpdmUsICRhbHBoYTogLTAuMyk7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tc3ViLW1lbnUge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgYm9yZGVyLXJpZ2h0OiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXN0O1xuXG4gICAgJi5kaXRvLWFjdGl2ZSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tdHJhaWxcbiAgdWxcbiAgICBsaShcbiAgICAgIHYtZm9yPVwiY29tcG9uZW50IGluIHRyYWlsXCJcbiAgICApXG4gICAgICBhLmRpdG8tbGluayhcbiAgICAgICAgOmNsYXNzPVwiZ2V0TGlua0NsYXNzKGNvbXBvbmVudClcIlxuICAgICAgICA6aHJlZj1cImdldENvbXBvbmVudEhyZWYoY29tcG9uZW50KVwiXG4gICAgICAgIEBjbGljay5wcmV2ZW50LnN0b3A9XCJvbkNsaWNrQ29tcG9uZW50KGNvbXBvbmVudClcIlxuICAgICAgKVxuICAgICAgICBzcGFuKDpjbGFzcz1cImdldFNwYW5DbGFzcyhjb21wb25lbnQpXCIpXG4gICAgICAgICAgfCB7eyBjb21wb25lbnQuYnJlYWRjcnVtYiB9fVxuICBzbG90XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvVHJhaWwnLCB7XG4gIGNvbXB1dGVkOiB7XG4gICAgdHJhaWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcHBTdGF0ZS5yb3V0ZUNvbXBvbmVudHMuZmlsdGVyKFxuICAgICAgICBjb21wb25lbnQgPT4gISFjb21wb25lbnQucm91dGVSZWNvcmRcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldENvbXBvbmVudFBhdGgoY29tcG9uZW50KSB7XG4gICAgICAvLyBEbyB0aGUgc2FtZSBhcyBpbiBgRGl0b01lbnVgOiBMaW5rIG1lbnUgaXRlbXMgdG8gdGhlIGZpcnN0IGNoaWxkcmVuLlxuICAgICAgY29uc3QgeyBzY2hlbWEgfSA9IGNvbXBvbmVudFxuICAgICAgcmV0dXJuIHNjaGVtYS50eXBlID09PSAnbWVudSdcbiAgICAgICAgPyBPYmplY3QudmFsdWVzKHNjaGVtYS5pdGVtcylbMF0uZnVsbFBhdGhcbiAgICAgICAgOiBjb21wb25lbnQucGF0aFxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRIcmVmKGNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlci5yZXNvbHZlKHRoaXMuZ2V0Q29tcG9uZW50UGF0aChjb21wb25lbnQpKS5ocmVmXG4gICAgfSxcblxuICAgIG9uQ2xpY2tDb21wb25lbnQoY29tcG9uZW50KSB7XG4gICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7XG4gICAgICAgIHBhdGg6IHRoaXMuZ2V0Q29tcG9uZW50UGF0aChjb21wb25lbnQpLFxuICAgICAgICBmb3JjZTogdHJ1ZVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZ2V0TGlua0NsYXNzKGNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tYWN0aXZlJzogY29tcG9uZW50LnBhdGggPT09IHRoaXMuJHJvdXRlLnBhdGhcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0U3BhbkNsYXNzKGNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tZGlydHknOiBjb21wb25lbnQuaXNEaXJ0eVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXRyYWlsIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgaGVpZ2h0OiAzZW07XG5cbiAgdWwge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gIH1cblxuICBsaSB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgfVxuXG4gIGEge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBkaXNwbGF5OiBibG9jaztcblxuICAgICY6aG92ZXIge1xuICAgICAgc3BhbiB7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItbGlnaHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGk6bm90KDpsYXN0LWNoaWxkKSBhIHtcbiAgICAkYW5nbGU6IDMzZGVnO1xuXG4gICAgJjo6YmVmb3JlLFxuICAgICY6OmFmdGVyIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgd2lkdGg6IDFweDtcbiAgICAgIGhlaWdodDogMC43NWVtO1xuICAgICAgcmlnaHQ6IC0wLjI1ZW07XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG4gICAgICBvcGFjaXR5OiAwLjU7XG4gICAgfVxuXG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIHRvcDogNTAlO1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoJGFuZ2xlKTtcbiAgICAgIHRyYW5zZm9ybS1vcmlnaW46IHRvcDtcbiAgICB9XG5cbiAgICAmOjphZnRlciB7XG4gICAgICBib3R0b206IDUwJTtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0kYW5nbGUpO1xuICAgICAgdHJhbnNmb3JtLW9yaWdpbjogYm90dG9tO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5uYXYuZGl0by1oZWFkZXJcbiAgRGl0b1RyYWlsXG4gICAgRGl0b1NwaW5uZXIoXG4gICAgICB2LWlmPVwiaXNMb2FkaW5nXCJcbiAgICAgIDpzaXplPVwic3Bpbm5lcj8uc2l6ZVwiXG4gICAgICA6Y29sb3I9XCJzcGlubmVyPy5jb2xvclwiXG4gICAgKVxuICAvLy0gVGVsZXBvcnQgdGFyZ2V0IGZvciBgLmRpdG8tc2NoZW1hLWhlYWRlcmA6XG4gIC5kaXRvLWhlYWRlcl9fdGVsZXBvcnRcbiAgc2xvdFxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0hlYWRlcicsIHtcbiAgcHJvcHM6IHtcbiAgICBzcGlubmVyOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSxcbiAgICBpc0xvYWRpbmc6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWhlYWRlciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYmFja2dyb3VuZDogJGNvbG9yLWJsYWNrO1xuICBmb250LXNpemU6ICRoZWFkZXItZm9udC1zaXplO1xuICBsaW5lLWhlaWdodDogJGhlYWRlci1saW5lLWhlaWdodDtcbiAgei1pbmRleDogJHotaW5kZXgtaGVhZGVyO1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAmOjphZnRlciB7XG4gICAgLy8gU2V0IHRoZSBmdWxsLXdpZHRoIGhlYWRlciBiYWNrZ3JvdW5kIHRvIHRoZSBoZWFkZXIgY29sb3IuXG4gICAgY29udGVudDogJyc7XG4gICAgaW5zZXQ6IDA7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBiYWNrZ3JvdW5kOiBpbmhlcml0O1xuICAgIHotaW5kZXg6IC0xO1xuICB9XG5cbiAgc3BhbiB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHBhZGRpbmc6ICRoZWFkZXItcGFkZGluZztcbiAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuXG4gICAgJjplbXB0eSB7XG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6ICdcXDIwMGInO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWRpcnR5IHtcbiAgICAmOjphZnRlciB7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICAgIHdpZHRoOiA4cHg7XG4gICAgICBoZWlnaHQ6IDhweDtcbiAgICAgIG1hcmdpbjogMnB4O1xuICAgICAgbWFyZ2luLWxlZnQ6IDAuNWVtO1xuICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTtcbiAgICB9XG4gIH1cblxuICAmX190ZWxlcG9ydCB7XG4gICAgLy8gQWxpZ24gdGhlIHRlbGVwb3J0ZWQgc2NoZW1hIGhlYWRlcnMgb24gdG9wIG9mIHRvIHRoZSBoZWFkZXIgbWVudS5cbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgaW5zZXQ6IDA7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAgIHBhZGRpbmc6IDAgJGhlYWRlci1wYWRkaW5nLWhvcjtcbiAgICAvLyBUdXJuIG9mZiBwb2ludGVyIGV2ZW50cyBzbyB0aGF0IERpdG9UcmFpbCBrZWVwcyByZWNlaXZpbmcgZXZlbnRzLi4uXG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgLy8gLi4uYnV0IG1vdmUgdGhlbSB0byB0aGUgY2hpbGRyZW4uXG4gICAgPiAqIHtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICAgIH1cblxuICAgIC5kaXRvLWJ1dHRvbiB7XG4gICAgICBtYXJnaW46IDAgMCAkdGFiLW1hcmdpbiAkdGFiLW1hcmdpbjtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxubmF2LmRpdG8tbmF2aWdhdGlvbi5kaXRvLXNjcm9sbC1wYXJlbnRcbiAgaDFcbiAgICBSb3V0ZXJMaW5rLmRpdG8tbGluayh0bz1cIi9cIikge3sgYXBwU3RhdGUudGl0bGUgfX1cbiAgRGl0b01lbnUuZGl0by1zY3JvbGwoOml0ZW1zPVwidmlld3NcIilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9OYXZpZ2F0aW9uJywge30pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1uYXZpZ2F0aW9uIHtcbiAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgZmxleDogMCAwIG1pbi1jb250ZW50O1xuICBmb250LXNpemU6ICRtZW51LWZvbnQtc2l6ZTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXI7XG5cbiAgaDEge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGxpbmUtaGVpZ2h0OiAkaGVhZGVyLWxpbmUtaGVpZ2h0O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci1kYXJrZXI7XG4gICAgYm9yZGVyLXJpZ2h0OiAkYm9yZGVyLXdpZHRoIHNvbGlkICRjb2xvci1kYXJrZXN0O1xuICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG5cbiAgICAuZGl0by1saW5rIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgcGFkZGluZzogJGhlYWRlci1wYWRkaW5nO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1ub3RpZmljYXRpb25zXG4gIC5kaXRvLWhlYWRlclxuICAgIHNwYW5cbiAgLmRpdG8tbm90aWZpY2F0aW9uc19faW5uZXJcbiAgICBWdWVOb3RpZmljYXRpb25zKFxuICAgICAgcmVmPVwibm90aWZpY2F0aW9uc1wiXG4gICAgICBjbGFzc2VzPVwiZGl0by1ub3RpZmljYXRpb25cIlxuICAgICAgOmRhbmdlcm91c2x5U2V0SW5uZXJIdG1sPVwidHJ1ZVwiXG4gICAgICBwb3NpdGlvbj1cIlwiXG4gICAgICB3aWR0aD1cIlwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBhc0FycmF5LCBzdHJpcFRhZ3MgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9Ob3RpZmljYXRpb25zJywge1xuICBub3RpZmljYXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmlzTW91bnRlZCAmJiB0aGlzLiRyZWZzLm5vdGlmaWNhdGlvbnNcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgbm90aWZ5KHsgdHlwZSA9ICdpbmZvJywgdGl0bGUsIHRleHQsIGVycm9yIH0gPSB7fSkge1xuICAgICAgdGl0bGUgfHw9IChcbiAgICAgICAge1xuICAgICAgICAgIHdhcm5pbmc6ICdXYXJuaW5nJyxcbiAgICAgICAgICBlcnJvcjogJ0Vycm9yJyxcbiAgICAgICAgICBpbmZvOiAnSW5mb3JtYXRpb24nLFxuICAgICAgICAgIHN1Y2Nlc3M6ICdTdWNjZXNzJ1xuICAgICAgICB9W3R5cGVdIHx8XG4gICAgICAgICdOb3RpZmljYXRpb24nXG4gICAgICApXG4gICAgICB0ZXh0ID0gYDxwPiR7XG4gICAgICAgIGFzQXJyYXkodGV4dCkuam9pbignPC9wPiA8cD4nKVxuICAgICAgfTwvcD5gLnJlcGxhY2UoL1xcbnxcXHJcXG58XFxyL2csICc8YnI+JylcbiAgICAgIGNvbnN0IGxvZyA9IChcbiAgICAgICAge1xuICAgICAgICAgIHdhcm5pbmc6ICd3YXJuJyxcbiAgICAgICAgICBlcnJvcjogJ2Vycm9yJyxcbiAgICAgICAgICBpbmZvOiAnbG9nJyxcbiAgICAgICAgICBzdWNjZXNzOiAnbG9nJ1xuICAgICAgICB9W3R5cGVdIHx8XG4gICAgICAgICdlcnJvcidcbiAgICAgIClcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlW2xvZ10oXG4gICAgICAgIC4uLltcbiAgICAgICAgICBzdHJpcFRhZ3ModGV4dCksXG4gICAgICAgICAgLi4uKHR5cGUgPT09ICdlcnJvcicgJiYgZXJyb3IgPyBbZXJyb3JdIDogW10pXG4gICAgICAgIF1cbiAgICAgIClcbiAgICAgIGNvbnN0IHsgbm90aWZpY2F0aW9ucyA9IHRydWUgfSA9IHRoaXMuYXBpXG4gICAgICBpZiAobm90aWZpY2F0aW9ucykge1xuICAgICAgICAvLyBDYWxjdWxhdGUgZGlzcGxheS1kdXJhdGlvbiBmb3IgdGhlIG5vdGlmaWNhdGlvbiBiYXNlZCBvbiBpdHMgY29udGVudFxuICAgICAgICAvLyBhbmQgdGhlIHNldHRpbmcgb2YgdGhlIGBkdXJhdGlvbkZhY3RvcmAgY29uZmlndXJhdGlvbi4gSXQgZGVmaW5lcyB0aGVcbiAgICAgICAgLy8gYW1vdW50IG9mIG1pbGxpc2Vjb25kcyBtdWx0aXBsaWVkIHdpdGggdGhlIGFtb3VudCBvZiBjaGFyYWN0ZXJzXG4gICAgICAgIC8vIGRpc3BsYXllZCBpbiB0aGUgbm90aWZpY2F0aW9uLCBwbHVzIDQwICg0MCArIHRpdGxlICsgbWVzc2FnZSk6XG4gICAgICAgIGNvbnN0IHsgZHVyYXRpb25GYWN0b3IgPSAyMCB9ID0gbm90aWZpY2F0aW9uc1xuICAgICAgICBjb25zdCBkdXJhdGlvbiA9ICg0MCArIHRleHQubGVuZ3RoICsgdGl0bGUubGVuZ3RoKSAqIGR1cmF0aW9uRmFjdG9yXG4gICAgICAgIHRoaXMuJG5vdGlmeSh7IHR5cGUsIHRpdGxlLCB0ZXh0LCBkdXJhdGlvbiB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkZXN0cm95QWxsKCkge1xuICAgICAgdGhpcy5ub3RpZmljYXRpb25zLmRlc3Ryb3lBbGwoKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkB1c2UgJ3Nhc3M6Y29sb3InO1xuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuQG1peGluIHR5cGUoJGJhY2tncm91bmQpIHtcbiAgYmFja2dyb3VuZDogY29sb3IuYWRqdXN0KCRiYWNrZ3JvdW5kLCAkbGlnaHRuZXNzOiA1JSk7XG4gIGNvbG9yOiAkY29sb3Itd2hpdGU7XG4gIGJvcmRlci1sZWZ0OiAxMnB4IHNvbGlkIGNvbG9yLmFkanVzdCgkYmFja2dyb3VuZCwgJGxpZ2h0bmVzczogLTEwJSk7XG59XG5cbi5kaXRvLW5vdGlmaWNhdGlvbnMge1xuICAkbm90aWZpY2F0aW9uLXdpZHRoOiAzMDBweDtcblxuICBmbGV4OiAxO1xuICB6LWluZGV4OiAkei1pbmRleC1ub3RpZmljYXRpb25zO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBtYXJnaW4tbGVmdDogJGZvcm0tc3BhY2luZztcbiAgLy8gRm9yIHRoZSBgQGNvbnRhaW5lcmAgcnVsZSB0byB3b3JrOlxuICBjb250YWluZXItdHlwZTogaW5saW5lLXNpemU7XG5cbiAgLmRpdG8taGVhZGVyIHtcbiAgICBzcGFuIHtcbiAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgfVxuICB9XG5cbiAgJl9faW5uZXIge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgfVxuXG4gIC52dWUtbm90aWZpY2F0aW9uLWdyb3VwIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogMDtcbiAgICB0b3A6IDA7XG4gICAgd2lkdGg6ICRub3RpZmljYXRpb24td2lkdGg7XG5cbiAgICBAY29udGFpbmVyICh3aWR0aCA8ICN7JG5vdGlmaWNhdGlvbi13aWR0aCArICRjb250ZW50LXBhZGRpbmd9KSB7XG4gICAgICBsZWZ0OiB1bnNldDtcbiAgICAgIHJpZ2h0OiAkY29udGVudC1wYWRkaW5nO1xuICAgIH1cbiAgfVxuXG4gIC52dWUtbm90aWZpY2F0aW9uLXdyYXBwZXIge1xuICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICB9XG5cbiAgLmRpdG8tbm90aWZpY2F0aW9uIHtcbiAgICBwYWRkaW5nOiA4cHg7XG4gICAgbWFyZ2luOiAkY29udGVudC1wYWRkaW5nIDA7XG4gICAgZm9udC1zaXplOiBpbmhlcml0O1xuICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYm94LXNoYWRvdzogJHNoYWRvdy13aW5kb3c7XG5cbiAgICAubm90aWZpY2F0aW9uLXRpdGxlIHtcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgICAgcGFkZGluZy1ib3R0b206IDhweDtcbiAgICB9XG5cbiAgICAubm90aWZpY2F0aW9uLWNvbnRlbnQge1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcblxuICAgICAgcCB7XG4gICAgICAgIG1hcmdpbjogMDtcblxuICAgICAgICAmICsgcCB7XG4gICAgICAgICAgbWFyZ2luLXRvcDogOHB4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgJixcbiAgICAmLmluZm8ge1xuICAgICAgQGluY2x1ZGUgdHlwZSgkY29sb3ItYWN0aXZlKTtcbiAgICB9XG5cbiAgICAmLnN1Y2Nlc3Mge1xuICAgICAgQGluY2x1ZGUgdHlwZSgkY29sb3Itc3VjY2Vzcyk7XG4gICAgfVxuXG4gICAgJi53YXJuaW5nIHtcbiAgICAgIEBpbmNsdWRlIHR5cGUoJGNvbG9yLXdhcm5pbmcpO1xuICAgIH1cblxuICAgICYuZXJyb3Ige1xuICAgICAgQGluY2x1ZGUgdHlwZSgkY29sb3ItZXJyb3IpO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5hc2lkZS5kaXRvLXNpZGViYXIuZGl0by1zY3JvbGwtcGFyZW50KFxuICB2LXJlc2l6ZT1cIm9uUmVzaXplU2lkZWJhclwiXG4gIDpjbGFzcz1cImNsYXNzZXNcIlxuKVxuICBuYXYuZGl0by1oZWFkZXJcbiAgICBzbG90XG4gIC5kaXRvLXNpZGViYXJfX3RlbGVwb3J0LmRpdG8tc2Nyb2xsXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvU2lkZWJhcicsIHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2lkZWJhcldpZHRoOiAwXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY2xhc3NlcygpIHtcbiAgICAgIGNvbnN0IHByZWZpeCA9ICdkaXRvLXNpZGViYXInXG4gICAgICAvLyBOT1RFOiBLZWVwIHN5bmNlZCB3aXRoICRzaWRlYmFyLW1heC13aWR0aCBpbiBTQ1NTOlxuICAgICAgY29uc3Qgc2lkZWJhcldpZHRoID0gMzYwXG4gICAgICByZXR1cm4ge1xuICAgICAgICBbYCR7cHJlZml4fS0td2lkdGgtOTlgXTogdGhpcy5zaWRlYmFyV2lkdGggPCBzaWRlYmFyV2lkdGgsXG4gICAgICAgIFtgJHtwcmVmaXh9LS13aWR0aC02MGBdOiB0aGlzLnNpZGViYXJXaWR0aCA8PSBzaWRlYmFyV2lkdGggKiAwLjZcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uUmVzaXplU2lkZWJhcih7IGNvbnRlbnRSZWN0OiB7IHdpZHRoIH0gfSkge1xuICAgICAgdGhpcy5zaWRlYmFyV2lkdGggPSB3aWR0aFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXNpZGViYXIge1xuICBmbGV4OiAwIDEgJHNpZGViYXItbWF4LXdpZHRoO1xuICBtYXgtd2lkdGg6ICRzaWRlYmFyLW1heC13aWR0aDtcbiAgbWluLXdpZHRoOiAkc2lkZWJhci1taW4td2lkdGg7XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IERvbU1peGluIGZyb20gJy4vRG9tTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0RvbU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwdWxsZG93bjoge1xuICAgICAgICBvcGVuOiBmYWxzZSxcbiAgICAgICAgc3RhcnRUaW1lOiAwLFxuICAgICAgICBjaGVja1RpbWU6IHRydWUsXG4gICAgICAgIGV2ZW50czoge1xuICAgICAgICAgIG1vdXNlZG93bjogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4oZmFsc2UpXG4gICAgICAgICAgICB0aGlzLnB1bGxkb3duLmhhbmRsZXJzLnJlbW92ZSgpXG4gICAgICAgICAgfSxcblxuICAgICAgICAgIG1vdXNldXA6ICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9uUHVsbGRvd25Nb3VzZVVwKCkpIHtcbiAgICAgICAgICAgICAgdGhpcy5wdWxsZG93bi5oYW5kbGVycy5yZW1vdmUoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgaGFuZGxlcnM6IG51bGxcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uUHVsbGRvd25Nb3VzZURvd24odmFsdWUgPSBudWxsKSB7XG4gICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4odHJ1ZSlcbiAgICAgICAgdGhpcy5jaGVja1RpbWUgPSB0cnVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNoZWNrVGltZSA9IGZhbHNlXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uUHVsbGRvd25Nb3VzZVVwKHZhbHVlID0gbnVsbCkge1xuICAgICAgY29uc3QgeyBzdGFydFRpbWUgfSA9IHRoaXMucHVsbGRvd25cbiAgICAgIGlmICghdGhpcy5jaGVja1RpbWUgfHwgc3RhcnRUaW1lICYmIChEYXRlLm5vdygpIC0gc3RhcnRUaW1lID4gMjUwKSkge1xuICAgICAgICB0aGlzLnNldFB1bGxkb3duT3BlbihmYWxzZSlcbiAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5vblB1bGxkb3duU2VsZWN0KHZhbHVlKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uUHVsbGRvd25TZWxlY3QoLyogdmFsdWUgKi8pIHtcbiAgICAgIC8vIE5PVEU6IFRvIGJlIG92ZXJyaWRkZW4uXG4gICAgfSxcblxuICAgIHNldFB1bGxkb3duT3BlbihvcGVuKSB7XG4gICAgICB0aGlzLnB1bGxkb3duLm9wZW4gPSBvcGVuXG4gICAgICB0aGlzLnB1bGxkb3duLnN0YXJ0VGltZSA9IG9wZW4gPyBEYXRlLm5vdygpIDogMFxuICAgICAgaWYgKG9wZW4pIHtcbiAgICAgICAgdGhpcy5wdWxsZG93bi5oYW5kbGVycyA9IHRoaXMuZG9tT24oZG9jdW1lbnQsIHRoaXMucHVsbGRvd24uZXZlbnRzKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWFjY291bnRcbiAgYShcbiAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKClcIlxuICApXG4gICAgc3BhbiB7eyB1c2VyLnVzZXJuYW1lIH19XG4gIHVsLmRpdG8tcHVsbGRvd24oOmNsYXNzPVwieyAnZGl0by1vcGVuJzogcHVsbGRvd24ub3BlbiB9XCIpXG4gICAgbGkoXG4gICAgICB2LWZvcj1cIihsYWJlbCwgdmFsdWUpIG9mIGl0ZW1zXCJcbiAgICApXG4gICAgICBhKFxuICAgICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKHZhbHVlKVwiXG4gICAgICAgIEBtb3VzZXVwPVwib25QdWxsZG93bk1vdXNlVXAodmFsdWUpXCJcbiAgICAgICkge3sgbGFiZWwgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFB1bGxkb3duTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1B1bGxkb3duTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0FjY291bnQnLCB7XG4gIG1peGluczogW1B1bGxkb3duTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGl0ZW1zOiB7XG4gICAgICAgIHNldHRpbmdzOiAnU2V0dGluZ3MnLFxuICAgICAgICBsb2dvdXQ6ICdMb2dvdXQnXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvblB1bGxkb3duU2VsZWN0KHZhbHVlKSB7XG4gICAgICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgICAgIGNhc2UgJ2xvZ291dCc6XG4gICAgICAgICAgdGhpcy5yb290Q29tcG9uZW50LmxvZ291dCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnc2V0dGluZ3MnOlxuICAgICAgICAgIGNvbnNvbGUuaW5mbygnVE9ETzogSW1wbGVtZW50IFNldHRpbmdzJylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWFjY291bnQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcblxuICAuZGl0by1wdWxsZG93biB7XG4gICAgdG9wOiAkcHVsbGRvd24tcGFkZGluZy12ZXI7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuY29tcG9uZW50KFxuICB2LWlmPVwib3B0aW9ucz8udGV4dCAhPSBudWxsXCJcbiAgOmlzPVwidGFnTmFtZVwiXG4gIDpjbGFzcz1cImNsYXNzZXNcIlxuICA6c3R5bGU9XCJzdHlsZXNcIlxuKSB7eyBvcHRpb25zLnRleHQgfX1cbmNvbXBvbmVudChcbiAgdi1lbHNlLWlmPVwib3B0aW9ucz8uaHRtbCAhPSBudWxsXCJcbiAgOmlzPVwidGFnTmFtZVwiXG4gIDpjbGFzcz1cImNsYXNzZXNcIlxuICA6c3R5bGU9XCJzdHlsZXNcIlxuICB2LWh0bWw9XCJvcHRpb25zLmh0bWxcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9FbGVtZW50Jywge1xuICBwcm9wczoge1xuICAgIHRhZzogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdzcGFuJyB9LFxuICAgIGNvbnRlbnQ6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBvcHRpb25zKCkge1xuICAgICAgY29uc3QgeyBjb250ZW50IH0gPSB0aGlzXG4gICAgICByZXR1cm4gY29udGVudCAhPSBudWxsXG4gICAgICAgID8gaXNPYmplY3QoY29udGVudClcbiAgICAgICAgICA/IGNvbnRlbnRcbiAgICAgICAgICA6IHsgdGV4dDogY29udGVudCB9XG4gICAgICAgIDogbnVsbFxuICAgIH0sXG5cbiAgICB0YWdOYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy50YWcgfHwgdGhpcy50YWdcbiAgICB9LFxuXG4gICAgY2xhc3NlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmFzT2JqZWN0KHRoaXMuJGF0dHJzLmNsYXNzKSxcbiAgICAgICAgLi4uYXNPYmplY3QodGhpcy5vcHRpb25zLmNsYXNzKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdHlsZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5hc09iamVjdCh0aGlzLiRhdHRycy5zdHlsZSksXG4gICAgICAgIC4uLmFzT2JqZWN0KHRoaXMub3B0aW9ucy5zdHlsZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG5cbmZ1bmN0aW9uIGFzT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiBhc0FycmF5KHZhbHVlKS5yZWR1Y2UoKG9iamVjdCwgZW50cnkpID0+IHtcbiAgICBpZiAoaXNTdHJpbmcoZW50cnkpKSB7XG4gICAgICBvYmplY3RbZW50cnldID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoZW50cnkpKSB7XG4gICAgICBPYmplY3QuYXNzaWduKG9iamVjdCwgZW50cnkpXG4gICAgfVxuICAgIHJldHVybiBvYmplY3RcbiAgfSwge30pXG59XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5jb21wb25lbnQuZGl0by1sYWJlbChcbiAgdi1pZj1cInRleHQgfHwgY29sbGFwc2libGVcIlxuICA6aXM9XCJ0YWdcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBpc0FjdGl2ZSB9XCJcbilcbiAgLmRpdG8tY2hldnJvbihcbiAgICB2LWlmPVwiY29sbGFwc2libGVcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6ICFjb2xsYXBzZWQgfVwiXG4gIClcbiAgLmRpdG8tbGFiZWxfX2lubmVyKFxuICAgIHYtaWY9XCJ0ZXh0IHx8IHByZWZpeGVzLmxlbmd0aCA+IDAgfHwgc3VmZml4ZXMubGVuZ3RoID4gMFwiXG4gIClcbiAgICAuZGl0by1sYWJlbF9fcHJlZml4KFxuICAgICAgdi1pZj1cInByZWZpeGVzLmxlbmd0aCA+IDBcIlxuICAgIClcbiAgICAgIERpdG9FbGVtZW50KFxuICAgICAgICB2LWZvcj1cIihwcmVmaXgsIGluZGV4KSBvZiBwcmVmaXhlc1wiXG4gICAgICAgIDprZXk9XCJgcHJlZml4LSR7aW5kZXh9YFwiXG4gICAgICAgIHRhZz1cInNwYW5cIlxuICAgICAgICA6Y29udGVudD1cInByZWZpeFwiXG4gICAgICApXG4gICAgbGFiZWwoXG4gICAgICB2LWlmPVwidGV4dFwiXG4gICAgICA6Zm9yPVwiZGF0YVBhdGhcIlxuICAgICAgdi1odG1sPVwidGV4dFwiXG4gICAgKVxuICAgIC5kaXRvLWxhYmVsX19zdWZmaXgoXG4gICAgICB2LWlmPVwic3VmZml4ZXMubGVuZ3RoID4gMFwiXG4gICAgKVxuICAgICAgRGl0b0VsZW1lbnQoXG4gICAgICAgIHYtZm9yPVwiKHN1ZmZpeCwgaW5kZXgpIG9mIHN1ZmZpeGVzXCJcbiAgICAgICAgOmtleT1cImBzdWZmaXgtJHtpbmRleH1gXCJcbiAgICAgICAgdGFnPVwic3BhblwiXG4gICAgICAgIDpjb250ZW50PVwic3VmZml4XCJcbiAgICAgIClcbiAgICAuZGl0by1pbmZvKFxuICAgICAgdi1pZj1cImluZm9cIlxuICAgICAgOmRhdGEtaW5mbz1cImluZm9cIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9MYWJlbCcsIHtcbiAgZW1pdHM6IFsnb3BlbiddLFxuXG4gIHByb3BzOiB7XG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGNvbGxhcHNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgaW5mbzogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdGFnKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29sbGFwc2libGUgPyAnYScgOiAnZGl2J1xuICAgIH0sXG5cbiAgICB0ZXh0KCkge1xuICAgICAgY29uc3QgeyBsYWJlbCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KGxhYmVsKSA/IGxhYmVsPy50ZXh0IDogbGFiZWxcbiAgICB9LFxuXG4gICAgcHJlZml4ZXMoKSB7XG4gICAgICByZXR1cm4gYXNBcnJheSh0aGlzLmxhYmVsPy5wcmVmaXgpXG4gICAgfSxcblxuICAgIHN1ZmZpeGVzKCkge1xuICAgICAgcmV0dXJuIGFzQXJyYXkodGhpcy5sYWJlbD8uc3VmZml4KVxuICAgIH0sXG5cbiAgICBhdHRyaWJ1dGVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29sbGFwc2libGUgPyB7IG9uQ2xpY2s6IHRoaXMub25DbGljayB9IDoge31cbiAgICB9LFxuXG4gICAgaXNBY3RpdmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9PT0gdGhpc1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25DbGljaygpIHtcbiAgICAgIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPSB0aGlzXG4gICAgICB0aGlzLiRlbWl0KCdvcGVuJywgdGhpcy5jb2xsYXBzZWQpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tbGFiZWwge1xuICAkc2VsZjogJjtcblxuICAvLyBGb3IgYnV0dG9ucyBhbmQgY2hldnJvbiB0byBhbGlnbiByaWdodDpcbiAgZGlzcGxheTogZmxleDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAvLyBWZXJ0aWNhbGx5IGNlbnRlciBhbGwgaXRlbXMgaW4gdGhlIGxhYmVsLCBlLmcuIGNoZXZyb24sIGVkaXQtYnV0dG9ucy5cbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgbWluLWhlaWdodDogJGlucHV0LWhlaWdodDtcbiAgbWFyZ2luLXJpZ2h0OiAkZm9ybS1zcGFjaW5nLWhhbGY7IC8vIFdoZW4gaW5saW5lZC5cblxuICAmOmhhcyguZGl0by1zY2hlbWEtaGVhZGVyKSB7XG4gICAgLy8gVGhlIGNvbnRhaW5lcidzIGxhYmVsIGlzIHVzZWQgYXMgdGVsZXBvcnQgZm9yIGEgbmVzdGVkIHNlY3Rpb24gb3Igb2JqZWN0XG4gICAgLy8gbGFiZWwuIEhpZGUgYCZfX2lubmVyYCwgYXMgaXQgaXMgYmUgZHVwbGljYXRlZCBpbnNpZGUgdGhlIG5lc3RlZCBsYWJlbC5cbiAgICA+ICN7JHNlbGZ9X19pbm5lciB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxuXG4gICY6bm90KDpoYXMoKyAuZGl0by10YWJzKSkge1xuICAgIC8vIFRha2UgZnVsbCB3aWR0aCBidXQgb25seSBpZiB0aGVyZSBhcmVuJ3QgYWxzbyB0YWJzIHRvIGJlIGNlbnRlcmVkLlxuICAgIGZsZXg6IDE7XG4gIH1cblxuICAmX19pbm5lciB7XG4gICAgZmxleDogMSAwIDAlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICB9XG5cbiAgbGFiZWwge1xuICAgIGN1cnNvcjogaW5oZXJpdDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICBsaW5lLWhlaWdodDogJGlucHV0LWhlaWdodDtcbiAgfVxuXG4gIC8vIEZpeCBhbGlnbm1lbnQgb2Ygc3ViIGFuZCBzdXAgZWxlbWVudHMgaW4gbGFiZWwgY29udGVudC5cbiAgc3ViLFxuICBzdXAge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG4gIH1cblxuICBzdWIge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSg0cHgpO1xuICB9XG5cbiAgc3VwIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTRweCk7XG4gIH1cblxuICAmX19wcmVmaXgsXG4gICZfX3N1ZmZpeCB7XG4gICAgZmxleDogMTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbGluZS1oZWlnaHQ6ICRpbnB1dC1oZWlnaHQ7XG5cbiAgICAvLyBGb3IgZWxsaXBzaXMgdG8gd29yayBvbiBwcmVmaXggYW5kIHN1ZmZpeCB3aXRoIGZsZXggbGF5b3V0LCB3ZSBuZWVkIHRvXG4gICAgLy8gdXNlIGEgbmVzdGVkIGFic29sdXRlbHkgcG9zaXRpb25lZCBzcGFuLlxuXG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIGNvbnRlbnQ6ICdcXDIwMGInOyAvLyB6ZXJvLXdpZHRoIHNwYWNlIHRvIGtlZXAgY29udGFpbmVyIGZyb20gY29sbGFwc2luZy5cbiAgICB9XG5cbiAgICBzcGFuIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGluc2V0OiAwO1xuICAgIH1cbiAgfVxuXG4gIGxhYmVsLFxuICAmX19wcmVmaXggc3BhbixcbiAgJl9fc3VmZml4IHNwYW4ge1xuICAgIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuICAgIEBpbmNsdWRlIGVsbGlwc2lzO1xuXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgfVxuXG4gICZfX3ByZWZpeCArIGxhYmVsLFxuICBsYWJlbCArICZfX3N1ZmZpeCB7XG4gICAgJixcbiAgICBzcGFuIHtcbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIGNvbnRlbnQ6ICdcXGEwJzsgLy8gJm5ic3A7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tYnV0dG9ucyB7XG4gICAgLy8gTW92ZSB0aGUgbGFiZWwgcGFkZGluZyBpbnNpZGUgLmRpdG8tYnV0dG9ucywgc28gdGhhdCBpdCBjYXB0dXJlcyBhbGxcbiAgICAvLyBuZWFyIG1vdXNlIGV2ZW50czpcbiAgICBtYXJnaW46IGNhbGMoLTEgKiB2YXIoLS1sYWJlbC1wYWRkaW5nKSk7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgcGFkZGluZzogdmFyKC0tbGFiZWwtcGFkZGluZyk7XG4gIH1cblxuICAmLmRpdG8td2lkdGgtZmlsbCB7XG4gICAgd2lkdGg6IDEwMCU7XG5cbiAgICAvLyBJbiBvcmRlciBmb3IgZWxsaXBzaXMgdG8gd29yayBvbiBsYWJlbHMgd2l0aG91dCBhZmZlY3Rpbmcgb3RoZXIgbGF5b3V0LFxuICAgIC8vIHdlIG5lZWQgdG8gcG9zaXRpb24gaXQgYWJzb2x1dGVseSBpbnNpZGUgaXRzIGNvbnRhaW5lci4gQnV0IHdlIGNhbiBvbmx5XG4gICAgLy8gZG8gc28gaWYgdGhlcmUgaXMndCBhbHNvIGEgY2hldnJvbiBvciBvdGhlciBVWCBlbGVtZW50cyBiZXNpZGVzIGl0LlxuICAgICY6aGFzKD4gI3skc2VsZn1fX2lubmVyOm9ubHktY2hpbGQpIHtcbiAgICAgIGZsZXg6IDE7IC8vIFdoZW4gaW4gYC5kaXRvLXNjaGVtYS1oZWFkZXJgLlxuXG4gICAgICA+ICN7JHNlbGZ9X19pbm5lciB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgaW5zZXQ6IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgLy8gU2luY2UgPGxhYmVsPiB1c2VzIGBwb3NpdGlvbjogYWJzb2x1dGVgLCBzZXQgY29udGVudCB0byBhIHplcm8td2lkdGhcbiAgICAgIC8vIHNwYWNlIG9uIGl0cyBwYXJlbnQgdG8gZW5mb3JjZSB0aGUgcmlnaHQgdGV4dCBoZWlnaHQgaW4gdGhlIGNvbnRhaW5lclxuICAgICAgY29udGVudDogJ1xcMjAwYic7IC8vIHplcm8td2lkdGggc3BhY2U7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8taW5mbyB7XG4gICAgbWFyZ2luLWxlZnQ6IDAuMzVlbTtcbiAgfVxufVxuXG5hLmRpdG8tbGFiZWwge1xuICAmOmhvdmVyIHtcbiAgICAuZGl0by1jaGV2cm9uIHtcbiAgICAgIGNvbG9yOiAkY29sb3ItZGFya2VyO1xuICAgIH1cbiAgfVxuXG4gICY6Zm9jdXM6bm90KDphY3RpdmUsIC5kaXRvLWFjdGl2ZSkge1xuICAgIC5kaXRvLWNoZXZyb24ge1xuICAgICAgLXdlYmtpdC10ZXh0LXN0cm9rZTogJGJvcmRlci13aWR0aCAkY29sb3ItYWN0aXZlO1xuICAgIH1cbiAgICAvLyBEaXNwbGF5IGxhYmVscyBpbiBjb21wYWN0IHNjaGVtYSBhcyBpbmxpbmUtYmxvY2tzLCB0byBhbGxvdyBjb21wYWN0XG4gICAgLy8gbGF5b3V0cyB3aXRoIGB3aWR0aDogJ2F1dG8nYCBlbGVtZW50czpcbiAgICAvLyBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byBjb250cm9sIHRoaXMgYmVoYXZpb3IuXG4gIH1cbn1cblxuLmRpdG8tc2NoZW1hLWNvbXBhY3Qge1xuICA+IC5kaXRvLXNjaGVtYS1jb250ZW50IHtcbiAgICA+IC5kaXRvLXBhbmUge1xuICAgICAgPiAuZGl0by1jb250YWluZXI6bm90KC5kaXRvLWNvbnRhaW5lci0tbGFiZWwtdmVydGljYWwpIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1mbG93OiByb3cgd3JhcDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQge1xuICBnZXRJdGVtRm9ybVNjaGVtYSxcbiAgZ2V0SXRlbUlkLFxuICBnZXRJdGVtVWlkLFxuICBpc0xpc3RTb3VyY2Vcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nLCBpc0Z1bmN0aW9uIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWV0aG9kczoge1xuICAgIGdldEl0ZW1Gb3JtU2NoZW1hLFxuXG4gICAgZ2V0SXRlbVVpZCxcblxuICAgIGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0sIGluZGV4ID0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNUcmFuc2llbnQgJiYgaW5kZXggIT09IG51bGxcbiAgICAgICAgPyBTdHJpbmcoaW5kZXgpXG4gICAgICAgIDogZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSlcbiAgICB9LFxuXG4gICAgZ2V0SXRlbURhdGFQYXRoKHNvdXJjZVNjaGVtYSwgaW5kZXgpIHtcbiAgICAgIGxldCB7IGRhdGFQYXRoIH0gPSB0aGlzXG4gICAgICBpZiAoc291cmNlU2NoZW1hICE9PSB0aGlzLnNjaGVtYSkge1xuICAgICAgICBkYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBzb3VyY2VTY2hlbWEubmFtZSlcbiAgICAgIH1cbiAgICAgIGlmIChpbmRleCAhPSBudWxsKSB7XG4gICAgICAgIGRhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIGluZGV4KVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGFQYXRoXG4gICAgfSxcblxuICAgIGdldEl0ZW1TdG9yZShzb3VyY2VTY2hlbWEsIGl0ZW0sIGluZGV4KSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDaGlsZFN0b3JlKHRoaXMuZ2V0SXRlbVVpZChzb3VyY2VTY2hlbWEsIGl0ZW0pLCBpbmRleClcbiAgICB9LFxuXG4gICAgcmVtb3ZlSXRlbVN0b3JlKHNvdXJjZVNjaGVtYSwgaXRlbSwgaW5kZXgpIHtcbiAgICAgIHRoaXMucmVtb3ZlQ2hpbGRTdG9yZSh0aGlzLmdldEl0ZW1VaWQoc291cmNlU2NoZW1hLCBpdGVtKSwgaW5kZXgpXG4gICAgfSxcblxuICAgIGZpbmRJdGVtSWRJbmRleChzb3VyY2VTY2hlbWEsIGRhdGEsIGl0ZW1JZCkge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmlzVHJhbnNpZW50XG4gICAgICAgID8gLy8gRm9yIHRyYW5zaWVudCBkYXRhLCB0aGUgaW5kZXggaXMgdXNlZCBhcyB0aGUgaWRcbiAgICAgICAgICBpdGVtSWRcbiAgICAgICAgOiBkYXRhPy5maW5kSW5kZXgoXG4gICAgICAgICAgICAoaXRlbSwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgdGhpcy5nZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtLCBpbmRleCkgPT09IGl0ZW1JZFxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgIHJldHVybiBpbmRleCAhPT0gLTEgPyBpbmRleCA6IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0SXRlbUxhYmVsKHNvdXJjZVNjaGVtYSwgaXRlbSwge1xuICAgICAgaW5kZXggPSBudWxsLFxuICAgICAgZXh0ZW5kZWQgPSBmYWxzZSxcbiAgICAgIGFzT2JqZWN0ID0gZmFsc2VcbiAgICB9ID0ge30pIHtcbiAgICAgIGNvbnN0IHsgaXRlbUxhYmVsIH0gPSBzb3VyY2VTY2hlbWFcbiAgICAgIGlmICghaXRlbSB8fCAhZXh0ZW5kZWQgJiYgaXRlbUxhYmVsID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuXG4gICAgICBsZXQgZGF0YVBhdGhcbiAgICAgIGNvbnN0IGdldERhdGFQYXRoID0gKCkgPT5cbiAgICAgICAgKGRhdGFQYXRoID8/PSB0aGlzLmdldEl0ZW1EYXRhUGF0aChzb3VyY2VTY2hlbWEsIGluZGV4KSlcblxuICAgICAgbGV0IGZvcm1MYWJlbFxuICAgICAgY29uc3QgZ2V0Rm9ybUxhYmVsID0gKCkgPT5cbiAgICAgICAgKGZvcm1MYWJlbCA/Pz0gdGhpcy5nZXRMYWJlbChcbiAgICAgICAgICBnZXRJdGVtRm9ybVNjaGVtYShzb3VyY2VTY2hlbWEsIGl0ZW0sIHRoaXMuY29udGV4dClcbiAgICAgICAgKSlcblxuICAgICAgbGV0IHRleHRcbiAgICAgIGxldCBwcmVmaXhcbiAgICAgIGxldCBzdWZmaXhcbiAgICAgIGlmIChpc0Z1bmN0aW9uKGl0ZW1MYWJlbCkpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSBpdGVtTGFiZWwuY2FsbChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgICBuZXN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICAgICAgaW5kZXgsXG5cbiAgICAgICAgICAgIGdldCBkYXRhUGF0aCgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldERhdGFQYXRoKClcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGdldCBmb3JtTGFiZWwoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRGb3JtTGFiZWwoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgaWYgKGlzT2JqZWN0KGxhYmVsKSkge1xuICAgICAgICAgIDsoeyB0ZXh0LCBwcmVmaXgsIHN1ZmZpeCB9ID0gbGFiZWwpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGV4dCA9IGxhYmVsXG4gICAgICAgIH1cbiAgICAgICAgLy8gSXQncyB1cCB0byBgaXRlbUxhYmVsKClgIGVudGlyZWx5IHRvIHByb2R1Y2UgdGhlIGxhYmVsOlxuICAgICAgICBleHRlbmRlZCA9IGZhbHNlXG4gICAgICB9IGVsc2UgaWYgKGlzU3RyaW5nKGl0ZW1MYWJlbCkgJiYgIShpdGVtTGFiZWwgaW4gaXRlbSkpIHtcbiAgICAgICAgLy8gYGl0ZW1MYWJlbGAgY2FuIGJlIGJvdGggYSBrZXksIG9yIHNpbXBseSBhIGxhYmVsLlxuICAgICAgICB0ZXh0ID0gaXRlbUxhYmVsXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBMb29rIHVwIHRoZSBuYW1lIG9uIHRoZSBpdGVtLCBieSB0aGVzZSBydWxlczpcbiAgICAgICAgLy8gMS4gSWYgYGl0ZW1MYWJlbGAgaXMgYSBzdHJpbmcsIHVzZSBpdCBhcyB0aGUgcHJvcGVydHkga2V5XG4gICAgICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgdGhlcmUgYXJlIGNvbHVtbnMsIHVzZSB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0XG4gICAgICAgIC8vIDMuIE90aGVyd2lzZSwgc2VlIGlmIHRoZSBpdGVtIGhhcyBhIHByb3BlcnR5IG5hbWVkICduYW1lJ1xuICAgICAgICBjb25zdCB7IGNvbHVtbnMgfSA9IHNvdXJjZVNjaGVtYVxuICAgICAgICBjb25zdCBrZXkgPSAoXG4gICAgICAgICAgaXNTdHJpbmcoaXRlbUxhYmVsKSAmJiBpdGVtTGFiZWwgfHxcbiAgICAgICAgICBpc0xpc3RTb3VyY2Uoc291cmNlU2NoZW1hKSAmJiBjb2x1bW5zICYmIE9iamVjdC5rZXlzKGNvbHVtbnMpWzBdIHx8XG4gICAgICAgICAgJ25hbWUnXG4gICAgICAgIClcbiAgICAgICAgdGV4dCA9IGl0ZW1ba2V5XVxuICAgICAgfVxuICAgICAgY29uc3QgaGFkTGFiZWwgPSAhIXRleHRcbiAgICAgIC8vIElmIG5vIGxhYmVsIHdhcyBmb3VuZCBzbyBmYXIsIHRyeSB0byBwcm9kdWNlIG9uZSBmcm9tIHRoZSBpbmRleC5cbiAgICAgIGlmICh0ZXh0ID09IG51bGwpIHtcbiAgICAgICAgLy8gQWx3YXlzIHVzZSBleHRlbmRlZCBzdHlsZSB3aGVuIGF1dG8tZ2VuZXJhdGluZyBsYWJlbHMgZnJvbSBpbmRleC9pZDpcbiAgICAgICAgZXh0ZW5kZWQgPSB0cnVlXG4gICAgICAgIHRleHQgPVxuICAgICAgICAgIGlzTGlzdFNvdXJjZShzb3VyY2VTY2hlbWEpICYmIGluZGV4ICE9PSBudWxsXG4gICAgICAgICAgICA/ICh0ZXh0ID0gYCR7aW5kZXggKyAxfWApXG4gICAgICAgICAgICA6ICcnXG4gICAgICB9XG4gICAgICBpZiAoZXh0ZW5kZWQpIHtcbiAgICAgICAgY29uc3QgZm9ybUxhYmVsID0gZ2V0Rm9ybUxhYmVsKClcbiAgICAgICAgaWYgKGZvcm1MYWJlbCkge1xuICAgICAgICAgIC8vIElmIGEgbGFiZWwgd2FzIHByb3ZpZGVkLCBwdXQgaW4gcXVvdGVzIHdoZW4gcHJlZml4ZWQgd2l0aCB0aGVcbiAgICAgICAgICAvLyBmb3JtIGxhYmVsIGZvciB0aGUgZXh0ZW5kZWQgc3R5bGU6XG4gICAgICAgICAgdGV4dCA9IGAke2Zvcm1MYWJlbH0gJHtoYWRMYWJlbCA/IGAnJHt0ZXh0fSdgIDogdGV4dH1gXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhc09iamVjdFxuICAgICAgICA/IHRleHQgfHwgcHJlZml4IHx8IHN1ZmZpeFxuICAgICAgICAgID8geyB0ZXh0LCBwcmVmaXgsIHN1ZmZpeCB9XG4gICAgICAgICAgOiBudWxsXG4gICAgICAgIDogdGV4dFxuICAgIH1cbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnNsb3QobmFtZT1cImJlZm9yZVwiKVxuLmRpdG8tc2NoZW1hKFxuICA6Y2xhc3M9XCJ7ICdkaXRvLXNjcm9sbC1wYXJlbnQnOiBzY3JvbGxhYmxlLCAnZGl0by1zY2hlbWEtLW9wZW4nOiBvcGVuZWQgfVwiXG4gIHYtYmluZD1cIiRhdHRyc1wiXG4pXG4gIFRlbGVwb3J0KFxuICAgIHYtaWY9XCJpc1BvcHVsYXRlZCAmJiBwYW5lbEVudHJpZXMubGVuZ3RoID4gMFwiXG4gICAgdG89XCIuZGl0by1zaWRlYmFyX190ZWxlcG9ydFwiXG4gIClcbiAgICBEaXRvUGFuZWxzKFxuICAgICAgdi1pZj1cImFjdGl2ZVwiXG4gICAgICA6cGFuZWxzPVwicGFuZWxFbnRyaWVzXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiAgVGVsZXBvcnQoXG4gICAgdi1pZj1cImhhc0hlYWRlclwiXG4gICAgOnRvPVwiaGVhZGVyVGVsZXBvcnRcIlxuICAgIDpkaXNhYmxlZD1cIiFoZWFkZXJUZWxlcG9ydFwiXG4gIClcbiAgICAuZGl0by1zY2hlbWEtaGVhZGVyKFxuICAgICAgdi1pZj1cImFjdGl2ZVwiXG4gICAgKVxuICAgICAgRGl0b0xhYmVsKFxuICAgICAgICB2LWlmPVwiaGFzTGFiZWxcIlxuICAgICAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgICA6Y29sbGFwc2VkPVwiIW9wZW5lZFwiXG4gICAgICAgIEBvcGVuPVwib25PcGVuXCJcbiAgICAgIClcbiAgICAgIFRyYW5zaXRpb24oXG4gICAgICAgIHYtaWY9XCJ0YWJzXCJcbiAgICAgICAgbmFtZT1cImRpdG8tZmFkZVwiXG4gICAgICApXG4gICAgICAgIERpdG9UYWJzKFxuICAgICAgICAgIHYtaWY9XCJvcGVuZWRcIlxuICAgICAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZFRhYlwiXG4gICAgICAgICAgOnRhYnM9XCJ0YWJzXCJcbiAgICAgICAgKVxuICAgICAgRGl0b0NsaXBib2FyZChcbiAgICAgICAgdi1pZj1cImNsaXBib2FyZFwiXG4gICAgICAgIDpjbGlwYm9hcmQ9XCJjbGlwYm9hcmRcIlxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIClcbiAgICAgIHNsb3QobmFtZT1cImVkaXQtYnV0dG9uc1wiKVxuICBUcmFuc2l0aW9uSGVpZ2h0KDplbmFibGVkPVwiaW5saW5lZFwiKVxuICAgIC5kaXRvLXNjaGVtYS1jb250ZW50KFxuICAgICAgdi1pZj1cIm9wZW5lZFwiXG4gICAgICByZWY9XCJjb250ZW50XCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tc2Nyb2xsJzogc2Nyb2xsYWJsZSB9XCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1pZj1cImhhc1RhYnNcIlxuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWZvcj1cIih0YWJTY2hlbWEsIHRhYikgaW4gdGFic1wiXG4gICAgICAgICAgOmtleT1cInRhYlwiXG4gICAgICAgIClcbiAgICAgICAgICAvLy0gVE9ETzogU3dpdGNoIHRvIHYtaWYgaW5zdGVhZCBvZiB2LXNob3csIG9uY2UgdmFsaWRhdGlvbiBpc1xuICAgICAgICAgIC8vLSBkZWNvdXBsZWQgZnJvbSBjb21wb25lbnRzLlxuICAgICAgICAgIERpdG9QYW5lLmRpdG8tcGFuZV9fdGFiKFxuICAgICAgICAgICAgdi1zaG93PVwic2VsZWN0ZWRUYWIgPT09IHRhYlwiXG4gICAgICAgICAgICByZWY9XCJ0YWJzXCJcbiAgICAgICAgICAgIDp0YWI9XCJ0YWJcIlxuICAgICAgICAgICAgOnNjaGVtYT1cInRhYlNjaGVtYVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICAgIDpwYWRkaW5nPVwicGFkZGluZ1wiXG4gICAgICAgICAgICA6c2luZ2xlPVwiIWlubGluZWQgJiYgIWhhc01haW5QYW5lXCJcbiAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICAgICAgICAgIDphY2N1bXVsYXRlZEJhc2lzPVwiYWNjdW11bGF0ZWRCYXNpc1wiXG4gICAgICAgICAgKVxuICAgICAgRGl0b1BhbmUuZGl0by1wYW5lX19tYWluKFxuICAgICAgICB2LWlmPVwiaGFzTWFpblBhbmVcIlxuICAgICAgICByZWY9XCJjb21wb25lbnRzXCJcbiAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6cGFkZGluZz1cInBhZGRpbmdcIlxuICAgICAgICA6c2luZ2xlPVwiIWlubGluZWQgJiYgIWhhc1RhYnNcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICAgICAgOmFjY3VtdWxhdGVkQmFzaXM9XCJhY2N1bXVsYXRlZEJhc2lzXCJcbiAgICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIHYtaWY9XCIhaW5saW5lZCAmJiBpc1BvcHVsYXRlZFwiXG4gICAgICAgIG5hbWU9XCJidXR0b25zXCJcbiAgICAgIClcbiAgc2xvdChcbiAgICB2LWlmPVwiaW5saW5lZCAmJiAhaGFzSGVhZGVyXCJcbiAgICBuYW1lPVwiZWRpdC1idXR0b25zXCJcbiAgKVxuc2xvdChuYW1lPVwiYWZ0ZXJcIilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQge1xuICBpc09iamVjdCxcbiAgaXNBcnJheSxcbiAgaXNGdW5jdGlvbixcbiAgaXNSZWdFeHAsXG4gIGVxdWFscyxcbiAgcGFyc2VEYXRhUGF0aCxcbiAgbm9ybWFsaXplRGF0YVBhdGgsXG4gIGxhYmVsaXplXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBUcmFuc2l0aW9uSGVpZ2h0IH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IENvbnRleHRNaXhpbiBmcm9tICcuLi9taXhpbnMvQ29udGV4dE1peGluLmpzJ1xuaW1wb3J0IEl0ZW1NaXhpbiBmcm9tICcuLi9taXhpbnMvSXRlbU1peGluLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHtcbiAgZ2V0TmFtZWRTY2hlbWFzLFxuICBnZXRQYW5lbEVudHJpZXMsXG4gIHNldERlZmF1bHRWYWx1ZXMsXG4gIHByb2Nlc3NEYXRhLFxuICBpc0VtcHR5U2NoZW1hLFxuICBpc05lc3RlZFxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciwgZ2V0U3RvcmVBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9TY2hlbWEnLCB7XG4gIG1peGluczogW0NvbnRleHRNaXhpbiwgSXRlbU1peGluXSxcbiAgY29tcG9uZW50czogeyBUcmFuc2l0aW9uSGVpZ2h0IH0sXG4gIGluaGVyaXRBdHRyczogZmFsc2UsXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHNjaGVtYUNvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBpbmplY3Q6IFtcbiAgICAnJHNjaGVtYVBhcmVudENvbXBvbmVudCdcbiAgXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgLy8gYGRhdGFTY2hlbWFgIGlzIG9ubHkgcHJvdmlkZWQgZm9yIHBhbmVscywgd2hlcmUgdGhlIHBhbmVsIHNjaGVtYVxuICAgIC8vIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBkYXRhIHNjaGVtYSBmb3IgcGFuZWxzIHdpdGhvdXQgb3duIGRhdGEuXG4gICAgZGF0YVNjaGVtYTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IHByb3BzID0+IHByb3BzLnNjaGVtYSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHBhZGRpbmc6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgYWN0aXZlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBpbmxpbmVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHNjcm9sbGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBoYXNPd25EYXRhOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZ2VuZXJhdGVMYWJlbHM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBsYWJlbE5vZGU6IHsgdHlwZTogSFRNTEVsZW1lbnQsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBhY2N1bXVsYXRlZEJhc2lzOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICBjb25zdCB7IGRhdGEgfSA9IHRoaXMuc2NoZW1hXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIEFsbG93IHNjaGVtYSB0byBwcm92aWRlIG1vcmUgZGF0YSB0aHJvdWdoIGBzY2hlbWEuZGF0YWAsIHZ1ZS1zdHlsZTpcbiAgICAgIC4uLihcbiAgICAgICAgZGF0YSAmJiBpc0Z1bmN0aW9uKGRhdGEpXG4gICAgICAgICAgPyBkYXRhKHRoaXMuY29udGV4dClcbiAgICAgICAgICA6IGRhdGFcbiAgICAgICksXG4gICAgICBzZWxlY3RlZFRhYjogbnVsbCxcbiAgICAgIGNvbXBvbmVudHNSZWdpc3RyeToge30sXG4gICAgICBwYW5lc1JlZ2lzdHJ5OiB7fSxcbiAgICAgIHBhbmVsc1JlZ2lzdHJ5OiB7fSxcbiAgICAgIHNjcm9sbFBvc2l0aW9uczoge31cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBuZXN0ZWQoKSB7XG4gICAgICAvLyBGb3IgYENvbnRleHRNaXhpbmA6XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgc2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgLy8gT3ZlcnJpZGUgRGl0b01peGluJ3Mgc2NoZW1hQ29tcG9uZW50KCkgd2hpY2ggdXNlcyB0aGUgaW5qZWN0ZWQgdmFsdWUuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBwYXJlbnRTY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICAvLyBEb24ndCByZXR1cm4gdGhlIGFjdHVhbCBwYXJlbnQgc2NoZW1hIGlzIHRoaXMgc2NoZW1hIGhhbmRsZXMgaXRzIG93blxuICAgICAgLy8gZGF0YS4gVGhpcyBwcmV2ZW50cyBkZWxlZ2F0aW5nIGV2ZW50cyB0byB0aGUgcGFyZW50LCBhbmQgcmVnaXN0ZXJpbmdcbiAgICAgIC8vIGNvbXBvbmVudHMgd2l0aCB0aGUgcGFyZW50IHRoYXQgd291bGQgY2F1c2UgaXQgdG8gc2V0IGlzRGlydHkgZmxhZ3MuXG4gICAgICByZXR1cm4gdGhpcy5oYXNPd25EYXRhID8gbnVsbCA6IHRoaXMucGFyZW50Q29tcG9uZW50LnNjaGVtYUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBwYW5lbEVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gZ2V0UGFuZWxFbnRyaWVzKHRoaXMuc2NoZW1hLnBhbmVscywgdGhpcy5kYXRhUGF0aClcbiAgICB9LFxuXG4gICAgdGFicygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEudGFicylcbiAgICB9LFxuXG4gICAgZGVmYXVsdFRhYigpIHtcbiAgICAgIGxldCBmaXJzdCA9IG51bGxcbiAgICAgIGlmICh0aGlzLnRhYnMpIHtcbiAgICAgICAgY29uc3QgdGFicyA9IE9iamVjdC52YWx1ZXModGhpcy50YWJzKS5maWx0ZXIodGhpcy5zaG91bGRSZW5kZXJTY2hlbWEpXG4gICAgICAgIGZvciAoY29uc3QgeyBuYW1lLCBkZWZhdWx0VGFiIH0gb2YgdGFicykge1xuICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGRlZmF1bHRUYWIpID8gZGVmYXVsdFRhYih0aGlzLmNvbnRleHQpIDogZGVmYXVsdFRhYikge1xuICAgICAgICAgICAgcmV0dXJuIG5hbWVcbiAgICAgICAgICB9XG4gICAgICAgICAgZmlyc3QgPz89IG5hbWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZpcnN0XG4gICAgfSxcblxuICAgIHJvdXRlVGFiKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLmhhc2g/LnNsaWNlKDEpIHx8IG51bGxcbiAgICB9LFxuXG4gICAgY2xpcGJvYXJkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hPy5jbGlwYm9hcmQgPz8gbnVsbFxuICAgIH0sXG5cbiAgICBoYXNIZWFkZXIoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNMYWJlbCB8fCB0aGlzLmhhc1RhYnMgfHwgISF0aGlzLmNsaXBib2FyZFxuICAgIH0sXG5cbiAgICBoZWFkZXJUZWxlcG9ydCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzVG9wTGV2ZWxTY2hlbWFcbiAgICAgICAgPyAnLmRpdG8taGVhZGVyX190ZWxlcG9ydCdcbiAgICAgICAgOiB0aGlzLmxhYmVsTm9kZVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGVcbiAgICBwcm9jZXNzZWREYXRhKCkge1xuICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0RhdGEoeyB0YXJnZXQ6ICdzZXJ2ZXInLCBzY2hlbWFPbmx5OiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGNsaXBib2FyZERhdGE6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRGF0YSh7IHRhcmdldDogJ2NsaXBib2FyZCcsIHNjaGVtYU9ubHk6IHRydWUgfSlcbiAgICAgIH0sXG5cbiAgICAgIHNldChkYXRhKSB7XG4gICAgICAgIHRoaXMuc2V0RGF0YShkYXRhKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjbGlwYm9hcmRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xpcGJvYXJkRGF0YVxuICAgIH0sXG5cbiAgICBmb3JtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMYWJlbChcbiAgICAgICAgdGhpcy5nZXRJdGVtRm9ybVNjaGVtYSh0aGlzLnNvdXJjZVNjaGVtYSwgdGhpcy5kYXRhLCB0aGlzLmNvbnRleHQpXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzTmVzdGVkKCkge1xuICAgICAgcmV0dXJuIGlzTmVzdGVkKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBpc0RpcnR5KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc29tZUNvbXBvbmVudChpdCA9PiBpdC5pc0RpcnR5KVxuICAgIH0sXG5cbiAgICBpc1RvdWNoZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb21lQ29tcG9uZW50KGl0ID0+IGl0LmlzVG91Y2hlZClcbiAgICB9LFxuXG4gICAgaXNWYWxpZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmV2ZXJ5Q29tcG9uZW50KGl0ID0+IGl0LmlzVmFsaWQpXG4gICAgfSxcblxuICAgIGlzVmFsaWRhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZXZlcnlDb21wb25lbnQoaXQgPT4gaXQuaXNWYWxpZGF0ZWQpXG4gICAgfSxcblxuICAgIGhhc0Vycm9ycygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvbWVDb21wb25lbnQoaXQgPT4gaXQuaGFzRXJyb3JzKVxuICAgIH0sXG5cbiAgICBoYXNEYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIGhhc0xhYmVsKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5sYWJlbCB8fCB0aGlzLmNvbGxhcHNpYmxlXG4gICAgfSxcblxuICAgIGhhc1RhYnMoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnRhYnNcbiAgICB9LFxuXG4gICAgaXNUb3BMZXZlbFNjaGVtYSgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5pc05lc3RlZCAmJiAhdGhpcy5pbmxpbmVkXG4gICAgfSxcblxuICAgIGhhc1RvcExldmVsVGFicygpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc1RhYnMgJiYgdGhpcy5pc1RvcExldmVsU2NoZW1hXG4gICAgfSxcblxuICAgIGhhc01haW5QYW5lKCkge1xuICAgICAgY29uc3QgeyBjb21wb25lbnRzIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuICEhY29tcG9uZW50cyAmJiBPYmplY3Qua2V5cyhjb21wb25lbnRzKS5sZW5ndGggPiAwXG4gICAgfSxcblxuICAgIG9wZW5lZDogZ2V0U3RvcmVBY2Nlc3Nvcignb3BlbmVkJywge1xuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmNvbGxhcHNlZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29tcG9uZW50cygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuY29tcG9uZW50c1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lcygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMucGFuZXNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZWxzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5wYW5lbHNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgY29tcG9uZW50c0J5RGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbGlzdEVudHJpZXNCeURhdGFQYXRoKHRoaXMuY29tcG9uZW50c1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lc0J5RGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbGlzdEVudHJpZXNCeURhdGFQYXRoKHRoaXMucGFuZXNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZWxzQnlEYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9saXN0RW50cmllc0J5RGF0YVBhdGgodGhpcy5wYW5lbHNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgd2lkZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3dpZGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgc2NoZW1hOiB7XG4gICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICBoYW5kbGVyKHNjaGVtYSkge1xuICAgICAgICAvLyBGb3IgZm9ybXMgd2l0aCB0eXBlIGRlcGVuZGluZyBvbiBsb2FkZWQgZGF0YSwgd2UgbmVlZCB0byB3YWl0IGZvciB0aGVcbiAgICAgICAgLy8gYWN0dWFsIHNjaGVtYSB0byBiZWNvbWUgcmVhZHkgYmVmb3JlIHNldHRpbmcgdXAgc2NoZW1hIHJlbGF0ZWQgdGhpbmdzXG4gICAgICAgIGlmICghaXNFbXB0eVNjaGVtYShzY2hlbWEpKSB7XG4gICAgICAgICAgdGhpcy5zZXR1cFNjaGVtYSgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcm91dGVUYWI6IHtcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8zMzkzI2lzc3VlY29tbWVudC0xMTU4NDcwMTQ5XG4gICAgICBmbHVzaDogJ3Bvc3QnLFxuICAgICAgaGFuZGxlcihyb3V0ZVRhYikge1xuICAgICAgICAvLyBSZW1lbWJlciB0aGUgY3VycmVudCBwYXRoIHRvIGtub3cgaWYgdGFiIGNoYW5nZXMgc2hvdWxkIHN0aWxsIGJlXG4gICAgICAgIC8vIGhhbmRsZWQsIGJ1dCByZW1vdmUgdGhlIHRyYWlsaW5nIGAvY3JlYXRlYCBvciBgLzppZGAgZnJvbSBpdCBzbyB0aGF0XG4gICAgICAgIC8vIHRhYnMgaW5mb3JtcyB0aGF0IHN0YXkgb3BlbiBhZnRlciBjcmVhdGlvbiBzdGlsbCB3b3JrLlxuICAgICAgICBpZiAodGhpcy5oYXNUb3BMZXZlbFRhYnMpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFiID0gcm91dGVUYWJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZFRhYihuZXdUYWIsIG9sZFRhYikge1xuICAgICAgaWYgKHRoaXMuc2Nyb2xsYWJsZSkge1xuICAgICAgICBjb25zdCB7IGNvbnRlbnQgfSA9IHRoaXMuJHJlZnNcbiAgICAgICAgdGhpcy5zY3JvbGxQb3NpdGlvbnNbb2xkVGFiXSA9IGNvbnRlbnQuc2Nyb2xsVG9wXG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICBjb250ZW50LnNjcm9sbFRvcCA9IHRoaXMuc2Nyb2xsUG9zaXRpb25zW25ld1RhYl0gPz8gMFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaGFzVG9wTGV2ZWxUYWJzKSB7XG4gICAgICAgIGNvbnN0IHRhYiA9IHRoaXMuc2hvdWxkUmVuZGVyU2NoZW1hKHRoaXMudGFic1tuZXdUYWJdKVxuICAgICAgICAgID8gbmV3VGFiXG4gICAgICAgICAgOiB0aGlzLmRlZmF1bHRUYWJcbiAgICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2UoeyBoYXNoOiB0YWIgPyBgIyR7dGFifWAgOiBudWxsIH0pXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5oYXNFcnJvcnMpIHtcbiAgICAgICAgdGhpcy5yZXBvc2l0aW9uRXJyb3JzKClcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICAgIGlmICh0aGlzLnNjcm9sbGFibGUgJiYgdGhpcy53aWRlKSB7XG4gICAgICB0aGlzLmFwcFN0YXRlLnBhZ2VDbGFzcyA9ICdkaXRvLXBhZ2UtLXdpZGUnXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy5zZWxlY3RlZFRhYiA9IHRoaXMucm91dGVUYWIgfHwgdGhpcy5kZWZhdWx0VGFiXG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIHRoaXMuZW1pdEV2ZW50KCdkZXN0cm95JylcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgICBpZiAodGhpcy5zY3JvbGxhYmxlICYmIHRoaXMud2lkZSkge1xuICAgICAgdGhpcy5hcHBTdGF0ZS5wYWdlQ2xhc3MgPSBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXR1cFNjaGVtYSgpIHtcbiAgICAgIHRoaXMuc2V0dXBTY2hlbWFGaWVsZHMoKVxuICAgICAgLy8gRGVsZWdhdGUgY2hhbmdlIGV2ZW50cyB0aHJvdWdoIHRvIHBhcmVudCBzY2hlbWE6XG4gICAgICB0aGlzLmRlbGVnYXRlKCdjaGFuZ2UnLCB0aGlzLnBhcmVudFNjaGVtYUNvbXBvbmVudClcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdpbml0aWFsaXplJykgLy8gTm90IGAnY3JlYXRlJ2AsIHNpbmNlIHRoYXQncyBmb3IgZGF0YS5cbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLmNvbXBvbmVudHNCeURhdGFQYXRoLCBkYXRhUGF0aClcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50QnlEYXRhUGF0aChkYXRhUGF0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50c0J5TmFtZShkYXRhUGF0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXNCeU5hbWUodGhpcy5jb21wb25lbnRzQnlEYXRhUGF0aCwgZGF0YVBhdGgpXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudEJ5TmFtZShuYW1lKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnRzQnlOYW1lKG5hbWUpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50cyhkYXRhUGF0aE9yTmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXModGhpcy5jb21wb25lbnRzQnlEYXRhUGF0aCwgZGF0YVBhdGhPck5hbWUpXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudChkYXRhUGF0aE9yTmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50cyhkYXRhUGF0aE9yTmFtZSlbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRQYW5lbHNCeURhdGFQYXRoKGRhdGFQYXRoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllc0J5RGF0YVBhdGgodGhpcy5wYW5lbHNCeURhdGFQYXRoLCBkYXRhUGF0aClcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWxCeURhdGFQYXRoKGRhdGFQYXRoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRQYW5lbHNCeURhdGFQYXRoKGRhdGFQYXRoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldFBhbmVscyhkYXRhUGF0aE9yTmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXModGhpcy5wYW5lbHNCeURhdGFQYXRoLCBkYXRhUGF0aE9yTmFtZSlcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWwoZGF0YVBhdGhPck5hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFBhbmVscyhkYXRhUGF0aE9yTmFtZSlbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBzb21lQ29tcG9uZW50KGNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1BvcHVsYXRlZCAmJiB0aGlzLmNvbXBvbmVudHMuc29tZShjYWxsYmFjaylcbiAgICB9LFxuXG4gICAgZXZlcnlDb21wb25lbnQoY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLmlzUG9wdWxhdGVkICYmIHRoaXMuY29tcG9uZW50cy5ldmVyeShjYWxsYmFjaylcbiAgICB9LFxuXG4gICAgb25PcGVuKG9wZW4pIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdvcGVuJywgeyBjb250ZXh0OiB7IG9wZW4gfSB9KVxuICAgICAgLy8gUHJldmVudCBjbG9zaW5nIHRoZSBzY2hlbWEgd2l0aCBpbnZhbGlkIGRhdGEsIHNpbmNlIHRoZSBpbi1jb21wb25lbnRcbiAgICAgIC8vIHZhbGlkYXRpb24gd2lsbCBub3QgYmUgZXhlY3V0ZWQgb25jZSBpdCdzIGNsb3NlZC5cblxuICAgICAgLy8gVE9ETzogTW92ZSB2YWxpZGF0aW9uIG91dCBvZiBjb21wb25lbnRzLCB0byBzY2hlbWEsIGp1c3QgbGlrZVxuICAgICAgLy8gcHJvY2Vzc2luZywgYW5kIHVzZSBgc2hvd1ZhbGlkYXRpb25FcnJvcnMoKWAgZm9yIHRoZSByZXN1bHRpbmcgZXJyb3JzLFxuICAgICAgLy8gdGhlbiByZW1vdmUgdGhpcyByZXF1aXJlbWVudCwgc2luY2Ugd2UgY2FuIHZhbGlkYXRlIGNsb3NlZCBmb3JtcyBhbmRcbiAgICAgIC8vIHNjaGVtYXMgdGhlbi5cbiAgICAgIGlmICghdGhpcy5vcGVuZWQgfHwgb3BlbiB8fCB0aGlzLnZhbGlkYXRlQWxsKCkpIHtcbiAgICAgICAgdGhpcy5vcGVuZWQgPSBvcGVuXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uQ2hhbmdlKCkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2NoYW5nZScpXG4gICAgfSxcblxuICAgIHJlc2V0VmFsaWRhdGlvbigpIHtcbiAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMuY29tcG9uZW50cykge1xuICAgICAgICBjb21wb25lbnQucmVzZXRWYWxpZGF0aW9uKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xlYXJFcnJvcnMoKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmNvbXBvbmVudHMpIHtcbiAgICAgICAgY29tcG9uZW50LmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVwb3NpdGlvbkVycm9ycygpIHtcbiAgICAgIC8vIEZpcmUgYSBmYWtlIHNjcm9sbCBldmVudCB0byBmb3JjZSB0aGUgcmVwb3NpdGlvbmluZyBvZiBlcnJvciB0b29sdGlwcyxcbiAgICAgIC8vIGFzIG90aGVyd2lzZSB0aGV5IHNvbWV0aW1lcyBkb24ndCBzaG93IHVwIGluIHRoZSByaWdodCBwbGFjZSBpbml0aWFsbHlcbiAgICAgIC8vIHdoZW4gY2hhbmdpbmcgdGFicy5cbiAgICAgIGNvbnN0IHNjcm9sbENvbnRhaW5lciA9IHRoaXMuJHJlZnMuY29udGVudC5jbG9zZXN0KCcuZGl0by1zY3JvbGwnKVxuICAgICAgY29uc3QgZGlzcGF0Y2ggPSAoKSA9PiBzY3JvbGxDb250YWluZXIuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ3Njcm9sbCcpKVxuICAgICAgZGlzcGF0Y2goKVxuICAgICAgLy8gVGhpcyBpcyByZXF1aXJlZCB0byBoYW5kbGUgYCYtLWxhYmVsLXZlcnRpY2FsYCBiYXNlZCBsYXlvdXQgY2hhbmdlcy5cbiAgICAgIHNldFRpbWVvdXQoZGlzcGF0Y2gsIDApXG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy5vcGVuZWQgPSB0cnVlXG4gICAgICByZXR1cm4gdGhpcy5wYXJlbnRTY2hlbWFDb21wb25lbnQ/LmZvY3VzKClcbiAgICB9LFxuXG4gICAgdmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIGNvbnN0IHsgY29tcG9uZW50c0J5RGF0YVBhdGggfSA9IHRoaXNcbiAgICAgIGxldCBkYXRhUGF0aHNcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBjb25zdCBjaGVjayA9IGlzRnVuY3Rpb24obWF0Y2gpXG4gICAgICAgICAgPyBtYXRjaFxuICAgICAgICAgIDogaXNSZWdFeHAobWF0Y2gpXG4gICAgICAgICAgICA/IGZpZWxkID0+IG1hdGNoLnRlc3QoZmllbGQpXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgICAgZGF0YVBhdGhzID0gY2hlY2tcbiAgICAgICAgICA/IE9iamVjdC5rZXlzKGNvbXBvbmVudHNCeURhdGFQYXRoKS5maWx0ZXIoY2hlY2spXG4gICAgICAgICAgOiBpc0FycmF5KG1hdGNoKVxuICAgICAgICAgICAgPyBtYXRjaFxuICAgICAgICAgICAgOiBbbWF0Y2hdXG4gICAgICB9XG4gICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgICAgfVxuICAgICAgbGV0IGlzVmFsaWQgPSB0cnVlXG4gICAgICBsZXQgZmlyc3QgPSB0cnVlXG4gICAgICBkYXRhUGF0aHMgfHw9IE9iamVjdC5rZXlzKGNvbXBvbmVudHNCeURhdGFQYXRoKVxuICAgICAgZm9yIChjb25zdCBkYXRhUGF0aCBvZiBkYXRhUGF0aHMpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICBpZiAoIWNvbXBvbmVudC52YWxpZGF0ZShub3RpZnkpKSB7XG4gICAgICAgICAgICAvLyBGb2N1cyBmaXJzdCBlcnJvciBmaWVsZFxuICAgICAgICAgICAgaWYgKG5vdGlmeSAmJiBmaXJzdCkge1xuICAgICAgICAgICAgICBjb21wb25lbnQuc2Nyb2xsSW50b1ZpZXcoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobm90aWZ5ICYmICFpc1ZhbGlkKSB7XG4gICAgICAgIHRoaXMubm90aWZ5RXJyb3JzKClcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc1ZhbGlkXG4gICAgfSxcblxuICAgIHZlcmlmeUFsbChtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVBbGwobWF0Y2gsIGZhbHNlKVxuICAgIH0sXG5cbiAgICBhc3luYyBzaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzLCBmaXJzdCA9IHRydWUpIHtcbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgICAgY29uc3QgdW5tYXRjaGVkID0gW11cbiAgICAgIGNvbnN0IHdhc0ZpcnN0ID0gZmlyc3RcbiAgICAgIGZvciAoY29uc3QgW2RhdGFQYXRoLCBlcnJzXSBvZiBPYmplY3QuZW50cmllcyhlcnJvcnMpKSB7XG4gICAgICAgIC8vIElmIHRoZSBzY2hlbWEgaXMgYSBkYXRhLXJvb3QsIHByZWZpeCBpdHMgb3duIGRhdGFQYXRoIHRvIGFsbCBlcnJvcnMsXG4gICAgICAgIC8vIHNpbmNlIHRoZSBkYXRhIHRoYXQgaXQgc2VuZHMgYW5kIHZhbGlkYXRlcyB3aWxsIGJlIHVucHJlZml4ZWQuXG4gICAgICAgIGNvbnN0IGZ1bGxEYXRhUGF0aCA9IHRoaXMuaGFzT3duRGF0YVxuICAgICAgICAgID8gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgZGF0YVBhdGgpXG4gICAgICAgICAgOiBkYXRhUGF0aFxuICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLCB0aGlzLmRhdGFQYXRoLCB0aGlzLmhhc093bkRhdGEsIGZ1bGxEYXRhUGF0aClcbiAgICAgICAgLy8gQ29udmVydCBmcm9tIEphdmFTY3JpcHQgcHJvcGVydHkgYWNjZXNzIG5vdGF0aW9uLCB0byBvdXIgb3duIGZvcm1cbiAgICAgICAgLy8gb2YgcmVsYXRpdmUgSlNPTiBwb2ludGVycyBhcyBkYXRhLXBhdGhzOlxuICAgICAgICBjb25zdCBkYXRhUGF0aFBhcnRzID0gcGFyc2VEYXRhUGF0aChmdWxsRGF0YVBhdGgpXG4gICAgICAgIGxldCBmb3VuZCA9IGZhbHNlXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoUGFydHMpXG4gICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICBpZiAoY29tcG9uZW50LnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycnMsIGZpcnN0ICYmIGZvY3VzKSkge1xuICAgICAgICAgICAgZm91bmQgPSB0cnVlXG4gICAgICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgICAgLy8gQ291bGRuJ3QgZmluZCBhIGNvbXBvbmVudCBpbiBhbiBhY3RpdmUgZm9ybSBmb3IgdGhlIGdpdmVuIGRhdGFQYXRoLlxuICAgICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gZmluZCBhIGNvbXBvbmVudCBzZXJ2aW5nIGEgcGFydCBvZiB0aGUgZGF0YVBhdGgsXG4gICAgICAgICAgLy8gYW5kIHRha2UgaXQgZnJvbSB0aGVyZTpcbiAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgICB3aGlsZSAoZGF0YVBhdGhQYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aFBhcnRzKVxuICAgICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgICAgICBjb25zdCBuYXZpZ2F0ZWQgPSBhd2FpdCBjb21wb25lbnQubmF2aWdhdGVUb0NvbXBvbmVudD8uKFxuICAgICAgICAgICAgICAgIGZ1bGxEYXRhUGF0aCxcbiAgICAgICAgICAgICAgICBzdWJDb21wb25lbnRzID0+IHtcbiAgICAgICAgICAgICAgICAgIGxldCBmb3VuZCA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBzdWJDb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoZWQgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoZXJyb3JzKS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAoW2RhdGFQYXRoXSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplRGF0YVBhdGgoZGF0YVBhdGgpLnN0YXJ0c1dpdGgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LmRhdGFQYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKG1hdGNoZWQpLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuc2hvd1ZhbGlkYXRpb25FcnJvcnMobWF0Y2hlZCwgZmlyc3QgJiYgZm9jdXMpXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZm91bmRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG5hdmlnYXRlZCkge1xuICAgICAgICAgICAgICAgIC8vIEZvdW5kIGEgbmVzdGVkIGZvcm0gdG8gZGlzcGxheSBhdCBsZWFzdCBwYXJ0cyBmbyB0aGUgZXJyb3JzLlxuICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IHNob3cgYWxsIGVycm9ycyBhdCBvbmNlLCBzbyB3ZSdyZSBkb25lLiBEb24ndCBjYWxsXG4gICAgICAgICAgICAgICAgLy8gYG5vdGlmeUVycm9ycygpYCB5ZXQsIGFzIHdlIGNhbiBvbmx5IGRpc3BsYXkgaXQgb25jZVxuICAgICAgICAgICAgICAgIC8vIGBzaG93VmFsaWRhdGlvbkVycm9ycygpYCB3YXMgY2FsbGVkIGZyb20gYERpdG9Gb3JtLm1vdW50ZWQoKWBcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU3RpbGwgaGVyZSwgc28ga2VlcCByZW1vdmluZyB0aGUgbGFzdCBwYXJ0IHVudGlsIHdlIGZpbmQgYSBtYXRjaC5cbiAgICAgICAgICAgIGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gV2hlbiB0aGUgZXJyb3IgY2FuJ3QgYmUgbWF0Y2hlZCwgYWRkIGl0IHRvIGEgbGlzdCBvZiB1bm1hdGNoZWRcbiAgICAgICAgICAvLyBlcnJvcnMgd2l0aCBkZWNlbnQgbWVzc2FnZSwgdG8gcmVwb3J0IGF0IHRoZSBlbmQuXG4gICAgICAgICAgY29uc3QgZmllbGQgPSBsYWJlbGl6ZShwcm9wZXJ0eSlcbiAgICAgICAgICBmb3IgKGNvbnN0IGVyciBvZiBlcnJzKSB7XG4gICAgICAgICAgICBjb25zdCBwcmVmaXggPSBmaWVsZFxuICAgICAgICAgICAgICA/IGBUaGUgZmllbGQgJHtmaWVsZH1gXG4gICAgICAgICAgICAgIDogYFRoZSAke3RoaXMuZm9ybUxhYmVsfWBcbiAgICAgICAgICAgIHVubWF0Y2hlZC5wdXNoKGAke3ByZWZpeH0gJHtlcnIubWVzc2FnZX1gKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICB9XG4gICAgICBpZiAod2FzRmlyc3QgJiYgIWZpcnN0KSB7XG4gICAgICAgIHRoaXMubm90aWZ5RXJyb3JzKHVubWF0Y2hlZC5qb2luKCdcXG4nKSlcbiAgICAgIH1cbiAgICAgIHJldHVybiAhZmlyc3RcbiAgICB9LFxuXG4gICAgbm90aWZ5RXJyb3JzKG1lc3NhZ2UpIHtcbiAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgdGl0bGU6ICdWYWxpZGF0aW9uIEVycm9ycycsXG4gICAgICAgIHRleHQ6IG1lc3NhZ2UgfHwgJ1BsZWFzZSBjb3JyZWN0IHRoZSBoaWdobGlnaHRlZCBlcnJvcnMuJ1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgcmVzZXREYXRhKCkge1xuICAgICAgLy8gV2UgY2FuJ3Qgc2V0IGB0aGlzLmRhdGEgPSAuLi5gIGJlY2F1c2UgaXQncyBhIHByb3BlcnR5LCBidXQgd2UgY2FuIHNldFxuICAgICAgLy8gYWxsIGtub3duIHByb3BlcnRpZXMgb24gaXQgdG8gdGhlIHZhbHVlcyByZXR1cm5lZCBieVxuICAgICAgLy8gYHNldERlZmF1bHRWYWx1ZXMoKWAsIGFzIHRoZXkgYXJlIGFsbCByZWFjdGl2ZSBhbHJlYWR5IGZyb20gdGhlIHN0YXJ0czpcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5kYXRhLCBzZXREZWZhdWx0VmFsdWVzKHRoaXMuZGF0YVNjaGVtYSwge30sIHRoaXMpKVxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgZm9yIChjb25zdCBuYW1lIGluIGRhdGEpIHtcbiAgICAgICAgaWYgKG5hbWUgaW4gdGhpcy5kYXRhKSB7XG4gICAgICAgICAgaWYgKCFlcXVhbHModGhpcy5kYXRhW25hbWVdLCBkYXRhW25hbWVdKSkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1tdXRhdGluZy1wcm9wc1xuICAgICAgICAgICAgdGhpcy5kYXRhW25hbWVdID0gZGF0YVtuYW1lXVxuICAgICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGhpcy5nZXRDb21wb25lbnRzQnlOYW1lKG5hbWUpKSB7XG4gICAgICAgICAgICAgIGNvbXBvbmVudC5tYXJrRGlydHkoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmaWx0ZXJEYXRhKGRhdGEpIHtcbiAgICAgIC8vIEZpbHRlcnMgb3V0IGFycmF5cyBhbmQgb2JqZWN0cyB0aGF0IGFyZSBiYWNrZWQgYnkgZGF0YSByZXNvdXJjZXNcbiAgICAgIC8vIHRoZW1zZWx2ZXMsIGFzIHRob3NlIGFyZSBhbHJlYWR5IHRha2VuIGNhcmUgb2YgdGhyb3VnaCB0aGVpciBvd24gQVBJXG4gICAgICAvLyByZXNvdXJjZSBlbmQtcG9pbnRzIGFuZCBzaG91bGRuJ3QgYmUgc2V0LlxuICAgICAgY29uc3QgbG9jYWxEYXRhID0ge31cbiAgICAgIGNvbnN0IGZvcmVpZ25EYXRhID0ge31cbiAgICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkYXRhKSkge1xuICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkgfHwgaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5TmFtZShuYW1lKVxuICAgICAgICAgIGlmIChjb21wb25lbnRzLnNvbWUoY29tcG9uZW50ID0+IGNvbXBvbmVudC5wcm92aWRlc0RhdGEpKSB7XG4gICAgICAgICAgICBmb3JlaWduRGF0YVtuYW1lXSA9IHZhbHVlXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsb2NhbERhdGFbbmFtZV0gPSB2YWx1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHsgbG9jYWxEYXRhLCBmb3JlaWduRGF0YSB9XG4gICAgfSxcblxuICAgIHByb2Nlc3NEYXRhKHsgdGFyZ2V0ID0gJ2NsaXBib2FyZCcsIHNjaGVtYU9ubHkgPSB0cnVlIH0gPSB7fSkge1xuICAgICAgcmV0dXJuIHByb2Nlc3NEYXRhKFxuICAgICAgICB0aGlzLmRhdGFTY2hlbWEsXG4gICAgICAgIHRoaXMuc291cmNlU2NoZW1hLFxuICAgICAgICB0aGlzLmRhdGEsXG4gICAgICAgIHRoaXMuZGF0YVBhdGgsXG4gICAgICAgIHtcbiAgICAgICAgICAvLyBOZWVkZWQgZm9yIERpdG9Db250ZXh0IGhhbmRsaW5nIGluc2lkZSBgcHJvY2Vzc0RhdGFgIGFuZFxuICAgICAgICAgIC8vIGBwcm9jZXNzU2NoZW1hRGF0YSgpYDpcbiAgICAgICAgICByb290RGF0YTogdGhpcy5yb290RGF0YSxcbiAgICAgICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICAgICAgc2NoZW1hT25seSxcbiAgICAgICAgICB0YXJnZXRcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICAvLyBgJHNjaGVtYVBhcmVudENvbXBvbmVudCgpYCBpcyBvbmx5IHNldCBpZiBvbmUgb2YgdGhlIGFuY2VzdG9ycyB1c2VzXG4gICAgICAvLyB0aGUgYFNjaGVtYVBhcmVudE1peGluYDpcbiAgICAgIHRoaXMuJHNjaGVtYVBhcmVudENvbXBvbmVudCgpPy5fcmVnaXN0ZXJTY2hlbWFDb21wb25lbnQodGhpcywgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50LCBhZGQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyRW50cnkodGhpcy5jb21wb25lbnRzUmVnaXN0cnksIGNvbXBvbmVudCwgYWRkKVxuICAgICAgLy8gT25seSByZWdpc3RlciB3aXRoIHRoZSBwYXJlbnQgaWYgc2NoZW1hIHNoYXJlcyBkYXRhIHdpdGggaXQuXG4gICAgICB0aGlzLnBhcmVudFNjaGVtYUNvbXBvbmVudD8uX3JlZ2lzdGVyQ29tcG9uZW50KGNvbXBvbmVudCwgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJQYW5lKHBhbmUsIGFkZCkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJFbnRyeSh0aGlzLnBhbmVzUmVnaXN0cnksIHBhbmUsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyUGFuZWwocGFuZWwsIGFkZCkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJFbnRyeSh0aGlzLnBhbmVsc1JlZ2lzdHJ5LCBwYW5lbCwgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJFbnRyeShyZWdpc3RyeSwgZW50cnksIGFkZCkge1xuICAgICAgY29uc3QgdWlkID0gZW50cnkuJHVpZFxuICAgICAgaWYgKGFkZCkge1xuICAgICAgICByZWdpc3RyeVt1aWRdID0gZW50cnlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSByZWdpc3RyeVt1aWRdXG4gICAgICB9XG4gICAgfSxcblxuICAgIF9saXN0RW50cmllc0J5RGF0YVBhdGgocmVnaXN0cnkpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHJlZ2lzdHJ5KS5yZWR1Y2UoKGVudHJpZXNCeURhdGFQYXRoLCBlbnRyeSkgPT4ge1xuICAgICAgICAvLyBNdWx0aXBsZSBlbnRyaWVzIGNhbiBiZSBsaW5rZWQgdG8gdGhlIHNhbWUgZGF0YS1wYXRoLCBlLmcuIHdoZW5cbiAgICAgICAgLy8gdGhlcmUgYXJlIHRhYnMuIExpbmsgZWFjaCBkYXRhLXBhdGggdG8gYW4gYXJyYXkgb2YgZW50cmllcy5cbiAgICAgICAgY29uc3QgeyBkYXRhUGF0aCB9ID0gZW50cnlcbiAgICAgICAgY29uc3QgZW50cmllcyA9IChlbnRyaWVzQnlEYXRhUGF0aFtkYXRhUGF0aF0gfHw9IFtdKVxuICAgICAgICBlbnRyaWVzLnB1c2goZW50cnkpXG4gICAgICAgIHJldHVybiBlbnRyaWVzQnlEYXRhUGF0aFxuICAgICAgfSwge30pXG4gICAgfSxcblxuICAgIF9nZXRFbnRyaWVzKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aCkge1xuICAgICAgcmV0dXJuIG5vcm1hbGl6ZURhdGFQYXRoKGRhdGFQYXRoKS5zdGFydHNXaXRoKHRoaXMuZGF0YVBhdGgpXG4gICAgICAgID8gdGhpcy5fZ2V0RW50cmllc0J5RGF0YVBhdGgoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoKVxuICAgICAgICA6IHRoaXMuX2dldEVudHJpZXNCeU5hbWUoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoKVxuICAgIH0sXG5cbiAgICBfZ2V0RW50cmllc0J5RGF0YVBhdGgoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoKSB7XG4gICAgICByZXR1cm4gZW50cmllc0J5RGF0YVBhdGhbbm9ybWFsaXplRGF0YVBhdGgoZGF0YVBhdGgpXSB8fCBbXVxuICAgIH0sXG5cbiAgICBfZ2V0RW50cmllc0J5TmFtZShlbnRyaWVzQnlEYXRhUGF0aCwgbmFtZSkge1xuICAgICAgcmV0dXJuIGVudHJpZXNCeURhdGFQYXRoW2FwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIG5hbWUpXSB8fCBbXVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXNjaGVtYSB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cbiAgPiAuZGl0by1zY2hlbWEtaGVhZGVyICsgLmRpdG8tc2NoZW1hLWNvbnRlbnQgPiAuZGl0by1wYW5lIHtcbiAgICBtYXJnaW4tdG9wOiAkZm9ybS1zcGFjaW5nLWhhbGY7XG4gIH1cblxuICAmOmhhcyg+IC5kaXRvLXNjaGVtYS1jb250ZW50ICsgLmRpdG8tZWRpdC1idXR0b25zKSB7XG4gICAgLy8gRGlzcGxheSB0aGUgaW5saW5lZCBlZGl0IGJ1dHRvbnMgdG8gdGhlIHJpZ2h0IG9mIHRoZSBzY2hlbWE6XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuXG4gICAgPiAuZGl0by1lZGl0LWJ1dHRvbnMge1xuICAgICAgZmxleDogMSAwIDAlO1xuICAgICAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmc7XG4gICAgfVxuICB9XG5cbiAgPiAuZGl0by1zY2hlbWEtY29udGVudCB7XG4gICAgZmxleDogMCAxIDEwMCU7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIC8vIFNvIHRoYXQgc2NoZW1hIGJ1dHRvbnMgY2FuIGJlIHN0aWNreSB0byB0aGUgYm90dG9tLlxuICAgIC8vIE5PVEU6IFdlIGFsc28gbmVlZCBncmlkIGZvciBgVHJhbnNpdGlvbkhlaWdodGAgdG8gd29yayB3ZWxsLiBTd2l0Y2hpbmdcbiAgICAvLyB0byBmbGV4IGJveCBoZXJlIGNhdXNlcyBqdW1weSBjb2xsYXBzaW5nIHRyYW5zaXRpb25zLlxuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBtaW4tY29udGVudDtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDEwMCU7XG5cbiAgICA+IDpvbmx5LWNoaWxkIHtcbiAgICAgIGdyaWQtcm93LWVuZDogbm9uZTtcbiAgICB9XG4gIH1cbn1cblxuLmRpdG8tc2NoZW1hLWhlYWRlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcblxuICAuZGl0by1oZWFkZXIgJiB7XG4gICAgLy8gV2hlbiB0ZWxlcG9ydGVkIGludG8gbWFpbiBoZWFkZXIuXG4gICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xuICB9XG5cbiAgLmRpdG8tbGFiZWwgJiB7XG4gICAgLy8gV2hlbiB0ZWxlcG9ydGVkIGludG8gY29udGFpbmVyIGxhYmVsLlxuICAgIGZsZXg6IDE7XG4gIH1cblxuICA+IC5kaXRvLWxhYmVsIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICB9XG5cbiAgPiAuZGl0by1idXR0b25zIHtcbiAgICBtYXJnaW4tbGVmdDogdmFyKC0tYnV0dG9uLW1hcmdpbiwgMCk7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuRGl0b1NjaGVtYS5kaXRvLXNjaGVtYS1pbmxpbmVkKFxuICA6Y2xhc3M9XCJ7ICdkaXRvLXNjaGVtYS1jb21wYWN0JzogaXNDb21wYWN0IH1cIlxuICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICA6ZGF0YT1cImRhdGFcIlxuICA6bWV0YT1cIm1ldGFcIlxuICA6c3RvcmU9XCJzdG9yZVwiXG4gIDpsYWJlbD1cImlzQ29tcGFjdCA/IG51bGwgOiBsYWJlbFwiXG4gIDpwYWRkaW5nPVwicGFkZGluZyA/PyAnaW5saW5lZCdcIlxuICA6aW5saW5lZD1cInRydWVcIlxuICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gIDpnZW5lcmF0ZUxhYmVscz1cIiFpc0NvbXBhY3RcIlxuICA6bGFiZWxOb2RlPVwibGFiZWxOb2RlXCJcbiAgOmFjY3VtdWxhdGVkQmFzaXM9XCJhY2N1bXVsYXRlZEJhc2lzXCJcbilcbiAgLy8tIFJlbmRlciBkaXRvLWVkaXQtYnV0dG9ucyBmb3IgaW5saW5lZCBzY2hlbWFzIHNlcGFyYXRlbHkgZnJvbSBhbGxcbiAgLy8tIG90aGVycyBpbiBgVHlwZUxpc3RgIGFzIGEgc2NvcGUsIGZvciBiZXR0ZXIgaGFuZGxpbmcgb2YgbGF5b3V0LlxuICB0ZW1wbGF0ZSgjZWRpdC1idXR0b25zKVxuICAgIERpdG9FZGl0QnV0dG9ucyhcbiAgICAgIHYtaWY9XCJkZWxldGFibGUgfHwgZHJhZ2dhYmxlIHx8IGVkaXRhYmxlXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgOmVkaXRQYXRoPVwiZWRpdFBhdGhcIlxuICAgICAgQGRlbGV0ZT1cIiRlbWl0KCdkZWxldGUnKVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBpc0NvbXBhY3QgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9TY2hlbWFJbmxpbmVkJywge1xuICBlbWl0czogWydkZWxldGUnXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBbU3RyaW5nLCBPYmplY3RdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgcGFkZGluZzogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGNvbGxhcHNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZHJhZ2dhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkZWxldGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0UGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsYWJlbE5vZGU6IHsgdHlwZTogSFRNTEVsZW1lbnQsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBhY2N1bXVsYXRlZEJhc2lzOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpc0NvbXBhY3QoKSB7XG4gICAgICByZXR1cm4gaXNDb21wYWN0KHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbCgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5pc0NvbXBhY3QgJiYgISF0aGlzLmxhYmVsXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc2NoZW1hLWlubGluZWQge1xuICAvLyBVc2UgZ3JpZCBsYXlvdXQgZm9yIHR3byByZWFzb25zOiBGb3IgYFRyYW5zaXRpb25IZWlnaHRgIHRvIHdvcmsgc21vb3RobHksXG4gIC8vIGFuZCB0byBhbGlnbiB0aGUgaGVhZGVyIGFib3ZlIHRoZSBjb250ZW50IHdoZW4gdGhlIGhlYWRlciBpcyBub3QgdGVsZXBvcnRlZFxuICAvLyBvdXRzaWRlIG9mIHRoZSBzY2hlbWEuXG4gIGRpc3BsYXk6IGdyaWQ7XG4gIGdyaWQtdGVtcGxhdGUtcm93czogbWluLWNvbnRlbnQ7XG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMTAwJTtcblxuICAmOm5vdCg6aG92ZXIsIC5kaXRvLXNjaGVtYS0tb3Blbikge1xuICAgID4gLmRpdG8tc2NoZW1hLWhlYWRlciB7XG4gICAgICA+IC5kaXRvLWNsaXBib2FyZCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPCEtLSBlc2xpbnQtZGlzYWJsZSB2dWUvbm8tdGVtcGxhdGUtc2hhZG93IC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXBhbmUoXG4gIHYtaWY9XCJpc1BvcHVsYXRlZCAmJiBjb21wb25lbnRTY2hlbWFzLmxlbmd0aCA+IDBcIlxuICB2LXJlc2l6ZT1cIm9uUmVzaXplUGFuZVwiXG4gIDpjbGFzcz1cImNsYXNzZXNcIlxuKVxuICB0ZW1wbGF0ZShcbiAgICB2LWZvcj1ge1xuICAgICAgc2NoZW1hLFxuICAgICAgZGF0YVBhdGgsXG4gICAgICBuZXN0ZWREYXRhUGF0aCxcbiAgICAgIG5lc3RlZCxcbiAgICAgIHN0b3JlXG4gICAgfSwgaW5kZXggaW4gY29tcG9uZW50U2NoZW1hc2BcbiAgKVxuICAgIC8vLSBVc2UgPHNwYW4+IGZvciAuZGl0by1icmVhayBzbyB3ZSBjYW4gdXNlIGAuZGl0by1jb250YWluZXI6Zmlyc3Qtb2YtdHlwZWBcbiAgICAvLy0gc2VsZWN0b3IuXG4gICAgc3Bhbi5kaXRvLWJyZWFrKFxuICAgICAgdi1pZj1cIlsnYmVmb3JlJywgJ2JvdGgnXS5pbmNsdWRlcyhzY2hlbWEuYnJlYWspXCJcbiAgICApXG4gICAgRGl0b0NvbnRhaW5lcihcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEoc2NoZW1hKVwiXG4gICAgICByZWY9XCJjb250YWluZXJzXCJcbiAgICAgIDprZXk9XCJuZXN0ZWREYXRhUGF0aFwiXG4gICAgICA6ZGF0YS1pbmRleD1cImluZGV4XCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6c2luZ2xlPVwiaXNTaW5nbGVDb21wb25lbnRcIlxuICAgICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICA6dmVydGljYWxMYWJlbHM9XCJpc0luTGFiZWxlZFJvdyhpbmRleClcIlxuICAgICAgOmFjY3VtdWxhdGVkQmFzaXM9XCJhY2N1bXVsYXRlZEJhc2lzXCJcbiAgICApXG4gICAgc3Bhbi5kaXRvLWJyZWFrKFxuICAgICAgdi1pZj1cIlsnYWZ0ZXInLCAnYm90aCddLmluY2x1ZGVzKHNjaGVtYS5icmVhaylcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IENvbnRleHRNaXhpbiBmcm9tICcuLi9taXhpbnMvQ29udGV4dE1peGluLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgaXNOZXN0ZWQgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1BhbmUnLCB7XG4gIG1peGluczogW0NvbnRleHRNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHRhYkNvbXBvbmVudDogKCkgPT4gdGhpcy50YWJDb21wb25lbnRcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0YWI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgcGFkZGluZzogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzaW5nbGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGdlbmVyYXRlTGFiZWxzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgYWNjdW11bGF0ZWRCYXNpczogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBvc2l0aW9uczogW11cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBuZXN0ZWQoKSB7XG4gICAgICAvLyBGb3IgYENvbnRleHRNaXhpbmA6XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgY2xhc3NlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLXBhbmUtLXNpbmdsZSc6IHRoaXMuaXNTaW5nbGVDb21wb25lbnQsXG4gICAgICAgIFtgZGl0by1wYW5lLS1wYWRkaW5nLSR7dGhpcy5wYWRkaW5nfWBdOiAhIXRoaXMucGFkZGluZ1xuICAgICAgfVxuICAgIH0sXG5cbiAgICB0YWJDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy50YWIgPyB0aGlzIDogdGhpcy4kdGFiQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgY29tcG9uZW50U2NoZW1hcygpIHtcbiAgICAgIC8vIENvbXB1dGUgYSBjb21wb25lbnRzIGxpc3Qgd2hpY2ggaGFzIHRoZSBkYXRhUGF0aCBiYWtlZCBpbnRvIGl0cyBrZXlzXG4gICAgICAvLyBhbmQgYWRkcyB0aGUga2V5IGFzIHRoZSBuYW1lIHRvIGVhY2ggY29tcG9uZW50LCB1c2VkIGZvciBsYWJlbHMsIGV0Yy5cbiAgICAgIC8vIE5PVEU6IHNjaGVtYSBjYW4gYmUgbnVsbCB3aGlsZSBtdWx0aS1mb3JtIGxpc3RzIGxvYWQgdGhlaXIgZGF0YSxcbiAgICAgIC8vIGJlY2F1c2Ugb25seSB0aGUgYXZhaWxhYmxlIGRhdGEgd2lsbCBkZXRlcm1pbmUgdGhlIHR5cGUgb2YgZm9ybS5cbiAgICAgIC8vIFdoZW4gZWRpdGluZyBwcmltaXRpdmUgdmFsdWVzIHRocm91Z2ggYSBmb3JtLCBkbyBub3QgYXBwZW5kICduYW1lJyB0b1xuICAgICAgLy8gdGhlIGNvbXBvbmVudCdzIGRhdGFQYXRoIHNvIGl0IGNhbiBiZSBtYXBwZWQgdG8gZnJvbSB2YWxpZGF0aW9uIGVycm9ycy5cbiAgICAgIC8vIE5PVEU6IE5vdCBhbGwgc2NoZW1hcyAvIGNvbXBvbmVudHMgaGF2ZSBhIHNvdXJjZVNjaGVtYSwgZS5nLiBkaWFsb2dzLlxuICAgICAgY29uc3Qgd3JhcFByaW1pdGl2ZXMgPSB0aGlzLnNvdXJjZVNjaGVtYT8ud3JhcFByaW1pdGl2ZXNcbiAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYT8uY29tcG9uZW50cyB8fCB7fSkubWFwKFxuICAgICAgICAoW25hbWUsIHNjaGVtYV0pID0+IHtcbiAgICAgICAgICAvLyBBbHdheXMgYWRkIG5hbWUgdG8gY29tcG9uZW50IHNjaGVtYS5cbiAgICAgICAgICBzY2hlbWEubmFtZSA9IG5hbWVcbiAgICAgICAgICAvLyBTaGFyZSBkYXRhUGF0aCBhbmQgc3RvcmUgd2l0aCBwYXJlbnQgaWYgbm90IG5lc3RlZDpcbiAgICAgICAgICBjb25zdCBuZXN0ZWQgPSBpc05lc3RlZChzY2hlbWEpXG4gICAgICAgICAgY29uc3QgbmVzdGVkRGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBuYW1lKVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgICBkYXRhUGF0aDpcbiAgICAgICAgICAgICAgbmVzdGVkICYmICF3cmFwUHJpbWl0aXZlc1xuICAgICAgICAgICAgICAgID8gbmVzdGVkRGF0YVBhdGhcbiAgICAgICAgICAgICAgICA6IHRoaXMuZGF0YVBhdGgsXG4gICAgICAgICAgICBuZXN0ZWREYXRhUGF0aCxcbiAgICAgICAgICAgIG5lc3RlZCxcbiAgICAgICAgICAgIHN0b3JlOiB0aGlzLmdldENoaWxkU3RvcmUobmFtZSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNTaW5nbGVDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zaW5nbGUgJiYgdGhpcy5jb21wb25lbnRTY2hlbWFzLmxlbmd0aCA9PT0gMVxuICAgIH0sXG5cbiAgICB2ZXJ0aWNhbExhYmVsc0J5SW5kaWNlcygpIHtcbiAgICAgIGNvbnN0IHsgcG9zaXRpb25zIH0gPSB0aGlzXG5cbiAgICAgIGNvbnN0IGlzTGFzdEluUm93ID0gaW5kZXggPT4gKFxuICAgICAgICBwb3NpdGlvbnNbaW5kZXhdICYmIChcbiAgICAgICAgICBpbmRleCA9PT0gcG9zaXRpb25zLmxlbmd0aCAtIDEgfHxcbiAgICAgICAgICBmaW5kTmV4dFBvc2l0aW9uKGluZGV4KS50b3AgPiBwb3NpdGlvbnNbaW5kZXhdLnRvcFxuICAgICAgICApXG4gICAgICApXG5cbiAgICAgIGNvbnN0IGZpbmROZXh0UG9zaXRpb24gPSBpbmRleCA9PiB7XG4gICAgICAgIGZvciAobGV0IGkgPSBpbmRleCArIDE7IGkgPCBwb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAocG9zaXRpb25zW2ldKSByZXR1cm4gcG9zaXRpb25zW2ldXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDBcbiAgICAgIH1cblxuICAgICAgY29uc3Qgcm93cyA9IFtdXG4gICAgICBsZXQgcm93ID0gW11cbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBwb3NpdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIHJvdy5wdXNoKGluZGV4KVxuICAgICAgICBpZiAoaXNMYXN0SW5Sb3coaW5kZXgpKSB7XG4gICAgICAgICAgcm93cy5wdXNoKHJvdylcbiAgICAgICAgICByb3cgPSBbXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocm93Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgcm93cy5wdXNoKHJvdylcbiAgICAgIH1cblxuICAgICAgY29uc3QgdmVydGljYWxMYWJlbHNCeUluZGljZXMgPSBbXVxuXG4gICAgICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzKSB7XG4gICAgICAgIGxldCBoYXNMYWJlbHNJblJvdyA9IGZhbHNlXG4gICAgICAgIGZvciAoY29uc3QgaW5kZXggb2Ygcm93KSB7XG4gICAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uc1tpbmRleF1cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBwb3NpdGlvbj8uaGVpZ2h0ID4gMiAmJiAoXG4gICAgICAgICAgICAgIHBvc2l0aW9uLm5vZGUubWF0Y2hlcygnOmhhcyg+IC5kaXRvLWxhYmVsKScpIHx8XG4gICAgICAgICAgICAgIHBvc2l0aW9uLm5vZGVcbiAgICAgICAgICAgICAgICAuY2xvc2VzdCgnLmRpdG8tY29udGFpbmVyJylcbiAgICAgICAgICAgICAgICAubWF0Y2hlcygnLmRpdG8tY29udGFpbmVyLS1sYWJlbC12ZXJ0aWNhbCcpXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBIYW5kbGUgbmVzdGVkIHNjaGVtYXMsIGUuZy4gJ3NlY3Rpb24nIG9yICdvYmplY3QnIGFuZFxuICAgICAgICAgICAgLy8gZGV0ZWN0IGxhYmVscyB0aGVyZSB0b28uXG4gICAgICAgICAgICBoYXNMYWJlbHNJblJvdyA9IHRydWVcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgaW5kZXggb2Ygcm93KSB7XG4gICAgICAgICAgdmVydGljYWxMYWJlbHNCeUluZGljZXNbaW5kZXhdID0gaGFzTGFiZWxzSW5Sb3dcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmVydGljYWxMYWJlbHNCeUluZGljZXNcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICAnY29tcG9uZW50U2NoZW1hcy5sZW5ndGgnKGxlbmd0aCkge1xuICAgICAgdGhpcy5wb3NpdGlvbnMubGVuZ3RoID0gbGVuZ3RoXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIodHJ1ZSlcbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50Ll9yZWdpc3RlclBhbmUodGhpcywgYWRkKVxuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIGlmICh0aGlzLnRhYikge1xuICAgICAgICByZXR1cm4gdGhpcy4kcm91dGVyLnB1c2goeyBoYXNoOiBgIyR7dGhpcy50YWJ9YCB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblJlc2l6ZVBhbmUoKSB7XG4gICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgY29udGFpbmVyIG9mIHRoaXMuJHJlZnMuY29udGFpbmVycykge1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSBjb250YWluZXIuJGVsXG4gICAgICAgICAgY29uc3QgaW5kZXggPSArbm9kZS5kYXRhc2V0LmluZGV4XG4gICAgICAgICAgY29uc3QgYm91bmRzID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICAgIGNvbnN0IHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShub2RlKVxuICAgICAgICAgIGNvbnN0IHBhZGRpbmcgPSBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmcpXG4gICAgICAgICAgY29uc3QgZm9udFNpemUgPSBwYXJzZUZsb2F0KHN0eWxlLmZvbnRTaXplKVxuICAgICAgICAgIGNvbnN0IGhlaWdodCA9IGJvdW5kcy5oZWlnaHQgLSAyICogcGFkZGluZ1xuICAgICAgICAgIHRoaXMucG9zaXRpb25zW2luZGV4XSA9XG4gICAgICAgICAgICBoZWlnaHQgPD0gMFxuICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICB0b3A6IGJvdW5kcy55LFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQgLyBmb250U2l6ZSxcbiAgICAgICAgICAgICAgICAgIG5vZGVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGlzSW5MYWJlbGVkUm93KGluZGV4KSB7XG4gICAgICByZXR1cm4gISF0aGlzLnZlcnRpY2FsTGFiZWxzQnlJbmRpY2VzW2luZGV4XVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXBhbmUge1xuICAkc2VsZjogJjtcbiAgJHJvb3QtcGFkZGluZzogJGNvbnRlbnQtcGFkZGluZyAtICRmb3JtLXNwYWNpbmctaGFsZjtcblxuICAtLXBhbmUtcGFkZGluZzogMHB4O1xuICAtLWNvbnRhaW5lci1wYWRkaW5nOiAjeyRmb3JtLXNwYWNpbmctaGFsZn07XG5cbiAgZGlzcGxheTogZmxleDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmbGV4LWZsb3c6IHJvdyB3cmFwO1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgYWxpZ24tY29udGVudDogZmxleC1zdGFydDtcbiAgLy8gUmVtb3ZlIHRoZSBwYWRkaW5nIGFkZGVkIGJ5IGAuZGl0by1jb250YWluZXJgIGluc2lkZSBgLmRpdG8tcGFuZWA6XG4gIG1hcmdpbjogLSRmb3JtLXNwYWNpbmctaGFsZjtcbiAgcGFkZGluZzogdmFyKC0tcGFuZS1wYWRkaW5nKTtcbiAgLy8gVXNlIGBmbGV4OiAwJWAgZm9yIGFsbCBgLmRpdG8tcGFuZWAgZXhjZXB0IGAuZGl0by1wYW5lX19tYWluYCxcbiAgLy8gc28gdGhhdCB0aGUgYC5kaXRvLWJ1dHRvbnMtbWFpbmAgY2FuIGJlIG1vdmVkIGFsbCB0aGUgd2F5IHRvIHRoZSBib3R0b20uXG4gIGZsZXg6IDAlO1xuXG4gICZfX21haW4ge1xuICAgIGZsZXg6IDEwMCU7XG4gIH1cblxuICAmLS1wYWRkaW5nLXJvb3Qge1xuICAgIC8vIEEgcm9vdC1sZXZlbCBwYW5lIGluc2lkZSBhIHNjcm9sbCB2aWV3LiBDbGVhciBuZWdhdGl2ZSBtYXJnaW4gZnJvbSBhYm92ZS5cbiAgICBtYXJnaW46IDA7XG4gICAgLy8gTW92ZSB0aGUgbmVnYXRpdmUgbWFyZ2luIHVzZWQgdG8gcmVtb3ZlIHRoZSBwYWRkaW5nIGFkZGVkIGJ5XG4gICAgLy8gYC5kaXRvLWNvbnRhaW5lcmAgaW5zaWRlIGAuZGl0by1wYW5lYCB0byB0aGUgcGFkZGluZzpcbiAgICAtLXBhbmUtcGFkZGluZzogI3skcm9vdC1wYWRkaW5nfTtcblxuICAgICYjeyRzZWxmfS0tc2luZ2xlIHtcbiAgICAgIC0tcGFuZS1wYWRkaW5nOiAjeyRjb250ZW50LXBhZGRpbmd9O1xuICAgICAgLS1jb250YWluZXItcGFkZGluZzogMHB4O1xuICAgIH1cblxuICAgICY6aGFzKD4gLmRpdG8tY29udGFpbmVyLS1sYWJlbC12ZXJ0aWNhbDpmaXJzdC1vZi10eXBlKSB7XG4gICAgICAvLyBSZWR1Y2UgdG9wIHNwYWNpbmcgd2hlbiB0aGUgZmlyc3Qgcm93IGhhcyBsYWJlbHMuXG4gICAgICBtYXJnaW4tdG9wOiAtJGZvcm0tc3BhY2luZy1oYWxmO1xuICAgIH1cblxuICAgIC8vIERpc3BsYXkgYSBydWxlciBiZXR3ZWVuIHRhYmJlZCBjb21wb25lbnRzIGFuZCB0b3dhcmRzIHRoZSAuZGl0by1idXR0b25zXG4gICAgJl9fdGFiICsgJl9fbWFpbiB7XG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICAvLyBVc2UgYSBwc2V1ZG8gZWxlbWVudCB0byBkaXNwbGF5IGEgcnVsZXIgd2l0aCBwcm9wZXIgbWFyZ2luc1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBib3JkZXItYm90dG9tOiAkYm9yZGVyLXN0eWxlO1xuICAgICAgICAvLyBTaGlmdCBydWxlciB1cCBieSAkcm9vdC1wYWRkaW5nIHRvIGV4Y2x1ZGUgcmVtb3ZlZCAkZm9ybS1zcGFjaW5nLWhhbGZcbiAgICAgICAgbWFyZ2luOiAoLSRyb290LXBhZGRpbmcpICRmb3JtLXNwYWNpbmctaGFsZiAkcm9vdC1wYWRkaW5nO1xuICAgICAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nLWhhbGY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJl9fbWFpbiArIC5kaXRvLWJ1dHRvbnMtbWFpbiB7XG4gICAgICAvLyBOZWVkZWQgZm9ybXMgd2l0aCBzdGlja3kgbWFpbiBidXR0b25zLlxuICAgICAgbWFyZ2luOiAkY29udGVudC1wYWRkaW5nO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB9XG4gIH1cblxuICAmLS1wYWRkaW5nLWlubGluZWQge1xuICAgIC0tcGFuZS1wYWRkaW5nOiAwcHg7XG4gIH1cblxuICAmLS1wYWRkaW5nLW5lc3RlZCB7XG4gICAgLS1wYW5lLXBhZGRpbmc6ICN7JGZvcm0tc3BhY2luZ307XG5cbiAgICAmOmhhcyg+IC5kaXRvLWNvbnRhaW5lci0tbGFiZWwtdmVydGljYWw6Zmlyc3Qtb2YtdHlwZSkge1xuICAgICAgLy8gUmVkdWNlIHRvcCBzcGFjaW5nIHdoZW4gdGhlIGZpcnN0IHJvdyBoYXMgbGFiZWxzLlxuICAgICAgcGFkZGluZy10b3A6ICRmb3JtLXNwYWNpbmctaGFsZjtcbiAgICB9XG4gIH1cblxuICAuZGl0by1icmVhayB7XG4gICAgLy8gYC5kaXRvLWJyZWFrYCBpcyByZW5kZXJlZCBhcyA8c3Bhbj4gc28gd2UgY2FuIHVzZSB0aGVcbiAgICAvLyBgLmRpdG8tY29udGFpbmVyOmZpcnN0LW9mLXR5cGVgIHNlbGVjdG9yIHRvIG1hdGNoIHRoZSBmaXJzdCBjb250YWluZXJcbiAgICAvLyBldmVuIGlmIGl0IGhhcyBhIGJyZWFrIGJlZm9yZSBpdC5cbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmbGV4OiAxMDAlO1xuICAgIGhlaWdodDogMDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRnJhY3Rpb24odmFsdWUpIHtcbiAgY29uc3QgbWF0Y2ggPSAoXG4gICAgaXNTdHJpbmcodmFsdWUpICYmXG4gICAgdmFsdWUubWF0Y2goL15cXHMqKFsrLV0/XFxkKylcXHMqXFwvXFxzKihbKy1dP1xcZCspXFxzKiQvKVxuICApXG4gIGlmIChtYXRjaCkge1xuICAgIGNvbnN0IFssIGRpdmlkZW5kLCBkaXZpc29yXSA9IG1hdGNoXG4gICAgcmV0dXJuIHBhcnNlRmxvYXQoZGl2aWRlbmQpIC8gcGFyc2VGbG9hdChkaXZpc29yKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlKVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tY29udGFpbmVyKFxuICB2LXNob3c9XCJjb21wb25lbnRWaXNpYmxlXCJcbiAgOmNsYXNzPVwiY29udGFpbmVyQ2xhc3Nlc1wiXG4gIDpzdHlsZT1cImNvbnRhaW5lclN0eWxlc1wiXG4pXG4gIFRlbGVwb3J0KFxuICAgIHYtaWY9XCJpc01vdW50ZWQgJiYgcGFuZWxFbnRyaWVzLmxlbmd0aCA+IDBcIlxuICAgIHRvPVwiLmRpdG8tc2lkZWJhcl9fdGVsZXBvcnRcIlxuICApXG4gICAgRGl0b1BhbmVscyhcbiAgICAgIDpwYW5lbHM9XCJwYW5lbEVudHJpZXNcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuICBEaXRvTGFiZWwoXG4gICAgdi1pZj1cImhhc0xhYmVsXCJcbiAgICA6Y2xhc3M9XCJsYWJlbENsYXNzZXNcIlxuICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICA6ZGF0YVBhdGg9XCJsYWJlbERhdGFQYXRoXCJcbiAgICA6aW5mbz1cImluZm9cIlxuICApXG4gIGNvbXBvbmVudC5kaXRvLWNvbXBvbmVudChcbiAgICB2LWlmPVwiIShoYXNMYWJlbCAmJiBpc0xhYmVsKVwiXG4gICAgOmlzPVwidHlwZUNvbXBvbmVudFwiXG4gICAgcmVmPVwiY29tcG9uZW50XCJcbiAgICA6Y2xhc3M9XCJjb21wb25lbnRDbGFzc2VzXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6d2lkdGg9XCJ3aWR0aFwiXG4gICAgOmxhYmVsPVwibGFiZWxcIlxuICAgIDpzaW5nbGU9XCJzaW5nbGVcIlxuICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgIDpkaXNhYmxlZD1cImNvbXBvbmVudERpc2FibGVkXCJcbiAgICA6YWNjdW11bGF0ZWRCYXNpcz1cImNvbWJpbmVkQmFzaXNcIlxuICAgIEBlcnJvcnM9XCJvbkVycm9yc1wiXG4gIClcbiAgRGl0b0Vycm9ycyg6ZXJyb3JzPVwiZXJyb3JzXCIpXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaXNTdHJpbmcsIGlzTnVtYmVyIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgVmFsdWVNaXhpbiBmcm9tICcuLi9taXhpbnMvVmFsdWVNaXhpbi5qcydcbmltcG9ydCBDb250ZXh0TWl4aW4gZnJvbSAnLi4vbWl4aW5zL0NvbnRleHRNaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQge1xuICBnZXRBbGxQYW5lbEVudHJpZXMsXG4gIGdldFR5cGVDb21wb25lbnQsXG4gIGhhc0xhYmVsLFxuICBvbWl0U3BhY2luZ1xufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBwYXJzZUZyYWN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvbWF0aC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvQ29udGFpbmVyJywge1xuICBtaXhpbnM6IFtWYWx1ZU1peGluLCBDb250ZXh0TWl4aW5dLFxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzaW5nbGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBuZXN0ZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZ2VuZXJhdGVMYWJlbHM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB2ZXJ0aWNhbExhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGFjY3VtdWxhdGVkQmFzaXM6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBlcnJvcnM6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBuYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLm5hbWVcbiAgICB9LFxuXG4gICAgdHlwZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS50eXBlXG4gICAgfSxcblxuICAgIHR5cGVDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gZ2V0VHlwZUNvbXBvbmVudCh0aGlzLnR5cGUpXG4gICAgfSxcblxuICAgIGlzTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy50eXBlID09PSAnbGFiZWwnXG4gICAgfSxcblxuICAgIGhhc0xhYmVsKCkge1xuICAgICAgcmV0dXJuIGhhc0xhYmVsKHRoaXMuc2NoZW1hLCB0aGlzLmdlbmVyYXRlTGFiZWxzKVxuICAgIH0sXG5cbiAgICBsYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc0xhYmVsID8gdGhpcy5nZXRMYWJlbCh0aGlzLnNjaGVtYSkgOiBudWxsXG4gICAgfSxcblxuICAgIGxhYmVsRGF0YVBhdGgoKSB7XG4gICAgICAvLyBVbm5lc3RlZCB0eXBlcyBkb24ndCBoYXZlIGEgZGF0YVBhdGggZm9yIHRoZW1zZWx2ZXMsIGRvbid0IHVzZSBpdDpcbiAgICAgIHJldHVybiB0aGlzLm5lc3RlZCA/IHRoaXMuZGF0YVBhdGggOiBudWxsXG4gICAgfSxcblxuICAgIGluZm86IGdldFNjaGVtYUFjY2Vzc29yKCdpbmZvJywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pLFxuXG4gICAgd2lkdGg6IGdldFNjaGVtYUFjY2Vzc29yKCd3aWR0aCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlQ29tcG9uZW50Py5kZWZhdWx0V2lkdGhcbiAgICAgIH0sXG4gICAgICBnZXQod2lkdGgpIHtcbiAgICAgICAgLy8gVXNlIDEwMCUgPT0gMS4wIGFzIGRlZmF1bHQgd2lkdGggd2hlbiBub3RoaW5nIGlzIHNldDpcbiAgICAgICAgcmV0dXJuIHdpZHRoID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IDEuMFxuICAgICAgICAgIDogaXNTdHJpbmcod2lkdGgpXG4gICAgICAgICAgICA/IHdpZHRoLm1hdGNoKC9eXFxzKls8Pl0/XFxzKiguKikkLylbMV0gLy8gUmVtb3ZlIHdpZHRoIG9wZXJhdG9yXG4gICAgICAgICAgICA6IHdpZHRoXG4gICAgICB9XG4gICAgfSksXG5cbiAgICB3aWR0aE9wZXJhdG9yOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2lkdGgnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBnZXQod2lkdGgpIHtcbiAgICAgICAgcmV0dXJuIGlzU3RyaW5nKHdpZHRoKVxuICAgICAgICAgID8gd2lkdGgubWF0Y2goL15cXHMqKFs8Pl0/KS8pWzFdIHx8IG51bGxcbiAgICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbXBvbmVudFZpc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCd2aXNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGVDb21wb25lbnQ/LmRlZmF1bHRWaXNpYmxlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnREaXNhYmxlZDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Rpc2FibGVkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybiBkaXNhYmxlZCB8fCB0aGlzLmRpc2FibGVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBmbGV4R3JvdygpIHtcbiAgICAgIC8vIEludGVycHJldCAnPjUwJScgYXMgJzUwJSwgZmxleC1ncm93OiAxYFxuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy53aWR0aE9wZXJhdG9yID09PSAnPicgfHxcbiAgICAgICAgdGhpcy53aWR0aCA9PT0gJ2ZpbGwnXG4gICAgICApXG4gICAgfSxcblxuICAgIGZsZXhTaHJpbmsoKSB7XG4gICAgICAvLyBJbnRlcnByZXQgJzw1MCUnIGFzICc1MCUsIGZsZXgtc2hyaW5rOiAxYFxuICAgICAgcmV0dXJuIHRoaXMud2lkdGhPcGVyYXRvciA9PT0gJzwnXG4gICAgfSxcblxuICAgIGZsZXhCYXNpcygpIHtcbiAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy53aWR0aFxuICAgICAgLy8gJ2F1dG8nID0gbm8gZml0dGluZzpcbiAgICAgIHJldHVybiBbbnVsbCwgJ2F1dG8nLCAnZmlsbCddLmluY2x1ZGVzKHdpZHRoKVxuICAgICAgICA/ICdhdXRvJ1xuICAgICAgICA6IC8lJC8udGVzdCh3aWR0aClcbiAgICAgICAgICA/IHBhcnNlRmxvYXQod2lkdGgpIC8gMTAwIC8vIHBlcmNlbnRhZ2UgLT4gZnJhY3Rpb25cbiAgICAgICAgICA6IC9bYS16XS8udGVzdCh3aWR0aClcbiAgICAgICAgICAgID8gd2lkdGggLy8gbmF0aXZlIHVuaXRzXG4gICAgICAgICAgICA6IHBhcnNlRnJhY3Rpb24od2lkdGgpIC8vIGZyYWN0aW9uXG4gICAgfSxcblxuICAgIGNvbWJpbmVkQmFzaXMoKSB7XG4gICAgICBjb25zdCB7IGFjY3VtdWxhdGVkQmFzaXMsIGZsZXhCYXNpcyB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzTnVtYmVyKGFjY3VtdWxhdGVkQmFzaXMpICYmIGlzTnVtYmVyKGZsZXhCYXNpcylcbiAgICAgICAgPyBhY2N1bXVsYXRlZEJhc2lzICogZmxleEJhc2lzXG4gICAgICAgIDogbnVsbFxuICAgIH0sXG5cbiAgICBjb250YWluZXJDbGFzc2VzKCkge1xuICAgICAgY29uc3QgeyBjbGFzczogY2xhc3NlcyB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIGNvbnN0IHByZWZpeCA9ICdkaXRvLWNvbnRhaW5lcidcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtgJHtwcmVmaXh9LS1zaW5nbGVgXTogdGhpcy5zaW5nbGUsXG4gICAgICAgICdkaXRvLWRpc2FibGVkJzogdGhpcy5jb21wb25lbnREaXNhYmxlZCxcbiAgICAgICAgJ2RpdG8taGFzLWVycm9ycyc6ICEhdGhpcy5lcnJvcnMsXG4gICAgICAgIFtgJHtwcmVmaXh9LS1sYWJlbC12ZXJ0aWNhbGBdOiB0aGlzLnZlcnRpY2FsTGFiZWxzLFxuICAgICAgICBbYCR7cHJlZml4fS0tb21pdC1zcGFjaW5nYF06IG9taXRTcGFjaW5nKHRoaXMuc2NoZW1hKSxcbiAgICAgICAgLi4uKGlzU3RyaW5nKGNsYXNzZXMpID8geyBbY2xhc3Nlc106IHRydWUgfSA6IGNsYXNzZXMpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNvbnRhaW5lclN0eWxlcygpIHtcbiAgICAgIGNvbnN0IHsgZmxleEJhc2lzLCBjb21iaW5lZEJhc2lzIH0gPSB0aGlzXG4gICAgICByZXR1cm4ge1xuICAgICAgICAnLS1ncm93JzogdGhpcy5mbGV4R3JvdyA/IDEgOiAwLFxuICAgICAgICAnLS1zaHJpbmsnOiB0aGlzLmZsZXhTaHJpbmsgPyAxIDogMCxcbiAgICAgICAgJy0tYmFzaXMnOiBpc051bWJlcihmbGV4QmFzaXMpID8gYCR7ZmxleEJhc2lzICogMTAwfSVgIDogZmxleEJhc2lzLFxuICAgICAgICAnLS1iYXNpcy1tb2JpbGUnOlxuICAgICAgICAgIGlzTnVtYmVyKGNvbWJpbmVkQmFzaXMpICYmIGNvbWJpbmVkQmFzaXMgPD0gMC4yNVxuICAgICAgICAgICAgPyBgJHtmbGV4QmFzaXMgKiAyMDB9JWBcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRDbGFzc2VzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tc2luZ2xlJzogdGhpcy5zaW5nbGUsXG4gICAgICAgIC4uLnRoaXMubGF5b3V0Q2xhc3Nlc1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBsYXlvdXRDbGFzc2VzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8td2lkdGgtZmlsbCc6IHRoaXMud2lkdGggPT09ICdmaWxsJyB8fCB0aGlzLmZsZXhCYXNpcyAhPT0gJ2F1dG8nLFxuICAgICAgICAnZGl0by13aWR0aC1ncm93JzogdGhpcy5mbGV4R3JvdyxcbiAgICAgICAgJ2RpdG8td2lkdGgtc2hyaW5rJzogdGhpcy5mbGV4U2hyaW5rXG4gICAgICB9XG4gICAgfSxcblxuICAgIGxhYmVsQ2xhc3NlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLWxhYmVsLS12aXNpYmxlJzogdGhpcy5pc0xhYmVsLFxuICAgICAgICAuLi50aGlzLmxheW91dENsYXNzZXNcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcGFuZWxFbnRyaWVzKCkge1xuICAgICAgcmV0dXJuIGdldEFsbFBhbmVsRW50cmllcyhcbiAgICAgICAgdGhpcy5hcGksXG4gICAgICAgIHRoaXMuc2NoZW1hLFxuICAgICAgICB0aGlzLmRhdGFQYXRoLFxuICAgICAgICB0aGlzLiRyZWZzLmNvbXBvbmVudCxcbiAgICAgICAgdGhpcy50YWJDb21wb25lbnRcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uRXJyb3JzKGVycm9ycykge1xuICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnNcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1jb250YWluZXIge1xuICAtLWdyb3c6IDA7XG4gIC0tc2hyaW5rOiAxO1xuICAtLWJhc2lzOiBhdXRvO1xuXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleDogdmFyKC0tZ3JvdykgdmFyKC0tc2hyaW5rKSB2YXIoLS1iYXNpcyk7XG4gIGZsZXgtZmxvdzogY29sdW1uO1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLy8gVG8gcHJldmVudCBsaXN0IHRhYmxlcyBmcm9tIGJsb3dpbmcgb3V0IG9mIHRoZWlyIGZsZXggYm94IGNvbnRhaW5lcnMuXG4gIG1heC13aWR0aDogMTAwJTtcbiAgLy8gQ2Fubm90IHVzZSBtYXJnaW4gaGVyZSBhcyBpdCBuZWVkcyB0byBiZSBwYXJ0IG9mIGJveC1zaXppbmcgZm9yXG4gIC8vIHBlcmNlbnRhZ2VzIGluIGZsZXgtYmFzaXMgdG8gd29yay5cbiAgcGFkZGluZzogdmFyKC0tY29udGFpbmVyLXBhZGRpbmcpO1xuXG4gID4gLmRpdG8tbGFiZWw6bm90KC5kaXRvLWxhYmVsLS12aXNpYmxlKTpvbmx5LWNoaWxkIHtcbiAgICAvLyBVc2VkIGUuZy4gd2hlbiBzb3VyY2VzIGhpZGUgdGhlbXNlbHZlcyBkdWUgdG8gbWF4RGVwdGgsIGJ1dCB0aGUgbGFiZWxcbiAgICAvLyBpcyByZW5kZXJlZCBhYm92ZSBpdC5cbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgJjplbXB0eSB7XG4gICAgcGFkZGluZzogMDtcbiAgfVxuXG4gIC5kaXRvLXBhbmUgPiAmIHtcbiAgICAuZGl0by1wYWdlLS13aWR0aC04MCAmIHtcbiAgICAgIGZsZXgtZ3JvdzogMTtcbiAgICAgIGZsZXgtYmFzaXM6IHZhcigtLWJhc2lzLW1vYmlsZSwgdmFyKC0tYmFzaXMpKTtcbiAgICAgIC8vIERFQlVHOiBiYWNrZ3JvdW5kOiB5ZWxsb3c7XG4gICAgfVxuXG4gICAgLmRpdG8tcGFnZS0td2lkdGgtNjAgJiB7XG4gICAgICBmbGV4LWJhc2lzOiBjYWxjKDIgKiB2YXIoLS1iYXNpcykpO1xuICAgICAgLy8gREVCVUc6IGJhY2tncm91bmQ6IG9yYW5nZTtcbiAgICB9XG5cbiAgICAuZGl0by1zaWRlYmFyLS13aWR0aC05OSAmIHtcbiAgICAgIGZsZXgtZ3JvdzogMTtcbiAgICAgIC8vIERFQlVHOiBiYWNrZ3JvdW5kOiB5ZWxsb3c7XG4gICAgfVxuXG4gICAgLmRpdG8tc2lkZWJhci0td2lkdGgtNjAgJiB7XG4gICAgICBmbGV4LWJhc2lzOiBjYWxjKDIgKiB2YXIoLS1iYXNpcykpO1xuICAgICAgLy8gREVCVUc6IGJhY2tncm91bmQ6IG9yYW5nZTtcbiAgICB9XG4gIH1cblxuICAmLS1zaW5nbGUge1xuICAgIGhlaWdodDogMTAwJTsgLy8gU28gdGhhdCBsaXN0IGJ1dHRvbnMgY2FuIGJlIHN0aWNreSBhdCB0aGUgYm90dG9tO1xuICB9XG5cbiAgJi0tbGFiZWwtdmVydGljYWwge1xuICAgIC8vIEZvciBwbGFpbiBjb21wb25lbnRzIHdpdGhvdXQgbGFiZWxzIGluIHJvd3Mgd2l0aCBvdGhlciBjb21wb25lbnRzIHRoYXRcbiAgICAvLyBoYXZlIGxhYmVscywgYWRkIHNvbWUgc3BhY2luZyB0byB0aGUgdG9wIHRvIGFsaWduIHdpdGggdGhlIG90aGVyXG4gICAgLy8gY29tcG9uZW50cyAoZS5nLiAgYnV0dG9ucyk6XG4gICAgPiAuZGl0by1jb21wb25lbnQ6Zmlyc3QtY2hpbGQ6bm90KC5kaXRvLXNlY3Rpb24sIC5kaXRvLWxpc3QsIC5kaXRvLW9iamVjdCkge1xuICAgICAgbWFyZ2luLXRvcDogJGlucHV0LWhlaWdodDtcbiAgICB9XG4gIH1cblxuICAmLS1vbWl0LXNwYWNpbmcge1xuICAgIHBhZGRpbmc6IDA7XG5cbiAgICA+IC5kaXRvLWxhYmVsIHtcbiAgICAgIG1hcmdpbjogJGZvcm0tc3BhY2luZy1oYWxmICRmb3JtLXNwYWNpbmctaGFsZiAwO1xuICAgIH1cbiAgfVxufVxuXG4vLyBOT1RFOiBUaGlzIGlzIG5vdCBuZXN0ZWQgaW5zaWRlIGAuZGl0by1jb250YWluZXJgIHNvIHRoYXQgb3RoZXJcbi8vIHR5cGUgY29tcG9uZW50cyBjYW4gb3ZlcnJpZGUgYC5kaXRvLXdpZHRoLWZpbGxgIGNsYXNzIChmaWx0ZXIgcHJlY2VkZW5jZSkuXG4uZGl0by1jb21wb25lbnQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgJi5kaXRvLXdpZHRoLWZpbGwge1xuICAgIHdpZHRoOiAxMDAlO1xuXG4gICAgJi5kaXRvLWNoZWNrYm94LFxuICAgICYuZGl0by1yYWRpby1idXR0b24ge1xuICAgICAgLy8gV2ViS2l0IGRvZXNuJ3QgbGlrZSBjaGFuZ2VkIHdpZHRoIG9uIGNoZWNrYm94ZXMgYW5kIHJhZGlvcywgb3ZlcnJpZGU6XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICB3aWR0aDogYXV0bztcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tdGFic1xuICB0ZW1wbGF0ZShcbiAgICB2LWZvcj1cIih0YWJTY2hlbWEsIGtleSkgaW4gdGFic1wiXG4gIClcbiAgICBhLmRpdG8tbGluayhcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEodGFiU2NoZW1hKVwiXG4gICAgICA6a2V5PVwia2V5XCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogbW9kZWxWYWx1ZSA9PT0ga2V5IH1cIlxuICAgICAgQGNsaWNrPVwiJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywga2V5KVwiXG4gICAgKSB7eyBnZXRMYWJlbCh0YWJTY2hlbWEsIGtleSkgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9UYWJzJywge1xuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZSddLFxuICBwcm9wczoge1xuICAgIHRhYnM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQHVzZSAnc2Fzczpjb2xvcic7XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10YWJzIHtcbiAgZGlzcGxheTogZmxleDtcblxuICAuZGl0by1saW5rIHtcbiAgICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgICB9XG5cbiAgICAvLyBXaGVuIGluIG1haW4gaGVhZGVyOlxuICAgIC5kaXRvLWhlYWRlciAmIHtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodDtcbiAgICAgIHBhZGRpbmc6ICR0YWItcGFkZGluZy12ZXIgJHRhYi1wYWRkaW5nLWhvcjtcbiAgICAgIG1hcmdpbi1sZWZ0OiAkdGFiLW1hcmdpbjtcbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICR0YWItcmFkaXVzO1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICR0YWItcmFkaXVzO1xuXG4gICAgICAmOmFjdGl2ZSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVzdDtcbiAgICAgIH1cblxuICAgICAgJi5kaXRvLWFjdGl2ZSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVzdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBXaGVuIGluc2lkZSBhIGlubGluZSBzY2hlbWE6XG4gICAgLmRpdG8tc2NoZW1hLWlubGluZWQgJixcbiAgICAuZGl0by1sYWJlbCAmIHtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVyO1xuICAgICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmc7XG4gICAgICBtYXJnaW4tbGVmdDogLSRib3JkZXItd2lkdGg7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gICAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJHRhYi1yYWRpdXM7XG4gICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICR0YWItcmFkaXVzO1xuICAgICAgfVxuXG4gICAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJHRhYi1yYWRpdXM7XG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkdGFiLXJhZGl1cztcbiAgICAgIH1cblxuICAgICAgJjphY3RpdmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlcjtcbiAgICAgIH1cblxuICAgICAgJi5kaXRvLWFjdGl2ZSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgICAgIGJvcmRlci1jb2xvcjogY29sb3IuYWRqdXN0KCRjb2xvci1hY3RpdmUsICRsaWdodG5lc3M6IC0xMCUpO1xuICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5kaXRvLXNjaGVtYSAmIHtcbiAgICAvLyBQdXNoIGNsaXBib2FyZCB0byB0aGUgcmlnaHQgaW4gdGhlIGZsZXggbGF5b3V0LCBzZWU6XG4gICAgLy8gaHR0cHM6Ly9jb2RlcGVuLmlvL3Rob2xleC9wZW4vaHZlQngvXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG5cbiAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4vLy0gT25seSBzaG93IHBhbmVscyBpbiB0YWJzIHdoZW4gdGhlIHRhYnMgYXJlIGFsc28gdmlzaWJsZS5cbmNvbXBvbmVudC5kaXRvLXBhbmVsKFxuICB2LWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKHBhbmVsU2NoZW1hKVwiXG4gIHYtc2hvdz1cInZpc2libGUgJiYgKCFwYW5lbFRhYkNvbXBvbmVudCB8fCBwYW5lbFRhYkNvbXBvbmVudC52aXNpYmxlKVwiXG4gIDppcz1cInBhbmVsVGFnXCJcbiAgQHN1Ym1pdC5wcmV2ZW50XG4pXG4gIERpdG9TY2hlbWEuZGl0by1wYW5lbF9fc2NoZW1hKFxuICAgIDpzY2hlbWE9XCJwYW5lbFNjaGVtYVwiXG4gICAgOmRhdGFTY2hlbWE9XCJwYW5lbERhdGFTY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgIDpkYXRhPVwicGFuZWxEYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICBwYWRkaW5nPVwibmVzdGVkXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgOmhhc093bkRhdGE9XCJoYXNPd25EYXRhXCJcbiAgICBnZW5lcmF0ZUxhYmVsc1xuICApXG4gICAgdGVtcGxhdGUoI2JlZm9yZSlcbiAgICAgIGgyLmRpdG8tcGFuZWxfX2hlYWRlcig6Y2xhc3M9XCJ7ICdkaXRvLXBhbmVsX19oZWFkZXItLXN0aWNreSc6IHN0aWNreSB9XCIpXG4gICAgICAgIHNwYW4ge3sgZ2V0TGFiZWwoc2NoZW1hKSB9fVxuICAgICAgICBEaXRvQnV0dG9ucy5kaXRvLWJ1dHRvbnMtc21hbGwoXG4gICAgICAgICAgOmJ1dHRvbnM9XCJwYW5lbEJ1dHRvblNjaGVtYXNcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgICAgIDpkYXRhPVwicGFuZWxEYXRhXCJcbiAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgIClcbiAgICB0ZW1wbGF0ZSgjYnV0dG9ucylcbiAgICAgIERpdG9CdXR0b25zKFxuICAgICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJwYW5lbERhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgQ29udGV4dE1peGluIGZyb20gJy4uL21peGlucy9Db250ZXh0TWl4aW4uanMnXG5pbXBvcnQgVmFsaWRhdG9yTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1ZhbGlkYXRvck1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0QnV0dG9uU2NoZW1hcyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1BhbmVsJywge1xuICBtaXhpbnM6IFtDb250ZXh0TWl4aW4sIFZhbGlkYXRvck1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcGFuZWxDb21wb25lbnQ6ICgpID0+IHRoaXMsXG4gICAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiB0aGlzLnBhbmVsVGFiQ29tcG9uZW50XG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGFuZWxUYWJDb21wb25lbnQ6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBvd25EYXRhOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbmVzdGVkKCkge1xuICAgICAgLy8gRm9yIGBDb250ZXh0TWl4aW5gOlxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9LFxuXG4gICAgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICB0YWJDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYW5lbFRhYkNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXModGhpcy5zY2hlbWEuYnV0dG9ucylcbiAgICB9LFxuXG4gICAgcGFuZWxCdXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXModGhpcy5zY2hlbWEucGFuZWxCdXR0b25zKVxuICAgIH0sXG5cbiAgICBoYXNPd25EYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5vd25EYXRhXG4gICAgfSxcblxuICAgIHBhbmVsRGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm93bkRhdGEgfHwgdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIHBhbmVsU2NoZW1hKCkge1xuICAgICAgaWYgKHRoaXMuaGFzT3duRGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zY2hlbWFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbW92ZSBgZGF0YWAgZnJvbSB0aGUgc2NoZW1hLCBzbyB0aGF0IERpdG9TY2hlbWEgaXNuJ3QgdXNpbmcgaXQgdG9cbiAgICAgICAgLy8gcHJvZHVjZSBpdHMgb3duIGRhdGEuIFNlZSAkZmlsdGVycyBwYW5lbCBmb3IgbW9yZSBkZXRhaWxzIG9uIGRhdGEuXG4gICAgICAgIGNvbnN0IHsgZGF0YSwgLi4uc2NoZW1hIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgICByZXR1cm4gc2NoZW1hXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBhbmVsVGFnKCkge1xuICAgICAgLy8gUGFuZWxzIHRoYXQgcHJvdmlkZSB0aGVpciBvd24gZGF0YSBuZWVkIHRoZWlyIG93biBmb3JtLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzT3duRGF0YSA/ICdmb3JtJyA6ICdkaXYnXG4gICAgfSxcblxuICAgIHBhbmVsRGF0YVNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc093bkRhdGEgPyB0aGlzLnNjaGVtYSA6IHRoaXMuc2NoZW1hQ29tcG9uZW50LnNjaGVtYVxuICAgIH0sXG5cbiAgICBwYW5lbERhdGFQYXRoKCkge1xuICAgICAgLy8gSWYgdGhlIHBhbmVsIHByb3ZpZGVzIGl0cyBvd24gZGF0YSwgdGhlbiBpdCBuZWVkcyB0byBwcmVmaXggYWxsXG4gICAgICAvLyBjb21wb25lbnRzIHdpdGggaXRzIGRhdGEtcGF0aCwgYnV0IGlmIGl0IHNoYXJlcyBkYXRhIHdpdGggdGhlIHNjaGVtYVxuICAgICAgLy8gY29tcG9uZW50LCB0aGVuIGl0IHNob3VsZCBzaGFyZSB0aGUgZGF0YS1wYXRoIG5hbWUgc3BhY2UgdG9vLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzT3duRGF0YSA/IHRoaXMuZGF0YVBhdGggOiB0aGlzLnNjaGVtYUNvbXBvbmVudC5kYXRhUGF0aFxuICAgIH0sXG5cbiAgICB2aXNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndmlzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSksXG5cbiAgICBzdGlja3k6IGdldFNjaGVtYUFjY2Vzc29yKCdzdGlja3knLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIodHJ1ZSlcbiAgICAvLyBOT1RFOiBUaGlzIGlzIG5vdCB0aGUgc2FtZSBhcyBgc2NoZW1hLmRhdGFgIGhhbmRsaW5nIGluIERpdG9TY2hlbWEsXG4gICAgLy8gd2hlcmUgdGhlIGRhdGEgaXMgYWRkZWQgdG8gdGhlIGFjdHVhbCBjb21wb25lbnQuXG4gICAgY29uc3QgeyBkYXRhIH0gPSB0aGlzLnNjaGVtYVxuICAgIGlmIChkYXRhKSB7XG4gICAgICB0aGlzLm93bkRhdGEgPSBpc0Z1bmN0aW9uKGRhdGEpXG4gICAgICAgID8gZGF0YSh0aGlzLmNvbnRleHQpXG4gICAgICAgIDogZGF0YVxuICAgIH1cbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIC8vIFJlZ2lzdGVyIHRoZSBwYW5lbHMgc28gdGhhdCBvdGhlciBjb21wb25lbnRzIGNhbiBmaW5kIHRoZW0gYnkgdGhlaXJcbiAgICAgIC8vIGRhdGEtcGF0aCwgZS5nLiBpbiBUeXBlTGlzdC5vbkZpbHRlckVycm9ycygpXG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5fcmVnaXN0ZXJQYW5lbCh0aGlzLCBhZGQpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tcGFuZWwge1xuICAmOm5vdCg6bGFzdC1jaGlsZCkge1xuICAgIG1hcmdpbi1ib3R0b206ICRjb250ZW50LXBhZGRpbmc7XG4gIH1cblxuICAmX19oZWFkZXIge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuICAgIGJhY2tncm91bmQ6ICRidXR0b24tY29sb3I7XG4gICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcblxuICAgICYtLXN0aWNreSB7XG4gICAgICAkbWFyZ2luOiAkaW5wdXQtaGVpZ2h0LWZhY3RvciAqICRsaW5lLWhlaWdodCAqICRmb250LXNpemUtc21hbGwgK1xuICAgICAgICAkZm9ybS1zcGFjaW5nO1xuXG4gICAgICBwb3NpdGlvbjogc3RpY2t5O1xuICAgICAgdG9wOiAkY29udGVudC1wYWRkaW5nO1xuICAgICAgbWFyZ2luLWJvdHRvbTogJG1hcmdpbjtcbiAgICAgIHotaW5kZXg6IDE7XG5cbiAgICAgICYgKyAqIHtcbiAgICAgICAgbWFyZ2luLXRvcDogLSRtYXJnaW47XG4gICAgICB9XG5cbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgaGVpZ2h0OiAkY29udGVudC1wYWRkaW5nO1xuICAgICAgICB0b3A6IC0kY29udGVudC1wYWRkaW5nO1xuICAgICAgICBtYXJnaW46IC0kYm9yZGVyLXdpZHRoO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5kaXRvLWJ1dHRvbnMge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgcmlnaHQ6ICRpbnB1dC1wYWRkaW5nLXZlcjtcbiAgICAgIHRvcDogNTAlO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgIH1cbiAgfVxuXG4gICZfX3NjaGVtYSB7XG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtYWxsO1xuICAgIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmQ7XG4gICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICAgIGJvcmRlci10b3A6IDA7XG4gICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuXG4gICAgPiAuZGl0by1zY2hlbWEtY29udGVudCB7XG4gICAgICAuZGl0by1vYmplY3Qge1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICB9XG5cbiAgICAgID4gLmRpdG8tYnV0dG9ucyB7XG4gICAgICAgIC0tYnV0dG9uLW1hcmdpbjogI3skZm9ybS1zcGFjaW5nfTtcblxuICAgICAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nO1xuXG4gICAgICAgIC5kaXRvLWNvbnRhaW5lciB7XG4gICAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC5kaXRvLWxhYmVsIHtcbiAgICAgIGxhYmVsIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tcGFuZWxzKFxuICB2LWlmPVwicGFuZWxzLmxlbmd0aCA+IDBcIlxuKVxuICB0ZW1wbGF0ZShcbiAgICB2LWZvcj1cInsgc2NoZW1hLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50IH0gaW4gcGFuZWxzXCJcbiAgKVxuICAgIERpdG9QYW5lbChcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEoc2NoZW1hKVwiXG4gICAgICA6a2V5PVwiZ2V0UGFuZWxLZXkoZGF0YVBhdGgsIHRhYkNvbXBvbmVudClcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoc2NoZW1hLm5hbWUpXCJcbiAgICAgIDpkaXNhYmxlZD1cInNjaGVtYS5kaXNhYmxlZCA/PyBkaXNhYmxlZFwiXG4gICAgICA6cGFuZWxUYWJDb21wb25lbnQ9XCJ0YWJDb21wb25lbnRcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IENvbnRleHRNaXhpbiBmcm9tICcuLi9taXhpbnMvQ29udGV4dE1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9QYW5lbHMnLCB7XG4gIG1peGluczogW0NvbnRleHRNaXhpbl0sXG5cbiAgcHJvcHM6IHtcbiAgICBwYW5lbHM6IHsgdHlwZTogQXJyYXksIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbmVzdGVkKCkge1xuICAgICAgLy8gRm9yIGBDb250ZXh0TWl4aW5gOlxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRQYW5lbEtleShkYXRhUGF0aCwgdGFiQ29tcG9uZW50KSB7XG4gICAgICAvLyBBbGxvdyBzZXBhcmF0ZSB0YWJzIHRvIHVzZSBwYW5lbHMgb2YgdGhlIHNhbWUgbmFtZSwgYnlcbiAgICAgIC8vIHByZWZpeGluZyB0aGVpciBrZXkgd2l0aCB0aGUgdGFiIG5hbWUuXG4gICAgICByZXR1cm4gdGFiQ29tcG9uZW50ID8gYCR7dGFiQ29tcG9uZW50LnRhYn1fJHtkYXRhUGF0aH1gIDogZGF0YVBhdGhcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1wYW5lbHMge1xuICBtYXJnaW46ICRjb250ZW50LXBhZGRpbmc7XG4gIG1hcmdpbi1sZWZ0OiAkZm9ybS1zcGFjaW5nO1xufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1idXR0b25zKFxuICB2LWlmPVwiYnV0dG9uU2NoZW1hcyB8fCBoYXNTbG90Q29udGVudCgkc2xvdHMuZGVmYXVsdClcIlxuKVxuICB0ZW1wbGF0ZShcbiAgICB2LWZvcj1cIihidXR0b25TY2hlbWEsIGJ1dHRvbkRhdGFQYXRoKSBpbiBidXR0b25TY2hlbWFzXCJcbiAgKVxuICAgIERpdG9Db250YWluZXIoXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKGJ1dHRvblNjaGVtYSlcIlxuICAgICAgOmtleT1cImJ1dHRvbkRhdGFQYXRoXCJcbiAgICAgIDpzY2hlbWE9XCJidXR0b25TY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoYnV0dG9uU2NoZW1hLm5hbWUpXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPVwidm5vZGUgb2YgJHNsb3RzLmRlZmF1bHQ/LigpXCJcbiAgKVxuICAgIC8vLSBSZW5kZXIgZWFjaCBub2RlIGluIHRoZSBkZWZhdWx0IHNsb3QgdGhyb3VnaCBgZGl0by12bm9kZWAsXG4gICAgLy8tIHNvIGl0IGNhbiBiZSB3cmFwcGVkIGluIGEgYC5kaXRvLWNvbnRhaW5lcmAgY2xhc3MuXG4gICAgLmRpdG8tY29udGFpbmVyKFxuICAgICAgdi1pZj1cImhhc1ZOb2RlQ29udGVudCh2bm9kZSlcIlxuICAgIClcbiAgICAgIERpdG9Wbm9kZSg6dm5vZGU9XCJ2bm9kZVwiKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgQ29udGV4dE1peGluIGZyb20gJy4uL21peGlucy9Db250ZXh0TWl4aW4uanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBoYXNTbG90Q29udGVudCwgaGFzVk5vZGVDb250ZW50IH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0J1dHRvbnMnLCB7XG4gIG1peGluczogW0NvbnRleHRNaXhpbl0sXG5cbiAgcHJvdmlkZToge1xuICAgICR0YWJDb21wb25lbnQ6ICgpID0+IG51bGxcbiAgfSxcblxuICBwcm9wczoge1xuICAgIGJ1dHRvbnM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBuZXN0ZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICAvLyBDb21wdXRlIGEgYnV0dG9ucyBsaXN0IHdoaWNoIGhhcyB0aGUgZGF0YVBhdGggYmFrZWQgaW50byBpdHMga2V5cy5cbiAgICAgIGNvbnN0IHsgZGF0YVBhdGgsIGJ1dHRvbnMgfSA9IHRoaXNcbiAgICAgIHJldHVybiBidXR0b25zXG4gICAgICAgID8gT2JqZWN0LnZhbHVlcyhidXR0b25zKS5yZWR1Y2UoKHNjaGVtYXMsIGJ1dHRvbikgPT4ge1xuICAgICAgICAgICAgc2NoZW1hc1thcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgYnV0dG9uLm5hbWUpXSA9IGJ1dHRvblxuICAgICAgICAgICAgcmV0dXJuIHNjaGVtYXNcbiAgICAgICAgICB9LCB7fSlcbiAgICAgICAgOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYXNTbG90Q29udGVudCxcbiAgICBoYXNWTm9kZUNvbnRlbnRcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbi5kaXRvLWJ1dHRvbnMge1xuICA+IC5kaXRvLWNvbnRhaW5lciB7XG4gICAgcGFkZGluZzogMDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4vLy0gU2V0IGBAY2xpY2suc3RvcGAgdG8gcHJldmVudCBjbGljayBldmVudHMgZnJvbSBidWJibGluZyB0byBkaXRvLWxhYmVsLlxuRGl0b0J1dHRvbnMuZGl0by1lZGl0LWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICA6YnV0dG9ucz1cImJ1dHRvbnNcIlxuICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gIDpkYXRhPVwiZGF0YVwiXG4gIDptZXRhPVwibWV0YVwiXG4gIDpzdG9yZT1cInN0b3JlXCJcbiAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gIEBjbGljay5zdG9wXG4pXG4gIC8vLSBGaXJlZm94IGRvZXNuJ3QgbGlrZSA8YnV0dG9uPiBoZXJlLCBzbyB1c2UgPGE+IGluc3RlYWQ6XG4gIGEuZGl0by1idXR0b24oXG4gICAgdi1pZj1cImRyYWdnYWJsZVwiXG4gICAgOmNsYXNzPVwieyAnZGl0by1kaXNhYmxlZCc6IGlzRHJhZ2dhYmxlRGlzYWJsZWQgfVwiXG4gICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gIClcbiAgUm91dGVyTGluay5kaXRvLWJ1dHRvbihcbiAgICB2LWlmPVwiZWRpdGFibGVcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tZGlzYWJsZWQnOiBpc0VkaXRhYmxlRGlzYWJsZWQgfVwiXG4gICAgOnRvPVwiZWRpdFBhdGggPyB7IHBhdGg6IGVkaXRQYXRoIH0gOiB7fVwiXG4gICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5lZGl0KVwiXG4gIClcbiAgRGl0b0NyZWF0ZUJ1dHRvbihcbiAgICB2LWlmPVwiY3JlYXRhYmxlXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICA6cGF0aD1cImNyZWF0ZVBhdGhcIlxuICAgIDp2ZXJiPVwidmVyYnMuY3JlYXRlXCJcbiAgICA6dGV4dD1cImNyZWF0ZUJ1dHRvblRleHRcIlxuICAgIDpkaXNhYmxlZD1cImlzQ3JlYXRhYmxlRGlzYWJsZWRcIlxuICApXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICB2LWlmPVwiZGVsZXRhYmxlXCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICA6ZGlzYWJsZWQ9XCJpc0RlbGV0YWJsZURpc2FibGVkXCJcbiAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgIEBjbGljaz1cIiRlbWl0KCdkZWxldGUnKVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IENvbnRleHRNaXhpbiBmcm9tICcuLi9taXhpbnMvQ29udGV4dE1peGluLmpzJ1xuaW1wb3J0IHsgY2FwaXRhbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0VkaXRCdXR0b25zJywge1xuICBtaXhpbnM6IFtDb250ZXh0TWl4aW5dLFxuICBlbWl0czogWydkZWxldGUnXSxcblxuICBwcm9wczoge1xuICAgIGJ1dHRvbnM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbmVzdGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkcmFnZ2FibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNyZWF0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRlbGV0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGNyZWF0ZVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvcm1MYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hLmZvcm0pXG4gICAgfSxcblxuICAgIGlzRHJhZ2dhYmxlRGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZCB8fCAhdGhpcy5oYXNTY2hlbWFPcHRpb24oJ2RyYWdnYWJsZScpXG4gICAgfSxcblxuICAgIGlzRGVsZXRhYmxlRGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZCB8fCAhdGhpcy5oYXNTY2hlbWFPcHRpb24oJ2RlbGV0YWJsZScpXG4gICAgfSxcblxuICAgIGlzRWRpdGFibGVEaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuZGlzYWJsZWQgfHxcbiAgICAgICAgIXRoaXMuZWRpdFBhdGggfHxcbiAgICAgICAgIXRoaXMuaGFzU2NoZW1hT3B0aW9uKCdlZGl0YWJsZScpXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzQ3JlYXRhYmxlRGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmRpc2FibGVkIHx8XG4gICAgICAgICF0aGlzLmNyZWF0ZVBhdGggfHxcbiAgICAgICAgIXRoaXMuaGFzU2NoZW1hT3B0aW9uKCdjcmVhdGFibGUnKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBjcmVhdGVCdXR0b25UZXh0KCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgLy8gQWxsb3cgc2NoZW1hIHRvIG92ZXJyaWRlIGNyZWF0ZSBidXR0b24gdGhyb3VnaCBjcmVhdGFibGUgb2JqZWN0OlxuICAgICAgICB0aGlzLnNjaGVtYS5jcmVhdGFibGU/LmxhYmVsIHx8IChcbiAgICAgICAgICAvLyBBdXRvLWdlbmVyYXRlIGNyZWF0ZSBidXR0b24gbGFiZWxzIGZyb20gZnJvbSBsYWJlbHMgZm9yIGxpc3RcbiAgICAgICAgICAvLyBzb3VyY2VzIHdpdGggb25seSBvbmUgZm9ybTpcbiAgICAgICAgICB0aGlzLmZvcm1MYWJlbCAmJlxuICAgICAgICAgIGAke2NhcGl0YWxpemUodGhpcy52ZXJicy5jcmVhdGUpfSAke3RoaXMuZm9ybUxhYmVsfWBcbiAgICAgICAgKSB8fFxuICAgICAgICBudWxsXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYXNTY2hlbWFPcHRpb24obmFtZSkge1xuICAgICAgLy8gQWxsIG9wdGlvbnMgY2FuIGJlIGRpc2FibGVkIG9uIGEgcGVyLWZvcm0gYmFzaXMgYnkgc2V0dGluZ1xuICAgICAgLy8gYHNjaGVtYVtuYW1lXWAgdG8gYGZhbHNlYCBvciBhIGNhbGxiYWNrIHJldHVybmluZyBgZmFsc2VgLlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2NoZW1hVmFsdWUobmFtZSwge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICBkZWZhdWx0OiB0cnVlXG4gICAgICB9KVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbi5kaXRvLWVkaXQtYnV0dG9ucyB7XG4gIC8vIE92ZXJyaWRlIGN1cnNvciBmcm9tIGNvbGxhcHNpYmxlIGRpdG8tbGFiZWw6XG4gIGN1cnNvcjogZGVmYXVsdDtcbiAgZmxleDogbm9uZTtcbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tY3JlYXRlLWJ1dHRvblxuICBidXR0b24uZGl0by1idXR0b24oXG4gICAgdi1pZj1cImNyZWF0YWJsZUZvcm1cIlxuICAgIDp0eXBlPVwiaXNJbmxpbmVkID8gJ2J1dHRvbicgOiAnc3VibWl0J1wiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYilcIlxuICAgIEBjbGljaz1cImNyZWF0ZUl0ZW0oY3JlYXRhYmxlRm9ybSlcIlxuICApIHt7IHRleHQgfX1cbiAgdGVtcGxhdGUoXG4gICAgdi1lbHNlLWlmPVwiY3JlYXRhYmxlRm9ybXNcIlxuICApXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmIpXCJcbiAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24oKVwiXG4gICAgKSB7eyB0ZXh0IH19XG4gICAgdWwuZGl0by1wdWxsZG93big6Y2xhc3M9XCJ7ICdkaXRvLW9wZW4nOiBwdWxsZG93bi5vcGVuIH1cIilcbiAgICAgIGxpKFxuICAgICAgICB2LWZvcj1cIihmb3JtLCB0eXBlKSBpbiBjcmVhdGFibGVGb3Jtc1wiXG4gICAgICApXG4gICAgICAgIGEoXG4gICAgICAgICAgdi1zaG93PVwic2hvdWxkU2hvd1NjaGVtYShmb3JtKVwiXG4gICAgICAgICAgOmNsYXNzPVwiZ2V0Rm9ybUNsYXNzKGZvcm0sIHR5cGUpXCJcbiAgICAgICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKHR5cGUpXCJcbiAgICAgICAgICBAbW91c2V1cD1cIm9uUHVsbGRvd25Nb3VzZVVwKHR5cGUpXCJcbiAgICAgICAgKSB7eyBnZXRMYWJlbChmb3JtKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgQ29udGV4dE1peGluIGZyb20gJy4uL21peGlucy9Db250ZXh0TWl4aW4uanMnXG5pbXBvcnQgUHVsbGRvd25NaXhpbiBmcm9tICcuLi9taXhpbnMvUHVsbGRvd25NaXhpbi5qcydcbmltcG9ydCB7IGdldEZvcm1TY2hlbWFzLCBpc0lubGluZWQgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0NyZWF0ZUJ1dHRvbicsIHtcbiAgbWl4aW5zOiBbQ29udGV4dE1peGluLCBQdWxsZG93bk1peGluXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgLy8gVGhlIG5leHQgZm91ciBwcm9wcyBhcmUgdGhlcmUgZm9yIGBEaXRvQ29udGV4dGAgYW5kIHRoZSBgY29udGV4dCgpYFxuICAgIC8vIGdldHRlciBpbiBgRGl0b01peGluYC5cbiAgICAvLyBUT0RPOiBTaG91bGQgdGhleSBiZSBtb3ZlZCB0byBzaGFyZWQgbWl4aW4gdGhhdCBkZWZpbmVzIHRoZW0gYXMgcmVxdWlyZWRcbiAgICAvLyBhbmQgYWxzbyBwcm92aWRlcyB0aGUgYGNvbnRleHQoKWAgZ2V0dGVyLCBwZXJoYXBzIGBDb250ZXh0TWl4aW5gP1xuICAgIC8vIGBzY2hlbWFgIGNvdWxkIGJlIGluY2x1ZGVkIGFzIHdlbGwsIGFuZCBgQ29udGV4dE1peGluYCBjb3VsZCBiZSB1c2VkIGluXG4gICAgLy8gYERpdG9Gb3JtYCwgYERpdG9WaWV3YCwgYERpdG9QYW5lbGAsIGBEaXRvU2NoZW1hYCwgYERpdG9FZGl0QnV0dG9uc2AsXG4gICAgLy8gZXRjPyBCdXQgdGhlIHByb2JsZW0gd2l0aCB0aGUgcm9vdCBjb21wb25lbnRzIGlzIHRoYXQgdGhleSBkb24ndCBoYXZlXG4gICAgLy8gdGhlc2UgcHJvcHMuIFdlIGNvdWxkIGFkZCBhIGBjb250ZXh0QXR0cmlidXRlcygpYCBnZXR0ZXIgZm9yIGVhc3kgcGFzc2luZ1xuICAgIC8vIG9uIGFzIGB2LWJpbmQ9XCJjb250ZXh0QXR0cmlidXRlc1wiYC5cbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbmVzdGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgcGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdmVyYjogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGV4dDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb3JtcygpIHtcbiAgICAgIHJldHVybiBnZXRGb3JtU2NoZW1hcyh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KVxuICAgIH0sXG5cbiAgICBjcmVhdGFibGVGb3JtcygpIHtcbiAgICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyh0aGlzLmZvcm1zKS5maWx0ZXIoXG4gICAgICAgIChbLCBmb3JtXSkgPT4gdGhpcy5pc0Zvcm1DcmVhdGFibGUoZm9ybSlcbiAgICAgIClcbiAgICAgIHJldHVybiBlbnRyaWVzLmxlbmd0aCA+IDBcbiAgICAgICAgPyBPYmplY3QuZnJvbUVudHJpZXMoZW50cmllcylcbiAgICAgICAgOiBudWxsXG4gICAgfSxcblxuICAgIGNyZWF0YWJsZUZvcm0oKSB7XG4gICAgICBjb25zdCBmb3JtcyA9IHRoaXMuY3JlYXRhYmxlRm9ybXNcbiAgICAgIHJldHVybiBmb3JtcyAmJiBPYmplY3Qua2V5cyhmb3JtcykubGVuZ3RoID09PSAxICYmIGZvcm1zLmRlZmF1bHQgfHwgbnVsbFxuICAgIH0sXG5cbiAgICBpc0lubGluZWQoKSB7XG4gICAgICByZXR1cm4gaXNJbmxpbmVkKHRoaXMuc2NoZW1hKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaXNGb3JtQ3JlYXRhYmxlKGZvcm0pIHtcbiAgICAgIC8vIEZvcm1zIGNhbiBiZSBleGNsdWRlZCBmcm9tIHRoZSBsaXN0IGJ5IHByb3ZpZGluZyBgaWY6IGZhbHNlYCBvclxuICAgICAgLy8gYGNyZWF0YWJsZTogZmFsc2VgLlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5zaG91bGRSZW5kZXJTY2hlbWEoZm9ybSkgJiZcbiAgICAgICAgdGhpcy5nZXRTY2hlbWFWYWx1ZSgnY3JlYXRhYmxlJywge1xuICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgICBzY2hlbWE6IGZvcm1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgY3JlYXRlSXRlbShmb3JtLCB0eXBlID0gbnVsbCkge1xuICAgICAgaWYgKCF0aGlzLnNob3VsZERpc2FibGVTY2hlbWEoZm9ybSkpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJbmxpbmVkKSB7XG4gICAgICAgICAgdGhpcy5zb3VyY2VDb21wb25lbnQuY3JlYXRlSXRlbShmb3JtLCB0eXBlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHtcbiAgICAgICAgICAgIHBhdGg6IGAke3RoaXMucGF0aH0vY3JlYXRlYCxcbiAgICAgICAgICAgIHF1ZXJ5OiB7IHR5cGUgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGFsbG93ZWQgdG8gY3JlYXRlIGl0ZW0gZm9yIGdpdmVuIGZvcm0nKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRGb3JtQ2xhc3MoZm9ybSwgdHlwZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2BkaXRvLXR5cGUtJHt0eXBlfWBdOiB0cnVlLFxuICAgICAgICAnZGl0by1kaXNhYmxlZCc6IHRoaXMuc2hvdWxkRGlzYWJsZVNjaGVtYShmb3JtKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duU2VsZWN0KHR5cGUpIHtcbiAgICAgIHRoaXMuY3JlYXRlSXRlbSh0aGlzLmZvcm1zW3R5cGVdLCB0eXBlKVxuICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4oZmFsc2UpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLmRpdG8tY3JlYXRlLWJ1dHRvbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAuZGl0by1wdWxsZG93biB7XG4gICAgcmlnaHQ6IDA7XG5cbiAgICAuZGl0by1idXR0b25zLXN0aWNreSAmIHtcbiAgICAgIHRvcDogdW5zZXQ7XG4gICAgICByaWdodDogdW5zZXQ7XG4gICAgICBib3R0b206IDA7XG4gICAgICBsZWZ0OiAwO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1jbGlwYm9hcmQuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZChcbiAgdi1pZj1cImNsaXBib2FyZFwiXG4pXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1jb3B5KFxuICAgIHJlZj1cImNvcHlEYXRhXCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICB0aXRsZT1cIkNvcHkgRGF0YVwiXG4gICAgOmRpc2FibGVkPVwiIWNvcHlFbmFibGVkXCJcbiAgICBAY2xpY2s9XCJvbkNvcHlcIlxuICApXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1wYXN0ZShcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICB0aXRsZT1cIlBhc3RlIERhdGFcIlxuICAgIDpkaXNhYmxlZD1cIiFwYXN0ZUVuYWJsZWRcIlxuICAgIEBjbGljaz1cIm9uUGFzdGVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaXNPYmplY3QsIGNsb25lLCBkZWluZGVudCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvQ2xpcGJvYXJkJywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgcHJvcHM6IHtcbiAgICBjbGlwYm9hcmQ6IHsgdHlwZTogW0Jvb2xlYW4sIE9iamVjdF0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvcHlFbmFibGVkOiBmYWxzZSxcbiAgICAgIHBhc3RlRW5hYmxlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjbGlwYm9hcmRPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KHRoaXMuY2xpcGJvYXJkKSA/IHRoaXMuY2xpcGJvYXJkIDoge31cbiAgICB9LFxuXG4gICAgY29weURhdGEoKSB7XG4gICAgICBjb25zdCB7IGNvcHkgfSA9IHRoaXMuY2xpcGJvYXJkT3B0aW9uc1xuICAgICAgcmV0dXJuIGNvcHlcbiAgICAgICAgPyBjbGlwYm9hcmREYXRhID0+XG4gICAgICAgICAgICBjb3B5LmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgY2xpcGJvYXJkRGF0YSB9KSlcbiAgICAgICAgOiBjbGlwYm9hcmREYXRhID0+IGNsb25lKGNsaXBib2FyZERhdGEpXG4gICAgfSxcblxuICAgIHBhc3RlRGF0YSgpIHtcbiAgICAgIGNvbnN0IHsgcGFzdGUgfSA9IHRoaXMuY2xpcGJvYXJkT3B0aW9uc1xuICAgICAgcmV0dXJuIHBhc3RlXG4gICAgICAgID8gY2xpcGJvYXJkRGF0YSA9PlxuICAgICAgICAgICAgcGFzdGUuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBjbGlwYm9hcmREYXRhIH0pKVxuICAgICAgICA6IGNsaXBib2FyZERhdGEgPT4gY2xpcGJvYXJkRGF0YVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIC8vIENoZWNrIHJpZ2h0IGF3YXkgYWxzbyBpbiBjYXNlIHRoZXJlJ3MgYWxyZWFkeSBkYXRhIChlLmcuIGNyZWF0ZSBmb3JtKTpcbiAgICAncGFyZW50Q29tcG9uZW50Lmhhc0RhdGEnOiB7XG4gICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICBoYW5kbGVyOiAndXBkYXRlQ29weSdcbiAgICB9LFxuXG4gICAgJ2FwcFN0YXRlLmNsaXBib2FyZERhdGEnOiB7XG4gICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICBoYW5kbGVyOiAndXBkYXRlUGFzdGUnXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgLy8gQ2hlY2sgY2xpcGJvYXJkIGNvbnRlbnQgd2hlbmV2ZXIgc29tZXRoaW5nIGdldHMgY29waWVkIG9yIHRoZSB3aW5kb3cgZ2V0c1xuICAgIC8vIChyZSlhY3RpdmF0ZWQsIGFzIHRob3NlIGFyZSB0aGUgbW9tZW50cyB3aGVuIHRoZSBjbGlwYm9hcmQgY2FuIGNoYW5nZTpcbiAgICB0aGlzLmRvbU9uKGRvY3VtZW50LCB7IGNvcHk6IHRoaXMudXBkYXRlUGFzdGUgfSlcbiAgICB0aGlzLmRvbU9uKHdpbmRvdywgeyBmb2N1czogdGhpcy51cGRhdGVQYXN0ZSB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBjaGVja0NsaXBib2FyZERhdGEoY2xpcGJvYXJkRGF0YSkge1xuICAgICAgY29uc3QgeyAkc2NoZW1hLCAuLi5kYXRhIH0gPSBjbGlwYm9hcmREYXRhIHx8IHt9XG4gICAgICByZXR1cm4gJHNjaGVtYSA9PT0gdGhpcy5zY2hlbWEubmFtZSA/IGRhdGEgOiBudWxsXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENsaXBib2FyZERhdGEocmVwb3J0KSB7XG4gICAgICAvLyBVc2UgdGhlIGludGVybmFsIGNsaXBib2FyZCBhcyBmYWxsYmFjay5cbiAgICAgIGxldCB7IGNsaXBib2FyZERhdGEgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkPy5yZWFkVGV4dD8uKClcbiAgICAgICAgaWYgKGpzb24pIHtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhID0gSlNPTi5wYXJzZShqc29uKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKHJlcG9ydCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIubmFtZSwgZXJyLm1lc3NhZ2UpXG4gICAgICAgICAgaWYgKGVyci5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICBhbGVydChkZWluZGVudGBcbiAgICAgICAgICAgICAgVGhlIGRhdGEgaW4gdGhlIGNsaXBib2FyZCBhcHBlYXJzIHRvIGJlIG1hbGZvcm1lZDpcbiAgICAgICAgICAgICAgJHtlcnIubWVzc2FnZX1cbiAgICAgICAgICAgIGApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5jaGVja0NsaXBib2FyZERhdGEoY2xpcGJvYXJkRGF0YSlcbiAgICB9LFxuXG4gICAgdXBkYXRlQ29weSgpIHtcbiAgICAgIHRoaXMuY29weUVuYWJsZWQgPSB0aGlzLnBhcmVudENvbXBvbmVudC5oYXNEYXRhXG4gICAgfSxcblxuICAgIGFzeW5jIHVwZGF0ZVBhc3RlKCkge1xuICAgICAgdGhpcy5wYXN0ZUVuYWJsZWQgPSAhIXRoaXMuY2hlY2tDbGlwYm9hcmREYXRhKHRoaXMuYXBwU3RhdGUuY2xpcGJvYXJkRGF0YSlcbiAgICAgIGlmICghdGhpcy5wYXN0ZUVuYWJsZWQgJiYgdGhpcy5hcHBTdGF0ZS5hZ2VudC5jaHJvbWUpIHtcbiAgICAgICAgLy8gU2VlIGlmIHRoZSBjbGlwYm9hcmQgY29udGVudCBpcyB2YWxpZCBKU09OIGRhdGEgdGhhdCBpcyBjb21wYXRpYmxlXG4gICAgICAgIC8vIHdpdGggdGhlIGN1cnJlbnQgdGFyZ2V0IHNjaGVtYSwgYW5kIG9ubHkgdGhlbiBhY3RpdmF0ZSB0aGUgcGFzdGluZzpcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZ2V0Q2xpcGJvYXJkRGF0YShmYWxzZSkgLy8gRG9uJ3QgcmVwb3J0XG4gICAgICAgIHRoaXMucGFzdGVFbmFibGVkID0gISFkYXRhXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG9uQ29weSgpIHtcbiAgICAgIGxldCBkYXRhID0gdGhpcy5wYXJlbnRDb21wb25lbnQuY2xpcGJvYXJkRGF0YVxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICBkYXRhID0ge1xuICAgICAgICAgICAgJHNjaGVtYTogdGhpcy5zY2hlbWEubmFtZSxcbiAgICAgICAgICAgIC4uLnRoaXMuY29weURhdGEoZGF0YSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gS2VlcCBhbiBpbnRlcm5hbCBjbGlwYm9hcmQgYXMgZmFsbGJhY2suXG4gICAgICAgIHRoaXMuYXBwU3RhdGUuY2xpcGJvYXJkRGF0YSA9IGRhdGFcbiAgICAgICAgdGhpcy5wYXN0ZUVuYWJsZWQgPSB0cnVlXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpXG4gICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZD8ud3JpdGVUZXh0Py4oanNvbilcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIsIGVyci5uYW1lLCBlcnIubWVzc2FnZSlcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgICAgYWxlcnQoZXJyb3IubWVzc2FnZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgb25QYXN0ZSgpIHtcbiAgICAgIGxldCBkYXRhID0gYXdhaXQgdGhpcy5nZXRDbGlwYm9hcmREYXRhKHRydWUpIC8vIFJlcG9ydFxuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IGRhdGEgJiYgdGhpcy5wYXN0ZURhdGEoZGF0YSlcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICB0aGlzLnBhcmVudENvbXBvbmVudC5jbGlwYm9hcmREYXRhID0gZGF0YVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICBhbGVydChlcnJvci5tZXNzYWdlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWNsaXBib2FyZCB7XG4gIGRpc3BsYXk6IGZsZXg7XG5cbiAgLmRpdG8tc2NoZW1hICYge1xuICAgIC8vIFB1c2ggY2xpcGJvYXJkIHRvIHRoZSByaWdodCBpbiB0aGUgZmxleCBsYXlvdXQsIHNlZTpcbiAgICAvLyBodHRwczovL2NvZGVwZW4uaW8vdGhvbGV4L3Blbi9odmVCeC9cbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgfVxuXG4gIC5kaXRvLWhlYWRlciAmIHtcbiAgICBtYXJnaW4tbGVmdDogMDtcblxuICAgIC5kaXRvLWJ1dHRvbiB7XG4gICAgICBtYXJnaW46IDAgMCAkdGFiLW1hcmdpbiAkdGFiLW1hcmdpbjtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCIvLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0xvYWRpbmc6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXRMb2FkaW5nKGlzTG9hZGluZywgeyB1cGRhdGVSb290ID0gZmFsc2UsIHVwZGF0ZVZpZXcgPSBmYWxzZSB9ID0ge30pIHtcbiAgICAgIGlmICghdGhpcy5pc0xvYWRpbmcgXiAhaXNMb2FkaW5nKSB7XG4gICAgICAgIC8vIEJvb2xlYW4geG9yXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gISFpc0xvYWRpbmdcbiAgICAgICAgaWYgKHVwZGF0ZVJvb3QpIHtcbiAgICAgICAgICB0aGlzLnJvb3RDb21wb25lbnQucmVnaXN0ZXJMb2FkaW5nKGlzTG9hZGluZylcbiAgICAgICAgfVxuICAgICAgICBpZiAodXBkYXRlVmlldykge1xuICAgICAgICAgIHRoaXMudmlld0NvbXBvbmVudC5zZXRMb2FkaW5nKHRoaXMuaXNMb2FkaW5nKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgSXRlbU1peGluIGZyb20gJy4vSXRlbU1peGluLmpzJ1xuaW1wb3J0IExvYWRpbmdNaXhpbiBmcm9tICcuL0xvYWRpbmdNaXhpbi5qcydcbmltcG9ydCB7IHNldERlZmF1bHRWYWx1ZXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBhc3NpZ25EZWVwbHksIGlzT2JqZWN0LCBpc1N0cmluZywgbGFiZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbSXRlbU1peGluLCBMb2FkaW5nTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRyZXNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpcyxcbiAgICAgIC8vIFBhc3MgbG9jYWwgdmVyYnMgb3ZlcnJpZGVzIG9uIHRvIGNoaWxkcmVuLCBzZWUgdmVyYnMoKSBjb21wdXRlZCBwcm9wLlxuICAgICAgJHZlcmJzOiAoKSA9PiB0aGlzLnZlcmJzLFxuICAgICAgJGlzUG9wdWxhdGVkOiAoKSA9PiB0aGlzLmhhc0RhdGFcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbG9hZGVkRGF0YTogbnVsbCxcbiAgICAgIGFib3J0Q29udHJvbGxlcjogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHJlc291cmNlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgcmVzb3VyY2UoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZSgpXG4gICAgfSxcblxuICAgIHByb3ZpZGVzRGF0YSgpIHtcbiAgICAgIC8vIFRoaXMgY29tcG9uZW50IGlzIGEgZGF0YS1zb3VyY2UgaWYgaXQgaGFzIGFuIGFzc29jaWF0ZWQgQVBJIHJlc291cmNlOlxuICAgICAgcmV0dXJuICEhdGhpcy5yZXNvdXJjZVxuICAgIH0sXG5cbiAgICBsaW5rc1RvVmlldygpIHtcbiAgICAgIC8vIFJldHVybnMgYGZhbHNlYGhlcmUsIGJ1dCBpcyBvdmVycmlkZGVuIHRvIHJldHVybiBgdHJ1ZWAgaW5cbiAgICAgIC8vIGBTb3VyY2VNaXhpbmAgZm9yIGNvbXBvbmVudCB0aGF0IGRvIG5vdCBwcm92aWRlIHRoZWlyIG93biBkYXRhLCBidXRcbiAgICAgIC8vIGVkaXQgdGhlaXIgaXRlbXMgdGhyb3VnaCBhIGxpbmtlZCB2aWV3LiAgSW4gdGhpcyBjYXNlLCByZWFsIGlkcyBuZWVkIHRvXG4gICAgICAvLyBiZSB1c2VkLlxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGlzVHJhbnNpZW50KCkge1xuICAgICAgLy8gQ2hlY2sgdGhlIGZvcm0gdGhhdCB0aGlzIGNvbXBvbmVudCBiZWxvbmdzIHRvIGFzIHdlbGwsIHNpbmNlIGl0IG1heSBiZVxuICAgICAgLy8gaW4gY3JlYXRpb24gbW9kZSwgd2hpY2ggbWFrZXMgaXQgdHJhbnNpZW50LlxuICAgICAgLy8gTk9URTogVGhpcyBkb2VzIG5vdCBsb29wIGVuZGxlc3NseSBiZWNhdXNlIERpdG9Gb3JtIHJlZGVmaW5lc1xuICAgICAgLy8gYGlzVHJhbnNpZW50KClgIHRvIG9ubHkgcmV0dXJuIGAhdGhpcy5wcm92aWRlc0RhdGFgLlxuICAgICAgY29uc3QgZm9ybSA9IHRoaXMuZm9ybUNvbXBvbmVudFxuICAgICAgcmV0dXJuIChcbiAgICAgICAgIXRoaXMucHJvdmlkZXNEYXRhICYmXG4gICAgICAgICF0aGlzLmxpbmtzVG9WaWV3IHx8XG4gICAgICAgIGZvcm0gJiYgKFxuICAgICAgICAgIGZvcm0uaXNUcmFuc2llbnQgfHxcbiAgICAgICAgICBmb3JtLmlzQ3JlYXRpbmdcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICB0cmFuc2llbnROb3RlKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5pc1RyYW5zaWVudCAmJiAoXG4gICAgICAgICAgJzxiPk5vdGU8L2I+OiB0aGUgcGFyZW50IHN0aWxsIG5lZWRzIHRvIGJlIHNhdmVkICcgK1xuICAgICAgICAgICdpbiBvcmRlciB0byBwZXJzaXN0IHRoaXMgY2hhbmdlLidcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBzaG91bGRMb2FkKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgIXRoaXMuaXNUcmFuc2llbnQgJiZcbiAgICAgICAgIXRoaXMuaXNMb2FkaW5nXG4gICAgICApXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGhhc0RhdGEoKSB7XG4gICAgICAvLyBCYXNlIGRlZmluaXRpb24sIHdpbGwgYmUgb3ZlcnJpZGRlbiBieSBEaXRvRm9ybSBhbmQgU291cmNlTWl4aW5cbiAgICAgIHJldHVybiAhIXRoaXMubG9hZGVkRGF0YVxuICAgIH0sXG5cbiAgICB2ZXJicygpIHtcbiAgICAgIC8vIFRoZSBhY3R1YWwgY29kZSBpcyB0aGUgYGdldFZlcmJzKClgIG1ldGhvZCwgZm9yIGVhc2llciBvdmVycmlkaW5nIG9mXG4gICAgICAvLyB0aGlzIGNvbXB1dGVkIHByb3BlcnR5IGluIGNvbXBvbmVudHMgdGhhdCB1c2UgdGhlIFJlc291cmNlTWl4aW4uXG4gICAgICByZXR1cm4gdGhpcy5nZXRWZXJicygpXG4gICAgfSxcblxuICAgIHBhZ2luYXRpb25SYW5nZSgpIHtcbiAgICAgIC8vIE9ubHkgYXBwbHkgcGFnaW5hdGlvbiB0byBsaXN0cy5cbiAgICAgIGNvbnN0IHsgcGFnaW5hdGU6IGFtb3VudCB9ID0gdGhpcy5zb3VyY2VTY2hlbWFcbiAgICAgIGlmICh0aGlzLmlzTGlzdFNvdXJjZSAmJiBhbW91bnQpIHtcbiAgICAgICAgY29uc3QgeyBwYWdlID0gMCB9ID0gdGhpcy5xdWVyeSB8fCB7fVxuICAgICAgICBjb25zdCBzdGFydCA9IHBhZ2UgKiBhbW91bnRcbiAgICAgICAgcmV0dXJuIFtzdGFydCwgc3RhcnQgKyBhbW91bnQgLSAxXVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgcXVlcnlQYXJhbXMoKSB7XG4gICAgICBjb25zdCByYW5nZSA9IHRoaXMucGFnaW5hdGlvblJhbmdlXG4gICAgICBjb25zdCB7IHBhZ2UsIC4uLnF1ZXJ5IH0gPSB0aGlzLnF1ZXJ5IHx8IHt9XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5xdWVyeSwgLy8gUXVlcnkgbWF5IG92ZXJyaWRlIHNjb3BlLlxuICAgICAgICAuLi4ocmFuZ2UgJiYge1xuICAgICAgICAgIC8vIFBhc3MgcGFnaW5hdGlvbiBhcyByYW5nZSwgc28gdGhhdCB3ZSBhdXRvbWF0aWNhbGx5IGdldCBPYmplY3Rpb24nc1xuICAgICAgICAgIC8vIHJlc3VsdHMgY291bnRpbmc6XG4gICAgICAgICAgcmFuZ2U6IHJhbmdlLmpvaW4oJywnKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIC8vIFdoZW4gY3JlYXRpbmcgbmVzdGVkIGRhdGEsIHdlIHN0aWxsIG5lZWQgdG8gY2FsbCBzZXR1cERhdGEoKVxuICAgIGlmICh0aGlzLnByb3ZpZGVzRGF0YSB8fCB0aGlzLmlzQ3JlYXRpbmcpIHtcbiAgICAgIHRoaXMuc2V0dXBEYXRhKClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFJlc291cmNlKHsgbWV0aG9kID0gJ2dldCcsIGNoaWxkIH0gPSB7fSkge1xuICAgICAgLy8gUmV0dXJucyB0aGUgcmVzb3VyY2Ugb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcmVzb3VyY2UgZm9yIHRoZVxuICAgICAgLy8gYXNzb2NpYXRlZCBzb3VyY2Ugc2NoZW1hLlxuICAgICAgY29uc3QgcmVzb3VyY2UgPSB0aGlzLnNvdXJjZVNjaGVtYT8ucmVzb3VyY2VcbiAgICAgIHJldHVybiBnZXRSZXNvdXJjZShyZXNvdXJjZSwge1xuICAgICAgICB0eXBlOiAnY29sbGVjdGlvbicsXG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgcGFyZW50OiB0aGlzLnBhcmVudFJlc291cmNlQ29tcG9uZW50Py5nZXRSZXNvdXJjZSh7XG4gICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgIGNoaWxkOiByZXNvdXJjZVxuICAgICAgICB9KSA/PyBudWxsLFxuICAgICAgICBjaGlsZFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZ2V0VmVyYnMoKSB7XG4gICAgICBjb25zdCB2ZXJicyA9IHRoaXMuJHZlcmJzKClcbiAgICAgIHJldHVybiB0aGlzLmlzVHJhbnNpZW50XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4udmVyYnMsXG4gICAgICAgICAgICAvLyBPdmVycmlkZSBkZWZhdWx0IHZlcmJzIHdpdGggdGhlaXIgdHJhbnNpZW50IHZlcnNpb25zOlxuICAgICAgICAgICAgY3JlYXRlOiAnYWRkJyxcbiAgICAgICAgICAgIGNyZWF0ZWQ6ICdhZGRlZCcsXG4gICAgICAgICAgICBzYXZlOiAnYXBwbHknLFxuICAgICAgICAgICAgc2F2ZWQ6ICdhcHBsaWVkJyxcbiAgICAgICAgICAgIGRlbGV0ZTogJ3JlbW92ZScsXG4gICAgICAgICAgICBkZWxldGVkOiAncmVtb3ZlZCdcbiAgICAgICAgICB9XG4gICAgICAgIDogdmVyYnNcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgY2xlYXJEYXRhKCkge1xuICAgICAgdGhpcy5sb2FkZWREYXRhID0gbnVsbFxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIHRoaXMubG9hZGVkRGF0YSA9IGRhdGFcbiAgICB9LFxuXG4gICAgc2V0dXBEYXRhKCkge1xuICAgICAgLy8gQWN0dWFsIGNvZGUgaXMgaW4gc2VwYXJhdGUgZnVuY3Rpb24gc28gaXQncyBlYXNlciB0byBvdmVycmlkZVxuICAgICAgLy8gYHNldHVwRGF0YSgpYCBhbmQgYW5kIGNhbGwgYGVuc3VyZURhdGEoKWAgZnJvbSB0aGUgb3ZlcnJpZGVzLFxuICAgICAgLy8gc2VlIERpdG9Gb3JtIGFuZCBTb3VyY2VNaXhpbi5cbiAgICAgIHRoaXMuZW5zdXJlRGF0YSgpXG4gICAgfSxcblxuICAgIGVuc3VyZURhdGEoKSB7XG4gICAgICBpZiAodGhpcy5zaG91bGRMb2FkKSB7XG4gICAgICAgIGlmICh0aGlzLmhhc0RhdGEpIHtcbiAgICAgICAgICB0aGlzLnJlbG9hZERhdGEoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubG9hZERhdGEodHJ1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICByZWxvYWREYXRhKCkge1xuICAgICAgdGhpcy5sb2FkRGF0YShmYWxzZSlcbiAgICB9LFxuXG4gICAgbG9hZERhdGEoY2xlYXIpIHtcbiAgICAgIGlmICghdGhpcy5pc1RyYW5zaWVudCkge1xuICAgICAgICBpZiAoY2xlYXIpIHtcbiAgICAgICAgICB0aGlzLmNsZWFyRGF0YSgpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZXF1ZXN0RGF0YSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNyZWF0ZURhdGEoc2NoZW1hLCB0eXBlKSB7XG4gICAgICByZXR1cm4gc2V0RGVmYXVsdFZhbHVlcyhzY2hlbWEsIHR5cGUgPyB7IHR5cGUgfSA6IHt9LCB0aGlzKVxuICAgIH0sXG5cbiAgICByZXF1ZXN0RGF0YSgpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5xdWVyeVBhcmFtc1xuICAgICAgdGhpcy5oYW5kbGVSZXF1ZXN0KHsgbWV0aG9kOiAnZ2V0JywgcXVlcnkgfSwgKGVyciwgcmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgICAgY29uc3QgeyBkYXRhIH0gPSByZXNwb25zZVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBkYXRhPy50eXBlID09PSAnRmlsdGVyVmFsaWRhdGlvbicgJiZcbiAgICAgICAgICAgICAgdGhpcy5vbkZpbHRlckVycm9ycz8uKGRhdGEuZXJyb3JzKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNVbmF1dGhvcml6ZWRFcnJvcihyZXNwb25zZSkpIHtcbiAgICAgICAgICAgICAgLy8gVE9ETzogQ2FuIHdlIHJlYWxseSBzd2FsbG93IHRoZXNlIGVycm9ycz9cbiAgICAgICAgICAgICAgLy8gSXMgY2FsbGluZyBgZW5zdXJlVXNlcigpYCBpbiBgb25CZWZvcmVSZXF1ZXN0KClgIGVub3VnaD9cbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXREYXRhKHJlc3BvbnNlLmRhdGEpXG4gICAgICAgICAgdGhpcy5lbWl0U2NoZW1hRXZlbnQoJ2xvYWQnKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkYXRpb25FcnJvcihyZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlPy5zdGF0dXMgPT09IDQwMFxuICAgIH0sXG5cbiAgICBpc1VuYXV0aG9yaXplZEVycm9yKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2U/LnN0YXR1cyA9PT0gNDAxXG4gICAgfSxcblxuICAgIGFzeW5jIGhhbmRsZVJlcXVlc3QoXG4gICAgICB7XG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgcmVzb3VyY2UgPSB0aGlzLmdldFJlc291cmNlKHsgbWV0aG9kIH0pLFxuICAgICAgICBxdWVyeSxcbiAgICAgICAgZGF0YVxuICAgICAgfSxcbiAgICAgIGNhbGxiYWNrXG4gICAgKSB7XG4gICAgICBjb25zdCBsb2FkaW5nT3B0aW9ucyA9IHtcbiAgICAgICAgdXBkYXRlUm9vdDogdHJ1ZSwgLy8gRGlzcGxheSBzcGlubmVyIGluIGhlYWRlciB3aGVuIGxvYWRpbmcgaW4gcmVzb3VyY2VzXG4gICAgICAgIHVwZGF0ZVZpZXc6IHRoaXMuaXNJblZpZXcgLy8gTm90aWZ5IHZpZXcgb2YgbG9hZGluZyBmb3IgdmlldyBjb21wb25lbnRzXG4gICAgICB9XG4gICAgICB0aGlzLmFib3J0Q29udHJvbGxlcj8uYWJvcnQoKVxuICAgICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgICAgdGhpcy5hYm9ydENvbnRyb2xsZXIgPSBjb250cm9sbGVyXG4gICAgICBjb25zdCB7IHNpZ25hbCB9ID0gY29udHJvbGxlclxuICAgICAgbWV0aG9kID0gcmVzb3VyY2UubWV0aG9kIHx8IG1ldGhvZFxuICAgICAgY29uc3QgcmVxdWVzdCA9IHsgbWV0aG9kLCByZXNvdXJjZSwgcXVlcnksIGRhdGEsIHNpZ25hbCB9XG4gICAgICB0aGlzLnNldExvYWRpbmcodHJ1ZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3QocmVxdWVzdClcbiAgICAgICAgLy8gUGFzcyBib3RoIHJlcXVlc3QgYW5kIHJlc3BvbnNlIHRvIHRoZSBjYWxsYmFjaywgc28gdGhleSBjYW4gYmVcbiAgICAgICAgLy8gZXhwb3NlZCB0byBmdXJ0aGVyIGNhbGxiYWNrcyB0aHJvdWdoIERpdG9Db250ZXh0LlxuICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZSlcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvci5uYW1lICE9PSAnQWJvcnRFcnJvcicpIHtcbiAgICAgICAgICAvLyBJZiBjYWxsYmFjayByZXR1cm5zIHRydWUsIGVycm9ycyB3ZXJlIGFscmVhZHkgaGFuZGxlZC5cbiAgICAgICAgICBjb25zdCB7IHJlc3BvbnNlIH0gPSBlcnJvclxuICAgICAgICAgIGlmICghY2FsbGJhY2soZXJyb3IsIHJlc3BvbnNlKSkge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJlc3BvbnNlPy5kYXRhXG4gICAgICAgICAgICBjb25zdCB0aXRsZSA9IGlzU3RyaW5nKGRhdGE/LnR5cGUpXG4gICAgICAgICAgICAgID8gbGFiZWxpemUoZGF0YS50eXBlKVxuICAgICAgICAgICAgICA6ICdFcnJvcidcbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSBkYXRhPy5tZXNzYWdlID8/IGVycm9yXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7IHR5cGU6ICdlcnJvcicsIGVycm9yLCB0aXRsZSwgdGV4dCB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuYWJvcnRDb250cm9sbGVyID09PSBjb250cm9sbGVyKSB7XG4gICAgICAgIC8vIE9ubHkgY2xlYXIgdGhlIGxvYWRpbmcgc3RhdGUgaWYgdGhpcyBpcyBzdGlsbCB0aGUgY3VycmVudCByZXF1ZXN0LlxuICAgICAgICB0aGlzLmFib3J0Q29udHJvbGxlciA9IG51bGxcbiAgICAgICAgdGhpcy5zZXRMb2FkaW5nKGZhbHNlLCBsb2FkaW5nT3B0aW9ucylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0UGF5bG9hZERhdGEoYnV0dG9uLCBtZXRob2QpIHtcbiAgICAgIC8vIENvbnZlbnRpb246IG9ubHkgcG9zdCwgcHV0IGFuZCBwYXRjaCByZXF1ZXN0cyBwYXNzIHRoZSBkYXRhIGFzIHBheWxvYWQuXG4gICAgICByZXR1cm4gKFxuICAgICAgICBbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10uaW5jbHVkZXMobWV0aG9kKSAmJiAoXG4gICAgICAgICAgLy8gVE9ETzogVXNlIGBoYW5kbGVEYXRhU2NoZW1hKClgIGFzeW5jaHJvbm91c2x5IGhlcmUgaW5zdGVhZCwgdG9cbiAgICAgICAgICAvLyBvZmZlciB0aGUgc2FtZSBhbW91bnQgb2YgcG9zc2liaWxpdGllcyBmb3IgZGF0YSBsb2FkaW5nLlxuICAgICAgICAgIGJ1dHRvbi5nZXRTY2hlbWFWYWx1ZShbJ3Jlc291cmNlJywgJ2RhdGEnXSkgfHxcbiAgICAgICAgICBidXR0b24ucHJvY2Vzc2VkSXRlbVxuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdChidXR0b24pIHtcbiAgICAgIGxldCB7IHJlc291cmNlIH0gPSBidXR0b24uc2NoZW1hXG4gICAgICByZXNvdXJjZSA9IGdldFJlc291cmNlKHJlc291cmNlLCB7XG4gICAgICAgIHBhcmVudDogdGhpcy5nZXRSZXNvdXJjZSh7XG4gICAgICAgICAgbWV0aG9kOiByZXNvdXJjZT8ubWV0aG9kLFxuICAgICAgICAgIGNoaWxkOiByZXNvdXJjZVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICAgIGlmIChyZXNvdXJjZSkge1xuICAgICAgICBjb25zdCB7IG1ldGhvZCB9ID0gcmVzb3VyY2VcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0UGF5bG9hZERhdGEoYnV0dG9uLCBtZXRob2QpXG4gICAgICAgIHJldHVybiB0aGlzLnN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXRSZXNvdXJjZShidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEsIHtcbiAgICAgIHNldERhdGEgPSBmYWxzZSxcbiAgICAgIG9uU3VjY2VzcyxcbiAgICAgIG9uRXJyb3IsXG4gICAgICBub3RpZnlTdWNjZXNzID0gKCkgPT5cbiAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgICAgICB0aXRsZTogJ1JlcXVlc3QgU3VjY2Vzc2Z1bCcsXG4gICAgICAgICAgdGV4dDogJ1JlcXVlc3Qgd2FzIHN1Y2Nlc3NmdWxseSBzZW50LidcbiAgICAgICAgfSksXG4gICAgICBub3RpZnlFcnJvciA9IGVycm9yID0+XG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgIGVycm9yLFxuICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBFcnJvcicsXG4gICAgICAgICAgdGV4dDogW1xuICAgICAgICAgICAgYFVuYWJsZSB0byBzZW5kIHJlcXVlc3Qke2Vycm9yID8gJzonIDogJyd9YCxcbiAgICAgICAgICAgIGVycm9yPy5tZXNzYWdlIHx8IGVycm9yXG4gICAgICAgICAgXVxuICAgICAgICB9KVxuICAgIH0gPSB7fSkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZVJlcXVlc3QoXG4gICAgICAgICAgeyBtZXRob2QsIHJlc291cmNlLCBkYXRhIH0sXG4gICAgICAgICAgYXN5bmMgKGVyciwgcmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZT8uZGF0YVxuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAvLyBTZWUgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEgRGl0by5qcyB2YWxpZGF0aW9uIGVycm9yOlxuICAgICAgICAgICAgICBjb25zdCBlcnJvcnMgPSB0aGlzLmlzVmFsaWRhdGlvbkVycm9yKHJlc3BvbnNlKSAmJiBkYXRhLmVycm9yc1xuICAgICAgICAgICAgICBpZiAoZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIHRydWUpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBpc09iamVjdChkYXRhKSA/IGRhdGEgOiBlcnJcbiAgICAgICAgICAgICAgICBvbkVycm9yPy4oZXJyb3IpXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnZXJyb3InLCB7XG4gICAgICAgICAgICAgICAgICBub3RpZnk6IG5vdGlmeUVycm9yLFxuICAgICAgICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHVuZGVybHlpbmcgZGF0YSBiZWZvcmUgY2FsbGluZyBgbm90aWZ5KClgIG9yXG4gICAgICAgICAgICAgIC8vIGB0aGlzLml0ZW1MYWJlbGAsIHNvIGlkIGlzIHNldCBhZnRlciBjcmVhdGluZyBuZXcgaXRlbXMuXG4gICAgICAgICAgICAgIGlmIChzZXREYXRhICYmIGRhdGEpIHtcbiAgICAgICAgICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgZm9yZWlnbiBkYXRhIGVudHJpZXMgd2hlbiB1cGRhdGluZyB0aGUgZGF0YS5cbiAgICAgICAgICAgICAgICBjb25zdCB7IGZvcmVpZ25EYXRhIH0gPSB0aGlzLm1haW5TY2hlbWFDb21wb25lbnQuZmlsdGVyRGF0YShcbiAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAvLyBUZWxsIHRoZSBwYXJlbnQgcm91dGUgdG8gcmVsb2FkIGl0cyBkYXRhLCBzbyB0aGF0IGl0IGNhblxuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBpdHMgZm9yZWlnbiBkYXRhIGVudHJpZXMuXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50TWV0YSA9IHRoaXMucGFyZW50Um91dGVDb21wb25lbnQ/LnJvdXRlUmVjb3JkPy5tZXRhXG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudE1ldGEpIHtcbiAgICAgICAgICAgICAgICAgIHBhcmVudE1ldGEucmVsb2FkID0gdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGEoYXNzaWduRGVlcGx5KHt9LCBmb3JlaWduRGF0YSwgZGF0YSkpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb25TdWNjZXNzPy4oKVxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdzdWNjZXNzJywge1xuICAgICAgICAgICAgICAgIG5vdGlmeTogbm90aWZ5U3VjY2Vzc1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICByZXNvbHZlKHRydWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCBldmVudCwgeyBub3RpZnksIGVycm9yIH0pIHtcbiAgICAgIC8vIENyZWF0ZSB0aGUgY29udGV4dCBvdXRzaWRlIG9mIGBlbWl0RXZlbnQoKWAsIHNvIHRoYXRcbiAgICAgIC8vIGBjb250ZXh0Lndhc05vdGlmaWVkYCBjYW4gYmUgY2hlY2tlZCBhZnRlci5cbiAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgRGl0b0NvbnRleHQoYnV0dG9uLCB7XG4gICAgICAgIG5lc3RlZDogZmFsc2UsXG4gICAgICAgIGRhdGE6IHRoaXMuZGF0YSxcbiAgICAgICAgaXRlbUxhYmVsOiB0aGlzLml0ZW1MYWJlbCxcbiAgICAgICAgZXJyb3JcbiAgICAgIH0pXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBidXR0b24uZW1pdEV2ZW50KGV2ZW50LCB7IGNvbnRleHQgfSlcbiAgICAgIGlmIChcbiAgICAgICAgbm90aWZ5ICYmXG4gICAgICAgIC8vIFByZXZlbnQgZGVmYXVsdCBpZiBhbnl0aGluZyB3YXMgcmV0dXJuZWQgZnJvbSB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgICAgcmVzID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgLy8gRG8gbm90IGRpc3BsYXkgZGVmYXVsdCBub3RpZmljYXRpb24gaWYgdGhlIGV2ZW50IGhhbmRsZXIgYWxyZWFkeVxuICAgICAgICAvLyBkaXNwbGF5ZWQgYSBub3RpZmljYXRpb24uXG4gICAgICAgICFjb250ZXh0Lndhc05vdGlmaWVkXG4gICAgICApIHtcbiAgICAgICAgbm90aWZ5KGVycm9yKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc1xuICAgIH1cbiAgfVxufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVQYXRoKHBhdGgpIHtcbiAgLy8gRm9yIHBhdGhzIHN0YXJpbmcgd2l0aCBgL2AsIHdlIGNhbiB1c2UgdGhlIG5hdGl2ZSBgVVJMKClgIGNsYXNzIHRvIHJlc29sdmVcbiAgLy8gdGhlIHBhdGgsIHdoaWNoIHdpbGwgYWxzbyBoYW5kbGUgYC4uYCBhbmQgYC5gIHNlZ21lbnRzOlxuICByZXR1cm4gbmV3IFVSTChgZmlsZToke3BhdGh9YCkucGF0aG5hbWVcbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1mb3JtLmRpdG8tc2Nyb2xsLXBhcmVudChcbiAgOmNsYXNzPVwieyAnZGl0by1mb3JtLW5lc3RlZCc6IGlzTmVzdGVkUm91dGUgfVwiXG4gIDpkYXRhLXJlc291cmNlPVwic291cmNlU2NoZW1hLnBhdGhcIlxuKVxuICAvLy0gT25seSByZW5kZXIgYSByb3V0ZXItdmlldyBoZXJlIGlmIHRoaXMgaXNuJ3QgdGhlIGxhc3QgZGF0YSByb3V0ZSBhbmQgbm90IGFcbiAgLy8tIG5lc3RlZCBmb3JtIHJvdXRlLCB3aGljaCB3aWxsIGFwcGVhciBlbHNld2hlcmUgaW4gaXRzIG93biB2aWV3LlxuICBSb3V0ZXJWaWV3KFxuICAgIHYtaWY9XCIhaXNMYXN0VW5uZXN0ZWRSb3V0ZSAmJiAhaXNOZXN0ZWRSb3V0ZVwiXG4gICAgdi1zaG93PVwiIWlzQWN0aXZlUm91dGVcIlxuICApXG4gIC8vLSBOT1RFOiBOZXN0ZWQgZm9ybSBjb21wb25lbnRzIGFyZSBrZXB0IGFsaXZlIGJ5IHVzaW5nIGB2LXNob3dgIGluc3RlYWQgb2ZcbiAgLy8tIGB2LWlmYCBoZXJlLCBzbyBldmVudCBoYW5kbGluZyBhbmQgb3RoZXIgdGhpbmdzIHN0aWxsIHdvcmsgd2l0aCBuZXN0ZWRcbiAgLy8tIGVkaXRpbmcuXG4gIERpdG9Gb3JtSW5uZXIoXG4gICAgdi1zaG93PVwiaXNBY3RpdmVSb3V0ZVwiXG4gICAgOm5lc3RlZD1cImlzTmVzdGVkUm91dGVcIlxuICApXG4gICAgLy8tIFByZXZlbnQgaW1wbGljaXQgc3VibWlzc2lvbiBvZiB0aGUgZm9ybSwgZm9yIGV4YW1wbGUgd2hlbiB0eXBpbmcgZW50ZXJcbiAgICAvLy0gaW4gYW4gaW5wdXQgZmllbGQuXG4gICAgLy8tIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81MTUwNzgwNlxuICAgIGJ1dHRvbihcbiAgICAgIHYtc2hvdz1cImZhbHNlXCJcbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgZGlzYWJsZWRcbiAgICApXG4gICAgRGl0b1NjaGVtYShcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6cGFkZGluZz1cImlzTmVzdGVkUm91dGUgPyAnbmVzdGVkJyA6ICdyb290J1wiXG4gICAgICA6YWN0aXZlPVwiaXNBY3RpdmVSb3V0ZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgICAgOnNjcm9sbGFibGU9XCIhaXNOZXN0ZWRSb3V0ZVwiXG4gICAgICBnZW5lcmF0ZUxhYmVsc1xuICAgIClcbiAgICAgIHRlbXBsYXRlKCNidXR0b25zKVxuICAgICAgICBEaXRvQnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmQuZGl0by1idXR0b25zLWxhcmdlLmRpdG8tYnV0dG9ucy1tYWluKFxuICAgICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tYnV0dG9ucy1zdGlja3knOiAhaXNOZXN0ZWRSb3V0ZSB9XCJcbiAgICAgICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBjbG9uZSwgY2FwaXRhbGl6ZSwgcGFyc2VEYXRhUGF0aCwgYXNzaWduRGVlcGx5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUm91dGVNaXhpbiBmcm9tICcuLi9taXhpbnMvUm91dGVNaXhpbi5qcydcbmltcG9ydCBSZXNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9SZXNvdXJjZU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UsIGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzLCBpc09iamVjdFNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IHJlc29sdmVQYXRoIH0gZnJvbSAnLi4vdXRpbHMvcGF0aC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRm9ybScsIHtcbiAgbWl4aW5zOiBbUm91dGVNaXhpbiwgUmVzb3VyY2VNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3JlYXRlZERhdGE6IG51bGwsXG4gICAgICBjbG9uZWREYXRhOiB1bmRlZmluZWQsXG4gICAgICBzb3VyY2VLZXk6IG51bGwsXG4gICAgICBpc0Zvcm06IHRydWVcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB2ZXJicygpIHtcbiAgICAgIC8vIEFkZCBzdWJtaXQgLyBzdWJtaXR0ZWQgdG8gdGhlIHZlcmJzIHJldHVybmVkIGJ5IFJlc291cmNlTWl4aW5cbiAgICAgIC8vIE5PVEU6IFRoZXNlIGdldCBwYXNzZWQgb24gdG8gY2hpbGRyZW4gdGhyb3VnaDpcbiAgICAgIC8vIGBwcm92aWRlKCkgLi4uIHsgJHZlcmJzOiAoKSA9PiB0aGlzLnZlcmJzIH1gIGluIFJlc291cmNlTWl4aW5cbiAgICAgIGNvbnN0IHZlcmJzID0gdGhpcy5nZXRWZXJicygpXG4gICAgICBjb25zdCB7IGlzQ3JlYXRpbmcsIHByb3ZpZGVzRGF0YSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udmVyYnMsXG4gICAgICAgIHN1Ym1pdDogaXNDcmVhdGluZyA/IHZlcmJzLmNyZWF0ZSA6IHZlcmJzLnNhdmUsXG4gICAgICAgIHN1Ym1pdHRlZDogaXNDcmVhdGluZyA/IHZlcmJzLmNyZWF0ZWQgOiB2ZXJicy5zYXZlZCxcbiAgICAgICAgY2FuY2VsOiBwcm92aWRlc0RhdGEgPyB2ZXJicy5jYW5jZWwgOiB2ZXJicy5jbG9zZSxcbiAgICAgICAgY2FuY2VsbGVkOiBwcm92aWRlc0RhdGEgPyB2ZXJicy5jYW5jZWxsZWQgOiB2ZXJicy5jbG9zZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0SXRlbUZvcm1TY2hlbWEoXG4gICAgICAgIHRoaXMuc291cmNlU2NoZW1hLFxuICAgICAgICB0aGlzLmRhdGEgfHwgKFxuICAgICAgICAgIHRoaXMuY3JlYXRpb25UeXBlXG4gICAgICAgICAgICA/IC8vIElmIHRoZXJlIGlzIG5vIGRhdGEgeWV0IGJ1dCB0aGUgdHlwZSB0byBjcmVhdGUgYSBuZXcgaXRlbSBpc1xuICAgICAgICAgICAgICAvLyBpcyBzcGVjaWZpZWQsIHByb3ZpZGUgYSB0ZW1wb3JhcnkgZW1wdHkgb2JqZWN0IHdpdGgganVzdCB0aGVcbiAgICAgICAgICAgICAgLy8gdHlwZSBzZXQsIHNvIGBnZXRJdGVtRm9ybVNjaGVtYSgpYCBjYW4gZGV0ZXJtaW5lIHRoZSBmb3JtLlxuICAgICAgICAgICAgICB7IHR5cGU6IHRoaXMuY3JlYXRpb25UeXBlIH1cbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICApLFxuICAgICAgICB0aGlzLmNvbnRleHRcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIHJldHVybiBnZXRCdXR0b25TY2hlbWFzKFxuICAgICAgICBhc3NpZ25EZWVwbHkoXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2FuY2VsOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICBjbGljazogKCkgPT4gdGhpcy5jYW5jZWwoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBzdWJtaXQ6ICF0aGlzLmlzTXV0YXRpbmcgJiYge1xuICAgICAgICAgICAgICB0eXBlOiAnc3VibWl0JyxcbiAgICAgICAgICAgICAgLy8gU3VibWl0IGJ1dHRvbnMgY2xvc2UgdGhlIGZvcm0gYnkgZGVmYXVsdDpcbiAgICAgICAgICAgICAgY2xvc2VGb3JtOiB0cnVlLFxuICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICBjbGljazogKHsgY29tcG9uZW50OiBidXR0b24gfSkgPT4gYnV0dG9uLnN1Ym1pdCgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMuc2NoZW1hLmJ1dHRvbnNcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc0FjdGl2ZVJvdXRlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNMYXN0Um91dGUgfHwgdGhpcy5pc0xhc3RVbm5lc3RlZFJvdXRlXG4gICAgfSxcblxuICAgIGlzVHJhbnNpZW50KCkge1xuICAgICAgcmV0dXJuICF0aGlzLnByb3ZpZGVzRGF0YVxuICAgIH0sXG5cbiAgICBpc0NyZWF0aW5nKCkge1xuICAgICAgLy8gdGhpcy5wYXJhbSBpcyBpbmhlcml0ZWQgZnJvbSBSb3V0ZU1peGluXG4gICAgICByZXR1cm4gdGhpcy5wYXJhbSA9PT0gJ2NyZWF0ZSdcbiAgICB9LFxuXG4gICAgaXNEaXJ0eSgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5pc011dGF0aW5nICYmICEhdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50Py5pc0RpcnR5XG4gICAgfSxcblxuICAgIGlzTXV0YXRpbmcoKSB7XG4gICAgICAvLyBXaGVuIGBzb3VyY2VTY2hlbWEubXV0YXRlYCBpcyB0cnVlLCB0aGUgZm9ybSBlZGl0cyB0aGUgaW5oZXJpdGVkIGRhdGFcbiAgICAgIC8vIGRpcmVjdGx5IGluc3RlYWQgb2YgbWFraW5nIGEgY29weSBmb3IgcGVyc2lzdGVuY2UgdXBvbiBzdWJtaXNzaW9uLlxuICAgICAgLy8gU2VlIGBpbmhlcml0ZWREYXRhKClgIGNvbXB1dGVkIHByb3BlcnR5IGZvciBtb3JlIGRldGFpbHMuXG4gICAgICByZXR1cm4gISF0aGlzLnNvdXJjZVNjaGVtYS5tdXRhdGVcbiAgICB9LFxuXG4gICAgc2VsZWN0ZWRUYWIoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50Py5zZWxlY3RlZFRhYiB8fCBudWxsXG4gICAgfSxcblxuICAgIGNyZWF0aW9uVHlwZSgpIHtcbiAgICAgIC8vIFRoZSB0eXBlIG9mIGZvcm0gdG8gY3JlYXRlLCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgZm9ybXMgdG8gY2hvb3NlIGZyb20uXG4gICAgICByZXR1cm4gdGhpcy4kcm91dGUucXVlcnkudHlwZVxuICAgIH0sXG5cbiAgICBpdGVtSWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgID8gbnVsbFxuICAgICAgICA6IHRoaXMucGFyYW0gPz8gbnVsbFxuICAgIH0sXG5cbiAgICBtZXRob2QoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0NyZWF0aW5nID8gJ3Bvc3QnIDogJ3BhdGNoJ1xuICAgIH0sXG5cbiAgICBicmVhZGNydW1iUHJlZml4KCkge1xuICAgICAgcmV0dXJuIGNhcGl0YWxpemUodGhpcy5pc0NyZWF0aW5nID8gdGhpcy52ZXJicy5jcmVhdGUgOiB0aGlzLnZlcmJzLmVkaXQpXG4gICAgfSxcblxuICAgIGRhdGEoKSB7XG4gICAgICAvLyBSZXR1cm4gZGlmZmVyZW50IGRhdGEgXCJjb250YWluZXJzXCIgYmFzZWQgb24gZGlmZmVyZW50IHNjZW5hcmlvczpcbiAgICAgIC8vIDEuIGNyZWF0ZWREYXRhLCBpZiB3ZSdyZSBpbiBhIGZvcm0gZm9yIGEgbmV3bHkgY3JlYXRlZCBvYmplY3QuXG4gICAgICAvLyAyLiBsb2FkZWREYXRhLCBpZiB0aGUgZm9ybSBpdHNlbGYgaXMgdGhlIHJvb3Qgb2YgdGhlIGRhdGEgKGUuZy4gd2hlblxuICAgICAgLy8gICAgZGlyZWN0bHkgbG9hZGluZyBhbiBlZGl0aW5nIHJvb3QpLlxuICAgICAgLy8gMy4gVGhlIGRhdGEgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCwgd2hpY2ggaXRzZWxmIG1heSBiZSBlaXRoZXIgYVxuICAgICAgLy8gICAgdmlldyB0aGF0IGxvYWRlZCB0aGUgZGF0YSwgb3IgYSBmb3JtIHRoYXQgZWl0aGVyIGxvYWRlZCB0aGUgZGF0YSwgb3JcbiAgICAgIC8vICAgIGFsc28gaW5oZXJpdGVkIGl0IGZyb20gaXRzIHBhcmVudC4gTm90ZSB0aGF0IHdlIHVzZSBhIGNsb25lIG9mIGl0LFxuICAgICAgLy8gICAgc28sIGRhdGEgY2hhbmdlcyBhcmVuJ3QgYXBwbGllZCB1bnRpbCBzZXRTb3VyY2VEYXRhKCkgaXMgY2FsbGVkLlxuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlZERhdGEgfHwgdGhpcy5sb2FkZWREYXRhIHx8IHRoaXMuaW5oZXJpdGVkRGF0YSB8fCBudWxsXG4gICAgfSxcblxuICAgIGRhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0YVBhdGhGcm9tKHRoaXMuZGF0YUNvbXBvbmVudClcbiAgICB9LFxuXG4gICAgc291cmNlRGF0YSgpIHtcbiAgICAgIC8vIFBvc3NpYmxlIHBhcmVudHMgYXJlIERpdG9Gb3JtIGZvciBmb3Jtcywgb3IgRGl0b1ZpZXcgZm9yIHJvb3QgbGlzdHMuXG4gICAgICAvLyBCb3RoIGhhdmUgYSBkYXRhIHByb3BlcnR5IHdoaWNoIGFic3RyYWN0cyBhd2F5IGxvYWRpbmcgYW5kIGluaGVyaXRpbmdcbiAgICAgIC8vIG9mIGRhdGEuXG4gICAgICAvLyBGb3JtcyB0aGF0IGFyZSBhYm91dCB0byBiZSBkZXN0cm95ZWQgZHVlIHRvIG5hdmlnYXRpb24gbG9vc2UgdGhlaXJcbiAgICAgIC8vIHJvdXRlLXJlY29yZCwgYnV0IG1pZ2h0IHN0aWxsIHRyaWdnZXIgdGhpcyBnZXR0ZXIuIEZpbHRlciB0aG9zZSBvdXQuXG4gICAgICBsZXQgZGF0YSA9IHRoaXMucm91dGVSZWNvcmQgPyB0aGlzLnBhcmVudFJvdXRlQ29tcG9uZW50LmRhdGEgOiBudWxsXG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICAvLyBIYW5kbGUgbmVzdGVkIGRhdGEgYnkgc3BsaXR0aW5nIHRoZSBkYXRhUGF0aCwgaXRlcmF0ZSB0aHJvdWdoIHRoZVxuICAgICAgICAvLyBhY3R1YWwgZGF0YSBhbmQgbG9vayBuZXN0IGNoaWxkLWRhdGEgdXAuXG4gICAgICAgIGNvbnN0IGRhdGFQYXJ0cyA9IHBhcnNlRGF0YVBhdGgoXG4gICAgICAgICAgdGhpcy5nZXREYXRhUGF0aEZyb20odGhpcy5wYXJlbnRSb3V0ZUNvbXBvbmVudClcbiAgICAgICAgKVxuICAgICAgICAvLyBDb21wYXJlIGRhdGFQYXJ0cyBhZ2FpbnN0IG1hdGNoZWQgcm91dGVQYXRoIHBhcnRzLCB0byBpZGVudGlmeSB0aG9zZVxuICAgICAgICAvLyBwYXJ0cyB0aGF0IG5lZWQgdG8gYmUgdHJlYXRlZCBsaWtlIGlkcyBhbmQgbWFwcGVkIHRvIGluZGljZXMgaW4gZGF0YS5cbiAgICAgICAgY29uc3QgcGF0aFBhcnRzID0gdGhpcy5yb3V0ZVJlY29yZC5wYXRoLnNwbGl0KCcvJylcbiAgICAgICAgY29uc3Qgcm91dGVQYXJ0cyA9IHBhdGhQYXJ0cy5zbGljZShwYXRoUGFydHMubGVuZ3RoIC0gZGF0YVBhcnRzLmxlbmd0aClcbiAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLXNpZGUtZWZmZWN0cy1pbi1jb21wdXRlZC1wcm9wZXJ0aWVzXG4gICAgICAgIHRoaXMuc291cmNlS2V5ID0gbnVsbFxuICAgICAgICBjb25zdCBsYXN0RGF0YVBhcnQgPSBkYXRhUGFydHNbZGF0YVBhcnRzLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmIChpc09iamVjdFNvdXJjZSh0aGlzLnNvdXJjZVNjaGVtYSkgJiYgbGFzdERhdGFQYXJ0ID09PSAnY3JlYXRlJykge1xuICAgICAgICAgIC8vIElmIHdlIGhhdmUgYW4gb2JqZWN0IHNvdXJjZSBhbmQgYXJlIGNyZWF0aW5nLCB0aGUgZGF0YVBhdGggbmVlZHMgdG9cbiAgICAgICAgICAvLyBiZSBzaG9ydGVuZWQgYnkgdGhlICdjcmVhdGUnIGVudHJ5LiBUaGlzIGlzbid0IG5lZWRlZCBmb3IgbGlzdFxuICAgICAgICAgIC8vIHNvdXJjZXMsIGFzIHRoZXJlIHRoZSBwYXJhbWV0ZXIgaXMgYWN0dWFsbHkgbWFwcGVkIHRvIHRoZSBpdGVtIGlkLlxuICAgICAgICAgIGRhdGFQYXJ0cy5sZW5ndGgtLVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gZGF0YVBhcnRzLmxlbmd0aDsgaSA8IGwgJiYgZGF0YTsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZGF0YVBhcnQgPSBkYXRhUGFydHNbaV1cbiAgICAgICAgICAvLyBJZiB0aGlzIGlzIGFuIDppZCBwYXJ0LCBmaW5kIHRoZSBpbmRleCBvZiB0aGUgaXRlbSB3aXRoIGdpdmVuIGlkLlxuICAgICAgICAgIGNvbnN0IGtleSA9IC9eOmlkLy50ZXN0KHJvdXRlUGFydHNbaV0pXG4gICAgICAgICAgICA/IGRhdGFQYXJ0ID09PSAnY3JlYXRlJ1xuICAgICAgICAgICAgICA/IG51bGwgLy8gVGhlcmUncyBubyBpbmRleCBmb3IgZW50cmllcyBhYm91dCB0byBiZSBjcmVhdGVkXG4gICAgICAgICAgICAgIDogdGhpcy5maW5kSXRlbUlkSW5kZXgodGhpcy5zb3VyY2VTY2hlbWEsIGRhdGEsIGRhdGFQYXJ0KVxuICAgICAgICAgICAgOiBkYXRhUGFydFxuICAgICAgICAgIC8vIFNraXAgdGhlIGZpbmFsIGxvb2t1cCBidXQgcmVtZW1iZXIgYHNvdXJjZUtleWAsIGFzIHdlIHdhbnQgdGhlXG4gICAgICAgICAgLy8gcGFyZW50IGRhdGEgc28gd2UgY2FuIHJlcGxhY2UgdGhlIGVudHJ5IGF0IGBzb3VyY2VLZXlgIG9uIGl0LlxuICAgICAgICAgIGlmIChpID09PSBsIC0gMSkge1xuICAgICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICAgICAgICAgIHRoaXMuc291cmNlS2V5ID0ga2V5XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSBkYXRhW2tleV1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhXG4gICAgfSxcblxuICAgIGluaGVyaXRlZERhdGEoKSB7XG4gICAgICAvLyBEYXRhIGluaGVyaXRlZCBmcm9tIHBhcmVudCwgYW5kIGNsb25lZCB0byBwcm90ZWN0IGFnYWluc3QgcmVhY3RpdmVcbiAgICAgIC8vIGNoYW5nZXMgdW50aWwgY2hhbmdlcyBhcmUgYXBwbGllZCB0aHJvdWdoIHNldFNvdXJjZURhdGEoKSwgdW5sZXNzXG4gICAgICAvLyBgc291cmNlU2NoZW1hLm11dGF0ZWAgaXMgdHJ1ZSwgaW4gd2hpY2ggY2FzZSBkYXRhIGlzIG11dGF0ZWQgZGlyZWN0bHkuXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaXNUcmFuc2llbnQgJiZcbiAgICAgICAgdGhpcy5jbG9uZWREYXRhID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgdGhpcy5zb3VyY2VEYXRhICYmXG4gICAgICAgIHRoaXMuc291cmNlS2V5ICE9PSBudWxsXG4gICAgICApIHtcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLnNvdXJjZURhdGFbdGhpcy5zb3VyY2VLZXldXG4gICAgICAgIGlmICghdGhpcy5pc011dGF0aW5nKSB7XG4gICAgICAgICAgLy8gVXNlIGEgdHJpY2sgdG8gc3RvcmUgY2xvbmVkIGluaGVyaXRlZCBkYXRhIGluIGNsb25lZERhdGEsIHRvIG1ha2VcbiAgICAgICAgICAvLyBpdCByZWFjdGl2ZSBhbmQgcHJldmVudCBpdCBmcm9tIGJlaW5nIGNsb25lZCBtdWx0aXBsZSB0aW1lcy5cbiAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgICAgIHRoaXMuY2xvbmVkRGF0YSA9IGRhdGEgPSBjbG9uZShkYXRhKVxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBkYXRhID09PSBudWxsICYmXG4gICAgICAgICAgIXRoaXMuaXNDcmVhdGluZyAmJlxuICAgICAgICAgIGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBJZiBkYXRhIG9mIGFuIG9iamVjdCBzb3VyY2UgaXMgbnVsbCwgcmVkaXJlY3QgdG8gaXRzIGNyZWF0ZSByb3V0ZS5cbiAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgcGF0aDogYCR7dGhpcy5wYXRofS9jcmVhdGVgIH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmNsb25lZERhdGFcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uaGFzRGF0YSgpXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBpdGVtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRJdGVtTGFiZWwodGhpcy5zb3VyY2VTY2hlbWEsIHRoaXMuZGF0YSwgeyBleHRlbmRlZDogdHJ1ZSB9KVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgICRyb3V0ZToge1xuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzMzOTMjaXNzdWVjb21tZW50LTExNTg0NzAxNDlcbiAgICAgIGZsdXNoOiAncG9zdCcsXG4gICAgICBoYW5kbGVyKHRvLCBmcm9tKSB7XG4gICAgICAgIC8vIFJlbG9hZCBmb3JtIGRhdGEgd2hlbiBuYXZpZ2F0aW5nIHRvIGEgZGlmZmVyZW50IGVudGl0eSBpbiBzYW1lIGZvcm0uXG4gICAgICAgIGNvbnN0IHBhcmFtID0gdGhpcy5tZXRhPy5wYXJhbVxuICAgICAgICBpZiAoXG4gICAgICAgICAgcGFyYW0gJiZcbiAgICAgICAgICB0aGlzLnByb3ZpZGVzRGF0YSAmJlxuICAgICAgICAgIC8vIFRPRE86IFNlZSBpZiB3ZSBjYW4gcmVtb3ZlIHRoaXMgZHVlIHRvIGBmbHVzaDogJ3Bvc3QnYC5cbiAgICAgICAgICBmcm9tLm1hdGNoZWRbMF0ucGF0aCA9PT0gdG8ubWF0Y2hlZFswXS5wYXRoICYmIC8vIFN0YXlpbmcgb24gc2FtZSBmb3JtXG4gICAgICAgICAgZnJvbS5wYXJhbXNbcGFyYW1dICE9PSAnY3JlYXRlJyAmJiAvLyBCdXQgaGF2ZW4ndCBiZWVuIGNyZWF0aW5nXG4gICAgICAgICAgdG8ucGFyYW1zW3BhcmFtXSAhPT0gZnJvbS5wYXJhbXNbcGFyYW1dIC8vIEdvaW5nIHRvIGEgZGlmZmVyZW50IGVudGl0eVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmxvYWREYXRhKHRydWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc291cmNlRGF0YTogJ2NsZWFyQ2xvbmVkRGF0YScsXG4gICAgLy8gTmVlZGVkIGZvciB0aGUgJ2NyZWF0ZScgcmVkaXJlY3QgaW4gYGluaGVyaXRlZERhdGEoKWAgdG8gd29yazpcbiAgICBjcmVhdGU6ICdzZXR1cERhdGEnXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGVtaXRTY2hlbWFFdmVudChldmVudCwgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50Py5lbWl0RXZlbnQoZXZlbnQsIHBhcmFtcylcbiAgICB9LFxuXG4gICAgZ2V0RGF0YVBhdGhGcm9tKHJvdXRlQ29tcG9uZW50KSB7XG4gICAgICAvLyBHZXQgdGhlIGRhdGEgcGF0aCBieSBkZW5vcm1hbGl6ZVBhdGggdGhlIHJlbGF0aXZlIHJvdXRlIHBhdGhcbiAgICAgIHJldHVybiB0aGlzLmFwaS5kZW5vcm1hbGl6ZVBhdGgoXG4gICAgICAgIHRoaXMucGF0aFxuICAgICAgICAgIC8vIERpdG9WaWV3cyBoYXZlIG5lc3RlZCByb3V0ZXMsIHNvIGRvbid0IHJlbW92ZSB0aGVpciBwYXRoLlxuICAgICAgICAgIC5zbGljZSgocm91dGVDb21wb25lbnQuaXNWaWV3ID8gMCA6IHJvdXRlQ29tcG9uZW50LnBhdGgubGVuZ3RoKSArIDEpXG4gICAgICApXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmdldFJlc291cmNlKClcbiAgICBnZXRSZXNvdXJjZShvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXNvdXJjZSA9IFJlc291cmNlTWl4aW4ubWV0aG9kcy5nZXRSZXNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpXG4gICAgICByZXR1cm4gZ2V0TWVtYmVyUmVzb3VyY2UodGhpcy5pdGVtSWQsIHJlc291cmNlKSB8fCByZXNvdXJjZVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5zZXR1cERhdGEoKVxuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIGlmICh0aGlzLmlzQ3JlYXRpbmcpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVkRGF0YSB8fD0gdGhpcy5jcmVhdGVEYXRhKHRoaXMuc2NoZW1hLCB0aGlzLmNyZWF0aW9uVHlwZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZW5zdXJlRGF0YSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNldFNvdXJjZURhdGEoZGF0YSkge1xuICAgICAgaWYgKHRoaXMuc291cmNlRGF0YSAmJiB0aGlzLnNvdXJjZUtleSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCB7IG1haW5TY2hlbWFDb21wb25lbnQgfSA9IHRoaXNcbiAgICAgICAgdGhpcy5zb3VyY2VEYXRhW3RoaXMuc291cmNlS2V5XSA9XG4gICAgICAgICAgbWFpblNjaGVtYUNvbXBvbmVudC5maWx0ZXJEYXRhKGRhdGEpLmxvY2FsRGF0YVxuICAgICAgICBtYWluU2NoZW1hQ29tcG9uZW50Lm9uQ2hhbmdlKClcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBhZGRTb3VyY2VEYXRhKGRhdGEpIHtcbiAgICAgIHJldHVybiBpc09iamVjdFNvdXJjZSh0aGlzLnNvdXJjZVNjaGVtYSlcbiAgICAgICAgPyB0aGlzLnNldFNvdXJjZURhdGEoZGF0YSlcbiAgICAgICAgOiAhIXRoaXMuc291cmNlRGF0YT8ucHVzaChkYXRhKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5jbGVhckRhdGEoKVxuICAgIGNsZWFyRGF0YSgpIHtcbiAgICAgIHRoaXMuc2V0RGF0YShudWxsKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5zZXREYXRhKClcbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIC8vIHNldERhdGEoKSBpcyBjYWxsZWQgYWZ0ZXIgc3VibWl0IHdoZW4gZGF0YSBoYXMgY2hhbmdlZC5cbiAgICAgIGlmICh0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgIC8vIEZvciBjb21wb25lbnRzIHdpdGggdHJhbnNpZW50IGRhdGEsIG1vZGlmeSB0aGlzLnNvdXJjZURhdGEuXG4gICAgICAgIHRoaXMuc2V0U291cmNlRGF0YShkYXRhKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jcmVhdGVkRGF0YSA9IG51bGxcbiAgICAgICAgdGhpcy5sb2FkZWREYXRhID0gZGF0YVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjbGVhckNsb25lZERhdGEodG8sIGZyb20pIHtcbiAgICAgIC8vIE9ubHkgY2xlYXIgaWYgdGhlIHdhdGNoZWQgc291cmNlRGF0YSBpdHNlbGYgY2hhbmdlcyBpbiB0aGUgZm9ybS5cbiAgICAgIGlmICh0byAhPT0gZnJvbSkge1xuICAgICAgICB0aGlzLmNsb25lZERhdGEgPSB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xvc2UoKVxuICAgIH0sXG5cbiAgICBhc3luYyBjbG9zZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlKHRoaXMucGFyZW50Um91dGVDb21wb25lbnQucGF0aClcbiAgICB9LFxuXG4gICAgZ2V0U3VibWl0VmVyYihwcmVzZW50ID0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICA/IHByZXNlbnRcbiAgICAgICAgICA/ICdjcmVhdGUnXG4gICAgICAgICAgOiAnY3JlYXRlZCdcbiAgICAgICAgOiBwcmVzZW50XG4gICAgICAgICAgPyAnc3VibWl0J1xuICAgICAgICAgIDogJ3N1Ym1pdHRlZCdcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0KGJ1dHRvbiwgeyB2YWxpZGF0ZSA9IHRydWUsIGNsb3NlRm9ybSA9IGZhbHNlIH0gPSB7fSkge1xuICAgICAgaWYgKHZhbGlkYXRlICYmICF0aGlzLnZhbGlkYXRlQWxsKCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGdldFZlcmIgPSBwcmVzZW50ID0+IHRoaXMudmVyYnNbdGhpcy5nZXRTdWJtaXRWZXJiKHByZXNlbnQpXVxuXG4gICAgICAvLyBBbGxvdyBidXR0b25zIHRvIG92ZXJyaWRlIGJvdGggbWV0aG9kIGFuZCByZXNvdXJjZSBwYXRoIHRvIHN1Ym1pdCB0bzpcbiAgICAgIGxldCB7IG1ldGhvZCB9ID0gdGhpc1xuICAgICAgbGV0IHJlc291cmNlID0gdGhpcy5nZXRSZXNvdXJjZSh7IG1ldGhvZCB9KVxuICAgICAgY29uc3QgYnV0dG9uUmVzb3VyY2UgPSBnZXRSZXNvdXJjZShidXR0b24uc2NoZW1hLnJlc291cmNlLCB7XG4gICAgICAgIHBhcmVudDogcmVzb3VyY2VcbiAgICAgIH0pXG4gICAgICByZXNvdXJjZSA9IGJ1dHRvblJlc291cmNlIHx8IHJlc291cmNlXG4gICAgICBtZXRob2QgPSByZXNvdXJjZT8ubWV0aG9kIHx8IG1ldGhvZFxuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0UGF5bG9hZERhdGEoYnV0dG9uLCBtZXRob2QpXG4gICAgICBsZXQgc3VjY2Vzc1xuICAgICAgaWYgKCFidXR0b25SZXNvdXJjZSAmJiB0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLnN1Ym1pdFRyYW5zaWVudChidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEsIHtcbiAgICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHRoaXMuZW1pdFNjaGVtYUV2ZW50KHRoaXMuZ2V0U3VibWl0VmVyYigpKSxcbiAgICAgICAgICBvbkVycm9yOiBlcnJvciA9PlxuICAgICAgICAgICAgdGhpcy5lbWl0U2NoZW1hRXZlbnQoJ2Vycm9yJywge1xuICAgICAgICAgICAgICBjb250ZXh0OiB7IGVycm9yIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIG5vdGlmeVN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnaW5mbycsXG4gICAgICAgICAgICAgIHRpdGxlOiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgICAgICAgICA/IGBJdGVtICR7Y2FwaXRhbGl6ZSh2ZXJiKX1gXG4gICAgICAgICAgICAgICAgOiBgQ2hhbmdlICR7Y2FwaXRhbGl6ZSh2ZXJiKX1gLFxuICAgICAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICAgICAgdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgICAgICAgICAgICA/IGAke3RoaXMuaXRlbUxhYmVsfSB3YXMgJHt2ZXJifS5gXG4gICAgICAgICAgICAgICAgICA6IGBDaGFuZ2VzIHRvICR7dGhpcy5pdGVtTGFiZWx9IHdlcmUgJHt2ZXJifS5gLFxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNpZW50Tm90ZVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbm90aWZ5RXJyb3I6IGVycm9yID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKHRydWUpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgICB0aXRsZTogJ1JlcXVlc3QgRXJyb3InLFxuICAgICAgICAgICAgICB0ZXh0OiBgVW5hYmxlIHRvICR7dmVyYn0gJHt0aGlzLml0ZW1MYWJlbH0uYFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5zdWJtaXRSZXNvdXJjZShidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEsIHtcbiAgICAgICAgICBzZXREYXRhOiB0cnVlLFxuICAgICAgICAgIG9uU3VjY2VzczogKCkgPT4gdGhpcy5lbWl0U2NoZW1hRXZlbnQodGhpcy5nZXRTdWJtaXRWZXJiKCkpLFxuICAgICAgICAgIG9uRXJyb3I6IGVycm9yID0+XG4gICAgICAgICAgICB0aGlzLmVtaXRTY2hlbWFFdmVudCgnZXJyb3InLCB7XG4gICAgICAgICAgICAgIGNvbnRleHQ6IHsgZXJyb3IgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgbm90aWZ5U3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVyYiA9IGdldFZlcmIoZmFsc2UpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgICAgICAgICAgdGl0bGU6IGBTdWNjZXNzZnVsbHkgJHtjYXBpdGFsaXplKHZlcmIpfWAsXG4gICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuaXRlbUxhYmVsfSB3YXMgJHt2ZXJifS5gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbm90aWZ5RXJyb3I6IGVycm9yID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKHRydWUpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgICB0aXRsZTogJ1JlcXVlc3QgRXJyb3InLFxuICAgICAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICAgICAgYFVuYWJsZSB0byAke3ZlcmJ9ICR7dGhpcy5pdGVtTGFiZWx9JHtlcnJvciA/ICc6JyA6ICcnfWAsXG4gICAgICAgICAgICAgICAgZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3JcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICB0aGlzLnJlc2V0VmFsaWRhdGlvbigpXG4gICAgICAgIGlmIChjbG9zZUZvcm0gfHwgYnV0dG9uLmNsb3NlRm9ybSkge1xuICAgICAgICAgIHRoaXMuY2xvc2UoKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNDcmVhdGluZykge1xuICAgICAgICAgIC8vIFJlZGlyZWN0IHRvIHRoZSBmb3JtIGVkaXRpbmcgdGhlIG5ld2x5IGNyZWF0ZWQgaXRlbTpcbiAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuc2NoZW1hLCB0aGlzLmRhdGEpXG4gICAgICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2Uoe1xuICAgICAgICAgICAgcGF0aDogcmVzb2x2ZVBhdGgoYCR7dGhpcy5wYXRofS8uLi8ke2lkfWApLFxuICAgICAgICAgICAgLy8gUHJlc2VydmUgaGFzaCBmb3IgdGFiczpcbiAgICAgICAgICAgIGhhc2g6IHRoaXMuJHJvdXRlLmhhc2hcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc3VjY2Vzc1xuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXRUcmFuc2llbnQoYnV0dG9uLCBfcmVzb3VyY2UsIF9tZXRob2QsIGRhdGEsIHtcbiAgICAgIG9uU3VjY2VzcyxcbiAgICAgIG9uRXJyb3IsXG4gICAgICBub3RpZnlTdWNjZXNzLFxuICAgICAgbm90aWZ5RXJyb3JcbiAgICB9KSB7XG4gICAgICAvLyBIYW5kbGUgdGhlIGRlZmF1bHQgXCJzdWJtaXR0aW5nXCIgb2YgdHJhbnNpZW50LCBuZXN0ZWQgZGF0YTpcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyB0aGlzLmFkZFNvdXJjZURhdGEoZGF0YSlcbiAgICAgICAgOiB0aGlzLnNldFNvdXJjZURhdGEoZGF0YSlcbiAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgIG9uU3VjY2Vzcz8uKClcbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnc3VjY2VzcycsIHtcbiAgICAgICAgICBub3RpZnk6IG5vdGlmeVN1Y2Nlc3NcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gJ0NvdWxkIG5vdCBzdWJtaXQgdHJhbnNpZW50IGl0ZW0nXG4gICAgICAgIG9uRXJyb3I/LihlcnJvcilcbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnZXJyb3InLCB7XG4gICAgICAgICAgbm90aWZ5OiBub3RpZnlFcnJvcixcbiAgICAgICAgICBlcnJvclxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN1Y2Nlc3NcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4vLy0gVXNlIGEgPGRpdj4gZm9yIG5lc3RlZCBmb3JtcywgYXMgd2Ugc2hvdWxkbid0IG5lc3QgYWN0dWFsIDxmb3JtPiB0YWdzLlxuZGl2KFxuICB2LWlmPVwibmVzdGVkXCJcbilcbiAgc2xvdFxuZm9ybS5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIHYtZWxzZVxuICBAc3VibWl0LnByZXZlbnRcbilcbiAgc2xvdFxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0Zvcm1Jbm5lcicsIHtcbiAgcHJvcHM6IHtcbiAgICBuZXN0ZWQ6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0Zvcm0gZnJvbSAnLi9EaXRvRm9ybS52dWUnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0Zvcm1OZXN0ZWQnLCB7XG4gIGV4dGVuZHM6IERpdG9Gb3JtXG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLmRpdG8tZm9ybS1uZXN0ZWQge1xuICAvLyBObyBzY3JvbGxpbmcgaW5zaWRlIG5lc3RlZCBmb3JtcywgYW5kIHByZXZlbnQgb3BlbiAubXVsdGlzZWxlY3QgZnJvbVxuICAvLyBiZWluZyBjcm9wcGVkLlxuICBvdmVyZmxvdzogdmlzaWJsZTtcbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tZXJyb3JzKFxuICB2LWlmPVwiZXJyb3JzXCJcbilcbiAgdWxcbiAgICBsaShcbiAgICAgIHYtZm9yPVwiZXJyb3Igb2YgZXJyb3JzXCJcbiAgICApIHt7IGVycm9yIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHRpcHB5IGZyb20gJ3RpcHB5LmpzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IG1hcmtSYXcgfSBmcm9tICd2dWUnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0Vycm9ycycsIHtcbiAgcHJvcHM6IHtcbiAgICBlcnJvcnM6IHsgdHlwZTogQXJyYXksIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRpcDogbnVsbFxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIGVycm9ycygpIHtcbiAgICAgIHRoaXMuJG5leHRUaWNrKHRoaXMudXBkYXRlRXJyb3JzKVxuICAgIH1cbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgdGhpcy50aXA/LmRlc3Ryb3koKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICB1cGRhdGVFcnJvcnMoKSB7XG4gICAgICBsZXQgeyB0aXAgfSA9IHRoaXNcbiAgICAgIHRpcD8uaGlkZSgpXG4gICAgICBpZiAodGhpcy5lcnJvcnMpIHtcbiAgICAgICAgdGlwID0gdGhpcy50aXAgPz89IG1hcmtSYXcodGlwcHkodGhpcy4kZWwuY2xvc2VzdCgnLmRpdG8tY29udGFpbmVyJykpKVxuICAgICAgICB0aXAuc2V0UHJvcHMoe1xuICAgICAgICAgIGNvbnRlbnQ6IHRoaXMuZXJyb3JzLmpvaW4oJ1xcbicpLFxuICAgICAgICAgIHRoZW1lOiAnZXJyb3InLFxuICAgICAgICAgIHRyaWdnZXI6ICdtYW51YWwnLFxuICAgICAgICAgIGFwcGVuZFRvOiAncGFyZW50JyxcbiAgICAgICAgICBwbGFjZW1lbnQ6ICdib3R0b20tc3RhcnQnLFxuICAgICAgICAgIGFuaW1hdGlvbjogJ3NoaWZ0LWF3YXktc3VidGxlJyxcbiAgICAgICAgICBwb3BwZXJPcHRpb25zOiB7XG4gICAgICAgICAgICBtb2RpZmllcnM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdmbGlwJyxcbiAgICAgICAgICAgICAgICBlbmFibGVkOiBmYWxzZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICBoaWRlT25DbGljazogZmFsc2UsXG4gICAgICAgICAgb2Zmc2V0OiBbMywgM10sIC8vIDEvMiBmb3JtLXNwYWNpbmdcbiAgICAgICAgICB6SW5kZXg6IDFcbiAgICAgICAgfSlcbiAgICAgICAgdGlwLnBvcHBlci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAoKSA9PiB0aXAuaGlkZSgpKVxuICAgICAgICB0aXAuc2hvdygpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tZXJyb3JzIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG5cbiAgdWwge1xuICAgIGNvbG9yOiAkY29sb3ItZXJyb3I7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tc2NvcGVzXG4gIFJvdXRlckxpbmsoXG4gICAgdi1mb3I9XCIoc2NvcGUsIGtleSkgaW4gc2NvcGVzXCJcbiAgICA6a2V5PVwia2V5XCJcbiAgICB2LXNsb3Q9XCJ7IG5hdmlnYXRlIH1cIlxuICAgIDp0bz1cImdldFNjb3BlTGluayhzY29wZSlcIlxuICAgIGN1c3RvbVxuICApXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLXNlbGVjdGVkJzogc2NvcGUubmFtZSA9PT0gcXVlcnkuc2NvcGUgfVwiXG4gICAgICA6dGl0bGU9XCJzY29wZS5oaW50IHx8IGdldExhYmVsKHNjb3BlKVwiXG4gICAgICBAY2xpY2s9XCJuYXZpZ2F0ZVwiXG4gICAgKSB7eyBnZXRMYWJlbChzY29wZSkgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9TY29wZXMnLCB7XG4gIHByb3BzOiB7XG4gICAgcXVlcnk6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNjb3BlczogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0U2NvcGVMaW5rKHNjb3BlKSB7XG4gICAgICBjb25zdCBxdWVyeSA9IHsgLi4udGhpcy5xdWVyeSwgc2NvcGU6IHNjb3BlLm5hbWUgfVxuICAgICAgaWYgKHF1ZXJ5LnBhZ2UpIHtcbiAgICAgICAgcXVlcnkucGFnZSA9IDBcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmdldFF1ZXJ5TGluayhxdWVyeSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zY29wZXMge1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBkaXNwbGF5OiBmbGV4O1xuXG4gIC5kaXRvLWJ1dHRvbiB7XG4gICAgQGluY2x1ZGUgZWxsaXBzaXM7XG5cbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgIC8vIEEgYml0IG1vcmUgdGhhbiB0aGUgd2lkdGggb2YgZWxsaXBzaXMsIHRvIHByZXZlbnQgcmVwbGFjaW5nIHNob3J0IHdvcmRzXG4gICAgLy8gd2l0aCBlbGxpcHNpcy5cbiAgICBtaW4td2lkdGg6IDNlbTtcbiAgICBmbGV4OiAwIDEgYXV0bztcblxuICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMWVtO1xuICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMWVtO1xuICAgICAgcGFkZGluZy1sZWZ0OiAxZW07XG4gICAgfVxuXG4gICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAxZW07XG4gICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMWVtO1xuICAgICAgcGFkZGluZy1yaWdodDogMWVtO1xuICAgIH1cblxuICAgICYgKyAuZGl0by1idXR0b24ge1xuICAgICAgbWFyZ2luLWxlZnQ6IC0xcHg7XG4gICAgfSAvLyBEb24ndCBjb3ZlciB0aGUgZm9jdXNlZCBib3JkZXIgb2YgYnV0dG9uczpcbiAgICAmOmZvY3VzIHtcbiAgICAgIHotaW5kZXg6IDE7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cblBhZ2luYXRpb24oXG4gIHYtbW9kZWw6cGFnZT1cInBhZ2VcIlxuICA6cGFnZVNpemU9XCJsaW1pdFwiXG4gIDp0b3RhbD1cInRvdGFsXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBQYWdpbmF0aW9uIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9QYWdpbmF0aW9uJywge1xuICBjb21wb25lbnRzOiB7IFBhZ2luYXRpb24gfSxcblxuICBwcm9wczoge1xuICAgIHF1ZXJ5OiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBsaW1pdDogeyB0eXBlOiBOdW1iZXIsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdG90YWw6IHsgdHlwZTogTnVtYmVyLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBwYWdlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiAoK3RoaXMucXVlcnkucGFnZSB8fCAwKSArIDFcbiAgICAgIH0sXG5cbiAgICAgIHNldChwYWdlKSB7XG4gICAgICAgIGlmICh0aGlzLnBhZ2UgIT09IHBhZ2UpIHtcbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaChcbiAgICAgICAgICAgIHRoaXMuZ2V0UXVlcnlMaW5rKHtcbiAgICAgICAgICAgICAgLi4udGhpcy5xdWVyeSxcbiAgICAgICAgICAgICAgcGFnZTogcGFnZSAtIDFcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCIvLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0RyYWdnaW5nOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0RHJhZ2dhYmxlT3B0aW9ucyhmb3JjZUZhbGxiYWNrID0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IHByZWZpeCA9ICdkaXRvLWRyYWdnYWJsZSdcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFuaW1hdGlvbjogMTUwLFxuICAgICAgICBoYW5kbGU6ICcuZGl0by1idXR0b24tZHJhZycsXG4gICAgICAgIGRyYWdDbGFzczogYCR7cHJlZml4fV9fZHJhZ2AsXG4gICAgICAgIGNob3NlbkNsYXNzOiBgJHtwcmVmaXh9X19jaG9zZW5gLFxuICAgICAgICBnaG9zdENsYXNzOiBgJHtwcmVmaXh9X19naG9zdGAsXG4gICAgICAgIGZhbGxiYWNrQ2xhc3M6IGAke3ByZWZpeH1fX2ZhbGxiYWNrYCxcbiAgICAgICAgZm9yY2VGYWxsYmFjayxcbiAgICAgICAgb25TdGFydDogdGhpcy5vblN0YXJ0RHJhZyxcbiAgICAgICAgb25FbmQ6IHRoaXMub25FbmREcmFnXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uU3RhcnREcmFnKCkge1xuICAgICAgdGhpcy5pc0RyYWdnaW5nID0gdHJ1ZVxuICAgIH0sXG5cbiAgICBvbkVuZERyYWcoeyBvbGRJbmRleCwgbmV3SW5kZXggfSkge1xuICAgICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2VcbiAgICAgIGlmIChvbGRJbmRleCAhPT0gbmV3SW5kZXgpIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHVwZGF0ZU9yZGVyKHNvdXJjZVNjaGVtYSwgbGlzdCwgcGFnaW5hdGlvblJhbmdlKSB7XG4gICAgICBjb25zdCB7IG9yZGVyS2V5IH0gPSBzb3VyY2VTY2hlbWFcbiAgICAgIGlmIChvcmRlcktleSkge1xuICAgICAgICAvLyBSZW9yZGVyIHRoZSBjaGFuZ2VkIGVudHJpZXMgYnkgdGhlaXIgb3JkZXIga2V5LCB0YWtpbmcgcGFnaW5hdGlvblxuICAgICAgICAvLyBvZmZzZXRzIGludG8gYWNjb3VudDpcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gcGFnaW5hdGlvblJhbmdlPy5bMF0gfHwgMFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBsaXN0W2ldW29yZGVyS2V5XSA9IGkgKyBvZmZzZXRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGxpc3RcbiAgICB9XG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by10cmVlLWl0ZW0oXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPWB7XG4gICAgJ2RpdG8tZHJhZ2dpbmcnOiBpc0RyYWdnaW5nLFxuICAgICdkaXRvLWFjdGl2ZSc6IGFjdGl2ZVxuICB9YFxuICA6c3R5bGU9XCJsZXZlbCA+IDAgJiYgeyAnLS1sZXZlbCc6IGxldmVsIH1cIlxuICA6ZGF0YS1wYXRoPVwicGF0aFwiXG4pXG4gIC5kaXRvLXRyZWUtaGVhZGVyKFxuICAgIHYtaWY9XCJsYWJlbFwiXG4gIClcbiAgICAuZGl0by10cmVlLWJyYW5jaChcbiAgICAgIHYtaWY9XCJudW1FbnRyaWVzXCJcbiAgICAgIEBjbGljay5zdG9wPVwib3BlbmVkID0gIW9wZW5lZFwiXG4gICAgKVxuICAgICAgLmRpdG8tY2hldnJvbihcbiAgICAgICAgdi1pZj1cIm51bUVudHJpZXNcIlxuICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW4nOiBvcGVuZWQgfVwiXG4gICAgICApXG4gICAgICAuZGl0by10cmVlLWxhYmVsKFxuICAgICAgICB2LWh0bWw9XCJsYWJlbFwiXG4gICAgICApXG4gICAgICAuZGl0by10cmVlLWluZm8oXG4gICAgICAgIHYtaWY9XCJkZXRhaWxzXCJcbiAgICAgICkge3sgZGV0YWlscyB9fVxuICAgIC5kaXRvLXRyZWUtbGVhZihcbiAgICAgIHYtZWxzZVxuICAgIClcbiAgICAgIC5kaXRvLXRyZWUtbGFiZWwoXG4gICAgICAgIHYtaHRtbD1cImxhYmVsXCJcbiAgICAgIClcbiAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1zbWFsbChcbiAgICAgIHYtaWY9XCJoYXNFZGl0QnV0dG9uc1wiXG4gICAgKVxuICAgICAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgICAgIGEuZGl0by1idXR0b24oXG4gICAgICAgIHYtaWY9XCJkcmFnZ2FibGVcIlxuICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgICAgIClcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1pZj1cImVkaXRhYmxlXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZWRpdClcIlxuICAgICAgICBAY2xpY2s9XCJvbkVkaXRcIlxuICAgICAgKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWlmPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgICAgIEBjbGljaz1cIm9uRGVsZXRlXCJcbiAgICAgIClcbiAgdGFibGUuZGl0by1wcm9wZXJ0aWVzKFxuICAgIHYtaWY9XCJwcm9wZXJ0aWVzXCJcbiAgICB2LXNob3c9XCJvcGVuZWRcIlxuICApXG4gICAgdHIoXG4gICAgICB2LWZvcj1cInByb3BlcnR5IGluIHByb3BlcnRpZXNcIlxuICAgIClcbiAgICAgIHRkXG4gICAgICAgIERpdG9MYWJlbChcbiAgICAgICAgICB2LWlmPVwicHJvcGVydHkubGFiZWwgIT09IGZhbHNlXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KVwiXG4gICAgICAgICAgOmxhYmVsPVwiZ2V0TGFiZWwocHJvcGVydHkpXCJcbiAgICAgICAgKVxuICAgICAgRGl0b1RhYmxlQ2VsbChcbiAgICAgICAgOmNlbGw9XCJwcm9wZXJ0eVwiXG4gICAgICAgIDpzY2hlbWE9XCJwcm9wZXJ0eVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICApXG4gIERpdG9EcmFnZ2FibGUoXG4gICAgdi1pZj1cImNoaWxkcmVuU2NoZW1hXCJcbiAgICB2LXNob3c9XCJvcGVuZWRcIlxuICAgIDpvcHRpb25zPVwiZ2V0RHJhZ2dhYmxlT3B0aW9ucyh0cnVlKVwiXG4gICAgOmRyYWdnYWJsZT1cImNoaWxkcmVuRHJhZ2dhYmxlXCJcbiAgICA6bW9kZWxWYWx1ZT1cInVwZGF0ZU9yZGVyKGNoaWxkcmVuU2NoZW1hLCBjaGlsZHJlbkxpc3QpXCJcbiAgICBAdXBkYXRlOm1vZGVsVmFsdWU9XCJ2YWx1ZSA9PiAoY2hpbGRyZW5MaXN0ID0gdmFsdWUpXCJcbiAgKVxuICAgIERpdG9UcmVlSXRlbShcbiAgICAgIHYtZm9yPVwiKGl0ZW0sIGluZGV4KSBpbiBjaGlsZHJlbkl0ZW1zXCJcbiAgICAgIDprZXk9XCJnZXRJdGVtVWlkKGNoaWxkcmVuU2NoZW1hLCBpdGVtLmRhdGEpXCJcbiAgICAgIDpzY2hlbWE9XCJjaGlsZHJlblNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJnZXRJdGVtRGF0YVBhdGgoY2hpbGRyZW5TY2hlbWEsIGluZGV4KVwiXG4gICAgICA6ZGF0YT1cIml0ZW0uZGF0YVwiXG4gICAgICA6cGF0aD1cIml0ZW0ucGF0aFwiXG4gICAgICA6b3Blbj1cIml0ZW0ub3BlblwiXG4gICAgICA6YWN0aXZlPVwiaXRlbS5hY3RpdmVcIlxuICAgICAgOmRyYWdnYWJsZT1cImNoaWxkcmVuRHJhZ2dhYmxlXCJcbiAgICAgIDpsYWJlbD1cImdldEl0ZW1MYWJlbChjaGlsZHJlblNjaGVtYSwgaXRlbS5kYXRhLCB7IGluZGV4IH0pXCJcbiAgICAgIDpsZXZlbD1cImxldmVsICsgMVwiXG4gICAgKVxuICAgIC8vLSBUT0RPOiBDb252ZXJ0IGRpdG8tdHJlZS1pdGVtIHRvIHVzZSBkaXRvLWxhYmVsIGludGVybmFsbHksIGFuZCB0aGVuXG4gICAgLy8tIHBhc3MgYGFzT2JqZWN0OiB0cnVlYCBpbiB0aGUgYGdldEl0ZW1MYWJlbCgpYCBjYWxsIGFib3ZlLlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgSXRlbU1peGluIGZyb20gJy4uL21peGlucy9JdGVtTWl4aW4nXG5pbXBvcnQgU29ydGFibGVNaXhpbiBmcm9tICcuLi9taXhpbnMvU29ydGFibGVNaXhpbi5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBnZXROYW1lZFNjaGVtYXMsIGhhc0Zvcm1TY2hlbWEgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1RyZWVJdGVtJywge1xuICBtaXhpbnM6IFtJdGVtTWl4aW4sIFNvcnRhYmxlTWl4aW5dLFxuICBlbWl0czogWyd1cGRhdGU6ZGF0YSddLFxuICBpbmplY3Q6IFsnY29udGFpbmVyJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtBcnJheSwgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIG9wZW46IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBhY3RpdmU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkcmFnZ2FibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsZXZlbDogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZW5lZDogdGhpcy5vcGVuIHx8IHRoaXMuc2NoZW1hLm9wZW5cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBtZXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyLm1ldGFcbiAgICB9LFxuXG4gICAgc3RvcmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXIuc3RvcmVcbiAgICB9LFxuXG4gICAgZGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXIuZGlzYWJsZWRcbiAgICB9LFxuXG4gICAgbmVzdGVkTWV0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMubWV0YSxcbiAgICAgICAgc2NoZW1hOiB0aGlzLnNjaGVtYVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwcm9wZXJ0aWVzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS5wcm9wZXJ0aWVzKVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBTaG91bGQgdGhpcyBiZSBuYW1lZCBgc291cmNlU2NoZW1hYCBpbnN0ZWFkPyBVc2UgU291cmNlTWl4aW4/XG4gICAgY2hpbGRyZW5TY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEuY2hpbGRyZW5cbiAgICB9LFxuXG4gICAgY2hpbGRyZW5MaXN0OiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmNoaWxkcmVuU2NoZW1hPy5uYW1lXG4gICAgICAgIHJldHVybiBuYW1lICYmIHRoaXMuZGF0YVtuYW1lXVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmNoaWxkcmVuU2NoZW1hPy5uYW1lXG4gICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVPcmRlcih0aGlzLmNoaWxkcmVuU2NoZW1hLCB2YWx1ZSlcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLW11dGF0aW5nLXByb3BzXG4gICAgICAgICAgdGhpcy5kYXRhW25hbWVdID0gdmFsdWVcbiAgICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6ZGF0YScsIHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGNoaWxkcmVuRHJhZ2dhYmxlKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5jaGlsZHJlbkxpc3Q/Lmxlbmd0aCA+IDEgJiZcbiAgICAgICAgdGhpcy5nZXRTY2hlbWFWYWx1ZSgnZHJhZ2dhYmxlJywge1xuICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgICAgc2NoZW1hOiB0aGlzLmNoaWxkcmVuU2NoZW1hXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfSxcblxuICAgIG51bUNoaWxkcmVuKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5MaXN0Py5sZW5ndGggfHwgMFxuICAgIH0sXG5cbiAgICBudW1Qcm9wZXJ0aWVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllcz8ubGVuZ3RoIHx8IDBcbiAgICB9LFxuXG4gICAgbnVtRW50cmllcygpIHtcbiAgICAgIHJldHVybiB0aGlzLm51bVByb3BlcnRpZXMgKyB0aGlzLm51bUNoaWxkcmVuXG4gICAgfSxcblxuICAgIGNoaWxkcmVuSXRlbXMoKSB7XG4gICAgICBjb25zdCB7IGNoaWxkcmVuU2NoZW1hLCBjaGlsZHJlbkxpc3QgfSA9IHRoaXNcbiAgICAgIGlmIChjaGlsZHJlblNjaGVtYSAmJiBjaGlsZHJlbkxpc3QpIHtcbiAgICAgICAgY29uc3QgeyBlZGl0UGF0aCB9ID0gdGhpcy5jb250YWluZXJcbiAgICAgICAgY29uc3QgY2hpbGRyZW5PcGVuID0gIXRoaXMucGF0aCAmJiBjaGlsZHJlblNjaGVtYS5vcGVuXG4gICAgICAgIC8vIEJ1aWxkIGEgY2hpbGRyZW4gbGlzdCB3aXRoIGNoaWxkIG1ldGEgaW5mb3JtYXRpb24gZm9yIHRoZSB0ZW1wbGF0ZS5cbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuTGlzdC5tYXAoKGRhdGEsIGluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgcGF0aCA9IChcbiAgICAgICAgICAgIGNoaWxkcmVuU2NoZW1hLnBhdGggJiZcbiAgICAgICAgICAgIGAke3RoaXMucGF0aH0vJHtjaGlsZHJlblNjaGVtYS5wYXRofS8ke2luZGV4fWBcbiAgICAgICAgICApXG4gICAgICAgICAgY29uc3Qgb3BlbiA9IChcbiAgICAgICAgICAgIGNoaWxkcmVuT3BlbiB8fFxuICAgICAgICAgICAgLy8gT25seSBjb3VudCBhcyBcImluIGVkaXQgcGF0aFwiIHdoZW4gaXQncyBub3QgdGhlIGZ1bGwgZWRpdCBwYXRoLlxuICAgICAgICAgICAgZWRpdFBhdGguc3RhcnRzV2l0aChwYXRoKSAmJiBwYXRoLmxlbmd0aCA8IGVkaXRQYXRoLmxlbmd0aFxuICAgICAgICAgIClcbiAgICAgICAgICBjb25zdCBhY3RpdmUgPSBlZGl0UGF0aCA9PT0gcGF0aFxuICAgICAgICAgIHJldHVybiB7IGRhdGEsIHBhdGgsIG9wZW4sIGFjdGl2ZSB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICByZXR1cm4gW11cbiAgICB9LFxuXG4gICAgZGV0YWlscygpIHtcbiAgICAgIGNvbnN0IHsgbnVtQ2hpbGRyZW4gfSA9IHRoaXNcbiAgICAgIHJldHVybiAoXG4gICAgICAgIG51bUNoaWxkcmVuICYmXG4gICAgICAgIGAke251bUNoaWxkcmVufSAke1xuICAgICAgICAgIG51bUNoaWxkcmVuID09PSAxID8gJ2l0ZW0nIDogJ2l0ZW1zJ1xuICAgICAgICB9YFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBoYXNFZGl0QnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmRyYWdnYWJsZSB8fCB0aGlzLmVkaXRhYmxlIHx8IHRoaXMuZGVsZXRhYmxlXG4gICAgfSxcblxuICAgIC8vIFRPRE86IFN1cHBvcnQgY3JlYXRhYmxlIVxuICAgIC8vIFRPRE86IEFkZCBzdXBwb3J0IGZvciBjcmVhdGFibGUsIGVkaXRhYmxlIGFuZCBkZWxldGFibGUgb3ZlcnJpZGVzIG9uIHRoZVxuICAgIC8vIGFzc29jaWF0ZWQgZm9ybXMsIGp1c3QgbGlrZSBpbiBgVHlwZUxpc3RgIGFuZCBgVHlwZU9iamVjdGAsIHRocm91Z2hcbiAgICAvLyBgRGl0b0VkaXRCdXR0b25zYC4gSXQgd291bGQgYmUgYmVzdCB0byB1c2UgYERpdG9FZGl0QnV0dG9uc2AgaGVyZSB0b28uXG4gICAgY3JlYXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY3JlYXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGNyZWF0YWJsZSkge1xuICAgICAgICByZXR1cm4gY3JlYXRhYmxlICYmIGhhc0Zvcm1TY2hlbWEodGhpcy5zY2hlbWEpXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBlZGl0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2VkaXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGVkaXRhYmxlKSB7XG4gICAgICAgIHJldHVybiBlZGl0YWJsZSAmJiBoYXNGb3JtU2NoZW1hKHRoaXMuc2NoZW1hKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZGVsZXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZGVsZXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSkge1xuICAgICAgcmV0dXJuIGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIHByb3BlcnR5Lm5hbWUpXG4gICAgfSxcblxuICAgIGVkaXRQYXRoKHBhdGgpIHtcbiAgICAgIC8vIEFsbCB3ZSBnb3QgdG8gZG8gaXMgcHVzaCB0aGUgcmlnaHQgZWRpdCBwYXRoIHRvIHRoZSByb3V0ZXIsIHRoZSByZXN0XG4gICAgICAvLyBpcyBoYW5kbGVkIGJ5IG91ciByb3V0ZXMsIGFsbG93aW5nIHJlbG9hZHMgYXMgd2VsbC5cbiAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHtcbiAgICAgICAgcGF0aDogYCR7dGhpcy5jb250YWluZXIucGF0aH0ke3BhdGh9YCxcbiAgICAgICAgLy8gUHJlc2VydmUgY3VycmVudCBxdWVyeVxuICAgICAgICBxdWVyeTogdGhpcy4kcm91dGUucXVlcnlcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uRWRpdCgpIHtcbiAgICAgIHRoaXMuZWRpdFBhdGgodGhpcy5wYXRoKVxuICAgIH0sXG5cbiAgICBvbkRlbGV0ZSgpIHtcbiAgICAgIC8vIFRPRE86IEltcGxlbWVudCFcbiAgICB9LFxuXG4gICAgb25DaGFuZ2UoKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lci5vbkNoYW5nZSgpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZVxuICAgIG9uRW5kRHJhZyhldmVudCkge1xuICAgICAgU29ydGFibGVNaXhpbi5tZXRob2RzLm9uRW5kRHJhZy5jYWxsKHRoaXMsIGV2ZW50KVxuICAgICAgY29uc3QgeyBpdGVtIH0gPSBldmVudFxuICAgICAgLy8gUHJlc2VydmUgYWN0aXZlIHN0YXRlIG9mIGVkaXRlZCBzdWItaXRlbXMsIGJ5IGVkaXRpbmcgdGhlaXIgbmV3IHBhdGguXG4gICAgICBpZiAoaXRlbS5jbGFzc0xpc3QuY29udGFpbnMoJ2RpdG8tYWN0aXZlJykpIHtcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZWRpdFBhdGgoZXZlbnQuaXRlbS5kYXRhc2V0LnBhdGgpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdHJlZS1pdGVtIHtcbiAgLS1jaGV2cm9uLWluZGVudDogI3skY2hldnJvbi1pbmRlbnR9O1xuXG4gID4gLmRpdG8tdHJlZS1oZWFkZXIge1xuICAgID4gLmRpdG8tdHJlZS1icmFuY2gsXG4gICAgPiAuZGl0by10cmVlLWxlYWYge1xuICAgICAgLy8gVXNlIGAtLWxldmVsYCBDU1MgdmFyaWFibGUgdG8gY2FsY3VsYXRlZCB0aGUgYWNjdW11bGF0ZWQgaW5kZW50XG4gICAgICAvLyBwYWRkaW5nIGRpcmVjdGx5IGluc3RlYWQgb2YgaGF2aW5nIGl0IGFjY3VtdWxhdGUgaW4gbmVzdGVkIENTUy5cbiAgICAgIC8vIFRoaXMgd2F5LCB3ZSBjYW4ga2VlcCB0aGUgLmRpdG8tYWN0aXZlIGFyZWEgY292ZXIgdGhlIGZ1bGwgd2lkdGg6XG4gICAgICBwYWRkaW5nLWxlZnQ6IGNhbGModmFyKC0tY2hldnJvbi1pbmRlbnQpICogKHZhcigtLWxldmVsLCAxKSAtIDEpKTtcbiAgICB9XG4gIH1cblxuICAuZGl0by10cmVlLWJyYW5jaCB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG5cbiAgLmRpdG8tdHJlZS1oZWFkZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICB9XG5cbiAgLmRpdG8tdHJlZS1icmFuY2gsXG4gIC5kaXRvLXRyZWUtbGVhZiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4OiBhdXRvO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBtYXJnaW46IDFweCAwO1xuICAgIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuICB9XG5cbiAgLmRpdG8tdHJlZS1sYWJlbCxcbiAgLmRpdG8tdHJlZS1pbmZvIHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB9XG5cbiAgLmRpdG8tdHJlZS1pbmZvIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDAuMzVlbTtcbiAgICBjb2xvcjogcmdiYSgkY29sb3ItYmxhY2ssIDAuMik7XG4gIH1cblxuICAuZGl0by1idXR0b25zIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgbWFyZ2luOiAxcHggMCAxcHggMWVtO1xuICB9XG5cbiAgLmRpdG8tdHJlZS1oZWFkZXI6aG92ZXIge1xuICAgID4gLmRpdG8tYnV0dG9ucyB7XG4gICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICAgIH0gLy8gSGlkZSBidXR0b25zIGR1cmluZyBkcmFnZ2luZ1xuICB9XG5cbiAgJi5kaXRvLWRyYWdnaW5nIHtcbiAgICAuZGl0by10cmVlLWhlYWRlciB7XG4gICAgICA+IC5kaXRvLWJ1dHRvbnMge1xuICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJi5kaXRvLWFjdGl2ZSB7XG4gICAgPiAuZGl0by10cmVlLWhlYWRlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgICAgcGFkZGluZzogMCAkaW5wdXQtcGFkZGluZy1ob3I7XG4gICAgICBtYXJnaW46IDAgKC0kaW5wdXQtcGFkZGluZy1ob3IpO1xuXG4gICAgICA+IC5kaXRvLXRyZWUtYnJhbmNoIHtcbiAgICAgICAgPiAuZGl0by1jaGV2cm9uOjpiZWZvcmUge1xuICAgICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgPiAqID4gLmRpdG8tdHJlZS1sYWJlbCB7XG4gICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tcHJvcGVydGllcyB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luLWxlZnQ6ICRjaGV2cm9uLWluZGVudDtcblxuICAgID4gdHIge1xuICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xuICAgIH1cblxuICAgIC5kaXRvLWxhYmVsIHtcbiAgICAgIG1hcmdpbjogMDtcblxuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnOiAnO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG50aGVhZC5kaXRvLXRhYmxlLWhlYWRcbiAgdHJcbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtZm9yPVwiY29sdW1uIGluIGNvbHVtbnNcIlxuICAgIClcbiAgICAgIHRoKFxuICAgICAgICB2LWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKGNvbHVtbilcIlxuICAgICAgICA6Y2xhc3M9XCJnZXRDb2x1bW5DbGFzcyhjb2x1bW4pXCJcbiAgICAgIClcbiAgICAgICAgUm91dGVyTGluayhcbiAgICAgICAgICB2LWlmPVwiY29sdW1uLnNvcnRhYmxlXCJcbiAgICAgICAgICB2LXNsb3Q9XCJ7IG5hdmlnYXRlIH1cIlxuICAgICAgICAgIDp0bz1cImdldFNvcnRMaW5rKGNvbHVtbilcIlxuICAgICAgICAgIGN1c3RvbVxuICAgICAgICApXG4gICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICA6Y2xhc3M9XCJnZXRTb3J0Q2xhc3MoY29sdW1uKVwiXG4gICAgICAgICAgICBAY2xpY2s9XCJuYXZpZ2F0ZVwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgLmRpdG8tb3JkZXItYXJyb3dzXG4gICAgICAgICAgICBzcGFuIHt7IGdldExhYmVsKGNvbHVtbikgfX1cbiAgICAgICAgc3BhbihcbiAgICAgICAgICB2LWVsc2VcbiAgICAgICAgKSB7eyBnZXRMYWJlbChjb2x1bW4pIH19XG4gICAgdGgoXG4gICAgICB2LWlmPVwiaGFzRWRpdEJ1dHRvbnNcIlxuICAgIClcbiAgICAgIC8vLSBFbXB0eSA8c3Bhbj4gaXMgbmVlZGVkIGZvciBzdHlsaW5nLCBzZWUgX3RhYmxlLnNjc3NcbiAgICAgIHNwYW5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaHlwaGVuYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvVGFibGVIZWFkJywge1xuICBwcm9wczoge1xuICAgIHF1ZXJ5OiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBjb2x1bW5zOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBoYXNFZGl0QnV0dG9uczogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzb3J0KCkge1xuICAgICAgY29uc3Qgb3JkZXIgPSAodGhpcy5xdWVyeS5vcmRlciB8fCAnJykuc3BsaXQoL1xccysvKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogb3JkZXJbMF0sXG4gICAgICAgIG9yZGVyOiBvcmRlclsxXVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29sdW1uQ2xhc3MoY29sdW1uKSB7XG4gICAgICByZXR1cm4gYGRpdG8tY29sdW1uLSR7aHlwaGVuYXRlKGNvbHVtbi5uYW1lKX1gXG4gICAgfSxcblxuICAgIGdldFNvcnRDbGFzcyhjb2x1bW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnNvcnQubmFtZSA9PT0gY29sdW1uLm5hbWVcbiAgICAgICAgPyBgZGl0by1zZWxlY3RlZCBkaXRvLW9yZGVyLSR7dGhpcy5zb3J0Lm9yZGVyfWBcbiAgICAgICAgOiBudWxsXG4gICAgfSxcblxuICAgIGdldFNvcnRMaW5rKGNvbHVtbikge1xuICAgICAgLy8gVG9nZ2xlIG9yZGVyIGlmIHRoZSBzYW1lIGNvbHVtbiBpcyBjbGlja2VkIGFnYWluLlxuICAgICAgY29uc3Qgb3JkZXIgPVxuICAgICAgICB0aGlzLnNvcnQubmFtZSA9PT0gY29sdW1uLm5hbWUgJiYgdGhpcy5zb3J0Lm9yZGVyID09PSAnYXNjJ1xuICAgICAgICAgID8gJ2Rlc2MnXG4gICAgICAgICAgOiAnYXNjJ1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlMaW5rKHtcbiAgICAgICAgLi4udGhpcy5xdWVyeSxcbiAgICAgICAgb3JkZXI6IGAke2NvbHVtbi5uYW1lfSAke29yZGVyfWBcbiAgICAgIH0pXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdGFibGUtaGVhZCB7XG4gIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gIHRyIHtcbiAgICB0aCB7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gICAgICAuZGl0by1idXR0b24ge1xuICAgICAgICAvLyBDb252ZW50aW9uOiBOZXN0ZWQgc3BhbnMgaGFuZGxlIHBhZGRpbmcsIHNlZSBiZWxvd1xuICAgICAgICBkaXNwbGF5OiBibG9jazsgLy8gT3ZlcnJpZGUgZGVmYXVsdCBpbmxpbmUtZmxleCBwb3NpdGlvbmluZy5cbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIHRleHQtYWxpZ246IGluaGVyaXQ7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgICB9XG5cbiAgICAgIHNwYW4ge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIC8vIENvbnZlbnRpb246IE5lc3RlZCBzcGFucyBoYW5kbGUgcGFkZGluZ1xuICAgICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcblxuICAgICAgICAmOmVtcHR5OjphZnRlciB7XG4gICAgICAgICAgLy8gUHJldmVudCBlbXB0eSA8dGg+IGZyb20gY29sbGFwc2luZ1xuICAgICAgICAgIGNvbnRlbnQ6ICdcXDIwMGInOyAvLyB6ZXJvLXdpZHRoIHNwYWNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgID4gc3BhbiB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG50ZChcbiAgOmNsYXNzPVwiY2VsbC5jbGFzc1wiXG4gIDpzdHlsZT1cImNlbGwuc3R5bGVcIlxuKVxuICAvLy0gVE9ETzogSW1wbGVtZW50IGlubGluZWQgY29tcG9uZW50cyBpbiBjZWxsIG1vZGUhXG4gIGNvbXBvbmVudChcbiAgICB2LWlmPVwiY2VsbC5jb21wb25lbnRcIlxuICAgIDppcz1cImNlbGwuY29tcG9uZW50XCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIClcbiAgc3BhbihcbiAgICB2LWVsc2VcbiAgICB2LWh0bWw9XCJyZW5kZXJDZWxsKGRhdGEpXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgQ29udGV4dE1peGluIGZyb20gJy4uL21peGlucy9Db250ZXh0TWl4aW4uanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBlc2NhcGVIdG1sIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvVGFibGVDZWxsJywge1xuICBtaXhpbnM6IFtDb250ZXh0TWl4aW5dLFxuXG4gIHByb3BzOiB7XG4gICAgY2VsbDogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICByZW5kZXJDZWxsKGl0ZW0pIHtcbiAgICAgIGNvbnN0IHsgbmFtZSwgcmVuZGVyIH0gPSB0aGlzLmNlbGxcbiAgICAgIGNvbnN0IHZhbHVlID0gaXRlbVtuYW1lXVxuICAgICAgcmV0dXJuIHJlbmRlclxuICAgICAgICA/IHJlbmRlci5jYWxsKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICBkYXRhOiBpdGVtLFxuICAgICAgICAgICAgICBkYXRhUGF0aDogYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgbmFtZSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICA6IGVzY2FwZUh0bWwodmFsdWUpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tdXBsb2FkLWZpbGVcbiAgLmRpdG8tdGh1bWJuYWlsKFxuICAgIHYtaWY9XCJ0aHVtYm5haWxcIlxuICAgIDpjbGFzcz1cImBkaXRvLXRodW1ibmFpbC0tJHt0aHVtYm5haWx9YFwiXG4gIClcbiAgICAuZGl0by10aHVtYm5haWxfX2lubmVyXG4gICAgICBpbWcoXG4gICAgICAgIHYtaWY9XCJzb3VyY2VcIlxuICAgICAgICA6c3JjPVwic291cmNlXCJcbiAgICAgICAgY3Jvc3NvcmlnaW49XCJhbm9ueW1vdXNcIlxuICAgICAgKVxuICAgICAgLmRpdG8tdGh1bWJuYWlsX190eXBlKFxuICAgICAgICB2LWVsc2VcbiAgICAgIClcbiAgICAgICAgc3BhbiB7eyB0eXBlIH19XG4gIHNwYW4ge3sgZmlsZS5uYW1lIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvVXBsb2FkRmlsZScsIHtcbiAgcHJvcHM6IHtcbiAgICBmaWxlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0aHVtYm5haWw6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdGh1bWJuYWlsVXJsOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdXBsb2FkVXJsOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdHlwZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIFRZUEVTW3RoaXMuZmlsZS50eXBlXSB8fFxuICAgICAgICB0aGlzLmZpbGUubmFtZS5zcGxpdCgnLicpLnBvcCgpLnRvVXBwZXJDYXNlKClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgc291cmNlKCkge1xuICAgICAgcmV0dXJuIHRoaXMudXBsb2FkVXJsIHx8IHRoaXMudGh1bWJuYWlsVXJsXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJ2ZpbGUudXBsb2FkLmZpbGUnOiB7XG4gICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICBoYW5kbGVyKGZpbGUpIHtcbiAgICAgICAgaWYgKHRoaXMudGh1bWJuYWlsICYmIGZpbGU/LnR5cGUuc3RhcnRzV2l0aCgnaW1hZ2UvJykpIHtcbiAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXG4gICAgICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBsb2FkVXJsID0gcmVhZGVyLnJlc3VsdFxuICAgICAgICAgIH1cbiAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudXBsb2FkVXJsID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuXG5jb25zdCBUWVBFUyA9IHtcbiAgJ3RleHQvcGxhaW4nOiAnVFhUJyxcbiAgJ3RleHQvaHRtbCc6ICdIVE1MJyxcbiAgJ3RleHQvY3NzJzogJ0NTUycsXG4gICd0ZXh0L2phdmFzY3JpcHQnOiAnSlMnLFxuICAnaW1hZ2UvanBlZyc6ICdKUEcnLFxuICAnaW1hZ2UvcG5nJzogJ1BORycsXG4gICdpbWFnZS9naWYnOiAnR0lGJyxcbiAgJ2ltYWdlL3N2Zyt4bWwnOiAnU1ZHJyxcbiAgJ21vdmllL21wNCc6ICdNUDQnLFxuICAnYXVkaW8vbXBlZyc6ICdNUDMnLFxuICAnYXBwbGljYXRpb24vanNvbic6ICdKU09OJyxcbiAgJ2FwcGxpY2F0aW9uL3htbCc6ICdYTUwnLFxuICAnYXBwbGljYXRpb24vcGRmJzogJ1BERicsXG4gICdhcHBsaWNhdGlvbi96aXAnOiAnWklQJ1xufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQHVzZSAnc2FzczptYXRoJztcbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXVwbG9hZC1maWxlIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xufVxuXG4uZGl0by10aHVtYm5haWwge1xuICAkc2VsZjogJjtcblxuICAvLyBTbWFsbCBzaXplIGJ5IGRlZmF1bHRcbiAgLS1tYXgtc2l6ZTogI3sxICogJGlucHV0LWhlaWdodH07XG4gIC0tY29ybmVyLXNpemU6IGNhbGModmFyKC0tbWF4LXNpemUpIC8gNSk7XG4gIC0tc2hhZG93LXNpemU6IDFweDtcbiAgLS1taW4tc2l6ZTogY2FsYygyICogdmFyKC0tY29ybmVyLXNpemUpKTtcbiAgLS1tYXJnaW46IDBlbTtcbiAgLS1kcm9wLXNoYWRvdzogZHJvcC1zaGFkb3coXG4gICAgMCBjYWxjKHZhcigtLXNoYWRvdy1zaXplKSAqIDAuNzUpIHZhcigtLXNoYWRvdy1zaXplKVxuICAgICAgI3tyZ2JhKCRjb2xvci1ibGFjaywgMC40KX1cbiAgKTtcblxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbjogdmFyKC0tbWFyZ2luKTtcbiAgbWFyZ2luLXJpZ2h0OiAwLjVlbTtcbiAgZmlsdGVyOiB2YXIoLS1kcm9wLXNoYWRvdyk7XG5cbiAgJi0tc21hbGwge1xuICAgIC0tbWF4LXNpemU6ICN7MSAqICRpbnB1dC1oZWlnaHR9O1xuICAgIC0tbWFyZ2luOiAwZW07XG4gICAgLS1zaGFkb3ctc2l6ZTogMXB4O1xuICB9XG5cbiAgJi0tbWVkaXVtIHtcbiAgICAtLW1heC1zaXplOiAjezIgKiAkaW5wdXQtaGVpZ2h0fTtcbiAgICAtLW1hcmdpbjogMC4yNWVtO1xuICAgIC0tc2hhZG93LXNpemU6IDEuNXB4O1xuICB9XG5cbiAgJi0tbGFyZ2Uge1xuICAgIC0tbWF4LXNpemU6ICN7NCAqICRpbnB1dC1oZWlnaHR9O1xuICAgIC0tbWFyZ2luOiAwLjVlbTtcbiAgICAtLXNoYWRvdy1zaXplOiAyLjVweDtcbiAgfVxuXG4gICZfX2lubmVyIHtcbiAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgIGNsaXAtcGF0aDogcG9seWdvbihcbiAgICAgIDAgMCxcbiAgICAgIGNhbGMoMTAwJSAtIHZhcigtLWNvcm5lci1zaXplKSkgMCxcbiAgICAgIDEwMCUgdmFyKC0tY29ybmVyLXNpemUpLFxuICAgICAgMTAwJSAxMDAlLFxuICAgICAgMCAxMDAlXG4gICAgKTtcblxuICAgICY6OmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgcmlnaHQ6IDA7XG4gICAgICB3aWR0aDogdmFyKC0tY29ybmVyLXNpemUpO1xuICAgICAgaGVpZ2h0OiB2YXIoLS1jb3JuZXItc2l6ZSk7XG4gICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoNDVkZWcsICNmZmZmZmYsICNlZWVlZWUgNDAlLCAjZGRkZGRkIDUwJSk7XG4gICAgICBmaWx0ZXI6IHZhcigtLWRyb3Atc2hhZG93KTtcbiAgICB9XG4gIH1cblxuICAmX190eXBlIHtcbiAgICAtLWZvbnQtc2l6ZTogdmFyKC0tY29ybmVyLXNpemUpO1xuXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIG1pbi13aWR0aDogdmFyKC0tbWluLXNpemUpO1xuICAgIG1pbi1oZWlnaHQ6IHZhcigtLW1heC1zaXplKTtcbiAgICBhc3BlY3QtcmF0aW86IDMgLyA0O1xuXG4gICAgc3BhbiB7XG4gICAgICAtLWNvbG9yOiAjeyRjb2xvci1ncmV5fTtcblxuICAgICAgZm9udC1zaXplOiBtaW4odmFyKC0tZm9udC1zaXplKSwgI3sxLjI1ICogJGZvbnQtc2l6ZX0pO1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yKTtcblxuICAgICAgI3skc2VsZn06bm90KCN7JHNlbGZ9LS1zbWFsbCkgJiB7XG4gICAgICAgIHBhZGRpbmc6IDAgY2FsYyh2YXIoLS1mb250LXNpemUpIC8gNCk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IGNhbGModmFyKC0tZm9udC1zaXplKSAvIDQpO1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvcik7XG4gICAgICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgICAgfVxuXG4gICAgICAjeyRzZWxmfS0tbWVkaXVtICYge1xuICAgICAgICAtLWNvbG9yOiAjeyRjb2xvci1saWdodH07XG4gICAgICB9XG5cbiAgICAgICN7JHNlbGZ9LS1sYXJnZSAmIHtcbiAgICAgICAgLS1jb2xvcjogI3skY29sb3ItbGlnaHRlcn07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaW1nIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICAvLyBTVkcgaW1hZ2VzIG5lZWQgMTAwJSBzZXR0aW5ncyB0byBzY2FsZSBpbnRvIHRoZSBjb250YWluZXIuXG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG1pbi13aWR0aDogdmFyKC0tbWluLXNpemUpO1xuICAgIG1pbi1oZWlnaHQ6IHZhcigtLW1pbi1zaXplKTtcbiAgICBtYXgtd2lkdGg6IHZhcigtLW1heC1zaXplKTtcbiAgICBtYXgtaGVpZ2h0OiB2YXIoLS1tYXgtc2l6ZSk7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBkZWZhdWx0RG9jdW1lbnQsIHRyeU9uTW91bnRlZCwgdHJ5T25TY29wZURpc3Bvc2UsIHVucmVmRWxlbWVudCwgdXNlVk1vZGVsIH0gZnJvbSAnQHZ1ZXVzZS9jb3JlJztcbmltcG9ydCB7IGlzUmVmLCB0b1ZhbHVlLCBuZXh0VGljaywgZGVmaW5lQ29tcG9uZW50LCByZWYsIHJlYWN0aXZlLCBoIH0gZnJvbSAndnVlJztcbmltcG9ydCBTb3J0YWJsZSBmcm9tICdzb3J0YWJsZWpzJztcblxuZnVuY3Rpb24gdXNlU29ydGFibGUoZWwsIGxpc3QsIG9wdGlvbnMgPSB7fSkge1xuICBsZXQgc29ydGFibGU7XG4gIGNvbnN0IHsgZG9jdW1lbnQgPSBkZWZhdWx0RG9jdW1lbnQsIC4uLnJlc2V0T3B0aW9ucyB9ID0gb3B0aW9ucztcbiAgY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgb25VcGRhdGU6IChlKSA9PiB7XG4gICAgICBtb3ZlQXJyYXlFbGVtZW50KGxpc3QsIGUub2xkSW5kZXgsIGUubmV3SW5kZXgsIGUpO1xuICAgIH1cbiAgfTtcbiAgY29uc3Qgc3RhcnQgPSAoKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gdHlwZW9mIGVsID09PSBcInN0cmluZ1wiID8gZG9jdW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoZWwpIDogdW5yZWZFbGVtZW50KGVsKTtcbiAgICBpZiAoIXRhcmdldCB8fCBzb3J0YWJsZSAhPT0gdm9pZCAwKVxuICAgICAgcmV0dXJuO1xuICAgIHNvcnRhYmxlID0gbmV3IFNvcnRhYmxlKHRhcmdldCwgeyAuLi5kZWZhdWx0T3B0aW9ucywgLi4ucmVzZXRPcHRpb25zIH0pO1xuICB9O1xuICBjb25zdCBzdG9wID0gKCkgPT4ge1xuICAgIHNvcnRhYmxlPy5kZXN0cm95KCk7XG4gICAgc29ydGFibGUgPSB2b2lkIDA7XG4gIH07XG4gIGNvbnN0IG9wdGlvbiA9IChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgIGlmICh2YWx1ZSAhPT0gdm9pZCAwKVxuICAgICAgc29ydGFibGU/Lm9wdGlvbihuYW1lLCB2YWx1ZSk7XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIHNvcnRhYmxlPy5vcHRpb24obmFtZSk7XG4gIH07XG4gIHRyeU9uTW91bnRlZChzdGFydCk7XG4gIHRyeU9uU2NvcGVEaXNwb3NlKHN0b3ApO1xuICByZXR1cm4ge1xuICAgIHN0b3AsXG4gICAgc3RhcnQsXG4gICAgb3B0aW9uXG4gIH07XG59XG5mdW5jdGlvbiBpbnNlcnROb2RlQXQocGFyZW50RWxlbWVudCwgZWxlbWVudCwgaW5kZXgpIHtcbiAgY29uc3QgcmVmRWxlbWVudCA9IHBhcmVudEVsZW1lbnQuY2hpbGRyZW5baW5kZXhdO1xuICBwYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShlbGVtZW50LCByZWZFbGVtZW50KTtcbn1cbmZ1bmN0aW9uIHJlbW92ZU5vZGUobm9kZSkge1xuICBpZiAobm9kZS5wYXJlbnROb2RlKVxuICAgIG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChub2RlKTtcbn1cbmZ1bmN0aW9uIG1vdmVBcnJheUVsZW1lbnQobGlzdCwgZnJvbSwgdG8sIGUgPSBudWxsKSB7XG4gIGlmIChlICE9IG51bGwpIHtcbiAgICByZW1vdmVOb2RlKGUuaXRlbSk7XG4gICAgaW5zZXJ0Tm9kZUF0KGUuZnJvbSwgZS5pdGVtLCBmcm9tKTtcbiAgfVxuICBjb25zdCBfdmFsdWVJc1JlZiA9IGlzUmVmKGxpc3QpO1xuICBjb25zdCBhcnJheSA9IF92YWx1ZUlzUmVmID8gWy4uLnRvVmFsdWUobGlzdCldIDogdG9WYWx1ZShsaXN0KTtcbiAgaWYgKHRvID49IDAgJiYgdG8gPCBhcnJheS5sZW5ndGgpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXkuc3BsaWNlKGZyb20sIDEpWzBdO1xuICAgIG5leHRUaWNrKCgpID0+IHtcbiAgICAgIGFycmF5LnNwbGljZSh0bywgMCwgZWxlbWVudCk7XG4gICAgICBpZiAoX3ZhbHVlSXNSZWYpXG4gICAgICAgIGxpc3QudmFsdWUgPSBhcnJheTtcbiAgICB9KTtcbiAgfVxufVxuXG5jb25zdCBVc2VTb3J0YWJsZSA9IC8qIEBfX1BVUkVfXyAqLyAvKkBfX1BVUkVfXyovIGRlZmluZUNvbXBvbmVudCh7XG4gIG5hbWU6IFwiVXNlU29ydGFibGVcIixcbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB0YWc6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IFwiZGl2XCJcbiAgICB9LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfVxuICB9LFxuICBzZXR1cChwcm9wcywgeyBzbG90cyB9KSB7XG4gICAgY29uc3QgbGlzdCA9IHVzZVZNb2RlbChwcm9wcywgXCJtb2RlbFZhbHVlXCIpO1xuICAgIGNvbnN0IHRhcmdldCA9IHJlZigpO1xuICAgIGNvbnN0IGRhdGEgPSByZWFjdGl2ZSh1c2VTb3J0YWJsZSh0YXJnZXQsIGxpc3QsIHByb3BzLm9wdGlvbnMpKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHNsb3RzLmRlZmF1bHQpXG4gICAgICAgIHJldHVybiBoKHByb3BzLnRhZywgeyByZWY6IHRhcmdldCB9LCBzbG90cy5kZWZhdWx0KGRhdGEpKTtcbiAgICB9O1xuICB9XG59KTtcblxuZXhwb3J0IHsgVXNlU29ydGFibGUgfTtcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5Vc2VTb3J0YWJsZS5kaXRvLWRyYWdnYWJsZShcbiAgdi1pZj1cImRyYWdnYWJsZVwiXG4gIDpjbGFzcz1cInsgJ2RpdG8tZHJhZ2dhYmxlLS1kcmFnZ2luZyc6IGlzRHJhZ2dpbmcgfVwiXG4gIDp0YWc9XCJ0YWdcIlxuICA6bW9kZWxWYWx1ZT1cIm1vZGVsVmFsdWVcIlxuICA6b3B0aW9ucz1cInsgLi4ub3B0aW9ucywgb25TdGFydCwgb25FbmQgfVwiXG4gIEB1cGRhdGU6bW9kZWxWYWx1ZT1cIiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsICRldmVudClcIlxuKVxuICBzbG90XG5jb21wb25lbnQoXG4gIHYtZWxzZVxuICA6aXM9XCJ0YWdcIlxuKVxuICBzbG90XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudCdcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgeyBVc2VTb3J0YWJsZSB9IGZyb20gJ0B2dWV1c2UvaW50ZWdyYXRpb25zL3VzZVNvcnRhYmxlL2NvbXBvbmVudCdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRHJhZ2dhYmxlJywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG4gIGNvbXBvbmVudHM6IHsgVXNlU29ydGFibGUgfSxcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnXSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHRhZzoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2RpdidcbiAgICB9LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBkcmFnZ2FibGU6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vdXNlRXZlbnRzOiBudWxsLFxuICAgICAgaXNEcmFnZ2luZzogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uU3RhcnQoZXZlbnQpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5vblN0YXJ0Py4oZXZlbnQpXG4gICAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlXG4gICAgICB0aGlzLm1vdXNlRXZlbnRzPy5yZW1vdmUoKVxuICAgIH0sXG5cbiAgICBvbkVuZChldmVudCkge1xuICAgICAgdGhpcy5vcHRpb25zLm9uRW5kPy4oZXZlbnQpXG4gICAgICAvLyBLZWVwIGBpc0RyYWdnaW5nYCB0cnVlIHVudGlsIHRoZSBuZXh0IG1vdXNlIGludGVyYWN0aW9uIHNvIHRoYXRcbiAgICAgIC8vIGNvbmZ1c2VkIGhvdmVyIHN0YXRlcyBhcmUgY2xlYXJlZCBiZWZvcmUgcmVtb3ZpbmcgdGhlIGhvdmVyIGNhdGNoZXIuXG4gICAgICB0aGlzLm1vdXNlRXZlbnRzID0gdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgICBtb3VzZWRvd246IHRoaXMub25Nb3VzZSxcbiAgICAgICAgbW91c2Vtb3ZlOiB0aGlzLm9uTW91c2UsXG4gICAgICAgIG1vdXNlbGVhdmU6IHRoaXMub25Nb3VzZVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb25Nb3VzZSgpIHtcbiAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlXG4gICAgICB0aGlzLm1vdXNlRXZlbnRzPy5yZW1vdmUoKVxuICAgICAgdGhpcy5tb3VzZUV2ZW50cyA9IG51bGxcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1kcmFnZ2FibGUge1xuICAvLyBPdmVybGF5IGEgaG92ZXIgY2F0Y2hlciB3aGlsZSB3ZSdyZSBkcmFnZ2luZyB0byBwcmV2ZW50IGhvdmVyIHN0YXRlcyBmcm9tXG4gIC8vIGdldHRpbmcgc3R1Y2sgLyBjb25mdXNlZC4gU2FmYXJpIHN0cnVnZ2xlcyB3aXRoIHRoaXMsIHNvIGRpc2FibGUgaXQgdGhlcmUuXG4gIEBpbmNsdWRlIGJyb3dzZXItcXVlcnkoKCdjaHJvbWUnLCAnZmlyZWZveCcpKSB7XG4gICAgJjpoYXMoJl9fY2hvc2VuKSxcbiAgICAmLS1kcmFnZ2luZyB7XG4gICAgICA+ICoge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAgICAgPiA6Zmlyc3QtY2hpbGQ6OmFmdGVyIHtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgaW5zZXQ6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmX19mYWxsYmFjayB7XG4gICAgZmlsdGVyOiBkcm9wLXNoYWRvdygwIDJweCA0cHggJGNvbG9yLXNoYWRvdyk7XG5cbiAgICAvLyBOZXN0ZWQgPHRkPiBuZWVkIHRvIGFsc28gc3dpdGNoIHRvIGBkaXNwbGF5OiBmbGV4YCBzdHlsZSBkdXJpbmcgZHJhZ2dpbmcuXG4gICAgJixcbiAgICB0ZCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuXG4gICAgICA+ICoge1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1zcGlubmVyKFxuICB2LXNob3c9XCJsb2FkaW5nXCJcbiAgOnN0eWxlPVwieyAnLS1jb2xvcic6IGNvbG9yLCAnLS1zaXplJzogc2l6ZSwgJy0tbWFyZ2luJzogbWFyZ2luIH1cIlxuKVxuICAuZGl0by1zcGlubmVyX19wdWxzZS5kaXRvLXNwaW5uZXJfX3B1bHNlMVxuICAuZGl0by1zcGlubmVyX19wdWxzZS5kaXRvLXNwaW5uZXJfX3B1bHNlMlxuICAuZGl0by1zcGlubmVyX19wdWxzZS5kaXRvLXNwaW5uZXJfX3B1bHNlM1xuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1NwaW5uZXInLCB7XG4gIHByb3BzOiB7XG4gICAgbG9hZGluZzoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIGNvbG9yOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSxcbiAgICBzaXplOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSxcbiAgICBtYXJnaW46IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG4uZGl0by1zcGlubmVyIHtcbiAgLS1jb2xvcjogIzk5OTk5OTtcbiAgLS1zaXplOiA4cHg7XG4gIC0tbWFyZ2luOiAycHg7XG5cbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICAmX19wdWxzZSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yKTtcbiAgICB3aWR0aDogdmFyKC0tc2l6ZSk7XG4gICAgaGVpZ2h0OiB2YXIoLS1zaXplKTtcbiAgICBtYXJnaW46IHZhcigtLW1hcmdpbik7XG4gICAgYm9yZGVyLXJhZGl1czogMTAwJTtcbiAgICBhbmltYXRpb246IGRpdG8tc3Bpbm5lci1wdWxzZSAwLjc1cyBjdWJpYy1iZXppZXIoMC4yLCAwLjY4LCAwLjE4LCAxLjA4KSAwc1xuICAgICAgaW5maW5pdGUgYm90aDtcbiAgfVxuXG4gICZfX3B1bHNlMSB7XG4gICAgYW5pbWF0aW9uLWRlbGF5OiAwLjEycztcbiAgfVxuXG4gICZfX3B1bHNlMiB7XG4gICAgYW5pbWF0aW9uLWRlbGF5OiAwLjI0cztcbiAgfVxuXG4gICZfX3B1bHNlMyB7XG4gICAgYW5pbWF0aW9uLWRlbGF5OiAwLjM2cztcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIGRpdG8tc3Bpbm5lci1wdWxzZSB7XG4gIDAlLFxuICA4MCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuXG4gIDQ1JSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjEpO1xuICAgIG9wYWNpdHk6IDAuNztcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIGRpdG8tc3Bpbm5lci1wdWxzZSB7XG4gIDAlLFxuICA4MCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuXG4gIDQ1JSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjEpO1xuICAgIG9wYWNpdHk6IDAuNztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZnVuY3Rpb24gRGl0b1ZOb2RlKHsgdm5vZGUgfSkge1xuICByZXR1cm4gdm5vZGVcbn1cblxuRGl0b1ZOb2RlLnByb3BzID0ge1xuICB2bm9kZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9Wbm9kZScsIERpdG9WTm9kZSlcbjwvc2NyaXB0PlxuIiwiLy8gRGl0b1R5cGVDb21wb25lbnQgaXMgdGhlIGFic3RyYWN0IGJhc2UgY29tcG9uZW50IGZvciBhbGwgb3RoZXIgdHlwZVxuLy8gY29tcG9uZW50cyBpbnNpZGUgdGhlIHR5cGVzLyBmb2xkZXIuIFRoZXJlJ3MgYWxzbyBhIHNlcGFyYXRlIGNvbmNyZXRlXG4vLyBgRGl0b1R5cGVDb21wb25lbnQudnVlYCBjb21wb25lbnQsIHVzZSB0byByZW5kZXIgYHsgdHlwZTogJ2NvbXBvbmVudCcgfWBcbmltcG9ydCB7IGFzQXJyYXksIGNhbWVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBUeXBlTWl4aW4gZnJvbSAnLi9taXhpbnMvVHlwZU1peGluLmpzJ1xuaW1wb3J0IHsgcmVnaXN0ZXJUeXBlQ29tcG9uZW50LCBnZXRUeXBlQ29tcG9uZW50IH0gZnJvbSAnLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGV4dGVuZHM6IERpdG9Db21wb25lbnQsXG4gIG1peGluczogW1R5cGVNaXhpbl0sXG5cbiAgbmF0aXZlRmllbGQ6IGZhbHNlLFxuICB0ZXh0RmllbGQ6IGZhbHNlLFxuICAvLyBTZXQgcmVhc29uYWJsZSBkZWZhdWx0cyBmb3IgYWxsIG9mIHRoZXNlIHRoYXQgYXJlIHVzZWQgYnkgbW9zdCB0eXBlXG4gIC8vIGNvbXBvbmVudHMuIFRoZXNlIG9ubHkgbmVlZCBkZWZpbmluZyBpbiBzdWItY2xhc3NlcyB3aGVuIHRoZXkgZGlmZmVyLlxuICBkZWZhdWx0VmFsdWU6IG51bGwsXG4gIGRlZmF1bHROZXN0ZWQ6IHRydWUsXG4gIGRlZmF1bHRWaXNpYmxlOiB0cnVlLFxuICBnZW5lcmF0ZUxhYmVsOiB0cnVlLFxuICBleGNsdWRlVmFsdWU6IGZhbHNlLFxuICBpZ25vcmVNaXNzaW5nVmFsdWU6IG51bGwsXG4gIG9taXRTcGFjaW5nOiBmYWxzZSxcblxuICBjb21wb25lbnQ6IERpdG9Db21wb25lbnQuY29tcG9uZW50LFxuXG4gIGdldDogZ2V0VHlwZUNvbXBvbmVudCxcblxuICByZWdpc3Rlcih0eXBlcywgZGVmaW5pdGlvbiA9IHt9KSB7XG4gICAgdHlwZXMgPSBhc0FycmF5KHR5cGVzKVxuICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50KFxuICAgICAgYERpdG9UeXBlJHtjYW1lbGl6ZSh0eXBlc1swXSwgdHJ1ZSl9YCxcbiAgICAgIGRlZmluaXRpb25cbiAgICApXG4gICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICByZWdpc3RlclR5cGVDb21wb25lbnQodHlwZSwgY29tcG9uZW50KVxuICAgIH1cbiAgICByZXR1cm4gY29tcG9uZW50XG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5idXR0b24uZGl0by1idXR0b24oXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDp0eXBlPVwidHlwZVwiXG4gIDp0aXRsZT1cInRpdGxlXCJcbiAgOmNsYXNzPVwiYnV0dG9uQ2xhc3NcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbilcbiAgLmRpdG8tYnV0dG9uX190ZXh0KFxuICAgIHYtaWY9XCJ0ZXh0XCJcbiAgKSB7eyB0ZXh0IH19XG4gIC5kaXRvLWluZm8oXG4gICAgdi1pZj1cIiFsYWJlbCAmJiBpbmZvXCJcbiAgICA6ZGF0YS1pbmZvPVwiaW5mb1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgaGFzUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7IGxhYmVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoXG4gIFsnYnV0dG9uJywgJ3N1Ym1pdCddLFxuICAvLyBAdnVlL2NvbXBvbmVudFxuICB7XG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gICAgZXhjbHVkZVZhbHVlOiB0cnVlLFxuICAgIGRlZmF1bHRXaWR0aDogJ2F1dG8nLFxuICAgIGdlbmVyYXRlTGFiZWw6IGZhbHNlLFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIHZlcmIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZlcmJzW3RoaXMubmFtZV1cbiAgICAgIH0sXG5cbiAgICAgIGJ1dHRvbkNsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52ZXJiID8gYGRpdG8tYnV0dG9uLSR7dGhpcy52ZXJifWAgOiBudWxsXG4gICAgICB9LFxuXG4gICAgICB0ZXh0OiBnZXRTY2hlbWFBY2Nlc3NvcigndGV4dCcsIHtcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgICB9KSxcblxuICAgICAgdGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHQgfHwgbGFiZWxpemUodGhpcy52ZXJiKVxuICAgICAgfSxcblxuICAgICAgaW5mbzogZ2V0U2NoZW1hQWNjZXNzb3IoJ2luZm8nLCB7XG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgZGVmYXVsdDogbnVsbFxuICAgICAgfSksXG5cbiAgICAgIGNsb3NlRm9ybTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Nsb3NlRm9ybScsIHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG1ldGhvZHM6IHtcbiAgICAgIC8vIEBvdmVycmlkZVxuICAgICAgZ2V0RXZlbnRzKCkge1xuICAgICAgICBjb25zdCB7IG9uRm9jdXMsIG9uQmx1ciwgb25DbGljayB9ID0gdGhpc1xuICAgICAgICByZXR1cm4geyBvbkZvY3VzLCBvbkJsdXIsIG9uQ2xpY2sgfVxuICAgICAgfSxcblxuICAgICAgYXN5bmMgc3VibWl0KG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzb3VyY2VDb21wb25lbnQ/LnN1Ym1pdCh0aGlzLCBvcHRpb25zKVxuICAgICAgfSxcblxuICAgICAgYXN5bmMgb25DbGljaygpIHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5lbWl0RXZlbnQoJ2NsaWNrJywge1xuICAgICAgICAgIHBhcmVudDogdGhpcy5zY2hlbWFDb21wb25lbnRcbiAgICAgICAgfSlcbiAgICAgICAgLy8gSGF2ZSBidXR0b25zIHRoYXQgZGVmaW5lIHJlc291cmNlcyBjYWxsIGB0aGlzLnN1Ym1pdCgpYCBieSBkZWZhdWx0OlxuICAgICAgICBpZiAoXG4gICAgICAgICAgcmVzID09PSB1bmRlZmluZWQgJiYgLy8gTWVhbmluZzogZG9uJ3QgcHJldmVudCBkZWZhdWx0LlxuICAgICAgICAgIGhhc1Jlc291cmNlKHRoaXMuc2NoZW1hKVxuICAgICAgICApIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnN1Ym1pdCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbilcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWJ1dHRvbiB7XG4gICRzZWxmOiAmO1xuXG4gICZfX3RleHQge1xuICAgIEBpbmNsdWRlIGVsbGlwc2lzO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWNoZWNrYm94XG4gIGlucHV0KFxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICB2LW1vZGVsPVwidmFsdWVcIlxuICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY2hlY2tib3gnLCB7XG4gIG5hdGl2ZUZpZWxkOiB0cnVlXG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tY2hlY2tib3gge1xuICBAZXh0ZW5kICVpbnB1dC1ib3JkZXJsZXNzO1xufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7XG4gIGlzT2JqZWN0LFxuICBpc0Z1bmN0aW9uLFxuICBpc1Byb21pc2UsXG4gIG5vcm1hbGl6ZURhdGFQYXRoLFxuICBnZXRWYWx1ZUF0RGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IG1hcmtSYXcsIHJlZiB9IGZyb20gJ3Z1ZSdcbmltcG9ydCBMb2FkaW5nTWl4aW4gZnJvbSAnLi9Mb2FkaW5nTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0xvYWRpbmdNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIGFzeW5jRGF0YUVudHJpZXM6IG1hcmtSYXcoe30pXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYW5kbGVEYXRhU2NoZW1hKHNjaGVtYSwgbmFtZSwgbG9hZGluZ09wdGlvbnMpIHtcbiAgICAgIGlmICghaXNPYmplY3Qoc2NoZW1hKSkge1xuICAgICAgICBzY2hlbWEgPSB7IGRhdGE6IHNjaGVtYSB9XG4gICAgICB9XG4gICAgICBsZXQgeyBkYXRhID0gdW5kZWZpbmVkLCBkYXRhUGF0aCA9IG51bGwgfSA9IHNjaGVtYVxuICAgICAgLy8gQ3JlYXRlIGEgcmVhY3RpdmUgZW50cnkgZm9yIHRoZSBhc3luYyBkYXRhLCBpZiBpdCBkb2Vzbid0IGV4aXN0IHlldC5cbiAgICAgIC8vIE5PVEU6IGBtYXJrUmF3KClgIGlzIHVzZWQgdG8gYXZvaWQgcmVhY3Rpdml0eSBvbiBgYXN5bmNEYXRhRW50cmllc2BcbiAgICAgIC8vIGl0c2VsZiwgYXMgcmVhY3Rpdml0eSBpcyBvbmx5IGRlc2lyZWQgb24gYHJlYWN0aXZlVmVyc2lvbmAsIHdoaWNoIGlzXG4gICAgICAvLyB1c2VkIHRvIHRyaWdnZXIgY29udHJvbGxlZCByZWV2YWx1YXRpb24gb2YgdGhlIGNvbXB1dGVkIGdldHRlci5cbiAgICAgIGNvbnN0IGFzeW5jRW50cnkgPSAodGhpcy5hc3luY0RhdGFFbnRyaWVzW25hbWVdID8/PSB7XG4gICAgICAgIHJlYWN0aXZlVmVyc2lvbjogcmVmKDEpLFxuICAgICAgICBkZXBlbmRlbmN5RnVuY3Rpb246IG51bGwsXG4gICAgICAgIHJlc29sdmVkRGF0YTogdW5kZWZpbmVkLFxuICAgICAgICByZXNvbHZpbmc6IGZhbHNlLFxuICAgICAgICByZXNvbHZlZDogZmFsc2VcbiAgICAgIH0pXG4gICAgICAvLyBJZiB0aGUgZGF0YSBjYWxsYmFjayBwcm92aWRlZCBhIGRlcGVuZGVuY3kgZnVuY3Rpb24gd2hlbiBpdCB3YXMgY2FsbGVkLFxuICAgICAgLy8gY2FsIGl0IGluIGV2ZXJ5IGNhbGwgb2YgYGhhbmRsZURhdGFTY2hlbWEoKWAgdG8gZm9yY2UgVnVlIHRvIGtlZXAgdHJhY2tcbiAgICAgIC8vIG9mIHRoZSBhc3luYyBkZXBlbmRlbmNpZXMuIEFsc28gYWNjZXNzIGByZWFjdGl2ZVZlcnNpb24udmFsdWVgIHJpZ2h0XG4gICAgICAvLyBhd2F5LCB0byBlbnN1cmUgdGhhdCB0aGUgcmVhY3RpdmUgcHJvcGVydHkgaXMgdHJhY2tlZCBhcyBhIGRlcGVuZGVuY3k6XG4gICAgICBhc3luY0VudHJ5LnJlYWN0aXZlVmVyc2lvbi52YWx1ZSAmJlxuICAgICAgYXN5bmNFbnRyeS5kZXBlbmRlbmN5RnVuY3Rpb24/Lih0aGlzLmNvbnRleHQpXG5cbiAgICAgIGlmIChhc3luY0VudHJ5LnJlc29sdmVkKSB7XG4gICAgICAgIC8vIElmIHRoZSBkYXRhIHdhcyByZXNvbHZlZCBhbHJlYWR5LCByZXR1cm4gaXQgYW5kIGNsZWFyIHRoZSByZXNvbHZlZFxuICAgICAgICAvLyB2YWx1ZS4gVGhpcyB3b3JrcyBiZWNhdXNlIFZ1ZSBjYWNoZXMgdGhlIHJlc3VsdCBvZiBjb21wdXRlZCBnZXR0ZXJzXG4gICAgICAgIC8vIGFuZCBvbmx5IHJlZXZhbHVhdGVzIGlmIG9uZSBvZiB0aGUgZGVwZW5kZW5jaWVzIGNoYW5nZWQuIFRoaXMgaXMgdG9cbiAgICAgICAgLy8gZW5zdXJlIHRoYXQgYSBjYWNoZWQgdmFsdWUgaGVyZSBkb2Vzbid0IGJsb2NrIC8gb3ZlcnJpZGVcbiAgICAgICAgLy8gcmVldmFsdWF0aW9uIHdoZW4gYSBkZXBlbmRlbmN5IGNoYW5nZXM6XG4gICAgICAgIGNvbnN0IHsgcmVzb2x2ZWREYXRhIH0gPSBhc3luY0VudHJ5XG4gICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWREYXRhID0gdW5kZWZpbmVkXG4gICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWQgPSBmYWxzZVxuICAgICAgICByZXR1cm4gcmVzb2x2ZWREYXRhXG4gICAgICB9XG4gICAgICAvLyBBdm9pZCBjYWxsaW5nIHRoZSBkYXRhIGZ1bmN0aW9uIHR3aWNlOlxuICAgICAgaWYgKGFzeW5jRW50cnkucmVzb2x2aW5nKSB7XG4gICAgICAgIGRhdGEgPSBudWxsXG4gICAgICB9IGVsc2UgaWYgKGRhdGEpIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oZGF0YSkpIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBkYXRhKHRoaXMuY29udGV4dClcbiAgICAgICAgICAvLyBJZiB0aGUgcmVzdWx0IG9mIHRoZSBkYXRhIGZ1bmN0aW9uIGlzIGFub3RoZXIgZnVuY3Rpb24sIHRoZW4gdGhlXG4gICAgICAgICAgLy8gZmlyc3QgZGF0YSBmdW5jdGlvbiBpcyB0aGVyZSB0byB0cmFjayBkZXBlbmRlbmNpZXMgYW5kIHRoZSByZWFsXG4gICAgICAgICAgLy8gZGF0YSBsb2FkaW5nIGhhcHBlbnMgaW4gdGhlIGZ1bmN0aW9uIHRoYXQgaXQgcmV0dXJuZWQuIEtlZXAgdHJhY2tcbiAgICAgICAgICAvLyBpdCBpbiBgZGVwZW5kZW5jeUZ1bmN0aW9uYCBzbyBpdCBjYW4gYmUgY2FsbGVkIG9uIGVhY2ggY2FsbCBvZlxuICAgICAgICAgIC8vIGBoYW5kbGVEYXRhU2NoZW1hKClgIHRvIGtlZXAgdGhlIGRlcGVuZGVuY2llcyBpbnRhY3QsIGFuZCBjYWxsXG4gICAgICAgICAgLy8gdGhlIGZ1bmN0aW9uIHRoYXQgaXQgcmV0dXJuZWQgb25jZSB0byBnZXQgdGhlIGFjdHVhbCBkYXRhOlxuICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIGFzeW5jRW50cnkuZGVwZW5kZW5jeUZ1bmN0aW9uID0gZGF0YVxuICAgICAgICAgICAgZGF0YSA9IHJlc3VsdCh0aGlzLmNvbnRleHQpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSByZXN1bHRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gTk9URTogSWYgdGhlIGRhdGEgaXMgbm90IGEgcHJvbWlzZSwgaXQgaXMgcmVzb2x2ZWQgYWxyZWFkeS5cbiAgICAgICAgaWYgKGlzUHJvbWlzZShkYXRhKSkge1xuICAgICAgICAgIC8vIElmIHRoZSBkYXRhIGlzIGFzeW5jaHJvbm91cywgaXQgY2FuJ3QgYmUgcmV0dXJuZWQgc3RyYWlnaHQgYXdheS5cbiAgICAgICAgICAvLyBCdXQgd2UgY2FuIGNoZWF0IHVzaW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYW5kIGByZXNvbHZlZERhdGFgLFxuICAgICAgICAgIC8vIHdoaWNoIGlzIGdvaW5nIHRvIHJlY2VpdmUgdGhlIGxvYWRlZCBkYXRhIGFzeW5jaHJvbm91c2x5LFxuICAgICAgICAgIC8vIHRyaWdnZXJpbmcgYSByZWNvbXB1dGUgb2YgdGhlIGNvbXB1dGVkIHByb3BlcnR5IHRoYXQgY2FsbHNcbiAgICAgICAgICAvLyBgaGFuZGxlRGF0YVNjaGVtYSgpYC5cbiAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmluZyA9IHRydWVcbiAgICAgICAgICB0aGlzLnJlc29sdmVEYXRhKGRhdGEsIGxvYWRpbmdPcHRpb25zKVxuICAgICAgICAgICAgLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWREYXRhID0gZGF0YVxuICAgICAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmluZyA9IGZhbHNlXG4gICAgICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWQgPSB0cnVlXG4gICAgICAgICAgICAgIC8vIFRyaWdnZXIgcmVldmFsdWF0aW9uIG9mIHRoZSBjb21wdXRlZCBnZXR0ZXIgYnkgaW5jcmVhc2luZyB0aGVcbiAgICAgICAgICAgICAgLy8gYHJlYWN0aXZlVmVyc2lvbmAgdmFsdWUuXG4gICAgICAgICAgICAgIGFzeW5jRW50cnkucmVhY3RpdmVWZXJzaW9uLnZhbHVlKytcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmluZyA9IGZhbHNlXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIC8vIENsZWFyIGRhdGEgdW50aWwgcHJvbWlzZSBpcyByZXNvbHZlZCBhbmQgYHJlc29sdmVkRGF0YWAgaXMgc2V0XG4gICAgICAgICAgZGF0YSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkYXRhUGF0aCkge1xuICAgICAgICBkYXRhID0gZ2V0VmFsdWVBdERhdGFQYXRoKFxuICAgICAgICAgIHRoaXMucm9vdERhdGEsXG4gICAgICAgICAgbm9ybWFsaXplRGF0YVBhdGgoYCR7dGhpcy5kYXRhUGF0aH0vJHtkYXRhUGF0aH1gKVxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVxuICAgIH0sXG5cbiAgICBhc3luYyByZXNvbHZlRGF0YShsb2FkLCBsb2FkaW5nT3B0aW9ucyA9IHt9KSB7XG4gICAgICAvLyBVc2UgYSB0aW1lb3V0IHRvIGFsbG93IGFscmVhZHkgcmVzb2x2ZWQgcHJvbWlzZXMgdG8gcmV0dXJuIGRhdGEgd2l0aG91dFxuICAgICAgLy8gc2hvd2luZyBhIGxvYWRpbmcgaW5kaWNhdG9yLlxuICAgICAgbGV0IGNsZWFyTG9hZGluZyA9IGZhbHNlXG4gICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnNldExvYWRpbmcodHJ1ZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgICAgIGNsZWFyTG9hZGluZyA9IHRydWVcbiAgICAgIH0sIDApXG4gICAgICBsZXQgZGF0YSA9IG51bGxcbiAgICAgIHRyeSB7XG4gICAgICAgIGRhdGEgPSBhd2FpdCAoaXNGdW5jdGlvbihsb2FkKSA/IGxvYWQoKSA6IGxvYWQpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmFkZEVycm9yKGVycm9yLm1lc3NhZ2UgfHwgZXJyb3IpXG4gICAgICB9XG4gICAgICBpZiAoY2xlYXJMb2FkaW5nKSB7XG4gICAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpXG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IERhdGFNaXhpbiBmcm9tICcuL0RhdGFNaXhpbi5qcydcbmltcG9ydCB7IGhhc1ZpZXdTY2hlbWEsIGdldFZpZXdFZGl0UGF0aCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBzZXRUZW1wb3JhcnlJZCwgaXNSZWZlcmVuY2UgfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGlzQXJyYXksXG4gIGlzU3RyaW5nLFxuICBpc0Z1bmN0aW9uLFxuICBub3JtYWxpemVEYXRhUGF0aCxcbiAgbGFiZWxpemUsXG4gIGRlYm91bmNlQXN5bmNcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbRGF0YU1peGluXSxcblxuICBjb21wdXRlZDoge1xuICAgIHNlbGVjdGVkVmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgY29udmVydFZhbHVlID0gdmFsdWUgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMucmVsYXRlXG4gICAgICAgICAgICA/IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24odmFsdWUpXG4gICAgICAgICAgICA6IHZhbHVlXG5cbiAgICAgICAgICByZXR1cm4gdGhpcy5oYXNPcHRpb25zXG4gICAgICAgICAgICA/IHRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodmFsKVxuICAgICAgICAgICAgICA/IHZhbFxuICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbHVlID0gaXNBcnJheSh0aGlzLnZhbHVlKVxuICAgICAgICAgID8gdGhpcy52YWx1ZS5tYXAoY29udmVydFZhbHVlKS5maWx0ZXIodmFsdWUgPT4gdmFsdWUgIT09IG51bGwpXG4gICAgICAgICAgOiBjb252ZXJ0VmFsdWUodGhpcy52YWx1ZSlcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgLy8gQXMgc29vbiBhcyB0aGUgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCBhbmQuLi5cbiAgICAgICAgICB0aGlzLmhhc09wdGlvbnMgJiYgKFxuICAgICAgICAgICAgLy8gLi4uaWYgdGhlIHZhbHVlIGlzIGZvcmNlZCB0byBudWxsIGJlY2F1c2UgYSBkaXNhcHBlYXJlZCBvcHRpb24uLi5cbiAgICAgICAgICAgIHZhbHVlID09PSBudWxsICYmIHRoaXMudmFsdWUgIT09IG51bGwgfHxcbiAgICAgICAgICAgIC8vIC4uLm9yIGlmIHRoZSB2YWx1ZSBpcyBhIHJlZmVyZW5jZSwgcmVwbGFjZSBpdCB3aXRoIGl0cyBvcHRpb25cbiAgICAgICAgICAgIC8vIHZhbHVlLCBzbyB0aGF0IGl0J2xsIGhvbGQgYWN0dWFsIGRhdGEsIG5vdCBqdXN0IGEgcmVmZXJlbmNlIGlkLlxuICAgICAgICAgICAgaXNSZWZlcmVuY2UodGhpcy52YWx1ZSlcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLXNpZGUtZWZmZWN0cy1pbi1jb21wdXRlZC1wcm9wZXJ0aWVzXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBjb25zdCBjb252ZXJ0VmFsdWUgPSB2YWx1ZSA9PlxuICAgICAgICAgIHRoaXMucmVsYXRlXG4gICAgICAgICAgICA/IHRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodmFsdWUpXG4gICAgICAgICAgICA6IHZhbHVlXG5cbiAgICAgICAgdGhpcy52YWx1ZSA9IGlzQXJyYXkodmFsdWUpXG4gICAgICAgICAgPyB2YWx1ZS5tYXAoY29udmVydFZhbHVlKVxuICAgICAgICAgIDogY29udmVydFZhbHVlKHZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZE9wdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHRoaXMuc2VsZWN0ZWRWYWx1ZSlcbiAgICB9LFxuXG4gICAgb3B0aW9ucygpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmhhbmRsZURhdGFTY2hlbWEodGhpcy5zY2hlbWEub3B0aW9ucywgJ29wdGlvbnMnKSA/PyBbXVxuICAgICAgaWYgKCFpc0FycmF5KGRhdGEpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBvcHRpb25zIGRhdGEsIHNob3VsZCBiZSBhcnJheTogJHtkYXRhfWApXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzT3B0aW9ucyhkYXRhKVxuICAgIH0sXG5cbiAgICBhY3RpdmVPcHRpb25zKCkge1xuICAgICAgLy8gVGhpcyBpcyBvdmVycmlkZGVuIGluIGBUeXBlTXVsdGlzZWxlY3RgIHRvIHJldHVybiB0aGUgYHNlYXJjaGVkT3B0aW9uc2BcbiAgICAgIC8vIHdoZW4gYSBzZWFyY2ggZmlsdGVyIHdhcyBhcHBsaWVkLlxuICAgICAgcmV0dXJuIHRoaXMub3B0aW9uc1xuICAgIH0sXG5cbiAgICBoYXNPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlT3B0aW9ucy5sZW5ndGggPiAwXG4gICAgfSxcblxuICAgIHJlbGF0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlbGF0ZScsIHtcbiAgICAgIC8vIFRPRE86IENvbnZlcnQgdG8gYHJlbGF0ZUJ5OiAnaWQnYFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgLy8gV2UgY2Fubm90IHVzZSBzY2hlbWEgYWNjZXNzb3IgY2FsbGJhY2sgbWFnaWMgZm9yIGByZWxhdGVgIGFzIHdlIG5lZWRcbiAgICAgIC8vIHRoaXMgb3V0c2lkZSBvZiB0aGUgY29tcG9uZW50J3MgbGlmZS1zcGFuLCBzZWUgYHByb2Nlc3NEYXRhKClgIGJlbG93LlxuICAgICAgY2FsbGJhY2s6IGZhbHNlXG4gICAgfSksXG5cbiAgICBncm91cEJ5OiBnZXRTY2hlbWFBY2Nlc3NvcignZ3JvdXBCeScsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgb3B0aW9ucy5sYWJlbEtleWAgLyBgb3B0aW9uTGFiZWxLZXlgP1xuICAgIG9wdGlvbkxhYmVsOiBnZXRTY2hlbWFBY2Nlc3Nvcignb3B0aW9ucy5sYWJlbCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQobGFiZWwpIHtcbiAgICAgICAgLy8gSWYgbm8gYGxhYmVsYCB3YXMgcHJvdmlkZWQgYnV0IHRoZSBvcHRpb25zIGFyZSBvYmplY3RzLCBhc3N1bWUgYVxuICAgICAgICAvLyBkZWZhdWx0IHZhbHVlIG9mICdsYWJlbCc6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgbGFiZWwgfHxcbiAgICAgICAgICB0aGlzLmdldE9wdGlvbktleSgnbGFiZWwnKSB8fFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBvcHRpb25zLnZhbHVlS2V5YCAvIGBvcHRpb25WYWx1ZUtleWA/XG4gICAgb3B0aW9uVmFsdWU6IGdldFNjaGVtYUFjY2Vzc29yKCdvcHRpb25zLnZhbHVlJywge1xuICAgICAgdHlwZTogW1N0cmluZywgRnVuY3Rpb25dLFxuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIGdldCh2YWx1ZSkge1xuICAgICAgICAvLyBJZiBubyBgbGFiZWxgIHdhcyBwcm92aWRlZCBidXQgdGhlIG9wdGlvbnMgYXJlIG9iamVjdHMsIGFzc3VtZSBhXG4gICAgICAgIC8vIGRlZmF1bHQgdmFsdWUgb2YgJ3ZhbHVlJzpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB2YWx1ZSB8fFxuICAgICAgICAgIHRoaXMucmVsYXRlICYmICdpZCcgfHxcbiAgICAgICAgICB0aGlzLmdldE9wdGlvbktleSgndmFsdWUnKSB8fFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogQ29uc2lkZXIgbW92aW5nIHNlYXJjaCB0byBgb3B0aW9ucy5zZWFyY2hgP1xuICAgIHNlYXJjaEZpbHRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3NlYXJjaCcsIHtcbiAgICAgIHR5cGU6IFtPYmplY3QsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQoc2VhcmNoKSB7XG4gICAgICAgIGlmIChzZWFyY2gpIHtcbiAgICAgICAgICBjb25zdCB7IGZpbHRlciwgZGVib3VuY2UgfSA9IGlzRnVuY3Rpb24oc2VhcmNoKVxuICAgICAgICAgICAgPyB7IGZpbHRlcjogc2VhcmNoIH1cbiAgICAgICAgICAgIDogc2VhcmNoXG4gICAgICAgICAgcmV0dXJuIGRlYm91bmNlID8gZGVib3VuY2VBc3luYyhmaWx0ZXIsIGRlYm91bmNlKSA6IGZpbHRlclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSksXG5cbiAgICBlZGl0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2VkaXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGVkaXRhYmxlKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgZWRpdGFibGUgJiZcbiAgICAgICAgICBoYXNWaWV3U2NoZW1hKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGVkaXRQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZWRpdGFibGUgJiYgdGhpcy5zZWxlY3RlZFZhbHVlXG4gICAgICAgID8gZ2V0Vmlld0VkaXRQYXRoKHRoaXMuc2NoZW1hLCB0aGlzLnNlbGVjdGVkVmFsdWUsIHRoaXMuY29udGV4dClcbiAgICAgICAgOiBudWxsXG4gICAgfSxcblxuICAgIGdyb3VwQnlMYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdyb3VwQnkgPyAnbGFiZWwnIDogbnVsbFxuICAgIH0sXG5cbiAgICBncm91cEJ5T3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdyb3VwQnkgPyAnb3B0aW9ucycgOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRPcHRpb25LZXkoa2V5KSB7XG4gICAgICBjb25zdCBbb3B0aW9uXSA9IHRoaXMuYWN0aXZlT3B0aW9uc1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KG9wdGlvbikgJiYga2V5IGluIG9wdGlvbiA/IGtleSA6IG51bGxcbiAgICB9LFxuXG4gICAgcHJvY2Vzc09wdGlvbnMob3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlbGF0ZSkge1xuICAgICAgICAgIC8vIElmIGlkcyBhcmUgbWlzc2luZyBhbmQgd2Ugd2FudCB0byByZWxhdGUsIHNldCB0ZW1wb3JhcnkgaWRzLlxuICAgICAgICAgIC8vIE5PVEU6IFdlIG5lZWQgdG8gbW9kaWZ5IHRoZSBhY3R1YWwgZGF0YSwgbWFraW5nIGEgY29weSB3b24ndCB3b3JrXG4gICAgICAgICAgLy8gYXMgaXQgd29uJ3QgcHJvcGFnYXRlLlxuICAgICAgICAgIC8vIE5PVEU6IFRoaXMgb25seSBtYWtlcyBzZW5zZSBpZiB0aGUgZGF0YSBpcyBmcm9tIHRoZSBncmFwaCB0aGF0XG4gICAgICAgICAgLy8gd2UncmUgY3VycmVudGx5IGVkaXRpbmcuXG4gICAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKCEoJ2lkJyBpbiBvcHRpb24pKSB7XG4gICAgICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAgICAgc2V0VGVtcG9yYXJ5SWQob3B0aW9uLCAnaWQnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ncm91cEJ5KSB7XG4gICAgICAgICAgY29uc3QgZ3JvdXBlZCA9IHt9XG4gICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMucmVkdWNlKFxuICAgICAgICAgICAgKHJlc3VsdHMsIG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBncm91cCA9IG9wdGlvblt0aGlzLmdyb3VwQnldXG4gICAgICAgICAgICAgIGxldCBlbnRyeSA9IGdyb3VwZWRbZ3JvdXBdXG4gICAgICAgICAgICAgIGlmICghZW50cnkpIHtcbiAgICAgICAgICAgICAgICBlbnRyeSA9IGdyb3VwZWRbZ3JvdXBdID0ge1xuICAgICAgICAgICAgICAgICAgW3RoaXMuZ3JvdXBCeUxhYmVsXTogZ3JvdXAsXG4gICAgICAgICAgICAgICAgICBbdGhpcy5ncm91cEJ5T3B0aW9uc106IFtdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChlbnRyeSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbnRyeVt0aGlzLmdyb3VwQnlPcHRpb25zXS5wdXNoKG9wdGlvbilcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9wdGlvbnNcbiAgICB9LFxuXG4gICAgZ2V0T3B0aW9uRm9yVmFsdWUodmFsdWUpIHtcbiAgICAgIGNvbnN0IGZpbmRPcHRpb24gPSAob3B0aW9ucywgdmFsdWUsIGdyb3VwQnkpID0+IHtcbiAgICAgICAgLy8gU2VhcmNoIGZvciB0aGUgb3B0aW9uIG9iamVjdCB3aXRoIHRoZSBnaXZlbiB2YWx1ZSBhbmQgcmV0dXJuIHRoZVxuICAgICAgICAvLyB3aG9sZSBvYmplY3QuXG4gICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAoZ3JvdXBCeSkge1xuICAgICAgICAgICAgY29uc3QgZm91bmQgPSBmaW5kT3B0aW9uKG9wdGlvbi5vcHRpb25zLCB2YWx1ZSwgbnVsbClcbiAgICAgICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgICAgICByZXR1cm4gZm91bmRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMub3B0aW9uVmFsdWVcbiAgICAgICAgPyBmaW5kT3B0aW9uKHRoaXMuYWN0aXZlT3B0aW9ucywgdmFsdWUsIHRoaXMuZ3JvdXBCeSlcbiAgICAgICAgOiB2YWx1ZVxuICAgIH0sXG5cbiAgICBnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pIHtcbiAgICAgIGNvbnN0IHsgb3B0aW9uVmFsdWUgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc1N0cmluZyhvcHRpb25WYWx1ZSlcbiAgICAgICAgPyBvcHRpb24/LltvcHRpb25WYWx1ZV0gPz8gbnVsbFxuICAgICAgICA6IGlzRnVuY3Rpb24ob3B0aW9uVmFsdWUpXG4gICAgICAgICAgPyBvcHRpb25WYWx1ZShuZXcgRGl0b0NvbnRleHQodGhpcywgeyBvcHRpb24gfSkpXG4gICAgICAgICAgOiBvcHRpb25cbiAgICB9LFxuXG4gICAgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB7XG4gICAgICBjb25zdCB7IG9wdGlvbkxhYmVsIH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNTdHJpbmcob3B0aW9uTGFiZWwpXG4gICAgICAgID8gb3B0aW9uPy5bb3B0aW9uTGFiZWxdXG4gICAgICAgIDogaXNGdW5jdGlvbihvcHRpb25MYWJlbClcbiAgICAgICAgICA/IG9wdGlvbkxhYmVsKG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG9wdGlvbiB9KSlcbiAgICAgICAgICA6IGxhYmVsaXplKGAke29wdGlvbn1gKVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoeyBzY2hlbWEsIHZhbHVlLCBkYXRhUGF0aCB9LCBncmFwaCkge1xuICAgIGlmIChzY2hlbWEucmVsYXRlKSB7XG4gICAgICAvLyBGb3IgaW50ZXJuYWxseSByZWxhdGluZyBkYXRhIChgc2NoZW1hLm9wdGlvbnMuZGF0YVBhdGhgKSwgd2UgbmVlZCB0b1xuICAgICAgLy8gcHJvY2VzcyBib3RoIHRoZSBvcHRpb25zIChmb3IgJyNyZWYnKSBhbmQgdGhlIHZhbHVlICgnI2lkJykuXG4gICAgICAvLyBTZWUgYERhdGFNaXhpbi5oYW5kbGVEYXRhU2NoZW1hKClgOlxuICAgICAgY29uc3QgcGF0aCA9IHNjaGVtYS5vcHRpb25zPy5kYXRhUGF0aFxuICAgICAgY29uc3QgcmVsYXRlZERhdGFQYXRoID0gcGF0aFxuICAgICAgICA/IG5vcm1hbGl6ZURhdGFQYXRoKGAke2RhdGFQYXRofS8ke3BhdGh9YClcbiAgICAgICAgOiBudWxsXG4gICAgICBncmFwaC5hZGRSZWxhdGlvbihkYXRhUGF0aCwgcmVsYXRlZERhdGFQYXRoLCBzY2hlbWEpXG4gICAgICBpZiAocmVsYXRlZERhdGFQYXRoKSB7XG4gICAgICAgIGdyYXBoLnNldFNvdXJjZVJlbGF0ZWQocmVsYXRlZERhdGFQYXRoKVxuICAgICAgfVxuICAgICAgLy8gQ29udmVydCByZWxhdGluZyBvYmplY3RzIHRvIGEgc2hhbGxvdyBjb3B5IHdpdGggb25seSB0aGUgaWQgbGVmdC5cbiAgICAgIC8vIFRPRE86IENvbnZlcnQgdG8gdXNpbmcgYHJlbGF0ZUJ5YDpcbiAgICAgIGNvbnN0IHByb2Nlc3NSZWxhdGUgPSB2YWx1ZSA9PiAodmFsdWUgPyB7IGlkOiB2YWx1ZS5pZCB9IDogdmFsdWUpXG4gICAgICAvLyBTZWxlY3RlZCBvcHRpb25zIGNhbiBiZSBib3RoIG9iamVjdHMgJiBhcnJheXMsIGUuZy4gJ2NoZWNrYm94ZXMnOlxuICAgICAgdmFsdWUgPSBpc0FycmF5KHZhbHVlKVxuICAgICAgICA/IHZhbHVlLm1hcChwcm9jZXNzUmVsYXRlKVxuICAgICAgICA6IHByb2Nlc3NSZWxhdGUodmFsdWUpXG4gICAgfVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxudWwuZGl0by1jaGVja2JveGVzKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1cImBkaXRvLWxheW91dC0ke3NjaGVtYS5sYXlvdXQgfHwgJ3ZlcnRpY2FsJ31gXCJcbilcbiAgbGkoXG4gICAgdi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiXG4gIClcbiAgICBsYWJlbFxuICAgICAgLmRpdG8tY2hlY2tib3hcbiAgICAgICAgaW5wdXQoXG4gICAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkT3B0aW9uc1wiXG4gICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgICAgKVxuICAgICAgICBzcGFuIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY2hlY2tib3hlcycsIHtcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcblxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgZGVmYXVsdFZhbHVlOiBbXSxcbiAgZGVmYXVsdFdpZHRoOiAnYXV0bycsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzZWxlY3RlZE9wdGlvbnM6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLnNlbGVjdGVkVmFsdWUgfHwgW10pLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSlcbiAgICAgIH0sXG5cbiAgICAgIHNldChvcHRpb24pIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gb3B0aW9uIHx8IFtdXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tY2hlY2tib3hlcyB7XG4gIGxhYmVsIHtcbiAgICBAZXh0ZW5kICVpbnB1dC1ib3JkZXJsZXNzO1xuICB9XG5cbiAgaW5wdXQge1xuICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1jb2RlKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpzdHlsZT1cInN0eWxlXCJcbilcbiAgLmRpdG8tY29kZV9fZWRpdG9yKHJlZj1cImVkaXRvclwiKVxuICAuZGl0by1yZXNpemUoXG4gICAgdi1pZj1cInJlc2l6YWJsZVwiXG4gICAgQG1vdXNlZG93bi5zdG9wLnByZXZlbnQ9XCJvbkRyYWdSZXNpemVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgQ29kZUZsYXNrIGZyb20gJ2NvZGVmbGFzaydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjb2RlJywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaGVpZ2h0OiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXM6IGdldFNjaGVtYUFjY2Vzc29yKCdsaW5lcycsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDNcbiAgICB9KSxcblxuICAgIGxhbmd1YWdlOiBnZXRTY2hlbWFBY2Nlc3NvcignbGFuZ3VhZ2UnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnamF2YXNjcmlwdCdcbiAgICB9KSxcblxuICAgIGluZGVudFNpemU6IGdldFNjaGVtYUFjY2Vzc29yKCdpbmRlbnRTaXplJywge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMlxuICAgIH0pLFxuXG4gICAgcmVzaXphYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVzaXphYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBzdHlsZSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQgfHwgYGNhbGMoJHt0aGlzLmxpbmVzfWVtICogdmFyKC0tbGluZS1oZWlnaHQpKWBcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICBjb25zdCBmbGFzayA9IG5ldyBDb2RlRmxhc2sodGhpcy4kcmVmcy5lZGl0b3IsIHtcbiAgICAgIGxhbmd1YWdlOiB0aGlzLmxhbmd1YWdlLFxuICAgICAgaW5kZW50U2l6ZTogdGhpcy5pbmRlbnRTaXplLFxuICAgICAgbGluZU51bWJlcnM6IGZhbHNlXG4gICAgfSlcblxuICAgIGxldCBjaGFuZ2VkID0gZmFsc2VcbiAgICBsZXQgaWdub3JlV2F0Y2ggPSBmYWxzZVxuICAgIGxldCBpZ25vcmVVcGRhdGUgPSBmYWxzZVxuXG4gICAgY29uc3Qgb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZm9jdXNlZCAmJiBjaGFuZ2VkKSB7XG4gICAgICAgIGNoYW5nZWQgPSBmYWxzZVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvbkZvY3VzID0gKCkgPT4gdGhpcy5vbkZvY3VzKClcblxuICAgIGNvbnN0IG9uQmx1ciA9ICgpID0+IHtcbiAgICAgIHRoaXMub25CbHVyKClcbiAgICAgIG9uQ2hhbmdlKClcbiAgICB9XG5cbiAgICB0aGlzLmRvbU9uKHRoaXMuJHJlZnMuZWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyksIHtcbiAgICAgIGZvY3VzOiBvbkZvY3VzLFxuICAgICAgYmx1cjogb25CbHVyXG4gICAgfSlcblxuICAgIGNvbnN0IHNldENvZGUgPSBjb2RlID0+IHtcbiAgICAgIGlmIChjb2RlICE9PSBmbGFzay5jb2RlKSB7XG4gICAgICAgIGlnbm9yZVVwZGF0ZSA9IHRydWVcbiAgICAgICAgZmxhc2sudXBkYXRlQ29kZShjb2RlKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLnZhbHVlKSB7XG4gICAgICAgIGlnbm9yZVdhdGNoID0gdHJ1ZVxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgICAgICAgY2hhbmdlZCA9IHRydWVcbiAgICAgICAgb25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH1cblxuICAgIGZsYXNrLm9uVXBkYXRlKHZhbHVlID0+IHtcbiAgICAgIGlmIChpZ25vcmVVcGRhdGUpIHtcbiAgICAgICAgaWdub3JlVXBkYXRlID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFZhbHVlKHZhbHVlKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzLiR3YXRjaCgndmFsdWUnLCB2YWx1ZSA9PiB7XG4gICAgICBpZiAoaWdub3JlV2F0Y2gpIHtcbiAgICAgICAgaWdub3JlV2F0Y2ggPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0Q29kZSh2YWx1ZSB8fCAnJylcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy4kd2F0Y2goJ2xhbmd1YWdlJywgbGFuZ3VhZ2UgPT4ge1xuICAgICAgZmxhc2sudXBkYXRlTGFuZ3VhZ2UobGFuZ3VhZ2UpXG4gICAgfSlcblxuICAgIHNldENvZGUodGhpcy52YWx1ZSB8fCAnJylcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgdGhpcy4kZWwucXVlcnlTZWxlY3RvcigndGV4dGFyZWEnKT8uZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyk/LmJsdXIoKVxuICAgIH0sXG5cbiAgICBvbkRyYWdSZXNpemUoZXZlbnQpIHtcbiAgICAgIGNvbnN0IGdldFBvaW50ID0gKHsgY2xpZW50WDogeCwgY2xpZW50WTogeSB9KSA9PiAoeyB4LCB5IH0pXG5cbiAgICAgIGxldCBwcmV2WSA9IGdldFBvaW50KGV2ZW50KS55XG4gICAgICBsZXQgaGVpZ2h0ID0gcGFyc2VGbG9hdChnZXRDb21wdXRlZFN0eWxlKHRoaXMuJGVsKS5oZWlnaHQpXG5cbiAgICAgIGNvbnN0IG1vdXNlbW92ZSA9IGV2ZW50ID0+IHtcbiAgICAgICAgY29uc3QgeyB5IH0gPSBnZXRQb2ludChldmVudClcbiAgICAgICAgaGVpZ2h0ICs9IHkgLSBwcmV2WVxuICAgICAgICBwcmV2WSA9IHlcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBgJHtNYXRoLm1heChoZWlnaHQsIDApfXB4YFxuICAgICAgfVxuXG4gICAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgICAgbW91c2Vtb3ZlLFxuXG4gICAgICAgIG1vdXNldXAoZXZlbnQpIHtcbiAgICAgICAgICBtb3VzZW1vdmUoZXZlbnQpXG4gICAgICAgICAgaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1jb2RlIHtcbiAgQGV4dGVuZCAlaW5wdXQ7XG5cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAvLyBGb3IgcHJvcGVyIHNpemluZyBvZiBjb250ZW50IGFsb25nIHdpdGggOnN0eWxlPVwic3R5bGVcIiBzZXR0aW5nIGFib3ZlLFxuICAvLyBmb3IgcHJvcGVyIGxpbmUtaGVpZ2h0IGNhbGN1bGF0aW9uLlxuICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcbiAgbWluLWhlaWdodDogY2FsYygxZW0gKiB2YXIoLS1saW5lLWhlaWdodCkgKyAyICogJGlucHV0LXBhZGRpbmctdmVyKTtcblxuICAuY29kZWZsYXNrIHtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIC8vIElnbm9yZSB0aGUgcGFyZW50IHBhZGRpbmcgZGVmaW5lZCBhYm92ZSB3aGljaCBpcyBvbmx5IG5lZWRlZCB0byBzZXRcbiAgICAvLyB0aGUgZGVzaXJlZCBoZWlnaHQgd2l0aCA6c3R5bGU9XCJzdHlsZVwiLlxuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuXG4gICAgJl9fdGV4dGFyZWEsXG4gICAgJl9fcHJlIHtcbiAgICAgIC8vIFVzZSBzYW1lIHBhZGRpbmcgYXMgLmRpdG8tY29kZVxuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmc7XG4gICAgfVxuXG4gICAgJl9fdGV4dGFyZWEsXG4gICAgJl9fY29kZSxcbiAgICAmX19saW5lcyB7XG4gICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LW1vbm87XG4gICAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZSk7XG4gICAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQpO1xuICAgIH1cblxuICAgICZfX2xpbmVzIHtcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5UcmlnZ2VyLmRpdG8tY29sb3IoXG4gIHYtbW9kZWw6c2hvdz1cInNob3dQb3B1cFwiXG4gIHRyaWdnZXI9XCJmb2N1c1wiXG4pXG4gIHRlbXBsYXRlKCN0cmlnZ2VyKVxuICAgIC5kaXRvLWlucHV0KDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBzaG93UG9wdXAgfVwiKVxuICAgICAgaW5wdXQoXG4gICAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgIHYtbW9kZWw9XCJoZXhWYWx1ZVwiXG4gICAgICAgIHR5cGU9XCJpbnB1dFwiXG4gICAgICAgIHNpemU9XCI4XCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICApXG4gICAgICAuZGl0by1jb2xvci1wcmV2aWV3LmRpdG8taW5oZXJpdC1mb2N1cyhcbiAgICAgICAgdi1pZj1cInZhbHVlXCJcbiAgICAgIClcbiAgICAgICAgZGl2KDpzdHlsZT1cInsgYmFja2dyb3VuZDogYCMke2hleFZhbHVlIHx8ICcwMDAwMDAwMCd9YCB9XCIpXG4gICAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgQGNsaWNrLnN0b3A9XCJjbGVhclwiXG4gICAgICApXG4gIHRlbXBsYXRlKCNwb3B1cClcbiAgICBTa2V0Y2hQaWNrZXIuZGl0by1jb2xvci1waWNrZXIoXG4gICAgICB2LW1vZGVsPVwiY29sb3JWYWx1ZVwiXG4gICAgICA6ZGlzYWJsZUFscGhhPVwiIWFscGhhXCJcbiAgICAgIDpkaXNhYmxlRmllbGRzPVwiIWlucHV0c1wiXG4gICAgICA6cHJlc2V0Q29sb3JzPVwicHJlc2V0c1wiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB0aW55Y29sb3IgZnJvbSAndGlueWNvbG9yMidcbmltcG9ydCB7IFNrZXRjaCBhcyBTa2V0Y2hQaWNrZXIgfSBmcm9tICdAbGs3Ny92dWUzLWNvbG9yJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IFRyaWdnZXIgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIE1vbmtleS1wYXRjaCB0aGUgYFNrZXRjaFBpY2tlcidzYCBgaGV4YCBjb21wdXRlZCBwcm9wZXJ0eSB0byByZXR1cm4gbG93ZXJjYXNlXG4vLyBoZXggdmFsdWVzIGluc3RlYWQgb2YgdXBwZXJjYXNlIG9uZXMuXG5jb25zdCB7IGhleCB9ID0gU2tldGNoUGlja2VyLmNvbXB1dGVkXG5Ta2V0Y2hQaWNrZXIuY29tcHV0ZWQuaGV4ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gaGV4LmNhbGwodGhpcykudG9Mb3dlckNhc2UoKVxufVxuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NvbG9yJywge1xuICBjb21wb25lbnRzOiB7IFRyaWdnZXIsIFNrZXRjaFBpY2tlciB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3dQb3B1cDogZmFsc2UsXG4gICAgICBjb252ZXJ0ZWRWYWx1ZTogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNhblVwZGF0ZVZhbHVlKCkge1xuICAgICAgcmV0dXJuICF0aGlzLmZvY3VzZWQgfHwgdGhpcy5yZWFkb25seVxuICAgIH0sXG5cbiAgICBjb2xvclZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgdGhpcy5jb252ZXJ0ZWRWYWx1ZSB8fFxuICAgICAgICAgIHRoaXMudmFsdWUgfHxcbiAgICAgICAgICAodGhpcy5jb2xvckZvcm1hdCA9PT0gJ2hleCcgPyAnJyA6IHt9KVxuICAgICAgICApXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IGNvbnZlcnRDb2xvcih2YWx1ZSwgdGhpcy5jb2xvckZvcm1hdClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaGV4VmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgY29sb3IgPSB0aW55Y29sb3IodGhpcy52YWx1ZSlcbiAgICAgICAgcmV0dXJuIGNvbG9yLmlzVmFsaWQoKVxuICAgICAgICAgID8gY29sb3JcbiAgICAgICAgICAgICAgLnRvU3RyaW5nKGNvbG9yLmdldEFscGhhKCkgPCAxID8gJ2hleDgnIDogJ2hleDYnKVxuICAgICAgICAgICAgICAuc2xpY2UoMSlcbiAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICA6IG51bGxcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBjb25zdCBjb2xvciA9IHRpbnljb2xvcih2YWx1ZSlcbiAgICAgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkge1xuICAgICAgICAgIGNvbnN0IGNvbnZlcnRlZFZhbHVlID0gY29udmVydENvbG9yKHZhbHVlLCB0aGlzLmNvbG9yRm9ybWF0KVxuICAgICAgICAgIGlmICh0aGlzLmNhblVwZGF0ZVZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29udmVydGVkVmFsdWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gU3RvcmUgdG8gY2hhbmdlIGxhdGVyLCBvbmNlIGBjYW5VcGRhdGVWYWx1ZWAgaXMgdHJ1ZSBhZ2Fpbi5cbiAgICAgICAgICAgIC8vIFNlZSBgd2F0Y2hgIGJlbG93LlxuICAgICAgICAgICAgdGhpcy5jb252ZXJ0ZWRWYWx1ZSA9IGNvbnZlcnRlZFZhbHVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFRPRE86IGBmb3JtYXRgIGNsYXNoZXMgd2l0aCBUeXBlTWl4aW4uZm9ybWF0KClgLCB3aGljaCBzaGFsbCBiZSByZW5hbWVkXG4gICAgLy8gc29vbiB0byBgZm9ybWF0VmFsdWUoKWAuIFJlbmFtZSBgY29sb3JGb3JtYXRgIGJhY2sgdG8gYGZvcm1hdGAgYWZ0ZXIuXG4gICAgY29sb3JGb3JtYXQ6IGdldFNjaGVtYUFjY2Vzc29yKCdmb3JtYXQnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnaGV4J1xuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBzaG93QWxwaGFgP1xuICAgIGFscGhhOiBnZXRTY2hlbWFBY2Nlc3NvcignYWxwaGEnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgc2hvd0lucHV0c2A/XG4gICAgaW5wdXRzOiBnZXRTY2hlbWFBY2Nlc3NvcignaW5wdXRzJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KSxcblxuICAgIHByZXNldHM6IGdldFNjaGVtYUFjY2Vzc29yKCdwcmVzZXRzJywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBkZWZhdWx0OiBbXG4gICAgICAgICcjZmZmZmZmJyxcbiAgICAgICAgJyNjM2MzYzMnLFxuICAgICAgICAnIzdmN2Y3ZicsXG4gICAgICAgICcjMDAwMDAwJyxcbiAgICAgICAgJyM4ODAwMTUnLFxuICAgICAgICAnI2VkMWMyNCcsXG4gICAgICAgICcjZmY3ZjI3JyxcbiAgICAgICAgJyNmZmYyMDAnLFxuXG4gICAgICAgICcjMjJiMTRjJyxcbiAgICAgICAgJyMwMGEyZTgnLFxuICAgICAgICAnIzNmNDhjYycsXG4gICAgICAgICcjYTM0OWE0JyxcbiAgICAgICAgJyNiOTdhNTcnLFxuICAgICAgICAnI2ZmYWVjOScsXG4gICAgICAgICcjZmZjOTBlJyxcbiAgICAgICAgJyMwMDAwMDAwMCdcbiAgICAgIF1cbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgdmFsdWU6ICdvbkNoYW5nZScsXG5cbiAgICBjYW5VcGRhdGVWYWx1ZShjYW5VcGRhdGVWYWx1ZSkge1xuICAgICAgaWYgKGNhblVwZGF0ZVZhbHVlICYmIHRoaXMuY29udmVydGVkVmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY29udmVydGVkVmFsdWVcbiAgICAgICAgdGhpcy5jb252ZXJ0ZWRWYWx1ZSA9IG51bGxcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG5cbmZ1bmN0aW9uIGNvbnZlcnRDb2xvcihjb2xvciwgZm9ybWF0KSB7XG4gIHJldHVybiBpc09iamVjdChjb2xvcikgLy8gYSB2dWUzLWNvbG9yIGNvbG9yIG9iamVjdFxuICAgID8gdG9WdWUzQ29sb3JGb3JtYXQoY29sb3IsIGZvcm1hdClcbiAgICA6IHRvVGlueUNvbG9yRm9ybWF0KHRpbnljb2xvcihjb2xvciksIGZvcm1hdClcbn1cblxuZnVuY3Rpb24gdG9WdWUzQ29sb3JGb3JtYXQoY29sb3IsIGZvcm1hdCkge1xuICBjb25zdCB2YWx1ZSA9XG4gICAgY29sb3JbXG4gICAgICB7XG4gICAgICAgIGhleDogY29sb3I/LmEgPCAxID8gJ2hleDgnIDogJ2hleCcsXG4gICAgICAgIHJnYjogJ3JnYmEnXG4gICAgICB9W2Zvcm1hdF0gfHxcbiAgICAgIGZvcm1hdFxuICAgIF1cbiAgcmV0dXJuIGlzU3RyaW5nKHZhbHVlKSAmJiB2YWx1ZVswXSA9PT0gJyMnID8gdmFsdWUudG9Mb3dlckNhc2UoKSA6IHZhbHVlXG59XG5cbi8vIFRoaXMgc2hvdWxkIHJlYWxseSBiZSBpbiB0aW55Y29sb3IsIGJ1dCBpdCBvbmx5IGhhcyB0aGUgc3RyaW5nIGVxdWl2YWxlbnRcbi8vIG9mIGl0LlxuZnVuY3Rpb24gdG9UaW55Q29sb3JGb3JtYXQoY29sb3IsIGZvcm1hdCkge1xuICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgIGNhc2UgJ3JnYic6XG4gICAgICByZXR1cm4gY29sb3IudG9SZ2IoKVxuICAgIGNhc2UgJ3ByZ2InOlxuICAgICAgcmV0dXJuIGNvbG9yLnRvUGVyY2VudGFnZVJnYigpXG4gICAgY2FzZSAnbmFtZSc6XG4gICAgICByZXR1cm4gY29sb3IudG9OYW1lKClcbiAgICBjYXNlICdoc2wnOlxuICAgICAgcmV0dXJuIGNvbG9yLnRvSHNsKClcbiAgICBjYXNlICdoc3YnOlxuICAgICAgcmV0dXJuIGNvbG9yLnRvSHN2KClcbiAgICBjYXNlICdoZXgzJzpcbiAgICAgIHJldHVybiBgIyR7Y29sb3IudG9IZXgodHJ1ZSl9YFxuICAgIGNhc2UgJ2hleDQnOlxuICAgICAgcmV0dXJuIGAjJHtjb2xvci50b0hleDgodHJ1ZSl9YFxuICAgIGNhc2UgJ2hleDgnOlxuICAgICAgcmV0dXJuIGAjJHtjb2xvci50b0hleDgoKX1gXG4gICAgY2FzZSAnaGV4JzpcbiAgICBjYXNlICdoZXg2JzpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGAjJHtjb2xvci50b0hleCgpfWBcbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuJGNvbG9yLXN3YXRjaC13aWR0aDogJHBhdHRlcm4tdHJhbnNwYXJlbmN5LXNpemU7XG4kY29sb3Itc3dhdGNoLXJhZGl1czogJGJvcmRlci1yYWRpdXMgLSAkYm9yZGVyLXdpZHRoO1xuXG4uZGl0by1jb2xvciB7XG4gIC5kaXRvLWlucHV0IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICBpbnB1dCB7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICAgIHBhZGRpbmctcmlnaHQ6ICRjb2xvci1zd2F0Y2gtd2lkdGg7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tYnV0dG9uLWNsZWFyIHtcbiAgICBtYXJnaW4tcmlnaHQ6ICRjb2xvci1zd2F0Y2gtd2lkdGg7XG4gIH1cblxuICAuZGl0by1jb2xvci1waWNrZXIge1xuICAgIG1hcmdpbjogJHBvcHVwLW1hcmdpbjtcbiAgICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93O1xuICB9XG5cbiAgLmRpdG8tY29sb3ItcHJldmlldyB7XG4gICAgYmFja2dyb3VuZDogJHBhdHRlcm4tdHJhbnNwYXJlbmN5O1xuICAgIGJvcmRlci1sZWZ0OiAkYm9yZGVyLXN0eWxlO1xuXG4gICAgJixcbiAgICBkaXYge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgd2lkdGg6ICRjb2xvci1zd2F0Y2gtd2lkdGg7XG4gICAgICB0b3A6IDA7XG4gICAgICByaWdodDogMDtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkY29sb3Itc3dhdGNoLXJhZGl1cztcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkY29sb3Itc3dhdGNoLXJhZGl1cztcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuY29tcG9uZW50KFxuICA6aXM9XCJzY2hlbWEuY29tcG9uZW50XCJcbiAgdi1iaW5kPVwiJHByb3BzXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4vLyBUaGlzIGlzIHRoZSBnZW5lcmFsIHB1cnBvc2UgJ2NvbXBvbmVudCcgdHlwZSwgd2hpY2ggY2FuIHJlc29sdmUgdG8gYW55IGN1c3RvbVxuLy8gY29tcG9uZW50IHRocm91Z2ggYHNjaGVtYS5jb21wb25lbnRgLCBzZWUgYHJlc29sdmVTY2hlbWFDb21wb25lbnQoKWAuIFRoaXNcbi8vIGNhbiBiZSB1c2VkIHRvIG5lc3QgYXJiaXRyYXJ5IHZ1ZSBjb21wb25lbnRzIGluIHNjaGVtYTpcbi8vIHtcbi8vICAgdHlwZTogJ2NvbXBvbmVudCcsXG4vLyAgIGNvbXBvbmVudDogaW1wb3J0KCcuL2NvbXBvbmVudCcpXG4vLyB9XG5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IHJlc29sdmVTY2hlbWFDb21wb25lbnQgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY29tcG9uZW50Jywge1xuICAvLyBPdmVycmlkZSB0aGUgc3RhbmRhcmQgYGRlZmF1bHRWYWx1ZTogbnVsbGAgdG8gbm90IHNldCBhbnkgZGF0YSBmb3IgY3VzdG9tXG4gIC8vIGNvbXBvbmVudHMsIHVubGVzcyB0aGV5IHByb3ZpZGUgYSBkZWZhdWx0IHZhbHVlLlxuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiAoeyBzY2hlbWEgfSkgPT4gISgnZGVmYXVsdCcgaW4gc2NoZW1hKSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKGFwaSwgc2NoZW1hKSB7XG4gICAgYXdhaXQgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudChzY2hlbWEpXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4vLy0gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gdHJpZ2dlciBldmFsdWF0aW9uIG9mIGB2YWx1ZWAgdGhhdCBkb3NlIG5vdFxuLy8tIGludm9sdmUgYWN0dWFsbHkgcmVuZGVyaW5nIGl0IHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgdmlzaWJsZS5cbmlucHV0LmRpdG8tdGV4dC5kaXRvLWlucHV0KFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6bmFtZT1cIm5hbWVcIlxuICB0eXBlPVwidGV4dFwiXG4gIDp2YWx1ZT1cInZhbHVlXCJcbiAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICA6cmVhZG9ubHk9XCJ0cnVlXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgVmFsdWVNaXhpbiBmcm9tICcuLi9taXhpbnMvVmFsdWVNaXhpbi5qcydcbmltcG9ydCBEYXRhTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RhdGFNaXhpbi5qcydcblxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoXG4gIFsnY29tcHV0ZWQnLCAnZGF0YScsICdoaWRkZW4nXSxcbiAgLy8gQHZ1ZS9jb21wb25lbnRcbiAge1xuICAgIG1peGluczogW0RhdGFNaXhpbl0sXG5cbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgICBkZWZhdWx0VmlzaWJsZTogZmFsc2UsXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgdmFsdWU6IHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgIGNvbnN0IHsgc2NoZW1hIH0gPSB0aGlzXG4gICAgICAgICAgaWYgKHNjaGVtYS5kYXRhIHx8IHNjaGVtYS5kYXRhUGF0aCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmhhbmRsZURhdGFTY2hlbWEoc2NoZW1hLCAndmFsdWUnKVxuICAgICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICAgICAgICAgIHRoaXMuZGF0YVt0aGlzLm5hbWVdID0gdmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFZhbHVlTWl4aW4uY29tcHV0ZWQudmFsdWUuZ2V0LmNhbGwodGhpcylcbiAgICAgICAgfSxcblxuICAgICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgICBWYWx1ZU1peGluLmNvbXB1dGVkLnZhbHVlLnNldC5jYWxsKHRoaXMsIHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1kYXRlXG4gIGNvbXBvbmVudChcbiAgICA6aXM9XCJnZXRDb21wb25lbnQodHlwZSlcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICB2LW1vZGVsPVwiZGF0ZVZhbHVlXCJcbiAgICA6bG9jYWxlPVwibG9jYWxlXCJcbiAgICA6Zm9ybWF0PVwiZm9ybWF0c1wiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIClcbiAgICB0ZW1wbGF0ZSgjYWZ0ZXIpXG4gICAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgQGNsaWNrLnN0b3A9XCJjbGVhclwiXG4gICAgICAgIEBtb3VzZWRvd24uc3RvcFxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBEYXRlUGlja2VyLCBUaW1lUGlja2VyLCBEYXRlVGltZVBpY2tlciB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IHsgaXNEYXRlLCBhc3NpZ25EZWVwbHkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcihcbiAgWydkYXRlJywgJ2RhdGV0aW1lJywgJ3RpbWUnXSxcbiAgLy8gQHZ1ZS9jb21wb25lbnRcbiAge1xuICAgIGNvbXBvbmVudHM6IHsgRGF0ZVBpY2tlciwgVGltZVBpY2tlciwgRGF0ZVRpbWVQaWNrZXIgfSxcbiAgICAvLyBUT0RPOiBUaGlzIGlzIG9ubHkgaGVyZSBzbyB3ZSBnZXQgcGxhY2Vob2xkZXIgYWRkZWQuIENvbWUgdXAgd2l0aCBhXG4gICAgLy8gYmV0dGVyIHdheSB0byBzdXBwb3J0IGF0dHJpYnV0ZXMgcGVyIGNvbXBvbmVudCAoYSBsaXN0IG9mIGFjdHVhbGx5XG4gICAgLy8gc3VwcG9ydGVkIGF0dHJpYnV0ZXMpXG4gICAgbmF0aXZlRmllbGQ6IHRydWUsXG4gICAgdGV4dEZpZWxkOiB0cnVlLFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIGRhdGVWYWx1ZToge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpc1xuICAgICAgICAgIHJldHVybiB2YWx1ZSA/IG5ldyBEYXRlKHZhbHVlKSA6IHZhbHVlXG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIC8vIFRPRE86IFJlbmFtZSB0byBgZm9ybWF0YCwgb25jZSBgc2NoZW1hLmZvcm1hdCgpYCB3YXMgcmVtb3ZlZCB0b1xuICAgICAgLy8gYGZvcm1hdFZhbHVlKClgLlxuICAgICAgZm9ybWF0czogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Zvcm1hdHMnLCB7XG4gICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgZ2V0KGZvcm1hdHMpIHtcbiAgICAgICAgICBjb25zdCB7IGRhdGUsIHRpbWUgfSA9IGFzc2lnbkRlZXBseSh7fSwgdGhpcy5hcGkuZm9ybWF0cywgZm9ybWF0cylcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0ZTogWydkYXRlJywgJ2RhdGV0aW1lJ10uaW5jbHVkZXModGhpcy50eXBlKSA/IGRhdGUgOiBudWxsLFxuICAgICAgICAgICAgdGltZTogWyd0aW1lJywgJ2RhdGV0aW1lJ10uaW5jbHVkZXModGhpcy50eXBlKSA/IHRpbWUgOiBudWxsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICBnZXRDb21wb25lbnQodHlwZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGU6ICdkYXRlLXBpY2tlcicsXG4gICAgICAgICAgdGltZTogJ3RpbWUtcGlja2VyJyxcbiAgICAgICAgICBkYXRldGltZTogJ2RhdGUtdGltZS1waWNrZXInXG4gICAgICAgIH1bdHlwZV1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcHJvY2Vzc1ZhbHVlKHsgdmFsdWUgfSkge1xuICAgICAgcmV0dXJuIGlzRGF0ZSh2YWx1ZSkgPyB2YWx1ZS50b0lTT1N0cmluZygpIDogdmFsdWVcbiAgICB9XG4gIH1cbilcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRRdWVyeShxdWVyeSkge1xuICBjb25zdCBlbnRyaWVzID0gcXVlcnlcbiAgICA/IGlzQXJyYXkocXVlcnkpXG4gICAgICA/IHF1ZXJ5XG4gICAgICA6IE9iamVjdC5lbnRyaWVzKHF1ZXJ5KVxuICAgIDogW11cbiAgcmV0dXJuIChcbiAgICBuZXcgVVJMU2VhcmNoUGFyYW1zKFxuICAgICAgLy8gRXhwYW5kIGFycmF5IHZhbHVlcyBpbnRvIG11bHRpcGxlIGVudHJpZXMgdW5kZXIgdGhlIHNhbWUga2V5LCBzb1xuICAgICAgLy8gYGZvcm1hdFF1ZXJ5KHsgZm9vOiBbMSwgMl0sIGJhcjogMyB9KWAgPT4gJ2Zvbz0xJmZvbz0yJmJhcj0zJy5cbiAgICAgIGVudHJpZXMucmVkdWNlKFxuICAgICAgICAoZW50cmllcywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZhbCBvZiB2YWx1ZSkge1xuICAgICAgICAgICAgICAvLyBQcmV2ZW50IG51bGwgb3IgdW5kZWZpbmVkIHZhbHVlcyBmcm9tIGJlY29taW5nIHN0cmluZ3MsXG4gICAgICAgICAgICAgIC8vIGJ1dCBzaW5jZSB0aGV5J3JlIGVudHJpZXMgaW4gYW4gYXJyYXksIHdlIHN0aWxsIGluY2x1ZGUgdGhlbS5cbiAgICAgICAgICAgICAgZW50cmllcy5wdXNoKFtrZXksIHZhbCA/PyAnJ10pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBlbnRyaWVzLnB1c2goW2tleSwgdmFsdWVdKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZW50cmllc1xuICAgICAgICB9LFxuICAgICAgICBbXVxuICAgICAgKVxuICAgIClcbiAgICAgIC50b1N0cmluZygpXG4gICAgICAvLyBkZWNvZGUgYWxsIHRoZXNlIGVuY29kZWQgY2hhcmFjdGVycyB0byBoYXZlIHRoZSBzYW1lIGJlaGF2aW9yIGFzXG4gICAgICAvLyB2dWUtcm91dGVyJ3Mgb3duIHF1ZXJ5IGVuY29kaW5nLlxuICAgICAgLnJlcGxhY2VBbGwoLyUoPzoyMXwyNHwyOHwyOXwyQ3wyRnwzQXwzQnwzRHwzRnw0MCkvZywgZGVjb2RlVVJJQ29tcG9uZW50KVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlUm91dGUoeyBwYXRoLCBxdWVyeSwgaGFzaCB9KSB7XG4gIC8vIFByZXNlcnZlIGBoaXN0b3J5LnN0YXRlYCwgc2VlOlxuICAvLyBodHRwczovL3JvdXRlci52dWVqcy5vcmcvZ3VpZGUvbWlncmF0aW9uLyN1c2FnZS1vZi1oaXN0b3J5LXN0YXRlXG4gIGNvbnN0IHsgbG9jYXRpb24gfSA9IHdpbmRvd1xuICBoaXN0b3J5LnJlcGxhY2VTdGF0ZShcbiAgICBoaXN0b3J5LnN0YXRlLFxuICAgIG51bGwsXG4gICAgYCR7XG4gICAgICBsb2NhdGlvbi5vcmlnaW5cbiAgICB9JHtcbiAgICAgIHBhdGggPz8gbG9jYXRpb24ucGF0aG5hbWVcbiAgICB9PyR7XG4gICAgICBxdWVyeSA/IGZvcm1hdFF1ZXJ5KHF1ZXJ5KSA6IGxvY2F0aW9uLnNlYXJjaC5zbGljZSgxKVxuICAgIH0ke1xuICAgICAgaGFzaCA/PyBsb2NhdGlvbi5oYXNoXG4gICAgfWBcbiAgKVxufVxuIiwiaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBJdGVtTWl4aW4gZnJvbSAnLi9JdGVtTWl4aW4uanMnXG5pbXBvcnQgUmVzb3VyY2VNaXhpbiBmcm9tICcuL1Jlc291cmNlTWl4aW4uanMnXG5pbXBvcnQgU2NoZW1hUGFyZW50TWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NjaGVtYVBhcmVudE1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IsIGdldFN0b3JlQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyByZXBsYWNlUm91dGUgfSBmcm9tICcuLi91dGlscy9yb3V0ZS5qcydcbmltcG9ydCB7XG4gIHByb2Nlc3NSb3V0ZVNjaGVtYSxcbiAgcHJvY2Vzc0Zvcm1zLFxuICBnZXROYW1lZFNjaGVtYXMsXG4gIGdldEJ1dHRvblNjaGVtYXMsXG4gIGhhc0Zvcm1TY2hlbWEsXG4gIGdldEZvcm1TY2hlbWFzLFxuICBnZXRWaWV3U2NoZW1hLFxuICBpc0NvbXBhY3QsXG4gIGlzSW5saW5lZCxcbiAgaXNPYmplY3RTb3VyY2UsXG4gIGlzTGlzdFNvdXJjZVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQge1xuICBpc09iamVjdCxcbiAgaXNTdHJpbmcsXG4gIGlzQXJyYXksXG4gIGlzTnVtYmVyLFxuICBlcXVhbHMsXG4gIHBhcnNlRGF0YVBhdGgsXG4gIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyByYXcgfSBmcm9tICdAZGl0b2pzL3VpJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtJdGVtTWl4aW4sIFJlc291cmNlTWl4aW4sIFNjaGVtYVBhcmVudE1peGluXSxcblxuICBkZWZhdWx0VmFsdWU6IGNvbnRleHQgPT4gKGlzTGlzdFNvdXJjZShjb250ZXh0LnNjaGVtYSkgPyBbXSA6IG51bGwpLFxuICAvLyBFeGNsdWRlIGFsbCBzb3VyY2VzIHRoYXQgaGF2ZSB0aGVpciBvd24gcmVzb3VyY2UgaGFuZGxpbmcgdGhlIGRhdGEuXG4gIGV4Y2x1ZGVWYWx1ZTogY29udGV4dCA9PiAhIWNvbnRleHQuc2NoZW1hLnJlc291cmNlLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd3JhcHBlZFByaW1pdGl2ZXM6IG51bGwsXG4gICAgICB1bndyYXBwaW5nUHJpbWl0aXZlczogcmF3KGZhbHNlKVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIGlzT2JqZWN0U291cmNlKCkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0U291cmNlKHRoaXMudHlwZSlcbiAgICB9LFxuXG4gICAgaXNMaXN0U291cmNlKCkge1xuICAgICAgcmV0dXJuIGlzTGlzdFNvdXJjZSh0aGlzLnR5cGUpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmhhc0RhdGEoKVxuICAgIGhhc0RhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnZhbHVlXG4gICAgfSxcblxuICAgIHNob3VsZFJlbmRlcigpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvdXJjZURlcHRoIDwgdGhpcy5tYXhEZXB0aFxuICAgIH0sXG5cbiAgICBpc1JlYWR5KCkge1xuICAgICAgLy8gTGlzdHMgdGhhdCBoYXZlIG5vIGRhdGEgYW5kIG5vIGFzc29jaWF0ZWQgcmVzb3VyY2Ugc2hvdWxkIHN0aWxsIHJlbmRlcixcbiAgICAgIC8vIGFzIHRoZXkgbWF5IGJlIGdldHRpbmcgdGhlaXIgZGF0YSBlbHNld2hlcmUsIGUuZy4gYGNvbXB1dGUoKWAuXG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLnNob3VsZFJlbmRlciAmJlxuICAgICAgICAodGhpcy5oYXNEYXRhIHx8ICF0aGlzLnByb3ZpZGVzRGF0YSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNJblZpZXcoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnZpZXdDb21wb25lbnRcbiAgICB9LFxuXG4gICAgd3JhcFByaW1pdGl2ZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEud3JhcFByaW1pdGl2ZXNcbiAgICB9LFxuXG4gICAgbGlzdERhdGE6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLnZhbHVlXG4gICAgICAgIGlmICh0aGlzLmlzT2JqZWN0U291cmNlKSB7XG4gICAgICAgICAgLy8gQ29udmVydCB0byBsaXN0IGFycmF5LlxuICAgICAgICAgIGRhdGEgPSBkYXRhICE9IG51bGwgPyBbZGF0YV0gOiBbXVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElmIGRhdGEgZ2V0cyBpbmhlcml0ZWQgZnJvbSBwYXJlbnQsIHVud3JhcHBpbmcgaXMgbm90IGhhcHBlbmluZ1xuICAgICAgICAgIC8vIGF0IHRoZSByb290IGluIGBzZXREYXRhKClgLCBidXQgaGVyZSBpbnN0ZWFkLlxuICAgICAgICAgIGRhdGEgPSB0aGlzLnVud3JhcExpc3REYXRhKGRhdGEpIHx8IGRhdGFcbiAgICAgICAgfVxuICAgICAgICBkYXRhIHx8PSBbXVxuICAgICAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzIH0gPSB0aGlzXG4gICAgICAgIGlmICh3cmFwUHJpbWl0aXZlcykge1xuICAgICAgICAgIGlmICh0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzLnZhbHVlKSB7XG4gICAgICAgICAgICAvLyBXZSdyZSBkb25lIHVud3JhcHBpbmcgb25jZSBgbGlzdERhdGFgIGlzIHJlZXZhbHVhdGVkLCBzbyBzZXRcbiAgICAgICAgICAgIC8vIHRoaXMgdG8gYGZhbHNlYCBhZ2Fpbi4gU2VlIGB3cmFwcGVkUHJpbWl0aXZlc2Agd2F0Y2hlciBhYm92ZS5cbiAgICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLXNpZGUtZWZmZWN0cy1pbi1jb21wdXRlZC1wcm9wZXJ0aWVzXG4gICAgICAgICAgICB0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzLnZhbHVlID0gZmFsc2VcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQ29udmVydCBkYXRhIHRvIGEgbGlzdCBvZiB3cmFwcGVkIHByaW1pdGl2ZXMsIGFuZCByZXR1cm4gaXQuXG4gICAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgICAgICAgdGhpcy53cmFwcGVkUHJpbWl0aXZlcyA9IGRhdGEubWFwKHZhbHVlID0+ICh7XG4gICAgICAgICAgICAgIFt3cmFwUHJpbWl0aXZlc106IHZhbHVlXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRoaXMud3JhcHBlZFByaW1pdGl2ZXNcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgfSxcblxuICAgICAgc2V0KGRhdGEpIHtcbiAgICAgICAgaWYgKHRoaXMud3JhcFByaW1pdGl2ZXMpIHtcbiAgICAgICAgICB0aGlzLndyYXBwZWRQcmltaXRpdmVzID0gZGF0YVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmlzT2JqZWN0U291cmNlXG4gICAgICAgICAgICA/IGRhdGEgJiYgZGF0YS5sZW5ndGggPiAwXG4gICAgICAgICAgICAgID8gZGF0YVswXVxuICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgIDogZGF0YVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG9iamVjdERhdGE6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgLy8gQWx3YXlzIGdvIHRocm91Z2ggYGxpc3REYXRhYCBpbnRlcm5hbGx5LCB3aGljaCBkb2VzIGFsbCB0aGVcbiAgICAgICAgLy8gcHJvY2Vzc2luZyBvZiBgd3JhcFByaW1pdGl2ZXNgLCBldGMuXG4gICAgICAgIHJldHVybiB0aGlzLmxpc3REYXRhWzBdIHx8IG51bGxcbiAgICAgIH0sXG5cbiAgICAgIHNldChkYXRhKSB7XG4gICAgICAgIHRoaXMubGlzdERhdGEgPSBkYXRhID8gW2RhdGFdIDogW11cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc291cmNlU2NoZW1hKCkge1xuICAgICAgLy8gVGhlIHNvdXJjZVNjaGVtYSBvZiBhIGxpc3QgaXMgdGhlIGxpc3QncyBzY2hlbWEgaXRzZWxmLlxuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hXG4gICAgfSxcblxuICAgIHNvdXJjZURlcHRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLm1hdGNoZWQucmVkdWNlKFxuICAgICAgICAoZGVwdGgsIHJlY29yZCkgPT4gKFxuICAgICAgICAgIGRlcHRoICsgKHJlY29yZC5tZXRhLnNjaGVtYSA9PT0gdGhpcy5zb3VyY2VTY2hlbWEgPyAxIDogMClcbiAgICAgICAgKSxcbiAgICAgICAgMFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBwYXRoKCkge1xuICAgICAgLy8gVGhpcyBpcyB1c2VkIGluIFR5cGVMaXN0IGZvciBEaXRvRm9ybUNob29zZXIuXG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZUNvbXBvbmVudC5nZXRDaGlsZFBhdGgodGhpcy5zY2hlbWEucGF0aClcbiAgICB9LFxuXG4gICAgZGVmYXVsdFF1ZXJ5KCkge1xuICAgICAgY29uc3QgeyBkZWZhdWx0T3JkZXI6IG9yZGVyIH0gPSB0aGlzXG4gICAgICByZXR1cm4gb3JkZXIgPyB7IG9yZGVyIH0gOiB7fVxuICAgIH0sXG5cbiAgICBxdWVyeTogZ2V0U3RvcmVBY2Nlc3NvcigncXVlcnknLCB7XG4gICAgICBnZXQocXVlcnkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi50aGlzLmRlZmF1bHRRdWVyeSxcbiAgICAgICAgICAuLi5xdWVyeVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBzZXQocXVlcnkpIHtcbiAgICAgICAgLy8gQWx3YXlzIGtlZXAgdGhlIGRpc3BsYXllZCBxdWVyeSBwYXJhbWV0ZXJzIGluIHN5bmMgd2l0aCB0aGUgc3RvcmVkXG4gICAgICAgIC8vIG9uZXMuIFVzZSBzY29wZSBhbmQgcGFnZSBmcm9tIHRoZSBsaXN0IHNjaGVtYSBhcyBkZWZhdWx0cywgYnV0IGFsbG93XG4gICAgICAgIC8vIHRoZSByb3V0ZSBxdWVyeSBwYXJhbWV0ZXJzIHRvIG92ZXJyaWRlIHRoZW0uXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBzY29wZSA9IHRoaXMuZGVmYXVsdFNjb3BlPy5uYW1lLFxuICAgICAgICAgIHBhZ2UgPSB0aGlzLnNjaGVtYS5wYWdlXG4gICAgICAgIH0gPSB0aGlzLnF1ZXJ5XG4gICAgICAgIC8vIFByZXNlcnZlIC8gbWVyZ2UgY3VycmVudGx5IHN0b3JlZCB2YWx1ZXMuXG4gICAgICAgIHF1ZXJ5ID0ge1xuICAgICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgICAgLi4uKHNjb3BlICE9IG51bGwgJiYgeyBzY29wZSB9KSxcbiAgICAgICAgICAuLi4ocGFnZSAhPSBudWxsICYmIHsgcGFnZSB9KSxcbiAgICAgICAgICAuLi5xdWVyeVxuICAgICAgICB9XG4gICAgICAgIGlmICghZXF1YWxzKHF1ZXJ5LCB0aGlzLiRyb3V0ZS5xdWVyeSkpIHtcbiAgICAgICAgICAvLyBDaGFuZ2UgdGhlIHJvdXRlIHF1ZXJ5IHBhcmFtZXRlcnMsIGJ1dCBkb24ndCB0cmlnZ2VyIGEgcm91dGVcbiAgICAgICAgICAvLyBjaGFuZ2UsIGFzIHRoYXQgd291bGQgY2F1c2UgdGhlIGxpc3QgdG8gcmVsb2FkLlxuICAgICAgICAgIHJlcGxhY2VSb3V0ZSh7IHF1ZXJ5IH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHF1ZXJ5IC8vIExldCBnZXRTdG9yZUFjY2Vzc29yKCkgZG8gdGhlIGFjdHVhbCBzZXR0aW5nXG4gICAgICB9XG4gICAgfSksXG5cbiAgICB0b3RhbDogZ2V0U3RvcmVBY2Nlc3NvcigndG90YWwnKSxcblxuICAgIGNvbHVtbnMoKSB7XG4gICAgICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKHRoaXMuc2NoZW1hLmNvbHVtbnMpXG4gICAgfSxcblxuICAgIHNjb3BlcygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEuc2NvcGVzKVxuICAgIH0sXG5cbiAgICBkZWZhdWx0U2NvcGUoKSB7XG4gICAgICBsZXQgZmlyc3QgPSBudWxsXG4gICAgICBpZiAodGhpcy5zY29wZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBzY29wZSBvZiBPYmplY3QudmFsdWVzKHRoaXMuc2NvcGVzKSkge1xuICAgICAgICAgIGlmIChzY29wZS5kZWZhdWx0U2NvcGUpIHtcbiAgICAgICAgICAgIHJldHVybiBzY29wZVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgICAgICBmaXJzdCA9IHNjb3BlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmlyc3RcbiAgICB9LFxuXG4gICAgZGVmYXVsdE9yZGVyKCkge1xuICAgICAgaWYgKHRoaXMuY29sdW1ucykge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBPYmplY3QudmFsdWVzKHRoaXMuY29sdW1ucykpIHtcbiAgICAgICAgICBjb25zdCB7IGRlZmF1bHRTb3J0IH0gPSBjb2x1bW5cbiAgICAgICAgICBpZiAoZGVmYXVsdFNvcnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IGlzU3RyaW5nKGRlZmF1bHRTb3J0KSA/IGRlZmF1bHRTb3J0IDogJ2FzYydcbiAgICAgICAgICAgIHJldHVybiBgJHtjb2x1bW4ubmFtZX0gJHtkaXJlY3Rpb259YFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgbmVzdGVkTWV0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMubWV0YSxcbiAgICAgICAgc2NoZW1hOiB0aGlzLnNjaGVtYVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb3JtcygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKGdldEZvcm1TY2hlbWFzKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpKVxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBsaW5rZWQgdmlldyBzY2hlbWEgaWYgdGhpcyBzb3VyY2UgZWRpdHMgaXQgaXRzIGl0ZW1zIHRocm91Z2hcbiAgICAvLyBhIGxpbmtlZCB2aWV3LlxuICAgIHZpZXcoKSB7XG4gICAgICByZXR1cm4gZ2V0Vmlld1NjaGVtYSh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KVxuICAgIH0sXG5cbiAgICBsaW5rc1RvVmlldygpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudmlld1xuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXModGhpcy5zY2hlbWEuYnV0dG9ucylcbiAgICB9LFxuXG4gICAgaXNDb21wYWN0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybXMuZXZlcnkoaXNDb21wYWN0KVxuICAgIH0sXG5cbiAgICBpc0lubGluZWQoKSB7XG4gICAgICByZXR1cm4gaXNJbmxpbmVkKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBwYWdpbmF0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3BhZ2luYXRlJywge1xuICAgICAgdHlwZTogTnVtYmVyXG4gICAgfSksXG5cbiAgICByZW5kZXI6IGdldFNjaGVtYUFjY2Vzc29yKCdyZW5kZXInLCB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KSxcblxuICAgIGNyZWF0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NyZWF0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChjcmVhdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0YWJsZSAmJiBoYXNGb3JtU2NoZW1hKHRoaXMuc2NoZW1hKVxuICAgICAgICAgID8gdGhpcy5pc09iamVjdFNvdXJjZVxuICAgICAgICAgICAgPyAhdGhpcy52YWx1ZVxuICAgICAgICAgICAgOiB0cnVlXG4gICAgICAgICAgOiBmYWxzZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZWRpdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdlZGl0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlZGl0YWJsZSkge1xuICAgICAgICByZXR1cm4gZWRpdGFibGUgJiYgIXRoaXMuaXNJbmxpbmVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkZWxldGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWxldGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIGRyYWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RyYWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkcmFnZ2FibGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlICYmIHRoaXMubGlzdERhdGEubGVuZ3RoID4gMSAmJiBkcmFnZ2FibGVcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbGxhcHNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY29sbGFwc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoY29sbGFwc2libGUpIHtcbiAgICAgICAgcmV0dXJuIGNvbGxhcHNpYmxlICYmIHRoaXMuaXNJbmxpbmVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb2xsYXBzZWQ6IGdldFNjaGVtYUFjY2Vzc29yKCdjb2xsYXBzZWQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoY29sbGFwc2VkKSB7XG4gICAgICAgIHJldHVybiBjb2xsYXBzZWQgJiYgdGhpcy5jb2xsYXBzaWJsZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgbWF4RGVwdGg6IGdldFNjaGVtYUFjY2Vzc29yKCdtYXhEZXB0aCcsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDFcbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJHJvdXRlOiB7XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMzM5MyNpc3N1ZWNvbW1lbnQtMTE1ODQ3MDE0OVxuICAgICAgZmx1c2g6ICdwb3N0JyxcbiAgICAgIGhhbmRsZXIodG8sIGZyb20pIHtcbiAgICAgICAgaWYgKHRoaXMucHJvdmlkZXNEYXRhKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZnJvbS5wYXRoID09PSB0by5wYXRoICYmXG4gICAgICAgICAgICBmcm9tLmhhc2ggPT09IHRvLmhhc2hcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIFBhdGhzIGFuZCBoYXNoZXMgcmVtYWluIHRoZSBzYW1lLCBzbyBvbmx5IHF1ZXJpZXMgaGF2ZSBjaGFuZ2VkLlxuICAgICAgICAgICAgLy8gVXBkYXRlIGZpbHRlciBhbmQgcmVsb2FkIGRhdGEgd2l0aG91dCBjbGVhcmluZy5cbiAgICAgICAgICAgIHRoaXMucXVlcnkgPSB0by5xdWVyeVxuICAgICAgICAgICAgdGhpcy5sb2FkRGF0YShmYWxzZSlcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdGhpcy5tZXRhLnJlbG9hZCAmJlxuICAgICAgICAgICAgZnJvbS5wYXRoICE9PSB0by5wYXRoICYmXG4gICAgICAgICAgICBmcm9tLnBhdGguc3RhcnRzV2l0aCh0by5wYXRoKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gUmVsb2FkIHRoZSBzb3VyY2Ugd2hlbiBuYXZpZ2F0aW5nIGJhY2sgdG8gYSBwYXJlbnQtcm91dGUgYWZ0ZXJcbiAgICAgICAgICAgIC8vIGNoYW5naW5nIGRhdGEgaW4gYSBjaGlsZC1yb3V0ZS5cbiAgICAgICAgICAgIHRoaXMubWV0YS5yZWxvYWQgPSBmYWxzZVxuICAgICAgICAgICAgdGhpcy5sb2FkRGF0YShmYWxzZSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgd3JhcHBlZFByaW1pdGl2ZXM6IHtcbiAgICAgIGRlZXA6IHRydWUsXG4gICAgICBoYW5kbGVyKHRvLCBmcm9tKSB7XG4gICAgICAgIGNvbnN0IHsgd3JhcFByaW1pdGl2ZXMgfSA9IHRoaXNcbiAgICAgICAgLy8gU2tpcCB0aGUgaW5pdGlhbCBzZXR0aW5nIG9mIHdyYXBwZWRQcmltaXRpdmVzIGFycmF5XG4gICAgICAgIGlmICh3cmFwUHJpbWl0aXZlcyAmJiBmcm9tICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2hlbmV2ZXIgdGhlIHdyYXBwZWRQcmltaXRpdmVzIGNoYW5nZSwgbWFwIHRoZWlyIHZhbHVlcyBiYWNrIHRvIHRoZVxuICAgICAgICAgIC8vIGFycmF5IG9mIHByaW1pdGl2ZXMsIGluIGEgcHJpbWl0aXZlIHdheSA6KVxuICAgICAgICAgIC8vIEJ1dCBzZXQgYHVud3JhcHBpbmdQcmltaXRpdmVzYCB0byB0cnVlLCBzbyB0aGUgYGxpc3REYXRhYCBjb21wdXRlZFxuICAgICAgICAgIC8vIHByb3BlcnR5IGtub3dzIGFib3V0IGl0LCB3aGljaCBzZXRzIGl0IHRvIGBmYWxzZWAgYWdhaW4uXG4gICAgICAgICAgdGhpcy51bndyYXBwaW5nUHJpbWl0aXZlcy52YWx1ZSA9IHRydWVcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdG8ubWFwKG9iamVjdCA9PiBvYmplY3Rbd3JhcFByaW1pdGl2ZXNdKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gdGhpcy4kcm91dGUucXVlcnlcbiAgICAgIHRoaXMuZW5zdXJlRGF0YSgpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmNsZWFyRGF0YSgpXG4gICAgY2xlYXJEYXRhKCkge1xuICAgICAgdGhpcy50b3RhbCA9IDBcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLnNldERhdGEoKVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgLy8gV2hlbiBuZXcgZGF0YSBpcyBsb2FkZWQsIHdlIGNhbiBzdG9yZSBpdCByaWdodCBiYWNrIGluIHRoZSBkYXRhIG9mIHRoZVxuICAgICAgLy8gdmlldyBvciBmb3JtIHRoYXQgY3JlYXRlZCB0aGlzIGxpc3QgY29tcG9uZW50LlxuICAgICAgLy8gU3VwcG9ydCB0d28gZm9ybWF0cyBmb3IgbGlzdCBkYXRhOlxuICAgICAgLy8gLSBBcnJheTogYFsuLi5dYFxuICAgICAgLy8gLSBPYmplY3Q6IGB7IHJlc3VsdHM6IFsuLi5dLCB0b3RhbCB9YCwgc2VlIGB1bndyYXBMaXN0RGF0YSgpYFxuICAgICAgaWYgKFxuICAgICAgICAhZGF0YSB8fFxuICAgICAgICB0aGlzLmlzTGlzdFNvdXJjZSAmJiBpc0FycmF5KGRhdGEpIHx8XG4gICAgICAgIHRoaXMuaXNPYmplY3RTb3VyY2UgJiYgaXNPYmplY3QoZGF0YSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLnZhbHVlID0gZGF0YVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnVud3JhcExpc3REYXRhKGRhdGEpKSB7XG4gICAgICAgIC8vIFRoZSBmb3JtYXQgZGlkbid0IG1hdGNoLCBzZWUgaWYgd2UgcmVjZWl2ZWQgYSBgeyByZXN1bHRzLCB0b3RhbCB9YFxuICAgICAgICAvLyBvYmplY3QsIGluIHdoaWNoIGNhc2UgYHRoaXMudmFsdWVgIHdhcyBhbHJlYWR5IHNldCBieVxuICAgICAgICAvLyBgdW53cmFwTGlzdERhdGEoKWAgYW5kIHdlJ3JlIGRvbmUgbm93LlxuICAgICAgfSBlbHNlIGlmIChpc09iamVjdChkYXRhKSAmJiB0aGlzLmlzSW5WaWV3KSB7XG4gICAgICAgIC8vIFRoZSBjb250cm9sbGVyIGlzIHNlbmRpbmcgZGF0YSBmb3IgYSBmdWxsIG11bHRpLWNvbXBvbmVudCB2aWV3LFxuICAgICAgICAvLyBpbmNsdWRpbmcgdGhlIG5lc3RlZCBsaXN0IGRhdGEuXG4gICAgICAgIHRoaXMudmlld0NvbXBvbmVudC5zZXREYXRhKGRhdGEpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHVud3JhcExpc3REYXRhKGRhdGEpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pc0xpc3RTb3VyY2UgJiZcbiAgICAgICAgaXNPYmplY3QoZGF0YSkgJiZcbiAgICAgICAgaXNOdW1iZXIoZGF0YS50b3RhbCkgJiZcbiAgICAgICAgaXNBcnJheShkYXRhLnJlc3VsdHMpXG4gICAgICApIHtcbiAgICAgICAgLy8gSWYgQGRpdG9qcy9zZXJ2ZXIgc2VuZHMgZGF0YSBpbiB0aGUgZm9ybSBvZiBgeyByZXN1bHRzLCB0b3RhbCB9YFxuICAgICAgICAvLyByZXBsYWNlIHRoZSB2YWx1ZSB3aXRoIHJlc3VsdCwgYnV0IHJlbWVtYmVyIHRoZSB0b3RhbCBpbiB0aGUgc3RvcmUuXG4gICAgICAgIHRoaXMudG90YWwgPSBkYXRhLnRvdGFsXG4gICAgICAgIHRoaXMudmFsdWUgPSBkYXRhLnJlc3VsdHNcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3JlYXRlSXRlbShzY2hlbWEsIHR5cGUpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmNyZWF0ZURhdGEoc2NoZW1hLCB0eXBlKVxuICAgICAgaWYgKHRoaXMuaXNPYmplY3RTb3VyY2UpIHtcbiAgICAgICAgdGhpcy5vYmplY3REYXRhID0gaXRlbVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5saXN0RGF0YS5wdXNoKGl0ZW0pXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb2xsYXBzaWJsZSkge1xuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB0aGlzLm9wZW5TY2hlbWFDb21wb25lbnQoLTEpKVxuICAgICAgfVxuICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICByZXR1cm4gaXRlbVxuICAgIH0sXG5cbiAgICByZW1vdmVJdGVtKGl0ZW0sIGluZGV4KSB7XG4gICAgICBsZXQgcmVtb3ZlZCA9IGZhbHNlXG4gICAgICBpZiAodGhpcy5pc09iamVjdFNvdXJjZSkge1xuICAgICAgICB0aGlzLm9iamVjdERhdGEgPSBudWxsXG4gICAgICAgIHJlbW92ZWQgPSB0cnVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB7IGxpc3REYXRhIH0gPSB0aGlzXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgbGlzdERhdGEuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICAgIHJlbW92ZWQgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyZW1vdmVkKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlSXRlbVN0b3JlKHRoaXMuc2NoZW1hLCBpdGVtLCBpbmRleClcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpIHtcbiAgICAgIGNvbnN0IGxhYmVsID0gKFxuICAgICAgICBpdGVtICYmXG4gICAgICAgIHRoaXMuZ2V0SXRlbUxhYmVsKHRoaXMuc2NoZW1hLCBpdGVtLCB7XG4gICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgZXh0ZW5kZWQ6IHRydWVcbiAgICAgICAgfSlcbiAgICAgIClcblxuICAgICAgY29uc3Qgbm90aWZ5ID0gKCkgPT5cbiAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgIHR5cGU6IHRoaXMuaXNUcmFuc2llbnQgPyAnaW5mbycgOiAnc3VjY2VzcycsXG4gICAgICAgICAgdGl0bGU6ICdTdWNjZXNzZnVsbHkgUmVtb3ZlZCcsXG4gICAgICAgICAgdGV4dDogW1xuICAgICAgICAgICAgYCR7bGFiZWx9IHdhcyAke3RoaXMudmVyYnMuZGVsZXRlZH0uYCxcbiAgICAgICAgICAgIHRoaXMudHJhbnNpZW50Tm90ZVxuICAgICAgICAgIF1cbiAgICAgICAgfSlcblxuICAgICAgaWYgKFxuICAgICAgICBpdGVtICYmXG4gICAgICAgIHdpbmRvdy5jb25maXJtKFxuICAgICAgICAgIGBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gJHt0aGlzLnZlcmJzLmRlbGV0ZX0gJHtsYWJlbH0/YFxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgaWYgKHRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oaXRlbSwgaW5kZXgpXG4gICAgICAgICAgbm90aWZ5KClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBpdGVtSWQgPSB0aGlzLmdldEl0ZW1JZCh0aGlzLnNjaGVtYSwgaXRlbSwgaW5kZXgpXG4gICAgICAgICAgY29uc3QgbWV0aG9kID0gJ2RlbGV0ZSdcbiAgICAgICAgICBjb25zdCByZXNvdXJjZSA9IGdldE1lbWJlclJlc291cmNlKFxuICAgICAgICAgICAgaXRlbUlkLFxuICAgICAgICAgICAgdGhpcy5nZXRSZXNvdXJjZSh7IG1ldGhvZCB9KVxuICAgICAgICAgIClcbiAgICAgICAgICBpZiAocmVzb3VyY2UpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdCh7IG1ldGhvZCwgcmVzb3VyY2UgfSwgZXJyID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oaXRlbSwgaW5kZXgpXG4gICAgICAgICAgICAgICAgbm90aWZ5KClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLnJlbG9hZERhdGEoKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0U2NoZW1hQ29tcG9uZW50KGluZGV4KSB7XG4gICAgICBjb25zdCB7IHNjaGVtYUNvbXBvbmVudHMgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHsgbGVuZ3RoIH0gPSBzY2hlbWFDb21wb25lbnRzXG4gICAgICByZXR1cm4gc2NoZW1hQ29tcG9uZW50c1soKGluZGV4ICUgbGVuZ3RoKSArIGxlbmd0aCkgJSBsZW5ndGhdXG4gICAgfSxcblxuICAgIG9wZW5TY2hlbWFDb21wb25lbnQoaW5kZXgpIHtcbiAgICAgIGNvbnN0IHNjaGVtYUNvbXBvbmVudCA9IHRoaXMuZ2V0U2NoZW1hQ29tcG9uZW50KGluZGV4KVxuICAgICAgaWYgKHNjaGVtYUNvbXBvbmVudCkge1xuICAgICAgICBzY2hlbWFDb21wb25lbnQub3BlbmVkID0gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBuYXZpZ2F0ZVRvQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKSB7XG4gICAgICBpZiAodGhpcy5jb2xsYXBzaWJsZSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IGRhdGFQYXRoLnN0YXJ0c1dpdGgodGhpcy5kYXRhUGF0aClcbiAgICAgICAgICA/IHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgICAgICA/IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGguc2xpY2UodGhpcy5kYXRhUGF0aC5sZW5ndGggKyAxKSlbMF0gPz8gbnVsbFxuICAgICAgICAgICAgOiAwXG4gICAgICAgICAgOiBudWxsXG4gICAgICAgIGlmIChpbmRleCAhPT0gbnVsbCAmJiBpc051bWJlcigraW5kZXgpKSB7XG4gICAgICAgICAgY29uc3Qgc2NoZW1hQ29tcG9uZW50ID0gdGhpcy5nZXRTY2hlbWFDb21wb25lbnQoK2luZGV4KVxuICAgICAgICAgIGlmIChzY2hlbWFDb21wb25lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgb3BlbmVkIH0gPSBzY2hlbWFDb21wb25lbnRcbiAgICAgICAgICAgIGlmICghb3BlbmVkKSB7XG4gICAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSB0cnVlXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuJG5leHRUaWNrKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBzY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50cy5sZW5ndGggPiAwICYmIChvbkNvbXBsZXRlPy4oY29tcG9uZW50cykgPz8gdHJ1ZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSBvcGVuZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlVG9Sb3V0ZUNvbXBvbmVudChkYXRhUGF0aCwgb25Db21wbGV0ZSlcbiAgICB9LFxuXG4gICAgbmF2aWdhdGVUb1JvdXRlQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBjYWxsT25Db21wbGV0ZSA9ICgpID0+IHtcbiAgICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgbGFzdCByb3V0ZSBjb21wb25lbnQsIHdoaWNoIHdpbGwgYmUgdGhlIGNvbXBvbmVudCB0aGF0XG4gICAgICAgICAgLy8gd2UganVzdCBuYXZpZ2F0ZWQgdG8sIGFuZCBwYXNzIGl0IG9uIHRvIGBvbkNvbXBsZXRlKClgXG4gICAgICAgICAgY29uc3QgeyByb3V0ZUNvbXBvbmVudHMgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICAgICAgICBjb25zdCByb3V0ZUNvbXBvbmVudCA9IHJvdXRlQ29tcG9uZW50c1tyb3V0ZUNvbXBvbmVudHMubGVuZ3RoIC0gMV1cbiAgICAgICAgICByZXNvbHZlKG9uQ29tcGxldGU/Lihbcm91dGVDb21wb25lbnRdKSA/PyB0cnVlKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YVBhdGhQYXJ0cyA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gZmluZCBhIHJvdXRlIHRoYXQgY2FuIHNlcnZlIHBhcnQgb2YgdGhlIGdpdmVuIGRhdGFQYXRoLFxuICAgICAgICAvLyBhbmQgdGFrZSBpdCBmcm9tIHRoZXJlOlxuICAgICAgICB3aGlsZSAoZGF0YVBhdGhQYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMucm91dGVDb21wb25lbnQuZ2V0Q2hpbGRQYXRoKFxuICAgICAgICAgICAgdGhpcy5hcGkubm9ybWFsaXplUGF0aChub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aFBhcnRzKSlcbiAgICAgICAgICApXG4gICAgICAgICAgLy8gU2VlIGlmIHRoZXJlIGFjdHVhbGx5IGlzIGEgcm91dGUgZm9yIHRoaXMgc3ViLWNvbXBvbmVudDpcbiAgICAgICAgICBjb25zdCB7IG1hdGNoZWQgfSA9IHRoaXMuJHJvdXRlci5yZXNvbHZlKHBhdGgpXG4gICAgICAgICAgaWYgKG1hdGNoZWQubGVuZ3RoICYmIG1hdGNoZWRbMF0ubmFtZSAhPT0gJ2NhdGNoLWFsbCcpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiRyb3V0ZS5wYXRoID09PSBwYXRoKSB7XG4gICAgICAgICAgICAgIC8vIFdlJ3JlIGFscmVhZHkgdGhlcmUsIHNvIGp1c3QgY2FsbCBgb25Db21wbGV0ZSgpYDpcbiAgICAgICAgICAgICAgY2FsbE9uQ29tcGxldGUoKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gTmF2aWdhdGUgdG8gdGhlIGNvbXBvbmVudCdzIHBhdGgsIHRoZW4gY2FsbCBgb25Db21wbGV0ZSgpYF86XG4gICAgICAgICAgICAgIHRoaXMuJHJvdXRlclxuICAgICAgICAgICAgICAgIC5wdXNoKHsgcGF0aCB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaChyZWplY3QpXG4gICAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgdGhlIGxhc3Qgcm91dGUgY29tcG9uZW50IHRvIGJlIG1vdW50ZWQgaW4gdGhlIG5leHRcbiAgICAgICAgICAgICAgICAvLyB0aWNrIGJlZm9yZSBjYWxsaW5nIGBvbkNvbXBsZXRlKClgXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy4kbmV4dFRpY2soY2FsbE9uQ29tcGxldGUpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBLZWVwIHJlbW92aW5nIHRoZSBsYXN0IHBhcnQgdW50aWwgd2UgZmluZCBhIG1hdGNoLlxuICAgICAgICAgIGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKGZhbHNlKVxuICAgICAgfSlcbiAgICB9XG4gIH0sIC8vIGVuZCBvZiBgbWV0aG9kc2BcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgIGFwaSxcbiAgICBzY2hlbWEsXG4gICAgbmFtZSxcbiAgICByb3V0ZXMsXG4gICAgbGV2ZWwsXG4gICAgbmVzdGVkID0gZmFsc2UsXG4gICAgZmxhdHRlbiA9IGZhbHNlLFxuICAgIHByb2Nlc3MgPSBudWxsXG4gICkge1xuICAgIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSlcbiAgICBjb25zdCBpbmxpbmVkID0gaXNJbmxpbmVkKHNjaGVtYSlcbiAgICBpZiAoaW5saW5lZCAmJiBzY2hlbWEucmVzb3VyY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE5lc3RlZCAke1xuICAgICAgICAgIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgICAgICA/ICdsaXN0cydcbiAgICAgICAgICAgIDogdGhpcy5pc09iamVjdFNvdXJjZVxuICAgICAgICAgICAgICA/ICdvYmplY3RzJ1xuICAgICAgICAgICAgICA6ICdzY2hlbWEnXG4gICAgICAgIH0gY2Fubm90IGxvYWQgZGF0YSBmcm9tIHRoZWlyIG93biByZXNvdXJjZXNgXG4gICAgICApXG4gICAgfVxuICAgIC8vIFVzZSBkaWZmZXJlbnRseSBuYW1lZCB1cmwgcGFyYW1ldGVycyBvbiBlYWNoIG5lc3RlZCBsZXZlbCBmb3IgaWQgYXNcbiAgICAvLyBvdGhlcndpc2UgdGhleSB3b3VsZCBjbGFzaCBhbmQgb3ZlcnJpZGUgZWFjaCBvdGhlciBpbnNpZGUgJHJvdXRlLnBhcmFtc1xuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzEzNDVcbiAgICBjb25zdCBwYXJhbSA9IGBpZCR7bGV2ZWwgKyAxfWBcbiAgICBjb25zdCBtZXRhID0ge1xuICAgICAgYXBpLFxuICAgICAgc2NoZW1hXG4gICAgfVxuICAgIGNvbnN0IGZvcm1NZXRhID0ge1xuICAgICAgLi4ubWV0YSxcbiAgICAgIC8vIFdoZW4gY2hpbGRyZW4gYXJlIGZsYXR0ZW5lZCAoZS5nLiB0cmVlLWxpc3RzKSwgaW5jbHVkZSB0aGUgYGZsYXR0ZW5gXG4gICAgICAvLyBzZXR0aW5nIGFsc28sIGZvciBmbGF0dGVuaW5nIGJlbG93LlxuICAgICAgZmxhdHRlbixcbiAgICAgIG5lc3RlZCxcbiAgICAgIHBhcmFtXG4gICAgfVxuICAgIGNvbnN0IGNoaWxkUm91dGVzID0gYXdhaXQgcHJvY2Vzc0Zvcm1zKGFwaSwgc2NoZW1hLCBsZXZlbClcbiAgICBpZiAocHJvY2Vzcykge1xuICAgICAgYXdhaXQgcHJvY2VzcyhjaGlsZFJvdXRlcywgbGV2ZWwgKyAxKVxuICAgIH1cbiAgICAvLyBJbmxpbmVkIGZvcm1zIGRvbid0IG5lZWQgdG8gYWN0dWFsbHkgYWRkIHJvdXRlcy5cbiAgICBpZiAoaGFzRm9ybVNjaGVtYShzY2hlbWEpICYmICFpbmxpbmVkKSB7XG4gICAgICAvLyBMaXN0cyBpbiBzaW5nbGUtY29tcG9uZW50LXZpZXdzIChsZXZlbCA9PT0gMCkgdXNlIHRoZWlyIHZpZXcncyBwYXRoLFxuICAgICAgLy8gd2hpbGUgYWxsIG90aGVycyBuZWVkIHRoZWlyIHBhdGggcHJlZml4ZWQgd2l0aCB0aGUgcGFyZW50J3MgcGF0aDpcbiAgICAgIGNvbnN0IHNvdXJjZVBhdGggPSBsZXZlbCA9PT0gMCA/ICcnIDogc2NoZW1hLnBhdGhcbiAgICAgIGNvbnN0IGZvcm1Sb3V0ZSA9IHtcbiAgICAgICAgcGF0aDogZ2V0UGF0aFdpdGhQYXJhbShcbiAgICAgICAgICBzb3VyY2VQYXRoLFxuICAgICAgICAgIC8vIE9iamVjdCBzb3VyY2VzIGRvbid0IG5lZWQgaWQgcGFyYW1zIGluIHRoZWlyIGZvcm0gcGF0aHMsIGFzIHRoZXlcbiAgICAgICAgICAvLyBkaXJlY3RseSBlZGl0IG9uZSBvYmplY3QuXG4gICAgICAgICAgaXNMaXN0U291cmNlKHNjaGVtYSkgPyBwYXJhbSA6IG51bGxcbiAgICAgICAgKSxcbiAgICAgICAgY29tcG9uZW50OiBEaXRvQ29tcG9uZW50LmNvbXBvbmVudChcbiAgICAgICAgICBuZXN0ZWQgPyAnRGl0b0Zvcm1OZXN0ZWQnIDogJ0RpdG9Gb3JtJ1xuICAgICAgICApLFxuICAgICAgICBtZXRhOiBmb3JtTWV0YVxuICAgICAgfVxuICAgICAgaWYgKGlzT2JqZWN0U291cmNlKHNjaGVtYSkpIHtcbiAgICAgICAgLy8gQWxzbyBhZGQgYSBwYXJhbSByb3V0ZSwgc2ltcGx5IHRvIGhhbmRsZSAnL2NyZWF0ZScgbGlua3MgdGhlIHNhbWVcbiAgICAgICAgLy8gd2F5IHRoYXQgbGlzdHMgZG8sIHdoZXJlIGl0IG92ZXJsYXBzIHdpdGggOmlkIGZvciBpdGVtIGlkcy5cbiAgICAgICAgcm91dGVzLnB1c2goe1xuICAgICAgICAgIC4uLmZvcm1Sb3V0ZSxcbiAgICAgICAgICBwYXRoOiBnZXRQYXRoV2l0aFBhcmFtKHNvdXJjZVBhdGgsIHBhcmFtKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKHNvdXJjZVBhdGgpIHtcbiAgICAgICAgLy8gSnVzdCByZWRpcmVjdCBiYWNrIHRvIHRoZSBwYXJlbnQgd2hlbiBhIG5lc3RlZCBzb3VyY2Ugcm91dGUgaXMgaGl0LlxuICAgICAgICByb3V0ZXMucHVzaCh7XG4gICAgICAgICAgcGF0aDogc291cmNlUGF0aCxcbiAgICAgICAgICByZWRpcmVjdDogJy4nLFxuICAgICAgICAgIG1ldGFcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIC8vIFBhcnRpdGlvbiBjaGlsZFJvdXRlcyBpbnRvIHRob3NlIHRoYXQgbmVlZCBmbGF0dGVuaW5nIChlLmcuIHRyZWUtbGlzdHMpXG4gICAgICAvLyBhbmQgdGhvc2UgdGhhdCBkb24ndCwgYW5kIHByb2Nlc3MgZWFjaCBncm91cCBzZXBhcmF0ZWx5IGFmdGVyLlxuICAgICAgY29uc3QgW2ZsYXRSb3V0ZXMsIHN1YlJvdXRlc10gPSBjaGlsZFJvdXRlcy5yZWR1Y2UoXG4gICAgICAgIChyZXMsIHJvdXRlKSA9PiB7XG4gICAgICAgICAgcmVzW3JvdXRlLm1ldGEuZmxhdHRlbiA/IDAgOiAxXS5wdXNoKHJvdXRlKVxuICAgICAgICAgIHJldHVybiByZXNcbiAgICAgICAgfSxcbiAgICAgICAgW1tdLCBbXV1cbiAgICAgIClcbiAgICAgIGlmIChzdWJSb3V0ZXMubGVuZ3RoKSB7XG4gICAgICAgIGZvcm1Sb3V0ZS5jaGlsZHJlbiA9IHN1YlJvdXRlc1xuICAgICAgfVxuICAgICAgcm91dGVzLnB1c2goZm9ybVJvdXRlKVxuICAgICAgLy8gQWRkIHRoZSBwcmVmaXhlZCBmb3JtUm91dGVzIHdpdGggdGhlaXIgY2hpbGRyZW4gZm9yIG5lc3RlZCBsaXN0cy5cbiAgICAgIGlmIChmbGF0Um91dGVzLmxlbmd0aCkge1xuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkUm91dGUgb2YgZmxhdFJvdXRlcykge1xuICAgICAgICAgIHJvdXRlcy5wdXNoKHtcbiAgICAgICAgICAgIC4uLihjaGlsZFJvdXRlLnJlZGlyZWN0ID8gY2hpbGRSb3V0ZSA6IGZvcm1Sb3V0ZSksXG4gICAgICAgICAgICBwYXRoOiBgJHtmb3JtUm91dGUucGF0aH0vJHtjaGlsZFJvdXRlLnBhdGh9YCxcbiAgICAgICAgICAgIG1ldGE6IHtcbiAgICAgICAgICAgICAgLi4uY2hpbGRSb3V0ZS5tZXRhLFxuICAgICAgICAgICAgICBmbGF0dGVuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoeyBzY2hlbWEsIHZhbHVlLCBkYXRhUGF0aCB9LCBncmFwaCkge1xuICAgIGdyYXBoLmFkZFNvdXJjZShkYXRhUGF0aCwgc2NoZW1hKVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldFBhdGhXaXRoUGFyYW0ocGF0aCwgcGFyYW0pIHtcbiAgcmV0dXJuIHBhcmFtXG4gICAgPyBwYXRoXG4gICAgICA/IGAke3BhdGh9Lzoke3BhcmFtfWBcbiAgICAgIDogYDoke3BhcmFtfWBcbiAgICA6IHBhdGhcbn1cbiIsImltcG9ydCB7IGlzQXJyYXksIGFzQXJyYXksIGxhYmVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGdldE5hbWVkU2NoZW1hcywgcHJvY2Vzc05lc3RlZFNjaGVtYURlZmF1bHRzIH0gZnJvbSAnLi9zY2hlbWEnXG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJDb21wb25lbnRzID0ge1xuICAndGV4dCcoZmlsdGVyKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IFtcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdjb250YWlucycsXG4gICAgICAgIHZhbHVlOiAnY29udGFpbnMnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogJ2VxdWFscycsXG4gICAgICAgIHZhbHVlOiAnZXF1YWxzJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdzdGFydHMgd2l0aCcsXG4gICAgICAgIHZhbHVlOiAnc3RhcnRzLXdpdGgnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogJ2VuZHMgd2l0aCcsXG4gICAgICAgIHZhbHVlOiAnZW5kcy13aXRoJ1xuICAgICAgfVxuICAgIF1cbiAgICByZXR1cm4ge1xuICAgICAgb3BlcmF0b3I6IGZpbHRlci5vcGVyYXRvcnNcbiAgICAgICAgPyB7XG4gICAgICAgICAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICAgICAgICAgIHdpZHRoOiAnMi81JyxcbiAgICAgICAgICAgIG9wdGlvbnM6IGlzQXJyYXkoZmlsdGVyLm9wZXJhdG9ycylcbiAgICAgICAgICAgICAgPyBvcHRpb25zLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIG9wdGlvbiA9PiBmaWx0ZXIub3BlcmF0b3JzLmluY2x1ZGVzKG9wdGlvbi52YWx1ZSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogb3B0aW9ucyxcbiAgICAgICAgICAgIGNsZWFyYWJsZTogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgOiBudWxsLFxuICAgICAgdGV4dDoge1xuICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgIHdpZHRoOiBmaWx0ZXIub3BlcmF0b3JzID8gJzMvNScgOiAnZmlsbCcsXG4gICAgICAgIGNsZWFyYWJsZTogdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICAnZGF0ZS1yYW5nZScoKSB7XG4gICAgY29uc3QgZGF0ZXRpbWUgPSB7XG4gICAgICB0eXBlOiAnZGF0ZXRpbWUnLFxuICAgICAgd2lkdGg6ICcxLzInLFxuICAgICAgZm9ybWF0czoge1xuICAgICAgICAvLyBVc2Ugc2hvcnRlciBkYXRlIGZvcm1hdCBpbiBkYXRlLXJhbmdlIGZpbHRlcnM6XG4gICAgICAgIGRhdGU6IHtcbiAgICAgICAgICBkYXk6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBtb250aDogJzItZGlnaXQnLFxuICAgICAgICAgIHllYXI6ICdudW1lcmljJ1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2xlYXJhYmxlOiB0cnVlXG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBmcm9tOiBkYXRldGltZSxcbiAgICAgIHRvOiBkYXRldGltZVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRmlsdGVyc1BhbmVsKGFwaSwgZmlsdGVycywgZGF0YVBhdGgsIHF1ZXJ5KSB7XG4gIGNvbnN0IHsgc3RpY2t5LCAuLi5maWx0ZXJTY2hlbWFzIH0gPSBmaWx0ZXJzXG4gIGNvbnN0IHBhbmVsID0ge1xuICAgIHR5cGU6ICdwYW5lbCcsXG4gICAgbGFiZWw6ICdGaWx0ZXJzJyxcbiAgICBuYW1lOiAnJGZpbHRlcnMnLFxuICAgIC8vIE92ZXJyaWRlIHRoZSBkZWZhdWx0IHZhbHVlXG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIHN0aWNreSxcblxuICAgIC8vIE5PVEU6IE9uIHBhbmVscywgdGhlIGRhdGEoKSBjYWxsYmFjayBkb2VzIHNvbWV0aGluZyBlbHNlIHRoYW4gb24gbm9ybWFsXG4gICAgLy8gc2NoZW1hOiBJdCBwcm9kdWNlcyB0aGUgYGRhdGFgIHByb3BlcnR5IHRvIGJlIHBhc3NlZCB0byB0aGUgcGFuZWwnc1xuICAgIC8vIHNjaGVtYSwgbm90IHRoZSBkYXRhIHRvIGJlIHVzZWQgZm9yIHRoZSBwYW5lbCBjb21wb25lbnQgZGlyZWN0bHkuXG4gICAgZGF0YSgpIHtcbiAgICAgIHJldHVybiBwYXJzZUZpbHRlcnNEYXRhKFxuICAgICAgICBwYW5lbCxcbiAgICAgICAgcXVlcnkudmFsdWVcbiAgICAgIClcbiAgICB9LFxuXG4gICAgY29tcG9uZW50czogY3JlYXRlRmlsdGVyc0NvbXBvbmVudHMoZmlsdGVyU2NoZW1hcyksXG4gICAgYnV0dG9uczogY3JlYXRlRmlsdGVyc0J1dHRvbnMoZmFsc2UpLFxuICAgIHBhbmVsQnV0dG9uczogY3JlYXRlRmlsdGVyc0J1dHRvbnModHJ1ZSksXG5cbiAgICBldmVudHM6IHtcbiAgICAgIGNoYW5nZSgpIHtcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgZmlsdGVycygpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdEZpbHRlcnNEYXRhKHRoaXMuc2NoZW1hLCB0aGlzLmRhdGEpXG4gICAgICB9LFxuXG4gICAgICBoYXNGaWx0ZXJzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJzLmxlbmd0aCA+IDBcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbWV0aG9kczoge1xuICAgICAgYXBwbHlGaWx0ZXJzKCkge1xuICAgICAgICBxdWVyeS52YWx1ZSA9IHtcbiAgICAgICAgICAuLi5xdWVyeS52YWx1ZSxcbiAgICAgICAgICBmaWx0ZXI6IHRoaXMuZmlsdGVycyxcbiAgICAgICAgICAvLyBDbGVhciBwYWdpbmF0aW9uIHdoZW4gYXBwbHlpbmcgb3IgY2xlYXJpbmcgZmlsdGVyczpcbiAgICAgICAgICBwYWdlOiB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgY2xlYXJGaWx0ZXJzKCkge1xuICAgICAgICB0aGlzLnJlc2V0RGF0YSgpXG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKClcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJvY2Vzc05lc3RlZFNjaGVtYURlZmF1bHRzKGFwaSwgcGFuZWwpXG4gIHJldHVybiBwYW5lbFxufVxuXG5mdW5jdGlvbiBjcmVhdGVGaWx0ZXJzQnV0dG9ucyhzbWFsbCkge1xuICByZXR1cm4ge1xuICAgIGNsZWFyOiB7XG4gICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgIHRleHQ6IHNtYWxsID8gbnVsbCA6ICdDbGVhcicsXG4gICAgICBkaXNhYmxlZDogKHsgc2NoZW1hQ29tcG9uZW50IH0pID0+ICFzY2hlbWFDb21wb25lbnQuaGFzRmlsdGVycyxcbiAgICAgIGV2ZW50czoge1xuICAgICAgICBjbGljayh7IHNjaGVtYUNvbXBvbmVudCB9KSB7XG4gICAgICAgICAgLy8gU2luY2UgcGFuZWwgYnV0dG9ucyBhcmUgb3V0c2lkZSBvZiB0aGUgc2NoZW1hLCB3ZSBuZWVkIHRvIHVzZSB0aGVcbiAgICAgICAgICAvLyBzY2hlbWEgY29tcG9uZW50IHJlY2VpdmVkIGZyb20gdGhlIGluaXRpYWxpemUgZXZlbnQgYmVsb3c6XG4gICAgICAgICAgc2NoZW1hQ29tcG9uZW50LmNsZWFyRmlsdGVycygpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3VibWl0OiB7XG4gICAgICB0eXBlOiAnc3VibWl0JyxcbiAgICAgIHRleHQ6IHNtYWxsID8gbnVsbCA6ICdGaWx0ZXInLFxuICAgICAgdmlzaWJsZTogIXNtYWxsLFxuICAgICAgZXZlbnRzOiB7XG4gICAgICAgIGNsaWNrKHsgc2NoZW1hQ29tcG9uZW50IH0pIHtcbiAgICAgICAgICBzY2hlbWFDb21wb25lbnQuYXBwbHlGaWx0ZXJzKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXREYXRhTmFtZShmaWx0ZXJOYW1lKSB7XG4gIC8vIFByZWZpeCBmaWx0ZXIgZGF0YSBrZXlzIHdpdGggJyQnIHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIG90aGVyIGRhdGEga2V5czpcbiAgcmV0dXJuIGAkJHtmaWx0ZXJOYW1lfWBcbn1cblxuZnVuY3Rpb24gZ2V0RmlsdGVyTmFtZShkYXRhTmFtZSkge1xuICByZXR1cm4gZGF0YU5hbWUuc3RhcnRzV2l0aCgnJCcpID8gZGF0YU5hbWUuc2xpY2UoMSkgOiBudWxsXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpbHRlcnNDb21wb25lbnRzKGZpbHRlcnMpIHtcbiAgY29uc3QgY29tcHMgPSB7fVxuICBmb3IgKGNvbnN0IGZpbHRlciBvZiBPYmplY3QudmFsdWVzKGdldE5hbWVkU2NoZW1hcyhmaWx0ZXJzKSB8fCB7fSkpIHtcbiAgICAvLyBTdXBwb3J0IGJvdGggY3VzdG9tIGZvcm1zIGFuZCBkZWZhdWx0IGZpbHRlciBjb21wb25lbnRzLCB0aHJvdWdoIHRoZVxuICAgIC8vIGBmaWx0ZXJDb21wb25lbnRzYCByZWdpc3RyeS4gRXZlbiBmb3IgZGVmYXVsdCBmaWx0ZXJzLCBzdGlsbCB1c2UgdGhlXG4gICAgLy8gcHJvcGVydGllcyBpbiBgZmlsdGVyYCBhcyB0aGUgYmFzZSBmb3IgYGZvcm1gLCBzbyB0aGluZ3MgbGlrZSBgbGFiZWxgXG4gICAgLy8gY2FuIGJlIGNoYW5nZWQgb24gdGhlIHJlc3VsdGluZyBmb3JtLlxuICAgIGNvbnN0IHsgZmlsdGVyOiB0eXBlLCB3aWR0aCwgLi4uZm9ybSB9ID0gZmlsdGVyXG4gICAgY29uc3QgY29tcG9uZW50cyA9IHR5cGVcbiAgICAgID8gZmlsdGVyQ29tcG9uZW50c1t0eXBlXT8uKGZpbHRlcilcbiAgICAgIDogZmlsdGVyLmNvbXBvbmVudHNcbiAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgZm9ybS50eXBlID0gJ2Zvcm0nXG4gICAgICBmb3JtLmNvbXBvbmVudHMgPSB7fVxuICAgICAgLy8gQ29udmVydCBsYWJlbHMgdG8gcGxhY2Vob2xkZXJzOlxuICAgICAgZm9yIChjb25zdCBba2V5LCBjb21wb25lbnRdIG9mIE9iamVjdC5lbnRyaWVzKGNvbXBvbmVudHMpKSB7XG4gICAgICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgICAgICBjb25zdCBsYWJlbCA9IGNvbXBvbmVudC5sYWJlbCB8fCBsYWJlbGl6ZShjb21wb25lbnQubmFtZSB8fCBrZXkpXG4gICAgICAgICAgZm9ybS5jb21wb25lbnRzW2tleV0gPSB7XG4gICAgICAgICAgICAuLi5jb21wb25lbnQsXG4gICAgICAgICAgICBsYWJlbDogZmFsc2UsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogbGFiZWxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbXBzW2dldERhdGFOYW1lKGZpbHRlci5uYW1lKV0gPSB7XG4gICAgICAgIGxhYmVsOiBmb3JtLmxhYmVsID8/IGxhYmVsaXplKGZpbHRlci5uYW1lKSxcbiAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBkZWZhdWx0OiAoKSA9PiAoe30pLFxuICAgICAgICBmb3JtLFxuICAgICAgICBpbmxpbmVkOiB0cnVlXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgZmlsdGVyICcke2ZpbHRlci5uYW1lfSc6IFVua25vd24gZmlsdGVyIHR5cGUgJyR7dHlwZX0nLmBcbiAgICAgIClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvbXBzXG59XG5cbmZ1bmN0aW9uIGdldENvbXBvbmVudHNGb3JGaWx0ZXIoc2NoZW1hLCBkYXRhTmFtZSkge1xuICBjb25zdCBjb21wb25lbnQgPSBzY2hlbWEuY29tcG9uZW50c1tkYXRhTmFtZV1cbiAgcmV0dXJuIGNvbXBvbmVudD8uZm9ybT8uY29tcG9uZW50c1xufVxuXG5mdW5jdGlvbiBmb3JtYXRGaWx0ZXJzRGF0YShzY2hlbWEsIGRhdGEpIHtcbiAgY29uc3QgZmlsdGVycyA9IFtdXG4gIGZvciAoY29uc3QgZGF0YU5hbWUgaW4gZGF0YSkge1xuICAgIGNvbnN0IGVudHJ5ID0gZGF0YVtkYXRhTmFtZV1cbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIC8vIE1hcCBjb21wb25lbnRzIHNlcXVlbmNlIHRvIGFyZ3VtZW50czpcbiAgICAgIGNvbnN0IGFyZ3MgPSBPYmplY3Qua2V5cyhcbiAgICAgICAgZ2V0Q29tcG9uZW50c0ZvckZpbHRlcihzY2hlbWEsIGRhdGFOYW1lKVxuICAgICAgKS5tYXAoXG4gICAgICAgIGtleSA9PiBlbnRyeVtrZXldID8/IG51bGxcbiAgICAgIClcbiAgICAgIC8vIE9ubHkgYXBwbHkgZmlsdGVyIGlmIHRoZXJlIGFyZSBzb21lIGFyZ3VtZW50cyB0aGF0IGFyZW4ndCBudWxsOlxuICAgICAgaWYgKGFyZ3Muc29tZSh2YWx1ZSA9PiB2YWx1ZSAhPT0gbnVsbCkpIHtcbiAgICAgICAgZmlsdGVycy5wdXNoKFxuICAgICAgICAgIGAke1xuICAgICAgICAgICAgZ2V0RmlsdGVyTmFtZShkYXRhTmFtZSlcbiAgICAgICAgICB9OiR7XG4gICAgICAgICAgICBhcmdzLm1hcChKU09OLnN0cmluZ2lmeSkuam9pbignLCcpXG4gICAgICAgICAgfWBcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmlsdGVyc1xufVxuXG5mdW5jdGlvbiBwYXJzZUZpbHRlcnNEYXRhKHNjaGVtYSwgcXVlcnkpIHtcbiAgY29uc3QgZmlsdGVycyA9IHt9XG4gIC8vIFNhbWUgYXMgQGRpdG9qcy9zZXJ2ZXIncyBRdWVyeVBhcmFtZXRlcnMuZmlsdGVyOiBUcmFuc2xhdGUgdGhlIHN0cmluZyBkYXRhXG4gIC8vIGZyb20gJHJvdXRlLnF1ZXJ5IGJhY2sgdG8gcGFyYW0gbGlzdHMgcGVyIGZpbHRlcjpcbiAgaWYgKHF1ZXJ5KSB7XG4gICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgYXNBcnJheShxdWVyeS5maWx0ZXIpKSB7XG4gICAgICBjb25zdCBbLCBmaWx0ZXJOYW1lLCBqc29uXSA9IGZpbHRlci5tYXRjaCgvXihcXHcrKTooLiopJC8pXG4gICAgICB0cnkge1xuICAgICAgICBmaWx0ZXJzW2ZpbHRlck5hbWVdID0gYXNBcnJheShKU09OLnBhcnNlKGBbJHtqc29ufV1gKSlcbiAgICAgIH0gY2F0Y2gge31cbiAgICB9XG4gIH1cbiAgY29uc3QgZmlsdGVyc0RhdGEgPSB7fVxuICBmb3IgKGNvbnN0IGRhdGFOYW1lIGluIHNjaGVtYS5jb21wb25lbnRzKSB7XG4gICAgY29uc3QgZGF0YSA9IHt9XG4gICAgLy8gSWYgd2UgaGF2ZSByZXRyaWV2ZWQgcGFyYW1zIGZyb20gdGhlIHF1ZXJ5LCBmZXRjaCB0aGUgYXNzb2NpYXRlZFxuICAgIC8vIGZvcm0gY29tcG9uZW50cyBzbyB3ZSBjYW4gbWFwIHRoZSB2YWx1ZXMgYmFjayB0byBvYmplY3Qga2V5czpcbiAgICBjb25zdCBhcmdzID0gZmlsdGVyc1tnZXRGaWx0ZXJOYW1lKGRhdGFOYW1lKV1cbiAgICBpZiAoYXJncykge1xuICAgICAgY29uc3QgY29tcG9uZW50cyA9IGdldENvbXBvbmVudHNGb3JGaWx0ZXIoc2NoZW1hLCBkYXRhTmFtZSlcbiAgICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICAgIGxldCBpbmRleCA9IDBcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gY29tcG9uZW50cykge1xuICAgICAgICAgIGRhdGFba2V5XSA9IGFyZ3NbaW5kZXgrK11cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmaWx0ZXJzRGF0YVtkYXRhTmFtZV0gPSBkYXRhXG4gIH1cbiAgcmV0dXJuIGZpbHRlcnNEYXRhXG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tbGlzdChcbiAgdi1pZj1cImlzUmVhZHlcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4pXG4gIC5kaXRvLWxpc3RfX2hlYWRlcihcbiAgICB2LWlmPVwic2NvcGVzIHx8IGhhc1BhZ2luYXRpb25cIlxuICApXG4gICAgRGl0b1Njb3BlcyhcbiAgICAgIHYtaWY9XCJzY29wZXNcIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gICAgKVxuICAgIC8vLSBXaGVuIHRoZXJlJ3Mgb25seSBwYWdpbmF0aW9uIHdpdGhvdXQgc2NvcGVzLCB3ZSBuZWVkIGEgZ29vZCBvbCcgc3BhY2VyXG4gICAgLy8tIGRpdiwgZm9yIHRoZSBsYXlvdXQgbm90IHRvIGJyZWFrLi4uXG4gICAgLmRpdG8tc3BhY2VyKFxuICAgICAgdi1lbHNlLWlmPVwiaGFzUGFnaW5hdGlvblwiXG4gICAgKVxuICAgIERpdG9QYWdpbmF0aW9uKFxuICAgICAgdi1pZj1cImhhc1BhZ2luYXRpb25cIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOmxpbWl0PVwicGFnaW5hdGVcIlxuICAgICAgOnRvdGFsPVwidG90YWwgfHwgMFwiXG4gICAgKVxuICB0YWJsZS5kaXRvLXRhYmxlKFxuICAgIDpjbGFzcz1ge1xuICAgICAgJ2RpdG8tdGFibGUtc2VwYXJhdG9ycyc6IGlzSW5saW5lZCxcbiAgICAgICdkaXRvLXRhYmxlLWxhcmdlci1wYWRkaW5nJzogaGFzRWRpdEJ1dHRvbnMgJiYgIWlzSW5saW5lZCxcbiAgICAgICdkaXRvLXRhYmxlLWFsdGVybmF0ZS1jb2xvcnMnOiAhaXNJbmxpbmVkLFxuICAgICAgJ2RpdG8tdGFibGUtZXZlbi1jb3VudCc6IGhhc0V2ZW5Db3VudFxuICAgIH1gXG4gIClcbiAgICBEaXRvVGFibGVIZWFkKFxuICAgICAgdi1pZj1cImNvbHVtbnNcIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOmNvbHVtbnM9XCJjb2x1bW5zXCJcbiAgICAgIDpoYXNFZGl0QnV0dG9ucz1cImhhc0VkaXRCdXR0b25zXCJcbiAgICApXG4gICAgRGl0b0RyYWdnYWJsZShcbiAgICAgIHRhZz1cInRib2R5XCJcbiAgICAgIDpvcHRpb25zPVwiZ2V0RHJhZ2dhYmxlT3B0aW9ucygpXCJcbiAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgOm1vZGVsVmFsdWU9XCJ1cGRhdGVPcmRlcihzb3VyY2VTY2hlbWEsIGxpc3REYXRhLCBwYWdpbmF0aW9uUmFuZ2UpXCJcbiAgICAgIEB1cGRhdGU6bW9kZWxWYWx1ZT1cInZhbHVlID0+IChsaXN0RGF0YSA9IHZhbHVlKVwiXG4gICAgKVxuICAgICAgdHIoXG4gICAgICAgIHYtZm9yPVwiKGl0ZW0sIGluZGV4KSBpbiBsaXN0RGF0YVwiXG4gICAgICAgIDppZD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgIDprZXk9XCJnZXRJdGVtVWlkKHNjaGVtYSwgaXRlbSlcIlxuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWlmPVwiY29sdW1uc1wiXG4gICAgICAgIClcbiAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgIHYtZm9yPVwiY29sdW1uIGluIGNvbHVtbnNcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIERpdG9UYWJsZUNlbGwoXG4gICAgICAgICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEoY29sdW1uKVwiXG4gICAgICAgICAgICAgIDprZXk9XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImdldENlbGxDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICAgICAgOmNlbGw9XCJjb2x1bW5cIlxuICAgICAgICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWVsc2VcbiAgICAgICAgKVxuICAgICAgICAgIHRkXG4gICAgICAgICAgICBEaXRvU2NoZW1hSW5saW5lZChcbiAgICAgICAgICAgICAgdi1pZj1cImlzSW5saW5lZFwiXG4gICAgICAgICAgICAgIDpsYWJlbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIGl0ZW0sIHsgaW5kZXgsIGFzT2JqZWN0OiB0cnVlIH0pXCJcbiAgICAgICAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgICA6c3RvcmU9XCJnZXRJdGVtU3RvcmUoc2NoZW1hLCBpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICAgICAgICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgICAgICAgICAgOmVkaXRQYXRoPVwiZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbXBvbmVudChcbiAgICAgICAgICAgICAgdi1lbHNlLWlmPVwic2NoZW1hLmNvbXBvbmVudFwiXG4gICAgICAgICAgICAgIDppcz1cInNjaGVtYS5jb21wb25lbnRcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgICAgICAgICAgdi1odG1sPVwicmVuZGVyKGdldENvbnRleHQoaXRlbSwgaW5kZXgpKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICAgICAgdi1odG1sPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgaXRlbSwgeyBpbmRleCB9KVwiXG4gICAgICAgICAgICApXG4gICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgdi1pZj1cImhhc0NlbGxFZGl0QnV0dG9uc1wiXG4gICAgICAgIClcbiAgICAgICAgICBEaXRvRWRpdEJ1dHRvbnMoXG4gICAgICAgICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICA6c3RvcmU9XCJnZXRJdGVtU3RvcmUoc2NoZW1hLCBpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgICA6ZWRpdFBhdGg9XCJnZXRFZGl0UGF0aChpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICApXG4gICAgLy8tIFJlbmRlciBjcmVhdGUgYnV0dG9ucyBpbnNpZGUgdGFibGUgd2hlbiBub3QgaW4gYSBzaW5nbGUgY29tcG9uZW50IHZpZXc6XG4gICAgdGZvb3QoXG4gICAgICB2LWlmPVwiaGFzTGlzdEJ1dHRvbnMgJiYgIXNpbmdsZVwiXG4gICAgKVxuICAgICAgdHJcbiAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9ucyg6Y29sc3Bhbj1cIm51bUNvbHVtbnNcIilcbiAgICAgICAgICBEaXRvRWRpdEJ1dHRvbnMoXG4gICAgICAgICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICA6ZGF0YT1cImxpc3REYXRhXCJcbiAgICAgICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICAgICAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICAgICAgICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgICAgICAgKVxuICAvLy0gUmVuZGVyIGNyZWF0ZSBidXR0b25zIG91dHNpZGUgdGFibGUgd2hlbiBpbiBhIHNpbmdsZSBjb21wb25lbnQgdmlldzpcbiAgRGl0b0VkaXRCdXR0b25zLmRpdG8tYnV0dG9ucy1sYXJnZS5kaXRvLWJ1dHRvbnMtbWFpbi5kaXRvLWJ1dHRvbnMtc3RpY2t5KFxuICAgIHYtaWY9XCJoYXNMaXN0QnV0dG9ucyAmJiBzaW5nbGVcIlxuICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwibGlzdERhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBTb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvU291cmNlTWl4aW4uanMnXG5pbXBvcnQgU29ydGFibGVNaXhpbiBmcm9tICcuLi9taXhpbnMvU29ydGFibGVNaXhpbi5qcydcbmltcG9ydCB7XG4gIGdldFZpZXdFZGl0UGF0aCxcbiAgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudCxcbiAgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudHNcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgY3JlYXRlRmlsdGVyc1BhbmVsIH0gZnJvbSAnLi4vdXRpbHMvZmlsdGVyLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgcGlja0J5LCBlcXVhbHMsIGh5cGhlbmF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBjb21wdXRlZCB9IGZyb20gJ3Z1ZSdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdsaXN0Jywge1xuICBtaXhpbnM6IFtTb3VyY2VNaXhpbiwgU29ydGFibGVNaXhpbl0sXG5cbiAgZ2V0U291cmNlVHlwZSh0eXBlKSB7XG4gICAgLy8gTm8gbmVlZCBmb3IgdHJhbnNmb3JtYXRpb24gaGVyZS4gU2VlIFR5cGVUcmVlTGlzdCBmb3IgZGV0YWlscy5cbiAgICByZXR1cm4gdHlwZVxuICB9LFxuXG4gIGdldFBhbmVsU2NoZW1hKGFwaSwgc2NoZW1hLCBkYXRhUGF0aCwgY29tcG9uZW50KSB7XG4gICAgY29uc3QgeyBmaWx0ZXJzIH0gPSBzY2hlbWFcbiAgICAvLyBTZWUgaWYgdGhpcyBsaXN0IGNvbXBvbmVudCB3YW50cyB0byBkaXNwbGF5IGEgZmlsdGVyIHBhbmVsLCBhbmQgaWYgc28sXG4gICAgLy8gY3JlYXRlIHRoZSBwYW5lbCBzY2hlbWEgZm9yIGl0IHRocm91Z2ggYGdldEZpbHRlcnNQYW5lbCgpYC5cbiAgICBpZiAoZmlsdGVycykge1xuICAgICAgcmV0dXJuIGNyZWF0ZUZpbHRlcnNQYW5lbChcbiAgICAgICAgYXBpLFxuICAgICAgICBmaWx0ZXJzLFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgLy8gUGFzcyBhIGNvbXB1dGVkIHZhbHVlIHRvIGdldCAvIHNldCB0aGUgcXVlcnksIHNlZSBnZXRGaWx0ZXJzUGFuZWwoKVxuICAgICAgICBjb21wdXRlZCh7XG4gICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudC5xdWVyeVxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBzZXQocXVlcnkpIHtcbiAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgdW5kZWZpbmVkIHZhbHVlcyBmb3IgY29tcGFyaW5nIHdpdGggZXF1YWxzKClcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlciA9IG9iaiA9PiBwaWNrQnkob2JqLCB2YWx1ZSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgaWYgKCFlcXVhbHMoZmlsdGVyKHF1ZXJ5KSwgZmlsdGVyKGNvbXBvbmVudC5xdWVyeSkpKSB7XG4gICAgICAgICAgICAgIGNvbXBvbmVudC5xdWVyeSA9IHF1ZXJ5XG4gICAgICAgICAgICAgIGNvbXBvbmVudC5sb2FkRGF0YShmYWxzZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaGFzUGFnaW5hdGlvbigpIHtcbiAgICAgIHJldHVybiAhIXRoaXMucGFnaW5hdGVcbiAgICB9LFxuXG4gICAgaGFzTGlzdEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gISEodGhpcy5idXR0b25TY2hlbWFzIHx8IHRoaXMuY3JlYXRhYmxlKVxuICAgIH0sXG5cbiAgICBoYXNFZGl0QnV0dG9ucygpIHtcbiAgICAgIGNvbnN0IHsgbGlzdERhdGEgfSA9IHRoaXNcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGxpc3REYXRhLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgIHRoaXMuZWRpdGFibGUgfHxcbiAgICAgICAgICB0aGlzLmRlbGV0YWJsZSB8fFxuICAgICAgICAgIHRoaXMuZHJhZ2dhYmxlXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaGFzQ2VsbEVkaXRCdXR0b25zKCkge1xuICAgICAgcmV0dXJuICF0aGlzLmlzSW5saW5lZCAmJiB0aGlzLmhhc0VkaXRCdXR0b25zXG4gICAgfSxcblxuICAgIGhhc0V2ZW5Db3VudCgpIHtcbiAgICAgIHJldHVybiAhKHRoaXMubGlzdERhdGEubGVuZ3RoICUgMilcbiAgICB9LFxuXG4gICAgbnVtQ29sdW1ucygpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICh0aGlzLmNvbHVtbnMgPyBPYmplY3Qua2V5cyh0aGlzLmNvbHVtbnMpLmxlbmd0aCA6IDEpICtcbiAgICAgICAgKHRoaXMuaGFzQ2VsbEVkaXRCdXR0b25zID8gMSA6IDApXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXREYXRhUGF0aChpbmRleCkge1xuICAgICAgcmV0dXJuIGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIGluZGV4KVxuICAgIH0sXG5cbiAgICBnZXRFZGl0UGF0aChpdGVtLCBpbmRleCkge1xuICAgICAgaWYgKHRoaXMuZWRpdGFibGUpIHtcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLmdldEl0ZW1JZCh0aGlzLnNjaGVtYSwgaXRlbSwgaW5kZXgpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgZ2V0Vmlld0VkaXRQYXRoKHRoaXMuc2NoZW1hLCBpZCwgdGhpcy5jb250ZXh0KSB8fFxuICAgICAgICAgIGAke3RoaXMucGF0aH0vJHtpZH1gXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcblxuICAgIGdldENlbGxDbGFzcyhjb2x1bW4pIHtcbiAgICAgIHJldHVybiBgZGl0by1jZWxsLSR7aHlwaGVuYXRlKGNvbHVtbi5uYW1lKX1gXG4gICAgfSxcblxuICAgIGdldENvbnRleHQoaXRlbSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICBkYXRhOiBpdGVtLFxuICAgICAgICB2YWx1ZTogaXRlbSxcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIGRhdGFQYXRoOiB0aGlzLmdldERhdGFQYXRoKGluZGV4KVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb25GaWx0ZXJFcnJvcnMoZXJyb3JzKSB7XG4gICAgICBjb25zdCBmaWx0ZXJzRGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCAnJGZpbHRlcnMnKVxuICAgICAgY29uc3QgcGFuZWwgPSB0aGlzLnNjaGVtYUNvbXBvbmVudC5nZXRQYW5lbEJ5RGF0YVBhdGgoZmlsdGVyc0RhdGFQYXRoKVxuICAgICAgaWYgKHBhbmVsKSB7XG4gICAgICAgIHBhbmVsLnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgdHJ1ZSlcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgYXN5bmMgcHJvY2Vzc1NjaGVtYShcbiAgICBhcGksXG4gICAgc2NoZW1hLFxuICAgIG5hbWUsXG4gICAgcm91dGVzLFxuICAgIGxldmVsLFxuICAgIG5lc3RlZCA9IGZhbHNlLFxuICAgIGZsYXR0ZW4gPSBmYWxzZSxcbiAgICBwcm9jZXNzID0gbnVsbFxuICApIHtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICByZXNvbHZlU2NoZW1hQ29tcG9uZW50KHNjaGVtYSksXG4gICAgICByZXNvbHZlU2NoZW1hQ29tcG9uZW50cyhzY2hlbWEuY29sdW1ucyksXG4gICAgICBTb3VyY2VNaXhpbi5wcm9jZXNzU2NoZW1hKFxuICAgICAgICBhcGksXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgcm91dGVzLFxuICAgICAgICBsZXZlbCxcbiAgICAgICAgbmVzdGVkLFxuICAgICAgICBmbGF0dGVuLFxuICAgICAgICBwcm9jZXNzXG4gICAgICApXG4gICAgXSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWxpc3Qge1xuICAkc2VsZjogJjtcblxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgJl9faGVhZGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBwYWRkaW5nLWJvdHRvbTogJGNvbnRlbnQtcGFkZGluZy1oYWxmO1xuICAgIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gICAgJjplbXB0eSB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cblxuICAgIC5kaXRvLXNjb3BlcyxcbiAgICAuZGl0by1wYWdpbmF0aW9uIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4OiAwIDEgYXV0bztcbiAgICAgIG1pbi13aWR0aDogMDtcbiAgICB9XG4gIH1cblxuICAmLmRpdG8tc2luZ2xlIHtcbiAgICAvLyBTbyB0aGF0IGxpc3QgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IHRvIHRoZSBib3R0b206XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50O1xuICAgIGhlaWdodDogMTAwJTtcblxuICAgIC8vIE1ha2Ugc2luZ2xlIGxpc3QgaGVhZGVyLCBuYXZpZ2F0aW9uIGFuZCBidXR0b25zIHN0aWNreSB0byB0aGUgdG9wIGFuZFxuICAgIC8vIGJvdHRvbTpcbiAgICAjeyRzZWxmfV9faGVhZGVyIHtcbiAgICAgIHBvc2l0aW9uOiBzdGlja3k7XG4gICAgICB0b3A6IDA7XG4gICAgICBtYXJnaW4tdG9wOiAtJGNvbnRlbnQtcGFkZGluZztcbiAgICAgIHBhZGRpbmctdG9wOiAkY29udGVudC1wYWRkaW5nO1xuICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZDtcbiAgICAgIHotaW5kZXg6IDE7XG5cbiAgICAgICsgLmRpdG8tdGFibGUge1xuICAgICAgICAuZGl0by10YWJsZS1oZWFkIHtcbiAgICAgICAgICBwb3NpdGlvbjogc3RpY2t5O1xuICAgICAgICAgIHRvcDogY2FsYygkaW5wdXQtaGVpZ2h0ICsgJGNvbnRlbnQtcGFkZGluZyArICRjb250ZW50LXBhZGRpbmctaGFsZik7XG4gICAgICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZDtcbiAgICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbkRpdG9MYWJlbC5kaXRvLWxhYmVsLWNvbXBvbmVudChcbiAgOmxhYmVsPVwidmFsdWVcIlxuICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2xhYmVsJywge1xuICBleGNsdWRlVmFsdWU6IHRydWUsXG4gIGdlbmVyYXRlTGFiZWw6IGZhbHNlXG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLmRpdG8tbGFiZWwtY29tcG9uZW50IHtcbiAgZGlzcGxheTogZmxleDtcbiAgaGVpZ2h0OiAyZW07XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLW1hcmt1cCg6aWQ9XCJkYXRhUGF0aFwiKVxuICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy10b29sYmFyKFxuICAgIHYtaWY9XCJncm91cGVkQnV0dG9ucy5sZW5ndGggPiAwXCJcbiAgKVxuICAgIC5kaXRvLWJ1dHRvbi1ncm91cChcbiAgICAgIHYtZm9yPVwiYnV0dG9ucyBpbiBncm91cGVkQnV0dG9uc1wiXG4gICAgKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWZvcj1cInsgbmFtZSwgaWNvbiwgaXNBY3RpdmUsIG9uQ2xpY2sgfSBpbiBidXR0b25zXCJcbiAgICAgICAgOmtleT1cIm5hbWVcIlxuICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IGlzQWN0aXZlIH1cIlxuICAgICAgICBAY2xpY2s9XCJvbkNsaWNrXCJcbiAgICAgIClcbiAgICAgICAgSWNvbig6bmFtZT1cImljb25cIilcbiAgRWRpdG9yQ29udGVudC5kaXRvLW1hcmt1cC1lZGl0b3IoXG4gICAgcmVmPVwiZWRpdG9yXCJcbiAgICA6ZWRpdG9yPVwiZWRpdG9yXCJcbiAgICA6c3R5bGU9XCJzdHlsZXNcIlxuICApXG4gIC5kaXRvLXJlc2l6ZShcbiAgICB2LWlmPVwicmVzaXphYmxlXCJcbiAgICBAbW91c2Vkb3duLnN0b3AucHJldmVudD1cIm9uRHJhZ1Jlc2l6ZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IEVkaXRvciwgRWRpdG9yQ29udGVudCwgTWFyaywgZ2V0TWFya0F0dHJpYnV0ZXMgfSBmcm9tICdAdGlwdGFwL3Z1ZS0zJ1xuLy8gaW1wb3J0IHsgdG9nZ2xlTWFyayB9IGZyb20gJ3RpcHRhcC1jb21tYW5kcydcbi8vIEVzc2VudGlhbHM6XG5pbXBvcnQgeyBEb2N1bWVudCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWRvY3VtZW50J1xuaW1wb3J0IHsgVGV4dCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRleHQnXG4vLyBNYXJrczpcbmltcG9ydCB7IEJvbGQgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1ib2xkJ1xuaW1wb3J0IHsgQ29kZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWNvZGUnXG5pbXBvcnQgeyBJdGFsaWMgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1pdGFsaWMnXG5pbXBvcnQgeyBMaW5rIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tbGluaydcbmltcG9ydCB7IFN0cmlrZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXN0cmlrZSdcbmltcG9ydCB7IFN1YnNjcmlwdCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXN1YnNjcmlwdCdcbmltcG9ydCB7IFN1cGVyc2NyaXB0IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tc3VwZXJzY3JpcHQnXG5pbXBvcnQgeyBVbmRlcmxpbmUgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi11bmRlcmxpbmUnXG4vLyBOb2RlczpcbmltcG9ydCB7IEJsb2NrcXVvdGUgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1ibG9ja3F1b3RlJ1xuaW1wb3J0IHsgQ29kZUJsb2NrIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tY29kZS1ibG9jaydcbmltcG9ydCB7IEhhcmRCcmVhayB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWhhcmQtYnJlYWsnXG5pbXBvcnQgeyBIZWFkaW5nIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taGVhZGluZydcbmltcG9ydCB7IFBhcmFncmFwaCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXBhcmFncmFwaCdcbmltcG9ydCB7IEhvcml6b250YWxSdWxlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taG9yaXpvbnRhbC1ydWxlJ1xuaW1wb3J0IHsgT3JkZXJlZExpc3QgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1vcmRlcmVkLWxpc3QnXG5pbXBvcnQgeyBCdWxsZXRMaXN0IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tYnVsbGV0LWxpc3QnXG5pbXBvcnQgeyBMaXN0SXRlbSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWxpc3QtaXRlbSdcbi8vIEZvb3Rub3RlczpcbmltcG9ydCB7IEZvb3Rub3RlcywgRm9vdG5vdGVSZWZlcmVuY2UsIEZvb3Rub3RlIH0gZnJvbSAndGlwdGFwLWZvb3Rub3Rlcydcbi8vIFRPRE86XG4vLyBpbXBvcnQgeyBJbWFnZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWltYWdlJ1xuLy8gaW1wb3J0IHsgTWVudGlvbiB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLW1lbnRpb24nXG4vLyBpbXBvcnQgeyBDb2RlQmxvY2tIaWdobGlnaHQgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1jb2RlLWJsb2NrLWhpZ2hsaWdodCdcbi8vIGltcG9ydCB7IFRhYmxlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFibGUnXG4vLyBpbXBvcnQgeyBUYWJsZUNlbGwgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YWJsZS1jZWxsJ1xuLy8gaW1wb3J0IHsgVGFibGVIZWFkZXIgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YWJsZS1oZWFkZXInXG4vLyBpbXBvcnQgeyBUYWJsZU5vZGVzIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFibGUtbm9kZXMnXG4vLyBpbXBvcnQgeyBUYWJsZVJvdyB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhYmxlLXJvdydcbi8vIGltcG9ydCB7IFRhc2tMaXN0IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFzay1saXN0J1xuLy8gaW1wb3J0IHsgVGFza0l0ZW0gfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YXNrLWl0ZW0nXG4vLyBUb29sczpcbmltcG9ydCB7IEhpc3RvcnkgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1oaXN0b3J5J1xuXG5pbXBvcnQgeyBJY29uIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5pbXBvcnQgeyBpc0FycmF5LCBpc09iamVjdCwgaHlwaGVuYXRlLCBkZWJvdW5jZSwgY2FtZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ21hcmt1cCcsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuICBjb21wb25lbnRzOiB7XG4gICAgRWRpdG9yQ29udGVudCxcbiAgICBJY29uXG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZWRpdG9yOiBudWxsLFxuICAgICAgaGVpZ2h0OiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGluZXMgfHwgMTBcbiAgICB9LFxuXG4gICAgaGFyZEJyZWFrKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5zY2hlbWEuaGFyZEJyZWFrXG4gICAgfSxcblxuICAgIHN0eWxlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQgfHwgYGNhbGMoJHt0aGlzLmxpbmVzfWVtICogdmFyKC0tbGluZS1oZWlnaHQpKWBcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbWFya0J1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCdtYXJrcycsIHtcbiAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgaXRhbGljOiB0cnVlLFxuICAgICAgICB1bmRlcmxpbmU6IHRydWUsXG4gICAgICAgIHN0cmlrZTogdHJ1ZSxcbiAgICAgICAgc21hbGw6IHRydWUsXG4gICAgICAgIGNvZGU6IHRydWUsXG4gICAgICAgIHN1YnNjcmlwdDogdHJ1ZSxcbiAgICAgICAgc3VwZXJzY3JpcHQ6IHRydWUsXG4gICAgICAgIGxpbms6IHtcbiAgICAgICAgICBvbkNsaWNrOiBlZGl0b3IgPT4gdGhpcy5vbkNsaWNrTGluayhlZGl0b3IpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGJhc2ljTm9kZUJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCdub2RlcycsIHtcbiAgICAgICAgcGFyYWdyYXBoOiB7XG4gICAgICAgICAgY29tbWFuZDogJ3NldFBhcmFncmFwaCdcbiAgICAgICAgfSxcbiAgICAgICAgaGVhZGluZzoge1xuICAgICAgICAgIGF0dHJpYnV0ZTogJ2xldmVsJyxcbiAgICAgICAgICB2YWx1ZXM6IFsxLCAyLCAzLCA0LCA1LCA2XVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhZHZhbmNlZE5vZGVCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygnbm9kZXMnLCB7XG4gICAgICAgIGJ1bGxldExpc3Q6IHRydWUsXG4gICAgICAgIG9yZGVyZWRMaXN0OiB0cnVlLFxuICAgICAgICBibG9ja3F1b3RlOiB0cnVlLFxuICAgICAgICBjb2RlQmxvY2s6IHRydWVcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHRvb2xCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygndG9vbHMnLCB7XG4gICAgICAgIHVuZG86IHRydWUsXG4gICAgICAgIHJlZG86IHRydWUsXG4gICAgICAgIGZvb3Rub3Rlczoge1xuICAgICAgICAgIGNvbW1hbmQ6ICdhZGRGb290bm90ZSdcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZ3JvdXBlZEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB0aGlzLm1hcmtCdXR0b25zLFxuICAgICAgICB0aGlzLmJhc2ljTm9kZUJ1dHRvbnMsXG4gICAgICAgIHRoaXMuYWR2YW5jZWROb2RlQnV0dG9ucyxcbiAgICAgICAgdGhpcy50b29sQnV0dG9uc1xuICAgICAgXS5maWx0ZXIoYnV0dG9ucyA9PiBidXR0b25zLmxlbmd0aCA+IDApXG4gICAgfSxcblxuICAgIHBhcnNlT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByZXNlcnZlV2hpdGVzcGFjZToge1xuICAgICAgICAgICdjb2xsYXBzZSc6IGZhbHNlLFxuICAgICAgICAgICdwcmVzZXJ2ZSc6IHRydWUsXG4gICAgICAgICAgJ3ByZXNlcnZlLWFsbCc6ICdmdWxsJ1xuICAgICAgICB9W3RoaXMud2hpdGVzcGFjZV1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZWRpdG9yT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVkaXRhYmxlOiAhdGhpcy5yZWFkeW9ubHksXG4gICAgICAgIGF1dG9Gb2N1czogdGhpcy5hdXRvZm9jdXMsXG4gICAgICAgIGRpc2FibGVJbnB1dFJ1bGVzOiAhdGhpcy5lbmFibGVSdWxlcy5pbnB1dCxcbiAgICAgICAgZGlzYWJsZVBhc3RlUnVsZXM6ICF0aGlzLmVuYWJsZVJ1bGVzLnBhc3RlLFxuICAgICAgICBwYXJzZU9wdGlvbnM6IHRoaXMucGFyc2VPcHRpb25zXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlc2l6YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Jlc2l6YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgd2hpdGVzcGFjZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3doaXRlc3BhY2UnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnY29sbGFwc2UnXG4gICAgICAvLyBQb3NzaWJsZSB2YWx1ZXMgYXJlOiAnY29sbGFwc2UnLCAncHJlc2VydmUnLCAncHJlc2VydmUtYWxsJ1xuICAgIH0pLFxuXG4gICAgZW5hYmxlUnVsZXM6IGdldFNjaGVtYUFjY2Vzc29yKCdlbmFibGVSdWxlcycsIHtcbiAgICAgIHR5cGU6IFtPYmplY3QsIEJvb2xlYW5dLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZW5hYmxlUnVsZXMpIHtcbiAgICAgICAgcmV0dXJuIGlzT2JqZWN0KGVuYWJsZVJ1bGVzKVxuICAgICAgICAgID8gZW5hYmxlUnVsZXNcbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgaW5wdXQ6ICEhZW5hYmxlUnVsZXMsXG4gICAgICAgICAgICAgIHBhc3RlOiAhIWVuYWJsZVJ1bGVzXG4gICAgICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHJlYWR5b25seTogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnLFxuICAgIGF1dG9mb2N1czogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnLFxuICAgIGVuYWJsZVJ1bGVzOiAndXBkYXRlRWRpdG9yT3B0aW9ucydcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIGxldCBpZ25vcmVXYXRjaCA9IGZhbHNlXG5cbiAgICBjb25zdCBvbkZvY3VzID0gKCkgPT4gdGhpcy5vbkZvY3VzKClcblxuICAgIGNvbnN0IG9uQmx1ciA9ICgpID0+IHtcbiAgICAgIHRoaXMub25CbHVyKClcbiAgICAgIHVwZGF0ZVZhbHVlKClcbiAgICB9XG5cbiAgICBjb25zdCBvblVwZGF0ZSA9ICgpID0+IHtcbiAgICAgIHNldFZhbHVlRGVib3VuY2VkKClcbiAgICAgIHRoaXMub25JbnB1dCgpXG4gICAgfVxuXG4gICAgY29uc3Qgc2V0VmFsdWVEZWJvdW5jZWQgPSBkZWJvdW5jZSgoKSA9PiB7XG4gICAgICBpZ25vcmVXYXRjaCA9IHRydWVcbiAgICAgIHVwZGF0ZVZhbHVlKClcbiAgICB9LCAxMDApXG5cbiAgICBjb25zdCB1cGRhdGVWYWx1ZSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmVkaXRvci5nZXRIVE1MKClcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5oYXJkQnJlYWtcbiAgICAgICAgPyBjb250ZW50LnJlcGxhY2UoL148cD4oLio/KTxcXC9wPiQvcywgJyQxJylcbiAgICAgICAgOiBjb250ZW50XG4gICAgICBpZiAodmFsdWUgIT09IHRoaXMudmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gICAgICAgIGlmICghdGhpcy5mb2N1c2VkKSB7XG4gICAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLiR3YXRjaCgndmFsdWUnLCB2YWx1ZSA9PiB7XG4gICAgICBpZiAoaWdub3JlV2F0Y2gpIHtcbiAgICAgICAgaWdub3JlV2F0Y2ggPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY29udGVudCA9IHRoaXMuaGFyZEJyZWFrXG4gICAgICAgICAgPyBgPHA+JHt2YWx1ZX08L3A+YFxuICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgdGhpcy5lZGl0b3IuY29tbWFuZHMuc2V0Q29udGVudChjb250ZW50LCBmYWxzZSwgdGhpcy5wYXJzZU9wdGlvbnMpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuZWRpdG9yID0gbmV3IEVkaXRvcih7XG4gICAgICAuLi50aGlzLmVkaXRvck9wdGlvbnMsXG4gICAgICBvbkZvY3VzLFxuICAgICAgb25CbHVyLFxuICAgICAgb25VcGRhdGUsXG4gICAgICBleHRlbnNpb25zOiB0aGlzLmdldEV4dGVuc2lvbnMoKSxcbiAgICAgIGNvbnRlbnQ6IHRoaXMudmFsdWUgfHwgJydcbiAgICB9KVxuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICB0aGlzLmVkaXRvci5kZXN0cm95KClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25EcmFnUmVzaXplKGV2ZW50KSB7XG4gICAgICBjb25zdCBnZXRQb2ludCA9ICh7IGNsaWVudFg6IHgsIGNsaWVudFk6IHkgfSkgPT4gKHsgeCwgeSB9KVxuXG4gICAgICBsZXQgcHJldlkgPSBnZXRQb2ludChldmVudCkueVxuICAgICAgbGV0IGhlaWdodCA9IHBhcnNlRmxvYXQoZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLiRyZWZzLmVkaXRvci4kZWwpLmhlaWdodClcblxuICAgICAgY29uc3QgbW91c2Vtb3ZlID0gZXZlbnQgPT4ge1xuICAgICAgICBjb25zdCB7IHkgfSA9IGdldFBvaW50KGV2ZW50KVxuICAgICAgICBoZWlnaHQgKz0geSAtIHByZXZZXG4gICAgICAgIHByZXZZID0geVxuICAgICAgICB0aGlzLmhlaWdodCA9IGAke01hdGgubWF4KGhlaWdodCwgMCl9cHhgXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhhbmRsZXJzID0gdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgICBtb3VzZW1vdmUsXG5cbiAgICAgICAgbW91c2V1cChldmVudCkge1xuICAgICAgICAgIG1vdXNlbW92ZShldmVudClcbiAgICAgICAgICBoYW5kbGVycy5yZW1vdmUoKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICB1cGRhdGVFZGl0b3JPcHRpb25zKCkge1xuICAgICAgdGhpcy5lZGl0b3Iuc2V0T3B0aW9ucyh0aGlzLmVkaXRvck9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIG9uQ2xpY2tMaW5rKGVkaXRvcikge1xuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IGF3YWl0IHRoaXMucm9vdENvbXBvbmVudC5zaG93RGlhbG9nKHtcbiAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgIGhyZWY6IHtcbiAgICAgICAgICAgIHR5cGU6ICd1cmwnLFxuICAgICAgICAgICAgbGFiZWw6ICdMaW5rJyxcbiAgICAgICAgICAgIGF1dG9mb2N1czogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGl0bGU6IHtcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIGxhYmVsOiAnVGl0bGUnXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBidXR0b25zOiB7XG4gICAgICAgICAgY2FuY2VsOiB7fSxcbiAgICAgICAgICBhcHBseTogeyB0eXBlOiAnc3VibWl0JyB9LFxuICAgICAgICAgIHJlbW92ZToge1xuICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgIGNsaWNrKHsgZGlhbG9nQ29tcG9uZW50IH0pIHtcbiAgICAgICAgICAgICAgICBkaWFsb2dDb21wb25lbnQucmVzb2x2ZShudWxsKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkYXRhOiBnZXRNYXJrQXR0cmlidXRlcyh0aGlzLmVkaXRvci5zdGF0ZSwgJ2xpbmsnKVxuICAgICAgfSlcbiAgICAgIGlmIChhdHRyaWJ1dGVzKSB7XG4gICAgICAgIGxldCB7IGhyZWYsIHRpdGxlIH0gPSBhdHRyaWJ1dGVzXG4gICAgICAgIGlmIChocmVmKSB7XG4gICAgICAgICAgLy8gU2VlIGlmIGBocmVmYCBjYW4gYmUgcGFyc2VkIGFzIGEgVVJMLCBhbmQgaWYgbm90LFxuICAgICAgICAgIC8vIHByZWZpeCBpdCB3aXRoIGEgZGVmYXVsdCBwcm90b2NvbC5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmV3IFVSTChocmVmKVxuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgaHJlZiA9IGBodHRwczovLyR7aHJlZn1gXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVkaXRvci5jb21tYW5kcy5zZXRMaW5rKHsgaHJlZiwgdGl0bGUgfSlcbiAgICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlcyA9PT0gbnVsbCkge1xuICAgICAgICBlZGl0b3IuY29tbWFuZHMudW5zZXRMaW5rKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0RXh0ZW5zaW9ucygpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFya3MgPSB7fSxcbiAgICAgICAgbm9kZXMgPSB7fSxcbiAgICAgICAgdG9vbHMgPSB7fVxuICAgICAgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gW1xuICAgICAgICAvLyBFc3NlbnRpYWxzOlxuICAgICAgICB0b29scy5mb290bm90ZXNcbiAgICAgICAgICA/IERvY3VtZW50LmV4dGVuZCh7IGNvbnRlbnQ6ICdibG9jaysgZm9vdG5vdGVzPycgfSlcbiAgICAgICAgICA6IERvY3VtZW50LFxuXG4gICAgICAgIFRleHQsXG4gICAgICAgIFBhcmFncmFwaCwgLy8gYnV0dG9uIGNhbiBiZSBjb250cm9sbGVkLCBidXQgbm9kZSBuZWVkcyB0byBiZSBvbi5cblxuICAgICAgICAvLyBNYXJrczogYHNjaGVtYS5tYXJrc2BcbiAgICAgICAgbWFya3MuYm9sZCAmJiBCb2xkLFxuICAgICAgICBtYXJrcy5pdGFsaWMgJiYgSXRhbGljLFxuICAgICAgICBtYXJrcy51bmRlcmxpbmUgJiYgVW5kZXJsaW5lLFxuICAgICAgICBtYXJrcy5zdHJpa2UgJiYgU3RyaWtlLFxuICAgICAgICBtYXJrcy5zbWFsbCAmJiBTbWFsbCxcbiAgICAgICAgbWFya3MuY29kZSAmJiBDb2RlLFxuICAgICAgICBtYXJrcy5zdWJzY3JpcHQgJiYgU3VwZXJzY3JpcHQsXG4gICAgICAgIG1hcmtzLnN1cGVyc2NyaXB0ICYmIFN1YnNjcmlwdCxcbiAgICAgICAgbWFya3MubGluayAmJiBMaW5rV2l0aFRpdGxlLFxuXG4gICAgICAgIC8vIE5vZGVzOiBgc2NoZW1hLm5vZGVzYFxuICAgICAgICBub2Rlcy5ibG9ja3F1b3RlICYmIEJsb2NrcXVvdGUsXG4gICAgICAgIG5vZGVzLmNvZGVCbG9jayAmJiBDb2RlQmxvY2ssXG4gICAgICAgIG5vZGVzLmhlYWRpbmcgJiYgSGVhZGluZy5jb25maWd1cmUoeyBsZXZlbHM6IG5vZGVzLmhlYWRpbmcgfSksXG4gICAgICAgIG5vZGVzLmhvcml6b250YWxSdWxlICYmIEhvcml6b250YWxSdWxlLFxuICAgICAgICAobm9kZXMub3JkZXJlZExpc3QgfHwgbm9kZXMuYnVsbGV0TGlzdCkgJiYgTGlzdEl0ZW0sXG4gICAgICAgIG5vZGVzLmJ1bGxldExpc3QgJiYgQnVsbGV0TGlzdCxcbiAgICAgICAgbm9kZXMub3JkZXJlZExpc3QgJiYgT3JkZXJlZExpc3QsXG5cbiAgICAgICAgLy8gRm9vdG5vdGVzOlxuICAgICAgICAuLi4odG9vbHMuZm9vdG5vdGVzID8gW0Zvb3Rub3RlcywgRm9vdG5vdGUsIEZvb3Rub3RlUmVmZXJlbmNlXSA6IFtdKSxcblxuICAgICAgICAvLyBUT0RPOlxuICAgICAgICAvLyBub2Rlcy50b2RvTGlzdCAmJiBUb2RvSXRlbSxcbiAgICAgICAgLy8gbm9kZXMudG9kb0xpc3QgJiYgVG9kb0xpc3QsXG5cbiAgICAgICAgLy8gVG9vbHM6IGBzY2hlbWEudG9vbHNgXG4gICAgICAgIHRvb2xzLmhpc3RvcnkgJiYgSGlzdG9yeSxcblxuICAgICAgICBIYXJkQnJlYWsuZXh0ZW5kKHtcbiAgICAgICAgICBhZGRLZXlib2FyZFNob3J0Y3V0czogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2V0SGFyZEJyZWFrID0gKCkgPT4gdGhpcy5lZGl0b3IuY29tbWFuZHMuc2V0SGFyZEJyZWFrKClcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICdNb2QtRW50ZXInOiBzZXRIYXJkQnJlYWssXG4gICAgICAgICAgICAgICdTaGlmdC1FbnRlcic6IHNldEhhcmRCcmVhayxcbiAgICAgICAgICAgICAgLi4uKHRoaXMuaGFyZEJyZWFrID8geyBFbnRlcjogc2V0SGFyZEJyZWFrIH0gOiBudWxsKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIF0uZmlsdGVyKGV4dGVuc2lvbiA9PiAhIWV4dGVuc2lvbilcbiAgICB9LFxuXG4gICAgZ2V0QnV0dG9ucyhzZXR0aW5nc05hbWUsIGRlc2NyaXB0aW9ucykge1xuICAgICAgY29uc3QgbGlzdCA9IFtdXG4gICAgICBjb25zdCB7IGNvbW1hbmRzIH0gPSB0aGlzLmVkaXRvclxuXG4gICAgICBjb25zdCBhZGRCdXR0b24gPSAoeyBuYW1lLCBpY29uLCBjb21tYW5kLCBhdHRyaWJ1dGVzLCBvbkNsaWNrIH0pID0+IHtcbiAgICAgICAgbGlzdC5wdXNoKHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGljb24sXG4gICAgICAgICAgaXNBY3RpdmU6IHRoaXMuZWRpdG9yLmlzQWN0aXZlKG5hbWUsIGF0dHJpYnV0ZXMpLFxuICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbW1hbmQgPz89XG4gICAgICAgICAgICAgIG5hbWUgaW4gY29tbWFuZHNcbiAgICAgICAgICAgICAgICA/IG5hbWVcbiAgICAgICAgICAgICAgICA6IGB0b2dnbGUke2NhbWVsaXplKG5hbWUsIHRydWUpfWBcbiAgICAgICAgICAgIGlmIChjb21tYW5kIGluIGNvbW1hbmRzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFwcGx5ID0gYXR0cmlidXRlcyA9PlxuICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yLmNoYWluKClbY29tbWFuZF0oYXR0cmlidXRlcykuZm9jdXMoKS5ydW4oKVxuICAgICAgICAgICAgICBvbkNsaWNrXG4gICAgICAgICAgICAgICAgPyBvbkNsaWNrKHRoaXMuZWRpdG9yLCBhdHRyaWJ1dGVzKVxuICAgICAgICAgICAgICAgIDogYXBwbHkoYXR0cmlidXRlcylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5zY2hlbWFbc2V0dGluZ3NOYW1lXVxuICAgICAgaWYgKHNldHRpbmdzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW25hbWUsIGRlc2NyaXB0aW9uXSBvZiBPYmplY3QuZW50cmllcyhkZXNjcmlwdGlvbnMpKSB7XG4gICAgICAgICAgY29uc3Qgc2V0dGluZ05hbWUgPSBbJ3VuZG8nLCAncmVkbyddLmluY2x1ZGVzKG5hbWUpID8gJ2hpc3RvcnknIDogbmFtZVxuICAgICAgICAgIGNvbnN0IHNldHRpbmcgPSBzZXR0aW5nc1tzZXR0aW5nTmFtZV1cbiAgICAgICAgICBjb25zdCBpY29uID0gaHlwaGVuYXRlKG5hbWUpXG4gICAgICAgICAgaWYgKHNldHRpbmcpIHtcbiAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICBhZGRCdXR0b24oeyBuYW1lLCBpY29uIH0pXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGRlc2NyaXB0aW9uKSkge1xuICAgICAgICAgICAgICBjb25zdCB7IGNvbW1hbmQsIGF0dHJpYnV0ZSwgdmFsdWVzLCBvbkNsaWNrIH0gPSBkZXNjcmlwdGlvblxuICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWVzKSAmJiBpc0FycmF5KHNldHRpbmcpKSB7XG4gICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0IGhlYWRpbmcgbGV2ZWwgYXR0cnM6XG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2V0dGluZy5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBhZGRCdXR0b24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb246IGAke2ljb259LSR7dmFsdWV9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7IFthdHRyaWJ1dGVdOiB2YWx1ZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGlja1xuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYWRkQnV0dG9uKHsgbmFtZSwgaWNvbiwgY29tbWFuZCwgb25DbGljayB9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdFxuICAgIH0sXG5cbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICB0aGlzLmVkaXRvci5jb21tYW5kcy5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXJFbGVtZW50KCkge1xuICAgICAgdGhpcy5lZGl0b3IuY29tbWFuZHMuYmx1cigpXG4gICAgfVxuICB9XG59KVxuXG5jb25zdCBTbWFsbCA9IE1hcmsuY3JlYXRlKHtcbiAgbmFtZTogJ3NtYWxsJyxcblxuICBwYXJzZUhUTUwoKSB7XG4gICAgcmV0dXJuIFt7IHRhZzogJ3NtYWxsJyB9XVxuICB9LFxuXG4gIHJlbmRlckhUTUwoKSB7XG4gICAgcmV0dXJuIFsnc21hbGwnLCAwXVxuICB9LFxuXG4gIGFkZENvbW1hbmRzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzZXRTbWFsbDpcbiAgICAgICAgYXR0cmlidXRlcyA9PlxuICAgICAgICAoeyBjb21tYW5kcyB9KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbW1hbmRzLnNldE1hcmsodGhpcy5uYW1lLCBhdHRyaWJ1dGVzKVxuICAgICAgICB9LFxuICAgICAgdG9nZ2xlU21hbGw6XG4gICAgICAgIGF0dHJpYnV0ZXMgPT5cbiAgICAgICAgKHsgY29tbWFuZHMgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiBjb21tYW5kcy50b2dnbGVNYXJrKHRoaXMubmFtZSwgYXR0cmlidXRlcylcbiAgICAgICAgfSxcbiAgICAgIHVuc2V0U21hbGw6XG4gICAgICAgICgpID0+XG4gICAgICAgICh7IGNvbW1hbmRzIH0pID0+IHtcbiAgICAgICAgICByZXR1cm4gY29tbWFuZHMudW5zZXRNYXJrKHRoaXMubmFtZSlcbiAgICAgICAgfVxuICAgIH1cbiAgfVxufSlcblxuY29uc3QgTGlua1dpdGhUaXRsZSA9IExpbmsuZXh0ZW5kKHtcbiAgaW5jbHVzaXZlOiBmYWxzZSxcbiAgc2NoZW1hOiB7XG4gICAgYXR0cnM6IHtcbiAgICAgIGhyZWY6IHtcbiAgICAgICAgZGVmYXVsdDogbnVsbFxuICAgICAgfSxcbiAgICAgIHRpdGxlOiB7XG4gICAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcGFyc2VIVE1MKCkge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAge1xuICAgICAgICAgIHRhZzogJ2EnLFxuICAgICAgICAgIGdldEF0dHJzOiBlbGVtZW50ID0+ICh7XG4gICAgICAgICAgICBocmVmOiBlbGVtZW50LmdldEF0dHJpYnV0ZSgnaHJlZicpLFxuICAgICAgICAgICAgdGl0bGU6IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCd0aXRsZScpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0sXG5cbiAgICByZW5kZXJIVE1MKG5vZGUpIHtcbiAgICAgIHJldHVybiBbJ2EnLCBub2RlLmF0dHJzLCAwXVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLW1hcmt1cCB7XG4gIEBleHRlbmQgJWlucHV0O1xuXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAuUHJvc2VNaXJyb3Ige1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBvdXRsaW5lOiBub25lO1xuICB9XG5cbiAgLmRpdG8tbWFya3VwLWVkaXRvciB7XG4gICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICAgIG1hcmdpbi10b3A6ICRpbnB1dC1wYWRkaW5nLXZlcjtcbiAgICAvLyBNb3ZlIHBhZGRpbmcgXCJpbnNpZGVcIiBlZGl0b3IgdG8gY29ycmVjdGx5IHBvc2l0aW9uIHNjcm9sbGJhclxuICAgIG1hcmdpbi1yaWdodDogLSRpbnB1dC1wYWRkaW5nLWhvcjtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkaW5wdXQtcGFkZGluZy1ob3I7XG4gIH1cblxuICAuZGl0by1idXR0b25zLXRvb2xiYXIge1xuICAgIG1hcmdpbjogMDtcbiAgfVxuXG4gIGgxLFxuICBoMixcbiAgaDMsXG4gIHAsXG4gIHVsLFxuICBvbCxcbiAgcHJlLFxuICBibG9ja3F1b3RlIHtcbiAgICBtYXJnaW46IDFyZW0gMDtcblxuICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICB9XG5cbiAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB9XG4gIH1cblxuICBoMSxcbiAgaDIsXG4gIGgzIHtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgfVxuXG4gIGgxIHtcbiAgICBmb250LXNpemU6IDEuNHJlbTtcbiAgfVxuXG4gIGgyIHtcbiAgICBmb250LXNpemU6IDEuMnJlbTtcbiAgfVxuXG4gIHVsIHtcbiAgICBsaXN0LXN0eWxlOiBkaXNjO1xuICB9XG5cbiAgY29kZSB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1tb25vO1xuICB9XG5cbiAgcHJlIHtcbiAgICBwYWRkaW5nOiAwLjdyZW0gMXJlbTtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3ItZGFya2VyO1xuICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG4gICAgb3ZlcmZsb3cteDogYXV0bztcblxuICAgIGNvZGUge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICB9XG5cbiAgcCBjb2RlIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgcGFkZGluZzogMCAwLjNyZW07XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXI7XG4gIH1cblxuICBhIHtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgY29sb3I6IGJsdWU7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gIH1cblxuICB1bCxcbiAgb2wge1xuICAgIHBhZGRpbmctbGVmdDogMnJlbTtcbiAgfVxuXG4gIGxpIHtcbiAgICAmID4gcCxcbiAgICAmID4gb2wsXG4gICAgJiA+IHVsIHtcbiAgICAgIG1hcmdpbjogMDtcbiAgICB9XG4gIH1cblxuICBibG9ja3F1b3RlIHtcbiAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkICRjb2xvci1saWdodGVyO1xuICAgIHBhZGRpbmctbGVmdDogMWVtO1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcblxuICAgIHAge1xuICAgICAgbWFyZ2luOiAwO1xuICAgIH1cbiAgfVxuXG4gIG9sLmZvb3Rub3RlcyB7XG4gICAgbWFyZ2luLXRvcDogMWVtO1xuICAgIHBhZGRpbmc6IDFlbSAwO1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogZGVjaW1hbDtcbiAgICBwYWRkaW5nLWxlZnQ6IDJlbTtcblxuICAgICY6aGFzKGxpKSB7XG4gICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJGNvbG9yLWxpZ2h0O1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1tdWx0aXNlbGVjdFxuICAuZGl0by1tdWx0aXNlbGVjdF9faW5uZXJcbiAgICBWdWVNdWx0aXNlbGVjdChcbiAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgdi1tb2RlbD1cInNlbGVjdGVkT3B0aW9uc1wiXG4gICAgICA6Y2xhc3M9YHtcbiAgICAgICAgJ211bHRpc2VsZWN0LS1tdWx0aXBsZSc6IG11bHRpcGxlLFxuICAgICAgICAnbXVsdGlzZWxlY3QtLWxvYWRpbmcnOiBpc0xvYWRpbmcsXG4gICAgICAgICdtdWx0aXNlbGVjdC0taGlnaGxpZ2h0Jzogc2hvd0hpZ2hsaWdodFxuICAgICAgfWBcbiAgICAgIDpzaG93TGFiZWxzPVwiZmFsc2VcIlxuICAgICAgOnBsYWNlaG9sZGVyPVwicGxhY2Vob2xkZXJcIlxuICAgICAgdGFnUGxhY2Vob2xkZXI9XCJQcmVzcyBlbnRlciB0byBhZGQgbmV3IHRhZ1wiXG4gICAgICA6b3B0aW9ucz1cInBvcHVsYXRlICYmIGFjdGl2ZU9wdGlvbnMgfHwgW11cIlxuICAgICAgOmN1c3RvbUxhYmVsPVwiZ2V0TGFiZWxGb3JPcHRpb25cIlxuICAgICAgOnRyYWNrQnk9XCJvcHRpb25WYWx1ZVwiXG4gICAgICA6Z3JvdXBMYWJlbD1cImdyb3VwQnlMYWJlbFwiXG4gICAgICA6Z3JvdXBWYWx1ZXM9XCJncm91cEJ5T3B0aW9uc1wiXG4gICAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgICA6dGFnZ2FibGU9XCJ0YWdnYWJsZVwiXG4gICAgICA6c2VhcmNoYWJsZT1cInNlYXJjaGFibGVcIlxuICAgICAgOmludGVybmFsU2VhcmNoPVwiIXNlYXJjaEZpbHRlclwiXG4gICAgICA6cHJlc2VydmVTZWFyY2g9XCIhIXNlYXJjaEZpbHRlclwiXG4gICAgICA6Y2xlYXJPblNlbGVjdD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgICAgOmNsb3NlT25TZWxlY3Q9XCIhc3RheU9wZW5cIlxuICAgICAgOmxvYWRpbmc9XCJpc0xvYWRpbmdcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICBAb3Blbj1cIm9uT3BlblwiXG4gICAgICBAY2xvc2U9XCJvbkNsb3NlXCJcbiAgICAgIEB0YWc9XCJvbkFkZFRhZ1wiXG4gICAgICBAc2VhcmNoLWNoYW5nZT1cIm9uU2VhcmNoQ2hhbmdlXCJcbiAgICApXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgQGNsaWNrPVwiY2xlYXJcIlxuICAgIClcbiAgLy8tIEVkaXQgYnV0dG9uIGlzIG5ldmVyIGRpc2FibGVkLCBldmVuIGlmIHRoZSBmaWVsZCBpcyBkaXNhYmxlZC5cbiAgRGl0b0VkaXRCdXR0b25zKFxuICAgIHYtaWY9XCJlZGl0YWJsZVwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOmRpc2FibGVkPVwiZmFsc2VcIlxuICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICA6ZWRpdFBhdGg9XCJlZGl0UGF0aFwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4uL21peGlucy9UeXBlTWl4aW4uanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5pbXBvcnQgVnVlTXVsdGlzZWxlY3QgZnJvbSAndnVlLW11bHRpc2VsZWN0J1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGlzQm9vbGVhbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbXVsdGlzZWxlY3QnLCB7XG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG4gIGNvbXBvbmVudHM6IHsgVnVlTXVsdGlzZWxlY3QgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzZWFyY2hlZE9wdGlvbnM6IG51bGwsXG4gICAgICBwb3B1bGF0ZTogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzZWxlY3RlZE9wdGlvbnM6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGVcbiAgICAgICAgICA/ICh0aGlzLnNlbGVjdGVkVmFsdWUgfHwgW10pXG4gICAgICAgICAgICAgIC5tYXAoXG4gICAgICAgICAgICAgICAgLy8gSWYgYW4gb3B0aW9uIGNhbm5vdCBiZSBmb3VuZCwgd2UgbWF5IGJlIGluIHRhZ2dhYmxlIG1vZGUgYW5kXG4gICAgICAgICAgICAgICAgLy8gY2FuIGFkZCBpdC5cbiAgICAgICAgICAgICAgICB2YWx1ZSA9PiAoXG4gICAgICAgICAgICAgICAgICB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHZhbHVlKSB8fCB0aGlzLmFkZFRhZ09wdGlvbih2YWx1ZSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLy8gRmlsdGVyIG91dCBvcHRpb25zIHRoYXQgd2UgY291bGRuJ3QgbWF0Y2guXG4gICAgICAgICAgICAgIC8vIFRPRE86IFNob3VsZCB3ZSBkaXNwbGF5IGFuIGVycm9yIGluc3RlYWQ/XG4gICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRPcHRpb25cbiAgICAgIH0sXG5cbiAgICAgIHNldChvcHRpb24pIHtcbiAgICAgICAgLy8gQ29udmVydCB2YWx1ZSB0byBvcHRpb25zIG9iamVjdCwgc2luY2UgdnVlLW11bHRpc2VsZWN0IGNhbid0IG1hcCB0aGF0XG4gICAgICAgIC8vIGl0c2VsZiB1bmZvcnR1bmF0ZWx5LiBgdHJhY2stYnlgIGlzIHVzZWQgZm9yIDprZXkgbWFwcGluZyBpdCBzZWVtcy5cbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdGhpcy5tdWx0aXBsZVxuICAgICAgICAgID8gKG9wdGlvbiB8fCBbXSkubWFwKHZhbHVlID0+IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24odmFsdWUpKVxuICAgICAgICAgIDogdGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhY3RpdmVPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoZWRPcHRpb25zIHx8IHRoaXMub3B0aW9uc1xuICAgIH0sXG5cbiAgICBtdWx0aXBsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ211bHRpcGxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBzZWFyY2hhYmxlOiBnZXRTY2hlbWFBY2Nlc3Nvcignc2VhcmNoYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgdGFnZ2FibGU6IGdldFNjaGVtYUFjY2Vzc29yKCd0YWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgc3RheU9wZW46IGdldFNjaGVtYUFjY2Vzc29yKCdzdGF5T3BlbicsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgcGxhY2Vob2xkZXIoKSB7XG4gICAgICBsZXQgeyBwbGFjZWhvbGRlciwgc2VhcmNoYWJsZSwgdGFnZ2FibGUgfSA9IHRoaXMuc2NoZW1hXG4gICAgICBpZiAoaXNCb29sZWFuKHBsYWNlaG9sZGVyKSkge1xuICAgICAgICBwbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyID8gdW5kZWZpbmVkIDogbnVsbFxuICAgICAgfVxuICAgICAgcmV0dXJuIHBsYWNlaG9sZGVyID09PSB1bmRlZmluZWRcbiAgICAgICAgPyBzZWFyY2hhYmxlICYmIHRhZ2dhYmxlXG4gICAgICAgICAgPyBgU2VhcmNoIG9yIGFkZCBhICR7dGhpcy5sYWJlbH1gXG4gICAgICAgICAgOiBzZWFyY2hhYmxlXG4gICAgICAgICAgICA/IGBTZWxlY3Qgb3Igc2VhcmNoICR7dGhpcy5sYWJlbH1gXG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICA6IHBsYWNlaG9sZGVyXG4gICAgfSxcblxuICAgIHNob3dIaWdobGlnaHQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc01vdW50ZWQgJiYgdGhpcy4kcmVmcy5lbGVtZW50LnBvaW50ZXJEaXJ0eVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIGlmICh0aGlzLmF1dG9mb2N1cykge1xuICAgICAgLy8gdnVlLW11bHRpc2VsZWN0IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgYXV0b2ZvY3VzIGF0dHJpYnV0ZS4gV2UgbmVlZCB0b1xuICAgICAgLy8gaGFuZGxlIGl0IGhlcmUuXG4gICAgICB0aGlzLmZvY3VzKClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGFkZFRhZ09wdGlvbih0YWcpIHtcbiAgICAgIGlmICh0aGlzLnRhZ2dhYmxlKSB7XG4gICAgICAgIGNvbnN0IHsgb3B0aW9uTGFiZWwsIG9wdGlvblZhbHVlIH0gPSB0aGlzXG4gICAgICAgIGNvbnN0IG9wdGlvbiA9XG4gICAgICAgICAgb3B0aW9uTGFiZWwgJiYgb3B0aW9uVmFsdWVcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIFtvcHRpb25MYWJlbF06IHRhZyxcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBEZWZpbmUgYSBzaW1wbGUgc2NoZW1hIG9wdGlvbiB0byBjb252ZXJ0IHRoZSB0YWcgdmFsdWVcbiAgICAgICAgICAgICAgICAvLyB0byBzb21ldGhpbmcgZWxzZSwgZS5nLiBgdG9UYWc6IHRhZyA9PiB1bmRlcnNjb3JlKHRhZylgXG4gICAgICAgICAgICAgICAgW29wdGlvblZhbHVlXTogdGFnXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogdGFnXG4gICAgICAgIHRoaXMub3B0aW9ucy5wdXNoKG9wdGlvbilcbiAgICAgICAgcmV0dXJuIG9wdGlvblxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICB0aGlzLiRyZWZzLmVsZW1lbnQuYWN0aXZhdGUoKVxuICAgIH0sXG5cbiAgICBibHVyRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJHJlZnMuZWxlbWVudC5kZWFjdGl2YXRlKClcbiAgICB9LFxuXG4gICAgb25PcGVuKCkge1xuICAgICAgdGhpcy5wb3B1bGF0ZSA9IHRydWVcbiAgICB9LFxuXG4gICAgb25DbG9zZSgpIHtcbiAgICAgIC8vIFNpbmNlIHdlIGRvbid0IGZpcmUgYmx1ciBldmVudHMgd2hpbGUgdGhlIG11bHRpc2VsZWN0IGlzIG9wZW4gKHNlZVxuICAgICAgLy8gYmVsb3cpLCB3ZSBuZWVkIHRvIGRvIGl0IGhlcmUsIHdoZW4gaXQncyBhY3R1YWxseSBjbG9zZWQuXG4gICAgICBpZiAodGhpcy5mb2N1c2VkKSB7XG4gICAgICAgIHRoaXMub25CbHVyKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25CbHVyKCkge1xuICAgICAgaWYgKCF0aGlzLiRyZWZzLmVsZW1lbnQuaXNPcGVuKSB7XG4gICAgICAgIFR5cGVNaXhpbi5tZXRob2RzLm9uQmx1ci5jYWxsKHRoaXMpXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uQWRkVGFnKHRhZykge1xuICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5hZGRUYWdPcHRpb24odGFnKVxuICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICB0aGlzLnZhbHVlLnB1c2godGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBvblNlYXJjaENoYW5nZShxdWVyeSkge1xuICAgICAgaWYgKHRoaXMuc2VhcmNoRmlsdGVyKSB7XG4gICAgICAgIGlmIChxdWVyeSkge1xuICAgICAgICAgIC8vIFNldCBgc2VhcmNoZWRPcHRpb25zYCB0byBhbiBlbXB0eSBhcnJheSwgYmVmb3JlIGl0IHdpbGwgYmVcbiAgICAgICAgICAvLyBwb3B1bGF0ZWQgYXN5bmNocm9ub3VzbHkgd2l0aCB0aGUgYWN0dWFsIHJlc3VsdHMuXG4gICAgICAgICAgdGhpcy5zZWFyY2hlZE9wdGlvbnMgPSBbXVxuICAgICAgICAgIHRoaXMuc2VhcmNoZWRPcHRpb25zID0gYXdhaXQgdGhpcy5yZXNvbHZlRGF0YShcbiAgICAgICAgICAgICgpID0+IHRoaXMuc2VhcmNoRmlsdGVyKG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IHF1ZXJ5IH0pKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBDbGVhciBgc2VhcmNoZWRPcHRpb25zYCB3aGVuIHRoZSBxdWVyeSBpcyBjbGVhcmVkLlxuICAgICAgICAgIHRoaXMuc2VhcmNoZWRPcHRpb25zID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcbkBpbXBvcnQgJ3Z1ZS1tdWx0aXNlbGVjdC9kaXN0L3Z1ZS1tdWx0aXNlbGVjdC5jc3MnO1xuXG4kc3Bpbm5lci13aWR0aDogJHNlbGVjdC1hcnJvdy13aWR0aDtcbiR0YWctaWNvbi13aWR0aDogMS44ZW07XG4kdGFnLW1hcmdpbjogMnB4O1xuJHRhZy1wYWRkaW5nOiAzcHg7XG4kdGFnLWxpbmUtaGVpZ2h0OiAxZW07XG5cbi5kaXRvLW11bHRpc2VsZWN0IHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAmX19pbm5lciB7XG4gICAgZmxleDogMTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIH1cblxuICAuZGl0by1lZGl0LWJ1dHRvbnMge1xuICAgIG1hcmdpbi1sZWZ0OiAkZm9ybS1zcGFjaW5nLWhhbGY7XG4gIH1cblxuICAubXVsdGlzZWxlY3Qge1xuICAgICRzZWxmOiBsYXN0LXNlbGVjdG9yKCYpO1xuXG4gICAgLS1pbnB1dC13aWR0aDogMTAwJTtcblxuICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICBtaW4taGVpZ2h0OiBpbmhlcml0O1xuICAgIGNvbG9yOiAkY29sb3ItYmxhY2s7XG5cbiAgICAmLS1tdWx0aXBsZSB7XG4gICAgICAtLWlucHV0LXdpZHRoOiBhdXRvO1xuICAgIH1cblxuICAgICZfX3RhZ3Mge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICAgIG1pbi1oZWlnaHQ6IGluaGVyaXQ7XG4gICAgICBvdmVyZmxvdzogYXV0bztcbiAgICAgIHBhZGRpbmc6IDAgJHNwaW5uZXItd2lkdGggMCAwO1xuICAgICAgLy8gU28gdGFncyBjYW4gZmxvYXQgb24gbXVsdGlwbGUgbGluZXMgYW5kIGhhdmUgcHJvcGVyIG1hcmdpbnM6XG4gICAgICBwYWRkaW5nLWJvdHRvbTogJHRhZy1tYXJnaW47XG5cbiAgICAgIC5kaXRvLWhhcy1lcnJvcnMgJiB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLWVycm9yO1xuICAgICAgfVxuICAgIH1cblxuICAgICZfX3RhZyB7XG4gICAgICBmbG9hdDogbGVmdDtcbiAgICAgIG1hcmdpbjogJHRhZy1tYXJnaW4gMCAwICR0YWctbWFyZ2luO1xuICAgICAgYm9yZGVyLXJhZGl1czogMWVtO1xuICAgICAgcGFkZGluZzogJHRhZy1wYWRkaW5nICR0YWctaWNvbi13aWR0aCAkdGFnLXBhZGRpbmcgMC44ZW07XG4gICAgICBsaW5lLWhlaWdodDogJHRhZy1saW5lLWhlaWdodDtcbiAgICAgIGhlaWdodDogY2FsYygkaW5wdXQtaGVpZ2h0IC0gMiAqICR0YWctcGFkZGluZyk7XG4gICAgfVxuXG4gICAgJl9fdGFncy13cmFwIHtcbiAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgbGluZS1oZWlnaHQ6IDA7XG4gICAgfVxuXG4gICAgJl9fc2luZ2xlLFxuICAgICZfX3BsYWNlaG9sZGVyLFxuICAgICZfX2lucHV0IHtcbiAgICAgIEBpbmNsdWRlIGVsbGlwc2lzO1xuXG4gICAgICBmbGV4OiAxIDAgMCU7XG4gICAgICB3aWR0aDogMDtcbiAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICBtYXJnaW46IDAgMCAxcHggMDtcbiAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xuICAgICAgLy8gU2FkbHksIHZ1ZS1zZWxlY3Qgc2V0cyBzdHlsZT1cInBhZGRpbmc6IC4uLjtcIiBpbiBhZGRpdGlvbiB0byB1c2luZ1xuICAgICAgLy8gY2xhc3Nlcywgc28gYCFpbXBvcnRhbnRgIGlzIG5lY2Vzc2FyeTpcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nICFpbXBvcnRhbnQ7XG4gICAgICAvLyBTbyBpbnB1dCBjYW4gZmxvYXQgbmV4dCB0byB0YWdzIGFuZCBoYXZlIHByb3BlciBtYXJnaW5zIHdpdGhcbiAgICAgIC8vICZfX3RhZ3M6XG4gICAgICBwYWRkaW5nLWJvdHRvbTogMCAhaW1wb3J0YW50O1xuICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICB9XG5cbiAgICAmX19wbGFjZWhvbGRlcixcbiAgICAmX19pbnB1dDo6cGxhY2Vob2xkZXIge1xuICAgICAgY29sb3I6ICRjb2xvci1wbGFjZWhvbGRlcjtcbiAgICB9XG5cbiAgICAmX19wbGFjZWhvbGRlciB7XG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIC8vIEVuZm9yY2UgYWN0dWFsIGxpbmUtaGVpZ2h0IGZvciBwb3NpdGlvbmluZy5cbiAgICAgICAgY29udGVudDogJ1xcMjAwYic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJl9fc2VsZWN0LFxuICAgICZfX3NwaW5uZXIge1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIC8vICRib3JkZXItd2lkdGggdG8gcHJldmVudCBtYXNraW5nIGJvcmRlciB3aXRoICZfX3NwaW5uZXJcbiAgICAgIHRvcDogJGJvcmRlci13aWR0aDtcbiAgICAgIHJpZ2h0OiAkYm9yZGVyLXdpZHRoO1xuICAgICAgYm90dG9tOiAkYm9yZGVyLXdpZHRoO1xuICAgICAgaGVpZ2h0OiBpbmhlcml0O1xuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgfVxuXG4gICAgJl9fc2VsZWN0IHtcbiAgICAgIHdpZHRoOiAkc2VsZWN0LWFycm93LXdpZHRoO1xuXG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBAaW5jbHVkZSBhcnJvdygkc2VsZWN0LWFycm93LXNpemUpO1xuXG4gICAgICAgIGJvdHRvbTogJHNlbGVjdC1hcnJvdy1ib3R0b207XG4gICAgICAgIHJpZ2h0OiAkc2VsZWN0LWFycm93LXJpZ2h0O1xuICAgICAgfVxuICAgIH1cblxuICAgICZfX3NwaW5uZXIge1xuICAgICAgd2lkdGg6ICRzcGlubmVyLXdpZHRoO1xuXG4gICAgICAmOjpiZWZvcmUsXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIC8vIENoYW5nZSB0aGUgd2lkdGggb2YgdGhlIGxvYWRpbmcgc3Bpbm5lclxuICAgICAgICBib3JkZXItd2lkdGg6IDNweDtcbiAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgICAgICAgaW5zZXQ6IDA7XG4gICAgICAgIG1hcmdpbjogYXV0bztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX19vcHRpb24ge1xuICAgICAgJG9wdGlvbjogbGFzdC1zZWxlY3RvcigmKTtcblxuICAgICAgbWluLWhlaWdodDogdW5zZXQ7XG4gICAgICBoZWlnaHQ6IHVuc2V0O1xuICAgICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodDtcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIC8vIEluc3RydWN0aW9uIHRleHQgZm9yIG9wdGlvbnNcbiAgICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmc7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAkdGFnLWxpbmUtaGVpZ2h0O1xuICAgICAgfVxuXG4gICAgICAvLyBPbmx5IHNob3cgdGhlIGhpZ2hsaWdodCBvbmNlIHRoZSBwdWxsZG93biBoYXMgcmVjZWl2ZWQgbW91c2Ugb3JcbiAgICAgIC8vIGtleWJvYXJkIGludGVyYWN0aW9uLCBpbiB3aGljaCBjYXNlIGAmLS1oaWdobGlnaHRgIHdpbGwgYmUgc2V0LFxuICAgICAgLy8gd2hpY2ggaXMgY29udHJvbGxlZCBieSBgcG9pbnRlckRpcnR5YCBpbiB2dWUtbXVsdGlzZWxlY3QuXG4gICAgICAvLyBVbnRpbCB0aGVuLCBjbGVhciB0aGUgaGlnaGxpZ2h0IHN0eWxlLCBidXQgb25seSBpZiBpdCBpc24ndCBhbHNvXG4gICAgICAvLyBkaXNhYmxlZCBvciBzZWxlY3RlZCwgaW4gd2hpY2ggY2FzZSB3ZSB3YW50IHRvIGtlZXAgdGhlIHN0eWxlLlxuICAgICAgQGF0LXJvb3QgI3skc2VsZn06bm90KCN7JHNlbGZ9LS1oaWdobGlnaHQpXG4gICAgICAgICAgI3skb3B0aW9ufTpub3QoI3skb3B0aW9ufS0tZGlzYWJsZWQpOm5vdCgjeyRvcHRpb259LS1zZWxlY3RlZCkge1xuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQ7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgfVxuXG4gICAgICAmLS1oaWdobGlnaHQge1xuICAgICAgICAmOjphZnRlciB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG4gICAgICAgIH1cblxuICAgICAgICBAYXQtcm9vdCAjeyRzZWxmfSN7JHNlbGZ9LS1oaWdobGlnaHQgI3tsYXN0LXNlbGVjdG9yKCYpfSB7XG4gICAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkO1xuICAgICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJi0tc2VsZWN0ZWQge1xuICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQ7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1oaWdobGlnaHQ7XG5cbiAgICAgICAgQGF0LXJvb3QgI3skc2VsZn0jeyRzZWxmfS0taGlnaGxpZ2h0ICYjeyRvcHRpb259LS1oaWdobGlnaHQge1xuICAgICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmLS1kaXNhYmxlZCB7XG4gICAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItZGlzYWJsZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJl9fdGFnIHtcbiAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZDtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgfVxuXG4gICAgJl9fdGFnLWljb24ge1xuICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDFlbTtcbiAgICAgIHdpZHRoOiAkdGFnLWljb24td2lkdGg7XG4gICAgICBtYXJnaW46IDA7XG5cbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgQGV4dGVuZCAlaWNvbi1jbGVhcjtcblxuICAgICAgICBmb250LXNpemU6IDAuOWVtO1xuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWQ7XG4gICAgICB9XG5cbiAgICAgICY6aG92ZXI6OmFmdGVyIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0O1xuICAgICAgfVxuICAgIH1cblxuICAgICZfX3RhZ3MsXG4gICAgJl9fY29udGVudC13cmFwcGVyIHtcbiAgICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIH1cblxuICAgICZfX2NvbnRlbnQtd3JhcHBlciB7XG4gICAgICB6LWluZGV4OiAkei1pbmRleC1wb3B1cDtcbiAgICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgICB9XG5cbiAgICAmOm5vdCgmLS1hYm92ZSkgI3skc2VsZn1fX2NvbnRlbnQtd3JhcHBlciB7XG4gICAgICBtYXJnaW46ICgtJGJvcmRlci13aWR0aCkgMCAwO1xuICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJGJvcmRlci1jb2xvcjtcbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgICB9XG5cbiAgICAmLS1hYm92ZSAjeyRzZWxmfV9fY29udGVudC13cmFwcGVyIHtcbiAgICAgIG1hcmdpbjogMCAwICgtJGJvcmRlci13aWR0aCk7XG4gICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1xuICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xuICAgIH1cblxuICAgICYtLWFjdGl2ZSB7XG4gICAgICAjeyRzZWxmfV9fcGxhY2Vob2xkZXIge1xuICAgICAgICAvLyBEb24ndCB1c2UgYGRpc3BsYXk6IG5vbmVgIHRvIGhpZGUgcGxhY2UtaG9sZGVyLCBhcyB0aGUgbGF5b3V0IHdvdWxkXG4gICAgICAgIC8vIGNvbGxhcHNlLlxuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgIH1cblxuICAgICAgI3skc2VsZn1fX3NpbmdsZSxcbiAgICAgICN7JHNlbGZ9X19pbnB1dCB7XG4gICAgICAgIC8vIFNhZGx5LCB2dWUtc2VsZWN0IHNldHMgYHN0eWxlPVwid2lkdGhcImAgaW4gYWRkaXRpb24gdG8gdXNpbmcgY2xhc3Nlc1xuICAgICAgICAvLyBzbyBgIWltcG9ydGFudGAgaXMgbmVjZXNzYXJ5OlxuICAgICAgICB3aWR0aDogdmFyKC0taW5wdXQtd2lkdGgpICFpbXBvcnRhbnQ7XG4gICAgICB9XG5cbiAgICAgICN7JHNlbGZ9X190YWdzIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkY29sb3ItYWN0aXZlO1xuICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xuICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgIH1cblxuICAgICAgJiN7JHNlbGZ9LS1hYm92ZSB7XG4gICAgICAgICN7JHNlbGZ9X190YWdzIHtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xuICAgICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi0tbG9hZGluZyB7XG4gICAgICAjeyRzZWxmfV9fdGFncyB7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgICAgfVxuXG4gICAgICAjeyRzZWxmfV9fY29udGVudC13cmFwcGVyIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXB1dGVkOiB7XG4gICAgaW5wdXRWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSAhPT0gbnVsbCA/IHRoaXMudmFsdWUgOiAnJ1xuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPVxuICAgICAgICAgIHZhbHVlICE9PSAnJ1xuICAgICAgICAgICAgPyB0aGlzLmlzSW50ZWdlclxuICAgICAgICAgICAgICA/IE51bWJlcih2YWx1ZSlcbiAgICAgICAgICAgICAgOiBwYXJzZUZsb2F0KHZhbHVlKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGlzSW50ZWdlcigpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBzdGVwVmFsdWUoKSB7XG4gICAgICAvLyBEb24ndCBzaG93IHN0ZXBzIGlmIHRoZSBpbnB1dCBpcyBhbHNvIGNsZWFyYWJsZSwgc2luY2UgdGhlIHN0ZXAgYnV0dG9uc1xuICAgICAgLy8gd291bGQgY29sbGlkZSB3aXRoIHRoZSBjbGVhciBidXR0b24uXG4gICAgICByZXR1cm4gdGhpcy5jbGVhcmFibGVcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogdGhpcy5zdGVwID09IG51bGwgJiYgIXRoaXMuaXNJbnRlZ2VyXG4gICAgICAgICAgPyAnYW55J1xuICAgICAgICAgIDogdGhpcy5zdGVwXG4gICAgfSxcblxuICAgIGRlY2ltYWxzOiBnZXRTY2hlbWFBY2Nlc3NvcignZGVjaW1hbHMnLCB7XG4gICAgICB0eXBlOiBOdW1iZXJcbiAgICB9KSxcblxuICAgIHN0ZXA6IGdldFNjaGVtYUFjY2Vzc29yKCdzdGVwJywge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZ2V0KHN0ZXApIHtcbiAgICAgICAgLy8gRm9yIGludGVnZXJzLCByb3VuZCB0aGUgc3RlcHMgdG8gdGhlIG5leHQgYmlnZ2VyIGludGVnZXIgdmFsdWU6XG4gICAgICAgIHJldHVybiB0aGlzLmlzSW50ZWdlciAmJiBzdGVwICE9IG51bGwgPyBNYXRoLmNlaWwoc3RlcCkgOiBzdGVwXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBtaW46IGdldFNjaGVtYUFjY2Vzc29yKCdtaW4nLCB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBnZXQobWluKSB7XG4gICAgICAgIG1pbiA9XG4gICAgICAgICAgbWluID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgncmFuZ2UnLCB7IHR5cGU6IEFycmF5IH0pPy5bMF1cbiAgICAgICAgICAgIDogbWluXG4gICAgICAgIHJldHVybiB0aGlzLmlzSW50ZWdlciAmJiBtaW4gIT0gbnVsbCA/IE1hdGguZmxvb3IobWluKSA6IG1pblxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgbWF4OiBnZXRTY2hlbWFBY2Nlc3NvcignbWF4Jywge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZ2V0KG1heCkge1xuICAgICAgICBtYXggPVxuICAgICAgICAgIG1heCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ3JhbmdlJywgeyB0eXBlOiBBcnJheSB9KT8uWzFdXG4gICAgICAgICAgICA6IG1heFxuICAgICAgICByZXR1cm4gdGhpcy5pc0ludGVnZXIgJiYgbWF4ICE9IG51bGwgPyBNYXRoLmNlaWwobWF4KSA6IG1heFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgcmFuZ2U6IGdldFNjaGVtYUFjY2Vzc29yKCdyYW5nZScsIHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZ2V0KCkge1xuICAgICAgICAvLyBgdGhpcy5taW5gLCBgdGhpcy5tYXhgIGFscmVhZHkgc3VwcG9ydCBgc2NoZW1hLnJhbmdlYCxcbiAgICAgICAgLy8gc28gcmVkaXJlY3QgdGhlcmUuXG4gICAgICAgIGNvbnN0IHsgbWluLCBtYXggfSA9IHRoaXNcbiAgICAgICAgcmV0dXJuIG1pbiAhPSBudWxsICYmIG1heCAhPSBudWxsID8gW21pbiwgbWF4XSA6IHVuZGVmaW5lZFxuICAgICAgfSxcblxuICAgICAgc2V0KHJhbmdlKSB7XG4gICAgICAgIC8vIFByb3ZpZGUgYSBzZXR0ZXIgdGhhdCBkZWxlZ2F0ZXMgdG8gYFt0aGlzLm1pbiwgdGhpcy5tYXhdYCxcbiAgICAgICAgLy8gc2luY2UgdGhvc2UgYWxyZWFkeSBoYW5kbGUgYHNjaGVtYS5yYW5nZWAuXG4gICAgICAgIGlmIChpc0FycmF5KHJhbmdlKSkge1xuICAgICAgICAgIDtbdGhpcy5taW4sIHRoaXMubWF4XSA9IHJhbmdlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRWYWxpZGF0aW9ucygpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25zID0ge31cbiAgICAgIGNvbnN0IHsgcmFuZ2UsIG1pbiwgbWF4LCBkZWNpbWFscywgc3RlcCB9ID0gdGhpc1xuICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLnJhbmdlID0gcmFuZ2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChtaW4gIT0gbnVsbCkge1xuICAgICAgICAgIHZhbGlkYXRpb25zLm1pbiA9IG1pblxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXggIT0gbnVsbCkge1xuICAgICAgICAgIHZhbGlkYXRpb25zLm1heCA9IG1heFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZGVjaW1hbHMgIT0gbnVsbCkge1xuICAgICAgICB2YWxpZGF0aW9ucy5kZWNpbWFscyA9IGRlY2ltYWxzXG4gICAgICB9IGVsc2UgaWYgKHN0ZXApIHtcbiAgICAgICAgY29uc3QgZGVjaW1hbHMgPSAoYCR7c3RlcH1gLnNwbGl0KCcuJylbMV0gfHwgJycpLmxlbmd0aFxuICAgICAgICBpZiAoZGVjaW1hbHMgPiAwKSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMuZGVjaW1hbHMgPSBkZWNpbWFsc1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkYXRpb25zLmludGVnZXIgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzSW50ZWdlcikge1xuICAgICAgICB2YWxpZGF0aW9ucy5pbnRlZ2VyID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbGlkYXRpb25zXG4gICAgfVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuSW5wdXRGaWVsZC5kaXRvLW51bWJlcihcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJlbGVtZW50XCJcbiAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICB0eXBlPVwibnVtYmVyXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIDptaW49XCJtaW5cIlxuICA6bWF4PVwibWF4XCJcbiAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuKVxuICB0ZW1wbGF0ZSgjYWZ0ZXIpXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIEBjbGljay5zdG9wPVwiY2xlYXJcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgTnVtYmVyTWl4aW4gZnJvbSAnLi4vbWl4aW5zL051bWJlck1peGluLmpzJ1xuaW1wb3J0IHsgSW5wdXRGaWVsZCB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcihcbiAgWydudW1iZXInLCAnaW50ZWdlciddLFxuICAvLyBAdnVlL2NvbXBvbmVudFxuICB7XG4gICAgbWl4aW5zOiBbTnVtYmVyTWl4aW5dLFxuICAgIGNvbXBvbmVudHM6IHsgSW5wdXRGaWVsZCB9LFxuICAgIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICAgIHRleHRGaWVsZDogdHJ1ZSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICBpc0ludGVnZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdpbnRlZ2VyJ1xuICAgICAgfVxuICAgIH1cbiAgfVxuKVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLy8gT25seSBzaG93IHNwaW4gYnV0dG9ucyBpZiB0aGUgbnVtYmVyIGNvbXBvbmVudCBkZWZpbmVzIGEgc3RlcCBzaXplLlxuaW5wdXRbdHlwZT0nbnVtYmVyJ106bm90KFtzdGVwXSkge1xuICAmOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxuICAmOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uIHtcbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgbWFyZ2luOiAwO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLW9iamVjdChcbiAgdi1pZj1cImlzUmVhZHlcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4pXG4gIC5kaXRvLW9iamVjdC1jb250ZW50KFxuICAgIHYtaWY9XCJvYmplY3REYXRhXCJcbiAgKVxuICAgIC8vLSBTdXBwb3J0IHRoZSBzYW1lIHJlbmRlcmluZyBvcHRpb25zIGFzIFR5cGVMaXN0OlxuICAgIERpdG9TY2hlbWFJbmxpbmVkKFxuICAgICAgdi1pZj1cImlzSW5saW5lZFwiXG4gICAgICA6bGFiZWw9XCJvYmplY3RMYWJlbFwiXG4gICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBvYmplY3REYXRhLCBjb250ZXh0KVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgIDpkZWxldGFibGU9XCJvYmplY3REYXRhICYmIGRlbGV0YWJsZVwiXG4gICAgICA6ZWRpdGFibGU9XCJvYmplY3REYXRhICYmIGVkaXRhYmxlXCJcbiAgICAgIDplZGl0UGF0aD1cInBhdGhcIlxuICAgICAgOmFjY3VtdWxhdGVkQmFzaXM9XCJhY2N1bXVsYXRlZEJhc2lzXCJcbiAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKG9iamVjdERhdGEpXCJcbiAgICApXG4gICAgY29tcG9uZW50KFxuICAgICAgdi1lbHNlLWlmPVwic2NoZW1hLmNvbXBvbmVudFwiXG4gICAgICA6aXM9XCJzY2hlbWEuY29tcG9uZW50XCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgIClcbiAgICBzcGFuKFxuICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgIHYtaHRtbD1cInJlbmRlcihnZXRDb250ZXh0KCkpXCJcbiAgICApXG4gICAgc3BhbihcbiAgICAgIHYtZWxzZVxuICAgICAgdi1odG1sPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgb2JqZWN0RGF0YSlcIlxuICAgIClcbiAgLy8tIE5PVEU6IGBEaXRvRWRpdEJ1dHRvbnNgIGhlcmUgb25seSBoYW5kbGUgdGhlIGNyZWF0ZSBidXR0b24gb3V0c2lkZSBvZiB0aGVcbiAgLy8tIHNjaGVtYSwgdGhlIGVkaXQgYnV0dG9ucyBpbnNpZGUgYXJlIGhhbmRsZWQgYnkgYERpdG9TY2hlbWFJbmxpbmVkYC5cbiAgRGl0b0VkaXRCdXR0b25zKFxuICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgOnBhdGg9XCJwYXRoXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgU291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvdXJjZU1peGluLmpzJ1xuaW1wb3J0IHsgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdvYmplY3QnLCB7XG4gIG1peGluczogW1NvdXJjZU1peGluXSxcblxuICBnZXRTb3VyY2VUeXBlKHR5cGUpIHtcbiAgICAvLyBObyBuZWVkIGZvciB0cmFuc2Zvcm1hdGlvbiBoZXJlLiBTZWUgVHlwZVRyZWVMaXN0IGZvciBkZXRhaWxzLlxuICAgIHJldHVybiB0eXBlXG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBvYmplY3RMYWJlbCgpIHtcbiAgICAgIC8vIE9ubHkgc2hvdyBhIGxhYmVsIGlmIHRoZSBvYmplY3QgaXMgY29sbGFwc2libGUuXG4gICAgICByZXR1cm4gdGhpcy5jb2xsYXBzaWJsZVxuICAgICAgICA/IHRoaXMuZ2V0SXRlbUxhYmVsKHRoaXMuc2NoZW1hLCB0aGlzLm9iamVjdERhdGEsIHsgYXNPYmplY3Q6IHRydWUgfSlcbiAgICAgICAgOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IGRhdGE6IHRoaXMub2JqZWN0RGF0YSB9KVxuICAgIH1cbiAgfSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgIGFwaSxcbiAgICBzY2hlbWEsXG4gICAgbmFtZSxcbiAgICByb3V0ZXMsXG4gICAgbGV2ZWwsXG4gICAgbmVzdGVkID0gZmFsc2UsXG4gICAgZmxhdHRlbiA9IGZhbHNlLFxuICAgIHByb2Nlc3MgPSBudWxsXG4gICkge1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHJlc29sdmVTY2hlbWFDb21wb25lbnQoc2NoZW1hKSxcbiAgICAgIFNvdXJjZU1peGluLnByb2Nlc3NTY2hlbWEoXG4gICAgICAgIGFwaSxcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBuYW1lLFxuICAgICAgICByb3V0ZXMsXG4gICAgICAgIGxldmVsLFxuICAgICAgICBuZXN0ZWQsXG4gICAgICAgIGZsYXR0ZW4sXG4gICAgICAgIHByb2Nlc3NcbiAgICAgIClcbiAgICBdKVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tb2JqZWN0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBtaW4td2lkdGg6IG1pbi1jb250ZW50O1xuXG4gIC5kaXRvLW9iamVjdC1jb250ZW50IHtcbiAgICBmbGV4OiAwIDEgMTAwJTtcbiAgfVxuXG4gID4gLmRpdG8tZWRpdC1idXR0b25zIHtcbiAgICBmbGV4OiAxIDAgMCU7XG4gICAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmc7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3BhbmVsJywge1xuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgZXhjbHVkZVZhbHVlOiB0cnVlLFxuICBnZW5lcmF0ZUxhYmVsOiBmYWxzZSxcbiAgb21pdFNwYWNpbmc6IHRydWUsXG5cbiAgZ2V0UGFuZWxTY2hlbWEoYXBpLCBzY2hlbWEpIHtcbiAgICAvLyBGb3IgYSBUeXBlUGFuZWwsIHRoZSBjb21wb25lbnQgc2NoZW1hIGlzIGFsc28gdGhlIHBhbmVsIHNjaGVtYSwgYnV0XG4gICAgLy8gcmVtb3ZlIHRoZSBhZGRlZCBuYW1lLCBzbyBpdCBkb2Vzbid0IGdldCBhcHBlbmRlZCB0d2ljZSB0byBkYXRhLXBhdGguXG4gICAgY29uc3QgeyBuYW1lLCAuLi5wYW5lbCB9ID0gc2NoZW1hXG4gICAgcmV0dXJuIHBhbmVsXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5wcm9ncmVzcy5kaXRvLXByb2dyZXNzKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6dmFsdWU9XCJwcm9ncmVzc1ZhbHVlXCJcbiAgOm1heD1cInByb2dyZXNzTWF4XCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE51bWJlck1peGluIGZyb20gJy4uL21peGlucy9OdW1iZXJNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdwcm9ncmVzcycsIHtcbiAgbWl4aW5zOiBbTnVtYmVyTWl4aW5dLFxuICBjb21wdXRlZDoge1xuICAgIHByb2dyZXNzVmFsdWUoKSB7XG4gICAgICBsZXQgeyB2YWx1ZSwgcmFuZ2UsIHN0ZXAgfSA9IHRoaXNcbiAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgICB2YWx1ZSAtPSByYW5nZVswXVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdGVwKSB7XG4gICAgICAgICAgdmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlIC8gc3RlcCkgKiBzdGVwXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gJydcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH0sXG5cbiAgICBwcm9ncmVzc01heCgpIHtcbiAgICAgIGNvbnN0IHsgcmFuZ2UgfSA9IHRoaXNcbiAgICAgIHJldHVybiByYW5nZSA/IHJhbmdlWzFdIC0gcmFuZ2VbMF0gOiBudWxsXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxudWwuZGl0by1yYWRpby1idXR0b25zKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1cImBkaXRvLWxheW91dC0ke3NjaGVtYS5sYXlvdXQgfHwgJ3ZlcnRpY2FsJ31gXCJcbilcbiAgbGkoXG4gICAgdi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiXG4gIClcbiAgICBsYWJlbFxuICAgICAgaW5wdXQuZGl0by1yYWRpby1idXR0b24oXG4gICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIClcbiAgICAgIHwge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBPcHRpb25zTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09wdGlvbnNNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdyYWRpbycsIHtcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcblxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgZGVmYXVsdFdpZHRoOiAnYXV0bydcbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1yYWRpby1idXR0b25zIHtcbiAgbGFiZWwge1xuICAgIEBleHRlbmQgJWlucHV0LWJvcmRlcmxlc3M7XG4gIH1cblxuICAuZGl0by1yYWRpby1idXR0b24ge1xuICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1zZWN0aW9uKDpjbGFzcz1cInsgJ2RpdG8tc2VjdGlvbi0tbGFiZWxsZWQnOiBoYXNMYWJlbCB9XCIpXG4gIERpdG9TY2hlbWFJbmxpbmVkLmRpdG8tc2VjdGlvbl9fc2NoZW1hKFxuICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOnBhZGRpbmc9XCJoYXNMYWJlbCA/ICduZXN0ZWQnIDogJ2lubGluZWQnXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgIDpsYWJlbE5vZGU9XCJsYWJlbE5vZGVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGdldEl0ZW1Gb3JtU2NoZW1hLCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzZWN0aW9uJywge1xuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiAoeyBzY2hlbWEgfSkgPT4gIXNjaGVtYS5uZXN0ZWQgJiYgISgnZGVmYXVsdCcgaW4gc2NoZW1hKSxcbiAgZGVmYXVsdE5lc3RlZDogZmFsc2UsXG4gIGdlbmVyYXRlTGFiZWw6IGZhbHNlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5lc3RlZCA/IHRoaXMudmFsdWUgOiB0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnNjaGVtYS5sYWJlbFxuICAgIH0sXG5cbiAgICBjb2xsYXBzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NvbGxhcHNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBjb2xsYXBzZWQ6IGdldFNjaGVtYUFjY2Vzc29yKCdjb2xsYXBzZWQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoY29sbGFwc2VkKSB7XG4gICAgICAgIHJldHVybiBjb2xsYXBzZWQgJiYgdGhpcy5jb2xsYXBzaWJsZVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldEl0ZW1Gb3JtU2NoZW1hXG4gIH0sXG5cbiAgYXN5bmMgcHJvY2Vzc1NjaGVtYShhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzLCBsZXZlbCkge1xuICAgIC8vIFByb2Nlc3Mgc2VjdGlvbiBjb21wb25lbnRzIHNvIHRoZWlyIGZvcm1zIGdldCByZXNvbHZlZCB0b28uXG4gICAgYXdhaXQgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBzY2hlbWEsIHJvdXRlcywgbGV2ZWwpXG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zZWN0aW9uIHtcbiAgJi0tbGFiZWxsZWQge1xuICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMC4ycyAkZWFzZS1vdXQtcXVhcnQ7XG4gICAgbWFyZ2luLXRvcDogJGZvcm0tc3BhY2luZy1oYWxmO1xuXG4gICAgJjpoYXMoLmRpdG8tc2NoZW1hLS1vcGVuKSB7XG4gICAgICBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi8vLSBOZXN0aW5nIGlzIG5lZWRlZCB0byBtYWtlIGFuIGFycm93IGFwcGVhciBvdmVyIHRoZSBzZWxlY3QgaXRlbTpcbi5kaXRvLXNlbGVjdFxuICAuZGl0by1zZWxlY3RfX2lubmVyXG4gICAgc2VsZWN0KFxuICAgICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICB2LW1vZGVsPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIEBtb3VzZWRvd249XCJwb3B1bGF0ZSA9IHRydWVcIlxuICAgICAgQGZvY3VzPVwicG9wdWxhdGUgPSB0cnVlXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1pZj1cInBvcHVsYXRlXCJcbiAgICAgIClcbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgdi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiXG4gICAgICAgIClcbiAgICAgICAgICBvcHRncm91cChcbiAgICAgICAgICAgIHYtaWY9XCJncm91cEJ5XCJcbiAgICAgICAgICAgIDpsYWJlbD1cIm9wdGlvbltncm91cEJ5TGFiZWxdXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBvcHRpb24oXG4gICAgICAgICAgICAgIHYtZm9yPVwib3B0IGluIG9wdGlvbltncm91cEJ5T3B0aW9uc11cIlxuICAgICAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHQpXCJcbiAgICAgICAgICAgICkge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0KSB9fVxuICAgICAgICAgIG9wdGlvbihcbiAgICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1lbHNlLWlmPVwic2VsZWN0ZWRPcHRpb25cIlxuICAgICAgKVxuICAgICAgICBvcHRpb24oOnZhbHVlPVwic2VsZWN0ZWRWYWx1ZVwiKSB7eyBnZXRMYWJlbEZvck9wdGlvbihzZWxlY3RlZE9wdGlvbikgfX1cbiAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgQGNsaWNrPVwiY2xlYXJcIlxuICAgIClcbiAgLy8tIEVkaXQgYnV0dG9uIGlzIG5ldmVyIGRpc2FibGVkLCBldmVuIGlmIHRoZSBmaWVsZCBpcyBkaXNhYmxlZC5cbiAgRGl0b0VkaXRCdXR0b25zKFxuICAgIHYtaWY9XCJlZGl0YWJsZVwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOmRpc2FibGVkPVwiZmFsc2VcIlxuICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICA6ZWRpdFBhdGg9XCJlZGl0UGF0aFwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2VsZWN0Jywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIERpc2FibGUgbGF6eS1wb3B1bGF0aW9uIGZvciBub3cuXG4gICAgICAvLyBUT0RPOiBTZXQgdG8gYGZhbHNlYCBPbmNlIGxpbmV0byBlMmUgdGVzdHMgYWRkcmVzcyB0aGVpciBpc3N1ZXMuXG4gICAgICBwb3B1bGF0ZTogdHJ1ZVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXNlbGVjdCB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgc2VsZWN0IHtcbiAgICBAZXh0ZW5kICVpbnB1dDtcblxuICAgIHBhZGRpbmctcmlnaHQ6ICRzZWxlY3QtYXJyb3ctd2lkdGg7XG4gIH1cblxuICAvLyBgJl9fX2lubmVyYCBpcyBuZWVkZWQgdG8gbWFrZSB0aGUgZWRpdCBidXR0b25zIGFwcGVhciB0byB0aGUgcmlnaHQgb2YgdGhlXG4gIC8vIHNlbGVjdDpcbiAgJl9faW5uZXIge1xuICAgIGZsZXg6IDE7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIEBpbmNsdWRlIGFycm93KCRzZWxlY3QtYXJyb3ctc2l6ZSk7XG5cbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGJvdHRvbTogJHNlbGVjdC1hcnJvdy1ib3R0b207XG4gICAgICByaWdodDogJHNlbGVjdC1hcnJvdy1yaWdodDtcbiAgICB9XG4gIH1cblxuICAuZGl0by1lZGl0LWJ1dHRvbnMge1xuICAgIG1hcmdpbi1sZWZ0OiAkZm9ybS1zcGFjaW5nLWhhbGY7XG4gIH1cblxuICAvLyBIYW5kbGUgLmRpdG8td2lkdGgtZmlsbCBzZXBhcmF0ZWx5IGR1ZSB0byByZXF1aXJlZCBuZXN0aW5nIG9mIHNlbGVjdDpcbiAgJi5kaXRvLXdpZHRoLWZpbGwge1xuICAgIHNlbGVjdCB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG4gIH1cblxuICAmLmRpdG8tZGlzYWJsZWQ6OmFmdGVyIHtcbiAgICBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tc2xpZGVyXG4gIGlucHV0LmRpdG8tcmFuZ2UoXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICB0eXBlPVwicmFuZ2VcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIDptaW49XCJtaW5cIlxuICAgIDptYXg9XCJtYXhcIlxuICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgKVxuICBJbnB1dEZpZWxkLmRpdG8tbnVtYmVyKFxuICAgIHYtaWY9XCJpbnB1dFwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHR5cGU9XCJudW1iZXJcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIDptaW49XCJtaW5cIlxuICAgIDptYXg9XCJtYXhcIlxuICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBOdW1iZXJNaXhpbiBmcm9tICcuLi9taXhpbnMvTnVtYmVyTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgSW5wdXRGaWVsZCB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3NsaWRlcicsIHtcbiAgbWl4aW5zOiBbTnVtYmVyTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IElucHV0RmllbGQgfSxcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYHNob3dJbnB1dGA/XG4gICAgaW5wdXQ6IGdldFNjaGVtYUFjY2Vzc29yKCdpbnB1dCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXNsaWRlciB7XG4gIEBleHRlbmQgJWlucHV0O1xuXG4gIGRpc3BsYXk6IGZsZXg7XG5cbiAgLmRpdG8tcmFuZ2Uge1xuICAgIGZsZXg6IGF1dG87XG4gICAgaGVpZ2h0OiBjYWxjKDFlbSAqIHZhcigtLWxpbmUtaGVpZ2h0KSk7XG4gIH1cblxuICAuZGl0by1udW1iZXIge1xuICAgIGJvcmRlcjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8IS0tIGVzbGludC1kaXNhYmxlIHZ1ZS92YWxpZC10ZW1wbGF0ZS1yb290IC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj48L3RlbXBsYXRlPlxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc3BhY2VyJywge1xuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgZXhjbHVkZVZhbHVlOiB0cnVlLFxuICBnZW5lcmF0ZUxhYmVsOiBmYWxzZVxufSlcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cblN3aXRjaEJ1dHRvbi5kaXRvLXN3aXRjaChcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJlbGVtZW50XCJcbiAgdi1tb2RlbD1cInZhbHVlXCJcbiAgOmxhYmVscz1cImxhYmVsc1wiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IFN3aXRjaEJ1dHRvbiB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3N3aXRjaCcsIHtcbiAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgZGVmYXVsdFdpZHRoOiAnYXV0bycsXG5cbiAgY29tcG9uZW50czoge1xuICAgIFN3aXRjaEJ1dHRvblxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGFiZWxzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmxhYmVsc1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXN3aXRjaCB7XG4gIC5kaXRvLXN3aXRjaC1sYWJlbCB7XG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtYWxsO1xuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0RGVmYXVsdFZhbHVlIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcHV0ZWQ6IHtcbiAgICB0cmltOiBnZXRTY2hlbWFBY2Nlc3NvcigndHJpbScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKGNvbnRleHQpIHtcbiAgICBsZXQgeyBzY2hlbWEsIHZhbHVlIH0gPSBjb250ZXh0XG4gICAgaWYgKHNjaGVtYS50cmltICYmIHZhbHVlICE9IG51bGwgJiYgaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAvLyBUZXh0IGZpZWxkcyBkb24ndCBuZWNlc3NhcmlseSBoYXZlIGEgYFN0cmluZ2AgdmFsdWUgd2hlbiBgZm9ybWF0KClgXG4gICAgICAvLyB3aXRob3V0IGBwYXJzZSgpYCBpcyB1c2VkLlxuICAgICAgdmFsdWUgPSB2YWx1ZS50cmltKClcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSAnJykge1xuICAgICAgdmFsdWUgPSBnZXREZWZhdWx0VmFsdWUoc2NoZW1hLCBjb250ZXh0KVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbklucHV0RmllbGQuZGl0by10ZXh0KFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gIDp0eXBlPVwiaW5wdXRUeXBlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4pXG4gIHRlbXBsYXRlKCNhZnRlcilcbiAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgQGNsaWNrLnN0b3A9XCJjbGVhclwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBUZXh0TWl4aW4gZnJvbSAnLi4vbWl4aW5zL1RleHRNaXhpbidcbmltcG9ydCB7IElucHV0RmllbGQgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcblxuY29uc3QgbWFza2VkUGFzc3dvcmQgPSAnKioqKioqKioqKioqKioqKidcblxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoXG4gIFtcbiAgICAndGV4dCcsXG4gICAgJ2VtYWlsJyxcbiAgICAndXJsJyxcbiAgICAnaG9zdG5hbWUnLFxuICAgICdkb21haW4nLFxuICAgICd0ZWwnLFxuICAgICdwYXNzd29yZCcsXG4gICAgJ2NyZWRpdGNhcmQnXG4gIF0sXG4gIC8vIEB2dWUvY29tcG9uZW50XG4gIHtcbiAgICBtaXhpbnM6IFtUZXh0TWl4aW5dLFxuICAgIGNvbXBvbmVudHM6IHsgSW5wdXRGaWVsZCB9LFxuICAgIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICAgIHRleHRGaWVsZDogdHJ1ZSxcbiAgICBpZ25vcmVNaXNzaW5nVmFsdWU6ICh7IHNjaGVtYSB9KSA9PiBzY2hlbWEudHlwZSA9PT0gJ3Bhc3N3b3JkJyxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICBpbnB1dFR5cGUoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAge1xuICAgICAgICAgICAgY3JlZGl0Y2FyZDogJ3RleHQnLFxuICAgICAgICAgICAgaG9zdG5hbWU6ICd0ZXh0JyxcbiAgICAgICAgICAgIGRvbWFpbjogJ3RleHQnXG4gICAgICAgICAgfVt0aGlzLnR5cGVdIHx8XG4gICAgICAgICAgdGhpcy50eXBlXG4gICAgICAgIClcbiAgICAgIH0sXG5cbiAgICAgIGlucHV0VmFsdWU6IHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLnR5cGUgPT09ICdwYXNzd29yZCcgJiZcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgIXRoaXMuZm9jdXNlZFxuICAgICAgICAgIClcbiAgICAgICAgICAgID8gbWFza2VkUGFzc3dvcmRcbiAgICAgICAgICAgIDogdGhpcy52YWx1ZVxuICAgICAgICB9LFxuXG4gICAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG1ldGhvZHM6IHtcbiAgICAgIGdldFZhbGlkYXRpb25zKCkge1xuICAgICAgICBjb25zdCBydWxlID0ge1xuICAgICAgICAgIGVtYWlsOiAnZW1haWwnLFxuICAgICAgICAgIHVybDogJ3VybCcsXG4gICAgICAgICAgaG9zdG5hbWU6ICdob3N0bmFtZScsXG4gICAgICAgICAgZG9tYWluOiAnZG9tYWluJyxcbiAgICAgICAgICBwYXNzd29yZDogJ3Bhc3N3b3JkJyxcbiAgICAgICAgICBjcmVkaXRjYXJkOiAnY3JlZGl0Y2FyZCdcbiAgICAgICAgfVt0aGlzLnR5cGVdXG4gICAgICAgIHJldHVybiBydWxlID8geyBbcnVsZV06IHRydWUgfSA6IHt9XG4gICAgICB9XG4gICAgfVxuICB9XG4pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG50ZXh0YXJlYS5kaXRvLXRleHRhcmVhLmRpdG8taW5wdXQoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICA6cm93cz1cImxpbmVzXCJcbiAgOmNsYXNzPVwieyAnZGl0by1yZXNpemFibGUnOiByZXNpemFibGUgfVwiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFRleHRNaXhpbiBmcm9tICcuLi9taXhpbnMvVGV4dE1peGluJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCd0ZXh0YXJlYScsIHtcbiAgbWl4aW5zOiBbVGV4dE1peGluXSxcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG4gIHRleHRGaWVsZDogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIGxpbmVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmxpbmVzIHx8IDRcbiAgICB9LFxuXG4gICAgcmVzaXphYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVzaXphYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXRleHRhcmVhIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHJlc2l6ZTogbm9uZTtcbiAgbWluLWhlaWdodDogY2FsYygxZW0gKiB2YXIoLS1saW5lLWhlaWdodCkgKyAjezIgKiAkaW5wdXQtcGFkZGluZy12ZXJ9KTtcblxuICAmLmRpdG8tcmVzaXphYmxlIHtcbiAgICByZXNpemU6IHZlcnRpY2FsO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXRyZWUtbGlzdFxuICBEaXRvU2NvcGVzKFxuICAgIHYtaWY9XCJzY29wZXNcIlxuICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICA6c2NvcGVzPVwic2NvcGVzXCJcbiAgKVxuICAuZGl0by10cmVlLXBhbmVsXG4gICAgRGl0b1RyZWVJdGVtKFxuICAgICAgOnNjaGVtYT1cInRyZWVTY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwidHJlZURhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwidHJlZURhdGFcIlxuICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICA6b3Blbj1cInRydWVcIlxuICAgICAgQHVwZGF0ZTpkYXRhPVwiZGF0YSA9PiAodmFsdWUgPSBkYXRhKVwiXG4gICAgKVxuICAgIC5kaXRvLXRyZWUtZm9ybS1jb250YWluZXIoXG4gICAgICB2LWlmPVwiaGFzRWRpdGFibGVGb3Jtc1wiXG4gICAgKVxuICAgICAgLy8tIEluY2x1ZGUgYSByb3V0ZXItdmlldyBmb3IgdGhlIG9wdGlvbmFsIERpdG9Gb3JtSW5saW5lZFxuICAgICAgUm91dGVyVmlld1xuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBTb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvU291cmNlTWl4aW4uanMnXG5pbXBvcnQge1xuICBoYXNGb3JtU2NoZW1hLFxuICBnZXRGb3JtU2NoZW1hcyxcbiAgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudHNcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcihcbiAgWyd0cmVlLWxpc3QnLCAndHJlZS1vYmplY3QnXSxcbiAgLy8gQHZ1ZS9jb21wb25lbnRcbiAge1xuICAgIG1peGluczogW1NvdXJjZU1peGluXSxcblxuICAgIHByb3ZpZGUoKSB7XG4gICAgICByZXR1cm4geyBjb250YWluZXI6IHRoaXMgfVxuICAgIH0sXG5cbiAgICBnZXRTb3VyY2VUeXBlKHR5cGUpIHtcbiAgICAgIHJldHVybiB0eXBlID09PSAndHJlZS1vYmplY3QnID8gJ29iamVjdCcgOiAnbGlzdCdcbiAgICB9LFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIHBhdGgoKSB7XG4gICAgICAgIC8vIEFjY2Vzc2VkIGZyb20gRGl0b1RyZWVJdGVtIHRocm91Z2ggYGNvbnRhaW5lci5wYXRoYDpcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybUNvbXBvbmVudD8ucGF0aFxuICAgICAgfSxcblxuICAgICAgZWRpdFBhdGgoKSB7XG4gICAgICAgIC8vIEFjY2Vzc2VkIGZyb20gRGl0b1RyZWVJdGVtIHRocm91Z2ggYGNvbnRhaW5lci5lZGl0UGF0aGA6XG4gICAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5wYXRoLnNsaWNlKHRoaXMucGF0aD8ubGVuZ3RoKVxuICAgICAgfSxcblxuICAgICAgdHJlZURhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICAgID8geyBbdGhpcy5uYW1lXTogdGhpcy52YWx1ZSB9XG4gICAgICAgICAgOiB0aGlzLnZhbHVlXG4gICAgICB9LFxuXG4gICAgICB0cmVlRGF0YVBhdGgoKSB7XG4gICAgICAgIC8vIFJlbW92ZSBgbmFtZWAgZnJvbSBgZGF0YVBhdGhgLCBhcyBpdCBpcyBhZGRlZFxuICAgICAgICAvLyB0byBgdHJlZURhdGFgIGFuZCBgdHJlZVNjaGVtYWBcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgICAgPyB0aGlzLmRhdGFQYXRoLnNsaWNlKDAsIHRoaXMuZGF0YVBhdGgubGVuZ3RoIC0gdGhpcy5uYW1lLmxlbmd0aClcbiAgICAgICAgICA6IHRoaXMuZGF0YVBhdGhcbiAgICAgIH0sXG5cbiAgICAgIHRyZWVTY2hlbWEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBjaGlsZHJlbjoge1xuICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgICAgICAuLi50aGlzLnNjaGVtYVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB0aGlzLnNjaGVtYVxuICAgICAgfSxcblxuICAgICAgaGFzRWRpdGFibGVGb3JtcygpIHtcbiAgICAgICAgY29uc3QgaGFzRWRpdGFibGVGb3JtcyA9IHNjaGVtYSA9PiB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGhhc0Zvcm1TY2hlbWEoc2NoZW1hKSAmJiAoXG4gICAgICAgICAgICAgIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2VkaXRhYmxlJywge1xuICAgICAgICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgc2NoZW1hXG4gICAgICAgICAgICAgIH0pIHx8XG4gICAgICAgICAgICAgIHNjaGVtYS5jaGlsZHJlbiAmJlxuICAgICAgICAgICAgICBoYXNFZGl0YWJsZUZvcm1zKHNjaGVtYS5jaGlsZHJlbilcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhhc0VkaXRhYmxlRm9ybXModGhpcy5zY2hlbWEpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHByb2Nlc3NTY2hlbWEoXG4gICAgICBhcGksXG4gICAgICBzY2hlbWEsXG4gICAgICBuYW1lLFxuICAgICAgcm91dGVzLFxuICAgICAgbGV2ZWwsXG4gICAgICBuZXN0ZWQgPSB0cnVlLFxuICAgICAgZmxhdHRlbiA9IGZhbHNlLFxuICAgICAgcHJvY2VzcyA9IG51bGxcbiAgICApIHtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudHMoc2NoZW1hLnByb3BlcnRpZXMpLFxuICAgICAgICBTb3VyY2VNaXhpbi5wcm9jZXNzU2NoZW1hKFxuICAgICAgICAgIGFwaSxcbiAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICByb3V0ZXMsXG4gICAgICAgICAgbGV2ZWwsXG4gICAgICAgICAgbmVzdGVkLFxuICAgICAgICAgIGZsYXR0ZW4sXG4gICAgICAgICAgLy8gUGFzcyBwcm9jZXNzKCkgdG8gYWRkIG1vcmUgcm91dGVzIHRvIGNoaWxkUm91dGVzOlxuICAgICAgICAgIChjaGlsZFJvdXRlcywgbGV2ZWwpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgY2hpbGRyZW4gfSA9IHNjaGVtYVxuICAgICAgICAgICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgIC8vIEFkZCBgdHlwZWAgdG8gdGhlIG5lc3RlZCB0cmVlIGxpc3QuXG4gICAgICAgICAgICAgIGNoaWxkcmVuLnR5cGUgPSAndHJlZS1saXN0J1xuICAgICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBjYWxsIGBwcm9jZXNzU2NoZW1hKClgIGZvciB0aGUgbmVzdGVkIHRyZWUgbGlzdDpcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1NjaGVtYShcbiAgICAgICAgICAgICAgICBhcGksXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4ubmFtZSxcbiAgICAgICAgICAgICAgICBjaGlsZFJvdXRlcyxcbiAgICAgICAgICAgICAgICBsZXZlbCxcbiAgICAgICAgICAgICAgICBuZXN0ZWQsXG4gICAgICAgICAgICAgICAgdHJ1ZSwgLy8gUGFzcyBgdHJ1ZWAgZm9yIGBmbGF0dGVuYCBpbiB0cmVlIGxpc3RzLlxuICAgICAgICAgICAgICAgIHByb2Nlc3NcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgXSlcbiAgICB9LFxuXG4gICAgZ2V0Rm9ybVNjaGVtYXNGb3JQcm9jZXNzaW5nKHNjaGVtYSwgY29udGV4dCkge1xuICAgICAgLy8gQ29udmVydCBuZXN0ZWQgY2hpbGRyZW4gc2NoZW1hIHRvIHN0YW5kLWFsb25lIHNjaGVtYSBjb21wb25lbnQsXG4gICAgICAvLyBwcmVzZW50IGluIGVhY2ggb2YgdGhlIGZvcm1zLCBhcyByZXF1aXJlZCBieSBgcHJvY2Vzc1NjaGVtYURhdGEoKWBcbiAgICAgIGNvbnN0IHsgY2hpbGRyZW4gfSA9IHNjaGVtYVxuICAgICAgcmV0dXJuIGdldEZvcm1TY2hlbWFzKFxuICAgICAgICBzY2hlbWEsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGNoaWxkcmVuXG4gICAgICAgICAgPyBmb3JtID0+ICh7XG4gICAgICAgICAgICAgIC4uLmZvcm0sXG4gICAgICAgICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAgICAgICAuLi5mb3JtLmNvbXBvbmVudHMsXG4gICAgICAgICAgICAgICAgW2NoaWxkcmVuLm5hbWVdOiBjaGlsZHJlblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogbnVsbFxuICAgICAgKVxuICAgIH1cbiAgfVxuKVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdHJlZS1saXN0IHtcbiAgQGV4dGVuZCAlZmllbGQ7XG5cbiAgLmRpdG8tdHJlZS1wYW5lbCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cbiAgICA+IC5kaXRvLXRyZWUtaXRlbSB7XG4gICAgICBmbGV4OiAxIDEgMjUlO1xuICAgIH1cblxuICAgID4gLmRpdG8tdHJlZS1mb3JtLWNvbnRhaW5lciB7XG4gICAgICBmbGV4OiAwIDEgNzUlO1xuICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaDtcbiAgICAgIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmQ7XG4gICAgICBib3JkZXItbGVmdDogJGJvcmRlci1zdHlsZTtcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAtIDE7XG4gICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXMgLSAxO1xuICAgICAgbWFyZ2luOiAoLSRpbnB1dC1wYWRkaW5nLXZlcikgKC0kaW5wdXQtcGFkZGluZy1ob3IpO1xuICAgICAgbWFyZ2luLWxlZnQ6ICRpbnB1dC1wYWRkaW5nLWhvcjtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBmaWxlc2l6ZSB9IGZyb20gJ2ZpbGVzaXplJ1xuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RmlsZVNpemUoc2l6ZSkge1xuICByZXR1cm4gZmlsZXNpemUoc2l6ZSwgeyBiYXNlOiAxMCB9KVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXVwbG9hZFxuICAvLy0gSW4gb3JkZXIgdG8gaGFuZGxlIHVwbG9hZCBidXR0b25zIGluIG11bHRpcGxlIHBvc3NpYmxlIHBsYWNlcywgZGVwZW5kaW5nXG4gIC8vLSBvbiB3aGV0aGVyIHRoZXkgaGFuZGxlIHNpbmdsZSBvciBtdWx0aXBsZSB1cGxvYWRzLCByZW5kZXIgdGhlIHVwbG9hZFxuICAvLy0gY29tcG9uZW50IGludmlzaWJseSBhdCB0aGUgcm9vdCwgYW5kIGRlbGVnYXRlIHRoZSBjbGljayBldmVudHMgdG8gaXQgZnJvbVxuICAvLy0gdGhlIGJ1dHRvbnMgcmVuZGVyZWQgZnVydGhlciBiZWxvdy4gTHVja2lseSB0aGlzIHdvcmtzIHN1cnByaXNpbmdseSB3ZWxsLlxuICBWdWVVcGxvYWQuZGl0by11cGxvYWRfX2lucHV0KFxuICAgIHJlZj1cInVwbG9hZFwiXG4gICAgdi1tb2RlbD1cInVwbG9hZHNcIlxuICAgIDppbnB1dElkPVwiZGF0YVBhdGhcIlxuICAgIDpuYW1lPVwiZGF0YVBhdGhcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6cG9zdEFjdGlvbj1cInVwbG9hZFBhdGhcIlxuICAgIDpleHRlbnNpb25zPVwiZXh0ZW5zaW9uc1wiXG4gICAgOmFjY2VwdD1cImFjY2VwdFwiXG4gICAgOm11bHRpcGxlPVwibXVsdGlwbGVcIlxuICAgIDpzaXplPVwibWF4U2l6ZVwiXG4gICAgOmRyb3A9XCIkZWw/LmNsb3Nlc3QoJy5kaXRvLWNvbnRhaW5lcicpXCJcbiAgICA6ZHJvcERpcmVjdG9yeT1cInRydWVcIlxuICAgIEBpbnB1dC1maWx0ZXI9XCJvbklucHV0RmlsdGVyXCJcbiAgICBAaW5wdXQtZmlsZT1cIm9uSW5wdXRGaWxlXCJcbiAgKVxuICB0YWJsZS5kaXRvLXRhYmxlLmRpdG8tdGFibGUtc2VwYXJhdG9ycy5kaXRvLXRhYmxlLWJhY2tncm91bmRcbiAgICAvLy0gU3R5bGluZyBjb21lcyBmcm9tIGBEaXRvVGFibGVIZWFkYFxuICAgIHRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICAgICAgdHJcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuIEZpbGVcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuIFNpemVcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuIFN0YXR1c1xuICAgICAgICB0aFxuICAgICAgICAgIHNwYW5cbiAgICBEaXRvRHJhZ2dhYmxlKFxuICAgICAgdi1tb2RlbD1cImZpbGVzXCJcbiAgICAgIHRhZz1cInRib2R5XCJcbiAgICAgIDpvcHRpb25zPVwiZ2V0RHJhZ2dhYmxlT3B0aW9ucygpXCJcbiAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWlmPVwibXVsdGlwbGUgfHwgIWlzVXBsb2FkQWN0aXZlXCJcbiAgICAgIClcbiAgICAgICAgdHIoXG4gICAgICAgICAgdi1mb3I9XCIoZmlsZSwgaW5kZXgpIGluIGZpbGVzXCJcbiAgICAgICAgICA6a2V5PVwiZmlsZS5uYW1lXCJcbiAgICAgICAgKVxuICAgICAgICAgIHRkKFxuICAgICAgICAgICAgdi1pZj1cInJlbmRlclwiXG4gICAgICAgICAgICB2LWh0bWw9XCJyZW5kZXJGaWxlKGZpbGUsIGluZGV4KVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIHRkKFxuICAgICAgICAgICAgdi1lbHNlLWlmPVwiZG93bmxvYWRVcmxzW2luZGV4XVwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgYShcbiAgICAgICAgICAgICAgOmRvd25sb2FkPVwiZmlsZS5uYW1lXCJcbiAgICAgICAgICAgICAgOmhyZWY9XCJkb3dubG9hZFVybHNbaW5kZXhdXCJcbiAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQ9XCJvbkNsaWNrRG93bmxvYWQoZmlsZSwgaW5kZXgpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgRGl0b1VwbG9hZEZpbGUoXG4gICAgICAgICAgICAgICAgOmZpbGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgICA6dGh1bWJuYWlsPVwidGh1bWJuYWlsc1wiXG4gICAgICAgICAgICAgICAgOnRodW1ibmFpbFVybD1cInRodW1ibmFpbFVybHNbaW5kZXhdXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgIHRkKFxuICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgKVxuICAgICAgICAgICAgRGl0b1VwbG9hZEZpbGUoXG4gICAgICAgICAgICAgIDpmaWxlPVwiZmlsZVwiXG4gICAgICAgICAgICAgIDp0aHVtYm5haWw9XCJ0aHVtYm5haWxzXCJcbiAgICAgICAgICAgICAgOnRodW1ibmFpbFVybD1cInRodW1ibmFpbFVybHNbaW5kZXhdXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICB0ZC5kaXRvLXVwbG9hZF9fc2l6ZSB7eyBmb3JtYXRGaWxlU2l6ZShmaWxlLnNpemUpIH19XG4gICAgICAgICAgdGQuZGl0by11cGxvYWRfX3N0YXR1c1xuICAgICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICAgIHYtaWY9XCJmaWxlLnVwbG9hZFwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJmaWxlLnVwbG9hZC5lcnJvclwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB8IEVycm9yOiB7eyBmaWxlLnVwbG9hZC5lcnJvciB9fVxuICAgICAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJmaWxlLnVwbG9hZC5hY3RpdmVcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfCBVcGxvYWRpbmcuLi5cbiAgICAgICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICAgICAgdi1lbHNlLWlmPVwiZmlsZS51cGxvYWQuc3VjY2Vzc1wiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB8IFVwbG9hZGVkXG4gICAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHwgU3RvcmVkXG4gICAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9uc1xuICAgICAgICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLXVwbG9hZChcbiAgICAgICAgICAgICAgICB2LWlmPVwiIW11bHRpcGxlXCJcbiAgICAgICAgICAgICAgICA6dGl0bGU9XCJ1cGxvYWRUaXRsZVwiXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwib25DbGlja1VwbG9hZFwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgICAgICAgICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgdi1pZj1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJkZWxldGVGaWxlKGZpbGUsIGluZGV4KVwiXG4gICAgICAgICAgICAgIClcbiAgICB0Zm9vdChcbiAgICAgIHYtaWY9XCJtdWx0aXBsZSB8fCBpc1VwbG9hZEFjdGl2ZSB8fCAhaGFzRmlsZXNcIlxuICAgIClcbiAgICAgIHRyXG4gICAgICAgIHRkKDpjb2xzcGFuPVwiNFwiKVxuICAgICAgICAgIC5kaXRvLXVwbG9hZC1mb290ZXJcbiAgICAgICAgICAgIHByb2dyZXNzLmRpdG8tcHJvZ3Jlc3MoXG4gICAgICAgICAgICAgIHYtaWY9XCJpc1VwbG9hZEFjdGl2ZVwiXG4gICAgICAgICAgICAgIDp2YWx1ZT1cInVwbG9hZFByb2dyZXNzXCJcbiAgICAgICAgICAgICAgbWF4PVwiMTAwXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICB2LWlmPVwiaXNVcGxvYWRBY3RpdmVcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIEBjbGljay5wcmV2ZW50PVwidXBsb2FkLmFjdGl2ZSA9IGZhbHNlXCJcbiAgICAgICAgICAgICAgKSBDYW5jZWxcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLXVwbG9hZChcbiAgICAgICAgICAgICAgICB2LWlmPVwibXVsdGlwbGUgfHwgIWhhc0ZpbGVzXCJcbiAgICAgICAgICAgICAgICA6dGl0bGU9XCJ1cGxvYWRUaXRsZVwiXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwib25DbGlja1VwbG9hZFwiXG4gICAgICAgICAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgU29ydGFibGVNaXhpbiBmcm9tICcuLi9taXhpbnMvU29ydGFibGVNaXhpbi5qcydcbmltcG9ydCBwYXJzZUZpbGVTaXplIGZyb20gJ2ZpbGVzaXplLXBhcnNlcidcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBmb3JtYXRGaWxlU2l6ZSB9IGZyb20gJy4uL3V0aWxzL3VuaXRzLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgaXNBcnJheSwgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgVnVlVXBsb2FkIGZyb20gJ3Z1ZS11cGxvYWQtY29tcG9uZW50J1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3VwbG9hZCcsIHtcbiAgbWl4aW5zOiBbU29ydGFibGVNaXhpbl0sXG4gIGNvbXBvbmVudHM6IHsgVnVlVXBsb2FkIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdXBsb2FkczogW11cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB1cGxvYWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmcy51cGxvYWRcbiAgICB9LFxuXG4gICAgdXBsb2FkVGl0bGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZSA/ICdVcGxvYWQgRmlsZXMnIDogJ1VwbG9hZCBGaWxlJ1xuICAgIH0sXG5cbiAgICBmaWxlcygpIHtcbiAgICAgIHJldHVybiBhc0ZpbGVzKHRoaXMudmFsdWUpXG4gICAgfSxcblxuICAgIGRvd25sb2FkVXJscygpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbGVzLm1hcCgoZmlsZSwgaW5kZXgpID0+IHRoaXMuZ2V0RG93bmxvYWRVcmwoZmlsZSwgaW5kZXgpKVxuICAgIH0sXG5cbiAgICB0aHVtYm5haWxVcmxzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsZXMubWFwKChmaWxlLCBpbmRleCkgPT4gdGhpcy5nZXRUaHVtYm5haWxVcmwoZmlsZSwgaW5kZXgpKVxuICAgIH0sXG5cbiAgICBtdWx0aXBsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ211bHRpcGxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgLy8gTm8gY2FsbGJhY2sgYXMgaXQncyB1c2VkIGluIGBwcm9jZXNzVmFsdWUoKWBcbiAgICAgIGNhbGxiYWNrOiBmYWxzZVxuICAgIH0pLFxuXG4gICAgZXh0ZW5zaW9uczogZ2V0U2NoZW1hQWNjZXNzb3IoJ2V4dGVuc2lvbnMnLCB7XG4gICAgICB0eXBlOiBbQXJyYXksIFN0cmluZywgUmVnRXhwXVxuICAgIH0pLFxuXG4gICAgYWNjZXB0OiBnZXRTY2hlbWFBY2Nlc3NvcignYWNjZXB0Jywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBnZXQoYWNjZXB0KSB7XG4gICAgICAgIHJldHVybiBpc0FycmF5KGFjY2VwdCkgPyBhY2NlcHQuam9pbignLCcpIDogYWNjZXB0XG4gICAgICB9XG4gICAgfSksXG5cbiAgICBtYXhTaXplOiBnZXRTY2hlbWFBY2Nlc3NvcignbWF4U2l6ZScsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgICBnZXQobWF4U2l6ZSkge1xuICAgICAgICByZXR1cm4gbWF4U2l6ZSA/IHBhcnNlRmlsZVNpemUobWF4U2l6ZSkgOiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRyYWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RyYWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkcmFnZ2FibGUpIHtcbiAgICAgICAgcmV0dXJuIGRyYWdnYWJsZSAmJiB0aGlzLmZpbGVzLmxlbmd0aCA+IDFcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRlbGV0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlbGV0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgcmVuZGVyOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVuZGVyJywge1xuICAgICAgdHlwZTogRnVuY3Rpb24sXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSksXG5cbiAgICB0aHVtYm5haWxzOiBnZXRTY2hlbWFBY2Nlc3NvcigndGh1bWJuYWlscycsIHtcbiAgICAgIHR5cGU6IFtCb29sZWFuLCBTdHJpbmddLFxuICAgICAgZGVmYXVsdCh0aHVtYm5haWxzKSB7XG4gICAgICAgIHJldHVybiB0aHVtYm5haWxzID8/ICEhdGhpcy5zY2hlbWEudGh1bWJuYWlsVXJsXG4gICAgICB9LFxuICAgICAgZ2V0KHRodW1ibmFpbHMpIHtcbiAgICAgICAgcmV0dXJuIHRodW1ibmFpbHMgPT09IHRydWUgPyAnbWVkaXVtJyA6IHRodW1ibmFpbHMgfHwgbnVsbFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgaGFzRmlsZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5maWxlcy5sZW5ndGggPiAwXG4gICAgfSxcblxuICAgIGhhc1VwbG9hZHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGxvYWRzLmxlbmd0aCA+IDBcbiAgICB9LFxuXG4gICAgaXNVcGxvYWRSZWFkeSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuaGFzVXBsb2FkcyAmJlxuICAgICAgICAhKHRoaXMudXBsb2FkLmFjdGl2ZSB8fCB0aGlzLnVwbG9hZC51cGxvYWRlZClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNVcGxvYWRBY3RpdmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNVcGxvYWRzICYmIHRoaXMudXBsb2FkLmFjdGl2ZVxuICAgIH0sXG5cbiAgICB1cGxvYWRQcm9ncmVzcygpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMudXBsb2Fkcy5yZWR1Y2UoKHRvdGFsLCBmaWxlKSA9PiB0b3RhbCArICtmaWxlLnByb2dyZXNzLCAwKSAvXG4gICAgICAgIHRoaXMudXBsb2Fkcy5sZW5ndGhcbiAgICAgIClcbiAgICB9LFxuXG4gICAgdXBsb2FkUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFJlc291cmNlVXJsKHtcbiAgICAgICAgdHlwZTogJ3VwbG9hZCcsXG4gICAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgICBwYXRoOiB0aGlzLmFwaS5ub3JtYWxpemVQYXRoKHRoaXMuZGF0YVBhdGgpXG4gICAgICB9KVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIGlzVXBsb2FkUmVhZHkocmVhZHkpIHtcbiAgICAgIGlmIChyZWFkeSkge1xuICAgICAgICAvLyBBdXRvLXVwbG9hZC5cbiAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgIHRoaXMudXBsb2FkLmFjdGl2ZSA9IHRydWVcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvcm1hdEZpbGVTaXplLFxuXG4gICAgZ2V0RmlsZUNvbnRleHQoZmlsZSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiB0aGlzLm11bHRpcGxlXG4gICAgICAgID8gbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgIHZhbHVlOiBmaWxlLFxuICAgICAgICAgICAgZGF0YTogdGhpcy5maWxlcyxcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgZGF0YVBhdGg6IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIGluZGV4KVxuICAgICAgICAgIH0pXG4gICAgICAgIDogdGhpcy5jb250ZXh0XG4gICAgfSxcblxuICAgIHJlbmRlckZpbGUoZmlsZSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlcih0aGlzLmdldEZpbGVDb250ZXh0KGZpbGUsIGluZGV4KSlcbiAgICB9LFxuXG4gICAgZ2V0RG93bmxvYWRVcmwoZmlsZSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiBmaWxlLnVybFxuICAgICAgICA/IGZpbGUudXJsXG4gICAgICAgIDogIWZpbGUudXBsb2FkIHx8IGZpbGUudXBsb2FkLnN1Y2Nlc3NcbiAgICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2Rvd25sb2FkVXJsJywge1xuICAgICAgICAgICAgICB0eXBlOiAnU3RyaW5nJyxcbiAgICAgICAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgICAgICAgY29udGV4dDogdGhpcy5nZXRGaWxlQ29udGV4dChmaWxlLCBpbmRleClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBudWxsXG4gICAgfSxcblxuICAgIGdldFRodW1ibmFpbFVybChmaWxlLCBpbmRleCkge1xuICAgICAgcmV0dXJuICFmaWxlLnVwbG9hZCB8fCBmaWxlLnVwbG9hZC5zdWNjZXNzXG4gICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgndGh1bWJuYWlsVXJsJywge1xuICAgICAgICAgICAgdHlwZTogJ1N0cmluZycsXG4gICAgICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgICAgICAgY29udGV4dDogdGhpcy5nZXRGaWxlQ29udGV4dChmaWxlLCBpbmRleClcbiAgICAgICAgICB9KSB8fCAoXG4gICAgICAgICAgICBmaWxlLnR5cGUuc3RhcnRzV2l0aCgnaW1hZ2UvJylcbiAgICAgICAgICAgICAgPyBmaWxlLnVybFxuICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICApXG4gICAgICAgIDogbnVsbFxuICAgIH0sXG5cbiAgICBkZWxldGVGaWxlKGZpbGUsIGluZGV4KSB7XG4gICAgICBjb25zdCB7IG5hbWUgfSA9IGZpbGVcblxuICAgICAgaWYgKFxuICAgICAgICBmaWxlICYmXG4gICAgICAgIHdpbmRvdy5jb25maXJtKFxuICAgICAgICAgIGBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gJHt0aGlzLnZlcmJzLnJlbW92ZX0gJHtuYW1lfT9gXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbGUudXBsb2FkKSB7XG4gICAgICAgICAgdGhpcy51cGxvYWQucmVtb3ZlKGZpbGUudXBsb2FkKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ2luZm8nLFxuICAgICAgICAgIHRpdGxlOiAnU3VjY2Vzc2Z1bGx5IFJlbW92ZWQnLFxuICAgICAgICAgIHRleHQ6IGAke25hbWV9IHdhcyAke3RoaXMudmVyYnMuZGVsZXRlZH0uYFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRGaWxlSW5kZXgoZmlsZSkge1xuICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGUgJiYgdGhpcy52YWx1ZVxuICAgICAgICA/IHRoaXMudmFsdWUuZmluZEluZGV4KGl0ID0+IGl0LmlkID09PSBmaWxlLmlkKVxuICAgICAgICA6IC0xXG4gICAgfSxcblxuICAgIGFkZEZpbGUoZmlsZSkge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlLnB1c2goZmlsZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gW2ZpbGVdXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBmaWxlXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlcGxhY2VGaWxlKGZpbGUsIG5ld0ZpbGUpIHtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRGaWxlSW5kZXgoZmlsZSlcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICBpZiAobmV3RmlsZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZVtpbmRleF0gPSBuZXdGaWxlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ld0ZpbGVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVtb3ZlRmlsZShmaWxlKSB7XG4gICAgICB0aGlzLnJlcGxhY2VGaWxlKGZpbGUsIG51bGwpXG4gICAgfSxcblxuICAgIG9uSW5wdXRGaWxlKG5ld0ZpbGUsIG9sZEZpbGUpIHtcbiAgICAgIGlmIChuZXdGaWxlICYmICFvbGRGaWxlKSB7XG4gICAgICAgIGNvbnN0IHsgaWQsIG5hbWUsIHNpemUgfSA9IG5ld0ZpbGVcbiAgICAgICAgdGhpcy5hZGRGaWxlKHsgaWQsIG5hbWUsIHNpemUsIHVwbG9hZDogbmV3RmlsZSB9KVxuICAgICAgfVxuICAgICAgaWYgKG5ld0ZpbGUgJiYgb2xkRmlsZSkge1xuICAgICAgICBjb25zdCB7IHN1Y2Nlc3MsIGVycm9yIH0gPSBuZXdGaWxlXG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICAgICAgY29uc3QgZmlsZSA9IG5ld0ZpbGUucmVzcG9uc2VbMF1cbiAgICAgICAgICBpZiAoZmlsZSkge1xuICAgICAgICAgICAgZmlsZS51cGxvYWQgPSBuZXdGaWxlXG4gICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSB1cGxvYWQgZmlsZSBvYmplY3Qgd2l0aCB0aGUgZmlsZSBvYmplY3QgcmVjZWl2ZWRcbiAgICAgICAgICAgIC8vIGZyb20gdGhlIHVwbG9hZCByZXNwb25zZS5cbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUZpbGUobmV3RmlsZSwgZmlsZSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVGaWxlKG5ld0ZpbGUpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGVycm9yKSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVGaWxlKG5ld0ZpbGUpXG4gICAgICAgICAgY29uc3QgdGV4dCA9IChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWJvcnQ6ICdVcGxvYWQgYWJvcnRlZCcsXG4gICAgICAgICAgICAgIGRlbmllZDogJ1VwbG9hZCBkZW5pZWQnLFxuICAgICAgICAgICAgICBleHRlbnNpb246IGBVbnN1cHBvcnRlZCBmaWxlLXR5cGU6ICR7bmV3RmlsZS5uYW1lfWAsXG4gICAgICAgICAgICAgIG5ldHdvcms6ICdOZXR3b3JrIGVycm9yIGVuY291bnRlcmVkIGR1cmluZyB1cGxvYWQnLFxuICAgICAgICAgICAgICBzZXJ2ZXI6ICdTZXJ2ZXIgZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHVwbG9hZCcsXG4gICAgICAgICAgICAgIHNpemU6IGBGaWxlIGlzIHRvbyBsYXJnZTogJHtmb3JtYXRGaWxlU2l6ZShuZXdGaWxlLnNpemUpfWAsXG4gICAgICAgICAgICAgIHRpbWVvdXQ6ICdUaW1lb3V0IG9jY3VycmVkIGR1cmluZyB1cGxvYWQnXG4gICAgICAgICAgICB9W2Vycm9yXSB8fFxuICAgICAgICAgICAgYFVua25vd24gRmlsZSBVcGxvYWQgRXJyb3I6ICcke2Vycm9yfSdgXG4gICAgICAgICAgKVxuICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgIHRpdGxlOiAnRmlsZSBVcGxvYWQgRXJyb3InLFxuICAgICAgICAgICAgdGV4dFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25JbnB1dEZpbHRlcihuZXdGaWxlIC8qLCBvbGRGaWxlLCBwcmV2ZW50ICovKSB7XG4gICAgICBjb25zdCB4aHIgPSBuZXdGaWxlPy54aHJcbiAgICAgIGlmICh0aGlzLmFwaS5jb3JzPy5jcmVkZW50aWFscyAmJiB4aHIgJiYgIXhoci53aXRoQ3JlZGVudGlhbHMpIHtcbiAgICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgb25DbGlja0Rvd25sb2FkKGZpbGUsIGluZGV4KSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHRoaXMuZG93bmxvYWRVcmxzW2luZGV4XSlcbiAgICAgICAgY29uc3QgYmxvYiA9IGF3YWl0IHJlc3BvbnNlLmJsb2IoKVxuICAgICAgICB0aGlzLmRvd25sb2FkKHtcbiAgICAgICAgICBmaWxlbmFtZTogZmlsZS5uYW1lLFxuICAgICAgICAgIHVybDogVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKVxuICAgICAgICB9KVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25DbGlja1VwbG9hZChldmVudCkge1xuICAgICAgLy8gRGVsZWdhdGUgdGhlIGNsaWNrIGV2ZW50IHRvIHRoZSBoaWRkZW4gZmlsZSBpbnB1dC5cbiAgICAgIHRoaXMudXBsb2FkLiRlbC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgIG5ldyBldmVudC5jb25zdHJ1Y3RvcihldmVudC50eXBlLCBldmVudClcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHsgc2NoZW1hLCB2YWx1ZSB9KSB7XG4gICAgLy8gRmlsdGVyIG91dCBhbGwgbmV3bHkgYWRkZWQgZmlsZXMgdGhhdCB3ZXJlbid0IGFjdHVhbGx5IHVwbG9hZGVkLlxuICAgIGNvbnN0IGZpbGVzID0gYXNGaWxlcyh2YWx1ZSlcbiAgICAgIC5tYXAoKHsgdXBsb2FkLCAuLi5maWxlIH0pID0+ICghdXBsb2FkIHx8IHVwbG9hZC5zdWNjZXNzID8gZmlsZSA6IG51bGwpKVxuICAgICAgLmZpbHRlcihmaWxlID0+IGZpbGUpXG4gICAgcmV0dXJuIHNjaGVtYS5tdWx0aXBsZSA/IGZpbGVzIDogZmlsZXNbMF0gfHwgbnVsbFxuICB9XG59KVxuXG5mdW5jdGlvbiBhc0ZpbGVzKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA/IGFzQXJyYXkodmFsdWUpIDogW11cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXVwbG9hZCB7XG4gIC5kaXRvLXRhYmxlIHtcbiAgICB0cixcbiAgICAuZGl0by1jZWxsLWVkaXQtYnV0dG9ucyB7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIH1cbiAgfVxuXG4gICZfX3NpemUsXG4gICZfX3N0YXR1cyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgfVxuXG4gICYgJl9faW5wdXQge1xuICAgIC8vIFNlZSBgb25DbGlja1VwbG9hZCgpYCBtZXRob2QgZm9yIGRldGFpbHMuXG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIH1cblxuICAmX19mb290ZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuXG4gICAgLmRpdG8tcHJvZ3Jlc3Mge1xuICAgICAgZmxleDogYXV0bztcbiAgICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZztcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBtb3VudGVkKG5vZGUsIGJpbmRpbmcpIHtcbiAgICBvYnNlcnZlUmVzaXplKG5vZGUsIGJpbmRpbmcudmFsdWUsIGJpbmRpbmcuYXJnKVxuICB9LFxuXG4gIHVubW91bnRlZChub2RlLCBiaW5kaW5nKSB7XG4gICAgdW5vYnNlcnZlUmVzaXplKG5vZGUsIGJpbmRpbmcudmFsdWUsIGJpbmRpbmcuYXJnKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvYnNlcnZlUmVzaXplKG5vZGUsIGhhbmRsZXIsIG9wdGlvbnMpIHtcbiAgT2JzZXJ2ZXIuZ2V0T2JzZXJ2ZXIob3B0aW9ucykub2JzZXJ2ZShub2RlLCBoYW5kbGVyKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5vYnNlcnZlUmVzaXplKG5vZGUsIGhhbmRsZXIsIG9wdGlvbnMpIHtcbiAgT2JzZXJ2ZXIuZ2V0T2JzZXJ2ZXIob3B0aW9ucykudW5vYnNlcnZlKG5vZGUsIGhhbmRsZXIpXG59XG5cbmV4cG9ydCBjb25zdCBpc1Jlc2l6ZVN1cHBvcnRlZCA9IHR5cGVvZiBSZXNpemVPYnNlcnZlciAhPT0gJ3VuZGVmaW5lZCdcblxuY29uc3Qgb2JzZXJ2ZXJzID0ge31cblxuY2xhc3MgT2JzZXJ2ZXIge1xuICBjb25zdHJ1Y3RvcihrZXksIG9wdGlvbnMpIHtcbiAgICB0aGlzLmtleSA9IGtleVxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNcbiAgICB0aGlzLm9ic2VydmVyID0gaXNSZXNpemVTdXBwb3J0ZWRcbiAgICAgID8gbmV3IFJlc2l6ZU9ic2VydmVyKGVudHJpZXMgPT4gdGhpcy5oYW5kbGUoZW50cmllcykpXG4gICAgICA6IG51bGxcbiAgICB0aGlzLmhhbmRsZXJzQnlOb2RlID0gbmV3IFdlYWtNYXAoKVxuICAgIHRoaXMubm9kZUNvdW50ID0gMFxuICB9XG5cbiAgb2JzZXJ2ZShub2RlLCBoYW5kbGVyKSB7XG4gICAgbGV0IGhhbmRsZXJzID0gdGhpcy5oYW5kbGVyc0J5Tm9kZS5nZXQobm9kZSlcbiAgICBpZiAoIWhhbmRsZXJzKSB7XG4gICAgICBoYW5kbGVycyA9IG5ldyBTZXQoKVxuICAgICAgdGhpcy5oYW5kbGVyc0J5Tm9kZS5zZXQobm9kZSwgaGFuZGxlcnMpXG4gICAgICB0aGlzLm9ic2VydmVyPy5vYnNlcnZlKG5vZGUsIHRoaXMub3B0aW9ucylcbiAgICAgIHRoaXMubm9kZUNvdW50KytcbiAgICB9XG4gICAgaGFuZGxlcnMuYWRkKGhhbmRsZXIpXG4gIH1cblxuICB1bm9ic2VydmUobm9kZSwgaGFuZGxlcikge1xuICAgIGNvbnN0IGhhbmRsZXJzID0gdGhpcy5oYW5kbGVyc0J5Tm9kZS5nZXQobm9kZSlcbiAgICBpZiAoaGFuZGxlcnM/LmRlbGV0ZShoYW5kbGVyKSAmJiBoYW5kbGVycy5zaXplID09PSAwKSB7XG4gICAgICB0aGlzLmhhbmRsZXJzQnlOb2RlLmRlbGV0ZShub2RlKVxuICAgICAgdGhpcy5vYnNlcnZlcj8udW5vYnNlcnZlKG5vZGUpXG4gICAgICBpZiAoLS10aGlzLm5vZGVDb3VudCA9PT0gMCkge1xuICAgICAgICBkZWxldGUgb2JzZXJ2ZXJzW3RoaXMua2V5XVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZShlbnRyaWVzKSB7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnNCeU5vZGUuZ2V0KGVudHJ5LnRhcmdldClcbiAgICAgIGlmIChoYW5kbGVycykge1xuICAgICAgICBjb25zdCBldmVudCA9IHtcbiAgICAgICAgICB0YXJnZXQ6IGVudHJ5LnRhcmdldCxcbiAgICAgICAgICBjb250ZW50UmVjdDogZW50cnkuY29udGVudFJlY3QsXG4gICAgICAgICAgLy8gVXNlIGBhc0FycmF5YCBzaW5jZSBGaXJlZm94IGJlZm9yZSB2OTIgcmV0dXJucyB0aGVzZSBhcyBvYmplY3RzOlxuICAgICAgICAgIGJvcmRlckJveFNpemU6IGFzQXJyYXkoZW50cnkuYm9yZGVyQm94U2l6ZSksXG4gICAgICAgICAgY29udGVudEJveFNpemU6IGFzQXJyYXkoZW50cnkuY29udGVudEJveFNpemUpLFxuICAgICAgICAgIGRldmljZVBpeGVsQ29udGVudEJveFNpemU6IGFzQXJyYXkoZW50cnkuZGV2aWNlUGl4ZWxDb250ZW50Qm94U2l6ZSlcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgaGFuZGxlcnMpIHtcbiAgICAgICAgICBoYW5kbGVyKGV2ZW50KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldE9ic2VydmVyKHsgYm94ID0gJ2NvbnRlbnQtYm94JyB9ID0ge30pIHtcbiAgICBjb25zdCBvcHRpb25zID0geyBib3ggfVxuICAgIGNvbnN0IGtleSA9IEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpXG4gICAgb2JzZXJ2ZXJzW2tleV0gfHw9IG5ldyBPYnNlcnZlcihrZXksIG9wdGlvbnMpXG4gICAgcmV0dXJuIG9ic2VydmVyc1trZXldXG4gIH1cbn1cbiIsImV4cG9ydCBkZWZhdWx0IFtcbiAgJ2NyZWF0ZScsICdjcmVhdGVkJyxcbiAgJ3NhdmUnLCAnc2F2ZWQnLFxuICAnYXBwbHknLCAnYXBwbGllZCcsXG4gICdzdWJtaXQnLCAnc3VibWl0dGVkJyxcbiAgJ2RlbGV0ZScsICdkZWxldGVkJyxcbiAgJ3JlbW92ZScsICdyZW1vdmVkJyxcbiAgJ2NsZWFyJywgJ2NsZWFyZWQnLFxuICAnZWRpdCcsICdlZGl0ZWQnLFxuICAnY2xvc2UnLCAnY2xvc2VkJyxcbiAgJ2NhbmNlbCcsICdjYW5jZWxsZWQnLFxuICAnZHJhZycsICdkcmFnZ2VkJyxcbiAgJ2xvZ2luJywgJ2xvZ2dlZCBpbidcbl0ucmVkdWNlKCh2ZXJicywgdmVyYikgPT4ge1xuICB2ZXJic1t2ZXJiXSA9IHZlcmJcbiAgcmV0dXJuIHZlcmJzXG59LCB7fSlcbiIsImltcG9ydCB7IGNyZWF0ZUFwcCwgaCBhcyBjcmVhdGVFbGVtZW50IH0gZnJvbSAndnVlJ1xuaW1wb3J0IHsgY3JlYXRlUm91dGVyLCBjcmVhdGVXZWJIaXN0b3J5IH0gZnJvbSAndnVlLXJvdXRlcidcbmltcG9ydCBWdWVOb3RpZmljYXRpb25zIGZyb20gJ0BreXZnL3Z1ZTMtbm90aWZpY2F0aW9uJ1xuaW1wb3J0IHtcbiAgaXNTdHJpbmcsXG4gIGlzQWJzb2x1dGVVcmwsXG4gIGFzc2lnbkRlZXBseSxcbiAgaHlwaGVuYXRlLFxuICBjYW1lbGl6ZSxcbiAgZGVmYXVsdEZvcm1hdHNcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCAqIGFzIGNvbXBvbmVudHMgZnJvbSAnLi9jb21wb25lbnRzL2luZGV4LmpzJ1xuaW1wb3J0ICogYXMgdHlwZXMgZnJvbSAnLi90eXBlcy9pbmRleC5qcydcbmltcG9ydCBEaXRvUm9vdCBmcm9tICcuL2NvbXBvbmVudHMvRGl0b1Jvb3QudnVlJ1xuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgUmVzaXplRGlyZWN0aXZlIGZyb20gJy4vZGlyZWN0aXZlcy9yZXNpemUuanMnXG5pbXBvcnQgeyBnZXRSZXNvdXJjZSB9IGZyb20gJy4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBmb3JtYXRRdWVyeSB9IGZyb20gJy4vdXRpbHMvcm91dGUuanMnXG5pbXBvcnQgdmVyYnMgZnJvbSAnLi92ZXJicy5qcydcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b0FkbWluIHtcbiAgY29uc3RydWN0b3IoZWwsIHtcbiAgICAvLyBgZGl0b2AgY29udGFpbnMgdGhlIGJhc2UgYW5kIGFwaSBzZXR0aW5ncyBwYXNzZWQgZnJvbSBgQWRtaW5Db250cm9sbGVyYFxuICAgIGRpdG8gPSB7fSxcbiAgICBhcGksXG4gICAgdmlld3MgPSB7fSxcbiAgICAuLi5vcHRpb25zXG4gIH0gPSB7fSkge1xuICAgIHRoaXMuZWwgPSBlbFxuICAgIC8vIE1lcmdlIGluIGBhcGlgIHNldHRpbmdzIGFzIHBhc3NlZCBmcm9tIGBjb25maWcuYWRtaW5gIGFuZCB0aHJvdWdoIHRoZVxuICAgIC8vIGBBZG1pbkNvbnRyb2xsZXJgIHdpdGggYGFwaWAgdmFsdWVzIGZyb20gZnJvbSAnYWRtaW4vaW5kZXguanMnXG4gICAgLy8gTk9URTogYEFkbWluQ29udHJvbGxlcmAgcHJvdmlkZXMgYGRpdG8uYXBpLmJhc2VgXG4gICAgdGhpcy5hcGkgPSBhcGkgPSBhc3NpZ25EZWVwbHkoeyBiYXNlOiAnLycgfSwgZGl0by5hcGksIGFwaSlcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zXG5cbiAgICAvLyBTZXR1cCBkZWZhdWx0IGFwaSBzZXR0aW5nczpcbiAgICBhcGkubG9jYWxlIHx8PSAnZW4tVVMnXG4gICAgYXBpLmZvcm1hdHMgPSBhc3NpZ25EZWVwbHkoe30sIGRlZmF1bHRGb3JtYXRzLCBhcGkuZm9ybWF0cylcbiAgICBhcGkucmVxdWVzdCB8fD0gb3B0aW9ucyA9PiByZXF1ZXN0KGFwaSwgb3B0aW9ucylcbiAgICBhcGkuZ2V0QXBpVXJsIHx8PSBvcHRpb25zID0+IGdldEFwaVVybChhcGksIG9wdGlvbnMpXG4gICAgYXBpLmlzQXBpVXJsIHx8PSB1cmwgPT4gaXNBcGlVcmwoYXBpLCB1cmwpXG4gICAgLy8gU2V0dGluZyBgYXBpLm5vcm1hbGl6ZVBhdGhzID0gdHJ1ZSAocGx1cmFsKSBzZXRzIGJvdGg6XG4gICAgLy8gYGFwaS5ub3JtYWxpemVQYXRoID0gaHlwaGVuYXRlYCBhbmQgYGFwaS5kZW5vcm1hbGl6ZVBhdGggPSBjYW1lbGl6ZWBcbiAgICBhcGkubm9ybWFsaXplUGF0aCB8fD0gYXBpLm5vcm1hbGl6ZVBhdGhzID8gaHlwaGVuYXRlIDogdmFsID0+IHZhbFxuICAgIGFwaS5kZW5vcm1hbGl6ZVBhdGggfHw9IGFwaS5ub3JtYWxpemVQYXRocyA/IGNhbWVsaXplIDogdmFsID0+IHZhbFxuXG4gICAgLy8gQWxsb3cgZGVmaW5pdGlvbiBvZiBkZWZhdWx0cyBmb3IgYWRtaW4gY29tcG9uZW50IHR5cGVzLCBuZXN0ZWQgcGVyIHR5cGU6XG4gICAgLy8gYXBpLmRlZmF1bHRzID0ge1xuICAgIC8vICAgJ211bHRpc2VsZWN0Jzoge1xuICAgIC8vICAgICBzZWxlY3RhYmxlOiB0cnVlXG4gICAgLy8gICB9LFxuICAgIC8vICAgJ2Zha2UtdHlwZSc6IHNjaGVtYSA9PiB7XG4gICAgLy8gICAgIC8vIFJldHVybiBkZWZhdWx0cywgb3IgZGlyZWN0bHkgbW9kaWZ5IHRoZSBzY2hlbWE6XG4gICAgLy8gICAgIE9iamVjdC5hc3NpZ24oc2NoZW1hLCB7XG4gICAgLy8gICAgICAgdHlwZTogJ3JlYWwtdHlwZScsXG4gICAgLy8gICAgICAgZm9ybWF0OiAoeyB2YWx1ZSB9KSA9PiBgRm9ybWF0dGVkICR7dmFsdWV9YCxcbiAgICAvLyAgICAgICBwcm9jZXNzOiAoeyB2YWx1ZSB9KSA9PiBgUHJvY2Vzc2VkICR7dmFsdWV9YFxuICAgIC8vICAgICB9KVxuICAgIC8vICAgfVxuICAgIC8vIH1cblxuICAgIGFwaS5kZWZhdWx0cyB8fD0ge31cblxuICAgIC8vIEFsbG93IHRoZSBjb25maWd1cmF0aW9uIG9mIGFsbCBhdXRoIHJlc291cmNlcywgbGlrZSBzbzpcbiAgICAvLyBhcGkudXNlcnMgPSB7XG4gICAgLy8gICBwYXRoOiAnL2FkbWlucycsXG4gICAgLy8gICAvLyBUaGVzZSBhcmUgdGhlIGRlZmF1bHRzOlxuICAgIC8vICAgbG9naW46IHtcbiAgICAvLyAgICAgcGF0aDogJ2xvZ2luJyxcbiAgICAvLyAgICAgbWV0aG9kOiAncG9zdCdcbiAgICAvLyAgIH0sXG4gICAgLy8gICBsb2dvdXQ6IHtcbiAgICAvLyAgICAgcGF0aDogJ2xvZ291dCcsXG4gICAgLy8gICAgIG1ldGhvZDogJ3Bvc3QnXG4gICAgLy8gICB9LFxuICAgIC8vICAgc2Vzc2lvbjoge1xuICAgIC8vICAgICBwYXRoOiAnc2Vzc2lvbicsXG4gICAgLy8gICAgIG1ldGhvZDogJ2dldCdcbiAgICAvLyAgIH1cbiAgICAvLyB9XG4gICAgY29uc3QgdXNlcnMgPSBnZXRSZXNvdXJjZShhcGkudXNlcnMsIHtcbiAgICAgIHR5cGU6ICdjb2xsZWN0aW9uJ1xuICAgIH0pIHx8IHt9XG4gICAgdXNlcnMubG9naW4gPSBnZXRSZXNvdXJjZSh1c2Vycy5sb2dpbiB8fCAnbG9naW4nLCB7XG4gICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICAgIHBhcmVudDogdXNlcnNcbiAgICB9KVxuICAgIHVzZXJzLmxvZ291dCA9IGdldFJlc291cmNlKHVzZXJzLmxvZ291dCB8fCAnbG9nb3V0Jywge1xuICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgICBwYXJlbnQ6IHVzZXJzXG4gICAgfSlcbiAgICB1c2Vycy5zZXNzaW9uID0gZ2V0UmVzb3VyY2UodXNlcnMuc2Vzc2lvbiB8fCAnc2Vzc2lvbicsIHtcbiAgICAgIG1ldGhvZDogJ2dldCcsXG4gICAgICBwYXJlbnQ6IHVzZXJzXG4gICAgfSlcbiAgICBhcGkudXNlcnMgPSB1c2Vyc1xuXG4gICAgLy8gQWxsb3cgb3ZlcnJpZGluZyBvZiByZXNvdXJjZSBwYXRoIGhhbmRsZXJzOlxuICAgIC8vIGFwaS5yZXNvdXJjZXMgPSB7XG4gICAgLy8gICBjb2xsZWN0aW9uKHJlc291cmNlKSB7XG4gICAgLy8gICAgIHJldHVybiByZXNvdXJjZS5wYXJlbnRcbiAgICAvLyAgICAgICA/IGAke3Jlc291cmNlLnBhdGh9PyR7cmVzb3VyY2UucGFyZW50LnBhdGh9X2lkPSR7XG4gICAgLy8gICAgICAgICAgcmVzb3VyY2UucGFyZW50LmlkfWBcbiAgICAvLyAgICAgICA6IHJlc291cmNlLnBhdGhcbiAgICAvLyAgIH1cbiAgICAvLyB9XG5cbiAgICBhcGkucmVzb3VyY2VzID0ge1xuICAgICAgYW55KHJlc291cmNlKSB7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzW3Jlc291cmNlPy50eXBlXSB8fCB0aGlzLmRlZmF1bHRcbiAgICAgICAgcmV0dXJuIHJlc291cmNlICYmIGhhbmRsZXIuY2FsbCh0aGlzLCByZXNvdXJjZSlcbiAgICAgIH0sXG5cbiAgICAgIGRlZmF1bHQocmVzb3VyY2UpIHtcbiAgICAgICAgY29uc3QgcGFyZW50UGF0aCA9IHRoaXMuYW55KHJlc291cmNlLnBhcmVudClcbiAgICAgICAgcmV0dXJuIHBhcmVudFBhdGhcbiAgICAgICAgICA/IGAke3BhcmVudFBhdGh9LyR7cmVzb3VyY2UucGF0aH1gXG4gICAgICAgICAgOiByZXNvdXJjZS5wYXRoXG4gICAgICB9LFxuXG4gICAgICBjb2xsZWN0aW9uKHJlc291cmNlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHQocmVzb3VyY2UpXG4gICAgICB9LFxuXG4gICAgICBtZW1iZXIocmVzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuZGVmYXVsdChyZXNvdXJjZSl9LyR7cmVzb3VyY2UuaWR9YFxuICAgICAgfSxcblxuICAgICAgdXBsb2FkKHJlc291cmNlKSB7XG4gICAgICAgIC8vIERpdG8uanMgU2VydmVyIGhhbmRsZXMgdXBsb2FkIHJvdXRlcyBvbiB0aGUgY29sbGVjdGlvbiByZXNvdXJjZTpcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29sbGVjdGlvbihyZXNvdXJjZS5wYXJlbnQpfS91cGxvYWQvJHtyZXNvdXJjZS5wYXRofWBcbiAgICAgIH0sXG5cbiAgICAgIC4uLmFwaS5yZXNvdXJjZXNcbiAgICB9XG5cbiAgICAvLyBBbGxvdyBvdmVycmlkaW5nIC8gZXh0ZW5kaW5nIG9mIGhlYWRlcnM6XG4gICAgLy8gYXBpLmhlYWRlcnMgPSB7XG4gICAgLy8gICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgLy8gfVxuICAgIGFwaS5oZWFkZXJzID0ge1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIC4uLmFwaS5oZWFkZXJzXG4gICAgfVxuXG4gICAgaWYgKGlzU3RyaW5nKGVsKSkge1xuICAgICAgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGVsKVxuICAgIH1cblxuICAgIGNvbnN0IGFwcCA9ICh0aGlzLmFwcCA9IGNyZWF0ZUFwcCh7XG4gICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIERpdG9Sb290LFxuICAgICAgICBWdWVOb3RpZmljYXRpb25zLFxuICAgICAgICAvLyBUaGlzIG1heSBvbmx5IGJlIG5lZWRlZCB0byBhdm9pZCB0cmVlLXNoYWNraW5nIG9mIHRoZXNlIGNvbXBvbmVudHMsXG4gICAgICAgIC8vIHNpbmNlIHRoZXkgYWN0dWFsbHkgaGFuZGxlIHJlZ2lzdHJ5IGludGVybmFsbHkgYWxyZWFkeS5cbiAgICAgICAgLy8gVE9ETzogUmVtb3ZlIHRoaXMgb25jZSB3ZSBoYXZlIGEgYmV0dGVyIHNvbHV0aW9uLlxuICAgICAgICAuLi5jb21wb25lbnRzLFxuICAgICAgICAuLi50eXBlc1xuICAgICAgfSxcblxuICAgICAgLy8gTW9zdCBpbmplY3RzIGFyZSBkZWZpbmVkIGFzIGZ1bmN0aW9ucywgdG8gcHJlc2VydmUgcmVhY3RpdmVuZXNzIGFjcm9zc1xuICAgICAgLy8gcHJvdmlkZS9pbmplY3QsIHNlZTpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUvaXNzdWVzLzcwMTcjaXNzdWVjb21tZW50LTQ4MDkwNjY5MVxuICAgICAgcHJvdmlkZToge1xuICAgICAgICBhcGksXG4gICAgICAgIC8vIEEgZGVmYXVsdCBsaXN0IG9mIHZlcmJzIGFyZSBwcm92aWRlZCBieSAkdmVyYnMoKSBhbmQgY2FuIGJlXG4gICAgICAgIC8vIG92ZXJyaWRkZW4gYXQgYW55IHBvaW50IGluIHRoZSBjb21wb25lbnQgaGllcmFyY2h5LlxuICAgICAgICAkdmVyYnM6ICgpID0+IHZlcmJzLFxuICAgICAgICAvLyBQcm92aWRlIGRlZmF1bHRzIHNvIERpdG9NaXhpbiBjYW4gaW5qZWN0IHRoZW0gZm9yIGFsbCBjb21wb25lbnRzOlxuICAgICAgICAvLyAgIGluamVjdDogWyAgJyRpc1BvcHVsYXRlZCcsICckc2NoZW1hQ29tcG9uZW50JywgJyRyb3V0ZUNvbXBvbmVudCcgXVxuICAgICAgICAkdmlld3M6ICgpID0+IHt9LFxuICAgICAgICAkaXNQb3B1bGF0ZWQ6ICgpID0+IHRydWUsXG4gICAgICAgICRwYXJlbnRDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRzY2hlbWFDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRzY2hlbWFQYXJlbnRDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRyb3V0ZUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJGRhdGFDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRzb3VyY2VDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRyZXNvdXJjZUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJGRpYWxvZ0NvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHBhbmVsQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiBudWxsXG4gICAgICB9LFxuXG4gICAgICByZW5kZXI6ICgpID0+XG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoRGl0b1Jvb3QsIHtcbiAgICAgICAgICByZWY6ICdyb290JyxcbiAgICAgICAgICBjbGFzczogZGl0by5zZXR0aW5ncy5yb290Q2xhc3MsXG4gICAgICAgICAgdW5yZXNvbHZlZFZpZXdzOiB2aWV3cyxcbiAgICAgICAgICBvcHRpb25zXG4gICAgICAgIH0pXG4gICAgfSkpXG5cbiAgICAvLyBQcmV2ZW50IGVuZGxlc3MgbG9vcHMgb2YgZXJyb3IgbWVzc2FnZXMgZHVyaW5nIHJlbmRlciBmdW5jdGlvbnMgYnlcbiAgICAvLyBzZXR0aW5nIGEgY3VzdG9tIGVycm9yIGhhbmRsZXIuXG4gICAgYXBwLmNvbmZpZy5lcnJvckhhbmRsZXIgPSBjb25zb2xlLmVycm9yXG5cbiAgICBhcHAudXNlKFZ1ZU5vdGlmaWNhdGlvbnMsIHtcbiAgICAgIGNvbXBvbmVudE5hbWU6ICdWdWVOb3RpZmljYXRpb25zJyxcbiAgICAgIG5hbWU6ICdub3RpZnknXG4gICAgfSlcblxuICAgIGFwcC5kaXJlY3RpdmUoJ3Jlc2l6ZScsIFJlc2l6ZURpcmVjdGl2ZSlcblxuICAgIGFwcC51c2UoXG4gICAgICBjcmVhdGVSb3V0ZXIoe1xuICAgICAgICAvLyBTdGFydCB3aXRoIGEgY2F0Y2gtYWxsIHJvdXRlLCB0byBiZSByZXBsYWNlZCBieSB0aGUgYWN0dWFsIHJvdXRlc1xuICAgICAgICAvLyBvbmNlIHRoZSBzY2hlbWFzIGFyZSBsb2FkZWQsIHRvIHByZXZlbnQgdnVlLXJvdXRlciBmcm9tIGNvbXBsYWluaW5nLFxuICAgICAgICAvLyBzZWU6IGByZXNvbHZlVmlld3MoKWAgaW4gYERpdG9Sb290YCBmb3IgdGhlIGFjdHVhbCByb3V0ZSBzZXR1cC5cbiAgICAgICAgcm91dGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ2NhdGNoLWFsbCcsXG4gICAgICAgICAgICBwYXRoOiAnLzpfKC4qKScsXG4gICAgICAgICAgICBjb21wb25lbnRzOiB7fVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgaGlzdG9yeTogY3JlYXRlV2ViSGlzdG9yeShkaXRvLmJhc2UpLFxuICAgICAgICBsaW5rQWN0aXZlQ2xhc3M6ICcnLFxuICAgICAgICBsaW5rRXhhY3RBY3RpdmVDbGFzczogJydcbiAgICAgIH0pXG4gICAgKVxuXG4gICAgZWwuY2xhc3NMaXN0LmFkZCgnZGl0by1hcHAnKVxuICAgIGFwcC5tb3VudChlbClcbiAgfVxuXG4gIHJlZ2lzdGVyKHR5cGUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIodHlwZSwgb3B0aW9ucylcbiAgfVxufVxuXG5jbGFzcyBSZXF1ZXN0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHJlc3BvbnNlKSB7XG4gICAgc3VwZXIoXG4gICAgICBgUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZTogJHtyZXNwb25zZS5zdGF0dXN9ICgke1xuICAgICAgICByZXNwb25zZS5zdGF0dXNUZXh0XG4gICAgICB9KWBcbiAgICApXG4gICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVxdWVzdChhcGksIHtcbiAgdXJsLFxuICBtZXRob2QgPSAnZ2V0JyxcbiAgcXVlcnkgPSBudWxsLFxuICBoZWFkZXJzID0gbnVsbCxcbiAgZGF0YSA9IG51bGwsXG4gIHNpZ25hbCA9IG51bGxcbn0pIHtcbiAgY29uc3QgaXNBcGlVcmwgPSBhcGkuaXNBcGlVcmwodXJsKVxuXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYXBpLmdldEFwaVVybCh7IHVybCwgcXVlcnkgfSksIHtcbiAgICBtZXRob2Q6IG1ldGhvZC50b1VwcGVyQ2FzZSgpLFxuICAgIC4uLihkYXRhICYmIHsgYm9keTogSlNPTi5zdHJpbmdpZnkoZGF0YSkgfSksXG4gICAgaGVhZGVyczoge1xuICAgICAgLi4uKGlzQXBpVXJsICYmIGFwaS5oZWFkZXJzKSxcbiAgICAgIC4uLmhlYWRlcnNcbiAgICB9LFxuICAgIGNyZWRlbnRpYWxzOlxuICAgICAgaXNBcGlVcmwgJiYgYXBpLmNvcnM/LmNyZWRlbnRpYWxzXG4gICAgICAgID8gJ2luY2x1ZGUnXG4gICAgICAgIDogJ3NhbWUtb3JpZ2luJyxcbiAgICBzaWduYWxcbiAgfSlcblxuICBpZiAocmVzcG9uc2UuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpPy5pbmNsdWRlcygnYXBwbGljYXRpb24vanNvbicpKSB7XG4gICAgcmVzcG9uc2UuZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKVxuICB9XG5cbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHRocm93IG5ldyBSZXF1ZXN0RXJyb3IocmVzcG9uc2UpXG4gIH1cbiAgcmV0dXJuIHJlc3BvbnNlXG59XG5cbmZ1bmN0aW9uIGlzQXBpVXJsKGFwaSwgdXJsKSB7XG4gIHJldHVybiAhaXNBYnNvbHV0ZVVybCh1cmwpIHx8IHVybC5zdGFydHNXaXRoKGFwaS51cmwpXG59XG5cbmZ1bmN0aW9uIGdldEFwaVVybChhcGksIHsgdXJsLCBxdWVyeSB9KSB7XG4gIGlmICghdXJsLnN0YXJ0c1dpdGgoYXBpLnVybCkgJiYgIWlzQWJzb2x1dGVVcmwodXJsKSkge1xuICAgIHVybCA9IGNvbWJpbmVVcmxzKGFwaS51cmwsIHVybClcbiAgfVxuICAvLyBTdXBwb3J0IG9wdGlvbmFsIHF1ZXJ5IHBhcmFtZXRlcnMsIHRvIGJlIGFyZSBhZGRlZCB0byB0aGUgVVJMLlxuICBjb25zdCBzZWFyY2ggPSBmb3JtYXRRdWVyeShxdWVyeSlcbiAgcmV0dXJuIHNlYXJjaCA/IGAke3VybH0ke3VybC5pbmNsdWRlcygnPycpID8gJyYnIDogJz8nfSR7c2VhcmNofWAgOiB1cmxcbn1cblxuZnVuY3Rpb24gY29tYmluZVVybHMoYmFzZVVybCwgcmVsYXRpdmVVcmwpIHtcbiAgLy8gVXNlIHNhbWUgYXBwcm9hY2ggYXMgYXhpb3MgYGNvbWJpbmVVUkxzKClgIHRvIGpvaW4gYmFzZVVybCAmIHJlbGF0aXZlVXJsOlxuICByZXR1cm4gYCR7YmFzZVVybC5yZXBsYWNlKC9cXC8rJC8sICcnKX0vJHtyZWxhdGl2ZVVybC5yZXBsYWNlKC9eXFwvKy8sICcnKX1gXG59XG4iXSwibmFtZXMiOlsicGFyc2VVc2VyQWdlbnQiLCJ1c2VyQWdlbnQiLCJhZ2VudCIsInVhIiwib3MiLCJwbGF0Zm9ybSIsIm1hdGNoIiwiYnJvd3NlciIsInYxIiwidjIiLCJydiIsInZlcnNpb24iLCJhcHBTdGF0ZSIsInJlYWN0aXZlIiwiYXBwZW5kRGF0YVBhdGgiLCJkYXRhUGF0aCIsInRva2VuIiwicGFyc2VQYXJlbnREYXRhUGF0aCIsInBhdGgiLCJwYXJzZURhdGFQYXRoIiwicGFyc2VJdGVtRGF0YVBhdGgiLCJuZXN0ZWQiLCJnZXRJdGVtRGF0YVBhdGgiLCJub3JtYWxpemVEYXRhUGF0aCIsInBhcnNlUGFyZW50SXRlbURhdGFQYXRoIiwiaXNJbnRlZ2VyIiwiZ2V0UGFyZW50SXRlbURhdGFQYXRoIiwiZ2V0SXRlbSIsInJvb3RJdGVtIiwiZ2V0VmFsdWVBdERhdGFQYXRoIiwiZ2V0UGFyZW50SXRlbSIsImdldExhc3REYXRhUGF0aFRva2VuIiwiZ2V0TGFzdERhdGFQYXRoTmFtZSIsImdldExhc3REYXRhUGF0aEluZGV4IiwiaW5kZXgiLCJ0ZW1wb3JhcnlJZCIsInNldFRlbXBvcmFyeUlkIiwiZGF0YSIsImlkS2V5IiwiaXNUZW1wb3JhcnlJZCIsImlkIiwiaXNSZWZlcmVuY2UiLCJoYXNPd25Qcm9wZXJ0eSIsImNvbnRleHRzIiwidG9PYmplY3QiLCJjb250ZXh0IiwicmF3U3RhcnQiLCJ0b1JhdyIsInJhdyIsIm9iamVjdCIsImdldCIsImtleSIsImRlZmF1bHRWYWx1ZSIsInZhbHVlIiwiaXNGdW5jdGlvbiIsInNldCIsIkRpdG9Db250ZXh0IiwiY29tcG9uZW50IiwiaXRlbSIsIm9wdGlvbnMiLCJsb2NhdGlvbiIsInJlc291cmNlIiwiRW1pdHRlck1peGluIiwiZXZlbnQiLCJjYWxsYmFjayIsImlzQXJyYXkiLCJldiIsImlzUGxhaW5PYmplY3QiLCJsaXN0ZW5lcnMiLCJjYWxsYmFja3MiLCJvbiIsImFyZ3MiLCJlbnRyeSIsIl9hIiwiY2IiLCJxdWV1ZSIsInJlc29sdmUiLCJuZXh0IiwicmVzdWx0IiwicmVzIiwiZXJyb3IiLCJ0YXJnZXQiLCJWYWx1ZU1peGluIiwiY29tcHV0ZVZhbHVlIiwiZm9ybWF0IiwicGFyc2UiLCJDb250ZXh0TWl4aW4iLCJnZXRQcm9jZXNzZWRQYXJlbnREYXRhIiwic2NoZW1hQ29tcG9uZW50IiwiaXNDcmVkaXRDYXJkIiwiZGVjaW1hbHMiLCJpc0RvbWFpbiIsImlzRW1haWwiLCJpc0hvc3RuYW1lIiwibWF4IiwibWluIiwic2V0dGluZ3MiLCJwYXNzd29yZCIsImlzVXJsIiwiVmFsaWRhdGlvbk1peGluIiwibm90aWZ5IiwiaXNWYWxpZCIsInJ1bGUiLCJzZXR0aW5nIiwidmFsaWRhdG9yIiwidmFsaWRhdG9ycyIsInZhbGlkYXRlIiwibWVzc2FnZSIsImFkZExhYmVsIiwiZXJyb3JzIiwiZm9jdXMiLCJnZXRTY2hlbWFBY2Nlc3NvciIsImtleU9yRGF0YVBhdGgiLCJ0eXBlIiwiZGVmIiwiaXNTdHJpbmciLCJuYW1lIiwiZ2V0U3RvcmVBY2Nlc3NvciIsIlR5cGVNaXhpbiIsIm5vZGUiLCJjbGVhcmFibGUiLCJldmVudHMiLCJjYW1lbGl6ZSIsIm5hdGl2ZUZpZWxkIiwidGV4dEZpZWxkIiwiYXR0cmlidXRlcyIsInZhbGlkYXRpb25zIiwiYWRkIiwib25Gb2N1cyIsIm9uQmx1ciIsIm9uSW5wdXQiLCJvbkNoYW5nZSIsIl9iIiwiZWxlbWVudCIsImFzQXJyYXkiLCJ1aWRNYXAiLCJ1aWQiLCJnZXRVaWQiLCJnZXRJdGVtSWQiLCJTY2hlbWFHcmFwaCIsIl9fcHVibGljRmllbGQiLCJkZWZhdWx0cyIsInN1YkdyYXBoIiwicGFydCIsInNjaGVtYSIsInJlbGF0ZWREYXRhUGF0aCIsIm5hbm9pZCIsImZsYXR0ZW4iLCJncmFwaCIsImVudHJpZXMiLCIkc2V0dGluZ3MiLCJzdWJLZXkiLCJzb3VyY2VTY2hlbWEiLCJjbGlwYm9hcmQiLCJpbnRlcm5hbCIsInJlbGF0ZWQiLCJyZWZlcmVuY2UiLCJzb3VyY2UiLCJyZWxhdGlvbiIsInZhbHVlcyIsInJlbW92ZUlkIiwicmVmZXJlbmNlSWQiLCJyZWZLZXkiLCJyZXZWYWx1ZSIsInR5cGVDaGVja2VycyIsImlzQm9vbGVhbiIsImlzTnVtYmVyIiwiaXNEYXRlIiwiaXNPYmplY3QiLCJpc1JlZ0V4cCIsInR5cGVDb252ZXJ0ZXJzIiwiaXNNYXRjaGluZ1R5cGUiLCJ0eXBlcyIsImNvbnZlcnRUeXBlIiwiY29udmVydGVyIiwidHlwZUNvbXBvbmVudHMiLCJ1bmtub3duVHlwZVJlcG9ydGVkIiwiZW1wdHlTY2hlbWEiLCJyZWdpc3RlclR5cGVDb21wb25lbnQiLCJnZXRUeXBlQ29tcG9uZW50IiwiYWxsb3dOdWxsIiwiaXRlcmF0ZVNjaGVtYUNvbXBvbmVudHMiLCJzY2hlbWFzIiwiaXNTaW5nbGVDb21wb25lbnRWaWV3IiwiaXNTY2hlbWEiLCJpdGVyYXRlTmVzdGVkU2NoZW1hQ29tcG9uZW50cyIsImdldFRhYlNjaGVtYXMiLCJmaW5kTmVzdGVkU2NoZW1hQ29tcG9uZW50Iiwic29tZU5lc3RlZFNjaGVtYUNvbXBvbmVudCIsImhhc05lc3RlZFNjaGVtYUNvbXBvbmVudHMiLCJpc0Zvcm0iLCJpc1ZpZXciLCJpc1RhYiIsImlzUGFuZWwiLCJpc01lbnUiLCJnZXRTY2hlbWFJZGVudGlmaWVyIiwicmVzb2x2ZWRTY2hlbWFzIiwicmVzb2x2ZVNjaGVtYSIsInVud3JhcE1vZHVsZSIsImlzUHJvbWlzZSIsImlzTW9kdWxlIiwia2V5cyIsInJlc29sdmVTY2hlbWFzIiwidW5yZXNvbHZlZFNjaGVtYXMiLCJyZXNvbHZlSXRlbSIsIm1hcENvbmN1cnJlbnRseSIsInJlc29sdmVWaWV3cyIsInVucmVzb2x2ZWRWaWV3cyIsImZsYXR0ZW5WaWV3cyIsInZpZXdzIiwicmVzb2x2ZVNjaGVtYUNvbXBvbmVudCIsIm1hcmtSYXciLCJEaXRvTWl4aW4iLCJyZXNvbHZlU2NoZW1hQ29tcG9uZW50cyIsInByb2Nlc3NlZFNjaGVtYURlcHRocyIsInByb2Nlc3NTY2hlbWFDb21wb25lbnRzIiwiYXBpIiwicm91dGVzIiwibGV2ZWwiLCJtYXhEZXB0aCIsImRlcHRoIiwicHJvbWlzZXMiLCJwcm9jZXNzIiwicmVsYXRpdmVMZXZlbCIsInByb2Nlc3NTY2hlbWFDb21wb25lbnQiLCJnZXRQYW5lbFNjaGVtYXMiLCJwcm9jZXNzU2NoZW1hRGVmYXVsdHMiLCJwYW5lbCIsImdldFR5cGVPcHRpb25zIiwicHJvY2Vzc1ZpZXciLCJmdWxsUGF0aCIsInByb2Nlc3NSb3V0ZVNjaGVtYSIsImNoaWxkcmVuIiwicHJvY2Vzc05lc3RlZFNjaGVtYXMiLCJhc3NpZ25EZWVwbHkiLCJwcm9jZXNzTmVzdGVkU2NoZW1hRGVmYXVsdHMiLCJmb3JtcyIsImdldEZvcm1TY2hlbWFzIiwiZm9ybSIsInByb2Nlc3NGb3JtcyIsImNvbXBvbmVudHMiLCJwcm9jZXNzRm9ybSIsInByb2Nlc3NUYWIiLCJwcm9jZXNzUGFuZWwiLCJ0YWJzIiwicGFuZWxzIiwidGFiIiwiaGFzRm9ybVNjaGVtYSIsImhhc011bHRpcGxlRm9ybVNjaGVtYXMiLCJnZXRWaWV3Rm9ybVNjaGVtYSIsInZpZXciLCJ2aWV3U2NoZW1hIiwiZ2V0Vmlld1NjaGVtYSIsImhhc1ZpZXdTY2hlbWEiLCJnZXRWaWV3RWRpdFBhdGgiLCJtb2RpZnlGb3JtIiwiY29tcGFjdCIsImdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zIiwiZ2V0SXRlbUZvcm1TY2hlbWEiLCJpc0VtcHR5U2NoZW1hIiwiaXNDb21wYWN0IiwiaXNJbmxpbmVkIiwiaXNOZXN0ZWQiLCJoYXNMYWJlbCIsImdlbmVyYXRlTGFiZWxzIiwibGFiZWwiLCJvbWl0U3BhY2luZyIsImdldFNjaGVtYVZhbHVlIiwiY29udmVydGVkIiwic2hvdWxkUmVuZGVyU2NoZW1hIiwiZ2V0Q29udGV4dCIsImdldERlZmF1bHRWYWx1ZSIsImNsb25lIiwic2hvdWxkRXhjbHVkZVZhbHVlIiwiZXhjbHVkZVZhbHVlIiwic2hvdWxkSWdub3JlTWlzc2luZ1ZhbHVlIiwic2V0RGVmYXVsdFZhbHVlcyIsInByb2Nlc3NTY2hlbWFEYXRhIiwicm9vdERhdGEiLCJjb21wdXRlIiwiY2xvbmVJdGVtIiwiY29weSIsIm9yZGVyS2V5IiwicHJvY2Vzc0RhdGEiLCJzY2hlbWFPbmx5IiwicHJvY2Vzc2VkRGF0YSIsIndyYXBQcmltaXRpdmVzIiwiYSIsImIiLCJpZDEiLCJpZDIiLCJwcm9jZXNzVmFsdWUiLCJwcm9jZXNzQmVmb3JlIiwicHJvY2Vzc0FmdGVyIiwicHJvY2Vzc0NvbXBvbmVudHMiLCJnZXREYXRhUGF0aCIsImNvbXBvbmVudFNjaGVtYSIsImNvbXBvbmVudERhdGFQYXRoIiwicHJvY2Vzc0l0ZW0iLCJpdGVtRGF0YVBhdGgiLCJwcm9jZXNzZWRJdGVtIiwiZ2V0TmFtZWRTY2hlbWFzIiwiYXJyYXkiLCJ0b1NjaGVtYSIsImdldEJ1dHRvblNjaGVtYXMiLCJidXR0b25zIiwiZ2V0VHlwZSIsInNjaGVtYU9yVHlwZSIsImdldFNvdXJjZVR5cGUiLCJnZXRQYW5lbEVudHJ5IiwidGFiQ29tcG9uZW50IiwiZ2V0UGFuZWxFbnRyaWVzIiwicGFuZWxTY2hlbWFzIiwicGFuZWxFbnRyaWVzIiwiZ2V0QWxsUGFuZWxFbnRyaWVzIiwicGFuZWxTY2hlbWEiLCJpc09iamVjdFNvdXJjZSIsImlzTGlzdFNvdXJjZSIsImdldEl0ZW1VaWQiLCJoYXNSZXNvdXJjZSIsImdldFJlc291cmNlIiwicGFyZW50IiwiZGVmcyIsImdldE1lbWJlclJlc291cmNlIiwicGlja0J5Iiwic2VsZiIsImdldFBhcmVudENvbXBvbmVudCIsIm5leHRVaWQiLCJsYWJlbGl6ZSIsInN0b3JlIiwib2xkS2V5IiwidmVyYiIsInF1ZXJ5IiwidXJsIiwibWV0aG9kIiwic2lnbmFsIiwiY2hlY2tVc2VyIiwicmVzcG9uc2UiLCJlcXVhbHMiLCJjYWNoZSIsImNhY2hlUGFyZW50IiwibG9hZENhY2hlIiwiY2FjaGVLZXkiLCJsb2NhbGUiLCJib2R5IiwiZ2V0Q29tcHV0ZWRBY2Nlc3NvciIsImdldHRlciIsImNvbXB1dGVkIiwiYWNjZXNzb3IiLCJ3YXRjaCIsImhhbmRsZXJzIiwiZXhwciIsImFkZEV2ZW50IiwiaHlwaGVuYXRlIiwiaGFzTGlzdGVuZXJzIiwicGFyZW50SGFzTGlzdGVuZXJzIiwiZW1pdEV2ZW50IiwiaGFuZGxlUGFyZW50TGlzdGVuZXJzIiwiaGFuZGxlTGlzdGVuZXJzIiwicGFyYW1zIiwiY3VycmVudCIsInJlc29sdmVNZXJnZWRPcHRpb25zIiwibWl4aW5zIiwibWVyZ2VPcHRpb25zIiwidG8iLCJmcm9tIiwibWl4aW4iLCJkaXRvT3B0aW9uS2V5cyIsIkRpdG9Db21wb25lbnQiLCJkZWZpbml0aW9uIiwiZGVzY3JpYmVEYXRlIiwiZGF0ZSIsImFsdGVyRGF0ZSIsIm92ZXJyaWRlcyIsInBhcnNlRGF0ZSIsInN0cmluZyIsInRpbWUiLCJ0aW1lRGVmYXVsdCIsImRheSIsInNlcDEiLCJtb250aCIsInNlcDIiLCJ5ZWFyIiwiaG91ciIsIm1pbnV0ZSIsInNlY29uZCIsIm1pbGxpc2Vjb25kIiwiZ2V0RGF0ZVBhcnRzIiwiZ2V0TW9udGhJbmRleCIsImlzVmFsaWRUaW1lUGFydCIsImdldERhdGVQYXJ0QXRQb3NpdGlvbiIsInBvc2l0aW9uIiwicGFydHMiLCJnZXRQb3NpdGlvbiIsImxlbmd0aCIsInBvcyIsIm9mZnNldCIsImlzVVMiLCJzdGFydCIsImVuZCIsInNob3J0Rm9ybWF0IiwibG9uZ0Zvcm1hdCIsImkiLCJfc2ZjX21haW4iLCJ3ZWVrZGF5TmFtZXMiLCJtb250aE5hbWVzIiwiZ2V0TG9jYWxlTmFtZXMiLCJtb2RlIiwidXBkYXRlIiwic3RlcCIsImN1cnJlbnRWYWx1ZSIsImVudGVyIiwic3RhcnRZZWFyIiwiZmlyc3REYXlXZWVrIiwibnVtRGF5cyIsInByZXZNb250aCIsInByZXZNb250aE51bURheXMiLCJub3ciLCJpc0RheSIsInN0YXRlIiwibmV4dE1vbnRoTmVlZCIsIm5leHRNb250aCIsImxvY2FsZU5hbWVzIiwibmFtZXMiLCJhZGRFdmVudHMiLCJ0YXJnZXRzIiwiaGFuZGxlciIsImNvbWJpbmVFdmVudHMiLCJnZXRLZXkiLCJnZXRLZXlOYXZpZ2F0aW9uIiwiZ2V0VGFyZ2V0IiwiY2xhc3NlcyIsInNob3ciLCJ0cmlnZ2VyIiwicG9wdXAiLCJfYyIsImVsIiwiYm91bmRzIiwidHJpZ2dlckxlZnQiLCJ0cmlnZ2VyVG9wIiwidHJpZ2dlcldpZHRoIiwidHJpZ2dlckhlaWdodCIsInBvcHVwV2lkdGgiLCJwb3B1cEhlaWdodCIsInBhcnQxIiwicGFydDIiLCJ3aW5XaWR0aCIsIndpbkhlaWdodCIsImxlZnQiLCJ0b3AiLCJ0cmlnZ2VyQm91bmRzIiwiaW5wdXQiLCJfIiwic2l6ZSIsImdldExlbmd0aCIsIl9vcGVuQmxvY2siLCJfY3JlYXRlRWxlbWVudEJsb2NrIiwic2V0U2VsZWN0aW9uIiwiZ2V0U2VsZWN0aW9uIiwiVHJpZ2dlciIsIkNhbGVuZGFyIiwiSW5wdXRGaWVsZCIsIkljb24iLCJkZWZhdWx0Rm9ybWF0cyIsImdldERhdGVQYXJ0IiwiY2FsZW5kYXIiLCJ0b2dnbGUiLCJzZWxlY3Rpb24iLCJzbW9vdGgiLCJzY3JvbGwiLCJyZWYiLCJsaW5lSGVpZ2h0IiwiZGlzdGFuY2UiLCJjb3VudCIsImlzRGlnaXQiLCJjaGFyIiwiRGF0ZVBpY2tlciIsIlRpbWVQaWNrZXIiLCJ0cmFuc2l0aW9uIiwiZGlzYWJsZWQiLCJ0ZXh0Iiwic2hvd1ByZXYiLCJzaG93TmV4dCIsImN1cnJlbnRQYWdlIiwibnVtUGFnZXMiLCJzaG93TGVuZ3RoIiwicGFnZSIsImJ1dHRvbiIsImNoZWNrZWQiLCJ1bmNoZWNrZWQiLCJtb2RlbFZhbHVlIiwiVHJhbnNpdGlvbkhlaWdodCIsImVuYWJsZWQiLCJzbG90cyIsImNyZWF0ZUVsZW1lbnQiLCJUcmFuc2l0aW9uIiwicHJvcHMiLCJzZXRTdHlsZSIsInN0eWxlIiwibmV4dFRpbWVvdXQiLCJmb3JjZVJlcGFpbnQiLCJ3aWR0aCIsImhlaWdodCIsImhhc1ZOb2RlQ29udGVudCIsInZub2RlIiwiQ29tbWVudCIsImhhc1Nsb3RDb250ZW50Iiwic2xvdCIsInVzZVNsb3RzIiwiRG9tTWl4aW4iLCJyZW1vdmUiLCJEaXRvVXNlciIsInJvbGVzIiwicm9sZSIsIlNjaGVtYVBhcmVudE1peGluIiwic2NoZW1hQ29tcG9uZW50cyIsIlZhbGlkYXRvck1peGluIiwiaXQiLCJmaXJzdCIsIlJvdXRlTWl4aW4iLCJyb3V0ZUNvbXBvbmVudCIsIm1hdGNoZWQiLCJyZWNvcmQiLCJicmVhZGNydW1iIiwicm91dGVDb21wb25lbnRzIiwib2siLCJyZWNvcmRQYXRoIiwicm9vdFBhdGgiLCJnZXRDb21tb25QcmVmaXgiLCJpc0xvYWRpbmciLCJVc2VGb2N1c1RyYXAiLCJkZWZpbmVDb21wb25lbnQiLCJ0cmFwIiwiYWN0aXZhdGUiLCJkZWFjdGl2YXRlIiwidW5yZWZFbGVtZW50IiwiY3JlYXRlRm9jdXNUcmFwIiwib25TY29wZURpc3Bvc2UiLCJoIiwiZGlhbG9nRGF0YSIsIkRpdG9EaWFsb2ciLCJwcmVmaXgiLCJ0aXBweURlbGVnYXRlIiwiaW5zdGFuY2UiLCJlcnIiLCJkcmFnQ291bnQiLCJ1cGxvYWRzIiwidG9nZ2xlRHJvcFRhcmdldENsYXNzIiwidXBsb2FkIiwic2V0RHJhZ2dpbmdGaWxlcyIsImhhc1VwbG9hZHMiLCJjYW5Ecm9wIiwidGl0bGUiLCJyZWplY3QiLCJkaWFsb2dJZCIsImFkZGl0aW9uYWxDb21wb25lbnRzIiwicmVkaXJlY3RBZnRlckxvZ2luIiwibG9naW5EYXRhIiwidXNlciIsIkRpdG9WaWV3IiwiYWRkUm91dGVzIiwicm91dGVyIiwicmVtb3ZlcnMiLCJyb3V0ZSIsInN1Yk1lbnVDbGFzcyIsImZpcnN0Q2hpbGQiLCJsb2ciLCJzdHJpcFRhZ3MiLCJub3RpZmljYXRpb25zIiwiZHVyYXRpb25GYWN0b3IiLCJkdXJhdGlvbiIsIlB1bGxkb3duTWl4aW4iLCJzdGFydFRpbWUiLCJvcGVuIiwiY29udGVudCIsImFzT2JqZWN0IiwiSXRlbU1peGluIiwiaXRlbUlkIiwiZXh0ZW5kZWQiLCJpdGVtTGFiZWwiLCJmb3JtTGFiZWwiLCJnZXRGb3JtTGFiZWwiLCJzdWZmaXgiLCJjb2x1bW5zIiwiaGFkTGFiZWwiLCJkZWZhdWx0VGFiIiwicm91dGVUYWIiLCJuZXdUYWIiLCJvbGRUYWIiLCJkYXRhUGF0aE9yTmFtZSIsInNjcm9sbENvbnRhaW5lciIsImRpc3BhdGNoIiwiY29tcG9uZW50c0J5RGF0YVBhdGgiLCJkYXRhUGF0aHMiLCJjaGVjayIsImZpZWxkIiwidW5tYXRjaGVkIiwid2FzRmlyc3QiLCJlcnJzIiwiZnVsbERhdGFQYXRoIiwiZGF0YVBhdGhQYXJ0cyIsImZvdW5kIiwicHJvcGVydHkiLCJzdWJDb21wb25lbnRzIiwibG9jYWxEYXRhIiwiZm9yZWlnbkRhdGEiLCJwYW5lIiwicmVnaXN0cnkiLCJlbnRyaWVzQnlEYXRhUGF0aCIsIl93aXRoRGlyZWN0aXZlcyIsIl9GcmFnbWVudCIsIl9yZW5kZXJMaXN0IiwiX2N0eCIsIl9ob2lzdGVkXzEiLCJfY3JlYXRlQmxvY2siLCJfY29tcG9uZW50X0RpdG9Db250YWluZXIiLCJuZXN0ZWREYXRhUGF0aCIsIl9ob2lzdGVkXzIiLCJwb3NpdGlvbnMiLCJpc0xhc3RJblJvdyIsImZpbmROZXh0UG9zaXRpb24iLCJyb3dzIiwicm93IiwidmVydGljYWxMYWJlbHNCeUluZGljZXMiLCJoYXNMYWJlbHNJblJvdyIsImNvbnRhaW5lciIsInBhZGRpbmciLCJmb250U2l6ZSIsInBhcnNlRnJhY3Rpb24iLCJkaXZpZGVuZCIsImRpdmlzb3IiLCJhY2N1bXVsYXRlZEJhc2lzIiwiZmxleEJhc2lzIiwiY29tYmluZWRCYXNpcyIsImNhcGl0YWxpemUiLCJjbGlwYm9hcmREYXRhIiwicGFzdGUiLCIkc2NoZW1hIiwicmVwb3J0IiwianNvbiIsImRlaW5kZW50IiwiTG9hZGluZ01peGluIiwidXBkYXRlUm9vdCIsInVwZGF0ZVZpZXciLCJSZXNvdXJjZU1peGluIiwiYW1vdW50IiwicmFuZ2UiLCJjaGlsZCIsInZlcmJzIiwiY2xlYXIiLCJsb2FkaW5nT3B0aW9ucyIsImNvbnRyb2xsZXIiLCJyZXF1ZXN0Iiwic2V0RGF0YSIsIm9uU3VjY2VzcyIsIm9uRXJyb3IiLCJub3RpZnlTdWNjZXNzIiwibm90aWZ5RXJyb3IiLCJwYXJlbnRNZXRhIiwicmVzb2x2ZVBhdGgiLCJpc0NyZWF0aW5nIiwicHJvdmlkZXNEYXRhIiwiZGF0YVBhcnRzIiwicGF0aFBhcnRzIiwicm91dGVQYXJ0cyIsImxhc3REYXRhUGFydCIsImwiLCJkYXRhUGFydCIsInBhcmFtIiwibWFpblNjaGVtYUNvbXBvbmVudCIsInByZXNlbnQiLCJjbG9zZUZvcm0iLCJnZXRWZXJiIiwiYnV0dG9uUmVzb3VyY2UiLCJzdWNjZXNzIiwiX3Jlc291cmNlIiwiX21ldGhvZCIsIkRpdG9Gb3JtIiwidGlwIiwidGlwcHkiLCJzY29wZSIsIlBhZ2luYXRpb24iLCJTb3J0YWJsZU1peGluIiwiZm9yY2VGYWxsYmFjayIsIm9sZEluZGV4IiwibmV3SW5kZXgiLCJsaXN0IiwicGFnaW5hdGlvblJhbmdlIiwiX25vcm1hbGl6ZVN0eWxlIiwiX2NhY2hlIiwiX3dpdGhNb2RpZmllcnMiLCIkZXZlbnQiLCJfbm9ybWFsaXplQ2xhc3MiLCJfY3JlYXRlRWxlbWVudFZOb2RlIiwiX2hvaXN0ZWRfNCIsIl90b0Rpc3BsYXlTdHJpbmciLCJfaG9pc3RlZF81IiwiX2hvaXN0ZWRfNyIsIl9tZXJnZVByb3BzIiwiX2hvaXN0ZWRfOCIsIl9jb21wb25lbnRfRGl0b0xhYmVsIiwiX2NyZWF0ZVZOb2RlIiwiX2NvbXBvbmVudF9EaXRvVGFibGVDZWxsIiwiX2NvbXBvbmVudF9EaXRvRHJhZ2dhYmxlIiwiX2NvbXBvbmVudF9EaXRvVHJlZUl0ZW0iLCJjaGlsZHJlblNjaGVtYSIsImNoaWxkcmVuTGlzdCIsImVkaXRQYXRoIiwiY2hpbGRyZW5PcGVuIiwibnVtQ2hpbGRyZW4iLCJjcmVhdGFibGUiLCJlZGl0YWJsZSIsIm9yZGVyIiwiY29sdW1uIiwicmVuZGVyIiwiZXNjYXBlSHRtbCIsIlRZUEVTIiwiZmlsZSIsInJlYWRlciIsInVzZVNvcnRhYmxlIiwic29ydGFibGUiLCJkb2N1bWVudCIsImRlZmF1bHREb2N1bWVudCIsInJlc2V0T3B0aW9ucyIsImRlZmF1bHRPcHRpb25zIiwiZSIsIm1vdmVBcnJheUVsZW1lbnQiLCJTb3J0YWJsZSIsInN0b3AiLCJvcHRpb24iLCJ0cnlPbk1vdW50ZWQiLCJ0cnlPblNjb3BlRGlzcG9zZSIsImluc2VydE5vZGVBdCIsInBhcmVudEVsZW1lbnQiLCJyZWZFbGVtZW50IiwicmVtb3ZlTm9kZSIsIl92YWx1ZUlzUmVmIiwiaXNSZWYiLCJ0b1ZhbHVlIiwibmV4dFRpY2siLCJVc2VTb3J0YWJsZSIsInVzZVZNb2RlbCIsIkRpdG9WTm9kZSIsIkRpdG9UeXBlQ29tcG9uZW50JDEiLCJEaXRvVHlwZUNvbXBvbmVudCIsIm9uQ2xpY2siLCJEYXRhTWl4aW4iLCJhc3luY0VudHJ5IiwicmVzb2x2ZWREYXRhIiwibG9hZCIsImNsZWFyTG9hZGluZyIsInRpbWVyIiwiT3B0aW9uc01peGluIiwiY29udmVydFZhbHVlIiwidmFsIiwic2VhcmNoIiwiZmlsdGVyIiwiZGVib3VuY2UiLCJkZWJvdW5jZUFzeW5jIiwiZ3JvdXBlZCIsInJlc3VsdHMiLCJncm91cCIsImZpbmRPcHRpb24iLCJncm91cEJ5Iiwib3B0aW9uVmFsdWUiLCJvcHRpb25MYWJlbCIsInByb2Nlc3NSZWxhdGUiLCJmbGFzayIsIkNvZGVGbGFzayIsImNoYW5nZWQiLCJpZ25vcmVXYXRjaCIsImlnbm9yZVVwZGF0ZSIsInNldENvZGUiLCJjb2RlIiwic2V0VmFsdWUiLCJsYW5ndWFnZSIsImdldFBvaW50IiwieCIsInkiLCJwcmV2WSIsIm1vdXNlbW92ZSIsImhleCIsIlNrZXRjaFBpY2tlciIsImNvbnZlcnRDb2xvciIsImNvbG9yIiwidGlueWNvbG9yIiwiY29udmVydGVkVmFsdWUiLCJjYW5VcGRhdGVWYWx1ZSIsInRvVnVlM0NvbG9yRm9ybWF0IiwidG9UaW55Q29sb3JGb3JtYXQiLCJEYXRlVGltZVBpY2tlciIsImZvcm1hdHMiLCJmb3JtYXRRdWVyeSIsInJlcGxhY2VSb3V0ZSIsImhhc2giLCJTb3VyY2VNaXhpbiIsImRlZmF1bHRTb3J0IiwiZGlyZWN0aW9uIiwiZHJhZ2dhYmxlIiwiY29sbGFwc2libGUiLCJjb2xsYXBzZWQiLCJyZW1vdmVkIiwibGlzdERhdGEiLCJvbkNvbXBsZXRlIiwib3BlbmVkIiwiY2FsbE9uQ29tcGxldGUiLCJpbmxpbmVkIiwibWV0YSIsImZvcm1NZXRhIiwiY2hpbGRSb3V0ZXMiLCJzb3VyY2VQYXRoIiwiZm9ybVJvdXRlIiwiZ2V0UGF0aFdpdGhQYXJhbSIsImZsYXRSb3V0ZXMiLCJzdWJSb3V0ZXMiLCJjaGlsZFJvdXRlIiwiZmlsdGVyQ29tcG9uZW50cyIsImRhdGV0aW1lIiwiY3JlYXRlRmlsdGVyc1BhbmVsIiwiZmlsdGVycyIsInN0aWNreSIsImZpbHRlclNjaGVtYXMiLCJwYXJzZUZpbHRlcnNEYXRhIiwiY3JlYXRlRmlsdGVyc0NvbXBvbmVudHMiLCJjcmVhdGVGaWx0ZXJzQnV0dG9ucyIsImZvcm1hdEZpbHRlcnNEYXRhIiwic21hbGwiLCJnZXREYXRhTmFtZSIsImZpbHRlck5hbWUiLCJnZXRGaWx0ZXJOYW1lIiwiZGF0YU5hbWUiLCJjb21wcyIsImdldENvbXBvbmVudHNGb3JGaWx0ZXIiLCJmaWx0ZXJzRGF0YSIsIl9jb21wb25lbnRfRGl0b1RhYmxlSGVhZCIsIl9jb21wb25lbnRfRGl0b1NjaGVtYUlubGluZWQiLCJfcmVzb2x2ZUR5bmFtaWNDb21wb25lbnQiLCJfY29tcG9uZW50X0RpdG9FZGl0QnV0dG9ucyIsIl9ob2lzdGVkXzkiLCJvYmoiLCJmaWx0ZXJzRGF0YVBhdGgiLCJFZGl0b3JDb250ZW50IiwiZWRpdG9yIiwiZW5hYmxlUnVsZXMiLCJ1cGRhdGVWYWx1ZSIsIm9uVXBkYXRlIiwic2V0VmFsdWVEZWJvdW5jZWQiLCJFZGl0b3IiLCJkaWFsb2dDb21wb25lbnQiLCJnZXRNYXJrQXR0cmlidXRlcyIsImhyZWYiLCJtYXJrcyIsIm5vZGVzIiwidG9vbHMiLCJEb2N1bWVudCIsIlRleHQiLCJQYXJhZ3JhcGgiLCJCb2xkIiwiSXRhbGljIiwiVW5kZXJsaW5lIiwiU3RyaWtlIiwiU21hbGwiLCJDb2RlIiwiU3VwZXJzY3JpcHQiLCJTdWJzY3JpcHQiLCJMaW5rV2l0aFRpdGxlIiwiQmxvY2txdW90ZSIsIkNvZGVCbG9jayIsIkhlYWRpbmciLCJIb3Jpem9udGFsUnVsZSIsIkxpc3RJdGVtIiwiQnVsbGV0TGlzdCIsIk9yZGVyZWRMaXN0IiwiRm9vdG5vdGVzIiwiRm9vdG5vdGUiLCJGb290bm90ZVJlZmVyZW5jZSIsIkhpc3RvcnkiLCJIYXJkQnJlYWsiLCJzZXRIYXJkQnJlYWsiLCJleHRlbnNpb24iLCJzZXR0aW5nc05hbWUiLCJkZXNjcmlwdGlvbnMiLCJjb21tYW5kcyIsImFkZEJ1dHRvbiIsImljb24iLCJjb21tYW5kIiwiZGVzY3JpcHRpb24iLCJzZXR0aW5nTmFtZSIsImF0dHJpYnV0ZSIsIk1hcmsiLCJMaW5rIiwiX2NvbXBvbmVudF9WdWVNdWx0aXNlbGVjdCIsIlZ1ZU11bHRpc2VsZWN0IiwicGxhY2Vob2xkZXIiLCJzZWFyY2hhYmxlIiwidGFnZ2FibGUiLCJ0YWciLCJOdW1iZXJNaXhpbiIsIlN3aXRjaEJ1dHRvbiIsIlRleHRNaXhpbiIsIm1hc2tlZFBhc3N3b3JkIiwiaGFzRWRpdGFibGVGb3JtcyIsImZvcm1hdEZpbGVTaXplIiwiZmlsZXNpemUiLCJWdWVVcGxvYWQiLCJhc0ZpbGVzIiwiYWNjZXB0IiwibWF4U2l6ZSIsInBhcnNlRmlsZVNpemUiLCJ0aHVtYm5haWxzIiwidG90YWwiLCJyZWFkeSIsIm5ld0ZpbGUiLCJvbGRGaWxlIiwieGhyIiwiYmxvYiIsImZpbGVzIiwiUmVzaXplRGlyZWN0aXZlIiwiYmluZGluZyIsIm9ic2VydmVSZXNpemUiLCJ1bm9ic2VydmVSZXNpemUiLCJPYnNlcnZlciIsImlzUmVzaXplU3VwcG9ydGVkIiwib2JzZXJ2ZXJzIiwiYm94IiwiRGl0b0FkbWluIiwiZGl0byIsImdldEFwaVVybCIsImlzQXBpVXJsIiwidXNlcnMiLCJwYXJlbnRQYXRoIiwiYXBwIiwiY3JlYXRlQXBwIiwiRGl0b1Jvb3QiLCJWdWVOb3RpZmljYXRpb25zIiwiY3JlYXRlUm91dGVyIiwiY3JlYXRlV2ViSGlzdG9yeSIsIlJlcXVlc3RFcnJvciIsImhlYWRlcnMiLCJpc0Fic29sdXRlVXJsIiwiY29tYmluZVVybHMiLCJiYXNlVXJsIiwicmVsYXRpdmVVcmwiXSwibWFwcGluZ3MiOiJvK0dBR08sU0FBU0EsR0FBZUMsRUFBWSxHQUFJLENBQzdDLE1BQU1DLEVBQVEsQ0FBQSxFQUVSQyxFQUFLRixFQUFVLFlBQVcsRUFDMUIsQ0FBQ0csQ0FBRSxFQUNQLGtFQUFrRSxLQUNoRUQsQ0FDTixHQUFTLENBQUEsRUFDREUsRUFDSixDQUNFLE9BQVUsTUFDVixPQUFVLE1BQ1YsS0FBUSxNQUNSLGlCQUFrQixTQUNuQixFQUFDRCxDQUFFLEdBQ0pBLEVBRUYsT0FBSUMsSUFDRkgsRUFBTSxTQUFXRyxFQUNqQkgsRUFBTUcsQ0FBUSxFQUFJLElBRXBCRixFQUFHLFFBQ0QsK0dBQ0EsQ0FBQ0csRUFBT0MsRUFBU0MsRUFBSUMsRUFBSUMsSUFBTyxDQUU5QixHQUFJLENBQUNSLEVBQU0sT0FBUSxDQUNqQixNQUFNUyxFQUFVRCxHQUFNRCxHQUFNRCxHQUN4QixDQUFDTixFQUFNLFNBQVdLLElBQVksWUFHaENMLEVBQU0s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
|
|
7
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by1hZG1pbi51bWQuanMiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlscy9hZ2VudC5qcyIsIi4uL3NyYy9hcHBTdGF0ZS5qcyIsIi4uL3NyYy91dGlscy9kYXRhLmpzIiwiLi4vc3JjL0RpdG9Db250ZXh0LmpzIiwiLi4vc3JjL21peGlucy9FbWl0dGVyTWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL1ZhbHVlTWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL0NvbnRleHRNaXhpbi5qcyIsIi4uL3NyYy92YWxpZGF0b3JzL19jcmVkaXRjYXJkLmpzIiwiLi4vc3JjL3ZhbGlkYXRvcnMvX2RlY2ltYWxzLmpzIiwiLi4vc3JjL3ZhbGlkYXRvcnMvX2RvbWFpbi5qcyIsIi4uL3NyYy92YWxpZGF0b3JzL19lbWFpbC5qcyIsIi4uL3NyYy92YWxpZGF0b3JzL19ob3N0bmFtZS5qcyIsIi4uL3NyYy92YWxpZGF0b3JzL19pbnRlZ2VyLmpzIiwiLi4vc3JjL3ZhbGlkYXRvcnMvX21heC5qcyIsIi4uL3NyYy92YWxpZGF0b3JzL19taW4uanMiLCIuLi9zcmMvdmFsaWRhdG9ycy9fcGFzc3dvcmQuanMiLCIuLi9zcmMvdmFsaWRhdG9ycy9fcmFuZ2UuanMiLCIuLi9zcmMvdmFsaWRhdG9ycy9fcmVxdWlyZWQuanMiLCIuLi9zcmMvdmFsaWRhdG9ycy9fdXJsLmpzIiwiLi4vc3JjL21peGlucy9WYWxpZGF0aW9uTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvYWNjZXNzb3IuanMiLCIuLi9zcmMvbWl4aW5zL1R5cGVNaXhpbi5qcyIsIi4uL3NyYy91dGlscy91aWQuanMiLCIuLi9zcmMvdXRpbHMvU2NoZW1hR3JhcGguanMiLCIuLi9zcmMvdXRpbHMvdHlwZS5qcyIsIi4uL3NyYy91dGlscy9zY2hlbWEuanMiLCIuLi9zcmMvdXRpbHMvcmVzb3VyY2UuanMiLCIuLi9zcmMvbWl4aW5zL0RpdG9NaXhpbi5qcyIsIi4uL3NyYy91dGlscy9vcHRpb25zLmpzIiwiLi4vc3JjL0RpdG9Db21wb25lbnQuanMiLCIuLi8uLi91aS9zcmMvdXRpbHMvZGF0ZS5qcyIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0NhbGVuZGFyLnZ1ZSIsIi4uLy4uL3VpL3NyYy91dGlscy9ldmVudC5qcyIsIi4uLy4uL3VpL3NyYy91dGlscy90cmlnZ2VyLmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvVHJpZ2dlci52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9JbnB1dEZpZWxkLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0ljb24udnVlIiwiLi4vLi4vdWkvc3JjL3V0aWxzL3NlbGVjdGlvbi5qcyIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0RhdGVQaWNrZXIudnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvVGltZVBpY2tlci52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9EYXRlVGltZVBpY2tlci52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9QYWdpbmF0aW9uLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL1N3aXRjaEJ1dHRvbi52dWUiLCIuLi8uLi91aS9zcmMvdHJhbnNpdGlvbnMvVHJhbnNpdGlvbkhlaWdodC52dWUiLCIuLi8uLi91aS9zcmMvdXRpbHMvdnVlLmpzIiwiLi4vc3JjL21peGlucy9Eb21NaXhpbi5qcyIsIi4uL3NyYy9EaXRvVXNlci5qcyIsIi4uL3NyYy9taXhpbnMvU2NoZW1hUGFyZW50TWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL1ZhbGlkYXRvck1peGluLmpzIiwiLi4vc3JjL21peGlucy9Sb3V0ZU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1ZpZXcudnVlIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWV1c2UvaW50ZWdyYXRpb25zL3VzZUZvY3VzVHJhcC9jb21wb25lbnQubWpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0RpYWxvZy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUm9vdC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTWVudS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVHJhaWwudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0hlYWRlci52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTmF2aWdhdGlvbi52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTm90aWZpY2F0aW9ucy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2lkZWJhci52dWUiLCIuLi9zcmMvbWl4aW5zL1B1bGxkb3duTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQWNjb3VudC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRWxlbWVudC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTGFiZWwudnVlIiwiLi4vc3JjL21peGlucy9JdGVtTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NoZW1hLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY2hlbWFJbmxpbmVkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lLnZ1ZSIsIi4uL3NyYy91dGlscy9tYXRoLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NvbnRhaW5lci52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFicy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZWwudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmVscy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQnV0dG9ucy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRWRpdEJ1dHRvbnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NyZWF0ZUJ1dHRvbi52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ2xpcGJvYXJkLnZ1ZSIsIi4uL3NyYy9taXhpbnMvTG9hZGluZ01peGluLmpzIiwiLi4vc3JjL21peGlucy9SZXNvdXJjZU1peGluLmpzIiwiLi4vc3JjL3V0aWxzL3BhdGguanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRm9ybS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRm9ybUlubmVyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Gb3JtTmVzdGVkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FcnJvcnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1Njb3Blcy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFnaW5hdGlvbi52dWUiLCIuLi9zcmMvbWl4aW5zL1NvcnRhYmxlTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVHJlZUl0ZW0udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYmxlSGVhZC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVDZWxsLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9VcGxvYWRGaWxlLnZ1ZSIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVldXNlL2ludGVncmF0aW9ucy91c2VTb3J0YWJsZS9jb21wb25lbnQubWpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0RyYWdnYWJsZS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU3Bpbm5lci52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVk5vZGUudnVlIiwiLi4vc3JjL0RpdG9UeXBlQ29tcG9uZW50LmpzIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQnV0dG9uLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUNoZWNrYm94LnZ1ZSIsIi4uL3NyYy9taXhpbnMvRGF0YU1peGluLmpzIiwiLi4vc3JjL21peGlucy9PcHRpb25zTWl4aW4uanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVDaGVja2JveGVzLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUNvZGUudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ29sb3IudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ29tcG9uZW50LnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUNvbXB1dGVkLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZURhdGUudnVlIiwiLi4vc3JjL3V0aWxzL3JvdXRlLmpzIiwiLi4vc3JjL21peGlucy9Tb3VyY2VNaXhpbi5qcyIsIi4uL3NyYy91dGlscy9maWx0ZXIuanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVMaXN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUxhYmVsLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZU1hcmt1cC52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVNdWx0aXNlbGVjdC52dWUiLCIuLi9zcmMvbWl4aW5zL051bWJlck1peGluLmpzIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlTnVtYmVyLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZU9iamVjdC52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVQYW5lbC52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVQcm9ncmVzcy52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVSYWRpby52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVTZWN0aW9uLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVNlbGVjdC52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVTbGlkZXIudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlU3BhY2VyLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVN3aXRjaC52dWUiLCIuLi9zcmMvbWl4aW5zL1RleHRNaXhpbi5qcyIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVRleHQudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlVGV4dGFyZWEudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlVHJlZUxpc3QudnVlIiwiLi4vc3JjL3V0aWxzL3VuaXRzLmpzIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlVXBsb2FkLnZ1ZSIsIi4uL3NyYy9kaXJlY3RpdmVzL3Jlc2l6ZS5qcyIsIi4uL3NyYy92ZXJicy5qcyIsIi4uL3NyYy9EaXRvQWRtaW4uanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhpcyB1c2VyLWFnZW50IHBhcnNlciB3YXMgbGlmdGVkIGZyb20gUGFwZXIuanM6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vcGFwZXJqcy9wYXBlci5qcy9ibG9iL2NjMTU2OTY3NTAwMzVhYjAwZTAwYzY0YzdjOTVkYWEyYzg1ZWZlMDEvc3JjL2NvcmUvUGFwZXJTY29wZS5qcyNMNzUtTDEwN1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VVc2VyQWdlbnQodXNlckFnZW50ID0gJycpIHtcbiAgY29uc3QgYWdlbnQgPSB7fVxuICAvLyBVc2UgcmVwbGFjZSgpIHRvIGdldCBhbGwgbWF0Y2hlcywgYW5kIGRlYWwgd2l0aCBDaHJvbWUvV2Via2l0IG92ZXJsYXA6XG4gIGNvbnN0IHVhID0gdXNlckFnZW50LnRvTG93ZXJDYXNlKClcbiAgY29uc3QgW29zXSA9XG4gICAgLyhpcGhvbmV8aXBhZHxsaW51eDsgYW5kcm9pZHxkYXJ3aW58d2lufG1hY3xsaW51eHxmcmVlYnNkfHN1bm9zKS8uZXhlYyhcbiAgICAgIHVhXG4gICAgKSB8fCBbXVxuICBjb25zdCBwbGF0Zm9ybSA9IChcbiAgICB7XG4gICAgICAnZGFyd2luJzogJ21hYycsXG4gICAgICAnaXBob25lJzogJ2lvcycsXG4gICAgICAnaXBhZCc6ICdpb3MnLFxuICAgICAgJ2xpbnV4OyBhbmRyb2lkJzogJ2FuZHJvaWQnXG4gICAgfVtvc10gfHxcbiAgICBvc1xuICApXG4gIGlmIChwbGF0Zm9ybSkge1xuICAgIGFnZW50LnBsYXRmb3JtID0gcGxhdGZvcm1cbiAgICBhZ2VudFtwbGF0Zm9ybV0gPSB0cnVlXG4gIH1cbiAgdWEucmVwbGFjZShcbiAgICAvKG9wZXJhfGNocm9tZXxzYWZhcml8d2Via2l0fGZpcmVmb3h8bXNpZXx0cmlkZW50KVxcLz9cXHMqKFsuXFxkXSspKD86Lip2ZXJzaW9uXFwvKFsuXFxkXSspKT8oPzouKnJ2OnY/KFsuXFxkXSspKT8vZyxcbiAgICAobWF0Y2gsIGJyb3dzZXIsIHYxLCB2MiwgcnYpID0+IHtcbiAgICAgIC8vIERvIG5vdCBzZXQgYWRkaXRpb25hbCBicm93c2VycyBvbmNlIGNocm9tZSBpcyBkZXRlY3RlZC5cbiAgICAgIGlmICghYWdlbnQuY2hyb21lKSB7XG4gICAgICAgIGNvbnN0IHZlcnNpb24gPSBydiB8fCB2MiB8fCB2MVxuICAgICAgICBpZiAoIWFnZW50LnZlcnNpb24gfHwgYnJvd3NlciAhPT0gJ3NhZmFyaScpIHtcbiAgICAgICAgICAvLyBVc2UgdGhlIHZlcnNpb24gd2UgZ2V0IGZvciB3ZWJraXQgZm9yIFNhZmFyaSwgd2hpY2ggaXMgYWN0dWFsbHlcbiAgICAgICAgICAvLyBUaGUgU2FmYXJpIHZlcnNpb24sIGUuZy4gMTYuMFxuICAgICAgICAgIGFnZW50LnZlcnNpb24gPSB2ZXJzaW9uXG4gICAgICAgICAgYWdlbnQudmVyc2lvbk51bWJlciA9IHBhcnNlRmxvYXQodmVyc2lvbilcbiAgICAgICAgfVxuICAgICAgICBhZ2VudC5icm93c2VyID0gYnJvd3NlclxuICAgICAgICBhZ2VudFticm93c2VyXSA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIClcbiAgaWYgKGFnZW50LmNocm9tZSkge1xuICAgIC8vIENhbid0IGhhdmUgaXQgYm90aCB3YXlzLCBDaHJvbWUuXG4gICAgZGVsZXRlIGFnZW50LndlYmtpdFxuICB9XG4gIHJldHVybiBhZ2VudFxufVxuIiwiaW1wb3J0IHsgcmVhY3RpdmUgfSBmcm9tICd2dWUnXG5pbXBvcnQgeyBwYXJzZVVzZXJBZ2VudCB9IGZyb20gJy4vdXRpbHMvYWdlbnQnXG5cbmV4cG9ydCBkZWZhdWx0IHJlYWN0aXZlKHtcbiAgdGl0bGU6ICcnLFxuICByb3V0ZUNvbXBvbmVudHM6IFtdLFxuICB1c2VyOiBudWxsLFxuICBhZ2VudDogcGFyc2VVc2VyQWdlbnQobmF2aWdhdG9yLnVzZXJBZ2VudCB8fCAnJyksXG4gIGxvYWRDYWNoZToge30sIC8vIFNlZSBUeXBlTWl4aW4ubG9hZCgpXG4gIGFjdGl2ZUxhYmVsOiBudWxsLFxuICBjbGlwYm9hcmREYXRhOiBudWxsXG59KVxuIiwiaW1wb3J0IHtcbiAgaXNJbnRlZ2VyLFxuICBwYXJzZURhdGFQYXRoLFxuICBnZXRWYWx1ZUF0RGF0YVBhdGgsXG4gIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgdG9rZW4pIHtcbiAgcmV0dXJuIGRhdGFQYXRoXG4gICAgPyBgJHtkYXRhUGF0aH0vJHt0b2tlbn1gXG4gICAgOiB0b2tlblxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkge1xuICBjb25zdCBwYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgcGF0aD8ucG9wKClcbiAgcmV0dXJuIHBhdGhcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSB7XG4gIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChwYXJzZVBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbmVzdGVkID8gcGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkgOiBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpXG4gIGlmIChwYXRoKSB7XG4gICAgLy8gUmVtb3ZlIHRoZSBwYXJlbnQgdG9rZW4uIElmIGl0J3MgYSBudW1iZXIsIHRoZW4gd2UncmUgZGVhbGluZyB3aXRoIGFuXG4gICAgLy8gYXJyYXkgYW5kIG5lZWQgdG8gcmVtb3ZlIG1vcmUgdG9rZW5zIHVudGlsIHdlIG1lZXQgdGhlIGFjdHVhbCBwYXJlbnQ6XG4gICAgbGV0IHRva2VuXG4gICAgZG8ge1xuICAgICAgdG9rZW4gPSBwYXRoLnBvcCgpXG4gICAgfSB3aGlsZSAodG9rZW4gIT0gbnVsbCAmJiBpc0ludGVnZXIoK3Rva2VuKSlcbiAgICAvLyBJZiB0aGUgcmVtb3ZlZCB0b2tlbiBpcyB2YWxpZCwgd2UgY2FuIGdldCB0aGUgcGFyZW50IGRhdGE6XG4gICAgaWYgKHRva2VuICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBwYXRoXG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW0ocm9vdEl0ZW0sIGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICBjb25zdCBwYXRoID0gcGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZClcbiAgcmV0dXJuIHBhdGggPyBnZXRWYWx1ZUF0RGF0YVBhdGgocm9vdEl0ZW0sIHBhdGgpIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50SXRlbShyb290SXRlbSwgZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKVxuICByZXR1cm4gcGF0aCA/IGdldFZhbHVlQXREYXRhUGF0aChyb290SXRlbSwgcGF0aCkgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aCkge1xuICBjb25zdCBwYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgcmV0dXJuIHBhdGhbcGF0aC5sZW5ndGggLSAxXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoTmFtZShkYXRhUGF0aCkge1xuICBjb25zdCB0b2tlbiA9IGdldExhc3REYXRhUGF0aFRva2VuKGRhdGFQYXRoKVxuICByZXR1cm4gdG9rZW4gPT0gbnVsbCB8fCBpc0ludGVnZXIoK3Rva2VuKSA/IG51bGwgOiB0b2tlblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoSW5kZXgoZGF0YVBhdGgpIHtcbiAgY29uc3QgdG9rZW4gPSBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aClcbiAgY29uc3QgaW5kZXggPSB0b2tlbiA9PSBudWxsID8gbnVsbCA6ICt0b2tlblxuICByZXR1cm4gaXNJbnRlZ2VyKGluZGV4KSA/IGluZGV4IDogbnVsbFxufVxuXG5sZXQgdGVtcG9yYXJ5SWQgPSAwXG5leHBvcnQgZnVuY3Rpb24gc2V0VGVtcG9yYXJ5SWQoZGF0YSwgaWRLZXkgPSAnaWQnKSB7XG4gIC8vIFRlbXBvcmFyeSBpZHMgYXJlIG1hcmtlZCB3aXRoIGEgJ0AnIGF0IHRoZSBiZWdpbm5pbmcuXG4gIGRhdGFbaWRLZXldID0gYEAkeysrdGVtcG9yYXJ5SWR9YFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUZW1wb3JhcnlJZChpZCkge1xuICByZXR1cm4gL15ALy50ZXN0KGlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZWZlcmVuY2UoZGF0YSwgaWRLZXkgPSAnaWQnKSB7XG4gIC8vIFJldHVybnMgdHJ1ZSBpZiB2YWx1ZSBpcyBhbiBvYmplY3QgdGhhdCBob2xkcyBub3RoaW5nIG1vcmUgdGhhbiBhbiBpZC5cbiAgcmV0dXJuIGRhdGE/LltpZEtleV0gIT0gbnVsbCAmJiBPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGggPT09IDFcbn1cbiIsImltcG9ydCB7IHRvUmF3IH0gZnJvbSAndnVlJ1xuaW1wb3J0IHsgZ2V0VmFsdWVBdERhdGFQYXRoLCBpc0Z1bmN0aW9uIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7XG4gIGdldEl0ZW1EYXRhUGF0aCxcbiAgZ2V0UGFyZW50SXRlbURhdGFQYXRoLFxuICBnZXRQYXJlbnRJdGVtLFxuICBnZXRJdGVtLFxuICBnZXRMYXN0RGF0YVBhdGhOYW1lLFxuICBnZXRMYXN0RGF0YVBhdGhJbmRleFxufSBmcm9tICcuL3V0aWxzL2RhdGEuanMnXG5cbmNvbnN0IHsgaGFzT3duUHJvcGVydHkgfSA9IE9iamVjdC5wcm90b3R5cGVcblxuLy8gU2VlIGFsc28gYENvbnRleHRNaXhpbmA6IGBEaXRvQ29udGV4dGAgaW5zdGFuY2VzIGFyZSBhIHRoaW4gd3JhcHBlciBhcm91bmRcbi8vIHJhdyBgY29udGV4dGAgb2JqZWN0cywgd2hpY2ggdGhlbXNlbHZlcyBhY3R1YWxseSBpbmhlcml0IGZyb20gdGhlIGxpbmtlZFxuLy8gYGNvbXBvbmVudGAgaW5zdGFuY2UsIHNvIHRoYXQgdGhleSBvbmx5IG5lZWQgdG8gcHJvdmlkZSB0aGUgdmFsdWVzIHRoYXRcbi8vIHNob3VsZCBiZSBkaWZmZXJlbnQgdGhhbiBpbiB0aGUgdW5kZXJseWluZyBjb21wb25lbnQuIEluIG9yZGVyIHRvIG5vdCBleHBvc2Vcbi8vIGFsbCBmaWVsZHMgZnJvbSB0aGUgY29tcG9uZW50LCB0aGUgd3JhcHBlciBpcyBpbnRyb2R1Y2VkLlxuXG4vLyBVc2UgV2Vha01hcCBmb3IgdGhlIHJhdyBgY29udGV4dGAgb2JqZWN0cywgc28gd2UgZG9uJ3QgaGF2ZSB0byBwb2xsdXRlIHRoZVxuLy8gYWN0dWFsIGBEaXRvQ29udGV4dGAgaW5zdGFuY2Ugd2l0aCBpdC5cbmNvbnN0IGNvbnRleHRzID0gbmV3IFdlYWtNYXAoKVxuXG5mdW5jdGlvbiB0b09iamVjdChjb250ZXh0KSB7XG4gIGNvbnN0IHJhd1N0YXJ0ID0gdG9SYXcoY29udGV4dClcbiAgbGV0IHJhdyA9IHJhd1N0YXJ0XG4gIGxldCBvYmplY3QgPSBudWxsXG4gIC8vIEluIGNhc2UgYERpdG9Db250ZXh0LmV4dGVuZCgpYCB3YXMgdXNlZCwgd2UgbmVlZCB0byBmaW5kIHRoZSBhY3R1YWwgY29udGV4dFxuICAvLyBvYmplY3QgZnJvbSB0aGUgb2JqZWN0J3MgdGhlIGluaGVyaXRhbmNlIGNoYWluOlxuICBkbyB7XG4gICAgb2JqZWN0ID0gY29udGV4dHMuZ2V0KHJhdylcbiAgICBpZiAob2JqZWN0KSBicmVha1xuICAgIHJhdyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihyYXcpXG4gIH0gd2hpbGUgKHJhdylcbiAgaWYgKG9iamVjdCAmJiByYXcgIT09IHJhd1N0YXJ0KSB7XG4gICAgLy8gQXNzaWduIHRoZSBwYXNzZWQgY29udGV4dCB3aXRoIHRoZSBvcmlnaW5hbCBvYmplY3QgYXMgd2VsbCwgc28gd2UgZG9uJ3RcbiAgICAvLyBoYXZlIHRvIHNlYXJjaCBmb3IgaXQgYWdhaW46XG4gICAgY29udGV4dHMuc2V0KHJhdywgb2JqZWN0KVxuICB9XG4gIHJldHVybiBvYmplY3Rcbn1cblxuZnVuY3Rpb24gZ2V0KGNvbnRleHQsIGtleSwgZGVmYXVsdFZhbHVlKSB7XG4gIGNvbnN0IG9iamVjdCA9IHRvT2JqZWN0KGNvbnRleHQpXG4gIGNvbnN0IHZhbHVlID0ga2V5IGluIG9iamVjdCA/IG9iamVjdFtrZXldIDogdW5kZWZpbmVkXG4gIC8vIElmIGBvYmplY3RgIGV4cGxpY2l0bHkgc2V0cyB0aGUga2V5IHRvIGB1bmRlZmluZWRgLCByZXR1cm4gaXQuXG4gIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkIHx8IGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpXG4gICAgPyB2YWx1ZVxuICAgIDogaXNGdW5jdGlvbihkZWZhdWx0VmFsdWUpXG4gICAgICA/IGRlZmF1bHRWYWx1ZSgpXG4gICAgICA6IGRlZmF1bHRWYWx1ZVxufVxuXG5mdW5jdGlvbiBzZXQoY29udGV4dCwga2V5LCB2YWx1ZSkge1xuICB0b09iamVjdChjb250ZXh0KVtrZXldID0gdmFsdWVcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b0NvbnRleHQge1xuICBjb25zdHJ1Y3Rvcihjb21wb25lbnQsIGNvbnRleHQpIHtcbiAgICAvLyBVc2UgdGhlIHByb3ZpZGVkIHBhcmFtcyBvYmplY3QgLyBmdW5jdGlvbiwgb3IgY3JlYXRlIGEgbmV3IG9uZTpcbiAgICBjb250ZXh0ID0gY29udGV4dFxuICAgICAgPyBpc0Z1bmN0aW9uKGNvbnRleHQpXG4gICAgICAgID8gY29udGV4dCgpXG4gICAgICAgIDogeyAuLi5jb250ZXh0IH1cbiAgICAgIDoge31cbiAgICAvLyBJZiBub3QgZXhwbGljaXRseSBzZXQgKHRvIGZhbHNlKSwgZGVmYXVsdCB0byB0cnVlIHNvIHdlIGRvbid0IGZhbGwgYmFja1xuICAgIC8vIHRvIGBjb21wb25lbnRgIGZvciBpdHMgdmFsdWUuXG4gICAgY29udGV4dC5uZXN0ZWQgPz89IHRydWVcbiAgICBjb250ZXh0LmNvbXBvbmVudCA9IGNvbXBvbmVudFxuICAgIC8vIEhhdmUgYG9iamVjdGAgaW5oZXJpdCBmcm9tIHRoZSBgY29tcG9uZW50YCBpbnN0YW5jZSwgc28gaXQgY2FuIG92ZXJyaWRlXG4gICAgLy8gaXRzIHZhbHVlcyBhbmQgc3RpbGwgcmV0cmlldmUgZnJvbSBpdCwgYW5kIGFzc29jaWF0ZSBpdCB3aXRoIGB0aGlzYFxuICAgIC8vIHRocm91Z2ggYGNvbnRleHRzYCBtYXA6XG4gICAgY29uc3Qgb2JqZWN0ID0gT2JqZWN0LnNldFByb3RvdHlwZU9mKGNvbnRleHQsIGNvbXBvbmVudClcbiAgICAvLyBObyBuZWVkIGZvciBgdG9SYXcodGhpcylgIGhlcmUgYXMgaXQncyBhbHdheXMgcmF3IGluc2lkZSB0aGUgY29uc3RydWN0b3IuXG4gICAgY29udGV4dHMuc2V0KHRoaXMsIG9iamVjdClcbiAgfVxuXG4gIHN0YXRpYyBnZXQoY29tcG9uZW50LCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNvbnRleHQgaW5zdGFuY2VvZiBEaXRvQ29udGV4dFxuICAgICAgPyBjb250ZXh0XG4gICAgICA6IG5ldyBEaXRvQ29udGV4dChjb21wb25lbnQsIGNvbnRleHQpXG4gIH1cblxuICBleHRlbmQob2JqZWN0KSB7XG4gICAgLy8gQ3JlYXRlIGEgY29weSBvZiB0aGlzIGNvbnRleHQgdGhhdCBpbmhlcml0cyBmcm9tIHRoZSByZWFsIG9uZSwgYnV0XG4gICAgLy8gb3ZlcnJpZGVzIHNvbWUgcHJvcGVydGllcyB3aXRoIHRoZSBvbmVzIGZyb20gdGhlIHBhc3NlZCBgb2JqZWN0YC5cbiAgICByZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKG9iamVjdCwgdGhpcylcbiAgfVxuXG4gIC8vIGBuZXN0ZWRgIGlzIGB0cnVlYCB3aGVuIHRoZSBkYXRhLXBhdGggcG9pbnRzIGEgdmFsdWUgaW5zaWRlIGFuIGl0ZW0sIGFuZFxuICAvLyBgZmFsc2VgIHdoZW4gaXQgcG9pbnRzIHRvIHRoZSBpdGVtIGl0c2VsZi5cbiAgZ2V0IG5lc3RlZCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICduZXN0ZWQnLCB0cnVlKVxuICB9XG5cbiAgZ2V0IHNjaGVtYSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdzY2hlbWEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiBnZXQoXG4gICAgICB0aGlzLFxuICAgICAgJ3ZhbHVlJyxcbiAgICAgICgpID0+XG4gICAgICAgIC8vIElmIHRoZSB2YWx1ZSBpcyBub3QgZGVmaW5lZCBvbiB0aGUgdW5kZXJseWluZyBvYmplY3QsIGl0J3Mgbm90IGEgdHlwZVxuICAgICAgICAvLyBjb21wb25lbnQuIElmIGl0IGlzIG5lc3RlZCwgd2UgY2FuIHN0aWxsIGdldCB0aGUgdmFsdWUgZnJvbSB0aGUgcm9vdC5cbiAgICAgICAgdGhpcy5uZXN0ZWRcbiAgICAgICAgICA/IGdldFZhbHVlQXREYXRhUGF0aCh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoKVxuICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgKVxuICB9XG5cbiAgZ2V0IGRhdGFQYXRoKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2RhdGFQYXRoJywgJycpXG4gIH1cblxuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICduYW1lJywgKCkgPT4gZ2V0TGFzdERhdGFQYXRoTmFtZSh0aGlzLmRhdGFQYXRoKSlcbiAgfVxuXG4gIGdldCBpbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdpbmRleCcsICgpID0+IGdldExhc3REYXRhUGF0aEluZGV4KHRoaXMuZGF0YVBhdGgpKVxuICB9XG5cbiAgZ2V0IGl0ZW1EYXRhUGF0aCgpIHtcbiAgICByZXR1cm4gZ2V0SXRlbURhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICB9XG5cbiAgZ2V0IHBhcmVudEl0ZW1EYXRhUGF0aCgpIHtcbiAgICByZXR1cm4gZ2V0UGFyZW50SXRlbURhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICB9XG5cbiAgZ2V0IGl0ZW1JbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0TGFzdERhdGFQYXRoSW5kZXgodGhpcy5pdGVtRGF0YVBhdGgpXG4gIH1cblxuICBnZXQgcGFyZW50SXRlbUluZGV4KCkge1xuICAgIHJldHVybiBnZXRMYXN0RGF0YVBhdGhJbmRleCh0aGlzLnBhcmVudEl0ZW1EYXRhUGF0aClcbiAgfVxuXG4gIC8vIE5PVEU6IFdoaWxlIGludGVybmFsbHksIHdlIHNwZWFrIG9mIGBkYXRhYCwgaW4gdGhlIEFQSSBzdXJmYWNlIHRoZVxuICAvLyB0ZXJtIGBpdGVtYCBpcyB1c2VkIGZvciB0aGUgZGF0YSB0aGF0IHJlbGF0ZXMgdG8gZWRpdGluZyBvYmplY3RzOlxuICBnZXQgaXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KFxuICAgICAgdGhpcyxcbiAgICAgICdkYXRhJyxcbiAgICAgIC8vIElmIGBkYXRhYCBpc24ndCBwcm92aWRlZCwgd2UgY2FuIGRldGVybWluZSBpdCBmcm9tIHJvb3REYXRhICYgZGF0YVBhdGg6XG4gICAgICAoKSA9PiBnZXRJdGVtKHRoaXMucm9vdEl0ZW0sIHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKSB8fCBudWxsXG4gICAgKVxuICB9XG5cbiAgLy8gTk9URTogYHBhcmVudEl0ZW1gIGlzbid0IHRoZSBjbG9zZXN0IGRhdGEgcGFyZW50IHRvIGBpdGVtYCwgaXQncyB0aGVcbiAgLy8gY2xvc2VzdCBwYXJlbnQgdGhhdCBpc24ndCBhbiBhcnJheSwgZS5nLiBmb3IgcmVsYXRpb25zIG9yIG5lc3RlZCBKU09OIGRhdGEuXG4gIC8vIFRoaXMgaXMgd2h5IHRoZSB0ZXJtIGBpdGVtYCB3YXMgY2hvc2VuIG92ZXIgYGRhdGFgLCBlLmcuIFZTIHRoZSB1c2Ugb2ZcbiAgLy8gYHBhcmVudERhdGFgIGluIHNlcnZlci1zaWRlZCB2YWxpZGF0aW9uLCB3aGljaCBpcyB0aGUgY2xvc2VzdCBwYXJlbnQuIElmXG4gIC8vIG5lZWRlZCwgd2UgY291bGQgZXhwb3NlIHRoaXMgZGF0YSBoZXJlIHRvbywgYXMgd2UgY2FuIGRvIGFsbCBzb3J0cyBvZiBkYXRhXG4gIC8vIHByb2Nlc3Npbmcgd2l0aCBgcm9vdERhdGFgIGFuZCBgZGF0YVBhdGhgLlxuICBnZXQgcGFyZW50SXRlbSgpIHtcbiAgICBjb25zdCBpdGVtID0gKFxuICAgICAgZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZCkgfHwgbnVsbFxuICAgIClcbiAgICByZXR1cm4gaXRlbSAhPT0gdGhpcy5pdGVtID8gaXRlbSA6IG51bGxcbiAgfVxuXG4gIGdldCByb290SXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdyb290RGF0YScsIG51bGwpXG4gIH1cblxuICBnZXQgcHJvY2Vzc2VkSXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdwcm9jZXNzZWREYXRhJywgbnVsbClcbiAgfVxuXG4gIGdldCBwcm9jZXNzZWRSb290SXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdwcm9jZXNzZWRSb290RGF0YScsIG51bGwpXG4gIH1cblxuICBnZXQgY2xpcGJvYXJkSXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdjbGlwYm9hcmREYXRhJywgbnVsbClcbiAgfVxuXG4gIGdldCB1c2VyKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3VzZXInLCBudWxsKVxuICB9XG5cbiAgZ2V0IGFwaSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdhcGknLCBudWxsKVxuICB9XG5cbiAgZ2V0IHZpZXdzKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3ZpZXdzJywgbnVsbClcbiAgfVxuXG4gIGdldCBmbGF0dGVuZWRWaWV3cygpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdmbGF0dGVuZWRWaWV3cycsIG51bGwpXG4gIH1cblxuICBnZXQgaXRlbUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2l0ZW1MYWJlbCcsIG51bGwpXG4gIH1cblxuICBnZXQgZm9ybUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Zvcm1MYWJlbCcsIG51bGwpXG4gIH1cblxuICAvLyBOT1RFOiBMaWtlICdvcHRpb25zJywgdGhlIGFzc29jaWF0ZWQgY29tcG9uZW50IGRvZXNuJ3QgYWx3YXlzIGV4aXN0LCBlLmcuXG4gIC8vIGluIG5lc3RlZCBmb3JtcyBkdXJpbmcgYHByb2Nlc3NEYXRhKClgLiBCdXQgYHNjaGVtYWAgaXMgZ3VhcmFudGVlZCB0b1xuICAvLyBhbHdheXMgYmUgYXZhaWxhYmxlLlxuICBnZXQgY29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICAvLyBUT0RPOiBBZGQgYGNvbXBvbmVudFNjaGVtYWAgZ2V0dGVyIGZvciB0aGUgc2NoZW1hIG9mIHRoZSBjdXJyZW50IGNvbXBvbmVudCxcbiAgLy8gZXZlbiB3aGVuIHRoZSBjb21wb25lbnQgaXNuJ3QgYWN0dWFsbHkgaW5zdGFudGlhdGVkLiBDb25zaWRlciBhZGRpbmdcbiAgLy8gYHNvdXJjZVNjaGVtYWAgYXMgd2VsbD9cblxuICAvLyBUT0RPOiBGaXggdW5jbGVhciBuYW1pbmc6IFdoaWNoIHNjaGVtYSBpcyB0aGlzLCB0aGF0IG9mIHRoZSBjb21wb25lbnQgb3Igb2ZcbiAgLy8gaXRzIHBhcmVudD8gSXNuJ3QgZXhwb3NpbmcgYGZvcm1Db21wb25lbnRgIGFuZCBgdmlld0NvbXBvbmVudGAgZW5vdWdoLCBvbmNlXG4gIC8vIHdlIG9mZmVyIGFjY2VzcyB0byB0aGVpciBjb21wb25lbnRzIHRoZXJlIHRocm91Z2ggYGdldENvbXBvbmVudCgpYCAmIGNvLiBvblxuICAvLyBgRGl0b01peGluYCBwZXJoYXBzPyAgQWxzbywgdGhlcmUgY291bGQgYmUgYSBgdGFiQ29tcG9uZW50YCBnZXR0ZXIgZm9yXG4gIC8vIHNjaGVtYXMgaW4gdGFicz9cbiAgZ2V0IHNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdzY2hlbWFDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGZvcm1Db21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZm9ybUNvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgdmlld0NvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd2aWV3Q29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBkaWFsb2dDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZGlhbG9nQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBwYW5lbENvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdwYW5lbENvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgcmVzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncmVzb3VyY2VDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdzb3VyY2VDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgLy8gV2hlbiB1c2VkIGluIE9wdGlvbnNNaXhpbiBmb3IgYHNjaGVtYS5vcHRpb25zLnZhbHVlKClgLFxuICAvLyBgc2NoZW1hLm9wdGlvbnMubGFiZWwoKWAgYW5kICBgc2NoZW1hLnNlYXJjaC5maWx0ZXIoKWAgY2FsbGJhY2tzOlxuICBnZXQgb3B0aW9uKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ29wdGlvbicsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCBvcHRpb25zKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ29wdGlvbnMnLCB1bmRlZmluZWQpXG4gIH1cblxuICBnZXQgb3BlbigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdvcGVuJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgLy8gVE9ETzogUmVuYW1lIHRoaXMgdG8gYHNlYXJjaFRlcm1gIG9yIGBzZWFyY2hRdWVyeWAsIHRvIHBlcmhhcHMgZnJlZSBgcXVlcnlgXG4gIC8vIGZvciB0aGUgYWN0dWFsIGByZXNvdXJjZUNvbXBvbmVudC5xdWVyeWAgb2JqZWN0P1xuICBnZXQgcXVlcnkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncXVlcnknLCB1bmRlZmluZWQpXG4gIH1cblxuICAvLyBUaGUgZXJyb3IgZmllbGQgaXMgb25seSBwb3B1bGF0ZWQgaW4gdGhlIGNvbnRleHQgb2YgYnV0dG9ucyB0aGF0IHNlbmRcbiAgLy8gcmVxdWVzdHMsIHNlZSBgUmVzb3VyY2VNaXhpbi5lbWl0QnV0dG9uRXZlbnQoKWA6XG4gIGdldCBlcnJvcigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdlcnJvcicsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCB3YXNOb3RpZmllZCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIGZhbHNlKVxuICB9XG5cbiAgLy8gSGVscGVyIE1ldGhvZHNcblxuICBnZXQgcmVxdWVzdCgpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA9PiB0aGlzLmNvbXBvbmVudC5yZXF1ZXN0KG9wdGlvbnMpXG4gIH1cblxuICBnZXQgZm9ybWF0KCkge1xuICAgIHJldHVybiAodmFsdWUsIG9wdGlvbnMpID0+IHRoaXMuY29tcG9uZW50LmZvcm1hdCh2YWx1ZSwgb3B0aW9ucylcbiAgfVxuXG4gIGdldCBuYXZpZ2F0ZSgpIHtcbiAgICByZXR1cm4gbG9jYXRpb24gPT4gdGhpcy5jb21wb25lbnQubmF2aWdhdGUobG9jYXRpb24pXG4gIH1cblxuICBnZXQgZG93bmxvYWQoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPT4gdGhpcy5jb21wb25lbnQuZG93bmxvYWQob3B0aW9ucylcbiAgfVxuXG4gIGdldCBnZXRSZXNvdXJjZVVybCgpIHtcbiAgICByZXR1cm4gcmVzb3VyY2UgPT4gdGhpcy5jb21wb25lbnQuZ2V0UmVzb3VyY2VVcmwocmVzb3VyY2UpXG4gIH1cblxuICBnZXQgbm90aWZ5KCkge1xuICAgIHJldHVybiBvcHRpb25zID0+IHtcbiAgICAgIHRoaXMuY29tcG9uZW50Lm5vdGlmeShvcHRpb25zKVxuICAgICAgc2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIHRydWUpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBpc1BsYWluT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGlzdGVuZXJzOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICAvLyBBc3luYyBvbigpIGFuZCAkb2ZmKCkgbWV0aG9kcyB0aGF0IGtlZXAgdHJhY2sgb2YgdGhlIGV2ZW50cyBhZGRlZCAvXG4gICAgLy8gcmVtb3ZlZCwgYW5kIHByb3ZpZGUgYSBoYXNMaXN0ZW5lcnMoKSBtZXRob2QgdGhhdCBjaGVja3MgaWYgdGhlIGNvbXBvbmVudFxuICAgIC8vIGhhcyBsaXN0ZW5lcnMgZm9yIGEgZ2l2ZW4gZXZlbnQuXG5cbiAgICAvLyBBbHNvIGFkZHMgcHJvcGVyIGhhbmRsaW5nIG9mIGFzeW5jIGV2ZW50cywgaW5jbHVkaW5nIGEgYXN5bmMgZW1pdCgpIHRoYXRcbiAgICAvLyBkZWFscyB3aXRoIHByb3BlciBldmVudCBxdWV1ZWluZy5cbiAgICBvbihldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5vbihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9uKGtleSwgZXZlbnRba2V5XSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gKHRoaXMubGlzdGVuZXJzIHx8PSBPYmplY3QuY3JlYXRlKG51bGwpKVxuICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyB9ID0gKGxpc3RlbmVyc1tldmVudF0gfHw9IHtcbiAgICAgICAgICBjYWxsYmFja3M6IFtdLFxuICAgICAgICAgIHF1ZXVlOiBbXVxuICAgICAgICB9KVxuICAgICAgICBjYWxsYmFja3MucHVzaChjYWxsYmFjaylcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIG9uY2UoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBvbiA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIHRoaXMub2ZmKGV2ZW50LCBvbilcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgICB9XG4gICAgICBvbi5jYWxsYmFjayA9IGNhbGxiYWNrIC8vIE5lZWRlZCBmb3IgYG9mZigpYCwgc2VlIGJlbG93LlxuICAgICAgcmV0dXJuIHRoaXMub24oZXZlbnQsIG9uKVxuICAgIH0sXG5cbiAgICBvZmYoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgLy8gUmVtb3ZlIGFsbCBldmVudHNcbiAgICAgICAgZGVsZXRlIHRoaXMubGlzdGVuZXJzXG4gICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihrZXksIGV2ZW50W2tleV0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbW92ZSBzcGVjaWZpYyBldmVudFxuICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMubGlzdGVuZXJzPy5bZXZlbnRdXG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSBhbGwgaGFuZGxlcnMgZm9yIHRoaXMgZXZlbnRcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmxpc3RlbmVyc1tldmVudF1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIGEgc3BlY2lmaWMgaGFuZGxlcjogZmluZCB0aGUgaW5kZXggaW4gY2FsbGJhY2tzXG4gICAgICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gY2FsbGJhY2tzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgLy8gTWF0Y2ggYGNiLmNhbGxiYWNrYCBhbHNvLCBhcyB1c2VkIGJ5IGBvbmNlKClgLCBzZWUgIGFib3ZlOlxuICAgICAgICAgICAgICBjYiA9PiBjYiA9PT0gY2FsbGJhY2sgfHwgY2IuY2FsbGJhY2sgPT09IGNhbGxiYWNrXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrcy5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBlbWl0KGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgICAvLyBPbmx5IHF1ZXVlIGV2ZW50IGlmIHRoZXJlIGFjdHVhbGx5IGFyZSBsaXN0ZW5lcnMgZm9yIGl0LlxuICAgICAgY29uc3QgZW50cnkgPSB0aGlzLmxpc3RlbmVycz8uW2V2ZW50XVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGNvbnN0IHsgcXVldWUsIGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgIGNvbnN0IG5leHQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAvLyBFbWl0IHRoZSBuZXh0IGV2ZW50IGluIHRoZSBxdWV1ZSB3aXRoIGl0cyBwYXJhbXMuXG4gICAgICAgICAgICAvLyBOb3RlIHRoYXQgaXQgb25seSBnZXRzIHJlbW92ZWQgb25jZSBgbmV4dCgpYCBpcyBjYWxsZWQuXG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHF1ZXVlLnNoaWZ0KClcbiAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICBsZXQgcmVzdWx0XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNhbGxiYWNrLmFwcGx5KHRoaXMsIGVudHJ5LmFyZ3MpXG4gICAgICAgICAgICAgICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBFcnJvciBkdXJpbmcgZXZlbnQgaGFuZGxlciBmb3IgJyR7ZXZlbnR9JzpgLFxuICAgICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBSZXNvbHZlIHRoZSBwcm9taXNlIHRoYXQgd2FzIGFkZGVkIHRvIHRoZSBxdWV1ZSBmb3IgdGhlIGV2ZW50XG4gICAgICAgICAgICAgIC8vIHRoYXQgd2FzIGp1c3QgY29tcGxldGVkIGJ5IHRoZSB3cmFwcGVyIHRoYXQgY2FsbGVkIGBuZXh0KClgXG4gICAgICAgICAgICAgIGVudHJ5LnJlc29sdmUocmVzdWx0KVxuICAgICAgICAgICAgICBuZXh0KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcXVldWUucHVzaCh7IGFyZ3MsIHJlc29sdmUgfSlcbiAgICAgICAgICAvLyBGb3IgbmV3IHF1ZXVlcyAoPSBvbmx5IG9uZSBlbnRyeSkgZW1pdCB0aGUgZmlyc3QgZXZlbnQgaW1tZWRpYXRlbHksXG4gICAgICAgICAgLy8gdG8gZ2V0IHRoZSBxdWV1ZSBydW5uaW5nLlxuICAgICAgICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIG5leHQoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIC8vIE1ha2Ugc3VyZSBpdCdzIHRoZW5hYmxlIGV2ZW4gaWYgdGhlcmUgYXJlIG5vIGxpc3RlbmVycy5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgIH0sXG5cbiAgICAvLyBDaGVja3MgaWYgdGhlIGNvbXBvbmVudCBoYXMgbGlzdGVuZXJzIGZvciBhIGdpdmVuIGV2ZW50IHR5cGU6XG4gICAgaGFzTGlzdGVuZXJzKGV2ZW50KSB7XG4gICAgICBpZiAoaXNBcnJheShldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBldiBvZiBldmVudCkge1xuICAgICAgICAgIGlmICghdGhpcy5oYXNMaXN0ZW5lcnMoZXYpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGV2ZW50Lmxlbmd0aCA+IDBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMubGlzdGVuZXJzPy5bZXZlbnRdXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRlbGVnYXRlKGV2ZW50LCB0YXJnZXQpIHtcbiAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBldiBvZiBldmVudCkge1xuICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZShldiwgdGFyZ2V0KVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm9uKGV2ZW50LCAoLi4uYXJncykgPT4gdGFyZ2V0LmVtaXQoZXZlbnQsIC4uLmFyZ3MpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IHsgY29tcHV0ZVZhbHVlIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXB1dGVkOiB7XG4gICAgdmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBjb21wdXRlVmFsdWUoXG4gICAgICAgICAgdGhpcy5zY2hlbWEsXG4gICAgICAgICAgdGhpcy5kYXRhLFxuICAgICAgICAgIHRoaXMubmFtZSxcbiAgICAgICAgICB0aGlzLmRhdGFQYXRoLFxuICAgICAgICAgIHsgY29tcG9uZW50OiB0aGlzIH1cbiAgICAgICAgKVxuICAgICAgICBjb25zdCB7IGZvcm1hdCB9ID0gdGhpcy5zY2hlbWFcbiAgICAgICAgcmV0dXJuIGZvcm1hdFxuICAgICAgICAgID8gZm9ybWF0KG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IHZhbHVlIH0pKVxuICAgICAgICAgIDogdmFsdWVcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBjb25zdCB7IHBhcnNlIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgICBpZiAocGFyc2UpIHtcbiAgICAgICAgICB2YWx1ZSA9IHBhcnNlKG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IHZhbHVlIH0pKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucGFyc2VkVmFsdWUgPSB2YWx1ZVxuICAgICAgICB0aGlzLmRhdGFbdGhpcy5uYW1lXSA9IHZhbHVlXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgeyBnZXRJdGVtLCBnZXRQYXJlbnRJdGVtIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcHV0ZWQ6IHtcbiAgICBjb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG5lc3RlZDogdGhpcy5uZXN0ZWQgfSlcbiAgICB9LFxuXG4gICAgLy8gVGhlIGZvbGxvd2luZyBjb21wdXRlZCBwcm9wZXJ0aWVzIGFyZSBzaW1pbGFyIHRvIGBEaXRvQ29udGV4dGBcbiAgICAvLyBwcm9wZXJ0aWVzLCBzbyB0aGF0IHdlIGNhbiBhY2Nlc3MgdGhlc2Ugb24gYHRoaXNgIGFzIHdlbGw6XG4gICAgLy8gTk9URTogV2hpbGUgaW50ZXJuYWxseSwgd2Ugc3BlYWsgb2YgYGRhdGFgLCBpbiB0aGUgQVBJIHN1cmZhY2UgdGhlXG4gICAgLy8gdGVybSBgaXRlbWAgaXMgdXNlZCBmb3IgdGhlIGRhdGEgdGhhdCByZWxhdGVzIHRvIGVkaXRpbmcgb2JqZWN0cy5cbiAgICAvLyBOT1RFOiBUaGlzIHNob3VsZCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIGFzOlxuICAgIC8vIHJldHVybiBnZXRJdGVtKHRoaXMucm9vdERhdGEsIHRoaXMuZGF0YVBhdGgsIGZhbHNlKVxuICAgIHBhcmVudERhdGEoKSB7XG4gICAgICBjb25zdCBkYXRhID0gZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3REYXRhLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgICAgIHJldHVybiBkYXRhICE9PSB0aGlzLmRhdGEgPyBkYXRhIDogbnVsbFxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBwcm9jZXNzZWREYXRhKCkge1xuICAgICAgcmV0dXJuIGdldFByb2Nlc3NlZFBhcmVudERhdGEodGhpcywgdGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gICAgfSxcblxuICAgIHByb2Nlc3NlZFJvb3REYXRhKCkge1xuICAgICAgcmV0dXJuIGdldFByb2Nlc3NlZFBhcmVudERhdGEodGhpcywgJycsIGZhbHNlKVxuICAgIH0sXG5cbiAgICBpdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBwYXJlbnRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucGFyZW50RGF0YVxuICAgIH0sXG5cbiAgICByb290SXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3REYXRhXG4gICAgfSxcblxuICAgIHByb2Nlc3NlZEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzZWREYXRhXG4gICAgfSxcblxuICAgIHByb2Nlc3NlZFJvb3RJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc2VkUm9vdERhdGFcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0UHJvY2Vzc2VkUGFyZW50RGF0YShjb21wb25lbnQsIGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICAvLyBXZSBjYW4gb25seSBnZXQgdGhlIHByb2Nlc3NlZCBkYXRhIHRocm91Z2ggdGhlIHNjaGVtYUNvbXBvbmVudCwgYnV0XG4gIC8vIHRoYXQncyBub3QgbmVjZXNzYXJpbHkgdGhlIGl0ZW0gcmVwcmVzZW50ZWQgYnkgdGhpcyBjb21wb25lbnQuXG4gIC8vIFNvbHV0aW9uOiBGaW5kIHRoZSByZWxhdGl2ZSBwYXRoIGFuZCB0aGUgcHJvY2Vzc2VkIHN1Yi1pdGVtIGZyb20gdGhlcmU6XG4gIGxldCB7IHNjaGVtYUNvbXBvbmVudCB9ID0gY29tcG9uZW50XG4gIC8vIEZpbmQgdGhlIHNjaGVtYSBjb21wb25lbnQgdGhhdCBjb250YWlucyB0aGUgZGVzaXJlZCBkYXRhLXBhdGg6XG4gIHdoaWxlIChzY2hlbWFDb21wb25lbnQuZGF0YVBhdGgubGVuZ3RoID4gZGF0YVBhdGgubGVuZ3RoKSB7XG4gICAgc2NoZW1hQ29tcG9uZW50ID0gc2NoZW1hQ29tcG9uZW50LnBhcmVudFNjaGVtYUNvbXBvbmVudFxuICB9XG4gIHJldHVybiBnZXRJdGVtKFxuICAgIHNjaGVtYUNvbXBvbmVudC5wcm9jZXNzZWREYXRhLFxuICAgIC8vIEdldCB0aGUgZGF0YVBhdGggcmVsYXRpdmUgdG8gdGhlIHNjaGVtYUNvbXBvbmVudCdzIGRhdGE6XG4gICAgZGF0YVBhdGguc2xpY2Uoc2NoZW1hQ29tcG9uZW50LmRhdGFQYXRoLmxlbmd0aCksXG4gICAgbmVzdGVkXG4gIClcbn1cbiIsImltcG9ydCB7IGlzQ3JlZGl0Q2FyZCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBjcmVkaXRjYXJkID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNDcmVkaXRDYXJkKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIGludmFsaWQnXG59XG4iLCJleHBvcnQgY29uc3QgZGVjaW1hbHMgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIGRlY2ltYWxzKSA9PiB7XG4gICAgY29uc3QgbWF0Y2ggPSBkZWNpbWFscyA9PT0gJyonID8gJysnIDogYHsxLCR7ZGVjaW1hbHN9fWBcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXlstK10/XFxcXGQqKFxcXFwuXFxcXGQke21hdGNofSk/JGApLnRlc3QodmFsdWUpXG4gIH0sXG5cbiAgbWVzc2FnZTogKHZhbHVlLCBkZWNpbWFscykgPT5cbiAgICBgbXVzdCBiZSBudW1lcmljIGFuZCBtYXkgY29udGFpbiAke1xuICAgICAgIWRlY2ltYWxzIHx8IGRlY2ltYWxzID09PSAnKicgPyAnJyA6IGRlY2ltYWxzXG4gICAgfSBkZWNpbWFsIHBvaW50c2Bcbn1cbiIsImltcG9ydCB7IGlzRG9tYWluIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGRvbWFpbiA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzRG9tYWluKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIG5vdCBhIGRvbWFpbidcbn1cbiIsImltcG9ydCB7IGlzRW1haWwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgZW1haWwgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0VtYWlsKHZhbHVlKSxcbiAgbWVzc2FnZTogJ211c3QgYmUgYSB2YWxpZCBlbWFpbCdcbn1cbiIsImltcG9ydCB7IGlzSG9zdG5hbWUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgaG9zdG5hbWUgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0hvc3RuYW1lKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIG5vdCBhIGhvc3QgbmFtZSdcbn1cbiIsImltcG9ydCB7IGlzSW50ZWdlciB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBpbnRlZ2VyID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNJbnRlZ2VyKHZhbHVlKSxcbiAgbWVzc2FnZTogJ211c3QgYmUgd2hvbGUgbnVtYmVyJ1xufVxuIiwiZXhwb3J0IGNvbnN0IG1heCA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgbWF4KSA9PiB2YWx1ZSA8PSBtYXgsXG4gIG1lc3NhZ2UodmFsdWUsIG1heCkge1xuICAgIHJldHVybiBgbXVzdCBiZSAke21heH0gb3IgbGVzc2BcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IG1pbiA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgbWluKSA9PiB2YWx1ZSA+PSBtaW4sXG4gIG1lc3NhZ2UodmFsdWUsIG1pbikge1xuICAgIHJldHVybiBgbXVzdCBiZSAke21pbn0gb3IgbW9yZWBcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IHBhc3N3b3JkID0ge1xuICAvLyBBbGxvdyBhbnkgdmFsdWUuIEZvciBub3cgdGhpcyBpcyBvbmx5IHVzZWQgYXMgYSBtYXJrZXIsIHRvIGFsbG93IHRoZVxuICAvLyByZXF1aXJlZCB2YWxpZGF0aW9uIHRvIGhhbmRsZSB1bmNoYW5nZWQgcGFzc3dvcmRzIHNlcGFyYXRlbHkuXG4gIHZhbGlkYXRlOiAoKSA9PiB0cnVlXG59XG4iLCJleHBvcnQgY29uc3QgcmFuZ2UgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIFttaW4sIG1heF0pID0+IHZhbHVlID49IG1pbiAmJiB2YWx1ZSA8PSBtYXgsXG4gIG1lc3NhZ2UodmFsdWUsIFttaW4sIG1heF0pIHtcbiAgICByZXR1cm4gYG11c3QgYmUgYmV0d2VlbiAke21pbn0gYW5kICR7bWF4fWBcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IHJlcXVpcmVkID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBzZXR0aW5ncywgeyBwYXNzd29yZCB9KSA9PiAoXG4gICAgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT09ICcnKSB8fFxuICAgIC8vIFBhc3N3b3JkIGZpZWxkcyB1c2UgYHVuZGVmaW5lZGAgYXMgb3Bwb3NlZCB0byBgbnVsbGAgd2hlbiB0aGV5J3JlIHNldFxuICAgIC8vIGJ1dCB1bmNoYW5nZWQsIGFsbG93IHRoaXMgdG8gcGFzcyB0aHJvdWdoOlxuICAgIChwYXNzd29yZCAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuICApLFxuICBtZXNzYWdlOiAnaXMgcmVxdWlyZWQnXG59XG4iLCJpbXBvcnQgeyBpc1VybCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCB1cmwgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc1VybCh2YWx1ZSksXG4gIG1lc3NhZ2U6ICdpcyBub3QgYSB2YWxpZCBVUkwnXG59XG4iLCJpbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCAqIGFzIHZhbGlkYXRvcnMgZnJvbSAnLi4vdmFsaWRhdG9ycy9pbmRleC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZW1pdHM6IFsnZXJyb3JzJ10sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNUb3VjaGVkOiBmYWxzZSxcbiAgICAgIGlzRGlydHk6IGZhbHNlLFxuICAgICAgaXNWYWxpZGF0ZWQ6IGZhbHNlLFxuICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICBlcnJvcnM6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBoYXNFcnJvcnMoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmVycm9yc1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgcmVzZXRWYWxpZGF0aW9uKCkge1xuICAgICAgdGhpcy5pc1RvdWNoZWQgPSBmYWxzZVxuICAgICAgdGhpcy5pc0RpcnR5ID0gZmFsc2VcbiAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkID0gZmFsc2VcbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgIH0sXG5cbiAgICB2YWxpZGF0ZShub3RpZnkgPSB0cnVlKSB7XG4gICAgICBsZXQgaXNWYWxpZCA9IHRydWVcbiAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgICB9XG4gICAgICBjb25zdCB7IHZhbHVlIH0gPSB0aGlzXG4gICAgICBmb3IgKGNvbnN0IFtydWxlLCBzZXR0aW5nXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnZhbGlkYXRpb25zKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25hbWVzcGFjZVxuICAgICAgICBjb25zdCB2YWxpZGF0b3IgPSB2YWxpZGF0b3JzW3J1bGVdXG4gICAgICAgIGlmIChcbiAgICAgICAgICB2YWxpZGF0b3IgJiZcbiAgICAgICAgICAvLyBPbmx5IGFwcGx5ICdyZXF1aXJlZCcgdmFsaWRhdG9yIHRvIGVtcHR5IHZhbHVlcy5cbiAgICAgICAgICAvLyBBcHBseSBhbGwgb3RoZXIgdmFsaWRhdG9ycyBvbmx5IHRvIG5vbi1lbXB0eSB2YWx1ZXMuXG4gICAgICAgICAgKHJ1bGUgPT09ICdyZXF1aXJlZCcgfHwgdmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPT0gJycpXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IHsgdmFsaWRhdGUsIG1lc3NhZ2UgfSA9IHZhbGlkYXRvclxuICAgICAgICAgIGlmICghdmFsaWRhdGUodmFsdWUsIHNldHRpbmcsIHRoaXMudmFsaWRhdGlvbnMpKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2VcbiAgICAgICAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBpc0Z1bmN0aW9uKG1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgPyBtZXNzYWdlKHZhbHVlLCBzZXR0aW5nLCB0aGlzKVxuICAgICAgICAgICAgICAgIDogbWVzc2FnZVxuICAgICAgICAgICAgICB0aGlzLmFkZEVycm9yKGVycm9yLCB0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICB0aGlzLmlzVmFsaWRhdGVkID0gdHJ1ZVxuICAgICAgICB0aGlzLmlzVmFsaWQgPSBpc1ZhbGlkXG4gICAgICB9XG4gICAgICByZXR1cm4gaXNWYWxpZFxuICAgIH0sXG5cbiAgICB2ZXJpZnkoKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZShmYWxzZSlcbiAgICB9LFxuXG4gICAgbWFya1RvdWNoZWQoKSB7XG4gICAgICB0aGlzLmlzVG91Y2hlZCA9IHRydWVcbiAgICAgIC8vIENsZWFyIGN1cnJlbnRseSBkaXNwbGF5ZWQgZXJyb3JzIHdoZW4gZm9jdXNpbmcgaW5wdXQuXG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICB9LFxuXG4gICAgbWFya0RpcnR5KCkge1xuICAgICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZVxuICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzVmFsaWQgPSBmYWxzZVxuICAgICAgLy8gQ2xlYXIgY3VycmVudGx5IGRpc3BsYXllZCBlcnJvcnMgb24gbmV3IGlucHV0LlxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIGFkZEVycm9yKGVycm9yLCBhZGRMYWJlbCA9IGZhbHNlKSB7XG4gICAgICB0aGlzLmVycm9ycyB8fD0gW11cbiAgICAgIGlmIChhZGRMYWJlbCkge1xuICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMubGFiZWwgfHwgdGhpcy5wbGFjZWhvbGRlciB8fCB0aGlzLm5hbWVcbiAgICAgICAgZXJyb3IgPSBgVGhlICR7bGFiZWx9IGZpZWxkICR7ZXJyb3J9LmBcbiAgICAgIH1cbiAgICAgIHRoaXMuZXJyb3JzLnB1c2goZXJyb3IpXG4gICAgICB0aGlzLiRlbWl0KCdlcnJvcnMnLCB0aGlzLmVycm9ycylcbiAgICB9LFxuXG4gICAgc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cykge1xuICAgICAgLy8gQ29udmVydCBmcm9tIEFKViBlcnJvcnMgb2JqZWN0cyB0byBhbiBhcnJheSBvZiBlcnJvciBtZXNzYWdlc1xuICAgICAgdGhpcy5lcnJvcnMgPSBbXVxuICAgICAgaWYgKGVycm9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IHsgbWVzc2FnZSB9IG9mIGVycm9ycykge1xuICAgICAgICB0aGlzLmFkZEVycm9yKG1lc3NhZ2UsIHRydWUpXG4gICAgICB9XG4gICAgICBpZiAoZm9jdXMpIHtcbiAgICAgICAgdGhpcy5zY3JvbGxJbnRvVmlldygpXG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0sXG5cbiAgICBnZXRFcnJvcnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5lcnJvcnMgPyBbLi4udGhpcy5lcnJvcnNdIDogbnVsbFxuICAgIH0sXG5cbiAgICBjbGVhckVycm9ycygpIHtcbiAgICAgIHRoaXMuZXJyb3JzID0gbnVsbFxuICAgICAgdGhpcy4kZW1pdCgnZXJyb3JzJywgdGhpcy5lcnJvcnMpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQge1xuICBpc0Z1bmN0aW9uLFxuICBpc1N0cmluZyxcbiAgcGFyc2VEYXRhUGF0aCxcbiAgbm9ybWFsaXplRGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjaGVtYUFjY2Vzc29yKFxuICBrZXlPckRhdGFQYXRoLFxuICB7IHR5cGUsIGRlZmF1bHQ6IGRlZiwgZ2V0LCBzZXQsIGNhbGxiYWNrID0gdHJ1ZSB9ID0ge31cbikge1xuICAvLyBga2V5T3JEYXRhUGF0aGAgY2FuIGJlIGEgc2ltcGxlIHByb3BlcnR5IGtleSxcbiAgLy8gb3IgYSBkYXRhLXBhdGggaW50byBzdWItcHJvcGVydGllcywgYm90aCBpbiBhcnJheSBvciBzdHJpbmcgZm9ybWF0LlxuICBpZiAoaXNTdHJpbmcoa2V5T3JEYXRhUGF0aCkgJiYga2V5T3JEYXRhUGF0aC5pbmNsdWRlcygnLicpKSB7XG4gICAga2V5T3JEYXRhUGF0aCA9IHBhcnNlRGF0YVBhdGgoa2V5T3JEYXRhUGF0aClcbiAgfVxuICAvLyBVc2UgdGhlIG5vcm1hbGl6ZWQgZGF0YSBwYXRoIGZvciB0aGUgaGFuZGxpbmcgb3ZlcnJpZGVzXG4gIGNvbnN0IG5hbWUgPSBub3JtYWxpemVEYXRhUGF0aChrZXlPckRhdGFQYXRoKVxuICByZXR1cm4ge1xuICAgIGdldCgpIHtcbiAgICAgIC8vIE9ubHkgZGV0ZXJtaW5lIHNjaGVtYSB2YWx1ZSBpZiB3ZSBoYXZlIG5vIGdldHRlciwgb3IgdGhlIGdldHRlclxuICAgICAgLy8gd2FudHMgdG8gcmVjZWl2ZSB0aGUgdmFsdWUgYW5kIHByb2Nlc3MgaXQgZnVydGhlcjpcbiAgICAgIGNvbnN0IHZhbHVlID1cbiAgICAgICAgIWdldCB8fCBnZXQubGVuZ3RoID4gMFxuICAgICAgICAgID8gLy8gTk9URTogQmVjYXVzZSBgc2NoZW1hYCBvYmplY3RzIGFyZSByZXRyaWV2ZWQgZnJvbSBgbWV0YWAsIHRoZXlcbiAgICAgICAgICAgIC8vIGRvbid0IHNlZW0gdG8gYmUgcmVhY3RpdmUuIFRvIGFsbG93IGNoYW5nZWQgaW4gYHNjaGVtYWAgdmFsdWVzLFxuICAgICAgICAgICAgLy8gYHNldCgpYCBzdG9yZXMgY2hhbmdlZCB2YWx1ZXMgaW4gdGhlIHNlcGFyYXRlIGBvdmVycmlkZXNgIG9iamVjdC5cbiAgICAgICAgICAgIHRoaXMub3ZlcnJpZGVzICYmIG5hbWUgaW4gdGhpcy5vdmVycmlkZXNcbiAgICAgICAgICAgID8gdGhpcy5vdmVycmlkZXNbbmFtZV1cbiAgICAgICAgICAgIDogdGhpcy5nZXRTY2hlbWFWYWx1ZShrZXlPckRhdGFQYXRoLCB7XG4gICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBkZWYsXG4gICAgICAgICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgcmV0dXJuIGdldCA/IGdldC5jYWxsKHRoaXMsIHZhbHVlKSA6IHZhbHVlXG4gICAgfSxcblxuICAgIHNldCh2YWx1ZSkge1xuICAgICAgaWYgKHNldCkge1xuICAgICAgICBzZXQuY2FsbCh0aGlzLCB2YWx1ZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3ZlcnJpZGVzIHx8PSB7fVxuICAgICAgICB0aGlzLm92ZXJyaWRlc1tuYW1lXSA9IHZhbHVlXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdG9yZUFjY2Vzc29yKG5hbWUsIHsgZGVmYXVsdDogZGVmLCBnZXQsIHNldCB9ID0ge30pIHtcbiAgcmV0dXJuIHtcbiAgICBnZXQoKSB7XG4gICAgICBsZXQgdmFsdWUgPSB0aGlzLmdldFN0b3JlKG5hbWUpXG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBkZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBTdXBwb3J0IGBkZWZhdWx0KClgIGZ1bmN0aW9uczpcbiAgICAgICAgdmFsdWUgPSBpc0Z1bmN0aW9uKGRlZikgPyBkZWYuY2FsbCh0aGlzKSA6IGRlZlxuICAgICAgICAvLyBUcmlnZ2VyIHNldHRlciBieSBzZXR0aW5nIHZhbHVlIGFuZCBhY2Nlc3NvciB0byBkZWZhdWx0OlxuICAgICAgICB0aGlzW25hbWVdID0gdmFsdWVcbiAgICAgICAgLy8gTm93IGFjY2VzcyBzdG9yZSBhZ2FpbiwgZm9yIHJlYWN0aXZpdHkgdHJhY2tpbmdcbiAgICAgICAgdGhpcy5nZXRTdG9yZShuYW1lKVxuICAgICAgfVxuICAgICAgLy8gQWxsb3cgdGhlIHByb3ZpZGVkIGdldHRlciB0byBmdXJ0aGVyIGNoYW5nZSBvciBwcm9jZXNzIHRoZSB2YWx1ZVxuICAgICAgLy8gcmV0cmlldmVkIGZyb20gdGhlIHN0b3JlOlxuICAgICAgcmV0dXJuIGdldCA/IGdldC5jYWxsKHRoaXMsIHZhbHVlKSA6IHZhbHVlXG4gICAgfSxcblxuICAgIHNldCh2YWx1ZSkge1xuICAgICAgLy8gQWxsb3cgdGhlIHByb3ZpZGVkIHNldHRlciB0byByZXR1cm4gYSBuZXcgdmFsdWUgdG8gc2V0LCBvciBkbyB0aGVcbiAgICAgIC8vIHNldHRpbmcgaXRzZWxmLCBhbmQgdGhlbiByZXR1cm4gYHVuZGVmaW5lZGA6XG4gICAgICBpZiAoIXNldCB8fCAodmFsdWUgPSBzZXQuY2FsbCh0aGlzLCB2YWx1ZSkpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5zZXRTdG9yZShuYW1lLCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBWYWx1ZU1peGluIGZyb20gJy4vVmFsdWVNaXhpbi5qcydcbmltcG9ydCBDb250ZXh0TWl4aW4gZnJvbSAnLi9Db250ZXh0TWl4aW4uanMnXG5pbXBvcnQgVmFsaWRhdGlvbk1peGluIGZyb20gJy4vVmFsaWRhdGlvbk1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGFzQXJyYXksIGNhbWVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbVmFsdWVNaXhpbiwgQ29udGV4dE1peGluLCBWYWxpZGF0aW9uTWl4aW5dLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAvLyBOT1RFOiBXaGlsZSBgZGF0YVBhdGhgIHBvaW50cyB0byB0aGUgYWN0dWFsIGB2YWx1ZWAsIGBkYXRhYCByZXByZXNlbnRzXG4gICAgLy8gdGhlIGBpdGVtYCBpbiB3aGljaCB0aGUgYHZhbHVlYCBpcyBjb250YWluZWQsIHVuZGVyIHRoZSBrZXkgYG5hbWVgLlxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgd2lkdGg6IHsgdHlwZTogW051bWJlciwgU3RyaW5nXSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGxhYmVsOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBhY2N1bXVsYXRlZEJhc2lzOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFyc2VkVmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgIGZvY3VzZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5uYW1lXG4gICAgfSxcblxuICAgIHR5cGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEudHlwZVxuICAgIH0sXG5cbiAgICBsYWJlbE5vZGUoKSB7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy5pc01vdW50ZWQgPyB0aGlzLiRlbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nIDogbnVsbFxuICAgICAgcmV0dXJuIG5vZGU/Lm1hdGNoZXMoJy5kaXRvLWxhYmVsJykgPyBub2RlIDogbnVsbFxuICAgIH0sXG5cbiAgICB2aXNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndmlzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kb3B0aW9ucy5kZWZhdWx0VmlzaWJsZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBleGNsdWRlZGAgZm9yIGNvbnNpc3RlbnQgbmFtaW5nP1xuICAgIGV4Y2x1ZGU6IGdldFNjaGVtYUFjY2Vzc29yKCdleGNsdWRlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICByZXF1aXJlZDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlcXVpcmVkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBNb3ZlIHRoZXNlIHRvIGEgc3ViLWNsYXNzIGNvbXBvbmVudCB1c2VkIGZvciBhbGwgaW5wdXQgY29tcG9uZW50cz9cbiAgICByZWFkb25seTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlYWRvbmx5Jywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBhdXRvZm9jdXM6IGdldFNjaGVtYUFjY2Vzc29yKCdhdXRvZm9jdXMnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIC8vIFRvIGJlIHVzZWQgZm9yIHNlbGVjdHMgYW5kIGlucHV0cyBvbmx5P1xuICAgIGNsZWFyYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NsZWFyYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcblxuICAgICAgZ2V0KGNsZWFyYWJsZSkge1xuICAgICAgICByZXR1cm4gY2xlYXJhYmxlICYmICF0aGlzLnJlYWRvbmx5XG4gICAgICB9XG4gICAgfSksXG5cbiAgICBtYXhMZW5ndGg6IGdldFNjaGVtYUFjY2Vzc29yKCdtYXhMZW5ndGgnLCB7XG4gICAgICB0eXBlOiBOdW1iZXJcbiAgICB9KSxcblxuICAgIHBsYWNlaG9sZGVyOiBnZXRTY2hlbWFBY2Nlc3NvcigncGxhY2Vob2xkZXInLCB7XG4gICAgICB0eXBlOiBTdHJpbmdcbiAgICB9KSxcblxuICAgIGF1dG9jb21wbGV0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2F1dG9jb21wbGV0ZScsIHtcbiAgICAgIHR5cGU6IFN0cmluZ1xuICAgIH0pLFxuXG4gICAgZXZlbnRzKCkge1xuICAgICAgY29uc3QgZXZlbnRzID0gdGhpcy5nZXRFdmVudHMoKVxuICAgICAgLy8gUmVnaXN0ZXIgY2FsbGJhY2tzIGZvciBhbGwgcHJvdmlkZXMgbm9uLXJlY29nbml6ZWQgZXZlbnRzLFxuICAgICAgLy8gYXNzdW1pbmcgdGhleSBhcmUgbmF0aXZlIGV2ZW50cy5cbiAgICAgIC8vIFRPRE86IE1vdmUgdG8gdnVlMy1zdHlsZSBgb25bQS1aXWAgZXZlbnQgaGFuZGxlcnMgbmFtaW5nIHRoYXQgYXJlbid0XG4gICAgICAvLyBuYW1lc3BhY2VkIGluIGBzY2hlbWEuZXZlbnRzYCBvbmNlIHRoZSB0cmFuc2l0aW9uIGlzIGNvbXBsZXRlLlxuICAgICAgZm9yIChjb25zdCBldmVudCBvZiBPYmplY3Qua2V5cyh0aGlzLnNjaGVtYS5ldmVudHMgfHwge30pKSB7XG4gICAgICAgIGV2ZW50c1tgb24ke2NhbWVsaXplKGV2ZW50LCB0cnVlKX1gXSA/Pz0gKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZW1pdEV2ZW50KGV2ZW50KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZXZlbnRzXG4gICAgfSxcblxuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICBjb25zdCB7IG5hdGl2ZUZpZWxkLCB0ZXh0RmllbGQgfSA9IHRoaXMuJG9wdGlvbnNcblxuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgLi4udGhpcy5ldmVudHMsXG4gICAgICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkXG4gICAgICB9XG5cbiAgICAgIGlmIChuYXRpdmVGaWVsZCkge1xuICAgICAgICBhdHRyaWJ1dGVzLm5hbWUgPSB0aGlzLmRhdGFQYXRoXG4gICAgICAgIGlmICh0aGlzLmxhYmVsKSB7XG4gICAgICAgICAgYXR0cmlidXRlcy50aXRsZSA9IHRoaXMubGFiZWxcbiAgICAgICAgfVxuICAgICAgICBhdHRyaWJ1dGVzLnJlYWRvbmx5ID0gdGhpcy5yZWFkb25seVxuICAgICAgICBhdHRyaWJ1dGVzLmF1dG9mb2N1cyA9IHRoaXMuYXV0b2ZvY3VzXG4gICAgICAgIGlmICh0ZXh0RmllbGQpIHtcbiAgICAgICAgICBhdHRyaWJ1dGVzLm1heGxlbmd0aCA9IHRoaXMubWF4TGVuZ3RoXG4gICAgICAgICAgYXR0cmlidXRlcy5wbGFjZWhvbGRlciA9IHRoaXMucGxhY2Vob2xkZXJcbiAgICAgICAgICBhdHRyaWJ1dGVzLmF1dG9jb21wbGV0ZSA9IHRoaXMuYXV0b2NvbXBsZXRlXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF0dHJpYnV0ZXNcbiAgICB9LFxuXG4gICAgdmFsaWRhdGlvbnMoKSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9ucyA9IHsgLi4udGhpcy5nZXRWYWxpZGF0aW9ucygpIH1cbiAgICAgIGlmICh0aGlzLnJlcXVpcmVkKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLnJlcXVpcmVkID0gdHJ1ZVxuICAgICAgfVxuICAgICAgLy8gQWxsb3cgc2NoZW1hIHRvIG92ZXJyaWRlIGRlZmF1bHQgcnVsZXMgYW5kIGFkZCBhbnkgbmV3IG9uZXM6XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYS5ydWxlcyB8fCB7fSkpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkZWxldGUgdmFsaWRhdGlvbnNba2V5XVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkYXRpb25zW2tleV0gPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsaWRhdGlvbnNcbiAgICB9LFxuXG4gICAgc2hvd0NsZWFyQnV0dG9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xlYXJhYmxlICYmIHRoaXMudmFsdWUgIT0gbnVsbFxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gICAgdGhpcy5zZXR1cFNjaGVtYUZpZWxkcygpXG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICAvLyBQcmV2ZW50IHVubmVzdGVkIHR5cGUgY29tcG9uZW50cyBmcm9tIG92ZXJyaWRpbmcgcGFyZW50IGRhdGEgcGF0aHNcbiAgICAgIGlmICh0aGlzLm5lc3RlZCkge1xuICAgICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5fcmVnaXN0ZXJDb21wb25lbnQodGhpcywgYWRkKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBnZXRFdmVudHMoKSB7XG4gICAgICBjb25zdCB7IG9uRm9jdXMsIG9uQmx1ciwgb25JbnB1dCwgb25DaGFuZ2UgfSA9IHRoaXNcbiAgICAgIHJldHVybiB7IG9uRm9jdXMsIG9uQmx1ciwgb25JbnB1dCwgb25DaGFuZ2UgfVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBnZXRWYWxpZGF0aW9ucygpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGFzeW5jIHNjcm9sbEludG9WaWV3KCkge1xuICAgICAgYXdhaXQgdGhpcy5mb2N1c1NjaGVtYSgpXG4gICAgICB0aGlzLmdldEZvY3VzRWxlbWVudCgpPy5zY3JvbGxJbnRvVmlldz8uKHtcbiAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgICAgICBibG9jazogJ2NlbnRlcidcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuZ2V0Rm9jdXNFbGVtZW50KCk/LmZvY3VzPy4oKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBibHVyRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuZ2V0Rm9jdXNFbGVtZW50KCk/LmJsdXI/LigpXG4gICAgfSxcblxuICAgIGdldEZvY3VzRWxlbWVudCgpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBhc0FycmF5KHRoaXMuJHJlZnMuZWxlbWVudClbMF0gPz8gdGhpc1xuICAgICAgcmV0dXJuIGVsZW1lbnQuJGVsID8/IGVsZW1lbnRcbiAgICB9LFxuXG4gICAgYXN5bmMgZm9jdXNTY2hlbWEoKSB7XG4gICAgICAvLyBBbHNvIGZvY3VzIHRoaXMgY29tcG9uZW50J3Mgc2NoZW1hIGFuZCBwYW5lbCBpbiBjYXNlIGl0J3MgYSB0YWIuXG4gICAgICBhd2FpdCB0aGlzLnNjaGVtYUNvbXBvbmVudC5mb2N1cygpXG4gICAgICBhd2FpdCB0aGlzLnRhYkNvbXBvbmVudD8uZm9jdXMoKVxuICAgIH0sXG5cbiAgICBhc3luYyBmb2N1cygpIHtcbiAgICAgIGF3YWl0IHRoaXMuZm9jdXNTY2hlbWEoKVxuICAgICAgdGhpcy5zY3JvbGxJbnRvVmlldygpXG4gICAgICB0aGlzLmZvY3VzRWxlbWVudCgpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLmJsdXJFbGVtZW50KClcbiAgICB9LFxuXG4gICAgY2xlYXIoKSB7XG4gICAgICB0aGlzLnZhbHVlID0gbnVsbFxuICAgICAgdGhpcy5ibHVyKClcbiAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgIH0sXG5cbiAgICBvbkZvY3VzKCkge1xuICAgICAgdGhpcy5mb2N1c2VkID0gdHJ1ZVxuICAgICAgdGhpcy5tYXJrVG91Y2hlZCgpXG4gICAgICB0aGlzLmVtaXRFdmVudCgnZm9jdXMnKVxuICAgIH0sXG5cbiAgICBvbkJsdXIoKSB7XG4gICAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZVxuICAgICAgdGhpcy52YWxpZGF0ZSgpXG4gICAgICB0aGlzLmVtaXRFdmVudCgnYmx1cicpXG4gICAgfSxcblxuICAgIG9uSW5wdXQoKSB7XG4gICAgICB0aGlzLm1hcmtEaXJ0eSgpXG4gICAgICB0aGlzLmVtaXRFdmVudCgnaW5wdXQnKVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIHRoaXMubWFya0RpcnR5KClcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdjaGFuZ2UnLCB7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAvLyBQcmV2ZW50IGVuZGxlc3MgcGFyc2UgcmVjdXJzaW9uOlxuICAgICAgICAgIHZhbHVlOiB0aGlzLnBhcnNlZFZhbHVlICE9PSB1bmRlZmluZWQgPyB0aGlzLnBhcnNlZFZhbHVlIDogdGhpcy52YWx1ZVxuICAgICAgICB9LFxuICAgICAgICAvLyBQYXNzIGBzY2hlbWFDb21wb25lbnRgIGFzIHBhcmVudCwgc28gY2hhbmdlIGV2ZW50cyBjYW4gcHJvcGFnYXRlIHVwLlxuICAgICAgICBwYXJlbnQ6IHRoaXMuc2NoZW1hQ29tcG9uZW50XG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgdG9SYXcgfSBmcm9tICd2dWUnXG5cbmNvbnN0IHVpZE1hcCA9IG5ldyBXZWFrTWFwKClcblxuLy8gR2VuZXJhdGVkIGFuZCByZW1lbWJlcnMgdW5pcXVlIGlkcyBwZXIgcGFzc2VkIG9iamVjdCB1c2luZyBhIHdlYWsgbWFwLlxubGV0IHVpZCA9IDBcbmV4cG9ydCBmdW5jdGlvbiBnZXRVaWQoaXRlbSwgZ2V0SXRlbUlkID0gbnVsbCkge1xuICBjb25zdCByYXcgPSB0b1JhdyhpdGVtKVxuICBsZXQgaWQgPSB1aWRNYXAuZ2V0KHJhdylcbiAgaWYgKCFpZCAmJiBpdGVtKSB7XG4gICAgaWQgPSBnZXRJdGVtSWQ/LihpdGVtKSB8fCBgQCR7Kyt1aWR9YFxuICAgIHVpZE1hcC5zZXQocmF3LCBpZClcbiAgfVxuICByZXR1cm4gaWRcbn1cbiIsImltcG9ydCB7IGlzVGVtcG9yYXJ5SWQgfSBmcm9tICcuL2RhdGEuanMnXG5pbXBvcnQge1xuICBpc0ludGVnZXIsXG4gIGFzQXJyYXksXG4gIHBhcnNlRGF0YVBhdGgsXG4gIGdldFZhbHVlQXREYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgbmFub2lkIH0gZnJvbSAnbmFub2lkJ1xuXG4vLyBTY2hlbWFHcmFwaCBpcyBhIGNsYXNzIHRvIGNvbGxlY3Qgc2NoZW1hIGdyYXBoIG1ldGEgaW5mb3JtYXRpb24gaW4gb3JkZXIgdG9cbi8vIHByb2Nlc3Mgc291cmNlcyBhbmQgcmVsYXRpb25zIGZvciB0aGUgZ2l2ZW4gdGFyZ2V0cyAnc2VydmVyJyBhbmQgJ2NsaXBib2FyZCcsXG4vLyBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyB0YWJsZTpcbi8vXG4vLyB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0gfFxuLy8gfCBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VydmVyICAgIHwgY2xpcGJvYXJkIHxcbi8vIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLSB8IC0tLS0tLS0tLSB8XG4vLyB8IHR5cGU6ICdyZWxhdGlvbicsIGludGVybmFsOiBmYWxzZSAgICAgICAgICAgfCBrZWVwIGlkICAgfCBrZWVwIGlkICAgfFxuLy8gfCB0eXBlOiAncmVsYXRpb24nLCBpbnRlcm5hbDogdHJ1ZSAgICAgICAgICAgIHwga2VlcCBpZCAgIHwgcmVmLCAjcmVmIHxcbi8vIHwgdHlwZTogJ3JlbGF0aW9uJywgaW50ZXJuYWw6IHRydWUsIHRlbXBvcmFyeSB8IHJlZiwgI3JlZiB8IHJlZiwgI3JlZiB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiBmYWxzZSAgICAgICAgICAgICAgfCBrZWVwIGlkICAgfCByZW1vdmUgaWQgfFxuLy8gfCB0eXBlOiAnc291cmNlJywgcmVsYXRlZDogZmFsc2UsIHRlbXBvcmFyeSAgIHwgcmVmLCAjaWQgIHwgcmVtb3ZlIGlkIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IHRydWUgICAgICAgICAgICAgICB8IGtlZXAgaWQgICB8IHJlZiwgI2lkICB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiB0cnVlLCB0ZW1wb3JhcnkgICAgfCByZWYsICNpZCAgfCByZWYsICNpZCAgfFxuLy8gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tIHxcblxuZXhwb3J0IGNsYXNzIFNjaGVtYUdyYXBoIHtcbiAgZ3JhcGggPSB7fVxuICByZWZlcmVuY2VzID0ge31cblxuICBzZXQoZGF0YVBhdGgsIHNldHRpbmdzLCBkZWZhdWx0cykge1xuICAgIGRhdGFQYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgICBsZXQgc3ViR3JhcGggPSB0aGlzLmdyYXBoXG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIGRhdGFQYXRoKSB7XG4gICAgICBjb25zdCBrZXkgPSBpc0ludGVnZXIoK3BhcnQpID8gJyonIDogcGFydFxuICAgICAgc3ViR3JhcGggPSBzdWJHcmFwaFtrZXldID8/PSB7fVxuICAgIH1cbiAgICBzdWJHcmFwaC4kc2V0dGluZ3MgPSB7XG4gICAgICAuLi5kZWZhdWx0cywgLy8gU2VlIGBhZGRTb3VyY2UoZGF0YVBhdGgpYFxuICAgICAgLi4uc3ViR3JhcGguJHNldHRpbmdzLFxuICAgICAgLi4uc2V0dGluZ3NcbiAgICB9XG4gIH1cblxuICBhZGRTb3VyY2UoZGF0YVBhdGgsIHNjaGVtYSkge1xuICAgIC8vIE9ubHkgc2V0IGByZWxhdGVkOiBmYWxzZWAgdGhyb3VnaCB0aGUgZGVmYXVsdHMsIGFzIGBzZXRTb3VyY2VSZWxhdGVkKClgXG4gICAgLy8gbWF5IGJlIGNhbGxlZCBiZWZvcmUgYGFkZFNvdXJjZSgpYCwgZGVwZW5kaW5nIG9uIHRoZSBncmFwaCBzdHJ1Y3R1cmUuXG4gICAgdGhpcy5zZXQoZGF0YVBhdGgsIHsgdHlwZTogJ3NvdXJjZScsIHNjaGVtYSB9LCB7IHJlbGF0ZWQ6IGZhbHNlIH0pXG4gIH1cblxuICBzZXRTb3VyY2VSZWxhdGVkKGRhdGFQYXRoKSB7XG4gICAgdGhpcy5zZXQoZGF0YVBhdGgsIHtcbiAgICAgIHJlbGF0ZWQ6IHRydWUsXG4gICAgICByZWZlcmVuY2U6IHRoaXMuZ2V0UmVmZXJlbmNlUHJlZml4KGRhdGFQYXRoKVxuICAgIH0pXG4gIH1cblxuICBhZGRSZWxhdGlvbihkYXRhUGF0aCwgcmVsYXRlZERhdGFQYXRoLCBzY2hlbWEpIHtcbiAgICB0aGlzLnNldChkYXRhUGF0aCwge1xuICAgICAgdHlwZTogJ3JlbGF0aW9uJyxcbiAgICAgIHNjaGVtYSxcbiAgICAgIGludGVybmFsOiAhIXJlbGF0ZWREYXRhUGF0aCxcbiAgICAgIHJlZmVyZW5jZTogdGhpcy5nZXRSZWZlcmVuY2VQcmVmaXgocmVsYXRlZERhdGFQYXRoKVxuICAgIH0pXG4gIH1cblxuICBnZXRSZWZlcmVuY2VQcmVmaXgoZGF0YVBhdGgpIHtcbiAgICByZXR1cm4gZGF0YVBhdGhcbiAgICAgID8gKHRoaXMucmVmZXJlbmNlc1tkYXRhUGF0aF0gPz89IG5hbm9pZCg2KSlcbiAgICAgIDogbnVsbFxuICB9XG5cbiAgZmxhdHRlbigpIHtcbiAgICBjb25zdCBmbGF0dGVuID0gZ3JhcGggPT4ge1xuICAgICAgY29uc3QgZW50cmllcyA9IFtdXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHsgJHNldHRpbmdzLCAuLi5zdWJHcmFwaCB9XSBvZiBPYmplY3QuZW50cmllcyhncmFwaCkpIHtcbiAgICAgICAgaWYgKCRzZXR0aW5ncykge1xuICAgICAgICAgIGVudHJpZXMucHVzaChba2V5LCAkc2V0dGluZ3NdKVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgW3N1YktleSwgc2V0dGluZ3NdIG9mIGZsYXR0ZW4oc3ViR3JhcGgpKSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKFtgJHtrZXl9LyR7c3ViS2V5fWAsIHNldHRpbmdzXSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGVudHJpZXNcbiAgICB9XG5cbiAgICByZXR1cm4gZmxhdHRlbih0aGlzLmdyYXBoKVxuICB9XG5cbiAgcHJvY2Vzcyhzb3VyY2VTY2hlbWEsIGRhdGEsIHsgdGFyZ2V0IH0pIHtcbiAgICBjb25zdCBjbGlwYm9hcmQgPSB0YXJnZXQgPT09ICdjbGlwYm9hcmQnXG4gICAgaWYgKGNsaXBib2FyZCkge1xuICAgICAgZGVsZXRlIGRhdGFbc291cmNlU2NoZW1hLmlkS2V5IHx8ICdpZCddXG4gICAgfVxuICAgIGZvciAoY29uc3QgW2RhdGFQYXRoLCBzZXR0aW5nc10gb2YgdGhpcy5mbGF0dGVuKCkpIHtcbiAgICAgIGNvbnN0IHsgdHlwZSwgc2NoZW1hLCBpbnRlcm5hbCwgcmVsYXRlZCwgcmVmZXJlbmNlIH0gPSBzZXR0aW5nc1xuICAgICAgY29uc3Qgc291cmNlID0gdHlwZSA9PT0gJ3NvdXJjZSdcbiAgICAgIGNvbnN0IHJlbGF0aW9uID0gdHlwZSA9PT0gJ3JlbGF0aW9uJ1xuICAgICAgaWYgKHNvdXJjZSB8fCByZWxhdGlvbiAmJiBpbnRlcm5hbCkge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBnZXRWYWx1ZUF0RGF0YVBhdGgoZGF0YSwgZGF0YVBhdGgsICgpID0+IG51bGwpXG4gICAgICAgIGNvbnN0IHJlbW92ZUlkID0gY2xpcGJvYXJkICYmIHNvdXJjZSAmJiAhcmVsYXRlZFxuICAgICAgICBjb25zdCByZWZlcmVuY2VJZCA9IChcbiAgICAgICAgICBjbGlwYm9hcmQgJiYgKFxuICAgICAgICAgICAgcmVsYXRpb24gJiYgaW50ZXJuYWwgfHxcbiAgICAgICAgICAgIHNvdXJjZSAmJiByZWxhdGVkXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgYXNBcnJheSh2YWx1ZXMpLmZsYXQoKSkge1xuICAgICAgICAgIGNvbnN0IGlkS2V5ID0gKFxuICAgICAgICAgICAgc291cmNlICYmIHNjaGVtYS5pZEtleSB8fFxuICAgICAgICAgICAgcmVsYXRpb24gJiYgc2NoZW1hLnJlbGF0ZUJ5IHx8XG4gICAgICAgICAgICAnaWQnXG4gICAgICAgICAgKVxuICAgICAgICAgIGxldCBpZCA9IHZhbHVlPy5baWRLZXldXG4gICAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChyZW1vdmVJZCkge1xuICAgICAgICAgICAgICBkZWxldGUgdmFsdWVbaWRLZXldXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVmZXJlbmNlSWQgfHwgaXNUZW1wb3JhcnlJZChpZCkpIHtcbiAgICAgICAgICAgICAgaWYgKGlzVGVtcG9yYXJ5SWQoaWQpKSB7XG4gICAgICAgICAgICAgICAgaWQgPSBpZC5zbGljZSgxKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHJlZktleSA9IGNsaXBib2FyZFxuICAgICAgICAgICAgICAgID8gLy8gQ2xpcGJvYXJkIGp1c3QgbmVlZHMgdGVtcG9yYXJ5IGlkcyB1bmRlciB0aGUgYWN0dWFsIGBpZEtleWBcbiAgICAgICAgICAgICAgICAgIGlkS2V5XG4gICAgICAgICAgICAgICAgOiAvLyBTZXJ2ZXIgd2FudHMgT2JqZWN0aW9uLXN0eWxlICcjaWQnIC8gJyNyZWYnIHBhaXJzLlxuICAgICAgICAgICAgICAgICAgc291cmNlXG4gICAgICAgICAgICAgICAgICA/ICcjaWQnXG4gICAgICAgICAgICAgICAgICA6ICcjcmVmJ1xuICAgICAgICAgICAgICBjb25zdCByZXZWYWx1ZSA9IGNsaXBib2FyZFxuICAgICAgICAgICAgICAgID8gYEAke2lkfWBcbiAgICAgICAgICAgICAgICA6IC8vIEtlZXAgdGhlIGlkcyB1bmlxdWUgaW4gcmVmZXJlbmNlIGdyb3Vwcywgc2luY2UgdGhleVxuICAgICAgICAgICAgICAgICAgLy8gcmVmZXJlbmNlIGFjcm9zcyB0aGUgZnVsbCBncmFwaC5cbiAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZVxuICAgICAgICAgICAgICAgICAgPyBgJHtyZWZlcmVuY2V9LSR7aWR9YFxuICAgICAgICAgICAgICAgICAgOiBpZCAvLyBBIHRlbXBvcmFyeSBpZCB3aXRob3V0IGEgcmVsYXRlZCwganVzdCBwcmVzZXJ2ZSBpdC5cbiAgICAgICAgICAgICAgdmFsdWVbcmVmS2V5XSA9IHJldlZhbHVlXG4gICAgICAgICAgICAgIGlmIChyZWZLZXkgIT09IGlkS2V5KSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlW2lkS2V5XVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhXG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIGlzQXJyYXksXG4gIGlzT2JqZWN0LFxuICBpc1N0cmluZyxcbiAgaXNCb29sZWFuLFxuICBpc051bWJlcixcbiAgaXNGdW5jdGlvbixcbiAgaXNEYXRlLFxuICBpc1JlZ0V4cCxcbiAgYXNBcnJheVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5jb25zdCB0eXBlQ2hlY2tlcnMgPSB7XG4gIEJvb2xlYW46IGlzQm9vbGVhbixcbiAgTnVtYmVyOiBpc051bWJlcixcbiAgU3RyaW5nOiBpc1N0cmluZyxcbiAgRGF0ZTogaXNEYXRlLFxuICBBcnJheTogaXNBcnJheSxcbiAgT2JqZWN0OiBpc09iamVjdCxcbiAgUmVnRXhwOiBpc1JlZ0V4cCxcbiAgRnVuY3Rpb246IGlzRnVuY3Rpb25cbn1cblxuLy8gRGVjbGFyZSB0aGVzZSBzZXBhcmF0ZWx5IGZyb20gdGhlIGB0eXBlQ29udmVydGVyc2Agb2JqZWN0LCB0byBwcmV2ZW50XG4vLyBCYWJlbCBpc3N1ZXMgd2l0aCBgT2JqZWN0YCBvdmVycmlkaW5nIHRoZSBnbG9iYWwgYE9iamVjdGA6XG5jb25zdCB0b0Jvb2xlYW4gPSB2YWx1ZSA9PiAhIXZhbHVlXG5jb25zdCB0b051bWJlciA9IHZhbHVlID0+ICt2YWx1ZVxuY29uc3QgdG9TdHJpbmcgPSB2YWx1ZSA9PiBTdHJpbmcodmFsdWUpXG5cbmNvbnN0IHRvRGF0ZSA9IHZhbHVlID0+XG4gIGlzRGF0ZSh2YWx1ZSlcbiAgICA/IHZhbHVlXG4gICAgOiBuZXcgRGF0ZSh2YWx1ZSlcblxuY29uc3QgdG9BcnJheSA9IHZhbHVlID0+XG4gIGlzQXJyYXkodmFsdWUpXG4gICAgPyB2YWx1ZVxuICAgIDogaXNTdHJpbmcodmFsdWUpXG4gICAgICA/IHZhbHVlLnNwbGl0KCcsJylcbiAgICAgIDogYXNBcnJheSh2YWx1ZSlcblxuY29uc3QgdG9PYmplY3QgPSB2YWx1ZSA9PlxuICBpc09iamVjdCh2YWx1ZSlcbiAgICA/IHZhbHVlXG4gICAgOiAvLyBJZiBhIE9iamVjdCBpcyBleHBlY3RlZCBidXQgYSBCb29sZWFuIHByb3ZpZGUsIGNvbnZlcnQgdG8gYW4gZW1wdHlcbiAgICAgIC8vIG9iamVjdC4gVXNlZCBieSBgY3JlYXRhYmxlYCAmIGNvLCB0aGF0IGNhbiBiZSBib3RoLlxuICAgICAgdmFsdWUgPT09IHRydWVcbiAgICAgID8ge31cbiAgICAgIDogbnVsbFxuXG5jb25zdCB0b1JlZ0V4cCA9IHZhbHVlID0+XG4gIGlzUmVnRXhwKHZhbHVlKVxuICAgID8gdmFsdWVcbiAgICA6IG5ldyBSZWdFeHAodmFsdWUpXG5cbmNvbnN0IHR5cGVDb252ZXJ0ZXJzID0ge1xuICBCb29sZWFuOiB0b0Jvb2xlYW4sXG4gIE51bWJlcjogdG9OdW1iZXIsXG4gIFN0cmluZzogdG9TdHJpbmcsXG4gIERhdGU6IHRvRGF0ZSxcbiAgQXJyYXk6IHRvQXJyYXksXG4gIE9iamVjdDogdG9PYmplY3QsXG4gIFJlZ0V4cDogdG9SZWdFeHBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkge1xuICAvLyBTZWUgaWYgYW55IG9mIHRoZSBleHBlY3QgdHlwZXMgbWF0Y2gsIHJldHVybiBpbW1lZGlhdGVseSBpZiB0aGV5IGRvOlxuICBpZiAodHlwZXMgJiYgdmFsdWUgIT0gbnVsbCkge1xuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgaWYgKHR5cGVDaGVja2Vyc1t0eXBlLm5hbWVdPy4odmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFR5cGUodHlwZSwgdmFsdWUpIHtcbiAgY29uc3QgY29udmVydGVyID0gdHlwZSAmJiB0eXBlQ29udmVydGVyc1t0eXBlLm5hbWUgfHwgdHlwZV1cbiAgcmV0dXJuIGNvbnZlcnRlciA/IGNvbnZlcnRlcih2YWx1ZSkgOiB2YWx1ZVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IERpdG9NaXhpbiBmcm9tICcuLi9taXhpbnMvRGl0b01peGluLmpzJ1xuaW1wb3J0IFR5cGVNaXhpbiBmcm9tICcuLi9taXhpbnMvVHlwZU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0VWlkIH0gZnJvbSAnLi91aWQuanMnXG5pbXBvcnQgeyBTY2hlbWFHcmFwaCB9IGZyb20gJy4vU2NoZW1hR3JhcGguanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCwgaXNUZW1wb3JhcnlJZCB9IGZyb20gJy4vZGF0YS5qcydcbmltcG9ydCB7IGlzTWF0Y2hpbmdUeXBlLCBjb252ZXJ0VHlwZSB9IGZyb20gJy4vdHlwZS5qcydcbmltcG9ydCB7XG4gIGlzT2JqZWN0LFxuICBpc1N0cmluZyxcbiAgaXNBcnJheSxcbiAgaXNGdW5jdGlvbixcbiAgaXNQcm9taXNlLFxuICBpc01vZHVsZSxcbiAgYXNBcnJheSxcbiAgY2xvbmUsXG4gIGNhbWVsaXplLFxuICBhc3NpZ25EZWVwbHksXG4gIG1hcENvbmN1cnJlbnRseSxcbiAgZ2V0VmFsdWVBdERhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBtYXJrUmF3LCByZWFjdGl2ZSB9IGZyb20gJ3Z1ZSdcblxuY29uc3QgdHlwZUNvbXBvbmVudHMgPSB7fVxuY29uc3QgdW5rbm93blR5cGVSZXBvcnRlZCA9IHt9XG5jb25zdCBlbXB0eVNjaGVtYSA9IHt9XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclR5cGVDb21wb25lbnQodHlwZSwgY29tcG9uZW50KSB7XG4gIHR5cGVDb21wb25lbnRzW3R5cGVdID0gY29tcG9uZW50XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlQ29tcG9uZW50KHR5cGUsIGFsbG93TnVsbCA9IGZhbHNlKSB7XG4gIGNvbnN0IGNvbXBvbmVudCA9IHR5cGVDb21wb25lbnRzW3R5cGVdIHx8IG51bGxcbiAgaWYgKCFjb21wb25lbnQgJiYgIWFsbG93TnVsbCAmJiAhdW5rbm93blR5cGVSZXBvcnRlZFt0eXBlXSkge1xuICAgIC8vIFJlcG9ydCBlYWNoIG1pc3NpbmcgdHlwZSBvbmx5IG9uY2UsIHRvIGF2b2lkIGZsb29kaW5nIHRoZSBjb25zb2xlOlxuICAgIHVua25vd25UeXBlUmVwb3J0ZWRbdHlwZV0gPSB0cnVlXG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIERpdG8uanMgY29tcG9uZW50IHR5cGU6ICcke3R5cGV9J2ApXG4gIH1cbiAgcmV0dXJuIGNvbXBvbmVudFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXRlcmF0ZVNjaGVtYUNvbXBvbmVudHMoc2NoZW1hcywgY2FsbGJhY2spIHtcbiAgZm9yIChjb25zdCBzY2hlbWEgb2Ygc2NoZW1hcykge1xuICAgIGlmIChpc1NpbmdsZUNvbXBvbmVudFZpZXcoc2NoZW1hKSkge1xuICAgICAgY29uc3QgcmVzID0gY2FsbGJhY2soc2NoZW1hLmNvbXBvbmVudCwgc2NoZW1hLm5hbWUsIDApXG4gICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNTY2hlbWEoc2NoZW1hKSkge1xuICAgICAgZm9yIChjb25zdCBbbmFtZSwgY29tcG9uZW50XSBvZiBPYmplY3QuZW50cmllcyhzY2hlbWEuY29tcG9uZW50cyB8fCB7fSkpIHtcbiAgICAgICAgY29uc3QgcmVzID0gY2FsbGJhY2soY29tcG9uZW50LCBuYW1lLCAxKVxuICAgICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGl0ZXJhdGVOZXN0ZWRTY2hlbWFDb21wb25lbnRzKHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIHNjaGVtYVxuICAgID8gaXRlcmF0ZVNjaGVtYUNvbXBvbmVudHMoW3NjaGVtYSwgLi4uZ2V0VGFiU2NoZW1hcyhzY2hlbWEpXSwgY2FsbGJhY2spXG4gICAgOiB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmROZXN0ZWRTY2hlbWFDb21wb25lbnQoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gKFxuICAgIGl0ZXJhdGVOZXN0ZWRTY2hlbWFDb21wb25lbnRzKFxuICAgICAgc2NoZW1hLFxuICAgICAgY29tcG9uZW50ID0+IChjYWxsYmFjayhjb21wb25lbnQpID8gY29tcG9uZW50IDogdW5kZWZpbmVkKVxuICAgICkgPz8gbnVsbFxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb21lTmVzdGVkU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIChcbiAgICBpdGVyYXRlTmVzdGVkU2NoZW1hQ29tcG9uZW50cyhcbiAgICAgIHNjaGVtYSxcbiAgICAgIGNvbXBvbmVudCA9PiAoY2FsbGJhY2soY29tcG9uZW50KSA/IHRydWUgOiB1bmRlZmluZWQpXG4gICAgKSA/PyBmYWxzZVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVyeU5lc3RlZFNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiAoXG4gICAgaXRlcmF0ZU5lc3RlZFNjaGVtYUNvbXBvbmVudHMoXG4gICAgICBzY2hlbWEsXG4gICAgICBjb21wb25lbnQgPT4gKGNhbGxiYWNrKGNvbXBvbmVudCkgPyB1bmRlZmluZWQgOiBmYWxzZSlcbiAgICApID8/IHRydWVcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzTmVzdGVkU2NoZW1hQ29tcG9uZW50cyhzY2hlbWEpIHtcbiAgcmV0dXJuIHNvbWVOZXN0ZWRTY2hlbWFDb21wb25lbnQoc2NoZW1hLCAoKSA9PiB0cnVlKSA/PyBmYWxzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTY2hlbWEoc2NoZW1hKSB7XG4gIHJldHVybiBpc09iamVjdChzY2hlbWEpICYmIGlzU3RyaW5nKHNjaGVtYS50eXBlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNGb3JtKHNjaGVtYSkge1xuICByZXR1cm4gaXNTY2hlbWEoc2NoZW1hKSAmJiBzY2hlbWEudHlwZSA9PT0gJ2Zvcm0nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ZpZXcoc2NoZW1hKSB7XG4gIHJldHVybiBpc1NjaGVtYShzY2hlbWEpICYmIHNjaGVtYS50eXBlID09PSAndmlldydcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGFiKHNjaGVtYSkge1xuICByZXR1cm4gaXNTY2hlbWEoc2NoZW1hKSAmJiBzY2hlbWEudHlwZSA9PT0gJ3RhYidcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGFuZWwoc2NoZW1hKSB7XG4gIHJldHVybiBpc1NjaGVtYShzY2hlbWEpICYmIHNjaGVtYS50eXBlID09PSAncGFuZWwnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc01lbnUoc2NoZW1hKSB7XG4gIHJldHVybiBpc1NjaGVtYShzY2hlbWEpICYmIHNjaGVtYS50eXBlID09PSAnbWVudSdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjaGVtYUlkZW50aWZpZXIoc2NoZW1hKSB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShzY2hlbWEpXG59XG5cbmNvbnN0IHJlc29sdmVkU2NoZW1hcyA9IG5ldyBXZWFrTWFwKClcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlU2NoZW1hKHZhbHVlLCB1bndyYXBNb2R1bGUgPSBmYWxzZSkge1xuICBpZiAocmVzb2x2ZWRTY2hlbWFzLmhhcyh2YWx1ZSkpIHtcbiAgICByZXR1cm4gcmVzb2x2ZWRTY2hlbWFzLmdldCh2YWx1ZSlcbiAgfVxuICBsZXQgc2NoZW1hID0gdmFsdWVcbiAgaWYgKGlzRnVuY3Rpb24oc2NoZW1hKSkge1xuICAgIHNjaGVtYSA9IHNjaGVtYSgpXG4gIH1cbiAgaWYgKGlzUHJvbWlzZShzY2hlbWEpKSB7XG4gICAgc2NoZW1hID0gYXdhaXQgc2NoZW1hXG4gIH1cbiAgaWYgKGlzTW9kdWxlKHNjaGVtYSkpIHtcbiAgICAvLyBDb3B5IHRvIGNvbnZlcnQgZnJvbSBtb2R1bGUgdG8gb2JqZWN0OlxuICAgIHNjaGVtYSA9IHsgLi4uc2NoZW1hIH1cbiAgICAvLyBVbndyYXAgZGVmYXVsdCBvciBuYW1lZCBzY2hlbWFcbiAgICBpZiAoIXNjaGVtYS5uYW1lICYmICh1bndyYXBNb2R1bGUgfHwgc2NoZW1hLmRlZmF1bHQpKSB7XG4gICAgICAvLyBGaWx0ZXIgb3V0IGludGVybmFsIGtleSBhZGRlZCBieSB2aXRlIC8gdnVlIDMgcGx1Z2luIHdoZW4gY2hhbmdpbmdcbiAgICAgIC8vIGNvZGUgaW4gYSBkeW5hbWljYWxseSBpbXBvcnRlZCB2dWUgY29tcG9uZW50LCBzZWU6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdml0ZWpzL3ZpdGUtcGx1Z2luLXZ1ZS9ibG9iL2FiZGY1ZjRmMzJkMDJhZjY0MWU1ZjYwODcxYmRlMTQ1MzU1NjliMWUvcGFja2FnZXMvcGx1Z2luLXZ1ZS9zcmMvbWFpbi50cyNMMTMzXG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hKS5maWx0ZXIoa2V5ID0+IGtleSAhPT0gJ19yZXJlbmRlcl9vbmx5JylcbiAgICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBjb25zdCBuYW1lID0ga2V5c1swXVxuICAgICAgICBzY2hlbWEgPSBzY2hlbWFbbmFtZV1cbiAgICAgICAgaWYgKG5hbWUgIT09ICdkZWZhdWx0Jykge1xuICAgICAgICAgIHNjaGVtYS5uYW1lID0gbmFtZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJlc29sdmVkU2NoZW1hcy5zZXQodmFsdWUsIHNjaGVtYSlcbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYXMoXG4gIHVucmVzb2x2ZWRTY2hlbWFzLFxuICByZXNvbHZlSXRlbSA9IHJlc29sdmVTY2hlbWFcbikge1xuICBsZXQgc2NoZW1hcyA9IGlzRnVuY3Rpb24odW5yZXNvbHZlZFNjaGVtYXMpXG4gICAgPyB1bnJlc29sdmVkU2NoZW1hcygpXG4gICAgOiB1bnJlc29sdmVkU2NoZW1hc1xuICBzY2hlbWFzID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWFzLCBmYWxzZSlcbiAgaWYgKGlzQXJyYXkoc2NoZW1hcykpIHtcbiAgICAvLyBUcmFuc2xhdGUgYW4gYXJyYXkgb2YgZHluYW1pYyBpbXBvcnQsIGVhY2ggaW1wb3J0aW5nIG9uZSBuYW1lZCBzY2hlbWFcbiAgICAvLyBtb2R1bGUgdG8gYW4gb2JqZWN0IHdpdGggbmFtZWQgZW50cmllcy5cbiAgICBzY2hlbWFzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgYXdhaXQgbWFwQ29uY3VycmVudGx5KFxuICAgICAgICBzY2hlbWFzLFxuICAgICAgICBhc3luYyBpdGVtID0+IHtcbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICAgIHJldHVybiBbc2NoZW1hLm5hbWUsIHNjaGVtYV1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIClcbiAgfSBlbHNlIGlmIChpc09iamVjdChzY2hlbWFzKSkge1xuICAgIHNjaGVtYXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBhd2FpdCBtYXBDb25jdXJyZW50bHkoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHNjaGVtYXMpLFxuICAgICAgICBhc3luYyAoW2tleSwgaXRlbV0pID0+IHtcbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICAgIHJldHVybiBba2V5LCBzY2hlbWFdXG4gICAgICAgIH1cbiAgICAgIClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHNjaGVtYXNcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVWaWV3cyh1bnJlc29sdmVkVmlld3MpIHtcbiAgcmV0dXJuIHJlc29sdmVTY2hlbWFzKHVucmVzb2x2ZWRWaWV3cywgYXN5bmMgKHNjaGVtYSwgdW53cmFwTW9kdWxlKSA9PiB7XG4gICAgc2NoZW1hID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWEsIHVud3JhcE1vZHVsZSlcbiAgICBpZiAoIXNjaGVtYS5uYW1lICYmIGlzTWVudShzY2hlbWEpKSB7XG4gICAgICAvLyBHZW5lcmF0ZSBhIG5hbWUgZm9yIHN1Yi1tZW51cyBmcm9tIHRoZWlyIGxhYmVsIGlmIGl0J3MgbWlzc2luZy5cbiAgICAgIC8vIE5PVEU6IFRoaXMgaXMgbmV2ZXIgYWN0dWFsbHkgcmVmZXJlbmNlZCBmcm9tIGFueXdoZXJlLCBidXQgdGhleSBuZWVkXG4gICAgICAvLyBhIG5hbWUgYnkgd2hpY2ggdGhleSdyZSBzdG9yZWQgaW4gdGhlIHBhcmVudCBvYmplY3QuXG4gICAgICBzY2hlbWEubmFtZSA9IGNhbWVsaXplKHNjaGVtYS5sYWJlbClcbiAgICAgIHNjaGVtYS5pdGVtcyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKHNjaGVtYS5pdGVtcylcbiAgICB9XG4gICAgcmV0dXJuIHNjaGVtYVxuICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmxhdHRlblZpZXdzKHZpZXdzKSB7XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXModmlld3MpLnJlZHVjZShcbiAgICAgIChlbnRyaWVzLCBba2V5LCBzY2hlbWFdKSA9PiB7XG4gICAgICAgIGlmIChpc01lbnUoc2NoZW1hKSkge1xuICAgICAgICAgIGVudHJpZXMucHVzaCguLi5PYmplY3QuZW50cmllcyhzY2hlbWEuaXRlbXMpKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVudHJpZXMucHVzaChba2V5LCBzY2hlbWFdKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRyaWVzXG4gICAgICB9LFxuICAgICAgW11cbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWFDb21wb25lbnQoc2NoZW1hKSB7XG4gIC8vIFJlc29sdmVzIGFzeW5jIHNjaGVtYSBjb21wb25lbnRzIGFuZCBhZGRzIERpdG9NaXhpbiBhbmQgVHlwZU1peGluIHRvIHRoZW0uXG4gIGxldCB7IGNvbXBvbmVudCB9ID0gc2NoZW1hXG4gIGlmIChjb21wb25lbnQpIHtcbiAgICBjb21wb25lbnQgPSBhd2FpdCByZXNvbHZlU2NoZW1hKGNvbXBvbmVudCwgdHJ1ZSlcbiAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAvLyBQcmV2ZW50IHdhcm5pbmc6IFwiVnVlIHJlY2VpdmVkIGEgQ29tcG9uZW50IHdoaWNoIHdhcyBtYWRlIGEgcmVhY3RpdmVcbiAgICAgIC8vIG9iamVjdC4gVGhpcyBjYW4gbGVhZCB0byB1bm5lY2Vzc2FyeSBwZXJmb3JtYW5jZSBvdmVyaGVhZCwgYW5kIHNob3VsZFxuICAgICAgLy8gYmUgYXZvaWRlZCBieSBtYXJraW5nIHRoZSBjb21wb25lbnQgd2l0aCBgbWFya1Jhd2BcIjpcbiAgICAgIHNjaGVtYS5jb21wb25lbnQgPSBtYXJrUmF3KHtcbiAgICAgICAgLi4uY29tcG9uZW50LFxuICAgICAgICBtaXhpbnM6IFtEaXRvTWl4aW4sIFR5cGVNaXhpbiwgLi4uKGNvbXBvbmVudC5taXhpbnMgfHwgW10pXVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWFDb21wb25lbnRzKHNjaGVtYXMpIHtcbiAgLy8gYHNjaGVtYXNgIGFyZSBvZiB0aGUgc2FtZSBwb3NzaWJsZSBmb3JtcyBhcyBwYXNzZWQgdG8gYGdldE5hbWVkU2NoZW1hcygpYFxuICBhd2FpdCBtYXBDb25jdXJyZW50bHkoT2JqZWN0LnZhbHVlcyhzY2hlbWFzIHx8IHt9KSwgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudClcbn1cblxuY29uc3QgcHJvY2Vzc2VkU2NoZW1hRGVwdGhzID0gbmV3IFdlYWtNYXAoKVxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKFxuICBhcGksXG4gIHNjaGVtYSxcbiAgcm91dGVzID0gbnVsbCxcbiAgbGV2ZWwgPSAwLFxuICBtYXhEZXB0aCA9IDFcbikge1xuICBpZiAoc2NoZW1hKSB7XG4gICAgY29uc3QgZGVwdGggPSBwcm9jZXNzZWRTY2hlbWFEZXB0aHMuZ2V0KHNjaGVtYSkgPz8gMFxuICAgIGlmIChkZXB0aCA8IG1heERlcHRoKSB7XG4gICAgICBwcm9jZXNzZWRTY2hlbWFEZXB0aHMuc2V0KHNjaGVtYSwgZGVwdGggKyAxKVxuICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXVxuICAgICAgY29uc3QgcHJvY2VzcyA9IChjb21wb25lbnQsIG5hbWUsIHJlbGF0aXZlTGV2ZWwpID0+IHtcbiAgICAgICAgcHJvbWlzZXMucHVzaChcbiAgICAgICAgICBwcm9jZXNzU2NoZW1hQ29tcG9uZW50KFxuICAgICAgICAgICAgYXBpLFxuICAgICAgICAgICAgY29tcG9uZW50LFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHJvdXRlcyxcbiAgICAgICAgICAgIGxldmVsICsgcmVsYXRpdmVMZXZlbFxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBpdGVyYXRlTmVzdGVkU2NoZW1hQ29tcG9uZW50cyhzY2hlbWEsIHByb2Nlc3MpXG4gICAgICBpdGVyYXRlU2NoZW1hQ29tcG9uZW50cyhnZXRQYW5lbFNjaGVtYXMoc2NoZW1hKSwgcHJvY2VzcylcblxuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYUNvbXBvbmVudChcbiAgYXBpLFxuICBzY2hlbWEsXG4gIG5hbWUsXG4gIHJvdXRlcyA9IG51bGwsXG4gIGxldmVsID0gMFxuKSB7XG4gIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIHNjaGVtYSlcblxuICByZXR1cm4gUHJvbWlzZS5hbGwoW1xuICAgIC8vIEFsc28gcHJvY2VzcyBuZXN0ZWQgcGFuZWwgc2NoZW1hcy5cbiAgICBtYXBDb25jdXJyZW50bHkoXG4gICAgICBnZXRQYW5lbFNjaGVtYXMoc2NoZW1hKSxcbiAgICAgIHBhbmVsID0+IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKGFwaSwgcGFuZWwsIHJvdXRlcywgbGV2ZWwpXG4gICAgKSxcbiAgICAvLyBEZWxlZ2F0ZSBzY2hlbWEgcHJvY2Vzc2luZyB0byB0aGUgYWN0dWFsIHR5cGUgY29tcG9uZW50cy5cbiAgICBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5wcm9jZXNzU2NoZW1hPy4oXG4gICAgICBhcGksXG4gICAgICBzY2hlbWEsXG4gICAgICBuYW1lLFxuICAgICAgcm91dGVzLFxuICAgICAgbGV2ZWxcbiAgICApXG4gIF0pXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzVmlldyhjb21wb25lbnQsIGFwaSwgc2NoZW1hLCBuYW1lLCBmdWxsUGF0aCA9ICcnKSB7XG4gIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIHNjaGVtYSlcbiAgcHJvY2Vzc1JvdXRlU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lLCBmdWxsUGF0aClcbiAgbGV0IGNoaWxkcmVuID0gW11cbiAgaWYgKGlzVmlldyhzY2hlbWEpKSB7XG4gICAgYXdhaXQgcHJvY2Vzc05lc3RlZFNjaGVtYXMoYXBpLCBzY2hlbWEpXG4gICAgYXdhaXQgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBzY2hlbWEsIGNoaWxkcmVuKVxuICB9IGVsc2UgaWYgKGlzTWVudShzY2hlbWEpKSB7XG4gICAgY2hpbGRyZW4gPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIE9iamVjdC5lbnRyaWVzKHNjaGVtYS5pdGVtcykubWFwKGFzeW5jIChbbmFtZSwgaXRlbV0pID0+XG4gICAgICAgIHByb2Nlc3NWaWV3KGNvbXBvbmVudCwgYXBpLCBpdGVtLCBuYW1lLCBzY2hlbWEuZnVsbFBhdGgpXG4gICAgICApXG4gICAgKVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB2aWV3IHNjaGVtYTogJyR7Z2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpfSdgKVxuICB9XG4gIHJldHVybiB7XG4gICAgcGF0aDogc2NoZW1hLmZ1bGxQYXRoLFxuICAgIGNoaWxkcmVuLFxuICAgIGNvbXBvbmVudCxcbiAgICBtZXRhOiB7XG4gICAgICBhcGksXG4gICAgICBzY2hlbWFcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIHNjaGVtYSkge1xuICBsZXQgZGVmYXVsdHMgPSBhcGkuZGVmYXVsdHNbc2NoZW1hLnR5cGVdXG4gIGlmIChkZWZhdWx0cykge1xuICAgIGlmIChpc0Z1bmN0aW9uKGRlZmF1bHRzKSkge1xuICAgICAgZGVmYXVsdHMgPSBkZWZhdWx0cyhzY2hlbWEpXG4gICAgfVxuICAgIGlmIChpc09iamVjdChkZWZhdWx0cykpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRlZmF1bHRzKSkge1xuICAgICAgICBpZiAoc2NoZW1hW2tleV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNjaGVtYVtrZXldID0gdmFsdWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzY2hlbWFba2V5XSA9IGFzc2lnbkRlZXBseShzY2hlbWFba2V5XSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NOZXN0ZWRTY2hlbWFEZWZhdWx0cyhhcGksIHNjaGVtYSkge1xuICAvLyBQcm9jZXNzIGRlZmF1bHRzIGZvciBuZXN0ZWQgc2NoZW1hcy4gTm90ZSB0aGF0IHRoaXMgaXMgYWxzbyBkb25lIHdoZW5cbiAgLy8gY2FsbGluZyBgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoKWAsIGJ1dCB0aGF0IGZ1bmN0aW9uIGlzIGFzeW5jLCBhbmQgd2VcbiAgLy8gbmVlZCBhIHN5bmMgdmVyc2lvbiB0aGF0IG9ubHkgaGFuZGxlcyB0aGUgZGVmYXVsdHMgZm9yIGZpbHRlcnMsIHNlZVxuICAvLyBgZ2V0RmlsdGVyc1BhbmVsKClgLlxuICBpdGVyYXRlTmVzdGVkU2NoZW1hQ29tcG9uZW50cyhzY2hlbWEsIGNvbXBvbmVudCA9PiB7XG4gICAgcHJvY2Vzc1NjaGVtYURlZmF1bHRzKGFwaSwgY29tcG9uZW50KVxuICAgIGNvbnN0IGZvcm1zID0gZ2V0Rm9ybVNjaGVtYXMoY29tcG9uZW50KVxuICAgIGZvciAoY29uc3QgZm9ybSBvZiBPYmplY3QudmFsdWVzKGZvcm1zKSkge1xuICAgICAgcHJvY2Vzc05lc3RlZFNjaGVtYURlZmF1bHRzKGFwaSwgZm9ybSlcbiAgICB9XG4gIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzUm91dGVTY2hlbWEoYXBpLCBzY2hlbWEsIG5hbWUsIGZ1bGxQYXRoID0gbnVsbCkge1xuICAvLyBVc2VkIGZvciB2aWV3IGFuZCBzb3VyY2Ugc2NoZW1hcywgc2VlIFNvdXJjZU1peGluLlxuICBzY2hlbWEubmFtZSA/Pz0gbmFtZVxuICBzY2hlbWEucGF0aCA/Pz0gYXBpLm5vcm1hbGl6ZVBhdGgobmFtZSlcbiAgaWYgKGZ1bGxQYXRoICE9PSBudWxsKSB7XG4gICAgc2NoZW1hLmZ1bGxQYXRoID0gYCR7ZnVsbFBhdGh9LyR7c2NoZW1hLnBhdGh9YFxuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzRm9ybXMoYXBpLCBzY2hlbWEsIGxldmVsKSB7XG4gIGNvbnN0IHJvdXRlcyA9IFtdXG4gIC8vIEZpcnN0IHJlc29sdmUgdGhlIGZvcm1zIGFuZCBzdG9yZSB0aGUgcmVzdWx0cyBiYWNrIG9uIHRoZSBzY2hlbWEuXG4gIGNvbnN0IHsgZm9ybSwgZm9ybXMsIGNvbXBvbmVudHMsIG1heERlcHRoID0gMSB9ID0gc2NoZW1hXG4gIGlmIChmb3Jtcykge1xuICAgIHNjaGVtYS5mb3JtcyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKGZvcm1zLCBmb3JtID0+XG4gICAgICBwcm9jZXNzRm9ybShhcGksIGZvcm0sIHJvdXRlcywgbGV2ZWwsIG1heERlcHRoKVxuICAgIClcbiAgfSBlbHNlIGlmIChmb3JtKSB7XG4gICAgc2NoZW1hLmZvcm0gPSBhd2FpdCBwcm9jZXNzRm9ybShhcGksIGZvcm0sIHJvdXRlcywgbGV2ZWwsIG1heERlcHRoKVxuICB9IGVsc2UgaWYgKGlzT2JqZWN0KGNvbXBvbmVudHMpKSB7XG4gICAgLy8gTk9URTogUHJvY2Vzc2luZyBmb3JtcyBpbiBjb21wdXRlZCBjb21wb25lbnRzIGlzIG5vdCBzdXBwb3J0ZWQsIHNpbmNlIGl0XG4gICAgLy8gb25seSBjYW4gYmUgY29tcHV0ZWQgaW4gY29uanVuY3Rpb24gd2l0aCBhY3R1YWwgZGF0YS5cbiAgICBjb25zdCBmb3JtID0ge1xuICAgICAgdHlwZTogJ2Zvcm0nLFxuICAgICAgY29tcG9uZW50c1xuICAgIH1cbiAgICBhd2FpdCBwcm9jZXNzRm9ybShhcGksIGZvcm0sIHJvdXRlcywgbGV2ZWwsIG1heERlcHRoKVxuICB9XG4gIHJldHVybiByb3V0ZXNcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NGb3JtKFxuICBhcGksXG4gIHNjaGVtYSxcbiAgcm91dGVzID0gbnVsbCxcbiAgbGV2ZWwgPSAwLFxuICBtYXhEZXB0aCA9IDFcbikge1xuICBzY2hlbWEgPSBhd2FpdCByZXNvbHZlU2NoZW1hKHNjaGVtYSwgdHJ1ZSlcbiAgaWYgKCFpc0Zvcm0oc2NoZW1hKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBmb3JtIHNjaGVtYTogJyR7Z2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpfSdgKVxuICB9XG4gIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIHNjaGVtYSlcbiAgYXdhaXQgcHJvY2Vzc05lc3RlZFNjaGVtYXMoYXBpLCBzY2hlbWEpXG4gIGF3YWl0IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKGFwaSwgc2NoZW1hLCByb3V0ZXMsIGxldmVsLCBtYXhEZXB0aClcbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1RhYihhcGksIHNjaGVtYSkge1xuICBzY2hlbWEgPSBhd2FpdCByZXNvbHZlU2NoZW1hKHNjaGVtYSwgdHJ1ZSlcbiAgaWYgKCFpc1RhYihzY2hlbWEpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRhYiBzY2hlbWE6ICcke2dldFNjaGVtYUlkZW50aWZpZXIoc2NoZW1hKX0nYClcbiAgfVxuICBwcm9jZXNzU2NoZW1hRGVmYXVsdHMoYXBpLCBzY2hlbWEpXG4gIHJldHVybiBzY2hlbWFcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NQYW5lbChhcGksIHNjaGVtYSkge1xuICBzY2hlbWEgPSBhd2FpdCByZXNvbHZlU2NoZW1hKHNjaGVtYSwgdHJ1ZSlcbiAgaWYgKCFpc1BhbmVsKHNjaGVtYSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGFuZWwgc2NoZW1hOiAnJHtnZXRTY2hlbWFJZGVudGlmaWVyKHNjaGVtYSl9J2ApXG4gIH1cbiAgcHJvY2Vzc1NjaGVtYURlZmF1bHRzKGFwaSwgc2NoZW1hKVxuICByZXR1cm4gc2NoZW1hXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzTmVzdGVkU2NoZW1hcyhhcGksIHNjaGVtYSkge1xuICBjb25zdCB7IHRhYnMsIHBhbmVscyB9ID0gc2NoZW1hXG4gIGlmICh0YWJzKSB7XG4gICAgc2NoZW1hLnRhYnMgPSBhd2FpdCByZXNvbHZlU2NoZW1hcyhcbiAgICAgIHRhYnMsXG4gICAgICB0YWIgPT4gcHJvY2Vzc1RhYihhcGksIHRhYilcbiAgICApXG4gIH1cbiAgaWYgKHBhbmVscykge1xuICAgIHNjaGVtYS5wYW5lbHMgPSBhd2FpdCByZXNvbHZlU2NoZW1hcyhcbiAgICAgIHBhbmVscyxcbiAgICAgIHBhbmVsID0+IHByb2Nlc3NQYW5lbChhcGksIHBhbmVsKVxuICAgIClcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzRm9ybVNjaGVtYShzY2hlbWEpIHtcbiAgLy8gU3VwcG9ydCBib3RoIHNpbmdsZSBmb3JtIGFuZCBtdWx0aXBsZSBmb3JtcyBub3RhdGlvbiwgYXMgd2VsbCBhcyBpbmxpbmVkXG4gIC8vIGNvbXBvbmVudHMuXG4gIHJldHVybiAoXG4gICAgaXNTY2hlbWEoc2NoZW1hKSAmJlxuICAgIGlzT2JqZWN0KHNjaGVtYS5mb3JtIHx8IHNjaGVtYS5mb3JtcyB8fCBzY2hlbWEuY29tcG9uZW50cylcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzTXVsdGlwbGVGb3JtU2NoZW1hcyhzY2hlbWEpIHtcbiAgcmV0dXJuIChcbiAgICBpc1NjaGVtYShzY2hlbWEpICYmXG4gICAgT2JqZWN0LmtleXMoc2NoZW1hPy5mb3JtcyB8fCB7fSkubGVuZ3RoID4gMVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NpbmdsZUNvbXBvbmVudFZpZXcoc2NoZW1hKSB7XG4gIHJldHVybiAoXG4gICAgaXNWaWV3KHNjaGVtYSkgJiZcbiAgICBpc09iamVjdChzY2hlbWEuY29tcG9uZW50KVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3Rm9ybVNjaGVtYShzY2hlbWEsIGNvbnRleHQpIHtcbiAgY29uc3QgeyB2aWV3IH0gPSBzY2hlbWFcbiAgY29uc3Qgdmlld1NjaGVtYSA9IHZpZXcgJiYgY29udGV4dC5mbGF0dGVuZWRWaWV3c1t2aWV3XVxuICByZXR1cm4gdmlld1NjaGVtYVxuICAgID8gLy8gTk9URTogVmlld3MgY2FuIGhhdmUgdGFicywgaW4gd2hpY2ggY2FzZSB0aGUgdmlldyBjb21wb25lbnQgaXMgbmVzdGVkXG4gICAgICAvLyBpbiBvbmUgb2YgdGhlIHRhYnMsIGdvIGZpbmQgaXQuXG4gICAgICBmaW5kTmVzdGVkU2NoZW1hQ29tcG9uZW50KHZpZXdTY2hlbWEsIGhhc0Zvcm1TY2hlbWEpIHx8IG51bGxcbiAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdTY2hlbWEoc2NoZW1hLCBjb250ZXh0KSB7XG4gIHJldHVybiBnZXRWaWV3Rm9ybVNjaGVtYShzY2hlbWEsIGNvbnRleHQpXG4gICAgPyBjb250ZXh0LmZsYXR0ZW5lZFZpZXdzW3NjaGVtYS52aWV3XVxuICAgIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzVmlld1NjaGVtYShzY2hlbWEsIGNvbnRleHQpIHtcbiAgcmV0dXJuICEhZ2V0Vmlld1NjaGVtYShzY2hlbWEsIGNvbnRleHQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3RWRpdFBhdGgoc2NoZW1hLCBpZCwgY29udGV4dCkge1xuICBjb25zdCB2aWV3ID0gZ2V0Vmlld1NjaGVtYShzY2hlbWEsIGNvbnRleHQpXG4gIGlmICh2aWV3KSB7XG4gICAgY29uc3QgcGF0aCA9IGlzU2luZ2xlQ29tcG9uZW50Vmlldyh2aWV3KVxuICAgICAgPyB2aWV3LmZ1bGxQYXRoXG4gICAgICA6IGAke3ZpZXcuZnVsbFBhdGh9LyR7dmlldy5wYXRofWBcbiAgICByZXR1cm4gYCR7cGF0aH0vJHtpZH1gXG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1TY2hlbWFzKHNjaGVtYSwgY29udGV4dCwgbW9kaWZ5Rm9ybSkge1xuICBjb25zdCB2aWV3U2NoZW1hID0gY29udGV4dCAmJiBnZXRWaWV3Rm9ybVNjaGVtYShzY2hlbWEsIGNvbnRleHQpXG4gIGlmICh2aWV3U2NoZW1hKSB7XG4gICAgc2NoZW1hID0gdmlld1NjaGVtYVxuICB9IGVsc2UgaWYgKHNjaGVtYS52aWV3KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHZpZXc6ICcke3NjaGVtYS52aWV3fSdgKVxuICB9XG5cbiAgbGV0IHsgZm9ybSwgZm9ybXMgfSA9IHNjaGVtYVxuICBpZiAoIWZvcm0gJiYgIWZvcm1zKSB7XG4gICAgY29uc3QgeyBuYW1lLCBjb21wYWN0LCBjbGlwYm9hcmQsIHRhYnMsIGNvbXBvbmVudHMgfSA9IHNjaGVtYVxuICAgIGlmIChjb21wb25lbnRzIHx8IHRhYnMpIHtcbiAgICAgIC8vIENvbnZlcnQgaW5saW5lZCBmb3JtcyB0byBzdGFuZC1hbG9uZSBmb3Jtcywgc3VwcG9ydGluZyBgbmFtZWAsXG4gICAgICAvLyBgY29tcGFjdGAsIGBjbGlwYm9hcmRgLCBgdGFic2AgYW5kIGBjb21wb25lbnRzYCBzZXR0aW5ncy5cbiAgICAgIGZvcm0gPSB7IHR5cGU6ICdmb3JtJywgbmFtZSwgY29tcGFjdCwgY2xpcGJvYXJkLCB0YWJzLCBjb21wb25lbnRzIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gYGZvcm1zYCwgYGZvcm1gIG9yIGBjb21wb25lbnRzYCwgcmV0dXJuIGFuZCBlbXB0eSBgZm9ybXNgIG9iamVjdC5cbiAgICAgIHJldHVybiB7fVxuICAgIH1cbiAgfVxuICBmb3JtcyB8fD0geyBkZWZhdWx0OiBmb3JtIH1cbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhmb3JtcykubWFwKChbdHlwZSwgZm9ybV0pID0+IHtcbiAgICAgIC8vIFN1cHBvcnQgYHNjaGVtYS5jb21wb25lbnRzYCBjYWxsYmFja3MgdG8gY3JlYXRlIGNvbXBvbmVudHMgb24gdGhlIGZseS5cbiAgICAgIGlmIChjb250ZXh0ICYmIGlzRnVuY3Rpb24oZm9ybS5jb21wb25lbnRzKSkge1xuICAgICAgICAvLyBNYWtlIHRoZSBmb3JtIHNjaGVtYSByZWFjdGl2ZSBzaW5jZSBgcHJvY2Vzc0Zvcm0oKWAgaXMgYXN5bmMsIHNvIHRoYXRcbiAgICAgICAgLy8gdGhlIHNldHRpbmcgb2YgZGVmYXVsdHMgd2lsbCBiZSBwaWNrZWQgdXAgYnkgZG93bnN0cmVhbSBjb2RlLlxuICAgICAgICBmb3JtID0gcmVhY3RpdmUoe1xuICAgICAgICAgIC4uLmZvcm0sXG4gICAgICAgICAgY29tcG9uZW50czogZm9ybS5jb21wb25lbnRzKGNvbnRleHQpXG4gICAgICAgIH0pXG4gICAgICAgIC8vIFByb2Nlc3MgdGhlIGZvcm0gYWdhaW4sIG5vdyB0aGF0IHdlIGhhdmUgdGhlIGNvbXBvbmVudHMuXG4gICAgICAgIHByb2Nlc3NGb3JtKGNvbnRleHQuYXBpLCBmb3JtKS5jYXRjaChjb25zb2xlLmVycm9yKVxuICAgICAgfVxuICAgICAgcmV0dXJuIFt0eXBlLCBtb2RpZnlGb3JtPy4oZm9ybSkgPz8gZm9ybV1cbiAgICB9KVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3Jtcyhmb3JtcywgaXRlbSkge1xuICByZXR1cm4gZm9ybXNbaXRlbT8udHlwZV0gfHwgZm9ybXMuZGVmYXVsdCB8fCBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpIHtcbiAgcmV0dXJuIChcbiAgICBnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3JtcyhnZXRGb3JtU2NoZW1hcyhzY2hlbWEsIGNvbnRleHQpLCBpdGVtKSB8fFxuICAgIC8vIEFsd2F5cyByZXR1cm4gYSBzY2hlbWEgb2JqZWN0IHNvIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZm9yIGl0LlxuICAgIGVtcHR5U2NoZW1hXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHlTY2hlbWEoc2NoZW1hKSB7XG4gIHJldHVybiBzY2hlbWEgPT09IGVtcHR5U2NoZW1hXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbXBhY3Qoc2NoZW1hKSB7XG4gIHJldHVybiAhIXNjaGVtYS5jb21wYWN0XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0lubGluZWQoc2NoZW1hKSB7XG4gIHJldHVybiAhIShzY2hlbWEuaW5saW5lZCB8fCBzY2hlbWEuY29tcG9uZW50cylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTmVzdGVkKHNjaGVtYSkge1xuICByZXR1cm4gISEoc2NoZW1hLm5lc3RlZCB8fCBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5kZWZhdWx0TmVzdGVkID09PSB0cnVlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzTGFiZWwoc2NoZW1hLCBnZW5lcmF0ZUxhYmVscykge1xuICBjb25zdCB7IGxhYmVsIH0gPSBzY2hlbWFcbiAgcmV0dXJuIChcbiAgICBsYWJlbCAhPT0gZmFsc2UgJiYgKFxuICAgICAgISFsYWJlbCB8fFxuICAgICAgZ2VuZXJhdGVMYWJlbHMgJiYgZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uZ2VuZXJhdGVMYWJlbFxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gb21pdFNwYWNpbmcoc2NoZW1hKSB7XG4gIHJldHVybiAhIWdldFR5cGVPcHRpb25zKHNjaGVtYSk/Lm9taXRTcGFjaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2hlbWFWYWx1ZShcbiAga2V5T3JEYXRhUGF0aCxcbiAgeyB0eXBlLCBzY2hlbWEsIGNhbGxiYWNrID0gdHJ1ZSwgZGVmYXVsdDogZGVmLCBjb250ZXh0IH0gPSB7fVxuKSB7XG4gIGNvbnN0IHR5cGVzID0gdHlwZSAmJiBhc0FycmF5KHR5cGUpXG4gIC8vIEZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBkYXRhLXBhdGhzIGluIGBrZXlPckRhdGFQYXRoYCBjYW4gb25seSBiZVxuICAvLyBwcm92aWRlZCBpbiBpbiBhcnJheSBmb3JtYXQgaGVyZTpcbiAgbGV0IHZhbHVlID0gc2NoZW1hXG4gICAgPyBpc0FycmF5KGtleU9yRGF0YVBhdGgpXG4gICAgICA/IGdldFZhbHVlQXREYXRhUGF0aChzY2hlbWEsIGtleU9yRGF0YVBhdGgsICgpID0+IHVuZGVmaW5lZClcbiAgICAgIDogc2NoZW1hW2tleU9yRGF0YVBhdGhdXG4gICAgOiB1bmRlZmluZWRcblxuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBkZWYgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChjYWxsYmFjayAmJiBpc0Z1bmN0aW9uKGRlZikgJiYgIWlzTWF0Y2hpbmdUeXBlKHR5cGVzLCBkZWYpKSB7XG4gICAgICAvLyBTdXBwb3J0IGBkZWZhdWx0KClgIGZ1bmN0aW9ucyBmb3IgYW55IHR5cGUgZXhjZXB0IGBGdW5jdGlvbmA6XG4gICAgICBkZWYgPSBkZWYoY29udGV4dClcbiAgICB9XG4gICAgcmV0dXJuIGRlZlxuICB9XG5cbiAgaWYgKGlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuICAvLyBBbnkgc2NoZW1hIHZhbHVlIGhhbmRsZWQgdGhyb3VnaCBgZ2V0U2NoZW1hVmFsdWUoKWAgY2FuIHByb3ZpZGVcbiAgLy8gYSBmdW5jdGlvbiB0aGF0J3MgcmVzb2x2ZWQgd2hlbiB0aGUgdmFsdWUgaXMgZXZhbHVhdGVkOlxuICBpZiAoY2FsbGJhY2sgJiYgaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICB2YWx1ZSA9IHZhbHVlKGNvbnRleHQpXG4gIH1cbiAgLy8gTm93IGZpbmFsbHkgc2VlIGlmIHdlIGNhbiBjb252ZXJ0IHRvIHRoZSBleHBlY3QgdHlwZXMuXG4gIGlmICh0eXBlcyAmJiB2YWx1ZSAhPSBudWxsICYmICFpc01hdGNoaW5nVHlwZSh0eXBlcywgdmFsdWUpKSB7XG4gICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICBjb25zdCBjb252ZXJ0ZWQgPSBjb252ZXJ0VHlwZSh0eXBlLCB2YWx1ZSlcbiAgICAgIGlmIChjb252ZXJ0ZWQgIT09IHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBjb252ZXJ0ZWRcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRSZW5kZXJTY2hlbWEoc2NoZW1hLCBjb250ZXh0KSB7XG4gIHJldHVybiAoXG4gICAgZ2V0U2NoZW1hVmFsdWUoJ2lmJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIHNjaGVtYSxcbiAgICAgIGNvbnRleHQsXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSkgJiYgKFxuICAgICAgIWhhc05lc3RlZFNjaGVtYUNvbXBvbmVudHMoc2NoZW1hKSB8fFxuICAgICAgc29tZU5lc3RlZFNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNvbXBvbmVudCA9PlxuICAgICAgICBzaG91bGRSZW5kZXJTY2hlbWEoY29tcG9uZW50LCBjb250ZXh0KVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5mdW5jdGlvbiBnZXRDb250ZXh0KGNvbnRleHQpIHtcbiAgcmV0dXJuIGlzRnVuY3Rpb24oY29udGV4dCkgPyBjb250ZXh0KCkgOiBjb250ZXh0XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0VmFsdWUoc2NoZW1hLCBjb250ZXh0KSB7XG4gIC8vIFN1cHBvcnQgZGVmYXVsdCB2YWx1ZXMgYm90aCBvbiBzY2hlbWEgYW5kIG9uIGNvbXBvbmVudCBsZXZlbC5cbiAgLy8gTk9URTogQXQgdGhlIHRpbWUgb2YgY3JlYXRpb24sIGNvbXBvbmVudHMgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQsIChlLmcuIGlmXG4gIC8vIGVudHJpZXMgYXJlIGNyZWF0ZWQgdGhyb3VnaCBuZXN0ZWQgZm9ybXMsIHRoZSBwYXJlbnQgZm9ybSBpc24ndCBtb3VudGVkKSBzb1xuICAvLyB3ZSBjYW4ndCB1c2UgYGRhdGFQYXRoYCB0byBnZXQgdG8gY29tcG9uZW50cywgYW5kIHRoZSBgZGVmYXVsdFZhbHVlYCBmcm9tXG4gIC8vIHRoZXJlLiBUaGF0J3Mgd2h5IGBkZWZhdWx0VmFsdWVgIGlzIGRlZmluZWQgc3RhdGljYWxseSBpbiB0aGUgY29tcG9uZW50czpcbiAgY29uc3QgZGVmYXVsdFZhbHVlID1cbiAgICBzY2hlbWEuZGVmYXVsdCAhPT0gdW5kZWZpbmVkXG4gICAgICA/IHNjaGVtYS5kZWZhdWx0XG4gICAgICA6IGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LmRlZmF1bHRWYWx1ZVxuICByZXR1cm4gaXNGdW5jdGlvbihkZWZhdWx0VmFsdWUpXG4gICAgPyBkZWZhdWx0VmFsdWUoZ2V0Q29udGV4dChjb250ZXh0KSlcbiAgICA6IGNsb25lKGRlZmF1bHRWYWx1ZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZEV4Y2x1ZGVWYWx1ZShzY2hlbWEsIGNvbnRleHQpIHtcbiAgY29uc3QgZXhjbHVkZVZhbHVlID1cbiAgICBzY2hlbWEuZXhjbHVkZSAhPT0gdW5kZWZpbmVkXG4gICAgICA/IHNjaGVtYS5leGNsdWRlXG4gICAgICA6IGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LmV4Y2x1ZGVWYWx1ZVxuICByZXR1cm4gaXNGdW5jdGlvbihleGNsdWRlVmFsdWUpXG4gICAgPyBleGNsdWRlVmFsdWUoZ2V0Q29udGV4dChjb250ZXh0KSlcbiAgICA6ICEhZXhjbHVkZVZhbHVlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRJZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hLCBjb250ZXh0KSB7XG4gIHJldHVybiAhIWdldFR5cGVPcHRpb25zKHNjaGVtYSk/Lmlnbm9yZU1pc3NpbmdWYWx1ZT8uKGdldENvbnRleHQoY29udGV4dCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXREZWZhdWx0VmFsdWVzKHNjaGVtYSwgZGF0YSA9IHt9LCBjb21wb25lbnQpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHsgY29tcG9uZW50LCByb290RGF0YTogZGF0YSB9XG5cbiAgY29uc3QgcHJvY2Vzc0JlZm9yZSA9IChzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoKSA9PiB7XG4gICAgY29uc3QgY29udGV4dCA9ICgpID0+XG4gICAgICBuZXcgRGl0b0NvbnRleHQoY29tcG9uZW50LCB7XG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgIHJvb3REYXRhOiBvcHRpb25zLnJvb3REYXRhXG4gICAgICB9KVxuICAgIGlmICghKG5hbWUgaW4gZGF0YSkgJiYgIXNob3VsZElnbm9yZU1pc3NpbmdWYWx1ZShzY2hlbWEsIGNvbnRleHQpKSB7XG4gICAgICBkYXRhW25hbWVdID0gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSwgY29udGV4dClcbiAgICB9XG4gIH1cblxuICAvLyBTZXRzIHVwIGEgZGF0YSBvYmplY3QgdGhhdCBoYXMga2V5cyB3aXRoIGRlZmF1bHQgdmFsdWVzIGZvciBhbGxcbiAgLy8gZm9ybSBmaWVsZHMsIHNvIHRoZXkgY2FuIGJlIGNvcnJlY3RseSB3YXRjaGVkIGZvciBjaGFuZ2VzLlxuICByZXR1cm4gcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgc2NoZW1hLFxuICAgIGRhdGEsXG4gICAgbnVsbCxcbiAgICBudWxsLFxuICAgIHByb2Nlc3NCZWZvcmUsXG4gICAgbnVsbCxcbiAgICBvcHRpb25zXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVWYWx1ZShzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCB7XG4gIGNvbXBvbmVudCA9IG51bGwsXG4gIHJvb3REYXRhID0gY29tcG9uZW50Py5yb290RGF0YVxufSA9IHt9KSB7XG4gIGNvbnN0IGNvbnRleHQgPSAoKSA9PlxuICAgIG5ldyBEaXRvQ29udGV4dChjb21wb25lbnQsIHtcbiAgICAgIHNjaGVtYSxcbiAgICAgIC8vIE92ZXJyaWRlIHZhbHVlIHRvIHByZXZlbnQgZW5kbGVzcyByZWN1cnNpb24gdGhyb3VnaCBjYWxsaW5nIHRoZVxuICAgICAgLy8gZ2V0dGVyIGZvciBgdGhpcy52YWx1ZWAgaW4gYERpdG9Db250ZXh0YDpcbiAgICAgIHZhbHVlOiBkYXRhW25hbWVdLFxuICAgICAgbmFtZSxcbiAgICAgIGRhdGEsXG4gICAgICBkYXRhUGF0aCxcbiAgICAgIHJvb3REYXRhXG4gICAgfSlcbiAgY29uc3QgeyBjb21wdXRlIH0gPSBzY2hlbWFcbiAgaWYgKGNvbXB1dGUpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGNvbXB1dGUoZ2V0Q29udGV4dChjb250ZXh0KSlcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQWNjZXNzIGBkYXRhW25hbWVdYCBkaXJlY3RseSB0byB1cGRhdGUgdGhlIHZhbHVlIHdpdGhvdXQgY2FsbGluZ1xuICAgICAgLy8gcGFyc2UoKTpcbiAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgIGRhdGFbbmFtZV0gPSB2YWx1ZVxuICAgIH1cbiAgfVxuICAvLyBJZiB0aGUgdmFsdWUgaXMgc3RpbGwgbWlzc2luZyBhZnRlciBjb21wdXRlLCBzZXQgdGhlIGRlZmF1bHQgZm9yIGl0OlxuICBpZiAoIShuYW1lIGluIGRhdGEpICYmICFzaG91bGRJZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hLCBjb250ZXh0KSkge1xuICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICBkYXRhW25hbWVdID0gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSwgY29udGV4dClcbiAgfVxuICAvLyBOb3cgYWNjZXNzIHRoZSB2YWx1ZS4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHJlYWN0aXZpdHkgYW5kIG5lZWRzIHRvXG4gIC8vIGhhcHBlbiBhZnRlciBhbGwgcHJpb3IgbWFuaXB1bGF0aW9uIG9mIGBkYXRhW25hbWVdYCwgc2VlIGFib3ZlOlxuICByZXR1cm4gZGF0YVtuYW1lXVxufVxuXG5mdW5jdGlvbiBjbG9uZUl0ZW0oc291cmNlU2NoZW1hLCBpdGVtLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zLnNjaGVtYU9ubHkpIHtcbiAgICBjb25zdCBjb3B5ID0ge31cbiAgICBjb25zdCB7IGlkS2V5ID0gJ2lkJywgb3JkZXJLZXkgfSA9IHNvdXJjZVNjaGVtYVxuICAgIGNvbnN0IGlkID0gaXRlbVtpZEtleV1cbiAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29weVtpZEtleV0gPSBpZFxuICAgIH1cbiAgICAvLyBDb3B5IG92ZXIgdHlwZSBpbiBjYXNlIHRoZXJlIGFyZSBtdWx0aXBsZSBmb3JtcyB0byBjaG9vc2UgZnJvbS5cbiAgICBpZiAoaGFzTXVsdGlwbGVGb3JtU2NoZW1hcyhzb3VyY2VTY2hlbWEpKSB7XG4gICAgICBjb3B5LnR5cGUgPSBpdGVtLnR5cGVcbiAgICB9XG4gICAgaWYgKG9yZGVyS2V5KSB7XG4gICAgICBjb3B5W29yZGVyS2V5XSA9IGl0ZW1bb3JkZXJLZXldXG4gICAgfVxuICAgIHJldHVybiBjb3B5XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHsgLi4uaXRlbSB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NEYXRhKHNjaGVtYSwgc291cmNlU2NoZW1hLCBkYXRhLCBkYXRhUGF0aCwge1xuICBjb21wb25lbnQsXG4gIHJvb3REYXRhLFxuICBzY2hlbWFPbmx5LCAvLyB3aGV0aGVyIHRvIG9ubHkgaW5jbHVkZSBkYXRhIGNvdmVyZWQgYnkgdGhlIHNjaGVtYSwgb3IgYWxsIGRhdGFcbiAgdGFyZ2V0XG59ID0ge30pIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHsgY29tcG9uZW50LCByb290RGF0YSwgc2NoZW1hT25seSwgdGFyZ2V0IH1cbiAgY29uc3QgcHJvY2Vzc2VkRGF0YSA9IGNsb25lSXRlbShzb3VyY2VTY2hlbWEsIGRhdGEsIG9wdGlvbnMpXG4gIGNvbnN0IGdyYXBoID0gbmV3IFNjaGVtYUdyYXBoKClcblxuICBjb25zdCBwcm9jZXNzQmVmb3JlID0gKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIHByb2Nlc3NlZERhdGEpID0+IHtcbiAgICBsZXQgdmFsdWUgPSBjb21wdXRlVmFsdWUoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwgb3B0aW9ucylcbiAgICAvLyBUaGUgc2NoZW1hIGV4cGVjdHMgdGhlIGB3cmFwUHJpbWl0aXZlc2AgdHJhbnNmb3JtYXRpb25zIHRvIGJlIHByZXNlbnQgb25cbiAgICAvLyB0aGUgZGF0YSB0aGF0IGl0IGlzIGFwcGxpZWQgb24sIHNvIHdhcnAgYmVmb3JlIGFuZCB1bndyYXAgYWZ0ZXIuXG4gICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzLCBvcmRlcktleSwgaWRLZXkgPSAnaWQnIH0gPSBzY2hlbWFcbiAgICAgIGlmICh3cmFwUHJpbWl0aXZlcykge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLm1hcChlbnRyeSA9PiAoe1xuICAgICAgICAgIFt3cmFwUHJpbWl0aXZlc106IGVudHJ5XG4gICAgICAgIH0pKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQWx3YXlzIHNoYWxsb3ctY2xvbmUgYXJyYXkgdmFsdWVzOlxuICAgICAgICB2YWx1ZSA9IFsuLi52YWx1ZV1cbiAgICAgIH1cbiAgICAgIGlmIChvcmRlcktleSAmJiB0YXJnZXQgPT09ICdjbGlwYm9hcmQnKSB7XG4gICAgICAgIC8vIFNvcnQgdGhlIGRhdGEgYmFjayBpbnRvIHRoZSBuYXR1cmFsIHNlcXVlbmNlIGFzIGRlZmluZWQgYnkgdGhlaXIgaWRzLFxuICAgICAgICAvLyBzbyBjb3B5LXBhc3RpbmcgYmV0d2VlbiBzZXJ2ZXJzIChlLmcuIG5lc3RlZCBmb250LWN1dHMgb24gTGluZXRvKVxuICAgICAgICAvLyBuYXR1cmFsbHkgZ2V0cyBtYXBwZWQgdG8gdGhlIHNhbWUgZW50cmllcyBpbiB0aGUgZ3JhcGguXG4gICAgICAgIHZhbHVlLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICBjb25zdCBpZDEgPSBhPy5baWRLZXldXG4gICAgICAgICAgY29uc3QgaWQyID0gYj8uW2lkS2V5XVxuICAgICAgICAgIHJldHVybiBpZDEgPT0gbnVsbCB8fCBpc1RlbXBvcmFyeUlkKGlkMSlcbiAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgOiBpZDIgPT0gbnVsbCB8fCBpc1RlbXBvcmFyeUlkKGlkMilcbiAgICAgICAgICAgICAgPyAtMVxuICAgICAgICAgICAgICA6IGlkMSAtIGlkMlxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgICBwcm9jZXNzZWREYXRhW25hbWVdID0gdmFsdWVcbiAgfVxuXG4gIGNvbnN0IHByb2Nlc3NBZnRlciA9IChzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCBwcm9jZXNzZWREYXRhKSA9PiB7XG4gICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcywgcHJvY2VzcyB9ID0gc2NoZW1hXG4gICAgbGV0IHZhbHVlID0gcHJvY2Vzc2VkRGF0YVtuYW1lXVxuXG4gICAgLy8gTk9URTogV2UgZG9uJ3QgY2FjaGUgdGhpcyBjb250ZXh0LCBzaW5jZSBgdmFsdWVgIGlzIGNoYW5naW5nLlxuICAgIGNvbnN0IGNvbnRleHQgPSAoKSA9PlxuICAgICAgbmV3IERpdG9Db250ZXh0KGNvbXBvbmVudCwge1xuICAgICAgICBzY2hlbWEsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBuYW1lLFxuICAgICAgICBkYXRhLFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgcm9vdERhdGE6IG9wdGlvbnMucm9vdERhdGEsXG4gICAgICAgIC8vIFBhc3MgdGhlIGFscmVhZHkgcHJvY2Vzc2VkIGRhdGEgdG8gYHByb2Nlc3MoKWAsIHNvIGl0IGNhbiBiZSBtb2RpZmllZFxuICAgICAgICAvLyB0aHJvdWdoIGBwcm9jZXNzZWRJdGVtYCBmcm9tIHRoZXJlLlxuICAgICAgICBwcm9jZXNzZWREYXRhXG4gICAgICB9KVxuXG4gICAgLy8gRmlyc3QgdW53cmFwIHRoZSB3cmFwcGVkIHByaW1pdGl2ZXMgYWdhaW4sIHRvIGJyaW5nIHRoZSBkYXRhIGJhY2sgaW50b1xuICAgIC8vIGl0cyBuYXRpdmUgZm9ybS4gU2UgYHByb2Nlc3NCZWZvcmUoKWAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICBpZiAod3JhcFByaW1pdGl2ZXMgJiYgaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUubWFwKG9iamVjdCA9PiBvYmplY3Rbd3JhcFByaW1pdGl2ZXNdKVxuICAgIH1cblxuICAgIC8vIEVhY2ggY29tcG9uZW50IHR5cGUgY2FuIHByb3ZpZGUgaXRzIG93biBzdGF0aWMgYHByb2Nlc3NWYWx1ZSgpYCBtZXRob2RcbiAgICAvLyB0byBjb252ZXJ0IHRoZSBkYXRhIGZvciBzdG9yYWdlLlxuICAgIGNvbnN0IHByb2Nlc3NWYWx1ZSA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LnByb2Nlc3NWYWx1ZVxuICAgIGlmIChwcm9jZXNzVmFsdWUpIHtcbiAgICAgIHZhbHVlID0gcHJvY2Vzc1ZhbHVlKGdldENvbnRleHQoY29udGV4dCksIGdyYXBoKVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSB0aGUgdXNlcidzIGBwcm9jZXNzKClgIGNhbGxiYWNrIG5leHQsIGlmIG9uZSBpcyBwcm92aWRlZCwgc28gdGhhdFxuICAgIC8vIGl0IGNhbiBtb2RpZnkgZGF0YSBpbiBgcHJvY2Vzc2VkRGF0YWAgZXZlbiBpZiBpdCBwcm92aWRlcyBgZXhjbHVkZTogdHJ1ZWBcbiAgICBpZiAocHJvY2Vzcykge1xuICAgICAgdmFsdWUgPSBwcm9jZXNzKGdldENvbnRleHQoY29udGV4dCkpXG4gICAgfVxuXG4gICAgaWYgKHNob3VsZEV4Y2x1ZGVWYWx1ZShzY2hlbWEsIGNvbnRleHQpKSB7XG4gICAgICBkZWxldGUgcHJvY2Vzc2VkRGF0YVtuYW1lXVxuICAgIH0gZWxzZSB7XG4gICAgICBwcm9jZXNzZWREYXRhW25hbWVdID0gdmFsdWVcbiAgICB9XG4gIH1cblxuICBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICBzY2hlbWEsXG4gICAgZGF0YSxcbiAgICBkYXRhUGF0aCxcbiAgICBwcm9jZXNzZWREYXRhLFxuICAgIHByb2Nlc3NCZWZvcmUsXG4gICAgcHJvY2Vzc0FmdGVyLFxuICAgIG9wdGlvbnNcbiAgKVxuXG4gIHJldHVybiBncmFwaC5wcm9jZXNzKHNvdXJjZVNjaGVtYSwgcHJvY2Vzc2VkRGF0YSwgb3B0aW9ucylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NTY2hlbWFEYXRhKFxuICBzY2hlbWEsXG4gIGRhdGEsXG4gIGRhdGFQYXRoLFxuICBwcm9jZXNzZWREYXRhLFxuICBwcm9jZXNzQmVmb3JlLFxuICBwcm9jZXNzQWZ0ZXIsXG4gIG9wdGlvbnNcbikge1xuICBjb25zdCBwcm9jZXNzQ29tcG9uZW50cyA9IGNvbXBvbmVudHMgPT4ge1xuICAgIGNvbnN0IGdldERhdGFQYXRoID0gKGRhdGFQYXRoLCB0b2tlbikgPT5cbiAgICAgIGRhdGFQYXRoICE9IG51bGxcbiAgICAgICAgPyBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgdG9rZW4pXG4gICAgICAgIDogbnVsbFxuXG4gICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGNvbXBvbmVudFNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMoY29tcG9uZW50cykpIHtcbiAgICAgICAgaWYgKCFpc05lc3RlZChjb21wb25lbnRTY2hlbWEpKSB7XG4gICAgICAgICAgLy8gUmVjdXJzaXZlbHkgcHJvY2VzcyBkYXRhIG9uIHVubmVzdGVkIGNvbXBvbmVudHMuXG4gICAgICAgICAgcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgICAgICAgICBjb21wb25lbnRTY2hlbWEsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgICBwcm9jZXNzZWREYXRhLFxuICAgICAgICAgICAgcHJvY2Vzc0JlZm9yZSxcbiAgICAgICAgICAgIHByb2Nlc3NBZnRlcixcbiAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY29tcG9uZW50RGF0YVBhdGggPSBnZXREYXRhUGF0aChkYXRhUGF0aCwgbmFtZSlcblxuICAgICAgICAgIGNvbnN0IHByb2Nlc3NJdGVtID0gKGl0ZW0sIGluZGV4ID0gbnVsbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXRlbURhdGFQYXRoID1cbiAgICAgICAgICAgICAgaW5kZXggIT09IG51bGxcbiAgICAgICAgICAgICAgICA/IGdldERhdGFQYXRoKGNvbXBvbmVudERhdGFQYXRoLCBpbmRleClcbiAgICAgICAgICAgICAgICA6IGNvbXBvbmVudERhdGFQYXRoXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gbmV3IERpdG9Db250ZXh0KG9wdGlvbnMuY29tcG9uZW50LCB7XG4gICAgICAgICAgICAgIHNjaGVtYTogY29tcG9uZW50U2NoZW1hLFxuICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICBkYXRhUGF0aDogY29tcG9uZW50RGF0YVBhdGgsXG4gICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgIHJvb3REYXRhOiBvcHRpb25zLnJvb3REYXRhXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgY29uc3QgZ2V0Rm9ybXMgPSAoXG4gICAgICAgICAgICAgIGdldFR5cGVPcHRpb25zKGNvbXBvbmVudFNjaGVtYSk/LmdldEZvcm1TY2hlbWFzRm9yUHJvY2Vzc2luZyB8fFxuICAgICAgICAgICAgICBnZXRGb3JtU2NoZW1hc1xuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3QgZm9ybXMgPSBnZXRGb3Jtcyhjb21wb25lbnRTY2hlbWEsIGNvbnRleHQpXG4gICAgICAgICAgICBjb25zdCBmb3JtID0gZ2V0SXRlbUZvcm1TY2hlbWFGcm9tRm9ybXMoZm9ybXMsIGl0ZW0pXG4gICAgICAgICAgICBpZiAoZm9ybSkge1xuICAgICAgICAgICAgICBjb25zdCBwcm9jZXNzZWRJdGVtID0gcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgICAgICAgID8gY2xvbmVJdGVtKGNvbXBvbmVudFNjaGVtYSwgaXRlbSwgb3B0aW9ucylcbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgcmV0dXJuIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgICAgICAgICAgICAgIGZvcm0sXG4gICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICBpdGVtRGF0YVBhdGgsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkSXRlbSxcbiAgICAgICAgICAgICAgICBwcm9jZXNzQmVmb3JlLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NBZnRlcixcbiAgICAgICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIEl0ZW1zIHdpdGhvdXQgZm9ybXMgc3RpbGwgZ2V0IGZ1bGx5IChidXQgc2hhbGxvd2x5KSBjbG9uZWQuXG4gICAgICAgICAgICAgIC8vIFRPRE86IEZpbmQgb3V0IG9mIHRoaXMgaXMgYWN0dWFsbHkgbmVlZGVkIC8gdXNlZCBhdCBhbGw/XG4gICAgICAgICAgICAgIHJldHVybiB7IC4uLml0ZW0gfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHByb2Nlc3NCZWZvcmU/LihcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgY29tcG9uZW50RGF0YVBhdGgsXG4gICAgICAgICAgICBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgKVxuXG4gICAgICAgICAgbGV0IHZhbHVlID0gcHJvY2Vzc2VkRGF0YSA/IHByb2Nlc3NlZERhdGFbbmFtZV0gOiBkYXRhW25hbWVdXG4gICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgaGFzRm9ybVNjaGVtYShjb21wb25lbnRTY2hlbWEpKSB7XG4gICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBwcm9jZXNzIGRhdGEgb24gbmVzdGVkIGZvcm0gaXRlbXMuXG4gICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgLy8gT3B0aW1pemF0aW9uOiBObyBuZWVkIHRvIGNvbGxlY3QgdmFsdWVzIGlmIHdlJ3JlIG5vdCBjbG9uaW5nIVxuICAgICAgICAgICAgICB2YWx1ZSA9IHByb2Nlc3NlZERhdGFcbiAgICAgICAgICAgICAgICA/IHZhbHVlLm1hcChwcm9jZXNzSXRlbSlcbiAgICAgICAgICAgICAgICA6IHZhbHVlLmZvckVhY2gocHJvY2Vzc0l0ZW0pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YWx1ZSA9IHByb2Nlc3NJdGVtKHZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb2Nlc3NlZERhdGEpIHtcbiAgICAgICAgICAgICAgcHJvY2Vzc2VkRGF0YVtuYW1lXSA9IHZhbHVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcHJvY2Vzc0FmdGVyPy4oXG4gICAgICAgICAgICBjb21wb25lbnRTY2hlbWEsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGNvbXBvbmVudERhdGFQYXRoLFxuICAgICAgICAgICAgcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NDb21wb25lbnRzKHNjaGVtYS5jb21wb25lbnRzKVxuICBmb3IgKGNvbnN0IHRhYiBvZiBnZXRUYWJTY2hlbWFzKHNjaGVtYSkpIHtcbiAgICBwcm9jZXNzQ29tcG9uZW50cyh0YWIuY29tcG9uZW50cylcbiAgfVxuICBmb3IgKGNvbnN0IHBhbmVsIG9mIGdldFBhbmVsU2NoZW1hcyhzY2hlbWEpKSB7XG4gICAgcHJvY2Vzc0NvbXBvbmVudHMocGFuZWwuY29tcG9uZW50cylcbiAgfVxuXG4gIHJldHVybiBwcm9jZXNzZWREYXRhIHx8IGRhdGFcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5hbWVkU2NoZW1hcyhzY2hlbWFzLCBkZWZhdWx0cykge1xuICBjb25zdCB0b09iamVjdCA9IChhcnJheSwgdG9TY2hlbWEpID0+IHtcbiAgICByZXR1cm4gYXJyYXkubGVuZ3RoID4gMFxuICAgICAgPyBhcnJheS5yZWR1Y2UoKG9iamVjdCwgdmFsdWUpID0+IHtcbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSB0b1NjaGVtYSh2YWx1ZSlcbiAgICAgICAgICBpZiAoc2NoZW1hKSB7XG4gICAgICAgICAgICBvYmplY3Rbc2NoZW1hLm5hbWVdID1cbiAgICAgICAgICAgICAgc2NoZW1hICYmIGRlZmF1bHRzXG4gICAgICAgICAgICAgICAgPyB7IC4uLmRlZmF1bHRzLCAuLi5zY2hlbWEgfVxuICAgICAgICAgICAgICAgIDogc2NoZW1hXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvYmplY3RcbiAgICAgICAgfSwge30pXG4gICAgICA6IG51bGxcbiAgfVxuXG4gIHJldHVybiBpc0FycmF5KHNjaGVtYXMpXG4gICAgPyB0b09iamVjdChzY2hlbWFzLCB2YWx1ZSA9PlxuICAgICAgICBpc09iamVjdCh2YWx1ZSlcbiAgICAgICAgICA/IHZhbHVlXG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIG5hbWU6IGNhbWVsaXplKHZhbHVlLCBmYWxzZSlcbiAgICAgICAgICAgIH1cbiAgICAgIClcbiAgICA6IGlzT2JqZWN0KHNjaGVtYXMpXG4gICAgICA/IHRvT2JqZWN0KFxuICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHNjaGVtYXMpLFxuICAgICAgICAgIChbbmFtZSwgdmFsdWVdKSA9PlxuICAgICAgICAgICAgaXNPYmplY3QodmFsdWUpXG4gICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgIC4uLnZhbHVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA6IGlzU3RyaW5nKHZhbHVlKVxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogdmFsdWVcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgKVxuICAgICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCdXR0b25TY2hlbWFzKGJ1dHRvbnMpIHtcbiAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyhcbiAgICBidXR0b25zLFxuICAgIHsgdHlwZTogJ2J1dHRvbicgfSAvLyBEZWZhdWx0c1xuICApXG59XG5cbmZ1bmN0aW9uIGdldFR5cGUoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBpc09iamVjdChzY2hlbWFPclR5cGUpID8gc2NoZW1hT3JUeXBlLnR5cGUgOiBzY2hlbWFPclR5cGVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVPcHRpb25zKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0VHlwZUNvbXBvbmVudChnZXRUeXBlKHNjaGVtYU9yVHlwZSksIHRydWUpID8/IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiAoXG4gICAgZ2V0VHlwZU9wdGlvbnMoc2NoZW1hT3JUeXBlKT8uZ2V0U291cmNlVHlwZT8uKGdldFR5cGUoc2NoZW1hT3JUeXBlKSkgPz9cbiAgICBudWxsXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhbmVsRW50cnkoc2NoZW1hLCBkYXRhUGF0aCA9IG51bGwsIHRhYkNvbXBvbmVudCA9IG51bGwpIHtcbiAgcmV0dXJuIHNjaGVtYVxuICAgID8ge1xuICAgICAgICBzY2hlbWEsXG4gICAgICAgIC8vIElmIHRoZSBwYW5lbCBwcm92aWRlcyBpdHMgb3duIG5hbWUsIGFwcGVuZCBpdCB0byB0aGUgZGF0YVBhdGguXG4gICAgICAgIC8vIFRoaXMgaXMgdXNlZCBlLmcuIGZvciAkZmlsdGVycyBwYW5lbHMuXG4gICAgICAgIGRhdGFQYXRoOlxuICAgICAgICAgIGRhdGFQYXRoICE9IG51bGwgJiYgc2NoZW1hLm5hbWVcbiAgICAgICAgICAgID8gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHNjaGVtYS5uYW1lKVxuICAgICAgICAgICAgOiBkYXRhUGF0aCxcbiAgICAgICAgdGFiQ29tcG9uZW50XG4gICAgICB9XG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYW5lbEVudHJpZXMoXG4gIHBhbmVsU2NoZW1hcyxcbiAgZGF0YVBhdGgsXG4gIHRhYkNvbXBvbmVudCA9IG51bGwsXG4gIHBhbmVsRW50cmllcyA9IFtdXG4pIHtcbiAgaWYgKHBhbmVsU2NoZW1hcykge1xuICAgIGZvciAoY29uc3QgW2tleSwgc2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyhwYW5lbFNjaGVtYXMpKSB7XG4gICAgICBjb25zdCBlbnRyeSA9IGdldFBhbmVsRW50cnkoXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIGtleSksXG4gICAgICAgIHRhYkNvbXBvbmVudFxuICAgICAgKVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIHBhbmVsRW50cmllcy5wdXNoKGVudHJ5KVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcGFuZWxFbnRyaWVzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJTY2hlbWFzKHNjaGVtYSkge1xuICByZXR1cm4gc2NoZW1hPy50YWJzID8gT2JqZWN0LnZhbHVlcyhzY2hlbWEudGFicykgOiBbXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFuZWxTY2hlbWFzKHNjaGVtYSkge1xuICByZXR1cm4gc2NoZW1hPy5wYW5lbHMgPyBPYmplY3QudmFsdWVzKHNjaGVtYS5wYW5lbHMpIDogW11cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFsbFBhbmVsRW50cmllcyhcbiAgYXBpLFxuICBzY2hlbWEsXG4gIGRhdGFQYXRoLFxuICBjb21wb25lbnQgPSBudWxsLFxuICB0YWJDb21wb25lbnQgPSBudWxsXG4pIHtcbiAgY29uc3QgcGFuZWxTY2hlbWEgPSBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5nZXRQYW5lbFNjaGVtYT8uKFxuICAgIGFwaSxcbiAgICBzY2hlbWEsXG4gICAgZGF0YVBhdGgsXG4gICAgY29tcG9uZW50XG4gIClcbiAgY29uc3QgcGFuZWxFbnRyaWVzID0gcGFuZWxTY2hlbWFcbiAgICA/IFtnZXRQYW5lbEVudHJ5KHBhbmVsU2NoZW1hLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50KV1cbiAgICA6IFtdXG4gIC8vIEFsbG93IGVhY2ggY29tcG9uZW50IHRvIHByb3ZpZGUgaXRzIG93biBzZXQgb2YgcGFuZWxzLCBpblxuICAvLyBhZGRpdGlvbiB0byB0aGUgZGVmYXVsdCBvbmUgKGUuZy4gZ2V0RmlsdGVyc1BhbmVsKCksICRmaWx0ZXJzKTpcbiAgZ2V0UGFuZWxFbnRyaWVzKHNjaGVtYT8ucGFuZWxzLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50LCBwYW5lbEVudHJpZXMpXG4gIHJldHVybiBwYW5lbEVudHJpZXNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0U291cmNlKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0U291cmNlVHlwZShzY2hlbWFPclR5cGUpID09PSAnb2JqZWN0J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNMaXN0U291cmNlKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0U291cmNlVHlwZShzY2hlbWFPclR5cGUpID09PSAnbGlzdCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0pIHtcbiAgY29uc3QgaWQgPSBpdGVtW3NvdXJjZVNjaGVtYS5pZEtleSB8fCAnaWQnXVxuICByZXR1cm4gaWQgIT0gbnVsbCA/IFN0cmluZyhpZCkgOiB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1VaWQoc291cmNlU2NoZW1hLCBpdGVtKSB7XG4gIC8vIFRyeSB0byB1c2UgdGhlIGl0ZW0gaWQgYXMgdGhlIHVpZCwgZmFsbGluZyBiYWNrIG9uIGF1dG8tZ2VuZXJhdGVkIGlkcywgYnV0XG4gIC8vIGVpdGhlciB3YXksIHBhc3MgdGhyb3VnaCBgZ2V0VWlkKClgIHNvIHRoYXQgdGhlIGlkcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZVxuICAvLyBpdGVtIHRocm91Z2ggYSB3ZWFrIG1hcCwgYXMgdGhlIGlkcyBjYW4gYmUgZmlsdGVyZWQgb3V0IGluIGBwcm9jZXNzRGF0YSgpYFxuICAvLyB3aGlsZSB0aGUgY29tcG9uZW50cyB0aGF0IHVzZSB0aGUgdWlkcyBhcyBrZXkgYXJlIHN0aWxsIHZpc2libGUuXG4gIHJldHVybiBnZXRVaWQoaXRlbSwgaXRlbSA9PiBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKSlcbn1cbiIsImltcG9ydCB7IGlzRnVuY3Rpb24sIGlzT2JqZWN0LCBpc1N0cmluZywgcGlja0J5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1Jlc291cmNlKHNjaGVtYSkge1xuICByZXR1cm4gISFnZXRSZXNvdXJjZShzY2hlbWEucmVzb3VyY2UpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZXNvdXJjZShyZXNvdXJjZSwgZGVmYXVsdHMgPSB7fSkge1xuICBjb25zdCB7IHBhcmVudCwgLi4uZGVmcyB9ID0gZGVmYXVsdHNcbiAgaWYgKGlzRnVuY3Rpb24ocmVzb3VyY2UpKSB7XG4gICAgcmVzb3VyY2UgPSByZXNvdXJjZShkZWZhdWx0cylcbiAgfVxuICByZXNvdXJjZSA9IGlzT2JqZWN0KHJlc291cmNlKVxuICAgID8geyAuLi5kZWZzLCAuLi5yZXNvdXJjZSB9XG4gICAgOiBpc1N0cmluZyhyZXNvdXJjZSlcbiAgICAgID8geyAuLi5kZWZzLCBwYXRoOiByZXNvdXJjZSB9XG4gICAgICA6IG51bGxcbiAgLy8gT25seSBzZXQgcGFyZW50IGlmIHBhdGggZG9lc24ndCBzdGFydCB3aXRoICcvJywgc28gcmVsYXRpdmUgVVJMcyBhcmVcbiAgLy8gZGVhbHQgd2l0aCBjb3JyZWN0bHkuXG4gIGlmIChcbiAgICByZXNvdXJjZSAmJlxuICAgIHBhcmVudCAhPT0gdW5kZWZpbmVkICYmXG4gICAgcmVzb3VyY2UucGFyZW50ID09PSB1bmRlZmluZWQgJiZcbiAgICAhcmVzb3VyY2UucGF0aD8uc3RhcnRzV2l0aCgnLycpXG4gICkge1xuICAgIHJlc291cmNlLnBhcmVudCA9IHBhcmVudFxuICAgIGlmICghcmVzb3VyY2UucGF0aCkge1xuICAgICAgcmVzb3VyY2UucGF0aCA9ICcuJ1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzb3VyY2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1lbWJlclJlc291cmNlKGlkLCByZXNvdXJjZSkge1xuICByZXR1cm4gaWQgIT0gbnVsbCAmJiByZXNvdXJjZT8udHlwZSA9PT0gJ2NvbGxlY3Rpb24nXG4gICAgPyB7XG4gICAgICAgIHR5cGU6ICdtZW1iZXInLFxuICAgICAgICAuLi5waWNrQnkoXG4gICAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgICAgKHZhbHVlLCBrZXkpID0+IFsnbWV0aG9kJywgJ3BhdGgnLCAncGFyZW50J10uaW5jbHVkZXMoa2V5KVxuICAgICAgICApLFxuICAgICAgICBpZDogYCR7aWR9YFxuICAgICAgfVxuICAgIDogbnVsbFxufVxuIiwiaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGlzU3RyaW5nLFxuICBpc0Z1bmN0aW9uLFxuICBlcXVhbHMsXG4gIGxhYmVsaXplLFxuICBoeXBoZW5hdGUsXG4gIGZvcm1hdFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IGFwcFN0YXRlIGZyb20gJy4uL2FwcFN0YXRlLmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IEVtaXR0ZXJNaXhpbiBmcm9tICcuL0VtaXR0ZXJNaXhpbi5qcydcbmltcG9ydCB7XG4gIGZsYXR0ZW5WaWV3cyxcbiAgZ2V0U2NoZW1hVmFsdWUsXG4gIHNob3VsZFJlbmRlclNjaGVtYVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRSZXNvdXJjZSwgZ2V0TWVtYmVyUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7IGNvbXB1dGVkLCByZWFjdGl2ZSB9IGZyb20gJ3Z1ZSdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbRW1pdHRlck1peGluXSxcblxuICBpbmplY3Q6IFtcbiAgICAnYXBpJyxcbiAgICAnJHZlcmJzJyxcbiAgICAnJHZpZXdzJyxcbiAgICAnJGlzUG9wdWxhdGVkJyxcbiAgICAnJHBhcmVudENvbXBvbmVudCcsXG4gICAgJyRzY2hlbWFDb21wb25lbnQnLFxuICAgICckcm91dGVDb21wb25lbnQnLFxuICAgICckZGF0YUNvbXBvbmVudCcsXG4gICAgJyRzb3VyY2VDb21wb25lbnQnLFxuICAgICckcmVzb3VyY2VDb21wb25lbnQnLFxuICAgICckZGlhbG9nQ29tcG9uZW50JyxcbiAgICAnJHBhbmVsQ29tcG9uZW50JyxcbiAgICAnJHRhYkNvbXBvbmVudCdcbiAgXSxcblxuICBwcm92aWRlKCkge1xuICAgIGNvbnN0IHNlbGYgPSAoKSA9PiB0aGlzXG4gICAgcmV0dXJuIHRoaXMucHJvdmlkZXNEYXRhXG4gICAgICA/IHtcbiAgICAgICAgICAkcGFyZW50Q29tcG9uZW50OiBzZWxmLFxuICAgICAgICAgICRkYXRhQ29tcG9uZW50OiBzZWxmXG4gICAgICAgIH1cbiAgICAgIDoge1xuICAgICAgICAgICRwYXJlbnRDb21wb25lbnQ6IHNlbGZcbiAgICAgICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFwcFN0YXRlLFxuICAgICAgaXNNb3VudGVkOiBmYWxzZSxcbiAgICAgIG92ZXJyaWRlczogbnVsbCAvLyBTZWUgYWNjZXNzb3IuanNcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICAvLyBOT1RFOiBUaGlzIGlzIG92ZXJyaWRkZW4gaW4gUmVzb3VyY2VNaXhpbiwgdXNlZCBieSBsaXN0cy5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBzb3VyY2VTY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXRhPy5zY2hlbWFcbiAgICB9LFxuXG4gICAgdXNlcigpIHtcbiAgICAgIHJldHVybiBhcHBTdGF0ZS51c2VyXG4gICAgfSxcblxuICAgIC8vICR2ZXJicywgJHZlcmJzIGFuZCAkaXNQb3B1bGF0ZWQgYXJlIGRlZmluZWQgYXMgZnVuY3Rpb25zLCB0byBwcmVzZXJ2ZVxuICAgIC8vIHJlYWN0aXZlbmVzcyBhY3Jvc3MgcHJvdmlkZS9pbmplY3QuXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlL2lzc3Vlcy83MDE3I2lzc3VlY29tbWVudC00ODA5MDY2OTFcbiAgICB2ZXJicygpIHtcbiAgICAgIHJldHVybiB0aGlzLiR2ZXJicygpXG4gICAgfSxcblxuICAgIHZpZXdzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHZpZXdzKClcbiAgICB9LFxuXG4gICAgZmxhdHRlbmVkVmlld3MoKSB7XG4gICAgICByZXR1cm4gZmxhdHRlblZpZXdzKHRoaXMudmlld3MpXG4gICAgfSxcblxuICAgIGlzUG9wdWxhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJGlzUG9wdWxhdGVkKClcbiAgICB9LFxuXG4gICAgbG9jYWxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBpLmxvY2FsZVxuICAgIH0sXG5cbiAgICBjb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG5lc3RlZDogZmFsc2UgfSlcbiAgICB9LFxuXG4gICAgcm9vdENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyb290LiRyZWZzLnJvb3RcbiAgICB9LFxuXG4gICAgLy8gVXNlIGNvbXB1dGVkIHByb3BlcnRpZXMgYXMgbGlua3MgdG8gaW5qZWN0cywgc28gRGl0b1NjaGVtYSBjYW5cbiAgICAvLyBvdmVycmlkZSB0aGUgcHJvcGVydHkgYW5kIHJldHVybiBgdGhpc2AgaW5zdGVhZCBvZiB0aGUgcGFyZW50LlxuICAgIHBhcmVudENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYXJlbnRDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc2NoZW1hQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcm91dGVDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcm91dGVDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBmb3JtQ29tcG9uZW50KCkge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5yb3V0ZUNvbXBvbmVudFxuICAgICAgcmV0dXJuIGNvbXBvbmVudD8uaXNGb3JtID8gY29tcG9uZW50IDogbnVsbFxuICAgIH0sXG5cbiAgICB2aWV3Q29tcG9uZW50KCkge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5yb3V0ZUNvbXBvbmVudFxuICAgICAgcmV0dXJuIGNvbXBvbmVudD8uaXNWaWV3ID8gY29tcG9uZW50IDogbnVsbFxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBmaXJzdCByb3V0ZSBjb21wb25lbnQgaW4gdGhlIGNoYWluIG9mIHBhcmVudHMsIGluY2x1ZGluZ1xuICAgIC8vIHRoaXMgY3VycmVudCBjb21wb25lbnQsIHRoYXQgaXMgbGlua2VkIHRvIGEgcmVzb3VyY2UgKGFuZCB0aHVzIGxvYWRzIGl0c1xuICAgIC8vIG93biBkYXRhIGFuZCBkb2Vzbid0IGhvbGQgbmVzdGVkIGRhdGEpLlxuICAgIGRhdGFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm92aWRlc0RhdGEgPyB0aGlzIDogdGhpcy4kZGF0YUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzb3VyY2VDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZXNvdXJjZUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRkaWFsb2dDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBwYW5lbENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYW5lbENvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiR0YWJDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBwYXJlbnRTY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gZ2V0UGFyZW50Q29tcG9uZW50KHRoaXMsICdzY2hlbWFDb21wb25lbnQnKVxuICAgIH0sXG5cbiAgICBwYXJlbnRSb3V0ZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiBnZXRQYXJlbnRDb21wb25lbnQodGhpcywgJ3JvdXRlQ29tcG9uZW50JylcbiAgICB9LFxuXG4gICAgcGFyZW50Rm9ybUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiBnZXRQYXJlbnRDb21wb25lbnQodGhpcywgJ2Zvcm1Db21wb25lbnQnKVxuICAgIH0sXG5cbiAgICBwYXJlbnRSZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiBnZXRQYXJlbnRDb21wb25lbnQodGhpcywgJ3Jlc291cmNlQ29tcG9uZW50JylcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgZGF0YSBvZiB0aGUgZmlyc3Qgcm91dGUgY29tcG9uZW50IGluIHRoZSBjaGFpbiBvZiBwYXJlbnRzXG4gICAgLy8gdGhhdCBsb2FkcyBpdHMgb3duIGRhdGEgZnJvbSBhbiBhc3NvY2lhdGVkIEFQSSByZXNvdXJjZS5cbiAgICByb290RGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFDb21wb25lbnQ/LmRhdGFcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLmlzTW91bnRlZCA9IHRydWVcbiAgfSxcblxuICBiZWZvcmVDcmVhdGUoKSB7XG4gICAgY29uc3QgdWlkID0gbmV4dFVpZCsrXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICckdWlkJywgeyBnZXQ6ICgpID0+IHVpZCB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBsYWJlbGl6ZSxcblxuICAgIC8vIFRoZSBzdGF0ZSBvZiBjb21wb25lbnRzIGlzIG9ubHkgYXZhaWxhYmxlIGR1cmluZyB0aGUgbGlmZS1jeWNsZSBvZiBhXG4gICAgLy8gY29tcG9uZW50LiBTb21lIGluZm9ybWF0aW9uIHdlIG5lZWQgYXZhaWxhYmxlIGxvbmdlciB0aGFuIHRoYXQsIGUuZy5cbiAgICAvLyBgcXVlcnlgICYgYHRvdGFsYCBvbiBUeXBlTGlzdCwgc28gdGhhdCB3aGVuIHRoZSB1c2VyIG5hdmlnYXRlcyBiYWNrIGZyb21cbiAgICAvLyBlZGl0aW5nIGFuIGl0ZW0gaW4gdGhlIGxpc3QsIHRoZSBzdGF0ZSBvZiB0aGUgbGlzdCBpcyBzdGlsbCB0aGUgc2FtZS5cbiAgICAvLyBXZSBjYW4ndCBzdG9yZSB0aGlzIGluIGBkYXRhYCwgYXMgdGhpcyBpcyBhbHJlYWR5IHRoZSBwdXJlIGRhdGEgZnJvbSB0aGVcbiAgICAvLyBBUEkgc2VydmVyLiBUaGF0J3Mgd2hhdCB0aGUgYHN0b3JlYCBpcyBmb3I6IE1lbW9yeSB0aGF0J3MgYXZhaWxhYmxlIGFzXG4gICAgLy8gbG9uZyBhcyB0aGUgY3VycmVudCBlZGl0aW5nIHBhdGggaXMgc3RpbGwgdmFsaWQuIEZvciB0eXBlIGNvbXBvbmVudHMsXG4gICAgLy8gdGhpcyBtZW1vcnkgaXMgcHJvdmlkZWQgYnkgdGhlIHBhcmVudCwgc2VlIFJvdXRlTWl4aW4gYW5kIERpdG9QYW5lLlxuICAgIGdldFN0b3JlKGtleSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RvcmVba2V5XVxuICAgIH0sXG5cbiAgICBzZXRTdG9yZShrZXksIHZhbHVlKSB7XG4gICAgICB0aGlzLnN0b3JlW2tleV0gPSB2YWx1ZVxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfSxcblxuICAgIHJlbW92ZVN0b3JlKGtleSkge1xuICAgICAgZGVsZXRlIHRoaXMuc3RvcmVba2V5XVxuICAgIH0sXG5cbiAgICBnZXRTdG9yZUtleUJ5SW5kZXgoaW5kZXgpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0b3JlLiRrZXlzQnlJbmRleD8uW2luZGV4XVxuICAgIH0sXG5cbiAgICBzZXRTdG9yZUtleUJ5SW5kZXgoaW5kZXgsIGtleSkge1xuICAgICAgdGhpcy5zdG9yZS4ka2V5c0J5SW5kZXggPz89IHt9XG4gICAgICB0aGlzLnN0b3JlLiRrZXlzQnlJbmRleFtpbmRleF0gPSBrZXlcbiAgICB9LFxuXG4gICAgZ2V0Q2hpbGRTdG9yZShrZXksIGluZGV4KSB7XG4gICAgICBsZXQgc3RvcmUgPSB0aGlzLmdldFN0b3JlKGtleSlcbiAgICAgIGlmICghc3RvcmUgJiYgaW5kZXggIT0gbnVsbCkge1xuICAgICAgICAvLyBXaGVuIHN0b3JpbmcsIHRlbXBvcmFyeSBpZHMgY2hhbmdlIHRvIHBlcm1hbmVudCBvbmVzIGFuZCB0aHVzIHRoZSBrZXlcbiAgICAgICAgLy8gY2FuIGNoYW5nZS4gVG8gc3RpbGwgZmluZCB0aGUgc3RvcmUsIHdlIHJlZmVyZW5jZSBieSBpbmRleCBhcyB3ZWxsLFxuICAgICAgICAvLyB0byBiZSBhYmxlIHRvIGZpbmQgdGhlIHN0b3JlIGFnYWluIGFmdGVyIHRoZSBpdGVtIHdhcyBzYXZlZC5cbiAgICAgICAgY29uc3Qgb2xkS2V5ID0gdGhpcy5nZXRTdG9yZUtleUJ5SW5kZXgoaW5kZXgpXG4gICAgICAgIHN0b3JlID0gdGhpcy5nZXRTdG9yZShvbGRLZXkpXG4gICAgICAgIGlmIChzdG9yZSkge1xuICAgICAgICAgIHRoaXMuc2V0U3RvcmUoa2V5LCBzdG9yZSlcbiAgICAgICAgICB0aGlzLnJlbW92ZVN0b3JlKG9sZEtleSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFzdG9yZSkge1xuICAgICAgICBzdG9yZSA9IHRoaXMuc2V0U3RvcmUoa2V5LCByZWFjdGl2ZSh7fSkpXG4gICAgICB9XG4gICAgICBpZiAoaW5kZXggIT0gbnVsbCkge1xuICAgICAgICAvLyB0ZW1wb3JhcnkgdWlkIGtleXMgd2lsbCBjaGFuZ2UgYmV0d2VlbiBwZXJzaXN0ZW5jZSwgc28gd2UgbmVlZCB0b1xuICAgICAgICAvLyBhc3NpZ24gdGhlIGtleSB0byB0aGUgaW5kZXggZXZlbiB3aGVuIHRoZSBzdG9yZSBhbHJlYWR5IGV4aXN0ZWQuXG4gICAgICAgIHRoaXMuc2V0U3RvcmVLZXlCeUluZGV4KGluZGV4LCBrZXkpXG4gICAgICB9XG4gICAgICByZXR1cm4gc3RvcmVcbiAgICB9LFxuXG4gICAgcmVtb3ZlQ2hpbGRTdG9yZShrZXksIGluZGV4KSB7XG4gICAgICAvLyBHRXQgdGhlIGNoaWxkLXN0b3JlIGZpcnN0LCBzbyB0aGF0IGluZGljZXMgY2FuIGJlIHRyYW5zZmVycmVkIG92ZXJcbiAgICAgIC8vIHRlbXBvcmFyeSBpZCBjaGFuZ2VzIGR1cmluZyBwZXJzaXN0ZW5jZS5cbiAgICAgIHRoaXMuZ2V0Q2hpbGRTdG9yZShrZXksIGluZGV4KVxuICAgICAgdGhpcy5yZW1vdmVTdG9yZShrZXkpXG4gICAgfSxcblxuICAgIGdldFNjaGVtYVZhbHVlKFxuICAgICAga2V5T3JEYXRhUGF0aCxcbiAgICAgIHtcbiAgICAgICAgdHlwZSxcbiAgICAgICAgZGVmYXVsdDogZGVmLFxuICAgICAgICBzY2hlbWEgPSB0aGlzLnNjaGVtYSxcbiAgICAgICAgY29udGV4dCA9IHRoaXMuY29udGV4dCxcbiAgICAgICAgY2FsbGJhY2sgPSB0cnVlXG4gICAgICB9ID0ge31cbiAgICApIHtcbiAgICAgIHJldHVybiBnZXRTY2hlbWFWYWx1ZShrZXlPckRhdGFQYXRoLCB7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgY2FsbGJhY2ssXG4gICAgICAgIGRlZmF1bHQ6IGlzRnVuY3Rpb24oZGVmKSA/ICgpID0+IGRlZi5jYWxsKHRoaXMpIDogZGVmXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRMYWJlbChzY2hlbWEsIG5hbWUpIHtcbiAgICAgIHJldHVybiBzY2hlbWFcbiAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCdsYWJlbCcsIHsgc2NoZW1hLCB0eXBlOiBbU3RyaW5nLCBPYmplY3RdIH0pIHx8XG4gICAgICAgICAgbGFiZWxpemUobmFtZSB8fCBzY2hlbWEubmFtZSlcbiAgICAgICAgOiBsYWJlbGl6ZShuYW1lKSB8fCAnJ1xuICAgIH0sXG5cbiAgICBnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNsYXNzOiBgZGl0by1idXR0b24tJHt2ZXJifWAsXG4gICAgICAgIHRpdGxlOiBsYWJlbGl6ZSh2ZXJiKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBSZW5hbWUgKkxpbmsoKSB0byAqUm91dGUoKS5cbiAgICBnZXRRdWVyeUxpbmsocXVlcnkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICAvLyBQcmVzZXJ2ZSBoYXNoIGZvciB0YWJzOlxuICAgICAgICBoYXNoOiB0aGlzLiRyb3V0ZS5oYXNoXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNob3VsZFJlbmRlclNjaGVtYShzY2hlbWEgPSBudWxsKSB7XG4gICAgICByZXR1cm4gc2hvdWxkUmVuZGVyU2NoZW1hKHNjaGVtYSwgdGhpcy5jb250ZXh0KVxuICAgIH0sXG5cbiAgICBzaG91bGRTaG93U2NoZW1hKHNjaGVtYSA9IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFNjaGVtYVZhbHVlKCd2aXNpYmxlJywge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICBzY2hlbWFcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHNob3VsZERpc2FibGVTY2hlbWEoc2NoZW1hID0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2Rpc2FibGVkJywge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgc2NoZW1hXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRSZXNvdXJjZVBhdGgocmVzb3VyY2UpIHtcbiAgICAgIHJlc291cmNlID0gZ2V0UmVzb3VyY2UocmVzb3VyY2UsIHtcbiAgICAgICAgLy8gUmVzb3VyY2VzIHdpdGhvdXQgYSBwYXJlbnQgaW5oZXJpdCB0aGUgb25lIGZyb20gYGRhdGFDb21wb25lbnRgXG4gICAgICAgIC8vIGF1dG9tYXRpY2FsbHkuXG4gICAgICAgIHBhcmVudDogdGhpcy5kYXRhQ29tcG9uZW50Py5nZXRSZXNvdXJjZSh7XG4gICAgICAgICAgbWV0aG9kOiByZXNvdXJjZT8ubWV0aG9kLFxuICAgICAgICAgIGNoaWxkOiByZXNvdXJjZVxuICAgICAgICB9KSA/PyBudWxsXG4gICAgICB9KVxuICAgICAgcmV0dXJuIHRoaXMuYXBpLnJlc291cmNlcy5hbnkocmVzb3VyY2UpXG4gICAgfSxcblxuICAgIGdldFJlc291cmNlVXJsKHJlc291cmNlKSB7XG4gICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFJlc291cmNlUGF0aChyZXNvdXJjZSlcbiAgICAgIHJldHVybiB1cmwgPyB0aGlzLmFwaS5nZXRBcGlVcmwoeyB1cmwsIHF1ZXJ5OiByZXNvdXJjZS5xdWVyeSB9KSA6IG51bGxcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZFJlcXVlc3Qoe1xuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgcmVzb3VyY2UsXG4gICAgICBxdWVyeSxcbiAgICAgIGRhdGEsXG4gICAgICBzaWduYWwsXG4gICAgICBpbnRlcm5hbFxuICAgIH0pIHtcbiAgICAgIHVybCB8fD0gdGhpcy5nZXRSZXNvdXJjZVVybChyZXNvdXJjZSlcbiAgICAgIG1ldGhvZCB8fD0gcmVzb3VyY2U/Lm1ldGhvZFxuICAgICAgY29uc3QgY2hlY2tVc2VyID0gIWludGVybmFsICYmIHRoaXMuYXBpLmlzQXBpVXJsKHVybClcbiAgICAgIGlmIChjaGVja1VzZXIpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yb290Q29tcG9uZW50LmVuc3VyZVVzZXIoKVxuICAgICAgfVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmFwaS5yZXF1ZXN0KHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICB1cmwsXG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICBkYXRhLFxuICAgICAgICBzaWduYWxcbiAgICAgIH0pXG4gICAgICAvLyBEZXRlY3QgY2hhbmdlIG9mIHRoZSBvd24gdXNlciwgYW5kIGZldGNoIGl0IGFnYWluIGlmIGl0IHdhcyBjaGFuZ2VkLlxuICAgICAgaWYgKFxuICAgICAgICBjaGVja1VzZXIgJiZcbiAgICAgICAgbWV0aG9kID09PSAncGF0Y2gnICYmXG4gICAgICAgIGVxdWFscyhyZXNvdXJjZSwgZ2V0TWVtYmVyUmVzb3VyY2UodGhpcy51c2VyLmlkLCB0aGlzLmFwaS51c2VycykpXG4gICAgICApIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yb290Q29tcG9uZW50LmZldGNoVXNlcigpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICB9LFxuXG4gICAgc2hvd0RpYWxvZyh7IGNvbXBvbmVudHMsIGJ1dHRvbnMsIGRhdGEsIHNldHRpbmdzIH0pIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3RDb21wb25lbnQuc2hvd0RpYWxvZyh7XG4gICAgICAgIGNvbXBvbmVudHMsXG4gICAgICAgIGJ1dHRvbnMsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIHNldHRpbmdzXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICByZXF1ZXN0KHsgY2FjaGUsIC4uLm9wdGlvbnMgfSkge1xuICAgICAgLy8gQWxsb3cgY2FjaGluZyBvZiBsb2FkZWQgZGF0YSBvbiB0d28gbGV2ZWxzOlxuICAgICAgLy8gLSAnZ2xvYmFsJzogY2FjaGUgZ2xvYmFsbHksIGZvciB0aGUgZW50aXJlIGFkbWluIHNlc3Npb25cbiAgICAgIC8vIC0gJ2xvY2FsJzogY2FjaGUgbG9jYWxseSB3aXRoaW4gdGhlIGNsb3Nlc3Qgcm91dGUgY29tcG9uZW50IHRoYXQgaXNcbiAgICAgIC8vICAgIGFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlIGFuZCBsb2FkcyBpdHMgb3duIGRhdGEuXG4gICAgICBjb25zdCBjYWNoZVBhcmVudCA9IChcbiAgICAgICAgY2FjaGUgJiZcbiAgICAgICAge1xuICAgICAgICAgIGdsb2JhbDogdGhpcy5hcHBTdGF0ZSxcbiAgICAgICAgICBsb2NhbDogdGhpcy5kYXRhQ29tcG9uZW50XG4gICAgICAgIH1bY2FjaGVdXG4gICAgICApXG4gICAgICBjb25zdCBsb2FkQ2FjaGUgPSBjYWNoZVBhcmVudD8ubG9hZENhY2hlXG4gICAgICAvLyBCdWlsZCBhIGNhY2hlIGtleSBmcm9tIHRoZSBjb25maWc6XG4gICAgICBjb25zdCBjYWNoZUtleSA9IChcbiAgICAgICAgbG9hZENhY2hlICYmXG4gICAgICAgIGAke1xuICAgICAgICAgIG9wdGlvbnMubWV0aG9kIHx8ICdnZXQnXG4gICAgICAgIH0gJHtcbiAgICAgICAgICBvcHRpb25zLnVybFxuICAgICAgICB9ICR7XG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5xdWVyeSB8fCAnJylcbiAgICAgICAgfSAke1xuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMuZGF0YSB8fCAnJylcbiAgICAgICAgfWBcbiAgICAgIClcbiAgICAgIGlmIChsb2FkQ2FjaGUgJiYgKGNhY2hlS2V5IGluIGxvYWRDYWNoZSkpIHtcbiAgICAgICAgcmV0dXJuIGxvYWRDYWNoZVtjYWNoZUtleV1cbiAgICAgIH1cbiAgICAgIC8vIE5PVEU6IE5vIGF3YWl0IGhlcmUsIHJlcyBpcyBhIHByb21pc2UgdGhhdCB3ZSBjYW4gZWFzaWx5IGNhY2hlLlxuICAgICAgLy8gVGhhdCdzIGZpbmUgYmVjYXVzZSBwcm9taXNlcyBjYW4gYmUgcmVzb2x2ZWQgb3ZlciBhbmQgb3ZlciBhZ2Fpbi5cbiAgICAgIGNvbnN0IHJlcyA9IHRoaXMuc2VuZFJlcXVlc3Qob3B0aW9ucylcbiAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2UuZGF0YSlcbiAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAvLyBDb252ZXJ0IGF4aW9zIGVycm9ycyB0byBub3JtYWwgZXJyb3JzXG4gICAgICAgICAgY29uc3QgZGF0YSA9IGVycm9yLnJlc3BvbnNlPy5kYXRhXG4gICAgICAgICAgdGhyb3cgZGF0YVxuICAgICAgICAgICAgPyBPYmplY3QuYXNzaWduKG5ldyBFcnJvcihkYXRhLm1lc3NhZ2UpLCBkYXRhKVxuICAgICAgICAgICAgOiBlcnJvclxuICAgICAgICB9KVxuICAgICAgaWYgKGxvYWRDYWNoZSkge1xuICAgICAgICBsb2FkQ2FjaGVbY2FjaGVLZXldID0gcmVzXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzXG4gICAgfSxcblxuICAgIGZvcm1hdCh2YWx1ZSwge1xuICAgICAgbG9jYWxlID0gdGhpcy5hcGkubG9jYWxlLFxuICAgICAgZGVmYXVsdHMgPSB0aGlzLmFwaS5mb3JtYXRzLFxuICAgICAgLi4ub3B0aW9uc1xuICAgIH0gPSB7fSkge1xuICAgICAgcmV0dXJuIGZvcm1hdCh2YWx1ZSwge1xuICAgICAgICBsb2NhbGUsXG4gICAgICAgIGRlZmF1bHRzLFxuICAgICAgICAuLi5vcHRpb25zXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBuYXZpZ2F0ZShsb2NhdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlci5wdXNoKGxvY2F0aW9uKVxuICAgIH0sXG5cbiAgICBkb3dubG9hZChvcHRpb25zID0ge30pIHtcbiAgICAgIGlmIChpc1N0cmluZyhvcHRpb25zKSkge1xuICAgICAgICBvcHRpb25zID0geyB1cmw6IG9wdGlvbnMgfVxuICAgICAgfVxuICAgICAgLy8gU2VlOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDk5MTcwNjYvMTE2MzcwOFxuICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgICAgYS5ocmVmID0gb3B0aW9ucy51cmw/LnN0YXJ0c1dpdGgoJ2Jsb2I6JylcbiAgICAgICAgPyBvcHRpb25zLnVybFxuICAgICAgICA6IHRoaXMuYXBpLmdldEFwaVVybChvcHRpb25zKVxuICAgICAgYS5kb3dubG9hZCA9IG9wdGlvbnMuZmlsZW5hbWUgPz8gbnVsbFxuICAgICAgY29uc3QgeyBib2R5IH0gPSBkb2N1bWVudFxuICAgICAgYm9keS5hcHBlbmRDaGlsZChhKVxuICAgICAgYS5jbGljaygpXG4gICAgICBib2R5LnJlbW92ZUNoaWxkKGEpXG4gICAgfSxcblxuICAgIG5vdGlmeShvcHRpb25zKSB7XG4gICAgICB0aGlzLnJvb3RDb21wb25lbnQubm90aWZ5KG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGNsb3NlTm90aWZpY2F0aW9ucygpIHtcbiAgICAgIHRoaXMucm9vdENvbXBvbmVudC5jbG9zZU5vdGlmaWNhdGlvbnMoKVxuICAgIH0sXG5cbiAgICBzZXR1cFNjaGVtYUZpZWxkcygpIHtcbiAgICAgIHRoaXMuc2V0dXBNZXRob2RzKClcbiAgICAgIHRoaXMuc2V0dXBDb21wdXRlZCgpXG4gICAgICB0aGlzLnNldHVwRXZlbnRzKClcbiAgICB9LFxuXG4gICAgc2V0dXBNZXRob2RzKCkge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEubWV0aG9kcyB8fCB7fSkpIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgICAgdGhpc1trZXldID0gdmFsdWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIG1ldGhvZCBkZWZpbml0aW9uOiAke2tleX06ICR7dmFsdWV9YClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXR1cENvbXB1dGVkKCkge1xuICAgICAgY29uc3QgZ2V0Q29tcHV0ZWRBY2Nlc3NvciA9ICh7IGdldCwgc2V0IH0pID0+IHtcbiAgICAgICAgY29uc3QgZ2V0dGVyID0gY29tcHV0ZWQoKCkgPT4gZ2V0LmNhbGwodGhpcykpXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZ2V0OiAoKSA9PiBnZXR0ZXIudmFsdWUsXG4gICAgICAgICAgc2V0OiBzZXQgPyB2YWx1ZSA9PiBzZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIGl0ZW1dIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hLmNvbXB1dGVkIHx8IHt9KSkge1xuICAgICAgICBjb25zdCBhY2Nlc3NvciA9IGlzRnVuY3Rpb24oaXRlbSlcbiAgICAgICAgICA/IGdldENvbXB1dGVkQWNjZXNzb3IoeyBnZXQ6IGl0ZW0gfSlcbiAgICAgICAgICA6IGlzT2JqZWN0KGl0ZW0pICYmIGlzRnVuY3Rpb24oaXRlbS5nZXQpXG4gICAgICAgICAgICA/IGdldENvbXB1dGVkQWNjZXNzb3IoaXRlbSlcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICBpZiAoYWNjZXNzb3IpIHtcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywga2V5LCBhY2Nlc3NvcilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgYEludmFsaWQgY29tcHV0ZWQgcHJvcGVydHkgZGVmaW5pdGlvbjogJHtrZXl9OiAke2l0ZW19YFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXR1cEV2ZW50cygpIHtcbiAgICAgIGNvbnN0IHsgd2F0Y2gsIGV2ZW50cyB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIGlmICh3YXRjaCkge1xuICAgICAgICBjb25zdCBoYW5kbGVycyA9IGlzRnVuY3Rpb24od2F0Y2gpID8gd2F0Y2guY2FsbCh0aGlzKSA6IHdhdGNoXG4gICAgICAgIGlmIChpc09iamVjdChoYW5kbGVycykpIHtcbiAgICAgICAgICAvLyBJbnN0YWxsIHRoZSB3YXRjaCBoYW5kbGVycyBpbiB0aGUgbmV4dCB0aWNrLCBzbyBhbGwgY29tcG9uZW50cyBhcmVcbiAgICAgICAgICAvLyBpbml0aWFsaXplZCBhbmQgd2UgY2FuIGNoZWNrIGFnYWluc3QgdGhlaXIgbmFtZXMuXG4gICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCBjYWxsYmFja10gb2YgT2JqZWN0LmVudHJpZXMoaGFuZGxlcnMpKSB7XG4gICAgICAgICAgICAgIC8vIEV4cGFuZCBwcm9wZXJ0eSBuYW1lcyB0byAnZGF0YS5wcm9wZXJ0eSc6XG4gICAgICAgICAgICAgIGNvbnN0IGV4cHIgPSB0aGlzLnNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRCeU5hbWUoa2V5KVxuICAgICAgICAgICAgICAgID8gYGRhdGEuJHtrZXl9YFxuICAgICAgICAgICAgICAgIDoga2V5XG4gICAgICAgICAgICAgIHRoaXMuJHdhdGNoKGV4cHIsIGNhbGxiYWNrKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgYWRkRXZlbnQgPSAoa2V5LCBldmVudCwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG4gICAgICAgICAgdGhpcy5vbihoeXBoZW5hdGUoZXZlbnQpLCBjYWxsYmFjaylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIGV2ZW50IGRlZmluaXRpb246ICR7a2V5fTogJHtjYWxsYmFja31gKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudHMpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZXZlbnRzKSkge1xuICAgICAgICAgIGFkZEV2ZW50KGtleSwga2V5LCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gQWxzbyBzY2FuIHNjaGVtYSBmb3IgYG9uW0EtWl1gLXN0eWxlIGNhbGxiYWNrcyBhbmQgYWRkIHRoZW1cbiAgICAgIC8vIFRPRE86IERlcHJlY2F0ZSBvbmUgZm9ybWF0IG9yIHRoZSBvdGhlciwgaW4gZmF2b3VyIG9mIG9ubHkgb25lIHdheSBvZlxuICAgICAgLy8gZG9pbmcgdGhpbmdzLiBEZWNpZGUgd2hpY2ggb25lIHRvIHJlbW92ZS5cbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hKSkge1xuICAgICAgICBpZiAoL15vbltBLVpdLy50ZXN0KGtleSkpIHtcbiAgICAgICAgICBhZGRFdmVudChrZXksIGtleS5zbGljZSgyKSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZW1pdEV2ZW50KGV2ZW50LCB7XG4gICAgICBjb250ZXh0ID0gbnVsbCxcbiAgICAgIHBhcmVudCA9IG51bGxcbiAgICB9ID0ge30pIHtcbiAgICAgIGNvbnN0IGhhc0xpc3RlbmVycyA9IHRoaXMuaGFzTGlzdGVuZXJzKGV2ZW50KVxuICAgICAgY29uc3QgcGFyZW50SGFzTGlzdGVuZXJzID0gcGFyZW50Py5oYXNMaXN0ZW5lcnMoZXZlbnQpXG4gICAgICBpZiAoaGFzTGlzdGVuZXJzIHx8IHBhcmVudEhhc0xpc3RlbmVycykge1xuICAgICAgICBjb25zdCBlbWl0RXZlbnQgPSB0YXJnZXQgPT5cbiAgICAgICAgICB0YXJnZXQuZW1pdChldmVudCwgKGNvbnRleHQgPSBEaXRvQ29udGV4dC5nZXQodGhpcywgY29udGV4dCkpKVxuXG4gICAgICAgIGNvbnN0IGhhbmRsZVBhcmVudExpc3RlbmVycyA9IHJlc3VsdCA9PlxuICAgICAgICAgIC8vIERvbid0IGJ1YmJsZSB0byBwYXJlbnQgaWYgaGFuZGxlZCBldmVudCByZXR1cm5lZCBgZmFsc2VgXG4gICAgICAgICAgcGFyZW50SGFzTGlzdGVuZXJzICYmIHJlc3VsdCAhPT0gZmFsc2VcbiAgICAgICAgICAgID8gZW1pdEV2ZW50KHBhcmVudCkudGhlbigoKSA9PiByZXN1bHQpXG4gICAgICAgICAgICA6IHJlc3VsdFxuXG4gICAgICAgIGNvbnN0IGhhbmRsZUxpc3RlbmVycyA9ICgpID0+XG4gICAgICAgICAgaGFzTGlzdGVuZXJzXG4gICAgICAgICAgICA/IGVtaXRFdmVudCh0aGlzKS50aGVuKGhhbmRsZVBhcmVudExpc3RlbmVycylcbiAgICAgICAgICAgIDogaGFuZGxlUGFyZW50TGlzdGVuZXJzKHVuZGVmaW5lZClcblxuICAgICAgICByZXR1cm4gWydsb2FkJywgJ2NoYW5nZSddLmluY2x1ZGVzKGV2ZW50KVxuICAgICAgICAgID8gLy8gVGhlIGVmZmVjdHMgb2Ygc29tZSBldmVudHMgbmVlZCB0aW1lIHRvIHByb3BhZ2F0ZSB0aHJvdWdoIFZ1ZS5cbiAgICAgICAgICAgIC8vIFVzZSAkbmV4dFRpY2soKSB0byBtYWtlIHN1cmUgb3VyIGhhbmRsZXJzIHNlZSB0aGVzZSBjaGFuZ2VzLlxuICAgICAgICAgICAgLy8gRm9yIGV4YW1wbGUsIGBwcm9jZXNzZWRJdGVtYCBpcyBvbmx5IGNvcnJlY3QgYWZ0ZXIgY29tcG9uZW50c1xuICAgICAgICAgICAgLy8gdGhhdCBhcmUgbmV3bHkgcmVuZGVyZWQgZHVlIHRvIGRhdGEgY2hhbmdlcyBoYXZlIHJlZ2lzdGVyZWQuXG4gICAgICAgICAgICAvLyBOT1RFOiBUaGUgcmVzdWx0IG9mIGBoYW5kbGVMaXN0ZW5lcnMoKWAgbWFrZXMgaXQgdGhyb3VnaCB0aGVcbiAgICAgICAgICAgIC8vIGAkbmV4dFRpY2soKWAgY2FsbCBhbmQgd2lsbCBiZSByZXR1cm5lZCBhcyBleHBlY3RlZC5cbiAgICAgICAgICAgIHRoaXMuJG5leHRUaWNrKGhhbmRsZUxpc3RlbmVycylcbiAgICAgICAgICA6IGhhbmRsZUxpc3RlbmVycygpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGVtaXRTY2hlbWFFdmVudChldmVudCwgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnQuZW1pdEV2ZW50KGV2ZW50LCBwYXJhbXMpXG4gICAgfVxuICB9XG59XG5cbmxldCBuZXh0VWlkID0gMFxuXG5mdW5jdGlvbiBnZXRQYXJlbnRDb21wb25lbnQoY29tcG9uZW50LCBrZXkpIHtcbiAgY29uc3QgY3VycmVudCA9IGNvbXBvbmVudFtrZXldXG4gIGxldCBwYXJlbnQgPSBjb21wb25lbnQucGFyZW50Q29tcG9uZW50XG4gIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50W2tleV0gPT09IGN1cnJlbnQpIHtcbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Q29tcG9uZW50XG4gIH1cbiAgcmV0dXJuIHBhcmVudD8uW2tleV0gPz8gbnVsbFxufVxuIiwiLy8gQSBtaW5pLXJlcGxpY2F0aW9uIG9mIHZ1ZSdzIGludGVybmFsIGByZXNvbHZlTWVyZ2VkT3B0aW9ucygpYCBidXQgb25seVxuLy8gaGFuZGxpbmcgb3VyIG93biBhZGRlZCBvcHRpb25zIHByb3BlcnRpZXMgYW5kIG1lcmdpbmcgdGhlbSBlYXJseSBpbnN0ZWFkXG4vLyBvZiBsYXppbHkuXG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlTWVyZ2VkT3B0aW9ucyhvcHRpb25zKSB7XG4gIGNvbnN0IHsgbWl4aW5zIH0gPSBvcHRpb25zXG4gIHJldHVybiBtaXhpbnMgfHwgb3B0aW9ucy5leHRlbmRzXG4gICAgPyBtZXJnZU9wdGlvbnMoXG4gICAgICAgIHsgLi4ub3B0aW9ucyB9LFxuICAgICAgICBvcHRpb25zXG4gICAgICApXG4gICAgOiBvcHRpb25zXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZU9wdGlvbnModG8sIGZyb20pIHtcbiAgaWYgKGZyb20uZXh0ZW5kcykge1xuICAgIG1lcmdlT3B0aW9ucyh0bywgZnJvbS5leHRlbmRzKVxuICB9XG4gIGlmIChmcm9tLm1peGlucykge1xuICAgIGZvciAoY29uc3QgbWl4aW4gb2YgZnJvbS5taXhpbnMpIHtcbiAgICAgIG1lcmdlT3B0aW9ucyh0bywgbWl4aW4pXG4gICAgfVxuICB9XG4gIGZvciAoY29uc3Qga2V5IG9mIGRpdG9PcHRpb25LZXlzKSB7XG4gICAgaWYgKGtleSBpbiBmcm9tKSB7XG4gICAgICB0b1trZXldID0gZnJvbVtrZXldXG4gICAgfVxuICB9XG4gIHJldHVybiB0b1xufVxuXG5jb25zdCBkaXRvT3B0aW9uS2V5cyA9IFtcbiAgJ2RlZmF1bHRWYWx1ZScsXG4gICdkZWZhdWx0TmVzdGVkJyxcbiAgJ2RlZmF1bHRWaXNpYmxlJyxcbiAgJ2dlbmVyYXRlTGFiZWwnLFxuICAnZXhjbHVkZVZhbHVlJyxcbiAgJ2lnbm9yZU1pc3NpbmdWYWx1ZScsXG4gICdvbWl0U3BhY2luZycsXG4gICdwcm9jZXNzVmFsdWUnLFxuICAncHJvY2Vzc1NjaGVtYScsXG4gICdnZXRQYW5lbFNjaGVtYScsXG4gICdnZXRGb3JtU2NoZW1hc0ZvclByb2Nlc3NpbmcnLFxuICAvLyBWdWUgMyAvIFZ1ZS1yb3V0ZXIgNCBmb3JnZXRzIHRoZXNlLlxuICAvLyBUT0RPOiBDcmVhdGUgYnVnLXJlcG9ydD9cbiAgJ2JlZm9yZVJvdXRlVXBkYXRlJyxcbiAgJ2JlZm9yZVJvdXRlTGVhdmUnXG5dXG4iLCJpbXBvcnQgRGl0b01peGluIGZyb20gJy4vbWl4aW5zL0RpdG9NaXhpbi5qcydcbmltcG9ydCB7IGdldFR5cGVDb21wb25lbnQgfSBmcm9tICcuL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IHJlc29sdmVNZXJnZWRPcHRpb25zIH0gZnJvbSAnLi91dGlscy9vcHRpb25zLmpzJ1xuaW1wb3J0IHsgaXNQbGFpbk9iamVjdCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmNvbnN0IGNvbXBvbmVudHMgPSB7fVxuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtEaXRvTWl4aW5dLFxuICAvLyBNYWtlIHN1cmUgdGhhdCByZWdpc3RlcmVkIGNvbXBvbmVudHMgYXJlIHByZXNlbnQgaW4gYWxsIERpdG9Db21wb25lbnQuXG4gIGNvbXBvbmVudHMsXG5cbiAgY29tcG9uZW50KG5hbWUsIGRlZmluaXRpb24pIHtcbiAgICBpZiAoZGVmaW5pdGlvbikge1xuICAgICAgaWYgKGlzUGxhaW5PYmplY3QoZGVmaW5pdGlvbikpIHtcbiAgICAgICAgZGVmaW5pdGlvbiA9IHJlc29sdmVNZXJnZWRPcHRpb25zKHtcbiAgICAgICAgICBleHRlbmRzOiB0aGlzLFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgLi4uZGVmaW5pdGlvblxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgY29tcG9uZW50c1tuYW1lXSA9IGRlZmluaXRpb25cbiAgICB9XG4gICAgaWYgKCEobmFtZSBpbiBjb21wb25lbnRzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgXCIke25hbWV9XCIgbm90IHJlZ2lzdGVyZWRgKVxuICAgIH1cbiAgICByZXR1cm4gY29tcG9uZW50c1tuYW1lXVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRUeXBlQ29tcG9uZW50XG4gIH1cbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBkZXNjcmliZURhdGUoZGF0ZSkge1xuICByZXR1cm4ge1xuICAgIHllYXI6IGRhdGU/LmdldEZ1bGxZZWFyKCkgPz8gMCxcbiAgICBtb250aDogZGF0ZT8uZ2V0TW9udGgoKSA/PyAwLFxuICAgIGRheTogZGF0ZT8uZ2V0RGF0ZSgpID8/IDAsXG4gICAgaG91cjogZGF0ZT8uZ2V0SG91cnMoKSA/PyAwLFxuICAgIG1pbnV0ZTogZGF0ZT8uZ2V0TWludXRlcygpID8/IDAsXG4gICAgc2Vjb25kOiBkYXRlPy5nZXRTZWNvbmRzKCkgPz8gMCxcbiAgICBtaWxsaXNlY29uZDogZGF0ZT8uZ2V0TWlsbGlzZWNvbmRzKCkgPz8gMFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbHRlckRhdGUoZGF0ZSwgb3ZlcnJpZGVzID0ge30pIHtcbiAgcmV0dXJuIG5ldyBEYXRlKC4uLk9iamVjdC52YWx1ZXMoeyAuLi5kZXNjcmliZURhdGUoZGF0ZSksIC4uLm92ZXJyaWRlcyB9KSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGF0ZShzdHJpbmcsIHtcbiAgbG9jYWxlID0gJ2VuLVVTJyxcbiAgZGF0ZSA9IHRydWUsXG4gIHRpbWUgPSB0cnVlXG59ID0ge30pIHtcbiAgY29uc3QgdGltZURlZmF1bHQgPSB0aW1lID8gbnVsbCA6IDBcbiAgbGV0IFtcbiAgICBkYXksXG4gICAgc2VwMSxcbiAgICBtb250aCxcbiAgICBzZXAyLFxuICAgIHllYXIsXG4gICAgLFxuICAgIGhvdXIgPSB0aW1lRGVmYXVsdCxcbiAgICAsXG4gICAgbWludXRlID0gdGltZURlZmF1bHQsXG4gICAgLFxuICAgIHNlY29uZCA9IHRpbWVEZWZhdWx0LFxuICAgICxcbiAgICBtaWxsaXNlY29uZCA9IHRpbWVEZWZhdWx0XG4gIF0gPSBnZXREYXRlUGFydHMoc3RyaW5nLCB7IGRhdGUsIHRpbWUgfSlcbiAgaWYgKHllYXIgJiYgeWVhci5sZW5ndGggPj0gNCkge1xuICAgIGlmIChsb2NhbGUgPT09ICdlbi1VUycgJiYgc2VwMSA9PT0gJy8nICYmIHNlcDIgPT09ICcvJykge1xuICAgICAgLy8gQW1lcmljYW4gZm9ybWF0OiBNTS9ERC9ZWVlZXG4gICAgICA7W2RheSwgbW9udGhdID0gW21vbnRoLCBkYXldXG4gICAgfVxuICAgIG1vbnRoID0gZ2V0TW9udGhJbmRleChtb250aCwgeyBsb2NhbGUgfSlcbiAgICBjb25zdCBpc1ZhbGlkVGltZVBhcnQgPSBwYXJ0ID0+IHBhcnQgPT09IG51bGwgfHwgcGFydC5sZW5ndGggPT09IDJcbiAgICBpZiAoXG4gICAgICBtb250aCAhPT0gbnVsbCAmJiAoXG4gICAgICAgICF0aW1lIHx8IChcbiAgICAgICAgICBpc1ZhbGlkVGltZVBhcnQoaG91cikgJiZcbiAgICAgICAgICBpc1ZhbGlkVGltZVBhcnQobWludXRlKSAmJlxuICAgICAgICAgIGlzVmFsaWRUaW1lUGFydChzZWNvbmQpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShcbiAgICAgICAgK3llYXIsXG4gICAgICAgICttb250aCxcbiAgICAgICAgK2RheSxcbiAgICAgICAgK2hvdXIsXG4gICAgICAgICttaW51dGUsXG4gICAgICAgICtzZWNvbmQsXG4gICAgICAgICttaWxsaXNlY29uZFxuICAgICAgKVxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0ZVBhcnRBdFBvc2l0aW9uKHN0cmluZywgcG9zaXRpb24sIHtcbiAgbG9jYWxlID0gJ2VuLVVTJyxcbiAgZGF0ZSA9IHRydWUsXG4gIHRpbWUgPSB0cnVlXG59ID0ge30pIHtcbiAgY29uc3QgcGFydHMgPSBnZXREYXRlUGFydHMoc3RyaW5nLCB7IGRhdGUsIHRpbWUgfSlcblxuICBjb25zdCBnZXRQb3NpdGlvbiA9IChwb3NpdGlvbiwgbGVuZ3RoID0gcGFydHMubGVuZ3RoKSA9PiB7XG4gICAgbGV0IHBvcyA9IDBcbiAgICBsZXQgaW5kZXggPSAwXG4gICAgd2hpbGUgKChwb3NpdGlvbiA9PT0gbnVsbCB8fCBwb3MgPD0gcG9zaXRpb24pICYmIGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBwb3MgKz0gcGFydHNbaW5kZXgrK10/Lmxlbmd0aCA/PyAwXG4gICAgfVxuICAgIHJldHVybiB7IHBvc2l0aW9uOiBwb3MsIGluZGV4IH1cbiAgfVxuXG4gIC8vIFRpbWUgc3RhcnRzIGF0IGluZGV4IDYsIGR1ZSB0byB0aGUgc2VwYXJhdG9yIGFmdGVyIHRoZSBkYXRlLlxuICBjb25zdCBvZmZzZXQgPSAhZGF0ZSA/IGdldFBvc2l0aW9uKG51bGwsIDYpLnBvc2l0aW9uIDogMFxuICBwb3NpdGlvbiArPSBvZmZzZXRcblxuICBsZXQgeyBpbmRleCB9ID0gZ2V0UG9zaXRpb24ocG9zaXRpb24pXG5cbiAgY29uc3QgaXNVUyA9IGxvY2FsZSA9PT0gJ2VuLVVTJ1xuICBjb25zdCB2YWx1ZXMgPSBbXG4gICAgaXNVUyA/ICdtb250aCcgOiAnZGF5JyxcbiAgICBudWxsLFxuICAgIGlzVVMgPyAnZGF5JyA6ICdtb250aCcsXG4gICAgbnVsbCxcbiAgICAneWVhcicsXG4gICAgbnVsbCxcbiAgICAnaG91cicsXG4gICAgbnVsbCxcbiAgICAnbWludXRlJyxcbiAgICBudWxsLFxuICAgICdzZWNvbmQnLFxuICAgIG51bGwsXG4gICAgJ21pbGxpc2Vjb25kJ1xuICBdXG4gIHdoaWxlIChpbmRleC0tKSB7XG4gICAgaWYgKHZhbHVlc1tpbmRleF0pIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gZ2V0UG9zaXRpb24obnVsbCwgaW5kZXgpLnBvc2l0aW9uIC0gb2Zmc2V0XG4gICAgICBjb25zdCBlbmQgPSBzdGFydCArIHBhcnRzW2luZGV4XS5sZW5ndGhcbiAgICAgIHJldHVybiB7IG5hbWU6IHZhbHVlc1tpbmRleF0sIHN0YXJ0LCBlbmQgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5mdW5jdGlvbiBnZXREYXRlUGFydHMoc3RyaW5nLCB7IGRhdGUgPSB0cnVlLCB0aW1lID0gdHJ1ZSB9ID0ge30pIHtcbiAgY29uc3QgcGFydHMgPSBzdHJpbmc/LnNwbGl0KC8oW1xccy4sOi9dKykvKSB8fCBbXVxuICBpZiAoIWRhdGUpIHtcbiAgICAvLyBBZGQgZHVtbXkgZGF0ZSBwYXJ0cyB0byBtYWtlIHN1cmUgd2UgZ2V0IGEgdGltZS1vbmx5IGRhdGUuXG4gICAgcGFydHMudW5zaGlmdCgnMScsICcuJywgJzEnLCAnLicsICcyMDAwJywgJyAnKVxuICB9XG4gIGlmICghdGltZSAmJiBwYXJ0cy5sZW5ndGggPiA1KSB7XG4gICAgcGFydHMubGVuZ3RoID0gNVxuICB9XG4gIHJldHVybiBwYXJ0c1xufVxuXG5mdW5jdGlvbiBnZXRNb250aEluZGV4KG1vbnRoLCB7IGxvY2FsZSA9ICdlbi1VUycgfSA9IHt9KSB7XG4gIGNvbnN0IHZhbHVlID0gK21vbnRoXG4gIGlmICghaXNOYU4odmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlIC0gMVxuICB9XG4gIGNvbnN0IG1hdGNoID0gbW9udGgudHJpbSgpLnRvTG93ZXJDYXNlKClcbiAgaWYgKG1hdGNoLmxlbmd0aCA8IDMpIHJldHVybiBudWxsXG4gIGNvbnN0IHNob3J0Rm9ybWF0ID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQobG9jYWxlLCB7IG1vbnRoOiAnc2hvcnQnIH0pXG4gIGNvbnN0IGxvbmdGb3JtYXQgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChsb2NhbGUsIHsgbW9udGg6ICdsb25nJyB9KVxuICBmb3IgKGxldCBpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoMjAwMCwgaSwgMSlcbiAgICBpZiAoXG4gICAgICBzaG9ydEZvcm1hdC5mb3JtYXQoZGF0ZSkudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKG1hdGNoKSB8fFxuICAgICAgbG9uZ0Zvcm1hdC5mb3JtYXQoZGF0ZSkudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKG1hdGNoKVxuICAgICkge1xuICAgICAgcmV0dXJuIGlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cbiIsIjwhLS0gRGVyaXZlZCBmcm9tIEFUVUksIGFuZCBmdXJ0aGVyIGV4dGVuZGVkOiBodHRwczovL2FsaXFpbi5naXRodWIuaW8vYXR1aS8gLS0+XG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tY2FsZW5kYXJcbiAgLmRpdG8tY2FsZW5kYXItcG9wdXBcbiAgICAuZGl0by1jYWxlbmRhci1pbm5lclxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtaWY9XCJjdXJyZW50TW9kZSA9PT0gJ2RheSdcIlxuICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1oZWFkZXJcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2LmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyKFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoLTEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldi5kaXRvLWNhbGVuZGFyLXN0ZXAtbW9udGgoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwTW9udGgoLTEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgc3BhblxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC15ZWFyKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZXRNb2RlKCd5ZWFyJylcIlxuICAgICAgICAgICAgKSB7eyBkYXRlVG9TdHJpbmcoY3VycmVudFZhbHVlLCB7IHllYXI6IHRydWUgfSkgfX1cbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QtbW9udGgoXG4gICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ21vbnRoJylcIlxuICAgICAgICAgICAgKSB7eyBkYXRlVG9TdHJpbmcoY3VycmVudFZhbHVlLCB7IG1vbnRoOiB0cnVlIH0pIH19XG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dC5kaXRvLWNhbGVuZGFyLXN0ZXAtbW9udGgoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwTW9udGgoMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0LmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyKFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLXdlZWtkYXlzXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWZvcj1cIndlZWtkYXkgaW4gd2Vla2RheU5hbWVzXCJcbiAgICAgICAgICAgICkge3sgd2Vla2RheS5zaG9ydCB9fVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLWRhdGVzXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWZvcj1cImRhdGUgaW4gZGF0ZVJhbmdlXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwiZGF0ZS5zdGF0ZSAmJiBgZGl0by1jYWxlbmRhci1pdGVtLSR7ZGF0ZS5zdGF0ZX1gXCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwiZGF0ZS5zdGF0ZSAhPT0gJ2Rpc2FibGVkJyAmJiBzZWxlY3REYXRlKGRhdGUuZGF0ZSlcIlxuICAgICAgICAgICAgKSB7eyBkYXRlLnRleHQgfX1cbiAgICAgICAgLmRpdG8tY2FsZW5kYXItZm9vdGVyXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC1ub3coXG4gICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIDp0aXRsZT1cImRhdGVUb1N0cmluZyhuZXcgRGF0ZSgpKVwiXG4gICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3REYXRlKG5ldyBEYXRlKCkpXCJcbiAgICAgICAgICApXG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1lbHNlLWlmPVwiY3VycmVudE1vZGUgPT09ICdtb250aCdcIlxuICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1oZWFkZXJcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2KFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoLTEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgc3BhblxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC15ZWFyKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZXRNb2RlKCd5ZWFyJylcIlxuICAgICAgICAgICAgKSB7eyBkYXRlVG9TdHJpbmcoY3VycmVudFZhbHVlLCB7IHllYXI6IHRydWUgfSkgfX1cbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0KFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLW1vbnRoc1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCIobW9udGgsIGluZGV4KSBpbiBtb250aE5hbWVzXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwiZ2V0TW9udGhDbGFzcyhpbmRleClcIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3RNb250aChpbmRleClcIlxuICAgICAgICAgICAgKSB7eyBtb250aC5zaG9ydCB9fVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtZWxzZS1pZj1cImN1cnJlbnRNb2RlID09PSAneWVhcidcIlxuICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1oZWFkZXJcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2KFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcERlY2FkZSgtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBzcGFuIHt7IGRlY2FkZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSkgfX1cbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0KFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcERlY2FkZSgxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXIteWVhcnNcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZm9yPVwieWVhciBpbiB5ZWFyUmFuZ2VcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRZZWFyQ2xhc3MoeWVhcilcIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3RZZWFyKHllYXIpXCJcbiAgICAgICAgICAgICkge3sgeWVhciB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGRlc2NyaWJlRGF0ZSwgYWx0ZXJEYXRlIH0gZnJvbSAnLi4vdXRpbHMvZGF0ZS5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZScsICdzZWxlY3QnXSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGxvY2FsZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdlbi1VUycgfSxcbiAgICBkaXNhYmxlZERhdGU6IHsgdHlwZTogRnVuY3Rpb24sIGRlZmF1bHQ6ICgpID0+IGZhbHNlIH0sXG4gICAgbW9kZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdkYXknIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIGNvbnN0IHsgd2Vla2RheU5hbWVzLCBtb250aE5hbWVzIH0gPSBnZXRMb2NhbGVOYW1lcyh0aGlzLmxvY2FsZSlcbiAgICByZXR1cm4ge1xuICAgICAgd2Vla2RheU5hbWVzLFxuICAgICAgbW9udGhOYW1lcyxcbiAgICAgIGRhdGVSYW5nZTogW10sXG4gICAgICB5ZWFyUmFuZ2U6IFtdLFxuICAgICAgY3VycmVudFZhbHVlOiAoXG4gICAgICAgIHRoaXMubW9kZWxWYWx1ZSB8fFxuICAgICAgICAvLyBJZiBubyB2YWx1ZSBpcyBwcm92aWRlZCwgdXNlIGN1cnJlbnQgZGF0ZSBidXQgY2xlYXIgdGltZSBmaWVsZHM6XG4gICAgICAgIGFsdGVyRGF0ZShuZXcgRGF0ZSgpLCB7IGhvdXI6IDAsIG1pbnV0ZTogMCwgc2Vjb25kOiAwLCBtaWxsaXNlY29uZDogMCB9KVxuICAgICAgKSxcbiAgICAgIGN1cnJlbnRNb2RlOiB0aGlzLm1vZGVcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAoK3RvICE9PSArZnJvbSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRvIHx8IG5ldyBEYXRlKClcbiAgICAgICAgdGhpcy51cGRhdGVEYXRlUmFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VmFsdWUodG8sIGZyb20pIHtcbiAgICAgIGlmICgrdG8gIT09ICtmcm9tKSB7XG4gICAgICAgIHRoaXMudXBkYXRlRGF0ZVJhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGlzYWJsZWREYXRlOiAndXBkYXRlRGF0ZVJhbmdlJyxcblxuICAgIG1vZGUobW9kZSkge1xuICAgICAgdGhpcy5jdXJyZW50TW9kZSA9IG1vZGVcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLnVwZGF0ZURhdGVSYW5nZSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldE1vbnRoQ2xhc3MobW9udGgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLWNhbGVuZGFyLWl0ZW0tYWN0aXZlJzogKFxuICAgICAgICAgIHRoaXMubW9kZWxWYWx1ZSAmJlxuICAgICAgICAgIG1vbnRoID09PSB0aGlzLm1vZGVsVmFsdWUuZ2V0TW9udGgoKSAmJlxuICAgICAgICAgIHRoaXMuY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCkgPT09IHRoaXMubW9kZWxWYWx1ZS5nZXRGdWxsWWVhcigpXG4gICAgICAgICksXG4gICAgICAgICdkaXRvLWNhbGVuZGFyLWl0ZW0tY3VycmVudCc6IG1vbnRoID09PSB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRNb250aCgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldFllYXJDbGFzcyh5ZWFyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1jYWxlbmRhci1pdGVtLWFjdGl2ZSc6IChcbiAgICAgICAgICB0aGlzLm1vZGVsVmFsdWUgJiYgeWVhciA9PT0gdGhpcy5tb2RlbFZhbHVlLmdldEZ1bGxZZWFyKClcbiAgICAgICAgKSxcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1jdXJyZW50JzogeWVhciA9PT0gdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXREYXRlKG92ZXJyaWRlcywgdXBkYXRlID0gZmFsc2UpIHtcbiAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gYWx0ZXJEYXRlKHRoaXMuY3VycmVudFZhbHVlLCBvdmVycmlkZXMpXG4gICAgICBpZiAodXBkYXRlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgdGhpcy5jdXJyZW50VmFsdWUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHN0ZXBEZWNhZGUoc3RlcCkge1xuICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgeWVhcjogdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSArIHN0ZXAgKiAxMFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc2V0TW9kZShtb2RlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRNb2RlID0gbW9kZVxuICAgIH0sXG5cbiAgICBzdGVwTW9udGgoc3RlcCkge1xuICAgICAgY29uc3QgeyBjdXJyZW50VmFsdWUgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHsgeWVhciwgbW9udGggfSA9IHRoaXMuZ2V0WWVhck1vbnRoKFxuICAgICAgICBjdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgY3VycmVudFZhbHVlLmdldE1vbnRoKCkgKyBzdGVwXG4gICAgICApXG4gICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICBtb250aCxcbiAgICAgICAgZGF5OiBNYXRoLm1pbihcbiAgICAgICAgICB0aGlzLmdldERheXNJbk1vbnRoKHllYXIsIG1vbnRoKSxcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZS5nZXREYXRlKClcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc3RlcFllYXIoc3RlcCkge1xuICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgeWVhcjogdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSArIHN0ZXBcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHNlbGVjdERhdGUoZGF0ZSkge1xuICAgICAgdGhpcy5zZXREYXRlKGRlc2NyaWJlRGF0ZShkYXRlKSwgdHJ1ZSlcbiAgICAgIHRoaXMuJGVtaXQoJ3NlbGVjdCcpXG4gICAgfSxcblxuICAgIHNlbGVjdE1vbnRoKG1vbnRoKSB7XG4gICAgICB0aGlzLnNldE1vZGUoJ2RheScpXG4gICAgICAvLyBTZXQgZGF5IHRvIDEgdG8gYXZvaWQgc2VsZWN0aW5nIGEgZGF0ZSB0aGF0IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlXG4gICAgICAvLyBuZXcgbW9udGgsIGUuZy4gRmViIDMxIC0+IE1hciAzLlxuICAgICAgdGhpcy5zZXREYXRlKHsgbW9udGgsIGRheTogMSB9LCB0cnVlKVxuICAgIH0sXG5cbiAgICBzZWxlY3RZZWFyKHllYXIpIHtcbiAgICAgIHRoaXMuc2V0TW9kZSgnbW9udGgnKVxuICAgICAgdGhpcy5zZXREYXRlKHsgeWVhciB9LCB0cnVlKVxuICAgIH0sXG5cbiAgICBnZXRZZWFyTW9udGgoeWVhciwgbW9udGgpIHtcbiAgICAgIGlmIChtb250aCA+IDExKSB7XG4gICAgICAgIHllYXIrK1xuICAgICAgICBtb250aCA9IDBcbiAgICAgIH0gZWxzZSBpZiAobW9udGggPCAwKSB7XG4gICAgICAgIHllYXItLVxuICAgICAgICBtb250aCA9IDExXG4gICAgICB9XG4gICAgICByZXR1cm4geyB5ZWFyLCBtb250aCB9XG4gICAgfSxcblxuICAgIGRhdGVUb1N0cmluZyhcbiAgICAgIGRhdGUsXG4gICAgICB7IHllYXIsIG1vbnRoLCBkYXkgfSA9IHsgeWVhcjogdHJ1ZSwgbW9udGg6IHRydWUsIGRheTogdHJ1ZSB9XG4gICAgKSB7XG4gICAgICByZXR1cm4gZGF0ZS50b0xvY2FsZVN0cmluZyh0aGlzLmxvY2FsZSwge1xuICAgICAgICB5ZWFyOiB5ZWFyICYmICdudW1lcmljJyxcbiAgICAgICAgbW9udGg6IG1vbnRoICYmICdsb25nJyxcbiAgICAgICAgZGF5OiBkYXkgJiYgJ251bWVyaWMnXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBkZWNhZGVUb1N0cmluZyhkYXRlKSB7XG4gICAgICBjb25zdCB5ZWFyID0gdGhpcy5nZXRGaXJzdFllYXJPZkRlY2FkZShkYXRlLmdldEZ1bGxZZWFyKCkpXG4gICAgICByZXR1cm4gYCR7eWVhcn0g4oCTICR7eWVhciArIDl9YFxuICAgIH0sXG5cbiAgICBnZXREYXlzSW5Nb250aCh5ZWFyLCBtb250aCkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKHllYXIsIG1vbnRoICsgMSwgMCkuZ2V0RGF0ZSgpXG4gICAgfSxcblxuICAgIGdldEZpcnN0WWVhck9mRGVjYWRlKHllYXIpIHtcbiAgICAgIGNvbnN0IHllYXJTdHIgPSB5ZWFyLnRvU3RyaW5nKClcbiAgICAgIHJldHVybiArYCR7eWVhclN0ci5zbGljZSgwLCAtMSl9MGBcbiAgICB9LFxuXG4gICAgbmF2aWdhdGUoeyBzdGVwLCBlbnRlciwgbW9kZSA9IHRoaXMuY3VycmVudE1vZGUsIHVwZGF0ZSA9IGZhbHNlIH0pIHtcbiAgICAgIGNvbnN0IHsgY3VycmVudFZhbHVlIH0gPSB0aGlzXG4gICAgICBpZiAoc3RlcCkge1xuICAgICAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgdGhpcy5zZXREYXRlKHsgZGF5OiBjdXJyZW50VmFsdWUuZ2V0RGF0ZSgpICsgc3RlcCB9LCB1cGRhdGUpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZSh7IG1vbnRoOiBjdXJyZW50VmFsdWUuZ2V0TW9udGgoKSArIHN0ZXAgfSwgdXBkYXRlKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZSh7IHllYXI6IGN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpICsgc3RlcCB9LCB1cGRhdGUpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9IGVsc2UgaWYgKGVudGVyKSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5jdXJyZW50TW9kZSkge1xuICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICB0aGlzLnNlbGVjdERhdGUoY3VycmVudFZhbHVlKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICB0aGlzLnNldE1vZGUoJ2RheScpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgdGhpcy5zZXRNb2RlKCdtb250aCcpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIHVwZGF0ZURhdGVSYW5nZSgpIHtcbiAgICAgIHRoaXMuZGF0ZVJhbmdlID0gW11cbiAgICAgIHRoaXMueWVhclJhbmdlID0gW11cblxuICAgICAgY29uc3QgeyBjdXJyZW50VmFsdWUgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHllYXIgPSBjdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKVxuICAgICAgY29uc3QgbW9udGggPSBjdXJyZW50VmFsdWUuZ2V0TW9udGgoKVxuICAgICAgY29uc3Qgc3RhcnRZZWFyID0gdGhpcy5nZXRGaXJzdFllYXJPZkRlY2FkZSh5ZWFyKVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG4gICAgICAgIHRoaXMueWVhclJhbmdlLnB1c2goc3RhcnRZZWFyICsgaSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGN1cnJNb250aEZpcnN0RGF5ID0gbmV3IERhdGUoeWVhciwgbW9udGgsIDEpXG4gICAgICBsZXQgZmlyc3REYXlXZWVrID0gY3Vyck1vbnRoRmlyc3REYXkuZ2V0RGF5KCkgKyAxXG4gICAgICBpZiAoZmlyc3REYXlXZWVrID09PSAwKSB7XG4gICAgICAgIGZpcnN0RGF5V2VlayA9IDdcbiAgICAgIH1cbiAgICAgIGNvbnN0IG51bURheXMgPSB0aGlzLmdldERheXNJbk1vbnRoKHllYXIsIG1vbnRoKVxuICAgICAgaWYgKGZpcnN0RGF5V2VlayA+IDEpIHtcbiAgICAgICAgY29uc3QgcHJldk1vbnRoID0gdGhpcy5nZXRZZWFyTW9udGgoeWVhciwgbW9udGggLSAxKVxuICAgICAgICBjb25zdCBwcmV2TW9udGhOdW1EYXlzID0gdGhpcy5nZXREYXlzSW5Nb250aChcbiAgICAgICAgICBwcmV2TW9udGgueWVhcixcbiAgICAgICAgICBwcmV2TW9udGgubW9udGhcbiAgICAgICAgKVxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGZpcnN0RGF5V2VlazsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZGF5ID0gcHJldk1vbnRoTnVtRGF5cyAtIGZpcnN0RGF5V2VlayArIGkgKyAxXG4gICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHByZXZNb250aC55ZWFyLCBwcmV2TW9udGgubW9udGgsIGRheSlcbiAgICAgICAgICB0aGlzLmRhdGVSYW5nZS5wdXNoKHtcbiAgICAgICAgICAgIHRleHQ6IGRheSxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBzdGF0ZTogdGhpcy5kaXNhYmxlZERhdGUoZGF0ZSkgPyAnZGlzYWJsZWQnIDogJ2dyYXknXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpXG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBudW1EYXlzOyBpKyspIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCBpKVxuICAgICAgICBjb25zdCBpc0RheSA9IGRhdGUgPT4gKFxuICAgICAgICAgIGRhdGUgJiZcbiAgICAgICAgICBkYXRlLmdldERhdGUoKSA9PT0gaSAmJlxuICAgICAgICAgIGRhdGUuZ2V0RnVsbFllYXIoKSA9PT0geWVhciAmJlxuICAgICAgICAgIGRhdGUuZ2V0TW9udGgoKSA9PT0gbW9udGhcbiAgICAgICAgKVxuICAgICAgICBjb25zdCBzdGF0ZSA9IGlzRGF5KHRoaXMubW9kZWxWYWx1ZSlcbiAgICAgICAgICA/ICdhY3RpdmUnXG4gICAgICAgICAgOiBpc0RheShub3cpXG4gICAgICAgICAgICA/ICd0b2RheSdcbiAgICAgICAgICAgIDogdGhpcy5kaXNhYmxlZERhdGUoZGF0ZSlcbiAgICAgICAgICAgICAgPyAnZGlzYWJsZWQnXG4gICAgICAgICAgICAgIDogaXNEYXkoY3VycmVudFZhbHVlKVxuICAgICAgICAgICAgICAgID8gJ2N1cnJlbnQnXG4gICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgIHRoaXMuZGF0ZVJhbmdlLnB1c2goe1xuICAgICAgICAgIHRleHQ6IGksXG4gICAgICAgICAgZGF0ZSxcbiAgICAgICAgICBzdGF0ZVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXh0TW9udGhOZWVkID0gNDIgLSB0aGlzLmRhdGVSYW5nZS5sZW5ndGhcbiAgICAgIGlmIChuZXh0TW9udGhOZWVkID4gMCkge1xuICAgICAgICBjb25zdCBuZXh0TW9udGggPSB0aGlzLmdldFllYXJNb250aCh5ZWFyLCBtb250aCArIDEpXG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG5leHRNb250aE5lZWQ7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShuZXh0TW9udGgueWVhciwgbmV4dE1vbnRoLm1vbnRoLCBpKVxuICAgICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5kaXNhYmxlZERhdGUoZGF0ZSkgPyAnZGlzYWJsZWQnIDogJ2dyYXknXG4gICAgICAgICAgdGhpcy5kYXRlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgICB0ZXh0OiBpLFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5jb25zdCBsb2NhbGVOYW1lcyA9IHt9XG5cbi8vIENhbGxpbmcgYHRvTG9jYWxlU3RyaW5nKClgIHRoaXMgbXVjaCBhcHBlYXJzIHRvIGJlIGV4cGVuc2l2ZSwgc28gY2FjaGUgaXQ6XG5mdW5jdGlvbiBnZXRMb2NhbGVOYW1lcyhsb2NhbGUpIHtcbiAgbGV0IG5hbWVzID0gbG9jYWxlTmFtZXNbbG9jYWxlXVxuICBpZiAoIW5hbWVzKSB7XG4gICAgY29uc3Qgd2Vla2RheU5hbWVzID0gW11cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKDAsIDAsIGkpXG4gICAgICB3ZWVrZGF5TmFtZXMucHVzaCh7XG4gICAgICAgIGxvbmc6IGRhdGUudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IHdlZWtkYXk6ICdsb25nJyB9KSxcbiAgICAgICAgc2hvcnQ6IGRhdGUudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IHdlZWtkYXk6ICdzaG9ydCcgfSlcbiAgICAgIH0pXG4gICAgfVxuICAgIGNvbnN0IG1vbnRoTmFtZXMgPSBbXVxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IDEyOyBpKyspIHtcbiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgwLCBpLCAwKVxuICAgICAgbW9udGhOYW1lcy5wdXNoKHtcbiAgICAgICAgbG9uZzogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgbW9udGg6ICdsb25nJyB9KSxcbiAgICAgICAgc2hvcnQ6IGRhdGUudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IG1vbnRoOiAnc2hvcnQnIH0pXG4gICAgICB9KVxuICAgIH1cbiAgICBuYW1lcyA9IGxvY2FsZU5hbWVzW2xvY2FsZV0gPSB7XG4gICAgICB3ZWVrZGF5TmFtZXMsXG4gICAgICBtb250aE5hbWVzXG4gICAgfVxuICB9XG4gIHJldHVybiBuYW1lc1xufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tY2FsZW5kYXIge1xuICBtaW4td2lkdGg6IDI0MHB4O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG4uZGl0by1jYWxlbmRhci1wb3B1cCB7XG4gIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgYm94LXNoYWRvdzogJHNoYWRvdy13aW5kb3c7XG4gIHotaW5kZXg6ICR6LWluZGV4LXBvcHVwO1xufVxuXG4uZGl0by1jYWxlbmRhci1ib2R5IHtcbiAgcGFkZGluZzogMCAwLjVlbTtcblxuICBzcGFuIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2lkdGg6IGNhbGMoMTAwJSAvIDcpO1xuICAgIGhlaWdodDogJGlucHV0LWhlaWdodDtcbiAgICBsaW5lLWhlaWdodDogY2FsYygjeyRpbnB1dC1oZWlnaHR9IC0gMnB4KTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cblxuICAuZGl0by1jYWxlbmRhci1pdGVtLXRvZGF5IHtcbiAgICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgJGNvbG9yLWFjdGl2ZTtcbiAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgfVxuXG4gIC5kaXRvLWNhbGVuZGFyLWl0ZW0tYWN0aXZlIHtcbiAgICAmLFxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZTtcbiAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICB9XG4gIH1cblxuICAuZGl0by1jYWxlbmRhci1pdGVtLWRpc2FibGVkIHtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gIH1cblxuICAuZGl0by1jYWxlbmRhci1pdGVtLWRpc2FibGVkLFxuICAuZGl0by1jYWxlbmRhci1pdGVtLWdyYXkge1xuICAgIGNvbG9yOiAjOTk5OTk5O1xuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLW1vbnRocyxcbi5kaXRvLWNhbGVuZGFyLXllYXJzIHtcbiAgc3BhbiB7XG4gICAgd2lkdGg6IGNhbGMoMTAwJSAvIDQpO1xuICAgIG1hcmdpbjogMC41ZW0gMDtcbiAgfVxufVxuXG4uZGl0by1jYWxlbmRhci15ZWFycyBzcGFuIHtcbiAgd2lkdGg6IGNhbGMoMTAwJSAvIDUpO1xufVxuXG4uZGl0by1jYWxlbmRhciBhLFxuLmRpdG8tY2FsZW5kYXItZGF0ZXMgc3Bhbixcbi5kaXRvLWNhbGVuZGFyLW1vbnRocyBzcGFuLFxuLmRpdG8tY2FsZW5kYXIteWVhcnMgc3BhbiB7XG4gIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLmRpdG8tY2FsZW5kYXItaGVhZGVyIHNwYW4ge1xuICBjdXJzb3I6IGRlZmF1bHQ7XG5cbiAgYSB7XG4gICAgcGFkZGluZzogMCAwLjJlbTtcbiAgfVxufVxuXG4uZGl0by1jYWxlbmRhci1kYXRlcyBzcGFuOmhvdmVyLFxuLmRpdG8tY2FsZW5kYXItbW9udGhzIHNwYW46aG92ZXIsXG4uZGl0by1jYWxlbmRhci15ZWFycyBzcGFuOmhvdmVyLFxuLmRpdG8tY2FsZW5kYXI6bm90KDpob3ZlcikgLmRpdG8tY2FsZW5kYXItaXRlbS1jdXJyZW50IHtcbiAgYmFja2dyb3VuZDogJGNvbG9yLWhpZ2hsaWdodDtcbn1cblxuLmRpdG8tY2FsZW5kYXItd2Vla2RheXMgc3BhbiB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcbn1cblxuLmRpdG8tY2FsZW5kYXItaGVhZGVyLFxuLmRpdG8tY2FsZW5kYXItZm9vdGVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGhlaWdodDogJGlucHV0LWhlaWdodDtcbiAgbGluZS1oZWlnaHQ6ICRpbnB1dC1oZWlnaHQ7XG59XG5cbi5kaXRvLWNhbGVuZGFyLWZvb3RlciB7XG4gIGJvcmRlci10b3A6ICRib3JkZXItc3R5bGU7XG59XG5cbi5kaXRvLWNhbGVuZGFyLWhlYWRlciB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBib3JkZXItYm90dG9tOiAkYm9yZGVyLXN0eWxlO1xuICBkaXNwbGF5OiBmbGV4O1xuXG4gID4gc3BhbiB7XG4gICAgbWFyZ2luOiBhdXRvO1xuICAgIHBhZGRpbmc6IDAgMC41ZW07XG4gIH1cblxuICBhIHtcbiAgICBmb250LXdlaWdodDogYm9sZDtcblxuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6ICRjb2xvci1hY3RpdmU7XG4gICAgfVxuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldixcbi5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgd2lkdGg6IDUlO1xuICBtaW4td2lkdGg6IDJlbTtcbiAgbWF4LXdpZHRoOiAzZW07XG5cbiAgJjo6YWZ0ZXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBsZWZ0OiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGZvbnQtc2l6ZTogMS4yNWVtO1xuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldiB7XG4gICY6OmFmdGVyIHtcbiAgICBjb250ZW50OiAn4oC5JztcbiAgfVxuXG4gICYuZGl0by1jYWxlbmRhci1zdGVwLXllYXI6OmFmdGVyIHtcbiAgICBjb250ZW50OiAnwqsnO1xuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dCB7XG4gICY6OmFmdGVyIHtcbiAgICBjb250ZW50OiAn4oC6JztcbiAgfVxuXG4gICYuZGl0by1jYWxlbmRhci1zdGVwLXllYXI6OmFmdGVyIHtcbiAgICBjb250ZW50OiAnwrsnO1xuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLXNlbGVjdC1ub3cge1xuICAmOjphZnRlciB7XG4gICAgY29udGVudDogJ05vdyc7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGFkZEV2ZW50cyh0YXJnZXRzLCBldmVudHMpIHtcbiAgdGFyZ2V0cyA9XG4gICAgdGFyZ2V0cyBpbnN0YW5jZW9mIE5vZGVMaXN0XG4gICAgICA/IEFycmF5LmZyb20odGFyZ2V0cylcbiAgICAgIDogYXNBcnJheSh0YXJnZXRzKVxuXG4gIGZvciAoY29uc3QgW3R5cGUsIGhhbmRsZXJdIG9mIE9iamVjdC5lbnRyaWVzKGV2ZW50cykpIHtcbiAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBoYW5kbGVyLCBmYWxzZSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHJlbW92ZSgpIHtcbiAgICAgIGZvciAoY29uc3QgW3R5cGUsIGhhbmRsZXJdIG9mIE9iamVjdC5lbnRyaWVzKGV2ZW50cykpIHtcbiAgICAgICAgZm9yIChjb25zdCB0YXJnZXQgb2YgdGFyZ2V0cykge1xuICAgICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lRXZlbnRzKC4uLmV2ZW50cykge1xuICByZXR1cm4ge1xuICAgIHJlbW92ZSgpIHtcbiAgICAgIGZvciAoY29uc3QgZXZlbnQgb2YgZXZlbnRzKSB7XG4gICAgICAgIGV2ZW50LnJlbW92ZSgpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRLZXkoZXZlbnQpIHtcbiAgcmV0dXJuIHtcbiAgICAzNzogJ2xlZnQnLFxuICAgIDM4OiAndXAnLFxuICAgIDM5OiAncmlnaHQnLFxuICAgIDQwOiAnZG93bicsXG4gICAgMTM6ICdlbnRlcidcbiAgfVtldmVudD8ua2V5Q29kZV1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEtleU5hdmlnYXRpb24oZXZlbnQpIHtcbiAgY29uc3Qga2V5ID0gZ2V0S2V5KGV2ZW50KVxuICByZXR1cm4ge1xuICAgIGhvcjogeyBsZWZ0OiAtMSwgcmlnaHQ6IDEgfVtrZXldIHx8IDAsXG4gICAgdmVyOiB7IHVwOiAtMSwgZG93bjogMSB9W2tleV0gfHwgMCxcbiAgICBlbnRlcjoga2V5ID09PSAnZW50ZXInXG4gIH1cbn1cbiIsImltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhcmdldChjb21wb25lbnQpIHtcbiAgY29uc3QgdGFyZ2V0ID0gaXNTdHJpbmcoY29tcG9uZW50LnRhcmdldClcbiAgICA/IGNvbXBvbmVudC4kcmVmc1tjb21wb25lbnQudGFyZ2V0XVxuICAgIDogY29tcG9uZW50LnRhcmdldFxuICByZXR1cm4gdGFyZ2V0Py4kZWwgPz8gdGFyZ2V0XG59XG4iLCI8IS0tIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvIC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXRyaWdnZXItY29udGFpbmVyXG4gIC5kaXRvLXRyaWdnZXIoXG4gICAgdi1pZj1cImFsd2F5c1Nob3dcIlxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gIClcbiAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gIC5kaXRvLXRyaWdnZXIoXG4gICAgdi1lbHNlLWlmPVwidHJpZ2dlciA9PT0gJ2NsaWNrJ1wiXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgICBAY2xpY2s9XCJvbkNsaWNrXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnaG92ZXInXCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICAgIEBtb3VzZWVudGVyPVwib25Ib3Zlcih0cnVlKVwiXG4gICAgQG1vdXNlbGVhdmU9XCJvbkhvdmVyKGZhbHNlKVwiXG4gIClcbiAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gIC5kaXRvLXRyaWdnZXIoXG4gICAgdi1lbHNlLWlmPVwidHJpZ2dlciA9PT0gJ2ZvY3VzJyB8fCB0cmlnZ2VyID09PSAnYWx3YXlzJ1wiXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgVHJhbnNpdGlvbig6bmFtZT1cImBkaXRvLSR7dHJhbnNpdGlvbn1gXCIpXG4gICAgLmRpdG8tcG9wdXAoXG4gICAgICB2LWlmPVwidHJpZ2dlciA9PT0gJ2hvdmVyJ1wiXG4gICAgICB2LXNob3c9XCJzaG93UG9wdXBcIlxuICAgICAgcmVmPVwicG9wdXBcIlxuICAgICAgOmNsYXNzPVwicG9wdXBDbGFzc1wiXG4gICAgICA6c3R5bGU9XCJwb3B1cFN0eWxlXCJcbiAgICAgIEBtb3VzZWVudGVyPVwib25Ib3Zlcih0cnVlKVwiXG4gICAgICBAbW91c2VsZWF2ZT1cIm9uSG92ZXIoZmFsc2UpXCJcbiAgICApXG4gICAgICBzbG90KFxuICAgICAgICB2LWlmPVwic2hvd1BvcHVwXCJcbiAgICAgICAgbmFtZT1cInBvcHVwXCJcbiAgICAgIClcbiAgICAuZGl0by1wb3B1cChcbiAgICAgIHYtZWxzZVxuICAgICAgdi1zaG93PVwic2hvd1BvcHVwXCJcbiAgICAgIHJlZj1cInBvcHVwXCJcbiAgICAgIDpjbGFzcz1cInBvcHVwQ2xhc3NcIlxuICAgICAgOnN0eWxlPVwicG9wdXBTdHlsZVwiXG4gICAgKVxuICAgICAgc2xvdChcbiAgICAgICAgdi1pZj1cInNob3dQb3B1cFwiXG4gICAgICAgIG5hbWU9XCJwb3B1cFwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaHlwaGVuYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGFkZEV2ZW50cywgY29tYmluZUV2ZW50cyB9IGZyb20gJy4uL3V0aWxzL2V2ZW50LmpzJ1xuaW1wb3J0IHsgZ2V0VGFyZ2V0IH0gZnJvbSAnLi4vdXRpbHMvdHJpZ2dlcidcblxuZXhwb3J0IGRlZmF1bHQge1xuICBlbWl0czogWyd1cGRhdGU6c2hvdyddLFxuXG4gIHByb3BzOiB7XG4gICAgdHJpZ2dlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdjbGljaycgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlbWVudDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdib3R0b20nIH0sXG4gICAgc2hvdzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdGFyZ2V0OiB7IHR5cGU6IFtTdHJpbmcsIEhUTUxFbGVtZW50XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGN1c3RvbUNsYXNzOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHpJbmRleDogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfSxcbiAgICBrZWVwSW5WaWV3OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBoaWRlV2hlbkNsaWNrT3V0c2lkZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgYWx3YXlzU2hvdzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvdmVyOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgaGlkZURlbGF5OiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvd1BvcHVwOiB0aGlzLnNob3csXG4gICAgICBwb3B1cFBsYWNlbWVudDogdGhpcy5wbGFjZW1lbnQsXG4gICAgICBmb2N1c0V2ZW50czogbnVsbCxcbiAgICAgIGNsb3NlRXZlbnRzOiBudWxsLFxuICAgICAgcG9wdXBFdmVudHM6IG51bGwsXG4gICAgICBibHVyVGltZXI6IG51bGwsXG4gICAgICBtb3VzZUxlYXZlVGltZXI6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0cmlnZ2VyQ2xhc3MoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by10cmlnZ2VyLWRpc2FibGVkJzogdGhpcy5kaXNhYmxlZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwb3B1cENsYXNzKCkge1xuICAgICAgY29uc3QgY2xhc3NlcyA9IHtcbiAgICAgICAgW2BkaXRvLXBvcHVwLSR7aHlwaGVuYXRlKHRoaXMucGxhY2VtZW50KX1gXTogdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY3VzdG9tQ2xhc3MpIHtcbiAgICAgICAgY2xhc3Nlc1t0aGlzLmN1c3RvbUNsYXNzXSA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBjbGFzc2VzXG4gICAgfSxcblxuICAgIHBvcHVwU3R5bGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy56SW5kZXggPyBgei1pbmRleDogJHt0aGlzLnpJbmRleH1gIDogJydcbiAgICB9LFxuXG4gICAgdHJpZ2dlclRhcmdldCgpIHtcbiAgICAgIHJldHVybiBnZXRUYXJnZXQodGhpcylcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBzaG93KHNob3cpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gc2hvdyB8fCB0aGlzLmFsd2F5c1Nob3dcbiAgICB9LFxuXG4gICAgc2hvd1BvcHVwKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gXiBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpzaG93JywgdG8pXG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHRoaXMub25TaG93UG9wdXAodG8pKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIGNvbnN0IHsgdHJpZ2dlciwgcG9wdXAgfSA9IHRoaXMuJHJlZnNcbiAgICBpZiAodGhpcy50cmlnZ2VyID09PSAnZm9jdXMnKSB7XG4gICAgICB0aGlzLmZvY3VzRXZlbnRzID0gdGhpcy5hZGRGb2N1c0V2ZW50cyh0aGlzLnRyaWdnZXJUYXJnZXQgPz8gdHJpZ2dlcilcbiAgICB9XG5cbiAgICBpZiAodGhpcy5oaWRlV2hlbkNsaWNrT3V0c2lkZSAmJiAhdGhpcy5hbHdheXNTaG93KSB7XG4gICAgICAvLyBVc2UgJ21vdXNldXAnIGluc3RlYWQgb2YgJ2NsaWNrJywgc2luY2UgY2xpY2sgYXBwZWFycyB0byBoYXBwZW4gYWZ0ZXJcbiAgICAgIC8vIHRoZSBET00gaW5zaWRlIG9mIHBvcHVwcyBjb3VsZCBjaGFuZ2UgaW4gYSB3YXkgc28gdGhhdCB0aGUgY2hlY2tcbiAgICAgIC8vIGBwb3B1cC5jb250YWlucyhldmVudC50YXJnZXQpYCB3b3VsZCBmYWlsOlxuICAgICAgdGhpcy5jbG9zZUV2ZW50cyA9IGFkZEV2ZW50cyh3aW5kb3csIHtcbiAgICAgICAgbW91c2V1cDogZXZlbnQgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwICYmXG4gICAgICAgICAgICAhcG9wdXAuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgICAgICAgIXRyaWdnZXIuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgICAgICAgIXRoaXMudHJpZ2dlclRhcmdldD8uY29udGFpbnMoZXZlbnQudGFyZ2V0KVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBibHVyOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0aGlzLmFsd2F5c1Nob3cpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuc2hvd1BvcHVwID0gdGhpcy5zaG93XG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIHRoaXMuZm9jdXNFdmVudHM/LnJlbW92ZSgpXG4gICAgdGhpcy5jbG9zZUV2ZW50cz8ucmVtb3ZlKClcbiAgICB0aGlzLnBvcHVwRXZlbnRzPy5yZW1vdmUoKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICB1cGRhdGVQb3NpdGlvbigpIHtcbiAgICAgIGNvbnN0IHsgdHJpZ2dlciwgcG9wdXAgfSA9IHRoaXMuJHJlZnNcbiAgICAgIGlmICh0aGlzLnNob3cgJiYgcG9wdXAub2Zmc2V0V2lkdGggPT09IDApIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVBvc2l0aW9uKCksIDApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLnRyaWdnZXJUYXJnZXQgPz8gdHJpZ2dlclxuICAgICAgLy8gQWN0dWFsbHkgcmVzaXplIHRoZSBwb3B1cCdzIGZpcnN0IGNoaWxkLCBzbyB0aGV5IGNhbiBzZXQgc2l6ZSBsaW1pdHMuXG4gICAgICBjb25zdCBlbCA9IHRoaXMudGFyZ2V0ID09PSAncG9wdXAnID8gdHJpZ2dlciA6IHBvcHVwLmZpcnN0RWxlbWVudENoaWxkXG4gICAgICBpZiAoZWwpIHtcbiAgICAgICAgZWwuc3R5bGUud2lkdGggPSBnZXRDb21wdXRlZFN0eWxlKHRhcmdldCkud2lkdGhcbiAgICAgIH1cblxuICAgICAgY29uc3QgYm91bmRzID0gdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICBjb25zdCB0cmlnZ2VyTGVmdCA9IGJvdW5kcy5sZWZ0ICsgd2luZG93LnNjcm9sbFhcbiAgICAgIGNvbnN0IHRyaWdnZXJUb3AgPSBib3VuZHMudG9wICsgd2luZG93LnNjcm9sbFlcbiAgICAgIGNvbnN0IHRyaWdnZXJXaWR0aCA9IGJvdW5kcy53aWR0aFxuICAgICAgY29uc3QgdHJpZ2dlckhlaWdodCA9IGJvdW5kcy5oZWlnaHRcbiAgICAgIGNvbnN0IHBvcHVwV2lkdGggPSBwb3B1cC5vZmZzZXRXaWR0aFxuICAgICAgY29uc3QgcG9wdXBIZWlnaHQgPSBwb3B1cC5vZmZzZXRIZWlnaHRcblxuICAgICAgbGV0IFtwYXJ0MSwgcGFydDJdID0gdGhpcy5wb3B1cFBsYWNlbWVudC5zcGxpdCgnLScpIHx8IFtdXG4gICAgICBpZiAodGhpcy5rZWVwSW5WaWV3KSB7XG4gICAgICAgIGNvbnN0IHdpbldpZHRoID0gd2luZG93LmlubmVyV2lkdGhcbiAgICAgICAgY29uc3Qgd2luSGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0XG4gICAgICAgIGlmIChwYXJ0MSA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICBpZiAodHJpZ2dlclRvcCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MSA9ICdib3R0b20nXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQxID09PSAnYm90dG9tJykge1xuICAgICAgICAgIGlmICh3aW5IZWlnaHQgLSB0cmlnZ2VyVG9wIC0gdHJpZ2dlckhlaWdodCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MSA9ICd0b3AnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQxID09PSAnbGVmdCcpIHtcbiAgICAgICAgICBpZiAodHJpZ2dlckxlZnQgPCBwb3B1cFdpZHRoKSB7XG4gICAgICAgICAgICBwYXJ0MSA9ICdyaWdodCdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDEgPT09ICdyaWdodCcpIHtcbiAgICAgICAgICBpZiAod2luV2lkdGggLSB0cmlnZ2VyTGVmdCAtIHRyaWdnZXJXaWR0aCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQxID0gJ2xlZnQnXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnQyID09PSAndG9wJykge1xuICAgICAgICAgIGlmICh3aW5IZWlnaHQgLSB0cmlnZ2VyVG9wIDwgcG9wdXBIZWlnaHQpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ2JvdHRvbSdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDIgPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJUb3AgKyB0cmlnZ2VySGVpZ2h0IDwgcG9wdXBIZWlnaHQpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ3RvcCdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDIgPT09ICdsZWZ0Jykge1xuICAgICAgICAgIGlmICh3aW5XaWR0aCAtIHRyaWdnZXJMZWZ0IDwgcG9wdXBXaWR0aCkge1xuICAgICAgICAgICAgcGFydDIgPSAncmlnaHQnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQyID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJMZWZ0ICsgdHJpZ2dlcldpZHRoIDwgcG9wdXBXaWR0aCkge1xuICAgICAgICAgICAgcGFydDIgPSAnbGVmdCdcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGV0IGxlZnQgPSAwXG4gICAgICBsZXQgdG9wID0gMFxuICAgICAgc3dpdGNoIChwYXJ0MSkge1xuICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgIHRvcCAtPSBwb3B1cEhlaWdodFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICAgIGxlZnQgLT0gcG9wdXBXaWR0aFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICBsZWZ0ICs9IHRyaWdnZXJXaWR0aFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgdG9wICs9IHRyaWdnZXJIZWlnaHRcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgc3dpdGNoIChwYXJ0Mikge1xuICAgICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgICAgbGVmdCAtPSBwb3B1cFdpZHRoIC0gdHJpZ2dlcldpZHRoXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgICB0b3AgLT0gcG9wdXBIZWlnaHQgLSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvdmVyKSB7XG4gICAgICAgIGlmIChwYXJ0MSA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICB0b3AgKz0gdHJpZ2dlckhlaWdodFxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQxID09PSAnYm90dG9tJykge1xuICAgICAgICAgIHRvcCAtPSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0YXJnZXQgIT09IHRyaWdnZXIpIHtcbiAgICAgICAgY29uc3QgdHJpZ2dlckJvdW5kcyA9IHRyaWdnZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgbGVmdCArPSB0cmlnZ2VyTGVmdCAtIHRyaWdnZXJCb3VuZHMubGVmdFxuICAgICAgICB0b3AgKz0gdHJpZ2dlclRvcCAtIHRyaWdnZXJCb3VuZHMudG9wXG4gICAgICB9XG4gICAgICBwb3B1cC5zdHlsZS5sZWZ0ID0gYCR7bGVmdH1weGBcbiAgICAgIHBvcHVwLnN0eWxlLnRvcCA9IGAke3RvcH1weGBcbiAgICB9LFxuXG4gICAgYWRkRm9jdXNFdmVudHMocGFyZW50KSB7XG4gICAgICBjb25zdCB0YXJnZXRzID0gcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0LCB0ZXh0YXJlYScpXG4gICAgICBsZXQgaW5wdXRcblxuICAgICAgcmV0dXJuIGNvbWJpbmVFdmVudHMoXG4gICAgICAgIGFkZEV2ZW50cyh0YXJnZXRzLCB7XG4gICAgICAgICAgZm9jdXM6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuYmx1clRpbWVyKVxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBibHVyOiAoKSA9PiB7XG4gICAgICAgICAgICAvLyBVc2UgdGltZW91dCB0byBhbGxvdyBjbGlja2VkIGlucHV0cyB0byBncmFiIGZvY3VzXG4gICAgICAgICAgICB0aGlzLmJsdXJUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIXRoaXMuJHJlZnMucG9wdXAubWF0Y2hlcygnOmZvY3VzLXdpdGhpbicpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAwKVxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG5cbiAgICAgICAgYWRkRXZlbnRzKHBhcmVudCwge1xuICAgICAgICAgIG1vdXNlZG93bjogZXZlbnQgPT4ge1xuICAgICAgICAgICAgaWYgKCFldmVudC50YXJnZXQubWF0Y2hlcygnaW5wdXQsIHRleHRhcmVhLCBidXR0b24nKSkge1xuICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWV2ZW50LnRhcmdldC5tYXRjaGVzKCcuZGl0by1idXR0b24tY2xlYXInKSkge1xuICAgICAgICAgICAgICBjb25zdCB0cmlnZ2VyID0gdGhpcy50cmlnZ2VyVGFyZ2V0ID8/IHRoaXMuJHJlZnMudHJpZ2dlclxuICAgICAgICAgICAgICAvLyBNYXJrIHRyaWdnZXIgaW5wdXQgYXMgcmVhZG9ubHkgc28gaXQgY2FuJ3QgbG9vc2UgZm9jdXMgd2hpbGVcbiAgICAgICAgICAgICAgLy8gdXNlciBkb2VzIG90aGVyIG1vdXNlLWFjdGl2aXRpZXMgaW4gcG9wdXAuXG4gICAgICAgICAgICAgIGlucHV0ID0gdHJpZ2dlci5xdWVyeVNlbGVjdG9yKCdpbnB1dCwgdGV4dGFyZWEnKVxuICAgICAgICAgICAgICBpZiAoaW5wdXQgJiYgIWlucHV0Lmhhc0F0dHJpYnV0ZSgncmVhZG9ubHknKSkge1xuICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgncmVhZG9ubHknLCAndHJ1ZScpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSBudWxsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgbW91c2V1cDogZXZlbnQgPT4ge1xuICAgICAgICAgICAgaWYgKGlucHV0KSB7XG4gICAgICAgICAgICAgIC8vIEdpdmUgc29tZSB0aW1lIGZvciBvdGhlciBldmVudHMgdG8gdXBkYXRlIGlucHV0IGJlZm9yZSBpdFxuICAgICAgICAgICAgICAvLyBiZWNvbWVzIGVkaXRhYmxlIGFuZCBzdGlsbCBmb2N1c2VkIGFnYWluLlxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBpbnB1dC5yZW1vdmVBdHRyaWJ1dGUoJ3JlYWRvbmx5JylcbiAgICAgICAgICAgICAgICBpZiAoIWV2ZW50LnRhcmdldC5tYXRjaGVzKCdpbnB1dCwgdGV4dGFyZWEsIGJ1dHRvbicpKSB7XG4gICAgICAgICAgICAgICAgICBpbnB1dC5mb2N1cygpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlucHV0ID0gbnVsbFxuICAgICAgICAgICAgICB9LCAwKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgb25TaG93UG9wdXAoc2hvdykge1xuICAgICAgaWYgKHNob3cpIHtcbiAgICAgICAgaWYgKHRoaXMudHJpZ2dlciA9PT0gJ2ZvY3VzJykge1xuICAgICAgICAgIHRoaXMucG9wdXBFdmVudHMgPSB0aGlzLmFkZEZvY3VzRXZlbnRzKHRoaXMuJHJlZnMucG9wdXApXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbigpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBvcHVwRXZlbnRzPy5yZW1vdmUoKVxuICAgICAgICB0aGlzLnBvcHVwRXZlbnRzID0gbnVsbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbkNsaWNrKCkge1xuICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbkhvdmVyKGVudGVyKSB7XG4gICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubW91c2VMZWF2ZVRpbWVyKVxuICAgICAgICBpZiAoZW50ZXIpIHtcbiAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IHRydWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5oaWRlRGVsYXkpIHtcbiAgICAgICAgICAgIHRoaXMubW91c2VMZWF2ZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgICAgIH0sIHRoaXMuaGlkZURlbGF5KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuQGltcG9ydCAnLi4vc3R5bGVzL3RyYW5zaXRpb25zJztcblxuLmRpdG8tdHJpZ2dlci1jb250YWluZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5kaXRvLXRyaWdnZXItZGlzYWJsZWQge1xuICBjb2xvcjogJGNvbG9yLWRpc2FibGVkO1xuICBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7XG4gIGN1cnNvcjogZGVmYXVsdDtcblxuICAqIHtcbiAgICBjdXJzb3I6IGRlZmF1bHQgIWltcG9ydGFudDtcbiAgICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAgICY6Zm9jdXMge1xuICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICB9XG4gIH1cbn1cblxuLmRpdG8tcG9wdXAge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogJHotaW5kZXgtcG9wdXA7XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWlucHV0KDpjbGFzcz1cImNsYXNzZXNcIilcbiAgc2xvdChuYW1lPVwiYmVmb3JlXCIpXG4gIGlucHV0KFxuICAgIDppZD1cImlkXCJcbiAgICByZWY9XCJpbnB1dFwiXG4gICAgdi1tb2RlbD1cImN1cnJlbnRWYWx1ZVwiXG4gICAgOnR5cGU9XCJ0eXBlXCJcbiAgICA6bmFtZT1cIm5hbWVcIlxuICAgIDp0aXRsZT1cInRpdGxlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgOnJlYWRvbmx5PVwicmVhZG9ubHlcIlxuICAgIDphdXRvZm9jdXM9XCJhdXRvZm9jdXNcIlxuICAgIDpwbGFjZWhvbGRlcj1cInBsYWNlaG9sZGVyXCJcbiAgICA6YXV0b2NvbXBsZXRlPVwiYXV0b2NvbXBsZXRlXCJcbiAgICA6YXJpYS1sYWJlbD1cInRpdGxlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgKVxuICBzbG90KG5hbWU9XCJhZnRlclwiKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnXSxcbiAgaW5oZXJpdEF0dHJzOiBmYWxzZSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogW1N0cmluZywgTnVtYmVyXSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHR5cGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAndGV4dCcgfSxcbiAgICBpZDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBuYW1lOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRpdGxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgcmVhZG9ubHk6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBhdXRvZm9jdXM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBhdXRvY29tcGxldGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnb2ZmJyB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFZhbHVlOiB0aGlzLm1vZGVsVmFsdWUsXG4gICAgICBob3ZlcmluZzogZmFsc2UsXG4gICAgICBmb2N1c2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsYXNzZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kYXR0cnMuY2xhc3NcbiAgICB9LFxuXG4gICAgYXR0cmlidXRlcygpIHtcbiAgICAgIGNvbnN0IHsgY2xhc3M6IF8sIC4uLmF0dHJpYnV0ZXMgfSA9IHRoaXMuJGF0dHJzXG4gICAgICByZXR1cm4gYXR0cmlidXRlc1xuICAgIH0sXG5cbiAgICBpbnB1dCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZWZzLmlucHV0XG4gICAgfSxcblxuICAgIHNpemUoKSB7XG4gICAgICAvLyBEZXRlcm1pbmUgc2l6ZSBiYXNlZCBvbiBtaW4gJiBtYXggc2V0dGluZ3MsIGlmIHRoZXkncmUgcHJvdmlkZWQuXG4gICAgICBjb25zdCB7IHNpemUsIG1pbiwgbWF4IH0gPSB0aGlzLiRhdHRyc1xuICAgICAgY29uc3QgZ2V0TGVuZ3RoID0gdmFsdWUgPT4gKHZhbHVlICE9IG51bGwgPyBgJHt2YWx1ZX1gLmxlbmd0aCA6IDApXG4gICAgICByZXR1cm4gc2l6ZSB8fCBnZXRMZW5ndGgobWluKSB8fCBnZXRMZW5ndGgobWF4KSB8fCB1bmRlZmluZWRcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gIT09IGZyb20pIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSB0b1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VmFsdWUoY3VycmVudFZhbHVlKSB7XG4gICAgICBpZiAoY3VycmVudFZhbHVlICE9PSB0aGlzLm1vZGVsVmFsdWUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCBjdXJyZW50VmFsdWUpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyKCkge1xuICAgICAgdGhpcy5pbnB1dC5ibHVyKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWlucHV0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXG4gIEBleHRlbmQgJWlucHV0O1xuXG4gIGlucHV0IHtcbiAgICAvLyBJbmhlcml0IGFsbCBzdHlsaW5nIGZyb20gLmRpdG8taW5wdXRcbiAgICBhbGw6IGluaGVyaXQ7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJvcmRlcjogMDtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5pLmRpdG8taWNvbihcbiAgOmNsYXNzPWB7XG4gICAgWydkaXRvLWljb24tLScgKyBuYW1lXTogdHJ1ZSxcbiAgICAnZGl0by1pY29uLS1kaXNhYmxlZCc6IGRpc2FibGVkXG4gIH1gXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIG5hbWU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBkaXNhYmxlZDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4vLyBgeWFybiBidWlsZDppY29uc2AgY29udmVydHMgdGhlIGljb24gU1ZHIGZpbGVzIHRvIHNpbGVudCBjbGFzc2VzIGluc2lkZVxuLy8gYHNyYy9zdHlsZXMvbWl4aW5zL19pY29ucy5zY3NzYCwgbWFraW5nIHRoZW0gYXZhaWxhYmxlIHRvIGFsbCBvdGhlciBzYXNzXG4vLyBjb2RlIHRocm91Z2ggYF9pbXBvcnRzYC5cbi8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gdXNlIHRoZW0gYXMgbm9ybWFsIENTUyBjbGFzc2VzLCBjb252ZXJ0IHRoZW0gaGVyZTpcbkBlYWNoICRuYW1lIGluICRpY29ucyB7XG4gIC5kaXRvLWljb24tLSN7JG5hbWV9IHtcbiAgICAmOjphZnRlciB7XG4gICAgICBAZXh0ZW5kICVpY29uLSN7JG5hbWV9O1xuXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgfVxuICB9XG59XG5cbi5kaXRvLWljb24ge1xuICBAYXQtcm9vdCAuZGl0by1pbnB1dCAmIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgaW5zZXQ6ICRib3JkZXItd2lkdGg7XG4gICAgbGVmdDogdW5zZXQ7XG4gICAgd2lkdGg6IDJlbTtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgY29sb3I6ICRjb2xvci1ncmV5O1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcblxuICAgICYtLWRpc2FibGVkIHtcbiAgICAgIGNvbG9yOiAkY29sb3ItbGlnaHQ7XG4gICAgfVxuICB9XG5cbiAgQGF0LXJvb3QgLmRpdG8taW5wdXQ6Zm9jdXMtd2l0aGluICYge1xuICAgIGNvbG9yOiAkY29sb3ItYWN0aXZlO1xuICB9XG59XG48L3N0eWxlPlxuIiwiZXhwb3J0IGZ1bmN0aW9uIHNldFNlbGVjdGlvbihpbnB1dCwgeyBzdGFydCwgZW5kIH0pIHtcbiAgaWYgKGlucHV0Py5zZXRTZWxlY3Rpb25SYW5nZSkge1xuICAgIGlucHV0LmZvY3VzKClcbiAgICBpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3Rpb24oaW5wdXQpIHtcbiAgcmV0dXJuIGlucHV0ICYmICdzZWxlY3Rpb25TdGFydCcgaW4gaW5wdXRcbiAgICA/IHsgc3RhcnQ6IGlucHV0LnNlbGVjdGlvblN0YXJ0LCBlbmQ6IGlucHV0LnNlbGVjdGlvbkVuZCB9XG4gICAgOiBudWxsXG59XG4iLCI8IS0tIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvIC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cblRyaWdnZXIuZGl0by1kYXRlLXBpY2tlcihcbiAgcmVmPVwidHJpZ2dlclwiXG4gIHYtbW9kZWw6c2hvdz1cInNob3dQb3B1cFwiXG4gIHRyaWdnZXI9XCJmb2N1c1wiXG4gIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgcGxhY2VtZW50LCBkaXNhYmxlZCwgdGFyZ2V0IH1cIlxuKVxuICB0ZW1wbGF0ZSgjdHJpZ2dlcilcbiAgICBzbG90KFxuICAgICAgdi1pZj1cIiRzbG90cy50cmlnZ2VyXCJcbiAgICAgIG5hbWU9XCJ0cmlnZ2VyXCJcbiAgICApXG4gICAgSW5wdXRGaWVsZC5kaXRvLWRhdGUtcGlja2VyLWlucHV0KFxuICAgICAgdi1lbHNlXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFRleHRcIlxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IGZvY3VzZWQgfVwiXG4gICAgICB2LWJpbmQ9XCJ7IHBsYWNlaG9sZGVyLCBkaXNhYmxlZCwgLi4uJGF0dHJzIH1cIlxuICAgICAgQGZvY3VzPVwib25Gb2N1cyh0cnVlKVwiXG4gICAgICBAYmx1cj1cIm9uRm9jdXMoZmFsc2UpXCJcbiAgICAgIEBrZXlkb3duPVwib25LZXlEb3duXCJcbiAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uTW91c2VEb3duKGZhbHNlKVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoI2JlZm9yZSlcbiAgICAgICAgc2xvdChuYW1lPVwiYmVmb3JlXCIpXG4gICAgICB0ZW1wbGF0ZSgjYWZ0ZXIpXG4gICAgICAgIEljb24oXG4gICAgICAgICAgbmFtZT1cImNhbGVuZGFyXCJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgICAgQG1vdXNlZG93bi5wcmV2ZW50PVwib25Nb3VzZURvd24odHJ1ZSlcIlxuICAgICAgICApXG4gICAgICAgIHNsb3QobmFtZT1cImFmdGVyXCIpXG4gIHRlbXBsYXRlKCNwb3B1cClcbiAgICBDYWxlbmRhci5kaXRvLWRhdGUtcGlja2VyLXBvcHVwKFxuICAgICAgcmVmPVwiY2FsZW5kYXJcIlxuICAgICAgdi1tb2RlbD1cImN1cnJlbnRWYWx1ZVwiXG4gICAgICB2LWJpbmQ9XCJ7IGxvY2FsZSwgZGlzYWJsZWREYXRlIH1cIlxuICAgICAgQHNlbGVjdD1cInNob3dQb3B1cCA9IGZhbHNlXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgZm9ybWF0LCBkZWZhdWx0Rm9ybWF0cyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgVHJpZ2dlciBmcm9tICcuL1RyaWdnZXIudnVlJ1xuaW1wb3J0IENhbGVuZGFyIGZyb20gJy4vQ2FsZW5kYXIudnVlJ1xuaW1wb3J0IElucHV0RmllbGQgZnJvbSAnLi9JbnB1dEZpZWxkLnZ1ZSdcbmltcG9ydCBJY29uIGZyb20gJy4vSWNvbi52dWUnXG5pbXBvcnQgeyBwYXJzZURhdGUsIGdldERhdGVQYXJ0QXRQb3NpdGlvbiB9IGZyb20gJy4uL3V0aWxzL2RhdGUuanMnXG5pbXBvcnQgeyBnZXRTZWxlY3Rpb24sIHNldFNlbGVjdGlvbiB9IGZyb20gJy4uL3V0aWxzL3NlbGVjdGlvbi5qcydcbmltcG9ydCB7IGdldEtleU5hdmlnYXRpb24gfSBmcm9tICcuLi91dGlscy9ldmVudC5qcydcbmltcG9ydCB7IGdldFRhcmdldCB9IGZyb20gJy4uL3V0aWxzL3RyaWdnZXIuanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czogeyBUcmlnZ2VyLCBDYWxlbmRhciwgSW5wdXRGaWVsZCwgSWNvbiB9LFxuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZScsICd1cGRhdGU6c2hvdycsICdjaGFuZ2UnLCAnZm9jdXMnLCAnYmx1ciddLFxuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBEYXRlLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdHJhbnNpdGlvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdzbGlkZScgfSxcbiAgICBwbGFjZW1lbnQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnYm90dG9tLWxlZnQnIH0sXG4gICAgcGxhY2Vob2xkZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2hvdzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdGFyZ2V0OiB7IHR5cGU6IFtTdHJpbmcsIEhUTUxFbGVtZW50XSwgZGVmYXVsdDogJ3RyaWdnZXInIH0sXG4gICAgbG9jYWxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2VuLVVTJyB9LFxuICAgIGZvcm1hdDoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogKCkgPT4gKHtcbiAgICAgICAgZGF0ZTogZGVmYXVsdEZvcm1hdHMuZGF0ZSxcbiAgICAgICAgdGltZTogZmFsc2VcbiAgICAgIH0pXG4gICAgfSxcbiAgICBkaXNhYmxlZERhdGU6IHsgdHlwZTogRnVuY3Rpb24sIGRlZmF1bHQ6ICgpID0+IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VmFsdWU6IHRoaXMubW9kZWxWYWx1ZSxcbiAgICAgIHNob3dQb3B1cDogdGhpcy5zaG93LFxuICAgICAgaW5wdXRGb2N1c2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvY3VzZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnB1dEZvY3VzZWQgfHwgdGhpcy5zaG93UG9wdXBcbiAgICB9LFxuXG4gICAgaW5wdXQoKSB7XG4gICAgICByZXR1cm4gZ2V0VGFyZ2V0KHRoaXMpPy5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpXG4gICAgfSxcblxuICAgIGZvcm1hdE9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsb2NhbGU6IHRoaXMubG9jYWxlLFxuICAgICAgICAuLi50aGlzLmZvcm1hdFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VGV4dDoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gZm9ybWF0KHRoaXMuY3VycmVudFZhbHVlLCB0aGlzLmZvcm1hdE9wdGlvbnMpIHx8ICcnXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IHBhcnNlRGF0ZSh2YWx1ZSwgdGhpcy5mb3JtYXRPcHRpb25zKVxuICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gZGF0ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgbW9kZWxWYWx1ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKCt0byAhPT0gK2Zyb20pIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSB0b1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VmFsdWUodmFsdWUpIHtcbiAgICAgIGlmICgrdmFsdWUgIT09ICt0aGlzLm1vZGVsVmFsdWUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCB2YWx1ZSlcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdmFsdWUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNob3coc2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBzaG93XG4gICAgfSxcblxuICAgIHNob3dQb3B1cCh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvIF4gZnJvbSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6c2hvdycsIHRvKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1c2VkKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gXiBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQodG8gPyAnZm9jdXMnIDogJ2JsdXInKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25Gb2N1cyhmb2N1cykge1xuICAgICAgdGhpcy5pbnB1dEZvY3VzZWQgPSBmb2N1c1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBmb2N1c1xuICAgIH0sXG5cbiAgICBvbktleURvd24oZXZlbnQpIHtcbiAgICAgIGNvbnN0IHsgdmVyOiBzdGVwLCBlbnRlciB9ID0gZ2V0S2V5TmF2aWdhdGlvbihldmVudClcbiAgICAgIGlmIChzdGVwIHx8IGVudGVyKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcblxuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IGdldFNlbGVjdGlvbih0aGlzLmlucHV0KT8uc3RhcnRcbiAgICAgICAgY29uc3QgZ2V0RGF0ZVBhcnQgPSBwb3NpdGlvbiA9PlxuICAgICAgICAgIGdldERhdGVQYXJ0QXRQb3NpdGlvbih0aGlzLmN1cnJlbnRUZXh0LCBwb3NpdGlvbiwgdGhpcy5mb3JtYXRPcHRpb25zKVxuXG4gICAgICAgIGlmIChzdGVwICYmICF0aGlzLnNob3dQb3B1cCkge1xuICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHsgY2FsZW5kYXIgfSA9IHRoaXMuJHJlZnNcbiAgICAgICAgICBpZiAoY2FsZW5kYXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgbmFtZTogbW9kZSwgc3RhcnQgfSA9IGdldERhdGVQYXJ0KHBvc2l0aW9uKSB8fCB7fVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBtb2RlICYmXG4gICAgICAgICAgICAgIGNhbGVuZGFyLm5hdmlnYXRlKHsgc3RlcCwgZW50ZXIsIG1vZGUsIHVwZGF0ZTogdHJ1ZSB9KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHNldFNlbGVjdGlvbih0aGlzLmlucHV0LCBnZXREYXRlUGFydChzdGFydCkpKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbk1vdXNlRG93bih0b2dnbGUpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gIXRoaXMuZGlzYWJsZWQgJiYgKCF0b2dnbGUgfHwgIXRoaXMuc2hvd1BvcHVwKVxuICAgICAgaWYgKHRoaXMuc2hvd1BvcHVwKSB7XG4gICAgICAgIHRoaXMuZm9jdXMoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyKCkge1xuICAgICAgdGhpcy5pbnB1dC5ibHVyKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWRhdGUtcGlja2VyIHtcbiAgLmRpdG8taW5wdXQge1xuICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWluLXdpZHRoOiA4ZW07XG4gIH1cbn1cblxuLmRpdG8tZGF0ZS1waWNrZXItcG9wdXAge1xuICBtYXJnaW46ICRwb3B1cC1tYXJnaW47XG59XG48L3N0eWxlPlxuIiwiPCEtLSBEZXJpdmVkIGZyb20gQVRVSSwgYW5kIGZ1cnRoZXIgZXh0ZW5kZWQ6IGh0dHBzOi8vYWxpcWluLmdpdGh1Yi5pby9hdHVpLyAtLT5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5UcmlnZ2VyLmRpdG8tdGltZS1waWNrZXIoXG4gIHJlZj1cInRyaWdnZXJcIlxuICB2LW1vZGVsOnNob3c9XCJzaG93UG9wdXBcIlxuICB0cmlnZ2VyPVwiZm9jdXNcIlxuICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlbWVudCwgZGlzYWJsZWQsIHRhcmdldCB9XCJcbilcbiAgdGVtcGxhdGUoI3RyaWdnZXIpXG4gICAgc2xvdChcbiAgICAgIHYtaWY9XCIkc2xvdHMudHJpZ2dlclwiXG4gICAgICBuYW1lPVwidHJpZ2dlclwiXG4gICAgKVxuICAgIElucHV0RmllbGQuZGl0by10aW1lLXBpY2tlci1pbnB1dChcbiAgICAgIHYtZWxzZVxuICAgICAgcmVmPVwiaW5wdXRcIlxuICAgICAgdi1tb2RlbD1cImN1cnJlbnRUZXh0XCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBmb2N1c2VkIH1cIlxuICAgICAgdi1iaW5kPVwieyBwbGFjZWhvbGRlciwgZGlzYWJsZWQsIC4uLiRhdHRycyB9XCJcbiAgICAgIEBmb2N1cz1cIm9uRm9jdXModHJ1ZSlcIlxuICAgICAgQGJsdXI9XCJvbkZvY3VzKGZhbHNlKVwiXG4gICAgICBAa2V5ZG93bj1cIm9uS2V5RG93blwiXG4gICAgICBAbW91c2Vkb3duLnN0b3A9XCJvbk1vdXNlRG93bihmYWxzZSlcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKCNiZWZvcmUpXG4gICAgICAgIHNsb3QobmFtZT1cImJlZm9yZVwiKVxuICAgICAgdGVtcGxhdGUoI2FmdGVyKVxuICAgICAgICBJY29uKFxuICAgICAgICAgIG5hbWU9XCJjbG9ja1wiXG4gICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICAgIEBtb3VzZWRvd24ucHJldmVudD1cIm9uTW91c2VEb3duKHRydWUpXCJcbiAgICAgICAgKVxuICAgICAgICBzbG90KG5hbWU9XCJhZnRlclwiKVxuICB0ZW1wbGF0ZSgjcG9wdXApXG4gICAgLmRpdG8tdGltZS1waWNrZXItcG9wdXBcbiAgICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICAgIHVsLmRpdG8tdGltZS1waWNrZXItaG91cihyZWY9XCJob3VyXCIpXG4gICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDI0XCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBsaShcbiAgICAgICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZEhvdXIoaW5kZXggLSAxKVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IGhvdXIgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwiaG91ciA9IGluZGV4IC0gMVwiXG4gICAgICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuICAgICAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICAgICAgdWwuZGl0by10aW1lLXBpY2tlci1taW51dGUocmVmPVwibWludXRlXCIpXG4gICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDYwXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBsaShcbiAgICAgICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZE1pbnV0ZShpbmRleCAtIDEpXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwieyBzZWxlY3RlZDogbWludXRlID09PSBpbmRleCAtIDEgfVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cIm1pbnV0ZSA9IGluZGV4IC0gMVwiXG4gICAgICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuICAgICAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICAgICAgdWwuZGl0by10aW1lLXBpY2tlci1zZWNvbmQocmVmPVwic2Vjb25kXCIpXG4gICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDYwXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBsaShcbiAgICAgICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZFNlY29uZChpbmRleCAtIDEpXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwieyBzZWxlY3RlZDogc2Vjb25kID09PSBpbmRleCAtIDEgfVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlY29uZCA9IGluZGV4IC0gMVwiXG4gICAgICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGZvcm1hdCwgZGVmYXVsdEZvcm1hdHMgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IFRyaWdnZXIgZnJvbSAnLi9UcmlnZ2VyLnZ1ZSdcbmltcG9ydCBJbnB1dEZpZWxkIGZyb20gJy4vSW5wdXRGaWVsZC52dWUnXG5pbXBvcnQgSWNvbiBmcm9tICcuL0ljb24udnVlJ1xuaW1wb3J0IHsgYWx0ZXJEYXRlLCBwYXJzZURhdGUsIGdldERhdGVQYXJ0QXRQb3NpdGlvbiB9IGZyb20gJy4uL3V0aWxzL2RhdGUuanMnXG5pbXBvcnQgeyBnZXRTZWxlY3Rpb24sIHNldFNlbGVjdGlvbiB9IGZyb20gJy4uL3V0aWxzL3NlbGVjdGlvbi5qcydcbmltcG9ydCB7IGdldEtleU5hdmlnYXRpb24gfSBmcm9tICcuLi91dGlscy9ldmVudC5qcydcbmltcG9ydCB7IGdldFRhcmdldCB9IGZyb20gJy4uL3V0aWxzL3RyaWdnZXIuanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czogeyBUcmlnZ2VyLCBJbnB1dEZpZWxkLCBJY29uIH0sXG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJywgJ3VwZGF0ZTpzaG93JywgJ2NoYW5nZScsICdmb2N1cycsICdibHVyJ10sXG4gIGluaGVyaXRBdHRyczogZmFsc2UsXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlbWVudDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdib3R0b20tbGVmdCcgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB0YXJnZXQ6IHsgdHlwZTogW1N0cmluZywgSFRNTEVsZW1lbnRdLCBkZWZhdWx0OiAndHJpZ2dlcicgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZm9ybWF0OiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiAoKSA9PiAoe1xuICAgICAgICB0aW1lOiBkZWZhdWx0Rm9ybWF0cy50aW1lLFxuICAgICAgICBkYXRlOiBmYWxzZVxuICAgICAgfSlcbiAgICB9LFxuICAgIGRpc2FibGVkSG91cjogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfSxcbiAgICBkaXNhYmxlZE1pbnV0ZTogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfSxcbiAgICBkaXNhYmxlZFNlY29uZDogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy5tb2RlbFZhbHVlLFxuICAgICAgc2hvd1BvcHVwOiB0aGlzLnNob3csXG4gICAgICBpbnB1dEZvY3VzZWQ6IGZhbHNlLFxuICAgICAgaWdub3JlTmV4dENoYW5nZTogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb2N1c2VkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5wdXRGb2N1c2VkIHx8IHRoaXMuc2hvd1BvcHVwXG4gICAgfSxcblxuICAgIGlucHV0KCkge1xuICAgICAgcmV0dXJuIGdldFRhcmdldCh0aGlzKT8ucXVlcnlTZWxlY3RvcignaW5wdXQnKVxuICAgIH0sXG5cbiAgICBmb3JtYXRPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZSxcbiAgICAgICAgLi4udGhpcy5mb3JtYXRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFRleHQ6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdCh0aGlzLmN1cnJlbnRWYWx1ZSwgdGhpcy5mb3JtYXRPcHRpb25zKSB8fCAnJ1xuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBwYXJzZURhdGUodmFsdWUsIHRoaXMuZm9ybWF0T3B0aW9ucylcbiAgICAgICAgaWYgKGRhdGUpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGRhdGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50RGF0ZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlIHx8XG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBEYXRlKCkgb2JqZWN0IHdpdGggdGhlIHRpbWUgc2V0IHRvIDAsIHRvIGJlIHVzZWQgd2hlblxuICAgICAgICAvLyBmaXJzdCBzZXR0aW5nIGFueSBvZiB0aGUgdGltZXMsIGZvciBtZWFuaW5nZnVsIGRhdGVzIGluIGNhc2UgdGhlXG4gICAgICAgIC8vIG9iamVjdCBpcyBzaGFyZWQgd2l0aCBhIERhdGVQaWNrZXIsIGUuZy4gdGhyb3VnaCBEYXRlVGltZVBpY2tlci5cbiAgICAgICAgYWx0ZXJEYXRlKG5ldyBEYXRlKCksIHsgaG91cjogMCwgbWludXRlOiAwLCBzZWNvbmQ6IDAsIG1pbGxpc2Vjb25kOiAwIH0pXG4gICAgICApXG4gICAgfSxcblxuICAgIGhvdXI6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudERhdGUuZ2V0SG91cnMoKVxuICAgICAgfSxcblxuICAgICAgc2V0KGhvdXIpIHtcbiAgICAgICAgdGhpcy5zZXRUaW1lKHsgaG91ciB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtaW51dGU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudERhdGUuZ2V0TWludXRlcygpXG4gICAgICB9LFxuXG4gICAgICBzZXQobWludXRlKSB7XG4gICAgICAgIHRoaXMuc2V0VGltZSh7IG1pbnV0ZSB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZWNvbmQ6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudERhdGUuZ2V0U2Vjb25kcygpXG4gICAgICB9LFxuXG4gICAgICBzZXQoc2Vjb25kKSB7XG4gICAgICAgIHRoaXMuc2V0VGltZSh7IHNlY29uZCB9KVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUodG8sIGZyb20pIHtcbiAgICAgIGlmICgrdG8gIT09ICtmcm9tKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdG9cbiAgICAgICAgdGhpcy5zY3JvbGxBbGwodHJ1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKHZhbHVlKSB7XG4gICAgICBpZiAoK3ZhbHVlICE9PSArdGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgdmFsdWUpXG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHZhbHVlKVxuICAgICAgICB0aGlzLnNjcm9sbEFsbCh0cnVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VGV4dCgpIHtcbiAgICAgIGNvbnN0IHsgaW5wdXQgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IGdldFNlbGVjdGlvbihpbnB1dClcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5mb2N1c2VkICYmXG4gICAgICAgICF0aGlzLmlnbm9yZU5leHRDaGFuZ2UgJiZcbiAgICAgICAgc2VsZWN0aW9uLnN0YXJ0ID09PSBzZWxlY3Rpb24uZW5kXG4gICAgICApIHtcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gc2V0U2VsZWN0aW9uKGlucHV0LCBzZWxlY3Rpb24pKVxuICAgICAgfVxuICAgICAgdGhpcy5pZ25vcmVOZXh0Q2hhbmdlID0gZmFsc2VcbiAgICB9LFxuXG4gICAgc2hvdyhzaG93KSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9IHNob3dcbiAgICB9LFxuXG4gICAgc2hvd1BvcHVwKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8pIHtcbiAgICAgICAgdGhpcy5zY3JvbGxBbGwoZmFsc2UpXG4gICAgICB9XG4gICAgICBpZiAodG8gXiBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpzaG93JywgdG8pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCh0byA/ICdmb2N1cycgOiAnYmx1cicpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBsZWZ0UGFkKHZhbHVlKSB7XG4gICAgICByZXR1cm4gKCcwJyArIHZhbHVlKS5zbGljZSgtMilcbiAgICB9LFxuXG4gICAgc2V0VGltZShvdmVycmlkZXMpIHtcbiAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gYWx0ZXJEYXRlKHRoaXMuY3VycmVudERhdGUsIHtcbiAgICAgICAgLi4ub3ZlcnJpZGVzLFxuICAgICAgICBtaWxsaXNlY29uZDogMFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc2Nyb2xsQWxsKHNtb290aCkge1xuICAgICAgY29uc3Qgc2Nyb2xsID0gKHJlZiwgdmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy4kcmVmc1tyZWZdXG4gICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICBjb25zdCBsaW5lSGVpZ2h0ID0gKFxuICAgICAgICAgICAgdGFyZ2V0LnNjcm9sbEhlaWdodCAvXG4gICAgICAgICAgICAvLyBGaXJzdCBhbmQgbGFzdCBvbmUgYWRkIDMgdGltZXMgdGhlIG1hcmdpbi5cbiAgICAgICAgICAgICh0YXJnZXQuY2hpbGRFbGVtZW50Q291bnQgKyA2KVxuICAgICAgICAgIClcbiAgICAgICAgICBjb25zdCB0b3AgPSBNYXRoLnJvdW5kKHZhbHVlICogbGluZUhlaWdodClcbiAgICAgICAgICBjb25zdCBkaXN0YW5jZSA9IE1hdGguYWJzKHRhcmdldC5zY3JvbGxUb3AgLSB0b3ApXG4gICAgICAgICAgdGFyZ2V0LnNjcm9sbFRvKHtcbiAgICAgICAgICAgIHRvcCxcbiAgICAgICAgICAgIGJlaGF2aW9yOiBzbW9vdGggJiYgZGlzdGFuY2UgPCAxMDAgPyAnc21vb3RoJyA6ICdhdXRvJ1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgc2Nyb2xsKCdob3VyJywgdGhpcy5ob3VyKVxuICAgICAgICBzY3JvbGwoJ21pbnV0ZScsIHRoaXMubWludXRlKVxuICAgICAgICBzY3JvbGwoJ3NlY29uZCcsIHRoaXMuc2Vjb25kKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb25Gb2N1cyhmb2N1cykge1xuICAgICAgdGhpcy5pbnB1dEZvY3VzZWQgPSBmb2N1c1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBmb2N1c1xuICAgIH0sXG5cbiAgICBvbktleURvd24oZXZlbnQpIHtcbiAgICAgIGNvbnN0IHsgaW5wdXQgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IGdldFNlbGVjdGlvbihpbnB1dClcbiAgICAgIGNvbnN0IHsgdmVyOiBzdGVwLCBlbnRlciB9ID0gZ2V0S2V5TmF2aWdhdGlvbihldmVudClcbiAgICAgIGlmIChzdGVwIHx8IGVudGVyKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcblxuICAgICAgICBjb25zdCBnZXREYXRlUGFydCA9IHBvc2l0aW9uID0+XG4gICAgICAgICAgZ2V0RGF0ZVBhcnRBdFBvc2l0aW9uKHRoaXMuY3VycmVudFRleHQsIHBvc2l0aW9uLCB0aGlzLmZvcm1hdE9wdGlvbnMpXG5cbiAgICAgICAgaWYgKHN0ZXApIHtcbiAgICAgICAgICBpZiAoIXRoaXMuc2hvd1BvcHVwKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IHRydWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeyBuYW1lLCBzdGFydCB9ID0gZ2V0RGF0ZVBhcnQoc2VsZWN0aW9uLnN0YXJ0KSB8fCB7fVxuICAgICAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW25hbWVdICsgc3RlcFxuICAgICAgICAgICAgICBjb25zdCBjb3VudCA9IHRoaXMuJHJlZnNbbmFtZV0uY2hpbGRFbGVtZW50Q291bnRcbiAgICAgICAgICAgICAgdGhpc1tuYW1lXSA9XG4gICAgICAgICAgICAgICAgdmFsdWUgPCAwXG4gICAgICAgICAgICAgICAgICA/IHZhbHVlICsgY291bnRcbiAgICAgICAgICAgICAgICAgIDogdmFsdWUgPj0gY291bnRcbiAgICAgICAgICAgICAgICAgICAgPyB2YWx1ZSAtIGNvdW50XG4gICAgICAgICAgICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgICAgICAgdGhpcy5pZ25vcmVOZXh0Q2hhbmdlID0gdHJ1ZVxuICAgICAgICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiBzZXRTZWxlY3Rpb24oaW5wdXQsIGdldERhdGVQYXJ0KHN0YXJ0KSkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGVudGVyKSB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNlbGVjdGlvbi5zdGFydCA9PT0gc2VsZWN0aW9uLmVuZCkge1xuICAgICAgICBjb25zdCB7IHZhbHVlIH0gPSBpbnB1dFxuICAgICAgICBsZXQgcG9zID0gc2VsZWN0aW9uLnN0YXJ0XG5cbiAgICAgICAgY29uc3QgaXNEaWdpdCA9IGNoYXIgPT4gIWlzTmFOKE51bWJlcihjaGFyKSlcblxuICAgICAgICBpZiAoZXZlbnQua2V5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIGlmIChpc0RpZ2l0KGV2ZW50LmtleSkgJiYgcG9zIDwgdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHZhbHVlW3Bvc10gPT09ICc6JyAmJlxuICAgICAgICAgICAgICBpc0RpZ2l0KHZhbHVlW3BvcyAtIDFdKSAmJlxuICAgICAgICAgICAgICBpc0RpZ2l0KHZhbHVlW3BvcyAtIDJdKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHBvcysrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBSZW1vdmUgbmV4dCBkaWdpdCBzbyB0aGUgZXZlbnQgb3ZlcnJpZGVzIGl0IGluc3RlYWQgb2YgaW5zZXJ0aW5nXG4gICAgICAgICAgICAvLyBuZXcgY2hhcnMuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGlzRGlnaXQodmFsdWVbcG9zXSkgJiYgKFxuICAgICAgICAgICAgICAgIGlzRGlnaXQodmFsdWVbcG9zICsgMV0pIHx8XG4gICAgICAgICAgICAgICAgaXNEaWdpdCh2YWx1ZVtwb3MgLSAxXSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGlucHV0LnZhbHVlID0gKFxuICAgICAgICAgICAgICAgIHZhbHVlLnNsaWNlKDAsIHBvcykgK1xuICAgICAgICAgICAgICAgIHZhbHVlLnNsaWNlKHBvcyArIDEpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc2V0U2VsZWN0aW9uKGlucHV0LCB7IHN0YXJ0OiBwb3MsIGVuZDogcG9zIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IGZvcm1hdCh0aGlzLmN1cnJlbnRWYWx1ZSwgdGhpcy5mb3JtYXRPcHRpb25zKS5sZW5ndGhcbiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IGxlbmd0aCkge1xuICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA+IGxlbmd0aCkge1xuICAgICAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIGxlbmd0aClcbiAgICAgICAgICAgICAgc2V0U2VsZWN0aW9uKGlucHV0LCBzZWxlY3Rpb24pXG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJykge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHBvcyA9PT0gMSB8fFxuICAgICAgICAgICAgWycgJywgJzonXS5pbmNsdWRlcyh2YWx1ZVtwb3MgLSAyXSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgcG9zID09PSB2YWx1ZS5sZW5ndGggfHxcbiAgICAgICAgICAgICAgdmFsdWVbcG9zXSA9PT0gJzonXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcG9zLS1cbiAgICAgICAgICAgICAgaW5wdXQudmFsdWUgPSAoXG4gICAgICAgICAgICAgICAgdmFsdWUuc2xpY2UoMCwgcG9zKSArXG4gICAgICAgICAgICAgICAgKCh2YWx1ZVtwb3MgLSAxXSA/PyAnJykgKyAnMDAnKSArXG4gICAgICAgICAgICAgICAgdmFsdWUuc2xpY2UocG9zICsgMSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBzZXRTZWxlY3Rpb24oaW5wdXQsIHsgc3RhcnQ6IHBvcywgZW5kOiBwb3MgfSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgIGlzRGlnaXQodmFsdWVbcG9zXSkgJiZcbiAgICAgICAgICAgICAgIWlzRGlnaXQoK3ZhbHVlW3BvcyArIDFdKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIC8vIFdoZW4gcmVtb3ZpbmcgdGhlIGZpcnN0IG9mIHR3byBkaWdpdHMsIHJlcGxhY2Ugd2l0aCAwXG4gICAgICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgcG9zKSArICcwJyArIHZhbHVlLnNsaWNlKHBvcylcbiAgICAgICAgICAgICAgc2V0U2VsZWN0aW9uKGlucHV0LCB7IHN0YXJ0OiBwb3MsIGVuZDogcG9zIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uTW91c2VEb3duKHRvZ2dsZSkge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSAhdGhpcy5kaXNhYmxlZCAmJiAoIXRvZ2dsZSB8fCAhdGhpcy5zaG93UG9wdXApXG4gICAgICBpZiAodGhpcy5zaG93UG9wdXApIHtcbiAgICAgICAgdGhpcy5mb2N1cygpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy5pbnB1dC5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLmlucHV0LmJsdXIoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdGltZS1waWNrZXIge1xuICAuZGl0by1pbnB1dCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWluLXdpZHRoOiA2ZW07XG4gIH1cbn1cblxuLmRpdG8tdGltZS1waWNrZXItcG9wdXAge1xuICBtYXgtd2lkdGg6IDE2MHB4O1xuICBtYXJnaW46ICRwb3B1cC1tYXJnaW47XG59XG5cbiR0aW1lLXBpY2tlci1saW5lLWhlaWdodDogMjRweDtcblxuLmRpdG8tdGltZS1waWNrZXIge1xuICAuZGl0by1pbnB1dCB7XG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxufVxuXG4uZGl0by10aW1lLXBpY2tlci1wb3B1cCB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgYm94LXNoYWRvdzogJHNoYWRvdy13aW5kb3c7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5kaXRvLXRpbWUtcGlja2VyLXBvcHVwIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsIHtcbiAgZmxvYXQ6IGxlZnQ7XG4gIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgYm9yZGVyLXdpZHRoOiAwIDFweCAwO1xuICBtYXJnaW4tbGVmdDogLTFweDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgd2lkdGg6IGNhbGMoMTAwJSAvIDMgKyAxcHgpO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICY6bGFzdC1jaGlsZCB7XG4gICAgYm9yZGVyLXJpZ2h0OiAwO1xuICB9XG5cbiAgdWwge1xuICAgIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luOiAwO1xuICAgIC8vIEhpZGUgc2Nyb2xsYmFyOlxuICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICAgIHBhZGRpbmc6IDAgMTdweCAwIDA7XG4gICAgaGVpZ2h0OiA3ICogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0O1xuXG4gICAgJiA+IGxpIHtcbiAgICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6ICR0aW1lLXBpY2tlci1saW5lLWhlaWdodDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAkdGltZS1waWNrZXItbGluZS1oZWlnaHQ7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi10b3A6IDMgKiAkdGltZS1waWNrZXItbGluZS1oZWlnaHQ7XG4gICAgICB9XG5cbiAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDMgKiAkdGltZS1waWNrZXItbGluZS1oZWlnaHQ7XG4gICAgICB9XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItaGlnaGxpZ2h0O1xuICAgICAgfVxuXG4gICAgICAmLnNlbGVjdGVkLFxuICAgICAgJi5zZWxlY3RlZDpob3ZlciB7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZDtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZTtcbiAgICAgIH1cblxuICAgICAgJi5kaXNhYmxlZCB7XG4gICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICAgY29sb3I6ICRjb2xvci1kaXNhYmxlZDtcbiAgICAgIH1cblxuICAgICAgJi5kaXNhYmxlZDpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1kYXRlLXRpbWUtcGlja2VyKHJlZj1cInBpY2tlclwiKVxuICAuZGl0by1kYXRlLXRpbWUtcGlja2VyX19pbm5lcig6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogZm9jdXNlZCB9XCIpXG4gICAgSW5wdXRGaWVsZC5kaXRvLWRhdGUtdGltZS1waWNrZXJfX2lucHV0KFxuICAgICAgcmVmPVwiaW5wdXRcIlxuICAgICAgdi1tb2RlbD1cImN1cnJlbnRUZXh0XCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBmb2N1c2VkIH1cIlxuICAgICAgdi1iaW5kPVwieyBwbGFjZWhvbGRlciwgZGlzYWJsZWQsIC4uLiRhdHRycyB9XCJcbiAgICAgIEBmb2N1cz1cIm9uRm9jdXModHJ1ZSlcIlxuICAgICAgQGJsdXI9XCJvbkZvY3VzKGZhbHNlKVwiXG4gICAgICBAa2V5ZG93bj1cIm9uS2V5RG93blwiXG4gICAgICBAbW91c2Vkb3duLnN0b3A9XCJvbk1vdXNlRG93bihmYWxzZSlcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKCNiZWZvcmUpXG4gICAgICAgIHNsb3QobmFtZT1cImJlZm9yZVwiKVxuICAgICAgdGVtcGxhdGUoI2FmdGVyKVxuICAgICAgICBJY29uKFxuICAgICAgICAgIG5hbWU9XCJjYWxlbmRhclwiXG4gICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICAgIEBtb3VzZWRvd24ucHJldmVudD1cIm9uTW91c2VEb3duKHRydWUpXCJcbiAgICAgICAgKVxuICAgICAgICBzbG90KG5hbWU9XCJhZnRlclwiKVxuICAgIERhdGVQaWNrZXIoXG4gICAgICByZWY9XCJkYXRlXCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgdi1tb2RlbDpzaG93PVwic2hvd0RhdGVcIlxuICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgOnRhcmdldD1cIiRyZWZzLnBpY2tlclwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZSgjdHJpZ2dlcilcbiAgICAgICAgLy8tIEludGVudGlvbmFsbHkgZW1wdHlcbiAgICBUaW1lUGlja2VyKFxuICAgICAgcmVmPVwidGltZVwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICAgIHYtbW9kZWw6c2hvdz1cInNob3dUaW1lXCJcbiAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiXG4gICAgICA6dGFyZ2V0PVwiJHJlZnMucGlja2VyXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKCN0cmlnZ2VyKVxuICAgICAgICAvLy0gSW50ZW50aW9uYWxseSBlbXB0eVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGZvcm1hdCwgZGVmYXVsdEZvcm1hdHMsIGFzc2lnbkRlZXBseSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgSW5wdXRGaWVsZCBmcm9tICcuL0lucHV0RmllbGQudnVlJ1xuaW1wb3J0IERhdGVQaWNrZXIgZnJvbSAnLi9EYXRlUGlja2VyLnZ1ZSdcbmltcG9ydCBUaW1lUGlja2VyIGZyb20gJy4vVGltZVBpY2tlci52dWUnXG5pbXBvcnQgSWNvbiBmcm9tICcuL0ljb24udnVlJ1xuaW1wb3J0IHsgcGFyc2VEYXRlIH0gZnJvbSAnLi4vdXRpbHMvZGF0ZS5qcydcbmltcG9ydCB7IGdldFNlbGVjdGlvbiwgc2V0U2VsZWN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvc2VsZWN0aW9uLmpzJ1xuaW1wb3J0IHsgZ2V0S2V5TmF2aWdhdGlvbiB9IGZyb20gJy4uL3V0aWxzL2V2ZW50LmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHsgSW5wdXRGaWVsZCwgRGF0ZVBpY2tlciwgVGltZVBpY2tlciwgSWNvbiB9LFxuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZScsICdjaGFuZ2UnLCAnZm9jdXMnLCAnYmx1ciddLFxuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBEYXRlLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdHJhbnNpdGlvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdzbGlkZScgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGxvY2FsZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdlbi1VUycgfSxcbiAgICBmb3JtYXQ6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VmFsdWU6IHRoaXMubW9kZWxWYWx1ZSxcbiAgICAgIHNob3dEYXRlOiBmYWxzZSxcbiAgICAgIHNob3dUaW1lOiBmYWxzZSxcbiAgICAgIGlucHV0Rm9jdXNlZDogZmFsc2UsXG4gICAgICBkYXRlRm9jdXNlZDogZmFsc2UsXG4gICAgICB0aW1lRm9jdXNlZDogZmFsc2UsXG4gICAgICBjbG9zZWRNb2RlOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgYXR0cmlidXRlcygpIHtcbiAgICAgIGNvbnN0IHsgdHJhbnNpdGlvbiwgZGlzYWJsZWQsIGxvY2FsZSwgZm9ybWF0T3B0aW9uczogZm9ybWF0IH0gPSB0aGlzXG4gICAgICByZXR1cm4geyB0cmFuc2l0aW9uLCBkaXNhYmxlZCwgbG9jYWxlLCBmb3JtYXQgfVxuICAgIH0sXG5cbiAgICBmb2N1c2VkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5wdXRGb2N1c2VkIHx8IHRoaXMuc2hvd0RhdGUgfHwgdGhpcy5zaG93VGltZVxuICAgIH0sXG5cbiAgICBpbnB1dCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZWZzLmlucHV0LmlucHV0XG4gICAgfSxcblxuICAgIGZvcm1hdE9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gYXNzaWduRGVlcGx5KFxuICAgICAgICB7XG4gICAgICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZSxcbiAgICAgICAgICB0aW1lOiBkZWZhdWx0Rm9ybWF0cy50aW1lLFxuICAgICAgICAgIGRhdGU6IGRlZmF1bHRGb3JtYXRzLmRhdGVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgIG1vbnRoOiAnc2hvcnQnLFxuICAgICAgICAgICAgZm9ybWF0OiAodmFsdWUsIHR5cGUsIG9wdGlvbnMpID0+XG4gICAgICAgICAgICAgIHR5cGUgPT09ICdsaXRlcmFsJyAmJiAvXFxiYXRcXGIvLnRlc3QodmFsdWUpXG4gICAgICAgICAgICAgICAgPyAnLCAnXG4gICAgICAgICAgICAgICAgOiB0aGlzLmZvcm1hdD8uZGF0ZT8uZm9ybWF0Py4odmFsdWUsIHR5cGUsIG9wdGlvbnMpID8/IHZhbHVlXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB0aGlzLmZvcm1hdFxuICAgICAgKVxuICAgIH0sXG5cbiAgICB0aW1lSW5kZXgoKSB7XG4gICAgICBjb25zdCB0ZXh0ID0gdGhpcy5jdXJyZW50VGV4dFxuICAgICAgaWYgKHRleHQpIHtcbiAgICAgICAgY29uc3QgdGltZSA9IHRleHQubWF0Y2goLyhbXFxTXStcXHMqKSQvKT8uWzFdXG4gICAgICAgIGlmICh0aW1lKSB7XG4gICAgICAgICAgcmV0dXJuIHRleHQubGVuZ3RoIC0gdGltZS5sZW5ndGhcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgY3VycmVudFRleHQ6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdCh0aGlzLmN1cnJlbnRWYWx1ZSwgdGhpcy5mb3JtYXRPcHRpb25zKSB8fCAnJ1xuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBwYXJzZURhdGUodmFsdWUsIHRoaXMuZm9ybWF0T3B0aW9ucylcbiAgICAgICAgaWYgKGRhdGUpIHtcbiAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSBnZXRTZWxlY3Rpb24odGhpcy5pbnB1dClcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGRhdGVcbiAgICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiBzZXRTZWxlY3Rpb24odGhpcy5pbnB1dCwgc2VsZWN0aW9uKSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUodG8sIGZyb20pIHtcbiAgICAgIGlmICgrdG8gIT09ICtmcm9tKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdG9cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKHZhbHVlKSB7XG4gICAgICBpZiAoK3ZhbHVlICE9PSArdGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgdmFsdWUpXG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1c2VkKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gXiBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQodG8gPyAnZm9jdXMnIDogJ2JsdXInKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25Gb2N1cyhmb2N1cykge1xuICAgICAgdGhpcy5pbnB1dEZvY3VzZWQgPSBmb2N1c1xuICAgICAgaWYgKGZvY3VzKSB7XG4gICAgICAgIHRoaXMudXBkYXRlUG9wdXBzKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2hvd0RhdGUgPSBmYWxzZVxuICAgICAgICB0aGlzLnNob3dUaW1lID0gZmFsc2VcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25Nb3VzZURvd24odG9nZ2xlKSB7XG4gICAgICBpZiAodG9nZ2xlICYmICh0aGlzLnNob3dEYXRlIHx8IHRoaXMuc2hvd1RpbWUpKSB7XG4gICAgICAgIHRoaXMuc2hvd0RhdGUgPSBmYWxzZVxuICAgICAgICB0aGlzLnNob3dUaW1lID0gZmFsc2VcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5mb2N1cygpXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLnVwZGF0ZVBvcHVwcygpKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbktleURvd24oZXZlbnQpIHtcbiAgICAgIGNvbnN0IG1vZGUgPSB0aGlzLmdldE1vZGUoZXZlbnQpXG4gICAgICB0aGlzLiRyZWZzW21vZGVdLm9uS2V5RG93bihldmVudClcbiAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgIHRoaXMuY2xvc2VkTW9kZSA9IG1vZGVcbiAgICAgIH0gZWxzZSBpZiAobW9kZSAhPT0gdGhpcy5jbG9zZWRNb2RlKSB7XG4gICAgICAgIHRoaXMudXBkYXRlUG9wdXBzKG1vZGUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldE1vZGUoZXZlbnQgPSBudWxsKSB7XG4gICAgICBjb25zdCB7IHN0YXJ0IH0gPSBnZXRTZWxlY3Rpb24odGhpcy5pbnB1dClcbiAgICAgIGNvbnN0IHsgaG9yOiBzdGVwIH0gPSBnZXRLZXlOYXZpZ2F0aW9uKGV2ZW50KVxuICAgICAgcmV0dXJuIHRoaXMudGltZUluZGV4ID09PSBudWxsIHx8IHN0YXJ0ICsgc3RlcCA8IHRoaXMudGltZUluZGV4XG4gICAgICAgID8gJ2RhdGUnXG4gICAgICAgIDogJ3RpbWUnXG4gICAgfSxcblxuICAgIHVwZGF0ZVBvcHVwcyhtb2RlID0gdGhpcy5nZXRNb2RlKCkpIHtcbiAgICAgIGlmIChtb2RlKSB7XG4gICAgICAgIHRoaXMuY2xvc2VkTW9kZSA9IG51bGxcbiAgICAgIH1cbiAgICAgIHRoaXMuc2hvd0RhdGUgPSBtb2RlID09PSAnZGF0ZSdcbiAgICAgIHRoaXMuc2hvd1RpbWUgPSBtb2RlID09PSAndGltZSdcbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLmlucHV0LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuaW5wdXQuYmx1cigpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1kYXRlLXRpbWUtcGlja2VyIHtcbiAgJl9faW5uZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gIH1cblxuICAmX19pbnB1dCB7XG4gICAgZmxleDogMTtcbiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgIG1pbi13aWR0aDogMTJlbTtcbiAgfVxuXG4gIC5kaXRvLWRhdGUtcGlja2VyLFxuICAuZGl0by10aW1lLXBpY2tlciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPCEtLSBlc2xpbnQtZGlzYWJsZSB2dWUvbm8tdGVtcGxhdGUtc2hhZG93IC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXBhZ2luYXRpb25cbiAgLmRpdG8tcGFnaW5hdGlvbi10b3RhbChcbiAgICB2LWlmPVwic2hvd1RvdGFsXCJcbiAgKVxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1pZj1cInRvdGFsID4gMFwiXG4gICAgKSB7eyBmaXJzdCB9fSDigJMge3sgbGFzdCB9fSAvIHt7IHRvdGFsIH19XG4gIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICAgIHYtaWY9XCJudW1QYWdlcyA+IDFcIlxuICApXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgdi1mb3I9XCJidXR0b24gaW4gYnV0dG9uc1wiXG4gICAgICA6Y2xhc3M9XCJnZXRCdXR0b25DbGFzc2VzKGJ1dHRvbilcIlxuICAgICAgOmRpc2FibGVkPVwiYnV0dG9uLmRpc2FibGVkXCJcbiAgICAgIEBjbGljaz1cIm9uQ2xpY2tCdXR0b24oYnV0dG9uKVwiXG4gICAgKVxuICAgICAgc3BhbihcbiAgICAgICAgdi1pZj1cImJ1dHRvbi50ZXh0XCJcbiAgICAgICkge3sgYnV0dG9uLnRleHQgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTpwYWdlJ10sXG5cbiAgcHJvcHM6IHtcbiAgICB0b3RhbDogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfSxcbiAgICBwYWdlOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMSB9LFxuICAgIHBhZ2VTaXplOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMTAgfSxcbiAgICBzaG93VG90YWw6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvd1ByZXY6IHRydWUsXG4gICAgICBzaG93TmV4dDogdHJ1ZSxcbiAgICAgIGN1cnJlbnRQYWdlOiB0aGlzLnBhZ2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmaXJzdCgpIHtcbiAgICAgIHJldHVybiAodGhpcy5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5wYWdlU2l6ZSArIDFcbiAgICB9LFxuXG4gICAgbGFzdCgpIHtcbiAgICAgIHJldHVybiBNYXRoLm1pbih0aGlzLmZpcnN0ICsgdGhpcy5wYWdlU2l6ZSAtIDEsIHRoaXMudG90YWwpXG4gICAgfSxcblxuICAgIG51bVBhZ2VzKCkge1xuICAgICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLnRvdGFsIC8gdGhpcy5wYWdlU2l6ZSlcbiAgICB9LFxuXG4gICAgYnV0dG9ucygpIHtcbiAgICAgIGNvbnN0IHsgc2hvd1ByZXYsIHNob3dOZXh0LCBjdXJyZW50UGFnZSwgbnVtUGFnZXMgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHNob3dMZW5ndGggPSBzaG93UHJldiArIHNob3dOZXh0ICsgMVxuXG4gICAgICBsZXQgc3RhcnQgPSAxXG4gICAgICBsZXQgZW5kID0gMVxuICAgICAgaWYgKG51bVBhZ2VzIDw9IHNob3dMZW5ndGgpIHtcbiAgICAgICAgZW5kID0gbnVtUGFnZXNcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFBhZ2UgPD0gc2hvd1ByZXYgKyAxKSB7XG4gICAgICAgIGVuZCA9IHNob3dMZW5ndGhcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFBhZ2UgPj0gbnVtUGFnZXMgLSBzaG93TmV4dCkge1xuICAgICAgICBlbmQgPSBudW1QYWdlc1xuICAgICAgICBzdGFydCA9IG51bVBhZ2VzIC0gc2hvd0xlbmd0aCArIDFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0ID0gY3VycmVudFBhZ2UgLSBzaG93UHJldlxuICAgICAgICBlbmQgPSBjdXJyZW50UGFnZSArIHNob3dOZXh0XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJ1dHRvbnMgPSBbXVxuICAgICAgYnV0dG9ucy5wdXNoKHtcbiAgICAgICAgaW5kZXg6IGN1cnJlbnRQYWdlIC0gMSxcbiAgICAgICAgdHlwZTogJ3ByZXYnLFxuICAgICAgICBkaXNhYmxlZDogY3VycmVudFBhZ2UgPD0gMVxuICAgICAgfSlcbiAgICAgIGlmIChzdGFydCA+PSAyKSB7XG4gICAgICAgIGJ1dHRvbnMucHVzaCh7IGluZGV4OiAxLCB0ZXh0OiAxIH0pXG4gICAgICB9XG4gICAgICBpZiAoc3RhcnQgPiAyKSB7XG4gICAgICAgIGJ1dHRvbnMucHVzaCh7XG4gICAgICAgICAgaW5kZXg6IE1hdGgubWF4KDEsIGN1cnJlbnRQYWdlIC0gMTApLFxuICAgICAgICAgIHR5cGU6ICdlbGxpcHNpcy1wcmV2J1xuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKSB7XG4gICAgICAgIGJ1dHRvbnMucHVzaCh7XG4gICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgdGV4dDogaSxcbiAgICAgICAgICBhY3RpdmU6IGkgPT09IGN1cnJlbnRQYWdlXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoZW5kIDwgbnVtUGFnZXMgLSAxKSB7XG4gICAgICAgIGJ1dHRvbnMucHVzaCh7XG4gICAgICAgICAgaW5kZXg6IE1hdGgubWluKG51bVBhZ2VzLCBjdXJyZW50UGFnZSArIDEwKSxcbiAgICAgICAgICB0eXBlOiAnZWxsaXBzaXMtbmV4dCdcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgPD0gbnVtUGFnZXMgLSAxKSB7XG4gICAgICAgIGJ1dHRvbnMucHVzaCh7IGluZGV4OiBudW1QYWdlcywgdGV4dDogbnVtUGFnZXMgfSlcbiAgICAgIH1cbiAgICAgIGJ1dHRvbnMucHVzaCh7XG4gICAgICAgIGluZGV4OiBjdXJyZW50UGFnZSArIDEsXG4gICAgICAgIHR5cGU6ICduZXh0JyxcbiAgICAgICAgZGlzYWJsZWQ6IGN1cnJlbnRQYWdlID49IG51bVBhZ2VzXG4gICAgICB9KVxuXG4gICAgICByZXR1cm4gYnV0dG9uc1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHBhZ2UocGFnZSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2VcbiAgICB9LFxuXG4gICAgcGFnZVNpemUoKSB7XG4gICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA+IHRoaXMubnVtUGFnZXMpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMubnVtUGFnZXNcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFBhZ2UodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byAhPT0gZnJvbSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6cGFnZScsIHRvKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0QnV0dG9uQ2xhc3NlcyhidXR0b24pIHtcbiAgICAgIGNvbnN0IGNsYXNzZXMgPSB7XG4gICAgICAgICdkaXRvLXNlbGVjdGVkJzogYnV0dG9uLmFjdGl2ZVxuICAgICAgfVxuICAgICAgaWYgKGJ1dHRvbi50eXBlKSB7XG4gICAgICAgIGNsYXNzZXNbYGRpdG8tYnV0dG9uLSR7YnV0dG9uLnR5cGV9YF0gPSB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gY2xhc3Nlc1xuICAgIH0sXG5cbiAgICBvbkNsaWNrQnV0dG9uKGJ1dHRvbikge1xuICAgICAgaWYgKFxuICAgICAgICBidXR0b24uaW5kZXggJiZcbiAgICAgICAgIWJ1dHRvbi5kaXNhYmxlZCAmJlxuICAgICAgICBidXR0b24uaW5kZXggIT09IHRoaXMuY3VycmVudFBhZ2VcbiAgICAgICkge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gYnV0dG9uLmluZGV4XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1wYWdpbmF0aW9uIHtcbiAgZGlzcGxheTogZmxleDtcblxuICAuZGl0by1wYWdpbmF0aW9uLXRvdGFsIHtcbiAgICBAaW5jbHVkZSBlbGxpcHNpcztcblxuICAgIG1hcmdpbjogMCAwLjVlbTtcbiAgICBsaW5lLWhlaWdodDogJGlucHV0LWhlaWdodDtcbiAgfVxuXG4gIC5kaXRvLWJ1dHRvbiB7XG4gICAgdHJhbnNpdGlvbjpcbiAgICAgIGFsbCAwLjNzIGVhc2UsXG4gICAgICBjb2xvciAwcyxcbiAgICAgIGJhY2tncm91bmQgMHMsXG4gICAgICBib3JkZXIgMHM7XG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICBwYWRkaW5nOiAwIDAuNWVtO1xuXG4gICAgJi1wcmV2LFxuICAgICYtbmV4dCB7XG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBAZXh0ZW5kICVpY29uLWFycm93O1xuICAgICAgfVxuICAgIH1cblxuICAgICYtcHJldjo6YmVmb3JlIHtcbiAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC0xKTtcbiAgICB9XG5cbiAgICAmLWVsbGlwc2lzLXByZXYsXG4gICAgJi1lbGxpcHNpcy1uZXh0IHtcbiAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICBib3JkZXI6IDA7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgY29sb3I6ICRjb2xvci10ZXh0O1xuXG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBAZXh0ZW5kICVpY29uLWVsbGlwc2lzO1xuICAgICAgfVxuXG4gICAgICAmOmhvdmVyOjpiZWZvcmUge1xuICAgICAgICBAZXh0ZW5kICVpY29uLWNoZXZyb25zO1xuICAgICAgfVxuXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci1hY3RpdmU7XG4gICAgICB9XG5cbiAgICAgICY6YWN0aXZlIHtcbiAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLWVsbGlwc2lzLXByZXY6OmJlZm9yZSB7XG4gICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXN3aXRjaChcbiAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4gIDpzdHlsZT1cInN0eWxlc1wiXG4pXG4gIC5kaXRvLXN3aXRjaC1wYW5lXG4gICAgaW5wdXQoXG4gICAgICA6aWQ9XCJpZFwiXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIHYtbW9kZWw9XCJjaGVja2VkXCJcbiAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICA6bmFtZT1cIm5hbWVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiAgICAuZGl0by1zd2l0Y2gtYnV0dG9uXG4gICAgc3Bhbi5kaXRvLXN3aXRjaC1sYWJlbChcbiAgICAgIHYtaWY9XCJsYWJlbHNcIlxuICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIHYtaWY9XCJjaGVja2VkXCJcbiAgICAgICAgbmFtZT1cImNoZWNrZWRcIlxuICAgICAgKSB7eyBsYWJlbHMuY2hlY2tlZCB8fCAnb24nIH19XG4gICAgICBzbG90KFxuICAgICAgICB2LWVsc2VcbiAgICAgICAgbmFtZT1cInVuY2hlY2tlZFwiXG4gICAgICApIHt7IGxhYmVscy51bmNoZWNrZWQgfHwgJ29mZicgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJywgJ2NoYW5nZSddLFxuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGlkOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIG5hbWU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBsYWJlbHM6IHsgdHlwZTogW09iamVjdCwgQm9vbGVhbl0sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjaGVja2VkOiB0aGlzLm1vZGVsVmFsdWVcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjbGFzc2VzKCkge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgdGhpcy4kYXR0cnMuY2xhc3MsXG4gICAgICAgIHtcbiAgICAgICAgICAnZGl0by1jaGVja2VkJzogdGhpcy5jaGVja2VkLFxuICAgICAgICAgICdkaXRvLWRpc2FibGVkJzogdGhpcy5kaXNhYmxlZFxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcblxuICAgIHN0eWxlcygpIHtcbiAgICAgIGNvbnN0IHsgbGFiZWxzOiB7IGNoZWNrZWQsIHVuY2hlY2tlZCB9ID0ge30gfSA9IHRoaXNcbiAgICAgIC8vIENhbGN1bGF0ZSBgLS1zd2l0Y2gtd2lkdGhgIGluIGByZW1gLCBiYXNlZCBvbiBsYWJlbCBsZW5ndGguXG4gICAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1heCgwLCBjaGVja2VkPy5sZW5ndGgsIHVuY2hlY2tlZD8ubGVuZ3RoKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJy0tc3dpdGNoLXdpZHRoJzogbGVuZ3RoID8gYCR7bGVuZ3RoICogMS41fXJlbWAgOiBudWxsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICBjb25zdCB7IGNsYXNzOiBfLCAuLi5hdHRyaWJ1dGVzIH0gPSB0aGlzLiRhdHRyc1xuICAgICAgcmV0dXJuIGF0dHJpYnV0ZXNcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKG1vZGVsVmFsdWUpIHtcbiAgICAgIHRoaXMuY2hlY2tlZCA9IG1vZGVsVmFsdWVcbiAgICB9LFxuXG4gICAgY2hlY2tlZChjaGVja2VkKSB7XG4gICAgICBpZiAoY2hlY2tlZCAhPT0gdGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgY2hlY2tlZClcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgY2hlY2tlZClcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5mb2N1cygpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zd2l0Y2gge1xuICAvLyBVc2Ugd2hvbGUgbXVsdGlwbGVzIG9mIGByZW1gIGZvciBzaXplcyBhbmQgYHB4YCBtYXJnaW5zL3BhZGRpbmcgYWxvbmdcbiAgLy8gd2l0aCBgY2FsYygpYCB0byBlbmQgdXAgd2l0aCBldmVuIHBpeGVsIHNpemVzLlxuICAtLXN3aXRjaC13aWR0aDogNGVtO1xuICAtLXN3aXRjaC1oZWlnaHQ6IDJlbTtcbiAgLS1zd2l0Y2gtbWFyZ2luOiAycHg7XG4gIC0tc3dpdGNoLXBhZGRpbmc6IDNweDtcbiAgLS1zd2l0Y2gtc3BlZWQ6IDMwMG1zO1xuICAtLWxhYmVsLW1hcmdpbjogMC41ZW07XG4gIC0td2lkdGg6IGNhbGModmFyKC0tc3dpdGNoLXdpZHRoKSAtIDIgKiB2YXIoLS1zd2l0Y2gtbWFyZ2luKSk7XG4gIC0taGVpZ2h0OiBjYWxjKHZhcigtLXN3aXRjaC1oZWlnaHQpIC0gMiAqIHZhcigtLXN3aXRjaC1tYXJnaW4pKTtcbiAgLS1vZmZzZXQ6IGNhbGModmFyKC0td2lkdGgpIC0gdmFyKC0taGVpZ2h0KSk7XG5cbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGhlaWdodDogdmFyKC0tc3dpdGNoLWhlaWdodCk7XG4gIC8vIFRvIG1ha2UgaW5saW5lIGxhYmVscyBhcHBlYXIgb24gY29uc2lzdGVudCBiYXNlbGluZTpcbiAgdmVydGljYWwtYWxpZ246IGJvdHRvbTtcbiAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgLmRpdG8tc3dpdGNoLXBhbmUge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB3aWR0aDogdmFyKC0td2lkdGgpO1xuICAgIGhlaWdodDogdmFyKC0taGVpZ2h0KTtcbiAgfVxuXG4gIC5kaXRvLXN3aXRjaC1wYW5lLFxuICAuZGl0by1zd2l0Y2gtbGFiZWwge1xuICAgIHRvcDogNTAlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgfVxuXG4gIGlucHV0IHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgYm9yZGVyLXJhZGl1czogMWVtO1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodDtcbiAgICB0cmFuc2l0aW9uOlxuICAgICAgYm9yZGVyLWNvbG9yIDAuM3MsXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yIDAuM3M7XG4gIH1cblxuICAuZGl0by1zd2l0Y2gtYnV0dG9uIHtcbiAgICAtLXNpemU6IGNhbGModmFyKC0taGVpZ2h0KSAtIDIgKiB2YXIoLS1zd2l0Y2gtcGFkZGluZykpO1xuXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogdmFyKC0tc3dpdGNoLXBhZGRpbmcpO1xuICAgIGxlZnQ6IHZhcigtLXN3aXRjaC1wYWRkaW5nKTtcbiAgICB3aWR0aDogdmFyKC0tc2l6ZSk7XG4gICAgaGVpZ2h0OiB2YXIoLS1zaXplKTtcbiAgICBib3JkZXItcmFkaXVzOiBjYWxjKHZhcigtLXNpemUpIC8gMik7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIHZhcigtLXN3aXRjaC1zcGVlZCk7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xuICB9XG5cbiAgLmRpdG8tc3dpdGNoLWJ1dHRvbixcbiAgLmRpdG8tc3dpdGNoLWxhYmVsIHtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgfVxuXG4gIC5kaXRvLXN3aXRjaC1sYWJlbCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiB2YXIoLS1sYWJlbC1tYXJnaW4pO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgfVxuXG4gICYuZGl0by1jaGVja2VkIHtcbiAgICBpbnB1dCB7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgIH1cblxuICAgIC5kaXRvLXN3aXRjaC1idXR0b24ge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKHZhcigtLW9mZnNldCkpO1xuICAgIH1cblxuICAgIC5kaXRvLXN3aXRjaC1sYWJlbCB7XG4gICAgICBsZWZ0OiB2YXIoLS1sYWJlbC1tYXJnaW4pO1xuICAgICAgcmlnaHQ6IHVuc2V0O1xuICAgIH1cbiAgfVxuXG4gICYuZGl0by1kaXNhYmxlZCB7XG4gICAgQGV4dGVuZCAlYnV0dG9uLWRpc2FibGVkO1xuICB9XG5cbiAgJjpmb2N1cy13aXRoaW46bm90KDpob3Zlcikge1xuICAgIC5kaXRvLXN3aXRjaC1idXR0b24ge1xuICAgICAgYm94LXNoYWRvdzogJHNoYWRvdy1mb2N1cztcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8c2NyaXB0PlxuaW1wb3J0IHsgaCBhcyBjcmVhdGVFbGVtZW50LCBUcmFuc2l0aW9uIH0gZnJvbSAndnVlJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZnVuY3Rpb24gVHJhbnNpdGlvbkhlaWdodCh7IGVuYWJsZWQgfSwgeyBzbG90cyB9KSB7XG4gIHJldHVybiBlbmFibGVkXG4gICAgPyBjcmVhdGVFbGVtZW50KFRyYW5zaXRpb24sIHByb3BzLCBzbG90cylcbiAgICA6IHNsb3RzLmRlZmF1bHQoKVxufVxuXG5UcmFuc2l0aW9uSGVpZ2h0LnByb3BzID0ge1xuICBlbmFibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBUcmFuc2l0aW9uSGVpZ2h0XG5cbmNvbnN0IHNldFN0eWxlID0gKGVsZW1lbnQsIHN0eWxlKSA9PiBPYmplY3QuYXNzaWduKGVsZW1lbnQuc3R5bGUsIHN0eWxlKVxuXG5jb25zdCBuZXh0VGltZW91dCA9IGNhbGxiYWNrID0+IHNldFRpbWVvdXQoY2FsbGJhY2ssIDApXG5cbi8vIEZvcmNlIHJlcGFpbnQgdG8gbWFrZSBzdXJlIHRoZSBhbmltYXRpb24gaXMgdHJpZ2dlcmVkIGNvcnJlY3RseS5cbmNvbnN0IGZvcmNlUmVwYWludCA9IGVsZW1lbnQgPT4gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5oZWlnaHRcblxuY29uc3QgcHJvcHMgPSB7XG4gIG5hbWU6ICdkaXRvLWhlaWdodCcsXG5cbiAgb25BZnRlckVudGVyKGVsZW1lbnQpIHtcbiAgICAvLyBBIHRpbWVvdXQgYmVmb3JlIHNldHRpbmcgc3R5bGUgaXMgb25seSByZWFsbHkgbmVlZGVkIGFmdGVyIGNhbGxzIHRvXG4gICAgLy8gYGZvcmNlUmVwYWludCgpYCwgYnV0IHVzaW5nIG9uZSBoZXJlIHRvbyBwcmVzZXJ2ZXMgZXhlY3V0aW9uIHNlcXVlbmNlIHNvXG4gICAgLy8gdGhhdCB0aGUgY2FsbCBmcm9tIGBlbnRlcigpYCBjYW4gbmV2ZXIgb3V0cnVuIHRoZSBvbmUgZnJvbSBgYWZ0ZXJFbnRlcigpYFxuICAgIG5leHRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0OiBudWxsIH0pKVxuICB9LFxuXG4gIG9uRW50ZXIoZWxlbWVudCkge1xuICAgIC8vIEZvciBzb21lIHJlYXNvbiB3ZSdyZSBnZXR0aW5nIHR3byBgb25FbnRlcigpYCBjYWxscyBwZXIgdHJhbnNpdGlvbixcbiAgICAvLyBzbyB3ZSBuZWVkIHRvIGlnbm9yZSB0aGUgc2Vjb25kIG9uZS4gVGhpcyBtaWdodCBiZSBsaW5rZWQgdG8gdGhlIHVzZVxuICAgIC8vIG9mIGBuZXh0VGltZW91dCgpYCwgd2hpY2ggaXMgcmVxdWlyZWQgdG8gZ2V0IHRoZSBjb3JyZWN0IHZhbHVlIGZvclxuICAgIC8vIGBoZWlnaHRgLCBiYXNlZCBvbiBgJi0tbGFiZWwtdmVydGljYWxgIGNhbGN1bGF0aW9ucy5cbiAgICBjb25zdCB7IHdpZHRoIH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgc2V0U3R5bGUoZWxlbWVudCwge1xuICAgICAgd2lkdGgsXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHZpc2liaWxpdHk6ICdoaWRkZW4nLFxuICAgICAgaGVpZ2h0OiAnYXV0bydcbiAgICB9KVxuICAgIG5leHRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IHsgaGVpZ2h0IH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgICBzZXRTdHlsZShlbGVtZW50LCB7XG4gICAgICAgIHdpZHRoOiBudWxsLFxuICAgICAgICBwb3NpdGlvbjogbnVsbCxcbiAgICAgICAgdmlzaWJpbGl0eTogbnVsbCxcbiAgICAgICAgaGVpZ2h0OiAwXG4gICAgICB9KVxuICAgICAgZm9yY2VSZXBhaW50KGVsZW1lbnQpXG4gICAgICBuZXh0VGltZW91dCgoKSA9PiBzZXRTdHlsZShlbGVtZW50LCB7IGhlaWdodCB9KSlcbiAgICB9KVxuICB9LFxuXG4gIG9uTGVhdmUoZWxlbWVudCkge1xuICAgIGNvbnN0IHsgaGVpZ2h0IH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgc2V0U3R5bGUoZWxlbWVudCwgeyBoZWlnaHQgfSlcbiAgICBmb3JjZVJlcGFpbnQoZWxlbWVudClcbiAgICBuZXh0VGltZW91dCgoKSA9PiBzZXRTdHlsZShlbGVtZW50LCB7IGhlaWdodDogMCB9KSlcbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuJGR1cmF0aW9uOiAwLjE1cztcblxuLmRpdG8taGVpZ2h0LWVudGVyLWFjdGl2ZSxcbi5kaXRvLWhlaWdodC1sZWF2ZS1hY3RpdmUge1xuICB0cmFuc2l0aW9uOiBoZWlnaHQgJGR1cmF0aW9uICRlYXNlLW91dC1xdWFydDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLmRpdG8taGVpZ2h0LWVudGVyLWFjdGl2ZSB7XG4gIGFuaW1hdGlvbjogZGl0by1zbGlkZS1lbnRlciAkZHVyYXRpb24gJGVhc2Utb3V0LXF1YXJ0O1xufVxuXG4uZGl0by1oZWlnaHQtbGVhdmUtYWN0aXZlIHtcbiAgYW5pbWF0aW9uOiBkaXRvLXNsaWRlLWxlYXZlICRkdXJhdGlvbiAkZWFzZS1vdXQtcXVhcnQ7XG59XG5cbi5kaXRvLWhlaWdodC1lbnRlci1mcm9tLFxuLmRpdG8taGVpZ2h0LWxlYXZlLXRvIHtcbiAgaGVpZ2h0OiAwO1xufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7IG1hcmtSYXcsIHVzZVNsb3RzLCBDb21tZW50IH0gZnJvbSAndnVlJ1xuaW1wb3J0IHsgaXNTdHJpbmcsIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzVk5vZGVDb250ZW50KHZub2RlKSB7XG4gIHJldHVybiB2bm9kZSAmJiBhc0FycmF5KHZub2RlKS5zb21lKHZub2RlID0+IHZub2RlLnR5cGUgIT09IENvbW1lbnQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNTbG90Q29udGVudChzbG90LCBwcm9wcyA9IHt9KSB7XG4gIHNsb3QgPSBpc1N0cmluZyhzbG90KSA/IHVzZVNsb3RzKClbc2xvdF0gOiBzbG90XG4gIHJldHVybiBoYXNWTm9kZUNvbnRlbnQoc2xvdD8uKHByb3BzKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJhdyh2YWx1ZSkge1xuICByZXR1cm4gbWFya1Jhdyh7IHZhbHVlIH0pXG59XG4iLCJpbXBvcnQgeyBpc09iamVjdCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBhZGRFdmVudHMgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZG9tSGFuZGxlcnM6IFtdXG4gICAgfVxuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICBmb3IgKGNvbnN0IHsgcmVtb3ZlIH0gb2YgdGhpcy5kb21IYW5kbGVycykge1xuICAgICAgcmVtb3ZlKClcbiAgICB9XG4gICAgdGhpcy5kb21IYW5kbGVycyA9IFtdXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGRvbU9uKGVsZW1lbnQsIHR5cGUsIGhhbmRsZXIpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGFkZEV2ZW50cyhcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgaXNPYmplY3QodHlwZSkgPyB0eXBlIDogeyBbdHlwZV06IGhhbmRsZXIgfVxuICAgICAgKVxuICAgICAgdGhpcy5kb21IYW5kbGVycy5wdXNoKHJlc3VsdClcbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG4gIH1cbn1cbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIERpdG9Vc2VyIHtcbiAgaGFzUm9sZSguLi5yb2xlcykge1xuICAgIGlmICh0aGlzLnJvbGVzKSB7XG4gICAgICBmb3IgKGNvbnN0IHJvbGUgb2Ygcm9sZXMpIHtcbiAgICAgICAgaWYgKHRoaXMucm9sZXMuaW5jbHVkZXMocm9sZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG4iLCIvLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkc2NoZW1hUGFyZW50Q29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjaGVtYUNvbXBvbmVudHM6IFtdXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbWFpblNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHNbMF1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSBgRGl0b1NjaGVtYS5jcmVhdGVkKCkvdW5tb3VudGVkKClgIG9uIGl0c1xuICAgIC8vIGAkc2NoZW1hUGFyZW50Q29tcG9uZW50YCwgaWYgdGhlIHBhcmVudCB1c2VzIHRoZSBgU2NoZW1hUGFyZW50TWl4aW5gOlxuICAgIF9yZWdpc3RlclNjaGVtYUNvbXBvbmVudChzY2hlbWFDb21wb25lbnQsIGFkZCkge1xuICAgICAgY29uc3QgeyBzY2hlbWFDb21wb25lbnRzIH0gPSB0aGlzXG4gICAgICBpZiAoYWRkKSB7XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudHMucHVzaChzY2hlbWFDb21wb25lbnQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzY2hlbWFDb21wb25lbnRzLnNwbGljZShzY2hlbWFDb21wb25lbnRzLmluZGV4T2Yoc2NoZW1hQ29tcG9uZW50KSwgMSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBTY2hlbWFQYXJlbnRNaXhpbiBmcm9tICcuL1NjaGVtYVBhcmVudE1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtTY2hlbWFQYXJlbnRNaXhpbl0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBlcnJvcnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmZsYXRNYXAoKHsgZXJyb3JzIH0pID0+IGVycm9ycyB8fCBbXSlcbiAgICB9LFxuXG4gICAgaXNUb3VjaGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5zb21lKGl0ID0+IGl0LmlzVG91Y2hlZClcbiAgICB9LFxuXG4gICAgaXNEaXJ0eSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuc29tZShpdCA9PiBpdC5pc0RpcnR5KVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC5pc1ZhbGlkKVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkYXRlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQuaXNWYWxpZClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHZhbGlkYXRlQWxsKG1hdGNoLCBub3RpZnkgPSB0cnVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LnZhbGlkYXRlQWxsKG1hdGNoLCBub3RpZnkpKVxuICAgIH0sXG5cbiAgICB2ZXJpZnlBbGwobWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQudmVyaWZ5QWxsKG1hdGNoKSlcbiAgICB9LFxuXG4gICAgcmVzZXRWYWxpZGF0aW9uKCkge1xuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnRzLmZvckVhY2goaXQgPT4gaXQucmVzZXRWYWxpZGF0aW9uKCkpXG4gICAgfSxcblxuICAgIGNsZWFyRXJyb3JzKCkge1xuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnRzLmZvckVhY2goaXQgPT4gaXQuY2xlYXJFcnJvcnMoKSlcbiAgICB9LFxuXG4gICAgc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cywgZmlyc3QgPSB0cnVlKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZm9yRWFjaChcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50ID0+IHtcbiAgICAgICAgICBpZiAoc2NoZW1hQ29tcG9uZW50LnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMsIGZpcnN0KSkge1xuICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKVxuICAgICAgcmV0dXJuICFmaXJzdFxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFZhbGlkYXRvck1peGluIGZyb20gJy4uL21peGlucy9WYWxpZGF0b3JNaXhpbi5qcydcbmltcG9ydCB7IGdldENvbW1vblByZWZpeCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1ZhbGlkYXRvck1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcm91dGVDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVsb2FkOiBmYWxzZSxcbiAgICAgIC8vIEVhY2ggcm91dGUtY29tcG9uZW50IGRlZmluZXMgYSBzdG9yZSB0aGF0IGdldHMgcGFzc2VkIG9uIHRvIGl0c1xuICAgICAgLy8gY2hpbGQgY29tcG9uZW50cywgc28gdGhleSBjYW4gc3RvcmUgdmFsdWVzIGluIHRoZW0gdGhhdCBsaXZlIGJleW9uZFxuICAgICAgLy8gdGhlaXIgbGlmZS1jeWNsZS4gU2VlOiBEaXRvUGFuZSwgU291cmNlTWl4aW5cbiAgICAgIHN0b3JlOiB7fSxcbiAgICAgIGxvYWRDYWNoZToge30gLy8gU2VlIFR5cGVNaXhpbi5sb2FkKClcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICByb3V0ZUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIE92ZXJyaWRlIERpdG9NaXhpbidzIHJvdXRlQ29tcG9uZW50KCkgd2hpY2ggdXNlcyB0aGUgaW5qZWN0ZWQgdmFsdWUuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICByb3V0ZUxldmVsKCkge1xuICAgICAgbGV0IGxldmVsID0gMFxuICAgICAgbGV0IHJvdXRlQ29tcG9uZW50ID0gdGhpc1xuICAgICAgd2hpbGUgKChyb3V0ZUNvbXBvbmVudCA9IHJvdXRlQ29tcG9uZW50LnBhcmVudFJvdXRlQ29tcG9uZW50KSkge1xuICAgICAgICBsZXZlbCsrXG4gICAgICB9XG4gICAgICByZXR1cm4gbGV2ZWxcbiAgICB9LFxuXG4gICAgcm91dGVSZWNvcmQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcm91dGUubWF0Y2hlZFt0aGlzLnJvdXRlTGV2ZWxdXG4gICAgfSxcblxuICAgIGlzTGFzdFJvdXRlKCkge1xuICAgICAgLy8gUmV0dXJucyB0cnVlIHdoZW4gdGhpcyByb3V0ZXIgY29tcG9uZW50IGlzIHRoZSBsYXN0IG9uZSBpbiB0aGUgcm91dGUuXG4gICAgICBjb25zdCB7IG1hdGNoZWQgfSA9IHRoaXMuJHJvdXRlXG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZVJlY29yZCA9PT0gbWF0Y2hlZFttYXRjaGVkLmxlbmd0aCAtIDFdXG4gICAgfSxcblxuICAgIGlzTGFzdFVubmVzdGVkUm91dGUoKSB7XG4gICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyByb3V0ZSBjb21wb25lbnQgaXMgdGhlIGxhc3Qgb25lIGluIHRoZSByb3V0ZSB0aGF0XG4gICAgICAvLyBuZWVkcyBpdHMgb3duIHJvdXRlci12aWV3ICg9IGlzIG5vdCBuZXN0ZWQpLlxuICAgICAgY29uc3QgeyBtYXRjaGVkIH0gPSB0aGlzLiRyb3V0ZVxuICAgICAgZm9yIChsZXQgaSA9IG1hdGNoZWQubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgcmVjb3JkID0gbWF0Y2hlZFtpXVxuICAgICAgICBpZiAoIXJlY29yZC5tZXRhLm5lc3RlZCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnJvdXRlUmVjb3JkID09PSByZWNvcmRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGlzTmVzdGVkUm91dGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXRhLm5lc3RlZFxuICAgIH0sXG5cbiAgICBpc1ZpZXcoKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgbWV0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlUmVjb3JkPy5tZXRhXG4gICAgfSxcblxuICAgIHBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSb3V0ZVBhdGgodGhpcy5yb3V0ZVJlY29yZD8ucGF0aClcbiAgICB9LFxuXG4gICAgbGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMYWJlbCh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgYnJlYWRjcnVtYigpIHtcbiAgICAgIGNvbnN0IHsgYnJlYWRjcnVtYiB9ID0gdGhpcy5zY2hlbWEgfHwge31cbiAgICAgIHJldHVybiBicmVhZGNydW1iIHx8IGAke3RoaXMuYnJlYWRjcnVtYlByZWZpeH0gJHt0aGlzLmxhYmVsfWBcbiAgICB9LFxuXG4gICAgYnJlYWRjcnVtYlByZWZpeCgpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH0sXG5cbiAgICBwYXJhbSgpIHtcbiAgICAgIC8vIFdvcmthcm91bmQgZm9yIHZ1ZS1yb3V0ZXIgbm90IGJlaW5nIGFibGUgdG8gbWFwIG11bHRpcGxlIHVybCBwYXJhbWV0ZXJzXG4gICAgICAvLyB3aXRoIHRoZSBzYW1lIG5hbWUgdG8gbXVsdGlwbGUgY29tcG9uZW50cywgc2VlOlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzEzNDVcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5wYXJhbXNbdGhpcy5tZXRhPy5wYXJhbV0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGUsIHNlZSBEaXRvRm9ybVxuICAgIGlzTXV0YXRpbmcoKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlUm91dGVVcGRhdGUodG8sIGZyb20sIG5leHQpIHtcbiAgICB0aGlzPy5iZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dClcbiAgfSxcblxuICBiZWZvcmVSb3V0ZUxlYXZlKHRvLCBmcm9tLCBuZXh0KSB7XG4gICAgdGhpcz8uYmVmb3JlUm91dGVDaGFuZ2UodG8sIGZyb20sIG5leHQpXG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICAvLyBLZWVwIGEgc2hhcmVkIHN0YWNrIG9mIHJvb3QgY29tcG9uZW50cyBmb3IgRGl0b1RyYWlsIHRvIHVzZSB0byByZW5kZXJcbiAgICAvLyBsYWJlbHMuIENhbid0IHJlbHkgb24gJHJvdXRlLm1hdGNoZWRbaV0uaW5zdGFuY2VzLmRlZmF1bHQgdW5mb3J0dW5hdGVseSxcbiAgICAvLyBhcyBpbnN0YW5jZXMgYXJlbid0IGltbWVkaWF0ZWx5IHJlYWR5LCBhbmQgaW5zdGFuY2VzIGlzIG5vdCByZWFjdGl2ZS5cbiAgICB0aGlzLmFwcFN0YXRlLnJvdXRlQ29tcG9uZW50cy5wdXNoKHRoaXMpXG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIGNvbnN0IHsgcm91dGVDb21wb25lbnRzIH0gPSB0aGlzLmFwcFN0YXRlXG4gICAgcm91dGVDb21wb25lbnRzLnNwbGljZShyb3V0ZUNvbXBvbmVudHMuaW5kZXhPZih0aGlzKSwgMSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgYmVmb3JlUm91dGVDaGFuZ2UodG8sIGZyb20sIG5leHQpIHtcbiAgICAgIGxldCBvayA9IHRydWVcbiAgICAgIGNvbnN0IGlzQ2xvc2luZyA9IChcbiAgICAgICAgLy8gT25seSBoYW5kbGUgdGhpcyByb3V0ZSBjaGFuZ2UgaWYgdGhlIGZvcm0gaXMgYWN0dWFsbHkgbWFwcGVkIHRvIHRoZVxuICAgICAgICAvLyBgZnJvbWAgcm91dGUsIGJ1dCBpbmNsdWRlIHBhcmVudCBmb3JtcyBvZiBjbG9zaW5nIG5lc3RlZCBmb3JtcyBhcyBhc1xuICAgICAgICAvLyB3ZWxsLCBieSBtYXRjaGluZyB0aGUgdGhlIHN0YXJ0IG9mIGZyb20vdG8gcGF0aCBhZ2FpbnN0IGB0aGlzLnBhdGhgOlxuICAgICAgICBmcm9tLnBhdGguc3RhcnRzV2l0aCh0aGlzLnBhdGgpICYmXG4gICAgICAgICF0by5wYXRoLnN0YXJ0c1dpdGgodGhpcy5wYXRoKSAmJlxuICAgICAgICAvLyBFeGNsdWRlIGhhc2ggY2hhbmdlcyBvbmx5ICg9IHRhYiBjaGFuZ2VzKTpcbiAgICAgICAgZnJvbS5wYXRoICE9PSB0by5wYXRoICYmIChcbiAgICAgICAgICB0aGlzLmlzRnVsbFJvdXRlQ2hhbmdlKHRvLCBmcm9tKSB8fFxuICAgICAgICAgIC8vIERlY2lkZSBpZiB3ZSdyZSBtb3ZpbmcgdG93YXJkcyBhIG5ldyBuZXN0ZWQgZm9ybSwgb3IgY2xvc2luZyAvXG4gICAgICAgICAgLy8gcmVwbGFjaW5nIGFuIGFscmVhZHkgb3BlbiBvbmUgYnkgY29tcGFyaW5nIHBhdGggbGVuZ3Rocy5cbiAgICAgICAgICAvLyBUaGUgY2FzZSBvZiBgPWAgbWF0Y2hlcyB0aGUgcmVwbGFjaW5nIG9mIGFuIGFscmVhZHkgb3BlbiBvbmUuXG4gICAgICAgICAgdG8ucGF0aC5sZW5ndGggPD0gZnJvbS5wYXRoLmxlbmd0aFxuICAgICAgICApXG4gICAgICApXG4gICAgICBpZiAoaXNDbG9zaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLmlzTXV0YXRpbmcpIHtcbiAgICAgICAgICAvLyBGb3IgYWN0aXZlIGRpcmVjdGx5IG11dGF0aW5nIChuZXN0ZWQpIGZvcm1zIHRoYXQgd2VyZSBub3QgdmFsaWRhdGVkXG4gICAgICAgICAgLy8geWV0LCB2YWxpZGF0ZSB0aGVtIG9uY2UuIElmIHRoZSB1c2VyIHRoZW4gc3RpbGwgd2FudHMgdG8gbGVhdmVcbiAgICAgICAgICAvLyB0aGVtLCB0aGV5IGNhbiBjbGljayBjbG9zZSAvIG5hdmlnYXRlIGF3YXkgYWdhaW4uXG4gICAgICAgICAgb2sgPSAoXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWRhdGVkIHx8XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlQWxsKClcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVGhlIGZvcm0gZG9lc24ndCBkaXJlY3RseSBtdXRhdGUgZGF0YS4gSWYgaXQgaXMgZGlydHksIGFzayBpZiB1c2VyXG4gICAgICAgICAgLy8gd2FudHMgdG8gcGVyc2lzdCBkYXRhIGZpcnN0LlxuICAgICAgICAgIGlmICh0aGlzLmlzRGlydHkpIHtcbiAgICAgICAgICAgIG9rID0gd2luZG93LmNvbmZpcm0oXG4gICAgICAgICAgICAgIGBZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMuIERvIHlvdSByZWFsbHkgd2FudCB0byAke1xuICAgICAgICAgICAgICAgIHRoaXMudmVyYnMuY2FuY2VsXG4gICAgICAgICAgICAgIH0/YFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbmV4dChvaylcbiAgICB9LFxuXG4gICAgZ2V0Um91dGVQYXRoKHJlY29yZFBhdGgpIHtcbiAgICAgIC8vIE1hcHMgdGhlIHJvdXRlJ3MgYWN0dWFsIHBhdGggdG8gdGhlIG1hdGNoZWQgcm91dGVzIGJ5IGNvdW50aW5nIGl0c1xuICAgICAgLy8gcGFydHMgc2VwYXJhdGVkIGJ5ICcvJywgc3BsaXR0aW5nIHRoZSBwYXRoIGludG8gdGhlIG1hcHBlZCBwYXJ0c1xuICAgICAgLy8gY29udGFpbmluZyBhY3R1YWwgcGFyYW1ldGVycy5cbiAgICAgIGNvbnN0IHsgcGF0aCB9ID0gdGhpcy4kcm91dGVcbiAgICAgIHJldHVybiByZWNvcmRQYXRoXG4gICAgICAgID8gcGF0aFxuICAgICAgICAgICAgLnNwbGl0KCcvJylcbiAgICAgICAgICAgIC5zbGljZSgwLCByZWNvcmRQYXRoLnNwbGl0KCcvJykubGVuZ3RoKVxuICAgICAgICAgICAgLmpvaW4oJy8nKVxuICAgICAgICA6IHBhdGhcbiAgICB9LFxuXG4gICAgZ2V0Q2hpbGRQYXRoKHBhdGgpIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLnBhdGh9LyR7cGF0aH1gXG4gICAgfSxcblxuICAgIGlzRnVsbFJvdXRlQ2hhbmdlKHRvLCBmcm9tKSB7XG4gICAgICAvLyBUaGUgcm91dGUgcGF0aCBpcyB0aGUgcGF0aCB1cCB0byB0aGUgZmlyc3QgLyAoZXhjbHVkaW5nIHRoZSBpbml0aWFsIC8pOlxuICAgICAgY29uc3Qgcm9vdFBhdGggPSB0aGlzLnBhdGgubWF0Y2goL14oXFwvW14vXSopLylbMV1cbiAgICAgIHJldHVybiAhZ2V0Q29tbW9uUHJlZml4KHRvLnBhdGgsIGZyb20ucGF0aCkuc3RhcnRzV2l0aChyb290UGF0aClcbiAgICB9XG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG50ZW1wbGF0ZShcbiAgdi1pZj1cInVzZXJcIlxuKVxuICAvLy0gT25seSByZW5kZXIgRGl0b1ZpZXcgd2hlbiBpdCBpcyBhY3RpdmUsIG90aGVyd2lzZSBhIG5vcm1hbCByb3V0ZXItdmlld1xuICAvLy0gaW5zdGVhZCwgdG8gbmVzdCBmdXJ0aGVyIHJvdXRlIGNvbXBvbmVudHMuXG4gIC8vLSBOT1RFOiBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBoYW5kbGluZyBpbiBEaXRvRm9ybSwgd2hlcmUgYHYtc2hvd2AgaXNcbiAgLy8tIHVzZWQgdG8gYWx3YXlzIHJlbmRlciBmb3JtcyBldmVuIHdoZW4gb3RoZXIgbmVzdGVkIGZvcm1zIGFyZSBwcmVzZW50LlxuICBSb3V0ZXJWaWV3KFxuICAgIHYtaWY9XCIhaXNMYXN0Um91dGVcIlxuICAgIDprZXk9XCJuYW1lXCJcbiAgKVxuICAuZGl0by12aWV3LmRpdG8tc2Nyb2xsLXBhcmVudChcbiAgICB2LWVsc2UtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEodmlld1NjaGVtYSlcIlxuICAgIDpkYXRhLXJlc291cmNlPVwic291cmNlU2NoZW1hLnBhdGhcIlxuICApXG4gICAgRGl0b1NjaGVtYShcbiAgICAgIDprZXk9XCJuYW1lXCJcbiAgICAgIDpzY2hlbWE9XCJ2aWV3U2NoZW1hXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShuYW1lKVwiXG4gICAgICBwYWRkaW5nPVwicm9vdFwiXG4gICAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgICAgc2Nyb2xsYWJsZVxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFJvdXRlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1JvdXRlTWl4aW4uanMnXG5pbXBvcnQge1xuICBpc1NpbmdsZUNvbXBvbmVudFZpZXcsXG4gIHNvbWVOZXN0ZWRTY2hlbWFDb21wb25lbnRcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgaGFzUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvVmlldycsIHtcbiAgbWl4aW5zOiBbUm91dGVNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICAvLyBSZWRpcmVjdCAkc291cmNlQ29tcG9uZW50IGFuZCAkcmVzb3VyY2VDb21wb25lbnQgdG8gdGhlIG1haW4gY29tcG9uZW50OlxuICAgIHJldHVybiB7XG4gICAgICAkc291cmNlQ29tcG9uZW50OiAoKSA9PiB0aGlzLm1haW5Db21wb25lbnQ/LnNvdXJjZUNvbXBvbmVudCB8fCBudWxsLFxuICAgICAgJHJlc291cmNlQ29tcG9uZW50OiAoKSA9PiB0aGlzLm1haW5Db21wb25lbnQ/LnJlc291cmNlQ29tcG9uZW50IHx8IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gVXBkYXRlZCBmcm9tIExvYWRpbmdNaXhpbiB0aHJvdWdoIGBzZXRMb2FkaW5nKGlzTG9hZGluZylgOlxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIC8vIE5PVEU6IERhdGEgaXMgc2hhcmVkIGFjcm9zcyBhbGwgdmlld3MgYmVjYXVzZSB0aGUgcm91dGVyIHJlY3ljbGVzIHRoZVxuICAgICAgLy8gRGl0b1ZpZXcgY29tcG9uZW50LlxuICAgICAgZGF0YToge31cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXRhLnNjaGVtYVxuICAgIH0sXG5cbiAgICBuYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLm5hbWVcbiAgICB9LFxuXG4gICAgaXNWaWV3KCkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9LFxuXG4gICAgaXNTaW5nbGVDb21wb25lbnRWaWV3KCkge1xuICAgICAgcmV0dXJuIGlzU2luZ2xlQ29tcG9uZW50Vmlldyh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgbWFpbkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1haW5TY2hlbWFDb21wb25lbnQ/LmdldENvbXBvbmVudEJ5RGF0YVBhdGgodGhpcy5uYW1lKVxuICAgIH0sXG5cbiAgICB2aWV3U2NoZW1hKCkge1xuICAgICAgY29uc3QgeyBjb21wb25lbnQsIC4uLnNjaGVtYSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIC8vIFRyYW5zbGF0ZSBzaW5nbGUtY29tcG9uZW50IHNjaGVtYXMgaW50byBtdWx0aS1jb21wb25lbnQgc2NoZW1hcyxcbiAgICAgIC8vIHNvIHRoZXkgY2FuIGJlIHJlbmRlcmVkIGRpcmVjdGx5IHRocm91Z2ggRGl0b1NjaGVtYSBhbHNvOlxuICAgICAgcmV0dXJuIHRoaXMuaXNTaW5nbGVDb21wb25lbnRWaWV3XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uc2NoZW1hLFxuICAgICAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgICAgICBbc2NoZW1hLm5hbWVdOiB7XG4gICAgICAgICAgICAgICAgbmFtZTogc2NoZW1hLm5hbWUsXG4gICAgICAgICAgICAgICAgbGFiZWw6IGZhbHNlLFxuICAgICAgICAgICAgICAgIC4uLmNvbXBvbmVudFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA6IHNjaGVtYVxuICAgIH0sXG5cbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICByZXR1cm4gc29tZU5lc3RlZFNjaGVtYUNvbXBvbmVudCh0aGlzLnZpZXdTY2hlbWEsIGhhc1Jlc291cmNlKVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgICRyb3V0ZToge1xuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzMzOTMjaXNzdWVjb21tZW50LTExNTg0NzAxNDlcbiAgICAgIGZsdXNoOiAncG9zdCcsXG4gICAgICBoYW5kbGVyKHRvLCBmcm9tKSB7XG4gICAgICAgIC8vIFNlZSBpZiB0aGUgcm91dGUgY2hhbmdlcyBjb21wbGV0ZWx5LCBhbmQgY2xlYXIgdGhlIGRhdGEgaWYgaXQgZG9lcy5cbiAgICAgICAgaWYgKHRoaXMuaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pKSB7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuZGF0YSA9IHt9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgdGhpcy5kYXRhID0gZGF0YVxuICAgIH0sXG5cbiAgICBnZXRDaGlsZFBhdGgocGF0aCkge1xuICAgICAgLy8gTGlzdHMgaW5zaWRlIHNpbmdsZS1jb21wb25lbnQgdmlld3MgdXNlIHRoZSB2aWV3J3MgcGF0aCBmb3Igc3ViLXBhdGhzOlxuICAgICAgcmV0dXJuIHRoaXMuaXNTaW5nbGVDb21wb25lbnRWaWV3XG4gICAgICAgID8gdGhpcy5wYXRoXG4gICAgICAgIDogYCR7dGhpcy5wYXRofS8ke3BhdGh9YFxuICAgIH0sXG5cbiAgICBzZXRMb2FkaW5nKGlzTG9hZGluZykge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSAhIWlzTG9hZGluZ1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHsgdW5yZWZFbGVtZW50IH0gZnJvbSAnQHZ1ZXVzZS9jb3JlJztcbmltcG9ydCB7IGNyZWF0ZUZvY3VzVHJhcCB9IGZyb20gJ2ZvY3VzLXRyYXAnO1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50LCByZWYsIHdhdGNoLCBvblNjb3BlRGlzcG9zZSwgaCB9IGZyb20gJ3Z1ZSc7XG5cbmNvbnN0IFVzZUZvY3VzVHJhcCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDb21wb25lbnQoe1xuICBuYW1lOiBcIlVzZUZvY3VzVHJhcFwiLFxuICBwcm9wczogW1wiYXNcIiwgXCJvcHRpb25zXCJdLFxuICBzZXR1cChwcm9wcywgeyBzbG90cyB9KSB7XG4gICAgbGV0IHRyYXA7XG4gICAgY29uc3QgdGFyZ2V0ID0gcmVmKCk7XG4gICAgY29uc3QgYWN0aXZhdGUgPSAoKSA9PiB0cmFwICYmIHRyYXAuYWN0aXZhdGUoKTtcbiAgICBjb25zdCBkZWFjdGl2YXRlID0gKCkgPT4gdHJhcCAmJiB0cmFwLmRlYWN0aXZhdGUoKTtcbiAgICB3YXRjaChcbiAgICAgICgpID0+IHVucmVmRWxlbWVudCh0YXJnZXQpLFxuICAgICAgKGVsKSA9PiB7XG4gICAgICAgIGlmICghZWwpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0cmFwID0gY3JlYXRlRm9jdXNUcmFwKGVsLCBwcm9wcy5vcHRpb25zIHx8IHt9KTtcbiAgICAgICAgYWN0aXZhdGUoKTtcbiAgICAgIH0sXG4gICAgICB7IGZsdXNoOiBcInBvc3RcIiB9XG4gICAgKTtcbiAgICBvblNjb3BlRGlzcG9zZSgoKSA9PiBkZWFjdGl2YXRlKCkpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAoc2xvdHMuZGVmYXVsdClcbiAgICAgICAgcmV0dXJuIGgocHJvcHMuYXMgfHwgXCJkaXZcIiwgeyByZWY6IHRhcmdldCB9LCBzbG90cy5kZWZhdWx0KCkpO1xuICAgIH07XG4gIH1cbn0pO1xuXG5leHBvcnQgeyBVc2VGb2N1c1RyYXAgfTtcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1kaWFsb2coXG4gIHJlZj1cImRpYWxvZ1wiXG4gIHJvbGU9XCJkaWFsb2dcIlxuICBhcmlhLWV4cGFuZGVkPVwidHJ1ZVwiXG4gIGFyaWEtbW9kYWw9XCJ0cnVlXCJcbiAgOnN0eWxlPVwieyAnLS13aWR0aCc6IHNldHRpbmdzLndpZHRoID8gYCR7c2V0dGluZ3Mud2lkdGh9cHhgIDogbnVsbCB9XCJcbiAgQG1vdXNldXA9XCJvbk1vdXNlVXBcIlxuKVxuICBVc2VGb2N1c1RyYXAuZGl0by1kaWFsb2dfX2ZvY3VzLXRyYXAoOm9wdGlvbnM9XCJmb2N1c1RyYXBPcHRpb25zXCIpXG4gICAgZm9ybS5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gICAgICBAc3VibWl0LnByZXZlbnQ9XCJzdWJtaXRcIlxuICAgIClcbiAgICAgIC8vIEFkZCBhbiBpbnZpc2libGUgYnV0dG9uIHRoYXQgcHJldmVudHMgdGhlIGNsZWFyYWJsZSBidXR0b25zIGZyb20gYmVpbmdcbiAgICAgIC8vIHByZXNzZWQgd2hlbiB0aGUgdXNlciBwcmVzc2VzIHRoZSBFbnRlciBrZXk6XG4gICAgICBidXR0b24oXG4gICAgICAgIHYtc2hvdz1cImZhbHNlXCJcbiAgICAgIClcbiAgICAgIERpdG9TY2hlbWEoXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YT1cImRpYWxvZ0RhdGFcIlxuICAgICAgICBwYWRkaW5nPVwicm9vdFwiXG4gICAgICAgIHNjcm9sbGFibGVcbiAgICAgICAgZ2VuZXJhdGVMYWJlbHNcbiAgICAgIClcbiAgICAgICAgdGVtcGxhdGUoI2J1dHRvbnMpXG4gICAgICAgICAgRGl0b0J1dHRvbnMuZGl0by1idXR0b25zLWxhcmdlKFxuICAgICAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgICAgIDpkYXRhPVwiZGlhbG9nRGF0YVwiXG4gICAgICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGNsb25lIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0QnV0dG9uU2NoZW1hcyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IFVzZUZvY3VzVHJhcCB9IGZyb20gJ0B2dWV1c2UvaW50ZWdyYXRpb25zL3VzZUZvY3VzVHJhcC9jb21wb25lbnQnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0RpYWxvZycsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IFVzZUZvY3VzVHJhcCB9LFxuICBlbWl0czogWydyZW1vdmUnXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkZGlhbG9nQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgY29tcG9uZW50czogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcHJvbWlzZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBzZXR0aW5nczoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogKCkgPT4gKHtcbiAgICAgICAgd2lkdGg6IDQ4MCxcbiAgICAgICAgY2xpY2tUb0Nsb3NlOiBmYWxzZVxuICAgICAgfSlcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICAvLyBNYWtlIHN1cmUgZGlhbG9nIGRhdGEgY29udGFpbnMgYWxsIHRoZSBleHBlY3RlZCBrZXlzXG4gICAgY29uc3QgZGlhbG9nRGF0YSA9IGNsb25lKHRoaXMuZGF0YSlcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmNvbXBvbmVudHMpIHtcbiAgICAgIGlmICghKGtleSBpbiBkaWFsb2dEYXRhKSkge1xuICAgICAgICBkaWFsb2dEYXRhW2tleV0gPSBudWxsXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBkaWFsb2dEYXRhXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZGlhbG9nQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ2RpYWxvZycsXG4gICAgICAgIGNvbXBvbmVudHM6IHRoaXMuY29tcG9uZW50c1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLmJ1dHRvbnMpKS5tYXAoXG4gICAgICAgICAgLy8gUHJvY2VzcyB0aGUgYnV0dG9uIHNjaGVtYXMgdG8gYWRkIGRlZmF1bHQgY2xpY2sgZXZlbnRzXG4gICAgICAgICAgLy8gZm9yIGJvdGggJ3N1Ym1pdCcgYW5kICdjYW5jZWwnIGJ1dHRvbnM6XG4gICAgICAgICAgKFtrZXksIHNjaGVtYV0pID0+IHtcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICdjYW5jZWwnICYmICFzY2hlbWEuZXZlbnRzKSB7XG4gICAgICAgICAgICAgIHNjaGVtYSA9IHtcbiAgICAgICAgICAgICAgICAuLi5zY2hlbWEsXG4gICAgICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgICAgICBjbGljazogKCkgPT4gdGhpcy5jYW5jZWwoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFtrZXksIHNjaGVtYV1cbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgZm9jdXNUcmFwT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgICAgZmFsbGJhY2tGb2N1czogKCkgPT4gdGhpcy4kcmVmcy5kaWFsb2csXG4gICAgICAgIG9uRGVhY3RpdmF0ZTogdGhpcy5jYW5jZWxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaGFzQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmJ1dHRvblNjaGVtYXMpLmxlbmd0aCA+IDBcbiAgICB9LFxuXG4gICAgaGFzQ2FuY2VsKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5idXR0b25TY2hlbWFzLmNhbmNlbFxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMuZG9tT24od2luZG93LCB7XG4gICAgICBrZXl1cDogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoKHRoaXMuaGFzQ2FuY2VsIHx8ICF0aGlzLmhhc0J1dHRvbnMpICYmIGV2ZW50LmtleUNvZGUgPT09IDI3KSB7XG4gICAgICAgICAgdGhpcy5jYW5jZWwoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgcmVtb3ZlKCkge1xuICAgICAgdGhpcy4kZW1pdCgncmVtb3ZlJylcbiAgICB9LFxuXG4gICAgcmVzb2x2ZSh2YWx1ZSkge1xuICAgICAgdGhpcy5wcm9taXNlLnJlc29sdmUodmFsdWUpXG4gICAgICB0aGlzLnJlbW92ZSgpXG4gICAgfSxcblxuICAgIHJlamVjdCh2YWx1ZSkge1xuICAgICAgdGhpcy5wcm9taXNlLnJlamVjdCh2YWx1ZSlcbiAgICAgIHRoaXMucmVtb3ZlKClcbiAgICB9LFxuXG4gICAgc3VibWl0KCkge1xuICAgICAgdGhpcy5yZXNvbHZlKHRoaXMuZGlhbG9nRGF0YSlcbiAgICB9LFxuXG4gICAgY2FuY2VsKCkge1xuICAgICAgLy8gV2hlbiBjYW5jZWxsaW5nLCByZXNvbHZlIGFzIGB1bmRlZmluZWRgIHNvIHdlIGNhbiBoYXZlIGRpYWxvZ3NcbiAgICAgIC8vIHJldHVybmluZyBudWxsIGFzIGEgZGVmaW5lZCB2YWx1ZSBhcyB3ZWxsLlxuICAgICAgdGhpcy5yZXNvbHZlKHVuZGVmaW5lZClcbiAgICB9LFxuXG4gICAgY2xvc2UoKSB7XG4gICAgICB0aGlzLmNhbmNlbCgpXG4gICAgfSxcblxuICAgIG9uTW91c2VVcCgpIHtcbiAgICAgIGlmICh0aGlzLnNldHRpbmdzLmNsaWNrVG9DbG9zZSkge1xuICAgICAgICB0aGlzLmNsb3NlKClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1kaWFsb2cge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGluc2V0OiAwO1xuICB6LWluZGV4OiAkei1pbmRleC1kaWFsb2c7XG4gIHBhZGRpbmc6ICRjb250ZW50LXBhZGRpbmc7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAvLyBQcmV2ZW50IHNjcm9sbGluZyBvZiB0aGUgcGFnZSBiZWhpbmQgdGhlIGRpYWxvZzpcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYmFja2dyb3VuZDogcmdiKDAsIDAsIDAsIDAuMik7XG5cbiAgJl9fZm9jdXMtdHJhcCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBtYXgtaGVpZ2h0OiAxMDAlO1xuICB9XG5cbiAgLy8gVE9ETzogYCZfX2lubmVyYFxuICBmb3JtIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIG1heC13aWR0aDogdmFyKC0td2lkdGgsIDQ4MHB4KTtcbiAgICBtYXgtaGVpZ2h0OiAxMDAlO1xuICAgIGJveC1zaGFkb3c6IDAgMjBweCA2MHB4IC0ycHggcmdiKDI3LCAzMywgNTgsIDAuNCk7XG4gIH1cbn1cblxuLmRpdG8tZGlhbG9nLWVudGVyLWFjdGl2ZSxcbi5kaXRvLWRpYWxvZy1sZWF2ZS1hY3RpdmUge1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzO1xuXG4gIGZvcm0ge1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjI1cztcbiAgfVxufVxuXG4uZGl0by1kaWFsb2ctZW50ZXItZnJvbSxcbi5kaXRvLWRpYWxvZy1sZWF2ZS10byB7XG4gIG9wYWNpdHk6IDA7XG5cbiAgZm9ybSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0yMHB4KTtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1yb290KFxuICA6ZGF0YS1hZ2VudC1icm93c2VyPVwiYXBwU3RhdGUuYWdlbnQuYnJvd3NlclwiXG4gIDpkYXRhLWFnZW50LXBsYXRmb3JtPVwiYXBwU3RhdGUuYWdlbnQucGxhdGZvcm1cIlxuICA6ZGF0YS1hZ2VudC12ZXJzaW9uPVwiYXBwU3RhdGUuYWdlbnQudmVyc2lvbk51bWJlclwiXG4pXG4gIFRyYW5zaXRpb24obmFtZT1cImRpdG8tZHJhZ1wiKVxuICAgIC5kaXRvLWRyYWctb3ZlcmxheShcbiAgICAgIHYtaWY9XCJpc0RyYWdnaW5nRmlsZXNcIlxuICAgIClcbiAgVHJhbnNpdGlvbkdyb3VwKG5hbWU9XCJkaXRvLWRpYWxvZ1wiKVxuICAgIERpdG9EaWFsb2coXG4gICAgICB2LWZvcj1cIihkaWFsb2csIGtleSkgaW4gZGlhbG9nc1wiXG4gICAgICA6a2V5PVwia2V5XCJcbiAgICAgIDpjb21wb25lbnRzPVwiZGlhbG9nLmNvbXBvbmVudHNcIlxuICAgICAgOmJ1dHRvbnM9XCJkaWFsb2cuYnV0dG9uc1wiXG4gICAgICA6cHJvbWlzZT1cImRpYWxvZy5wcm9taXNlXCJcbiAgICAgIDpkYXRhPVwiZGlhbG9nLmRhdGFcIlxuICAgICAgOnNldHRpbmdzPVwiZGlhbG9nLnNldHRpbmdzXCJcbiAgICAgIEByZW1vdmU9XCJyZW1vdmVEaWFsb2coa2V5KVwiXG4gICAgKVxuICBEaXRvTmF2aWdhdGlvblxuICBtYWluLmRpdG8tcGFnZS5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gICAgdi1yZXNpemU9XCJvblJlc2l6ZVBhZ2VcIlxuICAgIDpjbGFzcz1cInBhZ2VDbGFzc2VzXCJcbiAgKVxuICAgIERpdG9IZWFkZXIoXG4gICAgICA6c3Bpbm5lcj1cIm9wdGlvbnMuc3Bpbm5lclwiXG4gICAgICA6aXNMb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICApXG4gICAgUm91dGVyVmlld1xuICBEaXRvU2lkZWJhclxuICAgIERpdG9BY2NvdW50KFxuICAgICAgdi1pZj1cInVzZXJcIlxuICAgIClcbiAgICBhLmRpdG8tbG9naW4oXG4gICAgICB2LWVsc2UtaWY9XCJhbGxvd0xvZ2luXCJcbiAgICAgIEBjbGljaz1cInJvb3RDb21wb25lbnQubG9naW4oKVwiXG4gICAgKVxuICAgICAgc3BhbiBMb2dpblxuICBEaXRvTm90aWZpY2F0aW9ucyhyZWY9XCJub3RpZmljYXRpb25zXCIpXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgZGVsZWdhdGUgYXMgdGlwcHlEZWxlZ2F0ZSB9IGZyb20gJ3RpcHB5LmpzJ1xuaW1wb3J0IHsgbWFwQ29uY3VycmVudGx5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IERpdG9Vc2VyIGZyb20gJy4uL0RpdG9Vc2VyLmpzJ1xuaW1wb3J0IERpdG9WaWV3IGZyb20gJy4uL2NvbXBvbmVudHMvRGl0b1ZpZXcudnVlJ1xuaW1wb3J0IERpdG9EaWFsb2cgZnJvbSAnLi9EaXRvRGlhbG9nLnZ1ZSdcbmltcG9ydCB7XG4gIHByb2Nlc3NWaWV3LFxuICByZXNvbHZlVmlld3MsXG4gIHByb2Nlc3NTY2hlbWFDb21wb25lbnRzXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvUm9vdCcsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IERpdG9EaWFsb2cgfSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdmlld3M6ICgpID0+IHRoaXMucmVzb2x2ZWRWaWV3c1xuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHVucmVzb2x2ZWRWaWV3czogeyB0eXBlOiBbT2JqZWN0LCBGdW5jdGlvbiwgUHJvbWlzZV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgb3B0aW9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc29sdmVkVmlld3M6IHt9LFxuICAgICAgcmVtb3ZlUm91dGVzOiBudWxsLFxuICAgICAgZGlhbG9nczoge30sXG4gICAgICBwYWdlV2lkdGg6IDAsXG4gICAgICBsb2FkaW5nQ291bnQ6IDAsXG4gICAgICBhbGxvd0xvZ2luOiBmYWxzZSxcbiAgICAgIGlzRHJhZ2dpbmdGaWxlczogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBub3RpZmljYXRpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNNb3VudGVkICYmIHRoaXMuJHJlZnMubm90aWZpY2F0aW9uc1xuICAgIH0sXG5cbiAgICBpc0xvYWRpbmcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5sb2FkaW5nQ291bnQgPiAwXG4gICAgfSxcblxuICAgIHBhZ2VDbGFzc2VzKCkge1xuICAgICAgY29uc3QgcHJlZml4ID0gJ2RpdG8tcGFnZSdcbiAgICAgIC8vIE5PVEU6IEtlZXAgc3luY2VkIHdpdGggJGNvbnRlbnQtd2lkdGggaW4gU0NTUzpcbiAgICAgIGNvbnN0IGNvbnRlbnRXaWR0aCA9IDkwMFxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgdGhpcy5hcHBTdGF0ZS5wYWdlQ2xhc3MsXG4gICAgICAgIHtcbiAgICAgICAgICBbYCR7cHJlZml4fS0td2lkdGgtODBgXTogdGhpcy5wYWdlV2lkdGggPD0gY29udGVudFdpZHRoICogMC44LFxuICAgICAgICAgIFtgJHtwcmVmaXh9LS13aWR0aC02MGBdOiB0aGlzLnBhZ2VXaWR0aCA8PSBjb250ZW50V2lkdGggKiAwLjZcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuYXBwU3RhdGUudGl0bGUgPSBkb2N1bWVudC50aXRsZSB8fCAnRGl0by5qcyBBZG1pbidcbiAgICAvLyBXaXRoIGhvdC1yZWxvYWRpbmcsIGl0IGxvb2tzIGxpa2UgZGVzdHJveWVkIGhvb2tzIGFyZW4ndCBhbHdheXMgY2FsbGVkXG4gICAgLy8gZm9yIHJvdXRlIGNvbXBvbmVudHMgc28gcmVzZXQgdGhlIGFycmF5IG9mIHJlZ2lzdGVyZWQgY29tcG9uZW50cyBpbnN0ZWFkLlxuICAgIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzID0gW11cbiAgfSxcblxuICBhc3luYyBtb3VudGVkKCkge1xuICAgIHRoaXMuc2V0dXBEcmFnQW5kRHJvcCgpXG5cbiAgICB0aXBweURlbGVnYXRlKHRoaXMuJGVsLCB7XG4gICAgICB0YXJnZXQ6ICcuZGl0by1pbmZvJyxcbiAgICAgIHRoZW1lOiAnaW5mbycsXG4gICAgICBhbmltYXRpb246ICdzaGlmdC1hd2F5LXN1YnRsZScsXG4gICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgIGRlbGF5OiAyNTAsXG4gICAgICB6SW5kZXg6IDEsXG4gICAgICBhcHBlbmRUbzogbm9kZSA9PiBub2RlLmNsb3Nlc3QoJy5kaXRvLXBhbmUnKSxcbiAgICAgIG9uU2hvdzogaW5zdGFuY2UgPT4gaW5zdGFuY2Uuc2V0Q29udGVudChpbnN0YW5jZS5yZWZlcmVuY2UuZGF0YXNldC5pbmZvKVxuICAgIH0pXG5cbiAgICAvLyBDbGVhciB0aGUgbGFiZWwgbWFya2VkIGFzIGFjdGl2ZSBvbiBhbGwgbW91c2UgYW5kIGtleWJvYXJkIGV2ZW50cywgZXhjZXB0XG4gICAgLy8gdGhlIG9uZXMgdGhhdCBEaXRvTGFiZWwgaXRzZWxmIGludGVyY2VwdHMuXG4gICAgdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgY2xpY2s6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKCFldmVudC50YXJnZXQuY2xvc2VzdCgnLmRpdG8tbGFiZWwnKSkge1xuICAgICAgICAgIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIGtleXVwOiBldmVudCA9PiB7XG4gICAgICAgIGlmIChldmVudC5jb2RlID09PSAnVGFiJykge1xuICAgICAgICAgIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuYWxsb3dMb2dpbiA9IGZhbHNlXG4gICAgICBpZiAoYXdhaXQgdGhpcy5mZXRjaFVzZXIoKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnJlc29sdmVWaWV3cygpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB0aGlzLmxvZ2luKClcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgIH1cbiAgICB0aGlzLmFsbG93TG9naW4gPSB0cnVlXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldHVwRHJhZ0FuZERyb3AoKSB7XG4gICAgICAvLyBUaGlzIGNvZGUgb25seSBoYXBwZW5zIHRoZSB2aXN1YWwgZWZmZWN0cyBhcm91bmQgZHJhZ2dpbmcgYW5kIGRyb3BwaW5nXG4gICAgICAvLyBmaWxlcyBpbnRvIGEgYERpdG9UeXBlVXBsb2FkYCBjb21wb25lbnQuIFRoZSBhY3R1YWwgdXBsb2FkaW5nIGlzXG4gICAgICAvLyBoYW5kbGVkIGJ5IHRoZSBgRGl0b1R5cGVVcGxvYWRgIGNvbXBvbmVudCBpdHNlbGYuXG5cbiAgICAgIGxldCBkcmFnQ291bnQgPSAwXG4gICAgICBsZXQgdXBsb2FkcyA9IFtdXG5cbiAgICAgIGNvbnN0IHRvZ2dsZURyb3BUYXJnZXRDbGFzcyA9IGVuYWJsZWQgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IHVwbG9hZCBvZiB1cGxvYWRzKSB7XG4gICAgICAgICAgdXBsb2FkXG4gICAgICAgICAgICAuY2xvc2VzdCgnLmRpdG8tY29udGFpbmVyJylcbiAgICAgICAgICAgIC5jbGFzc0xpc3QudG9nZ2xlKCdkaXRvLWRyb3AtdGFyZ2V0JywgZW5hYmxlZClcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWVuYWJsZWQpIHtcbiAgICAgICAgICB1cGxvYWRzID0gW11cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBzZXREcmFnZ2luZ0ZpbGVzID0gZW5hYmxlZCA9PiB7XG4gICAgICAgIHRoaXMuaXNEcmFnZ2luZ0ZpbGVzID0gZW5hYmxlZFxuICAgICAgICBpZiAoZW5hYmxlZCkge1xuICAgICAgICAgIHRvZ2dsZURyb3BUYXJnZXRDbGFzcyh0cnVlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdG9nZ2xlRHJvcFRhcmdldENsYXNzKGZhbHNlKSwgMTUwKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgICAgZHJhZ2VudGVyOiBldmVudCA9PiB7XG4gICAgICAgICAgaWYgKCFkcmFnQ291bnQgJiYgZXZlbnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgICAgICAgICB1cGxvYWRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmRpdG8tdXBsb2FkJylcbiAgICAgICAgICAgIGNvbnN0IGhhc1VwbG9hZHMgPSB1cGxvYWRzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkID0gaGFzVXBsb2FkcyA/ICdjb3B5JyA6ICdub25lJ1xuICAgICAgICAgICAgaWYgKGhhc1VwbG9hZHMpIHtcbiAgICAgICAgICAgICAgc2V0RHJhZ2dpbmdGaWxlcyh0cnVlKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZHJhZ0NvdW50KytcbiAgICAgICAgfSxcblxuICAgICAgICBkcmFnbGVhdmU6IGV2ZW50ID0+IHtcbiAgICAgICAgICBkcmFnQ291bnQtLVxuICAgICAgICAgIGlmICghZHJhZ0NvdW50ICYmIGV2ZW50LmRhdGFUcmFuc2Zlcikge1xuICAgICAgICAgICAgc2V0RHJhZ2dpbmdGaWxlcyhmYWxzZSlcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgZHJhZ292ZXI6IGV2ZW50ID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgICAgICAgICBjb25zdCBjYW5Ecm9wID0gZXZlbnQudGFyZ2V0LmNsb3Nlc3QoXG4gICAgICAgICAgICAgICcuZGl0by1jb250YWluZXI6aGFzKC5kaXRvLXVwbG9hZCknXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBldmVudC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9IGNhbkRyb3AgPyAnY29weScgOiAnbm9uZSdcbiAgICAgICAgICAgIGlmICghY2FuRHJvcCkge1xuICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGRyb3A6IGV2ZW50ID0+IHtcbiAgICAgICAgICBkcmFnQ291bnQgPSAwXG4gICAgICAgICAgaWYgKGV2ZW50LmRhdGFUcmFuc2Zlcikge1xuICAgICAgICAgICAgc2V0RHJhZ2dpbmdGaWxlcyhmYWxzZSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG5vdGlmeSh7IHR5cGUgPSAnaW5mbycsIHRpdGxlLCB0ZXh0LCBlcnJvciB9ID0ge30pIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9ucy5ub3RpZnkoeyB0eXBlLCB0aXRsZSwgdGV4dCwgZXJyb3IgfSlcbiAgICB9LFxuXG4gICAgY2xvc2VOb3RpZmljYXRpb25zKCkge1xuICAgICAgdGhpcy5ub3RpZmljYXRpb25zLmRlc3Ryb3lBbGwoKVxuICAgIH0sXG5cbiAgICByZWdpc3RlckxvYWRpbmcoaXNMb2FkaW5nKSB7XG4gICAgICB0aGlzLmxvYWRpbmdDb3VudCArPSBpc0xvYWRpbmcgPyAxIDogLTFcbiAgICB9LFxuXG4gICAgc2hvd0RpYWxvZyh7IGNvbXBvbmVudHMsIGJ1dHRvbnMsIGRhdGEsIHNldHRpbmdzIH0pIHtcbiAgICAgIC8vIFNob3dzIGEgZGl0by1kaWFsb2cgY29tcG9uZW50IGFuZCB3cmFwcyBpdCBpbiBhIHByb21pc2Ugc28gdGhhdCB0aGVcbiAgICAgIC8vIGJ1dHRvbnMgaW4gdGhlIGRpYWxvZyBjYW4gdXNlIGBkaWFsb2cucmVzb2x2ZSgpYCBhbmQgYGRpYWxvZy5yZWplY3QoKWBcbiAgICAgIC8vIHRvIGNsb3NlIHRoZSBtb2RhbCBkaWFsb2cgYW5kIHJlc29sdmUgLyByZWplY3QgdGhlIHByb21pc2UgYXQgb25jZS5cbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShcbiAgICAgICAgYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIC8vIFByb2Nlc3MgY29tcG9uZW50cyB0byByZXNvbHZlIGFzeW5jIHNjaGVtYXMuXG4gICAgICAgICAgY29uc3Qgcm91dGVzID0gW11cbiAgICAgICAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhcbiAgICAgICAgICAgIHRoaXMuYXBpLFxuICAgICAgICAgICAgeyB0eXBlOiAnZGlhbG9nJywgY29tcG9uZW50cyB9LFxuICAgICAgICAgICAgcm91dGVzLFxuICAgICAgICAgICAgMFxuICAgICAgICAgIClcbiAgICAgICAgICBpZiAocm91dGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgJ0RpYWxvZ3MgZG8gbm90IHN1cHBvcnQgY29tcG9uZW50cyB0aGF0IHByb2R1Y2Ugcm91dGVzJ1xuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBrZXkgPSBgZGlhbG9nLSR7KytkaWFsb2dJZH1gXG4gICAgICAgICAgdGhpcy5kaWFsb2dzW2tleV0gPSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLFxuICAgICAgICAgICAgYnV0dG9ucyxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBzZXR0aW5ncyxcbiAgICAgICAgICAgIHByb21pc2U6IHsgcmVzb2x2ZSwgcmVqZWN0IH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9LFxuXG4gICAgcmVtb3ZlRGlhbG9nKGtleSkge1xuICAgICAgZGVsZXRlIHRoaXMuZGlhbG9nc1trZXldXG4gICAgfSxcblxuICAgIGFzeW5jIGxvZ2luKCkge1xuICAgICAgdGhpcy5hbGxvd0xvZ2luID0gdHJ1ZVxuICAgICAgY29uc3Qge1xuICAgICAgICBhZGRpdGlvbmFsQ29tcG9uZW50cyxcbiAgICAgICAgcmVkaXJlY3RBZnRlckxvZ2luXG4gICAgICB9ID0gdGhpcy5vcHRpb25zLmxvZ2luIHx8IHt9XG4gICAgICBjb25zdCBsb2dpbkRhdGEgPSBhd2FpdCB0aGlzLnNob3dEaWFsb2coe1xuICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgdXNlcm5hbWU6IHtcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIGF1dG9mb2N1czogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGFzc3dvcmQ6IHtcbiAgICAgICAgICAgIHR5cGU6ICdwYXNzd29yZCdcbiAgICAgICAgICB9LFxuICAgICAgICAgIC4uLmFkZGl0aW9uYWxDb21wb25lbnRzXG4gICAgICAgIH0sXG4gICAgICAgIGJ1dHRvbnM6IHtcbiAgICAgICAgICBjYW5jZWw6IHtcbiAgICAgICAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgICAgICAgdGV4dDogJ0NhbmNlbCdcbiAgICAgICAgICAgIC8vIE5PVEU6IFRoZSBjbGljayBldmVudCBpcyBhZGRlZCBpbiBEaXRvRGlhbG9nLmJ1dHRvblNjaGVtYXMoKVxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBsb2dpbjoge1xuICAgICAgICAgICAgdHlwZTogJ3N1Ym1pdCcsXG4gICAgICAgICAgICB0ZXh0OiAnTG9naW4nXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgaWYgKGxvZ2luRGF0YSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdCh7XG4gICAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMubG9naW4sXG4gICAgICAgICAgICBkYXRhOiBsb2dpbkRhdGEsXG4gICAgICAgICAgICBpbnRlcm5hbDogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKHJlZGlyZWN0QWZ0ZXJMb2dpbikge1xuICAgICAgICAgICAgbG9jYXRpb24ucmVwbGFjZShyZWRpcmVjdEFmdGVyTG9naW4pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VXNlcihyZXNwb25zZS5kYXRhLnVzZXIpXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlc29sdmVWaWV3cygpXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IGVyci5yZXNwb25zZT8uZGF0YT8uZXJyb3IgfHwgZXJyXG4gICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgdGl0bGU6ICdBdXRoZW50aWNhdGlvbiBFcnJvcicsXG4gICAgICAgICAgICB0ZXh0OiBlcnJvclxuICAgICAgICAgIH0pXG4gICAgICAgICAgdGhpcy5sb2dpbigpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbmF2aWdhdGVIb21lKCkge1xuICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGUoJy8nKVxuICAgIH0sXG5cbiAgICBhc3luYyBsb2dvdXQoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3Qoe1xuICAgICAgICAgIHJlc291cmNlOiB0aGlzLmFwaS51c2Vycy5sb2dvdXQsXG4gICAgICAgICAgaW50ZXJuYWw6IHRydWVcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuc3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMuc2V0VXNlcihudWxsKVxuICAgICAgICAgIHRoaXMubmF2aWdhdGVIb21lKClcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFVzZXIoKSB7XG4gICAgICBsZXQgdXNlciA9IG51bGxcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdCh7XG4gICAgICAgICAgcmVzb3VyY2U6IHRoaXMuYXBpLnVzZXJzLnNlc3Npb24sXG4gICAgICAgICAgaW50ZXJuYWw6IHRydWVcbiAgICAgICAgfSlcbiAgICAgICAgdXNlciA9IHJlc3BvbnNlLmRhdGEudXNlciB8fCBudWxsXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBlcnIucmVzcG9uc2U/LmRhdGE/LmVycm9yIHx8IGVyclxuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICBlcnJvcixcbiAgICAgICAgICB0aXRsZTogJ0F1dGhlbnRpY2F0aW9uIEVycm9yJyxcbiAgICAgICAgICB0ZXh0OiBlcnJvclxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgdGhpcy5zZXRVc2VyKHVzZXIpXG4gICAgICByZXR1cm4gdXNlclxuICAgIH0sXG5cbiAgICBzZXRVc2VyKHVzZXIpIHtcbiAgICAgIHRoaXMuYXBwU3RhdGUudXNlciA9IChcbiAgICAgICAgdXNlciAmJlxuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodXNlciwgRGl0b1VzZXIucHJvdG90eXBlKVxuICAgICAgKVxuICAgICAgLy8gQ2xlYXIgcmVzb2x2ZWQgdmlld3Mgd2hlbiB1c2VyIGlzIGxvZ2dlZCBvdXQuXG4gICAgICBpZiAoIXVzZXIpIHtcbiAgICAgICAgdGhpcy5yZXNvbHZlZFZpZXdzID0ge31cbiAgICAgICAgdGhpcy5uYXZpZ2F0ZUhvbWUoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBlbnN1cmVVc2VyKCkge1xuICAgICAgaWYgKCEoYXdhaXQgdGhpcy5mZXRjaFVzZXIoKSkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2dpbigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHJlc29sdmVWaWV3cygpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZWRWaWV3cyA9IGF3YWl0IHJlc29sdmVWaWV3cyh0aGlzLnVucmVzb2x2ZWRWaWV3cylcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICghZXJyb3IucmVxdWVzdCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgICAgLy8gQ29sbGVjdCBhbGwgcm91dGVzIGZyb20gdGhlIHJvb3Qgc2NoZW1hIGNvbXBvbmVudHNcbiAgICAgIGNvbnN0IHJvdXRlcyA9IGF3YWl0IG1hcENvbmN1cnJlbnRseShcbiAgICAgICAgT2JqZWN0LmVudHJpZXModGhpcy5yZXNvbHZlZFZpZXdzKSxcbiAgICAgICAgKFtuYW1lLCBzY2hlbWFdKSA9PiBwcm9jZXNzVmlldyhEaXRvVmlldywgdGhpcy5hcGksIHNjaGVtYSwgbmFtZSlcbiAgICAgIClcbiAgICAgIC8vIE5vdyB0aGF0IHRoZSByb3V0ZXMgYXJlIGxvYWRlZCwgcmVwbGFjZSBhbGwgZXhpc3Rpbmcgcm91dGVzIHdpdGggdGhlXG4gICAgICAvLyBuZXcgcm91dGVzLCBhbmQgcmVzdG9yZSB0aGUgY3VycmVudCBwYXRoLlxuICAgICAgY29uc3QgeyBmdWxsUGF0aCB9ID0gdGhpcy4kcm91dGVcbiAgICAgIHRoaXMucmVtb3ZlUm91dGVzPy4oKVxuICAgICAgdGhpcy5yZW1vdmVSb3V0ZXMgPSBhZGRSb3V0ZXModGhpcy4kcm91dGVyLCBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAncm9vdCcsXG4gICAgICAgICAgcGF0aDogJy8nLFxuICAgICAgICAgIGNvbXBvbmVudHM6IHt9XG4gICAgICAgIH0sXG4gICAgICAgIC4uLnJvdXRlcy5mbGF0KClcbiAgICAgIF0pXG4gICAgICB0aGlzLiRyb3V0ZXIucmVwbGFjZShmdWxsUGF0aClcbiAgICB9LFxuXG4gICAgb25SZXNpemVQYWdlKHsgY29udGVudFJlY3Q6IHsgd2lkdGggfSB9KSB7XG4gICAgICB0aGlzLnBhZ2VXaWR0aCA9IHdpZHRoXG4gICAgfVxuICB9XG59KVxuXG5sZXQgZGlhbG9nSWQgPSAwXG5cbmZ1bmN0aW9uIGFkZFJvdXRlcyhyb3V0ZXIsIHJvdXRlcykge1xuICBjb25zdCByZW1vdmVycyA9IFtdXG4gIGZvciAoY29uc3Qgcm91dGUgb2Ygcm91dGVzKSB7XG4gICAgY29uc3QgcmVtb3ZlID0gcm91dGVyLmFkZFJvdXRlKHJvdXRlKVxuICAgIHJlbW92ZXJzLnB1c2gocmVtb3ZlKVxuICB9XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBmb3IgKGNvbnN0IHJlbW92ZSBvZiByZW1vdmVycykge1xuICAgICAgcmVtb3ZlKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9zdHlsZSc7XG5cbi5kaXRvLWFwcCxcbi5kaXRvLXJvb3Qge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBkaXNwbGF5OiBmbGV4O1xufVxuXG4uZGl0by1wYWdlIHtcbiAgLS1tYXgtY29udGVudC13aWR0aDogI3skY29udGVudC13aWR0aH07XG4gIC0tbWF4LXBhZ2Utd2lkdGg6IGNhbGModmFyKC0tbWF4LWNvbnRlbnQtd2lkdGgpICsgMiAqICN7JGNvbnRlbnQtcGFkZGluZ30pO1xuXG4gIGZsZXg6IDAgMSB2YXIoLS1tYXgtcGFnZS13aWR0aCk7XG4gIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmQ7XG4gIG1pbi13aWR0aDogMCU7XG4gIG1heC13aWR0aDogdmFyKC0tbWF4LXBhZ2Utd2lkdGgpO1xuICBvdmVyZmxvdzogdmlzaWJsZTsgLy8gRm9yIC5kaXRvLWhlYWRlciBmdWxsLXdpZHRoIGJhY2tncm91bmQuXG5cbiAgJi0td2lkZSB7XG4gICAgLS1tYXgtY29udGVudC13aWR0aDogI3skY29udGVudC13aWR0aC13aWRlfTtcbiAgfVxufVxuXG4uZGl0by1hY2NvdW50LFxuLmRpdG8tbG9naW4ge1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5kaXRvLWRyYWctb3ZlcmxheSB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICB6LWluZGV4OiAkei1pbmRleC1kcmFnLW92ZXJsYXk7XG4gIGJhY2tncm91bmQ6IHJnYigwLCAwLCAwLCAwLjI1KTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIGJhY2tkcm9wLWZpbHRlcjogYmx1cig4cHgpO1xufVxuXG4uZGl0by1kcm9wLXRhcmdldCB7XG4gIC0tc2hhZG93LWFscGhhOiAwLjI1O1xuXG4gIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmQ7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICB6LWluZGV4OiAkei1pbmRleC1kcmFnLW92ZXJsYXkgKyAxO1xuICBmaWx0ZXI6IGRyb3Atc2hhZG93KDAgNHB4IDhweCByZ2IoMCwgMCwgMCwgdmFyKC0tc2hhZG93LWFscGhhKSkpO1xufVxuXG4uZGl0by1kcmFnLWVudGVyLWFjdGl2ZSxcbi5kaXRvLWRyYWctbGVhdmUtYWN0aXZlIHtcbiAgJGR1cmF0aW9uOiAwLjE1cztcblxuICB0cmFuc2l0aW9uOlxuICAgIG9wYWNpdHkgJGR1cmF0aW9uLFxuICAgIGJhY2tkcm9wLWZpbHRlciAkZHVyYXRpb247XG5cbiAgfiAqIC5kaXRvLWRyb3AtdGFyZ2V0IHtcbiAgICB0cmFuc2l0aW9uOiBmaWx0ZXIgJGR1cmF0aW9uO1xuICB9XG59XG5cbi5kaXRvLWRyYWctZW50ZXItZnJvbSxcbi5kaXRvLWRyYWctbGVhdmUtdG8ge1xuICBvcGFjaXR5OiAwO1xuICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMCk7XG5cbiAgfiAqIC5kaXRvLWRyb3AtdGFyZ2V0IHtcbiAgICAtLXNoYWRvdy1hbHBoYTogMDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG51bC5kaXRvLW1lbnUoXG4gIHYtcmVzaXplPVwib25SZXNpemVcIlxuICA6c3R5bGU9XCJ7ICctLXdpZHRoJzogd2lkdGggPyBgJHt3aWR0aH1weGAgOiBudWxsIH1cIlxuKVxuICBsaShcbiAgICB2LWZvcj1cIml0ZW0gaW4gaXRlbXNcIlxuICApXG4gICAgdGVtcGxhdGUoXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKGl0ZW0pXCJcbiAgICApXG4gICAgICBhLmRpdG8tbGluayhcbiAgICAgICAgOmhyZWY9XCJnZXRJdGVtSHJlZihpdGVtKVwiXG4gICAgICAgIDpjbGFzcz1cImdldEl0ZW1DbGFzcyhpdGVtLCAnZGl0by1zdWItbWVudS1saW5rJylcIlxuICAgICAgICBAY2xpY2sucHJldmVudC5zdG9wPVwib25DbGlja0l0ZW0oaXRlbSlcIlxuICAgICAgKSB7eyBnZXRMYWJlbChpdGVtKSB9fVxuICAgICAgRGl0b01lbnUoXG4gICAgICAgIHYtaWY9XCJpdGVtLml0ZW1zXCJcbiAgICAgICAgOmNsYXNzPVwiZ2V0SXRlbUNsYXNzKGl0ZW0sICdkaXRvLXN1Yi1tZW51JylcIlxuICAgICAgICA6aXRlbXM9XCJpdGVtLml0ZW1zXCJcbiAgICAgICAgOnBhdGg9XCJnZXRJdGVtUGF0aChpdGVtLCBmYWxzZSlcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b01lbnUnLCB7XG4gIHByb3BzOiB7XG4gICAgaXRlbXM6IHtcbiAgICAgIHR5cGU6IFtPYmplY3QsIEFycmF5XSxcbiAgICAgIGRlZmF1bHQ6ICgpID0+IFtdXG4gICAgfSxcbiAgICBwYXRoOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB3aWR0aDogMFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25SZXNpemUoeyBjb250ZW50UmVjdDogeyB3aWR0aCB9IH0pIHtcbiAgICAgIGlmICh3aWR0aCkge1xuICAgICAgICB0aGlzLndpZHRoID0gd2lkdGhcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0SXRlbUNsYXNzKGl0ZW0sIHN1Yk1lbnVDbGFzcykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW3N1Yk1lbnVDbGFzc106ICEhaXRlbS5pdGVtcyxcbiAgICAgICAgJ2RpdG8tYWN0aXZlJzogdGhpcy5pc0FjdGl2ZUl0ZW0oaXRlbSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0SXRlbVBhdGgoaXRlbSwgZmlyc3RDaGlsZCkge1xuICAgICAgY29uc3QgcGF0aCA9IGl0ZW0ucGF0aCA/IGAke3RoaXMucGF0aH0vJHtpdGVtLnBhdGh9YCA6IG51bGxcbiAgICAgIHJldHVybiBmaXJzdENoaWxkICYmIHBhdGggJiYgaXRlbS5pdGVtc1xuICAgICAgICA/IGAke3BhdGh9JHt0aGlzLmdldEl0ZW1QYXRoKE9iamVjdC52YWx1ZXMoaXRlbS5pdGVtcylbMF0sIGZhbHNlKX1gXG4gICAgICAgIDogcGF0aFxuICAgIH0sXG5cbiAgICBnZXRJdGVtSHJlZihpdGVtKSB7XG4gICAgICBjb25zdCBwYXRoID0gdGhpcy5nZXRJdGVtUGF0aChpdGVtLCB0cnVlKVxuICAgICAgcmV0dXJuIHBhdGggPyB0aGlzLiRyb3V0ZXIucmVzb2x2ZShwYXRoKS5ocmVmIDogbnVsbFxuICAgIH0sXG5cbiAgICBpc0FjdGl2ZUl0ZW0oaXRlbSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy4kcm91dGUucGF0aC5zdGFydHNXaXRoKHRoaXMuZ2V0SXRlbVBhdGgoaXRlbSwgZmFsc2UpKSB8fFxuICAgICAgICBpdGVtLml0ZW1zICYmIE9iamVjdC52YWx1ZXMoaXRlbS5pdGVtcykuc29tZSh0aGlzLmlzQWN0aXZlSXRlbSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgb25DbGlja0l0ZW0oaXRlbSkge1xuICAgICAgY29uc3QgcGF0aCA9IHRoaXMuZ2V0SXRlbVBhdGgoaXRlbSwgdHJ1ZSlcbiAgICAgIGlmIChwYXRoKSB7XG4gICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgcGF0aCwgZm9yY2U6IHRydWUgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AdXNlICdzYXNzOmNvbG9yJztcbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLW1lbnUge1xuICAkaXRlbS1oZWlnaHQ6ICRtZW51LWZvbnQtc2l6ZSArIDIgKiAkbWVudS1wYWRkaW5nLXZlcjtcblxuICBib3JkZXItcmlnaHQ6ICRib3JkZXItc3R5bGU7XG4gIHBhZGRpbmc6IDAgJG1lbnUtc3BhY2luZztcblxuICBsaSB7XG4gICAgJjpoYXMoLmRpdG8tc3ViLW1lbnU6bm90KC5kaXRvLWFjdGl2ZSkpIHtcbiAgICAgIC8vIFBvcC1vdXQgc3ViLW1lbnVzIG9uIGhvdmVyOlxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIC5kaXRvLXN1Yi1tZW51LWxpbmsge1xuICAgICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVzdDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5kaXRvLXN1Yi1tZW51IHtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgd2lkdGg6IHZhcigtLXdpZHRoKTtcbiAgICAgICAgICB6LWluZGV4OiAkei1pbmRleC1oZWFkZXI7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKGNhbGModmFyKC0td2lkdGgpICsgMiAqICRtZW51LXNwYWNpbmcpKVxuICAgICAgICAgICAgdHJhbnNsYXRlWSgtJGl0ZW0taGVpZ2h0KTtcblxuICAgICAgICAgIGxpOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgICAgIC5kaXRvLWxpbmsge1xuICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgICAgICAvLyBGaWxsIHRoZSBnYXAgdG8gbm90IGxvb3NlIHRoZSBob3ZlciB3aGVuIG1vdmluZyBvdmVyIGl0LlxuICAgICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgICBsZWZ0OiAtMiAqICRtZW51LXNwYWNpbmc7XG4gICAgICAgICAgICB3aWR0aDogMiAqICRtZW51LXNwYWNpbmc7XG4gICAgICAgICAgICBoZWlnaHQ6ICRpdGVtLWhlaWdodDtcbiAgICAgICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gLmRpdG8tc3ViLW1lbnUtbGluayxcbiAgICAgICAgLmRpdG8tc3ViLW1lbnUge1xuICAgICAgICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tbGluayB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcGFkZGluZzogJG1lbnUtcGFkZGluZztcbiAgICBsaW5lLWhlaWdodDogJG1lbnUtbGluZS1oZWlnaHQ7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgbWFyZ2luLXRvcDogJG1lbnUtc3BhY2luZztcblxuICAgICY6Zm9jdXM6bm90KDphY3RpdmUsIC5kaXRvLWFjdGl2ZSkge1xuICAgICAgYm94LXNoYWRvdzogJHNoYWRvdy1mb2N1cztcbiAgICB9XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6IHJnYigyNTUsIDI1NSwgMjU1LCAwLjUpO1xuICAgIH1cblxuICAgICYuZGl0by1hY3RpdmUge1xuICAgICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tc3ViLW1lbnUtbGluayB7XG4gICAgJi5kaXRvLWFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kOiBjb2xvci5hZGp1c3QoJGNvbG9yLWFjdGl2ZSwgJGFscGhhOiAtMC4zKTtcbiAgICB9XG4gIH1cblxuICAuZGl0by1zdWItbWVudSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgICBib3JkZXItcmlnaHQ6IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlc3Q7XG5cbiAgICAmLmRpdG8tYWN0aXZlIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by10cmFpbFxuICB1bFxuICAgIGxpKFxuICAgICAgdi1mb3I9XCJjb21wb25lbnQgaW4gdHJhaWxcIlxuICAgIClcbiAgICAgIGEuZGl0by1saW5rKFxuICAgICAgICA6Y2xhc3M9XCJnZXRMaW5rQ2xhc3MoY29tcG9uZW50KVwiXG4gICAgICAgIDpocmVmPVwiZ2V0Q29tcG9uZW50SHJlZihjb21wb25lbnQpXCJcbiAgICAgICAgQGNsaWNrLnByZXZlbnQuc3RvcD1cIm9uQ2xpY2tDb21wb25lbnQoY29tcG9uZW50KVwiXG4gICAgICApXG4gICAgICAgIHNwYW4oOmNsYXNzPVwiZ2V0U3BhbkNsYXNzKGNvbXBvbmVudClcIilcbiAgICAgICAgICB8IHt7IGNvbXBvbmVudC5icmVhZGNydW1iIH19XG4gIHNsb3RcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9UcmFpbCcsIHtcbiAgY29tcHV0ZWQ6IHtcbiAgICB0cmFpbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmFwcFN0YXRlLnJvdXRlQ29tcG9uZW50cy5maWx0ZXIoXG4gICAgICAgIGNvbXBvbmVudCA9PiAhIWNvbXBvbmVudC5yb3V0ZVJlY29yZFxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29tcG9uZW50UGF0aChjb21wb25lbnQpIHtcbiAgICAgIC8vIERvIHRoZSBzYW1lIGFzIGluIGBEaXRvTWVudWA6IExpbmsgbWVudSBpdGVtcyB0byB0aGUgZmlyc3QgY2hpbGRyZW4uXG4gICAgICBjb25zdCB7IHNjaGVtYSB9ID0gY29tcG9uZW50XG4gICAgICByZXR1cm4gc2NoZW1hLnR5cGUgPT09ICdtZW51J1xuICAgICAgICA/IE9iamVjdC52YWx1ZXMoc2NoZW1hLml0ZW1zKVswXS5mdWxsUGF0aFxuICAgICAgICA6IGNvbXBvbmVudC5wYXRoXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudEhyZWYoY29tcG9uZW50KSB7XG4gICAgICByZXR1cm4gdGhpcy4kcm91dGVyLnJlc29sdmUodGhpcy5nZXRDb21wb25lbnRQYXRoKGNvbXBvbmVudCkpLmhyZWZcbiAgICB9LFxuXG4gICAgb25DbGlja0NvbXBvbmVudChjb21wb25lbnQpIHtcbiAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHtcbiAgICAgICAgcGF0aDogdGhpcy5nZXRDb21wb25lbnRQYXRoKGNvbXBvbmVudCksXG4gICAgICAgIGZvcmNlOiB0cnVlXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRMaW5rQ2xhc3MoY29tcG9uZW50KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1hY3RpdmUnOiBjb21wb25lbnQucGF0aCA9PT0gdGhpcy4kcm91dGUucGF0aFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRTcGFuQ2xhc3MoY29tcG9uZW50KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1kaXJ0eSc6IGNvbXBvbmVudC5pc0RpcnR5XG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdHJhaWwge1xuICBkaXNwbGF5OiBmbGV4O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBoZWlnaHQ6IDNlbTtcblxuICB1bCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgfVxuXG4gIGxpIHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB9XG5cbiAgYSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBzcGFuIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci1saWdodDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsaTpub3QoOmxhc3QtY2hpbGQpIGEge1xuICAgICRhbmdsZTogMzNkZWc7XG5cbiAgICAmOjpiZWZvcmUsXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgY29udGVudDogJyc7XG4gICAgICB3aWR0aDogMXB4O1xuICAgICAgaGVpZ2h0OiAwLjc1ZW07XG4gICAgICByaWdodDogLTAuMjVlbTtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgICAgIG9wYWNpdHk6IDAuNTtcbiAgICB9XG5cbiAgICAmOjpiZWZvcmUge1xuICAgICAgdG9wOiA1MCU7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgkYW5nbGUpO1xuICAgICAgdHJhbnNmb3JtLW9yaWdpbjogdG9wO1xuICAgIH1cblxuICAgICY6OmFmdGVyIHtcbiAgICAgIGJvdHRvbTogNTAlO1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLSRhbmdsZSk7XG4gICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBib3R0b207XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbm5hdi5kaXRvLWhlYWRlclxuICBEaXRvVHJhaWxcbiAgICBEaXRvU3Bpbm5lcihcbiAgICAgIHYtaWY9XCJpc0xvYWRpbmdcIlxuICAgICAgOnNpemU9XCJzcGlubmVyPy5zaXplXCJcbiAgICAgIDpjb2xvcj1cInNwaW5uZXI/LmNvbG9yXCJcbiAgICApXG4gIC8vLSBUZWxlcG9ydCB0YXJnZXQgZm9yIGAuZGl0by1zY2hlbWEtaGVhZGVyYDpcbiAgLmRpdG8taGVhZGVyX190ZWxlcG9ydFxuICBzbG90XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvSGVhZGVyJywge1xuICBwcm9wczoge1xuICAgIHNwaW5uZXI6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9LFxuICAgIGlzTG9hZGluZzoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8taGVhZGVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBiYWNrZ3JvdW5kOiAkY29sb3ItYmxhY2s7XG4gIGZvbnQtc2l6ZTogJGhlYWRlci1mb250LXNpemU7XG4gIGxpbmUtaGVpZ2h0OiAkaGVhZGVyLWxpbmUtaGVpZ2h0O1xuICB6LWluZGV4OiAkei1pbmRleC1oZWFkZXI7XG4gIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gICY6OmFmdGVyIHtcbiAgICAvLyBTZXQgdGhlIGZ1bGwtd2lkdGggaGVhZGVyIGJhY2tncm91bmQgdG8gdGhlIGhlYWRlciBjb2xvci5cbiAgICBjb250ZW50OiAnJztcbiAgICBpbnNldDogMDtcbiAgICB3aWR0aDogMTAwdnc7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJhY2tncm91bmQ6IGluaGVyaXQ7XG4gICAgei1pbmRleDogLTE7XG4gIH1cblxuICBzcGFuIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgcGFkZGluZzogJGhlYWRlci1wYWRkaW5nO1xuICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG5cbiAgICAmOmVtcHR5IHtcbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgY29udGVudDogJ1xcMjAwYic7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tZGlydHkge1xuICAgICY6OmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLXdoaXRlO1xuICAgICAgd2lkdGg6IDhweDtcbiAgICAgIGhlaWdodDogOHB4O1xuICAgICAgbWFyZ2luOiAycHg7XG4gICAgICBtYXJnaW4tbGVmdDogMC41ZW07XG4gICAgICBib3JkZXItcmFkaXVzOiAxMDAlO1xuICAgIH1cbiAgfVxuXG4gICZfX3RlbGVwb3J0IHtcbiAgICAvLyBBbGlnbiB0aGUgdGVsZXBvcnRlZCBzY2hlbWEgaGVhZGVycyBvbiB0b3Agb2YgdG8gdGhlIGhlYWRlciBtZW51LlxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBpbnNldDogMDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgcGFkZGluZzogMCAkaGVhZGVyLXBhZGRpbmctaG9yO1xuICAgIC8vIFR1cm4gb2ZmIHBvaW50ZXIgZXZlbnRzIHNvIHRoYXQgRGl0b1RyYWlsIGtlZXBzIHJlY2VpdmluZyBldmVudHMuLi5cbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAvLyAuLi5idXQgbW92ZSB0aGVtIHRvIHRoZSBjaGlsZHJlbi5cbiAgICA+ICoge1xuICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87XG4gICAgfVxuXG4gICAgLmRpdG8tYnV0dG9uIHtcbiAgICAgIG1hcmdpbjogMCAwICR0YWItbWFyZ2luICR0YWItbWFyZ2luO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5uYXYuZGl0by1uYXZpZ2F0aW9uLmRpdG8tc2Nyb2xsLXBhcmVudFxuICBoMVxuICAgIFJvdXRlckxpbmsuZGl0by1saW5rKHRvPVwiL1wiKSB7eyBhcHBTdGF0ZS50aXRsZSB9fVxuICBEaXRvTWVudS5kaXRvLXNjcm9sbCg6aXRlbXM9XCJ2aWV3c1wiKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b05hdmlnYXRpb24nLCB7fSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLW5hdmlnYXRpb24ge1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICBmbGV4OiAwIDAgbWluLWNvbnRlbnQ7XG4gIGZvbnQtc2l6ZTogJG1lbnUtZm9udC1zaXplO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlcjtcblxuICBoMSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbGluZS1oZWlnaHQ6ICRoZWFkZXItbGluZS1oZWlnaHQ7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWRhcmtlcjtcbiAgICBib3JkZXItcmlnaHQ6ICRib3JkZXItd2lkdGggc29saWQgJGNvbG9yLWRhcmtlc3Q7XG4gICAgY29sb3I6ICRjb2xvci13aGl0ZTtcblxuICAgIC5kaXRvLWxpbmsge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBwYWRkaW5nOiAkaGVhZGVyLXBhZGRpbmc7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLW5vdGlmaWNhdGlvbnNcbiAgLmRpdG8taGVhZGVyXG4gICAgc3BhblxuICAuZGl0by1ub3RpZmljYXRpb25zX19pbm5lclxuICAgIFZ1ZU5vdGlmaWNhdGlvbnMoXG4gICAgICByZWY9XCJub3RpZmljYXRpb25zXCJcbiAgICAgIGNsYXNzZXM9XCJkaXRvLW5vdGlmaWNhdGlvblwiXG4gICAgICA6ZGFuZ2Vyb3VzbHlTZXRJbm5lckh0bWw9XCJ0cnVlXCJcbiAgICAgIHBvc2l0aW9uPVwiXCJcbiAgICAgIHdpZHRoPVwiXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGFzQXJyYXksIHN0cmlwVGFncyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b05vdGlmaWNhdGlvbnMnLCB7XG4gIG5vdGlmaWNhdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNNb3VudGVkICYmIHRoaXMuJHJlZnMubm90aWZpY2F0aW9uc1xuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBub3RpZnkoeyB0eXBlID0gJ2luZm8nLCB0aXRsZSwgdGV4dCwgZXJyb3IgfSA9IHt9KSB7XG4gICAgICB0aXRsZSB8fD0gKFxuICAgICAgICB7XG4gICAgICAgICAgd2FybmluZzogJ1dhcm5pbmcnLFxuICAgICAgICAgIGVycm9yOiAnRXJyb3InLFxuICAgICAgICAgIGluZm86ICdJbmZvcm1hdGlvbicsXG4gICAgICAgICAgc3VjY2VzczogJ1N1Y2Nlc3MnXG4gICAgICAgIH1bdHlwZV0gfHxcbiAgICAgICAgJ05vdGlmaWNhdGlvbidcbiAgICAgIClcbiAgICAgIHRleHQgPSBgPHA+JHtcbiAgICAgICAgYXNBcnJheSh0ZXh0KS5qb2luKCc8L3A+IDxwPicpXG4gICAgICB9PC9wPmAucmVwbGFjZSgvXFxufFxcclxcbnxcXHIvZywgJzxicj4nKVxuICAgICAgY29uc3QgbG9nID0gKFxuICAgICAgICB7XG4gICAgICAgICAgd2FybmluZzogJ3dhcm4nLFxuICAgICAgICAgIGVycm9yOiAnZXJyb3InLFxuICAgICAgICAgIGluZm86ICdsb2cnLFxuICAgICAgICAgIHN1Y2Nlc3M6ICdsb2cnXG4gICAgICAgIH1bdHlwZV0gfHxcbiAgICAgICAgJ2Vycm9yJ1xuICAgICAgKVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGVbbG9nXShcbiAgICAgICAgLi4uW1xuICAgICAgICAgIHN0cmlwVGFncyh0ZXh0KSxcbiAgICAgICAgICAuLi4odHlwZSA9PT0gJ2Vycm9yJyAmJiBlcnJvciA/IFtlcnJvcl0gOiBbXSlcbiAgICAgICAgXVxuICAgICAgKVxuICAgICAgY29uc3QgeyBub3RpZmljYXRpb25zID0gdHJ1ZSB9ID0gdGhpcy5hcGlcbiAgICAgIGlmIChub3RpZmljYXRpb25zKSB7XG4gICAgICAgIC8vIENhbGN1bGF0ZSBkaXNwbGF5LWR1cmF0aW9uIGZvciB0aGUgbm90aWZpY2F0aW9uIGJhc2VkIG9uIGl0cyBjb250ZW50XG4gICAgICAgIC8vIGFuZCB0aGUgc2V0dGluZyBvZiB0aGUgYGR1cmF0aW9uRmFjdG9yYCBjb25maWd1cmF0aW9uLiBJdCBkZWZpbmVzIHRoZVxuICAgICAgICAvLyBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIG11bHRpcGxpZWQgd2l0aCB0aGUgYW1vdW50IG9mIGNoYXJhY3RlcnNcbiAgICAgICAgLy8gZGlzcGxheWVkIGluIHRoZSBub3RpZmljYXRpb24sIHBsdXMgNDAgKDQwICsgdGl0bGUgKyBtZXNzYWdlKTpcbiAgICAgICAgY29uc3QgeyBkdXJhdGlvbkZhY3RvciA9IDIwIH0gPSBub3RpZmljYXRpb25zXG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0gKDQwICsgdGV4dC5sZW5ndGggKyB0aXRsZS5sZW5ndGgpICogZHVyYXRpb25GYWN0b3JcbiAgICAgICAgdGhpcy4kbm90aWZ5KHsgdHlwZSwgdGl0bGUsIHRleHQsIGR1cmF0aW9uIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRlc3Ryb3lBbGwoKSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbnMuZGVzdHJveUFsbCgpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQHVzZSAnc2Fzczpjb2xvcic7XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG5AbWl4aW4gdHlwZSgkYmFja2dyb3VuZCkge1xuICBiYWNrZ3JvdW5kOiBjb2xvci5hZGp1c3QoJGJhY2tncm91bmQsICRsaWdodG5lc3M6IDUlKTtcbiAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgYm9yZGVyLWxlZnQ6IDEycHggc29saWQgY29sb3IuYWRqdXN0KCRiYWNrZ3JvdW5kLCAkbGlnaHRuZXNzOiAtMTAlKTtcbn1cblxuLmRpdG8tbm90aWZpY2F0aW9ucyB7XG4gICRub3RpZmljYXRpb24td2lkdGg6IDMwMHB4O1xuXG4gIGZsZXg6IDE7XG4gIHotaW5kZXg6ICR6LWluZGV4LW5vdGlmaWNhdGlvbnM7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG1hcmdpbi1sZWZ0OiAkZm9ybS1zcGFjaW5nO1xuICAvLyBGb3IgdGhlIGBAY29udGFpbmVyYCBydWxlIHRvIHdvcms6XG4gIGNvbnRhaW5lci10eXBlOiBpbmxpbmUtc2l6ZTtcblxuICAuZGl0by1oZWFkZXIge1xuICAgIHNwYW4ge1xuICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgcGFkZGluZy1yaWdodDogMDtcbiAgICB9XG4gIH1cblxuICAmX19pbm5lciB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB9XG5cbiAgLnZ1ZS1ub3RpZmljYXRpb24tZ3JvdXAge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBsZWZ0OiAwO1xuICAgIHRvcDogMDtcbiAgICB3aWR0aDogJG5vdGlmaWNhdGlvbi13aWR0aDtcblxuICAgIEBjb250YWluZXIgKHdpZHRoIDwgI3skbm90aWZpY2F0aW9uLXdpZHRoICsgJGNvbnRlbnQtcGFkZGluZ30pIHtcbiAgICAgIGxlZnQ6IHVuc2V0O1xuICAgICAgcmlnaHQ6ICRjb250ZW50LXBhZGRpbmc7XG4gICAgfVxuICB9XG5cbiAgLnZ1ZS1ub3RpZmljYXRpb24td3JhcHBlciB7XG4gICAgb3ZlcmZsb3c6IHZpc2libGU7XG4gIH1cblxuICAuZGl0by1ub3RpZmljYXRpb24ge1xuICAgIHBhZGRpbmc6IDhweDtcbiAgICBtYXJnaW46ICRjb250ZW50LXBhZGRpbmcgMDtcbiAgICBmb250LXNpemU6IGluaGVyaXQ7XG4gICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBib3gtc2hhZG93OiAkc2hhZG93LXdpbmRvdztcblxuICAgIC5ub3RpZmljYXRpb24tdGl0bGUge1xuICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogOHB4O1xuICAgIH1cblxuICAgIC5ub3RpZmljYXRpb24tY29udGVudCB7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgd29yZC1icmVhazogYnJlYWstYWxsO1xuXG4gICAgICBwIHtcbiAgICAgICAgbWFyZ2luOiAwO1xuXG4gICAgICAgICYgKyBwIHtcbiAgICAgICAgICBtYXJnaW4tdG9wOiA4cHg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLFxuICAgICYuaW5mbyB7XG4gICAgICBAaW5jbHVkZSB0eXBlKCRjb2xvci1hY3RpdmUpO1xuICAgIH1cblxuICAgICYuc3VjY2VzcyB7XG4gICAgICBAaW5jbHVkZSB0eXBlKCRjb2xvci1zdWNjZXNzKTtcbiAgICB9XG5cbiAgICAmLndhcm5pbmcge1xuICAgICAgQGluY2x1ZGUgdHlwZSgkY29sb3Itd2FybmluZyk7XG4gICAgfVxuXG4gICAgJi5lcnJvciB7XG4gICAgICBAaW5jbHVkZSB0eXBlKCRjb2xvci1lcnJvcik7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmFzaWRlLmRpdG8tc2lkZWJhci5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIHYtcmVzaXplPVwib25SZXNpemVTaWRlYmFyXCJcbiAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4pXG4gIG5hdi5kaXRvLWhlYWRlclxuICAgIHNsb3RcbiAgLmRpdG8tc2lkZWJhcl9fdGVsZXBvcnQuZGl0by1zY3JvbGxcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9TaWRlYmFyJywge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaWRlYmFyV2lkdGg6IDBcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjbGFzc2VzKCkge1xuICAgICAgY29uc3QgcHJlZml4ID0gJ2RpdG8tc2lkZWJhcidcbiAgICAgIC8vIE5PVEU6IEtlZXAgc3luY2VkIHdpdGggJHNpZGViYXItbWF4LXdpZHRoIGluIFNDU1M6XG4gICAgICBjb25zdCBzaWRlYmFyV2lkdGggPSAzNjBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtgJHtwcmVmaXh9LS13aWR0aC05OWBdOiB0aGlzLnNpZGViYXJXaWR0aCA8IHNpZGViYXJXaWR0aCxcbiAgICAgICAgW2Ake3ByZWZpeH0tLXdpZHRoLTYwYF06IHRoaXMuc2lkZWJhcldpZHRoIDw9IHNpZGViYXJXaWR0aCAqIDAuNlxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25SZXNpemVTaWRlYmFyKHsgY29udGVudFJlY3Q6IHsgd2lkdGggfSB9KSB7XG4gICAgICB0aGlzLnNpZGViYXJXaWR0aCA9IHdpZHRoXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc2lkZWJhciB7XG4gIGZsZXg6IDAgMSAkc2lkZWJhci1tYXgtd2lkdGg7XG4gIG1heC13aWR0aDogJHNpZGViYXItbWF4LXdpZHRoO1xuICBtaW4td2lkdGg6ICRzaWRlYmFyLW1pbi13aWR0aDtcbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi9Eb21NaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHB1bGxkb3duOiB7XG4gICAgICAgIG9wZW46IGZhbHNlLFxuICAgICAgICBzdGFydFRpbWU6IDAsXG4gICAgICAgIGNoZWNrVGltZTogdHJ1ZSxcbiAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgbW91c2Vkb3duOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldFB1bGxkb3duT3BlbihmYWxzZSlcbiAgICAgICAgICAgIHRoaXMucHVsbGRvd24uaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgbW91c2V1cDogKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMub25QdWxsZG93bk1vdXNlVXAoKSkge1xuICAgICAgICAgICAgICB0aGlzLnB1bGxkb3duLmhhbmRsZXJzLnJlbW92ZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBoYW5kbGVyczogbnVsbFxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25QdWxsZG93bk1vdXNlRG93bih2YWx1ZSA9IG51bGwpIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLnNldFB1bGxkb3duT3Blbih0cnVlKVxuICAgICAgICB0aGlzLmNoZWNrVGltZSA9IHRydWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2hlY2tUaW1lID0gZmFsc2VcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25QdWxsZG93bk1vdXNlVXAodmFsdWUgPSBudWxsKSB7XG4gICAgICBjb25zdCB7IHN0YXJ0VGltZSB9ID0gdGhpcy5wdWxsZG93blxuICAgICAgaWYgKCF0aGlzLmNoZWNrVGltZSB8fCBzdGFydFRpbWUgJiYgKERhdGUubm93KCkgLSBzdGFydFRpbWUgPiAyNTApKSB7XG4gICAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKGZhbHNlKVxuICAgICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLm9uUHVsbGRvd25TZWxlY3QodmFsdWUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25QdWxsZG93blNlbGVjdCgvKiB2YWx1ZSAqLykge1xuICAgICAgLy8gTk9URTogVG8gYmUgb3ZlcnJpZGRlbi5cbiAgICB9LFxuXG4gICAgc2V0UHVsbGRvd25PcGVuKG9wZW4pIHtcbiAgICAgIHRoaXMucHVsbGRvd24ub3BlbiA9IG9wZW5cbiAgICAgIHRoaXMucHVsbGRvd24uc3RhcnRUaW1lID0gb3BlbiA/IERhdGUubm93KCkgOiAwXG4gICAgICBpZiAob3Blbikge1xuICAgICAgICB0aGlzLnB1bGxkb3duLmhhbmRsZXJzID0gdGhpcy5kb21Pbihkb2N1bWVudCwgdGhpcy5wdWxsZG93bi5ldmVudHMpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tYWNjb3VudFxuICBhKFxuICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24oKVwiXG4gIClcbiAgICBzcGFuIHt7IHVzZXIudXNlcm5hbWUgfX1cbiAgdWwuZGl0by1wdWxsZG93big6Y2xhc3M9XCJ7ICdkaXRvLW9wZW4nOiBwdWxsZG93bi5vcGVuIH1cIilcbiAgICBsaShcbiAgICAgIHYtZm9yPVwiKGxhYmVsLCB2YWx1ZSkgb2YgaXRlbXNcIlxuICAgIClcbiAgICAgIGEoXG4gICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24odmFsdWUpXCJcbiAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh2YWx1ZSlcIlxuICAgICAgKSB7eyBsYWJlbCB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUHVsbGRvd25NaXhpbiBmcm9tICcuLi9taXhpbnMvUHVsbGRvd25NaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvQWNjb3VudCcsIHtcbiAgbWl4aW5zOiBbUHVsbGRvd25NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXM6IHtcbiAgICAgICAgc2V0dGluZ3M6ICdTZXR0aW5ncycsXG4gICAgICAgIGxvZ291dDogJ0xvZ291dCdcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uUHVsbGRvd25TZWxlY3QodmFsdWUpIHtcbiAgICAgIHN3aXRjaCAodmFsdWUpIHtcbiAgICAgICAgY2FzZSAnbG9nb3V0JzpcbiAgICAgICAgICB0aGlzLnJvb3RDb21wb25lbnQubG9nb3V0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdzZXR0aW5ncyc6XG4gICAgICAgICAgY29uc29sZS5pbmZvKCdUT0RPOiBJbXBsZW1lbnQgU2V0dGluZ3MnKVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tYWNjb3VudCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXG4gIC5kaXRvLXB1bGxkb3duIHtcbiAgICB0b3A6ICRwdWxsZG93bi1wYWRkaW5nLXZlcjtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5jb21wb25lbnQoXG4gIHYtaWY9XCJvcHRpb25zPy50ZXh0ICE9IG51bGxcIlxuICA6aXM9XCJ0YWdOYW1lXCJcbiAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4gIDpzdHlsZT1cInN0eWxlc1wiXG4pIHt7IG9wdGlvbnMudGV4dCB9fVxuY29tcG9uZW50KFxuICB2LWVsc2UtaWY9XCJvcHRpb25zPy5odG1sICE9IG51bGxcIlxuICA6aXM9XCJ0YWdOYW1lXCJcbiAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4gIDpzdHlsZT1cInN0eWxlc1wiXG4gIHYtaHRtbD1cIm9wdGlvbnMuaHRtbFwiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0VsZW1lbnQnLCB7XG4gIHByb3BzOiB7XG4gICAgdGFnOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NwYW4nIH0sXG4gICAgY29udGVudDogeyB0eXBlOiBbU3RyaW5nLCBPYmplY3RdLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG9wdGlvbnMoKSB7XG4gICAgICBjb25zdCB7IGNvbnRlbnQgfSA9IHRoaXNcbiAgICAgIHJldHVybiBjb250ZW50ICE9IG51bGxcbiAgICAgICAgPyBpc09iamVjdChjb250ZW50KVxuICAgICAgICAgID8gY29udGVudFxuICAgICAgICAgIDogeyB0ZXh0OiBjb250ZW50IH1cbiAgICAgICAgOiBudWxsXG4gICAgfSxcblxuICAgIHRhZ05hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnRhZyB8fCB0aGlzLnRhZ1xuICAgIH0sXG5cbiAgICBjbGFzc2VzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYXNPYmplY3QodGhpcy4kYXR0cnMuY2xhc3MpLFxuICAgICAgICAuLi5hc09iamVjdCh0aGlzLm9wdGlvbnMuY2xhc3MpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHN0eWxlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmFzT2JqZWN0KHRoaXMuJGF0dHJzLnN0eWxlKSxcbiAgICAgICAgLi4uYXNPYmplY3QodGhpcy5vcHRpb25zLnN0eWxlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcblxuZnVuY3Rpb24gYXNPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLnJlZHVjZSgob2JqZWN0LCBlbnRyeSkgPT4ge1xuICAgIGlmIChpc1N0cmluZyhlbnRyeSkpIHtcbiAgICAgIG9iamVjdFtlbnRyeV0gPSB0cnVlXG4gICAgfSBlbHNlIGlmIChpc09iamVjdChlbnRyeSkpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ob2JqZWN0LCBlbnRyeSlcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdFxuICB9LCB7fSlcbn1cbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmNvbXBvbmVudC5kaXRvLWxhYmVsKFxuICB2LWlmPVwidGV4dCB8fCBjb2xsYXBzaWJsZVwiXG4gIDppcz1cInRhZ1wiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IGlzQWN0aXZlIH1cIlxuKVxuICAuZGl0by1jaGV2cm9uKFxuICAgIHYtaWY9XCJjb2xsYXBzaWJsZVwiXG4gICAgOmNsYXNzPVwieyAnZGl0by1vcGVuJzogIWNvbGxhcHNlZCB9XCJcbiAgKVxuICAuZGl0by1sYWJlbF9faW5uZXIoXG4gICAgdi1pZj1cInRleHQgfHwgcHJlZml4ZXMubGVuZ3RoID4gMCB8fCBzdWZmaXhlcy5sZW5ndGggPiAwXCJcbiAgKVxuICAgIC5kaXRvLWxhYmVsX19wcmVmaXgoXG4gICAgICB2LWlmPVwicHJlZml4ZXMubGVuZ3RoID4gMFwiXG4gICAgKVxuICAgICAgRGl0b0VsZW1lbnQoXG4gICAgICAgIHYtZm9yPVwiKHByZWZpeCwgaW5kZXgpIG9mIHByZWZpeGVzXCJcbiAgICAgICAgOmtleT1cImBwcmVmaXgtJHtpbmRleH1gXCJcbiAgICAgICAgdGFnPVwic3BhblwiXG4gICAgICAgIDpjb250ZW50PVwicHJlZml4XCJcbiAgICAgIClcbiAgICBsYWJlbChcbiAgICAgIHYtaWY9XCJ0ZXh0XCJcbiAgICAgIDpmb3I9XCJkYXRhUGF0aFwiXG4gICAgICB2LWh0bWw9XCJ0ZXh0XCJcbiAgICApXG4gICAgLmRpdG8tbGFiZWxfX3N1ZmZpeChcbiAgICAgIHYtaWY9XCJzdWZmaXhlcy5sZW5ndGggPiAwXCJcbiAgICApXG4gICAgICBEaXRvRWxlbWVudChcbiAgICAgICAgdi1mb3I9XCIoc3VmZml4LCBpbmRleCkgb2Ygc3VmZml4ZXNcIlxuICAgICAgICA6a2V5PVwiYHN1ZmZpeC0ke2luZGV4fWBcIlxuICAgICAgICB0YWc9XCJzcGFuXCJcbiAgICAgICAgOmNvbnRlbnQ9XCJzdWZmaXhcIlxuICAgICAgKVxuICAgIC5kaXRvLWluZm8oXG4gICAgICB2LWlmPVwiaW5mb1wiXG4gICAgICA6ZGF0YS1pbmZvPVwiaW5mb1wiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0xhYmVsJywge1xuICBlbWl0czogWydvcGVuJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBsYWJlbDogeyB0eXBlOiBbU3RyaW5nLCBPYmplY3RdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgY29sbGFwc2VkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2libGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBpbmZvOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0YWcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb2xsYXBzaWJsZSA/ICdhJyA6ICdkaXYnXG4gICAgfSxcblxuICAgIHRleHQoKSB7XG4gICAgICBjb25zdCB7IGxhYmVsIH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNPYmplY3QobGFiZWwpID8gbGFiZWw/LnRleHQgOiBsYWJlbFxuICAgIH0sXG5cbiAgICBwcmVmaXhlcygpIHtcbiAgICAgIHJldHVybiBhc0FycmF5KHRoaXMubGFiZWw/LnByZWZpeClcbiAgICB9LFxuXG4gICAgc3VmZml4ZXMoKSB7XG4gICAgICByZXR1cm4gYXNBcnJheSh0aGlzLmxhYmVsPy5zdWZmaXgpXG4gICAgfSxcblxuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb2xsYXBzaWJsZSA/IHsgb25DbGljazogdGhpcy5vbkNsaWNrIH0gOiB7fVxuICAgIH0sXG5cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID09PSB0aGlzXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkNsaWNrKCkge1xuICAgICAgdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9IHRoaXNcbiAgICAgIHRoaXMuJGVtaXQoJ29wZW4nLCB0aGlzLmNvbGxhcHNlZClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1sYWJlbCB7XG4gICRzZWxmOiAmO1xuXG4gIC8vIEZvciBidXR0b25zIGFuZCBjaGV2cm9uIHRvIGFsaWduIHJpZ2h0OlxuICBkaXNwbGF5OiBmbGV4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIC8vIFZlcnRpY2FsbHkgY2VudGVyIGFsbCBpdGVtcyBpbiB0aGUgbGFiZWwsIGUuZy4gY2hldnJvbiwgZWRpdC1idXR0b25zLlxuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBtaW4taGVpZ2h0OiAkaW5wdXQtaGVpZ2h0O1xuICBtYXJnaW4tcmlnaHQ6ICRmb3JtLXNwYWNpbmctaGFsZjsgLy8gV2hlbiBpbmxpbmVkLlxuXG4gICY6aGFzKC5kaXRvLXNjaGVtYS1oZWFkZXIpIHtcbiAgICAvLyBUaGUgY29udGFpbmVyJ3MgbGFiZWwgaXMgdXNlZCBhcyB0ZWxlcG9ydCBmb3IgYSBuZXN0ZWQgc2VjdGlvbiBvciBvYmplY3RcbiAgICAvLyBsYWJlbC4gSGlkZSBgJl9faW5uZXJgLCBhcyBpdCBpcyBiZSBkdXBsaWNhdGVkIGluc2lkZSB0aGUgbmVzdGVkIGxhYmVsLlxuICAgID4gI3skc2VsZn1fX2lubmVyIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgJjpub3QoOmhhcygrIC5kaXRvLXRhYnMpKSB7XG4gICAgLy8gVGFrZSBmdWxsIHdpZHRoIGJ1dCBvbmx5IGlmIHRoZXJlIGFyZW4ndCBhbHNvIHRhYnMgdG8gYmUgY2VudGVyZWQuXG4gICAgZmxleDogMTtcbiAgfVxuXG4gICZfX2lubmVyIHtcbiAgICBmbGV4OiAxIDAgMCU7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gIH1cblxuICBsYWJlbCB7XG4gICAgY3Vyc29yOiBpbmhlcml0O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGxpbmUtaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0O1xuICB9XG5cbiAgLy8gRml4IGFsaWdubWVudCBvZiBzdWIgYW5kIHN1cCBlbGVtZW50cyBpbiBsYWJlbCBjb250ZW50LlxuICBzdWIsXG4gIHN1cCB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbiAgfVxuXG4gIHN1YiB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDRweCk7XG4gIH1cblxuICBzdXAge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNHB4KTtcbiAgfVxuXG4gICZfX3ByZWZpeCxcbiAgJl9fc3VmZml4IHtcbiAgICBmbGV4OiAxO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBsaW5lLWhlaWdodDogJGlucHV0LWhlaWdodDtcblxuICAgIC8vIEZvciBlbGxpcHNpcyB0byB3b3JrIG9uIHByZWZpeCBhbmQgc3VmZml4IHdpdGggZmxleCBsYXlvdXQsIHdlIG5lZWQgdG9cbiAgICAvLyB1c2UgYSBuZXN0ZWQgYWJzb2x1dGVseSBwb3NpdGlvbmVkIHNwYW4uXG5cbiAgICAmOjpiZWZvcmUge1xuICAgICAgY29udGVudDogJ1xcMjAwYic7IC8vIHplcm8td2lkdGggc3BhY2UgdG8ga2VlcCBjb250YWluZXIgZnJvbSBjb2xsYXBzaW5nLlxuICAgIH1cblxuICAgIHNwYW4ge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgaW5zZXQ6IDA7XG4gICAgfVxuICB9XG5cbiAgbGFiZWwsXG4gICZfX3ByZWZpeCBzcGFuLFxuICAmX19zdWZmaXggc3BhbiB7XG4gICAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG4gICAgQGluY2x1ZGUgZWxsaXBzaXM7XG5cbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB9XG5cbiAgJl9fcHJlZml4ICsgbGFiZWwsXG4gIGxhYmVsICsgJl9fc3VmZml4IHtcbiAgICAmLFxuICAgIHNwYW4ge1xuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgY29udGVudDogJ1xcYTAnOyAvLyAmbmJzcDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuZGl0by1idXR0b25zIHtcbiAgICAvLyBNb3ZlIHRoZSBsYWJlbCBwYWRkaW5nIGluc2lkZSAuZGl0by1idXR0b25zLCBzbyB0aGF0IGl0IGNhcHR1cmVzIGFsbFxuICAgIC8vIG5lYXIgbW91c2UgZXZlbnRzOlxuICAgIG1hcmdpbjogY2FsYygtMSAqIHZhcigtLWxhYmVsLXBhZGRpbmcpKTtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgICBwYWRkaW5nOiB2YXIoLS1sYWJlbC1wYWRkaW5nKTtcbiAgfVxuXG4gICYuZGl0by13aWR0aC1maWxsIHtcbiAgICB3aWR0aDogMTAwJTtcblxuICAgIC8vIEluIG9yZGVyIGZvciBlbGxpcHNpcyB0byB3b3JrIG9uIGxhYmVscyB3aXRob3V0IGFmZmVjdGluZyBvdGhlciBsYXlvdXQsXG4gICAgLy8gd2UgbmVlZCB0byBwb3NpdGlvbiBpdCBhYnNvbHV0ZWx5IGluc2lkZSBpdHMgY29udGFpbmVyLiBCdXQgd2UgY2FuIG9ubHlcbiAgICAvLyBkbyBzbyBpZiB0aGVyZSBpcyd0IGFsc28gYSBjaGV2cm9uIG9yIG90aGVyIFVYIGVsZW1lbnRzIGJlc2lkZXMgaXQuXG4gICAgJjpoYXMoPiAjeyRzZWxmfV9faW5uZXI6b25seS1jaGlsZCkge1xuICAgICAgZmxleDogMTsgLy8gV2hlbiBpbiBgLmRpdG8tc2NoZW1hLWhlYWRlcmAuXG5cbiAgICAgID4gI3skc2VsZn1fX2lubmVyIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOjphZnRlciB7XG4gICAgICAvLyBTaW5jZSA8bGFiZWw+IHVzZXMgYHBvc2l0aW9uOiBhYnNvbHV0ZWAsIHNldCBjb250ZW50IHRvIGEgemVyby13aWR0aFxuICAgICAgLy8gc3BhY2Ugb24gaXRzIHBhcmVudCB0byBlbmZvcmNlIHRoZSByaWdodCB0ZXh0IGhlaWdodCBpbiB0aGUgY29udGFpbmVyXG4gICAgICBjb250ZW50OiAnXFwyMDBiJzsgLy8gemVyby13aWR0aCBzcGFjZTtcbiAgICB9XG4gIH1cblxuICAuZGl0by1pbmZvIHtcbiAgICBtYXJnaW4tbGVmdDogMC4zNWVtO1xuICB9XG59XG5cbmEuZGl0by1sYWJlbCB7XG4gICY6aG92ZXIge1xuICAgIC5kaXRvLWNoZXZyb24ge1xuICAgICAgY29sb3I6ICRjb2xvci1kYXJrZXI7XG4gICAgfVxuICB9XG5cbiAgJjpmb2N1czpub3QoOmFjdGl2ZSwgLmRpdG8tYWN0aXZlKSB7XG4gICAgLmRpdG8tY2hldnJvbiB7XG4gICAgICAtd2Via2l0LXRleHQtc3Ryb2tlOiAkYm9yZGVyLXdpZHRoICRjb2xvci1hY3RpdmU7XG4gICAgfVxuICAgIC8vIERpc3BsYXkgbGFiZWxzIGluIGNvbXBhY3Qgc2NoZW1hIGFzIGlubGluZS1ibG9ja3MsIHRvIGFsbG93IGNvbXBhY3RcbiAgICAvLyBsYXlvdXRzIHdpdGggYHdpZHRoOiAnYXV0bydgIGVsZW1lbnRzOlxuICAgIC8vIFRPRE86IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIGNvbnRyb2wgdGhpcyBiZWhhdmlvci5cbiAgfVxufVxuXG4uZGl0by1zY2hlbWEtY29tcGFjdCB7XG4gID4gLmRpdG8tc2NoZW1hLWNvbnRlbnQge1xuICAgID4gLmRpdG8tcGFuZSB7XG4gICAgICA+IC5kaXRvLWNvbnRhaW5lcjpub3QoLmRpdG8tY29udGFpbmVyLS1sYWJlbC12ZXJ0aWNhbCkge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWZsb3c6IHJvdyB3cmFwO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7XG4gIGdldEl0ZW1Gb3JtU2NoZW1hLFxuICBnZXRJdGVtSWQsXG4gIGdldEl0ZW1VaWQsXG4gIGlzTGlzdFNvdXJjZVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtZXRob2RzOiB7XG4gICAgZ2V0SXRlbUZvcm1TY2hlbWEsXG5cbiAgICBnZXRJdGVtVWlkLFxuXG4gICAgZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSwgaW5kZXggPSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1RyYW5zaWVudCAmJiBpbmRleCAhPT0gbnVsbFxuICAgICAgICA/IFN0cmluZyhpbmRleClcbiAgICAgICAgOiBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKVxuICAgIH0sXG5cbiAgICBnZXRJdGVtRGF0YVBhdGgoc291cmNlU2NoZW1hLCBpbmRleCkge1xuICAgICAgbGV0IHsgZGF0YVBhdGggfSA9IHRoaXNcbiAgICAgIGlmIChzb3VyY2VTY2hlbWEgIT09IHRoaXMuc2NoZW1hKSB7XG4gICAgICAgIGRhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHNvdXJjZVNjaGVtYS5uYW1lKVxuICAgICAgfVxuICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgZGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgaW5kZXgpXG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgZ2V0SXRlbVN0b3JlKHNvdXJjZVNjaGVtYSwgaXRlbSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENoaWxkU3RvcmUodGhpcy5nZXRJdGVtVWlkKHNvdXJjZVNjaGVtYSwgaXRlbSksIGluZGV4KVxuICAgIH0sXG5cbiAgICByZW1vdmVJdGVtU3RvcmUoc291cmNlU2NoZW1hLCBpdGVtLCBpbmRleCkge1xuICAgICAgdGhpcy5yZW1vdmVDaGlsZFN0b3JlKHRoaXMuZ2V0SXRlbVVpZChzb3VyY2VTY2hlbWEsIGl0ZW0pLCBpbmRleClcbiAgICB9LFxuXG4gICAgZmluZEl0ZW1JZEluZGV4KHNvdXJjZVNjaGVtYSwgZGF0YSwgaXRlbUlkKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuaXNUcmFuc2llbnRcbiAgICAgICAgPyAvLyBGb3IgdHJhbnNpZW50IGRhdGEsIHRoZSBpbmRleCBpcyB1c2VkIGFzIHRoZSBpZFxuICAgICAgICAgIGl0ZW1JZFxuICAgICAgICA6IGRhdGE/LmZpbmRJbmRleChcbiAgICAgICAgICAgIChpdGVtLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICB0aGlzLmdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0sIGluZGV4KSA9PT0gaXRlbUlkXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgcmV0dXJuIGluZGV4ICE9PSAtMSA/IGluZGV4IDogbnVsbFxuICAgIH0sXG5cbiAgICBnZXRJdGVtTGFiZWwoc291cmNlU2NoZW1hLCBpdGVtLCB7XG4gICAgICBpbmRleCA9IG51bGwsXG4gICAgICBleHRlbmRlZCA9IGZhbHNlLFxuICAgICAgYXNPYmplY3QgPSBmYWxzZVxuICAgIH0gPSB7fSkge1xuICAgICAgY29uc3QgeyBpdGVtTGFiZWwgfSA9IHNvdXJjZVNjaGVtYVxuICAgICAgaWYgKCFpdGVtIHx8ICFleHRlbmRlZCAmJiBpdGVtTGFiZWwgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG5cbiAgICAgIGxldCBkYXRhUGF0aFxuICAgICAgY29uc3QgZ2V0RGF0YVBhdGggPSAoKSA9PlxuICAgICAgICAoZGF0YVBhdGggPz89IHRoaXMuZ2V0SXRlbURhdGFQYXRoKHNvdXJjZVNjaGVtYSwgaW5kZXgpKVxuXG4gICAgICBsZXQgZm9ybUxhYmVsXG4gICAgICBjb25zdCBnZXRGb3JtTGFiZWwgPSAoKSA9PlxuICAgICAgICAoZm9ybUxhYmVsID8/PSB0aGlzLmdldExhYmVsKFxuICAgICAgICAgIGdldEl0ZW1Gb3JtU2NoZW1hKHNvdXJjZVNjaGVtYSwgaXRlbSwgdGhpcy5jb250ZXh0KVxuICAgICAgICApKVxuXG4gICAgICBsZXQgdGV4dFxuICAgICAgbGV0IHByZWZpeFxuICAgICAgbGV0IHN1ZmZpeFxuICAgICAgaWYgKGlzRnVuY3Rpb24oaXRlbUxhYmVsKSkge1xuICAgICAgICBjb25zdCBsYWJlbCA9IGl0ZW1MYWJlbC5jYWxsKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgIG5lc3RlZDogZmFsc2UsXG4gICAgICAgICAgICBkYXRhOiBpdGVtLFxuICAgICAgICAgICAgdmFsdWU6IGl0ZW0sXG4gICAgICAgICAgICBpbmRleCxcblxuICAgICAgICAgICAgZ2V0IGRhdGFQYXRoKCkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0RGF0YVBhdGgoKVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZ2V0IGZvcm1MYWJlbCgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldEZvcm1MYWJlbCgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICBpZiAoaXNPYmplY3QobGFiZWwpKSB7XG4gICAgICAgICAgOyh7IHRleHQsIHByZWZpeCwgc3VmZml4IH0gPSBsYWJlbClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZXh0ID0gbGFiZWxcbiAgICAgICAgfVxuICAgICAgICAvLyBJdCdzIHVwIHRvIGBpdGVtTGFiZWwoKWAgZW50aXJlbHkgdG8gcHJvZHVjZSB0aGUgbGFiZWw6XG4gICAgICAgIGV4dGVuZGVkID0gZmFsc2VcbiAgICAgIH0gZWxzZSBpZiAoaXNTdHJpbmcoaXRlbUxhYmVsKSAmJiAhKGl0ZW1MYWJlbCBpbiBpdGVtKSkge1xuICAgICAgICAvLyBgaXRlbUxhYmVsYCBjYW4gYmUgYm90aCBhIGtleSwgb3Igc2ltcGx5IGEgbGFiZWwuXG4gICAgICAgIHRleHQgPSBpdGVtTGFiZWxcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIExvb2sgdXAgdGhlIG5hbWUgb24gdGhlIGl0ZW0sIGJ5IHRoZXNlIHJ1bGVzOlxuICAgICAgICAvLyAxLiBJZiBgaXRlbUxhYmVsYCBpcyBhIHN0cmluZywgdXNlIGl0IGFzIHRoZSBwcm9wZXJ0eSBrZXlcbiAgICAgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiB0aGVyZSBhcmUgY29sdW1ucywgdXNlIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3RcbiAgICAgICAgLy8gMy4gT3RoZXJ3aXNlLCBzZWUgaWYgdGhlIGl0ZW0gaGFzIGEgcHJvcGVydHkgbmFtZWQgJ25hbWUnXG4gICAgICAgIGNvbnN0IHsgY29sdW1ucyB9ID0gc291cmNlU2NoZW1hXG4gICAgICAgIGNvbnN0IGtleSA9IChcbiAgICAgICAgICBpc1N0cmluZyhpdGVtTGFiZWwpICYmIGl0ZW1MYWJlbCB8fFxuICAgICAgICAgIGlzTGlzdFNvdXJjZShzb3VyY2VTY2hlbWEpICYmIGNvbHVtbnMgJiYgT2JqZWN0LmtleXMoY29sdW1ucylbMF0gfHxcbiAgICAgICAgICAnbmFtZSdcbiAgICAgICAgKVxuICAgICAgICB0ZXh0ID0gaXRlbVtrZXldXG4gICAgICB9XG4gICAgICBjb25zdCBoYWRMYWJlbCA9ICEhdGV4dFxuICAgICAgLy8gSWYgbm8gbGFiZWwgd2FzIGZvdW5kIHNvIGZhciwgdHJ5IHRvIHByb2R1Y2Ugb25lIGZyb20gdGhlIGluZGV4LlxuICAgICAgaWYgKHRleHQgPT0gbnVsbCkge1xuICAgICAgICAvLyBBbHdheXMgdXNlIGV4dGVuZGVkIHN0eWxlIHdoZW4gYXV0by1nZW5lcmF0aW5nIGxhYmVscyBmcm9tIGluZGV4L2lkOlxuICAgICAgICBleHRlbmRlZCA9IHRydWVcbiAgICAgICAgdGV4dCA9XG4gICAgICAgICAgaXNMaXN0U291cmNlKHNvdXJjZVNjaGVtYSkgJiYgaW5kZXggIT09IG51bGxcbiAgICAgICAgICAgID8gKHRleHQgPSBgJHtpbmRleCArIDF9YClcbiAgICAgICAgICAgIDogJydcbiAgICAgIH1cbiAgICAgIGlmIChleHRlbmRlZCkge1xuICAgICAgICBjb25zdCBmb3JtTGFiZWwgPSBnZXRGb3JtTGFiZWwoKVxuICAgICAgICBpZiAoZm9ybUxhYmVsKSB7XG4gICAgICAgICAgLy8gSWYgYSBsYWJlbCB3YXMgcHJvdmlkZWQsIHB1dCBpbiBxdW90ZXMgd2hlbiBwcmVmaXhlZCB3aXRoIHRoZVxuICAgICAgICAgIC8vIGZvcm0gbGFiZWwgZm9yIHRoZSBleHRlbmRlZCBzdHlsZTpcbiAgICAgICAgICB0ZXh0ID0gYCR7Zm9ybUxhYmVsfSAke2hhZExhYmVsID8gYCcke3RleHR9J2AgOiB0ZXh0fWBcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFzT2JqZWN0XG4gICAgICAgID8gdGV4dCB8fCBwcmVmaXggfHwgc3VmZml4XG4gICAgICAgICAgPyB7IHRleHQsIHByZWZpeCwgc3VmZml4IH1cbiAgICAgICAgICA6IG51bGxcbiAgICAgICAgOiB0ZXh0XG4gICAgfVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuc2xvdChuYW1lPVwiYmVmb3JlXCIpXG4uZGl0by1zY2hlbWEoXG4gIDpjbGFzcz1cInsgJ2RpdG8tc2Nyb2xsLXBhcmVudCc6IHNjcm9sbGFibGUsICdkaXRvLXNjaGVtYS0tb3Blbic6IG9wZW5lZCB9XCJcbiAgdi1iaW5kPVwiJGF0dHJzXCJcbilcbiAgVGVsZXBvcnQoXG4gICAgdi1pZj1cImlzUG9wdWxhdGVkICYmIHBhbmVsRW50cmllcy5sZW5ndGggPiAwXCJcbiAgICB0bz1cIi5kaXRvLXNpZGViYXJfX3RlbGVwb3J0XCJcbiAgKVxuICAgIERpdG9QYW5lbHMoXG4gICAgICB2LWlmPVwiYWN0aXZlXCJcbiAgICAgIDpwYW5lbHM9XCJwYW5lbEVudHJpZXNcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuICBUZWxlcG9ydChcbiAgICB2LWlmPVwiaGFzSGVhZGVyXCJcbiAgICA6dG89XCJoZWFkZXJUZWxlcG9ydFwiXG4gICAgOmRpc2FibGVkPVwiIWhlYWRlclRlbGVwb3J0XCJcbiAgKVxuICAgIC5kaXRvLXNjaGVtYS1oZWFkZXIoXG4gICAgICB2LWlmPVwiYWN0aXZlXCJcbiAgICApXG4gICAgICBEaXRvTGFiZWwoXG4gICAgICAgIHYtaWY9XCJoYXNMYWJlbFwiXG4gICAgICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICAgIDpjb2xsYXBzZWQ9XCIhb3BlbmVkXCJcbiAgICAgICAgQG9wZW49XCJvbk9wZW5cIlxuICAgICAgKVxuICAgICAgVHJhbnNpdGlvbihcbiAgICAgICAgdi1pZj1cInRhYnNcIlxuICAgICAgICBuYW1lPVwiZGl0by1mYWRlXCJcbiAgICAgIClcbiAgICAgICAgRGl0b1RhYnMoXG4gICAgICAgICAgdi1pZj1cIm9wZW5lZFwiXG4gICAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkVGFiXCJcbiAgICAgICAgICA6dGFicz1cInRhYnNcIlxuICAgICAgICApXG4gICAgICBEaXRvQ2xpcGJvYXJkKFxuICAgICAgICB2LWlmPVwiY2xpcGJvYXJkXCJcbiAgICAgICAgOmNsaXBib2FyZD1cImNsaXBib2FyZFwiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgKVxuICAgICAgc2xvdChuYW1lPVwiZWRpdC1idXR0b25zXCIpXG4gIFRyYW5zaXRpb25IZWlnaHQoOmVuYWJsZWQ9XCJpbmxpbmVkXCIpXG4gICAgLmRpdG8tc2NoZW1hLWNvbnRlbnQoXG4gICAgICB2LWlmPVwib3BlbmVkXCJcbiAgICAgIHJlZj1cImNvbnRlbnRcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1zY3JvbGwnOiBzY3JvbGxhYmxlIH1cIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWlmPVwiaGFzVGFic1wiXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgIHYtZm9yPVwiKHRhYlNjaGVtYSwgdGFiKSBpbiB0YWJzXCJcbiAgICAgICAgICA6a2V5PVwidGFiXCJcbiAgICAgICAgKVxuICAgICAgICAgIC8vLSBUT0RPOiBTd2l0Y2ggdG8gdi1pZiBpbnN0ZWFkIG9mIHYtc2hvdywgb25jZSB2YWxpZGF0aW9uIGlzXG4gICAgICAgICAgLy8tIGRlY291cGxlZCBmcm9tIGNvbXBvbmVudHMuXG4gICAgICAgICAgRGl0b1BhbmUuZGl0by1wYW5lX190YWIoXG4gICAgICAgICAgICB2LXNob3c9XCJzZWxlY3RlZFRhYiA9PT0gdGFiXCJcbiAgICAgICAgICAgIHJlZj1cInRhYnNcIlxuICAgICAgICAgICAgOnRhYj1cInRhYlwiXG4gICAgICAgICAgICA6c2NoZW1hPVwidGFiU2NoZW1hXCJcbiAgICAgICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgICAgOnBhZGRpbmc9XCJwYWRkaW5nXCJcbiAgICAgICAgICAgIDpzaW5nbGU9XCIhaW5saW5lZCAmJiAhaGFzTWFpblBhbmVcIlxuICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgICAgICAgOmFjY3VtdWxhdGVkQmFzaXM9XCJhY2N1bXVsYXRlZEJhc2lzXCJcbiAgICAgICAgICApXG4gICAgICBEaXRvUGFuZS5kaXRvLXBhbmVfX21haW4oXG4gICAgICAgIHYtaWY9XCJoYXNNYWluUGFuZVwiXG4gICAgICAgIHJlZj1cImNvbXBvbmVudHNcIlxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpwYWRkaW5nPVwicGFkZGluZ1wiXG4gICAgICAgIDpzaW5nbGU9XCIhaW5saW5lZCAmJiAhaGFzVGFic1wiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgICA6YWNjdW11bGF0ZWRCYXNpcz1cImFjY3VtdWxhdGVkQmFzaXNcIlxuICAgICAgKVxuICAgICAgc2xvdChcbiAgICAgICAgdi1pZj1cIiFpbmxpbmVkICYmIGlzUG9wdWxhdGVkXCJcbiAgICAgICAgbmFtZT1cImJ1dHRvbnNcIlxuICAgICAgKVxuICBzbG90KFxuICAgIHYtaWY9XCJpbmxpbmVkICYmICFoYXNIZWFkZXJcIlxuICAgIG5hbWU9XCJlZGl0LWJ1dHRvbnNcIlxuICApXG5zbG90KG5hbWU9XCJhZnRlclwiKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7XG4gIGlzT2JqZWN0LFxuICBpc0FycmF5LFxuICBpc0Z1bmN0aW9uLFxuICBpc1JlZ0V4cCxcbiAgZXF1YWxzLFxuICBwYXJzZURhdGFQYXRoLFxuICBub3JtYWxpemVEYXRhUGF0aCxcbiAgbGFiZWxpemVcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IFRyYW5zaXRpb25IZWlnaHQgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgQ29udGV4dE1peGluIGZyb20gJy4uL21peGlucy9Db250ZXh0TWl4aW4uanMnXG5pbXBvcnQgSXRlbU1peGluIGZyb20gJy4uL21peGlucy9JdGVtTWl4aW4uanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQge1xuICBnZXROYW1lZFNjaGVtYXMsXG4gIGdldFBhbmVsRW50cmllcyxcbiAgc2V0RGVmYXVsdFZhbHVlcyxcbiAgcHJvY2Vzc0RhdGEsXG4gIGlzRW1wdHlTY2hlbWEsXG4gIGlzTmVzdGVkXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yLCBnZXRTdG9yZUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1NjaGVtYScsIHtcbiAgbWl4aW5zOiBbQ29udGV4dE1peGluLCBJdGVtTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IFRyYW5zaXRpb25IZWlnaHQgfSxcbiAgaW5oZXJpdEF0dHJzOiBmYWxzZSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkc2NoZW1hQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGluamVjdDogW1xuICAgICckc2NoZW1hUGFyZW50Q29tcG9uZW50J1xuICBdLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAvLyBgZGF0YVNjaGVtYWAgaXMgb25seSBwcm92aWRlZCBmb3IgcGFuZWxzLCB3aGVyZSB0aGUgcGFuZWwgc2NoZW1hXG4gICAgLy8gaXMgZGlmZmVyZW50IGZyb20gdGhlIGRhdGEgc2NoZW1hIGZvciBwYW5lbHMgd2l0aG91dCBvd24gZGF0YS5cbiAgICBkYXRhU2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogcHJvcHMgPT4gcHJvcHMuc2NoZW1hIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBbU3RyaW5nLCBPYmplY3RdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgcGFkZGluZzogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBhY3RpdmU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGlubGluZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgc2Nyb2xsYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGhhc093bkRhdGE6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBnZW5lcmF0ZUxhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGxhYmVsTm9kZTogeyB0eXBlOiBIVE1MRWxlbWVudCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGFjY3VtdWxhdGVkQmFzaXM6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAxIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gdGhpcy5zY2hlbWFcbiAgICByZXR1cm4ge1xuICAgICAgLy8gQWxsb3cgc2NoZW1hIHRvIHByb3ZpZGUgbW9yZSBkYXRhIHRocm91Z2ggYHNjaGVtYS5kYXRhYCwgdnVlLXN0eWxlOlxuICAgICAgLi4uKFxuICAgICAgICBkYXRhICYmIGlzRnVuY3Rpb24oZGF0YSlcbiAgICAgICAgICA/IGRhdGEodGhpcy5jb250ZXh0KVxuICAgICAgICAgIDogZGF0YVxuICAgICAgKSxcbiAgICAgIHNlbGVjdGVkVGFiOiBudWxsLFxuICAgICAgY29tcG9uZW50c1JlZ2lzdHJ5OiB7fSxcbiAgICAgIHBhbmVzUmVnaXN0cnk6IHt9LFxuICAgICAgcGFuZWxzUmVnaXN0cnk6IHt9LFxuICAgICAgc2Nyb2xsUG9zaXRpb25zOiB7fVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG5lc3RlZCgpIHtcbiAgICAgIC8vIEZvciBgQ29udGV4dE1peGluYDpcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICAvLyBPdmVycmlkZSBEaXRvTWl4aW4ncyBzY2hlbWFDb21wb25lbnQoKSB3aGljaCB1c2VzIHRoZSBpbmplY3RlZCB2YWx1ZS5cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHBhcmVudFNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIERvbid0IHJldHVybiB0aGUgYWN0dWFsIHBhcmVudCBzY2hlbWEgaXMgdGhpcyBzY2hlbWEgaGFuZGxlcyBpdHMgb3duXG4gICAgICAvLyBkYXRhLiBUaGlzIHByZXZlbnRzIGRlbGVnYXRpbmcgZXZlbnRzIHRvIHRoZSBwYXJlbnQsIGFuZCByZWdpc3RlcmluZ1xuICAgICAgLy8gY29tcG9uZW50cyB3aXRoIHRoZSBwYXJlbnQgdGhhdCB3b3VsZCBjYXVzZSBpdCB0byBzZXQgaXNEaXJ0eSBmbGFncy5cbiAgICAgIHJldHVybiB0aGlzLmhhc093bkRhdGEgPyBudWxsIDogdGhpcy5wYXJlbnRDb21wb25lbnQuc2NoZW1hQ29tcG9uZW50XG4gICAgfSxcblxuICAgIHBhbmVsRW50cmllcygpIHtcbiAgICAgIHJldHVybiBnZXRQYW5lbEVudHJpZXModGhpcy5zY2hlbWEucGFuZWxzLCB0aGlzLmRhdGFQYXRoKVxuICAgIH0sXG5cbiAgICB0YWJzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS50YWJzKVxuICAgIH0sXG5cbiAgICBkZWZhdWx0VGFiKCkge1xuICAgICAgbGV0IGZpcnN0ID0gbnVsbFxuICAgICAgaWYgKHRoaXMudGFicykge1xuICAgICAgICBjb25zdCB0YWJzID0gT2JqZWN0LnZhbHVlcyh0aGlzLnRhYnMpLmZpbHRlcih0aGlzLnNob3VsZFJlbmRlclNjaGVtYSlcbiAgICAgICAgZm9yIChjb25zdCB7IG5hbWUsIGRlZmF1bHRUYWIgfSBvZiB0YWJzKSB7XG4gICAgICAgICAgaWYgKGlzRnVuY3Rpb24oZGVmYXVsdFRhYikgPyBkZWZhdWx0VGFiKHRoaXMuY29udGV4dCkgOiBkZWZhdWx0VGFiKSB7XG4gICAgICAgICAgICByZXR1cm4gbmFtZVxuICAgICAgICAgIH1cbiAgICAgICAgICBmaXJzdCA/Pz0gbmFtZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmlyc3RcbiAgICB9LFxuXG4gICAgcm91dGVUYWIoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcm91dGUuaGFzaD8uc2xpY2UoMSkgfHwgbnVsbFxuICAgIH0sXG5cbiAgICBjbGlwYm9hcmQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWE/LmNsaXBib2FyZCA/PyBudWxsXG4gICAgfSxcblxuICAgIGhhc0hlYWRlcigpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc0xhYmVsIHx8IHRoaXMuaGFzVGFicyB8fCAhIXRoaXMuY2xpcGJvYXJkXG4gICAgfSxcblxuICAgIGhlYWRlclRlbGVwb3J0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNUb3BMZXZlbFNjaGVtYVxuICAgICAgICA/ICcuZGl0by1oZWFkZXJfX3RlbGVwb3J0J1xuICAgICAgICA6IHRoaXMubGFiZWxOb2RlXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZVxuICAgIHByb2Nlc3NlZERhdGEoKSB7XG4gICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRGF0YSh7IHRhcmdldDogJ3NlcnZlcicsIHNjaGVtYU9ubHk6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgY2xpcGJvYXJkRGF0YToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NEYXRhKHsgdGFyZ2V0OiAnY2xpcGJvYXJkJywgc2NoZW1hT25seTogdHJ1ZSB9KVxuICAgICAgfSxcblxuICAgICAgc2V0KGRhdGEpIHtcbiAgICAgICAgdGhpcy5zZXREYXRhKGRhdGEpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsaXBib2FyZEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5jbGlwYm9hcmREYXRhXG4gICAgfSxcblxuICAgIGZvcm1MYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKFxuICAgICAgICB0aGlzLmdldEl0ZW1Gb3JtU2NoZW1hKHRoaXMuc291cmNlU2NoZW1hLCB0aGlzLmRhdGEsIHRoaXMuY29udGV4dClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNOZXN0ZWQoKSB7XG4gICAgICByZXR1cm4gaXNOZXN0ZWQodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb21lQ29tcG9uZW50KGl0ID0+IGl0LmlzRGlydHkpXG4gICAgfSxcblxuICAgIGlzVG91Y2hlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvbWVDb21wb25lbnQoaXQgPT4gaXQuaXNUb3VjaGVkKVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZXZlcnlDb21wb25lbnQoaXQgPT4gaXQuaXNWYWxpZClcbiAgICB9LFxuXG4gICAgaXNWYWxpZGF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ldmVyeUNvbXBvbmVudChpdCA9PiBpdC5pc1ZhbGlkYXRlZClcbiAgICB9LFxuXG4gICAgaGFzRXJyb3JzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc29tZUNvbXBvbmVudChpdCA9PiBpdC5oYXNFcnJvcnMpXG4gICAgfSxcblxuICAgIGhhc0RhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmxhYmVsIHx8IHRoaXMuY29sbGFwc2libGVcbiAgICB9LFxuXG4gICAgaGFzVGFicygpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudGFic1xuICAgIH0sXG5cbiAgICBpc1RvcExldmVsU2NoZW1hKCkge1xuICAgICAgcmV0dXJuICF0aGlzLmlzTmVzdGVkICYmICF0aGlzLmlubGluZWRcbiAgICB9LFxuXG4gICAgaGFzVG9wTGV2ZWxUYWJzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzVGFicyAmJiB0aGlzLmlzVG9wTGV2ZWxTY2hlbWFcbiAgICB9LFxuXG4gICAgaGFzTWFpblBhbmUoKSB7XG4gICAgICBjb25zdCB7IGNvbXBvbmVudHMgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gISFjb21wb25lbnRzICYmIE9iamVjdC5rZXlzKGNvbXBvbmVudHMpLmxlbmd0aCA+IDBcbiAgICB9LFxuXG4gICAgb3BlbmVkOiBnZXRTdG9yZUFjY2Vzc29yKCdvcGVuZWQnLCB7XG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuY29sbGFwc2VkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnRzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5jb21wb25lbnRzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5wYW5lc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lbHMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLnBhbmVsc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRzQnlEYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9saXN0RW50cmllc0J5RGF0YVBhdGgodGhpcy5jb21wb25lbnRzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVzQnlEYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9saXN0RW50cmllc0J5RGF0YVBhdGgodGhpcy5wYW5lc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lbHNCeURhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xpc3RFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLnBhbmVsc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICB3aWRlOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2lkZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBzY2hlbWE6IHtcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXIoc2NoZW1hKSB7XG4gICAgICAgIC8vIEZvciBmb3JtcyB3aXRoIHR5cGUgZGVwZW5kaW5nIG9uIGxvYWRlZCBkYXRhLCB3ZSBuZWVkIHRvIHdhaXQgZm9yIHRoZVxuICAgICAgICAvLyBhY3R1YWwgc2NoZW1hIHRvIGJlY29tZSByZWFkeSBiZWZvcmUgc2V0dGluZyB1cCBzY2hlbWEgcmVsYXRlZCB0aGluZ3NcbiAgICAgICAgaWYgKCFpc0VtcHR5U2NoZW1hKHNjaGVtYSkpIHtcbiAgICAgICAgICB0aGlzLnNldHVwU2NoZW1hKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICByb3V0ZVRhYjoge1xuICAgICAgaW1tZWRpYXRlOiB0cnVlLFxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzMzOTMjaXNzdWVjb21tZW50LTExNTg0NzAxNDlcbiAgICAgIGZsdXNoOiAncG9zdCcsXG4gICAgICBoYW5kbGVyKHJvdXRlVGFiKSB7XG4gICAgICAgIC8vIFJlbWVtYmVyIHRoZSBjdXJyZW50IHBhdGggdG8ga25vdyBpZiB0YWIgY2hhbmdlcyBzaG91bGQgc3RpbGwgYmVcbiAgICAgICAgLy8gaGFuZGxlZCwgYnV0IHJlbW92ZSB0aGUgdHJhaWxpbmcgYC9jcmVhdGVgIG9yIGAvOmlkYCBmcm9tIGl0IHNvIHRoYXRcbiAgICAgICAgLy8gdGFicyBpbmZvcm1zIHRoYXQgc3RheSBvcGVuIGFmdGVyIGNyZWF0aW9uIHN0aWxsIHdvcmsuXG4gICAgICAgIGlmICh0aGlzLmhhc1RvcExldmVsVGFicykge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWIgPSByb3V0ZVRhYlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHNlbGVjdGVkVGFiKG5ld1RhYiwgb2xkVGFiKSB7XG4gICAgICBpZiAodGhpcy5zY3JvbGxhYmxlKSB7XG4gICAgICAgIGNvbnN0IHsgY29udGVudCB9ID0gdGhpcy4kcmVmc1xuICAgICAgICB0aGlzLnNjcm9sbFBvc2l0aW9uc1tvbGRUYWJdID0gY29udGVudC5zY3JvbGxUb3BcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgIGNvbnRlbnQuc2Nyb2xsVG9wID0gdGhpcy5zY3JvbGxQb3NpdGlvbnNbbmV3VGFiXSA/PyAwXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5oYXNUb3BMZXZlbFRhYnMpIHtcbiAgICAgICAgY29uc3QgdGFiID0gdGhpcy5zaG91bGRSZW5kZXJTY2hlbWEodGhpcy50YWJzW25ld1RhYl0pXG4gICAgICAgICAgPyBuZXdUYWJcbiAgICAgICAgICA6IHRoaXMuZGVmYXVsdFRhYlxuICAgICAgICB0aGlzLiRyb3V0ZXIucmVwbGFjZSh7IGhhc2g6IHRhYiA/IGAjJHt0YWJ9YCA6IG51bGwgfSlcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmhhc0Vycm9ycykge1xuICAgICAgICB0aGlzLnJlcG9zaXRpb25FcnJvcnMoKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gICAgaWYgKHRoaXMuc2Nyb2xsYWJsZSAmJiB0aGlzLndpZGUpIHtcbiAgICAgIHRoaXMuYXBwU3RhdGUucGFnZUNsYXNzID0gJ2RpdG8tcGFnZS0td2lkZSdcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkVGFiID0gdGhpcy5yb3V0ZVRhYiB8fCB0aGlzLmRlZmF1bHRUYWJcbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgdGhpcy5lbWl0RXZlbnQoJ2Rlc3Ryb3knKVxuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICAgIGlmICh0aGlzLnNjcm9sbGFibGUgJiYgdGhpcy53aWRlKSB7XG4gICAgICB0aGlzLmFwcFN0YXRlLnBhZ2VDbGFzcyA9IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldHVwU2NoZW1hKCkge1xuICAgICAgdGhpcy5zZXR1cFNjaGVtYUZpZWxkcygpXG4gICAgICAvLyBEZWxlZ2F0ZSBjaGFuZ2UgZXZlbnRzIHRocm91Z2ggdG8gcGFyZW50IHNjaGVtYTpcbiAgICAgIHRoaXMuZGVsZWdhdGUoJ2NoYW5nZScsIHRoaXMucGFyZW50U2NoZW1hQ29tcG9uZW50KVxuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2luaXRpYWxpemUnKSAvLyBOb3QgYCdjcmVhdGUnYCwgc2luY2UgdGhhdCdzIGZvciBkYXRhLlxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXNCeURhdGFQYXRoKHRoaXMuY29tcG9uZW50c0J5RGF0YVBhdGgsIGRhdGFQYXRoKVxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRCeURhdGFQYXRoKGRhdGFQYXRoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRzQnlOYW1lKGRhdGFQYXRoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllc0J5TmFtZSh0aGlzLmNvbXBvbmVudHNCeURhdGFQYXRoLCBkYXRhUGF0aClcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50QnlOYW1lKG5hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudHNCeU5hbWUobmFtZSlbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRzKGRhdGFQYXRoT3JOYW1lKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllcyh0aGlzLmNvbXBvbmVudHNCeURhdGFQYXRoLCBkYXRhUGF0aE9yTmFtZSlcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50KGRhdGFQYXRoT3JOYW1lKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnRzKGRhdGFQYXRoT3JOYW1lKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldFBhbmVsc0J5RGF0YVBhdGgoZGF0YVBhdGgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLnBhbmVsc0J5RGF0YVBhdGgsIGRhdGFQYXRoKVxuICAgIH0sXG5cbiAgICBnZXRQYW5lbEJ5RGF0YVBhdGgoZGF0YVBhdGgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFBhbmVsc0J5RGF0YVBhdGgoZGF0YVBhdGgpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWxzKGRhdGFQYXRoT3JOYW1lKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllcyh0aGlzLnBhbmVsc0J5RGF0YVBhdGgsIGRhdGFQYXRoT3JOYW1lKVxuICAgIH0sXG5cbiAgICBnZXRQYW5lbChkYXRhUGF0aE9yTmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFuZWxzKGRhdGFQYXRoT3JOYW1lKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIHNvbWVDb21wb25lbnQoY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLmlzUG9wdWxhdGVkICYmIHRoaXMuY29tcG9uZW50cy5zb21lKGNhbGxiYWNrKVxuICAgIH0sXG5cbiAgICBldmVyeUNvbXBvbmVudChjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHRoaXMuaXNQb3B1bGF0ZWQgJiYgdGhpcy5jb21wb25lbnRzLmV2ZXJ5KGNhbGxiYWNrKVxuICAgIH0sXG5cbiAgICBvbk9wZW4ob3Blbikge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoJ29wZW4nLCB7IGNvbnRleHQ6IHsgb3BlbiB9IH0pXG4gICAgICAvLyBQcmV2ZW50IGNsb3NpbmcgdGhlIHNjaGVtYSB3aXRoIGludmFsaWQgZGF0YSwgc2luY2UgdGhlIGluLWNvbXBvbmVudFxuICAgICAgLy8gdmFsaWRhdGlvbiB3aWxsIG5vdCBiZSBleGVjdXRlZCBvbmNlIGl0J3MgY2xvc2VkLlxuXG4gICAgICAvLyBUT0RPOiBNb3ZlIHZhbGlkYXRpb24gb3V0IG9mIGNvbXBvbmVudHMsIHRvIHNjaGVtYSwganVzdCBsaWtlXG4gICAgICAvLyBwcm9jZXNzaW5nLCBhbmQgdXNlIGBzaG93VmFsaWRhdGlvbkVycm9ycygpYCBmb3IgdGhlIHJlc3VsdGluZyBlcnJvcnMsXG4gICAgICAvLyB0aGVuIHJlbW92ZSB0aGlzIHJlcXVpcmVtZW50LCBzaW5jZSB3ZSBjYW4gdmFsaWRhdGUgY2xvc2VkIGZvcm1zIGFuZFxuICAgICAgLy8gc2NoZW1hcyB0aGVuLlxuICAgICAgaWYgKCF0aGlzLm9wZW5lZCB8fCBvcGVuIHx8IHRoaXMudmFsaWRhdGVBbGwoKSkge1xuICAgICAgICB0aGlzLm9wZW5lZCA9IG9wZW5cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25DaGFuZ2UoKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgnY2hhbmdlJylcbiAgICB9LFxuXG4gICAgcmVzZXRWYWxpZGF0aW9uKCkge1xuICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGhpcy5jb21wb25lbnRzKSB7XG4gICAgICAgIGNvbXBvbmVudC5yZXNldFZhbGlkYXRpb24oKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjbGVhckVycm9ycygpIHtcbiAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMuY29tcG9uZW50cykge1xuICAgICAgICBjb21wb25lbnQuY2xlYXJFcnJvcnMoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICByZXBvc2l0aW9uRXJyb3JzKCkge1xuICAgICAgLy8gRmlyZSBhIGZha2Ugc2Nyb2xsIGV2ZW50IHRvIGZvcmNlIHRoZSByZXBvc2l0aW9uaW5nIG9mIGVycm9yIHRvb2x0aXBzLFxuICAgICAgLy8gYXMgb3RoZXJ3aXNlIHRoZXkgc29tZXRpbWVzIGRvbid0IHNob3cgdXAgaW4gdGhlIHJpZ2h0IHBsYWNlIGluaXRpYWxseVxuICAgICAgLy8gd2hlbiBjaGFuZ2luZyB0YWJzLlxuICAgICAgY29uc3Qgc2Nyb2xsQ29udGFpbmVyID0gdGhpcy4kcmVmcy5jb250ZW50LmNsb3Nlc3QoJy5kaXRvLXNjcm9sbCcpXG4gICAgICBjb25zdCBkaXNwYXRjaCA9ICgpID0+IHNjcm9sbENvbnRhaW5lci5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnc2Nyb2xsJykpXG4gICAgICBkaXNwYXRjaCgpXG4gICAgICAvLyBUaGlzIGlzIHJlcXVpcmVkIHRvIGhhbmRsZSBgJi0tbGFiZWwtdmVydGljYWxgIGJhc2VkIGxheW91dCBjaGFuZ2VzLlxuICAgICAgc2V0VGltZW91dChkaXNwYXRjaCwgMClcbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLm9wZW5lZCA9IHRydWVcbiAgICAgIHJldHVybiB0aGlzLnBhcmVudFNjaGVtYUNvbXBvbmVudD8uZm9jdXMoKVxuICAgIH0sXG5cbiAgICB2YWxpZGF0ZUFsbChtYXRjaCwgbm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgY29uc3QgeyBjb21wb25lbnRzQnlEYXRhUGF0aCB9ID0gdGhpc1xuICAgICAgbGV0IGRhdGFQYXRoc1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGNoZWNrID0gaXNGdW5jdGlvbihtYXRjaClcbiAgICAgICAgICA/IG1hdGNoXG4gICAgICAgICAgOiBpc1JlZ0V4cChtYXRjaClcbiAgICAgICAgICAgID8gZmllbGQgPT4gbWF0Y2gudGVzdChmaWVsZClcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICBkYXRhUGF0aHMgPSBjaGVja1xuICAgICAgICAgID8gT2JqZWN0LmtleXMoY29tcG9uZW50c0J5RGF0YVBhdGgpLmZpbHRlcihjaGVjaylcbiAgICAgICAgICA6IGlzQXJyYXkobWF0Y2gpXG4gICAgICAgICAgICA/IG1hdGNoXG4gICAgICAgICAgICA6IFttYXRjaF1cbiAgICAgIH1cbiAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgICB9XG4gICAgICBsZXQgaXNWYWxpZCA9IHRydWVcbiAgICAgIGxldCBmaXJzdCA9IHRydWVcbiAgICAgIGRhdGFQYXRocyB8fD0gT2JqZWN0LmtleXMoY29tcG9uZW50c0J5RGF0YVBhdGgpXG4gICAgICBmb3IgKGNvbnN0IGRhdGFQYXRoIG9mIGRhdGFQYXRocykge1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aClcbiAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgIGlmICghY29tcG9uZW50LnZhbGlkYXRlKG5vdGlmeSkpIHtcbiAgICAgICAgICAgIC8vIEZvY3VzIGZpcnN0IGVycm9yIGZpZWxkXG4gICAgICAgICAgICBpZiAobm90aWZ5ICYmIGZpcnN0KSB7XG4gICAgICAgICAgICAgIGNvbXBvbmVudC5zY3JvbGxJbnRvVmlldygpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChub3RpZnkgJiYgIWlzVmFsaWQpIHtcbiAgICAgICAgdGhpcy5ub3RpZnlFcnJvcnMoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGlzVmFsaWRcbiAgICB9LFxuXG4gICAgdmVyaWZ5QWxsKG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFsbChtYXRjaCwgZmFsc2UpXG4gICAgfSxcblxuICAgIGFzeW5jIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMsIGZpcnN0ID0gdHJ1ZSkge1xuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgICBjb25zdCB1bm1hdGNoZWQgPSBbXVxuICAgICAgY29uc3Qgd2FzRmlyc3QgPSBmaXJzdFxuICAgICAgZm9yIChjb25zdCBbZGF0YVBhdGgsIGVycnNdIG9mIE9iamVjdC5lbnRyaWVzKGVycm9ycykpIHtcbiAgICAgICAgLy8gSWYgdGhlIHNjaGVtYSBpcyBhIGRhdGEtcm9vdCwgcHJlZml4IGl0cyBvd24gZGF0YVBhdGggdG8gYWxsIGVycm9ycyxcbiAgICAgICAgLy8gc2luY2UgdGhlIGRhdGEgdGhhdCBpdCBzZW5kcyBhbmQgdmFsaWRhdGVzIHdpbGwgYmUgdW5wcmVmaXhlZC5cbiAgICAgICAgY29uc3QgZnVsbERhdGFQYXRoID0gdGhpcy5oYXNPd25EYXRhXG4gICAgICAgICAgPyBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBkYXRhUGF0aClcbiAgICAgICAgICA6IGRhdGFQYXRoXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMsIHRoaXMuZGF0YVBhdGgsIHRoaXMuaGFzT3duRGF0YSwgZnVsbERhdGFQYXRoKVxuICAgICAgICAvLyBDb252ZXJ0IGZyb20gSmF2YVNjcmlwdCBwcm9wZXJ0eSBhY2Nlc3Mgbm90YXRpb24sIHRvIG91ciBvd24gZm9ybVxuICAgICAgICAvLyBvZiByZWxhdGl2ZSBKU09OIHBvaW50ZXJzIGFzIGRhdGEtcGF0aHM6XG4gICAgICAgIGNvbnN0IGRhdGFQYXRoUGFydHMgPSBwYXJzZURhdGFQYXRoKGZ1bGxEYXRhUGF0aClcbiAgICAgICAgbGV0IGZvdW5kID0gZmFsc2VcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGhQYXJ0cylcbiAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgIGlmIChjb21wb25lbnQuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJycywgZmlyc3QgJiYgZm9jdXMpKSB7XG4gICAgICAgICAgICBmb3VuZCA9IHRydWVcbiAgICAgICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgICAvLyBDb3VsZG4ndCBmaW5kIGEgY29tcG9uZW50IGluIGFuIGFjdGl2ZSBmb3JtIGZvciB0aGUgZ2l2ZW4gZGF0YVBhdGguXG4gICAgICAgICAgLy8gU2VlIGlmIHdlIGNhbiBmaW5kIGEgY29tcG9uZW50IHNlcnZpbmcgYSBwYXJ0IG9mIHRoZSBkYXRhUGF0aCxcbiAgICAgICAgICAvLyBhbmQgdGFrZSBpdCBmcm9tIHRoZXJlOlxuICAgICAgICAgIGNvbnN0IHByb3BlcnR5ID0gZGF0YVBhdGhQYXJ0cy5wb3AoKVxuICAgICAgICAgIHdoaWxlIChkYXRhUGF0aFBhcnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoUGFydHMpXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5hdmlnYXRlZCA9IGF3YWl0IGNvbXBvbmVudC5uYXZpZ2F0ZVRvQ29tcG9uZW50Py4oXG4gICAgICAgICAgICAgICAgZnVsbERhdGFQYXRoLFxuICAgICAgICAgICAgICAgIHN1YkNvbXBvbmVudHMgPT4ge1xuICAgICAgICAgICAgICAgICAgbGV0IGZvdW5kID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHN1YkNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hlZCA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhlcnJvcnMpLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgIChbZGF0YVBhdGhdKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aCkuc3RhcnRzV2l0aChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuZGF0YVBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMobWF0Y2hlZCkubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5zaG93VmFsaWRhdGlvbkVycm9ycyhtYXRjaGVkLCBmaXJzdCAmJiBmb2N1cylcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAobmF2aWdhdGVkKSB7XG4gICAgICAgICAgICAgICAgLy8gRm91bmQgYSBuZXN0ZWQgZm9ybSB0byBkaXNwbGF5IGF0IGxlYXN0IHBhcnRzIGZvIHRoZSBlcnJvcnMuXG4gICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3Qgc2hvdyBhbGwgZXJyb3JzIGF0IG9uY2UsIHNvIHdlJ3JlIGRvbmUuIERvbid0IGNhbGxcbiAgICAgICAgICAgICAgICAvLyBgbm90aWZ5RXJyb3JzKClgIHlldCwgYXMgd2UgY2FuIG9ubHkgZGlzcGxheSBpdCBvbmNlXG4gICAgICAgICAgICAgICAgLy8gYHNob3dWYWxpZGF0aW9uRXJyb3JzKClgIHdhcyBjYWxsZWQgZnJvbSBgRGl0b0Zvcm0ubW91bnRlZCgpYFxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTdGlsbCBoZXJlLCBzbyBrZWVwIHJlbW92aW5nIHRoZSBsYXN0IHBhcnQgdW50aWwgd2UgZmluZCBhIG1hdGNoLlxuICAgICAgICAgICAgZGF0YVBhdGhQYXJ0cy5wb3AoKVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBXaGVuIHRoZSBlcnJvciBjYW4ndCBiZSBtYXRjaGVkLCBhZGQgaXQgdG8gYSBsaXN0IG9mIHVubWF0Y2hlZFxuICAgICAgICAgIC8vIGVycm9ycyB3aXRoIGRlY2VudCBtZXNzYWdlLCB0byByZXBvcnQgYXQgdGhlIGVuZC5cbiAgICAgICAgICBjb25zdCBmaWVsZCA9IGxhYmVsaXplKHByb3BlcnR5KVxuICAgICAgICAgIGZvciAoY29uc3QgZXJyIG9mIGVycnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZWZpeCA9IGZpZWxkXG4gICAgICAgICAgICAgID8gYFRoZSBmaWVsZCAke2ZpZWxkfWBcbiAgICAgICAgICAgICAgOiBgVGhlICR7dGhpcy5mb3JtTGFiZWx9YFxuICAgICAgICAgICAgdW5tYXRjaGVkLnB1c2goYCR7cHJlZml4fSAke2Vyci5tZXNzYWdlfWApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgIH1cbiAgICAgIGlmICh3YXNGaXJzdCAmJiAhZmlyc3QpIHtcbiAgICAgICAgdGhpcy5ub3RpZnlFcnJvcnModW5tYXRjaGVkLmpvaW4oJ1xcbicpKVxuICAgICAgfVxuICAgICAgcmV0dXJuICFmaXJzdFxuICAgIH0sXG5cbiAgICBub3RpZnlFcnJvcnMobWVzc2FnZSkge1xuICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICB0aXRsZTogJ1ZhbGlkYXRpb24gRXJyb3JzJyxcbiAgICAgICAgdGV4dDogbWVzc2FnZSB8fCAnUGxlYXNlIGNvcnJlY3QgdGhlIGhpZ2hsaWdodGVkIGVycm9ycy4nXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICByZXNldERhdGEoKSB7XG4gICAgICAvLyBXZSBjYW4ndCBzZXQgYHRoaXMuZGF0YSA9IC4uLmAgYmVjYXVzZSBpdCdzIGEgcHJvcGVydHksIGJ1dCB3ZSBjYW4gc2V0XG4gICAgICAvLyBhbGwga25vd24gcHJvcGVydGllcyBvbiBpdCB0byB0aGUgdmFsdWVzIHJldHVybmVkIGJ5XG4gICAgICAvLyBgc2V0RGVmYXVsdFZhbHVlcygpYCwgYXMgdGhleSBhcmUgYWxsIHJlYWN0aXZlIGFscmVhZHkgZnJvbSB0aGUgc3RhcnRzOlxuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmRhdGEsIHNldERlZmF1bHRWYWx1ZXModGhpcy5kYXRhU2NoZW1hLCB7fSwgdGhpcykpXG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICB9LFxuXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gZGF0YSkge1xuICAgICAgICBpZiAobmFtZSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgICBpZiAoIWVxdWFscyh0aGlzLmRhdGFbbmFtZV0sIGRhdGFbbmFtZV0pKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLW11dGF0aW5nLXByb3BzXG4gICAgICAgICAgICB0aGlzLmRhdGFbbmFtZV0gPSBkYXRhW25hbWVdXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmdldENvbXBvbmVudHNCeU5hbWUobmFtZSkpIHtcbiAgICAgICAgICAgICAgY29tcG9uZW50Lm1hcmtEaXJ0eSgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGZpbHRlckRhdGEoZGF0YSkge1xuICAgICAgLy8gRmlsdGVycyBvdXQgYXJyYXlzIGFuZCBvYmplY3RzIHRoYXQgYXJlIGJhY2tlZCBieSBkYXRhIHJlc291cmNlc1xuICAgICAgLy8gdGhlbXNlbHZlcywgYXMgdGhvc2UgYXJlIGFscmVhZHkgdGFrZW4gY2FyZSBvZiB0aHJvdWdoIHRoZWlyIG93biBBUElcbiAgICAgIC8vIHJlc291cmNlIGVuZC1wb2ludHMgYW5kIHNob3VsZG4ndCBiZSBzZXQuXG4gICAgICBjb25zdCBsb2NhbERhdGEgPSB7fVxuICAgICAgY29uc3QgZm9yZWlnbkRhdGEgPSB7fVxuICAgICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XG4gICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSB8fCBpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlOYW1lKG5hbWUpXG4gICAgICAgICAgaWYgKGNvbXBvbmVudHMuc29tZShjb21wb25lbnQgPT4gY29tcG9uZW50LnByb3ZpZGVzRGF0YSkpIHtcbiAgICAgICAgICAgIGZvcmVpZ25EYXRhW25hbWVdID0gdmFsdWVcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxvY2FsRGF0YVtuYW1lXSA9IHZhbHVlXG4gICAgICB9XG4gICAgICByZXR1cm4geyBsb2NhbERhdGEsIGZvcmVpZ25EYXRhIH1cbiAgICB9LFxuXG4gICAgcHJvY2Vzc0RhdGEoeyB0YXJnZXQgPSAnY2xpcGJvYXJkJywgc2NoZW1hT25seSA9IHRydWUgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gcHJvY2Vzc0RhdGEoXG4gICAgICAgIHRoaXMuZGF0YVNjaGVtYSxcbiAgICAgICAgdGhpcy5zb3VyY2VTY2hlbWEsXG4gICAgICAgIHRoaXMuZGF0YSxcbiAgICAgICAgdGhpcy5kYXRhUGF0aCxcbiAgICAgICAge1xuICAgICAgICAgIC8vIE5lZWRlZCBmb3IgRGl0b0NvbnRleHQgaGFuZGxpbmcgaW5zaWRlIGBwcm9jZXNzRGF0YWAgYW5kXG4gICAgICAgICAgLy8gYHByb2Nlc3NTY2hlbWFEYXRhKClgOlxuICAgICAgICAgIHJvb3REYXRhOiB0aGlzLnJvb3REYXRhLFxuICAgICAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgICAgICBzY2hlbWFPbmx5LFxuICAgICAgICAgIHRhcmdldFxuICAgICAgICB9XG4gICAgICApXG4gICAgfSxcblxuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIC8vIGAkc2NoZW1hUGFyZW50Q29tcG9uZW50KClgIGlzIG9ubHkgc2V0IGlmIG9uZSBvZiB0aGUgYW5jZXN0b3JzIHVzZXNcbiAgICAgIC8vIHRoZSBgU2NoZW1hUGFyZW50TWl4aW5gOlxuICAgICAgdGhpcy4kc2NoZW1hUGFyZW50Q29tcG9uZW50KCk/Ll9yZWdpc3RlclNjaGVtYUNvbXBvbmVudCh0aGlzLCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlckNvbXBvbmVudChjb21wb25lbnQsIGFkZCkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJFbnRyeSh0aGlzLmNvbXBvbmVudHNSZWdpc3RyeSwgY29tcG9uZW50LCBhZGQpXG4gICAgICAvLyBPbmx5IHJlZ2lzdGVyIHdpdGggdGhlIHBhcmVudCBpZiBzY2hlbWEgc2hhcmVzIGRhdGEgd2l0aCBpdC5cbiAgICAgIHRoaXMucGFyZW50U2NoZW1hQ29tcG9uZW50Py5fcmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50LCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlclBhbmUocGFuZSwgYWRkKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlckVudHJ5KHRoaXMucGFuZXNSZWdpc3RyeSwgcGFuZSwgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJQYW5lbChwYW5lbCwgYWRkKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlckVudHJ5KHRoaXMucGFuZWxzUmVnaXN0cnksIHBhbmVsLCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlckVudHJ5KHJlZ2lzdHJ5LCBlbnRyeSwgYWRkKSB7XG4gICAgICBjb25zdCB1aWQgPSBlbnRyeS4kdWlkXG4gICAgICBpZiAoYWRkKSB7XG4gICAgICAgIHJlZ2lzdHJ5W3VpZF0gPSBlbnRyeVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIHJlZ2lzdHJ5W3VpZF1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2xpc3RFbnRyaWVzQnlEYXRhUGF0aChyZWdpc3RyeSkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMocmVnaXN0cnkpLnJlZHVjZSgoZW50cmllc0J5RGF0YVBhdGgsIGVudHJ5KSA9PiB7XG4gICAgICAgIC8vIE11bHRpcGxlIGVudHJpZXMgY2FuIGJlIGxpbmtlZCB0byB0aGUgc2FtZSBkYXRhLXBhdGgsIGUuZy4gd2hlblxuICAgICAgICAvLyB0aGVyZSBhcmUgdGFicy4gTGluayBlYWNoIGRhdGEtcGF0aCB0byBhbiBhcnJheSBvZiBlbnRyaWVzLlxuICAgICAgICBjb25zdCB7IGRhdGFQYXRoIH0gPSBlbnRyeVxuICAgICAgICBjb25zdCBlbnRyaWVzID0gKGVudHJpZXNCeURhdGFQYXRoW2RhdGFQYXRoXSB8fD0gW10pXG4gICAgICAgIGVudHJpZXMucHVzaChlbnRyeSlcbiAgICAgICAgcmV0dXJuIGVudHJpZXNCeURhdGFQYXRoXG4gICAgICB9LCB7fSlcbiAgICB9LFxuXG4gICAgX2dldEVudHJpZXMoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoKSB7XG4gICAgICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgoZGF0YVBhdGgpLnN0YXJ0c1dpdGgodGhpcy5kYXRhUGF0aClcbiAgICAgICAgPyB0aGlzLl9nZXRFbnRyaWVzQnlEYXRhUGF0aChlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgpXG4gICAgICAgIDogdGhpcy5fZ2V0RW50cmllc0J5TmFtZShlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgpXG4gICAgfSxcblxuICAgIF9nZXRFbnRyaWVzQnlEYXRhUGF0aChlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgpIHtcbiAgICAgIHJldHVybiBlbnRyaWVzQnlEYXRhUGF0aFtub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aCldIHx8IFtdXG4gICAgfSxcblxuICAgIF9nZXRFbnRyaWVzQnlOYW1lKGVudHJpZXNCeURhdGFQYXRoLCBuYW1lKSB7XG4gICAgICByZXR1cm4gZW50cmllc0J5RGF0YVBhdGhbYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgbmFtZSldIHx8IFtdXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc2NoZW1hIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcblxuICA+IC5kaXRvLXNjaGVtYS1oZWFkZXIgKyAuZGl0by1zY2hlbWEtY29udGVudCA+IC5kaXRvLXBhbmUge1xuICAgIG1hcmdpbi10b3A6ICRmb3JtLXNwYWNpbmctaGFsZjtcbiAgfVxuXG4gICY6aGFzKD4gLmRpdG8tc2NoZW1hLWNvbnRlbnQgKyAuZGl0by1lZGl0LWJ1dHRvbnMpIHtcbiAgICAvLyBEaXNwbGF5IHRoZSBpbmxpbmVkIGVkaXQgYnV0dG9ucyB0byB0aGUgcmlnaHQgb2YgdGhlIHNjaGVtYTpcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG5cbiAgICA+IC5kaXRvLWVkaXQtYnV0dG9ucyB7XG4gICAgICBmbGV4OiAxIDAgMCU7XG4gICAgICBtYXJnaW4tbGVmdDogJGZvcm0tc3BhY2luZztcbiAgICB9XG4gIH1cblxuICA+IC5kaXRvLXNjaGVtYS1jb250ZW50IHtcbiAgICBmbGV4OiAwIDEgMTAwJTtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgLy8gU28gdGhhdCBzY2hlbWEgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IHRvIHRoZSBib3R0b20uXG4gICAgLy8gTk9URTogV2UgYWxzbyBuZWVkIGdyaWQgZm9yIGBUcmFuc2l0aW9uSGVpZ2h0YCB0byB3b3JrIHdlbGwuIFN3aXRjaGluZ1xuICAgIC8vIHRvIGZsZXggYm94IGhlcmUgY2F1c2VzIGp1bXB5IGNvbGxhcHNpbmcgdHJhbnNpdGlvbnMuXG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50O1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMTAwJTtcblxuICAgID4gOm9ubHktY2hpbGQge1xuICAgICAgZ3JpZC1yb3ctZW5kOiBub25lO1xuICAgIH1cbiAgfVxufVxuXG4uZGl0by1zY2hlbWEtaGVhZGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXG4gIC5kaXRvLWhlYWRlciAmIHtcbiAgICAvLyBXaGVuIHRlbGVwb3J0ZWQgaW50byBtYWluIGhlYWRlci5cbiAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XG4gIH1cblxuICAuZGl0by1sYWJlbCAmIHtcbiAgICAvLyBXaGVuIHRlbGVwb3J0ZWQgaW50byBjb250YWluZXIgbGFiZWwuXG4gICAgZmxleDogMTtcbiAgfVxuXG4gID4gLmRpdG8tbGFiZWwge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gIH1cblxuICA+IC5kaXRvLWJ1dHRvbnMge1xuICAgIG1hcmdpbi1sZWZ0OiB2YXIoLS1idXR0b24tbWFyZ2luLCAwKTtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5EaXRvU2NoZW1hLmRpdG8tc2NoZW1hLWlubGluZWQoXG4gIDpjbGFzcz1cInsgJ2RpdG8tc2NoZW1hLWNvbXBhY3QnOiBpc0NvbXBhY3QgfVwiXG4gIDpzY2hlbWE9XCJzY2hlbWFcIlxuICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gIDpkYXRhPVwiZGF0YVwiXG4gIDptZXRhPVwibWV0YVwiXG4gIDpzdG9yZT1cInN0b3JlXCJcbiAgOmxhYmVsPVwiaXNDb21wYWN0ID8gbnVsbCA6IGxhYmVsXCJcbiAgOnBhZGRpbmc9XCJwYWRkaW5nID8/ICdpbmxpbmVkJ1wiXG4gIDppbmxpbmVkPVwidHJ1ZVwiXG4gIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgOmdlbmVyYXRlTGFiZWxzPVwiIWlzQ29tcGFjdFwiXG4gIDpsYWJlbE5vZGU9XCJsYWJlbE5vZGVcIlxuICA6YWNjdW11bGF0ZWRCYXNpcz1cImFjY3VtdWxhdGVkQmFzaXNcIlxuKVxuICAvLy0gUmVuZGVyIGRpdG8tZWRpdC1idXR0b25zIGZvciBpbmxpbmVkIHNjaGVtYXMgc2VwYXJhdGVseSBmcm9tIGFsbFxuICAvLy0gb3RoZXJzIGluIGBUeXBlTGlzdGAgYXMgYSBzY29wZSwgZm9yIGJldHRlciBoYW5kbGluZyBvZiBsYXlvdXQuXG4gIHRlbXBsYXRlKCNlZGl0LWJ1dHRvbnMpXG4gICAgRGl0b0VkaXRCdXR0b25zKFxuICAgICAgdi1pZj1cImRlbGV0YWJsZSB8fCBkcmFnZ2FibGUgfHwgZWRpdGFibGVcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICA6ZWRpdFBhdGg9XCJlZGl0UGF0aFwiXG4gICAgICBAZGVsZXRlPVwiJGVtaXQoJ2RlbGV0ZScpXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGlzQ29tcGFjdCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1NjaGVtYUlubGluZWQnLCB7XG4gIGVtaXRzOiBbJ2RlbGV0ZSddLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGxhYmVsOiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBwYWRkaW5nOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgY29sbGFwc2VkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2libGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkcmFnZ2FibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRlbGV0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGxhYmVsTm9kZTogeyB0eXBlOiBIVE1MRWxlbWVudCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGFjY3VtdWxhdGVkQmFzaXM6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGlzQ29tcGFjdCgpIHtcbiAgICAgIHJldHVybiBpc0NvbXBhY3QodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIGhhc0xhYmVsKCkge1xuICAgICAgcmV0dXJuICF0aGlzLmlzQ29tcGFjdCAmJiAhIXRoaXMubGFiZWxcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zY2hlbWEtaW5saW5lZCB7XG4gIC8vIFVzZSBncmlkIGxheW91dCBmb3IgdHdvIHJlYXNvbnM6IEZvciBgVHJhbnNpdGlvbkhlaWdodGAgdG8gd29yayBzbW9vdGhseSxcbiAgLy8gYW5kIHRvIGFsaWduIHRoZSBoZWFkZXIgYWJvdmUgdGhlIGNvbnRlbnQgd2hlbiB0aGUgaGVhZGVyIGlzIG5vdCB0ZWxlcG9ydGVkXG4gIC8vIG91dHNpZGUgb2YgdGhlIHNjaGVtYS5cbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBtaW4tY29udGVudDtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxMDAlO1xuXG4gICY6bm90KDpob3ZlciwgLmRpdG8tc2NoZW1hLS1vcGVuKSB7XG4gICAgPiAuZGl0by1zY2hlbWEtaGVhZGVyIHtcbiAgICAgID4gLmRpdG8tY2xpcGJvYXJkIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8IS0tIGVzbGludC1kaXNhYmxlIHZ1ZS9uby10ZW1wbGF0ZS1zaGFkb3cgLS0+XG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tcGFuZShcbiAgdi1pZj1cImlzUG9wdWxhdGVkICYmIGNvbXBvbmVudFNjaGVtYXMubGVuZ3RoID4gMFwiXG4gIHYtcmVzaXplPVwib25SZXNpemVQYW5lXCJcbiAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4pXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPWB7XG4gICAgICBzY2hlbWEsXG4gICAgICBkYXRhUGF0aCxcbiAgICAgIG5lc3RlZERhdGFQYXRoLFxuICAgICAgbmVzdGVkLFxuICAgICAgc3RvcmVcbiAgICB9LCBpbmRleCBpbiBjb21wb25lbnRTY2hlbWFzYFxuICApXG4gICAgLy8tIFVzZSA8c3Bhbj4gZm9yIC5kaXRvLWJyZWFrIHNvIHdlIGNhbiB1c2UgYC5kaXRvLWNvbnRhaW5lcjpmaXJzdC1vZi10eXBlYFxuICAgIC8vLSBzZWxlY3Rvci5cbiAgICBzcGFuLmRpdG8tYnJlYWsoXG4gICAgICB2LWlmPVwiWydiZWZvcmUnLCAnYm90aCddLmluY2x1ZGVzKHNjaGVtYS5icmVhaylcIlxuICAgIClcbiAgICBEaXRvQ29udGFpbmVyKFxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlclNjaGVtYShzY2hlbWEpXCJcbiAgICAgIHJlZj1cImNvbnRhaW5lcnNcIlxuICAgICAgOmtleT1cIm5lc3RlZERhdGFQYXRoXCJcbiAgICAgIDpkYXRhLWluZGV4PVwiaW5kZXhcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpzaW5nbGU9XCJpc1NpbmdsZUNvbXBvbmVudFwiXG4gICAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICAgIDp2ZXJ0aWNhbExhYmVscz1cImlzSW5MYWJlbGVkUm93KGluZGV4KVwiXG4gICAgICA6YWNjdW11bGF0ZWRCYXNpcz1cImFjY3VtdWxhdGVkQmFzaXNcIlxuICAgIClcbiAgICBzcGFuLmRpdG8tYnJlYWsoXG4gICAgICB2LWlmPVwiWydhZnRlcicsICdib3RoJ10uaW5jbHVkZXMoc2NoZW1hLmJyZWFrKVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgQ29udGV4dE1peGluIGZyb20gJy4uL21peGlucy9Db250ZXh0TWl4aW4uanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc05lc3RlZCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvUGFuZScsIHtcbiAgbWl4aW5zOiBbQ29udGV4dE1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiB0aGlzLnRhYkNvbXBvbmVudFxuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRhYjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBwYWRkaW5nOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZ2VuZXJhdGVMYWJlbHM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBhY2N1bXVsYXRlZEJhc2lzOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcG9zaXRpb25zOiBbXVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG5lc3RlZCgpIHtcbiAgICAgIC8vIEZvciBgQ29udGV4dE1peGluYDpcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBjbGFzc2VzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tcGFuZS0tc2luZ2xlJzogdGhpcy5pc1NpbmdsZUNvbXBvbmVudCxcbiAgICAgICAgW2BkaXRvLXBhbmUtLXBhZGRpbmctJHt0aGlzLnBhZGRpbmd9YF06ICEhdGhpcy5wYWRkaW5nXG4gICAgICB9XG4gICAgfSxcblxuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnRhYiA/IHRoaXMgOiB0aGlzLiR0YWJDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRTY2hlbWFzKCkge1xuICAgICAgLy8gQ29tcHV0ZSBhIGNvbXBvbmVudHMgbGlzdCB3aGljaCBoYXMgdGhlIGRhdGFQYXRoIGJha2VkIGludG8gaXRzIGtleXNcbiAgICAgIC8vIGFuZCBhZGRzIHRoZSBrZXkgYXMgdGhlIG5hbWUgdG8gZWFjaCBjb21wb25lbnQsIHVzZWQgZm9yIGxhYmVscywgZXRjLlxuICAgICAgLy8gTk9URTogc2NoZW1hIGNhbiBiZSBudWxsIHdoaWxlIG11bHRpLWZvcm0gbGlzdHMgbG9hZCB0aGVpciBkYXRhLFxuICAgICAgLy8gYmVjYXVzZSBvbmx5IHRoZSBhdmFpbGFibGUgZGF0YSB3aWxsIGRldGVybWluZSB0aGUgdHlwZSBvZiBmb3JtLlxuICAgICAgLy8gV2hlbiBlZGl0aW5nIHByaW1pdGl2ZSB2YWx1ZXMgdGhyb3VnaCBhIGZvcm0sIGRvIG5vdCBhcHBlbmQgJ25hbWUnIHRvXG4gICAgICAvLyB0aGUgY29tcG9uZW50J3MgZGF0YVBhdGggc28gaXQgY2FuIGJlIG1hcHBlZCB0byBmcm9tIHZhbGlkYXRpb24gZXJyb3JzLlxuICAgICAgLy8gTk9URTogTm90IGFsbCBzY2hlbWFzIC8gY29tcG9uZW50cyBoYXZlIGEgc291cmNlU2NoZW1hLCBlLmcuIGRpYWxvZ3MuXG4gICAgICBjb25zdCB3cmFwUHJpbWl0aXZlcyA9IHRoaXMuc291cmNlU2NoZW1hPy53cmFwUHJpbWl0aXZlc1xuICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hPy5jb21wb25lbnRzIHx8IHt9KS5tYXAoXG4gICAgICAgIChbbmFtZSwgc2NoZW1hXSkgPT4ge1xuICAgICAgICAgIC8vIEFsd2F5cyBhZGQgbmFtZSB0byBjb21wb25lbnQgc2NoZW1hLlxuICAgICAgICAgIHNjaGVtYS5uYW1lID0gbmFtZVxuICAgICAgICAgIC8vIFNoYXJlIGRhdGFQYXRoIGFuZCBzdG9yZSB3aXRoIHBhcmVudCBpZiBub3QgbmVzdGVkOlxuICAgICAgICAgIGNvbnN0IG5lc3RlZCA9IGlzTmVzdGVkKHNjaGVtYSlcbiAgICAgICAgICBjb25zdCBuZXN0ZWREYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIG5hbWUpXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgIGRhdGFQYXRoOlxuICAgICAgICAgICAgICBuZXN0ZWQgJiYgIXdyYXBQcmltaXRpdmVzXG4gICAgICAgICAgICAgICAgPyBuZXN0ZWREYXRhUGF0aFxuICAgICAgICAgICAgICAgIDogdGhpcy5kYXRhUGF0aCxcbiAgICAgICAgICAgIG5lc3RlZERhdGFQYXRoLFxuICAgICAgICAgICAgbmVzdGVkLFxuICAgICAgICAgICAgc3RvcmU6IHRoaXMuZ2V0Q2hpbGRTdG9yZShuYW1lKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc1NpbmdsZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNpbmdsZSAmJiB0aGlzLmNvbXBvbmVudFNjaGVtYXMubGVuZ3RoID09PSAxXG4gICAgfSxcblxuICAgIHZlcnRpY2FsTGFiZWxzQnlJbmRpY2VzKCkge1xuICAgICAgY29uc3QgeyBwb3NpdGlvbnMgfSA9IHRoaXNcblxuICAgICAgY29uc3QgaXNMYXN0SW5Sb3cgPSBpbmRleCA9PiAoXG4gICAgICAgIHBvc2l0aW9uc1tpbmRleF0gJiYgKFxuICAgICAgICAgIGluZGV4ID09PSBwb3NpdGlvbnMubGVuZ3RoIC0gMSB8fFxuICAgICAgICAgIGZpbmROZXh0UG9zaXRpb24oaW5kZXgpLnRvcCA+IHBvc2l0aW9uc1tpbmRleF0udG9wXG4gICAgICAgIClcbiAgICAgIClcblxuICAgICAgY29uc3QgZmluZE5leHRQb3NpdGlvbiA9IGluZGV4ID0+IHtcbiAgICAgICAgZm9yIChsZXQgaSA9IGluZGV4ICsgMTsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChwb3NpdGlvbnNbaV0pIHJldHVybiBwb3NpdGlvbnNbaV1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMFxuICAgICAgfVxuXG4gICAgICBjb25zdCByb3dzID0gW11cbiAgICAgIGxldCByb3cgPSBbXVxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHBvc2l0aW9ucy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgcm93LnB1c2goaW5kZXgpXG4gICAgICAgIGlmIChpc0xhc3RJblJvdyhpbmRleCkpIHtcbiAgICAgICAgICByb3dzLnB1c2gocm93KVxuICAgICAgICAgIHJvdyA9IFtdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyb3cubGVuZ3RoID4gMCkge1xuICAgICAgICByb3dzLnB1c2gocm93KVxuICAgICAgfVxuXG4gICAgICBjb25zdCB2ZXJ0aWNhbExhYmVsc0J5SW5kaWNlcyA9IFtdXG5cbiAgICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICAgICAgbGV0IGhhc0xhYmVsc0luUm93ID0gZmFsc2VcbiAgICAgICAgZm9yIChjb25zdCBpbmRleCBvZiByb3cpIHtcbiAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMucG9zaXRpb25zW2luZGV4XVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHBvc2l0aW9uPy5oZWlnaHQgPiAyICYmIChcbiAgICAgICAgICAgICAgcG9zaXRpb24ubm9kZS5tYXRjaGVzKCc6aGFzKD4gLmRpdG8tbGFiZWwpJykgfHxcbiAgICAgICAgICAgICAgcG9zaXRpb24ubm9kZVxuICAgICAgICAgICAgICAgIC5jbG9zZXN0KCcuZGl0by1jb250YWluZXInKVxuICAgICAgICAgICAgICAgIC5tYXRjaGVzKCcuZGl0by1jb250YWluZXItLWxhYmVsLXZlcnRpY2FsJylcbiAgICAgICAgICAgIClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIFRPRE86IEhhbmRsZSBuZXN0ZWQgc2NoZW1hcywgZS5nLiAnc2VjdGlvbicgb3IgJ29iamVjdCcgYW5kXG4gICAgICAgICAgICAvLyBkZXRlY3QgbGFiZWxzIHRoZXJlIHRvby5cbiAgICAgICAgICAgIGhhc0xhYmVsc0luUm93ID0gdHJ1ZVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBpbmRleCBvZiByb3cpIHtcbiAgICAgICAgICB2ZXJ0aWNhbExhYmVsc0J5SW5kaWNlc1tpbmRleF0gPSBoYXNMYWJlbHNJblJvd1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2ZXJ0aWNhbExhYmVsc0J5SW5kaWNlc1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgICdjb21wb25lbnRTY2hlbWFzLmxlbmd0aCcobGVuZ3RoKSB7XG4gICAgICB0aGlzLnBvc2l0aW9ucy5sZW5ndGggPSBsZW5ndGhcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyUGFuZSh0aGlzLCBhZGQpXG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgaWYgKHRoaXMudGFiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyb3V0ZXIucHVzaCh7IGhhc2g6IGAjJHt0aGlzLnRhYn1gIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uUmVzaXplUGFuZSgpIHtcbiAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBjb250YWluZXIgb2YgdGhpcy4kcmVmcy5jb250YWluZXJzKSB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IGNvbnRhaW5lci4kZWxcbiAgICAgICAgICBjb25zdCBpbmRleCA9ICtub2RlLmRhdGFzZXQuaW5kZXhcbiAgICAgICAgICBjb25zdCBib3VuZHMgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICAgICAgY29uc3Qgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKG5vZGUpXG4gICAgICAgICAgY29uc3QgcGFkZGluZyA9IHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZylcbiAgICAgICAgICBjb25zdCBmb250U2l6ZSA9IHBhcnNlRmxvYXQoc3R5bGUuZm9udFNpemUpXG4gICAgICAgICAgY29uc3QgaGVpZ2h0ID0gYm91bmRzLmhlaWdodCAtIDIgKiBwYWRkaW5nXG4gICAgICAgICAgdGhpcy5wb3NpdGlvbnNbaW5kZXhdID1cbiAgICAgICAgICAgIGhlaWdodCA8PSAwXG4gICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgIHRvcDogYm91bmRzLnksXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCAvIGZvbnRTaXplLFxuICAgICAgICAgICAgICAgICAgbm9kZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgaXNJbkxhYmVsZWRSb3coaW5kZXgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudmVydGljYWxMYWJlbHNCeUluZGljZXNbaW5kZXhdXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tcGFuZSB7XG4gICRzZWxmOiAmO1xuICAkcm9vdC1wYWRkaW5nOiAkY29udGVudC1wYWRkaW5nIC0gJGZvcm0tc3BhY2luZy1oYWxmO1xuXG4gIC0tcGFuZS1wYWRkaW5nOiAwcHg7XG4gIC0tY29udGFpbmVyLXBhZGRpbmc6ICN7JGZvcm0tc3BhY2luZy1oYWxmfTtcblxuICBkaXNwbGF5OiBmbGV4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZsZXgtZmxvdzogcm93IHdyYXA7XG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICBhbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAvLyBSZW1vdmUgdGhlIHBhZGRpbmcgYWRkZWQgYnkgYC5kaXRvLWNvbnRhaW5lcmAgaW5zaWRlIGAuZGl0by1wYW5lYDpcbiAgbWFyZ2luOiAtJGZvcm0tc3BhY2luZy1oYWxmO1xuICBwYWRkaW5nOiB2YXIoLS1wYW5lLXBhZGRpbmcpO1xuICAvLyBVc2UgYGZsZXg6IDAlYCBmb3IgYWxsIGAuZGl0by1wYW5lYCBleGNlcHQgYC5kaXRvLXBhbmVfX21haW5gLFxuICAvLyBzbyB0aGF0IHRoZSBgLmRpdG8tYnV0dG9ucy1tYWluYCBjYW4gYmUgbW92ZWQgYWxsIHRoZSB3YXkgdG8gdGhlIGJvdHRvbS5cbiAgZmxleDogMCU7XG5cbiAgJl9fbWFpbiB7XG4gICAgZmxleDogMTAwJTtcbiAgfVxuXG4gICYtLXBhZGRpbmctcm9vdCB7XG4gICAgLy8gQSByb290LWxldmVsIHBhbmUgaW5zaWRlIGEgc2Nyb2xsIHZpZXcuIENsZWFyIG5lZ2F0aXZlIG1hcmdpbiBmcm9tIGFib3ZlLlxuICAgIG1hcmdpbjogMDtcbiAgICAvLyBNb3ZlIHRoZSBuZWdhdGl2ZSBtYXJnaW4gdXNlZCB0byByZW1vdmUgdGhlIHBhZGRpbmcgYWRkZWQgYnlcbiAgICAvLyBgLmRpdG8tY29udGFpbmVyYCBpbnNpZGUgYC5kaXRvLXBhbmVgIHRvIHRoZSBwYWRkaW5nOlxuICAgIC0tcGFuZS1wYWRkaW5nOiAjeyRyb290LXBhZGRpbmd9O1xuXG4gICAgJiN7JHNlbGZ9LS1zaW5nbGUge1xuICAgICAgLS1wYW5lLXBhZGRpbmc6ICN7JGNvbnRlbnQtcGFkZGluZ307XG4gICAgICAtLWNvbnRhaW5lci1wYWRkaW5nOiAwcHg7XG4gICAgfVxuXG4gICAgJjpoYXMoPiAuZGl0by1jb250YWluZXItLWxhYmVsLXZlcnRpY2FsOmZpcnN0LW9mLXR5cGUpIHtcbiAgICAgIC8vIFJlZHVjZSB0b3Agc3BhY2luZyB3aGVuIHRoZSBmaXJzdCByb3cgaGFzIGxhYmVscy5cbiAgICAgIG1hcmdpbi10b3A6IC0kZm9ybS1zcGFjaW5nLWhhbGY7XG4gICAgfVxuXG4gICAgLy8gRGlzcGxheSBhIHJ1bGVyIGJldHdlZW4gdGFiYmVkIGNvbXBvbmVudHMgYW5kIHRvd2FyZHMgdGhlIC5kaXRvLWJ1dHRvbnNcbiAgICAmX190YWIgKyAmX19tYWluIHtcbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIC8vIFVzZSBhIHBzZXVkbyBlbGVtZW50IHRvIGRpc3BsYXkgYSBydWxlciB3aXRoIHByb3BlciBtYXJnaW5zXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGJvcmRlci1ib3R0b206ICRib3JkZXItc3R5bGU7XG4gICAgICAgIC8vIFNoaWZ0IHJ1bGVyIHVwIGJ5ICRyb290LXBhZGRpbmcgdG8gZXhjbHVkZSByZW1vdmVkICRmb3JtLXNwYWNpbmctaGFsZlxuICAgICAgICBtYXJnaW46ICgtJHJvb3QtcGFkZGluZykgJGZvcm0tc3BhY2luZy1oYWxmICRyb290LXBhZGRpbmc7XG4gICAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmctaGFsZjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX19tYWluICsgLmRpdG8tYnV0dG9ucy1tYWluIHtcbiAgICAgIC8vIE5lZWRlZCBmb3JtcyB3aXRoIHN0aWNreSBtYWluIGJ1dHRvbnMuXG4gICAgICBtYXJnaW46ICRjb250ZW50LXBhZGRpbmc7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIH1cbiAgfVxuXG4gICYtLXBhZGRpbmctaW5saW5lZCB7XG4gICAgLS1wYW5lLXBhZGRpbmc6IDBweDtcbiAgfVxuXG4gICYtLXBhZGRpbmctbmVzdGVkIHtcbiAgICAtLXBhbmUtcGFkZGluZzogI3skZm9ybS1zcGFjaW5nfTtcblxuICAgICY6aGFzKD4gLmRpdG8tY29udGFpbmVyLS1sYWJlbC12ZXJ0aWNhbDpmaXJzdC1vZi10eXBlKSB7XG4gICAgICAvLyBSZWR1Y2UgdG9wIHNwYWNpbmcgd2hlbiB0aGUgZmlyc3Qgcm93IGhhcyBsYWJlbHMuXG4gICAgICBwYWRkaW5nLXRvcDogJGZvcm0tc3BhY2luZy1oYWxmO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWJyZWFrIHtcbiAgICAvLyBgLmRpdG8tYnJlYWtgIGlzIHJlbmRlcmVkIGFzIDxzcGFuPiBzbyB3ZSBjYW4gdXNlIHRoZVxuICAgIC8vIGAuZGl0by1jb250YWluZXI6Zmlyc3Qtb2YtdHlwZWAgc2VsZWN0b3IgdG8gbWF0Y2ggdGhlIGZpcnN0IGNvbnRhaW5lclxuICAgIC8vIGV2ZW4gaWYgaXQgaGFzIGEgYnJlYWsgYmVmb3JlIGl0LlxuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGZsZXg6IDEwMCU7XG4gICAgaGVpZ2h0OiAwO1xuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGcmFjdGlvbih2YWx1ZSkge1xuICBjb25zdCBtYXRjaCA9IChcbiAgICBpc1N0cmluZyh2YWx1ZSkgJiZcbiAgICB2YWx1ZS5tYXRjaCgvXlxccyooWystXT9cXGQrKVxccypcXC9cXHMqKFsrLV0/XFxkKylcXHMqJC8pXG4gIClcbiAgaWYgKG1hdGNoKSB7XG4gICAgY29uc3QgWywgZGl2aWRlbmQsIGRpdmlzb3JdID0gbWF0Y2hcbiAgICByZXR1cm4gcGFyc2VGbG9hdChkaXZpZGVuZCkgLyBwYXJzZUZsb2F0KGRpdmlzb3IpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpXG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1jb250YWluZXIoXG4gIHYtc2hvdz1cImNvbXBvbmVudFZpc2libGVcIlxuICA6Y2xhc3M9XCJjb250YWluZXJDbGFzc2VzXCJcbiAgOnN0eWxlPVwiY29udGFpbmVyU3R5bGVzXCJcbilcbiAgVGVsZXBvcnQoXG4gICAgdi1pZj1cImlzTW91bnRlZCAmJiBwYW5lbEVudHJpZXMubGVuZ3RoID4gMFwiXG4gICAgdG89XCIuZGl0by1zaWRlYmFyX190ZWxlcG9ydFwiXG4gIClcbiAgICBEaXRvUGFuZWxzKFxuICAgICAgOnBhbmVscz1cInBhbmVsRW50cmllc1wiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4gIERpdG9MYWJlbChcbiAgICB2LWlmPVwiaGFzTGFiZWxcIlxuICAgIDpjbGFzcz1cImxhYmVsQ2xhc3Nlc1wiXG4gICAgOmxhYmVsPVwibGFiZWxcIlxuICAgIDpkYXRhUGF0aD1cImxhYmVsRGF0YVBhdGhcIlxuICAgIDppbmZvPVwiaW5mb1wiXG4gIClcbiAgY29tcG9uZW50LmRpdG8tY29tcG9uZW50KFxuICAgIHYtaWY9XCIhKGhhc0xhYmVsICYmIGlzTGFiZWwpXCJcbiAgICA6aXM9XCJ0eXBlQ29tcG9uZW50XCJcbiAgICByZWY9XCJjb21wb25lbnRcIlxuICAgIDpjbGFzcz1cImNvbXBvbmVudENsYXNzZXNcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDp3aWR0aD1cIndpZHRoXCJcbiAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgOnNpbmdsZT1cInNpbmdsZVwiXG4gICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgOmRpc2FibGVkPVwiY29tcG9uZW50RGlzYWJsZWRcIlxuICAgIDphY2N1bXVsYXRlZEJhc2lzPVwiY29tYmluZWRCYXNpc1wiXG4gICAgQGVycm9ycz1cIm9uRXJyb3JzXCJcbiAgKVxuICBEaXRvRXJyb3JzKDplcnJvcnM9XCJlcnJvcnNcIilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc1N0cmluZywgaXNOdW1iZXIgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBWYWx1ZU1peGluIGZyb20gJy4uL21peGlucy9WYWx1ZU1peGluLmpzJ1xuaW1wb3J0IENvbnRleHRNaXhpbiBmcm9tICcuLi9taXhpbnMvQ29udGV4dE1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7XG4gIGdldEFsbFBhbmVsRW50cmllcyxcbiAgZ2V0VHlwZUNvbXBvbmVudCxcbiAgaGFzTGFiZWwsXG4gIG9taXRTcGFjaW5nXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IHBhcnNlRnJhY3Rpb24gfSBmcm9tICcuLi91dGlscy9tYXRoLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9Db250YWluZXInLCB7XG4gIG1peGluczogW1ZhbHVlTWl4aW4sIENvbnRleHRNaXhpbl0sXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBnZW5lcmF0ZUxhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHZlcnRpY2FsTGFiZWxzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgYWNjdW11bGF0ZWRCYXNpczogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yczogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubmFtZVxuICAgIH0sXG5cbiAgICB0eXBlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLnR5cGVcbiAgICB9LFxuXG4gICAgdHlwZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiBnZXRUeXBlQ29tcG9uZW50KHRoaXMudHlwZSlcbiAgICB9LFxuXG4gICAgaXNMYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdsYWJlbCdcbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICByZXR1cm4gaGFzTGFiZWwodGhpcy5zY2hlbWEsIHRoaXMuZ2VuZXJhdGVMYWJlbHMpXG4gICAgfSxcblxuICAgIGxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzTGFiZWwgPyB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKSA6IG51bGxcbiAgICB9LFxuXG4gICAgbGFiZWxEYXRhUGF0aCgpIHtcbiAgICAgIC8vIFVubmVzdGVkIHR5cGVzIGRvbid0IGhhdmUgYSBkYXRhUGF0aCBmb3IgdGhlbXNlbHZlcywgZG9uJ3QgdXNlIGl0OlxuICAgICAgcmV0dXJuIHRoaXMubmVzdGVkID8gdGhpcy5kYXRhUGF0aCA6IG51bGxcbiAgICB9LFxuXG4gICAgaW5mbzogZ2V0U2NoZW1hQWNjZXNzb3IoJ2luZm8nLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSksXG5cbiAgICB3aWR0aDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3dpZHRoJywge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXSxcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGVDb21wb25lbnQ/LmRlZmF1bHRXaWR0aFxuICAgICAgfSxcbiAgICAgIGdldCh3aWR0aCkge1xuICAgICAgICAvLyBVc2UgMTAwJSA9PSAxLjAgYXMgZGVmYXVsdCB3aWR0aCB3aGVuIG5vdGhpbmcgaXMgc2V0OlxuICAgICAgICByZXR1cm4gd2lkdGggPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gMS4wXG4gICAgICAgICAgOiBpc1N0cmluZyh3aWR0aClcbiAgICAgICAgICAgID8gd2lkdGgubWF0Y2goL15cXHMqWzw+XT9cXHMqKC4qKSQvKVsxXSAvLyBSZW1vdmUgd2lkdGggb3BlcmF0b3JcbiAgICAgICAgICAgIDogd2lkdGhcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIHdpZHRoT3BlcmF0b3I6IGdldFNjaGVtYUFjY2Vzc29yKCd3aWR0aCcsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGdldCh3aWR0aCkge1xuICAgICAgICByZXR1cm4gaXNTdHJpbmcod2lkdGgpXG4gICAgICAgICAgPyB3aWR0aC5tYXRjaCgvXlxccyooWzw+XT8pLylbMV0gfHwgbnVsbFxuICAgICAgICAgIDogbnVsbFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29tcG9uZW50VmlzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Zpc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZUNvbXBvbmVudD8uZGVmYXVsdFZpc2libGVcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbXBvbmVudERpc2FibGVkOiBnZXRTY2hlbWFBY2Nlc3NvcignZGlzYWJsZWQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZGlzYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuIGRpc2FibGVkIHx8IHRoaXMuZGlzYWJsZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGZsZXhHcm93KCkge1xuICAgICAgLy8gSW50ZXJwcmV0ICc+NTAlJyBhcyAnNTAlLCBmbGV4LWdyb3c6IDFgXG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLndpZHRoT3BlcmF0b3IgPT09ICc+JyB8fFxuICAgICAgICB0aGlzLndpZHRoID09PSAnZmlsbCdcbiAgICAgIClcbiAgICB9LFxuXG4gICAgZmxleFNocmluaygpIHtcbiAgICAgIC8vIEludGVycHJldCAnPDUwJScgYXMgJzUwJSwgZmxleC1zaHJpbms6IDFgXG4gICAgICByZXR1cm4gdGhpcy53aWR0aE9wZXJhdG9yID09PSAnPCdcbiAgICB9LFxuXG4gICAgZmxleEJhc2lzKCkge1xuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLndpZHRoXG4gICAgICAvLyAnYXV0bycgPSBubyBmaXR0aW5nOlxuICAgICAgcmV0dXJuIFtudWxsLCAnYXV0bycsICdmaWxsJ10uaW5jbHVkZXMod2lkdGgpXG4gICAgICAgID8gJ2F1dG8nXG4gICAgICAgIDogLyUkLy50ZXN0KHdpZHRoKVxuICAgICAgICAgID8gcGFyc2VGbG9hdCh3aWR0aCkgLyAxMDAgLy8gcGVyY2VudGFnZSAtPiBmcmFjdGlvblxuICAgICAgICAgIDogL1thLXpdLy50ZXN0KHdpZHRoKVxuICAgICAgICAgICAgPyB3aWR0aCAvLyBuYXRpdmUgdW5pdHNcbiAgICAgICAgICAgIDogcGFyc2VGcmFjdGlvbih3aWR0aCkgLy8gZnJhY3Rpb25cbiAgICB9LFxuXG4gICAgY29tYmluZWRCYXNpcygpIHtcbiAgICAgIGNvbnN0IHsgYWNjdW11bGF0ZWRCYXNpcywgZmxleEJhc2lzIH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNOdW1iZXIoYWNjdW11bGF0ZWRCYXNpcykgJiYgaXNOdW1iZXIoZmxleEJhc2lzKVxuICAgICAgICA/IGFjY3VtdWxhdGVkQmFzaXMgKiBmbGV4QmFzaXNcbiAgICAgICAgOiBudWxsXG4gICAgfSxcblxuICAgIGNvbnRhaW5lckNsYXNzZXMoKSB7XG4gICAgICBjb25zdCB7IGNsYXNzOiBjbGFzc2VzIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgY29uc3QgcHJlZml4ID0gJ2RpdG8tY29udGFpbmVyJ1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2Ake3ByZWZpeH0tLXNpbmdsZWBdOiB0aGlzLnNpbmdsZSxcbiAgICAgICAgJ2RpdG8tZGlzYWJsZWQnOiB0aGlzLmNvbXBvbmVudERpc2FibGVkLFxuICAgICAgICAnZGl0by1oYXMtZXJyb3JzJzogISF0aGlzLmVycm9ycyxcbiAgICAgICAgW2Ake3ByZWZpeH0tLWxhYmVsLXZlcnRpY2FsYF06IHRoaXMudmVydGljYWxMYWJlbHMsXG4gICAgICAgIFtgJHtwcmVmaXh9LS1vbWl0LXNwYWNpbmdgXTogb21pdFNwYWNpbmcodGhpcy5zY2hlbWEpLFxuICAgICAgICAuLi4oaXNTdHJpbmcoY2xhc3NlcykgPyB7IFtjbGFzc2VzXTogdHJ1ZSB9IDogY2xhc3NlcylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY29udGFpbmVyU3R5bGVzKCkge1xuICAgICAgY29uc3QgeyBmbGV4QmFzaXMsIGNvbWJpbmVkQmFzaXMgfSA9IHRoaXNcbiAgICAgIHJldHVybiB7XG4gICAgICAgICctLWdyb3cnOiB0aGlzLmZsZXhHcm93ID8gMSA6IDAsXG4gICAgICAgICctLXNocmluayc6IHRoaXMuZmxleFNocmluayA/IDEgOiAwLFxuICAgICAgICAnLS1iYXNpcyc6IGlzTnVtYmVyKGZsZXhCYXNpcykgPyBgJHtmbGV4QmFzaXMgKiAxMDB9JWAgOiBmbGV4QmFzaXMsXG4gICAgICAgICctLWJhc2lzLW1vYmlsZSc6XG4gICAgICAgICAgaXNOdW1iZXIoY29tYmluZWRCYXNpcykgJiYgY29tYmluZWRCYXNpcyA8PSAwLjI1XG4gICAgICAgICAgICA/IGAke2ZsZXhCYXNpcyAqIDIwMH0lYFxuICAgICAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNvbXBvbmVudENsYXNzZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1zaW5nbGUnOiB0aGlzLnNpbmdsZSxcbiAgICAgICAgLi4udGhpcy5sYXlvdXRDbGFzc2VzXG4gICAgICB9XG4gICAgfSxcblxuICAgIGxheW91dENsYXNzZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by13aWR0aC1maWxsJzogdGhpcy53aWR0aCA9PT0gJ2ZpbGwnIHx8IHRoaXMuZmxleEJhc2lzICE9PSAnYXV0bycsXG4gICAgICAgICdkaXRvLXdpZHRoLWdyb3cnOiB0aGlzLmZsZXhHcm93LFxuICAgICAgICAnZGl0by13aWR0aC1zaHJpbmsnOiB0aGlzLmZsZXhTaHJpbmtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbGFiZWxDbGFzc2VzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tbGFiZWwtLXZpc2libGUnOiB0aGlzLmlzTGFiZWwsXG4gICAgICAgIC4uLnRoaXMubGF5b3V0Q2xhc3Nlc1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBwYW5lbEVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QWxsUGFuZWxFbnRyaWVzKFxuICAgICAgICB0aGlzLmFwaSxcbiAgICAgICAgdGhpcy5zY2hlbWEsXG4gICAgICAgIHRoaXMuZGF0YVBhdGgsXG4gICAgICAgIHRoaXMuJHJlZnMuY29tcG9uZW50LFxuICAgICAgICB0aGlzLnRhYkNvbXBvbmVudFxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25FcnJvcnMoZXJyb3JzKSB7XG4gICAgICB0aGlzLmVycm9ycyA9IGVycm9yc1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWNvbnRhaW5lciB7XG4gIC0tZ3JvdzogMDtcbiAgLS1zaHJpbms6IDE7XG4gIC0tYmFzaXM6IGF1dG87XG5cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4OiB2YXIoLS1ncm93KSB2YXIoLS1zaHJpbmspIHZhcigtLWJhc2lzKTtcbiAgZmxleC1mbG93OiBjb2x1bW47XG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAvLyBUbyBwcmV2ZW50IGxpc3QgdGFibGVzIGZyb20gYmxvd2luZyBvdXQgb2YgdGhlaXIgZmxleCBib3ggY29udGFpbmVycy5cbiAgbWF4LXdpZHRoOiAxMDAlO1xuICAvLyBDYW5ub3QgdXNlIG1hcmdpbiBoZXJlIGFzIGl0IG5lZWRzIHRvIGJlIHBhcnQgb2YgYm94LXNpemluZyBmb3JcbiAgLy8gcGVyY2VudGFnZXMgaW4gZmxleC1iYXNpcyB0byB3b3JrLlxuICBwYWRkaW5nOiB2YXIoLS1jb250YWluZXItcGFkZGluZyk7XG5cbiAgPiAuZGl0by1sYWJlbDpub3QoLmRpdG8tbGFiZWwtLXZpc2libGUpOm9ubHktY2hpbGQge1xuICAgIC8vIFVzZWQgZS5nLiB3aGVuIHNvdXJjZXMgaGlkZSB0aGVtc2VsdmVzIGR1ZSB0byBtYXhEZXB0aCwgYnV0IHRoZSBsYWJlbFxuICAgIC8vIGlzIHJlbmRlcmVkIGFib3ZlIGl0LlxuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICAmOmVtcHR5IHtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG5cbiAgLmRpdG8tcGFuZSA+ICYge1xuICAgIC5kaXRvLXBhZ2UtLXdpZHRoLTgwICYge1xuICAgICAgZmxleC1ncm93OiAxO1xuICAgICAgZmxleC1iYXNpczogdmFyKC0tYmFzaXMtbW9iaWxlLCB2YXIoLS1iYXNpcykpO1xuICAgICAgLy8gREVCVUc6IGJhY2tncm91bmQ6IHllbGxvdztcbiAgICB9XG5cbiAgICAuZGl0by1wYWdlLS13aWR0aC02MCAmIHtcbiAgICAgIGZsZXgtYmFzaXM6IGNhbGMoMiAqIHZhcigtLWJhc2lzKSk7XG4gICAgICAvLyBERUJVRzogYmFja2dyb3VuZDogb3JhbmdlO1xuICAgIH1cblxuICAgIC5kaXRvLXNpZGViYXItLXdpZHRoLTk5ICYge1xuICAgICAgZmxleC1ncm93OiAxO1xuICAgICAgLy8gREVCVUc6IGJhY2tncm91bmQ6IHllbGxvdztcbiAgICB9XG5cbiAgICAuZGl0by1zaWRlYmFyLS13aWR0aC02MCAmIHtcbiAgICAgIGZsZXgtYmFzaXM6IGNhbGMoMiAqIHZhcigtLWJhc2lzKSk7XG4gICAgICAvLyBERUJVRzogYmFja2dyb3VuZDogb3JhbmdlO1xuICAgIH1cbiAgfVxuXG4gICYtLXNpbmdsZSB7XG4gICAgaGVpZ2h0OiAxMDAlOyAvLyBTbyB0aGF0IGxpc3QgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IGF0IHRoZSBib3R0b207XG4gIH1cblxuICAmLS1sYWJlbC12ZXJ0aWNhbCB7XG4gICAgLy8gRm9yIHBsYWluIGNvbXBvbmVudHMgd2l0aG91dCBsYWJlbHMgaW4gcm93cyB3aXRoIG90aGVyIGNvbXBvbmVudHMgdGhhdFxuICAgIC8vIGhhdmUgbGFiZWxzLCBhZGQgc29tZSBzcGFjaW5nIHRvIHRoZSB0b3AgdG8gYWxpZ24gd2l0aCB0aGUgb3RoZXJcbiAgICAvLyBjb21wb25lbnRzIChlLmcuICBidXR0b25zKTpcbiAgICA+IC5kaXRvLWNvbXBvbmVudDpmaXJzdC1jaGlsZDpub3QoLmRpdG8tc2VjdGlvbiwgLmRpdG8tbGlzdCwgLmRpdG8tb2JqZWN0KSB7XG4gICAgICBtYXJnaW4tdG9wOiAkaW5wdXQtaGVpZ2h0O1xuICAgIH1cbiAgfVxuXG4gICYtLW9taXQtc3BhY2luZyB7XG4gICAgcGFkZGluZzogMDtcblxuICAgID4gLmRpdG8tbGFiZWwge1xuICAgICAgbWFyZ2luOiAkZm9ybS1zcGFjaW5nLWhhbGYgJGZvcm0tc3BhY2luZy1oYWxmIDA7XG4gICAgfVxuICB9XG59XG5cbi8vIE5PVEU6IFRoaXMgaXMgbm90IG5lc3RlZCBpbnNpZGUgYC5kaXRvLWNvbnRhaW5lcmAgc28gdGhhdCBvdGhlclxuLy8gdHlwZSBjb21wb25lbnRzIGNhbiBvdmVycmlkZSBgLmRpdG8td2lkdGgtZmlsbGAgY2xhc3MgKGZpbHRlciBwcmVjZWRlbmNlKS5cbi5kaXRvLWNvbXBvbmVudCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAmLmRpdG8td2lkdGgtZmlsbCB7XG4gICAgd2lkdGg6IDEwMCU7XG5cbiAgICAmLmRpdG8tY2hlY2tib3gsXG4gICAgJi5kaXRvLXJhZGlvLWJ1dHRvbiB7XG4gICAgICAvLyBXZWJLaXQgZG9lc24ndCBsaWtlIGNoYW5nZWQgd2lkdGggb24gY2hlY2tib3hlcyBhbmQgcmFkaW9zLCBvdmVycmlkZTpcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHdpZHRoOiBhdXRvO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by10YWJzXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPVwiKHRhYlNjaGVtYSwga2V5KSBpbiB0YWJzXCJcbiAgKVxuICAgIGEuZGl0by1saW5rKFxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlclNjaGVtYSh0YWJTY2hlbWEpXCJcbiAgICAgIDprZXk9XCJrZXlcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBtb2RlbFZhbHVlID09PSBrZXkgfVwiXG4gICAgICBAY2xpY2s9XCIkZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCBrZXkpXCJcbiAgICApIHt7IGdldExhYmVsKHRhYlNjaGVtYSwga2V5KSB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1RhYnMnLCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJ10sXG4gIHByb3BzOiB7XG4gICAgdGFiczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AdXNlICdzYXNzOmNvbG9yJztcbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXRhYnMge1xuICBkaXNwbGF5OiBmbGV4O1xuXG4gIC5kaXRvLWxpbmsge1xuICAgIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcblxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICAgIH1cblxuICAgIC8vIFdoZW4gaW4gbWFpbiBoZWFkZXI6XG4gICAgLmRpdG8taGVhZGVyICYge1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0O1xuICAgICAgcGFkZGluZzogJHRhYi1wYWRkaW5nLXZlciAkdGFiLXBhZGRpbmctaG9yO1xuICAgICAgbWFyZ2luLWxlZnQ6ICR0YWItbWFyZ2luO1xuICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJHRhYi1yYWRpdXM7XG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJHRhYi1yYWRpdXM7XG5cbiAgICAgICY6YWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXN0O1xuICAgICAgfVxuXG4gICAgICAmLmRpdG8tYWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXN0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFdoZW4gaW5zaWRlIGEgaW5saW5lIHNjaGVtYTpcbiAgICAuZGl0by1zY2hlbWEtaW5saW5lZCAmLFxuICAgIC5kaXRvLWxhYmVsICYge1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXI7XG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcbiAgICAgIG1hcmdpbi1sZWZ0OiAtJGJvcmRlci13aWR0aDtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cbiAgICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAkdGFiLXJhZGl1cztcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogJHRhYi1yYWRpdXM7XG4gICAgICB9XG5cbiAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkdGFiLXJhZGl1cztcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICR0YWItcmFkaXVzO1xuICAgICAgfVxuXG4gICAgICAmOmFjdGl2ZSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVyO1xuICAgICAgfVxuXG4gICAgICAmLmRpdG8tYWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiBjb2xvci5hZGp1c3QoJGNvbG9yLWFjdGl2ZSwgJGxpZ2h0bmVzczogLTEwJSk7XG4gICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG4gICAgICAgIHotaW5kZXg6IDE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tc2NoZW1hICYge1xuICAgIC8vIFB1c2ggY2xpcGJvYXJkIHRvIHRoZSByaWdodCBpbiB0aGUgZmxleCBsYXlvdXQsIHNlZTpcbiAgICAvLyBodHRwczovL2NvZGVwZW4uaW8vdGhvbGV4L3Blbi9odmVCeC9cbiAgICBtYXJnaW4tbGVmdDogYXV0bztcblxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi8vLSBPbmx5IHNob3cgcGFuZWxzIGluIHRhYnMgd2hlbiB0aGUgdGFicyBhcmUgYWxzbyB2aXNpYmxlLlxuY29tcG9uZW50LmRpdG8tcGFuZWwoXG4gIHYtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEocGFuZWxTY2hlbWEpXCJcbiAgdi1zaG93PVwidmlzaWJsZSAmJiAoIXBhbmVsVGFiQ29tcG9uZW50IHx8IHBhbmVsVGFiQ29tcG9uZW50LnZpc2libGUpXCJcbiAgOmlzPVwicGFuZWxUYWdcIlxuICBAc3VibWl0LnByZXZlbnRcbilcbiAgRGl0b1NjaGVtYS5kaXRvLXBhbmVsX19zY2hlbWEoXG4gICAgOnNjaGVtYT1cInBhbmVsU2NoZW1hXCJcbiAgICA6ZGF0YVNjaGVtYT1cInBhbmVsRGF0YVNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIHBhZGRpbmc9XCJuZXN0ZWRcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6aGFzT3duRGF0YT1cImhhc093bkRhdGFcIlxuICAgIGdlbmVyYXRlTGFiZWxzXG4gIClcbiAgICB0ZW1wbGF0ZSgjYmVmb3JlKVxuICAgICAgaDIuZGl0by1wYW5lbF9faGVhZGVyKDpjbGFzcz1cInsgJ2RpdG8tcGFuZWxfX2hlYWRlci0tc3RpY2t5Jzogc3RpY2t5IH1cIilcbiAgICAgICAgc3BhbiB7eyBnZXRMYWJlbChzY2hlbWEpIH19XG4gICAgICAgIERpdG9CdXR0b25zLmRpdG8tYnV0dG9ucy1zbWFsbChcbiAgICAgICAgICA6YnV0dG9ucz1cInBhbmVsQnV0dG9uU2NoZW1hc1wiXG4gICAgICAgICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgICAgICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgKVxuICAgIHRlbXBsYXRlKCNidXR0b25zKVxuICAgICAgRGl0b0J1dHRvbnMoXG4gICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBDb250ZXh0TWl4aW4gZnJvbSAnLi4vbWl4aW5zL0NvbnRleHRNaXhpbi5qcydcbmltcG9ydCBWYWxpZGF0b3JNaXhpbiBmcm9tICcuLi9taXhpbnMvVmFsaWRhdG9yTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvUGFuZWwnLCB7XG4gIG1peGluczogW0NvbnRleHRNaXhpbiwgVmFsaWRhdG9yTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRwYW5lbENvbXBvbmVudDogKCkgPT4gdGhpcyxcbiAgICAgICR0YWJDb21wb25lbnQ6ICgpID0+IHRoaXMucGFuZWxUYWJDb21wb25lbnRcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYW5lbFRhYkNvbXBvbmVudDogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG93bkRhdGE6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBuZXN0ZWQoKSB7XG4gICAgICAvLyBGb3IgYENvbnRleHRNaXhpbmA6XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0sXG5cbiAgICBwYW5lbENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhbmVsVGFiQ29tcG9uZW50XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLnNjaGVtYS5idXR0b25zKVxuICAgIH0sXG5cbiAgICBwYW5lbEJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLnNjaGVtYS5wYW5lbEJ1dHRvbnMpXG4gICAgfSxcblxuICAgIGhhc093bkRhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLm93bkRhdGFcbiAgICB9LFxuXG4gICAgcGFuZWxEYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMub3duRGF0YSB8fCB0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgcGFuZWxTY2hlbWEoKSB7XG4gICAgICBpZiAodGhpcy5oYXNPd25EYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjaGVtYVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVtb3ZlIGBkYXRhYCBmcm9tIHRoZSBzY2hlbWEsIHNvIHRoYXQgRGl0b1NjaGVtYSBpc24ndCB1c2luZyBpdCB0b1xuICAgICAgICAvLyBwcm9kdWNlIGl0cyBvd24gZGF0YS4gU2VlICRmaWx0ZXJzIHBhbmVsIGZvciBtb3JlIGRldGFpbHMgb24gZGF0YS5cbiAgICAgICAgY29uc3QgeyBkYXRhLCAuLi5zY2hlbWEgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIHJldHVybiBzY2hlbWFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcGFuZWxUYWcoKSB7XG4gICAgICAvLyBQYW5lbHMgdGhhdCBwcm92aWRlIHRoZWlyIG93biBkYXRhIG5lZWQgdGhlaXIgb3duIGZvcm0uXG4gICAgICByZXR1cm4gdGhpcy5oYXNPd25EYXRhID8gJ2Zvcm0nIDogJ2RpdidcbiAgICB9LFxuXG4gICAgcGFuZWxEYXRhU2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzT3duRGF0YSA/IHRoaXMuc2NoZW1hIDogdGhpcy5zY2hlbWFDb21wb25lbnQuc2NoZW1hXG4gICAgfSxcblxuICAgIHBhbmVsRGF0YVBhdGgoKSB7XG4gICAgICAvLyBJZiB0aGUgcGFuZWwgcHJvdmlkZXMgaXRzIG93biBkYXRhLCB0aGVuIGl0IG5lZWRzIHRvIHByZWZpeCBhbGxcbiAgICAgIC8vIGNvbXBvbmVudHMgd2l0aCBpdHMgZGF0YS1wYXRoLCBidXQgaWYgaXQgc2hhcmVzIGRhdGEgd2l0aCB0aGUgc2NoZW1hXG4gICAgICAvLyBjb21wb25lbnQsIHRoZW4gaXQgc2hvdWxkIHNoYXJlIHRoZSBkYXRhLXBhdGggbmFtZSBzcGFjZSB0b28uXG4gICAgICByZXR1cm4gdGhpcy5oYXNPd25EYXRhID8gdGhpcy5kYXRhUGF0aCA6IHRoaXMuc2NoZW1hQ29tcG9uZW50LmRhdGFQYXRoXG4gICAgfSxcblxuICAgIHZpc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCd2aXNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KSxcblxuICAgIHN0aWNreTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3N0aWNreScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICAgIC8vIE5PVEU6IFRoaXMgaXMgbm90IHRoZSBzYW1lIGFzIGBzY2hlbWEuZGF0YWAgaGFuZGxpbmcgaW4gRGl0b1NjaGVtYSxcbiAgICAvLyB3aGVyZSB0aGUgZGF0YSBpcyBhZGRlZCB0byB0aGUgYWN0dWFsIGNvbXBvbmVudC5cbiAgICBjb25zdCB7IGRhdGEgfSA9IHRoaXMuc2NoZW1hXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIHRoaXMub3duRGF0YSA9IGlzRnVuY3Rpb24oZGF0YSlcbiAgICAgICAgPyBkYXRhKHRoaXMuY29udGV4dClcbiAgICAgICAgOiBkYXRhXG4gICAgfVxuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gUmVnaXN0ZXIgdGhlIHBhbmVscyBzbyB0aGF0IG90aGVyIGNvbXBvbmVudHMgY2FuIGZpbmQgdGhlbSBieSB0aGVpclxuICAgICAgLy8gZGF0YS1wYXRoLCBlLmcuIGluIFR5cGVMaXN0Lm9uRmlsdGVyRXJyb3JzKClcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50Ll9yZWdpc3RlclBhbmVsKHRoaXMsIGFkZClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1wYW5lbCB7XG4gICY6bm90KDpsYXN0LWNoaWxkKSB7XG4gICAgbWFyZ2luLWJvdHRvbTogJGNvbnRlbnQtcGFkZGluZztcbiAgfVxuXG4gICZfX2hlYWRlciB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmc7XG4gICAgYmFja2dyb3VuZDogJGJ1dHRvbi1jb2xvcjtcbiAgICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuXG4gICAgJi0tc3RpY2t5IHtcbiAgICAgICRtYXJnaW46ICRpbnB1dC1oZWlnaHQtZmFjdG9yICogJGxpbmUtaGVpZ2h0ICogJGZvbnQtc2l6ZS1zbWFsbCArXG4gICAgICAgICRmb3JtLXNwYWNpbmc7XG5cbiAgICAgIHBvc2l0aW9uOiBzdGlja3k7XG4gICAgICB0b3A6ICRjb250ZW50LXBhZGRpbmc7XG4gICAgICBtYXJnaW4tYm90dG9tOiAkbWFyZ2luO1xuICAgICAgei1pbmRleDogMTtcblxuICAgICAgJiArICoge1xuICAgICAgICBtYXJnaW4tdG9wOiAtJG1hcmdpbjtcbiAgICAgIH1cblxuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmQ7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICBoZWlnaHQ6ICRjb250ZW50LXBhZGRpbmc7XG4gICAgICAgIHRvcDogLSRjb250ZW50LXBhZGRpbmc7XG4gICAgICAgIG1hcmdpbjogLSRib3JkZXItd2lkdGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLmRpdG8tYnV0dG9ucyB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICByaWdodDogJGlucHV0LXBhZGRpbmctdmVyO1xuICAgICAgdG9wOiA1MCU7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgfVxuICB9XG5cbiAgJl9fc2NoZW1hIHtcbiAgICBmb250LXNpemU6ICRmb250LXNpemUtc21hbGw7XG4gICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZDtcbiAgICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gICAgYm9yZGVyLXRvcDogMDtcbiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG5cbiAgICA+IC5kaXRvLXNjaGVtYS1jb250ZW50IHtcbiAgICAgIC5kaXRvLW9iamVjdCB7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgIH1cblxuICAgICAgPiAuZGl0by1idXR0b25zIHtcbiAgICAgICAgLS1idXR0b24tbWFyZ2luOiAjeyRmb3JtLXNwYWNpbmd9O1xuXG4gICAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmc7XG5cbiAgICAgICAgLmRpdG8tY29udGFpbmVyIHtcbiAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLmRpdG8tbGFiZWwge1xuICAgICAgbGFiZWwge1xuICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1wYW5lbHMoXG4gIHYtaWY9XCJwYW5lbHMubGVuZ3RoID4gMFwiXG4pXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPVwieyBzY2hlbWEsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQgfSBpbiBwYW5lbHNcIlxuICApXG4gICAgRGl0b1BhbmVsKFxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlclNjaGVtYShzY2hlbWEpXCJcbiAgICAgIDprZXk9XCJnZXRQYW5lbEtleShkYXRhUGF0aCwgdGFiQ29tcG9uZW50KVwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShzY2hlbWEubmFtZSlcIlxuICAgICAgOmRpc2FibGVkPVwic2NoZW1hLmRpc2FibGVkID8/IGRpc2FibGVkXCJcbiAgICAgIDpwYW5lbFRhYkNvbXBvbmVudD1cInRhYkNvbXBvbmVudFwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgQ29udGV4dE1peGluIGZyb20gJy4uL21peGlucy9Db250ZXh0TWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1BhbmVscycsIHtcbiAgbWl4aW5zOiBbQ29udGV4dE1peGluXSxcblxuICBwcm9wczoge1xuICAgIHBhbmVsczogeyB0eXBlOiBBcnJheSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBuZXN0ZWQoKSB7XG4gICAgICAvLyBGb3IgYENvbnRleHRNaXhpbmA6XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFBhbmVsS2V5KGRhdGFQYXRoLCB0YWJDb21wb25lbnQpIHtcbiAgICAgIC8vIEFsbG93IHNlcGFyYXRlIHRhYnMgdG8gdXNlIHBhbmVscyBvZiB0aGUgc2FtZSBuYW1lLCBieVxuICAgICAgLy8gcHJlZml4aW5nIHRoZWlyIGtleSB3aXRoIHRoZSB0YWIgbmFtZS5cbiAgICAgIHJldHVybiB0YWJDb21wb25lbnQgPyBgJHt0YWJDb21wb25lbnQudGFifV8ke2RhdGFQYXRofWAgOiBkYXRhUGF0aFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXBhbmVscyB7XG4gIG1hcmdpbjogJGNvbnRlbnQtcGFkZGluZztcbiAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmc7XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWJ1dHRvbnMoXG4gIHYtaWY9XCJidXR0b25TY2hlbWFzIHx8IGhhc1Nsb3RDb250ZW50KCRzbG90cy5kZWZhdWx0KVwiXG4pXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPVwiKGJ1dHRvblNjaGVtYSwgYnV0dG9uRGF0YVBhdGgpIGluIGJ1dHRvblNjaGVtYXNcIlxuICApXG4gICAgRGl0b0NvbnRhaW5lcihcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEoYnV0dG9uU2NoZW1hKVwiXG4gICAgICA6a2V5PVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgICAgOnNjaGVtYT1cImJ1dHRvblNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJidXR0b25EYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShidXR0b25TY2hlbWEubmFtZSlcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiAgdGVtcGxhdGUoXG4gICAgdi1mb3I9XCJ2bm9kZSBvZiAkc2xvdHMuZGVmYXVsdD8uKClcIlxuICApXG4gICAgLy8tIFJlbmRlciBlYWNoIG5vZGUgaW4gdGhlIGRlZmF1bHQgc2xvdCB0aHJvdWdoIGBkaXRvLXZub2RlYCxcbiAgICAvLy0gc28gaXQgY2FuIGJlIHdyYXBwZWQgaW4gYSBgLmRpdG8tY29udGFpbmVyYCBjbGFzcy5cbiAgICAuZGl0by1jb250YWluZXIoXG4gICAgICB2LWlmPVwiaGFzVk5vZGVDb250ZW50KHZub2RlKVwiXG4gICAgKVxuICAgICAgRGl0b1Zub2RlKDp2bm9kZT1cInZub2RlXCIpXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBDb250ZXh0TWl4aW4gZnJvbSAnLi4vbWl4aW5zL0NvbnRleHRNaXhpbi5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGhhc1Nsb3RDb250ZW50LCBoYXNWTm9kZUNvbnRlbnQgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvQnV0dG9ucycsIHtcbiAgbWl4aW5zOiBbQ29udGV4dE1peGluXSxcblxuICBwcm92aWRlOiB7XG4gICAgJHRhYkNvbXBvbmVudDogKCkgPT4gbnVsbFxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIC8vIENvbXB1dGUgYSBidXR0b25zIGxpc3Qgd2hpY2ggaGFzIHRoZSBkYXRhUGF0aCBiYWtlZCBpbnRvIGl0cyBrZXlzLlxuICAgICAgY29uc3QgeyBkYXRhUGF0aCwgYnV0dG9ucyB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGJ1dHRvbnNcbiAgICAgICAgPyBPYmplY3QudmFsdWVzKGJ1dHRvbnMpLnJlZHVjZSgoc2NoZW1hcywgYnV0dG9uKSA9PiB7XG4gICAgICAgICAgICBzY2hlbWFzW2FwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBidXR0b24ubmFtZSldID0gYnV0dG9uXG4gICAgICAgICAgICByZXR1cm4gc2NoZW1hc1xuICAgICAgICAgIH0sIHt9KVxuICAgICAgICA6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhc1Nsb3RDb250ZW50LFxuICAgIGhhc1ZOb2RlQ29udGVudFxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLmRpdG8tYnV0dG9ucyB7XG4gID4gLmRpdG8tY29udGFpbmVyIHtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi8vLSBTZXQgYEBjbGljay5zdG9wYCB0byBwcmV2ZW50IGNsaWNrIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIHRvIGRpdG8tbGFiZWwuXG5EaXRvQnV0dG9ucy5kaXRvLWVkaXQtYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmQoXG4gIDpidXR0b25zPVwiYnV0dG9uc1wiXG4gIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgOmRhdGE9XCJkYXRhXCJcbiAgOm1ldGE9XCJtZXRhXCJcbiAgOnN0b3JlPVwic3RvcmVcIlxuICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgQGNsaWNrLnN0b3BcbilcbiAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgYS5kaXRvLWJ1dHRvbihcbiAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLWRpc2FibGVkJzogaXNEcmFnZ2FibGVEaXNhYmxlZCB9XCJcbiAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgKVxuICBSb3V0ZXJMaW5rLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJlZGl0YWJsZVwiXG4gICAgOmNsYXNzPVwieyAnZGl0by1kaXNhYmxlZCc6IGlzRWRpdGFibGVEaXNhYmxlZCB9XCJcbiAgICA6dG89XCJlZGl0UGF0aCA/IHsgcGF0aDogZWRpdFBhdGggfSA6IHt9XCJcbiAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmVkaXQpXCJcbiAgKVxuICBEaXRvQ3JlYXRlQnV0dG9uKFxuICAgIHYtaWY9XCJjcmVhdGFibGVcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgIDpwYXRoPVwiY3JlYXRlUGF0aFwiXG4gICAgOnZlcmI9XCJ2ZXJicy5jcmVhdGVcIlxuICAgIDp0ZXh0PVwiY3JlYXRlQnV0dG9uVGV4dFwiXG4gICAgOmRpc2FibGVkPVwiaXNDcmVhdGFibGVEaXNhYmxlZFwiXG4gIClcbiAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIDpkaXNhYmxlZD1cImlzRGVsZXRhYmxlRGlzYWJsZWRcIlxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgQGNsaWNrPVwiJGVtaXQoJ2RlbGV0ZScpXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgQ29udGV4dE1peGluIGZyb20gJy4uL21peGlucy9Db250ZXh0TWl4aW4uanMnXG5pbXBvcnQgeyBjYXBpdGFsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRWRpdEJ1dHRvbnMnLCB7XG4gIG1peGluczogW0NvbnRleHRNaXhpbl0sXG4gIGVtaXRzOiBbJ2RlbGV0ZSddLFxuXG4gIHByb3BzOiB7XG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBuZXN0ZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRyYWdnYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY3JlYXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGVsZXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdFBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgY3JlYXRlUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9ybUxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TGFiZWwodGhpcy5zY2hlbWEuZm9ybSlcbiAgICB9LFxuXG4gICAgaXNEcmFnZ2FibGVEaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkIHx8ICF0aGlzLmhhc1NjaGVtYU9wdGlvbignZHJhZ2dhYmxlJylcbiAgICB9LFxuXG4gICAgaXNEZWxldGFibGVEaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkIHx8ICF0aGlzLmhhc1NjaGVtYU9wdGlvbignZGVsZXRhYmxlJylcbiAgICB9LFxuXG4gICAgaXNFZGl0YWJsZURpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5kaXNhYmxlZCB8fFxuICAgICAgICAhdGhpcy5lZGl0UGF0aCB8fFxuICAgICAgICAhdGhpcy5oYXNTY2hlbWFPcHRpb24oJ2VkaXRhYmxlJylcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNDcmVhdGFibGVEaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuZGlzYWJsZWQgfHxcbiAgICAgICAgIXRoaXMuY3JlYXRlUGF0aCB8fFxuICAgICAgICAhdGhpcy5oYXNTY2hlbWFPcHRpb24oJ2NyZWF0YWJsZScpXG4gICAgICApXG4gICAgfSxcblxuICAgIGNyZWF0ZUJ1dHRvblRleHQoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAvLyBBbGxvdyBzY2hlbWEgdG8gb3ZlcnJpZGUgY3JlYXRlIGJ1dHRvbiB0aHJvdWdoIGNyZWF0YWJsZSBvYmplY3Q6XG4gICAgICAgIHRoaXMuc2NoZW1hLmNyZWF0YWJsZT8ubGFiZWwgfHwgKFxuICAgICAgICAgIC8vIEF1dG8tZ2VuZXJhdGUgY3JlYXRlIGJ1dHRvbiBsYWJlbHMgZnJvbSBmcm9tIGxhYmVscyBmb3IgbGlzdFxuICAgICAgICAgIC8vIHNvdXJjZXMgd2l0aCBvbmx5IG9uZSBmb3JtOlxuICAgICAgICAgIHRoaXMuZm9ybUxhYmVsICYmXG4gICAgICAgICAgYCR7Y2FwaXRhbGl6ZSh0aGlzLnZlcmJzLmNyZWF0ZSl9ICR7dGhpcy5mb3JtTGFiZWx9YFxuICAgICAgICApIHx8XG4gICAgICAgIG51bGxcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhc1NjaGVtYU9wdGlvbihuYW1lKSB7XG4gICAgICAvLyBBbGwgb3B0aW9ucyBjYW4gYmUgZGlzYWJsZWQgb24gYSBwZXItZm9ybSBiYXNpcyBieSBzZXR0aW5nXG4gICAgICAvLyBgc2NoZW1hW25hbWVdYCB0byBgZmFsc2VgIG9yIGEgY2FsbGJhY2sgcmV0dXJuaW5nIGBmYWxzZWAuXG4gICAgICByZXR1cm4gdGhpcy5nZXRTY2hlbWFWYWx1ZShuYW1lLCB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgIH0pXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLmRpdG8tZWRpdC1idXR0b25zIHtcbiAgLy8gT3ZlcnJpZGUgY3Vyc29yIGZyb20gY29sbGFwc2libGUgZGl0by1sYWJlbDpcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICBmbGV4OiBub25lO1xufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1jcmVhdGUtYnV0dG9uXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICB2LWlmPVwiY3JlYXRhYmxlRm9ybVwiXG4gICAgOnR5cGU9XCJpc0lubGluZWQgPyAnYnV0dG9uJyA6ICdzdWJtaXQnXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJiKVwiXG4gICAgQGNsaWNrPVwiY3JlYXRlSXRlbShjcmVhdGFibGVGb3JtKVwiXG4gICkge3sgdGV4dCB9fVxuICB0ZW1wbGF0ZShcbiAgICB2LWVsc2UtaWY9XCJjcmVhdGFibGVGb3Jtc1wiXG4gIClcbiAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYilcIlxuICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bigpXCJcbiAgICApIHt7IHRleHQgfX1cbiAgICB1bC5kaXRvLXB1bGxkb3duKDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IHB1bGxkb3duLm9wZW4gfVwiKVxuICAgICAgbGkoXG4gICAgICAgIHYtZm9yPVwiKGZvcm0sIHR5cGUpIGluIGNyZWF0YWJsZUZvcm1zXCJcbiAgICAgIClcbiAgICAgICAgYShcbiAgICAgICAgICB2LXNob3c9XCJzaG91bGRTaG93U2NoZW1hKGZvcm0pXCJcbiAgICAgICAgICA6Y2xhc3M9XCJnZXRGb3JtQ2xhc3MoZm9ybSwgdHlwZSlcIlxuICAgICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24odHlwZSlcIlxuICAgICAgICAgIEBtb3VzZXVwPVwib25QdWxsZG93bk1vdXNlVXAodHlwZSlcIlxuICAgICAgICApIHt7IGdldExhYmVsKGZvcm0pIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBDb250ZXh0TWl4aW4gZnJvbSAnLi4vbWl4aW5zL0NvbnRleHRNaXhpbi5qcydcbmltcG9ydCBQdWxsZG93bk1peGluIGZyb20gJy4uL21peGlucy9QdWxsZG93bk1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0Rm9ybVNjaGVtYXMsIGlzSW5saW5lZCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvQ3JlYXRlQnV0dG9uJywge1xuICBtaXhpbnM6IFtDb250ZXh0TWl4aW4sIFB1bGxkb3duTWl4aW5dLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAvLyBUaGUgbmV4dCBmb3VyIHByb3BzIGFyZSB0aGVyZSBmb3IgYERpdG9Db250ZXh0YCBhbmQgdGhlIGBjb250ZXh0KClgXG4gICAgLy8gZ2V0dGVyIGluIGBEaXRvTWl4aW5gLlxuICAgIC8vIFRPRE86IFNob3VsZCB0aGV5IGJlIG1vdmVkIHRvIHNoYXJlZCBtaXhpbiB0aGF0IGRlZmluZXMgdGhlbSBhcyByZXF1aXJlZFxuICAgIC8vIGFuZCBhbHNvIHByb3ZpZGVzIHRoZSBgY29udGV4dCgpYCBnZXR0ZXIsIHBlcmhhcHMgYENvbnRleHRNaXhpbmA/XG4gICAgLy8gYHNjaGVtYWAgY291bGQgYmUgaW5jbHVkZWQgYXMgd2VsbCwgYW5kIGBDb250ZXh0TWl4aW5gIGNvdWxkIGJlIHVzZWQgaW5cbiAgICAvLyBgRGl0b0Zvcm1gLCBgRGl0b1ZpZXdgLCBgRGl0b1BhbmVsYCwgYERpdG9TY2hlbWFgLCBgRGl0b0VkaXRCdXR0b25zYCxcbiAgICAvLyBldGM/IEJ1dCB0aGUgcHJvYmxlbSB3aXRoIHRoZSByb290IGNvbXBvbmVudHMgaXMgdGhhdCB0aGV5IGRvbid0IGhhdmVcbiAgICAvLyB0aGVzZSBwcm9wcy4gV2UgY291bGQgYWRkIGEgYGNvbnRleHRBdHRyaWJ1dGVzKClgIGdldHRlciBmb3IgZWFzeSBwYXNzaW5nXG4gICAgLy8gb24gYXMgYHYtYmluZD1cImNvbnRleHRBdHRyaWJ1dGVzXCJgLlxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBuZXN0ZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBwYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB2ZXJiOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0ZXh0OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvcm1zKCkge1xuICAgICAgcmV0dXJuIGdldEZvcm1TY2hlbWFzKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpXG4gICAgfSxcblxuICAgIGNyZWF0YWJsZUZvcm1zKCkge1xuICAgICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMuZm9ybXMpLmZpbHRlcihcbiAgICAgICAgKFssIGZvcm1dKSA9PiB0aGlzLmlzRm9ybUNyZWF0YWJsZShmb3JtKVxuICAgICAgKVxuICAgICAgcmV0dXJuIGVudHJpZXMubGVuZ3RoID4gMFxuICAgICAgICA/IE9iamVjdC5mcm9tRW50cmllcyhlbnRyaWVzKVxuICAgICAgICA6IG51bGxcbiAgICB9LFxuXG4gICAgY3JlYXRhYmxlRm9ybSgpIHtcbiAgICAgIGNvbnN0IGZvcm1zID0gdGhpcy5jcmVhdGFibGVGb3Jtc1xuICAgICAgcmV0dXJuIGZvcm1zICYmIE9iamVjdC5rZXlzKGZvcm1zKS5sZW5ndGggPT09IDEgJiYgZm9ybXMuZGVmYXVsdCB8fCBudWxsXG4gICAgfSxcblxuICAgIGlzSW5saW5lZCgpIHtcbiAgICAgIHJldHVybiBpc0lubGluZWQodGhpcy5zY2hlbWEpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBpc0Zvcm1DcmVhdGFibGUoZm9ybSkge1xuICAgICAgLy8gRm9ybXMgY2FuIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIGxpc3QgYnkgcHJvdmlkaW5nIGBpZjogZmFsc2VgIG9yXG4gICAgICAvLyBgY3JlYXRhYmxlOiBmYWxzZWAuXG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLnNob3VsZFJlbmRlclNjaGVtYShmb3JtKSAmJlxuICAgICAgICB0aGlzLmdldFNjaGVtYVZhbHVlKCdjcmVhdGFibGUnLCB7XG4gICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICAgIHNjaGVtYTogZm9ybVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBjcmVhdGVJdGVtKGZvcm0sIHR5cGUgPSBudWxsKSB7XG4gICAgICBpZiAoIXRoaXMuc2hvdWxkRGlzYWJsZVNjaGVtYShmb3JtKSkge1xuICAgICAgICBpZiAodGhpcy5pc0lubGluZWQpIHtcbiAgICAgICAgICB0aGlzLnNvdXJjZUNvbXBvbmVudC5jcmVhdGVJdGVtKGZvcm0sIHR5cGUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goe1xuICAgICAgICAgICAgcGF0aDogYCR7dGhpcy5wYXRofS9jcmVhdGVgLFxuICAgICAgICAgICAgcXVlcnk6IHsgdHlwZSB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgYWxsb3dlZCB0byBjcmVhdGUgaXRlbSBmb3IgZ2l2ZW4gZm9ybScpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldEZvcm1DbGFzcyhmb3JtLCB0eXBlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbYGRpdG8tdHlwZS0ke3R5cGV9YF06IHRydWUsXG4gICAgICAgICdkaXRvLWRpc2FibGVkJzogdGhpcy5zaG91bGREaXNhYmxlU2NoZW1hKGZvcm0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uUHVsbGRvd25TZWxlY3QodHlwZSkge1xuICAgICAgdGhpcy5jcmVhdGVJdGVtKHRoaXMuZm9ybXNbdHlwZV0sIHR5cGUpXG4gICAgICB0aGlzLnNldFB1bGxkb3duT3BlbihmYWxzZSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG4uZGl0by1jcmVhdGUtYnV0dG9uIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gIC5kaXRvLXB1bGxkb3duIHtcbiAgICByaWdodDogMDtcblxuICAgIC5kaXRvLWJ1dHRvbnMtc3RpY2t5ICYge1xuICAgICAgdG9wOiB1bnNldDtcbiAgICAgIHJpZ2h0OiB1bnNldDtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWNsaXBib2FyZC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICB2LWlmPVwiY2xpcGJvYXJkXCJcbilcbiAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLWNvcHkoXG4gICAgcmVmPVwiY29weURhdGFcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHRpdGxlPVwiQ29weSBEYXRhXCJcbiAgICA6ZGlzYWJsZWQ9XCIhY29weUVuYWJsZWRcIlxuICAgIEBjbGljaz1cIm9uQ29weVwiXG4gIClcbiAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLXBhc3RlKFxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHRpdGxlPVwiUGFzdGUgRGF0YVwiXG4gICAgOmRpc2FibGVkPVwiIXBhc3RlRW5hYmxlZFwiXG4gICAgQGNsaWNrPVwib25QYXN0ZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc09iamVjdCwgY2xvbmUsIGRlaW5kZW50IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9DbGlwYm9hcmQnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcblxuICBwcm9wczoge1xuICAgIGNsaXBib2FyZDogeyB0eXBlOiBbQm9vbGVhbiwgT2JqZWN0XSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29weUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgcGFzdGVFbmFibGVkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsaXBib2FyZE9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3QodGhpcy5jbGlwYm9hcmQpID8gdGhpcy5jbGlwYm9hcmQgOiB7fVxuICAgIH0sXG5cbiAgICBjb3B5RGF0YSgpIHtcbiAgICAgIGNvbnN0IHsgY29weSB9ID0gdGhpcy5jbGlwYm9hcmRPcHRpb25zXG4gICAgICByZXR1cm4gY29weVxuICAgICAgICA/IGNsaXBib2FyZERhdGEgPT5cbiAgICAgICAgICAgIGNvcHkuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBjbGlwYm9hcmREYXRhIH0pKVxuICAgICAgICA6IGNsaXBib2FyZERhdGEgPT4gY2xvbmUoY2xpcGJvYXJkRGF0YSlcbiAgICB9LFxuXG4gICAgcGFzdGVEYXRhKCkge1xuICAgICAgY29uc3QgeyBwYXN0ZSB9ID0gdGhpcy5jbGlwYm9hcmRPcHRpb25zXG4gICAgICByZXR1cm4gcGFzdGVcbiAgICAgICAgPyBjbGlwYm9hcmREYXRhID0+XG4gICAgICAgICAgICBwYXN0ZS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IGNsaXBib2FyZERhdGEgfSkpXG4gICAgICAgIDogY2xpcGJvYXJkRGF0YSA9PiBjbGlwYm9hcmREYXRhXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgLy8gQ2hlY2sgcmlnaHQgYXdheSBhbHNvIGluIGNhc2UgdGhlcmUncyBhbHJlYWR5IGRhdGEgKGUuZy4gY3JlYXRlIGZvcm0pOlxuICAgICdwYXJlbnRDb21wb25lbnQuaGFzRGF0YSc6IHtcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXI6ICd1cGRhdGVDb3B5J1xuICAgIH0sXG5cbiAgICAnYXBwU3RhdGUuY2xpcGJvYXJkRGF0YSc6IHtcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXI6ICd1cGRhdGVQYXN0ZSdcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICAvLyBDaGVjayBjbGlwYm9hcmQgY29udGVudCB3aGVuZXZlciBzb21ldGhpbmcgZ2V0cyBjb3BpZWQgb3IgdGhlIHdpbmRvdyBnZXRzXG4gICAgLy8gKHJlKWFjdGl2YXRlZCwgYXMgdGhvc2UgYXJlIHRoZSBtb21lbnRzIHdoZW4gdGhlIGNsaXBib2FyZCBjYW4gY2hhbmdlOlxuICAgIHRoaXMuZG9tT24oZG9jdW1lbnQsIHsgY29weTogdGhpcy51cGRhdGVQYXN0ZSB9KVxuICAgIHRoaXMuZG9tT24od2luZG93LCB7IGZvY3VzOiB0aGlzLnVwZGF0ZVBhc3RlIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGNoZWNrQ2xpcGJvYXJkRGF0YShjbGlwYm9hcmREYXRhKSB7XG4gICAgICBjb25zdCB7ICRzY2hlbWEsIC4uLmRhdGEgfSA9IGNsaXBib2FyZERhdGEgfHwge31cbiAgICAgIHJldHVybiAkc2NoZW1hID09PSB0aGlzLnNjaGVtYS5uYW1lID8gZGF0YSA6IG51bGxcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2xpcGJvYXJkRGF0YShyZXBvcnQpIHtcbiAgICAgIC8vIFVzZSB0aGUgaW50ZXJuYWwgY2xpcGJvYXJkIGFzIGZhbGxiYWNrLlxuICAgICAgbGV0IHsgY2xpcGJvYXJkRGF0YSB9ID0gdGhpcy5hcHBTdGF0ZVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QganNvbiA9IGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQ/LnJlYWRUZXh0Py4oKVxuICAgICAgICBpZiAoanNvbikge1xuICAgICAgICAgIGNsaXBib2FyZERhdGEgPSBKU09OLnBhcnNlKGpzb24pXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAocmVwb3J0KSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIsIGVyci5uYW1lLCBlcnIubWVzc2FnZSlcbiAgICAgICAgICBpZiAoZXJyLm5hbWUgPT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgICAgIGFsZXJ0KGRlaW5kZW50YFxuICAgICAgICAgICAgICBUaGUgZGF0YSBpbiB0aGUgY2xpcGJvYXJkIGFwcGVhcnMgdG8gYmUgbWFsZm9ybWVkOlxuICAgICAgICAgICAgICAke2Vyci5tZXNzYWdlfVxuICAgICAgICAgICAgYClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmNoZWNrQ2xpcGJvYXJkRGF0YShjbGlwYm9hcmREYXRhKVxuICAgIH0sXG5cbiAgICB1cGRhdGVDb3B5KCkge1xuICAgICAgdGhpcy5jb3B5RW5hYmxlZCA9IHRoaXMucGFyZW50Q29tcG9uZW50Lmhhc0RhdGFcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBkYXRlUGFzdGUoKSB7XG4gICAgICB0aGlzLnBhc3RlRW5hYmxlZCA9ICEhdGhpcy5jaGVja0NsaXBib2FyZERhdGEodGhpcy5hcHBTdGF0ZS5jbGlwYm9hcmREYXRhKVxuICAgICAgaWYgKCF0aGlzLnBhc3RlRW5hYmxlZCAmJiB0aGlzLmFwcFN0YXRlLmFnZW50LmNocm9tZSkge1xuICAgICAgICAvLyBTZWUgaWYgdGhlIGNsaXBib2FyZCBjb250ZW50IGlzIHZhbGlkIEpTT04gZGF0YSB0aGF0IGlzIGNvbXBhdGlibGVcbiAgICAgICAgLy8gd2l0aCB0aGUgY3VycmVudCB0YXJnZXQgc2NoZW1hLCBhbmQgb25seSB0aGVuIGFjdGl2YXRlIHRoZSBwYXN0aW5nOlxuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5nZXRDbGlwYm9hcmREYXRhKGZhbHNlKSAvLyBEb24ndCByZXBvcnRcbiAgICAgICAgdGhpcy5wYXN0ZUVuYWJsZWQgPSAhIWRhdGFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgb25Db3B5KCkge1xuICAgICAgbGV0IGRhdGEgPSB0aGlzLnBhcmVudENvbXBvbmVudC5jbGlwYm9hcmREYXRhXG4gICAgICB0cnkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIGRhdGEgPSB7XG4gICAgICAgICAgICAkc2NoZW1hOiB0aGlzLnNjaGVtYS5uYW1lLFxuICAgICAgICAgICAgLi4udGhpcy5jb3B5RGF0YShkYXRhKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBLZWVwIGFuIGludGVybmFsIGNsaXBib2FyZCBhcyBmYWxsYmFjay5cbiAgICAgICAgdGhpcy5hcHBTdGF0ZS5jbGlwYm9hcmREYXRhID0gZGF0YVxuICAgICAgICB0aGlzLnBhc3RlRW5hYmxlZCA9IHRydWVcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMilcbiAgICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkPy53cml0ZVRleHQ/Lihqc29uKVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVyciwgZXJyLm5hbWUsIGVyci5tZXNzYWdlKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICBhbGVydChlcnJvci5tZXNzYWdlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBvblBhc3RlKCkge1xuICAgICAgbGV0IGRhdGEgPSBhd2FpdCB0aGlzLmdldENsaXBib2FyZERhdGEodHJ1ZSkgLy8gUmVwb3J0XG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gZGF0YSAmJiB0aGlzLnBhc3RlRGF0YShkYXRhKVxuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIHRoaXMucGFyZW50Q29tcG9uZW50LmNsaXBib2FyZERhdGEgPSBkYXRhXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIGFsZXJ0KGVycm9yLm1lc3NhZ2UpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tY2xpcGJvYXJkIHtcbiAgZGlzcGxheTogZmxleDtcblxuICAuZGl0by1zY2hlbWEgJiB7XG4gICAgLy8gUHVzaCBjbGlwYm9hcmQgdG8gdGhlIHJpZ2h0IGluIHRoZSBmbGV4IGxheW91dCwgc2VlOlxuICAgIC8vIGh0dHBzOi8vY29kZXBlbi5pby90aG9sZXgvcGVuL2h2ZUJ4L1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICB9XG5cbiAgLmRpdG8taGVhZGVyICYge1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuXG4gICAgLmRpdG8tYnV0dG9uIHtcbiAgICAgIG1hcmdpbjogMCAwICR0YWItbWFyZ2luICR0YWItbWFyZ2luO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldExvYWRpbmcoaXNMb2FkaW5nLCB7IHVwZGF0ZVJvb3QgPSBmYWxzZSwgdXBkYXRlVmlldyA9IGZhbHNlIH0gPSB7fSkge1xuICAgICAgaWYgKCF0aGlzLmlzTG9hZGluZyBeICFpc0xvYWRpbmcpIHtcbiAgICAgICAgLy8gQm9vbGVhbiB4b3JcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSAhIWlzTG9hZGluZ1xuICAgICAgICBpZiAodXBkYXRlUm9vdCkge1xuICAgICAgICAgIHRoaXMucm9vdENvbXBvbmVudC5yZWdpc3RlckxvYWRpbmcoaXNMb2FkaW5nKVxuICAgICAgICB9XG4gICAgICAgIGlmICh1cGRhdGVWaWV3KSB7XG4gICAgICAgICAgdGhpcy52aWV3Q29tcG9uZW50LnNldExvYWRpbmcodGhpcy5pc0xvYWRpbmcpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBJdGVtTWl4aW4gZnJvbSAnLi9JdGVtTWl4aW4uanMnXG5pbXBvcnQgTG9hZGluZ01peGluIGZyb20gJy4vTG9hZGluZ01peGluLmpzJ1xuaW1wb3J0IHsgc2V0RGVmYXVsdFZhbHVlcyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGFzc2lnbkRlZXBseSwgaXNPYmplY3QsIGlzU3RyaW5nLCBsYWJlbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBnZXRSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtJdGVtTWl4aW4sIExvYWRpbmdNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHJlc291cmNlQ29tcG9uZW50OiAoKSA9PiB0aGlzLFxuICAgICAgLy8gUGFzcyBsb2NhbCB2ZXJicyBvdmVycmlkZXMgb24gdG8gY2hpbGRyZW4sIHNlZSB2ZXJicygpIGNvbXB1dGVkIHByb3AuXG4gICAgICAkdmVyYnM6ICgpID0+IHRoaXMudmVyYnMsXG4gICAgICAkaXNQb3B1bGF0ZWQ6ICgpID0+IHRoaXMuaGFzRGF0YVxuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBsb2FkZWREYXRhOiBudWxsLFxuICAgICAgYWJvcnRDb250cm9sbGVyOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcmVzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICByZXNvdXJjZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFJlc291cmNlKClcbiAgICB9LFxuXG4gICAgcHJvdmlkZXNEYXRhKCkge1xuICAgICAgLy8gVGhpcyBjb21wb25lbnQgaXMgYSBkYXRhLXNvdXJjZSBpZiBpdCBoYXMgYW4gYXNzb2NpYXRlZCBBUEkgcmVzb3VyY2U6XG4gICAgICByZXR1cm4gISF0aGlzLnJlc291cmNlXG4gICAgfSxcblxuICAgIGxpbmtzVG9WaWV3KCkge1xuICAgICAgLy8gUmV0dXJucyBgZmFsc2VgaGVyZSwgYnV0IGlzIG92ZXJyaWRkZW4gdG8gcmV0dXJuIGB0cnVlYCBpblxuICAgICAgLy8gYFNvdXJjZU1peGluYCBmb3IgY29tcG9uZW50IHRoYXQgZG8gbm90IHByb3ZpZGUgdGhlaXIgb3duIGRhdGEsIGJ1dFxuICAgICAgLy8gZWRpdCB0aGVpciBpdGVtcyB0aHJvdWdoIGEgbGlua2VkIHZpZXcuICBJbiB0aGlzIGNhc2UsIHJlYWwgaWRzIG5lZWQgdG9cbiAgICAgIC8vIGJlIHVzZWQuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgaXNUcmFuc2llbnQoKSB7XG4gICAgICAvLyBDaGVjayB0aGUgZm9ybSB0aGF0IHRoaXMgY29tcG9uZW50IGJlbG9uZ3MgdG8gYXMgd2VsbCwgc2luY2UgaXQgbWF5IGJlXG4gICAgICAvLyBpbiBjcmVhdGlvbiBtb2RlLCB3aGljaCBtYWtlcyBpdCB0cmFuc2llbnQuXG4gICAgICAvLyBOT1RFOiBUaGlzIGRvZXMgbm90IGxvb3AgZW5kbGVzc2x5IGJlY2F1c2UgRGl0b0Zvcm0gcmVkZWZpbmVzXG4gICAgICAvLyBgaXNUcmFuc2llbnQoKWAgdG8gb25seSByZXR1cm4gYCF0aGlzLnByb3ZpZGVzRGF0YWAuXG4gICAgICBjb25zdCBmb3JtID0gdGhpcy5mb3JtQ29tcG9uZW50XG4gICAgICByZXR1cm4gKFxuICAgICAgICAhdGhpcy5wcm92aWRlc0RhdGEgJiZcbiAgICAgICAgIXRoaXMubGlua3NUb1ZpZXcgfHxcbiAgICAgICAgZm9ybSAmJiAoXG4gICAgICAgICAgZm9ybS5pc1RyYW5zaWVudCB8fFxuICAgICAgICAgIGZvcm0uaXNDcmVhdGluZ1xuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIHRyYW5zaWVudE5vdGUoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmlzVHJhbnNpZW50ICYmIChcbiAgICAgICAgICAnPGI+Tm90ZTwvYj46IHRoZSBwYXJlbnQgc3RpbGwgbmVlZHMgdG8gYmUgc2F2ZWQgJyArXG4gICAgICAgICAgJ2luIG9yZGVyIHRvIHBlcnNpc3QgdGhpcyBjaGFuZ2UuJ1xuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIHNob3VsZExvYWQoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAhdGhpcy5pc1RyYW5zaWVudCAmJlxuICAgICAgICAhdGhpcy5pc0xvYWRpbmdcbiAgICAgIClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIC8vIEJhc2UgZGVmaW5pdGlvbiwgd2lsbCBiZSBvdmVycmlkZGVuIGJ5IERpdG9Gb3JtIGFuZCBTb3VyY2VNaXhpblxuICAgICAgcmV0dXJuICEhdGhpcy5sb2FkZWREYXRhXG4gICAgfSxcblxuICAgIHZlcmJzKCkge1xuICAgICAgLy8gVGhlIGFjdHVhbCBjb2RlIGlzIHRoZSBgZ2V0VmVyYnMoKWAgbWV0aG9kLCBmb3IgZWFzaWVyIG92ZXJyaWRpbmcgb2ZcbiAgICAgIC8vIHRoaXMgY29tcHV0ZWQgcHJvcGVydHkgaW4gY29tcG9uZW50cyB0aGF0IHVzZSB0aGUgUmVzb3VyY2VNaXhpbi5cbiAgICAgIHJldHVybiB0aGlzLmdldFZlcmJzKClcbiAgICB9LFxuXG4gICAgcGFnaW5hdGlvblJhbmdlKCkge1xuICAgICAgLy8gT25seSBhcHBseSBwYWdpbmF0aW9uIHRvIGxpc3RzLlxuICAgICAgY29uc3QgeyBwYWdpbmF0ZTogYW1vdW50IH0gPSB0aGlzLnNvdXJjZVNjaGVtYVxuICAgICAgaWYgKHRoaXMuaXNMaXN0U291cmNlICYmIGFtb3VudCkge1xuICAgICAgICBjb25zdCB7IHBhZ2UgPSAwIH0gPSB0aGlzLnF1ZXJ5IHx8IHt9XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gcGFnZSAqIGFtb3VudFxuICAgICAgICByZXR1cm4gW3N0YXJ0LCBzdGFydCArIGFtb3VudCAtIDFdXG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG5cbiAgICBxdWVyeVBhcmFtcygpIHtcbiAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5wYWdpbmF0aW9uUmFuZ2VcbiAgICAgIGNvbnN0IHsgcGFnZSwgLi4ucXVlcnkgfSA9IHRoaXMucXVlcnkgfHwge31cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnF1ZXJ5LCAvLyBRdWVyeSBtYXkgb3ZlcnJpZGUgc2NvcGUuXG4gICAgICAgIC4uLihyYW5nZSAmJiB7XG4gICAgICAgICAgLy8gUGFzcyBwYWdpbmF0aW9uIGFzIHJhbmdlLCBzbyB0aGF0IHdlIGF1dG9tYXRpY2FsbHkgZ2V0IE9iamVjdGlvbidzXG4gICAgICAgICAgLy8gcmVzdWx0cyBjb3VudGluZzpcbiAgICAgICAgICByYW5nZTogcmFuZ2Uuam9pbignLCcpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgLy8gV2hlbiBjcmVhdGluZyBuZXN0ZWQgZGF0YSwgd2Ugc3RpbGwgbmVlZCB0byBjYWxsIHNldHVwRGF0YSgpXG4gICAgaWYgKHRoaXMucHJvdmlkZXNEYXRhIHx8IHRoaXMuaXNDcmVhdGluZykge1xuICAgICAgdGhpcy5zZXR1cERhdGEoKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0UmVzb3VyY2UoeyBtZXRob2QgPSAnZ2V0JywgY2hpbGQgfSA9IHt9KSB7XG4gICAgICAvLyBSZXR1cm5zIHRoZSByZXNvdXJjZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSByZXNvdXJjZSBmb3IgdGhlXG4gICAgICAvLyBhc3NvY2lhdGVkIHNvdXJjZSBzY2hlbWEuXG4gICAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMuc291cmNlU2NoZW1hPy5yZXNvdXJjZVxuICAgICAgcmV0dXJuIGdldFJlc291cmNlKHJlc291cmNlLCB7XG4gICAgICAgIHR5cGU6ICdjb2xsZWN0aW9uJyxcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICBwYXJlbnQ6IHRoaXMucGFyZW50UmVzb3VyY2VDb21wb25lbnQ/LmdldFJlc291cmNlKHtcbiAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgY2hpbGQ6IHJlc291cmNlXG4gICAgICAgIH0pID8/IG51bGwsXG4gICAgICAgIGNoaWxkXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRWZXJicygpIHtcbiAgICAgIGNvbnN0IHZlcmJzID0gdGhpcy4kdmVyYnMoKVxuICAgICAgcmV0dXJuIHRoaXMuaXNUcmFuc2llbnRcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi52ZXJicyxcbiAgICAgICAgICAgIC8vIE92ZXJyaWRlIGRlZmF1bHQgdmVyYnMgd2l0aCB0aGVpciB0cmFuc2llbnQgdmVyc2lvbnM6XG4gICAgICAgICAgICBjcmVhdGU6ICdhZGQnLFxuICAgICAgICAgICAgY3JlYXRlZDogJ2FkZGVkJyxcbiAgICAgICAgICAgIHNhdmU6ICdhcHBseScsXG4gICAgICAgICAgICBzYXZlZDogJ2FwcGxpZWQnLFxuICAgICAgICAgICAgZGVsZXRlOiAncmVtb3ZlJyxcbiAgICAgICAgICAgIGRlbGV0ZWQ6ICdyZW1vdmVkJ1xuICAgICAgICAgIH1cbiAgICAgICAgOiB2ZXJic1xuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLmxvYWRlZERhdGEgPSBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgdGhpcy5sb2FkZWREYXRhID0gZGF0YVxuICAgIH0sXG5cbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICAvLyBBY3R1YWwgY29kZSBpcyBpbiBzZXBhcmF0ZSBmdW5jdGlvbiBzbyBpdCdzIGVhc2VyIHRvIG92ZXJyaWRlXG4gICAgICAvLyBgc2V0dXBEYXRhKClgIGFuZCBhbmQgY2FsbCBgZW5zdXJlRGF0YSgpYCBmcm9tIHRoZSBvdmVycmlkZXMsXG4gICAgICAvLyBzZWUgRGl0b0Zvcm0gYW5kIFNvdXJjZU1peGluLlxuICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICB9LFxuXG4gICAgZW5zdXJlRGF0YSgpIHtcbiAgICAgIGlmICh0aGlzLnNob3VsZExvYWQpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzRGF0YSkge1xuICAgICAgICAgIHRoaXMucmVsb2FkRGF0YSgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2FkRGF0YSh0cnVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlbG9hZERhdGEoKSB7XG4gICAgICB0aGlzLmxvYWREYXRhKGZhbHNlKVxuICAgIH0sXG5cbiAgICBsb2FkRGF0YShjbGVhcikge1xuICAgICAgaWYgKCF0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgIGlmIChjbGVhcikge1xuICAgICAgICAgIHRoaXMuY2xlYXJEYXRhKClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlcXVlc3REYXRhKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3JlYXRlRGF0YShzY2hlbWEsIHR5cGUpIHtcbiAgICAgIHJldHVybiBzZXREZWZhdWx0VmFsdWVzKHNjaGVtYSwgdHlwZSA/IHsgdHlwZSB9IDoge30sIHRoaXMpXG4gICAgfSxcblxuICAgIHJlcXVlc3REYXRhKCkge1xuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLnF1ZXJ5UGFyYW1zXG4gICAgICB0aGlzLmhhbmRsZVJlcXVlc3QoeyBtZXRob2Q6ICdnZXQnLCBxdWVyeSB9LCAoZXJyLCByZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBjb25zdCB7IGRhdGEgfSA9IHJlc3BvbnNlXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGRhdGE/LnR5cGUgPT09ICdGaWx0ZXJWYWxpZGF0aW9uJyAmJlxuICAgICAgICAgICAgICB0aGlzLm9uRmlsdGVyRXJyb3JzPy4oZGF0YS5lcnJvcnMpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1VuYXV0aG9yaXplZEVycm9yKHJlc3BvbnNlKSkge1xuICAgICAgICAgICAgICAvLyBUT0RPOiBDYW4gd2UgcmVhbGx5IHN3YWxsb3cgdGhlc2UgZXJyb3JzP1xuICAgICAgICAgICAgICAvLyBJcyBjYWxsaW5nIGBlbnN1cmVVc2VyKClgIGluIGBvbkJlZm9yZVJlcXVlc3QoKWAgZW5vdWdoP1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNldERhdGEocmVzcG9uc2UuZGF0YSlcbiAgICAgICAgICB0aGlzLmVtaXRTY2hlbWFFdmVudCgnbG9hZCcpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGlzVmFsaWRhdGlvbkVycm9yKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2U/LnN0YXR1cyA9PT0gNDAwXG4gICAgfSxcblxuICAgIGlzVW5hdXRob3JpemVkRXJyb3IocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiByZXNwb25zZT8uc3RhdHVzID09PSA0MDFcbiAgICB9LFxuXG4gICAgYXN5bmMgaGFuZGxlUmVxdWVzdChcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICByZXNvdXJjZSA9IHRoaXMuZ2V0UmVzb3VyY2UoeyBtZXRob2QgfSksXG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICBkYXRhXG4gICAgICB9LFxuICAgICAgY2FsbGJhY2tcbiAgICApIHtcbiAgICAgIGNvbnN0IGxvYWRpbmdPcHRpb25zID0ge1xuICAgICAgICB1cGRhdGVSb290OiB0cnVlLCAvLyBEaXNwbGF5IHNwaW5uZXIgaW4gaGVhZGVyIHdoZW4gbG9hZGluZyBpbiByZXNvdXJjZXNcbiAgICAgICAgdXBkYXRlVmlldzogdGhpcy5pc0luVmlldyAvLyBOb3RpZnkgdmlldyBvZiBsb2FkaW5nIGZvciB2aWV3IGNvbXBvbmVudHNcbiAgICAgIH1cbiAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyPy5hYm9ydCgpXG4gICAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG4gICAgICB0aGlzLmFib3J0Q29udHJvbGxlciA9IGNvbnRyb2xsZXJcbiAgICAgIGNvbnN0IHsgc2lnbmFsIH0gPSBjb250cm9sbGVyXG4gICAgICBtZXRob2QgPSByZXNvdXJjZS5tZXRob2QgfHwgbWV0aG9kXG4gICAgICBjb25zdCByZXF1ZXN0ID0geyBtZXRob2QsIHJlc291cmNlLCBxdWVyeSwgZGF0YSwgc2lnbmFsIH1cbiAgICAgIHRoaXMuc2V0TG9hZGluZyh0cnVlLCBsb2FkaW5nT3B0aW9ucylcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdChyZXF1ZXN0KVxuICAgICAgICAvLyBQYXNzIGJvdGggcmVxdWVzdCBhbmQgcmVzcG9uc2UgdG8gdGhlIGNhbGxiYWNrLCBzbyB0aGV5IGNhbiBiZVxuICAgICAgICAvLyBleHBvc2VkIHRvIGZ1cnRoZXIgY2FsbGJhY2tzIHRocm91Z2ggRGl0b0NvbnRleHQuXG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yLm5hbWUgIT09ICdBYm9ydEVycm9yJykge1xuICAgICAgICAgIC8vIElmIGNhbGxiYWNrIHJldHVybnMgdHJ1ZSwgZXJyb3JzIHdlcmUgYWxyZWFkeSBoYW5kbGVkLlxuICAgICAgICAgIGNvbnN0IHsgcmVzcG9uc2UgfSA9IGVycm9yXG4gICAgICAgICAgaWYgKCFjYWxsYmFjayhlcnJvciwgcmVzcG9uc2UpKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gcmVzcG9uc2U/LmRhdGFcbiAgICAgICAgICAgIGNvbnN0IHRpdGxlID0gaXNTdHJpbmcoZGF0YT8udHlwZSlcbiAgICAgICAgICAgICAgPyBsYWJlbGl6ZShkYXRhLnR5cGUpXG4gICAgICAgICAgICAgIDogJ0Vycm9yJ1xuICAgICAgICAgICAgY29uc3QgdGV4dCA9IGRhdGE/Lm1lc3NhZ2UgPz8gZXJyb3JcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHsgdHlwZTogJ2Vycm9yJywgZXJyb3IsIHRpdGxlLCB0ZXh0IH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5hYm9ydENvbnRyb2xsZXIgPT09IGNvbnRyb2xsZXIpIHtcbiAgICAgICAgLy8gT25seSBjbGVhciB0aGUgbG9hZGluZyBzdGF0ZSBpZiB0aGlzIGlzIHN0aWxsIHRoZSBjdXJyZW50IHJlcXVlc3QuXG4gICAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyID0gbnVsbFxuICAgICAgICB0aGlzLnNldExvYWRpbmcoZmFsc2UsIGxvYWRpbmdPcHRpb25zKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZCkge1xuICAgICAgLy8gQ29udmVudGlvbjogb25seSBwb3N0LCBwdXQgYW5kIHBhdGNoIHJlcXVlc3RzIHBhc3MgdGhlIGRhdGEgYXMgcGF5bG9hZC5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXS5pbmNsdWRlcyhtZXRob2QpICYmIChcbiAgICAgICAgICAvLyBUT0RPOiBVc2UgYGhhbmRsZURhdGFTY2hlbWEoKWAgYXN5bmNocm9ub3VzbHkgaGVyZSBpbnN0ZWFkLCB0b1xuICAgICAgICAgIC8vIG9mZmVyIHRoZSBzYW1lIGFtb3VudCBvZiBwb3NzaWJpbGl0aWVzIGZvciBkYXRhIGxvYWRpbmcuXG4gICAgICAgICAgYnV0dG9uLmdldFNjaGVtYVZhbHVlKFsncmVzb3VyY2UnLCAnZGF0YSddKSB8fFxuICAgICAgICAgIGJ1dHRvbi5wcm9jZXNzZWRJdGVtXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0KGJ1dHRvbikge1xuICAgICAgbGV0IHsgcmVzb3VyY2UgfSA9IGJ1dHRvbi5zY2hlbWFcbiAgICAgIHJlc291cmNlID0gZ2V0UmVzb3VyY2UocmVzb3VyY2UsIHtcbiAgICAgICAgcGFyZW50OiB0aGlzLmdldFJlc291cmNlKHtcbiAgICAgICAgICBtZXRob2Q6IHJlc291cmNlPy5tZXRob2QsXG4gICAgICAgICAgY2hpbGQ6IHJlc291cmNlXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgICAgaWYgKHJlc291cmNlKSB7XG4gICAgICAgIGNvbnN0IHsgbWV0aG9kIH0gPSByZXNvdXJjZVxuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZClcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VibWl0UmVzb3VyY2UoYnV0dG9uLCByZXNvdXJjZSwgbWV0aG9kLCBkYXRhKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgc2V0RGF0YSA9IGZhbHNlLFxuICAgICAgb25TdWNjZXNzLFxuICAgICAgb25FcnJvcixcbiAgICAgIG5vdGlmeVN1Y2Nlc3MgPSAoKSA9PlxuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBTdWNjZXNzZnVsJyxcbiAgICAgICAgICB0ZXh0OiAnUmVxdWVzdCB3YXMgc3VjY2Vzc2Z1bGx5IHNlbnQuJ1xuICAgICAgICB9KSxcbiAgICAgIG5vdGlmeUVycm9yID0gZXJyb3IgPT5cbiAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IEVycm9yJyxcbiAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICBgVW5hYmxlIHRvIHNlbmQgcmVxdWVzdCR7ZXJyb3IgPyAnOicgOiAnJ31gLFxuICAgICAgICAgICAgZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3JcbiAgICAgICAgICBdXG4gICAgICAgIH0pXG4gICAgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdChcbiAgICAgICAgICB7IG1ldGhvZCwgcmVzb3VyY2UsIGRhdGEgfSxcbiAgICAgICAgICBhc3luYyAoZXJyLCByZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJlc3BvbnNlPy5kYXRhXG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBEaXRvLmpzIHZhbGlkYXRpb24gZXJyb3I6XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9ycyA9IHRoaXMuaXNWYWxpZGF0aW9uRXJyb3IocmVzcG9uc2UpICYmIGRhdGEuZXJyb3JzXG4gICAgICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgdHJ1ZSlcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IGlzT2JqZWN0KGRhdGEpID8gZGF0YSA6IGVyclxuICAgICAgICAgICAgICAgIG9uRXJyb3I/LihlcnJvcilcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdlcnJvcicsIHtcbiAgICAgICAgICAgICAgICAgIG5vdGlmeTogbm90aWZ5RXJyb3IsXG4gICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdW5kZXJseWluZyBkYXRhIGJlZm9yZSBjYWxsaW5nIGBub3RpZnkoKWAgb3JcbiAgICAgICAgICAgICAgLy8gYHRoaXMuaXRlbUxhYmVsYCwgc28gaWQgaXMgc2V0IGFmdGVyIGNyZWF0aW5nIG5ldyBpdGVtcy5cbiAgICAgICAgICAgICAgaWYgKHNldERhdGEgJiYgZGF0YSkge1xuICAgICAgICAgICAgICAgIC8vIFByZXNlcnZlIHRoZSBmb3JlaWduIGRhdGEgZW50cmllcyB3aGVuIHVwZGF0aW5nIHRoZSBkYXRhLlxuICAgICAgICAgICAgICAgIGNvbnN0IHsgZm9yZWlnbkRhdGEgfSA9IHRoaXMubWFpblNjaGVtYUNvbXBvbmVudC5maWx0ZXJEYXRhKFxuICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC8vIFRlbGwgdGhlIHBhcmVudCByb3V0ZSB0byByZWxvYWQgaXRzIGRhdGEsIHNvIHRoYXQgaXQgY2FuXG4gICAgICAgICAgICAgICAgLy8gdXBkYXRlIGl0cyBmb3JlaWduIGRhdGEgZW50cmllcy5cbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRNZXRhID0gdGhpcy5wYXJlbnRSb3V0ZUNvbXBvbmVudD8ucm91dGVSZWNvcmQ/Lm1ldGFcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50TWV0YSkge1xuICAgICAgICAgICAgICAgICAgcGFyZW50TWV0YS5yZWxvYWQgPSB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YShhc3NpZ25EZWVwbHkoe30sIGZvcmVpZ25EYXRhLCBkYXRhKSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBvblN1Y2Nlc3M/LigpXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ3N1Y2Nlc3MnLCB7XG4gICAgICAgICAgICAgICAgbm90aWZ5OiBub3RpZnlTdWNjZXNzXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVtaXRCdXR0b25FdmVudChidXR0b24sIGV2ZW50LCB7IG5vdGlmeSwgZXJyb3IgfSkge1xuICAgICAgLy8gQ3JlYXRlIHRoZSBjb250ZXh0IG91dHNpZGUgb2YgYGVtaXRFdmVudCgpYCwgc28gdGhhdFxuICAgICAgLy8gYGNvbnRleHQud2FzTm90aWZpZWRgIGNhbiBiZSBjaGVja2VkIGFmdGVyLlxuICAgICAgY29uc3QgY29udGV4dCA9IG5ldyBEaXRvQ29udGV4dChidXR0b24sIHtcbiAgICAgICAgbmVzdGVkOiBmYWxzZSxcbiAgICAgICAgZGF0YTogdGhpcy5kYXRhLFxuICAgICAgICBpdGVtTGFiZWw6IHRoaXMuaXRlbUxhYmVsLFxuICAgICAgICBlcnJvclxuICAgICAgfSlcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGJ1dHRvbi5lbWl0RXZlbnQoZXZlbnQsIHsgY29udGV4dCB9KVxuICAgICAgaWYgKFxuICAgICAgICBub3RpZnkgJiZcbiAgICAgICAgLy8gUHJldmVudCBkZWZhdWx0IGlmIGFueXRoaW5nIHdhcyByZXR1cm5lZCBmcm9tIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAgICByZXMgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAvLyBEbyBub3QgZGlzcGxheSBkZWZhdWx0IG5vdGlmaWNhdGlvbiBpZiB0aGUgZXZlbnQgaGFuZGxlciBhbHJlYWR5XG4gICAgICAgIC8vIGRpc3BsYXllZCBhIG5vdGlmaWNhdGlvbi5cbiAgICAgICAgIWNvbnRleHQud2FzTm90aWZpZWRcbiAgICAgICkge1xuICAgICAgICBub3RpZnkoZXJyb3IpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzXG4gICAgfVxuICB9XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVBhdGgocGF0aCkge1xuICAvLyBGb3IgcGF0aHMgc3RhcmluZyB3aXRoIGAvYCwgd2UgY2FuIHVzZSB0aGUgbmF0aXZlIGBVUkwoKWAgY2xhc3MgdG8gcmVzb2x2ZVxuICAvLyB0aGUgcGF0aCwgd2hpY2ggd2lsbCBhbHNvIGhhbmRsZSBgLi5gIGFuZCBgLmAgc2VnbWVudHM6XG4gIHJldHVybiBuZXcgVVJMKGBmaWxlOiR7cGF0aH1gKS5wYXRobmFtZVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWZvcm0uZGl0by1zY3JvbGwtcGFyZW50KFxuICA6Y2xhc3M9XCJ7ICdkaXRvLWZvcm0tbmVzdGVkJzogaXNOZXN0ZWRSb3V0ZSB9XCJcbiAgOmRhdGEtcmVzb3VyY2U9XCJzb3VyY2VTY2hlbWEucGF0aFwiXG4pXG4gIC8vLSBPbmx5IHJlbmRlciBhIHJvdXRlci12aWV3IGhlcmUgaWYgdGhpcyBpc24ndCB0aGUgbGFzdCBkYXRhIHJvdXRlIGFuZCBub3QgYVxuICAvLy0gbmVzdGVkIGZvcm0gcm91dGUsIHdoaWNoIHdpbGwgYXBwZWFyIGVsc2V3aGVyZSBpbiBpdHMgb3duIHZpZXcuXG4gIFJvdXRlclZpZXcoXG4gICAgdi1pZj1cIiFpc0xhc3RVbm5lc3RlZFJvdXRlICYmICFpc05lc3RlZFJvdXRlXCJcbiAgICB2LXNob3c9XCIhaXNBY3RpdmVSb3V0ZVwiXG4gIClcbiAgLy8tIE5PVEU6IE5lc3RlZCBmb3JtIGNvbXBvbmVudHMgYXJlIGtlcHQgYWxpdmUgYnkgdXNpbmcgYHYtc2hvd2AgaW5zdGVhZCBvZlxuICAvLy0gYHYtaWZgIGhlcmUsIHNvIGV2ZW50IGhhbmRsaW5nIGFuZCBvdGhlciB0aGluZ3Mgc3RpbGwgd29yayB3aXRoIG5lc3RlZFxuICAvLy0gZWRpdGluZy5cbiAgRGl0b0Zvcm1Jbm5lcihcbiAgICB2LXNob3c9XCJpc0FjdGl2ZVJvdXRlXCJcbiAgICA6bmVzdGVkPVwiaXNOZXN0ZWRSb3V0ZVwiXG4gIClcbiAgICAvLy0gUHJldmVudCBpbXBsaWNpdCBzdWJtaXNzaW9uIG9mIHRoZSBmb3JtLCBmb3IgZXhhbXBsZSB3aGVuIHR5cGluZyBlbnRlclxuICAgIC8vLSBpbiBhbiBpbnB1dCBmaWVsZC5cbiAgICAvLy0gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzUxNTA3ODA2XG4gICAgYnV0dG9uKFxuICAgICAgdi1zaG93PVwiZmFsc2VcIlxuICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICBkaXNhYmxlZFxuICAgIClcbiAgICBEaXRvU2NoZW1hKFxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpwYWRkaW5nPVwiaXNOZXN0ZWRSb3V0ZSA/ICduZXN0ZWQnIDogJ3Jvb3QnXCJcbiAgICAgIDphY3RpdmU9XCJpc0FjdGl2ZVJvdXRlXCJcbiAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICA6c2Nyb2xsYWJsZT1cIiFpc05lc3RlZFJvdXRlXCJcbiAgICAgIGdlbmVyYXRlTGFiZWxzXG4gICAgKVxuICAgICAgdGVtcGxhdGUoI2J1dHRvbnMpXG4gICAgICAgIERpdG9CdXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZC5kaXRvLWJ1dHRvbnMtbGFyZ2UuZGl0by1idXR0b25zLW1haW4oXG4gICAgICAgICAgOmNsYXNzPVwieyAnZGl0by1idXR0b25zLXN0aWNreSc6ICFpc05lc3RlZFJvdXRlIH1cIlxuICAgICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGNsb25lLCBjYXBpdGFsaXplLCBwYXJzZURhdGFQYXRoLCBhc3NpZ25EZWVwbHkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBSb3V0ZU1peGluIGZyb20gJy4uL21peGlucy9Sb3V0ZU1peGluLmpzJ1xuaW1wb3J0IFJlc291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1Jlc291cmNlTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRSZXNvdXJjZSwgZ2V0TWVtYmVyUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7IGdldEJ1dHRvblNjaGVtYXMsIGlzT2JqZWN0U291cmNlIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgcmVzb2x2ZVBhdGggfSBmcm9tICcuLi91dGlscy9wYXRoLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9Gb3JtJywge1xuICBtaXhpbnM6IFtSb3V0ZU1peGluLCBSZXNvdXJjZU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjcmVhdGVkRGF0YTogbnVsbCxcbiAgICAgIGNsb25lZERhdGE6IHVuZGVmaW5lZCxcbiAgICAgIHNvdXJjZUtleTogbnVsbCxcbiAgICAgIGlzRm9ybTogdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHZlcmJzKCkge1xuICAgICAgLy8gQWRkIHN1Ym1pdCAvIHN1Ym1pdHRlZCB0byB0aGUgdmVyYnMgcmV0dXJuZWQgYnkgUmVzb3VyY2VNaXhpblxuICAgICAgLy8gTk9URTogVGhlc2UgZ2V0IHBhc3NlZCBvbiB0byBjaGlsZHJlbiB0aHJvdWdoOlxuICAgICAgLy8gYHByb3ZpZGUoKSAuLi4geyAkdmVyYnM6ICgpID0+IHRoaXMudmVyYnMgfWAgaW4gUmVzb3VyY2VNaXhpblxuICAgICAgY29uc3QgdmVyYnMgPSB0aGlzLmdldFZlcmJzKClcbiAgICAgIGNvbnN0IHsgaXNDcmVhdGluZywgcHJvdmlkZXNEYXRhIH0gPSB0aGlzXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi52ZXJicyxcbiAgICAgICAgc3VibWl0OiBpc0NyZWF0aW5nID8gdmVyYnMuY3JlYXRlIDogdmVyYnMuc2F2ZSxcbiAgICAgICAgc3VibWl0dGVkOiBpc0NyZWF0aW5nID8gdmVyYnMuY3JlYXRlZCA6IHZlcmJzLnNhdmVkLFxuICAgICAgICBjYW5jZWw6IHByb3ZpZGVzRGF0YSA/IHZlcmJzLmNhbmNlbCA6IHZlcmJzLmNsb3NlLFxuICAgICAgICBjYW5jZWxsZWQ6IHByb3ZpZGVzRGF0YSA/IHZlcmJzLmNhbmNlbGxlZCA6IHZlcmJzLmNsb3NlZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRJdGVtRm9ybVNjaGVtYShcbiAgICAgICAgdGhpcy5zb3VyY2VTY2hlbWEsXG4gICAgICAgIHRoaXMuZGF0YSB8fCAoXG4gICAgICAgICAgdGhpcy5jcmVhdGlvblR5cGVcbiAgICAgICAgICAgID8gLy8gSWYgdGhlcmUgaXMgbm8gZGF0YSB5ZXQgYnV0IHRoZSB0eXBlIHRvIGNyZWF0ZSBhIG5ldyBpdGVtIGlzXG4gICAgICAgICAgICAgIC8vIGlzIHNwZWNpZmllZCwgcHJvdmlkZSBhIHRlbXBvcmFyeSBlbXB0eSBvYmplY3Qgd2l0aCBqdXN0IHRoZVxuICAgICAgICAgICAgICAvLyB0eXBlIHNldCwgc28gYGdldEl0ZW1Gb3JtU2NoZW1hKClgIGNhbiBkZXRlcm1pbmUgdGhlIGZvcm0uXG4gICAgICAgICAgICAgIHsgdHlwZTogdGhpcy5jcmVhdGlvblR5cGUgfVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICksXG4gICAgICAgIHRoaXMuY29udGV4dFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXMoXG4gICAgICAgIGFzc2lnbkRlZXBseShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjYW5jZWw6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLmNhbmNlbCgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHN1Ym1pdDogIXRoaXMuaXNNdXRhdGluZyAmJiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdzdWJtaXQnLFxuICAgICAgICAgICAgICAvLyBTdWJtaXQgYnV0dG9ucyBjbG9zZSB0aGUgZm9ybSBieSBkZWZhdWx0OlxuICAgICAgICAgICAgICBjbG9zZUZvcm06IHRydWUsXG4gICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiAoeyBjb21wb25lbnQ6IGJ1dHRvbiB9KSA9PiBidXR0b24uc3VibWl0KClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy5zY2hlbWEuYnV0dG9uc1xuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzQWN0aXZlUm91dGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0xhc3RSb3V0ZSB8fCB0aGlzLmlzTGFzdFVubmVzdGVkUm91dGVcbiAgICB9LFxuXG4gICAgaXNUcmFuc2llbnQoKSB7XG4gICAgICByZXR1cm4gIXRoaXMucHJvdmlkZXNEYXRhXG4gICAgfSxcblxuICAgIGlzQ3JlYXRpbmcoKSB7XG4gICAgICAvLyB0aGlzLnBhcmFtIGlzIGluaGVyaXRlZCBmcm9tIFJvdXRlTWl4aW5cbiAgICAgIHJldHVybiB0aGlzLnBhcmFtID09PSAnY3JlYXRlJ1xuICAgIH0sXG5cbiAgICBpc0RpcnR5KCkge1xuICAgICAgcmV0dXJuICF0aGlzLmlzTXV0YXRpbmcgJiYgISF0aGlzLm1haW5TY2hlbWFDb21wb25lbnQ/LmlzRGlydHlcbiAgICB9LFxuXG4gICAgaXNNdXRhdGluZygpIHtcbiAgICAgIC8vIFdoZW4gYHNvdXJjZVNjaGVtYS5tdXRhdGVgIGlzIHRydWUsIHRoZSBmb3JtIGVkaXRzIHRoZSBpbmhlcml0ZWQgZGF0YVxuICAgICAgLy8gZGlyZWN0bHkgaW5zdGVhZCBvZiBtYWtpbmcgYSBjb3B5IGZvciBwZXJzaXN0ZW5jZSB1cG9uIHN1Ym1pc3Npb24uXG4gICAgICAvLyBTZWUgYGluaGVyaXRlZERhdGEoKWAgY29tcHV0ZWQgcHJvcGVydHkgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgIHJldHVybiAhIXRoaXMuc291cmNlU2NoZW1hLm11dGF0ZVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZFRhYigpIHtcbiAgICAgIHJldHVybiB0aGlzLm1haW5TY2hlbWFDb21wb25lbnQ/LnNlbGVjdGVkVGFiIHx8IG51bGxcbiAgICB9LFxuXG4gICAgY3JlYXRpb25UeXBlKCkge1xuICAgICAgLy8gVGhlIHR5cGUgb2YgZm9ybSB0byBjcmVhdGUsIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBmb3JtcyB0byBjaG9vc2UgZnJvbS5cbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5xdWVyeS50eXBlXG4gICAgfSxcblxuICAgIGl0ZW1JZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogdGhpcy5wYXJhbSA/PyBudWxsXG4gICAgfSxcblxuICAgIG1ldGhvZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmcgPyAncG9zdCcgOiAncGF0Y2gnXG4gICAgfSxcblxuICAgIGJyZWFkY3J1bWJQcmVmaXgoKSB7XG4gICAgICByZXR1cm4gY2FwaXRhbGl6ZSh0aGlzLmlzQ3JlYXRpbmcgPyB0aGlzLnZlcmJzLmNyZWF0ZSA6IHRoaXMudmVyYnMuZWRpdClcbiAgICB9LFxuXG4gICAgZGF0YSgpIHtcbiAgICAgIC8vIFJldHVybiBkaWZmZXJlbnQgZGF0YSBcImNvbnRhaW5lcnNcIiBiYXNlZCBvbiBkaWZmZXJlbnQgc2NlbmFyaW9zOlxuICAgICAgLy8gMS4gY3JlYXRlZERhdGEsIGlmIHdlJ3JlIGluIGEgZm9ybSBmb3IgYSBuZXdseSBjcmVhdGVkIG9iamVjdC5cbiAgICAgIC8vIDIuIGxvYWRlZERhdGEsIGlmIHRoZSBmb3JtIGl0c2VsZiBpcyB0aGUgcm9vdCBvZiB0aGUgZGF0YSAoZS5nLiB3aGVuXG4gICAgICAvLyAgICBkaXJlY3RseSBsb2FkaW5nIGFuIGVkaXRpbmcgcm9vdCkuXG4gICAgICAvLyAzLiBUaGUgZGF0YSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50LCB3aGljaCBpdHNlbGYgbWF5IGJlIGVpdGhlciBhXG4gICAgICAvLyAgICB2aWV3IHRoYXQgbG9hZGVkIHRoZSBkYXRhLCBvciBhIGZvcm0gdGhhdCBlaXRoZXIgbG9hZGVkIHRoZSBkYXRhLCBvclxuICAgICAgLy8gICAgYWxzbyBpbmhlcml0ZWQgaXQgZnJvbSBpdHMgcGFyZW50LiBOb3RlIHRoYXQgd2UgdXNlIGEgY2xvbmUgb2YgaXQsXG4gICAgICAvLyAgICBzbywgZGF0YSBjaGFuZ2VzIGFyZW4ndCBhcHBsaWVkIHVudGlsIHNldFNvdXJjZURhdGEoKSBpcyBjYWxsZWQuXG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVkRGF0YSB8fCB0aGlzLmxvYWRlZERhdGEgfHwgdGhpcy5pbmhlcml0ZWREYXRhIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXREYXRhUGF0aEZyb20odGhpcy5kYXRhQ29tcG9uZW50KVxuICAgIH0sXG5cbiAgICBzb3VyY2VEYXRhKCkge1xuICAgICAgLy8gUG9zc2libGUgcGFyZW50cyBhcmUgRGl0b0Zvcm0gZm9yIGZvcm1zLCBvciBEaXRvVmlldyBmb3Igcm9vdCBsaXN0cy5cbiAgICAgIC8vIEJvdGggaGF2ZSBhIGRhdGEgcHJvcGVydHkgd2hpY2ggYWJzdHJhY3RzIGF3YXkgbG9hZGluZyBhbmQgaW5oZXJpdGluZ1xuICAgICAgLy8gb2YgZGF0YS5cbiAgICAgIC8vIEZvcm1zIHRoYXQgYXJlIGFib3V0IHRvIGJlIGRlc3Ryb3llZCBkdWUgdG8gbmF2aWdhdGlvbiBsb29zZSB0aGVpclxuICAgICAgLy8gcm91dGUtcmVjb3JkLCBidXQgbWlnaHQgc3RpbGwgdHJpZ2dlciB0aGlzIGdldHRlci4gRmlsdGVyIHRob3NlIG91dC5cbiAgICAgIGxldCBkYXRhID0gdGhpcy5yb3V0ZVJlY29yZCA/IHRoaXMucGFyZW50Um91dGVDb21wb25lbnQuZGF0YSA6IG51bGxcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIC8vIEhhbmRsZSBuZXN0ZWQgZGF0YSBieSBzcGxpdHRpbmcgdGhlIGRhdGFQYXRoLCBpdGVyYXRlIHRocm91Z2ggdGhlXG4gICAgICAgIC8vIGFjdHVhbCBkYXRhIGFuZCBsb29rIG5lc3QgY2hpbGQtZGF0YSB1cC5cbiAgICAgICAgY29uc3QgZGF0YVBhcnRzID0gcGFyc2VEYXRhUGF0aChcbiAgICAgICAgICB0aGlzLmdldERhdGFQYXRoRnJvbSh0aGlzLnBhcmVudFJvdXRlQ29tcG9uZW50KVxuICAgICAgICApXG4gICAgICAgIC8vIENvbXBhcmUgZGF0YVBhcnRzIGFnYWluc3QgbWF0Y2hlZCByb3V0ZVBhdGggcGFydHMsIHRvIGlkZW50aWZ5IHRob3NlXG4gICAgICAgIC8vIHBhcnRzIHRoYXQgbmVlZCB0byBiZSB0cmVhdGVkIGxpa2UgaWRzIGFuZCBtYXBwZWQgdG8gaW5kaWNlcyBpbiBkYXRhLlxuICAgICAgICBjb25zdCBwYXRoUGFydHMgPSB0aGlzLnJvdXRlUmVjb3JkLnBhdGguc3BsaXQoJy8nKVxuICAgICAgICBjb25zdCByb3V0ZVBhcnRzID0gcGF0aFBhcnRzLnNsaWNlKHBhdGhQYXJ0cy5sZW5ndGggLSBkYXRhUGFydHMubGVuZ3RoKVxuICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICAgICAgdGhpcy5zb3VyY2VLZXkgPSBudWxsXG4gICAgICAgIGNvbnN0IGxhc3REYXRhUGFydCA9IGRhdGFQYXJ0c1tkYXRhUGFydHMubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKSAmJiBsYXN0RGF0YVBhcnQgPT09ICdjcmVhdGUnKSB7XG4gICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBvYmplY3Qgc291cmNlIGFuZCBhcmUgY3JlYXRpbmcsIHRoZSBkYXRhUGF0aCBuZWVkcyB0b1xuICAgICAgICAgIC8vIGJlIHNob3J0ZW5lZCBieSB0aGUgJ2NyZWF0ZScgZW50cnkuIFRoaXMgaXNuJ3QgbmVlZGVkIGZvciBsaXN0XG4gICAgICAgICAgLy8gc291cmNlcywgYXMgdGhlcmUgdGhlIHBhcmFtZXRlciBpcyBhY3R1YWxseSBtYXBwZWQgdG8gdGhlIGl0ZW0gaWQuXG4gICAgICAgICAgZGF0YVBhcnRzLmxlbmd0aC0tXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBkYXRhUGFydHMubGVuZ3RoOyBpIDwgbCAmJiBkYXRhOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkYXRhUGFydCA9IGRhdGFQYXJ0c1tpXVxuICAgICAgICAgIC8vIElmIHRoaXMgaXMgYW4gOmlkIHBhcnQsIGZpbmQgdGhlIGluZGV4IG9mIHRoZSBpdGVtIHdpdGggZ2l2ZW4gaWQuXG4gICAgICAgICAgY29uc3Qga2V5ID0gL146aWQvLnRlc3Qocm91dGVQYXJ0c1tpXSlcbiAgICAgICAgICAgID8gZGF0YVBhcnQgPT09ICdjcmVhdGUnXG4gICAgICAgICAgICAgID8gbnVsbCAvLyBUaGVyZSdzIG5vIGluZGV4IGZvciBlbnRyaWVzIGFib3V0IHRvIGJlIGNyZWF0ZWRcbiAgICAgICAgICAgICAgOiB0aGlzLmZpbmRJdGVtSWRJbmRleCh0aGlzLnNvdXJjZVNjaGVtYSwgZGF0YSwgZGF0YVBhcnQpXG4gICAgICAgICAgICA6IGRhdGFQYXJ0XG4gICAgICAgICAgLy8gU2tpcCB0aGUgZmluYWwgbG9va3VwIGJ1dCByZW1lbWJlciBgc291cmNlS2V5YCwgYXMgd2Ugd2FudCB0aGVcbiAgICAgICAgICAvLyBwYXJlbnQgZGF0YSBzbyB3ZSBjYW4gcmVwbGFjZSB0aGUgZW50cnkgYXQgYHNvdXJjZUtleWAgb24gaXQuXG4gICAgICAgICAgaWYgKGkgPT09IGwgLSAxKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgICAgICAgdGhpcy5zb3VyY2VLZXkgPSBrZXlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0YSA9IGRhdGFba2V5XVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9LFxuXG4gICAgaW5oZXJpdGVkRGF0YSgpIHtcbiAgICAgIC8vIERhdGEgaW5oZXJpdGVkIGZyb20gcGFyZW50LCBhbmQgY2xvbmVkIHRvIHByb3RlY3QgYWdhaW5zdCByZWFjdGl2ZVxuICAgICAgLy8gY2hhbmdlcyB1bnRpbCBjaGFuZ2VzIGFyZSBhcHBsaWVkIHRocm91Z2ggc2V0U291cmNlRGF0YSgpLCB1bmxlc3NcbiAgICAgIC8vIGBzb3VyY2VTY2hlbWEubXV0YXRlYCBpcyB0cnVlLCBpbiB3aGljaCBjYXNlIGRhdGEgaXMgbXV0YXRlZCBkaXJlY3RseS5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pc1RyYW5zaWVudCAmJlxuICAgICAgICB0aGlzLmNsb25lZERhdGEgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICB0aGlzLnNvdXJjZURhdGEgJiZcbiAgICAgICAgdGhpcy5zb3VyY2VLZXkgIT09IG51bGxcbiAgICAgICkge1xuICAgICAgICBsZXQgZGF0YSA9IHRoaXMuc291cmNlRGF0YVt0aGlzLnNvdXJjZUtleV1cbiAgICAgICAgaWYgKCF0aGlzLmlzTXV0YXRpbmcpIHtcbiAgICAgICAgICAvLyBVc2UgYSB0cmljayB0byBzdG9yZSBjbG9uZWQgaW5oZXJpdGVkIGRhdGEgaW4gY2xvbmVkRGF0YSwgdG8gbWFrZVxuICAgICAgICAgIC8vIGl0IHJlYWN0aXZlIGFuZCBwcmV2ZW50IGl0IGZyb20gYmVpbmcgY2xvbmVkIG11bHRpcGxlIHRpbWVzLlxuICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLXNpZGUtZWZmZWN0cy1pbi1jb21wdXRlZC1wcm9wZXJ0aWVzXG4gICAgICAgICAgdGhpcy5jbG9uZWREYXRhID0gZGF0YSA9IGNsb25lKGRhdGEpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGRhdGEgPT09IG51bGwgJiZcbiAgICAgICAgICAhdGhpcy5pc0NyZWF0aW5nICYmXG4gICAgICAgICAgaXNPYmplY3RTb3VyY2UodGhpcy5zb3VyY2VTY2hlbWEpXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIElmIGRhdGEgb2YgYW4gb2JqZWN0IHNvdXJjZSBpcyBudWxsLCByZWRpcmVjdCB0byBpdHMgY3JlYXRlIHJvdXRlLlxuICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLXNpZGUtZWZmZWN0cy1pbi1jb21wdXRlZC1wcm9wZXJ0aWVzXG4gICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goeyBwYXRoOiBgJHt0aGlzLnBhdGh9L2NyZWF0ZWAgfSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuY2xvbmVkRGF0YVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5oYXNEYXRhKClcbiAgICBoYXNEYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIGl0ZW1MYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEl0ZW1MYWJlbCh0aGlzLnNvdXJjZVNjaGVtYSwgdGhpcy5kYXRhLCB7IGV4dGVuZGVkOiB0cnVlIH0pXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJHJvdXRlOiB7XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMzM5MyNpc3N1ZWNvbW1lbnQtMTE1ODQ3MDE0OVxuICAgICAgZmx1c2g6ICdwb3N0JyxcbiAgICAgIGhhbmRsZXIodG8sIGZyb20pIHtcbiAgICAgICAgLy8gUmVsb2FkIGZvcm0gZGF0YSB3aGVuIG5hdmlnYXRpbmcgdG8gYSBkaWZmZXJlbnQgZW50aXR5IGluIHNhbWUgZm9ybS5cbiAgICAgICAgY29uc3QgcGFyYW0gPSB0aGlzLm1ldGE/LnBhcmFtXG4gICAgICAgIGlmIChcbiAgICAgICAgICBwYXJhbSAmJlxuICAgICAgICAgIHRoaXMucHJvdmlkZXNEYXRhICYmXG4gICAgICAgICAgLy8gVE9ETzogU2VlIGlmIHdlIGNhbiByZW1vdmUgdGhpcyBkdWUgdG8gYGZsdXNoOiAncG9zdCdgLlxuICAgICAgICAgIGZyb20ubWF0Y2hlZFswXS5wYXRoID09PSB0by5tYXRjaGVkWzBdLnBhdGggJiYgLy8gU3RheWluZyBvbiBzYW1lIGZvcm1cbiAgICAgICAgICBmcm9tLnBhcmFtc1twYXJhbV0gIT09ICdjcmVhdGUnICYmIC8vIEJ1dCBoYXZlbid0IGJlZW4gY3JlYXRpbmdcbiAgICAgICAgICB0by5wYXJhbXNbcGFyYW1dICE9PSBmcm9tLnBhcmFtc1twYXJhbV0gLy8gR29pbmcgdG8gYSBkaWZmZXJlbnQgZW50aXR5XG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMubG9hZERhdGEodHJ1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzb3VyY2VEYXRhOiAnY2xlYXJDbG9uZWREYXRhJyxcbiAgICAvLyBOZWVkZWQgZm9yIHRoZSAnY3JlYXRlJyByZWRpcmVjdCBpbiBgaW5oZXJpdGVkRGF0YSgpYCB0byB3b3JrOlxuICAgIGNyZWF0ZTogJ3NldHVwRGF0YSdcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZW1pdFNjaGVtYUV2ZW50KGV2ZW50LCBwYXJhbXMpIHtcbiAgICAgIHJldHVybiB0aGlzLm1haW5TY2hlbWFDb21wb25lbnQ/LmVtaXRFdmVudChldmVudCwgcGFyYW1zKVxuICAgIH0sXG5cbiAgICBnZXREYXRhUGF0aEZyb20ocm91dGVDb21wb25lbnQpIHtcbiAgICAgIC8vIEdldCB0aGUgZGF0YSBwYXRoIGJ5IGRlbm9ybWFsaXplUGF0aCB0aGUgcmVsYXRpdmUgcm91dGUgcGF0aFxuICAgICAgcmV0dXJuIHRoaXMuYXBpLmRlbm9ybWFsaXplUGF0aChcbiAgICAgICAgdGhpcy5wYXRoXG4gICAgICAgICAgLy8gRGl0b1ZpZXdzIGhhdmUgbmVzdGVkIHJvdXRlcywgc28gZG9uJ3QgcmVtb3ZlIHRoZWlyIHBhdGguXG4gICAgICAgICAgLnNsaWNlKChyb3V0ZUNvbXBvbmVudC5pc1ZpZXcgPyAwIDogcm91dGVDb21wb25lbnQucGF0aC5sZW5ndGgpICsgMSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uZ2V0UmVzb3VyY2UoKVxuICAgIGdldFJlc291cmNlKG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc291cmNlID0gUmVzb3VyY2VNaXhpbi5tZXRob2RzLmdldFJlc291cmNlLmNhbGwodGhpcywgb3B0aW9ucylcbiAgICAgIHJldHVybiBnZXRNZW1iZXJSZXNvdXJjZSh0aGlzLml0ZW1JZCwgcmVzb3VyY2UpIHx8IHJlc291cmNlXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLnNldHVwRGF0YSgpXG4gICAgc2V0dXBEYXRhKCkge1xuICAgICAgaWYgKHRoaXMuaXNDcmVhdGluZykge1xuICAgICAgICB0aGlzLmNyZWF0ZWREYXRhIHx8PSB0aGlzLmNyZWF0ZURhdGEodGhpcy5zY2hlbWEsIHRoaXMuY3JlYXRpb25UeXBlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0U291cmNlRGF0YShkYXRhKSB7XG4gICAgICBpZiAodGhpcy5zb3VyY2VEYXRhICYmIHRoaXMuc291cmNlS2V5ICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHsgbWFpblNjaGVtYUNvbXBvbmVudCB9ID0gdGhpc1xuICAgICAgICB0aGlzLnNvdXJjZURhdGFbdGhpcy5zb3VyY2VLZXldID1cbiAgICAgICAgICBtYWluU2NoZW1hQ29tcG9uZW50LmZpbHRlckRhdGEoZGF0YSkubG9jYWxEYXRhXG4gICAgICAgIG1haW5TY2hlbWFDb21wb25lbnQub25DaGFuZ2UoKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGFkZFNvdXJjZURhdGEoZGF0YSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKVxuICAgICAgICA/IHRoaXMuc2V0U291cmNlRGF0YShkYXRhKVxuICAgICAgICA6ICEhdGhpcy5zb3VyY2VEYXRhPy5wdXNoKGRhdGEpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmNsZWFyRGF0YSgpXG4gICAgY2xlYXJEYXRhKCkge1xuICAgICAgdGhpcy5zZXREYXRhKG51bGwpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLnNldERhdGEoKVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgLy8gc2V0RGF0YSgpIGlzIGNhbGxlZCBhZnRlciBzdWJtaXQgd2hlbiBkYXRhIGhhcyBjaGFuZ2VkLlxuICAgICAgaWYgKHRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgLy8gRm9yIGNvbXBvbmVudHMgd2l0aCB0cmFuc2llbnQgZGF0YSwgbW9kaWZ5IHRoaXMuc291cmNlRGF0YS5cbiAgICAgICAgdGhpcy5zZXRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNyZWF0ZWREYXRhID0gbnVsbFxuICAgICAgICB0aGlzLmxvYWRlZERhdGEgPSBkYXRhXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsZWFyQ2xvbmVkRGF0YSh0bywgZnJvbSkge1xuICAgICAgLy8gT25seSBjbGVhciBpZiB0aGUgd2F0Y2hlZCBzb3VyY2VEYXRhIGl0c2VsZiBjaGFuZ2VzIGluIHRoZSBmb3JtLlxuICAgICAgaWYgKHRvICE9PSBmcm9tKSB7XG4gICAgICAgIHRoaXMuY2xvbmVkRGF0YSA9IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jbG9zZSgpXG4gICAgfSxcblxuICAgIGFzeW5jIGNsb3NlKCkge1xuICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGUodGhpcy5wYXJlbnRSb3V0ZUNvbXBvbmVudC5wYXRoKVxuICAgIH0sXG5cbiAgICBnZXRTdWJtaXRWZXJiKHByZXNlbnQgPSB0cnVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgID8gcHJlc2VudFxuICAgICAgICAgID8gJ2NyZWF0ZSdcbiAgICAgICAgICA6ICdjcmVhdGVkJ1xuICAgICAgICA6IHByZXNlbnRcbiAgICAgICAgICA/ICdzdWJtaXQnXG4gICAgICAgICAgOiAnc3VibWl0dGVkJ1xuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXQoYnV0dG9uLCB7IHZhbGlkYXRlID0gdHJ1ZSwgY2xvc2VGb3JtID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgICBpZiAodmFsaWRhdGUgJiYgIXRoaXMudmFsaWRhdGVBbGwoKSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgZ2V0VmVyYiA9IHByZXNlbnQgPT4gdGhpcy52ZXJic1t0aGlzLmdldFN1Ym1pdFZlcmIocHJlc2VudCldXG5cbiAgICAgIC8vIEFsbG93IGJ1dHRvbnMgdG8gb3ZlcnJpZGUgYm90aCBtZXRob2QgYW5kIHJlc291cmNlIHBhdGggdG8gc3VibWl0IHRvOlxuICAgICAgbGV0IHsgbWV0aG9kIH0gPSB0aGlzXG4gICAgICBsZXQgcmVzb3VyY2UgPSB0aGlzLmdldFJlc291cmNlKHsgbWV0aG9kIH0pXG4gICAgICBjb25zdCBidXR0b25SZXNvdXJjZSA9IGdldFJlc291cmNlKGJ1dHRvbi5zY2hlbWEucmVzb3VyY2UsIHtcbiAgICAgICAgcGFyZW50OiByZXNvdXJjZVxuICAgICAgfSlcbiAgICAgIHJlc291cmNlID0gYnV0dG9uUmVzb3VyY2UgfHwgcmVzb3VyY2VcbiAgICAgIG1ldGhvZCA9IHJlc291cmNlPy5tZXRob2QgfHwgbWV0aG9kXG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZClcbiAgICAgIGxldCBzdWNjZXNzXG4gICAgICBpZiAoIWJ1dHRvblJlc291cmNlICYmIHRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuc3VibWl0VHJhbnNpZW50KGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgICAgIG9uU3VjY2VzczogKCkgPT4gdGhpcy5lbWl0U2NoZW1hRXZlbnQodGhpcy5nZXRTdWJtaXRWZXJiKCkpLFxuICAgICAgICAgIG9uRXJyb3I6IGVycm9yID0+XG4gICAgICAgICAgICB0aGlzLmVtaXRTY2hlbWFFdmVudCgnZXJyb3InLCB7XG4gICAgICAgICAgICAgIGNvbnRleHQ6IHsgZXJyb3IgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgbm90aWZ5U3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVyYiA9IGdldFZlcmIoZmFsc2UpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdpbmZvJyxcbiAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICAgICAgICAgID8gYEl0ZW0gJHtjYXBpdGFsaXplKHZlcmIpfWBcbiAgICAgICAgICAgICAgICA6IGBDaGFuZ2UgJHtjYXBpdGFsaXplKHZlcmIpfWAsXG4gICAgICAgICAgICAgIHRleHQ6IFtcbiAgICAgICAgICAgICAgICB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgICAgICAgICAgID8gYCR7dGhpcy5pdGVtTGFiZWx9IHdhcyAke3ZlcmJ9LmBcbiAgICAgICAgICAgICAgICAgIDogYENoYW5nZXMgdG8gJHt0aGlzLml0ZW1MYWJlbH0gd2VyZSAke3ZlcmJ9LmAsXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2llbnROb3RlXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSxcbiAgICAgICAgICBub3RpZnlFcnJvcjogZXJyb3IgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVyYiA9IGdldFZlcmIodHJ1ZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBFcnJvcicsXG4gICAgICAgICAgICAgIHRleHQ6IGBVbmFibGUgdG8gJHt2ZXJifSAke3RoaXMuaXRlbUxhYmVsfS5gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLnN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgICAgIHNldERhdGE6IHRydWUsXG4gICAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB0aGlzLmVtaXRTY2hlbWFFdmVudCh0aGlzLmdldFN1Ym1pdFZlcmIoKSksXG4gICAgICAgICAgb25FcnJvcjogZXJyb3IgPT5cbiAgICAgICAgICAgIHRoaXMuZW1pdFNjaGVtYUV2ZW50KCdlcnJvcicsIHtcbiAgICAgICAgICAgICAgY29udGV4dDogeyBlcnJvciB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBub3RpZnlTdWNjZXNzOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYihmYWxzZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICB0aXRsZTogYFN1Y2Nlc3NmdWxseSAke2NhcGl0YWxpemUodmVyYil9YCxcbiAgICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5pdGVtTGFiZWx9IHdhcyAke3ZlcmJ9LmBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSxcbiAgICAgICAgICBub3RpZnlFcnJvcjogZXJyb3IgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVyYiA9IGdldFZlcmIodHJ1ZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBFcnJvcicsXG4gICAgICAgICAgICAgIHRleHQ6IFtcbiAgICAgICAgICAgICAgICBgVW5hYmxlIHRvICR7dmVyYn0gJHt0aGlzLml0ZW1MYWJlbH0ke2Vycm9yID8gJzonIDogJyd9YCxcbiAgICAgICAgICAgICAgICBlcnJvcj8ubWVzc2FnZSB8fCBlcnJvclxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgIHRoaXMucmVzZXRWYWxpZGF0aW9uKClcbiAgICAgICAgaWYgKGNsb3NlRm9ybSB8fCBidXR0b24uY2xvc2VGb3JtKSB7XG4gICAgICAgICAgdGhpcy5jbG9zZSgpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0NyZWF0aW5nKSB7XG4gICAgICAgICAgLy8gUmVkaXJlY3QgdG8gdGhlIGZvcm0gZWRpdGluZyB0aGUgbmV3bHkgY3JlYXRlZCBpdGVtOlxuICAgICAgICAgIGNvbnN0IGlkID0gdGhpcy5nZXRJdGVtSWQodGhpcy5zY2hlbWEsIHRoaXMuZGF0YSlcbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucmVwbGFjZSh7XG4gICAgICAgICAgICBwYXRoOiByZXNvbHZlUGF0aChgJHt0aGlzLnBhdGh9Ly4uLyR7aWR9YCksXG4gICAgICAgICAgICAvLyBQcmVzZXJ2ZSBoYXNoIGZvciB0YWJzOlxuICAgICAgICAgICAgaGFzaDogdGhpcy4kcm91dGUuaGFzaFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWNjZXNzXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdFRyYW5zaWVudChidXR0b24sIF9yZXNvdXJjZSwgX21ldGhvZCwgZGF0YSwge1xuICAgICAgb25TdWNjZXNzLFxuICAgICAgb25FcnJvcixcbiAgICAgIG5vdGlmeVN1Y2Nlc3MsXG4gICAgICBub3RpZnlFcnJvclxuICAgIH0pIHtcbiAgICAgIC8vIEhhbmRsZSB0aGUgZGVmYXVsdCBcInN1Ym1pdHRpbmdcIiBvZiB0cmFuc2llbnQsIG5lc3RlZCBkYXRhOlxuICAgICAgY29uc3Qgc3VjY2VzcyA9IHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICA/IHRoaXMuYWRkU291cmNlRGF0YShkYXRhKVxuICAgICAgICA6IHRoaXMuc2V0U291cmNlRGF0YShkYXRhKVxuICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgb25TdWNjZXNzPy4oKVxuICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdzdWNjZXNzJywge1xuICAgICAgICAgIG5vdGlmeTogbm90aWZ5U3VjY2Vzc1xuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSAnQ291bGQgbm90IHN1Ym1pdCB0cmFuc2llbnQgaXRlbSdcbiAgICAgICAgb25FcnJvcj8uKGVycm9yKVxuICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdlcnJvcicsIHtcbiAgICAgICAgICBub3RpZnk6IG5vdGlmeUVycm9yLFxuICAgICAgICAgIGVycm9yXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICByZXR1cm4gc3VjY2Vzc1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi8vLSBVc2UgYSA8ZGl2PiBmb3IgbmVzdGVkIGZvcm1zLCBhcyB3ZSBzaG91bGRuJ3QgbmVzdCBhY3R1YWwgPGZvcm0+IHRhZ3MuXG5kaXYoXG4gIHYtaWY9XCJuZXN0ZWRcIlxuKVxuICBzbG90XG5mb3JtLmRpdG8tc2Nyb2xsLXBhcmVudChcbiAgdi1lbHNlXG4gIEBzdWJtaXQucHJldmVudFxuKVxuICBzbG90XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRm9ybUlubmVyJywge1xuICBwcm9wczoge1xuICAgIG5lc3RlZDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvRm9ybSBmcm9tICcuL0RpdG9Gb3JtLnZ1ZSdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRm9ybU5lc3RlZCcsIHtcbiAgZXh0ZW5kczogRGl0b0Zvcm1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG4uZGl0by1mb3JtLW5lc3RlZCB7XG4gIC8vIE5vIHNjcm9sbGluZyBpbnNpZGUgbmVzdGVkIGZvcm1zLCBhbmQgcHJldmVudCBvcGVuIC5tdWx0aXNlbGVjdCBmcm9tXG4gIC8vIGJlaW5nIGNyb3BwZWQuXG4gIG92ZXJmbG93OiB2aXNpYmxlO1xufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1lcnJvcnMoXG4gIHYtaWY9XCJlcnJvcnNcIlxuKVxuICB1bFxuICAgIGxpKFxuICAgICAgdi1mb3I9XCJlcnJvciBvZiBlcnJvcnNcIlxuICAgICkge3sgZXJyb3IgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgdGlwcHkgZnJvbSAndGlwcHkuanMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgbWFya1JhdyB9IGZyb20gJ3Z1ZSdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRXJyb3JzJywge1xuICBwcm9wczoge1xuICAgIGVycm9yczogeyB0eXBlOiBBcnJheSwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGlwOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgZXJyb3JzKCkge1xuICAgICAgdGhpcy4kbmV4dFRpY2sodGhpcy51cGRhdGVFcnJvcnMpXG4gICAgfVxuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICB0aGlzLnRpcD8uZGVzdHJveSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHVwZGF0ZUVycm9ycygpIHtcbiAgICAgIGxldCB7IHRpcCB9ID0gdGhpc1xuICAgICAgdGlwPy5oaWRlKClcbiAgICAgIGlmICh0aGlzLmVycm9ycykge1xuICAgICAgICB0aXAgPSB0aGlzLnRpcCA/Pz0gbWFya1Jhdyh0aXBweSh0aGlzLiRlbC5jbG9zZXN0KCcuZGl0by1jb250YWluZXInKSkpXG4gICAgICAgIHRpcC5zZXRQcm9wcyh7XG4gICAgICAgICAgY29udGVudDogdGhpcy5lcnJvcnMuam9pbignXFxuJyksXG4gICAgICAgICAgdGhlbWU6ICdlcnJvcicsXG4gICAgICAgICAgdHJpZ2dlcjogJ21hbnVhbCcsXG4gICAgICAgICAgYXBwZW5kVG86ICdwYXJlbnQnLFxuICAgICAgICAgIHBsYWNlbWVudDogJ2JvdHRvbS1zdGFydCcsXG4gICAgICAgICAgYW5pbWF0aW9uOiAnc2hpZnQtYXdheS1zdWJ0bGUnLFxuICAgICAgICAgIHBvcHBlck9wdGlvbnM6IHtcbiAgICAgICAgICAgIG1vZGlmaWVyczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2ZsaXAnLFxuICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICAgIGhpZGVPbkNsaWNrOiBmYWxzZSxcbiAgICAgICAgICBvZmZzZXQ6IFszLCAzXSwgLy8gMS8yIGZvcm0tc3BhY2luZ1xuICAgICAgICAgIHpJbmRleDogMVxuICAgICAgICB9KVxuICAgICAgICB0aXAucG9wcGVyLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsICgpID0+IHRpcC5oaWRlKCkpXG4gICAgICAgIHRpcC5zaG93KClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1lcnJvcnMge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcblxuICB1bCB7XG4gICAgY29sb3I6ICRjb2xvci1lcnJvcjtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1zY29wZXNcbiAgUm91dGVyTGluayhcbiAgICB2LWZvcj1cIihzY29wZSwga2V5KSBpbiBzY29wZXNcIlxuICAgIDprZXk9XCJrZXlcIlxuICAgIHYtc2xvdD1cInsgbmF2aWdhdGUgfVwiXG4gICAgOnRvPVwiZ2V0U2NvcGVMaW5rKHNjb3BlKVwiXG4gICAgY3VzdG9tXG4gIClcbiAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tc2VsZWN0ZWQnOiBzY29wZS5uYW1lID09PSBxdWVyeS5zY29wZSB9XCJcbiAgICAgIDp0aXRsZT1cInNjb3BlLmhpbnQgfHwgZ2V0TGFiZWwoc2NvcGUpXCJcbiAgICAgIEBjbGljaz1cIm5hdmlnYXRlXCJcbiAgICApIHt7IGdldExhYmVsKHNjb3BlKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1Njb3BlcycsIHtcbiAgcHJvcHM6IHtcbiAgICBxdWVyeTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2NvcGVzOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRTY29wZUxpbmsoc2NvcGUpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0geyAuLi50aGlzLnF1ZXJ5LCBzY29wZTogc2NvcGUubmFtZSB9XG4gICAgICBpZiAocXVlcnkucGFnZSkge1xuICAgICAgICBxdWVyeS5wYWdlID0gMFxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlMaW5rKHF1ZXJ5KVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXNjb3BlcyB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGRpc3BsYXk6IGZsZXg7XG5cbiAgLmRpdG8tYnV0dG9uIHtcbiAgICBAaW5jbHVkZSBlbGxpcHNpcztcblxuICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgLy8gQSBiaXQgbW9yZSB0aGFuIHRoZSB3aWR0aCBvZiBlbGxpcHNpcywgdG8gcHJldmVudCByZXBsYWNpbmcgc2hvcnQgd29yZHNcbiAgICAvLyB3aXRoIGVsbGlwc2lzLlxuICAgIG1pbi13aWR0aDogM2VtO1xuICAgIGZsZXg6IDAgMSBhdXRvO1xuXG4gICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAxZW07XG4gICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAxZW07XG4gICAgICBwYWRkaW5nLWxlZnQ6IDFlbTtcbiAgICB9XG5cbiAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDFlbTtcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAxZW07XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAxZW07XG4gICAgfVxuXG4gICAgJiArIC5kaXRvLWJ1dHRvbiB7XG4gICAgICBtYXJnaW4tbGVmdDogLTFweDtcbiAgICB9IC8vIERvbid0IGNvdmVyIHRoZSBmb2N1c2VkIGJvcmRlciBvZiBidXR0b25zOlxuICAgICY6Zm9jdXMge1xuICAgICAgei1pbmRleDogMTtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuUGFnaW5hdGlvbihcbiAgdi1tb2RlbDpwYWdlPVwicGFnZVwiXG4gIDpwYWdlU2l6ZT1cImxpbWl0XCJcbiAgOnRvdGFsPVwidG90YWxcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IFBhZ2luYXRpb24gfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1BhZ2luYXRpb24nLCB7XG4gIGNvbXBvbmVudHM6IHsgUGFnaW5hdGlvbiB9LFxuXG4gIHByb3BzOiB7XG4gICAgcXVlcnk6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGxpbWl0OiB7IHR5cGU6IE51bWJlciwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0b3RhbDogeyB0eXBlOiBOdW1iZXIsIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHBhZ2U6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuICgrdGhpcy5xdWVyeS5wYWdlIHx8IDApICsgMVxuICAgICAgfSxcblxuICAgICAgc2V0KHBhZ2UpIHtcbiAgICAgICAgaWYgKHRoaXMucGFnZSAhPT0gcGFnZSkge1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKFxuICAgICAgICAgICAgdGhpcy5nZXRRdWVyeUxpbmsoe1xuICAgICAgICAgICAgICAuLi50aGlzLnF1ZXJ5LFxuICAgICAgICAgICAgICBwYWdlOiBwYWdlIC0gMVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzRHJhZ2dpbmc6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXREcmFnZ2FibGVPcHRpb25zKGZvcmNlRmFsbGJhY2sgPSBmYWxzZSkge1xuICAgICAgY29uc3QgcHJlZml4ID0gJ2RpdG8tZHJhZ2dhYmxlJ1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYW5pbWF0aW9uOiAxNTAsXG4gICAgICAgIGhhbmRsZTogJy5kaXRvLWJ1dHRvbi1kcmFnJyxcbiAgICAgICAgZHJhZ0NsYXNzOiBgJHtwcmVmaXh9X19kcmFnYCxcbiAgICAgICAgY2hvc2VuQ2xhc3M6IGAke3ByZWZpeH1fX2Nob3NlbmAsXG4gICAgICAgIGdob3N0Q2xhc3M6IGAke3ByZWZpeH1fX2dob3N0YCxcbiAgICAgICAgZmFsbGJhY2tDbGFzczogYCR7cHJlZml4fV9fZmFsbGJhY2tgLFxuICAgICAgICBmb3JjZUZhbGxiYWNrLFxuICAgICAgICBvblN0YXJ0OiB0aGlzLm9uU3RhcnREcmFnLFxuICAgICAgICBvbkVuZDogdGhpcy5vbkVuZERyYWdcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25TdGFydERyYWcoKSB7XG4gICAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlXG4gICAgfSxcblxuICAgIG9uRW5kRHJhZyh7IG9sZEluZGV4LCBuZXdJbmRleCB9KSB7XG4gICAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZVxuICAgICAgaWYgKG9sZEluZGV4ICE9PSBuZXdJbmRleCkge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdXBkYXRlT3JkZXIoc291cmNlU2NoZW1hLCBsaXN0LCBwYWdpbmF0aW9uUmFuZ2UpIHtcbiAgICAgIGNvbnN0IHsgb3JkZXJLZXkgfSA9IHNvdXJjZVNjaGVtYVxuICAgICAgaWYgKG9yZGVyS2V5KSB7XG4gICAgICAgIC8vIFJlb3JkZXIgdGhlIGNoYW5nZWQgZW50cmllcyBieSB0aGVpciBvcmRlciBrZXksIHRha2luZyBwYWdpbmF0aW9uXG4gICAgICAgIC8vIG9mZnNldHMgaW50byBhY2NvdW50OlxuICAgICAgICBjb25zdCBvZmZzZXQgPSBwYWdpbmF0aW9uUmFuZ2U/LlswXSB8fCAwXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGxpc3RbaV1bb3JkZXJLZXldID0gaSArIG9mZnNldFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdFxuICAgIH1cbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXRyZWUtaXRlbShcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9YHtcbiAgICAnZGl0by1kcmFnZ2luZyc6IGlzRHJhZ2dpbmcsXG4gICAgJ2RpdG8tYWN0aXZlJzogYWN0aXZlXG4gIH1gXG4gIDpzdHlsZT1cImxldmVsID4gMCAmJiB7ICctLWxldmVsJzogbGV2ZWwgfVwiXG4gIDpkYXRhLXBhdGg9XCJwYXRoXCJcbilcbiAgLmRpdG8tdHJlZS1oZWFkZXIoXG4gICAgdi1pZj1cImxhYmVsXCJcbiAgKVxuICAgIC5kaXRvLXRyZWUtYnJhbmNoKFxuICAgICAgdi1pZj1cIm51bUVudHJpZXNcIlxuICAgICAgQGNsaWNrLnN0b3A9XCJvcGVuZWQgPSAhb3BlbmVkXCJcbiAgICApXG4gICAgICAuZGl0by1jaGV2cm9uKFxuICAgICAgICB2LWlmPVwibnVtRW50cmllc1wiXG4gICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IG9wZW5lZCB9XCJcbiAgICAgIClcbiAgICAgIC5kaXRvLXRyZWUtbGFiZWwoXG4gICAgICAgIHYtaHRtbD1cImxhYmVsXCJcbiAgICAgIClcbiAgICAgIC5kaXRvLXRyZWUtaW5mbyhcbiAgICAgICAgdi1pZj1cImRldGFpbHNcIlxuICAgICAgKSB7eyBkZXRhaWxzIH19XG4gICAgLmRpdG8tdHJlZS1sZWFmKFxuICAgICAgdi1lbHNlXG4gICAgKVxuICAgICAgLmRpdG8tdHJlZS1sYWJlbChcbiAgICAgICAgdi1odG1sPVwibGFiZWxcIlxuICAgICAgKVxuICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXNtYWxsKFxuICAgICAgdi1pZj1cImhhc0VkaXRCdXR0b25zXCJcbiAgICApXG4gICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1pZj1cImRyYWdnYWJsZVwiXG4gICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWlmPVwiZWRpdGFibGVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5lZGl0KVwiXG4gICAgICAgIEBjbGljaz1cIm9uRWRpdFwiXG4gICAgICApXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgICAgQGNsaWNrPVwib25EZWxldGVcIlxuICAgICAgKVxuICB0YWJsZS5kaXRvLXByb3BlcnRpZXMoXG4gICAgdi1pZj1cInByb3BlcnRpZXNcIlxuICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gIClcbiAgICB0cihcbiAgICAgIHYtZm9yPVwicHJvcGVydHkgaW4gcHJvcGVydGllc1wiXG4gICAgKVxuICAgICAgdGRcbiAgICAgICAgRGl0b0xhYmVsKFxuICAgICAgICAgIHYtaWY9XCJwcm9wZXJ0eS5sYWJlbCAhPT0gZmFsc2VcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cImdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpXCJcbiAgICAgICAgICA6bGFiZWw9XCJnZXRMYWJlbChwcm9wZXJ0eSlcIlxuICAgICAgICApXG4gICAgICBEaXRvVGFibGVDZWxsKFxuICAgICAgICA6Y2VsbD1cInByb3BlcnR5XCJcbiAgICAgICAgOnNjaGVtYT1cInByb3BlcnR5XCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSlcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIClcbiAgRGl0b0RyYWdnYWJsZShcbiAgICB2LWlmPVwiY2hpbGRyZW5TY2hlbWFcIlxuICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gICAgOm9wdGlvbnM9XCJnZXREcmFnZ2FibGVPcHRpb25zKHRydWUpXCJcbiAgICA6ZHJhZ2dhYmxlPVwiY2hpbGRyZW5EcmFnZ2FibGVcIlxuICAgIDptb2RlbFZhbHVlPVwidXBkYXRlT3JkZXIoY2hpbGRyZW5TY2hlbWEsIGNoaWxkcmVuTGlzdClcIlxuICAgIEB1cGRhdGU6bW9kZWxWYWx1ZT1cInZhbHVlID0+IChjaGlsZHJlbkxpc3QgPSB2YWx1ZSlcIlxuICApXG4gICAgRGl0b1RyZWVJdGVtKFxuICAgICAgdi1mb3I9XCIoaXRlbSwgaW5kZXgpIGluIGNoaWxkcmVuSXRlbXNcIlxuICAgICAgOmtleT1cImdldEl0ZW1VaWQoY2hpbGRyZW5TY2hlbWEsIGl0ZW0uZGF0YSlcIlxuICAgICAgOnNjaGVtYT1cImNoaWxkcmVuU2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImdldEl0ZW1EYXRhUGF0aChjaGlsZHJlblNjaGVtYSwgaW5kZXgpXCJcbiAgICAgIDpkYXRhPVwiaXRlbS5kYXRhXCJcbiAgICAgIDpwYXRoPVwiaXRlbS5wYXRoXCJcbiAgICAgIDpvcGVuPVwiaXRlbS5vcGVuXCJcbiAgICAgIDphY3RpdmU9XCJpdGVtLmFjdGl2ZVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiY2hpbGRyZW5EcmFnZ2FibGVcIlxuICAgICAgOmxhYmVsPVwiZ2V0SXRlbUxhYmVsKGNoaWxkcmVuU2NoZW1hLCBpdGVtLmRhdGEsIHsgaW5kZXggfSlcIlxuICAgICAgOmxldmVsPVwibGV2ZWwgKyAxXCJcbiAgICApXG4gICAgLy8tIFRPRE86IENvbnZlcnQgZGl0by10cmVlLWl0ZW0gdG8gdXNlIGRpdG8tbGFiZWwgaW50ZXJuYWxseSwgYW5kIHRoZW5cbiAgICAvLy0gcGFzcyBgYXNPYmplY3Q6IHRydWVgIGluIHRoZSBgZ2V0SXRlbUxhYmVsKClgIGNhbGwgYWJvdmUuXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBJdGVtTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0l0ZW1NaXhpbidcbmltcG9ydCBTb3J0YWJsZU1peGluIGZyb20gJy4uL21peGlucy9Tb3J0YWJsZU1peGluLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGdldE5hbWVkU2NoZW1hcywgaGFzRm9ybVNjaGVtYSB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvVHJlZUl0ZW0nLCB7XG4gIG1peGluczogW0l0ZW1NaXhpbiwgU29ydGFibGVNaXhpbl0sXG4gIGVtaXRzOiBbJ3VwZGF0ZTpkYXRhJ10sXG4gIGluamVjdDogWydjb250YWluZXInXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogW0FycmF5LCBPYmplY3RdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgcGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgb3BlbjogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGFjdGl2ZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRyYWdnYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGxhYmVsOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGxldmVsOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3BlbmVkOiB0aGlzLm9wZW4gfHwgdGhpcy5zY2hlbWEub3BlblxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG1ldGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXIubWV0YVxuICAgIH0sXG5cbiAgICBzdG9yZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lci5zdG9yZVxuICAgIH0sXG5cbiAgICBkaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lci5kaXNhYmxlZFxuICAgIH0sXG5cbiAgICBuZXN0ZWRNZXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy5tZXRhLFxuICAgICAgICBzY2hlbWE6IHRoaXMuc2NoZW1hXG4gICAgICB9XG4gICAgfSxcblxuICAgIHByb3BlcnRpZXMoKSB7XG4gICAgICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKHRoaXMuc2NoZW1hLnByb3BlcnRpZXMpXG4gICAgfSxcblxuICAgIC8vIFRPRE86IFNob3VsZCB0aGlzIGJlIG5hbWVkIGBzb3VyY2VTY2hlbWFgIGluc3RlYWQ/IFVzZSBTb3VyY2VNaXhpbj9cbiAgICBjaGlsZHJlblNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5jaGlsZHJlblxuICAgIH0sXG5cbiAgICBjaGlsZHJlbkxpc3Q6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuY2hpbGRyZW5TY2hlbWE/Lm5hbWVcbiAgICAgICAgcmV0dXJuIG5hbWUgJiYgdGhpcy5kYXRhW25hbWVdXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuY2hpbGRyZW5TY2hlbWE/Lm5hbWVcbiAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZU9yZGVyKHRoaXMuY2hpbGRyZW5TY2hlbWEsIHZhbHVlKVxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tbXV0YXRpbmctcHJvcHNcbiAgICAgICAgICB0aGlzLmRhdGFbbmFtZV0gPSB2YWx1ZVxuICAgICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpkYXRhJywgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2hpbGRyZW5EcmFnZ2FibGUoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmNoaWxkcmVuTGlzdD8ubGVuZ3RoID4gMSAmJlxuICAgICAgICB0aGlzLmdldFNjaGVtYVZhbHVlKCdkcmFnZ2FibGUnLCB7XG4gICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICBzY2hlbWE6IHRoaXMuY2hpbGRyZW5TY2hlbWFcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgbnVtQ2hpbGRyZW4oKSB7XG4gICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbkxpc3Q/Lmxlbmd0aCB8fCAwXG4gICAgfSxcblxuICAgIG51bVByb3BlcnRpZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzPy5sZW5ndGggfHwgMFxuICAgIH0sXG5cbiAgICBudW1FbnRyaWVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMubnVtUHJvcGVydGllcyArIHRoaXMubnVtQ2hpbGRyZW5cbiAgICB9LFxuXG4gICAgY2hpbGRyZW5JdGVtcygpIHtcbiAgICAgIGNvbnN0IHsgY2hpbGRyZW5TY2hlbWEsIGNoaWxkcmVuTGlzdCB9ID0gdGhpc1xuICAgICAgaWYgKGNoaWxkcmVuU2NoZW1hICYmIGNoaWxkcmVuTGlzdCkge1xuICAgICAgICBjb25zdCB7IGVkaXRQYXRoIH0gPSB0aGlzLmNvbnRhaW5lclxuICAgICAgICBjb25zdCBjaGlsZHJlbk9wZW4gPSAhdGhpcy5wYXRoICYmIGNoaWxkcmVuU2NoZW1hLm9wZW5cbiAgICAgICAgLy8gQnVpbGQgYSBjaGlsZHJlbiBsaXN0IHdpdGggY2hpbGQgbWV0YSBpbmZvcm1hdGlvbiBmb3IgdGhlIHRlbXBsYXRlLlxuICAgICAgICByZXR1cm4gY2hpbGRyZW5MaXN0Lm1hcCgoZGF0YSwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCBwYXRoID0gKFxuICAgICAgICAgICAgY2hpbGRyZW5TY2hlbWEucGF0aCAmJlxuICAgICAgICAgICAgYCR7dGhpcy5wYXRofS8ke2NoaWxkcmVuU2NoZW1hLnBhdGh9LyR7aW5kZXh9YFxuICAgICAgICAgIClcbiAgICAgICAgICBjb25zdCBvcGVuID0gKFxuICAgICAgICAgICAgY2hpbGRyZW5PcGVuIHx8XG4gICAgICAgICAgICAvLyBPbmx5IGNvdW50IGFzIFwiaW4gZWRpdCBwYXRoXCIgd2hlbiBpdCdzIG5vdCB0aGUgZnVsbCBlZGl0IHBhdGguXG4gICAgICAgICAgICBlZGl0UGF0aC5zdGFydHNXaXRoKHBhdGgpICYmIHBhdGgubGVuZ3RoIDwgZWRpdFBhdGgubGVuZ3RoXG4gICAgICAgICAgKVxuICAgICAgICAgIGNvbnN0IGFjdGl2ZSA9IGVkaXRQYXRoID09PSBwYXRoXG4gICAgICAgICAgcmV0dXJuIHsgZGF0YSwgcGF0aCwgb3BlbiwgYWN0aXZlIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXVxuICAgIH0sXG5cbiAgICBkZXRhaWxzKCkge1xuICAgICAgY29uc3QgeyBudW1DaGlsZHJlbiB9ID0gdGhpc1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgbnVtQ2hpbGRyZW4gJiZcbiAgICAgICAgYCR7bnVtQ2hpbGRyZW59ICR7XG4gICAgICAgICAgbnVtQ2hpbGRyZW4gPT09IDEgPyAnaXRlbScgOiAnaXRlbXMnXG4gICAgICAgIH1gXG4gICAgICApXG4gICAgfSxcblxuICAgIGhhc0VkaXRCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZHJhZ2dhYmxlIHx8IHRoaXMuZWRpdGFibGUgfHwgdGhpcy5kZWxldGFibGVcbiAgICB9LFxuXG4gICAgLy8gVE9ETzogU3VwcG9ydCBjcmVhdGFibGUhXG4gICAgLy8gVE9ETzogQWRkIHN1cHBvcnQgZm9yIGNyZWF0YWJsZSwgZWRpdGFibGUgYW5kIGRlbGV0YWJsZSBvdmVycmlkZXMgb24gdGhlXG4gICAgLy8gYXNzb2NpYXRlZCBmb3JtcywganVzdCBsaWtlIGluIGBUeXBlTGlzdGAgYW5kIGBUeXBlT2JqZWN0YCwgdGhyb3VnaFxuICAgIC8vIGBEaXRvRWRpdEJ1dHRvbnNgLiBJdCB3b3VsZCBiZSBiZXN0IHRvIHVzZSBgRGl0b0VkaXRCdXR0b25zYCBoZXJlIHRvby5cbiAgICBjcmVhdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjcmVhdGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoY3JlYXRhYmxlKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGFibGUgJiYgaGFzRm9ybVNjaGVtYSh0aGlzLnNjaGVtYSlcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGVkaXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZWRpdGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZWRpdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGVkaXRhYmxlICYmIGhhc0Zvcm1TY2hlbWEodGhpcy5zY2hlbWEpXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkZWxldGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWxldGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KSB7XG4gICAgICByZXR1cm4gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgcHJvcGVydHkubmFtZSlcbiAgICB9LFxuXG4gICAgZWRpdFBhdGgocGF0aCkge1xuICAgICAgLy8gQWxsIHdlIGdvdCB0byBkbyBpcyBwdXNoIHRoZSByaWdodCBlZGl0IHBhdGggdG8gdGhlIHJvdXRlciwgdGhlIHJlc3RcbiAgICAgIC8vIGlzIGhhbmRsZWQgYnkgb3VyIHJvdXRlcywgYWxsb3dpbmcgcmVsb2FkcyBhcyB3ZWxsLlxuICAgICAgdGhpcy4kcm91dGVyLnB1c2goe1xuICAgICAgICBwYXRoOiBgJHt0aGlzLmNvbnRhaW5lci5wYXRofSR7cGF0aH1gLFxuICAgICAgICAvLyBQcmVzZXJ2ZSBjdXJyZW50IHF1ZXJ5XG4gICAgICAgIHF1ZXJ5OiB0aGlzLiRyb3V0ZS5xdWVyeVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb25FZGl0KCkge1xuICAgICAgdGhpcy5lZGl0UGF0aCh0aGlzLnBhdGgpXG4gICAgfSxcblxuICAgIG9uRGVsZXRlKCkge1xuICAgICAgLy8gVE9ETzogSW1wbGVtZW50IVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyLm9uQ2hhbmdlKClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlXG4gICAgb25FbmREcmFnKGV2ZW50KSB7XG4gICAgICBTb3J0YWJsZU1peGluLm1ldGhvZHMub25FbmREcmFnLmNhbGwodGhpcywgZXZlbnQpXG4gICAgICBjb25zdCB7IGl0ZW0gfSA9IGV2ZW50XG4gICAgICAvLyBQcmVzZXJ2ZSBhY3RpdmUgc3RhdGUgb2YgZWRpdGVkIHN1Yi1pdGVtcywgYnkgZWRpdGluZyB0aGVpciBuZXcgcGF0aC5cbiAgICAgIGlmIChpdGVtLmNsYXNzTGlzdC5jb250YWlucygnZGl0by1hY3RpdmUnKSkge1xuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgdGhpcy5lZGl0UGF0aChldmVudC5pdGVtLmRhdGFzZXQucGF0aClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10cmVlLWl0ZW0ge1xuICAtLWNoZXZyb24taW5kZW50OiAjeyRjaGV2cm9uLWluZGVudH07XG5cbiAgPiAuZGl0by10cmVlLWhlYWRlciB7XG4gICAgPiAuZGl0by10cmVlLWJyYW5jaCxcbiAgICA+IC5kaXRvLXRyZWUtbGVhZiB7XG4gICAgICAvLyBVc2UgYC0tbGV2ZWxgIENTUyB2YXJpYWJsZSB0byBjYWxjdWxhdGVkIHRoZSBhY2N1bXVsYXRlZCBpbmRlbnRcbiAgICAgIC8vIHBhZGRpbmcgZGlyZWN0bHkgaW5zdGVhZCBvZiBoYXZpbmcgaXQgYWNjdW11bGF0ZSBpbiBuZXN0ZWQgQ1NTLlxuICAgICAgLy8gVGhpcyB3YXksIHdlIGNhbiBrZWVwIHRoZSAuZGl0by1hY3RpdmUgYXJlYSBjb3ZlciB0aGUgZnVsbCB3aWR0aDpcbiAgICAgIHBhZGRpbmctbGVmdDogY2FsYyh2YXIoLS1jaGV2cm9uLWluZGVudCkgKiAodmFyKC0tbGV2ZWwsIDEpIC0gMSkpO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLXRyZWUtYnJhbmNoIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gIH1cblxuICAuZGl0by10cmVlLWhlYWRlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIH1cblxuICAuZGl0by10cmVlLWJyYW5jaCxcbiAgLmRpdG8tdHJlZS1sZWFmIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXg6IGF1dG87XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1hcmdpbjogMXB4IDA7XG4gICAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG4gIH1cblxuICAuZGl0by10cmVlLWxhYmVsLFxuICAuZGl0by10cmVlLWluZm8ge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIH1cblxuICAuZGl0by10cmVlLWluZm8ge1xuICAgIHBhZGRpbmctbGVmdDogMC4zNWVtO1xuICAgIGNvbG9yOiByZ2JhKCRjb2xvci1ibGFjaywgMC4yKTtcbiAgfVxuXG4gIC5kaXRvLWJ1dHRvbnMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXJnaW46IDFweCAwIDFweCAxZW07XG4gIH1cblxuICAuZGl0by10cmVlLWhlYWRlcjpob3ZlciB7XG4gICAgPiAuZGl0by1idXR0b25zIHtcbiAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gICAgfSAvLyBIaWRlIGJ1dHRvbnMgZHVyaW5nIGRyYWdnaW5nXG4gIH1cblxuICAmLmRpdG8tZHJhZ2dpbmcge1xuICAgIC5kaXRvLXRyZWUtaGVhZGVyIHtcbiAgICAgID4gLmRpdG8tYnV0dG9ucyB7XG4gICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmLmRpdG8tYWN0aXZlIHtcbiAgICA+IC5kaXRvLXRyZWUtaGVhZGVyIHtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgICBwYWRkaW5nOiAwICRpbnB1dC1wYWRkaW5nLWhvcjtcbiAgICAgIG1hcmdpbjogMCAoLSRpbnB1dC1wYWRkaW5nLWhvcik7XG5cbiAgICAgID4gLmRpdG8tdHJlZS1icmFuY2gge1xuICAgICAgICA+IC5kaXRvLWNoZXZyb246OmJlZm9yZSB7XG4gICAgICAgICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICA+ICogPiAuZGl0by10cmVlLWxhYmVsIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuZGl0by1wcm9wZXJ0aWVzIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4tbGVmdDogJGNoZXZyb24taW5kZW50O1xuXG4gICAgPiB0ciB7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG4gICAgfVxuXG4gICAgLmRpdG8tbGFiZWwge1xuICAgICAgbWFyZ2luOiAwO1xuXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6ICc6ICc7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICB0clxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1mb3I9XCJjb2x1bW4gaW4gY29sdW1uc1wiXG4gICAgKVxuICAgICAgdGgoXG4gICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEoY29sdW1uKVwiXG4gICAgICAgIDpjbGFzcz1cImdldENvbHVtbkNsYXNzKGNvbHVtbilcIlxuICAgICAgKVxuICAgICAgICBSb3V0ZXJMaW5rKFxuICAgICAgICAgIHYtaWY9XCJjb2x1bW4uc29ydGFibGVcIlxuICAgICAgICAgIHYtc2xvdD1cInsgbmF2aWdhdGUgfVwiXG4gICAgICAgICAgOnRvPVwiZ2V0U29ydExpbmsoY29sdW1uKVwiXG4gICAgICAgICAgY3VzdG9tXG4gICAgICAgIClcbiAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIDpjbGFzcz1cImdldFNvcnRDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICAgIEBjbGljaz1cIm5hdmlnYXRlXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICAuZGl0by1vcmRlci1hcnJvd3NcbiAgICAgICAgICAgIHNwYW4ge3sgZ2V0TGFiZWwoY29sdW1uKSB9fVxuICAgICAgICBzcGFuKFxuICAgICAgICAgIHYtZWxzZVxuICAgICAgICApIHt7IGdldExhYmVsKGNvbHVtbikgfX1cbiAgICB0aChcbiAgICAgIHYtaWY9XCJoYXNFZGl0QnV0dG9uc1wiXG4gICAgKVxuICAgICAgLy8tIEVtcHR5IDxzcGFuPiBpcyBuZWVkZWQgZm9yIHN0eWxpbmcsIHNlZSBfdGFibGUuc2Nzc1xuICAgICAgc3BhblxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBoeXBoZW5hdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9UYWJsZUhlYWQnLCB7XG4gIHByb3BzOiB7XG4gICAgcXVlcnk6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGNvbHVtbnM6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGhhc0VkaXRCdXR0b25zOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNvcnQoKSB7XG4gICAgICBjb25zdCBvcmRlciA9ICh0aGlzLnF1ZXJ5Lm9yZGVyIHx8ICcnKS5zcGxpdCgvXFxzKy8pXG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBvcmRlclswXSxcbiAgICAgICAgb3JkZXI6IG9yZGVyWzFdXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb2x1bW5DbGFzcyhjb2x1bW4pIHtcbiAgICAgIHJldHVybiBgZGl0by1jb2x1bW4tJHtoeXBoZW5hdGUoY29sdW1uLm5hbWUpfWBcbiAgICB9LFxuXG4gICAgZ2V0U29ydENsYXNzKGNvbHVtbikge1xuICAgICAgcmV0dXJuIHRoaXMuc29ydC5uYW1lID09PSBjb2x1bW4ubmFtZVxuICAgICAgICA/IGBkaXRvLXNlbGVjdGVkIGRpdG8tb3JkZXItJHt0aGlzLnNvcnQub3JkZXJ9YFxuICAgICAgICA6IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0U29ydExpbmsoY29sdW1uKSB7XG4gICAgICAvLyBUb2dnbGUgb3JkZXIgaWYgdGhlIHNhbWUgY29sdW1uIGlzIGNsaWNrZWQgYWdhaW4uXG4gICAgICBjb25zdCBvcmRlciA9XG4gICAgICAgIHRoaXMuc29ydC5uYW1lID09PSBjb2x1bW4ubmFtZSAmJiB0aGlzLnNvcnQub3JkZXIgPT09ICdhc2MnXG4gICAgICAgICAgPyAnZGVzYydcbiAgICAgICAgICA6ICdhc2MnXG4gICAgICByZXR1cm4gdGhpcy5nZXRRdWVyeUxpbmsoe1xuICAgICAgICAuLi50aGlzLnF1ZXJ5LFxuICAgICAgICBvcmRlcjogYCR7Y29sdW1uLm5hbWV9ICR7b3JkZXJ9YFxuICAgICAgfSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10YWJsZS1oZWFkIHtcbiAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgdHIge1xuICAgIHRoIHtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cbiAgICAgIC5kaXRvLWJ1dHRvbiB7XG4gICAgICAgIC8vIENvbnZlbnRpb246IE5lc3RlZCBzcGFucyBoYW5kbGUgcGFkZGluZywgc2VlIGJlbG93XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrOyAvLyBPdmVycmlkZSBkZWZhdWx0IGlubGluZS1mbGV4IHBvc2l0aW9uaW5nLlxuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgIH1cblxuICAgICAgc3BhbiB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgLy8gQ29udmVudGlvbjogTmVzdGVkIHNwYW5zIGhhbmRsZSBwYWRkaW5nXG4gICAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuXG4gICAgICAgICY6ZW1wdHk6OmFmdGVyIHtcbiAgICAgICAgICAvLyBQcmV2ZW50IGVtcHR5IDx0aD4gZnJvbSBjb2xsYXBzaW5nXG4gICAgICAgICAgY29udGVudDogJ1xcMjAwYic7IC8vIHplcm8td2lkdGggc3BhY2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgPiBzcGFuIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnRkKFxuICA6Y2xhc3M9XCJjZWxsLmNsYXNzXCJcbiAgOnN0eWxlPVwiY2VsbC5zdHlsZVwiXG4pXG4gIC8vLSBUT0RPOiBJbXBsZW1lbnQgaW5saW5lZCBjb21wb25lbnRzIGluIGNlbGwgbW9kZSFcbiAgY29tcG9uZW50KFxuICAgIHYtaWY9XCJjZWxsLmNvbXBvbmVudFwiXG4gICAgOmlzPVwiY2VsbC5jb21wb25lbnRcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgKVxuICBzcGFuKFxuICAgIHYtZWxzZVxuICAgIHYtaHRtbD1cInJlbmRlckNlbGwoZGF0YSlcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBDb250ZXh0TWl4aW4gZnJvbSAnLi4vbWl4aW5zL0NvbnRleHRNaXhpbi5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGVzY2FwZUh0bWwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9UYWJsZUNlbGwnLCB7XG4gIG1peGluczogW0NvbnRleHRNaXhpbl0sXG5cbiAgcHJvcHM6IHtcbiAgICBjZWxsOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbmVzdGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHJlbmRlckNlbGwoaXRlbSkge1xuICAgICAgY29uc3QgeyBuYW1lLCByZW5kZXIgfSA9IHRoaXMuY2VsbFxuICAgICAgY29uc3QgdmFsdWUgPSBpdGVtW25hbWVdXG4gICAgICByZXR1cm4gcmVuZGVyXG4gICAgICAgID8gcmVuZGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgICAgICAgIGRhdGFQYXRoOiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBuYW1lKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIDogZXNjYXBlSHRtbCh2YWx1ZSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by11cGxvYWQtZmlsZVxuICAuZGl0by10aHVtYm5haWwoXG4gICAgdi1pZj1cInRodW1ibmFpbFwiXG4gICAgOmNsYXNzPVwiYGRpdG8tdGh1bWJuYWlsLS0ke3RodW1ibmFpbH1gXCJcbiAgKVxuICAgIC5kaXRvLXRodW1ibmFpbF9faW5uZXJcbiAgICAgIGltZyhcbiAgICAgICAgdi1pZj1cInNvdXJjZVwiXG4gICAgICAgIDpzcmM9XCJzb3VyY2VcIlxuICAgICAgICBjcm9zc29yaWdpbj1cImFub255bW91c1wiXG4gICAgICApXG4gICAgICAuZGl0by10aHVtYm5haWxfX3R5cGUoXG4gICAgICAgIHYtZWxzZVxuICAgICAgKVxuICAgICAgICBzcGFuIHt7IHR5cGUgfX1cbiAgc3BhbiB7eyBmaWxlLm5hbWUgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9VcGxvYWRGaWxlJywge1xuICBwcm9wczoge1xuICAgIGZpbGU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRodW1ibmFpbDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0aHVtYm5haWxVcmw6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB1cGxvYWRVcmw6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0eXBlKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgVFlQRVNbdGhpcy5maWxlLnR5cGVdIHx8XG4gICAgICAgIHRoaXMuZmlsZS5uYW1lLnNwbGl0KCcuJykucG9wKCkudG9VcHBlckNhc2UoKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBzb3VyY2UoKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGxvYWRVcmwgfHwgdGhpcy50aHVtYm5haWxVcmxcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICAnZmlsZS51cGxvYWQuZmlsZSc6IHtcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXIoZmlsZSkge1xuICAgICAgICBpZiAodGhpcy50aHVtYm5haWwgJiYgZmlsZT8udHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSkge1xuICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgICAgICAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGxvYWRVcmwgPSByZWFkZXIucmVzdWx0XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy51cGxvYWRVcmwgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG5cbmNvbnN0IFRZUEVTID0ge1xuICAndGV4dC9wbGFpbic6ICdUWFQnLFxuICAndGV4dC9odG1sJzogJ0hUTUwnLFxuICAndGV4dC9jc3MnOiAnQ1NTJyxcbiAgJ3RleHQvamF2YXNjcmlwdCc6ICdKUycsXG4gICdpbWFnZS9qcGVnJzogJ0pQRycsXG4gICdpbWFnZS9wbmcnOiAnUE5HJyxcbiAgJ2ltYWdlL2dpZic6ICdHSUYnLFxuICAnaW1hZ2Uvc3ZnK3htbCc6ICdTVkcnLFxuICAnbW92aWUvbXA0JzogJ01QNCcsXG4gICdhdWRpby9tcGVnJzogJ01QMycsXG4gICdhcHBsaWNhdGlvbi9qc29uJzogJ0pTT04nLFxuICAnYXBwbGljYXRpb24veG1sJzogJ1hNTCcsXG4gICdhcHBsaWNhdGlvbi9wZGYnOiAnUERGJyxcbiAgJ2FwcGxpY2F0aW9uL3ppcCc6ICdaSVAnXG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AdXNlICdzYXNzOm1hdGgnO1xuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdXBsb2FkLWZpbGUge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG59XG5cbi5kaXRvLXRodW1ibmFpbCB7XG4gICRzZWxmOiAmO1xuXG4gIC8vIFNtYWxsIHNpemUgYnkgZGVmYXVsdFxuICAtLW1heC1zaXplOiAjezEgKiAkaW5wdXQtaGVpZ2h0fTtcbiAgLS1jb3JuZXItc2l6ZTogY2FsYyh2YXIoLS1tYXgtc2l6ZSkgLyA1KTtcbiAgLS1zaGFkb3ctc2l6ZTogMXB4O1xuICAtLW1pbi1zaXplOiBjYWxjKDIgKiB2YXIoLS1jb3JuZXItc2l6ZSkpO1xuICAtLW1hcmdpbjogMGVtO1xuICAtLWRyb3Atc2hhZG93OiBkcm9wLXNoYWRvdyhcbiAgICAwIGNhbGModmFyKC0tc2hhZG93LXNpemUpICogMC43NSkgdmFyKC0tc2hhZG93LXNpemUpXG4gICAgICAje3JnYmEoJGNvbG9yLWJsYWNrLCAwLjQpfVxuICApO1xuXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luOiB2YXIoLS1tYXJnaW4pO1xuICBtYXJnaW4tcmlnaHQ6IDAuNWVtO1xuICBmaWx0ZXI6IHZhcigtLWRyb3Atc2hhZG93KTtcblxuICAmLS1zbWFsbCB7XG4gICAgLS1tYXgtc2l6ZTogI3sxICogJGlucHV0LWhlaWdodH07XG4gICAgLS1tYXJnaW46IDBlbTtcbiAgICAtLXNoYWRvdy1zaXplOiAxcHg7XG4gIH1cblxuICAmLS1tZWRpdW0ge1xuICAgIC0tbWF4LXNpemU6ICN7MiAqICRpbnB1dC1oZWlnaHR9O1xuICAgIC0tbWFyZ2luOiAwLjI1ZW07XG4gICAgLS1zaGFkb3ctc2l6ZTogMS41cHg7XG4gIH1cblxuICAmLS1sYXJnZSB7XG4gICAgLS1tYXgtc2l6ZTogI3s0ICogJGlucHV0LWhlaWdodH07XG4gICAgLS1tYXJnaW46IDAuNWVtO1xuICAgIC0tc2hhZG93LXNpemU6IDIuNXB4O1xuICB9XG5cbiAgJl9faW5uZXIge1xuICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgY2xpcC1wYXRoOiBwb2x5Z29uKFxuICAgICAgMCAwLFxuICAgICAgY2FsYygxMDAlIC0gdmFyKC0tY29ybmVyLXNpemUpKSAwLFxuICAgICAgMTAwJSB2YXIoLS1jb3JuZXItc2l6ZSksXG4gICAgICAxMDAlIDEwMCUsXG4gICAgICAwIDEwMCVcbiAgICApO1xuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDA7XG4gICAgICByaWdodDogMDtcbiAgICAgIHdpZHRoOiB2YXIoLS1jb3JuZXItc2l6ZSk7XG4gICAgICBoZWlnaHQ6IHZhcigtLWNvcm5lci1zaXplKTtcbiAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg0NWRlZywgI2ZmZmZmZiwgI2VlZWVlZSA0MCUsICNkZGRkZGQgNTAlKTtcbiAgICAgIGZpbHRlcjogdmFyKC0tZHJvcC1zaGFkb3cpO1xuICAgIH1cbiAgfVxuXG4gICZfX3R5cGUge1xuICAgIC0tZm9udC1zaXplOiB2YXIoLS1jb3JuZXItc2l6ZSk7XG5cbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgbWluLXdpZHRoOiB2YXIoLS1taW4tc2l6ZSk7XG4gICAgbWluLWhlaWdodDogdmFyKC0tbWF4LXNpemUpO1xuICAgIGFzcGVjdC1yYXRpbzogMyAvIDQ7XG5cbiAgICBzcGFuIHtcbiAgICAgIC0tY29sb3I6ICN7JGNvbG9yLWdyZXl9O1xuXG4gICAgICBmb250LXNpemU6IG1pbih2YXIoLS1mb250LXNpemUpLCAjezEuMjUgKiAkZm9udC1zaXplfSk7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3IpO1xuXG4gICAgICAjeyRzZWxmfTpub3QoI3skc2VsZn0tLXNtYWxsKSAmIHtcbiAgICAgICAgcGFkZGluZzogMCBjYWxjKHZhcigtLWZvbnQtc2l6ZSkgLyA0KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogY2FsYyh2YXIoLS1mb250LXNpemUpIC8gNCk7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yKTtcbiAgICAgICAgY29sb3I6ICNmZmZmZmY7XG4gICAgICB9XG5cbiAgICAgICN7JHNlbGZ9LS1tZWRpdW0gJiB7XG4gICAgICAgIC0tY29sb3I6ICN7JGNvbG9yLWxpZ2h0fTtcbiAgICAgIH1cblxuICAgICAgI3skc2VsZn0tLWxhcmdlICYge1xuICAgICAgICAtLWNvbG9yOiAjeyRjb2xvci1saWdodGVyfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpbWcge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIC8vIFNWRyBpbWFnZXMgbmVlZCAxMDAlIHNldHRpbmdzIHRvIHNjYWxlIGludG8gdGhlIGNvbnRhaW5lci5cbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgbWluLXdpZHRoOiB2YXIoLS1taW4tc2l6ZSk7XG4gICAgbWluLWhlaWdodDogdmFyKC0tbWluLXNpemUpO1xuICAgIG1heC13aWR0aDogdmFyKC0tbWF4LXNpemUpO1xuICAgIG1heC1oZWlnaHQ6IHZhcigtLW1heC1zaXplKTtcbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7IGRlZmF1bHREb2N1bWVudCwgdHJ5T25Nb3VudGVkLCB0cnlPblNjb3BlRGlzcG9zZSwgdW5yZWZFbGVtZW50LCB1c2VWTW9kZWwgfSBmcm9tICdAdnVldXNlL2NvcmUnO1xuaW1wb3J0IHsgaXNSZWYsIHRvVmFsdWUsIG5leHRUaWNrLCBkZWZpbmVDb21wb25lbnQsIHJlZiwgcmVhY3RpdmUsIGggfSBmcm9tICd2dWUnO1xuaW1wb3J0IFNvcnRhYmxlIGZyb20gJ3NvcnRhYmxlanMnO1xuXG5mdW5jdGlvbiB1c2VTb3J0YWJsZShlbCwgbGlzdCwgb3B0aW9ucyA9IHt9KSB7XG4gIGxldCBzb3J0YWJsZTtcbiAgY29uc3QgeyBkb2N1bWVudCA9IGRlZmF1bHREb2N1bWVudCwgLi4ucmVzZXRPcHRpb25zIH0gPSBvcHRpb25zO1xuICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICBvblVwZGF0ZTogKGUpID0+IHtcbiAgICAgIG1vdmVBcnJheUVsZW1lbnQobGlzdCwgZS5vbGRJbmRleCwgZS5uZXdJbmRleCwgZSk7XG4gICAgfVxuICB9O1xuICBjb25zdCBzdGFydCA9ICgpID0+IHtcbiAgICBjb25zdCB0YXJnZXQgPSB0eXBlb2YgZWwgPT09IFwic3RyaW5nXCIgPyBkb2N1bWVudD8ucXVlcnlTZWxlY3RvcihlbCkgOiB1bnJlZkVsZW1lbnQoZWwpO1xuICAgIGlmICghdGFyZ2V0IHx8IHNvcnRhYmxlICE9PSB2b2lkIDApXG4gICAgICByZXR1cm47XG4gICAgc29ydGFibGUgPSBuZXcgU29ydGFibGUodGFyZ2V0LCB7IC4uLmRlZmF1bHRPcHRpb25zLCAuLi5yZXNldE9wdGlvbnMgfSk7XG4gIH07XG4gIGNvbnN0IHN0b3AgPSAoKSA9PiB7XG4gICAgc29ydGFibGU/LmRlc3Ryb3koKTtcbiAgICBzb3J0YWJsZSA9IHZvaWQgMDtcbiAgfTtcbiAgY29uc3Qgb3B0aW9uID0gKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgaWYgKHZhbHVlICE9PSB2b2lkIDApXG4gICAgICBzb3J0YWJsZT8ub3B0aW9uKG5hbWUsIHZhbHVlKTtcbiAgICBlbHNlXG4gICAgICByZXR1cm4gc29ydGFibGU/Lm9wdGlvbihuYW1lKTtcbiAgfTtcbiAgdHJ5T25Nb3VudGVkKHN0YXJ0KTtcbiAgdHJ5T25TY29wZURpc3Bvc2Uoc3RvcCk7XG4gIHJldHVybiB7XG4gICAgc3RvcCxcbiAgICBzdGFydCxcbiAgICBvcHRpb25cbiAgfTtcbn1cbmZ1bmN0aW9uIGluc2VydE5vZGVBdChwYXJlbnRFbGVtZW50LCBlbGVtZW50LCBpbmRleCkge1xuICBjb25zdCByZWZFbGVtZW50ID0gcGFyZW50RWxlbWVudC5jaGlsZHJlbltpbmRleF07XG4gIHBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKGVsZW1lbnQsIHJlZkVsZW1lbnQpO1xufVxuZnVuY3Rpb24gcmVtb3ZlTm9kZShub2RlKSB7XG4gIGlmIChub2RlLnBhcmVudE5vZGUpXG4gICAgbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpO1xufVxuZnVuY3Rpb24gbW92ZUFycmF5RWxlbWVudChsaXN0LCBmcm9tLCB0bywgZSA9IG51bGwpIHtcbiAgaWYgKGUgIT0gbnVsbCkge1xuICAgIHJlbW92ZU5vZGUoZS5pdGVtKTtcbiAgICBpbnNlcnROb2RlQXQoZS5mcm9tLCBlLml0ZW0sIGZyb20pO1xuICB9XG4gIGNvbnN0IF92YWx1ZUlzUmVmID0gaXNSZWYobGlzdCk7XG4gIGNvbnN0IGFycmF5ID0gX3ZhbHVlSXNSZWYgPyBbLi4udG9WYWx1ZShsaXN0KV0gOiB0b1ZhbHVlKGxpc3QpO1xuICBpZiAodG8gPj0gMCAmJiB0byA8IGFycmF5Lmxlbmd0aCkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheS5zcGxpY2UoZnJvbSwgMSlbMF07XG4gICAgbmV4dFRpY2soKCkgPT4ge1xuICAgICAgYXJyYXkuc3BsaWNlKHRvLCAwLCBlbGVtZW50KTtcbiAgICAgIGlmIChfdmFsdWVJc1JlZilcbiAgICAgICAgbGlzdC52YWx1ZSA9IGFycmF5O1xuICAgIH0pO1xuICB9XG59XG5cbmNvbnN0IFVzZVNvcnRhYmxlID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNvbXBvbmVudCh7XG4gIG5hbWU6IFwiVXNlU29ydGFibGVcIixcbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB0YWc6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IFwiZGl2XCJcbiAgICB9LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfVxuICB9LFxuICBzZXR1cChwcm9wcywgeyBzbG90cyB9KSB7XG4gICAgY29uc3QgbGlzdCA9IHVzZVZNb2RlbChwcm9wcywgXCJtb2RlbFZhbHVlXCIpO1xuICAgIGNvbnN0IHRhcmdldCA9IHJlZigpO1xuICAgIGNvbnN0IGRhdGEgPSByZWFjdGl2ZSh1c2VTb3J0YWJsZSh0YXJnZXQsIGxpc3QsIHByb3BzLm9wdGlvbnMpKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHNsb3RzLmRlZmF1bHQpXG4gICAgICAgIHJldHVybiBoKHByb3BzLnRhZywgeyByZWY6IHRhcmdldCB9LCBzbG90cy5kZWZhdWx0KGRhdGEpKTtcbiAgICB9O1xuICB9XG59KTtcblxuZXhwb3J0IHsgVXNlU29ydGFibGUgfTtcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5Vc2VTb3J0YWJsZS5kaXRvLWRyYWdnYWJsZShcbiAgdi1pZj1cImRyYWdnYWJsZVwiXG4gIDpjbGFzcz1cInsgJ2RpdG8tZHJhZ2dhYmxlLS1kcmFnZ2luZyc6IGlzRHJhZ2dpbmcgfVwiXG4gIDp0YWc9XCJ0YWdcIlxuICA6bW9kZWxWYWx1ZT1cIm1vZGVsVmFsdWVcIlxuICA6b3B0aW9ucz1cInsgLi4ub3B0aW9ucywgb25TdGFydCwgb25FbmQgfVwiXG4gIEB1cGRhdGU6bW9kZWxWYWx1ZT1cIiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsICRldmVudClcIlxuKVxuICBzbG90XG5jb21wb25lbnQoXG4gIHYtZWxzZVxuICA6aXM9XCJ0YWdcIlxuKVxuICBzbG90XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudCdcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgeyBVc2VTb3J0YWJsZSB9IGZyb20gJ0B2dWV1c2UvaW50ZWdyYXRpb25zL3VzZVNvcnRhYmxlL2NvbXBvbmVudCdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRHJhZ2dhYmxlJywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG4gIGNvbXBvbmVudHM6IHsgVXNlU29ydGFibGUgfSxcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnXSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHRhZzoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2RpdidcbiAgICB9LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBkcmFnZ2FibGU6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vdXNlRXZlbnRzOiBudWxsLFxuICAgICAgaXNEcmFnZ2luZzogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uU3RhcnQoZXZlbnQpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5vblN0YXJ0Py4oZXZlbnQpXG4gICAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlXG4gICAgICB0aGlzLm1vdXNlRXZlbnRzPy5yZW1vdmUoKVxuICAgIH0sXG5cbiAgICBvbkVuZChldmVudCkge1xuICAgICAgdGhpcy5vcHRpb25zLm9uRW5kPy4oZXZlbnQpXG4gICAgICAvLyBLZWVwIGBpc0RyYWdnaW5nYCB0cnVlIHVudGlsIHRoZSBuZXh0IG1vdXNlIGludGVyYWN0aW9uIHNvIHRoYXRcbiAgICAgIC8vIGNvbmZ1c2VkIGhvdmVyIHN0YXRlcyBhcmUgY2xlYXJlZCBiZWZvcmUgcmVtb3ZpbmcgdGhlIGhvdmVyIGNhdGNoZXIuXG4gICAgICB0aGlzLm1vdXNlRXZlbnRzID0gdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgICBtb3VzZWRvd246IHRoaXMub25Nb3VzZSxcbiAgICAgICAgbW91c2Vtb3ZlOiB0aGlzLm9uTW91c2UsXG4gICAgICAgIG1vdXNlbGVhdmU6IHRoaXMub25Nb3VzZVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb25Nb3VzZSgpIHtcbiAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlXG4gICAgICB0aGlzLm1vdXNlRXZlbnRzPy5yZW1vdmUoKVxuICAgICAgdGhpcy5tb3VzZUV2ZW50cyA9IG51bGxcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1kcmFnZ2FibGUge1xuICAvLyBPdmVybGF5IGEgaG92ZXIgY2F0Y2hlciB3aGlsZSB3ZSdyZSBkcmFnZ2luZyB0byBwcmV2ZW50IGhvdmVyIHN0YXRlcyBmcm9tXG4gIC8vIGdldHRpbmcgc3R1Y2sgLyBjb25mdXNlZC4gU2FmYXJpIHN0cnVnZ2xlcyB3aXRoIHRoaXMsIHNvIGRpc2FibGUgaXQgdGhlcmUuXG4gIEBpbmNsdWRlIGJyb3dzZXItcXVlcnkoKCdjaHJvbWUnLCAnZmlyZWZveCcpKSB7XG4gICAgJjpoYXMoJl9fY2hvc2VuKSxcbiAgICAmLS1kcmFnZ2luZyB7XG4gICAgICA+ICoge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAgICAgPiA6Zmlyc3QtY2hpbGQ6OmFmdGVyIHtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgaW5zZXQ6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmX19mYWxsYmFjayB7XG4gICAgZmlsdGVyOiBkcm9wLXNoYWRvdygwIDJweCA0cHggJGNvbG9yLXNoYWRvdyk7XG5cbiAgICAvLyBOZXN0ZWQgPHRkPiBuZWVkIHRvIGFsc28gc3dpdGNoIHRvIGBkaXNwbGF5OiBmbGV4YCBzdHlsZSBkdXJpbmcgZHJhZ2dpbmcuXG4gICAgJixcbiAgICB0ZCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuXG4gICAgICA+ICoge1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1zcGlubmVyKFxuICB2LXNob3c9XCJsb2FkaW5nXCJcbiAgOnN0eWxlPVwieyAnLS1jb2xvcic6IGNvbG9yLCAnLS1zaXplJzogc2l6ZSwgJy0tbWFyZ2luJzogbWFyZ2luIH1cIlxuKVxuICAuZGl0by1zcGlubmVyX19wdWxzZS5kaXRvLXNwaW5uZXJfX3B1bHNlMVxuICAuZGl0by1zcGlubmVyX19wdWxzZS5kaXRvLXNwaW5uZXJfX3B1bHNlMlxuICAuZGl0by1zcGlubmVyX19wdWxzZS5kaXRvLXNwaW5uZXJfX3B1bHNlM1xuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1NwaW5uZXInLCB7XG4gIHByb3BzOiB7XG4gICAgbG9hZGluZzoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIGNvbG9yOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSxcbiAgICBzaXplOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSxcbiAgICBtYXJnaW46IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG4uZGl0by1zcGlubmVyIHtcbiAgLS1jb2xvcjogIzk5OTk5OTtcbiAgLS1zaXplOiA4cHg7XG4gIC0tbWFyZ2luOiAycHg7XG5cbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICAmX19wdWxzZSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yKTtcbiAgICB3aWR0aDogdmFyKC0tc2l6ZSk7XG4gICAgaGVpZ2h0OiB2YXIoLS1zaXplKTtcbiAgICBtYXJnaW46IHZhcigtLW1hcmdpbik7XG4gICAgYm9yZGVyLXJhZGl1czogMTAwJTtcbiAgICBhbmltYXRpb246IGRpdG8tc3Bpbm5lci1wdWxzZSAwLjc1cyBjdWJpYy1iZXppZXIoMC4yLCAwLjY4LCAwLjE4LCAxLjA4KSAwc1xuICAgICAgaW5maW5pdGUgYm90aDtcbiAgfVxuXG4gICZfX3B1bHNlMSB7XG4gICAgYW5pbWF0aW9uLWRlbGF5OiAwLjEycztcbiAgfVxuXG4gICZfX3B1bHNlMiB7XG4gICAgYW5pbWF0aW9uLWRlbGF5OiAwLjI0cztcbiAgfVxuXG4gICZfX3B1bHNlMyB7XG4gICAgYW5pbWF0aW9uLWRlbGF5OiAwLjM2cztcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIGRpdG8tc3Bpbm5lci1wdWxzZSB7XG4gIDAlLFxuICA4MCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuXG4gIDQ1JSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjEpO1xuICAgIG9wYWNpdHk6IDAuNztcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIGRpdG8tc3Bpbm5lci1wdWxzZSB7XG4gIDAlLFxuICA4MCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuXG4gIDQ1JSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjEpO1xuICAgIG9wYWNpdHk6IDAuNztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZnVuY3Rpb24gRGl0b1ZOb2RlKHsgdm5vZGUgfSkge1xuICByZXR1cm4gdm5vZGVcbn1cblxuRGl0b1ZOb2RlLnByb3BzID0ge1xuICB2bm9kZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9Wbm9kZScsIERpdG9WTm9kZSlcbjwvc2NyaXB0PlxuIiwiLy8gRGl0b1R5cGVDb21wb25lbnQgaXMgdGhlIGFic3RyYWN0IGJhc2UgY29tcG9uZW50IGZvciBhbGwgb3RoZXIgdHlwZVxuLy8gY29tcG9uZW50cyBpbnNpZGUgdGhlIHR5cGVzLyBmb2xkZXIuIFRoZXJlJ3MgYWxzbyBhIHNlcGFyYXRlIGNvbmNyZXRlXG4vLyBgRGl0b1R5cGVDb21wb25lbnQudnVlYCBjb21wb25lbnQsIHVzZSB0byByZW5kZXIgYHsgdHlwZTogJ2NvbXBvbmVudCcgfWBcbmltcG9ydCB7IGFzQXJyYXksIGNhbWVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBUeXBlTWl4aW4gZnJvbSAnLi9taXhpbnMvVHlwZU1peGluLmpzJ1xuaW1wb3J0IHsgcmVnaXN0ZXJUeXBlQ29tcG9uZW50LCBnZXRUeXBlQ29tcG9uZW50IH0gZnJvbSAnLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGV4dGVuZHM6IERpdG9Db21wb25lbnQsXG4gIG1peGluczogW1R5cGVNaXhpbl0sXG5cbiAgbmF0aXZlRmllbGQ6IGZhbHNlLFxuICB0ZXh0RmllbGQ6IGZhbHNlLFxuICAvLyBTZXQgcmVhc29uYWJsZSBkZWZhdWx0cyBmb3IgYWxsIG9mIHRoZXNlIHRoYXQgYXJlIHVzZWQgYnkgbW9zdCB0eXBlXG4gIC8vIGNvbXBvbmVudHMuIFRoZXNlIG9ubHkgbmVlZCBkZWZpbmluZyBpbiBzdWItY2xhc3NlcyB3aGVuIHRoZXkgZGlmZmVyLlxuICBkZWZhdWx0VmFsdWU6IG51bGwsXG4gIGRlZmF1bHROZXN0ZWQ6IHRydWUsXG4gIGRlZmF1bHRWaXNpYmxlOiB0cnVlLFxuICBnZW5lcmF0ZUxhYmVsOiB0cnVlLFxuICBleGNsdWRlVmFsdWU6IGZhbHNlLFxuICBpZ25vcmVNaXNzaW5nVmFsdWU6IG51bGwsXG4gIG9taXRTcGFjaW5nOiBmYWxzZSxcblxuICBjb21wb25lbnQ6IERpdG9Db21wb25lbnQuY29tcG9uZW50LFxuXG4gIGdldDogZ2V0VHlwZUNvbXBvbmVudCxcblxuICByZWdpc3Rlcih0eXBlcywgZGVmaW5pdGlvbiA9IHt9KSB7XG4gICAgdHlwZXMgPSBhc0FycmF5KHR5cGVzKVxuICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50KFxuICAgICAgYERpdG9UeXBlJHtjYW1lbGl6ZSh0eXBlc1swXSwgdHJ1ZSl9YCxcbiAgICAgIGRlZmluaXRpb25cbiAgICApXG4gICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICByZWdpc3RlclR5cGVDb21wb25lbnQodHlwZSwgY29tcG9uZW50KVxuICAgIH1cbiAgICByZXR1cm4gY29tcG9uZW50XG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5idXR0b24uZGl0by1idXR0b24oXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDp0eXBlPVwidHlwZVwiXG4gIDp0aXRsZT1cInRpdGxlXCJcbiAgOmNsYXNzPVwiYnV0dG9uQ2xhc3NcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbilcbiAgLmRpdG8tYnV0dG9uX190ZXh0KFxuICAgIHYtaWY9XCJ0ZXh0XCJcbiAgKSB7eyB0ZXh0IH19XG4gIC5kaXRvLWluZm8oXG4gICAgdi1pZj1cIiFsYWJlbCAmJiBpbmZvXCJcbiAgICA6ZGF0YS1pbmZvPVwiaW5mb1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgaGFzUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7IGxhYmVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoXG4gIFsnYnV0dG9uJywgJ3N1Ym1pdCddLFxuICAvLyBAdnVlL2NvbXBvbmVudFxuICB7XG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gICAgZXhjbHVkZVZhbHVlOiB0cnVlLFxuICAgIGRlZmF1bHRXaWR0aDogJ2F1dG8nLFxuICAgIGdlbmVyYXRlTGFiZWw6IGZhbHNlLFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIHZlcmIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZlcmJzW3RoaXMubmFtZV1cbiAgICAgIH0sXG5cbiAgICAgIGJ1dHRvbkNsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52ZXJiID8gYGRpdG8tYnV0dG9uLSR7dGhpcy52ZXJifWAgOiBudWxsXG4gICAgICB9LFxuXG4gICAgICB0ZXh0OiBnZXRTY2hlbWFBY2Nlc3NvcigndGV4dCcsIHtcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgICB9KSxcblxuICAgICAgdGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHQgfHwgbGFiZWxpemUodGhpcy52ZXJiKVxuICAgICAgfSxcblxuICAgICAgaW5mbzogZ2V0U2NoZW1hQWNjZXNzb3IoJ2luZm8nLCB7XG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgZGVmYXVsdDogbnVsbFxuICAgICAgfSksXG5cbiAgICAgIGNsb3NlRm9ybTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Nsb3NlRm9ybScsIHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG1ldGhvZHM6IHtcbiAgICAgIC8vIEBvdmVycmlkZVxuICAgICAgZ2V0RXZlbnRzKCkge1xuICAgICAgICBjb25zdCB7IG9uRm9jdXMsIG9uQmx1ciwgb25DbGljayB9ID0gdGhpc1xuICAgICAgICByZXR1cm4geyBvbkZvY3VzLCBvbkJsdXIsIG9uQ2xpY2sgfVxuICAgICAgfSxcblxuICAgICAgYXN5bmMgc3VibWl0KG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzb3VyY2VDb21wb25lbnQ/LnN1Ym1pdCh0aGlzLCBvcHRpb25zKVxuICAgICAgfSxcblxuICAgICAgYXN5bmMgb25DbGljaygpIHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5lbWl0RXZlbnQoJ2NsaWNrJywge1xuICAgICAgICAgIHBhcmVudDogdGhpcy5zY2hlbWFDb21wb25lbnRcbiAgICAgICAgfSlcbiAgICAgICAgLy8gSGF2ZSBidXR0b25zIHRoYXQgZGVmaW5lIHJlc291cmNlcyBjYWxsIGB0aGlzLnN1Ym1pdCgpYCBieSBkZWZhdWx0OlxuICAgICAgICBpZiAoXG4gICAgICAgICAgcmVzID09PSB1bmRlZmluZWQgJiYgLy8gTWVhbmluZzogZG9uJ3QgcHJldmVudCBkZWZhdWx0LlxuICAgICAgICAgIGhhc1Jlc291cmNlKHRoaXMuc2NoZW1hKVxuICAgICAgICApIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnN1Ym1pdCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbilcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWJ1dHRvbiB7XG4gICRzZWxmOiAmO1xuXG4gICZfX3RleHQge1xuICAgIEBpbmNsdWRlIGVsbGlwc2lzO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWNoZWNrYm94XG4gIGlucHV0KFxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICB2LW1vZGVsPVwidmFsdWVcIlxuICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY2hlY2tib3gnLCB7XG4gIG5hdGl2ZUZpZWxkOiB0cnVlXG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tY2hlY2tib3gge1xuICBAZXh0ZW5kICVpbnB1dC1ib3JkZXJsZXNzO1xufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7XG4gIGlzT2JqZWN0LFxuICBpc0Z1bmN0aW9uLFxuICBpc1Byb21pc2UsXG4gIG5vcm1hbGl6ZURhdGFQYXRoLFxuICBnZXRWYWx1ZUF0RGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IG1hcmtSYXcsIHJlZiB9IGZyb20gJ3Z1ZSdcbmltcG9ydCBMb2FkaW5nTWl4aW4gZnJvbSAnLi9Mb2FkaW5nTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0xvYWRpbmdNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIGFzeW5jRGF0YUVudHJpZXM6IG1hcmtSYXcoe30pXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYW5kbGVEYXRhU2NoZW1hKHNjaGVtYSwgbmFtZSwgbG9hZGluZ09wdGlvbnMpIHtcbiAgICAgIGlmICghaXNPYmplY3Qoc2NoZW1hKSkge1xuICAgICAgICBzY2hlbWEgPSB7IGRhdGE6IHNjaGVtYSB9XG4gICAgICB9XG4gICAgICBsZXQgeyBkYXRhID0gdW5kZWZpbmVkLCBkYXRhUGF0aCA9IG51bGwgfSA9IHNjaGVtYVxuICAgICAgLy8gQ3JlYXRlIGEgcmVhY3RpdmUgZW50cnkgZm9yIHRoZSBhc3luYyBkYXRhLCBpZiBpdCBkb2Vzbid0IGV4aXN0IHlldC5cbiAgICAgIC8vIE5PVEU6IGBtYXJrUmF3KClgIGlzIHVzZWQgdG8gYXZvaWQgcmVhY3Rpdml0eSBvbiBgYXN5bmNEYXRhRW50cmllc2BcbiAgICAgIC8vIGl0c2VsZiwgYXMgcmVhY3Rpdml0eSBpcyBvbmx5IGRlc2lyZWQgb24gYHJlYWN0aXZlVmVyc2lvbmAsIHdoaWNoIGlzXG4gICAgICAvLyB1c2VkIHRvIHRyaWdnZXIgY29udHJvbGxlZCByZWV2YWx1YXRpb24gb2YgdGhlIGNvbXB1dGVkIGdldHRlci5cbiAgICAgIGNvbnN0IGFzeW5jRW50cnkgPSAodGhpcy5hc3luY0RhdGFFbnRyaWVzW25hbWVdID8/PSB7XG4gICAgICAgIHJlYWN0aXZlVmVyc2lvbjogcmVmKDEpLFxuICAgICAgICBkZXBlbmRlbmN5RnVuY3Rpb246IG51bGwsXG4gICAgICAgIHJlc29sdmVkRGF0YTogdW5kZWZpbmVkLFxuICAgICAgICByZXNvbHZpbmc6IGZhbHNlLFxuICAgICAgICByZXNvbHZlZDogZmFsc2VcbiAgICAgIH0pXG4gICAgICAvLyBJZiB0aGUgZGF0YSBjYWxsYmFjayBwcm92aWRlZCBhIGRlcGVuZGVuY3kgZnVuY3Rpb24gd2hlbiBpdCB3YXMgY2FsbGVkLFxuICAgICAgLy8gY2FsIGl0IGluIGV2ZXJ5IGNhbGwgb2YgYGhhbmRsZURhdGFTY2hlbWEoKWAgdG8gZm9yY2UgVnVlIHRvIGtlZXAgdHJhY2tcbiAgICAgIC8vIG9mIHRoZSBhc3luYyBkZXBlbmRlbmNpZXMuIEFsc28gYWNjZXNzIGByZWFjdGl2ZVZlcnNpb24udmFsdWVgIHJpZ2h0XG4gICAgICAvLyBhd2F5LCB0byBlbnN1cmUgdGhhdCB0aGUgcmVhY3RpdmUgcHJvcGVydHkgaXMgdHJhY2tlZCBhcyBhIGRlcGVuZGVuY3k6XG4gICAgICBhc3luY0VudHJ5LnJlYWN0aXZlVmVyc2lvbi52YWx1ZSAmJlxuICAgICAgYXN5bmNFbnRyeS5kZXBlbmRlbmN5RnVuY3Rpb24/Lih0aGlzLmNvbnRleHQpXG5cbiAgICAgIGlmIChhc3luY0VudHJ5LnJlc29sdmVkKSB7XG4gICAgICAgIC8vIElmIHRoZSBkYXRhIHdhcyByZXNvbHZlZCBhbHJlYWR5LCByZXR1cm4gaXQgYW5kIGNsZWFyIHRoZSByZXNvbHZlZFxuICAgICAgICAvLyB2YWx1ZS4gVGhpcyB3b3JrcyBiZWNhdXNlIFZ1ZSBjYWNoZXMgdGhlIHJlc3VsdCBvZiBjb21wdXRlZCBnZXR0ZXJzXG4gICAgICAgIC8vIGFuZCBvbmx5IHJlZXZhbHVhdGVzIGlmIG9uZSBvZiB0aGUgZGVwZW5kZW5jaWVzIGNoYW5nZWQuIFRoaXMgaXMgdG9cbiAgICAgICAgLy8gZW5zdXJlIHRoYXQgYSBjYWNoZWQgdmFsdWUgaGVyZSBkb2Vzbid0IGJsb2NrIC8gb3ZlcnJpZGVcbiAgICAgICAgLy8gcmVldmFsdWF0aW9uIHdoZW4gYSBkZXBlbmRlbmN5IGNoYW5nZXM6XG4gICAgICAgIGNvbnN0IHsgcmVzb2x2ZWREYXRhIH0gPSBhc3luY0VudHJ5XG4gICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWREYXRhID0gdW5kZWZpbmVkXG4gICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWQgPSBmYWxzZVxuICAgICAgICByZXR1cm4gcmVzb2x2ZWREYXRhXG4gICAgICB9XG4gICAgICAvLyBBdm9pZCBjYWxsaW5nIHRoZSBkYXRhIGZ1bmN0aW9uIHR3aWNlOlxuICAgICAgaWYgKGFzeW5jRW50cnkucmVzb2x2aW5nKSB7XG4gICAgICAgIGRhdGEgPSBudWxsXG4gICAgICB9IGVsc2UgaWYgKGRhdGEpIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oZGF0YSkpIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBkYXRhKHRoaXMuY29udGV4dClcbiAgICAgICAgICAvLyBJZiB0aGUgcmVzdWx0IG9mIHRoZSBkYXRhIGZ1bmN0aW9uIGlzIGFub3RoZXIgZnVuY3Rpb24sIHRoZW4gdGhlXG4gICAgICAgICAgLy8gZmlyc3QgZGF0YSBmdW5jdGlvbiBpcyB0aGVyZSB0byB0cmFjayBkZXBlbmRlbmNpZXMgYW5kIHRoZSByZWFsXG4gICAgICAgICAgLy8gZGF0YSBsb2FkaW5nIGhhcHBlbnMgaW4gdGhlIGZ1bmN0aW9uIHRoYXQgaXQgcmV0dXJuZWQuIEtlZXAgdHJhY2tcbiAgICAgICAgICAvLyBpdCBpbiBgZGVwZW5kZW5jeUZ1bmN0aW9uYCBzbyBpdCBjYW4gYmUgY2FsbGVkIG9uIGVhY2ggY2FsbCBvZlxuICAgICAgICAgIC8vIGBoYW5kbGVEYXRhU2NoZW1hKClgIHRvIGtlZXAgdGhlIGRlcGVuZGVuY2llcyBpbnRhY3QsIGFuZCBjYWxsXG4gICAgICAgICAgLy8gdGhlIGZ1bmN0aW9uIHRoYXQgaXQgcmV0dXJuZWQgb25jZSB0byBnZXQgdGhlIGFjdHVhbCBkYXRhOlxuICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIGFzeW5jRW50cnkuZGVwZW5kZW5jeUZ1bmN0aW9uID0gZGF0YVxuICAgICAgICAgICAgZGF0YSA9IHJlc3VsdCh0aGlzLmNvbnRleHQpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSByZXN1bHRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gTk9URTogSWYgdGhlIGRhdGEgaXMgbm90IGEgcHJvbWlzZSwgaXQgaXMgcmVzb2x2ZWQgYWxyZWFkeS5cbiAgICAgICAgaWYgKGlzUHJvbWlzZShkYXRhKSkge1xuICAgICAgICAgIC8vIElmIHRoZSBkYXRhIGlzIGFzeW5jaHJvbm91cywgaXQgY2FuJ3QgYmUgcmV0dXJuZWQgc3RyYWlnaHQgYXdheS5cbiAgICAgICAgICAvLyBCdXQgd2UgY2FuIGNoZWF0IHVzaW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYW5kIGByZXNvbHZlZERhdGFgLFxuICAgICAgICAgIC8vIHdoaWNoIGlzIGdvaW5nIHRvIHJlY2VpdmUgdGhlIGxvYWRlZCBkYXRhIGFzeW5jaHJvbm91c2x5LFxuICAgICAgICAgIC8vIHRyaWdnZXJpbmcgYSByZWNvbXB1dGUgb2YgdGhlIGNvbXB1dGVkIHByb3BlcnR5IHRoYXQgY2FsbHNcbiAgICAgICAgICAvLyBgaGFuZGxlRGF0YVNjaGVtYSgpYC5cbiAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmluZyA9IHRydWVcbiAgICAgICAgICB0aGlzLnJlc29sdmVEYXRhKGRhdGEsIGxvYWRpbmdPcHRpb25zKVxuICAgICAgICAgICAgLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWREYXRhID0gZGF0YVxuICAgICAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmluZyA9IGZhbHNlXG4gICAgICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWQgPSB0cnVlXG4gICAgICAgICAgICAgIC8vIFRyaWdnZXIgcmVldmFsdWF0aW9uIG9mIHRoZSBjb21wdXRlZCBnZXR0ZXIgYnkgaW5jcmVhc2luZyB0aGVcbiAgICAgICAgICAgICAgLy8gYHJlYWN0aXZlVmVyc2lvbmAgdmFsdWUuXG4gICAgICAgICAgICAgIGFzeW5jRW50cnkucmVhY3RpdmVWZXJzaW9uLnZhbHVlKytcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmluZyA9IGZhbHNlXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIC8vIENsZWFyIGRhdGEgdW50aWwgcHJvbWlzZSBpcyByZXNvbHZlZCBhbmQgYHJlc29sdmVkRGF0YWAgaXMgc2V0XG4gICAgICAgICAgZGF0YSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkYXRhUGF0aCkge1xuICAgICAgICBkYXRhID0gZ2V0VmFsdWVBdERhdGFQYXRoKFxuICAgICAgICAgIHRoaXMucm9vdERhdGEsXG4gICAgICAgICAgbm9ybWFsaXplRGF0YVBhdGgoYCR7dGhpcy5kYXRhUGF0aH0vJHtkYXRhUGF0aH1gKVxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVxuICAgIH0sXG5cbiAgICBhc3luYyByZXNvbHZlRGF0YShsb2FkLCBsb2FkaW5nT3B0aW9ucyA9IHt9KSB7XG4gICAgICAvLyBVc2UgYSB0aW1lb3V0IHRvIGFsbG93IGFscmVhZHkgcmVzb2x2ZWQgcHJvbWlzZXMgdG8gcmV0dXJuIGRhdGEgd2l0aG91dFxuICAgICAgLy8gc2hvd2luZyBhIGxvYWRpbmcgaW5kaWNhdG9yLlxuICAgICAgbGV0IGNsZWFyTG9hZGluZyA9IGZhbHNlXG4gICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnNldExvYWRpbmcodHJ1ZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgICAgIGNsZWFyTG9hZGluZyA9IHRydWVcbiAgICAgIH0sIDApXG4gICAgICBsZXQgZGF0YSA9IG51bGxcbiAgICAgIHRyeSB7XG4gICAgICAgIGRhdGEgPSBhd2FpdCAoaXNGdW5jdGlvbihsb2FkKSA/IGxvYWQoKSA6IGxvYWQpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmFkZEVycm9yKGVycm9yLm1lc3NhZ2UgfHwgZXJyb3IpXG4gICAgICB9XG4gICAgICBpZiAoY2xlYXJMb2FkaW5nKSB7XG4gICAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpXG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IERhdGFNaXhpbiBmcm9tICcuL0RhdGFNaXhpbi5qcydcbmltcG9ydCB7IGhhc1ZpZXdTY2hlbWEsIGdldFZpZXdFZGl0UGF0aCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBzZXRUZW1wb3JhcnlJZCwgaXNSZWZlcmVuY2UgfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGlzQXJyYXksXG4gIGlzU3RyaW5nLFxuICBpc0Z1bmN0aW9uLFxuICBub3JtYWxpemVEYXRhUGF0aCxcbiAgbGFiZWxpemUsXG4gIGRlYm91bmNlQXN5bmNcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbRGF0YU1peGluXSxcblxuICBjb21wdXRlZDoge1xuICAgIHNlbGVjdGVkVmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgY29udmVydFZhbHVlID0gdmFsdWUgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMucmVsYXRlXG4gICAgICAgICAgICA/IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24odmFsdWUpXG4gICAgICAgICAgICA6IHZhbHVlXG5cbiAgICAgICAgICByZXR1cm4gdGhpcy5oYXNPcHRpb25zXG4gICAgICAgICAgICA/IHRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodmFsKVxuICAgICAgICAgICAgICA/IHZhbFxuICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbHVlID0gaXNBcnJheSh0aGlzLnZhbHVlKVxuICAgICAgICAgID8gdGhpcy52YWx1ZS5tYXAoY29udmVydFZhbHVlKS5maWx0ZXIodmFsdWUgPT4gdmFsdWUgIT09IG51bGwpXG4gICAgICAgICAgOiBjb252ZXJ0VmFsdWUodGhpcy52YWx1ZSlcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgLy8gQXMgc29vbiBhcyB0aGUgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCBhbmQuLi5cbiAgICAgICAgICB0aGlzLmhhc09wdGlvbnMgJiYgKFxuICAgICAgICAgICAgLy8gLi4uaWYgdGhlIHZhbHVlIGlzIGZvcmNlZCB0byBudWxsIGJlY2F1c2UgYSBkaXNhcHBlYXJlZCBvcHRpb24uLi5cbiAgICAgICAgICAgIHZhbHVlID09PSBudWxsICYmIHRoaXMudmFsdWUgIT09IG51bGwgfHxcbiAgICAgICAgICAgIC8vIC4uLm9yIGlmIHRoZSB2YWx1ZSBpcyBhIHJlZmVyZW5jZSwgcmVwbGFjZSBpdCB3aXRoIGl0cyBvcHRpb25cbiAgICAgICAgICAgIC8vIHZhbHVlLCBzbyB0aGF0IGl0J2xsIGhvbGQgYWN0dWFsIGRhdGEsIG5vdCBqdXN0IGEgcmVmZXJlbmNlIGlkLlxuICAgICAgICAgICAgaXNSZWZlcmVuY2UodGhpcy52YWx1ZSlcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLXNpZGUtZWZmZWN0cy1pbi1jb21wdXRlZC1wcm9wZXJ0aWVzXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBjb25zdCBjb252ZXJ0VmFsdWUgPSB2YWx1ZSA9PlxuICAgICAgICAgIHRoaXMucmVsYXRlXG4gICAgICAgICAgICA/IHRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodmFsdWUpXG4gICAgICAgICAgICA6IHZhbHVlXG5cbiAgICAgICAgdGhpcy52YWx1ZSA9IGlzQXJyYXkodmFsdWUpXG4gICAgICAgICAgPyB2YWx1ZS5tYXAoY29udmVydFZhbHVlKVxuICAgICAgICAgIDogY29udmVydFZhbHVlKHZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZE9wdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHRoaXMuc2VsZWN0ZWRWYWx1ZSlcbiAgICB9LFxuXG4gICAgb3B0aW9ucygpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmhhbmRsZURhdGFTY2hlbWEodGhpcy5zY2hlbWEub3B0aW9ucywgJ29wdGlvbnMnKSA/PyBbXVxuICAgICAgaWYgKCFpc0FycmF5KGRhdGEpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBvcHRpb25zIGRhdGEsIHNob3VsZCBiZSBhcnJheTogJHtkYXRhfWApXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzT3B0aW9ucyhkYXRhKVxuICAgIH0sXG5cbiAgICBhY3RpdmVPcHRpb25zKCkge1xuICAgICAgLy8gVGhpcyBpcyBvdmVycmlkZGVuIGluIGBUeXBlTXVsdGlzZWxlY3RgIHRvIHJldHVybiB0aGUgYHNlYXJjaGVkT3B0aW9uc2BcbiAgICAgIC8vIHdoZW4gYSBzZWFyY2ggZmlsdGVyIHdhcyBhcHBsaWVkLlxuICAgICAgcmV0dXJuIHRoaXMub3B0aW9uc1xuICAgIH0sXG5cbiAgICBoYXNPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlT3B0aW9ucy5sZW5ndGggPiAwXG4gICAgfSxcblxuICAgIHJlbGF0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlbGF0ZScsIHtcbiAgICAgIC8vIFRPRE86IENvbnZlcnQgdG8gYHJlbGF0ZUJ5OiAnaWQnYFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgLy8gV2UgY2Fubm90IHVzZSBzY2hlbWEgYWNjZXNzb3IgY2FsbGJhY2sgbWFnaWMgZm9yIGByZWxhdGVgIGFzIHdlIG5lZWRcbiAgICAgIC8vIHRoaXMgb3V0c2lkZSBvZiB0aGUgY29tcG9uZW50J3MgbGlmZS1zcGFuLCBzZWUgYHByb2Nlc3NEYXRhKClgIGJlbG93LlxuICAgICAgY2FsbGJhY2s6IGZhbHNlXG4gICAgfSksXG5cbiAgICBncm91cEJ5OiBnZXRTY2hlbWFBY2Nlc3NvcignZ3JvdXBCeScsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgb3B0aW9ucy5sYWJlbEtleWAgLyBgb3B0aW9uTGFiZWxLZXlgP1xuICAgIG9wdGlvbkxhYmVsOiBnZXRTY2hlbWFBY2Nlc3Nvcignb3B0aW9ucy5sYWJlbCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQobGFiZWwpIHtcbiAgICAgICAgLy8gSWYgbm8gYGxhYmVsYCB3YXMgcHJvdmlkZWQgYnV0IHRoZSBvcHRpb25zIGFyZSBvYmplY3RzLCBhc3N1bWUgYVxuICAgICAgICAvLyBkZWZhdWx0IHZhbHVlIG9mICdsYWJlbCc6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgbGFiZWwgfHxcbiAgICAgICAgICB0aGlzLmdldE9wdGlvbktleSgnbGFiZWwnKSB8fFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBvcHRpb25zLnZhbHVlS2V5YCAvIGBvcHRpb25WYWx1ZUtleWA/XG4gICAgb3B0aW9uVmFsdWU6IGdldFNjaGVtYUFjY2Vzc29yKCdvcHRpb25zLnZhbHVlJywge1xuICAgICAgdHlwZTogW1N0cmluZywgRnVuY3Rpb25dLFxuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIGdldCh2YWx1ZSkge1xuICAgICAgICAvLyBJZiBubyBgbGFiZWxgIHdhcyBwcm92aWRlZCBidXQgdGhlIG9wdGlvbnMgYXJlIG9iamVjdHMsIGFzc3VtZSBhXG4gICAgICAgIC8vIGRlZmF1bHQgdmFsdWUgb2YgJ3ZhbHVlJzpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB2YWx1ZSB8fFxuICAgICAgICAgIHRoaXMucmVsYXRlICYmICdpZCcgfHxcbiAgICAgICAgICB0aGlzLmdldE9wdGlvbktleSgndmFsdWUnKSB8fFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogQ29uc2lkZXIgbW92aW5nIHNlYXJjaCB0byBgb3B0aW9ucy5zZWFyY2hgP1xuICAgIHNlYXJjaEZpbHRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3NlYXJjaCcsIHtcbiAgICAgIHR5cGU6IFtPYmplY3QsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQoc2VhcmNoKSB7XG4gICAgICAgIGlmIChzZWFyY2gpIHtcbiAgICAgICAgICBjb25zdCB7IGZpbHRlciwgZGVib3VuY2UgfSA9IGlzRnVuY3Rpb24oc2VhcmNoKVxuICAgICAgICAgICAgPyB7IGZpbHRlcjogc2VhcmNoIH1cbiAgICAgICAgICAgIDogc2VhcmNoXG4gICAgICAgICAgcmV0dXJuIGRlYm91bmNlID8gZGVib3VuY2VBc3luYyhmaWx0ZXIsIGRlYm91bmNlKSA6IGZpbHRlclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSksXG5cbiAgICBlZGl0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2VkaXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGVkaXRhYmxlKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgZWRpdGFibGUgJiZcbiAgICAgICAgICBoYXNWaWV3U2NoZW1hKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGVkaXRQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZWRpdGFibGUgJiYgdGhpcy5zZWxlY3RlZFZhbHVlXG4gICAgICAgID8gZ2V0Vmlld0VkaXRQYXRoKHRoaXMuc2NoZW1hLCB0aGlzLnNlbGVjdGVkVmFsdWUsIHRoaXMuY29udGV4dClcbiAgICAgICAgOiBudWxsXG4gICAgfSxcblxuICAgIGdyb3VwQnlMYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdyb3VwQnkgPyAnbGFiZWwnIDogbnVsbFxuICAgIH0sXG5cbiAgICBncm91cEJ5T3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdyb3VwQnkgPyAnb3B0aW9ucycgOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRPcHRpb25LZXkoa2V5KSB7XG4gICAgICBjb25zdCBbb3B0aW9uXSA9IHRoaXMuYWN0aXZlT3B0aW9uc1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KG9wdGlvbikgJiYga2V5IGluIG9wdGlvbiA/IGtleSA6IG51bGxcbiAgICB9LFxuXG4gICAgcHJvY2Vzc09wdGlvbnMob3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlbGF0ZSkge1xuICAgICAgICAgIC8vIElmIGlkcyBhcmUgbWlzc2luZyBhbmQgd2Ugd2FudCB0byByZWxhdGUsIHNldCB0ZW1wb3JhcnkgaWRzLlxuICAgICAgICAgIC8vIE5PVEU6IFdlIG5lZWQgdG8gbW9kaWZ5IHRoZSBhY3R1YWwgZGF0YSwgbWFraW5nIGEgY29weSB3b24ndCB3b3JrXG4gICAgICAgICAgLy8gYXMgaXQgd29uJ3QgcHJvcGFnYXRlLlxuICAgICAgICAgIC8vIE5PVEU6IFRoaXMgb25seSBtYWtlcyBzZW5zZSBpZiB0aGUgZGF0YSBpcyBmcm9tIHRoZSBncmFwaCB0aGF0XG4gICAgICAgICAgLy8gd2UncmUgY3VycmVudGx5IGVkaXRpbmcuXG4gICAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKCEoJ2lkJyBpbiBvcHRpb24pKSB7XG4gICAgICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAgICAgc2V0VGVtcG9yYXJ5SWQob3B0aW9uLCAnaWQnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ncm91cEJ5KSB7XG4gICAgICAgICAgY29uc3QgZ3JvdXBlZCA9IHt9XG4gICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMucmVkdWNlKFxuICAgICAgICAgICAgKHJlc3VsdHMsIG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBncm91cCA9IG9wdGlvblt0aGlzLmdyb3VwQnldXG4gICAgICAgICAgICAgIGxldCBlbnRyeSA9IGdyb3VwZWRbZ3JvdXBdXG4gICAgICAgICAgICAgIGlmICghZW50cnkpIHtcbiAgICAgICAgICAgICAgICBlbnRyeSA9IGdyb3VwZWRbZ3JvdXBdID0ge1xuICAgICAgICAgICAgICAgICAgW3RoaXMuZ3JvdXBCeUxhYmVsXTogZ3JvdXAsXG4gICAgICAgICAgICAgICAgICBbdGhpcy5ncm91cEJ5T3B0aW9uc106IFtdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChlbnRyeSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbnRyeVt0aGlzLmdyb3VwQnlPcHRpb25zXS5wdXNoKG9wdGlvbilcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9wdGlvbnNcbiAgICB9LFxuXG4gICAgZ2V0T3B0aW9uRm9yVmFsdWUodmFsdWUpIHtcbiAgICAgIGNvbnN0IGZpbmRPcHRpb24gPSAob3B0aW9ucywgdmFsdWUsIGdyb3VwQnkpID0+IHtcbiAgICAgICAgLy8gU2VhcmNoIGZvciB0aGUgb3B0aW9uIG9iamVjdCB3aXRoIHRoZSBnaXZlbiB2YWx1ZSBhbmQgcmV0dXJuIHRoZVxuICAgICAgICAvLyB3aG9sZSBvYmplY3QuXG4gICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAoZ3JvdXBCeSkge1xuICAgICAgICAgICAgY29uc3QgZm91bmQgPSBmaW5kT3B0aW9uKG9wdGlvbi5vcHRpb25zLCB2YWx1ZSwgbnVsbClcbiAgICAgICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgICAgICByZXR1cm4gZm91bmRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMub3B0aW9uVmFsdWVcbiAgICAgICAgPyBmaW5kT3B0aW9uKHRoaXMuYWN0aXZlT3B0aW9ucywgdmFsdWUsIHRoaXMuZ3JvdXBCeSlcbiAgICAgICAgOiB2YWx1ZVxuICAgIH0sXG5cbiAgICBnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pIHtcbiAgICAgIGNvbnN0IHsgb3B0aW9uVmFsdWUgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc1N0cmluZyhvcHRpb25WYWx1ZSlcbiAgICAgICAgPyBvcHRpb24/LltvcHRpb25WYWx1ZV0gPz8gbnVsbFxuICAgICAgICA6IGlzRnVuY3Rpb24ob3B0aW9uVmFsdWUpXG4gICAgICAgICAgPyBvcHRpb25WYWx1ZShuZXcgRGl0b0NvbnRleHQodGhpcywgeyBvcHRpb24gfSkpXG4gICAgICAgICAgOiBvcHRpb25cbiAgICB9LFxuXG4gICAgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB7XG4gICAgICBjb25zdCB7IG9wdGlvbkxhYmVsIH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNTdHJpbmcob3B0aW9uTGFiZWwpXG4gICAgICAgID8gb3B0aW9uPy5bb3B0aW9uTGFiZWxdXG4gICAgICAgIDogaXNGdW5jdGlvbihvcHRpb25MYWJlbClcbiAgICAgICAgICA/IG9wdGlvbkxhYmVsKG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG9wdGlvbiB9KSlcbiAgICAgICAgICA6IGxhYmVsaXplKGAke29wdGlvbn1gKVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoeyBzY2hlbWEsIHZhbHVlLCBkYXRhUGF0aCB9LCBncmFwaCkge1xuICAgIGlmIChzY2hlbWEucmVsYXRlKSB7XG4gICAgICAvLyBGb3IgaW50ZXJuYWxseSByZWxhdGluZyBkYXRhIChgc2NoZW1hLm9wdGlvbnMuZGF0YVBhdGhgKSwgd2UgbmVlZCB0b1xuICAgICAgLy8gcHJvY2VzcyBib3RoIHRoZSBvcHRpb25zIChmb3IgJyNyZWYnKSBhbmQgdGhlIHZhbHVlICgnI2lkJykuXG4gICAgICAvLyBTZWUgYERhdGFNaXhpbi5oYW5kbGVEYXRhU2NoZW1hKClgOlxuICAgICAgY29uc3QgcGF0aCA9IHNjaGVtYS5vcHRpb25zPy5kYXRhUGF0aFxuICAgICAgY29uc3QgcmVsYXRlZERhdGFQYXRoID0gcGF0aFxuICAgICAgICA/IG5vcm1hbGl6ZURhdGFQYXRoKGAke2RhdGFQYXRofS8ke3BhdGh9YClcbiAgICAgICAgOiBudWxsXG4gICAgICBncmFwaC5hZGRSZWxhdGlvbihkYXRhUGF0aCwgcmVsYXRlZERhdGFQYXRoLCBzY2hlbWEpXG4gICAgICBpZiAocmVsYXRlZERhdGFQYXRoKSB7XG4gICAgICAgIGdyYXBoLnNldFNvdXJjZVJlbGF0ZWQocmVsYXRlZERhdGFQYXRoKVxuICAgICAgfVxuICAgICAgLy8gQ29udmVydCByZWxhdGluZyBvYmplY3RzIHRvIGEgc2hhbGxvdyBjb3B5IHdpdGggb25seSB0aGUgaWQgbGVmdC5cbiAgICAgIC8vIFRPRE86IENvbnZlcnQgdG8gdXNpbmcgYHJlbGF0ZUJ5YDpcbiAgICAgIGNvbnN0IHByb2Nlc3NSZWxhdGUgPSB2YWx1ZSA9PiAodmFsdWUgPyB7IGlkOiB2YWx1ZS5pZCB9IDogdmFsdWUpXG4gICAgICAvLyBTZWxlY3RlZCBvcHRpb25zIGNhbiBiZSBib3RoIG9iamVjdHMgJiBhcnJheXMsIGUuZy4gJ2NoZWNrYm94ZXMnOlxuICAgICAgdmFsdWUgPSBpc0FycmF5KHZhbHVlKVxuICAgICAgICA/IHZhbHVlLm1hcChwcm9jZXNzUmVsYXRlKVxuICAgICAgICA6IHByb2Nlc3NSZWxhdGUodmFsdWUpXG4gICAgfVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxudWwuZGl0by1jaGVja2JveGVzKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1cImBkaXRvLWxheW91dC0ke3NjaGVtYS5sYXlvdXQgfHwgJ3ZlcnRpY2FsJ31gXCJcbilcbiAgbGkoXG4gICAgdi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiXG4gIClcbiAgICBsYWJlbFxuICAgICAgLmRpdG8tY2hlY2tib3hcbiAgICAgICAgaW5wdXQoXG4gICAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkT3B0aW9uc1wiXG4gICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgICAgKVxuICAgICAgICBzcGFuIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY2hlY2tib3hlcycsIHtcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcblxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgZGVmYXVsdFZhbHVlOiBbXSxcbiAgZGVmYXVsdFdpZHRoOiAnYXV0bycsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzZWxlY3RlZE9wdGlvbnM6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLnNlbGVjdGVkVmFsdWUgfHwgW10pLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSlcbiAgICAgIH0sXG5cbiAgICAgIHNldChvcHRpb24pIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gb3B0aW9uIHx8IFtdXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tY2hlY2tib3hlcyB7XG4gIGxhYmVsIHtcbiAgICBAZXh0ZW5kICVpbnB1dC1ib3JkZXJsZXNzO1xuICB9XG5cbiAgaW5wdXQge1xuICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1jb2RlKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpzdHlsZT1cInN0eWxlXCJcbilcbiAgLmRpdG8tY29kZV9fZWRpdG9yKHJlZj1cImVkaXRvclwiKVxuICAuZGl0by1yZXNpemUoXG4gICAgdi1pZj1cInJlc2l6YWJsZVwiXG4gICAgQG1vdXNlZG93bi5zdG9wLnByZXZlbnQ9XCJvbkRyYWdSZXNpemVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgQ29kZUZsYXNrIGZyb20gJ2NvZGVmbGFzaydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjb2RlJywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaGVpZ2h0OiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXM6IGdldFNjaGVtYUFjY2Vzc29yKCdsaW5lcycsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDNcbiAgICB9KSxcblxuICAgIGxhbmd1YWdlOiBnZXRTY2hlbWFBY2Nlc3NvcignbGFuZ3VhZ2UnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnamF2YXNjcmlwdCdcbiAgICB9KSxcblxuICAgIGluZGVudFNpemU6IGdldFNjaGVtYUFjY2Vzc29yKCdpbmRlbnRTaXplJywge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMlxuICAgIH0pLFxuXG4gICAgcmVzaXphYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVzaXphYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBzdHlsZSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQgfHwgYGNhbGMoJHt0aGlzLmxpbmVzfWVtICogdmFyKC0tbGluZS1oZWlnaHQpKWBcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICBjb25zdCBmbGFzayA9IG5ldyBDb2RlRmxhc2sodGhpcy4kcmVmcy5lZGl0b3IsIHtcbiAgICAgIGxhbmd1YWdlOiB0aGlzLmxhbmd1YWdlLFxuICAgICAgaW5kZW50U2l6ZTogdGhpcy5pbmRlbnRTaXplLFxuICAgICAgbGluZU51bWJlcnM6IGZhbHNlXG4gICAgfSlcblxuICAgIGxldCBjaGFuZ2VkID0gZmFsc2VcbiAgICBsZXQgaWdub3JlV2F0Y2ggPSBmYWxzZVxuICAgIGxldCBpZ25vcmVVcGRhdGUgPSBmYWxzZVxuXG4gICAgY29uc3Qgb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZm9jdXNlZCAmJiBjaGFuZ2VkKSB7XG4gICAgICAgIGNoYW5nZWQgPSBmYWxzZVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvbkZvY3VzID0gKCkgPT4gdGhpcy5vbkZvY3VzKClcblxuICAgIGNvbnN0IG9uQmx1ciA9ICgpID0+IHtcbiAgICAgIHRoaXMub25CbHVyKClcbiAgICAgIG9uQ2hhbmdlKClcbiAgICB9XG5cbiAgICB0aGlzLmRvbU9uKHRoaXMuJHJlZnMuZWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyksIHtcbiAgICAgIGZvY3VzOiBvbkZvY3VzLFxuICAgICAgYmx1cjogb25CbHVyXG4gICAgfSlcblxuICAgIGNvbnN0IHNldENvZGUgPSBjb2RlID0+IHtcbiAgICAgIGlmIChjb2RlICE9PSBmbGFzay5jb2RlKSB7XG4gICAgICAgIGlnbm9yZVVwZGF0ZSA9IHRydWVcbiAgICAgICAgZmxhc2sudXBkYXRlQ29kZShjb2RlKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLnZhbHVlKSB7XG4gICAgICAgIGlnbm9yZVdhdGNoID0gdHJ1ZVxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgICAgICAgY2hhbmdlZCA9IHRydWVcbiAgICAgICAgb25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH1cblxuICAgIGZsYXNrLm9uVXBkYXRlKHZhbHVlID0+IHtcbiAgICAgIGlmIChpZ25vcmVVcGRhdGUpIHtcbiAgICAgICAgaWdub3JlVXBkYXRlID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFZhbHVlKHZhbHVlKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzLiR3YXRjaCgndmFsdWUnLCB2YWx1ZSA9PiB7XG4gICAgICBpZiAoaWdub3JlV2F0Y2gpIHtcbiAgICAgICAgaWdub3JlV2F0Y2ggPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0Q29kZSh2YWx1ZSB8fCAnJylcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy4kd2F0Y2goJ2xhbmd1YWdlJywgbGFuZ3VhZ2UgPT4ge1xuICAgICAgZmxhc2sudXBkYXRlTGFuZ3VhZ2UobGFuZ3VhZ2UpXG4gICAgfSlcblxuICAgIHNldENvZGUodGhpcy52YWx1ZSB8fCAnJylcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgdGhpcy4kZWwucXVlcnlTZWxlY3RvcigndGV4dGFyZWEnKT8uZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyk/LmJsdXIoKVxuICAgIH0sXG5cbiAgICBvbkRyYWdSZXNpemUoZXZlbnQpIHtcbiAgICAgIGNvbnN0IGdldFBvaW50ID0gKHsgY2xpZW50WDogeCwgY2xpZW50WTogeSB9KSA9PiAoeyB4LCB5IH0pXG5cbiAgICAgIGxldCBwcmV2WSA9IGdldFBvaW50KGV2ZW50KS55XG4gICAgICBsZXQgaGVpZ2h0ID0gcGFyc2VGbG9hdChnZXRDb21wdXRlZFN0eWxlKHRoaXMuJGVsKS5oZWlnaHQpXG5cbiAgICAgIGNvbnN0IG1vdXNlbW92ZSA9IGV2ZW50ID0+IHtcbiAgICAgICAgY29uc3QgeyB5IH0gPSBnZXRQb2ludChldmVudClcbiAgICAgICAgaGVpZ2h0ICs9IHkgLSBwcmV2WVxuICAgICAgICBwcmV2WSA9IHlcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBgJHtNYXRoLm1heChoZWlnaHQsIDApfXB4YFxuICAgICAgfVxuXG4gICAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgICAgbW91c2Vtb3ZlLFxuXG4gICAgICAgIG1vdXNldXAoZXZlbnQpIHtcbiAgICAgICAgICBtb3VzZW1vdmUoZXZlbnQpXG4gICAgICAgICAgaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1jb2RlIHtcbiAgQGV4dGVuZCAlaW5wdXQ7XG5cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAvLyBGb3IgcHJvcGVyIHNpemluZyBvZiBjb250ZW50IGFsb25nIHdpdGggOnN0eWxlPVwic3R5bGVcIiBzZXR0aW5nIGFib3ZlLFxuICAvLyBmb3IgcHJvcGVyIGxpbmUtaGVpZ2h0IGNhbGN1bGF0aW9uLlxuICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcbiAgbWluLWhlaWdodDogY2FsYygxZW0gKiB2YXIoLS1saW5lLWhlaWdodCkgKyAyICogJGlucHV0LXBhZGRpbmctdmVyKTtcblxuICAuY29kZWZsYXNrIHtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIC8vIElnbm9yZSB0aGUgcGFyZW50IHBhZGRpbmcgZGVmaW5lZCBhYm92ZSB3aGljaCBpcyBvbmx5IG5lZWRlZCB0byBzZXRcbiAgICAvLyB0aGUgZGVzaXJlZCBoZWlnaHQgd2l0aCA6c3R5bGU9XCJzdHlsZVwiLlxuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuXG4gICAgJl9fdGV4dGFyZWEsXG4gICAgJl9fcHJlIHtcbiAgICAgIC8vIFVzZSBzYW1lIHBhZGRpbmcgYXMgLmRpdG8tY29kZVxuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmc7XG4gICAgfVxuXG4gICAgJl9fdGV4dGFyZWEsXG4gICAgJl9fY29kZSxcbiAgICAmX19saW5lcyB7XG4gICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LW1vbm87XG4gICAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZSk7XG4gICAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQpO1xuICAgIH1cblxuICAgICZfX2xpbmVzIHtcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5UcmlnZ2VyLmRpdG8tY29sb3IoXG4gIHYtbW9kZWw6c2hvdz1cInNob3dQb3B1cFwiXG4gIHRyaWdnZXI9XCJmb2N1c1wiXG4pXG4gIHRlbXBsYXRlKCN0cmlnZ2VyKVxuICAgIC5kaXRvLWlucHV0KDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBzaG93UG9wdXAgfVwiKVxuICAgICAgaW5wdXQoXG4gICAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgIHYtbW9kZWw9XCJoZXhWYWx1ZVwiXG4gICAgICAgIHR5cGU9XCJpbnB1dFwiXG4gICAgICAgIHNpemU9XCI4XCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICApXG4gICAgICAuZGl0by1jb2xvci1wcmV2aWV3LmRpdG8taW5oZXJpdC1mb2N1cyhcbiAgICAgICAgdi1pZj1cInZhbHVlXCJcbiAgICAgIClcbiAgICAgICAgZGl2KDpzdHlsZT1cInsgYmFja2dyb3VuZDogYCMke2hleFZhbHVlIHx8ICcwMDAwMDAwMCd9YCB9XCIpXG4gICAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgQGNsaWNrLnN0b3A9XCJjbGVhclwiXG4gICAgICApXG4gIHRlbXBsYXRlKCNwb3B1cClcbiAgICBTa2V0Y2hQaWNrZXIuZGl0by1jb2xvci1waWNrZXIoXG4gICAgICB2LW1vZGVsPVwiY29sb3JWYWx1ZVwiXG4gICAgICA6ZGlzYWJsZUFscGhhPVwiIWFscGhhXCJcbiAgICAgIDpkaXNhYmxlRmllbGRzPVwiIWlucHV0c1wiXG4gICAgICA6cHJlc2V0Q29sb3JzPVwicHJlc2V0c1wiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB0aW55Y29sb3IgZnJvbSAndGlueWNvbG9yMidcbmltcG9ydCB7IFNrZXRjaCBhcyBTa2V0Y2hQaWNrZXIgfSBmcm9tICdAbGs3Ny92dWUzLWNvbG9yJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IFRyaWdnZXIgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIE1vbmtleS1wYXRjaCB0aGUgYFNrZXRjaFBpY2tlcidzYCBgaGV4YCBjb21wdXRlZCBwcm9wZXJ0eSB0byByZXR1cm4gbG93ZXJjYXNlXG4vLyBoZXggdmFsdWVzIGluc3RlYWQgb2YgdXBwZXJjYXNlIG9uZXMuXG5jb25zdCB7IGhleCB9ID0gU2tldGNoUGlja2VyLmNvbXB1dGVkXG5Ta2V0Y2hQaWNrZXIuY29tcHV0ZWQuaGV4ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gaGV4LmNhbGwodGhpcykudG9Mb3dlckNhc2UoKVxufVxuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NvbG9yJywge1xuICBjb21wb25lbnRzOiB7IFRyaWdnZXIsIFNrZXRjaFBpY2tlciB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3dQb3B1cDogZmFsc2UsXG4gICAgICBjb252ZXJ0ZWRWYWx1ZTogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNhblVwZGF0ZVZhbHVlKCkge1xuICAgICAgcmV0dXJuICF0aGlzLmZvY3VzZWQgfHwgdGhpcy5yZWFkb25seVxuICAgIH0sXG5cbiAgICBjb2xvclZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgdGhpcy5jb252ZXJ0ZWRWYWx1ZSB8fFxuICAgICAgICAgIHRoaXMudmFsdWUgfHxcbiAgICAgICAgICAodGhpcy5jb2xvckZvcm1hdCA9PT0gJ2hleCcgPyAnJyA6IHt9KVxuICAgICAgICApXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IGNvbnZlcnRDb2xvcih2YWx1ZSwgdGhpcy5jb2xvckZvcm1hdClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaGV4VmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgY29sb3IgPSB0aW55Y29sb3IodGhpcy52YWx1ZSlcbiAgICAgICAgcmV0dXJuIGNvbG9yLmlzVmFsaWQoKVxuICAgICAgICAgID8gY29sb3JcbiAgICAgICAgICAgICAgLnRvU3RyaW5nKGNvbG9yLmdldEFscGhhKCkgPCAxID8gJ2hleDgnIDogJ2hleDYnKVxuICAgICAgICAgICAgICAuc2xpY2UoMSlcbiAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICA6IG51bGxcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBjb25zdCBjb2xvciA9IHRpbnljb2xvcih2YWx1ZSlcbiAgICAgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkge1xuICAgICAgICAgIGNvbnN0IGNvbnZlcnRlZFZhbHVlID0gY29udmVydENvbG9yKHZhbHVlLCB0aGlzLmNvbG9yRm9ybWF0KVxuICAgICAgICAgIGlmICh0aGlzLmNhblVwZGF0ZVZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29udmVydGVkVmFsdWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gU3RvcmUgdG8gY2hhbmdlIGxhdGVyLCBvbmNlIGBjYW5VcGRhdGVWYWx1ZWAgaXMgdHJ1ZSBhZ2Fpbi5cbiAgICAgICAgICAgIC8vIFNlZSBgd2F0Y2hgIGJlbG93LlxuICAgICAgICAgICAgdGhpcy5jb252ZXJ0ZWRWYWx1ZSA9IGNvbnZlcnRlZFZhbHVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFRPRE86IGBmb3JtYXRgIGNsYXNoZXMgd2l0aCBUeXBlTWl4aW4uZm9ybWF0KClgLCB3aGljaCBzaGFsbCBiZSByZW5hbWVkXG4gICAgLy8gc29vbiB0byBgZm9ybWF0VmFsdWUoKWAuIFJlbmFtZSBgY29sb3JGb3JtYXRgIGJhY2sgdG8gYGZvcm1hdGAgYWZ0ZXIuXG4gICAgY29sb3JGb3JtYXQ6IGdldFNjaGVtYUFjY2Vzc29yKCdmb3JtYXQnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnaGV4J1xuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBzaG93QWxwaGFgP1xuICAgIGFscGhhOiBnZXRTY2hlbWFBY2Nlc3NvcignYWxwaGEnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgc2hvd0lucHV0c2A/XG4gICAgaW5wdXRzOiBnZXRTY2hlbWFBY2Nlc3NvcignaW5wdXRzJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KSxcblxuICAgIHByZXNldHM6IGdldFNjaGVtYUFjY2Vzc29yKCdwcmVzZXRzJywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBkZWZhdWx0OiBbXG4gICAgICAgICcjZmZmZmZmJyxcbiAgICAgICAgJyNjM2MzYzMnLFxuICAgICAgICAnIzdmN2Y3ZicsXG4gICAgICAgICcjMDAwMDAwJyxcbiAgICAgICAgJyM4ODAwMTUnLFxuICAgICAgICAnI2VkMWMyNCcsXG4gICAgICAgICcjZmY3ZjI3JyxcbiAgICAgICAgJyNmZmYyMDAnLFxuXG4gICAgICAgICcjMjJiMTRjJyxcbiAgICAgICAgJyMwMGEyZTgnLFxuICAgICAgICAnIzNmNDhjYycsXG4gICAgICAgICcjYTM0OWE0JyxcbiAgICAgICAgJyNiOTdhNTcnLFxuICAgICAgICAnI2ZmYWVjOScsXG4gICAgICAgICcjZmZjOTBlJyxcbiAgICAgICAgJyMwMDAwMDAwMCdcbiAgICAgIF1cbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgdmFsdWU6ICdvbkNoYW5nZScsXG5cbiAgICBjYW5VcGRhdGVWYWx1ZShjYW5VcGRhdGVWYWx1ZSkge1xuICAgICAgaWYgKGNhblVwZGF0ZVZhbHVlICYmIHRoaXMuY29udmVydGVkVmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY29udmVydGVkVmFsdWVcbiAgICAgICAgdGhpcy5jb252ZXJ0ZWRWYWx1ZSA9IG51bGxcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG5cbmZ1bmN0aW9uIGNvbnZlcnRDb2xvcihjb2xvciwgZm9ybWF0KSB7XG4gIHJldHVybiBpc09iamVjdChjb2xvcikgLy8gYSB2dWUzLWNvbG9yIGNvbG9yIG9iamVjdFxuICAgID8gdG9WdWUzQ29sb3JGb3JtYXQoY29sb3IsIGZvcm1hdClcbiAgICA6IHRvVGlueUNvbG9yRm9ybWF0KHRpbnljb2xvcihjb2xvciksIGZvcm1hdClcbn1cblxuZnVuY3Rpb24gdG9WdWUzQ29sb3JGb3JtYXQoY29sb3IsIGZvcm1hdCkge1xuICBjb25zdCB2YWx1ZSA9XG4gICAgY29sb3JbXG4gICAgICB7XG4gICAgICAgIGhleDogY29sb3I/LmEgPCAxID8gJ2hleDgnIDogJ2hleCcsXG4gICAgICAgIHJnYjogJ3JnYmEnXG4gICAgICB9W2Zvcm1hdF0gfHxcbiAgICAgIGZvcm1hdFxuICAgIF1cbiAgcmV0dXJuIGlzU3RyaW5nKHZhbHVlKSAmJiB2YWx1ZVswXSA9PT0gJyMnID8gdmFsdWUudG9Mb3dlckNhc2UoKSA6IHZhbHVlXG59XG5cbi8vIFRoaXMgc2hvdWxkIHJlYWxseSBiZSBpbiB0aW55Y29sb3IsIGJ1dCBpdCBvbmx5IGhhcyB0aGUgc3RyaW5nIGVxdWl2YWxlbnRcbi8vIG9mIGl0LlxuZnVuY3Rpb24gdG9UaW55Q29sb3JGb3JtYXQoY29sb3IsIGZvcm1hdCkge1xuICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgIGNhc2UgJ3JnYic6XG4gICAgICByZXR1cm4gY29sb3IudG9SZ2IoKVxuICAgIGNhc2UgJ3ByZ2InOlxuICAgICAgcmV0dXJuIGNvbG9yLnRvUGVyY2VudGFnZVJnYigpXG4gICAgY2FzZSAnbmFtZSc6XG4gICAgICByZXR1cm4gY29sb3IudG9OYW1lKClcbiAgICBjYXNlICdoc2wnOlxuICAgICAgcmV0dXJuIGNvbG9yLnRvSHNsKClcbiAgICBjYXNlICdoc3YnOlxuICAgICAgcmV0dXJuIGNvbG9yLnRvSHN2KClcbiAgICBjYXNlICdoZXgzJzpcbiAgICAgIHJldHVybiBgIyR7Y29sb3IudG9IZXgodHJ1ZSl9YFxuICAgIGNhc2UgJ2hleDQnOlxuICAgICAgcmV0dXJuIGAjJHtjb2xvci50b0hleDgodHJ1ZSl9YFxuICAgIGNhc2UgJ2hleDgnOlxuICAgICAgcmV0dXJuIGAjJHtjb2xvci50b0hleDgoKX1gXG4gICAgY2FzZSAnaGV4JzpcbiAgICBjYXNlICdoZXg2JzpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGAjJHtjb2xvci50b0hleCgpfWBcbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuJGNvbG9yLXN3YXRjaC13aWR0aDogJHBhdHRlcm4tdHJhbnNwYXJlbmN5LXNpemU7XG4kY29sb3Itc3dhdGNoLXJhZGl1czogJGJvcmRlci1yYWRpdXMgLSAkYm9yZGVyLXdpZHRoO1xuXG4uZGl0by1jb2xvciB7XG4gIC5kaXRvLWlucHV0IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICBpbnB1dCB7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICAgIHBhZGRpbmctcmlnaHQ6ICRjb2xvci1zd2F0Y2gtd2lkdGg7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tYnV0dG9uLWNsZWFyIHtcbiAgICBtYXJnaW4tcmlnaHQ6ICRjb2xvci1zd2F0Y2gtd2lkdGg7XG4gIH1cblxuICAuZGl0by1jb2xvci1waWNrZXIge1xuICAgIG1hcmdpbjogJHBvcHVwLW1hcmdpbjtcbiAgICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93O1xuICB9XG5cbiAgLmRpdG8tY29sb3ItcHJldmlldyB7XG4gICAgYmFja2dyb3VuZDogJHBhdHRlcm4tdHJhbnNwYXJlbmN5O1xuICAgIGJvcmRlci1sZWZ0OiAkYm9yZGVyLXN0eWxlO1xuXG4gICAgJixcbiAgICBkaXYge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgd2lkdGg6ICRjb2xvci1zd2F0Y2gtd2lkdGg7XG4gICAgICB0b3A6IDA7XG4gICAgICByaWdodDogMDtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkY29sb3Itc3dhdGNoLXJhZGl1cztcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkY29sb3Itc3dhdGNoLXJhZGl1cztcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuY29tcG9uZW50KFxuICA6aXM9XCJzY2hlbWEuY29tcG9uZW50XCJcbiAgdi1iaW5kPVwiJHByb3BzXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4vLyBUaGlzIGlzIHRoZSBnZW5lcmFsIHB1cnBvc2UgJ2NvbXBvbmVudCcgdHlwZSwgd2hpY2ggY2FuIHJlc29sdmUgdG8gYW55IGN1c3RvbVxuLy8gY29tcG9uZW50IHRocm91Z2ggYHNjaGVtYS5jb21wb25lbnRgLCBzZWUgYHJlc29sdmVTY2hlbWFDb21wb25lbnQoKWAuIFRoaXNcbi8vIGNhbiBiZSB1c2VkIHRvIG5lc3QgYXJiaXRyYXJ5IHZ1ZSBjb21wb25lbnRzIGluIHNjaGVtYTpcbi8vIHtcbi8vICAgdHlwZTogJ2NvbXBvbmVudCcsXG4vLyAgIGNvbXBvbmVudDogaW1wb3J0KCcuL2NvbXBvbmVudCcpXG4vLyB9XG5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IHJlc29sdmVTY2hlbWFDb21wb25lbnQgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY29tcG9uZW50Jywge1xuICAvLyBPdmVycmlkZSB0aGUgc3RhbmRhcmQgYGRlZmF1bHRWYWx1ZTogbnVsbGAgdG8gbm90IHNldCBhbnkgZGF0YSBmb3IgY3VzdG9tXG4gIC8vIGNvbXBvbmVudHMsIHVubGVzcyB0aGV5IHByb3ZpZGUgYSBkZWZhdWx0IHZhbHVlLlxuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiAoeyBzY2hlbWEgfSkgPT4gISgnZGVmYXVsdCcgaW4gc2NoZW1hKSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKGFwaSwgc2NoZW1hKSB7XG4gICAgYXdhaXQgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudChzY2hlbWEpXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4vLy0gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gdHJpZ2dlciBldmFsdWF0aW9uIG9mIGB2YWx1ZWAgdGhhdCBkb3NlIG5vdFxuLy8tIGludm9sdmUgYWN0dWFsbHkgcmVuZGVyaW5nIGl0IHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgdmlzaWJsZS5cbmlucHV0LmRpdG8tdGV4dC5kaXRvLWlucHV0KFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6bmFtZT1cIm5hbWVcIlxuICB0eXBlPVwidGV4dFwiXG4gIDp2YWx1ZT1cInZhbHVlXCJcbiAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICA6cmVhZG9ubHk9XCJ0cnVlXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgVmFsdWVNaXhpbiBmcm9tICcuLi9taXhpbnMvVmFsdWVNaXhpbi5qcydcbmltcG9ydCBEYXRhTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RhdGFNaXhpbi5qcydcblxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoXG4gIFsnY29tcHV0ZWQnLCAnZGF0YScsICdoaWRkZW4nXSxcbiAgLy8gQHZ1ZS9jb21wb25lbnRcbiAge1xuICAgIG1peGluczogW0RhdGFNaXhpbl0sXG5cbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgICBkZWZhdWx0VmlzaWJsZTogZmFsc2UsXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgdmFsdWU6IHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgIGNvbnN0IHsgc2NoZW1hIH0gPSB0aGlzXG4gICAgICAgICAgaWYgKHNjaGVtYS5kYXRhIHx8IHNjaGVtYS5kYXRhUGF0aCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmhhbmRsZURhdGFTY2hlbWEoc2NoZW1hLCAndmFsdWUnKVxuICAgICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICAgICAgICAgIHRoaXMuZGF0YVt0aGlzLm5hbWVdID0gdmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFZhbHVlTWl4aW4uY29tcHV0ZWQudmFsdWUuZ2V0LmNhbGwodGhpcylcbiAgICAgICAgfSxcblxuICAgICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgICBWYWx1ZU1peGluLmNvbXB1dGVkLnZhbHVlLnNldC5jYWxsKHRoaXMsIHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1kYXRlXG4gIGNvbXBvbmVudChcbiAgICA6aXM9XCJnZXRDb21wb25lbnQodHlwZSlcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICB2LW1vZGVsPVwiZGF0ZVZhbHVlXCJcbiAgICA6bG9jYWxlPVwibG9jYWxlXCJcbiAgICA6Zm9ybWF0PVwiZm9ybWF0c1wiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIClcbiAgICB0ZW1wbGF0ZSgjYWZ0ZXIpXG4gICAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgQGNsaWNrLnN0b3A9XCJjbGVhclwiXG4gICAgICAgIEBtb3VzZWRvd24uc3RvcFxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBEYXRlUGlja2VyLCBUaW1lUGlja2VyLCBEYXRlVGltZVBpY2tlciB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IHsgaXNEYXRlLCBhc3NpZ25EZWVwbHkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcihcbiAgWydkYXRlJywgJ2RhdGV0aW1lJywgJ3RpbWUnXSxcbiAgLy8gQHZ1ZS9jb21wb25lbnRcbiAge1xuICAgIGNvbXBvbmVudHM6IHsgRGF0ZVBpY2tlciwgVGltZVBpY2tlciwgRGF0ZVRpbWVQaWNrZXIgfSxcbiAgICAvLyBUT0RPOiBUaGlzIGlzIG9ubHkgaGVyZSBzbyB3ZSBnZXQgcGxhY2Vob2xkZXIgYWRkZWQuIENvbWUgdXAgd2l0aCBhXG4gICAgLy8gYmV0dGVyIHdheSB0byBzdXBwb3J0IGF0dHJpYnV0ZXMgcGVyIGNvbXBvbmVudCAoYSBsaXN0IG9mIGFjdHVhbGx5XG4gICAgLy8gc3VwcG9ydGVkIGF0dHJpYnV0ZXMpXG4gICAgbmF0aXZlRmllbGQ6IHRydWUsXG4gICAgdGV4dEZpZWxkOiB0cnVlLFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIGRhdGVWYWx1ZToge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpc1xuICAgICAgICAgIHJldHVybiB2YWx1ZSA/IG5ldyBEYXRlKHZhbHVlKSA6IHZhbHVlXG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIC8vIFRPRE86IFJlbmFtZSB0byBgZm9ybWF0YCwgb25jZSBgc2NoZW1hLmZvcm1hdCgpYCB3YXMgcmVtb3ZlZCB0b1xuICAgICAgLy8gYGZvcm1hdFZhbHVlKClgLlxuICAgICAgZm9ybWF0czogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Zvcm1hdHMnLCB7XG4gICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgZ2V0KGZvcm1hdHMpIHtcbiAgICAgICAgICBjb25zdCB7IGRhdGUsIHRpbWUgfSA9IGFzc2lnbkRlZXBseSh7fSwgdGhpcy5hcGkuZm9ybWF0cywgZm9ybWF0cylcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0ZTogWydkYXRlJywgJ2RhdGV0aW1lJ10uaW5jbHVkZXModGhpcy50eXBlKSA/IGRhdGUgOiBudWxsLFxuICAgICAgICAgICAgdGltZTogWyd0aW1lJywgJ2RhdGV0aW1lJ10uaW5jbHVkZXModGhpcy50eXBlKSA/IHRpbWUgOiBudWxsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICBnZXRDb21wb25lbnQodHlwZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGU6ICdkYXRlLXBpY2tlcicsXG4gICAgICAgICAgdGltZTogJ3RpbWUtcGlja2VyJyxcbiAgICAgICAgICBkYXRldGltZTogJ2RhdGUtdGltZS1waWNrZXInXG4gICAgICAgIH1bdHlwZV1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcHJvY2Vzc1ZhbHVlKHsgdmFsdWUgfSkge1xuICAgICAgcmV0dXJuIGlzRGF0ZSh2YWx1ZSkgPyB2YWx1ZS50b0lTT1N0cmluZygpIDogdmFsdWVcbiAgICB9XG4gIH1cbilcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRRdWVyeShxdWVyeSkge1xuICBjb25zdCBlbnRyaWVzID0gcXVlcnlcbiAgICA/IGlzQXJyYXkocXVlcnkpXG4gICAgICA/IHF1ZXJ5XG4gICAgICA6IE9iamVjdC5lbnRyaWVzKHF1ZXJ5KVxuICAgIDogW11cbiAgcmV0dXJuIChcbiAgICBuZXcgVVJMU2VhcmNoUGFyYW1zKFxuICAgICAgLy8gRXhwYW5kIGFycmF5IHZhbHVlcyBpbnRvIG11bHRpcGxlIGVudHJpZXMgdW5kZXIgdGhlIHNhbWUga2V5LCBzb1xuICAgICAgLy8gYGZvcm1hdFF1ZXJ5KHsgZm9vOiBbMSwgMl0sIGJhcjogMyB9KWAgPT4gJ2Zvbz0xJmZvbz0yJmJhcj0zJy5cbiAgICAgIGVudHJpZXMucmVkdWNlKFxuICAgICAgICAoZW50cmllcywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZhbCBvZiB2YWx1ZSkge1xuICAgICAgICAgICAgICAvLyBQcmV2ZW50IG51bGwgb3IgdW5kZWZpbmVkIHZhbHVlcyBmcm9tIGJlY29taW5nIHN0cmluZ3MsXG4gICAgICAgICAgICAgIC8vIGJ1dCBzaW5jZSB0aGV5J3JlIGVudHJpZXMgaW4gYW4gYXJyYXksIHdlIHN0aWxsIGluY2x1ZGUgdGhlbS5cbiAgICAgICAgICAgICAgZW50cmllcy5wdXNoKFtrZXksIHZhbCA/PyAnJ10pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBlbnRyaWVzLnB1c2goW2tleSwgdmFsdWVdKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZW50cmllc1xuICAgICAgICB9LFxuICAgICAgICBbXVxuICAgICAgKVxuICAgIClcbiAgICAgIC50b1N0cmluZygpXG4gICAgICAvLyBkZWNvZGUgYWxsIHRoZXNlIGVuY29kZWQgY2hhcmFjdGVycyB0byBoYXZlIHRoZSBzYW1lIGJlaGF2aW9yIGFzXG4gICAgICAvLyB2dWUtcm91dGVyJ3Mgb3duIHF1ZXJ5IGVuY29kaW5nLlxuICAgICAgLnJlcGxhY2VBbGwoLyUoPzoyMXwyNHwyOHwyOXwyQ3wyRnwzQXwzQnwzRHwzRnw0MCkvZywgZGVjb2RlVVJJQ29tcG9uZW50KVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlUm91dGUoeyBwYXRoLCBxdWVyeSwgaGFzaCB9KSB7XG4gIC8vIFByZXNlcnZlIGBoaXN0b3J5LnN0YXRlYCwgc2VlOlxuICAvLyBodHRwczovL3JvdXRlci52dWVqcy5vcmcvZ3VpZGUvbWlncmF0aW9uLyN1c2FnZS1vZi1oaXN0b3J5LXN0YXRlXG4gIGNvbnN0IHsgbG9jYXRpb24gfSA9IHdpbmRvd1xuICBoaXN0b3J5LnJlcGxhY2VTdGF0ZShcbiAgICBoaXN0b3J5LnN0YXRlLFxuICAgIG51bGwsXG4gICAgYCR7XG4gICAgICBsb2NhdGlvbi5vcmlnaW5cbiAgICB9JHtcbiAgICAgIHBhdGggPz8gbG9jYXRpb24ucGF0aG5hbWVcbiAgICB9PyR7XG4gICAgICBxdWVyeSA/IGZvcm1hdFF1ZXJ5KHF1ZXJ5KSA6IGxvY2F0aW9uLnNlYXJjaC5zbGljZSgxKVxuICAgIH0ke1xuICAgICAgaGFzaCA/PyBsb2NhdGlvbi5oYXNoXG4gICAgfWBcbiAgKVxufVxuIiwiaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBJdGVtTWl4aW4gZnJvbSAnLi9JdGVtTWl4aW4uanMnXG5pbXBvcnQgUmVzb3VyY2VNaXhpbiBmcm9tICcuL1Jlc291cmNlTWl4aW4uanMnXG5pbXBvcnQgU2NoZW1hUGFyZW50TWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NjaGVtYVBhcmVudE1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IsIGdldFN0b3JlQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyByZXBsYWNlUm91dGUgfSBmcm9tICcuLi91dGlscy9yb3V0ZS5qcydcbmltcG9ydCB7XG4gIHByb2Nlc3NSb3V0ZVNjaGVtYSxcbiAgcHJvY2Vzc0Zvcm1zLFxuICBnZXROYW1lZFNjaGVtYXMsXG4gIGdldEJ1dHRvblNjaGVtYXMsXG4gIGhhc0Zvcm1TY2hlbWEsXG4gIGdldEZvcm1TY2hlbWFzLFxuICBnZXRWaWV3U2NoZW1hLFxuICBpc0NvbXBhY3QsXG4gIGlzSW5saW5lZCxcbiAgaXNPYmplY3RTb3VyY2UsXG4gIGlzTGlzdFNvdXJjZVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQge1xuICBpc09iamVjdCxcbiAgaXNTdHJpbmcsXG4gIGlzQXJyYXksXG4gIGlzTnVtYmVyLFxuICBlcXVhbHMsXG4gIHBhcnNlRGF0YVBhdGgsXG4gIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyByYXcgfSBmcm9tICdAZGl0b2pzL3VpJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtJdGVtTWl4aW4sIFJlc291cmNlTWl4aW4sIFNjaGVtYVBhcmVudE1peGluXSxcblxuICBkZWZhdWx0VmFsdWU6IGNvbnRleHQgPT4gKGlzTGlzdFNvdXJjZShjb250ZXh0LnNjaGVtYSkgPyBbXSA6IG51bGwpLFxuICAvLyBFeGNsdWRlIGFsbCBzb3VyY2VzIHRoYXQgaGF2ZSB0aGVpciBvd24gcmVzb3VyY2UgaGFuZGxpbmcgdGhlIGRhdGEuXG4gIGV4Y2x1ZGVWYWx1ZTogY29udGV4dCA9PiAhIWNvbnRleHQuc2NoZW1hLnJlc291cmNlLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd3JhcHBlZFByaW1pdGl2ZXM6IG51bGwsXG4gICAgICB1bndyYXBwaW5nUHJpbWl0aXZlczogcmF3KGZhbHNlKVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIGlzT2JqZWN0U291cmNlKCkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0U291cmNlKHRoaXMudHlwZSlcbiAgICB9LFxuXG4gICAgaXNMaXN0U291cmNlKCkge1xuICAgICAgcmV0dXJuIGlzTGlzdFNvdXJjZSh0aGlzLnR5cGUpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmhhc0RhdGEoKVxuICAgIGhhc0RhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnZhbHVlXG4gICAgfSxcblxuICAgIHNob3VsZFJlbmRlcigpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvdXJjZURlcHRoIDwgdGhpcy5tYXhEZXB0aFxuICAgIH0sXG5cbiAgICBpc1JlYWR5KCkge1xuICAgICAgLy8gTGlzdHMgdGhhdCBoYXZlIG5vIGRhdGEgYW5kIG5vIGFzc29jaWF0ZWQgcmVzb3VyY2Ugc2hvdWxkIHN0aWxsIHJlbmRlcixcbiAgICAgIC8vIGFzIHRoZXkgbWF5IGJlIGdldHRpbmcgdGhlaXIgZGF0YSBlbHNld2hlcmUsIGUuZy4gYGNvbXB1dGUoKWAuXG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLnNob3VsZFJlbmRlciAmJlxuICAgICAgICAodGhpcy5oYXNEYXRhIHx8ICF0aGlzLnByb3ZpZGVzRGF0YSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNJblZpZXcoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnZpZXdDb21wb25lbnRcbiAgICB9LFxuXG4gICAgd3JhcFByaW1pdGl2ZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEud3JhcFByaW1pdGl2ZXNcbiAgICB9LFxuXG4gICAgbGlzdERhdGE6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLnZhbHVlXG4gICAgICAgIGlmICh0aGlzLmlzT2JqZWN0U291cmNlKSB7XG4gICAgICAgICAgLy8gQ29udmVydCB0byBsaXN0IGFycmF5LlxuICAgICAgICAgIGRhdGEgPSBkYXRhICE9IG51bGwgPyBbZGF0YV0gOiBbXVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElmIGRhdGEgZ2V0cyBpbmhlcml0ZWQgZnJvbSBwYXJlbnQsIHVud3JhcHBpbmcgaXMgbm90IGhhcHBlbmluZ1xuICAgICAgICAgIC8vIGF0IHRoZSByb290IGluIGBzZXREYXRhKClgLCBidXQgaGVyZSBpbnN0ZWFkLlxuICAgICAgICAgIGRhdGEgPSB0aGlzLnVud3JhcExpc3REYXRhKGRhdGEpIHx8IGRhdGFcbiAgICAgICAgfVxuICAgICAgICBkYXRhIHx8PSBbXVxuICAgICAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzIH0gPSB0aGlzXG4gICAgICAgIGlmICh3cmFwUHJpbWl0aXZlcykge1xuICAgICAgICAgIGlmICh0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzLnZhbHVlKSB7XG4gICAgICAgICAgICAvLyBXZSdyZSBkb25lIHVud3JhcHBpbmcgb25jZSBgbGlzdERhdGFgIGlzIHJlZXZhbHVhdGVkLCBzbyBzZXRcbiAgICAgICAgICAgIC8vIHRoaXMgdG8gYGZhbHNlYCBhZ2Fpbi4gU2VlIGB3cmFwcGVkUHJpbWl0aXZlc2Agd2F0Y2hlciBhYm92ZS5cbiAgICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLXNpZGUtZWZmZWN0cy1pbi1jb21wdXRlZC1wcm9wZXJ0aWVzXG4gICAgICAgICAgICB0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzLnZhbHVlID0gZmFsc2VcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQ29udmVydCBkYXRhIHRvIGEgbGlzdCBvZiB3cmFwcGVkIHByaW1pdGl2ZXMsIGFuZCByZXR1cm4gaXQuXG4gICAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgICAgICAgdGhpcy53cmFwcGVkUHJpbWl0aXZlcyA9IGRhdGEubWFwKHZhbHVlID0+ICh7XG4gICAgICAgICAgICAgIFt3cmFwUHJpbWl0aXZlc106IHZhbHVlXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRoaXMud3JhcHBlZFByaW1pdGl2ZXNcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgfSxcblxuICAgICAgc2V0KGRhdGEpIHtcbiAgICAgICAgaWYgKHRoaXMud3JhcFByaW1pdGl2ZXMpIHtcbiAgICAgICAgICB0aGlzLndyYXBwZWRQcmltaXRpdmVzID0gZGF0YVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmlzT2JqZWN0U291cmNlXG4gICAgICAgICAgICA/IGRhdGEgJiYgZGF0YS5sZW5ndGggPiAwXG4gICAgICAgICAgICAgID8gZGF0YVswXVxuICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgIDogZGF0YVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG9iamVjdERhdGE6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgLy8gQWx3YXlzIGdvIHRocm91Z2ggYGxpc3REYXRhYCBpbnRlcm5hbGx5LCB3aGljaCBkb2VzIGFsbCB0aGVcbiAgICAgICAgLy8gcHJvY2Vzc2luZyBvZiBgd3JhcFByaW1pdGl2ZXNgLCBldGMuXG4gICAgICAgIHJldHVybiB0aGlzLmxpc3REYXRhWzBdIHx8IG51bGxcbiAgICAgIH0sXG5cbiAgICAgIHNldChkYXRhKSB7XG4gICAgICAgIHRoaXMubGlzdERhdGEgPSBkYXRhID8gW2RhdGFdIDogW11cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc291cmNlU2NoZW1hKCkge1xuICAgICAgLy8gVGhlIHNvdXJjZVNjaGVtYSBvZiBhIGxpc3QgaXMgdGhlIGxpc3QncyBzY2hlbWEgaXRzZWxmLlxuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hXG4gICAgfSxcblxuICAgIHNvdXJjZURlcHRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLm1hdGNoZWQucmVkdWNlKFxuICAgICAgICAoZGVwdGgsIHJlY29yZCkgPT4gKFxuICAgICAgICAgIGRlcHRoICsgKHJlY29yZC5tZXRhLnNjaGVtYSA9PT0gdGhpcy5zb3VyY2VTY2hlbWEgPyAxIDogMClcbiAgICAgICAgKSxcbiAgICAgICAgMFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBwYXRoKCkge1xuICAgICAgLy8gVGhpcyBpcyB1c2VkIGluIFR5cGVMaXN0IGZvciBEaXRvRm9ybUNob29zZXIuXG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZUNvbXBvbmVudC5nZXRDaGlsZFBhdGgodGhpcy5zY2hlbWEucGF0aClcbiAgICB9LFxuXG4gICAgZGVmYXVsdFF1ZXJ5KCkge1xuICAgICAgY29uc3QgeyBkZWZhdWx0T3JkZXI6IG9yZGVyIH0gPSB0aGlzXG4gICAgICByZXR1cm4gb3JkZXIgPyB7IG9yZGVyIH0gOiB7fVxuICAgIH0sXG5cbiAgICBxdWVyeTogZ2V0U3RvcmVBY2Nlc3NvcigncXVlcnknLCB7XG4gICAgICBnZXQocXVlcnkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi50aGlzLmRlZmF1bHRRdWVyeSxcbiAgICAgICAgICAuLi5xdWVyeVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBzZXQocXVlcnkpIHtcbiAgICAgICAgLy8gQWx3YXlzIGtlZXAgdGhlIGRpc3BsYXllZCBxdWVyeSBwYXJhbWV0ZXJzIGluIHN5bmMgd2l0aCB0aGUgc3RvcmVkXG4gICAgICAgIC8vIG9uZXMuIFVzZSBzY29wZSBhbmQgcGFnZSBmcm9tIHRoZSBsaXN0IHNjaGVtYSBhcyBkZWZhdWx0cywgYnV0IGFsbG93XG4gICAgICAgIC8vIHRoZSByb3V0ZSBxdWVyeSBwYXJhbWV0ZXJzIHRvIG92ZXJyaWRlIHRoZW0uXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBzY29wZSA9IHRoaXMuZGVmYXVsdFNjb3BlPy5uYW1lLFxuICAgICAgICAgIHBhZ2UgPSB0aGlzLnNjaGVtYS5wYWdlXG4gICAgICAgIH0gPSB0aGlzLnF1ZXJ5XG4gICAgICAgIC8vIFByZXNlcnZlIC8gbWVyZ2UgY3VycmVudGx5IHN0b3JlZCB2YWx1ZXMuXG4gICAgICAgIHF1ZXJ5ID0ge1xuICAgICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgICAgLi4uKHNjb3BlICE9IG51bGwgJiYgeyBzY29wZSB9KSxcbiAgICAgICAgICAuLi4ocGFnZSAhPSBudWxsICYmIHsgcGFnZSB9KSxcbiAgICAgICAgICAuLi5xdWVyeVxuICAgICAgICB9XG4gICAgICAgIGlmICghZXF1YWxzKHF1ZXJ5LCB0aGlzLiRyb3V0ZS5xdWVyeSkpIHtcbiAgICAgICAgICAvLyBDaGFuZ2UgdGhlIHJvdXRlIHF1ZXJ5IHBhcmFtZXRlcnMsIGJ1dCBkb24ndCB0cmlnZ2VyIGEgcm91dGVcbiAgICAgICAgICAvLyBjaGFuZ2UsIGFzIHRoYXQgd291bGQgY2F1c2UgdGhlIGxpc3QgdG8gcmVsb2FkLlxuICAgICAgICAgIHJlcGxhY2VSb3V0ZSh7IHF1ZXJ5IH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHF1ZXJ5IC8vIExldCBnZXRTdG9yZUFjY2Vzc29yKCkgZG8gdGhlIGFjdHVhbCBzZXR0aW5nXG4gICAgICB9XG4gICAgfSksXG5cbiAgICB0b3RhbDogZ2V0U3RvcmVBY2Nlc3NvcigndG90YWwnKSxcblxuICAgIGNvbHVtbnMoKSB7XG4gICAgICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKHRoaXMuc2NoZW1hLmNvbHVtbnMpXG4gICAgfSxcblxuICAgIHNjb3BlcygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEuc2NvcGVzKVxuICAgIH0sXG5cbiAgICBkZWZhdWx0U2NvcGUoKSB7XG4gICAgICBsZXQgZmlyc3QgPSBudWxsXG4gICAgICBpZiAodGhpcy5zY29wZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBzY29wZSBvZiBPYmplY3QudmFsdWVzKHRoaXMuc2NvcGVzKSkge1xuICAgICAgICAgIGlmIChzY29wZS5kZWZhdWx0U2NvcGUpIHtcbiAgICAgICAgICAgIHJldHVybiBzY29wZVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgICAgICBmaXJzdCA9IHNjb3BlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmlyc3RcbiAgICB9LFxuXG4gICAgZGVmYXVsdE9yZGVyKCkge1xuICAgICAgaWYgKHRoaXMuY29sdW1ucykge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBPYmplY3QudmFsdWVzKHRoaXMuY29sdW1ucykpIHtcbiAgICAgICAgICBjb25zdCB7IGRlZmF1bHRTb3J0IH0gPSBjb2x1bW5cbiAgICAgICAgICBpZiAoZGVmYXVsdFNvcnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IGlzU3RyaW5nKGRlZmF1bHRTb3J0KSA/IGRlZmF1bHRTb3J0IDogJ2FzYydcbiAgICAgICAgICAgIHJldHVybiBgJHtjb2x1bW4ubmFtZX0gJHtkaXJlY3Rpb259YFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgbmVzdGVkTWV0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMubWV0YSxcbiAgICAgICAgc2NoZW1hOiB0aGlzLnNjaGVtYVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb3JtcygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKGdldEZvcm1TY2hlbWFzKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpKVxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBsaW5rZWQgdmlldyBzY2hlbWEgaWYgdGhpcyBzb3VyY2UgZWRpdHMgaXQgaXRzIGl0ZW1zIHRocm91Z2hcbiAgICAvLyBhIGxpbmtlZCB2aWV3LlxuICAgIHZpZXcoKSB7XG4gICAgICByZXR1cm4gZ2V0Vmlld1NjaGVtYSh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KVxuICAgIH0sXG5cbiAgICBsaW5rc1RvVmlldygpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudmlld1xuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXModGhpcy5zY2hlbWEuYnV0dG9ucylcbiAgICB9LFxuXG4gICAgaXNDb21wYWN0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybXMuZXZlcnkoaXNDb21wYWN0KVxuICAgIH0sXG5cbiAgICBpc0lubGluZWQoKSB7XG4gICAgICByZXR1cm4gaXNJbmxpbmVkKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBwYWdpbmF0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3BhZ2luYXRlJywge1xuICAgICAgdHlwZTogTnVtYmVyXG4gICAgfSksXG5cbiAgICByZW5kZXI6IGdldFNjaGVtYUFjY2Vzc29yKCdyZW5kZXInLCB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KSxcblxuICAgIGNyZWF0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NyZWF0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChjcmVhdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0YWJsZSAmJiBoYXNGb3JtU2NoZW1hKHRoaXMuc2NoZW1hKVxuICAgICAgICAgID8gdGhpcy5pc09iamVjdFNvdXJjZVxuICAgICAgICAgICAgPyAhdGhpcy52YWx1ZVxuICAgICAgICAgICAgOiB0cnVlXG4gICAgICAgICAgOiBmYWxzZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZWRpdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdlZGl0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlZGl0YWJsZSkge1xuICAgICAgICByZXR1cm4gZWRpdGFibGUgJiYgIXRoaXMuaXNJbmxpbmVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkZWxldGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWxldGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIGRyYWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RyYWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkcmFnZ2FibGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlICYmIHRoaXMubGlzdERhdGEubGVuZ3RoID4gMSAmJiBkcmFnZ2FibGVcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbGxhcHNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY29sbGFwc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoY29sbGFwc2libGUpIHtcbiAgICAgICAgcmV0dXJuIGNvbGxhcHNpYmxlICYmIHRoaXMuaXNJbmxpbmVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb2xsYXBzZWQ6IGdldFNjaGVtYUFjY2Vzc29yKCdjb2xsYXBzZWQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoY29sbGFwc2VkKSB7XG4gICAgICAgIHJldHVybiBjb2xsYXBzZWQgJiYgdGhpcy5jb2xsYXBzaWJsZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgbWF4RGVwdGg6IGdldFNjaGVtYUFjY2Vzc29yKCdtYXhEZXB0aCcsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDFcbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJHJvdXRlOiB7XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMzM5MyNpc3N1ZWNvbW1lbnQtMTE1ODQ3MDE0OVxuICAgICAgZmx1c2g6ICdwb3N0JyxcbiAgICAgIGhhbmRsZXIodG8sIGZyb20pIHtcbiAgICAgICAgaWYgKHRoaXMucHJvdmlkZXNEYXRhKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZnJvbS5wYXRoID09PSB0by5wYXRoICYmXG4gICAgICAgICAgICBmcm9tLmhhc2ggPT09IHRvLmhhc2hcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIFBhdGhzIGFuZCBoYXNoZXMgcmVtYWluIHRoZSBzYW1lLCBzbyBvbmx5IHF1ZXJpZXMgaGF2ZSBjaGFuZ2VkLlxuICAgICAgICAgICAgLy8gVXBkYXRlIGZpbHRlciBhbmQgcmVsb2FkIGRhdGEgd2l0aG91dCBjbGVhcmluZy5cbiAgICAgICAgICAgIHRoaXMucXVlcnkgPSB0by5xdWVyeVxuICAgICAgICAgICAgdGhpcy5sb2FkRGF0YShmYWxzZSlcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdGhpcy5tZXRhLnJlbG9hZCAmJlxuICAgICAgICAgICAgZnJvbS5wYXRoICE9PSB0by5wYXRoICYmXG4gICAgICAgICAgICBmcm9tLnBhdGguc3RhcnRzV2l0aCh0by5wYXRoKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gUmVsb2FkIHRoZSBzb3VyY2Ugd2hlbiBuYXZpZ2F0aW5nIGJhY2sgdG8gYSBwYXJlbnQtcm91dGUgYWZ0ZXJcbiAgICAgICAgICAgIC8vIGNoYW5naW5nIGRhdGEgaW4gYSBjaGlsZC1yb3V0ZS5cbiAgICAgICAgICAgIHRoaXMubWV0YS5yZWxvYWQgPSBmYWxzZVxuICAgICAgICAgICAgdGhpcy5sb2FkRGF0YShmYWxzZSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgd3JhcHBlZFByaW1pdGl2ZXM6IHtcbiAgICAgIGRlZXA6IHRydWUsXG4gICAgICBoYW5kbGVyKHRvLCBmcm9tKSB7XG4gICAgICAgIGNvbnN0IHsgd3JhcFByaW1pdGl2ZXMgfSA9IHRoaXNcbiAgICAgICAgLy8gU2tpcCB0aGUgaW5pdGlhbCBzZXR0aW5nIG9mIHdyYXBwZWRQcmltaXRpdmVzIGFycmF5XG4gICAgICAgIGlmICh3cmFwUHJpbWl0aXZlcyAmJiBmcm9tICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2hlbmV2ZXIgdGhlIHdyYXBwZWRQcmltaXRpdmVzIGNoYW5nZSwgbWFwIHRoZWlyIHZhbHVlcyBiYWNrIHRvIHRoZVxuICAgICAgICAgIC8vIGFycmF5IG9mIHByaW1pdGl2ZXMsIGluIGEgcHJpbWl0aXZlIHdheSA6KVxuICAgICAgICAgIC8vIEJ1dCBzZXQgYHVud3JhcHBpbmdQcmltaXRpdmVzYCB0byB0cnVlLCBzbyB0aGUgYGxpc3REYXRhYCBjb21wdXRlZFxuICAgICAgICAgIC8vIHByb3BlcnR5IGtub3dzIGFib3V0IGl0LCB3aGljaCBzZXRzIGl0IHRvIGBmYWxzZWAgYWdhaW4uXG4gICAgICAgICAgdGhpcy51bndyYXBwaW5nUHJpbWl0aXZlcy52YWx1ZSA9IHRydWVcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdG8ubWFwKG9iamVjdCA9PiBvYmplY3Rbd3JhcFByaW1pdGl2ZXNdKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gdGhpcy4kcm91dGUucXVlcnlcbiAgICAgIHRoaXMuZW5zdXJlRGF0YSgpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmNsZWFyRGF0YSgpXG4gICAgY2xlYXJEYXRhKCkge1xuICAgICAgdGhpcy50b3RhbCA9IDBcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLnNldERhdGEoKVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgLy8gV2hlbiBuZXcgZGF0YSBpcyBsb2FkZWQsIHdlIGNhbiBzdG9yZSBpdCByaWdodCBiYWNrIGluIHRoZSBkYXRhIG9mIHRoZVxuICAgICAgLy8gdmlldyBvciBmb3JtIHRoYXQgY3JlYXRlZCB0aGlzIGxpc3QgY29tcG9uZW50LlxuICAgICAgLy8gU3VwcG9ydCB0d28gZm9ybWF0cyBmb3IgbGlzdCBkYXRhOlxuICAgICAgLy8gLSBBcnJheTogYFsuLi5dYFxuICAgICAgLy8gLSBPYmplY3Q6IGB7IHJlc3VsdHM6IFsuLi5dLCB0b3RhbCB9YCwgc2VlIGB1bndyYXBMaXN0RGF0YSgpYFxuICAgICAgaWYgKFxuICAgICAgICAhZGF0YSB8fFxuICAgICAgICB0aGlzLmlzTGlzdFNvdXJjZSAmJiBpc0FycmF5KGRhdGEpIHx8XG4gICAgICAgIHRoaXMuaXNPYmplY3RTb3VyY2UgJiYgaXNPYmplY3QoZGF0YSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLnZhbHVlID0gZGF0YVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnVud3JhcExpc3REYXRhKGRhdGEpKSB7XG4gICAgICAgIC8vIFRoZSBmb3JtYXQgZGlkbid0IG1hdGNoLCBzZWUgaWYgd2UgcmVjZWl2ZWQgYSBgeyByZXN1bHRzLCB0b3RhbCB9YFxuICAgICAgICAvLyBvYmplY3QsIGluIHdoaWNoIGNhc2UgYHRoaXMudmFsdWVgIHdhcyBhbHJlYWR5IHNldCBieVxuICAgICAgICAvLyBgdW53cmFwTGlzdERhdGEoKWAgYW5kIHdlJ3JlIGRvbmUgbm93LlxuICAgICAgfSBlbHNlIGlmIChpc09iamVjdChkYXRhKSAmJiB0aGlzLmlzSW5WaWV3KSB7XG4gICAgICAgIC8vIFRoZSBjb250cm9sbGVyIGlzIHNlbmRpbmcgZGF0YSBmb3IgYSBmdWxsIG11bHRpLWNvbXBvbmVudCB2aWV3LFxuICAgICAgICAvLyBpbmNsdWRpbmcgdGhlIG5lc3RlZCBsaXN0IGRhdGEuXG4gICAgICAgIHRoaXMudmlld0NvbXBvbmVudC5zZXREYXRhKGRhdGEpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHVud3JhcExpc3REYXRhKGRhdGEpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pc0xpc3RTb3VyY2UgJiZcbiAgICAgICAgaXNPYmplY3QoZGF0YSkgJiZcbiAgICAgICAgaXNOdW1iZXIoZGF0YS50b3RhbCkgJiZcbiAgICAgICAgaXNBcnJheShkYXRhLnJlc3VsdHMpXG4gICAgICApIHtcbiAgICAgICAgLy8gSWYgQGRpdG9qcy9zZXJ2ZXIgc2VuZHMgZGF0YSBpbiB0aGUgZm9ybSBvZiBgeyByZXN1bHRzLCB0b3RhbCB9YFxuICAgICAgICAvLyByZXBsYWNlIHRoZSB2YWx1ZSB3aXRoIHJlc3VsdCwgYnV0IHJlbWVtYmVyIHRoZSB0b3RhbCBpbiB0aGUgc3RvcmUuXG4gICAgICAgIHRoaXMudG90YWwgPSBkYXRhLnRvdGFsXG4gICAgICAgIHRoaXMudmFsdWUgPSBkYXRhLnJlc3VsdHNcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3JlYXRlSXRlbShzY2hlbWEsIHR5cGUpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmNyZWF0ZURhdGEoc2NoZW1hLCB0eXBlKVxuICAgICAgaWYgKHRoaXMuaXNPYmplY3RTb3VyY2UpIHtcbiAgICAgICAgdGhpcy5vYmplY3REYXRhID0gaXRlbVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5saXN0RGF0YS5wdXNoKGl0ZW0pXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb2xsYXBzaWJsZSkge1xuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB0aGlzLm9wZW5TY2hlbWFDb21wb25lbnQoLTEpKVxuICAgICAgfVxuICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICByZXR1cm4gaXRlbVxuICAgIH0sXG5cbiAgICByZW1vdmVJdGVtKGl0ZW0sIGluZGV4KSB7XG4gICAgICBsZXQgcmVtb3ZlZCA9IGZhbHNlXG4gICAgICBpZiAodGhpcy5pc09iamVjdFNvdXJjZSkge1xuICAgICAgICB0aGlzLm9iamVjdERhdGEgPSBudWxsXG4gICAgICAgIHJlbW92ZWQgPSB0cnVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB7IGxpc3REYXRhIH0gPSB0aGlzXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgbGlzdERhdGEuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICAgIHJlbW92ZWQgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyZW1vdmVkKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlSXRlbVN0b3JlKHRoaXMuc2NoZW1hLCBpdGVtLCBpbmRleClcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpIHtcbiAgICAgIGNvbnN0IGxhYmVsID0gKFxuICAgICAgICBpdGVtICYmXG4gICAgICAgIHRoaXMuZ2V0SXRlbUxhYmVsKHRoaXMuc2NoZW1hLCBpdGVtLCB7XG4gICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgZXh0ZW5kZWQ6IHRydWVcbiAgICAgICAgfSlcbiAgICAgIClcblxuICAgICAgY29uc3Qgbm90aWZ5ID0gKCkgPT5cbiAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgIHR5cGU6IHRoaXMuaXNUcmFuc2llbnQgPyAnaW5mbycgOiAnc3VjY2VzcycsXG4gICAgICAgICAgdGl0bGU6ICdTdWNjZXNzZnVsbHkgUmVtb3ZlZCcsXG4gICAgICAgICAgdGV4dDogW1xuICAgICAgICAgICAgYCR7bGFiZWx9IHdhcyAke3RoaXMudmVyYnMuZGVsZXRlZH0uYCxcbiAgICAgICAgICAgIHRoaXMudHJhbnNpZW50Tm90ZVxuICAgICAgICAgIF1cbiAgICAgICAgfSlcblxuICAgICAgaWYgKFxuICAgICAgICBpdGVtICYmXG4gICAgICAgIHdpbmRvdy5jb25maXJtKFxuICAgICAgICAgIGBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gJHt0aGlzLnZlcmJzLmRlbGV0ZX0gJHtsYWJlbH0/YFxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgaWYgKHRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oaXRlbSwgaW5kZXgpXG4gICAgICAgICAgbm90aWZ5KClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBpdGVtSWQgPSB0aGlzLmdldEl0ZW1JZCh0aGlzLnNjaGVtYSwgaXRlbSwgaW5kZXgpXG4gICAgICAgICAgY29uc3QgbWV0aG9kID0gJ2RlbGV0ZSdcbiAgICAgICAgICBjb25zdCByZXNvdXJjZSA9IGdldE1lbWJlclJlc291cmNlKFxuICAgICAgICAgICAgaXRlbUlkLFxuICAgICAgICAgICAgdGhpcy5nZXRSZXNvdXJjZSh7IG1ldGhvZCB9KVxuICAgICAgICAgIClcbiAgICAgICAgICBpZiAocmVzb3VyY2UpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdCh7IG1ldGhvZCwgcmVzb3VyY2UgfSwgZXJyID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oaXRlbSwgaW5kZXgpXG4gICAgICAgICAgICAgICAgbm90aWZ5KClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLnJlbG9hZERhdGEoKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0U2NoZW1hQ29tcG9uZW50KGluZGV4KSB7XG4gICAgICBjb25zdCB7IHNjaGVtYUNvbXBvbmVudHMgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHsgbGVuZ3RoIH0gPSBzY2hlbWFDb21wb25lbnRzXG4gICAgICByZXR1cm4gc2NoZW1hQ29tcG9uZW50c1soKGluZGV4ICUgbGVuZ3RoKSArIGxlbmd0aCkgJSBsZW5ndGhdXG4gICAgfSxcblxuICAgIG9wZW5TY2hlbWFDb21wb25lbnQoaW5kZXgpIHtcbiAgICAgIGNvbnN0IHNjaGVtYUNvbXBvbmVudCA9IHRoaXMuZ2V0U2NoZW1hQ29tcG9uZW50KGluZGV4KVxuICAgICAgaWYgKHNjaGVtYUNvbXBvbmVudCkge1xuICAgICAgICBzY2hlbWFDb21wb25lbnQub3BlbmVkID0gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBuYXZpZ2F0ZVRvQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKSB7XG4gICAgICBpZiAodGhpcy5jb2xsYXBzaWJsZSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IGRhdGFQYXRoLnN0YXJ0c1dpdGgodGhpcy5kYXRhUGF0aClcbiAgICAgICAgICA/IHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgICAgICA/IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGguc2xpY2UodGhpcy5kYXRhUGF0aC5sZW5ndGggKyAxKSlbMF0gPz8gbnVsbFxuICAgICAgICAgICAgOiAwXG4gICAgICAgICAgOiBudWxsXG4gICAgICAgIGlmIChpbmRleCAhPT0gbnVsbCAmJiBpc051bWJlcigraW5kZXgpKSB7XG4gICAgICAgICAgY29uc3Qgc2NoZW1hQ29tcG9uZW50ID0gdGhpcy5nZXRTY2hlbWFDb21wb25lbnQoK2luZGV4KVxuICAgICAgICAgIGlmIChzY2hlbWFDb21wb25lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgb3BlbmVkIH0gPSBzY2hlbWFDb21wb25lbnRcbiAgICAgICAgICAgIGlmICghb3BlbmVkKSB7XG4gICAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSB0cnVlXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuJG5leHRUaWNrKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBzY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50cy5sZW5ndGggPiAwICYmIChvbkNvbXBsZXRlPy4oY29tcG9uZW50cykgPz8gdHJ1ZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSBvcGVuZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlVG9Sb3V0ZUNvbXBvbmVudChkYXRhUGF0aCwgb25Db21wbGV0ZSlcbiAgICB9LFxuXG4gICAgbmF2aWdhdGVUb1JvdXRlQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBjYWxsT25Db21wbGV0ZSA9ICgpID0+IHtcbiAgICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgbGFzdCByb3V0ZSBjb21wb25lbnQsIHdoaWNoIHdpbGwgYmUgdGhlIGNvbXBvbmVudCB0aGF0XG4gICAgICAgICAgLy8gd2UganVzdCBuYXZpZ2F0ZWQgdG8sIGFuZCBwYXNzIGl0IG9uIHRvIGBvbkNvbXBsZXRlKClgXG4gICAgICAgICAgY29uc3QgeyByb3V0ZUNvbXBvbmVudHMgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICAgICAgICBjb25zdCByb3V0ZUNvbXBvbmVudCA9IHJvdXRlQ29tcG9uZW50c1tyb3V0ZUNvbXBvbmVudHMubGVuZ3RoIC0gMV1cbiAgICAgICAgICByZXNvbHZlKG9uQ29tcGxldGU/Lihbcm91dGVDb21wb25lbnRdKSA/PyB0cnVlKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YVBhdGhQYXJ0cyA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gZmluZCBhIHJvdXRlIHRoYXQgY2FuIHNlcnZlIHBhcnQgb2YgdGhlIGdpdmVuIGRhdGFQYXRoLFxuICAgICAgICAvLyBhbmQgdGFrZSBpdCBmcm9tIHRoZXJlOlxuICAgICAgICB3aGlsZSAoZGF0YVBhdGhQYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMucm91dGVDb21wb25lbnQuZ2V0Q2hpbGRQYXRoKFxuICAgICAgICAgICAgdGhpcy5hcGkubm9ybWFsaXplUGF0aChub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aFBhcnRzKSlcbiAgICAgICAgICApXG4gICAgICAgICAgLy8gU2VlIGlmIHRoZXJlIGFjdHVhbGx5IGlzIGEgcm91dGUgZm9yIHRoaXMgc3ViLWNvbXBvbmVudDpcbiAgICAgICAgICBjb25zdCB7IG1hdGNoZWQgfSA9IHRoaXMuJHJvdXRlci5yZXNvbHZlKHBhdGgpXG4gICAgICAgICAgaWYgKG1hdGNoZWQubGVuZ3RoICYmIG1hdGNoZWRbMF0ubmFtZSAhPT0gJ2NhdGNoLWFsbCcpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiRyb3V0ZS5wYXRoID09PSBwYXRoKSB7XG4gICAgICAgICAgICAgIC8vIFdlJ3JlIGFscmVhZHkgdGhlcmUsIHNvIGp1c3QgY2FsbCBgb25Db21wbGV0ZSgpYDpcbiAgICAgICAgICAgICAgY2FsbE9uQ29tcGxldGUoKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gTmF2aWdhdGUgdG8gdGhlIGNvbXBvbmVudCdzIHBhdGgsIHRoZW4gY2FsbCBgb25Db21wbGV0ZSgpYF86XG4gICAgICAgICAgICAgIHRoaXMuJHJvdXRlclxuICAgICAgICAgICAgICAgIC5wdXNoKHsgcGF0aCB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaChyZWplY3QpXG4gICAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgdGhlIGxhc3Qgcm91dGUgY29tcG9uZW50IHRvIGJlIG1vdW50ZWQgaW4gdGhlIG5leHRcbiAgICAgICAgICAgICAgICAvLyB0aWNrIGJlZm9yZSBjYWxsaW5nIGBvbkNvbXBsZXRlKClgXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy4kbmV4dFRpY2soY2FsbE9uQ29tcGxldGUpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBLZWVwIHJlbW92aW5nIHRoZSBsYXN0IHBhcnQgdW50aWwgd2UgZmluZCBhIG1hdGNoLlxuICAgICAgICAgIGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKGZhbHNlKVxuICAgICAgfSlcbiAgICB9XG4gIH0sIC8vIGVuZCBvZiBgbWV0aG9kc2BcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgIGFwaSxcbiAgICBzY2hlbWEsXG4gICAgbmFtZSxcbiAgICByb3V0ZXMsXG4gICAgbGV2ZWwsXG4gICAgbmVzdGVkID0gZmFsc2UsXG4gICAgZmxhdHRlbiA9IGZhbHNlLFxuICAgIHByb2Nlc3MgPSBudWxsXG4gICkge1xuICAgIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSlcbiAgICBjb25zdCBpbmxpbmVkID0gaXNJbmxpbmVkKHNjaGVtYSlcbiAgICBpZiAoaW5saW5lZCAmJiBzY2hlbWEucmVzb3VyY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE5lc3RlZCAke1xuICAgICAgICAgIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgICAgICA/ICdsaXN0cydcbiAgICAgICAgICAgIDogdGhpcy5pc09iamVjdFNvdXJjZVxuICAgICAgICAgICAgICA/ICdvYmplY3RzJ1xuICAgICAgICAgICAgICA6ICdzY2hlbWEnXG4gICAgICAgIH0gY2Fubm90IGxvYWQgZGF0YSBmcm9tIHRoZWlyIG93biByZXNvdXJjZXNgXG4gICAgICApXG4gICAgfVxuICAgIC8vIFVzZSBkaWZmZXJlbnRseSBuYW1lZCB1cmwgcGFyYW1ldGVycyBvbiBlYWNoIG5lc3RlZCBsZXZlbCBmb3IgaWQgYXNcbiAgICAvLyBvdGhlcndpc2UgdGhleSB3b3VsZCBjbGFzaCBhbmQgb3ZlcnJpZGUgZWFjaCBvdGhlciBpbnNpZGUgJHJvdXRlLnBhcmFtc1xuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzEzNDVcbiAgICBjb25zdCBwYXJhbSA9IGBpZCR7bGV2ZWwgKyAxfWBcbiAgICBjb25zdCBtZXRhID0ge1xuICAgICAgYXBpLFxuICAgICAgc2NoZW1hXG4gICAgfVxuICAgIGNvbnN0IGZvcm1NZXRhID0ge1xuICAgICAgLi4ubWV0YSxcbiAgICAgIC8vIFdoZW4gY2hpbGRyZW4gYXJlIGZsYXR0ZW5lZCAoZS5nLiB0cmVlLWxpc3RzKSwgaW5jbHVkZSB0aGUgYGZsYXR0ZW5gXG4gICAgICAvLyBzZXR0aW5nIGFsc28sIGZvciBmbGF0dGVuaW5nIGJlbG93LlxuICAgICAgZmxhdHRlbixcbiAgICAgIG5lc3RlZCxcbiAgICAgIHBhcmFtXG4gICAgfVxuICAgIGNvbnN0IGNoaWxkUm91dGVzID0gYXdhaXQgcHJvY2Vzc0Zvcm1zKGFwaSwgc2NoZW1hLCBsZXZlbClcbiAgICBpZiAocHJvY2Vzcykge1xuICAgICAgYXdhaXQgcHJvY2VzcyhjaGlsZFJvdXRlcywgbGV2ZWwgKyAxKVxuICAgIH1cbiAgICAvLyBJbmxpbmVkIGZvcm1zIGRvbid0IG5lZWQgdG8gYWN0dWFsbHkgYWRkIHJvdXRlcy5cbiAgICBpZiAoaGFzRm9ybVNjaGVtYShzY2hlbWEpICYmICFpbmxpbmVkKSB7XG4gICAgICAvLyBMaXN0cyBpbiBzaW5nbGUtY29tcG9uZW50LXZpZXdzIChsZXZlbCA9PT0gMCkgdXNlIHRoZWlyIHZpZXcncyBwYXRoLFxuICAgICAgLy8gd2hpbGUgYWxsIG90aGVycyBuZWVkIHRoZWlyIHBhdGggcHJlZml4ZWQgd2l0aCB0aGUgcGFyZW50J3MgcGF0aDpcbiAgICAgIGNvbnN0IHNvdXJjZVBhdGggPSBsZXZlbCA9PT0gMCA/ICcnIDogc2NoZW1hLnBhdGhcbiAgICAgIGNvbnN0IGZvcm1Sb3V0ZSA9IHtcbiAgICAgICAgcGF0aDogZ2V0UGF0aFdpdGhQYXJhbShcbiAgICAgICAgICBzb3VyY2VQYXRoLFxuICAgICAgICAgIC8vIE9iamVjdCBzb3VyY2VzIGRvbid0IG5lZWQgaWQgcGFyYW1zIGluIHRoZWlyIGZvcm0gcGF0aHMsIGFzIHRoZXlcbiAgICAgICAgICAvLyBkaXJlY3RseSBlZGl0IG9uZSBvYmplY3QuXG4gICAgICAgICAgaXNMaXN0U291cmNlKHNjaGVtYSkgPyBwYXJhbSA6IG51bGxcbiAgICAgICAgKSxcbiAgICAgICAgY29tcG9uZW50OiBEaXRvQ29tcG9uZW50LmNvbXBvbmVudChcbiAgICAgICAgICBuZXN0ZWQgPyAnRGl0b0Zvcm1OZXN0ZWQnIDogJ0RpdG9Gb3JtJ1xuICAgICAgICApLFxuICAgICAgICBtZXRhOiBmb3JtTWV0YVxuICAgICAgfVxuICAgICAgaWYgKGlzT2JqZWN0U291cmNlKHNjaGVtYSkpIHtcbiAgICAgICAgLy8gQWxzbyBhZGQgYSBwYXJhbSByb3V0ZSwgc2ltcGx5IHRvIGhhbmRsZSAnL2NyZWF0ZScgbGlua3MgdGhlIHNhbWVcbiAgICAgICAgLy8gd2F5IHRoYXQgbGlzdHMgZG8sIHdoZXJlIGl0IG92ZXJsYXBzIHdpdGggOmlkIGZvciBpdGVtIGlkcy5cbiAgICAgICAgcm91dGVzLnB1c2goe1xuICAgICAgICAgIC4uLmZvcm1Sb3V0ZSxcbiAgICAgICAgICBwYXRoOiBnZXRQYXRoV2l0aFBhcmFtKHNvdXJjZVBhdGgsIHBhcmFtKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKHNvdXJjZVBhdGgpIHtcbiAgICAgICAgLy8gSnVzdCByZWRpcmVjdCBiYWNrIHRvIHRoZSBwYXJlbnQgd2hlbiBhIG5lc3RlZCBzb3VyY2Ugcm91dGUgaXMgaGl0LlxuICAgICAgICByb3V0ZXMucHVzaCh7XG4gICAgICAgICAgcGF0aDogc291cmNlUGF0aCxcbiAgICAgICAgICByZWRpcmVjdDogJy4nLFxuICAgICAgICAgIG1ldGFcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIC8vIFBhcnRpdGlvbiBjaGlsZFJvdXRlcyBpbnRvIHRob3NlIHRoYXQgbmVlZCBmbGF0dGVuaW5nIChlLmcuIHRyZWUtbGlzdHMpXG4gICAgICAvLyBhbmQgdGhvc2UgdGhhdCBkb24ndCwgYW5kIHByb2Nlc3MgZWFjaCBncm91cCBzZXBhcmF0ZWx5IGFmdGVyLlxuICAgICAgY29uc3QgW2ZsYXRSb3V0ZXMsIHN1YlJvdXRlc10gPSBjaGlsZFJvdXRlcy5yZWR1Y2UoXG4gICAgICAgIChyZXMsIHJvdXRlKSA9PiB7XG4gICAgICAgICAgcmVzW3JvdXRlLm1ldGEuZmxhdHRlbiA/IDAgOiAxXS5wdXNoKHJvdXRlKVxuICAgICAgICAgIHJldHVybiByZXNcbiAgICAgICAgfSxcbiAgICAgICAgW1tdLCBbXV1cbiAgICAgIClcbiAgICAgIGlmIChzdWJSb3V0ZXMubGVuZ3RoKSB7XG4gICAgICAgIGZvcm1Sb3V0ZS5jaGlsZHJlbiA9IHN1YlJvdXRlc1xuICAgICAgfVxuICAgICAgcm91dGVzLnB1c2goZm9ybVJvdXRlKVxuICAgICAgLy8gQWRkIHRoZSBwcmVmaXhlZCBmb3JtUm91dGVzIHdpdGggdGhlaXIgY2hpbGRyZW4gZm9yIG5lc3RlZCBsaXN0cy5cbiAgICAgIGlmIChmbGF0Um91dGVzLmxlbmd0aCkge1xuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkUm91dGUgb2YgZmxhdFJvdXRlcykge1xuICAgICAgICAgIHJvdXRlcy5wdXNoKHtcbiAgICAgICAgICAgIC4uLihjaGlsZFJvdXRlLnJlZGlyZWN0ID8gY2hpbGRSb3V0ZSA6IGZvcm1Sb3V0ZSksXG4gICAgICAgICAgICBwYXRoOiBgJHtmb3JtUm91dGUucGF0aH0vJHtjaGlsZFJvdXRlLnBhdGh9YCxcbiAgICAgICAgICAgIG1ldGE6IHtcbiAgICAgICAgICAgICAgLi4uY2hpbGRSb3V0ZS5tZXRhLFxuICAgICAgICAgICAgICBmbGF0dGVuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoeyBzY2hlbWEsIHZhbHVlLCBkYXRhUGF0aCB9LCBncmFwaCkge1xuICAgIGdyYXBoLmFkZFNvdXJjZShkYXRhUGF0aCwgc2NoZW1hKVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldFBhdGhXaXRoUGFyYW0ocGF0aCwgcGFyYW0pIHtcbiAgcmV0dXJuIHBhcmFtXG4gICAgPyBwYXRoXG4gICAgICA/IGAke3BhdGh9Lzoke3BhcmFtfWBcbiAgICAgIDogYDoke3BhcmFtfWBcbiAgICA6IHBhdGhcbn1cbiIsImltcG9ydCB7IGlzQXJyYXksIGFzQXJyYXksIGxhYmVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGdldE5hbWVkU2NoZW1hcywgcHJvY2Vzc05lc3RlZFNjaGVtYURlZmF1bHRzIH0gZnJvbSAnLi9zY2hlbWEnXG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJDb21wb25lbnRzID0ge1xuICAndGV4dCcoZmlsdGVyKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IFtcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdjb250YWlucycsXG4gICAgICAgIHZhbHVlOiAnY29udGFpbnMnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogJ2VxdWFscycsXG4gICAgICAgIHZhbHVlOiAnZXF1YWxzJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdzdGFydHMgd2l0aCcsXG4gICAgICAgIHZhbHVlOiAnc3RhcnRzLXdpdGgnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogJ2VuZHMgd2l0aCcsXG4gICAgICAgIHZhbHVlOiAnZW5kcy13aXRoJ1xuICAgICAgfVxuICAgIF1cbiAgICByZXR1cm4ge1xuICAgICAgb3BlcmF0b3I6IGZpbHRlci5vcGVyYXRvcnNcbiAgICAgICAgPyB7XG4gICAgICAgICAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICAgICAgICAgIHdpZHRoOiAnMi81JyxcbiAgICAgICAgICAgIG9wdGlvbnM6IGlzQXJyYXkoZmlsdGVyLm9wZXJhdG9ycylcbiAgICAgICAgICAgICAgPyBvcHRpb25zLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIG9wdGlvbiA9PiBmaWx0ZXIub3BlcmF0b3JzLmluY2x1ZGVzKG9wdGlvbi52YWx1ZSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogb3B0aW9ucyxcbiAgICAgICAgICAgIGNsZWFyYWJsZTogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgOiBudWxsLFxuICAgICAgdGV4dDoge1xuICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgIHdpZHRoOiBmaWx0ZXIub3BlcmF0b3JzID8gJzMvNScgOiAnZmlsbCcsXG4gICAgICAgIGNsZWFyYWJsZTogdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICAnZGF0ZS1yYW5nZScoKSB7XG4gICAgY29uc3QgZGF0ZXRpbWUgPSB7XG4gICAgICB0eXBlOiAnZGF0ZXRpbWUnLFxuICAgICAgd2lkdGg6ICcxLzInLFxuICAgICAgZm9ybWF0czoge1xuICAgICAgICAvLyBVc2Ugc2hvcnRlciBkYXRlIGZvcm1hdCBpbiBkYXRlLXJhbmdlIGZpbHRlcnM6XG4gICAgICAgIGRhdGU6IHtcbiAgICAgICAgICBkYXk6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBtb250aDogJzItZGlnaXQnLFxuICAgICAgICAgIHllYXI6ICdudW1lcmljJ1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2xlYXJhYmxlOiB0cnVlXG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBmcm9tOiBkYXRldGltZSxcbiAgICAgIHRvOiBkYXRldGltZVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRmlsdGVyc1BhbmVsKGFwaSwgZmlsdGVycywgZGF0YVBhdGgsIHF1ZXJ5KSB7XG4gIGNvbnN0IHsgc3RpY2t5LCAuLi5maWx0ZXJTY2hlbWFzIH0gPSBmaWx0ZXJzXG4gIGNvbnN0IHBhbmVsID0ge1xuICAgIHR5cGU6ICdwYW5lbCcsXG4gICAgbGFiZWw6ICdGaWx0ZXJzJyxcbiAgICBuYW1lOiAnJGZpbHRlcnMnLFxuICAgIC8vIE92ZXJyaWRlIHRoZSBkZWZhdWx0IHZhbHVlXG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIHN0aWNreSxcblxuICAgIC8vIE5PVEU6IE9uIHBhbmVscywgdGhlIGRhdGEoKSBjYWxsYmFjayBkb2VzIHNvbWV0aGluZyBlbHNlIHRoYW4gb24gbm9ybWFsXG4gICAgLy8gc2NoZW1hOiBJdCBwcm9kdWNlcyB0aGUgYGRhdGFgIHByb3BlcnR5IHRvIGJlIHBhc3NlZCB0byB0aGUgcGFuZWwnc1xuICAgIC8vIHNjaGVtYSwgbm90IHRoZSBkYXRhIHRvIGJlIHVzZWQgZm9yIHRoZSBwYW5lbCBjb21wb25lbnQgZGlyZWN0bHkuXG4gICAgZGF0YSgpIHtcbiAgICAgIHJldHVybiBwYXJzZUZpbHRlcnNEYXRhKFxuICAgICAgICBwYW5lbCxcbiAgICAgICAgcXVlcnkudmFsdWVcbiAgICAgIClcbiAgICB9LFxuXG4gICAgY29tcG9uZW50czogY3JlYXRlRmlsdGVyc0NvbXBvbmVudHMoZmlsdGVyU2NoZW1hcyksXG4gICAgYnV0dG9uczogY3JlYXRlRmlsdGVyc0J1dHRvbnMoZmFsc2UpLFxuICAgIHBhbmVsQnV0dG9uczogY3JlYXRlRmlsdGVyc0J1dHRvbnModHJ1ZSksXG5cbiAgICBldmVudHM6IHtcbiAgICAgIGNoYW5nZSgpIHtcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgZmlsdGVycygpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdEZpbHRlcnNEYXRhKHRoaXMuc2NoZW1hLCB0aGlzLmRhdGEpXG4gICAgICB9LFxuXG4gICAgICBoYXNGaWx0ZXJzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJzLmxlbmd0aCA+IDBcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbWV0aG9kczoge1xuICAgICAgYXBwbHlGaWx0ZXJzKCkge1xuICAgICAgICBxdWVyeS52YWx1ZSA9IHtcbiAgICAgICAgICAuLi5xdWVyeS52YWx1ZSxcbiAgICAgICAgICBmaWx0ZXI6IHRoaXMuZmlsdGVycyxcbiAgICAgICAgICAvLyBDbGVhciBwYWdpbmF0aW9uIHdoZW4gYXBwbHlpbmcgb3IgY2xlYXJpbmcgZmlsdGVyczpcbiAgICAgICAgICBwYWdlOiB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgY2xlYXJGaWx0ZXJzKCkge1xuICAgICAgICB0aGlzLnJlc2V0RGF0YSgpXG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKClcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJvY2Vzc05lc3RlZFNjaGVtYURlZmF1bHRzKGFwaSwgcGFuZWwpXG4gIHJldHVybiBwYW5lbFxufVxuXG5mdW5jdGlvbiBjcmVhdGVGaWx0ZXJzQnV0dG9ucyhzbWFsbCkge1xuICByZXR1cm4ge1xuICAgIGNsZWFyOiB7XG4gICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgIHRleHQ6IHNtYWxsID8gbnVsbCA6ICdDbGVhcicsXG4gICAgICBkaXNhYmxlZDogKHsgc2NoZW1hQ29tcG9uZW50IH0pID0+ICFzY2hlbWFDb21wb25lbnQuaGFzRmlsdGVycyxcbiAgICAgIGV2ZW50czoge1xuICAgICAgICBjbGljayh7IHNjaGVtYUNvbXBvbmVudCB9KSB7XG4gICAgICAgICAgLy8gU2luY2UgcGFuZWwgYnV0dG9ucyBhcmUgb3V0c2lkZSBvZiB0aGUgc2NoZW1hLCB3ZSBuZWVkIHRvIHVzZSB0aGVcbiAgICAgICAgICAvLyBzY2hlbWEgY29tcG9uZW50IHJlY2VpdmVkIGZyb20gdGhlIGluaXRpYWxpemUgZXZlbnQgYmVsb3c6XG4gICAgICAgICAgc2NoZW1hQ29tcG9uZW50LmNsZWFyRmlsdGVycygpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3VibWl0OiB7XG4gICAgICB0eXBlOiAnc3VibWl0JyxcbiAgICAgIHRleHQ6IHNtYWxsID8gbnVsbCA6ICdGaWx0ZXInLFxuICAgICAgdmlzaWJsZTogIXNtYWxsLFxuICAgICAgZXZlbnRzOiB7XG4gICAgICAgIGNsaWNrKHsgc2NoZW1hQ29tcG9uZW50IH0pIHtcbiAgICAgICAgICBzY2hlbWFDb21wb25lbnQuYXBwbHlGaWx0ZXJzKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXREYXRhTmFtZShmaWx0ZXJOYW1lKSB7XG4gIC8vIFByZWZpeCBmaWx0ZXIgZGF0YSBrZXlzIHdpdGggJyQnIHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIG90aGVyIGRhdGEga2V5czpcbiAgcmV0dXJuIGAkJHtmaWx0ZXJOYW1lfWBcbn1cblxuZnVuY3Rpb24gZ2V0RmlsdGVyTmFtZShkYXRhTmFtZSkge1xuICByZXR1cm4gZGF0YU5hbWUuc3RhcnRzV2l0aCgnJCcpID8gZGF0YU5hbWUuc2xpY2UoMSkgOiBudWxsXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpbHRlcnNDb21wb25lbnRzKGZpbHRlcnMpIHtcbiAgY29uc3QgY29tcHMgPSB7fVxuICBmb3IgKGNvbnN0IGZpbHRlciBvZiBPYmplY3QudmFsdWVzKGdldE5hbWVkU2NoZW1hcyhmaWx0ZXJzKSB8fCB7fSkpIHtcbiAgICAvLyBTdXBwb3J0IGJvdGggY3VzdG9tIGZvcm1zIGFuZCBkZWZhdWx0IGZpbHRlciBjb21wb25lbnRzLCB0aHJvdWdoIHRoZVxuICAgIC8vIGBmaWx0ZXJDb21wb25lbnRzYCByZWdpc3RyeS4gRXZlbiBmb3IgZGVmYXVsdCBmaWx0ZXJzLCBzdGlsbCB1c2UgdGhlXG4gICAgLy8gcHJvcGVydGllcyBpbiBgZmlsdGVyYCBhcyB0aGUgYmFzZSBmb3IgYGZvcm1gLCBzbyB0aGluZ3MgbGlrZSBgbGFiZWxgXG4gICAgLy8gY2FuIGJlIGNoYW5nZWQgb24gdGhlIHJlc3VsdGluZyBmb3JtLlxuICAgIGNvbnN0IHsgZmlsdGVyOiB0eXBlLCB3aWR0aCwgLi4uZm9ybSB9ID0gZmlsdGVyXG4gICAgY29uc3QgY29tcG9uZW50cyA9IHR5cGVcbiAgICAgID8gZmlsdGVyQ29tcG9uZW50c1t0eXBlXT8uKGZpbHRlcilcbiAgICAgIDogZmlsdGVyLmNvbXBvbmVudHNcbiAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgZm9ybS50eXBlID0gJ2Zvcm0nXG4gICAgICBmb3JtLmNvbXBvbmVudHMgPSB7fVxuICAgICAgLy8gQ29udmVydCBsYWJlbHMgdG8gcGxhY2Vob2xkZXJzOlxuICAgICAgZm9yIChjb25zdCBba2V5LCBjb21wb25lbnRdIG9mIE9iamVjdC5lbnRyaWVzKGNvbXBvbmVudHMpKSB7XG4gICAgICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgICAgICBjb25zdCBsYWJlbCA9IGNvbXBvbmVudC5sYWJlbCB8fCBsYWJlbGl6ZShjb21wb25lbnQubmFtZSB8fCBrZXkpXG4gICAgICAgICAgZm9ybS5jb21wb25lbnRzW2tleV0gPSB7XG4gICAgICAgICAgICAuLi5jb21wb25lbnQsXG4gICAgICAgICAgICBsYWJlbDogZmFsc2UsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogbGFiZWxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbXBzW2dldERhdGFOYW1lKGZpbHRlci5uYW1lKV0gPSB7XG4gICAgICAgIGxhYmVsOiBmb3JtLmxhYmVsID8/IGxhYmVsaXplKGZpbHRlci5uYW1lKSxcbiAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBkZWZhdWx0OiAoKSA9PiAoe30pLFxuICAgICAgICBmb3JtLFxuICAgICAgICBpbmxpbmVkOiB0cnVlXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgZmlsdGVyICcke2ZpbHRlci5uYW1lfSc6IFVua25vd24gZmlsdGVyIHR5cGUgJyR7dHlwZX0nLmBcbiAgICAgIClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvbXBzXG59XG5cbmZ1bmN0aW9uIGdldENvbXBvbmVudHNGb3JGaWx0ZXIoc2NoZW1hLCBkYXRhTmFtZSkge1xuICBjb25zdCBjb21wb25lbnQgPSBzY2hlbWEuY29tcG9uZW50c1tkYXRhTmFtZV1cbiAgcmV0dXJuIGNvbXBvbmVudD8uZm9ybT8uY29tcG9uZW50c1xufVxuXG5mdW5jdGlvbiBmb3JtYXRGaWx0ZXJzRGF0YShzY2hlbWEsIGRhdGEpIHtcbiAgY29uc3QgZmlsdGVycyA9IFtdXG4gIGZvciAoY29uc3QgZGF0YU5hbWUgaW4gZGF0YSkge1xuICAgIGNvbnN0IGVudHJ5ID0gZGF0YVtkYXRhTmFtZV1cbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIC8vIE1hcCBjb21wb25lbnRzIHNlcXVlbmNlIHRvIGFyZ3VtZW50czpcbiAgICAgIGNvbnN0IGFyZ3MgPSBPYmplY3Qua2V5cyhcbiAgICAgICAgZ2V0Q29tcG9uZW50c0ZvckZpbHRlcihzY2hlbWEsIGRhdGFOYW1lKVxuICAgICAgKS5tYXAoXG4gICAgICAgIGtleSA9PiBlbnRyeVtrZXldID8/IG51bGxcbiAgICAgIClcbiAgICAgIC8vIE9ubHkgYXBwbHkgZmlsdGVyIGlmIHRoZXJlIGFyZSBzb21lIGFyZ3VtZW50cyB0aGF0IGFyZW4ndCBudWxsOlxuICAgICAgaWYgKGFyZ3Muc29tZSh2YWx1ZSA9PiB2YWx1ZSAhPT0gbnVsbCkpIHtcbiAgICAgICAgZmlsdGVycy5wdXNoKFxuICAgICAgICAgIGAke1xuICAgICAgICAgICAgZ2V0RmlsdGVyTmFtZShkYXRhTmFtZSlcbiAgICAgICAgICB9OiR7XG4gICAgICAgICAgICBhcmdzLm1hcChKU09OLnN0cmluZ2lmeSkuam9pbignLCcpXG4gICAgICAgICAgfWBcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmlsdGVyc1xufVxuXG5mdW5jdGlvbiBwYXJzZUZpbHRlcnNEYXRhKHNjaGVtYSwgcXVlcnkpIHtcbiAgY29uc3QgZmlsdGVycyA9IHt9XG4gIC8vIFNhbWUgYXMgQGRpdG9qcy9zZXJ2ZXIncyBRdWVyeVBhcmFtZXRlcnMuZmlsdGVyOiBUcmFuc2xhdGUgdGhlIHN0cmluZyBkYXRhXG4gIC8vIGZyb20gJHJvdXRlLnF1ZXJ5IGJhY2sgdG8gcGFyYW0gbGlzdHMgcGVyIGZpbHRlcjpcbiAgaWYgKHF1ZXJ5KSB7XG4gICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgYXNBcnJheShxdWVyeS5maWx0ZXIpKSB7XG4gICAgICBjb25zdCBbLCBmaWx0ZXJOYW1lLCBqc29uXSA9IGZpbHRlci5tYXRjaCgvXihcXHcrKTooLiopJC8pXG4gICAgICB0cnkge1xuICAgICAgICBmaWx0ZXJzW2ZpbHRlck5hbWVdID0gYXNBcnJheShKU09OLnBhcnNlKGBbJHtqc29ufV1gKSlcbiAgICAgIH0gY2F0Y2gge31cbiAgICB9XG4gIH1cbiAgY29uc3QgZmlsdGVyc0RhdGEgPSB7fVxuICBmb3IgKGNvbnN0IGRhdGFOYW1lIGluIHNjaGVtYS5jb21wb25lbnRzKSB7XG4gICAgY29uc3QgZGF0YSA9IHt9XG4gICAgLy8gSWYgd2UgaGF2ZSByZXRyaWV2ZWQgcGFyYW1zIGZyb20gdGhlIHF1ZXJ5LCBmZXRjaCB0aGUgYXNzb2NpYXRlZFxuICAgIC8vIGZvcm0gY29tcG9uZW50cyBzbyB3ZSBjYW4gbWFwIHRoZSB2YWx1ZXMgYmFjayB0byBvYmplY3Qga2V5czpcbiAgICBjb25zdCBhcmdzID0gZmlsdGVyc1tnZXRGaWx0ZXJOYW1lKGRhdGFOYW1lKV1cbiAgICBpZiAoYXJncykge1xuICAgICAgY29uc3QgY29tcG9uZW50cyA9IGdldENvbXBvbmVudHNGb3JGaWx0ZXIoc2NoZW1hLCBkYXRhTmFtZSlcbiAgICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICAgIGxldCBpbmRleCA9IDBcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gY29tcG9uZW50cykge1xuICAgICAgICAgIGRhdGFba2V5XSA9IGFyZ3NbaW5kZXgrK11cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmaWx0ZXJzRGF0YVtkYXRhTmFtZV0gPSBkYXRhXG4gIH1cbiAgcmV0dXJuIGZpbHRlcnNEYXRhXG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tbGlzdChcbiAgdi1pZj1cImlzUmVhZHlcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4pXG4gIC5kaXRvLWxpc3RfX2hlYWRlcihcbiAgICB2LWlmPVwic2NvcGVzIHx8IGhhc1BhZ2luYXRpb25cIlxuICApXG4gICAgRGl0b1Njb3BlcyhcbiAgICAgIHYtaWY9XCJzY29wZXNcIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gICAgKVxuICAgIC8vLSBXaGVuIHRoZXJlJ3Mgb25seSBwYWdpbmF0aW9uIHdpdGhvdXQgc2NvcGVzLCB3ZSBuZWVkIGEgZ29vZCBvbCcgc3BhY2VyXG4gICAgLy8tIGRpdiwgZm9yIHRoZSBsYXlvdXQgbm90IHRvIGJyZWFrLi4uXG4gICAgLmRpdG8tc3BhY2VyKFxuICAgICAgdi1lbHNlLWlmPVwiaGFzUGFnaW5hdGlvblwiXG4gICAgKVxuICAgIERpdG9QYWdpbmF0aW9uKFxuICAgICAgdi1pZj1cImhhc1BhZ2luYXRpb25cIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOmxpbWl0PVwicGFnaW5hdGVcIlxuICAgICAgOnRvdGFsPVwidG90YWwgfHwgMFwiXG4gICAgKVxuICB0YWJsZS5kaXRvLXRhYmxlKFxuICAgIDpjbGFzcz1ge1xuICAgICAgJ2RpdG8tdGFibGUtc2VwYXJhdG9ycyc6IGlzSW5saW5lZCxcbiAgICAgICdkaXRvLXRhYmxlLWxhcmdlci1wYWRkaW5nJzogaGFzRWRpdEJ1dHRvbnMgJiYgIWlzSW5saW5lZCxcbiAgICAgICdkaXRvLXRhYmxlLWFsdGVybmF0ZS1jb2xvcnMnOiAhaXNJbmxpbmVkLFxuICAgICAgJ2RpdG8tdGFibGUtZXZlbi1jb3VudCc6IGhhc0V2ZW5Db3VudFxuICAgIH1gXG4gIClcbiAgICBEaXRvVGFibGVIZWFkKFxuICAgICAgdi1pZj1cImNvbHVtbnNcIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOmNvbHVtbnM9XCJjb2x1bW5zXCJcbiAgICAgIDpoYXNFZGl0QnV0dG9ucz1cImhhc0VkaXRCdXR0b25zXCJcbiAgICApXG4gICAgRGl0b0RyYWdnYWJsZShcbiAgICAgIHRhZz1cInRib2R5XCJcbiAgICAgIDpvcHRpb25zPVwiZ2V0RHJhZ2dhYmxlT3B0aW9ucygpXCJcbiAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgOm1vZGVsVmFsdWU9XCJ1cGRhdGVPcmRlcihzb3VyY2VTY2hlbWEsIGxpc3REYXRhLCBwYWdpbmF0aW9uUmFuZ2UpXCJcbiAgICAgIEB1cGRhdGU6bW9kZWxWYWx1ZT1cInZhbHVlID0+IChsaXN0RGF0YSA9IHZhbHVlKVwiXG4gICAgKVxuICAgICAgdHIoXG4gICAgICAgIHYtZm9yPVwiKGl0ZW0sIGluZGV4KSBpbiBsaXN0RGF0YVwiXG4gICAgICAgIDppZD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgIDprZXk9XCJnZXRJdGVtVWlkKHNjaGVtYSwgaXRlbSlcIlxuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWlmPVwiY29sdW1uc1wiXG4gICAgICAgIClcbiAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgIHYtZm9yPVwiY29sdW1uIGluIGNvbHVtbnNcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIERpdG9UYWJsZUNlbGwoXG4gICAgICAgICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEoY29sdW1uKVwiXG4gICAgICAgICAgICAgIDprZXk9XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImdldENlbGxDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICAgICAgOmNlbGw9XCJjb2x1bW5cIlxuICAgICAgICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWVsc2VcbiAgICAgICAgKVxuICAgICAgICAgIHRkXG4gICAgICAgICAgICBEaXRvU2NoZW1hSW5saW5lZChcbiAgICAgICAgICAgICAgdi1pZj1cImlzSW5saW5lZFwiXG4gICAgICAgICAgICAgIDpsYWJlbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIGl0ZW0sIHsgaW5kZXgsIGFzT2JqZWN0OiB0cnVlIH0pXCJcbiAgICAgICAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgICA6c3RvcmU9XCJnZXRJdGVtU3RvcmUoc2NoZW1hLCBpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICAgICAgICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgICAgICAgICAgOmVkaXRQYXRoPVwiZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbXBvbmVudChcbiAgICAgICAgICAgICAgdi1lbHNlLWlmPVwic2NoZW1hLmNvbXBvbmVudFwiXG4gICAgICAgICAgICAgIDppcz1cInNjaGVtYS5jb21wb25lbnRcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgICAgICAgICAgdi1odG1sPVwicmVuZGVyKGdldENvbnRleHQoaXRlbSwgaW5kZXgpKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICAgICAgdi1odG1sPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgaXRlbSwgeyBpbmRleCB9KVwiXG4gICAgICAgICAgICApXG4gICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgdi1pZj1cImhhc0NlbGxFZGl0QnV0dG9uc1wiXG4gICAgICAgIClcbiAgICAgICAgICBEaXRvRWRpdEJ1dHRvbnMoXG4gICAgICAgICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICA6c3RvcmU9XCJnZXRJdGVtU3RvcmUoc2NoZW1hLCBpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgICA6ZWRpdFBhdGg9XCJnZXRFZGl0UGF0aChpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICApXG4gICAgLy8tIFJlbmRlciBjcmVhdGUgYnV0dG9ucyBpbnNpZGUgdGFibGUgd2hlbiBub3QgaW4gYSBzaW5nbGUgY29tcG9uZW50IHZpZXc6XG4gICAgdGZvb3QoXG4gICAgICB2LWlmPVwiaGFzTGlzdEJ1dHRvbnMgJiYgIXNpbmdsZVwiXG4gICAgKVxuICAgICAgdHJcbiAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9ucyg6Y29sc3Bhbj1cIm51bUNvbHVtbnNcIilcbiAgICAgICAgICBEaXRvRWRpdEJ1dHRvbnMoXG4gICAgICAgICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICA6ZGF0YT1cImxpc3REYXRhXCJcbiAgICAgICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICAgICAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICAgICAgICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgICAgICAgKVxuICAvLy0gUmVuZGVyIGNyZWF0ZSBidXR0b25zIG91dHNpZGUgdGFibGUgd2hlbiBpbiBhIHNpbmdsZSBjb21wb25lbnQgdmlldzpcbiAgRGl0b0VkaXRCdXR0b25zLmRpdG8tYnV0dG9ucy1sYXJnZS5kaXRvLWJ1dHRvbnMtbWFpbi5kaXRvLWJ1dHRvbnMtc3RpY2t5KFxuICAgIHYtaWY9XCJoYXNMaXN0QnV0dG9ucyAmJiBzaW5nbGVcIlxuICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwibGlzdERhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBTb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvU291cmNlTWl4aW4uanMnXG5pbXBvcnQgU29ydGFibGVNaXhpbiBmcm9tICcuLi9taXhpbnMvU29ydGFibGVNaXhpbi5qcydcbmltcG9ydCB7XG4gIGdldFZpZXdFZGl0UGF0aCxcbiAgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudCxcbiAgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudHNcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgY3JlYXRlRmlsdGVyc1BhbmVsIH0gZnJvbSAnLi4vdXRpbHMvZmlsdGVyLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgcGlja0J5LCBlcXVhbHMsIGh5cGhlbmF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBjb21wdXRlZCB9IGZyb20gJ3Z1ZSdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdsaXN0Jywge1xuICBtaXhpbnM6IFtTb3VyY2VNaXhpbiwgU29ydGFibGVNaXhpbl0sXG5cbiAgZ2V0U291cmNlVHlwZSh0eXBlKSB7XG4gICAgLy8gTm8gbmVlZCBmb3IgdHJhbnNmb3JtYXRpb24gaGVyZS4gU2VlIFR5cGVUcmVlTGlzdCBmb3IgZGV0YWlscy5cbiAgICByZXR1cm4gdHlwZVxuICB9LFxuXG4gIGdldFBhbmVsU2NoZW1hKGFwaSwgc2NoZW1hLCBkYXRhUGF0aCwgY29tcG9uZW50KSB7XG4gICAgY29uc3QgeyBmaWx0ZXJzIH0gPSBzY2hlbWFcbiAgICAvLyBTZWUgaWYgdGhpcyBsaXN0IGNvbXBvbmVudCB3YW50cyB0byBkaXNwbGF5IGEgZmlsdGVyIHBhbmVsLCBhbmQgaWYgc28sXG4gICAgLy8gY3JlYXRlIHRoZSBwYW5lbCBzY2hlbWEgZm9yIGl0IHRocm91Z2ggYGdldEZpbHRlcnNQYW5lbCgpYC5cbiAgICBpZiAoZmlsdGVycykge1xuICAgICAgcmV0dXJuIGNyZWF0ZUZpbHRlcnNQYW5lbChcbiAgICAgICAgYXBpLFxuICAgICAgICBmaWx0ZXJzLFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgLy8gUGFzcyBhIGNvbXB1dGVkIHZhbHVlIHRvIGdldCAvIHNldCB0aGUgcXVlcnksIHNlZSBnZXRGaWx0ZXJzUGFuZWwoKVxuICAgICAgICBjb21wdXRlZCh7XG4gICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudC5xdWVyeVxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBzZXQocXVlcnkpIHtcbiAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgdW5kZWZpbmVkIHZhbHVlcyBmb3IgY29tcGFyaW5nIHdpdGggZXF1YWxzKClcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlciA9IG9iaiA9PiBwaWNrQnkob2JqLCB2YWx1ZSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgaWYgKCFlcXVhbHMoZmlsdGVyKHF1ZXJ5KSwgZmlsdGVyKGNvbXBvbmVudC5xdWVyeSkpKSB7XG4gICAgICAgICAgICAgIGNvbXBvbmVudC5xdWVyeSA9IHF1ZXJ5XG4gICAgICAgICAgICAgIGNvbXBvbmVudC5sb2FkRGF0YShmYWxzZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaGFzUGFnaW5hdGlvbigpIHtcbiAgICAgIHJldHVybiAhIXRoaXMucGFnaW5hdGVcbiAgICB9LFxuXG4gICAgaGFzTGlzdEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gISEodGhpcy5idXR0b25TY2hlbWFzIHx8IHRoaXMuY3JlYXRhYmxlKVxuICAgIH0sXG5cbiAgICBoYXNFZGl0QnV0dG9ucygpIHtcbiAgICAgIGNvbnN0IHsgbGlzdERhdGEgfSA9IHRoaXNcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGxpc3REYXRhLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgIHRoaXMuZWRpdGFibGUgfHxcbiAgICAgICAgICB0aGlzLmRlbGV0YWJsZSB8fFxuICAgICAgICAgIHRoaXMuZHJhZ2dhYmxlXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaGFzQ2VsbEVkaXRCdXR0b25zKCkge1xuICAgICAgcmV0dXJuICF0aGlzLmlzSW5saW5lZCAmJiB0aGlzLmhhc0VkaXRCdXR0b25zXG4gICAgfSxcblxuICAgIGhhc0V2ZW5Db3VudCgpIHtcbiAgICAgIHJldHVybiAhKHRoaXMubGlzdERhdGEubGVuZ3RoICUgMilcbiAgICB9LFxuXG4gICAgbnVtQ29sdW1ucygpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICh0aGlzLmNvbHVtbnMgPyBPYmplY3Qua2V5cyh0aGlzLmNvbHVtbnMpLmxlbmd0aCA6IDEpICtcbiAgICAgICAgKHRoaXMuaGFzQ2VsbEVkaXRCdXR0b25zID8gMSA6IDApXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXREYXRhUGF0aChpbmRleCkge1xuICAgICAgcmV0dXJuIGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIGluZGV4KVxuICAgIH0sXG5cbiAgICBnZXRFZGl0UGF0aChpdGVtLCBpbmRleCkge1xuICAgICAgaWYgKHRoaXMuZWRpdGFibGUpIHtcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLmdldEl0ZW1JZCh0aGlzLnNjaGVtYSwgaXRlbSwgaW5kZXgpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgZ2V0Vmlld0VkaXRQYXRoKHRoaXMuc2NoZW1hLCBpZCwgdGhpcy5jb250ZXh0KSB8fFxuICAgICAgICAgIGAke3RoaXMucGF0aH0vJHtpZH1gXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcblxuICAgIGdldENlbGxDbGFzcyhjb2x1bW4pIHtcbiAgICAgIHJldHVybiBgZGl0by1jZWxsLSR7aHlwaGVuYXRlKGNvbHVtbi5uYW1lKX1gXG4gICAgfSxcblxuICAgIGdldENvbnRleHQoaXRlbSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICBkYXRhOiBpdGVtLFxuICAgICAgICB2YWx1ZTogaXRlbSxcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIGRhdGFQYXRoOiB0aGlzLmdldERhdGFQYXRoKGluZGV4KVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb25GaWx0ZXJFcnJvcnMoZXJyb3JzKSB7XG4gICAgICBjb25zdCBmaWx0ZXJzRGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCAnJGZpbHRlcnMnKVxuICAgICAgY29uc3QgcGFuZWwgPSB0aGlzLnNjaGVtYUNvbXBvbmVudC5nZXRQYW5lbEJ5RGF0YVBhdGgoZmlsdGVyc0RhdGFQYXRoKVxuICAgICAgaWYgKHBhbmVsKSB7XG4gICAgICAgIHBhbmVsLnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgdHJ1ZSlcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgYXN5bmMgcHJvY2Vzc1NjaGVtYShcbiAgICBhcGksXG4gICAgc2NoZW1hLFxuICAgIG5hbWUsXG4gICAgcm91dGVzLFxuICAgIGxldmVsLFxuICAgIG5lc3RlZCA9IGZhbHNlLFxuICAgIGZsYXR0ZW4gPSBmYWxzZSxcbiAgICBwcm9jZXNzID0gbnVsbFxuICApIHtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICByZXNvbHZlU2NoZW1hQ29tcG9uZW50KHNjaGVtYSksXG4gICAgICByZXNvbHZlU2NoZW1hQ29tcG9uZW50cyhzY2hlbWEuY29sdW1ucyksXG4gICAgICBTb3VyY2VNaXhpbi5wcm9jZXNzU2NoZW1hKFxuICAgICAgICBhcGksXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgcm91dGVzLFxuICAgICAgICBsZXZlbCxcbiAgICAgICAgbmVzdGVkLFxuICAgICAgICBmbGF0dGVuLFxuICAgICAgICBwcm9jZXNzXG4gICAgICApXG4gICAgXSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWxpc3Qge1xuICAkc2VsZjogJjtcblxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgJl9faGVhZGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBwYWRkaW5nLWJvdHRvbTogJGNvbnRlbnQtcGFkZGluZy1oYWxmO1xuICAgIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gICAgJjplbXB0eSB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cblxuICAgIC5kaXRvLXNjb3BlcyxcbiAgICAuZGl0by1wYWdpbmF0aW9uIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4OiAwIDEgYXV0bztcbiAgICAgIG1pbi13aWR0aDogMDtcbiAgICB9XG4gIH1cblxuICAmLmRpdG8tc2luZ2xlIHtcbiAgICAvLyBTbyB0aGF0IGxpc3QgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IHRvIHRoZSBib3R0b206XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50O1xuICAgIGhlaWdodDogMTAwJTtcblxuICAgIC8vIE1ha2Ugc2luZ2xlIGxpc3QgaGVhZGVyLCBuYXZpZ2F0aW9uIGFuZCBidXR0b25zIHN0aWNreSB0byB0aGUgdG9wIGFuZFxuICAgIC8vIGJvdHRvbTpcbiAgICAjeyRzZWxmfV9faGVhZGVyIHtcbiAgICAgIHBvc2l0aW9uOiBzdGlja3k7XG4gICAgICB0b3A6IDA7XG4gICAgICBtYXJnaW4tdG9wOiAtJGNvbnRlbnQtcGFkZGluZztcbiAgICAgIHBhZGRpbmctdG9wOiAkY29udGVudC1wYWRkaW5nO1xuICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZDtcbiAgICAgIHotaW5kZXg6IDE7XG5cbiAgICAgICsgLmRpdG8tdGFibGUge1xuICAgICAgICAuZGl0by10YWJsZS1oZWFkIHtcbiAgICAgICAgICBwb3NpdGlvbjogc3RpY2t5O1xuICAgICAgICAgIHRvcDogY2FsYygkaW5wdXQtaGVpZ2h0ICsgJGNvbnRlbnQtcGFkZGluZyArICRjb250ZW50LXBhZGRpbmctaGFsZik7XG4gICAgICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZDtcbiAgICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbkRpdG9MYWJlbC5kaXRvLWxhYmVsLWNvbXBvbmVudChcbiAgOmxhYmVsPVwidmFsdWVcIlxuICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2xhYmVsJywge1xuICBleGNsdWRlVmFsdWU6IHRydWUsXG4gIGdlbmVyYXRlTGFiZWw6IGZhbHNlXG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLmRpdG8tbGFiZWwtY29tcG9uZW50IHtcbiAgZGlzcGxheTogZmxleDtcbiAgaGVpZ2h0OiAyZW07XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLW1hcmt1cCg6aWQ9XCJkYXRhUGF0aFwiKVxuICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy10b29sYmFyKFxuICAgIHYtaWY9XCJncm91cGVkQnV0dG9ucy5sZW5ndGggPiAwXCJcbiAgKVxuICAgIC5kaXRvLWJ1dHRvbi1ncm91cChcbiAgICAgIHYtZm9yPVwiYnV0dG9ucyBpbiBncm91cGVkQnV0dG9uc1wiXG4gICAgKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWZvcj1cInsgbmFtZSwgaWNvbiwgaXNBY3RpdmUsIG9uQ2xpY2sgfSBpbiBidXR0b25zXCJcbiAgICAgICAgOmtleT1cIm5hbWVcIlxuICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IGlzQWN0aXZlIH1cIlxuICAgICAgICBAY2xpY2s9XCJvbkNsaWNrXCJcbiAgICAgIClcbiAgICAgICAgSWNvbig6bmFtZT1cImljb25cIilcbiAgRWRpdG9yQ29udGVudC5kaXRvLW1hcmt1cC1lZGl0b3IoXG4gICAgcmVmPVwiZWRpdG9yXCJcbiAgICA6ZWRpdG9yPVwiZWRpdG9yXCJcbiAgICA6c3R5bGU9XCJzdHlsZXNcIlxuICApXG4gIC5kaXRvLXJlc2l6ZShcbiAgICB2LWlmPVwicmVzaXphYmxlXCJcbiAgICBAbW91c2Vkb3duLnN0b3AucHJldmVudD1cIm9uRHJhZ1Jlc2l6ZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IEVkaXRvciwgRWRpdG9yQ29udGVudCwgTWFyaywgZ2V0TWFya0F0dHJpYnV0ZXMgfSBmcm9tICdAdGlwdGFwL3Z1ZS0zJ1xuLy8gaW1wb3J0IHsgdG9nZ2xlTWFyayB9IGZyb20gJ3RpcHRhcC1jb21tYW5kcydcbi8vIEVzc2VudGlhbHM6XG5pbXBvcnQgeyBEb2N1bWVudCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWRvY3VtZW50J1xuaW1wb3J0IHsgVGV4dCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRleHQnXG4vLyBNYXJrczpcbmltcG9ydCB7IEJvbGQgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1ib2xkJ1xuaW1wb3J0IHsgQ29kZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWNvZGUnXG5pbXBvcnQgeyBJdGFsaWMgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1pdGFsaWMnXG5pbXBvcnQgeyBMaW5rIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tbGluaydcbmltcG9ydCB7IFN0cmlrZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXN0cmlrZSdcbmltcG9ydCB7IFN1YnNjcmlwdCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXN1YnNjcmlwdCdcbmltcG9ydCB7IFN1cGVyc2NyaXB0IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tc3VwZXJzY3JpcHQnXG5pbXBvcnQgeyBVbmRlcmxpbmUgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi11bmRlcmxpbmUnXG4vLyBOb2RlczpcbmltcG9ydCB7IEJsb2NrcXVvdGUgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1ibG9ja3F1b3RlJ1xuaW1wb3J0IHsgQ29kZUJsb2NrIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tY29kZS1ibG9jaydcbmltcG9ydCB7IEhhcmRCcmVhayB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWhhcmQtYnJlYWsnXG5pbXBvcnQgeyBIZWFkaW5nIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taGVhZGluZydcbmltcG9ydCB7IFBhcmFncmFwaCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXBhcmFncmFwaCdcbmltcG9ydCB7IEhvcml6b250YWxSdWxlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taG9yaXpvbnRhbC1ydWxlJ1xuaW1wb3J0IHsgT3JkZXJlZExpc3QgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1vcmRlcmVkLWxpc3QnXG5pbXBvcnQgeyBCdWxsZXRMaXN0IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tYnVsbGV0LWxpc3QnXG5pbXBvcnQgeyBMaXN0SXRlbSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWxpc3QtaXRlbSdcbi8vIEZvb3Rub3RlczpcbmltcG9ydCB7IEZvb3Rub3RlcywgRm9vdG5vdGVSZWZlcmVuY2UsIEZvb3Rub3RlIH0gZnJvbSAndGlwdGFwLWZvb3Rub3Rlcydcbi8vIFRPRE86XG4vLyBpbXBvcnQgeyBJbWFnZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWltYWdlJ1xuLy8gaW1wb3J0IHsgTWVudGlvbiB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLW1lbnRpb24nXG4vLyBpbXBvcnQgeyBDb2RlQmxvY2tIaWdobGlnaHQgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1jb2RlLWJsb2NrLWhpZ2hsaWdodCdcbi8vIGltcG9ydCB7IFRhYmxlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFibGUnXG4vLyBpbXBvcnQgeyBUYWJsZUNlbGwgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YWJsZS1jZWxsJ1xuLy8gaW1wb3J0IHsgVGFibGVIZWFkZXIgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YWJsZS1oZWFkZXInXG4vLyBpbXBvcnQgeyBUYWJsZU5vZGVzIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFibGUtbm9kZXMnXG4vLyBpbXBvcnQgeyBUYWJsZVJvdyB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhYmxlLXJvdydcbi8vIGltcG9ydCB7IFRhc2tMaXN0IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFzay1saXN0J1xuLy8gaW1wb3J0IHsgVGFza0l0ZW0gfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YXNrLWl0ZW0nXG4vLyBUb29sczpcbmltcG9ydCB7IEhpc3RvcnkgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1oaXN0b3J5J1xuXG5pbXBvcnQgeyBJY29uIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5pbXBvcnQgeyBpc0FycmF5LCBpc09iamVjdCwgaHlwaGVuYXRlLCBkZWJvdW5jZSwgY2FtZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ21hcmt1cCcsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuICBjb21wb25lbnRzOiB7XG4gICAgRWRpdG9yQ29udGVudCxcbiAgICBJY29uXG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZWRpdG9yOiBudWxsLFxuICAgICAgaGVpZ2h0OiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGluZXMgfHwgMTBcbiAgICB9LFxuXG4gICAgaGFyZEJyZWFrKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5zY2hlbWEuaGFyZEJyZWFrXG4gICAgfSxcblxuICAgIHN0eWxlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQgfHwgYGNhbGMoJHt0aGlzLmxpbmVzfWVtICogdmFyKC0tbGluZS1oZWlnaHQpKWBcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbWFya0J1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCdtYXJrcycsIHtcbiAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgaXRhbGljOiB0cnVlLFxuICAgICAgICB1bmRlcmxpbmU6IHRydWUsXG4gICAgICAgIHN0cmlrZTogdHJ1ZSxcbiAgICAgICAgc21hbGw6IHRydWUsXG4gICAgICAgIGNvZGU6IHRydWUsXG4gICAgICAgIHN1YnNjcmlwdDogdHJ1ZSxcbiAgICAgICAgc3VwZXJzY3JpcHQ6IHRydWUsXG4gICAgICAgIGxpbms6IHtcbiAgICAgICAgICBvbkNsaWNrOiBlZGl0b3IgPT4gdGhpcy5vbkNsaWNrTGluayhlZGl0b3IpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGJhc2ljTm9kZUJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCdub2RlcycsIHtcbiAgICAgICAgcGFyYWdyYXBoOiB7XG4gICAgICAgICAgY29tbWFuZDogJ3NldFBhcmFncmFwaCdcbiAgICAgICAgfSxcbiAgICAgICAgaGVhZGluZzoge1xuICAgICAgICAgIGF0dHJpYnV0ZTogJ2xldmVsJyxcbiAgICAgICAgICB2YWx1ZXM6IFsxLCAyLCAzLCA0LCA1LCA2XVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhZHZhbmNlZE5vZGVCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygnbm9kZXMnLCB7XG4gICAgICAgIGJ1bGxldExpc3Q6IHRydWUsXG4gICAgICAgIG9yZGVyZWRMaXN0OiB0cnVlLFxuICAgICAgICBibG9ja3F1b3RlOiB0cnVlLFxuICAgICAgICBjb2RlQmxvY2s6IHRydWVcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHRvb2xCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygndG9vbHMnLCB7XG4gICAgICAgIHVuZG86IHRydWUsXG4gICAgICAgIHJlZG86IHRydWUsXG4gICAgICAgIGZvb3Rub3Rlczoge1xuICAgICAgICAgIGNvbW1hbmQ6ICdhZGRGb290bm90ZSdcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZ3JvdXBlZEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB0aGlzLm1hcmtCdXR0b25zLFxuICAgICAgICB0aGlzLmJhc2ljTm9kZUJ1dHRvbnMsXG4gICAgICAgIHRoaXMuYWR2YW5jZWROb2RlQnV0dG9ucyxcbiAgICAgICAgdGhpcy50b29sQnV0dG9uc1xuICAgICAgXS5maWx0ZXIoYnV0dG9ucyA9PiBidXR0b25zLmxlbmd0aCA+IDApXG4gICAgfSxcblxuICAgIHBhcnNlT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByZXNlcnZlV2hpdGVzcGFjZToge1xuICAgICAgICAgICdjb2xsYXBzZSc6IGZhbHNlLFxuICAgICAgICAgICdwcmVzZXJ2ZSc6IHRydWUsXG4gICAgICAgICAgJ3ByZXNlcnZlLWFsbCc6ICdmdWxsJ1xuICAgICAgICB9W3RoaXMud2hpdGVzcGFjZV1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZWRpdG9yT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVkaXRhYmxlOiAhdGhpcy5yZWFkeW9ubHksXG4gICAgICAgIGF1dG9Gb2N1czogdGhpcy5hdXRvZm9jdXMsXG4gICAgICAgIGRpc2FibGVJbnB1dFJ1bGVzOiAhdGhpcy5lbmFibGVSdWxlcy5pbnB1dCxcbiAgICAgICAgZGlzYWJsZVBhc3RlUnVsZXM6ICF0aGlzLmVuYWJsZVJ1bGVzLnBhc3RlLFxuICAgICAgICBwYXJzZU9wdGlvbnM6IHRoaXMucGFyc2VPcHRpb25zXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlc2l6YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Jlc2l6YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgd2hpdGVzcGFjZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3doaXRlc3BhY2UnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnY29sbGFwc2UnXG4gICAgICAvLyBQb3NzaWJsZSB2YWx1ZXMgYXJlOiAnY29sbGFwc2UnLCAncHJlc2VydmUnLCAncHJlc2VydmUtYWxsJ1xuICAgIH0pLFxuXG4gICAgZW5hYmxlUnVsZXM6IGdldFNjaGVtYUFjY2Vzc29yKCdlbmFibGVSdWxlcycsIHtcbiAgICAgIHR5cGU6IFtPYmplY3QsIEJvb2xlYW5dLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZW5hYmxlUnVsZXMpIHtcbiAgICAgICAgcmV0dXJuIGlzT2JqZWN0KGVuYWJsZVJ1bGVzKVxuICAgICAgICAgID8gZW5hYmxlUnVsZXNcbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgaW5wdXQ6ICEhZW5hYmxlUnVsZXMsXG4gICAgICAgICAgICAgIHBhc3RlOiAhIWVuYWJsZVJ1bGVzXG4gICAgICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHJlYWR5b25seTogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnLFxuICAgIGF1dG9mb2N1czogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnLFxuICAgIGVuYWJsZVJ1bGVzOiAndXBkYXRlRWRpdG9yT3B0aW9ucydcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIGxldCBpZ25vcmVXYXRjaCA9IGZhbHNlXG5cbiAgICBjb25zdCBvbkZvY3VzID0gKCkgPT4gdGhpcy5vbkZvY3VzKClcblxuICAgIGNvbnN0IG9uQmx1ciA9ICgpID0+IHtcbiAgICAgIHRoaXMub25CbHVyKClcbiAgICAgIHVwZGF0ZVZhbHVlKClcbiAgICB9XG5cbiAgICBjb25zdCBvblVwZGF0ZSA9ICgpID0+IHtcbiAgICAgIHNldFZhbHVlRGVib3VuY2VkKClcbiAgICAgIHRoaXMub25JbnB1dCgpXG4gICAgfVxuXG4gICAgY29uc3Qgc2V0VmFsdWVEZWJvdW5jZWQgPSBkZWJvdW5jZSgoKSA9PiB7XG4gICAgICBpZ25vcmVXYXRjaCA9IHRydWVcbiAgICAgIHVwZGF0ZVZhbHVlKClcbiAgICB9LCAxMDApXG5cbiAgICBjb25zdCB1cGRhdGVWYWx1ZSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmVkaXRvci5nZXRIVE1MKClcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5oYXJkQnJlYWtcbiAgICAgICAgPyBjb250ZW50LnJlcGxhY2UoL148cD4oLio/KTxcXC9wPiQvcywgJyQxJylcbiAgICAgICAgOiBjb250ZW50XG4gICAgICBpZiAodmFsdWUgIT09IHRoaXMudmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gICAgICAgIGlmICghdGhpcy5mb2N1c2VkKSB7XG4gICAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLiR3YXRjaCgndmFsdWUnLCB2YWx1ZSA9PiB7XG4gICAgICBpZiAoaWdub3JlV2F0Y2gpIHtcbiAgICAgICAgaWdub3JlV2F0Y2ggPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY29udGVudCA9IHRoaXMuaGFyZEJyZWFrXG4gICAgICAgICAgPyBgPHA+JHt2YWx1ZX08L3A+YFxuICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgdGhpcy5lZGl0b3IuY29tbWFuZHMuc2V0Q29udGVudChjb250ZW50LCBmYWxzZSwgdGhpcy5wYXJzZU9wdGlvbnMpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuZWRpdG9yID0gbmV3IEVkaXRvcih7XG4gICAgICAuLi50aGlzLmVkaXRvck9wdGlvbnMsXG4gICAgICBvbkZvY3VzLFxuICAgICAgb25CbHVyLFxuICAgICAgb25VcGRhdGUsXG4gICAgICBleHRlbnNpb25zOiB0aGlzLmdldEV4dGVuc2lvbnMoKSxcbiAgICAgIGNvbnRlbnQ6IHRoaXMudmFsdWUgfHwgJydcbiAgICB9KVxuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICB0aGlzLmVkaXRvci5kZXN0cm95KClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25EcmFnUmVzaXplKGV2ZW50KSB7XG4gICAgICBjb25zdCBnZXRQb2ludCA9ICh7IGNsaWVudFg6IHgsIGNsaWVudFk6IHkgfSkgPT4gKHsgeCwgeSB9KVxuXG4gICAgICBsZXQgcHJldlkgPSBnZXRQb2ludChldmVudCkueVxuICAgICAgbGV0IGhlaWdodCA9IHBhcnNlRmxvYXQoZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLiRyZWZzLmVkaXRvci4kZWwpLmhlaWdodClcblxuICAgICAgY29uc3QgbW91c2Vtb3ZlID0gZXZlbnQgPT4ge1xuICAgICAgICBjb25zdCB7IHkgfSA9IGdldFBvaW50KGV2ZW50KVxuICAgICAgICBoZWlnaHQgKz0geSAtIHByZXZZXG4gICAgICAgIHByZXZZID0geVxuICAgICAgICB0aGlzLmhlaWdodCA9IGAke01hdGgubWF4KGhlaWdodCwgMCl9cHhgXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhhbmRsZXJzID0gdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgICBtb3VzZW1vdmUsXG5cbiAgICAgICAgbW91c2V1cChldmVudCkge1xuICAgICAgICAgIG1vdXNlbW92ZShldmVudClcbiAgICAgICAgICBoYW5kbGVycy5yZW1vdmUoKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICB1cGRhdGVFZGl0b3JPcHRpb25zKCkge1xuICAgICAgdGhpcy5lZGl0b3Iuc2V0T3B0aW9ucyh0aGlzLmVkaXRvck9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIG9uQ2xpY2tMaW5rKGVkaXRvcikge1xuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IGF3YWl0IHRoaXMucm9vdENvbXBvbmVudC5zaG93RGlhbG9nKHtcbiAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgIGhyZWY6IHtcbiAgICAgICAgICAgIHR5cGU6ICd1cmwnLFxuICAgICAgICAgICAgbGFiZWw6ICdMaW5rJyxcbiAgICAgICAgICAgIGF1dG9mb2N1czogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGl0bGU6IHtcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIGxhYmVsOiAnVGl0bGUnXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBidXR0b25zOiB7XG4gICAgICAgICAgY2FuY2VsOiB7fSxcbiAgICAgICAgICBhcHBseTogeyB0eXBlOiAnc3VibWl0JyB9LFxuICAgICAgICAgIHJlbW92ZToge1xuICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgIGNsaWNrKHsgZGlhbG9nQ29tcG9uZW50IH0pIHtcbiAgICAgICAgICAgICAgICBkaWFsb2dDb21wb25lbnQucmVzb2x2ZShudWxsKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkYXRhOiBnZXRNYXJrQXR0cmlidXRlcyh0aGlzLmVkaXRvci5zdGF0ZSwgJ2xpbmsnKVxuICAgICAgfSlcbiAgICAgIGlmIChhdHRyaWJ1dGVzKSB7XG4gICAgICAgIGxldCB7IGhyZWYsIHRpdGxlIH0gPSBhdHRyaWJ1dGVzXG4gICAgICAgIGlmIChocmVmKSB7XG4gICAgICAgICAgLy8gU2VlIGlmIGBocmVmYCBjYW4gYmUgcGFyc2VkIGFzIGEgVVJMLCBhbmQgaWYgbm90LFxuICAgICAgICAgIC8vIHByZWZpeCBpdCB3aXRoIGEgZGVmYXVsdCBwcm90b2NvbC5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmV3IFVSTChocmVmKVxuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgaHJlZiA9IGBodHRwczovLyR7aHJlZn1gXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVkaXRvci5jb21tYW5kcy5zZXRMaW5rKHsgaHJlZiwgdGl0bGUgfSlcbiAgICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlcyA9PT0gbnVsbCkge1xuICAgICAgICBlZGl0b3IuY29tbWFuZHMudW5zZXRMaW5rKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0RXh0ZW5zaW9ucygpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFya3MgPSB7fSxcbiAgICAgICAgbm9kZXMgPSB7fSxcbiAgICAgICAgdG9vbHMgPSB7fVxuICAgICAgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gW1xuICAgICAgICAvLyBFc3NlbnRpYWxzOlxuICAgICAgICB0b29scy5mb290bm90ZXNcbiAgICAgICAgICA/IERvY3VtZW50LmV4dGVuZCh7IGNvbnRlbnQ6ICdibG9jaysgZm9vdG5vdGVzPycgfSlcbiAgICAgICAgICA6IERvY3VtZW50LFxuXG4gICAgICAgIFRleHQsXG4gICAgICAgIFBhcmFncmFwaCwgLy8gYnV0dG9uIGNhbiBiZSBjb250cm9sbGVkLCBidXQgbm9kZSBuZWVkcyB0byBiZSBvbi5cblxuICAgICAgICAvLyBNYXJrczogYHNjaGVtYS5tYXJrc2BcbiAgICAgICAgbWFya3MuYm9sZCAmJiBCb2xkLFxuICAgICAgICBtYXJrcy5pdGFsaWMgJiYgSXRhbGljLFxuICAgICAgICBtYXJrcy51bmRlcmxpbmUgJiYgVW5kZXJsaW5lLFxuICAgICAgICBtYXJrcy5zdHJpa2UgJiYgU3RyaWtlLFxuICAgICAgICBtYXJrcy5zbWFsbCAmJiBTbWFsbCxcbiAgICAgICAgbWFya3MuY29kZSAmJiBDb2RlLFxuICAgICAgICBtYXJrcy5zdWJzY3JpcHQgJiYgU3VwZXJzY3JpcHQsXG4gICAgICAgIG1hcmtzLnN1cGVyc2NyaXB0ICYmIFN1YnNjcmlwdCxcbiAgICAgICAgbWFya3MubGluayAmJiBMaW5rV2l0aFRpdGxlLFxuXG4gICAgICAgIC8vIE5vZGVzOiBgc2NoZW1hLm5vZGVzYFxuICAgICAgICBub2Rlcy5ibG9ja3F1b3RlICYmIEJsb2NrcXVvdGUsXG4gICAgICAgIG5vZGVzLmNvZGVCbG9jayAmJiBDb2RlQmxvY2ssXG4gICAgICAgIG5vZGVzLmhlYWRpbmcgJiYgSGVhZGluZy5jb25maWd1cmUoeyBsZXZlbHM6IG5vZGVzLmhlYWRpbmcgfSksXG4gICAgICAgIG5vZGVzLmhvcml6b250YWxSdWxlICYmIEhvcml6b250YWxSdWxlLFxuICAgICAgICAobm9kZXMub3JkZXJlZExpc3QgfHwgbm9kZXMuYnVsbGV0TGlzdCkgJiYgTGlzdEl0ZW0sXG4gICAgICAgIG5vZGVzLmJ1bGxldExpc3QgJiYgQnVsbGV0TGlzdCxcbiAgICAgICAgbm9kZXMub3JkZXJlZExpc3QgJiYgT3JkZXJlZExpc3QsXG5cbiAgICAgICAgLy8gRm9vdG5vdGVzOlxuICAgICAgICAuLi4odG9vbHMuZm9vdG5vdGVzID8gW0Zvb3Rub3RlcywgRm9vdG5vdGUsIEZvb3Rub3RlUmVmZXJlbmNlXSA6IFtdKSxcblxuICAgICAgICAvLyBUT0RPOlxuICAgICAgICAvLyBub2Rlcy50b2RvTGlzdCAmJiBUb2RvSXRlbSxcbiAgICAgICAgLy8gbm9kZXMudG9kb0xpc3QgJiYgVG9kb0xpc3QsXG5cbiAgICAgICAgLy8gVG9vbHM6IGBzY2hlbWEudG9vbHNgXG4gICAgICAgIHRvb2xzLmhpc3RvcnkgJiYgSGlzdG9yeSxcblxuICAgICAgICBIYXJkQnJlYWsuZXh0ZW5kKHtcbiAgICAgICAgICBhZGRLZXlib2FyZFNob3J0Y3V0czogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2V0SGFyZEJyZWFrID0gKCkgPT4gdGhpcy5lZGl0b3IuY29tbWFuZHMuc2V0SGFyZEJyZWFrKClcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICdNb2QtRW50ZXInOiBzZXRIYXJkQnJlYWssXG4gICAgICAgICAgICAgICdTaGlmdC1FbnRlcic6IHNldEhhcmRCcmVhayxcbiAgICAgICAgICAgICAgLi4uKHRoaXMuaGFyZEJyZWFrID8geyBFbnRlcjogc2V0SGFyZEJyZWFrIH0gOiBudWxsKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIF0uZmlsdGVyKGV4dGVuc2lvbiA9PiAhIWV4dGVuc2lvbilcbiAgICB9LFxuXG4gICAgZ2V0QnV0dG9ucyhzZXR0aW5nc05hbWUsIGRlc2NyaXB0aW9ucykge1xuICAgICAgY29uc3QgbGlzdCA9IFtdXG4gICAgICBjb25zdCB7IGNvbW1hbmRzIH0gPSB0aGlzLmVkaXRvclxuXG4gICAgICBjb25zdCBhZGRCdXR0b24gPSAoeyBuYW1lLCBpY29uLCBjb21tYW5kLCBhdHRyaWJ1dGVzLCBvbkNsaWNrIH0pID0+IHtcbiAgICAgICAgbGlzdC5wdXNoKHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGljb24sXG4gICAgICAgICAgaXNBY3RpdmU6IHRoaXMuZWRpdG9yLmlzQWN0aXZlKG5hbWUsIGF0dHJpYnV0ZXMpLFxuICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbW1hbmQgPz89XG4gICAgICAgICAgICAgIG5hbWUgaW4gY29tbWFuZHNcbiAgICAgICAgICAgICAgICA/IG5hbWVcbiAgICAgICAgICAgICAgICA6IGB0b2dnbGUke2NhbWVsaXplKG5hbWUsIHRydWUpfWBcbiAgICAgICAgICAgIGlmIChjb21tYW5kIGluIGNvbW1hbmRzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFwcGx5ID0gYXR0cmlidXRlcyA9PlxuICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yLmNoYWluKClbY29tbWFuZF0oYXR0cmlidXRlcykuZm9jdXMoKS5ydW4oKVxuICAgICAgICAgICAgICBvbkNsaWNrXG4gICAgICAgICAgICAgICAgPyBvbkNsaWNrKHRoaXMuZWRpdG9yLCBhdHRyaWJ1dGVzKVxuICAgICAgICAgICAgICAgIDogYXBwbHkoYXR0cmlidXRlcylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5zY2hlbWFbc2V0dGluZ3NOYW1lXVxuICAgICAgaWYgKHNldHRpbmdzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW25hbWUsIGRlc2NyaXB0aW9uXSBvZiBPYmplY3QuZW50cmllcyhkZXNjcmlwdGlvbnMpKSB7XG4gICAgICAgICAgY29uc3Qgc2V0dGluZ05hbWUgPSBbJ3VuZG8nLCAncmVkbyddLmluY2x1ZGVzKG5hbWUpID8gJ2hpc3RvcnknIDogbmFtZVxuICAgICAgICAgIGNvbnN0IHNldHRpbmcgPSBzZXR0aW5nc1tzZXR0aW5nTmFtZV1cbiAgICAgICAgICBjb25zdCBpY29uID0gaHlwaGVuYXRlKG5hbWUpXG4gICAgICAgICAgaWYgKHNldHRpbmcpIHtcbiAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICBhZGRCdXR0b24oeyBuYW1lLCBpY29uIH0pXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGRlc2NyaXB0aW9uKSkge1xuICAgICAgICAgICAgICBjb25zdCB7IGNvbW1hbmQsIGF0dHJpYnV0ZSwgdmFsdWVzLCBvbkNsaWNrIH0gPSBkZXNjcmlwdGlvblxuICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWVzKSAmJiBpc0FycmF5KHNldHRpbmcpKSB7XG4gICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0IGhlYWRpbmcgbGV2ZWwgYXR0cnM6XG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2V0dGluZy5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBhZGRCdXR0b24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb246IGAke2ljb259LSR7dmFsdWV9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7IFthdHRyaWJ1dGVdOiB2YWx1ZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGlja1xuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYWRkQnV0dG9uKHsgbmFtZSwgaWNvbiwgY29tbWFuZCwgb25DbGljayB9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdFxuICAgIH0sXG5cbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICB0aGlzLmVkaXRvci5jb21tYW5kcy5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXJFbGVtZW50KCkge1xuICAgICAgdGhpcy5lZGl0b3IuY29tbWFuZHMuYmx1cigpXG4gICAgfVxuICB9XG59KVxuXG5jb25zdCBTbWFsbCA9IE1hcmsuY3JlYXRlKHtcbiAgbmFtZTogJ3NtYWxsJyxcblxuICBwYXJzZUhUTUwoKSB7XG4gICAgcmV0dXJuIFt7IHRhZzogJ3NtYWxsJyB9XVxuICB9LFxuXG4gIHJlbmRlckhUTUwoKSB7XG4gICAgcmV0dXJuIFsnc21hbGwnLCAwXVxuICB9LFxuXG4gIGFkZENvbW1hbmRzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzZXRTbWFsbDpcbiAgICAgICAgYXR0cmlidXRlcyA9PlxuICAgICAgICAoeyBjb21tYW5kcyB9KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbW1hbmRzLnNldE1hcmsodGhpcy5uYW1lLCBhdHRyaWJ1dGVzKVxuICAgICAgICB9LFxuICAgICAgdG9nZ2xlU21hbGw6XG4gICAgICAgIGF0dHJpYnV0ZXMgPT5cbiAgICAgICAgKHsgY29tbWFuZHMgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiBjb21tYW5kcy50b2dnbGVNYXJrKHRoaXMubmFtZSwgYXR0cmlidXRlcylcbiAgICAgICAgfSxcbiAgICAgIHVuc2V0U21hbGw6XG4gICAgICAgICgpID0+XG4gICAgICAgICh7IGNvbW1hbmRzIH0pID0+IHtcbiAgICAgICAgICByZXR1cm4gY29tbWFuZHMudW5zZXRNYXJrKHRoaXMubmFtZSlcbiAgICAgICAgfVxuICAgIH1cbiAgfVxufSlcblxuY29uc3QgTGlua1dpdGhUaXRsZSA9IExpbmsuZXh0ZW5kKHtcbiAgaW5jbHVzaXZlOiBmYWxzZSxcbiAgc2NoZW1hOiB7XG4gICAgYXR0cnM6IHtcbiAgICAgIGhyZWY6IHtcbiAgICAgICAgZGVmYXVsdDogbnVsbFxuICAgICAgfSxcbiAgICAgIHRpdGxlOiB7XG4gICAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcGFyc2VIVE1MKCkge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAge1xuICAgICAgICAgIHRhZzogJ2EnLFxuICAgICAgICAgIGdldEF0dHJzOiBlbGVtZW50ID0+ICh7XG4gICAgICAgICAgICBocmVmOiBlbGVtZW50LmdldEF0dHJpYnV0ZSgnaHJlZicpLFxuICAgICAgICAgICAgdGl0bGU6IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCd0aXRsZScpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0sXG5cbiAgICByZW5kZXJIVE1MKG5vZGUpIHtcbiAgICAgIHJldHVybiBbJ2EnLCBub2RlLmF0dHJzLCAwXVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLW1hcmt1cCB7XG4gIEBleHRlbmQgJWlucHV0O1xuXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAuUHJvc2VNaXJyb3Ige1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBvdXRsaW5lOiBub25lO1xuICB9XG5cbiAgLmRpdG8tbWFya3VwLWVkaXRvciB7XG4gICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICAgIG1hcmdpbi10b3A6ICRpbnB1dC1wYWRkaW5nLXZlcjtcbiAgICAvLyBNb3ZlIHBhZGRpbmcgXCJpbnNpZGVcIiBlZGl0b3IgdG8gY29ycmVjdGx5IHBvc2l0aW9uIHNjcm9sbGJhclxuICAgIG1hcmdpbi1yaWdodDogLSRpbnB1dC1wYWRkaW5nLWhvcjtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkaW5wdXQtcGFkZGluZy1ob3I7XG4gIH1cblxuICAuZGl0by1idXR0b25zLXRvb2xiYXIge1xuICAgIG1hcmdpbjogMDtcbiAgfVxuXG4gIGgxLFxuICBoMixcbiAgaDMsXG4gIHAsXG4gIHVsLFxuICBvbCxcbiAgcHJlLFxuICBibG9ja3F1b3RlIHtcbiAgICBtYXJnaW46IDFyZW0gMDtcblxuICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICB9XG5cbiAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB9XG4gIH1cblxuICBoMSxcbiAgaDIsXG4gIGgzIHtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgfVxuXG4gIGgxIHtcbiAgICBmb250LXNpemU6IDEuNHJlbTtcbiAgfVxuXG4gIGgyIHtcbiAgICBmb250LXNpemU6IDEuMnJlbTtcbiAgfVxuXG4gIHVsIHtcbiAgICBsaXN0LXN0eWxlOiBkaXNjO1xuICB9XG5cbiAgY29kZSB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1tb25vO1xuICB9XG5cbiAgcHJlIHtcbiAgICBwYWRkaW5nOiAwLjdyZW0gMXJlbTtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3ItZGFya2VyO1xuICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG4gICAgb3ZlcmZsb3cteDogYXV0bztcblxuICAgIGNvZGUge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICB9XG5cbiAgcCBjb2RlIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgcGFkZGluZzogMCAwLjNyZW07XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXI7XG4gIH1cblxuICBhIHtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgY29sb3I6IGJsdWU7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gIH1cblxuICB1bCxcbiAgb2wge1xuICAgIHBhZGRpbmctbGVmdDogMnJlbTtcbiAgfVxuXG4gIGxpIHtcbiAgICAmID4gcCxcbiAgICAmID4gb2wsXG4gICAgJiA+IHVsIHtcbiAgICAgIG1hcmdpbjogMDtcbiAgICB9XG4gIH1cblxuICBibG9ja3F1b3RlIHtcbiAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkICRjb2xvci1saWdodGVyO1xuICAgIHBhZGRpbmctbGVmdDogMWVtO1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcblxuICAgIHAge1xuICAgICAgbWFyZ2luOiAwO1xuICAgIH1cbiAgfVxuXG4gIG9sLmZvb3Rub3RlcyB7XG4gICAgbWFyZ2luLXRvcDogMWVtO1xuICAgIHBhZGRpbmc6IDFlbSAwO1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogZGVjaW1hbDtcbiAgICBwYWRkaW5nLWxlZnQ6IDJlbTtcblxuICAgICY6aGFzKGxpKSB7XG4gICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJGNvbG9yLWxpZ2h0O1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1tdWx0aXNlbGVjdFxuICAuZGl0by1tdWx0aXNlbGVjdF9faW5uZXJcbiAgICBWdWVNdWx0aXNlbGVjdChcbiAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgdi1tb2RlbD1cInNlbGVjdGVkT3B0aW9uc1wiXG4gICAgICA6Y2xhc3M9YHtcbiAgICAgICAgJ211bHRpc2VsZWN0LS1tdWx0aXBsZSc6IG11bHRpcGxlLFxuICAgICAgICAnbXVsdGlzZWxlY3QtLWxvYWRpbmcnOiBpc0xvYWRpbmcsXG4gICAgICAgICdtdWx0aXNlbGVjdC0taGlnaGxpZ2h0Jzogc2hvd0hpZ2hsaWdodFxuICAgICAgfWBcbiAgICAgIDpzaG93TGFiZWxzPVwiZmFsc2VcIlxuICAgICAgOnBsYWNlaG9sZGVyPVwicGxhY2Vob2xkZXJcIlxuICAgICAgdGFnUGxhY2Vob2xkZXI9XCJQcmVzcyBlbnRlciB0byBhZGQgbmV3IHRhZ1wiXG4gICAgICA6b3B0aW9ucz1cInBvcHVsYXRlICYmIGFjdGl2ZU9wdGlvbnMgfHwgW11cIlxuICAgICAgOmN1c3RvbUxhYmVsPVwiZ2V0TGFiZWxGb3JPcHRpb25cIlxuICAgICAgOnRyYWNrQnk9XCJvcHRpb25WYWx1ZVwiXG4gICAgICA6Z3JvdXBMYWJlbD1cImdyb3VwQnlMYWJlbFwiXG4gICAgICA6Z3JvdXBWYWx1ZXM9XCJncm91cEJ5T3B0aW9uc1wiXG4gICAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgICA6dGFnZ2FibGU9XCJ0YWdnYWJsZVwiXG4gICAgICA6c2VhcmNoYWJsZT1cInNlYXJjaGFibGVcIlxuICAgICAgOmludGVybmFsU2VhcmNoPVwiIXNlYXJjaEZpbHRlclwiXG4gICAgICA6cHJlc2VydmVTZWFyY2g9XCIhIXNlYXJjaEZpbHRlclwiXG4gICAgICA6Y2xlYXJPblNlbGVjdD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgICAgOmNsb3NlT25TZWxlY3Q9XCIhc3RheU9wZW5cIlxuICAgICAgOmxvYWRpbmc9XCJpc0xvYWRpbmdcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICBAb3Blbj1cIm9uT3BlblwiXG4gICAgICBAY2xvc2U9XCJvbkNsb3NlXCJcbiAgICAgIEB0YWc9XCJvbkFkZFRhZ1wiXG4gICAgICBAc2VhcmNoLWNoYW5nZT1cIm9uU2VhcmNoQ2hhbmdlXCJcbiAgICApXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgQGNsaWNrPVwiY2xlYXJcIlxuICAgIClcbiAgLy8tIEVkaXQgYnV0dG9uIGlzIG5ldmVyIGRpc2FibGVkLCBldmVuIGlmIHRoZSBmaWVsZCBpcyBkaXNhYmxlZC5cbiAgRGl0b0VkaXRCdXR0b25zKFxuICAgIHYtaWY9XCJlZGl0YWJsZVwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOmRpc2FibGVkPVwiZmFsc2VcIlxuICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICA6ZWRpdFBhdGg9XCJlZGl0UGF0aFwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4uL21peGlucy9UeXBlTWl4aW4uanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5pbXBvcnQgVnVlTXVsdGlzZWxlY3QgZnJvbSAndnVlLW11bHRpc2VsZWN0J1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGlzQm9vbGVhbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbXVsdGlzZWxlY3QnLCB7XG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG4gIGNvbXBvbmVudHM6IHsgVnVlTXVsdGlzZWxlY3QgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzZWFyY2hlZE9wdGlvbnM6IG51bGwsXG4gICAgICBwb3B1bGF0ZTogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzZWxlY3RlZE9wdGlvbnM6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGVcbiAgICAgICAgICA/ICh0aGlzLnNlbGVjdGVkVmFsdWUgfHwgW10pXG4gICAgICAgICAgICAgIC5tYXAoXG4gICAgICAgICAgICAgICAgLy8gSWYgYW4gb3B0aW9uIGNhbm5vdCBiZSBmb3VuZCwgd2UgbWF5IGJlIGluIHRhZ2dhYmxlIG1vZGUgYW5kXG4gICAgICAgICAgICAgICAgLy8gY2FuIGFkZCBpdC5cbiAgICAgICAgICAgICAgICB2YWx1ZSA9PiAoXG4gICAgICAgICAgICAgICAgICB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHZhbHVlKSB8fCB0aGlzLmFkZFRhZ09wdGlvbih2YWx1ZSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLy8gRmlsdGVyIG91dCBvcHRpb25zIHRoYXQgd2UgY291bGRuJ3QgbWF0Y2guXG4gICAgICAgICAgICAgIC8vIFRPRE86IFNob3VsZCB3ZSBkaXNwbGF5IGFuIGVycm9yIGluc3RlYWQ/XG4gICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRPcHRpb25cbiAgICAgIH0sXG5cbiAgICAgIHNldChvcHRpb24pIHtcbiAgICAgICAgLy8gQ29udmVydCB2YWx1ZSB0byBvcHRpb25zIG9iamVjdCwgc2luY2UgdnVlLW11bHRpc2VsZWN0IGNhbid0IG1hcCB0aGF0XG4gICAgICAgIC8vIGl0c2VsZiB1bmZvcnR1bmF0ZWx5LiBgdHJhY2stYnlgIGlzIHVzZWQgZm9yIDprZXkgbWFwcGluZyBpdCBzZWVtcy5cbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdGhpcy5tdWx0aXBsZVxuICAgICAgICAgID8gKG9wdGlvbiB8fCBbXSkubWFwKHZhbHVlID0+IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24odmFsdWUpKVxuICAgICAgICAgIDogdGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhY3RpdmVPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoZWRPcHRpb25zIHx8IHRoaXMub3B0aW9uc1xuICAgIH0sXG5cbiAgICBtdWx0aXBsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ211bHRpcGxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBzZWFyY2hhYmxlOiBnZXRTY2hlbWFBY2Nlc3Nvcignc2VhcmNoYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgdGFnZ2FibGU6IGdldFNjaGVtYUFjY2Vzc29yKCd0YWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgc3RheU9wZW46IGdldFNjaGVtYUFjY2Vzc29yKCdzdGF5T3BlbicsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgcGxhY2Vob2xkZXIoKSB7XG4gICAgICBsZXQgeyBwbGFjZWhvbGRlciwgc2VhcmNoYWJsZSwgdGFnZ2FibGUgfSA9IHRoaXMuc2NoZW1hXG4gICAgICBpZiAoaXNCb29sZWFuKHBsYWNlaG9sZGVyKSkge1xuICAgICAgICBwbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyID8gdW5kZWZpbmVkIDogbnVsbFxuICAgICAgfVxuICAgICAgcmV0dXJuIHBsYWNlaG9sZGVyID09PSB1bmRlZmluZWRcbiAgICAgICAgPyBzZWFyY2hhYmxlICYmIHRhZ2dhYmxlXG4gICAgICAgICAgPyBgU2VhcmNoIG9yIGFkZCBhICR7dGhpcy5sYWJlbH1gXG4gICAgICAgICAgOiBzZWFyY2hhYmxlXG4gICAgICAgICAgICA/IGBTZWxlY3Qgb3Igc2VhcmNoICR7dGhpcy5sYWJlbH1gXG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICA6IHBsYWNlaG9sZGVyXG4gICAgfSxcblxuICAgIHNob3dIaWdobGlnaHQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc01vdW50ZWQgJiYgdGhpcy4kcmVmcy5lbGVtZW50LnBvaW50ZXJEaXJ0eVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIGlmICh0aGlzLmF1dG9mb2N1cykge1xuICAgICAgLy8gdnVlLW11bHRpc2VsZWN0IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgYXV0b2ZvY3VzIGF0dHJpYnV0ZS4gV2UgbmVlZCB0b1xuICAgICAgLy8gaGFuZGxlIGl0IGhlcmUuXG4gICAgICB0aGlzLmZvY3VzKClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGFkZFRhZ09wdGlvbih0YWcpIHtcbiAgICAgIGlmICh0aGlzLnRhZ2dhYmxlKSB7XG4gICAgICAgIGNvbnN0IHsgb3B0aW9uTGFiZWwsIG9wdGlvblZhbHVlIH0gPSB0aGlzXG4gICAgICAgIGNvbnN0IG9wdGlvbiA9XG4gICAgICAgICAgb3B0aW9uTGFiZWwgJiYgb3B0aW9uVmFsdWVcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIFtvcHRpb25MYWJlbF06IHRhZyxcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBEZWZpbmUgYSBzaW1wbGUgc2NoZW1hIG9wdGlvbiB0byBjb252ZXJ0IHRoZSB0YWcgdmFsdWVcbiAgICAgICAgICAgICAgICAvLyB0byBzb21ldGhpbmcgZWxzZSwgZS5nLiBgdG9UYWc6IHRhZyA9PiB1bmRlcnNjb3JlKHRhZylgXG4gICAgICAgICAgICAgICAgW29wdGlvblZhbHVlXTogdGFnXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogdGFnXG4gICAgICAgIHRoaXMub3B0aW9ucy5wdXNoKG9wdGlvbilcbiAgICAgICAgcmV0dXJuIG9wdGlvblxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICB0aGlzLiRyZWZzLmVsZW1lbnQuYWN0aXZhdGUoKVxuICAgIH0sXG5cbiAgICBibHVyRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJHJlZnMuZWxlbWVudC5kZWFjdGl2YXRlKClcbiAgICB9LFxuXG4gICAgb25PcGVuKCkge1xuICAgICAgdGhpcy5wb3B1bGF0ZSA9IHRydWVcbiAgICB9LFxuXG4gICAgb25DbG9zZSgpIHtcbiAgICAgIC8vIFNpbmNlIHdlIGRvbid0IGZpcmUgYmx1ciBldmVudHMgd2hpbGUgdGhlIG11bHRpc2VsZWN0IGlzIG9wZW4gKHNlZVxuICAgICAgLy8gYmVsb3cpLCB3ZSBuZWVkIHRvIGRvIGl0IGhlcmUsIHdoZW4gaXQncyBhY3R1YWxseSBjbG9zZWQuXG4gICAgICBpZiAodGhpcy5mb2N1c2VkKSB7XG4gICAgICAgIHRoaXMub25CbHVyKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25CbHVyKCkge1xuICAgICAgaWYgKCF0aGlzLiRyZWZzLmVsZW1lbnQuaXNPcGVuKSB7XG4gICAgICAgIFR5cGVNaXhpbi5tZXRob2RzLm9uQmx1ci5jYWxsKHRoaXMpXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uQWRkVGFnKHRhZykge1xuICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5hZGRUYWdPcHRpb24odGFnKVxuICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICB0aGlzLnZhbHVlLnB1c2godGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBvblNlYXJjaENoYW5nZShxdWVyeSkge1xuICAgICAgaWYgKHRoaXMuc2VhcmNoRmlsdGVyKSB7XG4gICAgICAgIGlmIChxdWVyeSkge1xuICAgICAgICAgIC8vIFNldCBgc2VhcmNoZWRPcHRpb25zYCB0byBhbiBlbXB0eSBhcnJheSwgYmVmb3JlIGl0IHdpbGwgYmVcbiAgICAgICAgICAvLyBwb3B1bGF0ZWQgYXN5bmNocm9ub3VzbHkgd2l0aCB0aGUgYWN0dWFsIHJlc3VsdHMuXG4gICAgICAgICAgdGhpcy5zZWFyY2hlZE9wdGlvbnMgPSBbXVxuICAgICAgICAgIHRoaXMuc2VhcmNoZWRPcHRpb25zID0gYXdhaXQgdGhpcy5yZXNvbHZlRGF0YShcbiAgICAgICAgICAgICgpID0+IHRoaXMuc2VhcmNoRmlsdGVyKG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IHF1ZXJ5IH0pKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBDbGVhciBgc2VhcmNoZWRPcHRpb25zYCB3aGVuIHRoZSBxdWVyeSBpcyBjbGVhcmVkLlxuICAgICAgICAgIHRoaXMuc2VhcmNoZWRPcHRpb25zID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcbkBpbXBvcnQgJ3Z1ZS1tdWx0aXNlbGVjdC9kaXN0L3Z1ZS1tdWx0aXNlbGVjdC5jc3MnO1xuXG4kc3Bpbm5lci13aWR0aDogJHNlbGVjdC1hcnJvdy13aWR0aDtcbiR0YWctaWNvbi13aWR0aDogMS44ZW07XG4kdGFnLW1hcmdpbjogMnB4O1xuJHRhZy1wYWRkaW5nOiAzcHg7XG4kdGFnLWxpbmUtaGVpZ2h0OiAxZW07XG5cbi5kaXRvLW11bHRpc2VsZWN0IHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAmX19pbm5lciB7XG4gICAgZmxleDogMTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIH1cblxuICAuZGl0by1lZGl0LWJ1dHRvbnMge1xuICAgIG1hcmdpbi1sZWZ0OiAkZm9ybS1zcGFjaW5nLWhhbGY7XG4gIH1cblxuICAubXVsdGlzZWxlY3Qge1xuICAgICRzZWxmOiBsYXN0LXNlbGVjdG9yKCYpO1xuXG4gICAgLS1pbnB1dC13aWR0aDogMTAwJTtcblxuICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICBtaW4taGVpZ2h0OiBpbmhlcml0O1xuICAgIGNvbG9yOiAkY29sb3ItYmxhY2s7XG5cbiAgICAmLS1tdWx0aXBsZSB7XG4gICAgICAtLWlucHV0LXdpZHRoOiBhdXRvO1xuICAgIH1cblxuICAgICZfX3RhZ3Mge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICAgIG1pbi1oZWlnaHQ6IGluaGVyaXQ7XG4gICAgICBvdmVyZmxvdzogYXV0bztcbiAgICAgIHBhZGRpbmc6IDAgJHNwaW5uZXItd2lkdGggMCAwO1xuICAgICAgLy8gU28gdGFncyBjYW4gZmxvYXQgb24gbXVsdGlwbGUgbGluZXMgYW5kIGhhdmUgcHJvcGVyIG1hcmdpbnM6XG4gICAgICBwYWRkaW5nLWJvdHRvbTogJHRhZy1tYXJnaW47XG5cbiAgICAgIC5kaXRvLWhhcy1lcnJvcnMgJiB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLWVycm9yO1xuICAgICAgfVxuICAgIH1cblxuICAgICZfX3RhZyB7XG4gICAgICBmbG9hdDogbGVmdDtcbiAgICAgIG1hcmdpbjogJHRhZy1tYXJnaW4gMCAwICR0YWctbWFyZ2luO1xuICAgICAgYm9yZGVyLXJhZGl1czogMWVtO1xuICAgICAgcGFkZGluZzogJHRhZy1wYWRkaW5nICR0YWctaWNvbi13aWR0aCAkdGFnLXBhZGRpbmcgMC44ZW07XG4gICAgICBsaW5lLWhlaWdodDogJHRhZy1saW5lLWhlaWdodDtcbiAgICAgIGhlaWdodDogY2FsYygkaW5wdXQtaGVpZ2h0IC0gMiAqICR0YWctcGFkZGluZyk7XG4gICAgfVxuXG4gICAgJl9fdGFncy13cmFwIHtcbiAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgbGluZS1oZWlnaHQ6IDA7XG4gICAgfVxuXG4gICAgJl9fc2luZ2xlLFxuICAgICZfX3BsYWNlaG9sZGVyLFxuICAgICZfX2lucHV0IHtcbiAgICAgIEBpbmNsdWRlIGVsbGlwc2lzO1xuXG4gICAgICBmbGV4OiAxIDAgMCU7XG4gICAgICB3aWR0aDogMDtcbiAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICBtYXJnaW46IDAgMCAxcHggMDtcbiAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xuICAgICAgLy8gU2FkbHksIHZ1ZS1zZWxlY3Qgc2V0cyBzdHlsZT1cInBhZGRpbmc6IC4uLjtcIiBpbiBhZGRpdGlvbiB0byB1c2luZ1xuICAgICAgLy8gY2xhc3Nlcywgc28gYCFpbXBvcnRhbnRgIGlzIG5lY2Vzc2FyeTpcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nICFpbXBvcnRhbnQ7XG4gICAgICAvLyBTbyBpbnB1dCBjYW4gZmxvYXQgbmV4dCB0byB0YWdzIGFuZCBoYXZlIHByb3BlciBtYXJnaW5zIHdpdGhcbiAgICAgIC8vICZfX3RhZ3M6XG4gICAgICBwYWRkaW5nLWJvdHRvbTogMCAhaW1wb3J0YW50O1xuICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICB9XG5cbiAgICAmX19wbGFjZWhvbGRlcixcbiAgICAmX19pbnB1dDo6cGxhY2Vob2xkZXIge1xuICAgICAgY29sb3I6ICRjb2xvci1wbGFjZWhvbGRlcjtcbiAgICB9XG5cbiAgICAmX19wbGFjZWhvbGRlciB7XG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIC8vIEVuZm9yY2UgYWN0dWFsIGxpbmUtaGVpZ2h0IGZvciBwb3NpdGlvbmluZy5cbiAgICAgICAgY29udGVudDogJ1xcMjAwYic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJl9fc2VsZWN0LFxuICAgICZfX3NwaW5uZXIge1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIC8vICRib3JkZXItd2lkdGggdG8gcHJldmVudCBtYXNraW5nIGJvcmRlciB3aXRoICZfX3NwaW5uZXJcbiAgICAgIHRvcDogJGJvcmRlci13aWR0aDtcbiAgICAgIHJpZ2h0OiAkYm9yZGVyLXdpZHRoO1xuICAgICAgYm90dG9tOiAkYm9yZGVyLXdpZHRoO1xuICAgICAgaGVpZ2h0OiBpbmhlcml0O1xuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgfVxuXG4gICAgJl9fc2VsZWN0IHtcbiAgICAgIHdpZHRoOiAkc2VsZWN0LWFycm93LXdpZHRoO1xuXG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBAaW5jbHVkZSBhcnJvdygkc2VsZWN0LWFycm93LXNpemUpO1xuXG4gICAgICAgIGJvdHRvbTogJHNlbGVjdC1hcnJvdy1ib3R0b207XG4gICAgICAgIHJpZ2h0OiAkc2VsZWN0LWFycm93LXJpZ2h0O1xuICAgICAgfVxuICAgIH1cblxuICAgICZfX3NwaW5uZXIge1xuICAgICAgd2lkdGg6ICRzcGlubmVyLXdpZHRoO1xuXG4gICAgICAmOjpiZWZvcmUsXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIC8vIENoYW5nZSB0aGUgd2lkdGggb2YgdGhlIGxvYWRpbmcgc3Bpbm5lclxuICAgICAgICBib3JkZXItd2lkdGg6IDNweDtcbiAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgICAgICAgaW5zZXQ6IDA7XG4gICAgICAgIG1hcmdpbjogYXV0bztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX19vcHRpb24ge1xuICAgICAgJG9wdGlvbjogbGFzdC1zZWxlY3RvcigmKTtcblxuICAgICAgbWluLWhlaWdodDogdW5zZXQ7XG4gICAgICBoZWlnaHQ6IHVuc2V0O1xuICAgICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodDtcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIC8vIEluc3RydWN0aW9uIHRleHQgZm9yIG9wdGlvbnNcbiAgICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmc7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAkdGFnLWxpbmUtaGVpZ2h0O1xuICAgICAgfVxuXG4gICAgICAvLyBPbmx5IHNob3cgdGhlIGhpZ2hsaWdodCBvbmNlIHRoZSBwdWxsZG93biBoYXMgcmVjZWl2ZWQgbW91c2Ugb3JcbiAgICAgIC8vIGtleWJvYXJkIGludGVyYWN0aW9uLCBpbiB3aGljaCBjYXNlIGAmLS1oaWdobGlnaHRgIHdpbGwgYmUgc2V0LFxuICAgICAgLy8gd2hpY2ggaXMgY29udHJvbGxlZCBieSBgcG9pbnRlckRpcnR5YCBpbiB2dWUtbXVsdGlzZWxlY3QuXG4gICAgICAvLyBVbnRpbCB0aGVuLCBjbGVhciB0aGUgaGlnaGxpZ2h0IHN0eWxlLCBidXQgb25seSBpZiBpdCBpc24ndCBhbHNvXG4gICAgICAvLyBkaXNhYmxlZCBvciBzZWxlY3RlZCwgaW4gd2hpY2ggY2FzZSB3ZSB3YW50IHRvIGtlZXAgdGhlIHN0eWxlLlxuICAgICAgQGF0LXJvb3QgI3skc2VsZn06bm90KCN7JHNlbGZ9LS1oaWdobGlnaHQpXG4gICAgICAgICAgI3skb3B0aW9ufTpub3QoI3skb3B0aW9ufS0tZGlzYWJsZWQpOm5vdCgjeyRvcHRpb259LS1zZWxlY3RlZCkge1xuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQ7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgfVxuXG4gICAgICAmLS1oaWdobGlnaHQge1xuICAgICAgICAmOjphZnRlciB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG4gICAgICAgIH1cblxuICAgICAgICBAYXQtcm9vdCAjeyRzZWxmfSN7JHNlbGZ9LS1oaWdobGlnaHQgI3tsYXN0LXNlbGVjdG9yKCYpfSB7XG4gICAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkO1xuICAgICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJi0tc2VsZWN0ZWQge1xuICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQ7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1oaWdobGlnaHQ7XG5cbiAgICAgICAgQGF0LXJvb3QgI3skc2VsZn0jeyRzZWxmfS0taGlnaGxpZ2h0ICYjeyRvcHRpb259LS1oaWdobGlnaHQge1xuICAgICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmLS1kaXNhYmxlZCB7XG4gICAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItZGlzYWJsZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJl9fdGFnIHtcbiAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZDtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgfVxuXG4gICAgJl9fdGFnLWljb24ge1xuICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDFlbTtcbiAgICAgIHdpZHRoOiAkdGFnLWljb24td2lkdGg7XG4gICAgICBtYXJnaW46IDA7XG5cbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgQGV4dGVuZCAlaWNvbi1jbGVhcjtcblxuICAgICAgICBmb250LXNpemU6IDAuOWVtO1xuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWQ7XG4gICAgICB9XG5cbiAgICAgICY6aG92ZXI6OmFmdGVyIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0O1xuICAgICAgfVxuICAgIH1cblxuICAgICZfX3RhZ3MsXG4gICAgJl9fY29udGVudC13cmFwcGVyIHtcbiAgICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIH1cblxuICAgICZfX2NvbnRlbnQtd3JhcHBlciB7XG4gICAgICB6LWluZGV4OiAkei1pbmRleC1wb3B1cDtcbiAgICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgICB9XG5cbiAgICAmOm5vdCgmLS1hYm92ZSkgI3skc2VsZn1fX2NvbnRlbnQtd3JhcHBlciB7XG4gICAgICBtYXJnaW46ICgtJGJvcmRlci13aWR0aCkgMCAwO1xuICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJGJvcmRlci1jb2xvcjtcbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgICB9XG5cbiAgICAmLS1hYm92ZSAjeyRzZWxmfV9fY29udGVudC13cmFwcGVyIHtcbiAgICAgIG1hcmdpbjogMCAwICgtJGJvcmRlci13aWR0aCk7XG4gICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1xuICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xuICAgIH1cblxuICAgICYtLWFjdGl2ZSB7XG4gICAgICAjeyRzZWxmfV9fcGxhY2Vob2xkZXIge1xuICAgICAgICAvLyBEb24ndCB1c2UgYGRpc3BsYXk6IG5vbmVgIHRvIGhpZGUgcGxhY2UtaG9sZGVyLCBhcyB0aGUgbGF5b3V0IHdvdWxkXG4gICAgICAgIC8vIGNvbGxhcHNlLlxuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgIH1cblxuICAgICAgI3skc2VsZn1fX3NpbmdsZSxcbiAgICAgICN7JHNlbGZ9X19pbnB1dCB7XG4gICAgICAgIC8vIFNhZGx5LCB2dWUtc2VsZWN0IHNldHMgYHN0eWxlPVwid2lkdGhcImAgaW4gYWRkaXRpb24gdG8gdXNpbmcgY2xhc3Nlc1xuICAgICAgICAvLyBzbyBgIWltcG9ydGFudGAgaXMgbmVjZXNzYXJ5OlxuICAgICAgICB3aWR0aDogdmFyKC0taW5wdXQtd2lkdGgpICFpbXBvcnRhbnQ7XG4gICAgICB9XG5cbiAgICAgICN7JHNlbGZ9X190YWdzIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkY29sb3ItYWN0aXZlO1xuICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xuICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgIH1cblxuICAgICAgJiN7JHNlbGZ9LS1hYm92ZSB7XG4gICAgICAgICN7JHNlbGZ9X190YWdzIHtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xuICAgICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi0tbG9hZGluZyB7XG4gICAgICAjeyRzZWxmfV9fdGFncyB7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgICAgfVxuXG4gICAgICAjeyRzZWxmfV9fY29udGVudC13cmFwcGVyIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXB1dGVkOiB7XG4gICAgaW5wdXRWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSAhPT0gbnVsbCA/IHRoaXMudmFsdWUgOiAnJ1xuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPVxuICAgICAgICAgIHZhbHVlICE9PSAnJ1xuICAgICAgICAgICAgPyB0aGlzLmlzSW50ZWdlclxuICAgICAgICAgICAgICA/IE51bWJlcih2YWx1ZSlcbiAgICAgICAgICAgICAgOiBwYXJzZUZsb2F0KHZhbHVlKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGlzSW50ZWdlcigpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBzdGVwVmFsdWUoKSB7XG4gICAgICAvLyBEb24ndCBzaG93IHN0ZXBzIGlmIHRoZSBpbnB1dCBpcyBhbHNvIGNsZWFyYWJsZSwgc2luY2UgdGhlIHN0ZXAgYnV0dG9uc1xuICAgICAgLy8gd291bGQgY29sbGlkZSB3aXRoIHRoZSBjbGVhciBidXR0b24uXG4gICAgICByZXR1cm4gdGhpcy5jbGVhcmFibGVcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogdGhpcy5zdGVwID09IG51bGwgJiYgIXRoaXMuaXNJbnRlZ2VyXG4gICAgICAgICAgPyAnYW55J1xuICAgICAgICAgIDogdGhpcy5zdGVwXG4gICAgfSxcblxuICAgIGRlY2ltYWxzOiBnZXRTY2hlbWFBY2Nlc3NvcignZGVjaW1hbHMnLCB7XG4gICAgICB0eXBlOiBOdW1iZXJcbiAgICB9KSxcblxuICAgIHN0ZXA6IGdldFNjaGVtYUFjY2Vzc29yKCdzdGVwJywge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZ2V0KHN0ZXApIHtcbiAgICAgICAgLy8gRm9yIGludGVnZXJzLCByb3VuZCB0aGUgc3RlcHMgdG8gdGhlIG5leHQgYmlnZ2VyIGludGVnZXIgdmFsdWU6XG4gICAgICAgIHJldHVybiB0aGlzLmlzSW50ZWdlciAmJiBzdGVwICE9IG51bGwgPyBNYXRoLmNlaWwoc3RlcCkgOiBzdGVwXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBtaW46IGdldFNjaGVtYUFjY2Vzc29yKCdtaW4nLCB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBnZXQobWluKSB7XG4gICAgICAgIG1pbiA9XG4gICAgICAgICAgbWluID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgncmFuZ2UnLCB7IHR5cGU6IEFycmF5IH0pPy5bMF1cbiAgICAgICAgICAgIDogbWluXG4gICAgICAgIHJldHVybiB0aGlzLmlzSW50ZWdlciAmJiBtaW4gIT0gbnVsbCA/IE1hdGguZmxvb3IobWluKSA6IG1pblxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgbWF4OiBnZXRTY2hlbWFBY2Nlc3NvcignbWF4Jywge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZ2V0KG1heCkge1xuICAgICAgICBtYXggPVxuICAgICAgICAgIG1heCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ3JhbmdlJywgeyB0eXBlOiBBcnJheSB9KT8uWzFdXG4gICAgICAgICAgICA6IG1heFxuICAgICAgICByZXR1cm4gdGhpcy5pc0ludGVnZXIgJiYgbWF4ICE9IG51bGwgPyBNYXRoLmNlaWwobWF4KSA6IG1heFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgcmFuZ2U6IGdldFNjaGVtYUFjY2Vzc29yKCdyYW5nZScsIHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZ2V0KCkge1xuICAgICAgICAvLyBgdGhpcy5taW5gLCBgdGhpcy5tYXhgIGFscmVhZHkgc3VwcG9ydCBgc2NoZW1hLnJhbmdlYCxcbiAgICAgICAgLy8gc28gcmVkaXJlY3QgdGhlcmUuXG4gICAgICAgIGNvbnN0IHsgbWluLCBtYXggfSA9IHRoaXNcbiAgICAgICAgcmV0dXJuIG1pbiAhPSBudWxsICYmIG1heCAhPSBudWxsID8gW21pbiwgbWF4XSA6IHVuZGVmaW5lZFxuICAgICAgfSxcblxuICAgICAgc2V0KHJhbmdlKSB7XG4gICAgICAgIC8vIFByb3ZpZGUgYSBzZXR0ZXIgdGhhdCBkZWxlZ2F0ZXMgdG8gYFt0aGlzLm1pbiwgdGhpcy5tYXhdYCxcbiAgICAgICAgLy8gc2luY2UgdGhvc2UgYWxyZWFkeSBoYW5kbGUgYHNjaGVtYS5yYW5nZWAuXG4gICAgICAgIGlmIChpc0FycmF5KHJhbmdlKSkge1xuICAgICAgICAgIDtbdGhpcy5taW4sIHRoaXMubWF4XSA9IHJhbmdlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRWYWxpZGF0aW9ucygpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25zID0ge31cbiAgICAgIGNvbnN0IHsgcmFuZ2UsIG1pbiwgbWF4LCBkZWNpbWFscywgc3RlcCB9ID0gdGhpc1xuICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLnJhbmdlID0gcmFuZ2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChtaW4gIT0gbnVsbCkge1xuICAgICAgICAgIHZhbGlkYXRpb25zLm1pbiA9IG1pblxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXggIT0gbnVsbCkge1xuICAgICAgICAgIHZhbGlkYXRpb25zLm1heCA9IG1heFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZGVjaW1hbHMgIT0gbnVsbCkge1xuICAgICAgICB2YWxpZGF0aW9ucy5kZWNpbWFscyA9IGRlY2ltYWxzXG4gICAgICB9IGVsc2UgaWYgKHN0ZXApIHtcbiAgICAgICAgY29uc3QgZGVjaW1hbHMgPSAoYCR7c3RlcH1gLnNwbGl0KCcuJylbMV0gfHwgJycpLmxlbmd0aFxuICAgICAgICBpZiAoZGVjaW1hbHMgPiAwKSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMuZGVjaW1hbHMgPSBkZWNpbWFsc1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkYXRpb25zLmludGVnZXIgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzSW50ZWdlcikge1xuICAgICAgICB2YWxpZGF0aW9ucy5pbnRlZ2VyID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbGlkYXRpb25zXG4gICAgfVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuSW5wdXRGaWVsZC5kaXRvLW51bWJlcihcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJlbGVtZW50XCJcbiAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICB0eXBlPVwibnVtYmVyXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIDptaW49XCJtaW5cIlxuICA6bWF4PVwibWF4XCJcbiAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuKVxuICB0ZW1wbGF0ZSgjYWZ0ZXIpXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIEBjbGljay5zdG9wPVwiY2xlYXJcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgTnVtYmVyTWl4aW4gZnJvbSAnLi4vbWl4aW5zL051bWJlck1peGluLmpzJ1xuaW1wb3J0IHsgSW5wdXRGaWVsZCB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcihcbiAgWydudW1iZXInLCAnaW50ZWdlciddLFxuICAvLyBAdnVlL2NvbXBvbmVudFxuICB7XG4gICAgbWl4aW5zOiBbTnVtYmVyTWl4aW5dLFxuICAgIGNvbXBvbmVudHM6IHsgSW5wdXRGaWVsZCB9LFxuICAgIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICAgIHRleHRGaWVsZDogdHJ1ZSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICBpc0ludGVnZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdpbnRlZ2VyJ1xuICAgICAgfVxuICAgIH1cbiAgfVxuKVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLy8gT25seSBzaG93IHNwaW4gYnV0dG9ucyBpZiB0aGUgbnVtYmVyIGNvbXBvbmVudCBkZWZpbmVzIGEgc3RlcCBzaXplLlxuaW5wdXRbdHlwZT0nbnVtYmVyJ106bm90KFtzdGVwXSkge1xuICAmOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxuICAmOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uIHtcbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgbWFyZ2luOiAwO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLW9iamVjdChcbiAgdi1pZj1cImlzUmVhZHlcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4pXG4gIC5kaXRvLW9iamVjdC1jb250ZW50KFxuICAgIHYtaWY9XCJvYmplY3REYXRhXCJcbiAgKVxuICAgIC8vLSBTdXBwb3J0IHRoZSBzYW1lIHJlbmRlcmluZyBvcHRpb25zIGFzIFR5cGVMaXN0OlxuICAgIERpdG9TY2hlbWFJbmxpbmVkKFxuICAgICAgdi1pZj1cImlzSW5saW5lZFwiXG4gICAgICA6bGFiZWw9XCJvYmplY3RMYWJlbFwiXG4gICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBvYmplY3REYXRhLCBjb250ZXh0KVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgIDpkZWxldGFibGU9XCJvYmplY3REYXRhICYmIGRlbGV0YWJsZVwiXG4gICAgICA6ZWRpdGFibGU9XCJvYmplY3REYXRhICYmIGVkaXRhYmxlXCJcbiAgICAgIDplZGl0UGF0aD1cInBhdGhcIlxuICAgICAgOmFjY3VtdWxhdGVkQmFzaXM9XCJhY2N1bXVsYXRlZEJhc2lzXCJcbiAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKG9iamVjdERhdGEpXCJcbiAgICApXG4gICAgY29tcG9uZW50KFxuICAgICAgdi1lbHNlLWlmPVwic2NoZW1hLmNvbXBvbmVudFwiXG4gICAgICA6aXM9XCJzY2hlbWEuY29tcG9uZW50XCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgIClcbiAgICBzcGFuKFxuICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgIHYtaHRtbD1cInJlbmRlcihnZXRDb250ZXh0KCkpXCJcbiAgICApXG4gICAgc3BhbihcbiAgICAgIHYtZWxzZVxuICAgICAgdi1odG1sPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgb2JqZWN0RGF0YSlcIlxuICAgIClcbiAgLy8tIE5PVEU6IGBEaXRvRWRpdEJ1dHRvbnNgIGhlcmUgb25seSBoYW5kbGUgdGhlIGNyZWF0ZSBidXR0b24gb3V0c2lkZSBvZiB0aGVcbiAgLy8tIHNjaGVtYSwgdGhlIGVkaXQgYnV0dG9ucyBpbnNpZGUgYXJlIGhhbmRsZWQgYnkgYERpdG9TY2hlbWFJbmxpbmVkYC5cbiAgRGl0b0VkaXRCdXR0b25zKFxuICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgOnBhdGg9XCJwYXRoXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgU291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvdXJjZU1peGluLmpzJ1xuaW1wb3J0IHsgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdvYmplY3QnLCB7XG4gIG1peGluczogW1NvdXJjZU1peGluXSxcblxuICBnZXRTb3VyY2VUeXBlKHR5cGUpIHtcbiAgICAvLyBObyBuZWVkIGZvciB0cmFuc2Zvcm1hdGlvbiBoZXJlLiBTZWUgVHlwZVRyZWVMaXN0IGZvciBkZXRhaWxzLlxuICAgIHJldHVybiB0eXBlXG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBvYmplY3RMYWJlbCgpIHtcbiAgICAgIC8vIE9ubHkgc2hvdyBhIGxhYmVsIGlmIHRoZSBvYmplY3QgaXMgY29sbGFwc2libGUuXG4gICAgICByZXR1cm4gdGhpcy5jb2xsYXBzaWJsZVxuICAgICAgICA/IHRoaXMuZ2V0SXRlbUxhYmVsKHRoaXMuc2NoZW1hLCB0aGlzLm9iamVjdERhdGEsIHsgYXNPYmplY3Q6IHRydWUgfSlcbiAgICAgICAgOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IGRhdGE6IHRoaXMub2JqZWN0RGF0YSB9KVxuICAgIH1cbiAgfSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgIGFwaSxcbiAgICBzY2hlbWEsXG4gICAgbmFtZSxcbiAgICByb3V0ZXMsXG4gICAgbGV2ZWwsXG4gICAgbmVzdGVkID0gZmFsc2UsXG4gICAgZmxhdHRlbiA9IGZhbHNlLFxuICAgIHByb2Nlc3MgPSBudWxsXG4gICkge1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHJlc29sdmVTY2hlbWFDb21wb25lbnQoc2NoZW1hKSxcbiAgICAgIFNvdXJjZU1peGluLnByb2Nlc3NTY2hlbWEoXG4gICAgICAgIGFwaSxcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBuYW1lLFxuICAgICAgICByb3V0ZXMsXG4gICAgICAgIGxldmVsLFxuICAgICAgICBuZXN0ZWQsXG4gICAgICAgIGZsYXR0ZW4sXG4gICAgICAgIHByb2Nlc3NcbiAgICAgIClcbiAgICBdKVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tb2JqZWN0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBtaW4td2lkdGg6IG1pbi1jb250ZW50O1xuXG4gIC5kaXRvLW9iamVjdC1jb250ZW50IHtcbiAgICBmbGV4OiAwIDEgMTAwJTtcbiAgfVxuXG4gID4gLmRpdG8tZWRpdC1idXR0b25zIHtcbiAgICBmbGV4OiAxIDAgMCU7XG4gICAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmc7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3BhbmVsJywge1xuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgZXhjbHVkZVZhbHVlOiB0cnVlLFxuICBnZW5lcmF0ZUxhYmVsOiBmYWxzZSxcbiAgb21pdFNwYWNpbmc6IHRydWUsXG5cbiAgZ2V0UGFuZWxTY2hlbWEoYXBpLCBzY2hlbWEpIHtcbiAgICAvLyBGb3IgYSBUeXBlUGFuZWwsIHRoZSBjb21wb25lbnQgc2NoZW1hIGlzIGFsc28gdGhlIHBhbmVsIHNjaGVtYSwgYnV0XG4gICAgLy8gcmVtb3ZlIHRoZSBhZGRlZCBuYW1lLCBzbyBpdCBkb2Vzbid0IGdldCBhcHBlbmRlZCB0d2ljZSB0byBkYXRhLXBhdGguXG4gICAgY29uc3QgeyBuYW1lLCAuLi5wYW5lbCB9ID0gc2NoZW1hXG4gICAgcmV0dXJuIHBhbmVsXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5wcm9ncmVzcy5kaXRvLXByb2dyZXNzKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6dmFsdWU9XCJwcm9ncmVzc1ZhbHVlXCJcbiAgOm1heD1cInByb2dyZXNzTWF4XCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE51bWJlck1peGluIGZyb20gJy4uL21peGlucy9OdW1iZXJNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdwcm9ncmVzcycsIHtcbiAgbWl4aW5zOiBbTnVtYmVyTWl4aW5dLFxuICBjb21wdXRlZDoge1xuICAgIHByb2dyZXNzVmFsdWUoKSB7XG4gICAgICBsZXQgeyB2YWx1ZSwgcmFuZ2UsIHN0ZXAgfSA9IHRoaXNcbiAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgICB2YWx1ZSAtPSByYW5nZVswXVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdGVwKSB7XG4gICAgICAgICAgdmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlIC8gc3RlcCkgKiBzdGVwXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gJydcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH0sXG5cbiAgICBwcm9ncmVzc01heCgpIHtcbiAgICAgIGNvbnN0IHsgcmFuZ2UgfSA9IHRoaXNcbiAgICAgIHJldHVybiByYW5nZSA/IHJhbmdlWzFdIC0gcmFuZ2VbMF0gOiBudWxsXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxudWwuZGl0by1yYWRpby1idXR0b25zKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1cImBkaXRvLWxheW91dC0ke3NjaGVtYS5sYXlvdXQgfHwgJ3ZlcnRpY2FsJ31gXCJcbilcbiAgbGkoXG4gICAgdi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiXG4gIClcbiAgICBsYWJlbFxuICAgICAgaW5wdXQuZGl0by1yYWRpby1idXR0b24oXG4gICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIClcbiAgICAgIHwge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBPcHRpb25zTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09wdGlvbnNNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdyYWRpbycsIHtcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcblxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgZGVmYXVsdFdpZHRoOiAnYXV0bydcbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1yYWRpby1idXR0b25zIHtcbiAgbGFiZWwge1xuICAgIEBleHRlbmQgJWlucHV0LWJvcmRlcmxlc3M7XG4gIH1cblxuICAuZGl0by1yYWRpby1idXR0b24ge1xuICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1zZWN0aW9uKDpjbGFzcz1cInsgJ2RpdG8tc2VjdGlvbi0tbGFiZWxsZWQnOiBoYXNMYWJlbCB9XCIpXG4gIERpdG9TY2hlbWFJbmxpbmVkLmRpdG8tc2VjdGlvbl9fc2NoZW1hKFxuICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOnBhZGRpbmc9XCJoYXNMYWJlbCA/ICduZXN0ZWQnIDogJ2lubGluZWQnXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgIDpsYWJlbE5vZGU9XCJsYWJlbE5vZGVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGdldEl0ZW1Gb3JtU2NoZW1hLCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzZWN0aW9uJywge1xuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiAoeyBzY2hlbWEgfSkgPT4gIXNjaGVtYS5uZXN0ZWQgJiYgISgnZGVmYXVsdCcgaW4gc2NoZW1hKSxcbiAgZGVmYXVsdE5lc3RlZDogZmFsc2UsXG4gIGdlbmVyYXRlTGFiZWw6IGZhbHNlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5lc3RlZCA/IHRoaXMudmFsdWUgOiB0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnNjaGVtYS5sYWJlbFxuICAgIH0sXG5cbiAgICBjb2xsYXBzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NvbGxhcHNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBjb2xsYXBzZWQ6IGdldFNjaGVtYUFjY2Vzc29yKCdjb2xsYXBzZWQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoY29sbGFwc2VkKSB7XG4gICAgICAgIHJldHVybiBjb2xsYXBzZWQgJiYgdGhpcy5jb2xsYXBzaWJsZVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldEl0ZW1Gb3JtU2NoZW1hXG4gIH0sXG5cbiAgYXN5bmMgcHJvY2Vzc1NjaGVtYShhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzLCBsZXZlbCkge1xuICAgIC8vIFByb2Nlc3Mgc2VjdGlvbiBjb21wb25lbnRzIHNvIHRoZWlyIGZvcm1zIGdldCByZXNvbHZlZCB0b28uXG4gICAgYXdhaXQgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBzY2hlbWEsIHJvdXRlcywgbGV2ZWwpXG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zZWN0aW9uIHtcbiAgJi0tbGFiZWxsZWQge1xuICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMC4ycyAkZWFzZS1vdXQtcXVhcnQ7XG4gICAgbWFyZ2luLXRvcDogJGZvcm0tc3BhY2luZy1oYWxmO1xuXG4gICAgJjpoYXMoLmRpdG8tc2NoZW1hLS1vcGVuKSB7XG4gICAgICBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi8vLSBOZXN0aW5nIGlzIG5lZWRlZCB0byBtYWtlIGFuIGFycm93IGFwcGVhciBvdmVyIHRoZSBzZWxlY3QgaXRlbTpcbi5kaXRvLXNlbGVjdFxuICAuZGl0by1zZWxlY3RfX2lubmVyXG4gICAgc2VsZWN0KFxuICAgICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICB2LW1vZGVsPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIEBtb3VzZWRvd249XCJwb3B1bGF0ZSA9IHRydWVcIlxuICAgICAgQGZvY3VzPVwicG9wdWxhdGUgPSB0cnVlXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1pZj1cInBvcHVsYXRlXCJcbiAgICAgIClcbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgdi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiXG4gICAgICAgIClcbiAgICAgICAgICBvcHRncm91cChcbiAgICAgICAgICAgIHYtaWY9XCJncm91cEJ5XCJcbiAgICAgICAgICAgIDpsYWJlbD1cIm9wdGlvbltncm91cEJ5TGFiZWxdXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBvcHRpb24oXG4gICAgICAgICAgICAgIHYtZm9yPVwib3B0IGluIG9wdGlvbltncm91cEJ5T3B0aW9uc11cIlxuICAgICAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHQpXCJcbiAgICAgICAgICAgICkge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0KSB9fVxuICAgICAgICAgIG9wdGlvbihcbiAgICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1lbHNlLWlmPVwic2VsZWN0ZWRPcHRpb25cIlxuICAgICAgKVxuICAgICAgICBvcHRpb24oOnZhbHVlPVwic2VsZWN0ZWRWYWx1ZVwiKSB7eyBnZXRMYWJlbEZvck9wdGlvbihzZWxlY3RlZE9wdGlvbikgfX1cbiAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgQGNsaWNrPVwiY2xlYXJcIlxuICAgIClcbiAgLy8tIEVkaXQgYnV0dG9uIGlzIG5ldmVyIGRpc2FibGVkLCBldmVuIGlmIHRoZSBmaWVsZCBpcyBkaXNhYmxlZC5cbiAgRGl0b0VkaXRCdXR0b25zKFxuICAgIHYtaWY9XCJlZGl0YWJsZVwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOmRpc2FibGVkPVwiZmFsc2VcIlxuICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICA6ZWRpdFBhdGg9XCJlZGl0UGF0aFwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2VsZWN0Jywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIERpc2FibGUgbGF6eS1wb3B1bGF0aW9uIGZvciBub3cuXG4gICAgICAvLyBUT0RPOiBTZXQgdG8gYGZhbHNlYCBPbmNlIGxpbmV0byBlMmUgdGVzdHMgYWRkcmVzcyB0aGVpciBpc3N1ZXMuXG4gICAgICBwb3B1bGF0ZTogdHJ1ZVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXNlbGVjdCB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgc2VsZWN0IHtcbiAgICBAZXh0ZW5kICVpbnB1dDtcblxuICAgIHBhZGRpbmctcmlnaHQ6ICRzZWxlY3QtYXJyb3ctd2lkdGg7XG4gIH1cblxuICAvLyBgJl9fX2lubmVyYCBpcyBuZWVkZWQgdG8gbWFrZSB0aGUgZWRpdCBidXR0b25zIGFwcGVhciB0byB0aGUgcmlnaHQgb2YgdGhlXG4gIC8vIHNlbGVjdDpcbiAgJl9faW5uZXIge1xuICAgIGZsZXg6IDE7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIEBpbmNsdWRlIGFycm93KCRzZWxlY3QtYXJyb3ctc2l6ZSk7XG5cbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGJvdHRvbTogJHNlbGVjdC1hcnJvdy1ib3R0b207XG4gICAgICByaWdodDogJHNlbGVjdC1hcnJvdy1yaWdodDtcbiAgICB9XG4gIH1cblxuICAuZGl0by1lZGl0LWJ1dHRvbnMge1xuICAgIG1hcmdpbi1sZWZ0OiAkZm9ybS1zcGFjaW5nLWhhbGY7XG4gIH1cblxuICAvLyBIYW5kbGUgLmRpdG8td2lkdGgtZmlsbCBzZXBhcmF0ZWx5IGR1ZSB0byByZXF1aXJlZCBuZXN0aW5nIG9mIHNlbGVjdDpcbiAgJi5kaXRvLXdpZHRoLWZpbGwge1xuICAgIHNlbGVjdCB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG4gIH1cblxuICAmLmRpdG8tZGlzYWJsZWQ6OmFmdGVyIHtcbiAgICBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tc2xpZGVyXG4gIGlucHV0LmRpdG8tcmFuZ2UoXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICB0eXBlPVwicmFuZ2VcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIDptaW49XCJtaW5cIlxuICAgIDptYXg9XCJtYXhcIlxuICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgKVxuICBJbnB1dEZpZWxkLmRpdG8tbnVtYmVyKFxuICAgIHYtaWY9XCJpbnB1dFwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHR5cGU9XCJudW1iZXJcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIDptaW49XCJtaW5cIlxuICAgIDptYXg9XCJtYXhcIlxuICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBOdW1iZXJNaXhpbiBmcm9tICcuLi9taXhpbnMvTnVtYmVyTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgSW5wdXRGaWVsZCB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3NsaWRlcicsIHtcbiAgbWl4aW5zOiBbTnVtYmVyTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IElucHV0RmllbGQgfSxcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYHNob3dJbnB1dGA/XG4gICAgaW5wdXQ6IGdldFNjaGVtYUFjY2Vzc29yKCdpbnB1dCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXNsaWRlciB7XG4gIEBleHRlbmQgJWlucHV0O1xuXG4gIGRpc3BsYXk6IGZsZXg7XG5cbiAgLmRpdG8tcmFuZ2Uge1xuICAgIGZsZXg6IGF1dG87XG4gICAgaGVpZ2h0OiBjYWxjKDFlbSAqIHZhcigtLWxpbmUtaGVpZ2h0KSk7XG4gIH1cblxuICAuZGl0by1udW1iZXIge1xuICAgIGJvcmRlcjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8IS0tIGVzbGludC1kaXNhYmxlIHZ1ZS92YWxpZC10ZW1wbGF0ZS1yb290IC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj48L3RlbXBsYXRlPlxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc3BhY2VyJywge1xuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgZXhjbHVkZVZhbHVlOiB0cnVlLFxuICBnZW5lcmF0ZUxhYmVsOiBmYWxzZVxufSlcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cblN3aXRjaEJ1dHRvbi5kaXRvLXN3aXRjaChcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJlbGVtZW50XCJcbiAgdi1tb2RlbD1cInZhbHVlXCJcbiAgOmxhYmVscz1cImxhYmVsc1wiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IFN3aXRjaEJ1dHRvbiB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3N3aXRjaCcsIHtcbiAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgZGVmYXVsdFdpZHRoOiAnYXV0bycsXG5cbiAgY29tcG9uZW50czoge1xuICAgIFN3aXRjaEJ1dHRvblxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGFiZWxzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmxhYmVsc1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXN3aXRjaCB7XG4gIC5kaXRvLXN3aXRjaC1sYWJlbCB7XG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtYWxsO1xuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0RGVmYXVsdFZhbHVlIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcHV0ZWQ6IHtcbiAgICB0cmltOiBnZXRTY2hlbWFBY2Nlc3NvcigndHJpbScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKGNvbnRleHQpIHtcbiAgICBsZXQgeyBzY2hlbWEsIHZhbHVlIH0gPSBjb250ZXh0XG4gICAgaWYgKHNjaGVtYS50cmltICYmIHZhbHVlICE9IG51bGwgJiYgaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAvLyBUZXh0IGZpZWxkcyBkb24ndCBuZWNlc3NhcmlseSBoYXZlIGEgYFN0cmluZ2AgdmFsdWUgd2hlbiBgZm9ybWF0KClgXG4gICAgICAvLyB3aXRob3V0IGBwYXJzZSgpYCBpcyB1c2VkLlxuICAgICAgdmFsdWUgPSB2YWx1ZS50cmltKClcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSAnJykge1xuICAgICAgdmFsdWUgPSBnZXREZWZhdWx0VmFsdWUoc2NoZW1hLCBjb250ZXh0KVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbklucHV0RmllbGQuZGl0by10ZXh0KFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gIDp0eXBlPVwiaW5wdXRUeXBlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4pXG4gIHRlbXBsYXRlKCNhZnRlcilcbiAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgQGNsaWNrLnN0b3A9XCJjbGVhclwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBUZXh0TWl4aW4gZnJvbSAnLi4vbWl4aW5zL1RleHRNaXhpbidcbmltcG9ydCB7IElucHV0RmllbGQgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcblxuY29uc3QgbWFza2VkUGFzc3dvcmQgPSAnKioqKioqKioqKioqKioqKidcblxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoXG4gIFtcbiAgICAndGV4dCcsXG4gICAgJ2VtYWlsJyxcbiAgICAndXJsJyxcbiAgICAnaG9zdG5hbWUnLFxuICAgICdkb21haW4nLFxuICAgICd0ZWwnLFxuICAgICdwYXNzd29yZCcsXG4gICAgJ2NyZWRpdGNhcmQnXG4gIF0sXG4gIC8vIEB2dWUvY29tcG9uZW50XG4gIHtcbiAgICBtaXhpbnM6IFtUZXh0TWl4aW5dLFxuICAgIGNvbXBvbmVudHM6IHsgSW5wdXRGaWVsZCB9LFxuICAgIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICAgIHRleHRGaWVsZDogdHJ1ZSxcbiAgICBpZ25vcmVNaXNzaW5nVmFsdWU6ICh7IHNjaGVtYSB9KSA9PiBzY2hlbWEudHlwZSA9PT0gJ3Bhc3N3b3JkJyxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICBpbnB1dFR5cGUoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAge1xuICAgICAgICAgICAgY3JlZGl0Y2FyZDogJ3RleHQnLFxuICAgICAgICAgICAgaG9zdG5hbWU6ICd0ZXh0JyxcbiAgICAgICAgICAgIGRvbWFpbjogJ3RleHQnXG4gICAgICAgICAgfVt0aGlzLnR5cGVdIHx8XG4gICAgICAgICAgdGhpcy50eXBlXG4gICAgICAgIClcbiAgICAgIH0sXG5cbiAgICAgIGlucHV0VmFsdWU6IHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLnR5cGUgPT09ICdwYXNzd29yZCcgJiZcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgIXRoaXMuZm9jdXNlZFxuICAgICAgICAgIClcbiAgICAgICAgICAgID8gbWFza2VkUGFzc3dvcmRcbiAgICAgICAgICAgIDogdGhpcy52YWx1ZVxuICAgICAgICB9LFxuXG4gICAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG1ldGhvZHM6IHtcbiAgICAgIGdldFZhbGlkYXRpb25zKCkge1xuICAgICAgICBjb25zdCBydWxlID0ge1xuICAgICAgICAgIGVtYWlsOiAnZW1haWwnLFxuICAgICAgICAgIHVybDogJ3VybCcsXG4gICAgICAgICAgaG9zdG5hbWU6ICdob3N0bmFtZScsXG4gICAgICAgICAgZG9tYWluOiAnZG9tYWluJyxcbiAgICAgICAgICBwYXNzd29yZDogJ3Bhc3N3b3JkJyxcbiAgICAgICAgICBjcmVkaXRjYXJkOiAnY3JlZGl0Y2FyZCdcbiAgICAgICAgfVt0aGlzLnR5cGVdXG4gICAgICAgIHJldHVybiBydWxlID8geyBbcnVsZV06IHRydWUgfSA6IHt9XG4gICAgICB9XG4gICAgfVxuICB9XG4pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG50ZXh0YXJlYS5kaXRvLXRleHRhcmVhLmRpdG8taW5wdXQoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICA6cm93cz1cImxpbmVzXCJcbiAgOmNsYXNzPVwieyAnZGl0by1yZXNpemFibGUnOiByZXNpemFibGUgfVwiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFRleHRNaXhpbiBmcm9tICcuLi9taXhpbnMvVGV4dE1peGluJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCd0ZXh0YXJlYScsIHtcbiAgbWl4aW5zOiBbVGV4dE1peGluXSxcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG4gIHRleHRGaWVsZDogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIGxpbmVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmxpbmVzIHx8IDRcbiAgICB9LFxuXG4gICAgcmVzaXphYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVzaXphYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXRleHRhcmVhIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHJlc2l6ZTogbm9uZTtcbiAgbWluLWhlaWdodDogY2FsYygxZW0gKiB2YXIoLS1saW5lLWhlaWdodCkgKyAjezIgKiAkaW5wdXQtcGFkZGluZy12ZXJ9KTtcblxuICAmLmRpdG8tcmVzaXphYmxlIHtcbiAgICByZXNpemU6IHZlcnRpY2FsO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXRyZWUtbGlzdFxuICBEaXRvU2NvcGVzKFxuICAgIHYtaWY9XCJzY29wZXNcIlxuICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICA6c2NvcGVzPVwic2NvcGVzXCJcbiAgKVxuICAuZGl0by10cmVlLXBhbmVsXG4gICAgRGl0b1RyZWVJdGVtKFxuICAgICAgOnNjaGVtYT1cInRyZWVTY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwidHJlZURhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwidHJlZURhdGFcIlxuICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICA6b3Blbj1cInRydWVcIlxuICAgICAgQHVwZGF0ZTpkYXRhPVwiZGF0YSA9PiAodmFsdWUgPSBkYXRhKVwiXG4gICAgKVxuICAgIC5kaXRvLXRyZWUtZm9ybS1jb250YWluZXIoXG4gICAgICB2LWlmPVwiaGFzRWRpdGFibGVGb3Jtc1wiXG4gICAgKVxuICAgICAgLy8tIEluY2x1ZGUgYSByb3V0ZXItdmlldyBmb3IgdGhlIG9wdGlvbmFsIERpdG9Gb3JtSW5saW5lZFxuICAgICAgUm91dGVyVmlld1xuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBTb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvU291cmNlTWl4aW4uanMnXG5pbXBvcnQge1xuICBoYXNGb3JtU2NoZW1hLFxuICBnZXRGb3JtU2NoZW1hcyxcbiAgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudHNcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcihcbiAgWyd0cmVlLWxpc3QnLCAndHJlZS1vYmplY3QnXSxcbiAgLy8gQHZ1ZS9jb21wb25lbnRcbiAge1xuICAgIG1peGluczogW1NvdXJjZU1peGluXSxcblxuICAgIHByb3ZpZGUoKSB7XG4gICAgICByZXR1cm4geyBjb250YWluZXI6IHRoaXMgfVxuICAgIH0sXG5cbiAgICBnZXRTb3VyY2VUeXBlKHR5cGUpIHtcbiAgICAgIHJldHVybiB0eXBlID09PSAndHJlZS1vYmplY3QnID8gJ29iamVjdCcgOiAnbGlzdCdcbiAgICB9LFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIHBhdGgoKSB7XG4gICAgICAgIC8vIEFjY2Vzc2VkIGZyb20gRGl0b1RyZWVJdGVtIHRocm91Z2ggYGNvbnRhaW5lci5wYXRoYDpcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybUNvbXBvbmVudD8ucGF0aFxuICAgICAgfSxcblxuICAgICAgZWRpdFBhdGgoKSB7XG4gICAgICAgIC8vIEFjY2Vzc2VkIGZyb20gRGl0b1RyZWVJdGVtIHRocm91Z2ggYGNvbnRhaW5lci5lZGl0UGF0aGA6XG4gICAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5wYXRoLnNsaWNlKHRoaXMucGF0aD8ubGVuZ3RoKVxuICAgICAgfSxcblxuICAgICAgdHJlZURhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICAgID8geyBbdGhpcy5uYW1lXTogdGhpcy52YWx1ZSB9XG4gICAgICAgICAgOiB0aGlzLnZhbHVlXG4gICAgICB9LFxuXG4gICAgICB0cmVlRGF0YVBhdGgoKSB7XG4gICAgICAgIC8vIFJlbW92ZSBgbmFtZWAgZnJvbSBgZGF0YVBhdGhgLCBhcyBpdCBpcyBhZGRlZFxuICAgICAgICAvLyB0byBgdHJlZURhdGFgIGFuZCBgdHJlZVNjaGVtYWBcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgICAgPyB0aGlzLmRhdGFQYXRoLnNsaWNlKDAsIHRoaXMuZGF0YVBhdGgubGVuZ3RoIC0gdGhpcy5uYW1lLmxlbmd0aClcbiAgICAgICAgICA6IHRoaXMuZGF0YVBhdGhcbiAgICAgIH0sXG5cbiAgICAgIHRyZWVTY2hlbWEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBjaGlsZHJlbjoge1xuICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgICAgICAuLi50aGlzLnNjaGVtYVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB0aGlzLnNjaGVtYVxuICAgICAgfSxcblxuICAgICAgaGFzRWRpdGFibGVGb3JtcygpIHtcbiAgICAgICAgY29uc3QgaGFzRWRpdGFibGVGb3JtcyA9IHNjaGVtYSA9PiB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGhhc0Zvcm1TY2hlbWEoc2NoZW1hKSAmJiAoXG4gICAgICAgICAgICAgIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2VkaXRhYmxlJywge1xuICAgICAgICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgc2NoZW1hXG4gICAgICAgICAgICAgIH0pIHx8XG4gICAgICAgICAgICAgIHNjaGVtYS5jaGlsZHJlbiAmJlxuICAgICAgICAgICAgICBoYXNFZGl0YWJsZUZvcm1zKHNjaGVtYS5jaGlsZHJlbilcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhhc0VkaXRhYmxlRm9ybXModGhpcy5zY2hlbWEpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHByb2Nlc3NTY2hlbWEoXG4gICAgICBhcGksXG4gICAgICBzY2hlbWEsXG4gICAgICBuYW1lLFxuICAgICAgcm91dGVzLFxuICAgICAgbGV2ZWwsXG4gICAgICBuZXN0ZWQgPSB0cnVlLFxuICAgICAgZmxhdHRlbiA9IGZhbHNlLFxuICAgICAgcHJvY2VzcyA9IG51bGxcbiAgICApIHtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudHMoc2NoZW1hLnByb3BlcnRpZXMpLFxuICAgICAgICBTb3VyY2VNaXhpbi5wcm9jZXNzU2NoZW1hKFxuICAgICAgICAgIGFwaSxcbiAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICByb3V0ZXMsXG4gICAgICAgICAgbGV2ZWwsXG4gICAgICAgICAgbmVzdGVkLFxuICAgICAgICAgIGZsYXR0ZW4sXG4gICAgICAgICAgLy8gUGFzcyBwcm9jZXNzKCkgdG8gYWRkIG1vcmUgcm91dGVzIHRvIGNoaWxkUm91dGVzOlxuICAgICAgICAgIChjaGlsZFJvdXRlcywgbGV2ZWwpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgY2hpbGRyZW4gfSA9IHNjaGVtYVxuICAgICAgICAgICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgIC8vIEFkZCBgdHlwZWAgdG8gdGhlIG5lc3RlZCB0cmVlIGxpc3QuXG4gICAgICAgICAgICAgIGNoaWxkcmVuLnR5cGUgPSAndHJlZS1saXN0J1xuICAgICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBjYWxsIGBwcm9jZXNzU2NoZW1hKClgIGZvciB0aGUgbmVzdGVkIHRyZWUgbGlzdDpcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1NjaGVtYShcbiAgICAgICAgICAgICAgICBhcGksXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4ubmFtZSxcbiAgICAgICAgICAgICAgICBjaGlsZFJvdXRlcyxcbiAgICAgICAgICAgICAgICBsZXZlbCxcbiAgICAgICAgICAgICAgICBuZXN0ZWQsXG4gICAgICAgICAgICAgICAgdHJ1ZSwgLy8gUGFzcyBgdHJ1ZWAgZm9yIGBmbGF0dGVuYCBpbiB0cmVlIGxpc3RzLlxuICAgICAgICAgICAgICAgIHByb2Nlc3NcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgXSlcbiAgICB9LFxuXG4gICAgZ2V0Rm9ybVNjaGVtYXNGb3JQcm9jZXNzaW5nKHNjaGVtYSwgY29udGV4dCkge1xuICAgICAgLy8gQ29udmVydCBuZXN0ZWQgY2hpbGRyZW4gc2NoZW1hIHRvIHN0YW5kLWFsb25lIHNjaGVtYSBjb21wb25lbnQsXG4gICAgICAvLyBwcmVzZW50IGluIGVhY2ggb2YgdGhlIGZvcm1zLCBhcyByZXF1aXJlZCBieSBgcHJvY2Vzc1NjaGVtYURhdGEoKWBcbiAgICAgIGNvbnN0IHsgY2hpbGRyZW4gfSA9IHNjaGVtYVxuICAgICAgcmV0dXJuIGdldEZvcm1TY2hlbWFzKFxuICAgICAgICBzY2hlbWEsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGNoaWxkcmVuXG4gICAgICAgICAgPyBmb3JtID0+ICh7XG4gICAgICAgICAgICAgIC4uLmZvcm0sXG4gICAgICAgICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAgICAgICAuLi5mb3JtLmNvbXBvbmVudHMsXG4gICAgICAgICAgICAgICAgW2NoaWxkcmVuLm5hbWVdOiBjaGlsZHJlblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogbnVsbFxuICAgICAgKVxuICAgIH1cbiAgfVxuKVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdHJlZS1saXN0IHtcbiAgQGV4dGVuZCAlZmllbGQ7XG5cbiAgLmRpdG8tdHJlZS1wYW5lbCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cbiAgICA+IC5kaXRvLXRyZWUtaXRlbSB7XG4gICAgICBmbGV4OiAxIDEgMjUlO1xuICAgIH1cblxuICAgID4gLmRpdG8tdHJlZS1mb3JtLWNvbnRhaW5lciB7XG4gICAgICBmbGV4OiAwIDEgNzUlO1xuICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaDtcbiAgICAgIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmQ7XG4gICAgICBib3JkZXItbGVmdDogJGJvcmRlci1zdHlsZTtcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAtIDE7XG4gICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXMgLSAxO1xuICAgICAgbWFyZ2luOiAoLSRpbnB1dC1wYWRkaW5nLXZlcikgKC0kaW5wdXQtcGFkZGluZy1ob3IpO1xuICAgICAgbWFyZ2luLWxlZnQ6ICRpbnB1dC1wYWRkaW5nLWhvcjtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBmaWxlc2l6ZSB9IGZyb20gJ2ZpbGVzaXplJ1xuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RmlsZVNpemUoc2l6ZSkge1xuICByZXR1cm4gZmlsZXNpemUoc2l6ZSwgeyBiYXNlOiAxMCB9KVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXVwbG9hZFxuICAvLy0gSW4gb3JkZXIgdG8gaGFuZGxlIHVwbG9hZCBidXR0b25zIGluIG11bHRpcGxlIHBvc3NpYmxlIHBsYWNlcywgZGVwZW5kaW5nXG4gIC8vLSBvbiB3aGV0aGVyIHRoZXkgaGFuZGxlIHNpbmdsZSBvciBtdWx0aXBsZSB1cGxvYWRzLCByZW5kZXIgdGhlIHVwbG9hZFxuICAvLy0gY29tcG9uZW50IGludmlzaWJseSBhdCB0aGUgcm9vdCwgYW5kIGRlbGVnYXRlIHRoZSBjbGljayBldmVudHMgdG8gaXQgZnJvbVxuICAvLy0gdGhlIGJ1dHRvbnMgcmVuZGVyZWQgZnVydGhlciBiZWxvdy4gTHVja2lseSB0aGlzIHdvcmtzIHN1cnByaXNpbmdseSB3ZWxsLlxuICBWdWVVcGxvYWQuZGl0by11cGxvYWRfX2lucHV0KFxuICAgIHJlZj1cInVwbG9hZFwiXG4gICAgdi1tb2RlbD1cInVwbG9hZHNcIlxuICAgIDppbnB1dElkPVwiZGF0YVBhdGhcIlxuICAgIDpuYW1lPVwiZGF0YVBhdGhcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6cG9zdEFjdGlvbj1cInVwbG9hZFBhdGhcIlxuICAgIDpleHRlbnNpb25zPVwiZXh0ZW5zaW9uc1wiXG4gICAgOmFjY2VwdD1cImFjY2VwdFwiXG4gICAgOm11bHRpcGxlPVwibXVsdGlwbGVcIlxuICAgIDpzaXplPVwibWF4U2l6ZVwiXG4gICAgOmRyb3A9XCIkZWw/LmNsb3Nlc3QoJy5kaXRvLWNvbnRhaW5lcicpXCJcbiAgICA6ZHJvcERpcmVjdG9yeT1cInRydWVcIlxuICAgIEBpbnB1dC1maWx0ZXI9XCJvbklucHV0RmlsdGVyXCJcbiAgICBAaW5wdXQtZmlsZT1cIm9uSW5wdXRGaWxlXCJcbiAgKVxuICB0YWJsZS5kaXRvLXRhYmxlLmRpdG8tdGFibGUtc2VwYXJhdG9ycy5kaXRvLXRhYmxlLWJhY2tncm91bmRcbiAgICAvLy0gU3R5bGluZyBjb21lcyBmcm9tIGBEaXRvVGFibGVIZWFkYFxuICAgIHRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICAgICAgdHJcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuIEZpbGVcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuIFNpemVcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuIFN0YXR1c1xuICAgICAgICB0aFxuICAgICAgICAgIHNwYW5cbiAgICBEaXRvRHJhZ2dhYmxlKFxuICAgICAgdi1tb2RlbD1cImZpbGVzXCJcbiAgICAgIHRhZz1cInRib2R5XCJcbiAgICAgIDpvcHRpb25zPVwiZ2V0RHJhZ2dhYmxlT3B0aW9ucygpXCJcbiAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWlmPVwibXVsdGlwbGUgfHwgIWlzVXBsb2FkQWN0aXZlXCJcbiAgICAgIClcbiAgICAgICAgdHIoXG4gICAgICAgICAgdi1mb3I9XCIoZmlsZSwgaW5kZXgpIGluIGZpbGVzXCJcbiAgICAgICAgICA6a2V5PVwiZmlsZS5uYW1lXCJcbiAgICAgICAgKVxuICAgICAgICAgIHRkKFxuICAgICAgICAgICAgdi1pZj1cInJlbmRlclwiXG4gICAgICAgICAgICB2LWh0bWw9XCJyZW5kZXJGaWxlKGZpbGUsIGluZGV4KVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIHRkKFxuICAgICAgICAgICAgdi1lbHNlLWlmPVwiZG93bmxvYWRVcmxzW2luZGV4XVwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgYShcbiAgICAgICAgICAgICAgOmRvd25sb2FkPVwiZmlsZS5uYW1lXCJcbiAgICAgICAgICAgICAgOmhyZWY9XCJkb3dubG9hZFVybHNbaW5kZXhdXCJcbiAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQ9XCJvbkNsaWNrRG93bmxvYWQoZmlsZSwgaW5kZXgpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgRGl0b1VwbG9hZEZpbGUoXG4gICAgICAgICAgICAgICAgOmZpbGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgICA6dGh1bWJuYWlsPVwidGh1bWJuYWlsc1wiXG4gICAgICAgICAgICAgICAgOnRodW1ibmFpbFVybD1cInRodW1ibmFpbFVybHNbaW5kZXhdXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgIHRkKFxuICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgKVxuICAgICAgICAgICAgRGl0b1VwbG9hZEZpbGUoXG4gICAgICAgICAgICAgIDpmaWxlPVwiZmlsZVwiXG4gICAgICAgICAgICAgIDp0aHVtYm5haWw9XCJ0aHVtYm5haWxzXCJcbiAgICAgICAgICAgICAgOnRodW1ibmFpbFVybD1cInRodW1ibmFpbFVybHNbaW5kZXhdXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICB0ZC5kaXRvLXVwbG9hZF9fc2l6ZSB7eyBmb3JtYXRGaWxlU2l6ZShmaWxlLnNpemUpIH19XG4gICAgICAgICAgdGQuZGl0by11cGxvYWRfX3N0YXR1c1xuICAgICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICAgIHYtaWY9XCJmaWxlLnVwbG9hZFwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJmaWxlLnVwbG9hZC5lcnJvclwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB8IEVycm9yOiB7eyBmaWxlLnVwbG9hZC5lcnJvciB9fVxuICAgICAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJmaWxlLnVwbG9hZC5hY3RpdmVcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfCBVcGxvYWRpbmcuLi5cbiAgICAgICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICAgICAgdi1lbHNlLWlmPVwiZmlsZS51cGxvYWQuc3VjY2Vzc1wiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB8IFVwbG9hZGVkXG4gICAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHwgU3RvcmVkXG4gICAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9uc1xuICAgICAgICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLXVwbG9hZChcbiAgICAgICAgICAgICAgICB2LWlmPVwiIW11bHRpcGxlXCJcbiAgICAgICAgICAgICAgICA6dGl0bGU9XCJ1cGxvYWRUaXRsZVwiXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwib25DbGlja1VwbG9hZFwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgICAgICAgICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgdi1pZj1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJkZWxldGVGaWxlKGZpbGUsIGluZGV4KVwiXG4gICAgICAgICAgICAgIClcbiAgICB0Zm9vdChcbiAgICAgIHYtaWY9XCJtdWx0aXBsZSB8fCBpc1VwbG9hZEFjdGl2ZSB8fCAhaGFzRmlsZXNcIlxuICAgIClcbiAgICAgIHRyXG4gICAgICAgIHRkKDpjb2xzcGFuPVwiNFwiKVxuICAgICAgICAgIC5kaXRvLXVwbG9hZC1mb290ZXJcbiAgICAgICAgICAgIHByb2dyZXNzLmRpdG8tcHJvZ3Jlc3MoXG4gICAgICAgICAgICAgIHYtaWY9XCJpc1VwbG9hZEFjdGl2ZVwiXG4gICAgICAgICAgICAgIDp2YWx1ZT1cInVwbG9hZFByb2dyZXNzXCJcbiAgICAgICAgICAgICAgbWF4PVwiMTAwXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICB2LWlmPVwiaXNVcGxvYWRBY3RpdmVcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIEBjbGljay5wcmV2ZW50PVwidXBsb2FkLmFjdGl2ZSA9IGZhbHNlXCJcbiAgICAgICAgICAgICAgKSBDYW5jZWxcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLXVwbG9hZChcbiAgICAgICAgICAgICAgICB2LWlmPVwibXVsdGlwbGUgfHwgIWhhc0ZpbGVzXCJcbiAgICAgICAgICAgICAgICA6dGl0bGU9XCJ1cGxvYWRUaXRsZVwiXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwib25DbGlja1VwbG9hZFwiXG4gICAgICAgICAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgU29ydGFibGVNaXhpbiBmcm9tICcuLi9taXhpbnMvU29ydGFibGVNaXhpbi5qcydcbmltcG9ydCBwYXJzZUZpbGVTaXplIGZyb20gJ2ZpbGVzaXplLXBhcnNlcidcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBmb3JtYXRGaWxlU2l6ZSB9IGZyb20gJy4uL3V0aWxzL3VuaXRzLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgaXNBcnJheSwgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgVnVlVXBsb2FkIGZyb20gJ3Z1ZS11cGxvYWQtY29tcG9uZW50J1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3VwbG9hZCcsIHtcbiAgbWl4aW5zOiBbU29ydGFibGVNaXhpbl0sXG4gIGNvbXBvbmVudHM6IHsgVnVlVXBsb2FkIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdXBsb2FkczogW11cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB1cGxvYWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmcy51cGxvYWRcbiAgICB9LFxuXG4gICAgdXBsb2FkVGl0bGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZSA/ICdVcGxvYWQgRmlsZXMnIDogJ1VwbG9hZCBGaWxlJ1xuICAgIH0sXG5cbiAgICBmaWxlcygpIHtcbiAgICAgIHJldHVybiBhc0ZpbGVzKHRoaXMudmFsdWUpXG4gICAgfSxcblxuICAgIGRvd25sb2FkVXJscygpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbGVzLm1hcCgoZmlsZSwgaW5kZXgpID0+IHRoaXMuZ2V0RG93bmxvYWRVcmwoZmlsZSwgaW5kZXgpKVxuICAgIH0sXG5cbiAgICB0aHVtYm5haWxVcmxzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsZXMubWFwKChmaWxlLCBpbmRleCkgPT4gdGhpcy5nZXRUaHVtYm5haWxVcmwoZmlsZSwgaW5kZXgpKVxuICAgIH0sXG5cbiAgICBtdWx0aXBsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ211bHRpcGxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgLy8gTm8gY2FsbGJhY2sgYXMgaXQncyB1c2VkIGluIGBwcm9jZXNzVmFsdWUoKWBcbiAgICAgIGNhbGxiYWNrOiBmYWxzZVxuICAgIH0pLFxuXG4gICAgZXh0ZW5zaW9uczogZ2V0U2NoZW1hQWNjZXNzb3IoJ2V4dGVuc2lvbnMnLCB7XG4gICAgICB0eXBlOiBbQXJyYXksIFN0cmluZywgUmVnRXhwXVxuICAgIH0pLFxuXG4gICAgYWNjZXB0OiBnZXRTY2hlbWFBY2Nlc3NvcignYWNjZXB0Jywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBnZXQoYWNjZXB0KSB7XG4gICAgICAgIHJldHVybiBpc0FycmF5KGFjY2VwdCkgPyBhY2NlcHQuam9pbignLCcpIDogYWNjZXB0XG4gICAgICB9XG4gICAgfSksXG5cbiAgICBtYXhTaXplOiBnZXRTY2hlbWFBY2Nlc3NvcignbWF4U2l6ZScsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgICBnZXQobWF4U2l6ZSkge1xuICAgICAgICByZXR1cm4gbWF4U2l6ZSA/IHBhcnNlRmlsZVNpemUobWF4U2l6ZSkgOiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRyYWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RyYWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkcmFnZ2FibGUpIHtcbiAgICAgICAgcmV0dXJuIGRyYWdnYWJsZSAmJiB0aGlzLmZpbGVzLmxlbmd0aCA+IDFcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRlbGV0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlbGV0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgcmVuZGVyOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVuZGVyJywge1xuICAgICAgdHlwZTogRnVuY3Rpb24sXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSksXG5cbiAgICB0aHVtYm5haWxzOiBnZXRTY2hlbWFBY2Nlc3NvcigndGh1bWJuYWlscycsIHtcbiAgICAgIHR5cGU6IFtCb29sZWFuLCBTdHJpbmddLFxuICAgICAgZGVmYXVsdCh0aHVtYm5haWxzKSB7XG4gICAgICAgIHJldHVybiB0aHVtYm5haWxzID8/ICEhdGhpcy5zY2hlbWEudGh1bWJuYWlsVXJsXG4gICAgICB9LFxuICAgICAgZ2V0KHRodW1ibmFpbHMpIHtcbiAgICAgICAgcmV0dXJuIHRodW1ibmFpbHMgPT09IHRydWUgPyAnbWVkaXVtJyA6IHRodW1ibmFpbHMgfHwgbnVsbFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgaGFzRmlsZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5maWxlcy5sZW5ndGggPiAwXG4gICAgfSxcblxuICAgIGhhc1VwbG9hZHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGxvYWRzLmxlbmd0aCA+IDBcbiAgICB9LFxuXG4gICAgaXNVcGxvYWRSZWFkeSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuaGFzVXBsb2FkcyAmJlxuICAgICAgICAhKHRoaXMudXBsb2FkLmFjdGl2ZSB8fCB0aGlzLnVwbG9hZC51cGxvYWRlZClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNVcGxvYWRBY3RpdmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNVcGxvYWRzICYmIHRoaXMudXBsb2FkLmFjdGl2ZVxuICAgIH0sXG5cbiAgICB1cGxvYWRQcm9ncmVzcygpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMudXBsb2Fkcy5yZWR1Y2UoKHRvdGFsLCBmaWxlKSA9PiB0b3RhbCArICtmaWxlLnByb2dyZXNzLCAwKSAvXG4gICAgICAgIHRoaXMudXBsb2Fkcy5sZW5ndGhcbiAgICAgIClcbiAgICB9LFxuXG4gICAgdXBsb2FkUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFJlc291cmNlVXJsKHtcbiAgICAgICAgdHlwZTogJ3VwbG9hZCcsXG4gICAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgICBwYXRoOiB0aGlzLmFwaS5ub3JtYWxpemVQYXRoKHRoaXMuZGF0YVBhdGgpXG4gICAgICB9KVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIGlzVXBsb2FkUmVhZHkocmVhZHkpIHtcbiAgICAgIGlmIChyZWFkeSkge1xuICAgICAgICAvLyBBdXRvLXVwbG9hZC5cbiAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgIHRoaXMudXBsb2FkLmFjdGl2ZSA9IHRydWVcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvcm1hdEZpbGVTaXplLFxuXG4gICAgZ2V0RmlsZUNvbnRleHQoZmlsZSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiB0aGlzLm11bHRpcGxlXG4gICAgICAgID8gbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgIHZhbHVlOiBmaWxlLFxuICAgICAgICAgICAgZGF0YTogdGhpcy5maWxlcyxcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgZGF0YVBhdGg6IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIGluZGV4KVxuICAgICAgICAgIH0pXG4gICAgICAgIDogdGhpcy5jb250ZXh0XG4gICAgfSxcblxuICAgIHJlbmRlckZpbGUoZmlsZSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlcih0aGlzLmdldEZpbGVDb250ZXh0KGZpbGUsIGluZGV4KSlcbiAgICB9LFxuXG4gICAgZ2V0RG93bmxvYWRVcmwoZmlsZSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiBmaWxlLnVybFxuICAgICAgICA/IGZpbGUudXJsXG4gICAgICAgIDogIWZpbGUudXBsb2FkIHx8IGZpbGUudXBsb2FkLnN1Y2Nlc3NcbiAgICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2Rvd25sb2FkVXJsJywge1xuICAgICAgICAgICAgICB0eXBlOiAnU3RyaW5nJyxcbiAgICAgICAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgICAgICAgY29udGV4dDogdGhpcy5nZXRGaWxlQ29udGV4dChmaWxlLCBpbmRleClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBudWxsXG4gICAgfSxcblxuICAgIGdldFRodW1ibmFpbFVybChmaWxlLCBpbmRleCkge1xuICAgICAgcmV0dXJuICFmaWxlLnVwbG9hZCB8fCBmaWxlLnVwbG9hZC5zdWNjZXNzXG4gICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgndGh1bWJuYWlsVXJsJywge1xuICAgICAgICAgICAgdHlwZTogJ1N0cmluZycsXG4gICAgICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgICAgICAgY29udGV4dDogdGhpcy5nZXRGaWxlQ29udGV4dChmaWxlLCBpbmRleClcbiAgICAgICAgICB9KSB8fCAoXG4gICAgICAgICAgICBmaWxlLnR5cGUuc3RhcnRzV2l0aCgnaW1hZ2UvJylcbiAgICAgICAgICAgICAgPyBmaWxlLnVybFxuICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICApXG4gICAgICAgIDogbnVsbFxuICAgIH0sXG5cbiAgICBkZWxldGVGaWxlKGZpbGUsIGluZGV4KSB7XG4gICAgICBjb25zdCB7IG5hbWUgfSA9IGZpbGVcblxuICAgICAgaWYgKFxuICAgICAgICBmaWxlICYmXG4gICAgICAgIHdpbmRvdy5jb25maXJtKFxuICAgICAgICAgIGBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gJHt0aGlzLnZlcmJzLnJlbW92ZX0gJHtuYW1lfT9gXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbGUudXBsb2FkKSB7XG4gICAgICAgICAgdGhpcy51cGxvYWQucmVtb3ZlKGZpbGUudXBsb2FkKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ2luZm8nLFxuICAgICAgICAgIHRpdGxlOiAnU3VjY2Vzc2Z1bGx5IFJlbW92ZWQnLFxuICAgICAgICAgIHRleHQ6IGAke25hbWV9IHdhcyAke3RoaXMudmVyYnMuZGVsZXRlZH0uYFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRGaWxlSW5kZXgoZmlsZSkge1xuICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGUgJiYgdGhpcy52YWx1ZVxuICAgICAgICA/IHRoaXMudmFsdWUuZmluZEluZGV4KGl0ID0+IGl0LmlkID09PSBmaWxlLmlkKVxuICAgICAgICA6IC0xXG4gICAgfSxcblxuICAgIGFkZEZpbGUoZmlsZSkge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlLnB1c2goZmlsZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gW2ZpbGVdXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBmaWxlXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlcGxhY2VGaWxlKGZpbGUsIG5ld0ZpbGUpIHtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRGaWxlSW5kZXgoZmlsZSlcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICBpZiAobmV3RmlsZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZVtpbmRleF0gPSBuZXdGaWxlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ld0ZpbGVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVtb3ZlRmlsZShmaWxlKSB7XG4gICAgICB0aGlzLnJlcGxhY2VGaWxlKGZpbGUsIG51bGwpXG4gICAgfSxcblxuICAgIG9uSW5wdXRGaWxlKG5ld0ZpbGUsIG9sZEZpbGUpIHtcbiAgICAgIGlmIChuZXdGaWxlICYmICFvbGRGaWxlKSB7XG4gICAgICAgIGNvbnN0IHsgaWQsIG5hbWUsIHNpemUgfSA9IG5ld0ZpbGVcbiAgICAgICAgdGhpcy5hZGRGaWxlKHsgaWQsIG5hbWUsIHNpemUsIHVwbG9hZDogbmV3RmlsZSB9KVxuICAgICAgfVxuICAgICAgaWYgKG5ld0ZpbGUgJiYgb2xkRmlsZSkge1xuICAgICAgICBjb25zdCB7IHN1Y2Nlc3MsIGVycm9yIH0gPSBuZXdGaWxlXG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICAgICAgY29uc3QgZmlsZSA9IG5ld0ZpbGUucmVzcG9uc2VbMF1cbiAgICAgICAgICBpZiAoZmlsZSkge1xuICAgICAgICAgICAgZmlsZS51cGxvYWQgPSBuZXdGaWxlXG4gICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSB1cGxvYWQgZmlsZSBvYmplY3Qgd2l0aCB0aGUgZmlsZSBvYmplY3QgcmVjZWl2ZWRcbiAgICAgICAgICAgIC8vIGZyb20gdGhlIHVwbG9hZCByZXNwb25zZS5cbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUZpbGUobmV3RmlsZSwgZmlsZSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVGaWxlKG5ld0ZpbGUpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGVycm9yKSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVGaWxlKG5ld0ZpbGUpXG4gICAgICAgICAgY29uc3QgdGV4dCA9IChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWJvcnQ6ICdVcGxvYWQgYWJvcnRlZCcsXG4gICAgICAgICAgICAgIGRlbmllZDogJ1VwbG9hZCBkZW5pZWQnLFxuICAgICAgICAgICAgICBleHRlbnNpb246IGBVbnN1cHBvcnRlZCBmaWxlLXR5cGU6ICR7bmV3RmlsZS5uYW1lfWAsXG4gICAgICAgICAgICAgIG5ldHdvcms6ICdOZXR3b3JrIGVycm9yIGVuY291bnRlcmVkIGR1cmluZyB1cGxvYWQnLFxuICAgICAgICAgICAgICBzZXJ2ZXI6ICdTZXJ2ZXIgZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHVwbG9hZCcsXG4gICAgICAgICAgICAgIHNpemU6IGBGaWxlIGlzIHRvbyBsYXJnZTogJHtmb3JtYXRGaWxlU2l6ZShuZXdGaWxlLnNpemUpfWAsXG4gICAgICAgICAgICAgIHRpbWVvdXQ6ICdUaW1lb3V0IG9jY3VycmVkIGR1cmluZyB1cGxvYWQnXG4gICAgICAgICAgICB9W2Vycm9yXSB8fFxuICAgICAgICAgICAgYFVua25vd24gRmlsZSBVcGxvYWQgRXJyb3I6ICcke2Vycm9yfSdgXG4gICAgICAgICAgKVxuICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgIHRpdGxlOiAnRmlsZSBVcGxvYWQgRXJyb3InLFxuICAgICAgICAgICAgdGV4dFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25JbnB1dEZpbHRlcihuZXdGaWxlIC8qLCBvbGRGaWxlLCBwcmV2ZW50ICovKSB7XG4gICAgICBjb25zdCB4aHIgPSBuZXdGaWxlPy54aHJcbiAgICAgIGlmICh0aGlzLmFwaS5jb3JzPy5jcmVkZW50aWFscyAmJiB4aHIgJiYgIXhoci53aXRoQ3JlZGVudGlhbHMpIHtcbiAgICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgb25DbGlja0Rvd25sb2FkKGZpbGUsIGluZGV4KSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHRoaXMuZG93bmxvYWRVcmxzW2luZGV4XSlcbiAgICAgICAgY29uc3QgYmxvYiA9IGF3YWl0IHJlc3BvbnNlLmJsb2IoKVxuICAgICAgICB0aGlzLmRvd25sb2FkKHtcbiAgICAgICAgICBmaWxlbmFtZTogZmlsZS5uYW1lLFxuICAgICAgICAgIHVybDogVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKVxuICAgICAgICB9KVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25DbGlja1VwbG9hZChldmVudCkge1xuICAgICAgLy8gRGVsZWdhdGUgdGhlIGNsaWNrIGV2ZW50IHRvIHRoZSBoaWRkZW4gZmlsZSBpbnB1dC5cbiAgICAgIHRoaXMudXBsb2FkLiRlbC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgIG5ldyBldmVudC5jb25zdHJ1Y3RvcihldmVudC50eXBlLCBldmVudClcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHsgc2NoZW1hLCB2YWx1ZSB9KSB7XG4gICAgLy8gRmlsdGVyIG91dCBhbGwgbmV3bHkgYWRkZWQgZmlsZXMgdGhhdCB3ZXJlbid0IGFjdHVhbGx5IHVwbG9hZGVkLlxuICAgIGNvbnN0IGZpbGVzID0gYXNGaWxlcyh2YWx1ZSlcbiAgICAgIC5tYXAoKHsgdXBsb2FkLCAuLi5maWxlIH0pID0+ICghdXBsb2FkIHx8IHVwbG9hZC5zdWNjZXNzID8gZmlsZSA6IG51bGwpKVxuICAgICAgLmZpbHRlcihmaWxlID0+IGZpbGUpXG4gICAgcmV0dXJuIHNjaGVtYS5tdWx0aXBsZSA/IGZpbGVzIDogZmlsZXNbMF0gfHwgbnVsbFxuICB9XG59KVxuXG5mdW5jdGlvbiBhc0ZpbGVzKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA/IGFzQXJyYXkodmFsdWUpIDogW11cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXVwbG9hZCB7XG4gIC5kaXRvLXRhYmxlIHtcbiAgICB0cixcbiAgICAuZGl0by1jZWxsLWVkaXQtYnV0dG9ucyB7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIH1cbiAgfVxuXG4gICZfX3NpemUsXG4gICZfX3N0YXR1cyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgfVxuXG4gICYgJl9faW5wdXQge1xuICAgIC8vIFNlZSBgb25DbGlja1VwbG9hZCgpYCBtZXRob2QgZm9yIGRldGFpbHMuXG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIH1cblxuICAmX19mb290ZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuXG4gICAgLmRpdG8tcHJvZ3Jlc3Mge1xuICAgICAgZmxleDogYXV0bztcbiAgICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZztcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBtb3VudGVkKG5vZGUsIGJpbmRpbmcpIHtcbiAgICBvYnNlcnZlUmVzaXplKG5vZGUsIGJpbmRpbmcudmFsdWUsIGJpbmRpbmcuYXJnKVxuICB9LFxuXG4gIHVubW91bnRlZChub2RlLCBiaW5kaW5nKSB7XG4gICAgdW5vYnNlcnZlUmVzaXplKG5vZGUsIGJpbmRpbmcudmFsdWUsIGJpbmRpbmcuYXJnKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvYnNlcnZlUmVzaXplKG5vZGUsIGhhbmRsZXIsIG9wdGlvbnMpIHtcbiAgT2JzZXJ2ZXIuZ2V0T2JzZXJ2ZXIob3B0aW9ucykub2JzZXJ2ZShub2RlLCBoYW5kbGVyKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5vYnNlcnZlUmVzaXplKG5vZGUsIGhhbmRsZXIsIG9wdGlvbnMpIHtcbiAgT2JzZXJ2ZXIuZ2V0T2JzZXJ2ZXIob3B0aW9ucykudW5vYnNlcnZlKG5vZGUsIGhhbmRsZXIpXG59XG5cbmV4cG9ydCBjb25zdCBpc1Jlc2l6ZVN1cHBvcnRlZCA9IHR5cGVvZiBSZXNpemVPYnNlcnZlciAhPT0gJ3VuZGVmaW5lZCdcblxuY29uc3Qgb2JzZXJ2ZXJzID0ge31cblxuY2xhc3MgT2JzZXJ2ZXIge1xuICBjb25zdHJ1Y3RvcihrZXksIG9wdGlvbnMpIHtcbiAgICB0aGlzLmtleSA9IGtleVxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNcbiAgICB0aGlzLm9ic2VydmVyID0gaXNSZXNpemVTdXBwb3J0ZWRcbiAgICAgID8gbmV3IFJlc2l6ZU9ic2VydmVyKGVudHJpZXMgPT4gdGhpcy5oYW5kbGUoZW50cmllcykpXG4gICAgICA6IG51bGxcbiAgICB0aGlzLmhhbmRsZXJzQnlOb2RlID0gbmV3IFdlYWtNYXAoKVxuICAgIHRoaXMubm9kZUNvdW50ID0gMFxuICB9XG5cbiAgb2JzZXJ2ZShub2RlLCBoYW5kbGVyKSB7XG4gICAgbGV0IGhhbmRsZXJzID0gdGhpcy5oYW5kbGVyc0J5Tm9kZS5nZXQobm9kZSlcbiAgICBpZiAoIWhhbmRsZXJzKSB7XG4gICAgICBoYW5kbGVycyA9IG5ldyBTZXQoKVxuICAgICAgdGhpcy5oYW5kbGVyc0J5Tm9kZS5zZXQobm9kZSwgaGFuZGxlcnMpXG4gICAgICB0aGlzLm9ic2VydmVyPy5vYnNlcnZlKG5vZGUsIHRoaXMub3B0aW9ucylcbiAgICAgIHRoaXMubm9kZUNvdW50KytcbiAgICB9XG4gICAgaGFuZGxlcnMuYWRkKGhhbmRsZXIpXG4gIH1cblxuICB1bm9ic2VydmUobm9kZSwgaGFuZGxlcikge1xuICAgIGNvbnN0IGhhbmRsZXJzID0gdGhpcy5oYW5kbGVyc0J5Tm9kZS5nZXQobm9kZSlcbiAgICBpZiAoaGFuZGxlcnM/LmRlbGV0ZShoYW5kbGVyKSAmJiBoYW5kbGVycy5zaXplID09PSAwKSB7XG4gICAgICB0aGlzLmhhbmRsZXJzQnlOb2RlLmRlbGV0ZShub2RlKVxuICAgICAgdGhpcy5vYnNlcnZlcj8udW5vYnNlcnZlKG5vZGUpXG4gICAgICBpZiAoLS10aGlzLm5vZGVDb3VudCA9PT0gMCkge1xuICAgICAgICBkZWxldGUgb2JzZXJ2ZXJzW3RoaXMua2V5XVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZShlbnRyaWVzKSB7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnNCeU5vZGUuZ2V0KGVudHJ5LnRhcmdldClcbiAgICAgIGlmIChoYW5kbGVycykge1xuICAgICAgICBjb25zdCBldmVudCA9IHtcbiAgICAgICAgICB0YXJnZXQ6IGVudHJ5LnRhcmdldCxcbiAgICAgICAgICBjb250ZW50UmVjdDogZW50cnkuY29udGVudFJlY3QsXG4gICAgICAgICAgLy8gVXNlIGBhc0FycmF5YCBzaW5jZSBGaXJlZm94IGJlZm9yZSB2OTIgcmV0dXJucyB0aGVzZSBhcyBvYmplY3RzOlxuICAgICAgICAgIGJvcmRlckJveFNpemU6IGFzQXJyYXkoZW50cnkuYm9yZGVyQm94U2l6ZSksXG4gICAgICAgICAgY29udGVudEJveFNpemU6IGFzQXJyYXkoZW50cnkuY29udGVudEJveFNpemUpLFxuICAgICAgICAgIGRldmljZVBpeGVsQ29udGVudEJveFNpemU6IGFzQXJyYXkoZW50cnkuZGV2aWNlUGl4ZWxDb250ZW50Qm94U2l6ZSlcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgaGFuZGxlcnMpIHtcbiAgICAgICAgICBoYW5kbGVyKGV2ZW50KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldE9ic2VydmVyKHsgYm94ID0gJ2NvbnRlbnQtYm94JyB9ID0ge30pIHtcbiAgICBjb25zdCBvcHRpb25zID0geyBib3ggfVxuICAgIGNvbnN0IGtleSA9IEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpXG4gICAgb2JzZXJ2ZXJzW2tleV0gfHw9IG5ldyBPYnNlcnZlcihrZXksIG9wdGlvbnMpXG4gICAgcmV0dXJuIG9ic2VydmVyc1trZXldXG4gIH1cbn1cbiIsImV4cG9ydCBkZWZhdWx0IFtcbiAgJ2NyZWF0ZScsICdjcmVhdGVkJyxcbiAgJ3NhdmUnLCAnc2F2ZWQnLFxuICAnYXBwbHknLCAnYXBwbGllZCcsXG4gICdzdWJtaXQnLCAnc3VibWl0dGVkJyxcbiAgJ2RlbGV0ZScsICdkZWxldGVkJyxcbiAgJ3JlbW92ZScsICdyZW1vdmVkJyxcbiAgJ2NsZWFyJywgJ2NsZWFyZWQnLFxuICAnZWRpdCcsICdlZGl0ZWQnLFxuICAnY2xvc2UnLCAnY2xvc2VkJyxcbiAgJ2NhbmNlbCcsICdjYW5jZWxsZWQnLFxuICAnZHJhZycsICdkcmFnZ2VkJyxcbiAgJ2xvZ2luJywgJ2xvZ2dlZCBpbidcbl0ucmVkdWNlKCh2ZXJicywgdmVyYikgPT4ge1xuICB2ZXJic1t2ZXJiXSA9IHZlcmJcbiAgcmV0dXJuIHZlcmJzXG59LCB7fSlcbiIsImltcG9ydCB7IGNyZWF0ZUFwcCwgaCBhcyBjcmVhdGVFbGVtZW50IH0gZnJvbSAndnVlJ1xuaW1wb3J0IHsgY3JlYXRlUm91dGVyLCBjcmVhdGVXZWJIaXN0b3J5IH0gZnJvbSAndnVlLXJvdXRlcidcbmltcG9ydCBWdWVOb3RpZmljYXRpb25zIGZyb20gJ0BreXZnL3Z1ZTMtbm90aWZpY2F0aW9uJ1xuaW1wb3J0IHtcbiAgaXNTdHJpbmcsXG4gIGlzQWJzb2x1dGVVcmwsXG4gIGFzc2lnbkRlZXBseSxcbiAgaHlwaGVuYXRlLFxuICBjYW1lbGl6ZSxcbiAgZGVmYXVsdEZvcm1hdHNcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCAqIGFzIGNvbXBvbmVudHMgZnJvbSAnLi9jb21wb25lbnRzL2luZGV4LmpzJ1xuaW1wb3J0ICogYXMgdHlwZXMgZnJvbSAnLi90eXBlcy9pbmRleC5qcydcbmltcG9ydCBEaXRvUm9vdCBmcm9tICcuL2NvbXBvbmVudHMvRGl0b1Jvb3QudnVlJ1xuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgUmVzaXplRGlyZWN0aXZlIGZyb20gJy4vZGlyZWN0aXZlcy9yZXNpemUuanMnXG5pbXBvcnQgeyBnZXRSZXNvdXJjZSB9IGZyb20gJy4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBmb3JtYXRRdWVyeSB9IGZyb20gJy4vdXRpbHMvcm91dGUuanMnXG5pbXBvcnQgdmVyYnMgZnJvbSAnLi92ZXJicy5qcydcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b0FkbWluIHtcbiAgY29uc3RydWN0b3IoZWwsIHtcbiAgICAvLyBgZGl0b2AgY29udGFpbnMgdGhlIGJhc2UgYW5kIGFwaSBzZXR0aW5ncyBwYXNzZWQgZnJvbSBgQWRtaW5Db250cm9sbGVyYFxuICAgIGRpdG8gPSB7fSxcbiAgICBhcGksXG4gICAgdmlld3MgPSB7fSxcbiAgICAuLi5vcHRpb25zXG4gIH0gPSB7fSkge1xuICAgIHRoaXMuZWwgPSBlbFxuICAgIC8vIE1lcmdlIGluIGBhcGlgIHNldHRpbmdzIGFzIHBhc3NlZCBmcm9tIGBjb25maWcuYWRtaW5gIGFuZCB0aHJvdWdoIHRoZVxuICAgIC8vIGBBZG1pbkNvbnRyb2xsZXJgIHdpdGggYGFwaWAgdmFsdWVzIGZyb20gZnJvbSAnYWRtaW4vaW5kZXguanMnXG4gICAgLy8gTk9URTogYEFkbWluQ29udHJvbGxlcmAgcHJvdmlkZXMgYGRpdG8uYXBpLmJhc2VgXG4gICAgdGhpcy5hcGkgPSBhcGkgPSBhc3NpZ25EZWVwbHkoeyBiYXNlOiAnLycgfSwgZGl0by5hcGksIGFwaSlcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zXG5cbiAgICAvLyBTZXR1cCBkZWZhdWx0IGFwaSBzZXR0aW5nczpcbiAgICBhcGkubG9jYWxlIHx8PSAnZW4tVVMnXG4gICAgYXBpLmZvcm1hdHMgPSBhc3NpZ25EZWVwbHkoe30sIGRlZmF1bHRGb3JtYXRzLCBhcGkuZm9ybWF0cylcbiAgICBhcGkucmVxdWVzdCB8fD0gb3B0aW9ucyA9PiByZXF1ZXN0KGFwaSwgb3B0aW9ucylcbiAgICBhcGkuZ2V0QXBpVXJsIHx8PSBvcHRpb25zID0+IGdldEFwaVVybChhcGksIG9wdGlvbnMpXG4gICAgYXBpLmlzQXBpVXJsIHx8PSB1cmwgPT4gaXNBcGlVcmwoYXBpLCB1cmwpXG4gICAgLy8gU2V0dGluZyBgYXBpLm5vcm1hbGl6ZVBhdGhzID0gdHJ1ZSAocGx1cmFsKSBzZXRzIGJvdGg6XG4gICAgLy8gYGFwaS5ub3JtYWxpemVQYXRoID0gaHlwaGVuYXRlYCBhbmQgYGFwaS5kZW5vcm1hbGl6ZVBhdGggPSBjYW1lbGl6ZWBcbiAgICBhcGkubm9ybWFsaXplUGF0aCB8fD0gYXBpLm5vcm1hbGl6ZVBhdGhzID8gaHlwaGVuYXRlIDogdmFsID0+IHZhbFxuICAgIGFwaS5kZW5vcm1hbGl6ZVBhdGggfHw9IGFwaS5ub3JtYWxpemVQYXRocyA/IGNhbWVsaXplIDogdmFsID0+IHZhbFxuXG4gICAgLy8gQWxsb3cgZGVmaW5pdGlvbiBvZiBkZWZhdWx0cyBmb3IgYWRtaW4gY29tcG9uZW50IHR5cGVzLCBuZXN0ZWQgcGVyIHR5cGU6XG4gICAgLy8gYXBpLmRlZmF1bHRzID0ge1xuICAgIC8vICAgJ211bHRpc2VsZWN0Jzoge1xuICAgIC8vICAgICBzZWxlY3RhYmxlOiB0cnVlXG4gICAgLy8gICB9LFxuICAgIC8vICAgJ2Zha2UtdHlwZSc6IHNjaGVtYSA9PiB7XG4gICAgLy8gICAgIC8vIFJldHVybiBkZWZhdWx0cywgb3IgZGlyZWN0bHkgbW9kaWZ5IHRoZSBzY2hlbWE6XG4gICAgLy8gICAgIE9iamVjdC5hc3NpZ24oc2NoZW1hLCB7XG4gICAgLy8gICAgICAgdHlwZTogJ3JlYWwtdHlwZScsXG4gICAgLy8gICAgICAgZm9ybWF0OiAoeyB2YWx1ZSB9KSA9PiBgRm9ybWF0dGVkICR7dmFsdWV9YCxcbiAgICAvLyAgICAgICBwcm9jZXNzOiAoeyB2YWx1ZSB9KSA9PiBgUHJvY2Vzc2VkICR7dmFsdWV9YFxuICAgIC8vICAgICB9KVxuICAgIC8vICAgfVxuICAgIC8vIH1cblxuICAgIGFwaS5kZWZhdWx0cyB8fD0ge31cblxuICAgIC8vIEFsbG93IHRoZSBjb25maWd1cmF0aW9uIG9mIGFsbCBhdXRoIHJlc291cmNlcywgbGlrZSBzbzpcbiAgICAvLyBhcGkudXNlcnMgPSB7XG4gICAgLy8gICBwYXRoOiAnL2FkbWlucycsXG4gICAgLy8gICAvLyBUaGVzZSBhcmUgdGhlIGRlZmF1bHRzOlxuICAgIC8vICAgbG9naW46IHtcbiAgICAvLyAgICAgcGF0aDogJ2xvZ2luJyxcbiAgICAvLyAgICAgbWV0aG9kOiAncG9zdCdcbiAgICAvLyAgIH0sXG4gICAgLy8gICBsb2dvdXQ6IHtcbiAgICAvLyAgICAgcGF0aDogJ2xvZ291dCcsXG4gICAgLy8gICAgIG1ldGhvZDogJ3Bvc3QnXG4gICAgLy8gICB9LFxuICAgIC8vICAgc2Vzc2lvbjoge1xuICAgIC8vICAgICBwYXRoOiAnc2Vzc2lvbicsXG4gICAgLy8gICAgIG1ldGhvZDogJ2dldCdcbiAgICAvLyAgIH1cbiAgICAvLyB9XG4gICAgY29uc3QgdXNlcnMgPSBnZXRSZXNvdXJjZShhcGkudXNlcnMsIHtcbiAgICAgIHR5cGU6ICdjb2xsZWN0aW9uJ1xuICAgIH0pIHx8IHt9XG4gICAgdXNlcnMubG9naW4gPSBnZXRSZXNvdXJjZSh1c2Vycy5sb2dpbiB8fCAnbG9naW4nLCB7XG4gICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICAgIHBhcmVudDogdXNlcnNcbiAgICB9KVxuICAgIHVzZXJzLmxvZ291dCA9IGdldFJlc291cmNlKHVzZXJzLmxvZ291dCB8fCAnbG9nb3V0Jywge1xuICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgICBwYXJlbnQ6IHVzZXJzXG4gICAgfSlcbiAgICB1c2Vycy5zZXNzaW9uID0gZ2V0UmVzb3VyY2UodXNlcnMuc2Vzc2lvbiB8fCAnc2Vzc2lvbicsIHtcbiAgICAgIG1ldGhvZDogJ2dldCcsXG4gICAgICBwYXJlbnQ6IHVzZXJzXG4gICAgfSlcbiAgICBhcGkudXNlcnMgPSB1c2Vyc1xuXG4gICAgLy8gQWxsb3cgb3ZlcnJpZGluZyBvZiByZXNvdXJjZSBwYXRoIGhhbmRsZXJzOlxuICAgIC8vIGFwaS5yZXNvdXJjZXMgPSB7XG4gICAgLy8gICBjb2xsZWN0aW9uKHJlc291cmNlKSB7XG4gICAgLy8gICAgIHJldHVybiByZXNvdXJjZS5wYXJlbnRcbiAgICAvLyAgICAgICA/IGAke3Jlc291cmNlLnBhdGh9PyR7cmVzb3VyY2UucGFyZW50LnBhdGh9X2lkPSR7XG4gICAgLy8gICAgICAgICAgcmVzb3VyY2UucGFyZW50LmlkfWBcbiAgICAvLyAgICAgICA6IHJlc291cmNlLnBhdGhcbiAgICAvLyAgIH1cbiAgICAvLyB9XG5cbiAgICBhcGkucmVzb3VyY2VzID0ge1xuICAgICAgYW55KHJlc291cmNlKSB7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzW3Jlc291cmNlPy50eXBlXSB8fCB0aGlzLmRlZmF1bHRcbiAgICAgICAgcmV0dXJuIHJlc291cmNlICYmIGhhbmRsZXIuY2FsbCh0aGlzLCByZXNvdXJjZSlcbiAgICAgIH0sXG5cbiAgICAgIGRlZmF1bHQocmVzb3VyY2UpIHtcbiAgICAgICAgY29uc3QgcGFyZW50UGF0aCA9IHRoaXMuYW55KHJlc291cmNlLnBhcmVudClcbiAgICAgICAgcmV0dXJuIHBhcmVudFBhdGhcbiAgICAgICAgICA/IGAke3BhcmVudFBhdGh9LyR7cmVzb3VyY2UucGF0aH1gXG4gICAgICAgICAgOiByZXNvdXJjZS5wYXRoXG4gICAgICB9LFxuXG4gICAgICBjb2xsZWN0aW9uKHJlc291cmNlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHQocmVzb3VyY2UpXG4gICAgICB9LFxuXG4gICAgICBtZW1iZXIocmVzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuZGVmYXVsdChyZXNvdXJjZSl9LyR7cmVzb3VyY2UuaWR9YFxuICAgICAgfSxcblxuICAgICAgdXBsb2FkKHJlc291cmNlKSB7XG4gICAgICAgIC8vIERpdG8uanMgU2VydmVyIGhhbmRsZXMgdXBsb2FkIHJvdXRlcyBvbiB0aGUgY29sbGVjdGlvbiByZXNvdXJjZTpcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29sbGVjdGlvbihyZXNvdXJjZS5wYXJlbnQpfS91cGxvYWQvJHtyZXNvdXJjZS5wYXRofWBcbiAgICAgIH0sXG5cbiAgICAgIC4uLmFwaS5yZXNvdXJjZXNcbiAgICB9XG5cbiAgICAvLyBBbGxvdyBvdmVycmlkaW5nIC8gZXh0ZW5kaW5nIG9mIGhlYWRlcnM6XG4gICAgLy8gYXBpLmhlYWRlcnMgPSB7XG4gICAgLy8gICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgLy8gfVxuICAgIGFwaS5oZWFkZXJzID0ge1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIC4uLmFwaS5oZWFkZXJzXG4gICAgfVxuXG4gICAgaWYgKGlzU3RyaW5nKGVsKSkge1xuICAgICAgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGVsKVxuICAgIH1cblxuICAgIGNvbnN0IGFwcCA9ICh0aGlzLmFwcCA9IGNyZWF0ZUFwcCh7XG4gICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIERpdG9Sb290LFxuICAgICAgICBWdWVOb3RpZmljYXRpb25zLFxuICAgICAgICAvLyBUaGlzIG1heSBvbmx5IGJlIG5lZWRlZCB0byBhdm9pZCB0cmVlLXNoYWNraW5nIG9mIHRoZXNlIGNvbXBvbmVudHMsXG4gICAgICAgIC8vIHNpbmNlIHRoZXkgYWN0dWFsbHkgaGFuZGxlIHJlZ2lzdHJ5IGludGVybmFsbHkgYWxyZWFkeS5cbiAgICAgICAgLy8gVE9ETzogUmVtb3ZlIHRoaXMgb25jZSB3ZSBoYXZlIGEgYmV0dGVyIHNvbHV0aW9uLlxuICAgICAgICAuLi5jb21wb25lbnRzLFxuICAgICAgICAuLi50eXBlc1xuICAgICAgfSxcblxuICAgICAgLy8gTW9zdCBpbmplY3RzIGFyZSBkZWZpbmVkIGFzIGZ1bmN0aW9ucywgdG8gcHJlc2VydmUgcmVhY3RpdmVuZXNzIGFjcm9zc1xuICAgICAgLy8gcHJvdmlkZS9pbmplY3QsIHNlZTpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUvaXNzdWVzLzcwMTcjaXNzdWVjb21tZW50LTQ4MDkwNjY5MVxuICAgICAgcHJvdmlkZToge1xuICAgICAgICBhcGksXG4gICAgICAgIC8vIEEgZGVmYXVsdCBsaXN0IG9mIHZlcmJzIGFyZSBwcm92aWRlZCBieSAkdmVyYnMoKSBhbmQgY2FuIGJlXG4gICAgICAgIC8vIG92ZXJyaWRkZW4gYXQgYW55IHBvaW50IGluIHRoZSBjb21wb25lbnQgaGllcmFyY2h5LlxuICAgICAgICAkdmVyYnM6ICgpID0+IHZlcmJzLFxuICAgICAgICAvLyBQcm92aWRlIGRlZmF1bHRzIHNvIERpdG9NaXhpbiBjYW4gaW5qZWN0IHRoZW0gZm9yIGFsbCBjb21wb25lbnRzOlxuICAgICAgICAvLyAgIGluamVjdDogWyAgJyRpc1BvcHVsYXRlZCcsICckc2NoZW1hQ29tcG9uZW50JywgJyRyb3V0ZUNvbXBvbmVudCcgXVxuICAgICAgICAkdmlld3M6ICgpID0+IHt9LFxuICAgICAgICAkaXNQb3B1bGF0ZWQ6ICgpID0+IHRydWUsXG4gICAgICAgICRwYXJlbnRDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRzY2hlbWFDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRzY2hlbWFQYXJlbnRDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRyb3V0ZUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJGRhdGFDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRzb3VyY2VDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRyZXNvdXJjZUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJGRpYWxvZ0NvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHBhbmVsQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiBudWxsXG4gICAgICB9LFxuXG4gICAgICByZW5kZXI6ICgpID0+XG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoRGl0b1Jvb3QsIHtcbiAgICAgICAgICByZWY6ICdyb290JyxcbiAgICAgICAgICBjbGFzczogZGl0by5zZXR0aW5ncy5yb290Q2xhc3MsXG4gICAgICAgICAgdW5yZXNvbHZlZFZpZXdzOiB2aWV3cyxcbiAgICAgICAgICBvcHRpb25zXG4gICAgICAgIH0pXG4gICAgfSkpXG5cbiAgICAvLyBQcmV2ZW50IGVuZGxlc3MgbG9vcHMgb2YgZXJyb3IgbWVzc2FnZXMgZHVyaW5nIHJlbmRlciBmdW5jdGlvbnMgYnlcbiAgICAvLyBzZXR0aW5nIGEgY3VzdG9tIGVycm9yIGhhbmRsZXIuXG4gICAgYXBwLmNvbmZpZy5lcnJvckhhbmRsZXIgPSBjb25zb2xlLmVycm9yXG5cbiAgICBhcHAudXNlKFZ1ZU5vdGlmaWNhdGlvbnMsIHtcbiAgICAgIGNvbXBvbmVudE5hbWU6ICdWdWVOb3RpZmljYXRpb25zJyxcbiAgICAgIG5hbWU6ICdub3RpZnknXG4gICAgfSlcblxuICAgIGFwcC5kaXJlY3RpdmUoJ3Jlc2l6ZScsIFJlc2l6ZURpcmVjdGl2ZSlcblxuICAgIGFwcC51c2UoXG4gICAgICBjcmVhdGVSb3V0ZXIoe1xuICAgICAgICAvLyBTdGFydCB3aXRoIGEgY2F0Y2gtYWxsIHJvdXRlLCB0byBiZSByZXBsYWNlZCBieSB0aGUgYWN0dWFsIHJvdXRlc1xuICAgICAgICAvLyBvbmNlIHRoZSBzY2hlbWFzIGFyZSBsb2FkZWQsIHRvIHByZXZlbnQgdnVlLXJvdXRlciBmcm9tIGNvbXBsYWluaW5nLFxuICAgICAgICAvLyBzZWU6IGByZXNvbHZlVmlld3MoKWAgaW4gYERpdG9Sb290YCBmb3IgdGhlIGFjdHVhbCByb3V0ZSBzZXR1cC5cbiAgICAgICAgcm91dGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ2NhdGNoLWFsbCcsXG4gICAgICAgICAgICBwYXRoOiAnLzpfKC4qKScsXG4gICAgICAgICAgICBjb21wb25lbnRzOiB7fVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgaGlzdG9yeTogY3JlYXRlV2ViSGlzdG9yeShkaXRvLmJhc2UpLFxuICAgICAgICBsaW5rQWN0aXZlQ2xhc3M6ICcnLFxuICAgICAgICBsaW5rRXhhY3RBY3RpdmVDbGFzczogJydcbiAgICAgIH0pXG4gICAgKVxuXG4gICAgZWwuY2xhc3NMaXN0LmFkZCgnZGl0by1hcHAnKVxuICAgIGFwcC5tb3VudChlbClcbiAgfVxuXG4gIHJlZ2lzdGVyKHR5cGUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIodHlwZSwgb3B0aW9ucylcbiAgfVxufVxuXG5jbGFzcyBSZXF1ZXN0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHJlc3BvbnNlKSB7XG4gICAgc3VwZXIoXG4gICAgICBgUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZTogJHtyZXNwb25zZS5zdGF0dXN9ICgke1xuICAgICAgICByZXNwb25zZS5zdGF0dXNUZXh0XG4gICAgICB9KWBcbiAgICApXG4gICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVxdWVzdChhcGksIHtcbiAgdXJsLFxuICBtZXRob2QgPSAnZ2V0JyxcbiAgcXVlcnkgPSBudWxsLFxuICBoZWFkZXJzID0gbnVsbCxcbiAgZGF0YSA9IG51bGwsXG4gIHNpZ25hbCA9IG51bGxcbn0pIHtcbiAgY29uc3QgaXNBcGlVcmwgPSBhcGkuaXNBcGlVcmwodXJsKVxuXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYXBpLmdldEFwaVVybCh7IHVybCwgcXVlcnkgfSksIHtcbiAgICBtZXRob2Q6IG1ldGhvZC50b1VwcGVyQ2FzZSgpLFxuICAgIC4uLihkYXRhICYmIHsgYm9keTogSlNPTi5zdHJpbmdpZnkoZGF0YSkgfSksXG4gICAgaGVhZGVyczoge1xuICAgICAgLi4uKGlzQXBpVXJsICYmIGFwaS5oZWFkZXJzKSxcbiAgICAgIC4uLmhlYWRlcnNcbiAgICB9LFxuICAgIGNyZWRlbnRpYWxzOlxuICAgICAgaXNBcGlVcmwgJiYgYXBpLmNvcnM/LmNyZWRlbnRpYWxzXG4gICAgICAgID8gJ2luY2x1ZGUnXG4gICAgICAgIDogJ3NhbWUtb3JpZ2luJyxcbiAgICBzaWduYWxcbiAgfSlcblxuICBpZiAocmVzcG9uc2UuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpPy5pbmNsdWRlcygnYXBwbGljYXRpb24vanNvbicpKSB7XG4gICAgcmVzcG9uc2UuZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKVxuICB9XG5cbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHRocm93IG5ldyBSZXF1ZXN0RXJyb3IocmVzcG9uc2UpXG4gIH1cbiAgcmV0dXJuIHJlc3BvbnNlXG59XG5cbmZ1bmN0aW9uIGlzQXBpVXJsKGFwaSwgdXJsKSB7XG4gIHJldHVybiAhaXNBYnNvbHV0ZVVybCh1cmwpIHx8IHVybC5zdGFydHNXaXRoKGFwaS51cmwpXG59XG5cbmZ1bmN0aW9uIGdldEFwaVVybChhcGksIHsgdXJsLCBxdWVyeSB9KSB7XG4gIGlmICghdXJsLnN0YXJ0c1dpdGgoYXBpLnVybCkgJiYgIWlzQWJzb2x1dGVVcmwodXJsKSkge1xuICAgIHVybCA9IGNvbWJpbmVVcmxzKGFwaS51cmwsIHVybClcbiAgfVxuICAvLyBTdXBwb3J0IG9wdGlvbmFsIHF1ZXJ5IHBhcmFtZXRlcnMsIHRvIGJlIGFyZSBhZGRlZCB0byB0aGUgVVJMLlxuICBjb25zdCBzZWFyY2ggPSBmb3JtYXRRdWVyeShxdWVyeSlcbiAgcmV0dXJuIHNlYXJjaCA/IGAke3VybH0ke3VybC5pbmNsdWRlcygnPycpID8gJyYnIDogJz8nfSR7c2VhcmNofWAgOiB1cmxcbn1cblxuZnVuY3Rpb24gY29tYmluZVVybHMoYmFzZVVybCwgcmVsYXRpdmVVcmwpIHtcbiAgLy8gVXNlIHNhbWUgYXBwcm9hY2ggYXMgYXhpb3MgYGNvbWJpbmVVUkxzKClgIHRvIGpvaW4gYmFzZVVybCAmIHJlbGF0aXZlVXJsOlxuICByZXR1cm4gYCR7YmFzZVVybC5yZXBsYWNlKC9cXC8rJC8sICcnKX0vJHtyZWxhdGl2ZVVybC5yZXBsYWNlKC9eXFwvKy8sICcnKX1gXG59XG4iXSwibmFtZXMiOlsicGFyc2VVc2VyQWdlbnQiLCJ1c2VyQWdlbnQiLCJhZ2VudCIsInVhIiwib3MiLCJwbGF0Zm9ybSIsIm1hdGNoIiwiYnJvd3NlciIsInYxIiwidjIiLCJydiIsInZlcnNpb24iLCJhcHBTdGF0ZSIsInJlYWN0aXZlIiwiYXBwZW5kRGF0YVBhdGgiLCJkYXRhUGF0aCIsInRva2VuIiwicGFyc2VQYXJlbnREYXRhUGF0aCIsInBhdGgiLCJwYXJzZURhdGFQYXRoIiwicGFyc2VJdGVtRGF0YVBhdGgiLCJuZXN0ZWQiLCJnZXRJdGVtRGF0YVBhdGgiLCJub3JtYWxpemVEYXRhUGF0aCIsInBhcnNlUGFyZW50SXRlbURhdGFQYXRoIiwiaXNJbnRlZ2VyIiwiZ2V0UGFyZW50SXRlbURhdGFQYXRoIiwiZ2V0SXRlbSIsInJvb3RJdGVtIiwiZ2V0VmFsdWVBdERhdGFQYXRoIiwiZ2V0UGFyZW50SXRlbSIsImdldExhc3REYXRhUGF0aFRva2VuIiwiZ2V0TGFzdERhdGFQYXRoTmFtZSIsImdldExhc3REYXRhUGF0aEluZGV4IiwiaW5kZXgiLCJ0ZW1wb3JhcnlJZCIsInNldFRlbXBvcmFyeUlkIiwiZGF0YSIsImlkS2V5IiwiaXNUZW1wb3JhcnlJZCIsImlkIiwiaXNSZWZlcmVuY2UiLCJoYXNPd25Qcm9wZXJ0eSIsImNvbnRleHRzIiwidG9PYmplY3QiLCJjb250ZXh0IiwicmF3U3RhcnQiLCJ0b1JhdyIsInJhdyIsIm9iamVjdCIsImdldCIsImtleSIsImRlZmF1bHRWYWx1ZSIsInZhbHVlIiwiaXNGdW5jdGlvbiIsInNldCIsIkRpdG9Db250ZXh0IiwiY29tcG9uZW50IiwiaXRlbSIsIm9wdGlvbnMiLCJsb2NhdGlvbiIsInJlc291cmNlIiwiRW1pdHRlck1peGluIiwiZXZlbnQiLCJjYWxsYmFjayIsImlzQXJyYXkiLCJldiIsImlzUGxhaW5PYmplY3QiLCJsaXN0ZW5lcnMiLCJjYWxsYmFja3MiLCJvbiIsImFyZ3MiLCJlbnRyeSIsIl9hIiwiY2IiLCJxdWV1ZSIsInJlc29sdmUiLCJuZXh0IiwicmVzdWx0IiwicmVzIiwiZXJyb3IiLCJ0YXJnZXQiLCJWYWx1ZU1peGluIiwiY29tcHV0ZVZhbHVlIiwiZm9ybWF0IiwicGFyc2UiLCJDb250ZXh0TWl4aW4iLCJnZXRQcm9jZXNzZWRQYXJlbnREYXRhIiwic2NoZW1hQ29tcG9uZW50IiwiaXNDcmVkaXRDYXJkIiwiZGVjaW1hbHMiLCJpc0RvbWFpbiIsImlzRW1haWwiLCJpc0hvc3RuYW1lIiwibWF4IiwibWluIiwic2V0dGluZ3MiLCJwYXNzd29yZCIsImlzVXJsIiwiVmFsaWRhdGlvbk1peGluIiwibm90aWZ5IiwiaXNWYWxpZCIsInJ1bGUiLCJzZXR0aW5nIiwidmFsaWRhdG9yIiwidmFsaWRhdG9ycyIsInZhbGlkYXRlIiwibWVzc2FnZSIsImFkZExhYmVsIiwiZXJyb3JzIiwiZm9jdXMiLCJnZXRTY2hlbWFBY2Nlc3NvciIsImtleU9yRGF0YVBhdGgiLCJ0eXBlIiwiZGVmIiwiaXNTdHJpbmciLCJuYW1lIiwiZ2V0U3RvcmVBY2Nlc3NvciIsIlR5cGVNaXhpbiIsIm5vZGUiLCJjbGVhcmFibGUiLCJldmVudHMiLCJjYW1lbGl6ZSIsIm5hdGl2ZUZpZWxkIiwidGV4dEZpZWxkIiwiYXR0cmlidXRlcyIsInZhbGlkYXRpb25zIiwiYWRkIiwib25Gb2N1cyIsIm9uQmx1ciIsIm9uSW5wdXQiLCJvbkNoYW5nZSIsIl9iIiwiZWxlbWVudCIsImFzQXJyYXkiLCJ1aWRNYXAiLCJ1aWQiLCJnZXRVaWQiLCJnZXRJdGVtSWQiLCJTY2hlbWFHcmFwaCIsIl9fcHVibGljRmllbGQiLCJkZWZhdWx0cyIsInN1YkdyYXBoIiwicGFydCIsInNjaGVtYSIsInJlbGF0ZWREYXRhUGF0aCIsIm5hbm9pZCIsImZsYXR0ZW4iLCJncmFwaCIsImVudHJpZXMiLCIkc2V0dGluZ3MiLCJzdWJLZXkiLCJzb3VyY2VTY2hlbWEiLCJjbGlwYm9hcmQiLCJpbnRlcm5hbCIsInJlbGF0ZWQiLCJyZWZlcmVuY2UiLCJzb3VyY2UiLCJyZWxhdGlvbiIsInZhbHVlcyIsInJlbW92ZUlkIiwicmVmZXJlbmNlSWQiLCJyZWZLZXkiLCJyZXZWYWx1ZSIsInR5cGVDaGVja2VycyIsImlzQm9vbGVhbiIsImlzTnVtYmVyIiwiaXNEYXRlIiwiaXNPYmplY3QiLCJpc1JlZ0V4cCIsInR5cGVDb252ZXJ0ZXJzIiwiaXNNYXRjaGluZ1R5cGUiLCJ0eXBlcyIsImNvbnZlcnRUeXBlIiwiY29udmVydGVyIiwidHlwZUNvbXBvbmVudHMiLCJ1bmtub3duVHlwZVJlcG9ydGVkIiwiZW1wdHlTY2hlbWEiLCJyZWdpc3RlclR5cGVDb21wb25lbnQiLCJnZXRUeXBlQ29tcG9uZW50IiwiYWxsb3dOdWxsIiwiaXRlcmF0ZVNjaGVtYUNvbXBvbmVudHMiLCJzY2hlbWFzIiwiaXNTaW5nbGVDb21wb25lbnRWaWV3IiwiaXNTY2hlbWEiLCJpdGVyYXRlTmVzdGVkU2NoZW1hQ29tcG9uZW50cyIsImdldFRhYlNjaGVtYXMiLCJmaW5kTmVzdGVkU2NoZW1hQ29tcG9uZW50Iiwic29tZU5lc3RlZFNjaGVtYUNvbXBvbmVudCIsImhhc05lc3RlZFNjaGVtYUNvbXBvbmVudHMiLCJpc0Zvcm0iLCJpc1ZpZXciLCJpc1RhYiIsImlzUGFuZWwiLCJpc01lbnUiLCJnZXRTY2hlbWFJZGVudGlmaWVyIiwicmVzb2x2ZWRTY2hlbWFzIiwicmVzb2x2ZVNjaGVtYSIsInVud3JhcE1vZHVsZSIsImlzUHJvbWlzZSIsImlzTW9kdWxlIiwia2V5cyIsInJlc29sdmVTY2hlbWFzIiwidW5yZXNvbHZlZFNjaGVtYXMiLCJyZXNvbHZlSXRlbSIsIm1hcENvbmN1cnJlbnRseSIsInJlc29sdmVWaWV3cyIsInVucmVzb2x2ZWRWaWV3cyIsImZsYXR0ZW5WaWV3cyIsInZpZXdzIiwicmVzb2x2ZVNjaGVtYUNvbXBvbmVudCIsIm1hcmtSYXciLCJEaXRvTWl4aW4iLCJyZXNvbHZlU2NoZW1hQ29tcG9uZW50cyIsInByb2Nlc3NlZFNjaGVtYURlcHRocyIsInByb2Nlc3NTY2hlbWFDb21wb25lbnRzIiwiYXBpIiwicm91dGVzIiwibGV2ZWwiLCJtYXhEZXB0aCIsImRlcHRoIiwicHJvbWlzZXMiLCJwcm9jZXNzIiwicmVsYXRpdmVMZXZlbCIsInByb2Nlc3NTY2hlbWFDb21wb25lbnQiLCJnZXRQYW5lbFNjaGVtYXMiLCJwcm9jZXNzU2NoZW1hRGVmYXVsdHMiLCJwYW5lbCIsImdldFR5cGVPcHRpb25zIiwicHJvY2Vzc1ZpZXciLCJmdWxsUGF0aCIsInByb2Nlc3NSb3V0ZVNjaGVtYSIsImNoaWxkcmVuIiwicHJvY2Vzc05lc3RlZFNjaGVtYXMiLCJhc3NpZ25EZWVwbHkiLCJwcm9jZXNzTmVzdGVkU2NoZW1hRGVmYXVsdHMiLCJmb3JtcyIsImdldEZvcm1TY2hlbWFzIiwiZm9ybSIsInByb2Nlc3NGb3JtcyIsImNvbXBvbmVudHMiLCJwcm9jZXNzRm9ybSIsInByb2Nlc3NUYWIiLCJwcm9jZXNzUGFuZWwiLCJ0YWJzIiwicGFuZWxzIiwidGFiIiwiaGFzRm9ybVNjaGVtYSIsImhhc011bHRpcGxlRm9ybVNjaGVtYXMiLCJnZXRWaWV3Rm9ybVNjaGVtYSIsInZpZXciLCJ2aWV3U2NoZW1hIiwiZ2V0Vmlld1NjaGVtYSIsImhhc1ZpZXdTY2hlbWEiLCJnZXRWaWV3RWRpdFBhdGgiLCJtb2RpZnlGb3JtIiwiY29tcGFjdCIsImdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zIiwiZ2V0SXRlbUZvcm1TY2hlbWEiLCJpc0VtcHR5U2NoZW1hIiwiaXNDb21wYWN0IiwiaXNJbmxpbmVkIiwiaXNOZXN0ZWQiLCJoYXNMYWJlbCIsImdlbmVyYXRlTGFiZWxzIiwibGFiZWwiLCJvbWl0U3BhY2luZyIsImdldFNjaGVtYVZhbHVlIiwiY29udmVydGVkIiwic2hvdWxkUmVuZGVyU2NoZW1hIiwiZ2V0Q29udGV4dCIsImdldERlZmF1bHRWYWx1ZSIsImNsb25lIiwic2hvdWxkRXhjbHVkZVZhbHVlIiwiZXhjbHVkZVZhbHVlIiwic2hvdWxkSWdub3JlTWlzc2luZ1ZhbHVlIiwic2V0RGVmYXVsdFZhbHVlcyIsInByb2Nlc3NTY2hlbWFEYXRhIiwicm9vdERhdGEiLCJjb21wdXRlIiwiY2xvbmVJdGVtIiwiY29weSIsIm9yZGVyS2V5IiwicHJvY2Vzc0RhdGEiLCJzY2hlbWFPbmx5IiwicHJvY2Vzc2VkRGF0YSIsIndyYXBQcmltaXRpdmVzIiwiYSIsImIiLCJpZDEiLCJpZDIiLCJwcm9jZXNzVmFsdWUiLCJwcm9jZXNzQmVmb3JlIiwicHJvY2Vzc0FmdGVyIiwicHJvY2Vzc0NvbXBvbmVudHMiLCJnZXREYXRhUGF0aCIsImNvbXBvbmVudFNjaGVtYSIsImNvbXBvbmVudERhdGFQYXRoIiwicHJvY2Vzc0l0ZW0iLCJpdGVtRGF0YVBhdGgiLCJwcm9jZXNzZWRJdGVtIiwiZ2V0TmFtZWRTY2hlbWFzIiwiYXJyYXkiLCJ0b1NjaGVtYSIsImdldEJ1dHRvblNjaGVtYXMiLCJidXR0b25zIiwiZ2V0VHlwZSIsInNjaGVtYU9yVHlwZSIsImdldFNvdXJjZVR5cGUiLCJnZXRQYW5lbEVudHJ5IiwidGFiQ29tcG9uZW50IiwiZ2V0UGFuZWxFbnRyaWVzIiwicGFuZWxTY2hlbWFzIiwicGFuZWxFbnRyaWVzIiwiZ2V0QWxsUGFuZWxFbnRyaWVzIiwicGFuZWxTY2hlbWEiLCJpc09iamVjdFNvdXJjZSIsImlzTGlzdFNvdXJjZSIsImdldEl0ZW1VaWQiLCJoYXNSZXNvdXJjZSIsImdldFJlc291cmNlIiwicGFyZW50IiwiZGVmcyIsImdldE1lbWJlclJlc291cmNlIiwicGlja0J5Iiwic2VsZiIsImdldFBhcmVudENvbXBvbmVudCIsIm5leHRVaWQiLCJsYWJlbGl6ZSIsInN0b3JlIiwib2xkS2V5IiwidmVyYiIsInF1ZXJ5IiwidXJsIiwibWV0aG9kIiwic2lnbmFsIiwiY2hlY2tVc2VyIiwicmVzcG9uc2UiLCJlcXVhbHMiLCJjYWNoZSIsImNhY2hlUGFyZW50IiwibG9hZENhY2hlIiwiY2FjaGVLZXkiLCJsb2NhbGUiLCJib2R5IiwiZ2V0Q29tcHV0ZWRBY2Nlc3NvciIsImdldHRlciIsImNvbXB1dGVkIiwiYWNjZXNzb3IiLCJ3YXRjaCIsImhhbmRsZXJzIiwiZXhwciIsImFkZEV2ZW50IiwiaHlwaGVuYXRlIiwiaGFzTGlzdGVuZXJzIiwicGFyZW50SGFzTGlzdGVuZXJzIiwiZW1pdEV2ZW50IiwiaGFuZGxlUGFyZW50TGlzdGVuZXJzIiwiaGFuZGxlTGlzdGVuZXJzIiwicGFyYW1zIiwiY3VycmVudCIsInJlc29sdmVNZXJnZWRPcHRpb25zIiwibWl4aW5zIiwibWVyZ2VPcHRpb25zIiwidG8iLCJmcm9tIiwibWl4aW4iLCJkaXRvT3B0aW9uS2V5cyIsIkRpdG9Db21wb25lbnQiLCJkZWZpbml0aW9uIiwiZGVzY3JpYmVEYXRlIiwiZGF0ZSIsImFsdGVyRGF0ZSIsIm92ZXJyaWRlcyIsInBhcnNlRGF0ZSIsInN0cmluZyIsInRpbWUiLCJ0aW1lRGVmYXVsdCIsImRheSIsInNlcDEiLCJtb250aCIsInNlcDIiLCJ5ZWFyIiwiaG91ciIsIm1pbnV0ZSIsInNlY29uZCIsIm1pbGxpc2Vjb25kIiwiZ2V0RGF0ZVBhcnRzIiwiZ2V0TW9udGhJbmRleCIsImlzVmFsaWRUaW1lUGFydCIsImdldERhdGVQYXJ0QXRQb3NpdGlvbiIsInBvc2l0aW9uIiwicGFydHMiLCJnZXRQb3NpdGlvbiIsImxlbmd0aCIsInBvcyIsIm9mZnNldCIsImlzVVMiLCJzdGFydCIsImVuZCIsInNob3J0Rm9ybWF0IiwibG9uZ0Zvcm1hdCIsImkiLCJfc2ZjX21haW4iLCJ3ZWVrZGF5TmFtZXMiLCJtb250aE5hbWVzIiwiZ2V0TG9jYWxlTmFtZXMiLCJtb2RlIiwidXBkYXRlIiwic3RlcCIsImN1cnJlbnRWYWx1ZSIsImVudGVyIiwic3RhcnRZZWFyIiwiZmlyc3REYXlXZWVrIiwibnVtRGF5cyIsInByZXZNb250aCIsInByZXZNb250aE51bURheXMiLCJub3ciLCJpc0RheSIsInN0YXRlIiwibmV4dE1vbnRoTmVlZCIsIm5leHRNb250aCIsImxvY2FsZU5hbWVzIiwibmFtZXMiLCJhZGRFdmVudHMiLCJ0YXJnZXRzIiwiaGFuZGxlciIsImNvbWJpbmVFdmVudHMiLCJnZXRLZXkiLCJnZXRLZXlOYXZpZ2F0aW9uIiwiZ2V0VGFyZ2V0IiwiY2xhc3NlcyIsInNob3ciLCJ0cmlnZ2VyIiwicG9wdXAiLCJfYyIsImVsIiwiYm91bmRzIiwidHJpZ2dlckxlZnQiLCJ0cmlnZ2VyVG9wIiwidHJpZ2dlcldpZHRoIiwidHJpZ2dlckhlaWdodCIsInBvcHVwV2lkdGgiLCJwb3B1cEhlaWdodCIsInBhcnQxIiwicGFydDIiLCJ3aW5XaWR0aCIsIndpbkhlaWdodCIsImxlZnQiLCJ0b3AiLCJ0cmlnZ2VyQm91bmRzIiwiaW5wdXQiLCJfIiwic2l6ZSIsImdldExlbmd0aCIsIl9vcGVuQmxvY2siLCJfY3JlYXRlRWxlbWVudEJsb2NrIiwic2V0U2VsZWN0aW9uIiwiZ2V0U2VsZWN0aW9uIiwiVHJpZ2dlciIsIkNhbGVuZGFyIiwiSW5wdXRGaWVsZCIsIkljb24iLCJkZWZhdWx0Rm9ybWF0cyIsImdldERhdGVQYXJ0IiwiY2FsZW5kYXIiLCJ0b2dnbGUiLCJzZWxlY3Rpb24iLCJzbW9vdGgiLCJzY3JvbGwiLCJyZWYiLCJsaW5lSGVpZ2h0IiwiZGlzdGFuY2UiLCJjb3VudCIsImlzRGlnaXQiLCJjaGFyIiwiRGF0ZVBpY2tlciIsIlRpbWVQaWNrZXIiLCJ0cmFuc2l0aW9uIiwiZGlzYWJsZWQiLCJ0ZXh0Iiwic2hvd1ByZXYiLCJzaG93TmV4dCIsImN1cnJlbnRQYWdlIiwibnVtUGFnZXMiLCJzaG93TGVuZ3RoIiwicGFnZSIsImJ1dHRvbiIsImNoZWNrZWQiLCJ1bmNoZWNrZWQiLCJtb2RlbFZhbHVlIiwiVHJhbnNpdGlvbkhlaWdodCIsImVuYWJsZWQiLCJzbG90cyIsImNyZWF0ZUVsZW1lbnQiLCJUcmFuc2l0aW9uIiwicHJvcHMiLCJzZXRTdHlsZSIsInN0eWxlIiwibmV4dFRpbWVvdXQiLCJmb3JjZVJlcGFpbnQiLCJ3aWR0aCIsImhlaWdodCIsImhhc1ZOb2RlQ29udGVudCIsInZub2RlIiwiQ29tbWVudCIsImhhc1Nsb3RDb250ZW50Iiwic2xvdCIsInVzZVNsb3RzIiwiRG9tTWl4aW4iLCJyZW1vdmUiLCJEaXRvVXNlciIsInJvbGVzIiwicm9sZSIsIlNjaGVtYVBhcmVudE1peGluIiwic2NoZW1hQ29tcG9uZW50cyIsIlZhbGlkYXRvck1peGluIiwiaXQiLCJmaXJzdCIsIlJvdXRlTWl4aW4iLCJyb3V0ZUNvbXBvbmVudCIsIm1hdGNoZWQiLCJyZWNvcmQiLCJicmVhZGNydW1iIiwicm91dGVDb21wb25lbnRzIiwib2siLCJyZWNvcmRQYXRoIiwicm9vdFBhdGgiLCJnZXRDb21tb25QcmVmaXgiLCJpc0xvYWRpbmciLCJVc2VGb2N1c1RyYXAiLCJkZWZpbmVDb21wb25lbnQiLCJ0cmFwIiwiYWN0aXZhdGUiLCJkZWFjdGl2YXRlIiwidW5yZWZFbGVtZW50IiwiY3JlYXRlRm9jdXNUcmFwIiwib25TY29wZURpc3Bvc2UiLCJoIiwiZGlhbG9nRGF0YSIsIkRpdG9EaWFsb2ciLCJwcmVmaXgiLCJ0aXBweURlbGVnYXRlIiwiaW5zdGFuY2UiLCJlcnIiLCJkcmFnQ291bnQiLCJ1cGxvYWRzIiwidG9nZ2xlRHJvcFRhcmdldENsYXNzIiwidXBsb2FkIiwic2V0RHJhZ2dpbmdGaWxlcyIsImhhc1VwbG9hZHMiLCJjYW5Ecm9wIiwidGl0bGUiLCJyZWplY3QiLCJkaWFsb2dJZCIsImFkZGl0aW9uYWxDb21wb25lbnRzIiwicmVkaXJlY3RBZnRlckxvZ2luIiwibG9naW5EYXRhIiwidXNlciIsIkRpdG9WaWV3IiwiYWRkUm91dGVzIiwicm91dGVyIiwicmVtb3ZlcnMiLCJyb3V0ZSIsInN1Yk1lbnVDbGFzcyIsImZpcnN0Q2hpbGQiLCJsb2ciLCJzdHJpcFRhZ3MiLCJub3RpZmljYXRpb25zIiwiZHVyYXRpb25GYWN0b3IiLCJkdXJhdGlvbiIsIlB1bGxkb3duTWl4aW4iLCJzdGFydFRpbWUiLCJvcGVuIiwiY29udGVudCIsImFzT2JqZWN0IiwiSXRlbU1peGluIiwiaXRlbUlkIiwiZXh0ZW5kZWQiLCJpdGVtTGFiZWwiLCJmb3JtTGFiZWwiLCJnZXRGb3JtTGFiZWwiLCJzdWZmaXgiLCJjb2x1bW5zIiwiaGFkTGFiZWwiLCJkZWZhdWx0VGFiIiwicm91dGVUYWIiLCJuZXdUYWIiLCJvbGRUYWIiLCJkYXRhUGF0aE9yTmFtZSIsInNjcm9sbENvbnRhaW5lciIsImRpc3BhdGNoIiwiY29tcG9uZW50c0J5RGF0YVBhdGgiLCJkYXRhUGF0aHMiLCJjaGVjayIsImZpZWxkIiwidW5tYXRjaGVkIiwid2FzRmlyc3QiLCJlcnJzIiwiZnVsbERhdGFQYXRoIiwiZGF0YVBhdGhQYXJ0cyIsImZvdW5kIiwicHJvcGVydHkiLCJzdWJDb21wb25lbnRzIiwibG9jYWxEYXRhIiwiZm9yZWlnbkRhdGEiLCJwYW5lIiwicmVnaXN0cnkiLCJlbnRyaWVzQnlEYXRhUGF0aCIsIl93aXRoRGlyZWN0aXZlcyIsIl9GcmFnbWVudCIsIl9yZW5kZXJMaXN0IiwiX2N0eCIsIl9ob2lzdGVkXzEiLCJfY3JlYXRlQmxvY2siLCJfY29tcG9uZW50X0RpdG9Db250YWluZXIiLCJuZXN0ZWREYXRhUGF0aCIsIl9ob2lzdGVkXzIiLCJwb3NpdGlvbnMiLCJpc0xhc3RJblJvdyIsImZpbmROZXh0UG9zaXRpb24iLCJyb3dzIiwicm93IiwidmVydGljYWxMYWJlbHNCeUluZGljZXMiLCJoYXNMYWJlbHNJblJvdyIsImNvbnRhaW5lciIsInBhZGRpbmciLCJmb250U2l6ZSIsInBhcnNlRnJhY3Rpb24iLCJkaXZpZGVuZCIsImRpdmlzb3IiLCJhY2N1bXVsYXRlZEJhc2lzIiwiZmxleEJhc2lzIiwiY29tYmluZWRCYXNpcyIsImNhcGl0YWxpemUiLCJjbGlwYm9hcmREYXRhIiwicGFzdGUiLCIkc2NoZW1hIiwicmVwb3J0IiwianNvbiIsImRlaW5kZW50IiwiTG9hZGluZ01peGluIiwidXBkYXRlUm9vdCIsInVwZGF0ZVZpZXciLCJSZXNvdXJjZU1peGluIiwiYW1vdW50IiwicmFuZ2UiLCJjaGlsZCIsInZlcmJzIiwiY2xlYXIiLCJsb2FkaW5nT3B0aW9ucyIsImNvbnRyb2xsZXIiLCJyZXF1ZXN0Iiwic2V0RGF0YSIsIm9uU3VjY2VzcyIsIm9uRXJyb3IiLCJub3RpZnlTdWNjZXNzIiwibm90aWZ5RXJyb3IiLCJwYXJlbnRNZXRhIiwicmVzb2x2ZVBhdGgiLCJpc0NyZWF0aW5nIiwicHJvdmlkZXNEYXRhIiwiZGF0YVBhcnRzIiwicGF0aFBhcnRzIiwicm91dGVQYXJ0cyIsImxhc3REYXRhUGFydCIsImwiLCJkYXRhUGFydCIsInBhcmFtIiwibWFpblNjaGVtYUNvbXBvbmVudCIsInByZXNlbnQiLCJjbG9zZUZvcm0iLCJnZXRWZXJiIiwiYnV0dG9uUmVzb3VyY2UiLCJzdWNjZXNzIiwiX3Jlc291cmNlIiwiX21ldGhvZCIsIkRpdG9Gb3JtIiwidGlwIiwidGlwcHkiLCJzY29wZSIsIlBhZ2luYXRpb24iLCJTb3J0YWJsZU1peGluIiwiZm9yY2VGYWxsYmFjayIsIm9sZEluZGV4IiwibmV3SW5kZXgiLCJsaXN0IiwicGFnaW5hdGlvblJhbmdlIiwiX25vcm1hbGl6ZVN0eWxlIiwiX2NhY2hlIiwiX3dpdGhNb2RpZmllcnMiLCIkZXZlbnQiLCJfbm9ybWFsaXplQ2xhc3MiLCJfY3JlYXRlRWxlbWVudFZOb2RlIiwiX2hvaXN0ZWRfNCIsIl90b0Rpc3BsYXlTdHJpbmciLCJfaG9pc3RlZF81IiwiX2hvaXN0ZWRfNyIsIl9tZXJnZVByb3BzIiwiX2hvaXN0ZWRfOCIsIl9jb21wb25lbnRfRGl0b0xhYmVsIiwiX2NyZWF0ZVZOb2RlIiwiX2NvbXBvbmVudF9EaXRvVGFibGVDZWxsIiwiX2NvbXBvbmVudF9EaXRvRHJhZ2dhYmxlIiwiX2NvbXBvbmVudF9EaXRvVHJlZUl0ZW0iLCJjaGlsZHJlblNjaGVtYSIsImNoaWxkcmVuTGlzdCIsImVkaXRQYXRoIiwiY2hpbGRyZW5PcGVuIiwibnVtQ2hpbGRyZW4iLCJjcmVhdGFibGUiLCJlZGl0YWJsZSIsIm9yZGVyIiwiY29sdW1uIiwicmVuZGVyIiwiZXNjYXBlSHRtbCIsIlRZUEVTIiwiZmlsZSIsInJlYWRlciIsInVzZVNvcnRhYmxlIiwic29ydGFibGUiLCJkb2N1bWVudCIsImRlZmF1bHREb2N1bWVudCIsInJlc2V0T3B0aW9ucyIsImRlZmF1bHRPcHRpb25zIiwiZSIsIm1vdmVBcnJheUVsZW1lbnQiLCJTb3J0YWJsZSIsInN0b3AiLCJvcHRpb24iLCJ0cnlPbk1vdW50ZWQiLCJ0cnlPblNjb3BlRGlzcG9zZSIsImluc2VydE5vZGVBdCIsInBhcmVudEVsZW1lbnQiLCJyZWZFbGVtZW50IiwicmVtb3ZlTm9kZSIsIl92YWx1ZUlzUmVmIiwiaXNSZWYiLCJ0b1ZhbHVlIiwibmV4dFRpY2siLCJVc2VTb3J0YWJsZSIsInVzZVZNb2RlbCIsIkRpdG9WTm9kZSIsIkRpdG9UeXBlQ29tcG9uZW50JDEiLCJEaXRvVHlwZUNvbXBvbmVudCIsIm9uQ2xpY2siLCJEYXRhTWl4aW4iLCJhc3luY0VudHJ5IiwicmVzb2x2ZWREYXRhIiwibG9hZCIsImNsZWFyTG9hZGluZyIsInRpbWVyIiwiT3B0aW9uc01peGluIiwiY29udmVydFZhbHVlIiwidmFsIiwic2VhcmNoIiwiZmlsdGVyIiwiZGVib3VuY2UiLCJkZWJvdW5jZUFzeW5jIiwiZ3JvdXBlZCIsInJlc3VsdHMiLCJncm91cCIsImZpbmRPcHRpb24iLCJncm91cEJ5Iiwib3B0aW9uVmFsdWUiLCJvcHRpb25MYWJlbCIsInByb2Nlc3NSZWxhdGUiLCJmbGFzayIsIkNvZGVGbGFzayIsImNoYW5nZWQiLCJpZ25vcmVXYXRjaCIsImlnbm9yZVVwZGF0ZSIsInNldENvZGUiLCJjb2RlIiwic2V0VmFsdWUiLCJsYW5ndWFnZSIsImdldFBvaW50IiwieCIsInkiLCJwcmV2WSIsIm1vdXNlbW92ZSIsImhleCIsIlNrZXRjaFBpY2tlciIsImNvbnZlcnRDb2xvciIsImNvbG9yIiwidGlueWNvbG9yIiwiY29udmVydGVkVmFsdWUiLCJjYW5VcGRhdGVWYWx1ZSIsInRvVnVlM0NvbG9yRm9ybWF0IiwidG9UaW55Q29sb3JGb3JtYXQiLCJEYXRlVGltZVBpY2tlciIsImZvcm1hdHMiLCJmb3JtYXRRdWVyeSIsInJlcGxhY2VSb3V0ZSIsImhhc2giLCJTb3VyY2VNaXhpbiIsImRlZmF1bHRTb3J0IiwiZGlyZWN0aW9uIiwiZHJhZ2dhYmxlIiwiY29sbGFwc2libGUiLCJjb2xsYXBzZWQiLCJyZW1vdmVkIiwibGlzdERhdGEiLCJvbkNvbXBsZXRlIiwib3BlbmVkIiwiY2FsbE9uQ29tcGxldGUiLCJpbmxpbmVkIiwibWV0YSIsImZvcm1NZXRhIiwiY2hpbGRSb3V0ZXMiLCJzb3VyY2VQYXRoIiwiZm9ybVJvdXRlIiwiZ2V0UGF0aFdpdGhQYXJhbSIsImZsYXRSb3V0ZXMiLCJzdWJSb3V0ZXMiLCJjaGlsZFJvdXRlIiwiZmlsdGVyQ29tcG9uZW50cyIsImRhdGV0aW1lIiwiY3JlYXRlRmlsdGVyc1BhbmVsIiwiZmlsdGVycyIsInN0aWNreSIsImZpbHRlclNjaGVtYXMiLCJwYXJzZUZpbHRlcnNEYXRhIiwiY3JlYXRlRmlsdGVyc0NvbXBvbmVudHMiLCJjcmVhdGVGaWx0ZXJzQnV0dG9ucyIsImZvcm1hdEZpbHRlcnNEYXRhIiwic21hbGwiLCJnZXREYXRhTmFtZSIsImZpbHRlck5hbWUiLCJnZXRGaWx0ZXJOYW1lIiwiZGF0YU5hbWUiLCJjb21wcyIsImdldENvbXBvbmVudHNGb3JGaWx0ZXIiLCJmaWx0ZXJzRGF0YSIsIl9jb21wb25lbnRfRGl0b1RhYmxlSGVhZCIsIl9jb21wb25lbnRfRGl0b1NjaGVtYUlubGluZWQiLCJfcmVzb2x2ZUR5bmFtaWNDb21wb25lbnQiLCJfY29tcG9uZW50X0RpdG9FZGl0QnV0dG9ucyIsIl9ob2lzdGVkXzkiLCJvYmoiLCJmaWx0ZXJzRGF0YVBhdGgiLCJFZGl0b3JDb250ZW50IiwiZWRpdG9yIiwiZW5hYmxlUnVsZXMiLCJ1cGRhdGVWYWx1ZSIsIm9uVXBkYXRlIiwic2V0VmFsdWVEZWJvdW5jZWQiLCJFZGl0b3IiLCJkaWFsb2dDb21wb25lbnQiLCJnZXRNYXJrQXR0cmlidXRlcyIsImhyZWYiLCJtYXJrcyIsIm5vZGVzIiwidG9vbHMiLCJEb2N1bWVudCIsIlRleHQiLCJQYXJhZ3JhcGgiLCJCb2xkIiwiSXRhbGljIiwiVW5kZXJsaW5lIiwiU3RyaWtlIiwiU21hbGwiLCJDb2RlIiwiU3VwZXJzY3JpcHQiLCJTdWJzY3JpcHQiLCJMaW5rV2l0aFRpdGxlIiwiQmxvY2txdW90ZSIsIkNvZGVCbG9jayIsIkhlYWRpbmciLCJIb3Jpem9udGFsUnVsZSIsIkxpc3RJdGVtIiwiQnVsbGV0TGlzdCIsIk9yZGVyZWRMaXN0IiwiRm9vdG5vdGVzIiwiRm9vdG5vdGUiLCJGb290bm90ZVJlZmVyZW5jZSIsIkhpc3RvcnkiLCJIYXJkQnJlYWsiLCJzZXRIYXJkQnJlYWsiLCJleHRlbnNpb24iLCJzZXR0aW5nc05hbWUiLCJkZXNjcmlwdGlvbnMiLCJjb21tYW5kcyIsImFkZEJ1dHRvbiIsImljb24iLCJjb21tYW5kIiwiZGVzY3JpcHRpb24iLCJzZXR0aW5nTmFtZSIsImF0dHJpYnV0ZSIsIk1hcmsiLCJMaW5rIiwiX2NvbXBvbmVudF9WdWVNdWx0aXNlbGVjdCIsIlZ1ZU11bHRpc2VsZWN0IiwicGxhY2Vob2xkZXIiLCJzZWFyY2hhYmxlIiwidGFnZ2FibGUiLCJ0YWciLCJOdW1iZXJNaXhpbiIsIlN3aXRjaEJ1dHRvbiIsIlRleHRNaXhpbiIsIm1hc2tlZFBhc3N3b3JkIiwiaGFzRWRpdGFibGVGb3JtcyIsImZvcm1hdEZpbGVTaXplIiwiZmlsZXNpemUiLCJWdWVVcGxvYWQiLCJhc0ZpbGVzIiwiYWNjZXB0IiwibWF4U2l6ZSIsInBhcnNlRmlsZVNpemUiLCJ0aHVtYm5haWxzIiwidG90YWwiLCJyZWFkeSIsIm5ld0ZpbGUiLCJvbGRGaWxlIiwieGhyIiwiYmxvYiIsImZpbGVzIiwiUmVzaXplRGlyZWN0aXZlIiwiYmluZGluZyIsIm9ic2VydmVSZXNpemUiLCJ1bm9ic2VydmVSZXNpemUiLCJPYnNlcnZlciIsImlzUmVzaXplU3VwcG9ydGVkIiwib2JzZXJ2ZXJzIiwiYm94IiwiRGl0b0FkbWluIiwiZGl0byIsImdldEFwaVVybCIsImlzQXBpVXJsIiwidXNlcnMiLCJwYXJlbnRQYXRoIiwiYXBwIiwiY3JlYXRlQXBwIiwiRGl0b1Jvb3QiLCJWdWVOb3RpZmljYXRpb25zIiwiY3JlYXRlUm91dGVyIiwiY3JlYXRlV2ViSGlzdG9yeSIsIlJlcXVlc3RFcnJvciIsImhlYWRlcnMiLCJpc0Fic29sdXRlVXJsIiwiY29tYmluZVVybHMiLCJiYXNlVXJsIiwicmVsYXRpdmVVcmwiXSwibWFwcGluZ3MiOiJvK0dBR08sU0FBU0EsR0FBZUMsRUFBWSxHQUFJLENBQzdDLE1BQU1DLEVBQVEsQ0FBQSxFQUVSQyxFQUFLRixFQUFVLFlBQVcsRUFDMUIsQ0FBQ0csQ0FBRSxFQUNQLGtFQUFrRSxLQUNoRUQsQ0FDTixHQUFTLENBQUEsRUFDREUsRUFDSixDQUNFLE9BQVUsTUFDVixPQUFVLE1BQ1YsS0FBUSxNQUNSLGlCQUFrQixTQUNuQixFQUFDRCxDQUFFLEdBQ0pBLEVBRUYsT0FBSUMsSUFDRkgsRUFBTSxTQUFXRyxFQUNqQkgsRUFBTUcsQ0FBUSxFQUFJLElBRXBCRixFQUFHLFFBQ0QsK0dBQ0EsQ0FBQ0csRUFBT0MsRUFBU0MsRUFBSUMsRUFBSUMsSUFBTyxDQUU5QixHQUFJLENBQUNSLEVBQU0sT0FBUSxDQUNqQixNQUFNUyxFQUFVRCxHQUFNRCxHQUFNRCxHQUN4QixDQUFDTixFQUFNLFNBQVdLLElBQVksWUFHaENMLEVBQU0sUUFBVVMsRUFDaEJULEVBQU0sY0FBZ0IsV0FBV1MsQ0FB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
|