@citolab/qti-components 6.9.1-16 → 6.9.1-17

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.
@@ -1,20 +1,20 @@
1
- import{a as f,b as x,c as i,d as Mt}from"../chunk-H4VLZ2F7.js";import{provide as cr}from"@lit/context";import{LitElement as pr,html as dr}from"lit";import{customElement as ur,property as W}from"lit/decorators.js";function b(l,s){let e=f({waitUntilFirstUpdate:!1},s);return(t,r)=>{let{update:o}=t,n=Array.isArray(l)?l:[l];t.update=function(a){n.forEach(c=>{let p=c;if(a.has(p)){let d=a.get(p),m=this[p];d!==m&&(!e.waitUntilFirstUpdate||this.hasUpdated)&&this[r](d,m)}}),o.call(this,a)}}}import{createContext as lr}from"@lit/context";var Lt=[{identifier:"completionStatus",cardinality:"single",baseType:"string",value:"unknown",type:"outcome"},{identifier:"numAttempts",cardinality:"single",baseType:"integer",value:"0",type:"response"}],S=lr("item");var _=class extends pr{constructor(){super();this.identifier="";this.adaptive="false";this.timeDependent="false";this._handleDisabledChange=(e,t)=>{this._interactionElements.forEach(r=>r.disabled=t)};this._handleReadonlyChange=(e,t)=>this._interactionElements.forEach(r=>r.readonly=t);this._context={identifier:this.getAttribute("identifier"),variables:Lt};this._initialContext=x(f({},this._context),{variables:this._context.variables});this._feedbackElements=[];this._interactionElements=[];this.addEventListener("qti-register-variable",e=>{this._context=x(f({},this._context),{variables:[...this._context.variables,e.detail.variable]}),this._initialContext=this._context,e.stopPropagation()}),this.addEventListener("qti-register-feedback",e=>{e.stopPropagation();let t=e.detail;this._feedbackElements.push(t),t.checkShowFeedback(t.outcomeIdentifier)}),this.addEventListener("qti-register-interaction",e=>{e.stopPropagation(),this._interactionElements.push(e.target)}),this.addEventListener("end-attempt",e=>{let{responseIdentifier:t,countAttempt:r}=e.detail;this.updateResponseVariable(t,"true"),this.processResponse(r)}),this.addEventListener("qti-set-outcome-value",e=>{let{outcomeIdentifier:t,value:r}=e.detail;this.updateOutcomeVariable(t,r),e.stopPropagation()}),this.addEventListener("qti-interaction-response",this.handleUpdateResponseVariable)}get variables(){return this._context.variables.map(e=>({identifier:e.identifier,value:e.value,type:e.type}))}set variables(e){if(!Array.isArray(e)||e.some(t=>!("identifier"in t))){console.warn("variables property should be an array of VariableDeclaration");return}this._context=x(f({},this._context),{variables:this._context.variables.map(t=>{let r=e.find(o=>o.identifier===t.identifier);return r?f(f({},t),r):t})}),this._context.variables.forEach(t=>{if(t.type==="response"){let r=this._interactionElements.find(o=>o.responseIdentifier===t.identifier);r&&(r.response=t.value)}t.type==="outcome"&&this._feedbackElements.forEach(r=>r.checkShowFeedback(t.identifier))})}async connectedCallback(){super.connectedCallback(),await this.updateComplete,this._emit("qti-assessment-item-connected",this)}set responses(e){if(e)for(let t of e){this.getResponse(t.responseIdentifier)&&this.updateResponseVariable(t.responseIdentifier,t.response);let o=this._interactionElements.find(n=>n.getAttribute("response-identifier")===t.responseIdentifier);o&&(o.response=t.response)}}render(){return dr`<slot></slot>`}showCorrectResponse(e){let r=this._context.variables.filter(o=>"correctResponse"in o&&o.correctResponse).map(o=>({responseIdentifier:o.identifier,response:o.correctResponse}));for(let o of r){let n=this._interactionElements.find(a=>a.getAttribute("response-identifier")===o.responseIdentifier);n&&(n.correctResponse=e?o.response:"")}}processResponse(e=!0){var r;let t=this.querySelector("qti-response-processing");return!t||!t.process?!1:(t.process(),this.adaptive==="false"&&this.updateOutcomeVariable("completionStatus",this._getCompletionStatus()),e&&this.updateOutcomeVariable("numAttempts",(+((r=this._context.variables.find(o=>o.identifier==="numAttempts"))==null?void 0:r.value)+1).toString()),this._emit("qti-response-processed"),!0)}resetResponses(){this._context=this._initialContext}getResponse(e){return this.getVariable(e)}getOutcome(e){return this.getVariable(e)}getVariable(e){return this._context.variables.find(t=>t.identifier===e)||null}handleUpdateResponseVariable(e){let{responseIdentifier:t,response:r}=e.detail;this.updateResponseVariable(t,r)}updateResponseVariable(e,t){this._context=x(f({},this._context),{variables:this._context.variables.map(r=>r.identifier!==e?r:x(f({},r),{value:t}))}),this._emit("qti-interaction-changed",{item:this.identifier,responseIdentifier:e,response:Array.isArray(t)?[...t]:t}),this.adaptive==="false"&&this.updateOutcomeVariable("completionStatus",this._getCompletionStatus())}updateOutcomeVariable(e,t){var o;let r=this.getOutcome(e);if(!r){console.warn(`Can not set qti-outcome-identifier: ${e}, it is not available`);return}this._context=x(f({},this._context),{variables:this._context.variables.map(n=>n.identifier!==e?n:x(f({},n),{value:r.cardinality==="single"?t:[...n.value,t]}))}),this._feedbackElements.forEach(n=>n.checkShowFeedback(e)),this._emit("qti-outcome-changed",{item:this.identifier,outcomeIdentifier:e,value:(o=this._context.variables.find(n=>n.identifier===e))==null?void 0:o.value})}_getCompletionStatus(){return this._interactionElements.every(e=>e.validate())?"completed":this._interactionElements.some(e=>e.validate())?"incomplete":"not_attempted"}_emit(e,t=null){this.dispatchEvent(new CustomEvent(e,{bubbles:!0,composed:!0,detail:t}))}};i([W({type:String})],_.prototype,"title",2),i([W({type:String})],_.prototype,"identifier",2),i([W({type:String})],_.prototype,"adaptive",2),i([W({type:String})],_.prototype,"timeDependent",2),i([W({type:Boolean})],_.prototype,"disabled",2),i([b("disabled",{waitUntilFirstUpdate:!0})],_.prototype,"_handleDisabledChange",2),i([W({type:Boolean})],_.prototype,"readonly",2),i([b("readonly",{waitUntilFirstUpdate:!0})],_.prototype,"_handleReadonlyChange",2),i([cr({context:S})],_.prototype,"_context",2),_=i([ur("qti-assessment-item")],_);import{LitElement as mr}from"lit";import{customElement as hr,property as Nt}from"lit/decorators.js";var z=class extends mr{constructor(){super(...arguments);this.identifier="";this.href=""}async connectedCallback(){super.connectedCallback();let e=new Event("qti-assessment-stimulus-ref-connected",{cancelable:!0,bubbles:!0});if(this.dispatchEvent(e)){let o=this.closest("qti-assessment-item").querySelector(`[data-stimulus-idref=${this.identifier}]`);o?await this.loadAndAppendStimulus(o):console.warn(`Stimulus with data-stimulus-idref ${this.identifier} not found`)}}async loadAndAppendStimulus(e){let t=this.href.substring(0,this.href.lastIndexOf("/")),r=await Mt().load(this.href).then(o=>o.path(t).htmldoc());if(r){let o=r.querySelectorAll("qti-stimulus-body, qti-stylesheet");e.append(...o)}}};i([Nt({type:String})],z.prototype,"identifier",2),i([Nt({type:String})],z.prototype,"href",2),z=i([hr("qti-assessment-stimulus-ref")],z);import{LitElement as fr,html as gr}from"lit";import{property as oe}from"lit/decorators.js";var br={SPACE:32},C=class extends fr{constructor(){super(...arguments);this.tabindex=0;this.disabled=!1;this.readonly=!1;this.checked=!1}handleDisabledChange(e,t){t?(this.tabindex=void 0,this.blur()):this.tabIndex=0}connectedCallback(){super.connectedCallback(),this.addEventListener("keyup",this._onKeyUp),this.addEventListener("click",this._onClick),this.dispatchEvent(new CustomEvent("qti-register-choice",{bubbles:!0,cancelable:!1,composed:!0}))}disconnectedCallback(){this.removeEventListener("keyup",this._onKeyUp),this.removeEventListener("click",this._onClick),this.dispatchEvent(new CustomEvent("qti-loose-choice",{bubbles:!0,cancelable:!1,composed:!0}))}reset(){this.checked=!1,this.disabled=!1}_onKeyUp(e){if(!e.altKey)switch(e.keyCode){case br.SPACE:e.preventDefault(),this._toggleChecked();break;default:}}_onClick(){this._toggleChecked()}_toggleChecked(){this.disabled||this.readonly||(this.checked=!this.checked,this.dispatchEvent(new CustomEvent("qti-choice-element-selected",{bubbles:!0,cancelable:!1,composed:!0,detail:{identifier:this.identifier,checked:this.checked}})))}validateAllProps(){return!!this.getAttribute("identifier")}render(){return this.validateAllProps()||console.warn(`Invalid props for ${this.outerHTML}`,"missing identifier"),gr` <slot></slot> `}};i([oe({type:String})],C.prototype,"identifier",2),i([oe({type:Number,reflect:!0})],C.prototype,"tabindex",2),i([oe({reflect:!0,type:Boolean,attribute:"aria-disabled",converter:{toAttribute:e=>e}})],C.prototype,"disabled",2),i([oe({reflect:!0,type:Boolean,attribute:"aria-readonly",converter:{toAttribute:e=>e}})],C.prototype,"readonly",2),i([oe({reflect:!0,type:Boolean,attribute:"aria-checked",converter:{toAttribute:e=>e}})],C.prototype,"checked",2),i([b("disabled",{waitUntilFirstUpdate:!0})],C.prototype,"handleDisabledChange",1);import{customElement as yr}from"lit/decorators.js";import{html as xr,LitElement as Er}from"lit";import{css as vr}from"lit";var Ht=vr`
1
+ import{a as f,b as C,c as i,d as Lt}from"../chunk-H4VLZ2F7.js";import{provide as cr}from"@lit/context";import{LitElement as pr,html as dr}from"lit";import{customElement as ur,property as W}from"lit/decorators.js";function b(l,s){let e=f({waitUntilFirstUpdate:!1},s);return(t,r)=>{let{update:o}=t,n=Array.isArray(l)?l:[l];t.update=function(a){n.forEach(c=>{let p=c;if(a.has(p)){let d=a.get(p),m=this[p];d!==m&&(!e.waitUntilFirstUpdate||this.hasUpdated)&&this[r](d,m)}}),o.call(this,a)}}}import{createContext as lr}from"@lit/context";var Mt=[{identifier:"completionStatus",cardinality:"single",baseType:"string",value:"unknown",type:"outcome"},{identifier:"numAttempts",cardinality:"single",baseType:"integer",value:"0",type:"response"}],S=lr("item");var _=class extends pr{constructor(){super();this.identifier="";this.adaptive="false";this.timeDependent="false";this._handleDisabledChange=(e,t)=>{this._interactionElements.forEach(r=>r.disabled=t)};this._handleReadonlyChange=(e,t)=>this._interactionElements.forEach(r=>r.readonly=t);this._context={identifier:this.getAttribute("identifier"),variables:Mt};this._initialContext=C(f({},this._context),{variables:this._context.variables});this._feedbackElements=[];this._interactionElements=[];this.addEventListener("qti-register-variable",e=>{this._context=C(f({},this._context),{variables:[...this._context.variables,e.detail.variable]}),this._initialContext=this._context,e.stopPropagation()}),this.addEventListener("qti-register-feedback",e=>{e.stopPropagation();let t=e.detail;this._feedbackElements.push(t),t.checkShowFeedback(t.outcomeIdentifier)}),this.addEventListener("qti-register-interaction",e=>{e.stopPropagation(),this._interactionElements.push(e.target)}),this.addEventListener("end-attempt",e=>{let{responseIdentifier:t,countAttempt:r}=e.detail;this.updateResponseVariable(t,"true"),this.processResponse(r)}),this.addEventListener("qti-set-outcome-value",e=>{let{outcomeIdentifier:t,value:r}=e.detail;this.updateOutcomeVariable(t,r),e.stopPropagation()}),this.addEventListener("qti-interaction-response",this.handleUpdateResponseVariable)}get variables(){return this._context.variables.map(e=>({identifier:e.identifier,value:e.value,type:e.type}))}set variables(e){if(!Array.isArray(e)||e.some(t=>!("identifier"in t))){console.warn("variables property should be an array of VariableDeclaration");return}this._context=C(f({},this._context),{variables:this._context.variables.map(t=>{let r=e.find(o=>o.identifier===t.identifier);return r?f(f({},t),r):t})}),this._context.variables.forEach(t=>{if(t.type==="response"){let r=this._interactionElements.find(o=>o.responseIdentifier===t.identifier);r&&(r.response=t.value)}t.type==="outcome"&&this._feedbackElements.forEach(r=>r.checkShowFeedback(t.identifier))})}async connectedCallback(){super.connectedCallback(),await this.updateComplete,this._emit("qti-assessment-item-connected",this)}set responses(e){if(e)for(let t of e){this.getResponse(t.responseIdentifier)&&this.updateResponseVariable(t.responseIdentifier,t.response);let o=this._interactionElements.find(n=>n.getAttribute("response-identifier")===t.responseIdentifier);o&&(o.response=t.response)}}render(){return dr`<slot></slot>`}showCorrectResponse(e){let r=this._context.variables.filter(o=>"correctResponse"in o&&o.correctResponse).map(o=>({responseIdentifier:o.identifier,response:o.correctResponse}));for(let o of r){let n=this._interactionElements.find(a=>a.getAttribute("response-identifier")===o.responseIdentifier);n&&(n.correctResponse=e?o.response:"")}}processResponse(e=!0){var r;let t=this.querySelector("qti-response-processing");return!t||!t.process?!1:(t.process(),this.adaptive==="false"&&this.updateOutcomeVariable("completionStatus",this._getCompletionStatus()),e&&this.updateOutcomeVariable("numAttempts",(+((r=this._context.variables.find(o=>o.identifier==="numAttempts"))==null?void 0:r.value)+1).toString()),this._emit("qti-response-processed"),!0)}resetResponses(){this._context=this._initialContext}getResponse(e){return this.getVariable(e)}getOutcome(e){return this.getVariable(e)}getVariable(e){return this._context.variables.find(t=>t.identifier===e)||null}handleUpdateResponseVariable(e){let{responseIdentifier:t,response:r}=e.detail;this.updateResponseVariable(t,r)}updateResponseVariable(e,t){this._context=C(f({},this._context),{variables:this._context.variables.map(r=>r.identifier!==e?r:C(f({},r),{value:t}))}),this._emit("qti-interaction-changed",{item:this.identifier,responseIdentifier:e,response:Array.isArray(t)?[...t]:t}),this.adaptive==="false"&&this.updateOutcomeVariable("completionStatus",this._getCompletionStatus())}updateOutcomeVariable(e,t){var o;let r=this.getOutcome(e);if(!r){console.warn(`Can not set qti-outcome-identifier: ${e}, it is not available`);return}this._context=C(f({},this._context),{variables:this._context.variables.map(n=>n.identifier!==e?n:C(f({},n),{value:r.cardinality==="single"?t:[...n.value,t]}))}),this._feedbackElements.forEach(n=>n.checkShowFeedback(e)),this._emit("qti-outcome-changed",{item:this.identifier,outcomeIdentifier:e,value:(o=this._context.variables.find(n=>n.identifier===e))==null?void 0:o.value})}_getCompletionStatus(){return this._interactionElements.every(e=>e.validate())?"completed":this._interactionElements.some(e=>e.validate())?"incomplete":"not_attempted"}_emit(e,t=null){this.dispatchEvent(new CustomEvent(e,{bubbles:!0,composed:!0,detail:t}))}};i([W({type:String})],_.prototype,"title",2),i([W({type:String})],_.prototype,"identifier",2),i([W({type:String})],_.prototype,"adaptive",2),i([W({type:String})],_.prototype,"timeDependent",2),i([W({type:Boolean})],_.prototype,"disabled",2),i([b("disabled",{waitUntilFirstUpdate:!0})],_.prototype,"_handleDisabledChange",2),i([W({type:Boolean})],_.prototype,"readonly",2),i([b("readonly",{waitUntilFirstUpdate:!0})],_.prototype,"_handleReadonlyChange",2),i([cr({context:S})],_.prototype,"_context",2),_=i([ur("qti-assessment-item")],_);import{LitElement as mr}from"lit";import{customElement as hr,property as Nt}from"lit/decorators.js";var z=class extends mr{constructor(){super(...arguments);this.identifier="";this.href=""}async connectedCallback(){super.connectedCallback();let e=new Event("qti-assessment-stimulus-ref-connected",{cancelable:!0,bubbles:!0});if(this.dispatchEvent(e)){let o=this.closest("qti-assessment-item").querySelector(`[data-stimulus-idref=${this.identifier}]`);o?await this.loadAndAppendStimulus(o):console.warn(`Stimulus with data-stimulus-idref ${this.identifier} not found`)}}async loadAndAppendStimulus(e){let t=this.href.substring(0,this.href.lastIndexOf("/")),r=await Lt().load(this.href).then(o=>o.path(t).htmldoc());if(r){let o=r.querySelectorAll("qti-stimulus-body, qti-stylesheet");e.append(...o)}}};i([Nt({type:String})],z.prototype,"identifier",2),i([Nt({type:String})],z.prototype,"href",2),z=i([hr("qti-assessment-stimulus-ref")],z);import{LitElement as fr,html as gr}from"lit";import{property as oe}from"lit/decorators.js";var br={SPACE:32},q=class extends fr{constructor(){super(...arguments);this.tabindex=0;this.disabled=!1;this.readonly=!1;this.checked=!1}handleDisabledChange(e,t){t?(this.tabindex=void 0,this.blur()):this.tabIndex=0}connectedCallback(){super.connectedCallback(),this.addEventListener("keyup",this._onKeyUp),this.addEventListener("click",this._onClick),this.dispatchEvent(new CustomEvent("qti-register-choice",{bubbles:!0,cancelable:!1,composed:!0}))}disconnectedCallback(){this.removeEventListener("keyup",this._onKeyUp),this.removeEventListener("click",this._onClick),this.dispatchEvent(new CustomEvent("qti-loose-choice",{bubbles:!0,cancelable:!1,composed:!0}))}reset(){this.checked=!1,this.disabled=!1}_onKeyUp(e){if(!e.altKey)switch(e.keyCode){case br.SPACE:e.preventDefault(),this._toggleChecked();break;default:}}_onClick(){this._toggleChecked()}_toggleChecked(){this.disabled||this.readonly||(this.checked=!this.checked,this.dispatchEvent(new CustomEvent("qti-choice-element-selected",{bubbles:!0,cancelable:!1,composed:!0,detail:{identifier:this.identifier,checked:this.checked}})))}validateAllProps(){return!!this.getAttribute("identifier")}render(){return this.validateAllProps()||console.warn(`Invalid props for ${this.outerHTML}`,"missing identifier"),gr` <slot></slot> `}};i([oe({type:String})],q.prototype,"identifier",2),i([oe({type:Number,reflect:!0})],q.prototype,"tabindex",2),i([oe({reflect:!0,type:Boolean,attribute:"aria-disabled",converter:{toAttribute:e=>e}})],q.prototype,"disabled",2),i([oe({reflect:!0,type:Boolean,attribute:"aria-readonly",converter:{toAttribute:e=>e}})],q.prototype,"readonly",2),i([oe({reflect:!0,type:Boolean,attribute:"aria-checked",converter:{toAttribute:e=>e}})],q.prototype,"checked",2),i([b("disabled",{waitUntilFirstUpdate:!0})],q.prototype,"handleDisabledChange",1);import{customElement as yr}from"lit/decorators.js";import{html as xr,LitElement as Er}from"lit";import{css as vr}from"lit";var Ht=vr`
2
2
  :host {
3
3
  display: block;
4
4
  }
5
- `;var J=class extends Er{render(){return xr`<slot name="qti-rubric-block"></slot><slot></slot>`}};J.styles=Ht,J=i([yr("qti-item-body")],J);import{html as qr,LitElement as Cr}from"lit";import{customElement as _r}from"lit/decorators.js";var Ae=class extends Cr{render(){return qr`<slot></slot>`}connectedCallback(){this.parentElement.tagName.endsWith("INTERACTION")&&this.setAttribute("slot","prompt")}};Ae=i([_r("qti-prompt")],Ae);import{LitElement as wr}from"lit";import{customElement as Tr}from"lit/decorators.js";var Se=class extends wr{firstUpdated(s){super.firstUpdated(s);let e=this,t=this.getAttribute("href");if(t!==null){let r=document.createElement("link");r.rel="stylesheet",r.type="text/css",r.media="screen",r.href=t,e.appendChild(r),this.styleLink=r}if(this.textContent!==null){let r=document.createElement("style");r.media="screen",r.textContent=this.textContent,e.appendChild(r),this.styleLink=r}}disconnectedCallback(){if(this.styleLink)try{this.styleLink.remove()}catch(s){console.log("could not remove stylesheet")}}};Se=i([Tr("qti-stylesheet")],Se);import{consume as Sr}from"@lit/context";import{css as Mr,html as Lr}from"lit";import{customElement as Nr,property as Me,state as Hr}from"lit/decorators.js";import{html as kr,LitElement as Rr}from"lit";import{customElement as Ar}from"lit/decorators.js";var U=class extends Rr{render(){return kr`<slot></slot>`}defaultValues(s){let e=Array.from(this.querySelectorAll("qti-default-value > qti-value"));if(e.length===0)return null;let t=e.map(r=>r.innerHTML);return t.length>1||s.cardinality==="multiple"||s.cardinality==="ordered"?t:t[0]}};U=i([Ar("qti-variabledeclaration")],U);var M=class extends U{render(){var e,t;let s=(t=(e=this.itemContext)==null?void 0:e.variables.find(r=>r.identifier===this.identifier))==null?void 0:t.value;return Lr`${JSON.stringify(s,null,2)}`}get interpolationTable(){let s=this.querySelector("qti-interpolation-table");if(s){let e=new Map;for(let t of s.querySelectorAll("qti-interpolation-table-entry")){!t.getAttribute("source-value")&&t.getAttribute("target-value")&&console.error("source-value or target-value is missing in qti-interpolation-table-entry");let r=parseInt(t.getAttribute("source-value")),o=parseInt(t.getAttribute("target-value"));(isNaN(r)||isNaN(o))&&console.error("source-value or target-value is not a number in qti-interpolation-table-entry"),e.set(r,o)}return e}return null}connectedCallback(){super.connectedCallback();let s={identifier:this.identifier,cardinality:this.cardinality,baseType:this.baseType,type:"outcome",value:null,interpolationTable:this.interpolationTable};s.value=this.defaultValues(s),this.dispatchEvent(new CustomEvent("qti-register-variable",{bubbles:!0,composed:!0,detail:{variable:s}}))}};M.styles=[Mr`
5
+ `;var J=class extends Er{render(){return xr`<slot name="qti-rubric-block"></slot><slot></slot>`}};J.styles=Ht,J=i([yr("qti-item-body")],J);import{html as qr,LitElement as Cr}from"lit";import{customElement as _r}from"lit/decorators.js";var Ae=class extends Cr{render(){return qr`<slot></slot>`}connectedCallback(){this.parentElement.tagName.endsWith("INTERACTION")&&this.setAttribute("slot","prompt")}};Ae=i([_r("qti-prompt")],Ae);import{LitElement as kr}from"lit";import{customElement as Tr}from"lit/decorators.js";var Se=class extends kr{firstUpdated(s){super.firstUpdated(s);let e=this,t=this.getAttribute("href");if(t!==null){let r=document.createElement("link");r.rel="stylesheet",r.type="text/css",r.media="screen",r.href=t,e.appendChild(r),this.styleLink=r}if(this.textContent!==null){let r=document.createElement("style");r.media="screen",r.textContent=this.textContent,e.appendChild(r),this.styleLink=r}}disconnectedCallback(){if(this.styleLink)try{this.styleLink.remove()}catch(s){console.log("could not remove stylesheet")}}};Se=i([Tr("qti-stylesheet")],Se);import{consume as Sr}from"@lit/context";import{css as Lr,html as Mr}from"lit";import{customElement as Nr,property as Le,state as Hr}from"lit/decorators.js";import{html as Rr,LitElement as wr}from"lit";import{customElement as Ar}from"lit/decorators.js";var U=class extends wr{render(){return Rr`<slot></slot>`}defaultValues(s){let e=Array.from(this.querySelectorAll("qti-default-value > qti-value"));if(e.length===0)return null;let t=e.map(r=>r.innerHTML);return t.length>1||s.cardinality==="multiple"||s.cardinality==="ordered"?t:t[0]}};U=i([Ar("qti-variabledeclaration")],U);var L=class extends U{render(){var e,t;let s=(t=(e=this.itemContext)==null?void 0:e.variables.find(r=>r.identifier===this.identifier))==null?void 0:t.value;return Mr`${JSON.stringify(s,null,2)}`}get interpolationTable(){let s=this.querySelector("qti-interpolation-table");if(s){let e=new Map;for(let t of s.querySelectorAll("qti-interpolation-table-entry")){!t.getAttribute("source-value")&&t.getAttribute("target-value")&&console.error("source-value or target-value is missing in qti-interpolation-table-entry");let r=parseInt(t.getAttribute("source-value")),o=parseInt(t.getAttribute("target-value"));(isNaN(r)||isNaN(o))&&console.error("source-value or target-value is not a number in qti-interpolation-table-entry"),e.set(r,o)}return e}return null}connectedCallback(){super.connectedCallback();let s={identifier:this.identifier,cardinality:this.cardinality,baseType:this.baseType,type:"outcome",value:null,interpolationTable:this.interpolationTable};s.value=this.defaultValues(s),this.dispatchEvent(new CustomEvent("qti-register-variable",{bubbles:!0,composed:!0,detail:{variable:s}}))}};L.styles=[Lr`
6
6
  :host {
7
7
  display: none;
8
8
  }
9
- `],i([Me({type:String,attribute:"base-type"})],M.prototype,"baseType",2),i([Me({type:String,attribute:"external-scored"})],M.prototype,"externalScored",2),i([Me({type:String})],M.prototype,"identifier",2),i([Me({type:String})],M.prototype,"cardinality",2),i([Sr({context:S,subscribe:!0}),Hr()],M.prototype,"itemContext",2),M=i([Nr("qti-outcome-declaration")],M);import{consume as Vr}from"@lit/context";import{css as $r,html as Dr}from"lit";import{customElement as Pr,property as Ze,state as Or}from"lit/decorators.js";var P=class extends U{render(){var e,t;let s=(t=(e=this.itemContext)==null?void 0:e.variables.find(r=>r.identifier===this.identifier))==null?void 0:t.value;return Dr`${JSON.stringify(s,null,2)}`}connectedCallback(){super.connectedCallback();let s={baseType:this.baseType,identifier:this.identifier,correctResponse:this.correctResponse,cardinality:this.cardinality||"single",mapping:this.mapping,value:null,type:"response",candidateResponse:null};s.value=this.defaultValues(s),this.dispatchEvent(new CustomEvent("qti-register-variable",{bubbles:!0,composed:!0,detail:{variable:s}}))}get correctResponse(){let s,e=this.querySelector("qti-correct-response");if(e){let t=e.querySelectorAll("qti-value");if(this.cardinality==="single"&&t.length>0)s=t[0].textContent,t[0].remove();else if(this.cardinality!=="single"){s=[];for(let r=0;r<t.length;r++)s.push(t[r].textContent),t[r].remove()}}return s}get mapping(){return this.querySelector("qti-mapping")}};P.styles=[$r`
9
+ `],i([Le({type:String,attribute:"base-type"})],L.prototype,"baseType",2),i([Le({type:String,attribute:"external-scored"})],L.prototype,"externalScored",2),i([Le({type:String})],L.prototype,"identifier",2),i([Le({type:String})],L.prototype,"cardinality",2),i([Sr({context:S,subscribe:!0}),Hr()],L.prototype,"itemContext",2),L=i([Nr("qti-outcome-declaration")],L);import{consume as Vr}from"@lit/context";import{css as $r,html as Dr}from"lit";import{customElement as Pr,property as Ze,state as Or}from"lit/decorators.js";var P=class extends U{render(){var e,t;let s=(t=(e=this.itemContext)==null?void 0:e.variables.find(r=>r.identifier===this.identifier))==null?void 0:t.value;return Dr`${JSON.stringify(s,null,2)}`}connectedCallback(){super.connectedCallback();let s={baseType:this.baseType,identifier:this.identifier,correctResponse:this.correctResponse,cardinality:this.cardinality||"single",mapping:this.mapping,value:null,type:"response",candidateResponse:null};s.value=this.defaultValues(s),this.dispatchEvent(new CustomEvent("qti-register-variable",{bubbles:!0,composed:!0,detail:{variable:s}}))}get correctResponse(){let s,e=this.querySelector("qti-correct-response");if(e){let t=e.querySelectorAll("qti-value");if(this.cardinality==="single"&&t.length>0)s=t[0].textContent,t[0].remove();else if(this.cardinality!=="single"){s=[];for(let r=0;r<t.length;r++)s.push(t[r].textContent),t[r].remove()}}return s}get mapping(){return this.querySelector("qti-mapping")}};P.styles=[$r`
10
10
  :host {
11
11
  display: none;
12
12
  }
13
- `],i([Ze({type:String,attribute:"base-type"})],P.prototype,"baseType",2),i([Ze({type:String})],P.prototype,"identifier",2),i([Ze({type:String})],P.prototype,"cardinality",2),i([Vr({context:S,subscribe:!0}),Or()],P.prototype,"itemContext",2),P=i([Pr("qti-response-declaration")],P);import{LitElement as Ur}from"lit";import{customElement as Fr}from"lit/decorators.js";var Le=class extends Ur{};Le=i([Fr("qti-companion-materials-info")],Le);import{LitElement as Ir,html as Br}from"lit";import{customElement as Xr}from"lit/decorators.js";var Ne=class extends Ir{render(){return Br`<slot></slot>`}};Ne=i([Xr("qti-content-body")],Ne);import{LitElement as Yr,css as jr,html as Kr}from"lit";import{customElement as Wr,property as He}from"lit/decorators.js";var L=class extends Yr{handleclassNamesChange(s,e){this.classNames.split(" ").forEach(r=>{switch(r){case"qti-rubric-discretionary-placement":this.setAttribute("slot","qti-rubric-block");break;case"qti-rubric-inline":this.setAttribute("slot","");break;default:break}})}render(){return Kr`<slot></slot>`}connectedCallback(){super.connectedCallback(),this.setAttribute("slot","qti-rubric-block")}};L.styles=jr`
13
+ `],i([Ze({type:String,attribute:"base-type"})],P.prototype,"baseType",2),i([Ze({type:String})],P.prototype,"identifier",2),i([Ze({type:String})],P.prototype,"cardinality",2),i([Vr({context:S,subscribe:!0}),Or()],P.prototype,"itemContext",2),P=i([Pr("qti-response-declaration")],P);import{LitElement as Ur}from"lit";import{customElement as Fr}from"lit/decorators.js";var Me=class extends Ur{};Me=i([Fr("qti-companion-materials-info")],Me);import{LitElement as Ir,html as Br}from"lit";import{customElement as Xr}from"lit/decorators.js";var Ne=class extends Ir{render(){return Br`<slot></slot>`}};Ne=i([Xr("qti-content-body")],Ne);import{LitElement as Yr,css as jr,html as Kr}from"lit";import{customElement as Wr,property as He}from"lit/decorators.js";var M=class extends Yr{handleclassNamesChange(s,e){this.classNames.split(" ").forEach(r=>{switch(r){case"qti-rubric-discretionary-placement":this.setAttribute("slot","qti-rubric-block");break;case"qti-rubric-inline":this.setAttribute("slot","");break;default:break}})}render(){return Kr`<slot></slot>`}connectedCallback(){super.connectedCallback(),this.setAttribute("slot","qti-rubric-block")}};M.styles=jr`
14
14
  :host {
15
15
  display: block;
16
16
  }
17
- `,i([He({type:String})],L.prototype,"id",2),i([He({type:String})],L.prototype,"use",2),i([He({type:String})],L.prototype,"view",2),i([He({type:String,attribute:"class"})],L.prototype,"classNames",2),i([b("classNames",{waitUntilFirstUpdate:!0})],L.prototype,"handleclassNamesChange",1),L=i([Wr("qti-rubric-block")],L);import{css as Zr,html as Gr}from"lit";import{customElement as Qr}from"lit/decorators.js";import{LitElement as Jr}from"lit";import{property as Ve}from"lit/decorators.js";var zr=()=>new Intl.NumberFormat().format(.1).replace(/\d/g,""),ne=l=>{if(typeof l=="string")return l;let s=zr();return s==="."?l.toLocaleString():l.toString().replace(".","").replace(s,".")};function Ge(l){return l==null}function ae(l){return l.replace(/([^:]\/)\/+/g,"$1").replace(/\/\//g,"/").replace("http:/","http://").replace("https:/","https://")}var w=class extends Jr{connectedCallback(){super.connectedCallback(),this.dispatchEvent(new CustomEvent("qti-register-feedback",{bubbles:!0,composed:!0,detail:this}))}checkShowFeedback(s){let e=this.closest("qti-assessment-item").getOutcome(s);if(this.outcomeIdentifier!==s||!e)return;let t=!1;Array.isArray(e.value)?t=e.value.includes(this.identifier):t=!Ge(this.identifier)&&!Ge(e==null?void 0:e.value)&&this.identifier===e.value||!1,this.showFeedback(t)}showFeedback(s){this.showStatus=s&&this.showHide==="show"||!s&&this.showHide==="hide"?"on":"off"}};i([Ve({type:String,attribute:"show-hide"})],w.prototype,"showHide",2),i([Ve({type:String,attribute:"outcome-identifier"})],w.prototype,"outcomeIdentifier",2),i([Ve({type:String})],w.prototype,"identifier",2),i([Ve({type:String,attribute:!1})],w.prototype,"showStatus",2);var le=class extends w{render(){return Gr` <slot part="feedback" class="feedback ${this.showStatus}"></slot> `}firstUpdated(s){this.checkShowFeedback(this.outcomeIdentifier)}};le.styles=Zr`
17
+ `,i([He({type:String})],M.prototype,"id",2),i([He({type:String})],M.prototype,"use",2),i([He({type:String})],M.prototype,"view",2),i([He({type:String,attribute:"class"})],M.prototype,"classNames",2),i([b("classNames",{waitUntilFirstUpdate:!0})],M.prototype,"handleclassNamesChange",1),M=i([Wr("qti-rubric-block")],M);import{css as Zr,html as Gr}from"lit";import{customElement as Qr}from"lit/decorators.js";import{LitElement as Jr}from"lit";import{property as Ve}from"lit/decorators.js";var zr=()=>new Intl.NumberFormat().format(.1).replace(/\d/g,""),ne=l=>{if(typeof l=="string")return l;let s=zr();return s==="."?l.toLocaleString():l.toString().replace(".","").replace(s,".")};function Ge(l){return l==null}function ae(l){return l.replace(/([^:]\/)\/+/g,"$1").replace(/\/\//g,"/").replace("http:/","http://").replace("https:/","https://")}var k=class extends Jr{connectedCallback(){super.connectedCallback(),this.dispatchEvent(new CustomEvent("qti-register-feedback",{bubbles:!0,composed:!0,detail:this}))}checkShowFeedback(s){let e=this.closest("qti-assessment-item").getOutcome(s);if(this.outcomeIdentifier!==s||!e)return;let t=!1;Array.isArray(e.value)?t=e.value.includes(this.identifier):t=!Ge(this.identifier)&&!Ge(e==null?void 0:e.value)&&this.identifier===e.value||!1,this.showFeedback(t)}showFeedback(s){this.showStatus=s&&this.showHide==="show"||!s&&this.showHide==="hide"?"on":"off"}};i([Ve({type:String,attribute:"show-hide"})],k.prototype,"showHide",2),i([Ve({type:String,attribute:"outcome-identifier"})],k.prototype,"outcomeIdentifier",2),i([Ve({type:String})],k.prototype,"identifier",2),i([Ve({type:String,attribute:!1})],k.prototype,"showStatus",2);var le=class extends k{render(){return Gr` <slot part="feedback" class="feedback ${this.showStatus}"></slot> `}firstUpdated(s){this.checkShowFeedback(this.outcomeIdentifier)}};le.styles=Zr`
18
18
  :host {
19
19
  display: block;
20
20
  }
@@ -24,14 +24,14 @@ import{a as f,b as x,c as i,d as Mt}from"../chunk-H4VLZ2F7.js";import{provide as
24
24
  .off {
25
25
  display: none;
26
26
  }
27
- `,le=i([Qr("qti-feedback-block")],le);import{css as es,html as ts}from"lit";import{customElement as rs}from"lit/decorators.js";var ce=class extends w{constructor(){super(...arguments);this.render=()=>ts` <slot part="feedback" class="${this.showStatus}"></slot> `}};ce.styles=es`
27
+ `,le=i([Qr("qti-feedback-block")],le);import{css as es,html as ts}from"lit";import{customElement as rs}from"lit/decorators.js";var ce=class extends k{constructor(){super(...arguments);this.render=()=>ts` <slot part="feedback" class="${this.showStatus}"></slot> `}};ce.styles=es`
28
28
  .on {
29
29
  display: inline-block;
30
30
  }
31
31
  .off {
32
32
  display: none;
33
33
  }
34
- `,ce=i([rs("qti-feedback-inline")],ce);import{css as ss,html as is}from"lit";import{customElement as os}from"lit/decorators.js";var pe=class extends w{constructor(){super(...arguments);this.render=()=>is` <slot part="feedback" class="${this.showStatus}"></slot> `}};pe.styles=ss`
34
+ `,ce=i([rs("qti-feedback-inline")],ce);import{css as ss,html as is}from"lit";import{customElement as os}from"lit/decorators.js";var pe=class extends k{constructor(){super(...arguments);this.render=()=>is` <slot part="feedback" class="${this.showStatus}"></slot> `}};pe.styles=ss`
35
35
  .on {
36
36
  display: inline-block;
37
37
  }
@@ -86,7 +86,7 @@ import{a as f,b as x,c as i,d as Mt}from"../chunk-H4VLZ2F7.js";import{provide as
86
86
  ?readonly="${this.readonly}"
87
87
  />
88
88
  <div part="correct">${this._correctValue}</div>
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")}};i([De({type:Number,attribute:"expected-length"})],T.prototype,"expectedLength",2),i([De({type:String,attribute:"pattern-mask"})],T.prototype,"patternMask",2),i([De({type:String,attribute:"placeholder-text"})],T.prototype,"placeholderText",2),i([tt()],T.prototype,"_value",2),i([tt()],T.prototype,"_correctValue",2),i([tt()],T.prototype,"_size",2),i([De({type:String,attribute:"class"})],T.prototype,"classNames",2),i([b("classNames")],T.prototype,"handleclassNamesChange",1),T=i([fs("qti-text-entry-interaction")],T);import{html as bs}from"lit";import{customElement as vs}from"lit/decorators.js";import{property as Dt}from"lit/decorators.js";var E=class extends h{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)}};i([Dt({type:Number,attribute:"min-choices"})],E.prototype,"minChoices",2),i([Dt({type:Number,attribute:"max-choices"})],E.prototype,"maxChoices",2),i([b("disabled",{waitUntilFirstUpdate:!0})],E.prototype,"_handleDisabledChange",2),i([b("readonly",{waitUntilFirstUpdate:!0})],E.prototype,"_handleReadonlyChange",2),i([b("maxChoices",{waitUntilFirstUpdate:!0})],E.prototype,"_handleMaxChoicesChange",2);var Pe=class extends E{constructor(){super(...arguments);this.render=()=>bs`<slot></slot>`}connectedCallback(){super.connectedCallback(),this.setAttribute("qti-hottext-interaction","")}};Pe=i([vs("qti-hottext-interaction")],Pe);import{css as ys,html as Pt}from"lit";import{customElement as xs,property as Es,state as Ot}from"lit/decorators.js";import{unsafeHTML as Ut}from"lit/directives/unsafe-html.js";var F=class extends h{constructor(){super(...arguments);this.options=[];this.correctOption="";this.dataPrompt="select"}static get styles(){return[ys`
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")}};i([De({type:Number,attribute:"expected-length"})],T.prototype,"expectedLength",2),i([De({type:String,attribute:"pattern-mask"})],T.prototype,"patternMask",2),i([De({type:String,attribute:"placeholder-text"})],T.prototype,"placeholderText",2),i([tt()],T.prototype,"_value",2),i([tt()],T.prototype,"_correctValue",2),i([tt()],T.prototype,"_size",2),i([De({type:String,attribute:"class"})],T.prototype,"classNames",2),i([b("classNames")],T.prototype,"handleclassNamesChange",1),T=i([fs("qti-text-entry-interaction")],T);import{html as bs}from"lit";import{customElement as vs}from"lit/decorators.js";import{property as Dt}from"lit/decorators.js";var x=class extends h{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)}};i([Dt({type:Number,attribute:"min-choices"})],x.prototype,"minChoices",2),i([Dt({type:Number,attribute:"max-choices"})],x.prototype,"maxChoices",2),i([b("disabled",{waitUntilFirstUpdate:!0})],x.prototype,"_handleDisabledChange",2),i([b("readonly",{waitUntilFirstUpdate:!0})],x.prototype,"_handleReadonlyChange",2),i([b("maxChoices",{waitUntilFirstUpdate:!0})],x.prototype,"_handleMaxChoicesChange",2);var Pe=class extends x{constructor(){super(...arguments);this.render=()=>bs`<slot></slot>`}connectedCallback(){super.connectedCallback(),this.setAttribute("qti-hottext-interaction","")}};Pe=i([vs("qti-hottext-interaction")],Pe);import{css as ys,html as Pt}from"lit";import{customElement as xs,property as Es,state as Ot}from"lit/decorators.js";import{unsafeHTML as Ut}from"lit/directives/unsafe-html.js";var F=class extends h{constructor(){super(...arguments);this.options=[];this.correctOption="";this.dataPrompt="select"}static get styles(){return[ys`
90
90
  :host {
91
91
  display: inline-block;
92
92
  }
@@ -98,17 +98,17 @@ import{a as f,b as x,c as i,d as Mt}from"../chunk-H4VLZ2F7.js";import{provide as
98
98
  </select>
99
99
 
100
100
  ${Ut(this.correctOption)}
101
- `}connectedCallback(){super.connectedCallback(),this.addEventListener("on-dropdown-selected",this.choiceSelected);let e=Array.from(this.querySelectorAll("qti-inline-choice"));this.options=[{textContent:this.dataPrompt,value:"",selected:!1},...e.map(t=>({textContent:t.innerHTML,value:t.getAttribute("identifier"),selected:!1}))]}disconnectedCallback(){this.removeEventListener("on-dropdown-selected",this.choiceSelected)}validate(){let e=this.options.find(t=>t.selected);return e?e.value!=="":!1}reset(){this.options=this.options.map((e,t)=>x(f({},e),{selected:t===0}))}set response(e){this.options=this.options.map(t=>(e===t.value&&(t.selected=!0),t))}set correctResponse(e){if(e===""){this.correctOption="";return}this.correctOption=`<span part="correct-option">${this.options.find(t=>e===t.value).textContent}</span>`}choiceSelected(e){let t=e.target.value;this.options=this.options.map(r=>x(f({},r),{selected:r.value===t})),this.saveResponse(t)}};F.inputWidthClass=["","qti-input-width-2","qti-input-width-1","qti-input-width-3","qti-input-width-4","qti-input-width-6","qti-input-width-10","qti-input-width-15","qti-input-width-20","qti-input-width-72"],i([Ot()],F.prototype,"options",2),i([Ot()],F.prototype,"correctOption",2),i([Es({attribute:"data-prompt",type:String})],F.prototype,"dataPrompt",2),F=i([xs("qti-inline-choice-interaction")],F);import{customElement as Cs,property as _s}from"lit/decorators.js";import{html as ws}from"lit";import{css as qs}from"lit";var Ft=qs`
101
+ `}connectedCallback(){super.connectedCallback(),this.addEventListener("on-dropdown-selected",this.choiceSelected);let e=Array.from(this.querySelectorAll("qti-inline-choice"));this.options=[{textContent:this.dataPrompt,value:"",selected:!1},...e.map(t=>({textContent:t.innerHTML,value:t.getAttribute("identifier"),selected:!1}))]}disconnectedCallback(){this.removeEventListener("on-dropdown-selected",this.choiceSelected)}validate(){let e=this.options.find(t=>t.selected);return e?e.value!=="":!1}reset(){this.options=this.options.map((e,t)=>C(f({},e),{selected:t===0}))}set response(e){this.options=this.options.map(t=>(e===t.value&&(t.selected=!0),t))}set correctResponse(e){if(e===""){this.correctOption="";return}this.correctOption=`<span part="correct-option">${this.options.find(t=>e===t.value).textContent}</span>`}choiceSelected(e){let t=e.target.value;this.options=this.options.map(r=>C(f({},r),{selected:r.value===t})),this.saveResponse(t)}};F.inputWidthClass=["","qti-input-width-2","qti-input-width-1","qti-input-width-3","qti-input-width-4","qti-input-width-6","qti-input-width-10","qti-input-width-15","qti-input-width-20","qti-input-width-72"],i([Ot()],F.prototype,"options",2),i([Ot()],F.prototype,"correctOption",2),i([Es({attribute:"data-prompt",type:String})],F.prototype,"dataPrompt",2),F=i([xs("qti-inline-choice-interaction")],F);import{customElement as Cs,property as _s}from"lit/decorators.js";import{html as ks}from"lit";import{css as qs}from"lit";var Ft=qs`
102
102
  :host {
103
103
  display: flex;
104
104
  flex-direction: column;
105
105
  // align-items: flex-start;
106
106
  }
107
- `;var Z=class extends E{render(){return ws` <slot name="prompt"></slot><slot part="slot"></slot>`}};Z.styles=Ft,i([_s({type:String})],Z.prototype,"orientation",2),Z=i([Cs("qti-choice-interaction")],Z);import{css as Ts,html as ks,LitElement as Rs}from"lit";import{customElement as As}from"lit/decorators.js";var de=class extends Rs{render(){return ks`<slot></slot>`}process(){let s=new rt,e=[...this.children];s.process(e)}};de.styles=[Ts`
107
+ `;var Z=class extends x{render(){return ks` <slot name="prompt"></slot><slot part="slot"></slot>`}};Z.styles=Ft,i([_s({type:String})],Z.prototype,"orientation",2),Z=i([Cs("qti-choice-interaction")],Z);import{css as Ts,html as Rs,LitElement as ws}from"lit";import{customElement as As}from"lit/decorators.js";var de=class extends ws{render(){return Rs`<slot></slot>`}process(){let s=new rt,e=[...this.children];s.process(e)}};de.styles=[Ts`
108
108
  :host {
109
109
  display: none;
110
110
  }
111
- `],de=i([As("qti-outcome-processing")],de);var rt=class{process(s){for(let e of s)e.process()}};import{css as Ss,html as Ms,LitElement as Ls}from"lit";import{customElement as Ns}from"lit/decorators.js";var It=`<qti-response-processing>
111
+ `],de=i([As("qti-outcome-processing")],de);var rt=class{process(s){for(let e of s)e.process()}};import{css as Ss,html as Ls,LitElement as Ms}from"lit";import{customElement as Ns}from"lit/decorators.js";var It=`<qti-response-processing>
112
112
  <qti-response-condition>
113
113
  <qti-response-if>
114
114
  <qti-match>
@@ -157,7 +157,7 @@ import{a as f,b as x,c as i,d as Mt}from"../chunk-H4VLZ2F7.js";import{provide as
157
157
  </qti-set-outcome-value>
158
158
  </qti-response-else>
159
159
  </qti-response-condition>
160
- </qti-response-processing>`;var j=class extends Ls{render(){return Ms`<slot></slot>`}process(){let s=[...this.children];for(let e of s)e.process()}firstUpdated(s){if(this.getAttribute("template")){let e=this.getAttribute("template").split("/"),t=e[e.length-1].replace(".xml","");switch(this.innerHTML="",t){case"map_response":{this.appendChild(this.fragmentFromString(Bt).firstElementChild.firstElementChild);break}case"map_response_point":{this.appendChild(this.fragmentFromString(Xt).firstElementChild.firstElementChild);break}case"match_correct":this.appendChild(this.fragmentFromString(It).firstElementChild.firstElementChild);break}}}fragmentFromString(s){return document.createRange().createContextualFragment(s)}};j.styles=[Ss`
160
+ </qti-response-processing>`;var j=class extends Ms{render(){return Ls`<slot></slot>`}process(){let s=[...this.children];for(let e of s)e.process()}firstUpdated(s){if(this.getAttribute("template")){let e=this.getAttribute("template").split("/"),t=e[e.length-1].replace(".xml","");switch(this.innerHTML="",t){case"map_response":{this.appendChild(this.fragmentFromString(Bt).firstElementChild.firstElementChild);break}case"map_response_point":{this.appendChild(this.fragmentFromString(Xt).firstElementChild.firstElementChild);break}case"match_correct":this.appendChild(this.fragmentFromString(It).firstElementChild.firstElementChild);break}}}fragmentFromString(s){return document.createRange().createContextualFragment(s)}};j.styles=[Ss`
161
161
  :host {
162
162
  display: none;
163
163
  }
@@ -166,10 +166,10 @@ import{a as f,b as x,c as i,d as Mt}from"../chunk-H4VLZ2F7.js";import{provide as
166
166
  slot {
167
167
  display: none;
168
168
  }
169
- `,i([Ys()],u.prototype,"result",2);var k=class extends u{calculate(){return this.result=this.getResult(),this.result}getResult(){throw new Error("Not implemented")}};var Ue=class extends js(k){calculate(){return this.calculateChildren(Array.from(this.children))}};function js(l){return class extends l{calculateChildren(e){return e.map(r=>{let o=r;if(!o.calculate)return console.error("Element doesn't implement QtiConditionExpression"),null;let n=o.calculate();if(typeof n=="string")if(n==="true")n=!0;else if(n==="false")n=!1;else return console.error("unexpected value in qti-and, expected boolean"),null;return n}).every(r=>typeof r=="boolean"&&r)}}}customElements.define("qti-and",Ue);import{property as Ks}from"lit/decorators.js";var Fe=class extends u{constructor(){super(...arguments);this.baseType="string"}getResult(){return this.textContent}};i([Ks({type:String,attribute:"base-type"})],Fe.prototype,"baseType",2);customElements.define("qti-base-value",Fe);var at=class extends k{getResult(){let s=this.getVariables();if(this.children.length===2){let e=s[0],t=s[1];if(e.baseType==="directedPair"&&t.baseType==="directedPair"&&e.cardinality==="multiple"){let r=e.value,o=t.value;return r.filter(c=>o.includes(c)).length>0}else if(e.baseType==="directedPair"&&t.baseType==="directedPair"&&e.cardinality==="single"){let r=e.value;return t.value.includes(r)}else console.error("unsupported baseType or cardinality in qti contains, only baseType: directedPair and cardinality: multiple is supported")}else console.error("unexpected number of children in qti contains");return!1}};customElements.define("qti-contains",at);var lt=class extends u{get interpretation(){return this.getAttribute("interpretation")||""}getResult(){let s=this.getAttribute("identifier")||"",e=this.closest("qti-assessment-item").getResponse(s);return e.correctResponse,e.cardinality!=="single"?e.correctResponse.length>0?e.correctResponse[0]:"":e.correctResponse}};customElements.define("qti-correct",lt);import{property as Ws}from"lit/decorators.js";var Ie=class extends u{constructor(){super(...arguments);this.roundingMode="significantFigures"}get figures(){if(!this.getAttribute("figures"))return console.error("figures attribute is missing"),null;let t=parseInt(this.getAttribute("figures")||"0");return isNaN(t)?(console.error("figures attribute is not a number"),null):t<0?(console.error("figures attribute is negative"),null):t<1&&this.roundingMode==="significantFigures"?(console.error("figures cannot be smaller than 1 for RoundingMode significantFigures"),null):t}getResult(){if(this.children.length===2){let e=this.getVariables(),t=e[0],r=e[1];if(this.roundingMode===null)return null;if(t.cardinality!=="single"||r.cardinality!=="single"||Array.isArray(t.value)||Array.isArray(r.value))return console.error("unexpected cardinality in qti equal"),!1;switch(e[0].baseType){case"integer":case"float":{let o=parseFloat(t.value),n=parseFloat(r.value);if(!isNaN(o)&&!isNaN(n))return this.roundingMode==="significantFigures"?o.toPrecision(this.figures)===n.toPrecision(this.figures):Math.round(o*Math.pow(10,this.figures))/Math.pow(10,this.figures)===Math.round(n*Math.pow(10,this.figures))/Math.pow(10,this.figures);console.error(`value cannot be casted to numeric value in equalRounded operator: ${o}, ${n}`);break}default:{console.error("values other than float and int cannot be used in equalRounded operator.");break}}return!1}return console.error("unexpected number of children in qti-equal-rounded"),null}};i([Ws({type:String})],Ie.prototype,"roundingMode",2);customElements.define("qti-equal-rounded",Ie);import{property as zs}from"lit/decorators.js";var R=class{static compareSingleValues(s,e,t){switch(t){case"identifier":case"string":return s===e;case"integer":{let r=parseInt(s,10),o=parseInt(e,10);if(!isNaN(r)&&!isNaN(o))return r===o;console.error(`Cannot convert ${s} and/or ${e} to int.`);break}case"float":{let r=parseFloat(s),o=parseFloat(e);if(!isNaN(r)&&!isNaN(o))return r===o;console.error(`couldn't convert ${s} and/or ${e} to float.`);break}case"pair":case"directedPair":{let r=s.split(" ").sort(),o=e.split(" ").sort();if(r.length===2&&o.length===2)return t==="pair"&&(r.sort(),o.sort()),r.join(" ")===o.join(" ");console.error(`compared two pair but one of the values does not have 2 values: 1: ${s} 2: ${e}`);break}}return!1}};var Be=class extends u{constructor(){super(...arguments);this.toleranceMode="exact"}getResult(){if(this.children.length===2){let e=this.getVariables(),t=e[0],r=e[1];return this.toleranceMode!=="exact"?(console.error("toleranceMode is not supported yet"),!1):t.cardinality!=="single"||r.cardinality!=="single"||Array.isArray(t.value)||Array.isArray(r.value)?(console.error("unexpected cardinality in qti equal"),!1):R.compareSingleValues(t.value,r.value,t.baseType)}return console.error("unexpected number of children in qti-equal"),null}};i([zs({type:String})],Be.prototype,"toleranceMode",2);customElements.define("qti-equal",Be);var ct=class extends u{getResult(){if(this.children.length===2){let s=this.getVariables(),e=s[0],t=s[1];if(e.baseType===t.baseType&&(e.baseType==="integer"||e.baseType==="float"))return+e.value>+t.value;console.error("unexpected baseType or cardinality in qti gt")}return console.error("unexpected number of children in qt"),null}};customElements.define("qti-gt",ct);var pt=class extends k{getResult(){if(this.children.length===2){let s=this.getVariables(),e=s[0],t=s[1];return e.baseType===t.baseType&&(e.baseType==="integer"||e.baseType==="float")?+e.value>=+t.value:(console.error("unexpected baseType or cardinality in qti gte"),null)}return console.log("unexpected number of children in qte"),null}};customElements.define("qti-gte",pt);var dt=class extends u{getResult(){if(this.children.length===1){let s=this.getVariables();if(!s)return!0;let e=s[0].value;return e==null||e==null||e===""}return console.error("unexpected number of children in qti Null"),null}};customElements.define("qti-is-null",dt);var ut=class extends u{getResult(){if(this.children.length===2){let s=this.getVariables(),e=s[0],t=s[1];if(e.baseType===t.baseType&&(e.baseType==="integer"||e.baseType==="float"))return+e.value<+t.value;console.error("unexpected baseType or cardinality in qti lt")}return console.error("unexpected number of children in lt"),null}};customElements.define("qti-lt",ut);var mt=class extends k{getResult(){if(this.children.length===2){let s=this.getVariables(),e=s[0],t=s[1];return e.baseType===t.baseType&&(e.baseType==="integer"||e.baseType==="float")?+e.value<=+t.value:(console.error("unexpected baseType or cardinality in qti lte"),null)}return console.log("unexpected number of children in lte"),null}};customElements.define("qti-lte",mt);import{property as Js}from"lit/decorators.js";var Xe=class extends u{getResult(){let s=this.assessmentItem.getResponse(this.identifier);if(!s)return console.warn(`Response ${this.identifier} can not be found`),null;let e=s.mapping,t=Array.isArray(s.value)?s.value:[s.value],r=0;for(let o of t){let n=e.mapEntries.find(a=>R.compareSingleValues(a.mapKey,o,s.baseType));n==null||n.mappedValue==null?r+=e.defaultValue:r+=n.mappedValue}return e.lowerBound!=null&&(r=Math.max(e.lowerBound,r)),e.upperBound!=null&&(r=Math.min(e.upperBound,r)),r}};i([Js({type:String})],Xe.prototype,"identifier",2);customElements.define("qti-map-response",Xe);import{property as ht}from"lit/decorators.js";import{LitElement as Zs}from"lit";var G=class extends Zs{constructor(){super(...arguments);this.defaultValue=0}get mapEntries(){return Array.from(this.querySelectorAll("qti-map-entry")).map(e=>({mapKey:e.getAttribute("map-key"),mappedValue:+e.getAttribute("mapped-value")}))}};i([ht({attribute:"default-value",type:Number})],G.prototype,"defaultValue",2),i([ht({attribute:"lower-bound",type:Number})],G.prototype,"lowerBound",2),i([ht({attribute:"upper-bound",type:Number})],G.prototype,"upperBound",2);customElements.define("qti-mapping",G);var ft=class l extends u{getResult(){if(this.children.length===2){let s=this.getVariables(),e=s[0],t=s[1];return l.match(e,t)}return console.error("unexpected number of children in match"),null}static match(s,e){var t;switch(e.cardinality){case"single":return s.value===null?!1:Array.isArray(s.value)||Array.isArray(e.value)?(console.error("unexpected cardinality in qti match"),!1):R.compareSingleValues((t=s.value)==null?void 0:t.toString(),e.value.toString(),e.baseType);case"ordered":{if(!Array.isArray(s.value)||!Array.isArray(e.value))return console.error("unexpected cardinality in qti match"),!1;if(s.value.length!==e.value.length)return!1;for(let r=0;r<s.value.length;r++)if(!R.compareSingleValues(e.value[r],s.value[r],e.baseType))return!1;return!0}case"multiple":{if(!Array.isArray(s.value)||!Array.isArray(e.value))return console.error("unexpected cardinality in qti match"),!1;if(s.value.length!==e.value.length)return!1;let r=0;for(let o of e.value){let n=null,a=[...s.value];for(let c of a)if(R.compareSingleValues(o,c,e.baseType)){n=c;break}if(n!==null)a.splice(a.indexOf(n),1);else return!1;r++}return!0}default:return console.error("unexpected cardinality in qti match"),!1}}};customElements.define("qti-match",ft);var gt=class extends u{getResult(){let s=this.getVariables();this.children.length!==2&&console.warn("The member operator takes two sub-expressions");let[e,t]=s;if(e.baseType!==t.baseType&&console.warn("Which must both have the same base-type"),t.cardinality==="multiple"||t.cardinality==="ordered"||console.warn("and the second must be a multiple or ordered container"),(e.baseType==="float"||t.baseType==="float")&&console.warn("The member operator should not be used on sub-expressions with a base-type of float"),(e.baseType==="duration"||t.baseType==="duration")&&console.warn("It must not be used on sub-expressions with a base-type of duration"),e.value===null||t.value===null)return null;let r=e.value;return t.value.includes(r)}};customElements.define("qti-member",gt);var bt=class extends u{getResult(){let s=this.getVariables();if(s.length===0)return console.error("unexpected number of children in qti multiple"),null;for(let e of s)if(e.cardinality!=="multiple"&&e.cardinality!=="single")return console.error("unexpected cardinality in qti multiple"),[];return s}};customElements.define("qti-multiple",bt);import{html as Gs}from"lit";var vt=class extends u{render(){return Gs`${super.render()}`}getResult(){return!this.firstElementChild.calculate()}};customElements.define("qti-not",vt);var yt=class extends k{getResult(){return Array.from(this.children).map(e=>{let t=e;if(!t.calculate)return console.error("Element doesn't implement QtiConditionExpression"),null;let r=t.calculate();if(typeof r=="string")if(r==="true")r=!0;else if(r==="false")r=!1;else return console.error("unexpected value in qti-or, expected boolean"),null;return r}).some(e=>typeof e=="boolean"&&e)}};customElements.define("qti-or",yt);var xt=class extends u{getResult(){let s=this.getVariables();if(s.length===0)return console.error("unexpected number of children in qti multiple"),null;for(let e of s)if(e.cardinality!=="ordered"&&e.cardinality!=="single")return console.error("unexpected cardinality in qti ordered"),[];return s}};customElements.define("qti-ordered",xt);import{consume as Qs}from"@lit/context";import{LitElement as ei,html as ti}from"lit";import{property as ri,state as si}from"lit/decorators.js";var he=class extends ei{render(){var e,t;let s=(t=(e=this.itemContext)==null?void 0:e.variables.find(r=>r.identifier===this.identifier))==null?void 0:t.value;return ti`${JSON.stringify(s,null,2)}`}calculate(){let s=this.closest("qti-assessment-item"),e=this.identifier;return s.getVariable(e).value}};i([ri({type:String})],he.prototype,"identifier",2),i([Qs({context:S,subscribe:!0}),si()],he.prototype,"itemContext",2);customElements.define("qti-printed-variable",he);var Et=class extends u{getResult(){return this.getVariables().reduce((t,r)=>{if(r.baseType=="float"||r.baseType=="integer")try{return t*parseInt(r.value.toString())}catch(o){console.warn("can not convert to number")}else console.warn(`has another baseType ${r.baseType}`);return t},1)}};customElements.define("qti-product",Et);import{property as ii}from"lit/decorators.js";var Ye=class extends u{constructor(){super(...arguments);this.caseSensitive="true"}getResult(){if(this.children.length===2){let e=this.getVariables(),t=e[0],r=e[1];if(t.cardinality!=="single"||r.cardinality!=="single"||Array.isArray(t.value)||Array.isArray(r.value))return console.error("unexpected cardinality in qti string-match"),!1;let o=this.caseSensitive==="true"?t.value:t.value.toLowerCase(),n=this.caseSensitive==="true"?r.value:r.value.toLowerCase();return R.compareSingleValues(o,n,t.baseType)}return console.error("unexpected number of children in qti-string-match"),null}};i([ii({type:String,attribute:"case-sensitive"})],Ye.prototype,"caseSensitive",2);customElements.define("qti-string-match",Ye);var qt=class extends u{constructor(){super(),this._expression=new Ct(Array.from(this.children))}getResult(){return this._expression.calculate()}},Ct=class{constructor(s){this.expressions=s}calculate(){return this.expressions.map(e=>{if(!e.calculate)return console.error("Element doesn't implement QtiConditionExpression"),null;let t=e.calculate();return Number.isNaN(t)?(console.error("unexpected value in qti-sum, expected number"),null):Number(t)}).reduce((e,t)=>e+t,0)}};customElements.define("qti-sum",qt);var _t=class extends u{getResult(){let s=this.getAttribute("identifier");return this.closest("qti-assessment-item").getVariable(s).value}};customElements.define("qti-variable",_t);import{html as Yt}from"lit";import{customElement as oi,property as wt,state as ni}from"lit/decorators.js";var I=class extends h{constructor(){super(...arguments);this._errorMessage=null;this.loadConfig=async(e,t)=>{e=this.removeDoubleSlashes(e);try{let r=await fetch(e);if(r.ok){let n=await r.json();for(let a in n.paths)t&&(n.paths[a]=this.getResolvablePath(n.paths[a],t));return n}}catch(r){}return null};this.getResolvablePath=(e,t)=>e!=null&&e.toLocaleLowerCase().startsWith("http")||!t?e:this.removeDoubleSlashes(`${t}/${e}`);this.mergeConfigs=async(e,t,r)=>{var o;for(let n in t==null?void 0:t.paths)if(!e.paths[n]){let a=!1;try{let c=(o=t.paths[n])!=null&&o.toLocaleLowerCase().endsWith(".js")?t.paths[n]:t.paths[n]+".js";(await fetch(c)).ok?e.paths[n]=t.paths[n].replace(/\.js$/,""):a=!0}catch(c){a=!0}if(a&&r)if(typeof r=="string")try{let c=await this.loadConfig(r);c!=null&&c.paths[n]&&(e.paths[n]=c.paths[n].replace(/\.js$/,""))}catch(c){}else typeof r=="object"&&r!=null&&r.paths[n]&&(e.paths[n]=r.paths[n].replace(/\.js$/,""));else a&&console.error("Failed to resolve module: "+n)}}}convertQtiVariableJSON(e){for(let t in e)if(e.hasOwnProperty(t)){let r=e[t];if(r){for(let o in r)if(r.hasOwnProperty(o)){let n=r[o];if(Array.isArray(n))return n.map(String);if(n!=null)return String(n)}}}return null}startChecking(){this.intervalId=setInterval(()=>{let e=this.pci.getResponse(),t=this.pci.getResponse(),r=JSON.stringify(e);if(r!==this.rawResponse){this.rawResponse=r;let o=this.convertQtiVariableJSON(t);this.response=o,this.saveResponse(o)}},200)}stopChecking(){this.intervalId!==void 0&&clearInterval(this.intervalId)}validate(){return!0}set response(e){}getTAOConfig(e){let t=e.querySelectorAll("properties"),r={},o=a=>{let c={},p=a.getAttribute("key");if(p){let d=Array.from(a.children),m=d.map(g=>g.getAttribute("key"));m.length>0&&!m.find(g=>!Number.isInteger(+g))?c[p]=d.map(g=>n(g)):c[p]=a.textContent}return c},n=a=>{if(a){let c={};for(let p of a.children)c=f(f({},c),o(p));return c}};for(let a of t)return a.getAttribute("key")||(r=f(f({},r),n(a))),r;return console.log("Can not find qti-custom-interaction config"),null}register(e){this.pci=e;let t=this.parentElement.tagName==="QTI-CUSTOM-INTERACTION"?"TAO":"IMS",r=t=="IMS"?this.querySelector("qti-interaction-markup"):this.querySelector("markup");r.classList.add("qti-customInteraction"),t=="TAO"&&this.querySelector("properties")&&(this.querySelector("properties").style.display="none");let o=t=="IMS"?{properties:this.dataset,onready:()=>{console.log("onready")}}:this.getTAOConfig(this);t=="IMS"?e.getInstance(r,o,void 0):e.initialize(this.customInteractionTypeIdentifier,r.firstElementChild,o),t=="TAO"&&Array.from(this.querySelectorAll("link")).map(a=>a.getAttribute("href")).forEach(a=>{let c=document.createElement("link");c.rel="stylesheet",c.type="text/css",c.media="screen",c.href=a,r.appendChild(c)}),this.startChecking()}connectedCallback(){super.connectedCallback();let e={context:this.customInteractionTypeIdentifier,catchError:!0,paths:{}};if(window.requirePaths&&window.requireShim&&(e.paths=window.requirePaths,e.shim=window.requireShim),!globalThis.require){this._errorMessage="requirejs not found, load with cdn: https://cdnjs.com/libraries/require.js";return}this.registerModules(e).then(()=>{requirejs.config(e)(["require"],r=>{!r.defined("qtiCustomInteractionContext")&&define("qtiCustomInteractionContext",()=>({register:n=>{this.register(n)},notifyReady:()=>{}}));let o=r.defined(this.module);r([this.module],n=>{o&&this.register(n)},n=>{this._errorMessage=n})},r=>{this._errorMessage=r})})}disconnectedCallback(){super.disconnectedCallback(),this.stopChecking()}async registerModules(e){let t=this.getAttribute("data-base-url");if(t){let o=`${t}/modules/module_resolution.js`,n=`${t}/modules/module_resolution_fallback.js`;if(o){let a=await this.loadConfig(o,t);await this.mergeConfigs(e,a,n)}}let r=this.querySelector("qti-interaction-modules");if(r){let o=r.querySelectorAll("qti-interaction-module");for(let n of o){let a=n.getAttribute("id"),c=n.getAttribute("primary-path"),p=n.getAttribute("fallback-path"),d=c?{paths:x(f({},e.paths),{[a]:this.getResolvablePath(c,t)})}:null,m=p?{paths:x(f({},e.paths),{[a]:this.getResolvablePath(p,t)})}:null;a&&d&&await this.mergeConfigs(e,d,m)}}}removeDoubleSlashes(e){return e.replace(/([^:]\/)\/+/g,"$1").replace(/\/\//g,"/").replace("http:/","http://").replace("https:/","https://")}render(){return Yt`<slot></slot>${this._errorMessage&&Yt`<div style="color:red">
169
+ `,i([Ys()],u.prototype,"result",2);var R=class extends u{calculate(){return this.result=this.getResult(),this.result}getResult(){throw new Error("Not implemented")}};var Ue=class extends js(R){calculate(){return this.calculateChildren(Array.from(this.children))}};function js(l){return class extends l{calculateChildren(e){return e.map(r=>{let o=r;if(!o.calculate)return console.error("Element doesn't implement QtiConditionExpression"),null;let n=o.calculate();if(typeof n=="string")if(n==="true")n=!0;else if(n==="false")n=!1;else return console.error("unexpected value in qti-and, expected boolean"),null;return n}).every(r=>typeof r=="boolean"&&r)}}}customElements.define("qti-and",Ue);import{property as Ks}from"lit/decorators.js";var Fe=class extends u{constructor(){super(...arguments);this.baseType="string"}getResult(){return this.textContent}};i([Ks({type:String,attribute:"base-type"})],Fe.prototype,"baseType",2);customElements.define("qti-base-value",Fe);var at=class extends R{getResult(){let s=this.getVariables();if(this.children.length===2){let e=s[0],t=s[1];if(e.baseType==="directedPair"&&t.baseType==="directedPair"&&e.cardinality==="multiple"){let r=e.value,o=t.value;return r.filter(c=>o.includes(c)).length>0}else if(e.baseType==="directedPair"&&t.baseType==="directedPair"&&e.cardinality==="single"){let r=e.value;return t.value.includes(r)}else console.error("unsupported baseType or cardinality in qti contains, only baseType: directedPair and cardinality: multiple is supported")}else console.error("unexpected number of children in qti contains");return!1}};customElements.define("qti-contains",at);var lt=class extends u{get interpretation(){return this.getAttribute("interpretation")||""}getResult(){let s=this.getAttribute("identifier")||"",e=this.closest("qti-assessment-item").getResponse(s);return e.correctResponse,e.cardinality!=="single"?e.correctResponse.length>0?e.correctResponse[0]:"":e.correctResponse}};customElements.define("qti-correct",lt);import{property as Ws}from"lit/decorators.js";var Ie=class extends u{constructor(){super(...arguments);this.roundingMode="significantFigures"}get figures(){if(!this.getAttribute("figures"))return console.error("figures attribute is missing"),null;let t=parseInt(this.getAttribute("figures")||"0");return isNaN(t)?(console.error("figures attribute is not a number"),null):t<0?(console.error("figures attribute is negative"),null):t<1&&this.roundingMode==="significantFigures"?(console.error("figures cannot be smaller than 1 for RoundingMode significantFigures"),null):t}getResult(){if(this.children.length===2){let e=this.getVariables(),t=e[0],r=e[1];if(this.roundingMode===null)return null;if(t.cardinality!=="single"||r.cardinality!=="single"||Array.isArray(t.value)||Array.isArray(r.value))return console.error("unexpected cardinality in qti equal"),!1;switch(e[0].baseType){case"integer":case"float":{let o=parseFloat(t.value),n=parseFloat(r.value);if(!isNaN(o)&&!isNaN(n))return this.roundingMode==="significantFigures"?o.toPrecision(this.figures)===n.toPrecision(this.figures):Math.round(o*Math.pow(10,this.figures))/Math.pow(10,this.figures)===Math.round(n*Math.pow(10,this.figures))/Math.pow(10,this.figures);console.error(`value cannot be casted to numeric value in equalRounded operator: ${o}, ${n}`);break}default:{console.error("values other than float and int cannot be used in equalRounded operator.");break}}return!1}return console.error("unexpected number of children in qti-equal-rounded"),null}};i([Ws({type:String})],Ie.prototype,"roundingMode",2);customElements.define("qti-equal-rounded",Ie);import{property as zs}from"lit/decorators.js";var w=class{static compareSingleValues(s,e,t){switch(t){case"identifier":case"string":return s===e;case"integer":{let r=parseInt(s,10),o=parseInt(e,10);if(!isNaN(r)&&!isNaN(o))return r===o;console.error(`Cannot convert ${s} and/or ${e} to int.`);break}case"float":{let r=parseFloat(s),o=parseFloat(e);if(!isNaN(r)&&!isNaN(o))return r===o;console.error(`couldn't convert ${s} and/or ${e} to float.`);break}case"pair":case"directedPair":{let r=s.split(" ").sort(),o=e.split(" ").sort();if(r.length===2&&o.length===2)return t==="pair"&&(r.sort(),o.sort()),r.join(" ")===o.join(" ");console.error(`compared two pair but one of the values does not have 2 values: 1: ${s} 2: ${e}`);break}}return!1}};var Be=class extends u{constructor(){super(...arguments);this.toleranceMode="exact"}getResult(){if(this.children.length===2){let e=this.getVariables(),t=e[0],r=e[1];return this.toleranceMode!=="exact"?(console.error("toleranceMode is not supported yet"),!1):t.cardinality!=="single"||r.cardinality!=="single"||Array.isArray(t.value)||Array.isArray(r.value)?(console.error("unexpected cardinality in qti equal"),!1):w.compareSingleValues(t.value,r.value,t.baseType)}return console.error("unexpected number of children in qti-equal"),null}};i([zs({type:String})],Be.prototype,"toleranceMode",2);customElements.define("qti-equal",Be);var ct=class extends u{getResult(){if(this.children.length===2){let s=this.getVariables(),e=s[0],t=s[1];if(e.baseType===t.baseType&&(e.baseType==="integer"||e.baseType==="float"))return+e.value>+t.value;console.error("unexpected baseType or cardinality in qti gt")}return console.error("unexpected number of children in qt"),null}};customElements.define("qti-gt",ct);var pt=class extends R{getResult(){if(this.children.length===2){let s=this.getVariables(),e=s[0],t=s[1];return e.baseType===t.baseType&&(e.baseType==="integer"||e.baseType==="float")?+e.value>=+t.value:(console.error("unexpected baseType or cardinality in qti gte"),null)}return console.log("unexpected number of children in qte"),null}};customElements.define("qti-gte",pt);var dt=class extends u{getResult(){if(this.children.length===1){let s=this.getVariables();if(!s)return!0;let e=s[0].value;return e==null||e==null||e===""}return console.error("unexpected number of children in qti Null"),null}};customElements.define("qti-is-null",dt);var ut=class extends u{getResult(){if(this.children.length===2){let s=this.getVariables(),e=s[0],t=s[1];if(e.baseType===t.baseType&&(e.baseType==="integer"||e.baseType==="float"))return+e.value<+t.value;console.error("unexpected baseType or cardinality in qti lt")}return console.error("unexpected number of children in lt"),null}};customElements.define("qti-lt",ut);var mt=class extends R{getResult(){if(this.children.length===2){let s=this.getVariables(),e=s[0],t=s[1];return e.baseType===t.baseType&&(e.baseType==="integer"||e.baseType==="float")?+e.value<=+t.value:(console.error("unexpected baseType or cardinality in qti lte"),null)}return console.log("unexpected number of children in lte"),null}};customElements.define("qti-lte",mt);import{property as Js}from"lit/decorators.js";var Xe=class extends u{getResult(){let s=this.assessmentItem.getResponse(this.identifier);if(!s)return console.warn(`Response ${this.identifier} can not be found`),null;let e=s.mapping,t=Array.isArray(s.value)?s.value:[s.value],r=0;for(let o of t){let n=e.mapEntries.find(a=>w.compareSingleValues(a.mapKey,o,s.baseType));n==null||n.mappedValue==null?r+=e.defaultValue:r+=n.mappedValue}return e.lowerBound!=null&&(r=Math.max(e.lowerBound,r)),e.upperBound!=null&&(r=Math.min(e.upperBound,r)),r}};i([Js({type:String})],Xe.prototype,"identifier",2);customElements.define("qti-map-response",Xe);import{property as ht}from"lit/decorators.js";import{LitElement as Zs}from"lit";var G=class extends Zs{constructor(){super(...arguments);this.defaultValue=0}get mapEntries(){return Array.from(this.querySelectorAll("qti-map-entry")).map(e=>({mapKey:e.getAttribute("map-key"),mappedValue:+e.getAttribute("mapped-value")}))}};i([ht({attribute:"default-value",type:Number})],G.prototype,"defaultValue",2),i([ht({attribute:"lower-bound",type:Number})],G.prototype,"lowerBound",2),i([ht({attribute:"upper-bound",type:Number})],G.prototype,"upperBound",2);customElements.define("qti-mapping",G);var ft=class l extends u{getResult(){if(this.children.length===2){let s=this.getVariables(),e=s[0],t=s[1];return l.match(e,t)}return console.error("unexpected number of children in match"),null}static match(s,e){var t;switch(e.cardinality){case"single":return s.value===null?!1:Array.isArray(s.value)||Array.isArray(e.value)?(console.error("unexpected cardinality in qti match"),!1):w.compareSingleValues((t=s.value)==null?void 0:t.toString(),e.value.toString(),e.baseType);case"ordered":{if(!Array.isArray(s.value)||!Array.isArray(e.value))return console.error("unexpected cardinality in qti match"),!1;if(s.value.length!==e.value.length)return!1;for(let r=0;r<s.value.length;r++)if(!w.compareSingleValues(e.value[r],s.value[r],e.baseType))return!1;return!0}case"multiple":{if(!Array.isArray(s.value)||!Array.isArray(e.value))return console.error("unexpected cardinality in qti match"),!1;if(s.value.length!==e.value.length)return!1;let r=0;for(let o of e.value){let n=null,a=[...s.value];for(let c of a)if(w.compareSingleValues(o,c,e.baseType)){n=c;break}if(n!==null)a.splice(a.indexOf(n),1);else return!1;r++}return!0}default:return console.error("unexpected cardinality in qti match"),!1}}};customElements.define("qti-match",ft);var gt=class extends u{getResult(){let s=this.getVariables();this.children.length!==2&&console.warn("The member operator takes two sub-expressions");let[e,t]=s;if(e.baseType!==t.baseType&&console.warn("Which must both have the same base-type"),t.cardinality==="multiple"||t.cardinality==="ordered"||console.warn("and the second must be a multiple or ordered container"),(e.baseType==="float"||t.baseType==="float")&&console.warn("The member operator should not be used on sub-expressions with a base-type of float"),(e.baseType==="duration"||t.baseType==="duration")&&console.warn("It must not be used on sub-expressions with a base-type of duration"),e.value===null||t.value===null)return null;let r=e.value;return t.value.includes(r)}};customElements.define("qti-member",gt);var bt=class extends u{getResult(){let s=this.getVariables();if(s.length===0)return console.error("unexpected number of children in qti multiple"),null;for(let e of s)if(e.cardinality!=="multiple"&&e.cardinality!=="single")return console.error("unexpected cardinality in qti multiple"),[];return s}};customElements.define("qti-multiple",bt);import{html as Gs}from"lit";var vt=class extends u{render(){return Gs`${super.render()}`}getResult(){return!this.firstElementChild.calculate()}};customElements.define("qti-not",vt);var yt=class extends R{getResult(){return Array.from(this.children).map(e=>{let t=e;if(!t.calculate)return console.error("Element doesn't implement QtiConditionExpression"),null;let r=t.calculate();if(typeof r=="string")if(r==="true")r=!0;else if(r==="false")r=!1;else return console.error("unexpected value in qti-or, expected boolean"),null;return r}).some(e=>typeof e=="boolean"&&e)}};customElements.define("qti-or",yt);var xt=class extends u{getResult(){let s=this.getVariables();if(s.length===0)return console.error("unexpected number of children in qti multiple"),null;for(let e of s)if(e.cardinality!=="ordered"&&e.cardinality!=="single")return console.error("unexpected cardinality in qti ordered"),[];return s}};customElements.define("qti-ordered",xt);import{consume as Qs}from"@lit/context";import{LitElement as ei,html as ti}from"lit";import{property as ri,state as si}from"lit/decorators.js";var he=class extends ei{render(){var e,t;let s=(t=(e=this.itemContext)==null?void 0:e.variables.find(r=>r.identifier===this.identifier))==null?void 0:t.value;return ti`${JSON.stringify(s,null,2)}`}calculate(){let s=this.closest("qti-assessment-item"),e=this.identifier;return s.getVariable(e).value}};i([ri({type:String})],he.prototype,"identifier",2),i([Qs({context:S,subscribe:!0}),si()],he.prototype,"itemContext",2);customElements.define("qti-printed-variable",he);var Et=class extends u{getResult(){return this.getVariables().reduce((t,r)=>{if(r.baseType=="float"||r.baseType=="integer")try{return t*parseInt(r.value.toString())}catch(o){console.warn("can not convert to number")}else console.warn(`has another baseType ${r.baseType}`);return t},1)}};customElements.define("qti-product",Et);import{property as ii}from"lit/decorators.js";var Ye=class extends u{constructor(){super(...arguments);this.caseSensitive="true"}getResult(){if(this.children.length===2){let e=this.getVariables(),t=e[0],r=e[1];if(t.cardinality!=="single"||r.cardinality!=="single"||Array.isArray(t.value)||Array.isArray(r.value))return console.error("unexpected cardinality in qti string-match"),!1;let o=this.caseSensitive==="true"?t.value:t.value.toLowerCase(),n=this.caseSensitive==="true"?r.value:r.value.toLowerCase();return w.compareSingleValues(o,n,t.baseType)}return console.error("unexpected number of children in qti-string-match"),null}};i([ii({type:String,attribute:"case-sensitive"})],Ye.prototype,"caseSensitive",2);customElements.define("qti-string-match",Ye);var qt=class extends u{constructor(){super(),this._expression=new Ct(Array.from(this.children))}getResult(){return this._expression.calculate()}},Ct=class{constructor(s){this.expressions=s}calculate(){return this.expressions.map(e=>{if(!e.calculate)return console.error("Element doesn't implement QtiConditionExpression"),null;let t=e.calculate();return Number.isNaN(t)?(console.error("unexpected value in qti-sum, expected number"),null):Number(t)}).reduce((e,t)=>e+t,0)}};customElements.define("qti-sum",qt);var _t=class extends u{getResult(){let s=this.getAttribute("identifier");return this.closest("qti-assessment-item").getVariable(s).value}};customElements.define("qti-variable",_t);import{html as Yt}from"lit";import{customElement as oi,property as kt,state as ni}from"lit/decorators.js";var I=class extends h{constructor(){super(...arguments);this._errorMessage=null;this.loadConfig=async(e,t)=>{e=this.removeDoubleSlashes(e);try{let r=await fetch(e);if(r.ok){let n=await r.json();for(let a in n.paths)t&&(n.paths[a]=this.getResolvablePath(n.paths[a],t));return n}}catch(r){}return null};this.getResolvablePathString=(e,t)=>(e=e.replace(/\.js$/,""),e!=null&&e.toLocaleLowerCase().startsWith("http")||!t?e:this.removeDoubleSlashes(`${t}/${e}`));this.getResolvablePath=(e,t)=>Array.isArray(e)?e.map(r=>this.getResolvablePathString(r,t)):this.getResolvablePathString(e,t)}convertQtiVariableJSON(e){for(let t in e)if(e.hasOwnProperty(t)){let r=e[t];if(r){for(let o in r)if(r.hasOwnProperty(o)){let n=r[o];if(Array.isArray(n))return n.map(String);if(n!=null)return String(n)}}}return null}startChecking(){this.intervalId=setInterval(()=>{let e=this.pci.getResponse(),t=this.pci.getResponse(),r=JSON.stringify(e);if(r!==this.rawResponse){this.rawResponse=r;let o=this.convertQtiVariableJSON(t);this.response=o,this.saveResponse(o)}},200)}stopChecking(){this.intervalId!==void 0&&clearInterval(this.intervalId)}validate(){return!0}set response(e){}getTAOConfig(e){let t=e.querySelectorAll("properties"),r={},o=a=>{let c={},p=a.getAttribute("key");if(p){let d=Array.from(a.children),m=d.map(g=>g.getAttribute("key"));m.length>0&&!m.find(g=>!Number.isInteger(+g))?c[p]=d.map(g=>n(g)):c[p]=a.textContent}return c},n=a=>{if(a){let c={};for(let p of a.children)c=f(f({},c),o(p));return c}};for(let a of t)return a.getAttribute("key")||(r=f(f({},r),n(a))),r;return console.log("Can not find qti-custom-interaction config"),null}register(e){this.pci=e;let t=this.parentElement.tagName==="QTI-CUSTOM-INTERACTION"?"TAO":"IMS",r=t=="IMS"?this.querySelector("qti-interaction-markup"):this.querySelector("markup");r.classList.add("qti-customInteraction"),t=="TAO"&&this.querySelector("properties")&&(this.querySelector("properties").style.display="none");let o=t=="IMS"?{properties:this.dataset,onready:()=>{console.log("onready")}}:this.getTAOConfig(this);t=="IMS"?e.getInstance(r,o,void 0):e.initialize(this.customInteractionTypeIdentifier,r.firstElementChild,o),t=="TAO"&&Array.from(this.querySelectorAll("link")).map(a=>a.getAttribute("href")).forEach(a=>{let c=document.createElement("link");c.rel="stylesheet",c.type="text/css",c.media="screen",c.href=a,r.appendChild(c)}),this.startChecking()}connectedCallback(){super.connectedCallback(),define("qtiCustomInteractionContext",()=>({register:r=>{this.register(r)},notifyReady:()=>{}}));let e=this.buildRequireConfig();requirejs.config(e)(["require"],r=>{r([this.module])})}disconnectedCallback(){super.disconnectedCallback(),requirejs.undef(this.customInteractionTypeIdentifier);let e=requirejs.s.contexts;delete e[this.customInteractionTypeIdentifier],this.stopChecking()}buildRequireConfig(){let e={context:this.customInteractionTypeIdentifier,catchError:!0,paths:window.requirePaths||{},shim:window.requireShim||{}};if(!globalThis.require)return this._errorMessage="RequireJS not found. Please load it via CDN: https://cdnjs.com/libraries/require.js",null;let t=this.getAttribute("data-base-url"),r=this.querySelector("qti-interaction-modules");if(r){let o=r.querySelectorAll("qti-interaction-module");for(let n of o){let a=n.getAttribute("id"),c=n.getAttribute("primary-path"),p=n.getAttribute("fallback-path");if(a&&c){let d=p?this.combineRequireResolvePaths(this.getResolvablePath(c,t),this.getResolvablePath(p,t)):this.getResolvablePath(c,t),m=e.paths[a]||[];e.paths[a]=this.combineRequireResolvePaths(m,d)}}}return e}combineRequireResolvePaths(e,t){let r=Array.isArray(e)?e:[e],o=Array.isArray(t)?t:[t];return r.concat(o)}removeDoubleSlashes(e){return e.replace(/([^:]\/)\/+/g,"$1").replace(/\/\//g,"/").replace("http:/","http://").replace("https:/","https://")}render(){return Yt`<slot></slot>${this._errorMessage&&Yt`<div style="color:red">
170
170
  <h1>Error</h1>
171
171
  ${this._errorMessage}
172
- </div>`}`}};i([wt({type:String,attribute:"response-identifier"})],I.prototype,"responseIdentifier",2),i([wt({type:String,attribute:"module"})],I.prototype,"module",2),i([wt({type:String,attribute:"custom-interaction-type-identifier"})],I.prototype,"customInteractionTypeIdentifier",2),i([ni()],I.prototype,"_errorMessage",2),I=i([oi("qti-portable-custom-interaction")],I);import{LitElement as li,css as ci,html as Wt}from"lit";import{customElement as pi,state as di}from"lit/decorators.js";var je=class l{constructor(){this._touchBegin=0;this._touchDown=null;this._lastClick=0;this._canDrag=!1;this._dragSrc=null;this._dragCopy=null;this._touchEndCalled=!1;this._dragRunning=!1;this._dataTransfer={data:{},setData:function(s,e){this.data[s]=e},getData:function(s){return this.data[s]},effectAllowed:"move"};this._copyOffset={x:0,y:0};this._lastTarget=null;this._currentDropContainer=null;this._handleClick=!0;this._DBLCLICKDELAY=500;this._CONTEXTMENUDELAY=1e3;this._DRAGDELTA=5;this._COPYOPACITY=.7;this.copyStylesDragClone=!0;this.dragOnClick=!1;this._createDragCopy=(s,e)=>{if(this._dragCopy===null&&this._dragRunning){this._dragSrc.style.opacity=this._COPYOPACITY,this._dragCopy=this._dragSrc.cloneNode(!0);let t=window.getComputedStyle(this._dragSrc);if(this._dragCopy.style="",this._dragCopy.setAttribute("dragclone",""),this.copyStylesDragClone)for(let r of t)this._dragCopy.style[r]=t.getPropertyValue(r);this._calculateDragCopyPosition(e),this._dragCopy.style.top=e.clientY-this._copyOffset.y+"px",this._dragCopy.style.left=e.clientX-this._copyOffset.x+"px",this._dragCopy.style.position="fixed",this._dragCopy.style.pointerEvents="none",this._dragCopy.style.zIndex="999999",this._dragCopy=document.body.appendChild(this._dragCopy),this._dispatchEvent(this._dragSrc,"dragstart")}if(this._dragRunning){let t=this;requestAnimationFrame(function(){t._touchEndCalled||t._dragCopy===null||(t._dragCopy.style.top=e.clientY-t._copyOffset.y+"px",t._dragCopy.style.left=e.clientX-t._copyOffset.x+"px")});let r=this._findDroppable(s);r!=this._lastTarget&&(this._dispatchEvent(r,"dragenter"),this._dispatchEvent(this._lastTarget,"dragleave"),this._lastTarget=r),this._currentDropContainer=r,this._currentDropContainer&&this._dispatchEvent(r,"dragover")}};return l._instance?l._instance:(l._instance=this,document.addEventListener("touchmove",this._touchMove.bind(this),{passive:!1,capture:!1}),document.addEventListener("mousemove",this._touchMove.bind(this),{passive:!1,capture:!1}),document.addEventListener("touchend",this._touchEnd.bind(this),{passive:!1,capture:!1}),document.addEventListener("mouseup",this._touchEnd.bind(this),{passive:!1,capture:!1}),document.addEventListener("touchcancel",this._touchCancel.bind(this),{passive:!1,capture:!1}),this)}addDraggables(s){s.forEach(e=>{e.addEventListener("touchstart",this._touchStart.bind(this),{passive:!1,capture:!1}),e.addEventListener("mousedown",this._touchStart.bind(this),{passive:!1,capture:!1})})}_touchStart(s){this._touchBegin=Date.now();let{x:e,y:t}=this._getPoint(s);if(this._touchDown={x:e,y:t},this._dragSrc=s.currentTarget,this._canDrag=!0,this.dragOnClick){let r={clientX:e,clientY:t};this._dragRunning=!0,this._createDragCopy(s,r)}s.preventDefault()}_touchMove(s){if(this._canDrag&&this._dragSrc){let{x:e,y:t}=this._getPoint(s),r={clientX:e,clientY:t};this._getDelta(r)>=this._DRAGDELTA&&(this._dragRunning=!0),this._createDragCopy(s,r),s.preventDefault()}}_touchEnd(s){var e;if(this._touchEndCalled=!0,this._canDrag=!1,this._currentDropContainer)this._dispatchEvent(this._currentDropContainer,"drop"),this._dispatchEvent(this._dragSrc,"dragend");else if(this._dragRunning){let t=new CustomEvent("dragend",{bubbles:!0,cancelable:!0});t.dataTransfer={dropEffect:"none"},(e=this._dragSrc)==null||e.dispatchEvent(t)}this._reset()}_touchCancel(s){this._reset()}_findDroppable(s){let e=this._getPoint(s);return this.elementFromPoint(e.x,e.y)}elementFromPoint(s,e){let t=document.elementFromPoint(s,e);if(t){for(;t.shadowRoot;){let r=t.shadowRoot.elementFromPoint(s,e);if(r===null||r===t)break;t=r}return t}return null}_getPoint(s,e){return s&&s.touches&&(s=s.touches[0]),{x:e?s.pageX:s.clientX,y:e?s.pageY:s.clientY}}_calculateDragCopyPosition(s){let e=this._dragSrc.getBoundingClientRect();this._copyOffset.x=s.clientX-e.left,this._copyOffset.y=s.clientY-e.top}_getDelta(s){let e=Math.abs(s.clientX-this._touchDown.x),t=Math.abs(s.clientY-this._touchDown.y);return e+t}_dispatchEvent(s,e,t=!0){if(!s)return!1;let r=new CustomEvent(e,{bubbles:t,cancelable:!0});return r.dataTransfer=this._dataTransfer,s.dispatchEvent(r),r.defaultPrevented}_reset(){this._dragRunning&&(this._dragSrc.style.opacity="1.0",this._dragCopy.parentElement.removeChild(this._dragCopy)),this._dragRunning=!1,this._dragSrc=null,this._dragCopy=null,this._canDrag=!1,this._touchBegin=0,this._touchDown=null,this._lastClick=0,this._touchEndCalled=!1,this._dataTransfer={data:{},setData:function(s,e){this.data[s]=e},getData:function(s){return this.data[s]},effectAllowed:"move"},this._copyOffset={x:0,y:0},this._lastTarget=null,this._currentDropContainer=null,this._handleClick=!0}};import{property as ai}from"lit/decorators.js";var jt=(l,s,e)=>{class t extends l{constructor(){super(...arguments);this.disabled=!1}firstUpdated(n){if(this.classList.contains("qti-match-tabular"))return;super.firstUpdated(n);let a=Array.from(s?this.shadowRoot.querySelectorAll(e):this.querySelectorAll(e));this.dragoverHandler=this.dragoverHandler.bind(this),this.dragleaveHandler=this.dragleaveHandler.bind(this),this.dragenterHandler=this.dragenterHandler.bind(this),this.dropHandler=this.dropHandler.bind(this),a.forEach(c=>{c.setAttribute("dropzone","move"),c.addEventListener("dragleave",this.dragleaveHandler),this.attachHandler(c)});for(let c of a)this.observer=new MutationObserver(p=>{p.forEach(d=>{if(d.type==="attributes")switch(d.attributeName){case"disabled":{c.hasAttribute("disabled")?this.removeHandler(c):this.attachHandler(c);break}}})}),this.observer.observe(c,{attributes:!0})}attachHandler(n){n.addEventListener("dragover",this.dragoverHandler),n.addEventListener("dragenter",this.dragenterHandler),n.addEventListener("drop",this.dropHandler)}removeHandler(n){n.removeEventListener("dragover",this.dragoverHandler),n.removeEventListener("dragenter",this.dragenterHandler),n.removeEventListener("drop",this.dropHandler)}disconnectedCallback(){var n;this.classList.contains("qti-match-tabular")||(super.disconnectedCallback(),(n=this.observer)==null||n.disconnect())}dragenterHandler(n){n.preventDefault()}dragoverHandler(n){return n.preventDefault(),n.currentTarget.setAttribute("active",""),n.dataTransfer.dropEffect="move",!1}dropHandler(n){n.preventDefault();let a=n.currentTarget,c=this.querySelector(`[identifier=${n.dataTransfer.getData("text")}`),p=c||this.shadowRoot.querySelector(`[identifier=${n.dataTransfer.getData("text")}`);return a?p.parentElement.getAttribute("identifier")!==a.getAttribute("identifier")&&a.appendChild(p):console.error(`cannot find droppable, target: ${n.target?JSON.stringify(n.target):"null"}`),a.removeAttribute("active"),!1}dragleaveHandler(n){return n.preventDefault(),n.currentTarget.removeAttribute("active"),n.dataTransfer.dropEffect="none",!1}}return i([ai({type:Boolean,reflect:!0})],t.prototype,"disabled",2),t};var Kt=(l,s,e)=>{class t extends l{}return t};import{property as Q}from"lit/decorators.js";var V=(l,s,e,t)=>{class r extends Kt(jt(l,e,t),t,s){constructor(){super(...arguments);this.draggables=new Map;this.responseIdentifier="";this.configuration={copyStylesDragClone:!0,dragCanBePlacedBack:!0,dragOnClick:!1};this.disabled=!1;this.readonly=!1;this.minAssociations=1;this.maxAssociations=1;this.handleDragStart=a=>{a.dataTransfer.setData("text",a.currentTarget.getAttribute("identifier")),a.currentTarget.setAttribute("dragging",""),this.droppables.forEach(c=>c.setAttribute("enabled",""))};this.handleDragEnd=a=>{a.preventDefault(),this.droppables.forEach(p=>p.removeAttribute("enabled"));let c=a.currentTarget;c.removeAttribute("over"),c.removeAttribute("dragging"),(a.dataTransfer.dropEffect==="none"||a.dataTransfer.dropEffect===void 0)&&this.configuration.dragCanBePlacedBack&&this.placeDraggableBack(c),a.dataTransfer.dropEffect==="move"&&(this.saveResponse(),this.checkMaxMatchAssociations())}}reInitDragAndDrop(a,c){if(this.classList.contains("qti-match-tabular"))return;a.filter(d=>!this.draggables||!this.draggables.get(d)).length>0&&(this.dragDropApi.addDraggables(a),a.forEach(d=>{this.draggables.set(d,{parent:d.parentElement,index:Array.from(d.parentNode.children).indexOf(d)}),d.setAttribute("qti-draggable","true"),d.addEventListener("dragstart",this.handleDragStart),d.addEventListener("dragend",this.handleDragEnd)}))}handleDragOptionsChanged(a,c){this.dragDropApi.copyStylesDragClone=c.copyStylesDragClone,this.dragDropApi.dragOnClick=c.dragOnClick}handleDisabledChange(a,c){this.draggables.forEach((p,d)=>{c?d.setAttribute("disabled",""):d.removeAttribute("disabled"),c?d.removeAttribute("qti-draggable"):d.setAttribute("qti-draggable","true")})}handleReadonlyChange(a,c){this.draggables.forEach((p,d)=>{c?d.setAttribute("readonly",""):d.removeAttribute("readonly"),c?d.removeAttribute("qti-draggable"):d.setAttribute("qti-draggable","true")})}firstUpdated(a){super.firstUpdated(a),this.droppables=Array.from(e?this.shadowRoot.querySelectorAll(t):this.querySelectorAll(t))}connectedCallback(){super.connectedCallback(),this.dragDropApi=new je,this.dispatchEvent(new CustomEvent("qti-register-interaction",{bubbles:!0,composed:!0,detail:this}))}placeDraggableBack(a){let c=this.draggables.get(a),p=c.index<=c.parent.children.length?c.index:c.parent.children.length-1,d=c.parent,m=c.parent.children[p];d.insertBefore(a,m),this.saveResponse(),this.checkMaxMatchAssociations()}reset(a=!0){this.draggables.forEach((c,p)=>{let d=c.parent.children,m=c.index<d.length?c.index:d.length;c.parent.insertBefore(p,d[m])}),a&&this.saveResponse()}checkMaxMatchAssociations(){this.droppables.forEach(a=>{let p=+(a.getAttribute("match-max")||1)<=(a.querySelectorAll('[qti-draggable="true"]').length||0);p?a.setAttribute("disabled",""):a.removeAttribute("disabled"),p?a.removeAttribute("dropzone"):a.setAttribute("dropzone","move")})}set response(a){this.classList.contains("qti-match-tabular")||(this.reset(!1),a!==null&&Array.isArray(a)&&a.forEach(c=>{let[p,...d]=c.split(" ").reverse();if(p){let m=this.droppables.find(y=>y.getAttribute("identifier")===p);d.forEach(y=>{let g=this.querySelector(`[identifier=${y}]`);m?g?(m.appendChild(g),this.checkMaxMatchAssociations()):console.error(`cannot find draggable with identifier: ${y}`):console.error(`cannot find droppable with identifier: ${p}`)})}}))}validate(){let c=(e?Array.from(this.shadowRoot.querySelectorAll(t)):Array.from(this.querySelectorAll(t))).filter(p=>p.childElementCount>0).length;return this.minAssociations<=0||this.minAssociations<=c}saveResponse(){let a;typeof this.getResponse=="function"?a=this.getResponse():a=this.droppables.map(c=>{let p=c.querySelectorAll('[qti-draggable="true"]'),d=Array.from(p).map(y=>y.getAttribute("identifier")),m=c.getAttribute("identifier");return[...d,m].join(" ")}),this.dispatchEvent(new CustomEvent("qti-interaction-response",{bubbles:!0,composed:!0,detail:{responseIdentifier:this.responseIdentifier,response:a}}))}}return i([Vt(s)],r.prototype,"reInitDragAndDrop",1),i([Q({type:String,attribute:"response-identifier"})],r.prototype,"responseIdentifier",2),i([Q({attribute:!1,type:Object})],r.prototype,"configuration",2),i([b("configuration")],r.prototype,"handleDragOptionsChanged",1),i([Q({type:Boolean,reflect:!0})],r.prototype,"disabled",2),i([b("disabled",{waitUntilFirstUpdate:!0})],r.prototype,"handleDisabledChange",1),i([Q({type:Boolean,reflect:!0})],r.prototype,"readonly",2),i([b("readonly",{waitUntilFirstUpdate:!0})],r.prototype,"handleReadonlyChange",1),i([Q({type:Number,reflect:!0,attribute:"min-associations"})],r.prototype,"minAssociations",2),i([Q({type:Number,reflect:!0,attribute:"max-associations"})],r.prototype,"maxAssociations",2),r};var ee=class extends V(li,"qti-simple-associable-choice",!0,".dl"){render(){return Wt` <slot name="prompt"></slot>
172
+ </div>`}`}};i([kt({type:String,attribute:"response-identifier"})],I.prototype,"responseIdentifier",2),i([kt({type:String,attribute:"module"})],I.prototype,"module",2),i([kt({type:String,attribute:"custom-interaction-type-identifier"})],I.prototype,"customInteractionTypeIdentifier",2),i([ni()],I.prototype,"_errorMessage",2),I=i([oi("qti-portable-custom-interaction")],I);import{LitElement as li,css as ci,html as Wt}from"lit";import{customElement as pi,state as di}from"lit/decorators.js";var je=class l{constructor(){this._touchBegin=0;this._touchDown=null;this._lastClick=0;this._canDrag=!1;this._dragSrc=null;this._dragCopy=null;this._touchEndCalled=!1;this._dragRunning=!1;this._dataTransfer={data:{},setData:function(s,e){this.data[s]=e},getData:function(s){return this.data[s]},effectAllowed:"move"};this._copyOffset={x:0,y:0};this._lastTarget=null;this._currentDropContainer=null;this._handleClick=!0;this._DBLCLICKDELAY=500;this._CONTEXTMENUDELAY=1e3;this._DRAGDELTA=5;this._COPYOPACITY=.7;this.copyStylesDragClone=!0;this.dragOnClick=!1;this._createDragCopy=(s,e)=>{if(this._dragCopy===null&&this._dragRunning){this._dragSrc.style.opacity=this._COPYOPACITY,this._dragCopy=this._dragSrc.cloneNode(!0);let t=window.getComputedStyle(this._dragSrc);if(this._dragCopy.style="",this._dragCopy.setAttribute("dragclone",""),this.copyStylesDragClone)for(let r of t)this._dragCopy.style[r]=t.getPropertyValue(r);this._calculateDragCopyPosition(e),this._dragCopy.style.top=e.clientY-this._copyOffset.y+"px",this._dragCopy.style.left=e.clientX-this._copyOffset.x+"px",this._dragCopy.style.position="fixed",this._dragCopy.style.pointerEvents="none",this._dragCopy.style.zIndex="999999",this._dragCopy=document.body.appendChild(this._dragCopy),this._dispatchEvent(this._dragSrc,"dragstart")}if(this._dragRunning){let t=this;requestAnimationFrame(function(){t._touchEndCalled||t._dragCopy===null||(t._dragCopy.style.top=e.clientY-t._copyOffset.y+"px",t._dragCopy.style.left=e.clientX-t._copyOffset.x+"px")});let r=this._findDroppable(s);r!=this._lastTarget&&(this._dispatchEvent(r,"dragenter"),this._dispatchEvent(this._lastTarget,"dragleave"),this._lastTarget=r),this._currentDropContainer=r,this._currentDropContainer&&this._dispatchEvent(r,"dragover")}};return l._instance?l._instance:(l._instance=this,document.addEventListener("touchmove",this._touchMove.bind(this),{passive:!1,capture:!1}),document.addEventListener("mousemove",this._touchMove.bind(this),{passive:!1,capture:!1}),document.addEventListener("touchend",this._touchEnd.bind(this),{passive:!1,capture:!1}),document.addEventListener("mouseup",this._touchEnd.bind(this),{passive:!1,capture:!1}),document.addEventListener("touchcancel",this._touchCancel.bind(this),{passive:!1,capture:!1}),this)}addDraggables(s){s.forEach(e=>{e.addEventListener("touchstart",this._touchStart.bind(this),{passive:!1,capture:!1}),e.addEventListener("mousedown",this._touchStart.bind(this),{passive:!1,capture:!1})})}_touchStart(s){this._touchBegin=Date.now();let{x:e,y:t}=this._getPoint(s);if(this._touchDown={x:e,y:t},this._dragSrc=s.currentTarget,this._canDrag=!0,this.dragOnClick){let r={clientX:e,clientY:t};this._dragRunning=!0,this._createDragCopy(s,r)}s.preventDefault()}_touchMove(s){if(this._canDrag&&this._dragSrc){let{x:e,y:t}=this._getPoint(s),r={clientX:e,clientY:t};this._getDelta(r)>=this._DRAGDELTA&&(this._dragRunning=!0),this._createDragCopy(s,r),s.preventDefault()}}_touchEnd(s){var e;if(this._touchEndCalled=!0,this._canDrag=!1,this._currentDropContainer)this._dispatchEvent(this._currentDropContainer,"drop"),this._dispatchEvent(this._dragSrc,"dragend");else if(this._dragRunning){let t=new CustomEvent("dragend",{bubbles:!0,cancelable:!0});t.dataTransfer={dropEffect:"none"},(e=this._dragSrc)==null||e.dispatchEvent(t)}this._reset()}_touchCancel(s){this._reset()}_findDroppable(s){let e=this._getPoint(s);return this.elementFromPoint(e.x,e.y)}elementFromPoint(s,e){let t=document.elementFromPoint(s,e);if(t){for(;t.shadowRoot;){let r=t.shadowRoot.elementFromPoint(s,e);if(r===null||r===t)break;t=r}return t}return null}_getPoint(s,e){return s&&s.touches&&(s=s.touches[0]),{x:e?s.pageX:s.clientX,y:e?s.pageY:s.clientY}}_calculateDragCopyPosition(s){let e=this._dragSrc.getBoundingClientRect();this._copyOffset.x=s.clientX-e.left,this._copyOffset.y=s.clientY-e.top}_getDelta(s){let e=Math.abs(s.clientX-this._touchDown.x),t=Math.abs(s.clientY-this._touchDown.y);return e+t}_dispatchEvent(s,e,t=!0){if(!s)return!1;let r=new CustomEvent(e,{bubbles:t,cancelable:!0});return r.dataTransfer=this._dataTransfer,s.dispatchEvent(r),r.defaultPrevented}_reset(){this._dragRunning&&(this._dragSrc.style.opacity="1.0",this._dragCopy.parentElement.removeChild(this._dragCopy)),this._dragRunning=!1,this._dragSrc=null,this._dragCopy=null,this._canDrag=!1,this._touchBegin=0,this._touchDown=null,this._lastClick=0,this._touchEndCalled=!1,this._dataTransfer={data:{},setData:function(s,e){this.data[s]=e},getData:function(s){return this.data[s]},effectAllowed:"move"},this._copyOffset={x:0,y:0},this._lastTarget=null,this._currentDropContainer=null,this._handleClick=!0}};import{property as ai}from"lit/decorators.js";var jt=(l,s,e)=>{class t extends l{constructor(){super(...arguments);this.disabled=!1}firstUpdated(n){if(this.classList.contains("qti-match-tabular"))return;super.firstUpdated(n);let a=Array.from(s?this.shadowRoot.querySelectorAll(e):this.querySelectorAll(e));this.dragoverHandler=this.dragoverHandler.bind(this),this.dragleaveHandler=this.dragleaveHandler.bind(this),this.dragenterHandler=this.dragenterHandler.bind(this),this.dropHandler=this.dropHandler.bind(this),a.forEach(c=>{c.setAttribute("dropzone","move"),c.addEventListener("dragleave",this.dragleaveHandler),this.attachHandler(c)});for(let c of a)this.observer=new MutationObserver(p=>{p.forEach(d=>{if(d.type==="attributes")switch(d.attributeName){case"disabled":{c.hasAttribute("disabled")?this.removeHandler(c):this.attachHandler(c);break}}})}),this.observer.observe(c,{attributes:!0})}attachHandler(n){n.addEventListener("dragover",this.dragoverHandler),n.addEventListener("dragenter",this.dragenterHandler),n.addEventListener("drop",this.dropHandler)}removeHandler(n){n.removeEventListener("dragover",this.dragoverHandler),n.removeEventListener("dragenter",this.dragenterHandler),n.removeEventListener("drop",this.dropHandler)}disconnectedCallback(){var n;this.classList.contains("qti-match-tabular")||(super.disconnectedCallback(),(n=this.observer)==null||n.disconnect())}dragenterHandler(n){n.preventDefault()}dragoverHandler(n){return n.preventDefault(),n.currentTarget.setAttribute("active",""),n.dataTransfer.dropEffect="move",!1}dropHandler(n){n.preventDefault();let a=n.currentTarget,c=this.querySelector(`[identifier=${n.dataTransfer.getData("text")}`),p=c||this.shadowRoot.querySelector(`[identifier=${n.dataTransfer.getData("text")}`);return a?p.parentElement.getAttribute("identifier")!==a.getAttribute("identifier")&&a.appendChild(p):console.error(`cannot find droppable, target: ${n.target?JSON.stringify(n.target):"null"}`),a.removeAttribute("active"),!1}dragleaveHandler(n){return n.preventDefault(),n.currentTarget.removeAttribute("active"),n.dataTransfer.dropEffect="none",!1}}return i([ai({type:Boolean,reflect:!0})],t.prototype,"disabled",2),t};var Kt=(l,s,e)=>{class t extends l{}return t};import{property as Q}from"lit/decorators.js";var V=(l,s,e,t)=>{class r extends Kt(jt(l,e,t),t,s){constructor(){super(...arguments);this.draggables=new Map;this.responseIdentifier="";this.configuration={copyStylesDragClone:!0,dragCanBePlacedBack:!0,dragOnClick:!1};this.disabled=!1;this.readonly=!1;this.minAssociations=1;this.maxAssociations=1;this.handleDragStart=a=>{a.dataTransfer.setData("text",a.currentTarget.getAttribute("identifier")),a.currentTarget.setAttribute("dragging",""),this.droppables.forEach(c=>c.setAttribute("enabled",""))};this.handleDragEnd=a=>{a.preventDefault(),this.droppables.forEach(p=>p.removeAttribute("enabled"));let c=a.currentTarget;c.removeAttribute("over"),c.removeAttribute("dragging"),(a.dataTransfer.dropEffect==="none"||a.dataTransfer.dropEffect===void 0)&&this.configuration.dragCanBePlacedBack&&this.placeDraggableBack(c),a.dataTransfer.dropEffect==="move"&&(this.saveResponse(),this.checkMaxMatchAssociations())}}reInitDragAndDrop(a,c){if(this.classList.contains("qti-match-tabular"))return;a.filter(d=>!this.draggables||!this.draggables.get(d)).length>0&&(this.dragDropApi.addDraggables(a),a.forEach(d=>{this.draggables.set(d,{parent:d.parentElement,index:Array.from(d.parentNode.children).indexOf(d)}),d.setAttribute("qti-draggable","true"),d.addEventListener("dragstart",this.handleDragStart),d.addEventListener("dragend",this.handleDragEnd)}))}handleDragOptionsChanged(a,c){this.dragDropApi.copyStylesDragClone=c.copyStylesDragClone,this.dragDropApi.dragOnClick=c.dragOnClick}handleDisabledChange(a,c){this.draggables.forEach((p,d)=>{c?d.setAttribute("disabled",""):d.removeAttribute("disabled"),c?d.removeAttribute("qti-draggable"):d.setAttribute("qti-draggable","true")})}handleReadonlyChange(a,c){this.draggables.forEach((p,d)=>{c?d.setAttribute("readonly",""):d.removeAttribute("readonly"),c?d.removeAttribute("qti-draggable"):d.setAttribute("qti-draggable","true")})}firstUpdated(a){super.firstUpdated(a),this.droppables=Array.from(e?this.shadowRoot.querySelectorAll(t):this.querySelectorAll(t))}connectedCallback(){super.connectedCallback(),this.dragDropApi=new je,this.dispatchEvent(new CustomEvent("qti-register-interaction",{bubbles:!0,composed:!0,detail:this}))}placeDraggableBack(a){let c=this.draggables.get(a),p=c.index<=c.parent.children.length?c.index:c.parent.children.length-1,d=c.parent,m=c.parent.children[p];d.insertBefore(a,m),this.saveResponse(),this.checkMaxMatchAssociations()}reset(a=!0){this.draggables.forEach((c,p)=>{let d=c.parent.children,m=c.index<d.length?c.index:d.length;c.parent.insertBefore(p,d[m])}),a&&this.saveResponse()}checkMaxMatchAssociations(){this.droppables.forEach(a=>{let p=+(a.getAttribute("match-max")||1)<=(a.querySelectorAll('[qti-draggable="true"]').length||0);p?a.setAttribute("disabled",""):a.removeAttribute("disabled"),p?a.removeAttribute("dropzone"):a.setAttribute("dropzone","move")})}set response(a){this.classList.contains("qti-match-tabular")||(this.reset(!1),a!==null&&Array.isArray(a)&&a.forEach(c=>{let[p,...d]=c.split(" ").reverse();if(p){let m=this.droppables.find(y=>y.getAttribute("identifier")===p);d.forEach(y=>{let g=this.querySelector(`[identifier=${y}]`);m?g?(m.appendChild(g),this.checkMaxMatchAssociations()):console.error(`cannot find draggable with identifier: ${y}`):console.error(`cannot find droppable with identifier: ${p}`)})}}))}validate(){let c=(e?Array.from(this.shadowRoot.querySelectorAll(t)):Array.from(this.querySelectorAll(t))).filter(p=>p.childElementCount>0).length;return this.minAssociations<=0||this.minAssociations<=c}saveResponse(){let a;typeof this.getResponse=="function"?a=this.getResponse():a=this.droppables.map(c=>{let p=c.querySelectorAll('[qti-draggable="true"]'),d=Array.from(p).map(y=>y.getAttribute("identifier")),m=c.getAttribute("identifier");return[...d,m].join(" ")}),this.dispatchEvent(new CustomEvent("qti-interaction-response",{bubbles:!0,composed:!0,detail:{responseIdentifier:this.responseIdentifier,response:a}}))}}return i([Vt(s)],r.prototype,"reInitDragAndDrop",1),i([Q({type:String,attribute:"response-identifier"})],r.prototype,"responseIdentifier",2),i([Q({attribute:!1,type:Object})],r.prototype,"configuration",2),i([b("configuration")],r.prototype,"handleDragOptionsChanged",1),i([Q({type:Boolean,reflect:!0})],r.prototype,"disabled",2),i([b("disabled",{waitUntilFirstUpdate:!0})],r.prototype,"handleDisabledChange",1),i([Q({type:Boolean,reflect:!0})],r.prototype,"readonly",2),i([b("readonly",{waitUntilFirstUpdate:!0})],r.prototype,"handleReadonlyChange",1),i([Q({type:Number,reflect:!0,attribute:"min-associations"})],r.prototype,"minAssociations",2),i([Q({type:Number,reflect:!0,attribute:"max-associations"})],r.prototype,"maxAssociations",2),r};var ee=class extends V(li,"qti-simple-associable-choice",!0,".dl"){render(){return Wt` <slot name="prompt"></slot>
173
173
  <slot name="qti-simple-associable-choice"></slot>
174
174
  ${this._childrenMap.length>0&&Array.from(Array(Math.ceil(this._childrenMap.length/2)).keys()).map((s,e)=>Wt`<div part="associables-container">
175
175
  <div name="left${e}" part="drop-list" class="dl" identifier="droplist${e}_left"></div>
@@ -229,14 +229,14 @@ import{a as f,b as x,c as i,d as Mt}from"../chunk-H4VLZ2F7.js";import{provide as
229
229
  flex: 1;
230
230
  gap: 0.5rem;
231
231
  }
232
- `],ge=i([yi("qti-gap-match-interaction")],ge);import{css as xi,html as Ei,svg as Zt}from"lit";import{customElement as qi,query as Ci,queryAssignedElements as _i,state as Tt}from"lit/decorators.js";import{ifDefined as Gt}from"lit/directives/if-defined.js";import{repeat as wi}from"lit/directives/repeat.js";function re(l,s,e,t){switch(l){case"circle":{let[r,o,n]=s,a=r/e.width*100,c=o/e.height*100,p=n/e.width*100;t.style.left=a-p+"%",t.style.top=c-p+"%",t.style.width=t.style.height=4*p+"px",t.style.borderRadius="9999px"}break;case"rect":{let[r,o,n,a]=s,c=r/e.width*100,p=o/e.height*100,d=n/e.width*100,m=a/e.height*100;t.style.left=c+"%",t.style.top=p+"%",t.style.width=d-c+"%",t.style.height=m-p+"%"}break;case"poly":{let r=s.reduce((v,Y,St,nr)=>{if(St%2===1){let ar=v.pop();v[v.length]={x:ar,y:nr[St]}}else v.push(Y);return v},[]),o=Math.min(...r.map(v=>v.x)),n=Math.max(...r.map(v=>v.x)),a=Math.min(...r.map(v=>v.y)),c=Math.max(...r.map(v=>v.y)),p=o/e.width*100,d=a/e.height*100,m=n/e.width*100,y=c/e.height*100;t.style.left=o/e.width*100+"%",t.style.top=a/e.height*100+"%",t.style.width=m-p+"%",t.style.height=y-d+"%";let A=r.map(v=>({x:(v.x-o)/(n-o)*100,y:(v.y-a)/(c-a)*100})).map(v=>Math.round(v.x)+"% "+Math.round(v.y)+"%").join(",");t.style.clipPath=`polygon(${A})`}break;default:break}}var D=class extends h{constructor(){super();this.startPoint=null;this.endPoint=null;this._lines=[];this.addEventListener("qti-register-hotspot",this.positionHotspotOnRegister)}reset(){this._lines=[]}validate(){return this._lines.length>0}set response(e){Array.isArray(e)&&(this._lines=e)}render(){var e,t,r,o;return Ei`<slot name="prompt"></slot>
232
+ `],ge=i([yi("qti-gap-match-interaction")],ge);import{css as xi,html as Ei,svg as Zt}from"lit";import{customElement as qi,query as Ci,queryAssignedElements as _i,state as Tt}from"lit/decorators.js";import{ifDefined as Gt}from"lit/directives/if-defined.js";import{repeat as ki}from"lit/directives/repeat.js";function re(l,s,e,t){switch(l){case"circle":{let[r,o,n]=s,a=r/e.width*100,c=o/e.height*100,p=n/e.width*100;t.style.left=a-p+"%",t.style.top=c-p+"%",t.style.width=t.style.height=4*p+"px",t.style.borderRadius="9999px"}break;case"rect":{let[r,o,n,a]=s,c=r/e.width*100,p=o/e.height*100,d=n/e.width*100,m=a/e.height*100;t.style.left=c+"%",t.style.top=p+"%",t.style.width=d-c+"%",t.style.height=m-p+"%"}break;case"poly":{let r=s.reduce((v,Y,St,nr)=>{if(St%2===1){let ar=v.pop();v[v.length]={x:ar,y:nr[St]}}else v.push(Y);return v},[]),o=Math.min(...r.map(v=>v.x)),n=Math.max(...r.map(v=>v.x)),a=Math.min(...r.map(v=>v.y)),c=Math.max(...r.map(v=>v.y)),p=o/e.width*100,d=a/e.height*100,m=n/e.width*100,y=c/e.height*100;t.style.left=o/e.width*100+"%",t.style.top=a/e.height*100+"%",t.style.width=m-p+"%",t.style.height=y-d+"%";let A=r.map(v=>({x:(v.x-o)/(n-o)*100,y:(v.y-a)/(c-a)*100})).map(v=>Math.round(v.x)+"% "+Math.round(v.y)+"%").join(",");t.style.clipPath=`polygon(${A})`}break;default:break}}var D=class extends h{constructor(){super();this.startPoint=null;this.endPoint=null;this._lines=[];this.addEventListener("qti-register-hotspot",this.positionHotspotOnRegister)}reset(){this._lines=[]}validate(){return this._lines.length>0}set response(e){Array.isArray(e)&&(this._lines=e)}render(){var e,t,r,o;return Ei`<slot name="prompt"></slot>
233
233
  <line-container>
234
234
  <svg
235
235
  width=${Gt((e=this.grImage[0])==null?void 0:e.width)}
236
236
  height=${Gt((t=this.grImage[0])==null?void 0:t.height)}
237
237
  viewbox="0 0 ${(r=this.grImage[0])==null?void 0:r.width} ${(o=this.grImage[0])==null?void 0:o.height}"
238
238
  >
239
- ${wi(this._lines,n=>n,(n,a)=>Zt`
239
+ ${ki(this._lines,n=>n,(n,a)=>Zt`
240
240
  <line
241
241
  part="line"
242
242
  x1=${parseInt(this.querySelector("[identifier="+n.split(" ")[0]+"]").style.left)}
@@ -282,7 +282,7 @@ import{a as f,b as x,c as i,d as Mt}from"../chunk-H4VLZ2F7.js";import{provide as
282
282
  top: 0px;
283
283
  left: 0px;
284
284
  }
285
- `],i([Tt()],D.prototype,"_lines",2),i([Tt()],D.prototype,"startCoord",2),i([Tt()],D.prototype,"mouseCoord",2),i([Ci("svg")],D.prototype,"svgContainer",2),i([_i({selector:"img"})],D.prototype,"grImage",2),D=i([qi("qti-graphic-associate-interaction")],D);import{css as Ti,html as ki,LitElement as Ri}from"lit";import{customElement as Ai}from"lit/decorators.js";var be=class extends V(Ri,"qti-gap-img",!1,"qti-associable-hotspot"){render(){return ki` <slot></slot>
285
+ `],i([Tt()],D.prototype,"_lines",2),i([Tt()],D.prototype,"startCoord",2),i([Tt()],D.prototype,"mouseCoord",2),i([Ci("svg")],D.prototype,"svgContainer",2),i([_i({selector:"img"})],D.prototype,"grImage",2),D=i([qi("qti-graphic-associate-interaction")],D);import{css as Ti,html as Ri,LitElement as wi}from"lit";import{customElement as Ai}from"lit/decorators.js";var be=class extends V(wi,"qti-gap-img",!1,"qti-associable-hotspot"){render(){return Ri` <slot></slot>
286
286
  <slot name="qti-gap-img"></slot>`}positionHotspotOnRegister(s){let e=this.querySelector("img"),t=s.target,r=t.getAttribute("coords"),o=t.getAttribute("shape"),n=r.split(",").map(a=>parseInt(a));switch(o){case"circle":{let[a,c,p]=n;t.style.left=a-p+"px",t.style.top=c-p+"px",t.style.width=t.style.height=2*p+"px"}break;case"rect":{let[a,c,p,d]=n;t.style.left=a+"px",t.style.top=c+"px",t.style.width=p-a+"px",t.style.height=d-c+"px"}break;default:break}}connectedCallback(){super.connectedCallback(),this.addEventListener("qti-register-hotspot",this.positionHotspotOnRegister)}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("qti-register-hotspot",this.positionHotspotOnRegister)}};be.styles=Ti`
287
287
  :host {
288
288
  display: inline-block;
@@ -292,7 +292,7 @@ import{a as f,b as x,c as i,d as Mt}from"../chunk-H4VLZ2F7.js";import{provide as
292
292
  display: flex;
293
293
  gap: 1rem;
294
294
  }
295
- `,be=i([Ai("qti-graphic-gap-match-interaction")],be);import{css as Si,html as Mi}from"lit";import{customElement as Li}from"lit/decorators.js";var ve=class extends E{render(){return Mi`
295
+ `,be=i([Ai("qti-graphic-gap-match-interaction")],be);import{css as Si,html as Li}from"lit";import{customElement as Mi}from"lit/decorators.js";var ve=class extends x{render(){return Li`
296
296
  <slot name="prompt"></slot>
297
297
  <!-- slot for the prompt -->
298
298
  <slot></slot>
@@ -308,7 +308,7 @@ import{a as f,b as x,c as i,d as Mt}from"../chunk-H4VLZ2F7.js";import{provide as
308
308
  pointer-events: none;
309
309
  user-select: none;
310
310
  }
311
- `],ve=i([Li("qti-graphic-order-interaction")],ve);import{css as Ni,html as Hi}from"lit";import{customElement as Vi}from"lit/decorators.js";var ye=class extends E{render(){return Hi`
311
+ `],ve=i([Mi("qti-graphic-order-interaction")],ve);import{css as Ni,html as Hi}from"lit";import{customElement as Vi}from"lit/decorators.js";var ye=class extends x{render(){return Hi`
312
312
  <slot name="prompt"></slot>
313
313
  <!-- slot for the prompt -->
314
314
  <slot></slot>
@@ -325,10 +325,10 @@ import{a as f,b as x,c as i,d as Mt}from"../chunk-H4VLZ2F7.js";import{provide as
325
325
  user-select: none;
326
326
  /* width:100%; */
327
327
  }
328
- `],ye=i([Vi("qti-hotspot-interaction")],ye);import{css as Oi,html as xe,LitElement as Ui}from"lit";import{customElement as Fi,property as Ii,state as Qt}from"lit/decorators.js";import{unsafeHTML as er}from"lit/directives/unsafe-html.js";import{html as $i,LitElement as Di}from"lit";import{customElement as Pi,property as kt}from"lit/decorators.js";var K=class extends Di{constructor(){super(...arguments);this.matchMin=0;this.matchMax=1;this.fixed=!1}connectedCallback(){super.connectedCallback(),this.setAttribute("slot","qti-simple-associable-choice"),this.setAttribute("part","qti-simple-associable-choice")}render(){return $i`
328
+ `],ye=i([Vi("qti-hotspot-interaction")],ye);import{css as Oi,html as xe,LitElement as Ui}from"lit";import{customElement as Fi,property as Ii,state as Qt}from"lit/decorators.js";import{unsafeHTML as er}from"lit/directives/unsafe-html.js";import{html as $i,LitElement as Di}from"lit";import{customElement as Pi,property as Rt}from"lit/decorators.js";var K=class extends Di{constructor(){super(...arguments);this.matchMin=0;this.matchMax=1;this.fixed=!1}connectedCallback(){super.connectedCallback(),this.setAttribute("slot","qti-simple-associable-choice"),this.setAttribute("part","qti-simple-associable-choice")}render(){return $i`
329
329
  <slot></slot>
330
330
  <slot name="qti-simple-associable-choice"></slot>
331
- `}};i([kt({type:Number,attribute:"match-min"})],K.prototype,"matchMin",2),i([kt({type:Number,attribute:"match-max"})],K.prototype,"matchMax",2),i([kt({type:Boolean,attribute:"fixed"})],K.prototype,"fixed",2),K=i([Pi("qti-simple-associable-choice")],K);var B=class extends V(Ui,"qti-simple-match-set:first-of-type qti-simple-associable-choice",!1,"qti-simple-match-set:last-of-type qti-simple-associable-choice"){constructor(){super(...arguments);this.lastCheckedRadio=null;this.response=[];this.correctOptions=[];this.responseIdentifier="";this.handleRadioClick=e=>{let t=e.target;this.lastCheckedRadio===t?(t.checked=!1,this.lastCheckedRadio=null,this.handleRadioChange(e)):this.lastCheckedRadio=t};this.handleRadioChange=e=>{let t=e.target,r=t.value,o=t.name,n=t.type;t.checked?(this.response?this.response.indexOf(r)===-1&&(n==="radio"&&(this.response=this.response.filter(a=>a.indexOf(o)===-1)),this.response=[...this.response,r]):this.response=[r],this.lastCheckedRadio=t):(this.response=this.response.filter(a=>a!==r),this.lastCheckedRadio=null),this.requestUpdate(),this.dispatchEvent(new CustomEvent("qti-interaction-response",{bubbles:!0,composed:!0,detail:{responseIdentifier:this.responseIdentifier,response:Array.isArray(this.response)?[...this.response]:this.response}}))}}connectedCallback(){super.connectedCallback(),this.rows=Array.from(this.querySelectorAll("qti-simple-match-set:first-of-type qti-simple-associable-choice")),this.cols=Array.from(this.querySelectorAll("qti-simple-match-set:last-of-type qti-simple-associable-choice")),this.response=[]}set correctResponse(e){if(e===""){this.correctOptions=[];return}else Array.isArray(e)&&(this.correctOptions=e)}render(){return this.classList.contains("qti-match-tabular")?xe`
331
+ `}};i([Rt({type:Number,attribute:"match-min"})],K.prototype,"matchMin",2),i([Rt({type:Number,attribute:"match-max"})],K.prototype,"matchMax",2),i([Rt({type:Boolean,attribute:"fixed"})],K.prototype,"fixed",2),K=i([Pi("qti-simple-associable-choice")],K);var B=class extends V(Ui,"qti-simple-match-set:first-of-type qti-simple-associable-choice",!1,"qti-simple-match-set:last-of-type qti-simple-associable-choice"){constructor(){super(...arguments);this.lastCheckedRadio=null;this.response=[];this.correctOptions=[];this.responseIdentifier="";this.handleRadioClick=e=>{let t=e.target;this.lastCheckedRadio===t?(t.checked=!1,this.lastCheckedRadio=null,this.handleRadioChange(e)):this.lastCheckedRadio=t};this.handleRadioChange=e=>{let t=e.target,r=t.value,o=t.name,n=t.type;t.checked?(this.response?this.response.indexOf(r)===-1&&(n==="radio"&&(this.response=this.response.filter(a=>a.indexOf(o)===-1)),this.response=[...this.response,r]):this.response=[r],this.lastCheckedRadio=t):(this.response=this.response.filter(a=>a!==r),this.lastCheckedRadio=null),this.requestUpdate(),this.dispatchEvent(new CustomEvent("qti-interaction-response",{bubbles:!0,composed:!0,detail:{responseIdentifier:this.responseIdentifier,response:Array.isArray(this.response)?[...this.response]:this.response}}))}}connectedCallback(){super.connectedCallback(),this.rows=Array.from(this.querySelectorAll("qti-simple-match-set:first-of-type qti-simple-associable-choice")),this.cols=Array.from(this.querySelectorAll("qti-simple-match-set:last-of-type qti-simple-associable-choice")),this.response=[]}set correctResponse(e){if(e===""){this.correctOptions=[];return}else Array.isArray(e)&&(this.correctOptions=e)}render(){return this.classList.contains("qti-match-tabular")?xe`
332
332
  <slot name="prompt"></slot>
333
333
  <table>
334
334
  <tr>
@@ -370,8 +370,8 @@ import{a as f,b as x,c as i,d as Mt}from"../chunk-H4VLZ2F7.js";import{provide as
370
370
  :host(.qti-choices-right) {
371
371
  flex-direction: row-reverse;
372
372
  }
373
- `],i([Qt()],B.prototype,"response",2),i([Qt()],B.prototype,"correctOptions",2),i([Ii({type:String,attribute:"response-identifier"})],B.prototype,"responseIdentifier",2),B=i([Fi("qti-match-interaction")],B);import{css as Bi,html as Xi}from"lit";import{customElement as Yi}from"lit/decorators.js";var Ee=class extends h{constructor(){super();this.value=0}reset(){}validate(){return!0}set response(e){}static get properties(){return x(f({},h.properties),{step:{type:Number,attribute:"step",default:10}})}render(){return Xi` <slot name="prompt"></slot>
374
- <slot></slot>`}connectedCallback(){super.connectedCallback();let e=this.querySelector("audio")||this.querySelector("video")||this.querySelector("object");e&&e.addEventListener("ended",()=>{this.value++,this.saveResponse(this.value.toString())})}};Ee.styles=[Bi``],Ee=i([Yi("qti-media-interaction")],Ee);import{css as ji,html as rr,LitElement as Ki}from"lit";import{customElement as Wi,property as zi,state as Rt}from"lit/decorators.js";import{unsafeHTML as Ji}from"lit/directives/unsafe-html.js";var tr=(l,s)=>{class e extends l{constructor(){super(...arguments);this._shuffle=!0}firstUpdated(o){super.firstUpdated(o),this._shuffle&&this._shuffleChoices()}get shuffle(){return this._shuffle}set shuffle(o){let n=this._shuffle;this._shuffle=o,o?this._shuffleChoices():this._resetShuffleChoices(),this.requestUpdate("shuffle",n)}_shuffleChoices(){let o=Array.from(this.querySelectorAll(s)),n=[],a=[];o.forEach((p,d)=>{p.hasAttribute("fixed")?n.push({element:p,index:d}):a.push(p)});for(let p=a.length-1;p>0;p--){let d=Math.floor(Math.random()*(p+1));[a[p],a[d]]=[a[d],a[p]]}let c=1;o.forEach((p,d)=>{if(p.hasAttribute("fixed"))p.style.order=String(c++);else{let m=a.shift();m.style.order=c++}})}_resetShuffleChoices(){Array.from(this.querySelectorAll("qti-simple-choice")).forEach((n,a)=>{n.style.order="initial"})}}return e};var O=class extends tr(V(Ki,"qti-simple-choice",!0,"drop-list"),"qti-simple-choice"){constructor(){super(...arguments);this.nrChoices=0;this.correctResponses=[];this.showCorrectResponses=!1}render(){let e=Array.from(this.querySelectorAll("qti-simple-choice"));return this.nrChoices<e.length&&(this.nrChoices=e.length),rr` <slot name="prompt"> </slot>
373
+ `],i([Qt()],B.prototype,"response",2),i([Qt()],B.prototype,"correctOptions",2),i([Ii({type:String,attribute:"response-identifier"})],B.prototype,"responseIdentifier",2),B=i([Fi("qti-match-interaction")],B);import{css as Bi,html as Xi}from"lit";import{customElement as Yi}from"lit/decorators.js";var Ee=class extends h{constructor(){super();this.value=0}reset(){}validate(){return!0}set response(e){}static get properties(){return C(f({},h.properties),{step:{type:Number,attribute:"step",default:10}})}render(){return Xi` <slot name="prompt"></slot>
374
+ <slot></slot>`}connectedCallback(){super.connectedCallback();let e=this.querySelector("audio")||this.querySelector("video")||this.querySelector("object");e&&e.addEventListener("ended",()=>{this.value++,this.saveResponse(this.value.toString())})}};Ee.styles=[Bi``],Ee=i([Yi("qti-media-interaction")],Ee);import{css as ji,html as rr,LitElement as Ki}from"lit";import{customElement as Wi,property as zi,state as wt}from"lit/decorators.js";import{unsafeHTML as Ji}from"lit/directives/unsafe-html.js";var tr=(l,s)=>{class e extends l{constructor(){super(...arguments);this._shuffle=!0}firstUpdated(o){super.firstUpdated(o),this._shuffle&&this._shuffleChoices()}get shuffle(){return this._shuffle}set shuffle(o){let n=this._shuffle;this._shuffle=o,o?this._shuffleChoices():this._resetShuffleChoices(),this.requestUpdate("shuffle",n)}_shuffleChoices(){let o=Array.from(this.querySelectorAll(s)),n=[],a=[];o.forEach((p,d)=>{p.hasAttribute("fixed")?n.push({element:p,index:d}):a.push(p)});for(let p=a.length-1;p>0;p--){let d=Math.floor(Math.random()*(p+1));[a[p],a[d]]=[a[d],a[p]]}let c=1;o.forEach((p,d)=>{if(p.hasAttribute("fixed"))p.style.order=String(c++);else{let m=a.shift();m.style.order=c++}})}_resetShuffleChoices(){Array.from(this.querySelectorAll("qti-simple-choice")).forEach((n,a)=>{n.style.order="initial"})}}return e};var O=class extends tr(V(Ki,"qti-simple-choice",!0,"drop-list"),"qti-simple-choice"){constructor(){super(...arguments);this.nrChoices=0;this.correctResponses=[];this.showCorrectResponses=!1}render(){let e=Array.from(this.querySelectorAll("qti-simple-choice"));return this.nrChoices<e.length&&(this.nrChoices=e.length),rr` <slot name="prompt"> </slot>
375
375
  <div part="container">
376
376
  <slot part="drags"> </slot>
377
377
  <div part="drops">
@@ -425,7 +425,7 @@ import{a as f,b as x,c as i,d as Mt}from"../chunk-H4VLZ2F7.js";import{provide as
425
425
  :host(.qti-choices-right) [part='container'] {
426
426
  flex-direction: row-reverse;
427
427
  }
428
- `],i([Rt()],O.prototype,"nrChoices",2),i([Rt()],O.prototype,"correctResponses",2),i([Rt()],O.prototype,"showCorrectResponses",2),i([zi({type:String})],O.prototype,"orientation",2),O=i([Wi("qti-order-interaction")],O);import{LitElement as Zi,css as Gi,html as Qi}from"lit";var Ke=class extends Zi{render(){return Qi`<slot></slot>`}};Ke.styles=[Gi`
428
+ `],i([wt()],O.prototype,"nrChoices",2),i([wt()],O.prototype,"correctResponses",2),i([wt()],O.prototype,"showCorrectResponses",2),i([zi({type:String})],O.prototype,"orientation",2),O=i([Wi("qti-order-interaction")],O);import{LitElement as Zi,css as Gi,html as Qi}from"lit";var Ke=class extends Zi{render(){return Qi`<slot></slot>`}};Ke.styles=[Gi`
429
429
  :host {
430
430
  display: block;
431
431
  }
@@ -460,7 +460,7 @@ import{a as f,b as x,c as i,d as Mt}from"../chunk-H4VLZ2F7.js";import{provide as
460
460
  display: block;
461
461
  position: relative;
462
462
  }
463
- `],i([ir({type:Number,attribute:"max-choices"})],X.prototype,"maxChoices",2),i([ir({type:Number,attribute:"min-choices"})],X.prototype,"minChoices",2),i([no()],X.prototype,"_points",2),X=i([oo("qti-select-point-interaction")],X);import{css as co,html as We,nothing as At}from"lit";import{customElement as po,property as se,query as or}from"lit/decorators.js";var q=class extends h{constructor(){super();this.stepLabel=!1;this.reverse=!1;this._handleDisabledChange=(e,t)=>{};this._handleReadonlyChange=(e,t)=>{};this.csLive=getComputedStyle(this)}set min(e){this._min=e,this.value=e,this.style.setProperty("--min",`${this._min}`)}get min(){return this._min}set max(e){this._max=e,this.style.setProperty("--max",`${this._max}`)}get max(){return this._max}set step(e){this._step=e,this.style.setProperty("--step",`${this._step}`)}get step(){return this._step}reset(){}validate(){return!0}set response(e){if(Array.isArray(e)){console.error("QtiSliderInteraction: response is an array, but should be a single value");return}let t=parseInt(e);if(Number.isNaN(t)){console.error("QtiSliderInteraction: response is not a number");return}this.value=t}render(){this.value<this.min&&(this.value=this.min),this.value>this.max&&(this.value=this.max);let e=(this.value-this.min)/(this.max-this.min)*100;return this.style.setProperty("--value-percentage",`${e}%`),this.setAttribute("aria-valuenow",this.value.toString()),We`<slot name="prompt"></slot>
463
+ `],i([ir({type:Number,attribute:"max-choices"})],X.prototype,"maxChoices",2),i([ir({type:Number,attribute:"min-choices"})],X.prototype,"minChoices",2),i([no()],X.prototype,"_points",2),X=i([oo("qti-select-point-interaction")],X);import{css as co,html as We,nothing as At}from"lit";import{customElement as po,property as se,query as or}from"lit/decorators.js";var E=class extends h{constructor(){super();this.stepLabel=!1;this.reverse=!1;this._handleDisabledChange=(e,t)=>{};this._handleReadonlyChange=(e,t)=>{};this.csLive=getComputedStyle(this)}set min(e){this._min=e,this.value=e,this.style.setProperty("--min",`${this._min}`)}get min(){return this._min}set max(e){this._max=e,this.style.setProperty("--max",`${this._max}`)}get max(){return this._max}set step(e){this._step=e,this.style.setProperty("--step",`${this._step}`)}get step(){return this._step}reset(){}validate(){return!0}set response(e){if(Array.isArray(e)){console.error("QtiSliderInteraction: response is an array, but should be a single value");return}let t=parseInt(e);if(Number.isNaN(t)){console.error("QtiSliderInteraction: response is not a number");return}this.value=t}render(){this.value<this.min&&(this.value=this.min),this.value>this.max&&(this.value=this.max);let e=(this.value-this.min)/(this.max-this.min)*100;return this.style.setProperty("--value-percentage",`${e}%`),this.setAttribute("aria-valuenow",this.value.toString()),We`<slot name="prompt"></slot>
464
464
  <div id="slider" part="slider">
465
465
  ${this.csLive.getPropertyValue("--show-bounds")=="true"?We`<div id="bounds" part="bounds">
466
466
  <div>${this._min}</div>
@@ -472,17 +472,17 @@ import{a as f,b as x,c as i,d as Mt}from"../chunk-H4VLZ2F7.js";import{provide as
472
472
  ${this.csLive.getPropertyValue("--show-value")=="true"?We`<div id="value" part="value">${this.value}</div>`:At}
473
473
  </div>
474
474
  </div>
475
- </div>`}connectedCallback(){super.connectedCallback(),this.step=1,this.setAttribute("tabindex","0"),this.setAttribute("role","slider")}_onTouchMove(e){let t=a=>{let{x:c}=this.getPositionFromEvent(a),p=c-this._rail.getBoundingClientRect().left-document.documentElement.scrollLeft;this.calculateValue(p),a.stopPropagation()},r=()=>{document.removeEventListener("touchmove",t),document.removeEventListener("touchend",r),this.saveResponse(this.value.toString())};document.addEventListener("touchmove",t),document.addEventListener("touchend",r);let{x:o}=this.getPositionFromEvent(e),n=o-this._rail.getBoundingClientRect().left-document.documentElement.scrollLeft;this.calculateValue(n),e.stopPropagation()}_onMouseDown(e){let t=n=>{let a=n.pageX-this._rail.getBoundingClientRect().left-document.documentElement.scrollLeft;this.calculateValue(a),n.preventDefault(),n.stopPropagation()},r=()=>{document.removeEventListener("mousemove",t),document.removeEventListener("mouseup",r),this.saveResponse(this.value.toString())};document.addEventListener("mousemove",t),document.addEventListener("mouseup",r);let o=e.pageX-this._rail.getBoundingClientRect().left-document.documentElement.scrollLeft;this.calculateValue(o),e.preventDefault(),e.stopPropagation()}calculateValue(e){let t=this.min+(this.max-this.min)*e/this._rail.getBoundingClientRect().width,r=this.min+Math.round((t-this.min)/this._step)*this._step;this.value=r}getPositionFromEvent(e){let t;if(e.type=="touchstart"||e.type=="touchmove"||e.type=="touchend"||e.type=="touchcancel"){let r=typeof e.originalEvent=="undefined"?e:e.originalEvent,o=r.touches[0]||r.changedTouches[0];t={x:o.pageX,y:o.pageY}}else(e.type=="mousedown"||e.type=="mouseup"||e.type=="mousemove"||e.type=="mouseover"||e.type=="mouseout"||e.type=="mouseenter"||e.type=="mouseleave")&&(t={x:e.clientX,y:e.clientY});return t}};q.styles=[co``],i([or("#knob")],q.prototype,"_knob",2),i([or("#rail")],q.prototype,"_rail",2),i([se({type:Number})],q.prototype,"value",2),i([se({type:Boolean,attribute:"step-label"})],q.prototype,"stepLabel",2),i([se({type:Boolean})],q.prototype,"reverse",2),i([se({type:Number,attribute:"lower-bound"})],q.prototype,"min",1),i([se({type:Number,attribute:"upper-bound"})],q.prototype,"max",1),i([se({type:Number,attribute:"step"})],q.prototype,"step",1),i([b("disabled",{waitUntilFirstUpdate:!0})],q.prototype,"_handleDisabledChange",2),i([b("readonly",{waitUntilFirstUpdate:!0})],q.prototype,"_handleReadonlyChange",2),q=i([po("qti-slider-interaction")],q);import{consume as uo}from"@lit/context";import{LitElement as mo,html as ho}from"lit";import{customElement as fo,state as go}from"lit/decorators.js";var Ce=class extends mo{render(){return ho`<slot @slotchange=${this.handleSlotChange}></slot>`}handleSlotChange(s){var t,r,o;let e=Array.from((r=(t=this.firstElementChild)==null?void 0:t.childNodes)!=null?r:[]).find(n=>n.nodeType===Node.COMMENT_NODE);try{this.operatorFunction=new Function("context","fn","item",(o=e.textContent)!=null?o:"")}catch(n){console.error("custom-operator contains invalid javascript code",n)}}calculate(){let s={variable:t=>{var r,o,n;return(n=(o=(r=this._context)==null?void 0:r.variables.find(a=>a.identifier===t))==null?void 0:o.value)!=null?n:""},correct:t=>{var r,o,n;return(n=(o=(r=this._context)==null?void 0:r.variables.find(a=>a.identifier===t))==null?void 0:o.correctResponse)!=null?n:""}},e={getVariable:t=>{var r;return(r=this._context)==null?void 0:r.variables.find(o=>o.identifier===t)},updateOutcomeVariable:(t,r)=>{this.dispatchEvent(new CustomEvent("qti-set-outcome-value",{bubbles:!0,composed:!0,detail:{outcomeIdentifier:t,value:r}}))},updateResponseVariable:(t,r)=>{this.dispatchEvent(new CustomEvent("qti-interaction-response",{bubbles:!0,composed:!0,detail:{responseIdentifier:t,response:r}}))}};return this.operatorFunction(this._context,s,e)}};i([uo({context:S,subscribe:!0}),go()],Ce.prototype,"_context",2),Ce=i([fo("qti-custom-operator")],Ce);import{LitElement as bo,css as vo,html as yo}from"lit";import{customElement as xo}from"lit/decorators.js";var _e=class extends bo{connectedCallback(){super.connectedCallback(),this.dispatchEvent(new CustomEvent("qti-register-hotspot",{bubbles:!0,cancelable:!1,composed:!0}))}render(){return yo` <slot name="qti-gap-img"></slot> `}};_e.styles=vo`
475
+ </div>`}connectedCallback(){super.connectedCallback(),this.step=1,this.setAttribute("tabindex","0"),this.setAttribute("role","slider")}_onTouchMove(e){let t=a=>{let{x:c}=this.getPositionFromEvent(a),p=c-this._rail.getBoundingClientRect().left-document.documentElement.scrollLeft;this.calculateValue(p),a.stopPropagation()},r=()=>{document.removeEventListener("touchmove",t),document.removeEventListener("touchend",r),this.saveResponse(this.value.toString())};document.addEventListener("touchmove",t),document.addEventListener("touchend",r);let{x:o}=this.getPositionFromEvent(e),n=o-this._rail.getBoundingClientRect().left-document.documentElement.scrollLeft;this.calculateValue(n),e.stopPropagation()}_onMouseDown(e){let t=n=>{let a=n.pageX-this._rail.getBoundingClientRect().left-document.documentElement.scrollLeft;this.calculateValue(a),n.preventDefault(),n.stopPropagation()},r=()=>{document.removeEventListener("mousemove",t),document.removeEventListener("mouseup",r),this.saveResponse(this.value.toString())};document.addEventListener("mousemove",t),document.addEventListener("mouseup",r);let o=e.pageX-this._rail.getBoundingClientRect().left-document.documentElement.scrollLeft;this.calculateValue(o),e.preventDefault(),e.stopPropagation()}calculateValue(e){let t=this.min+(this.max-this.min)*e/this._rail.getBoundingClientRect().width,r=this.min+Math.round((t-this.min)/this._step)*this._step;this.value=r}getPositionFromEvent(e){let t;if(e.type=="touchstart"||e.type=="touchmove"||e.type=="touchend"||e.type=="touchcancel"){let r=typeof e.originalEvent=="undefined"?e:e.originalEvent,o=r.touches[0]||r.changedTouches[0];t={x:o.pageX,y:o.pageY}}else(e.type=="mousedown"||e.type=="mouseup"||e.type=="mousemove"||e.type=="mouseover"||e.type=="mouseout"||e.type=="mouseenter"||e.type=="mouseleave")&&(t={x:e.clientX,y:e.clientY});return t}};E.styles=[co``],i([or("#knob")],E.prototype,"_knob",2),i([or("#rail")],E.prototype,"_rail",2),i([se({type:Number})],E.prototype,"value",2),i([se({type:Boolean,attribute:"step-label"})],E.prototype,"stepLabel",2),i([se({type:Boolean})],E.prototype,"reverse",2),i([se({type:Number,attribute:"lower-bound"})],E.prototype,"min",1),i([se({type:Number,attribute:"upper-bound"})],E.prototype,"max",1),i([se({type:Number,attribute:"step"})],E.prototype,"step",1),i([b("disabled",{waitUntilFirstUpdate:!0})],E.prototype,"_handleDisabledChange",2),i([b("readonly",{waitUntilFirstUpdate:!0})],E.prototype,"_handleReadonlyChange",2),E=i([po("qti-slider-interaction")],E);import{consume as uo}from"@lit/context";import{LitElement as mo,html as ho}from"lit";import{customElement as fo,state as go}from"lit/decorators.js";var Ce=class extends mo{render(){return ho`<slot @slotchange=${this.handleSlotChange}></slot>`}handleSlotChange(s){var t,r,o;let e=Array.from((r=(t=this.firstElementChild)==null?void 0:t.childNodes)!=null?r:[]).find(n=>n.nodeType===Node.COMMENT_NODE);try{this.operatorFunction=new Function("context","fn","item",(o=e.textContent)!=null?o:"")}catch(n){console.error("custom-operator contains invalid javascript code",n)}}calculate(){let s={variable:t=>{var r,o,n;return(n=(o=(r=this._context)==null?void 0:r.variables.find(a=>a.identifier===t))==null?void 0:o.value)!=null?n:""},correct:t=>{var r,o,n;return(n=(o=(r=this._context)==null?void 0:r.variables.find(a=>a.identifier===t))==null?void 0:o.correctResponse)!=null?n:""}},e={getVariable:t=>{var r;return(r=this._context)==null?void 0:r.variables.find(o=>o.identifier===t)},updateOutcomeVariable:(t,r)=>{this.dispatchEvent(new CustomEvent("qti-set-outcome-value",{bubbles:!0,composed:!0,detail:{outcomeIdentifier:t,value:r}}))},updateResponseVariable:(t,r)=>{this.dispatchEvent(new CustomEvent("qti-interaction-response",{bubbles:!0,composed:!0,detail:{responseIdentifier:t,response:r}}))}};return this.operatorFunction(this._context,s,e)}};i([uo({context:S,subscribe:!0}),go()],Ce.prototype,"_context",2),Ce=i([fo("qti-custom-operator")],Ce);import{LitElement as bo,css as vo,html as yo}from"lit";import{customElement as xo}from"lit/decorators.js";var _e=class extends bo{connectedCallback(){super.connectedCallback(),this.dispatchEvent(new CustomEvent("qti-register-hotspot",{bubbles:!0,cancelable:!1,composed:!0}))}render(){return yo` <slot name="qti-gap-img"></slot> `}};_e.styles=vo`
476
476
  :host {
477
477
  position: absolute;
478
478
  }
479
- `,_e=i([xo("qti-associable-hotspot")],_e);import{html as Eo,LitElement as qo}from"lit";import{customElement as Co,property as _o}from"lit/decorators.js";var we=class extends qo{constructor(){super(...arguments);this.tabindex=0}render(){return Eo` <slot name="qti-gap-text"></slot>`}};i([_o({type:Number,reflect:!0})],we.prototype,"tabindex",2),we=i([Co("qti-gap")],we);import{LitElement as wo}from"lit";import{customElement as To,property as ko}from"lit/decorators.js";var Te=class extends wo{constructor(){super(...arguments);this.tabindex=0}connectedCallback(){this.setAttribute("slot","qti-gap-img")}};i([ko({type:Number,reflect:!0})],Te.prototype,"tabindex",2),Te=i([To("qti-gap-img")],Te);import{html as Ro,LitElement as Ao}from"lit";import{customElement as So,property as Mo}from"lit/decorators.js";var ke=class extends Ao{constructor(){super(...arguments);this.tabindex=0}connectedCallback(){super.connectedCallback(),this.setAttribute("slot","qti-gap-text")}render(){return Ro`<slot></slot>`}};i([Mo({type:Number,reflect:!0})],ke.prototype,"tabindex",2),ke=i([So("qti-gap-text")],ke);import{css as Lo}from"lit";import{customElement as No,property as Ho}from"lit/decorators.js";var ie=class extends C{};ie.styles=Lo`
479
+ `,_e=i([xo("qti-associable-hotspot")],_e);import{html as Eo,LitElement as qo}from"lit";import{customElement as Co,property as _o}from"lit/decorators.js";var ke=class extends qo{constructor(){super(...arguments);this.tabindex=0}render(){return Eo` <slot name="qti-gap-text"></slot>`}};i([_o({type:Number,reflect:!0})],ke.prototype,"tabindex",2),ke=i([Co("qti-gap")],ke);import{LitElement as ko}from"lit";import{customElement as To,property as Ro}from"lit/decorators.js";var Te=class extends ko{constructor(){super(...arguments);this.tabindex=0}connectedCallback(){this.setAttribute("slot","qti-gap-img")}};i([Ro({type:Number,reflect:!0})],Te.prototype,"tabindex",2),Te=i([To("qti-gap-img")],Te);import{html as wo,LitElement as Ao}from"lit";import{customElement as So,property as Lo}from"lit/decorators.js";var Re=class extends Ao{constructor(){super(...arguments);this.tabindex=0}connectedCallback(){super.connectedCallback(),this.setAttribute("slot","qti-gap-text")}render(){return wo`<slot></slot>`}};i([Lo({type:Number,reflect:!0})],Re.prototype,"tabindex",2),Re=i([So("qti-gap-text")],Re);import{css as Mo}from"lit";import{customElement as No,property as Ho}from"lit/decorators.js";var ie=class extends q{};ie.styles=Mo`
480
480
  :host {
481
481
  position: absolute;
482
482
  }
483
- `,i([Ho({attribute:"aria-ordervalue",type:Number,reflect:!0})],ie.prototype,"order",2),ie=i([No("qti-hotspot-choice")],ie);import{customElement as Vo}from"lit/decorators.js";import{html as $o}from"lit";var ze=class extends C{render(){return $o`<div part="ch"><div part="cha"></div></div>
484
- <slot></slot> `}};ze=i([Vo("qti-hottext")],ze);import{LitElement as Do}from"lit";import{customElement as Po}from"lit/decorators.js";var Je=class extends Do{};Je=i([Po("qti-inline-choice")],Je);import{customElement as Oo}from"lit/decorators.js";import{css as Uo,html as Fo}from"lit";var Re=class extends C{render(){return Fo`<div part="ch"><div part="cha"></div></div>
485
- <slot part="slot"></slot> `}};Re.styles=Uo`
483
+ `,i([Ho({attribute:"aria-ordervalue",type:Number,reflect:!0})],ie.prototype,"order",2),ie=i([No("qti-hotspot-choice")],ie);import{customElement as Vo}from"lit/decorators.js";import{html as $o}from"lit";var ze=class extends q{render(){return $o`<div part="ch"><div part="cha"></div></div>
484
+ <slot></slot> `}};ze=i([Vo("qti-hottext")],ze);import{LitElement as Do}from"lit";import{customElement as Po}from"lit/decorators.js";var Je=class extends Do{};Je=i([Po("qti-inline-choice")],Je);import{customElement as Oo}from"lit/decorators.js";import{css as Uo,html as Fo}from"lit";var we=class extends q{render(){return Fo`<div part="ch"><div part="cha"></div></div>
485
+ <slot part="slot"></slot> `}};we.styles=Uo`
486
486
  :host {
487
487
  display: flex;
488
488
  }
@@ -490,5 +490,5 @@ import{a as f,b as x,c as i,d as Mt}from"../chunk-H4VLZ2F7.js";import{provide as
490
490
  width: 100%;
491
491
  display: block;
492
492
  }
493
- `,Re=i([Oo("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{h 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,Le as QtiCompanionMaterialsInfo,k 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,Te as QtiGapImg,ge as QtiGapMatchInteraction,ke as QtiGapText,D as QtiGraphicAssociateInteraction,be as QtiGraphicGapMatchInteraction,ve as QtiGraphicOrderInteraction,ct as QtiGt,pt as QtiGte,ie as QtiHotspotChoice,ye as QtiHotspotInteraction,ze as QtiHottext,Pe as QtiHottextInteraction,Je as QtiInlineChoice,F as QtiInlineChoiceInteraction,dt as QtiIsNull,Oe 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,O as QtiOrderInteraction,xt as QtiOrdered,M as QtiOutcomeDeclaration,de as QtiOutcomeProcessing,rt as QtiOutcomeProcessingProcessor,I as QtiPortableCustomInteraction,qe as QtiPositionObjectStage,Et as QtiProduct,Ae as QtiPrompt,st as QtiResponseCondition,P as QtiResponseDeclaration,ue as QtiResponseElse,nt as QtiResponseElseIf,me as QtiResponseIf,j as QtiResponseProcessing,L as QtiRubricBlock,H as QtiRule,Ke as QtiSPositionObjectInteraction,X as QtiSelectPointInteraction,it as QtiSetOutcomeValue,ot as QtiSetOutcomeValueRule,K as QtiSimpleAssociableChoice,Re as QtiSimpleChoice,q as QtiSliderInteraction,Ye as QtiStringMatch,Se as QtiStylesheet,qt as QtiSum,Ct as QtiSumExpression,T as QtiTextEntryInteraction,_t as QtiVariable,S as itemContext,Lt as itemContextVariables,js as qtiAndMixin};
494
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktYXNzZXNzbWVudC1pdGVtL3F0aS1hc3Nlc3NtZW50LWl0ZW0udHMiLCAiLi4vLi4vc3JjL2xpYi9kZWNvcmF0b3JzL3dhdGNoLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWFzc2Vzc21lbnQtaXRlbS9xdGktYXNzZXNzbWVudC1pdGVtLmNvbnRleHQudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktYXNzZXNzbWVudC1zdGltdWx1cy1yZWYvcXRpLWFzc2Vzc21lbnQtc3RpbXVsdXMtcmVmLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL2ludGVybmFsL2Nob2ljZS9xdGktY2hvaWNlLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWl0ZW0tYm9keS9xdGktaXRlbS1ib2R5LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWl0ZW0tYm9keS9xdGktaXRlbS1ib2R5LnN0eWxlcy50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1wcm9tcHQvcXRpLXByb21wdC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1zdHlsZXNoZWV0L3F0aS1zdHlsZXNoZWV0LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXZhcmlhYmxlLWRlY2xhcmF0aW9uL3F0aS1vdXRjb21lLWRlY2xhcmF0aW9uL3F0aS1vdXRjb21lLWRlY2xhcmF0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXZhcmlhYmxlLWRlY2xhcmF0aW9uL3F0aS12YXJpYWJsZS1kZWNsYXJhdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS12YXJpYWJsZS1kZWNsYXJhdGlvbi9xdGktcmVzcG9uc2UtZGVjbGFyYXRpb24vcXRpLXJlc3BvbnNlLWRlY2xhcmF0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWNvbXBhbmlvbi1tYXRlcmlhbHMtaW5mby9xdGktY29tcGFuaW9uLW1hdGVyaWFscy1pbmZvLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJ1YnJpYy1ibG9jay9xdGktY29udGVudC1ib2R5LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJ1YnJpYy1ibG9jay9xdGktcnVicmljLWJsb2NrLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWZlZWRiYWNrL3F0aS1mZWVkYmFjay1ibG9jay9xdGktZmVlZGJhY2stYmxvY2sudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktZmVlZGJhY2svcXRpLWZlZWRiYWNrLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvaW50ZXJuYWwvdXRpbHMudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktZmVlZGJhY2svcXRpLWZlZWRiYWNrLWlubGluZS9xdGktZmVlZGJhY2staW5saW5lLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWZlZWRiYWNrL3F0aS1tb2RhbC1mZWVkYmFjay9xdGktbW9kYWwtZmVlZGJhY2sudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWV4dGVuZGVkLXRleHQtaW50ZXJhY3Rpb24vcXRpLWV4dGVuZGVkLXRleHQtaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vaW50ZXJuYWwvaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLXRleHQtZW50cnktaW50ZXJhY3Rpb24vcXRpLXRleHQtZW50cnktaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9kZWNvcmF0b3JzL2xpdmUtcXVlcnkudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWhvdHRleHQtaW50ZXJhY3Rpb24vcXRpLWhvdHRleHQtaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vaW50ZXJuYWwvY2hvaWNlcy9jaG9pY2VzLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1pbmxpbmUtY2hvaWNlLWludGVyYWN0aW9uL3F0aS1pbmxpbmUtY2hvaWNlLWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1jaG9pY2UtaW50ZXJhY3Rpb24vcXRpLWNob2ljZS1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktY2hvaWNlLWludGVyYWN0aW9uL3F0aS1jaG9pY2UtaW50ZXJhY3Rpb24uc3R5bGVzLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLW91dGNvbWUtcHJvY2Vzc2luZy9xdGktb3V0Y29tZS1wcm9jZXNzaW5nLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9pbnRlcm5hbC90ZW1wbGF0ZS1zdHJpbmdzLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLXJ1bGUvcXRpLWxvb2t1cC1vdXRjb21lLXZhbHVlL3F0aS1sb29rdXAtb3V0Y29tZS12YWx1ZS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1ydWxlL3F0aS1ydWxlLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLXJ1bGUvcXRpLXJlc3BvbnNlLWNvbmRpdGlvbi9xdGktcmVzcG9uc2UtY29uZGl0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLXJ1bGUvcXRpLXNldC1vdXRjb21lLXZhbHVlL3F0aS1zZXQtb3V0Y29tZS12YWx1ZS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1yZXNwb25zZS1lbHNlL3F0aS1yZXNwb25zZS1lbHNlLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLXJlc3BvbnNlLWVsc2UvcXRpLXJlc3BvbnNlLWlmL3F0aS1yZXNwb25zZS1lbHNlLWlmL3F0aS1yZXNwb25zZS1lbHNlLWlmLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLXJlc3BvbnNlLWVsc2UvcXRpLXJlc3BvbnNlLWlmL3F0aS1yZXNwb25zZS1pZi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1leHByZXNzaW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLWNvbmRpdGlvbi1leHByZXNzaW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLWFuZC9xdGktYW5kLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLWFuZC9pbmRleC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1iYXNldmFsdWUvcXRpLWJhc2V2YWx1ZS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1jb250YWlucy9xdGktY29udGFpbnMudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktY29ycmVjdC9xdGktY29ycmVjdC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1lcXVhbC1yb3VuZGVkL3F0aS1lcXVhbC1yb3VuZGVkLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLWVxdWFsL3F0aS1lcXVhbC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3V0aWxpdGllcy9zY29yaW5nLWhlbHBlci50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1ndC9xdGktZ3QudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktZ3RlL3F0aS1ndGUudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktaXMtbnVsbC9xdGktaXMtbnVsbC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1sdC9xdGktbHQudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktbHRlL3F0aS1sdGUudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktbWFwLXJlc3BvbnNlL3F0aS1tYXAtcmVzcG9uc2UudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktbWFwcGluZy9xdGktbWFwcGluZy50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1tYXRjaC9xdGktbWF0Y2gudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktbWVtYmVyL3F0aS1tZW1iZXIudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktbXVsdGlwbGUvcXRpLW11bHRpcGxlLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLW5vdC9xdGktbm90LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLW9yL3F0aS1vci50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1vcmRlcmVkL3F0aS1vcmRlcmVkLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLXByaW50ZWQtdmFyaWFibGUvcXRpLXByaW50ZWQtdmFyaWFibGUudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktcHJvZHVjdC9xdGktcHJvZHVjdC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1zdHJpbmctbWF0Y2gvcXRpLXN0cmluZy1tYXRjaC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1zdW0vcXRpLXN1bS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS12YXJpYWJsZS9xdGktdmFyaWFibGUudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLXBvcnRhYmxlLWN1c3RvbS1pbnRlcmFjdGlvbi9xdGktcG9ydGFibGUtY3VzdG9tLWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1hc3NvY2lhdGUtaW50ZXJhY3Rpb24vcXRpLWFzc29jaWF0ZS1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9pbnRlcm5hbC9kcmFnLWRyb3AvZHJhZy1kcm9wLWFwaS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9pbnRlcm5hbC9kcmFnLWRyb3AvZHJvcHBhYmxlcy1taXhpbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9pbnRlcm5hbC9kcmFnLWRyb3AvZmxpcHBhYmxlcy1taXhpbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9pbnRlcm5hbC9kcmFnLWRyb3AvZHJhZy1kcm9wLWludGVyYWN0aW9uLW1peGluLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1jdXN0b20taW50ZXJhY3Rpb24vcXRpLWN1c3RvbS1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktZW5kLWF0dGVtcHQtaW50ZXJhY3Rpb24vcXRpLWVuZC1hdHRlbXB0LWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1nYXAtbWF0Y2gtaW50ZXJhY3Rpb24vcXRpLWdhcC1tYXRjaC1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktZ3JhcGhpYy1hc3NvY2lhdGUtaW50ZXJhY3Rpb24vcXRpLWdyYXBoaWMtYXNzb2NpYXRlLWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL2ludGVybmFsL2hvdHNwb3RzL2hvdHNwb3QudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWdyYXBoaWMtZ2FwLW1hdGNoLWludGVyYWN0aW9uL3F0aS1ncmFwaGljLWdhcC1tYXRjaC1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktZ3JhcGhpYy1vcmRlci1pbnRlcmFjdGlvbi9xdGktZ3JhcGhpYy1vcmRlci1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktaG90c3BvdC1pbnRlcmFjdGlvbi9xdGktaG90c3BvdC1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktbWF0Y2gtaW50ZXJhY3Rpb24vcXRpLW1hdGNoLWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLW1lZGlhLWludGVyYWN0aW9uL3F0aS1tZWRpYS1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktb3JkZXItaW50ZXJhY3Rpb24vcXRpLW9yZGVyLWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL2ludGVybmFsL3NodWZmbGUvc2h1ZmZsZS1taXhpbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktcG9zaXRpb24tb2JqZWN0LWludGVyYWN0aW9uL3F0aS1wb3NpdGlvbi1vYmplY3QtaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLXBvc2l0aW9uLW9iamVjdC1pbnRlcmFjdGlvbi9xdGktcG9zaXRpb24tb2JqZWN0LXN0YWdlLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1zZWxlY3QtcG9pbnQtaW50ZXJhY3Rpb24vcXRpLXNlbGVjdC1wb2ludC1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktc2xpZGVyLWludGVyYWN0aW9uL3F0aS1zbGlkZXItaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktY3VzdG9tLW9wZXJhdG9yL3F0aS1jdXN0b20tb3BlcmF0b3IudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWFzc29jaWFibGUtaG90c3BvdC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktZ2FwLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1nYXAtaW1nLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1nYXAtdGV4dC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktaG90c3BvdC1jaG9pY2UudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWhvdHRleHQudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWlubGluZS1jaG9pY2UudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLXNpbXBsZS1jaG9pY2UudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgcHJvdmlkZSB9IGZyb20gJ0BsaXQvY29udGV4dCc7XG5pbXBvcnQgeyBMaXRFbGVtZW50LCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgd2F0Y2ggfSBmcm9tICcuLi8uLi9kZWNvcmF0b3JzL3dhdGNoJztcbmltcG9ydCB0eXBlIHsgSW50ZXJhY3Rpb25DaGFuZ2VkRGV0YWlscywgT3V0Y29tZUNoYW5nZWREZXRhaWxzIH0gZnJvbSAnLi4vaW50ZXJuYWwvZXZlbnQtdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBSZXNwb25zZUludGVyYWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJuYWwvZXhwcmVzc2lvbi1yZXN1bHQnO1xuaW1wb3J0IHR5cGUgeyBWYXJpYWJsZURlY2xhcmF0aW9uLCBWYXJpYWJsZVZhbHVlIH0gZnJvbSAnLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IE91dGNvbWVWYXJpYWJsZSwgUmVzcG9uc2VWYXJpYWJsZSB9IGZyb20gJy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgdHlwZSB7IFF0aUZlZWRiYWNrIH0gZnJvbSAnLi4vcXRpLWZlZWRiYWNrL3F0aS1mZWVkYmFjayc7XG5pbXBvcnQgdHlwZSB7IEludGVyYWN0aW9uIH0gZnJvbSAnLi4vcXRpLWludGVyYWN0aW9uL2ludGVybmFsL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uJztcbmltcG9ydCB0eXBlIHsgUXRpUmVzcG9uc2VQcm9jZXNzaW5nIH0gZnJvbSAnLi4vcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcnO1xuaW1wb3J0IHsgSXRlbUNvbnRleHQsIGl0ZW1Db250ZXh0LCBpdGVtQ29udGV4dFZhcmlhYmxlcyB9IGZyb20gJy4vcXRpLWFzc2Vzc21lbnQtaXRlbS5jb250ZXh0JztcblxuLyoqXG4gKiBAc3VtbWFyeSBUaGUgcXRpLWFzc2Vzc21lbnQtaXRlbSBlbGVtZW50IGNvbnRhaW5zIGFsbCB0aGUgb3RoZXIgUVRJIDMgaXRlbSBzdHJ1Y3R1cmVzLlxuICogQGRvY3VtZW50YXRpb24gaHR0cHM6Ly93d3cuaW1zZ2xvYmFsLm9yZy9zcGVjL3F0aS92M3AwL2ltcGwjaC5kbHRubmo4N2wweWpcbiAqIEBzdGF0dXMgc3RhYmxlXG4gKiBAc2luY2UgNC4wXG4gKlxuICogQGRlcGVuZGVuY3kgcXRpLWZlZWRiYWNrXG4gKiBAZGVwZW5kZW5jeSBxdGktcmVzcG9uc2Vwcm9jZXNzaW5nXG4gKlxuICogQHNsb3QgLSBUaGUgZGVmYXVsdCBzbG90IHdoZXJlIGFsbCB0aGUgb3RoZXIgUVRJIDMgaXRlbSBzdHJ1Y3R1cmVzIGdvLlxuICpcbiAqIEBldmVudCBxdGktaW50ZXJhY3Rpb24tY2hhbmdlZCAtIEVtaXR0ZWQgd2hlbiBhbiBpbnRlcmFjdGlvbiBpcyBjaGFuZ2VkLlxuICogQGV2ZW50IHF0aS1vdXRjb21lLWNoYW5nZWQgLSBFbWl0dGVkIHdoZW4gYW4gb3V0Y29tZSBoYXMgY2hhbmdlZC5cbiAqIEBldmVudCBxdGktcmVzcG9uc2UtcHJvY2Vzc2luZyAtIEVtaXR0ZWQgd2hlbiByZXNwb25zZS1wcm9jZXNzaW5nIGlzIGNhbGxlZC5cbiAqXG4gKi9cbkBjdXN0b21FbGVtZW50KCdxdGktYXNzZXNzbWVudC1pdGVtJylcbmV4cG9ydCBjbGFzcyBRdGlBc3Nlc3NtZW50SXRlbSBleHRlbmRzIExpdEVsZW1lbnQge1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgdGl0bGU6IHN0cmluZztcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIGlkZW50aWZpZXI6IHN0cmluZyA9ICcnO1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgYWRhcHRpdmU6ICd0cnVlJyB8ICdmYWxzZScgPSAnZmFsc2UnO1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgdGltZURlcGVuZGVudDogJ3RydWUnIHwgJ2ZhbHNlJyA9ICdmYWxzZSc7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogQm9vbGVhbiB9KSBkaXNhYmxlZDogYm9vbGVhbjtcbiAgQHdhdGNoKCdkaXNhYmxlZCcsIHsgd2FpdFVudGlsRmlyc3RVcGRhdGU6IHRydWUgfSlcbiAgX2hhbmRsZURpc2FibGVkQ2hhbmdlID0gKF86IGJvb2xlYW4sIGRpc2FibGVkOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy5faW50ZXJhY3Rpb25FbGVtZW50cy5mb3JFYWNoKGNoID0+IChjaC5kaXNhYmxlZCA9IGRpc2FibGVkKSk7XG4gIH07XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogQm9vbGVhbiB9KSByZWFkb25seTogYm9vbGVhbjtcbiAgQHdhdGNoKCdyZWFkb25seScsIHsgd2FpdFVudGlsRmlyc3RVcGRhdGU6IHRydWUgfSlcbiAgX2hhbmRsZVJlYWRvbmx5Q2hhbmdlID0gKF86IGJvb2xlYW4sIHJlYWRvbmx5OiBib29sZWFuKSA9PlxuICAgIHRoaXMuX2ludGVyYWN0aW9uRWxlbWVudHMuZm9yRWFjaChjaCA9PiAoY2gucmVhZG9ubHkgPSByZWFkb25seSkpO1xuXG4gIEBwcm92aWRlKHsgY29udGV4dDogaXRlbUNvbnRleHQgfSlcbiAgLy8gQHByb3BlcnR5KHsgYXR0cmlidXRlOiBmYWxzZSB9KVxuICBwcml2YXRlIF9jb250ZXh0OiBJdGVtQ29udGV4dCA9IHtcbiAgICBpZGVudGlmaWVyOiB0aGlzLmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpLFxuICAgIHZhcmlhYmxlczogaXRlbUNvbnRleHRWYXJpYWJsZXNcbiAgfTtcblxuICBwdWJsaWMgZ2V0IHZhcmlhYmxlcygpOiBWYXJpYWJsZVZhbHVlPHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbD5bXSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRleHQudmFyaWFibGVzLm1hcCh2ID0+ICh7IGlkZW50aWZpZXI6IHYuaWRlbnRpZmllciwgdmFsdWU6IHYudmFsdWUsIHR5cGU6IHYudHlwZSB9KSk7XG4gIH1cblxuICBwdWJsaWMgc2V0IHZhcmlhYmxlcyh2YWx1ZTogVmFyaWFibGVWYWx1ZTxzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGw+W10pIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpIHx8IHZhbHVlLnNvbWUodiA9PiAhKCdpZGVudGlmaWVyJyBpbiB2KSkpIHtcbiAgICAgIGNvbnNvbGUud2FybigndmFyaWFibGVzIHByb3BlcnR5IHNob3VsZCBiZSBhbiBhcnJheSBvZiBWYXJpYWJsZURlY2xhcmF0aW9uJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fY29udGV4dCA9IHtcbiAgICAgIC4uLnRoaXMuX2NvbnRleHQsXG4gICAgICB2YXJpYWJsZXM6IHRoaXMuX2NvbnRleHQudmFyaWFibGVzLm1hcCh2YXJpYWJsZSA9PiB7XG4gICAgICAgIGNvbnN0IG1hdGNoaW5nVmFsdWUgPSB2YWx1ZS5maW5kKHYgPT4gdi5pZGVudGlmaWVyID09PSB2YXJpYWJsZS5pZGVudGlmaWVyKTtcbiAgICAgICAgaWYgKG1hdGNoaW5nVmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4geyAuLi52YXJpYWJsZSwgLi4ubWF0Y2hpbmdWYWx1ZSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YXJpYWJsZTtcbiAgICAgIH0pXG4gICAgfTtcblxuICAgIHRoaXMuX2NvbnRleHQudmFyaWFibGVzLmZvckVhY2godmFyaWFibGUgPT4ge1xuICAgICAgaWYgKHZhcmlhYmxlLnR5cGUgPT09ICdyZXNwb25zZScpIHtcbiAgICAgICAgY29uc3QgaW50ZXJhY3Rpb25FbGVtZW50ID0gdGhpcy5faW50ZXJhY3Rpb25FbGVtZW50cy5maW5kKFxuICAgICAgICAgIChlbDogSW50ZXJhY3Rpb24pID0+IGVsLnJlc3BvbnNlSWRlbnRpZmllciA9PT0gdmFyaWFibGUuaWRlbnRpZmllclxuICAgICAgICApO1xuICAgICAgICBpZiAoaW50ZXJhY3Rpb25FbGVtZW50KSB7XG4gICAgICAgICAgaW50ZXJhY3Rpb25FbGVtZW50LnJlc3BvbnNlID0gdmFyaWFibGUudmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHZhcmlhYmxlLnR5cGUgPT09ICdvdXRjb21lJykge1xuICAgICAgICB0aGlzLl9mZWVkYmFja0VsZW1lbnRzLmZvckVhY2goZmUgPT4gZmUuY2hlY2tTaG93RmVlZGJhY2sodmFyaWFibGUuaWRlbnRpZmllcikpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdGlhbENvbnRleHQ6IFJlYWRvbmx5PEl0ZW1Db250ZXh0PiA9IHsgLi4udGhpcy5fY29udGV4dCwgdmFyaWFibGVzOiB0aGlzLl9jb250ZXh0LnZhcmlhYmxlcyB9O1xuICBwcml2YXRlIF9mZWVkYmFja0VsZW1lbnRzOiBRdGlGZWVkYmFja1tdID0gW107XG4gIHByaXZhdGUgX2ludGVyYWN0aW9uRWxlbWVudHM6IEludGVyYWN0aW9uW10gPSBbXTtcblxuICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7XG4gICAgdGhpcy5fZW1pdDx7IGRldGFpbDogUXRpQXNzZXNzbWVudEl0ZW0gfT4oJ3F0aS1hc3Nlc3NtZW50LWl0ZW0tY29ubmVjdGVkJywgdGhpcyk7XG4gIH1cblxuICAvKiogQGRlcHJlY2F0ZWQgdXNlIHZhcmlhYmxlcyBwcm9wZXJ0eSBpbnN0ZWFkICovXG4gIHNldCByZXNwb25zZXMobXlSZXNwb25zZXM6IFJlc3BvbnNlSW50ZXJhY3Rpb25bXSkge1xuICAgIGlmIChteVJlc3BvbnNlcykge1xuICAgICAgZm9yIChjb25zdCByZXNwb25zZSBvZiBteVJlc3BvbnNlcykge1xuICAgICAgICBjb25zdCByZXNwb25zZVZhcmlhYmxlID0gdGhpcy5nZXRSZXNwb25zZShyZXNwb25zZS5yZXNwb25zZUlkZW50aWZpZXIpO1xuICAgICAgICBpZiAocmVzcG9uc2VWYXJpYWJsZSkge1xuICAgICAgICAgIHRoaXMudXBkYXRlUmVzcG9uc2VWYXJpYWJsZShyZXNwb25zZS5yZXNwb25zZUlkZW50aWZpZXIsIHJlc3BvbnNlLnJlc3BvbnNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGludGVyYWN0aW9uOiBJbnRlcmFjdGlvbiB8IHVuZGVmaW5lZCA9IHRoaXMuX2ludGVyYWN0aW9uRWxlbWVudHMuZmluZChcbiAgICAgICAgICBpID0+IGkuZ2V0QXR0cmlidXRlKCdyZXNwb25zZS1pZGVudGlmaWVyJykgPT09IHJlc3BvbnNlLnJlc3BvbnNlSWRlbnRpZmllclxuICAgICAgICApO1xuICAgICAgICBpZiAoaW50ZXJhY3Rpb24pIHtcbiAgICAgICAgICBpbnRlcmFjdGlvbi5yZXNwb25zZSA9IHJlc3BvbnNlLnJlc3BvbnNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci12YXJpYWJsZScsIGUgPT4ge1xuICAgICAgdGhpcy5fY29udGV4dCA9IHsgLi4udGhpcy5fY29udGV4dCwgdmFyaWFibGVzOiBbLi4udGhpcy5fY29udGV4dC52YXJpYWJsZXMsIGUuZGV0YWlsLnZhcmlhYmxlXSB9O1xuICAgICAgdGhpcy5faW5pdGlhbENvbnRleHQgPSB0aGlzLl9jb250ZXh0O1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9KTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci1mZWVkYmFjaycsIChlOiBDdXN0b21FdmVudDxRdGlGZWVkYmFjaz4pID0+IHtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBjb25zdCBmZWVkYmFja0VsZW1lbnQgPSBlLmRldGFpbDtcbiAgICAgIHRoaXMuX2ZlZWRiYWNrRWxlbWVudHMucHVzaChmZWVkYmFja0VsZW1lbnQpO1xuICAgICAgZmVlZGJhY2tFbGVtZW50LmNoZWNrU2hvd0ZlZWRiYWNrKGZlZWRiYWNrRWxlbWVudC5vdXRjb21lSWRlbnRpZmllcik7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdxdGktcmVnaXN0ZXItaW50ZXJhY3Rpb24nLCAoZTogQ3VzdG9tRXZlbnQ8bnVsbD4pID0+IHtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLl9pbnRlcmFjdGlvbkVsZW1lbnRzLnB1c2goZS50YXJnZXQgYXMgSW50ZXJhY3Rpb24pO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignZW5kLWF0dGVtcHQnLCAoZTogQ3VzdG9tRXZlbnQ8eyByZXNwb25zZUlkZW50aWZpZXI6IHN0cmluZzsgY291bnRBdHRlbXB0OiBib29sZWFuIH0+KSA9PiB7XG4gICAgICBjb25zdCB7IHJlc3BvbnNlSWRlbnRpZmllciwgY291bnRBdHRlbXB0IH0gPSBlLmRldGFpbDtcbiAgICAgIHRoaXMudXBkYXRlUmVzcG9uc2VWYXJpYWJsZShyZXNwb25zZUlkZW50aWZpZXIsICd0cnVlJyk7XG4gICAgICB0aGlzLnByb2Nlc3NSZXNwb25zZShjb3VudEF0dGVtcHQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgLy8gd29yZHQgYWFuZ2Vyb2VwZW4gdmFudWl0IGRlIHByb2Nlc3Npbmd0ZW1wbGF0ZVxuICAgICAgJ3F0aS1zZXQtb3V0Y29tZS12YWx1ZScsXG4gICAgICAoZTogQ3VzdG9tRXZlbnQ8eyBvdXRjb21lSWRlbnRpZmllcjogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10gfT4pID0+IHtcbiAgICAgICAgY29uc3QgeyBvdXRjb21lSWRlbnRpZmllciwgdmFsdWUgfSA9IGUuZGV0YWlsO1xuICAgICAgICB0aGlzLnVwZGF0ZU91dGNvbWVWYXJpYWJsZShvdXRjb21lSWRlbnRpZmllciwgdmFsdWUpO1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1pbnRlcmFjdGlvbi1yZXNwb25zZScsIHRoaXMuaGFuZGxlVXBkYXRlUmVzcG9uc2VWYXJpYWJsZSk7XG4gIH1cblxuICBwdWJsaWMgc2hvd0NvcnJlY3RSZXNwb25zZShzaG93OiBib29sZWFuKSB7XG4gICAgY29uc3QgcmVzcG9uc2VWYXJpYWJsZXMgPSB0aGlzLl9jb250ZXh0LnZhcmlhYmxlcy5maWx0ZXIoXG4gICAgICAodmFyaTogUmVzcG9uc2VWYXJpYWJsZSB8IE91dGNvbWVWYXJpYWJsZSkgPT4gJ2NvcnJlY3RSZXNwb25zZScgaW4gdmFyaSAmJiB2YXJpLmNvcnJlY3RSZXNwb25zZVxuICAgICkgYXMgUmVzcG9uc2VWYXJpYWJsZVtdO1xuICAgIGNvbnN0IHJlc3BvbnNlcyA9IHJlc3BvbnNlVmFyaWFibGVzLm1hcChjciA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXNwb25zZUlkZW50aWZpZXI6IGNyLmlkZW50aWZpZXIsXG4gICAgICAgIHJlc3BvbnNlOiBjci5jb3JyZWN0UmVzcG9uc2VcbiAgICAgIH07XG4gICAgfSk7XG4gICAgZm9yIChjb25zdCByZXNwb25zZSBvZiByZXNwb25zZXMpIHtcbiAgICAgIGNvbnN0IGludGVyYWN0aW9uOiBJbnRlcmFjdGlvbiB8IHVuZGVmaW5lZCA9IHRoaXMuX2ludGVyYWN0aW9uRWxlbWVudHMuZmluZChcbiAgICAgICAgaSA9PiBpLmdldEF0dHJpYnV0ZSgncmVzcG9uc2UtaWRlbnRpZmllcicpID09PSByZXNwb25zZS5yZXNwb25zZUlkZW50aWZpZXJcbiAgICAgICk7XG4gICAgICBpbnRlcmFjdGlvbiAmJiAoaW50ZXJhY3Rpb24uY29ycmVjdFJlc3BvbnNlID0gc2hvdyA/IHJlc3BvbnNlLnJlc3BvbnNlIDogJycpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBwcm9jZXNzUmVzcG9uc2UoY291bnROdW1BdHRlbXB0czogYm9vbGVhbiA9IHRydWUpOiBib29sZWFuIHtcbiAgICBjb25zdCByZXNwb25zZVByb2Nlc3NvciA9IHRoaXMucXVlcnlTZWxlY3RvcigncXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcnKSBhcyB1bmtub3duIGFzIFF0aVJlc3BvbnNlUHJvY2Vzc2luZztcbiAgICBpZiAoIXJlc3BvbnNlUHJvY2Vzc29yKSB7XG4gICAgICAvLyBjb25zb2xlLmluZm8oJ0NsaWVudCBzaWRlIHJlc3BvbnNlIHByb2Nlc3NpbmcgdGVtcGxhdGUgbm90IGF2YWlsYWJsZScpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghcmVzcG9uc2VQcm9jZXNzb3IucHJvY2Vzcykge1xuICAgICAgLy8gY29uc29sZS5pbmZvKCdDbGllbnQgc2lkZSByZXNwb25zZSB3ZWJjb21wb25lbnRzIG5vdCBhdmFpbGFibGUnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXNwb25zZVByb2Nlc3Nvci5wcm9jZXNzKCk7XG5cbiAgICBpZiAodGhpcy5hZGFwdGl2ZSA9PT0gJ2ZhbHNlJykge1xuICAgICAgLy8gaWYgYWRhcGF0aXZlLCBjb21wbGV0aW9uU3RhdHVzIGlzIHNldCBieSB0aGUgcHJvY2Vzc2luZyB0ZW1wbGF0ZVxuICAgICAgdGhpcy51cGRhdGVPdXRjb21lVmFyaWFibGUoJ2NvbXBsZXRpb25TdGF0dXMnLCB0aGlzLl9nZXRDb21wbGV0aW9uU3RhdHVzKCkpO1xuICAgIH1cblxuICAgIGNvdW50TnVtQXR0ZW1wdHMgJiZcbiAgICAgIHRoaXMudXBkYXRlT3V0Y29tZVZhcmlhYmxlKFxuICAgICAgICAnbnVtQXR0ZW1wdHMnLFxuICAgICAgICAoK3RoaXMuX2NvbnRleHQudmFyaWFibGVzLmZpbmQodiA9PiB2LmlkZW50aWZpZXIgPT09ICdudW1BdHRlbXB0cycpPy52YWx1ZSArIDEpLnRvU3RyaW5nKClcbiAgICAgICk7XG5cbiAgICB0aGlzLl9lbWl0KCdxdGktcmVzcG9uc2UtcHJvY2Vzc2VkJyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwdWJsaWMgcmVzZXRSZXNwb25zZXMoKSB7XG4gICAgdGhpcy5fY29udGV4dCA9IHRoaXMuX2luaXRpYWxDb250ZXh0O1xuICB9XG5cbiAgcHVibGljIGdldFJlc3BvbnNlKGlkZW50aWZpZXI6IHN0cmluZyk6IFJlYWRvbmx5PFJlc3BvbnNlVmFyaWFibGU+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYXJpYWJsZShpZGVudGlmaWVyKSBhcyBSZXNwb25zZVZhcmlhYmxlO1xuICB9XG5cbiAgcHVibGljIGdldE91dGNvbWUoaWRlbnRpZmllcjogc3RyaW5nKTogUmVhZG9ubHk8T3V0Y29tZVZhcmlhYmxlPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmFyaWFibGUoaWRlbnRpZmllcikgYXMgT3V0Y29tZVZhcmlhYmxlO1xuICB9XG5cbiAgcHVibGljIGdldFZhcmlhYmxlKGlkZW50aWZpZXI6IHN0cmluZyk6IFJlYWRvbmx5PFZhcmlhYmxlRGVjbGFyYXRpb248c3RyaW5nIHwgc3RyaW5nW10gfCBudWxsPj4ge1xuICAgIHJldHVybiB0aGlzLl9jb250ZXh0LnZhcmlhYmxlcy5maW5kKHYgPT4gdi5pZGVudGlmaWVyID09PSBpZGVudGlmaWVyKSB8fCBudWxsO1xuICB9XG5cbiAgLy8gc2F2aW5nIHByaXZhdGVzIGhlcmU6IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIHByaXZhdGUgaGFuZGxlVXBkYXRlUmVzcG9uc2VWYXJpYWJsZShldmVudDogQ3VzdG9tRXZlbnQ8UmVzcG9uc2VJbnRlcmFjdGlvbj4pIHtcbiAgICBjb25zdCB7IHJlc3BvbnNlSWRlbnRpZmllciwgcmVzcG9uc2UgfSA9IGV2ZW50LmRldGFpbDtcbiAgICB0aGlzLnVwZGF0ZVJlc3BvbnNlVmFyaWFibGUocmVzcG9uc2VJZGVudGlmaWVyLCByZXNwb25zZSk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlUmVzcG9uc2VWYXJpYWJsZShpZGVudGlmaWVyOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2NvbnRleHQgPSB7XG4gICAgICAuLi50aGlzLl9jb250ZXh0LFxuICAgICAgdmFyaWFibGVzOiB0aGlzLl9jb250ZXh0LnZhcmlhYmxlcy5tYXAodiA9PiAodi5pZGVudGlmaWVyICE9PSBpZGVudGlmaWVyID8gdiA6IHsgLi4udiwgdmFsdWU6IHZhbHVlIH0pKVxuICAgIH07XG5cbiAgICB0aGlzLl9lbWl0PEludGVyYWN0aW9uQ2hhbmdlZERldGFpbHM+KCdxdGktaW50ZXJhY3Rpb24tY2hhbmdlZCcsIHtcbiAgICAgIGl0ZW06IHRoaXMuaWRlbnRpZmllcixcbiAgICAgIHJlc3BvbnNlSWRlbnRpZmllcjogaWRlbnRpZmllcixcbiAgICAgIHJlc3BvbnNlOiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IFsuLi52YWx1ZV0gOiB2YWx1ZVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuYWRhcHRpdmUgPT09ICdmYWxzZScpIHtcbiAgICAgIC8vIGlmIGFkYXBhdGl2ZSwgY29tcGxldGlvblN0YXR1cyBpcyBzZXQgYnkgdGhlIHByb2Nlc3NpbmcgdGVtcGxhdGVcbiAgICAgIHRoaXMudXBkYXRlT3V0Y29tZVZhcmlhYmxlKCdjb21wbGV0aW9uU3RhdHVzJywgdGhpcy5fZ2V0Q29tcGxldGlvblN0YXR1cygpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlT3V0Y29tZVZhcmlhYmxlKGlkZW50aWZpZXI6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkKSB7XG4gICAgY29uc3Qgb3V0Y29tZVZhcmlhYmxlID0gdGhpcy5nZXRPdXRjb21lKGlkZW50aWZpZXIpO1xuICAgIGlmICghb3V0Y29tZVZhcmlhYmxlKSB7XG4gICAgICBjb25zb2xlLndhcm4oYENhbiBub3Qgc2V0IHF0aS1vdXRjb21lLWlkZW50aWZpZXI6ICR7aWRlbnRpZmllcn0sIGl0IGlzIG5vdCBhdmFpbGFibGVgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9jb250ZXh0ID0ge1xuICAgICAgLi4udGhpcy5fY29udGV4dCxcbiAgICAgIHZhcmlhYmxlczogdGhpcy5fY29udGV4dC52YXJpYWJsZXMubWFwKHYgPT4ge1xuICAgICAgICBpZiAodi5pZGVudGlmaWVyICE9PSBpZGVudGlmaWVyKSB7XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi52LFxuICAgICAgICAgIHZhbHVlOiBvdXRjb21lVmFyaWFibGUuY2FyZGluYWxpdHkgPT09ICdzaW5nbGUnID8gdmFsdWUgOiBbLi4udi52YWx1ZSwgdmFsdWUgYXMgc3RyaW5nXVxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICB9O1xuXG4gICAgdGhpcy5fZmVlZGJhY2tFbGVtZW50cy5mb3JFYWNoKGZlID0+IGZlLmNoZWNrU2hvd0ZlZWRiYWNrKGlkZW50aWZpZXIpKTtcblxuICAgIHRoaXMuX2VtaXQ8T3V0Y29tZUNoYW5nZWREZXRhaWxzPigncXRpLW91dGNvbWUtY2hhbmdlZCcsIHtcbiAgICAgIGl0ZW06IHRoaXMuaWRlbnRpZmllcixcbiAgICAgIG91dGNvbWVJZGVudGlmaWVyOiBpZGVudGlmaWVyLFxuICAgICAgdmFsdWU6IHRoaXMuX2NvbnRleHQudmFyaWFibGVzLmZpbmQodiA9PiB2LmlkZW50aWZpZXIgPT09IGlkZW50aWZpZXIpPy52YWx1ZVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0Q29tcGxldGlvblN0YXR1cygpOiAnY29tcGxldGVkJyB8ICdpbmNvbXBsZXRlJyB8ICdub3RfYXR0ZW1wdGVkJyB8ICd1bmtub3duJyB7XG4gICAgaWYgKHRoaXMuX2ludGVyYWN0aW9uRWxlbWVudHMuZXZlcnkoaW50ZXJhY3Rpb25FbGVtZW50ID0+IGludGVyYWN0aW9uRWxlbWVudC52YWxpZGF0ZSgpKSkgcmV0dXJuICdjb21wbGV0ZWQnO1xuICAgIGlmICh0aGlzLl9pbnRlcmFjdGlvbkVsZW1lbnRzLnNvbWUoaW50ZXJhY3Rpb25FbGVtZW50ID0+IGludGVyYWN0aW9uRWxlbWVudC52YWxpZGF0ZSgpKSkgcmV0dXJuICdpbmNvbXBsZXRlJztcbiAgICByZXR1cm4gJ25vdF9hdHRlbXB0ZWQnO1xuICB9XG5cbiAgcHJpdmF0ZSBfZW1pdDxUPihuYW1lLCBkZXRhaWwgPSBudWxsKSB7XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50PFQ+KG5hbWUsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWUsXG4gICAgICAgIGRldGFpbFxuICAgICAgfSlcbiAgICApO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1hc3Nlc3NtZW50LWl0ZW0nOiBRdGlBc3Nlc3NtZW50SXRlbTtcbiAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5cbnR5cGUgVXBkYXRlSGFuZGxlciA9IChwcmV2PzogdW5rbm93biwgbmV4dD86IHVua25vd24pID0+IHZvaWQ7XG5cbnR5cGUgTm9uVW5kZWZpbmVkPEE+ID0gQSBleHRlbmRzIHVuZGVmaW5lZCA/IG5ldmVyIDogQTtcblxudHlwZSBVcGRhdGVIYW5kbGVyRnVuY3Rpb25LZXlzPFQgZXh0ZW5kcyBvYmplY3Q+ID0ge1xuICBbSyBpbiBrZXlvZiBUXS0/OiBOb25VbmRlZmluZWQ8VFtLXT4gZXh0ZW5kcyBVcGRhdGVIYW5kbGVyID8gSyA6IG5ldmVyO1xufVtrZXlvZiBUXTtcblxuaW50ZXJmYWNlIFdhdGNoT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBJZiB0cnVlLCB3aWxsIG9ubHkgc3RhcnQgd2F0Y2hpbmcgYWZ0ZXIgdGhlIGluaXRpYWwgdXBkYXRlL3JlbmRlclxuICAgKi9cbiAgd2FpdFVudGlsRmlyc3RVcGRhdGU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJ1bnMgd2hlbiBvYnNlcnZlZCBwcm9wZXJ0aWVzIGNoYW5nZSwgZS5nLiBAcHJvcGVydHkgb3IgQHN0YXRlLCBidXQgYmVmb3JlIHRoZSBjb21wb25lbnQgdXBkYXRlcy4gVG8gd2FpdCBmb3IgYW5cbiAqIHVwZGF0ZSB0byBjb21wbGV0ZSBhZnRlciBhIGNoYW5nZSBvY2N1cnMsIHVzZSBgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZWAgaW4gdGhlIGhhbmRsZXIuIFRvIHN0YXJ0IHdhdGNoaW5nIGFmdGVyIHRoZVxuICogaW5pdGlhbCB1cGRhdGUvcmVuZGVyLCB1c2UgYHsgd2FpdFVudGlsRmlyc3RVcGRhdGU6IHRydWUgfWAgb3IgYHRoaXMuaGFzVXBkYXRlZGAgaW4gdGhlIGhhbmRsZXIuXG4gKlxuICogVXNhZ2U6XG4gKlxuICogQHdhdGNoKCdwcm9wTmFtZScpXG4gKiBoYW5kbGVQcm9wQ2hhbmdlKG9sZFZhbHVlLCBuZXdWYWx1ZSkge1xuICogICAuLi5cbiAqIH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdhdGNoKHByb3BlcnR5TmFtZTogc3RyaW5nIHwgc3RyaW5nW10sIG9wdGlvbnM/OiBXYXRjaE9wdGlvbnMpIHtcbiAgY29uc3QgcmVzb2x2ZWRPcHRpb25zOiBSZXF1aXJlZDxXYXRjaE9wdGlvbnM+ID0ge1xuICAgIHdhaXRVbnRpbEZpcnN0VXBkYXRlOiBmYWxzZSxcbiAgICAuLi5vcHRpb25zXG4gIH07XG4gIHJldHVybiA8RWxlbUNsYXNzIGV4dGVuZHMgTGl0RWxlbWVudD4ocHJvdG86IEVsZW1DbGFzcywgZGVjb3JhdGVkRm5OYW1lOiBVcGRhdGVIYW5kbGVyRnVuY3Rpb25LZXlzPEVsZW1DbGFzcz4pID0+IHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gdXBkYXRlIGlzIGEgcHJvdGVjdGVkIHByb3BlcnR5XG4gICAgY29uc3QgeyB1cGRhdGUgfSA9IHByb3RvO1xuICAgIGNvbnN0IHdhdGNoZWRQcm9wZXJ0aWVzID0gQXJyYXkuaXNBcnJheShwcm9wZXJ0eU5hbWUpID8gcHJvcGVydHlOYW1lIDogW3Byb3BlcnR5TmFtZV07XG5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gdXBkYXRlIGlzIGEgcHJvdGVjdGVkIHByb3BlcnR5XG4gICAgcHJvdG8udXBkYXRlID0gZnVuY3Rpb24gKHRoaXM6IEVsZW1DbGFzcywgY2hhbmdlZFByb3BzOiBNYXA8a2V5b2YgRWxlbUNsYXNzLCBFbGVtQ2xhc3Nba2V5b2YgRWxlbUNsYXNzXT4pIHtcbiAgICAgIHdhdGNoZWRQcm9wZXJ0aWVzLmZvckVhY2gocHJvcGVydHkgPT4ge1xuICAgICAgICBjb25zdCBrZXkgPSBwcm9wZXJ0eSBhcyBrZXlvZiBFbGVtQ2xhc3M7XG4gICAgICAgIGlmIChjaGFuZ2VkUHJvcHMuaGFzKGtleSkpIHtcbiAgICAgICAgICBjb25zdCBvbGRWYWx1ZSA9IGNoYW5nZWRQcm9wcy5nZXQoa2V5KTtcbiAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXNba2V5XTtcblxuICAgICAgICAgIGlmIChvbGRWYWx1ZSAhPT0gbmV3VmFsdWUpIHtcbiAgICAgICAgICAgIGlmICghcmVzb2x2ZWRPcHRpb25zLndhaXRVbnRpbEZpcnN0VXBkYXRlIHx8IHRoaXMuaGFzVXBkYXRlZCkge1xuICAgICAgICAgICAgICAodGhpc1tkZWNvcmF0ZWRGbk5hbWVdIGFzIHVua25vd24gYXMgVXBkYXRlSGFuZGxlcikob2xkVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB1cGRhdGUuY2FsbCh0aGlzLCBjaGFuZ2VkUHJvcHMpO1xuICAgIH07XG4gIH07XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ0BsaXQvY29udGV4dCc7XG5pbXBvcnQgeyBWYXJpYWJsZURlY2xhcmF0aW9uIH0gZnJvbSAnLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBJdGVtQ29udGV4dCB7XG4gIGhyZWY/OiBzdHJpbmc7XG4gIGlkZW50aWZpZXI6IHN0cmluZztcbiAgdmFyaWFibGVzOiBSZWFkb25seUFycmF5PFZhcmlhYmxlRGVjbGFyYXRpb248c3RyaW5nIHwgc3RyaW5nW10+Pjtcbn1cblxuZXhwb3J0IGNvbnN0IGl0ZW1Db250ZXh0VmFyaWFibGVzID0gW1xuICB7XG4gICAgaWRlbnRpZmllcjogJ2NvbXBsZXRpb25TdGF0dXMnLFxuICAgIGNhcmRpbmFsaXR5OiAnc2luZ2xlJyxcbiAgICBiYXNlVHlwZTogJ3N0cmluZycsXG4gICAgdmFsdWU6ICd1bmtub3duJyxcbiAgICB0eXBlOiAnb3V0Y29tZSdcbiAgfSxcbiAge1xuICAgIGlkZW50aWZpZXI6ICdudW1BdHRlbXB0cycsXG4gICAgY2FyZGluYWxpdHk6ICdzaW5nbGUnLFxuICAgIGJhc2VUeXBlOiAnaW50ZWdlcicsXG4gICAgdmFsdWU6ICcwJyxcbiAgICB0eXBlOiAncmVzcG9uc2UnXG4gIH1cbl0gYXMgVmFyaWFibGVEZWNsYXJhdGlvbjxzdHJpbmcgfCBzdHJpbmdbXT5bXTtcblxuZXhwb3J0IGNvbnN0IGl0ZW1Db250ZXh0ID0gY3JlYXRlQ29udGV4dDxJdGVtQ29udGV4dD4oJ2l0ZW0nKTtcbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgcXRpVHJhbnNmb3JtSXRlbSB9IGZyb20gJy4uLy4uL3F0aS10cmFuc2Zvcm1lcnMnO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBjdXN0b20gZWxlbWVudCBmb3IgcmVmZXJlbmNpbmcgYW4gYXNzZXNzbWVudCBzdGltdWx1cy5cbiAqL1xuQGN1c3RvbUVsZW1lbnQoJ3F0aS1hc3Nlc3NtZW50LXN0aW11bHVzLXJlZicpXG5leHBvcnQgY2xhc3MgUXRpQXNzZXNzbWVudFN0aW11bHVzUmVmIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIC8qKlxuICAgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgc3RpbXVsdXMuXG4gICAqL1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgaWRlbnRpZmllciA9ICcnO1xuXG4gIC8qKlxuICAgKiBUaGUgaHJlZiBvZiB0aGUgc3RpbXVsdXMuXG4gICAqL1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgaHJlZiA9ICcnO1xuXG4gIC8qKlxuICAgKiBMaWZlY3ljbGUgbWV0aG9kIGNhbGxlZCB3aGVuIHRoZSBlbGVtZW50IGlzIGNvbm5lY3RlZCB0byB0aGUgRE9NLlxuICAgKiBMb2FkcyBhbmQgYXBwZW5kcyB0aGUgc3RpbXVsdXMgaWYgdGhlICdxdGktYXNzZXNzbWVudC1zdGltdWx1cy1yZWYtY29ubmVjdGVkJyBldmVudCBpcyBub3QgcHJldmVudGVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cbiAgICBjb25zdCBldmVudCA9IG5ldyBFdmVudCgncXRpLWFzc2Vzc21lbnQtc3RpbXVsdXMtcmVmLWNvbm5lY3RlZCcsIHsgY2FuY2VsYWJsZTogdHJ1ZSwgYnViYmxlczogdHJ1ZSB9KTtcbiAgICBjb25zdCBpc1ByZXZlbnRlZCA9IHRoaXMuZGlzcGF0Y2hFdmVudChldmVudCk7XG5cbiAgICBpZiAoaXNQcmV2ZW50ZWQpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmNsb3Nlc3QoJ3F0aS1hc3Nlc3NtZW50LWl0ZW0nKTtcblxuICAgICAgY29uc3Qgc3RpbXVsdXNSZWYgPSBpdGVtLnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLXN0aW11bHVzLWlkcmVmPSR7dGhpcy5pZGVudGlmaWVyfV1gKTtcbiAgICAgIGlmIChzdGltdWx1c1JlZikge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRBbmRBcHBlbmRTdGltdWx1cyhzdGltdWx1c1JlZik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oYFN0aW11bHVzIHdpdGggZGF0YS1zdGltdWx1cy1pZHJlZiAke3RoaXMuaWRlbnRpZmllcn0gbm90IGZvdW5kYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIGFuZCBhcHBlbmRzIHRoZSBzdGltdWx1cyB0byB0aGUgc3BlY2lmaWVkIGVsZW1lbnQuXG4gICAqIEBwYXJhbSBzdGltdWx1c1JlZiAtIFRoZSBlbGVtZW50IHRvIHdoaWNoIHRoZSBzdGltdWx1cyB3aWxsIGJlIGFwcGVuZGVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGxvYWRBbmRBcHBlbmRTdGltdWx1cyhzdGltdWx1c1JlZjogRWxlbWVudCkge1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLmhyZWYuc3Vic3RyaW5nKDAsIHRoaXMuaHJlZi5sYXN0SW5kZXhPZignLycpKTtcbiAgICBjb25zdCBzdGltdWx1cyA9IGF3YWl0IHF0aVRyYW5zZm9ybUl0ZW0oKVxuICAgICAgLmxvYWQodGhpcy5ocmVmKVxuICAgICAgLnRoZW4oYXBpID0+IGFwaS5wYXRoKHBhdGgpLmh0bWxkb2MoKSk7XG4gICAgaWYgKHN0aW11bHVzKSB7XG4gICAgICBjb25zdCBlbGVtZW50cyA9IHN0aW11bHVzLnF1ZXJ5U2VsZWN0b3JBbGwoJ3F0aS1zdGltdWx1cy1ib2R5LCBxdGktc3R5bGVzaGVldCcpO1xuICAgICAgc3RpbXVsdXNSZWYuYXBwZW5kKC4uLmVsZW1lbnRzKTtcbiAgICB9XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWFzc2Vzc21lbnQtc3RpbXVsdXMtcmVmJzogUXRpQXNzZXNzbWVudFN0aW11bHVzUmVmO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgTGl0RWxlbWVudCwgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHdhdGNoIH0gZnJvbSAnLi4vLi4vLi4vLi4vZGVjb3JhdG9ycy93YXRjaCc7XG5cbmNvbnN0IEtFWUNPREUgPSB7XG4gIFNQQUNFOiAzMlxufTtcblxuLyoqXG4gKiBAc3VtbWFyeSBxdGktY2hvaWNlIGlzIHVzZWQgYnkgcXRpLXNpbXBsZS1jaG9pY2UsIHF0aS1pbmxpbmUtY2hvaWNlLCBxdGktaG90dGV4dCwgcXRpLWhvdHNwb3QtY2hvaWNlLlxuICpcbiAqIEBzaW5jZSAxLjBcbiAqIEBzdGF0dXMgc3RhYmxlXG4gKlxuICogQGV2ZW50IHF0aS1yZWdpc3Rlci1jaG9pY2UgLSByZWdpc3RlciBpdHNlbHZlcyBvbiBhIHF0aS1jaG9pY2UtaW50ZXJhY3Rpb24gZWxlbWVudC5cbiAqIEBldmVudCBxdGktbG9vc2UtY2hvaWNlIC0gZGUtcmVnaXN0ZXIgaXRzZWx2ZXMgb24gYSBxdGktY2hvaWNlLWludGVyYWN0aW9uIGVsZW1lbnQuXG4gKiBAZXZlbnQgcXRpLWNob2ljZS1lbGVtZW50LXNlbGVjdGVkIC0gRW1pdHRlZCB3aGVuIHRoZSBjaG9pY2UgaXMgc2VsZWN0ZWQuXG4gKlxuICogQHNsb3QgLSBUaGUgY2hvaWNlcyBzbG90IGVsZW1lbnRcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFF0aUNob2ljZSBleHRlbmRzIExpdEVsZW1lbnQge1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgaWRlbnRpZmllcjogc3RyaW5nO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IE51bWJlciwgcmVmbGVjdDogdHJ1ZSB9KSB0YWJpbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkID0gMDtcblxuICBAcHJvcGVydHkoe1xuICAgIHJlZmxlY3Q6IHRydWUsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgICBhdHRyaWJ1dGU6ICdhcmlhLWRpc2FibGVkJyxcbiAgICBjb252ZXJ0ZXI6IHtcbiAgICAgIHRvQXR0cmlidXRlOiB2YWx1ZSA9PiB2YWx1ZVxuICAgIH1cbiAgfSlcbiAgZGlzYWJsZWQgPSBmYWxzZTtcblxuICBAcHJvcGVydHkoe1xuICAgIHJlZmxlY3Q6IHRydWUsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgICBhdHRyaWJ1dGU6ICdhcmlhLXJlYWRvbmx5JyxcbiAgICBjb252ZXJ0ZXI6IHtcbiAgICAgIHRvQXR0cmlidXRlOiB2YWx1ZSA9PiB2YWx1ZVxuICAgIH1cbiAgfSlcbiAgcmVhZG9ubHkgPSBmYWxzZTtcblxuICBAcHJvcGVydHkoe1xuICAgIHJlZmxlY3Q6IHRydWUsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgICBhdHRyaWJ1dGU6ICdhcmlhLWNoZWNrZWQnLFxuICAgIGNvbnZlcnRlcjoge1xuICAgICAgdG9BdHRyaWJ1dGU6IHZhbHVlID0+IHZhbHVlXG4gICAgfVxuICB9KVxuICBjaGVja2VkID0gZmFsc2U7XG5cbiAgQHdhdGNoKCdkaXNhYmxlZCcsIHsgd2FpdFVudGlsRmlyc3RVcGRhdGU6IHRydWUgfSlcbiAgaGFuZGxlRGlzYWJsZWRDaGFuZ2UoXzogYm9vbGVhbiwgZGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMudGFiaW5kZXggPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmJsdXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50YWJJbmRleCA9IDA7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLl9vbktleVVwKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fb25DbGljayk7XG5cbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3F0aS1yZWdpc3Rlci1jaG9pY2UnLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICBjb21wb3NlZDogdHJ1ZVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX29uS2V5VXApO1xuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkNsaWNrKTtcblxuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBDdXN0b21FdmVudCgncXRpLWxvb3NlLWNob2ljZScsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbXBvc2VkOiB0cnVlXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgcmVzZXQoKSB7XG4gICAgdGhpcy5jaGVja2VkID0gZmFsc2U7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25LZXlVcChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmIChldmVudC5hbHRLZXkpIHJldHVybjtcblxuICAgIHN3aXRjaCAoZXZlbnQua2V5Q29kZSkge1xuICAgICAgY2FzZSBLRVlDT0RFLlNQQUNFOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLl90b2dnbGVDaGVja2VkKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX29uQ2xpY2soKSB7XG4gICAgdGhpcy5fdG9nZ2xlQ2hlY2tlZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdG9nZ2xlQ2hlY2tlZCgpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSByZXR1cm47XG4gICAgdGhpcy5jaGVja2VkID0gIXRoaXMuY2hlY2tlZDtcblxuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBDdXN0b21FdmVudCgncXRpLWNob2ljZS1lbGVtZW50LXNlbGVjdGVkJywge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWUsXG4gICAgICAgIGRldGFpbDogeyBpZGVudGlmaWVyOiB0aGlzLmlkZW50aWZpZXIsIGNoZWNrZWQ6IHRoaXMuY2hlY2tlZCB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICB2YWxpZGF0ZUFsbFByb3BzKCkge1xuICAgIGlmICghdGhpcy5nZXRBdHRyaWJ1dGUoJ2lkZW50aWZpZXInKSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIGlmICghdGhpcy52YWxpZGF0ZUFsbFByb3BzKCkpIHtcbiAgICAgIGNvbnNvbGUud2FybihgSW52YWxpZCBwcm9wcyBmb3IgJHt0aGlzLm91dGVySFRNTH1gLCBgbWlzc2luZyBpZGVudGlmaWVyYCk7XG4gICAgfVxuICAgIHJldHVybiBodG1sYCA8c2xvdD48L3Nsb3Q+IGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWNob2ljZSc6IFF0aUNob2ljZTtcbiAgfVxufVxuIiwgImltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBodG1sLCBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9xdGktaXRlbS1ib2R5LnN0eWxlcyc7XG5pbXBvcnQgdHlwZSB7IENTU1Jlc3VsdEdyb3VwIH0gZnJvbSAnbGl0JztcblxuLyoqXG4gKiBAc3VtbWFyeSBUaGUgcXRpLWl0ZW0tYm9keSBub2RlIGNvbnRhaW5zIHRoZSB0ZXh0LCBncmFwaGljcywgbWVkaWEgb2JqZWN0cyBhbmQgaW50ZXJhY3Rpb25zIHRoYXQgZGVzY3JpYmUgdGhlIGl0ZW0ncyBjb250ZW50IGFuZCBpbmZvcm1hdGlvbiBhYm91dCBob3cgaXQgaXMgc3RydWN0dXJlZC5cbiAqIEBkb2N1bWVudGF0aW9uIGh0dHBzOi8vd3d3Lmltc2dsb2JhbC5vcmcvc3BlYy9xdGkvdjNwMC9pbXBsI2guc3BocG82bHU2enFpXG4gKiBAc3RhdHVzIHN0YWJsZVxuICogQHNpbmNlIDQuMFxuICpcbiAqIEBzbG90IC0gaXRlbSBib2R5IGNvbnRlbnQuXG4gKiBAc2xvdCBxdGktcnVicmljLWJsb2NrIC0gdGhlIHF0aSBydWJyaWMgYmxvY2sgaXMgcGxhY2VkIGFib3ZlIHRoZSBpdGVtXG4gKlxuICovXG5AY3VzdG9tRWxlbWVudCgncXRpLWl0ZW0tYm9keScpXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBRdGlJdGVtQm9keSBleHRlbmRzIExpdEVsZW1lbnQge1xuICBzdGF0aWMgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IHN0eWxlcztcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPHNsb3QgbmFtZT1cInF0aS1ydWJyaWMtYmxvY2tcIj48L3Nsb3Q+PHNsb3Q+PC9zbG90PmA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWl0ZW0tYm9keSc6IFF0aUl0ZW1Cb2R5O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzIH0gZnJvbSAnbGl0JztcblxuZXhwb3J0IGRlZmF1bHQgY3NzYFxuICA6aG9zdCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbmA7XG4iLCAiaW1wb3J0IHsgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuQGN1c3RvbUVsZW1lbnQoJ3F0aS1wcm9tcHQnKVxuZXhwb3J0IGNsYXNzIFF0aVByb21wdCBleHRlbmRzIExpdEVsZW1lbnQge1xuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPHNsb3Q+PC9zbG90PmA7XG4gIH1cblxuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICAvLyBpZiBwcm9tcHRzIGFyZSBpbiBpbnRlcmFjdGlvbnMgdGhleSBzaG91bGQgaGF2ZSBhIHNsb3QsIHNvIHRoZSBwcm9tcHQgaGFzIHRvIGdvIHRoZXJlXG4gICAgLy8gaWYgcHJvbXB0IGlzIGluIHRoZSBib2R5LCB0aGVuIGp1c3QgZGlzcGxheSB0aGUgcHJvbXB0IHRoZXJlLlxuICAgIC8vIEEgYmV0dGVyIGNoZWNrIHdvdWxkIGJlIHRoZSBsYXR0ZXIsIGJ1dCBub3QgY2FuJ3QgZ2V0IHRocm91Z2ggdGhlIHNoYWRvd3Jvb3QgdG8gZmluZCB0aGUgc2xvdFxuICAgIGNvbnN0IGluSW50ZXJhY3Rpb24gPSB0aGlzLnBhcmVudEVsZW1lbnQudGFnTmFtZS5lbmRzV2l0aCgnSU5URVJBQ1RJT04nKTtcbiAgICBpbkludGVyYWN0aW9uICYmIHRoaXMuc2V0QXR0cmlidXRlKCdzbG90JywgJ3Byb21wdCcpO1xuICAgIC8vIGNvbnN0IHByb21wdFNsb3QgPSB0aGlzLnBhcmVudEVsZW1lbnQuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFwiW25hbWU9J3Byb21wdCddXCIpO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1wcm9tcHQnOiBRdGlQcm9tcHQ7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50LCBQcm9wZXJ0eVZhbHVlTWFwIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktc3R5bGVzaGVldCcpXG5leHBvcnQgY2xhc3MgUXRpU3R5bGVzaGVldCBleHRlbmRzIExpdEVsZW1lbnQge1xuICBwcml2YXRlIHN0eWxlTGluazogSFRNTFN0eWxlRWxlbWVudCB8IEhUTUxMaW5rRWxlbWVudDtcblxuICAvLyBwcm90ZWN0ZWQgY3JlYXRlUmVuZGVyUm9vdCgpOiBIVE1MRWxlbWVudCB8IERvY3VtZW50RnJhZ21lbnQge1xuICAvLyAgIHJldHVybiB0aGlzO1xuICAvLyB9XG5cbiAgcHJvdGVjdGVkIGZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVNYXA8YW55PiB8IE1hcDxQcm9wZXJ0eUtleSwgdW5rbm93bj4pOiB2b2lkIHtcbiAgICBzdXBlci5maXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIGNvbnN0IGl0ZW0gPSB0aGlzO1xuICAgIGNvbnN0IGxpbmsgPSB0aGlzLmdldEF0dHJpYnV0ZSgnaHJlZicpO1xuXG4gICAgaWYgKGxpbmsgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0eWxlcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcbiAgICAgIHN0eWxlcy5yZWwgPSAnc3R5bGVzaGVldCc7XG4gICAgICBzdHlsZXMudHlwZSA9ICd0ZXh0L2Nzcyc7XG4gICAgICBzdHlsZXMubWVkaWEgPSAnc2NyZWVuJztcbiAgICAgIHN0eWxlcy5ocmVmID0gbGluaztcbiAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQoc3R5bGVzKTtcbiAgICAgIHRoaXMuc3R5bGVMaW5rID0gc3R5bGVzO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRleHRDb250ZW50ICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdHlsZXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgICAgc3R5bGVzLm1lZGlhID0gJ3NjcmVlbic7XG4gICAgICBzdHlsZXMudGV4dENvbnRlbnQgPSB0aGlzLnRleHRDb250ZW50O1xuICAgICAgaXRlbS5hcHBlbmRDaGlsZChzdHlsZXMpO1xuICAgICAgdGhpcy5zdHlsZUxpbmsgPSBzdHlsZXM7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgaWYgKHRoaXMuc3R5bGVMaW5rKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnN0eWxlTGluay5yZW1vdmUoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdjb3VsZCBub3QgcmVtb3ZlIHN0eWxlc2hlZXQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXN0eWxlc2hlZXQnOiBRdGlTdHlsZXNoZWV0O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY29uc3VtZSB9IGZyb20gJ0BsaXQvY29udGV4dCc7XG5pbXBvcnQgeyBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgQmFzZVR5cGUsIENhcmRpbmFsaXR5IH0gZnJvbSAnLi4vLi4vaW50ZXJuYWwvZXhwcmVzc2lvbi1yZXN1bHQnO1xuaW1wb3J0IHsgT3V0Y29tZVZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IEl0ZW1Db250ZXh0LCBpdGVtQ29udGV4dCB9IGZyb20gJy4uLy4uL3F0aS1hc3Nlc3NtZW50LWl0ZW0vcXRpLWFzc2Vzc21lbnQtaXRlbS5jb250ZXh0JztcbmltcG9ydCB7IFF0aVZhcmlhYmxlRGVjbGFyYXRpb24gfSBmcm9tICcuLi9xdGktdmFyaWFibGUtZGVjbGFyYXRpb24nO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLW91dGNvbWUtZGVjbGFyYXRpb24nKVxuZXhwb3J0IGNsYXNzIFF0aU91dGNvbWVEZWNsYXJhdGlvbiBleHRlbmRzIFF0aVZhcmlhYmxlRGVjbGFyYXRpb24ge1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2Jhc2UtdHlwZScgfSkgYmFzZVR5cGU6IEJhc2VUeXBlO1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2V4dGVybmFsLXNjb3JlZCcgfSkgZXh0ZXJuYWxTY29yZWQ6IFN0cmluZztcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIGlkZW50aWZpZXI6IHN0cmluZztcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIGNhcmRpbmFsaXR5OiBDYXJkaW5hbGl0eTtcblxuICBAY29uc3VtZSh7IGNvbnRleHQ6IGl0ZW1Db250ZXh0LCBzdWJzY3JpYmU6IHRydWUgfSlcbiAgQHN0YXRlKClcbiAgcHVibGljIGl0ZW1Db250ZXh0PzogSXRlbUNvbnRleHQ7XG5cbiAgc3RhdGljIHN0eWxlcyA9IFtcbiAgICBjc3NgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgYFxuICBdO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaXRlbUNvbnRleHQ/LnZhcmlhYmxlcy5maW5kKHYgPT4gdi5pZGVudGlmaWVyID09PSB0aGlzLmlkZW50aWZpZXIpPy52YWx1ZTtcbiAgICByZXR1cm4gaHRtbGAke0pTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCAyKX1gO1xuICB9XG5cbiAgZ2V0IGludGVycG9sYXRpb25UYWJsZSgpOiBNYXA8bnVtYmVyLCBudW1iZXI+IHwgbnVsbCB7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3F0aS1pbnRlcnBvbGF0aW9uLXRhYmxlJyk7XG4gICAgaWYgKHRhYmxlKSB7XG4gICAgICBjb25zdCBlbnRyaWVzID0gbmV3IE1hcDxudW1iZXIsIG51bWJlcj4oKTtcbiAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGFibGUucXVlcnlTZWxlY3RvckFsbCgncXRpLWludGVycG9sYXRpb24tdGFibGUtZW50cnknKSkge1xuICAgICAgICBpZiAoIWVudHJ5LmdldEF0dHJpYnV0ZSgnc291cmNlLXZhbHVlJykgJiYgZW50cnkuZ2V0QXR0cmlidXRlKCd0YXJnZXQtdmFsdWUnKSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ3NvdXJjZS12YWx1ZSBvciB0YXJnZXQtdmFsdWUgaXMgbWlzc2luZyBpbiBxdGktaW50ZXJwb2xhdGlvbi10YWJsZS1lbnRyeScpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNvdXJjZVZhbHVlID0gcGFyc2VJbnQoZW50cnkuZ2V0QXR0cmlidXRlKCdzb3VyY2UtdmFsdWUnKSk7XG4gICAgICAgIGNvbnN0IHRhcmdldFZhbHVlID0gcGFyc2VJbnQoZW50cnkuZ2V0QXR0cmlidXRlKCd0YXJnZXQtdmFsdWUnKSk7XG4gICAgICAgIGlmIChpc05hTihzb3VyY2VWYWx1ZSkgfHwgaXNOYU4odGFyZ2V0VmFsdWUpKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignc291cmNlLXZhbHVlIG9yIHRhcmdldC12YWx1ZSBpcyBub3QgYSBudW1iZXIgaW4gcXRpLWludGVycG9sYXRpb24tdGFibGUtZW50cnknKTtcbiAgICAgICAgfVxuICAgICAgICBlbnRyaWVzLnNldChzb3VyY2VWYWx1ZSwgdGFyZ2V0VmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGVudHJpZXM7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cbiAgICBjb25zdCBvdXRjb21lVmFyaWFibGU6IE91dGNvbWVWYXJpYWJsZSA9IHtcbiAgICAgIGlkZW50aWZpZXI6IHRoaXMuaWRlbnRpZmllcixcbiAgICAgIGNhcmRpbmFsaXR5OiB0aGlzLmNhcmRpbmFsaXR5LFxuICAgICAgYmFzZVR5cGU6IHRoaXMuYmFzZVR5cGUsXG4gICAgICB0eXBlOiAnb3V0Y29tZScsXG4gICAgICB2YWx1ZTogbnVsbCxcbiAgICAgIGludGVycG9sYXRpb25UYWJsZTogdGhpcy5pbnRlcnBvbGF0aW9uVGFibGVcbiAgICB9O1xuICAgIG91dGNvbWVWYXJpYWJsZS52YWx1ZSA9IHRoaXMuZGVmYXVsdFZhbHVlcyhvdXRjb21lVmFyaWFibGUpO1xuXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdxdGktcmVnaXN0ZXItdmFyaWFibGUnLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICBkZXRhaWw6IHsgdmFyaWFibGU6IG91dGNvbWVWYXJpYWJsZSB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLW91dGNvbWUtZGVjbGFyYXRpb24nOiBRdGlPdXRjb21lRGVjbGFyYXRpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBodG1sLCBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBWYXJpYWJsZURlY2xhcmF0aW9uIH0gZnJvbSAnLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS12YXJpYWJsZWRlY2xhcmF0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlWYXJpYWJsZURlY2xhcmF0aW9uIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdD48L3Nsb3Q+YDtcbiAgfVxuXG4gIHByb3RlY3RlZCBkZWZhdWx0VmFsdWVzKHZhcmlhYmxlOiBWYXJpYWJsZURlY2xhcmF0aW9uPHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbD4pIHtcbiAgICBjb25zdCBodG1sVmFsdWVzID0gQXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoJ3F0aS1kZWZhdWx0LXZhbHVlID4gcXRpLXZhbHVlJykpO1xuXG4gICAgaWYgKGh0bWxWYWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBkZWZhdWx0VmFsdWVzID0gaHRtbFZhbHVlcy5tYXAobiA9PiBuLmlubmVySFRNTCk7XG4gICAgaWYgKGRlZmF1bHRWYWx1ZXMubGVuZ3RoID4gMSB8fCB2YXJpYWJsZS5jYXJkaW5hbGl0eSA9PT0gJ211bHRpcGxlJyB8fCB2YXJpYWJsZS5jYXJkaW5hbGl0eSA9PT0gJ29yZGVyZWQnKSB7XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlcztcbiAgICB9XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZXNbMF07XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXZhcmlhYmxlZGVjbGFyYXRpb24nOiBRdGlWYXJpYWJsZURlY2xhcmF0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY29uc3VtZSB9IGZyb20gJ0BsaXQvY29udGV4dCc7XG5pbXBvcnQgeyBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgQmFzZVR5cGUsIENhcmRpbmFsaXR5IH0gZnJvbSAnLi4vLi4vaW50ZXJuYWwvZXhwcmVzc2lvbi1yZXN1bHQnO1xuaW1wb3J0IHsgUmVzcG9uc2VWYXJpYWJsZSB9IGZyb20gJy4uLy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBJdGVtQ29udGV4dCwgaXRlbUNvbnRleHQgfSBmcm9tICcuLi8uLi9xdGktYXNzZXNzbWVudC1pdGVtL3F0aS1hc3Nlc3NtZW50LWl0ZW0uY29udGV4dCc7XG5pbXBvcnQgeyBRdGlNYXBwaW5nIH0gZnJvbSAnLi4vLi4vcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLW1hcHBpbmcvcXRpLW1hcHBpbmcnO1xuaW1wb3J0IHsgUXRpVmFyaWFibGVEZWNsYXJhdGlvbiB9IGZyb20gJy4uL3F0aS12YXJpYWJsZS1kZWNsYXJhdGlvbic7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktcmVzcG9uc2UtZGVjbGFyYXRpb24nKVxuZXhwb3J0IGNsYXNzIFF0aVJlc3BvbnNlRGVjbGFyYXRpb24gZXh0ZW5kcyBRdGlWYXJpYWJsZURlY2xhcmF0aW9uIHtcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdiYXNlLXR5cGUnIH0pIGJhc2VUeXBlOiBCYXNlVHlwZTtcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgaWRlbnRpZmllcjogc3RyaW5nO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KSBjYXJkaW5hbGl0eTogQ2FyZGluYWxpdHk7XG5cbiAgQGNvbnN1bWUoeyBjb250ZXh0OiBpdGVtQ29udGV4dCwgc3Vic2NyaWJlOiB0cnVlIH0pXG4gIEBzdGF0ZSgpXG4gIHB1YmxpYyBpdGVtQ29udGV4dD86IEl0ZW1Db250ZXh0O1xuXG4gIHN0YXRpYyBzdHlsZXMgPSBbXG4gICAgY3NzYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgIGBcbiAgXTtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLml0ZW1Db250ZXh0Py52YXJpYWJsZXMuZmluZCh2ID0+IHYuaWRlbnRpZmllciA9PT0gdGhpcy5pZGVudGlmaWVyKT8udmFsdWU7XG4gICAgcmV0dXJuIGh0bWxgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSwgbnVsbCwgMil9YDtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG4gICAgY29uc3QgcmVzcG9uc2VWYXJpYWJsZTogUmVzcG9uc2VWYXJpYWJsZSA9IHtcbiAgICAgIGJhc2VUeXBlOiB0aGlzLmJhc2VUeXBlLFxuICAgICAgaWRlbnRpZmllcjogdGhpcy5pZGVudGlmaWVyLFxuICAgICAgY29ycmVjdFJlc3BvbnNlOiB0aGlzLmNvcnJlY3RSZXNwb25zZSxcbiAgICAgIGNhcmRpbmFsaXR5OiB0aGlzLmNhcmRpbmFsaXR5IHx8ICdzaW5nbGUnLFxuICAgICAgbWFwcGluZzogdGhpcy5tYXBwaW5nLFxuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICB0eXBlOiAncmVzcG9uc2UnLFxuICAgICAgY2FuZGlkYXRlUmVzcG9uc2U6IG51bGxcbiAgICB9O1xuICAgIHJlc3BvbnNlVmFyaWFibGUudmFsdWUgPSB0aGlzLmRlZmF1bHRWYWx1ZXMocmVzcG9uc2VWYXJpYWJsZSk7XG5cbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3F0aS1yZWdpc3Rlci12YXJpYWJsZScsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWUsXG4gICAgICAgIGRldGFpbDogeyB2YXJpYWJsZTogcmVzcG9uc2VWYXJpYWJsZSB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldCBjb3JyZWN0UmVzcG9uc2UoKTogc3RyaW5nIHwgc3RyaW5nW10ge1xuICAgIGxldCByZXN1bHQ6IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIGNvbnN0IGNvcnJlY3RSZXNwb25zZSA9IHRoaXMucXVlcnlTZWxlY3RvcigncXRpLWNvcnJlY3QtcmVzcG9uc2UnKTtcbiAgICBpZiAoY29ycmVjdFJlc3BvbnNlKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSBjb3JyZWN0UmVzcG9uc2UucXVlcnlTZWxlY3RvckFsbCgncXRpLXZhbHVlJyk7XG4gICAgICBpZiAodGhpcy5jYXJkaW5hbGl0eSA9PT0gJ3NpbmdsZScgJiYgdmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVzdWx0ID0gdmFsdWVzWzBdLnRleHRDb250ZW50O1xuICAgICAgICB2YWx1ZXNbMF0ucmVtb3ZlKCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2FyZGluYWxpdHkgIT09ICdzaW5nbGUnKSB7XG4gICAgICAgIHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlc1tpXS50ZXh0Q29udGVudCk7XG4gICAgICAgICAgdmFsdWVzW2ldLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIGdldCBtYXBwaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3F0aS1tYXBwaW5nJykgYXMgUXRpTWFwcGluZztcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktcmVzcG9uc2UtZGVjbGFyYXRpb24nOiBRdGlSZXNwb25zZURlY2xhcmF0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWNvbXBhbmlvbi1tYXRlcmlhbHMtaW5mbycpXG5leHBvcnQgY2xhc3MgUXRpQ29tcGFuaW9uTWF0ZXJpYWxzSW5mbyBleHRlbmRzIExpdEVsZW1lbnQge1xuICAvLyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gY3NzYFxuICAvLyAgIHNsb3Qge1xuICAvLyAgICAgZGlzcGxheTogaGlkZGVuO1xuICAvLyAgIH1cbiAgLy8gYDtcbiAgLy8gb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAvLyAgIHJldHVybiBodG1sYCA8c2xvdD48L3Nsb3Q+IGA7XG4gIC8vIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWNvbXBhbmlvbi1tYXRlcmlhbHMtaW5mbyc6IFF0aUNvbXBhbmlvbk1hdGVyaWFsc0luZm87XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50LCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktY29udGVudC1ib2R5JylcbmV4cG9ydCBjbGFzcyBRdGlDb250ZW50Qm9keSBleHRlbmRzIExpdEVsZW1lbnQge1xuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPHNsb3Q+PC9zbG90PmA7XG4gIH1cbn1cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1jb250ZW50LWJvZHknOiBRdGlDb250ZW50Qm9keTtcbiAgfVxufVxuIiwgImltcG9ydCB7IExpdEVsZW1lbnQsIGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHdhdGNoIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9ycy93YXRjaCc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktcnVicmljLWJsb2NrJylcbmV4cG9ydCBjbGFzcyBRdGlSdWJyaWNCbG9jayBleHRlbmRzIExpdEVsZW1lbnQge1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgb3ZlcnJpZGUgaWQ7IC8vID1cInF0aUFzcGVjdEluaG91ZFJ1YnJpY0Jsb2NrXCJcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgdXNlOiAnaW5zdHJ1Y3Rpb25zJyB8ICdzY29yaW5nJyB8ICduYXZpZ2F0aW9uJzsgLy8gID0gXCJzY29yaW5nXCJcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgdmlldzogJ2F1dGhvcicgfCAnY2FuZGlkYXRlJyB8ICdwcm9jdG9yJyB8ICdzY29yZXInIHwgJ3Rlc3RDb25zdHJ1Y3RvcicgfCAndHV0b3InO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnY2xhc3MnIH0pIGNsYXNzTmFtZXM7XG4gIEB3YXRjaCgnY2xhc3NOYW1lcycsIHsgd2FpdFVudGlsRmlyc3RVcGRhdGU6IHRydWUgfSlcbiAgaGFuZGxlY2xhc3NOYW1lc0NoYW5nZShvbGQsIGRpc2FibGVkOiBib29sZWFuKSB7XG4gICAgY29uc3QgY2xhc3NOYW1lcyA9IHRoaXMuY2xhc3NOYW1lcy5zcGxpdCgnICcpO1xuICAgIGNsYXNzTmFtZXMuZm9yRWFjaCgoY2xhc3NOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIHN3aXRjaCAoY2xhc3NOYW1lKSB7XG4gICAgICAgIGNhc2UgJ3F0aS1ydWJyaWMtZGlzY3JldGlvbmFyeS1wbGFjZW1lbnQnOlxuICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCdzbG90JywgJ3F0aS1ydWJyaWMtYmxvY2snKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncXRpLXJ1YnJpYy1pbmxpbmUnOlxuICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCdzbG90JywgJycpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IGNzc2BcbiAgICA6aG9zdCB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gIGA7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICAvLyBieSBkZWZhdWx0IHB1dCB0aGlzIGluIGEgc2xvdCBpbiB0aGUgaXRlbS1ib2R5XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ3Nsb3QnLCAncXRpLXJ1YnJpYy1ibG9jaycpO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1ydWJyaWMtYmxvY2snOiBRdGlSdWJyaWNCbG9jaztcbiAgfVxufVxuIiwgImltcG9ydCB7IFByb3BlcnR5VmFsdWVNYXAsIGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgUXRpRmVlZGJhY2sgfSBmcm9tICcuLi9xdGktZmVlZGJhY2snO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWZlZWRiYWNrLWJsb2NrJylcbmV4cG9ydCBjbGFzcyBRdGlGZWVkYmFja0Jsb2NrIGV4dGVuZHMgUXRpRmVlZGJhY2sge1xuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gY3NzYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgICAub24ge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICAgIC5vZmYge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIGA7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYCA8c2xvdCBwYXJ0PVwiZmVlZGJhY2tcIiBjbGFzcz1cImZlZWRiYWNrICR7dGhpcy5zaG93U3RhdHVzfVwiPjwvc2xvdD4gYDtcbiAgfVxuXG4gIHByb3RlY3RlZCBmaXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlTWFwPGFueT4gfCBNYXA8UHJvcGVydHlLZXksIHVua25vd24+KTogdm9pZCB7XG4gICAgdGhpcy5jaGVja1Nob3dGZWVkYmFjayh0aGlzLm91dGNvbWVJZGVudGlmaWVyKTtcbiAgfVxufVxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWZlZWRiYWNrLWJsb2NrJzogUXRpRmVlZGJhY2tCbG9jaztcbiAgfVxufVxuIiwgImltcG9ydCB7IExpdEVsZW1lbnQsIFByb3BlcnR5VmFsdWVNYXAgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBRdGlBc3Nlc3NtZW50SXRlbSB9IGZyb20gJy4uL3F0aS1hc3Nlc3NtZW50LWl0ZW0vcXRpLWFzc2Vzc21lbnQtaXRlbSc7XG5pbXBvcnQgeyBJc051bGxPclVuZGVmaW5lZCB9IGZyb20gJy4uL2ludGVybmFsL3V0aWxzJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFF0aUZlZWRiYWNrIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnc2hvdy1oaWRlJyB9KVxuICBwcm90ZWN0ZWQgc2hvd0hpZGU6IHN0cmluZztcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ291dGNvbWUtaWRlbnRpZmllcicgfSlcbiAgcHVibGljIG91dGNvbWVJZGVudGlmaWVyOiBzdHJpbmc7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pXG4gIHByb3RlY3RlZCBpZGVudGlmaWVyOiBzdHJpbmc7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6IGZhbHNlIH0pXG4gIHB1YmxpYyBzaG93U3RhdHVzOiBzdHJpbmc7XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50PFF0aUZlZWRiYWNrPigncXRpLXJlZ2lzdGVyLWZlZWRiYWNrJywge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgICAgZGV0YWlsOiB0aGlzXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgY2hlY2tTaG93RmVlZGJhY2sob3V0Y29tZUlkZW50aWZpZXI6IHN0cmluZykgeyAgICBcbiAgICBjb25zdCBvdXRjb21lVmFyaWFibGUgPSAodGhpcy5jbG9zZXN0KCdxdGktYXNzZXNzbWVudC1pdGVtJykgYXMgUXRpQXNzZXNzbWVudEl0ZW0pLmdldE91dGNvbWUob3V0Y29tZUlkZW50aWZpZXIpO1xuXG4gICAgaWYgKHRoaXMub3V0Y29tZUlkZW50aWZpZXIgIT09IG91dGNvbWVJZGVudGlmaWVyIHx8ICFvdXRjb21lVmFyaWFibGUpIHJldHVybjtcbiAgICBsZXQgaXNGb3VuZCA9IGZhbHNlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KG91dGNvbWVWYXJpYWJsZS52YWx1ZSkpIHtcbiAgICAgIGlzRm91bmQgPSBvdXRjb21lVmFyaWFibGUudmFsdWUuaW5jbHVkZXModGhpcy5pZGVudGlmaWVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXNGb3VuZCA9XG4gICAgICAgICghSXNOdWxsT3JVbmRlZmluZWQodGhpcy5pZGVudGlmaWVyKSAmJlxuICAgICAgICAgICFJc051bGxPclVuZGVmaW5lZChvdXRjb21lVmFyaWFibGU/LnZhbHVlKSAmJlxuICAgICAgICAgIHRoaXMuaWRlbnRpZmllciA9PT0gb3V0Y29tZVZhcmlhYmxlLnZhbHVlKSB8fFxuICAgICAgICBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLnNob3dGZWVkYmFjayhpc0ZvdW5kKTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd0ZlZWRiYWNrKHZhbHVlOiBib29sZWFuKSB7ICAgIFxuICAgIHRoaXMuc2hvd1N0YXR1cyA9ICh2YWx1ZSAmJiB0aGlzLnNob3dIaWRlID09PSAnc2hvdycpIHx8ICghdmFsdWUgJiYgdGhpcy5zaG93SGlkZSA9PT0gJ2hpZGUnKSA/ICdvbicgOiAnb2ZmJzsgICAgXG4gIH1cbn1cbiIsICJleHBvcnQgY29uc3QgZGVjaW1hbFNlcGFyYXRvciA9ICgpID0+IHtcbiAgcmV0dXJuIG5ldyBJbnRsLk51bWJlckZvcm1hdCgpLmZvcm1hdCgwLjEpLnJlcGxhY2UoL1xcZC9nLCAnJyk7XG59O1xuXG5leHBvcnQgY29uc3QgY29udmVydE51bWJlclRvVW5pdmVyYWxGb3JtYXQgPSAobnVtYmVyOiBudW1iZXIgfCBzdHJpbmcpID0+IHtcbiAgLy8gY2hlY2sgaWYgdHlwZSBpcyBzdHJpbmdcbiAgaWYgKHR5cGVvZiBudW1iZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG51bWJlcjtcbiAgfVxuICBjb25zdCBkU2VwID0gZGVjaW1hbFNlcGFyYXRvcigpO1xuICBpZiAoZFNlcCA9PT0gJy4nKSB7XG4gICAgcmV0dXJuIG51bWJlci50b0xvY2FsZVN0cmluZygpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBudW1iZXIudG9TdHJpbmcoKS5yZXBsYWNlKCcuJywgJycpLnJlcGxhY2UoZFNlcCwgJy4nKTtcbiAgfVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIElzTnVsbE9yVW5kZWZpbmVkKHZhbHVlOiB1bmtub3duKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRG91YmxlU2xhc2hlcyhzdHI6IHN0cmluZykge1xuICBjb25zdCBzaW5nbGVGb3J3YXJkU2xhc2hlcyA9IHN0clxuICAgIC5yZXBsYWNlKC8oW146XVxcLylcXC8rL2csICckMScpXG4gICAgLnJlcGxhY2UoL1xcL1xcLy9nLCAnLycpXG4gICAgLnJlcGxhY2UoJ2h0dHA6LycsICdodHRwOi8vJylcbiAgICAucmVwbGFjZSgnaHR0cHM6LycsICdodHRwczovLycpO1xuICByZXR1cm4gc2luZ2xlRm9yd2FyZFNsYXNoZXM7XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBRdGlGZWVkYmFjayB9IGZyb20gJy4uL3F0aS1mZWVkYmFjayc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktZmVlZGJhY2staW5saW5lJylcbmV4cG9ydCBjbGFzcyBRdGlGZWVkYmFja0lubGluZSBleHRlbmRzIFF0aUZlZWRiYWNrIHtcbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IGNzc2BcbiAgICAub24ge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIH1cbiAgICAub2ZmIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICBgO1xuXG4gIG92ZXJyaWRlIHJlbmRlciA9ICgpID0+IGh0bWxgIDxzbG90IHBhcnQ9XCJmZWVkYmFja1wiIGNsYXNzPVwiJHt0aGlzLnNob3dTdGF0dXN9XCI+PC9zbG90PiBgO1xufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktZmVlZGJhY2staW5saW5lJzogUXRpRmVlZGJhY2tJbmxpbmU7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IFF0aUZlZWRiYWNrIH0gZnJvbSAnLi4vcXRpLWZlZWRiYWNrJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1tb2RhbC1mZWVkYmFjaycpXG5leHBvcnQgY2xhc3MgUXRpTW9kYWxGZWVkYmFjayBleHRlbmRzIFF0aUZlZWRiYWNrIHtcbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IGNzc2BcbiAgICAub24ge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIH1cbiAgICAub2ZmIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICBgO1xuXG4gIG92ZXJyaWRlIHJlbmRlciA9ICgpID0+IGh0bWxgIDxzbG90IHBhcnQ9XCJmZWVkYmFja1wiIGNsYXNzPVwiJHt0aGlzLnNob3dTdGF0dXN9XCI+PC9zbG90PiBgO1xufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktbW9kYWwtZmVlZGJhY2snOiBRdGlNb2RhbEZlZWRiYWNrO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGlmRGVmaW5lZCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL2lmLWRlZmluZWQuanMnO1xuaW1wb3J0IHsgSW50ZXJhY3Rpb24gfSBmcm9tICcuLi9pbnRlcm5hbC9pbnRlcmFjdGlvbi9pbnRlcmFjdGlvbic7XG5pbXBvcnQgeyByZWYsIGNyZWF0ZVJlZiB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3JlZi5qcyc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSwgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyB3YXRjaCB9IGZyb20gJy4uLy4uLy4uL2RlY29yYXRvcnMvd2F0Y2gnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWV4dGVuZGVkLXRleHQtaW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aUV4dGVuZGVkVGV4dEludGVyYWN0aW9uIGV4dGVuZHMgSW50ZXJhY3Rpb24ge1xuICAvLyBwdWJsaWMgc3RhdGljIHJvd0hlaWdodENsYXNzID0gW107XG5cbiAgdGV4dGFyZWFSZWYgPSBjcmVhdGVSZWY8SFRNTFRleHRBcmVhRWxlbWVudD4oKTtcblxuICAvKiogZXhwZWN0ZWQgbGVuZ3RoIGlzIG1hcHBlZCB0byB0aGUgcHJvcGVydHkgbWF4bGVuZ3RoIG9uIHRoZSB0ZXh0YXJlYSAqL1xuICBAcHJvcGVydHkoeyB0eXBlOiBOdW1iZXIsIGF0dHJpYnV0ZTogJ2V4cGVjdGVkLWxlbmd0aCcgfSkgZXhwZWN0ZWRMZW5ndGg6IG51bWJlcjtcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ3BhdHRlcm4tbWFzaycgfSkgcGF0dGVybk1hc2s6IHN0cmluZztcblxuICAvKiogdGV4dCBhcHBlYXJpbmcgaW4gdGhlIGV4dGVuZGVkLXRleHQtbnRlcmFjdGlvbiBpZiBpdCBpcyBlbXB0eSAqL1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ3BsYWNlaG9sZGVyLXRleHQnIH0pIHBsYWNlaG9sZGVyVGV4dDogc3RyaW5nO1xuXG4gIEBzdGF0ZSgpXG4gIHByaXZhdGUgX3ZhbHVlID0gJyc7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdjbGFzcycgfSkgY2xhc3NOYW1lcztcbiAgQHdhdGNoKCdjbGFzc05hbWVzJywgeyB3YWl0VW50aWxGaXJzdFVwZGF0ZTogdHJ1ZSB9KVxuICBoYW5kbGVjbGFzc05hbWVzQ2hhbmdlKG9sZCwgZGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBjbGFzc05hbWVzID0gdGhpcy5jbGFzc05hbWVzLnNwbGl0KCcgJyk7XG4gICAgY2xhc3NOYW1lcy5mb3JFYWNoKChjbGFzc05hbWU6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKGNsYXNzTmFtZS5zdGFydHNXaXRoKCdxdGktaGVpZ2h0LWxpbmVzJykpIHtcbiAgICAgICAgY29uc3QgbnJSb3dzID0gY2xhc3NOYW1lLnJlcGxhY2UoJ3F0aS1oZWlnaHQtbGluZXMtJywgJycpO1xuICAgICAgICBpZiAodGhpcy50ZXh0YXJlYVJlZikge1xuICAgICAgICAgIHRoaXMudGV4dGFyZWFSZWYudmFsdWUucm93cyA9IHBhcnNlSW50KG5yUm93cyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgcmVzcG9uc2UodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDogJyc7XG4gIH1cblxuICBwdWJsaWMgdmFsaWRhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlICE9PSAnJztcbiAgfVxuXG4gIHN0YXRpYyBvdmVycmlkZSBnZXQgc3R5bGVzKCkge1xuICAgIHJldHVybiBbXG4gICAgICBjc3NgXG4gICAgICAgIC8qIFBLOiBkaXNwbGF5IGhvc3QgYXMgYmxvY2ssIGVsc2UgZGVzaWduIHdpbGwgYmUgY29sbGFwc2VkICovXG4gICAgICAgIDpob3N0IHtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgfVxuICAgICAgICB0ZXh0YXJlYSB7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICB9XG4gICAgICBgXG4gICAgXTtcbiAgfVxuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdCBuYW1lPVwicHJvbXB0XCI+PC9zbG90XG4gICAgICA+PHRleHRhcmVhXG4gICAgICAgIHBhcnQ9XCJ0ZXh0YXJlYVwiXG4gICAgICAgICR7cmVmKHRoaXMudGV4dGFyZWFSZWYpfVxuICAgICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIlxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICBAa2V5ZG93bj1cIiR7ZXZlbnQgPT4gZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9XCJcbiAgICAgICAgQGtleXVwPVwiJHt0aGlzLnRleHRDaGFuZ2VkfVwiXG4gICAgICAgIEBjaGFuZ2U9XCIke3RoaXMudGV4dENoYW5nZWR9XCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCIke2lmRGVmaW5lZCh0aGlzLnBsYWNlaG9sZGVyVGV4dCA/IHRoaXMucGxhY2Vob2xkZXJUZXh0IDogdW5kZWZpbmVkKX1cIlxuICAgICAgICBtYXhsZW5ndGg9XCIke2lmRGVmaW5lZCh0aGlzLmV4cGVjdGVkTGVuZ3RoID8gdGhpcy5leHBlY3RlZExlbmd0aCA6IHVuZGVmaW5lZCl9XCJcbiAgICAgICAgcGF0dGVybj1cIiR7aWZEZWZpbmVkKHRoaXMucGF0dGVybk1hc2sgPyB0aGlzLnBhdHRlcm5NYXNrIDogdW5kZWZpbmVkKX1cIlxuICAgICAgICA/ZGlzYWJsZWQ9XCIke3RoaXMuZGlzYWJsZWR9XCJcbiAgICAgICAgP3JlYWRvbmx5PVwiJHt0aGlzLnJlYWRvbmx5fVwiXG4gICAgICAgIC52YWx1ZT0ke3RoaXMuX3ZhbHVlfVxuICAgICAgPjwvdGV4dGFyZWE+YDtcbiAgfVxuXG4gIHByb3RlY3RlZCB0ZXh0Q2hhbmdlZChldmVudDogRXZlbnQpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSByZXR1cm47XG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICB0aGlzLnNldEVtcHR5QXR0cmlidXRlKGlucHV0LnZhbHVlKTtcbiAgICBpZiAodGhpcy5fdmFsdWUgIT09IGlucHV0LnZhbHVlKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IGlucHV0LnZhbHVlO1xuICAgICAgdGhpcy5zYXZlUmVzcG9uc2UoaW5wdXQudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuX3ZhbHVlID0gJyc7XG4gIH1cblxuICBwcml2YXRlIHNldEVtcHR5QXR0cmlidXRlKHRleHQ6IHN0cmluZykge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKCdlbXB0eScsIHRleHQgPT09ICcnID8gJ3RydWUnIDogJ2ZhbHNlJyk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWV4dGVuZGVkLXRleHQtaW50ZXJhY3Rpb24nOiBRdGlFeHRlbmRlZFRleHRJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBJbnRlcmFjdGlvbiBleHRlbmRzIExpdEVsZW1lbnQge1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdyZXNwb25zZS1pZGVudGlmaWVyJyB9KSByZXNwb25zZUlkZW50aWZpZXI6IHN0cmluZyA9ICcnO1xuXG4gIC8qKiBkaXNhYmxlZCBzaG91bGQgYmUgZXhwb3NlZCB0byB0aGUgYXR0cmlidXRlcyBhbmQgYWNjZXNzaWJsZSBhcyBwcm9wZXJ0eSAqL1xuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlLCB0eXBlOiBCb29sZWFuIH0pIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgLyoqIHJlYWRvbmx5IHNob3VsZCBiZSBleHBvc2VkIHRvIHRoZSBhdHRyaWJ1dGVzIGFuZCBhY2Nlc3NpYmxlIGFzIHByb3BlcnR5ICovXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUsIHR5cGU6IEJvb2xlYW4gfSkgcmVhZG9ubHkgPSBmYWxzZTtcblxuICBhYnN0cmFjdCB2YWxpZGF0ZSgpOiBib29sZWFuO1xuICBhYnN0cmFjdCBzZXQgcmVzcG9uc2UodmFsOiBSZWFkb25seTxzdHJpbmcgfCBzdHJpbmdbXT4pO1xuICBzZXQgY29ycmVjdFJlc3BvbnNlKHZhbDogUmVhZG9ubHk8c3RyaW5nIHwgc3RyaW5nW10+KSB7XG4gICAgY29uc29sZS53YXJuKCdjb3JyZWN0UmVzcG9uc2UgaXMgbm90IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBDdXN0b21FdmVudCgncXRpLXJlZ2lzdGVyLWludGVyYWN0aW9uJywge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWVcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBzYXZlUmVzcG9uc2UodmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdxdGktaW50ZXJhY3Rpb24tcmVzcG9uc2UnLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgcmVzcG9uc2VJZGVudGlmaWVyOiB0aGlzLnJlc3BvbnNlSWRlbnRpZmllcixcbiAgICAgICAgICByZXNwb25zZTogQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBbLi4udmFsdWVdIDogdmFsdWVcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IGlmRGVmaW5lZCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL2lmLWRlZmluZWQuanMnO1xuaW1wb3J0IHsgY3JlYXRlUmVmIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvcmVmLmpzJztcbmltcG9ydCB7IHdhdGNoIH0gZnJvbSAnLi4vLi4vLi4vZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvbiB9IGZyb20gJy4uL2ludGVybmFsL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS10ZXh0LWVudHJ5LWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlUZXh0RW50cnlJbnRlcmFjdGlvbiBleHRlbmRzIEludGVyYWN0aW9uIHtcbiAgQHByb3BlcnR5KHsgdHlwZTogTnVtYmVyLCBhdHRyaWJ1dGU6ICdleHBlY3RlZC1sZW5ndGgnIH0pIGV4cGVjdGVkTGVuZ3RoOiBudW1iZXI7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdwYXR0ZXJuLW1hc2snIH0pIHBhdHRlcm5NYXNrOiBzdHJpbmc7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdwbGFjZWhvbGRlci10ZXh0JyB9KSBwbGFjZWhvbGRlclRleHQ6IHN0cmluZztcblxuICBAc3RhdGUoKVxuICBwcml2YXRlIF92YWx1ZSA9ICcnO1xuXG4gIEBzdGF0ZSgpXG4gIHByaXZhdGUgX2NvcnJlY3RWYWx1ZSA9ICcnO1xuXG4gIEBzdGF0ZSgpXG4gIHByaXZhdGUgX3NpemUgPSA1O1xuXG4gIGlucHV0UmVmID0gY3JlYXRlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KCk7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdjbGFzcycgfSkgY2xhc3NOYW1lcztcbiAgQHdhdGNoKCdjbGFzc05hbWVzJylcbiAgaGFuZGxlY2xhc3NOYW1lc0NoYW5nZShvbGQsIGNsYXNzZXM6IHN0cmluZykge1xuICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBjbGFzc2VzLnNwbGl0KCcgJyk7XG4gICAgY2xhc3NOYW1lcy5mb3JFYWNoKChjbGFzc05hbWU6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKGNsYXNzTmFtZS5zdGFydHNXaXRoKCdxdGktaW5wdXQtd2lkdGgnKSkge1xuICAgICAgICBjb25zdCBuclJvd3MgPSBjbGFzc05hbWUucmVwbGFjZSgncXRpLWlucHV0LXdpZHRoLScsICcnKTtcbiAgICAgICAgdGhpcy5fc2l6ZSA9IHBhcnNlSW50KG5yUm93cyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2V0IHJlc3BvbnNlKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6ICcnO1xuICB9XG5cbiAgcHVibGljIHZhbGlkYXRlKCkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZSAhPT0gJyc7XG4gIH1cblxuICBzdGF0aWMgb3ZlcnJpZGUgZ2V0IHN0eWxlcygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgY3NzYFxuICAgICAgICBbcGFydD0nY29ycmVjdCddIHtcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cbiAgICAgIGBcbiAgICBdO1xuICB9XG5cbiAgc2V0IGNvcnJlY3RSZXNwb25zZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fY29ycmVjdFZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgICAgICAgXG4gICAgICA8aW5wdXRcbiAgICAgICAgcGFydD1cImlucHV0XCJcbiAgICAgICAgc3BlbGxjaGVjaz1cImZhbHNlXCJcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgQGtleWRvd249XCIke2V2ZW50ID0+IGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfVwiXG4gICAgICAgIEBrZXl1cD1cIiR7dGhpcy50ZXh0Q2hhbmdlZH1cIlxuICAgICAgICBAY2hhbmdlPVwiJHt0aGlzLnRleHRDaGFuZ2VkfVwiXG4gICAgICAgIHR5cGU9XCIke3RoaXMucGF0dGVybk1hc2sgPT0gJ1swLTldKicgPyAnbnVtYmVyJyA6ICd0ZXh0J31cIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIiR7aWZEZWZpbmVkKHRoaXMucGxhY2Vob2xkZXJUZXh0ID8gdGhpcy5wbGFjZWhvbGRlclRleHQgOiB1bmRlZmluZWQpfVwiXG4gICAgICAgIC52YWx1ZT1cIiR7dGhpcy5fdmFsdWV9XCJcbiAgICAgICAgc2l6ZT1cIiR7dGhpcy5fc2l6ZX1cIlxuICAgICAgICBwYXR0ZXJuPVwiJHtpZkRlZmluZWQodGhpcy5wYXR0ZXJuTWFzayA/IHRoaXMucGF0dGVybk1hc2sgOiB1bmRlZmluZWQpfVwiXG4gICAgICAgID9kaXNhYmxlZD1cIiR7dGhpcy5kaXNhYmxlZH1cIlxuICAgICAgICA/cmVhZG9ubHk9XCIke3RoaXMucmVhZG9ubHl9XCJcbiAgICAgIC8+XG4gICAgICA8ZGl2IHBhcnQ9XCJjb3JyZWN0XCI+JHt0aGlzLl9jb3JyZWN0VmFsdWV9PC9kaXY+XG4gICAgYDtcbiAgfVxuICAvL1xuICAvLyBtYXhsZW5ndGg9XCIke2lmRGVmaW5lZCh0aGlzLmV4cGVjdGVkTGVuZ3RoID8gdGhpcy5leHBlY3RlZExlbmd0aCA6IHVuZGVmaW5lZCl9XCJcblxuICBwcm90ZWN0ZWQgdGV4dENoYW5nZWQoZXZlbnQ6IEV2ZW50KSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkgcmV0dXJuO1xuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgdGhpcy5zZXRFbXB0eUF0dHJpYnV0ZShpbnB1dC52YWx1ZSk7XG4gICAgaWYgKHRoaXMuX3ZhbHVlICE9PSBpbnB1dC52YWx1ZSkge1xuICAgICAgdGhpcy5fdmFsdWUgPSBpbnB1dC52YWx1ZTtcbiAgICAgIHRoaXMuc2F2ZVJlc3BvbnNlKGlucHV0LnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLl92YWx1ZSA9ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRFbXB0eUF0dHJpYnV0ZSh0ZXh0OiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgnZW1wdHknLCB0ZXh0ID09PSAnJyA/ICd0cnVlJyA6ICdmYWxzZScpO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS10ZXh0LWVudHJ5LWludGVyYWN0aW9uJzogUXRpVGV4dEVudHJ5SW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICIvLyBAd2F0Y2ggZGVjb3JhdG9yXG4vL1xuLy8gUnVucyB3aGVuIGFuIG9ic2VydmVkIHByb3BlcnR5IGNoYW5nZXMsIGUuZy4gQHByb3BlcnR5IG9yIEBzdGF0ZSwgYnV0IGJlZm9yZSB0aGUgY29tcG9uZW50IHVwZGF0ZXMuXG4vL1xuLy8gVG8gd2FpdCBmb3IgYW4gdXBkYXRlIHRvIGNvbXBsZXRlIGFmdGVyIGEgY2hhbmdlIG9jY3VycywgdXNlIGBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlYCBpbiB0aGUgaGFuZGxlci4gVG8gc3RhcnRcbi8vIHdhdGNoaW5nIGFmdGVyIHRoZSBpbml0aWFsIHVwZGF0ZS9yZW5kZXIsIHVzZSBgeyB3YWl0VW50aWxGaXJzdFVwZGF0ZTogdHJ1ZSB9YCBvciBgdGhpcy5oYXNVcGRhdGVkYCBpbiB0aGUgaGFuZGxlci5cbi8vXG4vLyBVc2FnZTpcbi8vXG4vLyAgQHdhdGNoKCdwcm9wTmFtZScpXG4vLyAgaGFuZGxlUHJvcENoYW5nZShvbGRWYWx1ZSwgbmV3VmFsdWUpIHtcbi8vICAgIC4uLlxuLy8gIH1cblxuaW1wb3J0IHR5cGUgeyBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcblxudHlwZSBVcGRhdGVIYW5kbGVyID0gKHByZXY/OiB1bmtub3duLCBuZXh0PzogdW5rbm93bikgPT4gdm9pZDtcblxudHlwZSBOb25VbmRlZmluZWQ8QT4gPSBBIGV4dGVuZHMgdW5kZWZpbmVkID8gbmV2ZXIgOiBBO1xuXG50eXBlIFVwZGF0ZUhhbmRsZXJGdW5jdGlvbktleXM8VCBleHRlbmRzIG9iamVjdD4gPSB7XG4gIFtLIGluIGtleW9mIFRdLT86IE5vblVuZGVmaW5lZDxUW0tdPiBleHRlbmRzIFVwZGF0ZUhhbmRsZXIgPyBLIDogbmV2ZXI7XG59W2tleW9mIFRdO1xuXG5pbnRlcmZhY2UgTGl2ZVF1ZXJ5T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBJZiB0cnVlLCB3aWxsIG9ubHkgc3RhcnQgd2F0Y2hpbmcgYWZ0ZXIgdGhlIGluaXRpYWwgdXBkYXRlL3JlbmRlclxuICAgKi9cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpdmVRdWVyeShxdWVyeVNlbGVjdG9yOiBzdHJpbmcsIG9wdGlvbnM/OiBMaXZlUXVlcnlPcHRpb25zKSB7XG4gIGxldCBvYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlcjtcbiAgY29uc3QgcmVzb2x2ZWRPcHRpb25zOiBSZXF1aXJlZDxMaXZlUXVlcnlPcHRpb25zPiA9IHtcbiAgICAuLi5vcHRpb25zXG4gIH07XG4gIHJldHVybiA8RWxlbUNsYXNzIGV4dGVuZHMgTGl0RWxlbWVudD4oXG4gICAgcHJvdG86IEVsZW1DbGFzcyxcbiAgICBkZWNvcmF0ZWRGbk5hbWU6IFVwZGF0ZUhhbmRsZXJGdW5jdGlvbktleXM8RWxlbUNsYXNzPlxuICApOiB2b2lkID0+IHtcbiAgICBjb25zdCB7IGNvbm5lY3RlZENhbGxiYWNrLCBkaXNjb25uZWN0ZWRDYWxsYmFjayB9ID0gcHJvdG87XG5cbiAgICBwcm90by5jb25uZWN0ZWRDYWxsYmFjayA9IGZ1bmN0aW9uICh0aGlzOiBFbGVtQ2xhc3MpIHtcbiAgICAgIGNvbm5lY3RlZENhbGxiYWNrLmNhbGwodGhpcyk7XG4gICAgICBjb25zdCBjYWxsYmFjayA9IChtdXRhdGlvbkxpc3Q6IE11dGF0aW9uUmVjb3JkW10pID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudHNUb1dhdGNoID0gQXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwocXVlcnlTZWxlY3RvcikpO1xuICAgICAgICBmb3IgKGNvbnN0IG11dGF0aW9uIG9mIG11dGF0aW9uTGlzdCkge1xuICAgICAgICAgIGNvbnN0IGFkZGVkTm9kZXMgPSBBcnJheS5mcm9tKG11dGF0aW9uLmFkZGVkTm9kZXMpLm1hcChlID0+IGUgYXMgRWxlbWVudCk7XG4gICAgICAgICAgY29uc3QgcmVtb3ZlZE5vZGVzID0gQXJyYXkuZnJvbShtdXRhdGlvbi5hZGRlZE5vZGVzKS5tYXAoZSA9PiBlIGFzIEVsZW1lbnQpO1xuICAgICAgICAgIGlmIChtdXRhdGlvbi50eXBlID09PSAnY2hpbGRMaXN0JyAmJiBhZGRlZE5vZGVzLmZpbmQobiA9PiBlbGVtZW50c1RvV2F0Y2guaW5jbHVkZXMobikpKSB7XG4gICAgICAgICAgICAodGhpc1tkZWNvcmF0ZWRGbk5hbWVdIGFzIHVua25vd24gYXMgVXBkYXRlSGFuZGxlcikoYWRkZWROb2RlcywgcmVtb3ZlZE5vZGVzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGNhbGxiYWNrKTtcbiAgICAgIG9ic2VydmVyLm9ic2VydmUodGhpcywgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7XG5cbiAgICAgIGNvbnN0IGVsZW1lbnRzQWRkZWQgPSB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwocXVlcnlTZWxlY3RvcikgPz8gW107XG4gICAgICAodGhpc1tkZWNvcmF0ZWRGbk5hbWVdIGFzIHVua25vd24gYXMgVXBkYXRlSGFuZGxlcikoQXJyYXkuZnJvbShlbGVtZW50c0FkZGVkKSwgW10pO1xuICAgIH07XG5cbiAgICBwcm90by5kaXNjb25uZWN0ZWRDYWxsYmFjayA9IGZ1bmN0aW9uICh0aGlzOiBFbGVtQ2xhc3MpIHtcbiAgICAgIGRpc2Nvbm5lY3RlZENhbGxiYWNrLmNhbGwodGhpcyk7XG4gICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgfTtcbiAgfTtcbn1cbiIsICJpbXBvcnQgeyBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBDaG9pY2VzIH0gZnJvbSAnLi4vaW50ZXJuYWwvY2hvaWNlcy9jaG9pY2VzJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1ob3R0ZXh0LWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlIb3R0ZXh0SW50ZXJhY3Rpb24gZXh0ZW5kcyBDaG9pY2VzIHtcbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgncXRpLWhvdHRleHQtaW50ZXJhY3Rpb24nLCAnJyk7XG4gIH1cblxuICBvdmVycmlkZSByZW5kZXIgPSAoKSA9PiBodG1sYDxzbG90Pjwvc2xvdD5gO1xufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktaG90dGV4dC1pbnRlcmFjdGlvbic6IFF0aUhvdHRleHRJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IHdhdGNoIH0gZnJvbSAnLi4vLi4vLi4vLi4vZGVjb3JhdG9ycy93YXRjaCc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvbiB9IGZyb20gJy4uL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uJztcbmltcG9ydCB7IHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IFF0aUNob2ljZSB9IGZyb20gJy4uL2Nob2ljZS9xdGktY2hvaWNlJztcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDaG9pY2VzIGV4dGVuZHMgSW50ZXJhY3Rpb24ge1xuICBwcm90ZWN0ZWQgX2Nob2ljZUVsZW1lbnRzOiBRdGlDaG9pY2VbXSA9IFtdO1xuXG4gIC8qKiB0aGUgbWluaW1hbCBudW1iZXIgb2Ygc2VsZWN0aW9ucyBhIGNhbmRpZGF0ZSBtdXN0IG1ha2UgKi9cbiAgQHByb3BlcnR5KHtcbiAgICB0eXBlOiBOdW1iZXIsXG4gICAgYXR0cmlidXRlOiAnbWluLWNob2ljZXMnXG4gIH0pXG4gIHB1YmxpYyBtaW5DaG9pY2VzOiBudW1iZXIgPSAwO1xuXG4gIC8qKiB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc2VsZWN0aW9ucyBhIGNhbmRpZGF0ZSBtdXN0IG1ha2UsIHRoZSBvdGhlciBvcHRpb25zIHdpbGwgYmUgZGlzYWJsZWQgd2hlbiBtYXggb3B0aW9ucyBpcyBjaGVja2VkICovXG4gIEBwcm9wZXJ0eSh7XG4gICAgdHlwZTogTnVtYmVyLFxuICAgIGF0dHJpYnV0ZTogJ21heC1jaG9pY2VzJ1xuICB9KVxuICBwdWJsaWMgbWF4Q2hvaWNlczogbnVtYmVyID0gMTtcblxuICBAd2F0Y2goJ2Rpc2FibGVkJywgeyB3YWl0VW50aWxGaXJzdFVwZGF0ZTogdHJ1ZSB9KVxuICBfaGFuZGxlRGlzYWJsZWRDaGFuZ2UgPSAoXzogYm9vbGVhbiwgZGlzYWJsZWQ6IGJvb2xlYW4pID0+XG4gICAgdGhpcy5fY2hvaWNlRWxlbWVudHMuZm9yRWFjaChjaCA9PiAoY2guZGlzYWJsZWQgPSBkaXNhYmxlZCkpO1xuXG4gIEB3YXRjaCgncmVhZG9ubHknLCB7IHdhaXRVbnRpbEZpcnN0VXBkYXRlOiB0cnVlIH0pXG4gIF9oYW5kbGVSZWFkb25seUNoYW5nZSA9IChfOiBib29sZWFuLCByZWFkb25seTogYm9vbGVhbikgPT5cbiAgICB0aGlzLl9jaG9pY2VFbGVtZW50cy5mb3JFYWNoKGNoID0+IChjaC5yZWFkb25seSA9IHJlYWRvbmx5KSk7XG5cbiAgQHdhdGNoKCdtYXhDaG9pY2VzJywgeyB3YWl0VW50aWxGaXJzdFVwZGF0ZTogdHJ1ZSB9KVxuICBfaGFuZGxlTWF4Q2hvaWNlc0NoYW5nZSA9ICgpID0+IHRoaXMuX2RldGVybWluZUlucHV0VHlwZSgpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdxdGktcmVnaXN0ZXItY2hvaWNlJywgdGhpcy5fcmVnaXN0ZXJDaG9pY2VFbGVtZW50KTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1sb29zZS1jaG9pY2UnLCB0aGlzLl9sb29zZUNob2ljZUVsZW1lbnQpO1xuICB9XG5cbiAgdmFsaWRhdGUoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbnJTZWxlY3RlZCA9IHRoaXMuX2Nob2ljZUVsZW1lbnRzLnJlZHVjZSgoYWNjLCB2YWwpID0+IHtcbiAgICAgIHJldHVybiBhY2MgKyAodmFsLmNoZWNrZWQgPyAxIDogMCk7XG4gICAgfSwgMCk7XG4gICAgcmV0dXJuIG5yU2VsZWN0ZWQgPj0gdGhpcy5taW5DaG9pY2VzO1xuICB9XG5cbiAgc2V0IHJlc3BvbnNlKHJlc3BvbnNlVmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG4gICAgY29uc3QgcmVzcG9uc2VWYWx1ZUFycmF5ID0gQXJyYXkuaXNBcnJheShyZXNwb25zZVZhbHVlKSA/IHJlc3BvbnNlVmFsdWUgOiBbcmVzcG9uc2VWYWx1ZV07XG4gICAgdGhpcy5fY2hvaWNlRWxlbWVudHMuZm9yRWFjaChjZSA9PiB7XG4gICAgICBjZS5jaGVja2VkID0gcmVzcG9uc2VWYWx1ZUFycmF5LmZpbmQocnYgPT4gcnYgPT09IGNlLmlkZW50aWZpZXIpID8gdHJ1ZSA6IGZhbHNlO1xuICAgIH0pO1xuICB9XG5cbiAgc2V0IGNvcnJlY3RSZXNwb25zZShyZXNwb25zZVZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSkge1xuICAgIGNvbnN0IHJlc3BvbnNlVmFsdWVBcnJheSA9IEFycmF5LmlzQXJyYXkocmVzcG9uc2VWYWx1ZSkgPyByZXNwb25zZVZhbHVlIDogW3Jlc3BvbnNlVmFsdWVdO1xuICAgIGlmIChyZXNwb25zZVZhbHVlID09ICcnKSB7XG4gICAgICB0aGlzLl9jaG9pY2VFbGVtZW50cy5mb3JFYWNoKGNlID0+IHtcbiAgICAgICAgY2UucmVtb3ZlQXR0cmlidXRlKCdkYXRhLWNvcnJlY3QtcmVzcG9uc2UnKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9jaG9pY2VFbGVtZW50cy5mb3JFYWNoKGNlID0+IHtcbiAgICAgIGNlLnNldEF0dHJpYnV0ZSgnZGF0YS1jb3JyZWN0LXJlc3BvbnNlJywgcmVzcG9uc2VWYWx1ZUFycmF5LmZpbmQocnYgPT4gcnYgPT09IGNlLmlkZW50aWZpZXIpID8gJ3RydWUnIDogJ2ZhbHNlJyk7XG4gICAgfSk7XG4gIH1cblxuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigncXRpLWNob2ljZS1lbGVtZW50LXNlbGVjdGVkJywgdGhpcy5fY2hvaWNlRWxlbWVudFNlbGVjdGVkSGFuZGxlcik7XG4gIH1cblxuICBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigncXRpLWNob2ljZS1lbGVtZW50LXNlbGVjdGVkJywgdGhpcy5fY2hvaWNlRWxlbWVudFNlbGVjdGVkSGFuZGxlcik7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdxdGktcmVnaXN0ZXItY2hvaWNlJywgdGhpcy5fcmVnaXN0ZXJDaG9pY2VFbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlZ2lzdGVyQ2hvaWNlRWxlbWVudChlOiBDdXN0b21FdmVudCkge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3QgY2hvaWNlRWxlbWVudCA9IGUudGFyZ2V0IGFzIFF0aUNob2ljZTtcbiAgICB0aGlzLl9jaG9pY2VFbGVtZW50cy5wdXNoKGNob2ljZUVsZW1lbnQpO1xuICAgIHRoaXMuX3NldElucHV0VHlwZShjaG9pY2VFbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgX2xvb3NlQ2hvaWNlRWxlbWVudChlOiBDdXN0b21FdmVudCkge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3QgY2hvaWNlRWxlbWVudCA9IGUudGFyZ2V0IGFzIFF0aUNob2ljZTtcbiAgICB0aGlzLl9jaG9pY2VFbGVtZW50cy5wdXNoKGNob2ljZUVsZW1lbnQpO1xuICAgIHRoaXMuX2Nob2ljZUVsZW1lbnRzID0gdGhpcy5fY2hvaWNlRWxlbWVudHMuZmlsdGVyKGNoID0+IGNoICE9PSBjaG9pY2VFbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgX2RldGVybWluZUlucHV0VHlwZSgpIHtcbiAgICB0aGlzLl9jaG9pY2VFbGVtZW50cy5mb3JFYWNoKGNob2ljZUVsZW1lbnQgPT4ge1xuICAgICAgdGhpcy5fc2V0SW5wdXRUeXBlKGNob2ljZUVsZW1lbnQpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0SW5wdXRUeXBlKGNob2ljZUVsZW1lbnQ6IFF0aUNob2ljZSkge1xuICAgIGlmICh0aGlzLm1heENob2ljZXMgPT09IDEpIHtcbiAgICAgIC8vIGlmIHplcm8gdGhlbiB5b3UgY2FuIGNob29zZSBob3cgbXVjaCB5b3Ugd2FudFxuICAgICAgY2hvaWNlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAncmFkaW8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2hvaWNlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnY2hlY2tib3gnKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgX2Nob2ljZUVsZW1lbnRTZWxlY3RlZEhhbmRsZXIoZXZlbnQ6IEN1c3RvbUV2ZW50PHsgaWRlbnRpZmllcjogc3RyaW5nOyBjaGVja2VkOiBib29sZWFuIH0+KSB7XG4gICAgaWYgKHRoaXMubWF4Q2hvaWNlcyA9PT0gMSkge1xuICAgICAgdGhpcy5fY2hvaWNlRWxlbWVudHNcbiAgICAgICAgLmZpbHRlcihjZSA9PiBjZS5pZGVudGlmaWVyICE9PSBldmVudC5kZXRhaWwuaWRlbnRpZmllcilcbiAgICAgICAgLmZvckVhY2goY2UgPT4ge1xuICAgICAgICAgIGNlLmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuX2Nob2ljZUVsZW1lbnRTZWxlY3RlZCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9jaG9pY2VFbGVtZW50U2VsZWN0ZWQoKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRJZGVudGlmaWVycyA9IHRoaXMuX2Nob2ljZUVsZW1lbnRzLmZpbHRlcihjZSA9PiBjZS5jaGVja2VkKS5tYXAoY2UgPT4gY2UuaWRlbnRpZmllcik7XG5cbiAgICBpZiAodGhpcy5tYXhDaG9pY2VzID4gMSkge1xuICAgICAgaWYgKHRoaXMubWF4Q2hvaWNlcyA9PT0gc2VsZWN0ZWRJZGVudGlmaWVycy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5fY2hvaWNlRWxlbWVudHMuZm9yRWFjaChjZSA9PiAoY2UuZGlzYWJsZWQgPSAhY2UuY2hlY2tlZCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fY2hvaWNlRWxlbWVudHMuZm9yRWFjaChjZSA9PiAoY2UuZGlzYWJsZWQgPSBmYWxzZSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCByZXN1bHQ6IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIGlmICh0aGlzLm1heENob2ljZXMgPT09IDEpIHtcbiAgICAgIHJlc3VsdCA9IHNlbGVjdGVkSWRlbnRpZmllcnMubGVuZ3RoID4gMCA/IHNlbGVjdGVkSWRlbnRpZmllcnNbMF0gOiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IHNlbGVjdGVkSWRlbnRpZmllcnM7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFyZ3VtZW50XG4gICAgdGhpcy5zYXZlUmVzcG9uc2UocmVzdWx0KTtcbiAgfVxufVxuIiwgImltcG9ydCB7IGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSwgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyB1bnNhZmVIVE1MIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvdW5zYWZlLWh0bWwuanMnO1xuaW1wb3J0IHsgSW50ZXJhY3Rpb24gfSBmcm9tICcuLi9pbnRlcm5hbC9pbnRlcmFjdGlvbi9pbnRlcmFjdGlvbic7XG5cbmludGVyZmFjZSBPcHRpb25UeXBlIHtcbiAgdGV4dENvbnRlbnQ6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbiAgc2VsZWN0ZWQ6IGJvb2xlYW47XG59XG5cbkBjdXN0b21FbGVtZW50KCdxdGktaW5saW5lLWNob2ljZS1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpSW5saW5lQ2hvaWNlSW50ZXJhY3Rpb24gZXh0ZW5kcyBJbnRlcmFjdGlvbiB7XG4gIHB1YmxpYyBzdGF0aWMgaW5wdXRXaWR0aENsYXNzID0gW1xuICAgICcnLFxuICAgICdxdGktaW5wdXQtd2lkdGgtMicsXG4gICAgJ3F0aS1pbnB1dC13aWR0aC0xJyxcbiAgICAncXRpLWlucHV0LXdpZHRoLTMnLFxuICAgICdxdGktaW5wdXQtd2lkdGgtNCcsXG4gICAgJ3F0aS1pbnB1dC13aWR0aC02JyxcbiAgICAncXRpLWlucHV0LXdpZHRoLTEwJyxcbiAgICAncXRpLWlucHV0LXdpZHRoLTE1JyxcbiAgICAncXRpLWlucHV0LXdpZHRoLTIwJyxcbiAgICAncXRpLWlucHV0LXdpZHRoLTcyJ1xuICBdO1xuXG4gIEBzdGF0ZSgpIG9wdGlvbnM6IE9wdGlvblR5cGVbXSA9IFtdO1xuXG4gIEBzdGF0ZSgpIGNvcnJlY3RPcHRpb246IHN0cmluZyA9ICcnO1xuXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2RhdGEtcHJvbXB0JywgdHlwZTogU3RyaW5nIH0pXG4gIGRhdGFQcm9tcHQ6IHN0cmluZyA9ICdzZWxlY3QnO1xuXG4gIHN0YXRpYyBvdmVycmlkZSBnZXQgc3R5bGVzKCkge1xuICAgIHJldHVybiBbXG4gICAgICBjc3NgXG4gICAgICAgIDpob3N0IHtcbiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIH1cbiAgICAgIGBcbiAgICBdO1xuICB9XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPHNlbGVjdCBwYXJ0PVwic2VsZWN0XCIgQGNoYW5nZT1cIiR7dGhpcy5jaG9pY2VTZWxlY3RlZH1cIiA/ZGlzYWJsZWQ9XCIke3RoaXMuZGlzYWJsZWR9XCIgP3JlYWRvbmx5PVwiJHt0aGlzLnJlYWRvbmx5fVwiPlxuICAgICAgICAke3RoaXMub3B0aW9ucy5tYXAoXG4gICAgICAgICAgb3B0aW9uID0+IGh0bWxgXG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiJHtvcHRpb24udmFsdWV9XCIgP3NlbGVjdGVkPVwiJHtvcHRpb24uc2VsZWN0ZWR9XCI+JHt1bnNhZmVIVE1MKG9wdGlvbi50ZXh0Q29udGVudCl9PC9vcHRpb24+XG4gICAgICAgICAgYFxuICAgICAgICApfVxuICAgICAgPC9zZWxlY3Q+XG5cbiAgICAgICR7dW5zYWZlSFRNTCh0aGlzLmNvcnJlY3RPcHRpb24pfVxuICAgIGA7XG4gIH1cblxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignb24tZHJvcGRvd24tc2VsZWN0ZWQnLCB0aGlzLmNob2ljZVNlbGVjdGVkKTtcbiAgICBjb25zdCBjaG9pY2VzID0gQXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoJ3F0aS1pbmxpbmUtY2hvaWNlJykpO1xuICAgIHRoaXMub3B0aW9ucyA9IFtcbiAgICAgIHtcbiAgICAgICAgdGV4dENvbnRlbnQ6IHRoaXMuZGF0YVByb21wdCxcbiAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICBzZWxlY3RlZDogZmFsc2VcbiAgICAgIH0sXG4gICAgICAuLi5jaG9pY2VzLm1hcChjaG9pY2UgPT4gKHtcbiAgICAgICAgdGV4dENvbnRlbnQ6IGNob2ljZS5pbm5lckhUTUwsXG4gICAgICAgIHZhbHVlOiBjaG9pY2UuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJyksXG4gICAgICAgIHNlbGVjdGVkOiBmYWxzZVxuICAgICAgfSkpXG4gICAgXTtcbiAgfVxuXG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignb24tZHJvcGRvd24tc2VsZWN0ZWQnLCB0aGlzLmNob2ljZVNlbGVjdGVkKTtcbiAgfVxuXG4gIHB1YmxpYyB2YWxpZGF0ZSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBzZWxlY3RlZE9wdGlvbiA9IHRoaXMub3B0aW9ucy5maW5kKG9wdGlvbiA9PiBvcHRpb24uc2VsZWN0ZWQpO1xuICAgIHJldHVybiBzZWxlY3RlZE9wdGlvbiA/IHNlbGVjdGVkT3B0aW9uLnZhbHVlICE9PSAnJyA6IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHJlc2V0KCkge1xuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMub3B0aW9ucy5tYXAoKG9wdGlvbiwgaSkgPT4gKHsgLi4ub3B0aW9uLCBzZWxlY3RlZDogaSA9PT0gMCB9KSk7XG4gIH1cblxuICBwdWJsaWMgc2V0IHJlc3BvbnNlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLm9wdGlvbnMubWFwKG9wdGlvbiA9PiB7XG4gICAgICB2YWx1ZSA9PT0gb3B0aW9uLnZhbHVlICYmIChvcHRpb24uc2VsZWN0ZWQgPSB0cnVlKTtcbiAgICAgIHJldHVybiBvcHRpb247XG4gICAgfSk7XG4gIH1cblxuICBzZXQgY29ycmVjdFJlc3BvbnNlKHZhbHVlOiBSZWFkb25seTxzdHJpbmcgfCBzdHJpbmdbXT4pIHtcbiAgICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICB0aGlzLmNvcnJlY3RPcHRpb24gPSAnJztcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jb3JyZWN0T3B0aW9uID0gYDxzcGFuIHBhcnQ9XCJjb3JyZWN0LW9wdGlvblwiPiR7XG4gICAgICB0aGlzLm9wdGlvbnMuZmluZChvcHRpb24gPT4gdmFsdWUgPT09IG9wdGlvbi52YWx1ZSkudGV4dENvbnRlbnRcbiAgICB9PC9zcGFuPmA7XG4gIH1cblxuICBwdWJsaWMgY2hvaWNlU2VsZWN0ZWQoZXZlbnQ6IEV2ZW50KSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRPcHRpb25WYWx1ZSA9IChldmVudC50YXJnZXQgYXMgSFRNTFNlbGVjdEVsZW1lbnQpLnZhbHVlO1xuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMub3B0aW9ucy5tYXAob3B0aW9uID0+ICh7IC4uLm9wdGlvbiwgc2VsZWN0ZWQ6IG9wdGlvbi52YWx1ZSA9PT0gc2VsZWN0ZWRPcHRpb25WYWx1ZSB9KSk7XG4gICAgdGhpcy5zYXZlUmVzcG9uc2Uoc2VsZWN0ZWRPcHRpb25WYWx1ZSk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWlubGluZS1jaG9pY2UtaW50ZXJhY3Rpb24nOiBRdGlJbmxpbmVDaG9pY2VJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vcXRpLWNob2ljZS1pbnRlcmFjdGlvbi5zdHlsZXMnO1xuaW1wb3J0IHR5cGUgeyBDU1NSZXN1bHRHcm91cCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBDaG9pY2VzIH0gZnJvbSAnLi4vaW50ZXJuYWwvY2hvaWNlcy9jaG9pY2VzJztcblxuLyoqXG4gKiBAc3VtbWFyeSBUaGUgQ2hvaWNlSW50ZXJhY3Rpb24uVHlwZSAocXRpLWNob2ljZS1pbnRlcmFjdGlvbikgaW50ZXJhY3Rpb24gcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIGNob2ljZXMgdG8gdGhlIGNhbmRpZGF0ZS5cbiAqIEBkb2N1bWVudGF0aW9uIGh0dHBzOi8vd3d3Lmltc2dsb2JhbC5vcmcvc3BlYy9xdGkvdjNwMC9pbXBsI2guajludTFvYTF0dTNiXG4gKiBAc3RhdHVzIHN0YWJsZVxuICogQHNpbmNlIDYuMFxuICpcbiAqIEBldmVudCBxdGktcmVnaXN0ZXItaW50ZXJhY3Rpb24gLSBlbWl0dGVkIHdoZW4gdGhlIGludGVyYWN0aW9uIHdhbnRzIHRvIHJlZ2lzdGVyIGl0c2VsZlxuICogQGV2ZW50IHF0aS1pbnRlcmFjdGlvbi1yZXNwb25zZSAtIGVtaXR0ZWQgd2hlbiB0aGUgaW50ZXJhY3Rpb24gY2hhbmdlc1xuICpcbiAqIEBzbG90IC0gVGhlIGRlZmF1bHQgc2xvdCB3aGVyZSA8cXRpLXNpbXBsZS1jaG9pY2U+IG11c3QgYmUgcGxhY2VkLlxuICogQHNsb3QgcHJvbXB0IC0gc2xvdCB3aGVyZSB0aGUgcHJvbXB0IGlzIHBsYWNlZC5cbiAqL1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWNob2ljZS1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpQ2hvaWNlSW50ZXJhY3Rpb24gZXh0ZW5kcyBDaG9pY2VzIHtcbiAgc3RhdGljIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBzdHlsZXM7XG5cbiAgLyoqIG9yaWVudGF0aW9uIG9mIGNob2ljZXMgKi9cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pXG4gIHB1YmxpYyBvcmllbnRhdGlvbjogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJztcblxuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgIDxzbG90IG5hbWU9XCJwcm9tcHRcIj48L3Nsb3Q+PHNsb3QgcGFydD1cInNsb3RcIj48L3Nsb3Q+YDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktY2hvaWNlLWludGVyYWN0aW9uJzogUXRpQ2hvaWNlSW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjc3MgfSBmcm9tICdsaXQnO1xuLy8gaW1wb3J0IGNvbXBvbmVudFN0eWxlcyBmcm9tICcuLi8uLi91dGlsaXRpZXMvc3R5bGVzL2NvbXBvbmVudC5zdHlsZXMnO1xuXG4vKiAke2NvbXBvbmVudFN0eWxlc30gKi9cbmV4cG9ydCBkZWZhdWx0IGNzc2BcbiAgOmhvc3Qge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAvLyBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgfVxuYDtcbiIsICJpbXBvcnQgeyBjc3MsIGh0bWwsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IFF0aVJ1bGUsIFF0aVJ1bGVCYXNlIH0gZnJvbSAnLi4nO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLW91dGNvbWUtcHJvY2Vzc2luZycpXG5leHBvcnQgY2xhc3MgUXRpT3V0Y29tZVByb2Nlc3NpbmcgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgc3RhdGljIHN0eWxlcyA9IFtcbiAgICBjc3NgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgYFxuICBdO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdD48L3Nsb3Q+YDtcbiAgfVxuXG4gIHB1YmxpYyBwcm9jZXNzKCkge1xuICAgIGNvbnN0IGxvZ2ljID0gbmV3IFF0aU91dGNvbWVQcm9jZXNzaW5nUHJvY2Vzc29yKCk7XG4gICAgY29uc3QgcnVsZXMgPSBbLi4udGhpcy5jaGlsZHJlbl0gYXMgUXRpUnVsZVtdO1xuICAgIGxvZ2ljLnByb2Nlc3MocnVsZXMpO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1vdXRjb21lLXByb2Nlc3NpbmcnOiBRdGlPdXRjb21lUHJvY2Vzc2luZztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUXRpT3V0Y29tZVByb2Nlc3NpbmdQcm9jZXNzb3Ige1xuICBwdWJsaWMgcHJvY2VzcyhydWxlczogUXRpUnVsZUJhc2VbXSkge1xuICAgIGZvciAoY29uc3QgcnVsZSBvZiBydWxlcykge1xuICAgICAgcnVsZS5wcm9jZXNzKCk7XG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sLCBMaXRFbGVtZW50LCBQcm9wZXJ0eVZhbHVlTWFwIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB7IG1hcFJlc3BvbnNlLCBtYXBSZXNwb25zZVBvaW50LCBtYXRjaENvcnJlY3QgfSBmcm9tICcuLi8uLi9pbnRlcm5hbC90ZW1wbGF0ZS1zdHJpbmdzJztcbmltcG9ydCB7IHR5cGUgUXRpUnVsZSB9IGZyb20gJy4uL3F0aS1ydWxlL3F0aS1ydWxlJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nJylcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFF0aVJlc3BvbnNlUHJvY2Vzc2luZyBleHRlbmRzIExpdEVsZW1lbnQge1xuICBzdGF0aWMgc3R5bGVzID0gW1xuICAgIGNzc2BcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICBgXG4gIF07XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgcHVibGljIHByb2Nlc3MoKSB7XG4gICAgY29uc3QgcnVsZXMgPSBbLi4udGhpcy5jaGlsZHJlbl0gYXMgUXRpUnVsZVtdO1xuXG4gICAgZm9yIChjb25zdCBydWxlIG9mIHJ1bGVzKSB7XG4gICAgICBydWxlLnByb2Nlc3MoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZU1hcDxhbnk+IHwgTWFwPFByb3BlcnR5S2V5LCB1bmtub3duPik6IHZvaWQge1xuICAgIGlmICh0aGlzLmdldEF0dHJpYnV0ZSgndGVtcGxhdGUnKSkge1xuICAgICAgY29uc3Qgc3BsaXR0ZWRUZW1wbGF0ZU5hbWUgPSB0aGlzLmdldEF0dHJpYnV0ZSgndGVtcGxhdGUnKSEuc3BsaXQoJy8nKTtcbiAgICAgIGNvbnN0IHRlbXBsYXRlTmFtZSA9IHNwbGl0dGVkVGVtcGxhdGVOYW1lW3NwbGl0dGVkVGVtcGxhdGVOYW1lLmxlbmd0aCAtIDFdLnJlcGxhY2UoJy54bWwnLCAnJyk7XG4gICAgICB0aGlzLmlubmVySFRNTCA9ICcnO1xuICAgICAgc3dpdGNoICh0ZW1wbGF0ZU5hbWUpIHtcbiAgICAgICAgY2FzZSAnbWFwX3Jlc3BvbnNlJzoge1xuICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQodGhpcy5mcmFnbWVudEZyb21TdHJpbmcobWFwUmVzcG9uc2UpLmZpcnN0RWxlbWVudENoaWxkLmZpcnN0RWxlbWVudENoaWxkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdtYXBfcmVzcG9uc2VfcG9pbnQnOiB7XG4gICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZCh0aGlzLmZyYWdtZW50RnJvbVN0cmluZyhtYXBSZXNwb25zZVBvaW50KS5maXJzdEVsZW1lbnRDaGlsZC5maXJzdEVsZW1lbnRDaGlsZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnbWF0Y2hfY29ycmVjdCc6XG4gICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZCh0aGlzLmZyYWdtZW50RnJvbVN0cmluZyhtYXRjaENvcnJlY3QpLmZpcnN0RWxlbWVudENoaWxkLmZpcnN0RWxlbWVudENoaWxkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZyYWdtZW50RnJvbVN0cmluZyhzdHJIVE1MOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoc3RySFRNTCk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcnOiBRdGlSZXNwb25zZVByb2Nlc3Npbmc7XG4gIH1cbn1cbiIsICJleHBvcnQgY29uc3QgbWF0Y2hDb3JyZWN0ID0gYDxxdGktcmVzcG9uc2UtcHJvY2Vzc2luZz5cbiAgPHF0aS1yZXNwb25zZS1jb25kaXRpb24+XG4gICAgPHF0aS1yZXNwb25zZS1pZj5cbiAgICAgIDxxdGktbWF0Y2g+XG4gICAgICAgIDxxdGktdmFyaWFibGUgaWRlbnRpZmllcj1cIlJFU1BPTlNFXCI+PC9xdGktdmFyaWFibGU+XG4gICAgICAgIDxxdGktY29ycmVjdCBpZGVudGlmaWVyPVwiUkVTUE9OU0VcIj48L3F0aS1jb3JyZWN0PlxuICAgICAgPC9xdGktbWF0Y2g+XG4gICAgICA8cXRpLXNldC1vdXRjb21lLXZhbHVlIGlkZW50aWZpZXI9XCJTQ09SRVwiPlxuICAgICAgICA8cXRpLWJhc2UtdmFsdWUgYmFzZS10eXBlPVwiZmxvYXRcIj4xPC9xdGktYmFzZS12YWx1ZT5cbiAgICAgIDwvcXRpLXNldC1vdXRjb21lLXZhbHVlPlxuICAgIDwvcXRpLXJlc3BvbnNlLWlmPlxuICAgIDxxdGktcmVzcG9uc2UtZWxzZT5cbiAgICAgIDxxdGktc2V0LW91dGNvbWUtdmFsdWUgaWRlbnRpZmllcj1cIlNDT1JFXCI+XG4gICAgICAgIDxxdGktYmFzZS12YWx1ZSBiYXNlLXR5cGU9XCJmbG9hdFwiPjA8L3F0aS1iYXNlLXZhbHVlPlxuICAgICAgPC9xdGktc2V0LW91dGNvbWUtdmFsdWU+XG4gICAgPC9xdGktcmVzcG9uc2UtZWxzZT5cbiAgPC9xdGktcmVzcG9uc2UtY29uZGl0aW9uPlxuPC9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZz5gO1xuXG5leHBvcnQgY29uc3QgbWFwUmVzcG9uc2UgPSBgPHF0aS1yZXNwb25zZS1wcm9jZXNzaW5nPlxuICA8cXRpLXJlc3BvbnNlLWNvbmRpdGlvbj5cbiAgICA8cXRpLXJlc3BvbnNlLWlmPlxuICAgICAgPHF0aS1pcy1udWxsPlxuICAgICAgICA8cXRpLXZhcmlhYmxlIGlkZW50aWZpZXI9XCJSRVNQT05TRVwiPjwvcXRpLXZhcmlhYmxlPlxuICAgICAgPC9xdGktaXMtbnVsbD5cbiAgICAgIDxxdGktc2V0LW91dGNvbWUtdmFsdWUgaWRlbnRpZmllcj1cIlNDT1JFXCI+XG4gICAgICAgIDxxdGktYmFzZS12YWx1ZSBiYXNlLXR5cGU9XCJmbG9hdFwiPjAuMDwvcXRpLWJhc2UtdmFsdWU+XG4gICAgICA8L3F0aS1zZXQtb3V0Y29tZS12YWx1ZT5cbiAgICA8L3F0aS1yZXNwb25zZS1pZj5cbiAgICA8cXRpLXJlc3BvbnNlLWVsc2U+XG4gICAgICA8cXRpLXNldC1vdXRjb21lLXZhbHVlIGlkZW50aWZpZXI9XCJTQ09SRVwiPlxuICAgICAgICA8cXRpLW1hcC1yZXNwb25zZSBpZGVudGlmaWVyPVwiUkVTUE9OU0VcIj4gPC9xdGktbWFwLXJlc3BvbnNlPlxuICAgICAgPC9xdGktc2V0LW91dGNvbWUtdmFsdWU+XG4gICAgPC9xdGktcmVzcG9uc2UtZWxzZT5cbiAgPC9xdGktcmVzcG9uc2UtY29uZGl0aW9uPlxuPC9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZz5gO1xuXG5leHBvcnQgY29uc3QgbWFwUmVzcG9uc2VQb2ludCA9IGA8cXRpLXJlc3BvbnNlLXByb2Nlc3Npbmc+XG4gIDxxdGktcmVzcG9uc2UtY29uZGl0aW9uPlxuICAgIDxxdGktcmVzcG9uc2UtaWY+XG4gICAgICA8cXRpLWlzLW51bGw+XG4gICAgICAgIDxxdGktdmFyaWFibGUgaWRlbnRpZmllcj1cIlJFU1BPTlNFXCI+PC9xdGktdmFyaWFibGU+XG4gICAgICA8L3F0aS1pcy1udWxsPlxuICAgICAgPHF0aS1zZXQtb3V0Y29tZS12YWx1ZSBpZGVudGlmaWVyPVwiU0NPUkVcIj5cbiAgICAgICAgPHF0aS1iYXNlLXZhbHVlIGJhc2UtdHlwZT1cImZsb2F0XCI+MDwvcXRpLWJhc2UtdmFsdWU+XG4gICAgICA8L3F0aS1zZXQtb3V0Y29tZS12YWx1ZT5cbiAgICA8L3F0aS1yZXNwb25zZS1pZj5cbiAgICA8cXRpLXJlc3BvbnNlLWVsc2U+XG4gICAgICA8cXRpLXNldC1vdXRjb21lLXZhbHVlIGlkZW50aWZpZXI9XCJTQ09SRVwiPlxuICAgICAgICA8cXRpLW1hcC1yZXNwb25zZS1wb2ludCBpZGVudGlmaWVyPVwiUkVTUE9OU0VcIj48L3F0aS1tYXAtcmVzcG9uc2UtcG9pbnQ+XG4gICAgICA8L3F0aS1zZXQtb3V0Y29tZS12YWx1ZT5cbiAgICA8L3F0aS1yZXNwb25zZS1lbHNlPlxuICA8L3F0aS1yZXNwb25zZS1jb25kaXRpb24+XG48L3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nPmA7XG4iLCAiaW1wb3J0IHsgT3V0Y29tZVZhcmlhYmxlIH0gZnJvbSAnQGNpdG9sYWIvcXRpLWNvbXBvbmVudHMvcXRpLWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBjb252ZXJ0TnVtYmVyVG9Vbml2ZXJhbEZvcm1hdCB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFsL3V0aWxzJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi8uLi9xdGktZXhwcmVzc2lvbi9xdGktZXhwcmVzc2lvbic7XG5pbXBvcnQgeyBRdGlSdWxlIH0gZnJvbSAnLi4vcXRpLXJ1bGUnO1xuXG4vKipcbiAqIFRoZSBsb29rdXBPdXRjb21lVmFsdWUgcnVsZSBzZXRzIHRoZSB2YWx1ZSBvZiBhbiBvdXRjb21lIHZhcmlhYmxlIHRvIHRoZSB2YWx1ZSBvYnRhaW5lZFxuICogYnkgbG9va2luZyB1cCB0aGUgdmFsdWUgb2YgdGhlIGFzc29jaWF0ZWQgZXhwcmVzc2lvbiBpbiB0aGUgbG9va3VwVGFibGUgYXNzb2NpYXRlZFxuICogd2l0aCB0aGUgb3V0Y29tZSdzIGRlY2xhcmF0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgUXRpTG9va3VwT3V0Y29tZVZhbHVlIGV4dGVuZHMgUXRpUnVsZSB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KSBpZGVudGlmaWVyOiBzdHJpbmc7XG5cbiAgZ2V0IGNoaWxkRXhwcmVzc2lvbigpOiBRdGlFeHByZXNzaW9uPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmZpcnN0RWxlbWVudENoaWxkIGFzIFF0aUV4cHJlc3Npb248c3RyaW5nPjtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBwcm9jZXNzKCk6IG51bWJlciB7XG4gICAgY29uc3QgaWRlbnRpZmllciA9IHRoaXMuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJyk7XG4gICAgY29uc3Qgb3V0Y29tZVZhcmlhYmxlID0gdGhpcy5jbG9zZXN0KCdxdGktYXNzZXNzbWVudC1pdGVtJykuZ2V0VmFyaWFibGUoaWRlbnRpZmllcikgYXMgT3V0Y29tZVZhcmlhYmxlO1xuICAgIGxldCB2YWx1ZTtcbiAgICBpZiAob3V0Y29tZVZhcmlhYmxlLmludGVycG9sYXRpb25UYWJsZSkge1xuICAgICAgdmFsdWUgPSBvdXRjb21lVmFyaWFibGUuaW50ZXJwb2xhdGlvblRhYmxlLmdldChwYXJzZUludCh0aGlzLmNoaWxkRXhwcmVzc2lvbi5jYWxjdWxhdGUoKSkpO1xuICAgIH1cbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS53YXJuKCdsb29rdXBPdXRjb21lVmFsdWU6IHZhbHVlIGlzIG51bGwgb3IgdW5kZWZpbmVkJyk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50PHsgb3V0Y29tZUlkZW50aWZpZXI6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdIH0+KCdxdGktc2V0LW91dGNvbWUtdmFsdWUnLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICBvdXRjb21lSWRlbnRpZmllcjogdGhpcy5pZGVudGlmaWVyLFxuICAgICAgICAgIHZhbHVlOiBjb252ZXJ0TnVtYmVyVG9Vbml2ZXJhbEZvcm1hdCh2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktbG9va3VwLW91dGNvbWUtdmFsdWUnLCBRdGlMb29rdXBPdXRjb21lVmFsdWUpO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktbG9va3VwLW91dGNvbWUtdmFsdWUnOiBRdGlMb29rdXBPdXRjb21lVmFsdWU7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktcnVsZScpXG5leHBvcnQgY2xhc3MgUXRpUnVsZSBleHRlbmRzIExpdEVsZW1lbnQgaW1wbGVtZW50cyBRdGlSdWxlQmFzZSB7XG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdD48L3Nsb3Q+YDtcbiAgfVxuXG4gIHB1YmxpYyBwcm9jZXNzKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBRdGlSdWxlQmFzZSB7XG4gIHByb2Nlc3MoKTogYW55O1xufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktcnVsZSc6IFF0aVJ1bGU7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi8uLi9xdGktZXhwcmVzc2lvbi9xdGktZXhwcmVzc2lvbic7XG5pbXBvcnQgeyBRdGlSdWxlIH0gZnJvbSAnLi4vcXRpLXJ1bGUnO1xuXG5leHBvcnQgY2xhc3MgUXRpUmVzcG9uc2VDb25kaXRpb24gZXh0ZW5kcyBRdGlSdWxlIHtcbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIHByb2Nlc3MoKSB7XG4gICAgY29uc3QgYnJhbmNoZXMgPSBbLi4udGhpcy5jaGlsZHJlbl0gYXMgUXRpRXhwcmVzc2lvbjxhbnk+W107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJyYW5jaGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBicmFuY2ggPSBicmFuY2hlc1tpXTtcblxuICAgICAgaWYgKGJyYW5jaC5jYWxjdWxhdGUoKSkge1xuICAgICAgICAoYnJhbmNoIGFzIHVua25vd24gYXMgUXRpUnVsZSkucHJvY2VzcygpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktcmVzcG9uc2UtY29uZGl0aW9uJywgUXRpUmVzcG9uc2VDb25kaXRpb24pO1xuIiwgImltcG9ydCB7IGNvbnZlcnROdW1iZXJUb1VuaXZlcmFsRm9ybWF0IH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdXRpbHMnO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiwgUXRpRXhwcmVzc2lvbkJhc2UgfSBmcm9tICcuLi8uLi9xdGktZXhwcmVzc2lvbi9xdGktZXhwcmVzc2lvbic7XG5pbXBvcnQgeyBRdGlSdWxlLCBRdGlSdWxlQmFzZSB9IGZyb20gJy4uL3F0aS1ydWxlJztcblxuZXhwb3J0IGNsYXNzIFF0aVNldE91dGNvbWVWYWx1ZSBleHRlbmRzIFF0aVJ1bGUge1xuICBwdWJsaWMgb3ZlcnJpZGUgcHJvY2VzcygpIHtcbiAgICBjb25zdCBvdXRjb21lSWRlbnRpZmllciA9IHRoaXMuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJyk7XG5cbiAgICBjb25zdCBleHByZXNzaW9uID0gdGhpcy5maXJzdEVsZW1lbnRDaGlsZCBhcyBRdGlFeHByZXNzaW9uPHN0cmluZz47XG5cbiAgICBjb25zdCBydWxlID0gbmV3IFF0aVNldE91dGNvbWVWYWx1ZVJ1bGUoZXhwcmVzc2lvbik7XG4gICAgY29uc3QgdmFsdWUgPSBydWxlLnByb2Nlc3MoKTtcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQ8eyBvdXRjb21lSWRlbnRpZmllcjogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10gfT4oJ3F0aS1zZXQtb3V0Y29tZS12YWx1ZScsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWUsXG4gICAgICAgIGRldGFpbDoge1xuICAgICAgICAgIG91dGNvbWVJZGVudGlmaWVyLFxuICAgICAgICAgIHZhbHVlOiBBcnJheS5pc0FycmF5KHZhbHVlKVxuICAgICAgICAgICAgPyB2YWx1ZS5tYXAoKHY6IHN0cmluZykgPT4gY29udmVydE51bWJlclRvVW5pdmVyYWxGb3JtYXQodikpXG4gICAgICAgICAgICA6IGNvbnZlcnROdW1iZXJUb1VuaXZlcmFsRm9ybWF0KHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFF0aVNldE91dGNvbWVWYWx1ZVJ1bGU8VD4gaW1wbGVtZW50cyBRdGlSdWxlQmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZXhwcmVzc2lvbjogUXRpRXhwcmVzc2lvbkJhc2U8VD4pIHt9XG5cbiAgcHJvY2VzcygpOiBhbnkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5leHByZXNzaW9uID8gdGhpcy5leHByZXNzaW9uLmNhbGN1bGF0ZSgpIDogbnVsbDtcblxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ3NldE91dGNvbWVWYWx1ZTogdmFsdWUgaXMgbnVsbCBvciB1bmRlZmluZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLXNldC1vdXRjb21lLXZhbHVlJywgUXRpU2V0T3V0Y29tZVZhbHVlKTtcbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50LCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IFF0aVJ1bGUgfSBmcm9tICcuLi9xdGktcnVsZS9xdGktcnVsZSc7XG5cbmV4cG9ydCBjbGFzcyBRdGlSZXNwb25zZUVsc2UgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgcHVibGljIGNhbGN1bGF0ZSgpIHtcbiAgICBjb25zdCByZXN1bHQgPSB0cnVlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHVibGljIGdldFN1YlJ1bGVzKCk6IFF0aVJ1bGVbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmNoaWxkcmVuXSBhcyBRdGlSdWxlW107XG4gIH1cblxuICBwdWJsaWMgcHJvY2VzcygpIHtcbiAgICBjb25zdCBzdWJSdWxlcyA9IHRoaXMuZ2V0U3ViUnVsZXMoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN1YlJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBzdWJSdWxlID0gc3ViUnVsZXNbaV07XG4gICAgICBzdWJSdWxlLnByb2Nlc3MoKTtcbiAgICB9XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktcmVzcG9uc2UtZWxzZScsIFF0aVJlc3BvbnNlRWxzZSk7XG4iLCAiaW1wb3J0IHsgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBRdGlSZXNwb25zZUlmIH0gZnJvbSAnLi4vcXRpLXJlc3BvbnNlLWlmJztcblxuZXhwb3J0IGNsYXNzIFF0aVJlc3BvbnNlRWxzZUlmIGV4dGVuZHMgUXRpUmVzcG9uc2VJZiB7XG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGAke3N1cGVyLnJlbmRlcigpfWA7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktcmVzcG9uc2UtZWxzZS1pZicsIFF0aVJlc3BvbnNlRWxzZUlmKTtcbiIsICJpbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vLi4vcXRpLWV4cHJlc3Npb24vcXRpLWV4cHJlc3Npb24nO1xuaW1wb3J0IHsgUXRpUnVsZSB9IGZyb20gJy4uLy4uL3F0aS1ydWxlL3F0aS1ydWxlJztcbmltcG9ydCB7IFF0aVJlc3BvbnNlRWxzZSB9IGZyb20gJy4uL3F0aS1yZXNwb25zZS1lbHNlJztcblxuZXhwb3J0IGNsYXNzIFF0aVJlc3BvbnNlSWYgZXh0ZW5kcyBRdGlSZXNwb25zZUVsc2Uge1xuICBwdWJsaWMgb3ZlcnJpZGUgY2FsY3VsYXRlKCkge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSB0aGlzLmZpcnN0RWxlbWVudENoaWxkIGFzIFF0aUV4cHJlc3Npb248Ym9vbGVhbj47XG4gICAgY29uc3QgcmVzdWx0ID0gZXhwcmVzc2lvbi5jYWxjdWxhdGUoKSBhcyBib29sZWFuO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0U3ViUnVsZXMoKTogUXRpUnVsZVtdIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdC5wdXNoKHRoaXMuY2hpbGRyZW5baV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLXJlc3BvbnNlLWlmJywgUXRpUmVzcG9uc2VJZik7XG4iLCAiaW1wb3J0IHsgTGl0RWxlbWVudCwgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgUmVzcG9uc2VWYXJpYWJsZSwgVmFyaWFibGVEZWNsYXJhdGlvbiB9IGZyb20gJy4uLy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBRdGlBc3Nlc3NtZW50SXRlbSB9IGZyb20gJy4uLy4uL3F0aS1hc3Nlc3NtZW50LWl0ZW0vcXRpLWFzc2Vzc21lbnQtaXRlbSc7XG5pbXBvcnQgeyBRdGlNdWx0aXBsZSB9IGZyb20gJy4vcXRpLW11bHRpcGxlL3F0aS1tdWx0aXBsZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXRpRXhwcmVzc2lvbkJhc2U8VD4ge1xuICAvLyBnZXQgYXNzZXNzbWVudEl0ZW0oKTogUXRpQXNzZXNzbWVudEl0ZW07XG5cbiAgLy8gZ2V0VmFyaWFibGVzKCk6IFZhcmlhYmxlRGVjbGFyYXRpb248bnVtYmVyIHwgc3RyaW5nIHwgKG51bWJlciB8IHN0cmluZylbXSB8IG51bGw+W107XG4gIGNhbGN1bGF0ZSgpOiBSZWFkb25seTxUPjtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFF0aUV4cHJlc3Npb248VD4gZXh0ZW5kcyBMaXRFbGVtZW50IGltcGxlbWVudHMgUXRpRXhwcmVzc2lvbkJhc2U8VD4ge1xuICBAc3RhdGUoKVxuICBwcm90ZWN0ZWQgcmVzdWx0OiBhbnk7XG5cbiAgLy8gaGlkZSB0aGUgc2xvdCB3aXRoIGNzc1xuICBzdGF0aWMgc3R5bGVzID0gY3NzYFxuICAgIHNsb3Qge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIGA7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxwcmU+JHtKU09OLnN0cmluZ2lmeSh0aGlzLnJlc3VsdCwgbnVsbCwgMil9PC9wcmU+XG4gICAgICA8c2xvdD48L3Nsb3Q+YDtcbiAgfVxuXG4gIHB1YmxpYyBjYWxjdWxhdGUoKTogUmVhZG9ubHk8VD4ge1xuICAgIHRoaXMucmVzdWx0ID0gdGhpcy5nZXRSZXN1bHQoKTtcbiAgICByZXR1cm4gdGhpcy5yZXN1bHQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0UmVzdWx0KCk6IFJlYWRvbmx5PFQ+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgZ2V0IGFzc2Vzc21lbnRJdGVtKCk6IFF0aUFzc2Vzc21lbnRJdGVtIHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZXN0KCdxdGktYXNzZXNzbWVudC1pdGVtJykgYXMgUXRpQXNzZXNzbWVudEl0ZW07XG4gIH1cblxuICBnZXRWYXJpYWJsZXMgPSAoKTogVmFyaWFibGVEZWNsYXJhdGlvbjxudW1iZXIgfCBzdHJpbmcgfCAobnVtYmVyIHwgc3RyaW5nKVtdIHwgbnVsbD5bXSA9PlxuICAgIC8vIEZJWE1FOiBpZiB0aGlzIGl0c2VsZiBpcyBtdWx0aXBsZSwgdGhpcyB3aWxsIG5ldmVyIGVudGVyIHRoZSBxdGktbXVsdGlwbGUgc3dpdGNoXG4gICAgLy8gU2VlIHRoaXMgZXhhbXBsZSBoZXJlOiBodHRwczovL2dpdGh1Yi5jb20vMUVkVGVjaC9xdGktZXhhbXBsZXMvYmxvYi9tYXN0ZXIvcXRpdjMtZXhhbXBsZXMvcGFja2FnaW5nL2l0ZW1zL0V4YW1wbGUwNS1mZWVkYmFja0Jsb2NrLWFkYXB0aXZlLnhtbFxuXG4gICAgQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKVxuICAgICAgLm1hcCgoZTogRWxlbWVudCkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgY2FzZSAncXRpLWJhc2UtdmFsdWUnOiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBiYXNlVHlwZTogZS5nZXRBdHRyaWJ1dGUoJ2Jhc2UtdHlwZScpLFxuICAgICAgICAgICAgICB2YWx1ZTogZS50ZXh0Q29udGVudCxcbiAgICAgICAgICAgICAgY2FyZGluYWxpdHk6ICdzaW5nbGUnXG4gICAgICAgICAgICB9IGFzIFJlc3BvbnNlVmFyaWFibGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgJ3F0aS12YXJpYWJsZSc6IHtcbiAgICAgICAgICAgIGNvbnN0IGlkZW50aWZpZXIgPSBlLmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpIHx8ICcnO1xuICAgICAgICAgICAgY29uc3QgdmFyaWFibGUgPSB0aGlzLmFzc2Vzc21lbnRJdGVtLmdldFZhcmlhYmxlKGlkZW50aWZpZXIpO1xuICAgICAgICAgICAgcmV0dXJuIHZhcmlhYmxlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlICdxdGktbXVsdGlwbGUnOiB7XG4gICAgICAgICAgICBjb25zdCBtdWx0aXBsZSA9IGUgYXMgUXRpTXVsdGlwbGU7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBtdWx0aXBsZS5nZXRSZXN1bHQoKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGlkZW50aWZpZXI6ICcnLFxuICAgICAgICAgICAgICAgIGJhc2VUeXBlOiB2YWx1ZXNbMF0uYmFzZVR5cGUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlcy5tYXAodiA9PiB2LnZhbHVlKSxcbiAgICAgICAgICAgICAgICBjYXJkaW5hbGl0eTogJ211bHRpcGxlJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAncmVzcG9uc2UnXG4gICAgICAgICAgICAgIH0gYXMgUmVzcG9uc2VWYXJpYWJsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlICdxdGktY29ycmVjdCc6IHtcbiAgICAgICAgICAgIGNvbnN0IGlkZW50aWZpZXIgPSBlLmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpIHx8ICcnO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2VWYXJpYWJsZSA9IHRoaXMuYXNzZXNzbWVudEl0ZW0uZ2V0UmVzcG9uc2UoaWRlbnRpZmllcik7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBiYXNlVHlwZTogcmVzcG9uc2VWYXJpYWJsZS5iYXNlVHlwZSxcbiAgICAgICAgICAgICAgdmFsdWU6IHJlc3BvbnNlVmFyaWFibGUuY29ycmVjdFJlc3BvbnNlLFxuICAgICAgICAgICAgICBjYXJkaW5hbGl0eTogcmVzcG9uc2VWYXJpYWJsZS5jYXJkaW5hbGl0eVxuICAgICAgICAgICAgfSBhcyBSZXNwb25zZVZhcmlhYmxlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAvLyBhZGRlZCBmb3IgdXNlIG9mIHF0aS1lcXVhbC1yb3VuZGVkXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBleHByZXNzaW9uID0gZSBhcyBRdGlFeHByZXNzaW9uPG51bWJlcj47XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZXhwcmVzc2lvbi5nZXRSZXN1bHQoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBiYXNlVHlwZTogJ2ludGVnZXInLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgIGNhcmRpbmFsaXR5OiAnc2luZ2xlJ1xuICAgICAgICAgICAgICB9IGFzIFJlc3BvbnNlVmFyaWFibGU7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ2RlZmF1bHQgbm90IHN1ZmZpY2llbnQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5maWx0ZXIodiA9PiB2ICE9PSBudWxsKTtcbn1cbiIsICJpbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBRdGlDb25kaXRpb25FeHByZXNzaW9uIGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxib29sZWFuPiB7XG4gIHB1YmxpYyBjYWxjdWxhdGUoKTogUmVhZG9ubHk8Ym9vbGVhbj4ge1xuICAgIHRoaXMucmVzdWx0ID0gdGhpcy5nZXRSZXN1bHQoKTtcbiAgICByZXR1cm4gdGhpcy5yZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0UmVzdWx0KCk6IFJlYWRvbmx5PGJvb2xlYW4+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1jb25kaXRpb24tZXhwcmVzc2lvbic7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuXG50eXBlIENvbnN0cnVjdG9yPFQ+ID0gbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVDtcbmV4cG9ydCBjbGFzcyBRdGlBbmQgZXh0ZW5kcyBxdGlBbmRNaXhpbihRdGlDb25kaXRpb25FeHByZXNzaW9uIGFzIHVua25vd24gYXMgQ29uc3RydWN0b3I8UXRpQ29uZGl0aW9uRXhwcmVzc2lvbj4pIHtcbiAgcHVibGljIGNhbGN1bGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jYWxjdWxhdGVDaGlsZHJlbihBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4gYXMgdW5rbm93biBhcyBRdGlFeHByZXNzaW9uPGFueT5bXSkpO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIE1vY2tRdGlFeHByZXNzaW9uPFQ+ID0geyBjYWxjdWxhdGU6ICgpID0+IFQgfTtcbnR5cGUgTW9ja0NvbnN0cnVjdG9yID0gbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4ge307XG5leHBvcnQgZnVuY3Rpb24gcXRpQW5kTWl4aW48VEJhc2UgZXh0ZW5kcyBNb2NrQ29uc3RydWN0b3I+KEJhc2U6IFRCYXNlKSB7XG4gIHJldHVybiBjbGFzcyBNb2NrUXRpQW5kIGV4dGVuZHMgQmFzZSB7XG4gICAgcHVibGljIGNhbGN1bGF0ZUNoaWxkcmVuKGNoaWxkcmVuOiBBcnJheTxNb2NrUXRpRXhwcmVzc2lvbjxhbnk+Pikge1xuICAgICAgLy8gY2hpbGRyZW4gY2FuIGJlIGEgbWl4IG9mIHF0aS1leHByZXNzaW9uIGFuZCBxdGktY29uZGl0aW9uLWV4cHJlc3Npb25cbiAgICAgIGNvbnN0IHZhbHVlcyA9IGNoaWxkcmVuLm1hcChjID0+IHtcbiAgICAgICAgY29uc3QgY29uZGl0aW9uID0gYyBhcyBNb2NrUXRpRXhwcmVzc2lvbjxhbnk+O1xuICAgICAgICBpZiAoIWNvbmRpdGlvbi5jYWxjdWxhdGUpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRWxlbWVudCBkb2Vzbid0IGltcGxlbWVudCBRdGlDb25kaXRpb25FeHByZXNzaW9uXCIpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGxldCB2YWx1ZSA9IGNvbmRpdGlvbi5jYWxjdWxhdGUoKSBhcyBCb29sZWFuO1xuICAgICAgICAvLyBjb252ZXJ0IHN0cmluZyB2YWx1ZSB0byBib29sZWFuIGFuZCByZXR1cm4gbnVsbCBpZiBub3QgcG9zc2libGVcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBpZiAodmFsdWUgPT09ICd0cnVlJykge1xuICAgICAgICAgICAgdmFsdWUgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09ICdmYWxzZScpIHtcbiAgICAgICAgICAgIHZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgdmFsdWUgaW4gcXRpLWFuZCwgZXhwZWN0ZWQgYm9vbGVhbicpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHZhbHVlcy5ldmVyeShlID0+IHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBlID09PSAnYm9vbGVhbicgJiYgZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cbiIsICJpbXBvcnQgeyBRdGlBbmQgfSBmcm9tICcuL3F0aS1hbmQnO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktYW5kJywgUXRpQW5kKTtcblxuZXhwb3J0ICogZnJvbSAnLi9xdGktYW5kJztcblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWFuZCc6IFF0aUFuZDtcbiAgfVxufVxuIiwgImltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgQmFzZVR5cGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC9leHByZXNzaW9uLXJlc3VsdCc7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuZXhwb3J0IGNsYXNzIFF0aUJhc2VWYWx1ZSBleHRlbmRzIFF0aUV4cHJlc3Npb248c3RyaW5nPiB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnYmFzZS10eXBlJyB9KSBiYXNlVHlwZTogQmFzZVR5cGUgPSAnc3RyaW5nJztcblxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCk6IHN0cmluZyB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnRleHRDb250ZW50O1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1iYXNlLXZhbHVlJywgUXRpQmFzZVZhbHVlKTtcbiIsICJpbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IFF0aUNvbmRpdGlvbkV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktY29uZGl0aW9uLWV4cHJlc3Npb24nO1xuXG4vLyBQSzogRm9yIHRoZSBjb250YWlucyB3ZSBhc3N1bWUgdGhlIGV4cHJlc3Npb25zIHRvIGNhbGN1bGF0ZSBhcmUgYWxsIGRpcmVjdGVkUGFpcnNcbi8vIEkgZG9uJ3Qga25vdyBpdCB0aGlzIGluIFFUSSBpcyBhbHdheXMgdGhlIGNhc2UgaG93ZXZlcj9cbmV4cG9ydCBjbGFzcyBRdGlDb250YWlucyBleHRlbmRzIFF0aUNvbmRpdGlvbkV4cHJlc3Npb24ge1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCkge1xuICAgIC8vIFRPRE86IGltcGxlbWVudCB0aGlzIGZvciBvdGhlciB0eXBlcyB0aGFuIGRpcmVjdGVkUGFpclxuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0VmFyaWFibGVzKCkgYXMgUmVzcG9uc2VWYXJpYWJsZVtdO1xuICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMikge1xuICAgICAgY29uc3QgdmFsdWUxID0gdmFsdWVzWzBdO1xuICAgICAgY29uc3QgdmFsdWUyID0gdmFsdWVzWzFdO1xuICAgICAgaWYgKFxuICAgICAgICB2YWx1ZTEuYmFzZVR5cGUgPT09ICdkaXJlY3RlZFBhaXInICYmXG4gICAgICAgIHZhbHVlMi5iYXNlVHlwZSA9PT0gJ2RpcmVjdGVkUGFpcicgJiZcbiAgICAgICAgdmFsdWUxLmNhcmRpbmFsaXR5ID09PSAnbXVsdGlwbGUnXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgcHJvamVjdGlvbjEgPSB2YWx1ZTEudmFsdWUgYXMgc3RyaW5nW107XG4gICAgICAgIGNvbnN0IHByb2plY3Rpb24yID0gdmFsdWUyLnZhbHVlIGFzIHN0cmluZ1tdO1xuICAgICAgICBjb25zdCBlbnVtZXJhYmxlID0gcHJvamVjdGlvbjEuZmlsdGVyKHggPT4gcHJvamVjdGlvbjIuaW5jbHVkZXMoeCkpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGVudW1lcmFibGUubGVuZ3RoID4gMDtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHZhbHVlMS5iYXNlVHlwZSA9PT0gJ2RpcmVjdGVkUGFpcicgJiZcbiAgICAgICAgdmFsdWUyLmJhc2VUeXBlID09PSAnZGlyZWN0ZWRQYWlyJyAmJlxuICAgICAgICB2YWx1ZTEuY2FyZGluYWxpdHkgPT09ICdzaW5nbGUnXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgcHJvamVjdGlvbjEgPSB2YWx1ZTEudmFsdWUgYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCBwcm9qZWN0aW9uMiA9IHZhbHVlMi52YWx1ZSBhcyBzdHJpbmdbXTtcbiAgICAgICAgcmV0dXJuIHByb2plY3Rpb24yLmluY2x1ZGVzKHByb2plY3Rpb24xKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgJ3Vuc3VwcG9ydGVkIGJhc2VUeXBlIG9yIGNhcmRpbmFsaXR5IGluIHF0aSBjb250YWlucywgb25seSBiYXNlVHlwZTogZGlyZWN0ZWRQYWlyIGFuZCBjYXJkaW5hbGl0eTogbXVsdGlwbGUgaXMgc3VwcG9ydGVkJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIG51bWJlciBvZiBjaGlsZHJlbiBpbiBxdGkgY29udGFpbnMnKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLWNvbnRhaW5zJywgUXRpQ29udGFpbnMpO1xuIiwgImltcG9ydCB7IFF0aUFzc2Vzc21lbnRJdGVtIH0gZnJvbSAnLi4vLi4vLi4vcXRpLWFzc2Vzc21lbnQtaXRlbS9xdGktYXNzZXNzbWVudC1pdGVtJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBjbGFzcyBRdGlDb3JyZWN0IGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxzdHJpbmcgfCBzdHJpbmdbXT4ge1xuICBnZXQgaW50ZXJwcmV0YXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKCdpbnRlcnByZXRhdGlvbicpIHx8ICcnO1xuICB9XG5cbiAgb3ZlcnJpZGUgZ2V0UmVzdWx0KCkge1xuICAgIGNvbnN0IGlkZW50aWZpZXIgPSB0aGlzLmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpIHx8ICcnO1xuICAgIGNvbnN0IHJlc3BvbnNlVmFyaWFibGUgPSAodGhpcy5jbG9zZXN0KCdxdGktYXNzZXNzbWVudC1pdGVtJykgYXMgUXRpQXNzZXNzbWVudEl0ZW0pLmdldFJlc3BvbnNlKGlkZW50aWZpZXIpO1xuICAgIHJlc3BvbnNlVmFyaWFibGUuY29ycmVjdFJlc3BvbnNlO1xuICAgIGlmIChyZXNwb25zZVZhcmlhYmxlLmNhcmRpbmFsaXR5ICE9PSAnc2luZ2xlJykge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlVmFyaWFibGUuY29ycmVjdFJlc3BvbnNlLmxlbmd0aCA+IDAgPyByZXNwb25zZVZhcmlhYmxlLmNvcnJlY3RSZXNwb25zZVswXSA6ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2VWYXJpYWJsZS5jb3JyZWN0UmVzcG9uc2U7XG4gICAgfVxuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLWNvcnJlY3QnLCBRdGlDb3JyZWN0KTtcbiIsICJpbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxuZXhwb3J0IGNsYXNzIFF0aUVxdWFsUm91bmRlZCBleHRlbmRzIFF0aUV4cHJlc3Npb248Ym9vbGVhbj4ge1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgcm91bmRpbmdNb2RlOiAnZGVjaW1hbFBsYWNlcycgfCAnc2lnbmlmaWNhbnRGaWd1cmVzJyA9ICdzaWduaWZpY2FudEZpZ3VyZXMnO1xuXG4gIGdldCBmaWd1cmVzKCkge1xuICAgIGNvbnN0IGF0dHIgPSB0aGlzLmdldEF0dHJpYnV0ZSgnZmlndXJlcycpO1xuICAgIGlmICghYXR0cikge1xuICAgICAgY29uc29sZS5lcnJvcignZmlndXJlcyBhdHRyaWJ1dGUgaXMgbWlzc2luZycpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGZpZ3VyZXMgPSBwYXJzZUludCh0aGlzLmdldEF0dHJpYnV0ZSgnZmlndXJlcycpIHx8ICcwJyk7XG4gICAgaWYgKGlzTmFOKGZpZ3VyZXMpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdmaWd1cmVzIGF0dHJpYnV0ZSBpcyBub3QgYSBudW1iZXInKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAoZmlndXJlcyA8IDApIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2ZpZ3VyZXMgYXR0cmlidXRlIGlzIG5lZ2F0aXZlJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKGZpZ3VyZXMgPCAxICYmIHRoaXMucm91bmRpbmdNb2RlID09PSAnc2lnbmlmaWNhbnRGaWd1cmVzJykge1xuICAgICAgY29uc29sZS5lcnJvcignZmlndXJlcyBjYW5ub3QgYmUgc21hbGxlciB0aGFuIDEgZm9yIFJvdW5kaW5nTW9kZSBzaWduaWZpY2FudEZpZ3VyZXMnKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gZmlndXJlcztcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKSB7XG4gICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAyKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldFZhcmlhYmxlcygpIGFzIFJlc3BvbnNlVmFyaWFibGVbXTtcbiAgICAgIGNvbnN0IHZhbHVlMSA9IHZhbHVlc1swXTtcbiAgICAgIGNvbnN0IHZhbHVlMiA9IHZhbHVlc1sxXTtcbiAgICAgIGlmICh0aGlzLnJvdW5kaW5nTW9kZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgdmFsdWUxLmNhcmRpbmFsaXR5ICE9PSAnc2luZ2xlJyB8fFxuICAgICAgICB2YWx1ZTIuY2FyZGluYWxpdHkgIT09ICdzaW5nbGUnIHx8XG4gICAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUxLnZhbHVlKSB8fFxuICAgICAgICBBcnJheS5pc0FycmF5KHZhbHVlMi52YWx1ZSlcbiAgICAgICkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIGNhcmRpbmFsaXR5IGluIHF0aSBlcXVhbCcpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBzd2l0Y2ggKHZhbHVlc1swXS5iYXNlVHlwZSkge1xuICAgICAgICBjYXNlICdpbnRlZ2VyJzpcbiAgICAgICAgY2FzZSAnZmxvYXQnOiB7XG4gICAgICAgICAgY29uc3QgZmxvYXQxID0gcGFyc2VGbG9hdCh2YWx1ZTEudmFsdWUgYXMgc3RyaW5nKTtcbiAgICAgICAgICBjb25zdCBmbG9hdDIgPSBwYXJzZUZsb2F0KHZhbHVlMi52YWx1ZSBhcyBzdHJpbmcpO1xuXG4gICAgICAgICAgaWYgKCFpc05hTihmbG9hdDEpICYmICFpc05hTihmbG9hdDIpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yb3VuZGluZ01vZGUgPT09ICdzaWduaWZpY2FudEZpZ3VyZXMnKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmbG9hdDEudG9QcmVjaXNpb24odGhpcy5maWd1cmVzKSA9PT0gZmxvYXQyLnRvUHJlY2lzaW9uKHRoaXMuZmlndXJlcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIE1hdGgucm91bmQoZmxvYXQxICogTWF0aC5wb3coMTAsIHRoaXMuZmlndXJlcykpIC8gTWF0aC5wb3coMTAsIHRoaXMuZmlndXJlcykgPT09XG4gICAgICAgICAgICAgICAgTWF0aC5yb3VuZChmbG9hdDIgKiBNYXRoLnBvdygxMCwgdGhpcy5maWd1cmVzKSkgLyBNYXRoLnBvdygxMCwgdGhpcy5maWd1cmVzKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGB2YWx1ZSBjYW5ub3QgYmUgY2FzdGVkIHRvIG51bWVyaWMgdmFsdWUgaW4gZXF1YWxSb3VuZGVkIG9wZXJhdG9yOiAke2Zsb2F0MX0sICR7ZmxvYXQyfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgdmFsdWVzIG90aGVyIHRoYW4gZmxvYXQgYW5kIGludCBjYW5ub3QgYmUgdXNlZCBpbiBlcXVhbFJvdW5kZWQgb3BlcmF0b3IuYCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBudW1iZXIgb2YgY2hpbGRyZW4gaW4gcXRpLWVxdWFsLXJvdW5kZWQnKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1lcXVhbC1yb3VuZGVkJywgUXRpRXF1YWxSb3VuZGVkKTtcbiIsICJpbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgU2NvcmluZ0hlbHBlciB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9zY29yaW5nLWhlbHBlcic7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuXG5leHBvcnQgY2xhc3MgUXRpRXF1YWwgZXh0ZW5kcyBRdGlFeHByZXNzaW9uPGJvb2xlYW4+IHtcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIHRvbGVyYW5jZU1vZGU6ICdleGFjdCcgfCAncmVsYXRpdmUnIHwgJ2Fic29sdXRlJyA9ICdleGFjdCc7XG5cbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpIHtcbiAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDIpIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0VmFyaWFibGVzKCkgYXMgUmVzcG9uc2VWYXJpYWJsZVtdO1xuICAgICAgY29uc3QgdmFsdWUxID0gdmFsdWVzWzBdO1xuICAgICAgY29uc3QgdmFsdWUyID0gdmFsdWVzWzFdO1xuICAgICAgaWYgKHRoaXMudG9sZXJhbmNlTW9kZSAhPT0gJ2V4YWN0Jykge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd0b2xlcmFuY2VNb2RlIGlzIG5vdCBzdXBwb3J0ZWQgeWV0Jyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgdmFsdWUxLmNhcmRpbmFsaXR5ICE9PSAnc2luZ2xlJyB8fFxuICAgICAgICB2YWx1ZTIuY2FyZGluYWxpdHkgIT09ICdzaW5nbGUnIHx8XG4gICAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUxLnZhbHVlKSB8fFxuICAgICAgICBBcnJheS5pc0FycmF5KHZhbHVlMi52YWx1ZSlcbiAgICAgICkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIGNhcmRpbmFsaXR5IGluIHF0aSBlcXVhbCcpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gU2NvcmluZ0hlbHBlci5jb21wYXJlU2luZ2xlVmFsdWVzKHZhbHVlMS52YWx1ZSBhcyBzdHJpbmcsIHZhbHVlMi52YWx1ZSBhcyBzdHJpbmcsIHZhbHVlMS5iYXNlVHlwZSk7XG4gICAgfVxuICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgbnVtYmVyIG9mIGNoaWxkcmVuIGluIHF0aS1lcXVhbCcpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLWVxdWFsJywgUXRpRXF1YWwpO1xuIiwgImltcG9ydCB7IEJhc2VUeXBlIH0gZnJvbSAnLi4vLi4nO1xuXG5leHBvcnQgY2xhc3MgU2NvcmluZ0hlbHBlciB7XG4gIHB1YmxpYyBzdGF0aWMgY29tcGFyZVNpbmdsZVZhbHVlcyh2YWx1ZTE6IFJlYWRvbmx5PHN0cmluZz4sIHZhbHVlMjogUmVhZG9ubHk8c3RyaW5nPiwgYmFzZVR5cGU6IEJhc2VUeXBlKTogYm9vbGVhbiB7XG4gICAgc3dpdGNoIChiYXNlVHlwZSkge1xuICAgICAgY2FzZSAnaWRlbnRpZmllcic6XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICByZXR1cm4gdmFsdWUxID09PSB2YWx1ZTI7XG4gICAgICBjYXNlICdpbnRlZ2VyJzoge1xuICAgICAgICBjb25zdCBpbnQxID0gcGFyc2VJbnQodmFsdWUxLCAxMCk7XG4gICAgICAgIGNvbnN0IGludDIgPSBwYXJzZUludCh2YWx1ZTIsIDEwKTtcbiAgICAgICAgaWYgKCFpc05hTihpbnQxKSAmJiAhaXNOYU4oaW50MikpIHtcbiAgICAgICAgICByZXR1cm4gaW50MSA9PT0gaW50MjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBDYW5ub3QgY29udmVydCAke3ZhbHVlMX0gYW5kL29yICR7dmFsdWUyfSB0byBpbnQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdmbG9hdCc6IHtcbiAgICAgICAgY29uc3QgZmxvYXQxID0gcGFyc2VGbG9hdCh2YWx1ZTEpO1xuICAgICAgICBjb25zdCBmbG9hdDIgPSBwYXJzZUZsb2F0KHZhbHVlMik7XG4gICAgICAgIGlmICghaXNOYU4oZmxvYXQxKSAmJiAhaXNOYU4oZmxvYXQyKSkge1xuICAgICAgICAgIHJldHVybiBmbG9hdDEgPT09IGZsb2F0MjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBjb3VsZG4ndCBjb252ZXJ0ICR7dmFsdWUxfSBhbmQvb3IgJHt2YWx1ZTJ9IHRvIGZsb2F0LmApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAncGFpcic6XG4gICAgICBjYXNlICdkaXJlY3RlZFBhaXInOiB7XG4gICAgICAgIGNvbnN0IHBhaXIxID0gdmFsdWUxLnNwbGl0KCcgJykuc29ydCgpO1xuICAgICAgICBjb25zdCBwYWlyMiA9IHZhbHVlMi5zcGxpdCgnICcpLnNvcnQoKTtcbiAgICAgICAgaWYgKHBhaXIxLmxlbmd0aCA9PT0gMiAmJiBwYWlyMi5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICBpZiAoYmFzZVR5cGUgPT09ICdwYWlyJykge1xuICAgICAgICAgICAgcGFpcjEuc29ydCgpO1xuICAgICAgICAgICAgcGFpcjIuc29ydCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcGFpcjEuam9pbignICcpID09PSBwYWlyMi5qb2luKCcgJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgY29tcGFyZWQgdHdvIHBhaXIgYnV0IG9uZSBvZiB0aGUgdmFsdWVzIGRvZXMgbm90IGhhdmUgMiB2YWx1ZXM6IDE6ICR7dmFsdWUxfSAyOiAke3ZhbHVlMn1gKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBjbGFzcyBRdGlHdCBleHRlbmRzIFF0aUV4cHJlc3Npb248Ym9vbGVhbj4ge1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMikge1xuICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRWYXJpYWJsZXMoKSBhcyBSZXNwb25zZVZhcmlhYmxlW107XG4gICAgICBjb25zdCB2YWx1ZTEgPSB2YWx1ZXNbMF07XG4gICAgICBjb25zdCB2YWx1ZTIgPSB2YWx1ZXNbMV07XG4gICAgICBpZiAodmFsdWUxLmJhc2VUeXBlID09PSB2YWx1ZTIuYmFzZVR5cGUgJiYgKHZhbHVlMS5iYXNlVHlwZSA9PT0gJ2ludGVnZXInIHx8IHZhbHVlMS5iYXNlVHlwZSA9PT0gJ2Zsb2F0JykpIHtcbiAgICAgICAgcmV0dXJuICt2YWx1ZTEudmFsdWUgPiArdmFsdWUyLnZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBiYXNlVHlwZSBvciBjYXJkaW5hbGl0eSBpbiBxdGkgZ3QnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBudW1iZXIgb2YgY2hpbGRyZW4gaW4gcXQnKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1ndCcsIFF0aUd0KTtcbiIsICJpbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IFF0aUNvbmRpdGlvbkV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktY29uZGl0aW9uLWV4cHJlc3Npb24nO1xuXG4vLyBQSzogRm9yIHRoZSBjb250YWlucyB3ZSBhc3N1bWUgdGhlIGV4cHJlc3Npb25zIHRvIGNhbGN1bGF0ZSBhcmUgYWxsIGRpcmVjdGVkUGFpcnNcbi8vIEkgZG9uJ3Qga25vdyBpdCB0aGlzIGluIFFUSSBpcyBhbHdheXMgdGhlIGNhc2UgaG93ZXZlcj9cbmV4cG9ydCBjbGFzcyBRdGlHdGUgZXh0ZW5kcyBRdGlDb25kaXRpb25FeHByZXNzaW9uIHtcbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDIpIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0VmFyaWFibGVzKCkgYXMgUmVzcG9uc2VWYXJpYWJsZVtdO1xuICAgICAgY29uc3QgdmFsdWUxID0gdmFsdWVzWzBdO1xuICAgICAgY29uc3QgdmFsdWUyID0gdmFsdWVzWzFdO1xuICAgICAgaWYgKHZhbHVlMS5iYXNlVHlwZSA9PT0gdmFsdWUyLmJhc2VUeXBlICYmICh2YWx1ZTEuYmFzZVR5cGUgPT09ICdpbnRlZ2VyJyB8fCB2YWx1ZTEuYmFzZVR5cGUgPT09ICdmbG9hdCcpKSB7XG4gICAgICAgIHJldHVybiArdmFsdWUxLnZhbHVlID49ICt2YWx1ZTIudmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIGJhc2VUeXBlIG9yIGNhcmRpbmFsaXR5IGluIHF0aSBndGUnKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKCd1bmV4cGVjdGVkIG51bWJlciBvZiBjaGlsZHJlbiBpbiBxdGUnKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1ndGUnLCBRdGlHdGUpO1xuIiwgImltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxuLy8gUEs6IEZvciB0aGUgY29udGFpbnMgd2UgYXNzdW1lIHRoZSBleHByZXNzaW9ucyB0byBjYWxjdWxhdGUgYXJlIGFsbCBkaXJlY3RlZFBhaXJzXG4vLyBJIGRvbid0IGtub3cgaXQgdGhpcyBpbiBRVEkgaXMgYWx3YXlzIHRoZSBjYXNlIGhvd2V2ZXI/XG5leHBvcnQgY2xhc3MgUXRpSXNOdWxsIGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxib29sZWFuPiB7XG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCB2YXJpYWJsZXMgPSB0aGlzLmdldFZhcmlhYmxlcygpIGFzIFJlc3BvbnNlVmFyaWFibGVbXTtcbiAgICAgIGlmICghdmFyaWFibGVzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgdmFsdWUgPSB2YXJpYWJsZXNbMF0udmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnO1xuICAgIH1cbiAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIG51bWJlciBvZiBjaGlsZHJlbiBpbiBxdGkgTnVsbCcpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLWlzLW51bGwnLCBRdGlJc051bGwpO1xuIiwgImltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxuZXhwb3J0IGNsYXNzIFF0aUx0IGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxib29sZWFuPiB7XG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAyKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldFZhcmlhYmxlcygpIGFzIFJlc3BvbnNlVmFyaWFibGVbXTtcbiAgICAgIGNvbnN0IHZhbHVlMSA9IHZhbHVlc1swXTtcbiAgICAgIGNvbnN0IHZhbHVlMiA9IHZhbHVlc1sxXTtcbiAgICAgIGlmICh2YWx1ZTEuYmFzZVR5cGUgPT09IHZhbHVlMi5iYXNlVHlwZSAmJiAodmFsdWUxLmJhc2VUeXBlID09PSAnaW50ZWdlcicgfHwgdmFsdWUxLmJhc2VUeXBlID09PSAnZmxvYXQnKSkge1xuICAgICAgICByZXR1cm4gK3ZhbHVlMS52YWx1ZSA8ICt2YWx1ZTIudmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIGJhc2VUeXBlIG9yIGNhcmRpbmFsaXR5IGluIHF0aSBsdCcpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIG51bWJlciBvZiBjaGlsZHJlbiBpbiBsdCcpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLWx0JywgUXRpTHQpO1xuIiwgImltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1jb25kaXRpb24tZXhwcmVzc2lvbic7XG5cbi8vIFBLOiBGb3IgdGhlIGNvbnRhaW5zIHdlIGFzc3VtZSB0aGUgZXhwcmVzc2lvbnMgdG8gY2FsY3VsYXRlIGFyZSBhbGwgZGlyZWN0ZWRQYWlyc1xuLy8gSSBkb24ndCBrbm93IGl0IHRoaXMgaW4gUVRJIGlzIGFsd2F5cyB0aGUgY2FzZSBob3dldmVyP1xuZXhwb3J0IGNsYXNzIFF0aUx0ZSBleHRlbmRzIFF0aUNvbmRpdGlvbkV4cHJlc3Npb24ge1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMikge1xuICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRWYXJpYWJsZXMoKSBhcyBSZXNwb25zZVZhcmlhYmxlW107XG4gICAgICBjb25zdCB2YWx1ZTEgPSB2YWx1ZXNbMF07XG4gICAgICBjb25zdCB2YWx1ZTIgPSB2YWx1ZXNbMV07XG4gICAgICBpZiAodmFsdWUxLmJhc2VUeXBlID09PSB2YWx1ZTIuYmFzZVR5cGUgJiYgKHZhbHVlMS5iYXNlVHlwZSA9PT0gJ2ludGVnZXInIHx8IHZhbHVlMS5iYXNlVHlwZSA9PT0gJ2Zsb2F0JykpIHtcbiAgICAgICAgcmV0dXJuICt2YWx1ZTEudmFsdWUgPD0gK3ZhbHVlMi52YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgYmFzZVR5cGUgb3IgY2FyZGluYWxpdHkgaW4gcXRpIGx0ZScpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc29sZS5sb2coJ3VuZXhwZWN0ZWQgbnVtYmVyIG9mIGNoaWxkcmVuIGluIGx0ZScpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLWx0ZScsIFF0aUx0ZSk7XG4iLCAiaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBTY29yaW5nSGVscGVyIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL3Njb3JpbmctaGVscGVyJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBjbGFzcyBRdGlNYXBSZXNwb25zZSBleHRlbmRzIFF0aUV4cHJlc3Npb248bnVtYmVyPiB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KSBpZGVudGlmaWVyOiBzdHJpbmc7XG5cbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpOiBudW1iZXIge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gdGhpcy5hc3Nlc3NtZW50SXRlbS5nZXRSZXNwb25zZSh0aGlzLmlkZW50aWZpZXIpO1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIGNvbnNvbGUud2FybihgUmVzcG9uc2UgJHt0aGlzLmlkZW50aWZpZXJ9IGNhbiBub3QgYmUgZm91bmRgKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBtYXBwaW5nID0gcmVzcG9uc2UubWFwcGluZztcbiAgICBjb25zdCBjYW5kaWRhdGVSZXNwb25zZXMgPSAhQXJyYXkuaXNBcnJheShyZXNwb25zZS52YWx1ZSkgPyBbcmVzcG9uc2UudmFsdWVdIDogcmVzcG9uc2UudmFsdWU7XG4gICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgZm9yIChjb25zdCBjYW5kaWRhdGVSZXNwb25zZSBvZiBjYW5kaWRhdGVSZXNwb25zZXMpIHtcbiAgICAgIGNvbnN0IG1hcHBlZFZhbHVlID0gbWFwcGluZy5tYXBFbnRyaWVzLmZpbmQoZW50cnkgPT4ge1xuICAgICAgICByZXR1cm4gU2NvcmluZ0hlbHBlci5jb21wYXJlU2luZ2xlVmFsdWVzKGVudHJ5Lm1hcEtleSwgY2FuZGlkYXRlUmVzcG9uc2UsIHJlc3BvbnNlLmJhc2VUeXBlKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKCEobWFwcGVkVmFsdWUgPT0gbnVsbCB8fCBtYXBwZWRWYWx1ZS5tYXBwZWRWYWx1ZSA9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgIHJlc3VsdCArPSBtYXBwZWRWYWx1ZS5tYXBwZWRWYWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCArPSBtYXBwaW5nLmRlZmF1bHRWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG1hcHBpbmcubG93ZXJCb3VuZCAhPSBudWxsKSB7XG4gICAgICByZXN1bHQgPSBNYXRoLm1heChtYXBwaW5nLmxvd2VyQm91bmQsIHJlc3VsdCk7XG4gICAgfVxuICAgIGlmIChtYXBwaW5nLnVwcGVyQm91bmQgIT0gbnVsbCkge1xuICAgICAgcmVzdWx0ID0gTWF0aC5taW4obWFwcGluZy51cHBlckJvdW5kLCByZXN1bHQpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLW1hcC1yZXNwb25zZScsIFF0aU1hcFJlc3BvbnNlKTtcbiIsICJpbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gXCJsaXQvZGVjb3JhdG9ycy5qc1wiO1xuaW1wb3J0IHsgTGl0RWxlbWVudCB9IGZyb20gXCJsaXRcIjtcblxuZXhwb3J0IGNsYXNzIFF0aU1hcHBpbmcgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiBcImRlZmF1bHQtdmFsdWVcIiwgdHlwZTogTnVtYmVyIH0pIGRlZmF1bHRWYWx1ZTogbnVtYmVyID0gMDtcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiBcImxvd2VyLWJvdW5kXCIsIHR5cGU6IE51bWJlciB9KSBsb3dlckJvdW5kOiBudW1iZXI7XG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogXCJ1cHBlci1ib3VuZFwiLCB0eXBlOiBOdW1iZXIgfSkgdXBwZXJCb3VuZDogbnVtYmVyO1xuXG4gIFxuICBwdWJsaWMgZ2V0IG1hcEVudHJpZXMoKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsKFwicXRpLW1hcC1lbnRyeVwiKSkubWFwKChlbCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWFwS2V5OiBlbC5nZXRBdHRyaWJ1dGUoXCJtYXAta2V5XCIpLFxuICAgICAgICBtYXBwZWRWYWx1ZTogK2VsLmdldEF0dHJpYnV0ZShcIm1hcHBlZC12YWx1ZVwiKSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwicXRpLW1hcHBpbmdcIiwgUXRpTWFwcGluZyk7XG4iLCAiaW1wb3J0IHsgUmVzcG9uc2VWYXJpYWJsZSB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBTY29yaW5nSGVscGVyIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL3Njb3JpbmctaGVscGVyJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBjbGFzcyBRdGlNYXRjaCBleHRlbmRzIFF0aUV4cHJlc3Npb248Ym9vbGVhbj4ge1xuICAvL1BLIDogRklYTUUuXG4gIC8vIFRoaXMgd2FzIGEgbGl0dGxlIGV4cGVyaW1lbnQgaWYgd2UgY291bGQgY2FsbCB0aGUgbWF0Y2ggZnVuY3Rpb24gYXMgYSBzdGF0aWMgZnVuY3Rpb24sXG4gIC8vIFRoaXMgY2FuIGJlIHVzZWQgZm9yIGFsbCBraW5kIG9mIHRoaW5ncywgYnV0IG5vdyBlc3BlY2lhbGx5IGZvciB1c2UgaW5cbiAgLy8gcXRpLXJlc3BvbnNlLWNvbmRpdGlvbi1zY3JpcHRcbiAgLy8gaW4gd2hpY2ggd2UgcGFzcyB0aGUgZXhwcmVzc2lvbnMgYXMgcHVyZSBmdW5jdGlvbnMsIGFuZCBob3BlIGZvciB0aGUgYmVzdC5cbiAgLy8gU0FETFksIHRoZSBnZXRWYXJpYWJsZXMgdGhyb3dzIHJvZXQgaW4gZGUgZXRlbi4uIHdlZXQgbm9nIG5pZXQgcHJlY2llcyBob2UgZGV6ZSB3ZXJrdC5cbiAgLy8gTWFhciBpayBnYSBlcmluIGR1aWtlbi5cbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpIHtcbiAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDIpIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0VmFyaWFibGVzKCkgYXMgUmVzcG9uc2VWYXJpYWJsZVtdO1xuICAgICAgY29uc3QgdmFsdWVUb01hcCA9IHZhbHVlc1swXTtcbiAgICAgIGNvbnN0IGNvcnJlY3RWYWx1ZUluZm8gPSB2YWx1ZXNbMV07XG4gICAgICByZXR1cm4gUXRpTWF0Y2gubWF0Y2godmFsdWVUb01hcCwgY29ycmVjdFZhbHVlSW5mbyk7XG4gICAgfVxuXG4gICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBudW1iZXIgb2YgY2hpbGRyZW4gaW4gbWF0Y2gnKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgbWF0Y2godmFsdWVUb01hcDogUmVzcG9uc2VWYXJpYWJsZSwgY29ycmVjdFZhbHVlSW5mbzogUmVzcG9uc2VWYXJpYWJsZSkge1xuICAgIHN3aXRjaCAoY29ycmVjdFZhbHVlSW5mby5jYXJkaW5hbGl0eSkge1xuICAgICAgY2FzZSAnc2luZ2xlJzoge1xuICAgICAgICBpZiAodmFsdWVUb01hcC52YWx1ZSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZVRvTWFwLnZhbHVlKSB8fCBBcnJheS5pc0FycmF5KGNvcnJlY3RWYWx1ZUluZm8udmFsdWUpKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBjYXJkaW5hbGl0eSBpbiBxdGkgbWF0Y2gnKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFNjb3JpbmdIZWxwZXIuY29tcGFyZVNpbmdsZVZhbHVlcyhcbiAgICAgICAgICB2YWx1ZVRvTWFwLnZhbHVlPy50b1N0cmluZygpLFxuICAgICAgICAgIGNvcnJlY3RWYWx1ZUluZm8udmFsdWUudG9TdHJpbmcoKSxcbiAgICAgICAgICBjb3JyZWN0VmFsdWVJbmZvLmJhc2VUeXBlXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ29yZGVyZWQnOiB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZVRvTWFwLnZhbHVlKSB8fCAhQXJyYXkuaXNBcnJheShjb3JyZWN0VmFsdWVJbmZvLnZhbHVlKSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgY2FyZGluYWxpdHkgaW4gcXRpIG1hdGNoJyk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZVRvTWFwLnZhbHVlLmxlbmd0aCAhPT0gY29ycmVjdFZhbHVlSW5mby52YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZVRvTWFwLnZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gU2NvcmluZ0hlbHBlci5jb21wYXJlU2luZ2xlVmFsdWVzKFxuICAgICAgICAgICAgY29ycmVjdFZhbHVlSW5mby52YWx1ZVtpXSxcbiAgICAgICAgICAgIHZhbHVlVG9NYXAudmFsdWVbaV0sXG4gICAgICAgICAgICBjb3JyZWN0VmFsdWVJbmZvLmJhc2VUeXBlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnbXVsdGlwbGUnOiB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZVRvTWFwLnZhbHVlKSB8fCAhQXJyYXkuaXNBcnJheShjb3JyZWN0VmFsdWVJbmZvLnZhbHVlKSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgY2FyZGluYWxpdHkgaW4gcXRpIG1hdGNoJyk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZVRvTWFwLnZhbHVlLmxlbmd0aCAhPT0gY29ycmVjdFZhbHVlSW5mby52YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGFuc3dlckluZGV4ID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBjb3JyZWN0QW5zd2VyIG9mIGNvcnJlY3RWYWx1ZUluZm8udmFsdWUpIHtcbiAgICAgICAgICBsZXQgbWF0Y2hpbmdWYWx1ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgICAgICAgY29uc3QgYXJyID0gWy4uLnZhbHVlVG9NYXAudmFsdWVdO1xuICAgICAgICAgIGZvciAoY29uc3QgbXYgb2YgYXJyKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBTY29yaW5nSGVscGVyLmNvbXBhcmVTaW5nbGVWYWx1ZXMoY29ycmVjdEFuc3dlciwgbXYsIGNvcnJlY3RWYWx1ZUluZm8uYmFzZVR5cGUpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICBtYXRjaGluZ1ZhbHVlID0gbXY7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobWF0Y2hpbmdWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgKGFyciBhcyBzdHJpbmdbXSkuc3BsaWNlKGFyci5pbmRleE9mKG1hdGNoaW5nVmFsdWUpLCAxKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhbnN3ZXJJbmRleCsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIGNhcmRpbmFsaXR5IGluIHF0aSBtYXRjaCcpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLW1hdGNoJywgUXRpTWF0Y2gpO1xuIiwgImltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxuZXhwb3J0IGNsYXNzIFF0aU1lbWJlciBleHRlbmRzIFF0aUV4cHJlc3Npb248Ym9vbGVhbiB8IG51bGw+IHtcbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpIHtcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldFZhcmlhYmxlcygpIGFzIFJlc3BvbnNlVmFyaWFibGVbXTtcblxuICAgIGlmICghKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAyKSkge1xuICAgICAgY29uc29sZS53YXJuKCdUaGUgbWVtYmVyIG9wZXJhdG9yIHRha2VzIHR3byBzdWItZXhwcmVzc2lvbnMnKTtcbiAgICB9XG5cbiAgICBjb25zdCBbdmFsdWUxLCB2YWx1ZTJdID0gdmFsdWVzO1xuXG4gICAgaWYgKCEodmFsdWUxLmJhc2VUeXBlID09PSB2YWx1ZTIuYmFzZVR5cGUpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1doaWNoIG11c3QgYm90aCBoYXZlIHRoZSBzYW1lIGJhc2UtdHlwZScpO1xuICAgIH1cbiAgICBpZiAoISh2YWx1ZTIuY2FyZGluYWxpdHkgPT09ICdtdWx0aXBsZScgfHwgdmFsdWUyLmNhcmRpbmFsaXR5ID09PSAnb3JkZXJlZCcpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ2FuZCB0aGUgc2Vjb25kIG11c3QgYmUgYSBtdWx0aXBsZSBvciBvcmRlcmVkIGNvbnRhaW5lcicpO1xuICAgIH1cbiAgICBpZiAodmFsdWUxLmJhc2VUeXBlID09PSAnZmxvYXQnIHx8IHZhbHVlMi5iYXNlVHlwZSA9PT0gJ2Zsb2F0Jykge1xuICAgICAgY29uc29sZS53YXJuKCdUaGUgbWVtYmVyIG9wZXJhdG9yIHNob3VsZCBub3QgYmUgdXNlZCBvbiBzdWItZXhwcmVzc2lvbnMgd2l0aCBhIGJhc2UtdHlwZSBvZiBmbG9hdCcpO1xuICAgIH1cbiAgICBpZiAodmFsdWUxLmJhc2VUeXBlID09PSAnZHVyYXRpb24nIHx8IHZhbHVlMi5iYXNlVHlwZSA9PT0gJ2R1cmF0aW9uJykge1xuICAgICAgY29uc29sZS53YXJuKCdJdCBtdXN0IG5vdCBiZSB1c2VkIG9uIHN1Yi1leHByZXNzaW9ucyB3aXRoIGEgYmFzZS10eXBlIG9mIGR1cmF0aW9uJyk7XG4gICAgfVxuXG4gICAgLy8gSWYgZWl0aGVyIHN1Yi1leHByZXNzaW9uIGlzIE5VTEwgdGhlbiB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRvciBpcyBOVUxMXG4gICAgaWYgKHZhbHVlMS52YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZTIudmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIFRoZSByZXN1bHQgaXMgYSBzaW5nbGUgYm9vbGVhbiB3aXRoIGEgdmFsdWUgb2YgJ3RydWUnIGlmIHRoZSB2YWx1ZSBnaXZlbiBieSB0aGUgZmlyc3Qgc3ViLWV4cHJlc3Npb24gaXMgaW4gdGhlIGNvbnRhaW5lciBkZWZpbmVkIGJ5IHRoZSBzZWNvbmQgc3ViLWV4cHJlc3Npb24uXG4gICAgY29uc3QgcHJvamVjdGlvbjEgPSB2YWx1ZTEudmFsdWUgYXMgc3RyaW5nO1xuICAgIGNvbnN0IHByb2plY3Rpb24yID0gdmFsdWUyLnZhbHVlIGFzIHN0cmluZ1tdO1xuICAgIHJldHVybiBwcm9qZWN0aW9uMi5pbmNsdWRlcyhwcm9qZWN0aW9uMSk7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktbWVtYmVyJywgUXRpTWVtYmVyKTtcbiIsICJpbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlLCBWYXJpYWJsZURlY2xhcmF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5leHBvcnQgY2xhc3MgUXRpTXVsdGlwbGUgZXh0ZW5kcyBRdGlFeHByZXNzaW9uPFZhcmlhYmxlRGVjbGFyYXRpb248c3RyaW5nIHwgc3RyaW5nW10+W10+IHtcbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpOiBSZXNwb25zZVZhcmlhYmxlW10ge1xuICAgIGNvbnN0IHZhcmlhYmxlcyA9IHRoaXMuZ2V0VmFyaWFibGVzKCkgYXMgUmVzcG9uc2VWYXJpYWJsZVtdO1xuICAgIGlmICh2YXJpYWJsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIG51bWJlciBvZiBjaGlsZHJlbiBpbiBxdGkgbXVsdGlwbGUnKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHZhcmlhYmxlIG9mIHZhcmlhYmxlcykge1xuICAgICAgaWYgKHZhcmlhYmxlLmNhcmRpbmFsaXR5ICE9PSAnbXVsdGlwbGUnICYmIHZhcmlhYmxlLmNhcmRpbmFsaXR5ICE9PSAnc2luZ2xlJykge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIGNhcmRpbmFsaXR5IGluIHF0aSBtdWx0aXBsZScpO1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gY29uc3QgdmFsdWVzID0gdmFyaWFibGVzLm1hcCh2ID0+IHYudmFsdWUpO1xuICAgIC8vIGNvbnNvbGUubG9nKHZhcmlhYmxlcyk7XG4gICAgLy8gY29uc3QgZmxhdHRlbmVkQXJyYXkgPSB2YWx1ZXMucmVkdWNlKChhY2M6IHN0cmluZ1tdLCB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pID0+IHtcbiAgICAvLyAgIHJldHVybiBhY2MuY29uY2F0KEFycmF5LmlzQXJyYXkodmFsdWUpID8gWy4uLnZhbHVlXSA6IHZhbHVlKTtcbiAgICAvLyB9LCBbXSk7XG4gICAgLy8gcmV0dXJuIGZsYXR0ZW5lZEFycmF5O1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlcztcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1tdWx0aXBsZScsIFF0aU11bHRpcGxlKTtcbiIsICJpbXBvcnQgeyBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBjbGFzcyBRdGlOb3QgZXh0ZW5kcyBRdGlFeHByZXNzaW9uPGJvb2xlYW4+IHtcbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYCR7c3VwZXIucmVuZGVyKCl9YDtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKSB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IHRoaXMuZmlyc3RFbGVtZW50Q2hpbGQgYXMgUXRpRXhwcmVzc2lvbjxib29sZWFuPjtcbiAgICBjb25zdCByZXN1bHQgPSBleHByZXNzaW9uLmNhbGN1bGF0ZSgpIGFzIGJvb2xlYW47XG4gICAgcmV0dXJuICFyZXN1bHQ7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktbm90JywgUXRpTm90KTtcbiIsICJpbXBvcnQgeyBRdGlDb25kaXRpb25FeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWNvbmRpdGlvbi1leHByZXNzaW9uJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBjbGFzcyBRdGlPciBleHRlbmRzIFF0aUNvbmRpdGlvbkV4cHJlc3Npb24ge1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCkge1xuICAgIC8vIGNoaWxkcmVuIGNhbiBiZSBhIG1peCBvZiBxdGktZXhwcmVzc2lvbiBhbmQgcXRpLWNvbmRpdGlvbi1leHByZXNzaW9uXG4gICAgY29uc3QgdmFsdWVzID0gQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKS5tYXAoYyA9PiB7XG4gICAgICBjb25zdCBjb25kaXRpb24gPSBjIGFzIFF0aUV4cHJlc3Npb248YW55PjtcbiAgICAgIGlmICghY29uZGl0aW9uLmNhbGN1bGF0ZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiRWxlbWVudCBkb2Vzbid0IGltcGxlbWVudCBRdGlDb25kaXRpb25FeHByZXNzaW9uXCIpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGxldCB2YWx1ZSA9IGNvbmRpdGlvbi5jYWxjdWxhdGUoKSBhcyBCb29sZWFuO1xuICAgICAgLy8gY29udmVydCBzdHJpbmcgdmFsdWUgdG8gYm9vbGVhbiBhbmQgcmV0dXJuIG51bGwgaWYgbm90IHBvc3NpYmxlXG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAodmFsdWUgPT09ICd0cnVlJykge1xuICAgICAgICAgIHZhbHVlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJ2ZhbHNlJykge1xuICAgICAgICAgIHZhbHVlID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCB2YWx1ZSBpbiBxdGktb3IsIGV4cGVjdGVkIGJvb2xlYW4nKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0pO1xuICAgIHJldHVybiB2YWx1ZXMuc29tZShlID0+IHtcbiAgICAgIHJldHVybiB0eXBlb2YgZSA9PT0gJ2Jvb2xlYW4nICYmIGU7XG4gICAgfSk7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktb3InLCBRdGlPcik7XG4iLCAiaW1wb3J0IHsgUmVzcG9uc2VWYXJpYWJsZSB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuZXhwb3J0IGNsYXNzIFF0aU9yZGVyZWQgZXh0ZW5kcyBRdGlFeHByZXNzaW9uPFJlc3BvbnNlVmFyaWFibGVbXT4ge1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCk6IFJlc3BvbnNlVmFyaWFibGVbXSB7XG4gICAgY29uc3QgdmFyaWFibGVzID0gdGhpcy5nZXRWYXJpYWJsZXMoKSBhcyBSZXNwb25zZVZhcmlhYmxlW107XG4gICAgaWYgKHZhcmlhYmxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgbnVtYmVyIG9mIGNoaWxkcmVuIGluIHF0aSBtdWx0aXBsZScpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdmFyaWFibGUgb2YgdmFyaWFibGVzKSB7XG4gICAgICBpZiAodmFyaWFibGUuY2FyZGluYWxpdHkgIT09ICdvcmRlcmVkJyAmJiB2YXJpYWJsZS5jYXJkaW5hbGl0eSAhPT0gJ3NpbmdsZScpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBjYXJkaW5hbGl0eSBpbiBxdGkgb3JkZXJlZCcpO1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YXJpYWJsZXM7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktb3JkZXJlZCcsIFF0aU9yZGVyZWQpO1xuIiwgImltcG9ydCB7IGNvbnN1bWUgfSBmcm9tICdAbGl0L2NvbnRleHQnO1xuaW1wb3J0IHsgTGl0RWxlbWVudCwgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBwcm9wZXJ0eSwgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBJdGVtQ29udGV4dCwgaXRlbUNvbnRleHQgfSBmcm9tICdzcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1hc3Nlc3NtZW50LWl0ZW0vcXRpLWFzc2Vzc21lbnQtaXRlbS5jb250ZXh0JztcbmltcG9ydCB7IFF0aUFzc2Vzc21lbnRJdGVtIH0gZnJvbSAnLi4vLi4vLi4vcXRpLWFzc2Vzc21lbnQtaXRlbS9xdGktYXNzZXNzbWVudC1pdGVtJztcblxuZXhwb3J0IGNsYXNzIFF0UHJpbnRlZFZhcmlhYmxlIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KVxuICBpZGVudGlmaWVyOiBzdHJpbmc7XG5cbiAgQGNvbnN1bWUoeyBjb250ZXh0OiBpdGVtQ29udGV4dCwgc3Vic2NyaWJlOiB0cnVlIH0pXG4gIEBzdGF0ZSgpXG4gIHB1YmxpYyBpdGVtQ29udGV4dD86IEl0ZW1Db250ZXh0O1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaXRlbUNvbnRleHQ/LnZhcmlhYmxlcy5maW5kKHYgPT4gdi5pZGVudGlmaWVyID09PSB0aGlzLmlkZW50aWZpZXIpPy52YWx1ZTtcbiAgICByZXR1cm4gaHRtbGAke0pTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCAyKX1gO1xuICB9XG5cbiAgLy8gY29uc3RydWN0b3IoKSB7XG4gIC8vICAgc3VwZXIoKTtcbiAgLy8gICBjb25zdCBhc3Nlc3NtZW50SXRlbSA9IHRoaXMuY2xvc2VzdCgncXRpLWFzc2Vzc21lbnQtaXRlbScpIGFzIFF0aUFzc2Vzc21lbnRJdGVtO1xuICAvLyAgIGFzc2Vzc21lbnRJdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1yZXNwb25zZS1wcm9jZXNzZWQnLCAoKSA9PiB7XG4gIC8vICAgICB0aGlzLnZhbHVlID0gdGhpcy5jYWxjdWxhdGUoKSBhcyBzdHJpbmc7XG4gIC8vICAgfSk7XG4gIC8vIH1cblxuICAvLyBwdWJsaWMgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gIC8vICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgLy8gICB0aGlzLnZhbHVlID0gdGhpcy5jYWxjdWxhdGUoKSBhcyBzdHJpbmc7XG4gIC8vIH1cblxuICBwdWJsaWMgY2FsY3VsYXRlKCk6IFJlYWRvbmx5PHN0cmluZyB8IHN0cmluZ1tdPiB7XG4gICAgY29uc3QgYXNzZXNzbWVudEl0ZW0gPSB0aGlzLmNsb3Nlc3QoJ3F0aS1hc3Nlc3NtZW50LWl0ZW0nKSBhcyBRdGlBc3Nlc3NtZW50SXRlbTtcbiAgICBjb25zdCBpZGVudGlmaWVyID0gdGhpcy5pZGVudGlmaWVyO1xuICAgIGNvbnN0IHJlc3VsdCA9IGFzc2Vzc21lbnRJdGVtLmdldFZhcmlhYmxlKGlkZW50aWZpZXIpLnZhbHVlO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktcHJpbnRlZC12YXJpYWJsZScsIFF0UHJpbnRlZFZhcmlhYmxlKTtcbiIsICJpbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBjbGFzcyBRdGlQcm9kdWN0IGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxudW1iZXI+IHtcbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpIHtcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldFZhcmlhYmxlcygpIGFzIFJlc3BvbnNlVmFyaWFibGVbXTtcbiAgICBjb25zdCBwcm9kdWN0ID0gdmFsdWVzLnJlZHVjZSgoYWNjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSkgPT4ge1xuICAgICAgaWYgKGN1cnJlbnRWYWx1ZS5iYXNlVHlwZSA9PSAnZmxvYXQnIHx8IGN1cnJlbnRWYWx1ZS5iYXNlVHlwZSA9PSAnaW50ZWdlcicpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gYWNjdW11bGF0b3IgKiBwYXJzZUludChjdXJyZW50VmFsdWUudmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKGBjYW4gbm90IGNvbnZlcnQgdG8gbnVtYmVyYCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgaGFzIGFub3RoZXIgYmFzZVR5cGUgJHtjdXJyZW50VmFsdWUuYmFzZVR5cGV9YCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gICAgfSwgMSk7XG4gICAgcmV0dXJuIHByb2R1Y3Q7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktcHJvZHVjdCcsIFF0aVByb2R1Y3QpO1xuIiwgImltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgUmVzcG9uc2VWYXJpYWJsZSB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBTY29yaW5nSGVscGVyIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL3Njb3JpbmctaGVscGVyJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBjbGFzcyBRdGlTdHJpbmdNYXRjaCBleHRlbmRzIFF0aUV4cHJlc3Npb248Ym9vbGVhbj4ge1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2Nhc2Utc2Vuc2l0aXZlJyB9KSBjYXNlU2Vuc2l0aXZlID0gJ3RydWUnO1xuXG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKSB7XG4gICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAyKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldFZhcmlhYmxlcygpIGFzIFJlc3BvbnNlVmFyaWFibGVbXTtcbiAgICAgIGNvbnN0IHZhbHVlMSA9IHZhbHVlc1swXTtcbiAgICAgIGNvbnN0IHZhbHVlMiA9IHZhbHVlc1sxXTtcbiAgICAgIGlmIChcbiAgICAgICAgdmFsdWUxLmNhcmRpbmFsaXR5ICE9PSAnc2luZ2xlJyB8fFxuICAgICAgICB2YWx1ZTIuY2FyZGluYWxpdHkgIT09ICdzaW5nbGUnIHx8XG4gICAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUxLnZhbHVlKSB8fFxuICAgICAgICBBcnJheS5pc0FycmF5KHZhbHVlMi52YWx1ZSlcbiAgICAgICkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIGNhcmRpbmFsaXR5IGluIHF0aSBzdHJpbmctbWF0Y2gnKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgY29uc3QgdjEgPSB0aGlzLmNhc2VTZW5zaXRpdmUgPT09ICd0cnVlJyA/IHZhbHVlMS52YWx1ZSA6ICh2YWx1ZTEudmFsdWUgYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgdjIgPSB0aGlzLmNhc2VTZW5zaXRpdmUgPT09ICd0cnVlJyA/IHZhbHVlMi52YWx1ZSA6ICh2YWx1ZTIudmFsdWUgYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIFNjb3JpbmdIZWxwZXIuY29tcGFyZVNpbmdsZVZhbHVlcyh2MSBhcyBzdHJpbmcsIHYyIGFzIHN0cmluZywgdmFsdWUxLmJhc2VUeXBlKTtcbiAgICB9XG4gICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBudW1iZXIgb2YgY2hpbGRyZW4gaW4gcXRpLXN0cmluZy1tYXRjaCcpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLXN0cmluZy1tYXRjaCcsIFF0aVN0cmluZ01hdGNoKTtcbiIsICJpbXBvcnQgeyBRdGlFeHByZXNzaW9uLCBRdGlFeHByZXNzaW9uQmFzZSB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxuZXhwb3J0IGNsYXNzIFF0aVN1bSBleHRlbmRzIFF0aUV4cHJlc3Npb248bnVtYmVyPiB7XG4gIHByaXZhdGUgX2V4cHJlc3Npb246IFF0aVN1bUV4cHJlc3Npb247XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fZXhwcmVzc2lvbiA9IG5ldyBRdGlTdW1FeHByZXNzaW9uKEFycmF5LmZyb20odGhpcy5jaGlsZHJlbiBhcyB1bmtub3duIGFzIFF0aUV4cHJlc3Npb25CYXNlPG51bWJlcj5bXSkpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpIHtcbiAgICAvLyBjaGlsZHJlbiBjYW4gYmUgYSBtaXggb2YgcXRpLWV4cHJlc3Npb24gYW5kIHF0aS1jb25kaXRpb24tZXhwcmVzc2lvblxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZXhwcmVzc2lvbi5jYWxjdWxhdGUoKTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFF0aVN1bUV4cHJlc3Npb24gaW1wbGVtZW50cyBRdGlFeHByZXNzaW9uQmFzZTxudW1iZXI+IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBleHByZXNzaW9uczogUXRpRXhwcmVzc2lvbkJhc2U8bnVtYmVyPltdKSB7fVxuXG4gIHB1YmxpYyBjYWxjdWxhdGUoKSB7XG4gICAgY29uc3QgdmFsdWVzID0gdGhpcy5leHByZXNzaW9ucy5tYXAoYyA9PiB7XG4gICAgICBpZiAoIWMuY2FsY3VsYXRlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFbGVtZW50IGRvZXNuJ3QgaW1wbGVtZW50IFF0aUNvbmRpdGlvbkV4cHJlc3Npb25cIik7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgdmFsdWUgPSBjLmNhbGN1bGF0ZSgpO1xuICAgICAgaWYgKE51bWJlci5pc05hTih2YWx1ZSkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCB2YWx1ZSBpbiBxdGktc3VtLCBleHBlY3RlZCBudW1iZXInKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBOdW1iZXIodmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiB2YWx1ZXMucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCk7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktc3VtJywgUXRpU3VtKTtcbiIsICJpbXBvcnQgeyBRdGlBc3Nlc3NtZW50SXRlbSB9IGZyb20gJy4uLy4uLy4uL3F0aS1hc3Nlc3NtZW50LWl0ZW0vcXRpLWFzc2Vzc21lbnQtaXRlbSc7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuXG5leHBvcnQgY2xhc3MgUXRpVmFyaWFibGUgZXh0ZW5kcyBRdGlFeHByZXNzaW9uPHN0cmluZyB8IHN0cmluZ1tdPiB7XG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKSB7XG4gICAgY29uc3QgaWRlbnRpZmllciA9IHRoaXMuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJyk7XG4gICAgY29uc3QgcmVzdWx0ID0gKHRoaXMuY2xvc2VzdCgncXRpLWFzc2Vzc21lbnQtaXRlbScpIGFzIFF0aUFzc2Vzc21lbnRJdGVtKS5nZXRWYXJpYWJsZShpZGVudGlmaWVyKS52YWx1ZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLXZhcmlhYmxlJywgUXRpVmFyaWFibGUpO1xuIiwgImltcG9ydCB7IGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgSW50ZXJhY3Rpb24gfSBmcm9tICcuLi9pbnRlcm5hbC9pbnRlcmFjdGlvbi9pbnRlcmFjdGlvbic7XG5pbXBvcnQgeyBJTVNwY2ksIE1vZHVsZVJlc29sdXRpb25Db25maWcsIFF0aVZhcmlhYmxlSlNPTiB9IGZyb20gJy4vaW50ZXJmYWNlJztcblxuZGVjbGFyZSBjb25zdCByZXF1aXJlanM6IGFueTtcbmRlY2xhcmUgY29uc3QgZGVmaW5lOiBhbnk7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktcG9ydGFibGUtY3VzdG9tLWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlQb3J0YWJsZUN1c3RvbUludGVyYWN0aW9uIGV4dGVuZHMgSW50ZXJhY3Rpb24ge1xuICBwcml2YXRlIGludGVydmFsSWQ6IGFueTtcbiAgcHJpdmF0ZSByYXdSZXNwb25zZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgcGNpOiBJTVNwY2k8dW5rbm93bj47XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdyZXNwb25zZS1pZGVudGlmaWVyJyB9KVxuICByZXNwb25zZUlkZW50aWZpZXI6IHN0cmluZztcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ21vZHVsZScgfSlcbiAgbW9kdWxlOiBzdHJpbmc7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdjdXN0b20taW50ZXJhY3Rpb24tdHlwZS1pZGVudGlmaWVyJyB9KVxuICBjdXN0b21JbnRlcmFjdGlvblR5cGVJZGVudGlmaWVyOiBzdHJpbmc7XG5cbiAgQHN0YXRlKClcbiAgcHJpdmF0ZSBfZXJyb3JNZXNzYWdlOiBzdHJpbmcgPSBudWxsO1xuXG4gIHByaXZhdGUgY29udmVydFF0aVZhcmlhYmxlSlNPTihpbnB1dDogUXRpVmFyaWFibGVKU09OKTogc3RyaW5nIHwgc3RyaW5nW10ge1xuICAgIGZvciAoY29uc3QgdG9wTGV2ZWxLZXkgaW4gaW5wdXQpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgIGlmIChpbnB1dC5oYXNPd25Qcm9wZXJ0eSh0b3BMZXZlbEtleSkpIHtcbiAgICAgICAgY29uc3QgbmVzdGVkT2JqZWN0ID0gaW5wdXRbdG9wTGV2ZWxLZXkgYXMgJ2xpc3QnIHwgJ2Jhc2UnXTtcbiAgICAgICAgaWYgKG5lc3RlZE9iamVjdCkge1xuICAgICAgICAgIGZvciAoY29uc3QgbmVzdGVkS2V5IGluIG5lc3RlZE9iamVjdCkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgICAgICAgaWYgKG5lc3RlZE9iamVjdC5oYXNPd25Qcm9wZXJ0eShuZXN0ZWRLZXkpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbmVzdGVkT2JqZWN0W25lc3RlZEtleSBhcyBrZXlvZiB0eXBlb2YgbmVzdGVkT2JqZWN0XTtcbiAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm1hcChTdHJpbmcpOyAvLyBDb252ZXJ0IGVhY2ggZWxlbWVudCBpbiB0aGUgYXJyYXkgdG8gc3RyaW5nXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpOyAvLyBDb252ZXJ0IHRoZSBzaW5nbGUgdmFsdWUgdG8gc3RyaW5nXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0Q2hlY2tpbmcoKTogdm9pZCB7XG4gICAgLy8gYmVjYXVzZSB0aGUgcGNpIGRvZXNuJ3QgaGF2ZSBhIG1ldGhvZCB0byBjaGVjayBmb3IgY2hhbmdlcyB3ZSdsbCB1c2UgYW4gaW50ZXJ2YWxcbiAgICAvLyB0byBjaGVjayBpZiB0aGUgcmVzcG9uc2UgaGFzIGNoYW5nZWQuIElmIGNoYW5nZWQgd2UnbGwgc2F2ZSB0aGUgcmVzcG9uc2VcbiAgICB0aGlzLmludGVydmFsSWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IHRoaXMucGNpLmdldFJlc3BvbnNlKCk7XG4gICAgICBjb25zdCBuZXdSZXNwb25zZSA9IHRoaXMucGNpLmdldFJlc3BvbnNlKCk7XG4gICAgICBjb25zdCBzdHJpbmdpZmllZCA9IEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlKTtcbiAgICAgIGlmIChzdHJpbmdpZmllZCAhPT0gdGhpcy5yYXdSZXNwb25zZSkge1xuICAgICAgICB0aGlzLnJhd1Jlc3BvbnNlID0gc3RyaW5naWZpZWQ7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jb252ZXJ0UXRpVmFyaWFibGVKU09OKG5ld1Jlc3BvbnNlKTtcbiAgICAgICAgdGhpcy5yZXNwb25zZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnNhdmVSZXNwb25zZSh2YWx1ZSk7XG4gICAgICB9XG4gICAgfSwgMjAwKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcENoZWNraW5nKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmludGVydmFsSWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsSWQpO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlOyAvLyBGT1IgTk9XXG4gIH1cbiAgc2V0IHJlc3BvbnNlKHZhbDogUmVhZG9ubHk8c3RyaW5nIHwgc3RyaW5nW10+KSB7XG4gICAgLy8gT25seSBzZXQgc3RhdGUgaXMgc3VwcG9ydGVkIGluIGEgUENJXG4gIH1cblxuICBnZXRUQU9Db25maWcobm9kZSkge1xuICAgIGNvbnN0IGEgPSBub2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJ3Byb3BlcnRpZXMnKTtcbiAgICBsZXQgY29uZmlnID0ge307XG5cbiAgICBjb25zdCBnZXRQcm9wZXJ0eVZhbHVlID0gZWwgPT4ge1xuICAgICAgY29uc3QgcHJvcGVydHkgPSB7fTtcbiAgICAgIGNvbnN0IGtleSA9IGVsLmdldEF0dHJpYnV0ZSgna2V5Jyk7XG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gQXJyYXkuZnJvbShlbC5jaGlsZHJlbik7XG4gICAgICAgIGNvbnN0IGFsbEtleSA9IGNoaWxkcmVuLm1hcCgoYzogSFRNTEVsZW1lbnQpID0+IGMuZ2V0QXR0cmlidXRlKCdrZXknKSk7XG4gICAgICAgIGNvbnN0IGlzQXJyYXkgPSBhbGxLZXkubGVuZ3RoID4gMCAmJiAhYWxsS2V5LmZpbmQoayA9PiAhTnVtYmVyLmlzSW50ZWdlcigraykpO1xuICAgICAgICBpZiAoaXNBcnJheSkge1xuICAgICAgICAgIHByb3BlcnR5W2tleV0gPSBjaGlsZHJlbi5tYXAoYyA9PiBnZXRDaGlsZFByb3BlcnRpZXMoYykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb3BlcnR5W2tleV0gPSBlbC50ZXh0Q29udGVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHByb3BlcnR5O1xuICAgIH07XG5cbiAgICBjb25zdCBnZXRDaGlsZFByb3BlcnRpZXMgPSAoZWwpOiB7fSB8IHZvaWQgPT4ge1xuICAgICAgaWYgKGVsKSB7XG4gICAgICAgIGxldCBwcm9wZXJ0aWVzID0ge307XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgZWwuY2hpbGRyZW4pIHtcbiAgICAgICAgICBwcm9wZXJ0aWVzID0geyAuLi5wcm9wZXJ0aWVzLCAuLi5nZXRQcm9wZXJ0eVZhbHVlKGNoaWxkKSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IHByb3BlcnRpZXMgb2YgYSkge1xuICAgICAgY29uc3Qga2V5ID0gcHJvcGVydGllcy5nZXRBdHRyaWJ1dGUoJ2tleScpO1xuICAgICAgaWYgKCFrZXkpIHtcbiAgICAgICAgY29uZmlnID0geyAuLi5jb25maWcsIC4uLmdldENoaWxkUHJvcGVydGllcyhwcm9wZXJ0aWVzKSB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICB9XG4gICAgY29uc29sZS5sb2coJ0NhbiBub3QgZmluZCBxdGktY3VzdG9tLWludGVyYWN0aW9uIGNvbmZpZycpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmVnaXN0ZXIocGNpOiBJTVNwY2k8dW5rbm93bj4pIHtcbiAgICB0aGlzLnBjaSA9IHBjaTtcblxuICAgIGNvbnN0IHR5cGUgPSB0aGlzLnBhcmVudEVsZW1lbnQudGFnTmFtZSA9PT0gJ1FUSS1DVVNUT00tSU5URVJBQ1RJT04nID8gJ1RBTycgOiAnSU1TJztcbiAgICBjb25zdCBkb206IEhUTUxFbGVtZW50ID1cbiAgICAgIHR5cGUgPT0gJ0lNUycgPyB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3F0aS1pbnRlcmFjdGlvbi1tYXJrdXAnKSA6IHRoaXMucXVlcnlTZWxlY3RvcignbWFya3VwJyk7XG4gICAgZG9tLmNsYXNzTGlzdC5hZGQoJ3F0aS1jdXN0b21JbnRlcmFjdGlvbicpO1xuXG4gICAgaWYgKHR5cGUgPT0gJ1RBTycgJiYgdGhpcy5xdWVyeVNlbGVjdG9yKCdwcm9wZXJ0aWVzJykpIHtcbiAgICAgICh0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3Byb3BlcnRpZXMnKSBhcyBIVE1MRWxlbWVudCkuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWc6IGFueSA9XG4gICAgICB0eXBlID09ICdJTVMnXG4gICAgICAgID8ge1xuICAgICAgICAgICAgcHJvcGVydGllczogdGhpcy5kYXRhc2V0LFxuICAgICAgICAgICAgb25yZWFkeTogKCkgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnb25yZWFkeScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgOiB0aGlzLmdldFRBT0NvbmZpZyh0aGlzKTtcblxuICAgIHR5cGUgPT0gJ0lNUydcbiAgICAgID8gcGNpLmdldEluc3RhbmNlKGRvbSwgY29uZmlnLCB1bmRlZmluZWQpXG4gICAgICA6IChwY2kgYXMgYW55KS5pbml0aWFsaXplKHRoaXMuY3VzdG9tSW50ZXJhY3Rpb25UeXBlSWRlbnRpZmllciwgZG9tLmZpcnN0RWxlbWVudENoaWxkLCBjb25maWcpO1xuXG4gICAgaWYgKHR5cGUgPT0gJ1RBTycpIHtcbiAgICAgIGNvbnN0IGxpbmtzID0gQXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpbmsnKSkubWFwKGFjYyA9PiBhY2MuZ2V0QXR0cmlidXRlKCdocmVmJykpO1xuICAgICAgbGlua3MuZm9yRWFjaChsaW5rID0+IHtcbiAgICAgICAgY29uc3Qgc3R5bGVzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpO1xuICAgICAgICBzdHlsZXMucmVsID0gJ3N0eWxlc2hlZXQnO1xuICAgICAgICBzdHlsZXMudHlwZSA9ICd0ZXh0L2Nzcyc7XG4gICAgICAgIHN0eWxlcy5tZWRpYSA9ICdzY3JlZW4nO1xuICAgICAgICBzdHlsZXMuaHJlZiA9IGxpbms7XG4gICAgICAgIGRvbS5hcHBlbmRDaGlsZChzdHlsZXMpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuc3RhcnRDaGVja2luZygpO1xuICB9XG5cbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICBjb25zdCByZXF1aXJlQ29uZmlnOiBNb2R1bGVSZXNvbHV0aW9uQ29uZmlnID0ge1xuICAgICAgY29udGV4dDogdGhpcy5jdXN0b21JbnRlcmFjdGlvblR5cGVJZGVudGlmaWVyLFxuICAgICAgY2F0Y2hFcnJvcjogdHJ1ZSxcbiAgICAgIHBhdGhzOiB7fVxuICAgIH07XG5cbiAgICAvLyBwazogYydlc3QgdHJlcyB1Z2x5Li4gdHlwZXNjcmlwdCB3aHl1bm9zcHJlYWQgYWRkIHByb3BzPyE/XG4gICAgaWYgKHdpbmRvd1sncmVxdWlyZVBhdGhzJ10gJiYgd2luZG93WydyZXF1aXJlU2hpbSddKSB7XG4gICAgICByZXF1aXJlQ29uZmlnWydwYXRocyddID0gd2luZG93WydyZXF1aXJlUGF0aHMnXTtcbiAgICAgIHJlcXVpcmVDb25maWdbJ3NoaW0nXSA9IHdpbmRvd1sncmVxdWlyZVNoaW0nXTtcbiAgICB9XG4gICAgaWYgKCFnbG9iYWxUaGlzLnJlcXVpcmUpIHtcbiAgICAgIHRoaXMuX2Vycm9yTWVzc2FnZSA9IGByZXF1aXJlanMgbm90IGZvdW5kLCBsb2FkIHdpdGggY2RuOiBodHRwczovL2NkbmpzLmNvbS9saWJyYXJpZXMvcmVxdWlyZS5qc2A7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIEluaXRpYWwgY2hlY2sgaW4gY2FzZSB0aGUgY2hpbGRyZW4gYXJlIGFscmVhZHkgcHJlc2VudFxuICAgIHRoaXMucmVnaXN0ZXJNb2R1bGVzKHJlcXVpcmVDb25maWcpLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgcmVxdWlyZVBDSSA9IHJlcXVpcmVqcy5jb25maWcocmVxdWlyZUNvbmZpZyk7XG5cbiAgICAgIHJlcXVpcmVQQ0koXG4gICAgICAgIFsncmVxdWlyZSddLFxuICAgICAgICByZXF1aXJlID0+IHtcbiAgICAgICAgICAhcmVxdWlyZS5kZWZpbmVkKCdxdGlDdXN0b21JbnRlcmFjdGlvbkNvbnRleHQnKSAmJlxuICAgICAgICAgICAgZGVmaW5lKCdxdGlDdXN0b21JbnRlcmFjdGlvbkNvbnRleHQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcmVnaXN0ZXI6IGN0eEEgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5yZWdpc3RlcihjdHhBKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG5vdGlmeVJlYWR5OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAvKiBvbmx5IHVzZWQgaW4gdGhlIFRBTyB2ZXJzaW9uICovXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgLy8gUEs6IHRoaXMgaXMgYSBoYWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBpbnRlcmFjdGlvbiBpcyBvbmx5IHJlZ2lzdGVyZWQgb25jZVxuICAgICAgICAgIC8vIElmIGl0IHdhcyBwcmV2aXNvdWx5IGxvYWRlZCwgdGhlIHJlZ2lzdGVyIHdpbGwgbm9nIGtpY2sgaW4sIGJlY2F1c2UgdGhlIGNsYXNzIGlzIGFscmVhZHkgZGVmaW5lZFxuICAgICAgICAgIC8vIGFuZCBpbiB0aGUgY29uc3RydWN0b3Igb2YgdGhlIFBDSSwgdGhlIHJlZ2lzdGVyIGlzIGNhbGxlZC5cbiAgICAgICAgICAvLyBTbyBub3cgaXQgaXMgYWxyZWFkbHkgZGVmaW5lZCwgd2UganVzdCByZWdpc3RlciBpdCBvdXJzZWx2ZXMuXG5cbiAgICAgICAgICBjb25zdCB3YXNQcmV2aW91c2x5TG9hZGVkID0gcmVxdWlyZS5kZWZpbmVkKHRoaXMubW9kdWxlKTtcblxuICAgICAgICAgIHJlcXVpcmUoW3RoaXMubW9kdWxlXSwgY3R4QSA9PiB7XG4gICAgICAgICAgICAvLyByZWdpc3RlciBpdCBiZWNhdXNlIGl0IHdhcyBwcmV2aW91c2x5IGxvYWRlZFxuICAgICAgICAgICAgd2FzUHJldmlvdXNseUxvYWRlZCAmJiB0aGlzLnJlZ2lzdGVyKGN0eEEpO1xuICAgICAgICAgIH0sIGVyciA9PiB7XG4gICAgICAgICAgICB0aGlzLl9lcnJvck1lc3NhZ2UgPSBlcnI7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVyciA9PiB7XG4gICAgICAgICAgdGhpcy5fZXJyb3JNZXNzYWdlID0gZXJyO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLnN0b3BDaGVja2luZygpO1xuICB9XG5cbiAgYXN5bmMgcmVnaXN0ZXJNb2R1bGVzKGNvbmZpZzogTW9kdWxlUmVzb2x1dGlvbkNvbmZpZykge1xuICAgIC8vIGdldCB0aGUgdmFsdWUgb2YgYXR0cmlidXRlOiBkYXRhLWJhc2UtdXJsXG4gICAgY29uc3QgYmFzZVVybCA9IHRoaXMuZ2V0QXR0cmlidXRlKCdkYXRhLWJhc2UtdXJsJyk7XG4gICAgaWYgKGJhc2VVcmwpIHtcbiAgICAgIGNvbnN0IG1vZHVsZVJlc29sdXRpb25QYXRoID0gYCR7YmFzZVVybH0vbW9kdWxlcy9tb2R1bGVfcmVzb2x1dGlvbi5qc2A7XG4gICAgICBjb25zdCBtb2R1bGVSZXNvbHV0aW9uRmFsbGJhY2tQYXRoID0gYCR7YmFzZVVybH0vbW9kdWxlcy9tb2R1bGVfcmVzb2x1dGlvbl9mYWxsYmFjay5qc2A7XG4gICAgICBpZiAobW9kdWxlUmVzb2x1dGlvblBhdGgpIHtcbiAgICAgICAgY29uc3QgcHJpbWFyeUNvbmZpZyA9IGF3YWl0IHRoaXMubG9hZENvbmZpZyhtb2R1bGVSZXNvbHV0aW9uUGF0aCwgYmFzZVVybCk7XG4gICAgICAgIGF3YWl0IHRoaXMubWVyZ2VDb25maWdzKGNvbmZpZywgcHJpbWFyeUNvbmZpZywgbW9kdWxlUmVzb2x1dGlvbkZhbGxiYWNrUGF0aCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEdldCB0aGUgcXRpLWludGVyYWN0aW9uLW1vZHVsZXMgZWxlbWVudFxuICAgIGNvbnN0IGludGVyYWN0aW9uTW9kdWxlcyA9IHRoaXMucXVlcnlTZWxlY3RvcigncXRpLWludGVyYWN0aW9uLW1vZHVsZXMnKTtcbiAgICBpZiAoaW50ZXJhY3Rpb25Nb2R1bGVzKSB7XG4gICAgICAvLyBHZXQgYWxsIHF0aS1pbnRlcmFjdGlvbi1tb2R1bGUgZWxlbWVudHNcbiAgICAgIGNvbnN0IG1vZHVsZXMgPSBpbnRlcmFjdGlvbk1vZHVsZXMucXVlcnlTZWxlY3RvckFsbCgncXRpLWludGVyYWN0aW9uLW1vZHVsZScpO1xuICAgICAgLy8gTG9vcCB0aHJvdWdoIGVhY2ggbW9kdWxlIGFuZCByZWdpc3RlciBpdCB3aXRoIFJlcXVpcmVKU1xuICAgICAgZm9yIChjb25zdCBtb2R1bGUgb2YgbW9kdWxlcykge1xuICAgICAgICBjb25zdCBtb2R1bGVJZCA9IG1vZHVsZS5nZXRBdHRyaWJ1dGUoJ2lkJyk7XG4gICAgICAgIGNvbnN0IHByaW1hcnlQYXRoID0gbW9kdWxlLmdldEF0dHJpYnV0ZSgncHJpbWFyeS1wYXRoJyk7XG4gICAgICAgIGNvbnN0IGZhbGxiYWNrUGF0aCA9IG1vZHVsZS5nZXRBdHRyaWJ1dGUoJ2ZhbGxiYWNrLXBhdGgnKTtcbiAgICAgICAgY29uc3QgcHJpbWFyeUNvbmZpZzogTW9kdWxlUmVzb2x1dGlvbkNvbmZpZyA9IHByaW1hcnlQYXRoXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIHBhdGhzOiB7IC4uLmNvbmZpZ1sncGF0aHMnXSwgLi4ueyBbbW9kdWxlSWRdOiB0aGlzLmdldFJlc29sdmFibGVQYXRoKHByaW1hcnlQYXRoLCBiYXNlVXJsKSB9IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IG51bGw7XG4gICAgICAgIGNvbnN0IGZhbGxiYWNrQ29uZmlnOiBNb2R1bGVSZXNvbHV0aW9uQ29uZmlnID0gZmFsbGJhY2tQYXRoXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIHBhdGhzOiB7IC4uLmNvbmZpZ1sncGF0aHMnXSwgLi4ueyBbbW9kdWxlSWRdOiB0aGlzLmdldFJlc29sdmFibGVQYXRoKGZhbGxiYWNrUGF0aCwgYmFzZVVybCkgfSB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiBudWxsO1xuICAgICAgICBpZiAobW9kdWxlSWQgJiYgcHJpbWFyeUNvbmZpZykge1xuICAgICAgICAgIGF3YWl0IHRoaXMubWVyZ2VDb25maWdzKGNvbmZpZywgcHJpbWFyeUNvbmZpZywgZmFsbGJhY2tDb25maWcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVEb3VibGVTbGFzaGVzKHN0cjogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2luZ2xlRm9yd2FyZFNsYXNoZXMgPSBzdHJcbiAgICAgIC5yZXBsYWNlKC8oW146XVxcLylcXC8rL2csICckMScpXG4gICAgICAucmVwbGFjZSgvXFwvXFwvL2csICcvJylcbiAgICAgIC5yZXBsYWNlKCdodHRwOi8nLCAnaHR0cDovLycpXG4gICAgICAucmVwbGFjZSgnaHR0cHM6LycsICdodHRwczovLycpO1xuICAgIHJldHVybiBzaW5nbGVGb3J3YXJkU2xhc2hlcztcbiAgfVxuXG4gIGxvYWRDb25maWcgPSBhc3luYyAodXJsOiBzdHJpbmcsIGJhc2VVcmw/OiBzdHJpbmcpOiBQcm9taXNlPE1vZHVsZVJlc29sdXRpb25Db25maWc+ID0+IHtcbiAgICB1cmwgPSB0aGlzLnJlbW92ZURvdWJsZVNsYXNoZXModXJsKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVxdWlyZUNvbmZpZyA9IGF3YWl0IGZldGNoKHVybCk7XG4gICAgICBpZiAocmVxdWlyZUNvbmZpZy5vaykge1xuICAgICAgICBjb25zdCBjb25maWcgPSBhd2FpdCByZXF1aXJlQ29uZmlnLmpzb24oKTtcbiAgICAgICAgY29uc3QgbW9kdWxlQ29uZyA9IGNvbmZpZyBhcyBNb2R1bGVSZXNvbHV0aW9uQ29uZmlnO1xuICAgICAgICBmb3IgKGNvbnN0IG1vZHVsZUlkIGluIG1vZHVsZUNvbmcucGF0aHMpIHtcbiAgICAgICAgICBpZiAoYmFzZVVybCkge1xuICAgICAgICAgICAgbW9kdWxlQ29uZy5wYXRoc1ttb2R1bGVJZF0gPSB0aGlzLmdldFJlc29sdmFibGVQYXRoKG1vZHVsZUNvbmcucGF0aHNbbW9kdWxlSWRdLCBiYXNlVXJsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1vZHVsZUNvbmc7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gZG8gbm90aGluZ1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICBnZXRSZXNvbHZhYmxlUGF0aCA9IChwYXRoOiBzdHJpbmcsIGJhc2VQYXRoPzogc3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIHBhdGg/LnRvTG9jYWxlTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnaHR0cCcpIHx8ICFiYXNlUGF0aFxuICAgICAgPyBwYXRoXG4gICAgICA6IHRoaXMucmVtb3ZlRG91YmxlU2xhc2hlcyhgJHtiYXNlUGF0aH0vJHtwYXRofWApO1xuICB9O1xuXG4gIG1lcmdlQ29uZmlncyA9IGFzeW5jIChcbiAgICBjb25maWc6IE1vZHVsZVJlc29sdXRpb25Db25maWcsXG4gICAgcHJpbWFyeUNvbmZpZzogTW9kdWxlUmVzb2x1dGlvbkNvbmZpZyxcbiAgICBmYWxsYmFjazogc3RyaW5nIHwgTW9kdWxlUmVzb2x1dGlvbkNvbmZpZ1xuICApID0+IHtcbiAgICBmb3IgKGNvbnN0IG1vZHVsZUlkIGluIHByaW1hcnlDb25maWc/LnBhdGhzKSB7XG4gICAgICAvLyBDaGVjayBpZiB0aGUga2V5IGlzIGFscmVhZHkgaW4gdGhlIGNvbmZpZ1xuICAgICAgaWYgKCFjb25maWcucGF0aHNbbW9kdWxlSWRdKSB7XG4gICAgICAgIC8vIGNoZWNrIGlmIGZpbGUgZXhpc3RzXG4gICAgICAgIGxldCBmYWlsZWRUb1Jlc29sdmUgPSBmYWxzZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBwYXRoV2l0aEV4dGVuc2lvbiA9IHByaW1hcnlDb25maWcucGF0aHNbbW9kdWxlSWRdPy50b0xvY2FsZUxvd2VyQ2FzZSgpLmVuZHNXaXRoKCcuanMnKVxuICAgICAgICAgICAgPyBwcmltYXJ5Q29uZmlnLnBhdGhzW21vZHVsZUlkXVxuICAgICAgICAgICAgOiBwcmltYXJ5Q29uZmlnLnBhdGhzW21vZHVsZUlkXSArICcuanMnO1xuICAgICAgICAgIGNvbnN0IG0gPSBhd2FpdCBmZXRjaChwYXRoV2l0aEV4dGVuc2lvbik7XG4gICAgICAgICAgaWYgKG0ub2spIHtcbiAgICAgICAgICAgIGNvbmZpZy5wYXRoc1ttb2R1bGVJZF0gPSBwcmltYXJ5Q29uZmlnLnBhdGhzW21vZHVsZUlkXS5yZXBsYWNlKC9cXC5qcyQvLCAnJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZhaWxlZFRvUmVzb2x2ZSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICBmYWlsZWRUb1Jlc29sdmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmYWlsZWRUb1Jlc29sdmUgJiYgZmFsbGJhY2spIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGZhbGxiYWNrID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgZmFsbGJhY2tDb25maWcgPSBhd2FpdCB0aGlzLmxvYWRDb25maWcoZmFsbGJhY2spO1xuICAgICAgICAgICAgICBpZiAoZmFsbGJhY2tDb25maWc/LnBhdGhzW21vZHVsZUlkXSkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5wYXRoc1ttb2R1bGVJZF0gPSBmYWxsYmFja0NvbmZpZy5wYXRoc1ttb2R1bGVJZF0ucmVwbGFjZSgvXFwuanMkLywgJycpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZmFsbGJhY2sgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBpZiAoZmFsbGJhY2s/LnBhdGhzW21vZHVsZUlkXSkge1xuICAgICAgICAgICAgICBjb25maWcucGF0aHNbbW9kdWxlSWRdID0gZmFsbGJhY2sucGF0aHNbbW9kdWxlSWRdLnJlcGxhY2UoL1xcLmpzJC8sICcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZmFpbGVkVG9SZXNvbHZlKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHJlc29sdmUgbW9kdWxlOiAnICsgbW9kdWxlSWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdD48L3Nsb3Q+JHt0aGlzLl9lcnJvck1lc3NhZ2UgJiZcbiAgICAgIGh0bWxgPGRpdiBzdHlsZT1cImNvbG9yOnJlZFwiPlxuICAgICAgICA8aDE+RXJyb3I8L2gxPlxuICAgICAgICAke3RoaXMuX2Vycm9yTWVzc2FnZX1cbiAgICAgIDwvZGl2PmB9YDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktcG9ydGFibGUtY3VzdG9tLWludGVyYWN0aW9uJzogUXRpUG9ydGFibGVDdXN0b21JbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IExpdEVsZW1lbnQsIGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5cbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgRHJhZ0Ryb3BJbnRlcmFjdGlvbk1peGluIH0gZnJvbSAnLi4vaW50ZXJuYWwvZHJhZy1kcm9wJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1hc3NvY2lhdGUtaW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aUFzc29jaWF0ZUludGVyYWN0aW9uIGV4dGVuZHMgRHJhZ0Ryb3BJbnRlcmFjdGlvbk1peGluKFxuICBMaXRFbGVtZW50LFxuICAncXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZScsXG4gIHRydWUsXG4gICcuZGwnXG4pIHtcbiAgQHN0YXRlKCkgcHJpdmF0ZSBfY2hpbGRyZW5NYXA6IEVsZW1lbnRbXTtcblxuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gY3NzYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrOyAvKiBuZWNlc3NhcnkgdG8gY2FsY3VsYXRlIHNjYWxpbmcgcG9zaXRpb24gKi9cbiAgICB9XG4gICAgc2xvdFtuYW1lPSdxdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlJ10ge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgIGdhcDogMC41cmVtO1xuICAgIH1cbiAgYDtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgIDxzbG90IG5hbWU9XCJwcm9tcHRcIj48L3Nsb3Q+XG4gICAgICA8c2xvdCBuYW1lPVwicXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZVwiPjwvc2xvdD5cbiAgICAgICR7dGhpcy5fY2hpbGRyZW5NYXAubGVuZ3RoID4gMCAmJlxuICAgICAgQXJyYXkuZnJvbShBcnJheShNYXRoLmNlaWwodGhpcy5fY2hpbGRyZW5NYXAubGVuZ3RoIC8gMikpLmtleXMoKSkubWFwKFxuICAgICAgICAoXywgaW5kZXgpID0+XG4gICAgICAgICAgaHRtbGA8ZGl2IHBhcnQ9XCJhc3NvY2lhYmxlcy1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgbmFtZT1cImxlZnQke2luZGV4fVwiIHBhcnQ9XCJkcm9wLWxpc3RcIiBjbGFzcz1cImRsXCIgaWRlbnRpZmllcj1cImRyb3BsaXN0JHtpbmRleH1fbGVmdFwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBuYW1lPVwicmlnaHQke2luZGV4fVwiIHBhcnQ9XCJkcm9wLWxpc3RcIiBjbGFzcz1cImRsXCIgaWRlbnRpZmllcj1cImRyb3BsaXN0JHtpbmRleH1fcmlnaHRcIj48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5gXG4gICAgICApfWA7XG4gIH1cblxuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuX2NoaWxkcmVuTWFwID0gQXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoJ3F0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UnKSk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWFzc29jaWF0ZS1pbnRlcmFjdGlvbic6IFF0aUFzc29jaWF0ZUludGVyYWN0aW9uO1xuICB9XG59XG4iLCAiZXhwb3J0IGNsYXNzIFRvdWNoRHJhZ0FuZERyb3Age1xuICBwcml2YXRlIF90b3VjaEJlZ2luID0gMDsgLy8gdGltZXN0YW1wIG9mIGZpcnN0IHRvdWNoXG4gIHByaXZhdGUgX3RvdWNoRG93biA9IG51bGw7IC8vIHBvaW50IG9mIGZpcnN0IHRvdWNoXG4gIHByaXZhdGUgX2xhc3RDbGljayA9IDA7IC8vIHRpbWVzdGFtcCBvZiBwcmV2aW91cyBjbGljayAodG91Y2hzdGFydCArIHRvdWNoZW5kKVxuICBwcml2YXRlIF9jYW5EcmFnID0gZmFsc2U7IC8vIHdoZXRoZXIgdGhlcmUgaXMgYW4gZWxlbWVudCB3aGljaCBjYW4gYmUgZHJhZ2dlZFxuICBwcml2YXRlIF9kcmFnU3JjID0gbnVsbDsgLy8gdGhlIGVsZW1lbnQgd2hpY2ggc2hvdWxkIGJlIGRyYWdnZWRcbiAgcHJpdmF0ZSBfZHJhZ0NvcHkgPSBudWxsOyAvLyBjb3B5IG9mIGRyYWcgc291cmNlIGZvciBkcmFnIGZlZWRiYWNrXG4gIHByaXZhdGUgX3RvdWNoRW5kQ2FsbGVkID0gZmFsc2U7IC8vIHdoZXRoZXIgdG91Y2hFbmQgb2NjdXJlZFxuICBwcml2YXRlIF9kcmFnUnVubmluZyA9IGZhbHNlOyAvLyB3aGV0aGVyIGEgZHJhZyBwcm9jZXNzIGlzIHJ1bm5pbmcgYXQgdGhlIG1vbWVudFxuXG4gIHByaXZhdGUgX2RhdGFUcmFuc2ZlciA9IHtcbiAgICBkYXRhOiB7fSxcbiAgICBzZXREYXRhOiBmdW5jdGlvbiAodHlwZSwgdmFsKSB7XG4gICAgICB0aGlzLmRhdGFbdHlwZV0gPSB2YWw7XG4gICAgfSxcbiAgICBnZXREYXRhOiBmdW5jdGlvbiAodHlwZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YVt0eXBlXTtcbiAgICB9LFxuICAgIGVmZmVjdEFsbG93ZWQ6ICdtb3ZlJ1xuICB9O1xuICBwcml2YXRlIF9jb3B5T2Zmc2V0ID0geyB4OiAwLCB5OiAwIH07IC8vIE9mZnNldCBmb3IgcG9zaXRpb25pbmcgdGhlIGRyYWcgY29weVxuXG4gIHByaXZhdGUgX2xhc3RUYXJnZXQgPSBudWxsOyAvLyBUaGUgbGFzdCByZWdpc3RlcmVkIHRvdWNoIHRhcmdldFxuICBwcml2YXRlIF9jdXJyZW50RHJvcENvbnRhaW5lciA9IG51bGw7IC8vIFRoZSBjdXJyZW50IGRyb3AgY29udGFpbmVyOyBmYWxzZSBpZiBlbGVtZW50IGlzIG5vdCBkcm9wcGFibGVcbiAgcHJpdmF0ZSBfaGFuZGxlQ2xpY2sgPSB0cnVlOyAvLyBTcGVjaWZpZXNcblxuICBwcml2YXRlIF9EQkxDTElDS0RFTEFZID0gNTAwOyAvLyBtYXhpbXVtIGRlbGF5IGluIHdoaWNoIGEgc2Vjb25kIGNsaWNrIG11c3Qgb2NjdXJcbiAgcHJpdmF0ZSBfQ09OVEVYVE1FTlVERUxBWSA9IDEwMDA7IC8vIGhvbGQgZGVsYXkgYWZ0ZXIgd2hpY2ggY29udGV4dCBtZW51IGlzIHNob3duXG4gIHByaXZhdGUgX0RSQUdERUxUQSA9IDU7IC8vIE1pbmltdW0gb2YgcGl4ZWxzIHdoaWNoIHRoZSBmaW5nZXIgbXVzdCBiZSBtb3ZlZCB0byBzdGFydCBkcmFnXG4gIHByaXZhdGUgX0NPUFlPUEFDSVRZID0gMC43OyAvLyBPcGFjaXR5IG9mIHRoZSBkcmFnIGNvcHkgZWxlbWVudFxuICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IFRvdWNoRHJhZ0FuZERyb3A7XG5cbiAgY29weVN0eWxlc0RyYWdDbG9uZTogYm9vbGVhbiA9IHRydWU7XG4gIGRyYWdPbkNsaWNrOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gQ2hlY2sgc2luZ2xldG9uXG4gICAgaWYgKFRvdWNoRHJhZ0FuZERyb3AuX2luc3RhbmNlKSB7XG4gICAgICAvLyAgdGhyb3cgbmV3IEVycm9yKFwiVG91Y2hEcmFnQW5kRHJvcCBjYW4ndCBiZSBpbnN0YW50aWF0ZWQgbW9yZSB0aGFuIG9uY2UuXCIpO1xuICAgICAgcmV0dXJuIFRvdWNoRHJhZ0FuZERyb3AuX2luc3RhbmNlO1xuICAgIH1cbiAgICBUb3VjaERyYWdBbmREcm9wLl9pbnN0YW5jZSA9IHRoaXM7XG5cbiAgICAvLyB0aGlzLl9pbml0aWFsaXplRmllbGRzKCk7XG5cbiAgICAvLyBBZGQgZXZlbnQgbGlzdGVuZXJzXG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLl90b3VjaE1vdmUuYmluZCh0aGlzKSwgeyBwYXNzaXZlOiBmYWxzZSwgY2FwdHVyZTogZmFsc2UgfSk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fdG91Y2hNb3ZlLmJpbmQodGhpcyksIHsgcGFzc2l2ZTogZmFsc2UsIGNhcHR1cmU6IGZhbHNlIH0pO1xuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCB0aGlzLl90b3VjaEVuZC5iaW5kKHRoaXMpLCB7IHBhc3NpdmU6IGZhbHNlLCBjYXB0dXJlOiBmYWxzZSB9KTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5fdG91Y2hFbmQuYmluZCh0aGlzKSwgeyBwYXNzaXZlOiBmYWxzZSwgY2FwdHVyZTogZmFsc2UgfSk7XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGNhbmNlbCcsIHRoaXMuX3RvdWNoQ2FuY2VsLmJpbmQodGhpcyksIHsgcGFzc2l2ZTogZmFsc2UsIGNhcHR1cmU6IGZhbHNlIH0pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhZGREcmFnZ2FibGVzKGRyYWdnYWJsZXM6IEVsZW1lbnRbXSkge1xuICAgIGRyYWdnYWJsZXMuZm9yRWFjaChlbCA9PiB7XG4gICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5fdG91Y2hTdGFydC5iaW5kKHRoaXMpLCB7IHBhc3NpdmU6IGZhbHNlLCBjYXB0dXJlOiBmYWxzZSB9KTtcbiAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMuX3RvdWNoU3RhcnQuYmluZCh0aGlzKSwgeyBwYXNzaXZlOiBmYWxzZSwgY2FwdHVyZTogZmFsc2UgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGJhY2sgZm9yIHRvdWNoc3RhcnQgZXZlbnQgbGlzdGVuZXIuXG4gICAqIEBwYXJhbSB7VG91Y2hFdmVudH0gZVxuICAgKi9cbiAgcHJpdmF0ZSBfdG91Y2hTdGFydChlKSB7XG4gICAgLy8gU2F2ZSBjdXJyZW50IHRpbWVzdGFtcFxuICAgIHRoaXMuX3RvdWNoQmVnaW4gPSBEYXRlLm5vdygpO1xuXG4gICAgY29uc3QgeyB4LCB5IH0gPSB0aGlzLl9nZXRQb2ludChlKTtcblxuICAgIHRoaXMuX3RvdWNoRG93biA9IHsgeCwgeSB9O1xuXG4gICAgdGhpcy5fZHJhZ1NyYyA9IGUuY3VycmVudFRhcmdldDtcbiAgICB0aGlzLl9jYW5EcmFnID0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLmRyYWdPbkNsaWNrKSB7XG4gICAgICBjb25zdCBfdG91Y2hlcyA9IHsgY2xpZW50WDogeCwgY2xpZW50WTogeSB9O1xuICAgICAgdGhpcy5fZHJhZ1J1bm5pbmcgPSB0cnVlO1xuICAgICAgdGhpcy5fY3JlYXRlRHJhZ0NvcHkoZSwgX3RvdWNoZXMpO1xuICAgIH1cblxuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmb3IgdG91Y2htb3ZlIGV2ZW50IGxpc3RlbmVyLlxuICAgKiBAcGFyYW0ge1RvdWNoRXZlbnR9IGVcbiAgICovXG4gIHByaXZhdGUgX3RvdWNoTW92ZShlKSB7XG4gICAgaWYgKHRoaXMuX2NhbkRyYWcgJiYgdGhpcy5fZHJhZ1NyYykge1xuICAgICAgLy8gQ3JlYXRlIGNvcHkgb2YgZWxlbWVudCBmb3IgdmlzdWFsIGRyYWcgZmVlZGJhY2tcblxuICAgICAgY29uc3QgeyB4LCB5IH0gPSB0aGlzLl9nZXRQb2ludChlKTtcbiAgICAgIGNvbnN0IF90b3VjaGVzID0geyBjbGllbnRYOiB4LCBjbGllbnRZOiB5IH07XG5cbiAgICAgIGlmICh0aGlzLl9nZXREZWx0YShfdG91Y2hlcykgPj0gdGhpcy5fRFJBR0RFTFRBKSB7XG4gICAgICAgIHRoaXMuX2RyYWdSdW5uaW5nID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY3JlYXRlRHJhZ0NvcHkoZSwgX3RvdWNoZXMpO1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NyZWF0ZURyYWdDb3B5ID0gKGU6IGFueSwgX3RvdWNoZXM6IHsgY2xpZW50WDogbnVtYmVyOyBjbGllbnRZOiBudW1iZXIgfSkgPT4ge1xuICAgIGlmICh0aGlzLl9kcmFnQ29weSA9PT0gbnVsbCAmJiB0aGlzLl9kcmFnUnVubmluZykge1xuICAgICAgdGhpcy5fZHJhZ1NyYy5zdHlsZS5vcGFjaXR5ID0gdGhpcy5fQ09QWU9QQUNJVFk7XG4gICAgICB0aGlzLl9kcmFnQ29weSA9IHRoaXMuX2RyYWdTcmMuY2xvbmVOb2RlKHRydWUpO1xuICAgICAgY29uc3QgZWxlbWVudFN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuX2RyYWdTcmMpO1xuXG4gICAgICB0aGlzLl9kcmFnQ29weS5zdHlsZSA9ICcnO1xuICAgICAgdGhpcy5fZHJhZ0NvcHkuc2V0QXR0cmlidXRlKCdkcmFnY2xvbmUnLCAnJyk7XG5cbiAgICAgIGlmICh0aGlzLmNvcHlTdHlsZXNEcmFnQ2xvbmUpIHtcbiAgICAgICAgZm9yIChjb25zdCBzdHlsZSBvZiBlbGVtZW50U3R5bGVzKSB7XG4gICAgICAgICAgdGhpcy5fZHJhZ0NvcHkuc3R5bGVbc3R5bGVdID0gZWxlbWVudFN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKHN0eWxlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9jYWxjdWxhdGVEcmFnQ29weVBvc2l0aW9uKF90b3VjaGVzKTtcblxuICAgICAgdGhpcy5fZHJhZ0NvcHkuc3R5bGUudG9wID0gX3RvdWNoZXMuY2xpZW50WSAtIHRoaXMuX2NvcHlPZmZzZXQueSArICdweCc7XG4gICAgICB0aGlzLl9kcmFnQ29weS5zdHlsZS5sZWZ0ID0gX3RvdWNoZXMuY2xpZW50WCAtIHRoaXMuX2NvcHlPZmZzZXQueCArICdweCc7XG4gICAgICB0aGlzLl9kcmFnQ29weS5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XG4gICAgICB0aGlzLl9kcmFnQ29weS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xuICAgICAgdGhpcy5fZHJhZ0NvcHkuc3R5bGUuekluZGV4ID0gJzk5OTk5OSc7XG5cbiAgICAgIHRoaXMuX2RyYWdDb3B5ID0gZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLl9kcmFnQ29weSk7XG4gICAgICB0aGlzLl9kaXNwYXRjaEV2ZW50KHRoaXMuX2RyYWdTcmMsICdkcmFnc3RhcnQnKTtcbiAgICB9XG5cbiAgICAvLyBEcmFnIGlzIHJ1bm5pbmcsIG1vdmUgZHJhZyBjb3B5IGFuZCBmaXJlIGV2ZW50c1xuICAgIGlmICh0aGlzLl9kcmFnUnVubmluZykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgICBjb25zdCBfdGhpcyA9IHRoaXM7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoX3RoaXMuX3RvdWNoRW5kQ2FsbGVkIHx8IF90aGlzLl9kcmFnQ29weSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICBfdGhpcy5fZHJhZ0NvcHkuc3R5bGUudG9wID0gX3RvdWNoZXMuY2xpZW50WSAtIF90aGlzLl9jb3B5T2Zmc2V0LnkgKyAncHgnO1xuICAgICAgICBfdGhpcy5fZHJhZ0NvcHkuc3R5bGUubGVmdCA9IF90b3VjaGVzLmNsaWVudFggLSBfdGhpcy5fY29weU9mZnNldC54ICsgJ3B4JztcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLl9maW5kRHJvcHBhYmxlKGUpO1xuXG4gICAgICAvLyBGaXJlIGRyYWdsZWF2ZSBhbmQgZHJhZ2VudGVyIGV2ZW50cyB3aGVuIHRhcmdldCBoYXMgY2hhbmdlZCBkdXJpbmcgbW92ZVxuICAgICAgaWYgKHRhcmdldCAhPSB0aGlzLl9sYXN0VGFyZ2V0KSB7XG4gICAgICAgIHRoaXMuX2Rpc3BhdGNoRXZlbnQodGFyZ2V0LCAnZHJhZ2VudGVyJyk7XG4gICAgICAgIHRoaXMuX2Rpc3BhdGNoRXZlbnQodGhpcy5fbGFzdFRhcmdldCwgJ2RyYWdsZWF2ZScpO1xuICAgICAgICB0aGlzLl9sYXN0VGFyZ2V0ID0gdGFyZ2V0O1xuICAgICAgfVxuXG4gICAgICAvLyBNYWtlIGN1cnJlbnQgZHJvcCBjb250YWluZXIgY2xhc3N3aWRlIGF2YWlsYWJsZSBhbmQgZmlyZSBkcmFnb3ZlciBpZiBpdCdzIHJlYWxseSBhIGRyb3AgY29udGFpbmVyLlxuICAgICAgdGhpcy5fY3VycmVudERyb3BDb250YWluZXIgPSB0YXJnZXQ7XG4gICAgICBpZiAodGhpcy5fY3VycmVudERyb3BDb250YWluZXIpIHRoaXMuX2Rpc3BhdGNoRXZlbnQodGFyZ2V0LCAnZHJhZ292ZXInKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZvciB0b3VjaGVuZCBldmVudCBsaXN0ZW5lci5cbiAgICogQHBhcmFtIHtUb3VjaEV2ZW50fSBlXG4gICAqL1xuICBwcml2YXRlIF90b3VjaEVuZChlKSB7XG4gICAgdGhpcy5fdG91Y2hFbmRDYWxsZWQgPSB0cnVlO1xuICAgIHRoaXMuX2NhbkRyYWcgPSBmYWxzZTtcblxuICAgIC8vIGNvbnNvbGUubG9nKDEsIGUudGFyZ2V0LCB0aGlzLl9jdXJyZW50RHJvcENvbnRhaW5lcik7XG5cbiAgICAvLyBVc2VyIHNlZW1zIHRvIGNsaWNrXG4gICAgLy8gaWYgKCF0aGlzLl9kcmFnUnVubmluZyAmJiB0aGlzLl9oYW5kbGVDbGljaykge1xuICAgIC8vICAgdGhpcy5fZGlzcGF0Y2hFdmVudChlLnRhcmdldCwgJ2NsaWNrJyk7XG4gICAgLy8gICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgLy8gICByZXR1cm47XG4gICAgLy8gfVxuICAgIGlmICh0aGlzLl9jdXJyZW50RHJvcENvbnRhaW5lcikge1xuICAgICAgdGhpcy5fZGlzcGF0Y2hFdmVudCh0aGlzLl9jdXJyZW50RHJvcENvbnRhaW5lciwgJ2Ryb3AnKTtcbiAgICAgIHRoaXMuX2Rpc3BhdGNoRXZlbnQodGhpcy5fZHJhZ1NyYywgJ2RyYWdlbmQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZmlyZSBkcmFnRXZlbnQgZXZlbiBpZiB0aGVpciBpcyBubyBkcm9wcGFibGUuIEFuZCBhc3NpZ24gZHJvcEVmZmVjdCBub25lLlxuICAgICAgLy8gZm9yIG91ciBwdXJwb3NlLCB0aGlzIHdpbGwgYnJpbmcgYmFjayB0aGUgZHJhZyB0byBpdHMgc3RhcnQgcG9zaXRpb24sIHNlZWwgZHJhZy1kcm9wLWludGVyYWN0aW9uLW1peGluLnRzXG4gICAgICBpZiAodGhpcy5fZHJhZ1J1bm5pbmcpIHtcbiAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ2RyYWdlbmQnLCB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUgfSk7XG4gICAgICAgIGV2ZW50WydkYXRhVHJhbnNmZXInXSA9IHsgZHJvcEVmZmVjdDogJ25vbmUnIH07XG4gICAgICAgIHRoaXMuX2RyYWdTcmM/LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3Jlc2V0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGJhY2sgZm9yIHRvdWNoY2FuY2VsIGV2ZW50IGxpc3RlbmVyLCBpbiBjYXNlIGJyb3dzZXIgc3VwcG9ydHMgdGhpcy5cbiAgICogQHBhcmFtIHtUb3VjaEV2ZW50fSBlXG4gICAqL1xuICBwcml2YXRlIF90b3VjaENhbmNlbChlKSB7XG4gICAgdGhpcy5fcmVzZXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHRoZSBuZXh0IGRyb3BwYWJsZSBlbGVtZW50IGF0IGN1cnJlbnQgcG9pbnQuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwdFxuICAgKi9cbiAgcHJpdmF0ZSBfZmluZERyb3BwYWJsZShldmVudCkge1xuICAgIGNvbnN0IHBvaW50RnJvbVRvdWNoRXZlbnQgPSB0aGlzLl9nZXRQb2ludChldmVudCk7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWxlbWVudEZyb21Qb2ludChwb2ludEZyb21Ub3VjaEV2ZW50LngsIHBvaW50RnJvbVRvdWNoRXZlbnQueSk7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIGVsZW1lbnRGcm9tUG9pbnQoeDogbnVtYmVyLCB5OiBudW1iZXIpOiBFbGVtZW50IHtcbiAgICBsZXQgZWwgPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KHgsIHkpO1xuICAgIGlmIChlbCkge1xuICAgICAgd2hpbGUgKGVsLnNoYWRvd1Jvb3QpIHtcbiAgICAgICAgY29uc3QgY3VzdG9tRWwgPSBlbC5zaGFkb3dSb290LmVsZW1lbnRGcm9tUG9pbnQoeCwgeSk7XG4gICAgICAgIGlmIChjdXN0b21FbCA9PT0gbnVsbCB8fCBjdXN0b21FbCA9PT0gZWwpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBlbCA9IGN1c3RvbUVsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGVsO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgX2dldFBvaW50KGV2ZW50LCBwYWdlPykge1xuICAgIGlmIChldmVudCAmJiBldmVudC50b3VjaGVzKSB7XG4gICAgICBldmVudCA9IGV2ZW50LnRvdWNoZXNbMF07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB4OiBwYWdlID8gZXZlbnQucGFnZVggOiBldmVudC5jbGllbnRYLFxuICAgICAgeTogcGFnZSA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgb2Zmc2V0IGZvciBkaXNwbGF5aW5nIHRoZSBkcmFnIGNvcHkgdG8gaGF2ZSBhIHNlYW1sZXNzIGRyYWdnaW5nLlxuICAgKiBAcGFyYW0ge1RvdWNofSB0b3VjaCBUaGUgY3VycmVudCB0b3VjaC5cbiAgICovXG4gIHByaXZhdGUgX2NhbGN1bGF0ZURyYWdDb3B5UG9zaXRpb24odG91Y2gpIHtcbiAgICBjb25zdCBjbGllbnRSZWN0ID0gdGhpcy5fZHJhZ1NyYy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICB0aGlzLl9jb3B5T2Zmc2V0LnggPSB0b3VjaC5jbGllbnRYIC0gY2xpZW50UmVjdC5sZWZ0O1xuICAgIHRoaXMuX2NvcHlPZmZzZXQueSA9IHRvdWNoLmNsaWVudFkgLSBjbGllbnRSZWN0LnRvcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBwaXhlbCBkZWx0YSBiZXR3ZWVuIGZpcnN0IHRvdWNoIGFuZCB0aGUgY3VycmVudCB0b3VjaCBwb3NpdGlvbi5cbiAgICogQHBhcmFtIHtPYmplY3R9IHRvdWNoXG4gICAqL1xuICBwcml2YXRlIF9nZXREZWx0YSh0b3VjaCkge1xuICAgIGNvbnN0IHggPSBNYXRoLmFicyh0b3VjaC5jbGllbnRYIC0gdGhpcy5fdG91Y2hEb3duLngpO1xuICAgIGNvbnN0IHkgPSBNYXRoLmFicyh0b3VjaC5jbGllbnRZIC0gdGhpcy5fdG91Y2hEb3duLnkpO1xuXG4gICAgcmV0dXJuIHggKyB5O1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZSBUaGUgZXZlbnQncyB0YXJnZXQgZWxlbWVudC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50VHlwZSBUaGUgdHlwZSBvZiB0aGUgZXZlbnQuXG4gICAqIEBwYXJhbSB7Ym9vbH0gYnViYmxlIFNldHMgd2hldGhlciB0aGUgZXZlbnQgc2hvdWxkIGJ1YmJsZS5cbiAgICovXG4gIHByaXZhdGUgX2Rpc3BhdGNoRXZlbnQoZSwgZXZlbnRUeXBlLCBidWJibGUgPSB0cnVlKSB7XG4gICAgaWYgKCFlKSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBldmVudCA9IG5ldyBDdXN0b21FdmVudChldmVudFR5cGUsIHsgYnViYmxlczogYnViYmxlLCBjYW5jZWxhYmxlOiB0cnVlIH0pO1xuICAgIGV2ZW50WydkYXRhVHJhbnNmZXInXSA9IHRoaXMuX2RhdGFUcmFuc2ZlcjtcbiAgICBlLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICAgIHJldHVybiBldmVudC5kZWZhdWx0UHJldmVudGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyBhbGwgdmFyaWFibGVzIGFuZCBwcmVwYXJlcyBmb3IgbmV3IERyYWcgYW5kIERyb3AuXG4gICAqL1xuICBwcml2YXRlIF9yZXNldCgpIHtcbiAgICBpZiAodGhpcy5fZHJhZ1J1bm5pbmcpIHtcbiAgICAgIHRoaXMuX2RyYWdTcmMuc3R5bGUub3BhY2l0eSA9ICcxLjAnO1xuICAgICAgdGhpcy5fZHJhZ0NvcHkucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLl9kcmFnQ29weSk7XG4gICAgfVxuXG4gICAgdGhpcy5fZHJhZ1J1bm5pbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9kcmFnU3JjID0gbnVsbDtcbiAgICB0aGlzLl9kcmFnQ29weSA9IG51bGw7XG4gICAgdGhpcy5fY2FuRHJhZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fdG91Y2hCZWdpbiA9IDA7XG4gICAgdGhpcy5fdG91Y2hEb3duID0gbnVsbDtcbiAgICB0aGlzLl9sYXN0Q2xpY2sgPSAwO1xuICAgIHRoaXMuX3RvdWNoRW5kQ2FsbGVkID0gZmFsc2U7XG4gICAgdGhpcy5fZGF0YVRyYW5zZmVyID0ge1xuICAgICAgZGF0YToge30sXG4gICAgICBzZXREYXRhOiBmdW5jdGlvbiAodHlwZSwgdmFsKSB7XG4gICAgICAgIHRoaXMuZGF0YVt0eXBlXSA9IHZhbDtcbiAgICAgIH0sXG4gICAgICBnZXREYXRhOiBmdW5jdGlvbiAodHlwZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhW3R5cGVdO1xuICAgICAgfSxcbiAgICAgIGVmZmVjdEFsbG93ZWQ6ICdtb3ZlJ1xuICAgIH07XG4gICAgdGhpcy5fY29weU9mZnNldCA9IHsgeDogMCwgeTogMCB9O1xuXG4gICAgdGhpcy5fbGFzdFRhcmdldCA9IG51bGw7XG4gICAgdGhpcy5fY3VycmVudERyb3BDb250YWluZXIgPSBudWxsO1xuICAgIHRoaXMuX2hhbmRsZUNsaWNrID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIHByaXZhdGUgX2dldFBvc2l0aW9uRnJvbUV2ZW50KGU6IGFueSk6IHtcbiAgLy8gICB4OiBudW1iZXI7XG4gIC8vICAgeTogbnVtYmVyO1xuICAvLyB9IHtcbiAgLy8gICBsZXQgX3RvdWNoTW92ZTtcbiAgLy8gICBpZiAoZS50eXBlID09ICd0b3VjaHN0YXJ0JyB8fCBlLnR5cGUgPT0gJ3RvdWNobW92ZScgfHwgZS50eXBlID09ICd0b3VjaGVuZCcgfHwgZS50eXBlID09ICd0b3VjaGNhbmNlbCcpIHtcbiAgLy8gICAgIGNvbnN0IGV2dCA9IHR5cGVvZiBlLm9yaWdpbmFsRXZlbnQgPT09ICd1bmRlZmluZWQnID8gZSA6IGUub3JpZ2luYWxFdmVudDtcbiAgLy8gICAgIGNvbnN0IHRvdWNoID0gZXZ0LnRvdWNoZXNbMF0gfHwgZXZ0LmNoYW5nZWRUb3VjaGVzWzBdO1xuICAvLyAgICAgX3RvdWNoTW92ZSA9IHtcbiAgLy8gICAgICAgeDogdG91Y2gucGFnZVgsXG4gIC8vICAgICAgIHk6IHRvdWNoLnBhZ2VZXG4gIC8vICAgICB9O1xuICAvLyAgIH0gZWxzZSBpZiAoXG4gIC8vICAgICBlLnR5cGUgPT0gJ21vdXNlZG93bicgfHxcbiAgLy8gICAgIGUudHlwZSA9PSAnbW91c2V1cCcgfHxcbiAgLy8gICAgIGUudHlwZSA9PSAnbW91c2Vtb3ZlJyB8fFxuICAvLyAgICAgZS50eXBlID09ICdtb3VzZW92ZXInIHx8XG4gIC8vICAgICBlLnR5cGUgPT0gJ21vdXNlb3V0JyB8fFxuICAvLyAgICAgZS50eXBlID09ICdtb3VzZWVudGVyJyB8fFxuICAvLyAgICAgZS50eXBlID09ICdtb3VzZWxlYXZlJ1xuICAvLyAgICkge1xuICAvLyAgICAgX3RvdWNoTW92ZSA9IHtcbiAgLy8gICAgICAgeDogZS5jbGllbnRYLFxuICAvLyAgICAgICB5OiBlLmNsaWVudFlcbiAgLy8gICAgIH07XG4gIC8vICAgfVxuICAvLyAgIHJldHVybiBfdG91Y2hNb3ZlO1xuICAvLyB9XG59XG4iLCAiaW1wb3J0IHsgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxudHlwZSBDb25zdHJ1Y3RvcjxUPiA9IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQ7XG5cbmRlY2xhcmUgY2xhc3MgRHJvcHBhYmxlc0ludGVyZmFjZSB7fVxuXG4vLyBodHRwczovL25nLXJ1bi5jb20vZWRpdC85TUdyNWRZV0EyMEFpSnRweTVhej9vcGVuPWFwcCUyRmFwcC5jb21wb25lbnQuaHRtbFxuZXhwb3J0IGNvbnN0IERyb3BwYWJsZXNNaXhpbiA9IDxUIGV4dGVuZHMgQ29uc3RydWN0b3I8TGl0RWxlbWVudD4+KFxuICBzdXBlckNsYXNzOiBULFxuICBkcm9wcGFibGVzSW5TaGFkb3dSb290OiBib29sZWFuLFxuICBkcm9wcGFibGVzU2VsZWN0b3I6IHN0cmluZ1xuKSA9PiB7XG4gIGNsYXNzIERyb3BwYWJsZXNFbGVtZW50IGV4dGVuZHMgc3VwZXJDbGFzcyB7XG4gICAgcHJpdmF0ZSBvYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlcjtcblxuICAgIEBwcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4sIHJlZmxlY3Q6IHRydWUgfSkgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIG92ZXJyaWRlIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcHMpOiB2b2lkIHtcbiAgICAgIC8vIGZvciBxdGktbWF0Y2gtaW50ZXJhY3Rpb24gdGhlIGRyYWcgaW50ZXJhY3Rpb24gY2FuIGJlIHJlcGxhY2Ugd2l0aCBhIHF0aS1tYXRjaC10YWJ1bGFyIGNsYXNzXG4gICAgICAvLyB3aGljaCBzaG93cyB0aGUgZGF0YSBpbiBhIGEgdGFidWxhciB3YXksIHNvIG5vIGRyYWcgZHJvcCBzaG91bGQgYmUgaW52b2x2ZWQgdGhlblxuICAgICAgaWYgKHRoaXMuY2xhc3NMaXN0LmNvbnRhaW5zKCdxdGktbWF0Y2gtdGFidWxhcicpKSByZXR1cm47XG5cbiAgICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcHMpO1xuXG4gICAgICBjb25zdCBkcm9wcGFibGVzID0gQXJyYXkuZnJvbShcbiAgICAgICAgZHJvcHBhYmxlc0luU2hhZG93Um9vdFxuICAgICAgICAgID8gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoZHJvcHBhYmxlc1NlbGVjdG9yKVxuICAgICAgICAgIDogdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGRyb3BwYWJsZXNTZWxlY3RvcilcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuZHJhZ292ZXJIYW5kbGVyID0gdGhpcy5kcmFnb3ZlckhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuZHJhZ2xlYXZlSGFuZGxlciA9IHRoaXMuZHJhZ2xlYXZlSGFuZGxlci5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5kcmFnZW50ZXJIYW5kbGVyID0gdGhpcy5kcmFnZW50ZXJIYW5kbGVyLmJpbmQodGhpcyk7XG5cbiAgICAgIHRoaXMuZHJvcEhhbmRsZXIgPSB0aGlzLmRyb3BIYW5kbGVyLmJpbmQodGhpcyk7XG5cbiAgICAgIGRyb3BwYWJsZXMuZm9yRWFjaChkID0+IHtcbiAgICAgICAgZC5zZXRBdHRyaWJ1dGUoJ2Ryb3B6b25lJywgJ21vdmUnKTtcbiAgICAgICAgZC5hZGRFdmVudExpc3RlbmVyKCdkcmFnbGVhdmUnLCB0aGlzLmRyYWdsZWF2ZUhhbmRsZXIpO1xuXG4gICAgICAgIHRoaXMuYXR0YWNoSGFuZGxlcihkKTtcbiAgICAgIH0pO1xuICAgICAgZm9yIChjb25zdCBkcm9wcGFibGUgb2YgZHJvcHBhYmxlcykge1xuICAgICAgICB0aGlzLm9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIobXV0YXRpb25zID0+IHtcbiAgICAgICAgICBtdXRhdGlvbnMuZm9yRWFjaChtdXRhdGlvbiA9PiB7XG4gICAgICAgICAgICBpZiAobXV0YXRpb24udHlwZSA9PT0gJ2F0dHJpYnV0ZXMnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHByb3BOYW1lID0gbXV0YXRpb24uYXR0cmlidXRlTmFtZTtcbiAgICAgICAgICAgICAgc3dpdGNoIChwcm9wTmFtZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2Rpc2FibGVkJzoge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZGlzYWJsZWQgPSBkcm9wcGFibGUuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xuICAgICAgICAgICAgICAgICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmF0dGFjaEhhbmRsZXIoZHJvcHBhYmxlKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlSGFuZGxlcihkcm9wcGFibGUpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9ic2VydmVyLm9ic2VydmUoZHJvcHBhYmxlLCB7XG4gICAgICAgICAgYXR0cmlidXRlczogdHJ1ZSAvL2NvbmZpZ3VyZSBpdCB0byBsaXN0ZW4gdG8gYXR0cmlidXRlIGNoYW5nZXNcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhdHRhY2hIYW5kbGVyKGRyb3BwYWJsZTogRWxlbWVudCkge1xuICAgICAgZHJvcHBhYmxlLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgdGhpcy5kcmFnb3ZlckhhbmRsZXIpO1xuICAgICAgZHJvcHBhYmxlLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbnRlcicsIHRoaXMuZHJhZ2VudGVySGFuZGxlcik7XG4gICAgICBkcm9wcGFibGUuYWRkRXZlbnRMaXN0ZW5lcignZHJvcCcsIHRoaXMuZHJvcEhhbmRsZXIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlSGFuZGxlcihkcm9wcGFibGU6IEVsZW1lbnQpIHtcbiAgICAgIGRyb3BwYWJsZS5yZW1vdmVFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRoaXMuZHJhZ292ZXJIYW5kbGVyKTtcbiAgICAgIGRyb3BwYWJsZS5yZW1vdmVFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCB0aGlzLmRyYWdlbnRlckhhbmRsZXIpO1xuICAgICAgZHJvcHBhYmxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCB0aGlzLmRyb3BIYW5kbGVyKTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICAgIC8vIGZvciBxdGktbWF0Y2gtaW50ZXJhY3Rpb24gdGhlIGRyYWcgaW50ZXJhY3Rpb24gY2FuIGJlIHJlcGxhY2Ugd2l0aCBhIHF0aS1tYXRjaC10YWJ1bGFyIGNsYXNzXG4gICAgICAvLyB3aGljaCBzaG93cyB0aGUgZGF0YSBpbiBhIGEgdGFidWxhciB3YXksIHNvIG5vIGRyYWcgZHJvcCBzaG91bGQgYmUgaW52b2x2ZWQgdGhlblxuICAgICAgaWYgKHRoaXMuY2xhc3NMaXN0LmNvbnRhaW5zKCdxdGktbWF0Y2gtdGFidWxhcicpKSByZXR1cm47XG5cbiAgICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgICB0aGlzLm9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgfVxuXG4gICAgZHJhZ2VudGVySGFuZGxlcihldjogRHJhZ0V2ZW50KSB7XG4gICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIGRyYWdvdmVySGFuZGxlcihldjogRHJhZ0V2ZW50KSB7XG4gICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY29uc3QgZHJvcHBhYmxlID0gZXYuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgIC8vIGRyb3BwYWJsZXNJblNoYWRvd1Jvb3RcbiAgICAgIC8vID8gZHJvcHBhYmxlLnNldEF0dHJpYnV0ZSgncGFydCcsIGRyb3BwYWJsZS5nZXRBdHRyaWJ1dGUoJ3BhcnQnKSArICcgYWN0aXZlJykgOlxuICAgICAgZHJvcHBhYmxlLnNldEF0dHJpYnV0ZSgnYWN0aXZlJywgJycpO1xuXG4gICAgICBldi5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdtb3ZlJztcblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGRyb3BIYW5kbGVyKGV2OiBEcmFnRXZlbnQpIHtcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBjb25zdCBkcm9wcGFibGUgPSBldi5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgLy8gcGs6IGRyYWdnYWJsZXMgaW4gbGlnaHQgZG9tIGNhbiBiZSBkcmFnZ2VkIHRvIHNoYWRvd2RvbSwgdGhpcyBpcyBvbmUgb2YgdGhlIHJ1bGVzIG9mIHdlYmNvbXBvbmVudHMuXG4gICAgICAvLyBUaGV5IG1heSBub3QgY3JlYXRlIG5ldyBlbGVtZW50cyBpbiBsaWdodCBkb20uIFNvbWUgc29tZXRpbWVzcyBkcm9wIHpvbmVzIHNob3VsZCBiZSBnZW5lcmF0ZWRcbiAgICAgIC8vIGJ5IHRoZSB3ZWJjb21wb25lbnQuIFRoZW4gYSBkcmFnZ2FibGUgKCB3aGljaCBpcyBhbHdheXMgYWxyZWFkeSBjcmVhdGVkIGJ5IGEgd2ViY29tcG9uZW50IClcbiAgICAgIC8vIGNhbiBiZSBpbiBsaWdodCBkb20sIGVuIGNhbiBiZSBkcmFnZ2VkIHRvIHNoYWRvdyBkb20uXG4gICAgICAvLyB0aGlua2luZyBvZiBhbm90aGVyIHdheSB3aGVyZSB3ZSBqdXN0IGNoYW5nZSBzbG90cy4gTWF5YmUgdGhhdHMgYmV0dGVyLi5cbiAgICAgIGNvbnN0IGRyYWdnYWJsZUluTGlnaHREb20gPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoYFtpZGVudGlmaWVyPSR7ZXYuZGF0YVRyYW5zZmVyLmdldERhdGEoJ3RleHQnKX1gKTtcbiAgICAgIGNvbnN0IGRyYWdnYWJsZSA9IGRyYWdnYWJsZUluTGlnaHREb21cbiAgICAgICAgPyBkcmFnZ2FibGVJbkxpZ2h0RG9tXG4gICAgICAgIDogdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoYFtpZGVudGlmaWVyPSR7ZXYuZGF0YVRyYW5zZmVyLmdldERhdGEoJ3RleHQnKX1gKTtcblxuICAgICAgaWYgKCFkcm9wcGFibGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgY2Fubm90IGZpbmQgZHJvcHBhYmxlLCB0YXJnZXQ6ICR7ZXYudGFyZ2V0ID8gSlNPTi5zdHJpbmdpZnkoZXYudGFyZ2V0KSA6ICdudWxsJ31gKTtcbiAgICAgIH0gZWxzZSBpZiAoZHJhZ2dhYmxlLnBhcmVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJykgIT09IGRyb3BwYWJsZS5nZXRBdHRyaWJ1dGUoJ2lkZW50aWZpZXInKSkge1xuICAgICAgICBkcm9wcGFibGUuYXBwZW5kQ2hpbGQoZHJhZ2dhYmxlKTtcbiAgICAgIH1cbiAgICAgIC8vIGRyb3BwYWJsZXNJblNoYWRvd1Jvb3RcbiAgICAgIC8vID8gZHJvcHBhYmxlLnNldEF0dHJpYnV0ZSgncGFydCcsIGRyb3BwYWJsZS5nZXRBdHRyaWJ1dGUoJ3BhcnQnKS5yZXBsYWNlKCdhY3RpdmUnLCAnJykudHJpbSgpKSA6XG4gICAgICBkcm9wcGFibGUucmVtb3ZlQXR0cmlidXRlKCdhY3RpdmUnKTtcblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGRyYWdsZWF2ZUhhbmRsZXIoZXY6IERyYWdFdmVudCkge1xuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgY29uc3QgZHJvcHBhYmxlID0gZXYuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGRyb3BwYWJsZS5yZW1vdmVBdHRyaWJ1dGUoJ2FjdGl2ZScpO1xuICAgICAgZXYuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnbm9uZSc7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIERyb3BwYWJsZXNFbGVtZW50IGFzIENvbnN0cnVjdG9yPERyb3BwYWJsZXNJbnRlcmZhY2U+ICYgVDtcbn07XG4iLCAiLy8gVEhJUyBJUyBBIE1JWElOLCBUSElTIElTIEEgTUlYSU5cbi8vIFVTRSBMSUtFIFRISVNcbi8vIGBgYGNsYXNzIERyb3BMaXN0IGV4dGVuZHMgRmxpcHBhYmxlcyhMaXRFbGVtZW50KSB7YGBgXG4vLyBtaXhpbiB3aGljaCBhbmltYXRlcyBjaGlsZHJlbiB3aXRoIEZMSVBcbi8vIGEgY29tYmluYXRpb24gYmV0d2VlbiB0aGlzIGRpcmVjdGl2ZTpcbi8vIGh0dHBzOi8vbmctcnVuLmNvbS9lZGl0LzlNR3I1ZFlXQTIwQWlKdHB5NWF6P29wZW49YXBwJTJGYXBwLmNvbXBvbmVudC5odG1sXG4vLyBhbmQgYSB0dXRvcmlhbCBob3cgdG8gbWFrZSBhIG1peGluXG4vLyBodHRwczovL2xpdC5kZXYvZG9jcy9jb21wb3NpdGlvbi9taXhpbnMvXG5cbmltcG9ydCB7IExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuXG50eXBlIENvbnN0cnVjdG9yPFQ+ID0gbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVDtcblxuZXhwb3J0IGRlY2xhcmUgY2xhc3MgRmxpcHBhYmxlc0ludGVyZmFjZSB7XG4gIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQ7XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQ7XG59XG5cbi8vIGp1c3QgYSBjb252ZXJzaW9uIG9mIGEgYW5ndWxhciBGTElQIGRpcmVjdGl2ZSwgbWFkZSBhcyBhIE1peGluXG4vLyBodHRwczovL25nLXJ1bi5jb20vZWRpdC85TUdyNWRZV0EyMEFpSnRweTVhej9vcGVuPWFwcCUyRmFwcC5jb21wb25lbnQuaHRtbFxuZXhwb3J0IGNvbnN0IEZsaXBwYWJsZXNNaXhpbiA9IDxUIGV4dGVuZHMgQ29uc3RydWN0b3I8TGl0RWxlbWVudD4+KFxuICBzdXBlckNsYXNzOiBULFxuICBkcm9wcGFibGVzU2VsOiBzdHJpbmcsXG4gIGRyYWdnYWJsZXNTZWw6IHN0cmluZ1xuKSA9PiB7XG4gIGNsYXNzIEZsaXBwYWJsZXNFbGVtZW50IGV4dGVuZHMgc3VwZXJDbGFzcyB7XG4gICAgLy8gcHJpdmF0ZSBzdGF0ZSA9IG5ldyBNYXA8RWxlbWVudCwgYW55PigpO1xuICAgIC8vIHByaXZhdGUgb2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXI7XG4gICAgLy8gZmxpcHBhYmxlc1NlbGVjdG9yOiBzdHJpbmc7XG4gICAgLy8gb3ZlcnJpZGUgYXN5bmMgZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wcykge1xuICAgIC8vICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTsgLy8gcGs6IHRoaXMgaXMgdGhlIGtleSB0byBjYWxjdWxhdGUgY29ycmVjdCBwcm9wb3J0aW9uc1xuICAgIC8vICAgY29uc3QgZHJhZ2dhYmxlcyA9IEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsKGRyYWdnYWJsZXNTZWwpKTtcbiAgICAvLyAgIGRyYWdnYWJsZXMuZm9yRWFjaCgoZWxlbSkgPT4ge1xuICAgIC8vICAgICBjb25zdCB7IGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCB9ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAvLyAgICAgdGhpcy5zdGF0ZS5zZXQoZWxlbSwgeyBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgLy8gICB9KTtcbiAgICAvLyAgIHRoaXMub2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcih0aGlzLmFuaW1hdGVNZSk7XG4gICAgLy8gICBjb25zdCBkcm9wcGFibGVzID0gQXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoZHJvcHBhYmxlc1NlbCkpO1xuICAgIC8vICAgZHJvcHBhYmxlcy5mb3JFYWNoKChkcmFnZ2FibGUpID0+IHtcbiAgICAvLyAgICAgdGhpcy5vYnNlcnZlci5vYnNlcnZlKGRyYWdnYWJsZSwgeyBjaGlsZExpc3Q6IHRydWUgfSk7XG4gICAgLy8gICB9KTtcbiAgICAvLyAgIHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTtcbiAgICAvLyAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcHMpO1xuICAgIC8vIH1cbiAgICAvLyBwcml2YXRlIGFuaW1hdGVNZSA9ICgpID0+IHtcbiAgICAvLyAgIHRoaXMuc3RhdGUuZm9yRWFjaCgodmFsdWUsIGVsZW0pID0+IHtcbiAgICAvLyAgICAgY29uc3QgeyBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQgfSA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgLy8gICAgIGlmICh0aGlzLnN0YXRlLmdldChlbGVtKSA9PSBudWxsKSB7XG4gICAgLy8gICAgICAgdGhpcy5zdGF0ZS5zZXQoZWxlbSwgeyBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgLy8gICAgIH1cbiAgICAvLyAgICAgY29uc3QgY2FjaGUgPSB0aGlzLnN0YXRlLmdldChlbGVtKTtcbiAgICAvLyAgICAgY29uc3QgZGVsdGFYID0gY2FjaGUubGVmdCAtIGxlZnQ7XG4gICAgLy8gICAgIGNvbnN0IGRlbHRhWSA9IGNhY2hlLnRvcCAtIHRvcDtcbiAgICAvLyAgICAgY29uc3QgZGVsdGFXID0gY2FjaGUud2lkdGggLyB3aWR0aDtcbiAgICAvLyAgICAgY29uc3QgZGVsdGFIID0gY2FjaGUuaGVpZ2h0IC8gaGVpZ2h0O1xuICAgIC8vICAgICB0aGlzLnN0YXRlLnNldChlbGVtLCB7IGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCB9KTtcbiAgICAvLyAgICAgY29uc3QgeyBkdXJhdGlvbiwgZWFzaW5nIH0gPSB7IGR1cmF0aW9uOiAzNTAsIGVhc2luZzogJ2N1YmljLWJlemllcigwLjI2LCAwLjg2LCAwLjQ0LCAwLjk4NSknIH07XG4gICAgLy8gICAgIGVsZW0uYW5pbWF0ZShcbiAgICAvLyAgICAgICBbXG4gICAgLy8gICAgICAgICB7XG4gICAgLy8gICAgICAgICAgIHRyYW5zZm9ybU9yaWdpbjogJ3RvcCBsZWZ0JyxcbiAgICAvLyAgICAgICAgICAgdHJhbnNmb3JtOiBgXG4gICAgLy8gdHJhbnNsYXRlKCR7ZGVsdGFYfXB4LCAke2RlbHRhWX1weClcbiAgICAvLyBzY2FsZSgke2RlbHRhV30sICR7ZGVsdGFIfSlcbiAgICAvLyBgLFxuICAgIC8vICAgICAgICAgICAvLyB3aWR0aDogY2FjaGUud2lkdGgsXG4gICAgLy8gICAgICAgICAgIC8vIGhlaWdodDogY2FjaGUuaGVpZ2h0KyAncHgnLFxuICAgIC8vICAgICAgICAgICAvLyBvcGFjaXR5OiBjYWNoZS5vcGFjaXR5LFxuICAgIC8vICAgICAgICAgfSxcbiAgICAvLyAgICAgICAgIHtcbiAgICAvLyAgICAgICAgICAgdHJhbnNmb3JtT3JpZ2luOiAndG9wIGxlZnQnLFxuICAgIC8vICAgICAgICAgICB0cmFuc2Zvcm06ICdub25lJyxcbiAgICAvLyAgICAgICAgIH0sXG4gICAgLy8gICAgICAgXSxcbiAgICAvLyAgICAgICB7XG4gICAgLy8gICAgICAgICBkdXJhdGlvbixcbiAgICAvLyAgICAgICAgIGVhc2luZyxcbiAgICAvLyAgICAgICB9XG4gICAgLy8gICAgICk7XG4gICAgLy8gICB9KTtcbiAgICAvLyB9O1xuICAgIC8vIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIC8vICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICAvLyAgIHRoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIC8vIH1cbiAgfVxuICByZXR1cm4gRmxpcHBhYmxlc0VsZW1lbnQgYXMgQ29uc3RydWN0b3I8RmxpcHBhYmxlc0ludGVyZmFjZT4gJiBUO1xufTtcbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IElJbnRlcmFjdGlvbiB9IGZyb20gJy4uL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBEcm9wcGFibGVzTWl4aW4gfSBmcm9tICcuL2Ryb3BwYWJsZXMtbWl4aW4nO1xuaW1wb3J0IHsgRmxpcHBhYmxlc01peGluIH0gZnJvbSAnLi9mbGlwcGFibGVzLW1peGluJztcblxuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBsaXZlUXVlcnkgfSBmcm9tICcuLi8uLi8uLi8uLi9kZWNvcmF0b3JzL2xpdmUtcXVlcnknO1xuaW1wb3J0IHsgd2F0Y2ggfSBmcm9tICcuLi8uLi8uLi8uLi9kZWNvcmF0b3JzL3dhdGNoJztcbmltcG9ydCB7IFRvdWNoRHJhZ0FuZERyb3AgfSBmcm9tICcuL2RyYWctZHJvcC1hcGknO1xuLy8ga2V5Ym9hcmQgbmF2aWdhdGFibGUgZHJhZyBkcm9wOiBodHRwczovL2NvZGVwZW4uaW8vU2l0ZVBvaW50L3Blbi92RXpYYmpcbi8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzU1MjQyMTk2L3R5cGVzY3JpcHQtYWxsb3dzLXRvLXVzZS1wcm9wZXItbXVsdGlwbGUtaW5oZXJpdGFuY2Utd2l0aC1taXhpbnMtYnV0LWZhaWxzLXRvLWNcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMTc3NDQjaXNzdWVjb21tZW50LTU1ODk5MDM4MVxuLy8gaHR0cHM6Ly9uZy1ydW4uY29tL2VkaXQvOU1HcjVkWVdBMjBBaUp0cHk1YXo/b3Blbj1hcHAlMkZhcHAuY29tcG9uZW50Lmh0bWxcblxudHlwZSBDb25zdHJ1Y3RvcjxUPiA9IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQ7XG5cbmludGVyZmFjZSBJbnRlcmFjdGlvbkNvbmZpZ3VyYXRpb24ge1xuICBjb3B5U3R5bGVzRHJhZ0Nsb25lOiBib29sZWFuO1xuICBkcmFnQ2FuQmVQbGFjZWRCYWNrOiBib29sZWFuO1xuICBkcmFnT25DbGljazogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IERyYWdEcm9wSW50ZXJhY3Rpb25NaXhpbiA9IDxUIGV4dGVuZHMgQ29uc3RydWN0b3I8TGl0RWxlbWVudD4+KFxuICBzdXBlckNsYXNzOiBULFxuICBkcmFnZ2FibGVzU2VsZWN0b3I6IHN0cmluZyxcbiAgZHJvcHBhYmxlc0luU2hhZG93Um9vdDogYm9vbGVhbixcbiAgZHJvcHBhYmxlc1NlbGVjdG9yOiBzdHJpbmdcbikgPT4ge1xuICBjbGFzcyBEcmFnRHJvcEludGVyYWN0aW9uRWxlbWVudCBleHRlbmRzIEZsaXBwYWJsZXNNaXhpbihcbiAgICBEcm9wcGFibGVzTWl4aW4oc3VwZXJDbGFzcywgZHJvcHBhYmxlc0luU2hhZG93Um9vdCwgZHJvcHBhYmxlc1NlbGVjdG9yKSxcbiAgICBkcm9wcGFibGVzU2VsZWN0b3IsXG4gICAgZHJhZ2dhYmxlc1NlbGVjdG9yXG4gICkge1xuICAgIHByb3RlY3RlZCBkcmFnZ2FibGVzID0gbmV3IE1hcDxFbGVtZW50LCB7IHBhcmVudDogRWxlbWVudDsgaW5kZXg6IG51bWJlciB9PigpO1xuICAgIHByb3RlY3RlZCBkcm9wcGFibGVzOiBFbGVtZW50W107XG4gICAgZHJhZ0Ryb3BBcGk6IFRvdWNoRHJhZ0FuZERyb3A7XG5cbiAgICBAbGl2ZVF1ZXJ5KGRyYWdnYWJsZXNTZWxlY3RvcilcbiAgICByZUluaXREcmFnQW5kRHJvcChkcmFnc0FkZGVkOiBFbGVtZW50W10sIGRyYWdzUmVtb3ZlZDogRWxlbWVudFtdKSB7XG4gICAgICBpZiAodGhpcy5jbGFzc0xpc3QuY29udGFpbnMoJ3F0aS1tYXRjaC10YWJ1bGFyJykpIHJldHVybjtcblxuICAgICAgLy8gY2hlY2sgaWYgYWRkZWQgZWxlbWVudHMgYXJlIG5vdCBhbHJlYWR5IGluIGxpc3RcbiAgICAgIGNvbnN0IGRyYWdnYWJsZXMgPSBkcmFnc0FkZGVkLmZpbHRlcihkID0+ICF0aGlzLmRyYWdnYWJsZXMgfHwgIXRoaXMuZHJhZ2dhYmxlcy5nZXQoZCkpO1xuXG4gICAgICBpZiAoZHJhZ2dhYmxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuZHJhZ0Ryb3BBcGkuYWRkRHJhZ2dhYmxlcyhkcmFnc0FkZGVkKTtcblxuICAgICAgICBkcmFnc0FkZGVkLmZvckVhY2goZWxlbSA9PiB7XG4gICAgICAgICAgLy8gc3RvcmUgaW5pdGlhbCBwb3NpdGlvbnMgb2YgZWxlbWVudHMsIGFuZCBvZiBjb3Vyc2UsIGp1c3QgdGhlIGVsZW1lbnRzIGZvciBsb29waW5nIGFuZCBzdWNoXG4gICAgICAgICAgdGhpcy5kcmFnZ2FibGVzLnNldChlbGVtLCB7XG4gICAgICAgICAgICBwYXJlbnQ6IGVsZW0ucGFyZW50RWxlbWVudCxcbiAgICAgICAgICAgIGluZGV4OiBBcnJheS5mcm9tKGVsZW0ucGFyZW50Tm9kZS5jaGlsZHJlbikuaW5kZXhPZihlbGVtKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGVsZW0uc2V0QXR0cmlidXRlKCdxdGktZHJhZ2dhYmxlJywgJ3RydWUnKTtcbiAgICAgICAgICBlbGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIHRoaXMuaGFuZGxlRHJhZ1N0YXJ0KTtcbiAgICAgICAgICBlbGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbmQnLCB0aGlzLmhhbmRsZURyYWdFbmQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ3Jlc3BvbnNlLWlkZW50aWZpZXInIH0pIHJlc3BvbnNlSWRlbnRpZmllcjogc3RyaW5nID0gJyc7XG5cbiAgICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6IGZhbHNlLCB0eXBlOiBPYmplY3QgfSkgY29uZmlndXJhdGlvbjogSW50ZXJhY3Rpb25Db25maWd1cmF0aW9uID0ge1xuICAgICAgY29weVN0eWxlc0RyYWdDbG9uZTogdHJ1ZSxcbiAgICAgIGRyYWdDYW5CZVBsYWNlZEJhY2s6IHRydWUsXG4gICAgICBkcmFnT25DbGljazogZmFsc2VcbiAgICB9O1xuICAgIEB3YXRjaCgnY29uZmlndXJhdGlvbicpXG4gICAgaGFuZGxlRHJhZ09wdGlvbnNDaGFuZ2VkKG9sZCwgZHJhZ09wdGlvbnMpIHtcbiAgICAgIHRoaXMuZHJhZ0Ryb3BBcGkuY29weVN0eWxlc0RyYWdDbG9uZSA9IGRyYWdPcHRpb25zLmNvcHlTdHlsZXNEcmFnQ2xvbmU7XG4gICAgICB0aGlzLmRyYWdEcm9wQXBpLmRyYWdPbkNsaWNrID0gZHJhZ09wdGlvbnMuZHJhZ09uQ2xpY2s7XG4gICAgfVxuXG4gICAgQHByb3BlcnR5KHsgdHlwZTogQm9vbGVhbiwgcmVmbGVjdDogdHJ1ZSB9KSBkaXNhYmxlZCA9IGZhbHNlO1xuICAgIEB3YXRjaCgnZGlzYWJsZWQnLCB7IHdhaXRVbnRpbEZpcnN0VXBkYXRlOiB0cnVlIH0pXG4gICAgaGFuZGxlRGlzYWJsZWRDaGFuZ2Uob2xkLCBkaXNhYmxlZDogYm9vbGVhbikge1xuICAgICAgdGhpcy5kcmFnZ2FibGVzLmZvckVhY2goKHMsIGNoKSA9PiB7XG4gICAgICAgIGRpc2FibGVkID8gY2guc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsICcnKSA6IGNoLnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcbiAgICAgICAgZGlzYWJsZWQgPyBjaC5yZW1vdmVBdHRyaWJ1dGUoJ3F0aS1kcmFnZ2FibGUnKSA6IGNoLnNldEF0dHJpYnV0ZSgncXRpLWRyYWdnYWJsZScsICd0cnVlJyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuLCByZWZsZWN0OiB0cnVlIH0pIHJlYWRvbmx5ID0gZmFsc2U7XG4gICAgQHdhdGNoKCdyZWFkb25seScsIHsgd2FpdFVudGlsRmlyc3RVcGRhdGU6IHRydWUgfSlcbiAgICBoYW5kbGVSZWFkb25seUNoYW5nZShvbGQsIHJlYWRvbmx5OiBib29sZWFuKSB7XG4gICAgICB0aGlzLmRyYWdnYWJsZXMuZm9yRWFjaCgocywgY2gpID0+IHtcbiAgICAgICAgcmVhZG9ubHkgPyBjaC5zZXRBdHRyaWJ1dGUoJ3JlYWRvbmx5JywgJycpIDogY2gucmVtb3ZlQXR0cmlidXRlKCdyZWFkb25seScpO1xuICAgICAgICByZWFkb25seSA/IGNoLnJlbW92ZUF0dHJpYnV0ZSgncXRpLWRyYWdnYWJsZScpIDogY2guc2V0QXR0cmlidXRlKCdxdGktZHJhZ2dhYmxlJywgJ3RydWUnKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIEBwcm9wZXJ0eSh7IHR5cGU6IE51bWJlciwgcmVmbGVjdDogdHJ1ZSwgYXR0cmlidXRlOiAnbWluLWFzc29jaWF0aW9ucycgfSkgbWluQXNzb2NpYXRpb25zID0gMTtcbiAgICBAcHJvcGVydHkoeyB0eXBlOiBOdW1iZXIsIHJlZmxlY3Q6IHRydWUsIGF0dHJpYnV0ZTogJ21heC1hc3NvY2lhdGlvbnMnIH0pIG1heEFzc29jaWF0aW9ucyA9IDE7XG5cbiAgICBvdmVycmlkZSBmaXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BzKTogdm9pZCB7XG4gICAgICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BzKTtcbiAgICAgIHRoaXMuZHJvcHBhYmxlcyA9IEFycmF5LmZyb20oXG4gICAgICAgIGRyb3BwYWJsZXNJblNoYWRvd1Jvb3RcbiAgICAgICAgICA/IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKGRyb3BwYWJsZXNTZWxlY3RvcilcbiAgICAgICAgICA6IHRoaXMucXVlcnlTZWxlY3RvckFsbChkcm9wcGFibGVzU2VsZWN0b3IpXG4gICAgICApO1xuICAgICAgLy8gUEs6IE1heWJlIGxhdGVyLCBmb3Igbm93IHdlIGFzc3VtZSBkcm9wcGFibGVzIGFyZSBub3QgZHluYW1pY2x5IGFkZGVkIG9yIHJlbW92ZWRcbiAgICAgIC8vIC5maWx0ZXIoKGVsZW0pID0+ICF0aGlzLmRyb3BwYWJsZXMgfHwgIXRoaXMuZHJvcHBhYmxlcy5pbmNsdWRlcyhlbGVtKSk7XG4gICAgICAvLyB0aGlzLmRyb3BwYWJsZXMgPSB0aGlzLmRyb3BwYWJsZXMgPyB0aGlzLmRyb3BwYWJsZXMuY29uY2F0KG5ld0Ryb3BwYWJsZXMpIDogbmV3RHJvcHBhYmxlcztcbiAgICB9XG5cbiAgICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cbiAgICAgIHRoaXMuZHJhZ0Ryb3BBcGkgPSBuZXcgVG91Y2hEcmFnQW5kRHJvcCgpO1xuXG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgIG5ldyBDdXN0b21FdmVudDxEcmFnRHJvcEludGVyYWN0aW9uRWxlbWVudD4oJ3F0aS1yZWdpc3Rlci1pbnRlcmFjdGlvbicsIHtcbiAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICAgIGRldGFpbDogdGhpc1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZURyYWdTdGFydCA9IChldjogYW55KSA9PiB7XG4gICAgICBldi5kYXRhVHJhbnNmZXIuc2V0RGF0YSgndGV4dCcsIGV2LmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKGBpZGVudGlmaWVyYCkpO1xuICAgICAgZXYuY3VycmVudFRhcmdldC5zZXRBdHRyaWJ1dGUoJ2RyYWdnaW5nJywgJycpO1xuXG4gICAgICAvLyBoaWdobGlnaHQgYWxsIGRyb3BwYWJsZXMgd2l0aCBhbiBhY3RpdmUgY2xhc3NcbiAgICAgIHRoaXMuZHJvcHBhYmxlcy5mb3JFYWNoKGQgPT4gZC5zZXRBdHRyaWJ1dGUoJ2VuYWJsZWQnLCAnJykpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIGhhbmRsZURyYWdFbmQgPSAoZXY6IERyYWdFdmVudCkgPT4ge1xuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuZHJvcHBhYmxlcy5mb3JFYWNoKGQgPT4gZC5yZW1vdmVBdHRyaWJ1dGUoJ2VuYWJsZWQnKSk7XG4gICAgICBjb25zdCBkcmFnZ2FibGUgPSBldi5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgZHJhZ2dhYmxlLnJlbW92ZUF0dHJpYnV0ZSgnb3ZlcicpO1xuICAgICAgZHJhZ2dhYmxlLnJlbW92ZUF0dHJpYnV0ZSgnZHJhZ2dpbmcnKTtcblxuICAgICAgLy8gcGs6IGlmIG5vdCBkcm9wcGVkIG9uIGEgZHJvcCBsb2NhdGlvbiBwdXQgaXQgYmFjayB3aGVyZSBpdCBiZWxvbmdzXG4gICAgICBpZiAoZXYuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPT09ICdub25lJyB8fCBldi5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uZHJhZ0NhbkJlUGxhY2VkQmFjaykge1xuICAgICAgICAgIHRoaXMucGxhY2VEcmFnZ2FibGVCYWNrKGRyYWdnYWJsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChldi5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9PT0gJ21vdmUnKSB7XG4gICAgICAgIHRoaXMuc2F2ZVJlc3BvbnNlKCk7XG4gICAgICAgIHRoaXMuY2hlY2tNYXhNYXRjaEFzc29jaWF0aW9ucygpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBwcml2YXRlIHBsYWNlRHJhZ2dhYmxlQmFjayhkcmFnZ2FibGU6IEhUTUxFbGVtZW50KSB7XG4gICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZHJhZ2dhYmxlcy5nZXQoZHJhZ2dhYmxlKTtcbiAgICAgIGNvbnN0IGluZGV4ID1cbiAgICAgICAgcG9zaXRpb24uaW5kZXggPD0gcG9zaXRpb24ucGFyZW50LmNoaWxkcmVuLmxlbmd0aCA/IHBvc2l0aW9uLmluZGV4IDogcG9zaXRpb24ucGFyZW50LmNoaWxkcmVuLmxlbmd0aCAtIDE7XG4gICAgICBjb25zdCBpbnRlcmFjdGlvbiA9IHBvc2l0aW9uLnBhcmVudDtcbiAgICAgIGNvbnN0IGdhcFRleHQgPSBwb3NpdGlvbi5wYXJlbnQuY2hpbGRyZW5baW5kZXhdO1xuXG4gICAgICBpbnRlcmFjdGlvbi5pbnNlcnRCZWZvcmUoZHJhZ2dhYmxlLCBnYXBUZXh0KTtcbiAgICAgIHRoaXMuc2F2ZVJlc3BvbnNlKCk7XG4gICAgICB0aGlzLmNoZWNrTWF4TWF0Y2hBc3NvY2lhdGlvbnMoKTtcbiAgICB9XG5cbiAgICByZXNldChzYXZlID0gdHJ1ZSk6IHZvaWQge1xuICAgICAgdGhpcy5kcmFnZ2FibGVzLmZvckVhY2goKHBvc2l0aW9uLCBkcmFnZ2FibGUpID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBwb3NpdGlvbi5wYXJlbnQuY2hpbGRyZW47XG4gICAgICAgIGNvbnN0IGluZGV4ID0gcG9zaXRpb24uaW5kZXggPCBjaGlsZHJlbi5sZW5ndGggPyBwb3NpdGlvbi5pbmRleCA6IGNoaWxkcmVuLmxlbmd0aDtcbiAgICAgICAgcG9zaXRpb24ucGFyZW50Lmluc2VydEJlZm9yZShkcmFnZ2FibGUsIGNoaWxkcmVuW2luZGV4XSk7XG4gICAgICB9KTtcbiAgICAgIHNhdmUgJiYgdGhpcy5zYXZlUmVzcG9uc2UoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY2hlY2tNYXhNYXRjaEFzc29jaWF0aW9ucygpIHtcbiAgICAgIHRoaXMuZHJvcHBhYmxlcy5mb3JFYWNoKGQgPT4ge1xuICAgICAgICBjb25zdCBtYXhNYXRjaCA9ICsoZC5nZXRBdHRyaWJ1dGUoJ21hdGNoLW1heCcpIHx8IDEpO1xuICAgICAgICAvLyBjb25zdCBtYXhNaW4gPSArKGQuZ2V0QXR0cmlidXRlKCdtYXRjaC1taW4nKSB8fCAwKTtcbiAgICAgICAgLy8gY29uc3QgZGlzYWJsZSA9IG1heE1hdGNoIDw9IChkLmNoaWxkcmVuLmxlbmd0aCB8fCAwKTtcbiAgICAgICAgY29uc3QgZGlzYWJsZSA9IG1heE1hdGNoIDw9IChkLnF1ZXJ5U2VsZWN0b3JBbGwoJ1txdGktZHJhZ2dhYmxlPVwidHJ1ZVwiXScpLmxlbmd0aCB8fCAwKTtcblxuICAgICAgICBkaXNhYmxlID8gZC5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgJycpIDogZC5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XG4gICAgICAgIGRpc2FibGUgPyBkLnJlbW92ZUF0dHJpYnV0ZSgnZHJvcHpvbmUnKSA6IGQuc2V0QXR0cmlidXRlKCdkcm9wem9uZScsICdtb3ZlJyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXQgcmVzcG9uc2UocmVzcG9uc2U6IHN0cmluZ1tdKSB7XG4gICAgICAvLyBmb3IgcXRpLW1hdGNoLWludGVyYWN0aW9uIHRoZSBkcmFnIGludGVyYWN0aW9uIGNhbiBiZSByZXBsYWNlIHdpdGggYSBxdGktbWF0Y2gtdGFidWxhciBjbGFzc1xuICAgICAgLy8gd2hpY2ggc2hvd3MgdGhlIGRhdGEgaW4gYSBhIHRhYnVsYXIgd2F5LCBzbyBubyBkcmFnIGRyb3Agc2hvdWxkIGJlIGludm9sdmVkIHRoZW5cbiAgICAgIGlmICh0aGlzLmNsYXNzTGlzdC5jb250YWlucygncXRpLW1hdGNoLXRhYnVsYXInKSkgcmV0dXJuO1xuXG4gICAgICB0aGlzLnJlc2V0KGZhbHNlKTtcbiAgICAgIGlmIChyZXNwb25zZSAhPT0gbnVsbCAmJiBBcnJheS5pc0FycmF5KHJlc3BvbnNlKSlcbiAgICAgICAgcmVzcG9uc2UuZm9yRWFjaChyZXNwb25zZSA9PiB7XG4gICAgICAgICAgY29uc3QgW2Ryb3BJZCwgLi4uZHJhZ0lkc10gPSByZXNwb25zZS5zcGxpdCgnICcpLnJldmVyc2UoKTtcbiAgICAgICAgICBpZiAoZHJvcElkKSB7XG4gICAgICAgICAgICBjb25zdCBkcm9wcGFibGUgPSB0aGlzLmRyb3BwYWJsZXMuZmluZChkcm9wID0+IGRyb3AuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJykgPT09IGRyb3BJZCk7XG4gICAgICAgICAgICBkcmFnSWRzLmZvckVhY2goZHJhZ0lkID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZHJhZ2dhYmxlID0gdGhpcy5xdWVyeVNlbGVjdG9yKGBbaWRlbnRpZmllcj0ke2RyYWdJZH1dYCk7XG4gICAgICAgICAgICAgIGlmICghZHJvcHBhYmxlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgY2Fubm90IGZpbmQgZHJvcHBhYmxlIHdpdGggaWRlbnRpZmllcjogJHtkcm9wSWR9YCk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWRyYWdnYWJsZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYGNhbm5vdCBmaW5kIGRyYWdnYWJsZSB3aXRoIGlkZW50aWZpZXI6ICR7ZHJhZ0lkfWApO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRyb3BwYWJsZS5hcHBlbmRDaGlsZChkcmFnZ2FibGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tNYXhNYXRjaEFzc29jaWF0aW9ucygpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhbGlkYXRlKCkge1xuICAgICAgY29uc3QgZHJvcHBhYmxlcyA9IGRyb3BwYWJsZXNJblNoYWRvd1Jvb3RcbiAgICAgICAgPyBBcnJheS5mcm9tKHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKGRyb3BwYWJsZXNTZWxlY3RvcikpXG4gICAgICAgIDogQXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoZHJvcHBhYmxlc1NlbGVjdG9yKSk7XG4gICAgICBjb25zdCBhc3NvY2lhdGlvbnMgPSBkcm9wcGFibGVzLmZpbHRlcihkID0+IGQuY2hpbGRFbGVtZW50Q291bnQgPiAwKS5sZW5ndGg7XG4gICAgICByZXR1cm4gdGhpcy5taW5Bc3NvY2lhdGlvbnMgPD0gMCB8fCB0aGlzLm1pbkFzc29jaWF0aW9ucyA8PSBhc3NvY2lhdGlvbnM7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNhdmVSZXNwb25zZSgpIHtcbiAgICAgIGxldCByZXNwb25zZTogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgICBpZiAodHlwZW9mICh0aGlzIGFzIGFueSkuZ2V0UmVzcG9uc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gb25seSBmb3IgdGhlIHF0aS1vcmRlci1pbnRlcmFjdGlvbiwgYWJzdHJhY3RlZCB0aGlzIGF3YXkgaW4gYSBtZXRob2RcbiAgICAgICAgcmVzcG9uc2UgPSAodGhpcyBhcyBhbnkpLmdldFJlc3BvbnNlKCk7IC8vIENhbGwgdGhlIG1ldGhvZCBmcm9tIHRoZSBpbXBsZW1lbnRpbmcgY2xhc3NcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3BvbnNlID0gdGhpcy5kcm9wcGFibGVzLm1hcChkcm9wcGFibGUgPT4ge1xuICAgICAgICAgIGNvbnN0IGRyYWdzSW5Ecm9wcGFibGUgPSBkcm9wcGFibGUucXVlcnlTZWxlY3RvckFsbCgnW3F0aS1kcmFnZ2FibGU9XCJ0cnVlXCJdJyk7XG4gICAgICAgICAgY29uc3QgaWRlbnRpZmllcnMgPSBBcnJheS5mcm9tKGRyYWdzSW5Ecm9wcGFibGUpLm1hcChkID0+IGQuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJykpO1xuICAgICAgICAgIGNvbnN0IGRyb3BwYWJsZUlkZW50aWZpZXIgPSBkcm9wcGFibGUuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJyk7XG4gICAgICAgICAgcmV0dXJuIFsuLi5pZGVudGlmaWVycywgZHJvcHBhYmxlSWRlbnRpZmllcl0uam9pbignICcpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3F0aS1pbnRlcmFjdGlvbi1yZXNwb25zZScsIHtcbiAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgcmVzcG9uc2VJZGVudGlmaWVyOiB0aGlzLnJlc3BvbnNlSWRlbnRpZmllcixcbiAgICAgICAgICAgIHJlc3BvbnNlXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIERyYWdEcm9wSW50ZXJhY3Rpb25FbGVtZW50IGFzIENvbnN0cnVjdG9yPElJbnRlcmFjdGlvbj4gJiBUO1xufTtcbiIsICJpbXBvcnQgeyBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IEludGVyYWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJuYWwvaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24nO1xuaW1wb3J0IHsgcmVtb3ZlRG91YmxlU2xhc2hlcyB9IGZyb20gJy4uLy4uL2ludGVybmFsL3V0aWxzJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1jdXN0b20taW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aUN1c3RvbUludGVyYWN0aW9uIGV4dGVuZHMgSW50ZXJhY3Rpb24ge1xuICAvLyBUaGlzIGN1c3RvbS1pbnRlcmFjdGlvbiBzdXBwb3J0IHRoZSBDRVMgQVBJIHdoaWNoIGlzIHVzZSBpbiBGQUNFVFxuICAvL1xuICAvLyBJdCB3b3JrcyBsaWtlIHRoaXM6XG4gIC8vIDEuIFRoZSBDSSBtYW5pZmVzdCBpcyBmZXRjaGVkXG4gIC8vIDIuIEFuIGlmcmFtZSBpcyBjcmVhdGVkIGFuZCB0aGUgZmlyc3Qgc3R5bGUgYW5kIGZpcnN0IHNjcmlwdCBmcm9tIHRoZSBtYW5pZmVzdCBhcmUgbG9hZGVkXG4gIC8vIDMuIFRoZSBmaXJzdCBzY3JpcHQgaXMgYm9vdHN0cmFwLmpzIHdoaWNoIGFsc28gY3JlYXRlcyBhbiBpZnJhbWUgYW5kIGxvYWRzIHRoZSBmaXJzdCBtZWRpYSBmcm9tIHRoZSBtYW5pZmVzdFxuICAvLyA0LiBDb21tdW5pY2F0aW9uIGlzIGRvbmUgdmlhIHRoZSBDRVMgQVBJIGJ1dCBiZWNhdXNlIHRoZSBpZnJhbWUgaXMgbm90IGFsbG93ZWQgdG8gYWNjZXNzIHRoZSBnbG9iYWwgQ0VTIG9iamVjdCB3ZSBuZWVkIHRvIHVzZSB3aW5kb3cucG9zdE1lc3NhZ2VcblxuICAvLyBUbyBhY2hpZXZlIHRoaXMgd2UgY2hhbmdlIHRoZSBwYWNrYWdlIGJ5IHJlcGxhY2luZyB0aGUgYm9vdHN0cmFwLmpzIHdpdGggb3VyIG93biBhbmQgaW5qZWN0IGEgcHJveHkgQ0VTIEFQSSB0aGF0IGNvbW11bmljYXRlcyB2aWEgcG9zdE1lc3NhZ2VcbiAgLy8gQmVjYXVzZSB3ZSBhbHNvIHdhbnQgdG8gcnVuIHRoaXMgaW4gc3Rvcnlib29rLCB3ZSBjYW5ub3QgdXNlIHdpbmRvdy50b3AgYmVjYXVzZSB0byBzZW5kIG1lc3NhZ2VzIHRoZXJlLCBiZWNhdXNlIGluIGNhc2Ugb2Ygc3Rvcnlib29rIHRoYXQgaXMgbm90IHRoZSB0b3Agd2luZG93LlxuICAvLyBTbyB3ZSBzZW5kIG1lc3NhZ2VzIHRvIGFsbCBwYXJlbnQgd2luZG93c1xuICBwcml2YXRlIHJhd1Jlc3BvbnNlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmhhbmRsZVBvc3RNZXNzYWdlID0gdGhpcy5oYW5kbGVQb3N0TWVzc2FnZS5iaW5kKHRoaXMpO1xuICB9XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdyZXNwb25zZS1pZGVudGlmaWVyJyB9KVxuICByZXNwb25zZUlkZW50aWZpZXI6IHN0cmluZztcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2RhdGEnIH0pXG4gIGRhdGE6IHN0cmluZztcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2RhdGEtYmFzZS1pdGVtJyB9KVxuICBiYXNlSXRlbVVybDogc3RyaW5nO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnZGF0YS1iYXNlLXJlZicgfSlcbiAgYmFzZVJlZlVybDogc3RyaW5nO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnaWQnIH0pXG4gIGlkOiBzdHJpbmc7XG5cbiAgQHN0YXRlKClcbiAgcHJpdmF0ZSBfZXJyb3JNZXNzYWdlOiBzdHJpbmcgPSBudWxsO1xuICBtYW5pZmVzdDoge1xuICAgIHNjcmlwdDogc3RyaW5nW107XG4gICAgc3R5bGU6IHN0cmluZ1tdO1xuICAgIG1lZGlhOiBzdHJpbmdbXTtcbiAgfTtcblxuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG4gICAgY29uc3QgdXJpVG9NYW5pZmVzdCA9IHRoaXMuZGF0YS5zdGFydHNXaXRoKCdodHRwJylcbiAgICAgID8gdGhpcy5kYXRhXG4gICAgICA6IHJlbW92ZURvdWJsZVNsYXNoZXModGhpcy5iYXNlSXRlbVVybCArICcvJyArIHRoaXMuZGF0YSk7XG4gICAgLy8gZmV0Y2ggdGhlIGpzb24gZmlsZSBsb2NhdGVkIGF0IHRoZSBkYXRhIGF0dHJpYnV0ZVxuICAgIGZldGNoKHVyaVRvTWFuaWZlc3QpXG4gICAgICAudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS5qc29uKCkpXG4gICAgICAudGhlbihkYXRhID0+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+PC9zbG90PlxuICAgICAgPCEtLSBzbG90IGZvciB0aGUgaW1hZ2UgYW5kIGhvdHNwb3RzIC0tPlxuICAgIGA7XG4gIH1cblxuICBwcml2YXRlIHBvc2l0aW9uSG90c3BvdE9uUmVnaXN0ZXIoZTogQ3VzdG9tRXZlbnQ8UXRpSG90c3BvdENob2ljZT4pOiB2b2lkIHtcbiAgICBjb25zdCBpbWcgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpIGFzIEhUTUxJbWFnZUVsZW1lbnQ7XG4gICAgY29uc3QgaG90c3BvdCA9IGUudGFyZ2V0IGFzIFF0aUhvdHNwb3RDaG9pY2U7XG4gICAgY29uc3QgY29vcmRzID0gaG90c3BvdC5nZXRBdHRyaWJ1dGUoJ2Nvb3JkcycpO1xuICAgIGNvbnN0IHNoYXBlID0gaG90c3BvdC5nZXRBdHRyaWJ1dGUoJ3NoYXBlJyk7XG4gICAgY29uc3QgY29vcmRzTnVtYmVyID0gY29vcmRzLnNwbGl0KCcsJykubWFwKHMgPT4gcGFyc2VJbnQocykpO1xuXG4gICAgcG9zaXRpb25Ib3RzcG90cyhzaGFwZSwgY29vcmRzTnVtYmVyLCBpbWcsIGhvdHNwb3QpO1xuICB9XG5cbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci1jaG9pY2UnLCB0aGlzLnBvc2l0aW9uSG90c3BvdE9uUmVnaXN0ZXIpO1xuICB9XG4gIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdxdGktcmVnaXN0ZXItY2hvaWNlJywgdGhpcy5wb3NpdGlvbkhvdHNwb3RPblJlZ2lzdGVyKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktaG90c3BvdC1pbnRlcmFjdGlvbic6IFF0aUhvdHNwb3RJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IGNzcywgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4gfSBmcm9tICcuLi9pbnRlcm5hbC9kcmFnLWRyb3AvZHJhZy1kcm9wLWludGVyYWN0aW9uLW1peGluJztcblxuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgdW5zYWZlSFRNTCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3Vuc2FmZS1odG1sLmpzJztcbmltcG9ydCB7IFJlc3BvbnNlSW50ZXJhY3Rpb24gfSBmcm9tICcuLi8uLi9pbnRlcm5hbC9leHByZXNzaW9uLXJlc3VsdCc7XG5pbXBvcnQgJy4uL3F0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UnO1xuaW1wb3J0IHsgUXRpU2ltcGxlQXNzb2NpYWJsZUNob2ljZSB9IGZyb20gJy4uL3F0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UnO1xuXG5pbnRlcmZhY2UgQ29sdW1uIHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUm93IHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBpc0NoZWNrZWQ6IGJvb2xlYW47XG59XG5cbkBjdXN0b21FbGVtZW50KCdxdGktbWF0Y2gtaW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aU1hdGNoSW50ZXJhY3Rpb24gZXh0ZW5kcyBEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4oXG4gIExpdEVsZW1lbnQsXG4gICdxdGktc2ltcGxlLW1hdGNoLXNldDpmaXJzdC1vZi10eXBlIHF0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UnLFxuICBmYWxzZSxcbiAgJ3F0aS1zaW1wbGUtbWF0Y2gtc2V0Omxhc3Qtb2YtdHlwZSBxdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlJ1xuKSB7XG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBbXG4gICAgY3NzYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDAuNXJlbTtcbiAgICAgIH1cblxuICAgICAgLyogOmhvc3QoLnF0aS1jaG9pY2VzLXRvcCkge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgfSAqL1xuICAgICAgOmhvc3QoLnF0aS1jaG9pY2VzLWJvdHRvbSkge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XG4gICAgICB9XG4gICAgICA6aG9zdCgucXRpLWNob2ljZXMtbGVmdCkge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgfVxuICAgICAgOmhvc3QoLnF0aS1jaG9pY2VzLXJpZ2h0KSB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcbiAgICAgIH1cbiAgICBgXG4gIF07XG5cbiAgcm93czogUXRpU2ltcGxlQXNzb2NpYWJsZUNob2ljZVtdO1xuICBjb2xzOiBRdGlTaW1wbGVBc3NvY2lhYmxlQ2hvaWNlW107XG4gIGxhc3RDaGVja2VkUmFkaW86IEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICBAc3RhdGUoKSByZXNwb25zZSA9IFtdO1xuICBAc3RhdGUoKSBjb3JyZWN0T3B0aW9uczogc3RyaW5nW10gPSBbXTtcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdyZXNwb25zZS1pZGVudGlmaWVyJyB9KSByZXNwb25zZUlkZW50aWZpZXI6IHN0cmluZyA9ICcnO1xuXG4gIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5yb3dzID0gQXJyYXkuZnJvbTxRdGlTaW1wbGVBc3NvY2lhYmxlQ2hvaWNlPihcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB3Yy9uby1jaGlsZC10cmF2ZXJzYWwtaW4tY29ubmVjdGVkY2FsbGJhY2tcbiAgICAgIHRoaXMucXVlcnlTZWxlY3RvckFsbCgncXRpLXNpbXBsZS1tYXRjaC1zZXQ6Zmlyc3Qtb2YtdHlwZSBxdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlJylcbiAgICApO1xuICAgIHRoaXMuY29scyA9IEFycmF5LmZyb208UXRpU2ltcGxlQXNzb2NpYWJsZUNob2ljZT4oXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgd2Mvbm8tY2hpbGQtdHJhdmVyc2FsLWluLWNvbm5lY3RlZGNhbGxiYWNrXG4gICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoJ3F0aS1zaW1wbGUtbWF0Y2gtc2V0Omxhc3Qtb2YtdHlwZSBxdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlJylcbiAgICApO1xuXG4gICAgdGhpcy5yZXNwb25zZSA9IFtdO1xuICB9XG5cbiAgaGFuZGxlUmFkaW9DbGljayA9IGUgPT4ge1xuICAgIGNvbnN0IHJhZGlvID0gZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBpZiAodGhpcy5sYXN0Q2hlY2tlZFJhZGlvID09PSByYWRpbykge1xuICAgICAgcmFkaW8uY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5sYXN0Q2hlY2tlZFJhZGlvID0gbnVsbDtcbiAgICAgIHRoaXMuaGFuZGxlUmFkaW9DaGFuZ2UoZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGFzdENoZWNrZWRSYWRpbyA9IHJhZGlvO1xuICAgIH1cbiAgfTtcblxuICBoYW5kbGVSYWRpb0NoYW5nZSA9IGUgPT4ge1xuICAgIGNvbnN0IGNoZWNrYm94ID0gZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBjb25zdCB2YWx1ZSA9IGNoZWNrYm94LnZhbHVlO1xuICAgIGNvbnN0IG5hbWUgPSBjaGVja2JveC5uYW1lO1xuICAgIGNvbnN0IHR5cGUgPSBjaGVja2JveC50eXBlO1xuXG4gICAgaWYgKGNoZWNrYm94LmNoZWNrZWQpIHtcbiAgICAgIGlmICghdGhpcy5yZXNwb25zZSkge1xuICAgICAgICB0aGlzLnJlc3BvbnNlID0gW3ZhbHVlXTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXNwb25zZS5pbmRleE9mKHZhbHVlKSA9PT0gLTEpIHtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdyYWRpbycpIHtcbiAgICAgICAgICB0aGlzLnJlc3BvbnNlID0gdGhpcy5yZXNwb25zZS5maWx0ZXIodiA9PiB2LmluZGV4T2YobmFtZSkgPT09IC0xKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlc3BvbnNlID0gWy4uLnRoaXMucmVzcG9uc2UsIHZhbHVlXTtcbiAgICAgIH1cbiAgICAgIHRoaXMubGFzdENoZWNrZWRSYWRpbyA9IGNoZWNrYm94O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlc3BvbnNlID0gdGhpcy5yZXNwb25zZS5maWx0ZXIodiA9PiB2ICE9PSB2YWx1ZSk7XG4gICAgICB0aGlzLmxhc3RDaGVja2VkUmFkaW8gPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpO1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBDdXN0b21FdmVudDxSZXNwb25zZUludGVyYWN0aW9uPigncXRpLWludGVyYWN0aW9uLXJlc3BvbnNlJywge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgcmVzcG9uc2VJZGVudGlmaWVyOiB0aGlzLnJlc3BvbnNlSWRlbnRpZmllcixcbiAgICAgICAgICByZXNwb25zZTogQXJyYXkuaXNBcnJheSh0aGlzLnJlc3BvbnNlKSA/IFsuLi50aGlzLnJlc3BvbnNlXSA6IHRoaXMucmVzcG9uc2VcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9O1xuXG4gIHNldCBjb3JyZWN0UmVzcG9uc2UocmVzcG9uc2VWYWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pIHtcbiAgICBpZiAocmVzcG9uc2VWYWx1ZSA9PT0gJycpIHtcbiAgICAgIHRoaXMuY29ycmVjdE9wdGlvbnMgPSBbXTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmVzcG9uc2VWYWx1ZSkpIHtcbiAgICAgIHRoaXMuY29ycmVjdE9wdGlvbnMgPSByZXNwb25zZVZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICBpZiAoIXRoaXMuY2xhc3NMaXN0LmNvbnRhaW5zKCdxdGktbWF0Y2gtdGFidWxhcicpKSB7XG4gICAgICByZXR1cm4gaHRtbGA8c2xvdCBuYW1lPVwicHJvbXB0XCI+PC9zbG90PiA8c2xvdD48L3Nsb3Q+YDtcbiAgICB9XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8c2xvdCBuYW1lPVwicHJvbXB0XCI+PC9zbG90PlxuICAgICAgPHRhYmxlPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRkPjwvdGQ+XG4gICAgICAgICAgJHt0aGlzLmNvbHMubWFwKChjb2wsIGkpID0+IGh0bWxgPHRoIHBhcnQ9XCJyLWhlYWRlclwiPiR7dW5zYWZlSFRNTChjb2wuaW5uZXJIVE1MKX08L3RoPmApfVxuICAgICAgICA8L3RyPlxuXG4gICAgICAgICR7dGhpcy5yb3dzLm1hcChcbiAgICAgICAgICAocm93LCBySW5kZXgpID0+XG4gICAgICAgICAgICBodG1sYDx0cj5cbiAgICAgICAgICAgICAgPHRkIHBhcnQ9XCJjLWhlYWRlclwiPiR7dW5zYWZlSFRNTChyb3cuaW5uZXJIVE1MKX08L3RkPlxuICAgICAgICAgICAgICAke3RoaXMuY29scy5tYXAoKGNvbCwgY0luZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93SWQgPSByb3cuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sSWQgPSBjb2wuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBgJHtyb3dJZH0gJHtjb2xJZH1gO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSW5Sb3dDb3VudCA9IHRoaXMucmVzcG9uc2UuZmlsdGVyKHYgPT4gdi5zcGxpdCgnICcpWzBdID09PSByb3dJZCkubGVuZ3RoIHx8IDA7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hlY2tlZCA9IHRoaXMucmVzcG9uc2UuaW5jbHVkZXModmFsdWUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnQgPSBgcmIgJHtjaGVja2VkID8gJ3JiLWNoZWNrZWQnIDogJyd9ICR7dGhpcy5jb3JyZWN0T3B0aW9ucy5pbmNsdWRlcyh2YWx1ZSkgPyAncmItY29ycmVjdCcgOiAnJ31gO1xuICAgICAgICAgICAgICAgIC8vIGRpc2FibGUgaWYgbWF0Y2ggbWF4IGlzIGdyZWF0ZXIgdGhhbiAxIGFuZCBtYXggaXMgcmVhY2hlZFxuICAgICAgICAgICAgICAgIGNvbnN0IGRpc2FibGUgPVxuICAgICAgICAgICAgICAgICAgdGhpcy5jb3JyZWN0T3B0aW9ucy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICA6IHJvdy5tYXRjaE1heCA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICA6IHNlbGVjdGVkSW5Sb3dDb3VudCA+PSByb3cubWF0Y2hNYXggJiYgIWNoZWNrZWQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGh0bWxgPHRkPlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9JHtyb3cubWF0Y2hNYXggPT09IDEgPyAncmFkaW8nIDogYGNoZWNrYm94YH1cbiAgICAgICAgICAgICAgICAgICAgcGFydD0ke3BhcnR9XG4gICAgICAgICAgICAgICAgICAgIG5hbWU9JHtyb3dJZH1cbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9JHt2YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgLmRpc2FibGVkPSR7ZGlzYWJsZX1cbiAgICAgICAgICAgICAgICAgICAgQGNoYW5nZT0ke2UgPT4gdGhpcy5oYW5kbGVSYWRpb0NoYW5nZShlKX1cbiAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7ZSA9PiAocm93Lm1hdGNoTWF4ID09PSAxID8gdGhpcy5oYW5kbGVSYWRpb0NsaWNrKGUpIDogbnVsbCl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvdGQ+YDtcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L3RyPmBcbiAgICAgICAgKX1cbiAgICAgIDwvdGFibGU+XG4gICAgYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktbWF0Y2gtaW50ZXJhY3Rpb24nOiBRdGlNYXRjaEludGVyYWN0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuLy8gVEhJUyBJUyBOT1QgVVNFRCBJTiBUQUJVTEFSIE1BVENIIElOVEVSQUNUSU9OXG5AY3VzdG9tRWxlbWVudCgncXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZScpXG4vLyB0c2xpbnQ6ZGlzYWJsZTogaW5kZW50XG5leHBvcnQgY2xhc3MgUXRpU2ltcGxlQXNzb2NpYWJsZUNob2ljZSBleHRlbmRzIExpdEVsZW1lbnQge1xuICAvKiogdGhlIG1pbmltYWwgbnVtYmVyIG9mIHNlbGVjdGlvbnMgYSBjYW5kaWRhdGUgbXVzdCBtYWtlICovXG4gIEBwcm9wZXJ0eSh7XG4gICAgdHlwZTogTnVtYmVyLFxuICAgIGF0dHJpYnV0ZTogJ21hdGNoLW1pbidcbiAgfSlcbiAgcHVibGljIG1hdGNoTWluOiBudW1iZXIgPSAwO1xuXG4gIC8qKiB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc2VsZWN0aW9ucyBhIGNhbmRpZGF0ZSBtdXN0IG1ha2UsIHRoZSBvdGhlciBvcHRpb25zIHdpbGwgYmUgZGlzYWJsZWQgd2hlbiBtYXggb3B0aW9ucyBpcyBjaGVja2VkICovXG4gIEBwcm9wZXJ0eSh7XG4gICAgdHlwZTogTnVtYmVyLFxuICAgIGF0dHJpYnV0ZTogJ21hdGNoLW1heCdcbiAgfSlcbiAgcHVibGljIG1hdGNoTWF4OiBudW1iZXIgPSAxO1xuXG4gIEBwcm9wZXJ0eSh7XG4gICAgdHlwZTogQm9vbGVhbixcbiAgICBhdHRyaWJ1dGU6ICdmaXhlZCdcbiAgfSlcbiAgcHVibGljIGZpeGVkID0gZmFsc2U7XG5cbiAgLy8gcGs6IFRoaXMgbmVlZHMgc29tZSBleHBsYW5hdGlvblxuICAvLyBpbiB0aGUgYXNzb2NpYXRlIGludGVyYWN0aW9uIHRoZXJlIGlzIGEgc3BlY2lhbCBzbG90IGZvciB0aGVzZSBxdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlc1xuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKCdzbG90JywgJ3F0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UnKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgncGFydCcsICdxdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlJyk7XG4gIH1cblxuICAvLyBwazogVGhpcyBuZWVkcyBzb21lIGV4cGxhbmF0aW9uXG4gIC8vIGluIHF0aS1tYXRjaC1pbnRlcmFjdGlvbiwgcXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZSBpcyB1c2VkIHRvIGRlbm90ZSB0aGVcbiAgLy8gZHJhZ2dhYmxlLCBidXQgYWxzbyB0aGUgZHJvcHBhYmxlLiBXRUlSRC4uIGJ1dCBsZXRzIGRlYWwgd2l0aCBpdC5cbiAgLy8gU28gd2UgaGF2ZSBhIHNsb3QgZm9yIHdoZW5ldmVyIGFub3RoZXIgcXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZSBpcyBkcm9wcGVkIGluIGhlcmUuXG4gIC8vIEFuZCB3ZSBoYXZlIHNsb3QgZm9yIGNvbnRlbnQgbGlrZSBpbiB0aGlzIGFzc29jaWF0ZSBpbnRlcmFjdGlvblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8c2xvdD48L3Nsb3Q+XG4gICAgICA8c2xvdCBuYW1lPVwicXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZVwiPjwvc2xvdD5cbiAgICBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UnOiBRdGlTaW1wbGVBc3NvY2lhYmxlQ2hvaWNlO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvbiB9IGZyb20gJy4uL2ludGVybmFsL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1tZWRpYS1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpTWVkaWFJbnRlcmFjdGlvbiBleHRlbmRzIEludGVyYWN0aW9uIHtcbiAgdmFsdWUgPSAwO1xuICByZXNldCgpIHtcbiAgICAvLyB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cbiAgdmFsaWRhdGUoKTogYm9vbGVhbiB7XG4gICAgLy8gdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHNldCByZXNwb25zZSh2YWw6IHVuZGVmaW5lZCkge1xuICAgIC8vIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIHN0YXRpYyBvdmVycmlkZSBnZXQgcHJvcGVydGllcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uSW50ZXJhY3Rpb24ucHJvcGVydGllcyxcbiAgICAgIC4uLntcbiAgICAgICAgc3RlcDoge1xuICAgICAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgICAgICBhdHRyaWJ1dGU6ICdzdGVwJyxcbiAgICAgICAgICBkZWZhdWx0OiAxMFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBbY3NzYGBdO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGAgPHNsb3QgbmFtZT1cInByb21wdFwiPjwvc2xvdD5cbiAgICAgIDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgLy8gZ2V0IGF1ZGlvLCB2aWRlbyBvZiBvYmplY3QgdGFnLlxuICAgIGNvbnN0IG1lZGlhT2JqZWN0ID0gdGhpcy5xdWVyeVNlbGVjdG9yKCdhdWRpbycpIHx8IHRoaXMucXVlcnlTZWxlY3RvcigndmlkZW8nKSB8fCB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ29iamVjdCcpO1xuICAgIGlmIChtZWRpYU9iamVjdCkge1xuICAgICAgLy8gbGlzdGVuIHRvIGVuZGVkIGV2ZW50XG4gICAgICBtZWRpYU9iamVjdC5hZGRFdmVudExpc3RlbmVyKCdlbmRlZCcsICgpID0+IHtcbiAgICAgICAgLy8gc2V0IHZhbHVlIHRvIDBcbiAgICAgICAgdGhpcy52YWx1ZSsrO1xuICAgICAgICB0aGlzLnNhdmVSZXNwb25zZSh0aGlzLnZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1tZWRpYS1pbnRlcmFjdGlvbic6IFF0aU1lZGlhSW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjc3MsIGh0bWwsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgdW5zYWZlSFRNTCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3Vuc2FmZS1odG1sLmpzJztcbmltcG9ydCB7IERyYWdEcm9wSW50ZXJhY3Rpb25NaXhpbiB9IGZyb20gJy4uL2ludGVybmFsL2RyYWctZHJvcC9kcmFnLWRyb3AtaW50ZXJhY3Rpb24tbWl4aW4nO1xuaW1wb3J0IHsgU2h1ZmZsZU1peGluIH0gZnJvbSAnLi4vaW50ZXJuYWwvc2h1ZmZsZS9zaHVmZmxlLW1peGluJzsgLy8gSW1wb3J0IHRoZSBtaXhpblxuaW1wb3J0IHsgUXRpU2ltcGxlQ2hvaWNlIH0gZnJvbSAnLi4vcXRpLXNpbXBsZS1jaG9pY2UnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLW9yZGVyLWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlPcmRlckludGVyYWN0aW9uIGV4dGVuZHMgU2h1ZmZsZU1peGluKFxuICBEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4oTGl0RWxlbWVudCwgYHF0aS1zaW1wbGUtY2hvaWNlYCwgdHJ1ZSwgJ2Ryb3AtbGlzdCcpLFxuICAncXRpLXNpbXBsZS1jaG9pY2UnXG4pIHtcbiAgY2hpbGRyZW5NYXA6IEVsZW1lbnRbXTtcblxuICBAc3RhdGUoKSBuckNob2ljZXM6IG51bWJlciA9IDA7XG4gIEBzdGF0ZSgpIGNvcnJlY3RSZXNwb25zZXM6IHN0cmluZ1tdID0gW107XG4gIEBzdGF0ZSgpIHNob3dDb3JyZWN0UmVzcG9uc2VzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIG9yaWVudGF0aW9uIG9mIGNob2ljZXMgKi9cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pXG4gIHB1YmxpYyBvcmllbnRhdGlvbjogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJztcblxuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gW1xuICAgIGNzc2BcbiAgICAgIFtwYXJ0PSdkcmFncyddIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICB9XG5cbiAgICAgIFtwYXJ0PSdkcm9wcyddIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC1hdXRvLWZsb3c6IGNvbHVtbjtcbiAgICAgICAgZ3JpZC1hdXRvLWNvbHVtbnM6IDFmcjtcbiAgICAgIH1cblxuICAgICAgOmhvc3QoW29yaWVudGF0aW9uPSdob3Jpem9udGFsJ10pIFtwYXJ0PSdkcmFncyddIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgIH1cbiAgICAgIDpob3N0KFtvcmllbnRhdGlvbj0naG9yaXpvbnRhbCddKSBbcGFydD0nZHJvcHMnXSB7XG4gICAgICAgIGdyaWQtYXV0by1mbG93OiBjb2x1bW47XG4gICAgICB9XG4gICAgICA6aG9zdChbb3JpZW50YXRpb249J3ZlcnRpY2FsJ10pIFtwYXJ0PSdkcmFncyddIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIH1cbiAgICAgIDpob3N0KFtvcmllbnRhdGlvbj0ndmVydGljYWwnXSkgW3BhcnQ9J2Ryb3BzJ10ge1xuICAgICAgICBncmlkLWF1dG8tZmxvdzogcm93O1xuICAgICAgfVxuXG4gICAgICBbcGFydD0nZHJvcC1saXN0J10ge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgZmxleDogMTtcbiAgICAgIH1cblxuICAgICAgW3BhcnQ9J2NvbnRhaW5lciddIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZ2FwOiAwLjVyZW07XG4gICAgICB9XG4gICAgICA6aG9zdCgucXRpLWNob2ljZXMtdG9wKSBbcGFydD0nY29udGFpbmVyJ10ge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgfVxuICAgICAgOmhvc3QoLnF0aS1jaG9pY2VzLWJvdHRvbSkgW3BhcnQ9J2NvbnRhaW5lciddIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xuICAgICAgfVxuICAgICAgOmhvc3QoLnF0aS1jaG9pY2VzLWxlZnQpIFtwYXJ0PSdjb250YWluZXInXSB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICB9XG4gICAgICA6aG9zdCgucXRpLWNob2ljZXMtcmlnaHQpIFtwYXJ0PSdjb250YWluZXInXSB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcbiAgICAgIH1cbiAgICBgXG4gIF07XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIGNvbnN0IGNob2ljZXMgPSBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbCgncXRpLXNpbXBsZS1jaG9pY2UnKSk7XG4gICAgaWYgKHRoaXMubnJDaG9pY2VzIDwgY2hvaWNlcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMubnJDaG9pY2VzID0gY2hvaWNlcy5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIGh0bWxgIDxzbG90IG5hbWU9XCJwcm9tcHRcIj4gPC9zbG90PlxuICAgICAgPGRpdiBwYXJ0PVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxzbG90IHBhcnQ9XCJkcmFnc1wiPiA8L3Nsb3Q+XG4gICAgICAgIDxkaXYgcGFydD1cImRyb3BzXCI+XG4gICAgICAgICAgJHtBcnJheS5mcm9tKEFycmF5KHRoaXMubnJDaG9pY2VzKSkubWFwKFxuICAgICAgICAgICAgKF8sIGkpID0+XG4gICAgICAgICAgICAgIGh0bWxgPGRyb3AtbGlzdCBwYXJ0PVwiZHJvcC1saXN0XCIgaWRlbnRpZmllcj1cImRyb3BsaXN0JHtpfVwiPjwvZHJvcC1saXN0PiR7dGhpcy5zaG93Q29ycmVjdFJlc3BvbnNlcyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuY29ycmVjdFJlc3BvbnNlcy5sZW5ndGggPiBpXG4gICAgICAgICAgICAgICAgICA/IHVuc2FmZUhUTUwoYDxzcGFuIHBhcnQ9J2NvcnJlY3QtcmVzcG9uc2UnPiR7dGhpcy5jb3JyZWN0UmVzcG9uc2VzW2ldfTwvc3Bhbj5gKVxuICAgICAgICAgICAgICAgICAgOiAnJ31gXG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5gO1xuICB9XG5cbiAgc2V0IGNvcnJlY3RSZXNwb25zZSh2YWx1ZTogUmVhZG9ubHk8c3RyaW5nIHwgc3RyaW5nW10+KSB7XG4gICAgaWYgKHZhbHVlID09PSAnJykge1xuICAgICAgdGhpcy5zaG93Q29ycmVjdFJlc3BvbnNlcyA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvcnJlY3RSZXNwb25zZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zdCByZXNwb25zZXMgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTtcblxuICAgICAgcmVzcG9uc2VzLmZvckVhY2goKHJlc3BvbnNlLCBpbmRleCkgPT4ge1xuICAgICAgICBsZXQgc2ltcGxlQ2hvaWNlID0gdGhpcy5xdWVyeVNlbGVjdG9yKGBxdGktc2ltcGxlLWNob2ljZVtpZGVudGlmaWVyPVwiJHtyZXNwb25zZX1cIl1gKTtcbiAgICAgICAgaWYgKCFzaW1wbGVDaG9pY2UpIHtcbiAgICAgICAgICBzaW1wbGVDaG9pY2UgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihgcXRpLXNpbXBsZS1jaG9pY2VbaWRlbnRpZmllcj1cIiR7cmVzcG9uc2V9XCJdYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0ZXh0ID0gc2ltcGxlQ2hvaWNlPy50ZXh0Q29udGVudC50cmltKCk7XG4gICAgICAgIHRoaXMuY29ycmVjdFJlc3BvbnNlcyA9IFsuLi50aGlzLmNvcnJlY3RSZXNwb25zZXMsIHRleHRdO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5zaG93Q29ycmVjdFJlc3BvbnNlcyA9IHRydWU7XG4gIH1cblxuICAvLyBzb21lIGludGVyYWN0aW9ucyBoYXZlIGEgZGlmZmVyZW50IHdheSBvZiBnZXR0aW5nIHRoZSByZXNwb25zZVxuICAvLyB0aGlzIGlzIGNhbGxlZCBmcm9tIHRoZSBkcmFnIGFuZCBkcm9wIG1peGluIGNsYXNzXG4gIC8vIHlvdSBoYXZlIHRvIGltcGxlbWVudCB5b3VyIG93biBnZXRSZXNwb25zZSBtZXRob2QgaW4gdGhlIHN1cGVyY2xhc3NcbiAgLy8gY2F1c2UgdGhleSBhcmUgZGlmZmVyZW50IGZvciBzb21lIGludGVyYWN0aW9ucy5cbiAgcHJvdGVjdGVkIGdldFJlc3BvbnNlKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBkcm9wcGFibGVzID0gQXJyYXkuZnJvbTxRdGlTaW1wbGVDaG9pY2U+KHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdkcm9wLWxpc3QnKSk7XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGRyb3BwYWJsZXMubWFwKGRyb3BwYWJsZSA9PiB7XG4gICAgICBjb25zdCBkcmFnc0luRHJvcHBhYmxlID0gZHJvcHBhYmxlLnF1ZXJ5U2VsZWN0b3JBbGwoJ1txdGktZHJhZ2dhYmxlPVwidHJ1ZVwiXScpO1xuICAgICAgY29uc3QgaWRlbnRpZmllcnMgPSBBcnJheS5mcm9tKGRyYWdzSW5Ecm9wcGFibGUpLm1hcChkID0+IGQuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJykpO1xuICAgICAgcmV0dXJuIFsuLi5pZGVudGlmaWVyc10uam9pbignICcpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cbiAgICBhd2FpdCB0aGlzLnVwZGF0ZTtcbiAgICB0aGlzLmNoaWxkcmVuTWFwID0gQXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoJ3F0aS1zaW1wbGUtY2hvaWNlJykpO1xuICAgIHRoaXMuY2hpbGRyZW5NYXAuZm9yRWFjaChlbCA9PiBlbC5zZXRBdHRyaWJ1dGUoJ3BhcnQnLCAncXRpLXNpbXBsZS1jaG9pY2UnKSk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLW9yZGVyLWludGVyYWN0aW9uJzogUXRpT3JkZXJJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IExpdEVsZW1lbnQsIFByb3BlcnR5VmFsdWVzIH0gZnJvbSAnbGl0JztcblxudHlwZSBDb25zdHJ1Y3RvcjxUID0ge30+ID0gbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVDtcblxuZGVjbGFyZSBjbGFzcyBTaHVmZmxlSW50ZXJmYWNlIHt9XG5cbmV4cG9ydCBjb25zdCBTaHVmZmxlTWl4aW4gPSA8VCBleHRlbmRzIENvbnN0cnVjdG9yPExpdEVsZW1lbnQ+PihzdXBlckNsYXNzOiBULCBzZWxlY3Rvcjogc3RyaW5nKSA9PiB7XG4gIGNsYXNzIFNodWZmbGVFbGVtZW50IGV4dGVuZHMgc3VwZXJDbGFzcyB7XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzKSB7XG4gICAgICBzdXBlci5maXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKTtcbiAgICAgIGlmICh0aGlzLl9zaHVmZmxlKSB7XG4gICAgICAgIHRoaXMuX3NodWZmbGVDaG9pY2VzKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2h1ZmZsZSA9IHRydWU7XG5cbiAgICBnZXQgc2h1ZmZsZSgpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB0aGlzLl9zaHVmZmxlO1xuICAgIH1cblxuICAgIHNldCBzaHVmZmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMuX3NodWZmbGU7XG4gICAgICB0aGlzLl9zaHVmZmxlID0gdmFsdWU7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy5fc2h1ZmZsZUNob2ljZXMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3Jlc2V0U2h1ZmZsZUNob2ljZXMoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgnc2h1ZmZsZScsIG9sZFZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zaHVmZmxlQ2hvaWNlcygpIHtcbiAgICAgIGNvbnN0IGNob2ljZXMgPSBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcikpO1xuXG4gICAgICBjb25zdCBmaXhlZEVsZW1lbnRzID0gW107XG4gICAgICBjb25zdCBub25GaXhlZEVsZW1lbnRzID0gW107XG5cbiAgICAgIC8vIFNlcGFyYXRlIGZpeGVkIGFuZCBub24tZml4ZWQgZWxlbWVudHNcbiAgICAgIGNob2ljZXMuZm9yRWFjaCgoY2hvaWNlLCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAoY2hvaWNlLmhhc0F0dHJpYnV0ZSgnZml4ZWQnKSkge1xuICAgICAgICAgIGZpeGVkRWxlbWVudHMucHVzaCh7IGVsZW1lbnQ6IGNob2ljZSwgaW5kZXg6IGluZGV4IH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5vbkZpeGVkRWxlbWVudHMucHVzaChjaG9pY2UpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gU2h1ZmZsZSBub24tZml4ZWQgZWxlbWVudHNcbiAgICAgIGZvciAobGV0IGkgPSBub25GaXhlZEVsZW1lbnRzLmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgaiA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChpICsgMSkpO1xuICAgICAgICBbbm9uRml4ZWRFbGVtZW50c1tpXSwgbm9uRml4ZWRFbGVtZW50c1tqXV0gPSBbbm9uRml4ZWRFbGVtZW50c1tqXSwgbm9uRml4ZWRFbGVtZW50c1tpXV07XG4gICAgICB9XG5cbiAgICAgIC8vIEFzc2lnbiBvcmRlciB0byBlYWNoIGVsZW1lbnRcbiAgICAgIGxldCBvcmRlciA9IDE7XG4gICAgICBjaG9pY2VzLmZvckVhY2goKGNob2ljZTogSFRNTEVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmIChjaG9pY2UuaGFzQXR0cmlidXRlKCdmaXhlZCcpKSB7XG4gICAgICAgICAgY2hvaWNlLnN0eWxlLm9yZGVyID0gU3RyaW5nKG9yZGVyKyspO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IG5vbkZpeGVkQ2hvaWNlID0gbm9uRml4ZWRFbGVtZW50cy5zaGlmdCgpO1xuICAgICAgICAgIG5vbkZpeGVkQ2hvaWNlLnN0eWxlLm9yZGVyID0gb3JkZXIrKztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVzZXRTaHVmZmxlQ2hvaWNlcygpIHtcbiAgICAgIGNvbnN0IGNob2ljZXMgPSBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbCgncXRpLXNpbXBsZS1jaG9pY2UnKSk7XG4gICAgICBjaG9pY2VzLmZvckVhY2goKGNob2ljZSwgaW5kZXgpID0+IHtcbiAgICAgICAgY2hvaWNlLnN0eWxlLm9yZGVyID0gJ2luaXRpYWwnO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBTaHVmZmxlRWxlbWVudCBhcyBDb25zdHJ1Y3RvcjxTaHVmZmxlSW50ZXJmYWNlPiAmIFQ7XG59O1xuIiwgImltcG9ydCB7IExpdEVsZW1lbnQsIGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5cbmV4cG9ydCBjbGFzcyBRdGlTUG9zaXRpb25PYmplY3RJbnRlcmFjdGlvbiBleHRlbmRzIExpdEVsZW1lbnQge1xuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPHNsb3Q+PC9zbG90PmA7XG4gIH1cblxuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gW1xuICAgIGNzc2BcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB9XG4gICAgICA6OnNsb3R0ZWQoaW1nKSB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgY3Vyc29yOiBtb3ZlO1xuICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgICAgbGVmdDogNTAlO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gICAgICB9XG4gICAgYFxuICBdO1xufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1wb3NpdGlvbi1vYmplY3QtaW50ZXJhY3Rpb24nLCBRdGlTUG9zaXRpb25PYmplY3RJbnRlcmFjdGlvbik7XG4iLCAiaW1wb3J0IHsgTGl0RWxlbWVudCwgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktcG9zaXRpb24tb2JqZWN0LXN0YWdlJylcbmV4cG9ydCBjbGFzcyBRdGlQb3NpdGlvbk9iamVjdFN0YWdlIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIGNob2ljZU9yZGVyaW5nOiBib29sZWFuO1xuICBzdGFydFg6IGFueTtcbiAgc3RhcnRZOiBhbnk7XG4gIGRyYWdFbGVtZW50OiBhbnk7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IFtcbiAgICBjc3NgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgfVxuICAgIGBcbiAgXTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMucmVtb3ZlTW92ZUxpc3RlbmVyID0gdGhpcy5yZW1vdmVNb3ZlTGlzdGVuZXIuYmluZCh0aGlzKTtcbiAgICB0aGlzLmRyYWdFbGVtZW50SGFuZGxlciA9IHRoaXMuZHJhZ0VsZW1lbnRIYW5kbGVyLmJpbmQodGhpcyk7XG4gIH1cblxuICAvLyBEZWZpbmUgYSBmdW5jdGlvbiB0byBoYW5kbGUgdGhlIG1vdXNlbW92ZSBldmVudCBvbiB0aGUgZHJhZ2dhYmxlIGVsZW1lbnRcbiAgZHJhZ0VsZW1lbnRIYW5kbGVyKGV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgZGlzdGFuY2UgdGhlIG1vdXNlIGhhcyBtb3ZlZCBzaW5jZSB0aGUgbGFzdCBldmVudFxuICAgIGNvbnN0IGRlbHRhWCA9IGV2ZW50LmNsaWVudFggLSB0aGlzLnN0YXJ0WDtcbiAgICBjb25zdCBkZWx0YVkgPSBldmVudC5jbGllbnRZIC0gdGhpcy5zdGFydFk7XG5cbiAgICAvLyBVcGRhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBkcmFnZ2FibGUgZWxlbWVudFxuICAgIHRoaXMuZHJhZ0VsZW1lbnQuc3R5bGUubGVmdCA9IHRoaXMuZHJhZ0VsZW1lbnQub2Zmc2V0TGVmdCArIGRlbHRhWCArICdweCc7XG4gICAgdGhpcy5kcmFnRWxlbWVudC5zdHlsZS50b3AgPSB0aGlzLmRyYWdFbGVtZW50Lm9mZnNldFRvcCArIGRlbHRhWSArICdweCc7XG5cbiAgICAvLyBVcGRhdGUgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIHRoZSBtb3VzZVxuICAgIHRoaXMuc3RhcnRYID0gZXZlbnQuY2xpZW50WDtcbiAgICB0aGlzLnN0YXJ0WSA9IGV2ZW50LmNsaWVudFk7XG4gIH1cblxuICBvdmVycmlkZSBmaXJzdFVwZGF0ZWQoYSk6IHZvaWQge1xuICAgIHN1cGVyLmZpcnN0VXBkYXRlZChhKTtcblxuICAgIC8vIEdldCB0aGUgZHJhZ2dhYmxlIGFuZCBkcm9wIHpvbmUgZWxlbWVudHNcbiAgICB0aGlzLmRyYWdFbGVtZW50ID0gdGhpcy5xdWVyeVNlbGVjdG9yKCdxdGktcG9zaXRpb24tb2JqZWN0LWludGVyYWN0aW9uPmltZycpO1xuICAgIC8vIGNvbnN0IGNhbnZhc0VsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2FudmFzJyk7XG5cbiAgICAvLyBJbml0aWFsaXplIHZhcmlhYmxlcyBmb3IgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIHRoZSBkcmFnZ2FibGUgZWxlbWVudFxuICAgIHRoaXMuc3RhcnRYID0gMDtcbiAgICB0aGlzLnN0YXJ0WSA9IDA7XG5cbiAgICAvLyBBZGQgYSBtb3VzZWRvd24gZXZlbnQgbGlzdGVuZXIgdG8gdGhlIGRyYWdnYWJsZSBlbGVtZW50XG4gICAgdGhpcy5kcmFnRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIC8vIFNhdmUgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIHRoZSBtb3VzZVxuICAgICAgdGhpcy5zdGFydFggPSBldmVudC5jbGllbnRYO1xuICAgICAgdGhpcy5zdGFydFkgPSBldmVudC5jbGllbnRZO1xuXG4gICAgICAvLyBBZGQgYSBtb3VzZW1vdmUgZXZlbnQgbGlzdGVuZXIgdG8gdGhlIGRvY3VtZW50XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLmRyYWdFbGVtZW50SGFuZGxlciwgdHJ1ZSk7XG4gICAgfSk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMucmVtb3ZlTW92ZUxpc3RlbmVyKTtcbiAgfVxuXG4gIHJlbW92ZU1vdmVMaXN0ZW5lcihldmVudCkge1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuZHJhZ0VsZW1lbnRIYW5kbGVyLCB0cnVlKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5kcmFnRWxlbWVudEhhbmRsZXIpO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLnJlbW92ZU1vdmVMaXN0ZW5lcik7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXBvc2l0aW9uLW9iamVjdC1zdGFnZSc6IFF0aVBvc2l0aW9uT2JqZWN0U3RhZ2U7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgcmVwZWF0IH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvcmVwZWF0LmpzJztcbmltcG9ydCB7IHN0eWxlTWFwIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvc3R5bGUtbWFwLmpzJztcbmltcG9ydCB7IEludGVyYWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJuYWwvaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24nO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLXNlbGVjdC1wb2ludC1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpU2VsZWN0UG9pbnRJbnRlcmFjdGlvbiBleHRlbmRzIEludGVyYWN0aW9uIHtcbiAgQHByb3BlcnR5KHtcbiAgICB0eXBlOiBOdW1iZXIsXG4gICAgYXR0cmlidXRlOiAnbWF4LWNob2ljZXMnXG4gIH0pXG4gIHB1YmxpYyBtYXhDaG9pY2VzOiBudW1iZXIgPSAwO1xuXG4gIEBwcm9wZXJ0eSh7XG4gICAgdHlwZTogTnVtYmVyLFxuICAgIGF0dHJpYnV0ZTogJ21pbi1jaG9pY2VzJ1xuICB9KVxuICBwdWJsaWMgbWluQ2hvaWNlczogbnVtYmVyID0gMDtcblxuICBAc3RhdGUoKVxuICBwcml2YXRlIF9wb2ludHM6IHN0cmluZ1tdID0gW107XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYCA8c2xvdCBuYW1lPVwicHJvbXB0XCI+PC9zbG90PlxuICAgICAgPHBvaW50LWNvbnRhaW5lcj5cbiAgICAgICAgJHtyZXBlYXQoXG4gICAgICAgICAgdGhpcy5fcG9pbnRzLFxuICAgICAgICAgIHBvaW50ID0+IHBvaW50LFxuICAgICAgICAgIChwb2ludCwgaW5kZXgpID0+IGh0bWxgXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHBhcnQ9XCJwb2ludFwiXG4gICAgICAgICAgICAgIHN0eWxlPSR7c3R5bGVNYXAoe1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgtNTAlLCAtNTAlKScsXG4gICAgICAgICAgICAgICAgbGVmdDogYCR7cG9pbnQuc3BsaXQoJyAnKVswXX1weGAsXG4gICAgICAgICAgICAgICAgdG9wOiBgJHtwb2ludC5zcGxpdCgnICcpWzFdfXB4YFxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlJlbW92ZSBwb2ludCBhdCAke3BvaW50fVwiXG4gICAgICAgICAgICAgIEBjbGljaz0keyhlOiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcG9pbnRzID0gdGhpcy5fcG9pbnRzLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gaW5kZXgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZVJlc3BvbnNlKHRoaXMuX3BvaW50cyk7XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgYFxuICAgICAgICApfVxuICAgICAgICA8c2xvdD48L3Nsb3Q+XG4gICAgICA8L3BvaW50LWNvbnRhaW5lcj5gO1xuICB9XG5cbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IFtcbiAgICBjc3NgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgfVxuICAgICAgcG9pbnQtY29udGFpbmVyIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIH1cbiAgICBgXG4gIF07XG5cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5fcG9pbnRzID0gW107XG4gIH1cblxuICB2YWxpZGF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcG9pbnRzLmxlbmd0aCA+PSB0aGlzLm1pbkNob2ljZXMgJiYgdGhpcy5fcG9pbnRzLmxlbmd0aCA8PSB0aGlzLm1heENob2ljZXM7XG4gIH1cblxuICBzZXQgcmVzcG9uc2UodmFsOiBzdHJpbmcgfCBzdHJpbmdbXSkge1xuICAgIHRoaXMuX3BvaW50cyA9IEFycmF5LmlzQXJyYXkodmFsKSA/IHZhbCA6IFt2YWxdO1xuICB9XG5cbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuICAgIGNvbnN0IGltZyA9IHRoaXMucXVlcnlTZWxlY3RvcignaW1nJyk7XG5cbiAgICAvLyBBdHRhY2ggYSBjbGljayBldmVudCBsaXN0ZW5lciB0byB0aGUgaW1hZ2UgZWxlbWVudFxuICAgIGltZy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGV2ZW50ID0+IHtcbiAgICAgIGNvbnN0IHggPSBldmVudC5vZmZzZXRYO1xuICAgICAgY29uc3QgeSA9IGV2ZW50Lm9mZnNldFk7XG5cbiAgICAgIHRoaXMuX3BvaW50cyA9IFsuLi50aGlzLl9wb2ludHMsIHggKyAnICcgKyB5XTtcbiAgICAgIHRoaXMuc2F2ZVJlc3BvbnNlKHRoaXMuX3BvaW50cyk7XG4gICAgfSk7XG4gIH1cbiAgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktc2VsZWN0LXBvaW50LWludGVyYWN0aW9uJzogUXRpU2VsZWN0UG9pbnRJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IGNzcywgaHRtbCwgbm90aGluZyB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSwgcXVlcnkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB7IHdhdGNoIH0gZnJvbSAnLi4vLi4vLi4vZGVjb3JhdG9ycy93YXRjaCc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvbiB9IGZyb20gJy4uL2ludGVybmFsL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uJztcblxuLyoqXG4gKiBAc3VtbWFyeSBUaGUgU2xpZGVySW50ZXJhY3Rpb24uVHlwZSAocXRpLXNsaWRlci1pbnRlcmFjdGlvbikgcHJlc2VudHMgdGhlIGNhbmRpZGF0ZSB3aXRoIGEgY29udHJvbCBmb3Igc2VsZWN0aW5nIGEgbnVtZXJpY2FsIHZhbHVlIGJldHdlZW4gYSBsb3dlciBhbmQgdXBwZXIgYm91bmQuXG4gKiBAZG9jdW1lbnRhdGlvbiBodHRwczovL3d3dy5pbXNnbG9iYWwub3JnL3NwZWMvcXRpL3YzcDAvaW1wbCNoLnM2MXhjcmo0cWN5alxuICogQHN0YXR1cyBzdGFibGVcbiAqIEBzaW5jZSA2LjBcbiAqXG4gKiBAZXZlbnQgcXRpLXJlZ2lzdGVyLWludGVyYWN0aW9uIC0gZW1pdHRlZCB3aGVuIHRoZSBpbnRlcmFjdGlvbiB3YW50cyB0byByZWdpc3RlciBpdHNlbGZcbiAqIEBldmVudCBxdGktaW50ZXJhY3Rpb24tcmVzcG9uc2UgLSBlbWl0dGVkIHdoZW4gdGhlIGludGVyYWN0aW9uIGNoYW5nZXNcbiAqXG4gKiBAY3NzcHJvcCAtLXNob3ctdmFsdWUgLSBzaG93cyB0aGUgY3VycmVudCB2YWx1ZSB3aGlsZSBzbGlkaW5nXG4gKiBAY3NzcHJvcCAtLXNob3ctdGlja3MgLSBzaG93cyB0aGUgdGlja3MgYWNjb3JkaW5nIHRvIHN0ZXBzXG4gKiBAY3NzcHJvcCAtLXNob3ctYm91bmRzIC0gc2hvd3MgdmFsdWUgZm9yIGxvd2VyIGFuZCB1cHBlciBib3VuZGFyeVxuICpcbiAqIEBjc3NwYXJ0IHNsaWRlciAtLSBzbGlkZXIgaW5sdWRpbmcsIGJvdW5kcyBhbmQgdGlja3MgYW5kIHZhbHVlLCB1c2UgaXQgZm9yIHBhZGRpbmdzIGFuZCBtYXJnaW5zXG4gKiBAY3NzcGFydCBib3VuZHMgLS0gZGl2IGZvciBib3VuZHMsIGNvbnRhaW5pbmcgdHdvIGRpdnMgZm9yIHdpdGggbWluLCBhbmQgbWF4IGJvdW5kcyB2YWx1ZVxuICogQGNzc3BhcnQgdGlja3MgLS0gZGl2IGZvciB0aWNrcywgdXNlIGxpbmVhaXIgZ3JhZGllbnQgYW5kIGV4cG9zZWQgY3NzIHZhcmlhYmxlcyBmb3Igc3R5bGluZ1xuICogQGNzc3BhcnQgcmFpbCAtLSBkaXYgZm9yIHJhaWwsIHN0eWxlIGFjY29yZGluZyB0byBuZWVkc1xuICogQGNzc3BhcnQga25vYiAtLSBkaXYsIHNob3VsZCBiZSByZWxhdGl2ZSBvciBhYnNvbHV0ZVxuICogQGNzc3BhcnQgdmFsdWUgLS0gZGl2LCBjb250YWluaW5nIHZhbHVlXG4gKlxuICogQHNsb3QgLSBUaGUgZGVmYXVsdCBzbG90IHdoZXJlIDxxdGktc2ltcGxlLWNob2ljZT4gbXVzdCBiZSBwbGFjZWQuXG4gKiBAc2xvdCBwcm9tcHQgLSBzbG90IHdoZXJlIHRoZSBwcm9tcHQgaXMgcGxhY2VkLlxuICovXG5cbkBjdXN0b21FbGVtZW50KCdxdGktc2xpZGVyLWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlTbGlkZXJJbnRlcmFjdGlvbiBleHRlbmRzIEludGVyYWN0aW9uIHtcbiAgY3NMaXZlOiBDU1NTdHlsZURlY2xhcmF0aW9uO1xuXG4gIEBxdWVyeSgnI2tub2InKVxuICBwcml2YXRlIF9rbm9iOiBIVE1MRWxlbWVudDtcblxuICBAcXVlcnkoJyNyYWlsJylcbiAgcHJpdmF0ZSBfcmFpbDogSFRNTEVsZW1lbnQ7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogTnVtYmVyIH0pIHZhbHVlOiBudW1iZXI7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogQm9vbGVhbiwgYXR0cmlidXRlOiAnc3RlcC1sYWJlbCcgfSkgc3RlcExhYmVsID0gZmFsc2U7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogQm9vbGVhbiB9KSByZXZlcnNlID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfbWluOiBudW1iZXI7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IE51bWJlciwgYXR0cmlidXRlOiAnbG93ZXItYm91bmQnIH0pIHNldCBtaW4odmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX21pbiA9IHZhbHVlO1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KCctLW1pbicsIGAke3RoaXMuX21pbn1gKTtcbiAgfVxuICBnZXQgbWluKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX21pbjtcbiAgfVxuXG4gIHByaXZhdGUgX21heDogbnVtYmVyO1xuICBAcHJvcGVydHkoeyB0eXBlOiBOdW1iZXIsIGF0dHJpYnV0ZTogJ3VwcGVyLWJvdW5kJyB9KSBzZXQgbWF4KHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9tYXggPSB2YWx1ZTtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KCctLW1heCcsIGAke3RoaXMuX21heH1gKTtcbiAgfVxuICBnZXQgbWF4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX21heDtcbiAgfVxuXG4gIHByaXZhdGUgX3N0ZXA6IG51bWJlcjtcbiAgQHByb3BlcnR5KHsgdHlwZTogTnVtYmVyLCBhdHRyaWJ1dGU6ICdzdGVwJyB9KSBzZXQgc3RlcCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fc3RlcCA9IHZhbHVlO1xuICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkoJy0tc3RlcCcsIGAke3RoaXMuX3N0ZXB9YCk7XG4gIH1cbiAgZ2V0IHN0ZXAoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fc3RlcDtcbiAgfVxuXG4gIEB3YXRjaCgnZGlzYWJsZWQnLCB7IHdhaXRVbnRpbEZpcnN0VXBkYXRlOiB0cnVlIH0pXG4gIF9oYW5kbGVEaXNhYmxlZENoYW5nZSA9IChvbGQsIGRpc2FibGVkKSA9PiB7fTtcblxuICBAd2F0Y2goJ3JlYWRvbmx5JywgeyB3YWl0VW50aWxGaXJzdFVwZGF0ZTogdHJ1ZSB9KVxuICBfaGFuZGxlUmVhZG9ubHlDaGFuZ2UgPSAob2xkLCByZWFkb25seSkgPT4ge307XG5cbiAgcmVzZXQoKSB7XG4gICAgLy8gdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG4gIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gc3RhdGljIHNoYWRvd1Jvb3RPcHRpb25zOiBTaGFkb3dSb290SW5pdCA9IHsgLi4uTGl0RWxlbWVudC5zaGFkb3dSb290T3B0aW9ucywgZGVsZWdhdGVzRm9jdXM6IHRydWUsIG1vZGU6ICdvcGVuJyB9O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgLyogdGhlIGNvbXB1dGVkIHN0eWxlIGlzIGEgbGl2ZSBwcm9wZXJ0eSwgd2UgdXNlIHRoaXMgdG8gZ2V0IGNzcyB2YXJpYWJsZXNcbiAgICBzZWUgcmVuZGVyIHRlbXBsYXRlICovXG4gICAgdGhpcy5jc0xpdmUgPSBnZXRDb21wdXRlZFN0eWxlKHRoaXMpO1xuICB9XG5cbiAgc2V0IHJlc3BvbnNlKG15UmVzcG9uc2U6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobXlSZXNwb25zZSkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1F0aVNsaWRlckludGVyYWN0aW9uOiByZXNwb25zZSBpcyBhbiBhcnJheSwgYnV0IHNob3VsZCBiZSBhIHNpbmdsZSB2YWx1ZScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KG15UmVzcG9uc2UpO1xuICAgIGlmIChOdW1iZXIuaXNOYU4odmFsdWUpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdRdGlTbGlkZXJJbnRlcmFjdGlvbjogcmVzcG9uc2UgaXMgbm90IGEgbnVtYmVyJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBbY3NzYGBdO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICAvLyBjb252ZXJ0IHRoZSB2YWx1ZSwgd2hpY2ggaXMgdGhlIHJlYWwgc2xpZGVyIHZhbHVlIHRvIGEgcGVyY2VudGFnZSBmb3IgdGhlIGRvbS5cbiAgICB0aGlzLnZhbHVlIDwgdGhpcy5taW4gJiYgKHRoaXMudmFsdWUgPSB0aGlzLm1pbik7XG4gICAgdGhpcy52YWx1ZSA+IHRoaXMubWF4ICYmICh0aGlzLnZhbHVlID0gdGhpcy5tYXgpO1xuICAgIGNvbnN0IHZhbHVlUGVyY2VudGFnZSA9ICgodGhpcy52YWx1ZSAtIHRoaXMubWluKSAvICh0aGlzLm1heCAtIHRoaXMubWluKSkgKiAxMDA7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSgnLS12YWx1ZS1wZXJjZW50YWdlJywgYCR7dmFsdWVQZXJjZW50YWdlfSVgKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgnYXJpYS12YWx1ZW5vdycsIHRoaXMudmFsdWUudG9TdHJpbmcoKSk7XG5cbiAgICByZXR1cm4gaHRtbGA8c2xvdCBuYW1lPVwicHJvbXB0XCI+PC9zbG90PlxuICAgICAgPGRpdiBpZD1cInNsaWRlclwiIHBhcnQ9XCJzbGlkZXJcIj5cbiAgICAgICAgJHt0aGlzLmNzTGl2ZS5nZXRQcm9wZXJ0eVZhbHVlKCctLXNob3ctYm91bmRzJykgPT0gJ3RydWUnXG4gICAgICAgICAgPyBodG1sYDxkaXYgaWQ9XCJib3VuZHNcIiBwYXJ0PVwiYm91bmRzXCI+XG4gICAgICAgICAgICAgIDxkaXY+JHt0aGlzLl9taW59PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXY+JHt0aGlzLl9tYXh9PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5gXG4gICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAke3RoaXMuY3NMaXZlLmdldFByb3BlcnR5VmFsdWUoJy0tc2hvdy10aWNrcycpID09ICd0cnVlJyA/IGh0bWxgPGRpdiBpZD1cInRpY2tzXCIgcGFydD1cInRpY2tzXCI+PC9kaXY+YCA6IG5vdGhpbmd9XG4gICAgICAgIDxkaXYgaWQ9XCJyYWlsXCIgcGFydD1cInJhaWxcIiBAbW91c2Vkb3duPSR7dGhpcy5fb25Nb3VzZURvd259IEB0b3VjaHN0YXJ0PSR7dGhpcy5fb25Ub3VjaE1vdmV9PlxuICAgICAgICAgIDxkaXYgaWQ9XCJrbm9iXCIgcGFydD1cImtub2JcIj5cbiAgICAgICAgICAgICR7dGhpcy5jc0xpdmUuZ2V0UHJvcGVydHlWYWx1ZSgnLS1zaG93LXZhbHVlJykgPT0gJ3RydWUnXG4gICAgICAgICAgICAgID8gaHRtbGA8ZGl2IGlkPVwidmFsdWVcIiBwYXJ0PVwidmFsdWVcIj4ke3RoaXMudmFsdWV9PC9kaXY+YFxuICAgICAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+YDtcbiAgfVxuXG4gIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5zdGVwID0gMTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnMCcpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKCdyb2xlJywgJ3NsaWRlcicpO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25Ub3VjaE1vdmUoZXZlbnQpIHtcbiAgICBjb25zdCBoYW5kbGVUb3VjaE1vdmUgPSBldmVudCA9PiB7XG4gICAgICBjb25zdCB7IHggfSA9IHRoaXMuZ2V0UG9zaXRpb25Gcm9tRXZlbnQoZXZlbnQpO1xuICAgICAgY29uc3QgZGlmZlggPSB4IC0gdGhpcy5fcmFpbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgICB0aGlzLmNhbGN1bGF0ZVZhbHVlKGRpZmZYKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH07XG5cbiAgICBjb25zdCBoYW5kbGVUb3VjaEVuZCA9ICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIGhhbmRsZVRvdWNoTW92ZSk7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIGhhbmRsZVRvdWNoRW5kKTtcblxuICAgICAgdGhpcy5zYXZlUmVzcG9uc2UodGhpcy52YWx1ZS50b1N0cmluZygpKTtcbiAgICB9O1xuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgaGFuZGxlVG91Y2hNb3ZlKTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIGhhbmRsZVRvdWNoRW5kKTtcblxuICAgIGNvbnN0IHsgeCB9ID0gdGhpcy5nZXRQb3NpdGlvbkZyb21FdmVudChldmVudCk7XG4gICAgY29uc3QgZGlmZlggPSB4IC0gdGhpcy5fcmFpbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgdGhpcy5jYWxjdWxhdGVWYWx1ZShkaWZmWCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIF9vbk1vdXNlRG93bihldmVudCkge1xuICAgIGNvbnN0IGhhbmRsZU1vdXNlTW92ZSA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgLy8gaWYgdGhlIHF0aS1zbGlkZXItaW50ZXJhY3Rpb24gaGFzIGFuIGFic29sdXRlIGxlZnQgcG9zaXRpb24gYW5kIGJvZHkgaXMgc2Nyb2xsZWQgYSBiaXQsIHRha2UgYWNjb3VudCBmb3IgdGhhdFxuICAgICAgY29uc3QgZGlmZlggPSBldmVudC5wYWdlWCAtIHRoaXMuX3JhaWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0O1xuXG4gICAgICB0aGlzLmNhbGN1bGF0ZVZhbHVlKGRpZmZYKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaGFuZGxlTW91c2VVcCA9ICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGhhbmRsZU1vdXNlTW92ZSk7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgaGFuZGxlTW91c2VVcCk7XG5cbiAgICAgIHRoaXMuc2F2ZVJlc3BvbnNlKHRoaXMudmFsdWUudG9TdHJpbmcoKSk7XG4gICAgfTtcblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGhhbmRsZU1vdXNlTW92ZSk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIGhhbmRsZU1vdXNlVXApO1xuXG4gICAgLy8gaWYgdGhlIHF0aS1zbGlkZXItaW50ZXJhY3Rpb24gaGFzIGFuIGFic29sdXRlIGxlZnQgcG9zaXRpb24gYW5kIGJvZHkgaXMgc2Nyb2xsZWQgYSBiaXQsIHRha2UgYWNjb3VudCBmb3IgdGhhdFxuICAgIGNvbnN0IGRpZmZYID0gZXZlbnQucGFnZVggLSB0aGlzLl9yYWlsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdDtcblxuICAgIHRoaXMuY2FsY3VsYXRlVmFsdWUoZGlmZlgpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICAvKiogY2FsY3VsYXRlVmFsdWUgZ2V0cyB4IHBvc2l0aW9uIGFuZCBjb21wYXJlcyB0aGlzIHdpdGggdGhlIHRvdGFsIHdpZHRoIGluIHBpeGVscyAqL1xuICBwcml2YXRlIGNhbGN1bGF0ZVZhbHVlKGRpZmZYOiBudW1iZXIpIHtcbiAgICBjb25zdCB2YWx1ZU5vdyA9IHRoaXMubWluICsgKCh0aGlzLm1heCAtIHRoaXMubWluKSAqIGRpZmZYKSAvIHRoaXMuX3JhaWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgY29uc3Qgcm91bmRlZFN0ZXBWYWx1ZSA9IHRoaXMubWluICsgTWF0aC5yb3VuZCgodmFsdWVOb3cgLSB0aGlzLm1pbikgLyB0aGlzLl9zdGVwKSAqIHRoaXMuX3N0ZXA7XG4gICAgdGhpcy52YWx1ZSA9IHJvdW5kZWRTdGVwVmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGdldFBvc2l0aW9uRnJvbUV2ZW50KGU6IGFueSk6IHtcbiAgICB4OiBudW1iZXI7XG4gICAgeTogbnVtYmVyO1xuICB9IHtcbiAgICBsZXQgX3RvdWNoTW92ZTtcbiAgICBpZiAoZS50eXBlID09ICd0b3VjaHN0YXJ0JyB8fCBlLnR5cGUgPT0gJ3RvdWNobW92ZScgfHwgZS50eXBlID09ICd0b3VjaGVuZCcgfHwgZS50eXBlID09ICd0b3VjaGNhbmNlbCcpIHtcbiAgICAgIGNvbnN0IGV2dCA9IHR5cGVvZiBlLm9yaWdpbmFsRXZlbnQgPT09ICd1bmRlZmluZWQnID8gZSA6IGUub3JpZ2luYWxFdmVudDtcbiAgICAgIGNvbnN0IHRvdWNoID0gZXZ0LnRvdWNoZXNbMF0gfHwgZXZ0LmNoYW5nZWRUb3VjaGVzWzBdO1xuICAgICAgX3RvdWNoTW92ZSA9IHtcbiAgICAgICAgeDogdG91Y2gucGFnZVgsXG4gICAgICAgIHk6IHRvdWNoLnBhZ2VZXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBlLnR5cGUgPT0gJ21vdXNlZG93bicgfHxcbiAgICAgIGUudHlwZSA9PSAnbW91c2V1cCcgfHxcbiAgICAgIGUudHlwZSA9PSAnbW91c2Vtb3ZlJyB8fFxuICAgICAgZS50eXBlID09ICdtb3VzZW92ZXInIHx8XG4gICAgICBlLnR5cGUgPT0gJ21vdXNlb3V0JyB8fFxuICAgICAgZS50eXBlID09ICdtb3VzZWVudGVyJyB8fFxuICAgICAgZS50eXBlID09ICdtb3VzZWxlYXZlJ1xuICAgICkge1xuICAgICAgX3RvdWNoTW92ZSA9IHtcbiAgICAgICAgeDogZS5jbGllbnRYLFxuICAgICAgICB5OiBlLmNsaWVudFlcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBfdG91Y2hNb3ZlO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1zbGlkZXItaW50ZXJhY3Rpb24nOiBRdGlTbGlkZXJJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7XG4gIGl0ZW1Db250ZXh0LFxuICB0eXBlIENhbGN1bGF0ZSxcbiAgdHlwZSBJdGVtQ29udGV4dCxcbiAgdHlwZSBSZXNwb25zZVZhcmlhYmxlXG59IGZyb20gJ0BjaXRvbGFiL3F0aS1jb21wb25lbnRzL3F0aS1jb21wb25lbnRzJztcbmltcG9ydCB7IGNvbnN1bWUgfSBmcm9tICdAbGl0L2NvbnRleHQnO1xuaW1wb3J0IHsgTGl0RWxlbWVudCwgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuLyoqXG4gKiBodHRwczovL3d3dy5pbXNnbG9iYWwub3JnL3NwZWMvcXRpL3YzcDAvaW1wbCNoLmZpMjlxOGR1Ympnd1xuICogPHF0aS1jdXN0b20tb3BlcmF0b3IgY2xhc3M9XCJqcy5vcmdcIj5cbiAgICAgICAgPHF0aS1iYXNlLXZhbHVlIGJhc2UtdHlwZT1cInN0cmluZ1wiPjwhW0NEQVRBW1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNvbnRleHQudmFyaWFibGVzKTtcbiAgICAgICAgICByZXR1cm4gJ0InXG4gICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigncXRpLWVuZC1hdHRlbXB0LWludGVyYWN0aW9uJykuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgIF1dPjwvcXRpLWJhc2UtdmFsdWU+XG4gICAgICA8L3F0aS1jdXN0b20tb3BlcmF0b3I+XG4gICAgPC9xdGktc2V0LW91dGNvbWUtdmFsdWU+XG4gKi9cbkBjdXN0b21FbGVtZW50KCdxdGktY3VzdG9tLW9wZXJhdG9yJylcbmV4cG9ydCBjbGFzcyBRdGlDdXN0b21PcGVyYXRvciBleHRlbmRzIExpdEVsZW1lbnQgaW1wbGVtZW50cyBDYWxjdWxhdGUge1xuICBwcml2YXRlIG9wZXJhdG9yRnVuY3Rpb246IEZ1bmN0aW9uO1xuXG4gIEBjb25zdW1lKHsgY29udGV4dDogaXRlbUNvbnRleHQsIHN1YnNjcmliZTogdHJ1ZSB9KVxuICBAc3RhdGUoKVxuICBwcml2YXRlIF9jb250ZXh0PzogSXRlbUNvbnRleHQ7XG5cbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90IEBzbG90Y2hhbmdlPSR7dGhpcy5oYW5kbGVTbG90Q2hhbmdlfT48L3Nsb3Q+YDtcbiAgfVxuXG4gIGhhbmRsZVNsb3RDaGFuZ2UoZXZlbnQ6IEV2ZW50KSB7XG4gICAgLy8gZXhwZWN0aW5nIDxbIUNEQVRBWyAuLi4gXV0+IGlzIGNvbnZlcnRlZCBpbnRvIDwhLS0gLi4uIC0tPiB3aXRoIHF0aS10cmFuc2Zvcm06IGNEYXRhVG9Db21tZW50XG4gICAgY29uc3QgY29tbWVudE5vZGUgPSBBcnJheS5mcm9tKHRoaXMuZmlyc3RFbGVtZW50Q2hpbGQ/LmNoaWxkTm9kZXMgPz8gW10pLmZpbmQoXG4gICAgICBub2RlID0+IG5vZGUubm9kZVR5cGUgPT09IE5vZGUuQ09NTUVOVF9OT0RFXG4gICAgKTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5vcGVyYXRvckZ1bmN0aW9uID0gbmV3IEZ1bmN0aW9uKCdjb250ZXh0JywgJ2ZuJywgJ2l0ZW0nLCBjb21tZW50Tm9kZS50ZXh0Q29udGVudCA/PyAnJyk7ICAgICAgXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcignY3VzdG9tLW9wZXJhdG9yIGNvbnRhaW5zIGludmFsaWQgamF2YXNjcmlwdCBjb2RlJywgZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNhbGN1bGF0ZSgpIHtcbiAgICBjb25zdCBmbiA9IHtcbiAgICAgIHZhcmlhYmxlOiAocmVzcG9uc2VJZGVudGlmaWVyOiBzdHJpbmcpID0+XG4gICAgICAgIHRoaXMuX2NvbnRleHQ/LnZhcmlhYmxlcy5maW5kKHYgPT4gdi5pZGVudGlmaWVyID09PSByZXNwb25zZUlkZW50aWZpZXIpPy52YWx1ZSA/PyAnJyxcbiAgICAgIGNvcnJlY3Q6IChyZXNwb25zZUlkZW50aWZpZXI6IHN0cmluZykgPT5cbiAgICAgICAgKHRoaXMuX2NvbnRleHQ/LnZhcmlhYmxlcy5maW5kKHYgPT4gdi5pZGVudGlmaWVyID09PSByZXNwb25zZUlkZW50aWZpZXIpIGFzIFJlc3BvbnNlVmFyaWFibGUpXG4gICAgICAgICAgPy5jb3JyZWN0UmVzcG9uc2UgPz8gJydcbiAgICB9O1xuICAgIGNvbnN0IGl0ZW0gPSB7XG4gICAgICBnZXRWYXJpYWJsZTogKHZhcmlhYmxlSWRlbnRpZmllcjogc3RyaW5nKSA9PlxuICAgICAgICB0aGlzLl9jb250ZXh0Py52YXJpYWJsZXMuZmluZCh2ID0+IHYuaWRlbnRpZmllciA9PT0gdmFyaWFibGVJZGVudGlmaWVyKSxcbiAgICAgIHVwZGF0ZU91dGNvbWVWYXJpYWJsZTogKG91dGNvbWVJZGVudGlmaWVyOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSkgPT4geyAgICAgICAgXG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQ8eyBvdXRjb21lSWRlbnRpZmllcjogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10gfT4oJ3F0aS1zZXQtb3V0Y29tZS12YWx1ZScsIHtcbiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICBvdXRjb21lSWRlbnRpZmllcixcbiAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIHVwZGF0ZVJlc3BvbnNlVmFyaWFibGU6IChyZXNwb25zZUlkZW50aWZpZXI6IHN0cmluZywgcmVzcG9uc2U6IHN0cmluZyB8IHN0cmluZ1tdKSA9PiB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQ8eyByZXNwb25zZUlkZW50aWZpZXI6IHN0cmluZzsgcmVzcG9uc2U6IHN0cmluZyB8IHN0cmluZ1tdIH0+KCdxdGktaW50ZXJhY3Rpb24tcmVzcG9uc2UnLCB7XG4gICAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUsXG4gICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgcmVzcG9uc2VJZGVudGlmaWVyLFxuICAgICAgICAgICAgICByZXNwb25zZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfTsgICBcbiAgICBcbiAgICByZXR1cm4gdGhpcy5vcGVyYXRvckZ1bmN0aW9uKHRoaXMuX2NvbnRleHQsIGZuLCBpdGVtKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktY3VzdG9tLW9wZXJhdG9yJzogUXRpQ3VzdG9tT3BlcmF0b3I7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50LCBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1hc3NvY2lhYmxlLWhvdHNwb3QnKVxuZXhwb3J0IGNsYXNzIFF0aUFzc29jaWFibGVIb3RzcG90IGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3F0aS1yZWdpc3Rlci1ob3RzcG90Jywge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWVcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gY3NzYFxuICAgIDpob3N0IHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB9XG4gIGA7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYCA8c2xvdCBuYW1lPVwicXRpLWdhcC1pbWdcIj48L3Nsb3Q+IGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWFzc29jaWFibGUtaG90c3BvdCc6IFF0aUFzc29jaWFibGVIb3RzcG90O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1nYXAnKVxuZXhwb3J0IGNsYXNzIFF0aUdhcCBleHRlbmRzIExpdEVsZW1lbnQge1xuICBAcHJvcGVydHkoeyB0eXBlOiBOdW1iZXIsIHJlZmxlY3Q6IHRydWUgfSkgdGFiaW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZCA9IDA7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYCA8c2xvdCBuYW1lPVwicXRpLWdhcC10ZXh0XCI+PC9zbG90PmA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWdhcCc6IFF0aUdhcDtcbiAgfVxufVxuIiwgImltcG9ydCB7IExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktZ2FwLWltZycpXG5leHBvcnQgY2xhc3MgUXRpR2FwSW1nIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IE51bWJlciwgcmVmbGVjdDogdHJ1ZSB9KSB0YWJpbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkID0gMDtcblxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgnc2xvdCcsICdxdGktZ2FwLWltZycpO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1nYXAtaW1nJzogUXRpR2FwSW1nO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1nYXAtdGV4dCcpXG5leHBvcnQgY2xhc3MgUXRpR2FwVGV4dCBleHRlbmRzIExpdEVsZW1lbnQge1xuICBAcHJvcGVydHkoeyB0eXBlOiBOdW1iZXIsIHJlZmxlY3Q6IHRydWUgfSkgdGFiaW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZCA9IDA7XG5cbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgnc2xvdCcsICdxdGktZ2FwLXRleHQnKTtcbiAgfVxuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdD48L3Nsb3Q+YDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktZ2FwLXRleHQnOiBRdGlHYXBUZXh0O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgUXRpQ2hvaWNlIH0gZnJvbSAnLi9pbnRlcm5hbC9jaG9pY2UvcXRpLWNob2ljZSc7XG5cbi8vIHR5cGUgc2hhcGUgPSB7IHNoYXBlOiAncmVjdCcgfCAnY2lyY2xlJyB8ICdwb2x5JzsgY29vcmRzOiBudW1iZXJbXSB9O1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWhvdHNwb3QtY2hvaWNlJylcbmV4cG9ydCBjbGFzcyBRdGlIb3RzcG90Q2hvaWNlIGV4dGVuZHMgUXRpQ2hvaWNlIHtcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnYXJpYS1vcmRlcnZhbHVlJywgdHlwZTogTnVtYmVyLCByZWZsZWN0OiB0cnVlIH0pIG9yZGVyOiBudW1iZXI7XG5cbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IGNzc2BcbiAgICA6aG9zdCB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgfVxuICBgO1xufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktaG90c3BvdC1jaG9pY2UnOiBRdGlIb3RzcG90Q2hvaWNlO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IFF0aUNob2ljZSB9IGZyb20gJy4vaW50ZXJuYWwvY2hvaWNlL3F0aS1jaG9pY2UnO1xuaW1wb3J0IHsgaHRtbCB9IGZyb20gJ2xpdCc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktaG90dGV4dCcpXG5leHBvcnQgY2xhc3MgUXRpSG90dGV4dCBleHRlbmRzIFF0aUNob2ljZSB7XG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8ZGl2IHBhcnQ9XCJjaFwiPjxkaXYgcGFydD1cImNoYVwiPjwvZGl2PjwvZGl2PlxuICAgICAgPHNsb3Q+PC9zbG90PiBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1ob3R0ZXh0JzogUXRpSG90dGV4dDtcbiAgfVxufVxuIiwgImltcG9ydCB7IExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1pbmxpbmUtY2hvaWNlJylcbmV4cG9ydCBjbGFzcyBRdGlJbmxpbmVDaG9pY2UgZXh0ZW5kcyBMaXRFbGVtZW50IHt9XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1pbmxpbmUtY2hvaWNlJzogUXRpSW5saW5lQ2hvaWNlO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IENTU1Jlc3VsdEdyb3VwLCBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgUXRpQ2hvaWNlIH0gZnJvbSAnLi9pbnRlcm5hbC9jaG9pY2UvcXRpLWNob2ljZSc7XG5cbi8qKlxuICogQHN1bW1hcnkgU2hvcnQgc3VtbWFyeSBvZiB0aGUgY29tcG9uZW50J3MgaW50ZW5kZWQgdXNlLlxuICogQGRvY3VtZW50YXRpb24gaHR0cHM6Ly93d3cuaW1zZ2xvYmFsLm9yZy9zcGVjL3F0aS92M3AwL2ltcGwjaC5qOW51MW9hMXR1M2JcbiAqIEBzdGF0dXMgc3RhYmxlXG4gKiBAc2luY2UgNC4wXG4gKlxuICogQGV2ZW50IHF0aS1jaG9pY2UtZWxlbWVudC1zZWxlY3RlZCAtIEVtaXR0ZWQgd2hlbiBhIGNob2ljZSBpcyBzZWxlY3RlZC5cbiAqIEBldmVudCBxdGktcmVnaXN0ZXItY2hvaWNlIC0gRW1pdHRlZCB3aGVuIGFuIGNob2ljZSBpcyBhZGRlZFxuICogQGV2ZW50IHF0aS1sb29zZS1jaG9pY2UgLSBFbWl0dGVkIHdoZW4gYSBjaG9pY2UgaXMgcmVtb3ZlZFxuICpcbiAqIEBzbG90IC0gVGhlIGRlZmF1bHQgc2xvdC5cbiAqL1xuQGN1c3RvbUVsZW1lbnQoJ3F0aS1zaW1wbGUtY2hvaWNlJylcbmV4cG9ydCBjbGFzcyBRdGlTaW1wbGVDaG9pY2UgZXh0ZW5kcyBRdGlDaG9pY2Uge1xuICBzdGF0aWMgc3R5bGVzID0gY3NzYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgfVxuICAgIHNsb3Qge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gIGA7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxkaXYgcGFydD1cImNoXCI+PGRpdiBwYXJ0PVwiY2hhXCI+PC9kaXY+PC9kaXY+XG4gICAgICA8c2xvdCBwYXJ0PVwic2xvdFwiPjwvc2xvdD4gYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktc2ltcGxlLWNob2ljZSc6IFF0aVNpbXBsZUNob2ljZTtcbiAgfVxufVxuIiwgIi8qIG9ubHkgZXhwb3J0ZWQgdG8gb3ZlcnJpZGUgb3IgZXh0ZW5kIGZvciBzcGVjaWZpYyBwdXJwb3NlcyAqL1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcm5hbC9ldmVudC10eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL2ludGVybmFsL2V2ZW50cyc7XG5leHBvcnQgKiBmcm9tICcuL2ludGVybmFsL2V4cHJlc3Npb24tcmVzdWx0JztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJuYWwvdmFyaWFibGVzJztcbi8qIG9ubHkgZXhwb3J0ZWQgdG8gb3ZlcnJpZGUgb3IgZXh0ZW5kIGZvciBzcGVjaWZpYyBwdXJwb3NlcyAqL1xuZXhwb3J0ICogZnJvbSAnLi9xdGktYXNzZXNzbWVudC1pdGVtL3F0aS1hc3Nlc3NtZW50LWl0ZW0nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktYXNzZXNzbWVudC1zdGltdWx1cy1yZWYvcXRpLWFzc2Vzc21lbnQtc3RpbXVsdXMtcmVmJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL2ludGVybmFsL2Nob2ljZS9xdGktY2hvaWNlJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWl0ZW0tYm9keS9xdGktaXRlbS1ib2R5JztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLXByb21wdC9xdGktcHJvbXB0JztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLXN0eWxlc2hlZXQvcXRpLXN0eWxlc2hlZXQnO1xuLyogc3RhcnQgcmVzcG9uc2UgYW5kIG91dGNvbWUgKi9cbmV4cG9ydCAqIGZyb20gJy4vcXRpLXZhcmlhYmxlLWRlY2xhcmF0aW9uL3F0aS1vdXRjb21lLWRlY2xhcmF0aW9uL3F0aS1vdXRjb21lLWRlY2xhcmF0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLXZhcmlhYmxlLWRlY2xhcmF0aW9uL3F0aS1yZXNwb25zZS1kZWNsYXJhdGlvbi9xdGktcmVzcG9uc2UtZGVjbGFyYXRpb24nO1xuLyogZW5kIHJlc3BvbnNlIGFuZCBvdXRjb21lICovXG5leHBvcnQgKiBmcm9tICcuL3F0aS1jb21wYW5pb24tbWF0ZXJpYWxzLWluZm8vcXRpLWNvbXBhbmlvbi1tYXRlcmlhbHMtaW5mbyc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1ydWJyaWMtYmxvY2svcXRpLWNvbnRlbnQtYm9keSc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1ydWJyaWMtYmxvY2svcXRpLXJ1YnJpYy1ibG9jayc7XG4vKiBzdGFydCBmZWVkYmFjayAqL1xuZXhwb3J0ICogZnJvbSAnLi9xdGktZmVlZGJhY2svcXRpLWZlZWRiYWNrLWJsb2NrL3F0aS1mZWVkYmFjay1ibG9jayc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1mZWVkYmFjay9xdGktZmVlZGJhY2staW5saW5lL3F0aS1mZWVkYmFjay1pbmxpbmUnO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktZmVlZGJhY2svcXRpLW1vZGFsLWZlZWRiYWNrL3F0aS1tb2RhbC1mZWVkYmFjayc7XG4vKiBlbmQgZmVlZGJhY2sgKi9cbi8qIHN0YXJ0IHRleHRlbnRyeWludGVyYWN0aW9uICovXG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktZXh0ZW5kZWQtdGV4dC1pbnRlcmFjdGlvbi9xdGktZXh0ZW5kZWQtdGV4dC1pbnRlcmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktdGV4dC1lbnRyeS1pbnRlcmFjdGlvbi9xdGktdGV4dC1lbnRyeS1pbnRlcmFjdGlvbic7XG4vKiBlbmQgdGV4dGVudHJ5aW50ZXJhY3Rpb24gKi9cbi8qIHN0YXJ0IGhvdHRleHQgKi9cbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1ob3R0ZXh0LWludGVyYWN0aW9uL3F0aS1ob3R0ZXh0LWludGVyYWN0aW9uJztcbi8qIGVuZCBob3R0ZXh0ICovXG4vKiBzdGFydCBpbmxpbmVjaG9pY2UgKi9cbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1pbmxpbmUtY2hvaWNlLWludGVyYWN0aW9uL3F0aS1pbmxpbmUtY2hvaWNlLWludGVyYWN0aW9uJztcbi8qIGVuZCBpbmxpbmVjaG9pY2UgKi9cbi8qIHN0YXJ0IGNob2ljZWludGVyYWN0aW9uICovXG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktY2hvaWNlLWludGVyYWN0aW9uL3F0aS1jaG9pY2UtaW50ZXJhY3Rpb24nO1xuLyogZW5kIGNob2ljZWludGVyYWN0aW9uICovXG5leHBvcnQgKiBmcm9tICcuL3F0aS1vdXRjb21lLXByb2Nlc3NpbmcvcXRpLW91dGNvbWUtcHJvY2Vzc2luZyc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nJztcbi8qIHN0YXJ0IGN1c3RvbSBpbnRlcmFjdGlvbnMgKi9cbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1wb3J0YWJsZS1jdXN0b20taW50ZXJhY3Rpb24vcXRpLXBvcnRhYmxlLWN1c3RvbS1pbnRlcmFjdGlvbic7XG4vKiBlbmQgY3VzdG9tIGludGVyYWN0aW9ucyAqL1xuLyogc3RhcnQgb25seSBwcmV2aWV3IGl0ZW1zICovXG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktYXNzb2NpYXRlLWludGVyYWN0aW9uL3F0aS1hc3NvY2lhdGUtaW50ZXJhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWN1c3RvbS1pbnRlcmFjdGlvbi9xdGktY3VzdG9tLWludGVyYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1lbmQtYXR0ZW1wdC1pbnRlcmFjdGlvbi9xdGktZW5kLWF0dGVtcHQtaW50ZXJhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWdhcC1tYXRjaC1pbnRlcmFjdGlvbi9xdGktZ2FwLW1hdGNoLWludGVyYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1ncmFwaGljLWFzc29jaWF0ZS1pbnRlcmFjdGlvbi9xdGktZ3JhcGhpYy1hc3NvY2lhdGUtaW50ZXJhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWdyYXBoaWMtZ2FwLW1hdGNoLWludGVyYWN0aW9uL3F0aS1ncmFwaGljLWdhcC1tYXRjaC1pbnRlcmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktZ3JhcGhpYy1vcmRlci1pbnRlcmFjdGlvbi9xdGktZ3JhcGhpYy1vcmRlci1pbnRlcmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktaG90c3BvdC1pbnRlcmFjdGlvbi9xdGktaG90c3BvdC1pbnRlcmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktbWF0Y2gtaW50ZXJhY3Rpb24vcXRpLW1hdGNoLWludGVyYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1tZWRpYS1pbnRlcmFjdGlvbi9xdGktbWVkaWEtaW50ZXJhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLW9yZGVyLWludGVyYWN0aW9uL3F0aS1vcmRlci1pbnRlcmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktcG9zaXRpb24tb2JqZWN0LWludGVyYWN0aW9uL3F0aS1wb3NpdGlvbi1vYmplY3QtaW50ZXJhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLXBvc2l0aW9uLW9iamVjdC1pbnRlcmFjdGlvbi9xdGktcG9zaXRpb24tb2JqZWN0LXN0YWdlJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1zZWxlY3QtcG9pbnQtaW50ZXJhY3Rpb24vcXRpLXNlbGVjdC1wb2ludC1pbnRlcmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktc2xpZGVyLWludGVyYWN0aW9uL3F0aS1zbGlkZXItaW50ZXJhY3Rpb24nO1xuLyogZW5kIG9ubHkgcHJldmlldyBpdGVtcyAqL1xuZXhwb3J0ICogZnJvbSAnLi9xdGktYXNzZXNzbWVudC1pdGVtL3F0aS1hc3Nlc3NtZW50LWl0ZW0uY29udGV4dCc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1jdXN0b20tb3BlcmF0b3IvcXRpLWN1c3RvbS1vcGVyYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9pbnRlcm5hbC9pbnRlcmFjdGlvbi9pbnRlcmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktYXNzb2NpYWJsZS1ob3RzcG90JztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1nYXAnO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWdhcC1pbWcnO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWdhcC10ZXh0JztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1ob3RzcG90LWNob2ljZSc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktaG90dGV4dCc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktaW5saW5lLWNob2ljZSc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1zaW1wbGUtY2hvaWNlJztcblxuY29uc29sZS5sb2coXG4gICclY0NcdTAwQkZUTyVjTGFiJWM6IHF0aS1jb21wb25lbnRzIGxvYWRlZCcsXG4gICdmb250LXdlaWdodDpib2xkOyBjb2xvcjpncmVlbicsXG4gICdmb250LWZhbWlseTogXCJQVCBTYW5zXCIsIGZvbnQtd2VpZ2h0OmJvbGQ7IGNvbG9yOmdyZWVuOyBmb250LXNpemU6IHNtYWxsZXI7dmVydGljYWwtYWxpZ246IHN1YicsXG4gICdmb250LXdlaWdodDp1bnNldCdcbik7XG5cbi8vIGNzcyBmb3IgZm9udCBwdC1zYW5zIGFuZCBzdWJzY3JpcHQgYW5kIGdyZWVuXG4iXSwKICAibWFwcGluZ3MiOiAiK0RBQUEsT0FBUyxXQUFBQSxPQUFlLGVBQ3hCLE9BQVMsY0FBQUMsR0FBWSxRQUFBQyxPQUFZLE1BQ2pDLE9BQVMsaUJBQUFDLEdBQWUsWUFBQUMsTUFBZ0Isb0JDMkJqQyxTQUFTQyxFQUFNQyxFQUFpQ0MsRUFBd0IsQ0FDN0UsSUFBTUMsRUFBMENDLEVBQUEsQ0FDOUMscUJBQXNCLElBQ25CRixHQUVM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TSxPQUFXLE1BQ3BCLE9BQVMsaUJBQUFDLEdBQWUsWUFBQUMsT0FBZ0Isb0JBTWpDLElBQU1DLEdBQU4sY0FBK0JDLENBQVUsQ0FRaEQsRUFSYUQsR0FHSyxPQUFTRTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBRmdEQyxFQUFBLENBQXhFQyxHQUFTLENBQUUsVUFBVyxrQkFBbUIsS0FBTSxPQUFRLFFBQVMsRUFBSyxDQUFDLEdBRDVESixHQUM4RCxxQkFEOURBLEdBQU5HLEVBQUEsQ0FETkUsR0FBYyxvQkFBb0IsR0FDdEJMLElDUGIsT0FBUyxpQkFBQU0sT0FBcUIsb0JBRTlCLE9BQVMsUUFBQUMsT0FBWSxNQUdkLElBQU1DLEdBQU4sY0FBeUJDLENBQVUsQ0FDL0IsUUFBUyxDQUNoQixPQUFPQztBQUFBLHFCQUVULENBQ0YsRUFMYUYsR0FBTkcsRUFBQSxDQUROQyxHQUFjLGFBQWEsR0FDZkosSUNMYixPQUFTLGNBQUFLLE9BQWtCLE1BQzNCLE9BQVMsaUJBQUFDLE9BQXFCLG9CQUd2QixJQUFNQyxHQUFOLGNBQThCQyxFQUFXLENBQUMsRUFBcENELEdBQU5FLEVBQUEsQ0FETkMsR0FBYyxtQkFBbUIsR0FDckJILElDSmIsT0FBUyxpQkFBQUksT0FBcUIsb0JBQzlCLE9BQXlCLE9BQUFDLEdBQUssUUFBQUMsT0FBWSxNQWdCbkMsSUFBTUMsR0FBTixjQUE4QkMsQ0FBVSxDQVdwQyxRQUFTLENBQ2hCLE9BQU9DO0FBQUEsaUNBRVQsQ0FDRixFQWZhRixHQUNKLE9BQVNHO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQURMSCxHQUFOSSxFQUFBLENBRE5DLEdBQWMsbUJBQW1CLEdBQ3JCTCxJQ3VEYixRQUFRLElBQ04sMENBQ0EsZ0NBQ0EsZ0dBQ0EsbUJBQ0YiLAogICJuYW1lcyI6IFsicHJvdmlkZSIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJ3YXRjaCIsICJwcm9wZXJ0eU5hbWUiLCAib3B0aW9ucyIsICJyZXNvbHZlZE9wdGlvbnMiLCAiX19zcHJlYWRWYWx1ZXMiLCAicHJvdG8iLCAiZGVjb3JhdGVkRm5OYW1lIiwgInVwZGF0ZSIsICJ3YXRjaGVkUHJvcGVydGllcyIsICJjaGFuZ2VkUHJvcHMiLCAicHJvcGVydHkiLCAia2V5IiwgIm9sZFZhbHVlIiwgIm5ld1ZhbHVlIiwgImNyZWF0ZUNvbnRleHQiLCAiaXRlbUNvbnRleHRWYXJpYWJsZXMiLCAiaXRlbUNvbnRleHQiLCAiUXRpQXNzZXNzbWVudEl0ZW0iLCAiTGl0RWxlbWVudCIsICJfIiwgImRpc2FibGVkIiwgImNoIiwgInJlYWRvbmx5IiwgIml0ZW1Db250ZXh0VmFyaWFibGVzIiwgIl9fc3ByZWFkUHJvcHMiLCAiX19zcHJlYWRWYWx1ZXMiLCAiZmVlZGJhY2tFbGVtZW50IiwgInJlc3BvbnNlSWRlbnRpZmllciIsICJjb3VudEF0dGVtcHQiLCAib3V0Y29tZUlkZW50aWZpZXIiLCAidmFsdWUiLCAidiIsICJ2YXJpYWJsZSIsICJtYXRjaGluZ1ZhbHVlIiwgImludGVyYWN0aW9uRWxlbWVudCIsICJlbCIsICJmZSIsICJteVJlc3BvbnNlcyIsICJyZXNwb25zZSIsICJpbnRlcmFjdGlvbiIsICJpIiwgImh0bWwiLCAic2hvdyIsICJyZXNwb25zZXMiLCAidmFyaSIsICJjciIsICJjb3VudE51bUF0dGVtcHRzIiwgIl9hIiwgInJlc3BvbnNlUHJvY2Vzc29yIiwgImlkZW50aWZpZXIiLCAiZXZlbnQiLCAib3V0Y29tZVZhcmlhYmxlIiwgIm5hbWUiLCAiZGV0YWlsIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJ3YXRjaCIsICJwcm92aWRlIiwgIml0ZW1Db250ZXh0IiwgImN1c3RvbUVsZW1lbnQiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgIlF0aUFzc2Vzc21lbnRTdGltdWx1c1JlZiIsICJMaXRFbGVtZW50IiwgImV2ZW50IiwgInN0aW11bHVzUmVmIiwgInBhdGgiLCAic3RpbXVsdXMiLCAicXRpVHJhbnNmb3JtSXRlbSIsICJhcGkiLCAiZWxlbWVudHMiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgImN1c3RvbUVsZW1lbnQiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgInByb3BlcnR5IiwgIktFWUNPREUiLCAiUXRpQ2hvaWNlIiwgIkxpdEVsZW1lbnQiLCAiXyIsICJkaXNhYmxlZCIsICJldmVudCIsICJodG1sIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJ2YWx1ZSIsICJ3YXRjaCIsICJjdXN0b21FbGVtZW50IiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJjc3MiLCAicXRpX2l0ZW1fYm9keV9zdHlsZXNfZGVmYXVsdCIsICJRdGlJdGVtQm9keSIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAicXRpX2l0ZW1fYm9keV9zdHlsZXNfZGVmYXVsdCIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJodG1sIiwgIkxpdEVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlQcm9tcHQiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgIkxpdEVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlTdHlsZXNoZWV0IiwgIkxpdEVsZW1lbnQiLCAiX2NoYW5nZWRQcm9wZXJ0aWVzIiwgIml0ZW0iLCAibGluayIsICJzdHlsZXMiLCAiZXJyb3IiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiY29uc3VtZSIsICJjc3MiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgInN0YXRlIiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgIlF0aVZhcmlhYmxlRGVjbGFyYXRpb24iLCAiTGl0RWxlbWVudCIsICJodG1sIiwgInZhcmlhYmxlIiwgImh0bWxWYWx1ZXMiLCAiZGVmYXVsdFZhbHVlcyIsICJuIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgIlF0aU91dGNvbWVEZWNsYXJhdGlvbiIsICJRdGlWYXJpYWJsZURlY2xhcmF0aW9uIiwgIl9hIiwgIl9iIiwgInZhbHVlIiwgInYiLCAiaHRtbCIsICJ0YWJsZSIsICJlbnRyaWVzIiwgImVudHJ5IiwgInNvdXJjZVZhbHVlIiwgInRhcmdldFZhbHVlIiwgIm91dGNvbWVWYXJpYWJsZSIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgImNvbnN1bWUiLCAiaXRlbUNvbnRleHQiLCAic3RhdGUiLCAiY3VzdG9tRWxlbWVudCIsICJjb25zdW1lIiwgImNzcyIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAic3RhdGUiLCAiUXRpUmVzcG9uc2VEZWNsYXJhdGlvbiIsICJRdGlWYXJpYWJsZURlY2xhcmF0aW9uIiwgIl9hIiwgIl9iIiwgInZhbHVlIiwgInYiLCAiaHRtbCIsICJyZXNwb25zZVZhcmlhYmxlIiwgInJlc3VsdCIsICJjb3JyZWN0UmVzcG9uc2UiLCAidmFsdWVzIiwgImkiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJjb25zdW1lIiwgIml0ZW1Db250ZXh0IiwgInN0YXRlIiwgImN1c3RvbUVsZW1lbnQiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgIlF0aUNvbXBhbmlvbk1hdGVyaWFsc0luZm8iLCAiTGl0RWxlbWVudCIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlDb250ZW50Qm9keSIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiTGl0RWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgIlF0aVJ1YnJpY0Jsb2NrIiwgIkxpdEVsZW1lbnQiLCAib2xkIiwgImRpc2FibGVkIiwgImNsYXNzTmFtZSIsICJodG1sIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAid2F0Y2giLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgIkxpdEVsZW1lbnQiLCAicHJvcGVydHkiLCAiZGVjaW1hbFNlcGFyYXRvciIsICJjb252ZXJ0TnVtYmVyVG9Vbml2ZXJhbEZvcm1hdCIsICJudW1iZXIiLCAiZFNlcCIsICJJc051bGxPclVuZGVmaW5lZCIsICJ2YWx1ZSIsICJyZW1vdmVEb3VibGVTbGFzaGVzIiwgInN0ciIsICJRdGlGZWVkYmFjayIsICJMaXRFbGVtZW50IiwgIm91dGNvbWVJZGVudGlmaWVyIiwgIm91dGNvbWVWYXJpYWJsZSIsICJpc0ZvdW5kIiwgIklzTnVsbE9yVW5kZWZpbmVkIiwgInZhbHVlIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJRdGlGZWVkYmFja0Jsb2NrIiwgIlF0aUZlZWRiYWNrIiwgImh0bWwiLCAiX2NoYW5nZWRQcm9wZXJ0aWVzIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgIlF0aUZlZWRiYWNrSW5saW5lIiwgIlF0aUZlZWRiYWNrIiwgImh0bWwiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpTW9kYWxGZWVkYmFjayIsICJRdGlGZWVkYmFjayIsICJodG1sIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJpZkRlZmluZWQiLCAicHJvcGVydHkiLCAiTGl0RWxlbWVudCIsICJJbnRlcmFjdGlvbiIsICJMaXRFbGVtZW50IiwgInZhbCIsICJ2YWx1ZSIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAicmVmIiwgImNyZWF0ZVJlZiIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgInN0YXRlIiwgIlF0aUV4dGVuZGVkVGV4dEludGVyYWN0aW9uIiwgIkludGVyYWN0aW9uIiwgImNyZWF0ZVJlZiIsICJvbGQiLCAiZGlzYWJsZWQiLCAiY2xhc3NOYW1lIiwgIm5yUm93cyIsICJ2YWx1ZSIsICJjc3MiLCAiaHRtbCIsICJyZWYiLCAiZXZlbnQiLCAiaWZEZWZpbmVkIiwgImlucHV0IiwgInRleHQiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgInN0YXRlIiwgIndhdGNoIiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJzdGF0ZSIsICJpZkRlZmluZWQiLCAiY3JlYXRlUmVmIiwgImxpdmVRdWVyeSIsICJxdWVyeVNlbGVjdG9yIiwgIm9wdGlvbnMiLCAib2JzZXJ2ZXIiLCAicmVzb2x2ZWRPcHRpb25zIiwgIl9fc3ByZWFkVmFsdWVzIiwgInByb3RvIiwgImRlY29yYXRlZEZuTmFtZSIsICJjb25uZWN0ZWRDYWxsYmFjayIsICJkaXNjb25uZWN0ZWRDYWxsYmFjayIsICJfYSIsICJjYWxsYmFjayIsICJtdXRhdGlvbkxpc3QiLCAiZWxlbWVudHNUb1dhdGNoIiwgIm11dGF0aW9uIiwgImFkZGVkTm9kZXMiLCAiZSIsICJyZW1vdmVkTm9kZXMiLCAibiIsICJlbGVtZW50c0FkZGVkIiwgIlF0aVRleHRFbnRyeUludGVyYWN0aW9uIiwgIkludGVyYWN0aW9uIiwgImNyZWF0ZVJlZiIsICJvbGQiLCAiY2xhc3NlcyIsICJjbGFzc05hbWUiLCAibnJSb3dzIiwgInZhbHVlIiwgImNzcyIsICJodG1sIiwgImV2ZW50IiwgImlmRGVmaW5lZCIsICJpbnB1dCIsICJ0ZXh0IiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJzdGF0ZSIsICJ3YXRjaCIsICJjdXN0b21FbGVtZW50IiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJDaG9pY2VzIiwgIkludGVyYWN0aW9uIiwgIl8iLCAiZGlzYWJsZWQiLCAiY2giLCAicmVhZG9ubHkiLCAiYWNjIiwgInZhbCIsICJyZXNwb25zZVZhbHVlIiwgInJlc3BvbnNlVmFsdWVBcnJheSIsICJjZSIsICJydiIsICJjaG9pY2VFbGVtZW50IiwgImV2ZW50IiwgInNlbGVjdGVkSWRlbnRpZmllcnMiLCAicmVzdWx0IiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJ3YXRjaCIsICJRdGlIb3R0ZXh0SW50ZXJhY3Rpb24iLCAiQ2hvaWNlcyIsICJodG1sIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAic3RhdGUiLCAidW5zYWZlSFRNTCIsICJRdGlJbmxpbmVDaG9pY2VJbnRlcmFjdGlvbiIsICJJbnRlcmFjdGlvbiIsICJjc3MiLCAiaHRtbCIsICJvcHRpb24iLCAidW5zYWZlSFRNTCIsICJjaG9pY2VzIiwgImNob2ljZSIsICJzZWxlY3RlZE9wdGlvbiIsICJpIiwgIl9fc3ByZWFkUHJvcHMiLCAiX19zcHJlYWRWYWx1ZXMiLCAidmFsdWUiLCAiZXZlbnQiLCAic2VsZWN0ZWRPcHRpb25WYWx1ZSIsICJfX2RlY29yYXRlQ2xhc3MiLCAic3RhdGUiLCAicHJvcGVydHkiLCAiY3VzdG9tRWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgImh0bWwiLCAiY3NzIiwgInF0aV9jaG9pY2VfaW50ZXJhY3Rpb25fc3R5bGVzX2RlZmF1bHQiLCAiUXRpQ2hvaWNlSW50ZXJhY3Rpb24iLCAiQ2hvaWNlcyIsICJodG1sIiwgInF0aV9jaG9pY2VfaW50ZXJhY3Rpb25fc3R5bGVzX2RlZmF1bHQiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgIlF0aU91dGNvbWVQcm9jZXNzaW5nIiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJsb2dpYyIsICJRdGlPdXRjb21lUHJvY2Vzc2luZ1Byb2Nlc3NvciIsICJydWxlcyIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAicnVsZSIsICJjc3MiLCAiaHRtbCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAibWF0Y2hDb3JyZWN0IiwgIm1hcFJlc3BvbnNlIiwgIm1hcFJlc3BvbnNlUG9pbnQiLCAiUXRpUmVzcG9uc2VQcm9jZXNzaW5nIiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJydWxlcyIsICJydWxlIiwgIl9jaGFuZ2VkUHJvcGVydGllcyIsICJzcGxpdHRlZFRlbXBsYXRlTmFtZSIsICJ0ZW1wbGF0ZU5hbWUiLCAibWFwUmVzcG9uc2UiLCAibWFwUmVzcG9uc2VQb2ludCIsICJtYXRjaENvcnJlY3QiLCAic3RySFRNTCIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAiY3VzdG9tRWxlbWVudCIsICJodG1sIiwgIkxpdEVsZW1lbnQiLCAiUXRpUnVsZSIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpTG9va3VwT3V0Y29tZVZhbHVlIiwgIlF0aVJ1bGUiLCAiaWRlbnRpZmllciIsICJvdXRjb21lVmFyaWFibGUiLCAidmFsdWUiLCAiY29udmVydE51bWJlclRvVW5pdmVyYWxGb3JtYXQiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgImh0bWwiLCAiUXRpUmVzcG9uc2VDb25kaXRpb24iLCAiUXRpUnVsZSIsICJodG1sIiwgImJyYW5jaGVzIiwgImkiLCAiYnJhbmNoIiwgIlF0aVNldE91dGNvbWVWYWx1ZSIsICJRdGlSdWxlIiwgIm91dGNvbWVJZGVudGlmaWVyIiwgImV4cHJlc3Npb24iLCAidmFsdWUiLCAiUXRpU2V0T3V0Y29tZVZhbHVlUnVsZSIsICJ2IiwgImNvbnZlcnROdW1iZXJUb1VuaXZlcmFsRm9ybWF0IiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJRdGlSZXNwb25zZUVsc2UiLCAic3ViUnVsZXMiLCAiaSIsICJodG1sIiwgIlF0aVJlc3BvbnNlSWYiLCAiUXRpUmVzcG9uc2VFbHNlIiwgInJlc3VsdCIsICJpIiwgIlF0aVJlc3BvbnNlRWxzZUlmIiwgIlF0aVJlc3BvbnNlSWYiLCAiaHRtbCIsICJMaXRFbGVtZW50IiwgImNzcyIsICJodG1sIiwgInN0YXRlIiwgIlF0aUV4cHJlc3Npb24iLCAiTGl0RWxlbWVudCIsICJpZGVudGlmaWVyIiwgInZhbHVlcyIsICJ2IiwgInJlc3BvbnNlVmFyaWFibGUiLCAiZXJyb3IiLCAiaHRtbCIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInN0YXRlIiwgIlF0aUNvbmRpdGlvbkV4cHJlc3Npb24iLCAiUXRpRXhwcmVzc2lvbiIsICJRdGlBbmQiLCAicXRpQW5kTWl4aW4iLCAiUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiIsICJCYXNlIiwgImNoaWxkcmVuIiwgImMiLCAiY29uZGl0aW9uIiwgInZhbHVlIiwgImUiLCAiUXRpQW5kIiwgInByb3BlcnR5IiwgIlF0aUJhc2VWYWx1ZSIsICJRdGlFeHByZXNzaW9uIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJRdGlDb250YWlucyIsICJRdGlDb25kaXRpb25FeHByZXNzaW9uIiwgInZhbHVlcyIsICJ2YWx1ZTEiLCAidmFsdWUyIiwgInByb2plY3Rpb24xIiwgInByb2plY3Rpb24yIiwgIngiLCAiUXRpQ29ycmVjdCIsICJRdGlFeHByZXNzaW9uIiwgImlkZW50aWZpZXIiLCAicmVzcG9uc2VWYXJpYWJsZSIsICJwcm9wZXJ0eSIsICJRdGlFcXVhbFJvdW5kZWQiLCAiUXRpRXhwcmVzc2lvbiIsICJmaWd1cmVzIiwgInZhbHVlcyIsICJ2YWx1ZTEiLCAidmFsdWUyIiwgImZsb2F0MSIsICJmbG9hdDIiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgInByb3BlcnR5IiwgIlNjb3JpbmdIZWxwZXIiLCAidmFsdWUxIiwgInZhbHVlMiIsICJiYXNlVHlwZSIsICJpbnQxIiwgImludDIiLCAiZmxvYXQxIiwgImZsb2F0MiIsICJwYWlyMSIsICJwYWlyMiIsICJRdGlFcXVhbCIsICJRdGlFeHByZXNzaW9uIiwgInZhbHVlcyIsICJ2YWx1ZTEiLCAidmFsdWUyIiwgIlNjb3JpbmdIZWxwZXIiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgIlF0aUd0IiwgIlF0aUV4cHJlc3Npb24iLCAidmFsdWVzIiwgInZhbHVlMSIsICJ2YWx1ZTIiLCAiUXRpR3RlIiwgIlF0aUNvbmRpdGlvbkV4cHJlc3Npb24iLCAidmFsdWVzIiwgInZhbHVlMSIsICJ2YWx1ZTIiLCAiUXRpSXNOdWxsIiwgIlF0aUV4cHJlc3Npb24iLCAidmFyaWFibGVzIiwgInZhbHVlIiwgIlF0aUx0IiwgIlF0aUV4cHJlc3Npb24iLCAidmFsdWVzIiwgInZhbHVlMSIsICJ2YWx1ZTIiLCAiUXRpTHRlIiwgIlF0aUNvbmRpdGlvbkV4cHJlc3Npb24iLCAidmFsdWVzIiwgInZhbHVlMSIsICJ2YWx1ZTIiLCAicHJvcGVydHkiLCAiUXRpTWFwUmVzcG9uc2UiLCAiUXRpRXhwcmVzc2lvbiIsICJyZXNwb25zZSIsICJtYXBwaW5nIiwgImNhbmRpZGF0ZVJlc3BvbnNlcyIsICJyZXN1bHQiLCAiY2FuZGlkYXRlUmVzcG9uc2UiLCAibWFwcGVkVmFsdWUiLCAiZW50cnkiLCAiU2NvcmluZ0hlbHBlciIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAicHJvcGVydHkiLCAiTGl0RWxlbWVudCIsICJRdGlNYXBwaW5nIiwgIkxpdEVsZW1lbnQiLCAiZWwiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgIlF0aU1hdGNoIiwgIl9RdGlNYXRjaCIsICJRdGlFeHByZXNzaW9uIiwgInZhbHVlcyIsICJ2YWx1ZVRvTWFwIiwgImNvcnJlY3RWYWx1ZUluZm8iLCAiX2EiLCAiU2NvcmluZ0hlbHBlciIsICJpIiwgImFuc3dlckluZGV4IiwgImNvcnJlY3RBbnN3ZXIiLCAibWF0Y2hpbmdWYWx1ZSIsICJhcnIiLCAibXYiLCAiUXRpTWVtYmVyIiwgIlF0aUV4cHJlc3Npb24iLCAidmFsdWVzIiwgInZhbHVlMSIsICJ2YWx1ZTIiLCAicHJvamVjdGlvbjEiLCAiUXRpTXVsdGlwbGUiLCAiUXRpRXhwcmVzc2lvbiIsICJ2YXJpYWJsZXMiLCAidmFyaWFibGUiLCAiaHRtbCIsICJRdGlOb3QiLCAiUXRpRXhwcmVzc2lvbiIsICJodG1sIiwgIlF0aU9yIiwgIlF0aUNvbmRpdGlvbkV4cHJlc3Npb24iLCAiYyIsICJjb25kaXRpb24iLCAidmFsdWUiLCAiUXRpT3JkZXJlZCIsICJRdGlFeHByZXNzaW9uIiwgInZhcmlhYmxlcyIsICJ2YXJpYWJsZSIsICJjb25zdW1lIiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJwcm9wZXJ0eSIsICJzdGF0ZSIsICJRdFByaW50ZWRWYXJpYWJsZSIsICJMaXRFbGVtZW50IiwgIl9hIiwgIl9iIiwgInZhbHVlIiwgInYiLCAiaHRtbCIsICJhc3Nlc3NtZW50SXRlbSIsICJpZGVudGlmaWVyIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJjb25zdW1lIiwgIml0ZW1Db250ZXh0IiwgInN0YXRlIiwgIlF0aVByb2R1Y3QiLCAiUXRpRXhwcmVzc2lvbiIsICJhY2N1bXVsYXRvciIsICJjdXJyZW50VmFsdWUiLCAiZXJyb3IiLCAicHJvcGVydHkiLCAiUXRpU3RyaW5nTWF0Y2giLCAiUXRpRXhwcmVzc2lvbiIsICJ2YWx1ZXMiLCAidmFsdWUxIiwgInZhbHVlMiIsICJ2MSIsICJ2MiIsICJTY29yaW5nSGVscGVyIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJRdGlTdW0iLCAiUXRpRXhwcmVzc2lvbiIsICJRdGlTdW1FeHByZXNzaW9uIiwgImV4cHJlc3Npb25zIiwgImMiLCAidmFsdWUiLCAiYSIsICJiIiwgIlF0aVZhcmlhYmxlIiwgIlF0aUV4cHJlc3Npb24iLCAiaWRlbnRpZmllciIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAic3RhdGUiLCAiUXRpUG9ydGFibGVDdXN0b21JbnRlcmFjdGlvbiIsICJJbnRlcmFjdGlvbiIsICJ1cmwiLCAiYmFzZVVybCIsICJyZXF1aXJlQ29uZmlnIiwgIm1vZHVsZUNvbmciLCAibW9kdWxlSWQiLCAiZSIsICJwYXRoIiwgImJhc2VQYXRoIiwgImNvbmZpZyIsICJwcmltYXJ5Q29uZmlnIiwgImZhbGxiYWNrIiwgIl9hIiwgImZhaWxlZFRvUmVzb2x2ZSIsICJwYXRoV2l0aEV4dGVuc2lvbiIsICJmYWxsYmFja0NvbmZpZyIsICJpbnB1dCIsICJ0b3BMZXZlbEtleSIsICJuZXN0ZWRPYmplY3QiLCAibmVzdGVkS2V5IiwgInZhbHVlIiwgInJlc3BvbnNlIiwgIm5ld1Jlc3BvbnNlIiwgInN0cmluZ2lmaWVkIiwgInZhbCIsICJub2RlIiwgImEiLCAiZ2V0UHJvcGVydHlWYWx1ZSIsICJlbCIsICJwcm9wZXJ0eSIsICJrZXkiLCAiY2hpbGRyZW4iLCAiYWxsS2V5IiwgImMiLCAiayIsICJnZXRDaGlsZFByb3BlcnRpZXMiLCAicHJvcGVydGllcyIsICJjaGlsZCIsICJfX3NwcmVhZFZhbHVlcyIsICJwY2kiLCAidHlwZSIsICJkb20iLCAiYWNjIiwgImxpbmsiLCAic3R5bGVzIiwgInJlcXVpcmUiLCAiY3R4QSIsICJ3YXNQcmV2aW91c2x5TG9hZGVkIiwgImVyciIsICJtb2R1bGVSZXNvbHV0aW9uUGF0aCIsICJtb2R1bGVSZXNvbHV0aW9uRmFsbGJhY2tQYXRoIiwgImludGVyYWN0aW9uTW9kdWxlcyIsICJtb2R1bGVzIiwgIm1vZHVsZSIsICJwcmltYXJ5UGF0aCIsICJmYWxsYmFja1BhdGgiLCAiX19zcHJlYWRQcm9wcyIsICJzdHIiLCAiaHRtbCIsICJfX2RlY29yYXRlQ2xhc3MiLCAic3RhdGUiLCAiY3VzdG9tRWxlbWVudCIsICJMaXRFbGVtZW50IiwgImNzcyIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAic3RhdGUiLCAiVG91Y2hEcmFnQW5kRHJvcCIsICJfVG91Y2hEcmFnQW5kRHJvcCIsICJ0eXBlIiwgInZhbCIsICJlIiwgIl90b3VjaGVzIiwgImVsZW1lbnRTdHlsZXMiLCAic3R5bGUiLCAiX3RoaXMiLCAidGFyZ2V0IiwgImRyYWdnYWJsZXMiLCAiZWwiLCAieCIsICJ5IiwgIl9hIiwgImV2ZW50IiwgInBvaW50RnJvbVRvdWNoRXZlbnQiLCAiY3VzdG9tRWwiLCAicGFnZSIsICJ0b3VjaCIsICJjbGllbnRSZWN0IiwgImV2ZW50VHlwZSIsICJidWJibGUiLCAicHJvcGVydHkiLCAiRHJvcHBhYmxlc01peGluIiwgInN1cGVyQ2xhc3MiLCAiZHJvcHBhYmxlc0luU2hhZG93Um9vdCIsICJkcm9wcGFibGVzU2VsZWN0b3IiLCAiRHJvcHBhYmxlc0VsZW1lbnQiLCAiY2hhbmdlZFByb3BzIiwgImRyb3BwYWJsZXMiLCAiZCIsICJkcm9wcGFibGUiLCAibXV0YXRpb25zIiwgIm11dGF0aW9uIiwgIl9hIiwgImV2IiwgImRyYWdnYWJsZUluTGlnaHREb20iLCAiZHJhZ2dhYmxlIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJGbGlwcGFibGVzTWl4aW4iLCAic3VwZXJDbGFzcyIsICJkcm9wcGFibGVzU2VsIiwgImRyYWdnYWJsZXNTZWwiLCAiRmxpcHBhYmxlc0VsZW1lbnQiLCAicHJvcGVydHkiLCAiRHJhZ0Ryb3BJbnRlcmFjdGlvbk1peGluIiwgInN1cGVyQ2xhc3MiLCAiZHJhZ2dhYmxlc1NlbGVjdG9yIiwgImRyb3BwYWJsZXNJblNoYWRvd1Jvb3QiLCAiZHJvcHBhYmxlc1NlbGVjdG9yIiwgIkRyYWdEcm9wSW50ZXJhY3Rpb25FbGVtZW50IiwgIkZsaXBwYWJsZXNNaXhpbiIsICJEcm9wcGFibGVzTWl4aW4iLCAiZXYiLCAiZCIsICJkcmFnZ2FibGUiLCAiZHJhZ3NBZGRlZCIsICJkcmFnc1JlbW92ZWQiLCAiZWxlbSIsICJvbGQiLCAiZHJhZ09wdGlvbnMiLCAiZGlzYWJsZWQiLCAicyIsICJjaCIsICJyZWFkb25seSIsICJjaGFuZ2VkUHJvcHMiLCAiVG91Y2hEcmFnQW5kRHJvcCIsICJwb3NpdGlvbiIsICJpbmRleCIsICJpbnRlcmFjdGlvbiIsICJnYXBUZXh0IiwgInNhdmUiLCAiY2hpbGRyZW4iLCAiZGlzYWJsZSIsICJyZXNwb25zZSIsICJkcm9wSWQiLCAiZHJhZ0lkcyIsICJkcm9wcGFibGUiLCAiZHJvcCIsICJkcmFnSWQiLCAiYXNzb2NpYXRpb25zIiwgImRyYWdzSW5Ecm9wcGFibGUiLCAiaWRlbnRpZmllcnMiLCAiZHJvcHBhYmxlSWRlbnRpZmllciIsICJfX2RlY29yYXRlQ2xhc3MiLCAibGl2ZVF1ZXJ5IiwgInByb3BlcnR5IiwgIndhdGNoIiwgIlF0aUFzc29jaWF0ZUludGVyYWN0aW9uIiwgIkRyYWdEcm9wSW50ZXJhY3Rpb25NaXhpbiIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAiXyIsICJpbmRleCIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInN0YXRlIiwgImN1c3RvbUVsZW1lbnQiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgInN0YXRlIiwgIlF0aUN1c3RvbUludGVyYWN0aW9uIiwgIkludGVyYWN0aW9uIiwgInVyaVRvTWFuaWZlc3QiLCAicmVtb3ZlRG91YmxlU2xhc2hlcyIsICJyZXNwb25zZSIsICJkYXRhIiwgImVyciIsICJpZnJhbWUiLCAiaWZyYW1lV2luIiwgImlmcmFtZURvYyIsICJpZnJhbWVzSW5TaGFkb3dSb290IiwgIm91dGVySUZyYW1lcyIsICJpZnJhbWVTcmMiLCAib3V0ZXJEb2MiLCAiZSIsICJpbmRleCIsICJpZnJhbWVEb2N1bWVudCIsICJpZnJhbWVzIiwgIm5lc3RlZERvYyIsICJ0eXBlIiwgImV2ZW50IiwgIm1lZGlhRGF0YSIsICJtZWRpYSIsICJ2YWwiLCAiaHRtbCIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAic3RhdGUiLCAiY3VzdG9tRWxlbWVudCIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAiUXRpRW5kQXR0ZW1wdEludGVyYWN0aW9uIiwgIkludGVyYWN0aW9uIiwgInZhbCIsICJodG1sIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgIkxpdEVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlHYXBNYXRjaEludGVyYWN0aW9uIiwgIkRyYWdEcm9wSW50ZXJhY3Rpb25NaXhpbiIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAidmFsdWUiLCAibWF0Y2hlcyIsICJyZXNwb25zZSIsICJ4IiwgInNwbGl0IiwgImdhcCIsICJpbmRleCIsICJfYSIsICJfYiIsICJfYyIsICJfZCIsICJpZGVudGlmaWVyIiwgInRleHRJZGVudGlmaWVyIiwgInRleHQiLCAidGV4dFNwYW4iLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgInN2ZyIsICJjdXN0b21FbGVtZW50IiwgInF1ZXJ5IiwgInF1ZXJ5QXNzaWduZWRFbGVtZW50cyIsICJzdGF0ZSIsICJpZkRlZmluZWQiLCAicmVwZWF0IiwgInBvc2l0aW9uSG90c3BvdHMiLCAic2hhcGUiLCAiY29vcmRzTnVtYmVyIiwgImltZyIsICJob3RzcG90IiwgImNlbnRlclgiLCAiY2VudGVyWSIsICJyYWRpdXMiLCAiY2VudGVyWFBlciIsICJjZW50ZXJZUGVyIiwgInJhZGl1c1BlciIsICJsZWZ0WCIsICJ0b3BZIiwgInJpZ2h0WCIsICJib3R0b21ZIiwgImxlZnRYUGVyIiwgInRvcFlQZXIiLCAicmlnaHRYUGVyIiwgImJvdHRvbVlQZXIiLCAicG9seWNvb3JkcyIsICJhY2MiLCAiY3VycmVudFZhbHVlIiwgImN1cnJlbnRJbmRleCIsICJwb2x5QyIsICJsYXN0VmFsIiwgInBvaW50IiwgInBvbHlEIiwgInAiLCAiUXRpR3JhcGhpY0Fzc29jaWF0ZUludGVyYWN0aW9uIiwgIkludGVyYWN0aW9uIiwgInZhbCIsICJfYSIsICJfYiIsICJfYyIsICJfZCIsICJodG1sIiwgImlmRGVmaW5lZCIsICJyZXBlYXQiLCAibGluZSIsICJpbmRleCIsICJzdmciLCAiZSIsICJfIiwgImkiLCAiaW1nIiwgImhvdHNwb3QiLCAiY29vcmRzIiwgInNoYXBlIiwgImNvb3Jkc051bWJlciIsICJzIiwgInBvc2l0aW9uSG90c3BvdHMiLCAiZXZlbnQiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJzdGF0ZSIsICJxdWVyeSIsICJxdWVyeUFzc2lnbmVkRWxlbWVudHMiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpR3JhcGhpY0dhcE1hdGNoSW50ZXJhY3Rpb24iLCAiRHJhZ0Ryb3BJbnRlcmFjdGlvbk1peGluIiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJlIiwgImltZyIsICJob3RzcG90IiwgImNvb3JkcyIsICJzaGFwZSIsICJjb29yZHNOdW1iZXIiLCAicyIsICJjZW50ZXJYIiwgImNlbnRlclkiLCAicmFkaXVzIiwgImxlZnRYIiwgInRvcFkiLCAicmlnaHRYIiwgImJvdHRvbVkiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpR3JhcGhpY09yZGVySW50ZXJhY3Rpb24iLCAiQ2hvaWNlcyIsICJodG1sIiwgImUiLCAiaWRlbnRpZmllciIsICJob3RzcG90IiwgImVsIiwgIm1heFNlbGVjdGlvbiIsICJpIiwgImltZyIsICJjb29yZHMiLCAic2hhcGUiLCAiY29vcmRzTnVtYmVyIiwgInMiLCAicG9zaXRpb25Ib3RzcG90cyIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlIb3RzcG90SW50ZXJhY3Rpb24iLCAiQ2hvaWNlcyIsICJodG1sIiwgImUiLCAiaW1nIiwgImhvdHNwb3QiLCAiY29vcmRzIiwgInNoYXBlIiwgImNvb3Jkc051bWJlciIsICJzIiwgInBvc2l0aW9uSG90c3BvdHMiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgIkxpdEVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJzdGF0ZSIsICJ1bnNhZmVIVE1MIiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgIlF0aVNpbXBsZUFzc29jaWFibGVDaG9pY2UiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJjdXN0b21FbGVtZW50IiwgIlF0aU1hdGNoSW50ZXJhY3Rpb24iLCAiRHJhZ0Ryb3BJbnRlcmFjdGlvbk1peGluIiwgIkxpdEVsZW1lbnQiLCAicmFkaW8iLCAiY2hlY2tib3giLCAidmFsdWUiLCAibmFtZSIsICJ0eXBlIiwgInYiLCAicmVzcG9uc2VWYWx1ZSIsICJodG1sIiwgImNvbCIsICJpIiwgInVuc2FmZUhUTUwiLCAicm93IiwgInJJbmRleCIsICJjSW5kZXgiLCAicm93SWQiLCAiY29sSWQiLCAic2VsZWN0ZWRJblJvd0NvdW50IiwgImNoZWNrZWQiLCAicGFydCIsICJkaXNhYmxlIiwgImUiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJzdGF0ZSIsICJwcm9wZXJ0eSIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpTWVkaWFJbnRlcmFjdGlvbiIsICJJbnRlcmFjdGlvbiIsICJ2YWwiLCAiX19zcHJlYWRQcm9wcyIsICJfX3NwcmVhZFZhbHVlcyIsICJodG1sIiwgIm1lZGlhT2JqZWN0IiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAic3RhdGUiLCAidW5zYWZlSFRNTCIsICJTaHVmZmxlTWl4aW4iLCAic3VwZXJDbGFzcyIsICJzZWxlY3RvciIsICJTaHVmZmxlRWxlbWVudCIsICJfY2hhbmdlZFByb3BlcnRpZXMiLCAidmFsdWUiLCAib2xkVmFsdWUiLCAiY2hvaWNlcyIsICJmaXhlZEVsZW1lbnRzIiwgIm5vbkZpeGVkRWxlbWVudHMiLCAiY2hvaWNlIiwgImluZGV4IiwgImkiLCAiaiIsICJvcmRlciIsICJub25GaXhlZENob2ljZSIsICJRdGlPcmRlckludGVyYWN0aW9uIiwgIlNodWZmbGVNaXhpbiIsICJEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4iLCAiTGl0RWxlbWVudCIsICJjaG9pY2VzIiwgImh0bWwiLCAiXyIsICJpIiwgInVuc2FmZUhUTUwiLCAidmFsdWUiLCAicmVzcG9uc2UiLCAiaW5kZXgiLCAic2ltcGxlQ2hvaWNlIiwgInRleHQiLCAiZHJvcHBhYmxlIiwgImRyYWdzSW5Ecm9wcGFibGUiLCAiZCIsICJlbCIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInN0YXRlIiwgInByb3BlcnR5IiwgImN1c3RvbUVsZW1lbnQiLCAiTGl0RWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJRdGlTUG9zaXRpb25PYmplY3RJbnRlcmFjdGlvbiIsICJMaXRFbGVtZW50IiwgImNzcyIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpUG9zaXRpb25PYmplY3RTdGFnZSIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAiZXZlbnQiLCAiZGVsdGFYIiwgImRlbHRhWSIsICJhIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgInN0YXRlIiwgInJlcGVhdCIsICJzdHlsZU1hcCIsICJRdGlTZWxlY3RQb2ludEludGVyYWN0aW9uIiwgIkludGVyYWN0aW9uIiwgImh0bWwiLCAicmVwZWF0IiwgInBvaW50IiwgImluZGV4IiwgInN0eWxlTWFwIiwgImUiLCAiXyIsICJpIiwgInZhbCIsICJldmVudCIsICJ4IiwgInkiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJzdGF0ZSIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgIm5vdGhpbmciLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJxdWVyeSIsICJRdGlTbGlkZXJJbnRlcmFjdGlvbiIsICJJbnRlcmFjdGlvbiIsICJvbGQiLCAiZGlzYWJsZWQiLCAicmVhZG9ubHkiLCAidmFsdWUiLCAibXlSZXNwb25zZSIsICJ2YWx1ZVBlcmNlbnRhZ2UiLCAiaHRtbCIsICJub3RoaW5nIiwgImV2ZW50IiwgImhhbmRsZVRvdWNoTW92ZSIsICJ4IiwgImRpZmZYIiwgImhhbmRsZVRvdWNoRW5kIiwgImhhbmRsZU1vdXNlTW92ZSIsICJoYW5kbGVNb3VzZVVwIiwgInZhbHVlTm93IiwgInJvdW5kZWRTdGVwVmFsdWUiLCAiX3RvdWNoTW92ZSIsICJldnQiLCAidG91Y2giLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJxdWVyeSIsICJwcm9wZXJ0eSIsICJ3YXRjaCIsICJjdXN0b21FbGVtZW50IiwgImNvbnN1bWUiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAic3RhdGUiLCAiUXRpQ3VzdG9tT3BlcmF0b3IiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgImV2ZW50IiwgIl9hIiwgIl9iIiwgIl9jIiwgImNvbW1lbnROb2RlIiwgIm5vZGUiLCAiZSIsICJmbiIsICJyZXNwb25zZUlkZW50aWZpZXIiLCAidiIsICJpdGVtIiwgInZhcmlhYmxlSWRlbnRpZmllciIsICJvdXRjb21lSWRlbnRpZmllciIsICJ2YWx1ZSIsICJyZXNwb25zZSIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY29uc3VtZSIsICJpdGVtQ29udGV4dCIsICJzdGF0ZSIsICJjdXN0b21FbGVtZW50IiwgIkxpdEVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlBc3NvY2lhYmxlSG90c3BvdCIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgIlF0aUdhcCIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgImN1c3RvbUVsZW1lbnQiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgIlF0aUdhcEltZyIsICJMaXRFbGVtZW50IiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJjdXN0b21FbGVtZW50IiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgIlF0aUdhcFRleHQiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgIlF0aUhvdHNwb3RDaG9pY2UiLCAiUXRpQ2hvaWNlIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiY3VzdG9tRWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgImh0bWwiLCAiUXRpSG90dGV4dCIsICJRdGlDaG9pY2UiLCAiaHRtbCIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpSW5saW5lQ2hvaWNlIiwgIkxpdEVsZW1lbnQiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJRdGlTaW1wbGVDaG9pY2UiLCAiUXRpQ2hvaWNlIiwgImh0bWwiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50Il0KfQo=
493
+ `,we=i([Oo("qti-simple-choice")],we);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{h as Interaction,he as QtPrintedVariable,Ue as QtiAnd,_ as QtiAssessmentItem,z as QtiAssessmentStimulusRef,_e as QtiAssociableHotspot,ee as QtiAssociateInteraction,Fe as QtiBaseValue,q as QtiChoice,Z as QtiChoiceInteraction,Me 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,ke as QtiGap,Te as QtiGapImg,ge as QtiGapMatchInteraction,Re as QtiGapText,D as QtiGraphicAssociateInteraction,be as QtiGraphicGapMatchInteraction,ve as QtiGraphicOrderInteraction,ct as QtiGt,pt as QtiGte,ie as QtiHotspotChoice,ye as QtiHotspotInteraction,ze as QtiHottext,Pe as QtiHottextInteraction,Je as QtiInlineChoice,F as QtiInlineChoiceInteraction,dt as QtiIsNull,Oe 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,O 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,st as QtiResponseCondition,P as QtiResponseDeclaration,ue as QtiResponseElse,nt as QtiResponseElseIf,me as QtiResponseIf,j as QtiResponseProcessing,M as QtiRubricBlock,H as QtiRule,Ke as QtiSPositionObjectInteraction,X as QtiSelectPointInteraction,it as QtiSetOutcomeValue,ot as QtiSetOutcomeValueRule,K as QtiSimpleAssociableChoice,we as QtiSimpleChoice,E as QtiSliderInteraction,Ye as QtiStringMatch,Se as QtiStylesheet,qt as QtiSum,Ct as QtiSumExpression,T as QtiTextEntryInteraction,_t as QtiVariable,S as itemContext,Mt as itemContextVariables,js as qtiAndMixin};
494
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktYXNzZXNzbWVudC1pdGVtL3F0aS1hc3Nlc3NtZW50LWl0ZW0udHMiLCAiLi4vLi4vc3JjL2xpYi9kZWNvcmF0b3JzL3dhdGNoLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWFzc2Vzc21lbnQtaXRlbS9xdGktYXNzZXNzbWVudC1pdGVtLmNvbnRleHQudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktYXNzZXNzbWVudC1zdGltdWx1cy1yZWYvcXRpLWFzc2Vzc21lbnQtc3RpbXVsdXMtcmVmLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL2ludGVybmFsL2Nob2ljZS9xdGktY2hvaWNlLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWl0ZW0tYm9keS9xdGktaXRlbS1ib2R5LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWl0ZW0tYm9keS9xdGktaXRlbS1ib2R5LnN0eWxlcy50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1wcm9tcHQvcXRpLXByb21wdC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1zdHlsZXNoZWV0L3F0aS1zdHlsZXNoZWV0LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXZhcmlhYmxlLWRlY2xhcmF0aW9uL3F0aS1vdXRjb21lLWRlY2xhcmF0aW9uL3F0aS1vdXRjb21lLWRlY2xhcmF0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXZhcmlhYmxlLWRlY2xhcmF0aW9uL3F0aS12YXJpYWJsZS1kZWNsYXJhdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS12YXJpYWJsZS1kZWNsYXJhdGlvbi9xdGktcmVzcG9uc2UtZGVjbGFyYXRpb24vcXRpLXJlc3BvbnNlLWRlY2xhcmF0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWNvbXBhbmlvbi1tYXRlcmlhbHMtaW5mby9xdGktY29tcGFuaW9uLW1hdGVyaWFscy1pbmZvLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJ1YnJpYy1ibG9jay9xdGktY29udGVudC1ib2R5LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJ1YnJpYy1ibG9jay9xdGktcnVicmljLWJsb2NrLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWZlZWRiYWNrL3F0aS1mZWVkYmFjay1ibG9jay9xdGktZmVlZGJhY2stYmxvY2sudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktZmVlZGJhY2svcXRpLWZlZWRiYWNrLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvaW50ZXJuYWwvdXRpbHMudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktZmVlZGJhY2svcXRpLWZlZWRiYWNrLWlubGluZS9xdGktZmVlZGJhY2staW5saW5lLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWZlZWRiYWNrL3F0aS1tb2RhbC1mZWVkYmFjay9xdGktbW9kYWwtZmVlZGJhY2sudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWV4dGVuZGVkLXRleHQtaW50ZXJhY3Rpb24vcXRpLWV4dGVuZGVkLXRleHQtaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vaW50ZXJuYWwvaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLXRleHQtZW50cnktaW50ZXJhY3Rpb24vcXRpLXRleHQtZW50cnktaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9kZWNvcmF0b3JzL2xpdmUtcXVlcnkudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWhvdHRleHQtaW50ZXJhY3Rpb24vcXRpLWhvdHRleHQtaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vaW50ZXJuYWwvY2hvaWNlcy9jaG9pY2VzLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1pbmxpbmUtY2hvaWNlLWludGVyYWN0aW9uL3F0aS1pbmxpbmUtY2hvaWNlLWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1jaG9pY2UtaW50ZXJhY3Rpb24vcXRpLWNob2ljZS1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktY2hvaWNlLWludGVyYWN0aW9uL3F0aS1jaG9pY2UtaW50ZXJhY3Rpb24uc3R5bGVzLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLW91dGNvbWUtcHJvY2Vzc2luZy9xdGktb3V0Y29tZS1wcm9jZXNzaW5nLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9pbnRlcm5hbC90ZW1wbGF0ZS1zdHJpbmdzLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLXJ1bGUvcXRpLWxvb2t1cC1vdXRjb21lLXZhbHVlL3F0aS1sb29rdXAtb3V0Y29tZS12YWx1ZS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1ydWxlL3F0aS1ydWxlLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLXJ1bGUvcXRpLXJlc3BvbnNlLWNvbmRpdGlvbi9xdGktcmVzcG9uc2UtY29uZGl0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLXJ1bGUvcXRpLXNldC1vdXRjb21lLXZhbHVlL3F0aS1zZXQtb3V0Y29tZS12YWx1ZS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1yZXNwb25zZS1lbHNlL3F0aS1yZXNwb25zZS1lbHNlLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLXJlc3BvbnNlLWVsc2UvcXRpLXJlc3BvbnNlLWlmL3F0aS1yZXNwb25zZS1lbHNlLWlmL3F0aS1yZXNwb25zZS1lbHNlLWlmLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLXJlc3BvbnNlLWVsc2UvcXRpLXJlc3BvbnNlLWlmL3F0aS1yZXNwb25zZS1pZi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1leHByZXNzaW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLWNvbmRpdGlvbi1leHByZXNzaW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLWFuZC9xdGktYW5kLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLWFuZC9pbmRleC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1iYXNldmFsdWUvcXRpLWJhc2V2YWx1ZS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1jb250YWlucy9xdGktY29udGFpbnMudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktY29ycmVjdC9xdGktY29ycmVjdC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1lcXVhbC1yb3VuZGVkL3F0aS1lcXVhbC1yb3VuZGVkLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLWVxdWFsL3F0aS1lcXVhbC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3V0aWxpdGllcy9zY29yaW5nLWhlbHBlci50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1ndC9xdGktZ3QudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktZ3RlL3F0aS1ndGUudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktaXMtbnVsbC9xdGktaXMtbnVsbC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1sdC9xdGktbHQudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktbHRlL3F0aS1sdGUudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktbWFwLXJlc3BvbnNlL3F0aS1tYXAtcmVzcG9uc2UudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktbWFwcGluZy9xdGktbWFwcGluZy50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1tYXRjaC9xdGktbWF0Y2gudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktbWVtYmVyL3F0aS1tZW1iZXIudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktbXVsdGlwbGUvcXRpLW11bHRpcGxlLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLW5vdC9xdGktbm90LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLW9yL3F0aS1vci50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1vcmRlcmVkL3F0aS1vcmRlcmVkLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLXByaW50ZWQtdmFyaWFibGUvcXRpLXByaW50ZWQtdmFyaWFibGUudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZy9xdGktZXhwcmVzc2lvbi9xdGktcHJvZHVjdC9xdGktcHJvZHVjdC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1zdHJpbmctbWF0Y2gvcXRpLXN0cmluZy1tYXRjaC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS1zdW0vcXRpLXN1bS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nL3F0aS1leHByZXNzaW9uL3F0aS12YXJpYWJsZS9xdGktdmFyaWFibGUudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLXBvcnRhYmxlLWN1c3RvbS1pbnRlcmFjdGlvbi9xdGktcG9ydGFibGUtY3VzdG9tLWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1hc3NvY2lhdGUtaW50ZXJhY3Rpb24vcXRpLWFzc29jaWF0ZS1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9pbnRlcm5hbC9kcmFnLWRyb3AvZHJhZy1kcm9wLWFwaS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9pbnRlcm5hbC9kcmFnLWRyb3AvZHJvcHBhYmxlcy1taXhpbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9pbnRlcm5hbC9kcmFnLWRyb3AvZmxpcHBhYmxlcy1taXhpbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9pbnRlcm5hbC9kcmFnLWRyb3AvZHJhZy1kcm9wLWludGVyYWN0aW9uLW1peGluLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1jdXN0b20taW50ZXJhY3Rpb24vcXRpLWN1c3RvbS1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktZW5kLWF0dGVtcHQtaW50ZXJhY3Rpb24vcXRpLWVuZC1hdHRlbXB0LWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1nYXAtbWF0Y2gtaW50ZXJhY3Rpb24vcXRpLWdhcC1tYXRjaC1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktZ3JhcGhpYy1hc3NvY2lhdGUtaW50ZXJhY3Rpb24vcXRpLWdyYXBoaWMtYXNzb2NpYXRlLWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL2ludGVybmFsL2hvdHNwb3RzL2hvdHNwb3QudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWdyYXBoaWMtZ2FwLW1hdGNoLWludGVyYWN0aW9uL3F0aS1ncmFwaGljLWdhcC1tYXRjaC1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktZ3JhcGhpYy1vcmRlci1pbnRlcmFjdGlvbi9xdGktZ3JhcGhpYy1vcmRlci1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktaG90c3BvdC1pbnRlcmFjdGlvbi9xdGktaG90c3BvdC1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktbWF0Y2gtaW50ZXJhY3Rpb24vcXRpLW1hdGNoLWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLW1lZGlhLWludGVyYWN0aW9uL3F0aS1tZWRpYS1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktb3JkZXItaW50ZXJhY3Rpb24vcXRpLW9yZGVyLWludGVyYWN0aW9uLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL2ludGVybmFsL3NodWZmbGUvc2h1ZmZsZS1taXhpbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktcG9zaXRpb24tb2JqZWN0LWludGVyYWN0aW9uL3F0aS1wb3NpdGlvbi1vYmplY3QtaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLXBvc2l0aW9uLW9iamVjdC1pbnRlcmFjdGlvbi9xdGktcG9zaXRpb24tb2JqZWN0LXN0YWdlLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1zZWxlY3QtcG9pbnQtaW50ZXJhY3Rpb24vcXRpLXNlbGVjdC1wb2ludC1pbnRlcmFjdGlvbi50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktc2xpZGVyLWludGVyYWN0aW9uL3F0aS1zbGlkZXItaW50ZXJhY3Rpb24udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktY3VzdG9tLW9wZXJhdG9yL3F0aS1jdXN0b20tb3BlcmF0b3IudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWFzc29jaWFibGUtaG90c3BvdC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktZ2FwLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1nYXAtaW1nLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLWNvbXBvbmVudHMvcXRpLWludGVyYWN0aW9uL3F0aS1nYXAtdGV4dC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1pbnRlcmFjdGlvbi9xdGktaG90c3BvdC1jaG9pY2UudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWhvdHRleHQudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLWlubGluZS1jaG9pY2UudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9xdGktaW50ZXJhY3Rpb24vcXRpLXNpbXBsZS1jaG9pY2UudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktY29tcG9uZW50cy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgcHJvdmlkZSB9IGZyb20gJ0BsaXQvY29udGV4dCc7XG5pbXBvcnQgeyBMaXRFbGVtZW50LCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgd2F0Y2ggfSBmcm9tICcuLi8uLi9kZWNvcmF0b3JzL3dhdGNoJztcbmltcG9ydCB0eXBlIHsgSW50ZXJhY3Rpb25DaGFuZ2VkRGV0YWlscywgT3V0Y29tZUNoYW5nZWREZXRhaWxzIH0gZnJvbSAnLi4vaW50ZXJuYWwvZXZlbnQtdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBSZXNwb25zZUludGVyYWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJuYWwvZXhwcmVzc2lvbi1yZXN1bHQnO1xuaW1wb3J0IHR5cGUgeyBWYXJpYWJsZURlY2xhcmF0aW9uLCBWYXJpYWJsZVZhbHVlIH0gZnJvbSAnLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IE91dGNvbWVWYXJpYWJsZSwgUmVzcG9uc2VWYXJpYWJsZSB9IGZyb20gJy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgdHlwZSB7IFF0aUZlZWRiYWNrIH0gZnJvbSAnLi4vcXRpLWZlZWRiYWNrL3F0aS1mZWVkYmFjayc7XG5pbXBvcnQgdHlwZSB7IEludGVyYWN0aW9uIH0gZnJvbSAnLi4vcXRpLWludGVyYWN0aW9uL2ludGVybmFsL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uJztcbmltcG9ydCB0eXBlIHsgUXRpUmVzcG9uc2VQcm9jZXNzaW5nIH0gZnJvbSAnLi4vcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcnO1xuaW1wb3J0IHsgSXRlbUNvbnRleHQsIGl0ZW1Db250ZXh0LCBpdGVtQ29udGV4dFZhcmlhYmxlcyB9IGZyb20gJy4vcXRpLWFzc2Vzc21lbnQtaXRlbS5jb250ZXh0JztcblxuLyoqXG4gKiBAc3VtbWFyeSBUaGUgcXRpLWFzc2Vzc21lbnQtaXRlbSBlbGVtZW50IGNvbnRhaW5zIGFsbCB0aGUgb3RoZXIgUVRJIDMgaXRlbSBzdHJ1Y3R1cmVzLlxuICogQGRvY3VtZW50YXRpb24gaHR0cHM6Ly93d3cuaW1zZ2xvYmFsLm9yZy9zcGVjL3F0aS92M3AwL2ltcGwjaC5kbHRubmo4N2wweWpcbiAqIEBzdGF0dXMgc3RhYmxlXG4gKiBAc2luY2UgNC4wXG4gKlxuICogQGRlcGVuZGVuY3kgcXRpLWZlZWRiYWNrXG4gKiBAZGVwZW5kZW5jeSBxdGktcmVzcG9uc2Vwcm9jZXNzaW5nXG4gKlxuICogQHNsb3QgLSBUaGUgZGVmYXVsdCBzbG90IHdoZXJlIGFsbCB0aGUgb3RoZXIgUVRJIDMgaXRlbSBzdHJ1Y3R1cmVzIGdvLlxuICpcbiAqIEBldmVudCBxdGktaW50ZXJhY3Rpb24tY2hhbmdlZCAtIEVtaXR0ZWQgd2hlbiBhbiBpbnRlcmFjdGlvbiBpcyBjaGFuZ2VkLlxuICogQGV2ZW50IHF0aS1vdXRjb21lLWNoYW5nZWQgLSBFbWl0dGVkIHdoZW4gYW4gb3V0Y29tZSBoYXMgY2hhbmdlZC5cbiAqIEBldmVudCBxdGktcmVzcG9uc2UtcHJvY2Vzc2luZyAtIEVtaXR0ZWQgd2hlbiByZXNwb25zZS1wcm9jZXNzaW5nIGlzIGNhbGxlZC5cbiAqXG4gKi9cbkBjdXN0b21FbGVtZW50KCdxdGktYXNzZXNzbWVudC1pdGVtJylcbmV4cG9ydCBjbGFzcyBRdGlBc3Nlc3NtZW50SXRlbSBleHRlbmRzIExpdEVsZW1lbnQge1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgdGl0bGU6IHN0cmluZztcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIGlkZW50aWZpZXI6IHN0cmluZyA9ICcnO1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgYWRhcHRpdmU6ICd0cnVlJyB8ICdmYWxzZScgPSAnZmFsc2UnO1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgdGltZURlcGVuZGVudDogJ3RydWUnIHwgJ2ZhbHNlJyA9ICdmYWxzZSc7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogQm9vbGVhbiB9KSBkaXNhYmxlZDogYm9vbGVhbjtcbiAgQHdhdGNoKCdkaXNhYmxlZCcsIHsgd2FpdFVudGlsRmlyc3RVcGRhdGU6IHRydWUgfSlcbiAgX2hhbmRsZURpc2FibGVkQ2hhbmdlID0gKF86IGJvb2xlYW4sIGRpc2FibGVkOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy5faW50ZXJhY3Rpb25FbGVtZW50cy5mb3JFYWNoKGNoID0+IChjaC5kaXNhYmxlZCA9IGRpc2FibGVkKSk7XG4gIH07XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogQm9vbGVhbiB9KSByZWFkb25seTogYm9vbGVhbjtcbiAgQHdhdGNoKCdyZWFkb25seScsIHsgd2FpdFVudGlsRmlyc3RVcGRhdGU6IHRydWUgfSlcbiAgX2hhbmRsZVJlYWRvbmx5Q2hhbmdlID0gKF86IGJvb2xlYW4sIHJlYWRvbmx5OiBib29sZWFuKSA9PlxuICAgIHRoaXMuX2ludGVyYWN0aW9uRWxlbWVudHMuZm9yRWFjaChjaCA9PiAoY2gucmVhZG9ubHkgPSByZWFkb25seSkpO1xuXG4gIEBwcm92aWRlKHsgY29udGV4dDogaXRlbUNvbnRleHQgfSlcbiAgLy8gQHByb3BlcnR5KHsgYXR0cmlidXRlOiBmYWxzZSB9KVxuICBwcml2YXRlIF9jb250ZXh0OiBJdGVtQ29udGV4dCA9IHtcbiAgICBpZGVudGlmaWVyOiB0aGlzLmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpLFxuICAgIHZhcmlhYmxlczogaXRlbUNvbnRleHRWYXJpYWJsZXNcbiAgfTtcblxuICBwdWJsaWMgZ2V0IHZhcmlhYmxlcygpOiBWYXJpYWJsZVZhbHVlPHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbD5bXSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRleHQudmFyaWFibGVzLm1hcCh2ID0+ICh7IGlkZW50aWZpZXI6IHYuaWRlbnRpZmllciwgdmFsdWU6IHYudmFsdWUsIHR5cGU6IHYudHlwZSB9KSk7XG4gIH1cblxuICBwdWJsaWMgc2V0IHZhcmlhYmxlcyh2YWx1ZTogVmFyaWFibGVWYWx1ZTxzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGw+W10pIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpIHx8IHZhbHVlLnNvbWUodiA9PiAhKCdpZGVudGlmaWVyJyBpbiB2KSkpIHtcbiAgICAgIGNvbnNvbGUud2FybigndmFyaWFibGVzIHByb3BlcnR5IHNob3VsZCBiZSBhbiBhcnJheSBvZiBWYXJpYWJsZURlY2xhcmF0aW9uJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fY29udGV4dCA9IHtcbiAgICAgIC4uLnRoaXMuX2NvbnRleHQsXG4gICAgICB2YXJpYWJsZXM6IHRoaXMuX2NvbnRleHQudmFyaWFibGVzLm1hcCh2YXJpYWJsZSA9PiB7XG4gICAgICAgIGNvbnN0IG1hdGNoaW5nVmFsdWUgPSB2YWx1ZS5maW5kKHYgPT4gdi5pZGVudGlmaWVyID09PSB2YXJpYWJsZS5pZGVudGlmaWVyKTtcbiAgICAgICAgaWYgKG1hdGNoaW5nVmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4geyAuLi52YXJpYWJsZSwgLi4ubWF0Y2hpbmdWYWx1ZSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YXJpYWJsZTtcbiAgICAgIH0pXG4gICAgfTtcblxuICAgIHRoaXMuX2NvbnRleHQudmFyaWFibGVzLmZvckVhY2godmFyaWFibGUgPT4ge1xuICAgICAgaWYgKHZhcmlhYmxlLnR5cGUgPT09ICdyZXNwb25zZScpIHtcbiAgICAgICAgY29uc3QgaW50ZXJhY3Rpb25FbGVtZW50ID0gdGhpcy5faW50ZXJhY3Rpb25FbGVtZW50cy5maW5kKFxuICAgICAgICAgIChlbDogSW50ZXJhY3Rpb24pID0+IGVsLnJlc3BvbnNlSWRlbnRpZmllciA9PT0gdmFyaWFibGUuaWRlbnRpZmllclxuICAgICAgICApO1xuICAgICAgICBpZiAoaW50ZXJhY3Rpb25FbGVtZW50KSB7XG4gICAgICAgICAgaW50ZXJhY3Rpb25FbGVtZW50LnJlc3BvbnNlID0gdmFyaWFibGUudmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHZhcmlhYmxlLnR5cGUgPT09ICdvdXRjb21lJykge1xuICAgICAgICB0aGlzLl9mZWVkYmFja0VsZW1lbnRzLmZvckVhY2goZmUgPT4gZmUuY2hlY2tTaG93RmVlZGJhY2sodmFyaWFibGUuaWRlbnRpZmllcikpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdGlhbENvbnRleHQ6IFJlYWRvbmx5PEl0ZW1Db250ZXh0PiA9IHsgLi4udGhpcy5fY29udGV4dCwgdmFyaWFibGVzOiB0aGlzLl9jb250ZXh0LnZhcmlhYmxlcyB9O1xuICBwcml2YXRlIF9mZWVkYmFja0VsZW1lbnRzOiBRdGlGZWVkYmFja1tdID0gW107XG4gIHByaXZhdGUgX2ludGVyYWN0aW9uRWxlbWVudHM6IEludGVyYWN0aW9uW10gPSBbXTtcblxuICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7XG4gICAgdGhpcy5fZW1pdDx7IGRldGFpbDogUXRpQXNzZXNzbWVudEl0ZW0gfT4oJ3F0aS1hc3Nlc3NtZW50LWl0ZW0tY29ubmVjdGVkJywgdGhpcyk7XG4gIH1cblxuICAvKiogQGRlcHJlY2F0ZWQgdXNlIHZhcmlhYmxlcyBwcm9wZXJ0eSBpbnN0ZWFkICovXG4gIHNldCByZXNwb25zZXMobXlSZXNwb25zZXM6IFJlc3BvbnNlSW50ZXJhY3Rpb25bXSkge1xuICAgIGlmIChteVJlc3BvbnNlcykge1xuICAgICAgZm9yIChjb25zdCByZXNwb25zZSBvZiBteVJlc3BvbnNlcykge1xuICAgICAgICBjb25zdCByZXNwb25zZVZhcmlhYmxlID0gdGhpcy5nZXRSZXNwb25zZShyZXNwb25zZS5yZXNwb25zZUlkZW50aWZpZXIpO1xuICAgICAgICBpZiAocmVzcG9uc2VWYXJpYWJsZSkge1xuICAgICAgICAgIHRoaXMudXBkYXRlUmVzcG9uc2VWYXJpYWJsZShyZXNwb25zZS5yZXNwb25zZUlkZW50aWZpZXIsIHJlc3BvbnNlLnJlc3BvbnNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGludGVyYWN0aW9uOiBJbnRlcmFjdGlvbiB8IHVuZGVmaW5lZCA9IHRoaXMuX2ludGVyYWN0aW9uRWxlbWVudHMuZmluZChcbiAgICAgICAgICBpID0+IGkuZ2V0QXR0cmlidXRlKCdyZXNwb25zZS1pZGVudGlmaWVyJykgPT09IHJlc3BvbnNlLnJlc3BvbnNlSWRlbnRpZmllclxuICAgICAgICApO1xuICAgICAgICBpZiAoaW50ZXJhY3Rpb24pIHtcbiAgICAgICAgICBpbnRlcmFjdGlvbi5yZXNwb25zZSA9IHJlc3BvbnNlLnJlc3BvbnNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci12YXJpYWJsZScsIGUgPT4ge1xuICAgICAgdGhpcy5fY29udGV4dCA9IHsgLi4udGhpcy5fY29udGV4dCwgdmFyaWFibGVzOiBbLi4udGhpcy5fY29udGV4dC52YXJpYWJsZXMsIGUuZGV0YWlsLnZhcmlhYmxlXSB9O1xuICAgICAgdGhpcy5faW5pdGlhbENvbnRleHQgPSB0aGlzLl9jb250ZXh0O1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9KTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci1mZWVkYmFjaycsIChlOiBDdXN0b21FdmVudDxRdGlGZWVkYmFjaz4pID0+IHtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBjb25zdCBmZWVkYmFja0VsZW1lbnQgPSBlLmRldGFpbDtcbiAgICAgIHRoaXMuX2ZlZWRiYWNrRWxlbWVudHMucHVzaChmZWVkYmFja0VsZW1lbnQpO1xuICAgICAgZmVlZGJhY2tFbGVtZW50LmNoZWNrU2hvd0ZlZWRiYWNrKGZlZWRiYWNrRWxlbWVudC5vdXRjb21lSWRlbnRpZmllcik7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdxdGktcmVnaXN0ZXItaW50ZXJhY3Rpb24nLCAoZTogQ3VzdG9tRXZlbnQ8bnVsbD4pID0+IHtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLl9pbnRlcmFjdGlvbkVsZW1lbnRzLnB1c2goZS50YXJnZXQgYXMgSW50ZXJhY3Rpb24pO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignZW5kLWF0dGVtcHQnLCAoZTogQ3VzdG9tRXZlbnQ8eyByZXNwb25zZUlkZW50aWZpZXI6IHN0cmluZzsgY291bnRBdHRlbXB0OiBib29sZWFuIH0+KSA9PiB7XG4gICAgICBjb25zdCB7IHJlc3BvbnNlSWRlbnRpZmllciwgY291bnRBdHRlbXB0IH0gPSBlLmRldGFpbDtcbiAgICAgIHRoaXMudXBkYXRlUmVzcG9uc2VWYXJpYWJsZShyZXNwb25zZUlkZW50aWZpZXIsICd0cnVlJyk7XG4gICAgICB0aGlzLnByb2Nlc3NSZXNwb25zZShjb3VudEF0dGVtcHQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgLy8gd29yZHQgYWFuZ2Vyb2VwZW4gdmFudWl0IGRlIHByb2Nlc3Npbmd0ZW1wbGF0ZVxuICAgICAgJ3F0aS1zZXQtb3V0Y29tZS12YWx1ZScsXG4gICAgICAoZTogQ3VzdG9tRXZlbnQ8eyBvdXRjb21lSWRlbnRpZmllcjogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10gfT4pID0+IHtcbiAgICAgICAgY29uc3QgeyBvdXRjb21lSWRlbnRpZmllciwgdmFsdWUgfSA9IGUuZGV0YWlsO1xuICAgICAgICB0aGlzLnVwZGF0ZU91dGNvbWVWYXJpYWJsZShvdXRjb21lSWRlbnRpZmllciwgdmFsdWUpO1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1pbnRlcmFjdGlvbi1yZXNwb25zZScsIHRoaXMuaGFuZGxlVXBkYXRlUmVzcG9uc2VWYXJpYWJsZSk7XG4gIH1cblxuICBwdWJsaWMgc2hvd0NvcnJlY3RSZXNwb25zZShzaG93OiBib29sZWFuKSB7XG4gICAgY29uc3QgcmVzcG9uc2VWYXJpYWJsZXMgPSB0aGlzLl9jb250ZXh0LnZhcmlhYmxlcy5maWx0ZXIoXG4gICAgICAodmFyaTogUmVzcG9uc2VWYXJpYWJsZSB8IE91dGNvbWVWYXJpYWJsZSkgPT4gJ2NvcnJlY3RSZXNwb25zZScgaW4gdmFyaSAmJiB2YXJpLmNvcnJlY3RSZXNwb25zZVxuICAgICkgYXMgUmVzcG9uc2VWYXJpYWJsZVtdO1xuICAgIGNvbnN0IHJlc3BvbnNlcyA9IHJlc3BvbnNlVmFyaWFibGVzLm1hcChjciA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXNwb25zZUlkZW50aWZpZXI6IGNyLmlkZW50aWZpZXIsXG4gICAgICAgIHJlc3BvbnNlOiBjci5jb3JyZWN0UmVzcG9uc2VcbiAgICAgIH07XG4gICAgfSk7XG4gICAgZm9yIChjb25zdCByZXNwb25zZSBvZiByZXNwb25zZXMpIHtcbiAgICAgIGNvbnN0IGludGVyYWN0aW9uOiBJbnRlcmFjdGlvbiB8IHVuZGVmaW5lZCA9IHRoaXMuX2ludGVyYWN0aW9uRWxlbWVudHMuZmluZChcbiAgICAgICAgaSA9PiBpLmdldEF0dHJpYnV0ZSgncmVzcG9uc2UtaWRlbnRpZmllcicpID09PSByZXNwb25zZS5yZXNwb25zZUlkZW50aWZpZXJcbiAgICAgICk7XG4gICAgICBpbnRlcmFjdGlvbiAmJiAoaW50ZXJhY3Rpb24uY29ycmVjdFJlc3BvbnNlID0gc2hvdyA/IHJlc3BvbnNlLnJlc3BvbnNlIDogJycpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBwcm9jZXNzUmVzcG9uc2UoY291bnROdW1BdHRlbXB0czogYm9vbGVhbiA9IHRydWUpOiBib29sZWFuIHtcbiAgICBjb25zdCByZXNwb25zZVByb2Nlc3NvciA9IHRoaXMucXVlcnlTZWxlY3RvcigncXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcnKSBhcyB1bmtub3duIGFzIFF0aVJlc3BvbnNlUHJvY2Vzc2luZztcbiAgICBpZiAoIXJlc3BvbnNlUHJvY2Vzc29yKSB7XG4gICAgICAvLyBjb25zb2xlLmluZm8oJ0NsaWVudCBzaWRlIHJlc3BvbnNlIHByb2Nlc3NpbmcgdGVtcGxhdGUgbm90IGF2YWlsYWJsZScpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghcmVzcG9uc2VQcm9jZXNzb3IucHJvY2Vzcykge1xuICAgICAgLy8gY29uc29sZS5pbmZvKCdDbGllbnQgc2lkZSByZXNwb25zZSB3ZWJjb21wb25lbnRzIG5vdCBhdmFpbGFibGUnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXNwb25zZVByb2Nlc3Nvci5wcm9jZXNzKCk7XG5cbiAgICBpZiAodGhpcy5hZGFwdGl2ZSA9PT0gJ2ZhbHNlJykge1xuICAgICAgLy8gaWYgYWRhcGF0aXZlLCBjb21wbGV0aW9uU3RhdHVzIGlzIHNldCBieSB0aGUgcHJvY2Vzc2luZyB0ZW1wbGF0ZVxuICAgICAgdGhpcy51cGRhdGVPdXRjb21lVmFyaWFibGUoJ2NvbXBsZXRpb25TdGF0dXMnLCB0aGlzLl9nZXRDb21wbGV0aW9uU3RhdHVzKCkpO1xuICAgIH1cblxuICAgIGNvdW50TnVtQXR0ZW1wdHMgJiZcbiAgICAgIHRoaXMudXBkYXRlT3V0Y29tZVZhcmlhYmxlKFxuICAgICAgICAnbnVtQXR0ZW1wdHMnLFxuICAgICAgICAoK3RoaXMuX2NvbnRleHQudmFyaWFibGVzLmZpbmQodiA9PiB2LmlkZW50aWZpZXIgPT09ICdudW1BdHRlbXB0cycpPy52YWx1ZSArIDEpLnRvU3RyaW5nKClcbiAgICAgICk7XG5cbiAgICB0aGlzLl9lbWl0KCdxdGktcmVzcG9uc2UtcHJvY2Vzc2VkJyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwdWJsaWMgcmVzZXRSZXNwb25zZXMoKSB7XG4gICAgdGhpcy5fY29udGV4dCA9IHRoaXMuX2luaXRpYWxDb250ZXh0O1xuICB9XG5cbiAgcHVibGljIGdldFJlc3BvbnNlKGlkZW50aWZpZXI6IHN0cmluZyk6IFJlYWRvbmx5PFJlc3BvbnNlVmFyaWFibGU+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYXJpYWJsZShpZGVudGlmaWVyKSBhcyBSZXNwb25zZVZhcmlhYmxlO1xuICB9XG5cbiAgcHVibGljIGdldE91dGNvbWUoaWRlbnRpZmllcjogc3RyaW5nKTogUmVhZG9ubHk8T3V0Y29tZVZhcmlhYmxlPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmFyaWFibGUoaWRlbnRpZmllcikgYXMgT3V0Y29tZVZhcmlhYmxlO1xuICB9XG5cbiAgcHVibGljIGdldFZhcmlhYmxlKGlkZW50aWZpZXI6IHN0cmluZyk6IFJlYWRvbmx5PFZhcmlhYmxlRGVjbGFyYXRpb248c3RyaW5nIHwgc3RyaW5nW10gfCBudWxsPj4ge1xuICAgIHJldHVybiB0aGlzLl9jb250ZXh0LnZhcmlhYmxlcy5maW5kKHYgPT4gdi5pZGVudGlmaWVyID09PSBpZGVudGlmaWVyKSB8fCBudWxsO1xuICB9XG5cbiAgLy8gc2F2aW5nIHByaXZhdGVzIGhlcmU6IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIHByaXZhdGUgaGFuZGxlVXBkYXRlUmVzcG9uc2VWYXJpYWJsZShldmVudDogQ3VzdG9tRXZlbnQ8UmVzcG9uc2VJbnRlcmFjdGlvbj4pIHtcbiAgICBjb25zdCB7IHJlc3BvbnNlSWRlbnRpZmllciwgcmVzcG9uc2UgfSA9IGV2ZW50LmRldGFpbDtcbiAgICB0aGlzLnVwZGF0ZVJlc3BvbnNlVmFyaWFibGUocmVzcG9uc2VJZGVudGlmaWVyLCByZXNwb25zZSk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlUmVzcG9uc2VWYXJpYWJsZShpZGVudGlmaWVyOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2NvbnRleHQgPSB7XG4gICAgICAuLi50aGlzLl9jb250ZXh0LFxuICAgICAgdmFyaWFibGVzOiB0aGlzLl9jb250ZXh0LnZhcmlhYmxlcy5tYXAodiA9PiAodi5pZGVudGlmaWVyICE9PSBpZGVudGlmaWVyID8gdiA6IHsgLi4udiwgdmFsdWU6IHZhbHVlIH0pKVxuICAgIH07XG5cbiAgICB0aGlzLl9lbWl0PEludGVyYWN0aW9uQ2hhbmdlZERldGFpbHM+KCdxdGktaW50ZXJhY3Rpb24tY2hhbmdlZCcsIHtcbiAgICAgIGl0ZW06IHRoaXMuaWRlbnRpZmllcixcbiAgICAgIHJlc3BvbnNlSWRlbnRpZmllcjogaWRlbnRpZmllcixcbiAgICAgIHJlc3BvbnNlOiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IFsuLi52YWx1ZV0gOiB2YWx1ZVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuYWRhcHRpdmUgPT09ICdmYWxzZScpIHtcbiAgICAgIC8vIGlmIGFkYXBhdGl2ZSwgY29tcGxldGlvblN0YXR1cyBpcyBzZXQgYnkgdGhlIHByb2Nlc3NpbmcgdGVtcGxhdGVcbiAgICAgIHRoaXMudXBkYXRlT3V0Y29tZVZhcmlhYmxlKCdjb21wbGV0aW9uU3RhdHVzJywgdGhpcy5fZ2V0Q29tcGxldGlvblN0YXR1cygpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlT3V0Y29tZVZhcmlhYmxlKGlkZW50aWZpZXI6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkKSB7XG4gICAgY29uc3Qgb3V0Y29tZVZhcmlhYmxlID0gdGhpcy5nZXRPdXRjb21lKGlkZW50aWZpZXIpO1xuICAgIGlmICghb3V0Y29tZVZhcmlhYmxlKSB7XG4gICAgICBjb25zb2xlLndhcm4oYENhbiBub3Qgc2V0IHF0aS1vdXRjb21lLWlkZW50aWZpZXI6ICR7aWRlbnRpZmllcn0sIGl0IGlzIG5vdCBhdmFpbGFibGVgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9jb250ZXh0ID0ge1xuICAgICAgLi4udGhpcy5fY29udGV4dCxcbiAgICAgIHZhcmlhYmxlczogdGhpcy5fY29udGV4dC52YXJpYWJsZXMubWFwKHYgPT4ge1xuICAgICAgICBpZiAodi5pZGVudGlmaWVyICE9PSBpZGVudGlmaWVyKSB7XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi52LFxuICAgICAgICAgIHZhbHVlOiBvdXRjb21lVmFyaWFibGUuY2FyZGluYWxpdHkgPT09ICdzaW5nbGUnID8gdmFsdWUgOiBbLi4udi52YWx1ZSwgdmFsdWUgYXMgc3RyaW5nXVxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICB9O1xuXG4gICAgdGhpcy5fZmVlZGJhY2tFbGVtZW50cy5mb3JFYWNoKGZlID0+IGZlLmNoZWNrU2hvd0ZlZWRiYWNrKGlkZW50aWZpZXIpKTtcblxuICAgIHRoaXMuX2VtaXQ8T3V0Y29tZUNoYW5nZWREZXRhaWxzPigncXRpLW91dGNvbWUtY2hhbmdlZCcsIHtcbiAgICAgIGl0ZW06IHRoaXMuaWRlbnRpZmllcixcbiAgICAgIG91dGNvbWVJZGVudGlmaWVyOiBpZGVudGlmaWVyLFxuICAgICAgdmFsdWU6IHRoaXMuX2NvbnRleHQudmFyaWFibGVzLmZpbmQodiA9PiB2LmlkZW50aWZpZXIgPT09IGlkZW50aWZpZXIpPy52YWx1ZVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0Q29tcGxldGlvblN0YXR1cygpOiAnY29tcGxldGVkJyB8ICdpbmNvbXBsZXRlJyB8ICdub3RfYXR0ZW1wdGVkJyB8ICd1bmtub3duJyB7XG4gICAgaWYgKHRoaXMuX2ludGVyYWN0aW9uRWxlbWVudHMuZXZlcnkoaW50ZXJhY3Rpb25FbGVtZW50ID0+IGludGVyYWN0aW9uRWxlbWVudC52YWxpZGF0ZSgpKSkgcmV0dXJuICdjb21wbGV0ZWQnO1xuICAgIGlmICh0aGlzLl9pbnRlcmFjdGlvbkVsZW1lbnRzLnNvbWUoaW50ZXJhY3Rpb25FbGVtZW50ID0+IGludGVyYWN0aW9uRWxlbWVudC52YWxpZGF0ZSgpKSkgcmV0dXJuICdpbmNvbXBsZXRlJztcbiAgICByZXR1cm4gJ25vdF9hdHRlbXB0ZWQnO1xuICB9XG5cbiAgcHJpdmF0ZSBfZW1pdDxUPihuYW1lLCBkZXRhaWwgPSBudWxsKSB7XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50PFQ+KG5hbWUsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWUsXG4gICAgICAgIGRldGFpbFxuICAgICAgfSlcbiAgICApO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1hc3Nlc3NtZW50LWl0ZW0nOiBRdGlBc3Nlc3NtZW50SXRlbTtcbiAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5cbnR5cGUgVXBkYXRlSGFuZGxlciA9IChwcmV2PzogdW5rbm93biwgbmV4dD86IHVua25vd24pID0+IHZvaWQ7XG5cbnR5cGUgTm9uVW5kZWZpbmVkPEE+ID0gQSBleHRlbmRzIHVuZGVmaW5lZCA/IG5ldmVyIDogQTtcblxudHlwZSBVcGRhdGVIYW5kbGVyRnVuY3Rpb25LZXlzPFQgZXh0ZW5kcyBvYmplY3Q+ID0ge1xuICBbSyBpbiBrZXlvZiBUXS0/OiBOb25VbmRlZmluZWQ8VFtLXT4gZXh0ZW5kcyBVcGRhdGVIYW5kbGVyID8gSyA6IG5ldmVyO1xufVtrZXlvZiBUXTtcblxuaW50ZXJmYWNlIFdhdGNoT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBJZiB0cnVlLCB3aWxsIG9ubHkgc3RhcnQgd2F0Y2hpbmcgYWZ0ZXIgdGhlIGluaXRpYWwgdXBkYXRlL3JlbmRlclxuICAgKi9cbiAgd2FpdFVudGlsRmlyc3RVcGRhdGU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJ1bnMgd2hlbiBvYnNlcnZlZCBwcm9wZXJ0aWVzIGNoYW5nZSwgZS5nLiBAcHJvcGVydHkgb3IgQHN0YXRlLCBidXQgYmVmb3JlIHRoZSBjb21wb25lbnQgdXBkYXRlcy4gVG8gd2FpdCBmb3IgYW5cbiAqIHVwZGF0ZSB0byBjb21wbGV0ZSBhZnRlciBhIGNoYW5nZSBvY2N1cnMsIHVzZSBgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZWAgaW4gdGhlIGhhbmRsZXIuIFRvIHN0YXJ0IHdhdGNoaW5nIGFmdGVyIHRoZVxuICogaW5pdGlhbCB1cGRhdGUvcmVuZGVyLCB1c2UgYHsgd2FpdFVudGlsRmlyc3RVcGRhdGU6IHRydWUgfWAgb3IgYHRoaXMuaGFzVXBkYXRlZGAgaW4gdGhlIGhhbmRsZXIuXG4gKlxuICogVXNhZ2U6XG4gKlxuICogQHdhdGNoKCdwcm9wTmFtZScpXG4gKiBoYW5kbGVQcm9wQ2hhbmdlKG9sZFZhbHVlLCBuZXdWYWx1ZSkge1xuICogICAuLi5cbiAqIH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdhdGNoKHByb3BlcnR5TmFtZTogc3RyaW5nIHwgc3RyaW5nW10sIG9wdGlvbnM/OiBXYXRjaE9wdGlvbnMpIHtcbiAgY29uc3QgcmVzb2x2ZWRPcHRpb25zOiBSZXF1aXJlZDxXYXRjaE9wdGlvbnM+ID0ge1xuICAgIHdhaXRVbnRpbEZpcnN0VXBkYXRlOiBmYWxzZSxcbiAgICAuLi5vcHRpb25zXG4gIH07XG4gIHJldHVybiA8RWxlbUNsYXNzIGV4dGVuZHMgTGl0RWxlbWVudD4ocHJvdG86IEVsZW1DbGFzcywgZGVjb3JhdGVkRm5OYW1lOiBVcGRhdGVIYW5kbGVyRnVuY3Rpb25LZXlzPEVsZW1DbGFzcz4pID0+IHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gdXBkYXRlIGlzIGEgcHJvdGVjdGVkIHByb3BlcnR5XG4gICAgY29uc3QgeyB1cGRhdGUgfSA9IHByb3RvO1xuICAgIGNvbnN0IHdhdGNoZWRQcm9wZXJ0aWVzID0gQXJyYXkuaXNBcnJheShwcm9wZXJ0eU5hbWUpID8gcHJvcGVydHlOYW1lIDogW3Byb3BlcnR5TmFtZV07XG5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gdXBkYXRlIGlzIGEgcHJvdGVjdGVkIHByb3BlcnR5XG4gICAgcHJvdG8udXBkYXRlID0gZnVuY3Rpb24gKHRoaXM6IEVsZW1DbGFzcywgY2hhbmdlZFByb3BzOiBNYXA8a2V5b2YgRWxlbUNsYXNzLCBFbGVtQ2xhc3Nba2V5b2YgRWxlbUNsYXNzXT4pIHtcbiAgICAgIHdhdGNoZWRQcm9wZXJ0aWVzLmZvckVhY2gocHJvcGVydHkgPT4ge1xuICAgICAgICBjb25zdCBrZXkgPSBwcm9wZXJ0eSBhcyBrZXlvZiBFbGVtQ2xhc3M7XG4gICAgICAgIGlmIChjaGFuZ2VkUHJvcHMuaGFzKGtleSkpIHtcbiAgICAgICAgICBjb25zdCBvbGRWYWx1ZSA9IGNoYW5nZWRQcm9wcy5nZXQoa2V5KTtcbiAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXNba2V5XTtcblxuICAgICAgICAgIGlmIChvbGRWYWx1ZSAhPT0gbmV3VmFsdWUpIHtcbiAgICAgICAgICAgIGlmICghcmVzb2x2ZWRPcHRpb25zLndhaXRVbnRpbEZpcnN0VXBkYXRlIHx8IHRoaXMuaGFzVXBkYXRlZCkge1xuICAgICAgICAgICAgICAodGhpc1tkZWNvcmF0ZWRGbk5hbWVdIGFzIHVua25vd24gYXMgVXBkYXRlSGFuZGxlcikob2xkVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB1cGRhdGUuY2FsbCh0aGlzLCBjaGFuZ2VkUHJvcHMpO1xuICAgIH07XG4gIH07XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ0BsaXQvY29udGV4dCc7XG5pbXBvcnQgeyBWYXJpYWJsZURlY2xhcmF0aW9uIH0gZnJvbSAnLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBJdGVtQ29udGV4dCB7XG4gIGhyZWY/OiBzdHJpbmc7XG4gIGlkZW50aWZpZXI6IHN0cmluZztcbiAgdmFyaWFibGVzOiBSZWFkb25seUFycmF5PFZhcmlhYmxlRGVjbGFyYXRpb248c3RyaW5nIHwgc3RyaW5nW10+Pjtcbn1cblxuZXhwb3J0IGNvbnN0IGl0ZW1Db250ZXh0VmFyaWFibGVzID0gW1xuICB7XG4gICAgaWRlbnRpZmllcjogJ2NvbXBsZXRpb25TdGF0dXMnLFxuICAgIGNhcmRpbmFsaXR5OiAnc2luZ2xlJyxcbiAgICBiYXNlVHlwZTogJ3N0cmluZycsXG4gICAgdmFsdWU6ICd1bmtub3duJyxcbiAgICB0eXBlOiAnb3V0Y29tZSdcbiAgfSxcbiAge1xuICAgIGlkZW50aWZpZXI6ICdudW1BdHRlbXB0cycsXG4gICAgY2FyZGluYWxpdHk6ICdzaW5nbGUnLFxuICAgIGJhc2VUeXBlOiAnaW50ZWdlcicsXG4gICAgdmFsdWU6ICcwJyxcbiAgICB0eXBlOiAncmVzcG9uc2UnXG4gIH1cbl0gYXMgVmFyaWFibGVEZWNsYXJhdGlvbjxzdHJpbmcgfCBzdHJpbmdbXT5bXTtcblxuZXhwb3J0IGNvbnN0IGl0ZW1Db250ZXh0ID0gY3JlYXRlQ29udGV4dDxJdGVtQ29udGV4dD4oJ2l0ZW0nKTtcbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgcXRpVHJhbnNmb3JtSXRlbSB9IGZyb20gJy4uLy4uL3F0aS10cmFuc2Zvcm1lcnMnO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBjdXN0b20gZWxlbWVudCBmb3IgcmVmZXJlbmNpbmcgYW4gYXNzZXNzbWVudCBzdGltdWx1cy5cbiAqL1xuQGN1c3RvbUVsZW1lbnQoJ3F0aS1hc3Nlc3NtZW50LXN0aW11bHVzLXJlZicpXG5leHBvcnQgY2xhc3MgUXRpQXNzZXNzbWVudFN0aW11bHVzUmVmIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIC8qKlxuICAgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgc3RpbXVsdXMuXG4gICAqL1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgaWRlbnRpZmllciA9ICcnO1xuXG4gIC8qKlxuICAgKiBUaGUgaHJlZiBvZiB0aGUgc3RpbXVsdXMuXG4gICAqL1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgaHJlZiA9ICcnO1xuXG4gIC8qKlxuICAgKiBMaWZlY3ljbGUgbWV0aG9kIGNhbGxlZCB3aGVuIHRoZSBlbGVtZW50IGlzIGNvbm5lY3RlZCB0byB0aGUgRE9NLlxuICAgKiBMb2FkcyBhbmQgYXBwZW5kcyB0aGUgc3RpbXVsdXMgaWYgdGhlICdxdGktYXNzZXNzbWVudC1zdGltdWx1cy1yZWYtY29ubmVjdGVkJyBldmVudCBpcyBub3QgcHJldmVudGVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cbiAgICBjb25zdCBldmVudCA9IG5ldyBFdmVudCgncXRpLWFzc2Vzc21lbnQtc3RpbXVsdXMtcmVmLWNvbm5lY3RlZCcsIHsgY2FuY2VsYWJsZTogdHJ1ZSwgYnViYmxlczogdHJ1ZSB9KTtcbiAgICBjb25zdCBpc1ByZXZlbnRlZCA9IHRoaXMuZGlzcGF0Y2hFdmVudChldmVudCk7XG5cbiAgICBpZiAoaXNQcmV2ZW50ZWQpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmNsb3Nlc3QoJ3F0aS1hc3Nlc3NtZW50LWl0ZW0nKTtcblxuICAgICAgY29uc3Qgc3RpbXVsdXNSZWYgPSBpdGVtLnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLXN0aW11bHVzLWlkcmVmPSR7dGhpcy5pZGVudGlmaWVyfV1gKTtcbiAgICAgIGlmIChzdGltdWx1c1JlZikge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRBbmRBcHBlbmRTdGltdWx1cyhzdGltdWx1c1JlZik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oYFN0aW11bHVzIHdpdGggZGF0YS1zdGltdWx1cy1pZHJlZiAke3RoaXMuaWRlbnRpZmllcn0gbm90IGZvdW5kYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIGFuZCBhcHBlbmRzIHRoZSBzdGltdWx1cyB0byB0aGUgc3BlY2lmaWVkIGVsZW1lbnQuXG4gICAqIEBwYXJhbSBzdGltdWx1c1JlZiAtIFRoZSBlbGVtZW50IHRvIHdoaWNoIHRoZSBzdGltdWx1cyB3aWxsIGJlIGFwcGVuZGVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGxvYWRBbmRBcHBlbmRTdGltdWx1cyhzdGltdWx1c1JlZjogRWxlbWVudCkge1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLmhyZWYuc3Vic3RyaW5nKDAsIHRoaXMuaHJlZi5sYXN0SW5kZXhPZignLycpKTtcbiAgICBjb25zdCBzdGltdWx1cyA9IGF3YWl0IHF0aVRyYW5zZm9ybUl0ZW0oKVxuICAgICAgLmxvYWQodGhpcy5ocmVmKVxuICAgICAgLnRoZW4oYXBpID0+IGFwaS5wYXRoKHBhdGgpLmh0bWxkb2MoKSk7XG4gICAgaWYgKHN0aW11bHVzKSB7XG4gICAgICBjb25zdCBlbGVtZW50cyA9IHN0aW11bHVzLnF1ZXJ5U2VsZWN0b3JBbGwoJ3F0aS1zdGltdWx1cy1ib2R5LCBxdGktc3R5bGVzaGVldCcpO1xuICAgICAgc3RpbXVsdXNSZWYuYXBwZW5kKC4uLmVsZW1lbnRzKTtcbiAgICB9XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWFzc2Vzc21lbnQtc3RpbXVsdXMtcmVmJzogUXRpQXNzZXNzbWVudFN0aW11bHVzUmVmO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgTGl0RWxlbWVudCwgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHdhdGNoIH0gZnJvbSAnLi4vLi4vLi4vLi4vZGVjb3JhdG9ycy93YXRjaCc7XG5cbmNvbnN0IEtFWUNPREUgPSB7XG4gIFNQQUNFOiAzMlxufTtcblxuLyoqXG4gKiBAc3VtbWFyeSBxdGktY2hvaWNlIGlzIHVzZWQgYnkgcXRpLXNpbXBsZS1jaG9pY2UsIHF0aS1pbmxpbmUtY2hvaWNlLCBxdGktaG90dGV4dCwgcXRpLWhvdHNwb3QtY2hvaWNlLlxuICpcbiAqIEBzaW5jZSAxLjBcbiAqIEBzdGF0dXMgc3RhYmxlXG4gKlxuICogQGV2ZW50IHF0aS1yZWdpc3Rlci1jaG9pY2UgLSByZWdpc3RlciBpdHNlbHZlcyBvbiBhIHF0aS1jaG9pY2UtaW50ZXJhY3Rpb24gZWxlbWVudC5cbiAqIEBldmVudCBxdGktbG9vc2UtY2hvaWNlIC0gZGUtcmVnaXN0ZXIgaXRzZWx2ZXMgb24gYSBxdGktY2hvaWNlLWludGVyYWN0aW9uIGVsZW1lbnQuXG4gKiBAZXZlbnQgcXRpLWNob2ljZS1lbGVtZW50LXNlbGVjdGVkIC0gRW1pdHRlZCB3aGVuIHRoZSBjaG9pY2UgaXMgc2VsZWN0ZWQuXG4gKlxuICogQHNsb3QgLSBUaGUgY2hvaWNlcyBzbG90IGVsZW1lbnRcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFF0aUNob2ljZSBleHRlbmRzIExpdEVsZW1lbnQge1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgaWRlbnRpZmllcjogc3RyaW5nO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IE51bWJlciwgcmVmbGVjdDogdHJ1ZSB9KSB0YWJpbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkID0gMDtcblxuICBAcHJvcGVydHkoe1xuICAgIHJlZmxlY3Q6IHRydWUsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgICBhdHRyaWJ1dGU6ICdhcmlhLWRpc2FibGVkJyxcbiAgICBjb252ZXJ0ZXI6IHtcbiAgICAgIHRvQXR0cmlidXRlOiB2YWx1ZSA9PiB2YWx1ZVxuICAgIH1cbiAgfSlcbiAgZGlzYWJsZWQgPSBmYWxzZTtcblxuICBAcHJvcGVydHkoe1xuICAgIHJlZmxlY3Q6IHRydWUsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgICBhdHRyaWJ1dGU6ICdhcmlhLXJlYWRvbmx5JyxcbiAgICBjb252ZXJ0ZXI6IHtcbiAgICAgIHRvQXR0cmlidXRlOiB2YWx1ZSA9PiB2YWx1ZVxuICAgIH1cbiAgfSlcbiAgcmVhZG9ubHkgPSBmYWxzZTtcblxuICBAcHJvcGVydHkoe1xuICAgIHJlZmxlY3Q6IHRydWUsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgICBhdHRyaWJ1dGU6ICdhcmlhLWNoZWNrZWQnLFxuICAgIGNvbnZlcnRlcjoge1xuICAgICAgdG9BdHRyaWJ1dGU6IHZhbHVlID0+IHZhbHVlXG4gICAgfVxuICB9KVxuICBjaGVja2VkID0gZmFsc2U7XG5cbiAgQHdhdGNoKCdkaXNhYmxlZCcsIHsgd2FpdFVudGlsRmlyc3RVcGRhdGU6IHRydWUgfSlcbiAgaGFuZGxlRGlzYWJsZWRDaGFuZ2UoXzogYm9vbGVhbiwgZGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMudGFiaW5kZXggPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmJsdXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50YWJJbmRleCA9IDA7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLl9vbktleVVwKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fb25DbGljayk7XG5cbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3F0aS1yZWdpc3Rlci1jaG9pY2UnLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICBjb21wb3NlZDogdHJ1ZVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX29uS2V5VXApO1xuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkNsaWNrKTtcblxuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBDdXN0b21FdmVudCgncXRpLWxvb3NlLWNob2ljZScsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbXBvc2VkOiB0cnVlXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgcmVzZXQoKSB7XG4gICAgdGhpcy5jaGVja2VkID0gZmFsc2U7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25LZXlVcChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmIChldmVudC5hbHRLZXkpIHJldHVybjtcblxuICAgIHN3aXRjaCAoZXZlbnQua2V5Q29kZSkge1xuICAgICAgY2FzZSBLRVlDT0RFLlNQQUNFOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLl90b2dnbGVDaGVja2VkKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX29uQ2xpY2soKSB7XG4gICAgdGhpcy5fdG9nZ2xlQ2hlY2tlZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdG9nZ2xlQ2hlY2tlZCgpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSByZXR1cm47XG4gICAgdGhpcy5jaGVja2VkID0gIXRoaXMuY2hlY2tlZDtcblxuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBDdXN0b21FdmVudCgncXRpLWNob2ljZS1lbGVtZW50LXNlbGVjdGVkJywge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWUsXG4gICAgICAgIGRldGFpbDogeyBpZGVudGlmaWVyOiB0aGlzLmlkZW50aWZpZXIsIGNoZWNrZWQ6IHRoaXMuY2hlY2tlZCB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICB2YWxpZGF0ZUFsbFByb3BzKCkge1xuICAgIGlmICghdGhpcy5nZXRBdHRyaWJ1dGUoJ2lkZW50aWZpZXInKSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIGlmICghdGhpcy52YWxpZGF0ZUFsbFByb3BzKCkpIHtcbiAgICAgIGNvbnNvbGUud2FybihgSW52YWxpZCBwcm9wcyBmb3IgJHt0aGlzLm91dGVySFRNTH1gLCBgbWlzc2luZyBpZGVudGlmaWVyYCk7XG4gICAgfVxuICAgIHJldHVybiBodG1sYCA8c2xvdD48L3Nsb3Q+IGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWNob2ljZSc6IFF0aUNob2ljZTtcbiAgfVxufVxuIiwgImltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBodG1sLCBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9xdGktaXRlbS1ib2R5LnN0eWxlcyc7XG5pbXBvcnQgdHlwZSB7IENTU1Jlc3VsdEdyb3VwIH0gZnJvbSAnbGl0JztcblxuLyoqXG4gKiBAc3VtbWFyeSBUaGUgcXRpLWl0ZW0tYm9keSBub2RlIGNvbnRhaW5zIHRoZSB0ZXh0LCBncmFwaGljcywgbWVkaWEgb2JqZWN0cyBhbmQgaW50ZXJhY3Rpb25zIHRoYXQgZGVzY3JpYmUgdGhlIGl0ZW0ncyBjb250ZW50IGFuZCBpbmZvcm1hdGlvbiBhYm91dCBob3cgaXQgaXMgc3RydWN0dXJlZC5cbiAqIEBkb2N1bWVudGF0aW9uIGh0dHBzOi8vd3d3Lmltc2dsb2JhbC5vcmcvc3BlYy9xdGkvdjNwMC9pbXBsI2guc3BocG82bHU2enFpXG4gKiBAc3RhdHVzIHN0YWJsZVxuICogQHNpbmNlIDQuMFxuICpcbiAqIEBzbG90IC0gaXRlbSBib2R5IGNvbnRlbnQuXG4gKiBAc2xvdCBxdGktcnVicmljLWJsb2NrIC0gdGhlIHF0aSBydWJyaWMgYmxvY2sgaXMgcGxhY2VkIGFib3ZlIHRoZSBpdGVtXG4gKlxuICovXG5AY3VzdG9tRWxlbWVudCgncXRpLWl0ZW0tYm9keScpXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBRdGlJdGVtQm9keSBleHRlbmRzIExpdEVsZW1lbnQge1xuICBzdGF0aWMgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IHN0eWxlcztcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPHNsb3QgbmFtZT1cInF0aS1ydWJyaWMtYmxvY2tcIj48L3Nsb3Q+PHNsb3Q+PC9zbG90PmA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWl0ZW0tYm9keSc6IFF0aUl0ZW1Cb2R5O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzIH0gZnJvbSAnbGl0JztcblxuZXhwb3J0IGRlZmF1bHQgY3NzYFxuICA6aG9zdCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbmA7XG4iLCAiaW1wb3J0IHsgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuQGN1c3RvbUVsZW1lbnQoJ3F0aS1wcm9tcHQnKVxuZXhwb3J0IGNsYXNzIFF0aVByb21wdCBleHRlbmRzIExpdEVsZW1lbnQge1xuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPHNsb3Q+PC9zbG90PmA7XG4gIH1cblxuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICAvLyBpZiBwcm9tcHRzIGFyZSBpbiBpbnRlcmFjdGlvbnMgdGhleSBzaG91bGQgaGF2ZSBhIHNsb3QsIHNvIHRoZSBwcm9tcHQgaGFzIHRvIGdvIHRoZXJlXG4gICAgLy8gaWYgcHJvbXB0IGlzIGluIHRoZSBib2R5LCB0aGVuIGp1c3QgZGlzcGxheSB0aGUgcHJvbXB0IHRoZXJlLlxuICAgIC8vIEEgYmV0dGVyIGNoZWNrIHdvdWxkIGJlIHRoZSBsYXR0ZXIsIGJ1dCBub3QgY2FuJ3QgZ2V0IHRocm91Z2ggdGhlIHNoYWRvd3Jvb3QgdG8gZmluZCB0aGUgc2xvdFxuICAgIGNvbnN0IGluSW50ZXJhY3Rpb24gPSB0aGlzLnBhcmVudEVsZW1lbnQudGFnTmFtZS5lbmRzV2l0aCgnSU5URVJBQ1RJT04nKTtcbiAgICBpbkludGVyYWN0aW9uICYmIHRoaXMuc2V0QXR0cmlidXRlKCdzbG90JywgJ3Byb21wdCcpO1xuICAgIC8vIGNvbnN0IHByb21wdFNsb3QgPSB0aGlzLnBhcmVudEVsZW1lbnQuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFwiW25hbWU9J3Byb21wdCddXCIpO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1wcm9tcHQnOiBRdGlQcm9tcHQ7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50LCBQcm9wZXJ0eVZhbHVlTWFwIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktc3R5bGVzaGVldCcpXG5leHBvcnQgY2xhc3MgUXRpU3R5bGVzaGVldCBleHRlbmRzIExpdEVsZW1lbnQge1xuICBwcml2YXRlIHN0eWxlTGluazogSFRNTFN0eWxlRWxlbWVudCB8IEhUTUxMaW5rRWxlbWVudDtcblxuICAvLyBwcm90ZWN0ZWQgY3JlYXRlUmVuZGVyUm9vdCgpOiBIVE1MRWxlbWVudCB8IERvY3VtZW50RnJhZ21lbnQge1xuICAvLyAgIHJldHVybiB0aGlzO1xuICAvLyB9XG5cbiAgcHJvdGVjdGVkIGZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVNYXA8YW55PiB8IE1hcDxQcm9wZXJ0eUtleSwgdW5rbm93bj4pOiB2b2lkIHtcbiAgICBzdXBlci5maXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIGNvbnN0IGl0ZW0gPSB0aGlzO1xuICAgIGNvbnN0IGxpbmsgPSB0aGlzLmdldEF0dHJpYnV0ZSgnaHJlZicpO1xuXG4gICAgaWYgKGxpbmsgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0eWxlcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcbiAgICAgIHN0eWxlcy5yZWwgPSAnc3R5bGVzaGVldCc7XG4gICAgICBzdHlsZXMudHlwZSA9ICd0ZXh0L2Nzcyc7XG4gICAgICBzdHlsZXMubWVkaWEgPSAnc2NyZWVuJztcbiAgICAgIHN0eWxlcy5ocmVmID0gbGluaztcbiAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQoc3R5bGVzKTtcbiAgICAgIHRoaXMuc3R5bGVMaW5rID0gc3R5bGVzO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRleHRDb250ZW50ICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdHlsZXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgICAgc3R5bGVzLm1lZGlhID0gJ3NjcmVlbic7XG4gICAgICBzdHlsZXMudGV4dENvbnRlbnQgPSB0aGlzLnRleHRDb250ZW50O1xuICAgICAgaXRlbS5hcHBlbmRDaGlsZChzdHlsZXMpO1xuICAgICAgdGhpcy5zdHlsZUxpbmsgPSBzdHlsZXM7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgaWYgKHRoaXMuc3R5bGVMaW5rKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnN0eWxlTGluay5yZW1vdmUoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdjb3VsZCBub3QgcmVtb3ZlIHN0eWxlc2hlZXQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXN0eWxlc2hlZXQnOiBRdGlTdHlsZXNoZWV0O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY29uc3VtZSB9IGZyb20gJ0BsaXQvY29udGV4dCc7XG5pbXBvcnQgeyBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgQmFzZVR5cGUsIENhcmRpbmFsaXR5IH0gZnJvbSAnLi4vLi4vaW50ZXJuYWwvZXhwcmVzc2lvbi1yZXN1bHQnO1xuaW1wb3J0IHsgT3V0Y29tZVZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IEl0ZW1Db250ZXh0LCBpdGVtQ29udGV4dCB9IGZyb20gJy4uLy4uL3F0aS1hc3Nlc3NtZW50LWl0ZW0vcXRpLWFzc2Vzc21lbnQtaXRlbS5jb250ZXh0JztcbmltcG9ydCB7IFF0aVZhcmlhYmxlRGVjbGFyYXRpb24gfSBmcm9tICcuLi9xdGktdmFyaWFibGUtZGVjbGFyYXRpb24nO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLW91dGNvbWUtZGVjbGFyYXRpb24nKVxuZXhwb3J0IGNsYXNzIFF0aU91dGNvbWVEZWNsYXJhdGlvbiBleHRlbmRzIFF0aVZhcmlhYmxlRGVjbGFyYXRpb24ge1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2Jhc2UtdHlwZScgfSkgYmFzZVR5cGU6IEJhc2VUeXBlO1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2V4dGVybmFsLXNjb3JlZCcgfSkgZXh0ZXJuYWxTY29yZWQ6IFN0cmluZztcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIGlkZW50aWZpZXI6IHN0cmluZztcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIGNhcmRpbmFsaXR5OiBDYXJkaW5hbGl0eTtcblxuICBAY29uc3VtZSh7IGNvbnRleHQ6IGl0ZW1Db250ZXh0LCBzdWJzY3JpYmU6IHRydWUgfSlcbiAgQHN0YXRlKClcbiAgcHVibGljIGl0ZW1Db250ZXh0PzogSXRlbUNvbnRleHQ7XG5cbiAgc3RhdGljIHN0eWxlcyA9IFtcbiAgICBjc3NgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgYFxuICBdO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaXRlbUNvbnRleHQ/LnZhcmlhYmxlcy5maW5kKHYgPT4gdi5pZGVudGlmaWVyID09PSB0aGlzLmlkZW50aWZpZXIpPy52YWx1ZTtcbiAgICByZXR1cm4gaHRtbGAke0pTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCAyKX1gO1xuICB9XG5cbiAgZ2V0IGludGVycG9sYXRpb25UYWJsZSgpOiBNYXA8bnVtYmVyLCBudW1iZXI+IHwgbnVsbCB7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3F0aS1pbnRlcnBvbGF0aW9uLXRhYmxlJyk7XG4gICAgaWYgKHRhYmxlKSB7XG4gICAgICBjb25zdCBlbnRyaWVzID0gbmV3IE1hcDxudW1iZXIsIG51bWJlcj4oKTtcbiAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGFibGUucXVlcnlTZWxlY3RvckFsbCgncXRpLWludGVycG9sYXRpb24tdGFibGUtZW50cnknKSkge1xuICAgICAgICBpZiAoIWVudHJ5LmdldEF0dHJpYnV0ZSgnc291cmNlLXZhbHVlJykgJiYgZW50cnkuZ2V0QXR0cmlidXRlKCd0YXJnZXQtdmFsdWUnKSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ3NvdXJjZS12YWx1ZSBvciB0YXJnZXQtdmFsdWUgaXMgbWlzc2luZyBpbiBxdGktaW50ZXJwb2xhdGlvbi10YWJsZS1lbnRyeScpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNvdXJjZVZhbHVlID0gcGFyc2VJbnQoZW50cnkuZ2V0QXR0cmlidXRlKCdzb3VyY2UtdmFsdWUnKSk7XG4gICAgICAgIGNvbnN0IHRhcmdldFZhbHVlID0gcGFyc2VJbnQoZW50cnkuZ2V0QXR0cmlidXRlKCd0YXJnZXQtdmFsdWUnKSk7XG4gICAgICAgIGlmIChpc05hTihzb3VyY2VWYWx1ZSkgfHwgaXNOYU4odGFyZ2V0VmFsdWUpKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignc291cmNlLXZhbHVlIG9yIHRhcmdldC12YWx1ZSBpcyBub3QgYSBudW1iZXIgaW4gcXRpLWludGVycG9sYXRpb24tdGFibGUtZW50cnknKTtcbiAgICAgICAgfVxuICAgICAgICBlbnRyaWVzLnNldChzb3VyY2VWYWx1ZSwgdGFyZ2V0VmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGVudHJpZXM7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cbiAgICBjb25zdCBvdXRjb21lVmFyaWFibGU6IE91dGNvbWVWYXJpYWJsZSA9IHtcbiAgICAgIGlkZW50aWZpZXI6IHRoaXMuaWRlbnRpZmllcixcbiAgICAgIGNhcmRpbmFsaXR5OiB0aGlzLmNhcmRpbmFsaXR5LFxuICAgICAgYmFzZVR5cGU6IHRoaXMuYmFzZVR5cGUsXG4gICAgICB0eXBlOiAnb3V0Y29tZScsXG4gICAgICB2YWx1ZTogbnVsbCxcbiAgICAgIGludGVycG9sYXRpb25UYWJsZTogdGhpcy5pbnRlcnBvbGF0aW9uVGFibGVcbiAgICB9O1xuICAgIG91dGNvbWVWYXJpYWJsZS52YWx1ZSA9IHRoaXMuZGVmYXVsdFZhbHVlcyhvdXRjb21lVmFyaWFibGUpO1xuXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdxdGktcmVnaXN0ZXItdmFyaWFibGUnLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICBkZXRhaWw6IHsgdmFyaWFibGU6IG91dGNvbWVWYXJpYWJsZSB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLW91dGNvbWUtZGVjbGFyYXRpb24nOiBRdGlPdXRjb21lRGVjbGFyYXRpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBodG1sLCBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBWYXJpYWJsZURlY2xhcmF0aW9uIH0gZnJvbSAnLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS12YXJpYWJsZWRlY2xhcmF0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlWYXJpYWJsZURlY2xhcmF0aW9uIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdD48L3Nsb3Q+YDtcbiAgfVxuXG4gIHByb3RlY3RlZCBkZWZhdWx0VmFsdWVzKHZhcmlhYmxlOiBWYXJpYWJsZURlY2xhcmF0aW9uPHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbD4pIHtcbiAgICBjb25zdCBodG1sVmFsdWVzID0gQXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoJ3F0aS1kZWZhdWx0LXZhbHVlID4gcXRpLXZhbHVlJykpO1xuXG4gICAgaWYgKGh0bWxWYWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBkZWZhdWx0VmFsdWVzID0gaHRtbFZhbHVlcy5tYXAobiA9PiBuLmlubmVySFRNTCk7XG4gICAgaWYgKGRlZmF1bHRWYWx1ZXMubGVuZ3RoID4gMSB8fCB2YXJpYWJsZS5jYXJkaW5hbGl0eSA9PT0gJ211bHRpcGxlJyB8fCB2YXJpYWJsZS5jYXJkaW5hbGl0eSA9PT0gJ29yZGVyZWQnKSB7XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlcztcbiAgICB9XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZXNbMF07XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXZhcmlhYmxlZGVjbGFyYXRpb24nOiBRdGlWYXJpYWJsZURlY2xhcmF0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY29uc3VtZSB9IGZyb20gJ0BsaXQvY29udGV4dCc7XG5pbXBvcnQgeyBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgQmFzZVR5cGUsIENhcmRpbmFsaXR5IH0gZnJvbSAnLi4vLi4vaW50ZXJuYWwvZXhwcmVzc2lvbi1yZXN1bHQnO1xuaW1wb3J0IHsgUmVzcG9uc2VWYXJpYWJsZSB9IGZyb20gJy4uLy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBJdGVtQ29udGV4dCwgaXRlbUNvbnRleHQgfSBmcm9tICcuLi8uLi9xdGktYXNzZXNzbWVudC1pdGVtL3F0aS1hc3Nlc3NtZW50LWl0ZW0uY29udGV4dCc7XG5pbXBvcnQgeyBRdGlNYXBwaW5nIH0gZnJvbSAnLi4vLi4vcXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcvcXRpLWV4cHJlc3Npb24vcXRpLW1hcHBpbmcvcXRpLW1hcHBpbmcnO1xuaW1wb3J0IHsgUXRpVmFyaWFibGVEZWNsYXJhdGlvbiB9IGZyb20gJy4uL3F0aS12YXJpYWJsZS1kZWNsYXJhdGlvbic7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktcmVzcG9uc2UtZGVjbGFyYXRpb24nKVxuZXhwb3J0IGNsYXNzIFF0aVJlc3BvbnNlRGVjbGFyYXRpb24gZXh0ZW5kcyBRdGlWYXJpYWJsZURlY2xhcmF0aW9uIHtcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdiYXNlLXR5cGUnIH0pIGJhc2VUeXBlOiBCYXNlVHlwZTtcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgaWRlbnRpZmllcjogc3RyaW5nO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KSBjYXJkaW5hbGl0eTogQ2FyZGluYWxpdHk7XG5cbiAgQGNvbnN1bWUoeyBjb250ZXh0OiBpdGVtQ29udGV4dCwgc3Vic2NyaWJlOiB0cnVlIH0pXG4gIEBzdGF0ZSgpXG4gIHB1YmxpYyBpdGVtQ29udGV4dD86IEl0ZW1Db250ZXh0O1xuXG4gIHN0YXRpYyBzdHlsZXMgPSBbXG4gICAgY3NzYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgIGBcbiAgXTtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLml0ZW1Db250ZXh0Py52YXJpYWJsZXMuZmluZCh2ID0+IHYuaWRlbnRpZmllciA9PT0gdGhpcy5pZGVudGlmaWVyKT8udmFsdWU7XG4gICAgcmV0dXJuIGh0bWxgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSwgbnVsbCwgMil9YDtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG4gICAgY29uc3QgcmVzcG9uc2VWYXJpYWJsZTogUmVzcG9uc2VWYXJpYWJsZSA9IHtcbiAgICAgIGJhc2VUeXBlOiB0aGlzLmJhc2VUeXBlLFxuICAgICAgaWRlbnRpZmllcjogdGhpcy5pZGVudGlmaWVyLFxuICAgICAgY29ycmVjdFJlc3BvbnNlOiB0aGlzLmNvcnJlY3RSZXNwb25zZSxcbiAgICAgIGNhcmRpbmFsaXR5OiB0aGlzLmNhcmRpbmFsaXR5IHx8ICdzaW5nbGUnLFxuICAgICAgbWFwcGluZzogdGhpcy5tYXBwaW5nLFxuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICB0eXBlOiAncmVzcG9uc2UnLFxuICAgICAgY2FuZGlkYXRlUmVzcG9uc2U6IG51bGxcbiAgICB9O1xuICAgIHJlc3BvbnNlVmFyaWFibGUudmFsdWUgPSB0aGlzLmRlZmF1bHRWYWx1ZXMocmVzcG9uc2VWYXJpYWJsZSk7XG5cbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3F0aS1yZWdpc3Rlci12YXJpYWJsZScsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWUsXG4gICAgICAgIGRldGFpbDogeyB2YXJpYWJsZTogcmVzcG9uc2VWYXJpYWJsZSB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldCBjb3JyZWN0UmVzcG9uc2UoKTogc3RyaW5nIHwgc3RyaW5nW10ge1xuICAgIGxldCByZXN1bHQ6IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIGNvbnN0IGNvcnJlY3RSZXNwb25zZSA9IHRoaXMucXVlcnlTZWxlY3RvcigncXRpLWNvcnJlY3QtcmVzcG9uc2UnKTtcbiAgICBpZiAoY29ycmVjdFJlc3BvbnNlKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSBjb3JyZWN0UmVzcG9uc2UucXVlcnlTZWxlY3RvckFsbCgncXRpLXZhbHVlJyk7XG4gICAgICBpZiAodGhpcy5jYXJkaW5hbGl0eSA9PT0gJ3NpbmdsZScgJiYgdmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVzdWx0ID0gdmFsdWVzWzBdLnRleHRDb250ZW50O1xuICAgICAgICB2YWx1ZXNbMF0ucmVtb3ZlKCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2FyZGluYWxpdHkgIT09ICdzaW5nbGUnKSB7XG4gICAgICAgIHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlc1tpXS50ZXh0Q29udGVudCk7XG4gICAgICAgICAgdmFsdWVzW2ldLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIGdldCBtYXBwaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3F0aS1tYXBwaW5nJykgYXMgUXRpTWFwcGluZztcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktcmVzcG9uc2UtZGVjbGFyYXRpb24nOiBRdGlSZXNwb25zZURlY2xhcmF0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWNvbXBhbmlvbi1tYXRlcmlhbHMtaW5mbycpXG5leHBvcnQgY2xhc3MgUXRpQ29tcGFuaW9uTWF0ZXJpYWxzSW5mbyBleHRlbmRzIExpdEVsZW1lbnQge1xuICAvLyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gY3NzYFxuICAvLyAgIHNsb3Qge1xuICAvLyAgICAgZGlzcGxheTogaGlkZGVuO1xuICAvLyAgIH1cbiAgLy8gYDtcbiAgLy8gb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAvLyAgIHJldHVybiBodG1sYCA8c2xvdD48L3Nsb3Q+IGA7XG4gIC8vIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWNvbXBhbmlvbi1tYXRlcmlhbHMtaW5mbyc6IFF0aUNvbXBhbmlvbk1hdGVyaWFsc0luZm87XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50LCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktY29udGVudC1ib2R5JylcbmV4cG9ydCBjbGFzcyBRdGlDb250ZW50Qm9keSBleHRlbmRzIExpdEVsZW1lbnQge1xuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPHNsb3Q+PC9zbG90PmA7XG4gIH1cbn1cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1jb250ZW50LWJvZHknOiBRdGlDb250ZW50Qm9keTtcbiAgfVxufVxuIiwgImltcG9ydCB7IExpdEVsZW1lbnQsIGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHdhdGNoIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9ycy93YXRjaCc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktcnVicmljLWJsb2NrJylcbmV4cG9ydCBjbGFzcyBRdGlSdWJyaWNCbG9jayBleHRlbmRzIExpdEVsZW1lbnQge1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgb3ZlcnJpZGUgaWQ7IC8vID1cInF0aUFzcGVjdEluaG91ZFJ1YnJpY0Jsb2NrXCJcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgdXNlOiAnaW5zdHJ1Y3Rpb25zJyB8ICdzY29yaW5nJyB8ICduYXZpZ2F0aW9uJzsgLy8gID0gXCJzY29yaW5nXCJcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgdmlldzogJ2F1dGhvcicgfCAnY2FuZGlkYXRlJyB8ICdwcm9jdG9yJyB8ICdzY29yZXInIHwgJ3Rlc3RDb25zdHJ1Y3RvcicgfCAndHV0b3InO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnY2xhc3MnIH0pIGNsYXNzTmFtZXM7XG4gIEB3YXRjaCgnY2xhc3NOYW1lcycsIHsgd2FpdFVudGlsRmlyc3RVcGRhdGU6IHRydWUgfSlcbiAgaGFuZGxlY2xhc3NOYW1lc0NoYW5nZShvbGQsIGRpc2FibGVkOiBib29sZWFuKSB7XG4gICAgY29uc3QgY2xhc3NOYW1lcyA9IHRoaXMuY2xhc3NOYW1lcy5zcGxpdCgnICcpO1xuICAgIGNsYXNzTmFtZXMuZm9yRWFjaCgoY2xhc3NOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIHN3aXRjaCAoY2xhc3NOYW1lKSB7XG4gICAgICAgIGNhc2UgJ3F0aS1ydWJyaWMtZGlzY3JldGlvbmFyeS1wbGFjZW1lbnQnOlxuICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCdzbG90JywgJ3F0aS1ydWJyaWMtYmxvY2snKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncXRpLXJ1YnJpYy1pbmxpbmUnOlxuICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCdzbG90JywgJycpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IGNzc2BcbiAgICA6aG9zdCB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gIGA7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICAvLyBieSBkZWZhdWx0IHB1dCB0aGlzIGluIGEgc2xvdCBpbiB0aGUgaXRlbS1ib2R5XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ3Nsb3QnLCAncXRpLXJ1YnJpYy1ibG9jaycpO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1ydWJyaWMtYmxvY2snOiBRdGlSdWJyaWNCbG9jaztcbiAgfVxufVxuIiwgImltcG9ydCB7IFByb3BlcnR5VmFsdWVNYXAsIGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgUXRpRmVlZGJhY2sgfSBmcm9tICcuLi9xdGktZmVlZGJhY2snO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWZlZWRiYWNrLWJsb2NrJylcbmV4cG9ydCBjbGFzcyBRdGlGZWVkYmFja0Jsb2NrIGV4dGVuZHMgUXRpRmVlZGJhY2sge1xuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gY3NzYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgICAub24ge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICAgIC5vZmYge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIGA7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYCA8c2xvdCBwYXJ0PVwiZmVlZGJhY2tcIiBjbGFzcz1cImZlZWRiYWNrICR7dGhpcy5zaG93U3RhdHVzfVwiPjwvc2xvdD4gYDtcbiAgfVxuXG4gIHByb3RlY3RlZCBmaXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlTWFwPGFueT4gfCBNYXA8UHJvcGVydHlLZXksIHVua25vd24+KTogdm9pZCB7XG4gICAgdGhpcy5jaGVja1Nob3dGZWVkYmFjayh0aGlzLm91dGNvbWVJZGVudGlmaWVyKTtcbiAgfVxufVxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWZlZWRiYWNrLWJsb2NrJzogUXRpRmVlZGJhY2tCbG9jaztcbiAgfVxufVxuIiwgImltcG9ydCB7IExpdEVsZW1lbnQsIFByb3BlcnR5VmFsdWVNYXAgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBRdGlBc3Nlc3NtZW50SXRlbSB9IGZyb20gJy4uL3F0aS1hc3Nlc3NtZW50LWl0ZW0vcXRpLWFzc2Vzc21lbnQtaXRlbSc7XG5pbXBvcnQgeyBJc051bGxPclVuZGVmaW5lZCB9IGZyb20gJy4uL2ludGVybmFsL3V0aWxzJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFF0aUZlZWRiYWNrIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnc2hvdy1oaWRlJyB9KVxuICBwcm90ZWN0ZWQgc2hvd0hpZGU6IHN0cmluZztcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ291dGNvbWUtaWRlbnRpZmllcicgfSlcbiAgcHVibGljIG91dGNvbWVJZGVudGlmaWVyOiBzdHJpbmc7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pXG4gIHByb3RlY3RlZCBpZGVudGlmaWVyOiBzdHJpbmc7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6IGZhbHNlIH0pXG4gIHB1YmxpYyBzaG93U3RhdHVzOiBzdHJpbmc7XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50PFF0aUZlZWRiYWNrPigncXRpLXJlZ2lzdGVyLWZlZWRiYWNrJywge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgICAgZGV0YWlsOiB0aGlzXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgY2hlY2tTaG93RmVlZGJhY2sob3V0Y29tZUlkZW50aWZpZXI6IHN0cmluZykgeyAgICBcbiAgICBjb25zdCBvdXRjb21lVmFyaWFibGUgPSAodGhpcy5jbG9zZXN0KCdxdGktYXNzZXNzbWVudC1pdGVtJykgYXMgUXRpQXNzZXNzbWVudEl0ZW0pLmdldE91dGNvbWUob3V0Y29tZUlkZW50aWZpZXIpO1xuXG4gICAgaWYgKHRoaXMub3V0Y29tZUlkZW50aWZpZXIgIT09IG91dGNvbWVJZGVudGlmaWVyIHx8ICFvdXRjb21lVmFyaWFibGUpIHJldHVybjtcbiAgICBsZXQgaXNGb3VuZCA9IGZhbHNlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KG91dGNvbWVWYXJpYWJsZS52YWx1ZSkpIHtcbiAgICAgIGlzRm91bmQgPSBvdXRjb21lVmFyaWFibGUudmFsdWUuaW5jbHVkZXModGhpcy5pZGVudGlmaWVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXNGb3VuZCA9XG4gICAgICAgICghSXNOdWxsT3JVbmRlZmluZWQodGhpcy5pZGVudGlmaWVyKSAmJlxuICAgICAgICAgICFJc051bGxPclVuZGVmaW5lZChvdXRjb21lVmFyaWFibGU/LnZhbHVlKSAmJlxuICAgICAgICAgIHRoaXMuaWRlbnRpZmllciA9PT0gb3V0Y29tZVZhcmlhYmxlLnZhbHVlKSB8fFxuICAgICAgICBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLnNob3dGZWVkYmFjayhpc0ZvdW5kKTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd0ZlZWRiYWNrKHZhbHVlOiBib29sZWFuKSB7ICAgIFxuICAgIHRoaXMuc2hvd1N0YXR1cyA9ICh2YWx1ZSAmJiB0aGlzLnNob3dIaWRlID09PSAnc2hvdycpIHx8ICghdmFsdWUgJiYgdGhpcy5zaG93SGlkZSA9PT0gJ2hpZGUnKSA/ICdvbicgOiAnb2ZmJzsgICAgXG4gIH1cbn1cbiIsICJleHBvcnQgY29uc3QgZGVjaW1hbFNlcGFyYXRvciA9ICgpID0+IHtcbiAgcmV0dXJuIG5ldyBJbnRsLk51bWJlckZvcm1hdCgpLmZvcm1hdCgwLjEpLnJlcGxhY2UoL1xcZC9nLCAnJyk7XG59O1xuXG5leHBvcnQgY29uc3QgY29udmVydE51bWJlclRvVW5pdmVyYWxGb3JtYXQgPSAobnVtYmVyOiBudW1iZXIgfCBzdHJpbmcpID0+IHtcbiAgLy8gY2hlY2sgaWYgdHlwZSBpcyBzdHJpbmdcbiAgaWYgKHR5cGVvZiBudW1iZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG51bWJlcjtcbiAgfVxuICBjb25zdCBkU2VwID0gZGVjaW1hbFNlcGFyYXRvcigpO1xuICBpZiAoZFNlcCA9PT0gJy4nKSB7XG4gICAgcmV0dXJuIG51bWJlci50b0xvY2FsZVN0cmluZygpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBudW1iZXIudG9TdHJpbmcoKS5yZXBsYWNlKCcuJywgJycpLnJlcGxhY2UoZFNlcCwgJy4nKTtcbiAgfVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIElzTnVsbE9yVW5kZWZpbmVkKHZhbHVlOiB1bmtub3duKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRG91YmxlU2xhc2hlcyhzdHI6IHN0cmluZykge1xuICBjb25zdCBzaW5nbGVGb3J3YXJkU2xhc2hlcyA9IHN0clxuICAgIC5yZXBsYWNlKC8oW146XVxcLylcXC8rL2csICckMScpXG4gICAgLnJlcGxhY2UoL1xcL1xcLy9nLCAnLycpXG4gICAgLnJlcGxhY2UoJ2h0dHA6LycsICdodHRwOi8vJylcbiAgICAucmVwbGFjZSgnaHR0cHM6LycsICdodHRwczovLycpO1xuICByZXR1cm4gc2luZ2xlRm9yd2FyZFNsYXNoZXM7XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBRdGlGZWVkYmFjayB9IGZyb20gJy4uL3F0aS1mZWVkYmFjayc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktZmVlZGJhY2staW5saW5lJylcbmV4cG9ydCBjbGFzcyBRdGlGZWVkYmFja0lubGluZSBleHRlbmRzIFF0aUZlZWRiYWNrIHtcbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IGNzc2BcbiAgICAub24ge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIH1cbiAgICAub2ZmIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICBgO1xuXG4gIG92ZXJyaWRlIHJlbmRlciA9ICgpID0+IGh0bWxgIDxzbG90IHBhcnQ9XCJmZWVkYmFja1wiIGNsYXNzPVwiJHt0aGlzLnNob3dTdGF0dXN9XCI+PC9zbG90PiBgO1xufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktZmVlZGJhY2staW5saW5lJzogUXRpRmVlZGJhY2tJbmxpbmU7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IFF0aUZlZWRiYWNrIH0gZnJvbSAnLi4vcXRpLWZlZWRiYWNrJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1tb2RhbC1mZWVkYmFjaycpXG5leHBvcnQgY2xhc3MgUXRpTW9kYWxGZWVkYmFjayBleHRlbmRzIFF0aUZlZWRiYWNrIHtcbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IGNzc2BcbiAgICAub24ge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIH1cbiAgICAub2ZmIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICBgO1xuXG4gIG92ZXJyaWRlIHJlbmRlciA9ICgpID0+IGh0bWxgIDxzbG90IHBhcnQ9XCJmZWVkYmFja1wiIGNsYXNzPVwiJHt0aGlzLnNob3dTdGF0dXN9XCI+PC9zbG90PiBgO1xufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktbW9kYWwtZmVlZGJhY2snOiBRdGlNb2RhbEZlZWRiYWNrO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGlmRGVmaW5lZCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL2lmLWRlZmluZWQuanMnO1xuaW1wb3J0IHsgSW50ZXJhY3Rpb24gfSBmcm9tICcuLi9pbnRlcm5hbC9pbnRlcmFjdGlvbi9pbnRlcmFjdGlvbic7XG5pbXBvcnQgeyByZWYsIGNyZWF0ZVJlZiB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3JlZi5qcyc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSwgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyB3YXRjaCB9IGZyb20gJy4uLy4uLy4uL2RlY29yYXRvcnMvd2F0Y2gnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWV4dGVuZGVkLXRleHQtaW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aUV4dGVuZGVkVGV4dEludGVyYWN0aW9uIGV4dGVuZHMgSW50ZXJhY3Rpb24ge1xuICAvLyBwdWJsaWMgc3RhdGljIHJvd0hlaWdodENsYXNzID0gW107XG5cbiAgdGV4dGFyZWFSZWYgPSBjcmVhdGVSZWY8SFRNTFRleHRBcmVhRWxlbWVudD4oKTtcblxuICAvKiogZXhwZWN0ZWQgbGVuZ3RoIGlzIG1hcHBlZCB0byB0aGUgcHJvcGVydHkgbWF4bGVuZ3RoIG9uIHRoZSB0ZXh0YXJlYSAqL1xuICBAcHJvcGVydHkoeyB0eXBlOiBOdW1iZXIsIGF0dHJpYnV0ZTogJ2V4cGVjdGVkLWxlbmd0aCcgfSkgZXhwZWN0ZWRMZW5ndGg6IG51bWJlcjtcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ3BhdHRlcm4tbWFzaycgfSkgcGF0dGVybk1hc2s6IHN0cmluZztcblxuICAvKiogdGV4dCBhcHBlYXJpbmcgaW4gdGhlIGV4dGVuZGVkLXRleHQtbnRlcmFjdGlvbiBpZiBpdCBpcyBlbXB0eSAqL1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ3BsYWNlaG9sZGVyLXRleHQnIH0pIHBsYWNlaG9sZGVyVGV4dDogc3RyaW5nO1xuXG4gIEBzdGF0ZSgpXG4gIHByaXZhdGUgX3ZhbHVlID0gJyc7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdjbGFzcycgfSkgY2xhc3NOYW1lcztcbiAgQHdhdGNoKCdjbGFzc05hbWVzJywgeyB3YWl0VW50aWxGaXJzdFVwZGF0ZTogdHJ1ZSB9KVxuICBoYW5kbGVjbGFzc05hbWVzQ2hhbmdlKG9sZCwgZGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBjbGFzc05hbWVzID0gdGhpcy5jbGFzc05hbWVzLnNwbGl0KCcgJyk7XG4gICAgY2xhc3NOYW1lcy5mb3JFYWNoKChjbGFzc05hbWU6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKGNsYXNzTmFtZS5zdGFydHNXaXRoKCdxdGktaGVpZ2h0LWxpbmVzJykpIHtcbiAgICAgICAgY29uc3QgbnJSb3dzID0gY2xhc3NOYW1lLnJlcGxhY2UoJ3F0aS1oZWlnaHQtbGluZXMtJywgJycpO1xuICAgICAgICBpZiAodGhpcy50ZXh0YXJlYVJlZikge1xuICAgICAgICAgIHRoaXMudGV4dGFyZWFSZWYudmFsdWUucm93cyA9IHBhcnNlSW50KG5yUm93cyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgcmVzcG9uc2UodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDogJyc7XG4gIH1cblxuICBwdWJsaWMgdmFsaWRhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlICE9PSAnJztcbiAgfVxuXG4gIHN0YXRpYyBvdmVycmlkZSBnZXQgc3R5bGVzKCkge1xuICAgIHJldHVybiBbXG4gICAgICBjc3NgXG4gICAgICAgIC8qIFBLOiBkaXNwbGF5IGhvc3QgYXMgYmxvY2ssIGVsc2UgZGVzaWduIHdpbGwgYmUgY29sbGFwc2VkICovXG4gICAgICAgIDpob3N0IHtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgfVxuICAgICAgICB0ZXh0YXJlYSB7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICB9XG4gICAgICBgXG4gICAgXTtcbiAgfVxuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdCBuYW1lPVwicHJvbXB0XCI+PC9zbG90XG4gICAgICA+PHRleHRhcmVhXG4gICAgICAgIHBhcnQ9XCJ0ZXh0YXJlYVwiXG4gICAgICAgICR7cmVmKHRoaXMudGV4dGFyZWFSZWYpfVxuICAgICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIlxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICBAa2V5ZG93bj1cIiR7ZXZlbnQgPT4gZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9XCJcbiAgICAgICAgQGtleXVwPVwiJHt0aGlzLnRleHRDaGFuZ2VkfVwiXG4gICAgICAgIEBjaGFuZ2U9XCIke3RoaXMudGV4dENoYW5nZWR9XCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCIke2lmRGVmaW5lZCh0aGlzLnBsYWNlaG9sZGVyVGV4dCA/IHRoaXMucGxhY2Vob2xkZXJUZXh0IDogdW5kZWZpbmVkKX1cIlxuICAgICAgICBtYXhsZW5ndGg9XCIke2lmRGVmaW5lZCh0aGlzLmV4cGVjdGVkTGVuZ3RoID8gdGhpcy5leHBlY3RlZExlbmd0aCA6IHVuZGVmaW5lZCl9XCJcbiAgICAgICAgcGF0dGVybj1cIiR7aWZEZWZpbmVkKHRoaXMucGF0dGVybk1hc2sgPyB0aGlzLnBhdHRlcm5NYXNrIDogdW5kZWZpbmVkKX1cIlxuICAgICAgICA/ZGlzYWJsZWQ9XCIke3RoaXMuZGlzYWJsZWR9XCJcbiAgICAgICAgP3JlYWRvbmx5PVwiJHt0aGlzLnJlYWRvbmx5fVwiXG4gICAgICAgIC52YWx1ZT0ke3RoaXMuX3ZhbHVlfVxuICAgICAgPjwvdGV4dGFyZWE+YDtcbiAgfVxuXG4gIHByb3RlY3RlZCB0ZXh0Q2hhbmdlZChldmVudDogRXZlbnQpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSByZXR1cm47XG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICB0aGlzLnNldEVtcHR5QXR0cmlidXRlKGlucHV0LnZhbHVlKTtcbiAgICBpZiAodGhpcy5fdmFsdWUgIT09IGlucHV0LnZhbHVlKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IGlucHV0LnZhbHVlO1xuICAgICAgdGhpcy5zYXZlUmVzcG9uc2UoaW5wdXQudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuX3ZhbHVlID0gJyc7XG4gIH1cblxuICBwcml2YXRlIHNldEVtcHR5QXR0cmlidXRlKHRleHQ6IHN0cmluZykge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKCdlbXB0eScsIHRleHQgPT09ICcnID8gJ3RydWUnIDogJ2ZhbHNlJyk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWV4dGVuZGVkLXRleHQtaW50ZXJhY3Rpb24nOiBRdGlFeHRlbmRlZFRleHRJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBJbnRlcmFjdGlvbiBleHRlbmRzIExpdEVsZW1lbnQge1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdyZXNwb25zZS1pZGVudGlmaWVyJyB9KSByZXNwb25zZUlkZW50aWZpZXI6IHN0cmluZyA9ICcnO1xuXG4gIC8qKiBkaXNhYmxlZCBzaG91bGQgYmUgZXhwb3NlZCB0byB0aGUgYXR0cmlidXRlcyBhbmQgYWNjZXNzaWJsZSBhcyBwcm9wZXJ0eSAqL1xuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlLCB0eXBlOiBCb29sZWFuIH0pIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgLyoqIHJlYWRvbmx5IHNob3VsZCBiZSBleHBvc2VkIHRvIHRoZSBhdHRyaWJ1dGVzIGFuZCBhY2Nlc3NpYmxlIGFzIHByb3BlcnR5ICovXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUsIHR5cGU6IEJvb2xlYW4gfSkgcmVhZG9ubHkgPSBmYWxzZTtcblxuICBhYnN0cmFjdCB2YWxpZGF0ZSgpOiBib29sZWFuO1xuICBhYnN0cmFjdCBzZXQgcmVzcG9uc2UodmFsOiBSZWFkb25seTxzdHJpbmcgfCBzdHJpbmdbXT4pO1xuICBzZXQgY29ycmVjdFJlc3BvbnNlKHZhbDogUmVhZG9ubHk8c3RyaW5nIHwgc3RyaW5nW10+KSB7XG4gICAgY29uc29sZS53YXJuKCdjb3JyZWN0UmVzcG9uc2UgaXMgbm90IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBDdXN0b21FdmVudCgncXRpLXJlZ2lzdGVyLWludGVyYWN0aW9uJywge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWVcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBzYXZlUmVzcG9uc2UodmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdxdGktaW50ZXJhY3Rpb24tcmVzcG9uc2UnLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgcmVzcG9uc2VJZGVudGlmaWVyOiB0aGlzLnJlc3BvbnNlSWRlbnRpZmllcixcbiAgICAgICAgICByZXNwb25zZTogQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBbLi4udmFsdWVdIDogdmFsdWVcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IGlmRGVmaW5lZCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL2lmLWRlZmluZWQuanMnO1xuaW1wb3J0IHsgY3JlYXRlUmVmIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvcmVmLmpzJztcbmltcG9ydCB7IHdhdGNoIH0gZnJvbSAnLi4vLi4vLi4vZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvbiB9IGZyb20gJy4uL2ludGVybmFsL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS10ZXh0LWVudHJ5LWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlUZXh0RW50cnlJbnRlcmFjdGlvbiBleHRlbmRzIEludGVyYWN0aW9uIHtcbiAgQHByb3BlcnR5KHsgdHlwZTogTnVtYmVyLCBhdHRyaWJ1dGU6ICdleHBlY3RlZC1sZW5ndGgnIH0pIGV4cGVjdGVkTGVuZ3RoOiBudW1iZXI7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdwYXR0ZXJuLW1hc2snIH0pIHBhdHRlcm5NYXNrOiBzdHJpbmc7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdwbGFjZWhvbGRlci10ZXh0JyB9KSBwbGFjZWhvbGRlclRleHQ6IHN0cmluZztcblxuICBAc3RhdGUoKVxuICBwcml2YXRlIF92YWx1ZSA9ICcnO1xuXG4gIEBzdGF0ZSgpXG4gIHByaXZhdGUgX2NvcnJlY3RWYWx1ZSA9ICcnO1xuXG4gIEBzdGF0ZSgpXG4gIHByaXZhdGUgX3NpemUgPSA1O1xuXG4gIGlucHV0UmVmID0gY3JlYXRlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KCk7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdjbGFzcycgfSkgY2xhc3NOYW1lcztcbiAgQHdhdGNoKCdjbGFzc05hbWVzJylcbiAgaGFuZGxlY2xhc3NOYW1lc0NoYW5nZShvbGQsIGNsYXNzZXM6IHN0cmluZykge1xuICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBjbGFzc2VzLnNwbGl0KCcgJyk7XG4gICAgY2xhc3NOYW1lcy5mb3JFYWNoKChjbGFzc05hbWU6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKGNsYXNzTmFtZS5zdGFydHNXaXRoKCdxdGktaW5wdXQtd2lkdGgnKSkge1xuICAgICAgICBjb25zdCBuclJvd3MgPSBjbGFzc05hbWUucmVwbGFjZSgncXRpLWlucHV0LXdpZHRoLScsICcnKTtcbiAgICAgICAgdGhpcy5fc2l6ZSA9IHBhcnNlSW50KG5yUm93cyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2V0IHJlc3BvbnNlKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6ICcnO1xuICB9XG5cbiAgcHVibGljIHZhbGlkYXRlKCkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZSAhPT0gJyc7XG4gIH1cblxuICBzdGF0aWMgb3ZlcnJpZGUgZ2V0IHN0eWxlcygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgY3NzYFxuICAgICAgICBbcGFydD0nY29ycmVjdCddIHtcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cbiAgICAgIGBcbiAgICBdO1xuICB9XG5cbiAgc2V0IGNvcnJlY3RSZXNwb25zZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fY29ycmVjdFZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgICAgICAgXG4gICAgICA8aW5wdXRcbiAgICAgICAgcGFydD1cImlucHV0XCJcbiAgICAgICAgc3BlbGxjaGVjaz1cImZhbHNlXCJcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgQGtleWRvd249XCIke2V2ZW50ID0+IGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfVwiXG4gICAgICAgIEBrZXl1cD1cIiR7dGhpcy50ZXh0Q2hhbmdlZH1cIlxuICAgICAgICBAY2hhbmdlPVwiJHt0aGlzLnRleHRDaGFuZ2VkfVwiXG4gICAgICAgIHR5cGU9XCIke3RoaXMucGF0dGVybk1hc2sgPT0gJ1swLTldKicgPyAnbnVtYmVyJyA6ICd0ZXh0J31cIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIiR7aWZEZWZpbmVkKHRoaXMucGxhY2Vob2xkZXJUZXh0ID8gdGhpcy5wbGFjZWhvbGRlclRleHQgOiB1bmRlZmluZWQpfVwiXG4gICAgICAgIC52YWx1ZT1cIiR7dGhpcy5fdmFsdWV9XCJcbiAgICAgICAgc2l6ZT1cIiR7dGhpcy5fc2l6ZX1cIlxuICAgICAgICBwYXR0ZXJuPVwiJHtpZkRlZmluZWQodGhpcy5wYXR0ZXJuTWFzayA/IHRoaXMucGF0dGVybk1hc2sgOiB1bmRlZmluZWQpfVwiXG4gICAgICAgID9kaXNhYmxlZD1cIiR7dGhpcy5kaXNhYmxlZH1cIlxuICAgICAgICA/cmVhZG9ubHk9XCIke3RoaXMucmVhZG9ubHl9XCJcbiAgICAgIC8+XG4gICAgICA8ZGl2IHBhcnQ9XCJjb3JyZWN0XCI+JHt0aGlzLl9jb3JyZWN0VmFsdWV9PC9kaXY+XG4gICAgYDtcbiAgfVxuICAvL1xuICAvLyBtYXhsZW5ndGg9XCIke2lmRGVmaW5lZCh0aGlzLmV4cGVjdGVkTGVuZ3RoID8gdGhpcy5leHBlY3RlZExlbmd0aCA6IHVuZGVmaW5lZCl9XCJcblxuICBwcm90ZWN0ZWQgdGV4dENoYW5nZWQoZXZlbnQ6IEV2ZW50KSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkgcmV0dXJuO1xuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgdGhpcy5zZXRFbXB0eUF0dHJpYnV0ZShpbnB1dC52YWx1ZSk7XG4gICAgaWYgKHRoaXMuX3ZhbHVlICE9PSBpbnB1dC52YWx1ZSkge1xuICAgICAgdGhpcy5fdmFsdWUgPSBpbnB1dC52YWx1ZTtcbiAgICAgIHRoaXMuc2F2ZVJlc3BvbnNlKGlucHV0LnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLl92YWx1ZSA9ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRFbXB0eUF0dHJpYnV0ZSh0ZXh0OiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgnZW1wdHknLCB0ZXh0ID09PSAnJyA/ICd0cnVlJyA6ICdmYWxzZScpO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS10ZXh0LWVudHJ5LWludGVyYWN0aW9uJzogUXRpVGV4dEVudHJ5SW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICIvLyBAd2F0Y2ggZGVjb3JhdG9yXG4vL1xuLy8gUnVucyB3aGVuIGFuIG9ic2VydmVkIHByb3BlcnR5IGNoYW5nZXMsIGUuZy4gQHByb3BlcnR5IG9yIEBzdGF0ZSwgYnV0IGJlZm9yZSB0aGUgY29tcG9uZW50IHVwZGF0ZXMuXG4vL1xuLy8gVG8gd2FpdCBmb3IgYW4gdXBkYXRlIHRvIGNvbXBsZXRlIGFmdGVyIGEgY2hhbmdlIG9jY3VycywgdXNlIGBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlYCBpbiB0aGUgaGFuZGxlci4gVG8gc3RhcnRcbi8vIHdhdGNoaW5nIGFmdGVyIHRoZSBpbml0aWFsIHVwZGF0ZS9yZW5kZXIsIHVzZSBgeyB3YWl0VW50aWxGaXJzdFVwZGF0ZTogdHJ1ZSB9YCBvciBgdGhpcy5oYXNVcGRhdGVkYCBpbiB0aGUgaGFuZGxlci5cbi8vXG4vLyBVc2FnZTpcbi8vXG4vLyAgQHdhdGNoKCdwcm9wTmFtZScpXG4vLyAgaGFuZGxlUHJvcENoYW5nZShvbGRWYWx1ZSwgbmV3VmFsdWUpIHtcbi8vICAgIC4uLlxuLy8gIH1cblxuaW1wb3J0IHR5cGUgeyBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcblxudHlwZSBVcGRhdGVIYW5kbGVyID0gKHByZXY/OiB1bmtub3duLCBuZXh0PzogdW5rbm93bikgPT4gdm9pZDtcblxudHlwZSBOb25VbmRlZmluZWQ8QT4gPSBBIGV4dGVuZHMgdW5kZWZpbmVkID8gbmV2ZXIgOiBBO1xuXG50eXBlIFVwZGF0ZUhhbmRsZXJGdW5jdGlvbktleXM8VCBleHRlbmRzIG9iamVjdD4gPSB7XG4gIFtLIGluIGtleW9mIFRdLT86IE5vblVuZGVmaW5lZDxUW0tdPiBleHRlbmRzIFVwZGF0ZUhhbmRsZXIgPyBLIDogbmV2ZXI7XG59W2tleW9mIFRdO1xuXG5pbnRlcmZhY2UgTGl2ZVF1ZXJ5T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBJZiB0cnVlLCB3aWxsIG9ubHkgc3RhcnQgd2F0Y2hpbmcgYWZ0ZXIgdGhlIGluaXRpYWwgdXBkYXRlL3JlbmRlclxuICAgKi9cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpdmVRdWVyeShxdWVyeVNlbGVjdG9yOiBzdHJpbmcsIG9wdGlvbnM/OiBMaXZlUXVlcnlPcHRpb25zKSB7XG4gIGxldCBvYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlcjtcbiAgY29uc3QgcmVzb2x2ZWRPcHRpb25zOiBSZXF1aXJlZDxMaXZlUXVlcnlPcHRpb25zPiA9IHtcbiAgICAuLi5vcHRpb25zXG4gIH07XG4gIHJldHVybiA8RWxlbUNsYXNzIGV4dGVuZHMgTGl0RWxlbWVudD4oXG4gICAgcHJvdG86IEVsZW1DbGFzcyxcbiAgICBkZWNvcmF0ZWRGbk5hbWU6IFVwZGF0ZUhhbmRsZXJGdW5jdGlvbktleXM8RWxlbUNsYXNzPlxuICApOiB2b2lkID0+IHtcbiAgICBjb25zdCB7IGNvbm5lY3RlZENhbGxiYWNrLCBkaXNjb25uZWN0ZWRDYWxsYmFjayB9ID0gcHJvdG87XG5cbiAgICBwcm90by5jb25uZWN0ZWRDYWxsYmFjayA9IGZ1bmN0aW9uICh0aGlzOiBFbGVtQ2xhc3MpIHtcbiAgICAgIGNvbm5lY3RlZENhbGxiYWNrLmNhbGwodGhpcyk7XG4gICAgICBjb25zdCBjYWxsYmFjayA9IChtdXRhdGlvbkxpc3Q6IE11dGF0aW9uUmVjb3JkW10pID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudHNUb1dhdGNoID0gQXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwocXVlcnlTZWxlY3RvcikpO1xuICAgICAgICBmb3IgKGNvbnN0IG11dGF0aW9uIG9mIG11dGF0aW9uTGlzdCkge1xuICAgICAgICAgIGNvbnN0IGFkZGVkTm9kZXMgPSBBcnJheS5mcm9tKG11dGF0aW9uLmFkZGVkTm9kZXMpLm1hcChlID0+IGUgYXMgRWxlbWVudCk7XG4gICAgICAgICAgY29uc3QgcmVtb3ZlZE5vZGVzID0gQXJyYXkuZnJvbShtdXRhdGlvbi5hZGRlZE5vZGVzKS5tYXAoZSA9PiBlIGFzIEVsZW1lbnQpO1xuICAgICAgICAgIGlmIChtdXRhdGlvbi50eXBlID09PSAnY2hpbGRMaXN0JyAmJiBhZGRlZE5vZGVzLmZpbmQobiA9PiBlbGVtZW50c1RvV2F0Y2guaW5jbHVkZXMobikpKSB7XG4gICAgICAgICAgICAodGhpc1tkZWNvcmF0ZWRGbk5hbWVdIGFzIHVua25vd24gYXMgVXBkYXRlSGFuZGxlcikoYWRkZWROb2RlcywgcmVtb3ZlZE5vZGVzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGNhbGxiYWNrKTtcbiAgICAgIG9ic2VydmVyLm9ic2VydmUodGhpcywgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7XG5cbiAgICAgIGNvbnN0IGVsZW1lbnRzQWRkZWQgPSB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwocXVlcnlTZWxlY3RvcikgPz8gW107XG4gICAgICAodGhpc1tkZWNvcmF0ZWRGbk5hbWVdIGFzIHVua25vd24gYXMgVXBkYXRlSGFuZGxlcikoQXJyYXkuZnJvbShlbGVtZW50c0FkZGVkKSwgW10pO1xuICAgIH07XG5cbiAgICBwcm90by5kaXNjb25uZWN0ZWRDYWxsYmFjayA9IGZ1bmN0aW9uICh0aGlzOiBFbGVtQ2xhc3MpIHtcbiAgICAgIGRpc2Nvbm5lY3RlZENhbGxiYWNrLmNhbGwodGhpcyk7XG4gICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgfTtcbiAgfTtcbn1cbiIsICJpbXBvcnQgeyBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBDaG9pY2VzIH0gZnJvbSAnLi4vaW50ZXJuYWwvY2hvaWNlcy9jaG9pY2VzJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1ob3R0ZXh0LWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlIb3R0ZXh0SW50ZXJhY3Rpb24gZXh0ZW5kcyBDaG9pY2VzIHtcbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgncXRpLWhvdHRleHQtaW50ZXJhY3Rpb24nLCAnJyk7XG4gIH1cblxuICBvdmVycmlkZSByZW5kZXIgPSAoKSA9PiBodG1sYDxzbG90Pjwvc2xvdD5gO1xufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktaG90dGV4dC1pbnRlcmFjdGlvbic6IFF0aUhvdHRleHRJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IHdhdGNoIH0gZnJvbSAnLi4vLi4vLi4vLi4vZGVjb3JhdG9ycy93YXRjaCc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvbiB9IGZyb20gJy4uL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uJztcbmltcG9ydCB7IHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IFF0aUNob2ljZSB9IGZyb20gJy4uL2Nob2ljZS9xdGktY2hvaWNlJztcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDaG9pY2VzIGV4dGVuZHMgSW50ZXJhY3Rpb24ge1xuICBwcm90ZWN0ZWQgX2Nob2ljZUVsZW1lbnRzOiBRdGlDaG9pY2VbXSA9IFtdO1xuXG4gIC8qKiB0aGUgbWluaW1hbCBudW1iZXIgb2Ygc2VsZWN0aW9ucyBhIGNhbmRpZGF0ZSBtdXN0IG1ha2UgKi9cbiAgQHByb3BlcnR5KHtcbiAgICB0eXBlOiBOdW1iZXIsXG4gICAgYXR0cmlidXRlOiAnbWluLWNob2ljZXMnXG4gIH0pXG4gIHB1YmxpYyBtaW5DaG9pY2VzOiBudW1iZXIgPSAwO1xuXG4gIC8qKiB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc2VsZWN0aW9ucyBhIGNhbmRpZGF0ZSBtdXN0IG1ha2UsIHRoZSBvdGhlciBvcHRpb25zIHdpbGwgYmUgZGlzYWJsZWQgd2hlbiBtYXggb3B0aW9ucyBpcyBjaGVja2VkICovXG4gIEBwcm9wZXJ0eSh7XG4gICAgdHlwZTogTnVtYmVyLFxuICAgIGF0dHJpYnV0ZTogJ21heC1jaG9pY2VzJ1xuICB9KVxuICBwdWJsaWMgbWF4Q2hvaWNlczogbnVtYmVyID0gMTtcblxuICBAd2F0Y2goJ2Rpc2FibGVkJywgeyB3YWl0VW50aWxGaXJzdFVwZGF0ZTogdHJ1ZSB9KVxuICBfaGFuZGxlRGlzYWJsZWRDaGFuZ2UgPSAoXzogYm9vbGVhbiwgZGlzYWJsZWQ6IGJvb2xlYW4pID0+XG4gICAgdGhpcy5fY2hvaWNlRWxlbWVudHMuZm9yRWFjaChjaCA9PiAoY2guZGlzYWJsZWQgPSBkaXNhYmxlZCkpO1xuXG4gIEB3YXRjaCgncmVhZG9ubHknLCB7IHdhaXRVbnRpbEZpcnN0VXBkYXRlOiB0cnVlIH0pXG4gIF9oYW5kbGVSZWFkb25seUNoYW5nZSA9IChfOiBib29sZWFuLCByZWFkb25seTogYm9vbGVhbikgPT5cbiAgICB0aGlzLl9jaG9pY2VFbGVtZW50cy5mb3JFYWNoKGNoID0+IChjaC5yZWFkb25seSA9IHJlYWRvbmx5KSk7XG5cbiAgQHdhdGNoKCdtYXhDaG9pY2VzJywgeyB3YWl0VW50aWxGaXJzdFVwZGF0ZTogdHJ1ZSB9KVxuICBfaGFuZGxlTWF4Q2hvaWNlc0NoYW5nZSA9ICgpID0+IHRoaXMuX2RldGVybWluZUlucHV0VHlwZSgpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdxdGktcmVnaXN0ZXItY2hvaWNlJywgdGhpcy5fcmVnaXN0ZXJDaG9pY2VFbGVtZW50KTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1sb29zZS1jaG9pY2UnLCB0aGlzLl9sb29zZUNob2ljZUVsZW1lbnQpO1xuICB9XG5cbiAgdmFsaWRhdGUoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbnJTZWxlY3RlZCA9IHRoaXMuX2Nob2ljZUVsZW1lbnRzLnJlZHVjZSgoYWNjLCB2YWwpID0+IHtcbiAgICAgIHJldHVybiBhY2MgKyAodmFsLmNoZWNrZWQgPyAxIDogMCk7XG4gICAgfSwgMCk7XG4gICAgcmV0dXJuIG5yU2VsZWN0ZWQgPj0gdGhpcy5taW5DaG9pY2VzO1xuICB9XG5cbiAgc2V0IHJlc3BvbnNlKHJlc3BvbnNlVmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG4gICAgY29uc3QgcmVzcG9uc2VWYWx1ZUFycmF5ID0gQXJyYXkuaXNBcnJheShyZXNwb25zZVZhbHVlKSA/IHJlc3BvbnNlVmFsdWUgOiBbcmVzcG9uc2VWYWx1ZV07XG4gICAgdGhpcy5fY2hvaWNlRWxlbWVudHMuZm9yRWFjaChjZSA9PiB7XG4gICAgICBjZS5jaGVja2VkID0gcmVzcG9uc2VWYWx1ZUFycmF5LmZpbmQocnYgPT4gcnYgPT09IGNlLmlkZW50aWZpZXIpID8gdHJ1ZSA6IGZhbHNlO1xuICAgIH0pO1xuICB9XG5cbiAgc2V0IGNvcnJlY3RSZXNwb25zZShyZXNwb25zZVZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSkge1xuICAgIGNvbnN0IHJlc3BvbnNlVmFsdWVBcnJheSA9IEFycmF5LmlzQXJyYXkocmVzcG9uc2VWYWx1ZSkgPyByZXNwb25zZVZhbHVlIDogW3Jlc3BvbnNlVmFsdWVdO1xuICAgIGlmIChyZXNwb25zZVZhbHVlID09ICcnKSB7XG4gICAgICB0aGlzLl9jaG9pY2VFbGVtZW50cy5mb3JFYWNoKGNlID0+IHtcbiAgICAgICAgY2UucmVtb3ZlQXR0cmlidXRlKCdkYXRhLWNvcnJlY3QtcmVzcG9uc2UnKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9jaG9pY2VFbGVtZW50cy5mb3JFYWNoKGNlID0+IHtcbiAgICAgIGNlLnNldEF0dHJpYnV0ZSgnZGF0YS1jb3JyZWN0LXJlc3BvbnNlJywgcmVzcG9uc2VWYWx1ZUFycmF5LmZpbmQocnYgPT4gcnYgPT09IGNlLmlkZW50aWZpZXIpID8gJ3RydWUnIDogJ2ZhbHNlJyk7XG4gICAgfSk7XG4gIH1cblxuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigncXRpLWNob2ljZS1lbGVtZW50LXNlbGVjdGVkJywgdGhpcy5fY2hvaWNlRWxlbWVudFNlbGVjdGVkSGFuZGxlcik7XG4gIH1cblxuICBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigncXRpLWNob2ljZS1lbGVtZW50LXNlbGVjdGVkJywgdGhpcy5fY2hvaWNlRWxlbWVudFNlbGVjdGVkSGFuZGxlcik7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdxdGktcmVnaXN0ZXItY2hvaWNlJywgdGhpcy5fcmVnaXN0ZXJDaG9pY2VFbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlZ2lzdGVyQ2hvaWNlRWxlbWVudChlOiBDdXN0b21FdmVudCkge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3QgY2hvaWNlRWxlbWVudCA9IGUudGFyZ2V0IGFzIFF0aUNob2ljZTtcbiAgICB0aGlzLl9jaG9pY2VFbGVtZW50cy5wdXNoKGNob2ljZUVsZW1lbnQpO1xuICAgIHRoaXMuX3NldElucHV0VHlwZShjaG9pY2VFbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgX2xvb3NlQ2hvaWNlRWxlbWVudChlOiBDdXN0b21FdmVudCkge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3QgY2hvaWNlRWxlbWVudCA9IGUudGFyZ2V0IGFzIFF0aUNob2ljZTtcbiAgICB0aGlzLl9jaG9pY2VFbGVtZW50cy5wdXNoKGNob2ljZUVsZW1lbnQpO1xuICAgIHRoaXMuX2Nob2ljZUVsZW1lbnRzID0gdGhpcy5fY2hvaWNlRWxlbWVudHMuZmlsdGVyKGNoID0+IGNoICE9PSBjaG9pY2VFbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgX2RldGVybWluZUlucHV0VHlwZSgpIHtcbiAgICB0aGlzLl9jaG9pY2VFbGVtZW50cy5mb3JFYWNoKGNob2ljZUVsZW1lbnQgPT4ge1xuICAgICAgdGhpcy5fc2V0SW5wdXRUeXBlKGNob2ljZUVsZW1lbnQpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0SW5wdXRUeXBlKGNob2ljZUVsZW1lbnQ6IFF0aUNob2ljZSkge1xuICAgIGlmICh0aGlzLm1heENob2ljZXMgPT09IDEpIHtcbiAgICAgIC8vIGlmIHplcm8gdGhlbiB5b3UgY2FuIGNob29zZSBob3cgbXVjaCB5b3Ugd2FudFxuICAgICAgY2hvaWNlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAncmFkaW8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2hvaWNlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnY2hlY2tib3gnKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgX2Nob2ljZUVsZW1lbnRTZWxlY3RlZEhhbmRsZXIoZXZlbnQ6IEN1c3RvbUV2ZW50PHsgaWRlbnRpZmllcjogc3RyaW5nOyBjaGVja2VkOiBib29sZWFuIH0+KSB7XG4gICAgaWYgKHRoaXMubWF4Q2hvaWNlcyA9PT0gMSkge1xuICAgICAgdGhpcy5fY2hvaWNlRWxlbWVudHNcbiAgICAgICAgLmZpbHRlcihjZSA9PiBjZS5pZGVudGlmaWVyICE9PSBldmVudC5kZXRhaWwuaWRlbnRpZmllcilcbiAgICAgICAgLmZvckVhY2goY2UgPT4ge1xuICAgICAgICAgIGNlLmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuX2Nob2ljZUVsZW1lbnRTZWxlY3RlZCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9jaG9pY2VFbGVtZW50U2VsZWN0ZWQoKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRJZGVudGlmaWVycyA9IHRoaXMuX2Nob2ljZUVsZW1lbnRzLmZpbHRlcihjZSA9PiBjZS5jaGVja2VkKS5tYXAoY2UgPT4gY2UuaWRlbnRpZmllcik7XG5cbiAgICBpZiAodGhpcy5tYXhDaG9pY2VzID4gMSkge1xuICAgICAgaWYgKHRoaXMubWF4Q2hvaWNlcyA9PT0gc2VsZWN0ZWRJZGVudGlmaWVycy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5fY2hvaWNlRWxlbWVudHMuZm9yRWFjaChjZSA9PiAoY2UuZGlzYWJsZWQgPSAhY2UuY2hlY2tlZCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fY2hvaWNlRWxlbWVudHMuZm9yRWFjaChjZSA9PiAoY2UuZGlzYWJsZWQgPSBmYWxzZSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCByZXN1bHQ6IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIGlmICh0aGlzLm1heENob2ljZXMgPT09IDEpIHtcbiAgICAgIHJlc3VsdCA9IHNlbGVjdGVkSWRlbnRpZmllcnMubGVuZ3RoID4gMCA/IHNlbGVjdGVkSWRlbnRpZmllcnNbMF0gOiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IHNlbGVjdGVkSWRlbnRpZmllcnM7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFyZ3VtZW50XG4gICAgdGhpcy5zYXZlUmVzcG9uc2UocmVzdWx0KTtcbiAgfVxufVxuIiwgImltcG9ydCB7IGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSwgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyB1bnNhZmVIVE1MIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvdW5zYWZlLWh0bWwuanMnO1xuaW1wb3J0IHsgSW50ZXJhY3Rpb24gfSBmcm9tICcuLi9pbnRlcm5hbC9pbnRlcmFjdGlvbi9pbnRlcmFjdGlvbic7XG5cbmludGVyZmFjZSBPcHRpb25UeXBlIHtcbiAgdGV4dENvbnRlbnQ6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbiAgc2VsZWN0ZWQ6IGJvb2xlYW47XG59XG5cbkBjdXN0b21FbGVtZW50KCdxdGktaW5saW5lLWNob2ljZS1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpSW5saW5lQ2hvaWNlSW50ZXJhY3Rpb24gZXh0ZW5kcyBJbnRlcmFjdGlvbiB7XG4gIHB1YmxpYyBzdGF0aWMgaW5wdXRXaWR0aENsYXNzID0gW1xuICAgICcnLFxuICAgICdxdGktaW5wdXQtd2lkdGgtMicsXG4gICAgJ3F0aS1pbnB1dC13aWR0aC0xJyxcbiAgICAncXRpLWlucHV0LXdpZHRoLTMnLFxuICAgICdxdGktaW5wdXQtd2lkdGgtNCcsXG4gICAgJ3F0aS1pbnB1dC13aWR0aC02JyxcbiAgICAncXRpLWlucHV0LXdpZHRoLTEwJyxcbiAgICAncXRpLWlucHV0LXdpZHRoLTE1JyxcbiAgICAncXRpLWlucHV0LXdpZHRoLTIwJyxcbiAgICAncXRpLWlucHV0LXdpZHRoLTcyJ1xuICBdO1xuXG4gIEBzdGF0ZSgpIG9wdGlvbnM6IE9wdGlvblR5cGVbXSA9IFtdO1xuXG4gIEBzdGF0ZSgpIGNvcnJlY3RPcHRpb246IHN0cmluZyA9ICcnO1xuXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2RhdGEtcHJvbXB0JywgdHlwZTogU3RyaW5nIH0pXG4gIGRhdGFQcm9tcHQ6IHN0cmluZyA9ICdzZWxlY3QnO1xuXG4gIHN0YXRpYyBvdmVycmlkZSBnZXQgc3R5bGVzKCkge1xuICAgIHJldHVybiBbXG4gICAgICBjc3NgXG4gICAgICAgIDpob3N0IHtcbiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIH1cbiAgICAgIGBcbiAgICBdO1xuICB9XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPHNlbGVjdCBwYXJ0PVwic2VsZWN0XCIgQGNoYW5nZT1cIiR7dGhpcy5jaG9pY2VTZWxlY3RlZH1cIiA/ZGlzYWJsZWQ9XCIke3RoaXMuZGlzYWJsZWR9XCIgP3JlYWRvbmx5PVwiJHt0aGlzLnJlYWRvbmx5fVwiPlxuICAgICAgICAke3RoaXMub3B0aW9ucy5tYXAoXG4gICAgICAgICAgb3B0aW9uID0+IGh0bWxgXG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiJHtvcHRpb24udmFsdWV9XCIgP3NlbGVjdGVkPVwiJHtvcHRpb24uc2VsZWN0ZWR9XCI+JHt1bnNhZmVIVE1MKG9wdGlvbi50ZXh0Q29udGVudCl9PC9vcHRpb24+XG4gICAgICAgICAgYFxuICAgICAgICApfVxuICAgICAgPC9zZWxlY3Q+XG5cbiAgICAgICR7dW5zYWZlSFRNTCh0aGlzLmNvcnJlY3RPcHRpb24pfVxuICAgIGA7XG4gIH1cblxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignb24tZHJvcGRvd24tc2VsZWN0ZWQnLCB0aGlzLmNob2ljZVNlbGVjdGVkKTtcbiAgICBjb25zdCBjaG9pY2VzID0gQXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoJ3F0aS1pbmxpbmUtY2hvaWNlJykpO1xuICAgIHRoaXMub3B0aW9ucyA9IFtcbiAgICAgIHtcbiAgICAgICAgdGV4dENvbnRlbnQ6IHRoaXMuZGF0YVByb21wdCxcbiAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICBzZWxlY3RlZDogZmFsc2VcbiAgICAgIH0sXG4gICAgICAuLi5jaG9pY2VzLm1hcChjaG9pY2UgPT4gKHtcbiAgICAgICAgdGV4dENvbnRlbnQ6IGNob2ljZS5pbm5lckhUTUwsXG4gICAgICAgIHZhbHVlOiBjaG9pY2UuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJyksXG4gICAgICAgIHNlbGVjdGVkOiBmYWxzZVxuICAgICAgfSkpXG4gICAgXTtcbiAgfVxuXG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignb24tZHJvcGRvd24tc2VsZWN0ZWQnLCB0aGlzLmNob2ljZVNlbGVjdGVkKTtcbiAgfVxuXG4gIHB1YmxpYyB2YWxpZGF0ZSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBzZWxlY3RlZE9wdGlvbiA9IHRoaXMub3B0aW9ucy5maW5kKG9wdGlvbiA9PiBvcHRpb24uc2VsZWN0ZWQpO1xuICAgIHJldHVybiBzZWxlY3RlZE9wdGlvbiA/IHNlbGVjdGVkT3B0aW9uLnZhbHVlICE9PSAnJyA6IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHJlc2V0KCkge1xuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMub3B0aW9ucy5tYXAoKG9wdGlvbiwgaSkgPT4gKHsgLi4ub3B0aW9uLCBzZWxlY3RlZDogaSA9PT0gMCB9KSk7XG4gIH1cblxuICBwdWJsaWMgc2V0IHJlc3BvbnNlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLm9wdGlvbnMubWFwKG9wdGlvbiA9PiB7XG4gICAgICB2YWx1ZSA9PT0gb3B0aW9uLnZhbHVlICYmIChvcHRpb24uc2VsZWN0ZWQgPSB0cnVlKTtcbiAgICAgIHJldHVybiBvcHRpb247XG4gICAgfSk7XG4gIH1cblxuICBzZXQgY29ycmVjdFJlc3BvbnNlKHZhbHVlOiBSZWFkb25seTxzdHJpbmcgfCBzdHJpbmdbXT4pIHtcbiAgICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICB0aGlzLmNvcnJlY3RPcHRpb24gPSAnJztcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jb3JyZWN0T3B0aW9uID0gYDxzcGFuIHBhcnQ9XCJjb3JyZWN0LW9wdGlvblwiPiR7XG4gICAgICB0aGlzLm9wdGlvbnMuZmluZChvcHRpb24gPT4gdmFsdWUgPT09IG9wdGlvbi52YWx1ZSkudGV4dENvbnRlbnRcbiAgICB9PC9zcGFuPmA7XG4gIH1cblxuICBwdWJsaWMgY2hvaWNlU2VsZWN0ZWQoZXZlbnQ6IEV2ZW50KSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRPcHRpb25WYWx1ZSA9IChldmVudC50YXJnZXQgYXMgSFRNTFNlbGVjdEVsZW1lbnQpLnZhbHVlO1xuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMub3B0aW9ucy5tYXAob3B0aW9uID0+ICh7IC4uLm9wdGlvbiwgc2VsZWN0ZWQ6IG9wdGlvbi52YWx1ZSA9PT0gc2VsZWN0ZWRPcHRpb25WYWx1ZSB9KSk7XG4gICAgdGhpcy5zYXZlUmVzcG9uc2Uoc2VsZWN0ZWRPcHRpb25WYWx1ZSk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWlubGluZS1jaG9pY2UtaW50ZXJhY3Rpb24nOiBRdGlJbmxpbmVDaG9pY2VJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vcXRpLWNob2ljZS1pbnRlcmFjdGlvbi5zdHlsZXMnO1xuaW1wb3J0IHR5cGUgeyBDU1NSZXN1bHRHcm91cCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBDaG9pY2VzIH0gZnJvbSAnLi4vaW50ZXJuYWwvY2hvaWNlcy9jaG9pY2VzJztcblxuLyoqXG4gKiBAc3VtbWFyeSBUaGUgQ2hvaWNlSW50ZXJhY3Rpb24uVHlwZSAocXRpLWNob2ljZS1pbnRlcmFjdGlvbikgaW50ZXJhY3Rpb24gcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIGNob2ljZXMgdG8gdGhlIGNhbmRpZGF0ZS5cbiAqIEBkb2N1bWVudGF0aW9uIGh0dHBzOi8vd3d3Lmltc2dsb2JhbC5vcmcvc3BlYy9xdGkvdjNwMC9pbXBsI2guajludTFvYTF0dTNiXG4gKiBAc3RhdHVzIHN0YWJsZVxuICogQHNpbmNlIDYuMFxuICpcbiAqIEBldmVudCBxdGktcmVnaXN0ZXItaW50ZXJhY3Rpb24gLSBlbWl0dGVkIHdoZW4gdGhlIGludGVyYWN0aW9uIHdhbnRzIHRvIHJlZ2lzdGVyIGl0c2VsZlxuICogQGV2ZW50IHF0aS1pbnRlcmFjdGlvbi1yZXNwb25zZSAtIGVtaXR0ZWQgd2hlbiB0aGUgaW50ZXJhY3Rpb24gY2hhbmdlc1xuICpcbiAqIEBzbG90IC0gVGhlIGRlZmF1bHQgc2xvdCB3aGVyZSA8cXRpLXNpbXBsZS1jaG9pY2U+IG11c3QgYmUgcGxhY2VkLlxuICogQHNsb3QgcHJvbXB0IC0gc2xvdCB3aGVyZSB0aGUgcHJvbXB0IGlzIHBsYWNlZC5cbiAqL1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWNob2ljZS1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpQ2hvaWNlSW50ZXJhY3Rpb24gZXh0ZW5kcyBDaG9pY2VzIHtcbiAgc3RhdGljIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBzdHlsZXM7XG5cbiAgLyoqIG9yaWVudGF0aW9uIG9mIGNob2ljZXMgKi9cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pXG4gIHB1YmxpYyBvcmllbnRhdGlvbjogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJztcblxuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgIDxzbG90IG5hbWU9XCJwcm9tcHRcIj48L3Nsb3Q+PHNsb3QgcGFydD1cInNsb3RcIj48L3Nsb3Q+YDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktY2hvaWNlLWludGVyYWN0aW9uJzogUXRpQ2hvaWNlSW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjc3MgfSBmcm9tICdsaXQnO1xuLy8gaW1wb3J0IGNvbXBvbmVudFN0eWxlcyBmcm9tICcuLi8uLi91dGlsaXRpZXMvc3R5bGVzL2NvbXBvbmVudC5zdHlsZXMnO1xuXG4vKiAke2NvbXBvbmVudFN0eWxlc30gKi9cbmV4cG9ydCBkZWZhdWx0IGNzc2BcbiAgOmhvc3Qge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAvLyBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgfVxuYDtcbiIsICJpbXBvcnQgeyBjc3MsIGh0bWwsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IFF0aVJ1bGUsIFF0aVJ1bGVCYXNlIH0gZnJvbSAnLi4nO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLW91dGNvbWUtcHJvY2Vzc2luZycpXG5leHBvcnQgY2xhc3MgUXRpT3V0Y29tZVByb2Nlc3NpbmcgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgc3RhdGljIHN0eWxlcyA9IFtcbiAgICBjc3NgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgYFxuICBdO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdD48L3Nsb3Q+YDtcbiAgfVxuXG4gIHB1YmxpYyBwcm9jZXNzKCkge1xuICAgIGNvbnN0IGxvZ2ljID0gbmV3IFF0aU91dGNvbWVQcm9jZXNzaW5nUHJvY2Vzc29yKCk7XG4gICAgY29uc3QgcnVsZXMgPSBbLi4udGhpcy5jaGlsZHJlbl0gYXMgUXRpUnVsZVtdO1xuICAgIGxvZ2ljLnByb2Nlc3MocnVsZXMpO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1vdXRjb21lLXByb2Nlc3NpbmcnOiBRdGlPdXRjb21lUHJvY2Vzc2luZztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUXRpT3V0Y29tZVByb2Nlc3NpbmdQcm9jZXNzb3Ige1xuICBwdWJsaWMgcHJvY2VzcyhydWxlczogUXRpUnVsZUJhc2VbXSkge1xuICAgIGZvciAoY29uc3QgcnVsZSBvZiBydWxlcykge1xuICAgICAgcnVsZS5wcm9jZXNzKCk7XG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sLCBMaXRFbGVtZW50LCBQcm9wZXJ0eVZhbHVlTWFwIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB7IG1hcFJlc3BvbnNlLCBtYXBSZXNwb25zZVBvaW50LCBtYXRjaENvcnJlY3QgfSBmcm9tICcuLi8uLi9pbnRlcm5hbC90ZW1wbGF0ZS1zdHJpbmdzJztcbmltcG9ydCB7IHR5cGUgUXRpUnVsZSB9IGZyb20gJy4uL3F0aS1ydWxlL3F0aS1ydWxlJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nJylcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFF0aVJlc3BvbnNlUHJvY2Vzc2luZyBleHRlbmRzIExpdEVsZW1lbnQge1xuICBzdGF0aWMgc3R5bGVzID0gW1xuICAgIGNzc2BcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICBgXG4gIF07XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgcHVibGljIHByb2Nlc3MoKSB7XG4gICAgY29uc3QgcnVsZXMgPSBbLi4udGhpcy5jaGlsZHJlbl0gYXMgUXRpUnVsZVtdO1xuXG4gICAgZm9yIChjb25zdCBydWxlIG9mIHJ1bGVzKSB7XG4gICAgICBydWxlLnByb2Nlc3MoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZU1hcDxhbnk+IHwgTWFwPFByb3BlcnR5S2V5LCB1bmtub3duPik6IHZvaWQge1xuICAgIGlmICh0aGlzLmdldEF0dHJpYnV0ZSgndGVtcGxhdGUnKSkge1xuICAgICAgY29uc3Qgc3BsaXR0ZWRUZW1wbGF0ZU5hbWUgPSB0aGlzLmdldEF0dHJpYnV0ZSgndGVtcGxhdGUnKSEuc3BsaXQoJy8nKTtcbiAgICAgIGNvbnN0IHRlbXBsYXRlTmFtZSA9IHNwbGl0dGVkVGVtcGxhdGVOYW1lW3NwbGl0dGVkVGVtcGxhdGVOYW1lLmxlbmd0aCAtIDFdLnJlcGxhY2UoJy54bWwnLCAnJyk7XG4gICAgICB0aGlzLmlubmVySFRNTCA9ICcnO1xuICAgICAgc3dpdGNoICh0ZW1wbGF0ZU5hbWUpIHtcbiAgICAgICAgY2FzZSAnbWFwX3Jlc3BvbnNlJzoge1xuICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQodGhpcy5mcmFnbWVudEZyb21TdHJpbmcobWFwUmVzcG9uc2UpLmZpcnN0RWxlbWVudENoaWxkLmZpcnN0RWxlbWVudENoaWxkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdtYXBfcmVzcG9uc2VfcG9pbnQnOiB7XG4gICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZCh0aGlzLmZyYWdtZW50RnJvbVN0cmluZyhtYXBSZXNwb25zZVBvaW50KS5maXJzdEVsZW1lbnRDaGlsZC5maXJzdEVsZW1lbnRDaGlsZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnbWF0Y2hfY29ycmVjdCc6XG4gICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZCh0aGlzLmZyYWdtZW50RnJvbVN0cmluZyhtYXRjaENvcnJlY3QpLmZpcnN0RWxlbWVudENoaWxkLmZpcnN0RWxlbWVudENoaWxkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZyYWdtZW50RnJvbVN0cmluZyhzdHJIVE1MOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoc3RySFRNTCk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXJlc3BvbnNlLXByb2Nlc3NpbmcnOiBRdGlSZXNwb25zZVByb2Nlc3Npbmc7XG4gIH1cbn1cbiIsICJleHBvcnQgY29uc3QgbWF0Y2hDb3JyZWN0ID0gYDxxdGktcmVzcG9uc2UtcHJvY2Vzc2luZz5cbiAgPHF0aS1yZXNwb25zZS1jb25kaXRpb24+XG4gICAgPHF0aS1yZXNwb25zZS1pZj5cbiAgICAgIDxxdGktbWF0Y2g+XG4gICAgICAgIDxxdGktdmFyaWFibGUgaWRlbnRpZmllcj1cIlJFU1BPTlNFXCI+PC9xdGktdmFyaWFibGU+XG4gICAgICAgIDxxdGktY29ycmVjdCBpZGVudGlmaWVyPVwiUkVTUE9OU0VcIj48L3F0aS1jb3JyZWN0PlxuICAgICAgPC9xdGktbWF0Y2g+XG4gICAgICA8cXRpLXNldC1vdXRjb21lLXZhbHVlIGlkZW50aWZpZXI9XCJTQ09SRVwiPlxuICAgICAgICA8cXRpLWJhc2UtdmFsdWUgYmFzZS10eXBlPVwiZmxvYXRcIj4xPC9xdGktYmFzZS12YWx1ZT5cbiAgICAgIDwvcXRpLXNldC1vdXRjb21lLXZhbHVlPlxuICAgIDwvcXRpLXJlc3BvbnNlLWlmPlxuICAgIDxxdGktcmVzcG9uc2UtZWxzZT5cbiAgICAgIDxxdGktc2V0LW91dGNvbWUtdmFsdWUgaWRlbnRpZmllcj1cIlNDT1JFXCI+XG4gICAgICAgIDxxdGktYmFzZS12YWx1ZSBiYXNlLXR5cGU9XCJmbG9hdFwiPjA8L3F0aS1iYXNlLXZhbHVlPlxuICAgICAgPC9xdGktc2V0LW91dGNvbWUtdmFsdWU+XG4gICAgPC9xdGktcmVzcG9uc2UtZWxzZT5cbiAgPC9xdGktcmVzcG9uc2UtY29uZGl0aW9uPlxuPC9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZz5gO1xuXG5leHBvcnQgY29uc3QgbWFwUmVzcG9uc2UgPSBgPHF0aS1yZXNwb25zZS1wcm9jZXNzaW5nPlxuICA8cXRpLXJlc3BvbnNlLWNvbmRpdGlvbj5cbiAgICA8cXRpLXJlc3BvbnNlLWlmPlxuICAgICAgPHF0aS1pcy1udWxsPlxuICAgICAgICA8cXRpLXZhcmlhYmxlIGlkZW50aWZpZXI9XCJSRVNQT05TRVwiPjwvcXRpLXZhcmlhYmxlPlxuICAgICAgPC9xdGktaXMtbnVsbD5cbiAgICAgIDxxdGktc2V0LW91dGNvbWUtdmFsdWUgaWRlbnRpZmllcj1cIlNDT1JFXCI+XG4gICAgICAgIDxxdGktYmFzZS12YWx1ZSBiYXNlLXR5cGU9XCJmbG9hdFwiPjAuMDwvcXRpLWJhc2UtdmFsdWU+XG4gICAgICA8L3F0aS1zZXQtb3V0Y29tZS12YWx1ZT5cbiAgICA8L3F0aS1yZXNwb25zZS1pZj5cbiAgICA8cXRpLXJlc3BvbnNlLWVsc2U+XG4gICAgICA8cXRpLXNldC1vdXRjb21lLXZhbHVlIGlkZW50aWZpZXI9XCJTQ09SRVwiPlxuICAgICAgICA8cXRpLW1hcC1yZXNwb25zZSBpZGVudGlmaWVyPVwiUkVTUE9OU0VcIj4gPC9xdGktbWFwLXJlc3BvbnNlPlxuICAgICAgPC9xdGktc2V0LW91dGNvbWUtdmFsdWU+XG4gICAgPC9xdGktcmVzcG9uc2UtZWxzZT5cbiAgPC9xdGktcmVzcG9uc2UtY29uZGl0aW9uPlxuPC9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZz5gO1xuXG5leHBvcnQgY29uc3QgbWFwUmVzcG9uc2VQb2ludCA9IGA8cXRpLXJlc3BvbnNlLXByb2Nlc3Npbmc+XG4gIDxxdGktcmVzcG9uc2UtY29uZGl0aW9uPlxuICAgIDxxdGktcmVzcG9uc2UtaWY+XG4gICAgICA8cXRpLWlzLW51bGw+XG4gICAgICAgIDxxdGktdmFyaWFibGUgaWRlbnRpZmllcj1cIlJFU1BPTlNFXCI+PC9xdGktdmFyaWFibGU+XG4gICAgICA8L3F0aS1pcy1udWxsPlxuICAgICAgPHF0aS1zZXQtb3V0Y29tZS12YWx1ZSBpZGVudGlmaWVyPVwiU0NPUkVcIj5cbiAgICAgICAgPHF0aS1iYXNlLXZhbHVlIGJhc2UtdHlwZT1cImZsb2F0XCI+MDwvcXRpLWJhc2UtdmFsdWU+XG4gICAgICA8L3F0aS1zZXQtb3V0Y29tZS12YWx1ZT5cbiAgICA8L3F0aS1yZXNwb25zZS1pZj5cbiAgICA8cXRpLXJlc3BvbnNlLWVsc2U+XG4gICAgICA8cXRpLXNldC1vdXRjb21lLXZhbHVlIGlkZW50aWZpZXI9XCJTQ09SRVwiPlxuICAgICAgICA8cXRpLW1hcC1yZXNwb25zZS1wb2ludCBpZGVudGlmaWVyPVwiUkVTUE9OU0VcIj48L3F0aS1tYXAtcmVzcG9uc2UtcG9pbnQ+XG4gICAgICA8L3F0aS1zZXQtb3V0Y29tZS12YWx1ZT5cbiAgICA8L3F0aS1yZXNwb25zZS1lbHNlPlxuICA8L3F0aS1yZXNwb25zZS1jb25kaXRpb24+XG48L3F0aS1yZXNwb25zZS1wcm9jZXNzaW5nPmA7XG4iLCAiaW1wb3J0IHsgT3V0Y29tZVZhcmlhYmxlIH0gZnJvbSAnQGNpdG9sYWIvcXRpLWNvbXBvbmVudHMvcXRpLWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBjb252ZXJ0TnVtYmVyVG9Vbml2ZXJhbEZvcm1hdCB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFsL3V0aWxzJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi8uLi9xdGktZXhwcmVzc2lvbi9xdGktZXhwcmVzc2lvbic7XG5pbXBvcnQgeyBRdGlSdWxlIH0gZnJvbSAnLi4vcXRpLXJ1bGUnO1xuXG4vKipcbiAqIFRoZSBsb29rdXBPdXRjb21lVmFsdWUgcnVsZSBzZXRzIHRoZSB2YWx1ZSBvZiBhbiBvdXRjb21lIHZhcmlhYmxlIHRvIHRoZSB2YWx1ZSBvYnRhaW5lZFxuICogYnkgbG9va2luZyB1cCB0aGUgdmFsdWUgb2YgdGhlIGFzc29jaWF0ZWQgZXhwcmVzc2lvbiBpbiB0aGUgbG9va3VwVGFibGUgYXNzb2NpYXRlZFxuICogd2l0aCB0aGUgb3V0Y29tZSdzIGRlY2xhcmF0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgUXRpTG9va3VwT3V0Y29tZVZhbHVlIGV4dGVuZHMgUXRpUnVsZSB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KSBpZGVudGlmaWVyOiBzdHJpbmc7XG5cbiAgZ2V0IGNoaWxkRXhwcmVzc2lvbigpOiBRdGlFeHByZXNzaW9uPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmZpcnN0RWxlbWVudENoaWxkIGFzIFF0aUV4cHJlc3Npb248c3RyaW5nPjtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBwcm9jZXNzKCk6IG51bWJlciB7XG4gICAgY29uc3QgaWRlbnRpZmllciA9IHRoaXMuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJyk7XG4gICAgY29uc3Qgb3V0Y29tZVZhcmlhYmxlID0gdGhpcy5jbG9zZXN0KCdxdGktYXNzZXNzbWVudC1pdGVtJykuZ2V0VmFyaWFibGUoaWRlbnRpZmllcikgYXMgT3V0Y29tZVZhcmlhYmxlO1xuICAgIGxldCB2YWx1ZTtcbiAgICBpZiAob3V0Y29tZVZhcmlhYmxlLmludGVycG9sYXRpb25UYWJsZSkge1xuICAgICAgdmFsdWUgPSBvdXRjb21lVmFyaWFibGUuaW50ZXJwb2xhdGlvblRhYmxlLmdldChwYXJzZUludCh0aGlzLmNoaWxkRXhwcmVzc2lvbi5jYWxjdWxhdGUoKSkpO1xuICAgIH1cbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS53YXJuKCdsb29rdXBPdXRjb21lVmFsdWU6IHZhbHVlIGlzIG51bGwgb3IgdW5kZWZpbmVkJyk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50PHsgb3V0Y29tZUlkZW50aWZpZXI6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdIH0+KCdxdGktc2V0LW91dGNvbWUtdmFsdWUnLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICBvdXRjb21lSWRlbnRpZmllcjogdGhpcy5pZGVudGlmaWVyLFxuICAgICAgICAgIHZhbHVlOiBjb252ZXJ0TnVtYmVyVG9Vbml2ZXJhbEZvcm1hdCh2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktbG9va3VwLW91dGNvbWUtdmFsdWUnLCBRdGlMb29rdXBPdXRjb21lVmFsdWUpO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktbG9va3VwLW91dGNvbWUtdmFsdWUnOiBRdGlMb29rdXBPdXRjb21lVmFsdWU7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktcnVsZScpXG5leHBvcnQgY2xhc3MgUXRpUnVsZSBleHRlbmRzIExpdEVsZW1lbnQgaW1wbGVtZW50cyBRdGlSdWxlQmFzZSB7XG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdD48L3Nsb3Q+YDtcbiAgfVxuXG4gIHB1YmxpYyBwcm9jZXNzKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBRdGlSdWxlQmFzZSB7XG4gIHByb2Nlc3MoKTogYW55O1xufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktcnVsZSc6IFF0aVJ1bGU7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi8uLi9xdGktZXhwcmVzc2lvbi9xdGktZXhwcmVzc2lvbic7XG5pbXBvcnQgeyBRdGlSdWxlIH0gZnJvbSAnLi4vcXRpLXJ1bGUnO1xuXG5leHBvcnQgY2xhc3MgUXRpUmVzcG9uc2VDb25kaXRpb24gZXh0ZW5kcyBRdGlSdWxlIHtcbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIHByb2Nlc3MoKSB7XG4gICAgY29uc3QgYnJhbmNoZXMgPSBbLi4udGhpcy5jaGlsZHJlbl0gYXMgUXRpRXhwcmVzc2lvbjxhbnk+W107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJyYW5jaGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBicmFuY2ggPSBicmFuY2hlc1tpXTtcblxuICAgICAgaWYgKGJyYW5jaC5jYWxjdWxhdGUoKSkge1xuICAgICAgICAoYnJhbmNoIGFzIHVua25vd24gYXMgUXRpUnVsZSkucHJvY2VzcygpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktcmVzcG9uc2UtY29uZGl0aW9uJywgUXRpUmVzcG9uc2VDb25kaXRpb24pO1xuIiwgImltcG9ydCB7IGNvbnZlcnROdW1iZXJUb1VuaXZlcmFsRm9ybWF0IH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdXRpbHMnO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiwgUXRpRXhwcmVzc2lvbkJhc2UgfSBmcm9tICcuLi8uLi9xdGktZXhwcmVzc2lvbi9xdGktZXhwcmVzc2lvbic7XG5pbXBvcnQgeyBRdGlSdWxlLCBRdGlSdWxlQmFzZSB9IGZyb20gJy4uL3F0aS1ydWxlJztcblxuZXhwb3J0IGNsYXNzIFF0aVNldE91dGNvbWVWYWx1ZSBleHRlbmRzIFF0aVJ1bGUge1xuICBwdWJsaWMgb3ZlcnJpZGUgcHJvY2VzcygpIHtcbiAgICBjb25zdCBvdXRjb21lSWRlbnRpZmllciA9IHRoaXMuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJyk7XG5cbiAgICBjb25zdCBleHByZXNzaW9uID0gdGhpcy5maXJzdEVsZW1lbnRDaGlsZCBhcyBRdGlFeHByZXNzaW9uPHN0cmluZz47XG5cbiAgICBjb25zdCBydWxlID0gbmV3IFF0aVNldE91dGNvbWVWYWx1ZVJ1bGUoZXhwcmVzc2lvbik7XG4gICAgY29uc3QgdmFsdWUgPSBydWxlLnByb2Nlc3MoKTtcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQ8eyBvdXRjb21lSWRlbnRpZmllcjogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10gfT4oJ3F0aS1zZXQtb3V0Y29tZS12YWx1ZScsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWUsXG4gICAgICAgIGRldGFpbDoge1xuICAgICAgICAgIG91dGNvbWVJZGVudGlmaWVyLFxuICAgICAgICAgIHZhbHVlOiBBcnJheS5pc0FycmF5KHZhbHVlKVxuICAgICAgICAgICAgPyB2YWx1ZS5tYXAoKHY6IHN0cmluZykgPT4gY29udmVydE51bWJlclRvVW5pdmVyYWxGb3JtYXQodikpXG4gICAgICAgICAgICA6IGNvbnZlcnROdW1iZXJUb1VuaXZlcmFsRm9ybWF0KHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFF0aVNldE91dGNvbWVWYWx1ZVJ1bGU8VD4gaW1wbGVtZW50cyBRdGlSdWxlQmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZXhwcmVzc2lvbjogUXRpRXhwcmVzc2lvbkJhc2U8VD4pIHt9XG5cbiAgcHJvY2VzcygpOiBhbnkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5leHByZXNzaW9uID8gdGhpcy5leHByZXNzaW9uLmNhbGN1bGF0ZSgpIDogbnVsbDtcblxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ3NldE91dGNvbWVWYWx1ZTogdmFsdWUgaXMgbnVsbCBvciB1bmRlZmluZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLXNldC1vdXRjb21lLXZhbHVlJywgUXRpU2V0T3V0Y29tZVZhbHVlKTtcbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50LCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IFF0aVJ1bGUgfSBmcm9tICcuLi9xdGktcnVsZS9xdGktcnVsZSc7XG5cbmV4cG9ydCBjbGFzcyBRdGlSZXNwb25zZUVsc2UgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgcHVibGljIGNhbGN1bGF0ZSgpIHtcbiAgICBjb25zdCByZXN1bHQgPSB0cnVlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHVibGljIGdldFN1YlJ1bGVzKCk6IFF0aVJ1bGVbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmNoaWxkcmVuXSBhcyBRdGlSdWxlW107XG4gIH1cblxuICBwdWJsaWMgcHJvY2VzcygpIHtcbiAgICBjb25zdCBzdWJSdWxlcyA9IHRoaXMuZ2V0U3ViUnVsZXMoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN1YlJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBzdWJSdWxlID0gc3ViUnVsZXNbaV07XG4gICAgICBzdWJSdWxlLnByb2Nlc3MoKTtcbiAgICB9XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktcmVzcG9uc2UtZWxzZScsIFF0aVJlc3BvbnNlRWxzZSk7XG4iLCAiaW1wb3J0IHsgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBRdGlSZXNwb25zZUlmIH0gZnJvbSAnLi4vcXRpLXJlc3BvbnNlLWlmJztcblxuZXhwb3J0IGNsYXNzIFF0aVJlc3BvbnNlRWxzZUlmIGV4dGVuZHMgUXRpUmVzcG9uc2VJZiB7XG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGAke3N1cGVyLnJlbmRlcigpfWA7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktcmVzcG9uc2UtZWxzZS1pZicsIFF0aVJlc3BvbnNlRWxzZUlmKTtcbiIsICJpbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vLi4vcXRpLWV4cHJlc3Npb24vcXRpLWV4cHJlc3Npb24nO1xuaW1wb3J0IHsgUXRpUnVsZSB9IGZyb20gJy4uLy4uL3F0aS1ydWxlL3F0aS1ydWxlJztcbmltcG9ydCB7IFF0aVJlc3BvbnNlRWxzZSB9IGZyb20gJy4uL3F0aS1yZXNwb25zZS1lbHNlJztcblxuZXhwb3J0IGNsYXNzIFF0aVJlc3BvbnNlSWYgZXh0ZW5kcyBRdGlSZXNwb25zZUVsc2Uge1xuICBwdWJsaWMgb3ZlcnJpZGUgY2FsY3VsYXRlKCkge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSB0aGlzLmZpcnN0RWxlbWVudENoaWxkIGFzIFF0aUV4cHJlc3Npb248Ym9vbGVhbj47XG4gICAgY29uc3QgcmVzdWx0ID0gZXhwcmVzc2lvbi5jYWxjdWxhdGUoKSBhcyBib29sZWFuO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0U3ViUnVsZXMoKTogUXRpUnVsZVtdIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdC5wdXNoKHRoaXMuY2hpbGRyZW5baV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLXJlc3BvbnNlLWlmJywgUXRpUmVzcG9uc2VJZik7XG4iLCAiaW1wb3J0IHsgTGl0RWxlbWVudCwgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgUmVzcG9uc2VWYXJpYWJsZSwgVmFyaWFibGVEZWNsYXJhdGlvbiB9IGZyb20gJy4uLy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBRdGlBc3Nlc3NtZW50SXRlbSB9IGZyb20gJy4uLy4uL3F0aS1hc3Nlc3NtZW50LWl0ZW0vcXRpLWFzc2Vzc21lbnQtaXRlbSc7XG5pbXBvcnQgeyBRdGlNdWx0aXBsZSB9IGZyb20gJy4vcXRpLW11bHRpcGxlL3F0aS1tdWx0aXBsZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXRpRXhwcmVzc2lvbkJhc2U8VD4ge1xuICAvLyBnZXQgYXNzZXNzbWVudEl0ZW0oKTogUXRpQXNzZXNzbWVudEl0ZW07XG5cbiAgLy8gZ2V0VmFyaWFibGVzKCk6IFZhcmlhYmxlRGVjbGFyYXRpb248bnVtYmVyIHwgc3RyaW5nIHwgKG51bWJlciB8IHN0cmluZylbXSB8IG51bGw+W107XG4gIGNhbGN1bGF0ZSgpOiBSZWFkb25seTxUPjtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFF0aUV4cHJlc3Npb248VD4gZXh0ZW5kcyBMaXRFbGVtZW50IGltcGxlbWVudHMgUXRpRXhwcmVzc2lvbkJhc2U8VD4ge1xuICBAc3RhdGUoKVxuICBwcm90ZWN0ZWQgcmVzdWx0OiBhbnk7XG5cbiAgLy8gaGlkZSB0aGUgc2xvdCB3aXRoIGNzc1xuICBzdGF0aWMgc3R5bGVzID0gY3NzYFxuICAgIHNsb3Qge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIGA7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxwcmU+JHtKU09OLnN0cmluZ2lmeSh0aGlzLnJlc3VsdCwgbnVsbCwgMil9PC9wcmU+XG4gICAgICA8c2xvdD48L3Nsb3Q+YDtcbiAgfVxuXG4gIHB1YmxpYyBjYWxjdWxhdGUoKTogUmVhZG9ubHk8VD4ge1xuICAgIHRoaXMucmVzdWx0ID0gdGhpcy5nZXRSZXN1bHQoKTtcbiAgICByZXR1cm4gdGhpcy5yZXN1bHQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0UmVzdWx0KCk6IFJlYWRvbmx5PFQ+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgZ2V0IGFzc2Vzc21lbnRJdGVtKCk6IFF0aUFzc2Vzc21lbnRJdGVtIHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZXN0KCdxdGktYXNzZXNzbWVudC1pdGVtJykgYXMgUXRpQXNzZXNzbWVudEl0ZW07XG4gIH1cblxuICBnZXRWYXJpYWJsZXMgPSAoKTogVmFyaWFibGVEZWNsYXJhdGlvbjxudW1iZXIgfCBzdHJpbmcgfCAobnVtYmVyIHwgc3RyaW5nKVtdIHwgbnVsbD5bXSA9PlxuICAgIC8vIEZJWE1FOiBpZiB0aGlzIGl0c2VsZiBpcyBtdWx0aXBsZSwgdGhpcyB3aWxsIG5ldmVyIGVudGVyIHRoZSBxdGktbXVsdGlwbGUgc3dpdGNoXG4gICAgLy8gU2VlIHRoaXMgZXhhbXBsZSBoZXJlOiBodHRwczovL2dpdGh1Yi5jb20vMUVkVGVjaC9xdGktZXhhbXBsZXMvYmxvYi9tYXN0ZXIvcXRpdjMtZXhhbXBsZXMvcGFja2FnaW5nL2l0ZW1zL0V4YW1wbGUwNS1mZWVkYmFja0Jsb2NrLWFkYXB0aXZlLnhtbFxuXG4gICAgQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKVxuICAgICAgLm1hcCgoZTogRWxlbWVudCkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgY2FzZSAncXRpLWJhc2UtdmFsdWUnOiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBiYXNlVHlwZTogZS5nZXRBdHRyaWJ1dGUoJ2Jhc2UtdHlwZScpLFxuICAgICAgICAgICAgICB2YWx1ZTogZS50ZXh0Q29udGVudCxcbiAgICAgICAgICAgICAgY2FyZGluYWxpdHk6ICdzaW5nbGUnXG4gICAgICAgICAgICB9IGFzIFJlc3BvbnNlVmFyaWFibGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgJ3F0aS12YXJpYWJsZSc6IHtcbiAgICAgICAgICAgIGNvbnN0IGlkZW50aWZpZXIgPSBlLmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpIHx8ICcnO1xuICAgICAgICAgICAgY29uc3QgdmFyaWFibGUgPSB0aGlzLmFzc2Vzc21lbnRJdGVtLmdldFZhcmlhYmxlKGlkZW50aWZpZXIpO1xuICAgICAgICAgICAgcmV0dXJuIHZhcmlhYmxlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlICdxdGktbXVsdGlwbGUnOiB7XG4gICAgICAgICAgICBjb25zdCBtdWx0aXBsZSA9IGUgYXMgUXRpTXVsdGlwbGU7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBtdWx0aXBsZS5nZXRSZXN1bHQoKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGlkZW50aWZpZXI6ICcnLFxuICAgICAgICAgICAgICAgIGJhc2VUeXBlOiB2YWx1ZXNbMF0uYmFzZVR5cGUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlcy5tYXAodiA9PiB2LnZhbHVlKSxcbiAgICAgICAgICAgICAgICBjYXJkaW5hbGl0eTogJ211bHRpcGxlJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAncmVzcG9uc2UnXG4gICAgICAgICAgICAgIH0gYXMgUmVzcG9uc2VWYXJpYWJsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlICdxdGktY29ycmVjdCc6IHtcbiAgICAgICAgICAgIGNvbnN0IGlkZW50aWZpZXIgPSBlLmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpIHx8ICcnO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2VWYXJpYWJsZSA9IHRoaXMuYXNzZXNzbWVudEl0ZW0uZ2V0UmVzcG9uc2UoaWRlbnRpZmllcik7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBiYXNlVHlwZTogcmVzcG9uc2VWYXJpYWJsZS5iYXNlVHlwZSxcbiAgICAgICAgICAgICAgdmFsdWU6IHJlc3BvbnNlVmFyaWFibGUuY29ycmVjdFJlc3BvbnNlLFxuICAgICAgICAgICAgICBjYXJkaW5hbGl0eTogcmVzcG9uc2VWYXJpYWJsZS5jYXJkaW5hbGl0eVxuICAgICAgICAgICAgfSBhcyBSZXNwb25zZVZhcmlhYmxlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAvLyBhZGRlZCBmb3IgdXNlIG9mIHF0aS1lcXVhbC1yb3VuZGVkXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBleHByZXNzaW9uID0gZSBhcyBRdGlFeHByZXNzaW9uPG51bWJlcj47XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZXhwcmVzc2lvbi5nZXRSZXN1bHQoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBiYXNlVHlwZTogJ2ludGVnZXInLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgIGNhcmRpbmFsaXR5OiAnc2luZ2xlJ1xuICAgICAgICAgICAgICB9IGFzIFJlc3BvbnNlVmFyaWFibGU7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ2RlZmF1bHQgbm90IHN1ZmZpY2llbnQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5maWx0ZXIodiA9PiB2ICE9PSBudWxsKTtcbn1cbiIsICJpbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBRdGlDb25kaXRpb25FeHByZXNzaW9uIGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxib29sZWFuPiB7XG4gIHB1YmxpYyBjYWxjdWxhdGUoKTogUmVhZG9ubHk8Ym9vbGVhbj4ge1xuICAgIHRoaXMucmVzdWx0ID0gdGhpcy5nZXRSZXN1bHQoKTtcbiAgICByZXR1cm4gdGhpcy5yZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0UmVzdWx0KCk6IFJlYWRvbmx5PGJvb2xlYW4+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1jb25kaXRpb24tZXhwcmVzc2lvbic7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuXG50eXBlIENvbnN0cnVjdG9yPFQ+ID0gbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVDtcbmV4cG9ydCBjbGFzcyBRdGlBbmQgZXh0ZW5kcyBxdGlBbmRNaXhpbihRdGlDb25kaXRpb25FeHByZXNzaW9uIGFzIHVua25vd24gYXMgQ29uc3RydWN0b3I8UXRpQ29uZGl0aW9uRXhwcmVzc2lvbj4pIHtcbiAgcHVibGljIGNhbGN1bGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jYWxjdWxhdGVDaGlsZHJlbihBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4gYXMgdW5rbm93biBhcyBRdGlFeHByZXNzaW9uPGFueT5bXSkpO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIE1vY2tRdGlFeHByZXNzaW9uPFQ+ID0geyBjYWxjdWxhdGU6ICgpID0+IFQgfTtcbnR5cGUgTW9ja0NvbnN0cnVjdG9yID0gbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4ge307XG5leHBvcnQgZnVuY3Rpb24gcXRpQW5kTWl4aW48VEJhc2UgZXh0ZW5kcyBNb2NrQ29uc3RydWN0b3I+KEJhc2U6IFRCYXNlKSB7XG4gIHJldHVybiBjbGFzcyBNb2NrUXRpQW5kIGV4dGVuZHMgQmFzZSB7XG4gICAgcHVibGljIGNhbGN1bGF0ZUNoaWxkcmVuKGNoaWxkcmVuOiBBcnJheTxNb2NrUXRpRXhwcmVzc2lvbjxhbnk+Pikge1xuICAgICAgLy8gY2hpbGRyZW4gY2FuIGJlIGEgbWl4IG9mIHF0aS1leHByZXNzaW9uIGFuZCBxdGktY29uZGl0aW9uLWV4cHJlc3Npb25cbiAgICAgIGNvbnN0IHZhbHVlcyA9IGNoaWxkcmVuLm1hcChjID0+IHtcbiAgICAgICAgY29uc3QgY29uZGl0aW9uID0gYyBhcyBNb2NrUXRpRXhwcmVzc2lvbjxhbnk+O1xuICAgICAgICBpZiAoIWNvbmRpdGlvbi5jYWxjdWxhdGUpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRWxlbWVudCBkb2Vzbid0IGltcGxlbWVudCBRdGlDb25kaXRpb25FeHByZXNzaW9uXCIpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGxldCB2YWx1ZSA9IGNvbmRpdGlvbi5jYWxjdWxhdGUoKSBhcyBCb29sZWFuO1xuICAgICAgICAvLyBjb252ZXJ0IHN0cmluZyB2YWx1ZSB0byBib29sZWFuIGFuZCByZXR1cm4gbnVsbCBpZiBub3QgcG9zc2libGVcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBpZiAodmFsdWUgPT09ICd0cnVlJykge1xuICAgICAgICAgICAgdmFsdWUgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09ICdmYWxzZScpIHtcbiAgICAgICAgICAgIHZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgdmFsdWUgaW4gcXRpLWFuZCwgZXhwZWN0ZWQgYm9vbGVhbicpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHZhbHVlcy5ldmVyeShlID0+IHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBlID09PSAnYm9vbGVhbicgJiYgZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cbiIsICJpbXBvcnQgeyBRdGlBbmQgfSBmcm9tICcuL3F0aS1hbmQnO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktYW5kJywgUXRpQW5kKTtcblxuZXhwb3J0ICogZnJvbSAnLi9xdGktYW5kJztcblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWFuZCc6IFF0aUFuZDtcbiAgfVxufVxuIiwgImltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgQmFzZVR5cGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC9leHByZXNzaW9uLXJlc3VsdCc7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuZXhwb3J0IGNsYXNzIFF0aUJhc2VWYWx1ZSBleHRlbmRzIFF0aUV4cHJlc3Npb248c3RyaW5nPiB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAnYmFzZS10eXBlJyB9KSBiYXNlVHlwZTogQmFzZVR5cGUgPSAnc3RyaW5nJztcblxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCk6IHN0cmluZyB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnRleHRDb250ZW50O1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1iYXNlLXZhbHVlJywgUXRpQmFzZVZhbHVlKTtcbiIsICJpbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IFF0aUNvbmRpdGlvbkV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktY29uZGl0aW9uLWV4cHJlc3Npb24nO1xuXG4vLyBQSzogRm9yIHRoZSBjb250YWlucyB3ZSBhc3N1bWUgdGhlIGV4cHJlc3Npb25zIHRvIGNhbGN1bGF0ZSBhcmUgYWxsIGRpcmVjdGVkUGFpcnNcbi8vIEkgZG9uJ3Qga25vdyBpdCB0aGlzIGluIFFUSSBpcyBhbHdheXMgdGhlIGNhc2UgaG93ZXZlcj9cbmV4cG9ydCBjbGFzcyBRdGlDb250YWlucyBleHRlbmRzIFF0aUNvbmRpdGlvbkV4cHJlc3Npb24ge1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCkge1xuICAgIC8vIFRPRE86IGltcGxlbWVudCB0aGlzIGZvciBvdGhlciB0eXBlcyB0aGFuIGRpcmVjdGVkUGFpclxuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0VmFyaWFibGVzKCkgYXMgUmVzcG9uc2VWYXJpYWJsZVtdO1xuICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMikge1xuICAgICAgY29uc3QgdmFsdWUxID0gdmFsdWVzWzBdO1xuICAgICAgY29uc3QgdmFsdWUyID0gdmFsdWVzWzFdO1xuICAgICAgaWYgKFxuICAgICAgICB2YWx1ZTEuYmFzZVR5cGUgPT09ICdkaXJlY3RlZFBhaXInICYmXG4gICAgICAgIHZhbHVlMi5iYXNlVHlwZSA9PT0gJ2RpcmVjdGVkUGFpcicgJiZcbiAgICAgICAgdmFsdWUxLmNhcmRpbmFsaXR5ID09PSAnbXVsdGlwbGUnXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgcHJvamVjdGlvbjEgPSB2YWx1ZTEudmFsdWUgYXMgc3RyaW5nW107XG4gICAgICAgIGNvbnN0IHByb2plY3Rpb24yID0gdmFsdWUyLnZhbHVlIGFzIHN0cmluZ1tdO1xuICAgICAgICBjb25zdCBlbnVtZXJhYmxlID0gcHJvamVjdGlvbjEuZmlsdGVyKHggPT4gcHJvamVjdGlvbjIuaW5jbHVkZXMoeCkpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGVudW1lcmFibGUubGVuZ3RoID4gMDtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHZhbHVlMS5iYXNlVHlwZSA9PT0gJ2RpcmVjdGVkUGFpcicgJiZcbiAgICAgICAgdmFsdWUyLmJhc2VUeXBlID09PSAnZGlyZWN0ZWRQYWlyJyAmJlxuICAgICAgICB2YWx1ZTEuY2FyZGluYWxpdHkgPT09ICdzaW5nbGUnXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgcHJvamVjdGlvbjEgPSB2YWx1ZTEudmFsdWUgYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCBwcm9qZWN0aW9uMiA9IHZhbHVlMi52YWx1ZSBhcyBzdHJpbmdbXTtcbiAgICAgICAgcmV0dXJuIHByb2plY3Rpb24yLmluY2x1ZGVzKHByb2plY3Rpb24xKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgJ3Vuc3VwcG9ydGVkIGJhc2VUeXBlIG9yIGNhcmRpbmFsaXR5IGluIHF0aSBjb250YWlucywgb25seSBiYXNlVHlwZTogZGlyZWN0ZWRQYWlyIGFuZCBjYXJkaW5hbGl0eTogbXVsdGlwbGUgaXMgc3VwcG9ydGVkJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIG51bWJlciBvZiBjaGlsZHJlbiBpbiBxdGkgY29udGFpbnMnKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLWNvbnRhaW5zJywgUXRpQ29udGFpbnMpO1xuIiwgImltcG9ydCB7IFF0aUFzc2Vzc21lbnRJdGVtIH0gZnJvbSAnLi4vLi4vLi4vcXRpLWFzc2Vzc21lbnQtaXRlbS9xdGktYXNzZXNzbWVudC1pdGVtJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBjbGFzcyBRdGlDb3JyZWN0IGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxzdHJpbmcgfCBzdHJpbmdbXT4ge1xuICBnZXQgaW50ZXJwcmV0YXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKCdpbnRlcnByZXRhdGlvbicpIHx8ICcnO1xuICB9XG5cbiAgb3ZlcnJpZGUgZ2V0UmVzdWx0KCkge1xuICAgIGNvbnN0IGlkZW50aWZpZXIgPSB0aGlzLmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpIHx8ICcnO1xuICAgIGNvbnN0IHJlc3BvbnNlVmFyaWFibGUgPSAodGhpcy5jbG9zZXN0KCdxdGktYXNzZXNzbWVudC1pdGVtJykgYXMgUXRpQXNzZXNzbWVudEl0ZW0pLmdldFJlc3BvbnNlKGlkZW50aWZpZXIpO1xuICAgIHJlc3BvbnNlVmFyaWFibGUuY29ycmVjdFJlc3BvbnNlO1xuICAgIGlmIChyZXNwb25zZVZhcmlhYmxlLmNhcmRpbmFsaXR5ICE9PSAnc2luZ2xlJykge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlVmFyaWFibGUuY29ycmVjdFJlc3BvbnNlLmxlbmd0aCA+IDAgPyByZXNwb25zZVZhcmlhYmxlLmNvcnJlY3RSZXNwb25zZVswXSA6ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2VWYXJpYWJsZS5jb3JyZWN0UmVzcG9uc2U7XG4gICAgfVxuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLWNvcnJlY3QnLCBRdGlDb3JyZWN0KTtcbiIsICJpbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxuZXhwb3J0IGNsYXNzIFF0aUVxdWFsUm91bmRlZCBleHRlbmRzIFF0aUV4cHJlc3Npb248Ym9vbGVhbj4ge1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSkgcm91bmRpbmdNb2RlOiAnZGVjaW1hbFBsYWNlcycgfCAnc2lnbmlmaWNhbnRGaWd1cmVzJyA9ICdzaWduaWZpY2FudEZpZ3VyZXMnO1xuXG4gIGdldCBmaWd1cmVzKCkge1xuICAgIGNvbnN0IGF0dHIgPSB0aGlzLmdldEF0dHJpYnV0ZSgnZmlndXJlcycpO1xuICAgIGlmICghYXR0cikge1xuICAgICAgY29uc29sZS5lcnJvcignZmlndXJlcyBhdHRyaWJ1dGUgaXMgbWlzc2luZycpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGZpZ3VyZXMgPSBwYXJzZUludCh0aGlzLmdldEF0dHJpYnV0ZSgnZmlndXJlcycpIHx8ICcwJyk7XG4gICAgaWYgKGlzTmFOKGZpZ3VyZXMpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdmaWd1cmVzIGF0dHJpYnV0ZSBpcyBub3QgYSBudW1iZXInKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAoZmlndXJlcyA8IDApIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2ZpZ3VyZXMgYXR0cmlidXRlIGlzIG5lZ2F0aXZlJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKGZpZ3VyZXMgPCAxICYmIHRoaXMucm91bmRpbmdNb2RlID09PSAnc2lnbmlmaWNhbnRGaWd1cmVzJykge1xuICAgICAgY29uc29sZS5lcnJvcignZmlndXJlcyBjYW5ub3QgYmUgc21hbGxlciB0aGFuIDEgZm9yIFJvdW5kaW5nTW9kZSBzaWduaWZpY2FudEZpZ3VyZXMnKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gZmlndXJlcztcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKSB7XG4gICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAyKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldFZhcmlhYmxlcygpIGFzIFJlc3BvbnNlVmFyaWFibGVbXTtcbiAgICAgIGNvbnN0IHZhbHVlMSA9IHZhbHVlc1swXTtcbiAgICAgIGNvbnN0IHZhbHVlMiA9IHZhbHVlc1sxXTtcbiAgICAgIGlmICh0aGlzLnJvdW5kaW5nTW9kZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgdmFsdWUxLmNhcmRpbmFsaXR5ICE9PSAnc2luZ2xlJyB8fFxuICAgICAgICB2YWx1ZTIuY2FyZGluYWxpdHkgIT09ICdzaW5nbGUnIHx8XG4gICAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUxLnZhbHVlKSB8fFxuICAgICAgICBBcnJheS5pc0FycmF5KHZhbHVlMi52YWx1ZSlcbiAgICAgICkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIGNhcmRpbmFsaXR5IGluIHF0aSBlcXVhbCcpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBzd2l0Y2ggKHZhbHVlc1swXS5iYXNlVHlwZSkge1xuICAgICAgICBjYXNlICdpbnRlZ2VyJzpcbiAgICAgICAgY2FzZSAnZmxvYXQnOiB7XG4gICAgICAgICAgY29uc3QgZmxvYXQxID0gcGFyc2VGbG9hdCh2YWx1ZTEudmFsdWUgYXMgc3RyaW5nKTtcbiAgICAgICAgICBjb25zdCBmbG9hdDIgPSBwYXJzZUZsb2F0KHZhbHVlMi52YWx1ZSBhcyBzdHJpbmcpO1xuXG4gICAgICAgICAgaWYgKCFpc05hTihmbG9hdDEpICYmICFpc05hTihmbG9hdDIpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yb3VuZGluZ01vZGUgPT09ICdzaWduaWZpY2FudEZpZ3VyZXMnKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmbG9hdDEudG9QcmVjaXNpb24odGhpcy5maWd1cmVzKSA9PT0gZmxvYXQyLnRvUHJlY2lzaW9uKHRoaXMuZmlndXJlcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIE1hdGgucm91bmQoZmxvYXQxICogTWF0aC5wb3coMTAsIHRoaXMuZmlndXJlcykpIC8gTWF0aC5wb3coMTAsIHRoaXMuZmlndXJlcykgPT09XG4gICAgICAgICAgICAgICAgTWF0aC5yb3VuZChmbG9hdDIgKiBNYXRoLnBvdygxMCwgdGhpcy5maWd1cmVzKSkgLyBNYXRoLnBvdygxMCwgdGhpcy5maWd1cmVzKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGB2YWx1ZSBjYW5ub3QgYmUgY2FzdGVkIHRvIG51bWVyaWMgdmFsdWUgaW4gZXF1YWxSb3VuZGVkIG9wZXJhdG9yOiAke2Zsb2F0MX0sICR7ZmxvYXQyfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgdmFsdWVzIG90aGVyIHRoYW4gZmxvYXQgYW5kIGludCBjYW5ub3QgYmUgdXNlZCBpbiBlcXVhbFJvdW5kZWQgb3BlcmF0b3IuYCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBudW1iZXIgb2YgY2hpbGRyZW4gaW4gcXRpLWVxdWFsLXJvdW5kZWQnKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1lcXVhbC1yb3VuZGVkJywgUXRpRXF1YWxSb3VuZGVkKTtcbiIsICJpbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgU2NvcmluZ0hlbHBlciB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9zY29yaW5nLWhlbHBlcic7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuXG5leHBvcnQgY2xhc3MgUXRpRXF1YWwgZXh0ZW5kcyBRdGlFeHByZXNzaW9uPGJvb2xlYW4+IHtcbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nIH0pIHRvbGVyYW5jZU1vZGU6ICdleGFjdCcgfCAncmVsYXRpdmUnIHwgJ2Fic29sdXRlJyA9ICdleGFjdCc7XG5cbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpIHtcbiAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDIpIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0VmFyaWFibGVzKCkgYXMgUmVzcG9uc2VWYXJpYWJsZVtdO1xuICAgICAgY29uc3QgdmFsdWUxID0gdmFsdWVzWzBdO1xuICAgICAgY29uc3QgdmFsdWUyID0gdmFsdWVzWzFdO1xuICAgICAgaWYgKHRoaXMudG9sZXJhbmNlTW9kZSAhPT0gJ2V4YWN0Jykge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd0b2xlcmFuY2VNb2RlIGlzIG5vdCBzdXBwb3J0ZWQgeWV0Jyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgdmFsdWUxLmNhcmRpbmFsaXR5ICE9PSAnc2luZ2xlJyB8fFxuICAgICAgICB2YWx1ZTIuY2FyZGluYWxpdHkgIT09ICdzaW5nbGUnIHx8XG4gICAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUxLnZhbHVlKSB8fFxuICAgICAgICBBcnJheS5pc0FycmF5KHZhbHVlMi52YWx1ZSlcbiAgICAgICkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIGNhcmRpbmFsaXR5IGluIHF0aSBlcXVhbCcpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gU2NvcmluZ0hlbHBlci5jb21wYXJlU2luZ2xlVmFsdWVzKHZhbHVlMS52YWx1ZSBhcyBzdHJpbmcsIHZhbHVlMi52YWx1ZSBhcyBzdHJpbmcsIHZhbHVlMS5iYXNlVHlwZSk7XG4gICAgfVxuICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgbnVtYmVyIG9mIGNoaWxkcmVuIGluIHF0aS1lcXVhbCcpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLWVxdWFsJywgUXRpRXF1YWwpO1xuIiwgImltcG9ydCB7IEJhc2VUeXBlIH0gZnJvbSAnLi4vLi4nO1xuXG5leHBvcnQgY2xhc3MgU2NvcmluZ0hlbHBlciB7XG4gIHB1YmxpYyBzdGF0aWMgY29tcGFyZVNpbmdsZVZhbHVlcyh2YWx1ZTE6IFJlYWRvbmx5PHN0cmluZz4sIHZhbHVlMjogUmVhZG9ubHk8c3RyaW5nPiwgYmFzZVR5cGU6IEJhc2VUeXBlKTogYm9vbGVhbiB7XG4gICAgc3dpdGNoIChiYXNlVHlwZSkge1xuICAgICAgY2FzZSAnaWRlbnRpZmllcic6XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICByZXR1cm4gdmFsdWUxID09PSB2YWx1ZTI7XG4gICAgICBjYXNlICdpbnRlZ2VyJzoge1xuICAgICAgICBjb25zdCBpbnQxID0gcGFyc2VJbnQodmFsdWUxLCAxMCk7XG4gICAgICAgIGNvbnN0IGludDIgPSBwYXJzZUludCh2YWx1ZTIsIDEwKTtcbiAgICAgICAgaWYgKCFpc05hTihpbnQxKSAmJiAhaXNOYU4oaW50MikpIHtcbiAgICAgICAgICByZXR1cm4gaW50MSA9PT0gaW50MjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBDYW5ub3QgY29udmVydCAke3ZhbHVlMX0gYW5kL29yICR7dmFsdWUyfSB0byBpbnQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdmbG9hdCc6IHtcbiAgICAgICAgY29uc3QgZmxvYXQxID0gcGFyc2VGbG9hdCh2YWx1ZTEpO1xuICAgICAgICBjb25zdCBmbG9hdDIgPSBwYXJzZUZsb2F0KHZhbHVlMik7XG4gICAgICAgIGlmICghaXNOYU4oZmxvYXQxKSAmJiAhaXNOYU4oZmxvYXQyKSkge1xuICAgICAgICAgIHJldHVybiBmbG9hdDEgPT09IGZsb2F0MjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBjb3VsZG4ndCBjb252ZXJ0ICR7dmFsdWUxfSBhbmQvb3IgJHt2YWx1ZTJ9IHRvIGZsb2F0LmApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAncGFpcic6XG4gICAgICBjYXNlICdkaXJlY3RlZFBhaXInOiB7XG4gICAgICAgIGNvbnN0IHBhaXIxID0gdmFsdWUxLnNwbGl0KCcgJykuc29ydCgpO1xuICAgICAgICBjb25zdCBwYWlyMiA9IHZhbHVlMi5zcGxpdCgnICcpLnNvcnQoKTtcbiAgICAgICAgaWYgKHBhaXIxLmxlbmd0aCA9PT0gMiAmJiBwYWlyMi5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICBpZiAoYmFzZVR5cGUgPT09ICdwYWlyJykge1xuICAgICAgICAgICAgcGFpcjEuc29ydCgpO1xuICAgICAgICAgICAgcGFpcjIuc29ydCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcGFpcjEuam9pbignICcpID09PSBwYWlyMi5qb2luKCcgJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgY29tcGFyZWQgdHdvIHBhaXIgYnV0IG9uZSBvZiB0aGUgdmFsdWVzIGRvZXMgbm90IGhhdmUgMiB2YWx1ZXM6IDE6ICR7dmFsdWUxfSAyOiAke3ZhbHVlMn1gKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBjbGFzcyBRdGlHdCBleHRlbmRzIFF0aUV4cHJlc3Npb248Ym9vbGVhbj4ge1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMikge1xuICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRWYXJpYWJsZXMoKSBhcyBSZXNwb25zZVZhcmlhYmxlW107XG4gICAgICBjb25zdCB2YWx1ZTEgPSB2YWx1ZXNbMF07XG4gICAgICBjb25zdCB2YWx1ZTIgPSB2YWx1ZXNbMV07XG4gICAgICBpZiAodmFsdWUxLmJhc2VUeXBlID09PSB2YWx1ZTIuYmFzZVR5cGUgJiYgKHZhbHVlMS5iYXNlVHlwZSA9PT0gJ2ludGVnZXInIHx8IHZhbHVlMS5iYXNlVHlwZSA9PT0gJ2Zsb2F0JykpIHtcbiAgICAgICAgcmV0dXJuICt2YWx1ZTEudmFsdWUgPiArdmFsdWUyLnZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBiYXNlVHlwZSBvciBjYXJkaW5hbGl0eSBpbiBxdGkgZ3QnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBudW1iZXIgb2YgY2hpbGRyZW4gaW4gcXQnKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1ndCcsIFF0aUd0KTtcbiIsICJpbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IFF0aUNvbmRpdGlvbkV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktY29uZGl0aW9uLWV4cHJlc3Npb24nO1xuXG4vLyBQSzogRm9yIHRoZSBjb250YWlucyB3ZSBhc3N1bWUgdGhlIGV4cHJlc3Npb25zIHRvIGNhbGN1bGF0ZSBhcmUgYWxsIGRpcmVjdGVkUGFpcnNcbi8vIEkgZG9uJ3Qga25vdyBpdCB0aGlzIGluIFFUSSBpcyBhbHdheXMgdGhlIGNhc2UgaG93ZXZlcj9cbmV4cG9ydCBjbGFzcyBRdGlHdGUgZXh0ZW5kcyBRdGlDb25kaXRpb25FeHByZXNzaW9uIHtcbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDIpIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0VmFyaWFibGVzKCkgYXMgUmVzcG9uc2VWYXJpYWJsZVtdO1xuICAgICAgY29uc3QgdmFsdWUxID0gdmFsdWVzWzBdO1xuICAgICAgY29uc3QgdmFsdWUyID0gdmFsdWVzWzFdO1xuICAgICAgaWYgKHZhbHVlMS5iYXNlVHlwZSA9PT0gdmFsdWUyLmJhc2VUeXBlICYmICh2YWx1ZTEuYmFzZVR5cGUgPT09ICdpbnRlZ2VyJyB8fCB2YWx1ZTEuYmFzZVR5cGUgPT09ICdmbG9hdCcpKSB7XG4gICAgICAgIHJldHVybiArdmFsdWUxLnZhbHVlID49ICt2YWx1ZTIudmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIGJhc2VUeXBlIG9yIGNhcmRpbmFsaXR5IGluIHF0aSBndGUnKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKCd1bmV4cGVjdGVkIG51bWJlciBvZiBjaGlsZHJlbiBpbiBxdGUnKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1ndGUnLCBRdGlHdGUpO1xuIiwgImltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxuLy8gUEs6IEZvciB0aGUgY29udGFpbnMgd2UgYXNzdW1lIHRoZSBleHByZXNzaW9ucyB0byBjYWxjdWxhdGUgYXJlIGFsbCBkaXJlY3RlZFBhaXJzXG4vLyBJIGRvbid0IGtub3cgaXQgdGhpcyBpbiBRVEkgaXMgYWx3YXlzIHRoZSBjYXNlIGhvd2V2ZXI/XG5leHBvcnQgY2xhc3MgUXRpSXNOdWxsIGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxib29sZWFuPiB7XG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCB2YXJpYWJsZXMgPSB0aGlzLmdldFZhcmlhYmxlcygpIGFzIFJlc3BvbnNlVmFyaWFibGVbXTtcbiAgICAgIGlmICghdmFyaWFibGVzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgdmFsdWUgPSB2YXJpYWJsZXNbMF0udmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnO1xuICAgIH1cbiAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIG51bWJlciBvZiBjaGlsZHJlbiBpbiBxdGkgTnVsbCcpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLWlzLW51bGwnLCBRdGlJc051bGwpO1xuIiwgImltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxuZXhwb3J0IGNsYXNzIFF0aUx0IGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxib29sZWFuPiB7XG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAyKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldFZhcmlhYmxlcygpIGFzIFJlc3BvbnNlVmFyaWFibGVbXTtcbiAgICAgIGNvbnN0IHZhbHVlMSA9IHZhbHVlc1swXTtcbiAgICAgIGNvbnN0IHZhbHVlMiA9IHZhbHVlc1sxXTtcbiAgICAgIGlmICh2YWx1ZTEuYmFzZVR5cGUgPT09IHZhbHVlMi5iYXNlVHlwZSAmJiAodmFsdWUxLmJhc2VUeXBlID09PSAnaW50ZWdlcicgfHwgdmFsdWUxLmJhc2VUeXBlID09PSAnZmxvYXQnKSkge1xuICAgICAgICByZXR1cm4gK3ZhbHVlMS52YWx1ZSA8ICt2YWx1ZTIudmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIGJhc2VUeXBlIG9yIGNhcmRpbmFsaXR5IGluIHF0aSBsdCcpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIG51bWJlciBvZiBjaGlsZHJlbiBpbiBsdCcpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLWx0JywgUXRpTHQpO1xuIiwgImltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1jb25kaXRpb24tZXhwcmVzc2lvbic7XG5cbi8vIFBLOiBGb3IgdGhlIGNvbnRhaW5zIHdlIGFzc3VtZSB0aGUgZXhwcmVzc2lvbnMgdG8gY2FsY3VsYXRlIGFyZSBhbGwgZGlyZWN0ZWRQYWlyc1xuLy8gSSBkb24ndCBrbm93IGl0IHRoaXMgaW4gUVRJIGlzIGFsd2F5cyB0aGUgY2FzZSBob3dldmVyP1xuZXhwb3J0IGNsYXNzIFF0aUx0ZSBleHRlbmRzIFF0aUNvbmRpdGlvbkV4cHJlc3Npb24ge1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMikge1xuICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRWYXJpYWJsZXMoKSBhcyBSZXNwb25zZVZhcmlhYmxlW107XG4gICAgICBjb25zdCB2YWx1ZTEgPSB2YWx1ZXNbMF07XG4gICAgICBjb25zdCB2YWx1ZTIgPSB2YWx1ZXNbMV07XG4gICAgICBpZiAodmFsdWUxLmJhc2VUeXBlID09PSB2YWx1ZTIuYmFzZVR5cGUgJiYgKHZhbHVlMS5iYXNlVHlwZSA9PT0gJ2ludGVnZXInIHx8IHZhbHVlMS5iYXNlVHlwZSA9PT0gJ2Zsb2F0JykpIHtcbiAgICAgICAgcmV0dXJuICt2YWx1ZTEudmFsdWUgPD0gK3ZhbHVlMi52YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgYmFzZVR5cGUgb3IgY2FyZGluYWxpdHkgaW4gcXRpIGx0ZScpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc29sZS5sb2coJ3VuZXhwZWN0ZWQgbnVtYmVyIG9mIGNoaWxkcmVuIGluIGx0ZScpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLWx0ZScsIFF0aUx0ZSk7XG4iLCAiaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBTY29yaW5nSGVscGVyIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL3Njb3JpbmctaGVscGVyJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBjbGFzcyBRdGlNYXBSZXNwb25zZSBleHRlbmRzIFF0aUV4cHJlc3Npb248bnVtYmVyPiB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KSBpZGVudGlmaWVyOiBzdHJpbmc7XG5cbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpOiBudW1iZXIge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gdGhpcy5hc3Nlc3NtZW50SXRlbS5nZXRSZXNwb25zZSh0aGlzLmlkZW50aWZpZXIpO1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIGNvbnNvbGUud2FybihgUmVzcG9uc2UgJHt0aGlzLmlkZW50aWZpZXJ9IGNhbiBub3QgYmUgZm91bmRgKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBtYXBwaW5nID0gcmVzcG9uc2UubWFwcGluZztcbiAgICBjb25zdCBjYW5kaWRhdGVSZXNwb25zZXMgPSAhQXJyYXkuaXNBcnJheShyZXNwb25zZS52YWx1ZSkgPyBbcmVzcG9uc2UudmFsdWVdIDogcmVzcG9uc2UudmFsdWU7XG4gICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgZm9yIChjb25zdCBjYW5kaWRhdGVSZXNwb25zZSBvZiBjYW5kaWRhdGVSZXNwb25zZXMpIHtcbiAgICAgIGNvbnN0IG1hcHBlZFZhbHVlID0gbWFwcGluZy5tYXBFbnRyaWVzLmZpbmQoZW50cnkgPT4ge1xuICAgICAgICByZXR1cm4gU2NvcmluZ0hlbHBlci5jb21wYXJlU2luZ2xlVmFsdWVzKGVudHJ5Lm1hcEtleSwgY2FuZGlkYXRlUmVzcG9uc2UsIHJlc3BvbnNlLmJhc2VUeXBlKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKCEobWFwcGVkVmFsdWUgPT0gbnVsbCB8fCBtYXBwZWRWYWx1ZS5tYXBwZWRWYWx1ZSA9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgIHJlc3VsdCArPSBtYXBwZWRWYWx1ZS5tYXBwZWRWYWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCArPSBtYXBwaW5nLmRlZmF1bHRWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG1hcHBpbmcubG93ZXJCb3VuZCAhPSBudWxsKSB7XG4gICAgICByZXN1bHQgPSBNYXRoLm1heChtYXBwaW5nLmxvd2VyQm91bmQsIHJlc3VsdCk7XG4gICAgfVxuICAgIGlmIChtYXBwaW5nLnVwcGVyQm91bmQgIT0gbnVsbCkge1xuICAgICAgcmVzdWx0ID0gTWF0aC5taW4obWFwcGluZy51cHBlckJvdW5kLCByZXN1bHQpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLW1hcC1yZXNwb25zZScsIFF0aU1hcFJlc3BvbnNlKTtcbiIsICJpbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gXCJsaXQvZGVjb3JhdG9ycy5qc1wiO1xuaW1wb3J0IHsgTGl0RWxlbWVudCB9IGZyb20gXCJsaXRcIjtcblxuZXhwb3J0IGNsYXNzIFF0aU1hcHBpbmcgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiBcImRlZmF1bHQtdmFsdWVcIiwgdHlwZTogTnVtYmVyIH0pIGRlZmF1bHRWYWx1ZTogbnVtYmVyID0gMDtcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiBcImxvd2VyLWJvdW5kXCIsIHR5cGU6IE51bWJlciB9KSBsb3dlckJvdW5kOiBudW1iZXI7XG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogXCJ1cHBlci1ib3VuZFwiLCB0eXBlOiBOdW1iZXIgfSkgdXBwZXJCb3VuZDogbnVtYmVyO1xuXG4gIFxuICBwdWJsaWMgZ2V0IG1hcEVudHJpZXMoKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsKFwicXRpLW1hcC1lbnRyeVwiKSkubWFwKChlbCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWFwS2V5OiBlbC5nZXRBdHRyaWJ1dGUoXCJtYXAta2V5XCIpLFxuICAgICAgICBtYXBwZWRWYWx1ZTogK2VsLmdldEF0dHJpYnV0ZShcIm1hcHBlZC12YWx1ZVwiKSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwicXRpLW1hcHBpbmdcIiwgUXRpTWFwcGluZyk7XG4iLCAiaW1wb3J0IHsgUmVzcG9uc2VWYXJpYWJsZSB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBTY29yaW5nSGVscGVyIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL3Njb3JpbmctaGVscGVyJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBjbGFzcyBRdGlNYXRjaCBleHRlbmRzIFF0aUV4cHJlc3Npb248Ym9vbGVhbj4ge1xuICAvL1BLIDogRklYTUUuXG4gIC8vIFRoaXMgd2FzIGEgbGl0dGxlIGV4cGVyaW1lbnQgaWYgd2UgY291bGQgY2FsbCB0aGUgbWF0Y2ggZnVuY3Rpb24gYXMgYSBzdGF0aWMgZnVuY3Rpb24sXG4gIC8vIFRoaXMgY2FuIGJlIHVzZWQgZm9yIGFsbCBraW5kIG9mIHRoaW5ncywgYnV0IG5vdyBlc3BlY2lhbGx5IGZvciB1c2UgaW5cbiAgLy8gcXRpLXJlc3BvbnNlLWNvbmRpdGlvbi1zY3JpcHRcbiAgLy8gaW4gd2hpY2ggd2UgcGFzcyB0aGUgZXhwcmVzc2lvbnMgYXMgcHVyZSBmdW5jdGlvbnMsIGFuZCBob3BlIGZvciB0aGUgYmVzdC5cbiAgLy8gU0FETFksIHRoZSBnZXRWYXJpYWJsZXMgdGhyb3dzIHJvZXQgaW4gZGUgZXRlbi4uIHdlZXQgbm9nIG5pZXQgcHJlY2llcyBob2UgZGV6ZSB3ZXJrdC5cbiAgLy8gTWFhciBpayBnYSBlcmluIGR1aWtlbi5cbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpIHtcbiAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDIpIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0VmFyaWFibGVzKCkgYXMgUmVzcG9uc2VWYXJpYWJsZVtdO1xuICAgICAgY29uc3QgdmFsdWVUb01hcCA9IHZhbHVlc1swXTtcbiAgICAgIGNvbnN0IGNvcnJlY3RWYWx1ZUluZm8gPSB2YWx1ZXNbMV07XG4gICAgICByZXR1cm4gUXRpTWF0Y2gubWF0Y2godmFsdWVUb01hcCwgY29ycmVjdFZhbHVlSW5mbyk7XG4gICAgfVxuXG4gICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBudW1iZXIgb2YgY2hpbGRyZW4gaW4gbWF0Y2gnKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgbWF0Y2godmFsdWVUb01hcDogUmVzcG9uc2VWYXJpYWJsZSwgY29ycmVjdFZhbHVlSW5mbzogUmVzcG9uc2VWYXJpYWJsZSkge1xuICAgIHN3aXRjaCAoY29ycmVjdFZhbHVlSW5mby5jYXJkaW5hbGl0eSkge1xuICAgICAgY2FzZSAnc2luZ2xlJzoge1xuICAgICAgICBpZiAodmFsdWVUb01hcC52YWx1ZSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZVRvTWFwLnZhbHVlKSB8fCBBcnJheS5pc0FycmF5KGNvcnJlY3RWYWx1ZUluZm8udmFsdWUpKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBjYXJkaW5hbGl0eSBpbiBxdGkgbWF0Y2gnKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFNjb3JpbmdIZWxwZXIuY29tcGFyZVNpbmdsZVZhbHVlcyhcbiAgICAgICAgICB2YWx1ZVRvTWFwLnZhbHVlPy50b1N0cmluZygpLFxuICAgICAgICAgIGNvcnJlY3RWYWx1ZUluZm8udmFsdWUudG9TdHJpbmcoKSxcbiAgICAgICAgICBjb3JyZWN0VmFsdWVJbmZvLmJhc2VUeXBlXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ29yZGVyZWQnOiB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZVRvTWFwLnZhbHVlKSB8fCAhQXJyYXkuaXNBcnJheShjb3JyZWN0VmFsdWVJbmZvLnZhbHVlKSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgY2FyZGluYWxpdHkgaW4gcXRpIG1hdGNoJyk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZVRvTWFwLnZhbHVlLmxlbmd0aCAhPT0gY29ycmVjdFZhbHVlSW5mby52YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZVRvTWFwLnZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gU2NvcmluZ0hlbHBlci5jb21wYXJlU2luZ2xlVmFsdWVzKFxuICAgICAgICAgICAgY29ycmVjdFZhbHVlSW5mby52YWx1ZVtpXSxcbiAgICAgICAgICAgIHZhbHVlVG9NYXAudmFsdWVbaV0sXG4gICAgICAgICAgICBjb3JyZWN0VmFsdWVJbmZvLmJhc2VUeXBlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnbXVsdGlwbGUnOiB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZVRvTWFwLnZhbHVlKSB8fCAhQXJyYXkuaXNBcnJheShjb3JyZWN0VmFsdWVJbmZvLnZhbHVlKSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgY2FyZGluYWxpdHkgaW4gcXRpIG1hdGNoJyk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZVRvTWFwLnZhbHVlLmxlbmd0aCAhPT0gY29ycmVjdFZhbHVlSW5mby52YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGFuc3dlckluZGV4ID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBjb3JyZWN0QW5zd2VyIG9mIGNvcnJlY3RWYWx1ZUluZm8udmFsdWUpIHtcbiAgICAgICAgICBsZXQgbWF0Y2hpbmdWYWx1ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgICAgICAgY29uc3QgYXJyID0gWy4uLnZhbHVlVG9NYXAudmFsdWVdO1xuICAgICAgICAgIGZvciAoY29uc3QgbXYgb2YgYXJyKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBTY29yaW5nSGVscGVyLmNvbXBhcmVTaW5nbGVWYWx1ZXMoY29ycmVjdEFuc3dlciwgbXYsIGNvcnJlY3RWYWx1ZUluZm8uYmFzZVR5cGUpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICBtYXRjaGluZ1ZhbHVlID0gbXY7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobWF0Y2hpbmdWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgKGFyciBhcyBzdHJpbmdbXSkuc3BsaWNlKGFyci5pbmRleE9mKG1hdGNoaW5nVmFsdWUpLCAxKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhbnN3ZXJJbmRleCsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIGNhcmRpbmFsaXR5IGluIHF0aSBtYXRjaCcpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLW1hdGNoJywgUXRpTWF0Y2gpO1xuIiwgImltcG9ydCB7IFJlc3BvbnNlVmFyaWFibGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC92YXJpYWJsZXMnO1xuaW1wb3J0IHsgUXRpRXhwcmVzc2lvbiB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxuZXhwb3J0IGNsYXNzIFF0aU1lbWJlciBleHRlbmRzIFF0aUV4cHJlc3Npb248Ym9vbGVhbiB8IG51bGw+IHtcbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpIHtcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldFZhcmlhYmxlcygpIGFzIFJlc3BvbnNlVmFyaWFibGVbXTtcblxuICAgIGlmICghKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAyKSkge1xuICAgICAgY29uc29sZS53YXJuKCdUaGUgbWVtYmVyIG9wZXJhdG9yIHRha2VzIHR3byBzdWItZXhwcmVzc2lvbnMnKTtcbiAgICB9XG5cbiAgICBjb25zdCBbdmFsdWUxLCB2YWx1ZTJdID0gdmFsdWVzO1xuXG4gICAgaWYgKCEodmFsdWUxLmJhc2VUeXBlID09PSB2YWx1ZTIuYmFzZVR5cGUpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1doaWNoIG11c3QgYm90aCBoYXZlIHRoZSBzYW1lIGJhc2UtdHlwZScpO1xuICAgIH1cbiAgICBpZiAoISh2YWx1ZTIuY2FyZGluYWxpdHkgPT09ICdtdWx0aXBsZScgfHwgdmFsdWUyLmNhcmRpbmFsaXR5ID09PSAnb3JkZXJlZCcpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ2FuZCB0aGUgc2Vjb25kIG11c3QgYmUgYSBtdWx0aXBsZSBvciBvcmRlcmVkIGNvbnRhaW5lcicpO1xuICAgIH1cbiAgICBpZiAodmFsdWUxLmJhc2VUeXBlID09PSAnZmxvYXQnIHx8IHZhbHVlMi5iYXNlVHlwZSA9PT0gJ2Zsb2F0Jykge1xuICAgICAgY29uc29sZS53YXJuKCdUaGUgbWVtYmVyIG9wZXJhdG9yIHNob3VsZCBub3QgYmUgdXNlZCBvbiBzdWItZXhwcmVzc2lvbnMgd2l0aCBhIGJhc2UtdHlwZSBvZiBmbG9hdCcpO1xuICAgIH1cbiAgICBpZiAodmFsdWUxLmJhc2VUeXBlID09PSAnZHVyYXRpb24nIHx8IHZhbHVlMi5iYXNlVHlwZSA9PT0gJ2R1cmF0aW9uJykge1xuICAgICAgY29uc29sZS53YXJuKCdJdCBtdXN0IG5vdCBiZSB1c2VkIG9uIHN1Yi1leHByZXNzaW9ucyB3aXRoIGEgYmFzZS10eXBlIG9mIGR1cmF0aW9uJyk7XG4gICAgfVxuXG4gICAgLy8gSWYgZWl0aGVyIHN1Yi1leHByZXNzaW9uIGlzIE5VTEwgdGhlbiB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRvciBpcyBOVUxMXG4gICAgaWYgKHZhbHVlMS52YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZTIudmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIFRoZSByZXN1bHQgaXMgYSBzaW5nbGUgYm9vbGVhbiB3aXRoIGEgdmFsdWUgb2YgJ3RydWUnIGlmIHRoZSB2YWx1ZSBnaXZlbiBieSB0aGUgZmlyc3Qgc3ViLWV4cHJlc3Npb24gaXMgaW4gdGhlIGNvbnRhaW5lciBkZWZpbmVkIGJ5IHRoZSBzZWNvbmQgc3ViLWV4cHJlc3Npb24uXG4gICAgY29uc3QgcHJvamVjdGlvbjEgPSB2YWx1ZTEudmFsdWUgYXMgc3RyaW5nO1xuICAgIGNvbnN0IHByb2plY3Rpb24yID0gdmFsdWUyLnZhbHVlIGFzIHN0cmluZ1tdO1xuICAgIHJldHVybiBwcm9qZWN0aW9uMi5pbmNsdWRlcyhwcm9qZWN0aW9uMSk7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktbWVtYmVyJywgUXRpTWVtYmVyKTtcbiIsICJpbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlLCBWYXJpYWJsZURlY2xhcmF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5leHBvcnQgY2xhc3MgUXRpTXVsdGlwbGUgZXh0ZW5kcyBRdGlFeHByZXNzaW9uPFZhcmlhYmxlRGVjbGFyYXRpb248c3RyaW5nIHwgc3RyaW5nW10+W10+IHtcbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpOiBSZXNwb25zZVZhcmlhYmxlW10ge1xuICAgIGNvbnN0IHZhcmlhYmxlcyA9IHRoaXMuZ2V0VmFyaWFibGVzKCkgYXMgUmVzcG9uc2VWYXJpYWJsZVtdO1xuICAgIGlmICh2YXJpYWJsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIG51bWJlciBvZiBjaGlsZHJlbiBpbiBxdGkgbXVsdGlwbGUnKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHZhcmlhYmxlIG9mIHZhcmlhYmxlcykge1xuICAgICAgaWYgKHZhcmlhYmxlLmNhcmRpbmFsaXR5ICE9PSAnbXVsdGlwbGUnICYmIHZhcmlhYmxlLmNhcmRpbmFsaXR5ICE9PSAnc2luZ2xlJykge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIGNhcmRpbmFsaXR5IGluIHF0aSBtdWx0aXBsZScpO1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gY29uc3QgdmFsdWVzID0gdmFyaWFibGVzLm1hcCh2ID0+IHYudmFsdWUpO1xuICAgIC8vIGNvbnNvbGUubG9nKHZhcmlhYmxlcyk7XG4gICAgLy8gY29uc3QgZmxhdHRlbmVkQXJyYXkgPSB2YWx1ZXMucmVkdWNlKChhY2M6IHN0cmluZ1tdLCB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pID0+IHtcbiAgICAvLyAgIHJldHVybiBhY2MuY29uY2F0KEFycmF5LmlzQXJyYXkodmFsdWUpID8gWy4uLnZhbHVlXSA6IHZhbHVlKTtcbiAgICAvLyB9LCBbXSk7XG4gICAgLy8gcmV0dXJuIGZsYXR0ZW5lZEFycmF5O1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlcztcbiAgfVxufVxuXG5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3F0aS1tdWx0aXBsZScsIFF0aU11bHRpcGxlKTtcbiIsICJpbXBvcnQgeyBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBjbGFzcyBRdGlOb3QgZXh0ZW5kcyBRdGlFeHByZXNzaW9uPGJvb2xlYW4+IHtcbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYCR7c3VwZXIucmVuZGVyKCl9YDtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKSB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IHRoaXMuZmlyc3RFbGVtZW50Q2hpbGQgYXMgUXRpRXhwcmVzc2lvbjxib29sZWFuPjtcbiAgICBjb25zdCByZXN1bHQgPSBleHByZXNzaW9uLmNhbGN1bGF0ZSgpIGFzIGJvb2xlYW47XG4gICAgcmV0dXJuICFyZXN1bHQ7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktbm90JywgUXRpTm90KTtcbiIsICJpbXBvcnQgeyBRdGlDb25kaXRpb25FeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWNvbmRpdGlvbi1leHByZXNzaW9uJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBjbGFzcyBRdGlPciBleHRlbmRzIFF0aUNvbmRpdGlvbkV4cHJlc3Npb24ge1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCkge1xuICAgIC8vIGNoaWxkcmVuIGNhbiBiZSBhIG1peCBvZiBxdGktZXhwcmVzc2lvbiBhbmQgcXRpLWNvbmRpdGlvbi1leHByZXNzaW9uXG4gICAgY29uc3QgdmFsdWVzID0gQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKS5tYXAoYyA9PiB7XG4gICAgICBjb25zdCBjb25kaXRpb24gPSBjIGFzIFF0aUV4cHJlc3Npb248YW55PjtcbiAgICAgIGlmICghY29uZGl0aW9uLmNhbGN1bGF0ZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiRWxlbWVudCBkb2Vzbid0IGltcGxlbWVudCBRdGlDb25kaXRpb25FeHByZXNzaW9uXCIpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGxldCB2YWx1ZSA9IGNvbmRpdGlvbi5jYWxjdWxhdGUoKSBhcyBCb29sZWFuO1xuICAgICAgLy8gY29udmVydCBzdHJpbmcgdmFsdWUgdG8gYm9vbGVhbiBhbmQgcmV0dXJuIG51bGwgaWYgbm90IHBvc3NpYmxlXG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAodmFsdWUgPT09ICd0cnVlJykge1xuICAgICAgICAgIHZhbHVlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJ2ZhbHNlJykge1xuICAgICAgICAgIHZhbHVlID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCB2YWx1ZSBpbiBxdGktb3IsIGV4cGVjdGVkIGJvb2xlYW4nKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0pO1xuICAgIHJldHVybiB2YWx1ZXMuc29tZShlID0+IHtcbiAgICAgIHJldHVybiB0eXBlb2YgZSA9PT0gJ2Jvb2xlYW4nICYmIGU7XG4gICAgfSk7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktb3InLCBRdGlPcik7XG4iLCAiaW1wb3J0IHsgUmVzcG9uc2VWYXJpYWJsZSB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuZXhwb3J0IGNsYXNzIFF0aU9yZGVyZWQgZXh0ZW5kcyBRdGlFeHByZXNzaW9uPFJlc3BvbnNlVmFyaWFibGVbXT4ge1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UmVzdWx0KCk6IFJlc3BvbnNlVmFyaWFibGVbXSB7XG4gICAgY29uc3QgdmFyaWFibGVzID0gdGhpcy5nZXRWYXJpYWJsZXMoKSBhcyBSZXNwb25zZVZhcmlhYmxlW107XG4gICAgaWYgKHZhcmlhYmxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgbnVtYmVyIG9mIGNoaWxkcmVuIGluIHF0aSBtdWx0aXBsZScpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdmFyaWFibGUgb2YgdmFyaWFibGVzKSB7XG4gICAgICBpZiAodmFyaWFibGUuY2FyZGluYWxpdHkgIT09ICdvcmRlcmVkJyAmJiB2YXJpYWJsZS5jYXJkaW5hbGl0eSAhPT0gJ3NpbmdsZScpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBjYXJkaW5hbGl0eSBpbiBxdGkgb3JkZXJlZCcpO1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YXJpYWJsZXM7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktb3JkZXJlZCcsIFF0aU9yZGVyZWQpO1xuIiwgImltcG9ydCB7IGNvbnN1bWUgfSBmcm9tICdAbGl0L2NvbnRleHQnO1xuaW1wb3J0IHsgTGl0RWxlbWVudCwgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBwcm9wZXJ0eSwgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBJdGVtQ29udGV4dCwgaXRlbUNvbnRleHQgfSBmcm9tICdzcmMvbGliL3F0aS1jb21wb25lbnRzL3F0aS1hc3Nlc3NtZW50LWl0ZW0vcXRpLWFzc2Vzc21lbnQtaXRlbS5jb250ZXh0JztcbmltcG9ydCB7IFF0aUFzc2Vzc21lbnRJdGVtIH0gZnJvbSAnLi4vLi4vLi4vcXRpLWFzc2Vzc21lbnQtaXRlbS9xdGktYXNzZXNzbWVudC1pdGVtJztcblxuZXhwb3J0IGNsYXNzIFF0UHJpbnRlZFZhcmlhYmxlIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KVxuICBpZGVudGlmaWVyOiBzdHJpbmc7XG5cbiAgQGNvbnN1bWUoeyBjb250ZXh0OiBpdGVtQ29udGV4dCwgc3Vic2NyaWJlOiB0cnVlIH0pXG4gIEBzdGF0ZSgpXG4gIHB1YmxpYyBpdGVtQ29udGV4dD86IEl0ZW1Db250ZXh0O1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaXRlbUNvbnRleHQ/LnZhcmlhYmxlcy5maW5kKHYgPT4gdi5pZGVudGlmaWVyID09PSB0aGlzLmlkZW50aWZpZXIpPy52YWx1ZTtcbiAgICByZXR1cm4gaHRtbGAke0pTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCAyKX1gO1xuICB9XG5cbiAgLy8gY29uc3RydWN0b3IoKSB7XG4gIC8vICAgc3VwZXIoKTtcbiAgLy8gICBjb25zdCBhc3Nlc3NtZW50SXRlbSA9IHRoaXMuY2xvc2VzdCgncXRpLWFzc2Vzc21lbnQtaXRlbScpIGFzIFF0aUFzc2Vzc21lbnRJdGVtO1xuICAvLyAgIGFzc2Vzc21lbnRJdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1yZXNwb25zZS1wcm9jZXNzZWQnLCAoKSA9PiB7XG4gIC8vICAgICB0aGlzLnZhbHVlID0gdGhpcy5jYWxjdWxhdGUoKSBhcyBzdHJpbmc7XG4gIC8vICAgfSk7XG4gIC8vIH1cblxuICAvLyBwdWJsaWMgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gIC8vICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgLy8gICB0aGlzLnZhbHVlID0gdGhpcy5jYWxjdWxhdGUoKSBhcyBzdHJpbmc7XG4gIC8vIH1cblxuICBwdWJsaWMgY2FsY3VsYXRlKCk6IFJlYWRvbmx5PHN0cmluZyB8IHN0cmluZ1tdPiB7XG4gICAgY29uc3QgYXNzZXNzbWVudEl0ZW0gPSB0aGlzLmNsb3Nlc3QoJ3F0aS1hc3Nlc3NtZW50LWl0ZW0nKSBhcyBRdGlBc3Nlc3NtZW50SXRlbTtcbiAgICBjb25zdCBpZGVudGlmaWVyID0gdGhpcy5pZGVudGlmaWVyO1xuICAgIGNvbnN0IHJlc3VsdCA9IGFzc2Vzc21lbnRJdGVtLmdldFZhcmlhYmxlKGlkZW50aWZpZXIpLnZhbHVlO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktcHJpbnRlZC12YXJpYWJsZScsIFF0UHJpbnRlZFZhcmlhYmxlKTtcbiIsICJpbXBvcnQgeyBSZXNwb25zZVZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvdmFyaWFibGVzJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBjbGFzcyBRdGlQcm9kdWN0IGV4dGVuZHMgUXRpRXhwcmVzc2lvbjxudW1iZXI+IHtcbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpIHtcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldFZhcmlhYmxlcygpIGFzIFJlc3BvbnNlVmFyaWFibGVbXTtcbiAgICBjb25zdCBwcm9kdWN0ID0gdmFsdWVzLnJlZHVjZSgoYWNjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSkgPT4ge1xuICAgICAgaWYgKGN1cnJlbnRWYWx1ZS5iYXNlVHlwZSA9PSAnZmxvYXQnIHx8IGN1cnJlbnRWYWx1ZS5iYXNlVHlwZSA9PSAnaW50ZWdlcicpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gYWNjdW11bGF0b3IgKiBwYXJzZUludChjdXJyZW50VmFsdWUudmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKGBjYW4gbm90IGNvbnZlcnQgdG8gbnVtYmVyYCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgaGFzIGFub3RoZXIgYmFzZVR5cGUgJHtjdXJyZW50VmFsdWUuYmFzZVR5cGV9YCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gICAgfSwgMSk7XG4gICAgcmV0dXJuIHByb2R1Y3Q7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktcHJvZHVjdCcsIFF0aVByb2R1Y3QpO1xuIiwgImltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgUmVzcG9uc2VWYXJpYWJsZSB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFsL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBTY29yaW5nSGVscGVyIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL3Njb3JpbmctaGVscGVyJztcbmltcG9ydCB7IFF0aUV4cHJlc3Npb24gfSBmcm9tICcuLi9xdGktZXhwcmVzc2lvbic7XG5cbmV4cG9ydCBjbGFzcyBRdGlTdHJpbmdNYXRjaCBleHRlbmRzIFF0aUV4cHJlc3Npb248Ym9vbGVhbj4ge1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2Nhc2Utc2Vuc2l0aXZlJyB9KSBjYXNlU2Vuc2l0aXZlID0gJ3RydWUnO1xuXG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKSB7XG4gICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAyKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldFZhcmlhYmxlcygpIGFzIFJlc3BvbnNlVmFyaWFibGVbXTtcbiAgICAgIGNvbnN0IHZhbHVlMSA9IHZhbHVlc1swXTtcbiAgICAgIGNvbnN0IHZhbHVlMiA9IHZhbHVlc1sxXTtcbiAgICAgIGlmIChcbiAgICAgICAgdmFsdWUxLmNhcmRpbmFsaXR5ICE9PSAnc2luZ2xlJyB8fFxuICAgICAgICB2YWx1ZTIuY2FyZGluYWxpdHkgIT09ICdzaW5nbGUnIHx8XG4gICAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUxLnZhbHVlKSB8fFxuICAgICAgICBBcnJheS5pc0FycmF5KHZhbHVlMi52YWx1ZSlcbiAgICAgICkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd1bmV4cGVjdGVkIGNhcmRpbmFsaXR5IGluIHF0aSBzdHJpbmctbWF0Y2gnKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgY29uc3QgdjEgPSB0aGlzLmNhc2VTZW5zaXRpdmUgPT09ICd0cnVlJyA/IHZhbHVlMS52YWx1ZSA6ICh2YWx1ZTEudmFsdWUgYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgdjIgPSB0aGlzLmNhc2VTZW5zaXRpdmUgPT09ICd0cnVlJyA/IHZhbHVlMi52YWx1ZSA6ICh2YWx1ZTIudmFsdWUgYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIFNjb3JpbmdIZWxwZXIuY29tcGFyZVNpbmdsZVZhbHVlcyh2MSBhcyBzdHJpbmcsIHYyIGFzIHN0cmluZywgdmFsdWUxLmJhc2VUeXBlKTtcbiAgICB9XG4gICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCBudW1iZXIgb2YgY2hpbGRyZW4gaW4gcXRpLXN0cmluZy1tYXRjaCcpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLXN0cmluZy1tYXRjaCcsIFF0aVN0cmluZ01hdGNoKTtcbiIsICJpbXBvcnQgeyBRdGlFeHByZXNzaW9uLCBRdGlFeHByZXNzaW9uQmFzZSB9IGZyb20gJy4uL3F0aS1leHByZXNzaW9uJztcblxuZXhwb3J0IGNsYXNzIFF0aVN1bSBleHRlbmRzIFF0aUV4cHJlc3Npb248bnVtYmVyPiB7XG4gIHByaXZhdGUgX2V4cHJlc3Npb246IFF0aVN1bUV4cHJlc3Npb247XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fZXhwcmVzc2lvbiA9IG5ldyBRdGlTdW1FeHByZXNzaW9uKEFycmF5LmZyb20odGhpcy5jaGlsZHJlbiBhcyB1bmtub3duIGFzIFF0aUV4cHJlc3Npb25CYXNlPG51bWJlcj5bXSkpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGdldFJlc3VsdCgpIHtcbiAgICAvLyBjaGlsZHJlbiBjYW4gYmUgYSBtaXggb2YgcXRpLWV4cHJlc3Npb24gYW5kIHF0aS1jb25kaXRpb24tZXhwcmVzc2lvblxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZXhwcmVzc2lvbi5jYWxjdWxhdGUoKTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFF0aVN1bUV4cHJlc3Npb24gaW1wbGVtZW50cyBRdGlFeHByZXNzaW9uQmFzZTxudW1iZXI+IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBleHByZXNzaW9uczogUXRpRXhwcmVzc2lvbkJhc2U8bnVtYmVyPltdKSB7fVxuXG4gIHB1YmxpYyBjYWxjdWxhdGUoKSB7XG4gICAgY29uc3QgdmFsdWVzID0gdGhpcy5leHByZXNzaW9ucy5tYXAoYyA9PiB7XG4gICAgICBpZiAoIWMuY2FsY3VsYXRlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFbGVtZW50IGRvZXNuJ3QgaW1wbGVtZW50IFF0aUNvbmRpdGlvbkV4cHJlc3Npb25cIik7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgdmFsdWUgPSBjLmNhbGN1bGF0ZSgpO1xuICAgICAgaWYgKE51bWJlci5pc05hTih2YWx1ZSkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcigndW5leHBlY3RlZCB2YWx1ZSBpbiBxdGktc3VtLCBleHBlY3RlZCBudW1iZXInKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBOdW1iZXIodmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiB2YWx1ZXMucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCk7XG4gIH1cbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktc3VtJywgUXRpU3VtKTtcbiIsICJpbXBvcnQgeyBRdGlBc3Nlc3NtZW50SXRlbSB9IGZyb20gJy4uLy4uLy4uL3F0aS1hc3Nlc3NtZW50LWl0ZW0vcXRpLWFzc2Vzc21lbnQtaXRlbSc7XG5pbXBvcnQgeyBRdGlFeHByZXNzaW9uIH0gZnJvbSAnLi4vcXRpLWV4cHJlc3Npb24nO1xuXG5leHBvcnQgY2xhc3MgUXRpVmFyaWFibGUgZXh0ZW5kcyBRdGlFeHByZXNzaW9uPHN0cmluZyB8IHN0cmluZ1tdPiB7XG4gIHB1YmxpYyBvdmVycmlkZSBnZXRSZXN1bHQoKSB7XG4gICAgY29uc3QgaWRlbnRpZmllciA9IHRoaXMuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJyk7XG4gICAgY29uc3QgcmVzdWx0ID0gKHRoaXMuY2xvc2VzdCgncXRpLWFzc2Vzc21lbnQtaXRlbScpIGFzIFF0aUFzc2Vzc21lbnRJdGVtKS5nZXRWYXJpYWJsZShpZGVudGlmaWVyKS52YWx1ZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG5cbmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncXRpLXZhcmlhYmxlJywgUXRpVmFyaWFibGUpO1xuIiwgImltcG9ydCB7IGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgSW50ZXJhY3Rpb24gfSBmcm9tICcuLi9pbnRlcm5hbC9pbnRlcmFjdGlvbi9pbnRlcmFjdGlvbic7XG5pbXBvcnQgeyBJTVNwY2ksIE1vZHVsZVJlc29sdXRpb25Db25maWcsIFF0aVZhcmlhYmxlSlNPTiB9IGZyb20gJy4vaW50ZXJmYWNlJztcblxuZGVjbGFyZSBjb25zdCByZXF1aXJlanM6IGFueTtcbmRlY2xhcmUgY29uc3QgZGVmaW5lOiBhbnk7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktcG9ydGFibGUtY3VzdG9tLWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlQb3J0YWJsZUN1c3RvbUludGVyYWN0aW9uIGV4dGVuZHMgSW50ZXJhY3Rpb24ge1xuICBwcml2YXRlIGludGVydmFsSWQ6IGFueTtcbiAgcHJpdmF0ZSByYXdSZXNwb25zZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgcGNpOiBJTVNwY2k8dW5rbm93bj47XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdyZXNwb25zZS1pZGVudGlmaWVyJyB9KVxuICByZXNwb25zZUlkZW50aWZpZXI6IHN0cmluZztcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ21vZHVsZScgfSlcbiAgbW9kdWxlOiBzdHJpbmc7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdjdXN0b20taW50ZXJhY3Rpb24tdHlwZS1pZGVudGlmaWVyJyB9KVxuICBjdXN0b21JbnRlcmFjdGlvblR5cGVJZGVudGlmaWVyOiBzdHJpbmc7XG5cbiAgQHN0YXRlKClcbiAgcHJpdmF0ZSBfZXJyb3JNZXNzYWdlOiBzdHJpbmcgPSBudWxsO1xuXG4gIHByaXZhdGUgY29udmVydFF0aVZhcmlhYmxlSlNPTihpbnB1dDogUXRpVmFyaWFibGVKU09OKTogc3RyaW5nIHwgc3RyaW5nW10ge1xuICAgIGZvciAoY29uc3QgdG9wTGV2ZWxLZXkgaW4gaW5wdXQpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgIGlmIChpbnB1dC5oYXNPd25Qcm9wZXJ0eSh0b3BMZXZlbEtleSkpIHtcbiAgICAgICAgY29uc3QgbmVzdGVkT2JqZWN0ID0gaW5wdXRbdG9wTGV2ZWxLZXkgYXMgJ2xpc3QnIHwgJ2Jhc2UnXTtcbiAgICAgICAgaWYgKG5lc3RlZE9iamVjdCkge1xuICAgICAgICAgIGZvciAoY29uc3QgbmVzdGVkS2V5IGluIG5lc3RlZE9iamVjdCkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgICAgICAgaWYgKG5lc3RlZE9iamVjdC5oYXNPd25Qcm9wZXJ0eShuZXN0ZWRLZXkpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbmVzdGVkT2JqZWN0W25lc3RlZEtleSBhcyBrZXlvZiB0eXBlb2YgbmVzdGVkT2JqZWN0XTtcbiAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm1hcChTdHJpbmcpOyAvLyBDb252ZXJ0IGVhY2ggZWxlbWVudCBpbiB0aGUgYXJyYXkgdG8gc3RyaW5nXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpOyAvLyBDb252ZXJ0IHRoZSBzaW5nbGUgdmFsdWUgdG8gc3RyaW5nXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0Q2hlY2tpbmcoKTogdm9pZCB7XG4gICAgLy8gYmVjYXVzZSB0aGUgcGNpIGRvZXNuJ3QgaGF2ZSBhIG1ldGhvZCB0byBjaGVjayBmb3IgY2hhbmdlcyB3ZSdsbCB1c2UgYW4gaW50ZXJ2YWxcbiAgICAvLyB0byBjaGVjayBpZiB0aGUgcmVzcG9uc2UgaGFzIGNoYW5nZWQuIElmIGNoYW5nZWQgd2UnbGwgc2F2ZSB0aGUgcmVzcG9uc2VcbiAgICB0aGlzLmludGVydmFsSWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IHRoaXMucGNpLmdldFJlc3BvbnNlKCk7XG4gICAgICBjb25zdCBuZXdSZXNwb25zZSA9IHRoaXMucGNpLmdldFJlc3BvbnNlKCk7XG4gICAgICBjb25zdCBzdHJpbmdpZmllZCA9IEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlKTtcbiAgICAgIGlmIChzdHJpbmdpZmllZCAhPT0gdGhpcy5yYXdSZXNwb25zZSkge1xuICAgICAgICB0aGlzLnJhd1Jlc3BvbnNlID0gc3RyaW5naWZpZWQ7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jb252ZXJ0UXRpVmFyaWFibGVKU09OKG5ld1Jlc3BvbnNlKTtcbiAgICAgICAgdGhpcy5yZXNwb25zZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnNhdmVSZXNwb25zZSh2YWx1ZSk7XG4gICAgICB9XG4gICAgfSwgMjAwKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcENoZWNraW5nKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmludGVydmFsSWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsSWQpO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlOyAvLyBGT1IgTk9XXG4gIH1cbiAgc2V0IHJlc3BvbnNlKHZhbDogUmVhZG9ubHk8c3RyaW5nIHwgc3RyaW5nW10+KSB7XG4gICAgLy8gT25seSBzZXQgc3RhdGUgaXMgc3VwcG9ydGVkIGluIGEgUENJXG4gIH1cblxuICBnZXRUQU9Db25maWcobm9kZSkge1xuICAgIGNvbnN0IGEgPSBub2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJ3Byb3BlcnRpZXMnKTtcbiAgICBsZXQgY29uZmlnID0ge307XG5cbiAgICBjb25zdCBnZXRQcm9wZXJ0eVZhbHVlID0gZWwgPT4ge1xuICAgICAgY29uc3QgcHJvcGVydHkgPSB7fTtcbiAgICAgIGNvbnN0IGtleSA9IGVsLmdldEF0dHJpYnV0ZSgna2V5Jyk7XG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gQXJyYXkuZnJvbShlbC5jaGlsZHJlbik7XG4gICAgICAgIGNvbnN0IGFsbEtleSA9IGNoaWxkcmVuLm1hcCgoYzogSFRNTEVsZW1lbnQpID0+IGMuZ2V0QXR0cmlidXRlKCdrZXknKSk7XG4gICAgICAgIGNvbnN0IGlzQXJyYXkgPSBhbGxLZXkubGVuZ3RoID4gMCAmJiAhYWxsS2V5LmZpbmQoayA9PiAhTnVtYmVyLmlzSW50ZWdlcigraykpO1xuICAgICAgICBpZiAoaXNBcnJheSkge1xuICAgICAgICAgIHByb3BlcnR5W2tleV0gPSBjaGlsZHJlbi5tYXAoYyA9PiBnZXRDaGlsZFByb3BlcnRpZXMoYykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb3BlcnR5W2tleV0gPSBlbC50ZXh0Q29udGVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHByb3BlcnR5O1xuICAgIH07XG5cbiAgICBjb25zdCBnZXRDaGlsZFByb3BlcnRpZXMgPSAoZWwpOiB7fSB8IHZvaWQgPT4ge1xuICAgICAgaWYgKGVsKSB7XG4gICAgICAgIGxldCBwcm9wZXJ0aWVzID0ge307XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgZWwuY2hpbGRyZW4pIHtcbiAgICAgICAgICBwcm9wZXJ0aWVzID0geyAuLi5wcm9wZXJ0aWVzLCAuLi5nZXRQcm9wZXJ0eVZhbHVlKGNoaWxkKSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IHByb3BlcnRpZXMgb2YgYSkge1xuICAgICAgY29uc3Qga2V5ID0gcHJvcGVydGllcy5nZXRBdHRyaWJ1dGUoJ2tleScpO1xuICAgICAgaWYgKCFrZXkpIHtcbiAgICAgICAgY29uZmlnID0geyAuLi5jb25maWcsIC4uLmdldENoaWxkUHJvcGVydGllcyhwcm9wZXJ0aWVzKSB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICB9XG4gICAgY29uc29sZS5sb2coJ0NhbiBub3QgZmluZCBxdGktY3VzdG9tLWludGVyYWN0aW9uIGNvbmZpZycpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmVnaXN0ZXIocGNpOiBJTVNwY2k8dW5rbm93bj4pIHtcbiAgICB0aGlzLnBjaSA9IHBjaTtcblxuICAgIGNvbnN0IHR5cGUgPSB0aGlzLnBhcmVudEVsZW1lbnQudGFnTmFtZSA9PT0gJ1FUSS1DVVNUT00tSU5URVJBQ1RJT04nID8gJ1RBTycgOiAnSU1TJztcbiAgICBjb25zdCBkb206IEhUTUxFbGVtZW50ID1cbiAgICAgIHR5cGUgPT0gJ0lNUycgPyB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3F0aS1pbnRlcmFjdGlvbi1tYXJrdXAnKSA6IHRoaXMucXVlcnlTZWxlY3RvcignbWFya3VwJyk7XG4gICAgZG9tLmNsYXNzTGlzdC5hZGQoJ3F0aS1jdXN0b21JbnRlcmFjdGlvbicpO1xuXG4gICAgaWYgKHR5cGUgPT0gJ1RBTycgJiYgdGhpcy5xdWVyeVNlbGVjdG9yKCdwcm9wZXJ0aWVzJykpIHtcbiAgICAgICh0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3Byb3BlcnRpZXMnKSBhcyBIVE1MRWxlbWVudCkuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWc6IGFueSA9XG4gICAgICB0eXBlID09ICdJTVMnXG4gICAgICAgID8ge1xuICAgICAgICAgICAgcHJvcGVydGllczogdGhpcy5kYXRhc2V0LFxuICAgICAgICAgICAgb25yZWFkeTogKCkgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnb25yZWFkeScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgOiB0aGlzLmdldFRBT0NvbmZpZyh0aGlzKTtcblxuICAgIHR5cGUgPT0gJ0lNUydcbiAgICAgID8gcGNpLmdldEluc3RhbmNlKGRvbSwgY29uZmlnLCB1bmRlZmluZWQpXG4gICAgICA6IChwY2kgYXMgYW55KS5pbml0aWFsaXplKHRoaXMuY3VzdG9tSW50ZXJhY3Rpb25UeXBlSWRlbnRpZmllciwgZG9tLmZpcnN0RWxlbWVudENoaWxkLCBjb25maWcpO1xuXG4gICAgaWYgKHR5cGUgPT0gJ1RBTycpIHtcbiAgICAgIGNvbnN0IGxpbmtzID0gQXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpbmsnKSkubWFwKGFjYyA9PiBhY2MuZ2V0QXR0cmlidXRlKCdocmVmJykpO1xuICAgICAgbGlua3MuZm9yRWFjaChsaW5rID0+IHtcbiAgICAgICAgY29uc3Qgc3R5bGVzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpO1xuICAgICAgICBzdHlsZXMucmVsID0gJ3N0eWxlc2hlZXQnO1xuICAgICAgICBzdHlsZXMudHlwZSA9ICd0ZXh0L2Nzcyc7XG4gICAgICAgIHN0eWxlcy5tZWRpYSA9ICdzY3JlZW4nO1xuICAgICAgICBzdHlsZXMuaHJlZiA9IGxpbms7XG4gICAgICAgIGRvbS5hcHBlbmRDaGlsZChzdHlsZXMpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuc3RhcnRDaGVja2luZygpO1xuICB9XG5cbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuICAgIGRlZmluZSgncXRpQ3VzdG9tSW50ZXJhY3Rpb25Db250ZXh0JywgKCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVnaXN0ZXI6IGN0eEEgPT4ge1xuICAgICAgICAgIHRoaXMucmVnaXN0ZXIoY3R4QSk7XG4gICAgICAgIH0sXG4gICAgICAgIG5vdGlmeVJlYWR5OiAoKSA9PiB7XG4gICAgICAgICAgLyogb25seSB1c2VkIGluIHRoZSBUQU8gdmVyc2lvbiAqL1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5idWlsZFJlcXVpcmVDb25maWcoKTtcbiAgICBjb25zdCByZXF1aXJlUENJID0gcmVxdWlyZWpzLmNvbmZpZyhjb25maWcpO1xuICAgIHJlcXVpcmVQQ0koWydyZXF1aXJlJ10sIHJlcXVpcmUgPT4ge1xuICAgICAgcmVxdWlyZShbdGhpcy5tb2R1bGVdKTtcbiAgICB9KTtcbiAgfVxuXG4gIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgcmVxdWlyZWpzLnVuZGVmKHRoaXMuY3VzdG9tSW50ZXJhY3Rpb25UeXBlSWRlbnRpZmllcik7XG4gICAgLy8gQ2xlYXIgdGhlIG1vZHVsZXMgaW4gdGhlIGNvbnRleHRcbiAgICBjb25zdCBjb250ZXh0ID0gcmVxdWlyZWpzLnMuY29udGV4dHM7XG4gICAgZGVsZXRlIGNvbnRleHRbdGhpcy5jdXN0b21JbnRlcmFjdGlvblR5cGVJZGVudGlmaWVyXTtcbiAgICB0aGlzLnN0b3BDaGVja2luZygpO1xuICB9XG5cbiAgYnVpbGRSZXF1aXJlQ29uZmlnKCkge1xuICAgIC8vIFNldCBSZXF1aXJlSlMgcGF0aHMgYW5kIHNoaW0gY29uZmlndXJhdGlvbiBpZiBhdmFpbGFibGVcbiAgICBjb25zdCBjb25maWc6IE1vZHVsZVJlc29sdXRpb25Db25maWcgPSB7XG4gICAgICBjb250ZXh0OiB0aGlzLmN1c3RvbUludGVyYWN0aW9uVHlwZUlkZW50aWZpZXIsXG4gICAgICBjYXRjaEVycm9yOiB0cnVlLFxuICAgICAgcGF0aHM6IHdpbmRvd1sncmVxdWlyZVBhdGhzJ10gfHwge30sXG4gICAgICBzaGltOiB3aW5kb3dbJ3JlcXVpcmVTaGltJ10gfHwge31cbiAgICB9O1xuICAgIC8vIENoZWNrIGlmIFJlcXVpcmVKUyBpcyBhdmFpbGFibGUsIGlmIG5vdCwgc2V0IGFuIGVycm9yIG1lc3NhZ2VcbiAgICBpZiAoIWdsb2JhbFRoaXMucmVxdWlyZSkge1xuICAgICAgdGhpcy5fZXJyb3JNZXNzYWdlID0gYFJlcXVpcmVKUyBub3QgZm91bmQuIFBsZWFzZSBsb2FkIGl0IHZpYSBDRE46IGh0dHBzOi8vY2RuanMuY29tL2xpYnJhcmllcy9yZXF1aXJlLmpzYDtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBiYXNlVXJsID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2RhdGEtYmFzZS11cmwnKTtcbiAgICBjb25zdCBpbnRlcmFjdGlvbk1vZHVsZXMgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3F0aS1pbnRlcmFjdGlvbi1tb2R1bGVzJyk7XG5cbiAgICBpZiAoaW50ZXJhY3Rpb25Nb2R1bGVzKSB7XG4gICAgICBjb25zdCBtb2R1bGVzID0gaW50ZXJhY3Rpb25Nb2R1bGVzLnF1ZXJ5U2VsZWN0b3JBbGwoJ3F0aS1pbnRlcmFjdGlvbi1tb2R1bGUnKTtcbiAgICAgIGZvciAoY29uc3QgbW9kdWxlIG9mIG1vZHVsZXMpIHtcbiAgICAgICAgY29uc3QgbW9kdWxlSWQgPSBtb2R1bGUuZ2V0QXR0cmlidXRlKCdpZCcpO1xuICAgICAgICBjb25zdCBwcmltYXJ5UGF0aCA9IG1vZHVsZS5nZXRBdHRyaWJ1dGUoJ3ByaW1hcnktcGF0aCcpO1xuICAgICAgICBjb25zdCBmYWxsYmFja1BhdGggPSBtb2R1bGUuZ2V0QXR0cmlidXRlKCdmYWxsYmFjay1wYXRoJyk7XG5cbiAgICAgICAgaWYgKG1vZHVsZUlkICYmIHByaW1hcnlQYXRoKSB7XG4gICAgICAgICAgLy8gU2V0IHRoZSBwYXRocyB1c2luZyBSZXF1aXJlSlMncyBmYWxsYmFjayBhcnJheVxuICAgICAgICAgIGNvbnN0IHBhdGhzID0gZmFsbGJhY2tQYXRoXG4gICAgICAgICAgICA/IHRoaXMuY29tYmluZVJlcXVpcmVSZXNvbHZlUGF0aHMoXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRSZXNvbHZhYmxlUGF0aChwcmltYXJ5UGF0aCwgYmFzZVVybCksXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRSZXNvbHZhYmxlUGF0aChmYWxsYmFja1BhdGgsIGJhc2VVcmwpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogdGhpcy5nZXRSZXNvbHZhYmxlUGF0aChwcmltYXJ5UGF0aCwgYmFzZVVybCk7XG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdQYXRoID0gY29uZmlnLnBhdGhzW21vZHVsZUlkXSB8fCBbXTtcbiAgICAgICAgICBjb25maWcucGF0aHNbbW9kdWxlSWRdID0gdGhpcy5jb21iaW5lUmVxdWlyZVJlc29sdmVQYXRocyhleGlzdGluZ1BhdGgsIHBhdGhzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21iaW5lUmVxdWlyZVJlc29sdmVQYXRocyhwYXRoMTogc3RyaW5nIHwgc3RyaW5nW10sIHBhdGgyOiBzdHJpbmcgfCBzdHJpbmdbXSkge1xuICAgIGNvbnN0IHBhdGgxQXJyYXkgPSBBcnJheS5pc0FycmF5KHBhdGgxKSA/IHBhdGgxIDogW3BhdGgxXTtcbiAgICBjb25zdCBwYXRoMkFycmF5ID0gQXJyYXkuaXNBcnJheShwYXRoMikgPyBwYXRoMiA6IFtwYXRoMl07XG4gICAgcmV0dXJuIHBhdGgxQXJyYXkuY29uY2F0KHBhdGgyQXJyYXkpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVEb3VibGVTbGFzaGVzKHN0cjogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2luZ2xlRm9yd2FyZFNsYXNoZXMgPSBzdHJcbiAgICAgIC5yZXBsYWNlKC8oW146XVxcLylcXC8rL2csICckMScpXG4gICAgICAucmVwbGFjZSgvXFwvXFwvL2csICcvJylcbiAgICAgIC5yZXBsYWNlKCdodHRwOi8nLCAnaHR0cDovLycpXG4gICAgICAucmVwbGFjZSgnaHR0cHM6LycsICdodHRwczovLycpO1xuICAgIHJldHVybiBzaW5nbGVGb3J3YXJkU2xhc2hlcztcbiAgfVxuXG4gIGxvYWRDb25maWcgPSBhc3luYyAodXJsOiBzdHJpbmcsIGJhc2VVcmw/OiBzdHJpbmcpOiBQcm9taXNlPE1vZHVsZVJlc29sdXRpb25Db25maWc+ID0+IHtcbiAgICB1cmwgPSB0aGlzLnJlbW92ZURvdWJsZVNsYXNoZXModXJsKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVxdWlyZUNvbmZpZyA9IGF3YWl0IGZldGNoKHVybCk7XG4gICAgICBpZiAocmVxdWlyZUNvbmZpZy5vaykge1xuICAgICAgICBjb25zdCBjb25maWcgPSBhd2FpdCByZXF1aXJlQ29uZmlnLmpzb24oKTtcbiAgICAgICAgY29uc3QgbW9kdWxlQ29uZyA9IGNvbmZpZyBhcyBNb2R1bGVSZXNvbHV0aW9uQ29uZmlnO1xuICAgICAgICBmb3IgKGNvbnN0IG1vZHVsZUlkIGluIG1vZHVsZUNvbmcucGF0aHMpIHtcbiAgICAgICAgICBpZiAoYmFzZVVybCkge1xuICAgICAgICAgICAgbW9kdWxlQ29uZy5wYXRoc1ttb2R1bGVJZF0gPSB0aGlzLmdldFJlc29sdmFibGVQYXRoKG1vZHVsZUNvbmcucGF0aHNbbW9kdWxlSWRdLCBiYXNlVXJsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1vZHVsZUNvbmc7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gZG8gbm90aGluZ1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICBnZXRSZXNvbHZhYmxlUGF0aFN0cmluZyA9IChwYXRoOiBzdHJpbmcsIGJhc2VQYXRoPzogc3RyaW5nKSA9PiB7XG4gICAgcGF0aCA9IHBhdGgucmVwbGFjZSgvXFwuanMkLywgJycpO1xuICAgIHJldHVybiBwYXRoPy50b0xvY2FsZUxvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoJ2h0dHAnKSB8fCAhYmFzZVBhdGhcbiAgICAgID8gcGF0aFxuICAgICAgOiB0aGlzLnJlbW92ZURvdWJsZVNsYXNoZXMoYCR7YmFzZVBhdGh9LyR7cGF0aH1gKTtcbiAgfTtcblxuICBnZXRSZXNvbHZhYmxlUGF0aCA9IChwYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSwgYmFzZVBhdGg/OiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShwYXRoKVxuICAgICAgPyBwYXRoLm1hcChwID0+IHRoaXMuZ2V0UmVzb2x2YWJsZVBhdGhTdHJpbmcocCwgYmFzZVBhdGgpKVxuICAgICAgOiB0aGlzLmdldFJlc29sdmFibGVQYXRoU3RyaW5nKHBhdGgsIGJhc2VQYXRoKTtcbiAgfTtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPHNsb3Q+PC9zbG90PiR7dGhpcy5fZXJyb3JNZXNzYWdlICYmXG4gICAgICBodG1sYDxkaXYgc3R5bGU9XCJjb2xvcjpyZWRcIj5cbiAgICAgICAgPGgxPkVycm9yPC9oMT5cbiAgICAgICAgJHt0aGlzLl9lcnJvck1lc3NhZ2V9XG4gICAgICA8L2Rpdj5gfWA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXBvcnRhYmxlLWN1c3RvbS1pbnRlcmFjdGlvbic6IFF0aVBvcnRhYmxlQ3VzdG9tSW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50LCBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuXG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IERyYWdEcm9wSW50ZXJhY3Rpb25NaXhpbiB9IGZyb20gJy4uL2ludGVybmFsL2RyYWctZHJvcCc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktYXNzb2NpYXRlLWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlBc3NvY2lhdGVJbnRlcmFjdGlvbiBleHRlbmRzIERyYWdEcm9wSW50ZXJhY3Rpb25NaXhpbihcbiAgTGl0RWxlbWVudCxcbiAgJ3F0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UnLFxuICB0cnVlLFxuICAnLmRsJ1xuKSB7XG4gIEBzdGF0ZSgpIHByaXZhdGUgX2NoaWxkcmVuTWFwOiBFbGVtZW50W107XG5cbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IGNzc2BcbiAgICA6aG9zdCB7XG4gICAgICBkaXNwbGF5OiBibG9jazsgLyogbmVjZXNzYXJ5IHRvIGNhbGN1bGF0ZSBzY2FsaW5nIHBvc2l0aW9uICovXG4gICAgfVxuICAgIHNsb3RbbmFtZT0ncXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZSddIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICBnYXA6IDAuNXJlbTtcbiAgICB9XG4gIGA7XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYCA8c2xvdCBuYW1lPVwicHJvbXB0XCI+PC9zbG90PlxuICAgICAgPHNsb3QgbmFtZT1cInF0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2VcIj48L3Nsb3Q+XG4gICAgICAke3RoaXMuX2NoaWxkcmVuTWFwLmxlbmd0aCA+IDAgJiZcbiAgICAgIEFycmF5LmZyb20oQXJyYXkoTWF0aC5jZWlsKHRoaXMuX2NoaWxkcmVuTWFwLmxlbmd0aCAvIDIpKS5rZXlzKCkpLm1hcChcbiAgICAgICAgKF8sIGluZGV4KSA9PlxuICAgICAgICAgIGh0bWxgPGRpdiBwYXJ0PVwiYXNzb2NpYWJsZXMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8ZGl2IG5hbWU9XCJsZWZ0JHtpbmRleH1cIiBwYXJ0PVwiZHJvcC1saXN0XCIgY2xhc3M9XCJkbFwiIGlkZW50aWZpZXI9XCJkcm9wbGlzdCR7aW5kZXh9X2xlZnRcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgbmFtZT1cInJpZ2h0JHtpbmRleH1cIiBwYXJ0PVwiZHJvcC1saXN0XCIgY2xhc3M9XCJkbFwiIGlkZW50aWZpZXI9XCJkcm9wbGlzdCR7aW5kZXh9X3JpZ2h0XCI+PC9kaXY+XG4gICAgICAgICAgPC9kaXY+YFxuICAgICAgKX1gO1xuICB9XG5cbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLl9jaGlsZHJlbk1hcCA9IEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsKCdxdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlJykpO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1hc3NvY2lhdGUtaW50ZXJhY3Rpb24nOiBRdGlBc3NvY2lhdGVJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImV4cG9ydCBjbGFzcyBUb3VjaERyYWdBbmREcm9wIHtcbiAgcHJpdmF0ZSBfdG91Y2hCZWdpbiA9IDA7IC8vIHRpbWVzdGFtcCBvZiBmaXJzdCB0b3VjaFxuICBwcml2YXRlIF90b3VjaERvd24gPSBudWxsOyAvLyBwb2ludCBvZiBmaXJzdCB0b3VjaFxuICBwcml2YXRlIF9sYXN0Q2xpY2sgPSAwOyAvLyB0aW1lc3RhbXAgb2YgcHJldmlvdXMgY2xpY2sgKHRvdWNoc3RhcnQgKyB0b3VjaGVuZClcbiAgcHJpdmF0ZSBfY2FuRHJhZyA9IGZhbHNlOyAvLyB3aGV0aGVyIHRoZXJlIGlzIGFuIGVsZW1lbnQgd2hpY2ggY2FuIGJlIGRyYWdnZWRcbiAgcHJpdmF0ZSBfZHJhZ1NyYyA9IG51bGw7IC8vIHRoZSBlbGVtZW50IHdoaWNoIHNob3VsZCBiZSBkcmFnZ2VkXG4gIHByaXZhdGUgX2RyYWdDb3B5ID0gbnVsbDsgLy8gY29weSBvZiBkcmFnIHNvdXJjZSBmb3IgZHJhZyBmZWVkYmFja1xuICBwcml2YXRlIF90b3VjaEVuZENhbGxlZCA9IGZhbHNlOyAvLyB3aGV0aGVyIHRvdWNoRW5kIG9jY3VyZWRcbiAgcHJpdmF0ZSBfZHJhZ1J1bm5pbmcgPSBmYWxzZTsgLy8gd2hldGhlciBhIGRyYWcgcHJvY2VzcyBpcyBydW5uaW5nIGF0IHRoZSBtb21lbnRcblxuICBwcml2YXRlIF9kYXRhVHJhbnNmZXIgPSB7XG4gICAgZGF0YToge30sXG4gICAgc2V0RGF0YTogZnVuY3Rpb24gKHR5cGUsIHZhbCkge1xuICAgICAgdGhpcy5kYXRhW3R5cGVdID0gdmFsO1xuICAgIH0sXG4gICAgZ2V0RGF0YTogZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFbdHlwZV07XG4gICAgfSxcbiAgICBlZmZlY3RBbGxvd2VkOiAnbW92ZSdcbiAgfTtcbiAgcHJpdmF0ZSBfY29weU9mZnNldCA9IHsgeDogMCwgeTogMCB9OyAvLyBPZmZzZXQgZm9yIHBvc2l0aW9uaW5nIHRoZSBkcmFnIGNvcHlcblxuICBwcml2YXRlIF9sYXN0VGFyZ2V0ID0gbnVsbDsgLy8gVGhlIGxhc3QgcmVnaXN0ZXJlZCB0b3VjaCB0YXJnZXRcbiAgcHJpdmF0ZSBfY3VycmVudERyb3BDb250YWluZXIgPSBudWxsOyAvLyBUaGUgY3VycmVudCBkcm9wIGNvbnRhaW5lcjsgZmFsc2UgaWYgZWxlbWVudCBpcyBub3QgZHJvcHBhYmxlXG4gIHByaXZhdGUgX2hhbmRsZUNsaWNrID0gdHJ1ZTsgLy8gU3BlY2lmaWVzXG5cbiAgcHJpdmF0ZSBfREJMQ0xJQ0tERUxBWSA9IDUwMDsgLy8gbWF4aW11bSBkZWxheSBpbiB3aGljaCBhIHNlY29uZCBjbGljayBtdXN0IG9jY3VyXG4gIHByaXZhdGUgX0NPTlRFWFRNRU5VREVMQVkgPSAxMDAwOyAvLyBob2xkIGRlbGF5IGFmdGVyIHdoaWNoIGNvbnRleHQgbWVudSBpcyBzaG93blxuICBwcml2YXRlIF9EUkFHREVMVEEgPSA1OyAvLyBNaW5pbXVtIG9mIHBpeGVscyB3aGljaCB0aGUgZmluZ2VyIG11c3QgYmUgbW92ZWQgdG8gc3RhcnQgZHJhZ1xuICBwcml2YXRlIF9DT1BZT1BBQ0lUWSA9IDAuNzsgLy8gT3BhY2l0eSBvZiB0aGUgZHJhZyBjb3B5IGVsZW1lbnRcbiAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBUb3VjaERyYWdBbmREcm9wO1xuXG4gIGNvcHlTdHlsZXNEcmFnQ2xvbmU6IGJvb2xlYW4gPSB0cnVlO1xuICBkcmFnT25DbGljazogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8vIENoZWNrIHNpbmdsZXRvblxuICAgIGlmIChUb3VjaERyYWdBbmREcm9wLl9pbnN0YW5jZSkge1xuICAgICAgLy8gIHRocm93IG5ldyBFcnJvcihcIlRvdWNoRHJhZ0FuZERyb3AgY2FuJ3QgYmUgaW5zdGFudGlhdGVkIG1vcmUgdGhhbiBvbmNlLlwiKTtcbiAgICAgIHJldHVybiBUb3VjaERyYWdBbmREcm9wLl9pbnN0YW5jZTtcbiAgICB9XG4gICAgVG91Y2hEcmFnQW5kRHJvcC5faW5zdGFuY2UgPSB0aGlzO1xuXG4gICAgLy8gdGhpcy5faW5pdGlhbGl6ZUZpZWxkcygpO1xuXG4gICAgLy8gQWRkIGV2ZW50IGxpc3RlbmVyc1xuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5fdG91Y2hNb3ZlLmJpbmQodGhpcyksIHsgcGFzc2l2ZTogZmFsc2UsIGNhcHR1cmU6IGZhbHNlIH0pO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX3RvdWNoTW92ZS5iaW5kKHRoaXMpLCB7IHBhc3NpdmU6IGZhbHNlLCBjYXB0dXJlOiBmYWxzZSB9KTtcblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5fdG91Y2hFbmQuYmluZCh0aGlzKSwgeyBwYXNzaXZlOiBmYWxzZSwgY2FwdHVyZTogZmFsc2UgfSk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMuX3RvdWNoRW5kLmJpbmQodGhpcyksIHsgcGFzc2l2ZTogZmFsc2UsIGNhcHR1cmU6IGZhbHNlIH0pO1xuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hjYW5jZWwnLCB0aGlzLl90b3VjaENhbmNlbC5iaW5kKHRoaXMpLCB7IHBhc3NpdmU6IGZhbHNlLCBjYXB0dXJlOiBmYWxzZSB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYWRkRHJhZ2dhYmxlcyhkcmFnZ2FibGVzOiBFbGVtZW50W10pIHtcbiAgICBkcmFnZ2FibGVzLmZvckVhY2goZWwgPT4ge1xuICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMuX3RvdWNoU3RhcnQuYmluZCh0aGlzKSwgeyBwYXNzaXZlOiBmYWxzZSwgY2FwdHVyZTogZmFsc2UgfSk7XG4gICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLl90b3VjaFN0YXJ0LmJpbmQodGhpcyksIHsgcGFzc2l2ZTogZmFsc2UsIGNhcHR1cmU6IGZhbHNlIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZvciB0b3VjaHN0YXJ0IGV2ZW50IGxpc3RlbmVyLlxuICAgKiBAcGFyYW0ge1RvdWNoRXZlbnR9IGVcbiAgICovXG4gIHByaXZhdGUgX3RvdWNoU3RhcnQoZSkge1xuICAgIC8vIFNhdmUgY3VycmVudCB0aW1lc3RhbXBcbiAgICB0aGlzLl90b3VjaEJlZ2luID0gRGF0ZS5ub3coKTtcblxuICAgIGNvbnN0IHsgeCwgeSB9ID0gdGhpcy5fZ2V0UG9pbnQoZSk7XG5cbiAgICB0aGlzLl90b3VjaERvd24gPSB7IHgsIHkgfTtcblxuICAgIHRoaXMuX2RyYWdTcmMgPSBlLmN1cnJlbnRUYXJnZXQ7XG4gICAgdGhpcy5fY2FuRHJhZyA9IHRydWU7XG5cbiAgICBpZiAodGhpcy5kcmFnT25DbGljaykge1xuICAgICAgY29uc3QgX3RvdWNoZXMgPSB7IGNsaWVudFg6IHgsIGNsaWVudFk6IHkgfTtcbiAgICAgIHRoaXMuX2RyYWdSdW5uaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2NyZWF0ZURyYWdDb3B5KGUsIF90b3VjaGVzKTtcbiAgICB9XG5cbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGJhY2sgZm9yIHRvdWNobW92ZSBldmVudCBsaXN0ZW5lci5cbiAgICogQHBhcmFtIHtUb3VjaEV2ZW50fSBlXG4gICAqL1xuICBwcml2YXRlIF90b3VjaE1vdmUoZSkge1xuICAgIGlmICh0aGlzLl9jYW5EcmFnICYmIHRoaXMuX2RyYWdTcmMpIHtcbiAgICAgIC8vIENyZWF0ZSBjb3B5IG9mIGVsZW1lbnQgZm9yIHZpc3VhbCBkcmFnIGZlZWRiYWNrXG5cbiAgICAgIGNvbnN0IHsgeCwgeSB9ID0gdGhpcy5fZ2V0UG9pbnQoZSk7XG4gICAgICBjb25zdCBfdG91Y2hlcyA9IHsgY2xpZW50WDogeCwgY2xpZW50WTogeSB9O1xuXG4gICAgICBpZiAodGhpcy5fZ2V0RGVsdGEoX3RvdWNoZXMpID49IHRoaXMuX0RSQUdERUxUQSkge1xuICAgICAgICB0aGlzLl9kcmFnUnVubmluZyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NyZWF0ZURyYWdDb3B5KGUsIF90b3VjaGVzKTtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9jcmVhdGVEcmFnQ29weSA9IChlOiBhbnksIF90b3VjaGVzOiB7IGNsaWVudFg6IG51bWJlcjsgY2xpZW50WTogbnVtYmVyIH0pID0+IHtcbiAgICBpZiAodGhpcy5fZHJhZ0NvcHkgPT09IG51bGwgJiYgdGhpcy5fZHJhZ1J1bm5pbmcpIHtcbiAgICAgIHRoaXMuX2RyYWdTcmMuc3R5bGUub3BhY2l0eSA9IHRoaXMuX0NPUFlPUEFDSVRZO1xuICAgICAgdGhpcy5fZHJhZ0NvcHkgPSB0aGlzLl9kcmFnU3JjLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgIGNvbnN0IGVsZW1lbnRTdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl9kcmFnU3JjKTtcblxuICAgICAgdGhpcy5fZHJhZ0NvcHkuc3R5bGUgPSAnJztcbiAgICAgIHRoaXMuX2RyYWdDb3B5LnNldEF0dHJpYnV0ZSgnZHJhZ2Nsb25lJywgJycpO1xuXG4gICAgICBpZiAodGhpcy5jb3B5U3R5bGVzRHJhZ0Nsb25lKSB7XG4gICAgICAgIGZvciAoY29uc3Qgc3R5bGUgb2YgZWxlbWVudFN0eWxlcykge1xuICAgICAgICAgIHRoaXMuX2RyYWdDb3B5LnN0eWxlW3N0eWxlXSA9IGVsZW1lbnRTdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZShzdHlsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2FsY3VsYXRlRHJhZ0NvcHlQb3NpdGlvbihfdG91Y2hlcyk7XG5cbiAgICAgIHRoaXMuX2RyYWdDb3B5LnN0eWxlLnRvcCA9IF90b3VjaGVzLmNsaWVudFkgLSB0aGlzLl9jb3B5T2Zmc2V0LnkgKyAncHgnO1xuICAgICAgdGhpcy5fZHJhZ0NvcHkuc3R5bGUubGVmdCA9IF90b3VjaGVzLmNsaWVudFggLSB0aGlzLl9jb3B5T2Zmc2V0LnggKyAncHgnO1xuICAgICAgdGhpcy5fZHJhZ0NvcHkuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xuICAgICAgdGhpcy5fZHJhZ0NvcHkuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcbiAgICAgIHRoaXMuX2RyYWdDb3B5LnN0eWxlLnpJbmRleCA9ICc5OTk5OTknO1xuXG4gICAgICB0aGlzLl9kcmFnQ29weSA9IGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5fZHJhZ0NvcHkpO1xuICAgICAgdGhpcy5fZGlzcGF0Y2hFdmVudCh0aGlzLl9kcmFnU3JjLCAnZHJhZ3N0YXJ0Jyk7XG4gICAgfVxuXG4gICAgLy8gRHJhZyBpcyBydW5uaW5nLCBtb3ZlIGRyYWcgY29weSBhbmQgZmlyZSBldmVudHNcbiAgICBpZiAodGhpcy5fZHJhZ1J1bm5pbmcpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKF90aGlzLl90b3VjaEVuZENhbGxlZCB8fCBfdGhpcy5fZHJhZ0NvcHkgPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgX3RoaXMuX2RyYWdDb3B5LnN0eWxlLnRvcCA9IF90b3VjaGVzLmNsaWVudFkgLSBfdGhpcy5fY29weU9mZnNldC55ICsgJ3B4JztcbiAgICAgICAgX3RoaXMuX2RyYWdDb3B5LnN0eWxlLmxlZnQgPSBfdG91Y2hlcy5jbGllbnRYIC0gX3RoaXMuX2NvcHlPZmZzZXQueCArICdweCc7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5fZmluZERyb3BwYWJsZShlKTtcblxuICAgICAgLy8gRmlyZSBkcmFnbGVhdmUgYW5kIGRyYWdlbnRlciBldmVudHMgd2hlbiB0YXJnZXQgaGFzIGNoYW5nZWQgZHVyaW5nIG1vdmVcbiAgICAgIGlmICh0YXJnZXQgIT0gdGhpcy5fbGFzdFRhcmdldCkge1xuICAgICAgICB0aGlzLl9kaXNwYXRjaEV2ZW50KHRhcmdldCwgJ2RyYWdlbnRlcicpO1xuICAgICAgICB0aGlzLl9kaXNwYXRjaEV2ZW50KHRoaXMuX2xhc3RUYXJnZXQsICdkcmFnbGVhdmUnKTtcbiAgICAgICAgdGhpcy5fbGFzdFRhcmdldCA9IHRhcmdldDtcbiAgICAgIH1cblxuICAgICAgLy8gTWFrZSBjdXJyZW50IGRyb3AgY29udGFpbmVyIGNsYXNzd2lkZSBhdmFpbGFibGUgYW5kIGZpcmUgZHJhZ292ZXIgaWYgaXQncyByZWFsbHkgYSBkcm9wIGNvbnRhaW5lci5cbiAgICAgIHRoaXMuX2N1cnJlbnREcm9wQ29udGFpbmVyID0gdGFyZ2V0O1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnREcm9wQ29udGFpbmVyKSB0aGlzLl9kaXNwYXRjaEV2ZW50KHRhcmdldCwgJ2RyYWdvdmVyJyk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmb3IgdG91Y2hlbmQgZXZlbnQgbGlzdGVuZXIuXG4gICAqIEBwYXJhbSB7VG91Y2hFdmVudH0gZVxuICAgKi9cbiAgcHJpdmF0ZSBfdG91Y2hFbmQoZSkge1xuICAgIHRoaXMuX3RvdWNoRW5kQ2FsbGVkID0gdHJ1ZTtcbiAgICB0aGlzLl9jYW5EcmFnID0gZmFsc2U7XG5cbiAgICAvLyBjb25zb2xlLmxvZygxLCBlLnRhcmdldCwgdGhpcy5fY3VycmVudERyb3BDb250YWluZXIpO1xuXG4gICAgLy8gVXNlciBzZWVtcyB0byBjbGlja1xuICAgIC8vIGlmICghdGhpcy5fZHJhZ1J1bm5pbmcgJiYgdGhpcy5faGFuZGxlQ2xpY2spIHtcbiAgICAvLyAgIHRoaXMuX2Rpc3BhdGNoRXZlbnQoZS50YXJnZXQsICdjbGljaycpO1xuICAgIC8vICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIC8vICAgcmV0dXJuO1xuICAgIC8vIH1cbiAgICBpZiAodGhpcy5fY3VycmVudERyb3BDb250YWluZXIpIHtcbiAgICAgIHRoaXMuX2Rpc3BhdGNoRXZlbnQodGhpcy5fY3VycmVudERyb3BDb250YWluZXIsICdkcm9wJyk7XG4gICAgICB0aGlzLl9kaXNwYXRjaEV2ZW50KHRoaXMuX2RyYWdTcmMsICdkcmFnZW5kJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZpcmUgZHJhZ0V2ZW50IGV2ZW4gaWYgdGhlaXIgaXMgbm8gZHJvcHBhYmxlLiBBbmQgYXNzaWduIGRyb3BFZmZlY3Qgbm9uZS5cbiAgICAgIC8vIGZvciBvdXIgcHVycG9zZSwgdGhpcyB3aWxsIGJyaW5nIGJhY2sgdGhlIGRyYWcgdG8gaXRzIHN0YXJ0IHBvc2l0aW9uLCBzZWVsIGRyYWctZHJvcC1pbnRlcmFjdGlvbi1taXhpbi50c1xuICAgICAgaWYgKHRoaXMuX2RyYWdSdW5uaW5nKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdkcmFnZW5kJywgeyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlIH0pO1xuICAgICAgICBldmVudFsnZGF0YVRyYW5zZmVyJ10gPSB7IGRyb3BFZmZlY3Q6ICdub25lJyB9O1xuICAgICAgICB0aGlzLl9kcmFnU3JjPy5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9yZXNldCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZvciB0b3VjaGNhbmNlbCBldmVudCBsaXN0ZW5lciwgaW4gY2FzZSBicm93c2VyIHN1cHBvcnRzIHRoaXMuXG4gICAqIEBwYXJhbSB7VG91Y2hFdmVudH0gZVxuICAgKi9cbiAgcHJpdmF0ZSBfdG91Y2hDYW5jZWwoZSkge1xuICAgIHRoaXMuX3Jlc2V0KCk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB0aGUgbmV4dCBkcm9wcGFibGUgZWxlbWVudCBhdCBjdXJyZW50IHBvaW50LlxuICAgKiBAcGFyYW0ge09iamVjdH0gcHRcbiAgICovXG4gIHByaXZhdGUgX2ZpbmREcm9wcGFibGUoZXZlbnQpIHtcbiAgICBjb25zdCBwb2ludEZyb21Ub3VjaEV2ZW50ID0gdGhpcy5fZ2V0UG9pbnQoZXZlbnQpO1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnRGcm9tUG9pbnQocG9pbnRGcm9tVG91Y2hFdmVudC54LCBwb2ludEZyb21Ub3VjaEV2ZW50LnkpO1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBlbGVtZW50RnJvbVBvaW50KHg6IG51bWJlciwgeTogbnVtYmVyKTogRWxlbWVudCB7XG4gICAgbGV0IGVsID0gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludCh4LCB5KTtcbiAgICBpZiAoZWwpIHtcbiAgICAgIHdoaWxlIChlbC5zaGFkb3dSb290KSB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUVsID0gZWwuc2hhZG93Um9vdC5lbGVtZW50RnJvbVBvaW50KHgsIHkpO1xuICAgICAgICBpZiAoY3VzdG9tRWwgPT09IG51bGwgfHwgY3VzdG9tRWwgPT09IGVsKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZWwgPSBjdXN0b21FbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBlbDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIF9nZXRQb2ludChldmVudCwgcGFnZT8pIHtcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQudG91Y2hlcykge1xuICAgICAgZXZlbnQgPSBldmVudC50b3VjaGVzWzBdO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgeDogcGFnZSA/IGV2ZW50LnBhZ2VYIDogZXZlbnQuY2xpZW50WCxcbiAgICAgIHk6IHBhZ2UgPyBldmVudC5wYWdlWSA6IGV2ZW50LmNsaWVudFlcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIG9mZnNldCBmb3IgZGlzcGxheWluZyB0aGUgZHJhZyBjb3B5IHRvIGhhdmUgYSBzZWFtbGVzcyBkcmFnZ2luZy5cbiAgICogQHBhcmFtIHtUb3VjaH0gdG91Y2ggVGhlIGN1cnJlbnQgdG91Y2guXG4gICAqL1xuICBwcml2YXRlIF9jYWxjdWxhdGVEcmFnQ29weVBvc2l0aW9uKHRvdWNoKSB7XG4gICAgY29uc3QgY2xpZW50UmVjdCA9IHRoaXMuX2RyYWdTcmMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgdGhpcy5fY29weU9mZnNldC54ID0gdG91Y2guY2xpZW50WCAtIGNsaWVudFJlY3QubGVmdDtcbiAgICB0aGlzLl9jb3B5T2Zmc2V0LnkgPSB0b3VjaC5jbGllbnRZIC0gY2xpZW50UmVjdC50b3A7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgcGl4ZWwgZGVsdGEgYmV0d2VlbiBmaXJzdCB0b3VjaCBhbmQgdGhlIGN1cnJlbnQgdG91Y2ggcG9zaXRpb24uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSB0b3VjaFxuICAgKi9cbiAgcHJpdmF0ZSBfZ2V0RGVsdGEodG91Y2gpIHtcbiAgICBjb25zdCB4ID0gTWF0aC5hYnModG91Y2guY2xpZW50WCAtIHRoaXMuX3RvdWNoRG93bi54KTtcbiAgICBjb25zdCB5ID0gTWF0aC5hYnModG91Y2guY2xpZW50WSAtIHRoaXMuX3RvdWNoRG93bi55KTtcblxuICAgIHJldHVybiB4ICsgeTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGUgVGhlIGV2ZW50J3MgdGFyZ2V0IGVsZW1lbnQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudFR5cGUgVGhlIHR5cGUgb2YgdGhlIGV2ZW50LlxuICAgKiBAcGFyYW0ge2Jvb2x9IGJ1YmJsZSBTZXRzIHdoZXRoZXIgdGhlIGV2ZW50IHNob3VsZCBidWJibGUuXG4gICAqL1xuICBwcml2YXRlIF9kaXNwYXRjaEV2ZW50KGUsIGV2ZW50VHlwZSwgYnViYmxlID0gdHJ1ZSkge1xuICAgIGlmICghZSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgZXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoZXZlbnRUeXBlLCB7IGJ1YmJsZXM6IGJ1YmJsZSwgY2FuY2VsYWJsZTogdHJ1ZSB9KTtcbiAgICBldmVudFsnZGF0YVRyYW5zZmVyJ10gPSB0aGlzLl9kYXRhVHJhbnNmZXI7XG4gICAgZS5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgICByZXR1cm4gZXZlbnQuZGVmYXVsdFByZXZlbnRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgYWxsIHZhcmlhYmxlcyBhbmQgcHJlcGFyZXMgZm9yIG5ldyBEcmFnIGFuZCBEcm9wLlxuICAgKi9cbiAgcHJpdmF0ZSBfcmVzZXQoKSB7XG4gICAgaWYgKHRoaXMuX2RyYWdSdW5uaW5nKSB7XG4gICAgICB0aGlzLl9kcmFnU3JjLnN0eWxlLm9wYWNpdHkgPSAnMS4wJztcbiAgICAgIHRoaXMuX2RyYWdDb3B5LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5fZHJhZ0NvcHkpO1xuICAgIH1cblxuICAgIHRoaXMuX2RyYWdSdW5uaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fZHJhZ1NyYyA9IG51bGw7XG4gICAgdGhpcy5fZHJhZ0NvcHkgPSBudWxsO1xuICAgIHRoaXMuX2NhbkRyYWcgPSBmYWxzZTtcblxuICAgIHRoaXMuX3RvdWNoQmVnaW4gPSAwO1xuICAgIHRoaXMuX3RvdWNoRG93biA9IG51bGw7XG4gICAgdGhpcy5fbGFzdENsaWNrID0gMDtcbiAgICB0aGlzLl90b3VjaEVuZENhbGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuX2RhdGFUcmFuc2ZlciA9IHtcbiAgICAgIGRhdGE6IHt9LFxuICAgICAgc2V0RGF0YTogZnVuY3Rpb24gKHR5cGUsIHZhbCkge1xuICAgICAgICB0aGlzLmRhdGFbdHlwZV0gPSB2YWw7XG4gICAgICB9LFxuICAgICAgZ2V0RGF0YTogZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVt0eXBlXTtcbiAgICAgIH0sXG4gICAgICBlZmZlY3RBbGxvd2VkOiAnbW92ZSdcbiAgICB9O1xuICAgIHRoaXMuX2NvcHlPZmZzZXQgPSB7IHg6IDAsIHk6IDAgfTtcblxuICAgIHRoaXMuX2xhc3RUYXJnZXQgPSBudWxsO1xuICAgIHRoaXMuX2N1cnJlbnREcm9wQ29udGFpbmVyID0gbnVsbDtcbiAgICB0aGlzLl9oYW5kbGVDbGljayA9IHRydWU7XG4gIH1cblxuICAvLyBwcml2YXRlIF9nZXRQb3NpdGlvbkZyb21FdmVudChlOiBhbnkpOiB7XG4gIC8vICAgeDogbnVtYmVyO1xuICAvLyAgIHk6IG51bWJlcjtcbiAgLy8gfSB7XG4gIC8vICAgbGV0IF90b3VjaE1vdmU7XG4gIC8vICAgaWYgKGUudHlwZSA9PSAndG91Y2hzdGFydCcgfHwgZS50eXBlID09ICd0b3VjaG1vdmUnIHx8IGUudHlwZSA9PSAndG91Y2hlbmQnIHx8IGUudHlwZSA9PSAndG91Y2hjYW5jZWwnKSB7XG4gIC8vICAgICBjb25zdCBldnQgPSB0eXBlb2YgZS5vcmlnaW5hbEV2ZW50ID09PSAndW5kZWZpbmVkJyA/IGUgOiBlLm9yaWdpbmFsRXZlbnQ7XG4gIC8vICAgICBjb25zdCB0b3VjaCA9IGV2dC50b3VjaGVzWzBdIHx8IGV2dC5jaGFuZ2VkVG91Y2hlc1swXTtcbiAgLy8gICAgIF90b3VjaE1vdmUgPSB7XG4gIC8vICAgICAgIHg6IHRvdWNoLnBhZ2VYLFxuICAvLyAgICAgICB5OiB0b3VjaC5wYWdlWVxuICAvLyAgICAgfTtcbiAgLy8gICB9IGVsc2UgaWYgKFxuICAvLyAgICAgZS50eXBlID09ICdtb3VzZWRvd24nIHx8XG4gIC8vICAgICBlLnR5cGUgPT0gJ21vdXNldXAnIHx8XG4gIC8vICAgICBlLnR5cGUgPT0gJ21vdXNlbW92ZScgfHxcbiAgLy8gICAgIGUudHlwZSA9PSAnbW91c2VvdmVyJyB8fFxuICAvLyAgICAgZS50eXBlID09ICdtb3VzZW91dCcgfHxcbiAgLy8gICAgIGUudHlwZSA9PSAnbW91c2VlbnRlcicgfHxcbiAgLy8gICAgIGUudHlwZSA9PSAnbW91c2VsZWF2ZSdcbiAgLy8gICApIHtcbiAgLy8gICAgIF90b3VjaE1vdmUgPSB7XG4gIC8vICAgICAgIHg6IGUuY2xpZW50WCxcbiAgLy8gICAgICAgeTogZS5jbGllbnRZXG4gIC8vICAgICB9O1xuICAvLyAgIH1cbiAgLy8gICByZXR1cm4gX3RvdWNoTW92ZTtcbiAgLy8gfVxufVxuIiwgImltcG9ydCB7IExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbnR5cGUgQ29uc3RydWN0b3I8VD4gPSBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBUO1xuXG5kZWNsYXJlIGNsYXNzIERyb3BwYWJsZXNJbnRlcmZhY2Uge31cblxuLy8gaHR0cHM6Ly9uZy1ydW4uY29tL2VkaXQvOU1HcjVkWVdBMjBBaUp0cHk1YXo/b3Blbj1hcHAlMkZhcHAuY29tcG9uZW50Lmh0bWxcbmV4cG9ydCBjb25zdCBEcm9wcGFibGVzTWl4aW4gPSA8VCBleHRlbmRzIENvbnN0cnVjdG9yPExpdEVsZW1lbnQ+PihcbiAgc3VwZXJDbGFzczogVCxcbiAgZHJvcHBhYmxlc0luU2hhZG93Um9vdDogYm9vbGVhbixcbiAgZHJvcHBhYmxlc1NlbGVjdG9yOiBzdHJpbmdcbikgPT4ge1xuICBjbGFzcyBEcm9wcGFibGVzRWxlbWVudCBleHRlbmRzIHN1cGVyQ2xhc3Mge1xuICAgIHByaXZhdGUgb2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXI7XG5cbiAgICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuLCByZWZsZWN0OiB0cnVlIH0pIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICBvdmVycmlkZSBmaXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BzKTogdm9pZCB7XG4gICAgICAvLyBmb3IgcXRpLW1hdGNoLWludGVyYWN0aW9uIHRoZSBkcmFnIGludGVyYWN0aW9uIGNhbiBiZSByZXBsYWNlIHdpdGggYSBxdGktbWF0Y2gtdGFidWxhciBjbGFzc1xuICAgICAgLy8gd2hpY2ggc2hvd3MgdGhlIGRhdGEgaW4gYSBhIHRhYnVsYXIgd2F5LCBzbyBubyBkcmFnIGRyb3Agc2hvdWxkIGJlIGludm9sdmVkIHRoZW5cbiAgICAgIGlmICh0aGlzLmNsYXNzTGlzdC5jb250YWlucygncXRpLW1hdGNoLXRhYnVsYXInKSkgcmV0dXJuO1xuXG4gICAgICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BzKTtcblxuICAgICAgY29uc3QgZHJvcHBhYmxlcyA9IEFycmF5LmZyb20oXG4gICAgICAgIGRyb3BwYWJsZXNJblNoYWRvd1Jvb3RcbiAgICAgICAgICA/IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKGRyb3BwYWJsZXNTZWxlY3RvcilcbiAgICAgICAgICA6IHRoaXMucXVlcnlTZWxlY3RvckFsbChkcm9wcGFibGVzU2VsZWN0b3IpXG4gICAgICApO1xuXG4gICAgICB0aGlzLmRyYWdvdmVySGFuZGxlciA9IHRoaXMuZHJhZ292ZXJIYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLmRyYWdsZWF2ZUhhbmRsZXIgPSB0aGlzLmRyYWdsZWF2ZUhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuZHJhZ2VudGVySGFuZGxlciA9IHRoaXMuZHJhZ2VudGVySGFuZGxlci5iaW5kKHRoaXMpO1xuXG4gICAgICB0aGlzLmRyb3BIYW5kbGVyID0gdGhpcy5kcm9wSGFuZGxlci5iaW5kKHRoaXMpO1xuXG4gICAgICBkcm9wcGFibGVzLmZvckVhY2goZCA9PiB7XG4gICAgICAgIGQuc2V0QXR0cmlidXRlKCdkcm9wem9uZScsICdtb3ZlJyk7XG4gICAgICAgIGQuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgdGhpcy5kcmFnbGVhdmVIYW5kbGVyKTtcblxuICAgICAgICB0aGlzLmF0dGFjaEhhbmRsZXIoZCk7XG4gICAgICB9KTtcbiAgICAgIGZvciAoY29uc3QgZHJvcHBhYmxlIG9mIGRyb3BwYWJsZXMpIHtcbiAgICAgICAgdGhpcy5vYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKG11dGF0aW9ucyA9PiB7XG4gICAgICAgICAgbXV0YXRpb25zLmZvckVhY2gobXV0YXRpb24gPT4ge1xuICAgICAgICAgICAgaWYgKG11dGF0aW9uLnR5cGUgPT09ICdhdHRyaWJ1dGVzJykge1xuICAgICAgICAgICAgICBjb25zdCBwcm9wTmFtZSA9IG11dGF0aW9uLmF0dHJpYnV0ZU5hbWU7XG4gICAgICAgICAgICAgIHN3aXRjaCAocHJvcE5hbWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdkaXNhYmxlZCc6IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGRpc2FibGVkID0gZHJvcHBhYmxlLmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcbiAgICAgICAgICAgICAgICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdHRhY2hIYW5kbGVyKGRyb3BwYWJsZSk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUhhbmRsZXIoZHJvcHBhYmxlKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vYnNlcnZlci5vYnNlcnZlKGRyb3BwYWJsZSwge1xuICAgICAgICAgIGF0dHJpYnV0ZXM6IHRydWUgLy9jb25maWd1cmUgaXQgdG8gbGlzdGVuIHRvIGF0dHJpYnV0ZSBjaGFuZ2VzXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXR0YWNoSGFuZGxlcihkcm9wcGFibGU6IEVsZW1lbnQpIHtcbiAgICAgIGRyb3BwYWJsZS5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRoaXMuZHJhZ292ZXJIYW5kbGVyKTtcbiAgICAgIGRyb3BwYWJsZS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCB0aGlzLmRyYWdlbnRlckhhbmRsZXIpO1xuICAgICAgZHJvcHBhYmxlLmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCB0aGlzLmRyb3BIYW5kbGVyKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZUhhbmRsZXIoZHJvcHBhYmxlOiBFbGVtZW50KSB7XG4gICAgICBkcm9wcGFibGUucmVtb3ZlRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCB0aGlzLmRyYWdvdmVySGFuZGxlcik7XG4gICAgICBkcm9wcGFibGUucmVtb3ZlRXZlbnRMaXN0ZW5lcignZHJhZ2VudGVyJywgdGhpcy5kcmFnZW50ZXJIYW5kbGVyKTtcbiAgICAgIGRyb3BwYWJsZS5yZW1vdmVFdmVudExpc3RlbmVyKCdkcm9wJywgdGhpcy5kcm9wSGFuZGxlcik7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgICAvLyBmb3IgcXRpLW1hdGNoLWludGVyYWN0aW9uIHRoZSBkcmFnIGludGVyYWN0aW9uIGNhbiBiZSByZXBsYWNlIHdpdGggYSBxdGktbWF0Y2gtdGFidWxhciBjbGFzc1xuICAgICAgLy8gd2hpY2ggc2hvd3MgdGhlIGRhdGEgaW4gYSBhIHRhYnVsYXIgd2F5LCBzbyBubyBkcmFnIGRyb3Agc2hvdWxkIGJlIGludm9sdmVkIHRoZW5cbiAgICAgIGlmICh0aGlzLmNsYXNzTGlzdC5jb250YWlucygncXRpLW1hdGNoLXRhYnVsYXInKSkgcmV0dXJuO1xuXG4gICAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgICAgdGhpcy5vYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICAgIH1cblxuICAgIGRyYWdlbnRlckhhbmRsZXIoZXY6IERyYWdFdmVudCkge1xuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBkcmFnb3ZlckhhbmRsZXIoZXY6IERyYWdFdmVudCkge1xuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGNvbnN0IGRyb3BwYWJsZSA9IGV2LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAvLyBkcm9wcGFibGVzSW5TaGFkb3dSb290XG4gICAgICAvLyA/IGRyb3BwYWJsZS5zZXRBdHRyaWJ1dGUoJ3BhcnQnLCBkcm9wcGFibGUuZ2V0QXR0cmlidXRlKCdwYXJ0JykgKyAnIGFjdGl2ZScpIDpcbiAgICAgIGRyb3BwYWJsZS5zZXRBdHRyaWJ1dGUoJ2FjdGl2ZScsICcnKTtcblxuICAgICAgZXYuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnbW92ZSc7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBkcm9wSGFuZGxlcihldjogRHJhZ0V2ZW50KSB7XG4gICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY29uc3QgZHJvcHBhYmxlID0gZXYuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgIC8vIHBrOiBkcmFnZ2FibGVzIGluIGxpZ2h0IGRvbSBjYW4gYmUgZHJhZ2dlZCB0byBzaGFkb3dkb20sIHRoaXMgaXMgb25lIG9mIHRoZSBydWxlcyBvZiB3ZWJjb21wb25lbnRzLlxuICAgICAgLy8gVGhleSBtYXkgbm90IGNyZWF0ZSBuZXcgZWxlbWVudHMgaW4gbGlnaHQgZG9tLiBTb21lIHNvbWV0aW1lc3MgZHJvcCB6b25lcyBzaG91bGQgYmUgZ2VuZXJhdGVkXG4gICAgICAvLyBieSB0aGUgd2ViY29tcG9uZW50LiBUaGVuIGEgZHJhZ2dhYmxlICggd2hpY2ggaXMgYWx3YXlzIGFscmVhZHkgY3JlYXRlZCBieSBhIHdlYmNvbXBvbmVudCApXG4gICAgICAvLyBjYW4gYmUgaW4gbGlnaHQgZG9tLCBlbiBjYW4gYmUgZHJhZ2dlZCB0byBzaGFkb3cgZG9tLlxuICAgICAgLy8gdGhpbmtpbmcgb2YgYW5vdGhlciB3YXkgd2hlcmUgd2UganVzdCBjaGFuZ2Ugc2xvdHMuIE1heWJlIHRoYXRzIGJldHRlci4uXG4gICAgICBjb25zdCBkcmFnZ2FibGVJbkxpZ2h0RG9tID0gdGhpcy5xdWVyeVNlbGVjdG9yKGBbaWRlbnRpZmllcj0ke2V2LmRhdGFUcmFuc2Zlci5nZXREYXRhKCd0ZXh0Jyl9YCk7XG4gICAgICBjb25zdCBkcmFnZ2FibGUgPSBkcmFnZ2FibGVJbkxpZ2h0RG9tXG4gICAgICAgID8gZHJhZ2dhYmxlSW5MaWdodERvbVxuICAgICAgICA6IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKGBbaWRlbnRpZmllcj0ke2V2LmRhdGFUcmFuc2Zlci5nZXREYXRhKCd0ZXh0Jyl9YCk7XG5cbiAgICAgIGlmICghZHJvcHBhYmxlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYGNhbm5vdCBmaW5kIGRyb3BwYWJsZSwgdGFyZ2V0OiAke2V2LnRhcmdldCA/IEpTT04uc3RyaW5naWZ5KGV2LnRhcmdldCkgOiAnbnVsbCd9YCk7XG4gICAgICB9IGVsc2UgaWYgKGRyYWdnYWJsZS5wYXJlbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpICE9PSBkcm9wcGFibGUuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJykpIHtcbiAgICAgICAgZHJvcHBhYmxlLmFwcGVuZENoaWxkKGRyYWdnYWJsZSk7XG4gICAgICB9XG4gICAgICAvLyBkcm9wcGFibGVzSW5TaGFkb3dSb290XG4gICAgICAvLyA/IGRyb3BwYWJsZS5zZXRBdHRyaWJ1dGUoJ3BhcnQnLCBkcm9wcGFibGUuZ2V0QXR0cmlidXRlKCdwYXJ0JykucmVwbGFjZSgnYWN0aXZlJywgJycpLnRyaW0oKSkgOlxuICAgICAgZHJvcHBhYmxlLnJlbW92ZUF0dHJpYnV0ZSgnYWN0aXZlJyk7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBkcmFnbGVhdmVIYW5kbGVyKGV2OiBEcmFnRXZlbnQpIHtcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgIGNvbnN0IGRyb3BwYWJsZSA9IGV2LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBkcm9wcGFibGUucmVtb3ZlQXR0cmlidXRlKCdhY3RpdmUnKTtcbiAgICAgIGV2LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gJ25vbmUnO1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiBEcm9wcGFibGVzRWxlbWVudCBhcyBDb25zdHJ1Y3RvcjxEcm9wcGFibGVzSW50ZXJmYWNlPiAmIFQ7XG59O1xuIiwgIi8vIFRISVMgSVMgQSBNSVhJTiwgVEhJUyBJUyBBIE1JWElOXG4vLyBVU0UgTElLRSBUSElTXG4vLyBgYGBjbGFzcyBEcm9wTGlzdCBleHRlbmRzIEZsaXBwYWJsZXMoTGl0RWxlbWVudCkge2BgYFxuLy8gbWl4aW4gd2hpY2ggYW5pbWF0ZXMgY2hpbGRyZW4gd2l0aCBGTElQXG4vLyBhIGNvbWJpbmF0aW9uIGJldHdlZW4gdGhpcyBkaXJlY3RpdmU6XG4vLyBodHRwczovL25nLXJ1bi5jb20vZWRpdC85TUdyNWRZV0EyMEFpSnRweTVhej9vcGVuPWFwcCUyRmFwcC5jb21wb25lbnQuaHRtbFxuLy8gYW5kIGEgdHV0b3JpYWwgaG93IHRvIG1ha2UgYSBtaXhpblxuLy8gaHR0cHM6Ly9saXQuZGV2L2RvY3MvY29tcG9zaXRpb24vbWl4aW5zL1xuXG5pbXBvcnQgeyBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcblxudHlwZSBDb25zdHJ1Y3RvcjxUPiA9IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQ7XG5cbmV4cG9ydCBkZWNsYXJlIGNsYXNzIEZsaXBwYWJsZXNJbnRlcmZhY2Uge1xuICBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkO1xuICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkO1xufVxuXG4vLyBqdXN0IGEgY29udmVyc2lvbiBvZiBhIGFuZ3VsYXIgRkxJUCBkaXJlY3RpdmUsIG1hZGUgYXMgYSBNaXhpblxuLy8gaHR0cHM6Ly9uZy1ydW4uY29tL2VkaXQvOU1HcjVkWVdBMjBBaUp0cHk1YXo/b3Blbj1hcHAlMkZhcHAuY29tcG9uZW50Lmh0bWxcbmV4cG9ydCBjb25zdCBGbGlwcGFibGVzTWl4aW4gPSA8VCBleHRlbmRzIENvbnN0cnVjdG9yPExpdEVsZW1lbnQ+PihcbiAgc3VwZXJDbGFzczogVCxcbiAgZHJvcHBhYmxlc1NlbDogc3RyaW5nLFxuICBkcmFnZ2FibGVzU2VsOiBzdHJpbmdcbikgPT4ge1xuICBjbGFzcyBGbGlwcGFibGVzRWxlbWVudCBleHRlbmRzIHN1cGVyQ2xhc3Mge1xuICAgIC8vIHByaXZhdGUgc3RhdGUgPSBuZXcgTWFwPEVsZW1lbnQsIGFueT4oKTtcbiAgICAvLyBwcml2YXRlIG9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyO1xuICAgIC8vIGZsaXBwYWJsZXNTZWxlY3Rvcjogc3RyaW5nO1xuICAgIC8vIG92ZXJyaWRlIGFzeW5jIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcHMpIHtcbiAgICAvLyAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7IC8vIHBrOiB0aGlzIGlzIHRoZSBrZXkgdG8gY2FsY3VsYXRlIGNvcnJlY3QgcHJvcG9ydGlvbnNcbiAgICAvLyAgIGNvbnN0IGRyYWdnYWJsZXMgPSBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbChkcmFnZ2FibGVzU2VsKSk7XG4gICAgLy8gICBkcmFnZ2FibGVzLmZvckVhY2goKGVsZW0pID0+IHtcbiAgICAvLyAgICAgY29uc3QgeyBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQgfSA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgLy8gICAgIHRoaXMuc3RhdGUuc2V0KGVsZW0sIHsgbGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgIC8vICAgfSk7XG4gICAgLy8gICB0aGlzLm9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIodGhpcy5hbmltYXRlTWUpO1xuICAgIC8vICAgY29uc3QgZHJvcHBhYmxlcyA9IEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsKGRyb3BwYWJsZXNTZWwpKTtcbiAgICAvLyAgIGRyb3BwYWJsZXMuZm9yRWFjaCgoZHJhZ2dhYmxlKSA9PiB7XG4gICAgLy8gICAgIHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZShkcmFnZ2FibGUsIHsgY2hpbGRMaXN0OiB0cnVlIH0pO1xuICAgIC8vICAgfSk7XG4gICAgLy8gICB0aGlzLm9ic2VydmVyLm9ic2VydmUodGhpcywgeyBjaGlsZExpc3Q6IHRydWUgfSk7XG4gICAgLy8gICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BzKTtcbiAgICAvLyB9XG4gICAgLy8gcHJpdmF0ZSBhbmltYXRlTWUgPSAoKSA9PiB7XG4gICAgLy8gICB0aGlzLnN0YXRlLmZvckVhY2goKHZhbHVlLCBlbGVtKSA9PiB7XG4gICAgLy8gICAgIGNvbnN0IHsgbGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0IH0gPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIC8vICAgICBpZiAodGhpcy5zdGF0ZS5nZXQoZWxlbSkgPT0gbnVsbCkge1xuICAgIC8vICAgICAgIHRoaXMuc3RhdGUuc2V0KGVsZW0sIHsgbGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgIC8vICAgICB9XG4gICAgLy8gICAgIGNvbnN0IGNhY2hlID0gdGhpcy5zdGF0ZS5nZXQoZWxlbSk7XG4gICAgLy8gICAgIGNvbnN0IGRlbHRhWCA9IGNhY2hlLmxlZnQgLSBsZWZ0O1xuICAgIC8vICAgICBjb25zdCBkZWx0YVkgPSBjYWNoZS50b3AgLSB0b3A7XG4gICAgLy8gICAgIGNvbnN0IGRlbHRhVyA9IGNhY2hlLndpZHRoIC8gd2lkdGg7XG4gICAgLy8gICAgIGNvbnN0IGRlbHRhSCA9IGNhY2hlLmhlaWdodCAvIGhlaWdodDtcbiAgICAvLyAgICAgdGhpcy5zdGF0ZS5zZXQoZWxlbSwgeyBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgLy8gICAgIGNvbnN0IHsgZHVyYXRpb24sIGVhc2luZyB9ID0geyBkdXJhdGlvbjogMzUwLCBlYXNpbmc6ICdjdWJpYy1iZXppZXIoMC4yNiwgMC44NiwgMC40NCwgMC45ODUpJyB9O1xuICAgIC8vICAgICBlbGVtLmFuaW1hdGUoXG4gICAgLy8gICAgICAgW1xuICAgIC8vICAgICAgICAge1xuICAgIC8vICAgICAgICAgICB0cmFuc2Zvcm1PcmlnaW46ICd0b3AgbGVmdCcsXG4gICAgLy8gICAgICAgICAgIHRyYW5zZm9ybTogYFxuICAgIC8vIHRyYW5zbGF0ZSgke2RlbHRhWH1weCwgJHtkZWx0YVl9cHgpXG4gICAgLy8gc2NhbGUoJHtkZWx0YVd9LCAke2RlbHRhSH0pXG4gICAgLy8gYCxcbiAgICAvLyAgICAgICAgICAgLy8gd2lkdGg6IGNhY2hlLndpZHRoLFxuICAgIC8vICAgICAgICAgICAvLyBoZWlnaHQ6IGNhY2hlLmhlaWdodCsgJ3B4JyxcbiAgICAvLyAgICAgICAgICAgLy8gb3BhY2l0eTogY2FjaGUub3BhY2l0eSxcbiAgICAvLyAgICAgICAgIH0sXG4gICAgLy8gICAgICAgICB7XG4gICAgLy8gICAgICAgICAgIHRyYW5zZm9ybU9yaWdpbjogJ3RvcCBsZWZ0JyxcbiAgICAvLyAgICAgICAgICAgdHJhbnNmb3JtOiAnbm9uZScsXG4gICAgLy8gICAgICAgICB9LFxuICAgIC8vICAgICAgIF0sXG4gICAgLy8gICAgICAge1xuICAgIC8vICAgICAgICAgZHVyYXRpb24sXG4gICAgLy8gICAgICAgICBlYXNpbmcsXG4gICAgLy8gICAgICAgfVxuICAgIC8vICAgICApO1xuICAgIC8vICAgfSk7XG4gICAgLy8gfTtcbiAgICAvLyBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICAvLyAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgLy8gICB0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAvLyB9XG4gIH1cbiAgcmV0dXJuIEZsaXBwYWJsZXNFbGVtZW50IGFzIENvbnN0cnVjdG9yPEZsaXBwYWJsZXNJbnRlcmZhY2U+ICYgVDtcbn07XG4iLCAiaW1wb3J0IHsgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBJSW50ZXJhY3Rpb24gfSBmcm9tICcuLi9pbnRlcmFjdGlvbi9pbnRlcmFjdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRHJvcHBhYmxlc01peGluIH0gZnJvbSAnLi9kcm9wcGFibGVzLW1peGluJztcbmltcG9ydCB7IEZsaXBwYWJsZXNNaXhpbiB9IGZyb20gJy4vZmxpcHBhYmxlcy1taXhpbic7XG5cbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgbGl2ZVF1ZXJ5IH0gZnJvbSAnLi4vLi4vLi4vLi4vZGVjb3JhdG9ycy9saXZlLXF1ZXJ5JztcbmltcG9ydCB7IHdhdGNoIH0gZnJvbSAnLi4vLi4vLi4vLi4vZGVjb3JhdG9ycy93YXRjaCc7XG5pbXBvcnQgeyBUb3VjaERyYWdBbmREcm9wIH0gZnJvbSAnLi9kcmFnLWRyb3AtYXBpJztcbi8vIGtleWJvYXJkIG5hdmlnYXRhYmxlIGRyYWcgZHJvcDogaHR0cHM6Ly9jb2RlcGVuLmlvL1NpdGVQb2ludC9wZW4vdkV6WGJqXG4vLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81NTI0MjE5Ni90eXBlc2NyaXB0LWFsbG93cy10by11c2UtcHJvcGVyLW11bHRpcGxlLWluaGVyaXRhbmNlLXdpdGgtbWl4aW5zLWJ1dC1mYWlscy10by1jXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzE3NzQ0I2lzc3VlY29tbWVudC01NTg5OTAzODFcbi8vIGh0dHBzOi8vbmctcnVuLmNvbS9lZGl0LzlNR3I1ZFlXQTIwQWlKdHB5NWF6P29wZW49YXBwJTJGYXBwLmNvbXBvbmVudC5odG1sXG5cbnR5cGUgQ29uc3RydWN0b3I8VD4gPSBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBUO1xuXG5pbnRlcmZhY2UgSW50ZXJhY3Rpb25Db25maWd1cmF0aW9uIHtcbiAgY29weVN0eWxlc0RyYWdDbG9uZTogYm9vbGVhbjtcbiAgZHJhZ0NhbkJlUGxhY2VkQmFjazogYm9vbGVhbjtcbiAgZHJhZ09uQ2xpY2s6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4gPSA8VCBleHRlbmRzIENvbnN0cnVjdG9yPExpdEVsZW1lbnQ+PihcbiAgc3VwZXJDbGFzczogVCxcbiAgZHJhZ2dhYmxlc1NlbGVjdG9yOiBzdHJpbmcsXG4gIGRyb3BwYWJsZXNJblNoYWRvd1Jvb3Q6IGJvb2xlYW4sXG4gIGRyb3BwYWJsZXNTZWxlY3Rvcjogc3RyaW5nXG4pID0+IHtcbiAgY2xhc3MgRHJhZ0Ryb3BJbnRlcmFjdGlvbkVsZW1lbnQgZXh0ZW5kcyBGbGlwcGFibGVzTWl4aW4oXG4gICAgRHJvcHBhYmxlc01peGluKHN1cGVyQ2xhc3MsIGRyb3BwYWJsZXNJblNoYWRvd1Jvb3QsIGRyb3BwYWJsZXNTZWxlY3RvciksXG4gICAgZHJvcHBhYmxlc1NlbGVjdG9yLFxuICAgIGRyYWdnYWJsZXNTZWxlY3RvclxuICApIHtcbiAgICBwcm90ZWN0ZWQgZHJhZ2dhYmxlcyA9IG5ldyBNYXA8RWxlbWVudCwgeyBwYXJlbnQ6IEVsZW1lbnQ7IGluZGV4OiBudW1iZXIgfT4oKTtcbiAgICBwcm90ZWN0ZWQgZHJvcHBhYmxlczogRWxlbWVudFtdO1xuICAgIGRyYWdEcm9wQXBpOiBUb3VjaERyYWdBbmREcm9wO1xuXG4gICAgQGxpdmVRdWVyeShkcmFnZ2FibGVzU2VsZWN0b3IpXG4gICAgcmVJbml0RHJhZ0FuZERyb3AoZHJhZ3NBZGRlZDogRWxlbWVudFtdLCBkcmFnc1JlbW92ZWQ6IEVsZW1lbnRbXSkge1xuICAgICAgaWYgKHRoaXMuY2xhc3NMaXN0LmNvbnRhaW5zKCdxdGktbWF0Y2gtdGFidWxhcicpKSByZXR1cm47XG5cbiAgICAgIC8vIGNoZWNrIGlmIGFkZGVkIGVsZW1lbnRzIGFyZSBub3QgYWxyZWFkeSBpbiBsaXN0XG4gICAgICBjb25zdCBkcmFnZ2FibGVzID0gZHJhZ3NBZGRlZC5maWx0ZXIoZCA9PiAhdGhpcy5kcmFnZ2FibGVzIHx8ICF0aGlzLmRyYWdnYWJsZXMuZ2V0KGQpKTtcblxuICAgICAgaWYgKGRyYWdnYWJsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmRyYWdEcm9wQXBpLmFkZERyYWdnYWJsZXMoZHJhZ3NBZGRlZCk7XG5cbiAgICAgICAgZHJhZ3NBZGRlZC5mb3JFYWNoKGVsZW0gPT4ge1xuICAgICAgICAgIC8vIHN0b3JlIGluaXRpYWwgcG9zaXRpb25zIG9mIGVsZW1lbnRzLCBhbmQgb2YgY291cnNlLCBqdXN0IHRoZSBlbGVtZW50cyBmb3IgbG9vcGluZyBhbmQgc3VjaFxuICAgICAgICAgIHRoaXMuZHJhZ2dhYmxlcy5zZXQoZWxlbSwge1xuICAgICAgICAgICAgcGFyZW50OiBlbGVtLnBhcmVudEVsZW1lbnQsXG4gICAgICAgICAgICBpbmRleDogQXJyYXkuZnJvbShlbGVtLnBhcmVudE5vZGUuY2hpbGRyZW4pLmluZGV4T2YoZWxlbSlcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZSgncXRpLWRyYWdnYWJsZScsICd0cnVlJyk7XG4gICAgICAgICAgZWxlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnc3RhcnQnLCB0aGlzLmhhbmRsZURyYWdTdGFydCk7XG4gICAgICAgICAgZWxlbS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW5kJywgdGhpcy5oYW5kbGVEcmFnRW5kKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdyZXNwb25zZS1pZGVudGlmaWVyJyB9KSByZXNwb25zZUlkZW50aWZpZXI6IHN0cmluZyA9ICcnO1xuXG4gICAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiBmYWxzZSwgdHlwZTogT2JqZWN0IH0pIGNvbmZpZ3VyYXRpb246IEludGVyYWN0aW9uQ29uZmlndXJhdGlvbiA9IHtcbiAgICAgIGNvcHlTdHlsZXNEcmFnQ2xvbmU6IHRydWUsXG4gICAgICBkcmFnQ2FuQmVQbGFjZWRCYWNrOiB0cnVlLFxuICAgICAgZHJhZ09uQ2xpY2s6IGZhbHNlXG4gICAgfTtcbiAgICBAd2F0Y2goJ2NvbmZpZ3VyYXRpb24nKVxuICAgIGhhbmRsZURyYWdPcHRpb25zQ2hhbmdlZChvbGQsIGRyYWdPcHRpb25zKSB7XG4gICAgICB0aGlzLmRyYWdEcm9wQXBpLmNvcHlTdHlsZXNEcmFnQ2xvbmUgPSBkcmFnT3B0aW9ucy5jb3B5U3R5bGVzRHJhZ0Nsb25lO1xuICAgICAgdGhpcy5kcmFnRHJvcEFwaS5kcmFnT25DbGljayA9IGRyYWdPcHRpb25zLmRyYWdPbkNsaWNrO1xuICAgIH1cblxuICAgIEBwcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4sIHJlZmxlY3Q6IHRydWUgfSkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgICBAd2F0Y2goJ2Rpc2FibGVkJywgeyB3YWl0VW50aWxGaXJzdFVwZGF0ZTogdHJ1ZSB9KVxuICAgIGhhbmRsZURpc2FibGVkQ2hhbmdlKG9sZCwgZGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICAgIHRoaXMuZHJhZ2dhYmxlcy5mb3JFYWNoKChzLCBjaCkgPT4ge1xuICAgICAgICBkaXNhYmxlZCA/IGNoLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCAnJykgOiBjaC5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XG4gICAgICAgIGRpc2FibGVkID8gY2gucmVtb3ZlQXR0cmlidXRlKCdxdGktZHJhZ2dhYmxlJykgOiBjaC5zZXRBdHRyaWJ1dGUoJ3F0aS1kcmFnZ2FibGUnLCAndHJ1ZScpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgQHByb3BlcnR5KHsgdHlwZTogQm9vbGVhbiwgcmVmbGVjdDogdHJ1ZSB9KSByZWFkb25seSA9IGZhbHNlO1xuICAgIEB3YXRjaCgncmVhZG9ubHknLCB7IHdhaXRVbnRpbEZpcnN0VXBkYXRlOiB0cnVlIH0pXG4gICAgaGFuZGxlUmVhZG9ubHlDaGFuZ2Uob2xkLCByZWFkb25seTogYm9vbGVhbikge1xuICAgICAgdGhpcy5kcmFnZ2FibGVzLmZvckVhY2goKHMsIGNoKSA9PiB7XG4gICAgICAgIHJlYWRvbmx5ID8gY2guc2V0QXR0cmlidXRlKCdyZWFkb25seScsICcnKSA6IGNoLnJlbW92ZUF0dHJpYnV0ZSgncmVhZG9ubHknKTtcbiAgICAgICAgcmVhZG9ubHkgPyBjaC5yZW1vdmVBdHRyaWJ1dGUoJ3F0aS1kcmFnZ2FibGUnKSA6IGNoLnNldEF0dHJpYnV0ZSgncXRpLWRyYWdnYWJsZScsICd0cnVlJyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBAcHJvcGVydHkoeyB0eXBlOiBOdW1iZXIsIHJlZmxlY3Q6IHRydWUsIGF0dHJpYnV0ZTogJ21pbi1hc3NvY2lhdGlvbnMnIH0pIG1pbkFzc29jaWF0aW9ucyA9IDE7XG4gICAgQHByb3BlcnR5KHsgdHlwZTogTnVtYmVyLCByZWZsZWN0OiB0cnVlLCBhdHRyaWJ1dGU6ICdtYXgtYXNzb2NpYXRpb25zJyB9KSBtYXhBc3NvY2lhdGlvbnMgPSAxO1xuXG4gICAgb3ZlcnJpZGUgZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wcyk6IHZvaWQge1xuICAgICAgc3VwZXIuZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wcyk7XG4gICAgICB0aGlzLmRyb3BwYWJsZXMgPSBBcnJheS5mcm9tKFxuICAgICAgICBkcm9wcGFibGVzSW5TaGFkb3dSb290XG4gICAgICAgICAgPyB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbChkcm9wcGFibGVzU2VsZWN0b3IpXG4gICAgICAgICAgOiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoZHJvcHBhYmxlc1NlbGVjdG9yKVxuICAgICAgKTtcbiAgICAgIC8vIFBLOiBNYXliZSBsYXRlciwgZm9yIG5vdyB3ZSBhc3N1bWUgZHJvcHBhYmxlcyBhcmUgbm90IGR5bmFtaWNseSBhZGRlZCBvciByZW1vdmVkXG4gICAgICAvLyAuZmlsdGVyKChlbGVtKSA9PiAhdGhpcy5kcm9wcGFibGVzIHx8ICF0aGlzLmRyb3BwYWJsZXMuaW5jbHVkZXMoZWxlbSkpO1xuICAgICAgLy8gdGhpcy5kcm9wcGFibGVzID0gdGhpcy5kcm9wcGFibGVzID8gdGhpcy5kcm9wcGFibGVzLmNvbmNhdChuZXdEcm9wcGFibGVzKSA6IG5ld0Ryb3BwYWJsZXM7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG4gICAgICB0aGlzLmRyYWdEcm9wQXBpID0gbmV3IFRvdWNoRHJhZ0FuZERyb3AoKTtcblxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgICBuZXcgQ3VzdG9tRXZlbnQ8RHJhZ0Ryb3BJbnRlcmFjdGlvbkVsZW1lbnQ+KCdxdGktcmVnaXN0ZXItaW50ZXJhY3Rpb24nLCB7XG4gICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgICAgICBkZXRhaWw6IHRoaXNcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVEcmFnU3RhcnQgPSAoZXY6IGFueSkgPT4ge1xuICAgICAgZXYuZGF0YVRyYW5zZmVyLnNldERhdGEoJ3RleHQnLCBldi5jdXJyZW50VGFyZ2V0LmdldEF0dHJpYnV0ZShgaWRlbnRpZmllcmApKTtcbiAgICAgIGV2LmN1cnJlbnRUYXJnZXQuc2V0QXR0cmlidXRlKCdkcmFnZ2luZycsICcnKTtcblxuICAgICAgLy8gaGlnaGxpZ2h0IGFsbCBkcm9wcGFibGVzIHdpdGggYW4gYWN0aXZlIGNsYXNzXG4gICAgICB0aGlzLmRyb3BwYWJsZXMuZm9yRWFjaChkID0+IGQuc2V0QXR0cmlidXRlKCdlbmFibGVkJywgJycpKTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBoYW5kbGVEcmFnRW5kID0gKGV2OiBEcmFnRXZlbnQpID0+IHtcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLmRyb3BwYWJsZXMuZm9yRWFjaChkID0+IGQucmVtb3ZlQXR0cmlidXRlKCdlbmFibGVkJykpO1xuICAgICAgY29uc3QgZHJhZ2dhYmxlID0gZXYuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGRyYWdnYWJsZS5yZW1vdmVBdHRyaWJ1dGUoJ292ZXInKTtcbiAgICAgIGRyYWdnYWJsZS5yZW1vdmVBdHRyaWJ1dGUoJ2RyYWdnaW5nJyk7XG5cbiAgICAgIC8vIHBrOiBpZiBub3QgZHJvcHBlZCBvbiBhIGRyb3AgbG9jYXRpb24gcHV0IGl0IGJhY2sgd2hlcmUgaXQgYmVsb25nc1xuICAgICAgaWYgKGV2LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID09PSAnbm9uZScgfHwgZXYuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmRyYWdDYW5CZVBsYWNlZEJhY2spIHtcbiAgICAgICAgICB0aGlzLnBsYWNlRHJhZ2dhYmxlQmFjayhkcmFnZ2FibGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZXYuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPT09ICdtb3ZlJykge1xuICAgICAgICB0aGlzLnNhdmVSZXNwb25zZSgpO1xuICAgICAgICB0aGlzLmNoZWNrTWF4TWF0Y2hBc3NvY2lhdGlvbnMoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBwbGFjZURyYWdnYWJsZUJhY2soZHJhZ2dhYmxlOiBIVE1MRWxlbWVudCkge1xuICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLmRyYWdnYWJsZXMuZ2V0KGRyYWdnYWJsZSk7XG4gICAgICBjb25zdCBpbmRleCA9XG4gICAgICAgIHBvc2l0aW9uLmluZGV4IDw9IHBvc2l0aW9uLnBhcmVudC5jaGlsZHJlbi5sZW5ndGggPyBwb3NpdGlvbi5pbmRleCA6IHBvc2l0aW9uLnBhcmVudC5jaGlsZHJlbi5sZW5ndGggLSAxO1xuICAgICAgY29uc3QgaW50ZXJhY3Rpb24gPSBwb3NpdGlvbi5wYXJlbnQ7XG4gICAgICBjb25zdCBnYXBUZXh0ID0gcG9zaXRpb24ucGFyZW50LmNoaWxkcmVuW2luZGV4XTtcblxuICAgICAgaW50ZXJhY3Rpb24uaW5zZXJ0QmVmb3JlKGRyYWdnYWJsZSwgZ2FwVGV4dCk7XG4gICAgICB0aGlzLnNhdmVSZXNwb25zZSgpO1xuICAgICAgdGhpcy5jaGVja01heE1hdGNoQXNzb2NpYXRpb25zKCk7XG4gICAgfVxuXG4gICAgcmVzZXQoc2F2ZSA9IHRydWUpOiB2b2lkIHtcbiAgICAgIHRoaXMuZHJhZ2dhYmxlcy5mb3JFYWNoKChwb3NpdGlvbiwgZHJhZ2dhYmxlKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gcG9zaXRpb24ucGFyZW50LmNoaWxkcmVuO1xuICAgICAgICBjb25zdCBpbmRleCA9IHBvc2l0aW9uLmluZGV4IDwgY2hpbGRyZW4ubGVuZ3RoID8gcG9zaXRpb24uaW5kZXggOiBjaGlsZHJlbi5sZW5ndGg7XG4gICAgICAgIHBvc2l0aW9uLnBhcmVudC5pbnNlcnRCZWZvcmUoZHJhZ2dhYmxlLCBjaGlsZHJlbltpbmRleF0pO1xuICAgICAgfSk7XG4gICAgICBzYXZlICYmIHRoaXMuc2F2ZVJlc3BvbnNlKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNoZWNrTWF4TWF0Y2hBc3NvY2lhdGlvbnMoKSB7XG4gICAgICB0aGlzLmRyb3BwYWJsZXMuZm9yRWFjaChkID0+IHtcbiAgICAgICAgY29uc3QgbWF4TWF0Y2ggPSArKGQuZ2V0QXR0cmlidXRlKCdtYXRjaC1tYXgnKSB8fCAxKTtcbiAgICAgICAgLy8gY29uc3QgbWF4TWluID0gKyhkLmdldEF0dHJpYnV0ZSgnbWF0Y2gtbWluJykgfHwgMCk7XG4gICAgICAgIC8vIGNvbnN0IGRpc2FibGUgPSBtYXhNYXRjaCA8PSAoZC5jaGlsZHJlbi5sZW5ndGggfHwgMCk7XG4gICAgICAgIGNvbnN0IGRpc2FibGUgPSBtYXhNYXRjaCA8PSAoZC5xdWVyeVNlbGVjdG9yQWxsKCdbcXRpLWRyYWdnYWJsZT1cInRydWVcIl0nKS5sZW5ndGggfHwgMCk7XG5cbiAgICAgICAgZGlzYWJsZSA/IGQuc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsICcnKSA6IGQucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xuICAgICAgICBkaXNhYmxlID8gZC5yZW1vdmVBdHRyaWJ1dGUoJ2Ryb3B6b25lJykgOiBkLnNldEF0dHJpYnV0ZSgnZHJvcHpvbmUnLCAnbW92ZScpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2V0IHJlc3BvbnNlKHJlc3BvbnNlOiBzdHJpbmdbXSkge1xuICAgICAgLy8gZm9yIHF0aS1tYXRjaC1pbnRlcmFjdGlvbiB0aGUgZHJhZyBpbnRlcmFjdGlvbiBjYW4gYmUgcmVwbGFjZSB3aXRoIGEgcXRpLW1hdGNoLXRhYnVsYXIgY2xhc3NcbiAgICAgIC8vIHdoaWNoIHNob3dzIHRoZSBkYXRhIGluIGEgYSB0YWJ1bGFyIHdheSwgc28gbm8gZHJhZyBkcm9wIHNob3VsZCBiZSBpbnZvbHZlZCB0aGVuXG4gICAgICBpZiAodGhpcy5jbGFzc0xpc3QuY29udGFpbnMoJ3F0aS1tYXRjaC10YWJ1bGFyJykpIHJldHVybjtcblxuICAgICAgdGhpcy5yZXNldChmYWxzZSk7XG4gICAgICBpZiAocmVzcG9uc2UgIT09IG51bGwgJiYgQXJyYXkuaXNBcnJheShyZXNwb25zZSkpXG4gICAgICAgIHJlc3BvbnNlLmZvckVhY2gocmVzcG9uc2UgPT4ge1xuICAgICAgICAgIGNvbnN0IFtkcm9wSWQsIC4uLmRyYWdJZHNdID0gcmVzcG9uc2Uuc3BsaXQoJyAnKS5yZXZlcnNlKCk7XG4gICAgICAgICAgaWYgKGRyb3BJZCkge1xuICAgICAgICAgICAgY29uc3QgZHJvcHBhYmxlID0gdGhpcy5kcm9wcGFibGVzLmZpbmQoZHJvcCA9PiBkcm9wLmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpID09PSBkcm9wSWQpO1xuICAgICAgICAgICAgZHJhZ0lkcy5mb3JFYWNoKGRyYWdJZCA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGRyYWdnYWJsZSA9IHRoaXMucXVlcnlTZWxlY3RvcihgW2lkZW50aWZpZXI9JHtkcmFnSWR9XWApO1xuICAgICAgICAgICAgICBpZiAoIWRyb3BwYWJsZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYGNhbm5vdCBmaW5kIGRyb3BwYWJsZSB3aXRoIGlkZW50aWZpZXI6ICR7ZHJvcElkfWApO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFkcmFnZ2FibGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBjYW5ub3QgZmluZCBkcmFnZ2FibGUgd2l0aCBpZGVudGlmaWVyOiAke2RyYWdJZH1gKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkcm9wcGFibGUuYXBwZW5kQ2hpbGQoZHJhZ2dhYmxlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrTWF4TWF0Y2hBc3NvY2lhdGlvbnMoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZSgpIHtcbiAgICAgIGNvbnN0IGRyb3BwYWJsZXMgPSBkcm9wcGFibGVzSW5TaGFkb3dSb290XG4gICAgICAgID8gQXJyYXkuZnJvbSh0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbChkcm9wcGFibGVzU2VsZWN0b3IpKVxuICAgICAgICA6IEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsKGRyb3BwYWJsZXNTZWxlY3RvcikpO1xuICAgICAgY29uc3QgYXNzb2NpYXRpb25zID0gZHJvcHBhYmxlcy5maWx0ZXIoZCA9PiBkLmNoaWxkRWxlbWVudENvdW50ID4gMCkubGVuZ3RoO1xuICAgICAgcmV0dXJuIHRoaXMubWluQXNzb2NpYXRpb25zIDw9IDAgfHwgdGhpcy5taW5Bc3NvY2lhdGlvbnMgPD0gYXNzb2NpYXRpb25zO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBzYXZlUmVzcG9uc2UoKSB7XG4gICAgICBsZXQgcmVzcG9uc2U6IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgICAgaWYgKHR5cGVvZiAodGhpcyBhcyBhbnkpLmdldFJlc3BvbnNlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIG9ubHkgZm9yIHRoZSBxdGktb3JkZXItaW50ZXJhY3Rpb24sIGFic3RyYWN0ZWQgdGhpcyBhd2F5IGluIGEgbWV0aG9kXG4gICAgICAgIHJlc3BvbnNlID0gKHRoaXMgYXMgYW55KS5nZXRSZXNwb25zZSgpOyAvLyBDYWxsIHRoZSBtZXRob2QgZnJvbSB0aGUgaW1wbGVtZW50aW5nIGNsYXNzXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNwb25zZSA9IHRoaXMuZHJvcHBhYmxlcy5tYXAoZHJvcHBhYmxlID0+IHtcbiAgICAgICAgICBjb25zdCBkcmFnc0luRHJvcHBhYmxlID0gZHJvcHBhYmxlLnF1ZXJ5U2VsZWN0b3JBbGwoJ1txdGktZHJhZ2dhYmxlPVwidHJ1ZVwiXScpO1xuICAgICAgICAgIGNvbnN0IGlkZW50aWZpZXJzID0gQXJyYXkuZnJvbShkcmFnc0luRHJvcHBhYmxlKS5tYXAoZCA9PiBkLmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpKTtcbiAgICAgICAgICBjb25zdCBkcm9wcGFibGVJZGVudGlmaWVyID0gZHJvcHBhYmxlLmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpO1xuICAgICAgICAgIHJldHVybiBbLi4uaWRlbnRpZmllcnMsIGRyb3BwYWJsZUlkZW50aWZpZXJdLmpvaW4oJyAnKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdxdGktaW50ZXJhY3Rpb24tcmVzcG9uc2UnLCB7XG4gICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgIHJlc3BvbnNlSWRlbnRpZmllcjogdGhpcy5yZXNwb25zZUlkZW50aWZpZXIsXG4gICAgICAgICAgICByZXNwb25zZVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBEcmFnRHJvcEludGVyYWN0aW9uRWxlbWVudCBhcyBDb25zdHJ1Y3RvcjxJSW50ZXJhY3Rpb24+ICYgVDtcbn07XG4iLCAiaW1wb3J0IHsgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSwgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvbiB9IGZyb20gJy4uL2ludGVybmFsL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uJztcbmltcG9ydCB7IHJlbW92ZURvdWJsZVNsYXNoZXMgfSBmcm9tICcuLi8uLi9pbnRlcm5hbC91dGlscyc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktY3VzdG9tLWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlDdXN0b21JbnRlcmFjdGlvbiBleHRlbmRzIEludGVyYWN0aW9uIHtcbiAgLy8gVGhpcyBjdXN0b20taW50ZXJhY3Rpb24gc3VwcG9ydCB0aGUgQ0VTIEFQSSB3aGljaCBpcyB1c2UgaW4gRkFDRVRcbiAgLy9cbiAgLy8gSXQgd29ya3MgbGlrZSB0aGlzOlxuICAvLyAxLiBUaGUgQ0kgbWFuaWZlc3QgaXMgZmV0Y2hlZFxuICAvLyAyLiBBbiBpZnJhbWUgaXMgY3JlYXRlZCBhbmQgdGhlIGZpcnN0IHN0eWxlIGFuZCBmaXJzdCBzY3JpcHQgZnJvbSB0aGUgbWFuaWZlc3QgYXJlIGxvYWRlZFxuICAvLyAzLiBUaGUgZmlyc3Qgc2NyaXB0IGlzIGJvb3RzdHJhcC5qcyB3aGljaCBhbHNvIGNyZWF0ZXMgYW4gaWZyYW1lIGFuZCBsb2FkcyB0aGUgZmlyc3QgbWVkaWEgZnJvbSB0aGUgbWFuaWZlc3RcbiAgLy8gNC4gQ29tbXVuaWNhdGlvbiBpcyBkb25lIHZpYSB0aGUgQ0VTIEFQSSBidXQgYmVjYXVzZSB0aGUgaWZyYW1lIGlzIG5vdCBhbGxvd2VkIHRvIGFjY2VzcyB0aGUgZ2xvYmFsIENFUyBvYmplY3Qgd2UgbmVlZCB0byB1c2Ugd2luZG93LnBvc3RNZXNzYWdlXG5cbiAgLy8gVG8gYWNoaWV2ZSB0aGlzIHdlIGNoYW5nZSB0aGUgcGFja2FnZSBieSByZXBsYWNpbmcgdGhlIGJvb3RzdHJhcC5qcyB3aXRoIG91ciBvd24gYW5kIGluamVjdCBhIHByb3h5IENFUyBBUEkgdGhhdCBjb21tdW5pY2F0ZXMgdmlhIHBvc3RNZXNzYWdlXG4gIC8vIEJlY2F1c2Ugd2UgYWxzbyB3YW50IHRvIHJ1biB0aGlzIGluIHN0b3J5Ym9vaywgd2UgY2Fubm90IHVzZSB3aW5kb3cudG9wIGJlY2F1c2UgdG8gc2VuZCBtZXNzYWdlcyB0aGVyZSwgYmVjYXVzZSBpbiBjYXNlIG9mIHN0b3J5Ym9vayB0aGF0IGlzIG5vdCB0aGUgdG9wIHdpbmRvdy5cbiAgLy8gU28gd2Ugc2VuZCBtZXNzYWdlcyB0byBhbGwgcGFyZW50IHdpbmRvd3NcbiAgcHJpdmF0ZSByYXdSZXNwb25zZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5oYW5kbGVQb3N0TWVzc2FnZSA9IHRoaXMuaGFuZGxlUG9zdE1lc3NhZ2UuYmluZCh0aGlzKTtcbiAgfVxuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAncmVzcG9uc2UtaWRlbnRpZmllcicgfSlcbiAgcmVzcG9uc2VJZGVudGlmaWVyOiBzdHJpbmc7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdkYXRhJyB9KVxuICBkYXRhOiBzdHJpbmc7XG5cbiAgQHByb3BlcnR5KHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdkYXRhLWJhc2UtaXRlbScgfSlcbiAgYmFzZUl0ZW1Vcmw6IHN0cmluZztcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2RhdGEtYmFzZS1yZWYnIH0pXG4gIGJhc2VSZWZVcmw6IHN0cmluZztcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2lkJyB9KVxuICBpZDogc3RyaW5nO1xuXG4gIEBzdGF0ZSgpXG4gIHByaXZhdGUgX2Vycm9yTWVzc2FnZTogc3RyaW5nID0gbnVsbDtcbiAgbWFuaWZlc3Q6IHtcbiAgICBzY3JpcHQ6IHN0cmluZ1tdO1xuICAgIHN0eWxlOiBzdHJpbmdbXTtcbiAgICBtZWRpYTogc3RyaW5nW107XG4gIH07XG5cbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuICAgIGNvbnN0IHVyaVRvTWFuaWZlc3QgPSB0aGlzLmRhdGEuc3RhcnRzV2l0aCgnaHR0cCcpXG4gICAgICA/IHRoaXMuZGF0YVxuICAgICAgOiByZW1vdmVEb3VibGVTbGFzaGVzKHRoaXMuYmFzZUl0ZW1VcmwgKyAnLycgKyB0aGlzLmRhdGEpO1xuICAgIC8vIGZldGNoIHRoZSBqc29uIGZpbGUgbG9jYXRlZCBhdCB0aGUgZGF0YSBhdHRyaWJ1dGVcbiAgICBmZXRjaCh1cmlUb01hbmlmZXN0KVxuICAgICAgLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2UuanNvbigpKVxuICAgICAgLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgIHRoaXMubWFuaWZlc3QgPSBkYXRhO1xuICAgICAgICB0aGlzLnNldHVwQ0VTKCk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgIHRoaXMuX2Vycm9yTWVzc2FnZSA9IGVycjtcbiAgICAgIH0pO1xuICB9XG5cbiAgLy8gTUg6IENoYW5nZWQgdGhlIGRlZmF1bHQgYm9vdHN0cmFwLmpzIHRvIHVzZSB0aGUgbmV3IENFUyBBUElcbiAgLy8gQmVjYXVzZSB0aGUgb2xkIG9uZSB1c2VzIHRoZSBnbG9iYWwgQ0VTIG9iamVjdCB0aGF0IGlzIG5vdCBhbGxvd2VkIHRvIGJlIGFjY2Vzc2VkIHdoZW4gdGhlIENJXG4gIC8vIGlzIGVtYmVkZGVkIGluIGFuIGlmcmFtZSBhbmQgY29taW5nIGZyb20gYW5vdGhlciBkb21haW5cbiAgLy8gVGhlcmVmb3Igd2UgbmVlZCB0byB1c2UgdGhlIG5ldyBDRVMgQVBJIHRvIGNvbW11bmljYXRlcyB2aWEgdGhlIGJyb2FkY2FzdCBBUElcbiAgc2V0dXBDRVMoKSB7XG4gICAgY29uc3QgaWZyYW1lID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJyNwY2lDb250YWluZXInKSBhcyBIVE1MSUZyYW1lRWxlbWVudCxcbiAgICAgIGlmcmFtZVdpbiA9IGlmcmFtZS5jb250ZW50V2luZG93IHx8IGlmcmFtZSxcbiAgICAgIGlmcmFtZURvYyA9IGlmcmFtZS5jb250ZW50RG9jdW1lbnQ7XG5cbiAgICAvLyBjb25zdCBjaGFubmVsID0gbmV3IEJyb2FkY2FzdENoYW5uZWwoJ2Nlc19jaGFubmVsJyk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLmhhbmRsZVBvc3RNZXNzYWdlKTtcbiAgICBpZnJhbWVEb2Mub3BlbigpO1xuICAgIGlmcmFtZURvYy53cml0ZShgXG4gICAgICA8aHRtbD5cbiAgICAgICAgPGhlYWQ+XG4gICAgICAgICAgPGxpbmsgaHJlZj0nJHtyZW1vdmVEb3VibGVTbGFzaGVzKGAke3RoaXMuYmFzZVJlZlVybH0vJHt0aGlzLm1hbmlmZXN0LnN0eWxlWzBdfWApfScgcmVsPVwic3R5bGVzaGVldFwiIC8+XG4gICAgICAgICAgPHNjcmlwdCBzcmM9JyR7cmVtb3ZlRG91YmxlU2xhc2hlcyhgJHt0aGlzLmJhc2VSZWZVcmx9LyR7dGhpcy5tYW5pZmVzdC5zY3JpcHRbMF19YCl9Jz48L3NjcmlwdD5cbiAgICAgICAgPC9oZWFkPlxuICAgICAgICA8Ym9keT48L2JvZHk+XG4gICAgICA8L2h0bWw+XG4gICAgICBgKTtcblxuICAgIGlmcmFtZURvYy5jbG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJRnJhbWVzKCkge1xuICAgIGNvbnN0IGlmcmFtZXNJblNoYWRvd1Jvb3QgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnaWZyYW1lJyk7XG4gICAgY29uc3QgaWZyYW1lID0gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKCdpZnJhbWUnKTtcblxuICAgIGNvbnN0IG91dGVySUZyYW1lcyA9IFsuLi5pZnJhbWVzSW5TaGFkb3dSb290LCAuLi5pZnJhbWVdO1xuICAgIGZvciAoY29uc3QgaWZyYW1lIG9mIG91dGVySUZyYW1lcykge1xuICAgICAgY29uc3QgaWZyYW1lU3JjID0gaWZyYW1lLnNyYztcbiAgICAgIGNvbnN0IGlzU2FtZU9yaWdpbiA9IG5ldyBVUkwoaWZyYW1lU3JjLCB3aW5kb3cubG9jYXRpb24uaHJlZikub3JpZ2luID09PSB3aW5kb3cubG9jYXRpb24ub3JpZ2luO1xuICAgICAgaWYgKGlzU2FtZU9yaWdpbikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IG91dGVyRG9jID0gaWZyYW1lLmNvbnRlbnREb2N1bWVudCB8fCBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgICAgICAgICBpZiAob3V0ZXJEb2MpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0SW5uZXJJRnJhbWVzKG91dGVyRG9jLCBvdXRlcklGcmFtZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGFjY2Vzc2luZyBuZXN0ZWQgaWZyYW1lOicsIGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIGdldCBvbmx5IHVuaXF1ZSBpZnJhbWVzXG4gICAgb3V0ZXJJRnJhbWVzLmZvckVhY2goKGlmcmFtZSwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChvdXRlcklGcmFtZXMuaW5kZXhPZihpZnJhbWUpICE9PSBpbmRleCkge1xuICAgICAgICBvdXRlcklGcmFtZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gb3V0ZXJJRnJhbWVzO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJbm5lcklGcmFtZXMoaWZyYW1lRG9jdW1lbnQ6IERvY3VtZW50LCBpZnJhbWVzID0gW10pIHtcbiAgICAvLyBHZXQgYWxsIGlmcmFtZXMgaW4gdGhlIGN1cnJlbnQgZG9jdW1lbnRcbiAgICBjb25zdCBjdXJyZW50SWZyYW1lcyA9IGlmcmFtZURvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lmcmFtZScpO1xuXG4gICAgY3VycmVudElmcmFtZXMuZm9yRWFjaChpZnJhbWUgPT4ge1xuICAgICAgLy8gQWRkIHRoZSBjdXJyZW50IGlmcmFtZSB0byB0aGUgbGlzdFxuICAgICAgaWZyYW1lcy5wdXNoKGlmcmFtZSk7XG5cbiAgICAgIC8vIFJlY3Vyc2l2ZWx5IGdldCBpZnJhbWVzIHdpdGhpbiB0aGUgY3VycmVudCBpZnJhbWVcbiAgICAgIC8vIENoZWNrIGlmIHRoZSBpZnJhbWUgc3JjIGlzIGZyb20gdGhlIHNhbWUgb3JpZ2luXG4gICAgICBjb25zdCBpZnJhbWVTcmMgPSBpZnJhbWUuc3JjO1xuICAgICAgY29uc3QgaXNTYW1lT3JpZ2luID0gbmV3IFVSTChpZnJhbWVTcmMsIHdpbmRvdy5sb2NhdGlvbi5ocmVmKS5vcmlnaW4gPT09IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XG5cbiAgICAgIGlmIChpc1NhbWVPcmlnaW4pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBuZXN0ZWREb2MgPSBpZnJhbWUuY29udGVudERvY3VtZW50IHx8IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICAgICAgICAgIHRoaXMuZ2V0SW5uZXJJRnJhbWVzKG5lc3RlZERvYywgaWZyYW1lcyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBhY2Nlc3NpbmcgbmVzdGVkIGlmcmFtZTonLCBlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdTa2lwcGVkIGNyb3NzLW9yaWdpbiBpZnJhbWU6JywgaWZyYW1lU3JjKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBpZnJhbWVzO1xuICB9XG5cbiAgcHJpdmF0ZSBwb3N0VG9XaW5kb3dBbmRJZnJhbWVzKHR5cGU6IHN0cmluZywgZGF0YTogYW55KSB7XG4gICAgd2luZG93LnBvc3RNZXNzYWdlKHsgdHlwZSwgZGF0YSB9LCAnKicpO1xuICAgIGNvbnN0IGlmcmFtZXMgPSB0aGlzLmdldElGcmFtZXMoKTtcbiAgICBmb3IgKGNvbnN0IGlmcmFtZSBvZiBpZnJhbWVzKSB7XG4gICAgICBpZiAoaWZyYW1lLmNvbnRlbnRXaW5kb3cpIHtcbiAgICAgICAgaWZyYW1lLmNvbnRlbnRXaW5kb3cucG9zdE1lc3NhZ2UoeyB0eXBlLCBkYXRhIH0sICcqJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlUG9zdE1lc3NhZ2UoZXZlbnQ6IE1lc3NhZ2VFdmVudCkge1xuICAgIGNvbnN0IHsgdHlwZSwgZGF0YSB9ID0gZXZlbnQuZGF0YTtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ3NldFJlc3BvbnNlJzpcbiAgICAgICAgdGhpcy5yYXdSZXNwb25zZSA9IGRhdGE7XG4gICAgICAgIHRoaXMuc2F2ZVJlc3BvbnNlKGRhdGEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2dldFJlc3BvbnNlJzoge1xuICAgICAgICB0aGlzLnBvc3RUb1dpbmRvd0FuZElmcmFtZXMoJ3Jlc3BvbnNlRGF0YScsIHRoaXMucmF3UmVzcG9uc2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2dldE1lZGlhJzoge1xuICAgICAgICBjb25zdCBtZWRpYURhdGEgPSB0aGlzLm1hbmlmZXN0Lm1lZGlhLm1hcChtZWRpYSA9PiB7XG4gICAgICAgICAgY29uc3QgdXJsID0gbWVkaWEuc3RhcnRzV2l0aCgnaHR0cCcpID8gbWVkaWEgOiByZW1vdmVEb3VibGVTbGFzaGVzKHRoaXMuYmFzZVJlZlVybCArICcvJyArIG1lZGlhKTtcbiAgICAgICAgICByZXR1cm4gdXJsO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5wb3N0VG9XaW5kb3dBbmRJZnJhbWVzKCdtZWRpYURhdGEnLCBtZWRpYURhdGEpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3NldFN0YWdlSGVpZ2h0JzpcbiAgICAgICAgY29uc29sZS5sb2coJ3NldFN0YWdlSGVpZ2h0IG5vdCBpbXBsZW1lbnRlZCcpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yYXdSZXNwb25zZSAhPT0gJyc7XG4gIH1cblxuICBzZXQgcmVzcG9uc2UodmFsOiBSZWFkb25seTxzdHJpbmcgfCBzdHJpbmdbXT4pIHtcbiAgICB0aGlzLnJhd1Jlc3BvbnNlID0gdmFsIGFzIHN0cmluZztcbiAgfVxuXG4gIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgdGhpcy5oYW5kbGVQb3N0TWVzc2FnZSk7XG4gICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgfVxuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8aWZyYW1lXG4gICAgICAgIHdpZHRoPSR7dGhpcy5nZXRBdHRyaWJ1dGUoJ3dpZHRoJyl9XG4gICAgICAgIGhlaWdodD0ke3RoaXMuZ2V0QXR0cmlidXRlKCdoZWlnaHQnKX1cbiAgICAgICAgZnJhbWVib3JkZXI9XCIwXCJcbiAgICAgICAgdGl0bGU9XCJwY2lDb250YWluZXJcIlxuICAgICAgICBpZD1cInBjaUNvbnRhaW5lclwiXG4gICAgICA+XG4gICAgICA8L2lmcmFtZT5cbiAgICAgICR7dGhpcy5fZXJyb3JNZXNzYWdlICYmXG4gICAgICBodG1sYDxkaXYgc3R5bGU9XCJjb2xvcjpyZWRcIj5cbiAgICAgICAgPGgxPkVycm9yPC9oMT5cbiAgICAgICAgJHt0aGlzLl9lcnJvck1lc3NhZ2V9XG4gICAgICA8L2Rpdj5gfWA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWN1c3RvbS1pbnRlcmFjdGlvbic6IFF0aUN1c3RvbUludGVyYWN0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IEludGVyYWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJuYWwvaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24nO1xuQGN1c3RvbUVsZW1lbnQoJ3F0aS1lbmQtYXR0ZW1wdC1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpRW5kQXR0ZW1wdEludGVyYWN0aW9uIGV4dGVuZHMgSW50ZXJhY3Rpb24ge1xuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2NvdW50LWF0dGVtcHQnIH0pXG4gIHB1YmxpYyBjb3VudEF0dGVtcHQ6IHN0cmluZyA9ICd0cnVlJztcblxuICBAcHJvcGVydHkoeyB0eXBlOiBTdHJpbmcgfSlcbiAgcHVibGljIHRpdGxlOiAnZW5kIGF0dGVtcHQnO1xuXG4gIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xuICAgIC8vIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBzZXQgcmVzcG9uc2UodmFsOiB1bmRlZmluZWQpIHtcbiAgICAvLyB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPGJ1dHRvbiA/ZGlzYWJsZWQ9JHt0aGlzLmRpc2FibGVkfSBwYXJ0PVwiYnV0dG9uXCIgQGNsaWNrPSR7dGhpcy5lbmRBdHRlbXB0fT4ke3RoaXMudGl0bGV9PC9idXR0b24+YDtcbiAgfVxuICBwdWJsaWMgZW5kQXR0ZW1wdChlOiBFdmVudCkge1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBDdXN0b21FdmVudCgnZW5kLWF0dGVtcHQnLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICBkZXRhaWw6IHsgcmVzcG9uc2VJZGVudGlmaWVyOiB0aGlzLnJlc3BvbnNlSWRlbnRpZmllciwgY291bnRBdHRlbXB0OiB0aGlzLmNvdW50QXR0ZW1wdCA9PT0gJ3RydWUnIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktZW5kLWF0dGVtcHQtaW50ZXJhY3Rpb24nOiBRdGlFbmRBdHRlbXB0SW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjc3MsIGh0bWwsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IERyYWdEcm9wSW50ZXJhY3Rpb25NaXhpbiB9IGZyb20gJy4uL2ludGVybmFsL2RyYWctZHJvcC9kcmFnLWRyb3AtaW50ZXJhY3Rpb24tbWl4aW4nO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWdhcC1tYXRjaC1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpR2FwTWF0Y2hJbnRlcmFjdGlvbiBleHRlbmRzIERyYWdEcm9wSW50ZXJhY3Rpb25NaXhpbihMaXRFbGVtZW50LCAncXRpLWdhcC10ZXh0JywgZmFsc2UsICdxdGktZ2FwJykge1xuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gW1xuICAgIGNzc2BcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAgICAgIGdhcDogMC41cmVtO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCgucXRpLWNob2ljZXMtdG9wKSB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICB9XG4gICAgICA6aG9zdCgucXRpLWNob2ljZXMtYm90dG9tKSB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTtcbiAgICAgIH1cbiAgICAgIDpob3N0KC5xdGktY2hvaWNlcy1sZWZ0KSB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICB9XG4gICAgICA6aG9zdCgucXRpLWNob2ljZXMtcmlnaHQpIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlO1xuICAgICAgfVxuICAgICAgW3BhcnQ9J2RyYWdzJ10sXG4gICAgICBbcGFydD0nZHJvcHMnXSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgICBnYXA6IDAuNXJlbTtcbiAgICAgIH1cbiAgICBgXG4gIF07XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYCA8c2xvdCBwYXJ0PVwiZHJhZ3NcIiBuYW1lPVwicXRpLWdhcC10ZXh0XCI+PC9zbG90PlxuICAgICAgPHNsb3QgcGFydD1cImRyb3BzXCI+PC9zbG90PmA7XG4gIH1cblxuICBzZXQgY29ycmVjdFJlc3BvbnNlKHZhbHVlOiBSZWFkb25seTxzdHJpbmcgfCBzdHJpbmdbXT4pIHtcbiAgICBsZXQgbWF0Y2hlczogeyB0ZXh0OiBzdHJpbmc7IGdhcDogc3RyaW5nIH1bXSA9IFtdOyAgICAgICAgICAgIFxuICAgIGNvbnN0IHJlc3BvbnNlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XG5cbiAgICBpZiAocmVzcG9uc2UpIHsgICAgICBcbiAgICAgIG1hdGNoZXMgPSByZXNwb25zZS5tYXAoeCA9PiB7XG4gICAgICAgIGNvbnN0IHNwbGl0ID0geC5zcGxpdCgnICcpO1xuICAgICAgICAgcmV0dXJuIHsgdGV4dDogc3BsaXRbMF0sIGdhcDogc3BsaXRbMV0gIH07fVxuICAgICAgKTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgZ2FwcyA9IHRoaXMucXVlcnlTZWxlY3RvckFsbCgncXRpLWdhcCcpO1xuICAgICAgZ2Fwcy5mb3JFYWNoKChnYXAsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGlkZW50aWZpZXIgPSBnYXAuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJyk7XG4gICAgICAgIGNvbnN0IHRleHRJZGVudGlmaWVyID0gbWF0Y2hlcy5maW5kKHggPT4geC5nYXAgPT09IGlkZW50aWZpZXIpPy50ZXh0O1xuICAgICAgICBjb25zdCB0ZXh0ID0gdGhpcy5xdWVyeVNlbGVjdG9yKGBxdGktZ2FwLXRleHRbaWRlbnRpZmllcj1cIiR7dGV4dElkZW50aWZpZXJ9XCJdYCk/LnRleHRDb250ZW50LnRyaW0oKTtcbiAgICAgICAgaWYgKHRleHRJZGVudGlmaWVyICYmIHRleHQpIHtcbiAgICAgICAgICBpZiAoIWdhcC5uZXh0RWxlbWVudFNpYmxpbmc/LmNsYXNzTGlzdC5jb250YWlucygnY29ycmVjdC1vcHRpb24nKSkge1xuICAgICAgICAgICAgY29uc3QgdGV4dFNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7ICAgICAgICAgXG4gICAgICAgICAgICB0ZXh0U3Bhbi5jbGFzc0xpc3QuYWRkKCdjb3JyZWN0LW9wdGlvbicpO1xuICAgICAgICAgICAgdGV4dFNwYW4udGV4dENvbnRlbnQgPSB0ZXh0O1xuICAgICAgICAgICAgZ2FwLmluc2VydEFkamFjZW50RWxlbWVudCgnYWZ0ZXJlbmQnLCB0ZXh0U3Bhbik7ICBcbiAgICAgICAgICB9ICBcbiAgICAgICAgfSAgXG4gICAgICAgIGVsc2UgaWYgKGdhcC5uZXh0RWxlbWVudFNpYmxpbmc/LmNsYXNzTGlzdC5jb250YWlucygnY29ycmVjdC1vcHRpb24nKSkge1xuICAgICAgICAgIGdhcC5uZXh0RWxlbWVudFNpYmxpbmcucmVtb3ZlKCk7XG4gICAgICAgIH0gICAgICAgICAgICBcbiAgICAgIH0pXG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWdhcC1tYXRjaC1pbnRlcmFjdGlvbic6IFF0aUdhcE1hdGNoSW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICIvKiBlc2xpbnQtZGlzYWJsZSBsaXQvbm8taW52YWxpZC1odG1sICovXG5pbXBvcnQgeyBjc3MsIGh0bWwsIHN2ZyB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBxdWVyeSwgcXVlcnlBc3NpZ25lZEVsZW1lbnRzLCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IGlmRGVmaW5lZCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL2lmLWRlZmluZWQuanMnO1xuaW1wb3J0IHsgcmVwZWF0IH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvcmVwZWF0LmpzJztcbmltcG9ydCB7IHBvc2l0aW9uSG90c3BvdHMgfSBmcm9tICcuLi9pbnRlcm5hbC9ob3RzcG90cy9ob3RzcG90JztcbmltcG9ydCB7IEludGVyYWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJuYWwvaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24nO1xuaW1wb3J0IHsgUXRpSG90c3BvdENob2ljZSB9IGZyb20gJy4uL3F0aS1ob3RzcG90LWNob2ljZSc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktZ3JhcGhpYy1hc3NvY2lhdGUtaW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aUdyYXBoaWNBc3NvY2lhdGVJbnRlcmFjdGlvbiBleHRlbmRzIEludGVyYWN0aW9uIHtcbiAgY2hvaWNlT3JkZXJpbmc6IGJvb2xlYW47XG4gIGhvdHNwb3RzO1xuICBzdGFydFBvaW50ID0gbnVsbDtcbiAgZW5kUG9pbnQgPSBudWxsO1xuICBAc3RhdGUoKSBfbGluZXMgPSBbXTtcbiAgQHN0YXRlKCkgc3RhcnRDb29yZDogeyB4OiBhbnk7IHk6IGFueSB9O1xuICBAc3RhdGUoKSBtb3VzZUNvb3JkOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH07XG4gIEBxdWVyeSgnc3ZnJykgc3ZnQ29udGFpbmVyO1xuICBAcXVlcnlBc3NpZ25lZEVsZW1lbnRzKHsgc2VsZWN0b3I6ICdpbWcnIH0pIGdySW1hZ2U7XG5cbiAgLy8gdGFyZ2V0IHRoZSBtYWluIHNsb3QgbWFrZSBpdCByZWxhdGl2ZSBhbmQgZml0IHdpdGggdGhlIGNvbnRlblxuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gW1xuICAgIGNzc2BcbiAgICAgIHNsb3Q6bm90KFtuYW1lPSdwcm9tcHQnXSkge1xuICAgICAgICAvLyBwb3NpdGlvbjogcmVsYXRpdmU7IC8qIHF0aS1ob3RzcG90LWNob2ljZSByZWxhdGl2ZSB0byB0aGUgc2xvdCAqL1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgd2lkdGg6IGZpdC1jb250ZW50OyAvKiBob3RzcG90cyBub3Qgc3RyZXRjaGluZyBmdXJ0aGVyIGlmIGltYWdlIGlzIGF0IG1heCBzaXplICovXG4gICAgICB9XG4gICAgICA6OnNsb3R0ZWQoaW1nKSB7XG4gICAgICAgIC8qIGltYWdlIG5vdCBzZWxlY3RhYmxlIGFueW1vcmUgKi9cbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgICAgfVxuICAgICAgOjpzbG90dGVkKHF0aS1hc3NvY2lhYmxlLWhvdHNwb3QpIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gICAgICB9XG4gICAgICBsaW5lLWNvbnRhaW5lciB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB9XG4gICAgICBzdmcge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMHB4O1xuICAgICAgICBsZWZ0OiAwcHg7XG4gICAgICB9XG4gICAgYFxuICBdO1xuICBzdmc6IFNWR1NWR0VsZW1lbnQ7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci1ob3RzcG90JywgdGhpcy5wb3NpdGlvbkhvdHNwb3RPblJlZ2lzdGVyKTtcbiAgfVxuXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuX2xpbmVzID0gW107XG4gIH1cbiAgdmFsaWRhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2xpbmVzLmxlbmd0aCA+IDA7XG4gIH1cbiAgc2V0IHJlc3BvbnNlKHZhbDogc3RyaW5nIHwgc3RyaW5nW10pIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICB0aGlzLl9saW5lcyA9IHZhbDtcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPHNsb3QgbmFtZT1cInByb21wdFwiPjwvc2xvdD5cbiAgICAgIDxsaW5lLWNvbnRhaW5lcj5cbiAgICAgICAgPHN2Z1xuICAgICAgICAgIHdpZHRoPSR7aWZEZWZpbmVkKHRoaXMuZ3JJbWFnZVswXT8ud2lkdGgpfVxuICAgICAgICAgIGhlaWdodD0ke2lmRGVmaW5lZCh0aGlzLmdySW1hZ2VbMF0/LmhlaWdodCl9XG4gICAgICAgICAgdmlld2JveD1cIjAgMCAke3RoaXMuZ3JJbWFnZVswXT8ud2lkdGh9ICR7dGhpcy5nckltYWdlWzBdPy5oZWlnaHR9XCJcbiAgICAgICAgPlxuICAgICAgICAgICR7cmVwZWF0KFxuICAgICAgICAgICAgdGhpcy5fbGluZXMsXG4gICAgICAgICAgICBsaW5lID0+IGxpbmUsXG4gICAgICAgICAgICAobGluZSwgaW5kZXgpID0+IHN2Z2BcbiAgICAgICAgICAgICAgPGxpbmVcbiAgICAgICAgICAgICAgICBwYXJ0PVwibGluZVwiXG4gICAgICAgICAgICAgICAgeDE9JHtwYXJzZUludCh0aGlzLnF1ZXJ5U2VsZWN0b3I8U1ZHTGluZUVsZW1lbnQ+KCdbaWRlbnRpZmllcj0nICsgbGluZS5zcGxpdCgnICcpWzBdICsgJ10nKS5zdHlsZS5sZWZ0KX1cbiAgICAgICAgICAgICAgICB5MT0ke3BhcnNlSW50KHRoaXMucXVlcnlTZWxlY3RvcjxTVkdMaW5lRWxlbWVudD4oJ1tpZGVudGlmaWVyPScgKyBsaW5lLnNwbGl0KCcgJylbMF0gKyAnXScpLnN0eWxlLnRvcCl9XG4gICAgICAgICAgICAgICAgeDI9JHtwYXJzZUludCh0aGlzLnF1ZXJ5U2VsZWN0b3I8U1ZHTGluZUVsZW1lbnQ+KCdbaWRlbnRpZmllcj0nICsgbGluZS5zcGxpdCgnICcpWzFdICsgJ10nKS5zdHlsZS5sZWZ0KX1cbiAgICAgICAgICAgICAgICB5Mj0ke3BhcnNlSW50KHRoaXMucXVlcnlTZWxlY3RvcjxTVkdMaW5lRWxlbWVudD4oJ1tpZGVudGlmaWVyPScgKyBsaW5lLnNwbGl0KCcgJylbMV0gKyAnXScpLnN0eWxlLnRvcCl9XG4gICAgICAgICAgICAgICAgc3Ryb2tlPVwicmVkXCJcbiAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIzXCJcbiAgICAgICAgICAgICAgICBAY2xpY2s9JHsoZTogRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9saW5lcyA9IHRoaXMuX2xpbmVzLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5zYXZlUmVzcG9uc2UodGhpcy5fbGluZXMpO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICBgXG4gICAgICAgICAgKX1cbiAgICAgICAgICAke3RoaXMuc3RhcnRQb2ludCAmJlxuICAgICAgICAgIHN2Z2A8bGluZVxuICAgICAgICAgICAgcGFydD1cInBvaW50XCJcbiAgICAgICAgICAgIHgxPSR7dGhpcy5zdGFydENvb3JkLnh9XG4gICAgICAgICAgICB5MT0ke3RoaXMuc3RhcnRDb29yZC55fVxuICAgICAgICAgICAgeDI9JHt0aGlzLm1vdXNlQ29vcmQueH1cbiAgICAgICAgICAgIHkyPSR7dGhpcy5tb3VzZUNvb3JkLnl9XG4gICAgICAgICAgICBzdHJva2U9XCJyZWRcIlxuICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiM1wiXG4gICAgICAgICAgLz5gfVxuICAgICAgICA8L3N2Zz5cbiAgICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgPC9saW5lLWNvbnRhaW5lcj5gO1xuICB9XG5cbiAgcHJpdmF0ZSBwb3NpdGlvbkhvdHNwb3RPblJlZ2lzdGVyKGU6IEN1c3RvbUV2ZW50PFF0aUhvdHNwb3RDaG9pY2U+KTogdm9pZCB7XG4gICAgY29uc3QgaW1nID0gdGhpcy5xdWVyeVNlbGVjdG9yKCdpbWcnKSBhcyBIVE1MSW1hZ2VFbGVtZW50O1xuICAgIGNvbnN0IGhvdHNwb3QgPSBlLnRhcmdldCBhcyBRdGlIb3RzcG90Q2hvaWNlO1xuICAgIGNvbnN0IGNvb3JkcyA9IGhvdHNwb3QuZ2V0QXR0cmlidXRlKCdjb29yZHMnKTtcbiAgICBjb25zdCBzaGFwZSA9IGhvdHNwb3QuZ2V0QXR0cmlidXRlKCdzaGFwZScpO1xuICAgIGNvbnN0IGNvb3Jkc051bWJlciA9IGNvb3Jkcy5zcGxpdCgnLCcpLm1hcChzID0+IHBhcnNlSW50KHMpKTtcbiAgICBwb3NpdGlvbkhvdHNwb3RzKHNoYXBlLCBjb29yZHNOdW1iZXIsIGltZywgaG90c3BvdCk7XG4gIH1cblxuICBvdmVycmlkZSBmaXJzdFVwZGF0ZWQoZSk6IHZvaWQge1xuICAgIHN1cGVyLmZpcnN0VXBkYXRlZChlKTtcblxuICAgIHRoaXMuaG90c3BvdHMgPSB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoJ3F0aS1hc3NvY2lhYmxlLWhvdHNwb3QnKTtcblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGV2ZW50ID0+IHtcbiAgICAgIHRoaXMubW91c2VDb29yZCA9IHtcbiAgICAgICAgeDogZXZlbnQuY2xpZW50WCAtIHRoaXMuZ3JJbWFnZVswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LFxuICAgICAgICB5OiBldmVudC5jbGllbnRZIC0gdGhpcy5nckltYWdlWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHRoaXMuaG90c3BvdHMuZm9yRWFjaChob3RzcG90ID0+IHtcbiAgICAgIGhvdHNwb3Quc3R5bGUubGVmdCA9IGhvdHNwb3QuZ2V0QXR0cmlidXRlKCdjb29yZHMnKS5zcGxpdCgnLCcpWzBdICsgJ3B4JztcbiAgICAgIGhvdHNwb3Quc3R5bGUudG9wID0gaG90c3BvdC5nZXRBdHRyaWJ1dGUoJ2Nvb3JkcycpLnNwbGl0KCcsJylbMV0gKyAncHgnO1xuXG4gICAgICBob3RzcG90LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZXZlbnQgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuc3RhcnRQb2ludCkge1xuICAgICAgICAgIHRoaXMuc3RhcnRQb2ludCA9IGV2ZW50LnRhcmdldDtcblxuICAgICAgICAgIHRoaXMuc3RhcnRDb29yZCA9IHtcbiAgICAgICAgICAgIHg6IHRoaXMuc3RhcnRQb2ludC5nZXRBdHRyaWJ1dGUoJ2Nvb3JkcycpLnNwbGl0KCcsJylbMF0sXG4gICAgICAgICAgICB5OiB0aGlzLnN0YXJ0UG9pbnQuZ2V0QXR0cmlidXRlKCdjb29yZHMnKS5zcGxpdCgnLCcpWzFdXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5lbmRQb2ludCkge1xuICAgICAgICAgIHRoaXMuZW5kUG9pbnQgPSBldmVudC50YXJnZXQ7XG5cbiAgICAgICAgICB0aGlzLl9saW5lcyA9IFtcbiAgICAgICAgICAgIC4uLnRoaXMuX2xpbmVzLFxuICAgICAgICAgICAgdGhpcy5zdGFydFBvaW50LmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpICsgJyAnICsgdGhpcy5lbmRQb2ludC5nZXRBdHRyaWJ1dGUoJ2lkZW50aWZpZXInKVxuICAgICAgICAgIF07XG4gICAgICAgICAgdGhpcy5zYXZlUmVzcG9uc2UodGhpcy5fbGluZXMpO1xuICAgICAgICAgIHRoaXMuc3RhcnRQb2ludCA9IG51bGw7XG4gICAgICAgICAgdGhpcy5lbmRQb2ludCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdxdGktcmVnaXN0ZXItaG90c3BvdCcsIHRoaXMucG9zaXRpb25Ib3RzcG90T25SZWdpc3Rlcik7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWdyYXBoaWMtYXNzb2NpYXRlLWludGVyYWN0aW9uJzogUXRpR3JhcGhpY0Fzc29jaWF0ZUludGVyYWN0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgUXRpSG90c3BvdENob2ljZSB9IGZyb20gJy4uLy4uL3F0aS1ob3RzcG90LWNob2ljZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3NpdGlvbkhvdHNwb3RzKFxuICBzaGFwZTogc3RyaW5nLFxuICBjb29yZHNOdW1iZXI6IG51bWJlcltdLFxuICBpbWc6IEhUTUxJbWFnZUVsZW1lbnQsXG4gIGhvdHNwb3Q6IFF0aUhvdHNwb3RDaG9pY2Vcbikge1xuICBzd2l0Y2ggKHNoYXBlKSB7XG4gICAgY2FzZSAnY2lyY2xlJzpcbiAgICAgIHtcbiAgICAgICAgY29uc3QgW2NlbnRlclgsIGNlbnRlclksIHJhZGl1c10gPSBjb29yZHNOdW1iZXI7XG4gICAgICAgIGNvbnN0IGNlbnRlclhQZXIgPSAoY2VudGVyWCAvIGltZy53aWR0aCkgKiAxMDA7XG4gICAgICAgIGNvbnN0IGNlbnRlcllQZXIgPSAoY2VudGVyWSAvIGltZy5oZWlnaHQpICogMTAwO1xuICAgICAgICBjb25zdCByYWRpdXNQZXIgPSAocmFkaXVzIC8gaW1nLndpZHRoKSAqIDEwMDtcbiAgICAgICAgaG90c3BvdC5zdHlsZS5sZWZ0ID0gY2VudGVyWFBlciAtIHJhZGl1c1BlciArICclJztcbiAgICAgICAgaG90c3BvdC5zdHlsZS50b3AgPSBjZW50ZXJZUGVyIC0gcmFkaXVzUGVyICsgJyUnO1xuICAgICAgICBob3RzcG90LnN0eWxlLndpZHRoID0gaG90c3BvdC5zdHlsZS5oZWlnaHQgPSA0ICogcmFkaXVzUGVyICsgJ3B4JztcbiAgICAgICAgaG90c3BvdC5zdHlsZS5ib3JkZXJSYWRpdXMgPSBgOTk5OXB4YDtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAncmVjdCc6XG4gICAgICB7XG4gICAgICAgIGNvbnN0IFtsZWZ0WCwgdG9wWSwgcmlnaHRYLCBib3R0b21ZXSA9IGNvb3Jkc051bWJlcjtcbiAgICAgICAgY29uc3QgbGVmdFhQZXIgPSAobGVmdFggLyBpbWcud2lkdGgpICogMTAwO1xuICAgICAgICBjb25zdCB0b3BZUGVyID0gKHRvcFkgLyBpbWcuaGVpZ2h0KSAqIDEwMDtcbiAgICAgICAgY29uc3QgcmlnaHRYUGVyID0gKHJpZ2h0WCAvIGltZy53aWR0aCkgKiAxMDA7XG4gICAgICAgIGNvbnN0IGJvdHRvbVlQZXIgPSAoYm90dG9tWSAvIGltZy5oZWlnaHQpICogMTAwO1xuICAgICAgICBob3RzcG90LnN0eWxlLmxlZnQgPSBsZWZ0WFBlciArICclJztcbiAgICAgICAgaG90c3BvdC5zdHlsZS50b3AgPSB0b3BZUGVyICsgJyUnO1xuICAgICAgICBob3RzcG90LnN0eWxlLndpZHRoID0gcmlnaHRYUGVyIC0gbGVmdFhQZXIgKyAnJSc7XG4gICAgICAgIGhvdHNwb3Quc3R5bGUuaGVpZ2h0ID0gYm90dG9tWVBlciAtIHRvcFlQZXIgKyAnJSc7XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3BvbHknOlxuICAgICAge1xuICAgICAgICAvLyBmcm9tIGEsYixjLGQsZSxmID0+IFt7eDphLCB5OmJ9LHt4OmMsIHk6ZH0se3g6ZSwgeTpmfV1cbiAgICAgICAgY29uc3QgcG9seWNvb3JkcyA9IGNvb3Jkc051bWJlci5yZWR1Y2UoKGFjYywgY3VycmVudFZhbHVlLCBjdXJyZW50SW5kZXgsIHBvbHlDKSA9PiB7XG4gICAgICAgICAgaWYgKGN1cnJlbnRJbmRleCAlIDIgPT09IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RWYWwgPSBhY2MucG9wKCk7XG4gICAgICAgICAgICBhY2NbYWNjLmxlbmd0aF0gPSB7IHg6IGxhc3RWYWwsIHk6IHBvbHlDW2N1cnJlbnRJbmRleF0gfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWNjLnB1c2goY3VycmVudFZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwgW10pO1xuXG4gICAgICAgIC8vIGNhbGN1bGF0ZSBib3VuZGluZyBib3ggYnkgZmluZGluZyB0aGUgbWF4IGF4IG1pbiBjb29yZGluYXRlcyBvZiB4IGFuZCB5XG4gICAgICAgIGNvbnN0IGxlZnRYID0gTWF0aC5taW4oLi4ucG9seWNvb3Jkcy5tYXAocG9pbnQgPT4gcG9pbnQueCkpO1xuICAgICAgICBjb25zdCByaWdodFggPSBNYXRoLm1heCguLi5wb2x5Y29vcmRzLm1hcChwb2ludCA9PiBwb2ludC54KSk7XG4gICAgICAgIGNvbnN0IHRvcFkgPSBNYXRoLm1pbiguLi5wb2x5Y29vcmRzLm1hcChwb2ludCA9PiBwb2ludC55KSk7XG4gICAgICAgIGNvbnN0IGJvdHRvbVkgPSBNYXRoLm1heCguLi5wb2x5Y29vcmRzLm1hcChwb2ludCA9PiBwb2ludC55KSk7XG5cbiAgICAgICAgLy8gY2FsY3VsYXRlIHRoZSByZWxhdGl2ZSBkaXN0YW5jZSBjYXVzZSB3ZSB3YW50IHRvIHVzZSBwZXJjZW50YWdlc1xuICAgICAgICBjb25zdCBsZWZ0WFBlciA9IChsZWZ0WCAvIGltZy53aWR0aCkgKiAxMDA7XG4gICAgICAgIGNvbnN0IHRvcFlQZXIgPSAodG9wWSAvIGltZy5oZWlnaHQpICogMTAwO1xuICAgICAgICBjb25zdCByaWdodFhQZXIgPSAocmlnaHRYIC8gaW1nLndpZHRoKSAqIDEwMDtcbiAgICAgICAgY29uc3QgYm90dG9tWVBlciA9IChib3R0b21ZIC8gaW1nLmhlaWdodCkgKiAxMDA7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBob3RzcG90IG9uIHgseSBhbmQgc2V0IHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGluIHBlcmNlbnRhZ2VzXG4gICAgICAgIGhvdHNwb3Quc3R5bGUubGVmdCA9IChsZWZ0WCAvIGltZy53aWR0aCkgKiAxMDAgKyAnJSc7XG4gICAgICAgIGhvdHNwb3Quc3R5bGUudG9wID0gKHRvcFkgLyBpbWcuaGVpZ2h0KSAqIDEwMCArICclJztcbiAgICAgICAgaG90c3BvdC5zdHlsZS53aWR0aCA9IHJpZ2h0WFBlciAtIGxlZnRYUGVyICsgJyUnO1xuICAgICAgICBob3RzcG90LnN0eWxlLmhlaWdodCA9IGJvdHRvbVlQZXIgLSB0b3BZUGVyICsgJyUnO1xuXG4gICAgICAgIC8vIGFsbCB0aGUgcG9seWdvbiBwb2ludHMgc2hvdWxkIGJlIGNvcnJlY3RlZCBjYXVzZWQgdGhleSBhcmUgZnJvbVxuICAgICAgICAvLyBpbWFnZSAwLDAgcG9pbnQsIGFuZCBzaG91bGQgYmUgZnJvbSB0aGUgaG90c3BvdCBwb2ludCB3aGljaCBhbHJlYWR5XG4gICAgICAgIC8vIGhhcyBiZWVuIG9mZnNldHRlZCBmcm9tIHRoZSBpbWFnZSBpbiB0aGUgcHJldmlvdXMgZmV3IGxpbmVzIG9mIGNvZGVcbiAgICAgICAgLy8gYWxzbyB0aGUgcG9pbnRzIGhhdmUgYSByZWxhdGl2ZSBkaXN0YW5jZSB0byB0aGUgaW1hZ2UsIGJ1dCBub3cgaGF2ZVxuICAgICAgICAvLyB0byBoYXZlIGEgcmVsYXRpdmUgZGlzdGFuY2UgZnJvbSB0aGUgd2lkdGggb2YgdGhlIGhvdHNwb3RcbiAgICAgICAgY29uc3QgcG9seWdvbkRhdGEgPSBwb2x5Y29vcmRzLm1hcChwb2ludCA9PiAoe1xuICAgICAgICAgIHg6ICgocG9pbnQueCAtIGxlZnRYKSAvIChyaWdodFggLSBsZWZ0WCkpICogMTAwLFxuICAgICAgICAgIHk6ICgocG9pbnQueSAtIHRvcFkpIC8gKGJvdHRvbVkgLSB0b3BZKSkgKiAxMDBcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIC8vIGNyZWF0ZSBjbGlwIHBhdGggY29vcmRpbmF0ZSBzdHlsZSBpbiBwZXJjZW50YWdlc1xuICAgICAgICBjb25zdCBwb2x5RCA9IHBvbHlnb25EYXRhLm1hcChwID0+IE1hdGgucm91bmQocC54KSArICclICcgKyBNYXRoLnJvdW5kKHAueSkgKyAnJScpLmpvaW4oJywnKTtcblxuICAgICAgICAvLyA1MCUgMCUsIDEwMCUgNTAlLCA1MCUgMTAwJSwgMCUgNTAlXG4gICAgICAgIGhvdHNwb3Quc3R5bGUuY2xpcFBhdGggPSBgcG9seWdvbigke3BvbHlEfSlgO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgYnJlYWs7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjc3MsIGh0bWwsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IERyYWdEcm9wSW50ZXJhY3Rpb25NaXhpbiB9IGZyb20gJy4uL2ludGVybmFsL2RyYWctZHJvcC9kcmFnLWRyb3AtaW50ZXJhY3Rpb24tbWl4aW4nO1xuaW1wb3J0IHsgUXRpSG90c3BvdENob2ljZSB9IGZyb20gJy4uL3F0aS1ob3RzcG90LWNob2ljZSc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktZ3JhcGhpYy1nYXAtbWF0Y2gtaW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aUdyYXBoaWNHYXBNYXRjaEludGVyYWN0aW9uIGV4dGVuZHMgRHJhZ0Ryb3BJbnRlcmFjdGlvbk1peGluKFxuICBMaXRFbGVtZW50LFxuICAncXRpLWdhcC1pbWcnLFxuICBmYWxzZSxcbiAgJ3F0aS1hc3NvY2lhYmxlLWhvdHNwb3QnXG4pIHtcbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IGNzc2BcbiAgICA6aG9zdCB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgfVxuICAgIHNsb3RbbmFtZT0ncXRpLWdhcC1pbWcnXSB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZ2FwOiAxcmVtO1xuICAgIH1cbiAgYDtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgIDxzbG90Pjwvc2xvdD5cbiAgICAgIDxzbG90IG5hbWU9XCJxdGktZ2FwLWltZ1wiPjwvc2xvdD5gO1xuICB9XG5cbiAgcHJpdmF0ZSBwb3NpdGlvbkhvdHNwb3RPblJlZ2lzdGVyKGU6IEN1c3RvbUV2ZW50PG51bGw+KTogdm9pZCB7XG4gICAgY29uc3QgaW1nID0gdGhpcy5xdWVyeVNlbGVjdG9yKCdpbWcnKSBhcyBIVE1MSW1hZ2VFbGVtZW50O1xuICAgIGNvbnN0IGhvdHNwb3QgPSBlLnRhcmdldCBhcyBRdGlIb3RzcG90Q2hvaWNlO1xuICAgIGNvbnN0IGNvb3JkcyA9IGhvdHNwb3QuZ2V0QXR0cmlidXRlKCdjb29yZHMnKTtcbiAgICBjb25zdCBzaGFwZSA9IGhvdHNwb3QuZ2V0QXR0cmlidXRlKCdzaGFwZScpO1xuICAgIGNvbnN0IGNvb3Jkc051bWJlciA9IGNvb3Jkcy5zcGxpdCgnLCcpLm1hcChzID0+IHBhcnNlSW50KHMpKTtcblxuICAgIC8vIHBvc2l0aW9uSG90c3BvdHMoc2hhcGUsIGNvb3Jkc051bWJlciwgaW1nLCBob3RzcG90KTtcbiAgICBzd2l0Y2ggKHNoYXBlKSB7XG4gICAgICBjYXNlICdjaXJjbGUnOlxuICAgICAgICB7XG4gICAgICAgICAgY29uc3QgW2NlbnRlclgsIGNlbnRlclksIHJhZGl1c10gPSBjb29yZHNOdW1iZXI7XG4gICAgICAgICAgaG90c3BvdC5zdHlsZS5sZWZ0ID0gY2VudGVyWCAtIHJhZGl1cyArICdweCc7XG4gICAgICAgICAgaG90c3BvdC5zdHlsZS50b3AgPSBjZW50ZXJZIC0gcmFkaXVzICsgJ3B4JztcbiAgICAgICAgICBob3RzcG90LnN0eWxlLndpZHRoID0gaG90c3BvdC5zdHlsZS5oZWlnaHQgPSAyICogcmFkaXVzICsgJ3B4JztcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAncmVjdCc6XG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCBbbGVmdFgsIHRvcFksIHJpZ2h0WCwgYm90dG9tWV0gPSBjb29yZHNOdW1iZXI7XG4gICAgICAgICAgaG90c3BvdC5zdHlsZS5sZWZ0ID0gbGVmdFggKyAncHgnO1xuICAgICAgICAgIGhvdHNwb3Quc3R5bGUudG9wID0gdG9wWSArICdweCc7XG4gICAgICAgICAgaG90c3BvdC5zdHlsZS53aWR0aCA9IHJpZ2h0WCAtIGxlZnRYICsgJ3B4JztcbiAgICAgICAgICBob3RzcG90LnN0eWxlLmhlaWdodCA9IGJvdHRvbVkgLSB0b3BZICsgJ3B4JztcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci1ob3RzcG90JywgdGhpcy5wb3NpdGlvbkhvdHNwb3RPblJlZ2lzdGVyKTtcbiAgfVxuICBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigncXRpLXJlZ2lzdGVyLWhvdHNwb3QnLCB0aGlzLnBvc2l0aW9uSG90c3BvdE9uUmVnaXN0ZXIpO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1ncmFwaGljLWdhcC1tYXRjaC1pbnRlcmFjdGlvbic6IFF0aUdyYXBoaWNHYXBNYXRjaEludGVyYWN0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IENob2ljZXMgfSBmcm9tICcuLi9pbnRlcm5hbC9jaG9pY2VzL2Nob2ljZXMnO1xuaW1wb3J0IHsgUXRpSG90c3BvdENob2ljZSB9IGZyb20gJy4uL3F0aS1ob3RzcG90LWNob2ljZSc7XG5cbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBwb3NpdGlvbkhvdHNwb3RzIH0gZnJvbSAnLi4vaW50ZXJuYWwvaG90c3BvdHMvaG90c3BvdCc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktZ3JhcGhpYy1vcmRlci1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpR3JhcGhpY09yZGVySW50ZXJhY3Rpb24gZXh0ZW5kcyBDaG9pY2VzIHtcbiAgY2hvaWNlT3JkZXJpbmc6IGJvb2xlYW47XG5cbiAgLy8gZG8gbm90IHNlbGVjdCAoIGhpZ2hsaWdodCBibHVlLCB0aGUgaW1hZ2UpXG4gIC8vIHRhcmdldCB0aGUgbWFpbiBzbG90IG1ha2UgaXQgcmVsYXRpdmUgYW5kIGZpdCB3aXRoIHRoZSBjb250ZW5cbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IFtcbiAgICBjc3NgXG4gICAgICBzbG90Om5vdChbbmFtZT0ncHJvbXB0J10pIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOyAvKiBxdGktaG90c3BvdC1jaG9pY2UgcmVsYXRpdmUgdG8gdGhlIHNsb3QgKi9cbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHdpZHRoOiBmaXQtY29udGVudDsgLyogaG90c3BvdHMgbm90IHN0cmV0Y2hpbmcgZnVydGhlciBpZiBpbWFnZSBpcyBhdCBtYXggc2l6ZSAqL1xuICAgICAgfVxuICAgICAgOjpzbG90dGVkKGltZykge1xuICAgICAgICAvKiBpbWFnZSBub3Qgc2VsZWN0YWJsZSBhbnltb3JlICovXG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgIH1cbiAgICBgXG4gIF07XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPHNsb3QgbmFtZT1cInByb21wdFwiPjwvc2xvdD5cbiAgICAgIDwhLS0gc2xvdCBmb3IgdGhlIHByb21wdCAtLT5cbiAgICAgIDxzbG90Pjwvc2xvdD5cbiAgICAgIDwhLS0gc2xvdCBmb3IgdGhlIGltYWdlIGFuZCBob3RzcG90cyAtLT5cbiAgICBgO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRIb3RzcG90T3JkZXIoZTogQ3VzdG9tRXZlbnQ8eyBpZGVudGlmaWVyOiBzdHJpbmc7IGNoZWNrZWQ6IGJvb2xlYW4gfT4pOiB2b2lkIHtcbiAgICBjb25zdCB7IGlkZW50aWZpZXIgfSA9IGUuZGV0YWlsO1xuXG4gICAgY29uc3QgaG90c3BvdCA9IHRoaXMuX2Nob2ljZUVsZW1lbnRzLmZpbmQoZWwgPT4gZWwuZ2V0QXR0cmlidXRlKCdpZGVudGlmaWVyJykgPT09IGlkZW50aWZpZXIpIGFzIFF0aUhvdHNwb3RDaG9pY2U7XG5cbiAgICBjb25zdCBtYXhTZWxlY3Rpb24gPSB0aGlzLl9jaG9pY2VFbGVtZW50cy5sZW5ndGg7XG4gICAgaWYgKCF0aGlzLmNob2ljZU9yZGVyaW5nKSB7XG4gICAgICB0aGlzLmNob2ljZU9yZGVyaW5nID0gdHJ1ZTtcbiAgICAgIGlmIChob3RzcG90Lm9yZGVyID09IG51bGwpIHtcbiAgICAgICAgaWYgKCh0aGlzLl9jaG9pY2VFbGVtZW50cyBhcyBRdGlIb3RzcG90Q2hvaWNlW10pLmZpbHRlcihpID0+IGkub3JkZXIgPiAwKS5sZW5ndGggPj0gbWF4U2VsZWN0aW9uKSB7XG4gICAgICAgICAgdGhpcy5jaG9pY2VPcmRlcmluZyA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybjsgLy8gZG9uJ3QgZG8gYW55dGhpbmcgaWYgdXNlciBhbHJlYWR5IHNlbGVjdGVkIDUgaW1hZ2VzLlxuICAgICAgICB9XG4gICAgICAgIGhvdHNwb3Qub3JkZXIgPSAodGhpcy5fY2hvaWNlRWxlbWVudHMgYXMgUXRpSG90c3BvdENob2ljZVtdKS5maWx0ZXIoaSA9PiAhIWkub3JkZXIpLmxlbmd0aCArIDE7XG4gICAgICAgIHRoaXMuY2hvaWNlT3JkZXJpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKHRoaXMuX2Nob2ljZUVsZW1lbnRzIGFzIFF0aUhvdHNwb3RDaG9pY2VbXSkuZm9yRWFjaChob3RzcG90ID0+IHtcbiAgICAgICAgICBpZiAoaG90c3BvdC5vcmRlciA+IGhvdHNwb3Qub3JkZXIpIHtcbiAgICAgICAgICAgIGhvdHNwb3Qub3JkZXItLTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGhvdHNwb3Q7XG4gICAgICAgIH0pO1xuICAgICAgICBob3RzcG90Lm9yZGVyID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2hvaWNlT3JkZXJpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBvc2l0aW9uSG90c3BvdE9uUmVnaXN0ZXIoZTogQ3VzdG9tRXZlbnQ8UXRpSG90c3BvdENob2ljZT4pOiB2b2lkIHtcbiAgICBjb25zdCBpbWcgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpIGFzIEhUTUxJbWFnZUVsZW1lbnQ7XG4gICAgY29uc3QgaG90c3BvdCA9IGUudGFyZ2V0IGFzIFF0aUhvdHNwb3RDaG9pY2U7XG4gICAgY29uc3QgY29vcmRzID0gaG90c3BvdC5nZXRBdHRyaWJ1dGUoJ2Nvb3JkcycpO1xuICAgIGNvbnN0IHNoYXBlID0gaG90c3BvdC5nZXRBdHRyaWJ1dGUoJ3NoYXBlJyk7XG4gICAgY29uc3QgY29vcmRzTnVtYmVyID0gY29vcmRzLnNwbGl0KCcsJykubWFwKHMgPT4gcGFyc2VJbnQocykpO1xuXG4gICAgcG9zaXRpb25Ib3RzcG90cyhzaGFwZSwgY29vcmRzTnVtYmVyLCBpbWcsIGhvdHNwb3QpO1xuICB9XG5cbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1jaG9pY2UtZWxlbWVudC1zZWxlY3RlZCcsIHRoaXMuc2V0SG90c3BvdE9yZGVyKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3F0aS1yZWdpc3Rlci1jaG9pY2UnLCB0aGlzLnBvc2l0aW9uSG90c3BvdE9uUmVnaXN0ZXIpO1xuICB9XG4gIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdxdGktY2hvaWNlLWVsZW1lbnQtc2VsZWN0ZWQnLCB0aGlzLnNldEhvdHNwb3RPcmRlcik7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdxdGktcmVnaXN0ZXItY2hvaWNlJywgdGhpcy5wb3NpdGlvbkhvdHNwb3RPblJlZ2lzdGVyKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktZ3JhcGhpYy1vcmRlci1pbnRlcmFjdGlvbic6IFF0aUdyYXBoaWNPcmRlckludGVyYWN0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBDaG9pY2VzIH0gZnJvbSAnLi4vaW50ZXJuYWwvY2hvaWNlcy9jaG9pY2VzJztcbmltcG9ydCB7IHBvc2l0aW9uSG90c3BvdHMgfSBmcm9tICcuLi9pbnRlcm5hbC9ob3RzcG90cy9ob3RzcG90JztcbmltcG9ydCB7IFF0aUhvdHNwb3RDaG9pY2UgfSBmcm9tICcuLi9xdGktaG90c3BvdC1jaG9pY2UnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWhvdHNwb3QtaW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aUhvdHNwb3RJbnRlcmFjdGlvbiBleHRlbmRzIENob2ljZXMge1xuICAvLyBkbyBub3Qgc2VsZWN0ICggaGlnaGxpZ2h0IGJsdWUsIHRoZSBpbWFnZSlcbiAgLy8gdGFyZ2V0IHRoZSBtYWluIHNsb3QgbWFrZSBpdCByZWxhdGl2ZSBhbmQgZml0IHdpdGggdGhlIGNvbnRlblxuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gW1xuICAgIGNzc2BcbiAgICAgIHNsb3Q6bm90KFtuYW1lPSdwcm9tcHQnXSkge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7IC8qIHF0aS1ob3RzcG90LWNob2ljZSByZWxhdGl2ZSB0byB0aGUgc2xvdCAqL1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgd2lkdGg6IGZpdC1jb250ZW50OyAvKiBob3RzcG90cyBub3Qgc3RyZXRjaGluZyBmdXJ0aGVyIGlmIGltYWdlIGlzIGF0IG1heCBzaXplICovXG4gICAgICB9XG4gICAgICA6OnNsb3R0ZWQoaW1nKSB7XG4gICAgICAgIC8qIGltYWdlIG5vdCBzZWxlY3RhYmxlIGFueW1vcmUgKi9cbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgICAgICAvKiB3aWR0aDoxMDAlOyAqL1xuICAgICAgfVxuICAgIGBcbiAgXTtcbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPHNsb3QgbmFtZT1cInByb21wdFwiPjwvc2xvdD5cbiAgICAgIDwhLS0gc2xvdCBmb3IgdGhlIHByb21wdCAtLT5cbiAgICAgIDxzbG90Pjwvc2xvdD5cbiAgICAgIDwhLS0gc2xvdCBmb3IgdGhlIGltYWdlIGFuZCBob3RzcG90cyAtLT5cbiAgICBgO1xuICB9XG5cbiAgcHJpdmF0ZSBwb3NpdGlvbkhvdHNwb3RPblJlZ2lzdGVyKGU6IEN1c3RvbUV2ZW50PFF0aUhvdHNwb3RDaG9pY2U+KTogdm9pZCB7XG4gICAgY29uc3QgaW1nID0gdGhpcy5xdWVyeVNlbGVjdG9yKCdpbWcnKSBhcyBIVE1MSW1hZ2VFbGVtZW50O1xuICAgIGNvbnN0IGhvdHNwb3QgPSBlLnRhcmdldCBhcyBRdGlIb3RzcG90Q2hvaWNlO1xuICAgIGNvbnN0IGNvb3JkcyA9IGhvdHNwb3QuZ2V0QXR0cmlidXRlKCdjb29yZHMnKTtcbiAgICBjb25zdCBzaGFwZSA9IGhvdHNwb3QuZ2V0QXR0cmlidXRlKCdzaGFwZScpO1xuICAgIGNvbnN0IGNvb3Jkc051bWJlciA9IGNvb3Jkcy5zcGxpdCgnLCcpLm1hcChzID0+IHBhcnNlSW50KHMpKTtcblxuICAgIHBvc2l0aW9uSG90c3BvdHMoc2hhcGUsIGNvb3Jkc051bWJlciwgaW1nLCBob3RzcG90KTtcbiAgfVxuXG4gIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdxdGktcmVnaXN0ZXItY2hvaWNlJywgdGhpcy5wb3NpdGlvbkhvdHNwb3RPblJlZ2lzdGVyKTtcbiAgfVxuICBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigncXRpLXJlZ2lzdGVyLWNob2ljZScsIHRoaXMucG9zaXRpb25Ib3RzcG90T25SZWdpc3Rlcik7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWhvdHNwb3QtaW50ZXJhY3Rpb24nOiBRdGlIb3RzcG90SW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjc3MsIGh0bWwsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgRHJhZ0Ryb3BJbnRlcmFjdGlvbk1peGluIH0gZnJvbSAnLi4vaW50ZXJuYWwvZHJhZy1kcm9wL2RyYWctZHJvcC1pbnRlcmFjdGlvbi1taXhpbic7XG5cbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHVuc2FmZUhUTUwgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy91bnNhZmUtaHRtbC5qcyc7XG5pbXBvcnQgeyBSZXNwb25zZUludGVyYWN0aW9uIH0gZnJvbSAnLi4vLi4vaW50ZXJuYWwvZXhwcmVzc2lvbi1yZXN1bHQnO1xuaW1wb3J0ICcuLi9xdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlJztcbmltcG9ydCB7IFF0aVNpbXBsZUFzc29jaWFibGVDaG9pY2UgfSBmcm9tICcuLi9xdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlJztcblxuaW50ZXJmYWNlIENvbHVtbiB7XG4gIGlkOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFJvdyB7XG4gIGlkOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbiAgaXNDaGVja2VkOiBib29sZWFuO1xufVxuXG5AY3VzdG9tRWxlbWVudCgncXRpLW1hdGNoLWludGVyYWN0aW9uJylcbmV4cG9ydCBjbGFzcyBRdGlNYXRjaEludGVyYWN0aW9uIGV4dGVuZHMgRHJhZ0Ryb3BJbnRlcmFjdGlvbk1peGluKFxuICBMaXRFbGVtZW50LFxuICAncXRpLXNpbXBsZS1tYXRjaC1zZXQ6Zmlyc3Qtb2YtdHlwZSBxdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlJyxcbiAgZmFsc2UsXG4gICdxdGktc2ltcGxlLW1hdGNoLXNldDpsYXN0LW9mLXR5cGUgcXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZSdcbikge1xuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gW1xuICAgIGNzc2BcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAwLjVyZW07XG4gICAgICB9XG5cbiAgICAgIC8qIDpob3N0KC5xdGktY2hvaWNlcy10b3ApIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIH0gKi9cbiAgICAgIDpob3N0KC5xdGktY2hvaWNlcy1ib3R0b20pIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xuICAgICAgfVxuICAgICAgOmhvc3QoLnF0aS1jaG9pY2VzLWxlZnQpIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgIH1cbiAgICAgIDpob3N0KC5xdGktY2hvaWNlcy1yaWdodCkge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XG4gICAgICB9XG4gICAgYFxuICBdO1xuXG4gIHJvd3M6IFF0aVNpbXBsZUFzc29jaWFibGVDaG9pY2VbXTtcbiAgY29sczogUXRpU2ltcGxlQXNzb2NpYWJsZUNob2ljZVtdO1xuICBsYXN0Q2hlY2tlZFJhZGlvOiBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgQHN0YXRlKCkgcmVzcG9uc2UgPSBbXTtcbiAgQHN0YXRlKCkgY29ycmVjdE9wdGlvbnM6IHN0cmluZ1tdID0gW107XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiAncmVzcG9uc2UtaWRlbnRpZmllcicgfSkgcmVzcG9uc2VJZGVudGlmaWVyOiBzdHJpbmcgPSAnJztcblxuICBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMucm93cyA9IEFycmF5LmZyb208UXRpU2ltcGxlQXNzb2NpYWJsZUNob2ljZT4oXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgd2Mvbm8tY2hpbGQtdHJhdmVyc2FsLWluLWNvbm5lY3RlZGNhbGxiYWNrXG4gICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoJ3F0aS1zaW1wbGUtbWF0Y2gtc2V0OmZpcnN0LW9mLXR5cGUgcXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZScpXG4gICAgKTtcbiAgICB0aGlzLmNvbHMgPSBBcnJheS5mcm9tPFF0aVNpbXBsZUFzc29jaWFibGVDaG9pY2U+KFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHdjL25vLWNoaWxkLXRyYXZlcnNhbC1pbi1jb25uZWN0ZWRjYWxsYmFja1xuICAgICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsKCdxdGktc2ltcGxlLW1hdGNoLXNldDpsYXN0LW9mLXR5cGUgcXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZScpXG4gICAgKTtcblxuICAgIHRoaXMucmVzcG9uc2UgPSBbXTtcbiAgfVxuXG4gIGhhbmRsZVJhZGlvQ2xpY2sgPSBlID0+IHtcbiAgICBjb25zdCByYWRpbyA9IGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgaWYgKHRoaXMubGFzdENoZWNrZWRSYWRpbyA9PT0gcmFkaW8pIHtcbiAgICAgIHJhZGlvLmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMubGFzdENoZWNrZWRSYWRpbyA9IG51bGw7XG4gICAgICB0aGlzLmhhbmRsZVJhZGlvQ2hhbmdlKGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxhc3RDaGVja2VkUmFkaW8gPSByYWRpbztcbiAgICB9XG4gIH07XG5cbiAgaGFuZGxlUmFkaW9DaGFuZ2UgPSBlID0+IHtcbiAgICBjb25zdCBjaGVja2JveCA9IGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgY29uc3QgdmFsdWUgPSBjaGVja2JveC52YWx1ZTtcbiAgICBjb25zdCBuYW1lID0gY2hlY2tib3gubmFtZTtcbiAgICBjb25zdCB0eXBlID0gY2hlY2tib3gudHlwZTtcblxuICAgIGlmIChjaGVja2JveC5jaGVja2VkKSB7XG4gICAgICBpZiAoIXRoaXMucmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy5yZXNwb25zZSA9IFt2YWx1ZV07XG4gICAgICB9IGVsc2UgaWYgKHRoaXMucmVzcG9uc2UuaW5kZXhPZih2YWx1ZSkgPT09IC0xKSB7XG4gICAgICAgIGlmICh0eXBlID09PSAncmFkaW8nKSB7XG4gICAgICAgICAgdGhpcy5yZXNwb25zZSA9IHRoaXMucmVzcG9uc2UuZmlsdGVyKHYgPT4gdi5pbmRleE9mKG5hbWUpID09PSAtMSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZXNwb25zZSA9IFsuLi50aGlzLnJlc3BvbnNlLCB2YWx1ZV07XG4gICAgICB9XG4gICAgICB0aGlzLmxhc3RDaGVja2VkUmFkaW8gPSBjaGVja2JveDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZXNwb25zZSA9IHRoaXMucmVzcG9uc2UuZmlsdGVyKHYgPT4gdiAhPT0gdmFsdWUpO1xuICAgICAgdGhpcy5sYXN0Q2hlY2tlZFJhZGlvID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTtcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQ8UmVzcG9uc2VJbnRlcmFjdGlvbj4oJ3F0aS1pbnRlcmFjdGlvbi1yZXNwb25zZScsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY29tcG9zZWQ6IHRydWUsXG4gICAgICAgIGRldGFpbDoge1xuICAgICAgICAgIHJlc3BvbnNlSWRlbnRpZmllcjogdGhpcy5yZXNwb25zZUlkZW50aWZpZXIsXG4gICAgICAgICAgcmVzcG9uc2U6IEFycmF5LmlzQXJyYXkodGhpcy5yZXNwb25zZSkgPyBbLi4udGhpcy5yZXNwb25zZV0gOiB0aGlzLnJlc3BvbnNlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfTtcblxuICBzZXQgY29ycmVjdFJlc3BvbnNlKHJlc3BvbnNlVmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG4gICAgaWYgKHJlc3BvbnNlVmFsdWUgPT09ICcnKSB7XG4gICAgICB0aGlzLmNvcnJlY3RPcHRpb25zID0gW107XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJlc3BvbnNlVmFsdWUpKSB7XG4gICAgICB0aGlzLmNvcnJlY3RPcHRpb25zID0gcmVzcG9uc2VWYWx1ZTtcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgaWYgKCF0aGlzLmNsYXNzTGlzdC5jb250YWlucygncXRpLW1hdGNoLXRhYnVsYXInKSkge1xuICAgICAgcmV0dXJuIGh0bWxgPHNsb3QgbmFtZT1cInByb21wdFwiPjwvc2xvdD4gPHNsb3Q+PC9zbG90PmA7XG4gICAgfVxuICAgIHJldHVybiBodG1sYFxuICAgICAgPHNsb3QgbmFtZT1cInByb21wdFwiPjwvc2xvdD5cbiAgICAgIDx0YWJsZT5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0ZD48L3RkPlxuICAgICAgICAgICR7dGhpcy5jb2xzLm1hcCgoY29sLCBpKSA9PiBodG1sYDx0aCBwYXJ0PVwici1oZWFkZXJcIj4ke3Vuc2FmZUhUTUwoY29sLmlubmVySFRNTCl9PC90aD5gKX1cbiAgICAgICAgPC90cj5cblxuICAgICAgICAke3RoaXMucm93cy5tYXAoXG4gICAgICAgICAgKHJvdywgckluZGV4KSA9PlxuICAgICAgICAgICAgaHRtbGA8dHI+XG4gICAgICAgICAgICAgIDx0ZCBwYXJ0PVwiYy1oZWFkZXJcIj4ke3Vuc2FmZUhUTUwocm93LmlubmVySFRNTCl9PC90ZD5cbiAgICAgICAgICAgICAgJHt0aGlzLmNvbHMubWFwKChjb2wsIGNJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd0lkID0gcm93LmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbElkID0gY29sLmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYCR7cm93SWR9ICR7Y29sSWR9YDtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZEluUm93Q291bnQgPSB0aGlzLnJlc3BvbnNlLmZpbHRlcih2ID0+IHYuc3BsaXQoJyAnKVswXSA9PT0gcm93SWQpLmxlbmd0aCB8fCAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoZWNrZWQgPSB0aGlzLnJlc3BvbnNlLmluY2x1ZGVzKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJ0ID0gYHJiICR7Y2hlY2tlZCA/ICdyYi1jaGVja2VkJyA6ICcnfSAke3RoaXMuY29ycmVjdE9wdGlvbnMuaW5jbHVkZXModmFsdWUpID8gJ3JiLWNvcnJlY3QnIDogJyd9YDtcbiAgICAgICAgICAgICAgICAvLyBkaXNhYmxlIGlmIG1hdGNoIG1heCBpcyBncmVhdGVyIHRoYW4gMSBhbmQgbWF4IGlzIHJlYWNoZWRcbiAgICAgICAgICAgICAgICBjb25zdCBkaXNhYmxlID1cbiAgICAgICAgICAgICAgICAgIHRoaXMuY29ycmVjdE9wdGlvbnMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICAgICAgOiByb3cubWF0Y2hNYXggPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICA/IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgOiBzZWxlY3RlZEluUm93Q291bnQgPj0gcm93Lm1hdGNoTWF4ICYmICFjaGVja2VkO1xuICAgICAgICAgICAgICAgIHJldHVybiBodG1sYDx0ZD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0eXBlPSR7cm93Lm1hdGNoTWF4ID09PSAxID8gJ3JhZGlvJyA6IGBjaGVja2JveGB9XG4gICAgICAgICAgICAgICAgICAgIHBhcnQ9JHtwYXJ0fVxuICAgICAgICAgICAgICAgICAgICBuYW1lPSR7cm93SWR9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPSR7dmFsdWV9XG4gICAgICAgICAgICAgICAgICAgIC5kaXNhYmxlZD0ke2Rpc2FibGV9XG4gICAgICAgICAgICAgICAgICAgIEBjaGFuZ2U9JHtlID0+IHRoaXMuaGFuZGxlUmFkaW9DaGFuZ2UoZSl9XG4gICAgICAgICAgICAgICAgICAgIEBjbGljaz0ke2UgPT4gKHJvdy5tYXRjaE1heCA9PT0gMSA/IHRoaXMuaGFuZGxlUmFkaW9DbGljayhlKSA6IG51bGwpfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L3RkPmA7XG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPC90cj5gXG4gICAgICAgICl9XG4gICAgICA8L3RhYmxlPlxuICAgIGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLW1hdGNoLWludGVyYWN0aW9uJzogUXRpTWF0Y2hJbnRlcmFjdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7IGh0bWwsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbi8vIFRISVMgSVMgTk9UIFVTRUQgSU4gVEFCVUxBUiBNQVRDSCBJTlRFUkFDVElPTlxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UnKVxuLy8gdHNsaW50OmRpc2FibGU6IGluZGVudFxuZXhwb3J0IGNsYXNzIFF0aVNpbXBsZUFzc29jaWFibGVDaG9pY2UgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgLyoqIHRoZSBtaW5pbWFsIG51bWJlciBvZiBzZWxlY3Rpb25zIGEgY2FuZGlkYXRlIG11c3QgbWFrZSAqL1xuICBAcHJvcGVydHkoe1xuICAgIHR5cGU6IE51bWJlcixcbiAgICBhdHRyaWJ1dGU6ICdtYXRjaC1taW4nXG4gIH0pXG4gIHB1YmxpYyBtYXRjaE1pbjogbnVtYmVyID0gMDtcblxuICAvKiogdGhlIG1heGltdW0gbnVtYmVyIG9mIHNlbGVjdGlvbnMgYSBjYW5kaWRhdGUgbXVzdCBtYWtlLCB0aGUgb3RoZXIgb3B0aW9ucyB3aWxsIGJlIGRpc2FibGVkIHdoZW4gbWF4IG9wdGlvbnMgaXMgY2hlY2tlZCAqL1xuICBAcHJvcGVydHkoe1xuICAgIHR5cGU6IE51bWJlcixcbiAgICBhdHRyaWJ1dGU6ICdtYXRjaC1tYXgnXG4gIH0pXG4gIHB1YmxpYyBtYXRjaE1heDogbnVtYmVyID0gMTtcblxuICBAcHJvcGVydHkoe1xuICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgYXR0cmlidXRlOiAnZml4ZWQnXG4gIH0pXG4gIHB1YmxpYyBmaXhlZCA9IGZhbHNlO1xuXG4gIC8vIHBrOiBUaGlzIG5lZWRzIHNvbWUgZXhwbGFuYXRpb25cbiAgLy8gaW4gdGhlIGFzc29jaWF0ZSBpbnRlcmFjdGlvbiB0aGVyZSBpcyBhIHNwZWNpYWwgc2xvdCBmb3IgdGhlc2UgcXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZXNcbiAgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgnc2xvdCcsICdxdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlJyk7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ3BhcnQnLCAncXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZScpO1xuICB9XG5cbiAgLy8gcGs6IFRoaXMgbmVlZHMgc29tZSBleHBsYW5hdGlvblxuICAvLyBpbiBxdGktbWF0Y2gtaW50ZXJhY3Rpb24sIHF0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UgaXMgdXNlZCB0byBkZW5vdGUgdGhlXG4gIC8vIGRyYWdnYWJsZSwgYnV0IGFsc28gdGhlIGRyb3BwYWJsZS4gV0VJUkQuLiBidXQgbGV0cyBkZWFsIHdpdGggaXQuXG4gIC8vIFNvIHdlIGhhdmUgYSBzbG90IGZvciB3aGVuZXZlciBhbm90aGVyIHF0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2UgaXMgZHJvcHBlZCBpbiBoZXJlLlxuICAvLyBBbmQgd2UgaGF2ZSBzbG90IGZvciBjb250ZW50IGxpa2UgaW4gdGhpcyBhc3NvY2lhdGUgaW50ZXJhY3Rpb25cbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgPHNsb3QgbmFtZT1cInF0aS1zaW1wbGUtYXNzb2NpYWJsZS1jaG9pY2VcIj48L3Nsb3Q+XG4gICAgYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktc2ltcGxlLWFzc29jaWFibGUtY2hvaWNlJzogUXRpU2ltcGxlQXNzb2NpYWJsZUNob2ljZTtcbiAgfVxufVxuIiwgImltcG9ydCB7IGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgSW50ZXJhY3Rpb24gfSBmcm9tICcuLi9pbnRlcm5hbC9pbnRlcmFjdGlvbi9pbnRlcmFjdGlvbic7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktbWVkaWEtaW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aU1lZGlhSW50ZXJhY3Rpb24gZXh0ZW5kcyBJbnRlcmFjdGlvbiB7XG4gIHZhbHVlID0gMDtcbiAgcmVzZXQoKSB7XG4gICAgLy8gdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG4gIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xuICAgIC8vIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBzZXQgcmVzcG9uc2UodmFsOiB1bmRlZmluZWQpIHtcbiAgICAvLyB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICBzdGF0aWMgb3ZlcnJpZGUgZ2V0IHByb3BlcnRpZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkludGVyYWN0aW9uLnByb3BlcnRpZXMsXG4gICAgICAuLi57XG4gICAgICAgIHN0ZXA6IHtcbiAgICAgICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICAgICAgYXR0cmlidXRlOiAnc3RlcCcsXG4gICAgICAgICAgZGVmYXVsdDogMTBcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gW2Nzc2BgXTtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgIDxzbG90IG5hbWU9XCJwcm9tcHRcIj48L3Nsb3Q+XG4gICAgICA8c2xvdD48L3Nsb3Q+YDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIC8vIGdldCBhdWRpbywgdmlkZW8gb2Ygb2JqZWN0IHRhZy5cbiAgICBjb25zdCBtZWRpYU9iamVjdCA9IHRoaXMucXVlcnlTZWxlY3RvcignYXVkaW8nKSB8fCB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3ZpZGVvJykgfHwgdGhpcy5xdWVyeVNlbGVjdG9yKCdvYmplY3QnKTtcbiAgICBpZiAobWVkaWFPYmplY3QpIHtcbiAgICAgIC8vIGxpc3RlbiB0byBlbmRlZCBldmVudFxuICAgICAgbWVkaWFPYmplY3QuYWRkRXZlbnRMaXN0ZW5lcignZW5kZWQnLCAoKSA9PiB7XG4gICAgICAgIC8vIHNldCB2YWx1ZSB0byAwXG4gICAgICAgIHRoaXMudmFsdWUrKztcbiAgICAgICAgdGhpcy5zYXZlUmVzcG9uc2UodGhpcy52YWx1ZS50b1N0cmluZygpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktbWVkaWEtaW50ZXJhY3Rpb24nOiBRdGlNZWRpYUludGVyYWN0aW9uO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sLCBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHVuc2FmZUhUTUwgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy91bnNhZmUtaHRtbC5qcyc7XG5pbXBvcnQgeyBEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4gfSBmcm9tICcuLi9pbnRlcm5hbC9kcmFnLWRyb3AvZHJhZy1kcm9wLWludGVyYWN0aW9uLW1peGluJztcbmltcG9ydCB7IFNodWZmbGVNaXhpbiB9IGZyb20gJy4uL2ludGVybmFsL3NodWZmbGUvc2h1ZmZsZS1taXhpbic7IC8vIEltcG9ydCB0aGUgbWl4aW5cbmltcG9ydCB7IFF0aVNpbXBsZUNob2ljZSB9IGZyb20gJy4uL3F0aS1zaW1wbGUtY2hvaWNlJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1vcmRlci1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpT3JkZXJJbnRlcmFjdGlvbiBleHRlbmRzIFNodWZmbGVNaXhpbihcbiAgRHJhZ0Ryb3BJbnRlcmFjdGlvbk1peGluKExpdEVsZW1lbnQsIGBxdGktc2ltcGxlLWNob2ljZWAsIHRydWUsICdkcm9wLWxpc3QnKSxcbiAgJ3F0aS1zaW1wbGUtY2hvaWNlJ1xuKSB7XG4gIGNoaWxkcmVuTWFwOiBFbGVtZW50W107XG5cbiAgQHN0YXRlKCkgbnJDaG9pY2VzOiBudW1iZXIgPSAwO1xuICBAc3RhdGUoKSBjb3JyZWN0UmVzcG9uc2VzOiBzdHJpbmdbXSA9IFtdO1xuICBAc3RhdGUoKSBzaG93Q29ycmVjdFJlc3BvbnNlczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBvcmllbnRhdGlvbiBvZiBjaG9pY2VzICovXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IFN0cmluZyB9KVxuICBwdWJsaWMgb3JpZW50YXRpb246ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCc7XG5cbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IFtcbiAgICBjc3NgXG4gICAgICBbcGFydD0nZHJhZ3MnXSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgfVxuXG4gICAgICBbcGFydD0nZHJvcHMnXSB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtYXV0by1mbG93OiBjb2x1bW47XG4gICAgICAgIGdyaWQtYXV0by1jb2x1bW5zOiAxZnI7XG4gICAgICB9XG5cbiAgICAgIDpob3N0KFtvcmllbnRhdGlvbj0naG9yaXpvbnRhbCddKSBbcGFydD0nZHJhZ3MnXSB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICB9XG4gICAgICA6aG9zdChbb3JpZW50YXRpb249J2hvcml6b250YWwnXSkgW3BhcnQ9J2Ryb3BzJ10ge1xuICAgICAgICBncmlkLWF1dG8tZmxvdzogY29sdW1uO1xuICAgICAgfVxuICAgICAgOmhvc3QoW29yaWVudGF0aW9uPSd2ZXJ0aWNhbCddKSBbcGFydD0nZHJhZ3MnXSB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICB9XG4gICAgICA6aG9zdChbb3JpZW50YXRpb249J3ZlcnRpY2FsJ10pIFtwYXJ0PSdkcm9wcyddIHtcbiAgICAgICAgZ3JpZC1hdXRvLWZsb3c6IHJvdztcbiAgICAgIH1cblxuICAgICAgW3BhcnQ9J2Ryb3AtbGlzdCddIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICB9XG5cbiAgICAgIFtwYXJ0PSdjb250YWluZXInXSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGdhcDogMC41cmVtO1xuICAgICAgfVxuICAgICAgOmhvc3QoLnF0aS1jaG9pY2VzLXRvcCkgW3BhcnQ9J2NvbnRhaW5lciddIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIH1cbiAgICAgIDpob3N0KC5xdGktY2hvaWNlcy1ib3R0b20pIFtwYXJ0PSdjb250YWluZXInXSB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTtcbiAgICAgIH1cbiAgICAgIDpob3N0KC5xdGktY2hvaWNlcy1sZWZ0KSBbcGFydD0nY29udGFpbmVyJ10ge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgfVxuICAgICAgOmhvc3QoLnF0aS1jaG9pY2VzLXJpZ2h0KSBbcGFydD0nY29udGFpbmVyJ10ge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XG4gICAgICB9XG4gICAgYFxuICBdO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICBjb25zdCBjaG9pY2VzID0gQXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoJ3F0aS1zaW1wbGUtY2hvaWNlJykpO1xuICAgIGlmICh0aGlzLm5yQ2hvaWNlcyA8IGNob2ljZXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLm5yQ2hvaWNlcyA9IGNob2ljZXMubGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiBodG1sYCA8c2xvdCBuYW1lPVwicHJvbXB0XCI+IDwvc2xvdD5cbiAgICAgIDxkaXYgcGFydD1cImNvbnRhaW5lclwiPlxuICAgICAgICA8c2xvdCBwYXJ0PVwiZHJhZ3NcIj4gPC9zbG90PlxuICAgICAgICA8ZGl2IHBhcnQ9XCJkcm9wc1wiPlxuICAgICAgICAgICR7QXJyYXkuZnJvbShBcnJheSh0aGlzLm5yQ2hvaWNlcykpLm1hcChcbiAgICAgICAgICAgIChfLCBpKSA9PlxuICAgICAgICAgICAgICBodG1sYDxkcm9wLWxpc3QgcGFydD1cImRyb3AtbGlzdFwiIGlkZW50aWZpZXI9XCJkcm9wbGlzdCR7aX1cIj48L2Ryb3AtbGlzdD4ke3RoaXMuc2hvd0NvcnJlY3RSZXNwb25zZXMgJiZcbiAgICAgICAgICAgICAgICB0aGlzLmNvcnJlY3RSZXNwb25zZXMubGVuZ3RoID4gaVxuICAgICAgICAgICAgICAgICAgPyB1bnNhZmVIVE1MKGA8c3BhbiBwYXJ0PSdjb3JyZWN0LXJlc3BvbnNlJz4ke3RoaXMuY29ycmVjdFJlc3BvbnNlc1tpXX08L3NwYW4+YClcbiAgICAgICAgICAgICAgICAgIDogJyd9YFxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+YDtcbiAgfVxuXG4gIHNldCBjb3JyZWN0UmVzcG9uc2UodmFsdWU6IFJlYWRvbmx5PHN0cmluZyB8IHN0cmluZ1tdPikge1xuICAgIGlmICh2YWx1ZSA9PT0gJycpIHtcbiAgICAgIHRoaXMuc2hvd0NvcnJlY3RSZXNwb25zZXMgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb3JyZWN0UmVzcG9uc2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc3QgcmVzcG9uc2VzID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XG5cbiAgICAgIHJlc3BvbnNlcy5mb3JFYWNoKChyZXNwb25zZSwgaW5kZXgpID0+IHtcbiAgICAgICAgbGV0IHNpbXBsZUNob2ljZSA9IHRoaXMucXVlcnlTZWxlY3RvcihgcXRpLXNpbXBsZS1jaG9pY2VbaWRlbnRpZmllcj1cIiR7cmVzcG9uc2V9XCJdYCk7XG4gICAgICAgIGlmICghc2ltcGxlQ2hvaWNlKSB7XG4gICAgICAgICAgc2ltcGxlQ2hvaWNlID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoYHF0aS1zaW1wbGUtY2hvaWNlW2lkZW50aWZpZXI9XCIke3Jlc3BvbnNlfVwiXWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGV4dCA9IHNpbXBsZUNob2ljZT8udGV4dENvbnRlbnQudHJpbSgpO1xuICAgICAgICB0aGlzLmNvcnJlY3RSZXNwb25zZXMgPSBbLi4udGhpcy5jb3JyZWN0UmVzcG9uc2VzLCB0ZXh0XTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuc2hvd0NvcnJlY3RSZXNwb25zZXMgPSB0cnVlO1xuICB9XG5cbiAgLy8gc29tZSBpbnRlcmFjdGlvbnMgaGF2ZSBhIGRpZmZlcmVudCB3YXkgb2YgZ2V0dGluZyB0aGUgcmVzcG9uc2VcbiAgLy8gdGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgZHJhZyBhbmQgZHJvcCBtaXhpbiBjbGFzc1xuICAvLyB5b3UgaGF2ZSB0byBpbXBsZW1lbnQgeW91ciBvd24gZ2V0UmVzcG9uc2UgbWV0aG9kIGluIHRoZSBzdXBlcmNsYXNzXG4gIC8vIGNhdXNlIHRoZXkgYXJlIGRpZmZlcmVudCBmb3Igc29tZSBpbnRlcmFjdGlvbnMuXG4gIHByb3RlY3RlZCBnZXRSZXNwb25zZSgpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZHJvcHBhYmxlcyA9IEFycmF5LmZyb208UXRpU2ltcGxlQ2hvaWNlPih0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnZHJvcC1saXN0JykpO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBkcm9wcGFibGVzLm1hcChkcm9wcGFibGUgPT4ge1xuICAgICAgY29uc3QgZHJhZ3NJbkRyb3BwYWJsZSA9IGRyb3BwYWJsZS5xdWVyeVNlbGVjdG9yQWxsKCdbcXRpLWRyYWdnYWJsZT1cInRydWVcIl0nKTtcbiAgICAgIGNvbnN0IGlkZW50aWZpZXJzID0gQXJyYXkuZnJvbShkcmFnc0luRHJvcHBhYmxlKS5tYXAoZCA9PiBkLmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpKTtcbiAgICAgIHJldHVybiBbLi4uaWRlbnRpZmllcnNdLmpvaW4oJyAnKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG4gICAgYXdhaXQgdGhpcy51cGRhdGU7XG4gICAgdGhpcy5jaGlsZHJlbk1hcCA9IEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsKCdxdGktc2ltcGxlLWNob2ljZScpKTtcbiAgICB0aGlzLmNoaWxkcmVuTWFwLmZvckVhY2goZWwgPT4gZWwuc2V0QXR0cmlidXRlKCdwYXJ0JywgJ3F0aS1zaW1wbGUtY2hvaWNlJykpO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1vcmRlci1pbnRlcmFjdGlvbic6IFF0aU9yZGVySW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50LCBQcm9wZXJ0eVZhbHVlcyB9IGZyb20gJ2xpdCc7XG5cbnR5cGUgQ29uc3RydWN0b3I8VCA9IHt9PiA9IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQ7XG5cbmRlY2xhcmUgY2xhc3MgU2h1ZmZsZUludGVyZmFjZSB7fVxuXG5leHBvcnQgY29uc3QgU2h1ZmZsZU1peGluID0gPFQgZXh0ZW5kcyBDb25zdHJ1Y3RvcjxMaXRFbGVtZW50Pj4oc3VwZXJDbGFzczogVCwgc2VsZWN0b3I6IHN0cmluZykgPT4ge1xuICBjbGFzcyBTaHVmZmxlRWxlbWVudCBleHRlbmRzIHN1cGVyQ2xhc3Mge1xuICAgIHByb3RlY3RlZCBvdmVycmlkZSBmaXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlcykge1xuICAgICAgc3VwZXIuZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcyk7XG4gICAgICBpZiAodGhpcy5fc2h1ZmZsZSkge1xuICAgICAgICB0aGlzLl9zaHVmZmxlQ2hvaWNlcygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3NodWZmbGUgPSB0cnVlO1xuXG4gICAgZ2V0IHNodWZmbGUoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdGhpcy5fc2h1ZmZsZTtcbiAgICB9XG5cbiAgICBzZXQgc2h1ZmZsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLl9zaHVmZmxlO1xuICAgICAgdGhpcy5fc2h1ZmZsZSA9IHZhbHVlO1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX3NodWZmbGVDaG9pY2VzKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9yZXNldFNodWZmbGVDaG9pY2VzKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoJ3NodWZmbGUnLCBvbGRWYWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2h1ZmZsZUNob2ljZXMoKSB7XG4gICAgICBjb25zdCBjaG9pY2VzID0gQXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpKTtcblxuICAgICAgY29uc3QgZml4ZWRFbGVtZW50cyA9IFtdO1xuICAgICAgY29uc3Qgbm9uRml4ZWRFbGVtZW50cyA9IFtdO1xuXG4gICAgICAvLyBTZXBhcmF0ZSBmaXhlZCBhbmQgbm9uLWZpeGVkIGVsZW1lbnRzXG4gICAgICBjaG9pY2VzLmZvckVhY2goKGNob2ljZSwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGNob2ljZS5oYXNBdHRyaWJ1dGUoJ2ZpeGVkJykpIHtcbiAgICAgICAgICBmaXhlZEVsZW1lbnRzLnB1c2goeyBlbGVtZW50OiBjaG9pY2UsIGluZGV4OiBpbmRleCB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBub25GaXhlZEVsZW1lbnRzLnB1c2goY2hvaWNlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIFNodWZmbGUgbm9uLWZpeGVkIGVsZW1lbnRzXG4gICAgICBmb3IgKGxldCBpID0gbm9uRml4ZWRFbGVtZW50cy5sZW5ndGggLSAxOyBpID4gMDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IGogPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAoaSArIDEpKTtcbiAgICAgICAgW25vbkZpeGVkRWxlbWVudHNbaV0sIG5vbkZpeGVkRWxlbWVudHNbal1dID0gW25vbkZpeGVkRWxlbWVudHNbal0sIG5vbkZpeGVkRWxlbWVudHNbaV1dO1xuICAgICAgfVxuXG4gICAgICAvLyBBc3NpZ24gb3JkZXIgdG8gZWFjaCBlbGVtZW50XG4gICAgICBsZXQgb3JkZXIgPSAxO1xuICAgICAgY2hvaWNlcy5mb3JFYWNoKChjaG9pY2U6IEhUTUxFbGVtZW50LCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAoY2hvaWNlLmhhc0F0dHJpYnV0ZSgnZml4ZWQnKSkge1xuICAgICAgICAgIGNob2ljZS5zdHlsZS5vcmRlciA9IFN0cmluZyhvcmRlcisrKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBub25GaXhlZENob2ljZSA9IG5vbkZpeGVkRWxlbWVudHMuc2hpZnQoKTtcbiAgICAgICAgICBub25GaXhlZENob2ljZS5zdHlsZS5vcmRlciA9IG9yZGVyKys7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3Jlc2V0U2h1ZmZsZUNob2ljZXMoKSB7XG4gICAgICBjb25zdCBjaG9pY2VzID0gQXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoJ3F0aS1zaW1wbGUtY2hvaWNlJykpO1xuICAgICAgY2hvaWNlcy5mb3JFYWNoKChjaG9pY2UsIGluZGV4KSA9PiB7XG4gICAgICAgIGNob2ljZS5zdHlsZS5vcmRlciA9ICdpbml0aWFsJztcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gU2h1ZmZsZUVsZW1lbnQgYXMgQ29uc3RydWN0b3I8U2h1ZmZsZUludGVyZmFjZT4gJiBUO1xufTtcbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50LCBjc3MsIGh0bWwgfSBmcm9tICdsaXQnO1xuXG5leHBvcnQgY2xhc3MgUXRpU1Bvc2l0aW9uT2JqZWN0SW50ZXJhY3Rpb24gZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgb3ZlcnJpZGUgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxzbG90Pjwvc2xvdD5gO1xuICB9XG5cbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IFtcbiAgICBjc3NgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgfVxuICAgICAgOjpzbG90dGVkKGltZykge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGN1cnNvcjogbW92ZTtcbiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgICAgfVxuICAgIGBcbiAgXTtcbn1cblxuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdxdGktcG9zaXRpb24tb2JqZWN0LWludGVyYWN0aW9uJywgUXRpU1Bvc2l0aW9uT2JqZWN0SW50ZXJhY3Rpb24pO1xuIiwgImltcG9ydCB7IExpdEVsZW1lbnQsIGNzcywgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLXBvc2l0aW9uLW9iamVjdC1zdGFnZScpXG5leHBvcnQgY2xhc3MgUXRpUG9zaXRpb25PYmplY3RTdGFnZSBleHRlbmRzIExpdEVsZW1lbnQge1xuICBjaG9pY2VPcmRlcmluZzogYm9vbGVhbjtcbiAgc3RhcnRYOiBhbnk7XG4gIHN0YXJ0WTogYW55O1xuICBkcmFnRWxlbWVudDogYW55O1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdD48L3Nsb3Q+YDtcbiAgfVxuXG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBbXG4gICAgY3NzYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIH1cbiAgICBgXG4gIF07XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnJlbW92ZU1vdmVMaXN0ZW5lciA9IHRoaXMucmVtb3ZlTW92ZUxpc3RlbmVyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5kcmFnRWxlbWVudEhhbmRsZXIgPSB0aGlzLmRyYWdFbGVtZW50SGFuZGxlci5iaW5kKHRoaXMpO1xuICB9XG5cbiAgLy8gRGVmaW5lIGEgZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBtb3VzZW1vdmUgZXZlbnQgb24gdGhlIGRyYWdnYWJsZSBlbGVtZW50XG4gIGRyYWdFbGVtZW50SGFuZGxlcihldmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIHRoZSBtb3VzZSBoYXMgbW92ZWQgc2luY2UgdGhlIGxhc3QgZXZlbnRcbiAgICBjb25zdCBkZWx0YVggPSBldmVudC5jbGllbnRYIC0gdGhpcy5zdGFydFg7XG4gICAgY29uc3QgZGVsdGFZID0gZXZlbnQuY2xpZW50WSAtIHRoaXMuc3RhcnRZO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgZHJhZ2dhYmxlIGVsZW1lbnRcbiAgICB0aGlzLmRyYWdFbGVtZW50LnN0eWxlLmxlZnQgPSB0aGlzLmRyYWdFbGVtZW50Lm9mZnNldExlZnQgKyBkZWx0YVggKyAncHgnO1xuICAgIHRoaXMuZHJhZ0VsZW1lbnQuc3R5bGUudG9wID0gdGhpcy5kcmFnRWxlbWVudC5vZmZzZXRUb3AgKyBkZWx0YVkgKyAncHgnO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgbW91c2VcbiAgICB0aGlzLnN0YXJ0WCA9IGV2ZW50LmNsaWVudFg7XG4gICAgdGhpcy5zdGFydFkgPSBldmVudC5jbGllbnRZO1xuICB9XG5cbiAgb3ZlcnJpZGUgZmlyc3RVcGRhdGVkKGEpOiB2b2lkIHtcbiAgICBzdXBlci5maXJzdFVwZGF0ZWQoYSk7XG5cbiAgICAvLyBHZXQgdGhlIGRyYWdnYWJsZSBhbmQgZHJvcCB6b25lIGVsZW1lbnRzXG4gICAgdGhpcy5kcmFnRWxlbWVudCA9IHRoaXMucXVlcnlTZWxlY3RvcigncXRpLXBvc2l0aW9uLW9iamVjdC1pbnRlcmFjdGlvbj5pbWcnKTtcbiAgICAvLyBjb25zdCBjYW52YXNFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhbnZhcycpO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSB2YXJpYWJsZXMgZm9yIHRoZSBzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgZHJhZ2dhYmxlIGVsZW1lbnRcbiAgICB0aGlzLnN0YXJ0WCA9IDA7XG4gICAgdGhpcy5zdGFydFkgPSAwO1xuXG4gICAgLy8gQWRkIGEgbW91c2Vkb3duIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBkcmFnZ2FibGUgZWxlbWVudFxuICAgIHRoaXMuZHJhZ0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAvLyBTYXZlIHRoZSBzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgbW91c2VcbiAgICAgIHRoaXMuc3RhcnRYID0gZXZlbnQuY2xpZW50WDtcbiAgICAgIHRoaXMuc3RhcnRZID0gZXZlbnQuY2xpZW50WTtcblxuICAgICAgLy8gQWRkIGEgbW91c2Vtb3ZlIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBkb2N1bWVudFxuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5kcmFnRWxlbWVudEhhbmRsZXIsIHRydWUpO1xuICAgIH0pO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLnJlbW92ZU1vdmVMaXN0ZW5lcik7XG4gIH1cblxuICByZW1vdmVNb3ZlTGlzdGVuZXIoZXZlbnQpIHtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLmRyYWdFbGVtZW50SGFuZGxlciwgdHJ1ZSk7XG4gIH1cblxuICBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuZHJhZ0VsZW1lbnRIYW5kbGVyKTtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5yZW1vdmVNb3ZlTGlzdGVuZXIpO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1wb3NpdGlvbi1vYmplY3Qtc3RhZ2UnOiBRdGlQb3NpdGlvbk9iamVjdFN0YWdlO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHJlcGVhdCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3JlcGVhdC5qcyc7XG5pbXBvcnQgeyBzdHlsZU1hcCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3N0eWxlLW1hcC5qcyc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvbiB9IGZyb20gJy4uL2ludGVybmFsL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uJztcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1zZWxlY3QtcG9pbnQtaW50ZXJhY3Rpb24nKVxuZXhwb3J0IGNsYXNzIFF0aVNlbGVjdFBvaW50SW50ZXJhY3Rpb24gZXh0ZW5kcyBJbnRlcmFjdGlvbiB7XG4gIEBwcm9wZXJ0eSh7XG4gICAgdHlwZTogTnVtYmVyLFxuICAgIGF0dHJpYnV0ZTogJ21heC1jaG9pY2VzJ1xuICB9KVxuICBwdWJsaWMgbWF4Q2hvaWNlczogbnVtYmVyID0gMDtcblxuICBAcHJvcGVydHkoe1xuICAgIHR5cGU6IE51bWJlcixcbiAgICBhdHRyaWJ1dGU6ICdtaW4tY2hvaWNlcydcbiAgfSlcbiAgcHVibGljIG1pbkNob2ljZXM6IG51bWJlciA9IDA7XG5cbiAgQHN0YXRlKClcbiAgcHJpdmF0ZSBfcG9pbnRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGAgPHNsb3QgbmFtZT1cInByb21wdFwiPjwvc2xvdD5cbiAgICAgIDxwb2ludC1jb250YWluZXI+XG4gICAgICAgICR7cmVwZWF0KFxuICAgICAgICAgIHRoaXMuX3BvaW50cyxcbiAgICAgICAgICBwb2ludCA9PiBwb2ludCxcbiAgICAgICAgICAocG9pbnQsIGluZGV4KSA9PiBodG1sYFxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBwYXJ0PVwicG9pbnRcIlxuICAgICAgICAgICAgICBzdHlsZT0ke3N0eWxlTWFwKHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoLTUwJSwgLTUwJSknLFxuICAgICAgICAgICAgICAgIGxlZnQ6IGAke3BvaW50LnNwbGl0KCcgJylbMF19cHhgLFxuICAgICAgICAgICAgICAgIHRvcDogYCR7cG9pbnQuc3BsaXQoJyAnKVsxXX1weGBcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJSZW1vdmUgcG9pbnQgYXQgJHtwb2ludH1cIlxuICAgICAgICAgICAgICBAY2xpY2s9JHsoZTogRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3BvaW50cyA9IHRoaXMuX3BvaW50cy5maWx0ZXIoKF8sIGkpID0+IGkgIT09IGluZGV4KTtcbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVSZXNwb25zZSh0aGlzLl9wb2ludHMpO1xuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgIGBcbiAgICAgICAgKX1cbiAgICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgPC9wb2ludC1jb250YWluZXI+YDtcbiAgfVxuXG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBbXG4gICAgY3NzYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIH1cbiAgICAgIHBvaW50LWNvbnRhaW5lciB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB9XG4gICAgYFxuICBdO1xuXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuX3BvaW50cyA9IFtdO1xuICB9XG5cbiAgdmFsaWRhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3BvaW50cy5sZW5ndGggPj0gdGhpcy5taW5DaG9pY2VzICYmIHRoaXMuX3BvaW50cy5sZW5ndGggPD0gdGhpcy5tYXhDaG9pY2VzO1xuICB9XG5cbiAgc2V0IHJlc3BvbnNlKHZhbDogc3RyaW5nIHwgc3RyaW5nW10pIHtcbiAgICB0aGlzLl9wb2ludHMgPSBBcnJheS5pc0FycmF5KHZhbCkgPyB2YWwgOiBbdmFsXTtcbiAgfVxuXG4gIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cbiAgICBjb25zdCBpbWcgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpO1xuXG4gICAgLy8gQXR0YWNoIGEgY2xpY2sgZXZlbnQgbGlzdGVuZXIgdG8gdGhlIGltYWdlIGVsZW1lbnRcbiAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBldmVudCA9PiB7XG4gICAgICBjb25zdCB4ID0gZXZlbnQub2Zmc2V0WDtcbiAgICAgIGNvbnN0IHkgPSBldmVudC5vZmZzZXRZO1xuXG4gICAgICB0aGlzLl9wb2ludHMgPSBbLi4udGhpcy5fcG9pbnRzLCB4ICsgJyAnICsgeV07XG4gICAgICB0aGlzLnNhdmVSZXNwb25zZSh0aGlzLl9wb2ludHMpO1xuICAgIH0pO1xuICB9XG4gIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXNlbGVjdC1wb2ludC1pbnRlcmFjdGlvbic6IFF0aVNlbGVjdFBvaW50SW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBjc3MsIGh0bWwsIG5vdGhpbmcgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHksIHF1ZXJ5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyB3YXRjaCB9IGZyb20gJy4uLy4uLy4uL2RlY29yYXRvcnMvd2F0Y2gnO1xuaW1wb3J0IHsgSW50ZXJhY3Rpb24gfSBmcm9tICcuLi9pbnRlcm5hbC9pbnRlcmFjdGlvbi9pbnRlcmFjdGlvbic7XG5cbi8qKlxuICogQHN1bW1hcnkgVGhlIFNsaWRlckludGVyYWN0aW9uLlR5cGUgKHF0aS1zbGlkZXItaW50ZXJhY3Rpb24pIHByZXNlbnRzIHRoZSBjYW5kaWRhdGUgd2l0aCBhIGNvbnRyb2wgZm9yIHNlbGVjdGluZyBhIG51bWVyaWNhbCB2YWx1ZSBiZXR3ZWVuIGEgbG93ZXIgYW5kIHVwcGVyIGJvdW5kLlxuICogQGRvY3VtZW50YXRpb24gaHR0cHM6Ly93d3cuaW1zZ2xvYmFsLm9yZy9zcGVjL3F0aS92M3AwL2ltcGwjaC5zNjF4Y3JqNHFjeWpcbiAqIEBzdGF0dXMgc3RhYmxlXG4gKiBAc2luY2UgNi4wXG4gKlxuICogQGV2ZW50IHF0aS1yZWdpc3Rlci1pbnRlcmFjdGlvbiAtIGVtaXR0ZWQgd2hlbiB0aGUgaW50ZXJhY3Rpb24gd2FudHMgdG8gcmVnaXN0ZXIgaXRzZWxmXG4gKiBAZXZlbnQgcXRpLWludGVyYWN0aW9uLXJlc3BvbnNlIC0gZW1pdHRlZCB3aGVuIHRoZSBpbnRlcmFjdGlvbiBjaGFuZ2VzXG4gKlxuICogQGNzc3Byb3AgLS1zaG93LXZhbHVlIC0gc2hvd3MgdGhlIGN1cnJlbnQgdmFsdWUgd2hpbGUgc2xpZGluZ1xuICogQGNzc3Byb3AgLS1zaG93LXRpY2tzIC0gc2hvd3MgdGhlIHRpY2tzIGFjY29yZGluZyB0byBzdGVwc1xuICogQGNzc3Byb3AgLS1zaG93LWJvdW5kcyAtIHNob3dzIHZhbHVlIGZvciBsb3dlciBhbmQgdXBwZXIgYm91bmRhcnlcbiAqXG4gKiBAY3NzcGFydCBzbGlkZXIgLS0gc2xpZGVyIGlubHVkaW5nLCBib3VuZHMgYW5kIHRpY2tzIGFuZCB2YWx1ZSwgdXNlIGl0IGZvciBwYWRkaW5ncyBhbmQgbWFyZ2luc1xuICogQGNzc3BhcnQgYm91bmRzIC0tIGRpdiBmb3IgYm91bmRzLCBjb250YWluaW5nIHR3byBkaXZzIGZvciB3aXRoIG1pbiwgYW5kIG1heCBib3VuZHMgdmFsdWVcbiAqIEBjc3NwYXJ0IHRpY2tzIC0tIGRpdiBmb3IgdGlja3MsIHVzZSBsaW5lYWlyIGdyYWRpZW50IGFuZCBleHBvc2VkIGNzcyB2YXJpYWJsZXMgZm9yIHN0eWxpbmdcbiAqIEBjc3NwYXJ0IHJhaWwgLS0gZGl2IGZvciByYWlsLCBzdHlsZSBhY2NvcmRpbmcgdG8gbmVlZHNcbiAqIEBjc3NwYXJ0IGtub2IgLS0gZGl2LCBzaG91bGQgYmUgcmVsYXRpdmUgb3IgYWJzb2x1dGVcbiAqIEBjc3NwYXJ0IHZhbHVlIC0tIGRpdiwgY29udGFpbmluZyB2YWx1ZVxuICpcbiAqIEBzbG90IC0gVGhlIGRlZmF1bHQgc2xvdCB3aGVyZSA8cXRpLXNpbXBsZS1jaG9pY2U+IG11c3QgYmUgcGxhY2VkLlxuICogQHNsb3QgcHJvbXB0IC0gc2xvdCB3aGVyZSB0aGUgcHJvbXB0IGlzIHBsYWNlZC5cbiAqL1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLXNsaWRlci1pbnRlcmFjdGlvbicpXG5leHBvcnQgY2xhc3MgUXRpU2xpZGVySW50ZXJhY3Rpb24gZXh0ZW5kcyBJbnRlcmFjdGlvbiB7XG4gIGNzTGl2ZTogQ1NTU3R5bGVEZWNsYXJhdGlvbjtcblxuICBAcXVlcnkoJyNrbm9iJylcbiAgcHJpdmF0ZSBfa25vYjogSFRNTEVsZW1lbnQ7XG5cbiAgQHF1ZXJ5KCcjcmFpbCcpXG4gIHByaXZhdGUgX3JhaWw6IEhUTUxFbGVtZW50O1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IE51bWJlciB9KSB2YWx1ZTogbnVtYmVyO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogJ3N0ZXAtbGFiZWwnIH0pIHN0ZXBMYWJlbCA9IGZhbHNlO1xuXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4gfSkgcmV2ZXJzZSA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX21pbjogbnVtYmVyO1xuICBAcHJvcGVydHkoeyB0eXBlOiBOdW1iZXIsIGF0dHJpYnV0ZTogJ2xvd2VyLWJvdW5kJyB9KSBzZXQgbWluKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9taW4gPSB2YWx1ZTtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1taW4nLCBgJHt0aGlzLl9taW59YCk7XG4gIH1cbiAgZ2V0IG1pbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9taW47XG4gIH1cblxuICBwcml2YXRlIF9tYXg6IG51bWJlcjtcbiAgQHByb3BlcnR5KHsgdHlwZTogTnVtYmVyLCBhdHRyaWJ1dGU6ICd1cHBlci1ib3VuZCcgfSkgc2V0IG1heCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbWF4ID0gdmFsdWU7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1tYXgnLCBgJHt0aGlzLl9tYXh9YCk7XG4gIH1cbiAgZ2V0IG1heCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9tYXg7XG4gIH1cblxuICBwcml2YXRlIF9zdGVwOiBudW1iZXI7XG4gIEBwcm9wZXJ0eSh7IHR5cGU6IE51bWJlciwgYXR0cmlidXRlOiAnc3RlcCcgfSkgc2V0IHN0ZXAodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX3N0ZXAgPSB2YWx1ZTtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KCctLXN0ZXAnLCBgJHt0aGlzLl9zdGVwfWApO1xuICB9XG4gIGdldCBzdGVwKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3N0ZXA7XG4gIH1cblxuICBAd2F0Y2goJ2Rpc2FibGVkJywgeyB3YWl0VW50aWxGaXJzdFVwZGF0ZTogdHJ1ZSB9KVxuICBfaGFuZGxlRGlzYWJsZWRDaGFuZ2UgPSAob2xkLCBkaXNhYmxlZCkgPT4ge307XG5cbiAgQHdhdGNoKCdyZWFkb25seScsIHsgd2FpdFVudGlsRmlyc3RVcGRhdGU6IHRydWUgfSlcbiAgX2hhbmRsZVJlYWRvbmx5Q2hhbmdlID0gKG9sZCwgcmVhZG9ubHkpID0+IHt9O1xuXG4gIHJlc2V0KCkge1xuICAgIC8vIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuICB2YWxpZGF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIHN0YXRpYyBzaGFkb3dSb290T3B0aW9uczogU2hhZG93Um9vdEluaXQgPSB7IC4uLkxpdEVsZW1lbnQuc2hhZG93Um9vdE9wdGlvbnMsIGRlbGVnYXRlc0ZvY3VzOiB0cnVlLCBtb2RlOiAnb3BlbicgfTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIC8qIHRoZSBjb21wdXRlZCBzdHlsZSBpcyBhIGxpdmUgcHJvcGVydHksIHdlIHVzZSB0aGlzIHRvIGdldCBjc3MgdmFyaWFibGVzXG4gICAgc2VlIHJlbmRlciB0ZW1wbGF0ZSAqL1xuICAgIHRoaXMuY3NMaXZlID0gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKTtcbiAgfVxuXG4gIHNldCByZXNwb25zZShteVJlc3BvbnNlOiBzdHJpbmcgfCBzdHJpbmdbXSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG15UmVzcG9uc2UpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdRdGlTbGlkZXJJbnRlcmFjdGlvbjogcmVzcG9uc2UgaXMgYW4gYXJyYXksIGJ1dCBzaG91bGQgYmUgYSBzaW5nbGUgdmFsdWUnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdmFsdWUgPSBwYXJzZUludChteVJlc3BvbnNlKTtcbiAgICBpZiAoTnVtYmVyLmlzTmFOKHZhbHVlKSkge1xuICAgICAgY29uc29sZS5lcnJvcignUXRpU2xpZGVySW50ZXJhY3Rpb246IHJlc3BvbnNlIGlzIG5vdCBhIG51bWJlcicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gW2Nzc2BgXTtcblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgLy8gY29udmVydCB0aGUgdmFsdWUsIHdoaWNoIGlzIHRoZSByZWFsIHNsaWRlciB2YWx1ZSB0byBhIHBlcmNlbnRhZ2UgZm9yIHRoZSBkb20uXG4gICAgdGhpcy52YWx1ZSA8IHRoaXMubWluICYmICh0aGlzLnZhbHVlID0gdGhpcy5taW4pO1xuICAgIHRoaXMudmFsdWUgPiB0aGlzLm1heCAmJiAodGhpcy52YWx1ZSA9IHRoaXMubWF4KTtcbiAgICBjb25zdCB2YWx1ZVBlcmNlbnRhZ2UgPSAoKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyAodGhpcy5tYXggLSB0aGlzLm1pbikpICogMTAwO1xuICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkoJy0tdmFsdWUtcGVyY2VudGFnZScsIGAke3ZhbHVlUGVyY2VudGFnZX0lYCk7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ2FyaWEtdmFsdWVub3cnLCB0aGlzLnZhbHVlLnRvU3RyaW5nKCkpO1xuXG4gICAgcmV0dXJuIGh0bWxgPHNsb3QgbmFtZT1cInByb21wdFwiPjwvc2xvdD5cbiAgICAgIDxkaXYgaWQ9XCJzbGlkZXJcIiBwYXJ0PVwic2xpZGVyXCI+XG4gICAgICAgICR7dGhpcy5jc0xpdmUuZ2V0UHJvcGVydHlWYWx1ZSgnLS1zaG93LWJvdW5kcycpID09ICd0cnVlJ1xuICAgICAgICAgID8gaHRtbGA8ZGl2IGlkPVwiYm91bmRzXCIgcGFydD1cImJvdW5kc1wiPlxuICAgICAgICAgICAgICA8ZGl2PiR7dGhpcy5fbWlufTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2PiR7dGhpcy5fbWF4fTwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+YFxuICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgJHt0aGlzLmNzTGl2ZS5nZXRQcm9wZXJ0eVZhbHVlKCctLXNob3ctdGlja3MnKSA9PSAndHJ1ZScgPyBodG1sYDxkaXYgaWQ9XCJ0aWNrc1wiIHBhcnQ9XCJ0aWNrc1wiPjwvZGl2PmAgOiBub3RoaW5nfVxuICAgICAgICA8ZGl2IGlkPVwicmFpbFwiIHBhcnQ9XCJyYWlsXCIgQG1vdXNlZG93bj0ke3RoaXMuX29uTW91c2VEb3dufSBAdG91Y2hzdGFydD0ke3RoaXMuX29uVG91Y2hNb3ZlfT5cbiAgICAgICAgICA8ZGl2IGlkPVwia25vYlwiIHBhcnQ9XCJrbm9iXCI+XG4gICAgICAgICAgICAke3RoaXMuY3NMaXZlLmdldFByb3BlcnR5VmFsdWUoJy0tc2hvdy12YWx1ZScpID09ICd0cnVlJ1xuICAgICAgICAgICAgICA/IGh0bWxgPGRpdiBpZD1cInZhbHVlXCIgcGFydD1cInZhbHVlXCI+JHt0aGlzLnZhbHVlfTwvZGl2PmBcbiAgICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PmA7XG4gIH1cblxuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuc3RlcCA9IDE7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgncm9sZScsICdzbGlkZXInKTtcbiAgfVxuXG4gIHByaXZhdGUgX29uVG91Y2hNb3ZlKGV2ZW50KSB7XG4gICAgY29uc3QgaGFuZGxlVG91Y2hNb3ZlID0gZXZlbnQgPT4ge1xuICAgICAgY29uc3QgeyB4IH0gPSB0aGlzLmdldFBvc2l0aW9uRnJvbUV2ZW50KGV2ZW50KTtcbiAgICAgIGNvbnN0IGRpZmZYID0geCAtIHRoaXMuX3JhaWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgICAgdGhpcy5jYWxjdWxhdGVWYWx1ZShkaWZmWCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaGFuZGxlVG91Y2hFbmQgPSAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBoYW5kbGVUb3VjaE1vdmUpO1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBoYW5kbGVUb3VjaEVuZCk7XG5cbiAgICAgIHRoaXMuc2F2ZVJlc3BvbnNlKHRoaXMudmFsdWUudG9TdHJpbmcoKSk7XG4gICAgfTtcblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIGhhbmRsZVRvdWNoTW92ZSk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBoYW5kbGVUb3VjaEVuZCk7XG5cbiAgICBjb25zdCB7IHggfSA9IHRoaXMuZ2V0UG9zaXRpb25Gcm9tRXZlbnQoZXZlbnQpO1xuICAgIGNvbnN0IGRpZmZYID0geCAtIHRoaXMuX3JhaWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIHRoaXMuY2FsY3VsYXRlVmFsdWUoZGlmZlgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25Nb3VzZURvd24oZXZlbnQpIHtcbiAgICBjb25zdCBoYW5kbGVNb3VzZU1vdmUgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIC8vIGlmIHRoZSBxdGktc2xpZGVyLWludGVyYWN0aW9uIGhhcyBhbiBhYnNvbHV0ZSBsZWZ0IHBvc2l0aW9uIGFuZCBib2R5IGlzIHNjcm9sbGVkIGEgYml0LCB0YWtlIGFjY291bnQgZm9yIHRoYXRcbiAgICAgIGNvbnN0IGRpZmZYID0gZXZlbnQucGFnZVggLSB0aGlzLl9yYWlsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdDtcblxuICAgICAgdGhpcy5jYWxjdWxhdGVWYWx1ZShkaWZmWCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZU1vdXNlVXAgPSAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBoYW5kbGVNb3VzZU1vdmUpO1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIGhhbmRsZU1vdXNlVXApO1xuXG4gICAgICB0aGlzLnNhdmVSZXNwb25zZSh0aGlzLnZhbHVlLnRvU3RyaW5nKCkpO1xuICAgIH07XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBoYW5kbGVNb3VzZU1vdmUpO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBoYW5kbGVNb3VzZVVwKTtcblxuICAgIC8vIGlmIHRoZSBxdGktc2xpZGVyLWludGVyYWN0aW9uIGhhcyBhbiBhYnNvbHV0ZSBsZWZ0IHBvc2l0aW9uIGFuZCBib2R5IGlzIHNjcm9sbGVkIGEgYml0LCB0YWtlIGFjY291bnQgZm9yIHRoYXRcbiAgICBjb25zdCBkaWZmWCA9IGV2ZW50LnBhZ2VYIC0gdGhpcy5fcmFpbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQ7XG5cbiAgICB0aGlzLmNhbGN1bGF0ZVZhbHVlKGRpZmZYKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgLyoqIGNhbGN1bGF0ZVZhbHVlIGdldHMgeCBwb3NpdGlvbiBhbmQgY29tcGFyZXMgdGhpcyB3aXRoIHRoZSB0b3RhbCB3aWR0aCBpbiBwaXhlbHMgKi9cbiAgcHJpdmF0ZSBjYWxjdWxhdGVWYWx1ZShkaWZmWDogbnVtYmVyKSB7XG4gICAgY29uc3QgdmFsdWVOb3cgPSB0aGlzLm1pbiArICgodGhpcy5tYXggLSB0aGlzLm1pbikgKiBkaWZmWCkgLyB0aGlzLl9yYWlsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgIGNvbnN0IHJvdW5kZWRTdGVwVmFsdWUgPSB0aGlzLm1pbiArIE1hdGgucm91bmQoKHZhbHVlTm93IC0gdGhpcy5taW4pIC8gdGhpcy5fc3RlcCkgKiB0aGlzLl9zdGVwO1xuICAgIHRoaXMudmFsdWUgPSByb3VuZGVkU3RlcFZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQb3NpdGlvbkZyb21FdmVudChlOiBhbnkpOiB7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbiAgfSB7XG4gICAgbGV0IF90b3VjaE1vdmU7XG4gICAgaWYgKGUudHlwZSA9PSAndG91Y2hzdGFydCcgfHwgZS50eXBlID09ICd0b3VjaG1vdmUnIHx8IGUudHlwZSA9PSAndG91Y2hlbmQnIHx8IGUudHlwZSA9PSAndG91Y2hjYW5jZWwnKSB7XG4gICAgICBjb25zdCBldnQgPSB0eXBlb2YgZS5vcmlnaW5hbEV2ZW50ID09PSAndW5kZWZpbmVkJyA/IGUgOiBlLm9yaWdpbmFsRXZlbnQ7XG4gICAgICBjb25zdCB0b3VjaCA9IGV2dC50b3VjaGVzWzBdIHx8IGV2dC5jaGFuZ2VkVG91Y2hlc1swXTtcbiAgICAgIF90b3VjaE1vdmUgPSB7XG4gICAgICAgIHg6IHRvdWNoLnBhZ2VYLFxuICAgICAgICB5OiB0b3VjaC5wYWdlWVxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgZS50eXBlID09ICdtb3VzZWRvd24nIHx8XG4gICAgICBlLnR5cGUgPT0gJ21vdXNldXAnIHx8XG4gICAgICBlLnR5cGUgPT0gJ21vdXNlbW92ZScgfHxcbiAgICAgIGUudHlwZSA9PSAnbW91c2VvdmVyJyB8fFxuICAgICAgZS50eXBlID09ICdtb3VzZW91dCcgfHxcbiAgICAgIGUudHlwZSA9PSAnbW91c2VlbnRlcicgfHxcbiAgICAgIGUudHlwZSA9PSAnbW91c2VsZWF2ZSdcbiAgICApIHtcbiAgICAgIF90b3VjaE1vdmUgPSB7XG4gICAgICAgIHg6IGUuY2xpZW50WCxcbiAgICAgICAgeTogZS5jbGllbnRZXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gX3RvdWNoTW92ZTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktc2xpZGVyLWludGVyYWN0aW9uJzogUXRpU2xpZGVySW50ZXJhY3Rpb247XG4gIH1cbn1cbiIsICJpbXBvcnQge1xuICBpdGVtQ29udGV4dCxcbiAgdHlwZSBDYWxjdWxhdGUsXG4gIHR5cGUgSXRlbUNvbnRleHQsXG4gIHR5cGUgUmVzcG9uc2VWYXJpYWJsZVxufSBmcm9tICdAY2l0b2xhYi9xdGktY29tcG9uZW50cy9xdGktY29tcG9uZW50cyc7XG5pbXBvcnQgeyBjb25zdW1lIH0gZnJvbSAnQGxpdC9jb250ZXh0JztcbmltcG9ydCB7IExpdEVsZW1lbnQsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbi8qKlxuICogaHR0cHM6Ly93d3cuaW1zZ2xvYmFsLm9yZy9zcGVjL3F0aS92M3AwL2ltcGwjaC5maTI5cThkdWJqZ3dcbiAqIDxxdGktY3VzdG9tLW9wZXJhdG9yIGNsYXNzPVwianMub3JnXCI+XG4gICAgICAgIDxxdGktYmFzZS12YWx1ZSBiYXNlLXR5cGU9XCJzdHJpbmdcIj48IVtDREFUQVtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjb250ZXh0LnZhcmlhYmxlcyk7XG4gICAgICAgICAgcmV0dXJuICdCJ1xuICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3F0aS1lbmQtYXR0ZW1wdC1pbnRlcmFjdGlvbicpLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICBdXT48L3F0aS1iYXNlLXZhbHVlPlxuICAgICAgPC9xdGktY3VzdG9tLW9wZXJhdG9yPlxuICAgIDwvcXRpLXNldC1vdXRjb21lLXZhbHVlPlxuICovXG5AY3VzdG9tRWxlbWVudCgncXRpLWN1c3RvbS1vcGVyYXRvcicpXG5leHBvcnQgY2xhc3MgUXRpQ3VzdG9tT3BlcmF0b3IgZXh0ZW5kcyBMaXRFbGVtZW50IGltcGxlbWVudHMgQ2FsY3VsYXRlIHtcbiAgcHJpdmF0ZSBvcGVyYXRvckZ1bmN0aW9uOiBGdW5jdGlvbjtcblxuICBAY29uc3VtZSh7IGNvbnRleHQ6IGl0ZW1Db250ZXh0LCBzdWJzY3JpYmU6IHRydWUgfSlcbiAgQHN0YXRlKClcbiAgcHJpdmF0ZSBfY29udGV4dD86IEl0ZW1Db250ZXh0O1xuXG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdCBAc2xvdGNoYW5nZT0ke3RoaXMuaGFuZGxlU2xvdENoYW5nZX0+PC9zbG90PmA7XG4gIH1cblxuICBoYW5kbGVTbG90Q2hhbmdlKGV2ZW50OiBFdmVudCkge1xuICAgIC8vIGV4cGVjdGluZyA8WyFDREFUQVsgLi4uIF1dPiBpcyBjb252ZXJ0ZWQgaW50byA8IS0tIC4uLiAtLT4gd2l0aCBxdGktdHJhbnNmb3JtOiBjRGF0YVRvQ29tbWVudFxuICAgIGNvbnN0IGNvbW1lbnROb2RlID0gQXJyYXkuZnJvbSh0aGlzLmZpcnN0RWxlbWVudENoaWxkPy5jaGlsZE5vZGVzID8/IFtdKS5maW5kKFxuICAgICAgbm9kZSA9PiBub2RlLm5vZGVUeXBlID09PSBOb2RlLkNPTU1FTlRfTk9ERVxuICAgICk7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMub3BlcmF0b3JGdW5jdGlvbiA9IG5ldyBGdW5jdGlvbignY29udGV4dCcsICdmbicsICdpdGVtJywgY29tbWVudE5vZGUudGV4dENvbnRlbnQgPz8gJycpOyAgICAgIFxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2N1c3RvbS1vcGVyYXRvciBjb250YWlucyBpbnZhbGlkIGphdmFzY3JpcHQgY29kZScsIGUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjYWxjdWxhdGUoKSB7XG4gICAgY29uc3QgZm4gPSB7XG4gICAgICB2YXJpYWJsZTogKHJlc3BvbnNlSWRlbnRpZmllcjogc3RyaW5nKSA9PlxuICAgICAgICB0aGlzLl9jb250ZXh0Py52YXJpYWJsZXMuZmluZCh2ID0+IHYuaWRlbnRpZmllciA9PT0gcmVzcG9uc2VJZGVudGlmaWVyKT8udmFsdWUgPz8gJycsXG4gICAgICBjb3JyZWN0OiAocmVzcG9uc2VJZGVudGlmaWVyOiBzdHJpbmcpID0+XG4gICAgICAgICh0aGlzLl9jb250ZXh0Py52YXJpYWJsZXMuZmluZCh2ID0+IHYuaWRlbnRpZmllciA9PT0gcmVzcG9uc2VJZGVudGlmaWVyKSBhcyBSZXNwb25zZVZhcmlhYmxlKVxuICAgICAgICAgID8uY29ycmVjdFJlc3BvbnNlID8/ICcnXG4gICAgfTtcbiAgICBjb25zdCBpdGVtID0ge1xuICAgICAgZ2V0VmFyaWFibGU6ICh2YXJpYWJsZUlkZW50aWZpZXI6IHN0cmluZykgPT5cbiAgICAgICAgdGhpcy5fY29udGV4dD8udmFyaWFibGVzLmZpbmQodiA9PiB2LmlkZW50aWZpZXIgPT09IHZhcmlhYmxlSWRlbnRpZmllciksXG4gICAgICB1cGRhdGVPdXRjb21lVmFyaWFibGU6IChvdXRjb21lSWRlbnRpZmllcjogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pID0+IHsgICAgICAgIFxuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50PHsgb3V0Y29tZUlkZW50aWZpZXI6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdIH0+KCdxdGktc2V0LW91dGNvbWUtdmFsdWUnLCB7XG4gICAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUsXG4gICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgb3V0Y29tZUlkZW50aWZpZXIsXG4gICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICB1cGRhdGVSZXNwb25zZVZhcmlhYmxlOiAocmVzcG9uc2VJZGVudGlmaWVyOiBzdHJpbmcsIHJlc3BvbnNlOiBzdHJpbmcgfCBzdHJpbmdbXSkgPT4ge1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50PHsgcmVzcG9uc2VJZGVudGlmaWVyOiBzdHJpbmc7IHJlc3BvbnNlOiBzdHJpbmcgfCBzdHJpbmdbXSB9PigncXRpLWludGVyYWN0aW9uLXJlc3BvbnNlJywge1xuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgIHJlc3BvbnNlSWRlbnRpZmllcixcbiAgICAgICAgICAgICAgcmVzcG9uc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH07ICAgXG4gICAgXG4gICAgcmV0dXJuIHRoaXMub3BlcmF0b3JGdW5jdGlvbih0aGlzLl9jb250ZXh0LCBmbiwgaXRlbSk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWN1c3RvbS1vcGVyYXRvcic6IFF0aUN1c3RvbU9wZXJhdG9yO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgTGl0RWxlbWVudCwgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktYXNzb2NpYWJsZS1ob3RzcG90JylcbmV4cG9ydCBjbGFzcyBRdGlBc3NvY2lhYmxlSG90c3BvdCBleHRlbmRzIExpdEVsZW1lbnQge1xuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdxdGktcmVnaXN0ZXItaG90c3BvdCcsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbXBvc2VkOiB0cnVlXG4gICAgICB9KVxuICAgICk7XG4gIH1cbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IGNzc2BcbiAgICA6aG9zdCB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgfVxuICBgO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGAgPHNsb3QgbmFtZT1cInF0aS1nYXAtaW1nXCI+PC9zbG90PiBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1hc3NvY2lhYmxlLWhvdHNwb3QnOiBRdGlBc3NvY2lhYmxlSG90c3BvdDtcbiAgfVxufVxuIiwgImltcG9ydCB7IGh0bWwsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktZ2FwJylcbmV4cG9ydCBjbGFzcyBRdGlHYXAgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgQHByb3BlcnR5KHsgdHlwZTogTnVtYmVyLCByZWZsZWN0OiB0cnVlIH0pIHRhYmluZGV4OiBudW1iZXIgfCB1bmRlZmluZWQgPSAwO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGAgPHNsb3QgbmFtZT1cInF0aS1nYXAtdGV4dFwiPjwvc2xvdD5gO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ3F0aS1nYXAnOiBRdGlHYXA7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWdhcC1pbWcnKVxuZXhwb3J0IGNsYXNzIFF0aUdhcEltZyBleHRlbmRzIExpdEVsZW1lbnQge1xuICBAcHJvcGVydHkoeyB0eXBlOiBOdW1iZXIsIHJlZmxlY3Q6IHRydWUgfSkgdGFiaW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZCA9IDA7XG5cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ3Nsb3QnLCAncXRpLWdhcC1pbWcnKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktZ2FwLWltZyc6IFF0aUdhcEltZztcbiAgfVxufVxuIiwgImltcG9ydCB7IGh0bWwsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktZ2FwLXRleHQnKVxuZXhwb3J0IGNsYXNzIFF0aUdhcFRleHQgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgQHByb3BlcnR5KHsgdHlwZTogTnVtYmVyLCByZWZsZWN0OiB0cnVlIH0pIHRhYmluZGV4OiBudW1iZXIgfCB1bmRlZmluZWQgPSAwO1xuXG4gIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ3Nsb3QnLCAncXRpLWdhcC10ZXh0Jyk7XG4gIH1cblxuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPHNsb3Q+PC9zbG90PmA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWdhcC10ZXh0JzogUXRpR2FwVGV4dDtcbiAgfVxufVxuIiwgImltcG9ydCB7IGNzcyB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IFF0aUNob2ljZSB9IGZyb20gJy4vaW50ZXJuYWwvY2hvaWNlL3F0aS1jaG9pY2UnO1xuXG4vLyB0eXBlIHNoYXBlID0geyBzaGFwZTogJ3JlY3QnIHwgJ2NpcmNsZScgfCAncG9seSc7IGNvb3JkczogbnVtYmVyW10gfTtcblxuQGN1c3RvbUVsZW1lbnQoJ3F0aS1ob3RzcG90LWNob2ljZScpXG5leHBvcnQgY2xhc3MgUXRpSG90c3BvdENob2ljZSBleHRlbmRzIFF0aUNob2ljZSB7XG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2FyaWEtb3JkZXJ2YWx1ZScsIHR5cGU6IE51bWJlciwgcmVmbGVjdDogdHJ1ZSB9KSBvcmRlcjogbnVtYmVyO1xuXG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBjc3NgXG4gICAgOmhvc3Qge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIH1cbiAgYDtcbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLWhvdHNwb3QtY2hvaWNlJzogUXRpSG90c3BvdENob2ljZTtcbiAgfVxufVxuIiwgImltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBRdGlDaG9pY2UgfSBmcm9tICcuL2ludGVybmFsL2Nob2ljZS9xdGktY2hvaWNlJztcbmltcG9ydCB7IGh0bWwgfSBmcm9tICdsaXQnO1xuXG5AY3VzdG9tRWxlbWVudCgncXRpLWhvdHRleHQnKVxuZXhwb3J0IGNsYXNzIFF0aUhvdHRleHQgZXh0ZW5kcyBRdGlDaG9pY2Uge1xuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPGRpdiBwYXJ0PVwiY2hcIj48ZGl2IHBhcnQ9XCJjaGFcIj48L2Rpdj48L2Rpdj5cbiAgICAgIDxzbG90Pjwvc2xvdD4gYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktaG90dGV4dCc6IFF0aUhvdHRleHQ7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbkBjdXN0b21FbGVtZW50KCdxdGktaW5saW5lLWNob2ljZScpXG5leHBvcnQgY2xhc3MgUXRpSW5saW5lQ2hvaWNlIGV4dGVuZHMgTGl0RWxlbWVudCB7fVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICdxdGktaW5saW5lLWNob2ljZSc6IFF0aUlubGluZUNob2ljZTtcbiAgfVxufVxuIiwgImltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBDU1NSZXN1bHRHcm91cCwgY3NzLCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IFF0aUNob2ljZSB9IGZyb20gJy4vaW50ZXJuYWwvY2hvaWNlL3F0aS1jaG9pY2UnO1xuXG4vKipcbiAqIEBzdW1tYXJ5IFNob3J0IHN1bW1hcnkgb2YgdGhlIGNvbXBvbmVudCdzIGludGVuZGVkIHVzZS5cbiAqIEBkb2N1bWVudGF0aW9uIGh0dHBzOi8vd3d3Lmltc2dsb2JhbC5vcmcvc3BlYy9xdGkvdjNwMC9pbXBsI2guajludTFvYTF0dTNiXG4gKiBAc3RhdHVzIHN0YWJsZVxuICogQHNpbmNlIDQuMFxuICpcbiAqIEBldmVudCBxdGktY2hvaWNlLWVsZW1lbnQtc2VsZWN0ZWQgLSBFbWl0dGVkIHdoZW4gYSBjaG9pY2UgaXMgc2VsZWN0ZWQuXG4gKiBAZXZlbnQgcXRpLXJlZ2lzdGVyLWNob2ljZSAtIEVtaXR0ZWQgd2hlbiBhbiBjaG9pY2UgaXMgYWRkZWRcbiAqIEBldmVudCBxdGktbG9vc2UtY2hvaWNlIC0gRW1pdHRlZCB3aGVuIGEgY2hvaWNlIGlzIHJlbW92ZWRcbiAqXG4gKiBAc2xvdCAtIFRoZSBkZWZhdWx0IHNsb3QuXG4gKi9cbkBjdXN0b21FbGVtZW50KCdxdGktc2ltcGxlLWNob2ljZScpXG5leHBvcnQgY2xhc3MgUXRpU2ltcGxlQ2hvaWNlIGV4dGVuZHMgUXRpQ2hvaWNlIHtcbiAgc3RhdGljIHN0eWxlcyA9IGNzc2BcbiAgICA6aG9zdCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgIH1cbiAgICBzbG90IHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICBgO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8ZGl2IHBhcnQ9XCJjaFwiPjxkaXYgcGFydD1cImNoYVwiPjwvZGl2PjwvZGl2PlxuICAgICAgPHNsb3QgcGFydD1cInNsb3RcIj48L3Nsb3Q+IGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAncXRpLXNpbXBsZS1jaG9pY2UnOiBRdGlTaW1wbGVDaG9pY2U7XG4gIH1cbn1cbiIsICIvKiBvbmx5IGV4cG9ydGVkIHRvIG92ZXJyaWRlIG9yIGV4dGVuZCBmb3Igc3BlY2lmaWMgcHVycG9zZXMgKi9cbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJuYWwvZXZlbnQtdHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcm5hbC9ldmVudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcm5hbC9leHByZXNzaW9uLXJlc3VsdCc7XG5leHBvcnQgKiBmcm9tICcuL2ludGVybmFsL3ZhcmlhYmxlcyc7XG4vKiBvbmx5IGV4cG9ydGVkIHRvIG92ZXJyaWRlIG9yIGV4dGVuZCBmb3Igc3BlY2lmaWMgcHVycG9zZXMgKi9cbmV4cG9ydCAqIGZyb20gJy4vcXRpLWFzc2Vzc21lbnQtaXRlbS9xdGktYXNzZXNzbWVudC1pdGVtJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWFzc2Vzc21lbnQtc3RpbXVsdXMtcmVmL3F0aS1hc3Nlc3NtZW50LXN0aW11bHVzLXJlZic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9pbnRlcm5hbC9jaG9pY2UvcXRpLWNob2ljZSc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pdGVtLWJvZHkvcXRpLWl0ZW0tYm9keSc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1wcm9tcHQvcXRpLXByb21wdCc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1zdHlsZXNoZWV0L3F0aS1zdHlsZXNoZWV0Jztcbi8qIHN0YXJ0IHJlc3BvbnNlIGFuZCBvdXRjb21lICovXG5leHBvcnQgKiBmcm9tICcuL3F0aS12YXJpYWJsZS1kZWNsYXJhdGlvbi9xdGktb3V0Y29tZS1kZWNsYXJhdGlvbi9xdGktb3V0Y29tZS1kZWNsYXJhdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS12YXJpYWJsZS1kZWNsYXJhdGlvbi9xdGktcmVzcG9uc2UtZGVjbGFyYXRpb24vcXRpLXJlc3BvbnNlLWRlY2xhcmF0aW9uJztcbi8qIGVuZCByZXNwb25zZSBhbmQgb3V0Y29tZSAqL1xuZXhwb3J0ICogZnJvbSAnLi9xdGktY29tcGFuaW9uLW1hdGVyaWFscy1pbmZvL3F0aS1jb21wYW5pb24tbWF0ZXJpYWxzLWluZm8nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktcnVicmljLWJsb2NrL3F0aS1jb250ZW50LWJvZHknO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktcnVicmljLWJsb2NrL3F0aS1ydWJyaWMtYmxvY2snO1xuLyogc3RhcnQgZmVlZGJhY2sgKi9cbmV4cG9ydCAqIGZyb20gJy4vcXRpLWZlZWRiYWNrL3F0aS1mZWVkYmFjay1ibG9jay9xdGktZmVlZGJhY2stYmxvY2snO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktZmVlZGJhY2svcXRpLWZlZWRiYWNrLWlubGluZS9xdGktZmVlZGJhY2staW5saW5lJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWZlZWRiYWNrL3F0aS1tb2RhbC1mZWVkYmFjay9xdGktbW9kYWwtZmVlZGJhY2snO1xuLyogZW5kIGZlZWRiYWNrICovXG4vKiBzdGFydCB0ZXh0ZW50cnlpbnRlcmFjdGlvbiAqL1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWV4dGVuZGVkLXRleHQtaW50ZXJhY3Rpb24vcXRpLWV4dGVuZGVkLXRleHQtaW50ZXJhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLXRleHQtZW50cnktaW50ZXJhY3Rpb24vcXRpLXRleHQtZW50cnktaW50ZXJhY3Rpb24nO1xuLyogZW5kIHRleHRlbnRyeWludGVyYWN0aW9uICovXG4vKiBzdGFydCBob3R0ZXh0ICovXG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktaG90dGV4dC1pbnRlcmFjdGlvbi9xdGktaG90dGV4dC1pbnRlcmFjdGlvbic7XG4vKiBlbmQgaG90dGV4dCAqL1xuLyogc3RhcnQgaW5saW5lY2hvaWNlICovXG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktaW5saW5lLWNob2ljZS1pbnRlcmFjdGlvbi9xdGktaW5saW5lLWNob2ljZS1pbnRlcmFjdGlvbic7XG4vKiBlbmQgaW5saW5lY2hvaWNlICovXG4vKiBzdGFydCBjaG9pY2VpbnRlcmFjdGlvbiAqL1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWNob2ljZS1pbnRlcmFjdGlvbi9xdGktY2hvaWNlLWludGVyYWN0aW9uJztcbi8qIGVuZCBjaG9pY2VpbnRlcmFjdGlvbiAqL1xuZXhwb3J0ICogZnJvbSAnLi9xdGktb3V0Y29tZS1wcm9jZXNzaW5nL3F0aS1vdXRjb21lLXByb2Nlc3NpbmcnO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktcmVzcG9uc2UtcHJvY2Vzc2luZyc7XG4vKiBzdGFydCBjdXN0b20gaW50ZXJhY3Rpb25zICovXG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktcG9ydGFibGUtY3VzdG9tLWludGVyYWN0aW9uL3F0aS1wb3J0YWJsZS1jdXN0b20taW50ZXJhY3Rpb24nO1xuLyogZW5kIGN1c3RvbSBpbnRlcmFjdGlvbnMgKi9cbi8qIHN0YXJ0IG9ubHkgcHJldmlldyBpdGVtcyAqL1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWFzc29jaWF0ZS1pbnRlcmFjdGlvbi9xdGktYXNzb2NpYXRlLWludGVyYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1jdXN0b20taW50ZXJhY3Rpb24vcXRpLWN1c3RvbS1pbnRlcmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktZW5kLWF0dGVtcHQtaW50ZXJhY3Rpb24vcXRpLWVuZC1hdHRlbXB0LWludGVyYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1nYXAtbWF0Y2gtaW50ZXJhY3Rpb24vcXRpLWdhcC1tYXRjaC1pbnRlcmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktZ3JhcGhpYy1hc3NvY2lhdGUtaW50ZXJhY3Rpb24vcXRpLWdyYXBoaWMtYXNzb2NpYXRlLWludGVyYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1ncmFwaGljLWdhcC1tYXRjaC1pbnRlcmFjdGlvbi9xdGktZ3JhcGhpYy1nYXAtbWF0Y2gtaW50ZXJhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWdyYXBoaWMtb3JkZXItaW50ZXJhY3Rpb24vcXRpLWdyYXBoaWMtb3JkZXItaW50ZXJhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWhvdHNwb3QtaW50ZXJhY3Rpb24vcXRpLWhvdHNwb3QtaW50ZXJhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLW1hdGNoLWludGVyYWN0aW9uL3F0aS1tYXRjaC1pbnRlcmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktbWVkaWEtaW50ZXJhY3Rpb24vcXRpLW1lZGlhLWludGVyYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1vcmRlci1pbnRlcmFjdGlvbi9xdGktb3JkZXItaW50ZXJhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLXBvc2l0aW9uLW9iamVjdC1pbnRlcmFjdGlvbi9xdGktcG9zaXRpb24tb2JqZWN0LWludGVyYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1wb3NpdGlvbi1vYmplY3QtaW50ZXJhY3Rpb24vcXRpLXBvc2l0aW9uLW9iamVjdC1zdGFnZSc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktc2VsZWN0LXBvaW50LWludGVyYWN0aW9uL3F0aS1zZWxlY3QtcG9pbnQtaW50ZXJhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLXNsaWRlci1pbnRlcmFjdGlvbi9xdGktc2xpZGVyLWludGVyYWN0aW9uJztcbi8qIGVuZCBvbmx5IHByZXZpZXcgaXRlbXMgKi9cbmV4cG9ydCAqIGZyb20gJy4vcXRpLWFzc2Vzc21lbnQtaXRlbS9xdGktYXNzZXNzbWVudC1pdGVtLmNvbnRleHQnO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktY3VzdG9tLW9wZXJhdG9yL3F0aS1jdXN0b20tb3BlcmF0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vaW50ZXJuYWwvaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWFzc29jaWFibGUtaG90c3BvdCc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktZ2FwJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1nYXAtaW1nJztcbmV4cG9ydCAqIGZyb20gJy4vcXRpLWludGVyYWN0aW9uL3F0aS1nYXAtdGV4dCc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktaG90c3BvdC1jaG9pY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWhvdHRleHQnO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLWlubGluZS1jaG9pY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9xdGktaW50ZXJhY3Rpb24vcXRpLXNpbXBsZS1hc3NvY2lhYmxlLWNob2ljZSc7XG5leHBvcnQgKiBmcm9tICcuL3F0aS1pbnRlcmFjdGlvbi9xdGktc2ltcGxlLWNob2ljZSc7XG5cbmNvbnNvbGUubG9nKFxuICAnJWNDXHUwMEJGVE8lY0xhYiVjOiBxdGktY29tcG9uZW50cyBsb2FkZWQnLFxuICAnZm9udC13ZWlnaHQ6Ym9sZDsgY29sb3I6Z3JlZW4nLFxuICAnZm9udC1mYW1pbHk6IFwiUFQgU2Fuc1wiLCBmb250LXdlaWdodDpib2xkOyBjb2xvcjpncmVlbjsgZm9udC1zaXplOiBzbWFsbGVyO3ZlcnRpY2FsLWFsaWduOiBzdWInLFxuICAnZm9udC13ZWlnaHQ6dW5zZXQnXG4pO1xuXG4vLyBjc3MgZm9yIGZvbnQgcHQtc2FucyBhbmQgc3Vic2NyaXB0IGFuZCBncmVlblxuIl0sCiAgIm1hcHBpbmdzIjogIitEQUFBLE9BQVMsV0FBQUEsT0FBZSxlQUN4QixPQUFTLGNBQUFDLEdBQVksUUFBQUMsT0FBWSxN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LElDdURiLFFBQVEsSUFDTiwwQ0FDQSxnQ0FDQSxnR0FDQSxtQkFDRiIsCiAgIm5hbWVzIjogWyJwcm92aWRlIiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgIndhdGNoIiwgInByb3BlcnR5TmFtZSIsICJvcHRpb25zIiwgInJlc29sdmVkT3B0aW9ucyIsICJfX3NwcmVhZFZhbHVlcyIsICJwcm90byIsICJkZWNvcmF0ZWRGbk5hbWUiLCAidXBkYXRlIiwgIndhdGNoZWRQcm9wZXJ0aWVzIiwgImNoYW5nZWRQcm9wcyIsICJwcm9wZXJ0eSIsICJrZXkiLCAib2xkVmFsdWUiLCAibmV3VmFsdWUiLCAiY3JlYXRlQ29udGV4dCIsICJpdGVtQ29udGV4dFZhcmlhYmxlcyIsICJpdGVtQ29udGV4dCIsICJRdGlBc3Nlc3NtZW50SXRlbSIsICJMaXRFbGVtZW50IiwgIl8iLCAiZGlzYWJsZWQiLCAiY2giLCAicmVhZG9ubHkiLCAiaXRlbUNvbnRleHRWYXJpYWJsZXMiLCAiX19zcHJlYWRQcm9wcyIsICJfX3NwcmVhZFZhbHVlcyIsICJmZWVkYmFja0VsZW1lbnQiLCAicmVzcG9uc2VJZGVudGlmaWVyIiwgImNvdW50QXR0ZW1wdCIsICJvdXRjb21lSWRlbnRpZmllciIsICJ2YWx1ZSIsICJ2IiwgInZhcmlhYmxlIiwgIm1hdGNoaW5nVmFsdWUiLCAiaW50ZXJhY3Rpb25FbGVtZW50IiwgImVsIiwgImZlIiwgIm15UmVzcG9uc2VzIiwgInJlc3BvbnNlIiwgImludGVyYWN0aW9uIiwgImkiLCAiaHRtbCIsICJzaG93IiwgInJlc3BvbnNlcyIsICJ2YXJpIiwgImNyIiwgImNvdW50TnVtQXR0ZW1wdHMiLCAiX2EiLCAicmVzcG9uc2VQcm9jZXNzb3IiLCAiaWRlbnRpZmllciIsICJldmVudCIsICJvdXRjb21lVmFyaWFibGUiLCAibmFtZSIsICJkZXRhaWwiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgIndhdGNoIiwgInByb3ZpZGUiLCAiaXRlbUNvbnRleHQiLCAiY3VzdG9tRWxlbWVudCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAiUXRpQXNzZXNzbWVudFN0aW11bHVzUmVmIiwgIkxpdEVsZW1lbnQiLCAiZXZlbnQiLCAic3RpbXVsdXNSZWYiLCAicGF0aCIsICJzdGltdWx1cyIsICJxdGlUcmFuc2Zvcm1JdGVtIiwgImFwaSIsICJlbGVtZW50cyIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiY3VzdG9tRWxlbWVudCIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAicHJvcGVydHkiLCAiS0VZQ09ERSIsICJRdGlDaG9pY2UiLCAiTGl0RWxlbWVudCIsICJfIiwgImRpc2FibGVkIiwgImV2ZW50IiwgImh0bWwiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgInZhbHVlIiwgIndhdGNoIiwgImN1c3RvbUVsZW1lbnQiLCAiaHRtbCIsICJMaXRFbGVtZW50IiwgImNzcyIsICJxdGlfaXRlbV9ib2R5X3N0eWxlc19kZWZhdWx0IiwgIlF0aUl0ZW1Cb2R5IiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJxdGlfaXRlbV9ib2R5X3N0eWxlc19kZWZhdWx0IiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgIlF0aVByb21wdCIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgIlF0aVN0eWxlc2hlZXQiLCAiTGl0RWxlbWVudCIsICJfY2hhbmdlZFByb3BlcnRpZXMiLCAiaXRlbSIsICJsaW5rIiwgInN0eWxlcyIsICJlcnJvciIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJjb25zdW1lIiwgImNzcyIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAic3RhdGUiLCAiaHRtbCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpVmFyaWFibGVEZWNsYXJhdGlvbiIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAidmFyaWFibGUiLCAiaHRtbFZhbHVlcyIsICJkZWZhdWx0VmFsdWVzIiwgIm4iLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpT3V0Y29tZURlY2xhcmF0aW9uIiwgIlF0aVZhcmlhYmxlRGVjbGFyYXRpb24iLCAiX2EiLCAiX2IiLCAidmFsdWUiLCAidiIsICJodG1sIiwgInRhYmxlIiwgImVudHJpZXMiLCAiZW50cnkiLCAic291cmNlVmFsdWUiLCAidGFyZ2V0VmFsdWUiLCAib3V0Y29tZVZhcmlhYmxlIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiY29uc3VtZSIsICJpdGVtQ29udGV4dCIsICJzdGF0ZSIsICJjdXN0b21FbGVtZW50IiwgImNvbnN1bWUiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJzdGF0ZSIsICJRdGlSZXNwb25zZURlY2xhcmF0aW9uIiwgIlF0aVZhcmlhYmxlRGVjbGFyYXRpb24iLCAiX2EiLCAiX2IiLCAidmFsdWUiLCAidiIsICJodG1sIiwgInJlc3BvbnNlVmFyaWFibGUiLCAicmVzdWx0IiwgImNvcnJlY3RSZXNwb25zZSIsICJ2YWx1ZXMiLCAiaSIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgImNvbnN1bWUiLCAiaXRlbUNvbnRleHQiLCAic3RhdGUiLCAiY3VzdG9tRWxlbWVudCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpQ29tcGFuaW9uTWF0ZXJpYWxzSW5mbyIsICJMaXRFbGVtZW50IiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgIlF0aUNvbnRlbnRCb2R5IiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJMaXRFbGVtZW50IiwgImNzcyIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAiUXRpUnVicmljQmxvY2siLCAiTGl0RWxlbWVudCIsICJvbGQiLCAiZGlzYWJsZWQiLCAiY2xhc3NOYW1lIiwgImh0bWwiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJ3YXRjaCIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAiTGl0RWxlbWVudCIsICJwcm9wZXJ0eSIsICJkZWNpbWFsU2VwYXJhdG9yIiwgImNvbnZlcnROdW1iZXJUb1VuaXZlcmFsRm9ybWF0IiwgIm51bWJlciIsICJkU2VwIiwgIklzTnVsbE9yVW5kZWZpbmVkIiwgInZhbHVlIiwgInJlbW92ZURvdWJsZVNsYXNoZXMiLCAic3RyIiwgIlF0aUZlZWRiYWNrIiwgIkxpdEVsZW1lbnQiLCAib3V0Y29tZUlkZW50aWZpZXIiLCAib3V0Y29tZVZhcmlhYmxlIiwgImlzRm91bmQiLCAiSXNOdWxsT3JVbmRlZmluZWQiLCAidmFsdWUiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgIlF0aUZlZWRiYWNrQmxvY2siLCAiUXRpRmVlZGJhY2siLCAiaHRtbCIsICJfY2hhbmdlZFByb3BlcnRpZXMiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpRmVlZGJhY2tJbmxpbmUiLCAiUXRpRmVlZGJhY2siLCAiaHRtbCIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlNb2RhbEZlZWRiYWNrIiwgIlF0aUZlZWRiYWNrIiwgImh0bWwiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgImlmRGVmaW5lZCIsICJwcm9wZXJ0eSIsICJMaXRFbGVtZW50IiwgIkludGVyYWN0aW9uIiwgIkxpdEVsZW1lbnQiLCAidmFsIiwgInZhbHVlIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJyZWYiLCAiY3JlYXRlUmVmIiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAic3RhdGUiLCAiUXRpRXh0ZW5kZWRUZXh0SW50ZXJhY3Rpb24iLCAiSW50ZXJhY3Rpb24iLCAiY3JlYXRlUmVmIiwgIm9sZCIsICJkaXNhYmxlZCIsICJjbGFzc05hbWUiLCAibnJSb3dzIiwgInZhbHVlIiwgImNzcyIsICJodG1sIiwgInJlZiIsICJldmVudCIsICJpZkRlZmluZWQiLCAiaW5wdXQiLCAidGV4dCIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAic3RhdGUiLCAid2F0Y2giLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgInN0YXRlIiwgImlmRGVmaW5lZCIsICJjcmVhdGVSZWYiLCAibGl2ZVF1ZXJ5IiwgInF1ZXJ5U2VsZWN0b3IiLCAib3B0aW9ucyIsICJvYnNlcnZlciIsICJyZXNvbHZlZE9wdGlvbnMiLCAiX19zcHJlYWRWYWx1ZXMiLCAicHJvdG8iLCAiZGVjb3JhdGVkRm5OYW1lIiwgImNvbm5lY3RlZENhbGxiYWNrIiwgImRpc2Nvbm5lY3RlZENhbGxiYWNrIiwgIl9hIiwgImNhbGxiYWNrIiwgIm11dGF0aW9uTGlzdCIsICJlbGVtZW50c1RvV2F0Y2giLCAibXV0YXRpb24iLCAiYWRkZWROb2RlcyIsICJlIiwgInJlbW92ZWROb2RlcyIsICJuIiwgImVsZW1lbnRzQWRkZWQiLCAiUXRpVGV4dEVudHJ5SW50ZXJhY3Rpb24iLCAiSW50ZXJhY3Rpb24iLCAiY3JlYXRlUmVmIiwgIm9sZCIsICJjbGFzc2VzIiwgImNsYXNzTmFtZSIsICJuclJvd3MiLCAidmFsdWUiLCAiY3NzIiwgImh0bWwiLCAiZXZlbnQiLCAiaWZEZWZpbmVkIiwgImlucHV0IiwgInRleHQiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgInN0YXRlIiwgIndhdGNoIiwgImN1c3RvbUVsZW1lbnQiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgIkNob2ljZXMiLCAiSW50ZXJhY3Rpb24iLCAiXyIsICJkaXNhYmxlZCIsICJjaCIsICJyZWFkb25seSIsICJhY2MiLCAidmFsIiwgInJlc3BvbnNlVmFsdWUiLCAicmVzcG9uc2VWYWx1ZUFycmF5IiwgImNlIiwgInJ2IiwgImNob2ljZUVsZW1lbnQiLCAiZXZlbnQiLCAic2VsZWN0ZWRJZGVudGlmaWVycyIsICJyZXN1bHQiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgIndhdGNoIiwgIlF0aUhvdHRleHRJbnRlcmFjdGlvbiIsICJDaG9pY2VzIiwgImh0bWwiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJzdGF0ZSIsICJ1bnNhZmVIVE1MIiwgIlF0aUlubGluZUNob2ljZUludGVyYWN0aW9uIiwgIkludGVyYWN0aW9uIiwgImNzcyIsICJodG1sIiwgIm9wdGlvbiIsICJ1bnNhZmVIVE1MIiwgImNob2ljZXMiLCAiY2hvaWNlIiwgInNlbGVjdGVkT3B0aW9uIiwgImkiLCAiX19zcHJlYWRQcm9wcyIsICJfX3NwcmVhZFZhbHVlcyIsICJ2YWx1ZSIsICJldmVudCIsICJzZWxlY3RlZE9wdGlvblZhbHVlIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJzdGF0ZSIsICJwcm9wZXJ0eSIsICJjdXN0b21FbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAiaHRtbCIsICJjc3MiLCAicXRpX2Nob2ljZV9pbnRlcmFjdGlvbl9zdHlsZXNfZGVmYXVsdCIsICJRdGlDaG9pY2VJbnRlcmFjdGlvbiIsICJDaG9pY2VzIiwgImh0bWwiLCAicXRpX2Nob2ljZV9pbnRlcmFjdGlvbl9zdHlsZXNfZGVmYXVsdCIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpT3V0Y29tZVByb2Nlc3NpbmciLCAiTGl0RWxlbWVudCIsICJodG1sIiwgImxvZ2ljIiwgIlF0aU91dGNvbWVQcm9jZXNzaW5nUHJvY2Vzc29yIiwgInJ1bGVzIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJydWxlIiwgImNzcyIsICJodG1sIiwgIkxpdEVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJtYXRjaENvcnJlY3QiLCAibWFwUmVzcG9uc2UiLCAibWFwUmVzcG9uc2VQb2ludCIsICJRdGlSZXNwb25zZVByb2Nlc3NpbmciLCAiTGl0RWxlbWVudCIsICJodG1sIiwgInJ1bGVzIiwgInJ1bGUiLCAiX2NoYW5nZWRQcm9wZXJ0aWVzIiwgInNwbGl0dGVkVGVtcGxhdGVOYW1lIiwgInRlbXBsYXRlTmFtZSIsICJtYXBSZXNwb25zZSIsICJtYXBSZXNwb25zZVBvaW50IiwgIm1hdGNoQ29ycmVjdCIsICJzdHJIVE1MIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJjdXN0b21FbGVtZW50IiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJRdGlSdWxlIiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlMb29rdXBPdXRjb21lVmFsdWUiLCAiUXRpUnVsZSIsICJpZGVudGlmaWVyIiwgIm91dGNvbWVWYXJpYWJsZSIsICJ2YWx1ZSIsICJjb252ZXJ0TnVtYmVyVG9Vbml2ZXJhbEZvcm1hdCIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiaHRtbCIsICJRdGlSZXNwb25zZUNvbmRpdGlvbiIsICJRdGlSdWxlIiwgImh0bWwiLCAiYnJhbmNoZXMiLCAiaSIsICJicmFuY2giLCAiUXRpU2V0T3V0Y29tZVZhbHVlIiwgIlF0aVJ1bGUiLCAib3V0Y29tZUlkZW50aWZpZXIiLCAiZXhwcmVzc2lvbiIsICJ2YWx1ZSIsICJRdGlTZXRPdXRjb21lVmFsdWVSdWxlIiwgInYiLCAiY29udmVydE51bWJlclRvVW5pdmVyYWxGb3JtYXQiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgIlF0aVJlc3BvbnNlRWxzZSIsICJzdWJSdWxlcyIsICJpIiwgImh0bWwiLCAiUXRpUmVzcG9uc2VJZiIsICJRdGlSZXNwb25zZUVsc2UiLCAicmVzdWx0IiwgImkiLCAiUXRpUmVzcG9uc2VFbHNlSWYiLCAiUXRpUmVzcG9uc2VJZiIsICJodG1sIiwgIkxpdEVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAic3RhdGUiLCAiUXRpRXhwcmVzc2lvbiIsICJMaXRFbGVtZW50IiwgImlkZW50aWZpZXIiLCAidmFsdWVzIiwgInYiLCAicmVzcG9uc2VWYXJpYWJsZSIsICJlcnJvciIsICJodG1sIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAic3RhdGUiLCAiUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiIsICJRdGlFeHByZXNzaW9uIiwgIlF0aUFuZCIsICJxdGlBbmRNaXhpbiIsICJRdGlDb25kaXRpb25FeHByZXNzaW9uIiwgIkJhc2UiLCAiY2hpbGRyZW4iLCAiYyIsICJjb25kaXRpb24iLCAidmFsdWUiLCAiZSIsICJRdGlBbmQiLCAicHJvcGVydHkiLCAiUXRpQmFzZVZhbHVlIiwgIlF0aUV4cHJlc3Npb24iLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgIlF0aUNvbnRhaW5zIiwgIlF0aUNvbmRpdGlvbkV4cHJlc3Npb24iLCAidmFsdWVzIiwgInZhbHVlMSIsICJ2YWx1ZTIiLCAicHJvamVjdGlvbjEiLCAicHJvamVjdGlvbjIiLCAieCIsICJRdGlDb3JyZWN0IiwgIlF0aUV4cHJlc3Npb24iLCAiaWRlbnRpZmllciIsICJyZXNwb25zZVZhcmlhYmxlIiwgInByb3BlcnR5IiwgIlF0aUVxdWFsUm91bmRlZCIsICJRdGlFeHByZXNzaW9uIiwgImZpZ3VyZXMiLCAidmFsdWVzIiwgInZhbHVlMSIsICJ2YWx1ZTIiLCAiZmxvYXQxIiwgImZsb2F0MiIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAicHJvcGVydHkiLCAiU2NvcmluZ0hlbHBlciIsICJ2YWx1ZTEiLCAidmFsdWUyIiwgImJhc2VUeXBlIiwgImludDEiLCAiaW50MiIsICJmbG9hdDEiLCAiZmxvYXQyIiwgInBhaXIxIiwgInBhaXIyIiwgIlF0aUVxdWFsIiwgIlF0aUV4cHJlc3Npb24iLCAidmFsdWVzIiwgInZhbHVlMSIsICJ2YWx1ZTIiLCAiU2NvcmluZ0hlbHBlciIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiUXRpR3QiLCAiUXRpRXhwcmVzc2lvbiIsICJ2YWx1ZXMiLCAidmFsdWUxIiwgInZhbHVlMiIsICJRdGlHdGUiLCAiUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiIsICJ2YWx1ZXMiLCAidmFsdWUxIiwgInZhbHVlMiIsICJRdGlJc051bGwiLCAiUXRpRXhwcmVzc2lvbiIsICJ2YXJpYWJsZXMiLCAidmFsdWUiLCAiUXRpTHQiLCAiUXRpRXhwcmVzc2lvbiIsICJ2YWx1ZXMiLCAidmFsdWUxIiwgInZhbHVlMiIsICJRdGlMdGUiLCAiUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiIsICJ2YWx1ZXMiLCAidmFsdWUxIiwgInZhbHVlMiIsICJwcm9wZXJ0eSIsICJRdGlNYXBSZXNwb25zZSIsICJRdGlFeHByZXNzaW9uIiwgInJlc3BvbnNlIiwgIm1hcHBpbmciLCAiY2FuZGlkYXRlUmVzcG9uc2VzIiwgInJlc3VsdCIsICJjYW5kaWRhdGVSZXNwb25zZSIsICJtYXBwZWRWYWx1ZSIsICJlbnRyeSIsICJTY29yaW5nSGVscGVyIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJwcm9wZXJ0eSIsICJMaXRFbGVtZW50IiwgIlF0aU1hcHBpbmciLCAiTGl0RWxlbWVudCIsICJlbCIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiUXRpTWF0Y2giLCAiX1F0aU1hdGNoIiwgIlF0aUV4cHJlc3Npb24iLCAidmFsdWVzIiwgInZhbHVlVG9NYXAiLCAiY29ycmVjdFZhbHVlSW5mbyIsICJfYSIsICJTY29yaW5nSGVscGVyIiwgImkiLCAiYW5zd2VySW5kZXgiLCAiY29ycmVjdEFuc3dlciIsICJtYXRjaGluZ1ZhbHVlIiwgImFyciIsICJtdiIsICJRdGlNZW1iZXIiLCAiUXRpRXhwcmVzc2lvbiIsICJ2YWx1ZXMiLCAidmFsdWUxIiwgInZhbHVlMiIsICJwcm9qZWN0aW9uMSIsICJRdGlNdWx0aXBsZSIsICJRdGlFeHByZXNzaW9uIiwgInZhcmlhYmxlcyIsICJ2YXJpYWJsZSIsICJodG1sIiwgIlF0aU5vdCIsICJRdGlFeHByZXNzaW9uIiwgImh0bWwiLCAiUXRpT3IiLCAiUXRpQ29uZGl0aW9uRXhwcmVzc2lvbiIsICJjIiwgImNvbmRpdGlvbiIsICJ2YWx1ZSIsICJRdGlPcmRlcmVkIiwgIlF0aUV4cHJlc3Npb24iLCAidmFyaWFibGVzIiwgInZhcmlhYmxlIiwgImNvbnN1bWUiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgInByb3BlcnR5IiwgInN0YXRlIiwgIlF0UHJpbnRlZFZhcmlhYmxlIiwgIkxpdEVsZW1lbnQiLCAiX2EiLCAiX2IiLCAidmFsdWUiLCAidiIsICJodG1sIiwgImFzc2Vzc21lbnRJdGVtIiwgImlkZW50aWZpZXIiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgImNvbnN1bWUiLCAiaXRlbUNvbnRleHQiLCAic3RhdGUiLCAiUXRpUHJvZHVjdCIsICJRdGlFeHByZXNzaW9uIiwgImFjY3VtdWxhdG9yIiwgImN1cnJlbnRWYWx1ZSIsICJlcnJvciIsICJwcm9wZXJ0eSIsICJRdGlTdHJpbmdNYXRjaCIsICJRdGlFeHByZXNzaW9uIiwgInZhbHVlcyIsICJ2YWx1ZTEiLCAidmFsdWUyIiwgInYxIiwgInYyIiwgIlNjb3JpbmdIZWxwZXIiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgIlF0aVN1bSIsICJRdGlFeHByZXNzaW9uIiwgIlF0aVN1bUV4cHJlc3Npb24iLCAiZXhwcmVzc2lvbnMiLCAiYyIsICJ2YWx1ZSIsICJhIiwgImIiLCAiUXRpVmFyaWFibGUiLCAiUXRpRXhwcmVzc2lvbiIsICJpZGVudGlmaWVyIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJzdGF0ZSIsICJRdGlQb3J0YWJsZUN1c3RvbUludGVyYWN0aW9uIiwgIkludGVyYWN0aW9uIiwgInVybCIsICJiYXNlVXJsIiwgInJlcXVpcmVDb25maWciLCAibW9kdWxlQ29uZyIsICJtb2R1bGVJZCIsICJlIiwgInBhdGgiLCAiYmFzZVBhdGgiLCAicCIsICJpbnB1dCIsICJ0b3BMZXZlbEtleSIsICJuZXN0ZWRPYmplY3QiLCAibmVzdGVkS2V5IiwgInZhbHVlIiwgInJlc3BvbnNlIiwgIm5ld1Jlc3BvbnNlIiwgInN0cmluZ2lmaWVkIiwgInZhbCIsICJub2RlIiwgImEiLCAiY29uZmlnIiwgImdldFByb3BlcnR5VmFsdWUiLCAiZWwiLCAicHJvcGVydHkiLCAia2V5IiwgImNoaWxkcmVuIiwgImFsbEtleSIsICJjIiwgImsiLCAiZ2V0Q2hpbGRQcm9wZXJ0aWVzIiwgInByb3BlcnRpZXMiLCAiY2hpbGQiLCAiX19zcHJlYWRWYWx1ZXMiLCAicGNpIiwgInR5cGUiLCAiZG9tIiwgImFjYyIsICJsaW5rIiwgInN0eWxlcyIsICJjdHhBIiwgInJlcXVpcmUiLCAiY29udGV4dCIsICJpbnRlcmFjdGlvbk1vZHVsZXMiLCAibW9kdWxlcyIsICJtb2R1bGUiLCAicHJpbWFyeVBhdGgiLCAiZmFsbGJhY2tQYXRoIiwgInBhdGhzIiwgImV4aXN0aW5nUGF0aCIsICJwYXRoMSIsICJwYXRoMiIsICJwYXRoMUFycmF5IiwgInBhdGgyQXJyYXkiLCAic3RyIiwgImh0bWwiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInN0YXRlIiwgImN1c3RvbUVsZW1lbnQiLCAiTGl0RWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgInN0YXRlIiwgIlRvdWNoRHJhZ0FuZERyb3AiLCAiX1RvdWNoRHJhZ0FuZERyb3AiLCAidHlwZSIsICJ2YWwiLCAiZSIsICJfdG91Y2hlcyIsICJlbGVtZW50U3R5bGVzIiwgInN0eWxlIiwgIl90aGlzIiwgInRhcmdldCIsICJkcmFnZ2FibGVzIiwgImVsIiwgIngiLCAieSIsICJfYSIsICJldmVudCIsICJwb2ludEZyb21Ub3VjaEV2ZW50IiwgImN1c3RvbUVsIiwgInBhZ2UiLCAidG91Y2giLCAiY2xpZW50UmVjdCIsICJldmVudFR5cGUiLCAiYnViYmxlIiwgInByb3BlcnR5IiwgIkRyb3BwYWJsZXNNaXhpbiIsICJzdXBlckNsYXNzIiwgImRyb3BwYWJsZXNJblNoYWRvd1Jvb3QiLCAiZHJvcHBhYmxlc1NlbGVjdG9yIiwgIkRyb3BwYWJsZXNFbGVtZW50IiwgImNoYW5nZWRQcm9wcyIsICJkcm9wcGFibGVzIiwgImQiLCAiZHJvcHBhYmxlIiwgIm11dGF0aW9ucyIsICJtdXRhdGlvbiIsICJfYSIsICJldiIsICJkcmFnZ2FibGVJbkxpZ2h0RG9tIiwgImRyYWdnYWJsZSIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiRmxpcHBhYmxlc01peGluIiwgInN1cGVyQ2xhc3MiLCAiZHJvcHBhYmxlc1NlbCIsICJkcmFnZ2FibGVzU2VsIiwgIkZsaXBwYWJsZXNFbGVtZW50IiwgInByb3BlcnR5IiwgIkRyYWdEcm9wSW50ZXJhY3Rpb25NaXhpbiIsICJzdXBlckNsYXNzIiwgImRyYWdnYWJsZXNTZWxlY3RvciIsICJkcm9wcGFibGVzSW5TaGFkb3dSb290IiwgImRyb3BwYWJsZXNTZWxlY3RvciIsICJEcmFnRHJvcEludGVyYWN0aW9uRWxlbWVudCIsICJGbGlwcGFibGVzTWl4aW4iLCAiRHJvcHBhYmxlc01peGluIiwgImV2IiwgImQiLCAiZHJhZ2dhYmxlIiwgImRyYWdzQWRkZWQiLCAiZHJhZ3NSZW1vdmVkIiwgImVsZW0iLCAib2xkIiwgImRyYWdPcHRpb25zIiwgImRpc2FibGVkIiwgInMiLCAiY2giLCAicmVhZG9ubHkiLCAiY2hhbmdlZFByb3BzIiwgIlRvdWNoRHJhZ0FuZERyb3AiLCAicG9zaXRpb24iLCAiaW5kZXgiLCAiaW50ZXJhY3Rpb24iLCAiZ2FwVGV4dCIsICJzYXZlIiwgImNoaWxkcmVuIiwgImRpc2FibGUiLCAicmVzcG9uc2UiLCAiZHJvcElkIiwgImRyYWdJZHMiLCAiZHJvcHBhYmxlIiwgImRyb3AiLCAiZHJhZ0lkIiwgImFzc29jaWF0aW9ucyIsICJkcmFnc0luRHJvcHBhYmxlIiwgImlkZW50aWZpZXJzIiwgImRyb3BwYWJsZUlkZW50aWZpZXIiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImxpdmVRdWVyeSIsICJwcm9wZXJ0eSIsICJ3YXRjaCIsICJRdGlBc3NvY2lhdGVJbnRlcmFjdGlvbiIsICJEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4iLCAiTGl0RWxlbWVudCIsICJodG1sIiwgIl8iLCAiaW5kZXgiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJzdGF0ZSIsICJjdXN0b21FbGVtZW50IiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJzdGF0ZSIsICJRdGlDdXN0b21JbnRlcmFjdGlvbiIsICJJbnRlcmFjdGlvbiIsICJ1cmlUb01hbmlmZXN0IiwgInJlbW92ZURvdWJsZVNsYXNoZXMiLCAicmVzcG9uc2UiLCAiZGF0YSIsICJlcnIiLCAiaWZyYW1lIiwgImlmcmFtZVdpbiIsICJpZnJhbWVEb2MiLCAiaWZyYW1lc0luU2hhZG93Um9vdCIsICJvdXRlcklGcmFtZXMiLCAiaWZyYW1lU3JjIiwgIm91dGVyRG9jIiwgImUiLCAiaW5kZXgiLCAiaWZyYW1lRG9jdW1lbnQiLCAiaWZyYW1lcyIsICJuZXN0ZWREb2MiLCAidHlwZSIsICJldmVudCIsICJtZWRpYURhdGEiLCAibWVkaWEiLCAidmFsIiwgImh0bWwiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgInN0YXRlIiwgImN1c3RvbUVsZW1lbnQiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgIlF0aUVuZEF0dGVtcHRJbnRlcmFjdGlvbiIsICJJbnRlcmFjdGlvbiIsICJ2YWwiLCAiaHRtbCIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpR2FwTWF0Y2hJbnRlcmFjdGlvbiIsICJEcmFnRHJvcEludGVyYWN0aW9uTWl4aW4iLCAiTGl0RWxlbWVudCIsICJodG1sIiwgInZhbHVlIiwgIm1hdGNoZXMiLCAicmVzcG9uc2UiLCAieCIsICJzcGxpdCIsICJnYXAiLCAiaW5kZXgiLCAiX2EiLCAiX2IiLCAiX2MiLCAiX2QiLCAiaWRlbnRpZmllciIsICJ0ZXh0SWRlbnRpZmllciIsICJ0ZXh0IiwgInRleHRTcGFuIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJzdmciLCAiY3VzdG9tRWxlbWVudCIsICJxdWVyeSIsICJxdWVyeUFzc2lnbmVkRWxlbWVudHMiLCAic3RhdGUiLCAiaWZEZWZpbmVkIiwgInJlcGVhdCIsICJwb3NpdGlvbkhvdHNwb3RzIiwgInNoYXBlIiwgImNvb3Jkc051bWJlciIsICJpbWciLCAiaG90c3BvdCIsICJjZW50ZXJYIiwgImNlbnRlclkiLCAicmFkaXVzIiwgImNlbnRlclhQZXIiLCAiY2VudGVyWVBlciIsICJyYWRpdXNQZXIiLCAibGVmdFgiLCAidG9wWSIsICJyaWdodFgiLCAiYm90dG9tWSIsICJsZWZ0WFBlciIsICJ0b3BZUGVyIiwgInJpZ2h0WFBlciIsICJib3R0b21ZUGVyIiwgInBvbHljb29yZHMiLCAiYWNjIiwgImN1cnJlbnRWYWx1ZSIsICJjdXJyZW50SW5kZXgiLCAicG9seUMiLCAibGFzdFZhbCIsICJwb2ludCIsICJwb2x5RCIsICJwIiwgIlF0aUdyYXBoaWNBc3NvY2lhdGVJbnRlcmFjdGlvbiIsICJJbnRlcmFjdGlvbiIsICJ2YWwiLCAiX2EiLCAiX2IiLCAiX2MiLCAiX2QiLCAiaHRtbCIsICJpZkRlZmluZWQiLCAicmVwZWF0IiwgImxpbmUiLCAiaW5kZXgiLCAic3ZnIiwgImUiLCAiXyIsICJpIiwgImltZyIsICJob3RzcG90IiwgImNvb3JkcyIsICJzaGFwZSIsICJjb29yZHNOdW1iZXIiLCAicyIsICJwb3NpdGlvbkhvdHNwb3RzIiwgImV2ZW50IiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAic3RhdGUiLCAicXVlcnkiLCAicXVlcnlBc3NpZ25lZEVsZW1lbnRzIiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgIlF0aUdyYXBoaWNHYXBNYXRjaEludGVyYWN0aW9uIiwgIkRyYWdEcm9wSW50ZXJhY3Rpb25NaXhpbiIsICJMaXRFbGVtZW50IiwgImh0bWwiLCAiZSIsICJpbWciLCAiaG90c3BvdCIsICJjb29yZHMiLCAic2hhcGUiLCAiY29vcmRzTnVtYmVyIiwgInMiLCAiY2VudGVyWCIsICJjZW50ZXJZIiwgInJhZGl1cyIsICJsZWZ0WCIsICJ0b3BZIiwgInJpZ2h0WCIsICJib3R0b21ZIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgIlF0aUdyYXBoaWNPcmRlckludGVyYWN0aW9uIiwgIkNob2ljZXMiLCAiaHRtbCIsICJlIiwgImlkZW50aWZpZXIiLCAiaG90c3BvdCIsICJlbCIsICJtYXhTZWxlY3Rpb24iLCAiaSIsICJpbWciLCAiY29vcmRzIiwgInNoYXBlIiwgImNvb3Jkc051bWJlciIsICJzIiwgInBvc2l0aW9uSG90c3BvdHMiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgImNzcyIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpSG90c3BvdEludGVyYWN0aW9uIiwgIkNob2ljZXMiLCAiaHRtbCIsICJlIiwgImltZyIsICJob3RzcG90IiwgImNvb3JkcyIsICJzaGFwZSIsICJjb29yZHNOdW1iZXIiLCAicyIsICJwb3NpdGlvbkhvdHNwb3RzIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJMaXRFbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAic3RhdGUiLCAidW5zYWZlSFRNTCIsICJodG1sIiwgIkxpdEVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJRdGlTaW1wbGVBc3NvY2lhYmxlQ2hvaWNlIiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiY3VzdG9tRWxlbWVudCIsICJRdGlNYXRjaEludGVyYWN0aW9uIiwgIkRyYWdEcm9wSW50ZXJhY3Rpb25NaXhpbiIsICJMaXRFbGVtZW50IiwgInJhZGlvIiwgImNoZWNrYm94IiwgInZhbHVlIiwgIm5hbWUiLCAidHlwZSIsICJ2IiwgInJlc3BvbnNlVmFsdWUiLCAiaHRtbCIsICJjb2wiLCAiaSIsICJ1bnNhZmVIVE1MIiwgInJvdyIsICJySW5kZXgiLCAiY0luZGV4IiwgInJvd0lkIiwgImNvbElkIiwgInNlbGVjdGVkSW5Sb3dDb3VudCIsICJjaGVja2VkIiwgInBhcnQiLCAiZGlzYWJsZSIsICJlIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAic3RhdGUiLCAicHJvcGVydHkiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgIlF0aU1lZGlhSW50ZXJhY3Rpb24iLCAiSW50ZXJhY3Rpb24iLCAidmFsIiwgIl9fc3ByZWFkUHJvcHMiLCAiX19zcHJlYWRWYWx1ZXMiLCAiaHRtbCIsICJtZWRpYU9iamVjdCIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgInByb3BlcnR5IiwgInN0YXRlIiwgInVuc2FmZUhUTUwiLCAiU2h1ZmZsZU1peGluIiwgInN1cGVyQ2xhc3MiLCAic2VsZWN0b3IiLCAiU2h1ZmZsZUVsZW1lbnQiLCAiX2NoYW5nZWRQcm9wZXJ0aWVzIiwgInZhbHVlIiwgIm9sZFZhbHVlIiwgImNob2ljZXMiLCAiZml4ZWRFbGVtZW50cyIsICJub25GaXhlZEVsZW1lbnRzIiwgImNob2ljZSIsICJpbmRleCIsICJpIiwgImoiLCAib3JkZXIiLCAibm9uRml4ZWRDaG9pY2UiLCAiUXRpT3JkZXJJbnRlcmFjdGlvbiIsICJTaHVmZmxlTWl4aW4iLCAiRHJhZ0Ryb3BJbnRlcmFjdGlvbk1peGluIiwgIkxpdEVsZW1lbnQiLCAiY2hvaWNlcyIsICJodG1sIiwgIl8iLCAiaSIsICJ1bnNhZmVIVE1MIiwgInZhbHVlIiwgInJlc3BvbnNlIiwgImluZGV4IiwgInNpbXBsZUNob2ljZSIsICJ0ZXh0IiwgImRyb3BwYWJsZSIsICJkcmFnc0luRHJvcHBhYmxlIiwgImQiLCAiZWwiLCAiY3NzIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJzdGF0ZSIsICJwcm9wZXJ0eSIsICJjdXN0b21FbGVtZW50IiwgIkxpdEVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiUXRpU1Bvc2l0aW9uT2JqZWN0SW50ZXJhY3Rpb24iLCAiTGl0RWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgIlF0aVBvc2l0aW9uT2JqZWN0U3RhZ2UiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgImV2ZW50IiwgImRlbHRhWCIsICJkZWx0YVkiLCAiYSIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJzdGF0ZSIsICJyZXBlYXQiLCAic3R5bGVNYXAiLCAiUXRpU2VsZWN0UG9pbnRJbnRlcmFjdGlvbiIsICJJbnRlcmFjdGlvbiIsICJodG1sIiwgInJlcGVhdCIsICJwb2ludCIsICJpbmRleCIsICJzdHlsZU1hcCIsICJlIiwgIl8iLCAiaSIsICJ2YWwiLCAiZXZlbnQiLCAieCIsICJ5IiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAic3RhdGUiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiaHRtbCIsICJub3RoaW5nIiwgImN1c3RvbUVsZW1lbnQiLCAicHJvcGVydHkiLCAicXVlcnkiLCAiUXRpU2xpZGVySW50ZXJhY3Rpb24iLCAiSW50ZXJhY3Rpb24iLCAib2xkIiwgImRpc2FibGVkIiwgInJlYWRvbmx5IiwgInZhbHVlIiwgIm15UmVzcG9uc2UiLCAidmFsdWVQZXJjZW50YWdlIiwgImh0bWwiLCAibm90aGluZyIsICJldmVudCIsICJoYW5kbGVUb3VjaE1vdmUiLCAieCIsICJkaWZmWCIsICJoYW5kbGVUb3VjaEVuZCIsICJoYW5kbGVNb3VzZU1vdmUiLCAiaGFuZGxlTW91c2VVcCIsICJ2YWx1ZU5vdyIsICJyb3VuZGVkU3RlcFZhbHVlIiwgIl90b3VjaE1vdmUiLCAiZXZ0IiwgInRvdWNoIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAicXVlcnkiLCAicHJvcGVydHkiLCAid2F0Y2giLCAiY3VzdG9tRWxlbWVudCIsICJjb25zdW1lIiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJjdXN0b21FbGVtZW50IiwgInN0YXRlIiwgIlF0aUN1c3RvbU9wZXJhdG9yIiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJldmVudCIsICJfYSIsICJfYiIsICJfYyIsICJjb21tZW50Tm9kZSIsICJub2RlIiwgImUiLCAiZm4iLCAicmVzcG9uc2VJZGVudGlmaWVyIiwgInYiLCAiaXRlbSIsICJ2YXJpYWJsZUlkZW50aWZpZXIiLCAib3V0Y29tZUlkZW50aWZpZXIiLCAidmFsdWUiLCAicmVzcG9uc2UiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImNvbnN1bWUiLCAiaXRlbUNvbnRleHQiLCAic3RhdGUiLCAiY3VzdG9tRWxlbWVudCIsICJMaXRFbGVtZW50IiwgImNzcyIsICJodG1sIiwgImN1c3RvbUVsZW1lbnQiLCAiUXRpQXNzb2NpYWJsZUhvdHNwb3QiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCIsICJodG1sIiwgIkxpdEVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJRdGlHYXAiLCAiTGl0RWxlbWVudCIsICJodG1sIiwgIl9fZGVjb3JhdGVDbGFzcyIsICJwcm9wZXJ0eSIsICJjdXN0b21FbGVtZW50IiwgIkxpdEVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJRdGlHYXBJbWciLCAiTGl0RWxlbWVudCIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiY3VzdG9tRWxlbWVudCIsICJodG1sIiwgIkxpdEVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJRdGlHYXBUZXh0IiwgIkxpdEVsZW1lbnQiLCAiaHRtbCIsICJfX2RlY29yYXRlQ2xhc3MiLCAicHJvcGVydHkiLCAiY3VzdG9tRWxlbWVudCIsICJjc3MiLCAiY3VzdG9tRWxlbWVudCIsICJwcm9wZXJ0eSIsICJRdGlIb3RzcG90Q2hvaWNlIiwgIlF0aUNob2ljZSIsICJjc3MiLCAiX19kZWNvcmF0ZUNsYXNzIiwgInByb3BlcnR5IiwgImN1c3RvbUVsZW1lbnQiLCAiY3VzdG9tRWxlbWVudCIsICJodG1sIiwgIlF0aUhvdHRleHQiLCAiUXRpQ2hvaWNlIiwgImh0bWwiLCAiX19kZWNvcmF0ZUNsYXNzIiwgImN1c3RvbUVsZW1lbnQiLCAiTGl0RWxlbWVudCIsICJjdXN0b21FbGVtZW50IiwgIlF0aUlubGluZUNob2ljZSIsICJMaXRFbGVtZW50IiwgIl9fZGVjb3JhdGVDbGFzcyIsICJjdXN0b21FbGVtZW50IiwgImN1c3RvbUVsZW1lbnQiLCAiY3NzIiwgImh0bWwiLCAiUXRpU2ltcGxlQ2hvaWNlIiwgIlF0aUNob2ljZSIsICJodG1sIiwgImNzcyIsICJfX2RlY29yYXRlQ2xhc3MiLCAiY3VzdG9tRWxlbWVudCJdCn0K