@citolab/qti-components 6.9.1-6 → 6.9.1-7
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/custom-elements.json +56 -56
- package/dist/index.js +2 -2
- package/dist/qti-components/index.js +3 -3
- package/package.json +1 -1
|
@@ -69,8 +69,7 @@ import{a as g,b as x,c as s,d as Mt}from"../chunk-H4VLZ2F7.js";import{provide as
|
|
|
69
69
|
position: absolute;
|
|
70
70
|
width: 100%;
|
|
71
71
|
}
|
|
72
|
-
`]}set correctResponse(e){this._correctValue=e}render(){return ui`
|
|
73
|
-
<div part="correct">${this._correctValue}</div>
|
|
72
|
+
`]}set correctResponse(e){this._correctValue=e}render(){return ui`
|
|
74
73
|
<input
|
|
75
74
|
part="input"
|
|
76
75
|
spellcheck="false"
|
|
@@ -86,6 +85,7 @@ import{a as g,b as x,c as s,d as Mt}from"../chunk-H4VLZ2F7.js";import{provide as
|
|
|
86
85
|
?disabled="${this.disabled}"
|
|
87
86
|
?readonly="${this.readonly}"
|
|
88
87
|
/>
|
|
88
|
+
<div part="correct">${this._correctValue}</div>
|
|
89
89
|
`}textChanged(e){if(this.disabled||this.readonly)return;let t=e.target;this.setEmptyAttribute(t.value),this._value!==t.value&&(this._value=t.value,this.saveResponse(t.value))}reset(){this._value=""}setEmptyAttribute(e){this.setAttribute("empty",e===""?"true":"false")}};s([De({type:Number,attribute:"expected-length"})],T.prototype,"expectedLength",2),s([De({type:String,attribute:"pattern-mask"})],T.prototype,"patternMask",2),s([De({type:String,attribute:"placeholder-text"})],T.prototype,"placeholderText",2),s([tt()],T.prototype,"_value",2),s([tt()],T.prototype,"_correctValue",2),s([tt()],T.prototype,"_size",2),s([De({type:String,attribute:"class"})],T.prototype,"classNames",2),s([v("classNames")],T.prototype,"handleclassNamesChange",1),T=s([mi("qti-text-entry-interaction")],T);import{html as fi}from"lit";import{customElement as gi}from"lit/decorators.js";import{property as $t}from"lit/decorators.js";var E=class extends f{constructor(){super();this._choiceElements=[];this.minChoices=0;this.maxChoices=1;this._handleDisabledChange=(e,t)=>this._choiceElements.forEach(r=>r.disabled=t);this._handleReadonlyChange=(e,t)=>this._choiceElements.forEach(r=>r.readonly=t);this._handleMaxChoicesChange=()=>this._determineInputType();this.addEventListener("qti-register-choice",this._registerChoiceElement),this.addEventListener("qti-loose-choice",this._looseChoiceElement)}validate(){return this._choiceElements.reduce((t,r)=>t+(r.checked?1:0),0)>=this.minChoices}set response(e){let t=Array.isArray(e)?e:[e];this._choiceElements.forEach(r=>{r.checked=!!t.find(o=>o===r.identifier)})}set correctResponse(e){let t=Array.isArray(e)?e:[e];if(e==""){this._choiceElements.forEach(r=>{r.removeAttribute("data-correct-response")});return}this._choiceElements.forEach(r=>{r.setAttribute("data-correct-response",t.find(o=>o===r.identifier)?"true":"false")})}connectedCallback(){super.connectedCallback(),this.addEventListener("qti-choice-element-selected",this._choiceElementSelectedHandler)}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("qti-choice-element-selected",this._choiceElementSelectedHandler),this.removeEventListener("qti-register-choice",this._registerChoiceElement)}_registerChoiceElement(e){e.stopPropagation();let t=e.target;this._choiceElements.push(t),this._setInputType(t)}_looseChoiceElement(e){e.stopPropagation();let t=e.target;this._choiceElements.push(t),this._choiceElements=this._choiceElements.filter(r=>r!==t)}_determineInputType(){this._choiceElements.forEach(e=>{this._setInputType(e)})}_setInputType(e){this.maxChoices===1?e.setAttribute("role","radio"):e.setAttribute("role","checkbox")}_choiceElementSelectedHandler(e){this.maxChoices===1&&this._choiceElements.filter(t=>t.identifier!==e.detail.identifier).forEach(t=>{t.checked=!1}),this._choiceElementSelected()}_choiceElementSelected(){let e=this._choiceElements.filter(r=>r.checked).map(r=>r.identifier);this.maxChoices>1&&(this.maxChoices===e.length?this._choiceElements.forEach(r=>r.disabled=!r.checked):this._choiceElements.forEach(r=>r.disabled=!1));let t;this.maxChoices===1?t=e.length>0?e[0]:void 0:t=e,this.saveResponse(t)}};s([$t({type:Number,attribute:"min-choices"})],E.prototype,"minChoices",2),s([$t({type:Number,attribute:"max-choices"})],E.prototype,"maxChoices",2),s([v("disabled",{waitUntilFirstUpdate:!0})],E.prototype,"_handleDisabledChange",2),s([v("readonly",{waitUntilFirstUpdate:!0})],E.prototype,"_handleReadonlyChange",2),s([v("maxChoices",{waitUntilFirstUpdate:!0})],E.prototype,"_handleMaxChoicesChange",2);var Oe=class extends E{constructor(){super(...arguments);this.render=()=>fi`<slot></slot>`}connectedCallback(){super.connectedCallback(),this.setAttribute("qti-hottext-interaction","")}};Oe=s([gi("qti-hottext-interaction")],Oe);import{css as bi,html as Dt}from"lit";import{customElement as vi,property as yi,state as Ot}from"lit/decorators.js";import{unsafeHTML as Pt}from"lit/directives/unsafe-html.js";var F=class extends f{constructor(){super(...arguments);this.options=[];this.correctOption="";this.dataPrompt="select"}static get styles(){return[bi`
|
|
90
90
|
:host {
|
|
91
91
|
display: inline-block;
|
|
@@ -473,4 +473,4 @@ import{a as g,b as x,c as s,d as Mt}from"../chunk-H4VLZ2F7.js";import{provide as
|
|
|
473
473
|
display: block;
|
|
474
474
|
}
|
|
475
475
|
`,Re=s([Vo("qti-simple-choice")],Re);console.log("%cC\xBFTO%cLab%c: qti-components loaded","font-weight:bold; color:green",'font-family: "PT Sans", font-weight:bold; color:green; font-size: smaller;vertical-align: sub',"font-weight:unset");export{f as Interaction,he as QtPrintedVariable,Ue as QtiAnd,_ as QtiAssessmentItem,z as QtiAssessmentStimulusRef,_e as QtiAssociableHotspot,ee as QtiAssociateInteraction,Fe as QtiBaseValue,C as QtiChoice,Z as QtiChoiceInteraction,Se as QtiCompanionMaterialsInfo,R as QtiConditionExpression,at as QtiContains,Ne as QtiContentBody,lt as QtiCorrect,$ as QtiCustomInteraction,Ce as QtiCustomOperator,te as QtiEndAttemptInteraction,Be as QtiEqual,Ie as QtiEqualRounded,u as QtiExpression,N as QtiExtendedTextInteraction,le as QtiFeedbackBlock,ce as QtiFeedbackInline,we as QtiGap,ke as QtiGapImg,ge as QtiGapMatchInteraction,Te as QtiGapText,D as QtiGraphicAssociateInteraction,be as QtiGraphicGapMatchInteraction,ve as QtiGraphicOrderInteraction,ct as QtiGt,pt as QtiGte,se as QtiHotspotChoice,ye as QtiHotspotInteraction,ze as QtiHottext,Oe as QtiHottextInteraction,Je as QtiInlineChoice,F as QtiInlineChoiceInteraction,dt as QtiIsNull,Pe as QtiLookupOutcomeValue,ut as QtiLt,mt as QtiLte,Xe as QtiMapResponse,G as QtiMapping,ft as QtiMatch,B as QtiMatchInteraction,Ee as QtiMediaInteraction,gt as QtiMember,pe as QtiModalFeedback,bt as QtiMultiple,vt as QtiNot,yt as QtiOr,K as QtiOrderInteraction,xt as QtiOrdered,L as QtiOutcomeDeclaration,de as QtiOutcomeProcessing,rt as QtiOutcomeProcessingProcessor,I as QtiPortableCustomInteraction,qe as QtiPositionObjectStage,Et as QtiProduct,Ae as QtiPrompt,it as QtiResponseCondition,P as QtiResponseDeclaration,ue as QtiResponseElse,nt as QtiResponseElseIf,me as QtiResponseIf,Y as QtiResponseProcessing,S as QtiRubricBlock,H as QtiRule,Ke as QtiSPositionObjectInteraction,X as QtiSelectPointInteraction,st as QtiSetOutcomeValue,ot as QtiSetOutcomeValueRule,j as QtiSimpleAssociableChoice,Re as QtiSimpleChoice,q as QtiSliderInteraction,Ye as QtiStringMatch,Me as QtiStylesheet,qt as QtiSum,Ct as QtiSumExpression,T as QtiTextEntryInteraction,_t as QtiVariable,M as itemContext,Lt as itemContextVariables,Xi as qtiAndMixin};
|
|
476
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktYXNzZXNzbWVudC1pdGVtL3F0aS1hc3Nlc3NtZW50LWl0ZW0udHMiLCAiLi4vLi4vc3JjL2xpYi9kZWNvcmF0b3JzL3dhdGNoLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWFzc2Vzc21lbnQtaXRlbS9xdGktYXNzZXNzbWVudC1pdGVtLmNvbnRleHQudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktYXNzZXNzbWVudC1zdGltdWx1cy1yZWYvcXRpLWFzc2Vzc21lbnQtc3RpbXVsdXMtcmVmLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL2ludGVybmFsL2Nob2ljZS9xdGktY2hvaWNlLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWl0ZW0tYm9keS9xdGktaXRlbS1ib2R5LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWl0ZW0tYm9keS9xdGktaXRlbS1ib2R5LnN0eWxlcy50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1wcm9tcHQvcXRpLXByb21wdC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1zdHlsZXNoZWV0L3F0aS1zdHlsZXNoZWV0LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXZhcmlhYmxlLWRlY2xhcmF0aW9uL3F0aS1vdXRjb21lLWRlY2xhcmF0aW9uL3F0aS1vdXRjb21lLWRlY2xhcmF0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXZhcmlhYmxlLWRlY2xhcmF0aW9uL3F0aS12YXJpYWJsZS1kZWNsYXJhdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS12YXJpYWJsZS1kZWNsYXJhdGlvbi9xdGktcmVzcG9uc2UtZGVjbGFyYXRpb24vcXRpLXJlc3BvbnNlLWRlY2xhcmF0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWNvbXBhbmlvbi1tYXRlcmlhbHMtaW5mby9xdGktY29tcGFuaW9uLW1hdGVyaWFscy1pbmZvLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJ1YnJpYy1ibG9jay9xdGktY29udGVudC1ib2R5LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJ1YnJpYy1ibG9jay9xdGktcnVicmljLWJsb2NrLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWZlZWRiYWNrL3F0aS1mZWVkYmFjay1ibG9jay9xdGktZmVlZGJhY2stYmxvY2sudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktZmVlZGJhY2svcXRpLWZlZWRiYWNrLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvaW50ZXJuYWwvdXRpbHMudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktZmVlZGJhY2svcXRpLWZlZWRiYWNrLWlubGluZS9xdGktZmVlZGJhY2staW5saW5lLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWZlZWRiYWNrL3F0aS1tb2RhbC1mZWVkYmFjay9xdGktbW9kYWwtZmVlZGJhY2sudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWV4dGVuZGVkLXRleHQtaW50ZXJhY3Rpb24vcXRpLWV4dGVuZGVkLXRleHQtaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vaW50ZXJuYWwvaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLXRleHQtZW50cnktaW50ZXJhY3Rpb24vcXRpLXRleHQtZW50cnktaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9kZWNvcmF0b3JzL2xpdmUtcXVlcnkudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWhvdHRleHQtaW50ZXJhY3Rpb24vcXRpLWhvdHRleHQtaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vaW50ZXJuYWwvY2hvaWNlcy9jaG9pY2VzLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1pbmxpbmUtY2hvaWNlLWludGVyYWN0aW9uL3F0aS1pbmxpbmUtY2hvaWNlLWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1jaG9pY2UtaW50ZXJhY3Rpb24vcXRpLWNob2ljZS1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktY2hvaWNlLWludGVyYWN0aW9uL3F0aS1jaG9pY2UtaW50ZXJhY3Rpb24uc3R5bGVzLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLW91dGNvbWUtcHJvY2Vzc2luZy9xdGktb3V0Y29tZS1wcm9jZXNzaW5nLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9pbnRlcm5hbC90ZW1wbGF0ZS1zdHJpbmdzLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLXJ1bGUvcXRpLWxvb2t1cC1vdXRjb21lLXZhbHVlL3F0aS1sb29rdXAtb3V0Y29tZS12YWx1ZS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1ydWxlL3F0aS1ydWxlLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLXJ1bGUvcXRpLXJlc3BvbnNlLWNvbmRpdGlvbi9xdGktcmVzcG9uc2UtY29uZGl0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLXJ1bGUvcXRpLXNldC1vdXRjb21lLXZhbHVlL3F0aS1zZXQtb3V0Y29tZS12YWx1ZS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1yZXNwb25zZS1lbHNlL3F0aS1yZXNwb25zZS1lbHNlLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLXJlc3BvbnNlLWVsc2UvcXRpLXJlc3BvbnNlLWlmL3F0aS1yZXNwb25zZS1lbHNlLWlmL3F0aS1yZXNwb25zZS1lbHNlLWlmLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLXJlc3BvbnNlLWVsc2UvcXRpLXJlc3BvbnNlLWlmL3F0aS1yZXNwb25zZS1pZi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1leHByZXNzaW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLWNvbmRpdGlvbi1leHByZXNzaW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLWFuZC9xdGktYW5kLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLWFuZC9pbmRleC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1iYXNldmFsdWUvcXRpLWJhc2V2YWx1ZS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1jb250YWlucy9xdGktY29udGFpbnMudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktY29ycmVjdC9xdGktY29ycmVjdC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1lcXVhbC1yb3VuZGVkL3F0aS1lcXVhbC1yb3VuZGVkLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLWVxdWFsL3F0aS1lcXVhbC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3V0aWxpdGllcy9zY29yaW5nLWhlbHBlci50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1ndC9xdGktZ3QudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktZ3RlL3F0aS1ndGUudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktaXMtbnVsbC9xdGktaXMtbnVsbC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1sdC9xdGktbHQudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktbHRlL3F0aS1sdGUudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktbWFwLXJlc3BvbnNlL3F0aS1tYXAtcmVzcG9uc2UudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktbWFwcGluZy9xdGktbWFwcGluZy50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1tYXRjaC9xdGktbWF0Y2gudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktbWVtYmVyL3F0aS1tZW1iZXIudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktbXVsdGlwbGUvcXRpLW11bHRpcGxlLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLW5vdC9xdGktbm90LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLW9yL3F0aS1vci50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1vcmRlcmVkL3F0aS1vcmRlcmVkLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLXByaW50ZWQtdmFyaWFibGUvcXRpLXByaW50ZWQtdmFyaWFibGUudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktcHJvZHVjdC9xdGktcHJvZHVjdC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1zdHJpbmctbWF0Y2gvcXRpLXN0cmluZy1tYXRjaC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1zdW0vcXRpLXN1bS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS12YXJpYWJsZS9xdGktdmFyaWFibGUudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLXBvcnRhYmxlLWN1c3RvbS1pbnRlcmFjdGlvbi9xdGktcG9ydGFibGUtY3VzdG9tLWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1hc3NvY2lhdGUtaW50ZXJhY3Rpb24vcXRpLWFzc29jaWF0ZS1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9pbnRlcm5hbC9kcmFnLWRyb3AvZHJhZy1kcm9wLWFwaS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9pbnRlcm5hbC9kcmFnLWRyb3AvZHJvcHBhYmxlcy1taXhpbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9pbnRlcm5hbC9kcmFnLWRyb3AvZmxpcHBhYmxlcy1taXhpbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9pbnRlcm5hbC9kcmFnLWRyb3AvZHJhZy1kcm9wLWludGVyYWN0aW9uLW1peGluLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1jdXN0b20taW50ZXJhY3Rpb24vcXRpLWN1c3RvbS1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktZW5kLWF0dGVtcHQtaW50ZXJhY3Rpb24vcXRpLWVuZC1hdHRlbXB0LWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1nYXAtbWF0Y2gtaW50ZXJhY3Rpb24vcXRpLWdhcC1tYXRjaC1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktZ3JhcGhpYy1hc3NvY2lhdGUtaW50ZXJhY3Rpb24vcXRpLWdyYXBoaWMtYXNzb2NpYXRlLWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL2ludGVybmFsL2hvdHNwb3RzL2hvdHNwb3QudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWdyYXBoaWMtZ2FwLW1hdGNoLWludGVyYWN0aW9uL3F0aS1ncmFwaGljLWdhcC1tYXRjaC1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktZ3JhcGhpYy1vcmRlci1pbnRlcmFjdGlvbi9xdGktZ3JhcGhpYy1vcmRlci1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktaG90c3BvdC1pbnRlcmFjdGlvbi9xdGktaG90c3BvdC1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktbWF0Y2gtaW50ZXJhY3Rpb24vcXRpLW1hdGNoLWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLW1lZGlhLWludGVyYWN0aW9uL3F0aS1tZWRpYS1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktb3JkZXItaW50ZXJhY3Rpb24vcXRpLW9yZGVyLWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1wb3NpdGlvbi1vYmplY3QtaW50ZXJhY3Rpb24vcXRpLXBvc2l0aW9uLW9iamVjdC1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktcG9zaXRpb24tb2JqZWN0LWludGVyYWN0aW9uL3F0aS1wb3NpdGlvbi1vYmplY3Qtc3RhZ2UudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLXNlbGVjdC1wb2ludC1pbnRlcmFjdGlvbi9xdGktc2VsZWN0LXBvaW50LWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1zbGlkZXItaW50ZXJhY3Rpb24vcXRpLXNsaWRlci1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1jdXN0b20tb3BlcmF0b3IvcXRpLWN1c3RvbS1vcGVyYXRvci50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktYXNzb2NpYWJsZS1ob3RzcG90LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1nYXAudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWdhcC1pbWcudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWdhcC10ZXh0LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1ob3RzcG90LWNob2ljZS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktaG90dGV4dC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktaW5saW5lLWNob2ljZS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktc2ltcGxlLWNob2ljZS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBwcm92aWRlIH0gZnJvbSAnQGxpdC9jb250ZXh0JztcbmltcG9ydCB7IExpdEVsZW1lbnQsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyB3YXRjaCB9IGZyb20gJy4uLy4uL2RlY29yYXRvcnMvd2F0Y2gnO1xuaW1wb3J0IHR5cGUgeyBJbnRlcmFjdGlvbkNoYW5nZWREZXRhaWxzLCBPdXRjb21lQ2hhbmdlZERldGFpbHMgfSBmcm9tICcuLi9pbnRlcm5hbC9ldmVudC10eXBlcyc7XG5pbXBvcnQgdHlwZSB7IFJlc3BvbnNlSW50ZXJhY3Rpb24gfSBmcm9tICcuLi9pbnRlcm5hbC9leHByZXNzaW9uLXJlc3VsdCc7XG5pbXBvcnQgdHlwZSB7IFZhcmlhYmxlRGVjbGFyYXRpb24sIFZhcmlhYmxlVmFsdWUgfSBmcm9tICcuLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgT3V0Y29tZVZhcmlhYmxlLCBSZXNwb25zZVZhcmlhYmxlIH0gZnJvbSAnLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB0eXBlIHsgUXRpRmVlZGJhY2sgfSBmcm9tICcuLi9xdGktZmVlZGJhY2svcXRpLWZlZWRiYWNrJztcbmltcG9ydCB0eXBlIHsgSW50ZXJhY3Rpb24gfSBmcm9tICcuLi9xdGktaW50ZXJhY3Rpb24vaW50ZXJuYWwvaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24nO1xuaW1wb3J0IHR5cGUgeyBRdGlSZXNwb25zZVByb2Nlc3NpbmcgfSBmcm9tICcuLi9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZyc7XG5pbXBvcnQgeyBJdGVtQ29udGV4dCwgaXRlbUNvbnRleHQsIGl0ZW1Db250ZXh0VmFyaWFibGVzIH0gZnJvbSAnLi9xdGktYXNzZXNzbWVudC1pdGVtLmNvbnRleHQnO1xuXG4vKipcbiAqIEBzdW1tYXJ5IFRoZSBxdGktYXNzZXNzbWVudC1pdGVtIGVsZW1lbnQgY29udGFpbnMgYWxsIHRoZSBvdGhlciBRVEkgMyBpdGVtIHN0cnVjdHVyZXMuXG4gKiBAZG9jdW1lbnRhdGlvbiBodHRwczovL3d3dy5pbXNnbG9iYWwub3JnL3NwZWMvcXRpL3YzcDAvaW1wbCNoLmRsdG5uajg3bDB5alxuICogQHN0YXR1cyBzdGFibGVcbiAqIEBzaW5jZSA0LjBcbiAqXG4gKiBAZGVwZW5kZW5jeSBxdGktZmVlZGJhY2tcbiAqIEBkZXBlbmRlbmN5IHF0aS1yZXNwb25zZXByb2Nlc3NpbmdcbiAqXG4gKiBAc2xvdCAtIFRoZSBkZWZhdWx0IHNsb3Qgd2hlcmUgYWxsIHRoZSBvdGhlciBRVEkgMyBpdGVtIHN0cnVjdHVyZXMgZ28uXG4gKlxuICogQGV2ZW50IHF0aS1pbnRlcmFjdGlvbi1jaGFuZ2VkIC0gRW1pdHRlZCB3aGVuIGFuIGludGVyYWN0aW9uIGlzIGNoYW5nZWQuXG4gKiBAZXZlbnQgcXRpLW91dGNvbWUtY2hhbmdlZCAtIEVtaXR0ZWQgd2hlbiBhbiBvdXRjb21lIGhhcyBjaGFuZ2VkLlxuICogQGV2ZW50IHF0aS1yZXNwb25zZS1wcm9jZXNzaW5nIC0gRW1pdHRlZCB3aGVuIHJlc3BvbnNlLXByb2Nlc3NpbmcgaXMgY2FsbGVkLlxuICpcbiAqL1xuQGN1c3RvbUVsZW1lbnQoJ3F0aS1hc3Nlc3NtZW50LWl0ZW0nKVxuZXhwb3J0IGNsYXNzIFF0aUFzc2Vzc21lbnRJdGVtIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KSB0aXRsZTogc3RyaW5nO1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgaWRlbnRpZmllcjogc3RyaW5nID0gJyc7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KSBhZGFwdGl2ZTogJ3RydWUnIHwgJ2ZhbHNlJyA9ICdmYWxzZSc7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KSB0aW1lRGVwZW5kZW50OiAndHJ1ZScgfCAnZmFsc2UnID0gJ2ZhbHNlJztcblxuICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuIH0pIGRpc2FibGVkOiBib29sZWFuO1xuICBAd2F0Y2goJ2Rpc2FibGVkJywgeyB3YWl0VW50aWxGaXJzdFVwZGF0ZTogdHJ1ZSB9KVxuICBfaGFuZGxlRGlzYWJsZWRDaGFuZ2UgPSAoXzogYm9vbGVhbiwgZGlzYWJsZWQ6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLl9pbnRlcmFjdGlvbkVsZW1lbnRzLmZvckVhY2goY2ggPT4gKGNoLmRpc2FibGVkID0gZGlzYWJsZWQpKTtcbiAgfTtcblxuICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuIH0pIHJlYWRvbmx5OiBib29sZWFuO1xuICBAd2F0Y2goJ3JlYWRvbmx5JywgeyB3YWl0VW50aWxGaXJzdFVwZGF0ZTogdHJ1ZSB9KVxuICBfaGFuZGxlUmVhZG9ubHlDaGFuZ2UgPSAoXzogYm9vbGVhbiwgcmVhZG9ubHk6IGJvb2xlYW4pID0+XG4gICAgdGhpcy5faW50ZXJhY3Rpb25FbGVtZW50cy5mb3JFYWNoKGNoID0+IChjaC5yZWFkb25seSA9IHJlYWRvbmx5KSk7XG5cbiAgQHByb3ZpZGUoeyBjb250ZXh0OiBpdGVtQ29udGV4dCB9KVxuICAvLyBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6IGZhbHNlIH0pXG4gIHByaXZhdGUgX2NvbnRleHQ6IEl0ZW1Db250ZXh0ID0ge1xuICAgIGlkZW50aWZpZXI6IHRoaXMuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJyksXG4gICAgdmFyaWFibGVzOiBpdGVtQ29udGV4dFZhcmlhYmxlc1xuICB9O1xuXG4gIHB1YmxpYyBnZXQgdmFyaWFibGVzKCk6IFZhcmlhYmxlVmFsdWU8c3RyaW5nIHwgc3RyaW5nW10gfCBudWxsPltdIHtcbiAgICByZXR1cm4gdGhpcy5fY29udGV4dC52YXJpYWJsZXMubWFwKHYgPT4gKHsgaWRlbnRpZmllcjogdi5pZGVudGlmaWVyLCB2YWx1ZTogdi52YWx1ZSwgdHlwZTogdi50eXBlIH0pKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgdmFyaWFibGVzKHZhbHVlOiBWYXJpYWJsZVZhbHVlPHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbD5bXSkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgdmFsdWUuc29tZSh2ID0+ICEoJ2lkZW50aWZpZXInIGluIHYpKSkge1xuICAgICAgY29uc29sZS53YXJuKCd2YXJpYWJsZXMgcHJvcGVydHkgc2hvdWxkIGJlIGFuIGFycmF5IG9mIFZhcmlhYmxlRGVjbGFyYXRpb24nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9jb250ZXh0ID0ge1xuICAgICAgLi4udGhpcy5fY29udGV4dCxcbiAgICAgIHZhcmlhYmxlczogdGhpcy5fY29udGV4dC52YXJpYWJsZXMubWFwKHZhcmlhYmxlID0+IHtcbiAgICAgICAgY29uc3QgbWF0Y2hpbmdWYWx1ZSA9IHZhbHVlLmZpbmQodiA9PiB2LmlkZW50aWZpZXIgPT09IHZhcmlhYmxlLmlkZW50aWZpZXIpO1xuICAgICAgICBpZiAobWF0Y2hpbmdWYWx1ZSkge1xuICAgICAgICAgIHJldHVybiB7IC4uLnZhcmlhYmxlLCAuLi5tYXRjaGluZ1ZhbHVlIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhcmlhYmxlO1xuICAgICAgfSlcbiAgICB9O1xuXG4gICAgdGhpcy5fY29udGV4dC52YXJpYWJsZXMuZm9yRWFjaCh2YXJpYWJsZSA9PiB7XG4gICAgICBpZiAodmFyaWFibGUudHlwZSA9PT0gJ3Jlc3BvbnNlJykge1xuICAgICAgICBjb25zdCBpbnRlcmFjdGlvbkVsZW1lbnQgPSB0aGlzLl9pbnRlcmFjdGlvbkVsZW1lbnRzLmZpbmQoXG4gICAgICAgICAgKGVsOiBJbnRlcmFjdGlvbikgPT4gZWwucmVzcG9uc2VJZGVudGlmaWVyID09PSB2YXJpYWJsZS5pZGVudGlmaWVyXG4gICAgICAgICk7XG4gICAgICAgIGlmIChpbnRlcmFjdGlvbkVsZW1lbnQpIHtcbiAgICAgICAgICBpbnRlcmFjdGlvbkVsZW1lbnQucmVzcG9uc2UgPSB2YXJpYWJsZS52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodmFyaWFibGUudHlwZSA9PT0gJ291dGNvbWUnKSB7XG4gICAgICAgIHRoaXMuX2ZlZWRiYWNrRWxlbWVudHMuZm9yRWFjaChmZSA9PiBmZS5jaGVja1Nob3dGZWVkYmFjayh2YXJpYWJsZS5pZGVudGlmaWVyKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9pbml0aWFsQ29udGV4dDogUmVhZG9ubHk8SXRlbUNvbnRleHQ+ID0geyAuLi50aGlzLl9jb250ZXh0LCB2YXJpYWJsZXM6IHRoaXMuX2NvbnRleHQudmFyaWFibGVzIH07XG4gIHByaXZhdGUgX2ZlZWRiYWNrRWxlbWVudHM6IFF0aUZlZWRiYWNrW10gPSBbXTtcbiAgcHJpdmF0ZSBfaW50ZXJhY3Rpb25FbGVtZW50czogSW50ZXJhY3Rpb25bXSA9IFtdO1xuXG4gIGFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTtcbiAgICB0aGlzLl9lbWl0PHsgZGV0YWlsOiBRdGlBc3Nlc3NtZW50SXRlbSB9PigncXRpLWFzc2Vzc21lbnQtaXRlbS1jb25uZWN0ZWQnLCB0aGlzKTtcbiAgfVxuXG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgdmFyaWFibGVzIHByb3BlcnR5IGluc3RlYWQgKi9cbiAgc2V0IHJlc3BvbnNlcyhteVJlc3BvbnNlczogUmVzcG9uc2VJbnRlcmFjdGlvbltdKSB7XG4gICAgaWYgKG15UmVzcG9uc2VzKSB7XG4gICAgICBmb3IgKGNvbnN0IHJlc3BvbnNlIG9mIG15UmVzcG9uc2VzKSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlVmFyaWFibGUgPSB0aGlzLmdldFJlc3BvbnNlKHJlc3BvbnNlLnJlc3BvbnNlSWRlbnRpZmllcik7XG4gICAgICAgIGlmIChyZXNwb25zZVZhcmlhYmxlKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVSZXNwb25zZVZhcmlhYmxlKHJlc3BvbnNlLnJlc3BvbnNlSWRlbnRpZmllciwgcmVzcG9uc2UucmVzcG9uc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW50ZXJhY3Rpb246IEludGVyYWN0aW9uIHwgdW5kZWZpbmVkID0gdGhpcy5faW50ZXJhY3Rpb25FbGVtZW50cy5maW5kKFxuICAgICAgICAgIGkgPT4gaS5nZXRBdHRyaWJ1dGUoJ3Jlc3BvbnNlLWlkZW50aWZpZXInKSA9PT0gcmVzcG9uc2UucmVzcG9uc2VJZGVudGlmaWVyXG4gICAgICAgICk7XG4gICAgICAgIGlmIChpbnRlcmFjdGlvbikge1xuICAgICAgICAgIGludGVyYWN0aW9uLnJlc3BvbnNlID0gcmVzcG9uc2UucmVzcG9uc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPHNsb3Q+PC9zbG90PmA7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigncXRpLXJlZ2lzdGVyLXZhcmlhYmxlJywgZSA9PiB7XG4gICAgICB0aGlzLl9jb250ZXh0ID0geyAuLi50aGlzLl9jb250ZXh0LCB2YXJpYWJsZXM6IFsuLi50aGlzLl9jb250ZXh0LnZhcmlhYmxlcywgZS5kZXRhaWwudmFyaWFibGVdIH07XG4gICAgICB0aGlzLl9pbml0aWFsQ29udGV4dCA9IHRoaXMuX2NvbnRleHQ7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigncXRpLXJlZ2lzdGVyLWZlZWRiYWNrJywgKGU6IEN1c3RvbUV2ZW50PFF0aUZlZWRiYWNrPikgPT4ge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGNvbnN0IGZlZWRiYWNrRWxlbWVudCA9IGUuZGV0YWlsO1xuICAgICAgdGhpcy5fZmVlZGJhY2tFbGVtZW50cy5wdXNoKGZlZWRiYWNrRWxlbWVudCk7XG4gICAgICBmZWVkYmFja0VsZW1lbnQuY2hlY2tTaG93RmVlZGJhY2soZmVlZGJhY2tFbGVtZW50Lm91dGNvbWVJZGVudGlmaWVyKTtcbiAgICB9KTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci1pbnRlcmFjdGlvbicsIChlOiBDdXN0b21FdmVudDxudWxsPikgPT4ge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMuX2ludGVyYWN0aW9uRWxlbWVudHMucHVzaChlLnRhcmdldCBhcyBJbnRlcmFjdGlvbik7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdlbmQtYXR0ZW1wdCcsIChlOiBDdXN0b21FdmVudDx7IHJlc3BvbnNlSWRlbnRpZmllcjogc3RyaW5nOyBjb3VudEF0dGVtcHQ6IGJvb2xlYW4gfT4pID0+IHtcbiAgICAgIGNvbnN0IHsgcmVzcG9uc2VJZGVudGlmaWVyLCBjb3VudEF0dGVtcHQgfSA9IGUuZGV0YWlsO1xuICAgICAgdGhpcy51cGRhdGVSZXNwb25zZVZhcmlhYmxlKHJlc3BvbnNlSWRlbnRpZmllciwgJ3RydWUnKTtcbiAgICAgIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKGNvdW50QXR0ZW1wdCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAvLyB3b3JkdCBhYW5nZXJvZXBlbiB2YW51aXQgZGUgcHJvY2Vzc2luZ3RlbXBsYXRlXG4gICAgICAncXRpLXNldC1vdXRjb21lLXZhbHVlJyxcbiAgICAgIChlOiBDdXN0b21FdmVudDx7IG91dGNvbWVJZGVudGlmaWVyOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSB9PikgPT4ge1xuICAgICAgICBjb25zdCB7IG91dGNvbWVJZGVudGlmaWVyLCB2YWx1ZSB9ID0gZS5kZXRhaWw7XG4gICAgICAgIHRoaXMudXBkYXRlT3V0Y29tZVZhcmlhYmxlKG91dGNvbWVJZGVudGlmaWVyLCB2YWx1ZSk7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigncXRpLWludGVyYWN0aW9uLXJlc3BvbnNlJywgdGhpcy5oYW5kbGVVcGRhdGVSZXNwb25zZVZhcmlhYmxlKTtcbiAgfVxuXG4gIHB1YmxpYyBzaG93Q29ycmVjdFJlc3BvbnNlKHNob3c6IGJvb2xlYW4pIHtcbiAgICBjb25zdCByZXNwb25zZVZhcmlhYmxlcyA9IHRoaXMuX2NvbnRleHQudmFyaWFibGVzLmZpbHRlcihcbiAgICAgICh2YXJpOiBSZXNwb25zZVZhcmlhYmxlIHwgT3V0Y29tZVZhcmlhYmxlKSA9PiAnY29ycmVjdFJlc3BvbnNlJyBpbiB2YXJpICYmIHZhcmkuY29ycmVjdFJlc3BvbnNlXG4gICAgKSBhcyBSZXNwb25zZVZhcmlhYmxlW107XG4gICAgY29uc3QgcmVzcG9uc2VzID0gcmVzcG9uc2VWYXJpYWJsZXMubWFwKGNyID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlc3BvbnNlSWRlbnRpZmllcjogY3IuaWRlbnRpZmllcixcbiAgICAgICAgcmVzcG9uc2U6IGNyLmNvcnJlY3RSZXNwb25zZVxuICAgICAgfTtcbiAgICB9KTtcbiAgICBmb3IgKGNvbnN0IHJlc3BvbnNlIG9mIHJlc3BvbnNlcykge1xuICAgICAgY29uc3QgaW50ZXJhY3Rpb246IEludGVyYWN0aW9uIHwgdW5kZWZpbmVkID0gdGhpcy5faW50ZXJhY3Rpb25FbGVtZW50cy5maW5kKFxuICAgICAgICBpID0+IGkuZ2V0QXR0cmlidXRlKCdyZXNwb25zZS1pZGVudGlmaWVyJykgPT09IHJlc3BvbnNlLnJlc3BvbnNlSWRlbnRpZmllclxuICAgICAgKTtcbiAgICAgIGludGVyYWN0aW9uICYmIChpbnRlcmFjdGlvbi5jb3JyZWN0UmVzcG9uc2UgPSBzaG93ID8gcmVzcG9uc2UucmVzcG9uc2UgOiAnJyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHByb2Nlc3NSZXNwb25zZShjb3VudE51bUF0dGVtcHRzOiBib29sZWFuID0gdHJ1ZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJlc3BvbnNlUHJvY2Vzc29yID0gdGhpcy5xdWVyeVNlbGVjdG9yKCdxdGktcmVzcG9uc2UtcHJvY2Vzc2luZycpIGFzIHVua25vd24gYXMgUXRpUmVzcG9uc2VQcm9jZXNzaW5nO1xuICAgIGlmICghcmVzcG9uc2VQcm9jZXNzb3IpIHtcbiAgICAgIC8vIGNvbnNvbGUuaW5mbygnQ2xpZW50IHNpZGUgcmVzcG9uc2UgcHJvY2Vzc2luZyB0ZW1wbGF0ZSBub3QgYXZhaWxhYmxlJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCFyZXNwb25zZVByb2Nlc3Nvci5wcm9jZXNzKSB7XG4gICAgICAvLyBjb25zb2xlLmluZm8oJ0NsaWVudCBzaWRlIHJlc3BvbnNlIHdlYmNvbXBvbmVudHMgbm90IGF2YWlsYWJsZScpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJlc3BvbnNlUHJvY2Vzc29yLnByb2Nlc3MoKTtcblxuICAgIGlmICh0aGlzLmFkYXB0aXZlID09PSAnZmFsc2UnKSB7XG4gICAgICAvLyBpZiBhZGFwYXRpdmUsIGNvbXBsZXRpb25TdGF0dXMgaXMgc2V0IGJ5IHRoZSBwcm9jZXNzaW5nIHRlbXBsYXRlXG4gICAgICB0aGlzLnVwZGF0ZU91dGNvbWVWYXJpYWJsZSgnY29tcGxldGlvblN0YXR1cycsIHRoaXMuX2dldENvbXBsZXRpb25TdGF0dXMoKSk7XG4gICAgfVxuXG4gICAgY291bnROdW1BdHRlbXB0cyAmJlxuICAgICAgdGhpcy51cGRhdGVPdXRjb21lVmFyaWFibGUoXG4gICAgICAgICdudW1BdHRlbXB0cycsXG4gICAgICAgICgrdGhpcy5fY29udGV4dC52YXJpYWJsZXMuZmluZCh2ID0+IHYuaWRlbnRpZmllciA9PT0gJ251bUF0dGVtcHRzJyk/LnZhbHVlICsgMSkudG9TdHJpbmcoKVxuICAgICAgKTtcblxuICAgIHRoaXMuX2VtaXQoJ3F0aS1yZXNwb25zZS1wcm9jZXNzZWQnKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldFJlc3BvbnNlcygpIHtcbiAgICB0aGlzLl9jb250ZXh0ID0gdGhpcy5faW5pdGlhbENvbnRleHQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0UmVzcG9uc2UoaWRlbnRpZmllcjogc3RyaW5nKTogUmVhZG9ubHk8UmVzcG9uc2VWYXJpYWJsZT4ge1xuICAgIHJldHVybiB0aGlzLmdldFZhcmlhYmxlKGlkZW50aWZpZXIpIGFzIFJlc3BvbnNlVmFyaWFibGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0T3V0Y29tZShpZGVudGlmaWVyOiBzdHJpbmcpOiBSZWFkb25seTxPdXRjb21lVmFyaWFibGU+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYXJpYWJsZShpZGVudGlmaWVyKSBhcyBPdXRjb21lVmFyaWFibGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0VmFyaWFibGUoaWRlbnRpZmllcjogc3RyaW5nKTogUmVhZG9ubHk8VmFyaWFibGVEZWNsYXJhdGlvbjxzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGw+PiB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRleHQudmFyaWFibGVzLmZpbmQodiA9PiB2LmlkZW50aWZpZXIgPT09IGlkZW50aWZpZXIpIHx8IG51bGw7XG4gIH1cblxuICAvLyBzYXZpbmcgcHJpdmF0ZXMgaGVyZTogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgcHJpdmF0ZSBoYW5kbGVVcGRhdGVSZXNwb25zZVZhcmlhYmxlKGV2ZW50OiBDdXN0b21FdmVudDxSZXNwb25zZUludGVyYWN0aW9uPikge1xuICAgIGNvbnN0IHsgcmVzcG9uc2VJZGVudGlmaWVyLCByZXNwb25zZSB9ID0gZXZlbnQuZGV0YWlsO1xuICAgIHRoaXMudXBkYXRlUmVzcG9uc2VWYXJpYWJsZShyZXNwb25zZUlkZW50aWZpZXIsIHJlc3BvbnNlKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVSZXNwb25zZVZhcmlhYmxlKGlkZW50aWZpZXI6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fY29udGV4dCA9IHtcbiAgICAgIC4uLnRoaXMuX2NvbnRleHQsXG4gICAgICB2YXJpYWJsZXM6IHRoaXMuX2NvbnRleHQudmFyaWFibGVzLm1hcCh2ID0+ICh2LmlkZW50aWZpZXIgIT09IGlkZW50aWZpZXIgPyB2IDogeyAuLi52LCB2YWx1ZTogdmFsdWUgfSkpXG4gICAgfTtcblxuICAgIHRoaXMuX2VtaXQ8SW50ZXJhY3Rpb25DaGFuZ2VkRGV0YWlscz4oJ3F0aS1pbnRlcmFjdGlvbi1jaGFuZ2VkJywge1xuICAgICAgaXRlbTogdGhpcy5pZGVudGlmaWVyLFxuICAgICAgcmVzcG9uc2VJZGVudGlmaWVyOiBpZGVudGlmaWVyLFxuICAgICAgcmVzcG9uc2U6IHZhbHVlXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5hZGFwdGl2ZSA9PT0gJ2ZhbHNlJykge1xuICAgICAgLy8gaWYgYWRhcGF0aXZlLCBjb21wbGV0aW9uU3RhdHVzIGlzIHNldCBieSB0aGUgcHJvY2Vzc2luZyB0ZW1wbGF0ZVxuICAgICAgdGhpcy51cGRhdGVPdXRjb21lVmFyaWFibGUoJ2NvbXBsZXRpb25TdGF0dXMnLCB0aGlzLl9nZXRDb21wbGV0aW9uU3RhdHVzKCkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVPdXRjb21lVmFyaWFibGUoaWRlbnRpZmllcjogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBvdXRjb21lVmFyaWFibGUgPSB0aGlzLmdldE91dGNvbWUoaWRlbnRpZmllcik7XG4gICAgaWYgKCFvdXRjb21lVmFyaWFibGUpIHtcbiAgICAgIGNvbnNvbGUud2FybihgQ2FuIG5vdCBzZXQgcXRpLW91dGNvbWUtaWRlbnRpZmllcjogJHtpZGVudGlmaWVyfSwgaXQgaXMgbm90IGF2YWlsYWJsZWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2NvbnRleHQgPSB7XG4gICAgICAuLi50aGlzLl9jb250ZXh0LFxuICAgICAgdmFyaWFibGVzOiB0aGlzLl9jb250ZXh0LnZhcmlhYmxlcy5tYXAodiA9PiB7XG4gICAgICAgIGlmICh2LmlkZW50aWZpZXIgIT09IGlkZW50aWZpZXIpIHtcbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnYsXG4gICAgICAgICAgdmFsdWU6IG91dGNvbWVWYXJpYWJsZS5jYXJkaW5hbGl0eSA9PT0gJ3NpbmdsZScgPyB2YWx1ZSA6IFsuLi52LnZhbHVlLCB2YWx1ZSBhcyBzdHJpbmddXG4gICAgICAgIH07XG4gICAgICB9KVxuICAgIH07XG5cbiAgICB0aGlzLl9mZWVkYmFja0VsZW1lbnRzLmZvckVhY2goZmUgPT4gZmUuY2hlY2tTaG93RmVlZGJhY2soaWRlbnRpZmllcikpO1xuXG4gICAgdGhpcy5fZW1pdDxPdXRjb21lQ2hhbmdlZERldGFpbHM+KCdxdGktb3V0Y29tZS1jaGFuZ2VkJywge1xuICAgICAgaXRlbTogdGhpcy5pZGVudGlmaWVyLFxuICAgICAgb3V0Y29tZUlkZW50aWZpZXI6IGlkZW50aWZpZXIsXG4gICAgICB2YWx1ZTogdGhpcy5fY29udGV4dC52YXJpYWJsZXMuZmluZCh2ID0+IHYuaWRlbnRpZmllciA9PT0gaWRlbnRpZmllcik/LnZhbHVlXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9nZXRDb21wbGV0aW9uU3RhdHVzKCk6ICdjb21wbGV0ZWQnIHwgJ2luY29tcGxldGUnIHwgJ25vdF9hdHRlbXB0ZWQnIHwgJ3Vua25vd24nIHtcbiAgICBpZiAodGhpcy5faW50ZXJhY3Rpb25FbGVtZW50cy5ldmVyeShpbnRlcmFjdGlvbkVsZW1lbnQgPT4gaW50ZXJhY3Rpb25FbGVtZW50LnZhbGlkYXRlKCkpKSByZXR1cm4gJ2NvbXBsZXRlZCc7XG4gICAgaWYgKHRoaXMuX2ludGVyYWN0aW9uRWxlbWVudHMuc29tZShpbnRlcmFjdGlvbkVsZW1lbnQgPT4gaW50ZXJhY3Rpb25FbGVtZW50LnZhbGlkYXRlKCkpKSByZXR1cm4gJ2luY29tcGxldGUnO1xuICAgIHJldHVybiAnbm90X2F0dGVtcHRlZCc7XG4gIH1cblxuICBwcml2YXRlIF9lbWl0PFQ+KG5hbWUsIGRldGFpbCA9IG51bGwpIHtcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQ8VD4obmFtZSwge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgICAgZGV0YWlsXG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWFzc2Vzc21lbnQtaXRlbSc6IFF0aUFzc2Vzc21lbnRJdGVtO1xuICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcblxudHlwZSBVcGRhdGVIYW5kbGVyID0gKHByZXY/OiB1bmtub3duLCBuZXh0PzogdW5rbm93bikgPT4gdm9pZDtcblxudHlwZSBOb25VbmRlZmluZWQ8QT4gPSBBIGV4dGVuZHMgdW5kZWZpbmVkID8gbmV2ZXIgOiBBO1xuXG50eXBlIFVwZGF0ZUhhbmRsZXJGdW5jdGlvbktleXM8VCBleHRlbmRzIG9iamVjdD4gPSB7XG4gIFtLIGluIGtleW9mIFRdLT86IE5vblVuZGVmaW5lZDxUW0tdPiBleHRlbmRzIFVwZGF0ZUhhbmRsZXIgPyBLIDogbmV2ZXI7XG59W2tleW9mIFRdO1xuXG5pbnRlcmZhY2UgV2F0Y2hPcHRpb25zIHtcbiAgLyoqXG4gICAqIElmIHRydWUsIHdpbGwgb25seSBzdGFydCB3YXRjaGluZyBhZnRlciB0aGUgaW5pdGlhbCB1cGRhdGUvcmVuZGVyXG4gICAqL1xuICB3YWl0VW50aWxGaXJzdFVwZGF0ZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUnVucyB3aGVuIG9ic2VydmVkIHByb3BlcnRpZXMgY2hhbmdlLCBlLmcuIEBwcm9wZXJ0eSBvciBAc3RhdGUsIGJ1dCBiZWZvcmUgdGhlIGNvbXBvbmVudCB1cGRhdGVzLiBUbyB3YWl0IGZvciBhblxuICogdXBkYXRlIHRvIGNvbXBsZXRlIGFmdGVyIGEgY2hhbmdlIG9jY3VycywgdXNlIGBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlYCBpbiB0aGUgaGFuZGxlci4gVG8gc3RhcnQgd2F0Y2hpbmcgYWZ0ZXIgdGhlXG4gKiBpbml0aWFsIHVwZGF0ZS9yZW5kZXIsIHVzZSBgeyB3YWl0VW50aWxGaXJzdFVwZGF0ZTogdHJ1ZSB9YCBvciBgdGhpcy5oYXNVcGRhdGVkYCBpbiB0aGUgaGFuZGxlci5cbiAqXG4gKiBVc2FnZTpcbiAqXG4gKiBAd2F0Y2goJ3Byb3BOYW1lJylcbiAqIGhhbmRsZVByb3BDaGFuZ2Uob2xkVmFsdWUsIG5ld1ZhbHVlKSB7XG4gKiAgIC4uLlxuICogfVxuICovXG5leHBvcnQgZnVuY3Rpb24gd2F0Y2gocHJvcGVydHlOYW1lOiBzdHJpbmcgfCBzdHJpbmdbXSwgb3B0aW9ucz86IFdhdGNoT3B0aW9ucykge1xuICBjb25zdCByZXNvbHZlZE9wdGlvbnM6IFJlcXVpcmVkPFdhdGNoT3B0aW9ucz4gPSB7XG4gICAgd2FpdFVudGlsRmlyc3RVcGRhdGU6IGZhbHNlLFxuICAgIC4uLm9wdGlvbnNcbiAgfTtcbiAgcmV0dXJuIDxFbGVtQ2xhc3MgZXh0ZW5kcyBMaXRFbGVtZW50Pihwcm90bzogRWxlbUNsYXNzLCBkZWNvcmF0ZWRGbk5hbWU6IFVwZGF0ZUhhbmRsZXJGdW5jdGlvbktleXM8RWxlbUNsYXNzPikgPT4ge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSB1cGRhdGUgaXMgYSBwcm90ZWN0ZWQgcHJvcGVydHlcbiAgICBjb25zdCB7IHVwZGF0ZSB9ID0gcHJvdG87XG4gICAgY29uc3Qgd2F0Y2hlZFByb3BlcnRpZXMgPSBBcnJheS5pc0FycmF5KHByb3BlcnR5TmFtZSkgPyBwcm9wZXJ0eU5hbWUgOiBbcHJvcGVydHlOYW1lXTtcblxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSB1cGRhdGUgaXMgYSBwcm90ZWN0ZWQgcHJvcGVydHlcbiAgICBwcm90by51cGRhdGUgPSBmdW5jdGlvbiAodGhpczogRWxlbUNsYXNzLCBjaGFuZ2VkUHJvcHM6IE1hcDxrZXlvZiBFbGVtQ2xhc3MsIEVsZW1DbGFzc1trZXlvZiBFbGVtQ2xhc3NdPikge1xuICAgICAgd2F0Y2hlZFByb3BlcnRpZXMuZm9yRWFjaChwcm9wZXJ0eSA9PiB7XG4gICAgICAgIGNvbnN0IGtleSA9IHByb3BlcnR5IGFzIGtleW9mIEVsZW1DbGFzcztcbiAgICAgICAgaWYgKGNoYW5nZWRQcm9wcy5oYXMoa2V5KSkge1xuICAgICAgICAgIGNvbnN0IG9sZFZhbHVlID0gY2hhbmdlZFByb3BzLmdldChrZXkpO1xuICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpc1trZXldO1xuXG4gICAgICAgICAgaWYgKG9sZFZhbHVlICE9PSBuZXdWYWx1ZSkge1xuICAgICAgICAgICAgaWYgKCFyZXNvbHZlZE9wdGlvbnMud2FpdFVudGlsRmlyc3RVcGRhdGUgfHwgdGhpcy5oYXNVcGRhdGVkKSB7XG4gICAgICAgICAgICAgICh0aGlzW2RlY29yYXRlZEZuTmFtZV0gYXMgdW5rbm93biBhcyBVcGRhdGVIYW5kbGVyKShvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHVwZGF0ZS5jYWxsKHRoaXMsIGNoYW5nZWRQcm9wcyk7XG4gICAgfTtcbiAgfTtcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAnQGxpdC9jb250ZXh0JztcbmltcG9ydCB7IFZhcmlhYmxlRGVjbGFyYXRpb24gfSBmcm9tICcuLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEl0ZW1Db250ZXh0IHtcbiAgaHJlZj86IHN0cmluZztcbiAgaWRlbnRpZmllcjogc3RyaW5nO1xuICB2YXJpYWJsZXM6IFJlYWRvbmx5QXJyYXk8VmFyaWFibGVEZWNsYXJhdGlvbjxzdHJpbmcgfCBzdHJpbmdbXT4+O1xufVxuXG5leHBvcnQgY29uc3QgaXRlbUNvbnRleHRWYXJpYWJsZXMgPSBbXG4gIHtcbiAgICBpZGVudGlmaWVyOiAnY29tcGxldGlvblN0YXR1cycsXG4gICAgY2FyZGluYWxpdHk6ICdzaW5nbGUnLFxuICAgIGJhc2VUeXBlOiAnc3RyaW5nJyxcbiAgICB2YWx1ZTogJ3Vua25vd24nLFxuICAgIHR5cGU6ICdvdXRjb21lJ1xuICB9LFxuICB7XG4gICAgaWRlbnRpZmllcjogJ251bUF0dGVtcHRzJyxcbiAgICBjYXJkaW5hbGl0eTogJ3NpbmdsZScsXG4gICAgYmFzZVR5cGU6ICdpbnRlZ2VyJyxcbiAgICB2YWx1ZTogJzAnLFxuICAgIHR5cGU6ICdyZXNwb25zZSdcbiAgfVxuXSBhcyBWYXJpYWJsZURlY2xhcmF0aW9uPHN0cmluZyB8IHN0cmluZ1tdPltdO1xuXG5leHBvcnQgY29uc3QgaXRlbUNvbnRleHQgPSBjcmVhdGVDb250ZXh0PEl0ZW1Db250ZXh0PignaXRlbScpO1xuIiwgImltcG9ydCB7IExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBxdGlUcmFuc2Zvcm1JdGVtIH0gZnJvbSAnLi4vLi4vcXRpLXRyYW5zZm9ybWVycyc7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGN1c3RvbSBlbGVtZW50IGZvciByZWZlcmVuY2luZyBhbiBhc3Nlc3NtZW50IHN0aW11bHVzLlxuICovXG5AY3VzdG9tRWxlbWVudCgncXRpLWFzc2Vzc21lbnQtc3RpbXVsdXMtcmVmJylcbmV4cG9ydCBjbGFzcyBRdGlBc3Nlc3NtZW50U3RpbXVsdXNSZWYgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgLyoqXG4gICAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBzdGltdWx1cy5cbiAgICovXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KSBpZGVudGlmaWVyID0gJyc7XG5cbiAgLyoqXG4gICAqIFRoZSBocmVmIG9mIHRoZSBzdGltdWx1cy5cbiAgICovXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KSBocmVmID0gJyc7XG5cbiAgLyoqXG4gICAqIExpZmVjeWNsZSBtZXRob2QgY2FsbGVkIHdoZW4gdGhlIGVsZW1lbnQgaXMgY29ubmVjdGVkIHRvIHRoZSBET00uXG4gICAqIExvYWRzIGFuZCBhcHBlbmRzIHRoZSBzdGltdWx1cyBpZiB0aGUgJ3F0aS1hc3Nlc3NtZW50LXN0aW11bHVzLXJlZi1jb25uZWN0ZWQnIGV2ZW50IGlzIG5vdCBwcmV2ZW50ZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuICAgIGNvbnN0IGV2ZW50ID0gbmV3IEV2ZW50KCdxdGktYXNzZXNzbWVudC1zdGltdWx1cy1yZWYtY29ubmVjdGVkJywgeyBjYW5jZWxhYmxlOiB0cnVlLCBidWJibGVzOiB0cnVlIH0pO1xuICAgIGNvbnN0IGlzUHJldmVudGVkID0gdGhpcy5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcblxuICAgIGlmIChpc1ByZXZlbnRlZCkge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuY2xvc2VzdCgncXRpLWFzc2Vzc21lbnQtaXRlbScpO1xuXG4gICAgICBjb25zdCBzdGltdWx1c1JlZiA9IGl0ZW0ucXVlcnlTZWxlY3RvcihgW2RhdGEtc3RpbXVsdXMtaWRyZWY9JHt0aGlzLmlkZW50aWZpZXJ9XWApO1xuICAgICAgaWYgKHN0aW11bHVzUmVmKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZEFuZEFwcGVuZFN0aW11bHVzKHN0aW11bHVzUmVmKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgU3RpbXVsdXMgd2l0aCBkYXRhLXN0aW11bHVzLWlkcmVmICR7dGhpcy5pZGVudGlmaWVyfSBub3QgZm91bmRgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgYW5kIGFwcGVuZHMgdGhlIHN0aW11bHVzIHRvIHRoZSBzcGVjaWZpZWQgZWxlbWVudC5cbiAgICogQHBhcmFtIHN0aW11bHVzUmVmIC0gVGhlIGVsZW1lbnQgdG8gd2hpY2ggdGhlIHN0aW11bHVzIHdpbGwgYmUgYXBwZW5kZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbG9hZEFuZEFwcGVuZFN0aW11bHVzKHN0aW11bHVzUmVmOiBFbGVtZW50KSB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuaHJlZi5zdWJzdHJpbmcoMCwgdGhpcy5ocmVmLmxhc3RJbmRleE9mKCcvJykpO1xuICAgIGNvbnN0IHN0aW11bHVzID0gYXdhaXQgcXRpVHJhbnNmb3JtSXRlbSgpXG4gICAgICAubG9hZCh0aGlzLmhyZWYpXG4gICAgICAudGhlbihhcGkgPT4gYXBpLnBhdGgocGF0aCkuaHRtbGRvYygpKTtcbiAgICBpZiAoc3RpbXVsdXMpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnRzID0gc3RpbXVsdXMucXVlcnlTZWxlY3RvckFsbCgncXRpLXN0aW11bHVzLWJvZHksIHF0aS1zdHlsZXNoZWV0Jyk7XG4gICAgICBzdGltdWx1c1JlZi5hcHBlbmQoLi4uZWxlbWVudHMpO1xuICAgIH1cbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktYXNzZXNzbWVudC1zdGltdWx1cy1yZWYnOiBRdGlBc3Nlc3NtZW50U3RpbXVsdXNSZWY7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50LCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgd2F0Y2ggfSBmcm9tICcuLi8uLi8uLi8uLi9kZWNvcmF0b3JzL3dhdGNoJztcblxuY29uc3QgS0VZQ09ERSA9IHtcbiAgU1BBQ0U6IDMyXG59O1xuXG4vKipcbiAqIEBzdW1tYXJ5IHF0aS1jaG9pY2UgaXMgdXNlZCBieSBxdGktc2ltcGxlLWNob2ljZSwgcXRpLWlubGluZS1jaG9pY2UsIHF0aS1ob3R0ZXh0LCBxdGktaG90c3BvdC1jaG9pY2UuXG4gKlxuICogQHNpbmNlIDEuMFxuICogQHN0YXR1cyBzdGFibGVcbiAqXG4gKiBAZXZlbnQgcXRpLXJlZ2lzdGVyLWNob2ljZSAtIHJlZ2lzdGVyIGl0c2VsdmVzIG9uIGEgcXRpLWNob2ljZS1pbnRlcmFjdGlvbiBlbGVtZW50LlxuICogQGV2ZW50IHF0aS1sb29zZS1jaG9pY2UgLSBkZS1yZWdpc3RlciBpdHNlbHZlcyBvbiBhIHF0aS1jaG9pY2UtaW50ZXJhY3Rpb24gZWxlbWVudC5cbiAqIEBldmVudCBxdGktY2hvaWNlLWVsZW1lbnQtc2VsZWN0ZWQgLSBFbWl0dGVkIHdoZW4gdGhlIGNob2ljZSBpcyBzZWxlY3RlZC5cbiAqXG4gKiBAc2xvdCAtIFRoZSBjaG9pY2VzIHNsb3QgZWxlbWVudFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUXRpQ2hvaWNlIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KSBpZGVudGlmaWVyOiBzdHJpbmc7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogTnVtYmVyLCByZWZsZWN0OiB0cnVlIH0pIHRhYmluZGV4OiBudW1iZXIgfCB1bmRlZmluZWQgPSAwO1xuXG4gIEBwcm9wZXJ0eSh7XG4gICAgcmVmbGVjdDogdHJ1ZSxcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGF0dHJpYnV0ZTogJ2FyaWEtZGlzYWJsZWQnLFxuICAgIGNvbnZlcnRlcjoge1xuICAgICAgdG9BdHRyaWJ1dGU6IHZhbHVlID0+IHZhbHVlXG4gICAgfVxuICB9KVxuICBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gIEBwcm9wZXJ0eSh7XG4gICAgcmVmbGVjdDogdHJ1ZSxcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGF0dHJpYnV0ZTogJ2FyaWEtcmVhZG9ubHknLFxuICAgIGNvbnZlcnRlcjoge1xuICAgICAgdG9BdHRyaWJ1dGU6IHZhbHVlID0+IHZhbHVlXG4gICAgfVxuICB9KVxuICByZWFkb25seSA9IGZhbHNlO1xuXG4gIEBwcm9wZXJ0eSh7XG4gICAgcmVmbGVjdDogdHJ1ZSxcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGF0dHJpYnV0ZTogJ2FyaWEtY2hlY2tlZCcsXG4gICAgY29udmVydGVyOiB7XG4gICAgICB0b0F0dHJpYnV0ZTogdmFsdWUgPT4gdmFsdWVcbiAgICB9XG4gIH0pXG4gIGNoZWNrZWQgPSBmYWxzZTtcblxuICBAd2F0Y2goJ2Rpc2FibGVkJywgeyB3YWl0VW50aWxGaXJzdFVwZGF0ZTogdHJ1ZSB9KVxuICBoYW5kbGVEaXNhYmxlZENoYW5nZShfOiBib29sZWFuLCBkaXNhYmxlZDogYm9vbGVhbikge1xuICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgdGhpcy50YWJpbmRleCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuYmx1cigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRhYkluZGV4ID0gMDtcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX29uS2V5VXApO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkNsaWNrKTtcblxuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBDdXN0b21FdmVudCgncXRpLXJlZ2lzdGVyLWNob2ljZScsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbXBvc2VkOiB0cnVlXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5fb25LZXlVcCk7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX29uQ2xpY2spO1xuXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdxdGktbG9vc2UtY2hvaWNlJywge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWVcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldCgpIHtcbiAgICB0aGlzLmNoZWNrZWQgPSBmYWxzZTtcbiAgICB0aGlzLmRpc2FibGVkID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIF9vbktleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmFsdEtleSkgcmV0dXJuO1xuXG4gICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XG4gICAgICBjYXNlIEtFWUNPREUuU1BBQ0U6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuX3RvZ2dsZUNoZWNrZWQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfb25DbGljaygpIHtcbiAgICB0aGlzLl90b2dnbGVDaGVja2VkKCk7XG4gIH1cblxuICBwcml2YXRlIF90b2dnbGVDaGVja2VkKCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHJldHVybjtcbiAgICB0aGlzLmNoZWNrZWQgPSAhdGhpcy5jaGVja2VkO1xuXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdxdGktY2hvaWNlLWVsZW1lbnQtc2VsZWN0ZWQnLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgICAgZGV0YWlsOiB7IGlkZW50aWZpZXI6IHRoaXMuaWRlbnRpZmllciwgY2hlY2tlZDogdGhpcy5jaGVja2VkIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHZhbGlkYXRlQWxsUHJvcHMoKSB7XG4gICAgaWYgKCF0aGlzLmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgaWYgKCF0aGlzLnZhbGlkYXRlQWxsUHJvcHMoKSkge1xuICAgICAgY29uc29sZS53YXJuKGBJbnZhbGlkIHByb3BzIGZvciAke3RoaXMub3V0ZXJIVE1MfWAsIGBtaXNzaW5nIGlkZW50aWZpZXJgKTtcbiAgICB9XG4gICAgcmV0dXJuIGh0bWxgIDxzbG90Pjwvc2xvdD4gYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktY2hvaWNlJzogUXRpQ2hvaWNlO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IGh0bWwsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3F0aS1pdGVtLWJvZHkuc3R5bGVzJztcbmltcG9ydCB0eXBlIHsgQ1NTUmVzdWx0R3JvdXAgfSBmcm9tICdsaXQnO1xuXG4vKipcbiAqIEBzdW1tYXJ5IFRoZSBxdGktaXRlbS1ib2R5IG5vZGUgY29udGFpbnMgdGhlIHRleHQsIGdyYXBoaWNzLCBtZWRpYSBvYmplY3RzIGFuZCBpbnRlcmFjdGlvbnMgdGhhdCBkZXNjcmliZSB0aGUgaXRlbSdzIGNvbnRlbnQgYW5kIGluZm9ybWF0aW9uIGFib3V0IGhvdyBpdCBpcyBzdHJ1Y3R1cmVkLlxuICogQGRvY3VtZW50YXRpb24gaHR0cHM6Ly93d3cuaW1zZ2xvYmFsLm9yZy9zcGVjL3F0aS92M3AwL2ltcGwjaC5zcGhwbzZsdTZ6cWlcbiAqIEBzdGF0dXMgc3RhYmxlXG4gKiBAc2luY2UgNC4wXG4gKlxuICogQHNsb3QgLSBpdGVtIGJvZHkgY29udGVudC5cbiAqIEBzbG90IHF0aS1ydWJyaWMtYmxvY2sgLSB0aGUgcXRpIHJ1YnJpYyBibG9jayBpcyBwbGFjZWQgYWJvdmUgdGhlIGl0ZW1cbiAqXG4gKi9cbkBjdXN0b21FbGVtZW50KCdxdGktaXRlbS1ib2R5JylcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFF0aUl0ZW1Cb2R5IGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIHN0YXRpYyBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gc3R5bGVzO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdCBuYW1lPVwicXRpLXJ1YnJpYy1ibG9ja1wiPjwvc2xvdD48c2xvdD48L3Nsb3Q+YDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktaXRlbS1ib2R5JzogUXRpSXRlbUJvZHk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjc3MgfSBmcm9tICdsaXQnO1xuXG5leHBvcnQgZGVmYXVsdCBjc3NgXG4gIDpob3N0IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxuYDtcbiIsICJpbXBvcnQgeyBodG1sLCBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5AY3VzdG9tRWxlbWVudCgncXRpLXByb21wdCcpXG5leHBvcnQgY2xhc3MgUXRpUHJvbXB0IGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdD48L3Nsb3Q+YDtcbiAgfVxuXG4gIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIC8vIGlmIHByb21wdHMgYXJlIGluIGludGVyYWN0aW9ucyB0aGV5IHNob3VsZCBoYXZlIGEgc2xvdCwgc28gdGhlIHByb21wdCBoYXMgdG8gZ28gdGhlcmVcbiAgICAvLyBpZiBwcm9tcHQgaXMgaW4gdGhlIGJvZHksIHRoZW4ganVzdCBkaXNwbGF5IHRoZSBwcm9tcHQgdGhlcmUuXG4gICAgLy8gQSBiZXR0ZXIgY2hlY2sgd291bGQgYmUgdGhlIGxhdHRlciwgYnV0IG5vdCBjYW4ndCBnZXQgdGhyb3VnaCB0aGUgc2hhZG93cm9vdCB0byBmaW5kIHRoZSBzbG90XG4gICAgY29uc3QgaW5JbnRlcmFjdGlvbiA9IHRoaXMucGFyZW50RWxlbWVudC50YWdOYW1lLmVuZHNXaXRoKCdJTlRFUkFDVElPTicpO1xuICAgIGluSW50ZXJhY3Rpb24gJiYgdGhpcy5zZXRBdHRyaWJ1dGUoJ3Nsb3QnLCAncHJvbXB0Jyk7XG4gICAgLy8gY29uc3QgcHJvbXB0U2xvdCA9IHRoaXMucGFyZW50RWxlbWVudC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXCJbbmFtZT0ncHJvbXB0J11cIik7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXByb21wdCc6IFF0aVByb21wdDtcbiAgfVxufVxuIiwgImltcG9ydCB7IExpdEVsZW1lbnQsIFByb3BlcnR5VmFsdWVNYXAgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1zdHlsZXNoZWV0JylcbmV4cG9ydCBjbGFzcyBRdGlTdHlsZXNoZWV0IGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIHByaXZhdGUgc3R5bGVMaW5rOiBIVE1MU3R5bGVFbGVtZW50IHwgSFRNTExpbmtFbGVtZW50O1xuXG4gIC8vIHByb3RlY3RlZCBjcmVhdGVSZW5kZXJSb290KCk6IEhUTUxFbGVtZW50IHwgRG9jdW1lbnRGcmFnbWVudCB7XG4gIC8vICAgcmV0dXJuIHRoaXM7XG4gIC8vIH1cblxuICBwcm90ZWN0ZWQgZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZU1hcDxhbnk+IHwgTWFwPFByb3BlcnR5S2V5LCB1bmtub3duPik6IHZvaWQge1xuICAgIHN1cGVyLmZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgY29uc3QgaXRlbSA9IHRoaXM7XG4gICAgY29uc3QgbGluayA9IHRoaXMuZ2V0QXR0cmlidXRlKCdocmVmJyk7XG5cbiAgICBpZiAobGluayAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3R5bGVzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpO1xuICAgICAgc3R5bGVzLnJlbCA9ICdzdHlsZXNoZWV0JztcbiAgICAgIHN0eWxlcy50eXBlID0gJ3RleHQvY3NzJztcbiAgICAgIHN0eWxlcy5tZWRpYSA9ICdzY3JlZW4nO1xuICAgICAgc3R5bGVzLmhyZWYgPSBsaW5rO1xuICAgICAgaXRlbS5hcHBlbmRDaGlsZChzdHlsZXMpO1xuICAgICAgdGhpcy5zdHlsZUxpbmsgPSBzdHlsZXM7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGV4dENvbnRlbnQgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0eWxlcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgICBzdHlsZXMubWVkaWEgPSAnc2NyZWVuJztcbiAgICAgIHN0eWxlcy50ZXh0Q29udGVudCA9IHRoaXMudGV4dENvbnRlbnQ7XG4gICAgICBpdGVtLmFwcGVuZENoaWxkKHN0eWxlcyk7XG4gICAgICB0aGlzLnN0eWxlTGluayA9IHN0eWxlcztcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBpZiAodGhpcy5zdHlsZUxpbmspIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc3R5bGVMaW5rLnJlbW92ZSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ2NvdWxkIG5vdCByZW1vdmUgc3R5bGVzaGVldCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktc3R5bGVzaGVldCc6IFF0aVN0eWxlc2hlZXQ7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjb25zdW1lIH0gZnJvbSAnQGxpdC9jb250ZXh0JztcbmltcG9ydCB7IGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSwgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBCYXNlVHlwZSwgQ2FyZGluYWxpdHkgfSBmcm9tICcuLi8uLi9pbnRlcm5hbC9leHByZXNzaW9uLXJlc3VsdCc7XG5pbXBvcnQgeyBPdXRjb21lVmFyaWFibGUgfSBmcm9tICcuLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgSXRlbUNvbnRleHQsIGl0ZW1Db250ZXh0IH0gZnJvbSAnLi4vLi4vcXRpLWFzc2Vzc21lbnQtaXRlbS9xdGktYXNzZXNzbWVudC1pdGVtLmNvbnRleHQnO1xuaW1wb3J0IHsgUXRpVmFyaWFibGVEZWNsYXJhdGlvbiB9IGZyb20gJy4uL3F0aS12YXJpYWJsZS1kZWNsYXJhdGlvbic7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktb3V0Y29tZS1kZWNsYXJhdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpT3V0Y29tZURlY2xhcmF0aW9uIGV4dGVuZHMgUXRpVmFyaWFibGVEZWNsYXJhdGlvbiB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnYmFzZS10eXBlJyB9KSBiYXNlVHlwZTogQmFzZVR5cGU7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnZXh0ZXJuYWwtc2NvcmVkJyB9KSBleHRlcm5hbFNjb3JlZDogU3RyaW5nO1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgaWRlbnRpZmllcjogc3RyaW5nO1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgY2FyZGluYWxpdHk6IENhcmRpbmFsaXR5O1xuXG4gIEBjb25zdW1lKHsgY29udGV4dDogaXRlbUNvbnRleHQsIHN1YnNjcmliZTogdHJ1ZSB9KVxuICBAc3RhdGUoKVxuICBwdWJsaWMgaXRlbUNvbnRleHQ/OiBJdGVtQ29udGV4dDtcblxuICBzdGF0aWMgc3R5bGVzID0gW1xuICAgIGNzc2BcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICBgXG4gIF07XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5pdGVtQ29udGV4dD8udmFyaWFibGVzLmZpbmQodiA9PiB2LmlkZW50aWZpZXIgPT09IHRoaXMuaWRlbnRpZmllcik/LnZhbHVlO1xuICAgIHJldHVybiBodG1sYCR7SlNPTi5zdHJpbmdpZnkodmFsdWUsIG51bGwsIDIpfWA7XG4gIH1cblxuICBnZXQgaW50ZXJwb2xhdGlvblRhYmxlKCk6IE1hcDxudW1iZXIsIG51bWJlcj4gfCBudWxsIHtcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMucXVlcnlTZWxlY3RvcigncXRpLWludGVycG9sYXRpb24tdGFibGUnKTtcbiAgICBpZiAodGFibGUpIHtcbiAgICAgIGNvbnN0IGVudHJpZXMgPSBuZXcgTWFwPG51bWJlciwgbnVtYmVyPigpO1xuICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiB0YWJsZS5xdWVyeVNlbGVjdG9yQWxsKCdxdGktaW50ZXJwb2xhdGlvbi10YWJsZS1lbnRyeScpKSB7XG4gICAgICAgIGlmICghZW50cnkuZ2V0QXR0cmlidXRlKCdzb3VyY2UtdmFsdWUnKSAmJiBlbnRyeS5nZXRBdHRyaWJ1dGUoJ3RhcmdldC12YWx1ZScpKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignc291cmNlLXZhbHVlIG9yIHRhcmdldC12YWx1ZSBpcyBtaXNzaW5nIGluIHF0aS1pbnRlcnBvbGF0aW9uLXRhYmxlLWVudHJ5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc291cmNlVmFsdWUgPSBwYXJzZUludChlbnRyeS5nZXRBdHRyaWJ1dGUoJ3NvdXJjZS12YWx1ZScpKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0VmFsdWUgPSBwYXJzZUludChlbnRyeS5nZXRBdHRyaWJ1dGUoJ3RhcmdldC12YWx1ZScpKTtcbiAgICAgICAgaWYgKGlzTmFOKHNvdXJjZVZhbHVlKSB8fCBpc05hTih0YXJnZXRWYWx1ZSkpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdzb3VyY2UtdmFsdWUgb3IgdGFyZ2V0LXZhbHVlIGlzIG5vdCBhIG51bWJlciBpbiBxdGktaW50ZXJwb2xhdGlvbi10YWJsZS1lbnRyeScpO1xuICAgICAgICB9XG4gICAgICAgIGVudHJpZXMuc2V0KHNvdXJjZVZhbHVlLCB0YXJnZXRWYWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZW50cmllcztcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuICAgIGNvbnN0IG91dGNvbWVWYXJpYWJsZTogT3V0Y29tZVZhcmlhYmxlID0ge1xuICAgICAgaWRlbnRpZmllcjogdGhpcy5pZGVudGlmaWVyLFxuICAgICAgY2FyZGluYWxpdHk6IHRoaXMuY2FyZGluYWxpdHksXG4gICAgICBiYXNlVHlwZTogdGhpcy5iYXNlVHlwZSxcbiAgICAgIHR5cGU6ICdvdXRjb21lJyxcbiAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgaW50ZXJwb2xhdGlvblRhYmxlOiB0aGlzLmludGVycG9sYXRpb25UYWJsZVxuICAgIH07XG4gICAgb3V0Y29tZVZhcmlhYmxlLnZhbHVlID0gdGhpcy5kZWZhdWx0VmFsdWVzKG91dGNvbWVWYXJpYWJsZSk7XG5cbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3F0aS1yZWdpc3Rlci12YXJpYWJsZScsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWUsXG4gICAgICAgIGRldGFpbDogeyB2YXJpYWJsZTogb3V0Y29tZVZhcmlhYmxlIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktb3V0Y29tZS1kZWNsYXJhdGlvbic6IFF0aU91dGNvbWVEZWNsYXJhdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IGh0bWwsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IFZhcmlhYmxlRGVjbGFyYXRpb24gfSBmcm9tICcuLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLXZhcmlhYmxlZGVjbGFyYXRpb24nKVxuZXhwb3J0IGNsYXNzIFF0aVZhcmlhYmxlRGVjbGFyYXRpb24gZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRlZmF1bHRWYWx1ZXModmFyaWFibGU6IFZhcmlhYmxlRGVjbGFyYXRpb248c3RyaW5nIHwgc3RyaW5nW10gfCBudWxsPikge1xuICAgIGNvbnN0IGh0bWxWYWx1ZXMgPSBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbCgncXRpLWRlZmF1bHQtdmFsdWUgPiBxdGktdmFsdWUnKSk7XG5cbiAgICBpZiAoaHRtbFZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZXMgPSBodG1sVmFsdWVzLm1hcChuID0+IG4uaW5uZXJIVE1MKTtcbiAgICBpZiAoZGVmYXVsdFZhbHVlcy5sZW5ndGggPiAxIHx8IHZhcmlhYmxlLmNhcmRpbmFsaXR5ID09PSAnbXVsdGlwbGUnIHx8IHZhcmlhYmxlLmNhcmRpbmFsaXR5ID09PSAnb3JkZXJlZCcpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWVzO1xuICAgIH1cbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlc1swXTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktdmFyaWFibGVkZWNsYXJhdGlvbic6IFF0aVZhcmlhYmxlRGVjbGFyYXRpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjb25zdW1lIH0gZnJvbSAnQGxpdC9jb250ZXh0JztcbmltcG9ydCB7IGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSwgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBCYXNlVHlwZSwgQ2FyZGluYWxpdHkgfSBmcm9tICcuLi8uLi9pbnRlcm5hbC9leHByZXNzaW9uLXJlc3VsdCc7XG5pbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IEl0ZW1Db250ZXh0LCBpdGVtQ29udGV4dCB9IGZyb20gJy4uLy4uL3F0aS1hc3Nlc3NtZW50LWl0ZW0vcXRpLWFzc2Vzc21lbnQtaXRlbS5jb250ZXh0JztcbmltcG9ydCB7IFF0aU1hcHBpbmcgfSBmcm9tICcuLi8uLi9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktbWFwcGluZy9xdGktbWFwcGluZyc7XG5pbXBvcnQgeyBRdGlWYXJpYWJsZURlY2xhcmF0aW9uIH0gZnJvbSAnLi4vcXRpLXZhcmlhYmxlLWRlY2xhcmF0aW9uJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1yZXNwb25zZS1kZWNsYXJhdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpUmVzcG9uc2VEZWNsYXJhdGlvbiBleHRlbmRzIFF0aVZhcmlhYmxlRGVjbGFyYXRpb24ge1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2Jhc2UtdHlwZScgfSkgYmFzZVR5cGU6IEJhc2VUeXBlO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KSBpZGVudGlmaWVyOiBzdHJpbmc7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIGNhcmRpbmFsaXR5OiBDYXJkaW5hbGl0eTtcblxuICBAY29uc3VtZSh7IGNvbnRleHQ6IGl0ZW1Db250ZXh0LCBzdWJzY3JpYmU6IHRydWUgfSlcbiAgQHN0YXRlKClcbiAgcHVibGljIGl0ZW1Db250ZXh0PzogSXRlbUNvbnRleHQ7XG5cbiAgc3RhdGljIHN0eWxlcyA9IFtcbiAgICBjc3NgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgYFxuICBdO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaXRlbUNvbnRleHQ/LnZhcmlhYmxlcy5maW5kKHYgPT4gdi5pZGVudGlmaWVyID09PSB0aGlzLmlkZW50aWZpZXIpPy52YWx1ZTtcbiAgICByZXR1cm4gaHRtbGAke0pTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCAyKX1gO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cbiAgICBjb25zdCByZXNwb25zZVZhcmlhYmxlOiBSZXNwb25zZVZhcmlhYmxlID0ge1xuICAgICAgYmFzZVR5cGU6IHRoaXMuYmFzZVR5cGUsXG4gICAgICBpZGVudGlmaWVyOiB0aGlzLmlkZW50aWZpZXIsXG4gICAgICBjb3JyZWN0UmVzcG9uc2U6IHRoaXMuY29ycmVjdFJlc3BvbnNlLFxuICAgICAgY2FyZGluYWxpdHk6IHRoaXMuY2FyZGluYWxpdHkgfHwgJ3NpbmdsZScsXG4gICAgICBtYXBwaW5nOiB0aGlzLm1hcHBpbmcsXG4gICAgICB2YWx1ZTogbnVsbCxcbiAgICAgIHR5cGU6ICdyZXNwb25zZScsXG4gICAgICBjYW5kaWRhdGVSZXNwb25zZTogbnVsbFxuICAgIH07XG4gICAgcmVzcG9uc2VWYXJpYWJsZS52YWx1ZSA9IHRoaXMuZGVmYXVsdFZhbHVlcyhyZXNwb25zZVZhcmlhYmxlKTtcblxuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBDdXN0b21FdmVudCgncXRpLXJlZ2lzdGVyLXZhcmlhYmxlJywge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgICAgZGV0YWlsOiB7IHZhcmlhYmxlOiByZXNwb25zZVZhcmlhYmxlIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGNvcnJlY3RSZXNwb25zZSgpOiBzdHJpbmcgfCBzdHJpbmdbXSB7XG4gICAgbGV0IHJlc3VsdDogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgY29uc3QgY29ycmVjdFJlc3BvbnNlID0gdGhpcy5xdWVyeVNlbGVjdG9yKCdxdGktY29ycmVjdC1yZXNwb25zZScpO1xuICAgIGlmIChjb3JyZWN0UmVzcG9uc2UpIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IGNvcnJlY3RSZXNwb25zZS5xdWVyeVNlbGVjdG9yQWxsKCdxdGktdmFsdWUnKTtcbiAgICAgIGlmICh0aGlzLmNhcmRpbmFsaXR5ID09PSAnc2luZ2xlJyAmJiB2YWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXN1bHQgPSB2YWx1ZXNbMF0udGV4dENvbnRlbnQ7XG4gICAgICAgIHZhbHVlc1swXS5yZW1vdmUoKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jYXJkaW5hbGl0eSAhPT0gJ3NpbmdsZScpIHtcbiAgICAgICAgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2godmFsdWVzW2ldLnRleHRDb250ZW50KTtcbiAgICAgICAgICB2YWx1ZXNbaV0ucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IG1hcHBpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcigncXRpLW1hcHBpbmcnKSBhcyBRdGlNYXBwaW5nO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1yZXNwb25zZS1kZWNsYXJhdGlvbic6IFF0aVJlc3BvbnNlRGVjbGFyYXRpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktY29tcGFuaW9uLW1hdGVyaWFscy1pbmZvJylcbmV4cG9ydCBjbGFzcyBRdGlDb21wYW5pb25NYXRlcmlhbHNJbmZvIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIC8vIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBjc3NgXG4gIC8vICAgc2xvdCB7XG4gIC8vICAgICBkaXNwbGF5OiBoaWRkZW47XG4gIC8vICAgfVxuICAvLyBgO1xuICAvLyBvdmVycmlkZSByZW5kZXIoKSB7XG4gIC8vICAgcmV0dXJuIGh0bWxgIDxzbG90Pjwvc2xvdD4gYDtcbiAgLy8gfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktY29tcGFuaW9uLW1hdGVyaWFscy1pbmZvJzogUXRpQ29tcGFuaW9uTWF0ZXJpYWxzSW5mbztcbiAgfVxufVxuIiwgImltcG9ydCB7IExpdEVsZW1lbnQsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1jb250ZW50LWJvZHknKVxuZXhwb3J0IGNsYXNzIFF0aUNvbnRlbnRCb2R5IGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdD48L3Nsb3Q+YDtcbiAgfVxufVxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWNvbnRlbnQtYm9keSc6IFF0aUNvbnRlbnRCb2R5O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgTGl0RWxlbWVudCwgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgd2F0Y2ggfSBmcm9tICcuLi8uLi9kZWNvcmF0b3JzL3dhdGNoJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1ydWJyaWMtYmxvY2snKVxuZXhwb3J0IGNsYXNzIFF0aVJ1YnJpY0Jsb2NrIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KSBvdmVycmlkZSBpZDsgLy8gPVwicXRpQXNwZWN0SW5ob3VkUnVicmljQmxvY2tcIlxuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KSB1c2U6ICdpbnN0cnVjdGlvbnMnIHwgJ3Njb3JpbmcnIHwgJ25hdmlnYXRpb24nOyAvLyAgPSBcInNjb3JpbmdcIlxuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KSB2aWV3OiAnYXV0aG9yJyB8ICdjYW5kaWRhdGUnIHwgJ3Byb2N0b3InIHwgJ3Njb3JlcicgfCAndGVzdENvbnN0cnVjdG9yJyB8ICd0dXRvcic7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdjbGFzcycgfSkgY2xhc3NOYW1lcztcbiAgQHdhdGNoKCdjbGFzc05hbWVzJywgeyB3YWl0VW50aWxGaXJzdFVwZGF0ZTogdHJ1ZSB9KVxuICBoYW5kbGVjbGFzc05hbWVzQ2hhbmdlKG9sZCwgZGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBjbGFzc05hbWVzID0gdGhpcy5jbGFzc05hbWVzLnNwbGl0KCcgJyk7XG4gICAgY2xhc3NOYW1lcy5mb3JFYWNoKChjbGFzc05hbWU6IHN0cmluZykgPT4ge1xuICAgICAgc3dpdGNoIChjbGFzc05hbWUpIHtcbiAgICAgICAgY2FzZSAncXRpLXJ1YnJpYy1kaXNjcmV0aW9uYXJ5LXBsYWNlbWVudCc6XG4gICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ3Nsb3QnLCAncXRpLXJ1YnJpYy1ibG9jaycpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdxdGktcnVicmljLWlubGluZSc6XG4gICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ3Nsb3QnLCAnJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gY3NzYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgYDtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPHNsb3Q+PC9zbG90PmA7XG4gIH1cblxuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIC8vIGJ5IGRlZmF1bHQgcHV0IHRoaXMgaW4gYSBzbG90IGluIHRoZSBpdGVtLWJvZHlcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgnc2xvdCcsICdxdGktcnVicmljLWJsb2NrJyk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXJ1YnJpYy1ibG9jayc6IFF0aVJ1YnJpY0Jsb2NrO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgUHJvcGVydHlWYWx1ZU1hcCwgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBRdGlGZWVkYmFjayB9IGZyb20gJy4uL3F0aS1mZWVkYmFjayc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktZmVlZGJhY2stYmxvY2snKVxuZXhwb3J0IGNsYXNzIFF0aUZlZWRiYWNrQmxvY2sgZXh0ZW5kcyBRdGlGZWVkYmFjayB7XG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBjc3NgXG4gICAgOmhvc3Qge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICAgIC5vbiB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gICAgLm9mZiB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgYDtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgIDxzbG90IHBhcnQ9XCJmZWVkYmFja1wiIGNsYXNzPVwiZmVlZGJhY2sgJHt0aGlzLnNob3dTdGF0dXN9XCI+PC9zbG90PiBgO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVNYXA8YW55PiB8IE1hcDxQcm9wZXJ0eUtleSwgdW5rbm93bj4pOiB2b2lkIHtcbiAgICB0aGlzLmNoZWNrU2hvd0ZlZWRiYWNrKHRoaXMub3V0Y29tZUlkZW50aWZpZXIpO1xuICB9XG59XG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktZmVlZGJhY2stYmxvY2snOiBRdGlGZWVkYmFja0Jsb2NrO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgTGl0RWxlbWVudCwgUHJvcGVydHlWYWx1ZU1hcCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IFF0aUFzc2Vzc21lbnRJdGVtIH0gZnJvbSAnLi4vcXRpLWFzc2Vzc21lbnQtaXRlbS9xdGktYXNzZXNzbWVudC1pdGVtJztcbmltcG9ydCB7IElzTnVsbE9yVW5kZWZpbmVkIH0gZnJvbSAnLi4vaW50ZXJuYWwvdXRpbHMnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUXRpRmVlZGJhY2sgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdzaG93LWhpZGUnIH0pXG4gIHByb3RlY3RlZCBzaG93SGlkZTogc3RyaW5nO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnb3V0Y29tZS1pZGVudGlmaWVyJyB9KVxuICBwdWJsaWMgb3V0Y29tZUlkZW50aWZpZXI6IHN0cmluZztcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSlcbiAgcHJvdGVjdGVkIGlkZW50aWZpZXI6IHN0cmluZztcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogZmFsc2UgfSlcbiAgcHVibGljIHNob3dTdGF0dXM6IHN0cmluZztcblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQ8UXRpRmVlZGJhY2s+KCdxdGktcmVnaXN0ZXItZmVlZGJhY2snLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICBkZXRhaWw6IHRoaXNcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBjaGVja1Nob3dGZWVkYmFjayhvdXRjb21lSWRlbnRpZmllcjogc3RyaW5nKSB7ICAgIFxuICAgIGNvbnN0IG91dGNvbWVWYXJpYWJsZSA9ICh0aGlzLmNsb3Nlc3QoJ3F0aS1hc3Nlc3NtZW50LWl0ZW0nKSBhcyBRdGlBc3Nlc3NtZW50SXRlbSkuZ2V0T3V0Y29tZShvdXRjb21lSWRlbnRpZmllcik7XG5cbiAgICBpZiAodGhpcy5vdXRjb21lSWRlbnRpZmllciAhPT0gb3V0Y29tZUlkZW50aWZpZXIgfHwgIW91dGNvbWVWYXJpYWJsZSkgcmV0dXJuO1xuICAgIGxldCBpc0ZvdW5kID0gZmFsc2U7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3V0Y29tZVZhcmlhYmxlLnZhbHVlKSkge1xuICAgICAgaXNGb3VuZCA9IG91dGNvbWVWYXJpYWJsZS52YWx1ZS5pbmNsdWRlcyh0aGlzLmlkZW50aWZpZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpc0ZvdW5kID1cbiAgICAgICAgKCFJc051bGxPclVuZGVmaW5lZCh0aGlzLmlkZW50aWZpZXIpICYmXG4gICAgICAgICAgIUlzTnVsbE9yVW5kZWZpbmVkKG91dGNvbWVWYXJpYWJsZT8udmFsdWUpICYmXG4gICAgICAgICAgdGhpcy5pZGVudGlmaWVyID09PSBvdXRjb21lVmFyaWFibGUudmFsdWUpIHx8XG4gICAgICAgIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuc2hvd0ZlZWRiYWNrKGlzRm91bmQpO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93RmVlZGJhY2sodmFsdWU6IGJvb2xlYW4pIHsgICAgXG4gICAgdGhpcy5zaG93U3RhdHVzID0gKHZhbHVlICYmIHRoaXMuc2hvd0hpZGUgPT09ICdzaG93JykgfHwgKCF2YWx1ZSAmJiB0aGlzLnNob3dIaWRlID09PSAnaGlkZScpID8gJ29uJyA6ICdvZmYnOyAgICBcbiAgfVxufVxuIiwgImV4cG9ydCBjb25zdCBkZWNpbWFsU2VwYXJhdG9yID0gKCkgPT4ge1xuICByZXR1cm4gbmV3IEludGwuTnVtYmVyRm9ybWF0KCkuZm9ybWF0KDAuMSkucmVwbGFjZSgvXFxkL2csICcnKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb252ZXJ0TnVtYmVyVG9Vbml2ZXJhbEZvcm1hdCA9IChudW1iZXI6IG51bWJlciB8IHN0cmluZykgPT4ge1xuICAvLyBjaGVjayBpZiB0eXBlIGlzIHN0cmluZ1xuICBpZiAodHlwZW9mIG51bWJlciA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gbnVtYmVyO1xuICB9XG4gIGNvbnN0IGRTZXAgPSBkZWNpbWFsU2VwYXJhdG9yKCk7XG4gIGlmIChkU2VwID09PSAnLicpIHtcbiAgICByZXR1cm4gbnVtYmVyLnRvTG9jYWxlU3RyaW5nKCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bWJlci50b1N0cmluZygpLnJlcGxhY2UoJy4nLCAnJykucmVwbGFjZShkU2VwLCAnLicpO1xuICB9XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gSXNOdWxsT3JVbmRlZmluZWQodmFsdWU6IHVua25vd24pIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVEb3VibGVTbGFzaGVzKHN0cjogc3RyaW5nKSB7XG4gIGNvbnN0IHNpbmdsZUZvcndhcmRTbGFzaGVzID0gc3RyXG4gICAgLnJlcGxhY2UoLyhbXjpdXFwvKVxcLysvZywgJyQxJylcbiAgICAucmVwbGFjZSgvXFwvXFwvL2csICcvJylcbiAgICAucmVwbGFjZSgnaHR0cDovJywgJ2h0dHA6Ly8nKVxuICAgIC5yZXBsYWNlKCdodHRwczovJywgJ2h0dHBzOi8vJyk7XG4gIHJldHVybiBzaW5nbGVGb3J3YXJkU2xhc2hlcztcbn1cbiIsICJpbXBvcnQgeyBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IFF0aUZlZWRiYWNrIH0gZnJvbSAnLi4vcXRpLWZlZWRiYWNrJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1mZWVkYmFjay1pbmxpbmUnKVxuZXhwb3J0IGNsYXNzIFF0aUZlZWRiYWNrSW5saW5lIGV4dGVuZHMgUXRpRmVlZGJhY2sge1xuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gY3NzYFxuICAgIC5vbiB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgfVxuICAgIC5vZmYge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIGA7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyID0gKCkgPT4gaHRtbGAgPHNsb3QgcGFydD1cImZlZWRiYWNrXCIgY2xhc3M9XCIke3RoaXMuc2hvd1N0YXR1c31cIj48L3Nsb3Q+IGA7XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1mZWVkYmFjay1pbmxpbmUnOiBRdGlGZWVkYmFja0lubGluZTtcbiAgfVxufVxuIiwgImltcG9ydCB7IGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgUXRpRmVlZGJhY2sgfSBmcm9tICcuLi9xdGktZmVlZGJhY2snO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLW1vZGFsLWZlZWRiYWNrJylcbmV4cG9ydCBjbGFzcyBRdGlNb2RhbEZlZWRiYWNrIGV4dGVuZHMgUXRpRmVlZGJhY2sge1xuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gY3NzYFxuICAgIC5vbiB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgfVxuICAgIC5vZmYge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIGA7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyID0gKCkgPT4gaHRtbGAgPHNsb3QgcGFydD1cImZlZWRiYWNrXCIgY2xhc3M9XCIke3RoaXMuc2hvd1N0YXR1c31cIj48L3Nsb3Q+IGA7XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1tb2RhbC1mZWVkYmFjayc6IFF0aU1vZGFsRmVlZGJhY2s7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgaWZEZWZpbmVkIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvaWYtZGVmaW5lZC5qcyc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvbiB9IGZyb20gJy4uL2ludGVybmFsL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uJztcbmltcG9ydCB7IHJlZiwgY3JlYXRlUmVmIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvcmVmLmpzJztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHdhdGNoIH0gZnJvbSAnLi4vLi4vLi4vZGVjb3JhdG9ycy93YXRjaCc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktZXh0ZW5kZWQtdGV4dC1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpRXh0ZW5kZWRUZXh0SW50ZXJhY3Rpb24gZXh0ZW5kcyBJbnRlcmFjdGlvbiB7XG4gIC8vIHB1YmxpYyBzdGF0aWMgcm93SGVpZ2h0Q2xhc3MgPSBbXTtcblxuICB0ZXh0YXJlYVJlZiA9IGNyZWF0ZVJlZjxIVE1MVGV4dEFyZWFFbGVtZW50PigpO1xuXG4gIC8qKiBleHBlY3RlZCBsZW5ndGggaXMgbWFwcGVkIHRvIHRoZSBwcm9wZXJ0eSBtYXhsZW5ndGggb24gdGhlIHRleHRhcmVhICovXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IE51bWJlciwgYXR0cmlidXRlOiAnZXhwZWN0ZWQtbGVuZ3RoJyB9KSBleHBlY3RlZExlbmd0aDogbnVtYmVyO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAncGF0dGVybi1tYXNrJyB9KSBwYXR0ZXJuTWFzazogc3RyaW5nO1xuXG4gIC8qKiB0ZXh0IGFwcGVhcmluZyBpbiB0aGUgZXh0ZW5kZWQtdGV4dC1udGVyYWN0aW9uIGlmIGl0IGlzIGVtcHR5ICovXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAncGxhY2Vob2xkZXItdGV4dCcgfSkgcGxhY2Vob2xkZXJUZXh0OiBzdHJpbmc7XG5cbiAgQHN0YXRlKClcbiAgcHJpdmF0ZSBfdmFsdWUgPSAnJztcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2NsYXNzJyB9KSBjbGFzc05hbWVzO1xuICBAd2F0Y2goJ2NsYXNzTmFtZXMnLCB7IHdhaXRVbnRpbEZpcnN0VXBkYXRlOiB0cnVlIH0pXG4gIGhhbmRsZWNsYXNzTmFtZXNDaGFuZ2Uob2xkLCBkaXNhYmxlZDogYm9vbGVhbikge1xuICAgIGNvbnN0IGNsYXNzTmFtZXMgPSB0aGlzLmNsYXNzTmFtZXMuc3BsaXQoJyAnKTtcbiAgICBjbGFzc05hbWVzLmZvckVhY2goKGNsYXNzTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoY2xhc3NOYW1lLnN0YXJ0c1dpdGgoJ3F0aS1oZWlnaHQtbGluZXMnKSkge1xuICAgICAgICBjb25zdCBuclJvd3MgPSBjbGFzc05hbWUucmVwbGFjZSgncXRpLWhlaWdodC1saW5lcy0nLCAnJyk7XG4gICAgICAgIGlmICh0aGlzLnRleHRhcmVhUmVmKSB7XG4gICAgICAgICAgdGhpcy50ZXh0YXJlYVJlZi52YWx1ZS5yb3dzID0gcGFyc2VJbnQobnJSb3dzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNldCByZXNwb25zZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiAnJztcbiAgfVxuXG4gIHB1YmxpYyB2YWxpZGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWUgIT09ICcnO1xuICB9XG5cbiAgc3RhdGljIG92ZXJyaWRlIGdldCBzdHlsZXMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGNzc2BcbiAgICAgICAgLyogUEs6IGRpc3BsYXkgaG9zdCBhcyBibG9jaywgZWxzZSBkZXNpZ24gd2lsbCBiZSBjb2xsYXBzZWQgKi9cbiAgICAgICAgOmhvc3Qge1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB9XG4gICAgICAgIHRleHRhcmVhIHtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgIH1cbiAgICAgIGBcbiAgICBdO1xuICB9XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90IG5hbWU9XCJwcm9tcHRcIj48L3Nsb3RcbiAgICAgID48dGV4dGFyZWFcbiAgICAgICAgcGFydD1cInRleHRhcmVhXCJcbiAgICAgICAgJHtyZWYodGhpcy50ZXh0YXJlYVJlZil9XG4gICAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgIEBrZXlkb3duPVwiJHtldmVudCA9PiBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1cIlxuICAgICAgICBAa2V5dXA9XCIke3RoaXMudGV4dENoYW5nZWR9XCJcbiAgICAgICAgQGNoYW5nZT1cIiR7dGhpcy50ZXh0Q2hhbmdlZH1cIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIiR7aWZEZWZpbmVkKHRoaXMucGxhY2Vob2xkZXJUZXh0ID8gdGhpcy5wbGFjZWhvbGRlclRleHQgOiB1bmRlZmluZWQpfVwiXG4gICAgICAgIG1heGxlbmd0aD1cIiR7aWZEZWZpbmVkKHRoaXMuZXhwZWN0ZWRMZW5ndGggPyB0aGlzLmV4cGVjdGVkTGVuZ3RoIDogdW5kZWZpbmVkKX1cIlxuICAgICAgICBwYXR0ZXJuPVwiJHtpZkRlZmluZWQodGhpcy5wYXR0ZXJuTWFzayA/IHRoaXMucGF0dGVybk1hc2sgOiB1bmRlZmluZWQpfVwiXG4gICAgICAgID9kaXNhYmxlZD1cIiR7dGhpcy5kaXNhYmxlZH1cIlxuICAgICAgICA/cmVhZG9ubHk9XCIke3RoaXMucmVhZG9ubHl9XCJcbiAgICAgICAgLnZhbHVlPSR7dGhpcy5fdmFsdWV9XG4gICAgICA+PC90ZXh0YXJlYT5gO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRleHRDaGFuZ2VkKGV2ZW50OiBFdmVudCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHJldHVybjtcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIHRoaXMuc2V0RW1wdHlBdHRyaWJ1dGUoaW5wdXQudmFsdWUpO1xuICAgIGlmICh0aGlzLl92YWx1ZSAhPT0gaW5wdXQudmFsdWUpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gaW5wdXQudmFsdWU7XG4gICAgICB0aGlzLnNhdmVSZXNwb25zZShpbnB1dC52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5fdmFsdWUgPSAnJztcbiAgfVxuXG4gIHByaXZhdGUgc2V0RW1wdHlBdHRyaWJ1dGUodGV4dDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ2VtcHR5JywgdGV4dCA9PT0gJycgPyAndHJ1ZScgOiAnZmFsc2UnKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktZXh0ZW5kZWQtdGV4dC1pbnRlcmFjdGlvbic6IFF0aUV4dGVuZGVkVGV4dEludGVyYWN0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEludGVyYWN0aW9uIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ3Jlc3BvbnNlLWlkZW50aWZpZXInIH0pIHJlc3BvbnNlSWRlbnRpZmllcjogc3RyaW5nID0gJyc7XG5cbiAgLyoqIGRpc2FibGVkIHNob3VsZCBiZSBleHBvc2VkIHRvIHRoZSBhdHRyaWJ1dGVzIGFuZCBhY2Nlc3NpYmxlIGFzIHByb3BlcnR5ICovXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUsIHR5cGU6IEJvb2xlYW4gfSkgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAvKiogcmVhZG9ubHkgc2hvdWxkIGJlIGV4cG9zZWQgdG8gdGhlIGF0dHJpYnV0ZXMgYW5kIGFjY2Vzc2libGUgYXMgcHJvcGVydHkgKi9cbiAgQHByb3BlcnR5KHsgcmVmbGVjdDogdHJ1ZSwgdHlwZTogQm9vbGVhbiB9KSByZWFkb25seSA9IGZhbHNlO1xuXG4gIGFic3RyYWN0IHZhbGlkYXRlKCk6IGJvb2xlYW47XG4gIGFic3RyYWN0IHNldCByZXNwb25zZSh2YWw6IFJlYWRvbmx5PHN0cmluZyB8IHN0cmluZ1tdPik7XG4gIHNldCBjb3JyZWN0UmVzcG9uc2UodmFsOiBSZWFkb25seTxzdHJpbmcgfCBzdHJpbmdbXT4pIHtcbiAgICBjb25zb2xlLndhcm4oJ2NvcnJlY3RSZXNwb25zZSBpcyBub3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdxdGktcmVnaXN0ZXItaW50ZXJhY3Rpb24nLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICBjb21wb3NlZDogdHJ1ZVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHNhdmVSZXNwb25zZSh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pIHtcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3F0aS1pbnRlcmFjdGlvbi1yZXNwb25zZScsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICByZXNwb25zZUlkZW50aWZpZXI6IHRoaXMucmVzcG9uc2VJZGVudGlmaWVyLFxuICAgICAgICAgIHJlc3BvbnNlOiB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgaWZEZWZpbmVkIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvaWYtZGVmaW5lZC5qcyc7XG5pbXBvcnQgeyBjcmVhdGVSZWYgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9yZWYuanMnO1xuaW1wb3J0IHsgd2F0Y2ggfSBmcm9tICcuLi8uLi8uLi9kZWNvcmF0b3JzJztcbmltcG9ydCB7IEludGVyYWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJuYWwvaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24nO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLXRleHQtZW50cnktaW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aVRleHRFbnRyeUludGVyYWN0aW9uIGV4dGVuZHMgSW50ZXJhY3Rpb24ge1xuICBAcHJvcGVydHkoeyB0eXBlOiBOdW1iZXIsIGF0dHJpYnV0ZTogJ2V4cGVjdGVkLWxlbmd0aCcgfSkgZXhwZWN0ZWRMZW5ndGg6IG51bWJlcjtcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ3BhdHRlcm4tbWFzaycgfSkgcGF0dGVybk1hc2s6IHN0cmluZztcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ3BsYWNlaG9sZGVyLXRleHQnIH0pIHBsYWNlaG9sZGVyVGV4dDogc3RyaW5nO1xuXG4gIEBzdGF0ZSgpXG4gIHByaXZhdGUgX3ZhbHVlID0gJyc7XG5cbiAgQHN0YXRlKClcbiAgcHJpdmF0ZSBfY29ycmVjdFZhbHVlID0gJyc7XG5cbiAgQHN0YXRlKClcbiAgcHJpdmF0ZSBfc2l6ZSA9IDU7XG5cbiAgaW5wdXRSZWYgPSBjcmVhdGVSZWY8SFRNTElucHV0RWxlbWVudD4oKTtcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2NsYXNzJyB9KSBjbGFzc05hbWVzO1xuICBAd2F0Y2goJ2NsYXNzTmFtZXMnKVxuICBoYW5kbGVjbGFzc05hbWVzQ2hhbmdlKG9sZCwgY2xhc3Nlczogc3RyaW5nKSB7XG4gICAgY29uc3QgY2xhc3NOYW1lcyA9IGNsYXNzZXMuc3BsaXQoJyAnKTtcbiAgICBjbGFzc05hbWVzLmZvckVhY2goKGNsYXNzTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoY2xhc3NOYW1lLnN0YXJ0c1dpdGgoJ3F0aS1pbnB1dC13aWR0aCcpKSB7XG4gICAgICAgIGNvbnN0IG5yUm93cyA9IGNsYXNzTmFtZS5yZXBsYWNlKCdxdGktaW5wdXQtd2lkdGgtJywgJycpO1xuICAgICAgICB0aGlzLl9zaXplID0gcGFyc2VJbnQobnJSb3dzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgcmVzcG9uc2UodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDogJyc7XG4gIH1cblxuICBwdWJsaWMgdmFsaWRhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlICE9PSAnJztcbiAgfVxuXG4gIHN0YXRpYyBvdmVycmlkZSBnZXQgc3R5bGVzKCkge1xuICAgIHJldHVybiBbXG4gICAgICBjc3NgXG4gICAgICAgIFtwYXJ0PSdjb3JyZWN0J10ge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgfVxuICAgICAgYFxuICAgIF07XG4gIH1cblxuICBzZXQgY29ycmVjdFJlc3BvbnNlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9jb3JyZWN0VmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxkaXYgcGFydD1cImNvcnJlY3RcIj4ke3RoaXMuX2NvcnJlY3RWYWx1ZX08L2Rpdj5cbiAgICAgIDxpbnB1dFxuICAgICAgICBwYXJ0PVwiaW5wdXRcIlxuICAgICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIlxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICBAa2V5ZG93bj1cIiR7ZXZlbnQgPT4gZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9XCJcbiAgICAgICAgQGtleXVwPVwiJHt0aGlzLnRleHRDaGFuZ2VkfVwiXG4gICAgICAgIEBjaGFuZ2U9XCIke3RoaXMudGV4dENoYW5nZWR9XCJcbiAgICAgICAgdHlwZT1cIiR7dGhpcy5wYXR0ZXJuTWFzayA9PSAnWzAtOV0qJyA/ICdudW1iZXInIDogJ3RleHQnfVwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiJHtpZkRlZmluZWQodGhpcy5wbGFjZWhvbGRlclRleHQgPyB0aGlzLnBsYWNlaG9sZGVyVGV4dCA6IHVuZGVmaW5lZCl9XCJcbiAgICAgICAgLnZhbHVlPVwiJHt0aGlzLl92YWx1ZX1cIlxuICAgICAgICBzaXplPVwiJHt0aGlzLl9zaXplfVwiXG4gICAgICAgIHBhdHRlcm49XCIke2lmRGVmaW5lZCh0aGlzLnBhdHRlcm5NYXNrID8gdGhpcy5wYXR0ZXJuTWFzayA6IHVuZGVmaW5lZCl9XCJcbiAgICAgICAgP2Rpc2FibGVkPVwiJHt0aGlzLmRpc2FibGVkfVwiXG4gICAgICAgID9yZWFkb25seT1cIiR7dGhpcy5yZWFkb25seX1cIlxuICAgICAgLz5cbiAgICBgO1xuICB9XG4gIC8vXG4gIC8vIG1heGxlbmd0aD1cIiR7aWZEZWZpbmVkKHRoaXMuZXhwZWN0ZWRMZW5ndGggPyB0aGlzLmV4cGVjdGVkTGVuZ3RoIDogdW5kZWZpbmVkKX1cIlxuXG4gIHByb3RlY3RlZCB0ZXh0Q2hhbmdlZChldmVudDogRXZlbnQpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSByZXR1cm47XG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICB0aGlzLnNldEVtcHR5QXR0cmlidXRlKGlucHV0LnZhbHVlKTtcbiAgICBpZiAodGhpcy5fdmFsdWUgIT09IGlucHV0LnZhbHVlKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IGlucHV0LnZhbHVlO1xuICAgICAgdGhpcy5zYXZlUmVzcG9uc2UoaW5wdXQudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuX3ZhbHVlID0gJyc7XG4gIH1cblxuICBwcml2YXRlIHNldEVtcHR5QXR0cmlidXRlKHRleHQ6IHN0cmluZykge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKCdlbXB0eScsIHRleHQgPT09ICcnID8gJ3RydWUnIDogJ2ZhbHNlJyk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXRleHQtZW50cnktaW50ZXJhY3Rpb24nOiBRdGlUZXh0RW50cnlJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgIi8vIEB3YXRjaCBkZWNvcmF0b3Jcbi8vXG4vLyBSdW5zIHdoZW4gYW4gb2JzZXJ2ZWQgcHJvcGVydHkgY2hhbmdlcywgZS5nLiBAcHJvcGVydHkgb3IgQHN0YXRlLCBidXQgYmVmb3JlIHRoZSBjb21wb25lbnQgdXBkYXRlcy5cbi8vXG4vLyBUbyB3YWl0IGZvciBhbiB1cGRhdGUgdG8gY29tcGxldGUgYWZ0ZXIgYSBjaGFuZ2Ugb2NjdXJzLCB1c2UgYGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGVgIGluIHRoZSBoYW5kbGVyLiBUbyBzdGFydFxuLy8gd2F0Y2hpbmcgYWZ0ZXIgdGhlIGluaXRpYWwgdXBkYXRlL3JlbmRlciwgdXNlIGB7IHdhaXRVbnRpbEZpcnN0VXBkYXRlOiB0cnVlIH1gIG9yIGB0aGlzLmhhc1VwZGF0ZWRgIGluIHRoZSBoYW5kbGVyLlxuLy9cbi8vIFVzYWdlOlxuLy9cbi8vICBAd2F0Y2goJ3Byb3BOYW1lJylcbi8vICBoYW5kbGVQcm9wQ2hhbmdlKG9sZFZhbHVlLCBuZXdWYWx1ZSkge1xuLy8gICAgLi4uXG4vLyAgfVxuXG5pbXBvcnQgdHlwZSB7IExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuXG50eXBlIFVwZGF0ZUhhbmRsZXIgPSAocHJldj86IHVua25vd24sIG5leHQ/OiB1bmtub3duKSA9PiB2b2lkO1xuXG50eXBlIE5vblVuZGVmaW5lZDxBPiA9IEEgZXh0ZW5kcyB1bmRlZmluZWQgPyBuZXZlciA6IEE7XG5cbnR5cGUgVXBkYXRlSGFuZGxlckZ1bmN0aW9uS2V5czxUIGV4dGVuZHMgb2JqZWN0PiA9IHtcbiAgW0sgaW4ga2V5b2YgVF0tPzogTm9uVW5kZWZpbmVkPFRbS10+IGV4dGVuZHMgVXBkYXRlSGFuZGxlciA/IEsgOiBuZXZlcjtcbn1ba2V5b2YgVF07XG5cbmludGVyZmFjZSBMaXZlUXVlcnlPcHRpb25zIHtcbiAgLyoqXG4gICAqIElmIHRydWUsIHdpbGwgb25seSBzdGFydCB3YXRjaGluZyBhZnRlciB0aGUgaW5pdGlhbCB1cGRhdGUvcmVuZGVyXG4gICAqL1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGl2ZVF1ZXJ5KHF1ZXJ5U2VsZWN0b3I6IHN0cmluZywgb3B0aW9ucz86IExpdmVRdWVyeU9wdGlvbnMpIHtcbiAgbGV0IG9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyO1xuICBjb25zdCByZXNvbHZlZE9wdGlvbnM6IFJlcXVpcmVkPExpdmVRdWVyeU9wdGlvbnM+ID0ge1xuICAgIC4uLm9wdGlvbnNcbiAgfTtcbiAgcmV0dXJuIDxFbGVtQ2xhc3MgZXh0ZW5kcyBMaXRFbGVtZW50PihcbiAgICBwcm90bzogRWxlbUNsYXNzLFxuICAgIGRlY29yYXRlZEZuTmFtZTogVXBkYXRlSGFuZGxlckZ1bmN0aW9uS2V5czxFbGVtQ2xhc3M+XG4gICk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IHsgY29ubmVjdGVkQ2FsbGJhY2ssIGRpc2Nvbm5lY3RlZENhbGxiYWNrIH0gPSBwcm90bztcblxuICAgIHByb3RvLmNvbm5lY3RlZENhbGxiYWNrID0gZnVuY3Rpb24gKHRoaXM6IEVsZW1DbGFzcykge1xuICAgICAgY29ubmVjdGVkQ2FsbGJhY2suY2FsbCh0aGlzKTtcbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gKG11dGF0aW9uTGlzdDogTXV0YXRpb25SZWNvcmRbXSkgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50c1RvV2F0Y2ggPSBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbChxdWVyeVNlbGVjdG9yKSk7XG4gICAgICAgIGZvciAoY29uc3QgbXV0YXRpb24gb2YgbXV0YXRpb25MaXN0KSB7XG4gICAgICAgICAgY29uc3QgYWRkZWROb2RlcyA9IEFycmF5LmZyb20obXV0YXRpb24uYWRkZWROb2RlcykubWFwKGUgPT4gZSBhcyBFbGVtZW50KTtcbiAgICAgICAgICBjb25zdCByZW1vdmVkTm9kZXMgPSBBcnJheS5mcm9tKG11dGF0aW9uLmFkZGVkTm9kZXMpLm1hcChlID0+IGUgYXMgRWxlbWVudCk7XG4gICAgICAgICAgaWYgKG11dGF0aW9uLnR5cGUgPT09ICdjaGlsZExpc3QnICYmIGFkZGVkTm9kZXMuZmluZChuID0+IGVsZW1lbnRzVG9XYXRjaC5pbmNsdWRlcyhuKSkpIHtcbiAgICAgICAgICAgICh0aGlzW2RlY29yYXRlZEZuTmFtZV0gYXMgdW5rbm93biBhcyBVcGRhdGVIYW5kbGVyKShhZGRlZE5vZGVzLCByZW1vdmVkTm9kZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoY2FsbGJhY2spO1xuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KTtcblxuICAgICAgY29uc3QgZWxlbWVudHNBZGRlZCA9IHRoaXMucXVlcnlTZWxlY3RvckFsbChxdWVyeVNlbGVjdG9yKSA/PyBbXTtcbiAgICAgICh0aGlzW2RlY29yYXRlZEZuTmFtZV0gYXMgdW5rbm93biBhcyBVcGRhdGVIYW5kbGVyKShBcnJheS5mcm9tKGVsZW1lbnRzQWRkZWQpLCBbXSk7XG4gICAgfTtcblxuICAgIHByb3RvLmRpc2Nvbm5lY3RlZENhbGxiYWNrID0gZnVuY3Rpb24gKHRoaXM6IEVsZW1DbGFzcykge1xuICAgICAgZGlzY29ubmVjdGVkQ2FsbGJhY2suY2FsbCh0aGlzKTtcbiAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9O1xuICB9O1xufVxuIiwgImltcG9ydCB7IGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IENob2ljZXMgfSBmcm9tICcuLi9pbnRlcm5hbC9jaG9pY2VzL2Nob2ljZXMnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWhvdHRleHQtaW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aUhvdHRleHRJbnRlcmFjdGlvbiBleHRlbmRzIENob2ljZXMge1xuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKCdxdGktaG90dGV4dC1pbnRlcmFjdGlvbicsICcnKTtcbiAgfVxuXG4gIG92ZXJyaWRlIHJlbmRlciA9ICgpID0+IGh0bWxgPHNsb3Q+PC9zbG90PmA7XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1ob3R0ZXh0LWludGVyYWN0aW9uJzogUXRpSG90dGV4dEludGVyYWN0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgd2F0Y2ggfSBmcm9tICcuLi8uLi8uLi8uLi9kZWNvcmF0b3JzL3dhdGNoJztcbmltcG9ydCB7IEludGVyYWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24nO1xuaW1wb3J0IHsgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgUXRpQ2hvaWNlIH0gZnJvbSAnLi4vY2hvaWNlL3F0aS1jaG9pY2UnO1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENob2ljZXMgZXh0ZW5kcyBJbnRlcmFjdGlvbiB7XG4gIHByb3RlY3RlZCBfY2hvaWNlRWxlbWVudHM6IFF0aUNob2ljZVtdID0gW107XG5cbiAgLyoqIHRoZSBtaW5pbWFsIG51bWJlciBvZiBzZWxlY3Rpb25zIGEgY2FuZGlkYXRlIG11c3QgbWFrZSAqL1xuICBAcHJvcGVydHkoe1xuICAgIHR5cGU6IE51bWJlcixcbiAgICBhdHRyaWJ1dGU6ICdtaW4tY2hvaWNlcydcbiAgfSlcbiAgcHVibGljIG1pbkNob2ljZXM6IG51bWJlciA9IDA7XG5cbiAgLyoqIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzZWxlY3Rpb25zIGEgY2FuZGlkYXRlIG11c3QgbWFrZSwgdGhlIG90aGVyIG9wdGlvbnMgd2lsbCBiZSBkaXNhYmxlZCB3aGVuIG1heCBvcHRpb25zIGlzIGNoZWNrZWQgKi9cbiAgQHByb3BlcnR5KHtcbiAgICB0eXBlOiBOdW1iZXIsXG4gICAgYXR0cmlidXRlOiAnbWF4LWNob2ljZXMnXG4gIH0pXG4gIHB1YmxpYyBtYXhDaG9pY2VzOiBudW1iZXIgPSAxO1xuXG4gIEB3YXRjaCgnZGlzYWJsZWQnLCB7IHdhaXRVbnRpbEZpcnN0VXBkYXRlOiB0cnVlIH0pXG4gIF9oYW5kbGVEaXNhYmxlZENoYW5nZSA9IChfOiBib29sZWFuLCBkaXNhYmxlZDogYm9vbGVhbikgPT5cbiAgICB0aGlzLl9jaG9pY2VFbGVtZW50cy5mb3JFYWNoKGNoID0+IChjaC5kaXNhYmxlZCA9IGRpc2FibGVkKSk7XG5cbiAgQHdhdGNoKCdyZWFkb25seScsIHsgd2FpdFVudGlsRmlyc3RVcGRhdGU6IHRydWUgfSlcbiAgX2hhbmRsZVJlYWRvbmx5Q2hhbmdlID0gKF86IGJvb2xlYW4sIHJlYWRvbmx5OiBib29sZWFuKSA9PlxuICAgIHRoaXMuX2Nob2ljZUVsZW1lbnRzLmZvckVhY2goY2ggPT4gKGNoLnJlYWRvbmx5ID0gcmVhZG9ubHkpKTtcblxuICBAd2F0Y2goJ21heENob2ljZXMnLCB7IHdhaXRVbnRpbEZpcnN0VXBkYXRlOiB0cnVlIH0pXG4gIF9oYW5kbGVNYXhDaG9pY2VzQ2hhbmdlID0gKCkgPT4gdGhpcy5fZGV0ZXJtaW5lSW5wdXRUeXBlKCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci1jaG9pY2UnLCB0aGlzLl9yZWdpc3RlckNob2ljZUVsZW1lbnQpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigncXRpLWxvb3NlLWNob2ljZScsIHRoaXMuX2xvb3NlQ2hvaWNlRWxlbWVudCk7XG4gIH1cblxuICB2YWxpZGF0ZSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBuclNlbGVjdGVkID0gdGhpcy5fY2hvaWNlRWxlbWVudHMucmVkdWNlKChhY2MsIHZhbCkgPT4ge1xuICAgICAgcmV0dXJuIGFjYyArICh2YWwuY2hlY2tlZCA/IDEgOiAwKTtcbiAgICB9LCAwKTtcbiAgICByZXR1cm4gbnJTZWxlY3RlZCA+PSB0aGlzLm1pbkNob2ljZXM7XG4gIH1cblxuICBzZXQgcmVzcG9uc2UocmVzcG9uc2VWYWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pIHtcbiAgICBjb25zdCByZXNwb25zZVZhbHVlQXJyYXkgPSBBcnJheS5pc0FycmF5KHJlc3BvbnNlVmFsdWUpID8gcmVzcG9uc2VWYWx1ZSA6IFtyZXNwb25zZVZhbHVlXTtcbiAgICB0aGlzLl9jaG9pY2VFbGVtZW50cy5mb3JFYWNoKGNlID0+IHtcbiAgICAgIGNlLmNoZWNrZWQgPSByZXNwb25zZVZhbHVlQXJyYXkuZmluZChydiA9PiBydiA9PT0gY2UuaWRlbnRpZmllcikgPyB0cnVlIDogZmFsc2U7XG4gICAgfSk7XG4gIH1cblxuICBzZXQgY29ycmVjdFJlc3BvbnNlKHJlc3BvbnNlVmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG4gICAgY29uc3QgcmVzcG9uc2VWYWx1ZUFycmF5ID0gQXJyYXkuaXNBcnJheShyZXNwb25zZVZhbHVlKSA/IHJlc3BvbnNlVmFsdWUgOiBbcmVzcG9uc2VWYWx1ZV07XG4gICAgaWYgKHJlc3BvbnNlVmFsdWUgPT0gJycpIHtcbiAgICAgIHRoaXMuX2Nob2ljZUVsZW1lbnRzLmZvckVhY2goY2UgPT4ge1xuICAgICAgICBjZS5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtY29ycmVjdC1yZXNwb25zZScpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2Nob2ljZUVsZW1lbnRzLmZvckVhY2goY2UgPT4ge1xuICAgICAgY2Uuc2V0QXR0cmlidXRlKCdkYXRhLWNvcnJlY3QtcmVzcG9uc2UnLCByZXNwb25zZVZhbHVlQXJyYXkuZmluZChydiA9PiBydiA9PT0gY2UuaWRlbnRpZmllcikgPyAndHJ1ZScgOiAnZmFsc2UnKTtcbiAgICB9KTtcbiAgfVxuXG4gIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdxdGktY2hvaWNlLWVsZW1lbnQtc2VsZWN0ZWQnLCB0aGlzLl9jaG9pY2VFbGVtZW50U2VsZWN0ZWRIYW5kbGVyKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdxdGktY2hvaWNlLWVsZW1lbnQtc2VsZWN0ZWQnLCB0aGlzLl9jaG9pY2VFbGVtZW50U2VsZWN0ZWRIYW5kbGVyKTtcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci1jaG9pY2UnLCB0aGlzLl9yZWdpc3RlckNob2ljZUVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVnaXN0ZXJDaG9pY2VFbGVtZW50KGU6IEN1c3RvbUV2ZW50KSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBjaG9pY2VFbGVtZW50ID0gZS50YXJnZXQgYXMgUXRpQ2hvaWNlO1xuICAgIHRoaXMuX2Nob2ljZUVsZW1lbnRzLnB1c2goY2hvaWNlRWxlbWVudCk7XG4gICAgdGhpcy5fc2V0SW5wdXRUeXBlKGNob2ljZUVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbG9vc2VDaG9pY2VFbGVtZW50KGU6IEN1c3RvbUV2ZW50KSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBjaG9pY2VFbGVtZW50ID0gZS50YXJnZXQgYXMgUXRpQ2hvaWNlO1xuICAgIHRoaXMuX2Nob2ljZUVsZW1lbnRzLnB1c2goY2hvaWNlRWxlbWVudCk7XG4gICAgdGhpcy5fY2hvaWNlRWxlbWVudHMgPSB0aGlzLl9jaG9pY2VFbGVtZW50cy5maWx0ZXIoY2ggPT4gY2ggIT09IGNob2ljZUVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGV0ZXJtaW5lSW5wdXRUeXBlKCkge1xuICAgIHRoaXMuX2Nob2ljZUVsZW1lbnRzLmZvckVhY2goY2hvaWNlRWxlbWVudCA9PiB7XG4gICAgICB0aGlzLl9zZXRJbnB1dFR5cGUoY2hvaWNlRWxlbWVudCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9zZXRJbnB1dFR5cGUoY2hvaWNlRWxlbWVudDogUXRpQ2hvaWNlKSB7XG4gICAgaWYgKHRoaXMubWF4Q2hvaWNlcyA9PT0gMSkge1xuICAgICAgLy8gaWYgemVybyB0aGVuIHlvdSBjYW4gY2hvb3NlIGhvdyBtdWNoIHlvdSB3YW50XG4gICAgICBjaG9pY2VFbGVtZW50LnNldEF0dHJpYnV0ZSgncm9sZScsICdyYWRpbycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaG9pY2VFbGVtZW50LnNldEF0dHJpYnV0ZSgncm9sZScsICdjaGVja2JveCcpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBfY2hvaWNlRWxlbWVudFNlbGVjdGVkSGFuZGxlcihldmVudDogQ3VzdG9tRXZlbnQ8eyBpZGVudGlmaWVyOiBzdHJpbmc7IGNoZWNrZWQ6IGJvb2xlYW4gfT4pIHtcbiAgICBpZiAodGhpcy5tYXhDaG9pY2VzID09PSAxKSB7XG4gICAgICB0aGlzLl9jaG9pY2VFbGVtZW50c1xuICAgICAgICAuZmlsdGVyKGNlID0+IGNlLmlkZW50aWZpZXIgIT09IGV2ZW50LmRldGFpbC5pZGVudGlmaWVyKVxuICAgICAgICAuZm9yRWFjaChjZSA9PiB7XG4gICAgICAgICAgY2UuY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5fY2hvaWNlRWxlbWVudFNlbGVjdGVkKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2Nob2ljZUVsZW1lbnRTZWxlY3RlZCgpIHtcbiAgICBjb25zdCBzZWxlY3RlZElkZW50aWZpZXJzID0gdGhpcy5fY2hvaWNlRWxlbWVudHMuZmlsdGVyKGNlID0+IGNlLmNoZWNrZWQpLm1hcChjZSA9PiBjZS5pZGVudGlmaWVyKTtcblxuICAgIGlmICh0aGlzLm1heENob2ljZXMgPiAxKSB7XG4gICAgICBpZiAodGhpcy5tYXhDaG9pY2VzID09PSBzZWxlY3RlZElkZW50aWZpZXJzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLl9jaG9pY2VFbGVtZW50cy5mb3JFYWNoKGNlID0+IChjZS5kaXNhYmxlZCA9ICFjZS5jaGVja2VkKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9jaG9pY2VFbGVtZW50cy5mb3JFYWNoKGNlID0+IChjZS5kaXNhYmxlZCA9IGZhbHNlKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHJlc3VsdDogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgaWYgKHRoaXMubWF4Q2hvaWNlcyA9PT0gMSkge1xuICAgICAgcmVzdWx0ID0gc2VsZWN0ZWRJZGVudGlmaWVycy5sZW5ndGggPiAwID8gc2VsZWN0ZWRJZGVudGlmaWVyc1swXSA6IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gc2VsZWN0ZWRJZGVudGlmaWVycztcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXJndW1lbnRcbiAgICB0aGlzLnNhdmVSZXNwb25zZShyZXN1bHQpO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHVuc2FmZUhUTUwgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy91bnNhZmUtaHRtbC5qcyc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvbiB9IGZyb20gJy4uL2ludGVybmFsL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uJztcblxuaW50ZXJmYWNlIE9wdGlvblR5cGUge1xuICB0ZXh0Q29udGVudDogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICBzZWxlY3RlZDogYm9vbGVhbjtcbn1cblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1pbmxpbmUtY2hvaWNlLWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlJbmxpbmVDaG9pY2VJbnRlcmFjdGlvbiBleHRlbmRzIEludGVyYWN0aW9uIHtcbiAgcHVibGljIHN0YXRpYyBpbnB1dFdpZHRoQ2xhc3MgPSBbXG4gICAgJycsXG4gICAgJ3F0aS1pbnB1dC13aWR0aC0yJyxcbiAgICAncXRpLWlucHV0LXdpZHRoLTEnLFxuICAgICdxdGktaW5wdXQtd2lkdGgtMycsXG4gICAgJ3F0aS1pbnB1dC13aWR0aC00JyxcbiAgICAncXRpLWlucHV0LXdpZHRoLTYnLFxuICAgICdxdGktaW5wdXQtd2lkdGgtMTAnLFxuICAgICdxdGktaW5wdXQtd2lkdGgtMTUnLFxuICAgICdxdGktaW5wdXQtd2lkdGgtMjAnLFxuICAgICdxdGktaW5wdXQtd2lkdGgtNzInXG4gIF07XG5cbiAgQHN0YXRlKCkgb3B0aW9uczogT3B0aW9uVHlwZVtdID0gW107XG5cbiAgQHN0YXRlKCkgY29ycmVjdE9wdGlvbjogc3RyaW5nID0gJyc7XG5cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnZGF0YS1wcm9tcHQnLCB0eXBlOiBTdHJpbmcgfSlcbiAgZGF0YVByb21wdDogc3RyaW5nID0gJ3NlbGVjdCc7XG5cbiAgc3RhdGljIG92ZXJyaWRlIGdldCBzdHlsZXMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGNzc2BcbiAgICAgICAgOmhvc3Qge1xuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgfVxuICAgICAgYFxuICAgIF07XG4gIH1cblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8c2VsZWN0IHBhcnQ9XCJzZWxlY3RcIiBAY2hhbmdlPVwiJHt0aGlzLmNob2ljZVNlbGVjdGVkfVwiID9kaXNhYmxlZD1cIiR7dGhpcy5kaXNhYmxlZH1cIiA/cmVhZG9ubHk9XCIke3RoaXMucmVhZG9ubHl9XCI+XG4gICAgICAgICR7dGhpcy5vcHRpb25zLm1hcChcbiAgICAgICAgICBvcHRpb24gPT4gaHRtbGBcbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIke29wdGlvbi52YWx1ZX1cIiA/c2VsZWN0ZWQ9XCIke29wdGlvbi5zZWxlY3RlZH1cIj4ke3Vuc2FmZUhUTUwob3B0aW9uLnRleHRDb250ZW50KX08L29wdGlvbj5cbiAgICAgICAgICBgXG4gICAgICAgICl9XG4gICAgICA8L3NlbGVjdD5cblxuICAgICAgJHt1bnNhZmVIVE1MKHRoaXMuY29ycmVjdE9wdGlvbil9XG4gICAgYDtcbiAgfVxuXG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdvbi1kcm9wZG93bi1zZWxlY3RlZCcsIHRoaXMuY2hvaWNlU2VsZWN0ZWQpO1xuICAgIGNvbnN0IGNob2ljZXMgPSBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbCgncXRpLWlubGluZS1jaG9pY2UnKSk7XG4gICAgdGhpcy5vcHRpb25zID0gW1xuICAgICAge1xuICAgICAgICB0ZXh0Q29udGVudDogdGhpcy5kYXRhUHJvbXB0LFxuICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgIHNlbGVjdGVkOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIC4uLmNob2ljZXMubWFwKGNob2ljZSA9PiAoe1xuICAgICAgICB0ZXh0Q29udGVudDogY2hvaWNlLmlubmVySFRNTCxcbiAgICAgICAgdmFsdWU6IGNob2ljZS5nZXRBdHRyaWJ1dGUoJ2lkZW50aWZpZXInKSxcbiAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlXG4gICAgICB9KSlcbiAgICBdO1xuICB9XG5cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdvbi1kcm9wZG93bi1zZWxlY3RlZCcsIHRoaXMuY2hvaWNlU2VsZWN0ZWQpO1xuICB9XG5cbiAgcHVibGljIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gdGhpcy5vcHRpb25zLmZpbmQob3B0aW9uID0+IG9wdGlvbi5zZWxlY3RlZCk7XG4gICAgcmV0dXJuIHNlbGVjdGVkT3B0aW9uID8gc2VsZWN0ZWRPcHRpb24udmFsdWUgIT09ICcnIDogZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgcmVzZXQoKSB7XG4gICAgdGhpcy5vcHRpb25zID0gdGhpcy5vcHRpb25zLm1hcCgob3B0aW9uLCBpKSA9PiAoeyAuLi5vcHRpb24sIHNlbGVjdGVkOiBpID09PSAwIH0pKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgcmVzcG9uc2UodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMub3B0aW9ucy5tYXAob3B0aW9uID0+IHtcbiAgICAgIHZhbHVlID09PSBvcHRpb24udmFsdWUgJiYgKG9wdGlvbi5zZWxlY3RlZCA9IHRydWUpO1xuICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICB9KTtcbiAgfVxuXG4gIHNldCBjb3JyZWN0UmVzcG9uc2UodmFsdWU6IFJlYWRvbmx5PHN0cmluZyB8IHN0cmluZ1tdPikge1xuICAgIGlmICh2YWx1ZSA9PT0gJycpIHtcbiAgICAgIHRoaXMuY29ycmVjdE9wdGlvbiA9ICcnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNvcnJlY3RPcHRpb24gPSBgPHNwYW4gcGFydD1cImNvcnJlY3Qtb3B0aW9uXCI+JHtcbiAgICAgIHRoaXMub3B0aW9ucy5maW5kKG9wdGlvbiA9PiB2YWx1ZSA9PT0gb3B0aW9uLnZhbHVlKS50ZXh0Q29udGVudFxuICAgIH08L3NwYW4+YDtcbiAgfVxuXG4gIHB1YmxpYyBjaG9pY2VTZWxlY3RlZChldmVudDogRXZlbnQpIHtcbiAgICBjb25zdCBzZWxlY3RlZE9wdGlvblZhbHVlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MU2VsZWN0RWxlbWVudCkudmFsdWU7XG4gICAgdGhpcy5vcHRpb25zID0gdGhpcy5vcHRpb25zLm1hcChvcHRpb24gPT4gKHsgLi4ub3B0aW9uLCBzZWxlY3RlZDogb3B0aW9uLnZhbHVlID09PSBzZWxlY3RlZE9wdGlvblZhbHVlIH0pKTtcbiAgICB0aGlzLnNhdmVSZXNwb25zZShzZWxlY3RlZE9wdGlvblZhbHVlKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktaW5saW5lLWNob2ljZS1pbnRlcmFjdGlvbic6IFF0aUlubGluZUNob2ljZUludGVyYWN0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9xdGktY2hvaWNlLWludGVyYWN0aW9uLnN0eWxlcyc7XG5pbXBvcnQgdHlwZSB7IENTU1Jlc3VsdEdyb3VwIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IENob2ljZXMgfSBmcm9tICcuLi9pbnRlcm5hbC9jaG9pY2VzL2Nob2ljZXMnO1xuXG4vKipcbiAqIEBzdW1tYXJ5IFRoZSBDaG9pY2VJbnRlcmFjdGlvbi5UeXBlIChxdGktY2hvaWNlLWludGVyYWN0aW9uKSBpbnRlcmFjdGlvbiBwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgY2hvaWNlcyB0byB0aGUgY2FuZGlkYXRlLlxuICogQGRvY3VtZW50YXRpb24gaHR0cHM6Ly93d3cuaW1zZ2xvYmFsLm9yZy9zcGVjL3F0aS92M3AwL2ltcGwjaC5qOW51MW9hMXR1M2JcbiAqIEBzdGF0dXMgc3RhYmxlXG4gKiBAc2luY2UgNi4wXG4gKlxuICogQGV2ZW50IHF0aS1yZWdpc3Rlci1pbnRlcmFjdGlvbiAtIGVtaXR0ZWQgd2hlbiB0aGUgaW50ZXJhY3Rpb24gd2FudHMgdG8gcmVnaXN0ZXIgaXRzZWxmXG4gKiBAZXZlbnQgcXRpLWludGVyYWN0aW9uLXJlc3BvbnNlIC0gZW1pdHRlZCB3aGVuIHRoZSBpbnRlcmFjdGlvbiBjaGFuZ2VzXG4gKlxuICogQHNsb3QgLSBUaGUgZGVmYXVsdCBzbG90IHdoZXJlIDxxdGktc2ltcGxlLWNob2ljZT4gbXVzdCBiZSBwbGFjZWQuXG4gKiBAc2xvdCBwcm9tcHQgLSBzbG90IHdoZXJlIHRoZSBwcm9tcHQgaXMgcGxhY2VkLlxuICovXG5cbkBjdXN0b21FbGVtZW50KCdxdGktY2hvaWNlLWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlDaG9pY2VJbnRlcmFjdGlvbiBleHRlbmRzIENob2ljZXMge1xuICBzdGF0aWMgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IHN0eWxlcztcblxuICAvKiogb3JpZW50YXRpb24gb2YgY2hvaWNlcyAqL1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSlcbiAgcHVibGljIG9yaWVudGF0aW9uOiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnO1xuXG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGAgPHNsb3QgbmFtZT1cInByb21wdFwiPjwvc2xvdD48c2xvdCBwYXJ0PVwic2xvdFwiPjwvc2xvdD5gO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1jaG9pY2UtaW50ZXJhY3Rpb24nOiBRdGlDaG9pY2VJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IGNzcyB9IGZyb20gJ2xpdCc7XG4vLyBpbXBvcnQgY29tcG9uZW50U3R5bGVzIGZyb20gJy4uLy4uL3V0aWxpdGllcy9zdHlsZXMvY29tcG9uZW50LnN0eWxlcyc7XG5cbi8qICR7Y29tcG9uZW50U3R5bGVzfSAqL1xuZXhwb3J0IGRlZmF1bHQgY3NzYFxuICA6aG9zdCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIC8vIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICB9XG5gO1xuIiwgImltcG9ydCB7IGNzcywgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgUXRpUnVsZSwgUXRpUnVsZUJhc2UgfSBmcm9tICcuLic7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktb3V0Y29tZS1wcm9jZXNzaW5nJylcbmV4cG9ydCBjbGFzcyBRdGlPdXRjb21lUHJvY2Vzc2luZyBleHRlbmRzIExpdEVsZW1lbnQge1xuICBzdGF0aWMgc3R5bGVzID0gW1xuICAgIGNzc2BcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICBgXG4gIF07XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgcHVibGljIHByb2Nlc3MoKSB7XG4gICAgY29uc3QgbG9naWMgPSBuZXcgUXRpT3V0Y29tZVByb2Nlc3NpbmdQcm9jZXNzb3IoKTtcbiAgICBjb25zdCBydWxlcyA9IFsuLi50aGlzLmNoaWxkcmVuXSBhcyBRdGlSdWxlW107XG4gICAgbG9naWMucHJvY2VzcyhydWxlcyk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLW91dGNvbWUtcHJvY2Vzc2luZyc6IFF0aU91dGNvbWVQcm9jZXNzaW5nO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBRdGlPdXRjb21lUHJvY2Vzc2luZ1Byb2Nlc3NvciB7XG4gIHB1YmxpYyBwcm9jZXNzKHJ1bGVzOiBRdGlSdWxlQmFzZVtdKSB7XG4gICAgZm9yIChjb25zdCBydWxlIG9mIHJ1bGVzKSB7XG4gICAgICBydWxlLnByb2Nlc3MoKTtcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjc3MsIGh0bWwsIExpdEVsZW1lbnQsIFByb3BlcnR5VmFsdWVNYXAgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuaW1wb3J0IHsgbWFwUmVzcG9uc2UsIG1hcFJlc3BvbnNlUG9pbnQsIG1hdGNoQ29ycmVjdCB9IGZyb20gJy4uLy4uL2ludGVybmFsL3RlbXBsYXRlLXN0cmluZ3MnO1xuaW1wb3J0IHsgdHlwZSBRdGlSdWxlIH0gZnJvbSAnLi4vcXRpLXJ1bGUvcXRpLXJ1bGUnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcnKVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXRpUmVzcG9uc2VQcm9jZXNzaW5nIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIHN0YXRpYyBzdHlsZXMgPSBbXG4gICAgY3NzYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgIGBcbiAgXTtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPHNsb3Q+PC9zbG90PmA7XG4gIH1cblxuICBwdWJsaWMgcHJvY2VzcygpIHtcbiAgICBjb25zdCBydWxlcyA9IFsuLi50aGlzLmNoaWxkcmVuXSBhcyBRdGlSdWxlW107XG5cbiAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgcnVsZXMpIHtcbiAgICAgIHJ1bGUucHJvY2VzcygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmaXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlTWFwPGFueT4gfCBNYXA8UHJvcGVydHlLZXksIHVua25vd24+KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZ2V0QXR0cmlidXRlKCd0ZW1wbGF0ZScpKSB7XG4gICAgICBjb25zdCBzcGxpdHRlZFRlbXBsYXRlTmFtZSA9IHRoaXMuZ2V0QXR0cmlidXRlKCd0ZW1wbGF0ZScpIS5zcGxpdCgnLycpO1xuICAgICAgY29uc3QgdGVtcGxhdGVOYW1lID0gc3BsaXR0ZWRUZW1wbGF0ZU5hbWVbc3BsaXR0ZWRUZW1wbGF0ZU5hbWUubGVuZ3RoIC0gMV0ucmVwbGFjZSgnLnhtbCcsICcnKTtcbiAgICAgIHRoaXMuaW5uZXJIVE1MID0gJyc7XG4gICAgICBzd2l0Y2ggKHRlbXBsYXRlTmFtZSkge1xuICAgICAgICBjYXNlICdtYXBfcmVzcG9uc2UnOiB7XG4gICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZCh0aGlzLmZyYWdtZW50RnJvbVN0cmluZyhtYXBSZXNwb25zZSkuZmlyc3RFbGVtZW50Q2hpbGQuZmlyc3RFbGVtZW50Q2hpbGQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ21hcF9yZXNwb25zZV9wb2ludCc6IHtcbiAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKHRoaXMuZnJhZ21lbnRGcm9tU3RyaW5nKG1hcFJlc3BvbnNlUG9pbnQpLmZpcnN0RWxlbWVudENoaWxkLmZpcnN0RWxlbWVudENoaWxkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdtYXRjaF9jb3JyZWN0JzpcbiAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKHRoaXMuZnJhZ21lbnRGcm9tU3RyaW5nKG1hdGNoQ29ycmVjdCkuZmlyc3RFbGVtZW50Q2hpbGQuZmlyc3RFbGVtZW50Q2hpbGQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZnJhZ21lbnRGcm9tU3RyaW5nKHN0ckhUTUw6IHN0cmluZykge1xuICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVSYW5nZSgpLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChzdHJIVE1MKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktcmVzcG9uc2UtcHJvY2Vzc2luZyc6IFF0aVJlc3BvbnNlUHJvY2Vzc2luZztcbiAgfVxufVxuIiwgImV4cG9ydCBjb25zdCBtYXRjaENvcnJlY3QgPSBgPHF0aS1yZXNwb25zZS1wcm9jZXNzaW5nPlxuICA8cXRpLXJlc3BvbnNlLWNvbmRpdGlvbj5cbiAgICA8cXRpLXJlc3BvbnNlLWlmPlxuICAgICAgPHF0aS1tYXRjaD5cbiAgICAgICAgPHF0aS12YXJpYWJsZSBpZGVudGlmaWVyPVwiUkVTUE9OU0VcIj48L3F0aS12YXJpYWJsZT5cbiAgICAgICAgPHF0aS1jb3JyZWN0IGlkZW50aWZpZXI9XCJSRVNQT05TRVwiPjwvcXRpLWNvcnJlY3Q+XG4gICAgICA8L3F0aS1tYXRjaD5cbiAgICAgIDxxdGktc2V0LW91dGNvbWUtdmFsdWUgaWRlbnRpZmllcj1cIlNDT1JFXCI+XG4gICAgICAgIDxxdGktYmFzZS12YWx1ZSBiYXNlLXR5cGU9XCJmbG9hdFwiPjE8L3F0aS1iYXNlLXZhbHVlPlxuICAgICAgPC9xdGktc2V0LW91dGNvbWUtdmFsdWU+XG4gICAgPC9xdGktcmVzcG9uc2UtaWY+XG4gICAgPHF0aS1yZXNwb25zZS1lbHNlPlxuICAgICAgPHF0aS1zZXQtb3V0Y29tZS12YWx1ZSBpZGVudGlmaWVyPVwiU0NPUkVcIj5cbiAgICAgICAgPHF0aS1iYXNlLXZhbHVlIGJhc2UtdHlwZT1cImZsb2F0XCI+MDwvcXRpLWJhc2UtdmFsdWU+XG4gICAgICA8L3F0aS1zZXQtb3V0Y29tZS12YWx1ZT5cbiAgICA8L3F0aS1yZXNwb25zZS1lbHNlPlxuICA8L3F0aS1yZXNwb25zZS1jb25kaXRpb24+XG48L3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nPmA7XG5cbmV4cG9ydCBjb25zdCBtYXBSZXNwb25zZSA9IGA8cXRpLXJlc3BvbnNlLXByb2Nlc3Npbmc+XG4gIDxxdGktcmVzcG9uc2UtY29uZGl0aW9uPlxuICAgIDxxdGktcmVzcG9uc2UtaWY+XG4gICAgICA8cXRpLWlzLW51bGw+XG4gICAgICAgIDxxdGktdmFyaWFibGUgaWRlbnRpZmllcj1cIlJFU1BPTlNFXCI+PC9xdGktdmFyaWFibGU+XG4gICAgICA8L3F0aS1pcy1udWxsPlxuICAgICAgPHF0aS1zZXQtb3V0Y29tZS12YWx1ZSBpZGVudGlmaWVyPVwiU0NPUkVcIj5cbiAgICAgICAgPHF0aS1iYXNlLXZhbHVlIGJhc2UtdHlwZT1cImZsb2F0XCI+MC4wPC9xdGktYmFzZS12YWx1ZT5cbiAgICAgIDwvcXRpLXNldC1vdXRjb21lLXZhbHVlPlxuICAgIDwvcXRpLXJlc3BvbnNlLWlmPlxuICAgIDxxdGktcmVzcG9uc2UtZWxzZT5cbiAgICAgIDxxdGktc2V0LW91dGNvbWUtdmFsdWUgaWRlbnRpZmllcj1cIlNDT1JFXCI+XG4gICAgICAgIDxxdGktbWFwLXJlc3BvbnNlIGlkZW50aWZpZXI9XCJSRVNQT05TRVwiPiA8L3F0aS1tYXAtcmVzcG9uc2U+XG4gICAgICA8L3F0aS1zZXQtb3V0Y29tZS12YWx1ZT5cbiAgICA8L3F0aS1yZXNwb25zZS1lbHNlPlxuICA8L3F0aS1yZXNwb25zZS1jb25kaXRpb24+XG48L3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nPmA7XG5cbmV4cG9ydCBjb25zdCBtYXBSZXNwb25zZVBvaW50ID0gYDxxdGktcmVzcG9uc2UtcHJvY2Vzc2luZz5cbiAgPHF0aS1yZXNwb25zZS1jb25kaXRpb24+XG4gICAgPHF0aS1yZXNwb25zZS1pZj5cbiAgICAgIDxxdGktaXMtbnVsbD5cbiAgICAgICAgPHF0aS12YXJpYWJsZSBpZGVudGlmaWVyPVwiUkVTUE9OU0VcIj48L3F0aS12YXJpYWJsZT5cbiAgICAgIDwvcXRpLWlzLW51bGw+XG4gICAgICA8cXRpLXNldC1vdXRjb21lLXZhbHVlIGlkZW50aWZpZXI9XCJTQ09SRVwiPlxuICAgICAgICA8cXRpLWJhc2UtdmFsdWUgYmFzZS10eXBlPVwiZmxvYXRcIj4wPC9xdGktYmFzZS12YWx1ZT5cbiAgICAgIDwvcXRpLXNldC1vdXRjb21lLXZhbHVlPlxuICAgIDwvcXRpLXJlc3BvbnNlLWlmPlxuICAgIDxxdGktcmVzcG9uc2UtZWxzZT5cbiAgICAgIDxxdGktc2V0LW91dGNvbWUtdmFsdWUgaWRlbnRpZmllcj1cIlNDT1JFXCI+XG4gICAgICAgIDxxdGktbWFwLXJlc3BvbnNlLXBvaW50IGlkZW50aWZpZXI9XCJSRVNQT05TRVwiPjwvcXRpLW1hcC1yZXNwb25zZS1wb2ludD5cbiAgICAgIDwvcXRpLXNldC1vdXRjb21lLXZhbHVlPlxuICAgIDwvcXRpLXJlc3BvbnNlLWVsc2U+XG4gIDwvcXRpLXJlc3BvbnNlLWNvbmRpdGlvbj5cbjwvcXRpLXJlc3BvbnNlLXByb2Nlc3Npbmc+YDtcbiIsICJpbXBvcnQgeyBPdXRjb21lVmFyaWFibGUgfSBmcm9tICdAY2l0b2xhYi9xdGktY29tcG9uZW50cy9xdGktY29tcG9uZW50cyc7XG5pbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IGNvbnZlcnROdW1iZXJUb1VuaXZlcmFsRm9ybWF0IH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdXRpbHMnO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uLy4uL3F0aS1leHByZXNzaW9uL3F0aS1leHByZXNzaW9uJztcbmltcG9ydCB7IFF0aVJ1bGUgfSBmcm9tICcuLi9xdGktcnVsZSc7XG5cbi8qKlxuICogVGhlIGxvb2t1cE91dGNvbWVWYWx1ZSBydWxlIHNldHMgdGhlIHZhbHVlIG9mIGFuIG91dGNvbWUgdmFyaWFibGUgdG8gdGhlIHZhbHVlIG9idGFpbmVkXG4gKiBieSBsb29raW5nIHVwIHRoZSB2YWx1ZSBvZiB0aGUgYXNzb2NpYXRlZCBleHByZXNzaW9uIGluIHRoZSBsb29rdXBUYWJsZSBhc3NvY2lhdGVkXG4gKiB3aXRoIHRoZSBvdXRjb21lJ3MgZGVjbGFyYXRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBRdGlMb29rdXBPdXRjb21lVmFsdWUgZXh0ZW5kcyBRdGlSdWxlIHtcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIGlkZW50aWZpZXI6IHN0cmluZztcblxuICBnZXQgY2hpbGRFeHByZXNzaW9uKCk6IFF0aUV4cHJlc3Npb248c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZmlyc3RFbGVtZW50Q2hpbGQgYXMgUXRpRXhwcmVzc2lvbjxzdHJpbmc+O1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIHByb2Nlc3MoKTogbnVtYmVyIHtcbiAgICBjb25zdCBpZGVudGlmaWVyID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2lkZW50aWZpZXInKTtcbiAgICBjb25zdCBvdXRjb21lVmFyaWFibGUgPSB0aGlzLmNsb3Nlc3QoJ3F0aS1hc3Nlc3NtZW50LWl0ZW0nKS5nZXRWYXJpYWJsZShpZGVudGlmaWVyKSBhcyBPdXRjb21lVmFyaWFibGU7XG4gICAgbGV0IHZhbHVlO1xuICAgIGlmIChvdXRjb21lVmFyaWFibGUuaW50ZXJwb2xhdGlvblRhYmxlKSB7XG4gICAgICB2YWx1ZSA9IG91dGNvbWVWYXJpYWJsZS5pbnRlcnBvbGF0aW9uVGFibGUuZ2V0KHBhcnNlSW50KHRoaXMuY2hpbGRFeHByZXNzaW9uLmNhbGN1bGF0ZSgpKSk7XG4gICAgfVxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ2xvb2t1cE91dGNvbWVWYWx1ZTogdmFsdWUgaXMgbnVsbCBvciB1bmRlZmluZWQnKTtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQ8eyBvdXRjb21lSWRlbnRpZmllcjogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10gfT4oJ3F0aS1zZXQtb3V0Y29tZS12YWx1ZScsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWUsXG4gICAgICAgIGRldGFpbDoge1xuICAgICAgICAgIG91dGNvbWVJZGVudGlmaWVyOiB0aGlzLmlkZW50aWZpZXIsXG4gICAgICAgICAgdmFsdWU6IGNvbnZlcnROdW1iZXJUb1VuaXZlcmFsRm9ybWF0KHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1sb29rdXAtb3V0Y29tZS12YWx1ZScsIFF0aUxvb2t1cE91dGNvbWVWYWx1ZSk7XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1sb29rdXAtb3V0Y29tZS12YWx1ZSc6IFF0aUxvb2t1cE91dGNvbWVWYWx1ZTtcbiAgfVxufVxuIiwgImltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBodG1sLCBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1ydWxlJylcbmV4cG9ydCBjbGFzcyBRdGlSdWxlIGV4dGVuZHMgTGl0RWxlbWVudCBpbXBsZW1lbnRzIFF0aVJ1bGVCYXNlIHtcbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgcHVibGljIHByb2Nlc3MoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFF0aVJ1bGVCYXNlIHtcbiAgcHJvY2VzcygpOiBhbnk7XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1ydWxlJzogUXRpUnVsZTtcbiAgfVxufVxuIiwgImltcG9ydCB7IGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uLy4uL3F0aS1leHByZXNzaW9uL3F0aS1leHByZXNzaW9uJztcbmltcG9ydCB7IFF0aVJ1bGUgfSBmcm9tICcuLi9xdGktcnVsZSc7XG5cbmV4cG9ydCBjbGFzcyBRdGlSZXNwb25zZUNvbmRpdGlvbiBleHRlbmRzIFF0aVJ1bGUge1xuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPHNsb3Q+PC9zbG90PmA7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgcHJvY2VzcygpIHtcbiAgICBjb25zdCBicmFuY2hlcyA9IFsuLi50aGlzLmNoaWxkcmVuXSBhcyBRdGlFeHByZXNzaW9uPGFueT5bXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnJhbmNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGJyYW5jaCA9IGJyYW5jaGVzW2ldO1xuXG4gICAgICBpZiAoYnJhbmNoLmNhbGN1bGF0ZSgpKSB7XG4gICAgICAgIChicmFuY2ggYXMgdW5rbm93biBhcyBRdGlSdWxlKS5wcm9jZXNzKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1yZXNwb25zZS1jb25kaXRpb24nLCBRdGlSZXNwb25zZUNvbmRpdGlvbik7XG4iLCAiaW1wb3J0IHsgY29udmVydE51bWJlclRvVW5pdmVyYWxGb3JtYXQgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC91dGlscyc7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uLCBRdGlFeHByZXNzaW9uQmFzZSB9IGZyb20gJy4uLy4uL3F0aS1leHByZXNzaW9uL3F0aS1leHByZXNzaW9uJztcbmltcG9ydCB7IFF0aVJ1bGUsIFF0aVJ1bGVCYXNlIH0gZnJvbSAnLi4vcXRpLXJ1bGUnO1xuXG5leHBvcnQgY2xhc3MgUXRpU2V0T3V0Y29tZVZhbHVlIGV4dGVuZHMgUXRpUnVsZSB7XG4gIHB1YmxpYyBvdmVycmlkZSBwcm9jZXNzKCkge1xuICAgIGNvbnN0IG91dGNvbWVJZGVudGlmaWVyID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2lkZW50aWZpZXInKTtcblxuICAgIGNvbnN0IGV4cHJlc3Npb24gPSB0aGlzLmZpcnN0RWxlbWVudENoaWxkIGFzIFF0aUV4cHJlc3Npb248c3RyaW5nPjtcblxuICAgIGNvbnN0IHJ1bGUgPSBuZXcgUXRpU2V0T3V0Y29tZVZhbHVlUnVsZShleHByZXNzaW9uKTtcbiAgICBjb25zdCB2YWx1ZSA9IHJ1bGUucHJvY2VzcygpO1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBDdXN0b21FdmVudDx7IG91dGNvbWVJZGVudGlmaWVyOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSB9PigncXRpLXNldC1vdXRjb21lLXZhbHVlJywge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgb3V0Y29tZUlkZW50aWZpZXIsXG4gICAgICAgICAgdmFsdWU6IEFycmF5LmlzQXJyYXkodmFsdWUpXG4gICAgICAgICAgICA/IHZhbHVlLm1hcCgodjogc3RyaW5nKSA9PiBjb252ZXJ0TnVtYmVyVG9Vbml2ZXJhbEZvcm1hdCh2KSlcbiAgICAgICAgICAgIDogY29udmVydE51bWJlclRvVW5pdmVyYWxGb3JtYXQodmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUXRpU2V0T3V0Y29tZVZhbHVlUnVsZTxUPiBpbXBsZW1lbnRzIFF0aVJ1bGVCYXNlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBleHByZXNzaW9uOiBRdGlFeHByZXNzaW9uQmFzZTxUPikge31cblxuICBwcm9jZXNzKCk6IGFueSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmV4cHJlc3Npb24gPyB0aGlzLmV4cHJlc3Npb24uY2FsY3VsYXRlKCkgOiBudWxsO1xuXG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUud2Fybignc2V0T3V0Y29tZVZhbHVlOiB2YWx1ZSBpcyBudWxsIG9yIHVuZGVmaW5lZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktc2V0LW91dGNvbWUtdmFsdWUnLCBRdGlTZXRPdXRjb21lVmFsdWUpO1xuIiwgImltcG9ydCB7IExpdEVsZW1lbnQsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgUXRpUnVsZSB9IGZyb20gJy4uL3F0aS1ydWxlL3F0aS1ydWxlJztcblxuZXhwb3J0IGNsYXNzIFF0aVJlc3BvbnNlRWxzZSBleHRlbmRzIExpdEVsZW1lbnQge1xuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPHNsb3Q+PC9zbG90PmA7XG4gIH1cblxuICBwdWJsaWMgY2FsY3VsYXRlKCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRydWU7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0U3ViUnVsZXMoKTogUXRpUnVsZVtdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuY2hpbGRyZW5dIGFzIFF0aVJ1bGVbXTtcbiAgfVxuXG4gIHB1YmxpYyBwcm9jZXNzKCkge1xuICAgIGNvbnN0IHN1YlJ1bGVzID0gdGhpcy5nZXRTdWJSdWxlcygpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3ViUnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHN1YlJ1bGUgPSBzdWJSdWxlc1tpXTtcbiAgICAgIHN1YlJ1bGUucHJvY2VzcygpO1xuICAgIH1cbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1yZXNwb25zZS1lbHNlJywgUXRpUmVzcG9uc2VFbHNlKTtcbiIsICJpbXBvcnQgeyBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IFF0aVJlc3BvbnNlSWYgfSBmcm9tICcuLi9xdGktcmVzcG9uc2UtaWYnO1xuXG5leHBvcnQgY2xhc3MgUXRpUmVzcG9uc2VFbHNlSWYgZXh0ZW5kcyBRdGlSZXNwb25zZUlmIHtcbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYCR7c3VwZXIucmVuZGVyKCl9YDtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1yZXNwb25zZS1lbHNlLWlmJywgUXRpUmVzcG9uc2VFbHNlSWYpO1xuIiwgImltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi8uLi9xdGktZXhwcmVzc2lvbi9xdGktZXhwcmVzc2lvbic7XG5pbXBvcnQgeyBRdGlSdWxlIH0gZnJvbSAnLi4vLi4vcXRpLXJ1bGUvcXRpLXJ1bGUnO1xuaW1wb3J0IHsgUXRpUmVzcG9uc2VFbHNlIH0gZnJvbSAnLi4vcXRpLXJlc3BvbnNlLWVsc2UnO1xuXG5leHBvcnQgY2xhc3MgUXRpUmVzcG9uc2VJZiBleHRlbmRzIFF0aVJlc3BvbnNlRWxzZSB7XG4gIHB1YmxpYyBvdmVycmlkZSBjYWxjdWxhdGUoKSB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IHRoaXMuZmlyc3RFbGVtZW50Q2hpbGQgYXMgUXRpRXhwcmVzc2lvbjxib29sZWFuPjtcbiAgICBjb25zdCByZXN1bHQgPSBleHByZXNzaW9uLmNhbGN1bGF0ZSgpIGFzIGJvb2xlYW47XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBnZXRTdWJSdWxlcygpOiBRdGlSdWxlW10ge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0LnB1c2godGhpcy5jaGlsZHJlbltpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktcmVzcG9uc2UtaWYnLCBRdGlSZXNwb25zZUlmKTtcbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50LCBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlLCBWYXJpYWJsZURlY2xhcmF0aW9uIH0gZnJvbSAnLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IFF0aUFzc2Vzc21lbnRJdGVtIH0gZnJvbSAnLi4vLi4vcXRpLWFzc2Vzc21lbnQtaXRlbS9xdGktYXNzZXNzbWVudC1pdGVtJztcbmltcG9ydCB7IFF0aU11bHRpcGxlIH0gZnJvbSAnLi9xdGktbXVsdGlwbGUvcXRpLW11bHRpcGxlJztcblxuZXhwb3J0IGludGVyZmFjZSBRdGlFeHByZXNzaW9uQmFzZTxUPiB7XG4gIC8vIGdldCBhc3Nlc3NtZW50SXRlbSgpOiBRdGlBc3Nlc3NtZW50SXRlbTtcblxuICAvLyBnZXRWYXJpYWJsZXMoKTogVmFyaWFibGVEZWNsYXJhdGlvbjxudW1iZXIgfCBzdHJpbmcgfCAobnVtYmVyIHwgc3RyaW5nKVtdIHwgbnVsbD5bXTtcbiAgY2FsY3VsYXRlKCk6IFJlYWRvbmx5PFQ+O1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUXRpRXhwcmVzc2lvbjxUPiBleHRlbmRzIExpdEVsZW1lbnQgaW1wbGVtZW50cyBRdGlFeHByZXNzaW9uQmFzZTxUPiB7XG4gIEBzdGF0ZSgpXG4gIHByb3RlY3RlZCByZXN1bHQ6IGFueTtcblxuICAvLyBoaWRlIHRoZSBzbG90IHdpdGggY3NzXG4gIHN0YXRpYyBzdHlsZXMgPSBjc3NgXG4gICAgc2xvdCB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgYDtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPHByZT4ke0pTT04uc3RyaW5naWZ5KHRoaXMucmVzdWx0LCBudWxsLCAyKX08L3ByZT5cbiAgICAgIDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgcHVibGljIGNhbGN1bGF0ZSgpOiBSZWFkb25seTxUPiB7XG4gICAgdGhpcy5yZXN1bHQgPSB0aGlzLmdldFJlc3VsdCgpO1xuICAgIHJldHVybiB0aGlzLnJlc3VsdDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRSZXN1bHQoKTogUmVhZG9ubHk8VD4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICBnZXQgYXNzZXNzbWVudEl0ZW0oKTogUXRpQXNzZXNzbWVudEl0ZW0ge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoJ3F0aS1hc3Nlc3NtZW50LWl0ZW0nKSBhcyBRdGlBc3Nlc3NtZW50SXRlbTtcbiAgfVxuXG4gIGdldFZhcmlhYmxlcyA9ICgpOiBWYXJpYWJsZURlY2xhcmF0aW9uPG51bWJlciB8IHN0cmluZyB8IChudW1iZXIgfCBzdHJpbmcpW10gfCBudWxsPltdID0+XG4gICAgLy8gRklYTUU6IGlmIHRoaXMgaXRzZWxmIGlzIG11bHRpcGxlLCB0aGlzIHdpbGwgbmV2ZXIgZW50ZXIgdGhlIHF0aS1tdWx0aXBsZSBzd2l0Y2hcbiAgICAvLyBTZWUgdGhpcyBleGFtcGxlIGhlcmU6IGh0dHBzOi8vZ2l0aHViLmNvbS8xRWRUZWNoL3F0aS1leGFtcGxlcy9ibG9iL21hc3Rlci9xdGl2My1leGFtcGxlcy9wYWNrYWdpbmcvaXRlbXMvRXhhbXBsZTA1LWZlZWRiYWNrQmxvY2stYWRhcHRpdmUueG1sXG5cbiAgICBBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4pXG4gICAgICAubWFwKChlOiBFbGVtZW50KSA9PiB7XG4gICAgICAgIHN3aXRjaCAoZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICBjYXNlICdxdGktYmFzZS12YWx1ZSc6IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGJhc2VUeXBlOiBlLmdldEF0dHJpYnV0ZSgnYmFzZS10eXBlJyksXG4gICAgICAgICAgICAgIHZhbHVlOiBlLnRleHRDb250ZW50LFxuICAgICAgICAgICAgICBjYXJkaW5hbGl0eTogJ3NpbmdsZSdcbiAgICAgICAgICAgIH0gYXMgUmVzcG9uc2VWYXJpYWJsZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSAncXRpLXZhcmlhYmxlJzoge1xuICAgICAgICAgICAgY29uc3QgaWRlbnRpZmllciA9IGUuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJykgfHwgJyc7XG4gICAgICAgICAgICBjb25zdCB2YXJpYWJsZSA9IHRoaXMuYXNzZXNzbWVudEl0ZW0uZ2V0VmFyaWFibGUoaWRlbnRpZmllcik7XG4gICAgICAgICAgICByZXR1cm4gdmFyaWFibGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgJ3F0aS1tdWx0aXBsZSc6IHtcbiAgICAgICAgICAgIGNvbnN0IG11bHRpcGxlID0gZSBhcyBRdGlNdWx0aXBsZTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IG11bHRpcGxlLmdldFJlc3VsdCgpO1xuICAgICAgICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaWRlbnRpZmllcjogJycsXG4gICAgICAgICAgICAgICAgYmFzZVR5cGU6IHZhbHVlc1swXS5iYXNlVHlwZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVzLm1hcCh2ID0+IHYudmFsdWUpLFxuICAgICAgICAgICAgICAgIGNhcmRpbmFsaXR5OiAnbXVsdGlwbGUnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdyZXNwb25zZSdcbiAgICAgICAgICAgICAgfSBhcyBSZXNwb25zZVZhcmlhYmxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgJ3F0aS1jb3JyZWN0Jzoge1xuICAgICAgICAgICAgY29uc3QgaWRlbnRpZmllciA9IGUuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJykgfHwgJyc7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZVZhcmlhYmxlID0gdGhpcy5hc3Nlc3NtZW50SXRlbS5nZXRSZXNwb25zZShpZGVudGlmaWVyKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGJhc2VUeXBlOiByZXNwb25zZVZhcmlhYmxlLmJhc2VUeXBlLFxuICAgICAgICAgICAgICB2YWx1ZTogcmVzcG9uc2VWYXJpYWJsZS5jb3JyZWN0UmVzcG9uc2UsXG4gICAgICAgICAgICAgIGNhcmRpbmFsaXR5OiByZXNwb25zZVZhcmlhYmxlLmNhcmRpbmFsaXR5XG4gICAgICAgICAgICB9IGFzIFJlc3BvbnNlVmFyaWFibGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIC8vIGFkZGVkIGZvciB1c2Ugb2YgcXRpLWVxdWFsLXJvdW5kZWRcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSBlIGFzIFF0aUV4cHJlc3Npb248bnVtYmVyPjtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBleHByZXNzaW9uLmdldFJlc3VsdCgpO1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGJhc2VUeXBlOiAnaW50ZWdlcicsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgY2FyZGluYWxpdHk6ICdzaW5nbGUnXG4gICAgICAgICAgICAgIH0gYXMgUmVzcG9uc2VWYXJpYWJsZTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybignZGVmYXVsdCBub3Qgc3VmZmljaWVudCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmZpbHRlcih2ID0+IHYgIT09IG51bGwpO1xufVxuIiwgImltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuL3F0aS1leHByZXNzaW9uJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFF0aUNvbmRpdGlvbkV4cHJlc3Npb24gZXh0ZW5kcyBRdGlFeHByZXNzaW9uPGJvb2xlYW4+IHtcbiAgcHVibGljIGNhbGN1bGF0ZSgpOiBSZWFkb25seTxib29sZWFuPiB7XG4gICAgdGhpcy5yZXN1bHQgPSB0aGlzLmdldFJlc3VsdCgpO1xuICAgIHJldHVybiB0aGlzLnJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSZXN1bHQoKTogUmVhZG9ubHk8Ym9vbGVhbj4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBRdGlDb25kaXRpb25FeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWNvbmRpdGlvbi1leHByZXNzaW9uJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbnR5cGUgQ29uc3RydWN0b3I8VD4gPSBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBUO1xuZXhwb3J0IGNsYXNzIFF0aUFuZCBleHRlbmRzIHF0aUFuZE1peGluKFF0aUNvbmRpdGlvbkV4cHJlc3Npb24gYXMgdW5rbm93biBhcyBDb25zdHJ1Y3RvcjxRdGlDb25kaXRpb25FeHByZXNzaW9uPikge1xuICBwdWJsaWMgY2FsY3VsYXRlKCkge1xuICAgIHJldHVybiB0aGlzLmNhbGN1bGF0ZUNoaWxkcmVuKEFycmF5LmZyb20odGhpcy5jaGlsZHJlbiBhcyB1bmtub3duIGFzIFF0aUV4cHJlc3Npb248YW55PltdKSk7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgTW9ja1F0aUV4cHJlc3Npb248VD4gPSB7IGNhbGN1bGF0ZTogKCkgPT4gVCB9O1xudHlwZSBNb2NrQ29uc3RydWN0b3IgPSBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiB7fTtcbmV4cG9ydCBmdW5jdGlvbiBxdGlBbmRNaXhpbjxUQmFzZSBleHRlbmRzIE1vY2tDb25zdHJ1Y3Rvcj4oQmFzZTogVEJhc2UpIHtcbiAgcmV0dXJuIGNsYXNzIE1vY2tRdGlBbmQgZXh0ZW5kcyBCYXNlIHtcbiAgICBwdWJsaWMgY2FsY3VsYXRlQ2hpbGRyZW4oY2hpbGRyZW46IEFycmF5PE1vY2tRdGlFeHByZXNzaW9uPGFueT4+KSB7XG4gICAgICAvLyBjaGlsZHJlbiBjYW4gYmUgYSBtaXggb2YgcXRpLWV4cHJlc3Npb24gYW5kIHF0aS1jb25kaXRpb24tZXhwcmVzc2lvblxuICAgICAgY29uc3QgdmFsdWVzID0gY2hpbGRyZW4ubWFwKGMgPT4ge1xuICAgICAgICBjb25zdCBjb25kaXRpb24gPSBjIGFzIE1vY2tRdGlFeHByZXNzaW9uPGFueT47XG4gICAgICAgIGlmICghY29uZGl0aW9uLmNhbGN1bGF0ZSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFbGVtZW50IGRvZXNuJ3QgaW1wbGVtZW50IFF0aUNvbmRpdGlvbkV4cHJlc3Npb25cIik7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHZhbHVlID0gY29uZGl0aW9uLmNhbGN1bGF0ZSgpIGFzIEJvb2xlYW47XG4gICAgICAgIC8vIGNvbnZlcnQgc3RyaW5nIHZhbHVlIHRvIGJvb2xlYW4gYW5kIHJldHVybiBudWxsIGlmIG5vdCBwb3NzaWJsZVxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJ3RydWUnKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJ2ZhbHNlJykge1xuICAgICAgICAgICAgdmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCB2YWx1ZSBpbiBxdGktYW5kLCBleHBlY3RlZCBib29sZWFuJyk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gdmFsdWVzLmV2ZXJ5KGUgPT4ge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGUgPT09ICdib29sZWFuJyAmJiBlO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuIiwgImltcG9ydCB7IFF0aUFuZCB9IGZyb20gJy4vcXRpLWFuZCc7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1hbmQnLCBRdGlBbmQpO1xuXG5leHBvcnQgKiBmcm9tICcuL3F0aS1hbmQnO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktYW5kJzogUXRpQW5kO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBCYXNlVHlwZSB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFsL2V4cHJlc3Npb24tcmVzdWx0JztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5leHBvcnQgY2xhc3MgUXRpQmFzZVZhbHVlIGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxzdHJpbmc+IHtcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdiYXNlLXR5cGUnIH0pIGJhc2VUeXBlOiBCYXNlVHlwZSA9ICdzdHJpbmcnO1xuXG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKTogc3RyaW5nIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMudGV4dENvbnRlbnQ7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLWJhc2UtdmFsdWUnLCBRdGlCYXNlVmFsdWUpO1xuIiwgImltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1jb25kaXRpb24tZXhwcmVzc2lvbic7XG5cbi8vIFBLOiBGb3IgdGhlIGNvbnRhaW5zIHdlIGFzc3VtZSB0aGUgZXhwcmVzc2lvbnMgdG8gY2FsY3VsYXRlIGFyZSBhbGwgZGlyZWN0ZWRQYWlyc1xuLy8gSSBkb24ndCBrbm93IGl0IHRoaXMgaW4gUVRJIGlzIGFsd2F5cyB0aGUgY2FzZSBob3dldmVyP1xuZXhwb3J0IGNsYXNzIFF0aUNvbnRhaW5zIGV4dGVuZHMgUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiB7XG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKSB7XG4gICAgLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgZm9yIG90aGVyIHR5cGVzIHRoYW4gZGlyZWN0ZWRQYWlyXG4gICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRWYXJpYWJsZXMoKSBhcyBSZXNwb25zZVZhcmlhYmxlW107XG4gICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAyKSB7XG4gICAgICBjb25zdCB2YWx1ZTEgPSB2YWx1ZXNbMF07XG4gICAgICBjb25zdCB2YWx1ZTIgPSB2YWx1ZXNbMV07XG4gICAgICBpZiAoXG4gICAgICAgIHZhbHVlMS5iYXNlVHlwZSA9PT0gJ2RpcmVjdGVkUGFpcicgJiZcbiAgICAgICAgdmFsdWUyLmJhc2VUeXBlID09PSAnZGlyZWN0ZWRQYWlyJyAmJlxuICAgICAgICB2YWx1ZTEuY2FyZGluYWxpdHkgPT09ICdtdWx0aXBsZSdcbiAgICAgICkge1xuICAgICAgICBjb25zdCBwcm9qZWN0aW9uMSA9IHZhbHVlMS52YWx1ZSBhcyBzdHJpbmdbXTtcbiAgICAgICAgY29uc3QgcHJvamVjdGlvbjIgPSB2YWx1ZTIudmFsdWUgYXMgc3RyaW5nW107XG4gICAgICAgIGNvbnN0IGVudW1lcmFibGUgPSBwcm9qZWN0aW9uMS5maWx0ZXIoeCA9PiBwcm9qZWN0aW9uMi5pbmNsdWRlcyh4KSk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZW51bWVyYWJsZS5sZW5ndGggPiAwO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdmFsdWUxLmJhc2VUeXBlID09PSAnZGlyZWN0ZWRQYWlyJyAmJlxuICAgICAgICB2YWx1ZTIuYmFzZVR5cGUgPT09ICdkaXJlY3RlZFBhaXInICYmXG4gICAgICAgIHZhbHVlMS5jYXJkaW5hbGl0eSA9PT0gJ3NpbmdsZSdcbiAgICAgICkge1xuICAgICAgICBjb25zdCBwcm9qZWN0aW9uMSA9IHZhbHVlMS52YWx1ZSBhcyBzdHJpbmc7XG4gICAgICAgIGNvbnN0IHByb2plY3Rpb24yID0gdmFsdWUyLnZhbHVlIGFzIHN0cmluZ1tdO1xuICAgICAgICByZXR1cm4gcHJvamVjdGlvbjIuaW5jbHVkZXMocHJvamVjdGlvbjEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAndW5zdXBwb3J0ZWQgYmFzZVR5cGUgb3IgY2FyZGluYWxpdHkgaW4gcXRpIGNvbnRhaW5zLCBvbmx5IGJhc2VUeXBlOiBkaXJlY3RlZFBhaXIgYW5kIGNhcmRpbmFsaXR5OiBtdWx0aXBsZSBpcyBzdXBwb3J0ZWQnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgbnVtYmVyIG9mIGNoaWxkcmVuIGluIHF0aSBjb250YWlucycpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktY29udGFpbnMnLCBRdGlDb250YWlucyk7XG4iLCAiaW1wb3J0IHsgUXRpQXNzZXNzbWVudEl0ZW0gfSBmcm9tICcuLi8uLi8uLi9xdGktYXNzZXNzbWVudC1pdGVtL3F0aS1hc3Nlc3NtZW50LWl0ZW0nO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxuZXhwb3J0IGNsYXNzIFF0aUNvcnJlY3QgZXh0ZW5kcyBRdGlFeHByZXNzaW9uPHN0cmluZyB8IHN0cmluZ1tdPiB7XG4gIGdldCBpbnRlcnByZXRhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoJ2ludGVycHJldGF0aW9uJykgfHwgJyc7XG4gIH1cblxuICBvdmVycmlkZSBnZXRSZXN1bHQoKSB7XG4gICAgY29uc3QgaWRlbnRpZmllciA9IHRoaXMuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJykgfHwgJyc7XG4gICAgY29uc3QgcmVzcG9uc2VWYXJpYWJsZSA9ICh0aGlzLmNsb3Nlc3QoJ3F0aS1hc3Nlc3NtZW50LWl0ZW0nKSBhcyBRdGlBc3Nlc3NtZW50SXRlbSkuZ2V0UmVzcG9uc2UoaWRlbnRpZmllcik7XG4gICAgcmVzcG9uc2VWYXJpYWJsZS5jb3JyZWN0UmVzcG9uc2U7XG4gICAgaWYgKHJlc3BvbnNlVmFyaWFibGUuY2FyZGluYWxpdHkgIT09ICdzaW5nbGUnKSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2VWYXJpYWJsZS5jb3JyZWN0UmVzcG9uc2UubGVuZ3RoID4gMCA/IHJlc3BvbnNlVmFyaWFibGUuY29ycmVjdFJlc3BvbnNlWzBdIDogJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByZXNwb25zZVZhcmlhYmxlLmNvcnJlY3RSZXNwb25zZTtcbiAgICB9XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktY29ycmVjdCcsIFF0aUNvcnJlY3QpO1xuIiwgImltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgUmVzcG9uc2VWYXJpYWJsZSB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuXG5leHBvcnQgY2xhc3MgUXRpRXF1YWxSb3VuZGVkIGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxib29sZWFuPiB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KSByb3VuZGluZ01vZGU6ICdkZWNpbWFsUGxhY2VzJyB8ICdzaWduaWZpY2FudEZpZ3VyZXMnID0gJ3NpZ25pZmljYW50RmlndXJlcyc7XG5cbiAgZ2V0IGZpZ3VyZXMoKSB7XG4gICAgY29uc3QgYXR0ciA9IHRoaXMuZ2V0QXR0cmlidXRlKCdmaWd1cmVzJyk7XG4gICAgaWYgKCFhdHRyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdmaWd1cmVzIGF0dHJpYnV0ZSBpcyBtaXNzaW5nJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgZmlndXJlcyA9IHBhcnNlSW50KHRoaXMuZ2V0QXR0cmlidXRlKCdmaWd1cmVzJykgfHwgJzAnKTtcbiAgICBpZiAoaXNOYU4oZmlndXJlcykpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2ZpZ3VyZXMgYXR0cmlidXRlIGlzIG5vdCBhIG51bWJlcicpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChmaWd1cmVzIDwgMCkge1xuICAgICAgY29uc29sZS5lcnJvcignZmlndXJlcyBhdHRyaWJ1dGUgaXMgbmVnYXRpdmUnKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAoZmlndXJlcyA8IDEgJiYgdGhpcy5yb3VuZGluZ01vZGUgPT09ICdzaWduaWZpY2FudEZpZ3VyZXMnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdmaWd1cmVzIGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4gMSBmb3IgUm91bmRpbmdNb2RlIHNpZ25pZmljYW50RmlndXJlcycpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBmaWd1cmVzO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpIHtcbiAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDIpIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0VmFyaWFibGVzKCkgYXMgUmVzcG9uc2VWYXJpYWJsZVtdO1xuICAgICAgY29uc3QgdmFsdWUxID0gdmFsdWVzWzBdO1xuICAgICAgY29uc3QgdmFsdWUyID0gdmFsdWVzWzFdO1xuICAgICAgaWYgKHRoaXMucm91bmRpbmdNb2RlID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICB2YWx1ZTEuY2FyZGluYWxpdHkgIT09ICdzaW5nbGUnIHx8XG4gICAgICAgIHZhbHVlMi5jYXJkaW5hbGl0eSAhPT0gJ3NpbmdsZScgfHxcbiAgICAgICAgQXJyYXkuaXNBcnJheSh2YWx1ZTEudmFsdWUpIHx8XG4gICAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUyLnZhbHVlKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgY2FyZGluYWxpdHkgaW4gcXRpIGVxdWFsJyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAodmFsdWVzWzBdLmJhc2VUeXBlKSB7XG4gICAgICAgIGNhc2UgJ2ludGVnZXInOlxuICAgICAgICBjYXNlICdmbG9hdCc6IHtcbiAgICAgICAgICBjb25zdCBmbG9hdDEgPSBwYXJzZUZsb2F0KHZhbHVlMS52YWx1ZSBhcyBzdHJpbmcpO1xuICAgICAgICAgIGNvbnN0IGZsb2F0MiA9IHBhcnNlRmxvYXQodmFsdWUyLnZhbHVlIGFzIHN0cmluZyk7XG5cbiAgICAgICAgICBpZiAoIWlzTmFOKGZsb2F0MSkgJiYgIWlzTmFOKGZsb2F0MikpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJvdW5kaW5nTW9kZSA9PT0gJ3NpZ25pZmljYW50RmlndXJlcycpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZsb2F0MS50b1ByZWNpc2lvbih0aGlzLmZpZ3VyZXMpID09PSBmbG9hdDIudG9QcmVjaXNpb24odGhpcy5maWd1cmVzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgTWF0aC5yb3VuZChmbG9hdDEgKiBNYXRoLnBvdygxMCwgdGhpcy5maWd1cmVzKSkgLyBNYXRoLnBvdygxMCwgdGhpcy5maWd1cmVzKSA9PT1cbiAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKGZsb2F0MiAqIE1hdGgucG93KDEwLCB0aGlzLmZpZ3VyZXMpKSAvIE1hdGgucG93KDEwLCB0aGlzLmZpZ3VyZXMpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYHZhbHVlIGNhbm5vdCBiZSBjYXN0ZWQgdG8gbnVtZXJpYyB2YWx1ZSBpbiBlcXVhbFJvdW5kZWQgb3BlcmF0b3I6ICR7ZmxvYXQxfSwgJHtmbG9hdDJ9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGB2YWx1ZXMgb3RoZXIgdGhhbiBmbG9hdCBhbmQgaW50IGNhbm5vdCBiZSB1c2VkIGluIGVxdWFsUm91bmRlZCBvcGVyYXRvci5gKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIG51bWJlciBvZiBjaGlsZHJlbiBpbiBxdGktZXF1YWwtcm91bmRlZCcpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLWVxdWFsLXJvdW5kZWQnLCBRdGlFcXVhbFJvdW5kZWQpO1xuIiwgImltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgUmVzcG9uc2VWYXJpYWJsZSB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBTY29yaW5nSGVscGVyIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL3Njb3JpbmctaGVscGVyJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBjbGFzcyBRdGlFcXVhbCBleHRlbmRzIFF0aUV4cHJlc3Npb248Ym9vbGVhbj4ge1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgdG9sZXJhbmNlTW9kZTogJ2V4YWN0JyB8ICdyZWxhdGl2ZScgfCAnYWJzb2x1dGUnID0gJ2V4YWN0JztcblxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCkge1xuICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMikge1xuICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRWYXJpYWJsZXMoKSBhcyBSZXNwb25zZVZhcmlhYmxlW107XG4gICAgICBjb25zdCB2YWx1ZTEgPSB2YWx1ZXNbMF07XG4gICAgICBjb25zdCB2YWx1ZTIgPSB2YWx1ZXNbMV07XG4gICAgICBpZiAodGhpcy50b2xlcmFuY2VNb2RlICE9PSAnZXhhY3QnKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3RvbGVyYW5jZU1vZGUgaXMgbm90IHN1cHBvcnRlZCB5ZXQnKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICB2YWx1ZTEuY2FyZGluYWxpdHkgIT09ICdzaW5nbGUnIHx8XG4gICAgICAgIHZhbHVlMi5jYXJkaW5hbGl0eSAhPT0gJ3NpbmdsZScgfHxcbiAgICAgICAgQXJyYXkuaXNBcnJheSh2YWx1ZTEudmFsdWUpIHx8XG4gICAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUyLnZhbHVlKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgY2FyZGluYWxpdHkgaW4gcXRpIGVxdWFsJyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBTY29yaW5nSGVscGVyLmNvbXBhcmVTaW5nbGVWYWx1ZXModmFsdWUxLnZhbHVlIGFzIHN0cmluZywgdmFsdWUyLnZhbHVlIGFzIHN0cmluZywgdmFsdWUxLmJhc2VUeXBlKTtcbiAgICB9XG4gICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBudW1iZXIgb2YgY2hpbGRyZW4gaW4gcXRpLWVxdWFsJyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktZXF1YWwnLCBRdGlFcXVhbCk7XG4iLCAiaW1wb3J0IHsgQmFzZVR5cGUgfSBmcm9tICcuLi8uLic7XG5cbmV4cG9ydCBjbGFzcyBTY29yaW5nSGVscGVyIHtcbiAgcHVibGljIHN0YXRpYyBjb21wYXJlU2luZ2xlVmFsdWVzKHZhbHVlMTogUmVhZG9ubHk8c3RyaW5nPiwgdmFsdWUyOiBSZWFkb25seTxzdHJpbmc+LCBiYXNlVHlwZTogQmFzZVR5cGUpOiBib29sZWFuIHtcbiAgICBzd2l0Y2ggKGJhc2VUeXBlKSB7XG4gICAgICBjYXNlICdpZGVudGlmaWVyJzpcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIHJldHVybiB2YWx1ZTEgPT09IHZhbHVlMjtcbiAgICAgIGNhc2UgJ2ludGVnZXInOiB7XG4gICAgICAgIGNvbnN0IGludDEgPSBwYXJzZUludCh2YWx1ZTEsIDEwKTtcbiAgICAgICAgY29uc3QgaW50MiA9IHBhcnNlSW50KHZhbHVlMiwgMTApO1xuICAgICAgICBpZiAoIWlzTmFOKGludDEpICYmICFpc05hTihpbnQyKSkge1xuICAgICAgICAgIHJldHVybiBpbnQxID09PSBpbnQyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYENhbm5vdCBjb252ZXJ0ICR7dmFsdWUxfSBhbmQvb3IgJHt2YWx1ZTJ9IHRvIGludC5gKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2Zsb2F0Jzoge1xuICAgICAgICBjb25zdCBmbG9hdDEgPSBwYXJzZUZsb2F0KHZhbHVlMSk7XG4gICAgICAgIGNvbnN0IGZsb2F0MiA9IHBhcnNlRmxvYXQodmFsdWUyKTtcbiAgICAgICAgaWYgKCFpc05hTihmbG9hdDEpICYmICFpc05hTihmbG9hdDIpKSB7XG4gICAgICAgICAgcmV0dXJuIGZsb2F0MSA9PT0gZmxvYXQyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYGNvdWxkbid0IGNvbnZlcnQgJHt2YWx1ZTF9IGFuZC9vciAke3ZhbHVlMn0gdG8gZmxvYXQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdwYWlyJzpcbiAgICAgIGNhc2UgJ2RpcmVjdGVkUGFpcic6IHtcbiAgICAgICAgY29uc3QgcGFpcjEgPSB2YWx1ZTEuc3BsaXQoJyAnKS5zb3J0KCk7XG4gICAgICAgIGNvbnN0IHBhaXIyID0gdmFsdWUyLnNwbGl0KCcgJykuc29ydCgpO1xuICAgICAgICBpZiAocGFpcjEubGVuZ3RoID09PSAyICYmIHBhaXIyLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIGlmIChiYXNlVHlwZSA9PT0gJ3BhaXInKSB7XG4gICAgICAgICAgICBwYWlyMS5zb3J0KCk7XG4gICAgICAgICAgICBwYWlyMi5zb3J0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBwYWlyMS5qb2luKCcgJykgPT09IHBhaXIyLmpvaW4oJyAnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBjb21wYXJlZCB0d28gcGFpciBidXQgb25lIG9mIHRoZSB2YWx1ZXMgZG9lcyBub3QgaGF2ZSAyIHZhbHVlczogMTogJHt2YWx1ZTF9IDI6ICR7dmFsdWUyfWApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIiwgImltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxuZXhwb3J0IGNsYXNzIFF0aUd0IGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxib29sZWFuPiB7XG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAyKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldFZhcmlhYmxlcygpIGFzIFJlc3BvbnNlVmFyaWFibGVbXTtcbiAgICAgIGNvbnN0IHZhbHVlMSA9IHZhbHVlc1swXTtcbiAgICAgIGNvbnN0IHZhbHVlMiA9IHZhbHVlc1sxXTtcbiAgICAgIGlmICh2YWx1ZTEuYmFzZVR5cGUgPT09IHZhbHVlMi5iYXNlVHlwZSAmJiAodmFsdWUxLmJhc2VUeXBlID09PSAnaW50ZWdlcicgfHwgdmFsdWUxLmJhc2VUeXBlID09PSAnZmxvYXQnKSkge1xuICAgICAgICByZXR1cm4gK3ZhbHVlMS52YWx1ZSA+ICt2YWx1ZTIudmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIGJhc2VUeXBlIG9yIGNhcmRpbmFsaXR5IGluIHF0aSBndCcpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIG51bWJlciBvZiBjaGlsZHJlbiBpbiBxdCcpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLWd0JywgUXRpR3QpO1xuIiwgImltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1jb25kaXRpb24tZXhwcmVzc2lvbic7XG5cbi8vIFBLOiBGb3IgdGhlIGNvbnRhaW5zIHdlIGFzc3VtZSB0aGUgZXhwcmVzc2lvbnMgdG8gY2FsY3VsYXRlIGFyZSBhbGwgZGlyZWN0ZWRQYWlyc1xuLy8gSSBkb24ndCBrbm93IGl0IHRoaXMgaW4gUVRJIGlzIGFsd2F5cyB0aGUgY2FzZSBob3dldmVyP1xuZXhwb3J0IGNsYXNzIFF0aUd0ZSBleHRlbmRzIFF0aUNvbmRpdGlvbkV4cHJlc3Npb24ge1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMikge1xuICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRWYXJpYWJsZXMoKSBhcyBSZXNwb25zZVZhcmlhYmxlW107XG4gICAgICBjb25zdCB2YWx1ZTEgPSB2YWx1ZXNbMF07XG4gICAgICBjb25zdCB2YWx1ZTIgPSB2YWx1ZXNbMV07XG4gICAgICBpZiAodmFsdWUxLmJhc2VUeXBlID09PSB2YWx1ZTIuYmFzZVR5cGUgJiYgKHZhbHVlMS5iYXNlVHlwZSA9PT0gJ2ludGVnZXInIHx8IHZhbHVlMS5iYXNlVHlwZSA9PT0gJ2Zsb2F0JykpIHtcbiAgICAgICAgcmV0dXJuICt2YWx1ZTEudmFsdWUgPj0gK3ZhbHVlMi52YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgYmFzZVR5cGUgb3IgY2FyZGluYWxpdHkgaW4gcXRpIGd0ZScpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc29sZS5sb2coJ3VuZXhwZWN0ZWQgbnVtYmVyIG9mIGNoaWxkcmVuIGluIHF0ZScpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLWd0ZScsIFF0aUd0ZSk7XG4iLCAiaW1wb3J0IHsgUmVzcG9uc2VWYXJpYWJsZSB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuXG4vLyBQSzogRm9yIHRoZSBjb250YWlucyB3ZSBhc3N1bWUgdGhlIGV4cHJlc3Npb25zIHRvIGNhbGN1bGF0ZSBhcmUgYWxsIGRpcmVjdGVkUGFpcnNcbi8vIEkgZG9uJ3Qga25vdyBpdCB0aGlzIGluIFFUSSBpcyBhbHdheXMgdGhlIGNhc2UgaG93ZXZlcj9cbmV4cG9ydCBjbGFzcyBRdGlJc051bGwgZXh0ZW5kcyBRdGlFeHByZXNzaW9uPGJvb2xlYW4+IHtcbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IHZhcmlhYmxlcyA9IHRoaXMuZ2V0VmFyaWFibGVzKCkgYXMgUmVzcG9uc2VWYXJpYWJsZVtdO1xuICAgICAgaWYgKCF2YXJpYWJsZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBjb25zdCB2YWx1ZSA9IHZhcmlhYmxlc1swXS52YWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJyc7XG4gICAgfVxuICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgbnVtYmVyIG9mIGNoaWxkcmVuIGluIHF0aSBOdWxsJyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktaXMtbnVsbCcsIFF0aUlzTnVsbCk7XG4iLCAiaW1wb3J0IHsgUmVzcG9uc2VWYXJpYWJsZSB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuXG5leHBvcnQgY2xhc3MgUXRpTHQgZXh0ZW5kcyBRdGlFeHByZXNzaW9uPGJvb2xlYW4+IHtcbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDIpIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0VmFyaWFibGVzKCkgYXMgUmVzcG9uc2VWYXJpYWJsZVtdO1xuICAgICAgY29uc3QgdmFsdWUxID0gdmFsdWVzWzBdO1xuICAgICAgY29uc3QgdmFsdWUyID0gdmFsdWVzWzFdO1xuICAgICAgaWYgKHZhbHVlMS5iYXNlVHlwZSA9PT0gdmFsdWUyLmJhc2VUeXBlICYmICh2YWx1ZTEuYmFzZVR5cGUgPT09ICdpbnRlZ2VyJyB8fCB2YWx1ZTEuYmFzZVR5cGUgPT09ICdmbG9hdCcpKSB7XG4gICAgICAgIHJldHVybiArdmFsdWUxLnZhbHVlIDwgK3ZhbHVlMi52YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgYmFzZVR5cGUgb3IgY2FyZGluYWxpdHkgaW4gcXRpIGx0Jyk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgbnVtYmVyIG9mIGNoaWxkcmVuIGluIGx0Jyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktbHQnLCBRdGlMdCk7XG4iLCAiaW1wb3J0IHsgUmVzcG9uc2VWYXJpYWJsZSB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBRdGlDb25kaXRpb25FeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWNvbmRpdGlvbi1leHByZXNzaW9uJztcblxuLy8gUEs6IEZvciB0aGUgY29udGFpbnMgd2UgYXNzdW1lIHRoZSBleHByZXNzaW9ucyB0byBjYWxjdWxhdGUgYXJlIGFsbCBkaXJlY3RlZFBhaXJzXG4vLyBJIGRvbid0IGtub3cgaXQgdGhpcyBpbiBRVEkgaXMgYWx3YXlzIHRoZSBjYXNlIGhvd2V2ZXI/XG5leHBvcnQgY2xhc3MgUXRpTHRlIGV4dGVuZHMgUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiB7XG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAyKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldFZhcmlhYmxlcygpIGFzIFJlc3BvbnNlVmFyaWFibGVbXTtcbiAgICAgIGNvbnN0IHZhbHVlMSA9IHZhbHVlc1swXTtcbiAgICAgIGNvbnN0IHZhbHVlMiA9IHZhbHVlc1sxXTtcbiAgICAgIGlmICh2YWx1ZTEuYmFzZVR5cGUgPT09IHZhbHVlMi5iYXNlVHlwZSAmJiAodmFsdWUxLmJhc2VUeXBlID09PSAnaW50ZWdlcicgfHwgdmFsdWUxLmJhc2VUeXBlID09PSAnZmxvYXQnKSkge1xuICAgICAgICByZXR1cm4gK3ZhbHVlMS52YWx1ZSA8PSArdmFsdWUyLnZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBiYXNlVHlwZSBvciBjYXJkaW5hbGl0eSBpbiBxdGkgbHRlJyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zb2xlLmxvZygndW5leHBlY3RlZCBudW1iZXIgb2YgY2hpbGRyZW4gaW4gbHRlJyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktbHRlJywgUXRpTHRlKTtcbiIsICJpbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IFNjb3JpbmdIZWxwZXIgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvc2NvcmluZy1oZWxwZXInO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxuZXhwb3J0IGNsYXNzIFF0aU1hcFJlc3BvbnNlIGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxudW1iZXI+IHtcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIGlkZW50aWZpZXI6IHN0cmluZztcblxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCk6IG51bWJlciB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSB0aGlzLmFzc2Vzc21lbnRJdGVtLmdldFJlc3BvbnNlKHRoaXMuaWRlbnRpZmllcik7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgY29uc29sZS53YXJuKGBSZXNwb25zZSAke3RoaXMuaWRlbnRpZmllcn0gY2FuIG5vdCBiZSBmb3VuZGApO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IG1hcHBpbmcgPSByZXNwb25zZS5tYXBwaW5nO1xuICAgIGNvbnN0IGNhbmRpZGF0ZVJlc3BvbnNlcyA9ICFBcnJheS5pc0FycmF5KHJlc3BvbnNlLnZhbHVlKSA/IFtyZXNwb25zZS52YWx1ZV0gOiByZXNwb25zZS52YWx1ZTtcbiAgICBsZXQgcmVzdWx0ID0gMDtcbiAgICBmb3IgKGNvbnN0IGNhbmRpZGF0ZVJlc3BvbnNlIG9mIGNhbmRpZGF0ZVJlc3BvbnNlcykge1xuICAgICAgY29uc3QgbWFwcGVkVmFsdWUgPSBtYXBwaW5nLm1hcEVudHJpZXMuZmluZChlbnRyeSA9PiB7XG4gICAgICAgIHJldHVybiBTY29yaW5nSGVscGVyLmNvbXBhcmVTaW5nbGVWYWx1ZXMoZW50cnkubWFwS2V5LCBjYW5kaWRhdGVSZXNwb25zZSwgcmVzcG9uc2UuYmFzZVR5cGUpO1xuICAgICAgfSk7XG4gICAgICBpZiAoIShtYXBwZWRWYWx1ZSA9PSBudWxsIHx8IG1hcHBlZFZhbHVlLm1hcHBlZFZhbHVlID09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgcmVzdWx0ICs9IG1hcHBlZFZhbHVlLm1hcHBlZFZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ICs9IG1hcHBpbmcuZGVmYXVsdFZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobWFwcGluZy5sb3dlckJvdW5kICE9IG51bGwpIHtcbiAgICAgIHJlc3VsdCA9IE1hdGgubWF4KG1hcHBpbmcubG93ZXJCb3VuZCwgcmVzdWx0KTtcbiAgICB9XG4gICAgaWYgKG1hcHBpbmcudXBwZXJCb3VuZCAhPSBudWxsKSB7XG4gICAgICByZXN1bHQgPSBNYXRoLm1pbihtYXBwaW5nLnVwcGVyQm91bmQsIHJlc3VsdCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktbWFwLXJlc3BvbnNlJywgUXRpTWFwUmVzcG9uc2UpO1xuIiwgImltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSBcImxpdC9kZWNvcmF0b3JzLmpzXCI7XG5pbXBvcnQgeyBMaXRFbGVtZW50IH0gZnJvbSBcImxpdFwiO1xuXG5leHBvcnQgY2xhc3MgUXRpTWFwcGluZyBleHRlbmRzIExpdEVsZW1lbnQge1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6IFwiZGVmYXVsdC12YWx1ZVwiLCB0eXBlOiBOdW1iZXIgfSkgZGVmYXVsdFZhbHVlOiBudW1iZXIgPSAwO1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6IFwibG93ZXItYm91bmRcIiwgdHlwZTogTnVtYmVyIH0pIGxvd2VyQm91bmQ6IG51bWJlcjtcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiBcInVwcGVyLWJvdW5kXCIsIHR5cGU6IE51bWJlciB9KSB1cHBlckJvdW5kOiBudW1iZXI7XG5cbiAgXG4gIHB1YmxpYyBnZXQgbWFwRW50cmllcygpIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoXCJxdGktbWFwLWVudHJ5XCIpKS5tYXAoKGVsKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtYXBLZXk6IGVsLmdldEF0dHJpYnV0ZShcIm1hcC1rZXlcIiksXG4gICAgICAgIG1hcHBlZFZhbHVlOiArZWwuZ2V0QXR0cmlidXRlKFwibWFwcGVkLXZhbHVlXCIpLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJxdGktbWFwcGluZ1wiLCBRdGlNYXBwaW5nKTtcbiIsICJpbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IFNjb3JpbmdIZWxwZXIgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvc2NvcmluZy1oZWxwZXInO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxuZXhwb3J0IGNsYXNzIFF0aU1hdGNoIGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxib29sZWFuPiB7XG4gIC8vUEsgOiBGSVhNRS5cbiAgLy8gVGhpcyB3YXMgYSBsaXR0bGUgZXhwZXJpbWVudCBpZiB3ZSBjb3VsZCBjYWxsIHRoZSBtYXRjaCBmdW5jdGlvbiBhcyBhIHN0YXRpYyBmdW5jdGlvbixcbiAgLy8gVGhpcyBjYW4gYmUgdXNlZCBmb3IgYWxsIGtpbmQgb2YgdGhpbmdzLCBidXQgbm93IGVzcGVjaWFsbHkgZm9yIHVzZSBpblxuICAvLyBxdGktcmVzcG9uc2UtY29uZGl0aW9uLXNjcmlwdFxuICAvLyBpbiB3aGljaCB3ZSBwYXNzIHRoZSBleHByZXNzaW9ucyBhcyBwdXJlIGZ1bmN0aW9ucywgYW5kIGhvcGUgZm9yIHRoZSBiZXN0LlxuICAvLyBTQURMWSwgdGhlIGdldFZhcmlhYmxlcyB0aHJvd3Mgcm9ldCBpbiBkZSBldGVuLi4gd2VldCBub2cgbmlldCBwcmVjaWVzIGhvZSBkZXplIHdlcmt0LlxuICAvLyBNYWFyIGlrIGdhIGVyaW4gZHVpa2VuLlxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCkge1xuICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMikge1xuICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRWYXJpYWJsZXMoKSBhcyBSZXNwb25zZVZhcmlhYmxlW107XG4gICAgICBjb25zdCB2YWx1ZVRvTWFwID0gdmFsdWVzWzBdO1xuICAgICAgY29uc3QgY29ycmVjdFZhbHVlSW5mbyA9IHZhbHVlc1sxXTtcbiAgICAgIHJldHVybiBRdGlNYXRjaC5tYXRjaCh2YWx1ZVRvTWFwLCBjb3JyZWN0VmFsdWVJbmZvKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIG51bWJlciBvZiBjaGlsZHJlbiBpbiBtYXRjaCcpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBtYXRjaCh2YWx1ZVRvTWFwOiBSZXNwb25zZVZhcmlhYmxlLCBjb3JyZWN0VmFsdWVJbmZvOiBSZXNwb25zZVZhcmlhYmxlKSB7XG4gICAgaWYgKGNvcnJlY3RWYWx1ZUluZm8uY2FyZGluYWxpdHkgPT09ICdzaW5nbGUnKSB7XG4gICAgICBpZiAodmFsdWVUb01hcC52YWx1ZSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWVUb01hcC52YWx1ZSkgfHwgQXJyYXkuaXNBcnJheShjb3JyZWN0VmFsdWVJbmZvLnZhbHVlKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIGNhcmRpbmFsaXR5IGluIHF0aSBtYXRjaCcpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gU2NvcmluZ0hlbHBlci5jb21wYXJlU2luZ2xlVmFsdWVzKFxuICAgICAgICB2YWx1ZVRvTWFwLnZhbHVlPy50b1N0cmluZygpLFxuICAgICAgICBjb3JyZWN0VmFsdWVJbmZvLnZhbHVlLnRvU3RyaW5nKCksXG4gICAgICAgIGNvcnJlY3RWYWx1ZUluZm8uYmFzZVR5cGVcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZVRvTWFwLnZhbHVlKSB8fCAhQXJyYXkuaXNBcnJheShjb3JyZWN0VmFsdWVJbmZvLnZhbHVlKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIGNhcmRpbmFsaXR5IGluIHF0aSBtYXRjaCcpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICAvLyBpZiBsZW5ndGggaXMgbm90IGVxdWFsLCBkb24ndCBjaGVjaywgaXQncyBpbmNvcnJlY3QuXG4gICAgICBpZiAodmFsdWVUb01hcC52YWx1ZS5sZW5ndGggIT09IGNvcnJlY3RWYWx1ZUluZm8udmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGxldCBhbnN3ZXJJbmRleCA9IDA7XG4gICAgICBmb3IgKGNvbnN0IGNvcnJlY3RBbnN3ZXIgb2YgY29ycmVjdFZhbHVlSW5mby52YWx1ZSkge1xuICAgICAgICBpZiAoY29ycmVjdFZhbHVlSW5mby5jYXJkaW5hbGl0eSA9PT0gJ29yZGVyZWQnKSB7XG4gICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlVG9NYXAgPSB2YWx1ZVRvTWFwW2Fuc3dlckluZGV4XTtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBTY29yaW5nSGVscGVyLmNvbXBhcmVTaW5nbGVWYWx1ZXMoY29ycmVjdEFuc3dlciwgY3VycmVudFZhbHVlVG9NYXAsIGNvcnJlY3RWYWx1ZUluZm8uYmFzZVR5cGUpO1xuICAgICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHNlcXVlbmNlIGRvZXMgbm90IG1hdHRlciwgZmluZCB2YWx1ZSBzb21ld2hlcmUgaW4gdGhlIGFycmF5XG4gICAgICAgICAgLy8gYW5kIHJlbW92ZSB3aGVuIGZvdW5kLlxuICAgICAgICAgIGxldCBtYXRjaGluZ1ZhbHVlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICAgICAgICBmb3IgKGNvbnN0IG12IG9mIHZhbHVlVG9NYXAudmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IFNjb3JpbmdIZWxwZXIuY29tcGFyZVNpbmdsZVZhbHVlcyhjb3JyZWN0QW5zd2VyLCBtdiwgY29ycmVjdFZhbHVlSW5mby5iYXNlVHlwZSk7XG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgIG1hdGNoaW5nVmFsdWUgPSBtdjtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChtYXRjaGluZ1ZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAodmFsdWVUb01hcC52YWx1ZSBhcyBzdHJpbmdbXSkuc3BsaWNlKHZhbHVlVG9NYXAudmFsdWUuaW5kZXhPZihtYXRjaGluZ1ZhbHVlKSwgMSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYW5zd2VySW5kZXgrKztcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlOyAvLyBpZiBldmVyeXRoaW5nIG1hdGNoZXMgaXQncyBjb3JyZWN0O1xuICAgIH1cbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1tYXRjaCcsIFF0aU1hdGNoKTtcbiIsICJpbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBjbGFzcyBRdGlNZW1iZXIgZXh0ZW5kcyBRdGlFeHByZXNzaW9uPGJvb2xlYW4gfCBudWxsPiB7XG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKSB7XG4gICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRWYXJpYWJsZXMoKSBhcyBSZXNwb25zZVZhcmlhYmxlW107XG5cbiAgICBpZiAoISh0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMikpIHtcbiAgICAgIGNvbnNvbGUud2FybignVGhlIG1lbWJlciBvcGVyYXRvciB0YWtlcyB0d28gc3ViLWV4cHJlc3Npb25zJyk7XG4gICAgfVxuXG4gICAgY29uc3QgW3ZhbHVlMSwgdmFsdWUyXSA9IHZhbHVlcztcblxuICAgIGlmICghKHZhbHVlMS5iYXNlVHlwZSA9PT0gdmFsdWUyLmJhc2VUeXBlKSkge1xuICAgICAgY29uc29sZS53YXJuKCdXaGljaCBtdXN0IGJvdGggaGF2ZSB0aGUgc2FtZSBiYXNlLXR5cGUnKTtcbiAgICB9XG4gICAgaWYgKCEodmFsdWUyLmNhcmRpbmFsaXR5ID09PSAnbXVsdGlwbGUnIHx8IHZhbHVlMi5jYXJkaW5hbGl0eSA9PT0gJ29yZGVyZWQnKSkge1xuICAgICAgY29uc29sZS53YXJuKCdhbmQgdGhlIHNlY29uZCBtdXN0IGJlIGEgbXVsdGlwbGUgb3Igb3JkZXJlZCBjb250YWluZXInKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlMS5iYXNlVHlwZSA9PT0gJ2Zsb2F0JyB8fCB2YWx1ZTIuYmFzZVR5cGUgPT09ICdmbG9hdCcpIHtcbiAgICAgIGNvbnNvbGUud2FybignVGhlIG1lbWJlciBvcGVyYXRvciBzaG91bGQgbm90IGJlIHVzZWQgb24gc3ViLWV4cHJlc3Npb25zIHdpdGggYSBiYXNlLXR5cGUgb2YgZmxvYXQnKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlMS5iYXNlVHlwZSA9PT0gJ2R1cmF0aW9uJyB8fCB2YWx1ZTIuYmFzZVR5cGUgPT09ICdkdXJhdGlvbicpIHtcbiAgICAgIGNvbnNvbGUud2FybignSXQgbXVzdCBub3QgYmUgdXNlZCBvbiBzdWItZXhwcmVzc2lvbnMgd2l0aCBhIGJhc2UtdHlwZSBvZiBkdXJhdGlvbicpO1xuICAgIH1cblxuICAgIC8vIElmIGVpdGhlciBzdWItZXhwcmVzc2lvbiBpcyBOVUxMIHRoZW4gdGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0b3IgaXMgTlVMTFxuICAgIGlmICh2YWx1ZTEudmFsdWUgPT09IG51bGwgfHwgdmFsdWUyLnZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBUaGUgcmVzdWx0IGlzIGEgc2luZ2xlIGJvb2xlYW4gd2l0aCBhIHZhbHVlIG9mICd0cnVlJyBpZiB0aGUgdmFsdWUgZ2l2ZW4gYnkgdGhlIGZpcnN0IHN1Yi1leHByZXNzaW9uIGlzIGluIHRoZSBjb250YWluZXIgZGVmaW5lZCBieSB0aGUgc2Vjb25kIHN1Yi1leHByZXNzaW9uLlxuICAgIGNvbnN0IHByb2plY3Rpb24xID0gdmFsdWUxLnZhbHVlIGFzIHN0cmluZztcbiAgICBjb25zdCBwcm9qZWN0aW9uMiA9IHZhbHVlMi52YWx1ZSBhcyBzdHJpbmdbXTtcbiAgICByZXR1cm4gcHJvamVjdGlvbjIuaW5jbHVkZXMocHJvamVjdGlvbjEpO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLW1lbWJlcicsIFF0aU1lbWJlcik7XG4iLCAiaW1wb3J0IHsgUmVzcG9uc2VWYXJpYWJsZSwgVmFyaWFibGVEZWNsYXJhdGlvbiB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuZXhwb3J0IGNsYXNzIFF0aU11bHRpcGxlIGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxWYXJpYWJsZURlY2xhcmF0aW9uPHN0cmluZyB8IHN0cmluZ1tdPltdPiB7XG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKTogUmVzcG9uc2VWYXJpYWJsZVtdIHtcbiAgICBjb25zdCB2YXJpYWJsZXMgPSB0aGlzLmdldFZhcmlhYmxlcygpIGFzIFJlc3BvbnNlVmFyaWFibGVbXTtcbiAgICBpZiAodmFyaWFibGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBudW1iZXIgb2YgY2hpbGRyZW4gaW4gcXRpIG11bHRpcGxlJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZm9yIChjb25zdCB2YXJpYWJsZSBvZiB2YXJpYWJsZXMpIHtcbiAgICAgIGlmICh2YXJpYWJsZS5jYXJkaW5hbGl0eSAhPT0gJ211bHRpcGxlJyAmJiB2YXJpYWJsZS5jYXJkaW5hbGl0eSAhPT0gJ3NpbmdsZScpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBjYXJkaW5hbGl0eSBpbiBxdGkgbXVsdGlwbGUnKTtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvbnN0IHZhbHVlcyA9IHZhcmlhYmxlcy5tYXAodiA9PiB2LnZhbHVlKTtcbiAgICAvLyBjb25zb2xlLmxvZyh2YXJpYWJsZXMpO1xuICAgIC8vIGNvbnN0IGZsYXR0ZW5lZEFycmF5ID0gdmFsdWVzLnJlZHVjZSgoYWNjOiBzdHJpbmdbXSwgdmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKSA9PiB7XG4gICAgLy8gICByZXR1cm4gYWNjLmNvbmNhdChBcnJheS5pc0FycmF5KHZhbHVlKSA/IFsuLi52YWx1ZV0gOiB2YWx1ZSk7XG4gICAgLy8gfSwgW10pO1xuICAgIC8vIHJldHVybiBmbGF0dGVuZWRBcnJheTtcblxuICAgIHJldHVybiB2YXJpYWJsZXM7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktbXVsdGlwbGUnLCBRdGlNdWx0aXBsZSk7XG4iLCAiaW1wb3J0IHsgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuXG5leHBvcnQgY2xhc3MgUXRpTm90IGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxib29sZWFuPiB7XG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGAke3N1cGVyLnJlbmRlcigpfWA7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCkge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSB0aGlzLmZpcnN0RWxlbWVudENoaWxkIGFzIFF0aUV4cHJlc3Npb248Ym9vbGVhbj47XG4gICAgY29uc3QgcmVzdWx0ID0gZXhwcmVzc2lvbi5jYWxjdWxhdGUoKSBhcyBib29sZWFuO1xuICAgIHJldHVybiAhcmVzdWx0O1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLW5vdCcsIFF0aU5vdCk7XG4iLCAiaW1wb3J0IHsgUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1jb25kaXRpb24tZXhwcmVzc2lvbic7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuXG5leHBvcnQgY2xhc3MgUXRpT3IgZXh0ZW5kcyBRdGlDb25kaXRpb25FeHByZXNzaW9uIHtcbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpIHtcbiAgICAvLyBjaGlsZHJlbiBjYW4gYmUgYSBtaXggb2YgcXRpLWV4cHJlc3Npb24gYW5kIHF0aS1jb25kaXRpb24tZXhwcmVzc2lvblxuICAgIGNvbnN0IHZhbHVlcyA9IEFycmF5LmZyb20odGhpcy5jaGlsZHJlbikubWFwKGMgPT4ge1xuICAgICAgY29uc3QgY29uZGl0aW9uID0gYyBhcyBRdGlFeHByZXNzaW9uPGFueT47XG4gICAgICBpZiAoIWNvbmRpdGlvbi5jYWxjdWxhdGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVsZW1lbnQgZG9lc24ndCBpbXBsZW1lbnQgUXRpQ29uZGl0aW9uRXhwcmVzc2lvblwiKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBsZXQgdmFsdWUgPSBjb25kaXRpb24uY2FsY3VsYXRlKCkgYXMgQm9vbGVhbjtcbiAgICAgIC8vIGNvbnZlcnQgc3RyaW5nIHZhbHVlIHRvIGJvb2xlYW4gYW5kIHJldHVybiBudWxsIGlmIG5vdCBwb3NzaWJsZVxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSAndHJ1ZScpIHtcbiAgICAgICAgICB2YWx1ZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09ICdmYWxzZScpIHtcbiAgICAgICAgICB2YWx1ZSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgdmFsdWUgaW4gcXRpLW9yLCBleHBlY3RlZCBib29sZWFuJyk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9KTtcbiAgICByZXR1cm4gdmFsdWVzLnNvbWUoZSA9PiB7XG4gICAgICByZXR1cm4gdHlwZW9mIGUgPT09ICdib29sZWFuJyAmJiBlO1xuICAgIH0pO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLW9yJywgUXRpT3IpO1xuIiwgImltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcbmV4cG9ydCBjbGFzcyBRdGlPcmRlcmVkIGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxSZXNwb25zZVZhcmlhYmxlW10+IHtcbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpOiBSZXNwb25zZVZhcmlhYmxlW10ge1xuICAgIGNvbnN0IHZhcmlhYmxlcyA9IHRoaXMuZ2V0VmFyaWFibGVzKCkgYXMgUmVzcG9uc2VWYXJpYWJsZVtdO1xuICAgIGlmICh2YXJpYWJsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIG51bWJlciBvZiBjaGlsZHJlbiBpbiBxdGkgbXVsdGlwbGUnKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHZhcmlhYmxlIG9mIHZhcmlhYmxlcykge1xuICAgICAgaWYgKHZhcmlhYmxlLmNhcmRpbmFsaXR5ICE9PSAnb3JkZXJlZCcgJiYgdmFyaWFibGUuY2FyZGluYWxpdHkgIT09ICdzaW5nbGUnKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgY2FyZGluYWxpdHkgaW4gcXRpIG9yZGVyZWQnKTtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFyaWFibGVzO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLW9yZGVyZWQnLCBRdGlPcmRlcmVkKTtcbiIsICJpbXBvcnQgeyBjb25zdW1lIH0gZnJvbSAnQGxpdC9jb250ZXh0JztcbmltcG9ydCB7IExpdEVsZW1lbnQsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgSXRlbUNvbnRleHQsIGl0ZW1Db250ZXh0IH0gZnJvbSAnc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktYXNzZXNzbWVudC1pdGVtL3F0aS1hc3Nlc3NtZW50LWl0ZW0uY29udGV4dCc7XG5pbXBvcnQgeyBRdGlBc3Nlc3NtZW50SXRlbSB9IGZyb20gJy4uLy4uLy4uL3F0aS1hc3Nlc3NtZW50LWl0ZW0vcXRpLWFzc2Vzc21lbnQtaXRlbSc7XG5cbmV4cG9ydCBjbGFzcyBRdFByaW50ZWRWYXJpYWJsZSBleHRlbmRzIExpdEVsZW1lbnQge1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSlcbiAgaWRlbnRpZmllcjogc3RyaW5nO1xuXG4gIEBjb25zdW1lKHsgY29udGV4dDogaXRlbUNvbnRleHQsIHN1YnNjcmliZTogdHJ1ZSB9KVxuICBAc3RhdGUoKVxuICBwdWJsaWMgaXRlbUNvbnRleHQ/OiBJdGVtQ29udGV4dDtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLml0ZW1Db250ZXh0Py52YXJpYWJsZXMuZmluZCh2ID0+IHYuaWRlbnRpZmllciA9PT0gdGhpcy5pZGVudGlmaWVyKT8udmFsdWU7XG4gICAgcmV0dXJuIGh0bWxgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSwgbnVsbCwgMil9YDtcbiAgfVxuXG4gIC8vIGNvbnN0cnVjdG9yKCkge1xuICAvLyAgIHN1cGVyKCk7XG4gIC8vICAgY29uc3QgYXNzZXNzbWVudEl0ZW0gPSB0aGlzLmNsb3Nlc3QoJ3F0aS1hc3Nlc3NtZW50LWl0ZW0nKSBhcyBRdGlBc3Nlc3NtZW50SXRlbTtcbiAgLy8gICBhc3Nlc3NtZW50SXRlbS5hZGRFdmVudExpc3RlbmVyKCdxdGktcmVzcG9uc2UtcHJvY2Vzc2VkJywgKCkgPT4ge1xuICAvLyAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY2FsY3VsYXRlKCkgYXMgc3RyaW5nO1xuICAvLyAgIH0pO1xuICAvLyB9XG5cbiAgLy8gcHVibGljIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAvLyAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gIC8vICAgdGhpcy52YWx1ZSA9IHRoaXMuY2FsY3VsYXRlKCkgYXMgc3RyaW5nO1xuICAvLyB9XG5cbiAgcHVibGljIGNhbGN1bGF0ZSgpOiBSZWFkb25seTxzdHJpbmcgfCBzdHJpbmdbXT4ge1xuICAgIGNvbnN0IGFzc2Vzc21lbnRJdGVtID0gdGhpcy5jbG9zZXN0KCdxdGktYXNzZXNzbWVudC1pdGVtJykgYXMgUXRpQXNzZXNzbWVudEl0ZW07XG4gICAgY29uc3QgaWRlbnRpZmllciA9IHRoaXMuaWRlbnRpZmllcjtcbiAgICBjb25zdCByZXN1bHQgPSBhc3Nlc3NtZW50SXRlbS5nZXRWYXJpYWJsZShpZGVudGlmaWVyKS52YWx1ZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLXByaW50ZWQtdmFyaWFibGUnLCBRdFByaW50ZWRWYXJpYWJsZSk7XG4iLCAiaW1wb3J0IHsgUmVzcG9uc2VWYXJpYWJsZSB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuXG5leHBvcnQgY2xhc3MgUXRpUHJvZHVjdCBleHRlbmRzIFF0aUV4cHJlc3Npb248bnVtYmVyPiB7XG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKSB7XG4gICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRWYXJpYWJsZXMoKSBhcyBSZXNwb25zZVZhcmlhYmxlW107XG4gICAgY29uc3QgcHJvZHVjdCA9IHZhbHVlcy5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBjdXJyZW50VmFsdWUpID0+IHtcbiAgICAgIGlmIChjdXJyZW50VmFsdWUuYmFzZVR5cGUgPT0gJ2Zsb2F0JyB8fCBjdXJyZW50VmFsdWUuYmFzZVR5cGUgPT0gJ2ludGVnZXInKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yICogcGFyc2VJbnQoY3VycmVudFZhbHVlLnZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUud2FybihgY2FuIG5vdCBjb252ZXJ0IHRvIG51bWJlcmApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oYGhhcyBhbm90aGVyIGJhc2VUeXBlICR7Y3VycmVudFZhbHVlLmJhc2VUeXBlfWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICAgIH0sIDEpO1xuICAgIHJldHVybiBwcm9kdWN0O1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLXByb2R1Y3QnLCBRdGlQcm9kdWN0KTtcbiIsICJpbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgU2NvcmluZ0hlbHBlciB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9zY29yaW5nLWhlbHBlcic7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuXG5leHBvcnQgY2xhc3MgUXRpU3RyaW5nTWF0Y2ggZXh0ZW5kcyBRdGlFeHByZXNzaW9uPGJvb2xlYW4+IHtcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdjYXNlLXNlbnNpdGl2ZScgfSkgY2FzZVNlbnNpdGl2ZSA9ICd0cnVlJztcblxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCkge1xuICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMikge1xuICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRWYXJpYWJsZXMoKSBhcyBSZXNwb25zZVZhcmlhYmxlW107XG4gICAgICBjb25zdCB2YWx1ZTEgPSB2YWx1ZXNbMF07XG4gICAgICBjb25zdCB2YWx1ZTIgPSB2YWx1ZXNbMV07XG4gICAgICBpZiAoXG4gICAgICAgIHZhbHVlMS5jYXJkaW5hbGl0eSAhPT0gJ3NpbmdsZScgfHxcbiAgICAgICAgdmFsdWUyLmNhcmRpbmFsaXR5ICE9PSAnc2luZ2xlJyB8fFxuICAgICAgICBBcnJheS5pc0FycmF5KHZhbHVlMS52YWx1ZSkgfHxcbiAgICAgICAgQXJyYXkuaXNBcnJheSh2YWx1ZTIudmFsdWUpXG4gICAgICApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBjYXJkaW5hbGl0eSBpbiBxdGkgc3RyaW5nLW1hdGNoJyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHYxID0gdGhpcy5jYXNlU2Vuc2l0aXZlID09PSAndHJ1ZScgPyB2YWx1ZTEudmFsdWUgOiAodmFsdWUxLnZhbHVlIGFzIHN0cmluZykudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IHYyID0gdGhpcy5jYXNlU2Vuc2l0aXZlID09PSAndHJ1ZScgPyB2YWx1ZTIudmFsdWUgOiAodmFsdWUyLnZhbHVlIGFzIHN0cmluZykudG9Mb3dlckNhc2UoKTtcbiAgICAgIHJldHVybiBTY29yaW5nSGVscGVyLmNvbXBhcmVTaW5nbGVWYWx1ZXModjEgYXMgc3RyaW5nLCB2MiBhcyBzdHJpbmcsIHZhbHVlMS5iYXNlVHlwZSk7XG4gICAgfVxuICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgbnVtYmVyIG9mIGNoaWxkcmVuIGluIHF0aS1zdHJpbmctbWF0Y2gnKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1zdHJpbmctbWF0Y2gnLCBRdGlTdHJpbmdNYXRjaCk7XG4iLCAiaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiwgUXRpRXhwcmVzc2lvbkJhc2UgfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBjbGFzcyBRdGlTdW0gZXh0ZW5kcyBRdGlFeHByZXNzaW9uPG51bWJlcj4ge1xuICBwcml2YXRlIF9leHByZXNzaW9uOiBRdGlTdW1FeHByZXNzaW9uO1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2V4cHJlc3Npb24gPSBuZXcgUXRpU3VtRXhwcmVzc2lvbihBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4gYXMgdW5rbm93biBhcyBRdGlFeHByZXNzaW9uQmFzZTxudW1iZXI+W10pKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKSB7XG4gICAgLy8gY2hpbGRyZW4gY2FuIGJlIGEgbWl4IG9mIHF0aS1leHByZXNzaW9uIGFuZCBxdGktY29uZGl0aW9uLWV4cHJlc3Npb25cbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2V4cHJlc3Npb24uY2FsY3VsYXRlKCk7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBRdGlTdW1FeHByZXNzaW9uIGltcGxlbWVudHMgUXRpRXhwcmVzc2lvbkJhc2U8bnVtYmVyPiB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZXhwcmVzc2lvbnM6IFF0aUV4cHJlc3Npb25CYXNlPG51bWJlcj5bXSkge31cblxuICBwdWJsaWMgY2FsY3VsYXRlKCkge1xuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZXhwcmVzc2lvbnMubWFwKGMgPT4ge1xuICAgICAgaWYgKCFjLmNhbGN1bGF0ZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiRWxlbWVudCBkb2Vzbid0IGltcGxlbWVudCBRdGlDb25kaXRpb25FeHByZXNzaW9uXCIpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHZhbHVlID0gYy5jYWxjdWxhdGUoKTtcbiAgICAgIGlmIChOdW1iZXIuaXNOYU4odmFsdWUpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgdmFsdWUgaW4gcXRpLXN1bSwgZXhwZWN0ZWQgbnVtYmVyJyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gTnVtYmVyKHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdmFsdWVzLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLXN1bScsIFF0aVN1bSk7XG4iLCAiaW1wb3J0IHsgUXRpQXNzZXNzbWVudEl0ZW0gfSBmcm9tICcuLi8uLi8uLi9xdGktYXNzZXNzbWVudC1pdGVtL3F0aS1hc3Nlc3NtZW50LWl0ZW0nO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxuZXhwb3J0IGNsYXNzIFF0aVZhcmlhYmxlIGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxzdHJpbmcgfCBzdHJpbmdbXT4ge1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCkge1xuICAgIGNvbnN0IGlkZW50aWZpZXIgPSB0aGlzLmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpO1xuICAgIGNvbnN0IHJlc3VsdCA9ICh0aGlzLmNsb3Nlc3QoJ3F0aS1hc3Nlc3NtZW50LWl0ZW0nKSBhcyBRdGlBc3Nlc3NtZW50SXRlbSkuZ2V0VmFyaWFibGUoaWRlbnRpZmllcikudmFsdWU7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS12YXJpYWJsZScsIFF0aVZhcmlhYmxlKTtcbiIsICJpbXBvcnQgeyBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IEludGVyYWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJuYWwvaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24nO1xuaW1wb3J0IHsgSU1TcGNpLCBNb2R1bGVSZXNvbHV0aW9uQ29uZmlnLCBRdGlWYXJpYWJsZUpTT04gfSBmcm9tICcuL2ludGVyZmFjZSc7XG5cbmRlY2xhcmUgY29uc3QgcmVxdWlyZWpzOiBhbnk7XG5kZWNsYXJlIGNvbnN0IGRlZmluZTogYW55O1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLXBvcnRhYmxlLWN1c3RvbS1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpUG9ydGFibGVDdXN0b21JbnRlcmFjdGlvbiBleHRlbmRzIEludGVyYWN0aW9uIHtcbiAgcHJpdmF0ZSBpbnRlcnZhbElkOiBhbnk7XG4gIHByaXZhdGUgcmF3UmVzcG9uc2U6IHN0cmluZztcblxuICBwcml2YXRlIHBjaTogSU1TcGNpPHVua25vd24+O1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAncmVzcG9uc2UtaWRlbnRpZmllcicgfSlcbiAgcmVzcG9uc2VJZGVudGlmaWVyOiBzdHJpbmc7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdtb2R1bGUnIH0pXG4gIG1vZHVsZTogc3RyaW5nO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnY3VzdG9tLWludGVyYWN0aW9uLXR5cGUtaWRlbnRpZmllcicgfSlcbiAgY3VzdG9tSW50ZXJhY3Rpb25UeXBlSWRlbnRpZmllcjogc3RyaW5nO1xuXG4gIEBzdGF0ZSgpXG4gIHByaXZhdGUgX2Vycm9yTWVzc2FnZTogc3RyaW5nID0gbnVsbDtcblxuICBwcml2YXRlIGNvbnZlcnRRdGlWYXJpYWJsZUpTT04oaW5wdXQ6IFF0aVZhcmlhYmxlSlNPTik6IHN0cmluZyB8IHN0cmluZ1tdIHtcbiAgICBmb3IgKGNvbnN0IHRvcExldmVsS2V5IGluIGlucHV0KSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICBpZiAoaW5wdXQuaGFzT3duUHJvcGVydHkodG9wTGV2ZWxLZXkpKSB7XG4gICAgICAgIGNvbnN0IG5lc3RlZE9iamVjdCA9IGlucHV0W3RvcExldmVsS2V5IGFzICdsaXN0JyB8ICdiYXNlJ107XG4gICAgICAgIGlmIChuZXN0ZWRPYmplY3QpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IG5lc3RlZEtleSBpbiBuZXN0ZWRPYmplY3QpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgICAgICAgIGlmIChuZXN0ZWRPYmplY3QuaGFzT3duUHJvcGVydHkobmVzdGVkS2V5KSkge1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG5lc3RlZE9iamVjdFtuZXN0ZWRLZXkgYXMga2V5b2YgdHlwZW9mIG5lc3RlZE9iamVjdF07XG4gICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5tYXAoU3RyaW5nKTsgLy8gQ29udmVydCBlYWNoIGVsZW1lbnQgaW4gdGhlIGFycmF5IHRvIHN0cmluZ1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTsgLy8gQ29udmVydCB0aGUgc2luZ2xlIHZhbHVlIHRvIHN0cmluZ1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydENoZWNraW5nKCk6IHZvaWQge1xuICAgIC8vIGJlY2F1c2UgdGhlIHBjaSBkb2Vzbid0IGhhdmUgYSBtZXRob2QgdG8gY2hlY2sgZm9yIGNoYW5nZXMgd2UnbGwgdXNlIGFuIGludGVydmFsXG4gICAgLy8gdG8gY2hlY2sgaWYgdGhlIHJlc3BvbnNlIGhhcyBjaGFuZ2VkLiBJZiBjaGFuZ2VkIHdlJ2xsIHNhdmUgdGhlIHJlc3BvbnNlXG4gICAgdGhpcy5pbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSB0aGlzLnBjaS5nZXRSZXNwb25zZSgpO1xuICAgICAgY29uc3QgbmV3UmVzcG9uc2UgPSB0aGlzLnBjaS5nZXRSZXNwb25zZSgpO1xuICAgICAgY29uc3Qgc3RyaW5naWZpZWQgPSBKU09OLnN0cmluZ2lmeShyZXNwb25zZSk7XG4gICAgICBpZiAoc3RyaW5naWZpZWQgIT09IHRoaXMucmF3UmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy5yYXdSZXNwb25zZSA9IHN0cmluZ2lmaWVkO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuY29udmVydFF0aVZhcmlhYmxlSlNPTihuZXdSZXNwb25zZSk7XG4gICAgICAgIHRoaXMucmVzcG9uc2UgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zYXZlUmVzcG9uc2UodmFsdWUpO1xuICAgICAgfVxuICAgIH0sIDIwMCk7XG4gIH1cblxuICBwcml2YXRlIHN0b3BDaGVja2luZygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnRlcnZhbElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbElkKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTsgLy8gRk9SIE5PV1xuICB9XG4gIHNldCByZXNwb25zZSh2YWw6IFJlYWRvbmx5PHN0cmluZyB8IHN0cmluZ1tdPikge1xuICAgIC8vIE9ubHkgc2V0IHN0YXRlIGlzIHN1cHBvcnRlZCBpbiBhIFBDSVxuICB9XG5cbiAgZ2V0VEFPQ29uZmlnKG5vZGUpIHtcbiAgICBjb25zdCBhID0gbm9kZS5xdWVyeVNlbGVjdG9yQWxsKCdwcm9wZXJ0aWVzJyk7XG4gICAgbGV0IGNvbmZpZyA9IHt9O1xuXG4gICAgY29uc3QgZ2V0UHJvcGVydHlWYWx1ZSA9IGVsID0+IHtcbiAgICAgIGNvbnN0IHByb3BlcnR5ID0ge307XG4gICAgICBjb25zdCBrZXkgPSBlbC5nZXRBdHRyaWJ1dGUoJ2tleScpO1xuICAgICAgaWYgKGtleSkge1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IEFycmF5LmZyb20oZWwuY2hpbGRyZW4pO1xuICAgICAgICBjb25zdCBhbGxLZXkgPSBjaGlsZHJlbi5tYXAoKGM6IEhUTUxFbGVtZW50KSA9PiBjLmdldEF0dHJpYnV0ZSgna2V5JykpO1xuICAgICAgICBjb25zdCBpc0FycmF5ID0gYWxsS2V5Lmxlbmd0aCA+IDAgJiYgIWFsbEtleS5maW5kKGsgPT4gIU51bWJlci5pc0ludGVnZXIoK2spKTtcbiAgICAgICAgaWYgKGlzQXJyYXkpIHtcbiAgICAgICAgICBwcm9wZXJ0eVtrZXldID0gY2hpbGRyZW4ubWFwKGMgPT4gZ2V0Q2hpbGRQcm9wZXJ0aWVzKGMpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9wZXJ0eVtrZXldID0gZWwudGV4dENvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0Q2hpbGRQcm9wZXJ0aWVzID0gKGVsKToge30gfCB2b2lkID0+IHtcbiAgICAgIGlmIChlbCkge1xuICAgICAgICBsZXQgcHJvcGVydGllcyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGVsLmNoaWxkcmVuKSB7XG4gICAgICAgICAgcHJvcGVydGllcyA9IHsgLi4ucHJvcGVydGllcywgLi4uZ2V0UHJvcGVydHlWYWx1ZShjaGlsZCkgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvcGVydGllcztcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCBwcm9wZXJ0aWVzIG9mIGEpIHtcbiAgICAgIGNvbnN0IGtleSA9IHByb3BlcnRpZXMuZ2V0QXR0cmlidXRlKCdrZXknKTtcbiAgICAgIGlmICgha2V5KSB7XG4gICAgICAgIGNvbmZpZyA9IHsgLi4uY29uZmlnLCAuLi5nZXRDaGlsZFByb3BlcnRpZXMocHJvcGVydGllcykgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKCdDYW4gbm90IGZpbmQgcXRpLWN1c3RvbS1pbnRlcmFjdGlvbiBjb25maWcnKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJlZ2lzdGVyKHBjaTogSU1TcGNpPHVua25vd24+KSB7XG4gICAgdGhpcy5wY2kgPSBwY2k7XG5cbiAgICBjb25zdCB0eXBlID0gdGhpcy5wYXJlbnRFbGVtZW50LnRhZ05hbWUgPT09ICdRVEktQ1VTVE9NLUlOVEVSQUNUSU9OJyA/ICdUQU8nIDogJ0lNUyc7XG4gICAgY29uc3QgZG9tOiBIVE1MRWxlbWVudCA9XG4gICAgICB0eXBlID09ICdJTVMnID8gdGhpcy5xdWVyeVNlbGVjdG9yKCdxdGktaW50ZXJhY3Rpb24tbWFya3VwJykgOiB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ21hcmt1cCcpO1xuICAgIGRvbS5jbGFzc0xpc3QuYWRkKCdxdGktY3VzdG9tSW50ZXJhY3Rpb24nKTtcblxuICAgIGlmICh0eXBlID09ICdUQU8nICYmIHRoaXMucXVlcnlTZWxlY3RvcigncHJvcGVydGllcycpKSB7XG4gICAgICAodGhpcy5xdWVyeVNlbGVjdG9yKCdwcm9wZXJ0aWVzJykgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgfVxuXG4gICAgY29uc3QgY29uZmlnOiBhbnkgPVxuICAgICAgdHlwZSA9PSAnSU1TJ1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHRoaXMuZGF0YXNldCxcbiAgICAgICAgICAgIG9ucmVhZHk6ICgpID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ29ucmVhZHknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDogdGhpcy5nZXRUQU9Db25maWcodGhpcyk7XG5cbiAgICB0eXBlID09ICdJTVMnXG4gICAgICA/IHBjaS5nZXRJbnN0YW5jZShkb20sIGNvbmZpZywgdW5kZWZpbmVkKVxuICAgICAgOiAocGNpIGFzIGFueSkuaW5pdGlhbGl6ZSh0aGlzLmN1c3RvbUludGVyYWN0aW9uVHlwZUlkZW50aWZpZXIsIGRvbS5maXJzdEVsZW1lbnRDaGlsZCwgY29uZmlnKTtcblxuICAgIGlmICh0eXBlID09ICdUQU8nKSB7XG4gICAgICBjb25zdCBsaW5rcyA9IEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsKCdsaW5rJykpLm1hcChhY2MgPT4gYWNjLmdldEF0dHJpYnV0ZSgnaHJlZicpKTtcbiAgICAgIGxpbmtzLmZvckVhY2gobGluayA9PiB7XG4gICAgICAgIGNvbnN0IHN0eWxlcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcbiAgICAgICAgc3R5bGVzLnJlbCA9ICdzdHlsZXNoZWV0JztcbiAgICAgICAgc3R5bGVzLnR5cGUgPSAndGV4dC9jc3MnO1xuICAgICAgICBzdHlsZXMubWVkaWEgPSAnc2NyZWVuJztcbiAgICAgICAgc3R5bGVzLmhyZWYgPSBsaW5rO1xuICAgICAgICBkb20uYXBwZW5kQ2hpbGQoc3R5bGVzKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnN0YXJ0Q2hlY2tpbmcoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgY29uc3QgcmVxdWlyZUNvbmZpZzogTW9kdWxlUmVzb2x1dGlvbkNvbmZpZyA9IHtcbiAgICAgIGNvbnRleHQ6IHRoaXMuY3VzdG9tSW50ZXJhY3Rpb25UeXBlSWRlbnRpZmllcixcbiAgICAgIGNhdGNoRXJyb3I6IHRydWUsXG4gICAgICBwYXRoczoge31cbiAgICB9O1xuXG4gICAgLy8gcGs6IGMnZXN0IHRyZXMgdWdseS4uIHR5cGVzY3JpcHQgd2h5dW5vc3ByZWFkIGFkZCBwcm9wcz8hP1xuICAgIGlmICh3aW5kb3dbJ3JlcXVpcmVQYXRocyddICYmIHdpbmRvd1sncmVxdWlyZVNoaW0nXSkge1xuICAgICAgcmVxdWlyZUNvbmZpZ1sncGF0aHMnXSA9IHdpbmRvd1sncmVxdWlyZVBhdGhzJ107XG4gICAgICByZXF1aXJlQ29uZmlnWydzaGltJ10gPSB3aW5kb3dbJ3JlcXVpcmVTaGltJ107XG4gICAgfVxuICAgIGlmICghZ2xvYmFsVGhpcy5yZXF1aXJlKSB7XG4gICAgICB0aGlzLl9lcnJvck1lc3NhZ2UgPSBgcmVxdWlyZWpzIG5vdCBmb3VuZCwgbG9hZCB3aXRoIGNkbjogaHR0cHM6Ly9jZG5qcy5jb20vbGlicmFyaWVzL3JlcXVpcmUuanNgO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBJbml0aWFsIGNoZWNrIGluIGNhc2UgdGhlIGNoaWxkcmVuIGFyZSBhbHJlYWR5IHByZXNlbnRcbiAgICB0aGlzLnJlZ2lzdGVyTW9kdWxlcyhyZXF1aXJlQ29uZmlnKS50aGVuKCgpID0+IHtcbiAgICAgIGNvbnN0IHJlcXVpcmVQQ0kgPSByZXF1aXJlanMuY29uZmlnKHJlcXVpcmVDb25maWcpO1xuXG4gICAgICByZXF1aXJlUENJKFxuICAgICAgICBbJ3JlcXVpcmUnXSxcbiAgICAgICAgcmVxdWlyZSA9PiB7XG4gICAgICAgICAgIXJlcXVpcmUuZGVmaW5lZCgncXRpQ3VzdG9tSW50ZXJhY3Rpb25Db250ZXh0JykgJiZcbiAgICAgICAgICAgIGRlZmluZSgncXRpQ3VzdG9tSW50ZXJhY3Rpb25Db250ZXh0JywgKCkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHJlZ2lzdGVyOiBjdHhBID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMucmVnaXN0ZXIoY3R4QSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBub3RpZnlSZWFkeTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgLyogb25seSB1c2VkIGluIHRoZSBUQU8gdmVyc2lvbiAqL1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIC8vIFBLOiB0aGlzIGlzIGEgaGFjayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgaW50ZXJhY3Rpb24gaXMgb25seSByZWdpc3RlcmVkIG9uY2VcbiAgICAgICAgICAvLyBJZiBpdCB3YXMgcHJldmlzb3VseSBsb2FkZWQsIHRoZSByZWdpc3RlciB3aWxsIG5vZyBraWNrIGluLCBiZWNhdXNlIHRoZSBjbGFzcyBpcyBhbHJlYWR5IGRlZmluZWRcbiAgICAgICAgICAvLyBhbmQgaW4gdGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBQQ0ksIHRoZSByZWdpc3RlciBpcyBjYWxsZWQuXG4gICAgICAgICAgLy8gU28gbm93IGl0IGlzIGFscmVhZGx5IGRlZmluZWQsIHdlIGp1c3QgcmVnaXN0ZXIgaXQgb3Vyc2VsdmVzLlxuXG4gICAgICAgICAgY29uc3Qgd2FzUHJldmlvdXNseUxvYWRlZCA9IHJlcXVpcmUuZGVmaW5lZCh0aGlzLm1vZHVsZSk7XG5cbiAgICAgICAgICByZXF1aXJlKFt0aGlzLm1vZHVsZV0sIGN0eEEgPT4ge1xuICAgICAgICAgICAgLy8gcmVnaXN0ZXIgaXQgYmVjYXVzZSBpdCB3YXMgcHJldmlvdXNseSBsb2FkZWRcbiAgICAgICAgICAgIHdhc1ByZXZpb3VzbHlMb2FkZWQgJiYgdGhpcy5yZWdpc3RlcihjdHhBKTtcbiAgICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgdGhpcy5fZXJyb3JNZXNzYWdlID0gZXJyO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBlcnIgPT4ge1xuICAgICAgICAgIHRoaXMuX2Vycm9yTWVzc2FnZSA9IGVycjtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5zdG9wQ2hlY2tpbmcoKTtcbiAgfVxuXG4gIGFzeW5jIHJlZ2lzdGVyTW9kdWxlcyhjb25maWc6IE1vZHVsZVJlc29sdXRpb25Db25maWcpIHtcbiAgICAvLyBnZXQgdGhlIHZhbHVlIG9mIGF0dHJpYnV0ZTogZGF0YS1iYXNlLXVybFxuICAgIGNvbnN0IGJhc2VVcmwgPSB0aGlzLmdldEF0dHJpYnV0ZSgnZGF0YS1iYXNlLXVybCcpO1xuICAgIGlmIChiYXNlVXJsKSB7XG4gICAgICBjb25zdCBtb2R1bGVSZXNvbHV0aW9uUGF0aCA9IGAke2Jhc2VVcmx9L21vZHVsZXMvbW9kdWxlX3Jlc29sdXRpb24uanNgO1xuICAgICAgY29uc3QgbW9kdWxlUmVzb2x1dGlvbkZhbGxiYWNrUGF0aCA9IGAke2Jhc2VVcmx9L21vZHVsZXMvbW9kdWxlX3Jlc29sdXRpb25fZmFsbGJhY2suanNgO1xuICAgICAgaWYgKG1vZHVsZVJlc29sdXRpb25QYXRoKSB7XG4gICAgICAgIGNvbnN0IHByaW1hcnlDb25maWcgPSBhd2FpdCB0aGlzLmxvYWRDb25maWcobW9kdWxlUmVzb2x1dGlvblBhdGgsIGJhc2VVcmwpO1xuICAgICAgICBhd2FpdCB0aGlzLm1lcmdlQ29uZmlncyhjb25maWcsIHByaW1hcnlDb25maWcsIG1vZHVsZVJlc29sdXRpb25GYWxsYmFja1BhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBHZXQgdGhlIHF0aS1pbnRlcmFjdGlvbi1tb2R1bGVzIGVsZW1lbnRcbiAgICBjb25zdCBpbnRlcmFjdGlvbk1vZHVsZXMgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3F0aS1pbnRlcmFjdGlvbi1tb2R1bGVzJyk7XG4gICAgaWYgKGludGVyYWN0aW9uTW9kdWxlcykge1xuICAgICAgLy8gR2V0IGFsbCBxdGktaW50ZXJhY3Rpb24tbW9kdWxlIGVsZW1lbnRzXG4gICAgICBjb25zdCBtb2R1bGVzID0gaW50ZXJhY3Rpb25Nb2R1bGVzLnF1ZXJ5U2VsZWN0b3JBbGwoJ3F0aS1pbnRlcmFjdGlvbi1tb2R1bGUnKTtcbiAgICAgIC8vIExvb3AgdGhyb3VnaCBlYWNoIG1vZHVsZSBhbmQgcmVnaXN0ZXIgaXQgd2l0aCBSZXF1aXJlSlNcbiAgICAgIGZvciAoY29uc3QgbW9kdWxlIG9mIG1vZHVsZXMpIHtcbiAgICAgICAgY29uc3QgbW9kdWxlSWQgPSBtb2R1bGUuZ2V0QXR0cmlidXRlKCdpZCcpO1xuICAgICAgICBjb25zdCBwcmltYXJ5UGF0aCA9IG1vZHVsZS5nZXRBdHRyaWJ1dGUoJ3ByaW1hcnktcGF0aCcpO1xuICAgICAgICBjb25zdCBmYWxsYmFja1BhdGggPSBtb2R1bGUuZ2V0QXR0cmlidXRlKCdmYWxsYmFjay1wYXRoJyk7XG4gICAgICAgIGNvbnN0IHByaW1hcnlDb25maWc6IE1vZHVsZVJlc29sdXRpb25Db25maWcgPSBwcmltYXJ5UGF0aFxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBwYXRoczogeyAuLi5jb25maWdbJ3BhdGhzJ10sIC4uLnsgW21vZHVsZUlkXTogdGhpcy5nZXRSZXNvbHZhYmxlUGF0aChwcmltYXJ5UGF0aCwgYmFzZVVybCkgfSB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiBudWxsO1xuICAgICAgICBjb25zdCBmYWxsYmFja0NvbmZpZzogTW9kdWxlUmVzb2x1dGlvbkNvbmZpZyA9IGZhbGxiYWNrUGF0aFxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBwYXRoczogeyAuLi5jb25maWdbJ3BhdGhzJ10sIC4uLnsgW21vZHVsZUlkXTogdGhpcy5nZXRSZXNvbHZhYmxlUGF0aChmYWxsYmFja1BhdGgsIGJhc2VVcmwpIH0gfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgaWYgKG1vZHVsZUlkICYmIHByaW1hcnlDb25maWcpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLm1lcmdlQ29uZmlncyhjb25maWcsIHByaW1hcnlDb25maWcsIGZhbGxiYWNrQ29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlRG91YmxlU2xhc2hlcyhzdHI6IHN0cmluZykge1xuICAgIGNvbnN0IHNpbmdsZUZvcndhcmRTbGFzaGVzID0gc3RyXG4gICAgICAucmVwbGFjZSgvKFteOl1cXC8pXFwvKy9nLCAnJDEnKVxuICAgICAgLnJlcGxhY2UoL1xcL1xcLy9nLCAnLycpXG4gICAgICAucmVwbGFjZSgnaHR0cDovJywgJ2h0dHA6Ly8nKVxuICAgICAgLnJlcGxhY2UoJ2h0dHBzOi8nLCAnaHR0cHM6Ly8nKTtcbiAgICByZXR1cm4gc2luZ2xlRm9yd2FyZFNsYXNoZXM7XG4gIH1cblxuICBsb2FkQ29uZmlnID0gYXN5bmMgKHVybDogc3RyaW5nLCBiYXNlVXJsPzogc3RyaW5nKTogUHJvbWlzZTxNb2R1bGVSZXNvbHV0aW9uQ29uZmlnPiA9PiB7XG4gICAgdXJsID0gdGhpcy5yZW1vdmVEb3VibGVTbGFzaGVzKHVybCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcXVpcmVDb25maWcgPSBhd2FpdCBmZXRjaCh1cmwpO1xuICAgICAgaWYgKHJlcXVpcmVDb25maWcub2spIHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gYXdhaXQgcmVxdWlyZUNvbmZpZy5qc29uKCk7XG4gICAgICAgIGNvbnN0IG1vZHVsZUNvbmcgPSBjb25maWcgYXMgTW9kdWxlUmVzb2x1dGlvbkNvbmZpZztcbiAgICAgICAgZm9yIChjb25zdCBtb2R1bGVJZCBpbiBtb2R1bGVDb25nLnBhdGhzKSB7XG4gICAgICAgICAgaWYgKGJhc2VVcmwpIHtcbiAgICAgICAgICAgIG1vZHVsZUNvbmcucGF0aHNbbW9kdWxlSWRdID0gdGhpcy5nZXRSZXNvbHZhYmxlUGF0aChtb2R1bGVDb25nLnBhdGhzW21vZHVsZUlkXSwgYmFzZVVybCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtb2R1bGVDb25nO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgZ2V0UmVzb2x2YWJsZVBhdGggPSAocGF0aDogc3RyaW5nLCBiYXNlUGF0aD86IHN0cmluZykgPT4ge1xuICAgIHJldHVybiBwYXRoPy50b0xvY2FsZUxvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoJ2h0dHAnKSB8fCAhYmFzZVBhdGhcbiAgICAgID8gcGF0aFxuICAgICAgOiB0aGlzLnJlbW92ZURvdWJsZVNsYXNoZXMoYCR7YmFzZVBhdGh9LyR7cGF0aH1gKTtcbiAgfTtcblxuICBtZXJnZUNvbmZpZ3MgPSBhc3luYyAoXG4gICAgY29uZmlnOiBNb2R1bGVSZXNvbHV0aW9uQ29uZmlnLFxuICAgIHByaW1hcnlDb25maWc6IE1vZHVsZVJlc29sdXRpb25Db25maWcsXG4gICAgZmFsbGJhY2s6IHN0cmluZyB8IE1vZHVsZVJlc29sdXRpb25Db25maWdcbiAgKSA9PiB7XG4gICAgZm9yIChjb25zdCBtb2R1bGVJZCBpbiBwcmltYXJ5Q29uZmlnPy5wYXRocykge1xuICAgICAgLy8gQ2hlY2sgaWYgdGhlIGtleSBpcyBhbHJlYWR5IGluIHRoZSBjb25maWdcbiAgICAgIGlmICghY29uZmlnLnBhdGhzW21vZHVsZUlkXSkge1xuICAgICAgICAvLyBjaGVjayBpZiBmaWxlIGV4aXN0c1xuICAgICAgICBsZXQgZmFpbGVkVG9SZXNvbHZlID0gZmFsc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcGF0aFdpdGhFeHRlbnNpb24gPSBwcmltYXJ5Q29uZmlnLnBhdGhzW21vZHVsZUlkXT8udG9Mb2NhbGVMb3dlckNhc2UoKS5lbmRzV2l0aCgnLmpzJylcbiAgICAgICAgICAgID8gcHJpbWFyeUNvbmZpZy5wYXRoc1ttb2R1bGVJZF1cbiAgICAgICAgICAgIDogcHJpbWFyeUNvbmZpZy5wYXRoc1ttb2R1bGVJZF0gKyAnLmpzJztcbiAgICAgICAgICBjb25zdCBtID0gYXdhaXQgZmV0Y2gocGF0aFdpdGhFeHRlbnNpb24pO1xuICAgICAgICAgIGlmIChtLm9rKSB7XG4gICAgICAgICAgICBjb25maWcucGF0aHNbbW9kdWxlSWRdID0gcHJpbWFyeUNvbmZpZy5wYXRoc1ttb2R1bGVJZF0ucmVwbGFjZSgvXFwuanMkLywgJycpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmYWlsZWRUb1Jlc29sdmUgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgZmFpbGVkVG9SZXNvbHZlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmFpbGVkVG9SZXNvbHZlICYmIGZhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBmYWxsYmFjayA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IGZhbGxiYWNrQ29uZmlnID0gYXdhaXQgdGhpcy5sb2FkQ29uZmlnKGZhbGxiYWNrKTtcbiAgICAgICAgICAgICAgaWYgKGZhbGxiYWNrQ29uZmlnPy5wYXRoc1ttb2R1bGVJZF0pIHtcbiAgICAgICAgICAgICAgICBjb25maWcucGF0aHNbbW9kdWxlSWRdID0gZmFsbGJhY2tDb25maWcucGF0aHNbbW9kdWxlSWRdLnJlcGxhY2UoL1xcLmpzJC8sICcnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvclxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGZhbGxiYWNrID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgaWYgKGZhbGxiYWNrPy5wYXRoc1ttb2R1bGVJZF0pIHtcbiAgICAgICAgICAgICAgY29uZmlnLnBhdGhzW21vZHVsZUlkXSA9IGZhbGxiYWNrLnBhdGhzW21vZHVsZUlkXS5yZXBsYWNlKC9cXC5qcyQvLCAnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGZhaWxlZFRvUmVzb2x2ZSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIG1vZHVsZTogJyArIG1vZHVsZUlkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPHNsb3Q+PC9zbG90PiR7dGhpcy5fZXJyb3JNZXNzYWdlICYmXG4gICAgICBodG1sYDxkaXYgc3R5bGU9XCJjb2xvcjpyZWRcIj5cbiAgICAgICAgPGgxPkVycm9yPC9oMT5cbiAgICAgICAgJHt0aGlzLl9lcnJvck1lc3NhZ2V9XG4gICAgICA8L2Rpdj5gfWA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXBvcnRhYmxlLWN1c3RvbS1pbnRlcmFjdGlvbic6IFF0aVBvcnRhYmxlQ3VzdG9tSW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50LCBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuXG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IERyYWdEcm9wSW50ZXJhY3Rpb25NaXhpbiB9IGZyb20gJy4uL2ludGVybmFsL2RyYWctZHJvcCc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktYXNzb2NpYXRlLWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlBc3NvY2lhdGVJbnRlcmFjdGlvbiBleHRlbmRzIERyYWdEcm9wSW50ZXJhY3Rpb25NaXhpbihcbiAgTGl0RWxlbWVudCxcbiAgJ3F0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UnLFxuICB0cnVlLFxuICAnLmRsJ1xuKSB7XG4gIEBzdGF0ZSgpIHByaXZhdGUgX2NoaWxkcmVuTWFwOiBFbGVtZW50W107XG5cbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IGNzc2BcbiAgICA6aG9zdCB7XG4gICAgICBkaXNwbGF5OiBibG9jazsgLyogbmVjZXNzYXJ5IHRvIGNhbGN1bGF0ZSBzY2FsaW5nIHBvc2l0aW9uICovXG4gICAgfVxuICAgIHNsb3RbbmFtZT0ncXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZSddIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICBnYXA6IDAuNXJlbTtcbiAgICB9XG4gIGA7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYCA8c2xvdCBuYW1lPVwicHJvbXB0XCI+PC9zbG90PlxuICAgICAgPHNsb3QgbmFtZT1cInF0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2VcIj48L3Nsb3Q+XG4gICAgICAke3RoaXMuX2NoaWxkcmVuTWFwLmxlbmd0aCA+IDAgJiZcbiAgICAgIEFycmF5LmZyb20oQXJyYXkoTWF0aC5jZWlsKHRoaXMuX2NoaWxkcmVuTWFwLmxlbmd0aCAvIDIpKS5rZXlzKCkpLm1hcChcbiAgICAgICAgKF8sIGluZGV4KSA9PlxuICAgICAgICAgIGh0bWxgPGRpdiBwYXJ0PVwiYXNzb2NpYWJsZXMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8ZGl2IG5hbWU9XCJsZWZ0JHtpbmRleH1cIiBwYXJ0PVwiZHJvcC1saXN0XCIgY2xhc3M9XCJkbFwiIGlkZW50aWZpZXI9XCJkcm9wbGlzdCR7aW5kZXh9X2xlZnRcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgbmFtZT1cInJpZ2h0JHtpbmRleH1cIiBwYXJ0PVwiZHJvcC1saXN0XCIgY2xhc3M9XCJkbFwiIGlkZW50aWZpZXI9XCJkcm9wbGlzdCR7aW5kZXh9X3JpZ2h0XCI+PC9kaXY+XG4gICAgICAgICAgPC9kaXY+YFxuICAgICAgKX1gO1xuICB9XG5cbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLl9jaGlsZHJlbk1hcCA9IEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsKCdxdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlJykpO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1hc3NvY2lhdGUtaW50ZXJhY3Rpb24nOiBRdGlBc3NvY2lhdGVJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImV4cG9ydCBjbGFzcyBUb3VjaERyYWdBbmREcm9wIHtcbiAgcHJpdmF0ZSBfdG91Y2hCZWdpbiA9IDA7IC8vIHRpbWVzdGFtcCBvZiBmaXJzdCB0b3VjaFxuICBwcml2YXRlIF90b3VjaERvd24gPSBudWxsOyAvLyBwb2ludCBvZiBmaXJzdCB0b3VjaFxuICBwcml2YXRlIF9sYXN0Q2xpY2sgPSAwOyAvLyB0aW1lc3RhbXAgb2YgcHJldmlvdXMgY2xpY2sgKHRvdWNoc3RhcnQgKyB0b3VjaGVuZClcbiAgcHJpdmF0ZSBfY2FuRHJhZyA9IGZhbHNlOyAvLyB3aGV0aGVyIHRoZXJlIGlzIGFuIGVsZW1lbnQgd2hpY2ggY2FuIGJlIGRyYWdnZWRcbiAgcHJpdmF0ZSBfZHJhZ1NyYyA9IG51bGw7IC8vIHRoZSBlbGVtZW50IHdoaWNoIHNob3VsZCBiZSBkcmFnZ2VkXG4gIHByaXZhdGUgX2RyYWdDb3B5ID0gbnVsbDsgLy8gY29weSBvZiBkcmFnIHNvdXJjZSBmb3IgZHJhZyBmZWVkYmFja1xuICBwcml2YXRlIF90b3VjaEVuZENhbGxlZCA9IGZhbHNlOyAvLyB3aGV0aGVyIHRvdWNoRW5kIG9jY3VyZWRcbiAgcHJpdmF0ZSBfZHJhZ1J1bm5pbmcgPSBmYWxzZTsgLy8gd2hldGhlciBhIGRyYWcgcHJvY2VzcyBpcyBydW5uaW5nIGF0IHRoZSBtb21lbnRcblxuICBwcml2YXRlIF9kYXRhVHJhbnNmZXIgPSB7XG4gICAgZGF0YToge30sXG4gICAgc2V0RGF0YTogZnVuY3Rpb24gKHR5cGUsIHZhbCkge1xuICAgICAgdGhpcy5kYXRhW3R5cGVdID0gdmFsO1xuICAgIH0sXG4gICAgZ2V0RGF0YTogZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFbdHlwZV07XG4gICAgfSxcbiAgICBlZmZlY3RBbGxvd2VkOiAnbW92ZSdcbiAgfTtcbiAgcHJpdmF0ZSBfY29weU9mZnNldCA9IHsgeDogMCwgeTogMCB9OyAvLyBPZmZzZXQgZm9yIHBvc2l0aW9uaW5nIHRoZSBkcmFnIGNvcHlcblxuICBwcml2YXRlIF9sYXN0VGFyZ2V0ID0gbnVsbDsgLy8gVGhlIGxhc3QgcmVnaXN0ZXJlZCB0b3VjaCB0YXJnZXRcbiAgcHJpdmF0ZSBfY3VycmVudERyb3BDb250YWluZXIgPSBudWxsOyAvLyBUaGUgY3VycmVudCBkcm9wIGNvbnRhaW5lcjsgZmFsc2UgaWYgZWxlbWVudCBpcyBub3QgZHJvcHBhYmxlXG4gIHByaXZhdGUgX2hhbmRsZUNsaWNrID0gdHJ1ZTsgLy8gU3BlY2lmaWVzXG5cbiAgcHJpdmF0ZSBfREJMQ0xJQ0tERUxBWSA9IDUwMDsgLy8gbWF4aW11bSBkZWxheSBpbiB3aGljaCBhIHNlY29uZCBjbGljayBtdXN0IG9jY3VyXG4gIHByaXZhdGUgX0NPTlRFWFRNRU5VREVMQVkgPSAxMDAwOyAvLyBob2xkIGRlbGF5IGFmdGVyIHdoaWNoIGNvbnRleHQgbWVudSBpcyBzaG93blxuICBwcml2YXRlIF9EUkFHREVMVEEgPSA1OyAvLyBNaW5pbXVtIG9mIHBpeGVscyB3aGljaCB0aGUgZmluZ2VyIG11c3QgYmUgbW92ZWQgdG8gc3RhcnQgZHJhZ1xuICBwcml2YXRlIF9DT1BZT1BBQ0lUWSA9IDAuNzsgLy8gT3BhY2l0eSBvZiB0aGUgZHJhZyBjb3B5IGVsZW1lbnRcbiAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBUb3VjaERyYWdBbmREcm9wO1xuXG4gIGNvcHlTdHlsZXNEcmFnQ2xvbmU6IGJvb2xlYW4gPSB0cnVlO1xuICBkcmFnT25DbGljazogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8vIENoZWNrIHNpbmdsZXRvblxuICAgIGlmIChUb3VjaERyYWdBbmREcm9wLl9pbnN0YW5jZSkge1xuICAgICAgLy8gIHRocm93IG5ldyBFcnJvcihcIlRvdWNoRHJhZ0FuZERyb3AgY2FuJ3QgYmUgaW5zdGFudGlhdGVkIG1vcmUgdGhhbiBvbmNlLlwiKTtcbiAgICAgIHJldHVybiBUb3VjaERyYWdBbmREcm9wLl9pbnN0YW5jZTtcbiAgICB9XG4gICAgVG91Y2hEcmFnQW5kRHJvcC5faW5zdGFuY2UgPSB0aGlzO1xuXG4gICAgLy8gdGhpcy5faW5pdGlhbGl6ZUZpZWxkcygpO1xuXG4gICAgLy8gQWRkIGV2ZW50IGxpc3RlbmVyc1xuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5fdG91Y2hNb3ZlLmJpbmQodGhpcyksIHsgcGFzc2l2ZTogZmFsc2UsIGNhcHR1cmU6IGZhbHNlIH0pO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX3RvdWNoTW92ZS5iaW5kKHRoaXMpLCB7IHBhc3NpdmU6IGZhbHNlLCBjYXB0dXJlOiBmYWxzZSB9KTtcblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5fdG91Y2hFbmQuYmluZCh0aGlzKSwgeyBwYXNzaXZlOiBmYWxzZSwgY2FwdHVyZTogZmFsc2UgfSk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMuX3RvdWNoRW5kLmJpbmQodGhpcyksIHsgcGFzc2l2ZTogZmFsc2UsIGNhcHR1cmU6IGZhbHNlIH0pO1xuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hjYW5jZWwnLCB0aGlzLl90b3VjaENhbmNlbC5iaW5kKHRoaXMpLCB7IHBhc3NpdmU6IGZhbHNlLCBjYXB0dXJlOiBmYWxzZSB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYWRkRHJhZ2dhYmxlcyhkcmFnZ2FibGVzOiBFbGVtZW50W10pIHtcbiAgICBkcmFnZ2FibGVzLmZvckVhY2goZWwgPT4ge1xuICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMuX3RvdWNoU3RhcnQuYmluZCh0aGlzKSwgeyBwYXNzaXZlOiBmYWxzZSwgY2FwdHVyZTogZmFsc2UgfSk7XG4gICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLl90b3VjaFN0YXJ0LmJpbmQodGhpcyksIHsgcGFzc2l2ZTogZmFsc2UsIGNhcHR1cmU6IGZhbHNlIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZvciB0b3VjaHN0YXJ0IGV2ZW50IGxpc3RlbmVyLlxuICAgKiBAcGFyYW0ge1RvdWNoRXZlbnR9IGVcbiAgICovXG4gIHByaXZhdGUgX3RvdWNoU3RhcnQoZSkge1xuICAgIC8vIFNhdmUgY3VycmVudCB0aW1lc3RhbXBcbiAgICB0aGlzLl90b3VjaEJlZ2luID0gRGF0ZS5ub3coKTtcblxuICAgIGNvbnN0IHsgeCwgeSB9ID0gdGhpcy5fZ2V0UG9pbnQoZSk7XG5cbiAgICB0aGlzLl90b3VjaERvd24gPSB7IHgsIHkgfTtcblxuICAgIHRoaXMuX2RyYWdTcmMgPSBlLmN1cnJlbnRUYXJnZXQ7XG4gICAgdGhpcy5fY2FuRHJhZyA9IHRydWU7XG5cbiAgICBpZiAodGhpcy5kcmFnT25DbGljaykge1xuICAgICAgY29uc3QgX3RvdWNoZXMgPSB7IGNsaWVudFg6IHgsIGNsaWVudFk6IHkgfTtcbiAgICAgIHRoaXMuX2RyYWdSdW5uaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2NyZWF0ZURyYWdDb3B5KGUsIF90b3VjaGVzKTtcbiAgICB9XG5cbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGJhY2sgZm9yIHRvdWNobW92ZSBldmVudCBsaXN0ZW5lci5cbiAgICogQHBhcmFtIHtUb3VjaEV2ZW50fSBlXG4gICAqL1xuICBwcml2YXRlIF90b3VjaE1vdmUoZSkge1xuICAgIGlmICh0aGlzLl9jYW5EcmFnICYmIHRoaXMuX2RyYWdTcmMpIHtcbiAgICAgIC8vIENyZWF0ZSBjb3B5IG9mIGVsZW1lbnQgZm9yIHZpc3VhbCBkcmFnIGZlZWRiYWNrXG5cbiAgICAgIGNvbnN0IHsgeCwgeSB9ID0gdGhpcy5fZ2V0UG9pbnQoZSk7XG4gICAgICBjb25zdCBfdG91Y2hlcyA9IHsgY2xpZW50WDogeCwgY2xpZW50WTogeSB9O1xuXG4gICAgICBpZiAodGhpcy5fZ2V0RGVsdGEoX3RvdWNoZXMpID49IHRoaXMuX0RSQUdERUxUQSkge1xuICAgICAgICB0aGlzLl9kcmFnUnVubmluZyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NyZWF0ZURyYWdDb3B5KGUsIF90b3VjaGVzKTtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9jcmVhdGVEcmFnQ29weSA9IChlOiBhbnksIF90b3VjaGVzOiB7IGNsaWVudFg6IG51bWJlcjsgY2xpZW50WTogbnVtYmVyIH0pID0+IHtcbiAgICBpZiAodGhpcy5fZHJhZ0NvcHkgPT09IG51bGwgJiYgdGhpcy5fZHJhZ1J1bm5pbmcpIHtcbiAgICAgIHRoaXMuX2RyYWdTcmMuc3R5bGUub3BhY2l0eSA9IHRoaXMuX0NPUFlPUEFDSVRZO1xuICAgICAgdGhpcy5fZHJhZ0NvcHkgPSB0aGlzLl9kcmFnU3JjLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgIGNvbnN0IGVsZW1lbnRTdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl9kcmFnU3JjKTtcblxuICAgICAgdGhpcy5fZHJhZ0NvcHkuc3R5bGUgPSAnJztcbiAgICAgIHRoaXMuX2RyYWdDb3B5LnNldEF0dHJpYnV0ZSgnZHJhZ2Nsb25lJywgJycpO1xuXG4gICAgICBpZiAodGhpcy5jb3B5U3R5bGVzRHJhZ0Nsb25lKSB7XG4gICAgICAgIGZvciAoY29uc3Qgc3R5bGUgb2YgZWxlbWVudFN0eWxlcykge1xuICAgICAgICAgIHRoaXMuX2RyYWdDb3B5LnN0eWxlW3N0eWxlXSA9IGVsZW1lbnRTdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZShzdHlsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2FsY3VsYXRlRHJhZ0NvcHlQb3NpdGlvbihfdG91Y2hlcyk7XG5cbiAgICAgIHRoaXMuX2RyYWdDb3B5LnN0eWxlLnRvcCA9IF90b3VjaGVzLmNsaWVudFkgLSB0aGlzLl9jb3B5T2Zmc2V0LnkgKyAncHgnO1xuICAgICAgdGhpcy5fZHJhZ0NvcHkuc3R5bGUubGVmdCA9IF90b3VjaGVzLmNsaWVudFggLSB0aGlzLl9jb3B5T2Zmc2V0LnggKyAncHgnO1xuICAgICAgdGhpcy5fZHJhZ0NvcHkuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xuICAgICAgdGhpcy5fZHJhZ0NvcHkuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcbiAgICAgIHRoaXMuX2RyYWdDb3B5LnN0eWxlLnpJbmRleCA9ICc5OTk5OTknO1xuXG4gICAgICB0aGlzLl9kcmFnQ29weSA9IGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5fZHJhZ0NvcHkpO1xuICAgICAgdGhpcy5fZGlzcGF0Y2hFdmVudCh0aGlzLl9kcmFnU3JjLCAnZHJhZ3N0YXJ0Jyk7XG4gICAgfVxuXG4gICAgLy8gRHJhZyBpcyBydW5uaW5nLCBtb3ZlIGRyYWcgY29weSBhbmQgZmlyZSBldmVudHNcbiAgICBpZiAodGhpcy5fZHJhZ1J1bm5pbmcpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKF90aGlzLl90b3VjaEVuZENhbGxlZCB8fCBfdGhpcy5fZHJhZ0NvcHkgPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgX3RoaXMuX2RyYWdDb3B5LnN0eWxlLnRvcCA9IF90b3VjaGVzLmNsaWVudFkgLSBfdGhpcy5fY29weU9mZnNldC55ICsgJ3B4JztcbiAgICAgICAgX3RoaXMuX2RyYWdDb3B5LnN0eWxlLmxlZnQgPSBfdG91Y2hlcy5jbGllbnRYIC0gX3RoaXMuX2NvcHlPZmZzZXQueCArICdweCc7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5fZmluZERyb3BwYWJsZShlKTtcblxuICAgICAgLy8gRmlyZSBkcmFnbGVhdmUgYW5kIGRyYWdlbnRlciBldmVudHMgd2hlbiB0YXJnZXQgaGFzIGNoYW5nZWQgZHVyaW5nIG1vdmVcbiAgICAgIGlmICh0YXJnZXQgIT0gdGhpcy5fbGFzdFRhcmdldCkge1xuICAgICAgICB0aGlzLl9kaXNwYXRjaEV2ZW50KHRhcmdldCwgJ2RyYWdlbnRlcicpO1xuICAgICAgICB0aGlzLl9kaXNwYXRjaEV2ZW50KHRoaXMuX2xhc3RUYXJnZXQsICdkcmFnbGVhdmUnKTtcbiAgICAgICAgdGhpcy5fbGFzdFRhcmdldCA9IHRhcmdldDtcbiAgICAgIH1cblxuICAgICAgLy8gTWFrZSBjdXJyZW50IGRyb3AgY29udGFpbmVyIGNsYXNzd2lkZSBhdmFpbGFibGUgYW5kIGZpcmUgZHJhZ292ZXIgaWYgaXQncyByZWFsbHkgYSBkcm9wIGNvbnRhaW5lci5cbiAgICAgIHRoaXMuX2N1cnJlbnREcm9wQ29udGFpbmVyID0gdGFyZ2V0O1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnREcm9wQ29udGFpbmVyKSB0aGlzLl9kaXNwYXRjaEV2ZW50KHRhcmdldCwgJ2RyYWdvdmVyJyk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmb3IgdG91Y2hlbmQgZXZlbnQgbGlzdGVuZXIuXG4gICAqIEBwYXJhbSB7VG91Y2hFdmVudH0gZVxuICAgKi9cbiAgcHJpdmF0ZSBfdG91Y2hFbmQoZSkge1xuICAgIHRoaXMuX3RvdWNoRW5kQ2FsbGVkID0gdHJ1ZTtcbiAgICB0aGlzLl9jYW5EcmFnID0gZmFsc2U7XG5cbiAgICAvLyBjb25zb2xlLmxvZygxLCBlLnRhcmdldCwgdGhpcy5fY3VycmVudERyb3BDb250YWluZXIpO1xuXG4gICAgLy8gVXNlciBzZWVtcyB0byBjbGlja1xuICAgIC8vIGlmICghdGhpcy5fZHJhZ1J1bm5pbmcgJiYgdGhpcy5faGFuZGxlQ2xpY2spIHtcbiAgICAvLyAgIHRoaXMuX2Rpc3BhdGNoRXZlbnQoZS50YXJnZXQsICdjbGljaycpO1xuICAgIC8vICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIC8vICAgcmV0dXJuO1xuICAgIC8vIH1cbiAgICBpZiAodGhpcy5fY3VycmVudERyb3BDb250YWluZXIpIHtcbiAgICAgIHRoaXMuX2Rpc3BhdGNoRXZlbnQodGhpcy5fY3VycmVudERyb3BDb250YWluZXIsICdkcm9wJyk7XG4gICAgICB0aGlzLl9kaXNwYXRjaEV2ZW50KHRoaXMuX2RyYWdTcmMsICdkcmFnZW5kJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZpcmUgZHJhZ0V2ZW50IGV2ZW4gaWYgdGhlaXIgaXMgbm8gZHJvcHBhYmxlLiBBbmQgYXNzaWduIGRyb3BFZmZlY3Qgbm9uZS5cbiAgICAgIC8vIGZvciBvdXIgcHVycG9zZSwgdGhpcyB3aWxsIGJyaW5nIGJhY2sgdGhlIGRyYWcgdG8gaXRzIHN0YXJ0IHBvc2l0aW9uLCBzZWVsIGRyYWctZHJvcC1pbnRlcmFjdGlvbi1taXhpbi50c1xuICAgICAgaWYgKHRoaXMuX2RyYWdSdW5uaW5nKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdkcmFnZW5kJywgeyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlIH0pO1xuICAgICAgICBldmVudFsnZGF0YVRyYW5zZmVyJ10gPSB7IGRyb3BFZmZlY3Q6ICdub25lJyB9O1xuICAgICAgICB0aGlzLl9kcmFnU3JjPy5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9yZXNldCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZvciB0b3VjaGNhbmNlbCBldmVudCBsaXN0ZW5lciwgaW4gY2FzZSBicm93c2VyIHN1cHBvcnRzIHRoaXMuXG4gICAqIEBwYXJhbSB7VG91Y2hFdmVudH0gZVxuICAgKi9cbiAgcHJpdmF0ZSBfdG91Y2hDYW5jZWwoZSkge1xuICAgIHRoaXMuX3Jlc2V0KCk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB0aGUgbmV4dCBkcm9wcGFibGUgZWxlbWVudCBhdCBjdXJyZW50IHBvaW50LlxuICAgKiBAcGFyYW0ge09iamVjdH0gcHRcbiAgICovXG4gIHByaXZhdGUgX2ZpbmREcm9wcGFibGUoZXZlbnQpIHtcbiAgICBjb25zdCBwb2ludEZyb21Ub3VjaEV2ZW50ID0gdGhpcy5fZ2V0UG9pbnQoZXZlbnQpO1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnRGcm9tUG9pbnQocG9pbnRGcm9tVG91Y2hFdmVudC54LCBwb2ludEZyb21Ub3VjaEV2ZW50LnkpO1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBlbGVtZW50RnJvbVBvaW50KHg6IG51bWJlciwgeTogbnVtYmVyKTogRWxlbWVudCB7XG4gICAgbGV0IGVsID0gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludCh4LCB5KTtcbiAgICBpZiAoZWwpIHtcbiAgICAgIHdoaWxlIChlbC5zaGFkb3dSb290KSB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUVsID0gZWwuc2hhZG93Um9vdC5lbGVtZW50RnJvbVBvaW50KHgsIHkpO1xuICAgICAgICBpZiAoY3VzdG9tRWwgPT09IG51bGwgfHwgY3VzdG9tRWwgPT09IGVsKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZWwgPSBjdXN0b21FbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBlbDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIF9nZXRQb2ludChldmVudCwgcGFnZT8pIHtcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQudG91Y2hlcykge1xuICAgICAgZXZlbnQgPSBldmVudC50b3VjaGVzWzBdO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgeDogcGFnZSA/IGV2ZW50LnBhZ2VYIDogZXZlbnQuY2xpZW50WCxcbiAgICAgIHk6IHBhZ2UgPyBldmVudC5wYWdlWSA6IGV2ZW50LmNsaWVudFlcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIG9mZnNldCBmb3IgZGlzcGxheWluZyB0aGUgZHJhZyBjb3B5IHRvIGhhdmUgYSBzZWFtbGVzcyBkcmFnZ2luZy5cbiAgICogQHBhcmFtIHtUb3VjaH0gdG91Y2ggVGhlIGN1cnJlbnQgdG91Y2guXG4gICAqL1xuICBwcml2YXRlIF9jYWxjdWxhdGVEcmFnQ29weVBvc2l0aW9uKHRvdWNoKSB7XG4gICAgY29uc3QgY2xpZW50UmVjdCA9IHRoaXMuX2RyYWdTcmMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgdGhpcy5fY29weU9mZnNldC54ID0gdG91Y2guY2xpZW50WCAtIGNsaWVudFJlY3QubGVmdDtcbiAgICB0aGlzLl9jb3B5T2Zmc2V0LnkgPSB0b3VjaC5jbGllbnRZIC0gY2xpZW50UmVjdC50b3A7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgcGl4ZWwgZGVsdGEgYmV0d2VlbiBmaXJzdCB0b3VjaCBhbmQgdGhlIGN1cnJlbnQgdG91Y2ggcG9zaXRpb24uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSB0b3VjaFxuICAgKi9cbiAgcHJpdmF0ZSBfZ2V0RGVsdGEodG91Y2gpIHtcbiAgICBjb25zdCB4ID0gTWF0aC5hYnModG91Y2guY2xpZW50WCAtIHRoaXMuX3RvdWNoRG93bi54KTtcbiAgICBjb25zdCB5ID0gTWF0aC5hYnModG91Y2guY2xpZW50WSAtIHRoaXMuX3RvdWNoRG93bi55KTtcblxuICAgIHJldHVybiB4ICsgeTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGUgVGhlIGV2ZW50J3MgdGFyZ2V0IGVsZW1lbnQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudFR5cGUgVGhlIHR5cGUgb2YgdGhlIGV2ZW50LlxuICAgKiBAcGFyYW0ge2Jvb2x9IGJ1YmJsZSBTZXRzIHdoZXRoZXIgdGhlIGV2ZW50IHNob3VsZCBidWJibGUuXG4gICAqL1xuICBwcml2YXRlIF9kaXNwYXRjaEV2ZW50KGUsIGV2ZW50VHlwZSwgYnViYmxlID0gdHJ1ZSkge1xuICAgIGlmICghZSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgZXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoZXZlbnRUeXBlLCB7IGJ1YmJsZXM6IGJ1YmJsZSwgY2FuY2VsYWJsZTogdHJ1ZSB9KTtcbiAgICBldmVudFsnZGF0YVRyYW5zZmVyJ10gPSB0aGlzLl9kYXRhVHJhbnNmZXI7XG4gICAgZS5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgICByZXR1cm4gZXZlbnQuZGVmYXVsdFByZXZlbnRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgYWxsIHZhcmlhYmxlcyBhbmQgcHJlcGFyZXMgZm9yIG5ldyBEcmFnIGFuZCBEcm9wLlxuICAgKi9cbiAgcHJpdmF0ZSBfcmVzZXQoKSB7XG4gICAgaWYgKHRoaXMuX2RyYWdSdW5uaW5nKSB7XG4gICAgICB0aGlzLl9kcmFnU3JjLnN0eWxlLm9wYWNpdHkgPSAnMS4wJztcbiAgICAgIHRoaXMuX2RyYWdDb3B5LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5fZHJhZ0NvcHkpO1xuICAgIH1cblxuICAgIHRoaXMuX2RyYWdSdW5uaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fZHJhZ1NyYyA9IG51bGw7XG4gICAgdGhpcy5fZHJhZ0NvcHkgPSBudWxsO1xuICAgIHRoaXMuX2NhbkRyYWcgPSBmYWxzZTtcblxuICAgIHRoaXMuX3RvdWNoQmVnaW4gPSAwO1xuICAgIHRoaXMuX3RvdWNoRG93biA9IG51bGw7XG4gICAgdGhpcy5fbGFzdENsaWNrID0gMDtcbiAgICB0aGlzLl90b3VjaEVuZENhbGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuX2RhdGFUcmFuc2ZlciA9IHtcbiAgICAgIGRhdGE6IHt9LFxuICAgICAgc2V0RGF0YTogZnVuY3Rpb24gKHR5cGUsIHZhbCkge1xuICAgICAgICB0aGlzLmRhdGFbdHlwZV0gPSB2YWw7XG4gICAgICB9LFxuICAgICAgZ2V0RGF0YTogZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVt0eXBlXTtcbiAgICAgIH0sXG4gICAgICBlZmZlY3RBbGxvd2VkOiAnbW92ZSdcbiAgICB9O1xuICAgIHRoaXMuX2NvcHlPZmZzZXQgPSB7IHg6IDAsIHk6IDAgfTtcblxuICAgIHRoaXMuX2xhc3RUYXJnZXQgPSBudWxsO1xuICAgIHRoaXMuX2N1cnJlbnREcm9wQ29udGFpbmVyID0gbnVsbDtcbiAgICB0aGlzLl9oYW5kbGVDbGljayA9IHRydWU7XG4gIH1cblxuICAvLyBwcml2YXRlIF9nZXRQb3NpdGlvbkZyb21FdmVudChlOiBhbnkpOiB7XG4gIC8vICAgeDogbnVtYmVyO1xuICAvLyAgIHk6IG51bWJlcjtcbiAgLy8gfSB7XG4gIC8vICAgbGV0IF90b3VjaE1vdmU7XG4gIC8vICAgaWYgKGUudHlwZSA9PSAndG91Y2hzdGFydCcgfHwgZS50eXBlID09ICd0b3VjaG1vdmUnIHx8IGUudHlwZSA9PSAndG91Y2hlbmQnIHx8IGUudHlwZSA9PSAndG91Y2hjYW5jZWwnKSB7XG4gIC8vICAgICBjb25zdCBldnQgPSB0eXBlb2YgZS5vcmlnaW5hbEV2ZW50ID09PSAndW5kZWZpbmVkJyA/IGUgOiBlLm9yaWdpbmFsRXZlbnQ7XG4gIC8vICAgICBjb25zdCB0b3VjaCA9IGV2dC50b3VjaGVzWzBdIHx8IGV2dC5jaGFuZ2VkVG91Y2hlc1swXTtcbiAgLy8gICAgIF90b3VjaE1vdmUgPSB7XG4gIC8vICAgICAgIHg6IHRvdWNoLnBhZ2VYLFxuICAvLyAgICAgICB5OiB0b3VjaC5wYWdlWVxuICAvLyAgICAgfTtcbiAgLy8gICB9IGVsc2UgaWYgKFxuICAvLyAgICAgZS50eXBlID09ICdtb3VzZWRvd24nIHx8XG4gIC8vICAgICBlLnR5cGUgPT0gJ21vdXNldXAnIHx8XG4gIC8vICAgICBlLnR5cGUgPT0gJ21vdXNlbW92ZScgfHxcbiAgLy8gICAgIGUudHlwZSA9PSAnbW91c2VvdmVyJyB8fFxuICAvLyAgICAgZS50eXBlID09ICdtb3VzZW91dCcgfHxcbiAgLy8gICAgIGUudHlwZSA9PSAnbW91c2VlbnRlcicgfHxcbiAgLy8gICAgIGUudHlwZSA9PSAnbW91c2VsZWF2ZSdcbiAgLy8gICApIHtcbiAgLy8gICAgIF90b3VjaE1vdmUgPSB7XG4gIC8vICAgICAgIHg6IGUuY2xpZW50WCxcbiAgLy8gICAgICAgeTogZS5jbGllbnRZXG4gIC8vICAgICB9O1xuICAvLyAgIH1cbiAgLy8gICByZXR1cm4gX3RvdWNoTW92ZTtcbiAgLy8gfVxufVxuIiwgImltcG9ydCB7IExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbnR5cGUgQ29uc3RydWN0b3I8VD4gPSBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBUO1xuXG5kZWNsYXJlIGNsYXNzIERyb3BwYWJsZXNJbnRlcmZhY2Uge31cblxuLy8gaHR0cHM6Ly9uZy1ydW4uY29tL2VkaXQvOU1HcjVkWVdBMjBBaUp0cHk1YXo/b3Blbj1hcHAlMkZhcHAuY29tcG9uZW50Lmh0bWxcbmV4cG9ydCBjb25zdCBEcm9wcGFibGVzTWl4aW4gPSA8VCBleHRlbmRzIENvbnN0cnVjdG9yPExpdEVsZW1lbnQ+PihcbiAgc3VwZXJDbGFzczogVCxcbiAgZHJvcHBhYmxlc0luU2hhZG93Um9vdDogYm9vbGVhbixcbiAgZHJvcHBhYmxlc1NlbGVjdG9yOiBzdHJpbmdcbikgPT4ge1xuICBjbGFzcyBEcm9wcGFibGVzRWxlbWVudCBleHRlbmRzIHN1cGVyQ2xhc3Mge1xuICAgIHByaXZhdGUgb2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXI7XG5cbiAgICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuLCByZWZsZWN0OiB0cnVlIH0pIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICBvdmVycmlkZSBmaXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BzKTogdm9pZCB7XG4gICAgICAvLyBmb3IgcXRpLW1hdGNoLWludGVyYWN0aW9uIHRoZSBkcmFnIGludGVyYWN0aW9uIGNhbiBiZSByZXBsYWNlIHdpdGggYSBxdGktbWF0Y2gtdGFidWxhciBjbGFzc1xuICAgICAgLy8gd2hpY2ggc2hvd3MgdGhlIGRhdGEgaW4gYSBhIHRhYnVsYXIgd2F5LCBzbyBubyBkcmFnIGRyb3Agc2hvdWxkIGJlIGludm9sdmVkIHRoZW5cbiAgICAgIGlmICh0aGlzLmNsYXNzTGlzdC5jb250YWlucygncXRpLW1hdGNoLXRhYnVsYXInKSkgcmV0dXJuO1xuXG4gICAgICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BzKTtcblxuICAgICAgY29uc3QgZHJvcHBhYmxlcyA9IEFycmF5LmZyb20oXG4gICAgICAgIGRyb3BwYWJsZXNJblNoYWRvd1Jvb3RcbiAgICAgICAgICA/IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKGRyb3BwYWJsZXNTZWxlY3RvcilcbiAgICAgICAgICA6IHRoaXMucXVlcnlTZWxlY3RvckFsbChkcm9wcGFibGVzU2VsZWN0b3IpXG4gICAgICApO1xuXG4gICAgICB0aGlzLmRyYWdvdmVySGFuZGxlciA9IHRoaXMuZHJhZ292ZXJIYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLmRyYWdsZWF2ZUhhbmRsZXIgPSB0aGlzLmRyYWdsZWF2ZUhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuZHJhZ2VudGVySGFuZGxlciA9IHRoaXMuZHJhZ2VudGVySGFuZGxlci5iaW5kKHRoaXMpO1xuXG4gICAgICB0aGlzLmRyb3BIYW5kbGVyID0gdGhpcy5kcm9wSGFuZGxlci5iaW5kKHRoaXMpO1xuXG4gICAgICBkcm9wcGFibGVzLmZvckVhY2goZCA9PiB7XG4gICAgICAgIGQuc2V0QXR0cmlidXRlKCdkcm9wem9uZScsICdtb3ZlJyk7XG4gICAgICAgIGQuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgdGhpcy5kcmFnbGVhdmVIYW5kbGVyKTtcblxuICAgICAgICB0aGlzLmF0dGFjaEhhbmRsZXIoZCk7XG4gICAgICB9KTtcbiAgICAgIGZvciAoY29uc3QgZHJvcHBhYmxlIG9mIGRyb3BwYWJsZXMpIHtcbiAgICAgICAgdGhpcy5vYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKG11dGF0aW9ucyA9PiB7XG4gICAgICAgICAgbXV0YXRpb25zLmZvckVhY2gobXV0YXRpb24gPT4ge1xuICAgICAgICAgICAgaWYgKG11dGF0aW9uLnR5cGUgPT09ICdhdHRyaWJ1dGVzJykge1xuICAgICAgICAgICAgICBjb25zdCBwcm9wTmFtZSA9IG11dGF0aW9uLmF0dHJpYnV0ZU5hbWU7XG4gICAgICAgICAgICAgIHN3aXRjaCAocHJvcE5hbWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdkaXNhYmxlZCc6IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGRpc2FibGVkID0gZHJvcHBhYmxlLmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcbiAgICAgICAgICAgICAgICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdHRhY2hIYW5kbGVyKGRyb3BwYWJsZSk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUhhbmRsZXIoZHJvcHBhYmxlKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vYnNlcnZlci5vYnNlcnZlKGRyb3BwYWJsZSwge1xuICAgICAgICAgIGF0dHJpYnV0ZXM6IHRydWUgLy9jb25maWd1cmUgaXQgdG8gbGlzdGVuIHRvIGF0dHJpYnV0ZSBjaGFuZ2VzXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXR0YWNoSGFuZGxlcihkcm9wcGFibGU6IEVsZW1lbnQpIHtcbiAgICAgIGRyb3BwYWJsZS5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRoaXMuZHJhZ292ZXJIYW5kbGVyKTtcbiAgICAgIGRyb3BwYWJsZS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCB0aGlzLmRyYWdlbnRlckhhbmRsZXIpO1xuICAgICAgZHJvcHBhYmxlLmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCB0aGlzLmRyb3BIYW5kbGVyKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZUhhbmRsZXIoZHJvcHBhYmxlOiBFbGVtZW50KSB7XG4gICAgICBkcm9wcGFibGUucmVtb3ZlRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCB0aGlzLmRyYWdvdmVySGFuZGxlcik7XG4gICAgICBkcm9wcGFibGUucmVtb3ZlRXZlbnRMaXN0ZW5lcignZHJhZ2VudGVyJywgdGhpcy5kcmFnZW50ZXJIYW5kbGVyKTtcbiAgICAgIGRyb3BwYWJsZS5yZW1vdmVFdmVudExpc3RlbmVyKCdkcm9wJywgdGhpcy5kcm9wSGFuZGxlcik7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgICAvLyBmb3IgcXRpLW1hdGNoLWludGVyYWN0aW9uIHRoZSBkcmFnIGludGVyYWN0aW9uIGNhbiBiZSByZXBsYWNlIHdpdGggYSBxdGktbWF0Y2gtdGFidWxhciBjbGFzc1xuICAgICAgLy8gd2hpY2ggc2hvd3MgdGhlIGRhdGEgaW4gYSBhIHRhYnVsYXIgd2F5LCBzbyBubyBkcmFnIGRyb3Agc2hvdWxkIGJlIGludm9sdmVkIHRoZW5cbiAgICAgIGlmICh0aGlzLmNsYXNzTGlzdC5jb250YWlucygncXRpLW1hdGNoLXRhYnVsYXInKSkgcmV0dXJuO1xuXG4gICAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgICAgdGhpcy5vYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICAgIH1cblxuICAgIGRyYWdlbnRlckhhbmRsZXIoZXY6IERyYWdFdmVudCkge1xuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBkcmFnb3ZlckhhbmRsZXIoZXY6IERyYWdFdmVudCkge1xuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGNvbnN0IGRyb3BwYWJsZSA9IGV2LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAvLyBkcm9wcGFibGVzSW5TaGFkb3dSb290XG4gICAgICAvLyA/IGRyb3BwYWJsZS5zZXRBdHRyaWJ1dGUoJ3BhcnQnLCBkcm9wcGFibGUuZ2V0QXR0cmlidXRlKCdwYXJ0JykgKyAnIGFjdGl2ZScpIDpcbiAgICAgIGRyb3BwYWJsZS5zZXRBdHRyaWJ1dGUoJ2FjdGl2ZScsICcnKTtcblxuICAgICAgZXYuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnbW92ZSc7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBkcm9wSGFuZGxlcihldjogRHJhZ0V2ZW50KSB7XG4gICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY29uc3QgZHJvcHBhYmxlID0gZXYuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgIC8vIHBrOiBkcmFnZ2FibGVzIGluIGxpZ2h0IGRvbSBjYW4gYmUgZHJhZ2dlZCB0byBzaGFkb3dkb20sIHRoaXMgaXMgb25lIG9mIHRoZSBydWxlcyBvZiB3ZWJjb21wb25lbnRzLlxuICAgICAgLy8gVGhleSBtYXkgbm90IGNyZWF0ZSBuZXcgZWxlbWVudHMgaW4gbGlnaHQgZG9tLiBTb21lIHNvbWV0aW1lc3MgZHJvcCB6b25lcyBzaG91bGQgYmUgZ2VuZXJhdGVkXG4gICAgICAvLyBieSB0aGUgd2ViY29tcG9uZW50LiBUaGVuIGEgZHJhZ2dhYmxlICggd2hpY2ggaXMgYWx3YXlzIGFscmVhZHkgY3JlYXRlZCBieSBhIHdlYmNvbXBvbmVudCApXG4gICAgICAvLyBjYW4gYmUgaW4gbGlnaHQgZG9tLCBlbiBjYW4gYmUgZHJhZ2dlZCB0byBzaGFkb3cgZG9tLlxuICAgICAgLy8gdGhpbmtpbmcgb2YgYW5vdGhlciB3YXkgd2hlcmUgd2UganVzdCBjaGFuZ2Ugc2xvdHMuIE1heWJlIHRoYXRzIGJldHRlci4uXG4gICAgICBjb25zdCBkcmFnZ2FibGVJbkxpZ2h0RG9tID0gdGhpcy5xdWVyeVNlbGVjdG9yKGBbaWRlbnRpZmllcj0ke2V2LmRhdGFUcmFuc2Zlci5nZXREYXRhKCd0ZXh0Jyl9YCk7XG4gICAgICBjb25zdCBkcmFnZ2FibGUgPSBkcmFnZ2FibGVJbkxpZ2h0RG9tXG4gICAgICAgID8gZHJhZ2dhYmxlSW5MaWdodERvbVxuICAgICAgICA6IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKGBbaWRlbnRpZmllcj0ke2V2LmRhdGFUcmFuc2Zlci5nZXREYXRhKCd0ZXh0Jyl9YCk7XG5cbiAgICAgIGlmICghZHJvcHBhYmxlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYGNhbm5vdCBmaW5kIGRyb3BwYWJsZSwgdGFyZ2V0OiAke2V2LnRhcmdldCA/IEpTT04uc3RyaW5naWZ5KGV2LnRhcmdldCkgOiAnbnVsbCd9YCk7XG4gICAgICB9IGVsc2UgaWYgKGRyYWdnYWJsZS5wYXJlbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpICE9PSBkcm9wcGFibGUuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJykpIHtcbiAgICAgICAgZHJvcHBhYmxlLmFwcGVuZENoaWxkKGRyYWdnYWJsZSk7XG4gICAgICB9XG4gICAgICAvLyBkcm9wcGFibGVzSW5TaGFkb3dSb290XG4gICAgICAvLyA/IGRyb3BwYWJsZS5zZXRBdHRyaWJ1dGUoJ3BhcnQnLCBkcm9wcGFibGUuZ2V0QXR0cmlidXRlKCdwYXJ0JykucmVwbGFjZSgnYWN0aXZlJywgJycpLnRyaW0oKSkgOlxuICAgICAgZHJvcHBhYmxlLnJlbW92ZUF0dHJpYnV0ZSgnYWN0aXZlJyk7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBkcmFnbGVhdmVIYW5kbGVyKGV2OiBEcmFnRXZlbnQpIHtcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgIGNvbnN0IGRyb3BwYWJsZSA9IGV2LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBkcm9wcGFibGUucmVtb3ZlQXR0cmlidXRlKCdhY3RpdmUnKTtcbiAgICAgIGV2LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gJ25vbmUnO1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiBEcm9wcGFibGVzRWxlbWVudCBhcyBDb25zdHJ1Y3RvcjxEcm9wcGFibGVzSW50ZXJmYWNlPiAmIFQ7XG59O1xuIiwgIi8vIFRISVMgSVMgQSBNSVhJTiwgVEhJUyBJUyBBIE1JWElOXG4vLyBVU0UgTElLRSBUSElTXG4vLyBgYGBjbGFzcyBEcm9wTGlzdCBleHRlbmRzIEZsaXBwYWJsZXMoTGl0RWxlbWVudCkge2BgYFxuLy8gbWl4aW4gd2hpY2ggYW5pbWF0ZXMgY2hpbGRyZW4gd2l0aCBGTElQXG4vLyBhIGNvbWJpbmF0aW9uIGJldHdlZW4gdGhpcyBkaXJlY3RpdmU6XG4vLyBodHRwczovL25nLXJ1bi5jb20vZWRpdC85TUdyNWRZV0EyMEFpSnRweTVhej9vcGVuPWFwcCUyRmFwcC5jb21wb25lbnQuaHRtbFxuLy8gYW5kIGEgdHV0b3JpYWwgaG93IHRvIG1ha2UgYSBtaXhpblxuLy8gaHR0cHM6Ly9saXQuZGV2L2RvY3MvY29tcG9zaXRpb24vbWl4aW5zL1xuXG5pbXBvcnQgeyBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcblxudHlwZSBDb25zdHJ1Y3RvcjxUPiA9IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQ7XG5cbmV4cG9ydCBkZWNsYXJlIGNsYXNzIEZsaXBwYWJsZXNJbnRlcmZhY2Uge1xuICBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkO1xuICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkO1xufVxuXG4vLyBqdXN0IGEgY29udmVyc2lvbiBvZiBhIGFuZ3VsYXIgRkxJUCBkaXJlY3RpdmUsIG1hZGUgYXMgYSBNaXhpblxuLy8gaHR0cHM6Ly9uZy1ydW4uY29tL2VkaXQvOU1HcjVkWVdBMjBBaUp0cHk1YXo/b3Blbj1hcHAlMkZhcHAuY29tcG9uZW50Lmh0bWxcbmV4cG9ydCBjb25zdCBGbGlwcGFibGVzTWl4aW4gPSA8VCBleHRlbmRzIENvbnN0cnVjdG9yPExpdEVsZW1lbnQ+PihcbiAgc3VwZXJDbGFzczogVCxcbiAgZHJvcHBhYmxlc1NlbDogc3RyaW5nLFxuICBkcmFnZ2FibGVzU2VsOiBzdHJpbmdcbikgPT4ge1xuICBjbGFzcyBGbGlwcGFibGVzRWxlbWVudCBleHRlbmRzIHN1cGVyQ2xhc3Mge1xuICAgIC8vIHByaXZhdGUgc3RhdGUgPSBuZXcgTWFwPEVsZW1lbnQsIGFueT4oKTtcbiAgICAvLyBwcml2YXRlIG9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyO1xuICAgIC8vIGZsaXBwYWJsZXNTZWxlY3Rvcjogc3RyaW5nO1xuICAgIC8vIG92ZXJyaWRlIGFzeW5jIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcHMpIHtcbiAgICAvLyAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7IC8vIHBrOiB0aGlzIGlzIHRoZSBrZXkgdG8gY2FsY3VsYXRlIGNvcnJlY3QgcHJvcG9ydGlvbnNcbiAgICAvLyAgIGNvbnN0IGRyYWdnYWJsZXMgPSBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbChkcmFnZ2FibGVzU2VsKSk7XG4gICAgLy8gICBkcmFnZ2FibGVzLmZvckVhY2goKGVsZW0pID0+IHtcbiAgICAvLyAgICAgY29uc3QgeyBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQgfSA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgLy8gICAgIHRoaXMuc3RhdGUuc2V0KGVsZW0sIHsgbGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgIC8vICAgfSk7XG4gICAgLy8gICB0aGlzLm9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIodGhpcy5hbmltYXRlTWUpO1xuICAgIC8vICAgY29uc3QgZHJvcHBhYmxlcyA9IEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsKGRyb3BwYWJsZXNTZWwpKTtcbiAgICAvLyAgIGRyb3BwYWJsZXMuZm9yRWFjaCgoZHJhZ2dhYmxlKSA9PiB7XG4gICAgLy8gICAgIHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZShkcmFnZ2FibGUsIHsgY2hpbGRMaXN0OiB0cnVlIH0pO1xuICAgIC8vICAgfSk7XG4gICAgLy8gICB0aGlzLm9ic2VydmVyLm9ic2VydmUodGhpcywgeyBjaGlsZExpc3Q6IHRydWUgfSk7XG4gICAgLy8gICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BzKTtcbiAgICAvLyB9XG4gICAgLy8gcHJpdmF0ZSBhbmltYXRlTWUgPSAoKSA9PiB7XG4gICAgLy8gICB0aGlzLnN0YXRlLmZvckVhY2goKHZhbHVlLCBlbGVtKSA9PiB7XG4gICAgLy8gICAgIGNvbnN0IHsgbGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0IH0gPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIC8vICAgICBpZiAodGhpcy5zdGF0ZS5nZXQoZWxlbSkgPT0gbnVsbCkge1xuICAgIC8vICAgICAgIHRoaXMuc3RhdGUuc2V0KGVsZW0sIHsgbGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgIC8vICAgICB9XG4gICAgLy8gICAgIGNvbnN0IGNhY2hlID0gdGhpcy5zdGF0ZS5nZXQoZWxlbSk7XG4gICAgLy8gICAgIGNvbnN0IGRlbHRhWCA9IGNhY2hlLmxlZnQgLSBsZWZ0O1xuICAgIC8vICAgICBjb25zdCBkZWx0YVkgPSBjYWNoZS50b3AgLSB0b3A7XG4gICAgLy8gICAgIGNvbnN0IGRlbHRhVyA9IGNhY2hlLndpZHRoIC8gd2lkdGg7XG4gICAgLy8gICAgIGNvbnN0IGRlbHRhSCA9IGNhY2hlLmhlaWdodCAvIGhlaWdodDtcbiAgICAvLyAgICAgdGhpcy5zdGF0ZS5zZXQoZWxlbSwgeyBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgLy8gICAgIGNvbnN0IHsgZHVyYXRpb24sIGVhc2luZyB9ID0geyBkdXJhdGlvbjogMzUwLCBlYXNpbmc6ICdjdWJpYy1iZXppZXIoMC4yNiwgMC44NiwgMC40NCwgMC45ODUpJyB9O1xuICAgIC8vICAgICBlbGVtLmFuaW1hdGUoXG4gICAgLy8gICAgICAgW1xuICAgIC8vICAgICAgICAge1xuICAgIC8vICAgICAgICAgICB0cmFuc2Zvcm1PcmlnaW46ICd0b3AgbGVmdCcsXG4gICAgLy8gICAgICAgICAgIHRyYW5zZm9ybTogYFxuICAgIC8vIHRyYW5zbGF0ZSgke2RlbHRhWH1weCwgJHtkZWx0YVl9cHgpXG4gICAgLy8gc2NhbGUoJHtkZWx0YVd9LCAke2RlbHRhSH0pXG4gICAgLy8gYCxcbiAgICAvLyAgICAgICAgICAgLy8gd2lkdGg6IGNhY2hlLndpZHRoLFxuICAgIC8vICAgICAgICAgICAvLyBoZWlnaHQ6IGNhY2hlLmhlaWdodCsgJ3B4JyxcbiAgICAvLyAgICAgICAgICAgLy8gb3BhY2l0eTogY2FjaGUub3BhY2l0eSxcbiAgICAvLyAgICAgICAgIH0sXG4gICAgLy8gICAgICAgICB7XG4gICAgLy8gICAgICAgICAgIHRyYW5zZm9ybU9yaWdpbjogJ3RvcCBsZWZ0JyxcbiAgICAvLyAgICAgICAgICAgdHJhbnNmb3JtOiAnbm9uZScsXG4gICAgLy8gICAgICAgICB9LFxuICAgIC8vICAgICAgIF0sXG4gICAgLy8gICAgICAge1xuICAgIC8vICAgICAgICAgZHVyYXRpb24sXG4gICAgLy8gICAgICAgICBlYXNpbmcsXG4gICAgLy8gICAgICAgfVxuICAgIC8vICAgICApO1xuICAgIC8vICAgfSk7XG4gICAgLy8gfTtcbiAgICAvLyBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICAvLyAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgLy8gICB0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAvLyB9XG4gIH1cbiAgcmV0dXJuIEZsaXBwYWJsZXNFbGVtZW50IGFzIENvbnN0cnVjdG9yPEZsaXBwYWJsZXNJbnRlcmZhY2U+ICYgVDtcbn07XG4iLCAiaW1wb3J0IHsgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBEcm9wcGFibGVzTWl4aW4gfSBmcm9tICcuL2Ryb3BwYWJsZXMtbWl4aW4nO1xuaW1wb3J0IHsgRmxpcHBhYmxlc01peGluIH0gZnJvbSAnLi9mbGlwcGFibGVzLW1peGluJztcbmltcG9ydCB7IElJbnRlcmFjdGlvbiB9IGZyb20gJy4uL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uLmludGVyZmFjZSc7XG5cbmltcG9ydCB7IFRvdWNoRHJhZ0FuZERyb3AgfSBmcm9tICcuL2RyYWctZHJvcC1hcGknO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyB3YXRjaCB9IGZyb20gJy4uLy4uLy4uLy4uL2RlY29yYXRvcnMvd2F0Y2gnO1xuaW1wb3J0IHsgbGl2ZVF1ZXJ5IH0gZnJvbSAnLi4vLi4vLi4vLi4vZGVjb3JhdG9ycy9saXZlLXF1ZXJ5Jztcbi8vIGtleWJvYXJkIG5hdmlnYXRhYmxlIGRyYWcgZHJvcDogaHR0cHM6Ly9jb2RlcGVuLmlvL1NpdGVQb2ludC9wZW4vdkV6WGJqXG4vLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81NTI0MjE5Ni90eXBlc2NyaXB0LWFsbG93cy10by11c2UtcHJvcGVyLW11bHRpcGxlLWluaGVyaXRhbmNlLXdpdGgtbWl4aW5zLWJ1dC1mYWlscy10by1jXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzE3NzQ0I2lzc3VlY29tbWVudC01NTg5OTAzODFcbi8vIGh0dHBzOi8vbmctcnVuLmNvbS9lZGl0LzlNR3I1ZFlXQTIwQWlKdHB5NWF6P29wZW49YXBwJTJGYXBwLmNvbXBvbmVudC5odG1sXG5cbnR5cGUgQ29uc3RydWN0b3I8VD4gPSBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBUO1xuXG5pbnRlcmZhY2UgSW50ZXJhY3Rpb25Db25maWd1cmF0aW9uIHtcbiAgY29weVN0eWxlc0RyYWdDbG9uZTogYm9vbGVhbjtcbiAgZHJhZ0NhbkJlUGxhY2VkQmFjazogYm9vbGVhbjtcbiAgZHJhZ09uQ2xpY2s6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4gPSA8VCBleHRlbmRzIENvbnN0cnVjdG9yPExpdEVsZW1lbnQ+PihcbiAgc3VwZXJDbGFzczogVCxcbiAgZHJhZ2dhYmxlc1NlbGVjdG9yOiBzdHJpbmcsXG4gIGRyb3BwYWJsZXNJblNoYWRvd1Jvb3Q6IGJvb2xlYW4sXG4gIGRyb3BwYWJsZXNTZWxlY3Rvcjogc3RyaW5nXG4pID0+IHtcbiAgY2xhc3MgRHJhZ0Ryb3BJbnRlcmFjdGlvbkVsZW1lbnQgZXh0ZW5kcyBGbGlwcGFibGVzTWl4aW4oXG4gICAgRHJvcHBhYmxlc01peGluKHN1cGVyQ2xhc3MsIGRyb3BwYWJsZXNJblNoYWRvd1Jvb3QsIGRyb3BwYWJsZXNTZWxlY3RvciksXG4gICAgZHJvcHBhYmxlc1NlbGVjdG9yLFxuICAgIGRyYWdnYWJsZXNTZWxlY3RvclxuICApIHtcbiAgICBwcm90ZWN0ZWQgZHJhZ2dhYmxlcyA9IG5ldyBNYXA8RWxlbWVudCwgeyBwYXJlbnQ6IEVsZW1lbnQ7IGluZGV4OiBudW1iZXIgfT4oKTtcbiAgICBwcm90ZWN0ZWQgZHJvcHBhYmxlczogRWxlbWVudFtdO1xuICAgIGRyYWdEcm9wQXBpOiBUb3VjaERyYWdBbmREcm9wO1xuXG4gICAgQGxpdmVRdWVyeShkcmFnZ2FibGVzU2VsZWN0b3IpXG4gICAgcmVJbml0RHJhZ0FuZERyb3AoZHJhZ3NBZGRlZDogRWxlbWVudFtdLCBkcmFnc1JlbW92ZWQ6IEVsZW1lbnRbXSkge1xuICAgICAgaWYgKHRoaXMuY2xhc3NMaXN0LmNvbnRhaW5zKCdxdGktbWF0Y2gtdGFidWxhcicpKSByZXR1cm47XG5cbiAgICAgIC8vIGNoZWNrIGlmIGFkZGVkIGVsZW1lbnRzIGFyZSBub3QgYWxyZWFkeSBpbiBsaXN0XG4gICAgICBjb25zdCBkcmFnZ2FibGVzID0gZHJhZ3NBZGRlZC5maWx0ZXIoZCA9PiAhdGhpcy5kcmFnZ2FibGVzIHx8ICF0aGlzLmRyYWdnYWJsZXMuZ2V0KGQpKTtcblxuICAgICAgaWYgKGRyYWdnYWJsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmRyYWdEcm9wQXBpLmFkZERyYWdnYWJsZXMoZHJhZ3NBZGRlZCk7XG5cbiAgICAgICAgZHJhZ3NBZGRlZC5mb3JFYWNoKGVsZW0gPT4ge1xuICAgICAgICAgIC8vIHN0b3JlIGluaXRpYWwgcG9zaXRpb25zIG9mIGVsZW1lbnRzLCBhbmQgb2Zjb3Vyc2UsIGp1c3QgdGhlIGVsZW1lbnRzIGZvciBsb29waW5nIGFuZCBzdWNoXG4gICAgICAgICAgdGhpcy5kcmFnZ2FibGVzLnNldChlbGVtLCB7XG4gICAgICAgICAgICBwYXJlbnQ6IGVsZW0ucGFyZW50RWxlbWVudCxcbiAgICAgICAgICAgIGluZGV4OiBBcnJheS5mcm9tKGVsZW0ucGFyZW50Tm9kZS5jaGlsZHJlbikuaW5kZXhPZihlbGVtKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGVsZW0uc2V0QXR0cmlidXRlKCdxdGktZHJhZ2dhYmxlJywgJ3RydWUnKTtcbiAgICAgICAgICBlbGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIChldjogYW55KSA9PiB7XG4gICAgICAgICAgICBldi5kYXRhVHJhbnNmZXIuc2V0RGF0YSgndGV4dCcsIGV2LmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKGBpZGVudGlmaWVyYCkpO1xuICAgICAgICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoJ2RyYWdnaW5nJywgJycpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgZWxlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW5kJywgKGV2OiBEcmFnRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBlbGVtLnJlbW92ZUF0dHJpYnV0ZSgnb3ZlcicpO1xuICAgICAgICAgICAgZWxlbS5yZW1vdmVBdHRyaWJ1dGUoJ2RyYWdnaW5nJyk7XG5cbiAgICAgICAgICAgIC8vIHBrOiBpZiBub3QgZHJvcHBlZCBvbiBhIGRyb3AgbG9jYXRpb24gcHV0IGl0IGJhY2sgd2hlcmUgaXQgYmVsb25nc1xuICAgICAgICAgICAgaWYgKGV2LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID09PSAnbm9uZScgfHwgZXYuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmRyYWdDYW5CZVBsYWNlZEJhY2spIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkcmFnZ2FibGUgPSBldi5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5kcmFnZ2FibGVzLmdldChkcmFnZ2FibGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID1cbiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uLmluZGV4IDwgcG9zaXRpb24ucGFyZW50LmNoaWxkcmVuLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICA/IHBvc2l0aW9uLmluZGV4XG4gICAgICAgICAgICAgICAgICAgIDogcG9zaXRpb24ucGFyZW50LmNoaWxkcmVuLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgY29uc3QgaW50ZXJhY3Rpb24gPSBwb3NpdGlvbi5wYXJlbnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgZ2FwVGV4dCA9IHBvc2l0aW9uLnBhcmVudC5jaGlsZHJlbltpbmRleF07XG4gICAgICAgICAgICAgICAgaW50ZXJhY3Rpb24uaW5zZXJ0QmVmb3JlKGRyYWdnYWJsZSwgZ2FwVGV4dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zYXZlUmVzcG9uc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrTWF4TWF0Y2hBc3NvY2lhdGlvbnMoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV2LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID09PSAnbW92ZScpIHtcbiAgICAgICAgICAgICAgdGhpcy5zYXZlUmVzcG9uc2UoKTtcbiAgICAgICAgICAgICAgdGhpcy5jaGVja01heE1hdGNoQXNzb2NpYXRpb25zKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAncmVzcG9uc2UtaWRlbnRpZmllcicgfSkgcmVzcG9uc2VJZGVudGlmaWVyOiBzdHJpbmcgPSAnJztcblxuICAgIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogZmFsc2UsIHR5cGU6IE9iamVjdCB9KSBjb25maWd1cmF0aW9uOiBJbnRlcmFjdGlvbkNvbmZpZ3VyYXRpb24gPSB7XG4gICAgICBjb3B5U3R5bGVzRHJhZ0Nsb25lOiB0cnVlLFxuICAgICAgZHJhZ0NhbkJlUGxhY2VkQmFjazogdHJ1ZSxcbiAgICAgIGRyYWdPbkNsaWNrOiBmYWxzZVxuICAgIH07XG4gICAgQHdhdGNoKCdjb25maWd1cmF0aW9uJylcbiAgICBoYW5kbGVEcmFnT3B0aW9uc0NoYW5nZWQob2xkLCBkcmFnT3B0aW9ucykge1xuICAgICAgdGhpcy5kcmFnRHJvcEFwaS5jb3B5U3R5bGVzRHJhZ0Nsb25lID0gZHJhZ09wdGlvbnMuY29weVN0eWxlc0RyYWdDbG9uZTtcbiAgICAgIHRoaXMuZHJhZ0Ryb3BBcGkuZHJhZ09uQ2xpY2sgPSBkcmFnT3B0aW9ucy5kcmFnT25DbGljaztcbiAgICB9XG5cbiAgICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuLCByZWZsZWN0OiB0cnVlIH0pIGRpc2FibGVkID0gZmFsc2U7XG4gICAgQHdhdGNoKCdkaXNhYmxlZCcsIHsgd2FpdFVudGlsRmlyc3RVcGRhdGU6IHRydWUgfSlcbiAgICBoYW5kbGVEaXNhYmxlZENoYW5nZShvbGQsIGRpc2FibGVkOiBib29sZWFuKSB7XG4gICAgICB0aGlzLmRyYWdnYWJsZXMuZm9yRWFjaCgocywgY2gpID0+IHtcbiAgICAgICAgZGlzYWJsZWQgPyBjaC5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgJycpIDogY2gucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xuICAgICAgICBkaXNhYmxlZCA/IGNoLnJlbW92ZUF0dHJpYnV0ZSgncXRpLWRyYWdnYWJsZScpIDogY2guc2V0QXR0cmlidXRlKCdxdGktZHJhZ2dhYmxlJywgJ3RydWUnKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIEBwcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4sIHJlZmxlY3Q6IHRydWUgfSkgcmVhZG9ubHkgPSBmYWxzZTtcbiAgICBAd2F0Y2goJ3JlYWRvbmx5JywgeyB3YWl0VW50aWxGaXJzdFVwZGF0ZTogdHJ1ZSB9KVxuICAgIGhhbmRsZVJlYWRvbmx5Q2hhbmdlKG9sZCwgcmVhZG9ubHk6IGJvb2xlYW4pIHtcbiAgICAgIHRoaXMuZHJhZ2dhYmxlcy5mb3JFYWNoKChzLCBjaCkgPT4ge1xuICAgICAgICByZWFkb25seSA/IGNoLnNldEF0dHJpYnV0ZSgncmVhZG9ubHknLCAnJykgOiBjaC5yZW1vdmVBdHRyaWJ1dGUoJ3JlYWRvbmx5Jyk7XG4gICAgICAgIHJlYWRvbmx5ID8gY2gucmVtb3ZlQXR0cmlidXRlKCdxdGktZHJhZ2dhYmxlJykgOiBjaC5zZXRBdHRyaWJ1dGUoJ3F0aS1kcmFnZ2FibGUnLCAndHJ1ZScpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgQHByb3BlcnR5KHsgdHlwZTogTnVtYmVyLCByZWZsZWN0OiB0cnVlLCBhdHRyaWJ1dGU6ICdtaW4tYXNzb2NpYXRpb25zJyB9KSBtaW5Bc3NvY2lhdGlvbnMgPSAxO1xuICAgIEBwcm9wZXJ0eSh7IHR5cGU6IE51bWJlciwgcmVmbGVjdDogdHJ1ZSwgYXR0cmlidXRlOiAnbWF4LWFzc29jaWF0aW9ucycgfSkgbWF4QXNzb2NpYXRpb25zID0gMTtcblxuICAgIG92ZXJyaWRlIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcHMpOiB2b2lkIHtcbiAgICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcHMpO1xuICAgICAgdGhpcy5kcm9wcGFibGVzID0gQXJyYXkuZnJvbShcbiAgICAgICAgZHJvcHBhYmxlc0luU2hhZG93Um9vdFxuICAgICAgICAgID8gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoZHJvcHBhYmxlc1NlbGVjdG9yKVxuICAgICAgICAgIDogdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGRyb3BwYWJsZXNTZWxlY3RvcilcbiAgICAgICk7XG4gICAgICAvLyBQSzogTWF5YmUgbGF0ZXIsIGZvciBub3cgd2UgYXNzdW1lIGRyb3BwYWJsZXMgYXJlIG5vdCBkeW5hbWljbHkgYWRkZWQgb3IgcmVtb3ZlZFxuICAgICAgLy8gLmZpbHRlcigoZWxlbSkgPT4gIXRoaXMuZHJvcHBhYmxlcyB8fCAhdGhpcy5kcm9wcGFibGVzLmluY2x1ZGVzKGVsZW0pKTtcbiAgICAgIC8vIHRoaXMuZHJvcHBhYmxlcyA9IHRoaXMuZHJvcHBhYmxlcyA/IHRoaXMuZHJvcHBhYmxlcy5jb25jYXQobmV3RHJvcHBhYmxlcykgOiBuZXdEcm9wcGFibGVzO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuICAgICAgdGhpcy5kcmFnRHJvcEFwaSA9IG5ldyBUb3VjaERyYWdBbmREcm9wKCk7XG5cbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgbmV3IEN1c3RvbUV2ZW50PERyYWdEcm9wSW50ZXJhY3Rpb25FbGVtZW50PigncXRpLXJlZ2lzdGVyLWludGVyYWN0aW9uJywge1xuICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgY29tcG9zZWQ6IHRydWUsXG4gICAgICAgICAgZGV0YWlsOiB0aGlzXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIHJlc2V0KHNhdmUgPSB0cnVlKTogdm9pZCB7XG4gICAgICB0aGlzLmRyYWdnYWJsZXMuZm9yRWFjaCgocG9zaXRpb24sIGRyYWdnYWJsZSkgPT4ge1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHBvc2l0aW9uLnBhcmVudC5jaGlsZHJlbjtcbiAgICAgICAgY29uc3QgaW5kZXggPSBwb3NpdGlvbi5pbmRleCA8IGNoaWxkcmVuLmxlbmd0aCA/IHBvc2l0aW9uLmluZGV4IDogY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgICBwb3NpdGlvbi5wYXJlbnQuaW5zZXJ0QmVmb3JlKGRyYWdnYWJsZSwgY2hpbGRyZW5baW5kZXhdKTtcbiAgICAgIH0pO1xuICAgICAgc2F2ZSAmJiB0aGlzLnNhdmVSZXNwb25zZSgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjaGVja01heE1hdGNoQXNzb2NpYXRpb25zKCkge1xuICAgICAgdGhpcy5kcm9wcGFibGVzLmZvckVhY2goZCA9PiB7XG4gICAgICAgIGNvbnN0IG1heE1hdGNoID0gKyhkLmdldEF0dHJpYnV0ZSgnbWF0Y2gtbWF4JykgfHwgMSk7XG4gICAgICAgIC8vIGNvbnN0IG1heE1pbiA9ICsoZC5nZXRBdHRyaWJ1dGUoJ21hdGNoLW1pbicpIHx8IDApO1xuICAgICAgICBjb25zdCBkaXNhYmxlID0gbWF4TWF0Y2ggPD0gKGQuY2hpbGRyZW4ubGVuZ3RoIHx8IDApO1xuICAgICAgICBkaXNhYmxlID8gZC5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgJycpIDogZC5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XG4gICAgICAgIGRpc2FibGUgPyBkLnJlbW92ZUF0dHJpYnV0ZSgnZHJvcHpvbmUnKSA6IGQuc2V0QXR0cmlidXRlKCdkcm9wem9uZScsICdtb3ZlJyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXQgcmVzcG9uc2UocmVzcG9uc2U6IHN0cmluZ1tdKSB7XG4gICAgICAvLyBmb3IgcXRpLW1hdGNoLWludGVyYWN0aW9uIHRoZSBkcmFnIGludGVyYWN0aW9uIGNhbiBiZSByZXBsYWNlIHdpdGggYSBxdGktbWF0Y2gtdGFidWxhciBjbGFzc1xuICAgICAgLy8gd2hpY2ggc2hvd3MgdGhlIGRhdGEgaW4gYSBhIHRhYnVsYXIgd2F5LCBzbyBubyBkcmFnIGRyb3Agc2hvdWxkIGJlIGludm9sdmVkIHRoZW5cbiAgICAgIGlmICh0aGlzLmNsYXNzTGlzdC5jb250YWlucygncXRpLW1hdGNoLXRhYnVsYXInKSkgcmV0dXJuO1xuXG4gICAgICB0aGlzLnJlc2V0KGZhbHNlKTtcbiAgICAgIGlmIChyZXNwb25zZSAhPT0gbnVsbCAmJiBBcnJheS5pc0FycmF5KHJlc3BvbnNlKSlcbiAgICAgICAgcmVzcG9uc2UuZm9yRWFjaChyZXNwb25zZSA9PiB7XG4gICAgICAgICAgY29uc3QgW2Ryb3BJZCwgLi4uZHJhZ0lkc10gPSByZXNwb25zZS5zcGxpdCgnICcpLnJldmVyc2UoKTtcbiAgICAgICAgICBpZiAoZHJvcElkKSB7XG4gICAgICAgICAgICBjb25zdCBkcm9wcGFibGUgPSB0aGlzLmRyb3BwYWJsZXMuZmluZChkcm9wID0+IGRyb3AuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJykgPT09IGRyb3BJZCk7XG4gICAgICAgICAgICBkcmFnSWRzLmZvckVhY2goZHJhZ0lkID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZHJhZ2dhYmxlID0gdGhpcy5xdWVyeVNlbGVjdG9yKGBbaWRlbnRpZmllcj0ke2RyYWdJZH1dYCk7XG4gICAgICAgICAgICAgIGlmICghZHJvcHBhYmxlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgY2Fubm90IGZpbmQgZHJvcHBhYmxlIHdpdGggaWRlbnRpZmllcjogJHtkcm9wSWR9YCk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWRyYWdnYWJsZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYGNhbm5vdCBmaW5kIGRyYWdnYWJsZSB3aXRoIGlkZW50aWZpZXI6ICR7ZHJhZ0lkfWApO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRyb3BwYWJsZS5hcHBlbmRDaGlsZChkcmFnZ2FibGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tNYXhNYXRjaEFzc29jaWF0aW9ucygpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhbGlkYXRlKCkge1xuICAgICAgY29uc3QgZHJvcHBhYmxlcyA9IGRyb3BwYWJsZXNJblNoYWRvd1Jvb3RcbiAgICAgICAgPyBBcnJheS5mcm9tKHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKGRyb3BwYWJsZXNTZWxlY3RvcikpXG4gICAgICAgIDogQXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoZHJvcHBhYmxlc1NlbGVjdG9yKSk7XG4gICAgICBjb25zdCBhc3NvY2lhdGlvbnMgPSBkcm9wcGFibGVzLmZpbHRlcihkID0+IGQuY2hpbGRFbGVtZW50Q291bnQgPiAwKS5sZW5ndGg7XG4gICAgICByZXR1cm4gdGhpcy5taW5Bc3NvY2lhdGlvbnMgPD0gMCB8fCB0aGlzLm1pbkFzc29jaWF0aW9ucyA8PSBhc3NvY2lhdGlvbnM7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNhdmVSZXNwb25zZSgpIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gdGhpcy5kcm9wcGFibGVzLm1hcChkcm9wcGFibGUgPT4ge1xuICAgICAgICBsZXQgcmVzcG9uc2VTdHJpbmcgPSAnJztcbiAgICAgICAgaWYgKGRyb3BwYWJsZS5jaGlsZHJlbj8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJlc3BvbnNlU3RyaW5nICs9XG4gICAgICAgICAgICBBcnJheS5mcm9tKGRyb3BwYWJsZS5jaGlsZHJlbilcbiAgICAgICAgICAgICAgLm1hcChkID0+IGQuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJykpXG4gICAgICAgICAgICAgIC5qb2luKCcgJykgKyBgIGA7XG4gICAgICAgIH1cbiAgICAgICAgcmVzcG9uc2VTdHJpbmcgKz0gZHJvcHBhYmxlLmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VTdHJpbmc7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3F0aS1pbnRlcmFjdGlvbi1yZXNwb25zZScsIHtcbiAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgcmVzcG9uc2VJZGVudGlmaWVyOiB0aGlzLnJlc3BvbnNlSWRlbnRpZmllcixcbiAgICAgICAgICAgIHJlc3BvbnNlXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIERyYWdEcm9wSW50ZXJhY3Rpb25FbGVtZW50IGFzIENvbnN0cnVjdG9yPElJbnRlcmFjdGlvbj4gJiBUO1xufTtcbiIsICJpbXBvcnQgeyBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IEludGVyYWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJuYWwvaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24nO1xuaW1wb3J0IHsgcmVtb3ZlRG91YmxlU2xhc2hlcyB9IGZyb20gJy4uLy4uL2ludGVybmFsL3V0aWxzJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1jdXN0b20taW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aUN1c3RvbUludGVyYWN0aW9uIGV4dGVuZHMgSW50ZXJhY3Rpb24ge1xuICAvLyBUaGlzIGN1c3RvbS1pbnRlcmFjdGlvbiBzdXBwb3J0IHRoZSBDRVMgQVBJIHdoaWNoIGlzIHVzZSBpbiBGQUNFVFxuICAvL1xuICAvLyBJdCB3b3JrcyBsaWtlIHRoaXM6XG4gIC8vIDEuIFRoZSBDSSBtYW5pZmVzdCBpcyBmZXRjaGVkXG4gIC8vIDIuIEFuIGlmcmFtZSBpcyBjcmVhdGVkIGFuZCB0aGUgZmlyc3Qgc3R5bGUgYW5kIGZpcnN0IHNjcmlwdCBmcm9tIHRoZSBtYW5pZmVzdCBhcmUgbG9hZGVkXG4gIC8vIDMuIFRoZSBmaXJzdCBzY3JpcHQgaXMgYm9vdHN0cmFwLmpzIHdoaWNoIGFsc28gY3JlYXRlcyBhbiBpZnJhbWUgYW5kIGxvYWRzIHRoZSBmaXJzdCBtZWRpYSBmcm9tIHRoZSBtYW5pZmVzdFxuICAvLyA0LiBDb21tdW5pY2F0aW9uIGlzIGRvbmUgdmlhIHRoZSBDRVMgQVBJIGJ1dCBiZWNhdXNlIHRoZSBpZnJhbWUgaXMgbm90IGFsbG93ZWQgdG8gYWNjZXNzIHRoZSBnbG9iYWwgQ0VTIG9iamVjdCB3ZSBuZWVkIHRvIHVzZSB3aW5kb3cucG9zdE1lc3NhZ2VcblxuICAvLyBUbyBhY2hpZXZlIHRoaXMgd2UgY2hhbmdlIHRoZSBwYWNrYWdlIGJ5IHJlcGxhY2luZyB0aGUgYm9vdHN0cmFwLmpzIHdpdGggb3VyIG93biBhbmQgaW5qZWN0IGEgcHJveHkgQ0VTIEFQSSB0aGF0IGNvbW11bmljYXRlcyB2aWEgcG9zdE1lc3NhZ2VcbiAgLy8gQmVjYXVzZSB3ZSBhbHNvIHdhbnQgdG8gcnVuIHRoaXMgaW4gc3Rvcnlib29rLCB3ZSBjYW5ub3QgdXNlIHdpbmRvdy50b3AgYmVjYXVzZSB0byBzZW5kIG1lc3NhZ2VzIHRoZXJlLCBiZWNhdXNlIGluIGNhc2Ugb2Ygc3Rvcnlib29rIHRoYXQgaXMgbm90IHRoZSB0b3Agd2luZG93LlxuICAvLyBTbyB3ZSBzZW5kIG1lc3NhZ2VzIHRvIGFsbCBwYXJlbnQgd2luZG93c1xuICBwcml2YXRlIHJhd1Jlc3BvbnNlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmhhbmRsZVBvc3RNZXNzYWdlID0gdGhpcy5oYW5kbGVQb3N0TWVzc2FnZS5iaW5kKHRoaXMpO1xuICB9XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdyZXNwb25zZS1pZGVudGlmaWVyJyB9KVxuICByZXNwb25zZUlkZW50aWZpZXI6IHN0cmluZztcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2RhdGEnIH0pXG4gIGRhdGE6IHN0cmluZztcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2RhdGEtYmFzZS1pdGVtJyB9KVxuICBiYXNlSXRlbVVybDogc3RyaW5nO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnZGF0YS1iYXNlLXJlZicgfSlcbiAgYmFzZVJlZlVybDogc3RyaW5nO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnaWQnIH0pXG4gIGlkOiBzdHJpbmc7XG5cbiAgQHN0YXRlKClcbiAgcHJpdmF0ZSBfZXJyb3JNZXNzYWdlOiBzdHJpbmcgPSBudWxsO1xuICBtYW5pZmVzdDoge1xuICAgIHNjcmlwdDogc3RyaW5nW107XG4gICAgc3R5bGU6IHN0cmluZ1tdO1xuICAgIG1lZGlhOiBzdHJpbmdbXTtcbiAgfTtcblxuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG4gICAgY29uc3QgdXJpVG9NYW5pZmVzdCA9IHRoaXMuZGF0YS5zdGFydHNXaXRoKCdodHRwJylcbiAgICAgID8gdGhpcy5kYXRhXG4gICAgICA6IHJlbW92ZURvdWJsZVNsYXNoZXModGhpcy5iYXNlSXRlbVVybCArICcvJyArIHRoaXMuZGF0YSk7XG4gICAgLy8gZmV0Y2ggdGhlIGpzb24gZmlsZSBsb2NhdGVkIGF0IHRoZSBkYXRhIGF0dHJpYnV0ZVxuICAgIGZldGNoKHVyaVRvTWFuaWZlc3QpXG4gICAgICAudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS5qc29uKCkpXG4gICAgICAudGhlbihkYXRhID0+IHtcbiAgICAgICAgdGhpcy5tYW5pZmVzdCA9IGRhdGE7XG4gICAgICAgIHRoaXMuc2V0dXBDRVMoKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgdGhpcy5fZXJyb3JNZXNzYWdlID0gZXJyO1xuICAgICAgfSk7XG4gIH1cblxuICAvLyBNSDogQ2hhbmdlZCB0aGUgZGVmYXVsdCBib290c3RyYXAuanMgdG8gdXNlIHRoZSBuZXcgQ0VTIEFQSVxuICAvLyBCZWNhdXNlIHRoZSBvbGQgb25lIHVzZXMgdGhlIGdsb2JhbCBDRVMgb2JqZWN0IHRoYXQgaXMgbm90IGFsbG93ZWQgdG8gYmUgYWNjZXNzZWQgd2hlbiB0aGUgQ0lcbiAgLy8gaXMgZW1iZWRkZWQgaW4gYW4gaWZyYW1lIGFuZCBjb21pbmcgZnJvbSBhbm90aGVyIGRvbWFpblxuICAvLyBUaGVyZWZvciB3ZSBuZWVkIHRvIHVzZSB0aGUgbmV3IENFUyBBUEkgdG8gY29tbXVuaWNhdGVzIHZpYSB0aGUgYnJvYWRjYXN0IEFQSVxuICBzZXR1cENFUygpIHtcbiAgICBjb25zdCBpZnJhbWUgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignI3BjaUNvbnRhaW5lcicpIGFzIEhUTUxJRnJhbWVFbGVtZW50LFxuICAgICAgaWZyYW1lV2luID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cgfHwgaWZyYW1lLFxuICAgICAgaWZyYW1lRG9jID0gaWZyYW1lLmNvbnRlbnREb2N1bWVudDtcblxuICAgIC8vIGNvbnN0IGNoYW5uZWwgPSBuZXcgQnJvYWRjYXN0Q2hhbm5lbCgnY2VzX2NoYW5uZWwnKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMuaGFuZGxlUG9zdE1lc3NhZ2UpO1xuICAgIGlmcmFtZURvYy5vcGVuKCk7XG4gICAgaWZyYW1lRG9jLndyaXRlKGBcbiAgICAgIDxodG1sPlxuICAgICAgICA8aGVhZD5cbiAgICAgICAgICA8bGluayBocmVmPScke3JlbW92ZURvdWJsZVNsYXNoZXMoYCR7dGhpcy5iYXNlUmVmVXJsfS8ke3RoaXMubWFuaWZlc3Quc3R5bGVbMF19YCl9JyByZWw9XCJzdHlsZXNoZWV0XCIgLz5cbiAgICAgICAgICA8c2NyaXB0IHNyYz0nJHtyZW1vdmVEb3VibGVTbGFzaGVzKGAke3RoaXMuYmFzZVJlZlVybH0vJHt0aGlzLm1hbmlmZXN0LnNjcmlwdFswXX1gKX0nPjwvc2NyaXB0PlxuICAgICAgICA8L2hlYWQ+XG4gICAgICAgIDxib2R5PjwvYm9keT5cbiAgICAgIDwvaHRtbD5cbiAgICAgIGApO1xuXG4gICAgaWZyYW1lRG9jLmNsb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldElGcmFtZXMoKSB7XG4gICAgY29uc3QgaWZyYW1lc0luU2hhZG93Um9vdCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdpZnJhbWUnKTtcbiAgICBjb25zdCBpZnJhbWUgPSB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lmcmFtZScpO1xuXG4gICAgY29uc3Qgb3V0ZXJJRnJhbWVzID0gWy4uLmlmcmFtZXNJblNoYWRvd1Jvb3QsIC4uLmlmcmFtZV07XG4gICAgZm9yIChjb25zdCBpZnJhbWUgb2Ygb3V0ZXJJRnJhbWVzKSB7XG4gICAgICBjb25zdCBpZnJhbWVTcmMgPSBpZnJhbWUuc3JjO1xuICAgICAgY29uc3QgaXNTYW1lT3JpZ2luID0gbmV3IFVSTChpZnJhbWVTcmMsIHdpbmRvdy5sb2NhdGlvbi5ocmVmKS5vcmlnaW4gPT09IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XG4gICAgICBpZiAoaXNTYW1lT3JpZ2luKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgb3V0ZXJEb2MgPSBpZnJhbWUuY29udGVudERvY3VtZW50IHx8IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICAgICAgICAgIGlmIChvdXRlckRvYykge1xuICAgICAgICAgICAgdGhpcy5nZXRJbm5lcklGcmFtZXMob3V0ZXJEb2MsIG91dGVySUZyYW1lcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgYWNjZXNzaW5nIG5lc3RlZCBpZnJhbWU6JywgZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLy8gZ2V0IG9ubHkgdW5pcXVlIGlmcmFtZXNcbiAgICBvdXRlcklGcmFtZXMuZm9yRWFjaCgoaWZyYW1lLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKG91dGVySUZyYW1lcy5pbmRleE9mKGlmcmFtZSkgIT09IGluZGV4KSB7XG4gICAgICAgIG91dGVySUZyYW1lcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBvdXRlcklGcmFtZXM7XG4gIH1cblxuICBwcml2YXRlIGdldElubmVySUZyYW1lcyhpZnJhbWVEb2N1bWVudDogRG9jdW1lbnQsIGlmcmFtZXMgPSBbXSkge1xuICAgIC8vIEdldCBhbGwgaWZyYW1lcyBpbiB0aGUgY3VycmVudCBkb2N1bWVudFxuICAgIGNvbnN0IGN1cnJlbnRJZnJhbWVzID0gaWZyYW1lRG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaWZyYW1lJyk7XG5cbiAgICBjdXJyZW50SWZyYW1lcy5mb3JFYWNoKGlmcmFtZSA9PiB7XG4gICAgICAvLyBBZGQgdGhlIGN1cnJlbnQgaWZyYW1lIHRvIHRoZSBsaXN0XG4gICAgICBpZnJhbWVzLnB1c2goaWZyYW1lKTtcblxuICAgICAgLy8gUmVjdXJzaXZlbHkgZ2V0IGlmcmFtZXMgd2l0aGluIHRoZSBjdXJyZW50IGlmcmFtZVxuICAgICAgLy8gQ2hlY2sgaWYgdGhlIGlmcmFtZSBzcmMgaXMgZnJvbSB0aGUgc2FtZSBvcmlnaW5cbiAgICAgIGNvbnN0IGlmcmFtZVNyYyA9IGlmcmFtZS5zcmM7XG4gICAgICBjb25zdCBpc1NhbWVPcmlnaW4gPSBuZXcgVVJMKGlmcmFtZVNyYywgd2luZG93LmxvY2F0aW9uLmhyZWYpLm9yaWdpbiA9PT0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcblxuICAgICAgaWYgKGlzU2FtZU9yaWdpbikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IG5lc3RlZERvYyA9IGlmcmFtZS5jb250ZW50RG9jdW1lbnQgfHwgaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gICAgICAgICAgdGhpcy5nZXRJbm5lcklGcmFtZXMobmVzdGVkRG9jLCBpZnJhbWVzKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGFjY2Vzc2luZyBuZXN0ZWQgaWZyYW1lOicsIGUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1NraXBwZWQgY3Jvc3Mtb3JpZ2luIGlmcmFtZTonLCBpZnJhbWVTcmMpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGlmcmFtZXM7XG4gIH1cblxuICBwcml2YXRlIHBvc3RUb1dpbmRvd0FuZElmcmFtZXModHlwZTogc3RyaW5nLCBkYXRhOiBhbnkpIHtcbiAgICB3aW5kb3cucG9zdE1lc3NhZ2UoeyB0eXBlLCBkYXRhIH0sICcqJyk7XG4gICAgY29uc3QgaWZyYW1lcyA9IHRoaXMuZ2V0SUZyYW1lcygpO1xuICAgIGZvciAoY29uc3QgaWZyYW1lIG9mIGlmcmFtZXMpIHtcbiAgICAgIGlmIChpZnJhbWUuY29udGVudFdpbmRvdykge1xuICAgICAgICBpZnJhbWUuY29udGVudFdpbmRvdy5wb3N0TWVzc2FnZSh7IHR5cGUsIGRhdGEgfSwgJyonKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYW5kbGVQb3N0TWVzc2FnZShldmVudDogTWVzc2FnZUV2ZW50KSB7XG4gICAgY29uc3QgeyB0eXBlLCBkYXRhIH0gPSBldmVudC5kYXRhO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnc2V0UmVzcG9uc2UnOlxuICAgICAgICB0aGlzLnJhd1Jlc3BvbnNlID0gZGF0YTtcbiAgICAgICAgdGhpcy5zYXZlUmVzcG9uc2UoZGF0YSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZ2V0UmVzcG9uc2UnOiB7XG4gICAgICAgIHRoaXMucG9zdFRvV2luZG93QW5kSWZyYW1lcygncmVzcG9uc2VEYXRhJywgdGhpcy5yYXdSZXNwb25zZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnZ2V0TWVkaWEnOiB7XG4gICAgICAgIGNvbnN0IG1lZGlhRGF0YSA9IHRoaXMubWFuaWZlc3QubWVkaWEubWFwKG1lZGlhID0+IHtcbiAgICAgICAgICBjb25zdCB1cmwgPSBtZWRpYS5zdGFydHNXaXRoKCdodHRwJykgPyBtZWRpYSA6IHJlbW92ZURvdWJsZVNsYXNoZXModGhpcy5iYXNlUmVmVXJsICsgJy8nICsgbWVkaWEpO1xuICAgICAgICAgIHJldHVybiB1cmw7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnBvc3RUb1dpbmRvd0FuZElmcmFtZXMoJ21lZGlhRGF0YScsIG1lZGlhRGF0YSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnc2V0U3RhZ2VIZWlnaHQnOlxuICAgICAgICBjb25zb2xlLmxvZygnc2V0U3RhZ2VIZWlnaHQgbm90IGltcGxlbWVudGVkJyk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJhd1Jlc3BvbnNlICE9PSAnJztcbiAgfVxuXG4gIHNldCByZXNwb25zZSh2YWw6IFJlYWRvbmx5PHN0cmluZyB8IHN0cmluZ1tdPikge1xuICAgIHRoaXMucmF3UmVzcG9uc2UgPSB2YWwgYXMgc3RyaW5nO1xuICB9XG5cbiAgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLmhhbmRsZVBvc3RNZXNzYWdlKTtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICB9XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxpZnJhbWVcbiAgICAgICAgd2lkdGg9JHt0aGlzLmdldEF0dHJpYnV0ZSgnd2lkdGgnKX1cbiAgICAgICAgaGVpZ2h0PSR7dGhpcy5nZXRBdHRyaWJ1dGUoJ2hlaWdodCcpfVxuICAgICAgICBmcmFtZWJvcmRlcj1cIjBcIlxuICAgICAgICB0aXRsZT1cInBjaUNvbnRhaW5lclwiXG4gICAgICAgIGlkPVwicGNpQ29udGFpbmVyXCJcbiAgICAgID5cbiAgICAgIDwvaWZyYW1lPlxuICAgICAgJHt0aGlzLl9lcnJvck1lc3NhZ2UgJiZcbiAgICAgIGh0bWxgPGRpdiBzdHlsZT1cImNvbG9yOnJlZFwiPlxuICAgICAgICA8aDE+RXJyb3I8L2gxPlxuICAgICAgICAke3RoaXMuX2Vycm9yTWVzc2FnZX1cbiAgICAgIDwvZGl2PmB9YDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktY3VzdG9tLWludGVyYWN0aW9uJzogUXRpQ3VzdG9tSW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgSW50ZXJhY3Rpb24gfSBmcm9tICcuLi9pbnRlcm5hbC9pbnRlcmFjdGlvbi9pbnRlcmFjdGlvbic7XG5AY3VzdG9tRWxlbWVudCgncXRpLWVuZC1hdHRlbXB0LWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlFbmRBdHRlbXB0SW50ZXJhY3Rpb24gZXh0ZW5kcyBJbnRlcmFjdGlvbiB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnY291bnQtYXR0ZW1wdCcgfSlcbiAgcHVibGljIGNvdW50QXR0ZW1wdDogc3RyaW5nID0gJ3RydWUnO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KVxuICBwdWJsaWMgdGl0bGU6ICdlbmQgYXR0ZW1wdCc7XG5cbiAgdmFsaWRhdGUoKTogYm9vbGVhbiB7XG4gICAgLy8gdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHNldCByZXNwb25zZSh2YWw6IHVuZGVmaW5lZCkge1xuICAgIC8vIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8YnV0dG9uID9kaXNhYmxlZD0ke3RoaXMuZGlzYWJsZWR9IHBhcnQ9XCJidXR0b25cIiBAY2xpY2s9JHt0aGlzLmVuZEF0dGVtcHR9PiR7dGhpcy50aXRsZX08L2J1dHRvbj5gO1xuICB9XG4gIHB1YmxpYyBlbmRBdHRlbXB0KGU6IEV2ZW50KSB7XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdlbmQtYXR0ZW1wdCcsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWUsXG4gICAgICAgIGRldGFpbDogeyByZXNwb25zZUlkZW50aWZpZXI6IHRoaXMucmVzcG9uc2VJZGVudGlmaWVyLCBjb3VudEF0dGVtcHQ6IHRoaXMuY291bnRBdHRlbXB0ID09PSAndHJ1ZScgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1lbmQtYXR0ZW1wdC1pbnRlcmFjdGlvbic6IFF0aUVuZEF0dGVtcHRJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IGNzcywgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgRHJhZ0Ryb3BJbnRlcmFjdGlvbk1peGluIH0gZnJvbSAnLi4vaW50ZXJuYWwvZHJhZy1kcm9wL2RyYWctZHJvcC1pbnRlcmFjdGlvbi1taXhpbic7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktZ2FwLW1hdGNoLWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlHYXBNYXRjaEludGVyYWN0aW9uIGV4dGVuZHMgRHJhZ0Ryb3BJbnRlcmFjdGlvbk1peGluKExpdEVsZW1lbnQsICdxdGktZ2FwLXRleHQnLCBmYWxzZSwgJ3F0aS1nYXAnKSB7XG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBbXG4gICAgY3NzYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICAgICAgZ2FwOiAwLjVyZW07XG4gICAgICB9XG5cbiAgICAgIDpob3N0KC5xdGktY2hvaWNlcy10b3ApIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIH1cbiAgICAgIDpob3N0KC5xdGktY2hvaWNlcy1ib3R0b20pIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xuICAgICAgfVxuICAgICAgOmhvc3QoLnF0aS1jaG9pY2VzLWxlZnQpIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgIH1cbiAgICAgIDpob3N0KC5xdGktY2hvaWNlcy1yaWdodCkge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XG4gICAgICB9XG4gICAgICBbcGFydD0nZHJhZ3MnXSxcbiAgICAgIFtwYXJ0PSdkcm9wcyddIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIGdhcDogMC41cmVtO1xuICAgICAgfVxuICAgIGBcbiAgXTtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgIDxzbG90IHBhcnQ9XCJkcmFnc1wiIG5hbWU9XCJxdGktZ2FwLXRleHRcIj48L3Nsb3Q+XG4gICAgICA8c2xvdCBwYXJ0PVwiZHJvcHNcIj48L3Nsb3Q+YDtcbiAgfVxuXG4gIHNldCBjb3JyZWN0UmVzcG9uc2UodmFsdWU6IFJlYWRvbmx5PHN0cmluZyB8IHN0cmluZ1tdPikge1xuICAgIGxldCBtYXRjaGVzOiB7IHRleHQ6IHN0cmluZzsgZ2FwOiBzdHJpbmcgfVtdID0gW107ICAgICAgICAgICAgXG4gICAgY29uc3QgcmVzcG9uc2UgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTtcblxuICAgIGlmIChyZXNwb25zZSkgeyAgICAgIFxuICAgICAgbWF0Y2hlcyA9IHJlc3BvbnNlLm1hcCh4ID0+IHtcbiAgICAgICAgY29uc3Qgc3BsaXQgPSB4LnNwbGl0KCcgJyk7XG4gICAgICAgICByZXR1cm4geyB0ZXh0OiBzcGxpdFswXSwgZ2FwOiBzcGxpdFsxXSAgfTt9XG4gICAgICApO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBnYXBzID0gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKCdxdGktZ2FwJyk7XG4gICAgICBnYXBzLmZvckVhY2goKGdhcCwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgaWRlbnRpZmllciA9IGdhcC5nZXRBdHRyaWJ1dGUoJ2lkZW50aWZpZXInKTtcbiAgICAgICAgY29uc3QgdGV4dElkZW50aWZpZXIgPSBtYXRjaGVzLmZpbmQoeCA9PiB4LmdhcCA9PT0gaWRlbnRpZmllcik/LnRleHQ7XG4gICAgICAgIGNvbnN0IHRleHQgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoYHF0aS1nYXAtdGV4dFtpZGVudGlmaWVyPVwiJHt0ZXh0SWRlbnRpZmllcn1cIl1gKT8udGV4dENvbnRlbnQudHJpbSgpO1xuICAgICAgICBpZiAodGV4dElkZW50aWZpZXIgJiYgdGV4dCkge1xuICAgICAgICAgIGlmICghZ2FwLm5leHRFbGVtZW50U2libGluZz8uY2xhc3NMaXN0LmNvbnRhaW5zKCdjb3JyZWN0LW9wdGlvbicpKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0U3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsgICAgICAgICBcbiAgICAgICAgICAgIHRleHRTcGFuLmNsYXNzTGlzdC5hZGQoJ2NvcnJlY3Qtb3B0aW9uJyk7XG4gICAgICAgICAgICB0ZXh0U3Bhbi50ZXh0Q29udGVudCA9IHRleHQ7XG4gICAgICAgICAgICBnYXAuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KCdhZnRlcmVuZCcsIHRleHRTcGFuKTsgIFxuICAgICAgICAgIH0gIFxuICAgICAgICB9ICBcbiAgICAgICAgZWxzZSBpZiAoZ2FwLm5leHRFbGVtZW50U2libGluZz8uY2xhc3NMaXN0LmNvbnRhaW5zKCdjb3JyZWN0LW9wdGlvbicpKSB7XG4gICAgICAgICAgZ2FwLm5leHRFbGVtZW50U2libGluZy5yZW1vdmUoKTtcbiAgICAgICAgfSAgICAgICAgICAgIFxuICAgICAgfSlcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktZ2FwLW1hdGNoLWludGVyYWN0aW9uJzogUXRpR2FwTWF0Y2hJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgIi8qIGVzbGludC1kaXNhYmxlIGxpdC9uby1pbnZhbGlkLWh0bWwgKi9cbmltcG9ydCB7IGNzcywgaHRtbCwgc3ZnIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHF1ZXJ5LCBxdWVyeUFzc2lnbmVkRWxlbWVudHMsIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgaWZEZWZpbmVkIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvaWYtZGVmaW5lZC5qcyc7XG5pbXBvcnQgeyByZXBlYXQgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9yZXBlYXQuanMnO1xuaW1wb3J0IHsgcG9zaXRpb25Ib3RzcG90cyB9IGZyb20gJy4uL2ludGVybmFsL2hvdHNwb3RzL2hvdHNwb3QnO1xuaW1wb3J0IHsgSW50ZXJhY3Rpb24gfSBmcm9tICcuLi9pbnRlcm5hbC9pbnRlcmFjdGlvbi9pbnRlcmFjdGlvbic7XG5pbXBvcnQgeyBRdGlIb3RzcG90Q2hvaWNlIH0gZnJvbSAnLi4vcXRpLWhvdHNwb3QtY2hvaWNlJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1ncmFwaGljLWFzc29jaWF0ZS1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpR3JhcGhpY0Fzc29jaWF0ZUludGVyYWN0aW9uIGV4dGVuZHMgSW50ZXJhY3Rpb24ge1xuICBjaG9pY2VPcmRlcmluZzogYm9vbGVhbjtcbiAgaG90c3BvdHM7XG4gIHN0YXJ0UG9pbnQgPSBudWxsO1xuICBlbmRQb2ludCA9IG51bGw7XG4gIEBzdGF0ZSgpIF9saW5lcyA9IFtdO1xuICBAc3RhdGUoKSBzdGFydENvb3JkOiB7IHg6IGFueTsgeTogYW55IH07XG4gIEBzdGF0ZSgpIG1vdXNlQ29vcmQ6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfTtcbiAgQHF1ZXJ5KCdzdmcnKSBzdmdDb250YWluZXI7XG4gIEBxdWVyeUFzc2lnbmVkRWxlbWVudHMoeyBzZWxlY3RvcjogJ2ltZycgfSkgZ3JJbWFnZTtcblxuICAvLyB0YXJnZXQgdGhlIG1haW4gc2xvdCBtYWtlIGl0IHJlbGF0aXZlIGFuZCBmaXQgd2l0aCB0aGUgY29udGVuXG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBbXG4gICAgY3NzYFxuICAgICAgc2xvdDpub3QoW25hbWU9J3Byb21wdCddKSB7XG4gICAgICAgIC8vIHBvc2l0aW9uOiByZWxhdGl2ZTsgLyogcXRpLWhvdHNwb3QtY2hvaWNlIHJlbGF0aXZlIHRvIHRoZSBzbG90ICovXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB3aWR0aDogZml0LWNvbnRlbnQ7IC8qIGhvdHNwb3RzIG5vdCBzdHJldGNoaW5nIGZ1cnRoZXIgaWYgaW1hZ2UgaXMgYXQgbWF4IHNpemUgKi9cbiAgICAgIH1cbiAgICAgIDo6c2xvdHRlZChpbWcpIHtcbiAgICAgICAgLyogaW1hZ2Ugbm90IHNlbGVjdGFibGUgYW55bW9yZSAqL1xuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgICB9XG4gICAgICA6OnNsb3R0ZWQocXRpLWFzc29jaWFibGUtaG90c3BvdCkge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICAgIH1cbiAgICAgIGxpbmUtY29udGFpbmVyIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIH1cbiAgICAgIHN2ZyB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwcHg7XG4gICAgICAgIGxlZnQ6IDBweDtcbiAgICAgIH1cbiAgICBgXG4gIF07XG4gIHN2ZzogU1ZHU1ZHRWxlbWVudDtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigncXRpLXJlZ2lzdGVyLWhvdHNwb3QnLCB0aGlzLnBvc2l0aW9uSG90c3BvdE9uUmVnaXN0ZXIpO1xuICB9XG5cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5fbGluZXMgPSBbXTtcbiAgfVxuICB2YWxpZGF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbGluZXMubGVuZ3RoID4gMDtcbiAgfVxuICBzZXQgcmVzcG9uc2UodmFsOiBzdHJpbmcgfCBzdHJpbmdbXSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgIHRoaXMuX2xpbmVzID0gdmFsO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdCBuYW1lPVwicHJvbXB0XCI+PC9zbG90PlxuICAgICAgPGxpbmUtY29udGFpbmVyPlxuICAgICAgICA8c3ZnXG4gICAgICAgICAgd2lkdGg9JHtpZkRlZmluZWQodGhpcy5nckltYWdlWzBdPy53aWR0aCl9XG4gICAgICAgICAgaGVpZ2h0PSR7aWZEZWZpbmVkKHRoaXMuZ3JJbWFnZVswXT8uaGVpZ2h0KX1cbiAgICAgICAgICB2aWV3Ym94PVwiMCAwICR7dGhpcy5nckltYWdlWzBdPy53aWR0aH0gJHt0aGlzLmdySW1hZ2VbMF0/LmhlaWdodH1cIlxuICAgICAgICA+XG4gICAgICAgICAgJHtyZXBlYXQoXG4gICAgICAgICAgICB0aGlzLl9saW5lcyxcbiAgICAgICAgICAgIGxpbmUgPT4gbGluZSxcbiAgICAgICAgICAgIChsaW5lLCBpbmRleCkgPT4gc3ZnYFxuICAgICAgICAgICAgICA8bGluZVxuICAgICAgICAgICAgICAgIHBhcnQ9XCJsaW5lXCJcbiAgICAgICAgICAgICAgICB4MT0ke3BhcnNlSW50KHRoaXMucXVlcnlTZWxlY3RvcjxTVkdMaW5lRWxlbWVudD4oJ1tpZGVudGlmaWVyPScgKyBsaW5lLnNwbGl0KCcgJylbMF0gKyAnXScpLnN0eWxlLmxlZnQpfVxuICAgICAgICAgICAgICAgIHkxPSR7cGFyc2VJbnQodGhpcy5xdWVyeVNlbGVjdG9yPFNWR0xpbmVFbGVtZW50PignW2lkZW50aWZpZXI9JyArIGxpbmUuc3BsaXQoJyAnKVswXSArICddJykuc3R5bGUudG9wKX1cbiAgICAgICAgICAgICAgICB4Mj0ke3BhcnNlSW50KHRoaXMucXVlcnlTZWxlY3RvcjxTVkdMaW5lRWxlbWVudD4oJ1tpZGVudGlmaWVyPScgKyBsaW5lLnNwbGl0KCcgJylbMV0gKyAnXScpLnN0eWxlLmxlZnQpfVxuICAgICAgICAgICAgICAgIHkyPSR7cGFyc2VJbnQodGhpcy5xdWVyeVNlbGVjdG9yPFNWR0xpbmVFbGVtZW50PignW2lkZW50aWZpZXI9JyArIGxpbmUuc3BsaXQoJyAnKVsxXSArICddJykuc3R5bGUudG9wKX1cbiAgICAgICAgICAgICAgICBzdHJva2U9XCJyZWRcIlxuICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjNcIlxuICAgICAgICAgICAgICAgIEBjbGljaz0keyhlOiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xpbmVzID0gdGhpcy5fbGluZXMuZmlsdGVyKChfLCBpKSA9PiBpICE9PSBpbmRleCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLnNhdmVSZXNwb25zZSh0aGlzLl9saW5lcyk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIGBcbiAgICAgICAgICApfVxuICAgICAgICAgICR7dGhpcy5zdGFydFBvaW50ICYmXG4gICAgICAgICAgc3ZnYDxsaW5lXG4gICAgICAgICAgICBwYXJ0PVwicG9pbnRcIlxuICAgICAgICAgICAgeDE9JHt0aGlzLnN0YXJ0Q29vcmQueH1cbiAgICAgICAgICAgIHkxPSR7dGhpcy5zdGFydENvb3JkLnl9XG4gICAgICAgICAgICB4Mj0ke3RoaXMubW91c2VDb29yZC54fVxuICAgICAgICAgICAgeTI9JHt0aGlzLm1vdXNlQ29vcmQueX1cbiAgICAgICAgICAgIHN0cm9rZT1cInJlZFwiXG4gICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIzXCJcbiAgICAgICAgICAvPmB9XG4gICAgICAgIDwvc3ZnPlxuICAgICAgICA8c2xvdD48L3Nsb3Q+XG4gICAgICA8L2xpbmUtY29udGFpbmVyPmA7XG4gIH1cblxuICBwcml2YXRlIHBvc2l0aW9uSG90c3BvdE9uUmVnaXN0ZXIoZTogQ3VzdG9tRXZlbnQ8UXRpSG90c3BvdENob2ljZT4pOiB2b2lkIHtcbiAgICBjb25zdCBpbWcgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpIGFzIEhUTUxJbWFnZUVsZW1lbnQ7XG4gICAgY29uc3QgaG90c3BvdCA9IGUudGFyZ2V0IGFzIFF0aUhvdHNwb3RDaG9pY2U7XG4gICAgY29uc3QgY29vcmRzID0gaG90c3BvdC5nZXRBdHRyaWJ1dGUoJ2Nvb3JkcycpO1xuICAgIGNvbnN0IHNoYXBlID0gaG90c3BvdC5nZXRBdHRyaWJ1dGUoJ3NoYXBlJyk7XG4gICAgY29uc3QgY29vcmRzTnVtYmVyID0gY29vcmRzLnNwbGl0KCcsJykubWFwKHMgPT4gcGFyc2VJbnQocykpO1xuICAgIHBvc2l0aW9uSG90c3BvdHMoc2hhcGUsIGNvb3Jkc051bWJlciwgaW1nLCBob3RzcG90KTtcbiAgfVxuXG4gIG92ZXJyaWRlIGZpcnN0VXBkYXRlZChlKTogdm9pZCB7XG4gICAgc3VwZXIuZmlyc3RVcGRhdGVkKGUpO1xuXG4gICAgdGhpcy5ob3RzcG90cyA9IHRoaXMucXVlcnlTZWxlY3RvckFsbCgncXRpLWFzc29jaWFibGUtaG90c3BvdCcpO1xuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgZXZlbnQgPT4ge1xuICAgICAgdGhpcy5tb3VzZUNvb3JkID0ge1xuICAgICAgICB4OiBldmVudC5jbGllbnRYIC0gdGhpcy5nckltYWdlWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQsXG4gICAgICAgIHk6IGV2ZW50LmNsaWVudFkgLSB0aGlzLmdySW1hZ2VbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgdGhpcy5ob3RzcG90cy5mb3JFYWNoKGhvdHNwb3QgPT4ge1xuICAgICAgaG90c3BvdC5zdHlsZS5sZWZ0ID0gaG90c3BvdC5nZXRBdHRyaWJ1dGUoJ2Nvb3JkcycpLnNwbGl0KCcsJylbMF0gKyAncHgnO1xuICAgICAgaG90c3BvdC5zdHlsZS50b3AgPSBob3RzcG90LmdldEF0dHJpYnV0ZSgnY29vcmRzJykuc3BsaXQoJywnKVsxXSArICdweCc7XG5cbiAgICAgIGhvdHNwb3QuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBldmVudCA9PiB7XG4gICAgICAgIGlmICghdGhpcy5zdGFydFBvaW50KSB7XG4gICAgICAgICAgdGhpcy5zdGFydFBvaW50ID0gZXZlbnQudGFyZ2V0O1xuXG4gICAgICAgICAgdGhpcy5zdGFydENvb3JkID0ge1xuICAgICAgICAgICAgeDogdGhpcy5zdGFydFBvaW50LmdldEF0dHJpYnV0ZSgnY29vcmRzJykuc3BsaXQoJywnKVswXSxcbiAgICAgICAgICAgIHk6IHRoaXMuc3RhcnRQb2ludC5nZXRBdHRyaWJ1dGUoJ2Nvb3JkcycpLnNwbGl0KCcsJylbMV1cbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmVuZFBvaW50KSB7XG4gICAgICAgICAgdGhpcy5lbmRQb2ludCA9IGV2ZW50LnRhcmdldDtcblxuICAgICAgICAgIHRoaXMuX2xpbmVzID0gW1xuICAgICAgICAgICAgLi4udGhpcy5fbGluZXMsXG4gICAgICAgICAgICB0aGlzLnN0YXJ0UG9pbnQuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJykgKyAnICcgKyB0aGlzLmVuZFBvaW50LmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpXG4gICAgICAgICAgXTtcbiAgICAgICAgICB0aGlzLnNhdmVSZXNwb25zZSh0aGlzLl9saW5lcyk7XG4gICAgICAgICAgdGhpcy5zdGFydFBvaW50ID0gbnVsbDtcbiAgICAgICAgICB0aGlzLmVuZFBvaW50ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci1ob3RzcG90JywgdGhpcy5wb3NpdGlvbkhvdHNwb3RPblJlZ2lzdGVyKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktZ3JhcGhpYy1hc3NvY2lhdGUtaW50ZXJhY3Rpb24nOiBRdGlHcmFwaGljQXNzb2NpYXRlSW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBRdGlIb3RzcG90Q2hvaWNlIH0gZnJvbSAnLi4vLi4vcXRpLWhvdHNwb3QtY2hvaWNlJztcblxuZXhwb3J0IGZ1bmN0aW9uIHBvc2l0aW9uSG90c3BvdHMoXG4gIHNoYXBlOiBzdHJpbmcsXG4gIGNvb3Jkc051bWJlcjogbnVtYmVyW10sXG4gIGltZzogSFRNTEltYWdlRWxlbWVudCxcbiAgaG90c3BvdDogUXRpSG90c3BvdENob2ljZVxuKSB7XG4gIHN3aXRjaCAoc2hhcGUpIHtcbiAgICBjYXNlICdjaXJjbGUnOlxuICAgICAge1xuICAgICAgICBjb25zdCBbY2VudGVyWCwgY2VudGVyWSwgcmFkaXVzXSA9IGNvb3Jkc051bWJlcjtcbiAgICAgICAgY29uc3QgY2VudGVyWFBlciA9IChjZW50ZXJYIC8gaW1nLndpZHRoKSAqIDEwMDtcbiAgICAgICAgY29uc3QgY2VudGVyWVBlciA9IChjZW50ZXJZIC8gaW1nLmhlaWdodCkgKiAxMDA7XG4gICAgICAgIGNvbnN0IHJhZGl1c1BlciA9IChyYWRpdXMgLyBpbWcud2lkdGgpICogMTAwO1xuICAgICAgICBob3RzcG90LnN0eWxlLmxlZnQgPSBjZW50ZXJYUGVyIC0gcmFkaXVzUGVyICsgJyUnO1xuICAgICAgICBob3RzcG90LnN0eWxlLnRvcCA9IGNlbnRlcllQZXIgLSByYWRpdXNQZXIgKyAnJSc7XG4gICAgICAgIGhvdHNwb3Quc3R5bGUud2lkdGggPSBob3RzcG90LnN0eWxlLmhlaWdodCA9IDQgKiByYWRpdXNQZXIgKyAncHgnO1xuICAgICAgICBob3RzcG90LnN0eWxlLmJvcmRlclJhZGl1cyA9IGA5OTk5cHhgO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdyZWN0JzpcbiAgICAgIHtcbiAgICAgICAgY29uc3QgW2xlZnRYLCB0b3BZLCByaWdodFgsIGJvdHRvbVldID0gY29vcmRzTnVtYmVyO1xuICAgICAgICBjb25zdCBsZWZ0WFBlciA9IChsZWZ0WCAvIGltZy53aWR0aCkgKiAxMDA7XG4gICAgICAgIGNvbnN0IHRvcFlQZXIgPSAodG9wWSAvIGltZy5oZWlnaHQpICogMTAwO1xuICAgICAgICBjb25zdCByaWdodFhQZXIgPSAocmlnaHRYIC8gaW1nLndpZHRoKSAqIDEwMDtcbiAgICAgICAgY29uc3QgYm90dG9tWVBlciA9IChib3R0b21ZIC8gaW1nLmhlaWdodCkgKiAxMDA7XG4gICAgICAgIGhvdHNwb3Quc3R5bGUubGVmdCA9IGxlZnRYUGVyICsgJyUnO1xuICAgICAgICBob3RzcG90LnN0eWxlLnRvcCA9IHRvcFlQZXIgKyAnJSc7XG4gICAgICAgIGhvdHNwb3Quc3R5bGUud2lkdGggPSByaWdodFhQZXIgLSBsZWZ0WFBlciArICclJztcbiAgICAgICAgaG90c3BvdC5zdHlsZS5oZWlnaHQgPSBib3R0b21ZUGVyIC0gdG9wWVBlciArICclJztcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAncG9seSc6XG4gICAgICB7XG4gICAgICAgIC8vIGZyb20gYSxiLGMsZCxlLGYgPT4gW3t4OmEsIHk6Yn0se3g6YywgeTpkfSx7eDplLCB5OmZ9XVxuICAgICAgICBjb25zdCBwb2x5Y29vcmRzID0gY29vcmRzTnVtYmVyLnJlZHVjZSgoYWNjLCBjdXJyZW50VmFsdWUsIGN1cnJlbnRJbmRleCwgcG9seUMpID0+IHtcbiAgICAgICAgICBpZiAoY3VycmVudEluZGV4ICUgMiA9PT0gMSkge1xuICAgICAgICAgICAgY29uc3QgbGFzdFZhbCA9IGFjYy5wb3AoKTtcbiAgICAgICAgICAgIGFjY1thY2MubGVuZ3RoXSA9IHsgeDogbGFzdFZhbCwgeTogcG9seUNbY3VycmVudEluZGV4XSB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhY2MucHVzaChjdXJyZW50VmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCBbXSk7XG5cbiAgICAgICAgLy8gY2FsY3VsYXRlIGJvdW5kaW5nIGJveCBieSBmaW5kaW5nIHRoZSBtYXggYXggbWluIGNvb3JkaW5hdGVzIG9mIHggYW5kIHlcbiAgICAgICAgY29uc3QgbGVmdFggPSBNYXRoLm1pbiguLi5wb2x5Y29vcmRzLm1hcChwb2ludCA9PiBwb2ludC54KSk7XG4gICAgICAgIGNvbnN0IHJpZ2h0WCA9IE1hdGgubWF4KC4uLnBvbHljb29yZHMubWFwKHBvaW50ID0+IHBvaW50LngpKTtcbiAgICAgICAgY29uc3QgdG9wWSA9IE1hdGgubWluKC4uLnBvbHljb29yZHMubWFwKHBvaW50ID0+IHBvaW50LnkpKTtcbiAgICAgICAgY29uc3QgYm90dG9tWSA9IE1hdGgubWF4KC4uLnBvbHljb29yZHMubWFwKHBvaW50ID0+IHBvaW50LnkpKTtcblxuICAgICAgICAvLyBjYWxjdWxhdGUgdGhlIHJlbGF0aXZlIGRpc3RhbmNlIGNhdXNlIHdlIHdhbnQgdG8gdXNlIHBlcmNlbnRhZ2VzXG4gICAgICAgIGNvbnN0IGxlZnRYUGVyID0gKGxlZnRYIC8gaW1nLndpZHRoKSAqIDEwMDtcbiAgICAgICAgY29uc3QgdG9wWVBlciA9ICh0b3BZIC8gaW1nLmhlaWdodCkgKiAxMDA7XG4gICAgICAgIGNvbnN0IHJpZ2h0WFBlciA9IChyaWdodFggLyBpbWcud2lkdGgpICogMTAwO1xuICAgICAgICBjb25zdCBib3R0b21ZUGVyID0gKGJvdHRvbVkgLyBpbWcuaGVpZ2h0KSAqIDEwMDtcblxuICAgICAgICAvLyBzZXQgdGhlIGhvdHNwb3Qgb24geCx5IGFuZCBzZXQgdGhlIHdpZHRoIGFuZCBoZWlnaHQgaW4gcGVyY2VudGFnZXNcbiAgICAgICAgaG90c3BvdC5zdHlsZS5sZWZ0ID0gKGxlZnRYIC8gaW1nLndpZHRoKSAqIDEwMCArICclJztcbiAgICAgICAgaG90c3BvdC5zdHlsZS50b3AgPSAodG9wWSAvIGltZy5oZWlnaHQpICogMTAwICsgJyUnO1xuICAgICAgICBob3RzcG90LnN0eWxlLndpZHRoID0gcmlnaHRYUGVyIC0gbGVmdFhQZXIgKyAnJSc7XG4gICAgICAgIGhvdHNwb3Quc3R5bGUuaGVpZ2h0ID0gYm90dG9tWVBlciAtIHRvcFlQZXIgKyAnJSc7XG5cbiAgICAgICAgLy8gYWxsIHRoZSBwb2x5Z29uIHBvaW50cyBzaG91bGQgYmUgY29ycmVjdGVkIGNhdXNlZCB0aGV5IGFyZSBmcm9tXG4gICAgICAgIC8vIGltYWdlIDAsMCBwb2ludCwgYW5kIHNob3VsZCBiZSBmcm9tIHRoZSBob3RzcG90IHBvaW50IHdoaWNoIGFscmVhZHlcbiAgICAgICAgLy8gaGFzIGJlZW4gb2Zmc2V0dGVkIGZyb20gdGhlIGltYWdlIGluIHRoZSBwcmV2aW91cyBmZXcgbGluZXMgb2YgY29kZVxuICAgICAgICAvLyBhbHNvIHRoZSBwb2ludHMgaGF2ZSBhIHJlbGF0aXZlIGRpc3RhbmNlIHRvIHRoZSBpbWFnZSwgYnV0IG5vdyBoYXZlXG4gICAgICAgIC8vIHRvIGhhdmUgYSByZWxhdGl2ZSBkaXN0YW5jZSBmcm9tIHRoZSB3aWR0aCBvZiB0aGUgaG90c3BvdFxuICAgICAgICBjb25zdCBwb2x5Z29uRGF0YSA9IHBvbHljb29yZHMubWFwKHBvaW50ID0+ICh7XG4gICAgICAgICAgeDogKChwb2ludC54IC0gbGVmdFgpIC8gKHJpZ2h0WCAtIGxlZnRYKSkgKiAxMDAsXG4gICAgICAgICAgeTogKChwb2ludC55IC0gdG9wWSkgLyAoYm90dG9tWSAtIHRvcFkpKSAqIDEwMFxuICAgICAgICB9KSk7XG5cbiAgICAgICAgLy8gY3JlYXRlIGNsaXAgcGF0aCBjb29yZGluYXRlIHN0eWxlIGluIHBlcmNlbnRhZ2VzXG4gICAgICAgIGNvbnN0IHBvbHlEID0gcG9seWdvbkRhdGEubWFwKHAgPT4gTWF0aC5yb3VuZChwLngpICsgJyUgJyArIE1hdGgucm91bmQocC55KSArICclJykuam9pbignLCcpO1xuXG4gICAgICAgIC8vIDUwJSAwJSwgMTAwJSA1MCUsIDUwJSAxMDAlLCAwJSA1MCVcbiAgICAgICAgaG90c3BvdC5zdHlsZS5jbGlwUGF0aCA9IGBwb2x5Z29uKCR7cG9seUR9KWA7XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxufVxuIiwgImltcG9ydCB7IGNzcywgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgRHJhZ0Ryb3BJbnRlcmFjdGlvbk1peGluIH0gZnJvbSAnLi4vaW50ZXJuYWwvZHJhZy1kcm9wL2RyYWctZHJvcC1pbnRlcmFjdGlvbi1taXhpbic7XG5pbXBvcnQgeyBRdGlIb3RzcG90Q2hvaWNlIH0gZnJvbSAnLi4vcXRpLWhvdHNwb3QtY2hvaWNlJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1ncmFwaGljLWdhcC1tYXRjaC1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpR3JhcGhpY0dhcE1hdGNoSW50ZXJhY3Rpb24gZXh0ZW5kcyBEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4oXG4gIExpdEVsZW1lbnQsXG4gICdxdGktZ2FwLWltZycsXG4gIGZhbHNlLFxuICAncXRpLWFzc29jaWFibGUtaG90c3BvdCdcbikge1xuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gY3NzYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB9XG4gICAgc2xvdFtuYW1lPSdxdGktZ2FwLWltZyddIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBnYXA6IDFyZW07XG4gICAgfVxuICBgO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGAgPHNsb3Q+PC9zbG90PlxuICAgICAgPHNsb3QgbmFtZT1cInF0aS1nYXAtaW1nXCI+PC9zbG90PmA7XG4gIH1cblxuICBwcml2YXRlIHBvc2l0aW9uSG90c3BvdE9uUmVnaXN0ZXIoZTogQ3VzdG9tRXZlbnQ8bnVsbD4pOiB2b2lkIHtcbiAgICBjb25zdCBpbWcgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpIGFzIEhUTUxJbWFnZUVsZW1lbnQ7XG4gICAgY29uc3QgaG90c3BvdCA9IGUudGFyZ2V0IGFzIFF0aUhvdHNwb3RDaG9pY2U7XG4gICAgY29uc3QgY29vcmRzID0gaG90c3BvdC5nZXRBdHRyaWJ1dGUoJ2Nvb3JkcycpO1xuICAgIGNvbnN0IHNoYXBlID0gaG90c3BvdC5nZXRBdHRyaWJ1dGUoJ3NoYXBlJyk7XG4gICAgY29uc3QgY29vcmRzTnVtYmVyID0gY29vcmRzLnNwbGl0KCcsJykubWFwKHMgPT4gcGFyc2VJbnQocykpO1xuXG4gICAgLy8gcG9zaXRpb25Ib3RzcG90cyhzaGFwZSwgY29vcmRzTnVtYmVyLCBpbWcsIGhvdHNwb3QpO1xuICAgIHN3aXRjaCAoc2hhcGUpIHtcbiAgICAgIGNhc2UgJ2NpcmNsZSc6XG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCBbY2VudGVyWCwgY2VudGVyWSwgcmFkaXVzXSA9IGNvb3Jkc051bWJlcjtcbiAgICAgICAgICBob3RzcG90LnN0eWxlLmxlZnQgPSBjZW50ZXJYIC0gcmFkaXVzICsgJ3B4JztcbiAgICAgICAgICBob3RzcG90LnN0eWxlLnRvcCA9IGNlbnRlclkgLSByYWRpdXMgKyAncHgnO1xuICAgICAgICAgIGhvdHNwb3Quc3R5bGUud2lkdGggPSBob3RzcG90LnN0eWxlLmhlaWdodCA9IDIgKiByYWRpdXMgKyAncHgnO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdyZWN0JzpcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IFtsZWZ0WCwgdG9wWSwgcmlnaHRYLCBib3R0b21ZXSA9IGNvb3Jkc051bWJlcjtcbiAgICAgICAgICBob3RzcG90LnN0eWxlLmxlZnQgPSBsZWZ0WCArICdweCc7XG4gICAgICAgICAgaG90c3BvdC5zdHlsZS50b3AgPSB0b3BZICsgJ3B4JztcbiAgICAgICAgICBob3RzcG90LnN0eWxlLndpZHRoID0gcmlnaHRYIC0gbGVmdFggKyAncHgnO1xuICAgICAgICAgIGhvdHNwb3Quc3R5bGUuaGVpZ2h0ID0gYm90dG9tWSAtIHRvcFkgKyAncHgnO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigncXRpLXJlZ2lzdGVyLWhvdHNwb3QnLCB0aGlzLnBvc2l0aW9uSG90c3BvdE9uUmVnaXN0ZXIpO1xuICB9XG4gIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdxdGktcmVnaXN0ZXItaG90c3BvdCcsIHRoaXMucG9zaXRpb25Ib3RzcG90T25SZWdpc3Rlcik7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWdyYXBoaWMtZ2FwLW1hdGNoLWludGVyYWN0aW9uJzogUXRpR3JhcGhpY0dhcE1hdGNoSW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgQ2hvaWNlcyB9IGZyb20gJy4uL2ludGVybmFsL2Nob2ljZXMvY2hvaWNlcyc7XG5pbXBvcnQgeyBRdGlIb3RzcG90Q2hvaWNlIH0gZnJvbSAnLi4vcXRpLWhvdHNwb3QtY2hvaWNlJztcblxuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHBvc2l0aW9uSG90c3BvdHMgfSBmcm9tICcuLi9pbnRlcm5hbC9ob3RzcG90cy9ob3RzcG90JztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1ncmFwaGljLW9yZGVyLWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlHcmFwaGljT3JkZXJJbnRlcmFjdGlvbiBleHRlbmRzIENob2ljZXMge1xuICBjaG9pY2VPcmRlcmluZzogYm9vbGVhbjtcblxuICAvLyBkbyBub3Qgc2VsZWN0ICggaGlnaGxpZ2h0IGJsdWUsIHRoZSBpbWFnZSlcbiAgLy8gdGFyZ2V0IHRoZSBtYWluIHNsb3QgbWFrZSBpdCByZWxhdGl2ZSBhbmQgZml0IHdpdGggdGhlIGNvbnRlblxuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gW1xuICAgIGNzc2BcbiAgICAgIHNsb3Q6bm90KFtuYW1lPSdwcm9tcHQnXSkge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7IC8qIHF0aS1ob3RzcG90LWNob2ljZSByZWxhdGl2ZSB0byB0aGUgc2xvdCAqL1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgd2lkdGg6IGZpdC1jb250ZW50OyAvKiBob3RzcG90cyBub3Qgc3RyZXRjaGluZyBmdXJ0aGVyIGlmIGltYWdlIGlzIGF0IG1heCBzaXplICovXG4gICAgICB9XG4gICAgICA6OnNsb3R0ZWQoaW1nKSB7XG4gICAgICAgIC8qIGltYWdlIG5vdCBzZWxlY3RhYmxlIGFueW1vcmUgKi9cbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgICAgfVxuICAgIGBcbiAgXTtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8c2xvdCBuYW1lPVwicHJvbXB0XCI+PC9zbG90PlxuICAgICAgPCEtLSBzbG90IGZvciB0aGUgcHJvbXB0IC0tPlxuICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgPCEtLSBzbG90IGZvciB0aGUgaW1hZ2UgYW5kIGhvdHNwb3RzIC0tPlxuICAgIGA7XG4gIH1cblxuICBwcml2YXRlIHNldEhvdHNwb3RPcmRlcihlOiBDdXN0b21FdmVudDx7IGlkZW50aWZpZXI6IHN0cmluZzsgY2hlY2tlZDogYm9vbGVhbiB9Pik6IHZvaWQge1xuICAgIGNvbnN0IHsgaWRlbnRpZmllciB9ID0gZS5kZXRhaWw7XG5cbiAgICBjb25zdCBob3RzcG90ID0gdGhpcy5fY2hvaWNlRWxlbWVudHMuZmluZChlbCA9PiBlbC5nZXRBdHRyaWJ1dGUoJ2lkZW50aWZpZXInKSA9PT0gaWRlbnRpZmllcikgYXMgUXRpSG90c3BvdENob2ljZTtcblxuICAgIGNvbnN0IG1heFNlbGVjdGlvbiA9IHRoaXMuX2Nob2ljZUVsZW1lbnRzLmxlbmd0aDtcbiAgICBpZiAoIXRoaXMuY2hvaWNlT3JkZXJpbmcpIHtcbiAgICAgIHRoaXMuY2hvaWNlT3JkZXJpbmcgPSB0cnVlO1xuICAgICAgaWYgKGhvdHNwb3Qub3JkZXIgPT0gbnVsbCkge1xuICAgICAgICBpZiAoKHRoaXMuX2Nob2ljZUVsZW1lbnRzIGFzIFF0aUhvdHNwb3RDaG9pY2VbXSkuZmlsdGVyKGkgPT4gaS5vcmRlciA+IDApLmxlbmd0aCA+PSBtYXhTZWxlY3Rpb24pIHtcbiAgICAgICAgICB0aGlzLmNob2ljZU9yZGVyaW5nID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuOyAvLyBkb24ndCBkbyBhbnl0aGluZyBpZiB1c2VyIGFscmVhZHkgc2VsZWN0ZWQgNSBpbWFnZXMuXG4gICAgICAgIH1cbiAgICAgICAgaG90c3BvdC5vcmRlciA9ICh0aGlzLl9jaG9pY2VFbGVtZW50cyBhcyBRdGlIb3RzcG90Q2hvaWNlW10pLmZpbHRlcihpID0+ICEhaS5vcmRlcikubGVuZ3RoICsgMTtcbiAgICAgICAgdGhpcy5jaG9pY2VPcmRlcmluZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAodGhpcy5fY2hvaWNlRWxlbWVudHMgYXMgUXRpSG90c3BvdENob2ljZVtdKS5mb3JFYWNoKGhvdHNwb3QgPT4ge1xuICAgICAgICAgIGlmIChob3RzcG90Lm9yZGVyID4gaG90c3BvdC5vcmRlcikge1xuICAgICAgICAgICAgaG90c3BvdC5vcmRlci0tO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaG90c3BvdDtcbiAgICAgICAgfSk7XG4gICAgICAgIGhvdHNwb3Qub3JkZXIgPSBudWxsO1xuICAgICAgfVxuICAgICAgdGhpcy5jaG9pY2VPcmRlcmluZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcG9zaXRpb25Ib3RzcG90T25SZWdpc3RlcihlOiBDdXN0b21FdmVudDxRdGlIb3RzcG90Q2hvaWNlPik6IHZvaWQge1xuICAgIGNvbnN0IGltZyA9IHRoaXMucXVlcnlTZWxlY3RvcignaW1nJykgYXMgSFRNTEltYWdlRWxlbWVudDtcbiAgICBjb25zdCBob3RzcG90ID0gZS50YXJnZXQgYXMgUXRpSG90c3BvdENob2ljZTtcbiAgICBjb25zdCBjb29yZHMgPSBob3RzcG90LmdldEF0dHJpYnV0ZSgnY29vcmRzJyk7XG4gICAgY29uc3Qgc2hhcGUgPSBob3RzcG90LmdldEF0dHJpYnV0ZSgnc2hhcGUnKTtcbiAgICBjb25zdCBjb29yZHNOdW1iZXIgPSBjb29yZHMuc3BsaXQoJywnKS5tYXAocyA9PiBwYXJzZUludChzKSk7XG5cbiAgICBwb3NpdGlvbkhvdHNwb3RzKHNoYXBlLCBjb29yZHNOdW1iZXIsIGltZywgaG90c3BvdCk7XG4gIH1cblxuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigncXRpLWNob2ljZS1lbGVtZW50LXNlbGVjdGVkJywgdGhpcy5zZXRIb3RzcG90T3JkZXIpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigncXRpLXJlZ2lzdGVyLWNob2ljZScsIHRoaXMucG9zaXRpb25Ib3RzcG90T25SZWdpc3Rlcik7XG4gIH1cbiAgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3F0aS1jaG9pY2UtZWxlbWVudC1zZWxlY3RlZCcsIHRoaXMuc2V0SG90c3BvdE9yZGVyKTtcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci1jaG9pY2UnLCB0aGlzLnBvc2l0aW9uSG90c3BvdE9uUmVnaXN0ZXIpO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1ncmFwaGljLW9yZGVyLWludGVyYWN0aW9uJzogUXRpR3JhcGhpY09yZGVySW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IENob2ljZXMgfSBmcm9tICcuLi9pbnRlcm5hbC9jaG9pY2VzL2Nob2ljZXMnO1xuaW1wb3J0IHsgcG9zaXRpb25Ib3RzcG90cyB9IGZyb20gJy4uL2ludGVybmFsL2hvdHNwb3RzL2hvdHNwb3QnO1xuaW1wb3J0IHsgUXRpSG90c3BvdENob2ljZSB9IGZyb20gJy4uL3F0aS1ob3RzcG90LWNob2ljZSc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktaG90c3BvdC1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpSG90c3BvdEludGVyYWN0aW9uIGV4dGVuZHMgQ2hvaWNlcyB7XG4gIC8vIGRvIG5vdCBzZWxlY3QgKCBoaWdobGlnaHQgYmx1ZSwgdGhlIGltYWdlKVxuICAvLyB0YXJnZXQgdGhlIG1haW4gc2xvdCBtYWtlIGl0IHJlbGF0aXZlIGFuZCBmaXQgd2l0aCB0aGUgY29udGVuXG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBbXG4gICAgY3NzYFxuICAgICAgc2xvdDpub3QoW25hbWU9J3Byb21wdCddKSB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgLyogcXRpLWhvdHNwb3QtY2hvaWNlIHJlbGF0aXZlIHRvIHRoZSBzbG90ICovXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB3aWR0aDogZml0LWNvbnRlbnQ7IC8qIGhvdHNwb3RzIG5vdCBzdHJldGNoaW5nIGZ1cnRoZXIgaWYgaW1hZ2UgaXMgYXQgbWF4IHNpemUgKi9cbiAgICAgIH1cbiAgICAgIDo6c2xvdHRlZChpbWcpIHtcbiAgICAgICAgLyogaW1hZ2Ugbm90IHNlbGVjdGFibGUgYW55bW9yZSAqL1xuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgICAgIC8qIHdpZHRoOjEwMCU7ICovXG4gICAgICB9XG4gICAgYFxuICBdO1xuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8c2xvdCBuYW1lPVwicHJvbXB0XCI+PC9zbG90PlxuICAgICAgPCEtLSBzbG90IGZvciB0aGUgcHJvbXB0IC0tPlxuICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgPCEtLSBzbG90IGZvciB0aGUgaW1hZ2UgYW5kIGhvdHNwb3RzIC0tPlxuICAgIGA7XG4gIH1cblxuICBwcml2YXRlIHBvc2l0aW9uSG90c3BvdE9uUmVnaXN0ZXIoZTogQ3VzdG9tRXZlbnQ8UXRpSG90c3BvdENob2ljZT4pOiB2b2lkIHtcbiAgICBjb25zdCBpbWcgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpIGFzIEhUTUxJbWFnZUVsZW1lbnQ7XG4gICAgY29uc3QgaG90c3BvdCA9IGUudGFyZ2V0IGFzIFF0aUhvdHNwb3RDaG9pY2U7XG4gICAgY29uc3QgY29vcmRzID0gaG90c3BvdC5nZXRBdHRyaWJ1dGUoJ2Nvb3JkcycpO1xuICAgIGNvbnN0IHNoYXBlID0gaG90c3BvdC5nZXRBdHRyaWJ1dGUoJ3NoYXBlJyk7XG4gICAgY29uc3QgY29vcmRzTnVtYmVyID0gY29vcmRzLnNwbGl0KCcsJykubWFwKHMgPT4gcGFyc2VJbnQocykpO1xuXG4gICAgcG9zaXRpb25Ib3RzcG90cyhzaGFwZSwgY29vcmRzTnVtYmVyLCBpbWcsIGhvdHNwb3QpO1xuICB9XG5cbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci1jaG9pY2UnLCB0aGlzLnBvc2l0aW9uSG90c3BvdE9uUmVnaXN0ZXIpO1xuICB9XG4gIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdxdGktcmVnaXN0ZXItY2hvaWNlJywgdGhpcy5wb3NpdGlvbkhvdHNwb3RPblJlZ2lzdGVyKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktaG90c3BvdC1pbnRlcmFjdGlvbic6IFF0aUhvdHNwb3RJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IGh0bWwsIExpdEVsZW1lbnQsIFByb3BlcnR5VmFsdWVzIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IERyYWdEcm9wSW50ZXJhY3Rpb25NaXhpbiB9IGZyb20gJy4uL2ludGVybmFsL2RyYWctZHJvcC9kcmFnLWRyb3AtaW50ZXJhY3Rpb24tbWl4aW4nO1xuXG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSwgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyB1bnNhZmVIVE1MIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvdW5zYWZlLWh0bWwuanMnO1xuaW1wb3J0IHsgUmVzcG9uc2VJbnRlcmFjdGlvbiB9IGZyb20gJy4uLy4uL2ludGVybmFsL2V4cHJlc3Npb24tcmVzdWx0JztcbmltcG9ydCAnLi4vcXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZSc7XG5pbXBvcnQgeyBRdGlTaW1wbGVBc3NvY2lhYmxlQ2hvaWNlIH0gZnJvbSAnLi4vcXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZSc7XG5cbmludGVyZmFjZSBDb2x1bW4ge1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBSb3cge1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIGlzQ2hlY2tlZDogYm9vbGVhbjtcbn1cblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1tYXRjaC1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpTWF0Y2hJbnRlcmFjdGlvbiBleHRlbmRzIERyYWdEcm9wSW50ZXJhY3Rpb25NaXhpbihcbiAgTGl0RWxlbWVudCxcbiAgJ3F0aS1zaW1wbGUtbWF0Y2gtc2V0OmZpcnN0LW9mLXR5cGUgcXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZScsXG4gIGZhbHNlLFxuICAncXRpLXNpbXBsZS1tYXRjaC1zZXQ6bGFzdC1vZi10eXBlIHF0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UnXG4pIHtcbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IFtdO1xuICByb3dzOiBRdGlTaW1wbGVBc3NvY2lhYmxlQ2hvaWNlW107XG4gIGNvbHM6IFF0aVNpbXBsZUFzc29jaWFibGVDaG9pY2VbXTtcbiAgbGFzdENoZWNrZWRSYWRpbzogSFRNTElucHV0RWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gIEBzdGF0ZSgpIHJlc3BvbnNlID0gW107XG4gIEBzdGF0ZSgpIGNvcnJlY3RPcHRpb25zOiBzdHJpbmdbXSA9IFtdO1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ3Jlc3BvbnNlLWlkZW50aWZpZXInIH0pIHJlc3BvbnNlSWRlbnRpZmllcjogc3RyaW5nID0gJyc7XG5cbiAgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLnJvd3MgPSBBcnJheS5mcm9tPFF0aVNpbXBsZUFzc29jaWFibGVDaG9pY2U+KFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHdjL25vLWNoaWxkLXRyYXZlcnNhbC1pbi1jb25uZWN0ZWRjYWxsYmFja1xuICAgICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsKCdxdGktc2ltcGxlLW1hdGNoLXNldDpmaXJzdC1vZi10eXBlIHF0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UnKVxuICAgICk7XG4gICAgdGhpcy5jb2xzID0gQXJyYXkuZnJvbTxRdGlTaW1wbGVBc3NvY2lhYmxlQ2hvaWNlPihcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB3Yy9uby1jaGlsZC10cmF2ZXJzYWwtaW4tY29ubmVjdGVkY2FsbGJhY2tcbiAgICAgIHRoaXMucXVlcnlTZWxlY3RvckFsbCgncXRpLXNpbXBsZS1tYXRjaC1zZXQ6bGFzdC1vZi10eXBlIHF0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UnKVxuICAgICk7XG5cbiAgICB0aGlzLnJlc3BvbnNlID0gW107XG4gIH1cblxuICBoYW5kbGVSYWRpb0NsaWNrID0gZSA9PiB7XG4gICAgY29uc3QgcmFkaW8gPSBlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGlmICh0aGlzLmxhc3RDaGVja2VkUmFkaW8gPT09IHJhZGlvKSB7XG4gICAgICByYWRpby5jaGVja2VkID0gZmFsc2U7XG4gICAgICB0aGlzLmxhc3RDaGVja2VkUmFkaW8gPSBudWxsO1xuICAgICAgdGhpcy5oYW5kbGVSYWRpb0NoYW5nZShlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sYXN0Q2hlY2tlZFJhZGlvID0gcmFkaW87XG4gICAgfVxuICB9O1xuXG4gIGhhbmRsZVJhZGlvQ2hhbmdlID0gZSA9PiB7XG4gICAgY29uc3QgY2hlY2tib3ggPSBlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGNvbnN0IHZhbHVlID0gY2hlY2tib3gudmFsdWU7XG4gICAgY29uc3QgbmFtZSA9IGNoZWNrYm94Lm5hbWU7ICAgIFxuICAgIGNvbnN0IHR5cGUgPSBjaGVja2JveC50eXBlO1xuICAgIGlmIChjaGVja2JveC5jaGVja2VkKSB7XG4gICAgICBpZiAoIXRoaXMucmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy5yZXNwb25zZSA9IFt2YWx1ZV07XG4gICAgICB9XG4gICAgICBlbHNlIGlmICh0aGlzLnJlc3BvbnNlLmluZGV4T2YodmFsdWUpID09PSAtMSkgeyAgICBcbiAgICAgICAgaWYgKHR5cGUgPT09ICdyYWRpbycpIHtcbiAgICAgICAgICB0aGlzLnJlc3BvbnNlID0gdGhpcy5yZXNwb25zZS5maWx0ZXIodiA9PiB2LmluZGV4T2YobmFtZSkgPT09IC0xKTtcbiAgICAgICAgfSAgIFxuICAgICAgICB0aGlzLnJlc3BvbnNlLnB1c2godmFsdWUpO1xuICAgICAgfSAgICAgIFxuICAgICAgdGhpcy5sYXN0Q2hlY2tlZFJhZGlvID0gY2hlY2tib3g7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVzcG9uc2UgPSB0aGlzLnJlc3BvbnNlLmZpbHRlcih2ID0+IHYgIT09IHZhbHVlKTtcbiAgICAgIHRoaXMubGFzdENoZWNrZWRSYWRpbyA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50PFJlc3BvbnNlSW50ZXJhY3Rpb24+KCdxdGktaW50ZXJhY3Rpb24tcmVzcG9uc2UnLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICByZXNwb25zZUlkZW50aWZpZXI6IHRoaXMucmVzcG9uc2VJZGVudGlmaWVyLFxuICAgICAgICAgIHJlc3BvbnNlOiB0aGlzLnJlc3BvbnNlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfTtcblxuXG4gIHNldCBjb3JyZWN0UmVzcG9uc2UocmVzcG9uc2VWYWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pIHsgICAgXG4gICAgaWYgKHJlc3BvbnNlVmFsdWUgPT09ICcnKSB7XG4gICAgICB0aGlzLmNvcnJlY3RPcHRpb25zID0gW107XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJlc3BvbnNlVmFsdWUpKSB7XG4gICAgICB0aGlzLmNvcnJlY3RPcHRpb25zID0gcmVzcG9uc2VWYWx1ZTtcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgaWYgKCF0aGlzLmNsYXNzTGlzdC5jb250YWlucygncXRpLW1hdGNoLXRhYnVsYXInKSkge1xuICAgICAgcmV0dXJuIGh0bWxgPHNsb3QgbmFtZT1cInByb21wdFwiPjwvc2xvdD4gPHNsb3Q+PC9zbG90PmA7XG4gICAgfVxuICAgIHJldHVybiBodG1sYFxuICAgICAgPHNsb3QgbmFtZT1cInByb21wdFwiPjwvc2xvdD5cbiAgICAgIDx0YWJsZT5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0ZD48L3RkPlxuICAgICAgICAgICR7dGhpcy5jb2xzLm1hcCgoY29sLCBpKSA9PiBodG1sYDx0aCBwYXJ0PVwici1oZWFkZXJcIj4ke3Vuc2FmZUhUTUwoY29sLmlubmVySFRNTCl9PC90aD5gKX1cbiAgICAgICAgPC90cj5cblxuICAgICAgICAke3RoaXMucm93cy5tYXAoXG4gICAgICAgICAgKHJvdywgckluZGV4KSA9PlxuICAgICAgICAgICAgaHRtbGA8dHI+XG4gICAgICAgICAgICAgIDx0ZCBwYXJ0PVwiYy1oZWFkZXJcIj4ke3Vuc2FmZUhUTUwocm93LmlubmVySFRNTCl9PC90ZD5cbiAgICAgICAgICAgICAgJHt0aGlzLmNvbHMubWFwKChjb2wsIGNJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd0lkID0gcm93LmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbElkID0gY29sLmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYCR7cm93SWR9ICR7Y29sSWR9YDtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZEluUm93Q291bnQgPSB0aGlzLnJlc3BvbnNlLmZpbHRlcih2ID0+IHYuc3BsaXQoJyAnKVswXSA9PT0gcm93SWQpLmxlbmd0aCB8fCAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoZWNrZWQgPSB0aGlzLnJlc3BvbnNlLmluY2x1ZGVzKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJ0ID0gYHJiICR7Y2hlY2tlZCA/ICdyYi1jaGVja2VkJyA6ICcnfSAke3RoaXMuY29ycmVjdE9wdGlvbnMuaW5jbHVkZXModmFsdWUpID8gJ3JiLWNvcnJlY3QnIDogJyd9YDtcbiAgICAgICAgICAgICAgICAvLyBkaXNhYmxlIGlmIG1hdGNoIG1heCBpcyBncmVhdGVyIHRoYW4gMSBhbmQgbWF4IGlzIHJlYWNoZWRcbiAgICAgICAgICAgICAgICBjb25zdCBkaXNhYmxlID0gcm93Lm1hdGNoTWF4ID09PSAxID8gZmFsc2UgOiBzZWxlY3RlZEluUm93Q291bnQgPj0gcm93Lm1hdGNoTWF4ICYmICFjaGVja2VkO1xuICAgICAgICAgICAgICAgIHJldHVybiBodG1sYDx0ZD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0eXBlPSR7cm93Lm1hdGNoTWF4ID09PSAxID8gJ3JhZGlvJyA6IGBjaGVja2JveGB9ICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cImlkXCJcbiAgICAgICAgICAgICAgICAgICAgcGFydD0ke3BhcnR9ICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgbmFtZT0ke3Jvd0lkfVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT0ke3ZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAuZGlzYWJsZWQ9JHtkaXNhYmxlfVxuICAgICAgICAgICAgICAgICAgICBAY2hhbmdlPSR7ZSA9PiB0aGlzLmhhbmRsZVJhZGlvQ2hhbmdlKGUpfVxuICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHtlID0+IChyb3cubWF0Y2hNYXggPT09IDEgPyB0aGlzLmhhbmRsZVJhZGlvQ2xpY2soZSkgOiBudWxsKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC90ZD5gO1xuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIDwvdHI+YFxuICAgICAgICApfVxuICAgICAgPC90YWJsZT5cbiAgICBgO1xuICB9XG59XG5cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLW1hdGNoLWludGVyYWN0aW9uJzogUXRpTWF0Y2hJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IGh0bWwsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbi8vIFRISVMgSVMgTk9UIFVTRUQgSU4gVEFCVUxBUiBNQVRDSCBJTlRFUkFDVElPTlxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UnKVxuLy8gdHNsaW50OmRpc2FibGU6IGluZGVudFxuZXhwb3J0IGNsYXNzIFF0aVNpbXBsZUFzc29jaWFibGVDaG9pY2UgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgLyoqIHRoZSBtaW5pbWFsIG51bWJlciBvZiBzZWxlY3Rpb25zIGEgY2FuZGlkYXRlIG11c3QgbWFrZSAqL1xuICBAcHJvcGVydHkoe1xuICAgIHR5cGU6IE51bWJlcixcbiAgICBhdHRyaWJ1dGU6ICdtYXRjaC1taW4nXG4gIH0pXG4gIHB1YmxpYyBtYXRjaE1pbjogbnVtYmVyID0gMDtcblxuICAvKiogdGhlIG1heGltdW0gbnVtYmVyIG9mIHNlbGVjdGlvbnMgYSBjYW5kaWRhdGUgbXVzdCBtYWtlLCB0aGUgb3RoZXIgb3B0aW9ucyB3aWxsIGJlIGRpc2FibGVkIHdoZW4gbWF4IG9wdGlvbnMgaXMgY2hlY2tlZCAqL1xuICBAcHJvcGVydHkoe1xuICAgIHR5cGU6IE51bWJlcixcbiAgICBhdHRyaWJ1dGU6ICdtYXRjaC1tYXgnXG4gIH0pXG4gIHB1YmxpYyBtYXRjaE1heDogbnVtYmVyID0gMTtcblxuICBAcHJvcGVydHkoe1xuICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgYXR0cmlidXRlOiAnZml4ZWQnXG4gIH0pXG4gIHB1YmxpYyBmaXhlZCA9IGZhbHNlO1xuXG4gIC8vIHBrOiBUaGlzIG5lZWRzIHNvbWUgZXhwbGFuYXRpb25cbiAgLy8gaW4gdGhlIGFzc29jaWF0ZSBpbnRlcmFjdGlvbiB0aGVyZSBpcyBhIHNwZWNpYWwgc2xvdCBmb3IgdGhlc2UgcXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZXNcbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgnc2xvdCcsICdxdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlJyk7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ3BhcnQnLCAncXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZScpO1xuICB9XG5cbiAgLy8gcGs6IFRoaXMgbmVlZHMgc29tZSBleHBsYW5hdGlvblxuICAvLyBpbiBxdGktbWF0Y2gtaW50ZXJhY3Rpb24sIHF0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UgaXMgdXNlZCB0byBkZW5vdGUgdGhlXG4gIC8vIGRyYWdnYWJsZSwgYnV0IGFsc28gdGhlIGRyb3BwYWJsZS4gV0VJUkQuLiBidXQgbGV0cyBkZWFsIHdpdGggaXQuXG4gIC8vIFNvIHdlIGhhdmUgYSBzbG90IGZvciB3aGVuZXZlciBhbm90aGVyIHF0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UgaXMgZHJvcHBlZCBpbiBoZXJlLlxuICAvLyBBbmQgd2UgaGF2ZSBzbG90IGZvciBjb250ZW50IGxpa2UgaW4gdGhpcyBhc3NvY2lhdGUgaW50ZXJhY3Rpb25cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgPHNsb3QgbmFtZT1cInF0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2VcIj48L3Nsb3Q+XG4gICAgYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlJzogUXRpU2ltcGxlQXNzb2NpYWJsZUNob2ljZTtcbiAgfVxufVxuIiwgImltcG9ydCB7IGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgSW50ZXJhY3Rpb24gfSBmcm9tICcuLi9pbnRlcm5hbC9pbnRlcmFjdGlvbi9pbnRlcmFjdGlvbic7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktbWVkaWEtaW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aU1lZGlhSW50ZXJhY3Rpb24gZXh0ZW5kcyBJbnRlcmFjdGlvbiB7XG4gIHZhbHVlID0gMDtcbiAgcmVzZXQoKSB7XG4gICAgLy8gdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG4gIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xuICAgIC8vIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBzZXQgcmVzcG9uc2UodmFsOiB1bmRlZmluZWQpIHtcbiAgICAvLyB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICBzdGF0aWMgb3ZlcnJpZGUgZ2V0IHByb3BlcnRpZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkludGVyYWN0aW9uLnByb3BlcnRpZXMsXG4gICAgICAuLi57XG4gICAgICAgIHN0ZXA6IHtcbiAgICAgICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICAgICAgYXR0cmlidXRlOiAnc3RlcCcsXG4gICAgICAgICAgZGVmYXVsdDogMTBcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gW2Nzc2BgXTtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgIDxzbG90IG5hbWU9XCJwcm9tcHRcIj48L3Nsb3Q+XG4gICAgICA8c2xvdD48L3Nsb3Q+YDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIC8vIGdldCBhdWRpbywgdmlkZW8gb2Ygb2JqZWN0IHRhZy5cbiAgICBjb25zdCBtZWRpYU9iamVjdCA9IHRoaXMucXVlcnlTZWxlY3RvcignYXVkaW8nKSB8fCB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3ZpZGVvJykgfHwgdGhpcy5xdWVyeVNlbGVjdG9yKCdvYmplY3QnKTtcbiAgICBpZiAobWVkaWFPYmplY3QpIHtcbiAgICAgIC8vIGxpc3RlbiB0byBlbmRlZCBldmVudFxuICAgICAgbWVkaWFPYmplY3QuYWRkRXZlbnRMaXN0ZW5lcignZW5kZWQnLCAoKSA9PiB7XG4gICAgICAgIC8vIHNldCB2YWx1ZSB0byAwXG4gICAgICAgIHRoaXMudmFsdWUrKztcbiAgICAgICAgdGhpcy5zYXZlUmVzcG9uc2UodGhpcy52YWx1ZS50b1N0cmluZygpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktbWVkaWEtaW50ZXJhY3Rpb24nOiBRdGlNZWRpYUludGVyYWN0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sLCBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgRHJhZ0Ryb3BJbnRlcmFjdGlvbk1peGluIH0gZnJvbSAnLi4vaW50ZXJuYWwvZHJhZy1kcm9wL2RyYWctZHJvcC1pbnRlcmFjdGlvbi1taXhpbic7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktb3JkZXItaW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aU9yZGVySW50ZXJhY3Rpb24gZXh0ZW5kcyBEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4oTGl0RWxlbWVudCwgYHF0aS1zaW1wbGUtY2hvaWNlYCwgdHJ1ZSwgJ2Ryb3AtbGlzdCcpIHtcbiAgY2hpbGRyZW5NYXA6IEVsZW1lbnRbXTtcbiAgcHJpdmF0ZSBfY2xhc3NOYW1lczogc3RyaW5nO1xuICBwcml2YXRlIF9vcmllbnRhdGlvbjogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJztcblxuICBwdWJsaWMgc3RhdGljIGxheW91dENsYXNzID0gWydxdGktY2hvaWNlcy10b3AnLCAncXRpLWNob2ljZXMtYm90dG9tJywgJ3F0aS1jaG9pY2VzLWxlZnQnLCAncXRpLWNob2ljZXMtcmlnaHQnXTtcblxuICAvKiogb3JpZW50YXRpb24gb2YgY2hvaWNlcyAqL1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSlcbiAgcHVibGljIG9yaWVudGF0aW9uOiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnO1xuXG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBbXG4gICAgY3NzYFxuICAgICAgW3BhcnQ9J2RyYWdzJ10ge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICAgICAgZmxleDogMTtcbiAgICAgIH1cblxuICAgICAgW3BhcnQ9J2Ryb3BzJ10ge1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLWF1dG8tZmxvdzogY29sdW1uO1xuICAgICAgICBncmlkLWF1dG8tY29sdW1uczogMWZyO1xuICAgICAgfVxuXG4gICAgICA6aG9zdChbb3JpZW50YXRpb249J2hvcml6b250YWwnXSkgW3BhcnQ9J2RyYWdzJ10ge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgfVxuICAgICAgOmhvc3QoW29yaWVudGF0aW9uPSdob3Jpem9udGFsJ10pIFtwYXJ0PSdkcm9wcyddIHtcbiAgICAgICAgZ3JpZC1hdXRvLWZsb3c6IGNvbHVtbjtcbiAgICAgIH1cbiAgICAgIDpob3N0KFtvcmllbnRhdGlvbj0ndmVydGljYWwnXSkgW3BhcnQ9J2RyYWdzJ10ge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgfVxuICAgICAgOmhvc3QoW29yaWVudGF0aW9uPSd2ZXJ0aWNhbCddKSBbcGFydD0nZHJvcHMnXSB7XG4gICAgICAgIGdyaWQtYXV0by1mbG93OiByb3c7XG4gICAgICB9XG5cbiAgICAgIFtwYXJ0PSdkcm9wLWxpc3QnXSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgfVxuXG4gICAgICBbcGFydD0nY29udGFpbmVyJ10ge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBnYXA6IDAuNXJlbTtcbiAgICAgIH1cbiAgICAgIDpob3N0KC5xdGktY2hvaWNlcy10b3ApIFtwYXJ0PSdjb250YWluZXInXSB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICB9XG4gICAgICA6aG9zdCgucXRpLWNob2ljZXMtYm90dG9tKSBbcGFydD0nY29udGFpbmVyJ10ge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XG4gICAgICB9XG4gICAgICA6aG9zdCgucXRpLWNob2ljZXMtbGVmdCkgW3BhcnQ9J2NvbnRhaW5lciddIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgIH1cbiAgICAgIDpob3N0KC5xdGktY2hvaWNlcy1yaWdodCkgW3BhcnQ9J2NvbnRhaW5lciddIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlO1xuICAgICAgfVxuICAgIGBcbiAgXTtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgIDxzbG90IG5hbWU9XCJwcm9tcHRcIj4gPC9zbG90PlxuICAgICAgPGRpdiBwYXJ0PVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxzbG90IHBhcnQ9XCJkcmFnc1wiPiA8L3Nsb3Q+XG4gICAgICAgIDxkaXYgcGFydD1cImRyb3BzXCI+XG4gICAgICAgICAgJHtBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbCgncXRpLXNpbXBsZS1jaG9pY2UnKSkubWFwKFxuICAgICAgICAgICAgKF8sIGkpID0+IGh0bWxgPGRyb3AtbGlzdCBwYXJ0PVwiZHJvcC1saXN0XCIgaWRlbnRpZmllcj1cImRyb3BsaXN0JHtpfVwiPjwvZHJvcC1saXN0PmBcbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PmA7XG4gIH1cblxuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIC8vIElORlJJTkdFTUVOVC4uXG4gICAgLy8gUEs6IGlmIGNoaWxkcmVuIGFyZSBkcm9wcGVkIGludG8gc2hhZG93ZG9tLCBzdHlsaW5nIGlzIGxvc3QsIHNvIHdlIGFkZCBhIHBhcnQgc2VsZWN0b3Igb24gYWxsIGNoaWxkcmVuXG4gICAgLy8gSSB0aGV5IGdldCBsb3N0IGludG8gc2hhZG93IGRvbSBhZnRlciBkcm9wcGVkLCB0aGV5IGNhbiBzdGlsbCBiZSBzdHlsZWQgdmlhIGxpZ2h0ZG9tIHBhcnQgc2VsZWN0b3JzXG4gICAgdGhpcy5jaGlsZHJlbk1hcCA9IEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsKCdxdGktc2ltcGxlLWNob2ljZScpKTtcbiAgICB0aGlzLmNoaWxkcmVuTWFwLmZvckVhY2goZWwgPT4gZWwuc2V0QXR0cmlidXRlKCdwYXJ0JywgJ3F0aS1zaW1wbGUtY2hvaWNlJykpO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1vcmRlci1pbnRlcmFjdGlvbic6IFF0aU9yZGVySW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50LCBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuXG5leHBvcnQgY2xhc3MgUXRpU1Bvc2l0aW9uT2JqZWN0SW50ZXJhY3Rpb24gZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IFtcbiAgICBjc3NgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgfVxuICAgICAgOjpzbG90dGVkKGltZykge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGN1cnNvcjogbW92ZTtcbiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgICAgfVxuICAgIGBcbiAgXTtcbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktcG9zaXRpb24tb2JqZWN0LWludGVyYWN0aW9uJywgUXRpU1Bvc2l0aW9uT2JqZWN0SW50ZXJhY3Rpb24pO1xuIiwgImltcG9ydCB7IExpdEVsZW1lbnQsIGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLXBvc2l0aW9uLW9iamVjdC1zdGFnZScpXG5leHBvcnQgY2xhc3MgUXRpUG9zaXRpb25PYmplY3RTdGFnZSBleHRlbmRzIExpdEVsZW1lbnQge1xuICBjaG9pY2VPcmRlcmluZzogYm9vbGVhbjtcbiAgc3RhcnRYOiBhbnk7XG4gIHN0YXJ0WTogYW55O1xuICBkcmFnRWxlbWVudDogYW55O1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdD48L3Nsb3Q+YDtcbiAgfVxuXG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBbXG4gICAgY3NzYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIH1cbiAgICBgXG4gIF07XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnJlbW92ZU1vdmVMaXN0ZW5lciA9IHRoaXMucmVtb3ZlTW92ZUxpc3RlbmVyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5kcmFnRWxlbWVudEhhbmRsZXIgPSB0aGlzLmRyYWdFbGVtZW50SGFuZGxlci5iaW5kKHRoaXMpO1xuICB9XG5cbiAgLy8gRGVmaW5lIGEgZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBtb3VzZW1vdmUgZXZlbnQgb24gdGhlIGRyYWdnYWJsZSBlbGVtZW50XG4gIGRyYWdFbGVtZW50SGFuZGxlcihldmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIHRoZSBtb3VzZSBoYXMgbW92ZWQgc2luY2UgdGhlIGxhc3QgZXZlbnRcbiAgICBjb25zdCBkZWx0YVggPSBldmVudC5jbGllbnRYIC0gdGhpcy5zdGFydFg7XG4gICAgY29uc3QgZGVsdGFZID0gZXZlbnQuY2xpZW50WSAtIHRoaXMuc3RhcnRZO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgZHJhZ2dhYmxlIGVsZW1lbnRcbiAgICB0aGlzLmRyYWdFbGVtZW50LnN0eWxlLmxlZnQgPSB0aGlzLmRyYWdFbGVtZW50Lm9mZnNldExlZnQgKyBkZWx0YVggKyAncHgnO1xuICAgIHRoaXMuZHJhZ0VsZW1lbnQuc3R5bGUudG9wID0gdGhpcy5kcmFnRWxlbWVudC5vZmZzZXRUb3AgKyBkZWx0YVkgKyAncHgnO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgbW91c2VcbiAgICB0aGlzLnN0YXJ0WCA9IGV2ZW50LmNsaWVudFg7XG4gICAgdGhpcy5zdGFydFkgPSBldmVudC5jbGllbnRZO1xuICB9XG5cbiAgb3ZlcnJpZGUgZmlyc3RVcGRhdGVkKGEpOiB2b2lkIHtcbiAgICBzdXBlci5maXJzdFVwZGF0ZWQoYSk7XG5cbiAgICAvLyBHZXQgdGhlIGRyYWdnYWJsZSBhbmQgZHJvcCB6b25lIGVsZW1lbnRzXG4gICAgdGhpcy5kcmFnRWxlbWVudCA9IHRoaXMucXVlcnlTZWxlY3RvcigncXRpLXBvc2l0aW9uLW9iamVjdC1pbnRlcmFjdGlvbj5pbWcnKTtcbiAgICAvLyBjb25zdCBjYW52YXNFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhbnZhcycpO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSB2YXJpYWJsZXMgZm9yIHRoZSBzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgZHJhZ2dhYmxlIGVsZW1lbnRcbiAgICB0aGlzLnN0YXJ0WCA9IDA7XG4gICAgdGhpcy5zdGFydFkgPSAwO1xuXG4gICAgLy8gQWRkIGEgbW91c2Vkb3duIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBkcmFnZ2FibGUgZWxlbWVudFxuICAgIHRoaXMuZHJhZ0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAvLyBTYXZlIHRoZSBzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgbW91c2VcbiAgICAgIHRoaXMuc3RhcnRYID0gZXZlbnQuY2xpZW50WDtcbiAgICAgIHRoaXMuc3RhcnRZID0gZXZlbnQuY2xpZW50WTtcblxuICAgICAgLy8gQWRkIGEgbW91c2Vtb3ZlIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBkb2N1bWVudFxuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5kcmFnRWxlbWVudEhhbmRsZXIsIHRydWUpO1xuICAgIH0pO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLnJlbW92ZU1vdmVMaXN0ZW5lcik7XG4gIH1cblxuICByZW1vdmVNb3ZlTGlzdGVuZXIoZXZlbnQpIHtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLmRyYWdFbGVtZW50SGFuZGxlciwgdHJ1ZSk7XG4gIH1cblxuICBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuZHJhZ0VsZW1lbnRIYW5kbGVyKTtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5yZW1vdmVNb3ZlTGlzdGVuZXIpO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1wb3NpdGlvbi1vYmplY3Qtc3RhZ2UnOiBRdGlQb3NpdGlvbk9iamVjdFN0YWdlO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHJlcGVhdCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3JlcGVhdC5qcyc7XG5pbXBvcnQgeyBzdHlsZU1hcCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3N0eWxlLW1hcC5qcyc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvbiB9IGZyb20gJy4uL2ludGVybmFsL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1zZWxlY3QtcG9pbnQtaW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aVNlbGVjdFBvaW50SW50ZXJhY3Rpb24gZXh0ZW5kcyBJbnRlcmFjdGlvbiB7XG4gIEBwcm9wZXJ0eSh7XG4gICAgdHlwZTogTnVtYmVyLFxuICAgIGF0dHJpYnV0ZTogJ21heC1jaG9pY2VzJ1xuICB9KVxuICBwdWJsaWMgbWF4Q2hvaWNlczogbnVtYmVyID0gMDtcblxuICBAcHJvcGVydHkoe1xuICAgIHR5cGU6IE51bWJlcixcbiAgICBhdHRyaWJ1dGU6ICdtaW4tY2hvaWNlcydcbiAgfSlcbiAgcHVibGljIG1pbkNob2ljZXM6IG51bWJlciA9IDA7XG5cbiAgQHN0YXRlKClcbiAgcHJpdmF0ZSBfcG9pbnRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGAgPHNsb3QgbmFtZT1cInByb21wdFwiPjwvc2xvdD5cbiAgICAgIDxwb2ludC1jb250YWluZXI+XG4gICAgICAgICR7cmVwZWF0KFxuICAgICAgICAgIHRoaXMuX3BvaW50cyxcbiAgICAgICAgICBwb2ludCA9PiBwb2ludCxcbiAgICAgICAgICAocG9pbnQsIGluZGV4KSA9PiBodG1sYFxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBwYXJ0PVwicG9pbnRcIlxuICAgICAgICAgICAgICBzdHlsZT0ke3N0eWxlTWFwKHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoLTUwJSwgLTUwJSknLFxuICAgICAgICAgICAgICAgIGxlZnQ6IGAke3BvaW50LnNwbGl0KCcgJylbMF19cHhgLFxuICAgICAgICAgICAgICAgIHRvcDogYCR7cG9pbnQuc3BsaXQoJyAnKVsxXX1weGBcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJSZW1vdmUgcG9pbnQgYXQgJHtwb2ludH1cIlxuICAgICAgICAgICAgICBAY2xpY2s9JHsoZTogRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3BvaW50cyA9IHRoaXMuX3BvaW50cy5maWx0ZXIoKF8sIGkpID0+IGkgIT09IGluZGV4KTtcbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVSZXNwb25zZSh0aGlzLl9wb2ludHMpO1xuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgIGBcbiAgICAgICAgKX1cbiAgICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgPC9wb2ludC1jb250YWluZXI+YDtcbiAgfVxuXG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBbXG4gICAgY3NzYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIH1cbiAgICAgIHBvaW50LWNvbnRhaW5lciB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB9XG4gICAgYFxuICBdO1xuXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuX3BvaW50cyA9IFtdO1xuICB9XG5cbiAgdmFsaWRhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3BvaW50cy5sZW5ndGggPj0gdGhpcy5taW5DaG9pY2VzICYmIHRoaXMuX3BvaW50cy5sZW5ndGggPD0gdGhpcy5tYXhDaG9pY2VzO1xuICB9XG5cbiAgc2V0IHJlc3BvbnNlKHZhbDogc3RyaW5nIHwgc3RyaW5nW10pIHtcbiAgICB0aGlzLl9wb2ludHMgPSBBcnJheS5pc0FycmF5KHZhbCkgPyB2YWwgOiBbdmFsXTtcbiAgfVxuXG4gIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cbiAgICBjb25zdCBpbWcgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpO1xuXG4gICAgLy8gQXR0YWNoIGEgY2xpY2sgZXZlbnQgbGlzdGVuZXIgdG8gdGhlIGltYWdlIGVsZW1lbnRcbiAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBldmVudCA9PiB7XG4gICAgICBjb25zdCB4ID0gZXZlbnQub2Zmc2V0WDtcbiAgICAgIGNvbnN0IHkgPSBldmVudC5vZmZzZXRZO1xuXG4gICAgICB0aGlzLl9wb2ludHMgPSBbLi4udGhpcy5fcG9pbnRzLCB4ICsgJyAnICsgeV07XG4gICAgICB0aGlzLnNhdmVSZXNwb25zZSh0aGlzLl9wb2ludHMpO1xuICAgIH0pO1xuICB9XG4gIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXNlbGVjdC1wb2ludC1pbnRlcmFjdGlvbic6IFF0aVNlbGVjdFBvaW50SW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjc3MsIGh0bWwsIG5vdGhpbmcgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHksIHF1ZXJ5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyB3YXRjaCB9IGZyb20gJy4uLy4uLy4uL2RlY29yYXRvcnMvd2F0Y2gnO1xuaW1wb3J0IHsgSW50ZXJhY3Rpb24gfSBmcm9tICcuLi9pbnRlcm5hbC9pbnRlcmFjdGlvbi9pbnRlcmFjdGlvbic7XG5cbi8qKlxuICogQHN1bW1hcnkgVGhlIFNsaWRlckludGVyYWN0aW9uLlR5cGUgKHF0aS1zbGlkZXItaW50ZXJhY3Rpb24pIHByZXNlbnRzIHRoZSBjYW5kaWRhdGUgd2l0aCBhIGNvbnRyb2wgZm9yIHNlbGVjdGluZyBhIG51bWVyaWNhbCB2YWx1ZSBiZXR3ZWVuIGEgbG93ZXIgYW5kIHVwcGVyIGJvdW5kLlxuICogQGRvY3VtZW50YXRpb24gaHR0cHM6Ly93d3cuaW1zZ2xvYmFsLm9yZy9zcGVjL3F0aS92M3AwL2ltcGwjaC5zNjF4Y3JqNHFjeWpcbiAqIEBzdGF0dXMgc3RhYmxlXG4gKiBAc2luY2UgNi4wXG4gKlxuICogQGV2ZW50IHF0aS1yZWdpc3Rlci1pbnRlcmFjdGlvbiAtIGVtaXR0ZWQgd2hlbiB0aGUgaW50ZXJhY3Rpb24gd2FudHMgdG8gcmVnaXN0ZXIgaXRzZWxmXG4gKiBAZXZlbnQgcXRpLWludGVyYWN0aW9uLXJlc3BvbnNlIC0gZW1pdHRlZCB3aGVuIHRoZSBpbnRlcmFjdGlvbiBjaGFuZ2VzXG4gKlxuICogQGNzc3Byb3AgLS1zaG93LXZhbHVlIC0gc2hvd3MgdGhlIGN1cnJlbnQgdmFsdWUgd2hpbGUgc2xpZGluZ1xuICogQGNzc3Byb3AgLS1zaG93LXRpY2tzIC0gc2hvd3MgdGhlIHRpY2tzIGFjY29yZGluZyB0byBzdGVwc1xuICogQGNzc3Byb3AgLS1zaG93LWJvdW5kcyAtIHNob3dzIHZhbHVlIGZvciBsb3dlciBhbmQgdXBwZXIgYm91bmRhcnlcbiAqXG4gKiBAY3NzcGFydCBzbGlkZXIgLS0gc2xpZGVyIGlubHVkaW5nLCBib3VuZHMgYW5kIHRpY2tzIGFuZCB2YWx1ZSwgdXNlIGl0IGZvciBwYWRkaW5ncyBhbmQgbWFyZ2luc1xuICogQGNzc3BhcnQgYm91bmRzIC0tIGRpdiBmb3IgYm91bmRzLCBjb250YWluaW5nIHR3byBkaXZzIGZvciB3aXRoIG1pbiwgYW5kIG1heCBib3VuZHMgdmFsdWVcbiAqIEBjc3NwYXJ0IHRpY2tzIC0tIGRpdiBmb3IgdGlja3MsIHVzZSBsaW5lYWlyIGdyYWRpZW50IGFuZCBleHBvc2VkIGNzcyB2YXJpYWJsZXMgZm9yIHN0eWxpbmdcbiAqIEBjc3NwYXJ0IHJhaWwgLS0gZGl2IGZvciByYWlsLCBzdHlsZSBhY2NvcmRpbmcgdG8gbmVlZHNcbiAqIEBjc3NwYXJ0IGtub2IgLS0gZGl2LCBzaG91bGQgYmUgcmVsYXRpdmUgb3IgYWJzb2x1dGVcbiAqIEBjc3NwYXJ0IHZhbHVlIC0tIGRpdiwgY29udGFpbmluZyB2YWx1ZVxuICpcbiAqIEBzbG90IC0gVGhlIGRlZmF1bHQgc2xvdCB3aGVyZSA8cXRpLXNpbXBsZS1jaG9pY2U+IG11c3QgYmUgcGxhY2VkLlxuICogQHNsb3QgcHJvbXB0IC0gc2xvdCB3aGVyZSB0aGUgcHJvbXB0IGlzIHBsYWNlZC5cbiAqL1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLXNsaWRlci1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpU2xpZGVySW50ZXJhY3Rpb24gZXh0ZW5kcyBJbnRlcmFjdGlvbiB7XG4gIGNzTGl2ZTogQ1NTU3R5bGVEZWNsYXJhdGlvbjtcblxuICBAcXVlcnkoJyNrbm9iJylcbiAgcHJpdmF0ZSBfa25vYjogSFRNTEVsZW1lbnQ7XG5cbiAgQHF1ZXJ5KCcjcmFpbCcpXG4gIHByaXZhdGUgX3JhaWw6IEhUTUxFbGVtZW50O1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IE51bWJlciB9KSB2YWx1ZTogbnVtYmVyO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogJ3N0ZXAtbGFiZWwnIH0pIHN0ZXBMYWJlbCA9IGZhbHNlO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4gfSkgcmV2ZXJzZSA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX21pbjogbnVtYmVyO1xuICBAcHJvcGVydHkoeyB0eXBlOiBOdW1iZXIsIGF0dHJpYnV0ZTogJ2xvd2VyLWJvdW5kJyB9KSBzZXQgbWluKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9taW4gPSB2YWx1ZTtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1taW4nLCBgJHt0aGlzLl9taW59YCk7XG4gIH1cbiAgZ2V0IG1pbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9taW47XG4gIH1cblxuICBwcml2YXRlIF9tYXg6IG51bWJlcjtcbiAgQHByb3BlcnR5KHsgdHlwZTogTnVtYmVyLCBhdHRyaWJ1dGU6ICd1cHBlci1ib3VuZCcgfSkgc2V0IG1heCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbWF4ID0gdmFsdWU7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1tYXgnLCBgJHt0aGlzLl9tYXh9YCk7XG4gIH1cbiAgZ2V0IG1heCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9tYXg7XG4gIH1cblxuICBwcml2YXRlIF9zdGVwOiBudW1iZXI7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IE51bWJlciwgYXR0cmlidXRlOiAnc3RlcCcgfSkgc2V0IHN0ZXAodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX3N0ZXAgPSB2YWx1ZTtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KCctLXN0ZXAnLCBgJHt0aGlzLl9zdGVwfWApO1xuICB9XG4gIGdldCBzdGVwKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3N0ZXA7XG4gIH1cblxuICBAd2F0Y2goJ2Rpc2FibGVkJywgeyB3YWl0VW50aWxGaXJzdFVwZGF0ZTogdHJ1ZSB9KVxuICBfaGFuZGxlRGlzYWJsZWRDaGFuZ2UgPSAob2xkLCBkaXNhYmxlZCkgPT4ge307XG5cbiAgQHdhdGNoKCdyZWFkb25seScsIHsgd2FpdFVudGlsRmlyc3RVcGRhdGU6IHRydWUgfSlcbiAgX2hhbmRsZVJlYWRvbmx5Q2hhbmdlID0gKG9sZCwgcmVhZG9ubHkpID0+IHt9O1xuXG4gIHJlc2V0KCkge1xuICAgIC8vIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuICB2YWxpZGF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIHN0YXRpYyBzaGFkb3dSb290T3B0aW9uczogU2hhZG93Um9vdEluaXQgPSB7IC4uLkxpdEVsZW1lbnQuc2hhZG93Um9vdE9wdGlvbnMsIGRlbGVnYXRlc0ZvY3VzOiB0cnVlLCBtb2RlOiAnb3BlbicgfTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIC8qIHRoZSBjb21wdXRlZCBzdHlsZSBpcyBhIGxpdmUgcHJvcGVydHksIHdlIHVzZSB0aGlzIHRvIGdldCBjc3MgdmFyaWFibGVzXG4gICAgc2VlIHJlbmRlciB0ZW1wbGF0ZSAqL1xuICAgIHRoaXMuY3NMaXZlID0gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKTtcbiAgfVxuXG4gIHNldCByZXNwb25zZShteVJlc3BvbnNlOiBzdHJpbmcgfCBzdHJpbmdbXSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG15UmVzcG9uc2UpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdRdGlTbGlkZXJJbnRlcmFjdGlvbjogcmVzcG9uc2UgaXMgYW4gYXJyYXksIGJ1dCBzaG91bGQgYmUgYSBzaW5nbGUgdmFsdWUnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdmFsdWUgPSBwYXJzZUludChteVJlc3BvbnNlKTtcbiAgICBpZiAoTnVtYmVyLmlzTmFOKHZhbHVlKSkge1xuICAgICAgY29uc29sZS5lcnJvcignUXRpU2xpZGVySW50ZXJhY3Rpb246IHJlc3BvbnNlIGlzIG5vdCBhIG51bWJlcicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gW2Nzc2BgXTtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgLy8gY29udmVydCB0aGUgdmFsdWUsIHdoaWNoIGlzIHRoZSByZWFsIHNsaWRlciB2YWx1ZSB0byBhIHBlcmNlbnRhZ2UgZm9yIHRoZSBkb20uXG4gICAgdGhpcy52YWx1ZSA8IHRoaXMubWluICYmICh0aGlzLnZhbHVlID0gdGhpcy5taW4pO1xuICAgIHRoaXMudmFsdWUgPiB0aGlzLm1heCAmJiAodGhpcy52YWx1ZSA9IHRoaXMubWF4KTtcbiAgICBjb25zdCB2YWx1ZVBlcmNlbnRhZ2UgPSAoKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyAodGhpcy5tYXggLSB0aGlzLm1pbikpICogMTAwO1xuICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkoJy0tdmFsdWUtcGVyY2VudGFnZScsIGAke3ZhbHVlUGVyY2VudGFnZX0lYCk7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ2FyaWEtdmFsdWVub3cnLCB0aGlzLnZhbHVlLnRvU3RyaW5nKCkpO1xuXG4gICAgcmV0dXJuIGh0bWxgPHNsb3QgbmFtZT1cInByb21wdFwiPjwvc2xvdD5cbiAgICAgIDxkaXYgaWQ9XCJzbGlkZXJcIiBwYXJ0PVwic2xpZGVyXCI+XG4gICAgICAgICR7dGhpcy5jc0xpdmUuZ2V0UHJvcGVydHlWYWx1ZSgnLS1zaG93LWJvdW5kcycpID09ICd0cnVlJ1xuICAgICAgICAgID8gaHRtbGA8ZGl2IGlkPVwiYm91bmRzXCIgcGFydD1cImJvdW5kc1wiPlxuICAgICAgICAgICAgICA8ZGl2PiR7dGhpcy5fbWlufTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2PiR7dGhpcy5fbWF4fTwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+YFxuICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgJHt0aGlzLmNzTGl2ZS5nZXRQcm9wZXJ0eVZhbHVlKCctLXNob3ctdGlja3MnKSA9PSAndHJ1ZScgPyBodG1sYDxkaXYgaWQ9XCJ0aWNrc1wiIHBhcnQ9XCJ0aWNrc1wiPjwvZGl2PmAgOiBub3RoaW5nfVxuICAgICAgICA8ZGl2IGlkPVwicmFpbFwiIHBhcnQ9XCJyYWlsXCIgQG1vdXNlZG93bj0ke3RoaXMuX29uTW91c2VEb3dufSBAdG91Y2hzdGFydD0ke3RoaXMuX29uVG91Y2hNb3ZlfT5cbiAgICAgICAgICA8ZGl2IGlkPVwia25vYlwiIHBhcnQ9XCJrbm9iXCI+XG4gICAgICAgICAgICAke3RoaXMuY3NMaXZlLmdldFByb3BlcnR5VmFsdWUoJy0tc2hvdy12YWx1ZScpID09ICd0cnVlJ1xuICAgICAgICAgICAgICA/IGh0bWxgPGRpdiBpZD1cInZhbHVlXCIgcGFydD1cInZhbHVlXCI+JHt0aGlzLnZhbHVlfTwvZGl2PmBcbiAgICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PmA7XG4gIH1cblxuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuc3RlcCA9IDE7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgncm9sZScsICdzbGlkZXInKTtcbiAgfVxuXG4gIHByaXZhdGUgX29uVG91Y2hNb3ZlKGV2ZW50KSB7XG4gICAgY29uc3QgaGFuZGxlVG91Y2hNb3ZlID0gZXZlbnQgPT4ge1xuICAgICAgY29uc3QgeyB4IH0gPSB0aGlzLmdldFBvc2l0aW9uRnJvbUV2ZW50KGV2ZW50KTtcbiAgICAgIGNvbnN0IGRpZmZYID0geCAtIHRoaXMuX3JhaWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgICAgdGhpcy5jYWxjdWxhdGVWYWx1ZShkaWZmWCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaGFuZGxlVG91Y2hFbmQgPSAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBoYW5kbGVUb3VjaE1vdmUpO1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBoYW5kbGVUb3VjaEVuZCk7XG5cbiAgICAgIHRoaXMuc2F2ZVJlc3BvbnNlKHRoaXMudmFsdWUudG9TdHJpbmcoKSk7XG4gICAgfTtcblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIGhhbmRsZVRvdWNoTW92ZSk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBoYW5kbGVUb3VjaEVuZCk7XG5cbiAgICBjb25zdCB7IHggfSA9IHRoaXMuZ2V0UG9zaXRpb25Gcm9tRXZlbnQoZXZlbnQpO1xuICAgIGNvbnN0IGRpZmZYID0geCAtIHRoaXMuX3JhaWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIHRoaXMuY2FsY3VsYXRlVmFsdWUoZGlmZlgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25Nb3VzZURvd24oZXZlbnQpIHtcbiAgICBjb25zdCBoYW5kbGVNb3VzZU1vdmUgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIC8vIGlmIHRoZSBxdGktc2xpZGVyLWludGVyYWN0aW9uIGhhcyBhbiBhYnNvbHV0ZSBsZWZ0IHBvc2l0aW9uIGFuZCBib2R5IGlzIHNjcm9sbGVkIGEgYml0LCB0YWtlIGFjY291bnQgZm9yIHRoYXRcbiAgICAgIGNvbnN0IGRpZmZYID0gZXZlbnQucGFnZVggLSB0aGlzLl9yYWlsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdDtcblxuICAgICAgdGhpcy5jYWxjdWxhdGVWYWx1ZShkaWZmWCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZU1vdXNlVXAgPSAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBoYW5kbGVNb3VzZU1vdmUpO1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIGhhbmRsZU1vdXNlVXApO1xuXG4gICAgICB0aGlzLnNhdmVSZXNwb25zZSh0aGlzLnZhbHVlLnRvU3RyaW5nKCkpO1xuICAgIH07XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBoYW5kbGVNb3VzZU1vdmUpO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBoYW5kbGVNb3VzZVVwKTtcblxuICAgIC8vIGlmIHRoZSBxdGktc2xpZGVyLWludGVyYWN0aW9uIGhhcyBhbiBhYnNvbHV0ZSBsZWZ0IHBvc2l0aW9uIGFuZCBib2R5IGlzIHNjcm9sbGVkIGEgYml0LCB0YWtlIGFjY291bnQgZm9yIHRoYXRcbiAgICBjb25zdCBkaWZmWCA9IGV2ZW50LnBhZ2VYIC0gdGhpcy5fcmFpbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQ7XG5cbiAgICB0aGlzLmNhbGN1bGF0ZVZhbHVlKGRpZmZYKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgLyoqIGNhbGN1bGF0ZVZhbHVlIGdldHMgeCBwb3NpdGlvbiBhbmQgY29tcGFyZXMgdGhpcyB3aXRoIHRoZSB0b3RhbCB3aWR0aCBpbiBwaXhlbHMgKi9cbiAgcHJpdmF0ZSBjYWxjdWxhdGVWYWx1ZShkaWZmWDogbnVtYmVyKSB7XG4gICAgY29uc3QgdmFsdWVOb3cgPSB0aGlzLm1pbiArICgodGhpcy5tYXggLSB0aGlzLm1pbikgKiBkaWZmWCkgLyB0aGlzLl9yYWlsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgIGNvbnN0IHJvdW5kZWRTdGVwVmFsdWUgPSB0aGlzLm1pbiArIE1hdGgucm91bmQoKHZhbHVlTm93IC0gdGhpcy5taW4pIC8gdGhpcy5fc3RlcCkgKiB0aGlzLl9zdGVwO1xuICAgIHRoaXMudmFsdWUgPSByb3VuZGVkU3RlcFZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQb3NpdGlvbkZyb21FdmVudChlOiBhbnkpOiB7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbiAgfSB7XG4gICAgbGV0IF90b3VjaE1vdmU7XG4gICAgaWYgKGUudHlwZSA9PSAndG91Y2hzdGFydCcgfHwgZS50eXBlID09ICd0b3VjaG1vdmUnIHx8IGUudHlwZSA9PSAndG91Y2hlbmQnIHx8IGUudHlwZSA9PSAndG91Y2hjYW5jZWwnKSB7XG4gICAgICBjb25zdCBldnQgPSB0eXBlb2YgZS5vcmlnaW5hbEV2ZW50ID09PSAndW5kZWZpbmVkJyA/IGUgOiBlLm9yaWdpbmFsRXZlbnQ7XG4gICAgICBjb25zdCB0b3VjaCA9IGV2dC50b3VjaGVzWzBdIHx8IGV2dC5jaGFuZ2VkVG91Y2hlc1swXTtcbiAgICAgIF90b3VjaE1vdmUgPSB7XG4gICAgICAgIHg6IHRvdWNoLnBhZ2VYLFxuICAgICAgICB5OiB0b3VjaC5wYWdlWVxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgZS50eXBlID09ICdtb3VzZWRvd24nIHx8XG4gICAgICBlLnR5cGUgPT0gJ21vdXNldXAnIHx8XG4gICAgICBlLnR5cGUgPT0gJ21vdXNlbW92ZScgfHxcbiAgICAgIGUudHlwZSA9PSAnbW91c2VvdmVyJyB8fFxuICAgICAgZS50eXBlID09ICdtb3VzZW91dCcgfHxcbiAgICAgIGUudHlwZSA9PSAnbW91c2VlbnRlcicgfHxcbiAgICAgIGUudHlwZSA9PSAnbW91c2VsZWF2ZSdcbiAgICApIHtcbiAgICAgIF90b3VjaE1vdmUgPSB7XG4gICAgICAgIHg6IGUuY2xpZW50WCxcbiAgICAgICAgeTogZS5jbGllbnRZXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gX3RvdWNoTW92ZTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktc2xpZGVyLWludGVyYWN0aW9uJzogUXRpU2xpZGVySW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICJpbXBvcnQge1xuICBpdGVtQ29udGV4dCxcbiAgdHlwZSBDYWxjdWxhdGUsXG4gIHR5cGUgSXRlbUNvbnRleHQsXG4gIHR5cGUgUmVzcG9uc2VWYXJpYWJsZVxufSBmcm9tICdAY2l0b2xhYi9xdGktY29tcG9uZW50cy9xdGktY29tcG9uZW50cyc7XG5pbXBvcnQgeyBjb25zdW1lIH0gZnJvbSAnQGxpdC9jb250ZXh0JztcbmltcG9ydCB7IExpdEVsZW1lbnQsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbi8qKlxuICogaHR0cHM6Ly93d3cuaW1zZ2xvYmFsLm9yZy9zcGVjL3F0aS92M3AwL2ltcGwjaC5maTI5cThkdWJqZ3dcbiAqIDxxdGktY3VzdG9tLW9wZXJhdG9yIGNsYXNzPVwianMub3JnXCI+XG4gICAgICAgIDxxdGktYmFzZS12YWx1ZSBiYXNlLXR5cGU9XCJzdHJpbmdcIj48IVtDREFUQVtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjb250ZXh0LnZhcmlhYmxlcyk7XG4gICAgICAgICAgcmV0dXJuICdCJ1xuICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3F0aS1lbmQtYXR0ZW1wdC1pbnRlcmFjdGlvbicpLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICBdXT48L3F0aS1iYXNlLXZhbHVlPlxuICAgICAgPC9xdGktY3VzdG9tLW9wZXJhdG9yPlxuICAgIDwvcXRpLXNldC1vdXRjb21lLXZhbHVlPlxuICovXG5AY3VzdG9tRWxlbWVudCgncXRpLWN1c3RvbS1vcGVyYXRvcicpXG5leHBvcnQgY2xhc3MgUXRpQ3VzdG9tT3BlcmF0b3IgZXh0ZW5kcyBMaXRFbGVtZW50IGltcGxlbWVudHMgQ2FsY3VsYXRlIHtcbiAgcHJpdmF0ZSBvcGVyYXRvckZ1bmN0aW9uOiBGdW5jdGlvbjtcblxuICBAY29uc3VtZSh7IGNvbnRleHQ6IGl0ZW1Db250ZXh0LCBzdWJzY3JpYmU6IHRydWUgfSlcbiAgQHN0YXRlKClcbiAgcHJpdmF0ZSBfY29udGV4dD86IEl0ZW1Db250ZXh0O1xuXG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdCBAc2xvdGNoYW5nZT0ke3RoaXMuaGFuZGxlU2xvdENoYW5nZX0+PC9zbG90PmA7XG4gIH1cblxuICBoYW5kbGVTbG90Q2hhbmdlKGV2ZW50OiBFdmVudCkge1xuICAgIC8vIGV4cGVjdGluZyA8WyFDREFUQVsgLi4uIF1dPiBpcyBjb252ZXJ0ZWQgaW50byA8IS0tIC4uLiAtLT4gd2l0aCBxdGktdHJhbnNmb3JtOiBjRGF0YVRvQ29tbWVudFxuICAgIGNvbnN0IGNvbW1lbnROb2RlID0gQXJyYXkuZnJvbSh0aGlzLmZpcnN0RWxlbWVudENoaWxkPy5jaGlsZE5vZGVzID8/IFtdKS5maW5kKFxuICAgICAgbm9kZSA9PiBub2RlLm5vZGVUeXBlID09PSBOb2RlLkNPTU1FTlRfTk9ERVxuICAgICk7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMub3BlcmF0b3JGdW5jdGlvbiA9IG5ldyBGdW5jdGlvbignY29udGV4dCcsICdmbicsICdpdGVtJywgY29tbWVudE5vZGUudGV4dENvbnRlbnQgPz8gJycpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2N1c3RvbS1vcGVyYXRvciBjb250YWlucyBpbnZhbGlkIGphdmFzY3JpcHQgY29kZScsIGUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjYWxjdWxhdGUoKSB7XG4gICAgY29uc3QgZm4gPSB7XG4gICAgICB2YXJpYWJsZTogKHJlc3BvbnNlSWRlbnRpZmllcjogc3RyaW5nKSA9PlxuICAgICAgICB0aGlzLl9jb250ZXh0Py52YXJpYWJsZXMuZmluZCh2ID0+IHYuaWRlbnRpZmllciA9PT0gcmVzcG9uc2VJZGVudGlmaWVyKT8udmFsdWUgPz8gJycsXG4gICAgICBjb3JyZWN0OiAocmVzcG9uc2VJZGVudGlmaWVyOiBzdHJpbmcpID0+XG4gICAgICAgICh0aGlzLl9jb250ZXh0Py52YXJpYWJsZXMuZmluZCh2ID0+IHYuaWRlbnRpZmllciA9PT0gcmVzcG9uc2VJZGVudGlmaWVyKSBhcyBSZXNwb25zZVZhcmlhYmxlKVxuICAgICAgICAgID8uY29ycmVjdFJlc3BvbnNlID8/ICcnXG4gICAgfTtcbiAgICBjb25zdCBpdGVtID0ge1xuICAgICAgZ2V0VmFyaWFibGU6ICh2YXJpYWJsZUlkZW50aWZpZXI6IHN0cmluZykgPT5cbiAgICAgICAgdGhpcy5fY29udGV4dD8udmFyaWFibGVzLmZpbmQodiA9PiB2LmlkZW50aWZpZXIgPT09IHZhcmlhYmxlSWRlbnRpZmllciksXG4gICAgICB1cGRhdGVPdXRjb21lVmFyaWFibGU6IChvdXRjb21lSWRlbnRpZmllcjogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pID0+IHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudDx7IG91dGNvbWVJZGVudGlmaWVyOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSB9PigncXRpLXNldC1vdXRjb21lLXZhbHVlJywge1xuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgIG91dGNvbWVJZGVudGlmaWVyLFxuICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5vcGVyYXRvckZ1bmN0aW9uKHRoaXMuX2NvbnRleHQsIGZuLCBpdGVtKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktY3VzdG9tLW9wZXJhdG9yJzogUXRpQ3VzdG9tT3BlcmF0b3I7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50LCBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1hc3NvY2lhYmxlLWhvdHNwb3QnKVxuZXhwb3J0IGNsYXNzIFF0aUFzc29jaWFibGVIb3RzcG90IGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3F0aS1yZWdpc3Rlci1ob3RzcG90Jywge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWVcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gY3NzYFxuICAgIDpob3N0IHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB9XG4gIGA7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYCA8c2xvdCBuYW1lPVwicXRpLWdhcC1pbWdcIj48L3Nsb3Q+IGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWFzc29jaWFibGUtaG90c3BvdCc6IFF0aUFzc29jaWFibGVIb3RzcG90O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1nYXAnKVxuZXhwb3J0IGNsYXNzIFF0aUdhcCBleHRlbmRzIExpdEVsZW1lbnQge1xuICBAcHJvcGVydHkoeyB0eXBlOiBOdW1iZXIsIHJlZmxlY3Q6IHRydWUgfSkgdGFiaW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZCA9IDA7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYCA8c2xvdCBuYW1lPVwicXRpLWdhcC10ZXh0XCI+PC9zbG90PmA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWdhcCc6IFF0aUdhcDtcbiAgfVxufVxuIiwgImltcG9ydCB7IExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktZ2FwLWltZycpXG5leHBvcnQgY2xhc3MgUXRpR2FwSW1nIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IE51bWJlciwgcmVmbGVjdDogdHJ1ZSB9KSB0YWJpbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkID0gMDtcblxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgnc2xvdCcsICdxdGktZ2FwLWltZycpO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1nYXAtaW1nJzogUXRpR2FwSW1nO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1nYXAtdGV4dCcpXG5leHBvcnQgY2xhc3MgUXRpR2FwVGV4dCBleHRlbmRzIExpdEVsZW1lbnQge1xuICBAcHJvcGVydHkoeyB0eXBlOiBOdW1iZXIsIHJlZmxlY3Q6IHRydWUgfSkgdGFiaW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZCA9IDA7XG5cbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgnc2xvdCcsICdxdGktZ2FwLXRleHQnKTtcbiAgfVxuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdD48L3Nsb3Q+YDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktZ2FwLXRleHQnOiBRdGlHYXBUZXh0O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgUXRpQ2hvaWNlIH0gZnJvbSAnLi9pbnRlcm5hbC9jaG9pY2UvcXRpLWNob2ljZSc7XG5cbi8vIHR5cGUgc2hhcGUgPSB7IHNoYXBlOiAncmVjdCcgfCAnY2lyY2xlJyB8ICdwb2x5JzsgY29vcmRzOiBudW1iZXJbXSB9O1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWhvdHNwb3QtY2hvaWNlJylcbmV4cG9ydCBjbGFzcyBRdGlIb3RzcG90Q2hvaWNlIGV4dGVuZHMgUXRpQ2hvaWNlIHtcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnYXJpYS1vcmRlcnZhbHVlJywgdHlwZTogTnVtYmVyLCByZWZsZWN0OiB0cnVlIH0pIG9yZGVyOiBudW1iZXI7XG5cbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IGNzc2BcbiAgICA6aG9zdCB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgfVxuICBgO1xufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktaG90c3BvdC1jaG9pY2UnOiBRdGlIb3RzcG90Q2hvaWNlO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IFF0aUNob2ljZSB9IGZyb20gJy4vaW50ZXJuYWwvY2hvaWNlL3F0aS1jaG9pY2UnO1xuaW1wb3J0IHsgaHRtbCB9IGZyb20gJ2xpdCc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktaG90dGV4dCcpXG5leHBvcnQgY2xhc3MgUXRpSG90dGV4dCBleHRlbmRzIFF0aUNob2ljZSB7XG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8ZGl2IHBhcnQ9XCJjaFwiPjxkaXYgcGFydD1cImNoYVwiPjwvZGl2PjwvZGl2PlxuICAgICAgPHNsb3Q+PC9zbG90PiBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1ob3R0ZXh0JzogUXRpSG90dGV4dDtcbiAgfVxufVxuIiwgImltcG9ydCB7IExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1pbmxpbmUtY2hvaWNlJylcbmV4cG9ydCBjbGFzcyBRdGlJbmxpbmVDaG9pY2UgZXh0ZW5kcyBMaXRFbGVtZW50IHt9XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1pbmxpbmUtY2hvaWNlJzogUXRpSW5saW5lQ2hvaWNlO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IENTU1Jlc3VsdEdyb3VwLCBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgUXRpQ2hvaWNlIH0gZnJvbSAnLi9pbnRlcm5hbC9jaG9pY2UvcXRpLWNob2ljZSc7XG5cbi8qKlxuICogQHN1bW1hcnkgU2hvcnQgc3VtbWFyeSBvZiB0aGUgY29tcG9uZW50J3MgaW50ZW5kZWQgdXNlLlxuICogQGRvY3VtZW50YXRpb24gaHR0cHM6Ly93d3cuaW1zZ2xvYmFsLm9yZy9zcGVjL3F0aS92M3AwL2ltcGwjaC5qOW51MW9hMXR1M2JcbiAqIEBzdGF0dXMgc3RhYmxlXG4gKiBAc2luY2UgNC4wXG4gKlxuICogQGV2ZW50IHF0aS1jaG9pY2UtZWxlbWVudC1zZWxlY3RlZCAtIEVtaXR0ZWQgd2hlbiBhIGNob2ljZSBpcyBzZWxlY3RlZC5cbiAqIEBldmVudCBxdGktcmVnaXN0ZXItY2hvaWNlIC0gRW1pdHRlZCB3aGVuIGFuIGNob2ljZSBpcyBhZGRlZFxuICogQGV2ZW50IHF0aS1sb29zZS1jaG9pY2UgLSBFbWl0dGVkIHdoZW4gYSBjaG9pY2UgaXMgcmVtb3ZlZFxuICpcbiAqIEBzbG90IC0gVGhlIGRlZmF1bHQgc2xvdC5cbiAqL1xuQGN1c3RvbUVsZW1lbnQoJ3F0aS1zaW1wbGUtY2hvaWNlJylcbmV4cG9ydCBjbGFzcyBRdGlTaW1wbGVDaG9pY2UgZXh0ZW5kcyBRdGlDaG9pY2Uge1xuICBzdGF0aWMgc3R5bGVzID0gY3NzYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgfVxuICAgIHNsb3Qge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gIGA7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxkaXYgcGFydD1cImNoXCI+PGRpdiBwYXJ0PVwiY2hhXCI+PC9kaXY+PC9kaXY+XG4gICAgICA8c2xvdCBwYXJ0PVwic2xvdFwiPjwvc2xvdD4gYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktc2ltcGxlLWNob2ljZSc6IFF0aVNpbXBsZUNob2ljZTtcbiAgfVxufVxuIiwgIi8qIG9ubHkgZXhwb3J0ZWQgdG8gb3ZlcnJpZGUgb3IgZXh0ZW5kIGZvciBzcGVjaWZpYyBwdXJwb3NlcyAqL1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcm5hbC9ldmVudC10eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL2ludGVybmFsL2V2ZW50cyc7XG5leHBvcnQgKiBmcm9tICcuL2ludGVybmFsL2V4cHJlc3Npb24tcmVzdWx0JztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJuYWwvdmFyaWFibGVzJztcbi8qIG9ubHkgZXhwb3J0ZWQgdG8gb3ZlcnJpZGUgb3IgZXh0ZW5kIGZvciBzcGVjaWZpYyBwdXJwb3NlcyAqL1xuZXhwb3J0ICogZnJvbSAnLi9xdGktYXNzZXNzbWVudC1pdGVtL3F0aS1hc3Nlc3NtZW50LWl0ZW0nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktYXNzZXNzbWVudC1zdGltdWx1cy1yZWYvcXRpLWFzc2Vzc21lbnQtc3RpbXVsdXMtcmVmJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL2ludGVybmFsL2Nob2ljZS9xdGktY2hvaWNlJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWl0ZW0tYm9keS9xdGktaXRlbS1ib2R5JztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLXByb21wdC9xdGktcHJvbXB0JztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLXN0eWxlc2hlZXQvcXRpLXN0eWxlc2hlZXQnO1xuLyogc3RhcnQgcmVzcG9uc2UgYW5kIG91dGNvbWUgKi9cbmV4cG9ydCAqIGZyb20gJy4vcXRpLXZhcmlhYmxlLWRlY2xhcmF0aW9uL3F0aS1vdXRjb21lLWRlY2xhcmF0aW9uL3F0aS1vdXRjb21lLWRlY2xhcmF0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLXZhcmlhYmxlLWRlY2xhcmF0aW9uL3F0aS1yZXNwb25zZS1kZWNsYXJhdGlvbi9xdGktcmVzcG9uc2UtZGVjbGFyYXRpb24nO1xuLyogZW5kIHJlc3BvbnNlIGFuZCBvdXRjb21lICovXG5leHBvcnQgKiBmcm9tICcuL3F0aS1jb21wYW5pb24tbWF0ZXJpYWxzLWluZm8vcXRpLWNvbXBhbmlvbi1tYXRlcmlhbHMtaW5mbyc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1ydWJyaWMtYmxvY2svcXRpLWNvbnRlbnQtYm9keSc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1ydWJyaWMtYmxvY2svcXRpLXJ1YnJpYy1ibG9jayc7XG4vKiBzdGFydCBmZWVkYmFjayAqL1xuZXhwb3J0ICogZnJvbSAnLi9xdGktZmVlZGJhY2svcXRpLWZlZWRiYWNrLWJsb2NrL3F0aS1mZWVkYmFjay1ibG9jayc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1mZWVkYmFjay9xdGktZmVlZGJhY2staW5saW5lL3F0aS1mZWVkYmFjay1pbmxpbmUnO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktZmVlZGJhY2svcXRpLW1vZGFsLWZlZWRiYWNrL3F0aS1tb2RhbC1mZWVkYmFjayc7XG4vKiBlbmQgZmVlZGJhY2sgKi9cbi8qIHN0YXJ0IHRleHRlbnRyeWludGVyYWN0aW9uICovXG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktZXh0ZW5kZWQtdGV4dC1pbnRlcmFjdGlvbi9xdGktZXh0ZW5kZWQtdGV4dC1pbnRlcmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktdGV4dC1lbnRyeS1pbnRlcmFjdGlvbi9xdGktdGV4dC1lbnRyeS1pbnRlcmFjdGlvbic7XG4vKiBlbmQgdGV4dGVudHJ5aW50ZXJhY3Rpb24gKi9cbi8qIHN0YXJ0IGhvdHRleHQgKi9cbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1ob3R0ZXh0LWludGVyYWN0aW9uL3F0aS1ob3R0ZXh0LWludGVyYWN0aW9uJztcbi8qIGVuZCBob3R0ZXh0ICovXG4vKiBzdGFydCBpbmxpbmVjaG9pY2UgKi9cbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1pbmxpbmUtY2hvaWNlLWludGVyYWN0aW9uL3F0aS1pbmxpbmUtY2hvaWNlLWludGVyYWN0aW9uJztcbi8qIGVuZCBpbmxpbmVjaG9pY2UgKi9cbi8qIHN0YXJ0IGNob2ljZWludGVyYWN0aW9uICovXG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktY2hvaWNlLWludGVyYWN0aW9uL3F0aS1jaG9pY2UtaW50ZXJhY3Rpb24nO1xuLyogZW5kIGNob2ljZWludGVyYWN0aW9uICovXG5leHBvcnQgKiBmcm9tICcuL3F0aS1vdXRjb21lLXByb2Nlc3NpbmcvcXRpLW91dGNvbWUtcHJvY2Vzc2luZyc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nJztcbi8qIHN0YXJ0IGN1c3RvbSBpbnRlcmFjdGlvbnMgKi9cbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1wb3J0YWJsZS1jdXN0b20taW50ZXJhY3Rpb24vcXRpLXBvcnRhYmxlLWN1c3RvbS1pbnRlcmFjdGlvbic7XG4vKiBlbmQgY3VzdG9tIGludGVyYWN0aW9ucyAqL1xuLyogc3RhcnQgb25seSBwcmV2aWV3IGl0ZW1zICovXG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktYXNzb2NpYXRlLWludGVyYWN0aW9uL3F0aS1hc3NvY2lhdGUtaW50ZXJhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWN1c3RvbS1pbnRlcmFjdGlvbi9xdGktY3VzdG9tLWludGVyYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1lbmQtYXR0ZW1wdC1pbnRlcmFjdGlvbi9xdGktZW5kLWF0dGVtcHQtaW50ZXJhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWdhcC1tYXRjaC1pbnRlcmFjdGlvbi9xdGktZ2FwLW1hdGNoLWludGVyYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1ncmFwaGljLWFzc29jaWF0ZS1pbnRlcmFjdGlvbi9xdGktZ3JhcGhpYy1hc3NvY2lhdGUtaW50ZXJhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWdyYXBoaWMtZ2FwLW1hdGNoLWludGVyYWN0aW9uL3F0aS1ncmFwaGljLWdhcC1tYXRjaC1pbnRlcmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktZ3JhcGhpYy1vcmRlci1pbnRlcmFjdGlvbi9xdGktZ3JhcGhpYy1vcmRlci1pbnRlcmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktaG90c3BvdC1pbnRlcmFjdGlvbi9xdGktaG90c3BvdC1pbnRlcmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktbWF0Y2gtaW50ZXJhY3Rpb24vcXRpLW1hdGNoLWludGVyYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1tZWRpYS1pbnRlcmFjdGlvbi9xdGktbWVkaWEtaW50ZXJhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLW9yZGVyLWludGVyYWN0aW9uL3F0aS1vcmRlci1pbnRlcmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktcG9zaXRpb24tb2JqZWN0LWludGVyYWN0aW9uL3F0aS1wb3NpdGlvbi1vYmplY3QtaW50ZXJhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLXBvc2l0aW9uLW9iamVjdC1pbnRlcmFjdGlvbi9xdGktcG9zaXRpb24tb2JqZWN0LXN0YWdlJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1zZWxlY3QtcG9pbnQtaW50ZXJhY3Rpb24vcXRpLXNlbGVjdC1wb2ludC1pbnRlcmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktc2xpZGVyLWludGVyYWN0aW9uL3F0aS1zbGlkZXItaW50ZXJhY3Rpb24nO1xuLyogZW5kIG9ubHkgcHJldmlldyBpdGVtcyAqL1xuZXhwb3J0ICogZnJvbSAnLi9xdGktYXNzZXNzbWVudC1pdGVtL3F0aS1hc3Nlc3NtZW50LWl0ZW0uY29udGV4dCc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1jdXN0b20tb3BlcmF0b3IvcXRpLWN1c3RvbS1vcGVyYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9pbnRlcm5hbC9pbnRlcmFjdGlvbi9pbnRlcmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktYXNzb2NpYWJsZS1ob3RzcG90JztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1nYXAnO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWdhcC1pbWcnO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWdhcC10ZXh0JztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1ob3RzcG90LWNob2ljZSc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktaG90dGV4dCc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktaW5saW5lLWNob2ljZSc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1zaW1wbGUtY2hvaWNlJztcblxuY29uc29sZS5sb2coXG4gICclY0NcdTAwQkZUTyVjTGFiJWM6IHF0aS1jb21wb25lbnRzIGxvYWRlZCcsXG4gICdmb250LXdlaWdodDpib2xkOyBjb2xvcjpncmVlbicsXG4gICdmb250LWZhbWlseTogXCJQVCBTYW5zXCIsIGZvbnQtd2VpZ2h0OmJvbGQ7IGNvbG9yOmdyZWVuOyBmb250LXNpemU6IHNtYWxsZXI7dmVydGljYWwtYWxpZ246IHN1YicsXG4gICdmb250LXdlaWdodDp1bnNldCdcbik7XG5cbi8vIGNzcyBmb3IgZm9udCBwdC1zYW5zIGFuZCBzdWJzY3JpcHQgYW5kIGdyZWVuXG4iXSwKICAibWFwcGluZ3MiOiAiK0RBQUEsT0FBUyxXQUFBQSxPQUFlLGVBQ3hCLE9BQVMsY0FBQUMs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QUQ1REosR0FDOEQscUJBRDlEQSxHQUFORyxFQUFBLENBRE5FLEdBQWMsb0JBQW9CLEdBQ3RCTCxJQ1BiLE9BQVMsaUJBQUFNLE9BQXFCLG9CQUU5QixPQUFTLFFBQUFDLE9BQVksTUFHZCxJQUFNQyxHQUFOLGNBQXlCQyxDQUFVLENBQy9CLFFBQVMsQ0FDaEIsT0FBT0M7QUFBQSxxQkFFVCxDQUNGLEVBTGFGLEdBQU5HLEVBQUEsQ0FETkMsR0FBYyxhQUFhLEdBQ2ZKLElDTGIsT0FBUyxjQUFBSyxPQUFrQixNQUMzQixPQUFTLGlCQUFBQyxPQUFxQixvQkFHdkIsSUFBTUMsR0FBTixjQUE4QkMsRUFBVyxDQUFDLEVBQXBDRCxHQUFORSxFQUFBLENBRE5DLEdBQWMsbUJBQW1CLEdBQ3JCSCxJQ0piLE9BQVMsaUJBQUFJLE9BQXFCLG9CQUM5QixPQUF5QixPQUFBQyxHQUFLLFFBQUFDLE9BQVksTUFnQm5DLElBQU1DLEdBQU4sY0FBOEJDLENBQVUsQ0FXcEMsUUFBUyxDQUNoQixPQUFPQztBQUFBLGlDQUVULENBQ0YsRUFmYUYsR0FDSixPQUFTRztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFETEgsR0FBTkksRUFBQSxDQUROQyxHQUFjLG1CQUFtQixHQUNyQkwsSUN1RGIsUUFBUSxJQUNOLDBDQUNBLGdDQUNBLGdHQUNBLG1CQUNGIiwKICAibmFtZXMiOiBbInByb3ZpZGUiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAid2F0Y2giLCAicHJvcGVydHlOYW1lIiwgIm9wdGlvbnMiLCAicmVzb2x2ZWRPcHRpb25zIiwgIl9fc3ByZWFkVmFsdWVzIiwgInByb3RvIiwgImRlY29yYXRlZEZuTmFtZSIsICJ1cGRhdGUiLCAid2F0Y2hlZFByb3BlcnRpZXMiLCAiY2hhbmdlZFByb3BzIiwgInByb3BlcnR5IiwgImtleSIsICJvbGRWYWx1ZSIsICJuZXdWYWx1ZSIsICJjcmVhdGVDb250ZXh0IiwgIml0ZW1Db250ZXh0VmFyaWFibGVzIiwgIml0ZW1Db250ZXh0IiwgIlF0aUFzc2Vzc21lbnRJdGVtIiwgIkxpdEVsZW1lbnQiLCAiXyIsICJkaXNhYmxlZCIsICJjaCIsICJyZWFkb25seSIsICJpdGVtQ29udGV4dFZhcmlhYmxlcyIsICJfX3NwcmVhZFByb3BzIiwgIl9fc3ByZWFkVmFsdWVzIiwgImZlZWRiYWNrRWxlbWVudCIsICJyZXNwb25zZUlkZW50aWZpZXIiLCAiY291bnRBdHRlbXB0IiwgIm91dGNvbWVJZGVudGlmaWVyIiwgInZhbHVlIiwgInYiLCAidmFyaWFibGUiLCAibWF0Y2hpbmdWYWx1ZSIsICJpbnRlcmFjdGlvbkVsZW1lbnQiLCAiZWwiLCAiZmUiLCAibXlSZXNwb25zZXMiLCAicmVzcG9uc2UiLCAiaW50ZXJhY3Rpb24iLCAiaSIsICJodG1sIiwgInNob3ciLCAicmVzcG9uc2VzIiwgInZhcmkiLCAiY3IiLCAiY291bnROdW1BdHRlbXB0cyIsICJfYSIsICJyZXNwb25zZVByb2Nlc3NvciIsICJpZGVudGlmaWVyIiwgImV2ZW50IiwgIm91dGNvbWVWYXJpYWJsZSIsICJuYW1lIiwgImRldGFpbCIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAid2F0Y2giLCAicHJvdmlkZSIsICJpdGVtQ29udGV4dCIsICJjdXN0b21FbGVtZW50IiwgIkxpdEVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJRdGlBc3Nlc3NtZW50U3RpbXVsdXNSZWYiLCAiTGl0RWxlbWVudCIsICJldmVudCIsICJzdGltdWx1c1JlZiIsICJwYXRoIiwgInN0aW11bHVzIiwgInF0aVRyYW5zZm9ybUl0ZW0iLCAiYXBpIiwgImVsZW1lbnRzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJjdXN0b21FbGVtZW50IiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJwcm9wZXJ0eSIsICJLRVlDT0RFIiwgIlF0aUNob2ljZSIsICJMaXRFbGVtZW50IiwgIl8iLCAiZGlzYWJsZWQiLCAiZXZlbnQiLCAiaHRtbCIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAidmFsdWUiLCAid2F0Y2giLCAiY3VzdG9tRWxlbWVudCIsICJodG1sIiwgIkxpdEVsZW1lbnQiLCAiY3NzIiwgInF0aV9pdGVtX2JvZHlfc3R5bGVzX2RlZmF1bHQiLCAiUXRpSXRlbUJvZHkiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgInF0aV9pdGVtX2JvZHlfc3R5bGVzX2RlZmF1bHQiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiaHRtbCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpUHJvbXB0IiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpU3R5bGVzaGVldCIsICJMaXRFbGVtZW50IiwgIl9jaGFuZ2VkUHJvcGVydGllcyIsICJpdGVtIiwgImxpbmsiLCAic3R5bGVzIiwgImVycm9yIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgImNvbnN1bWUiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJzdGF0ZSIsICJodG1sIiwgIkxpdEVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlWYXJpYWJsZURlY2xhcmF0aW9uIiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJ2YXJpYWJsZSIsICJodG1sVmFsdWVzIiwgImRlZmF1bHRWYWx1ZXMiLCAibiIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlPdXRjb21lRGVjbGFyYXRpb24iLCAiUXRpVmFyaWFibGVEZWNsYXJhdGlvbiIsICJfYSIsICJfYiIsICJ2YWx1ZSIsICJ2IiwgImh0bWwiLCAidGFibGUiLCAiZW50cmllcyIsICJlbnRyeSIsICJzb3VyY2VWYWx1ZSIsICJ0YXJnZXRWYWx1ZSIsICJvdXRjb21lVmFyaWFibGUiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJjb25zdW1lIiwgIml0ZW1Db250ZXh0IiwgInN0YXRlIiwgImN1c3RvbUVsZW1lbnQiLCAiY29uc3VtZSIsICJjc3MiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgInN0YXRlIiwgIlF0aVJlc3BvbnNlRGVjbGFyYXRpb24iLCAiUXRpVmFyaWFibGVEZWNsYXJhdGlvbiIsICJfYSIsICJfYiIsICJ2YWx1ZSIsICJ2IiwgImh0bWwiLCAicmVzcG9uc2VWYXJpYWJsZSIsICJyZXN1bHQiLCAiY29ycmVjdFJlc3BvbnNlIiwgInZhbHVlcyIsICJpIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiY29uc3VtZSIsICJpdGVtQ29udGV4dCIsICJzdGF0ZSIsICJjdXN0b21FbGVtZW50IiwgIkxpdEVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlDb21wYW5pb25NYXRlcmlhbHNJbmZvIiwgIkxpdEVsZW1lbnQiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpQ29udGVudEJvZHkiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgIkxpdEVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJRdGlSdWJyaWNCbG9jayIsICJMaXRFbGVtZW50IiwgIm9sZCIsICJkaXNhYmxlZCIsICJjbGFzc05hbWUiLCAiaHRtbCIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgIndhdGNoIiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJMaXRFbGVtZW50IiwgInByb3BlcnR5IiwgImRlY2ltYWxTZXBhcmF0b3IiLCAiY29udmVydE51bWJlclRvVW5pdmVyYWxGb3JtYXQiLCAibnVtYmVyIiwgImRTZXAiLCAiSXNOdWxsT3JVbmRlZmluZWQiLCAidmFsdWUiLCAicmVtb3ZlRG91YmxlU2xhc2hlcyIsICJzdHIiLCAiUXRpRmVlZGJhY2siLCAiTGl0RWxlbWVudCIsICJvdXRjb21lSWRlbnRpZmllciIsICJvdXRjb21lVmFyaWFibGUiLCAiaXNGb3VuZCIsICJJc051bGxPclVuZGVmaW5lZCIsICJ2YWx1ZSIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiUXRpRmVlZGJhY2tCbG9jayIsICJRdGlGZWVkYmFjayIsICJodG1sIiwgIl9jaGFuZ2VkUHJvcGVydGllcyIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlGZWVkYmFja0lubGluZSIsICJRdGlGZWVkYmFjayIsICJodG1sIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgIlF0aU1vZGFsRmVlZGJhY2siLCAiUXRpRmVlZGJhY2siLCAiaHRtbCIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiaWZEZWZpbmVkIiwgInByb3BlcnR5IiwgIkxpdEVsZW1lbnQiLCAiSW50ZXJhY3Rpb24iLCAiTGl0RWxlbWVudCIsICJ2YWwiLCAidmFsdWUiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgInJlZiIsICJjcmVhdGVSZWYiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJzdGF0ZSIsICJRdGlFeHRlbmRlZFRleHRJbnRlcmFjdGlvbiIsICJJbnRlcmFjdGlvbiIsICJjcmVhdGVSZWYiLCAib2xkIiwgImRpc2FibGVkIiwgImNsYXNzTmFtZSIsICJuclJvd3MiLCAidmFsdWUiLCAiY3NzIiwgImh0bWwiLCAicmVmIiwgImV2ZW50IiwgImlmRGVmaW5lZCIsICJpbnB1dCIsICJ0ZXh0IiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJzdGF0ZSIsICJ3YXRjaCIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAic3RhdGUiLCAiaWZEZWZpbmVkIiwgImNyZWF0ZVJlZiIsICJsaXZlUXVlcnkiLCAicXVlcnlTZWxlY3RvciIsICJvcHRpb25zIiwgIm9ic2VydmVyIiwgInJlc29sdmVkT3B0aW9ucyIsICJfX3NwcmVhZFZhbHVlcyIsICJwcm90byIsICJkZWNvcmF0ZWRGbk5hbWUiLCAiY29ubmVjdGVkQ2FsbGJhY2siLCAiZGlzY29ubmVjdGVkQ2FsbGJhY2siLCAiX2EiLCAiY2FsbGJhY2siLCAibXV0YXRpb25MaXN0IiwgImVsZW1lbnRzVG9XYXRjaCIsICJtdXRhdGlvbiIsICJhZGRlZE5vZGVzIiwgImUiLCAicmVtb3ZlZE5vZGVzIiwgIm4iLCAiZWxlbWVudHNBZGRlZCIsICJRdGlUZXh0RW50cnlJbnRlcmFjdGlvbiIsICJJbnRlcmFjdGlvbiIsICJjcmVhdGVSZWYiLCAib2xkIiwgImNsYXNzZXMiLCAiY2xhc3NOYW1lIiwgIm5yUm93cyIsICJ2YWx1ZSIsICJjc3MiLCAiaHRtbCIsICJldmVudCIsICJpZkRlZmluZWQiLCAiaW5wdXQiLCAidGV4dCIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAic3RhdGUiLCAid2F0Y2giLCAiY3VzdG9tRWxlbWVudCIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAiQ2hvaWNlcyIsICJJbnRlcmFjdGlvbiIsICJfIiwgImRpc2FibGVkIiwgImNoIiwgInJlYWRvbmx5IiwgImFjYyIsICJ2YWwiLCAicmVzcG9uc2VWYWx1ZSIsICJyZXNwb25zZVZhbHVlQXJyYXkiLCAiY2UiLCAicnYiLCAiY2hvaWNlRWxlbWVudCIsICJldmVudCIsICJzZWxlY3RlZElkZW50aWZpZXJzIiwgInJlc3VsdCIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAid2F0Y2giLCAiUXRpSG90dGV4dEludGVyYWN0aW9uIiwgIkNob2ljZXMiLCAiaHRtbCIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgInN0YXRlIiwgInVuc2FmZUhUTUwiLCAiUXRpSW5saW5lQ2hvaWNlSW50ZXJhY3Rpb24iLCAiSW50ZXJhY3Rpb24iLCAiY3NzIiwgImh0bWwiLCAib3B0aW9uIiwgInVuc2FmZUhUTUwiLCAiY2hvaWNlcyIsICJjaG9pY2UiLCAic2VsZWN0ZWRPcHRpb24iLCAiaSIsICJfX3NwcmVhZFByb3BzIiwgIl9fc3ByZWFkVmFsdWVzIiwgInZhbHVlIiwgImV2ZW50IiwgInNlbGVjdGVkT3B0aW9uVmFsdWUiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInN0YXRlIiwgInByb3BlcnR5IiwgImN1c3RvbUVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJodG1sIiwgImNzcyIsICJxdGlfY2hvaWNlX2ludGVyYWN0aW9uX3N0eWxlc19kZWZhdWx0IiwgIlF0aUNob2ljZUludGVyYWN0aW9uIiwgIkNob2ljZXMiLCAiaHRtbCIsICJxdGlfY2hvaWNlX2ludGVyYWN0aW9uX3N0eWxlc19kZWZhdWx0IiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgIkxpdEVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlPdXRjb21lUHJvY2Vzc2luZyIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAibG9naWMiLCAiUXRpT3V0Y29tZVByb2Nlc3NpbmdQcm9jZXNzb3IiLCAicnVsZXMiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgInJ1bGUiLCAiY3NzIiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgIm1hdGNoQ29ycmVjdCIsICJtYXBSZXNwb25zZSIsICJtYXBSZXNwb25zZVBvaW50IiwgIlF0aVJlc3BvbnNlUHJvY2Vzc2luZyIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAicnVsZXMiLCAicnVsZSIsICJfY2hhbmdlZFByb3BlcnRpZXMiLCAic3BsaXR0ZWRUZW1wbGF0ZU5hbWUiLCAidGVtcGxhdGVOYW1lIiwgIm1hcFJlc3BvbnNlIiwgIm1hcFJlc3BvbnNlUG9pbnQiLCAibWF0Y2hDb3JyZWN0IiwgInN0ckhUTUwiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgImN1c3RvbUVsZW1lbnQiLCAiaHRtbCIsICJMaXRFbGVtZW50IiwgIlF0aVJ1bGUiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgIlF0aUxvb2t1cE91dGNvbWVWYWx1ZSIsICJRdGlSdWxlIiwgImlkZW50aWZpZXIiLCAib3V0Y29tZVZhcmlhYmxlIiwgInZhbHVlIiwgImNvbnZlcnROdW1iZXJUb1VuaXZlcmFsRm9ybWF0IiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJodG1sIiwgIlF0aVJlc3BvbnNlQ29uZGl0aW9uIiwgIlF0aVJ1bGUiLCAiaHRtbCIsICJicmFuY2hlcyIsICJpIiwgImJyYW5jaCIsICJRdGlTZXRPdXRjb21lVmFsdWUiLCAiUXRpUnVsZSIsICJvdXRjb21lSWRlbnRpZmllciIsICJleHByZXNzaW9uIiwgInZhbHVlIiwgIlF0aVNldE91dGNvbWVWYWx1ZVJ1bGUiLCAidiIsICJjb252ZXJ0TnVtYmVyVG9Vbml2ZXJhbEZvcm1hdCIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAiUXRpUmVzcG9uc2VFbHNlIiwgInN1YlJ1bGVzIiwgImkiLCAiaHRtbCIsICJRdGlSZXNwb25zZUlmIiwgIlF0aVJlc3BvbnNlRWxzZSIsICJyZXN1bHQiLCAiaSIsICJRdGlSZXNwb25zZUVsc2VJZiIsICJRdGlSZXNwb25zZUlmIiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJzdGF0ZSIsICJRdGlFeHByZXNzaW9uIiwgIkxpdEVsZW1lbnQiLCAiaWRlbnRpZmllciIsICJ2YWx1ZXMiLCAidiIsICJyZXNwb25zZVZhcmlhYmxlIiwgImVycm9yIiwgImh0bWwiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJzdGF0ZSIsICJRdGlDb25kaXRpb25FeHByZXNzaW9uIiwgIlF0aUV4cHJlc3Npb24iLCAiUXRpQW5kIiwgInF0aUFuZE1peGluIiwgIlF0aUNvbmRpdGlvbkV4cHJlc3Npb24iLCAiQmFzZSIsICJjaGlsZHJlbiIsICJjIiwgImNvbmRpdGlvbiIsICJ2YWx1ZSIsICJlIiwgIlF0aUFuZCIsICJwcm9wZXJ0eSIsICJRdGlCYXNlVmFsdWUiLCAiUXRpRXhwcmVzc2lvbiIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiUXRpQ29udGFpbnMiLCAiUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiIsICJ2YWx1ZXMiLCAidmFsdWUxIiwgInZhbHVlMiIsICJwcm9qZWN0aW9uMSIsICJwcm9qZWN0aW9uMiIsICJ4IiwgIlF0aUNvcnJlY3QiLCAiUXRpRXhwcmVzc2lvbiIsICJpZGVudGlmaWVyIiwgInJlc3BvbnNlVmFyaWFibGUiLCAicHJvcGVydHkiLCAiUXRpRXF1YWxSb3VuZGVkIiwgIlF0aUV4cHJlc3Npb24iLCAiZmlndXJlcyIsICJ2YWx1ZXMiLCAidmFsdWUxIiwgInZhbHVlMiIsICJmbG9hdDEiLCAiZmxvYXQyIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJwcm9wZXJ0eSIsICJTY29yaW5nSGVscGVyIiwgInZhbHVlMSIsICJ2YWx1ZTIiLCAiYmFzZVR5cGUiLCAiaW50MSIsICJpbnQyIiwgImZsb2F0MSIsICJmbG9hdDIiLCAicGFpcjEiLCAicGFpcjIiLCAiUXRpRXF1YWwiLCAiUXRpRXhwcmVzc2lvbiIsICJ2YWx1ZXMiLCAidmFsdWUxIiwgInZhbHVlMiIsICJTY29yaW5nSGVscGVyIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJRdGlHdCIsICJRdGlFeHByZXNzaW9uIiwgInZhbHVlcyIsICJ2YWx1ZTEiLCAidmFsdWUyIiwgIlF0aUd0ZSIsICJRdGlDb25kaXRpb25FeHByZXNzaW9uIiwgInZhbHVlcyIsICJ2YWx1ZTEiLCAidmFsdWUyIiwgIlF0aUlzTnVsbCIsICJRdGlFeHByZXNzaW9uIiwgInZhcmlhYmxlcyIsICJ2YWx1ZSIsICJRdGlMdCIsICJRdGlFeHByZXNzaW9uIiwgInZhbHVlcyIsICJ2YWx1ZTEiLCAidmFsdWUyIiwgIlF0aUx0ZSIsICJRdGlDb25kaXRpb25FeHByZXNzaW9uIiwgInZhbHVlcyIsICJ2YWx1ZTEiLCAidmFsdWUyIiwgInByb3BlcnR5IiwgIlF0aU1hcFJlc3BvbnNlIiwgIlF0aUV4cHJlc3Npb24iLCAicmVzcG9uc2UiLCAibWFwcGluZyIsICJjYW5kaWRhdGVSZXNwb25zZXMiLCAicmVzdWx0IiwgImNhbmRpZGF0ZVJlc3BvbnNlIiwgIm1hcHBlZFZhbHVlIiwgImVudHJ5IiwgIlNjb3JpbmdIZWxwZXIiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgInByb3BlcnR5IiwgIkxpdEVsZW1lbnQiLCAiUXRpTWFwcGluZyIsICJMaXRFbGVtZW50IiwgImVsIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJRdGlNYXRjaCIsICJfUXRpTWF0Y2giLCAiUXRpRXhwcmVzc2lvbiIsICJ2YWx1ZXMiLCAidmFsdWVUb01hcCIsICJjb3JyZWN0VmFsdWVJbmZvIiwgIl9hIiwgIlNjb3JpbmdIZWxwZXIiLCAiYW5zd2VySW5kZXgiLCAiY29ycmVjdEFuc3dlciIsICJjdXJyZW50VmFsdWVUb01hcCIsICJtYXRjaGluZ1ZhbHVlIiwgIm12IiwgIlF0aU1lbWJlciIsICJRdGlFeHByZXNzaW9uIiwgInZhbHVlcyIsICJ2YWx1ZTEiLCAidmFsdWUyIiwgInByb2plY3Rpb24xIiwgIlF0aU11bHRpcGxlIiwgIlF0aUV4cHJlc3Npb24iLCAidmFyaWFibGVzIiwgInZhcmlhYmxlIiwgImh0bWwiLCAiUXRpTm90IiwgIlF0aUV4cHJlc3Npb24iLCAiaHRtbCIsICJRdGlPciIsICJRdGlDb25kaXRpb25FeHByZXNzaW9uIiwgImMiLCAiY29uZGl0aW9uIiwgInZhbHVlIiwgIlF0aU9yZGVyZWQiLCAiUXRpRXhwcmVzc2lvbiIsICJ2YXJpYWJsZXMiLCAidmFyaWFibGUiLCAiY29uc3VtZSIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAicHJvcGVydHkiLCAic3RhdGUiLCAiUXRQcmludGVkVmFyaWFibGUiLCAiTGl0RWxlbWVudCIsICJfYSIsICJfYiIsICJ2YWx1ZSIsICJ2IiwgImh0bWwiLCAiYXNzZXNzbWVudEl0ZW0iLCAiaWRlbnRpZmllciIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiY29uc3VtZSIsICJpdGVtQ29udGV4dCIsICJzdGF0ZSIsICJRdGlQcm9kdWN0IiwgIlF0aUV4cHJlc3Npb24iLCAiYWNjdW11bGF0b3IiLCAiY3VycmVudFZhbHVlIiwgImVycm9yIiwgInByb3BlcnR5IiwgIlF0aVN0cmluZ01hdGNoIiwgIlF0aUV4cHJlc3Npb24iLCAidmFsdWVzIiwgInZhbHVlMSIsICJ2YWx1ZTIiLCAidjEiLCAidjIiLCAiU2NvcmluZ0hlbHBlciIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiUXRpU3VtIiwgIlF0aUV4cHJlc3Npb24iLCAiUXRpU3VtRXhwcmVzc2lvbiIsICJleHByZXNzaW9ucyIsICJjIiwgInZhbHVlIiwgImEiLCAiYiIsICJRdGlWYXJpYWJsZSIsICJRdGlFeHByZXNzaW9uIiwgImlkZW50aWZpZXIiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgInN0YXRlIiwgIlF0aVBvcnRhYmxlQ3VzdG9tSW50ZXJhY3Rpb24iLCAiSW50ZXJhY3Rpb24iLCAidXJsIiwgImJhc2VVcmwiLCAicmVxdWlyZUNvbmZpZyIsICJtb2R1bGVDb25nIiwgIm1vZHVsZUlkIiwgImUiLCAicGF0aCIsICJiYXNlUGF0aCIsICJjb25maWciLCAicHJpbWFyeUNvbmZpZyIsICJmYWxsYmFjayIsICJfYSIsICJmYWlsZWRUb1Jlc29sdmUiLCAicGF0aFdpdGhFeHRlbnNpb24iLCAiZmFsbGJhY2tDb25maWciLCAiaW5wdXQiLCAidG9wTGV2ZWxLZXkiLCAibmVzdGVkT2JqZWN0IiwgIm5lc3RlZEtleSIsICJ2YWx1ZSIsICJyZXNwb25zZSIsICJuZXdSZXNwb25zZSIsICJzdHJpbmdpZmllZCIsICJ2YWwiLCAibm9kZSIsICJhIiwgImdldFByb3BlcnR5VmFsdWUiLCAiZWwiLCAicHJvcGVydHkiLCAia2V5IiwgImNoaWxkcmVuIiwgImFsbEtleSIsICJjIiwgImsiLCAiZ2V0Q2hpbGRQcm9wZXJ0aWVzIiwgInByb3BlcnRpZXMiLCAiY2hpbGQiLCAiX19zcHJlYWRWYWx1ZXMiLCAicGNpIiwgInR5cGUiLCAiZG9tIiwgImFjYyIsICJsaW5rIiwgInN0eWxlcyIsICJyZXF1aXJlIiwgImN0eEEiLCAid2FzUHJldmlvdXNseUxvYWRlZCIsICJlcnIiLCAibW9kdWxlUmVzb2x1dGlvblBhdGgiLCAibW9kdWxlUmVzb2x1dGlvbkZhbGxiYWNrUGF0aCIsICJpbnRlcmFjdGlvbk1vZHVsZXMiLCAibW9kdWxlcyIsICJtb2R1bGUiLCAicHJpbWFyeVBhdGgiLCAiZmFsbGJhY2tQYXRoIiwgIl9fc3ByZWFkUHJvcHMiLCAic3RyIiwgImh0bWwiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInN0YXRlIiwgImN1c3RvbUVsZW1lbnQiLCAiTGl0RWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgInN0YXRlIiwgIlRvdWNoRHJhZ0FuZERyb3AiLCAiX1RvdWNoRHJhZ0FuZERyb3AiLCAidHlwZSIsICJ2YWwiLCAiZSIsICJfdG91Y2hlcyIsICJlbGVtZW50U3R5bGVzIiwgInN0eWxlIiwgIl90aGlzIiwgInRhcmdldCIsICJkcmFnZ2FibGVzIiwgImVsIiwgIngiLCAieSIsICJfYSIsICJldmVudCIsICJwb2ludEZyb21Ub3VjaEV2ZW50IiwgImN1c3RvbUVsIiwgInBhZ2UiLCAidG91Y2giLCAiY2xpZW50UmVjdCIsICJldmVudFR5cGUiLCAiYnViYmxlIiwgInByb3BlcnR5IiwgIkRyb3BwYWJsZXNNaXhpbiIsICJzdXBlckNsYXNzIiwgImRyb3BwYWJsZXNJblNoYWRvd1Jvb3QiLCAiZHJvcHBhYmxlc1NlbGVjdG9yIiwgIkRyb3BwYWJsZXNFbGVtZW50IiwgImNoYW5nZWRQcm9wcyIsICJkcm9wcGFibGVzIiwgImQiLCAiZHJvcHBhYmxlIiwgIm11dGF0aW9ucyIsICJtdXRhdGlvbiIsICJfYSIsICJldiIsICJkcmFnZ2FibGVJbkxpZ2h0RG9tIiwgImRyYWdnYWJsZSIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiRmxpcHBhYmxlc01peGluIiwgInN1cGVyQ2xhc3MiLCAiZHJvcHBhYmxlc1NlbCIsICJkcmFnZ2FibGVzU2VsIiwgIkZsaXBwYWJsZXNFbGVtZW50IiwgInByb3BlcnR5IiwgIkRyYWdEcm9wSW50ZXJhY3Rpb25NaXhpbiIsICJzdXBlckNsYXNzIiwgImRyYWdnYWJsZXNTZWxlY3RvciIsICJkcm9wcGFibGVzSW5TaGFkb3dSb290IiwgImRyb3BwYWJsZXNTZWxlY3RvciIsICJEcmFnRHJvcEludGVyYWN0aW9uRWxlbWVudCIsICJGbGlwcGFibGVzTWl4aW4iLCAiRHJvcHBhYmxlc01peGluIiwgImRyYWdzQWRkZWQiLCAiZHJhZ3NSZW1vdmVkIiwgImVsZW0iLCAiZXYiLCAiZHJhZ2dhYmxlIiwgInBvc2l0aW9uIiwgImluZGV4IiwgImludGVyYWN0aW9uIiwgImdhcFRleHQiLCAib2xkIiwgImRyYWdPcHRpb25zIiwgImRpc2FibGVkIiwgInMiLCAiY2giLCAicmVhZG9ubHkiLCAiY2hhbmdlZFByb3BzIiwgIlRvdWNoRHJhZ0FuZERyb3AiLCAic2F2ZSIsICJjaGlsZHJlbiIsICJkIiwgImRpc2FibGUiLCAicmVzcG9uc2UiLCAiZHJvcElkIiwgImRyYWdJZHMiLCAiZHJvcHBhYmxlIiwgImRyb3AiLCAiZHJhZ0lkIiwgImFzc29jaWF0aW9ucyIsICJfYSIsICJyZXNwb25zZVN0cmluZyIsICJfX2RlY29yYXRlQ2xhc3MiLCAibGl2ZVF1ZXJ5IiwgInByb3BlcnR5IiwgIndhdGNoIiwgIlF0aUFzc29jaWF0ZUludGVyYWN0aW9uIiwgIkRyYWdEcm9wSW50ZXJhY3Rpb25NaXhpbiIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAiXyIsICJpbmRleCIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInN0YXRlIiwgImN1c3RvbUVsZW1lbnQiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgInN0YXRlIiwgIlF0aUN1c3RvbUludGVyYWN0aW9uIiwgIkludGVyYWN0aW9uIiwgInVyaVRvTWFuaWZlc3QiLCAicmVtb3ZlRG91YmxlU2xhc2hlcyIsICJyZXNwb25zZSIsICJkYXRhIiwgImVyciIsICJpZnJhbWUiLCAiaWZyYW1lV2luIiwgImlmcmFtZURvYyIsICJpZnJhbWVzSW5TaGFkb3dSb290IiwgIm91dGVySUZyYW1lcyIsICJpZnJhbWVTcmMiLCAib3V0ZXJEb2MiLCAiZSIsICJpbmRleCIsICJpZnJhbWVEb2N1bWVudCIsICJpZnJhbWVzIiwgIm5lc3RlZERvYyIsICJ0eXBlIiwgImV2ZW50IiwgIm1lZGlhRGF0YSIsICJtZWRpYSIsICJ2YWwiLCAiaHRtbCIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAic3RhdGUiLCAiY3VzdG9tRWxlbWVudCIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAiUXRpRW5kQXR0ZW1wdEludGVyYWN0aW9uIiwgIkludGVyYWN0aW9uIiwgInZhbCIsICJodG1sIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgIkxpdEVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlHYXBNYXRjaEludGVyYWN0aW9uIiwgIkRyYWdEcm9wSW50ZXJhY3Rpb25NaXhpbiIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAidmFsdWUiLCAibWF0Y2hlcyIsICJyZXNwb25zZSIsICJ4IiwgInNwbGl0IiwgImdhcCIsICJpbmRleCIsICJfYSIsICJfYiIsICJfYyIsICJfZCIsICJpZGVudGlmaWVyIiwgInRleHRJZGVudGlmaWVyIiwgInRleHQiLCAidGV4dFNwYW4iLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgInN2ZyIsICJjdXN0b21FbGVtZW50IiwgInF1ZXJ5IiwgInF1ZXJ5QXNzaWduZWRFbGVtZW50cyIsICJzdGF0ZSIsICJpZkRlZmluZWQiLCAicmVwZWF0IiwgInBvc2l0aW9uSG90c3BvdHMiLCAic2hhcGUiLCAiY29vcmRzTnVtYmVyIiwgImltZyIsICJob3RzcG90IiwgImNlbnRlclgiLCAiY2VudGVyWSIsICJyYWRpdXMiLCAiY2VudGVyWFBlciIsICJjZW50ZXJZUGVyIiwgInJhZGl1c1BlciIsICJsZWZ0WCIsICJ0b3BZIiwgInJpZ2h0WCIsICJib3R0b21ZIiwgImxlZnRYUGVyIiwgInRvcFlQZXIiLCAicmlnaHRYUGVyIiwgImJvdHRvbVlQZXIiLCAicG9seWNvb3JkcyIsICJhY2MiLCAiY3VycmVudFZhbHVlIiwgImN1cnJlbnRJbmRleCIsICJwb2x5QyIsICJsYXN0VmFsIiwgInBvaW50IiwgInBvbHlEIiwgInAiLCAiUXRpR3JhcGhpY0Fzc29jaWF0ZUludGVyYWN0aW9uIiwgIkludGVyYWN0aW9uIiwgInZhbCIsICJfYSIsICJfYiIsICJfYyIsICJfZCIsICJodG1sIiwgImlmRGVmaW5lZCIsICJyZXBlYXQiLCAibGluZSIsICJpbmRleCIsICJzdmciLCAiZSIsICJfIiwgImkiLCAiaW1nIiwgImhvdHNwb3QiLCAiY29vcmRzIiwgInNoYXBlIiwgImNvb3Jkc051bWJlciIsICJzIiwgInBvc2l0aW9uSG90c3BvdHMiLCAiZXZlbnQiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJzdGF0ZSIsICJxdWVyeSIsICJxdWVyeUFzc2lnbmVkRWxlbWVudHMiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpR3JhcGhpY0dhcE1hdGNoSW50ZXJhY3Rpb24iLCAiRHJhZ0Ryb3BJbnRlcmFjdGlvbk1peGluIiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJlIiwgImltZyIsICJob3RzcG90IiwgImNvb3JkcyIsICJzaGFwZSIsICJjb29yZHNOdW1iZXIiLCAicyIsICJjZW50ZXJYIiwgImNlbnRlclkiLCAicmFkaXVzIiwgImxlZnRYIiwgInRvcFkiLCAicmlnaHRYIiwgImJvdHRvbVkiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpR3JhcGhpY09yZGVySW50ZXJhY3Rpb24iLCAiQ2hvaWNlcyIsICJodG1sIiwgImUiLCAiaWRlbnRpZmllciIsICJob3RzcG90IiwgImVsIiwgIm1heFNlbGVjdGlvbiIsICJpIiwgImltZyIsICJjb29yZHMiLCAic2hhcGUiLCAiY29vcmRzTnVtYmVyIiwgInMiLCAicG9zaXRpb25Ib3RzcG90cyIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlIb3RzcG90SW50ZXJhY3Rpb24iLCAiQ2hvaWNlcyIsICJodG1sIiwgImUiLCAiaW1nIiwgImhvdHNwb3QiLCAiY29vcmRzIiwgInNoYXBlIiwgImNvb3Jkc051bWJlciIsICJzIiwgInBvc2l0aW9uSG90c3BvdHMiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgInN0YXRlIiwgInVuc2FmZUhUTUwiLCAiaHRtbCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAiUXRpU2ltcGxlQXNzb2NpYWJsZUNob2ljZSIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpTWF0Y2hJbnRlcmFjdGlvbiIsICJEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4iLCAiTGl0RWxlbWVudCIsICJyYWRpbyIsICJjaGVja2JveCIsICJ2YWx1ZSIsICJuYW1lIiwgInR5cGUiLCAidiIsICJyZXNwb25zZVZhbHVlIiwgImh0bWwiLCAiY29sIiwgImkiLCAidW5zYWZlSFRNTCIsICJyb3ciLCAickluZGV4IiwgImNJbmRleCIsICJyb3dJZCIsICJjb2xJZCIsICJzZWxlY3RlZEluUm93Q291bnQiLCAiY2hlY2tlZCIsICJwYXJ0IiwgImRpc2FibGUiLCAiZSIsICJfX2RlY29yYXRlQ2xhc3MiLCAic3RhdGUiLCAicHJvcGVydHkiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgIlF0aU1lZGlhSW50ZXJhY3Rpb24iLCAiSW50ZXJhY3Rpb24iLCAidmFsIiwgIl9fc3ByZWFkUHJvcHMiLCAiX19zcHJlYWRWYWx1ZXMiLCAiaHRtbCIsICJtZWRpYU9iamVjdCIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgIlF0aU9yZGVySW50ZXJhY3Rpb24iLCAiRHJhZ0Ryb3BJbnRlcmFjdGlvbk1peGluIiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJfIiwgImkiLCAiZWwiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJjdXN0b21FbGVtZW50IiwgIkxpdEVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiUXRpU1Bvc2l0aW9uT2JqZWN0SW50ZXJhY3Rpb24iLCAiTGl0RWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgIlF0aVBvc2l0aW9uT2JqZWN0U3RhZ2UiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgImV2ZW50IiwgImRlbHRhWCIsICJkZWx0YVkiLCAiYSIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJzdGF0ZSIsICJyZXBlYXQiLCAic3R5bGVNYXAiLCAiUXRpU2VsZWN0UG9pbnRJbnRlcmFjdGlvbiIsICJJbnRlcmFjdGlvbiIsICJodG1sIiwgInJlcGVhdCIsICJwb2ludCIsICJpbmRleCIsICJzdHlsZU1hcCIsICJlIiwgIl8iLCAiaSIsICJ2YWwiLCAiZXZlbnQiLCAieCIsICJ5IiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAic3RhdGUiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJub3RoaW5nIiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAicXVlcnkiLCAiUXRpU2xpZGVySW50ZXJhY3Rpb24iLCAiSW50ZXJhY3Rpb24iLCAib2xkIiwgImRpc2FibGVkIiwgInJlYWRvbmx5IiwgInZhbHVlIiwgIm15UmVzcG9uc2UiLCAidmFsdWVQZXJjZW50YWdlIiwgImh0bWwiLCAibm90aGluZyIsICJldmVudCIsICJoYW5kbGVUb3VjaE1vdmUiLCAieCIsICJkaWZmWCIsICJoYW5kbGVUb3VjaEVuZCIsICJoYW5kbGVNb3VzZU1vdmUiLCAiaGFuZGxlTW91c2VVcCIsICJ2YWx1ZU5vdyIsICJyb3VuZGVkU3RlcFZhbHVlIiwgIl90b3VjaE1vdmUiLCAiZXZ0IiwgInRvdWNoIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAicXVlcnkiLCAicHJvcGVydHkiLCAid2F0Y2giLCAiY3VzdG9tRWxlbWVudCIsICJjb25zdW1lIiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgInN0YXRlIiwgIlF0aUN1c3RvbU9wZXJhdG9yIiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJldmVudCIsICJfYSIsICJfYiIsICJfYyIsICJjb21tZW50Tm9kZSIsICJub2RlIiwgImUiLCAiZm4iLCAicmVzcG9uc2VJZGVudGlmaWVyIiwgInYiLCAiaXRlbSIsICJ2YXJpYWJsZUlkZW50aWZpZXIiLCAib3V0Y29tZUlkZW50aWZpZXIiLCAidmFsdWUiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImNvbnN1bWUiLCAiaXRlbUNvbnRleHQiLCAic3RhdGUiLCAiY3VzdG9tRWxlbWVudCIsICJMaXRFbGVtZW50IiwgImNzcyIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpQXNzb2NpYWJsZUhvdHNwb3QiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJodG1sIiwgIkxpdEVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJRdGlHYXAiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJjdXN0b21FbGVtZW50IiwgIkxpdEVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJRdGlHYXBJbWciLCAiTGl0RWxlbWVudCIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiY3VzdG9tRWxlbWVudCIsICJodG1sIiwgIkxpdEVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJRdGlHYXBUZXh0IiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJRdGlIb3RzcG90Q2hvaWNlIiwgIlF0aUNob2ljZSIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgImN1c3RvbUVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJodG1sIiwgIlF0aUhvdHRleHQiLCAiUXRpQ2hvaWNlIiwgImh0bWwiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgIlF0aUlubGluZUNob2ljZSIsICJMaXRFbGVtZW50IiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiUXRpU2ltcGxlQ2hvaWNlIiwgIlF0aUNob2ljZSIsICJodG1sIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCJdCn0K
|
|
476
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktYXNzZXNzbWVudC1pdGVtL3F0aS1hc3Nlc3NtZW50LWl0ZW0udHMiLCAiLi4vLi4vc3JjL2xpYi9kZWNvcmF0b3JzL3dhdGNoLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWFzc2Vzc21lbnQtaXRlbS9xdGktYXNzZXNzbWVudC1pdGVtLmNvbnRleHQudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktYXNzZXNzbWVudC1zdGltdWx1cy1yZWYvcXRpLWFzc2Vzc21lbnQtc3RpbXVsdXMtcmVmLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL2ludGVybmFsL2Nob2ljZS9xdGktY2hvaWNlLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWl0ZW0tYm9keS9xdGktaXRlbS1ib2R5LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWl0ZW0tYm9keS9xdGktaXRlbS1ib2R5LnN0eWxlcy50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1wcm9tcHQvcXRpLXByb21wdC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1zdHlsZXNoZWV0L3F0aS1zdHlsZXNoZWV0LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXZhcmlhYmxlLWRlY2xhcmF0aW9uL3F0aS1vdXRjb21lLWRlY2xhcmF0aW9uL3F0aS1vdXRjb21lLWRlY2xhcmF0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXZhcmlhYmxlLWRlY2xhcmF0aW9uL3F0aS12YXJpYWJsZS1kZWNsYXJhdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS12YXJpYWJsZS1kZWNsYXJhdGlvbi9xdGktcmVzcG9uc2UtZGVjbGFyYXRpb24vcXRpLXJlc3BvbnNlLWRlY2xhcmF0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWNvbXBhbmlvbi1tYXRlcmlhbHMtaW5mby9xdGktY29tcGFuaW9uLW1hdGVyaWFscy1pbmZvLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJ1YnJpYy1ibG9jay9xdGktY29udGVudC1ib2R5LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJ1YnJpYy1ibG9jay9xdGktcnVicmljLWJsb2NrLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWZlZWRiYWNrL3F0aS1mZWVkYmFjay1ibG9jay9xdGktZmVlZGJhY2stYmxvY2sudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktZmVlZGJhY2svcXRpLWZlZWRiYWNrLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvaW50ZXJuYWwvdXRpbHMudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktZmVlZGJhY2svcXRpLWZlZWRiYWNrLWlubGluZS9xdGktZmVlZGJhY2staW5saW5lLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWZlZWRiYWNrL3F0aS1tb2RhbC1mZWVkYmFjay9xdGktbW9kYWwtZmVlZGJhY2sudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWV4dGVuZGVkLXRleHQtaW50ZXJhY3Rpb24vcXRpLWV4dGVuZGVkLXRleHQtaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vaW50ZXJuYWwvaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLXRleHQtZW50cnktaW50ZXJhY3Rpb24vcXRpLXRleHQtZW50cnktaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9kZWNvcmF0b3JzL2xpdmUtcXVlcnkudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWhvdHRleHQtaW50ZXJhY3Rpb24vcXRpLWhvdHRleHQtaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vaW50ZXJuYWwvY2hvaWNlcy9jaG9pY2VzLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1pbmxpbmUtY2hvaWNlLWludGVyYWN0aW9uL3F0aS1pbmxpbmUtY2hvaWNlLWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1jaG9pY2UtaW50ZXJhY3Rpb24vcXRpLWNob2ljZS1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktY2hvaWNlLWludGVyYWN0aW9uL3F0aS1jaG9pY2UtaW50ZXJhY3Rpb24uc3R5bGVzLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLW91dGNvbWUtcHJvY2Vzc2luZy9xdGktb3V0Y29tZS1wcm9jZXNzaW5nLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9pbnRlcm5hbC90ZW1wbGF0ZS1zdHJpbmdzLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLXJ1bGUvcXRpLWxvb2t1cC1vdXRjb21lLXZhbHVlL3F0aS1sb29rdXAtb3V0Y29tZS12YWx1ZS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1ydWxlL3F0aS1ydWxlLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLXJ1bGUvcXRpLXJlc3BvbnNlLWNvbmRpdGlvbi9xdGktcmVzcG9uc2UtY29uZGl0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLXJ1bGUvcXRpLXNldC1vdXRjb21lLXZhbHVlL3F0aS1zZXQtb3V0Y29tZS12YWx1ZS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1yZXNwb25zZS1lbHNlL3F0aS1yZXNwb25zZS1lbHNlLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLXJlc3BvbnNlLWVsc2UvcXRpLXJlc3BvbnNlLWlmL3F0aS1yZXNwb25zZS1lbHNlLWlmL3F0aS1yZXNwb25zZS1lbHNlLWlmLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLXJlc3BvbnNlLWVsc2UvcXRpLXJlc3BvbnNlLWlmL3F0aS1yZXNwb25zZS1pZi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1leHByZXNzaW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLWNvbmRpdGlvbi1leHByZXNzaW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLWFuZC9xdGktYW5kLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLWFuZC9pbmRleC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1iYXNldmFsdWUvcXRpLWJhc2V2YWx1ZS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1jb250YWlucy9xdGktY29udGFpbnMudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktY29ycmVjdC9xdGktY29ycmVjdC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1lcXVhbC1yb3VuZGVkL3F0aS1lcXVhbC1yb3VuZGVkLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLWVxdWFsL3F0aS1lcXVhbC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3V0aWxpdGllcy9zY29yaW5nLWhlbHBlci50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1ndC9xdGktZ3QudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktZ3RlL3F0aS1ndGUudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktaXMtbnVsbC9xdGktaXMtbnVsbC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1sdC9xdGktbHQudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktbHRlL3F0aS1sdGUudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktbWFwLXJlc3BvbnNlL3F0aS1tYXAtcmVzcG9uc2UudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktbWFwcGluZy9xdGktbWFwcGluZy50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1tYXRjaC9xdGktbWF0Y2gudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktbWVtYmVyL3F0aS1tZW1iZXIudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktbXVsdGlwbGUvcXRpLW11bHRpcGxlLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLW5vdC9xdGktbm90LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLW9yL3F0aS1vci50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1vcmRlcmVkL3F0aS1vcmRlcmVkLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLXByaW50ZWQtdmFyaWFibGUvcXRpLXByaW50ZWQtdmFyaWFibGUudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktcHJvZHVjdC9xdGktcHJvZHVjdC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1zdHJpbmctbWF0Y2gvcXRpLXN0cmluZy1tYXRjaC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1zdW0vcXRpLXN1bS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS12YXJpYWJsZS9xdGktdmFyaWFibGUudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLXBvcnRhYmxlLWN1c3RvbS1pbnRlcmFjdGlvbi9xdGktcG9ydGFibGUtY3VzdG9tLWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1hc3NvY2lhdGUtaW50ZXJhY3Rpb24vcXRpLWFzc29jaWF0ZS1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9pbnRlcm5hbC9kcmFnLWRyb3AvZHJhZy1kcm9wLWFwaS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9pbnRlcm5hbC9kcmFnLWRyb3AvZHJvcHBhYmxlcy1taXhpbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9pbnRlcm5hbC9kcmFnLWRyb3AvZmxpcHBhYmxlcy1taXhpbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9pbnRlcm5hbC9kcmFnLWRyb3AvZHJhZy1kcm9wLWludGVyYWN0aW9uLW1peGluLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1jdXN0b20taW50ZXJhY3Rpb24vcXRpLWN1c3RvbS1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktZW5kLWF0dGVtcHQtaW50ZXJhY3Rpb24vcXRpLWVuZC1hdHRlbXB0LWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1nYXAtbWF0Y2gtaW50ZXJhY3Rpb24vcXRpLWdhcC1tYXRjaC1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktZ3JhcGhpYy1hc3NvY2lhdGUtaW50ZXJhY3Rpb24vcXRpLWdyYXBoaWMtYXNzb2NpYXRlLWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL2ludGVybmFsL2hvdHNwb3RzL2hvdHNwb3QudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWdyYXBoaWMtZ2FwLW1hdGNoLWludGVyYWN0aW9uL3F0aS1ncmFwaGljLWdhcC1tYXRjaC1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktZ3JhcGhpYy1vcmRlci1pbnRlcmFjdGlvbi9xdGktZ3JhcGhpYy1vcmRlci1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktaG90c3BvdC1pbnRlcmFjdGlvbi9xdGktaG90c3BvdC1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktbWF0Y2gtaW50ZXJhY3Rpb24vcXRpLW1hdGNoLWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLW1lZGlhLWludGVyYWN0aW9uL3F0aS1tZWRpYS1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktb3JkZXItaW50ZXJhY3Rpb24vcXRpLW9yZGVyLWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1wb3NpdGlvbi1vYmplY3QtaW50ZXJhY3Rpb24vcXRpLXBvc2l0aW9uLW9iamVjdC1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktcG9zaXRpb24tb2JqZWN0LWludGVyYWN0aW9uL3F0aS1wb3NpdGlvbi1vYmplY3Qtc3RhZ2UudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLXNlbGVjdC1wb2ludC1pbnRlcmFjdGlvbi9xdGktc2VsZWN0LXBvaW50LWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1zbGlkZXItaW50ZXJhY3Rpb24vcXRpLXNsaWRlci1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1jdXN0b20tb3BlcmF0b3IvcXRpLWN1c3RvbS1vcGVyYXRvci50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktYXNzb2NpYWJsZS1ob3RzcG90LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1nYXAudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWdhcC1pbWcudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWdhcC10ZXh0LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1ob3RzcG90LWNob2ljZS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktaG90dGV4dC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktaW5saW5lLWNob2ljZS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktc2ltcGxlLWNob2ljZS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBwcm92aWRlIH0gZnJvbSAnQGxpdC9jb250ZXh0JztcbmltcG9ydCB7IExpdEVsZW1lbnQsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyB3YXRjaCB9IGZyb20gJy4uLy4uL2RlY29yYXRvcnMvd2F0Y2gnO1xuaW1wb3J0IHR5cGUgeyBJbnRlcmFjdGlvbkNoYW5nZWREZXRhaWxzLCBPdXRjb21lQ2hhbmdlZERldGFpbHMgfSBmcm9tICcuLi9pbnRlcm5hbC9ldmVudC10eXBlcyc7XG5pbXBvcnQgdHlwZSB7IFJlc3BvbnNlSW50ZXJhY3Rpb24gfSBmcm9tICcuLi9pbnRlcm5hbC9leHByZXNzaW9uLXJlc3VsdCc7XG5pbXBvcnQgdHlwZSB7IFZhcmlhYmxlRGVjbGFyYXRpb24sIFZhcmlhYmxlVmFsdWUgfSBmcm9tICcuLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgT3V0Y29tZVZhcmlhYmxlLCBSZXNwb25zZVZhcmlhYmxlIH0gZnJvbSAnLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB0eXBlIHsgUXRpRmVlZGJhY2sgfSBmcm9tICcuLi9xdGktZmVlZGJhY2svcXRpLWZlZWRiYWNrJztcbmltcG9ydCB0eXBlIHsgSW50ZXJhY3Rpb24gfSBmcm9tICcuLi9xdGktaW50ZXJhY3Rpb24vaW50ZXJuYWwvaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24nO1xuaW1wb3J0IHR5cGUgeyBRdGlSZXNwb25zZVByb2Nlc3NpbmcgfSBmcm9tICcuLi9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZyc7XG5pbXBvcnQgeyBJdGVtQ29udGV4dCwgaXRlbUNvbnRleHQsIGl0ZW1Db250ZXh0VmFyaWFibGVzIH0gZnJvbSAnLi9xdGktYXNzZXNzbWVudC1pdGVtLmNvbnRleHQnO1xuXG4vKipcbiAqIEBzdW1tYXJ5IFRoZSBxdGktYXNzZXNzbWVudC1pdGVtIGVsZW1lbnQgY29udGFpbnMgYWxsIHRoZSBvdGhlciBRVEkgMyBpdGVtIHN0cnVjdHVyZXMuXG4gKiBAZG9jdW1lbnRhdGlvbiBodHRwczovL3d3dy5pbXNnbG9iYWwub3JnL3NwZWMvcXRpL3YzcDAvaW1wbCNoLmRsdG5uajg3bDB5alxuICogQHN0YXR1cyBzdGFibGVcbiAqIEBzaW5jZSA0LjBcbiAqXG4gKiBAZGVwZW5kZW5jeSBxdGktZmVlZGJhY2tcbiAqIEBkZXBlbmRlbmN5IHF0aS1yZXNwb25zZXByb2Nlc3NpbmdcbiAqXG4gKiBAc2xvdCAtIFRoZSBkZWZhdWx0IHNsb3Qgd2hlcmUgYWxsIHRoZSBvdGhlciBRVEkgMyBpdGVtIHN0cnVjdHVyZXMgZ28uXG4gKlxuICogQGV2ZW50IHF0aS1pbnRlcmFjdGlvbi1jaGFuZ2VkIC0gRW1pdHRlZCB3aGVuIGFuIGludGVyYWN0aW9uIGlzIGNoYW5nZWQuXG4gKiBAZXZlbnQgcXRpLW91dGNvbWUtY2hhbmdlZCAtIEVtaXR0ZWQgd2hlbiBhbiBvdXRjb21lIGhhcyBjaGFuZ2VkLlxuICogQGV2ZW50IHF0aS1yZXNwb25zZS1wcm9jZXNzaW5nIC0gRW1pdHRlZCB3aGVuIHJlc3BvbnNlLXByb2Nlc3NpbmcgaXMgY2FsbGVkLlxuICpcbiAqL1xuQGN1c3RvbUVsZW1lbnQoJ3F0aS1hc3Nlc3NtZW50LWl0ZW0nKVxuZXhwb3J0IGNsYXNzIFF0aUFzc2Vzc21lbnRJdGVtIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KSB0aXRsZTogc3RyaW5nO1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgaWRlbnRpZmllcjogc3RyaW5nID0gJyc7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KSBhZGFwdGl2ZTogJ3RydWUnIHwgJ2ZhbHNlJyA9ICdmYWxzZSc7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KSB0aW1lRGVwZW5kZW50OiAndHJ1ZScgfCAnZmFsc2UnID0gJ2ZhbHNlJztcblxuICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuIH0pIGRpc2FibGVkOiBib29sZWFuO1xuICBAd2F0Y2goJ2Rpc2FibGVkJywgeyB3YWl0VW50aWxGaXJzdFVwZGF0ZTogdHJ1ZSB9KVxuICBfaGFuZGxlRGlzYWJsZWRDaGFuZ2UgPSAoXzogYm9vbGVhbiwgZGlzYWJsZWQ6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLl9pbnRlcmFjdGlvbkVsZW1lbnRzLmZvckVhY2goY2ggPT4gKGNoLmRpc2FibGVkID0gZGlzYWJsZWQpKTtcbiAgfTtcblxuICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuIH0pIHJlYWRvbmx5OiBib29sZWFuO1xuICBAd2F0Y2goJ3JlYWRvbmx5JywgeyB3YWl0VW50aWxGaXJzdFVwZGF0ZTogdHJ1ZSB9KVxuICBfaGFuZGxlUmVhZG9ubHlDaGFuZ2UgPSAoXzogYm9vbGVhbiwgcmVhZG9ubHk6IGJvb2xlYW4pID0+XG4gICAgdGhpcy5faW50ZXJhY3Rpb25FbGVtZW50cy5mb3JFYWNoKGNoID0+IChjaC5yZWFkb25seSA9IHJlYWRvbmx5KSk7XG5cbiAgQHByb3ZpZGUoeyBjb250ZXh0OiBpdGVtQ29udGV4dCB9KVxuICAvLyBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6IGZhbHNlIH0pXG4gIHByaXZhdGUgX2NvbnRleHQ6IEl0ZW1Db250ZXh0ID0ge1xuICAgIGlkZW50aWZpZXI6IHRoaXMuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJyksXG4gICAgdmFyaWFibGVzOiBpdGVtQ29udGV4dFZhcmlhYmxlc1xuICB9O1xuXG4gIHB1YmxpYyBnZXQgdmFyaWFibGVzKCk6IFZhcmlhYmxlVmFsdWU8c3RyaW5nIHwgc3RyaW5nW10gfCBudWxsPltdIHtcbiAgICByZXR1cm4gdGhpcy5fY29udGV4dC52YXJpYWJsZXMubWFwKHYgPT4gKHsgaWRlbnRpZmllcjogdi5pZGVudGlmaWVyLCB2YWx1ZTogdi52YWx1ZSwgdHlwZTogdi50eXBlIH0pKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgdmFyaWFibGVzKHZhbHVlOiBWYXJpYWJsZVZhbHVlPHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbD5bXSkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgdmFsdWUuc29tZSh2ID0+ICEoJ2lkZW50aWZpZXInIGluIHYpKSkge1xuICAgICAgY29uc29sZS53YXJuKCd2YXJpYWJsZXMgcHJvcGVydHkgc2hvdWxkIGJlIGFuIGFycmF5IG9mIFZhcmlhYmxlRGVjbGFyYXRpb24nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9jb250ZXh0ID0ge1xuICAgICAgLi4udGhpcy5fY29udGV4dCxcbiAgICAgIHZhcmlhYmxlczogdGhpcy5fY29udGV4dC52YXJpYWJsZXMubWFwKHZhcmlhYmxlID0+IHtcbiAgICAgICAgY29uc3QgbWF0Y2hpbmdWYWx1ZSA9IHZhbHVlLmZpbmQodiA9PiB2LmlkZW50aWZpZXIgPT09IHZhcmlhYmxlLmlkZW50aWZpZXIpO1xuICAgICAgICBpZiAobWF0Y2hpbmdWYWx1ZSkge1xuICAgICAgICAgIHJldHVybiB7IC4uLnZhcmlhYmxlLCAuLi5tYXRjaGluZ1ZhbHVlIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhcmlhYmxlO1xuICAgICAgfSlcbiAgICB9O1xuXG4gICAgdGhpcy5fY29udGV4dC52YXJpYWJsZXMuZm9yRWFjaCh2YXJpYWJsZSA9PiB7XG4gICAgICBpZiAodmFyaWFibGUudHlwZSA9PT0gJ3Jlc3BvbnNlJykge1xuICAgICAgICBjb25zdCBpbnRlcmFjdGlvbkVsZW1lbnQgPSB0aGlzLl9pbnRlcmFjdGlvbkVsZW1lbnRzLmZpbmQoXG4gICAgICAgICAgKGVsOiBJbnRlcmFjdGlvbikgPT4gZWwucmVzcG9uc2VJZGVudGlmaWVyID09PSB2YXJpYWJsZS5pZGVudGlmaWVyXG4gICAgICAgICk7XG4gICAgICAgIGlmIChpbnRlcmFjdGlvbkVsZW1lbnQpIHtcbiAgICAgICAgICBpbnRlcmFjdGlvbkVsZW1lbnQucmVzcG9uc2UgPSB2YXJpYWJsZS52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodmFyaWFibGUudHlwZSA9PT0gJ291dGNvbWUnKSB7XG4gICAgICAgIHRoaXMuX2ZlZWRiYWNrRWxlbWVudHMuZm9yRWFjaChmZSA9PiBmZS5jaGVja1Nob3dGZWVkYmFjayh2YXJpYWJsZS5pZGVudGlmaWVyKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9pbml0aWFsQ29udGV4dDogUmVhZG9ubHk8SXRlbUNvbnRleHQ+ID0geyAuLi50aGlzLl9jb250ZXh0LCB2YXJpYWJsZXM6IHRoaXMuX2NvbnRleHQudmFyaWFibGVzIH07XG4gIHByaXZhdGUgX2ZlZWRiYWNrRWxlbWVudHM6IFF0aUZlZWRiYWNrW10gPSBbXTtcbiAgcHJpdmF0ZSBfaW50ZXJhY3Rpb25FbGVtZW50czogSW50ZXJhY3Rpb25bXSA9IFtdO1xuXG4gIGFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTtcbiAgICB0aGlzLl9lbWl0PHsgZGV0YWlsOiBRdGlBc3Nlc3NtZW50SXRlbSB9PigncXRpLWFzc2Vzc21lbnQtaXRlbS1jb25uZWN0ZWQnLCB0aGlzKTtcbiAgfVxuXG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgdmFyaWFibGVzIHByb3BlcnR5IGluc3RlYWQgKi9cbiAgc2V0IHJlc3BvbnNlcyhteVJlc3BvbnNlczogUmVzcG9uc2VJbnRlcmFjdGlvbltdKSB7XG4gICAgaWYgKG15UmVzcG9uc2VzKSB7XG4gICAgICBmb3IgKGNvbnN0IHJlc3BvbnNlIG9mIG15UmVzcG9uc2VzKSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlVmFyaWFibGUgPSB0aGlzLmdldFJlc3BvbnNlKHJlc3BvbnNlLnJlc3BvbnNlSWRlbnRpZmllcik7XG4gICAgICAgIGlmIChyZXNwb25zZVZhcmlhYmxlKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVSZXNwb25zZVZhcmlhYmxlKHJlc3BvbnNlLnJlc3BvbnNlSWRlbnRpZmllciwgcmVzcG9uc2UucmVzcG9uc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW50ZXJhY3Rpb246IEludGVyYWN0aW9uIHwgdW5kZWZpbmVkID0gdGhpcy5faW50ZXJhY3Rpb25FbGVtZW50cy5maW5kKFxuICAgICAgICAgIGkgPT4gaS5nZXRBdHRyaWJ1dGUoJ3Jlc3BvbnNlLWlkZW50aWZpZXInKSA9PT0gcmVzcG9uc2UucmVzcG9uc2VJZGVudGlmaWVyXG4gICAgICAgICk7XG4gICAgICAgIGlmIChpbnRlcmFjdGlvbikge1xuICAgICAgICAgIGludGVyYWN0aW9uLnJlc3BvbnNlID0gcmVzcG9uc2UucmVzcG9uc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPHNsb3Q+PC9zbG90PmA7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigncXRpLXJlZ2lzdGVyLXZhcmlhYmxlJywgZSA9PiB7XG4gICAgICB0aGlzLl9jb250ZXh0ID0geyAuLi50aGlzLl9jb250ZXh0LCB2YXJpYWJsZXM6IFsuLi50aGlzLl9jb250ZXh0LnZhcmlhYmxlcywgZS5kZXRhaWwudmFyaWFibGVdIH07XG4gICAgICB0aGlzLl9pbml0aWFsQ29udGV4dCA9IHRoaXMuX2NvbnRleHQ7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigncXRpLXJlZ2lzdGVyLWZlZWRiYWNrJywgKGU6IEN1c3RvbUV2ZW50PFF0aUZlZWRiYWNrPikgPT4ge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGNvbnN0IGZlZWRiYWNrRWxlbWVudCA9IGUuZGV0YWlsO1xuICAgICAgdGhpcy5fZmVlZGJhY2tFbGVtZW50cy5wdXNoKGZlZWRiYWNrRWxlbWVudCk7XG4gICAgICBmZWVkYmFja0VsZW1lbnQuY2hlY2tTaG93RmVlZGJhY2soZmVlZGJhY2tFbGVtZW50Lm91dGNvbWVJZGVudGlmaWVyKTtcbiAgICB9KTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci1pbnRlcmFjdGlvbicsIChlOiBDdXN0b21FdmVudDxudWxsPikgPT4ge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMuX2ludGVyYWN0aW9uRWxlbWVudHMucHVzaChlLnRhcmdldCBhcyBJbnRlcmFjdGlvbik7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdlbmQtYXR0ZW1wdCcsIChlOiBDdXN0b21FdmVudDx7IHJlc3BvbnNlSWRlbnRpZmllcjogc3RyaW5nOyBjb3VudEF0dGVtcHQ6IGJvb2xlYW4gfT4pID0+IHtcbiAgICAgIGNvbnN0IHsgcmVzcG9uc2VJZGVudGlmaWVyLCBjb3VudEF0dGVtcHQgfSA9IGUuZGV0YWlsO1xuICAgICAgdGhpcy51cGRhdGVSZXNwb25zZVZhcmlhYmxlKHJlc3BvbnNlSWRlbnRpZmllciwgJ3RydWUnKTtcbiAgICAgIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKGNvdW50QXR0ZW1wdCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAvLyB3b3JkdCBhYW5nZXJvZXBlbiB2YW51aXQgZGUgcHJvY2Vzc2luZ3RlbXBsYXRlXG4gICAgICAncXRpLXNldC1vdXRjb21lLXZhbHVlJyxcbiAgICAgIChlOiBDdXN0b21FdmVudDx7IG91dGNvbWVJZGVudGlmaWVyOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSB9PikgPT4ge1xuICAgICAgICBjb25zdCB7IG91dGNvbWVJZGVudGlmaWVyLCB2YWx1ZSB9ID0gZS5kZXRhaWw7XG4gICAgICAgIHRoaXMudXBkYXRlT3V0Y29tZVZhcmlhYmxlKG91dGNvbWVJZGVudGlmaWVyLCB2YWx1ZSk7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigncXRpLWludGVyYWN0aW9uLXJlc3BvbnNlJywgdGhpcy5oYW5kbGVVcGRhdGVSZXNwb25zZVZhcmlhYmxlKTtcbiAgfVxuXG4gIHB1YmxpYyBzaG93Q29ycmVjdFJlc3BvbnNlKHNob3c6IGJvb2xlYW4pIHtcbiAgICBjb25zdCByZXNwb25zZVZhcmlhYmxlcyA9IHRoaXMuX2NvbnRleHQudmFyaWFibGVzLmZpbHRlcihcbiAgICAgICh2YXJpOiBSZXNwb25zZVZhcmlhYmxlIHwgT3V0Y29tZVZhcmlhYmxlKSA9PiAnY29ycmVjdFJlc3BvbnNlJyBpbiB2YXJpICYmIHZhcmkuY29ycmVjdFJlc3BvbnNlXG4gICAgKSBhcyBSZXNwb25zZVZhcmlhYmxlW107XG4gICAgY29uc3QgcmVzcG9uc2VzID0gcmVzcG9uc2VWYXJpYWJsZXMubWFwKGNyID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlc3BvbnNlSWRlbnRpZmllcjogY3IuaWRlbnRpZmllcixcbiAgICAgICAgcmVzcG9uc2U6IGNyLmNvcnJlY3RSZXNwb25zZVxuICAgICAgfTtcbiAgICB9KTtcbiAgICBmb3IgKGNvbnN0IHJlc3BvbnNlIG9mIHJlc3BvbnNlcykge1xuICAgICAgY29uc3QgaW50ZXJhY3Rpb246IEludGVyYWN0aW9uIHwgdW5kZWZpbmVkID0gdGhpcy5faW50ZXJhY3Rpb25FbGVtZW50cy5maW5kKFxuICAgICAgICBpID0+IGkuZ2V0QXR0cmlidXRlKCdyZXNwb25zZS1pZGVudGlmaWVyJykgPT09IHJlc3BvbnNlLnJlc3BvbnNlSWRlbnRpZmllclxuICAgICAgKTtcbiAgICAgIGludGVyYWN0aW9uICYmIChpbnRlcmFjdGlvbi5jb3JyZWN0UmVzcG9uc2UgPSBzaG93ID8gcmVzcG9uc2UucmVzcG9uc2UgOiAnJyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHByb2Nlc3NSZXNwb25zZShjb3VudE51bUF0dGVtcHRzOiBib29sZWFuID0gdHJ1ZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJlc3BvbnNlUHJvY2Vzc29yID0gdGhpcy5xdWVyeVNlbGVjdG9yKCdxdGktcmVzcG9uc2UtcHJvY2Vzc2luZycpIGFzIHVua25vd24gYXMgUXRpUmVzcG9uc2VQcm9jZXNzaW5nO1xuICAgIGlmICghcmVzcG9uc2VQcm9jZXNzb3IpIHtcbiAgICAgIC8vIGNvbnNvbGUuaW5mbygnQ2xpZW50IHNpZGUgcmVzcG9uc2UgcHJvY2Vzc2luZyB0ZW1wbGF0ZSBub3QgYXZhaWxhYmxlJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCFyZXNwb25zZVByb2Nlc3Nvci5wcm9jZXNzKSB7XG4gICAgICAvLyBjb25zb2xlLmluZm8oJ0NsaWVudCBzaWRlIHJlc3BvbnNlIHdlYmNvbXBvbmVudHMgbm90IGF2YWlsYWJsZScpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJlc3BvbnNlUHJvY2Vzc29yLnByb2Nlc3MoKTtcblxuICAgIGlmICh0aGlzLmFkYXB0aXZlID09PSAnZmFsc2UnKSB7XG4gICAgICAvLyBpZiBhZGFwYXRpdmUsIGNvbXBsZXRpb25TdGF0dXMgaXMgc2V0IGJ5IHRoZSBwcm9jZXNzaW5nIHRlbXBsYXRlXG4gICAgICB0aGlzLnVwZGF0ZU91dGNvbWVWYXJpYWJsZSgnY29tcGxldGlvblN0YXR1cycsIHRoaXMuX2dldENvbXBsZXRpb25TdGF0dXMoKSk7XG4gICAgfVxuXG4gICAgY291bnROdW1BdHRlbXB0cyAmJlxuICAgICAgdGhpcy51cGRhdGVPdXRjb21lVmFyaWFibGUoXG4gICAgICAgICdudW1BdHRlbXB0cycsXG4gICAgICAgICgrdGhpcy5fY29udGV4dC52YXJpYWJsZXMuZmluZCh2ID0+IHYuaWRlbnRpZmllciA9PT0gJ251bUF0dGVtcHRzJyk/LnZhbHVlICsgMSkudG9TdHJpbmcoKVxuICAgICAgKTtcblxuICAgIHRoaXMuX2VtaXQoJ3F0aS1yZXNwb25zZS1wcm9jZXNzZWQnKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldFJlc3BvbnNlcygpIHtcbiAgICB0aGlzLl9jb250ZXh0ID0gdGhpcy5faW5pdGlhbENvbnRleHQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0UmVzcG9uc2UoaWRlbnRpZmllcjogc3RyaW5nKTogUmVhZG9ubHk8UmVzcG9uc2VWYXJpYWJsZT4ge1xuICAgIHJldHVybiB0aGlzLmdldFZhcmlhYmxlKGlkZW50aWZpZXIpIGFzIFJlc3BvbnNlVmFyaWFibGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0T3V0Y29tZShpZGVudGlmaWVyOiBzdHJpbmcpOiBSZWFkb25seTxPdXRjb21lVmFyaWFibGU+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYXJpYWJsZShpZGVudGlmaWVyKSBhcyBPdXRjb21lVmFyaWFibGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0VmFyaWFibGUoaWRlbnRpZmllcjogc3RyaW5nKTogUmVhZG9ubHk8VmFyaWFibGVEZWNsYXJhdGlvbjxzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGw+PiB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRleHQudmFyaWFibGVzLmZpbmQodiA9PiB2LmlkZW50aWZpZXIgPT09IGlkZW50aWZpZXIpIHx8IG51bGw7XG4gIH1cblxuICAvLyBzYXZpbmcgcHJpdmF0ZXMgaGVyZTogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgcHJpdmF0ZSBoYW5kbGVVcGRhdGVSZXNwb25zZVZhcmlhYmxlKGV2ZW50OiBDdXN0b21FdmVudDxSZXNwb25zZUludGVyYWN0aW9uPikge1xuICAgIGNvbnN0IHsgcmVzcG9uc2VJZGVudGlmaWVyLCByZXNwb25zZSB9ID0gZXZlbnQuZGV0YWlsO1xuICAgIHRoaXMudXBkYXRlUmVzcG9uc2VWYXJpYWJsZShyZXNwb25zZUlkZW50aWZpZXIsIHJlc3BvbnNlKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVSZXNwb25zZVZhcmlhYmxlKGlkZW50aWZpZXI6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fY29udGV4dCA9IHtcbiAgICAgIC4uLnRoaXMuX2NvbnRleHQsXG4gICAgICB2YXJpYWJsZXM6IHRoaXMuX2NvbnRleHQudmFyaWFibGVzLm1hcCh2ID0+ICh2LmlkZW50aWZpZXIgIT09IGlkZW50aWZpZXIgPyB2IDogeyAuLi52LCB2YWx1ZTogdmFsdWUgfSkpXG4gICAgfTtcblxuICAgIHRoaXMuX2VtaXQ8SW50ZXJhY3Rpb25DaGFuZ2VkRGV0YWlscz4oJ3F0aS1pbnRlcmFjdGlvbi1jaGFuZ2VkJywge1xuICAgICAgaXRlbTogdGhpcy5pZGVudGlmaWVyLFxuICAgICAgcmVzcG9uc2VJZGVudGlmaWVyOiBpZGVudGlmaWVyLFxuICAgICAgcmVzcG9uc2U6IHZhbHVlXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5hZGFwdGl2ZSA9PT0gJ2ZhbHNlJykge1xuICAgICAgLy8gaWYgYWRhcGF0aXZlLCBjb21wbGV0aW9uU3RhdHVzIGlzIHNldCBieSB0aGUgcHJvY2Vzc2luZyB0ZW1wbGF0ZVxuICAgICAgdGhpcy51cGRhdGVPdXRjb21lVmFyaWFibGUoJ2NvbXBsZXRpb25TdGF0dXMnLCB0aGlzLl9nZXRDb21wbGV0aW9uU3RhdHVzKCkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVPdXRjb21lVmFyaWFibGUoaWRlbnRpZmllcjogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBvdXRjb21lVmFyaWFibGUgPSB0aGlzLmdldE91dGNvbWUoaWRlbnRpZmllcik7XG4gICAgaWYgKCFvdXRjb21lVmFyaWFibGUpIHtcbiAgICAgIGNvbnNvbGUud2FybihgQ2FuIG5vdCBzZXQgcXRpLW91dGNvbWUtaWRlbnRpZmllcjogJHtpZGVudGlmaWVyfSwgaXQgaXMgbm90IGF2YWlsYWJsZWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2NvbnRleHQgPSB7XG4gICAgICAuLi50aGlzLl9jb250ZXh0LFxuICAgICAgdmFyaWFibGVzOiB0aGlzLl9jb250ZXh0LnZhcmlhYmxlcy5tYXAodiA9PiB7XG4gICAgICAgIGlmICh2LmlkZW50aWZpZXIgIT09IGlkZW50aWZpZXIpIHtcbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnYsXG4gICAgICAgICAgdmFsdWU6IG91dGNvbWVWYXJpYWJsZS5jYXJkaW5hbGl0eSA9PT0gJ3NpbmdsZScgPyB2YWx1ZSA6IFsuLi52LnZhbHVlLCB2YWx1ZSBhcyBzdHJpbmddXG4gICAgICAgIH07XG4gICAgICB9KVxuICAgIH07XG5cbiAgICB0aGlzLl9mZWVkYmFja0VsZW1lbnRzLmZvckVhY2goZmUgPT4gZmUuY2hlY2tTaG93RmVlZGJhY2soaWRlbnRpZmllcikpO1xuXG4gICAgdGhpcy5fZW1pdDxPdXRjb21lQ2hhbmdlZERldGFpbHM+KCdxdGktb3V0Y29tZS1jaGFuZ2VkJywge1xuICAgICAgaXRlbTogdGhpcy5pZGVudGlmaWVyLFxuICAgICAgb3V0Y29tZUlkZW50aWZpZXI6IGlkZW50aWZpZXIsXG4gICAgICB2YWx1ZTogdGhpcy5fY29udGV4dC52YXJpYWJsZXMuZmluZCh2ID0+IHYuaWRlbnRpZmllciA9PT0gaWRlbnRpZmllcik/LnZhbHVlXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9nZXRDb21wbGV0aW9uU3RhdHVzKCk6ICdjb21wbGV0ZWQnIHwgJ2luY29tcGxldGUnIHwgJ25vdF9hdHRlbXB0ZWQnIHwgJ3Vua25vd24nIHtcbiAgICBpZiAodGhpcy5faW50ZXJhY3Rpb25FbGVtZW50cy5ldmVyeShpbnRlcmFjdGlvbkVsZW1lbnQgPT4gaW50ZXJhY3Rpb25FbGVtZW50LnZhbGlkYXRlKCkpKSByZXR1cm4gJ2NvbXBsZXRlZCc7XG4gICAgaWYgKHRoaXMuX2ludGVyYWN0aW9uRWxlbWVudHMuc29tZShpbnRlcmFjdGlvbkVsZW1lbnQgPT4gaW50ZXJhY3Rpb25FbGVtZW50LnZhbGlkYXRlKCkpKSByZXR1cm4gJ2luY29tcGxldGUnO1xuICAgIHJldHVybiAnbm90X2F0dGVtcHRlZCc7XG4gIH1cblxuICBwcml2YXRlIF9lbWl0PFQ+KG5hbWUsIGRldGFpbCA9IG51bGwpIHtcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQ8VD4obmFtZSwge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgICAgZGV0YWlsXG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWFzc2Vzc21lbnQtaXRlbSc6IFF0aUFzc2Vzc21lbnRJdGVtO1xuICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcblxudHlwZSBVcGRhdGVIYW5kbGVyID0gKHByZXY/OiB1bmtub3duLCBuZXh0PzogdW5rbm93bikgPT4gdm9pZDtcblxudHlwZSBOb25VbmRlZmluZWQ8QT4gPSBBIGV4dGVuZHMgdW5kZWZpbmVkID8gbmV2ZXIgOiBBO1xuXG50eXBlIFVwZGF0ZUhhbmRsZXJGdW5jdGlvbktleXM8VCBleHRlbmRzIG9iamVjdD4gPSB7XG4gIFtLIGluIGtleW9mIFRdLT86IE5vblVuZGVmaW5lZDxUW0tdPiBleHRlbmRzIFVwZGF0ZUhhbmRsZXIgPyBLIDogbmV2ZXI7XG59W2tleW9mIFRdO1xuXG5pbnRlcmZhY2UgV2F0Y2hPcHRpb25zIHtcbiAgLyoqXG4gICAqIElmIHRydWUsIHdpbGwgb25seSBzdGFydCB3YXRjaGluZyBhZnRlciB0aGUgaW5pdGlhbCB1cGRhdGUvcmVuZGVyXG4gICAqL1xuICB3YWl0VW50aWxGaXJzdFVwZGF0ZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUnVucyB3aGVuIG9ic2VydmVkIHByb3BlcnRpZXMgY2hhbmdlLCBlLmcuIEBwcm9wZXJ0eSBvciBAc3RhdGUsIGJ1dCBiZWZvcmUgdGhlIGNvbXBvbmVudCB1cGRhdGVzLiBUbyB3YWl0IGZvciBhblxuICogdXBkYXRlIHRvIGNvbXBsZXRlIGFmdGVyIGEgY2hhbmdlIG9jY3VycywgdXNlIGBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlYCBpbiB0aGUgaGFuZGxlci4gVG8gc3RhcnQgd2F0Y2hpbmcgYWZ0ZXIgdGhlXG4gKiBpbml0aWFsIHVwZGF0ZS9yZW5kZXIsIHVzZSBgeyB3YWl0VW50aWxGaXJzdFVwZGF0ZTogdHJ1ZSB9YCBvciBgdGhpcy5oYXNVcGRhdGVkYCBpbiB0aGUgaGFuZGxlci5cbiAqXG4gKiBVc2FnZTpcbiAqXG4gKiBAd2F0Y2goJ3Byb3BOYW1lJylcbiAqIGhhbmRsZVByb3BDaGFuZ2Uob2xkVmFsdWUsIG5ld1ZhbHVlKSB7XG4gKiAgIC4uLlxuICogfVxuICovXG5leHBvcnQgZnVuY3Rpb24gd2F0Y2gocHJvcGVydHlOYW1lOiBzdHJpbmcgfCBzdHJpbmdbXSwgb3B0aW9ucz86IFdhdGNoT3B0aW9ucykge1xuICBjb25zdCByZXNvbHZlZE9wdGlvbnM6IFJlcXVpcmVkPFdhdGNoT3B0aW9ucz4gPSB7XG4gICAgd2FpdFVudGlsRmlyc3RVcGRhdGU6IGZhbHNlLFxuICAgIC4uLm9wdGlvbnNcbiAgfTtcbiAgcmV0dXJuIDxFbGVtQ2xhc3MgZXh0ZW5kcyBMaXRFbGVtZW50Pihwcm90bzogRWxlbUNsYXNzLCBkZWNvcmF0ZWRGbk5hbWU6IFVwZGF0ZUhhbmRsZXJGdW5jdGlvbktleXM8RWxlbUNsYXNzPikgPT4ge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSB1cGRhdGUgaXMgYSBwcm90ZWN0ZWQgcHJvcGVydHlcbiAgICBjb25zdCB7IHVwZGF0ZSB9ID0gcHJvdG87XG4gICAgY29uc3Qgd2F0Y2hlZFByb3BlcnRpZXMgPSBBcnJheS5pc0FycmF5KHByb3BlcnR5TmFtZSkgPyBwcm9wZXJ0eU5hbWUgOiBbcHJvcGVydHlOYW1lXTtcblxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSB1cGRhdGUgaXMgYSBwcm90ZWN0ZWQgcHJvcGVydHlcbiAgICBwcm90by51cGRhdGUgPSBmdW5jdGlvbiAodGhpczogRWxlbUNsYXNzLCBjaGFuZ2VkUHJvcHM6IE1hcDxrZXlvZiBFbGVtQ2xhc3MsIEVsZW1DbGFzc1trZXlvZiBFbGVtQ2xhc3NdPikge1xuICAgICAgd2F0Y2hlZFByb3BlcnRpZXMuZm9yRWFjaChwcm9wZXJ0eSA9PiB7XG4gICAgICAgIGNvbnN0IGtleSA9IHByb3BlcnR5IGFzIGtleW9mIEVsZW1DbGFzcztcbiAgICAgICAgaWYgKGNoYW5nZWRQcm9wcy5oYXMoa2V5KSkge1xuICAgICAgICAgIGNvbnN0IG9sZFZhbHVlID0gY2hhbmdlZFByb3BzLmdldChrZXkpO1xuICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpc1trZXldO1xuXG4gICAgICAgICAgaWYgKG9sZFZhbHVlICE9PSBuZXdWYWx1ZSkge1xuICAgICAgICAgICAgaWYgKCFyZXNvbHZlZE9wdGlvbnMud2FpdFVudGlsRmlyc3RVcGRhdGUgfHwgdGhpcy5oYXNVcGRhdGVkKSB7XG4gICAgICAgICAgICAgICh0aGlzW2RlY29yYXRlZEZuTmFtZV0gYXMgdW5rbm93biBhcyBVcGRhdGVIYW5kbGVyKShvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHVwZGF0ZS5jYWxsKHRoaXMsIGNoYW5nZWRQcm9wcyk7XG4gICAgfTtcbiAgfTtcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAnQGxpdC9jb250ZXh0JztcbmltcG9ydCB7IFZhcmlhYmxlRGVjbGFyYXRpb24gfSBmcm9tICcuLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEl0ZW1Db250ZXh0IHtcbiAgaHJlZj86IHN0cmluZztcbiAgaWRlbnRpZmllcjogc3RyaW5nO1xuICB2YXJpYWJsZXM6IFJlYWRvbmx5QXJyYXk8VmFyaWFibGVEZWNsYXJhdGlvbjxzdHJpbmcgfCBzdHJpbmdbXT4+O1xufVxuXG5leHBvcnQgY29uc3QgaXRlbUNvbnRleHRWYXJpYWJsZXMgPSBbXG4gIHtcbiAgICBpZGVudGlmaWVyOiAnY29tcGxldGlvblN0YXR1cycsXG4gICAgY2FyZGluYWxpdHk6ICdzaW5nbGUnLFxuICAgIGJhc2VUeXBlOiAnc3RyaW5nJyxcbiAgICB2YWx1ZTogJ3Vua25vd24nLFxuICAgIHR5cGU6ICdvdXRjb21lJ1xuICB9LFxuICB7XG4gICAgaWRlbnRpZmllcjogJ251bUF0dGVtcHRzJyxcbiAgICBjYXJkaW5hbGl0eTogJ3NpbmdsZScsXG4gICAgYmFzZVR5cGU6ICdpbnRlZ2VyJyxcbiAgICB2YWx1ZTogJzAnLFxuICAgIHR5cGU6ICdyZXNwb25zZSdcbiAgfVxuXSBhcyBWYXJpYWJsZURlY2xhcmF0aW9uPHN0cmluZyB8IHN0cmluZ1tdPltdO1xuXG5leHBvcnQgY29uc3QgaXRlbUNvbnRleHQgPSBjcmVhdGVDb250ZXh0PEl0ZW1Db250ZXh0PignaXRlbScpO1xuIiwgImltcG9ydCB7IExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBxdGlUcmFuc2Zvcm1JdGVtIH0gZnJvbSAnLi4vLi4vcXRpLXRyYW5zZm9ybWVycyc7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGN1c3RvbSBlbGVtZW50IGZvciByZWZlcmVuY2luZyBhbiBhc3Nlc3NtZW50IHN0aW11bHVzLlxuICovXG5AY3VzdG9tRWxlbWVudCgncXRpLWFzc2Vzc21lbnQtc3RpbXVsdXMtcmVmJylcbmV4cG9ydCBjbGFzcyBRdGlBc3Nlc3NtZW50U3RpbXVsdXNSZWYgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgLyoqXG4gICAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBzdGltdWx1cy5cbiAgICovXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KSBpZGVudGlmaWVyID0gJyc7XG5cbiAgLyoqXG4gICAqIFRoZSBocmVmIG9mIHRoZSBzdGltdWx1cy5cbiAgICovXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KSBocmVmID0gJyc7XG5cbiAgLyoqXG4gICAqIExpZmVjeWNsZSBtZXRob2QgY2FsbGVkIHdoZW4gdGhlIGVsZW1lbnQgaXMgY29ubmVjdGVkIHRvIHRoZSBET00uXG4gICAqIExvYWRzIGFuZCBhcHBlbmRzIHRoZSBzdGltdWx1cyBpZiB0aGUgJ3F0aS1hc3Nlc3NtZW50LXN0aW11bHVzLXJlZi1jb25uZWN0ZWQnIGV2ZW50IGlzIG5vdCBwcmV2ZW50ZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuICAgIGNvbnN0IGV2ZW50ID0gbmV3IEV2ZW50KCdxdGktYXNzZXNzbWVudC1zdGltdWx1cy1yZWYtY29ubmVjdGVkJywgeyBjYW5jZWxhYmxlOiB0cnVlLCBidWJibGVzOiB0cnVlIH0pO1xuICAgIGNvbnN0IGlzUHJldmVudGVkID0gdGhpcy5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcblxuICAgIGlmIChpc1ByZXZlbnRlZCkge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuY2xvc2VzdCgncXRpLWFzc2Vzc21lbnQtaXRlbScpO1xuXG4gICAgICBjb25zdCBzdGltdWx1c1JlZiA9IGl0ZW0ucXVlcnlTZWxlY3RvcihgW2RhdGEtc3RpbXVsdXMtaWRyZWY9JHt0aGlzLmlkZW50aWZpZXJ9XWApO1xuICAgICAgaWYgKHN0aW11bHVzUmVmKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZEFuZEFwcGVuZFN0aW11bHVzKHN0aW11bHVzUmVmKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgU3RpbXVsdXMgd2l0aCBkYXRhLXN0aW11bHVzLWlkcmVmICR7dGhpcy5pZGVudGlmaWVyfSBub3QgZm91bmRgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgYW5kIGFwcGVuZHMgdGhlIHN0aW11bHVzIHRvIHRoZSBzcGVjaWZpZWQgZWxlbWVudC5cbiAgICogQHBhcmFtIHN0aW11bHVzUmVmIC0gVGhlIGVsZW1lbnQgdG8gd2hpY2ggdGhlIHN0aW11bHVzIHdpbGwgYmUgYXBwZW5kZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbG9hZEFuZEFwcGVuZFN0aW11bHVzKHN0aW11bHVzUmVmOiBFbGVtZW50KSB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuaHJlZi5zdWJzdHJpbmcoMCwgdGhpcy5ocmVmLmxhc3RJbmRleE9mKCcvJykpO1xuICAgIGNvbnN0IHN0aW11bHVzID0gYXdhaXQgcXRpVHJhbnNmb3JtSXRlbSgpXG4gICAgICAubG9hZCh0aGlzLmhyZWYpXG4gICAgICAudGhlbihhcGkgPT4gYXBpLnBhdGgocGF0aCkuaHRtbGRvYygpKTtcbiAgICBpZiAoc3RpbXVsdXMpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnRzID0gc3RpbXVsdXMucXVlcnlTZWxlY3RvckFsbCgncXRpLXN0aW11bHVzLWJvZHksIHF0aS1zdHlsZXNoZWV0Jyk7XG4gICAgICBzdGltdWx1c1JlZi5hcHBlbmQoLi4uZWxlbWVudHMpO1xuICAgIH1cbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktYXNzZXNzbWVudC1zdGltdWx1cy1yZWYnOiBRdGlBc3Nlc3NtZW50U3RpbXVsdXNSZWY7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50LCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgd2F0Y2ggfSBmcm9tICcuLi8uLi8uLi8uLi9kZWNvcmF0b3JzL3dhdGNoJztcblxuY29uc3QgS0VZQ09ERSA9IHtcbiAgU1BBQ0U6IDMyXG59O1xuXG4vKipcbiAqIEBzdW1tYXJ5IHF0aS1jaG9pY2UgaXMgdXNlZCBieSBxdGktc2ltcGxlLWNob2ljZSwgcXRpLWlubGluZS1jaG9pY2UsIHF0aS1ob3R0ZXh0LCBxdGktaG90c3BvdC1jaG9pY2UuXG4gKlxuICogQHNpbmNlIDEuMFxuICogQHN0YXR1cyBzdGFibGVcbiAqXG4gKiBAZXZlbnQgcXRpLXJlZ2lzdGVyLWNob2ljZSAtIHJlZ2lzdGVyIGl0c2VsdmVzIG9uIGEgcXRpLWNob2ljZS1pbnRlcmFjdGlvbiBlbGVtZW50LlxuICogQGV2ZW50IHF0aS1sb29zZS1jaG9pY2UgLSBkZS1yZWdpc3RlciBpdHNlbHZlcyBvbiBhIHF0aS1jaG9pY2UtaW50ZXJhY3Rpb24gZWxlbWVudC5cbiAqIEBldmVudCBxdGktY2hvaWNlLWVsZW1lbnQtc2VsZWN0ZWQgLSBFbWl0dGVkIHdoZW4gdGhlIGNob2ljZSBpcyBzZWxlY3RlZC5cbiAqXG4gKiBAc2xvdCAtIFRoZSBjaG9pY2VzIHNsb3QgZWxlbWVudFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUXRpQ2hvaWNlIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KSBpZGVudGlmaWVyOiBzdHJpbmc7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogTnVtYmVyLCByZWZsZWN0OiB0cnVlIH0pIHRhYmluZGV4OiBudW1iZXIgfCB1bmRlZmluZWQgPSAwO1xuXG4gIEBwcm9wZXJ0eSh7XG4gICAgcmVmbGVjdDogdHJ1ZSxcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGF0dHJpYnV0ZTogJ2FyaWEtZGlzYWJsZWQnLFxuICAgIGNvbnZlcnRlcjoge1xuICAgICAgdG9BdHRyaWJ1dGU6IHZhbHVlID0+IHZhbHVlXG4gICAgfVxuICB9KVxuICBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gIEBwcm9wZXJ0eSh7XG4gICAgcmVmbGVjdDogdHJ1ZSxcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGF0dHJpYnV0ZTogJ2FyaWEtcmVhZG9ubHknLFxuICAgIGNvbnZlcnRlcjoge1xuICAgICAgdG9BdHRyaWJ1dGU6IHZhbHVlID0+IHZhbHVlXG4gICAgfVxuICB9KVxuICByZWFkb25seSA9IGZhbHNlO1xuXG4gIEBwcm9wZXJ0eSh7XG4gICAgcmVmbGVjdDogdHJ1ZSxcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGF0dHJpYnV0ZTogJ2FyaWEtY2hlY2tlZCcsXG4gICAgY29udmVydGVyOiB7XG4gICAgICB0b0F0dHJpYnV0ZTogdmFsdWUgPT4gdmFsdWVcbiAgICB9XG4gIH0pXG4gIGNoZWNrZWQgPSBmYWxzZTtcblxuICBAd2F0Y2goJ2Rpc2FibGVkJywgeyB3YWl0VW50aWxGaXJzdFVwZGF0ZTogdHJ1ZSB9KVxuICBoYW5kbGVEaXNhYmxlZENoYW5nZShfOiBib29sZWFuLCBkaXNhYmxlZDogYm9vbGVhbikge1xuICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgdGhpcy50YWJpbmRleCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuYmx1cigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRhYkluZGV4ID0gMDtcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX29uS2V5VXApO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkNsaWNrKTtcblxuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBDdXN0b21FdmVudCgncXRpLXJlZ2lzdGVyLWNob2ljZScsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbXBvc2VkOiB0cnVlXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5fb25LZXlVcCk7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX29uQ2xpY2spO1xuXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdxdGktbG9vc2UtY2hvaWNlJywge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWVcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldCgpIHtcbiAgICB0aGlzLmNoZWNrZWQgPSBmYWxzZTtcbiAgICB0aGlzLmRpc2FibGVkID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIF9vbktleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmFsdEtleSkgcmV0dXJuO1xuXG4gICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XG4gICAgICBjYXNlIEtFWUNPREUuU1BBQ0U6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuX3RvZ2dsZUNoZWNrZWQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfb25DbGljaygpIHtcbiAgICB0aGlzLl90b2dnbGVDaGVja2VkKCk7XG4gIH1cblxuICBwcml2YXRlIF90b2dnbGVDaGVja2VkKCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHJldHVybjtcbiAgICB0aGlzLmNoZWNrZWQgPSAhdGhpcy5jaGVja2VkO1xuXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdxdGktY2hvaWNlLWVsZW1lbnQtc2VsZWN0ZWQnLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgICAgZGV0YWlsOiB7IGlkZW50aWZpZXI6IHRoaXMuaWRlbnRpZmllciwgY2hlY2tlZDogdGhpcy5jaGVja2VkIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHZhbGlkYXRlQWxsUHJvcHMoKSB7XG4gICAgaWYgKCF0aGlzLmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgaWYgKCF0aGlzLnZhbGlkYXRlQWxsUHJvcHMoKSkge1xuICAgICAgY29uc29sZS53YXJuKGBJbnZhbGlkIHByb3BzIGZvciAke3RoaXMub3V0ZXJIVE1MfWAsIGBtaXNzaW5nIGlkZW50aWZpZXJgKTtcbiAgICB9XG4gICAgcmV0dXJuIGh0bWxgIDxzbG90Pjwvc2xvdD4gYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktY2hvaWNlJzogUXRpQ2hvaWNlO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IGh0bWwsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3F0aS1pdGVtLWJvZHkuc3R5bGVzJztcbmltcG9ydCB0eXBlIHsgQ1NTUmVzdWx0R3JvdXAgfSBmcm9tICdsaXQnO1xuXG4vKipcbiAqIEBzdW1tYXJ5IFRoZSBxdGktaXRlbS1ib2R5IG5vZGUgY29udGFpbnMgdGhlIHRleHQsIGdyYXBoaWNzLCBtZWRpYSBvYmplY3RzIGFuZCBpbnRlcmFjdGlvbnMgdGhhdCBkZXNjcmliZSB0aGUgaXRlbSdzIGNvbnRlbnQgYW5kIGluZm9ybWF0aW9uIGFib3V0IGhvdyBpdCBpcyBzdHJ1Y3R1cmVkLlxuICogQGRvY3VtZW50YXRpb24gaHR0cHM6Ly93d3cuaW1zZ2xvYmFsLm9yZy9zcGVjL3F0aS92M3AwL2ltcGwjaC5zcGhwbzZsdTZ6cWlcbiAqIEBzdGF0dXMgc3RhYmxlXG4gKiBAc2luY2UgNC4wXG4gKlxuICogQHNsb3QgLSBpdGVtIGJvZHkgY29udGVudC5cbiAqIEBzbG90IHF0aS1ydWJyaWMtYmxvY2sgLSB0aGUgcXRpIHJ1YnJpYyBibG9jayBpcyBwbGFjZWQgYWJvdmUgdGhlIGl0ZW1cbiAqXG4gKi9cbkBjdXN0b21FbGVtZW50KCdxdGktaXRlbS1ib2R5JylcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFF0aUl0ZW1Cb2R5IGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIHN0YXRpYyBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gc3R5bGVzO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdCBuYW1lPVwicXRpLXJ1YnJpYy1ibG9ja1wiPjwvc2xvdD48c2xvdD48L3Nsb3Q+YDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktaXRlbS1ib2R5JzogUXRpSXRlbUJvZHk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjc3MgfSBmcm9tICdsaXQnO1xuXG5leHBvcnQgZGVmYXVsdCBjc3NgXG4gIDpob3N0IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxuYDtcbiIsICJpbXBvcnQgeyBodG1sLCBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5AY3VzdG9tRWxlbWVudCgncXRpLXByb21wdCcpXG5leHBvcnQgY2xhc3MgUXRpUHJvbXB0IGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdD48L3Nsb3Q+YDtcbiAgfVxuXG4gIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIC8vIGlmIHByb21wdHMgYXJlIGluIGludGVyYWN0aW9ucyB0aGV5IHNob3VsZCBoYXZlIGEgc2xvdCwgc28gdGhlIHByb21wdCBoYXMgdG8gZ28gdGhlcmVcbiAgICAvLyBpZiBwcm9tcHQgaXMgaW4gdGhlIGJvZHksIHRoZW4ganVzdCBkaXNwbGF5IHRoZSBwcm9tcHQgdGhlcmUuXG4gICAgLy8gQSBiZXR0ZXIgY2hlY2sgd291bGQgYmUgdGhlIGxhdHRlciwgYnV0IG5vdCBjYW4ndCBnZXQgdGhyb3VnaCB0aGUgc2hhZG93cm9vdCB0byBmaW5kIHRoZSBzbG90XG4gICAgY29uc3QgaW5JbnRlcmFjdGlvbiA9IHRoaXMucGFyZW50RWxlbWVudC50YWdOYW1lLmVuZHNXaXRoKCdJTlRFUkFDVElPTicpO1xuICAgIGluSW50ZXJhY3Rpb24gJiYgdGhpcy5zZXRBdHRyaWJ1dGUoJ3Nsb3QnLCAncHJvbXB0Jyk7XG4gICAgLy8gY29uc3QgcHJvbXB0U2xvdCA9IHRoaXMucGFyZW50RWxlbWVudC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXCJbbmFtZT0ncHJvbXB0J11cIik7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXByb21wdCc6IFF0aVByb21wdDtcbiAgfVxufVxuIiwgImltcG9ydCB7IExpdEVsZW1lbnQsIFByb3BlcnR5VmFsdWVNYXAgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1zdHlsZXNoZWV0JylcbmV4cG9ydCBjbGFzcyBRdGlTdHlsZXNoZWV0IGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIHByaXZhdGUgc3R5bGVMaW5rOiBIVE1MU3R5bGVFbGVtZW50IHwgSFRNTExpbmtFbGVtZW50O1xuXG4gIC8vIHByb3RlY3RlZCBjcmVhdGVSZW5kZXJSb290KCk6IEhUTUxFbGVtZW50IHwgRG9jdW1lbnRGcmFnbWVudCB7XG4gIC8vICAgcmV0dXJuIHRoaXM7XG4gIC8vIH1cblxuICBwcm90ZWN0ZWQgZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZU1hcDxhbnk+IHwgTWFwPFByb3BlcnR5S2V5LCB1bmtub3duPik6IHZvaWQge1xuICAgIHN1cGVyLmZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgY29uc3QgaXRlbSA9IHRoaXM7XG4gICAgY29uc3QgbGluayA9IHRoaXMuZ2V0QXR0cmlidXRlKCdocmVmJyk7XG5cbiAgICBpZiAobGluayAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3R5bGVzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpO1xuICAgICAgc3R5bGVzLnJlbCA9ICdzdHlsZXNoZWV0JztcbiAgICAgIHN0eWxlcy50eXBlID0gJ3RleHQvY3NzJztcbiAgICAgIHN0eWxlcy5tZWRpYSA9ICdzY3JlZW4nO1xuICAgICAgc3R5bGVzLmhyZWYgPSBsaW5rO1xuICAgICAgaXRlbS5hcHBlbmRDaGlsZChzdHlsZXMpO1xuICAgICAgdGhpcy5zdHlsZUxpbmsgPSBzdHlsZXM7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGV4dENvbnRlbnQgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0eWxlcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgICBzdHlsZXMubWVkaWEgPSAnc2NyZWVuJztcbiAgICAgIHN0eWxlcy50ZXh0Q29udGVudCA9IHRoaXMudGV4dENvbnRlbnQ7XG4gICAgICBpdGVtLmFwcGVuZENoaWxkKHN0eWxlcyk7XG4gICAgICB0aGlzLnN0eWxlTGluayA9IHN0eWxlcztcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBpZiAodGhpcy5zdHlsZUxpbmspIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc3R5bGVMaW5rLnJlbW92ZSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ2NvdWxkIG5vdCByZW1vdmUgc3R5bGVzaGVldCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktc3R5bGVzaGVldCc6IFF0aVN0eWxlc2hlZXQ7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjb25zdW1lIH0gZnJvbSAnQGxpdC9jb250ZXh0JztcbmltcG9ydCB7IGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSwgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBCYXNlVHlwZSwgQ2FyZGluYWxpdHkgfSBmcm9tICcuLi8uLi9pbnRlcm5hbC9leHByZXNzaW9uLXJlc3VsdCc7XG5pbXBvcnQgeyBPdXRjb21lVmFyaWFibGUgfSBmcm9tICcuLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgSXRlbUNvbnRleHQsIGl0ZW1Db250ZXh0IH0gZnJvbSAnLi4vLi4vcXRpLWFzc2Vzc21lbnQtaXRlbS9xdGktYXNzZXNzbWVudC1pdGVtLmNvbnRleHQnO1xuaW1wb3J0IHsgUXRpVmFyaWFibGVEZWNsYXJhdGlvbiB9IGZyb20gJy4uL3F0aS12YXJpYWJsZS1kZWNsYXJhdGlvbic7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktb3V0Y29tZS1kZWNsYXJhdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpT3V0Y29tZURlY2xhcmF0aW9uIGV4dGVuZHMgUXRpVmFyaWFibGVEZWNsYXJhdGlvbiB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnYmFzZS10eXBlJyB9KSBiYXNlVHlwZTogQmFzZVR5cGU7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnZXh0ZXJuYWwtc2NvcmVkJyB9KSBleHRlcm5hbFNjb3JlZDogU3RyaW5nO1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgaWRlbnRpZmllcjogc3RyaW5nO1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgY2FyZGluYWxpdHk6IENhcmRpbmFsaXR5O1xuXG4gIEBjb25zdW1lKHsgY29udGV4dDogaXRlbUNvbnRleHQsIHN1YnNjcmliZTogdHJ1ZSB9KVxuICBAc3RhdGUoKVxuICBwdWJsaWMgaXRlbUNvbnRleHQ/OiBJdGVtQ29udGV4dDtcblxuICBzdGF0aWMgc3R5bGVzID0gW1xuICAgIGNzc2BcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICBgXG4gIF07XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5pdGVtQ29udGV4dD8udmFyaWFibGVzLmZpbmQodiA9PiB2LmlkZW50aWZpZXIgPT09IHRoaXMuaWRlbnRpZmllcik/LnZhbHVlO1xuICAgIHJldHVybiBodG1sYCR7SlNPTi5zdHJpbmdpZnkodmFsdWUsIG51bGwsIDIpfWA7XG4gIH1cblxuICBnZXQgaW50ZXJwb2xhdGlvblRhYmxlKCk6IE1hcDxudW1iZXIsIG51bWJlcj4gfCBudWxsIHtcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMucXVlcnlTZWxlY3RvcigncXRpLWludGVycG9sYXRpb24tdGFibGUnKTtcbiAgICBpZiAodGFibGUpIHtcbiAgICAgIGNvbnN0IGVudHJpZXMgPSBuZXcgTWFwPG51bWJlciwgbnVtYmVyPigpO1xuICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiB0YWJsZS5xdWVyeVNlbGVjdG9yQWxsKCdxdGktaW50ZXJwb2xhdGlvbi10YWJsZS1lbnRyeScpKSB7XG4gICAgICAgIGlmICghZW50cnkuZ2V0QXR0cmlidXRlKCdzb3VyY2UtdmFsdWUnKSAmJiBlbnRyeS5nZXRBdHRyaWJ1dGUoJ3RhcmdldC12YWx1ZScpKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignc291cmNlLXZhbHVlIG9yIHRhcmdldC12YWx1ZSBpcyBtaXNzaW5nIGluIHF0aS1pbnRlcnBvbGF0aW9uLXRhYmxlLWVudHJ5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc291cmNlVmFsdWUgPSBwYXJzZUludChlbnRyeS5nZXRBdHRyaWJ1dGUoJ3NvdXJjZS12YWx1ZScpKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0VmFsdWUgPSBwYXJzZUludChlbnRyeS5nZXRBdHRyaWJ1dGUoJ3RhcmdldC12YWx1ZScpKTtcbiAgICAgICAgaWYgKGlzTmFOKHNvdXJjZVZhbHVlKSB8fCBpc05hTih0YXJnZXRWYWx1ZSkpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdzb3VyY2UtdmFsdWUgb3IgdGFyZ2V0LXZhbHVlIGlzIG5vdCBhIG51bWJlciBpbiBxdGktaW50ZXJwb2xhdGlvbi10YWJsZS1lbnRyeScpO1xuICAgICAgICB9XG4gICAgICAgIGVudHJpZXMuc2V0KHNvdXJjZVZhbHVlLCB0YXJnZXRWYWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZW50cmllcztcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuICAgIGNvbnN0IG91dGNvbWVWYXJpYWJsZTogT3V0Y29tZVZhcmlhYmxlID0ge1xuICAgICAgaWRlbnRpZmllcjogdGhpcy5pZGVudGlmaWVyLFxuICAgICAgY2FyZGluYWxpdHk6IHRoaXMuY2FyZGluYWxpdHksXG4gICAgICBiYXNlVHlwZTogdGhpcy5iYXNlVHlwZSxcbiAgICAgIHR5cGU6ICdvdXRjb21lJyxcbiAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgaW50ZXJwb2xhdGlvblRhYmxlOiB0aGlzLmludGVycG9sYXRpb25UYWJsZVxuICAgIH07XG4gICAgb3V0Y29tZVZhcmlhYmxlLnZhbHVlID0gdGhpcy5kZWZhdWx0VmFsdWVzKG91dGNvbWVWYXJpYWJsZSk7XG5cbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3F0aS1yZWdpc3Rlci12YXJpYWJsZScsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWUsXG4gICAgICAgIGRldGFpbDogeyB2YXJpYWJsZTogb3V0Y29tZVZhcmlhYmxlIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktb3V0Y29tZS1kZWNsYXJhdGlvbic6IFF0aU91dGNvbWVEZWNsYXJhdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IGh0bWwsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IFZhcmlhYmxlRGVjbGFyYXRpb24gfSBmcm9tICcuLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLXZhcmlhYmxlZGVjbGFyYXRpb24nKVxuZXhwb3J0IGNsYXNzIFF0aVZhcmlhYmxlRGVjbGFyYXRpb24gZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRlZmF1bHRWYWx1ZXModmFyaWFibGU6IFZhcmlhYmxlRGVjbGFyYXRpb248c3RyaW5nIHwgc3RyaW5nW10gfCBudWxsPikge1xuICAgIGNvbnN0IGh0bWxWYWx1ZXMgPSBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbCgncXRpLWRlZmF1bHQtdmFsdWUgPiBxdGktdmFsdWUnKSk7XG5cbiAgICBpZiAoaHRtbFZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZXMgPSBodG1sVmFsdWVzLm1hcChuID0+IG4uaW5uZXJIVE1MKTtcbiAgICBpZiAoZGVmYXVsdFZhbHVlcy5sZW5ndGggPiAxIHx8IHZhcmlhYmxlLmNhcmRpbmFsaXR5ID09PSAnbXVsdGlwbGUnIHx8IHZhcmlhYmxlLmNhcmRpbmFsaXR5ID09PSAnb3JkZXJlZCcpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWVzO1xuICAgIH1cbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlc1swXTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktdmFyaWFibGVkZWNsYXJhdGlvbic6IFF0aVZhcmlhYmxlRGVjbGFyYXRpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjb25zdW1lIH0gZnJvbSAnQGxpdC9jb250ZXh0JztcbmltcG9ydCB7IGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSwgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBCYXNlVHlwZSwgQ2FyZGluYWxpdHkgfSBmcm9tICcuLi8uLi9pbnRlcm5hbC9leHByZXNzaW9uLXJlc3VsdCc7XG5pbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IEl0ZW1Db250ZXh0LCBpdGVtQ29udGV4dCB9IGZyb20gJy4uLy4uL3F0aS1hc3Nlc3NtZW50LWl0ZW0vcXRpLWFzc2Vzc21lbnQtaXRlbS5jb250ZXh0JztcbmltcG9ydCB7IFF0aU1hcHBpbmcgfSBmcm9tICcuLi8uLi9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktbWFwcGluZy9xdGktbWFwcGluZyc7XG5pbXBvcnQgeyBRdGlWYXJpYWJsZURlY2xhcmF0aW9uIH0gZnJvbSAnLi4vcXRpLXZhcmlhYmxlLWRlY2xhcmF0aW9uJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1yZXNwb25zZS1kZWNsYXJhdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpUmVzcG9uc2VEZWNsYXJhdGlvbiBleHRlbmRzIFF0aVZhcmlhYmxlRGVjbGFyYXRpb24ge1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2Jhc2UtdHlwZScgfSkgYmFzZVR5cGU6IEJhc2VUeXBlO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KSBpZGVudGlmaWVyOiBzdHJpbmc7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIGNhcmRpbmFsaXR5OiBDYXJkaW5hbGl0eTtcblxuICBAY29uc3VtZSh7IGNvbnRleHQ6IGl0ZW1Db250ZXh0LCBzdWJzY3JpYmU6IHRydWUgfSlcbiAgQHN0YXRlKClcbiAgcHVibGljIGl0ZW1Db250ZXh0PzogSXRlbUNvbnRleHQ7XG5cbiAgc3RhdGljIHN0eWxlcyA9IFtcbiAgICBjc3NgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgYFxuICBdO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaXRlbUNvbnRleHQ/LnZhcmlhYmxlcy5maW5kKHYgPT4gdi5pZGVudGlmaWVyID09PSB0aGlzLmlkZW50aWZpZXIpPy52YWx1ZTtcbiAgICByZXR1cm4gaHRtbGAke0pTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCAyKX1gO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cbiAgICBjb25zdCByZXNwb25zZVZhcmlhYmxlOiBSZXNwb25zZVZhcmlhYmxlID0ge1xuICAgICAgYmFzZVR5cGU6IHRoaXMuYmFzZVR5cGUsXG4gICAgICBpZGVudGlmaWVyOiB0aGlzLmlkZW50aWZpZXIsXG4gICAgICBjb3JyZWN0UmVzcG9uc2U6IHRoaXMuY29ycmVjdFJlc3BvbnNlLFxuICAgICAgY2FyZGluYWxpdHk6IHRoaXMuY2FyZGluYWxpdHkgfHwgJ3NpbmdsZScsXG4gICAgICBtYXBwaW5nOiB0aGlzLm1hcHBpbmcsXG4gICAgICB2YWx1ZTogbnVsbCxcbiAgICAgIHR5cGU6ICdyZXNwb25zZScsXG4gICAgICBjYW5kaWRhdGVSZXNwb25zZTogbnVsbFxuICAgIH07XG4gICAgcmVzcG9uc2VWYXJpYWJsZS52YWx1ZSA9IHRoaXMuZGVmYXVsdFZhbHVlcyhyZXNwb25zZVZhcmlhYmxlKTtcblxuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBDdXN0b21FdmVudCgncXRpLXJlZ2lzdGVyLXZhcmlhYmxlJywge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgICAgZGV0YWlsOiB7IHZhcmlhYmxlOiByZXNwb25zZVZhcmlhYmxlIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGNvcnJlY3RSZXNwb25zZSgpOiBzdHJpbmcgfCBzdHJpbmdbXSB7XG4gICAgbGV0IHJlc3VsdDogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgY29uc3QgY29ycmVjdFJlc3BvbnNlID0gdGhpcy5xdWVyeVNlbGVjdG9yKCdxdGktY29ycmVjdC1yZXNwb25zZScpO1xuICAgIGlmIChjb3JyZWN0UmVzcG9uc2UpIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IGNvcnJlY3RSZXNwb25zZS5xdWVyeVNlbGVjdG9yQWxsKCdxdGktdmFsdWUnKTtcbiAgICAgIGlmICh0aGlzLmNhcmRpbmFsaXR5ID09PSAnc2luZ2xlJyAmJiB2YWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXN1bHQgPSB2YWx1ZXNbMF0udGV4dENvbnRlbnQ7XG4gICAgICAgIHZhbHVlc1swXS5yZW1vdmUoKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jYXJkaW5hbGl0eSAhPT0gJ3NpbmdsZScpIHtcbiAgICAgICAgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2godmFsdWVzW2ldLnRleHRDb250ZW50KTtcbiAgICAgICAgICB2YWx1ZXNbaV0ucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IG1hcHBpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcigncXRpLW1hcHBpbmcnKSBhcyBRdGlNYXBwaW5nO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1yZXNwb25zZS1kZWNsYXJhdGlvbic6IFF0aVJlc3BvbnNlRGVjbGFyYXRpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktY29tcGFuaW9uLW1hdGVyaWFscy1pbmZvJylcbmV4cG9ydCBjbGFzcyBRdGlDb21wYW5pb25NYXRlcmlhbHNJbmZvIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIC8vIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBjc3NgXG4gIC8vICAgc2xvdCB7XG4gIC8vICAgICBkaXNwbGF5OiBoaWRkZW47XG4gIC8vICAgfVxuICAvLyBgO1xuICAvLyBvdmVycmlkZSByZW5kZXIoKSB7XG4gIC8vICAgcmV0dXJuIGh0bWxgIDxzbG90Pjwvc2xvdD4gYDtcbiAgLy8gfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktY29tcGFuaW9uLW1hdGVyaWFscy1pbmZvJzogUXRpQ29tcGFuaW9uTWF0ZXJpYWxzSW5mbztcbiAgfVxufVxuIiwgImltcG9ydCB7IExpdEVsZW1lbnQsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1jb250ZW50LWJvZHknKVxuZXhwb3J0IGNsYXNzIFF0aUNvbnRlbnRCb2R5IGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdD48L3Nsb3Q+YDtcbiAgfVxufVxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWNvbnRlbnQtYm9keSc6IFF0aUNvbnRlbnRCb2R5O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgTGl0RWxlbWVudCwgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgd2F0Y2ggfSBmcm9tICcuLi8uLi9kZWNvcmF0b3JzL3dhdGNoJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1ydWJyaWMtYmxvY2snKVxuZXhwb3J0IGNsYXNzIFF0aVJ1YnJpY0Jsb2NrIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KSBvdmVycmlkZSBpZDsgLy8gPVwicXRpQXNwZWN0SW5ob3VkUnVicmljQmxvY2tcIlxuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KSB1c2U6ICdpbnN0cnVjdGlvbnMnIHwgJ3Njb3JpbmcnIHwgJ25hdmlnYXRpb24nOyAvLyAgPSBcInNjb3JpbmdcIlxuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KSB2aWV3OiAnYXV0aG9yJyB8ICdjYW5kaWRhdGUnIHwgJ3Byb2N0b3InIHwgJ3Njb3JlcicgfCAndGVzdENvbnN0cnVjdG9yJyB8ICd0dXRvcic7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdjbGFzcycgfSkgY2xhc3NOYW1lcztcbiAgQHdhdGNoKCdjbGFzc05hbWVzJywgeyB3YWl0VW50aWxGaXJzdFVwZGF0ZTogdHJ1ZSB9KVxuICBoYW5kbGVjbGFzc05hbWVzQ2hhbmdlKG9sZCwgZGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBjbGFzc05hbWVzID0gdGhpcy5jbGFzc05hbWVzLnNwbGl0KCcgJyk7XG4gICAgY2xhc3NOYW1lcy5mb3JFYWNoKChjbGFzc05hbWU6IHN0cmluZykgPT4ge1xuICAgICAgc3dpdGNoIChjbGFzc05hbWUpIHtcbiAgICAgICAgY2FzZSAncXRpLXJ1YnJpYy1kaXNjcmV0aW9uYXJ5LXBsYWNlbWVudCc6XG4gICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ3Nsb3QnLCAncXRpLXJ1YnJpYy1ibG9jaycpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdxdGktcnVicmljLWlubGluZSc6XG4gICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ3Nsb3QnLCAnJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gY3NzYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgYDtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPHNsb3Q+PC9zbG90PmA7XG4gIH1cblxuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIC8vIGJ5IGRlZmF1bHQgcHV0IHRoaXMgaW4gYSBzbG90IGluIHRoZSBpdGVtLWJvZHlcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgnc2xvdCcsICdxdGktcnVicmljLWJsb2NrJyk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXJ1YnJpYy1ibG9jayc6IFF0aVJ1YnJpY0Jsb2NrO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgUHJvcGVydHlWYWx1ZU1hcCwgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBRdGlGZWVkYmFjayB9IGZyb20gJy4uL3F0aS1mZWVkYmFjayc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktZmVlZGJhY2stYmxvY2snKVxuZXhwb3J0IGNsYXNzIFF0aUZlZWRiYWNrQmxvY2sgZXh0ZW5kcyBRdGlGZWVkYmFjayB7XG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBjc3NgXG4gICAgOmhvc3Qge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICAgIC5vbiB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gICAgLm9mZiB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgYDtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgIDxzbG90IHBhcnQ9XCJmZWVkYmFja1wiIGNsYXNzPVwiZmVlZGJhY2sgJHt0aGlzLnNob3dTdGF0dXN9XCI+PC9zbG90PiBgO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVNYXA8YW55PiB8IE1hcDxQcm9wZXJ0eUtleSwgdW5rbm93bj4pOiB2b2lkIHtcbiAgICB0aGlzLmNoZWNrU2hvd0ZlZWRiYWNrKHRoaXMub3V0Y29tZUlkZW50aWZpZXIpO1xuICB9XG59XG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktZmVlZGJhY2stYmxvY2snOiBRdGlGZWVkYmFja0Jsb2NrO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgTGl0RWxlbWVudCwgUHJvcGVydHlWYWx1ZU1hcCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IFF0aUFzc2Vzc21lbnRJdGVtIH0gZnJvbSAnLi4vcXRpLWFzc2Vzc21lbnQtaXRlbS9xdGktYXNzZXNzbWVudC1pdGVtJztcbmltcG9ydCB7IElzTnVsbE9yVW5kZWZpbmVkIH0gZnJvbSAnLi4vaW50ZXJuYWwvdXRpbHMnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUXRpRmVlZGJhY2sgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdzaG93LWhpZGUnIH0pXG4gIHByb3RlY3RlZCBzaG93SGlkZTogc3RyaW5nO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnb3V0Y29tZS1pZGVudGlmaWVyJyB9KVxuICBwdWJsaWMgb3V0Y29tZUlkZW50aWZpZXI6IHN0cmluZztcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSlcbiAgcHJvdGVjdGVkIGlkZW50aWZpZXI6IHN0cmluZztcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogZmFsc2UgfSlcbiAgcHVibGljIHNob3dTdGF0dXM6IHN0cmluZztcblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQ8UXRpRmVlZGJhY2s+KCdxdGktcmVnaXN0ZXItZmVlZGJhY2snLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICBkZXRhaWw6IHRoaXNcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBjaGVja1Nob3dGZWVkYmFjayhvdXRjb21lSWRlbnRpZmllcjogc3RyaW5nKSB7ICAgIFxuICAgIGNvbnN0IG91dGNvbWVWYXJpYWJsZSA9ICh0aGlzLmNsb3Nlc3QoJ3F0aS1hc3Nlc3NtZW50LWl0ZW0nKSBhcyBRdGlBc3Nlc3NtZW50SXRlbSkuZ2V0T3V0Y29tZShvdXRjb21lSWRlbnRpZmllcik7XG5cbiAgICBpZiAodGhpcy5vdXRjb21lSWRlbnRpZmllciAhPT0gb3V0Y29tZUlkZW50aWZpZXIgfHwgIW91dGNvbWVWYXJpYWJsZSkgcmV0dXJuO1xuICAgIGxldCBpc0ZvdW5kID0gZmFsc2U7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3V0Y29tZVZhcmlhYmxlLnZhbHVlKSkge1xuICAgICAgaXNGb3VuZCA9IG91dGNvbWVWYXJpYWJsZS52YWx1ZS5pbmNsdWRlcyh0aGlzLmlkZW50aWZpZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpc0ZvdW5kID1cbiAgICAgICAgKCFJc051bGxPclVuZGVmaW5lZCh0aGlzLmlkZW50aWZpZXIpICYmXG4gICAgICAgICAgIUlzTnVsbE9yVW5kZWZpbmVkKG91dGNvbWVWYXJpYWJsZT8udmFsdWUpICYmXG4gICAgICAgICAgdGhpcy5pZGVudGlmaWVyID09PSBvdXRjb21lVmFyaWFibGUudmFsdWUpIHx8XG4gICAgICAgIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuc2hvd0ZlZWRiYWNrKGlzRm91bmQpO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93RmVlZGJhY2sodmFsdWU6IGJvb2xlYW4pIHsgICAgXG4gICAgdGhpcy5zaG93U3RhdHVzID0gKHZhbHVlICYmIHRoaXMuc2hvd0hpZGUgPT09ICdzaG93JykgfHwgKCF2YWx1ZSAmJiB0aGlzLnNob3dIaWRlID09PSAnaGlkZScpID8gJ29uJyA6ICdvZmYnOyAgICBcbiAgfVxufVxuIiwgImV4cG9ydCBjb25zdCBkZWNpbWFsU2VwYXJhdG9yID0gKCkgPT4ge1xuICByZXR1cm4gbmV3IEludGwuTnVtYmVyRm9ybWF0KCkuZm9ybWF0KDAuMSkucmVwbGFjZSgvXFxkL2csICcnKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb252ZXJ0TnVtYmVyVG9Vbml2ZXJhbEZvcm1hdCA9IChudW1iZXI6IG51bWJlciB8IHN0cmluZykgPT4ge1xuICAvLyBjaGVjayBpZiB0eXBlIGlzIHN0cmluZ1xuICBpZiAodHlwZW9mIG51bWJlciA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gbnVtYmVyO1xuICB9XG4gIGNvbnN0IGRTZXAgPSBkZWNpbWFsU2VwYXJhdG9yKCk7XG4gIGlmIChkU2VwID09PSAnLicpIHtcbiAgICByZXR1cm4gbnVtYmVyLnRvTG9jYWxlU3RyaW5nKCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bWJlci50b1N0cmluZygpLnJlcGxhY2UoJy4nLCAnJykucmVwbGFjZShkU2VwLCAnLicpO1xuICB9XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gSXNOdWxsT3JVbmRlZmluZWQodmFsdWU6IHVua25vd24pIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVEb3VibGVTbGFzaGVzKHN0cjogc3RyaW5nKSB7XG4gIGNvbnN0IHNpbmdsZUZvcndhcmRTbGFzaGVzID0gc3RyXG4gICAgLnJlcGxhY2UoLyhbXjpdXFwvKVxcLysvZywgJyQxJylcbiAgICAucmVwbGFjZSgvXFwvXFwvL2csICcvJylcbiAgICAucmVwbGFjZSgnaHR0cDovJywgJ2h0dHA6Ly8nKVxuICAgIC5yZXBsYWNlKCdodHRwczovJywgJ2h0dHBzOi8vJyk7XG4gIHJldHVybiBzaW5nbGVGb3J3YXJkU2xhc2hlcztcbn1cbiIsICJpbXBvcnQgeyBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IFF0aUZlZWRiYWNrIH0gZnJvbSAnLi4vcXRpLWZlZWRiYWNrJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1mZWVkYmFjay1pbmxpbmUnKVxuZXhwb3J0IGNsYXNzIFF0aUZlZWRiYWNrSW5saW5lIGV4dGVuZHMgUXRpRmVlZGJhY2sge1xuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gY3NzYFxuICAgIC5vbiB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgfVxuICAgIC5vZmYge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIGA7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyID0gKCkgPT4gaHRtbGAgPHNsb3QgcGFydD1cImZlZWRiYWNrXCIgY2xhc3M9XCIke3RoaXMuc2hvd1N0YXR1c31cIj48L3Nsb3Q+IGA7XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1mZWVkYmFjay1pbmxpbmUnOiBRdGlGZWVkYmFja0lubGluZTtcbiAgfVxufVxuIiwgImltcG9ydCB7IGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgUXRpRmVlZGJhY2sgfSBmcm9tICcuLi9xdGktZmVlZGJhY2snO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLW1vZGFsLWZlZWRiYWNrJylcbmV4cG9ydCBjbGFzcyBRdGlNb2RhbEZlZWRiYWNrIGV4dGVuZHMgUXRpRmVlZGJhY2sge1xuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gY3NzYFxuICAgIC5vbiB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgfVxuICAgIC5vZmYge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIGA7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyID0gKCkgPT4gaHRtbGAgPHNsb3QgcGFydD1cImZlZWRiYWNrXCIgY2xhc3M9XCIke3RoaXMuc2hvd1N0YXR1c31cIj48L3Nsb3Q+IGA7XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1tb2RhbC1mZWVkYmFjayc6IFF0aU1vZGFsRmVlZGJhY2s7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgaWZEZWZpbmVkIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvaWYtZGVmaW5lZC5qcyc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvbiB9IGZyb20gJy4uL2ludGVybmFsL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uJztcbmltcG9ydCB7IHJlZiwgY3JlYXRlUmVmIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvcmVmLmpzJztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHdhdGNoIH0gZnJvbSAnLi4vLi4vLi4vZGVjb3JhdG9ycy93YXRjaCc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktZXh0ZW5kZWQtdGV4dC1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpRXh0ZW5kZWRUZXh0SW50ZXJhY3Rpb24gZXh0ZW5kcyBJbnRlcmFjdGlvbiB7XG4gIC8vIHB1YmxpYyBzdGF0aWMgcm93SGVpZ2h0Q2xhc3MgPSBbXTtcblxuICB0ZXh0YXJlYVJlZiA9IGNyZWF0ZVJlZjxIVE1MVGV4dEFyZWFFbGVtZW50PigpO1xuXG4gIC8qKiBleHBlY3RlZCBsZW5ndGggaXMgbWFwcGVkIHRvIHRoZSBwcm9wZXJ0eSBtYXhsZW5ndGggb24gdGhlIHRleHRhcmVhICovXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IE51bWJlciwgYXR0cmlidXRlOiAnZXhwZWN0ZWQtbGVuZ3RoJyB9KSBleHBlY3RlZExlbmd0aDogbnVtYmVyO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAncGF0dGVybi1tYXNrJyB9KSBwYXR0ZXJuTWFzazogc3RyaW5nO1xuXG4gIC8qKiB0ZXh0IGFwcGVhcmluZyBpbiB0aGUgZXh0ZW5kZWQtdGV4dC1udGVyYWN0aW9uIGlmIGl0IGlzIGVtcHR5ICovXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAncGxhY2Vob2xkZXItdGV4dCcgfSkgcGxhY2Vob2xkZXJUZXh0OiBzdHJpbmc7XG5cbiAgQHN0YXRlKClcbiAgcHJpdmF0ZSBfdmFsdWUgPSAnJztcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2NsYXNzJyB9KSBjbGFzc05hbWVzO1xuICBAd2F0Y2goJ2NsYXNzTmFtZXMnLCB7IHdhaXRVbnRpbEZpcnN0VXBkYXRlOiB0cnVlIH0pXG4gIGhhbmRsZWNsYXNzTmFtZXNDaGFuZ2Uob2xkLCBkaXNhYmxlZDogYm9vbGVhbikge1xuICAgIGNvbnN0IGNsYXNzTmFtZXMgPSB0aGlzLmNsYXNzTmFtZXMuc3BsaXQoJyAnKTtcbiAgICBjbGFzc05hbWVzLmZvckVhY2goKGNsYXNzTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoY2xhc3NOYW1lLnN0YXJ0c1dpdGgoJ3F0aS1oZWlnaHQtbGluZXMnKSkge1xuICAgICAgICBjb25zdCBuclJvd3MgPSBjbGFzc05hbWUucmVwbGFjZSgncXRpLWhlaWdodC1saW5lcy0nLCAnJyk7XG4gICAgICAgIGlmICh0aGlzLnRleHRhcmVhUmVmKSB7XG4gICAgICAgICAgdGhpcy50ZXh0YXJlYVJlZi52YWx1ZS5yb3dzID0gcGFyc2VJbnQobnJSb3dzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNldCByZXNwb25zZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiAnJztcbiAgfVxuXG4gIHB1YmxpYyB2YWxpZGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWUgIT09ICcnO1xuICB9XG5cbiAgc3RhdGljIG92ZXJyaWRlIGdldCBzdHlsZXMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGNzc2BcbiAgICAgICAgLyogUEs6IGRpc3BsYXkgaG9zdCBhcyBibG9jaywgZWxzZSBkZXNpZ24gd2lsbCBiZSBjb2xsYXBzZWQgKi9cbiAgICAgICAgOmhvc3Qge1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB9XG4gICAgICAgIHRleHRhcmVhIHtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgIH1cbiAgICAgIGBcbiAgICBdO1xuICB9XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90IG5hbWU9XCJwcm9tcHRcIj48L3Nsb3RcbiAgICAgID48dGV4dGFyZWFcbiAgICAgICAgcGFydD1cInRleHRhcmVhXCJcbiAgICAgICAgJHtyZWYodGhpcy50ZXh0YXJlYVJlZil9XG4gICAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgIEBrZXlkb3duPVwiJHtldmVudCA9PiBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1cIlxuICAgICAgICBAa2V5dXA9XCIke3RoaXMudGV4dENoYW5nZWR9XCJcbiAgICAgICAgQGNoYW5nZT1cIiR7dGhpcy50ZXh0Q2hhbmdlZH1cIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIiR7aWZEZWZpbmVkKHRoaXMucGxhY2Vob2xkZXJUZXh0ID8gdGhpcy5wbGFjZWhvbGRlclRleHQgOiB1bmRlZmluZWQpfVwiXG4gICAgICAgIG1heGxlbmd0aD1cIiR7aWZEZWZpbmVkKHRoaXMuZXhwZWN0ZWRMZW5ndGggPyB0aGlzLmV4cGVjdGVkTGVuZ3RoIDogdW5kZWZpbmVkKX1cIlxuICAgICAgICBwYXR0ZXJuPVwiJHtpZkRlZmluZWQodGhpcy5wYXR0ZXJuTWFzayA/IHRoaXMucGF0dGVybk1hc2sgOiB1bmRlZmluZWQpfVwiXG4gICAgICAgID9kaXNhYmxlZD1cIiR7dGhpcy5kaXNhYmxlZH1cIlxuICAgICAgICA/cmVhZG9ubHk9XCIke3RoaXMucmVhZG9ubHl9XCJcbiAgICAgICAgLnZhbHVlPSR7dGhpcy5fdmFsdWV9XG4gICAgICA+PC90ZXh0YXJlYT5gO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRleHRDaGFuZ2VkKGV2ZW50OiBFdmVudCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHJldHVybjtcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIHRoaXMuc2V0RW1wdHlBdHRyaWJ1dGUoaW5wdXQudmFsdWUpO1xuICAgIGlmICh0aGlzLl92YWx1ZSAhPT0gaW5wdXQudmFsdWUpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gaW5wdXQudmFsdWU7XG4gICAgICB0aGlzLnNhdmVSZXNwb25zZShpbnB1dC52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5fdmFsdWUgPSAnJztcbiAgfVxuXG4gIHByaXZhdGUgc2V0RW1wdHlBdHRyaWJ1dGUodGV4dDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ2VtcHR5JywgdGV4dCA9PT0gJycgPyAndHJ1ZScgOiAnZmFsc2UnKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktZXh0ZW5kZWQtdGV4dC1pbnRlcmFjdGlvbic6IFF0aUV4dGVuZGVkVGV4dEludGVyYWN0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEludGVyYWN0aW9uIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ3Jlc3BvbnNlLWlkZW50aWZpZXInIH0pIHJlc3BvbnNlSWRlbnRpZmllcjogc3RyaW5nID0gJyc7XG5cbiAgLyoqIGRpc2FibGVkIHNob3VsZCBiZSBleHBvc2VkIHRvIHRoZSBhdHRyaWJ1dGVzIGFuZCBhY2Nlc3NpYmxlIGFzIHByb3BlcnR5ICovXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUsIHR5cGU6IEJvb2xlYW4gfSkgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAvKiogcmVhZG9ubHkgc2hvdWxkIGJlIGV4cG9zZWQgdG8gdGhlIGF0dHJpYnV0ZXMgYW5kIGFjY2Vzc2libGUgYXMgcHJvcGVydHkgKi9cbiAgQHByb3BlcnR5KHsgcmVmbGVjdDogdHJ1ZSwgdHlwZTogQm9vbGVhbiB9KSByZWFkb25seSA9IGZhbHNlO1xuXG4gIGFic3RyYWN0IHZhbGlkYXRlKCk6IGJvb2xlYW47XG4gIGFic3RyYWN0IHNldCByZXNwb25zZSh2YWw6IFJlYWRvbmx5PHN0cmluZyB8IHN0cmluZ1tdPik7XG4gIHNldCBjb3JyZWN0UmVzcG9uc2UodmFsOiBSZWFkb25seTxzdHJpbmcgfCBzdHJpbmdbXT4pIHtcbiAgICBjb25zb2xlLndhcm4oJ2NvcnJlY3RSZXNwb25zZSBpcyBub3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdxdGktcmVnaXN0ZXItaW50ZXJhY3Rpb24nLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICBjb21wb3NlZDogdHJ1ZVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHNhdmVSZXNwb25zZSh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pIHtcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3F0aS1pbnRlcmFjdGlvbi1yZXNwb25zZScsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICByZXNwb25zZUlkZW50aWZpZXI6IHRoaXMucmVzcG9uc2VJZGVudGlmaWVyLFxuICAgICAgICAgIHJlc3BvbnNlOiB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgaWZEZWZpbmVkIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvaWYtZGVmaW5lZC5qcyc7XG5pbXBvcnQgeyBjcmVhdGVSZWYgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9yZWYuanMnO1xuaW1wb3J0IHsgd2F0Y2ggfSBmcm9tICcuLi8uLi8uLi9kZWNvcmF0b3JzJztcbmltcG9ydCB7IEludGVyYWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJuYWwvaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24nO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLXRleHQtZW50cnktaW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aVRleHRFbnRyeUludGVyYWN0aW9uIGV4dGVuZHMgSW50ZXJhY3Rpb24ge1xuICBAcHJvcGVydHkoeyB0eXBlOiBOdW1iZXIsIGF0dHJpYnV0ZTogJ2V4cGVjdGVkLWxlbmd0aCcgfSkgZXhwZWN0ZWRMZW5ndGg6IG51bWJlcjtcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ3BhdHRlcm4tbWFzaycgfSkgcGF0dGVybk1hc2s6IHN0cmluZztcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ3BsYWNlaG9sZGVyLXRleHQnIH0pIHBsYWNlaG9sZGVyVGV4dDogc3RyaW5nO1xuXG4gIEBzdGF0ZSgpXG4gIHByaXZhdGUgX3ZhbHVlID0gJyc7XG5cbiAgQHN0YXRlKClcbiAgcHJpdmF0ZSBfY29ycmVjdFZhbHVlID0gJyc7XG5cbiAgQHN0YXRlKClcbiAgcHJpdmF0ZSBfc2l6ZSA9IDU7XG5cbiAgaW5wdXRSZWYgPSBjcmVhdGVSZWY8SFRNTElucHV0RWxlbWVudD4oKTtcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2NsYXNzJyB9KSBjbGFzc05hbWVzO1xuICBAd2F0Y2goJ2NsYXNzTmFtZXMnKVxuICBoYW5kbGVjbGFzc05hbWVzQ2hhbmdlKG9sZCwgY2xhc3Nlczogc3RyaW5nKSB7XG4gICAgY29uc3QgY2xhc3NOYW1lcyA9IGNsYXNzZXMuc3BsaXQoJyAnKTtcbiAgICBjbGFzc05hbWVzLmZvckVhY2goKGNsYXNzTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoY2xhc3NOYW1lLnN0YXJ0c1dpdGgoJ3F0aS1pbnB1dC13aWR0aCcpKSB7XG4gICAgICAgIGNvbnN0IG5yUm93cyA9IGNsYXNzTmFtZS5yZXBsYWNlKCdxdGktaW5wdXQtd2lkdGgtJywgJycpO1xuICAgICAgICB0aGlzLl9zaXplID0gcGFyc2VJbnQobnJSb3dzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgcmVzcG9uc2UodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDogJyc7XG4gIH1cblxuICBwdWJsaWMgdmFsaWRhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlICE9PSAnJztcbiAgfVxuXG4gIHN0YXRpYyBvdmVycmlkZSBnZXQgc3R5bGVzKCkge1xuICAgIHJldHVybiBbXG4gICAgICBjc3NgXG4gICAgICAgIFtwYXJ0PSdjb3JyZWN0J10ge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgfVxuICAgICAgYFxuICAgIF07XG4gIH1cblxuICBzZXQgY29ycmVjdFJlc3BvbnNlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9jb3JyZWN0VmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGAgICAgICBcbiAgICAgIDxpbnB1dFxuICAgICAgICBwYXJ0PVwiaW5wdXRcIlxuICAgICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIlxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICBAa2V5ZG93bj1cIiR7ZXZlbnQgPT4gZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9XCJcbiAgICAgICAgQGtleXVwPVwiJHt0aGlzLnRleHRDaGFuZ2VkfVwiXG4gICAgICAgIEBjaGFuZ2U9XCIke3RoaXMudGV4dENoYW5nZWR9XCJcbiAgICAgICAgdHlwZT1cIiR7dGhpcy5wYXR0ZXJuTWFzayA9PSAnWzAtOV0qJyA/ICdudW1iZXInIDogJ3RleHQnfVwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiJHtpZkRlZmluZWQodGhpcy5wbGFjZWhvbGRlclRleHQgPyB0aGlzLnBsYWNlaG9sZGVyVGV4dCA6IHVuZGVmaW5lZCl9XCJcbiAgICAgICAgLnZhbHVlPVwiJHt0aGlzLl92YWx1ZX1cIlxuICAgICAgICBzaXplPVwiJHt0aGlzLl9zaXplfVwiXG4gICAgICAgIHBhdHRlcm49XCIke2lmRGVmaW5lZCh0aGlzLnBhdHRlcm5NYXNrID8gdGhpcy5wYXR0ZXJuTWFzayA6IHVuZGVmaW5lZCl9XCJcbiAgICAgICAgP2Rpc2FibGVkPVwiJHt0aGlzLmRpc2FibGVkfVwiXG4gICAgICAgID9yZWFkb25seT1cIiR7dGhpcy5yZWFkb25seX1cIlxuICAgICAgLz5cbiAgICAgIDxkaXYgcGFydD1cImNvcnJlY3RcIj4ke3RoaXMuX2NvcnJlY3RWYWx1ZX08L2Rpdj5cbiAgICBgO1xuICB9XG4gIC8vXG4gIC8vIG1heGxlbmd0aD1cIiR7aWZEZWZpbmVkKHRoaXMuZXhwZWN0ZWRMZW5ndGggPyB0aGlzLmV4cGVjdGVkTGVuZ3RoIDogdW5kZWZpbmVkKX1cIlxuXG4gIHByb3RlY3RlZCB0ZXh0Q2hhbmdlZChldmVudDogRXZlbnQpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSByZXR1cm47XG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICB0aGlzLnNldEVtcHR5QXR0cmlidXRlKGlucHV0LnZhbHVlKTtcbiAgICBpZiAodGhpcy5fdmFsdWUgIT09IGlucHV0LnZhbHVlKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IGlucHV0LnZhbHVlO1xuICAgICAgdGhpcy5zYXZlUmVzcG9uc2UoaW5wdXQudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuX3ZhbHVlID0gJyc7XG4gIH1cblxuICBwcml2YXRlIHNldEVtcHR5QXR0cmlidXRlKHRleHQ6IHN0cmluZykge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKCdlbXB0eScsIHRleHQgPT09ICcnID8gJ3RydWUnIDogJ2ZhbHNlJyk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXRleHQtZW50cnktaW50ZXJhY3Rpb24nOiBRdGlUZXh0RW50cnlJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgIi8vIEB3YXRjaCBkZWNvcmF0b3Jcbi8vXG4vLyBSdW5zIHdoZW4gYW4gb2JzZXJ2ZWQgcHJvcGVydHkgY2hhbmdlcywgZS5nLiBAcHJvcGVydHkgb3IgQHN0YXRlLCBidXQgYmVmb3JlIHRoZSBjb21wb25lbnQgdXBkYXRlcy5cbi8vXG4vLyBUbyB3YWl0IGZvciBhbiB1cGRhdGUgdG8gY29tcGxldGUgYWZ0ZXIgYSBjaGFuZ2Ugb2NjdXJzLCB1c2UgYGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGVgIGluIHRoZSBoYW5kbGVyLiBUbyBzdGFydFxuLy8gd2F0Y2hpbmcgYWZ0ZXIgdGhlIGluaXRpYWwgdXBkYXRlL3JlbmRlciwgdXNlIGB7IHdhaXRVbnRpbEZpcnN0VXBkYXRlOiB0cnVlIH1gIG9yIGB0aGlzLmhhc1VwZGF0ZWRgIGluIHRoZSBoYW5kbGVyLlxuLy9cbi8vIFVzYWdlOlxuLy9cbi8vICBAd2F0Y2goJ3Byb3BOYW1lJylcbi8vICBoYW5kbGVQcm9wQ2hhbmdlKG9sZFZhbHVlLCBuZXdWYWx1ZSkge1xuLy8gICAgLi4uXG4vLyAgfVxuXG5pbXBvcnQgdHlwZSB7IExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuXG50eXBlIFVwZGF0ZUhhbmRsZXIgPSAocHJldj86IHVua25vd24sIG5leHQ/OiB1bmtub3duKSA9PiB2b2lkO1xuXG50eXBlIE5vblVuZGVmaW5lZDxBPiA9IEEgZXh0ZW5kcyB1bmRlZmluZWQgPyBuZXZlciA6IEE7XG5cbnR5cGUgVXBkYXRlSGFuZGxlckZ1bmN0aW9uS2V5czxUIGV4dGVuZHMgb2JqZWN0PiA9IHtcbiAgW0sgaW4ga2V5b2YgVF0tPzogTm9uVW5kZWZpbmVkPFRbS10+IGV4dGVuZHMgVXBkYXRlSGFuZGxlciA/IEsgOiBuZXZlcjtcbn1ba2V5b2YgVF07XG5cbmludGVyZmFjZSBMaXZlUXVlcnlPcHRpb25zIHtcbiAgLyoqXG4gICAqIElmIHRydWUsIHdpbGwgb25seSBzdGFydCB3YXRjaGluZyBhZnRlciB0aGUgaW5pdGlhbCB1cGRhdGUvcmVuZGVyXG4gICAqL1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGl2ZVF1ZXJ5KHF1ZXJ5U2VsZWN0b3I6IHN0cmluZywgb3B0aW9ucz86IExpdmVRdWVyeU9wdGlvbnMpIHtcbiAgbGV0IG9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyO1xuICBjb25zdCByZXNvbHZlZE9wdGlvbnM6IFJlcXVpcmVkPExpdmVRdWVyeU9wdGlvbnM+ID0ge1xuICAgIC4uLm9wdGlvbnNcbiAgfTtcbiAgcmV0dXJuIDxFbGVtQ2xhc3MgZXh0ZW5kcyBMaXRFbGVtZW50PihcbiAgICBwcm90bzogRWxlbUNsYXNzLFxuICAgIGRlY29yYXRlZEZuTmFtZTogVXBkYXRlSGFuZGxlckZ1bmN0aW9uS2V5czxFbGVtQ2xhc3M+XG4gICk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IHsgY29ubmVjdGVkQ2FsbGJhY2ssIGRpc2Nvbm5lY3RlZENhbGxiYWNrIH0gPSBwcm90bztcblxuICAgIHByb3RvLmNvbm5lY3RlZENhbGxiYWNrID0gZnVuY3Rpb24gKHRoaXM6IEVsZW1DbGFzcykge1xuICAgICAgY29ubmVjdGVkQ2FsbGJhY2suY2FsbCh0aGlzKTtcbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gKG11dGF0aW9uTGlzdDogTXV0YXRpb25SZWNvcmRbXSkgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50c1RvV2F0Y2ggPSBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbChxdWVyeVNlbGVjdG9yKSk7XG4gICAgICAgIGZvciAoY29uc3QgbXV0YXRpb24gb2YgbXV0YXRpb25MaXN0KSB7XG4gICAgICAgICAgY29uc3QgYWRkZWROb2RlcyA9IEFycmF5LmZyb20obXV0YXRpb24uYWRkZWROb2RlcykubWFwKGUgPT4gZSBhcyBFbGVtZW50KTtcbiAgICAgICAgICBjb25zdCByZW1vdmVkTm9kZXMgPSBBcnJheS5mcm9tKG11dGF0aW9uLmFkZGVkTm9kZXMpLm1hcChlID0+IGUgYXMgRWxlbWVudCk7XG4gICAgICAgICAgaWYgKG11dGF0aW9uLnR5cGUgPT09ICdjaGlsZExpc3QnICYmIGFkZGVkTm9kZXMuZmluZChuID0+IGVsZW1lbnRzVG9XYXRjaC5pbmNsdWRlcyhuKSkpIHtcbiAgICAgICAgICAgICh0aGlzW2RlY29yYXRlZEZuTmFtZV0gYXMgdW5rbm93biBhcyBVcGRhdGVIYW5kbGVyKShhZGRlZE5vZGVzLCByZW1vdmVkTm9kZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoY2FsbGJhY2spO1xuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KTtcblxuICAgICAgY29uc3QgZWxlbWVudHNBZGRlZCA9IHRoaXMucXVlcnlTZWxlY3RvckFsbChxdWVyeVNlbGVjdG9yKSA/PyBbXTtcbiAgICAgICh0aGlzW2RlY29yYXRlZEZuTmFtZV0gYXMgdW5rbm93biBhcyBVcGRhdGVIYW5kbGVyKShBcnJheS5mcm9tKGVsZW1lbnRzQWRkZWQpLCBbXSk7XG4gICAgfTtcblxuICAgIHByb3RvLmRpc2Nvbm5lY3RlZENhbGxiYWNrID0gZnVuY3Rpb24gKHRoaXM6IEVsZW1DbGFzcykge1xuICAgICAgZGlzY29ubmVjdGVkQ2FsbGJhY2suY2FsbCh0aGlzKTtcbiAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9O1xuICB9O1xufVxuIiwgImltcG9ydCB7IGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IENob2ljZXMgfSBmcm9tICcuLi9pbnRlcm5hbC9jaG9pY2VzL2Nob2ljZXMnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWhvdHRleHQtaW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aUhvdHRleHRJbnRlcmFjdGlvbiBleHRlbmRzIENob2ljZXMge1xuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKCdxdGktaG90dGV4dC1pbnRlcmFjdGlvbicsICcnKTtcbiAgfVxuXG4gIG92ZXJyaWRlIHJlbmRlciA9ICgpID0+IGh0bWxgPHNsb3Q+PC9zbG90PmA7XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1ob3R0ZXh0LWludGVyYWN0aW9uJzogUXRpSG90dGV4dEludGVyYWN0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgd2F0Y2ggfSBmcm9tICcuLi8uLi8uLi8uLi9kZWNvcmF0b3JzL3dhdGNoJztcbmltcG9ydCB7IEludGVyYWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24nO1xuaW1wb3J0IHsgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgUXRpQ2hvaWNlIH0gZnJvbSAnLi4vY2hvaWNlL3F0aS1jaG9pY2UnO1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENob2ljZXMgZXh0ZW5kcyBJbnRlcmFjdGlvbiB7XG4gIHByb3RlY3RlZCBfY2hvaWNlRWxlbWVudHM6IFF0aUNob2ljZVtdID0gW107XG5cbiAgLyoqIHRoZSBtaW5pbWFsIG51bWJlciBvZiBzZWxlY3Rpb25zIGEgY2FuZGlkYXRlIG11c3QgbWFrZSAqL1xuICBAcHJvcGVydHkoe1xuICAgIHR5cGU6IE51bWJlcixcbiAgICBhdHRyaWJ1dGU6ICdtaW4tY2hvaWNlcydcbiAgfSlcbiAgcHVibGljIG1pbkNob2ljZXM6IG51bWJlciA9IDA7XG5cbiAgLyoqIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzZWxlY3Rpb25zIGEgY2FuZGlkYXRlIG11c3QgbWFrZSwgdGhlIG90aGVyIG9wdGlvbnMgd2lsbCBiZSBkaXNhYmxlZCB3aGVuIG1heCBvcHRpb25zIGlzIGNoZWNrZWQgKi9cbiAgQHByb3BlcnR5KHtcbiAgICB0eXBlOiBOdW1iZXIsXG4gICAgYXR0cmlidXRlOiAnbWF4LWNob2ljZXMnXG4gIH0pXG4gIHB1YmxpYyBtYXhDaG9pY2VzOiBudW1iZXIgPSAxO1xuXG4gIEB3YXRjaCgnZGlzYWJsZWQnLCB7IHdhaXRVbnRpbEZpcnN0VXBkYXRlOiB0cnVlIH0pXG4gIF9oYW5kbGVEaXNhYmxlZENoYW5nZSA9IChfOiBib29sZWFuLCBkaXNhYmxlZDogYm9vbGVhbikgPT5cbiAgICB0aGlzLl9jaG9pY2VFbGVtZW50cy5mb3JFYWNoKGNoID0+IChjaC5kaXNhYmxlZCA9IGRpc2FibGVkKSk7XG5cbiAgQHdhdGNoKCdyZWFkb25seScsIHsgd2FpdFVudGlsRmlyc3RVcGRhdGU6IHRydWUgfSlcbiAgX2hhbmRsZVJlYWRvbmx5Q2hhbmdlID0gKF86IGJvb2xlYW4sIHJlYWRvbmx5OiBib29sZWFuKSA9PlxuICAgIHRoaXMuX2Nob2ljZUVsZW1lbnRzLmZvckVhY2goY2ggPT4gKGNoLnJlYWRvbmx5ID0gcmVhZG9ubHkpKTtcblxuICBAd2F0Y2goJ21heENob2ljZXMnLCB7IHdhaXRVbnRpbEZpcnN0VXBkYXRlOiB0cnVlIH0pXG4gIF9oYW5kbGVNYXhDaG9pY2VzQ2hhbmdlID0gKCkgPT4gdGhpcy5fZGV0ZXJtaW5lSW5wdXRUeXBlKCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci1jaG9pY2UnLCB0aGlzLl9yZWdpc3RlckNob2ljZUVsZW1lbnQpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigncXRpLWxvb3NlLWNob2ljZScsIHRoaXMuX2xvb3NlQ2hvaWNlRWxlbWVudCk7XG4gIH1cblxuICB2YWxpZGF0ZSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBuclNlbGVjdGVkID0gdGhpcy5fY2hvaWNlRWxlbWVudHMucmVkdWNlKChhY2MsIHZhbCkgPT4ge1xuICAgICAgcmV0dXJuIGFjYyArICh2YWwuY2hlY2tlZCA/IDEgOiAwKTtcbiAgICB9LCAwKTtcbiAgICByZXR1cm4gbnJTZWxlY3RlZCA+PSB0aGlzLm1pbkNob2ljZXM7XG4gIH1cblxuICBzZXQgcmVzcG9uc2UocmVzcG9uc2VWYWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pIHtcbiAgICBjb25zdCByZXNwb25zZVZhbHVlQXJyYXkgPSBBcnJheS5pc0FycmF5KHJlc3BvbnNlVmFsdWUpID8gcmVzcG9uc2VWYWx1ZSA6IFtyZXNwb25zZVZhbHVlXTtcbiAgICB0aGlzLl9jaG9pY2VFbGVtZW50cy5mb3JFYWNoKGNlID0+IHtcbiAgICAgIGNlLmNoZWNrZWQgPSByZXNwb25zZVZhbHVlQXJyYXkuZmluZChydiA9PiBydiA9PT0gY2UuaWRlbnRpZmllcikgPyB0cnVlIDogZmFsc2U7XG4gICAgfSk7XG4gIH1cblxuICBzZXQgY29ycmVjdFJlc3BvbnNlKHJlc3BvbnNlVmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG4gICAgY29uc3QgcmVzcG9uc2VWYWx1ZUFycmF5ID0gQXJyYXkuaXNBcnJheShyZXNwb25zZVZhbHVlKSA/IHJlc3BvbnNlVmFsdWUgOiBbcmVzcG9uc2VWYWx1ZV07XG4gICAgaWYgKHJlc3BvbnNlVmFsdWUgPT0gJycpIHtcbiAgICAgIHRoaXMuX2Nob2ljZUVsZW1lbnRzLmZvckVhY2goY2UgPT4ge1xuICAgICAgICBjZS5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtY29ycmVjdC1yZXNwb25zZScpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2Nob2ljZUVsZW1lbnRzLmZvckVhY2goY2UgPT4ge1xuICAgICAgY2Uuc2V0QXR0cmlidXRlKCdkYXRhLWNvcnJlY3QtcmVzcG9uc2UnLCByZXNwb25zZVZhbHVlQXJyYXkuZmluZChydiA9PiBydiA9PT0gY2UuaWRlbnRpZmllcikgPyAndHJ1ZScgOiAnZmFsc2UnKTtcbiAgICB9KTtcbiAgfVxuXG4gIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdxdGktY2hvaWNlLWVsZW1lbnQtc2VsZWN0ZWQnLCB0aGlzLl9jaG9pY2VFbGVtZW50U2VsZWN0ZWRIYW5kbGVyKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdxdGktY2hvaWNlLWVsZW1lbnQtc2VsZWN0ZWQnLCB0aGlzLl9jaG9pY2VFbGVtZW50U2VsZWN0ZWRIYW5kbGVyKTtcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci1jaG9pY2UnLCB0aGlzLl9yZWdpc3RlckNob2ljZUVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVnaXN0ZXJDaG9pY2VFbGVtZW50KGU6IEN1c3RvbUV2ZW50KSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBjaG9pY2VFbGVtZW50ID0gZS50YXJnZXQgYXMgUXRpQ2hvaWNlO1xuICAgIHRoaXMuX2Nob2ljZUVsZW1lbnRzLnB1c2goY2hvaWNlRWxlbWVudCk7XG4gICAgdGhpcy5fc2V0SW5wdXRUeXBlKGNob2ljZUVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbG9vc2VDaG9pY2VFbGVtZW50KGU6IEN1c3RvbUV2ZW50KSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBjaG9pY2VFbGVtZW50ID0gZS50YXJnZXQgYXMgUXRpQ2hvaWNlO1xuICAgIHRoaXMuX2Nob2ljZUVsZW1lbnRzLnB1c2goY2hvaWNlRWxlbWVudCk7XG4gICAgdGhpcy5fY2hvaWNlRWxlbWVudHMgPSB0aGlzLl9jaG9pY2VFbGVtZW50cy5maWx0ZXIoY2ggPT4gY2ggIT09IGNob2ljZUVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGV0ZXJtaW5lSW5wdXRUeXBlKCkge1xuICAgIHRoaXMuX2Nob2ljZUVsZW1lbnRzLmZvckVhY2goY2hvaWNlRWxlbWVudCA9PiB7XG4gICAgICB0aGlzLl9zZXRJbnB1dFR5cGUoY2hvaWNlRWxlbWVudCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9zZXRJbnB1dFR5cGUoY2hvaWNlRWxlbWVudDogUXRpQ2hvaWNlKSB7XG4gICAgaWYgKHRoaXMubWF4Q2hvaWNlcyA9PT0gMSkge1xuICAgICAgLy8gaWYgemVybyB0aGVuIHlvdSBjYW4gY2hvb3NlIGhvdyBtdWNoIHlvdSB3YW50XG4gICAgICBjaG9pY2VFbGVtZW50LnNldEF0dHJpYnV0ZSgncm9sZScsICdyYWRpbycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaG9pY2VFbGVtZW50LnNldEF0dHJpYnV0ZSgncm9sZScsICdjaGVja2JveCcpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBfY2hvaWNlRWxlbWVudFNlbGVjdGVkSGFuZGxlcihldmVudDogQ3VzdG9tRXZlbnQ8eyBpZGVudGlmaWVyOiBzdHJpbmc7IGNoZWNrZWQ6IGJvb2xlYW4gfT4pIHtcbiAgICBpZiAodGhpcy5tYXhDaG9pY2VzID09PSAxKSB7XG4gICAgICB0aGlzLl9jaG9pY2VFbGVtZW50c1xuICAgICAgICAuZmlsdGVyKGNlID0+IGNlLmlkZW50aWZpZXIgIT09IGV2ZW50LmRldGFpbC5pZGVudGlmaWVyKVxuICAgICAgICAuZm9yRWFjaChjZSA9PiB7XG4gICAgICAgICAgY2UuY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5fY2hvaWNlRWxlbWVudFNlbGVjdGVkKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2Nob2ljZUVsZW1lbnRTZWxlY3RlZCgpIHtcbiAgICBjb25zdCBzZWxlY3RlZElkZW50aWZpZXJzID0gdGhpcy5fY2hvaWNlRWxlbWVudHMuZmlsdGVyKGNlID0+IGNlLmNoZWNrZWQpLm1hcChjZSA9PiBjZS5pZGVudGlmaWVyKTtcblxuICAgIGlmICh0aGlzLm1heENob2ljZXMgPiAxKSB7XG4gICAgICBpZiAodGhpcy5tYXhDaG9pY2VzID09PSBzZWxlY3RlZElkZW50aWZpZXJzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLl9jaG9pY2VFbGVtZW50cy5mb3JFYWNoKGNlID0+IChjZS5kaXNhYmxlZCA9ICFjZS5jaGVja2VkKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9jaG9pY2VFbGVtZW50cy5mb3JFYWNoKGNlID0+IChjZS5kaXNhYmxlZCA9IGZhbHNlKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHJlc3VsdDogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgaWYgKHRoaXMubWF4Q2hvaWNlcyA9PT0gMSkge1xuICAgICAgcmVzdWx0ID0gc2VsZWN0ZWRJZGVudGlmaWVycy5sZW5ndGggPiAwID8gc2VsZWN0ZWRJZGVudGlmaWVyc1swXSA6IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gc2VsZWN0ZWRJZGVudGlmaWVycztcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXJndW1lbnRcbiAgICB0aGlzLnNhdmVSZXNwb25zZShyZXN1bHQpO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHVuc2FmZUhUTUwgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy91bnNhZmUtaHRtbC5qcyc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvbiB9IGZyb20gJy4uL2ludGVybmFsL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uJztcblxuaW50ZXJmYWNlIE9wdGlvblR5cGUge1xuICB0ZXh0Q29udGVudDogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICBzZWxlY3RlZDogYm9vbGVhbjtcbn1cblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1pbmxpbmUtY2hvaWNlLWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlJbmxpbmVDaG9pY2VJbnRlcmFjdGlvbiBleHRlbmRzIEludGVyYWN0aW9uIHtcbiAgcHVibGljIHN0YXRpYyBpbnB1dFdpZHRoQ2xhc3MgPSBbXG4gICAgJycsXG4gICAgJ3F0aS1pbnB1dC13aWR0aC0yJyxcbiAgICAncXRpLWlucHV0LXdpZHRoLTEnLFxuICAgICdxdGktaW5wdXQtd2lkdGgtMycsXG4gICAgJ3F0aS1pbnB1dC13aWR0aC00JyxcbiAgICAncXRpLWlucHV0LXdpZHRoLTYnLFxuICAgICdxdGktaW5wdXQtd2lkdGgtMTAnLFxuICAgICdxdGktaW5wdXQtd2lkdGgtMTUnLFxuICAgICdxdGktaW5wdXQtd2lkdGgtMjAnLFxuICAgICdxdGktaW5wdXQtd2lkdGgtNzInXG4gIF07XG5cbiAgQHN0YXRlKCkgb3B0aW9uczogT3B0aW9uVHlwZVtdID0gW107XG5cbiAgQHN0YXRlKCkgY29ycmVjdE9wdGlvbjogc3RyaW5nID0gJyc7XG5cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnZGF0YS1wcm9tcHQnLCB0eXBlOiBTdHJpbmcgfSlcbiAgZGF0YVByb21wdDogc3RyaW5nID0gJ3NlbGVjdCc7XG5cbiAgc3RhdGljIG92ZXJyaWRlIGdldCBzdHlsZXMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGNzc2BcbiAgICAgICAgOmhvc3Qge1xuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgfVxuICAgICAgYFxuICAgIF07XG4gIH1cblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8c2VsZWN0IHBhcnQ9XCJzZWxlY3RcIiBAY2hhbmdlPVwiJHt0aGlzLmNob2ljZVNlbGVjdGVkfVwiID9kaXNhYmxlZD1cIiR7dGhpcy5kaXNhYmxlZH1cIiA/cmVhZG9ubHk9XCIke3RoaXMucmVhZG9ubHl9XCI+XG4gICAgICAgICR7dGhpcy5vcHRpb25zLm1hcChcbiAgICAgICAgICBvcHRpb24gPT4gaHRtbGBcbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIke29wdGlvbi52YWx1ZX1cIiA/c2VsZWN0ZWQ9XCIke29wdGlvbi5zZWxlY3RlZH1cIj4ke3Vuc2FmZUhUTUwob3B0aW9uLnRleHRDb250ZW50KX08L29wdGlvbj5cbiAgICAgICAgICBgXG4gICAgICAgICl9XG4gICAgICA8L3NlbGVjdD5cblxuICAgICAgJHt1bnNhZmVIVE1MKHRoaXMuY29ycmVjdE9wdGlvbil9XG4gICAgYDtcbiAgfVxuXG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdvbi1kcm9wZG93bi1zZWxlY3RlZCcsIHRoaXMuY2hvaWNlU2VsZWN0ZWQpO1xuICAgIGNvbnN0IGNob2ljZXMgPSBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbCgncXRpLWlubGluZS1jaG9pY2UnKSk7XG4gICAgdGhpcy5vcHRpb25zID0gW1xuICAgICAge1xuICAgICAgICB0ZXh0Q29udGVudDogdGhpcy5kYXRhUHJvbXB0LFxuICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgIHNlbGVjdGVkOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIC4uLmNob2ljZXMubWFwKGNob2ljZSA9PiAoe1xuICAgICAgICB0ZXh0Q29udGVudDogY2hvaWNlLmlubmVySFRNTCxcbiAgICAgICAgdmFsdWU6IGNob2ljZS5nZXRBdHRyaWJ1dGUoJ2lkZW50aWZpZXInKSxcbiAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlXG4gICAgICB9KSlcbiAgICBdO1xuICB9XG5cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdvbi1kcm9wZG93bi1zZWxlY3RlZCcsIHRoaXMuY2hvaWNlU2VsZWN0ZWQpO1xuICB9XG5cbiAgcHVibGljIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gdGhpcy5vcHRpb25zLmZpbmQob3B0aW9uID0+IG9wdGlvbi5zZWxlY3RlZCk7XG4gICAgcmV0dXJuIHNlbGVjdGVkT3B0aW9uID8gc2VsZWN0ZWRPcHRpb24udmFsdWUgIT09ICcnIDogZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgcmVzZXQoKSB7XG4gICAgdGhpcy5vcHRpb25zID0gdGhpcy5vcHRpb25zLm1hcCgob3B0aW9uLCBpKSA9PiAoeyAuLi5vcHRpb24sIHNlbGVjdGVkOiBpID09PSAwIH0pKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgcmVzcG9uc2UodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMub3B0aW9ucy5tYXAob3B0aW9uID0+IHtcbiAgICAgIHZhbHVlID09PSBvcHRpb24udmFsdWUgJiYgKG9wdGlvbi5zZWxlY3RlZCA9IHRydWUpO1xuICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICB9KTtcbiAgfVxuXG4gIHNldCBjb3JyZWN0UmVzcG9uc2UodmFsdWU6IFJlYWRvbmx5PHN0cmluZyB8IHN0cmluZ1tdPikge1xuICAgIGlmICh2YWx1ZSA9PT0gJycpIHtcbiAgICAgIHRoaXMuY29ycmVjdE9wdGlvbiA9ICcnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNvcnJlY3RPcHRpb24gPSBgPHNwYW4gcGFydD1cImNvcnJlY3Qtb3B0aW9uXCI+JHtcbiAgICAgIHRoaXMub3B0aW9ucy5maW5kKG9wdGlvbiA9PiB2YWx1ZSA9PT0gb3B0aW9uLnZhbHVlKS50ZXh0Q29udGVudFxuICAgIH08L3NwYW4+YDtcbiAgfVxuXG4gIHB1YmxpYyBjaG9pY2VTZWxlY3RlZChldmVudDogRXZlbnQpIHtcbiAgICBjb25zdCBzZWxlY3RlZE9wdGlvblZhbHVlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MU2VsZWN0RWxlbWVudCkudmFsdWU7XG4gICAgdGhpcy5vcHRpb25zID0gdGhpcy5vcHRpb25zLm1hcChvcHRpb24gPT4gKHsgLi4ub3B0aW9uLCBzZWxlY3RlZDogb3B0aW9uLnZhbHVlID09PSBzZWxlY3RlZE9wdGlvblZhbHVlIH0pKTtcbiAgICB0aGlzLnNhdmVSZXNwb25zZShzZWxlY3RlZE9wdGlvblZhbHVlKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktaW5saW5lLWNob2ljZS1pbnRlcmFjdGlvbic6IFF0aUlubGluZUNob2ljZUludGVyYWN0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9xdGktY2hvaWNlLWludGVyYWN0aW9uLnN0eWxlcyc7XG5pbXBvcnQgdHlwZSB7IENTU1Jlc3VsdEdyb3VwIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IENob2ljZXMgfSBmcm9tICcuLi9pbnRlcm5hbC9jaG9pY2VzL2Nob2ljZXMnO1xuXG4vKipcbiAqIEBzdW1tYXJ5IFRoZSBDaG9pY2VJbnRlcmFjdGlvbi5UeXBlIChxdGktY2hvaWNlLWludGVyYWN0aW9uKSBpbnRlcmFjdGlvbiBwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgY2hvaWNlcyB0byB0aGUgY2FuZGlkYXRlLlxuICogQGRvY3VtZW50YXRpb24gaHR0cHM6Ly93d3cuaW1zZ2xvYmFsLm9yZy9zcGVjL3F0aS92M3AwL2ltcGwjaC5qOW51MW9hMXR1M2JcbiAqIEBzdGF0dXMgc3RhYmxlXG4gKiBAc2luY2UgNi4wXG4gKlxuICogQGV2ZW50IHF0aS1yZWdpc3Rlci1pbnRlcmFjdGlvbiAtIGVtaXR0ZWQgd2hlbiB0aGUgaW50ZXJhY3Rpb24gd2FudHMgdG8gcmVnaXN0ZXIgaXRzZWxmXG4gKiBAZXZlbnQgcXRpLWludGVyYWN0aW9uLXJlc3BvbnNlIC0gZW1pdHRlZCB3aGVuIHRoZSBpbnRlcmFjdGlvbiBjaGFuZ2VzXG4gKlxuICogQHNsb3QgLSBUaGUgZGVmYXVsdCBzbG90IHdoZXJlIDxxdGktc2ltcGxlLWNob2ljZT4gbXVzdCBiZSBwbGFjZWQuXG4gKiBAc2xvdCBwcm9tcHQgLSBzbG90IHdoZXJlIHRoZSBwcm9tcHQgaXMgcGxhY2VkLlxuICovXG5cbkBjdXN0b21FbGVtZW50KCdxdGktY2hvaWNlLWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlDaG9pY2VJbnRlcmFjdGlvbiBleHRlbmRzIENob2ljZXMge1xuICBzdGF0aWMgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IHN0eWxlcztcblxuICAvKiogb3JpZW50YXRpb24gb2YgY2hvaWNlcyAqL1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSlcbiAgcHVibGljIG9yaWVudGF0aW9uOiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnO1xuXG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGAgPHNsb3QgbmFtZT1cInByb21wdFwiPjwvc2xvdD48c2xvdCBwYXJ0PVwic2xvdFwiPjwvc2xvdD5gO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1jaG9pY2UtaW50ZXJhY3Rpb24nOiBRdGlDaG9pY2VJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IGNzcyB9IGZyb20gJ2xpdCc7XG4vLyBpbXBvcnQgY29tcG9uZW50U3R5bGVzIGZyb20gJy4uLy4uL3V0aWxpdGllcy9zdHlsZXMvY29tcG9uZW50LnN0eWxlcyc7XG5cbi8qICR7Y29tcG9uZW50U3R5bGVzfSAqL1xuZXhwb3J0IGRlZmF1bHQgY3NzYFxuICA6aG9zdCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIC8vIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICB9XG5gO1xuIiwgImltcG9ydCB7IGNzcywgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgUXRpUnVsZSwgUXRpUnVsZUJhc2UgfSBmcm9tICcuLic7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktb3V0Y29tZS1wcm9jZXNzaW5nJylcbmV4cG9ydCBjbGFzcyBRdGlPdXRjb21lUHJvY2Vzc2luZyBleHRlbmRzIExpdEVsZW1lbnQge1xuICBzdGF0aWMgc3R5bGVzID0gW1xuICAgIGNzc2BcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICBgXG4gIF07XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgcHVibGljIHByb2Nlc3MoKSB7XG4gICAgY29uc3QgbG9naWMgPSBuZXcgUXRpT3V0Y29tZVByb2Nlc3NpbmdQcm9jZXNzb3IoKTtcbiAgICBjb25zdCBydWxlcyA9IFsuLi50aGlzLmNoaWxkcmVuXSBhcyBRdGlSdWxlW107XG4gICAgbG9naWMucHJvY2VzcyhydWxlcyk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLW91dGNvbWUtcHJvY2Vzc2luZyc6IFF0aU91dGNvbWVQcm9jZXNzaW5nO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBRdGlPdXRjb21lUHJvY2Vzc2luZ1Byb2Nlc3NvciB7XG4gIHB1YmxpYyBwcm9jZXNzKHJ1bGVzOiBRdGlSdWxlQmFzZVtdKSB7XG4gICAgZm9yIChjb25zdCBydWxlIG9mIHJ1bGVzKSB7XG4gICAgICBydWxlLnByb2Nlc3MoKTtcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjc3MsIGh0bWwsIExpdEVsZW1lbnQsIFByb3BlcnR5VmFsdWVNYXAgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuaW1wb3J0IHsgbWFwUmVzcG9uc2UsIG1hcFJlc3BvbnNlUG9pbnQsIG1hdGNoQ29ycmVjdCB9IGZyb20gJy4uLy4uL2ludGVybmFsL3RlbXBsYXRlLXN0cmluZ3MnO1xuaW1wb3J0IHsgdHlwZSBRdGlSdWxlIH0gZnJvbSAnLi4vcXRpLXJ1bGUvcXRpLXJ1bGUnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcnKVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXRpUmVzcG9uc2VQcm9jZXNzaW5nIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIHN0YXRpYyBzdHlsZXMgPSBbXG4gICAgY3NzYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgIGBcbiAgXTtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPHNsb3Q+PC9zbG90PmA7XG4gIH1cblxuICBwdWJsaWMgcHJvY2VzcygpIHtcbiAgICBjb25zdCBydWxlcyA9IFsuLi50aGlzLmNoaWxkcmVuXSBhcyBRdGlSdWxlW107XG5cbiAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgcnVsZXMpIHtcbiAgICAgIHJ1bGUucHJvY2VzcygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmaXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlTWFwPGFueT4gfCBNYXA8UHJvcGVydHlLZXksIHVua25vd24+KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZ2V0QXR0cmlidXRlKCd0ZW1wbGF0ZScpKSB7XG4gICAgICBjb25zdCBzcGxpdHRlZFRlbXBsYXRlTmFtZSA9IHRoaXMuZ2V0QXR0cmlidXRlKCd0ZW1wbGF0ZScpIS5zcGxpdCgnLycpO1xuICAgICAgY29uc3QgdGVtcGxhdGVOYW1lID0gc3BsaXR0ZWRUZW1wbGF0ZU5hbWVbc3BsaXR0ZWRUZW1wbGF0ZU5hbWUubGVuZ3RoIC0gMV0ucmVwbGFjZSgnLnhtbCcsICcnKTtcbiAgICAgIHRoaXMuaW5uZXJIVE1MID0gJyc7XG4gICAgICBzd2l0Y2ggKHRlbXBsYXRlTmFtZSkge1xuICAgICAgICBjYXNlICdtYXBfcmVzcG9uc2UnOiB7XG4gICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZCh0aGlzLmZyYWdtZW50RnJvbVN0cmluZyhtYXBSZXNwb25zZSkuZmlyc3RFbGVtZW50Q2hpbGQuZmlyc3RFbGVtZW50Q2hpbGQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ21hcF9yZXNwb25zZV9wb2ludCc6IHtcbiAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKHRoaXMuZnJhZ21lbnRGcm9tU3RyaW5nKG1hcFJlc3BvbnNlUG9pbnQpLmZpcnN0RWxlbWVudENoaWxkLmZpcnN0RWxlbWVudENoaWxkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdtYXRjaF9jb3JyZWN0JzpcbiAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKHRoaXMuZnJhZ21lbnRGcm9tU3RyaW5nKG1hdGNoQ29ycmVjdCkuZmlyc3RFbGVtZW50Q2hpbGQuZmlyc3RFbGVtZW50Q2hpbGQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZnJhZ21lbnRGcm9tU3RyaW5nKHN0ckhUTUw6IHN0cmluZykge1xuICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVSYW5nZSgpLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChzdHJIVE1MKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktcmVzcG9uc2UtcHJvY2Vzc2luZyc6IFF0aVJlc3BvbnNlUHJvY2Vzc2luZztcbiAgfVxufVxuIiwgImV4cG9ydCBjb25zdCBtYXRjaENvcnJlY3QgPSBgPHF0aS1yZXNwb25zZS1wcm9jZXNzaW5nPlxuICA8cXRpLXJlc3BvbnNlLWNvbmRpdGlvbj5cbiAgICA8cXRpLXJlc3BvbnNlLWlmPlxuICAgICAgPHF0aS1tYXRjaD5cbiAgICAgICAgPHF0aS12YXJpYWJsZSBpZGVudGlmaWVyPVwiUkVTUE9OU0VcIj48L3F0aS12YXJpYWJsZT5cbiAgICAgICAgPHF0aS1jb3JyZWN0IGlkZW50aWZpZXI9XCJSRVNQT05TRVwiPjwvcXRpLWNvcnJlY3Q+XG4gICAgICA8L3F0aS1tYXRjaD5cbiAgICAgIDxxdGktc2V0LW91dGNvbWUtdmFsdWUgaWRlbnRpZmllcj1cIlNDT1JFXCI+XG4gICAgICAgIDxxdGktYmFzZS12YWx1ZSBiYXNlLXR5cGU9XCJmbG9hdFwiPjE8L3F0aS1iYXNlLXZhbHVlPlxuICAgICAgPC9xdGktc2V0LW91dGNvbWUtdmFsdWU+XG4gICAgPC9xdGktcmVzcG9uc2UtaWY+XG4gICAgPHF0aS1yZXNwb25zZS1lbHNlPlxuICAgICAgPHF0aS1zZXQtb3V0Y29tZS12YWx1ZSBpZGVudGlmaWVyPVwiU0NPUkVcIj5cbiAgICAgICAgPHF0aS1iYXNlLXZhbHVlIGJhc2UtdHlwZT1cImZsb2F0XCI+MDwvcXRpLWJhc2UtdmFsdWU+XG4gICAgICA8L3F0aS1zZXQtb3V0Y29tZS12YWx1ZT5cbiAgICA8L3F0aS1yZXNwb25zZS1lbHNlPlxuICA8L3F0aS1yZXNwb25zZS1jb25kaXRpb24+XG48L3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nPmA7XG5cbmV4cG9ydCBjb25zdCBtYXBSZXNwb25zZSA9IGA8cXRpLXJlc3BvbnNlLXByb2Nlc3Npbmc+XG4gIDxxdGktcmVzcG9uc2UtY29uZGl0aW9uPlxuICAgIDxxdGktcmVzcG9uc2UtaWY+XG4gICAgICA8cXRpLWlzLW51bGw+XG4gICAgICAgIDxxdGktdmFyaWFibGUgaWRlbnRpZmllcj1cIlJFU1BPTlNFXCI+PC9xdGktdmFyaWFibGU+XG4gICAgICA8L3F0aS1pcy1udWxsPlxuICAgICAgPHF0aS1zZXQtb3V0Y29tZS12YWx1ZSBpZGVudGlmaWVyPVwiU0NPUkVcIj5cbiAgICAgICAgPHF0aS1iYXNlLXZhbHVlIGJhc2UtdHlwZT1cImZsb2F0XCI+MC4wPC9xdGktYmFzZS12YWx1ZT5cbiAgICAgIDwvcXRpLXNldC1vdXRjb21lLXZhbHVlPlxuICAgIDwvcXRpLXJlc3BvbnNlLWlmPlxuICAgIDxxdGktcmVzcG9uc2UtZWxzZT5cbiAgICAgIDxxdGktc2V0LW91dGNvbWUtdmFsdWUgaWRlbnRpZmllcj1cIlNDT1JFXCI+XG4gICAgICAgIDxxdGktbWFwLXJlc3BvbnNlIGlkZW50aWZpZXI9XCJSRVNQT05TRVwiPiA8L3F0aS1tYXAtcmVzcG9uc2U+XG4gICAgICA8L3F0aS1zZXQtb3V0Y29tZS12YWx1ZT5cbiAgICA8L3F0aS1yZXNwb25zZS1lbHNlPlxuICA8L3F0aS1yZXNwb25zZS1jb25kaXRpb24+XG48L3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nPmA7XG5cbmV4cG9ydCBjb25zdCBtYXBSZXNwb25zZVBvaW50ID0gYDxxdGktcmVzcG9uc2UtcHJvY2Vzc2luZz5cbiAgPHF0aS1yZXNwb25zZS1jb25kaXRpb24+XG4gICAgPHF0aS1yZXNwb25zZS1pZj5cbiAgICAgIDxxdGktaXMtbnVsbD5cbiAgICAgICAgPHF0aS12YXJpYWJsZSBpZGVudGlmaWVyPVwiUkVTUE9OU0VcIj48L3F0aS12YXJpYWJsZT5cbiAgICAgIDwvcXRpLWlzLW51bGw+XG4gICAgICA8cXRpLXNldC1vdXRjb21lLXZhbHVlIGlkZW50aWZpZXI9XCJTQ09SRVwiPlxuICAgICAgICA8cXRpLWJhc2UtdmFsdWUgYmFzZS10eXBlPVwiZmxvYXRcIj4wPC9xdGktYmFzZS12YWx1ZT5cbiAgICAgIDwvcXRpLXNldC1vdXRjb21lLXZhbHVlPlxuICAgIDwvcXRpLXJlc3BvbnNlLWlmPlxuICAgIDxxdGktcmVzcG9uc2UtZWxzZT5cbiAgICAgIDxxdGktc2V0LW91dGNvbWUtdmFsdWUgaWRlbnRpZmllcj1cIlNDT1JFXCI+XG4gICAgICAgIDxxdGktbWFwLXJlc3BvbnNlLXBvaW50IGlkZW50aWZpZXI9XCJSRVNQT05TRVwiPjwvcXRpLW1hcC1yZXNwb25zZS1wb2ludD5cbiAgICAgIDwvcXRpLXNldC1vdXRjb21lLXZhbHVlPlxuICAgIDwvcXRpLXJlc3BvbnNlLWVsc2U+XG4gIDwvcXRpLXJlc3BvbnNlLWNvbmRpdGlvbj5cbjwvcXRpLXJlc3BvbnNlLXByb2Nlc3Npbmc+YDtcbiIsICJpbXBvcnQgeyBPdXRjb21lVmFyaWFibGUgfSBmcm9tICdAY2l0b2xhYi9xdGktY29tcG9uZW50cy9xdGktY29tcG9uZW50cyc7XG5pbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IGNvbnZlcnROdW1iZXJUb1VuaXZlcmFsRm9ybWF0IH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdXRpbHMnO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uLy4uL3F0aS1leHByZXNzaW9uL3F0aS1leHByZXNzaW9uJztcbmltcG9ydCB7IFF0aVJ1bGUgfSBmcm9tICcuLi9xdGktcnVsZSc7XG5cbi8qKlxuICogVGhlIGxvb2t1cE91dGNvbWVWYWx1ZSBydWxlIHNldHMgdGhlIHZhbHVlIG9mIGFuIG91dGNvbWUgdmFyaWFibGUgdG8gdGhlIHZhbHVlIG9idGFpbmVkXG4gKiBieSBsb29raW5nIHVwIHRoZSB2YWx1ZSBvZiB0aGUgYXNzb2NpYXRlZCBleHByZXNzaW9uIGluIHRoZSBsb29rdXBUYWJsZSBhc3NvY2lhdGVkXG4gKiB3aXRoIHRoZSBvdXRjb21lJ3MgZGVjbGFyYXRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBRdGlMb29rdXBPdXRjb21lVmFsdWUgZXh0ZW5kcyBRdGlSdWxlIHtcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIGlkZW50aWZpZXI6IHN0cmluZztcblxuICBnZXQgY2hpbGRFeHByZXNzaW9uKCk6IFF0aUV4cHJlc3Npb248c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZmlyc3RFbGVtZW50Q2hpbGQgYXMgUXRpRXhwcmVzc2lvbjxzdHJpbmc+O1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIHByb2Nlc3MoKTogbnVtYmVyIHtcbiAgICBjb25zdCBpZGVudGlmaWVyID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2lkZW50aWZpZXInKTtcbiAgICBjb25zdCBvdXRjb21lVmFyaWFibGUgPSB0aGlzLmNsb3Nlc3QoJ3F0aS1hc3Nlc3NtZW50LWl0ZW0nKS5nZXRWYXJpYWJsZShpZGVudGlmaWVyKSBhcyBPdXRjb21lVmFyaWFibGU7XG4gICAgbGV0IHZhbHVlO1xuICAgIGlmIChvdXRjb21lVmFyaWFibGUuaW50ZXJwb2xhdGlvblRhYmxlKSB7XG4gICAgICB2YWx1ZSA9IG91dGNvbWVWYXJpYWJsZS5pbnRlcnBvbGF0aW9uVGFibGUuZ2V0KHBhcnNlSW50KHRoaXMuY2hpbGRFeHByZXNzaW9uLmNhbGN1bGF0ZSgpKSk7XG4gICAgfVxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ2xvb2t1cE91dGNvbWVWYWx1ZTogdmFsdWUgaXMgbnVsbCBvciB1bmRlZmluZWQnKTtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQ8eyBvdXRjb21lSWRlbnRpZmllcjogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10gfT4oJ3F0aS1zZXQtb3V0Y29tZS12YWx1ZScsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWUsXG4gICAgICAgIGRldGFpbDoge1xuICAgICAgICAgIG91dGNvbWVJZGVudGlmaWVyOiB0aGlzLmlkZW50aWZpZXIsXG4gICAgICAgICAgdmFsdWU6IGNvbnZlcnROdW1iZXJUb1VuaXZlcmFsRm9ybWF0KHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1sb29rdXAtb3V0Y29tZS12YWx1ZScsIFF0aUxvb2t1cE91dGNvbWVWYWx1ZSk7XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1sb29rdXAtb3V0Y29tZS12YWx1ZSc6IFF0aUxvb2t1cE91dGNvbWVWYWx1ZTtcbiAgfVxufVxuIiwgImltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBodG1sLCBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1ydWxlJylcbmV4cG9ydCBjbGFzcyBRdGlSdWxlIGV4dGVuZHMgTGl0RWxlbWVudCBpbXBsZW1lbnRzIFF0aVJ1bGVCYXNlIHtcbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgcHVibGljIHByb2Nlc3MoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFF0aVJ1bGVCYXNlIHtcbiAgcHJvY2VzcygpOiBhbnk7XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1ydWxlJzogUXRpUnVsZTtcbiAgfVxufVxuIiwgImltcG9ydCB7IGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uLy4uL3F0aS1leHByZXNzaW9uL3F0aS1leHByZXNzaW9uJztcbmltcG9ydCB7IFF0aVJ1bGUgfSBmcm9tICcuLi9xdGktcnVsZSc7XG5cbmV4cG9ydCBjbGFzcyBRdGlSZXNwb25zZUNvbmRpdGlvbiBleHRlbmRzIFF0aVJ1bGUge1xuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPHNsb3Q+PC9zbG90PmA7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgcHJvY2VzcygpIHtcbiAgICBjb25zdCBicmFuY2hlcyA9IFsuLi50aGlzLmNoaWxkcmVuXSBhcyBRdGlFeHByZXNzaW9uPGFueT5bXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnJhbmNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGJyYW5jaCA9IGJyYW5jaGVzW2ldO1xuXG4gICAgICBpZiAoYnJhbmNoLmNhbGN1bGF0ZSgpKSB7XG4gICAgICAgIChicmFuY2ggYXMgdW5rbm93biBhcyBRdGlSdWxlKS5wcm9jZXNzKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1yZXNwb25zZS1jb25kaXRpb24nLCBRdGlSZXNwb25zZUNvbmRpdGlvbik7XG4iLCAiaW1wb3J0IHsgY29udmVydE51bWJlclRvVW5pdmVyYWxGb3JtYXQgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC91dGlscyc7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uLCBRdGlFeHByZXNzaW9uQmFzZSB9IGZyb20gJy4uLy4uL3F0aS1leHByZXNzaW9uL3F0aS1leHByZXNzaW9uJztcbmltcG9ydCB7IFF0aVJ1bGUsIFF0aVJ1bGVCYXNlIH0gZnJvbSAnLi4vcXRpLXJ1bGUnO1xuXG5leHBvcnQgY2xhc3MgUXRpU2V0T3V0Y29tZVZhbHVlIGV4dGVuZHMgUXRpUnVsZSB7XG4gIHB1YmxpYyBvdmVycmlkZSBwcm9jZXNzKCkge1xuICAgIGNvbnN0IG91dGNvbWVJZGVudGlmaWVyID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2lkZW50aWZpZXInKTtcblxuICAgIGNvbnN0IGV4cHJlc3Npb24gPSB0aGlzLmZpcnN0RWxlbWVudENoaWxkIGFzIFF0aUV4cHJlc3Npb248c3RyaW5nPjtcblxuICAgIGNvbnN0IHJ1bGUgPSBuZXcgUXRpU2V0T3V0Y29tZVZhbHVlUnVsZShleHByZXNzaW9uKTtcbiAgICBjb25zdCB2YWx1ZSA9IHJ1bGUucHJvY2VzcygpO1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBDdXN0b21FdmVudDx7IG91dGNvbWVJZGVudGlmaWVyOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSB9PigncXRpLXNldC1vdXRjb21lLXZhbHVlJywge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgb3V0Y29tZUlkZW50aWZpZXIsXG4gICAgICAgICAgdmFsdWU6IEFycmF5LmlzQXJyYXkodmFsdWUpXG4gICAgICAgICAgICA/IHZhbHVlLm1hcCgodjogc3RyaW5nKSA9PiBjb252ZXJ0TnVtYmVyVG9Vbml2ZXJhbEZvcm1hdCh2KSlcbiAgICAgICAgICAgIDogY29udmVydE51bWJlclRvVW5pdmVyYWxGb3JtYXQodmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUXRpU2V0T3V0Y29tZVZhbHVlUnVsZTxUPiBpbXBsZW1lbnRzIFF0aVJ1bGVCYXNlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBleHByZXNzaW9uOiBRdGlFeHByZXNzaW9uQmFzZTxUPikge31cblxuICBwcm9jZXNzKCk6IGFueSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmV4cHJlc3Npb24gPyB0aGlzLmV4cHJlc3Npb24uY2FsY3VsYXRlKCkgOiBudWxsO1xuXG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUud2Fybignc2V0T3V0Y29tZVZhbHVlOiB2YWx1ZSBpcyBudWxsIG9yIHVuZGVmaW5lZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktc2V0LW91dGNvbWUtdmFsdWUnLCBRdGlTZXRPdXRjb21lVmFsdWUpO1xuIiwgImltcG9ydCB7IExpdEVsZW1lbnQsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgUXRpUnVsZSB9IGZyb20gJy4uL3F0aS1ydWxlL3F0aS1ydWxlJztcblxuZXhwb3J0IGNsYXNzIFF0aVJlc3BvbnNlRWxzZSBleHRlbmRzIExpdEVsZW1lbnQge1xuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPHNsb3Q+PC9zbG90PmA7XG4gIH1cblxuICBwdWJsaWMgY2FsY3VsYXRlKCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRydWU7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0U3ViUnVsZXMoKTogUXRpUnVsZVtdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuY2hpbGRyZW5dIGFzIFF0aVJ1bGVbXTtcbiAgfVxuXG4gIHB1YmxpYyBwcm9jZXNzKCkge1xuICAgIGNvbnN0IHN1YlJ1bGVzID0gdGhpcy5nZXRTdWJSdWxlcygpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3ViUnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHN1YlJ1bGUgPSBzdWJSdWxlc1tpXTtcbiAgICAgIHN1YlJ1bGUucHJvY2VzcygpO1xuICAgIH1cbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1yZXNwb25zZS1lbHNlJywgUXRpUmVzcG9uc2VFbHNlKTtcbiIsICJpbXBvcnQgeyBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IFF0aVJlc3BvbnNlSWYgfSBmcm9tICcuLi9xdGktcmVzcG9uc2UtaWYnO1xuXG5leHBvcnQgY2xhc3MgUXRpUmVzcG9uc2VFbHNlSWYgZXh0ZW5kcyBRdGlSZXNwb25zZUlmIHtcbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYCR7c3VwZXIucmVuZGVyKCl9YDtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1yZXNwb25zZS1lbHNlLWlmJywgUXRpUmVzcG9uc2VFbHNlSWYpO1xuIiwgImltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi8uLi9xdGktZXhwcmVzc2lvbi9xdGktZXhwcmVzc2lvbic7XG5pbXBvcnQgeyBRdGlSdWxlIH0gZnJvbSAnLi4vLi4vcXRpLXJ1bGUvcXRpLXJ1bGUnO1xuaW1wb3J0IHsgUXRpUmVzcG9uc2VFbHNlIH0gZnJvbSAnLi4vcXRpLXJlc3BvbnNlLWVsc2UnO1xuXG5leHBvcnQgY2xhc3MgUXRpUmVzcG9uc2VJZiBleHRlbmRzIFF0aVJlc3BvbnNlRWxzZSB7XG4gIHB1YmxpYyBvdmVycmlkZSBjYWxjdWxhdGUoKSB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IHRoaXMuZmlyc3RFbGVtZW50Q2hpbGQgYXMgUXRpRXhwcmVzc2lvbjxib29sZWFuPjtcbiAgICBjb25zdCByZXN1bHQgPSBleHByZXNzaW9uLmNhbGN1bGF0ZSgpIGFzIGJvb2xlYW47XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBnZXRTdWJSdWxlcygpOiBRdGlSdWxlW10ge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0LnB1c2godGhpcy5jaGlsZHJlbltpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktcmVzcG9uc2UtaWYnLCBRdGlSZXNwb25zZUlmKTtcbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50LCBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlLCBWYXJpYWJsZURlY2xhcmF0aW9uIH0gZnJvbSAnLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IFF0aUFzc2Vzc21lbnRJdGVtIH0gZnJvbSAnLi4vLi4vcXRpLWFzc2Vzc21lbnQtaXRlbS9xdGktYXNzZXNzbWVudC1pdGVtJztcbmltcG9ydCB7IFF0aU11bHRpcGxlIH0gZnJvbSAnLi9xdGktbXVsdGlwbGUvcXRpLW11bHRpcGxlJztcblxuZXhwb3J0IGludGVyZmFjZSBRdGlFeHByZXNzaW9uQmFzZTxUPiB7XG4gIC8vIGdldCBhc3Nlc3NtZW50SXRlbSgpOiBRdGlBc3Nlc3NtZW50SXRlbTtcblxuICAvLyBnZXRWYXJpYWJsZXMoKTogVmFyaWFibGVEZWNsYXJhdGlvbjxudW1iZXIgfCBzdHJpbmcgfCAobnVtYmVyIHwgc3RyaW5nKVtdIHwgbnVsbD5bXTtcbiAgY2FsY3VsYXRlKCk6IFJlYWRvbmx5PFQ+O1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUXRpRXhwcmVzc2lvbjxUPiBleHRlbmRzIExpdEVsZW1lbnQgaW1wbGVtZW50cyBRdGlFeHByZXNzaW9uQmFzZTxUPiB7XG4gIEBzdGF0ZSgpXG4gIHByb3RlY3RlZCByZXN1bHQ6IGFueTtcblxuICAvLyBoaWRlIHRoZSBzbG90IHdpdGggY3NzXG4gIHN0YXRpYyBzdHlsZXMgPSBjc3NgXG4gICAgc2xvdCB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgYDtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPHByZT4ke0pTT04uc3RyaW5naWZ5KHRoaXMucmVzdWx0LCBudWxsLCAyKX08L3ByZT5cbiAgICAgIDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgcHVibGljIGNhbGN1bGF0ZSgpOiBSZWFkb25seTxUPiB7XG4gICAgdGhpcy5yZXN1bHQgPSB0aGlzLmdldFJlc3VsdCgpO1xuICAgIHJldHVybiB0aGlzLnJlc3VsdDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRSZXN1bHQoKTogUmVhZG9ubHk8VD4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICBnZXQgYXNzZXNzbWVudEl0ZW0oKTogUXRpQXNzZXNzbWVudEl0ZW0ge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoJ3F0aS1hc3Nlc3NtZW50LWl0ZW0nKSBhcyBRdGlBc3Nlc3NtZW50SXRlbTtcbiAgfVxuXG4gIGdldFZhcmlhYmxlcyA9ICgpOiBWYXJpYWJsZURlY2xhcmF0aW9uPG51bWJlciB8IHN0cmluZyB8IChudW1iZXIgfCBzdHJpbmcpW10gfCBudWxsPltdID0+XG4gICAgLy8gRklYTUU6IGlmIHRoaXMgaXRzZWxmIGlzIG11bHRpcGxlLCB0aGlzIHdpbGwgbmV2ZXIgZW50ZXIgdGhlIHF0aS1tdWx0aXBsZSBzd2l0Y2hcbiAgICAvLyBTZWUgdGhpcyBleGFtcGxlIGhlcmU6IGh0dHBzOi8vZ2l0aHViLmNvbS8xRWRUZWNoL3F0aS1leGFtcGxlcy9ibG9iL21hc3Rlci9xdGl2My1leGFtcGxlcy9wYWNrYWdpbmcvaXRlbXMvRXhhbXBsZTA1LWZlZWRiYWNrQmxvY2stYWRhcHRpdmUueG1sXG5cbiAgICBBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4pXG4gICAgICAubWFwKChlOiBFbGVtZW50KSA9PiB7XG4gICAgICAgIHN3aXRjaCAoZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICBjYXNlICdxdGktYmFzZS12YWx1ZSc6IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGJhc2VUeXBlOiBlLmdldEF0dHJpYnV0ZSgnYmFzZS10eXBlJyksXG4gICAgICAgICAgICAgIHZhbHVlOiBlLnRleHRDb250ZW50LFxuICAgICAgICAgICAgICBjYXJkaW5hbGl0eTogJ3NpbmdsZSdcbiAgICAgICAgICAgIH0gYXMgUmVzcG9uc2VWYXJpYWJsZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSAncXRpLXZhcmlhYmxlJzoge1xuICAgICAgICAgICAgY29uc3QgaWRlbnRpZmllciA9IGUuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJykgfHwgJyc7XG4gICAgICAgICAgICBjb25zdCB2YXJpYWJsZSA9IHRoaXMuYXNzZXNzbWVudEl0ZW0uZ2V0VmFyaWFibGUoaWRlbnRpZmllcik7XG4gICAgICAgICAgICByZXR1cm4gdmFyaWFibGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgJ3F0aS1tdWx0aXBsZSc6IHtcbiAgICAgICAgICAgIGNvbnN0IG11bHRpcGxlID0gZSBhcyBRdGlNdWx0aXBsZTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IG11bHRpcGxlLmdldFJlc3VsdCgpO1xuICAgICAgICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaWRlbnRpZmllcjogJycsXG4gICAgICAgICAgICAgICAgYmFzZVR5cGU6IHZhbHVlc1swXS5iYXNlVHlwZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVzLm1hcCh2ID0+IHYudmFsdWUpLFxuICAgICAgICAgICAgICAgIGNhcmRpbmFsaXR5OiAnbXVsdGlwbGUnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdyZXNwb25zZSdcbiAgICAgICAgICAgICAgfSBhcyBSZXNwb25zZVZhcmlhYmxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgJ3F0aS1jb3JyZWN0Jzoge1xuICAgICAgICAgICAgY29uc3QgaWRlbnRpZmllciA9IGUuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJykgfHwgJyc7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZVZhcmlhYmxlID0gdGhpcy5hc3Nlc3NtZW50SXRlbS5nZXRSZXNwb25zZShpZGVudGlmaWVyKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGJhc2VUeXBlOiByZXNwb25zZVZhcmlhYmxlLmJhc2VUeXBlLFxuICAgICAgICAgICAgICB2YWx1ZTogcmVzcG9uc2VWYXJpYWJsZS5jb3JyZWN0UmVzcG9uc2UsXG4gICAgICAgICAgICAgIGNhcmRpbmFsaXR5OiByZXNwb25zZVZhcmlhYmxlLmNhcmRpbmFsaXR5XG4gICAgICAgICAgICB9IGFzIFJlc3BvbnNlVmFyaWFibGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIC8vIGFkZGVkIGZvciB1c2Ugb2YgcXRpLWVxdWFsLXJvdW5kZWRcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSBlIGFzIFF0aUV4cHJlc3Npb248bnVtYmVyPjtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBleHByZXNzaW9uLmdldFJlc3VsdCgpO1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGJhc2VUeXBlOiAnaW50ZWdlcicsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgY2FyZGluYWxpdHk6ICdzaW5nbGUnXG4gICAgICAgICAgICAgIH0gYXMgUmVzcG9uc2VWYXJpYWJsZTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybignZGVmYXVsdCBub3Qgc3VmZmljaWVudCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmZpbHRlcih2ID0+IHYgIT09IG51bGwpO1xufVxuIiwgImltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuL3F0aS1leHByZXNzaW9uJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFF0aUNvbmRpdGlvbkV4cHJlc3Npb24gZXh0ZW5kcyBRdGlFeHByZXNzaW9uPGJvb2xlYW4+IHtcbiAgcHVibGljIGNhbGN1bGF0ZSgpOiBSZWFkb25seTxib29sZWFuPiB7XG4gICAgdGhpcy5yZXN1bHQgPSB0aGlzLmdldFJlc3VsdCgpO1xuICAgIHJldHVybiB0aGlzLnJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSZXN1bHQoKTogUmVhZG9ubHk8Ym9vbGVhbj4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBRdGlDb25kaXRpb25FeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWNvbmRpdGlvbi1leHByZXNzaW9uJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbnR5cGUgQ29uc3RydWN0b3I8VD4gPSBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBUO1xuZXhwb3J0IGNsYXNzIFF0aUFuZCBleHRlbmRzIHF0aUFuZE1peGluKFF0aUNvbmRpdGlvbkV4cHJlc3Npb24gYXMgdW5rbm93biBhcyBDb25zdHJ1Y3RvcjxRdGlDb25kaXRpb25FeHByZXNzaW9uPikge1xuICBwdWJsaWMgY2FsY3VsYXRlKCkge1xuICAgIHJldHVybiB0aGlzLmNhbGN1bGF0ZUNoaWxkcmVuKEFycmF5LmZyb20odGhpcy5jaGlsZHJlbiBhcyB1bmtub3duIGFzIFF0aUV4cHJlc3Npb248YW55PltdKSk7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgTW9ja1F0aUV4cHJlc3Npb248VD4gPSB7IGNhbGN1bGF0ZTogKCkgPT4gVCB9O1xudHlwZSBNb2NrQ29uc3RydWN0b3IgPSBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiB7fTtcbmV4cG9ydCBmdW5jdGlvbiBxdGlBbmRNaXhpbjxUQmFzZSBleHRlbmRzIE1vY2tDb25zdHJ1Y3Rvcj4oQmFzZTogVEJhc2UpIHtcbiAgcmV0dXJuIGNsYXNzIE1vY2tRdGlBbmQgZXh0ZW5kcyBCYXNlIHtcbiAgICBwdWJsaWMgY2FsY3VsYXRlQ2hpbGRyZW4oY2hpbGRyZW46IEFycmF5PE1vY2tRdGlFeHByZXNzaW9uPGFueT4+KSB7XG4gICAgICAvLyBjaGlsZHJlbiBjYW4gYmUgYSBtaXggb2YgcXRpLWV4cHJlc3Npb24gYW5kIHF0aS1jb25kaXRpb24tZXhwcmVzc2lvblxuICAgICAgY29uc3QgdmFsdWVzID0gY2hpbGRyZW4ubWFwKGMgPT4ge1xuICAgICAgICBjb25zdCBjb25kaXRpb24gPSBjIGFzIE1vY2tRdGlFeHByZXNzaW9uPGFueT47XG4gICAgICAgIGlmICghY29uZGl0aW9uLmNhbGN1bGF0ZSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFbGVtZW50IGRvZXNuJ3QgaW1wbGVtZW50IFF0aUNvbmRpdGlvbkV4cHJlc3Npb25cIik7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHZhbHVlID0gY29uZGl0aW9uLmNhbGN1bGF0ZSgpIGFzIEJvb2xlYW47XG4gICAgICAgIC8vIGNvbnZlcnQgc3RyaW5nIHZhbHVlIHRvIGJvb2xlYW4gYW5kIHJldHVybiBudWxsIGlmIG5vdCBwb3NzaWJsZVxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJ3RydWUnKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJ2ZhbHNlJykge1xuICAgICAgICAgICAgdmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCB2YWx1ZSBpbiBxdGktYW5kLCBleHBlY3RlZCBib29sZWFuJyk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gdmFsdWVzLmV2ZXJ5KGUgPT4ge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGUgPT09ICdib29sZWFuJyAmJiBlO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuIiwgImltcG9ydCB7IFF0aUFuZCB9IGZyb20gJy4vcXRpLWFuZCc7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1hbmQnLCBRdGlBbmQpO1xuXG5leHBvcnQgKiBmcm9tICcuL3F0aS1hbmQnO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktYW5kJzogUXRpQW5kO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBCYXNlVHlwZSB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFsL2V4cHJlc3Npb24tcmVzdWx0JztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5leHBvcnQgY2xhc3MgUXRpQmFzZVZhbHVlIGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxzdHJpbmc+IHtcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdiYXNlLXR5cGUnIH0pIGJhc2VUeXBlOiBCYXNlVHlwZSA9ICdzdHJpbmcnO1xuXG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKTogc3RyaW5nIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMudGV4dENvbnRlbnQ7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLWJhc2UtdmFsdWUnLCBRdGlCYXNlVmFsdWUpO1xuIiwgImltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1jb25kaXRpb24tZXhwcmVzc2lvbic7XG5cbi8vIFBLOiBGb3IgdGhlIGNvbnRhaW5zIHdlIGFzc3VtZSB0aGUgZXhwcmVzc2lvbnMgdG8gY2FsY3VsYXRlIGFyZSBhbGwgZGlyZWN0ZWRQYWlyc1xuLy8gSSBkb24ndCBrbm93IGl0IHRoaXMgaW4gUVRJIGlzIGFsd2F5cyB0aGUgY2FzZSBob3dldmVyP1xuZXhwb3J0IGNsYXNzIFF0aUNvbnRhaW5zIGV4dGVuZHMgUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiB7XG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKSB7XG4gICAgLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgZm9yIG90aGVyIHR5cGVzIHRoYW4gZGlyZWN0ZWRQYWlyXG4gICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRWYXJpYWJsZXMoKSBhcyBSZXNwb25zZVZhcmlhYmxlW107XG4gICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAyKSB7XG4gICAgICBjb25zdCB2YWx1ZTEgPSB2YWx1ZXNbMF07XG4gICAgICBjb25zdCB2YWx1ZTIgPSB2YWx1ZXNbMV07XG4gICAgICBpZiAoXG4gICAgICAgIHZhbHVlMS5iYXNlVHlwZSA9PT0gJ2RpcmVjdGVkUGFpcicgJiZcbiAgICAgICAgdmFsdWUyLmJhc2VUeXBlID09PSAnZGlyZWN0ZWRQYWlyJyAmJlxuICAgICAgICB2YWx1ZTEuY2FyZGluYWxpdHkgPT09ICdtdWx0aXBsZSdcbiAgICAgICkge1xuICAgICAgICBjb25zdCBwcm9qZWN0aW9uMSA9IHZhbHVlMS52YWx1ZSBhcyBzdHJpbmdbXTtcbiAgICAgICAgY29uc3QgcHJvamVjdGlvbjIgPSB2YWx1ZTIudmFsdWUgYXMgc3RyaW5nW107XG4gICAgICAgIGNvbnN0IGVudW1lcmFibGUgPSBwcm9qZWN0aW9uMS5maWx0ZXIoeCA9PiBwcm9qZWN0aW9uMi5pbmNsdWRlcyh4KSk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZW51bWVyYWJsZS5sZW5ndGggPiAwO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdmFsdWUxLmJhc2VUeXBlID09PSAnZGlyZWN0ZWRQYWlyJyAmJlxuICAgICAgICB2YWx1ZTIuYmFzZVR5cGUgPT09ICdkaXJlY3RlZFBhaXInICYmXG4gICAgICAgIHZhbHVlMS5jYXJkaW5hbGl0eSA9PT0gJ3NpbmdsZSdcbiAgICAgICkge1xuICAgICAgICBjb25zdCBwcm9qZWN0aW9uMSA9IHZhbHVlMS52YWx1ZSBhcyBzdHJpbmc7XG4gICAgICAgIGNvbnN0IHByb2plY3Rpb24yID0gdmFsdWUyLnZhbHVlIGFzIHN0cmluZ1tdO1xuICAgICAgICByZXR1cm4gcHJvamVjdGlvbjIuaW5jbHVkZXMocHJvamVjdGlvbjEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAndW5zdXBwb3J0ZWQgYmFzZVR5cGUgb3IgY2FyZGluYWxpdHkgaW4gcXRpIGNvbnRhaW5zLCBvbmx5IGJhc2VUeXBlOiBkaXJlY3RlZFBhaXIgYW5kIGNhcmRpbmFsaXR5OiBtdWx0aXBsZSBpcyBzdXBwb3J0ZWQnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgbnVtYmVyIG9mIGNoaWxkcmVuIGluIHF0aSBjb250YWlucycpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktY29udGFpbnMnLCBRdGlDb250YWlucyk7XG4iLCAiaW1wb3J0IHsgUXRpQXNzZXNzbWVudEl0ZW0gfSBmcm9tICcuLi8uLi8uLi9xdGktYXNzZXNzbWVudC1pdGVtL3F0aS1hc3Nlc3NtZW50LWl0ZW0nO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxuZXhwb3J0IGNsYXNzIFF0aUNvcnJlY3QgZXh0ZW5kcyBRdGlFeHByZXNzaW9uPHN0cmluZyB8IHN0cmluZ1tdPiB7XG4gIGdldCBpbnRlcnByZXRhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoJ2ludGVycHJldGF0aW9uJykgfHwgJyc7XG4gIH1cblxuICBvdmVycmlkZSBnZXRSZXN1bHQoKSB7XG4gICAgY29uc3QgaWRlbnRpZmllciA9IHRoaXMuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJykgfHwgJyc7XG4gICAgY29uc3QgcmVzcG9uc2VWYXJpYWJsZSA9ICh0aGlzLmNsb3Nlc3QoJ3F0aS1hc3Nlc3NtZW50LWl0ZW0nKSBhcyBRdGlBc3Nlc3NtZW50SXRlbSkuZ2V0UmVzcG9uc2UoaWRlbnRpZmllcik7XG4gICAgcmVzcG9uc2VWYXJpYWJsZS5jb3JyZWN0UmVzcG9uc2U7XG4gICAgaWYgKHJlc3BvbnNlVmFyaWFibGUuY2FyZGluYWxpdHkgIT09ICdzaW5nbGUnKSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2VWYXJpYWJsZS5jb3JyZWN0UmVzcG9uc2UubGVuZ3RoID4gMCA/IHJlc3BvbnNlVmFyaWFibGUuY29ycmVjdFJlc3BvbnNlWzBdIDogJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByZXNwb25zZVZhcmlhYmxlLmNvcnJlY3RSZXNwb25zZTtcbiAgICB9XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktY29ycmVjdCcsIFF0aUNvcnJlY3QpO1xuIiwgImltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgUmVzcG9uc2VWYXJpYWJsZSB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuXG5leHBvcnQgY2xhc3MgUXRpRXF1YWxSb3VuZGVkIGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxib29sZWFuPiB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KSByb3VuZGluZ01vZGU6ICdkZWNpbWFsUGxhY2VzJyB8ICdzaWduaWZpY2FudEZpZ3VyZXMnID0gJ3NpZ25pZmljYW50RmlndXJlcyc7XG5cbiAgZ2V0IGZpZ3VyZXMoKSB7XG4gICAgY29uc3QgYXR0ciA9IHRoaXMuZ2V0QXR0cmlidXRlKCdmaWd1cmVzJyk7XG4gICAgaWYgKCFhdHRyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdmaWd1cmVzIGF0dHJpYnV0ZSBpcyBtaXNzaW5nJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgZmlndXJlcyA9IHBhcnNlSW50KHRoaXMuZ2V0QXR0cmlidXRlKCdmaWd1cmVzJykgfHwgJzAnKTtcbiAgICBpZiAoaXNOYU4oZmlndXJlcykpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2ZpZ3VyZXMgYXR0cmlidXRlIGlzIG5vdCBhIG51bWJlcicpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChmaWd1cmVzIDwgMCkge1xuICAgICAgY29uc29sZS5lcnJvcignZmlndXJlcyBhdHRyaWJ1dGUgaXMgbmVnYXRpdmUnKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAoZmlndXJlcyA8IDEgJiYgdGhpcy5yb3VuZGluZ01vZGUgPT09ICdzaWduaWZpY2FudEZpZ3VyZXMnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdmaWd1cmVzIGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4gMSBmb3IgUm91bmRpbmdNb2RlIHNpZ25pZmljYW50RmlndXJlcycpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBmaWd1cmVzO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpIHtcbiAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDIpIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0VmFyaWFibGVzKCkgYXMgUmVzcG9uc2VWYXJpYWJsZVtdO1xuICAgICAgY29uc3QgdmFsdWUxID0gdmFsdWVzWzBdO1xuICAgICAgY29uc3QgdmFsdWUyID0gdmFsdWVzWzFdO1xuICAgICAgaWYgKHRoaXMucm91bmRpbmdNb2RlID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICB2YWx1ZTEuY2FyZGluYWxpdHkgIT09ICdzaW5nbGUnIHx8XG4gICAgICAgIHZhbHVlMi5jYXJkaW5hbGl0eSAhPT0gJ3NpbmdsZScgfHxcbiAgICAgICAgQXJyYXkuaXNBcnJheSh2YWx1ZTEudmFsdWUpIHx8XG4gICAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUyLnZhbHVlKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgY2FyZGluYWxpdHkgaW4gcXRpIGVxdWFsJyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAodmFsdWVzWzBdLmJhc2VUeXBlKSB7XG4gICAgICAgIGNhc2UgJ2ludGVnZXInOlxuICAgICAgICBjYXNlICdmbG9hdCc6IHtcbiAgICAgICAgICBjb25zdCBmbG9hdDEgPSBwYXJzZUZsb2F0KHZhbHVlMS52YWx1ZSBhcyBzdHJpbmcpO1xuICAgICAgICAgIGNvbnN0IGZsb2F0MiA9IHBhcnNlRmxvYXQodmFsdWUyLnZhbHVlIGFzIHN0cmluZyk7XG5cbiAgICAgICAgICBpZiAoIWlzTmFOKGZsb2F0MSkgJiYgIWlzTmFOKGZsb2F0MikpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJvdW5kaW5nTW9kZSA9PT0gJ3NpZ25pZmljYW50RmlndXJlcycpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZsb2F0MS50b1ByZWNpc2lvbih0aGlzLmZpZ3VyZXMpID09PSBmbG9hdDIudG9QcmVjaXNpb24odGhpcy5maWd1cmVzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgTWF0aC5yb3VuZChmbG9hdDEgKiBNYXRoLnBvdygxMCwgdGhpcy5maWd1cmVzKSkgLyBNYXRoLnBvdygxMCwgdGhpcy5maWd1cmVzKSA9PT1cbiAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKGZsb2F0MiAqIE1hdGgucG93KDEwLCB0aGlzLmZpZ3VyZXMpKSAvIE1hdGgucG93KDEwLCB0aGlzLmZpZ3VyZXMpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYHZhbHVlIGNhbm5vdCBiZSBjYXN0ZWQgdG8gbnVtZXJpYyB2YWx1ZSBpbiBlcXVhbFJvdW5kZWQgb3BlcmF0b3I6ICR7ZmxvYXQxfSwgJHtmbG9hdDJ9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGB2YWx1ZXMgb3RoZXIgdGhhbiBmbG9hdCBhbmQgaW50IGNhbm5vdCBiZSB1c2VkIGluIGVxdWFsUm91bmRlZCBvcGVyYXRvci5gKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIG51bWJlciBvZiBjaGlsZHJlbiBpbiBxdGktZXF1YWwtcm91bmRlZCcpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLWVxdWFsLXJvdW5kZWQnLCBRdGlFcXVhbFJvdW5kZWQpO1xuIiwgImltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgUmVzcG9uc2VWYXJpYWJsZSB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBTY29yaW5nSGVscGVyIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL3Njb3JpbmctaGVscGVyJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBjbGFzcyBRdGlFcXVhbCBleHRlbmRzIFF0aUV4cHJlc3Npb248Ym9vbGVhbj4ge1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgdG9sZXJhbmNlTW9kZTogJ2V4YWN0JyB8ICdyZWxhdGl2ZScgfCAnYWJzb2x1dGUnID0gJ2V4YWN0JztcblxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCkge1xuICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMikge1xuICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRWYXJpYWJsZXMoKSBhcyBSZXNwb25zZVZhcmlhYmxlW107XG4gICAgICBjb25zdCB2YWx1ZTEgPSB2YWx1ZXNbMF07XG4gICAgICBjb25zdCB2YWx1ZTIgPSB2YWx1ZXNbMV07XG4gICAgICBpZiAodGhpcy50b2xlcmFuY2VNb2RlICE9PSAnZXhhY3QnKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3RvbGVyYW5jZU1vZGUgaXMgbm90IHN1cHBvcnRlZCB5ZXQnKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICB2YWx1ZTEuY2FyZGluYWxpdHkgIT09ICdzaW5nbGUnIHx8XG4gICAgICAgIHZhbHVlMi5jYXJkaW5hbGl0eSAhPT0gJ3NpbmdsZScgfHxcbiAgICAgICAgQXJyYXkuaXNBcnJheSh2YWx1ZTEudmFsdWUpIHx8XG4gICAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUyLnZhbHVlKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgY2FyZGluYWxpdHkgaW4gcXRpIGVxdWFsJyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBTY29yaW5nSGVscGVyLmNvbXBhcmVTaW5nbGVWYWx1ZXModmFsdWUxLnZhbHVlIGFzIHN0cmluZywgdmFsdWUyLnZhbHVlIGFzIHN0cmluZywgdmFsdWUxLmJhc2VUeXBlKTtcbiAgICB9XG4gICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBudW1iZXIgb2YgY2hpbGRyZW4gaW4gcXRpLWVxdWFsJyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktZXF1YWwnLCBRdGlFcXVhbCk7XG4iLCAiaW1wb3J0IHsgQmFzZVR5cGUgfSBmcm9tICcuLi8uLic7XG5cbmV4cG9ydCBjbGFzcyBTY29yaW5nSGVscGVyIHtcbiAgcHVibGljIHN0YXRpYyBjb21wYXJlU2luZ2xlVmFsdWVzKHZhbHVlMTogUmVhZG9ubHk8c3RyaW5nPiwgdmFsdWUyOiBSZWFkb25seTxzdHJpbmc+LCBiYXNlVHlwZTogQmFzZVR5cGUpOiBib29sZWFuIHtcbiAgICBzd2l0Y2ggKGJhc2VUeXBlKSB7XG4gICAgICBjYXNlICdpZGVudGlmaWVyJzpcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIHJldHVybiB2YWx1ZTEgPT09IHZhbHVlMjtcbiAgICAgIGNhc2UgJ2ludGVnZXInOiB7XG4gICAgICAgIGNvbnN0IGludDEgPSBwYXJzZUludCh2YWx1ZTEsIDEwKTtcbiAgICAgICAgY29uc3QgaW50MiA9IHBhcnNlSW50KHZhbHVlMiwgMTApO1xuICAgICAgICBpZiAoIWlzTmFOKGludDEpICYmICFpc05hTihpbnQyKSkge1xuICAgICAgICAgIHJldHVybiBpbnQxID09PSBpbnQyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYENhbm5vdCBjb252ZXJ0ICR7dmFsdWUxfSBhbmQvb3IgJHt2YWx1ZTJ9IHRvIGludC5gKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2Zsb2F0Jzoge1xuICAgICAgICBjb25zdCBmbG9hdDEgPSBwYXJzZUZsb2F0KHZhbHVlMSk7XG4gICAgICAgIGNvbnN0IGZsb2F0MiA9IHBhcnNlRmxvYXQodmFsdWUyKTtcbiAgICAgICAgaWYgKCFpc05hTihmbG9hdDEpICYmICFpc05hTihmbG9hdDIpKSB7XG4gICAgICAgICAgcmV0dXJuIGZsb2F0MSA9PT0gZmxvYXQyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYGNvdWxkbid0IGNvbnZlcnQgJHt2YWx1ZTF9IGFuZC9vciAke3ZhbHVlMn0gdG8gZmxvYXQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdwYWlyJzpcbiAgICAgIGNhc2UgJ2RpcmVjdGVkUGFpcic6IHtcbiAgICAgICAgY29uc3QgcGFpcjEgPSB2YWx1ZTEuc3BsaXQoJyAnKS5zb3J0KCk7XG4gICAgICAgIGNvbnN0IHBhaXIyID0gdmFsdWUyLnNwbGl0KCcgJykuc29ydCgpO1xuICAgICAgICBpZiAocGFpcjEubGVuZ3RoID09PSAyICYmIHBhaXIyLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIGlmIChiYXNlVHlwZSA9PT0gJ3BhaXInKSB7XG4gICAgICAgICAgICBwYWlyMS5zb3J0KCk7XG4gICAgICAgICAgICBwYWlyMi5zb3J0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBwYWlyMS5qb2luKCcgJykgPT09IHBhaXIyLmpvaW4oJyAnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBjb21wYXJlZCB0d28gcGFpciBidXQgb25lIG9mIHRoZSB2YWx1ZXMgZG9lcyBub3QgaGF2ZSAyIHZhbHVlczogMTogJHt2YWx1ZTF9IDI6ICR7dmFsdWUyfWApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIiwgImltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxuZXhwb3J0IGNsYXNzIFF0aUd0IGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxib29sZWFuPiB7XG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAyKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldFZhcmlhYmxlcygpIGFzIFJlc3BvbnNlVmFyaWFibGVbXTtcbiAgICAgIGNvbnN0IHZhbHVlMSA9IHZhbHVlc1swXTtcbiAgICAgIGNvbnN0IHZhbHVlMiA9IHZhbHVlc1sxXTtcbiAgICAgIGlmICh2YWx1ZTEuYmFzZVR5cGUgPT09IHZhbHVlMi5iYXNlVHlwZSAmJiAodmFsdWUxLmJhc2VUeXBlID09PSAnaW50ZWdlcicgfHwgdmFsdWUxLmJhc2VUeXBlID09PSAnZmxvYXQnKSkge1xuICAgICAgICByZXR1cm4gK3ZhbHVlMS52YWx1ZSA+ICt2YWx1ZTIudmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIGJhc2VUeXBlIG9yIGNhcmRpbmFsaXR5IGluIHF0aSBndCcpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIG51bWJlciBvZiBjaGlsZHJlbiBpbiBxdCcpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLWd0JywgUXRpR3QpO1xuIiwgImltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1jb25kaXRpb24tZXhwcmVzc2lvbic7XG5cbi8vIFBLOiBGb3IgdGhlIGNvbnRhaW5zIHdlIGFzc3VtZSB0aGUgZXhwcmVzc2lvbnMgdG8gY2FsY3VsYXRlIGFyZSBhbGwgZGlyZWN0ZWRQYWlyc1xuLy8gSSBkb24ndCBrbm93IGl0IHRoaXMgaW4gUVRJIGlzIGFsd2F5cyB0aGUgY2FzZSBob3dldmVyP1xuZXhwb3J0IGNsYXNzIFF0aUd0ZSBleHRlbmRzIFF0aUNvbmRpdGlvbkV4cHJlc3Npb24ge1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMikge1xuICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRWYXJpYWJsZXMoKSBhcyBSZXNwb25zZVZhcmlhYmxlW107XG4gICAgICBjb25zdCB2YWx1ZTEgPSB2YWx1ZXNbMF07XG4gICAgICBjb25zdCB2YWx1ZTIgPSB2YWx1ZXNbMV07XG4gICAgICBpZiAodmFsdWUxLmJhc2VUeXBlID09PSB2YWx1ZTIuYmFzZVR5cGUgJiYgKHZhbHVlMS5iYXNlVHlwZSA9PT0gJ2ludGVnZXInIHx8IHZhbHVlMS5iYXNlVHlwZSA9PT0gJ2Zsb2F0JykpIHtcbiAgICAgICAgcmV0dXJuICt2YWx1ZTEudmFsdWUgPj0gK3ZhbHVlMi52YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgYmFzZVR5cGUgb3IgY2FyZGluYWxpdHkgaW4gcXRpIGd0ZScpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc29sZS5sb2coJ3VuZXhwZWN0ZWQgbnVtYmVyIG9mIGNoaWxkcmVuIGluIHF0ZScpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLWd0ZScsIFF0aUd0ZSk7XG4iLCAiaW1wb3J0IHsgUmVzcG9uc2VWYXJpYWJsZSB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuXG4vLyBQSzogRm9yIHRoZSBjb250YWlucyB3ZSBhc3N1bWUgdGhlIGV4cHJlc3Npb25zIHRvIGNhbGN1bGF0ZSBhcmUgYWxsIGRpcmVjdGVkUGFpcnNcbi8vIEkgZG9uJ3Qga25vdyBpdCB0aGlzIGluIFFUSSBpcyBhbHdheXMgdGhlIGNhc2UgaG93ZXZlcj9cbmV4cG9ydCBjbGFzcyBRdGlJc051bGwgZXh0ZW5kcyBRdGlFeHByZXNzaW9uPGJvb2xlYW4+IHtcbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IHZhcmlhYmxlcyA9IHRoaXMuZ2V0VmFyaWFibGVzKCkgYXMgUmVzcG9uc2VWYXJpYWJsZVtdO1xuICAgICAgaWYgKCF2YXJpYWJsZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBjb25zdCB2YWx1ZSA9IHZhcmlhYmxlc1swXS52YWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJyc7XG4gICAgfVxuICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgbnVtYmVyIG9mIGNoaWxkcmVuIGluIHF0aSBOdWxsJyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktaXMtbnVsbCcsIFF0aUlzTnVsbCk7XG4iLCAiaW1wb3J0IHsgUmVzcG9uc2VWYXJpYWJsZSB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuXG5leHBvcnQgY2xhc3MgUXRpTHQgZXh0ZW5kcyBRdGlFeHByZXNzaW9uPGJvb2xlYW4+IHtcbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDIpIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0VmFyaWFibGVzKCkgYXMgUmVzcG9uc2VWYXJpYWJsZVtdO1xuICAgICAgY29uc3QgdmFsdWUxID0gdmFsdWVzWzBdO1xuICAgICAgY29uc3QgdmFsdWUyID0gdmFsdWVzWzFdO1xuICAgICAgaWYgKHZhbHVlMS5iYXNlVHlwZSA9PT0gdmFsdWUyLmJhc2VUeXBlICYmICh2YWx1ZTEuYmFzZVR5cGUgPT09ICdpbnRlZ2VyJyB8fCB2YWx1ZTEuYmFzZVR5cGUgPT09ICdmbG9hdCcpKSB7XG4gICAgICAgIHJldHVybiArdmFsdWUxLnZhbHVlIDwgK3ZhbHVlMi52YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgYmFzZVR5cGUgb3IgY2FyZGluYWxpdHkgaW4gcXRpIGx0Jyk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgbnVtYmVyIG9mIGNoaWxkcmVuIGluIGx0Jyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktbHQnLCBRdGlMdCk7XG4iLCAiaW1wb3J0IHsgUmVzcG9uc2VWYXJpYWJsZSB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBRdGlDb25kaXRpb25FeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWNvbmRpdGlvbi1leHByZXNzaW9uJztcblxuLy8gUEs6IEZvciB0aGUgY29udGFpbnMgd2UgYXNzdW1lIHRoZSBleHByZXNzaW9ucyB0byBjYWxjdWxhdGUgYXJlIGFsbCBkaXJlY3RlZFBhaXJzXG4vLyBJIGRvbid0IGtub3cgaXQgdGhpcyBpbiBRVEkgaXMgYWx3YXlzIHRoZSBjYXNlIGhvd2V2ZXI/XG5leHBvcnQgY2xhc3MgUXRpTHRlIGV4dGVuZHMgUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiB7XG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAyKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldFZhcmlhYmxlcygpIGFzIFJlc3BvbnNlVmFyaWFibGVbXTtcbiAgICAgIGNvbnN0IHZhbHVlMSA9IHZhbHVlc1swXTtcbiAgICAgIGNvbnN0IHZhbHVlMiA9IHZhbHVlc1sxXTtcbiAgICAgIGlmICh2YWx1ZTEuYmFzZVR5cGUgPT09IHZhbHVlMi5iYXNlVHlwZSAmJiAodmFsdWUxLmJhc2VUeXBlID09PSAnaW50ZWdlcicgfHwgdmFsdWUxLmJhc2VUeXBlID09PSAnZmxvYXQnKSkge1xuICAgICAgICByZXR1cm4gK3ZhbHVlMS52YWx1ZSA8PSArdmFsdWUyLnZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBiYXNlVHlwZSBvciBjYXJkaW5hbGl0eSBpbiBxdGkgbHRlJyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zb2xlLmxvZygndW5leHBlY3RlZCBudW1iZXIgb2YgY2hpbGRyZW4gaW4gbHRlJyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktbHRlJywgUXRpTHRlKTtcbiIsICJpbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IFNjb3JpbmdIZWxwZXIgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvc2NvcmluZy1oZWxwZXInO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxuZXhwb3J0IGNsYXNzIFF0aU1hcFJlc3BvbnNlIGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxudW1iZXI+IHtcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIGlkZW50aWZpZXI6IHN0cmluZztcblxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCk6IG51bWJlciB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSB0aGlzLmFzc2Vzc21lbnRJdGVtLmdldFJlc3BvbnNlKHRoaXMuaWRlbnRpZmllcik7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgY29uc29sZS53YXJuKGBSZXNwb25zZSAke3RoaXMuaWRlbnRpZmllcn0gY2FuIG5vdCBiZSBmb3VuZGApO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IG1hcHBpbmcgPSByZXNwb25zZS5tYXBwaW5nO1xuICAgIGNvbnN0IGNhbmRpZGF0ZVJlc3BvbnNlcyA9ICFBcnJheS5pc0FycmF5KHJlc3BvbnNlLnZhbHVlKSA/IFtyZXNwb25zZS52YWx1ZV0gOiByZXNwb25zZS52YWx1ZTtcbiAgICBsZXQgcmVzdWx0ID0gMDtcbiAgICBmb3IgKGNvbnN0IGNhbmRpZGF0ZVJlc3BvbnNlIG9mIGNhbmRpZGF0ZVJlc3BvbnNlcykge1xuICAgICAgY29uc3QgbWFwcGVkVmFsdWUgPSBtYXBwaW5nLm1hcEVudHJpZXMuZmluZChlbnRyeSA9PiB7XG4gICAgICAgIHJldHVybiBTY29yaW5nSGVscGVyLmNvbXBhcmVTaW5nbGVWYWx1ZXMoZW50cnkubWFwS2V5LCBjYW5kaWRhdGVSZXNwb25zZSwgcmVzcG9uc2UuYmFzZVR5cGUpO1xuICAgICAgfSk7XG4gICAgICBpZiAoIShtYXBwZWRWYWx1ZSA9PSBudWxsIHx8IG1hcHBlZFZhbHVlLm1hcHBlZFZhbHVlID09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgcmVzdWx0ICs9IG1hcHBlZFZhbHVlLm1hcHBlZFZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ICs9IG1hcHBpbmcuZGVmYXVsdFZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobWFwcGluZy5sb3dlckJvdW5kICE9IG51bGwpIHtcbiAgICAgIHJlc3VsdCA9IE1hdGgubWF4KG1hcHBpbmcubG93ZXJCb3VuZCwgcmVzdWx0KTtcbiAgICB9XG4gICAgaWYgKG1hcHBpbmcudXBwZXJCb3VuZCAhPSBudWxsKSB7XG4gICAgICByZXN1bHQgPSBNYXRoLm1pbihtYXBwaW5nLnVwcGVyQm91bmQsIHJlc3VsdCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktbWFwLXJlc3BvbnNlJywgUXRpTWFwUmVzcG9uc2UpO1xuIiwgImltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSBcImxpdC9kZWNvcmF0b3JzLmpzXCI7XG5pbXBvcnQgeyBMaXRFbGVtZW50IH0gZnJvbSBcImxpdFwiO1xuXG5leHBvcnQgY2xhc3MgUXRpTWFwcGluZyBleHRlbmRzIExpdEVsZW1lbnQge1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6IFwiZGVmYXVsdC12YWx1ZVwiLCB0eXBlOiBOdW1iZXIgfSkgZGVmYXVsdFZhbHVlOiBudW1iZXIgPSAwO1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6IFwibG93ZXItYm91bmRcIiwgdHlwZTogTnVtYmVyIH0pIGxvd2VyQm91bmQ6IG51bWJlcjtcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiBcInVwcGVyLWJvdW5kXCIsIHR5cGU6IE51bWJlciB9KSB1cHBlckJvdW5kOiBudW1iZXI7XG5cbiAgXG4gIHB1YmxpYyBnZXQgbWFwRW50cmllcygpIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoXCJxdGktbWFwLWVudHJ5XCIpKS5tYXAoKGVsKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtYXBLZXk6IGVsLmdldEF0dHJpYnV0ZShcIm1hcC1rZXlcIiksXG4gICAgICAgIG1hcHBlZFZhbHVlOiArZWwuZ2V0QXR0cmlidXRlKFwibWFwcGVkLXZhbHVlXCIpLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJxdGktbWFwcGluZ1wiLCBRdGlNYXBwaW5nKTtcbiIsICJpbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IFNjb3JpbmdIZWxwZXIgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvc2NvcmluZy1oZWxwZXInO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxuZXhwb3J0IGNsYXNzIFF0aU1hdGNoIGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxib29sZWFuPiB7XG4gIC8vUEsgOiBGSVhNRS5cbiAgLy8gVGhpcyB3YXMgYSBsaXR0bGUgZXhwZXJpbWVudCBpZiB3ZSBjb3VsZCBjYWxsIHRoZSBtYXRjaCBmdW5jdGlvbiBhcyBhIHN0YXRpYyBmdW5jdGlvbixcbiAgLy8gVGhpcyBjYW4gYmUgdXNlZCBmb3IgYWxsIGtpbmQgb2YgdGhpbmdzLCBidXQgbm93IGVzcGVjaWFsbHkgZm9yIHVzZSBpblxuICAvLyBxdGktcmVzcG9uc2UtY29uZGl0aW9uLXNjcmlwdFxuICAvLyBpbiB3aGljaCB3ZSBwYXNzIHRoZSBleHByZXNzaW9ucyBhcyBwdXJlIGZ1bmN0aW9ucywgYW5kIGhvcGUgZm9yIHRoZSBiZXN0LlxuICAvLyBTQURMWSwgdGhlIGdldFZhcmlhYmxlcyB0aHJvd3Mgcm9ldCBpbiBkZSBldGVuLi4gd2VldCBub2cgbmlldCBwcmVjaWVzIGhvZSBkZXplIHdlcmt0LlxuICAvLyBNYWFyIGlrIGdhIGVyaW4gZHVpa2VuLlxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCkge1xuICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMikge1xuICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRWYXJpYWJsZXMoKSBhcyBSZXNwb25zZVZhcmlhYmxlW107XG4gICAgICBjb25zdCB2YWx1ZVRvTWFwID0gdmFsdWVzWzBdO1xuICAgICAgY29uc3QgY29ycmVjdFZhbHVlSW5mbyA9IHZhbHVlc1sxXTtcbiAgICAgIHJldHVybiBRdGlNYXRjaC5tYXRjaCh2YWx1ZVRvTWFwLCBjb3JyZWN0VmFsdWVJbmZvKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIG51bWJlciBvZiBjaGlsZHJlbiBpbiBtYXRjaCcpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBtYXRjaCh2YWx1ZVRvTWFwOiBSZXNwb25zZVZhcmlhYmxlLCBjb3JyZWN0VmFsdWVJbmZvOiBSZXNwb25zZVZhcmlhYmxlKSB7XG4gICAgaWYgKGNvcnJlY3RWYWx1ZUluZm8uY2FyZGluYWxpdHkgPT09ICdzaW5nbGUnKSB7XG4gICAgICBpZiAodmFsdWVUb01hcC52YWx1ZSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWVUb01hcC52YWx1ZSkgfHwgQXJyYXkuaXNBcnJheShjb3JyZWN0VmFsdWVJbmZvLnZhbHVlKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIGNhcmRpbmFsaXR5IGluIHF0aSBtYXRjaCcpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gU2NvcmluZ0hlbHBlci5jb21wYXJlU2luZ2xlVmFsdWVzKFxuICAgICAgICB2YWx1ZVRvTWFwLnZhbHVlPy50b1N0cmluZygpLFxuICAgICAgICBjb3JyZWN0VmFsdWVJbmZvLnZhbHVlLnRvU3RyaW5nKCksXG4gICAgICAgIGNvcnJlY3RWYWx1ZUluZm8uYmFzZVR5cGVcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZVRvTWFwLnZhbHVlKSB8fCAhQXJyYXkuaXNBcnJheShjb3JyZWN0VmFsdWVJbmZvLnZhbHVlKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIGNhcmRpbmFsaXR5IGluIHF0aSBtYXRjaCcpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICAvLyBpZiBsZW5ndGggaXMgbm90IGVxdWFsLCBkb24ndCBjaGVjaywgaXQncyBpbmNvcnJlY3QuXG4gICAgICBpZiAodmFsdWVUb01hcC52YWx1ZS5sZW5ndGggIT09IGNvcnJlY3RWYWx1ZUluZm8udmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGxldCBhbnN3ZXJJbmRleCA9IDA7XG4gICAgICBmb3IgKGNvbnN0IGNvcnJlY3RBbnN3ZXIgb2YgY29ycmVjdFZhbHVlSW5mby52YWx1ZSkge1xuICAgICAgICBpZiAoY29ycmVjdFZhbHVlSW5mby5jYXJkaW5hbGl0eSA9PT0gJ29yZGVyZWQnKSB7XG4gICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlVG9NYXAgPSB2YWx1ZVRvTWFwW2Fuc3dlckluZGV4XTtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBTY29yaW5nSGVscGVyLmNvbXBhcmVTaW5nbGVWYWx1ZXMoY29ycmVjdEFuc3dlciwgY3VycmVudFZhbHVlVG9NYXAsIGNvcnJlY3RWYWx1ZUluZm8uYmFzZVR5cGUpO1xuICAgICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHNlcXVlbmNlIGRvZXMgbm90IG1hdHRlciwgZmluZCB2YWx1ZSBzb21ld2hlcmUgaW4gdGhlIGFycmF5XG4gICAgICAgICAgLy8gYW5kIHJlbW92ZSB3aGVuIGZvdW5kLlxuICAgICAgICAgIGxldCBtYXRjaGluZ1ZhbHVlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICAgICAgICBmb3IgKGNvbnN0IG12IG9mIHZhbHVlVG9NYXAudmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IFNjb3JpbmdIZWxwZXIuY29tcGFyZVNpbmdsZVZhbHVlcyhjb3JyZWN0QW5zd2VyLCBtdiwgY29ycmVjdFZhbHVlSW5mby5iYXNlVHlwZSk7XG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgIG1hdGNoaW5nVmFsdWUgPSBtdjtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChtYXRjaGluZ1ZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAodmFsdWVUb01hcC52YWx1ZSBhcyBzdHJpbmdbXSkuc3BsaWNlKHZhbHVlVG9NYXAudmFsdWUuaW5kZXhPZihtYXRjaGluZ1ZhbHVlKSwgMSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYW5zd2VySW5kZXgrKztcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlOyAvLyBpZiBldmVyeXRoaW5nIG1hdGNoZXMgaXQncyBjb3JyZWN0O1xuICAgIH1cbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1tYXRjaCcsIFF0aU1hdGNoKTtcbiIsICJpbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBjbGFzcyBRdGlNZW1iZXIgZXh0ZW5kcyBRdGlFeHByZXNzaW9uPGJvb2xlYW4gfCBudWxsPiB7XG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKSB7XG4gICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRWYXJpYWJsZXMoKSBhcyBSZXNwb25zZVZhcmlhYmxlW107XG5cbiAgICBpZiAoISh0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMikpIHtcbiAgICAgIGNvbnNvbGUud2FybignVGhlIG1lbWJlciBvcGVyYXRvciB0YWtlcyB0d28gc3ViLWV4cHJlc3Npb25zJyk7XG4gICAgfVxuXG4gICAgY29uc3QgW3ZhbHVlMSwgdmFsdWUyXSA9IHZhbHVlcztcblxuICAgIGlmICghKHZhbHVlMS5iYXNlVHlwZSA9PT0gdmFsdWUyLmJhc2VUeXBlKSkge1xuICAgICAgY29uc29sZS53YXJuKCdXaGljaCBtdXN0IGJvdGggaGF2ZSB0aGUgc2FtZSBiYXNlLXR5cGUnKTtcbiAgICB9XG4gICAgaWYgKCEodmFsdWUyLmNhcmRpbmFsaXR5ID09PSAnbXVsdGlwbGUnIHx8IHZhbHVlMi5jYXJkaW5hbGl0eSA9PT0gJ29yZGVyZWQnKSkge1xuICAgICAgY29uc29sZS53YXJuKCdhbmQgdGhlIHNlY29uZCBtdXN0IGJlIGEgbXVsdGlwbGUgb3Igb3JkZXJlZCBjb250YWluZXInKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlMS5iYXNlVHlwZSA9PT0gJ2Zsb2F0JyB8fCB2YWx1ZTIuYmFzZVR5cGUgPT09ICdmbG9hdCcpIHtcbiAgICAgIGNvbnNvbGUud2FybignVGhlIG1lbWJlciBvcGVyYXRvciBzaG91bGQgbm90IGJlIHVzZWQgb24gc3ViLWV4cHJlc3Npb25zIHdpdGggYSBiYXNlLXR5cGUgb2YgZmxvYXQnKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlMS5iYXNlVHlwZSA9PT0gJ2R1cmF0aW9uJyB8fCB2YWx1ZTIuYmFzZVR5cGUgPT09ICdkdXJhdGlvbicpIHtcbiAgICAgIGNvbnNvbGUud2FybignSXQgbXVzdCBub3QgYmUgdXNlZCBvbiBzdWItZXhwcmVzc2lvbnMgd2l0aCBhIGJhc2UtdHlwZSBvZiBkdXJhdGlvbicpO1xuICAgIH1cblxuICAgIC8vIElmIGVpdGhlciBzdWItZXhwcmVzc2lvbiBpcyBOVUxMIHRoZW4gdGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0b3IgaXMgTlVMTFxuICAgIGlmICh2YWx1ZTEudmFsdWUgPT09IG51bGwgfHwgdmFsdWUyLnZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBUaGUgcmVzdWx0IGlzIGEgc2luZ2xlIGJvb2xlYW4gd2l0aCBhIHZhbHVlIG9mICd0cnVlJyBpZiB0aGUgdmFsdWUgZ2l2ZW4gYnkgdGhlIGZpcnN0IHN1Yi1leHByZXNzaW9uIGlzIGluIHRoZSBjb250YWluZXIgZGVmaW5lZCBieSB0aGUgc2Vjb25kIHN1Yi1leHByZXNzaW9uLlxuICAgIGNvbnN0IHByb2plY3Rpb24xID0gdmFsdWUxLnZhbHVlIGFzIHN0cmluZztcbiAgICBjb25zdCBwcm9qZWN0aW9uMiA9IHZhbHVlMi52YWx1ZSBhcyBzdHJpbmdbXTtcbiAgICByZXR1cm4gcHJvamVjdGlvbjIuaW5jbHVkZXMocHJvamVjdGlvbjEpO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLW1lbWJlcicsIFF0aU1lbWJlcik7XG4iLCAiaW1wb3J0IHsgUmVzcG9uc2VWYXJpYWJsZSwgVmFyaWFibGVEZWNsYXJhdGlvbiB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuZXhwb3J0IGNsYXNzIFF0aU11bHRpcGxlIGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxWYXJpYWJsZURlY2xhcmF0aW9uPHN0cmluZyB8IHN0cmluZ1tdPltdPiB7XG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKTogUmVzcG9uc2VWYXJpYWJsZVtdIHtcbiAgICBjb25zdCB2YXJpYWJsZXMgPSB0aGlzLmdldFZhcmlhYmxlcygpIGFzIFJlc3BvbnNlVmFyaWFibGVbXTtcbiAgICBpZiAodmFyaWFibGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBudW1iZXIgb2YgY2hpbGRyZW4gaW4gcXRpIG11bHRpcGxlJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZm9yIChjb25zdCB2YXJpYWJsZSBvZiB2YXJpYWJsZXMpIHtcbiAgICAgIGlmICh2YXJpYWJsZS5jYXJkaW5hbGl0eSAhPT0gJ211bHRpcGxlJyAmJiB2YXJpYWJsZS5jYXJkaW5hbGl0eSAhPT0gJ3NpbmdsZScpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBjYXJkaW5hbGl0eSBpbiBxdGkgbXVsdGlwbGUnKTtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvbnN0IHZhbHVlcyA9IHZhcmlhYmxlcy5tYXAodiA9PiB2LnZhbHVlKTtcbiAgICAvLyBjb25zb2xlLmxvZyh2YXJpYWJsZXMpO1xuICAgIC8vIGNvbnN0IGZsYXR0ZW5lZEFycmF5ID0gdmFsdWVzLnJlZHVjZSgoYWNjOiBzdHJpbmdbXSwgdmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKSA9PiB7XG4gICAgLy8gICByZXR1cm4gYWNjLmNvbmNhdChBcnJheS5pc0FycmF5KHZhbHVlKSA/IFsuLi52YWx1ZV0gOiB2YWx1ZSk7XG4gICAgLy8gfSwgW10pO1xuICAgIC8vIHJldHVybiBmbGF0dGVuZWRBcnJheTtcblxuICAgIHJldHVybiB2YXJpYWJsZXM7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktbXVsdGlwbGUnLCBRdGlNdWx0aXBsZSk7XG4iLCAiaW1wb3J0IHsgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuXG5leHBvcnQgY2xhc3MgUXRpTm90IGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxib29sZWFuPiB7XG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGAke3N1cGVyLnJlbmRlcigpfWA7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCkge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSB0aGlzLmZpcnN0RWxlbWVudENoaWxkIGFzIFF0aUV4cHJlc3Npb248Ym9vbGVhbj47XG4gICAgY29uc3QgcmVzdWx0ID0gZXhwcmVzc2lvbi5jYWxjdWxhdGUoKSBhcyBib29sZWFuO1xuICAgIHJldHVybiAhcmVzdWx0O1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLW5vdCcsIFF0aU5vdCk7XG4iLCAiaW1wb3J0IHsgUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1jb25kaXRpb24tZXhwcmVzc2lvbic7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuXG5leHBvcnQgY2xhc3MgUXRpT3IgZXh0ZW5kcyBRdGlDb25kaXRpb25FeHByZXNzaW9uIHtcbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpIHtcbiAgICAvLyBjaGlsZHJlbiBjYW4gYmUgYSBtaXggb2YgcXRpLWV4cHJlc3Npb24gYW5kIHF0aS1jb25kaXRpb24tZXhwcmVzc2lvblxuICAgIGNvbnN0IHZhbHVlcyA9IEFycmF5LmZyb20odGhpcy5jaGlsZHJlbikubWFwKGMgPT4ge1xuICAgICAgY29uc3QgY29uZGl0aW9uID0gYyBhcyBRdGlFeHByZXNzaW9uPGFueT47XG4gICAgICBpZiAoIWNvbmRpdGlvbi5jYWxjdWxhdGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVsZW1lbnQgZG9lc24ndCBpbXBsZW1lbnQgUXRpQ29uZGl0aW9uRXhwcmVzc2lvblwiKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBsZXQgdmFsdWUgPSBjb25kaXRpb24uY2FsY3VsYXRlKCkgYXMgQm9vbGVhbjtcbiAgICAgIC8vIGNvbnZlcnQgc3RyaW5nIHZhbHVlIHRvIGJvb2xlYW4gYW5kIHJldHVybiBudWxsIGlmIG5vdCBwb3NzaWJsZVxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSAndHJ1ZScpIHtcbiAgICAgICAgICB2YWx1ZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09ICdmYWxzZScpIHtcbiAgICAgICAgICB2YWx1ZSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgdmFsdWUgaW4gcXRpLW9yLCBleHBlY3RlZCBib29sZWFuJyk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9KTtcbiAgICByZXR1cm4gdmFsdWVzLnNvbWUoZSA9PiB7XG4gICAgICByZXR1cm4gdHlwZW9mIGUgPT09ICdib29sZWFuJyAmJiBlO1xuICAgIH0pO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLW9yJywgUXRpT3IpO1xuIiwgImltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcbmV4cG9ydCBjbGFzcyBRdGlPcmRlcmVkIGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxSZXNwb25zZVZhcmlhYmxlW10+IHtcbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpOiBSZXNwb25zZVZhcmlhYmxlW10ge1xuICAgIGNvbnN0IHZhcmlhYmxlcyA9IHRoaXMuZ2V0VmFyaWFibGVzKCkgYXMgUmVzcG9uc2VWYXJpYWJsZVtdO1xuICAgIGlmICh2YXJpYWJsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIG51bWJlciBvZiBjaGlsZHJlbiBpbiBxdGkgbXVsdGlwbGUnKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHZhcmlhYmxlIG9mIHZhcmlhYmxlcykge1xuICAgICAgaWYgKHZhcmlhYmxlLmNhcmRpbmFsaXR5ICE9PSAnb3JkZXJlZCcgJiYgdmFyaWFibGUuY2FyZGluYWxpdHkgIT09ICdzaW5nbGUnKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgY2FyZGluYWxpdHkgaW4gcXRpIG9yZGVyZWQnKTtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFyaWFibGVzO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLW9yZGVyZWQnLCBRdGlPcmRlcmVkKTtcbiIsICJpbXBvcnQgeyBjb25zdW1lIH0gZnJvbSAnQGxpdC9jb250ZXh0JztcbmltcG9ydCB7IExpdEVsZW1lbnQsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgSXRlbUNvbnRleHQsIGl0ZW1Db250ZXh0IH0gZnJvbSAnc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktYXNzZXNzbWVudC1pdGVtL3F0aS1hc3Nlc3NtZW50LWl0ZW0uY29udGV4dCc7XG5pbXBvcnQgeyBRdGlBc3Nlc3NtZW50SXRlbSB9IGZyb20gJy4uLy4uLy4uL3F0aS1hc3Nlc3NtZW50LWl0ZW0vcXRpLWFzc2Vzc21lbnQtaXRlbSc7XG5cbmV4cG9ydCBjbGFzcyBRdFByaW50ZWRWYXJpYWJsZSBleHRlbmRzIExpdEVsZW1lbnQge1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSlcbiAgaWRlbnRpZmllcjogc3RyaW5nO1xuXG4gIEBjb25zdW1lKHsgY29udGV4dDogaXRlbUNvbnRleHQsIHN1YnNjcmliZTogdHJ1ZSB9KVxuICBAc3RhdGUoKVxuICBwdWJsaWMgaXRlbUNvbnRleHQ/OiBJdGVtQ29udGV4dDtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLml0ZW1Db250ZXh0Py52YXJpYWJsZXMuZmluZCh2ID0+IHYuaWRlbnRpZmllciA9PT0gdGhpcy5pZGVudGlmaWVyKT8udmFsdWU7XG4gICAgcmV0dXJuIGh0bWxgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSwgbnVsbCwgMil9YDtcbiAgfVxuXG4gIC8vIGNvbnN0cnVjdG9yKCkge1xuICAvLyAgIHN1cGVyKCk7XG4gIC8vICAgY29uc3QgYXNzZXNzbWVudEl0ZW0gPSB0aGlzLmNsb3Nlc3QoJ3F0aS1hc3Nlc3NtZW50LWl0ZW0nKSBhcyBRdGlBc3Nlc3NtZW50SXRlbTtcbiAgLy8gICBhc3Nlc3NtZW50SXRlbS5hZGRFdmVudExpc3RlbmVyKCdxdGktcmVzcG9uc2UtcHJvY2Vzc2VkJywgKCkgPT4ge1xuICAvLyAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY2FsY3VsYXRlKCkgYXMgc3RyaW5nO1xuICAvLyAgIH0pO1xuICAvLyB9XG5cbiAgLy8gcHVibGljIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAvLyAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gIC8vICAgdGhpcy52YWx1ZSA9IHRoaXMuY2FsY3VsYXRlKCkgYXMgc3RyaW5nO1xuICAvLyB9XG5cbiAgcHVibGljIGNhbGN1bGF0ZSgpOiBSZWFkb25seTxzdHJpbmcgfCBzdHJpbmdbXT4ge1xuICAgIGNvbnN0IGFzc2Vzc21lbnRJdGVtID0gdGhpcy5jbG9zZXN0KCdxdGktYXNzZXNzbWVudC1pdGVtJykgYXMgUXRpQXNzZXNzbWVudEl0ZW07XG4gICAgY29uc3QgaWRlbnRpZmllciA9IHRoaXMuaWRlbnRpZmllcjtcbiAgICBjb25zdCByZXN1bHQgPSBhc3Nlc3NtZW50SXRlbS5nZXRWYXJpYWJsZShpZGVudGlmaWVyKS52YWx1ZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLXByaW50ZWQtdmFyaWFibGUnLCBRdFByaW50ZWRWYXJpYWJsZSk7XG4iLCAiaW1wb3J0IHsgUmVzcG9uc2VWYXJpYWJsZSB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuXG5leHBvcnQgY2xhc3MgUXRpUHJvZHVjdCBleHRlbmRzIFF0aUV4cHJlc3Npb248bnVtYmVyPiB7XG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKSB7XG4gICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRWYXJpYWJsZXMoKSBhcyBSZXNwb25zZVZhcmlhYmxlW107XG4gICAgY29uc3QgcHJvZHVjdCA9IHZhbHVlcy5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBjdXJyZW50VmFsdWUpID0+IHtcbiAgICAgIGlmIChjdXJyZW50VmFsdWUuYmFzZVR5cGUgPT0gJ2Zsb2F0JyB8fCBjdXJyZW50VmFsdWUuYmFzZVR5cGUgPT0gJ2ludGVnZXInKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yICogcGFyc2VJbnQoY3VycmVudFZhbHVlLnZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUud2FybihgY2FuIG5vdCBjb252ZXJ0IHRvIG51bWJlcmApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oYGhhcyBhbm90aGVyIGJhc2VUeXBlICR7Y3VycmVudFZhbHVlLmJhc2VUeXBlfWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICAgIH0sIDEpO1xuICAgIHJldHVybiBwcm9kdWN0O1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLXByb2R1Y3QnLCBRdGlQcm9kdWN0KTtcbiIsICJpbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgU2NvcmluZ0hlbHBlciB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9zY29yaW5nLWhlbHBlcic7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuXG5leHBvcnQgY2xhc3MgUXRpU3RyaW5nTWF0Y2ggZXh0ZW5kcyBRdGlFeHByZXNzaW9uPGJvb2xlYW4+IHtcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdjYXNlLXNlbnNpdGl2ZScgfSkgY2FzZVNlbnNpdGl2ZSA9ICd0cnVlJztcblxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCkge1xuICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMikge1xuICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRWYXJpYWJsZXMoKSBhcyBSZXNwb25zZVZhcmlhYmxlW107XG4gICAgICBjb25zdCB2YWx1ZTEgPSB2YWx1ZXNbMF07XG4gICAgICBjb25zdCB2YWx1ZTIgPSB2YWx1ZXNbMV07XG4gICAgICBpZiAoXG4gICAgICAgIHZhbHVlMS5jYXJkaW5hbGl0eSAhPT0gJ3NpbmdsZScgfHxcbiAgICAgICAgdmFsdWUyLmNhcmRpbmFsaXR5ICE9PSAnc2luZ2xlJyB8fFxuICAgICAgICBBcnJheS5pc0FycmF5KHZhbHVlMS52YWx1ZSkgfHxcbiAgICAgICAgQXJyYXkuaXNBcnJheSh2YWx1ZTIudmFsdWUpXG4gICAgICApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBjYXJkaW5hbGl0eSBpbiBxdGkgc3RyaW5nLW1hdGNoJyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHYxID0gdGhpcy5jYXNlU2Vuc2l0aXZlID09PSAndHJ1ZScgPyB2YWx1ZTEudmFsdWUgOiAodmFsdWUxLnZhbHVlIGFzIHN0cmluZykudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IHYyID0gdGhpcy5jYXNlU2Vuc2l0aXZlID09PSAndHJ1ZScgPyB2YWx1ZTIudmFsdWUgOiAodmFsdWUyLnZhbHVlIGFzIHN0cmluZykudG9Mb3dlckNhc2UoKTtcbiAgICAgIHJldHVybiBTY29yaW5nSGVscGVyLmNvbXBhcmVTaW5nbGVWYWx1ZXModjEgYXMgc3RyaW5nLCB2MiBhcyBzdHJpbmcsIHZhbHVlMS5iYXNlVHlwZSk7XG4gICAgfVxuICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgbnVtYmVyIG9mIGNoaWxkcmVuIGluIHF0aS1zdHJpbmctbWF0Y2gnKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1zdHJpbmctbWF0Y2gnLCBRdGlTdHJpbmdNYXRjaCk7XG4iLCAiaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiwgUXRpRXhwcmVzc2lvbkJhc2UgfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBjbGFzcyBRdGlTdW0gZXh0ZW5kcyBRdGlFeHByZXNzaW9uPG51bWJlcj4ge1xuICBwcml2YXRlIF9leHByZXNzaW9uOiBRdGlTdW1FeHByZXNzaW9uO1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2V4cHJlc3Npb24gPSBuZXcgUXRpU3VtRXhwcmVzc2lvbihBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4gYXMgdW5rbm93biBhcyBRdGlFeHByZXNzaW9uQmFzZTxudW1iZXI+W10pKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKSB7XG4gICAgLy8gY2hpbGRyZW4gY2FuIGJlIGEgbWl4IG9mIHF0aS1leHByZXNzaW9uIGFuZCBxdGktY29uZGl0aW9uLWV4cHJlc3Npb25cbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2V4cHJlc3Npb24uY2FsY3VsYXRlKCk7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBRdGlTdW1FeHByZXNzaW9uIGltcGxlbWVudHMgUXRpRXhwcmVzc2lvbkJhc2U8bnVtYmVyPiB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZXhwcmVzc2lvbnM6IFF0aUV4cHJlc3Npb25CYXNlPG51bWJlcj5bXSkge31cblxuICBwdWJsaWMgY2FsY3VsYXRlKCkge1xuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZXhwcmVzc2lvbnMubWFwKGMgPT4ge1xuICAgICAgaWYgKCFjLmNhbGN1bGF0ZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiRWxlbWVudCBkb2Vzbid0IGltcGxlbWVudCBRdGlDb25kaXRpb25FeHByZXNzaW9uXCIpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHZhbHVlID0gYy5jYWxjdWxhdGUoKTtcbiAgICAgIGlmIChOdW1iZXIuaXNOYU4odmFsdWUpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgdmFsdWUgaW4gcXRpLXN1bSwgZXhwZWN0ZWQgbnVtYmVyJyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gTnVtYmVyKHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdmFsdWVzLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLXN1bScsIFF0aVN1bSk7XG4iLCAiaW1wb3J0IHsgUXRpQXNzZXNzbWVudEl0ZW0gfSBmcm9tICcuLi8uLi8uLi9xdGktYXNzZXNzbWVudC1pdGVtL3F0aS1hc3Nlc3NtZW50LWl0ZW0nO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxuZXhwb3J0IGNsYXNzIFF0aVZhcmlhYmxlIGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxzdHJpbmcgfCBzdHJpbmdbXT4ge1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCkge1xuICAgIGNvbnN0IGlkZW50aWZpZXIgPSB0aGlzLmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpO1xuICAgIGNvbnN0IHJlc3VsdCA9ICh0aGlzLmNsb3Nlc3QoJ3F0aS1hc3Nlc3NtZW50LWl0ZW0nKSBhcyBRdGlBc3Nlc3NtZW50SXRlbSkuZ2V0VmFyaWFibGUoaWRlbnRpZmllcikudmFsdWU7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS12YXJpYWJsZScsIFF0aVZhcmlhYmxlKTtcbiIsICJpbXBvcnQgeyBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IEludGVyYWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJuYWwvaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24nO1xuaW1wb3J0IHsgSU1TcGNpLCBNb2R1bGVSZXNvbHV0aW9uQ29uZmlnLCBRdGlWYXJpYWJsZUpTT04gfSBmcm9tICcuL2ludGVyZmFjZSc7XG5cbmRlY2xhcmUgY29uc3QgcmVxdWlyZWpzOiBhbnk7XG5kZWNsYXJlIGNvbnN0IGRlZmluZTogYW55O1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLXBvcnRhYmxlLWN1c3RvbS1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpUG9ydGFibGVDdXN0b21JbnRlcmFjdGlvbiBleHRlbmRzIEludGVyYWN0aW9uIHtcbiAgcHJpdmF0ZSBpbnRlcnZhbElkOiBhbnk7XG4gIHByaXZhdGUgcmF3UmVzcG9uc2U6IHN0cmluZztcblxuICBwcml2YXRlIHBjaTogSU1TcGNpPHVua25vd24+O1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAncmVzcG9uc2UtaWRlbnRpZmllcicgfSlcbiAgcmVzcG9uc2VJZGVudGlmaWVyOiBzdHJpbmc7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdtb2R1bGUnIH0pXG4gIG1vZHVsZTogc3RyaW5nO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnY3VzdG9tLWludGVyYWN0aW9uLXR5cGUtaWRlbnRpZmllcicgfSlcbiAgY3VzdG9tSW50ZXJhY3Rpb25UeXBlSWRlbnRpZmllcjogc3RyaW5nO1xuXG4gIEBzdGF0ZSgpXG4gIHByaXZhdGUgX2Vycm9yTWVzc2FnZTogc3RyaW5nID0gbnVsbDtcblxuICBwcml2YXRlIGNvbnZlcnRRdGlWYXJpYWJsZUpTT04oaW5wdXQ6IFF0aVZhcmlhYmxlSlNPTik6IHN0cmluZyB8IHN0cmluZ1tdIHtcbiAgICBmb3IgKGNvbnN0IHRvcExldmVsS2V5IGluIGlucHV0KSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICBpZiAoaW5wdXQuaGFzT3duUHJvcGVydHkodG9wTGV2ZWxLZXkpKSB7XG4gICAgICAgIGNvbnN0IG5lc3RlZE9iamVjdCA9IGlucHV0W3RvcExldmVsS2V5IGFzICdsaXN0JyB8ICdiYXNlJ107XG4gICAgICAgIGlmIChuZXN0ZWRPYmplY3QpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IG5lc3RlZEtleSBpbiBuZXN0ZWRPYmplY3QpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgICAgICAgIGlmIChuZXN0ZWRPYmplY3QuaGFzT3duUHJvcGVydHkobmVzdGVkS2V5KSkge1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG5lc3RlZE9iamVjdFtuZXN0ZWRLZXkgYXMga2V5b2YgdHlwZW9mIG5lc3RlZE9iamVjdF07XG4gICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5tYXAoU3RyaW5nKTsgLy8gQ29udmVydCBlYWNoIGVsZW1lbnQgaW4gdGhlIGFycmF5IHRvIHN0cmluZ1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTsgLy8gQ29udmVydCB0aGUgc2luZ2xlIHZhbHVlIHRvIHN0cmluZ1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydENoZWNraW5nKCk6IHZvaWQge1xuICAgIC8vIGJlY2F1c2UgdGhlIHBjaSBkb2Vzbid0IGhhdmUgYSBtZXRob2QgdG8gY2hlY2sgZm9yIGNoYW5nZXMgd2UnbGwgdXNlIGFuIGludGVydmFsXG4gICAgLy8gdG8gY2hlY2sgaWYgdGhlIHJlc3BvbnNlIGhhcyBjaGFuZ2VkLiBJZiBjaGFuZ2VkIHdlJ2xsIHNhdmUgdGhlIHJlc3BvbnNlXG4gICAgdGhpcy5pbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSB0aGlzLnBjaS5nZXRSZXNwb25zZSgpO1xuICAgICAgY29uc3QgbmV3UmVzcG9uc2UgPSB0aGlzLnBjaS5nZXRSZXNwb25zZSgpO1xuICAgICAgY29uc3Qgc3RyaW5naWZpZWQgPSBKU09OLnN0cmluZ2lmeShyZXNwb25zZSk7XG4gICAgICBpZiAoc3RyaW5naWZpZWQgIT09IHRoaXMucmF3UmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy5yYXdSZXNwb25zZSA9IHN0cmluZ2lmaWVkO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuY29udmVydFF0aVZhcmlhYmxlSlNPTihuZXdSZXNwb25zZSk7XG4gICAgICAgIHRoaXMucmVzcG9uc2UgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zYXZlUmVzcG9uc2UodmFsdWUpO1xuICAgICAgfVxuICAgIH0sIDIwMCk7XG4gIH1cblxuICBwcml2YXRlIHN0b3BDaGVja2luZygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnRlcnZhbElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbElkKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTsgLy8gRk9SIE5PV1xuICB9XG4gIHNldCByZXNwb25zZSh2YWw6IFJlYWRvbmx5PHN0cmluZyB8IHN0cmluZ1tdPikge1xuICAgIC8vIE9ubHkgc2V0IHN0YXRlIGlzIHN1cHBvcnRlZCBpbiBhIFBDSVxuICB9XG5cbiAgZ2V0VEFPQ29uZmlnKG5vZGUpIHtcbiAgICBjb25zdCBhID0gbm9kZS5xdWVyeVNlbGVjdG9yQWxsKCdwcm9wZXJ0aWVzJyk7XG4gICAgbGV0IGNvbmZpZyA9IHt9O1xuXG4gICAgY29uc3QgZ2V0UHJvcGVydHlWYWx1ZSA9IGVsID0+IHtcbiAgICAgIGNvbnN0IHByb3BlcnR5ID0ge307XG4gICAgICBjb25zdCBrZXkgPSBlbC5nZXRBdHRyaWJ1dGUoJ2tleScpO1xuICAgICAgaWYgKGtleSkge1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IEFycmF5LmZyb20oZWwuY2hpbGRyZW4pO1xuICAgICAgICBjb25zdCBhbGxLZXkgPSBjaGlsZHJlbi5tYXAoKGM6IEhUTUxFbGVtZW50KSA9PiBjLmdldEF0dHJpYnV0ZSgna2V5JykpO1xuICAgICAgICBjb25zdCBpc0FycmF5ID0gYWxsS2V5Lmxlbmd0aCA+IDAgJiYgIWFsbEtleS5maW5kKGsgPT4gIU51bWJlci5pc0ludGVnZXIoK2spKTtcbiAgICAgICAgaWYgKGlzQXJyYXkpIHtcbiAgICAgICAgICBwcm9wZXJ0eVtrZXldID0gY2hpbGRyZW4ubWFwKGMgPT4gZ2V0Q2hpbGRQcm9wZXJ0aWVzKGMpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9wZXJ0eVtrZXldID0gZWwudGV4dENvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0Q2hpbGRQcm9wZXJ0aWVzID0gKGVsKToge30gfCB2b2lkID0+IHtcbiAgICAgIGlmIChlbCkge1xuICAgICAgICBsZXQgcHJvcGVydGllcyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGVsLmNoaWxkcmVuKSB7XG4gICAgICAgICAgcHJvcGVydGllcyA9IHsgLi4ucHJvcGVydGllcywgLi4uZ2V0UHJvcGVydHlWYWx1ZShjaGlsZCkgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvcGVydGllcztcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCBwcm9wZXJ0aWVzIG9mIGEpIHtcbiAgICAgIGNvbnN0IGtleSA9IHByb3BlcnRpZXMuZ2V0QXR0cmlidXRlKCdrZXknKTtcbiAgICAgIGlmICgha2V5KSB7XG4gICAgICAgIGNvbmZpZyA9IHsgLi4uY29uZmlnLCAuLi5nZXRDaGlsZFByb3BlcnRpZXMocHJvcGVydGllcykgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKCdDYW4gbm90IGZpbmQgcXRpLWN1c3RvbS1pbnRlcmFjdGlvbiBjb25maWcnKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJlZ2lzdGVyKHBjaTogSU1TcGNpPHVua25vd24+KSB7XG4gICAgdGhpcy5wY2kgPSBwY2k7XG5cbiAgICBjb25zdCB0eXBlID0gdGhpcy5wYXJlbnRFbGVtZW50LnRhZ05hbWUgPT09ICdRVEktQ1VTVE9NLUlOVEVSQUNUSU9OJyA/ICdUQU8nIDogJ0lNUyc7XG4gICAgY29uc3QgZG9tOiBIVE1MRWxlbWVudCA9XG4gICAgICB0eXBlID09ICdJTVMnID8gdGhpcy5xdWVyeVNlbGVjdG9yKCdxdGktaW50ZXJhY3Rpb24tbWFya3VwJykgOiB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ21hcmt1cCcpO1xuICAgIGRvbS5jbGFzc0xpc3QuYWRkKCdxdGktY3VzdG9tSW50ZXJhY3Rpb24nKTtcblxuICAgIGlmICh0eXBlID09ICdUQU8nICYmIHRoaXMucXVlcnlTZWxlY3RvcigncHJvcGVydGllcycpKSB7XG4gICAgICAodGhpcy5xdWVyeVNlbGVjdG9yKCdwcm9wZXJ0aWVzJykgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgfVxuXG4gICAgY29uc3QgY29uZmlnOiBhbnkgPVxuICAgICAgdHlwZSA9PSAnSU1TJ1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHRoaXMuZGF0YXNldCxcbiAgICAgICAgICAgIG9ucmVhZHk6ICgpID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ29ucmVhZHknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDogdGhpcy5nZXRUQU9Db25maWcodGhpcyk7XG5cbiAgICB0eXBlID09ICdJTVMnXG4gICAgICA/IHBjaS5nZXRJbnN0YW5jZShkb20sIGNvbmZpZywgdW5kZWZpbmVkKVxuICAgICAgOiAocGNpIGFzIGFueSkuaW5pdGlhbGl6ZSh0aGlzLmN1c3RvbUludGVyYWN0aW9uVHlwZUlkZW50aWZpZXIsIGRvbS5maXJzdEVsZW1lbnRDaGlsZCwgY29uZmlnKTtcblxuICAgIGlmICh0eXBlID09ICdUQU8nKSB7XG4gICAgICBjb25zdCBsaW5rcyA9IEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsKCdsaW5rJykpLm1hcChhY2MgPT4gYWNjLmdldEF0dHJpYnV0ZSgnaHJlZicpKTtcbiAgICAgIGxpbmtzLmZvckVhY2gobGluayA9PiB7XG4gICAgICAgIGNvbnN0IHN0eWxlcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcbiAgICAgICAgc3R5bGVzLnJlbCA9ICdzdHlsZXNoZWV0JztcbiAgICAgICAgc3R5bGVzLnR5cGUgPSAndGV4dC9jc3MnO1xuICAgICAgICBzdHlsZXMubWVkaWEgPSAnc2NyZWVuJztcbiAgICAgICAgc3R5bGVzLmhyZWYgPSBsaW5rO1xuICAgICAgICBkb20uYXBwZW5kQ2hpbGQoc3R5bGVzKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnN0YXJ0Q2hlY2tpbmcoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgY29uc3QgcmVxdWlyZUNvbmZpZzogTW9kdWxlUmVzb2x1dGlvbkNvbmZpZyA9IHtcbiAgICAgIGNvbnRleHQ6IHRoaXMuY3VzdG9tSW50ZXJhY3Rpb25UeXBlSWRlbnRpZmllcixcbiAgICAgIGNhdGNoRXJyb3I6IHRydWUsXG4gICAgICBwYXRoczoge31cbiAgICB9O1xuXG4gICAgLy8gcGs6IGMnZXN0IHRyZXMgdWdseS4uIHR5cGVzY3JpcHQgd2h5dW5vc3ByZWFkIGFkZCBwcm9wcz8hP1xuICAgIGlmICh3aW5kb3dbJ3JlcXVpcmVQYXRocyddICYmIHdpbmRvd1sncmVxdWlyZVNoaW0nXSkge1xuICAgICAgcmVxdWlyZUNvbmZpZ1sncGF0aHMnXSA9IHdpbmRvd1sncmVxdWlyZVBhdGhzJ107XG4gICAgICByZXF1aXJlQ29uZmlnWydzaGltJ10gPSB3aW5kb3dbJ3JlcXVpcmVTaGltJ107XG4gICAgfVxuICAgIGlmICghZ2xvYmFsVGhpcy5yZXF1aXJlKSB7XG4gICAgICB0aGlzLl9lcnJvck1lc3NhZ2UgPSBgcmVxdWlyZWpzIG5vdCBmb3VuZCwgbG9hZCB3aXRoIGNkbjogaHR0cHM6Ly9jZG5qcy5jb20vbGlicmFyaWVzL3JlcXVpcmUuanNgO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBJbml0aWFsIGNoZWNrIGluIGNhc2UgdGhlIGNoaWxkcmVuIGFyZSBhbHJlYWR5IHByZXNlbnRcbiAgICB0aGlzLnJlZ2lzdGVyTW9kdWxlcyhyZXF1aXJlQ29uZmlnKS50aGVuKCgpID0+IHtcbiAgICAgIGNvbnN0IHJlcXVpcmVQQ0kgPSByZXF1aXJlanMuY29uZmlnKHJlcXVpcmVDb25maWcpO1xuXG4gICAgICByZXF1aXJlUENJKFxuICAgICAgICBbJ3JlcXVpcmUnXSxcbiAgICAgICAgcmVxdWlyZSA9PiB7XG4gICAgICAgICAgIXJlcXVpcmUuZGVmaW5lZCgncXRpQ3VzdG9tSW50ZXJhY3Rpb25Db250ZXh0JykgJiZcbiAgICAgICAgICAgIGRlZmluZSgncXRpQ3VzdG9tSW50ZXJhY3Rpb25Db250ZXh0JywgKCkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHJlZ2lzdGVyOiBjdHhBID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMucmVnaXN0ZXIoY3R4QSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBub3RpZnlSZWFkeTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgLyogb25seSB1c2VkIGluIHRoZSBUQU8gdmVyc2lvbiAqL1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIC8vIFBLOiB0aGlzIGlzIGEgaGFjayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgaW50ZXJhY3Rpb24gaXMgb25seSByZWdpc3RlcmVkIG9uY2VcbiAgICAgICAgICAvLyBJZiBpdCB3YXMgcHJldmlzb3VseSBsb2FkZWQsIHRoZSByZWdpc3RlciB3aWxsIG5vZyBraWNrIGluLCBiZWNhdXNlIHRoZSBjbGFzcyBpcyBhbHJlYWR5IGRlZmluZWRcbiAgICAgICAgICAvLyBhbmQgaW4gdGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBQQ0ksIHRoZSByZWdpc3RlciBpcyBjYWxsZWQuXG4gICAgICAgICAgLy8gU28gbm93IGl0IGlzIGFscmVhZGx5IGRlZmluZWQsIHdlIGp1c3QgcmVnaXN0ZXIgaXQgb3Vyc2VsdmVzLlxuXG4gICAgICAgICAgY29uc3Qgd2FzUHJldmlvdXNseUxvYWRlZCA9IHJlcXVpcmUuZGVmaW5lZCh0aGlzLm1vZHVsZSk7XG5cbiAgICAgICAgICByZXF1aXJlKFt0aGlzLm1vZHVsZV0sIGN0eEEgPT4ge1xuICAgICAgICAgICAgLy8gcmVnaXN0ZXIgaXQgYmVjYXVzZSBpdCB3YXMgcHJldmlvdXNseSBsb2FkZWRcbiAgICAgICAgICAgIHdhc1ByZXZpb3VzbHlMb2FkZWQgJiYgdGhpcy5yZWdpc3RlcihjdHhBKTtcbiAgICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgdGhpcy5fZXJyb3JNZXNzYWdlID0gZXJyO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBlcnIgPT4ge1xuICAgICAgICAgIHRoaXMuX2Vycm9yTWVzc2FnZSA9IGVycjtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5zdG9wQ2hlY2tpbmcoKTtcbiAgfVxuXG4gIGFzeW5jIHJlZ2lzdGVyTW9kdWxlcyhjb25maWc6IE1vZHVsZVJlc29sdXRpb25Db25maWcpIHtcbiAgICAvLyBnZXQgdGhlIHZhbHVlIG9mIGF0dHJpYnV0ZTogZGF0YS1iYXNlLXVybFxuICAgIGNvbnN0IGJhc2VVcmwgPSB0aGlzLmdldEF0dHJpYnV0ZSgnZGF0YS1iYXNlLXVybCcpO1xuICAgIGlmIChiYXNlVXJsKSB7XG4gICAgICBjb25zdCBtb2R1bGVSZXNvbHV0aW9uUGF0aCA9IGAke2Jhc2VVcmx9L21vZHVsZXMvbW9kdWxlX3Jlc29sdXRpb24uanNgO1xuICAgICAgY29uc3QgbW9kdWxlUmVzb2x1dGlvbkZhbGxiYWNrUGF0aCA9IGAke2Jhc2VVcmx9L21vZHVsZXMvbW9kdWxlX3Jlc29sdXRpb25fZmFsbGJhY2suanNgO1xuICAgICAgaWYgKG1vZHVsZVJlc29sdXRpb25QYXRoKSB7XG4gICAgICAgIGNvbnN0IHByaW1hcnlDb25maWcgPSBhd2FpdCB0aGlzLmxvYWRDb25maWcobW9kdWxlUmVzb2x1dGlvblBhdGgsIGJhc2VVcmwpO1xuICAgICAgICBhd2FpdCB0aGlzLm1lcmdlQ29uZmlncyhjb25maWcsIHByaW1hcnlDb25maWcsIG1vZHVsZVJlc29sdXRpb25GYWxsYmFja1BhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBHZXQgdGhlIHF0aS1pbnRlcmFjdGlvbi1tb2R1bGVzIGVsZW1lbnRcbiAgICBjb25zdCBpbnRlcmFjdGlvbk1vZHVsZXMgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3F0aS1pbnRlcmFjdGlvbi1tb2R1bGVzJyk7XG4gICAgaWYgKGludGVyYWN0aW9uTW9kdWxlcykge1xuICAgICAgLy8gR2V0IGFsbCBxdGktaW50ZXJhY3Rpb24tbW9kdWxlIGVsZW1lbnRzXG4gICAgICBjb25zdCBtb2R1bGVzID0gaW50ZXJhY3Rpb25Nb2R1bGVzLnF1ZXJ5U2VsZWN0b3JBbGwoJ3F0aS1pbnRlcmFjdGlvbi1tb2R1bGUnKTtcbiAgICAgIC8vIExvb3AgdGhyb3VnaCBlYWNoIG1vZHVsZSBhbmQgcmVnaXN0ZXIgaXQgd2l0aCBSZXF1aXJlSlNcbiAgICAgIGZvciAoY29uc3QgbW9kdWxlIG9mIG1vZHVsZXMpIHtcbiAgICAgICAgY29uc3QgbW9kdWxlSWQgPSBtb2R1bGUuZ2V0QXR0cmlidXRlKCdpZCcpO1xuICAgICAgICBjb25zdCBwcmltYXJ5UGF0aCA9IG1vZHVsZS5nZXRBdHRyaWJ1dGUoJ3ByaW1hcnktcGF0aCcpO1xuICAgICAgICBjb25zdCBmYWxsYmFja1BhdGggPSBtb2R1bGUuZ2V0QXR0cmlidXRlKCdmYWxsYmFjay1wYXRoJyk7XG4gICAgICAgIGNvbnN0IHByaW1hcnlDb25maWc6IE1vZHVsZVJlc29sdXRpb25Db25maWcgPSBwcmltYXJ5UGF0aFxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBwYXRoczogeyAuLi5jb25maWdbJ3BhdGhzJ10sIC4uLnsgW21vZHVsZUlkXTogdGhpcy5nZXRSZXNvbHZhYmxlUGF0aChwcmltYXJ5UGF0aCwgYmFzZVVybCkgfSB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiBudWxsO1xuICAgICAgICBjb25zdCBmYWxsYmFja0NvbmZpZzogTW9kdWxlUmVzb2x1dGlvbkNvbmZpZyA9IGZhbGxiYWNrUGF0aFxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBwYXRoczogeyAuLi5jb25maWdbJ3BhdGhzJ10sIC4uLnsgW21vZHVsZUlkXTogdGhpcy5nZXRSZXNvbHZhYmxlUGF0aChmYWxsYmFja1BhdGgsIGJhc2VVcmwpIH0gfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgaWYgKG1vZHVsZUlkICYmIHByaW1hcnlDb25maWcpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLm1lcmdlQ29uZmlncyhjb25maWcsIHByaW1hcnlDb25maWcsIGZhbGxiYWNrQ29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlRG91YmxlU2xhc2hlcyhzdHI6IHN0cmluZykge1xuICAgIGNvbnN0IHNpbmdsZUZvcndhcmRTbGFzaGVzID0gc3RyXG4gICAgICAucmVwbGFjZSgvKFteOl1cXC8pXFwvKy9nLCAnJDEnKVxuICAgICAgLnJlcGxhY2UoL1xcL1xcLy9nLCAnLycpXG4gICAgICAucmVwbGFjZSgnaHR0cDovJywgJ2h0dHA6Ly8nKVxuICAgICAgLnJlcGxhY2UoJ2h0dHBzOi8nLCAnaHR0cHM6Ly8nKTtcbiAgICByZXR1cm4gc2luZ2xlRm9yd2FyZFNsYXNoZXM7XG4gIH1cblxuICBsb2FkQ29uZmlnID0gYXN5bmMgKHVybDogc3RyaW5nLCBiYXNlVXJsPzogc3RyaW5nKTogUHJvbWlzZTxNb2R1bGVSZXNvbHV0aW9uQ29uZmlnPiA9PiB7XG4gICAgdXJsID0gdGhpcy5yZW1vdmVEb3VibGVTbGFzaGVzKHVybCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcXVpcmVDb25maWcgPSBhd2FpdCBmZXRjaCh1cmwpO1xuICAgICAgaWYgKHJlcXVpcmVDb25maWcub2spIHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gYXdhaXQgcmVxdWlyZUNvbmZpZy5qc29uKCk7XG4gICAgICAgIGNvbnN0IG1vZHVsZUNvbmcgPSBjb25maWcgYXMgTW9kdWxlUmVzb2x1dGlvbkNvbmZpZztcbiAgICAgICAgZm9yIChjb25zdCBtb2R1bGVJZCBpbiBtb2R1bGVDb25nLnBhdGhzKSB7XG4gICAgICAgICAgaWYgKGJhc2VVcmwpIHtcbiAgICAgICAgICAgIG1vZHVsZUNvbmcucGF0aHNbbW9kdWxlSWRdID0gdGhpcy5nZXRSZXNvbHZhYmxlUGF0aChtb2R1bGVDb25nLnBhdGhzW21vZHVsZUlkXSwgYmFzZVVybCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtb2R1bGVDb25nO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgZ2V0UmVzb2x2YWJsZVBhdGggPSAocGF0aDogc3RyaW5nLCBiYXNlUGF0aD86IHN0cmluZykgPT4ge1xuICAgIHJldHVybiBwYXRoPy50b0xvY2FsZUxvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoJ2h0dHAnKSB8fCAhYmFzZVBhdGhcbiAgICAgID8gcGF0aFxuICAgICAgOiB0aGlzLnJlbW92ZURvdWJsZVNsYXNoZXMoYCR7YmFzZVBhdGh9LyR7cGF0aH1gKTtcbiAgfTtcblxuICBtZXJnZUNvbmZpZ3MgPSBhc3luYyAoXG4gICAgY29uZmlnOiBNb2R1bGVSZXNvbHV0aW9uQ29uZmlnLFxuICAgIHByaW1hcnlDb25maWc6IE1vZHVsZVJlc29sdXRpb25Db25maWcsXG4gICAgZmFsbGJhY2s6IHN0cmluZyB8IE1vZHVsZVJlc29sdXRpb25Db25maWdcbiAgKSA9PiB7XG4gICAgZm9yIChjb25zdCBtb2R1bGVJZCBpbiBwcmltYXJ5Q29uZmlnPy5wYXRocykge1xuICAgICAgLy8gQ2hlY2sgaWYgdGhlIGtleSBpcyBhbHJlYWR5IGluIHRoZSBjb25maWdcbiAgICAgIGlmICghY29uZmlnLnBhdGhzW21vZHVsZUlkXSkge1xuICAgICAgICAvLyBjaGVjayBpZiBmaWxlIGV4aXN0c1xuICAgICAgICBsZXQgZmFpbGVkVG9SZXNvbHZlID0gZmFsc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcGF0aFdpdGhFeHRlbnNpb24gPSBwcmltYXJ5Q29uZmlnLnBhdGhzW21vZHVsZUlkXT8udG9Mb2NhbGVMb3dlckNhc2UoKS5lbmRzV2l0aCgnLmpzJylcbiAgICAgICAgICAgID8gcHJpbWFyeUNvbmZpZy5wYXRoc1ttb2R1bGVJZF1cbiAgICAgICAgICAgIDogcHJpbWFyeUNvbmZpZy5wYXRoc1ttb2R1bGVJZF0gKyAnLmpzJztcbiAgICAgICAgICBjb25zdCBtID0gYXdhaXQgZmV0Y2gocGF0aFdpdGhFeHRlbnNpb24pO1xuICAgICAgICAgIGlmIChtLm9rKSB7XG4gICAgICAgICAgICBjb25maWcucGF0aHNbbW9kdWxlSWRdID0gcHJpbWFyeUNvbmZpZy5wYXRoc1ttb2R1bGVJZF0ucmVwbGFjZSgvXFwuanMkLywgJycpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmYWlsZWRUb1Jlc29sdmUgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgZmFpbGVkVG9SZXNvbHZlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmFpbGVkVG9SZXNvbHZlICYmIGZhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBmYWxsYmFjayA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IGZhbGxiYWNrQ29uZmlnID0gYXdhaXQgdGhpcy5sb2FkQ29uZmlnKGZhbGxiYWNrKTtcbiAgICAgICAgICAgICAgaWYgKGZhbGxiYWNrQ29uZmlnPy5wYXRoc1ttb2R1bGVJZF0pIHtcbiAgICAgICAgICAgICAgICBjb25maWcucGF0aHNbbW9kdWxlSWRdID0gZmFsbGJhY2tDb25maWcucGF0aHNbbW9kdWxlSWRdLnJlcGxhY2UoL1xcLmpzJC8sICcnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvclxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGZhbGxiYWNrID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgaWYgKGZhbGxiYWNrPy5wYXRoc1ttb2R1bGVJZF0pIHtcbiAgICAgICAgICAgICAgY29uZmlnLnBhdGhzW21vZHVsZUlkXSA9IGZhbGxiYWNrLnBhdGhzW21vZHVsZUlkXS5yZXBsYWNlKC9cXC5qcyQvLCAnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGZhaWxlZFRvUmVzb2x2ZSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIG1vZHVsZTogJyArIG1vZHVsZUlkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPHNsb3Q+PC9zbG90PiR7dGhpcy5fZXJyb3JNZXNzYWdlICYmXG4gICAgICBodG1sYDxkaXYgc3R5bGU9XCJjb2xvcjpyZWRcIj5cbiAgICAgICAgPGgxPkVycm9yPC9oMT5cbiAgICAgICAgJHt0aGlzLl9lcnJvck1lc3NhZ2V9XG4gICAgICA8L2Rpdj5gfWA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXBvcnRhYmxlLWN1c3RvbS1pbnRlcmFjdGlvbic6IFF0aVBvcnRhYmxlQ3VzdG9tSW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50LCBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuXG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IERyYWdEcm9wSW50ZXJhY3Rpb25NaXhpbiB9IGZyb20gJy4uL2ludGVybmFsL2RyYWctZHJvcCc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktYXNzb2NpYXRlLWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlBc3NvY2lhdGVJbnRlcmFjdGlvbiBleHRlbmRzIERyYWdEcm9wSW50ZXJhY3Rpb25NaXhpbihcbiAgTGl0RWxlbWVudCxcbiAgJ3F0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UnLFxuICB0cnVlLFxuICAnLmRsJ1xuKSB7XG4gIEBzdGF0ZSgpIHByaXZhdGUgX2NoaWxkcmVuTWFwOiBFbGVtZW50W107XG5cbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IGNzc2BcbiAgICA6aG9zdCB7XG4gICAgICBkaXNwbGF5OiBibG9jazsgLyogbmVjZXNzYXJ5IHRvIGNhbGN1bGF0ZSBzY2FsaW5nIHBvc2l0aW9uICovXG4gICAgfVxuICAgIHNsb3RbbmFtZT0ncXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZSddIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICBnYXA6IDAuNXJlbTtcbiAgICB9XG4gIGA7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYCA8c2xvdCBuYW1lPVwicHJvbXB0XCI+PC9zbG90PlxuICAgICAgPHNsb3QgbmFtZT1cInF0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2VcIj48L3Nsb3Q+XG4gICAgICAke3RoaXMuX2NoaWxkcmVuTWFwLmxlbmd0aCA+IDAgJiZcbiAgICAgIEFycmF5LmZyb20oQXJyYXkoTWF0aC5jZWlsKHRoaXMuX2NoaWxkcmVuTWFwLmxlbmd0aCAvIDIpKS5rZXlzKCkpLm1hcChcbiAgICAgICAgKF8sIGluZGV4KSA9PlxuICAgICAgICAgIGh0bWxgPGRpdiBwYXJ0PVwiYXNzb2NpYWJsZXMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8ZGl2IG5hbWU9XCJsZWZ0JHtpbmRleH1cIiBwYXJ0PVwiZHJvcC1saXN0XCIgY2xhc3M9XCJkbFwiIGlkZW50aWZpZXI9XCJkcm9wbGlzdCR7aW5kZXh9X2xlZnRcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgbmFtZT1cInJpZ2h0JHtpbmRleH1cIiBwYXJ0PVwiZHJvcC1saXN0XCIgY2xhc3M9XCJkbFwiIGlkZW50aWZpZXI9XCJkcm9wbGlzdCR7aW5kZXh9X3JpZ2h0XCI+PC9kaXY+XG4gICAgICAgICAgPC9kaXY+YFxuICAgICAgKX1gO1xuICB9XG5cbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLl9jaGlsZHJlbk1hcCA9IEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsKCdxdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlJykpO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1hc3NvY2lhdGUtaW50ZXJhY3Rpb24nOiBRdGlBc3NvY2lhdGVJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImV4cG9ydCBjbGFzcyBUb3VjaERyYWdBbmREcm9wIHtcbiAgcHJpdmF0ZSBfdG91Y2hCZWdpbiA9IDA7IC8vIHRpbWVzdGFtcCBvZiBmaXJzdCB0b3VjaFxuICBwcml2YXRlIF90b3VjaERvd24gPSBudWxsOyAvLyBwb2ludCBvZiBmaXJzdCB0b3VjaFxuICBwcml2YXRlIF9sYXN0Q2xpY2sgPSAwOyAvLyB0aW1lc3RhbXAgb2YgcHJldmlvdXMgY2xpY2sgKHRvdWNoc3RhcnQgKyB0b3VjaGVuZClcbiAgcHJpdmF0ZSBfY2FuRHJhZyA9IGZhbHNlOyAvLyB3aGV0aGVyIHRoZXJlIGlzIGFuIGVsZW1lbnQgd2hpY2ggY2FuIGJlIGRyYWdnZWRcbiAgcHJpdmF0ZSBfZHJhZ1NyYyA9IG51bGw7IC8vIHRoZSBlbGVtZW50IHdoaWNoIHNob3VsZCBiZSBkcmFnZ2VkXG4gIHByaXZhdGUgX2RyYWdDb3B5ID0gbnVsbDsgLy8gY29weSBvZiBkcmFnIHNvdXJjZSBmb3IgZHJhZyBmZWVkYmFja1xuICBwcml2YXRlIF90b3VjaEVuZENhbGxlZCA9IGZhbHNlOyAvLyB3aGV0aGVyIHRvdWNoRW5kIG9jY3VyZWRcbiAgcHJpdmF0ZSBfZHJhZ1J1bm5pbmcgPSBmYWxzZTsgLy8gd2hldGhlciBhIGRyYWcgcHJvY2VzcyBpcyBydW5uaW5nIGF0IHRoZSBtb21lbnRcblxuICBwcml2YXRlIF9kYXRhVHJhbnNmZXIgPSB7XG4gICAgZGF0YToge30sXG4gICAgc2V0RGF0YTogZnVuY3Rpb24gKHR5cGUsIHZhbCkge1xuICAgICAgdGhpcy5kYXRhW3R5cGVdID0gdmFsO1xuICAgIH0sXG4gICAgZ2V0RGF0YTogZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFbdHlwZV07XG4gICAgfSxcbiAgICBlZmZlY3RBbGxvd2VkOiAnbW92ZSdcbiAgfTtcbiAgcHJpdmF0ZSBfY29weU9mZnNldCA9IHsgeDogMCwgeTogMCB9OyAvLyBPZmZzZXQgZm9yIHBvc2l0aW9uaW5nIHRoZSBkcmFnIGNvcHlcblxuICBwcml2YXRlIF9sYXN0VGFyZ2V0ID0gbnVsbDsgLy8gVGhlIGxhc3QgcmVnaXN0ZXJlZCB0b3VjaCB0YXJnZXRcbiAgcHJpdmF0ZSBfY3VycmVudERyb3BDb250YWluZXIgPSBudWxsOyAvLyBUaGUgY3VycmVudCBkcm9wIGNvbnRhaW5lcjsgZmFsc2UgaWYgZWxlbWVudCBpcyBub3QgZHJvcHBhYmxlXG4gIHByaXZhdGUgX2hhbmRsZUNsaWNrID0gdHJ1ZTsgLy8gU3BlY2lmaWVzXG5cbiAgcHJpdmF0ZSBfREJMQ0xJQ0tERUxBWSA9IDUwMDsgLy8gbWF4aW11bSBkZWxheSBpbiB3aGljaCBhIHNlY29uZCBjbGljayBtdXN0IG9jY3VyXG4gIHByaXZhdGUgX0NPTlRFWFRNRU5VREVMQVkgPSAxMDAwOyAvLyBob2xkIGRlbGF5IGFmdGVyIHdoaWNoIGNvbnRleHQgbWVudSBpcyBzaG93blxuICBwcml2YXRlIF9EUkFHREVMVEEgPSA1OyAvLyBNaW5pbXVtIG9mIHBpeGVscyB3aGljaCB0aGUgZmluZ2VyIG11c3QgYmUgbW92ZWQgdG8gc3RhcnQgZHJhZ1xuICBwcml2YXRlIF9DT1BZT1BBQ0lUWSA9IDAuNzsgLy8gT3BhY2l0eSBvZiB0aGUgZHJhZyBjb3B5IGVsZW1lbnRcbiAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBUb3VjaERyYWdBbmREcm9wO1xuXG4gIGNvcHlTdHlsZXNEcmFnQ2xvbmU6IGJvb2xlYW4gPSB0cnVlO1xuICBkcmFnT25DbGljazogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8vIENoZWNrIHNpbmdsZXRvblxuICAgIGlmIChUb3VjaERyYWdBbmREcm9wLl9pbnN0YW5jZSkge1xuICAgICAgLy8gIHRocm93IG5ldyBFcnJvcihcIlRvdWNoRHJhZ0FuZERyb3AgY2FuJ3QgYmUgaW5zdGFudGlhdGVkIG1vcmUgdGhhbiBvbmNlLlwiKTtcbiAgICAgIHJldHVybiBUb3VjaERyYWdBbmREcm9wLl9pbnN0YW5jZTtcbiAgICB9XG4gICAgVG91Y2hEcmFnQW5kRHJvcC5faW5zdGFuY2UgPSB0aGlzO1xuXG4gICAgLy8gdGhpcy5faW5pdGlhbGl6ZUZpZWxkcygpO1xuXG4gICAgLy8gQWRkIGV2ZW50IGxpc3RlbmVyc1xuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5fdG91Y2hNb3ZlLmJpbmQodGhpcyksIHsgcGFzc2l2ZTogZmFsc2UsIGNhcHR1cmU6IGZhbHNlIH0pO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX3RvdWNoTW92ZS5iaW5kKHRoaXMpLCB7IHBhc3NpdmU6IGZhbHNlLCBjYXB0dXJlOiBmYWxzZSB9KTtcblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5fdG91Y2hFbmQuYmluZCh0aGlzKSwgeyBwYXNzaXZlOiBmYWxzZSwgY2FwdHVyZTogZmFsc2UgfSk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMuX3RvdWNoRW5kLmJpbmQodGhpcyksIHsgcGFzc2l2ZTogZmFsc2UsIGNhcHR1cmU6IGZhbHNlIH0pO1xuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hjYW5jZWwnLCB0aGlzLl90b3VjaENhbmNlbC5iaW5kKHRoaXMpLCB7IHBhc3NpdmU6IGZhbHNlLCBjYXB0dXJlOiBmYWxzZSB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYWRkRHJhZ2dhYmxlcyhkcmFnZ2FibGVzOiBFbGVtZW50W10pIHtcbiAgICBkcmFnZ2FibGVzLmZvckVhY2goZWwgPT4ge1xuICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMuX3RvdWNoU3RhcnQuYmluZCh0aGlzKSwgeyBwYXNzaXZlOiBmYWxzZSwgY2FwdHVyZTogZmFsc2UgfSk7XG4gICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLl90b3VjaFN0YXJ0LmJpbmQodGhpcyksIHsgcGFzc2l2ZTogZmFsc2UsIGNhcHR1cmU6IGZhbHNlIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZvciB0b3VjaHN0YXJ0IGV2ZW50IGxpc3RlbmVyLlxuICAgKiBAcGFyYW0ge1RvdWNoRXZlbnR9IGVcbiAgICovXG4gIHByaXZhdGUgX3RvdWNoU3RhcnQoZSkge1xuICAgIC8vIFNhdmUgY3VycmVudCB0aW1lc3RhbXBcbiAgICB0aGlzLl90b3VjaEJlZ2luID0gRGF0ZS5ub3coKTtcblxuICAgIGNvbnN0IHsgeCwgeSB9ID0gdGhpcy5fZ2V0UG9pbnQoZSk7XG5cbiAgICB0aGlzLl90b3VjaERvd24gPSB7IHgsIHkgfTtcblxuICAgIHRoaXMuX2RyYWdTcmMgPSBlLmN1cnJlbnRUYXJnZXQ7XG4gICAgdGhpcy5fY2FuRHJhZyA9IHRydWU7XG5cbiAgICBpZiAodGhpcy5kcmFnT25DbGljaykge1xuICAgICAgY29uc3QgX3RvdWNoZXMgPSB7IGNsaWVudFg6IHgsIGNsaWVudFk6IHkgfTtcbiAgICAgIHRoaXMuX2RyYWdSdW5uaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2NyZWF0ZURyYWdDb3B5KGUsIF90b3VjaGVzKTtcbiAgICB9XG5cbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGJhY2sgZm9yIHRvdWNobW92ZSBldmVudCBsaXN0ZW5lci5cbiAgICogQHBhcmFtIHtUb3VjaEV2ZW50fSBlXG4gICAqL1xuICBwcml2YXRlIF90b3VjaE1vdmUoZSkge1xuICAgIGlmICh0aGlzLl9jYW5EcmFnICYmIHRoaXMuX2RyYWdTcmMpIHtcbiAgICAgIC8vIENyZWF0ZSBjb3B5IG9mIGVsZW1lbnQgZm9yIHZpc3VhbCBkcmFnIGZlZWRiYWNrXG5cbiAgICAgIGNvbnN0IHsgeCwgeSB9ID0gdGhpcy5fZ2V0UG9pbnQoZSk7XG4gICAgICBjb25zdCBfdG91Y2hlcyA9IHsgY2xpZW50WDogeCwgY2xpZW50WTogeSB9O1xuXG4gICAgICBpZiAodGhpcy5fZ2V0RGVsdGEoX3RvdWNoZXMpID49IHRoaXMuX0RSQUdERUxUQSkge1xuICAgICAgICB0aGlzLl9kcmFnUnVubmluZyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NyZWF0ZURyYWdDb3B5KGUsIF90b3VjaGVzKTtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9jcmVhdGVEcmFnQ29weSA9IChlOiBhbnksIF90b3VjaGVzOiB7IGNsaWVudFg6IG51bWJlcjsgY2xpZW50WTogbnVtYmVyIH0pID0+IHtcbiAgICBpZiAodGhpcy5fZHJhZ0NvcHkgPT09IG51bGwgJiYgdGhpcy5fZHJhZ1J1bm5pbmcpIHtcbiAgICAgIHRoaXMuX2RyYWdTcmMuc3R5bGUub3BhY2l0eSA9IHRoaXMuX0NPUFlPUEFDSVRZO1xuICAgICAgdGhpcy5fZHJhZ0NvcHkgPSB0aGlzLl9kcmFnU3JjLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgIGNvbnN0IGVsZW1lbnRTdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl9kcmFnU3JjKTtcblxuICAgICAgdGhpcy5fZHJhZ0NvcHkuc3R5bGUgPSAnJztcbiAgICAgIHRoaXMuX2RyYWdDb3B5LnNldEF0dHJpYnV0ZSgnZHJhZ2Nsb25lJywgJycpO1xuXG4gICAgICBpZiAodGhpcy5jb3B5U3R5bGVzRHJhZ0Nsb25lKSB7XG4gICAgICAgIGZvciAoY29uc3Qgc3R5bGUgb2YgZWxlbWVudFN0eWxlcykge1xuICAgICAgICAgIHRoaXMuX2RyYWdDb3B5LnN0eWxlW3N0eWxlXSA9IGVsZW1lbnRTdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZShzdHlsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2FsY3VsYXRlRHJhZ0NvcHlQb3NpdGlvbihfdG91Y2hlcyk7XG5cbiAgICAgIHRoaXMuX2RyYWdDb3B5LnN0eWxlLnRvcCA9IF90b3VjaGVzLmNsaWVudFkgLSB0aGlzLl9jb3B5T2Zmc2V0LnkgKyAncHgnO1xuICAgICAgdGhpcy5fZHJhZ0NvcHkuc3R5bGUubGVmdCA9IF90b3VjaGVzLmNsaWVudFggLSB0aGlzLl9jb3B5T2Zmc2V0LnggKyAncHgnO1xuICAgICAgdGhpcy5fZHJhZ0NvcHkuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xuICAgICAgdGhpcy5fZHJhZ0NvcHkuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcbiAgICAgIHRoaXMuX2RyYWdDb3B5LnN0eWxlLnpJbmRleCA9ICc5OTk5OTknO1xuXG4gICAgICB0aGlzLl9kcmFnQ29weSA9IGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5fZHJhZ0NvcHkpO1xuICAgICAgdGhpcy5fZGlzcGF0Y2hFdmVudCh0aGlzLl9kcmFnU3JjLCAnZHJhZ3N0YXJ0Jyk7XG4gICAgfVxuXG4gICAgLy8gRHJhZyBpcyBydW5uaW5nLCBtb3ZlIGRyYWcgY29weSBhbmQgZmlyZSBldmVudHNcbiAgICBpZiAodGhpcy5fZHJhZ1J1bm5pbmcpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKF90aGlzLl90b3VjaEVuZENhbGxlZCB8fCBfdGhpcy5fZHJhZ0NvcHkgPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgX3RoaXMuX2RyYWdDb3B5LnN0eWxlLnRvcCA9IF90b3VjaGVzLmNsaWVudFkgLSBfdGhpcy5fY29weU9mZnNldC55ICsgJ3B4JztcbiAgICAgICAgX3RoaXMuX2RyYWdDb3B5LnN0eWxlLmxlZnQgPSBfdG91Y2hlcy5jbGllbnRYIC0gX3RoaXMuX2NvcHlPZmZzZXQueCArICdweCc7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5fZmluZERyb3BwYWJsZShlKTtcblxuICAgICAgLy8gRmlyZSBkcmFnbGVhdmUgYW5kIGRyYWdlbnRlciBldmVudHMgd2hlbiB0YXJnZXQgaGFzIGNoYW5nZWQgZHVyaW5nIG1vdmVcbiAgICAgIGlmICh0YXJnZXQgIT0gdGhpcy5fbGFzdFRhcmdldCkge1xuICAgICAgICB0aGlzLl9kaXNwYXRjaEV2ZW50KHRhcmdldCwgJ2RyYWdlbnRlcicpO1xuICAgICAgICB0aGlzLl9kaXNwYXRjaEV2ZW50KHRoaXMuX2xhc3RUYXJnZXQsICdkcmFnbGVhdmUnKTtcbiAgICAgICAgdGhpcy5fbGFzdFRhcmdldCA9IHRhcmdldDtcbiAgICAgIH1cblxuICAgICAgLy8gTWFrZSBjdXJyZW50IGRyb3AgY29udGFpbmVyIGNsYXNzd2lkZSBhdmFpbGFibGUgYW5kIGZpcmUgZHJhZ292ZXIgaWYgaXQncyByZWFsbHkgYSBkcm9wIGNvbnRhaW5lci5cbiAgICAgIHRoaXMuX2N1cnJlbnREcm9wQ29udGFpbmVyID0gdGFyZ2V0O1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnREcm9wQ29udGFpbmVyKSB0aGlzLl9kaXNwYXRjaEV2ZW50KHRhcmdldCwgJ2RyYWdvdmVyJyk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmb3IgdG91Y2hlbmQgZXZlbnQgbGlzdGVuZXIuXG4gICAqIEBwYXJhbSB7VG91Y2hFdmVudH0gZVxuICAgKi9cbiAgcHJpdmF0ZSBfdG91Y2hFbmQoZSkge1xuICAgIHRoaXMuX3RvdWNoRW5kQ2FsbGVkID0gdHJ1ZTtcbiAgICB0aGlzLl9jYW5EcmFnID0gZmFsc2U7XG5cbiAgICAvLyBjb25zb2xlLmxvZygxLCBlLnRhcmdldCwgdGhpcy5fY3VycmVudERyb3BDb250YWluZXIpO1xuXG4gICAgLy8gVXNlciBzZWVtcyB0byBjbGlja1xuICAgIC8vIGlmICghdGhpcy5fZHJhZ1J1bm5pbmcgJiYgdGhpcy5faGFuZGxlQ2xpY2spIHtcbiAgICAvLyAgIHRoaXMuX2Rpc3BhdGNoRXZlbnQoZS50YXJnZXQsICdjbGljaycpO1xuICAgIC8vICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIC8vICAgcmV0dXJuO1xuICAgIC8vIH1cbiAgICBpZiAodGhpcy5fY3VycmVudERyb3BDb250YWluZXIpIHtcbiAgICAgIHRoaXMuX2Rpc3BhdGNoRXZlbnQodGhpcy5fY3VycmVudERyb3BDb250YWluZXIsICdkcm9wJyk7XG4gICAgICB0aGlzLl9kaXNwYXRjaEV2ZW50KHRoaXMuX2RyYWdTcmMsICdkcmFnZW5kJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZpcmUgZHJhZ0V2ZW50IGV2ZW4gaWYgdGhlaXIgaXMgbm8gZHJvcHBhYmxlLiBBbmQgYXNzaWduIGRyb3BFZmZlY3Qgbm9uZS5cbiAgICAgIC8vIGZvciBvdXIgcHVycG9zZSwgdGhpcyB3aWxsIGJyaW5nIGJhY2sgdGhlIGRyYWcgdG8gaXRzIHN0YXJ0IHBvc2l0aW9uLCBzZWVsIGRyYWctZHJvcC1pbnRlcmFjdGlvbi1taXhpbi50c1xuICAgICAgaWYgKHRoaXMuX2RyYWdSdW5uaW5nKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdkcmFnZW5kJywgeyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlIH0pO1xuICAgICAgICBldmVudFsnZGF0YVRyYW5zZmVyJ10gPSB7IGRyb3BFZmZlY3Q6ICdub25lJyB9O1xuICAgICAgICB0aGlzLl9kcmFnU3JjPy5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9yZXNldCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZvciB0b3VjaGNhbmNlbCBldmVudCBsaXN0ZW5lciwgaW4gY2FzZSBicm93c2VyIHN1cHBvcnRzIHRoaXMuXG4gICAqIEBwYXJhbSB7VG91Y2hFdmVudH0gZVxuICAgKi9cbiAgcHJpdmF0ZSBfdG91Y2hDYW5jZWwoZSkge1xuICAgIHRoaXMuX3Jlc2V0KCk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB0aGUgbmV4dCBkcm9wcGFibGUgZWxlbWVudCBhdCBjdXJyZW50IHBvaW50LlxuICAgKiBAcGFyYW0ge09iamVjdH0gcHRcbiAgICovXG4gIHByaXZhdGUgX2ZpbmREcm9wcGFibGUoZXZlbnQpIHtcbiAgICBjb25zdCBwb2ludEZyb21Ub3VjaEV2ZW50ID0gdGhpcy5fZ2V0UG9pbnQoZXZlbnQpO1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnRGcm9tUG9pbnQocG9pbnRGcm9tVG91Y2hFdmVudC54LCBwb2ludEZyb21Ub3VjaEV2ZW50LnkpO1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBlbGVtZW50RnJvbVBvaW50KHg6IG51bWJlciwgeTogbnVtYmVyKTogRWxlbWVudCB7XG4gICAgbGV0IGVsID0gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludCh4LCB5KTtcbiAgICBpZiAoZWwpIHtcbiAgICAgIHdoaWxlIChlbC5zaGFkb3dSb290KSB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUVsID0gZWwuc2hhZG93Um9vdC5lbGVtZW50RnJvbVBvaW50KHgsIHkpO1xuICAgICAgICBpZiAoY3VzdG9tRWwgPT09IG51bGwgfHwgY3VzdG9tRWwgPT09IGVsKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZWwgPSBjdXN0b21FbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBlbDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIF9nZXRQb2ludChldmVudCwgcGFnZT8pIHtcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQudG91Y2hlcykge1xuICAgICAgZXZlbnQgPSBldmVudC50b3VjaGVzWzBdO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgeDogcGFnZSA/IGV2ZW50LnBhZ2VYIDogZXZlbnQuY2xpZW50WCxcbiAgICAgIHk6IHBhZ2UgPyBldmVudC5wYWdlWSA6IGV2ZW50LmNsaWVudFlcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIG9mZnNldCBmb3IgZGlzcGxheWluZyB0aGUgZHJhZyBjb3B5IHRvIGhhdmUgYSBzZWFtbGVzcyBkcmFnZ2luZy5cbiAgICogQHBhcmFtIHtUb3VjaH0gdG91Y2ggVGhlIGN1cnJlbnQgdG91Y2guXG4gICAqL1xuICBwcml2YXRlIF9jYWxjdWxhdGVEcmFnQ29weVBvc2l0aW9uKHRvdWNoKSB7XG4gICAgY29uc3QgY2xpZW50UmVjdCA9IHRoaXMuX2RyYWdTcmMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgdGhpcy5fY29weU9mZnNldC54ID0gdG91Y2guY2xpZW50WCAtIGNsaWVudFJlY3QubGVmdDtcbiAgICB0aGlzLl9jb3B5T2Zmc2V0LnkgPSB0b3VjaC5jbGllbnRZIC0gY2xpZW50UmVjdC50b3A7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgcGl4ZWwgZGVsdGEgYmV0d2VlbiBmaXJzdCB0b3VjaCBhbmQgdGhlIGN1cnJlbnQgdG91Y2ggcG9zaXRpb24uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSB0b3VjaFxuICAgKi9cbiAgcHJpdmF0ZSBfZ2V0RGVsdGEodG91Y2gpIHtcbiAgICBjb25zdCB4ID0gTWF0aC5hYnModG91Y2guY2xpZW50WCAtIHRoaXMuX3RvdWNoRG93bi54KTtcbiAgICBjb25zdCB5ID0gTWF0aC5hYnModG91Y2guY2xpZW50WSAtIHRoaXMuX3RvdWNoRG93bi55KTtcblxuICAgIHJldHVybiB4ICsgeTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGUgVGhlIGV2ZW50J3MgdGFyZ2V0IGVsZW1lbnQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudFR5cGUgVGhlIHR5cGUgb2YgdGhlIGV2ZW50LlxuICAgKiBAcGFyYW0ge2Jvb2x9IGJ1YmJsZSBTZXRzIHdoZXRoZXIgdGhlIGV2ZW50IHNob3VsZCBidWJibGUuXG4gICAqL1xuICBwcml2YXRlIF9kaXNwYXRjaEV2ZW50KGUsIGV2ZW50VHlwZSwgYnViYmxlID0gdHJ1ZSkge1xuICAgIGlmICghZSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgZXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoZXZlbnRUeXBlLCB7IGJ1YmJsZXM6IGJ1YmJsZSwgY2FuY2VsYWJsZTogdHJ1ZSB9KTtcbiAgICBldmVudFsnZGF0YVRyYW5zZmVyJ10gPSB0aGlzLl9kYXRhVHJhbnNmZXI7XG4gICAgZS5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgICByZXR1cm4gZXZlbnQuZGVmYXVsdFByZXZlbnRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgYWxsIHZhcmlhYmxlcyBhbmQgcHJlcGFyZXMgZm9yIG5ldyBEcmFnIGFuZCBEcm9wLlxuICAgKi9cbiAgcHJpdmF0ZSBfcmVzZXQoKSB7XG4gICAgaWYgKHRoaXMuX2RyYWdSdW5uaW5nKSB7XG4gICAgICB0aGlzLl9kcmFnU3JjLnN0eWxlLm9wYWNpdHkgPSAnMS4wJztcbiAgICAgIHRoaXMuX2RyYWdDb3B5LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5fZHJhZ0NvcHkpO1xuICAgIH1cblxuICAgIHRoaXMuX2RyYWdSdW5uaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fZHJhZ1NyYyA9IG51bGw7XG4gICAgdGhpcy5fZHJhZ0NvcHkgPSBudWxsO1xuICAgIHRoaXMuX2NhbkRyYWcgPSBmYWxzZTtcblxuICAgIHRoaXMuX3RvdWNoQmVnaW4gPSAwO1xuICAgIHRoaXMuX3RvdWNoRG93biA9IG51bGw7XG4gICAgdGhpcy5fbGFzdENsaWNrID0gMDtcbiAgICB0aGlzLl90b3VjaEVuZENhbGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuX2RhdGFUcmFuc2ZlciA9IHtcbiAgICAgIGRhdGE6IHt9LFxuICAgICAgc2V0RGF0YTogZnVuY3Rpb24gKHR5cGUsIHZhbCkge1xuICAgICAgICB0aGlzLmRhdGFbdHlwZV0gPSB2YWw7XG4gICAgICB9LFxuICAgICAgZ2V0RGF0YTogZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVt0eXBlXTtcbiAgICAgIH0sXG4gICAgICBlZmZlY3RBbGxvd2VkOiAnbW92ZSdcbiAgICB9O1xuICAgIHRoaXMuX2NvcHlPZmZzZXQgPSB7IHg6IDAsIHk6IDAgfTtcblxuICAgIHRoaXMuX2xhc3RUYXJnZXQgPSBudWxsO1xuICAgIHRoaXMuX2N1cnJlbnREcm9wQ29udGFpbmVyID0gbnVsbDtcbiAgICB0aGlzLl9oYW5kbGVDbGljayA9IHRydWU7XG4gIH1cblxuICAvLyBwcml2YXRlIF9nZXRQb3NpdGlvbkZyb21FdmVudChlOiBhbnkpOiB7XG4gIC8vICAgeDogbnVtYmVyO1xuICAvLyAgIHk6IG51bWJlcjtcbiAgLy8gfSB7XG4gIC8vICAgbGV0IF90b3VjaE1vdmU7XG4gIC8vICAgaWYgKGUudHlwZSA9PSAndG91Y2hzdGFydCcgfHwgZS50eXBlID09ICd0b3VjaG1vdmUnIHx8IGUudHlwZSA9PSAndG91Y2hlbmQnIHx8IGUudHlwZSA9PSAndG91Y2hjYW5jZWwnKSB7XG4gIC8vICAgICBjb25zdCBldnQgPSB0eXBlb2YgZS5vcmlnaW5hbEV2ZW50ID09PSAndW5kZWZpbmVkJyA/IGUgOiBlLm9yaWdpbmFsRXZlbnQ7XG4gIC8vICAgICBjb25zdCB0b3VjaCA9IGV2dC50b3VjaGVzWzBdIHx8IGV2dC5jaGFuZ2VkVG91Y2hlc1swXTtcbiAgLy8gICAgIF90b3VjaE1vdmUgPSB7XG4gIC8vICAgICAgIHg6IHRvdWNoLnBhZ2VYLFxuICAvLyAgICAgICB5OiB0b3VjaC5wYWdlWVxuICAvLyAgICAgfTtcbiAgLy8gICB9IGVsc2UgaWYgKFxuICAvLyAgICAgZS50eXBlID09ICdtb3VzZWRvd24nIHx8XG4gIC8vICAgICBlLnR5cGUgPT0gJ21vdXNldXAnIHx8XG4gIC8vICAgICBlLnR5cGUgPT0gJ21vdXNlbW92ZScgfHxcbiAgLy8gICAgIGUudHlwZSA9PSAnbW91c2VvdmVyJyB8fFxuICAvLyAgICAgZS50eXBlID09ICdtb3VzZW91dCcgfHxcbiAgLy8gICAgIGUudHlwZSA9PSAnbW91c2VlbnRlcicgfHxcbiAgLy8gICAgIGUudHlwZSA9PSAnbW91c2VsZWF2ZSdcbiAgLy8gICApIHtcbiAgLy8gICAgIF90b3VjaE1vdmUgPSB7XG4gIC8vICAgICAgIHg6IGUuY2xpZW50WCxcbiAgLy8gICAgICAgeTogZS5jbGllbnRZXG4gIC8vICAgICB9O1xuICAvLyAgIH1cbiAgLy8gICByZXR1cm4gX3RvdWNoTW92ZTtcbiAgLy8gfVxufVxuIiwgImltcG9ydCB7IExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbnR5cGUgQ29uc3RydWN0b3I8VD4gPSBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBUO1xuXG5kZWNsYXJlIGNsYXNzIERyb3BwYWJsZXNJbnRlcmZhY2Uge31cblxuLy8gaHR0cHM6Ly9uZy1ydW4uY29tL2VkaXQvOU1HcjVkWVdBMjBBaUp0cHk1YXo/b3Blbj1hcHAlMkZhcHAuY29tcG9uZW50Lmh0bWxcbmV4cG9ydCBjb25zdCBEcm9wcGFibGVzTWl4aW4gPSA8VCBleHRlbmRzIENvbnN0cnVjdG9yPExpdEVsZW1lbnQ+PihcbiAgc3VwZXJDbGFzczogVCxcbiAgZHJvcHBhYmxlc0luU2hhZG93Um9vdDogYm9vbGVhbixcbiAgZHJvcHBhYmxlc1NlbGVjdG9yOiBzdHJpbmdcbikgPT4ge1xuICBjbGFzcyBEcm9wcGFibGVzRWxlbWVudCBleHRlbmRzIHN1cGVyQ2xhc3Mge1xuICAgIHByaXZhdGUgb2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXI7XG5cbiAgICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuLCByZWZsZWN0OiB0cnVlIH0pIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICBvdmVycmlkZSBmaXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BzKTogdm9pZCB7XG4gICAgICAvLyBmb3IgcXRpLW1hdGNoLWludGVyYWN0aW9uIHRoZSBkcmFnIGludGVyYWN0aW9uIGNhbiBiZSByZXBsYWNlIHdpdGggYSBxdGktbWF0Y2gtdGFidWxhciBjbGFzc1xuICAgICAgLy8gd2hpY2ggc2hvd3MgdGhlIGRhdGEgaW4gYSBhIHRhYnVsYXIgd2F5LCBzbyBubyBkcmFnIGRyb3Agc2hvdWxkIGJlIGludm9sdmVkIHRoZW5cbiAgICAgIGlmICh0aGlzLmNsYXNzTGlzdC5jb250YWlucygncXRpLW1hdGNoLXRhYnVsYXInKSkgcmV0dXJuO1xuXG4gICAgICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BzKTtcblxuICAgICAgY29uc3QgZHJvcHBhYmxlcyA9IEFycmF5LmZyb20oXG4gICAgICAgIGRyb3BwYWJsZXNJblNoYWRvd1Jvb3RcbiAgICAgICAgICA/IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKGRyb3BwYWJsZXNTZWxlY3RvcilcbiAgICAgICAgICA6IHRoaXMucXVlcnlTZWxlY3RvckFsbChkcm9wcGFibGVzU2VsZWN0b3IpXG4gICAgICApO1xuXG4gICAgICB0aGlzLmRyYWdvdmVySGFuZGxlciA9IHRoaXMuZHJhZ292ZXJIYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLmRyYWdsZWF2ZUhhbmRsZXIgPSB0aGlzLmRyYWdsZWF2ZUhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuZHJhZ2VudGVySGFuZGxlciA9IHRoaXMuZHJhZ2VudGVySGFuZGxlci5iaW5kKHRoaXMpO1xuXG4gICAgICB0aGlzLmRyb3BIYW5kbGVyID0gdGhpcy5kcm9wSGFuZGxlci5iaW5kKHRoaXMpO1xuXG4gICAgICBkcm9wcGFibGVzLmZvckVhY2goZCA9PiB7XG4gICAgICAgIGQuc2V0QXR0cmlidXRlKCdkcm9wem9uZScsICdtb3ZlJyk7XG4gICAgICAgIGQuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgdGhpcy5kcmFnbGVhdmVIYW5kbGVyKTtcblxuICAgICAgICB0aGlzLmF0dGFjaEhhbmRsZXIoZCk7XG4gICAgICB9KTtcbiAgICAgIGZvciAoY29uc3QgZHJvcHBhYmxlIG9mIGRyb3BwYWJsZXMpIHtcbiAgICAgICAgdGhpcy5vYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKG11dGF0aW9ucyA9PiB7XG4gICAgICAgICAgbXV0YXRpb25zLmZvckVhY2gobXV0YXRpb24gPT4ge1xuICAgICAgICAgICAgaWYgKG11dGF0aW9uLnR5cGUgPT09ICdhdHRyaWJ1dGVzJykge1xuICAgICAgICAgICAgICBjb25zdCBwcm9wTmFtZSA9IG11dGF0aW9uLmF0dHJpYnV0ZU5hbWU7XG4gICAgICAgICAgICAgIHN3aXRjaCAocHJvcE5hbWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdkaXNhYmxlZCc6IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGRpc2FibGVkID0gZHJvcHBhYmxlLmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcbiAgICAgICAgICAgICAgICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdHRhY2hIYW5kbGVyKGRyb3BwYWJsZSk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUhhbmRsZXIoZHJvcHBhYmxlKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vYnNlcnZlci5vYnNlcnZlKGRyb3BwYWJsZSwge1xuICAgICAgICAgIGF0dHJpYnV0ZXM6IHRydWUgLy9jb25maWd1cmUgaXQgdG8gbGlzdGVuIHRvIGF0dHJpYnV0ZSBjaGFuZ2VzXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXR0YWNoSGFuZGxlcihkcm9wcGFibGU6IEVsZW1lbnQpIHtcbiAgICAgIGRyb3BwYWJsZS5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRoaXMuZHJhZ292ZXJIYW5kbGVyKTtcbiAgICAgIGRyb3BwYWJsZS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCB0aGlzLmRyYWdlbnRlckhhbmRsZXIpO1xuICAgICAgZHJvcHBhYmxlLmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCB0aGlzLmRyb3BIYW5kbGVyKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZUhhbmRsZXIoZHJvcHBhYmxlOiBFbGVtZW50KSB7XG4gICAgICBkcm9wcGFibGUucmVtb3ZlRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCB0aGlzLmRyYWdvdmVySGFuZGxlcik7XG4gICAgICBkcm9wcGFibGUucmVtb3ZlRXZlbnRMaXN0ZW5lcignZHJhZ2VudGVyJywgdGhpcy5kcmFnZW50ZXJIYW5kbGVyKTtcbiAgICAgIGRyb3BwYWJsZS5yZW1vdmVFdmVudExpc3RlbmVyKCdkcm9wJywgdGhpcy5kcm9wSGFuZGxlcik7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgICAvLyBmb3IgcXRpLW1hdGNoLWludGVyYWN0aW9uIHRoZSBkcmFnIGludGVyYWN0aW9uIGNhbiBiZSByZXBsYWNlIHdpdGggYSBxdGktbWF0Y2gtdGFidWxhciBjbGFzc1xuICAgICAgLy8gd2hpY2ggc2hvd3MgdGhlIGRhdGEgaW4gYSBhIHRhYnVsYXIgd2F5LCBzbyBubyBkcmFnIGRyb3Agc2hvdWxkIGJlIGludm9sdmVkIHRoZW5cbiAgICAgIGlmICh0aGlzLmNsYXNzTGlzdC5jb250YWlucygncXRpLW1hdGNoLXRhYnVsYXInKSkgcmV0dXJuO1xuXG4gICAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgICAgdGhpcy5vYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICAgIH1cblxuICAgIGRyYWdlbnRlckhhbmRsZXIoZXY6IERyYWdFdmVudCkge1xuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBkcmFnb3ZlckhhbmRsZXIoZXY6IERyYWdFdmVudCkge1xuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGNvbnN0IGRyb3BwYWJsZSA9IGV2LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAvLyBkcm9wcGFibGVzSW5TaGFkb3dSb290XG4gICAgICAvLyA/IGRyb3BwYWJsZS5zZXRBdHRyaWJ1dGUoJ3BhcnQnLCBkcm9wcGFibGUuZ2V0QXR0cmlidXRlKCdwYXJ0JykgKyAnIGFjdGl2ZScpIDpcbiAgICAgIGRyb3BwYWJsZS5zZXRBdHRyaWJ1dGUoJ2FjdGl2ZScsICcnKTtcblxuICAgICAgZXYuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnbW92ZSc7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBkcm9wSGFuZGxlcihldjogRHJhZ0V2ZW50KSB7XG4gICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY29uc3QgZHJvcHBhYmxlID0gZXYuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgIC8vIHBrOiBkcmFnZ2FibGVzIGluIGxpZ2h0IGRvbSBjYW4gYmUgZHJhZ2dlZCB0byBzaGFkb3dkb20sIHRoaXMgaXMgb25lIG9mIHRoZSBydWxlcyBvZiB3ZWJjb21wb25lbnRzLlxuICAgICAgLy8gVGhleSBtYXkgbm90IGNyZWF0ZSBuZXcgZWxlbWVudHMgaW4gbGlnaHQgZG9tLiBTb21lIHNvbWV0aW1lc3MgZHJvcCB6b25lcyBzaG91bGQgYmUgZ2VuZXJhdGVkXG4gICAgICAvLyBieSB0aGUgd2ViY29tcG9uZW50LiBUaGVuIGEgZHJhZ2dhYmxlICggd2hpY2ggaXMgYWx3YXlzIGFscmVhZHkgY3JlYXRlZCBieSBhIHdlYmNvbXBvbmVudCApXG4gICAgICAvLyBjYW4gYmUgaW4gbGlnaHQgZG9tLCBlbiBjYW4gYmUgZHJhZ2dlZCB0byBzaGFkb3cgZG9tLlxuICAgICAgLy8gdGhpbmtpbmcgb2YgYW5vdGhlciB3YXkgd2hlcmUgd2UganVzdCBjaGFuZ2Ugc2xvdHMuIE1heWJlIHRoYXRzIGJldHRlci4uXG4gICAgICBjb25zdCBkcmFnZ2FibGVJbkxpZ2h0RG9tID0gdGhpcy5xdWVyeVNlbGVjdG9yKGBbaWRlbnRpZmllcj0ke2V2LmRhdGFUcmFuc2Zlci5nZXREYXRhKCd0ZXh0Jyl9YCk7XG4gICAgICBjb25zdCBkcmFnZ2FibGUgPSBkcmFnZ2FibGVJbkxpZ2h0RG9tXG4gICAgICAgID8gZHJhZ2dhYmxlSW5MaWdodERvbVxuICAgICAgICA6IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKGBbaWRlbnRpZmllcj0ke2V2LmRhdGFUcmFuc2Zlci5nZXREYXRhKCd0ZXh0Jyl9YCk7XG5cbiAgICAgIGlmICghZHJvcHBhYmxlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYGNhbm5vdCBmaW5kIGRyb3BwYWJsZSwgdGFyZ2V0OiAke2V2LnRhcmdldCA/IEpTT04uc3RyaW5naWZ5KGV2LnRhcmdldCkgOiAnbnVsbCd9YCk7XG4gICAgICB9IGVsc2UgaWYgKGRyYWdnYWJsZS5wYXJlbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpICE9PSBkcm9wcGFibGUuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJykpIHtcbiAgICAgICAgZHJvcHBhYmxlLmFwcGVuZENoaWxkKGRyYWdnYWJsZSk7XG4gICAgICB9XG4gICAgICAvLyBkcm9wcGFibGVzSW5TaGFkb3dSb290XG4gICAgICAvLyA/IGRyb3BwYWJsZS5zZXRBdHRyaWJ1dGUoJ3BhcnQnLCBkcm9wcGFibGUuZ2V0QXR0cmlidXRlKCdwYXJ0JykucmVwbGFjZSgnYWN0aXZlJywgJycpLnRyaW0oKSkgOlxuICAgICAgZHJvcHBhYmxlLnJlbW92ZUF0dHJpYnV0ZSgnYWN0aXZlJyk7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBkcmFnbGVhdmVIYW5kbGVyKGV2OiBEcmFnRXZlbnQpIHtcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgIGNvbnN0IGRyb3BwYWJsZSA9IGV2LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBkcm9wcGFibGUucmVtb3ZlQXR0cmlidXRlKCdhY3RpdmUnKTtcbiAgICAgIGV2LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gJ25vbmUnO1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiBEcm9wcGFibGVzRWxlbWVudCBhcyBDb25zdHJ1Y3RvcjxEcm9wcGFibGVzSW50ZXJmYWNlPiAmIFQ7XG59O1xuIiwgIi8vIFRISVMgSVMgQSBNSVhJTiwgVEhJUyBJUyBBIE1JWElOXG4vLyBVU0UgTElLRSBUSElTXG4vLyBgYGBjbGFzcyBEcm9wTGlzdCBleHRlbmRzIEZsaXBwYWJsZXMoTGl0RWxlbWVudCkge2BgYFxuLy8gbWl4aW4gd2hpY2ggYW5pbWF0ZXMgY2hpbGRyZW4gd2l0aCBGTElQXG4vLyBhIGNvbWJpbmF0aW9uIGJldHdlZW4gdGhpcyBkaXJlY3RpdmU6XG4vLyBodHRwczovL25nLXJ1bi5jb20vZWRpdC85TUdyNWRZV0EyMEFpSnRweTVhej9vcGVuPWFwcCUyRmFwcC5jb21wb25lbnQuaHRtbFxuLy8gYW5kIGEgdHV0b3JpYWwgaG93IHRvIG1ha2UgYSBtaXhpblxuLy8gaHR0cHM6Ly9saXQuZGV2L2RvY3MvY29tcG9zaXRpb24vbWl4aW5zL1xuXG5pbXBvcnQgeyBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcblxudHlwZSBDb25zdHJ1Y3RvcjxUPiA9IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQ7XG5cbmV4cG9ydCBkZWNsYXJlIGNsYXNzIEZsaXBwYWJsZXNJbnRlcmZhY2Uge1xuICBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkO1xuICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkO1xufVxuXG4vLyBqdXN0IGEgY29udmVyc2lvbiBvZiBhIGFuZ3VsYXIgRkxJUCBkaXJlY3RpdmUsIG1hZGUgYXMgYSBNaXhpblxuLy8gaHR0cHM6Ly9uZy1ydW4uY29tL2VkaXQvOU1HcjVkWVdBMjBBaUp0cHk1YXo/b3Blbj1hcHAlMkZhcHAuY29tcG9uZW50Lmh0bWxcbmV4cG9ydCBjb25zdCBGbGlwcGFibGVzTWl4aW4gPSA8VCBleHRlbmRzIENvbnN0cnVjdG9yPExpdEVsZW1lbnQ+PihcbiAgc3VwZXJDbGFzczogVCxcbiAgZHJvcHBhYmxlc1NlbDogc3RyaW5nLFxuICBkcmFnZ2FibGVzU2VsOiBzdHJpbmdcbikgPT4ge1xuICBjbGFzcyBGbGlwcGFibGVzRWxlbWVudCBleHRlbmRzIHN1cGVyQ2xhc3Mge1xuICAgIC8vIHByaXZhdGUgc3RhdGUgPSBuZXcgTWFwPEVsZW1lbnQsIGFueT4oKTtcbiAgICAvLyBwcml2YXRlIG9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyO1xuICAgIC8vIGZsaXBwYWJsZXNTZWxlY3Rvcjogc3RyaW5nO1xuICAgIC8vIG92ZXJyaWRlIGFzeW5jIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcHMpIHtcbiAgICAvLyAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7IC8vIHBrOiB0aGlzIGlzIHRoZSBrZXkgdG8gY2FsY3VsYXRlIGNvcnJlY3QgcHJvcG9ydGlvbnNcbiAgICAvLyAgIGNvbnN0IGRyYWdnYWJsZXMgPSBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbChkcmFnZ2FibGVzU2VsKSk7XG4gICAgLy8gICBkcmFnZ2FibGVzLmZvckVhY2goKGVsZW0pID0+IHtcbiAgICAvLyAgICAgY29uc3QgeyBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQgfSA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgLy8gICAgIHRoaXMuc3RhdGUuc2V0KGVsZW0sIHsgbGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgIC8vICAgfSk7XG4gICAgLy8gICB0aGlzLm9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIodGhpcy5hbmltYXRlTWUpO1xuICAgIC8vICAgY29uc3QgZHJvcHBhYmxlcyA9IEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsKGRyb3BwYWJsZXNTZWwpKTtcbiAgICAvLyAgIGRyb3BwYWJsZXMuZm9yRWFjaCgoZHJhZ2dhYmxlKSA9PiB7XG4gICAgLy8gICAgIHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZShkcmFnZ2FibGUsIHsgY2hpbGRMaXN0OiB0cnVlIH0pO1xuICAgIC8vICAgfSk7XG4gICAgLy8gICB0aGlzLm9ic2VydmVyLm9ic2VydmUodGhpcywgeyBjaGlsZExpc3Q6IHRydWUgfSk7XG4gICAgLy8gICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BzKTtcbiAgICAvLyB9XG4gICAgLy8gcHJpdmF0ZSBhbmltYXRlTWUgPSAoKSA9PiB7XG4gICAgLy8gICB0aGlzLnN0YXRlLmZvckVhY2goKHZhbHVlLCBlbGVtKSA9PiB7XG4gICAgLy8gICAgIGNvbnN0IHsgbGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0IH0gPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIC8vICAgICBpZiAodGhpcy5zdGF0ZS5nZXQoZWxlbSkgPT0gbnVsbCkge1xuICAgIC8vICAgICAgIHRoaXMuc3RhdGUuc2V0KGVsZW0sIHsgbGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgIC8vICAgICB9XG4gICAgLy8gICAgIGNvbnN0IGNhY2hlID0gdGhpcy5zdGF0ZS5nZXQoZWxlbSk7XG4gICAgLy8gICAgIGNvbnN0IGRlbHRhWCA9IGNhY2hlLmxlZnQgLSBsZWZ0O1xuICAgIC8vICAgICBjb25zdCBkZWx0YVkgPSBjYWNoZS50b3AgLSB0b3A7XG4gICAgLy8gICAgIGNvbnN0IGRlbHRhVyA9IGNhY2hlLndpZHRoIC8gd2lkdGg7XG4gICAgLy8gICAgIGNvbnN0IGRlbHRhSCA9IGNhY2hlLmhlaWdodCAvIGhlaWdodDtcbiAgICAvLyAgICAgdGhpcy5zdGF0ZS5zZXQoZWxlbSwgeyBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgLy8gICAgIGNvbnN0IHsgZHVyYXRpb24sIGVhc2luZyB9ID0geyBkdXJhdGlvbjogMzUwLCBlYXNpbmc6ICdjdWJpYy1iZXppZXIoMC4yNiwgMC44NiwgMC40NCwgMC45ODUpJyB9O1xuICAgIC8vICAgICBlbGVtLmFuaW1hdGUoXG4gICAgLy8gICAgICAgW1xuICAgIC8vICAgICAgICAge1xuICAgIC8vICAgICAgICAgICB0cmFuc2Zvcm1PcmlnaW46ICd0b3AgbGVmdCcsXG4gICAgLy8gICAgICAgICAgIHRyYW5zZm9ybTogYFxuICAgIC8vIHRyYW5zbGF0ZSgke2RlbHRhWH1weCwgJHtkZWx0YVl9cHgpXG4gICAgLy8gc2NhbGUoJHtkZWx0YVd9LCAke2RlbHRhSH0pXG4gICAgLy8gYCxcbiAgICAvLyAgICAgICAgICAgLy8gd2lkdGg6IGNhY2hlLndpZHRoLFxuICAgIC8vICAgICAgICAgICAvLyBoZWlnaHQ6IGNhY2hlLmhlaWdodCsgJ3B4JyxcbiAgICAvLyAgICAgICAgICAgLy8gb3BhY2l0eTogY2FjaGUub3BhY2l0eSxcbiAgICAvLyAgICAgICAgIH0sXG4gICAgLy8gICAgICAgICB7XG4gICAgLy8gICAgICAgICAgIHRyYW5zZm9ybU9yaWdpbjogJ3RvcCBsZWZ0JyxcbiAgICAvLyAgICAgICAgICAgdHJhbnNmb3JtOiAnbm9uZScsXG4gICAgLy8gICAgICAgICB9LFxuICAgIC8vICAgICAgIF0sXG4gICAgLy8gICAgICAge1xuICAgIC8vICAgICAgICAgZHVyYXRpb24sXG4gICAgLy8gICAgICAgICBlYXNpbmcsXG4gICAgLy8gICAgICAgfVxuICAgIC8vICAgICApO1xuICAgIC8vICAgfSk7XG4gICAgLy8gfTtcbiAgICAvLyBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICAvLyAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgLy8gICB0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAvLyB9XG4gIH1cbiAgcmV0dXJuIEZsaXBwYWJsZXNFbGVtZW50IGFzIENvbnN0cnVjdG9yPEZsaXBwYWJsZXNJbnRlcmZhY2U+ICYgVDtcbn07XG4iLCAiaW1wb3J0IHsgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBEcm9wcGFibGVzTWl4aW4gfSBmcm9tICcuL2Ryb3BwYWJsZXMtbWl4aW4nO1xuaW1wb3J0IHsgRmxpcHBhYmxlc01peGluIH0gZnJvbSAnLi9mbGlwcGFibGVzLW1peGluJztcbmltcG9ydCB7IElJbnRlcmFjdGlvbiB9IGZyb20gJy4uL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uLmludGVyZmFjZSc7XG5cbmltcG9ydCB7IFRvdWNoRHJhZ0FuZERyb3AgfSBmcm9tICcuL2RyYWctZHJvcC1hcGknO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyB3YXRjaCB9IGZyb20gJy4uLy4uLy4uLy4uL2RlY29yYXRvcnMvd2F0Y2gnO1xuaW1wb3J0IHsgbGl2ZVF1ZXJ5IH0gZnJvbSAnLi4vLi4vLi4vLi4vZGVjb3JhdG9ycy9saXZlLXF1ZXJ5Jztcbi8vIGtleWJvYXJkIG5hdmlnYXRhYmxlIGRyYWcgZHJvcDogaHR0cHM6Ly9jb2RlcGVuLmlvL1NpdGVQb2ludC9wZW4vdkV6WGJqXG4vLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81NTI0MjE5Ni90eXBlc2NyaXB0LWFsbG93cy10by11c2UtcHJvcGVyLW11bHRpcGxlLWluaGVyaXRhbmNlLXdpdGgtbWl4aW5zLWJ1dC1mYWlscy10by1jXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzE3NzQ0I2lzc3VlY29tbWVudC01NTg5OTAzODFcbi8vIGh0dHBzOi8vbmctcnVuLmNvbS9lZGl0LzlNR3I1ZFlXQTIwQWlKdHB5NWF6P29wZW49YXBwJTJGYXBwLmNvbXBvbmVudC5odG1sXG5cbnR5cGUgQ29uc3RydWN0b3I8VD4gPSBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBUO1xuXG5pbnRlcmZhY2UgSW50ZXJhY3Rpb25Db25maWd1cmF0aW9uIHtcbiAgY29weVN0eWxlc0RyYWdDbG9uZTogYm9vbGVhbjtcbiAgZHJhZ0NhbkJlUGxhY2VkQmFjazogYm9vbGVhbjtcbiAgZHJhZ09uQ2xpY2s6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4gPSA8VCBleHRlbmRzIENvbnN0cnVjdG9yPExpdEVsZW1lbnQ+PihcbiAgc3VwZXJDbGFzczogVCxcbiAgZHJhZ2dhYmxlc1NlbGVjdG9yOiBzdHJpbmcsXG4gIGRyb3BwYWJsZXNJblNoYWRvd1Jvb3Q6IGJvb2xlYW4sXG4gIGRyb3BwYWJsZXNTZWxlY3Rvcjogc3RyaW5nXG4pID0+IHtcbiAgY2xhc3MgRHJhZ0Ryb3BJbnRlcmFjdGlvbkVsZW1lbnQgZXh0ZW5kcyBGbGlwcGFibGVzTWl4aW4oXG4gICAgRHJvcHBhYmxlc01peGluKHN1cGVyQ2xhc3MsIGRyb3BwYWJsZXNJblNoYWRvd1Jvb3QsIGRyb3BwYWJsZXNTZWxlY3RvciksXG4gICAgZHJvcHBhYmxlc1NlbGVjdG9yLFxuICAgIGRyYWdnYWJsZXNTZWxlY3RvclxuICApIHtcbiAgICBwcm90ZWN0ZWQgZHJhZ2dhYmxlcyA9IG5ldyBNYXA8RWxlbWVudCwgeyBwYXJlbnQ6IEVsZW1lbnQ7IGluZGV4OiBudW1iZXIgfT4oKTtcbiAgICBwcm90ZWN0ZWQgZHJvcHBhYmxlczogRWxlbWVudFtdO1xuICAgIGRyYWdEcm9wQXBpOiBUb3VjaERyYWdBbmREcm9wO1xuXG4gICAgQGxpdmVRdWVyeShkcmFnZ2FibGVzU2VsZWN0b3IpXG4gICAgcmVJbml0RHJhZ0FuZERyb3AoZHJhZ3NBZGRlZDogRWxlbWVudFtdLCBkcmFnc1JlbW92ZWQ6IEVsZW1lbnRbXSkge1xuICAgICAgaWYgKHRoaXMuY2xhc3NMaXN0LmNvbnRhaW5zKCdxdGktbWF0Y2gtdGFidWxhcicpKSByZXR1cm47XG5cbiAgICAgIC8vIGNoZWNrIGlmIGFkZGVkIGVsZW1lbnRzIGFyZSBub3QgYWxyZWFkeSBpbiBsaXN0XG4gICAgICBjb25zdCBkcmFnZ2FibGVzID0gZHJhZ3NBZGRlZC5maWx0ZXIoZCA9PiAhdGhpcy5kcmFnZ2FibGVzIHx8ICF0aGlzLmRyYWdnYWJsZXMuZ2V0KGQpKTtcblxuICAgICAgaWYgKGRyYWdnYWJsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmRyYWdEcm9wQXBpLmFkZERyYWdnYWJsZXMoZHJhZ3NBZGRlZCk7XG5cbiAgICAgICAgZHJhZ3NBZGRlZC5mb3JFYWNoKGVsZW0gPT4ge1xuICAgICAgICAgIC8vIHN0b3JlIGluaXRpYWwgcG9zaXRpb25zIG9mIGVsZW1lbnRzLCBhbmQgb2Zjb3Vyc2UsIGp1c3QgdGhlIGVsZW1lbnRzIGZvciBsb29waW5nIGFuZCBzdWNoXG4gICAgICAgICAgdGhpcy5kcmFnZ2FibGVzLnNldChlbGVtLCB7XG4gICAgICAgICAgICBwYXJlbnQ6IGVsZW0ucGFyZW50RWxlbWVudCxcbiAgICAgICAgICAgIGluZGV4OiBBcnJheS5mcm9tKGVsZW0ucGFyZW50Tm9kZS5jaGlsZHJlbikuaW5kZXhPZihlbGVtKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGVsZW0uc2V0QXR0cmlidXRlKCdxdGktZHJhZ2dhYmxlJywgJ3RydWUnKTtcbiAgICAgICAgICBlbGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIChldjogYW55KSA9PiB7XG4gICAgICAgICAgICBldi5kYXRhVHJhbnNmZXIuc2V0RGF0YSgndGV4dCcsIGV2LmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKGBpZGVudGlmaWVyYCkpO1xuICAgICAgICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoJ2RyYWdnaW5nJywgJycpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgZWxlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW5kJywgKGV2OiBEcmFnRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBlbGVtLnJlbW92ZUF0dHJpYnV0ZSgnb3ZlcicpO1xuICAgICAgICAgICAgZWxlbS5yZW1vdmVBdHRyaWJ1dGUoJ2RyYWdnaW5nJyk7XG5cbiAgICAgICAgICAgIC8vIHBrOiBpZiBub3QgZHJvcHBlZCBvbiBhIGRyb3AgbG9jYXRpb24gcHV0IGl0IGJhY2sgd2hlcmUgaXQgYmVsb25nc1xuICAgICAgICAgICAgaWYgKGV2LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID09PSAnbm9uZScgfHwgZXYuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmRyYWdDYW5CZVBsYWNlZEJhY2spIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkcmFnZ2FibGUgPSBldi5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5kcmFnZ2FibGVzLmdldChkcmFnZ2FibGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID1cbiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uLmluZGV4IDwgcG9zaXRpb24ucGFyZW50LmNoaWxkcmVuLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICA/IHBvc2l0aW9uLmluZGV4XG4gICAgICAgICAgICAgICAgICAgIDogcG9zaXRpb24ucGFyZW50LmNoaWxkcmVuLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgY29uc3QgaW50ZXJhY3Rpb24gPSBwb3NpdGlvbi5wYXJlbnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgZ2FwVGV4dCA9IHBvc2l0aW9uLnBhcmVudC5jaGlsZHJlbltpbmRleF07XG4gICAgICAgICAgICAgICAgaW50ZXJhY3Rpb24uaW5zZXJ0QmVmb3JlKGRyYWdnYWJsZSwgZ2FwVGV4dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zYXZlUmVzcG9uc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrTWF4TWF0Y2hBc3NvY2lhdGlvbnMoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV2LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID09PSAnbW92ZScpIHtcbiAgICAgICAgICAgICAgdGhpcy5zYXZlUmVzcG9uc2UoKTtcbiAgICAgICAgICAgICAgdGhpcy5jaGVja01heE1hdGNoQXNzb2NpYXRpb25zKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAncmVzcG9uc2UtaWRlbnRpZmllcicgfSkgcmVzcG9uc2VJZGVudGlmaWVyOiBzdHJpbmcgPSAnJztcblxuICAgIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogZmFsc2UsIHR5cGU6IE9iamVjdCB9KSBjb25maWd1cmF0aW9uOiBJbnRlcmFjdGlvbkNvbmZpZ3VyYXRpb24gPSB7XG4gICAgICBjb3B5U3R5bGVzRHJhZ0Nsb25lOiB0cnVlLFxuICAgICAgZHJhZ0NhbkJlUGxhY2VkQmFjazogdHJ1ZSxcbiAgICAgIGRyYWdPbkNsaWNrOiBmYWxzZVxuICAgIH07XG4gICAgQHdhdGNoKCdjb25maWd1cmF0aW9uJylcbiAgICBoYW5kbGVEcmFnT3B0aW9uc0NoYW5nZWQob2xkLCBkcmFnT3B0aW9ucykge1xuICAgICAgdGhpcy5kcmFnRHJvcEFwaS5jb3B5U3R5bGVzRHJhZ0Nsb25lID0gZHJhZ09wdGlvbnMuY29weVN0eWxlc0RyYWdDbG9uZTtcbiAgICAgIHRoaXMuZHJhZ0Ryb3BBcGkuZHJhZ09uQ2xpY2sgPSBkcmFnT3B0aW9ucy5kcmFnT25DbGljaztcbiAgICB9XG5cbiAgICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuLCByZWZsZWN0OiB0cnVlIH0pIGRpc2FibGVkID0gZmFsc2U7XG4gICAgQHdhdGNoKCdkaXNhYmxlZCcsIHsgd2FpdFVudGlsRmlyc3RVcGRhdGU6IHRydWUgfSlcbiAgICBoYW5kbGVEaXNhYmxlZENoYW5nZShvbGQsIGRpc2FibGVkOiBib29sZWFuKSB7XG4gICAgICB0aGlzLmRyYWdnYWJsZXMuZm9yRWFjaCgocywgY2gpID0+IHtcbiAgICAgICAgZGlzYWJsZWQgPyBjaC5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgJycpIDogY2gucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xuICAgICAgICBkaXNhYmxlZCA/IGNoLnJlbW92ZUF0dHJpYnV0ZSgncXRpLWRyYWdnYWJsZScpIDogY2guc2V0QXR0cmlidXRlKCdxdGktZHJhZ2dhYmxlJywgJ3RydWUnKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIEBwcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4sIHJlZmxlY3Q6IHRydWUgfSkgcmVhZG9ubHkgPSBmYWxzZTtcbiAgICBAd2F0Y2goJ3JlYWRvbmx5JywgeyB3YWl0VW50aWxGaXJzdFVwZGF0ZTogdHJ1ZSB9KVxuICAgIGhhbmRsZVJlYWRvbmx5Q2hhbmdlKG9sZCwgcmVhZG9ubHk6IGJvb2xlYW4pIHtcbiAgICAgIHRoaXMuZHJhZ2dhYmxlcy5mb3JFYWNoKChzLCBjaCkgPT4ge1xuICAgICAgICByZWFkb25seSA/IGNoLnNldEF0dHJpYnV0ZSgncmVhZG9ubHknLCAnJykgOiBjaC5yZW1vdmVBdHRyaWJ1dGUoJ3JlYWRvbmx5Jyk7XG4gICAgICAgIHJlYWRvbmx5ID8gY2gucmVtb3ZlQXR0cmlidXRlKCdxdGktZHJhZ2dhYmxlJykgOiBjaC5zZXRBdHRyaWJ1dGUoJ3F0aS1kcmFnZ2FibGUnLCAndHJ1ZScpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgQHByb3BlcnR5KHsgdHlwZTogTnVtYmVyLCByZWZsZWN0OiB0cnVlLCBhdHRyaWJ1dGU6ICdtaW4tYXNzb2NpYXRpb25zJyB9KSBtaW5Bc3NvY2lhdGlvbnMgPSAxO1xuICAgIEBwcm9wZXJ0eSh7IHR5cGU6IE51bWJlciwgcmVmbGVjdDogdHJ1ZSwgYXR0cmlidXRlOiAnbWF4LWFzc29jaWF0aW9ucycgfSkgbWF4QXNzb2NpYXRpb25zID0gMTtcblxuICAgIG92ZXJyaWRlIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcHMpOiB2b2lkIHtcbiAgICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcHMpO1xuICAgICAgdGhpcy5kcm9wcGFibGVzID0gQXJyYXkuZnJvbShcbiAgICAgICAgZHJvcHBhYmxlc0luU2hhZG93Um9vdFxuICAgICAgICAgID8gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoZHJvcHBhYmxlc1NlbGVjdG9yKVxuICAgICAgICAgIDogdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGRyb3BwYWJsZXNTZWxlY3RvcilcbiAgICAgICk7XG4gICAgICAvLyBQSzogTWF5YmUgbGF0ZXIsIGZvciBub3cgd2UgYXNzdW1lIGRyb3BwYWJsZXMgYXJlIG5vdCBkeW5hbWljbHkgYWRkZWQgb3IgcmVtb3ZlZFxuICAgICAgLy8gLmZpbHRlcigoZWxlbSkgPT4gIXRoaXMuZHJvcHBhYmxlcyB8fCAhdGhpcy5kcm9wcGFibGVzLmluY2x1ZGVzKGVsZW0pKTtcbiAgICAgIC8vIHRoaXMuZHJvcHBhYmxlcyA9IHRoaXMuZHJvcHBhYmxlcyA/IHRoaXMuZHJvcHBhYmxlcy5jb25jYXQobmV3RHJvcHBhYmxlcykgOiBuZXdEcm9wcGFibGVzO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuICAgICAgdGhpcy5kcmFnRHJvcEFwaSA9IG5ldyBUb3VjaERyYWdBbmREcm9wKCk7XG5cbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgbmV3IEN1c3RvbUV2ZW50PERyYWdEcm9wSW50ZXJhY3Rpb25FbGVtZW50PigncXRpLXJlZ2lzdGVyLWludGVyYWN0aW9uJywge1xuICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgY29tcG9zZWQ6IHRydWUsXG4gICAgICAgICAgZGV0YWlsOiB0aGlzXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIHJlc2V0KHNhdmUgPSB0cnVlKTogdm9pZCB7XG4gICAgICB0aGlzLmRyYWdnYWJsZXMuZm9yRWFjaCgocG9zaXRpb24sIGRyYWdnYWJsZSkgPT4ge1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHBvc2l0aW9uLnBhcmVudC5jaGlsZHJlbjtcbiAgICAgICAgY29uc3QgaW5kZXggPSBwb3NpdGlvbi5pbmRleCA8IGNoaWxkcmVuLmxlbmd0aCA/IHBvc2l0aW9uLmluZGV4IDogY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgICBwb3NpdGlvbi5wYXJlbnQuaW5zZXJ0QmVmb3JlKGRyYWdnYWJsZSwgY2hpbGRyZW5baW5kZXhdKTtcbiAgICAgIH0pO1xuICAgICAgc2F2ZSAmJiB0aGlzLnNhdmVSZXNwb25zZSgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjaGVja01heE1hdGNoQXNzb2NpYXRpb25zKCkge1xuICAgICAgdGhpcy5kcm9wcGFibGVzLmZvckVhY2goZCA9PiB7XG4gICAgICAgIGNvbnN0IG1heE1hdGNoID0gKyhkLmdldEF0dHJpYnV0ZSgnbWF0Y2gtbWF4JykgfHwgMSk7XG4gICAgICAgIC8vIGNvbnN0IG1heE1pbiA9ICsoZC5nZXRBdHRyaWJ1dGUoJ21hdGNoLW1pbicpIHx8IDApO1xuICAgICAgICBjb25zdCBkaXNhYmxlID0gbWF4TWF0Y2ggPD0gKGQuY2hpbGRyZW4ubGVuZ3RoIHx8IDApO1xuICAgICAgICBkaXNhYmxlID8gZC5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgJycpIDogZC5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XG4gICAgICAgIGRpc2FibGUgPyBkLnJlbW92ZUF0dHJpYnV0ZSgnZHJvcHpvbmUnKSA6IGQuc2V0QXR0cmlidXRlKCdkcm9wem9uZScsICdtb3ZlJyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXQgcmVzcG9uc2UocmVzcG9uc2U6IHN0cmluZ1tdKSB7XG4gICAgICAvLyBmb3IgcXRpLW1hdGNoLWludGVyYWN0aW9uIHRoZSBkcmFnIGludGVyYWN0aW9uIGNhbiBiZSByZXBsYWNlIHdpdGggYSBxdGktbWF0Y2gtdGFidWxhciBjbGFzc1xuICAgICAgLy8gd2hpY2ggc2hvd3MgdGhlIGRhdGEgaW4gYSBhIHRhYnVsYXIgd2F5LCBzbyBubyBkcmFnIGRyb3Agc2hvdWxkIGJlIGludm9sdmVkIHRoZW5cbiAgICAgIGlmICh0aGlzLmNsYXNzTGlzdC5jb250YWlucygncXRpLW1hdGNoLXRhYnVsYXInKSkgcmV0dXJuO1xuXG4gICAgICB0aGlzLnJlc2V0KGZhbHNlKTtcbiAgICAgIGlmIChyZXNwb25zZSAhPT0gbnVsbCAmJiBBcnJheS5pc0FycmF5KHJlc3BvbnNlKSlcbiAgICAgICAgcmVzcG9uc2UuZm9yRWFjaChyZXNwb25zZSA9PiB7XG4gICAgICAgICAgY29uc3QgW2Ryb3BJZCwgLi4uZHJhZ0lkc10gPSByZXNwb25zZS5zcGxpdCgnICcpLnJldmVyc2UoKTtcbiAgICAgICAgICBpZiAoZHJvcElkKSB7XG4gICAgICAgICAgICBjb25zdCBkcm9wcGFibGUgPSB0aGlzLmRyb3BwYWJsZXMuZmluZChkcm9wID0+IGRyb3AuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJykgPT09IGRyb3BJZCk7XG4gICAgICAgICAgICBkcmFnSWRzLmZvckVhY2goZHJhZ0lkID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZHJhZ2dhYmxlID0gdGhpcy5xdWVyeVNlbGVjdG9yKGBbaWRlbnRpZmllcj0ke2RyYWdJZH1dYCk7XG4gICAgICAgICAgICAgIGlmICghZHJvcHBhYmxlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgY2Fubm90IGZpbmQgZHJvcHBhYmxlIHdpdGggaWRlbnRpZmllcjogJHtkcm9wSWR9YCk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWRyYWdnYWJsZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYGNhbm5vdCBmaW5kIGRyYWdnYWJsZSB3aXRoIGlkZW50aWZpZXI6ICR7ZHJhZ0lkfWApO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRyb3BwYWJsZS5hcHBlbmRDaGlsZChkcmFnZ2FibGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tNYXhNYXRjaEFzc29jaWF0aW9ucygpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhbGlkYXRlKCkge1xuICAgICAgY29uc3QgZHJvcHBhYmxlcyA9IGRyb3BwYWJsZXNJblNoYWRvd1Jvb3RcbiAgICAgICAgPyBBcnJheS5mcm9tKHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKGRyb3BwYWJsZXNTZWxlY3RvcikpXG4gICAgICAgIDogQXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoZHJvcHBhYmxlc1NlbGVjdG9yKSk7XG4gICAgICBjb25zdCBhc3NvY2lhdGlvbnMgPSBkcm9wcGFibGVzLmZpbHRlcihkID0+IGQuY2hpbGRFbGVtZW50Q291bnQgPiAwKS5sZW5ndGg7XG4gICAgICByZXR1cm4gdGhpcy5taW5Bc3NvY2lhdGlvbnMgPD0gMCB8fCB0aGlzLm1pbkFzc29jaWF0aW9ucyA8PSBhc3NvY2lhdGlvbnM7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNhdmVSZXNwb25zZSgpIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gdGhpcy5kcm9wcGFibGVzLm1hcChkcm9wcGFibGUgPT4ge1xuICAgICAgICBsZXQgcmVzcG9uc2VTdHJpbmcgPSAnJztcbiAgICAgICAgaWYgKGRyb3BwYWJsZS5jaGlsZHJlbj8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJlc3BvbnNlU3RyaW5nICs9XG4gICAgICAgICAgICBBcnJheS5mcm9tKGRyb3BwYWJsZS5jaGlsZHJlbilcbiAgICAgICAgICAgICAgLm1hcChkID0+IGQuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJykpXG4gICAgICAgICAgICAgIC5qb2luKCcgJykgKyBgIGA7XG4gICAgICAgIH1cbiAgICAgICAgcmVzcG9uc2VTdHJpbmcgKz0gZHJvcHBhYmxlLmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VTdHJpbmc7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3F0aS1pbnRlcmFjdGlvbi1yZXNwb25zZScsIHtcbiAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgcmVzcG9uc2VJZGVudGlmaWVyOiB0aGlzLnJlc3BvbnNlSWRlbnRpZmllcixcbiAgICAgICAgICAgIHJlc3BvbnNlXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIERyYWdEcm9wSW50ZXJhY3Rpb25FbGVtZW50IGFzIENvbnN0cnVjdG9yPElJbnRlcmFjdGlvbj4gJiBUO1xufTtcbiIsICJpbXBvcnQgeyBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IEludGVyYWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJuYWwvaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24nO1xuaW1wb3J0IHsgcmVtb3ZlRG91YmxlU2xhc2hlcyB9IGZyb20gJy4uLy4uL2ludGVybmFsL3V0aWxzJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1jdXN0b20taW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aUN1c3RvbUludGVyYWN0aW9uIGV4dGVuZHMgSW50ZXJhY3Rpb24ge1xuICAvLyBUaGlzIGN1c3RvbS1pbnRlcmFjdGlvbiBzdXBwb3J0IHRoZSBDRVMgQVBJIHdoaWNoIGlzIHVzZSBpbiBGQUNFVFxuICAvL1xuICAvLyBJdCB3b3JrcyBsaWtlIHRoaXM6XG4gIC8vIDEuIFRoZSBDSSBtYW5pZmVzdCBpcyBmZXRjaGVkXG4gIC8vIDIuIEFuIGlmcmFtZSBpcyBjcmVhdGVkIGFuZCB0aGUgZmlyc3Qgc3R5bGUgYW5kIGZpcnN0IHNjcmlwdCBmcm9tIHRoZSBtYW5pZmVzdCBhcmUgbG9hZGVkXG4gIC8vIDMuIFRoZSBmaXJzdCBzY3JpcHQgaXMgYm9vdHN0cmFwLmpzIHdoaWNoIGFsc28gY3JlYXRlcyBhbiBpZnJhbWUgYW5kIGxvYWRzIHRoZSBmaXJzdCBtZWRpYSBmcm9tIHRoZSBtYW5pZmVzdFxuICAvLyA0LiBDb21tdW5pY2F0aW9uIGlzIGRvbmUgdmlhIHRoZSBDRVMgQVBJIGJ1dCBiZWNhdXNlIHRoZSBpZnJhbWUgaXMgbm90IGFsbG93ZWQgdG8gYWNjZXNzIHRoZSBnbG9iYWwgQ0VTIG9iamVjdCB3ZSBuZWVkIHRvIHVzZSB3aW5kb3cucG9zdE1lc3NhZ2VcblxuICAvLyBUbyBhY2hpZXZlIHRoaXMgd2UgY2hhbmdlIHRoZSBwYWNrYWdlIGJ5IHJlcGxhY2luZyB0aGUgYm9vdHN0cmFwLmpzIHdpdGggb3VyIG93biBhbmQgaW5qZWN0IGEgcHJveHkgQ0VTIEFQSSB0aGF0IGNvbW11bmljYXRlcyB2aWEgcG9zdE1lc3NhZ2VcbiAgLy8gQmVjYXVzZSB3ZSBhbHNvIHdhbnQgdG8gcnVuIHRoaXMgaW4gc3Rvcnlib29rLCB3ZSBjYW5ub3QgdXNlIHdpbmRvdy50b3AgYmVjYXVzZSB0byBzZW5kIG1lc3NhZ2VzIHRoZXJlLCBiZWNhdXNlIGluIGNhc2Ugb2Ygc3Rvcnlib29rIHRoYXQgaXMgbm90IHRoZSB0b3Agd2luZG93LlxuICAvLyBTbyB3ZSBzZW5kIG1lc3NhZ2VzIHRvIGFsbCBwYXJlbnQgd2luZG93c1xuICBwcml2YXRlIHJhd1Jlc3BvbnNlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmhhbmRsZVBvc3RNZXNzYWdlID0gdGhpcy5oYW5kbGVQb3N0TWVzc2FnZS5iaW5kKHRoaXMpO1xuICB9XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdyZXNwb25zZS1pZGVudGlmaWVyJyB9KVxuICByZXNwb25zZUlkZW50aWZpZXI6IHN0cmluZztcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2RhdGEnIH0pXG4gIGRhdGE6IHN0cmluZztcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2RhdGEtYmFzZS1pdGVtJyB9KVxuICBiYXNlSXRlbVVybDogc3RyaW5nO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnZGF0YS1iYXNlLXJlZicgfSlcbiAgYmFzZVJlZlVybDogc3RyaW5nO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnaWQnIH0pXG4gIGlkOiBzdHJpbmc7XG5cbiAgQHN0YXRlKClcbiAgcHJpdmF0ZSBfZXJyb3JNZXNzYWdlOiBzdHJpbmcgPSBudWxsO1xuICBtYW5pZmVzdDoge1xuICAgIHNjcmlwdDogc3RyaW5nW107XG4gICAgc3R5bGU6IHN0cmluZ1tdO1xuICAgIG1lZGlhOiBzdHJpbmdbXTtcbiAgfTtcblxuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG4gICAgY29uc3QgdXJpVG9NYW5pZmVzdCA9IHRoaXMuZGF0YS5zdGFydHNXaXRoKCdodHRwJylcbiAgICAgID8gdGhpcy5kYXRhXG4gICAgICA6IHJlbW92ZURvdWJsZVNsYXNoZXModGhpcy5iYXNlSXRlbVVybCArICcvJyArIHRoaXMuZGF0YSk7XG4gICAgLy8gZmV0Y2ggdGhlIGpzb24gZmlsZSBsb2NhdGVkIGF0IHRoZSBkYXRhIGF0dHJpYnV0ZVxuICAgIGZldGNoKHVyaVRvTWFuaWZlc3QpXG4gICAgICAudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS5qc29uKCkpXG4gICAgICAudGhlbihkYXRhID0+IHtcbiAgICAgICAgdGhpcy5tYW5pZmVzdCA9IGRhdGE7XG4gICAgICAgIHRoaXMuc2V0dXBDRVMoKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgdGhpcy5fZXJyb3JNZXNzYWdlID0gZXJyO1xuICAgICAgfSk7XG4gIH1cblxuICAvLyBNSDogQ2hhbmdlZCB0aGUgZGVmYXVsdCBib290c3RyYXAuanMgdG8gdXNlIHRoZSBuZXcgQ0VTIEFQSVxuICAvLyBCZWNhdXNlIHRoZSBvbGQgb25lIHVzZXMgdGhlIGdsb2JhbCBDRVMgb2JqZWN0IHRoYXQgaXMgbm90IGFsbG93ZWQgdG8gYmUgYWNjZXNzZWQgd2hlbiB0aGUgQ0lcbiAgLy8gaXMgZW1iZWRkZWQgaW4gYW4gaWZyYW1lIGFuZCBjb21pbmcgZnJvbSBhbm90aGVyIGRvbWFpblxuICAvLyBUaGVyZWZvciB3ZSBuZWVkIHRvIHVzZSB0aGUgbmV3IENFUyBBUEkgdG8gY29tbXVuaWNhdGVzIHZpYSB0aGUgYnJvYWRjYXN0IEFQSVxuICBzZXR1cENFUygpIHtcbiAgICBjb25zdCBpZnJhbWUgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignI3BjaUNvbnRhaW5lcicpIGFzIEhUTUxJRnJhbWVFbGVtZW50LFxuICAgICAgaWZyYW1lV2luID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cgfHwgaWZyYW1lLFxuICAgICAgaWZyYW1lRG9jID0gaWZyYW1lLmNvbnRlbnREb2N1bWVudDtcblxuICAgIC8vIGNvbnN0IGNoYW5uZWwgPSBuZXcgQnJvYWRjYXN0Q2hhbm5lbCgnY2VzX2NoYW5uZWwnKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMuaGFuZGxlUG9zdE1lc3NhZ2UpO1xuICAgIGlmcmFtZURvYy5vcGVuKCk7XG4gICAgaWZyYW1lRG9jLndyaXRlKGBcbiAgICAgIDxodG1sPlxuICAgICAgICA8aGVhZD5cbiAgICAgICAgICA8bGluayBocmVmPScke3JlbW92ZURvdWJsZVNsYXNoZXMoYCR7dGhpcy5iYXNlUmVmVXJsfS8ke3RoaXMubWFuaWZlc3Quc3R5bGVbMF19YCl9JyByZWw9XCJzdHlsZXNoZWV0XCIgLz5cbiAgICAgICAgICA8c2NyaXB0IHNyYz0nJHtyZW1vdmVEb3VibGVTbGFzaGVzKGAke3RoaXMuYmFzZVJlZlVybH0vJHt0aGlzLm1hbmlmZXN0LnNjcmlwdFswXX1gKX0nPjwvc2NyaXB0PlxuICAgICAgICA8L2hlYWQ+XG4gICAgICAgIDxib2R5PjwvYm9keT5cbiAgICAgIDwvaHRtbD5cbiAgICAgIGApO1xuXG4gICAgaWZyYW1lRG9jLmNsb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldElGcmFtZXMoKSB7XG4gICAgY29uc3QgaWZyYW1lc0luU2hhZG93Um9vdCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdpZnJhbWUnKTtcbiAgICBjb25zdCBpZnJhbWUgPSB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lmcmFtZScpO1xuXG4gICAgY29uc3Qgb3V0ZXJJRnJhbWVzID0gWy4uLmlmcmFtZXNJblNoYWRvd1Jvb3QsIC4uLmlmcmFtZV07XG4gICAgZm9yIChjb25zdCBpZnJhbWUgb2Ygb3V0ZXJJRnJhbWVzKSB7XG4gICAgICBjb25zdCBpZnJhbWVTcmMgPSBpZnJhbWUuc3JjO1xuICAgICAgY29uc3QgaXNTYW1lT3JpZ2luID0gbmV3IFVSTChpZnJhbWVTcmMsIHdpbmRvdy5sb2NhdGlvbi5ocmVmKS5vcmlnaW4gPT09IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XG4gICAgICBpZiAoaXNTYW1lT3JpZ2luKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgb3V0ZXJEb2MgPSBpZnJhbWUuY29udGVudERvY3VtZW50IHx8IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICAgICAgICAgIGlmIChvdXRlckRvYykge1xuICAgICAgICAgICAgdGhpcy5nZXRJbm5lcklGcmFtZXMob3V0ZXJEb2MsIG91dGVySUZyYW1lcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgYWNjZXNzaW5nIG5lc3RlZCBpZnJhbWU6JywgZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLy8gZ2V0IG9ubHkgdW5pcXVlIGlmcmFtZXNcbiAgICBvdXRlcklGcmFtZXMuZm9yRWFjaCgoaWZyYW1lLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKG91dGVySUZyYW1lcy5pbmRleE9mKGlmcmFtZSkgIT09IGluZGV4KSB7XG4gICAgICAgIG91dGVySUZyYW1lcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBvdXRlcklGcmFtZXM7XG4gIH1cblxuICBwcml2YXRlIGdldElubmVySUZyYW1lcyhpZnJhbWVEb2N1bWVudDogRG9jdW1lbnQsIGlmcmFtZXMgPSBbXSkge1xuICAgIC8vIEdldCBhbGwgaWZyYW1lcyBpbiB0aGUgY3VycmVudCBkb2N1bWVudFxuICAgIGNvbnN0IGN1cnJlbnRJZnJhbWVzID0gaWZyYW1lRG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaWZyYW1lJyk7XG5cbiAgICBjdXJyZW50SWZyYW1lcy5mb3JFYWNoKGlmcmFtZSA9PiB7XG4gICAgICAvLyBBZGQgdGhlIGN1cnJlbnQgaWZyYW1lIHRvIHRoZSBsaXN0XG4gICAgICBpZnJhbWVzLnB1c2goaWZyYW1lKTtcblxuICAgICAgLy8gUmVjdXJzaXZlbHkgZ2V0IGlmcmFtZXMgd2l0aGluIHRoZSBjdXJyZW50IGlmcmFtZVxuICAgICAgLy8gQ2hlY2sgaWYgdGhlIGlmcmFtZSBzcmMgaXMgZnJvbSB0aGUgc2FtZSBvcmlnaW5cbiAgICAgIGNvbnN0IGlmcmFtZVNyYyA9IGlmcmFtZS5zcmM7XG4gICAgICBjb25zdCBpc1NhbWVPcmlnaW4gPSBuZXcgVVJMKGlmcmFtZVNyYywgd2luZG93LmxvY2F0aW9uLmhyZWYpLm9yaWdpbiA9PT0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcblxuICAgICAgaWYgKGlzU2FtZU9yaWdpbikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IG5lc3RlZERvYyA9IGlmcmFtZS5jb250ZW50RG9jdW1lbnQgfHwgaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gICAgICAgICAgdGhpcy5nZXRJbm5lcklGcmFtZXMobmVzdGVkRG9jLCBpZnJhbWVzKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGFjY2Vzc2luZyBuZXN0ZWQgaWZyYW1lOicsIGUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1NraXBwZWQgY3Jvc3Mtb3JpZ2luIGlmcmFtZTonLCBpZnJhbWVTcmMpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGlmcmFtZXM7XG4gIH1cblxuICBwcml2YXRlIHBvc3RUb1dpbmRvd0FuZElmcmFtZXModHlwZTogc3RyaW5nLCBkYXRhOiBhbnkpIHtcbiAgICB3aW5kb3cucG9zdE1lc3NhZ2UoeyB0eXBlLCBkYXRhIH0sICcqJyk7XG4gICAgY29uc3QgaWZyYW1lcyA9IHRoaXMuZ2V0SUZyYW1lcygpO1xuICAgIGZvciAoY29uc3QgaWZyYW1lIG9mIGlmcmFtZXMpIHtcbiAgICAgIGlmIChpZnJhbWUuY29udGVudFdpbmRvdykge1xuICAgICAgICBpZnJhbWUuY29udGVudFdpbmRvdy5wb3N0TWVzc2FnZSh7IHR5cGUsIGRhdGEgfSwgJyonKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYW5kbGVQb3N0TWVzc2FnZShldmVudDogTWVzc2FnZUV2ZW50KSB7XG4gICAgY29uc3QgeyB0eXBlLCBkYXRhIH0gPSBldmVudC5kYXRhO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnc2V0UmVzcG9uc2UnOlxuICAgICAgICB0aGlzLnJhd1Jlc3BvbnNlID0gZGF0YTtcbiAgICAgICAgdGhpcy5zYXZlUmVzcG9uc2UoZGF0YSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZ2V0UmVzcG9uc2UnOiB7XG4gICAgICAgIHRoaXMucG9zdFRvV2luZG93QW5kSWZyYW1lcygncmVzcG9uc2VEYXRhJywgdGhpcy5yYXdSZXNwb25zZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnZ2V0TWVkaWEnOiB7XG4gICAgICAgIGNvbnN0IG1lZGlhRGF0YSA9IHRoaXMubWFuaWZlc3QubWVkaWEubWFwKG1lZGlhID0+IHtcbiAgICAgICAgICBjb25zdCB1cmwgPSBtZWRpYS5zdGFydHNXaXRoKCdodHRwJykgPyBtZWRpYSA6IHJlbW92ZURvdWJsZVNsYXNoZXModGhpcy5iYXNlUmVmVXJsICsgJy8nICsgbWVkaWEpO1xuICAgICAgICAgIHJldHVybiB1cmw7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnBvc3RUb1dpbmRvd0FuZElmcmFtZXMoJ21lZGlhRGF0YScsIG1lZGlhRGF0YSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnc2V0U3RhZ2VIZWlnaHQnOlxuICAgICAgICBjb25zb2xlLmxvZygnc2V0U3RhZ2VIZWlnaHQgbm90IGltcGxlbWVudGVkJyk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJhd1Jlc3BvbnNlICE9PSAnJztcbiAgfVxuXG4gIHNldCByZXNwb25zZSh2YWw6IFJlYWRvbmx5PHN0cmluZyB8IHN0cmluZ1tdPikge1xuICAgIHRoaXMucmF3UmVzcG9uc2UgPSB2YWwgYXMgc3RyaW5nO1xuICB9XG5cbiAgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLmhhbmRsZVBvc3RNZXNzYWdlKTtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICB9XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxpZnJhbWVcbiAgICAgICAgd2lkdGg9JHt0aGlzLmdldEF0dHJpYnV0ZSgnd2lkdGgnKX1cbiAgICAgICAgaGVpZ2h0PSR7dGhpcy5nZXRBdHRyaWJ1dGUoJ2hlaWdodCcpfVxuICAgICAgICBmcmFtZWJvcmRlcj1cIjBcIlxuICAgICAgICB0aXRsZT1cInBjaUNvbnRhaW5lclwiXG4gICAgICAgIGlkPVwicGNpQ29udGFpbmVyXCJcbiAgICAgID5cbiAgICAgIDwvaWZyYW1lPlxuICAgICAgJHt0aGlzLl9lcnJvck1lc3NhZ2UgJiZcbiAgICAgIGh0bWxgPGRpdiBzdHlsZT1cImNvbG9yOnJlZFwiPlxuICAgICAgICA8aDE+RXJyb3I8L2gxPlxuICAgICAgICAke3RoaXMuX2Vycm9yTWVzc2FnZX1cbiAgICAgIDwvZGl2PmB9YDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktY3VzdG9tLWludGVyYWN0aW9uJzogUXRpQ3VzdG9tSW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgSW50ZXJhY3Rpb24gfSBmcm9tICcuLi9pbnRlcm5hbC9pbnRlcmFjdGlvbi9pbnRlcmFjdGlvbic7XG5AY3VzdG9tRWxlbWVudCgncXRpLWVuZC1hdHRlbXB0LWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlFbmRBdHRlbXB0SW50ZXJhY3Rpb24gZXh0ZW5kcyBJbnRlcmFjdGlvbiB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnY291bnQtYXR0ZW1wdCcgfSlcbiAgcHVibGljIGNvdW50QXR0ZW1wdDogc3RyaW5nID0gJ3RydWUnO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KVxuICBwdWJsaWMgdGl0bGU6ICdlbmQgYXR0ZW1wdCc7XG5cbiAgdmFsaWRhdGUoKTogYm9vbGVhbiB7XG4gICAgLy8gdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHNldCByZXNwb25zZSh2YWw6IHVuZGVmaW5lZCkge1xuICAgIC8vIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8YnV0dG9uID9kaXNhYmxlZD0ke3RoaXMuZGlzYWJsZWR9IHBhcnQ9XCJidXR0b25cIiBAY2xpY2s9JHt0aGlzLmVuZEF0dGVtcHR9PiR7dGhpcy50aXRsZX08L2J1dHRvbj5gO1xuICB9XG4gIHB1YmxpYyBlbmRBdHRlbXB0KGU6IEV2ZW50KSB7XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdlbmQtYXR0ZW1wdCcsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWUsXG4gICAgICAgIGRldGFpbDogeyByZXNwb25zZUlkZW50aWZpZXI6IHRoaXMucmVzcG9uc2VJZGVudGlmaWVyLCBjb3VudEF0dGVtcHQ6IHRoaXMuY291bnRBdHRlbXB0ID09PSAndHJ1ZScgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1lbmQtYXR0ZW1wdC1pbnRlcmFjdGlvbic6IFF0aUVuZEF0dGVtcHRJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IGNzcywgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgRHJhZ0Ryb3BJbnRlcmFjdGlvbk1peGluIH0gZnJvbSAnLi4vaW50ZXJuYWwvZHJhZy1kcm9wL2RyYWctZHJvcC1pbnRlcmFjdGlvbi1taXhpbic7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktZ2FwLW1hdGNoLWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlHYXBNYXRjaEludGVyYWN0aW9uIGV4dGVuZHMgRHJhZ0Ryb3BJbnRlcmFjdGlvbk1peGluKExpdEVsZW1lbnQsICdxdGktZ2FwLXRleHQnLCBmYWxzZSwgJ3F0aS1nYXAnKSB7XG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBbXG4gICAgY3NzYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICAgICAgZ2FwOiAwLjVyZW07XG4gICAgICB9XG5cbiAgICAgIDpob3N0KC5xdGktY2hvaWNlcy10b3ApIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIH1cbiAgICAgIDpob3N0KC5xdGktY2hvaWNlcy1ib3R0b20pIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xuICAgICAgfVxuICAgICAgOmhvc3QoLnF0aS1jaG9pY2VzLWxlZnQpIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgIH1cbiAgICAgIDpob3N0KC5xdGktY2hvaWNlcy1yaWdodCkge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XG4gICAgICB9XG4gICAgICBbcGFydD0nZHJhZ3MnXSxcbiAgICAgIFtwYXJ0PSdkcm9wcyddIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIGdhcDogMC41cmVtO1xuICAgICAgfVxuICAgIGBcbiAgXTtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgIDxzbG90IHBhcnQ9XCJkcmFnc1wiIG5hbWU9XCJxdGktZ2FwLXRleHRcIj48L3Nsb3Q+XG4gICAgICA8c2xvdCBwYXJ0PVwiZHJvcHNcIj48L3Nsb3Q+YDtcbiAgfVxuXG4gIHNldCBjb3JyZWN0UmVzcG9uc2UodmFsdWU6IFJlYWRvbmx5PHN0cmluZyB8IHN0cmluZ1tdPikge1xuICAgIGxldCBtYXRjaGVzOiB7IHRleHQ6IHN0cmluZzsgZ2FwOiBzdHJpbmcgfVtdID0gW107ICAgICAgICAgICAgXG4gICAgY29uc3QgcmVzcG9uc2UgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTtcblxuICAgIGlmIChyZXNwb25zZSkgeyAgICAgIFxuICAgICAgbWF0Y2hlcyA9IHJlc3BvbnNlLm1hcCh4ID0+IHtcbiAgICAgICAgY29uc3Qgc3BsaXQgPSB4LnNwbGl0KCcgJyk7XG4gICAgICAgICByZXR1cm4geyB0ZXh0OiBzcGxpdFswXSwgZ2FwOiBzcGxpdFsxXSAgfTt9XG4gICAgICApO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBnYXBzID0gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKCdxdGktZ2FwJyk7XG4gICAgICBnYXBzLmZvckVhY2goKGdhcCwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgaWRlbnRpZmllciA9IGdhcC5nZXRBdHRyaWJ1dGUoJ2lkZW50aWZpZXInKTtcbiAgICAgICAgY29uc3QgdGV4dElkZW50aWZpZXIgPSBtYXRjaGVzLmZpbmQoeCA9PiB4LmdhcCA9PT0gaWRlbnRpZmllcik/LnRleHQ7XG4gICAgICAgIGNvbnN0IHRleHQgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoYHF0aS1nYXAtdGV4dFtpZGVudGlmaWVyPVwiJHt0ZXh0SWRlbnRpZmllcn1cIl1gKT8udGV4dENvbnRlbnQudHJpbSgpO1xuICAgICAgICBpZiAodGV4dElkZW50aWZpZXIgJiYgdGV4dCkge1xuICAgICAgICAgIGlmICghZ2FwLm5leHRFbGVtZW50U2libGluZz8uY2xhc3NMaXN0LmNvbnRhaW5zKCdjb3JyZWN0LW9wdGlvbicpKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0U3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsgICAgICAgICBcbiAgICAgICAgICAgIHRleHRTcGFuLmNsYXNzTGlzdC5hZGQoJ2NvcnJlY3Qtb3B0aW9uJyk7XG4gICAgICAgICAgICB0ZXh0U3Bhbi50ZXh0Q29udGVudCA9IHRleHQ7XG4gICAgICAgICAgICBnYXAuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KCdhZnRlcmVuZCcsIHRleHRTcGFuKTsgIFxuICAgICAgICAgIH0gIFxuICAgICAgICB9ICBcbiAgICAgICAgZWxzZSBpZiAoZ2FwLm5leHRFbGVtZW50U2libGluZz8uY2xhc3NMaXN0LmNvbnRhaW5zKCdjb3JyZWN0LW9wdGlvbicpKSB7XG4gICAgICAgICAgZ2FwLm5leHRFbGVtZW50U2libGluZy5yZW1vdmUoKTtcbiAgICAgICAgfSAgICAgICAgICAgIFxuICAgICAgfSlcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktZ2FwLW1hdGNoLWludGVyYWN0aW9uJzogUXRpR2FwTWF0Y2hJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgIi8qIGVzbGludC1kaXNhYmxlIGxpdC9uby1pbnZhbGlkLWh0bWwgKi9cbmltcG9ydCB7IGNzcywgaHRtbCwgc3ZnIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHF1ZXJ5LCBxdWVyeUFzc2lnbmVkRWxlbWVudHMsIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgaWZEZWZpbmVkIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvaWYtZGVmaW5lZC5qcyc7XG5pbXBvcnQgeyByZXBlYXQgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9yZXBlYXQuanMnO1xuaW1wb3J0IHsgcG9zaXRpb25Ib3RzcG90cyB9IGZyb20gJy4uL2ludGVybmFsL2hvdHNwb3RzL2hvdHNwb3QnO1xuaW1wb3J0IHsgSW50ZXJhY3Rpb24gfSBmcm9tICcuLi9pbnRlcm5hbC9pbnRlcmFjdGlvbi9pbnRlcmFjdGlvbic7XG5pbXBvcnQgeyBRdGlIb3RzcG90Q2hvaWNlIH0gZnJvbSAnLi4vcXRpLWhvdHNwb3QtY2hvaWNlJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1ncmFwaGljLWFzc29jaWF0ZS1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpR3JhcGhpY0Fzc29jaWF0ZUludGVyYWN0aW9uIGV4dGVuZHMgSW50ZXJhY3Rpb24ge1xuICBjaG9pY2VPcmRlcmluZzogYm9vbGVhbjtcbiAgaG90c3BvdHM7XG4gIHN0YXJ0UG9pbnQgPSBudWxsO1xuICBlbmRQb2ludCA9IG51bGw7XG4gIEBzdGF0ZSgpIF9saW5lcyA9IFtdO1xuICBAc3RhdGUoKSBzdGFydENvb3JkOiB7IHg6IGFueTsgeTogYW55IH07XG4gIEBzdGF0ZSgpIG1vdXNlQ29vcmQ6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfTtcbiAgQHF1ZXJ5KCdzdmcnKSBzdmdDb250YWluZXI7XG4gIEBxdWVyeUFzc2lnbmVkRWxlbWVudHMoeyBzZWxlY3RvcjogJ2ltZycgfSkgZ3JJbWFnZTtcblxuICAvLyB0YXJnZXQgdGhlIG1haW4gc2xvdCBtYWtlIGl0IHJlbGF0aXZlIGFuZCBmaXQgd2l0aCB0aGUgY29udGVuXG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBbXG4gICAgY3NzYFxuICAgICAgc2xvdDpub3QoW25hbWU9J3Byb21wdCddKSB7XG4gICAgICAgIC8vIHBvc2l0aW9uOiByZWxhdGl2ZTsgLyogcXRpLWhvdHNwb3QtY2hvaWNlIHJlbGF0aXZlIHRvIHRoZSBzbG90ICovXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB3aWR0aDogZml0LWNvbnRlbnQ7IC8qIGhvdHNwb3RzIG5vdCBzdHJldGNoaW5nIGZ1cnRoZXIgaWYgaW1hZ2UgaXMgYXQgbWF4IHNpemUgKi9cbiAgICAgIH1cbiAgICAgIDo6c2xvdHRlZChpbWcpIHtcbiAgICAgICAgLyogaW1hZ2Ugbm90IHNlbGVjdGFibGUgYW55bW9yZSAqL1xuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgICB9XG4gICAgICA6OnNsb3R0ZWQocXRpLWFzc29jaWFibGUtaG90c3BvdCkge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICAgIH1cbiAgICAgIGxpbmUtY29udGFpbmVyIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIH1cbiAgICAgIHN2ZyB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwcHg7XG4gICAgICAgIGxlZnQ6IDBweDtcbiAgICAgIH1cbiAgICBgXG4gIF07XG4gIHN2ZzogU1ZHU1ZHRWxlbWVudDtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigncXRpLXJlZ2lzdGVyLWhvdHNwb3QnLCB0aGlzLnBvc2l0aW9uSG90c3BvdE9uUmVnaXN0ZXIpO1xuICB9XG5cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5fbGluZXMgPSBbXTtcbiAgfVxuICB2YWxpZGF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbGluZXMubGVuZ3RoID4gMDtcbiAgfVxuICBzZXQgcmVzcG9uc2UodmFsOiBzdHJpbmcgfCBzdHJpbmdbXSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgIHRoaXMuX2xpbmVzID0gdmFsO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdCBuYW1lPVwicHJvbXB0XCI+PC9zbG90PlxuICAgICAgPGxpbmUtY29udGFpbmVyPlxuICAgICAgICA8c3ZnXG4gICAgICAgICAgd2lkdGg9JHtpZkRlZmluZWQodGhpcy5nckltYWdlWzBdPy53aWR0aCl9XG4gICAgICAgICAgaGVpZ2h0PSR7aWZEZWZpbmVkKHRoaXMuZ3JJbWFnZVswXT8uaGVpZ2h0KX1cbiAgICAgICAgICB2aWV3Ym94PVwiMCAwICR7dGhpcy5nckltYWdlWzBdPy53aWR0aH0gJHt0aGlzLmdySW1hZ2VbMF0/LmhlaWdodH1cIlxuICAgICAgICA+XG4gICAgICAgICAgJHtyZXBlYXQoXG4gICAgICAgICAgICB0aGlzLl9saW5lcyxcbiAgICAgICAgICAgIGxpbmUgPT4gbGluZSxcbiAgICAgICAgICAgIChsaW5lLCBpbmRleCkgPT4gc3ZnYFxuICAgICAgICAgICAgICA8bGluZVxuICAgICAgICAgICAgICAgIHBhcnQ9XCJsaW5lXCJcbiAgICAgICAgICAgICAgICB4MT0ke3BhcnNlSW50KHRoaXMucXVlcnlTZWxlY3RvcjxTVkdMaW5lRWxlbWVudD4oJ1tpZGVudGlmaWVyPScgKyBsaW5lLnNwbGl0KCcgJylbMF0gKyAnXScpLnN0eWxlLmxlZnQpfVxuICAgICAgICAgICAgICAgIHkxPSR7cGFyc2VJbnQodGhpcy5xdWVyeVNlbGVjdG9yPFNWR0xpbmVFbGVtZW50PignW2lkZW50aWZpZXI9JyArIGxpbmUuc3BsaXQoJyAnKVswXSArICddJykuc3R5bGUudG9wKX1cbiAgICAgICAgICAgICAgICB4Mj0ke3BhcnNlSW50KHRoaXMucXVlcnlTZWxlY3RvcjxTVkdMaW5lRWxlbWVudD4oJ1tpZGVudGlmaWVyPScgKyBsaW5lLnNwbGl0KCcgJylbMV0gKyAnXScpLnN0eWxlLmxlZnQpfVxuICAgICAgICAgICAgICAgIHkyPSR7cGFyc2VJbnQodGhpcy5xdWVyeVNlbGVjdG9yPFNWR0xpbmVFbGVtZW50PignW2lkZW50aWZpZXI9JyArIGxpbmUuc3BsaXQoJyAnKVsxXSArICddJykuc3R5bGUudG9wKX1cbiAgICAgICAgICAgICAgICBzdHJva2U9XCJyZWRcIlxuICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjNcIlxuICAgICAgICAgICAgICAgIEBjbGljaz0keyhlOiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xpbmVzID0gdGhpcy5fbGluZXMuZmlsdGVyKChfLCBpKSA9PiBpICE9PSBpbmRleCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLnNhdmVSZXNwb25zZSh0aGlzLl9saW5lcyk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIGBcbiAgICAgICAgICApfVxuICAgICAgICAgICR7dGhpcy5zdGFydFBvaW50ICYmXG4gICAgICAgICAgc3ZnYDxsaW5lXG4gICAgICAgICAgICBwYXJ0PVwicG9pbnRcIlxuICAgICAgICAgICAgeDE9JHt0aGlzLnN0YXJ0Q29vcmQueH1cbiAgICAgICAgICAgIHkxPSR7dGhpcy5zdGFydENvb3JkLnl9XG4gICAgICAgICAgICB4Mj0ke3RoaXMubW91c2VDb29yZC54fVxuICAgICAgICAgICAgeTI9JHt0aGlzLm1vdXNlQ29vcmQueX1cbiAgICAgICAgICAgIHN0cm9rZT1cInJlZFwiXG4gICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIzXCJcbiAgICAgICAgICAvPmB9XG4gICAgICAgIDwvc3ZnPlxuICAgICAgICA8c2xvdD48L3Nsb3Q+XG4gICAgICA8L2xpbmUtY29udGFpbmVyPmA7XG4gIH1cblxuICBwcml2YXRlIHBvc2l0aW9uSG90c3BvdE9uUmVnaXN0ZXIoZTogQ3VzdG9tRXZlbnQ8UXRpSG90c3BvdENob2ljZT4pOiB2b2lkIHtcbiAgICBjb25zdCBpbWcgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpIGFzIEhUTUxJbWFnZUVsZW1lbnQ7XG4gICAgY29uc3QgaG90c3BvdCA9IGUudGFyZ2V0IGFzIFF0aUhvdHNwb3RDaG9pY2U7XG4gICAgY29uc3QgY29vcmRzID0gaG90c3BvdC5nZXRBdHRyaWJ1dGUoJ2Nvb3JkcycpO1xuICAgIGNvbnN0IHNoYXBlID0gaG90c3BvdC5nZXRBdHRyaWJ1dGUoJ3NoYXBlJyk7XG4gICAgY29uc3QgY29vcmRzTnVtYmVyID0gY29vcmRzLnNwbGl0KCcsJykubWFwKHMgPT4gcGFyc2VJbnQocykpO1xuICAgIHBvc2l0aW9uSG90c3BvdHMoc2hhcGUsIGNvb3Jkc051bWJlciwgaW1nLCBob3RzcG90KTtcbiAgfVxuXG4gIG92ZXJyaWRlIGZpcnN0VXBkYXRlZChlKTogdm9pZCB7XG4gICAgc3VwZXIuZmlyc3RVcGRhdGVkKGUpO1xuXG4gICAgdGhpcy5ob3RzcG90cyA9IHRoaXMucXVlcnlTZWxlY3RvckFsbCgncXRpLWFzc29jaWFibGUtaG90c3BvdCcpO1xuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgZXZlbnQgPT4ge1xuICAgICAgdGhpcy5tb3VzZUNvb3JkID0ge1xuICAgICAgICB4OiBldmVudC5jbGllbnRYIC0gdGhpcy5nckltYWdlWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQsXG4gICAgICAgIHk6IGV2ZW50LmNsaWVudFkgLSB0aGlzLmdySW1hZ2VbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgdGhpcy5ob3RzcG90cy5mb3JFYWNoKGhvdHNwb3QgPT4ge1xuICAgICAgaG90c3BvdC5zdHlsZS5sZWZ0ID0gaG90c3BvdC5nZXRBdHRyaWJ1dGUoJ2Nvb3JkcycpLnNwbGl0KCcsJylbMF0gKyAncHgnO1xuICAgICAgaG90c3BvdC5zdHlsZS50b3AgPSBob3RzcG90LmdldEF0dHJpYnV0ZSgnY29vcmRzJykuc3BsaXQoJywnKVsxXSArICdweCc7XG5cbiAgICAgIGhvdHNwb3QuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBldmVudCA9PiB7XG4gICAgICAgIGlmICghdGhpcy5zdGFydFBvaW50KSB7XG4gICAgICAgICAgdGhpcy5zdGFydFBvaW50ID0gZXZlbnQudGFyZ2V0O1xuXG4gICAgICAgICAgdGhpcy5zdGFydENvb3JkID0ge1xuICAgICAgICAgICAgeDogdGhpcy5zdGFydFBvaW50LmdldEF0dHJpYnV0ZSgnY29vcmRzJykuc3BsaXQoJywnKVswXSxcbiAgICAgICAgICAgIHk6IHRoaXMuc3RhcnRQb2ludC5nZXRBdHRyaWJ1dGUoJ2Nvb3JkcycpLnNwbGl0KCcsJylbMV1cbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmVuZFBvaW50KSB7XG4gICAgICAgICAgdGhpcy5lbmRQb2ludCA9IGV2ZW50LnRhcmdldDtcblxuICAgICAgICAgIHRoaXMuX2xpbmVzID0gW1xuICAgICAgICAgICAgLi4udGhpcy5fbGluZXMsXG4gICAgICAgICAgICB0aGlzLnN0YXJ0UG9pbnQuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJykgKyAnICcgKyB0aGlzLmVuZFBvaW50LmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpXG4gICAgICAgICAgXTtcbiAgICAgICAgICB0aGlzLnNhdmVSZXNwb25zZSh0aGlzLl9saW5lcyk7XG4gICAgICAgICAgdGhpcy5zdGFydFBvaW50ID0gbnVsbDtcbiAgICAgICAgICB0aGlzLmVuZFBvaW50ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci1ob3RzcG90JywgdGhpcy5wb3NpdGlvbkhvdHNwb3RPblJlZ2lzdGVyKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktZ3JhcGhpYy1hc3NvY2lhdGUtaW50ZXJhY3Rpb24nOiBRdGlHcmFwaGljQXNzb2NpYXRlSW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBRdGlIb3RzcG90Q2hvaWNlIH0gZnJvbSAnLi4vLi4vcXRpLWhvdHNwb3QtY2hvaWNlJztcblxuZXhwb3J0IGZ1bmN0aW9uIHBvc2l0aW9uSG90c3BvdHMoXG4gIHNoYXBlOiBzdHJpbmcsXG4gIGNvb3Jkc051bWJlcjogbnVtYmVyW10sXG4gIGltZzogSFRNTEltYWdlRWxlbWVudCxcbiAgaG90c3BvdDogUXRpSG90c3BvdENob2ljZVxuKSB7XG4gIHN3aXRjaCAoc2hhcGUpIHtcbiAgICBjYXNlICdjaXJjbGUnOlxuICAgICAge1xuICAgICAgICBjb25zdCBbY2VudGVyWCwgY2VudGVyWSwgcmFkaXVzXSA9IGNvb3Jkc051bWJlcjtcbiAgICAgICAgY29uc3QgY2VudGVyWFBlciA9IChjZW50ZXJYIC8gaW1nLndpZHRoKSAqIDEwMDtcbiAgICAgICAgY29uc3QgY2VudGVyWVBlciA9IChjZW50ZXJZIC8gaW1nLmhlaWdodCkgKiAxMDA7XG4gICAgICAgIGNvbnN0IHJhZGl1c1BlciA9IChyYWRpdXMgLyBpbWcud2lkdGgpICogMTAwO1xuICAgICAgICBob3RzcG90LnN0eWxlLmxlZnQgPSBjZW50ZXJYUGVyIC0gcmFkaXVzUGVyICsgJyUnO1xuICAgICAgICBob3RzcG90LnN0eWxlLnRvcCA9IGNlbnRlcllQZXIgLSByYWRpdXNQZXIgKyAnJSc7XG4gICAgICAgIGhvdHNwb3Quc3R5bGUud2lkdGggPSBob3RzcG90LnN0eWxlLmhlaWdodCA9IDQgKiByYWRpdXNQZXIgKyAncHgnO1xuICAgICAgICBob3RzcG90LnN0eWxlLmJvcmRlclJhZGl1cyA9IGA5OTk5cHhgO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdyZWN0JzpcbiAgICAgIHtcbiAgICAgICAgY29uc3QgW2xlZnRYLCB0b3BZLCByaWdodFgsIGJvdHRvbVldID0gY29vcmRzTnVtYmVyO1xuICAgICAgICBjb25zdCBsZWZ0WFBlciA9IChsZWZ0WCAvIGltZy53aWR0aCkgKiAxMDA7XG4gICAgICAgIGNvbnN0IHRvcFlQZXIgPSAodG9wWSAvIGltZy5oZWlnaHQpICogMTAwO1xuICAgICAgICBjb25zdCByaWdodFhQZXIgPSAocmlnaHRYIC8gaW1nLndpZHRoKSAqIDEwMDtcbiAgICAgICAgY29uc3QgYm90dG9tWVBlciA9IChib3R0b21ZIC8gaW1nLmhlaWdodCkgKiAxMDA7XG4gICAgICAgIGhvdHNwb3Quc3R5bGUubGVmdCA9IGxlZnRYUGVyICsgJyUnO1xuICAgICAgICBob3RzcG90LnN0eWxlLnRvcCA9IHRvcFlQZXIgKyAnJSc7XG4gICAgICAgIGhvdHNwb3Quc3R5bGUud2lkdGggPSByaWdodFhQZXIgLSBsZWZ0WFBlciArICclJztcbiAgICAgICAgaG90c3BvdC5zdHlsZS5oZWlnaHQgPSBib3R0b21ZUGVyIC0gdG9wWVBlciArICclJztcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAncG9seSc6XG4gICAgICB7XG4gICAgICAgIC8vIGZyb20gYSxiLGMsZCxlLGYgPT4gW3t4OmEsIHk6Yn0se3g6YywgeTpkfSx7eDplLCB5OmZ9XVxuICAgICAgICBjb25zdCBwb2x5Y29vcmRzID0gY29vcmRzTnVtYmVyLnJlZHVjZSgoYWNjLCBjdXJyZW50VmFsdWUsIGN1cnJlbnRJbmRleCwgcG9seUMpID0+IHtcbiAgICAgICAgICBpZiAoY3VycmVudEluZGV4ICUgMiA9PT0gMSkge1xuICAgICAgICAgICAgY29uc3QgbGFzdFZhbCA9IGFjYy5wb3AoKTtcbiAgICAgICAgICAgIGFjY1thY2MubGVuZ3RoXSA9IHsgeDogbGFzdFZhbCwgeTogcG9seUNbY3VycmVudEluZGV4XSB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhY2MucHVzaChjdXJyZW50VmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCBbXSk7XG5cbiAgICAgICAgLy8gY2FsY3VsYXRlIGJvdW5kaW5nIGJveCBieSBmaW5kaW5nIHRoZSBtYXggYXggbWluIGNvb3JkaW5hdGVzIG9mIHggYW5kIHlcbiAgICAgICAgY29uc3QgbGVmdFggPSBNYXRoLm1pbiguLi5wb2x5Y29vcmRzLm1hcChwb2ludCA9PiBwb2ludC54KSk7XG4gICAgICAgIGNvbnN0IHJpZ2h0WCA9IE1hdGgubWF4KC4uLnBvbHljb29yZHMubWFwKHBvaW50ID0+IHBvaW50LngpKTtcbiAgICAgICAgY29uc3QgdG9wWSA9IE1hdGgubWluKC4uLnBvbHljb29yZHMubWFwKHBvaW50ID0+IHBvaW50LnkpKTtcbiAgICAgICAgY29uc3QgYm90dG9tWSA9IE1hdGgubWF4KC4uLnBvbHljb29yZHMubWFwKHBvaW50ID0+IHBvaW50LnkpKTtcblxuICAgICAgICAvLyBjYWxjdWxhdGUgdGhlIHJlbGF0aXZlIGRpc3RhbmNlIGNhdXNlIHdlIHdhbnQgdG8gdXNlIHBlcmNlbnRhZ2VzXG4gICAgICAgIGNvbnN0IGxlZnRYUGVyID0gKGxlZnRYIC8gaW1nLndpZHRoKSAqIDEwMDtcbiAgICAgICAgY29uc3QgdG9wWVBlciA9ICh0b3BZIC8gaW1nLmhlaWdodCkgKiAxMDA7XG4gICAgICAgIGNvbnN0IHJpZ2h0WFBlciA9IChyaWdodFggLyBpbWcud2lkdGgpICogMTAwO1xuICAgICAgICBjb25zdCBib3R0b21ZUGVyID0gKGJvdHRvbVkgLyBpbWcuaGVpZ2h0KSAqIDEwMDtcblxuICAgICAgICAvLyBzZXQgdGhlIGhvdHNwb3Qgb24geCx5IGFuZCBzZXQgdGhlIHdpZHRoIGFuZCBoZWlnaHQgaW4gcGVyY2VudGFnZXNcbiAgICAgICAgaG90c3BvdC5zdHlsZS5sZWZ0ID0gKGxlZnRYIC8gaW1nLndpZHRoKSAqIDEwMCArICclJztcbiAgICAgICAgaG90c3BvdC5zdHlsZS50b3AgPSAodG9wWSAvIGltZy5oZWlnaHQpICogMTAwICsgJyUnO1xuICAgICAgICBob3RzcG90LnN0eWxlLndpZHRoID0gcmlnaHRYUGVyIC0gbGVmdFhQZXIgKyAnJSc7XG4gICAgICAgIGhvdHNwb3Quc3R5bGUuaGVpZ2h0ID0gYm90dG9tWVBlciAtIHRvcFlQZXIgKyAnJSc7XG5cbiAgICAgICAgLy8gYWxsIHRoZSBwb2x5Z29uIHBvaW50cyBzaG91bGQgYmUgY29ycmVjdGVkIGNhdXNlZCB0aGV5IGFyZSBmcm9tXG4gICAgICAgIC8vIGltYWdlIDAsMCBwb2ludCwgYW5kIHNob3VsZCBiZSBmcm9tIHRoZSBob3RzcG90IHBvaW50IHdoaWNoIGFscmVhZHlcbiAgICAgICAgLy8gaGFzIGJlZW4gb2Zmc2V0dGVkIGZyb20gdGhlIGltYWdlIGluIHRoZSBwcmV2aW91cyBmZXcgbGluZXMgb2YgY29kZVxuICAgICAgICAvLyBhbHNvIHRoZSBwb2ludHMgaGF2ZSBhIHJlbGF0aXZlIGRpc3RhbmNlIHRvIHRoZSBpbWFnZSwgYnV0IG5vdyBoYXZlXG4gICAgICAgIC8vIHRvIGhhdmUgYSByZWxhdGl2ZSBkaXN0YW5jZSBmcm9tIHRoZSB3aWR0aCBvZiB0aGUgaG90c3BvdFxuICAgICAgICBjb25zdCBwb2x5Z29uRGF0YSA9IHBvbHljb29yZHMubWFwKHBvaW50ID0+ICh7XG4gICAgICAgICAgeDogKChwb2ludC54IC0gbGVmdFgpIC8gKHJpZ2h0WCAtIGxlZnRYKSkgKiAxMDAsXG4gICAgICAgICAgeTogKChwb2ludC55IC0gdG9wWSkgLyAoYm90dG9tWSAtIHRvcFkpKSAqIDEwMFxuICAgICAgICB9KSk7XG5cbiAgICAgICAgLy8gY3JlYXRlIGNsaXAgcGF0aCBjb29yZGluYXRlIHN0eWxlIGluIHBlcmNlbnRhZ2VzXG4gICAgICAgIGNvbnN0IHBvbHlEID0gcG9seWdvbkRhdGEubWFwKHAgPT4gTWF0aC5yb3VuZChwLngpICsgJyUgJyArIE1hdGgucm91bmQocC55KSArICclJykuam9pbignLCcpO1xuXG4gICAgICAgIC8vIDUwJSAwJSwgMTAwJSA1MCUsIDUwJSAxMDAlLCAwJSA1MCVcbiAgICAgICAgaG90c3BvdC5zdHlsZS5jbGlwUGF0aCA9IGBwb2x5Z29uKCR7cG9seUR9KWA7XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxufVxuIiwgImltcG9ydCB7IGNzcywgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgRHJhZ0Ryb3BJbnRlcmFjdGlvbk1peGluIH0gZnJvbSAnLi4vaW50ZXJuYWwvZHJhZy1kcm9wL2RyYWctZHJvcC1pbnRlcmFjdGlvbi1taXhpbic7XG5pbXBvcnQgeyBRdGlIb3RzcG90Q2hvaWNlIH0gZnJvbSAnLi4vcXRpLWhvdHNwb3QtY2hvaWNlJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1ncmFwaGljLWdhcC1tYXRjaC1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpR3JhcGhpY0dhcE1hdGNoSW50ZXJhY3Rpb24gZXh0ZW5kcyBEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4oXG4gIExpdEVsZW1lbnQsXG4gICdxdGktZ2FwLWltZycsXG4gIGZhbHNlLFxuICAncXRpLWFzc29jaWFibGUtaG90c3BvdCdcbikge1xuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gY3NzYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB9XG4gICAgc2xvdFtuYW1lPSdxdGktZ2FwLWltZyddIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBnYXA6IDFyZW07XG4gICAgfVxuICBgO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGAgPHNsb3Q+PC9zbG90PlxuICAgICAgPHNsb3QgbmFtZT1cInF0aS1nYXAtaW1nXCI+PC9zbG90PmA7XG4gIH1cblxuICBwcml2YXRlIHBvc2l0aW9uSG90c3BvdE9uUmVnaXN0ZXIoZTogQ3VzdG9tRXZlbnQ8bnVsbD4pOiB2b2lkIHtcbiAgICBjb25zdCBpbWcgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpIGFzIEhUTUxJbWFnZUVsZW1lbnQ7XG4gICAgY29uc3QgaG90c3BvdCA9IGUudGFyZ2V0IGFzIFF0aUhvdHNwb3RDaG9pY2U7XG4gICAgY29uc3QgY29vcmRzID0gaG90c3BvdC5nZXRBdHRyaWJ1dGUoJ2Nvb3JkcycpO1xuICAgIGNvbnN0IHNoYXBlID0gaG90c3BvdC5nZXRBdHRyaWJ1dGUoJ3NoYXBlJyk7XG4gICAgY29uc3QgY29vcmRzTnVtYmVyID0gY29vcmRzLnNwbGl0KCcsJykubWFwKHMgPT4gcGFyc2VJbnQocykpO1xuXG4gICAgLy8gcG9zaXRpb25Ib3RzcG90cyhzaGFwZSwgY29vcmRzTnVtYmVyLCBpbWcsIGhvdHNwb3QpO1xuICAgIHN3aXRjaCAoc2hhcGUpIHtcbiAgICAgIGNhc2UgJ2NpcmNsZSc6XG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCBbY2VudGVyWCwgY2VudGVyWSwgcmFkaXVzXSA9IGNvb3Jkc051bWJlcjtcbiAgICAgICAgICBob3RzcG90LnN0eWxlLmxlZnQgPSBjZW50ZXJYIC0gcmFkaXVzICsgJ3B4JztcbiAgICAgICAgICBob3RzcG90LnN0eWxlLnRvcCA9IGNlbnRlclkgLSByYWRpdXMgKyAncHgnO1xuICAgICAgICAgIGhvdHNwb3Quc3R5bGUud2lkdGggPSBob3RzcG90LnN0eWxlLmhlaWdodCA9IDIgKiByYWRpdXMgKyAncHgnO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdyZWN0JzpcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IFtsZWZ0WCwgdG9wWSwgcmlnaHRYLCBib3R0b21ZXSA9IGNvb3Jkc051bWJlcjtcbiAgICAgICAgICBob3RzcG90LnN0eWxlLmxlZnQgPSBsZWZ0WCArICdweCc7XG4gICAgICAgICAgaG90c3BvdC5zdHlsZS50b3AgPSB0b3BZICsgJ3B4JztcbiAgICAgICAgICBob3RzcG90LnN0eWxlLndpZHRoID0gcmlnaHRYIC0gbGVmdFggKyAncHgnO1xuICAgICAgICAgIGhvdHNwb3Quc3R5bGUuaGVpZ2h0ID0gYm90dG9tWSAtIHRvcFkgKyAncHgnO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigncXRpLXJlZ2lzdGVyLWhvdHNwb3QnLCB0aGlzLnBvc2l0aW9uSG90c3BvdE9uUmVnaXN0ZXIpO1xuICB9XG4gIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdxdGktcmVnaXN0ZXItaG90c3BvdCcsIHRoaXMucG9zaXRpb25Ib3RzcG90T25SZWdpc3Rlcik7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWdyYXBoaWMtZ2FwLW1hdGNoLWludGVyYWN0aW9uJzogUXRpR3JhcGhpY0dhcE1hdGNoSW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgQ2hvaWNlcyB9IGZyb20gJy4uL2ludGVybmFsL2Nob2ljZXMvY2hvaWNlcyc7XG5pbXBvcnQgeyBRdGlIb3RzcG90Q2hvaWNlIH0gZnJvbSAnLi4vcXRpLWhvdHNwb3QtY2hvaWNlJztcblxuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHBvc2l0aW9uSG90c3BvdHMgfSBmcm9tICcuLi9pbnRlcm5hbC9ob3RzcG90cy9ob3RzcG90JztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1ncmFwaGljLW9yZGVyLWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlHcmFwaGljT3JkZXJJbnRlcmFjdGlvbiBleHRlbmRzIENob2ljZXMge1xuICBjaG9pY2VPcmRlcmluZzogYm9vbGVhbjtcblxuICAvLyBkbyBub3Qgc2VsZWN0ICggaGlnaGxpZ2h0IGJsdWUsIHRoZSBpbWFnZSlcbiAgLy8gdGFyZ2V0IHRoZSBtYWluIHNsb3QgbWFrZSBpdCByZWxhdGl2ZSBhbmQgZml0IHdpdGggdGhlIGNvbnRlblxuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gW1xuICAgIGNzc2BcbiAgICAgIHNsb3Q6bm90KFtuYW1lPSdwcm9tcHQnXSkge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7IC8qIHF0aS1ob3RzcG90LWNob2ljZSByZWxhdGl2ZSB0byB0aGUgc2xvdCAqL1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgd2lkdGg6IGZpdC1jb250ZW50OyAvKiBob3RzcG90cyBub3Qgc3RyZXRjaGluZyBmdXJ0aGVyIGlmIGltYWdlIGlzIGF0IG1heCBzaXplICovXG4gICAgICB9XG4gICAgICA6OnNsb3R0ZWQoaW1nKSB7XG4gICAgICAgIC8qIGltYWdlIG5vdCBzZWxlY3RhYmxlIGFueW1vcmUgKi9cbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgICAgfVxuICAgIGBcbiAgXTtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8c2xvdCBuYW1lPVwicHJvbXB0XCI+PC9zbG90PlxuICAgICAgPCEtLSBzbG90IGZvciB0aGUgcHJvbXB0IC0tPlxuICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgPCEtLSBzbG90IGZvciB0aGUgaW1hZ2UgYW5kIGhvdHNwb3RzIC0tPlxuICAgIGA7XG4gIH1cblxuICBwcml2YXRlIHNldEhvdHNwb3RPcmRlcihlOiBDdXN0b21FdmVudDx7IGlkZW50aWZpZXI6IHN0cmluZzsgY2hlY2tlZDogYm9vbGVhbiB9Pik6IHZvaWQge1xuICAgIGNvbnN0IHsgaWRlbnRpZmllciB9ID0gZS5kZXRhaWw7XG5cbiAgICBjb25zdCBob3RzcG90ID0gdGhpcy5fY2hvaWNlRWxlbWVudHMuZmluZChlbCA9PiBlbC5nZXRBdHRyaWJ1dGUoJ2lkZW50aWZpZXInKSA9PT0gaWRlbnRpZmllcikgYXMgUXRpSG90c3BvdENob2ljZTtcblxuICAgIGNvbnN0IG1heFNlbGVjdGlvbiA9IHRoaXMuX2Nob2ljZUVsZW1lbnRzLmxlbmd0aDtcbiAgICBpZiAoIXRoaXMuY2hvaWNlT3JkZXJpbmcpIHtcbiAgICAgIHRoaXMuY2hvaWNlT3JkZXJpbmcgPSB0cnVlO1xuICAgICAgaWYgKGhvdHNwb3Qub3JkZXIgPT0gbnVsbCkge1xuICAgICAgICBpZiAoKHRoaXMuX2Nob2ljZUVsZW1lbnRzIGFzIFF0aUhvdHNwb3RDaG9pY2VbXSkuZmlsdGVyKGkgPT4gaS5vcmRlciA+IDApLmxlbmd0aCA+PSBtYXhTZWxlY3Rpb24pIHtcbiAgICAgICAgICB0aGlzLmNob2ljZU9yZGVyaW5nID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuOyAvLyBkb24ndCBkbyBhbnl0aGluZyBpZiB1c2VyIGFscmVhZHkgc2VsZWN0ZWQgNSBpbWFnZXMuXG4gICAgICAgIH1cbiAgICAgICAgaG90c3BvdC5vcmRlciA9ICh0aGlzLl9jaG9pY2VFbGVtZW50cyBhcyBRdGlIb3RzcG90Q2hvaWNlW10pLmZpbHRlcihpID0+ICEhaS5vcmRlcikubGVuZ3RoICsgMTtcbiAgICAgICAgdGhpcy5jaG9pY2VPcmRlcmluZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAodGhpcy5fY2hvaWNlRWxlbWVudHMgYXMgUXRpSG90c3BvdENob2ljZVtdKS5mb3JFYWNoKGhvdHNwb3QgPT4ge1xuICAgICAgICAgIGlmIChob3RzcG90Lm9yZGVyID4gaG90c3BvdC5vcmRlcikge1xuICAgICAgICAgICAgaG90c3BvdC5vcmRlci0tO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaG90c3BvdDtcbiAgICAgICAgfSk7XG4gICAgICAgIGhvdHNwb3Qub3JkZXIgPSBudWxsO1xuICAgICAgfVxuICAgICAgdGhpcy5jaG9pY2VPcmRlcmluZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcG9zaXRpb25Ib3RzcG90T25SZWdpc3RlcihlOiBDdXN0b21FdmVudDxRdGlIb3RzcG90Q2hvaWNlPik6IHZvaWQge1xuICAgIGNvbnN0IGltZyA9IHRoaXMucXVlcnlTZWxlY3RvcignaW1nJykgYXMgSFRNTEltYWdlRWxlbWVudDtcbiAgICBjb25zdCBob3RzcG90ID0gZS50YXJnZXQgYXMgUXRpSG90c3BvdENob2ljZTtcbiAgICBjb25zdCBjb29yZHMgPSBob3RzcG90LmdldEF0dHJpYnV0ZSgnY29vcmRzJyk7XG4gICAgY29uc3Qgc2hhcGUgPSBob3RzcG90LmdldEF0dHJpYnV0ZSgnc2hhcGUnKTtcbiAgICBjb25zdCBjb29yZHNOdW1iZXIgPSBjb29yZHMuc3BsaXQoJywnKS5tYXAocyA9PiBwYXJzZUludChzKSk7XG5cbiAgICBwb3NpdGlvbkhvdHNwb3RzKHNoYXBlLCBjb29yZHNOdW1iZXIsIGltZywgaG90c3BvdCk7XG4gIH1cblxuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigncXRpLWNob2ljZS1lbGVtZW50LXNlbGVjdGVkJywgdGhpcy5zZXRIb3RzcG90T3JkZXIpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigncXRpLXJlZ2lzdGVyLWNob2ljZScsIHRoaXMucG9zaXRpb25Ib3RzcG90T25SZWdpc3Rlcik7XG4gIH1cbiAgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3F0aS1jaG9pY2UtZWxlbWVudC1zZWxlY3RlZCcsIHRoaXMuc2V0SG90c3BvdE9yZGVyKTtcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci1jaG9pY2UnLCB0aGlzLnBvc2l0aW9uSG90c3BvdE9uUmVnaXN0ZXIpO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1ncmFwaGljLW9yZGVyLWludGVyYWN0aW9uJzogUXRpR3JhcGhpY09yZGVySW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IENob2ljZXMgfSBmcm9tICcuLi9pbnRlcm5hbC9jaG9pY2VzL2Nob2ljZXMnO1xuaW1wb3J0IHsgcG9zaXRpb25Ib3RzcG90cyB9IGZyb20gJy4uL2ludGVybmFsL2hvdHNwb3RzL2hvdHNwb3QnO1xuaW1wb3J0IHsgUXRpSG90c3BvdENob2ljZSB9IGZyb20gJy4uL3F0aS1ob3RzcG90LWNob2ljZSc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktaG90c3BvdC1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpSG90c3BvdEludGVyYWN0aW9uIGV4dGVuZHMgQ2hvaWNlcyB7XG4gIC8vIGRvIG5vdCBzZWxlY3QgKCBoaWdobGlnaHQgYmx1ZSwgdGhlIGltYWdlKVxuICAvLyB0YXJnZXQgdGhlIG1haW4gc2xvdCBtYWtlIGl0IHJlbGF0aXZlIGFuZCBmaXQgd2l0aCB0aGUgY29udGVuXG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBbXG4gICAgY3NzYFxuICAgICAgc2xvdDpub3QoW25hbWU9J3Byb21wdCddKSB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgLyogcXRpLWhvdHNwb3QtY2hvaWNlIHJlbGF0aXZlIHRvIHRoZSBzbG90ICovXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB3aWR0aDogZml0LWNvbnRlbnQ7IC8qIGhvdHNwb3RzIG5vdCBzdHJldGNoaW5nIGZ1cnRoZXIgaWYgaW1hZ2UgaXMgYXQgbWF4IHNpemUgKi9cbiAgICAgIH1cbiAgICAgIDo6c2xvdHRlZChpbWcpIHtcbiAgICAgICAgLyogaW1hZ2Ugbm90IHNlbGVjdGFibGUgYW55bW9yZSAqL1xuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgICAgIC8qIHdpZHRoOjEwMCU7ICovXG4gICAgICB9XG4gICAgYFxuICBdO1xuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8c2xvdCBuYW1lPVwicHJvbXB0XCI+PC9zbG90PlxuICAgICAgPCEtLSBzbG90IGZvciB0aGUgcHJvbXB0IC0tPlxuICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgPCEtLSBzbG90IGZvciB0aGUgaW1hZ2UgYW5kIGhvdHNwb3RzIC0tPlxuICAgIGA7XG4gIH1cblxuICBwcml2YXRlIHBvc2l0aW9uSG90c3BvdE9uUmVnaXN0ZXIoZTogQ3VzdG9tRXZlbnQ8UXRpSG90c3BvdENob2ljZT4pOiB2b2lkIHtcbiAgICBjb25zdCBpbWcgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpIGFzIEhUTUxJbWFnZUVsZW1lbnQ7XG4gICAgY29uc3QgaG90c3BvdCA9IGUudGFyZ2V0IGFzIFF0aUhvdHNwb3RDaG9pY2U7XG4gICAgY29uc3QgY29vcmRzID0gaG90c3BvdC5nZXRBdHRyaWJ1dGUoJ2Nvb3JkcycpO1xuICAgIGNvbnN0IHNoYXBlID0gaG90c3BvdC5nZXRBdHRyaWJ1dGUoJ3NoYXBlJyk7XG4gICAgY29uc3QgY29vcmRzTnVtYmVyID0gY29vcmRzLnNwbGl0KCcsJykubWFwKHMgPT4gcGFyc2VJbnQocykpO1xuXG4gICAgcG9zaXRpb25Ib3RzcG90cyhzaGFwZSwgY29vcmRzTnVtYmVyLCBpbWcsIGhvdHNwb3QpO1xuICB9XG5cbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci1jaG9pY2UnLCB0aGlzLnBvc2l0aW9uSG90c3BvdE9uUmVnaXN0ZXIpO1xuICB9XG4gIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdxdGktcmVnaXN0ZXItY2hvaWNlJywgdGhpcy5wb3NpdGlvbkhvdHNwb3RPblJlZ2lzdGVyKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktaG90c3BvdC1pbnRlcmFjdGlvbic6IFF0aUhvdHNwb3RJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IGh0bWwsIExpdEVsZW1lbnQsIFByb3BlcnR5VmFsdWVzIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IERyYWdEcm9wSW50ZXJhY3Rpb25NaXhpbiB9IGZyb20gJy4uL2ludGVybmFsL2RyYWctZHJvcC9kcmFnLWRyb3AtaW50ZXJhY3Rpb24tbWl4aW4nO1xuXG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSwgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyB1bnNhZmVIVE1MIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvdW5zYWZlLWh0bWwuanMnO1xuaW1wb3J0IHsgUmVzcG9uc2VJbnRlcmFjdGlvbiB9IGZyb20gJy4uLy4uL2ludGVybmFsL2V4cHJlc3Npb24tcmVzdWx0JztcbmltcG9ydCAnLi4vcXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZSc7XG5pbXBvcnQgeyBRdGlTaW1wbGVBc3NvY2lhYmxlQ2hvaWNlIH0gZnJvbSAnLi4vcXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZSc7XG5cbmludGVyZmFjZSBDb2x1bW4ge1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBSb3cge1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIGlzQ2hlY2tlZDogYm9vbGVhbjtcbn1cblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1tYXRjaC1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpTWF0Y2hJbnRlcmFjdGlvbiBleHRlbmRzIERyYWdEcm9wSW50ZXJhY3Rpb25NaXhpbihcbiAgTGl0RWxlbWVudCxcbiAgJ3F0aS1zaW1wbGUtbWF0Y2gtc2V0OmZpcnN0LW9mLXR5cGUgcXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZScsXG4gIGZhbHNlLFxuICAncXRpLXNpbXBsZS1tYXRjaC1zZXQ6bGFzdC1vZi10eXBlIHF0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UnXG4pIHtcbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IFtdO1xuICByb3dzOiBRdGlTaW1wbGVBc3NvY2lhYmxlQ2hvaWNlW107XG4gIGNvbHM6IFF0aVNpbXBsZUFzc29jaWFibGVDaG9pY2VbXTtcbiAgbGFzdENoZWNrZWRSYWRpbzogSFRNTElucHV0RWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gIEBzdGF0ZSgpIHJlc3BvbnNlID0gW107XG4gIEBzdGF0ZSgpIGNvcnJlY3RPcHRpb25zOiBzdHJpbmdbXSA9IFtdO1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ3Jlc3BvbnNlLWlkZW50aWZpZXInIH0pIHJlc3BvbnNlSWRlbnRpZmllcjogc3RyaW5nID0gJyc7XG5cbiAgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLnJvd3MgPSBBcnJheS5mcm9tPFF0aVNpbXBsZUFzc29jaWFibGVDaG9pY2U+KFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHdjL25vLWNoaWxkLXRyYXZlcnNhbC1pbi1jb25uZWN0ZWRjYWxsYmFja1xuICAgICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsKCdxdGktc2ltcGxlLW1hdGNoLXNldDpmaXJzdC1vZi10eXBlIHF0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UnKVxuICAgICk7XG4gICAgdGhpcy5jb2xzID0gQXJyYXkuZnJvbTxRdGlTaW1wbGVBc3NvY2lhYmxlQ2hvaWNlPihcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB3Yy9uby1jaGlsZC10cmF2ZXJzYWwtaW4tY29ubmVjdGVkY2FsbGJhY2tcbiAgICAgIHRoaXMucXVlcnlTZWxlY3RvckFsbCgncXRpLXNpbXBsZS1tYXRjaC1zZXQ6bGFzdC1vZi10eXBlIHF0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UnKVxuICAgICk7XG5cbiAgICB0aGlzLnJlc3BvbnNlID0gW107XG4gIH1cblxuICBoYW5kbGVSYWRpb0NsaWNrID0gZSA9PiB7XG4gICAgY29uc3QgcmFkaW8gPSBlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGlmICh0aGlzLmxhc3RDaGVja2VkUmFkaW8gPT09IHJhZGlvKSB7XG4gICAgICByYWRpby5jaGVja2VkID0gZmFsc2U7XG4gICAgICB0aGlzLmxhc3RDaGVja2VkUmFkaW8gPSBudWxsO1xuICAgICAgdGhpcy5oYW5kbGVSYWRpb0NoYW5nZShlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sYXN0Q2hlY2tlZFJhZGlvID0gcmFkaW87XG4gICAgfVxuICB9O1xuXG4gIGhhbmRsZVJhZGlvQ2hhbmdlID0gZSA9PiB7XG4gICAgY29uc3QgY2hlY2tib3ggPSBlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGNvbnN0IHZhbHVlID0gY2hlY2tib3gudmFsdWU7XG4gICAgY29uc3QgbmFtZSA9IGNoZWNrYm94Lm5hbWU7ICAgIFxuICAgIGNvbnN0IHR5cGUgPSBjaGVja2JveC50eXBlO1xuICAgIGlmIChjaGVja2JveC5jaGVja2VkKSB7XG4gICAgICBpZiAoIXRoaXMucmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy5yZXNwb25zZSA9IFt2YWx1ZV07XG4gICAgICB9XG4gICAgICBlbHNlIGlmICh0aGlzLnJlc3BvbnNlLmluZGV4T2YodmFsdWUpID09PSAtMSkgeyAgICBcbiAgICAgICAgaWYgKHR5cGUgPT09ICdyYWRpbycpIHtcbiAgICAgICAgICB0aGlzLnJlc3BvbnNlID0gdGhpcy5yZXNwb25zZS5maWx0ZXIodiA9PiB2LmluZGV4T2YobmFtZSkgPT09IC0xKTtcbiAgICAgICAgfSAgIFxuICAgICAgICB0aGlzLnJlc3BvbnNlLnB1c2godmFsdWUpO1xuICAgICAgfSAgICAgIFxuICAgICAgdGhpcy5sYXN0Q2hlY2tlZFJhZGlvID0gY2hlY2tib3g7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVzcG9uc2UgPSB0aGlzLnJlc3BvbnNlLmZpbHRlcih2ID0+IHYgIT09IHZhbHVlKTtcbiAgICAgIHRoaXMubGFzdENoZWNrZWRSYWRpbyA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50PFJlc3BvbnNlSW50ZXJhY3Rpb24+KCdxdGktaW50ZXJhY3Rpb24tcmVzcG9uc2UnLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICByZXNwb25zZUlkZW50aWZpZXI6IHRoaXMucmVzcG9uc2VJZGVudGlmaWVyLFxuICAgICAgICAgIHJlc3BvbnNlOiB0aGlzLnJlc3BvbnNlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfTtcblxuXG4gIHNldCBjb3JyZWN0UmVzcG9uc2UocmVzcG9uc2VWYWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pIHsgICAgXG4gICAgaWYgKHJlc3BvbnNlVmFsdWUgPT09ICcnKSB7XG4gICAgICB0aGlzLmNvcnJlY3RPcHRpb25zID0gW107XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJlc3BvbnNlVmFsdWUpKSB7XG4gICAgICB0aGlzLmNvcnJlY3RPcHRpb25zID0gcmVzcG9uc2VWYWx1ZTtcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgaWYgKCF0aGlzLmNsYXNzTGlzdC5jb250YWlucygncXRpLW1hdGNoLXRhYnVsYXInKSkge1xuICAgICAgcmV0dXJuIGh0bWxgPHNsb3QgbmFtZT1cInByb21wdFwiPjwvc2xvdD4gPHNsb3Q+PC9zbG90PmA7XG4gICAgfVxuICAgIHJldHVybiBodG1sYFxuICAgICAgPHNsb3QgbmFtZT1cInByb21wdFwiPjwvc2xvdD5cbiAgICAgIDx0YWJsZT5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0ZD48L3RkPlxuICAgICAgICAgICR7dGhpcy5jb2xzLm1hcCgoY29sLCBpKSA9PiBodG1sYDx0aCBwYXJ0PVwici1oZWFkZXJcIj4ke3Vuc2FmZUhUTUwoY29sLmlubmVySFRNTCl9PC90aD5gKX1cbiAgICAgICAgPC90cj5cblxuICAgICAgICAke3RoaXMucm93cy5tYXAoXG4gICAgICAgICAgKHJvdywgckluZGV4KSA9PlxuICAgICAgICAgICAgaHRtbGA8dHI+XG4gICAgICAgICAgICAgIDx0ZCBwYXJ0PVwiYy1oZWFkZXJcIj4ke3Vuc2FmZUhUTUwocm93LmlubmVySFRNTCl9PC90ZD5cbiAgICAgICAgICAgICAgJHt0aGlzLmNvbHMubWFwKChjb2wsIGNJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd0lkID0gcm93LmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbElkID0gY29sLmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYCR7cm93SWR9ICR7Y29sSWR9YDtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZEluUm93Q291bnQgPSB0aGlzLnJlc3BvbnNlLmZpbHRlcih2ID0+IHYuc3BsaXQoJyAnKVswXSA9PT0gcm93SWQpLmxlbmd0aCB8fCAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoZWNrZWQgPSB0aGlzLnJlc3BvbnNlLmluY2x1ZGVzKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJ0ID0gYHJiICR7Y2hlY2tlZCA/ICdyYi1jaGVja2VkJyA6ICcnfSAke3RoaXMuY29ycmVjdE9wdGlvbnMuaW5jbHVkZXModmFsdWUpID8gJ3JiLWNvcnJlY3QnIDogJyd9YDtcbiAgICAgICAgICAgICAgICAvLyBkaXNhYmxlIGlmIG1hdGNoIG1heCBpcyBncmVhdGVyIHRoYW4gMSBhbmQgbWF4IGlzIHJlYWNoZWRcbiAgICAgICAgICAgICAgICBjb25zdCBkaXNhYmxlID0gcm93Lm1hdGNoTWF4ID09PSAxID8gZmFsc2UgOiBzZWxlY3RlZEluUm93Q291bnQgPj0gcm93Lm1hdGNoTWF4ICYmICFjaGVja2VkO1xuICAgICAgICAgICAgICAgIHJldHVybiBodG1sYDx0ZD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0eXBlPSR7cm93Lm1hdGNoTWF4ID09PSAxID8gJ3JhZGlvJyA6IGBjaGVja2JveGB9ICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cImlkXCJcbiAgICAgICAgICAgICAgICAgICAgcGFydD0ke3BhcnR9ICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgbmFtZT0ke3Jvd0lkfVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT0ke3ZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAuZGlzYWJsZWQ9JHtkaXNhYmxlfVxuICAgICAgICAgICAgICAgICAgICBAY2hhbmdlPSR7ZSA9PiB0aGlzLmhhbmRsZVJhZGlvQ2hhbmdlKGUpfVxuICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHtlID0+IChyb3cubWF0Y2hNYXggPT09IDEgPyB0aGlzLmhhbmRsZVJhZGlvQ2xpY2soZSkgOiBudWxsKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC90ZD5gO1xuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIDwvdHI+YFxuICAgICAgICApfVxuICAgICAgPC90YWJsZT5cbiAgICBgO1xuICB9XG59XG5cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLW1hdGNoLWludGVyYWN0aW9uJzogUXRpTWF0Y2hJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IGh0bWwsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbi8vIFRISVMgSVMgTk9UIFVTRUQgSU4gVEFCVUxBUiBNQVRDSCBJTlRFUkFDVElPTlxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UnKVxuLy8gdHNsaW50OmRpc2FibGU6IGluZGVudFxuZXhwb3J0IGNsYXNzIFF0aVNpbXBsZUFzc29jaWFibGVDaG9pY2UgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgLyoqIHRoZSBtaW5pbWFsIG51bWJlciBvZiBzZWxlY3Rpb25zIGEgY2FuZGlkYXRlIG11c3QgbWFrZSAqL1xuICBAcHJvcGVydHkoe1xuICAgIHR5cGU6IE51bWJlcixcbiAgICBhdHRyaWJ1dGU6ICdtYXRjaC1taW4nXG4gIH0pXG4gIHB1YmxpYyBtYXRjaE1pbjogbnVtYmVyID0gMDtcblxuICAvKiogdGhlIG1heGltdW0gbnVtYmVyIG9mIHNlbGVjdGlvbnMgYSBjYW5kaWRhdGUgbXVzdCBtYWtlLCB0aGUgb3RoZXIgb3B0aW9ucyB3aWxsIGJlIGRpc2FibGVkIHdoZW4gbWF4IG9wdGlvbnMgaXMgY2hlY2tlZCAqL1xuICBAcHJvcGVydHkoe1xuICAgIHR5cGU6IE51bWJlcixcbiAgICBhdHRyaWJ1dGU6ICdtYXRjaC1tYXgnXG4gIH0pXG4gIHB1YmxpYyBtYXRjaE1heDogbnVtYmVyID0gMTtcblxuICBAcHJvcGVydHkoe1xuICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgYXR0cmlidXRlOiAnZml4ZWQnXG4gIH0pXG4gIHB1YmxpYyBmaXhlZCA9IGZhbHNlO1xuXG4gIC8vIHBrOiBUaGlzIG5lZWRzIHNvbWUgZXhwbGFuYXRpb25cbiAgLy8gaW4gdGhlIGFzc29jaWF0ZSBpbnRlcmFjdGlvbiB0aGVyZSBpcyBhIHNwZWNpYWwgc2xvdCBmb3IgdGhlc2UgcXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZXNcbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgnc2xvdCcsICdxdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlJyk7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ3BhcnQnLCAncXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZScpO1xuICB9XG5cbiAgLy8gcGs6IFRoaXMgbmVlZHMgc29tZSBleHBsYW5hdGlvblxuICAvLyBpbiBxdGktbWF0Y2gtaW50ZXJhY3Rpb24sIHF0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UgaXMgdXNlZCB0byBkZW5vdGUgdGhlXG4gIC8vIGRyYWdnYWJsZSwgYnV0IGFsc28gdGhlIGRyb3BwYWJsZS4gV0VJUkQuLiBidXQgbGV0cyBkZWFsIHdpdGggaXQuXG4gIC8vIFNvIHdlIGhhdmUgYSBzbG90IGZvciB3aGVuZXZlciBhbm90aGVyIHF0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UgaXMgZHJvcHBlZCBpbiBoZXJlLlxuICAvLyBBbmQgd2UgaGF2ZSBzbG90IGZvciBjb250ZW50IGxpa2UgaW4gdGhpcyBhc3NvY2lhdGUgaW50ZXJhY3Rpb25cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgPHNsb3QgbmFtZT1cInF0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2VcIj48L3Nsb3Q+XG4gICAgYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlJzogUXRpU2ltcGxlQXNzb2NpYWJsZUNob2ljZTtcbiAgfVxufVxuIiwgImltcG9ydCB7IGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgSW50ZXJhY3Rpb24gfSBmcm9tICcuLi9pbnRlcm5hbC9pbnRlcmFjdGlvbi9pbnRlcmFjdGlvbic7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktbWVkaWEtaW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aU1lZGlhSW50ZXJhY3Rpb24gZXh0ZW5kcyBJbnRlcmFjdGlvbiB7XG4gIHZhbHVlID0gMDtcbiAgcmVzZXQoKSB7XG4gICAgLy8gdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG4gIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xuICAgIC8vIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBzZXQgcmVzcG9uc2UodmFsOiB1bmRlZmluZWQpIHtcbiAgICAvLyB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICBzdGF0aWMgb3ZlcnJpZGUgZ2V0IHByb3BlcnRpZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkludGVyYWN0aW9uLnByb3BlcnRpZXMsXG4gICAgICAuLi57XG4gICAgICAgIHN0ZXA6IHtcbiAgICAgICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICAgICAgYXR0cmlidXRlOiAnc3RlcCcsXG4gICAgICAgICAgZGVmYXVsdDogMTBcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gW2Nzc2BgXTtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgIDxzbG90IG5hbWU9XCJwcm9tcHRcIj48L3Nsb3Q+XG4gICAgICA8c2xvdD48L3Nsb3Q+YDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIC8vIGdldCBhdWRpbywgdmlkZW8gb2Ygb2JqZWN0IHRhZy5cbiAgICBjb25zdCBtZWRpYU9iamVjdCA9IHRoaXMucXVlcnlTZWxlY3RvcignYXVkaW8nKSB8fCB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3ZpZGVvJykgfHwgdGhpcy5xdWVyeVNlbGVjdG9yKCdvYmplY3QnKTtcbiAgICBpZiAobWVkaWFPYmplY3QpIHtcbiAgICAgIC8vIGxpc3RlbiB0byBlbmRlZCBldmVudFxuICAgICAgbWVkaWFPYmplY3QuYWRkRXZlbnRMaXN0ZW5lcignZW5kZWQnLCAoKSA9PiB7XG4gICAgICAgIC8vIHNldCB2YWx1ZSB0byAwXG4gICAgICAgIHRoaXMudmFsdWUrKztcbiAgICAgICAgdGhpcy5zYXZlUmVzcG9uc2UodGhpcy52YWx1ZS50b1N0cmluZygpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktbWVkaWEtaW50ZXJhY3Rpb24nOiBRdGlNZWRpYUludGVyYWN0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sLCBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgRHJhZ0Ryb3BJbnRlcmFjdGlvbk1peGluIH0gZnJvbSAnLi4vaW50ZXJuYWwvZHJhZy1kcm9wL2RyYWctZHJvcC1pbnRlcmFjdGlvbi1taXhpbic7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktb3JkZXItaW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aU9yZGVySW50ZXJhY3Rpb24gZXh0ZW5kcyBEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4oTGl0RWxlbWVudCwgYHF0aS1zaW1wbGUtY2hvaWNlYCwgdHJ1ZSwgJ2Ryb3AtbGlzdCcpIHtcbiAgY2hpbGRyZW5NYXA6IEVsZW1lbnRbXTtcbiAgcHJpdmF0ZSBfY2xhc3NOYW1lczogc3RyaW5nO1xuICBwcml2YXRlIF9vcmllbnRhdGlvbjogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJztcblxuICBwdWJsaWMgc3RhdGljIGxheW91dENsYXNzID0gWydxdGktY2hvaWNlcy10b3AnLCAncXRpLWNob2ljZXMtYm90dG9tJywgJ3F0aS1jaG9pY2VzLWxlZnQnLCAncXRpLWNob2ljZXMtcmlnaHQnXTtcblxuICAvKiogb3JpZW50YXRpb24gb2YgY2hvaWNlcyAqL1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSlcbiAgcHVibGljIG9yaWVudGF0aW9uOiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnO1xuXG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBbXG4gICAgY3NzYFxuICAgICAgW3BhcnQ9J2RyYWdzJ10ge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICAgICAgZmxleDogMTtcbiAgICAgIH1cblxuICAgICAgW3BhcnQ9J2Ryb3BzJ10ge1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLWF1dG8tZmxvdzogY29sdW1uO1xuICAgICAgICBncmlkLWF1dG8tY29sdW1uczogMWZyO1xuICAgICAgfVxuXG4gICAgICA6aG9zdChbb3JpZW50YXRpb249J2hvcml6b250YWwnXSkgW3BhcnQ9J2RyYWdzJ10ge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgfVxuICAgICAgOmhvc3QoW29yaWVudGF0aW9uPSdob3Jpem9udGFsJ10pIFtwYXJ0PSdkcm9wcyddIHtcbiAgICAgICAgZ3JpZC1hdXRvLWZsb3c6IGNvbHVtbjtcbiAgICAgIH1cbiAgICAgIDpob3N0KFtvcmllbnRhdGlvbj0ndmVydGljYWwnXSkgW3BhcnQ9J2RyYWdzJ10ge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgfVxuICAgICAgOmhvc3QoW29yaWVudGF0aW9uPSd2ZXJ0aWNhbCddKSBbcGFydD0nZHJvcHMnXSB7XG4gICAgICAgIGdyaWQtYXV0by1mbG93OiByb3c7XG4gICAgICB9XG5cbiAgICAgIFtwYXJ0PSdkcm9wLWxpc3QnXSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgfVxuXG4gICAgICBbcGFydD0nY29udGFpbmVyJ10ge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBnYXA6IDAuNXJlbTtcbiAgICAgIH1cbiAgICAgIDpob3N0KC5xdGktY2hvaWNlcy10b3ApIFtwYXJ0PSdjb250YWluZXInXSB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICB9XG4gICAgICA6aG9zdCgucXRpLWNob2ljZXMtYm90dG9tKSBbcGFydD0nY29udGFpbmVyJ10ge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XG4gICAgICB9XG4gICAgICA6aG9zdCgucXRpLWNob2ljZXMtbGVmdCkgW3BhcnQ9J2NvbnRhaW5lciddIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgIH1cbiAgICAgIDpob3N0KC5xdGktY2hvaWNlcy1yaWdodCkgW3BhcnQ9J2NvbnRhaW5lciddIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlO1xuICAgICAgfVxuICAgIGBcbiAgXTtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgIDxzbG90IG5hbWU9XCJwcm9tcHRcIj4gPC9zbG90PlxuICAgICAgPGRpdiBwYXJ0PVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxzbG90IHBhcnQ9XCJkcmFnc1wiPiA8L3Nsb3Q+XG4gICAgICAgIDxkaXYgcGFydD1cImRyb3BzXCI+XG4gICAgICAgICAgJHtBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbCgncXRpLXNpbXBsZS1jaG9pY2UnKSkubWFwKFxuICAgICAgICAgICAgKF8sIGkpID0+IGh0bWxgPGRyb3AtbGlzdCBwYXJ0PVwiZHJvcC1saXN0XCIgaWRlbnRpZmllcj1cImRyb3BsaXN0JHtpfVwiPjwvZHJvcC1saXN0PmBcbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PmA7XG4gIH1cblxuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIC8vIElORlJJTkdFTUVOVC4uXG4gICAgLy8gUEs6IGlmIGNoaWxkcmVuIGFyZSBkcm9wcGVkIGludG8gc2hhZG93ZG9tLCBzdHlsaW5nIGlzIGxvc3QsIHNvIHdlIGFkZCBhIHBhcnQgc2VsZWN0b3Igb24gYWxsIGNoaWxkcmVuXG4gICAgLy8gSSB0aGV5IGdldCBsb3N0IGludG8gc2hhZG93IGRvbSBhZnRlciBkcm9wcGVkLCB0aGV5IGNhbiBzdGlsbCBiZSBzdHlsZWQgdmlhIGxpZ2h0ZG9tIHBhcnQgc2VsZWN0b3JzXG4gICAgdGhpcy5jaGlsZHJlbk1hcCA9IEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsKCdxdGktc2ltcGxlLWNob2ljZScpKTtcbiAgICB0aGlzLmNoaWxkcmVuTWFwLmZvckVhY2goZWwgPT4gZWwuc2V0QXR0cmlidXRlKCdwYXJ0JywgJ3F0aS1zaW1wbGUtY2hvaWNlJykpO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1vcmRlci1pbnRlcmFjdGlvbic6IFF0aU9yZGVySW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50LCBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuXG5leHBvcnQgY2xhc3MgUXRpU1Bvc2l0aW9uT2JqZWN0SW50ZXJhY3Rpb24gZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IFtcbiAgICBjc3NgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgfVxuICAgICAgOjpzbG90dGVkKGltZykge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGN1cnNvcjogbW92ZTtcbiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgICAgfVxuICAgIGBcbiAgXTtcbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktcG9zaXRpb24tb2JqZWN0LWludGVyYWN0aW9uJywgUXRpU1Bvc2l0aW9uT2JqZWN0SW50ZXJhY3Rpb24pO1xuIiwgImltcG9ydCB7IExpdEVsZW1lbnQsIGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLXBvc2l0aW9uLW9iamVjdC1zdGFnZScpXG5leHBvcnQgY2xhc3MgUXRpUG9zaXRpb25PYmplY3RTdGFnZSBleHRlbmRzIExpdEVsZW1lbnQge1xuICBjaG9pY2VPcmRlcmluZzogYm9vbGVhbjtcbiAgc3RhcnRYOiBhbnk7XG4gIHN0YXJ0WTogYW55O1xuICBkcmFnRWxlbWVudDogYW55O1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdD48L3Nsb3Q+YDtcbiAgfVxuXG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBbXG4gICAgY3NzYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIH1cbiAgICBgXG4gIF07XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnJlbW92ZU1vdmVMaXN0ZW5lciA9IHRoaXMucmVtb3ZlTW92ZUxpc3RlbmVyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5kcmFnRWxlbWVudEhhbmRsZXIgPSB0aGlzLmRyYWdFbGVtZW50SGFuZGxlci5iaW5kKHRoaXMpO1xuICB9XG5cbiAgLy8gRGVmaW5lIGEgZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBtb3VzZW1vdmUgZXZlbnQgb24gdGhlIGRyYWdnYWJsZSBlbGVtZW50XG4gIGRyYWdFbGVtZW50SGFuZGxlcihldmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIHRoZSBtb3VzZSBoYXMgbW92ZWQgc2luY2UgdGhlIGxhc3QgZXZlbnRcbiAgICBjb25zdCBkZWx0YVggPSBldmVudC5jbGllbnRYIC0gdGhpcy5zdGFydFg7XG4gICAgY29uc3QgZGVsdGFZID0gZXZlbnQuY2xpZW50WSAtIHRoaXMuc3RhcnRZO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgZHJhZ2dhYmxlIGVsZW1lbnRcbiAgICB0aGlzLmRyYWdFbGVtZW50LnN0eWxlLmxlZnQgPSB0aGlzLmRyYWdFbGVtZW50Lm9mZnNldExlZnQgKyBkZWx0YVggKyAncHgnO1xuICAgIHRoaXMuZHJhZ0VsZW1lbnQuc3R5bGUudG9wID0gdGhpcy5kcmFnRWxlbWVudC5vZmZzZXRUb3AgKyBkZWx0YVkgKyAncHgnO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgbW91c2VcbiAgICB0aGlzLnN0YXJ0WCA9IGV2ZW50LmNsaWVudFg7XG4gICAgdGhpcy5zdGFydFkgPSBldmVudC5jbGllbnRZO1xuICB9XG5cbiAgb3ZlcnJpZGUgZmlyc3RVcGRhdGVkKGEpOiB2b2lkIHtcbiAgICBzdXBlci5maXJzdFVwZGF0ZWQoYSk7XG5cbiAgICAvLyBHZXQgdGhlIGRyYWdnYWJsZSBhbmQgZHJvcCB6b25lIGVsZW1lbnRzXG4gICAgdGhpcy5kcmFnRWxlbWVudCA9IHRoaXMucXVlcnlTZWxlY3RvcigncXRpLXBvc2l0aW9uLW9iamVjdC1pbnRlcmFjdGlvbj5pbWcnKTtcbiAgICAvLyBjb25zdCBjYW52YXNFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhbnZhcycpO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSB2YXJpYWJsZXMgZm9yIHRoZSBzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgZHJhZ2dhYmxlIGVsZW1lbnRcbiAgICB0aGlzLnN0YXJ0WCA9IDA7XG4gICAgdGhpcy5zdGFydFkgPSAwO1xuXG4gICAgLy8gQWRkIGEgbW91c2Vkb3duIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBkcmFnZ2FibGUgZWxlbWVudFxuICAgIHRoaXMuZHJhZ0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAvLyBTYXZlIHRoZSBzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgbW91c2VcbiAgICAgIHRoaXMuc3RhcnRYID0gZXZlbnQuY2xpZW50WDtcbiAgICAgIHRoaXMuc3RhcnRZID0gZXZlbnQuY2xpZW50WTtcblxuICAgICAgLy8gQWRkIGEgbW91c2Vtb3ZlIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBkb2N1bWVudFxuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5kcmFnRWxlbWVudEhhbmRsZXIsIHRydWUpO1xuICAgIH0pO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLnJlbW92ZU1vdmVMaXN0ZW5lcik7XG4gIH1cblxuICByZW1vdmVNb3ZlTGlzdGVuZXIoZXZlbnQpIHtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLmRyYWdFbGVtZW50SGFuZGxlciwgdHJ1ZSk7XG4gIH1cblxuICBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuZHJhZ0VsZW1lbnRIYW5kbGVyKTtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5yZW1vdmVNb3ZlTGlzdGVuZXIpO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1wb3NpdGlvbi1vYmplY3Qtc3RhZ2UnOiBRdGlQb3NpdGlvbk9iamVjdFN0YWdlO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHJlcGVhdCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3JlcGVhdC5qcyc7XG5pbXBvcnQgeyBzdHlsZU1hcCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3N0eWxlLW1hcC5qcyc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvbiB9IGZyb20gJy4uL2ludGVybmFsL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1zZWxlY3QtcG9pbnQtaW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aVNlbGVjdFBvaW50SW50ZXJhY3Rpb24gZXh0ZW5kcyBJbnRlcmFjdGlvbiB7XG4gIEBwcm9wZXJ0eSh7XG4gICAgdHlwZTogTnVtYmVyLFxuICAgIGF0dHJpYnV0ZTogJ21heC1jaG9pY2VzJ1xuICB9KVxuICBwdWJsaWMgbWF4Q2hvaWNlczogbnVtYmVyID0gMDtcblxuICBAcHJvcGVydHkoe1xuICAgIHR5cGU6IE51bWJlcixcbiAgICBhdHRyaWJ1dGU6ICdtaW4tY2hvaWNlcydcbiAgfSlcbiAgcHVibGljIG1pbkNob2ljZXM6IG51bWJlciA9IDA7XG5cbiAgQHN0YXRlKClcbiAgcHJpdmF0ZSBfcG9pbnRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGAgPHNsb3QgbmFtZT1cInByb21wdFwiPjwvc2xvdD5cbiAgICAgIDxwb2ludC1jb250YWluZXI+XG4gICAgICAgICR7cmVwZWF0KFxuICAgICAgICAgIHRoaXMuX3BvaW50cyxcbiAgICAgICAgICBwb2ludCA9PiBwb2ludCxcbiAgICAgICAgICAocG9pbnQsIGluZGV4KSA9PiBodG1sYFxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBwYXJ0PVwicG9pbnRcIlxuICAgICAgICAgICAgICBzdHlsZT0ke3N0eWxlTWFwKHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoLTUwJSwgLTUwJSknLFxuICAgICAgICAgICAgICAgIGxlZnQ6IGAke3BvaW50LnNwbGl0KCcgJylbMF19cHhgLFxuICAgICAgICAgICAgICAgIHRvcDogYCR7cG9pbnQuc3BsaXQoJyAnKVsxXX1weGBcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJSZW1vdmUgcG9pbnQgYXQgJHtwb2ludH1cIlxuICAgICAgICAgICAgICBAY2xpY2s9JHsoZTogRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3BvaW50cyA9IHRoaXMuX3BvaW50cy5maWx0ZXIoKF8sIGkpID0+IGkgIT09IGluZGV4KTtcbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVSZXNwb25zZSh0aGlzLl9wb2ludHMpO1xuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgIGBcbiAgICAgICAgKX1cbiAgICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgPC9wb2ludC1jb250YWluZXI+YDtcbiAgfVxuXG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBbXG4gICAgY3NzYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIH1cbiAgICAgIHBvaW50LWNvbnRhaW5lciB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB9XG4gICAgYFxuICBdO1xuXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuX3BvaW50cyA9IFtdO1xuICB9XG5cbiAgdmFsaWRhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3BvaW50cy5sZW5ndGggPj0gdGhpcy5taW5DaG9pY2VzICYmIHRoaXMuX3BvaW50cy5sZW5ndGggPD0gdGhpcy5tYXhDaG9pY2VzO1xuICB9XG5cbiAgc2V0IHJlc3BvbnNlKHZhbDogc3RyaW5nIHwgc3RyaW5nW10pIHtcbiAgICB0aGlzLl9wb2ludHMgPSBBcnJheS5pc0FycmF5KHZhbCkgPyB2YWwgOiBbdmFsXTtcbiAgfVxuXG4gIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cbiAgICBjb25zdCBpbWcgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpO1xuXG4gICAgLy8gQXR0YWNoIGEgY2xpY2sgZXZlbnQgbGlzdGVuZXIgdG8gdGhlIGltYWdlIGVsZW1lbnRcbiAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBldmVudCA9PiB7XG4gICAgICBjb25zdCB4ID0gZXZlbnQub2Zmc2V0WDtcbiAgICAgIGNvbnN0IHkgPSBldmVudC5vZmZzZXRZO1xuXG4gICAgICB0aGlzLl9wb2ludHMgPSBbLi4udGhpcy5fcG9pbnRzLCB4ICsgJyAnICsgeV07XG4gICAgICB0aGlzLnNhdmVSZXNwb25zZSh0aGlzLl9wb2ludHMpO1xuICAgIH0pO1xuICB9XG4gIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXNlbGVjdC1wb2ludC1pbnRlcmFjdGlvbic6IFF0aVNlbGVjdFBvaW50SW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjc3MsIGh0bWwsIG5vdGhpbmcgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHksIHF1ZXJ5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyB3YXRjaCB9IGZyb20gJy4uLy4uLy4uL2RlY29yYXRvcnMvd2F0Y2gnO1xuaW1wb3J0IHsgSW50ZXJhY3Rpb24gfSBmcm9tICcuLi9pbnRlcm5hbC9pbnRlcmFjdGlvbi9pbnRlcmFjdGlvbic7XG5cbi8qKlxuICogQHN1bW1hcnkgVGhlIFNsaWRlckludGVyYWN0aW9uLlR5cGUgKHF0aS1zbGlkZXItaW50ZXJhY3Rpb24pIHByZXNlbnRzIHRoZSBjYW5kaWRhdGUgd2l0aCBhIGNvbnRyb2wgZm9yIHNlbGVjdGluZyBhIG51bWVyaWNhbCB2YWx1ZSBiZXR3ZWVuIGEgbG93ZXIgYW5kIHVwcGVyIGJvdW5kLlxuICogQGRvY3VtZW50YXRpb24gaHR0cHM6Ly93d3cuaW1zZ2xvYmFsLm9yZy9zcGVjL3F0aS92M3AwL2ltcGwjaC5zNjF4Y3JqNHFjeWpcbiAqIEBzdGF0dXMgc3RhYmxlXG4gKiBAc2luY2UgNi4wXG4gKlxuICogQGV2ZW50IHF0aS1yZWdpc3Rlci1pbnRlcmFjdGlvbiAtIGVtaXR0ZWQgd2hlbiB0aGUgaW50ZXJhY3Rpb24gd2FudHMgdG8gcmVnaXN0ZXIgaXRzZWxmXG4gKiBAZXZlbnQgcXRpLWludGVyYWN0aW9uLXJlc3BvbnNlIC0gZW1pdHRlZCB3aGVuIHRoZSBpbnRlcmFjdGlvbiBjaGFuZ2VzXG4gKlxuICogQGNzc3Byb3AgLS1zaG93LXZhbHVlIC0gc2hvd3MgdGhlIGN1cnJlbnQgdmFsdWUgd2hpbGUgc2xpZGluZ1xuICogQGNzc3Byb3AgLS1zaG93LXRpY2tzIC0gc2hvd3MgdGhlIHRpY2tzIGFjY29yZGluZyB0byBzdGVwc1xuICogQGNzc3Byb3AgLS1zaG93LWJvdW5kcyAtIHNob3dzIHZhbHVlIGZvciBsb3dlciBhbmQgdXBwZXIgYm91bmRhcnlcbiAqXG4gKiBAY3NzcGFydCBzbGlkZXIgLS0gc2xpZGVyIGlubHVkaW5nLCBib3VuZHMgYW5kIHRpY2tzIGFuZCB2YWx1ZSwgdXNlIGl0IGZvciBwYWRkaW5ncyBhbmQgbWFyZ2luc1xuICogQGNzc3BhcnQgYm91bmRzIC0tIGRpdiBmb3IgYm91bmRzLCBjb250YWluaW5nIHR3byBkaXZzIGZvciB3aXRoIG1pbiwgYW5kIG1heCBib3VuZHMgdmFsdWVcbiAqIEBjc3NwYXJ0IHRpY2tzIC0tIGRpdiBmb3IgdGlja3MsIHVzZSBsaW5lYWlyIGdyYWRpZW50IGFuZCBleHBvc2VkIGNzcyB2YXJpYWJsZXMgZm9yIHN0eWxpbmdcbiAqIEBjc3NwYXJ0IHJhaWwgLS0gZGl2IGZvciByYWlsLCBzdHlsZSBhY2NvcmRpbmcgdG8gbmVlZHNcbiAqIEBjc3NwYXJ0IGtub2IgLS0gZGl2LCBzaG91bGQgYmUgcmVsYXRpdmUgb3IgYWJzb2x1dGVcbiAqIEBjc3NwYXJ0IHZhbHVlIC0tIGRpdiwgY29udGFpbmluZyB2YWx1ZVxuICpcbiAqIEBzbG90IC0gVGhlIGRlZmF1bHQgc2xvdCB3aGVyZSA8cXRpLXNpbXBsZS1jaG9pY2U+IG11c3QgYmUgcGxhY2VkLlxuICogQHNsb3QgcHJvbXB0IC0gc2xvdCB3aGVyZSB0aGUgcHJvbXB0IGlzIHBsYWNlZC5cbiAqL1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLXNsaWRlci1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpU2xpZGVySW50ZXJhY3Rpb24gZXh0ZW5kcyBJbnRlcmFjdGlvbiB7XG4gIGNzTGl2ZTogQ1NTU3R5bGVEZWNsYXJhdGlvbjtcblxuICBAcXVlcnkoJyNrbm9iJylcbiAgcHJpdmF0ZSBfa25vYjogSFRNTEVsZW1lbnQ7XG5cbiAgQHF1ZXJ5KCcjcmFpbCcpXG4gIHByaXZhdGUgX3JhaWw6IEhUTUxFbGVtZW50O1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IE51bWJlciB9KSB2YWx1ZTogbnVtYmVyO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogJ3N0ZXAtbGFiZWwnIH0pIHN0ZXBMYWJlbCA9IGZhbHNlO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4gfSkgcmV2ZXJzZSA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX21pbjogbnVtYmVyO1xuICBAcHJvcGVydHkoeyB0eXBlOiBOdW1iZXIsIGF0dHJpYnV0ZTogJ2xvd2VyLWJvdW5kJyB9KSBzZXQgbWluKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9taW4gPSB2YWx1ZTtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1taW4nLCBgJHt0aGlzLl9taW59YCk7XG4gIH1cbiAgZ2V0IG1pbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9taW47XG4gIH1cblxuICBwcml2YXRlIF9tYXg6IG51bWJlcjtcbiAgQHByb3BlcnR5KHsgdHlwZTogTnVtYmVyLCBhdHRyaWJ1dGU6ICd1cHBlci1ib3VuZCcgfSkgc2V0IG1heCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbWF4ID0gdmFsdWU7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1tYXgnLCBgJHt0aGlzLl9tYXh9YCk7XG4gIH1cbiAgZ2V0IG1heCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9tYXg7XG4gIH1cblxuICBwcml2YXRlIF9zdGVwOiBudW1iZXI7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IE51bWJlciwgYXR0cmlidXRlOiAnc3RlcCcgfSkgc2V0IHN0ZXAodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX3N0ZXAgPSB2YWx1ZTtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KCctLXN0ZXAnLCBgJHt0aGlzLl9zdGVwfWApO1xuICB9XG4gIGdldCBzdGVwKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3N0ZXA7XG4gIH1cblxuICBAd2F0Y2goJ2Rpc2FibGVkJywgeyB3YWl0VW50aWxGaXJzdFVwZGF0ZTogdHJ1ZSB9KVxuICBfaGFuZGxlRGlzYWJsZWRDaGFuZ2UgPSAob2xkLCBkaXNhYmxlZCkgPT4ge307XG5cbiAgQHdhdGNoKCdyZWFkb25seScsIHsgd2FpdFVudGlsRmlyc3RVcGRhdGU6IHRydWUgfSlcbiAgX2hhbmRsZVJlYWRvbmx5Q2hhbmdlID0gKG9sZCwgcmVhZG9ubHkpID0+IHt9O1xuXG4gIHJlc2V0KCkge1xuICAgIC8vIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuICB2YWxpZGF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIHN0YXRpYyBzaGFkb3dSb290T3B0aW9uczogU2hhZG93Um9vdEluaXQgPSB7IC4uLkxpdEVsZW1lbnQuc2hhZG93Um9vdE9wdGlvbnMsIGRlbGVnYXRlc0ZvY3VzOiB0cnVlLCBtb2RlOiAnb3BlbicgfTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIC8qIHRoZSBjb21wdXRlZCBzdHlsZSBpcyBhIGxpdmUgcHJvcGVydHksIHdlIHVzZSB0aGlzIHRvIGdldCBjc3MgdmFyaWFibGVzXG4gICAgc2VlIHJlbmRlciB0ZW1wbGF0ZSAqL1xuICAgIHRoaXMuY3NMaXZlID0gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKTtcbiAgfVxuXG4gIHNldCByZXNwb25zZShteVJlc3BvbnNlOiBzdHJpbmcgfCBzdHJpbmdbXSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG15UmVzcG9uc2UpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdRdGlTbGlkZXJJbnRlcmFjdGlvbjogcmVzcG9uc2UgaXMgYW4gYXJyYXksIGJ1dCBzaG91bGQgYmUgYSBzaW5nbGUgdmFsdWUnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdmFsdWUgPSBwYXJzZUludChteVJlc3BvbnNlKTtcbiAgICBpZiAoTnVtYmVyLmlzTmFOKHZhbHVlKSkge1xuICAgICAgY29uc29sZS5lcnJvcignUXRpU2xpZGVySW50ZXJhY3Rpb246IHJlc3BvbnNlIGlzIG5vdCBhIG51bWJlcicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gW2Nzc2BgXTtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgLy8gY29udmVydCB0aGUgdmFsdWUsIHdoaWNoIGlzIHRoZSByZWFsIHNsaWRlciB2YWx1ZSB0byBhIHBlcmNlbnRhZ2UgZm9yIHRoZSBkb20uXG4gICAgdGhpcy52YWx1ZSA8IHRoaXMubWluICYmICh0aGlzLnZhbHVlID0gdGhpcy5taW4pO1xuICAgIHRoaXMudmFsdWUgPiB0aGlzLm1heCAmJiAodGhpcy52YWx1ZSA9IHRoaXMubWF4KTtcbiAgICBjb25zdCB2YWx1ZVBlcmNlbnRhZ2UgPSAoKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyAodGhpcy5tYXggLSB0aGlzLm1pbikpICogMTAwO1xuICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkoJy0tdmFsdWUtcGVyY2VudGFnZScsIGAke3ZhbHVlUGVyY2VudGFnZX0lYCk7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ2FyaWEtdmFsdWVub3cnLCB0aGlzLnZhbHVlLnRvU3RyaW5nKCkpO1xuXG4gICAgcmV0dXJuIGh0bWxgPHNsb3QgbmFtZT1cInByb21wdFwiPjwvc2xvdD5cbiAgICAgIDxkaXYgaWQ9XCJzbGlkZXJcIiBwYXJ0PVwic2xpZGVyXCI+XG4gICAgICAgICR7dGhpcy5jc0xpdmUuZ2V0UHJvcGVydHlWYWx1ZSgnLS1zaG93LWJvdW5kcycpID09ICd0cnVlJ1xuICAgICAgICAgID8gaHRtbGA8ZGl2IGlkPVwiYm91bmRzXCIgcGFydD1cImJvdW5kc1wiPlxuICAgICAgICAgICAgICA8ZGl2PiR7dGhpcy5fbWlufTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2PiR7dGhpcy5fbWF4fTwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+YFxuICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgJHt0aGlzLmNzTGl2ZS5nZXRQcm9wZXJ0eVZhbHVlKCctLXNob3ctdGlja3MnKSA9PSAndHJ1ZScgPyBodG1sYDxkaXYgaWQ9XCJ0aWNrc1wiIHBhcnQ9XCJ0aWNrc1wiPjwvZGl2PmAgOiBub3RoaW5nfVxuICAgICAgICA8ZGl2IGlkPVwicmFpbFwiIHBhcnQ9XCJyYWlsXCIgQG1vdXNlZG93bj0ke3RoaXMuX29uTW91c2VEb3dufSBAdG91Y2hzdGFydD0ke3RoaXMuX29uVG91Y2hNb3ZlfT5cbiAgICAgICAgICA8ZGl2IGlkPVwia25vYlwiIHBhcnQ9XCJrbm9iXCI+XG4gICAgICAgICAgICAke3RoaXMuY3NMaXZlLmdldFByb3BlcnR5VmFsdWUoJy0tc2hvdy12YWx1ZScpID09ICd0cnVlJ1xuICAgICAgICAgICAgICA/IGh0bWxgPGRpdiBpZD1cInZhbHVlXCIgcGFydD1cInZhbHVlXCI+JHt0aGlzLnZhbHVlfTwvZGl2PmBcbiAgICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PmA7XG4gIH1cblxuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuc3RlcCA9IDE7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgncm9sZScsICdzbGlkZXInKTtcbiAgfVxuXG4gIHByaXZhdGUgX29uVG91Y2hNb3ZlKGV2ZW50KSB7XG4gICAgY29uc3QgaGFuZGxlVG91Y2hNb3ZlID0gZXZlbnQgPT4ge1xuICAgICAgY29uc3QgeyB4IH0gPSB0aGlzLmdldFBvc2l0aW9uRnJvbUV2ZW50KGV2ZW50KTtcbiAgICAgIGNvbnN0IGRpZmZYID0geCAtIHRoaXMuX3JhaWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgICAgdGhpcy5jYWxjdWxhdGVWYWx1ZShkaWZmWCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaGFuZGxlVG91Y2hFbmQgPSAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBoYW5kbGVUb3VjaE1vdmUpO1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBoYW5kbGVUb3VjaEVuZCk7XG5cbiAgICAgIHRoaXMuc2F2ZVJlc3BvbnNlKHRoaXMudmFsdWUudG9TdHJpbmcoKSk7XG4gICAgfTtcblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIGhhbmRsZVRvdWNoTW92ZSk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBoYW5kbGVUb3VjaEVuZCk7XG5cbiAgICBjb25zdCB7IHggfSA9IHRoaXMuZ2V0UG9zaXRpb25Gcm9tRXZlbnQoZXZlbnQpO1xuICAgIGNvbnN0IGRpZmZYID0geCAtIHRoaXMuX3JhaWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIHRoaXMuY2FsY3VsYXRlVmFsdWUoZGlmZlgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25Nb3VzZURvd24oZXZlbnQpIHtcbiAgICBjb25zdCBoYW5kbGVNb3VzZU1vdmUgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIC8vIGlmIHRoZSBxdGktc2xpZGVyLWludGVyYWN0aW9uIGhhcyBhbiBhYnNvbHV0ZSBsZWZ0IHBvc2l0aW9uIGFuZCBib2R5IGlzIHNjcm9sbGVkIGEgYml0LCB0YWtlIGFjY291bnQgZm9yIHRoYXRcbiAgICAgIGNvbnN0IGRpZmZYID0gZXZlbnQucGFnZVggLSB0aGlzLl9yYWlsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdDtcblxuICAgICAgdGhpcy5jYWxjdWxhdGVWYWx1ZShkaWZmWCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZU1vdXNlVXAgPSAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBoYW5kbGVNb3VzZU1vdmUpO1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIGhhbmRsZU1vdXNlVXApO1xuXG4gICAgICB0aGlzLnNhdmVSZXNwb25zZSh0aGlzLnZhbHVlLnRvU3RyaW5nKCkpO1xuICAgIH07XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBoYW5kbGVNb3VzZU1vdmUpO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBoYW5kbGVNb3VzZVVwKTtcblxuICAgIC8vIGlmIHRoZSBxdGktc2xpZGVyLWludGVyYWN0aW9uIGhhcyBhbiBhYnNvbHV0ZSBsZWZ0IHBvc2l0aW9uIGFuZCBib2R5IGlzIHNjcm9sbGVkIGEgYml0LCB0YWtlIGFjY291bnQgZm9yIHRoYXRcbiAgICBjb25zdCBkaWZmWCA9IGV2ZW50LnBhZ2VYIC0gdGhpcy5fcmFpbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQ7XG5cbiAgICB0aGlzLmNhbGN1bGF0ZVZhbHVlKGRpZmZYKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgLyoqIGNhbGN1bGF0ZVZhbHVlIGdldHMgeCBwb3NpdGlvbiBhbmQgY29tcGFyZXMgdGhpcyB3aXRoIHRoZSB0b3RhbCB3aWR0aCBpbiBwaXhlbHMgKi9cbiAgcHJpdmF0ZSBjYWxjdWxhdGVWYWx1ZShkaWZmWDogbnVtYmVyKSB7XG4gICAgY29uc3QgdmFsdWVOb3cgPSB0aGlzLm1pbiArICgodGhpcy5tYXggLSB0aGlzLm1pbikgKiBkaWZmWCkgLyB0aGlzLl9yYWlsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgIGNvbnN0IHJvdW5kZWRTdGVwVmFsdWUgPSB0aGlzLm1pbiArIE1hdGgucm91bmQoKHZhbHVlTm93IC0gdGhpcy5taW4pIC8gdGhpcy5fc3RlcCkgKiB0aGlzLl9zdGVwO1xuICAgIHRoaXMudmFsdWUgPSByb3VuZGVkU3RlcFZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQb3NpdGlvbkZyb21FdmVudChlOiBhbnkpOiB7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbiAgfSB7XG4gICAgbGV0IF90b3VjaE1vdmU7XG4gICAgaWYgKGUudHlwZSA9PSAndG91Y2hzdGFydCcgfHwgZS50eXBlID09ICd0b3VjaG1vdmUnIHx8IGUudHlwZSA9PSAndG91Y2hlbmQnIHx8IGUudHlwZSA9PSAndG91Y2hjYW5jZWwnKSB7XG4gICAgICBjb25zdCBldnQgPSB0eXBlb2YgZS5vcmlnaW5hbEV2ZW50ID09PSAndW5kZWZpbmVkJyA/IGUgOiBlLm9yaWdpbmFsRXZlbnQ7XG4gICAgICBjb25zdCB0b3VjaCA9IGV2dC50b3VjaGVzWzBdIHx8IGV2dC5jaGFuZ2VkVG91Y2hlc1swXTtcbiAgICAgIF90b3VjaE1vdmUgPSB7XG4gICAgICAgIHg6IHRvdWNoLnBhZ2VYLFxuICAgICAgICB5OiB0b3VjaC5wYWdlWVxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgZS50eXBlID09ICdtb3VzZWRvd24nIHx8XG4gICAgICBlLnR5cGUgPT0gJ21vdXNldXAnIHx8XG4gICAgICBlLnR5cGUgPT0gJ21vdXNlbW92ZScgfHxcbiAgICAgIGUudHlwZSA9PSAnbW91c2VvdmVyJyB8fFxuICAgICAgZS50eXBlID09ICdtb3VzZW91dCcgfHxcbiAgICAgIGUudHlwZSA9PSAnbW91c2VlbnRlcicgfHxcbiAgICAgIGUudHlwZSA9PSAnbW91c2VsZWF2ZSdcbiAgICApIHtcbiAgICAgIF90b3VjaE1vdmUgPSB7XG4gICAgICAgIHg6IGUuY2xpZW50WCxcbiAgICAgICAgeTogZS5jbGllbnRZXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gX3RvdWNoTW92ZTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktc2xpZGVyLWludGVyYWN0aW9uJzogUXRpU2xpZGVySW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICJpbXBvcnQge1xuICBpdGVtQ29udGV4dCxcbiAgdHlwZSBDYWxjdWxhdGUsXG4gIHR5cGUgSXRlbUNvbnRleHQsXG4gIHR5cGUgUmVzcG9uc2VWYXJpYWJsZVxufSBmcm9tICdAY2l0b2xhYi9xdGktY29tcG9uZW50cy9xdGktY29tcG9uZW50cyc7XG5pbXBvcnQgeyBjb25zdW1lIH0gZnJvbSAnQGxpdC9jb250ZXh0JztcbmltcG9ydCB7IExpdEVsZW1lbnQsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbi8qKlxuICogaHR0cHM6Ly93d3cuaW1zZ2xvYmFsLm9yZy9zcGVjL3F0aS92M3AwL2ltcGwjaC5maTI5cThkdWJqZ3dcbiAqIDxxdGktY3VzdG9tLW9wZXJhdG9yIGNsYXNzPVwianMub3JnXCI+XG4gICAgICAgIDxxdGktYmFzZS12YWx1ZSBiYXNlLXR5cGU9XCJzdHJpbmdcIj48IVtDREFUQVtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjb250ZXh0LnZhcmlhYmxlcyk7XG4gICAgICAgICAgcmV0dXJuICdCJ1xuICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3F0aS1lbmQtYXR0ZW1wdC1pbnRlcmFjdGlvbicpLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICBdXT48L3F0aS1iYXNlLXZhbHVlPlxuICAgICAgPC9xdGktY3VzdG9tLW9wZXJhdG9yPlxuICAgIDwvcXRpLXNldC1vdXRjb21lLXZhbHVlPlxuICovXG5AY3VzdG9tRWxlbWVudCgncXRpLWN1c3RvbS1vcGVyYXRvcicpXG5leHBvcnQgY2xhc3MgUXRpQ3VzdG9tT3BlcmF0b3IgZXh0ZW5kcyBMaXRFbGVtZW50IGltcGxlbWVudHMgQ2FsY3VsYXRlIHtcbiAgcHJpdmF0ZSBvcGVyYXRvckZ1bmN0aW9uOiBGdW5jdGlvbjtcblxuICBAY29uc3VtZSh7IGNvbnRleHQ6IGl0ZW1Db250ZXh0LCBzdWJzY3JpYmU6IHRydWUgfSlcbiAgQHN0YXRlKClcbiAgcHJpdmF0ZSBfY29udGV4dD86IEl0ZW1Db250ZXh0O1xuXG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdCBAc2xvdGNoYW5nZT0ke3RoaXMuaGFuZGxlU2xvdENoYW5nZX0+PC9zbG90PmA7XG4gIH1cblxuICBoYW5kbGVTbG90Q2hhbmdlKGV2ZW50OiBFdmVudCkge1xuICAgIC8vIGV4cGVjdGluZyA8WyFDREFUQVsgLi4uIF1dPiBpcyBjb252ZXJ0ZWQgaW50byA8IS0tIC4uLiAtLT4gd2l0aCBxdGktdHJhbnNmb3JtOiBjRGF0YVRvQ29tbWVudFxuICAgIGNvbnN0IGNvbW1lbnROb2RlID0gQXJyYXkuZnJvbSh0aGlzLmZpcnN0RWxlbWVudENoaWxkPy5jaGlsZE5vZGVzID8/IFtdKS5maW5kKFxuICAgICAgbm9kZSA9PiBub2RlLm5vZGVUeXBlID09PSBOb2RlLkNPTU1FTlRfTk9ERVxuICAgICk7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMub3BlcmF0b3JGdW5jdGlvbiA9IG5ldyBGdW5jdGlvbignY29udGV4dCcsICdmbicsICdpdGVtJywgY29tbWVudE5vZGUudGV4dENvbnRlbnQgPz8gJycpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2N1c3RvbS1vcGVyYXRvciBjb250YWlucyBpbnZhbGlkIGphdmFzY3JpcHQgY29kZScsIGUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjYWxjdWxhdGUoKSB7XG4gICAgY29uc3QgZm4gPSB7XG4gICAgICB2YXJpYWJsZTogKHJlc3BvbnNlSWRlbnRpZmllcjogc3RyaW5nKSA9PlxuICAgICAgICB0aGlzLl9jb250ZXh0Py52YXJpYWJsZXMuZmluZCh2ID0+IHYuaWRlbnRpZmllciA9PT0gcmVzcG9uc2VJZGVudGlmaWVyKT8udmFsdWUgPz8gJycsXG4gICAgICBjb3JyZWN0OiAocmVzcG9uc2VJZGVudGlmaWVyOiBzdHJpbmcpID0+XG4gICAgICAgICh0aGlzLl9jb250ZXh0Py52YXJpYWJsZXMuZmluZCh2ID0+IHYuaWRlbnRpZmllciA9PT0gcmVzcG9uc2VJZGVudGlmaWVyKSBhcyBSZXNwb25zZVZhcmlhYmxlKVxuICAgICAgICAgID8uY29ycmVjdFJlc3BvbnNlID8/ICcnXG4gICAgfTtcbiAgICBjb25zdCBpdGVtID0ge1xuICAgICAgZ2V0VmFyaWFibGU6ICh2YXJpYWJsZUlkZW50aWZpZXI6IHN0cmluZykgPT5cbiAgICAgICAgdGhpcy5fY29udGV4dD8udmFyaWFibGVzLmZpbmQodiA9PiB2LmlkZW50aWZpZXIgPT09IHZhcmlhYmxlSWRlbnRpZmllciksXG4gICAgICB1cGRhdGVPdXRjb21lVmFyaWFibGU6IChvdXRjb21lSWRlbnRpZmllcjogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pID0+IHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudDx7IG91dGNvbWVJZGVudGlmaWVyOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSB9PigncXRpLXNldC1vdXRjb21lLXZhbHVlJywge1xuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgIG91dGNvbWVJZGVudGlmaWVyLFxuICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5vcGVyYXRvckZ1bmN0aW9uKHRoaXMuX2NvbnRleHQsIGZuLCBpdGVtKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktY3VzdG9tLW9wZXJhdG9yJzogUXRpQ3VzdG9tT3BlcmF0b3I7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50LCBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1hc3NvY2lhYmxlLWhvdHNwb3QnKVxuZXhwb3J0IGNsYXNzIFF0aUFzc29jaWFibGVIb3RzcG90IGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3F0aS1yZWdpc3Rlci1ob3RzcG90Jywge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWVcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gY3NzYFxuICAgIDpob3N0IHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB9XG4gIGA7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYCA8c2xvdCBuYW1lPVwicXRpLWdhcC1pbWdcIj48L3Nsb3Q+IGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWFzc29jaWFibGUtaG90c3BvdCc6IFF0aUFzc29jaWFibGVIb3RzcG90O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1nYXAnKVxuZXhwb3J0IGNsYXNzIFF0aUdhcCBleHRlbmRzIExpdEVsZW1lbnQge1xuICBAcHJvcGVydHkoeyB0eXBlOiBOdW1iZXIsIHJlZmxlY3Q6IHRydWUgfSkgdGFiaW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZCA9IDA7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYCA8c2xvdCBuYW1lPVwicXRpLWdhcC10ZXh0XCI+PC9zbG90PmA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWdhcCc6IFF0aUdhcDtcbiAgfVxufVxuIiwgImltcG9ydCB7IExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktZ2FwLWltZycpXG5leHBvcnQgY2xhc3MgUXRpR2FwSW1nIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IE51bWJlciwgcmVmbGVjdDogdHJ1ZSB9KSB0YWJpbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkID0gMDtcblxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgnc2xvdCcsICdxdGktZ2FwLWltZycpO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1nYXAtaW1nJzogUXRpR2FwSW1nO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1nYXAtdGV4dCcpXG5leHBvcnQgY2xhc3MgUXRpR2FwVGV4dCBleHRlbmRzIExpdEVsZW1lbnQge1xuICBAcHJvcGVydHkoeyB0eXBlOiBOdW1iZXIsIHJlZmxlY3Q6IHRydWUgfSkgdGFiaW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZCA9IDA7XG5cbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgnc2xvdCcsICdxdGktZ2FwLXRleHQnKTtcbiAgfVxuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdD48L3Nsb3Q+YDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktZ2FwLXRleHQnOiBRdGlHYXBUZXh0O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgUXRpQ2hvaWNlIH0gZnJvbSAnLi9pbnRlcm5hbC9jaG9pY2UvcXRpLWNob2ljZSc7XG5cbi8vIHR5cGUgc2hhcGUgPSB7IHNoYXBlOiAncmVjdCcgfCAnY2lyY2xlJyB8ICdwb2x5JzsgY29vcmRzOiBudW1iZXJbXSB9O1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWhvdHNwb3QtY2hvaWNlJylcbmV4cG9ydCBjbGFzcyBRdGlIb3RzcG90Q2hvaWNlIGV4dGVuZHMgUXRpQ2hvaWNlIHtcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnYXJpYS1vcmRlcnZhbHVlJywgdHlwZTogTnVtYmVyLCByZWZsZWN0OiB0cnVlIH0pIG9yZGVyOiBudW1iZXI7XG5cbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IGNzc2BcbiAgICA6aG9zdCB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgfVxuICBgO1xufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktaG90c3BvdC1jaG9pY2UnOiBRdGlIb3RzcG90Q2hvaWNlO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IFF0aUNob2ljZSB9IGZyb20gJy4vaW50ZXJuYWwvY2hvaWNlL3F0aS1jaG9pY2UnO1xuaW1wb3J0IHsgaHRtbCB9IGZyb20gJ2xpdCc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktaG90dGV4dCcpXG5leHBvcnQgY2xhc3MgUXRpSG90dGV4dCBleHRlbmRzIFF0aUNob2ljZSB7XG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8ZGl2IHBhcnQ9XCJjaFwiPjxkaXYgcGFydD1cImNoYVwiPjwvZGl2PjwvZGl2PlxuICAgICAgPHNsb3Q+PC9zbG90PiBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1ob3R0ZXh0JzogUXRpSG90dGV4dDtcbiAgfVxufVxuIiwgImltcG9ydCB7IExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1pbmxpbmUtY2hvaWNlJylcbmV4cG9ydCBjbGFzcyBRdGlJbmxpbmVDaG9pY2UgZXh0ZW5kcyBMaXRFbGVtZW50IHt9XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1pbmxpbmUtY2hvaWNlJzogUXRpSW5saW5lQ2hvaWNlO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IENTU1Jlc3VsdEdyb3VwLCBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgUXRpQ2hvaWNlIH0gZnJvbSAnLi9pbnRlcm5hbC9jaG9pY2UvcXRpLWNob2ljZSc7XG5cbi8qKlxuICogQHN1bW1hcnkgU2hvcnQgc3VtbWFyeSBvZiB0aGUgY29tcG9uZW50J3MgaW50ZW5kZWQgdXNlLlxuICogQGRvY3VtZW50YXRpb24gaHR0cHM6Ly93d3cuaW1zZ2xvYmFsLm9yZy9zcGVjL3F0aS92M3AwL2ltcGwjaC5qOW51MW9hMXR1M2JcbiAqIEBzdGF0dXMgc3RhYmxlXG4gKiBAc2luY2UgNC4wXG4gKlxuICogQGV2ZW50IHF0aS1jaG9pY2UtZWxlbWVudC1zZWxlY3RlZCAtIEVtaXR0ZWQgd2hlbiBhIGNob2ljZSBpcyBzZWxlY3RlZC5cbiAqIEBldmVudCBxdGktcmVnaXN0ZXItY2hvaWNlIC0gRW1pdHRlZCB3aGVuIGFuIGNob2ljZSBpcyBhZGRlZFxuICogQGV2ZW50IHF0aS1sb29zZS1jaG9pY2UgLSBFbWl0dGVkIHdoZW4gYSBjaG9pY2UgaXMgcmVtb3ZlZFxuICpcbiAqIEBzbG90IC0gVGhlIGRlZmF1bHQgc2xvdC5cbiAqL1xuQGN1c3RvbUVsZW1lbnQoJ3F0aS1zaW1wbGUtY2hvaWNlJylcbmV4cG9ydCBjbGFzcyBRdGlTaW1wbGVDaG9pY2UgZXh0ZW5kcyBRdGlDaG9pY2Uge1xuICBzdGF0aWMgc3R5bGVzID0gY3NzYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgfVxuICAgIHNsb3Qge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gIGA7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxkaXYgcGFydD1cImNoXCI+PGRpdiBwYXJ0PVwiY2hhXCI+PC9kaXY+PC9kaXY+XG4gICAgICA8c2xvdCBwYXJ0PVwic2xvdFwiPjwvc2xvdD4gYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktc2ltcGxlLWNob2ljZSc6IFF0aVNpbXBsZUNob2ljZTtcbiAgfVxufVxuIiwgIi8qIG9ubHkgZXhwb3J0ZWQgdG8gb3ZlcnJpZGUgb3IgZXh0ZW5kIGZvciBzcGVjaWZpYyBwdXJwb3NlcyAqL1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcm5hbC9ldmVudC10eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL2ludGVybmFsL2V2ZW50cyc7XG5leHBvcnQgKiBmcm9tICcuL2ludGVybmFsL2V4cHJlc3Npb24tcmVzdWx0JztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJuYWwvdmFyaWFibGVzJztcbi8qIG9ubHkgZXhwb3J0ZWQgdG8gb3ZlcnJpZGUgb3IgZXh0ZW5kIGZvciBzcGVjaWZpYyBwdXJwb3NlcyAqL1xuZXhwb3J0ICogZnJvbSAnLi9xdGktYXNzZXNzbWVudC1pdGVtL3F0aS1hc3Nlc3NtZW50LWl0ZW0nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktYXNzZXNzbWVudC1zdGltdWx1cy1yZWYvcXRpLWFzc2Vzc21lbnQtc3RpbXVsdXMtcmVmJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL2ludGVybmFsL2Nob2ljZS9xdGktY2hvaWNlJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWl0ZW0tYm9keS9xdGktaXRlbS1ib2R5JztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLXByb21wdC9xdGktcHJvbXB0JztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLXN0eWxlc2hlZXQvcXRpLXN0eWxlc2hlZXQnO1xuLyogc3RhcnQgcmVzcG9uc2UgYW5kIG91dGNvbWUgKi9cbmV4cG9ydCAqIGZyb20gJy4vcXRpLXZhcmlhYmxlLWRlY2xhcmF0aW9uL3F0aS1vdXRjb21lLWRlY2xhcmF0aW9uL3F0aS1vdXRjb21lLWRlY2xhcmF0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLXZhcmlhYmxlLWRlY2xhcmF0aW9uL3F0aS1yZXNwb25zZS1kZWNsYXJhdGlvbi9xdGktcmVzcG9uc2UtZGVjbGFyYXRpb24nO1xuLyogZW5kIHJlc3BvbnNlIGFuZCBvdXRjb21lICovXG5leHBvcnQgKiBmcm9tICcuL3F0aS1jb21wYW5pb24tbWF0ZXJpYWxzLWluZm8vcXRpLWNvbXBhbmlvbi1tYXRlcmlhbHMtaW5mbyc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1ydWJyaWMtYmxvY2svcXRpLWNvbnRlbnQtYm9keSc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1ydWJyaWMtYmxvY2svcXRpLXJ1YnJpYy1ibG9jayc7XG4vKiBzdGFydCBmZWVkYmFjayAqL1xuZXhwb3J0ICogZnJvbSAnLi9xdGktZmVlZGJhY2svcXRpLWZlZWRiYWNrLWJsb2NrL3F0aS1mZWVkYmFjay1ibG9jayc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1mZWVkYmFjay9xdGktZmVlZGJhY2staW5saW5lL3F0aS1mZWVkYmFjay1pbmxpbmUnO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktZmVlZGJhY2svcXRpLW1vZGFsLWZlZWRiYWNrL3F0aS1tb2RhbC1mZWVkYmFjayc7XG4vKiBlbmQgZmVlZGJhY2sgKi9cbi8qIHN0YXJ0IHRleHRlbnRyeWludGVyYWN0aW9uICovXG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktZXh0ZW5kZWQtdGV4dC1pbnRlcmFjdGlvbi9xdGktZXh0ZW5kZWQtdGV4dC1pbnRlcmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktdGV4dC1lbnRyeS1pbnRlcmFjdGlvbi9xdGktdGV4dC1lbnRyeS1pbnRlcmFjdGlvbic7XG4vKiBlbmQgdGV4dGVudHJ5aW50ZXJhY3Rpb24gKi9cbi8qIHN0YXJ0IGhvdHRleHQgKi9cbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1ob3R0ZXh0LWludGVyYWN0aW9uL3F0aS1ob3R0ZXh0LWludGVyYWN0aW9uJztcbi8qIGVuZCBob3R0ZXh0ICovXG4vKiBzdGFydCBpbmxpbmVjaG9pY2UgKi9cbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1pbmxpbmUtY2hvaWNlLWludGVyYWN0aW9uL3F0aS1pbmxpbmUtY2hvaWNlLWludGVyYWN0aW9uJztcbi8qIGVuZCBpbmxpbmVjaG9pY2UgKi9cbi8qIHN0YXJ0IGNob2ljZWludGVyYWN0aW9uICovXG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktY2hvaWNlLWludGVyYWN0aW9uL3F0aS1jaG9pY2UtaW50ZXJhY3Rpb24nO1xuLyogZW5kIGNob2ljZWludGVyYWN0aW9uICovXG5leHBvcnQgKiBmcm9tICcuL3F0aS1vdXRjb21lLXByb2Nlc3NpbmcvcXRpLW91dGNvbWUtcHJvY2Vzc2luZyc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nJztcbi8qIHN0YXJ0IGN1c3RvbSBpbnRlcmFjdGlvbnMgKi9cbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1wb3J0YWJsZS1jdXN0b20taW50ZXJhY3Rpb24vcXRpLXBvcnRhYmxlLWN1c3RvbS1pbnRlcmFjdGlvbic7XG4vKiBlbmQgY3VzdG9tIGludGVyYWN0aW9ucyAqL1xuLyogc3RhcnQgb25seSBwcmV2aWV3IGl0ZW1zICovXG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktYXNzb2NpYXRlLWludGVyYWN0aW9uL3F0aS1hc3NvY2lhdGUtaW50ZXJhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWN1c3RvbS1pbnRlcmFjdGlvbi9xdGktY3VzdG9tLWludGVyYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1lbmQtYXR0ZW1wdC1pbnRlcmFjdGlvbi9xdGktZW5kLWF0dGVtcHQtaW50ZXJhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWdhcC1tYXRjaC1pbnRlcmFjdGlvbi9xdGktZ2FwLW1hdGNoLWludGVyYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1ncmFwaGljLWFzc29jaWF0ZS1pbnRlcmFjdGlvbi9xdGktZ3JhcGhpYy1hc3NvY2lhdGUtaW50ZXJhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWdyYXBoaWMtZ2FwLW1hdGNoLWludGVyYWN0aW9uL3F0aS1ncmFwaGljLWdhcC1tYXRjaC1pbnRlcmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktZ3JhcGhpYy1vcmRlci1pbnRlcmFjdGlvbi9xdGktZ3JhcGhpYy1vcmRlci1pbnRlcmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktaG90c3BvdC1pbnRlcmFjdGlvbi9xdGktaG90c3BvdC1pbnRlcmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktbWF0Y2gtaW50ZXJhY3Rpb24vcXRpLW1hdGNoLWludGVyYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1tZWRpYS1pbnRlcmFjdGlvbi9xdGktbWVkaWEtaW50ZXJhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLW9yZGVyLWludGVyYWN0aW9uL3F0aS1vcmRlci1pbnRlcmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktcG9zaXRpb24tb2JqZWN0LWludGVyYWN0aW9uL3F0aS1wb3NpdGlvbi1vYmplY3QtaW50ZXJhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLXBvc2l0aW9uLW9iamVjdC1pbnRlcmFjdGlvbi9xdGktcG9zaXRpb24tb2JqZWN0LXN0YWdlJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1zZWxlY3QtcG9pbnQtaW50ZXJhY3Rpb24vcXRpLXNlbGVjdC1wb2ludC1pbnRlcmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktc2xpZGVyLWludGVyYWN0aW9uL3F0aS1zbGlkZXItaW50ZXJhY3Rpb24nO1xuLyogZW5kIG9ubHkgcHJldmlldyBpdGVtcyAqL1xuZXhwb3J0ICogZnJvbSAnLi9xdGktYXNzZXNzbWVudC1pdGVtL3F0aS1hc3Nlc3NtZW50LWl0ZW0uY29udGV4dCc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1jdXN0b20tb3BlcmF0b3IvcXRpLWN1c3RvbS1vcGVyYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9pbnRlcm5hbC9pbnRlcmFjdGlvbi9pbnRlcmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktYXNzb2NpYWJsZS1ob3RzcG90JztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1nYXAnO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWdhcC1pbWcnO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWdhcC10ZXh0JztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1ob3RzcG90LWNob2ljZSc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktaG90dGV4dCc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktaW5saW5lLWNob2ljZSc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1zaW1wbGUtY2hvaWNlJztcblxuY29uc29sZS5sb2coXG4gICclY0NcdTAwQkZUTyVjTGFiJWM6IHF0aS1jb21wb25lbnRzIGxvYWRlZCcsXG4gICdmb250LXdlaWdodDpib2xkOyBjb2xvcjpncmVlbicsXG4gICdmb250LWZhbWlseTogXCJQVCBTYW5zXCIsIGZvbnQtd2VpZ2h0OmJvbGQ7IGNvbG9yOmdyZWVuOyBmb250LXNpemU6IHNtYWxsZXI7dmVydGljYWwtYWxpZ246IHN1YicsXG4gICdmb250LXdlaWdodDp1bnNldCdcbik7XG5cbi8vIGNzcyBmb3IgZm9udCBwdC1zYW5zIGFuZCBzdWJzY3JpcHQgYW5kIGdyZWVuXG4iXSwKICAibWFwcGluZ3MiOiAiK0RBQUEsT0FBUyxXQUFBQSxPQUFlLGVBQ3hCLE9BQVMs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QUMsR0FENURKLEdBQzhELHFCQUQ5REEsR0FBTkcsRUFBQSxDQURORSxHQUFjLG9CQUFvQixHQUN0QkwsSUNQYixPQUFTLGlCQUFBTSxPQUFxQixvQkFFOUIsT0FBUyxRQUFBQyxPQUFZLE1BR2QsSUFBTUMsR0FBTixjQUF5QkMsQ0FBVSxDQUMvQixRQUFTLENBQ2hCLE9BQU9DO0FBQUEscUJBRVQsQ0FDRixFQUxhRixHQUFORyxFQUFBLENBRE5DLEdBQWMsYUFBYSxHQUNmSixJQ0xiLE9BQVMsY0FBQUssT0FBa0IsTUFDM0IsT0FBUyxpQkFBQUMsT0FBcUIsb0JBR3ZCLElBQU1DLEdBQU4sY0FBOEJDLEVBQVcsQ0FBQyxFQUFwQ0QsR0FBTkUsRUFBQSxDQUROQyxHQUFjLG1CQUFtQixHQUNyQkgsSUNKYixPQUFTLGlCQUFBSSxPQUFxQixvQkFDOUIsT0FBeUIsT0FBQUMsR0FBSyxRQUFBQyxPQUFZLE1BZ0JuQyxJQUFNQyxHQUFOLGNBQThCQyxDQUFVLENBV3BDLFFBQVMsQ0FDaEIsT0FBT0M7QUFBQSxpQ0FFVCxDQUNGLEVBZmFGLEdBQ0osT0FBU0c7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBRExILEdBQU5JLEVBQUEsQ0FETkMsR0FBYyxtQkFBbUIsR0FDckJMLElDdURiLFFBQVEsSUFDTiwwQ0FDQSxnQ0FDQSxnR0FDQSxtQkFDRiIsCiAgIm5hbWVzIjogWyJwcm92aWRlIiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgIndhdGNoIiwgInByb3BlcnR5TmFtZSIsICJvcHRpb25zIiwgInJlc29sdmVkT3B0aW9ucyIsICJfX3NwcmVhZFZhbHVlcyIsICJwcm90byIsICJkZWNvcmF0ZWRGbk5hbWUiLCAidXBkYXRlIiwgIndhdGNoZWRQcm9wZXJ0aWVzIiwgImNoYW5nZWRQcm9wcyIsICJwcm9wZXJ0eSIsICJrZXkiLCAib2xkVmFsdWUiLCAibmV3VmFsdWUiLCAiY3JlYXRlQ29udGV4dCIsICJpdGVtQ29udGV4dFZhcmlhYmxlcyIsICJpdGVtQ29udGV4dCIsICJRdGlBc3Nlc3NtZW50SXRlbSIsICJMaXRFbGVtZW50IiwgIl8iLCAiZGlzYWJsZWQiLCAiY2giLCAicmVhZG9ubHkiLCAiaXRlbUNvbnRleHRWYXJpYWJsZXMiLCAiX19zcHJlYWRQcm9wcyIsICJfX3NwcmVhZFZhbHVlcyIsICJmZWVkYmFja0VsZW1lbnQiLCAicmVzcG9uc2VJZGVudGlmaWVyIiwgImNvdW50QXR0ZW1wdCIsICJvdXRjb21lSWRlbnRpZmllciIsICJ2YWx1ZSIsICJ2IiwgInZhcmlhYmxlIiwgIm1hdGNoaW5nVmFsdWUiLCAiaW50ZXJhY3Rpb25FbGVtZW50IiwgImVsIiwgImZlIiwgIm15UmVzcG9uc2VzIiwgInJlc3BvbnNlIiwgImludGVyYWN0aW9uIiwgImkiLCAiaHRtbCIsICJzaG93IiwgInJlc3BvbnNlcyIsICJ2YXJpIiwgImNyIiwgImNvdW50TnVtQXR0ZW1wdHMiLCAiX2EiLCAicmVzcG9uc2VQcm9jZXNzb3IiLCAiaWRlbnRpZmllciIsICJldmVudCIsICJvdXRjb21lVmFyaWFibGUiLCAibmFtZSIsICJkZXRhaWwiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgIndhdGNoIiwgInByb3ZpZGUiLCAiaXRlbUNvbnRleHQiLCAiY3VzdG9tRWxlbWVudCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAiUXRpQXNzZXNzbWVudFN0aW11bHVzUmVmIiwgIkxpdEVsZW1lbnQiLCAiZXZlbnQiLCAic3RpbXVsdXNSZWYiLCAicGF0aCIsICJzdGltdWx1cyIsICJxdGlUcmFuc2Zvcm1JdGVtIiwgImFwaSIsICJlbGVtZW50cyIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiY3VzdG9tRWxlbWVudCIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAicHJvcGVydHkiLCAiS0VZQ09ERSIsICJRdGlDaG9pY2UiLCAiTGl0RWxlbWVudCIsICJfIiwgImRpc2FibGVkIiwgImV2ZW50IiwgImh0bWwiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgInZhbHVlIiwgIndhdGNoIiwgImN1c3RvbUVsZW1lbnQiLCAiaHRtbCIsICJMaXRFbGVtZW50IiwgImNzcyIsICJxdGlfaXRlbV9ib2R5X3N0eWxlc19kZWZhdWx0IiwgIlF0aUl0ZW1Cb2R5IiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJxdGlfaXRlbV9ib2R5X3N0eWxlc19kZWZhdWx0IiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgIlF0aVByb21wdCIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgIlF0aVN0eWxlc2hlZXQiLCAiTGl0RWxlbWVudCIsICJfY2hhbmdlZFByb3BlcnRpZXMiLCAiaXRlbSIsICJsaW5rIiwgInN0eWxlcyIsICJlcnJvciIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJjb25zdW1lIiwgImNzcyIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAic3RhdGUiLCAiaHRtbCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpVmFyaWFibGVEZWNsYXJhdGlvbiIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAidmFyaWFibGUiLCAiaHRtbFZhbHVlcyIsICJkZWZhdWx0VmFsdWVzIiwgIm4iLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpT3V0Y29tZURlY2xhcmF0aW9uIiwgIlF0aVZhcmlhYmxlRGVjbGFyYXRpb24iLCAiX2EiLCAiX2IiLCAidmFsdWUiLCAidiIsICJodG1sIiwgInRhYmxlIiwgImVudHJpZXMiLCAiZW50cnkiLCAic291cmNlVmFsdWUiLCAidGFyZ2V0VmFsdWUiLCAib3V0Y29tZVZhcmlhYmxlIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiY29uc3VtZSIsICJpdGVtQ29udGV4dCIsICJzdGF0ZSIsICJjdXN0b21FbGVtZW50IiwgImNvbnN1bWUiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJzdGF0ZSIsICJRdGlSZXNwb25zZURlY2xhcmF0aW9uIiwgIlF0aVZhcmlhYmxlRGVjbGFyYXRpb24iLCAiX2EiLCAiX2IiLCAidmFsdWUiLCAidiIsICJodG1sIiwgInJlc3BvbnNlVmFyaWFibGUiLCAicmVzdWx0IiwgImNvcnJlY3RSZXNwb25zZSIsICJ2YWx1ZXMiLCAiaSIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgImNvbnN1bWUiLCAiaXRlbUNvbnRleHQiLCAic3RhdGUiLCAiY3VzdG9tRWxlbWVudCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpQ29tcGFuaW9uTWF0ZXJpYWxzSW5mbyIsICJMaXRFbGVtZW50IiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgIlF0aUNvbnRlbnRCb2R5IiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJMaXRFbGVtZW50IiwgImNzcyIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAiUXRpUnVicmljQmxvY2siLCAiTGl0RWxlbWVudCIsICJvbGQiLCAiZGlzYWJsZWQiLCAiY2xhc3NOYW1lIiwgImh0bWwiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJ3YXRjaCIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAiTGl0RWxlbWVudCIsICJwcm9wZXJ0eSIsICJkZWNpbWFsU2VwYXJhdG9yIiwgImNvbnZlcnROdW1iZXJUb1VuaXZlcmFsRm9ybWF0IiwgIm51bWJlciIsICJkU2VwIiwgIklzTnVsbE9yVW5kZWZpbmVkIiwgInZhbHVlIiwgInJlbW92ZURvdWJsZVNsYXNoZXMiLCAic3RyIiwgIlF0aUZlZWRiYWNrIiwgIkxpdEVsZW1lbnQiLCAib3V0Y29tZUlkZW50aWZpZXIiLCAib3V0Y29tZVZhcmlhYmxlIiwgImlzRm91bmQiLCAiSXNOdWxsT3JVbmRlZmluZWQiLCAidmFsdWUiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgIlF0aUZlZWRiYWNrQmxvY2siLCAiUXRpRmVlZGJhY2siLCAiaHRtbCIsICJfY2hhbmdlZFByb3BlcnRpZXMiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpRmVlZGJhY2tJbmxpbmUiLCAiUXRpRmVlZGJhY2siLCAiaHRtbCIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlNb2RhbEZlZWRiYWNrIiwgIlF0aUZlZWRiYWNrIiwgImh0bWwiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgImlmRGVmaW5lZCIsICJwcm9wZXJ0eSIsICJMaXRFbGVtZW50IiwgIkludGVyYWN0aW9uIiwgIkxpdEVsZW1lbnQiLCAidmFsIiwgInZhbHVlIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJyZWYiLCAiY3JlYXRlUmVmIiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAic3RhdGUiLCAiUXRpRXh0ZW5kZWRUZXh0SW50ZXJhY3Rpb24iLCAiSW50ZXJhY3Rpb24iLCAiY3JlYXRlUmVmIiwgIm9sZCIsICJkaXNhYmxlZCIsICJjbGFzc05hbWUiLCAibnJSb3dzIiwgInZhbHVlIiwgImNzcyIsICJodG1sIiwgInJlZiIsICJldmVudCIsICJpZkRlZmluZWQiLCAiaW5wdXQiLCAidGV4dCIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAic3RhdGUiLCAid2F0Y2giLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgInN0YXRlIiwgImlmRGVmaW5lZCIsICJjcmVhdGVSZWYiLCAibGl2ZVF1ZXJ5IiwgInF1ZXJ5U2VsZWN0b3IiLCAib3B0aW9ucyIsICJvYnNlcnZlciIsICJyZXNvbHZlZE9wdGlvbnMiLCAiX19zcHJlYWRWYWx1ZXMiLCAicHJvdG8iLCAiZGVjb3JhdGVkRm5OYW1lIiwgImNvbm5lY3RlZENhbGxiYWNrIiwgImRpc2Nvbm5lY3RlZENhbGxiYWNrIiwgIl9hIiwgImNhbGxiYWNrIiwgIm11dGF0aW9uTGlzdCIsICJlbGVtZW50c1RvV2F0Y2giLCAibXV0YXRpb24iLCAiYWRkZWROb2RlcyIsICJlIiwgInJlbW92ZWROb2RlcyIsICJuIiwgImVsZW1lbnRzQWRkZWQiLCAiUXRpVGV4dEVudHJ5SW50ZXJhY3Rpb24iLCAiSW50ZXJhY3Rpb24iLCAiY3JlYXRlUmVmIiwgIm9sZCIsICJjbGFzc2VzIiwgImNsYXNzTmFtZSIsICJuclJvd3MiLCAidmFsdWUiLCAiY3NzIiwgImh0bWwiLCAiZXZlbnQiLCAiaWZEZWZpbmVkIiwgImlucHV0IiwgInRleHQiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgInN0YXRlIiwgIndhdGNoIiwgImN1c3RvbUVsZW1lbnQiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgIkNob2ljZXMiLCAiSW50ZXJhY3Rpb24iLCAiXyIsICJkaXNhYmxlZCIsICJjaCIsICJyZWFkb25seSIsICJhY2MiLCAidmFsIiwgInJlc3BvbnNlVmFsdWUiLCAicmVzcG9uc2VWYWx1ZUFycmF5IiwgImNlIiwgInJ2IiwgImNob2ljZUVsZW1lbnQiLCAiZXZlbnQiLCAic2VsZWN0ZWRJZGVudGlmaWVycyIsICJyZXN1bHQiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgIndhdGNoIiwgIlF0aUhvdHRleHRJbnRlcmFjdGlvbiIsICJDaG9pY2VzIiwgImh0bWwiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJzdGF0ZSIsICJ1bnNhZmVIVE1MIiwgIlF0aUlubGluZUNob2ljZUludGVyYWN0aW9uIiwgIkludGVyYWN0aW9uIiwgImNzcyIsICJodG1sIiwgIm9wdGlvbiIsICJ1bnNhZmVIVE1MIiwgImNob2ljZXMiLCAiY2hvaWNlIiwgInNlbGVjdGVkT3B0aW9uIiwgImkiLCAiX19zcHJlYWRQcm9wcyIsICJfX3NwcmVhZFZhbHVlcyIsICJ2YWx1ZSIsICJldmVudCIsICJzZWxlY3RlZE9wdGlvblZhbHVlIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJzdGF0ZSIsICJwcm9wZXJ0eSIsICJjdXN0b21FbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAiaHRtbCIsICJjc3MiLCAicXRpX2Nob2ljZV9pbnRlcmFjdGlvbl9zdHlsZXNfZGVmYXVsdCIsICJRdGlDaG9pY2VJbnRlcmFjdGlvbiIsICJDaG9pY2VzIiwgImh0bWwiLCAicXRpX2Nob2ljZV9pbnRlcmFjdGlvbl9zdHlsZXNfZGVmYXVsdCIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpT3V0Y29tZVByb2Nlc3NpbmciLCAiTGl0RWxlbWVudCIsICJodG1sIiwgImxvZ2ljIiwgIlF0aU91dGNvbWVQcm9jZXNzaW5nUHJvY2Vzc29yIiwgInJ1bGVzIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJydWxlIiwgImNzcyIsICJodG1sIiwgIkxpdEVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJtYXRjaENvcnJlY3QiLCAibWFwUmVzcG9uc2UiLCAibWFwUmVzcG9uc2VQb2ludCIsICJRdGlSZXNwb25zZVByb2Nlc3NpbmciLCAiTGl0RWxlbWVudCIsICJodG1sIiwgInJ1bGVzIiwgInJ1bGUiLCAiX2NoYW5nZWRQcm9wZXJ0aWVzIiwgInNwbGl0dGVkVGVtcGxhdGVOYW1lIiwgInRlbXBsYXRlTmFtZSIsICJtYXBSZXNwb25zZSIsICJtYXBSZXNwb25zZVBvaW50IiwgIm1hdGNoQ29ycmVjdCIsICJzdHJIVE1MIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJjdXN0b21FbGVtZW50IiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJRdGlSdWxlIiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlMb29rdXBPdXRjb21lVmFsdWUiLCAiUXRpUnVsZSIsICJpZGVudGlmaWVyIiwgIm91dGNvbWVWYXJpYWJsZSIsICJ2YWx1ZSIsICJjb252ZXJ0TnVtYmVyVG9Vbml2ZXJhbEZvcm1hdCIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiaHRtbCIsICJRdGlSZXNwb25zZUNvbmRpdGlvbiIsICJRdGlSdWxlIiwgImh0bWwiLCAiYnJhbmNoZXMiLCAiaSIsICJicmFuY2giLCAiUXRpU2V0T3V0Y29tZVZhbHVlIiwgIlF0aVJ1bGUiLCAib3V0Y29tZUlkZW50aWZpZXIiLCAiZXhwcmVzc2lvbiIsICJ2YWx1ZSIsICJRdGlTZXRPdXRjb21lVmFsdWVSdWxlIiwgInYiLCAiY29udmVydE51bWJlclRvVW5pdmVyYWxGb3JtYXQiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgIlF0aVJlc3BvbnNlRWxzZSIsICJzdWJSdWxlcyIsICJpIiwgImh0bWwiLCAiUXRpUmVzcG9uc2VJZiIsICJRdGlSZXNwb25zZUVsc2UiLCAicmVzdWx0IiwgImkiLCAiUXRpUmVzcG9uc2VFbHNlSWYiLCAiUXRpUmVzcG9uc2VJZiIsICJodG1sIiwgIkxpdEVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAic3RhdGUiLCAiUXRpRXhwcmVzc2lvbiIsICJMaXRFbGVtZW50IiwgImlkZW50aWZpZXIiLCAidmFsdWVzIiwgInYiLCAicmVzcG9uc2VWYXJpYWJsZSIsICJlcnJvciIsICJodG1sIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAic3RhdGUiLCAiUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiIsICJRdGlFeHByZXNzaW9uIiwgIlF0aUFuZCIsICJxdGlBbmRNaXhpbiIsICJRdGlDb25kaXRpb25FeHByZXNzaW9uIiwgIkJhc2UiLCAiY2hpbGRyZW4iLCAiYyIsICJjb25kaXRpb24iLCAidmFsdWUiLCAiZSIsICJRdGlBbmQiLCAicHJvcGVydHkiLCAiUXRpQmFzZVZhbHVlIiwgIlF0aUV4cHJlc3Npb24iLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgIlF0aUNvbnRhaW5zIiwgIlF0aUNvbmRpdGlvbkV4cHJlc3Npb24iLCAidmFsdWVzIiwgInZhbHVlMSIsICJ2YWx1ZTIiLCAicHJvamVjdGlvbjEiLCAicHJvamVjdGlvbjIiLCAieCIsICJRdGlDb3JyZWN0IiwgIlF0aUV4cHJlc3Npb24iLCAiaWRlbnRpZmllciIsICJyZXNwb25zZVZhcmlhYmxlIiwgInByb3BlcnR5IiwgIlF0aUVxdWFsUm91bmRlZCIsICJRdGlFeHByZXNzaW9uIiwgImZpZ3VyZXMiLCAidmFsdWVzIiwgInZhbHVlMSIsICJ2YWx1ZTIiLCAiZmxvYXQxIiwgImZsb2F0MiIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAicHJvcGVydHkiLCAiU2NvcmluZ0hlbHBlciIsICJ2YWx1ZTEiLCAidmFsdWUyIiwgImJhc2VUeXBlIiwgImludDEiLCAiaW50MiIsICJmbG9hdDEiLCAiZmxvYXQyIiwgInBhaXIxIiwgInBhaXIyIiwgIlF0aUVxdWFsIiwgIlF0aUV4cHJlc3Npb24iLCAidmFsdWVzIiwgInZhbHVlMSIsICJ2YWx1ZTIiLCAiU2NvcmluZ0hlbHBlciIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiUXRpR3QiLCAiUXRpRXhwcmVzc2lvbiIsICJ2YWx1ZXMiLCAidmFsdWUxIiwgInZhbHVlMiIsICJRdGlHdGUiLCAiUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiIsICJ2YWx1ZXMiLCAidmFsdWUxIiwgInZhbHVlMiIsICJRdGlJc051bGwiLCAiUXRpRXhwcmVzc2lvbiIsICJ2YXJpYWJsZXMiLCAidmFsdWUiLCAiUXRpTHQiLCAiUXRpRXhwcmVzc2lvbiIsICJ2YWx1ZXMiLCAidmFsdWUxIiwgInZhbHVlMiIsICJRdGlMdGUiLCAiUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiIsICJ2YWx1ZXMiLCAidmFsdWUxIiwgInZhbHVlMiIsICJwcm9wZXJ0eSIsICJRdGlNYXBSZXNwb25zZSIsICJRdGlFeHByZXNzaW9uIiwgInJlc3BvbnNlIiwgIm1hcHBpbmciLCAiY2FuZGlkYXRlUmVzcG9uc2VzIiwgInJlc3VsdCIsICJjYW5kaWRhdGVSZXNwb25zZSIsICJtYXBwZWRWYWx1ZSIsICJlbnRyeSIsICJTY29yaW5nSGVscGVyIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJwcm9wZXJ0eSIsICJMaXRFbGVtZW50IiwgIlF0aU1hcHBpbmciLCAiTGl0RWxlbWVudCIsICJlbCIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiUXRpTWF0Y2giLCAiX1F0aU1hdGNoIiwgIlF0aUV4cHJlc3Npb24iLCAidmFsdWVzIiwgInZhbHVlVG9NYXAiLCAiY29ycmVjdFZhbHVlSW5mbyIsICJfYSIsICJTY29yaW5nSGVscGVyIiwgImFuc3dlckluZGV4IiwgImNvcnJlY3RBbnN3ZXIiLCAiY3VycmVudFZhbHVlVG9NYXAiLCAibWF0Y2hpbmdWYWx1ZSIsICJtdiIsICJRdGlNZW1iZXIiLCAiUXRpRXhwcmVzc2lvbiIsICJ2YWx1ZXMiLCAidmFsdWUxIiwgInZhbHVlMiIsICJwcm9qZWN0aW9uMSIsICJRdGlNdWx0aXBsZSIsICJRdGlFeHByZXNzaW9uIiwgInZhcmlhYmxlcyIsICJ2YXJpYWJsZSIsICJodG1sIiwgIlF0aU5vdCIsICJRdGlFeHByZXNzaW9uIiwgImh0bWwiLCAiUXRpT3IiLCAiUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiIsICJjIiwgImNvbmRpdGlvbiIsICJ2YWx1ZSIsICJRdGlPcmRlcmVkIiwgIlF0aUV4cHJlc3Npb24iLCAidmFyaWFibGVzIiwgInZhcmlhYmxlIiwgImNvbnN1bWUiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgInByb3BlcnR5IiwgInN0YXRlIiwgIlF0UHJpbnRlZFZhcmlhYmxlIiwgIkxpdEVsZW1lbnQiLCAiX2EiLCAiX2IiLCAidmFsdWUiLCAidiIsICJodG1sIiwgImFzc2Vzc21lbnRJdGVtIiwgImlkZW50aWZpZXIiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgImNvbnN1bWUiLCAiaXRlbUNvbnRleHQiLCAic3RhdGUiLCAiUXRpUHJvZHVjdCIsICJRdGlFeHByZXNzaW9uIiwgImFjY3VtdWxhdG9yIiwgImN1cnJlbnRWYWx1ZSIsICJlcnJvciIsICJwcm9wZXJ0eSIsICJRdGlTdHJpbmdNYXRjaCIsICJRdGlFeHByZXNzaW9uIiwgInZhbHVlcyIsICJ2YWx1ZTEiLCAidmFsdWUyIiwgInYxIiwgInYyIiwgIlNjb3JpbmdIZWxwZXIiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgIlF0aVN1bSIsICJRdGlFeHByZXNzaW9uIiwgIlF0aVN1bUV4cHJlc3Npb24iLCAiZXhwcmVzc2lvbnMiLCAiYyIsICJ2YWx1ZSIsICJhIiwgImIiLCAiUXRpVmFyaWFibGUiLCAiUXRpRXhwcmVzc2lvbiIsICJpZGVudGlmaWVyIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJzdGF0ZSIsICJRdGlQb3J0YWJsZUN1c3RvbUludGVyYWN0aW9uIiwgIkludGVyYWN0aW9uIiwgInVybCIsICJiYXNlVXJsIiwgInJlcXVpcmVDb25maWciLCAibW9kdWxlQ29uZyIsICJtb2R1bGVJZCIsICJlIiwgInBhdGgiLCAiYmFzZVBhdGgiLCAiY29uZmlnIiwgInByaW1hcnlDb25maWciLCAiZmFsbGJhY2siLCAiX2EiLCAiZmFpbGVkVG9SZXNvbHZlIiwgInBhdGhXaXRoRXh0ZW5zaW9uIiwgImZhbGxiYWNrQ29uZmlnIiwgImlucHV0IiwgInRvcExldmVsS2V5IiwgIm5lc3RlZE9iamVjdCIsICJuZXN0ZWRLZXkiLCAidmFsdWUiLCAicmVzcG9uc2UiLCAibmV3UmVzcG9uc2UiLCAic3RyaW5naWZpZWQiLCAidmFsIiwgIm5vZGUiLCAiYSIsICJnZXRQcm9wZXJ0eVZhbHVlIiwgImVsIiwgInByb3BlcnR5IiwgImtleSIsICJjaGlsZHJlbiIsICJhbGxLZXkiLCAiYyIsICJrIiwgImdldENoaWxkUHJvcGVydGllcyIsICJwcm9wZXJ0aWVzIiwgImNoaWxkIiwgIl9fc3ByZWFkVmFsdWVzIiwgInBjaSIsICJ0eXBlIiwgImRvbSIsICJhY2MiLCAibGluayIsICJzdHlsZXMiLCAicmVxdWlyZSIsICJjdHhBIiwgIndhc1ByZXZpb3VzbHlMb2FkZWQiLCAiZXJyIiwgIm1vZHVsZVJlc29sdXRpb25QYXRoIiwgIm1vZHVsZVJlc29sdXRpb25GYWxsYmFja1BhdGgiLCAiaW50ZXJhY3Rpb25Nb2R1bGVzIiwgIm1vZHVsZXMiLCAibW9kdWxlIiwgInByaW1hcnlQYXRoIiwgImZhbGxiYWNrUGF0aCIsICJfX3NwcmVhZFByb3BzIiwgInN0ciIsICJodG1sIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJzdGF0ZSIsICJjdXN0b21FbGVtZW50IiwgIkxpdEVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJzdGF0ZSIsICJUb3VjaERyYWdBbmREcm9wIiwgIl9Ub3VjaERyYWdBbmREcm9wIiwgInR5cGUiLCAidmFsIiwgImUiLCAiX3RvdWNoZXMiLCAiZWxlbWVudFN0eWxlcyIsICJzdHlsZSIsICJfdGhpcyIsICJ0YXJnZXQiLCAiZHJhZ2dhYmxlcyIsICJlbCIsICJ4IiwgInkiLCAiX2EiLCAiZXZlbnQiLCAicG9pbnRGcm9tVG91Y2hFdmVudCIsICJjdXN0b21FbCIsICJwYWdlIiwgInRvdWNoIiwgImNsaWVudFJlY3QiLCAiZXZlbnRUeXBlIiwgImJ1YmJsZSIsICJwcm9wZXJ0eSIsICJEcm9wcGFibGVzTWl4aW4iLCAic3VwZXJDbGFzcyIsICJkcm9wcGFibGVzSW5TaGFkb3dSb290IiwgImRyb3BwYWJsZXNTZWxlY3RvciIsICJEcm9wcGFibGVzRWxlbWVudCIsICJjaGFuZ2VkUHJvcHMiLCAiZHJvcHBhYmxlcyIsICJkIiwgImRyb3BwYWJsZSIsICJtdXRhdGlvbnMiLCAibXV0YXRpb24iLCAiX2EiLCAiZXYiLCAiZHJhZ2dhYmxlSW5MaWdodERvbSIsICJkcmFnZ2FibGUiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgIkZsaXBwYWJsZXNNaXhpbiIsICJzdXBlckNsYXNzIiwgImRyb3BwYWJsZXNTZWwiLCAiZHJhZ2dhYmxlc1NlbCIsICJGbGlwcGFibGVzRWxlbWVudCIsICJwcm9wZXJ0eSIsICJEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4iLCAic3VwZXJDbGFzcyIsICJkcmFnZ2FibGVzU2VsZWN0b3IiLCAiZHJvcHBhYmxlc0luU2hhZG93Um9vdCIsICJkcm9wcGFibGVzU2VsZWN0b3IiLCAiRHJhZ0Ryb3BJbnRlcmFjdGlvbkVsZW1lbnQiLCAiRmxpcHBhYmxlc01peGluIiwgIkRyb3BwYWJsZXNNaXhpbiIsICJkcmFnc0FkZGVkIiwgImRyYWdzUmVtb3ZlZCIsICJlbGVtIiwgImV2IiwgImRyYWdnYWJsZSIsICJwb3NpdGlvbiIsICJpbmRleCIsICJpbnRlcmFjdGlvbiIsICJnYXBUZXh0IiwgIm9sZCIsICJkcmFnT3B0aW9ucyIsICJkaXNhYmxlZCIsICJzIiwgImNoIiwgInJlYWRvbmx5IiwgImNoYW5nZWRQcm9wcyIsICJUb3VjaERyYWdBbmREcm9wIiwgInNhdmUiLCAiY2hpbGRyZW4iLCAiZCIsICJkaXNhYmxlIiwgInJlc3BvbnNlIiwgImRyb3BJZCIsICJkcmFnSWRzIiwgImRyb3BwYWJsZSIsICJkcm9wIiwgImRyYWdJZCIsICJhc3NvY2lhdGlvbnMiLCAiX2EiLCAicmVzcG9uc2VTdHJpbmciLCAiX19kZWNvcmF0ZUNsYXNzIiwgImxpdmVRdWVyeSIsICJwcm9wZXJ0eSIsICJ3YXRjaCIsICJRdGlBc3NvY2lhdGVJbnRlcmFjdGlvbiIsICJEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4iLCAiTGl0RWxlbWVudCIsICJodG1sIiwgIl8iLCAiaW5kZXgiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJzdGF0ZSIsICJjdXN0b21FbGVtZW50IiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJzdGF0ZSIsICJRdGlDdXN0b21JbnRlcmFjdGlvbiIsICJJbnRlcmFjdGlvbiIsICJ1cmlUb01hbmlmZXN0IiwgInJlbW92ZURvdWJsZVNsYXNoZXMiLCAicmVzcG9uc2UiLCAiZGF0YSIsICJlcnIiLCAiaWZyYW1lIiwgImlmcmFtZVdpbiIsICJpZnJhbWVEb2MiLCAiaWZyYW1lc0luU2hhZG93Um9vdCIsICJvdXRlcklGcmFtZXMiLCAiaWZyYW1lU3JjIiwgIm91dGVyRG9jIiwgImUiLCAiaW5kZXgiLCAiaWZyYW1lRG9jdW1lbnQiLCAiaWZyYW1lcyIsICJuZXN0ZWREb2MiLCAidHlwZSIsICJldmVudCIsICJtZWRpYURhdGEiLCAibWVkaWEiLCAidmFsIiwgImh0bWwiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgInN0YXRlIiwgImN1c3RvbUVsZW1lbnQiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgIlF0aUVuZEF0dGVtcHRJbnRlcmFjdGlvbiIsICJJbnRlcmFjdGlvbiIsICJ2YWwiLCAiaHRtbCIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpR2FwTWF0Y2hJbnRlcmFjdGlvbiIsICJEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4iLCAiTGl0RWxlbWVudCIsICJodG1sIiwgInZhbHVlIiwgIm1hdGNoZXMiLCAicmVzcG9uc2UiLCAieCIsICJzcGxpdCIsICJnYXAiLCAiaW5kZXgiLCAiX2EiLCAiX2IiLCAiX2MiLCAiX2QiLCAiaWRlbnRpZmllciIsICJ0ZXh0SWRlbnRpZmllciIsICJ0ZXh0IiwgInRleHRTcGFuIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJzdmciLCAiY3VzdG9tRWxlbWVudCIsICJxdWVyeSIsICJxdWVyeUFzc2lnbmVkRWxlbWVudHMiLCAic3RhdGUiLCAiaWZEZWZpbmVkIiwgInJlcGVhdCIsICJwb3NpdGlvbkhvdHNwb3RzIiwgInNoYXBlIiwgImNvb3Jkc051bWJlciIsICJpbWciLCAiaG90c3BvdCIsICJjZW50ZXJYIiwgImNlbnRlclkiLCAicmFkaXVzIiwgImNlbnRlclhQZXIiLCAiY2VudGVyWVBlciIsICJyYWRpdXNQZXIiLCAibGVmdFgiLCAidG9wWSIsICJyaWdodFgiLCAiYm90dG9tWSIsICJsZWZ0WFBlciIsICJ0b3BZUGVyIiwgInJpZ2h0WFBlciIsICJib3R0b21ZUGVyIiwgInBvbHljb29yZHMiLCAiYWNjIiwgImN1cnJlbnRWYWx1ZSIsICJjdXJyZW50SW5kZXgiLCAicG9seUMiLCAibGFzdFZhbCIsICJwb2ludCIsICJwb2x5RCIsICJwIiwgIlF0aUdyYXBoaWNBc3NvY2lhdGVJbnRlcmFjdGlvbiIsICJJbnRlcmFjdGlvbiIsICJ2YWwiLCAiX2EiLCAiX2IiLCAiX2MiLCAiX2QiLCAiaHRtbCIsICJpZkRlZmluZWQiLCAicmVwZWF0IiwgImxpbmUiLCAiaW5kZXgiLCAic3ZnIiwgImUiLCAiXyIsICJpIiwgImltZyIsICJob3RzcG90IiwgImNvb3JkcyIsICJzaGFwZSIsICJjb29yZHNOdW1iZXIiLCAicyIsICJwb3NpdGlvbkhvdHNwb3RzIiwgImV2ZW50IiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAic3RhdGUiLCAicXVlcnkiLCAicXVlcnlBc3NpZ25lZEVsZW1lbnRzIiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgIlF0aUdyYXBoaWNHYXBNYXRjaEludGVyYWN0aW9uIiwgIkRyYWdEcm9wSW50ZXJhY3Rpb25NaXhpbiIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAiZSIsICJpbWciLCAiaG90c3BvdCIsICJjb29yZHMiLCAic2hhcGUiLCAiY29vcmRzTnVtYmVyIiwgInMiLCAiY2VudGVyWCIsICJjZW50ZXJZIiwgInJhZGl1cyIsICJsZWZ0WCIsICJ0b3BZIiwgInJpZ2h0WCIsICJib3R0b21ZIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgIlF0aUdyYXBoaWNPcmRlckludGVyYWN0aW9uIiwgIkNob2ljZXMiLCAiaHRtbCIsICJlIiwgImlkZW50aWZpZXIiLCAiaG90c3BvdCIsICJlbCIsICJtYXhTZWxlY3Rpb24iLCAiaSIsICJpbWciLCAiY29vcmRzIiwgInNoYXBlIiwgImNvb3Jkc051bWJlciIsICJzIiwgInBvc2l0aW9uSG90c3BvdHMiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpSG90c3BvdEludGVyYWN0aW9uIiwgIkNob2ljZXMiLCAiaHRtbCIsICJlIiwgImltZyIsICJob3RzcG90IiwgImNvb3JkcyIsICJzaGFwZSIsICJjb29yZHNOdW1iZXIiLCAicyIsICJwb3NpdGlvbkhvdHNwb3RzIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJodG1sIiwgIkxpdEVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJzdGF0ZSIsICJ1bnNhZmVIVE1MIiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgIlF0aVNpbXBsZUFzc29jaWFibGVDaG9pY2UiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJjdXN0b21FbGVtZW50IiwgIlF0aU1hdGNoSW50ZXJhY3Rpb24iLCAiRHJhZ0Ryb3BJbnRlcmFjdGlvbk1peGluIiwgIkxpdEVsZW1lbnQiLCAicmFkaW8iLCAiY2hlY2tib3giLCAidmFsdWUiLCAibmFtZSIsICJ0eXBlIiwgInYiLCAicmVzcG9uc2VWYWx1ZSIsICJodG1sIiwgImNvbCIsICJpIiwgInVuc2FmZUhUTUwiLCAicm93IiwgInJJbmRleCIsICJjSW5kZXgiLCAicm93SWQiLCAiY29sSWQiLCAic2VsZWN0ZWRJblJvd0NvdW50IiwgImNoZWNrZWQiLCAicGFydCIsICJkaXNhYmxlIiwgImUiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInN0YXRlIiwgInByb3BlcnR5IiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlNZWRpYUludGVyYWN0aW9uIiwgIkludGVyYWN0aW9uIiwgInZhbCIsICJfX3NwcmVhZFByb3BzIiwgIl9fc3ByZWFkVmFsdWVzIiwgImh0bWwiLCAibWVkaWFPYmplY3QiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgIkxpdEVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJRdGlPcmRlckludGVyYWN0aW9uIiwgIkRyYWdEcm9wSW50ZXJhY3Rpb25NaXhpbiIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAiXyIsICJpIiwgImVsIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiY3VzdG9tRWxlbWVudCIsICJMaXRFbGVtZW50IiwgImNzcyIsICJodG1sIiwgIlF0aVNQb3NpdGlvbk9iamVjdEludGVyYWN0aW9uIiwgIkxpdEVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlQb3NpdGlvbk9iamVjdFN0YWdlIiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJldmVudCIsICJkZWx0YVgiLCAiZGVsdGFZIiwgImEiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAic3RhdGUiLCAicmVwZWF0IiwgInN0eWxlTWFwIiwgIlF0aVNlbGVjdFBvaW50SW50ZXJhY3Rpb24iLCAiSW50ZXJhY3Rpb24iLCAiaHRtbCIsICJyZXBlYXQiLCAicG9pbnQiLCAiaW5kZXgiLCAic3R5bGVNYXAiLCAiZSIsICJfIiwgImkiLCAidmFsIiwgImV2ZW50IiwgIngiLCAieSIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgInN0YXRlIiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAibm90aGluZyIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgInF1ZXJ5IiwgIlF0aVNsaWRlckludGVyYWN0aW9uIiwgIkludGVyYWN0aW9uIiwgIm9sZCIsICJkaXNhYmxlZCIsICJyZWFkb25seSIsICJ2YWx1ZSIsICJteVJlc3BvbnNlIiwgInZhbHVlUGVyY2VudGFnZSIsICJodG1sIiwgIm5vdGhpbmciLCAiZXZlbnQiLCAiaGFuZGxlVG91Y2hNb3ZlIiwgIngiLCAiZGlmZlgiLCAiaGFuZGxlVG91Y2hFbmQiLCAiaGFuZGxlTW91c2VNb3ZlIiwgImhhbmRsZU1vdXNlVXAiLCAidmFsdWVOb3ciLCAicm91bmRlZFN0ZXBWYWx1ZSIsICJfdG91Y2hNb3ZlIiwgImV2dCIsICJ0b3VjaCIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInF1ZXJ5IiwgInByb3BlcnR5IiwgIndhdGNoIiwgImN1c3RvbUVsZW1lbnQiLCAiY29uc3VtZSIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJzdGF0ZSIsICJRdGlDdXN0b21PcGVyYXRvciIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAiZXZlbnQiLCAiX2EiLCAiX2IiLCAiX2MiLCAiY29tbWVudE5vZGUiLCAibm9kZSIsICJlIiwgImZuIiwgInJlc3BvbnNlSWRlbnRpZmllciIsICJ2IiwgIml0ZW0iLCAidmFyaWFibGVJZGVudGlmaWVyIiwgIm91dGNvbWVJZGVudGlmaWVyIiwgInZhbHVlIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjb25zdW1lIiwgIml0ZW1Db250ZXh0IiwgInN0YXRlIiwgImN1c3RvbUVsZW1lbnQiLCAiTGl0RWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgIlF0aUFzc29jaWFibGVIb3RzcG90IiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiaHRtbCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAiUXRpR2FwIiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiY3VzdG9tRWxlbWVudCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAiUXRpR2FwSW1nIiwgIkxpdEVsZW1lbnQiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgImN1c3RvbUVsZW1lbnQiLCAiaHRtbCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAiUXRpR2FwVGV4dCIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAiUXRpSG90c3BvdENob2ljZSIsICJRdGlDaG9pY2UiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJjdXN0b21FbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAiaHRtbCIsICJRdGlIb3R0ZXh0IiwgIlF0aUNob2ljZSIsICJodG1sIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgIkxpdEVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlJbmxpbmVDaG9pY2UiLCAiTGl0RWxlbWVudCIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgIlF0aVNpbXBsZUNob2ljZSIsICJRdGlDaG9pY2UiLCAiaHRtbCIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiXQp9Cg==
|