@getopenpay/openpay-js 0.1.10-alpha.83dddf0 → 0.1.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.es.js +2 -2
- package/dist/index.umd.js +2 -2
- package/package.json +1 -1
package/dist/index.umd.js
CHANGED
|
@@ -17,5 +17,5 @@ ${n.message}`),n.message)}else return K(n.message);if(typeof n=="object")try{ret
|
|
|
17
17
|
Details: got ${n.required_user_actions.length} required user actions`);return Ct.parse(n.required_user_actions[0])},Ae=(n,e,r)=>{const o=n.filter(s=>s.provider===e);if(o.length===0)throw console.error("CPMs list",n),new Error(`No CPMs found with provider '${e}' and processor '${r}'`);if(o.length!==1)throw console.error("CPMs list",n),new Error(`More than one CPM found with provider '${e}' and processor '${r}'`);return o[0]},O={commonCC:{run:vn},stripePR:{init:jn,run:Mn},stripeLink:{init:_n,run:gn}};function Dn(n){return n&&n.__esModule&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n}var $={};Object.defineProperty($,"__esModule",{value:!0}),$.Observable=void 0;const Ie=n=>!!Symbol[n],W=n=>Ie(n)?Symbol[n]:"@@"+n,xn=W("iterator"),Q=W("observable"),Te=W("species");function q(n,e){let r=n[e];if(r!=null){if(typeof r!="function")throw new TypeError(r+" is not a function");return r}}function M(n){let e=n.constructor;return e!==void 0&&(e=e[Te],e===null&&(e=void 0)),e!==void 0?e:V}function Un(n){return n instanceof V}function R(n){R.log?R.log(n):setTimeout(()=>{throw n})}function z(n){Promise.resolve().then(()=>{try{n()}catch(e){R(e)}})}function je(n){let e=n._cleanup;if(e!==void 0&&(n._cleanup=void 0,!!e))try{if(typeof e=="function")e();else{let r=q(e,"unsubscribe");r&&r.call(e)}}catch(r){R(r)}}function X(n){n._observer=void 0,n._queue=void 0,n._state="closed"}function $n(n){let e=n._queue;if(e){n._queue=void 0,n._state="ready";for(let r=0;r<e.length&&(Me(n,e[r].type,e[r].value),n._state!=="closed");++r);}}function Me(n,e,r){n._state="running";let o=n._observer;try{let s=q(o,e);switch(e){case"next":s&&s.call(o,r);break;case"error":if(X(n),s)s.call(o,r);else throw r;break;case"complete":X(n),s&&s.call(o);break}}catch(s){R(s)}n._state==="closed"?je(n):n._state==="running"&&(n._state="ready")}function ee(n,e,r){if(n._state!=="closed"){if(n._state==="buffering"){n._queue.push({type:e,value:r});return}if(n._state!=="ready"){n._state="buffering",n._queue=[{type:e,value:r}],z(()=>$n(n));return}Me(n,e,r)}}class qn{constructor(e,r){this._cleanup=void 0,this._observer=e,this._queue=void 0,this._state="initializing";let o=this,s={get closed(){return o._state==="closed"},next(i){ee(o,"next",i)},error(i){ee(o,"error",i)},complete(){ee(o,"complete")}};try{this._cleanup=r.call(void 0,s)}catch(i){s.error(i)}this._state==="initializing"&&(this._state="ready")}get closed(){return this._state==="closed"}unsubscribe(){this._state!=="closed"&&(X(this),je(this))}}let V=class H{constructor(e){if(!(this instanceof H))throw new TypeError("Observable cannot be called as a function");if(typeof e!="function")throw new TypeError("Observable initializer must be a function");this._subscriber=e}subscribe(e){return(typeof e!="object"||e===null)&&(e={next:e,error:arguments[1],complete:arguments[2]}),new qn(e,this._subscriber)}forEach(e){return new Promise((r,o)=>{if(typeof e!="function"){o(new TypeError(e+" is not a function"));return}function s(){i.unsubscribe(),r()}let i=this.subscribe({next(a){try{e(a,s)}catch(c){o(c),i.unsubscribe()}},error:o,complete:r})})}map(e){if(typeof e!="function")throw new TypeError(e+" is not a function");let r=M(this);return new r(o=>this.subscribe({next(s){try{s=e(s)}catch(i){return o.error(i)}o.next(s)},error(s){o.error(s)},complete(){o.complete()}}))}filter(e){if(typeof e!="function")throw new TypeError(e+" is not a function");let r=M(this);return new r(o=>this.subscribe({next(s){try{if(!e(s))return}catch(i){return o.error(i)}o.next(s)},error(s){o.error(s)},complete(){o.complete()}}))}reduce(e){if(typeof e!="function")throw new TypeError(e+" is not a function");let r=M(this),o=arguments.length>1,s=!1,a=arguments[1];return new r(c=>this.subscribe({next(l){let u=!s;if(s=!0,!u||o)try{a=e(a,l)}catch(p){return c.error(p)}else a=l},error(l){c.error(l)},complete(){if(!s&&!o)return c.error(new TypeError("Cannot reduce an empty sequence"));c.next(a),c.complete()}}))}async all(){let e=[];return await this.forEach(r=>e.push(r)),e}concat(...e){let r=M(this);return new r(o=>{let s,i=0;function a(c){s=c.subscribe({next(l){o.next(l)},error(l){o.error(l)},complete(){i===e.length?(s=void 0,o.complete()):a(r.from(e[i++]))}})}return a(this),()=>{s&&(s.unsubscribe(),s=void 0)}})}flatMap(e){if(typeof e!="function")throw new TypeError(e+" is not a function");let r=M(this);return new r(o=>{let s=[],i=this.subscribe({next(c){if(e)try{c=e(c)}catch(u){return o.error(u)}let l=r.from(c).subscribe({next(u){o.next(u)},error(u){o.error(u)},complete(){let u=s.indexOf(l);u>=0&&s.splice(u,1),a()}});s.push(l)},error(c){o.error(c)},complete(){a()}});function a(){i.closed&&s.length===0&&o.complete()}return()=>{s.forEach(c=>c.unsubscribe()),i.unsubscribe()}})}[Q](){return this}static from(e){let r=typeof this=="function"?this:H;if(e==null)throw new TypeError(e+" is not an object");let o=q(e,Q);if(o){let s=o.call(e);if(Object(s)!==s)throw new TypeError(s+" is not an object");return Un(s)&&s.constructor===r?s:new r(i=>s.subscribe(i))}if(Ie("iterator")&&(o=q(e,xn),o))return new r(s=>{z(()=>{if(!s.closed){for(let i of o.call(e))if(s.next(i),s.closed)return;s.complete()}})});if(Array.isArray(e))return new r(s=>{z(()=>{if(!s.closed){for(let i=0;i<e.length;++i)if(s.next(e[i]),s.closed)return;s.complete()}})});throw new TypeError(e+" is not observable")}static of(...e){let r=typeof this=="function"?this:H;return new r(o=>{z(()=>{if(!o.closed){for(let s=0;s<e.length;++s)if(o.next(e[s]),o.closed)return;o.complete()}})})}static get[Te](){return this}};$.Observable=V,Object.defineProperty(V,Symbol("extensions"),{value:{symbol:Q,hostReportError:R},configurable:!0});var zn=$.Observable;const Vn=Dn(zn),{log__:Hn,err__:Kn}=k("init-flows"),Yn=()=>("ojs_init_results"in window||(window.ojs_init_results={}),window.ojs_init_results),Jn=(n,e)=>{const r={context:n,flowCallbacks:e};return console.log("[OJS] initializing OJS flows..."),{stripePR:Fe("stripePR",O.stripePR.init(r)),stripeLink:Fe("stripeLink",O.stripeLink.init(r))}},Fe=(n,e)=>{const r=new Vn(o=>{o.next({status:"loading"}),e.then(s=>{o.next({status:"loaded",result:s})}).catch(s=>{o.next({status:"error",message:s.message})})});return r.subscribe({next:o=>{Hn(`${n} flow result`,o),Yn()[n]=o},error:o=>{throw Kn(`${n} flow initialization error:
|
|
18
18
|
${JSON.stringify(o)}`),o}}),r},Le={isLoading:!0,isAvailable:!1,startFlow:async()=>{console.warn(`startFlow triggered while payment request is still not ready.
|
|
19
19
|
You can check the ".isLoading" param to know when a payment request is still loading,
|
|
20
|
-
and ".isAvailable" to know if a payment request is available.`)}},Ne={isLoading:!1,isAvailable:!1,startFlow:async()=>{console.error("startFlow triggered when payment request is not available.")}};class Bn{constructor(e){this.formInstance=e,this.config=e.config,this.formId=e.formId,this.eventTargets={},this.nonces=new Set}handleMessage(e){var c;if(!e.source)throw new Error("No source found");if(e.origin!==((c=this.formInstance.config._frameUrl)==null?void 0:c.origin)||typeof e.data=="object"&&e.data.penpal)return;const r=Tt(JSON.parse(e.data));if(!this.validateEvent(r))return;const{elementId:s,payload:i}=r,a=i.type;switch(a){case"LAYOUT":this.handleLayoutEvent(i);break;case"FOCUS":this.handleFocusEvent(s,i.elementType);break;case"BLUR":this.handleBlurEvent(s,i.elementType);break;case"CHANGE":this.handleChangeEvent(s,i.elementType,i.errors);break;case"LOADED":this.handleLoadedEvent(e.source,s,i);break;case"LOAD_ERROR":this.handleLoadErrorEvent(i);break;case"VALIDATION_ERROR":this.handleValidationErrorEvent(i,s);break;default:console.warn("[form] Unhandled event type:",a)}}validateEvent(e){return e.formId!==this.formInstance.formId||!e.elementId?(console.warn("[form] Ignoring unknown event:",e),!1):this.nonces.has(e.nonce)?(console.warn("[form] Ignoring duplicate event:",e),!1):(this.nonces.add(e.nonce),!0)}handleLayoutEvent(e){const r=e.height?`${e.height}px`:"100%";this.formInstance.setFormHeight(r)}handleFocusEvent(e,r){this.config.onFocus&&this.config.onFocus(e,r)}handleBlurEvent(e,r){this.config.onBlur&&this.config.onBlur(e,r)}handleChangeEvent(e,r,o){this.config.onChange&&this.config.onChange(e,r,o)}async handleLoadedEvent(e,r,o){console.log("handleLoadedEvent is deprecated:",e,r,o),this.eventTargets[r]=e,this.formInstance.onCdeLoaded(o),this.config.onLoad&&this.config.onLoad(o.totalAmountAtoms,o.currency)}handleLoadErrorEvent(e){this.formInstance.config.onLoadError&&this.formInstance.config.onLoadError(e.message)}handleValidationErrorEvent(e,r){this.formInstance.config.onValidationError&&this.formInstance.config.onValidationError(e.elementType,e.errors,r)}postEventToFrame(e,r,o){jt(e,this.formId,r,o,this.config.baseUrl)}}async function Zn(n,e){const o=await ne.connectToChild({iframe:n,debug:!1,childOrigin:e}).promise,s=await Mt(o);if(!Ft(o,s))throw new Error("Got invalid CDE connection object");return o}class Gn{constructor(){this.connections=new Map}addConnection(e,r){this.connections.set(e,r)}getConnection(){const e=this.connections.values().next().value;if(!e)throw new Error("Connection not found");return e}getAllConnections(){return this.connections}}const F=class F{constructor(e){this.tryInitOjsFlows=()=>{this.ojsFlowsInitialization===null&&this.cdeLoadedPayload&&this.connectionManager.getAllConnections().size!==0&&(this.ojsFlowsInitialization=Jn(this.createOjsFlowContext(),this.createOjsFlowCallbacks()),this.ojsFlowsInitialization.stripePR.subscribe(r=>this.onStripePRStatusChange(r)))},this.onCdeLoaded=r=>{this.cdeLoadedPayload||(this.cdeLoadedPayload=r,this.tryInitOjsFlows())},this.onStripePRStatusChange=r=>{var o,s,i,a,c,l;if(r.status==="loading")(s=(o=this.config).onPaymentRequestLoad)==null||s.call(o,{apple_pay:Le,google_pay:Le});else if(r.status==="error")(a=(i=this.config).onPaymentRequestLoad)==null||a.call(i,{apple_pay:Ne,google_pay:Ne});else if(r.status==="loaded"){const u=r.result,p=u.isAvailable&&u.availableProviders.applePay,f=u.isAvailable&&u.availableProviders.googlePay;(l=(c=this.config).onPaymentRequestLoad)==null||l.call(c,{apple_pay:{isLoading:!1,isAvailable:p,startFlow:async d=>p?this.submitPaymentRequest("apple_pay",u,d):void 0},google_pay:{isLoading:!1,isAvailable:f,startFlow:async d=>f?this.submitPaymentRequest("google_pay",u,d):void 0}})}},this.submitPaymentRequest=(r,o,s)=>{const i=this.createOjsFlowContext();return O.stripePR.run({context:i,checkoutPaymentMethod:Ae(i.checkoutPaymentMethods,r),nonCdeFormInputs:Y(i.formDiv),flowCallbacks:this.createOjsFlowCallbacks(),customParams:{provider:r,overridePaymentRequest:s==null?void 0:s.overridePaymentRequest},initResult:o})},F.assignAsSingleton(this),this.config={...e,baseUrl:e.baseUrl??"https://cde.getopenpay.com"},this.elements=null,this.formId=`opjs-form-${window.crypto.randomUUID()}`,this.referer=window.location.origin,this.formTarget=e.formTarget??"body",this.formProperties={height:"1px"},this.cdeLoadedPayload=null,this.ojsFlowsInitialization=null,this.checkoutFired=!1,this.connectionManager=new Gn,this.eventHandler=new Bn(this),this.ojsVersion="0.1.10",this.ojsReleaseVersion="0.1.10
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgudW1kLmpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBmYWN0b3J5KGV4cG9ydHMsIHJlcXVpcmUoJ3pvZCcpLCByZXF1aXJlKCd1dWlkJyksIHJlcXVpcmUoJ3BlbnBhbCcpLCByZXF1aXJlKCdjaGFsaycpKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnLCAnem9kJywgJ3V1aWQnLCAncGVucGFsJywgJ2NoYWxrJ10sIGZhY3RvcnkpIDpcbiAgKGdsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiBnbG9iYWwgfHwgc2VsZiwgZmFjdG9yeShnbG9iYWwuT3BlblBheSA9IHt9LCBnbG9iYWwuem9kLCBnbG9iYWwudXVpZCwgZ2xvYmFsLnBlbnBhbCwgZ2xvYmFsLmNoYWxrKSk7XG59KSh0aGlzLCAoZnVuY3Rpb24gKGV4cG9ydHMsIHpvZCwgdXVpZCwgcGVucGFsLCBjaGFsaykgeyAndXNlIHN0cmljdCc7XG5cbiAgY29uc3QgRlJBTUVfQkFTRV9VUkwgPSBcImh0dHBzOi8vY2RlLmdldG9wZW5wYXkuY29tXCI7XG5cbiAgY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSA9IHpvZC56Lm9iamVjdCh7XG4gICAgdHlwZTogem9kLnouc3RyaW5nKCksXG4gICAgbG9jOiB6b2Quei5hcnJheSh6b2Quei5zdHJpbmcoKSksXG4gICAgbXNnOiB6b2Quei5zdHJpbmcoKSxcbiAgICB1cmw6IHpvZC56LnN0cmluZygpXG4gIH0pO1xuICBjb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvclJlc3BvbnNlID0gem9kLnouYXJyYXkoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSk7XG4gIGNvbnN0IFpvZEZpZWxkRXJyb3IgPSB6b2Quei5vYmplY3Qoe1xuICAgIGNvZGU6IHpvZC56LnN0cmluZygpLFxuICAgIG1lc3NhZ2U6IHpvZC56LnN0cmluZygpLFxuICAgIHBhdGg6IHpvZC56LmFycmF5KHpvZC56LnN0cmluZygpKVxuICB9KTtcbiAgY29uc3QgWm9kRmllbGRFcnJvcnMgPSB6b2Quei5hcnJheShab2RGaWVsZEVycm9yKTtcbiAgY29uc3QgTUFQX1RPX0hVTUFOX0ZSSUVORExZX0xPV0VSQ0FTRSA9IHtcbiAgICBcImZhaWxlZCB0byBmZXRjaFwiOiBgQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluYFxuICB9O1xuICBjb25zdCBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZSA9IChvZ0Vycm9yTWVzc2FnZSkgPT4ge1xuICAgIGNvbnN0IGtleSA9IG9nRXJyb3JNZXNzYWdlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIHJldHVybiBNQVBfVE9fSFVNQU5fRlJJRU5ETFlfTE9XRVJDQVNFW2tleV0gPz8gb2dFcnJvck1lc3NhZ2U7XG4gIH07XG4gIGNvbnN0IGlzU3RyaW5naWZpZWRKc29uT2JqZWN0ID0gKHN0cikgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHN0cik7XG4gICAgICByZXR1cm4gdHlwZW9mIHBhcnNlZCA9PT0gXCJvYmplY3RcIjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9O1xuICBjb25zdCBjcmVhdGVNZXNzYWdlRnJvbVB5ZGFudGljVmFsaWRhdGlvbkVycm9yID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKHJlc3BvbnNlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIGdldEh1bWFuRnJpZW5kbHlNZXNzYWdlKHJlc3BvbnNlWzBdLm1zZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGJ1bGxldGVkID0gcmVzcG9uc2UubWFwKChlcnIpID0+IGDigKIgJHtnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlcnIubXNnKX1gKS5qb2luKFwiXFxuXCIpO1xuICAgICAgcmV0dXJuIGAke2BQbGVhc2UgZml4IHRoZSBmb2xsb3dpbmcgZXJyb3JzOmB9XG4ke2J1bGxldGVkfWA7XG4gICAgfVxuICB9O1xuICBjb25zdCBjcmVhdGVNZXNzYWdlRnJvbVpvZEZpZWxkRXJyb3JzID0gKGVycm9ycykgPT4ge1xuICAgIGNvbnN0IGxpc3RPZkVycm9ycyA9IGVycm9ycy5tYXAoKGVycikgPT4gYC0gJHtlcnIucGF0aC5qb2luKFwiL1wiKX06ICR7ZXJyLm1lc3NhZ2V9YCkuam9pbihcIlxcblwiKTtcbiAgICByZXR1cm4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHtsaXN0T2ZFcnJvcnN9YDtcbiAgfTtcbiAgY29uc3QgZ2V0RXJyb3JNZXNzYWdlID0gKGUpID0+IHtcbiAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBpZiAoaXNTdHJpbmdpZmllZEpzb25PYmplY3QoZS5tZXNzYWdlKSkge1xuICAgICAgICBjb25zdCBvYmogPSBKU09OLnBhcnNlKGUubWVzc2FnZSk7XG4gICAgICAgIGlmIChQeWRhbnRpY1ZhbGlkYXRpb25FcnJvclJlc3BvbnNlLnNhZmVQYXJzZShvYmopLnN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlTWVzc2FnZUZyb21QeWRhbnRpY1ZhbGlkYXRpb25FcnJvcihvYmopO1xuICAgICAgICB9IGVsc2UgaWYgKFpvZEZpZWxkRXJyb3JzLnNhZmVQYXJzZShvYmopLnN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyhvYmopO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUud2FybihgRW5jb3VudGVyZWQgdW5rbm93biBzdHJpbmdpZmllZCBKU09OIG9iamVjdDpcbiR7ZS5tZXNzYWdlfWApO1xuICAgICAgICAgIHJldHVybiBlLm1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlLm1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodHlwZW9mIGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShlKTtcbiAgICAgIH0gY2F0Y2ggKGUyKSB7XG4gICAgICAgIHJldHVybiBlMiArIFwiXCI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBlICsgXCJcIjtcbiAgICB9XG4gIH07XG4gIGNvbnN0IG1ha2VDYWxsYmFja1NhZmUgPSAoY2FsbGJhY2tOYW1lLCBmbikgPT4ge1xuICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGZuKC4uLmFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgW2Zvcm1dIEVycm9yIHJ1bm5pbmcgY2FsbGJhY2sgKCR7Y2FsbGJhY2tOYW1lfSk6YCwgZXJyb3IpO1xuICAgICAgICByZXR1cm4gdm9pZCAwO1xuICAgICAgfVxuICAgIH07XG4gIH07XG5cbiAgY29uc3QgUmVxdWlyZWRTdHJpbmcgPSB6b2Quei5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG4gIGNvbnN0IE9wdGlvbmFsU3RyaW5nID0gem9kLnouc3RyaW5nKCkudHJpbSgpLm9wdGlvbmFsKCk7XG4gIGNvbnN0IG51bGxPclVuZGVmT3IkMSA9ICh6VHlwZSkgPT4gem9kLnoubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG4gIHZhciBGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChGaWVsZE5hbWUyKSA9PiB7XG4gICAgRmllbGROYW1lMltcIkZJUlNUX05BTUVcIl0gPSBcImZpcnN0TmFtZVwiO1xuICAgIEZpZWxkTmFtZTJbXCJMQVNUX05BTUVcIl0gPSBcImxhc3ROYW1lXCI7XG4gICAgRmllbGROYW1lMltcIkVNQUlMXCJdID0gXCJlbWFpbFwiO1xuICAgIEZpZWxkTmFtZTJbXCJaSVBfQ09ERVwiXSA9IFwiemlwQ29kZVwiO1xuICAgIEZpZWxkTmFtZTJbXCJDSVRZXCJdID0gXCJjaXR5XCI7XG4gICAgRmllbGROYW1lMltcIlNUQVRFXCJdID0gXCJzdGF0ZVwiO1xuICAgIEZpZWxkTmFtZTJbXCJDT1VOVFJZXCJdID0gXCJjb3VudHJ5XCI7XG4gICAgRmllbGROYW1lMltcIkFERFJFU1NcIl0gPSBcImFkZHJlc3NcIjtcbiAgICBGaWVsZE5hbWUyW1wiUEhPTkVcIl0gPSBcInBob25lXCI7XG4gICAgRmllbGROYW1lMltcIlBST01PVElPTl9DT0RFXCJdID0gXCJwcm9tb3Rpb25Db2RlXCI7XG4gICAgcmV0dXJuIEZpZWxkTmFtZTI7XG4gIH0pKEZpZWxkTmFtZSB8fCB7fSk7XG4gIGNvbnN0IEZpZWxkTmFtZUVudW0gPSB6b2Quei5uYXRpdmVFbnVtKEZpZWxkTmFtZSk7XG4gIHZhciBQcml2YXRlRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoUHJpdmF0ZUZpZWxkTmFtZTIpID0+IHtcbiAgICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfTlVNQkVSXCJdID0gXCJjYXJkTnVtYmVyXCI7XG4gICAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZEV4cGlyeVwiO1xuICAgIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmRDdmNcIjtcbiAgICByZXR1cm4gUHJpdmF0ZUZpZWxkTmFtZTI7XG4gIH0pKFByaXZhdGVGaWVsZE5hbWUgfHwge30pO1xuICBjb25zdCBQcml2YXRlRmllbGROYW1lRW51bSA9IHpvZC56Lm5hdGl2ZUVudW0oUHJpdmF0ZUZpZWxkTmFtZSk7XG4gIGNvbnN0IEFsbEZpZWxkTmFtZXMgPSB6b2Quei51bmlvbihbRmllbGROYW1lRW51bSwgUHJpdmF0ZUZpZWxkTmFtZUVudW1dKTtcbiAgdmFyIEVsZW1lbnRUeXBlRW51bSA9IC8qIEBfX1BVUkVfXyAqLyAoKEVsZW1lbnRUeXBlRW51bTIpID0+IHtcbiAgICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRFwiXSA9IFwiY2FyZFwiO1xuICAgIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZC1udW1iZXJcIjtcbiAgICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9FWFBJUllcIl0gPSBcImNhcmQtZXhwaXJ5XCI7XG4gICAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkLWN2Y1wiO1xuICAgIHJldHVybiBFbGVtZW50VHlwZUVudW0yO1xuICB9KShFbGVtZW50VHlwZUVudW0gfHwge30pO1xuICBjb25zdCBFbGVtZW50VHlwZSA9IHpvZC56Lm5hdGl2ZUVudW0oRWxlbWVudFR5cGVFbnVtKTtcbiAgY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEgPSB6b2Quei5vYmplY3Qoe1xuICAgIHByb3ZpZGVyOiB6b2Quei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPciQxKHpvZC56LnN0cmluZygpKSxcbiAgICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHpvZC56LnJlY29yZCh6b2Quei5zdHJpbmcoKSwgem9kLnouYW55KCkpKVxuICB9KTtcbiAgY29uc3QgUGF5bWVudE1ldGhvZE1pbmltYWwgPSB6b2Quei5vYmplY3Qoe1xuICAgIGlkOiB6b2Quei5zdHJpbmcoKVxuICB9KTtcbiAgem9kLnoub2JqZWN0KHtcbiAgICBjYXJkTnVtYmVyOiBPcHRpb25hbFN0cmluZyxcbiAgICBleHBpcnk6IE9wdGlvbmFsU3RyaW5nLFxuICAgIGN2YzogT3B0aW9uYWxTdHJpbmdcbiAgfSk7XG4gIHpvZC56Lm9iamVjdCh7XG4gICAgYmFja2dyb3VuZENvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgICBjb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gICAgZm9udEZhbWlseTogT3B0aW9uYWxTdHJpbmcsXG4gICAgZm9udFNpemU6IE9wdGlvbmFsU3RyaW5nLFxuICAgIGZvbnRXZWlnaHQ6IE9wdGlvbmFsU3RyaW5nLFxuICAgIG1hcmdpbjogT3B0aW9uYWxTdHJpbmcsXG4gICAgcGFkZGluZzogT3B0aW9uYWxTdHJpbmcsXG4gICAgbGV0dGVyU3BhY2luZzogT3B0aW9uYWxTdHJpbmcsXG4gICAgbGluZUhlaWdodDogT3B0aW9uYWxTdHJpbmdcbiAgfSk7XG4gIGNvbnN0IEV2ZW50VHlwZSA9IHpvZC56LmVudW0oW1xuICAgIC8vIEVsZW1lbnQgLT4gRm9ybVxuICAgIFwiTEFZT1VUXCIsXG4gICAgXCJMT0FERURcIixcbiAgICBcIkJMVVJcIixcbiAgICBcIkZPQ1VTXCIsXG4gICAgXCJDSEFOR0VcIixcbiAgICBcIlRPS0VOSVpFX1NUQVJURURcIixcbiAgICBcIkNIRUNLT1VUX1NUQVJURURcIixcbiAgICBcIlBBWU1FTlRfRkxPV19TVEFSVEVEXCIsXG4gICAgXCJUT0tFTklaRV9TVUNDRVNTXCIsXG4gICAgXCJDSEVDS09VVF9TVUNDRVNTXCIsXG4gICAgXCJMT0FEX0VSUk9SXCIsXG4gICAgXCJWQUxJREFUSU9OX0VSUk9SXCIsXG4gICAgXCJUT0tFTklaRV9FUlJPUlwiLFxuICAgIFwiQ0hFQ0tPVVRfRVJST1JcIixcbiAgICBcIlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1NcIixcbiAgICAvLyBGb3JtIC0+IEVsZW1lbnRcbiAgICBcIlRPS0VOSVpFXCIsXG4gICAgXCJDSEVDS09VVFwiLFxuICAgIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJcbiAgXSk7XG4gIGNvbnN0IEdlbmVyaWNFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRV9TVEFSVEVEXCIsIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiXSk7XG4gIGNvbnN0IEdlbmVyaWNFdmVudFBheWxvYWQgPSB6b2Quei5vYmplY3QoeyB0eXBlOiBHZW5lcmljRXZlbnRUeXBlIH0pO1xuICBjb25zdCBJbnB1dEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkJMVVJcIiwgXCJGT0NVU1wiLCBcIkNIQU5HRVwiXSk7XG4gIGNvbnN0IElucHV0RXZlbnRQYXlsb2FkID0gem9kLnoub2JqZWN0KHtcbiAgICB0eXBlOiBJbnB1dEV2ZW50VHlwZSxcbiAgICBlbGVtZW50VHlwZTogUHJpdmF0ZUZpZWxkTmFtZUVudW0sXG4gICAgZXJyb3JzOiB6b2Quei5hcnJheSh6b2Quei5zdHJpbmcoKSkub3B0aW9uYWwoKVxuICB9KTtcbiAgY29uc3QgRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJMT0FEX0VSUk9SXCIsIFwiVE9LRU5JWkVfRVJST1JcIiwgXCJDSEVDS09VVF9FUlJPUlwiXSk7XG4gIGNvbnN0IEVycm9yRXZlbnRQYXlsb2FkID0gem9kLnoub2JqZWN0KHtcbiAgICB0eXBlOiBFcnJvckV2ZW50VHlwZSxcbiAgICBtZXNzYWdlOiBSZXF1aXJlZFN0cmluZyxcbiAgICBoZWFkZXJzOiB6b2Quei5yZWNvcmQoem9kLnouc3RyaW5nKCksIHpvZC56LnN0cmluZygpKS5vcHRpb25hbCgpXG4gIH0pO1xuICBjb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJWQUxJREFUSU9OX0VSUk9SXCJdKTtcbiAgY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkID0gem9kLnoub2JqZWN0KHtcbiAgICB0eXBlOiBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUsXG4gICAgZWxlbWVudFR5cGU6IEFsbEZpZWxkTmFtZXMsXG4gICAgZXJyb3JzOiB6b2Quei5hcnJheSh6b2Quei5zdHJpbmcoKSlcbiAgfSk7XG4gIGNvbnN0IExheW91dEV2ZW50UGF5bG9hZCA9IHpvZC56Lm9iamVjdCh7XG4gICAgdHlwZTogem9kLnoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MQVlPVVQpLFxuICAgIGhlaWdodDogUmVxdWlyZWRTdHJpbmdcbiAgfSk7XG4gIGNvbnN0IExvYWRlZEV2ZW50UGF5bG9hZCA9IHpvZC56Lm9iamVjdCh7XG4gICAgdHlwZTogem9kLnoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MT0FERUQpLFxuICAgIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gICAgdG90YWxBbW91bnRBdG9tczogem9kLnoubnVtYmVyKCksXG4gICAgY3VycmVuY3k6IE9wdGlvbmFsU3RyaW5nLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHpvZC56LmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZCQxKVxuICB9KTtcbiAgY29uc3QgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkID0gem9kLnoub2JqZWN0KHtcbiAgICB0eXBlOiB6b2Quei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlBBWU1FTlRfRkxPV19TVEFSVEVEKSxcbiAgICBuZXh0QWN0aW9uTWV0YWRhdGE6IHpvZC56LnJlY29yZCh6b2Quei5zdHJpbmcoKSwgem9kLnouYW55KCkpLFxuICAgIHBheW1lbnRGbG93TWV0YWRhdGE6IHpvZC56LmFueSgpLm9wdGlvbmFsKCksXG4gICAgc3RhcnRQRk1ldGFkYXRhOiB6b2Quei5vcHRpb25hbCh6b2Quei5yZWNvcmQoem9kLnouc3RyaW5nKCksIHpvZC56LmFueSgpKSlcbiAgfSk7XG4gIGNvbnN0IFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0gem9kLnoub2JqZWN0KHtcbiAgICB0eXBlOiB6b2Quei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1MpLFxuICAgIHBheW1lbnRNZXRob2RJZDogem9kLnouc3RyaW5nKClcbiAgfSk7XG4gIGNvbnN0IFJlcXVpcmVkRm9ybUZpZWxkcyA9IHpvZC56Lm9iamVjdCh7XG4gICAgW1wiZmlyc3ROYW1lXCIgLyogRklSU1RfTkFNRSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICAgIFtcImxhc3ROYW1lXCIgLyogTEFTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gICAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLFxuICAgIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICAgIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gICAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmdcbiAgfSk7XG4gIGNvbnN0IFBSRm9ybUZpZWxkcyA9IHpvZC56Lm9iamVjdCh7XG4gICAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLFxuICAgIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICAgIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gICAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmdcbiAgfSk7XG4gIGNvbnN0IFN1Ym1pdEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFXCIsIFwiQ0hFQ0tPVVRcIiwgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIl0pO1xuICBjb25zdCBTdWJtaXRFdmVudFBheWxvYWQgPSB6b2Quei5vYmplY3Qoe1xuICAgIHR5cGU6IFN1Ym1pdEV2ZW50VHlwZSxcbiAgICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gICAgcGF5bWVudEZsb3dNZXRhZGF0YTogem9kLnouYW55KCkub3B0aW9uYWwoKSxcbiAgICBkb05vdFVzZUxlZ2FjeUNDRmxvdzogem9kLnouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gICAgZXhpc3RpbmdDQ1BNSWQ6IE9wdGlvbmFsU3RyaW5nXG4gIH0pLmV4dGVuZChSZXF1aXJlZEZvcm1GaWVsZHMuc2hhcGUpO1xuICBjb25zdCBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6b2Quei5vYmplY3Qoe1xuICAgIHR5cGU6IHpvZC56LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uVE9LRU5JWkVfU1VDQ0VTUyksXG4gICAgaXNSZWFkeUZvckNoZWNrb3V0OiB6b2Quei5ib29sZWFuKClcbiAgfSk7XG4gIGNvbnN0IENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHpvZC56Lm9iamVjdCh7XG4gICAgdHlwZTogem9kLnoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5DSEVDS09VVF9TVUNDRVNTKSxcbiAgICBpbnZvaWNlVXJsczogem9kLnouYXJyYXkoem9kLnouc3RyaW5nKCkpLFxuICAgIHN1YnNjcmlwdGlvbklkczogem9kLnouYXJyYXkoem9kLnouc3RyaW5nKCkpLFxuICAgIGN1c3RvbWVySWQ6IHpvZC56LnN0cmluZygpXG4gIH0pO1xuICBjb25zdCBFdmVudFBheWxvYWQgPSB6b2Quei5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgICBHZW5lcmljRXZlbnRQYXlsb2FkLFxuICAgIElucHV0RXZlbnRQYXlsb2FkLFxuICAgIEVycm9yRXZlbnRQYXlsb2FkLFxuICAgIFZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCxcbiAgICBMYXlvdXRFdmVudFBheWxvYWQsXG4gICAgTG9hZGVkRXZlbnRQYXlsb2FkLFxuICAgIFN1Ym1pdEV2ZW50UGF5bG9hZCxcbiAgICBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gICAgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICAgIFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCxcbiAgICBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZFxuICBdKTtcbiAgY29uc3QgRWxlbWVudEV2ZW50ID0gem9kLnoub2JqZWN0KHtcbiAgICBwYXlsb2FkOiBFdmVudFBheWxvYWQsXG4gICAgbm9uY2U6IFJlcXVpcmVkU3RyaW5nLFxuICAgIGZvcm1JZDogUmVxdWlyZWRTdHJpbmcsXG4gICAgZWxlbWVudElkOiBSZXF1aXJlZFN0cmluZ1xuICB9KTtcbiAgem9kLnoub2JqZWN0KHtcbiAgICBhbW91bnRBdG9tOiB6b2Quei5udW1iZXIoKSxcbiAgICBjdXJyZW5jeTogUmVxdWlyZWRTdHJpbmdcbiAgfSk7XG4gIHpvZC56Lm9iamVjdCh7XG4gICAgc2VjdXJlX3Rva2VuOiB6b2Quei5zdHJpbmcoKSxcbiAgICBwcm9tb3Rpb25fY29kZTogem9kLnouc3RyaW5nKCkub3B0aW9uYWwoKVxuICB9KTtcbiAgem9kLnoub2JqZWN0KHtcbiAgICBzZWN1cmVfdG9rZW46IHpvZC56LnN0cmluZygpLFxuICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoem9kLnouc3RyaW5nKCkpXG4gIH0pO1xuICBjb25zdCBDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSA9IHpvZC56Lm9iamVjdCh7XG4gICAgcGF5bWVudF9tZXRob2RzOiB6b2Quei5hcnJheShQYXltZW50TWV0aG9kTWluaW1hbClcbiAgfSk7XG4gIGNvbnN0IEZpZWxkVmFsaWRhdGlvbkVycm9yID0gem9kLnoub2JqZWN0KHtcbiAgICBlbGVtZW50VHlwZTogem9kLnouc3RyaW5nKCksXG4gICAgZXJyb3JzOiB6b2Quei5hcnJheSh6b2Quei5zdHJpbmcoKSlcbiAgfSk7XG4gIHpvZC56Lm9iamVjdCh7XG4gICAgc2Vzc2lvbl9pZDogem9kLnouc3RyaW5nKClcbiAgfSk7XG4gIGNvbnN0IFRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UgPSB6b2Quei5vYmplY3Qoe1xuICAgIHN1Y2Nlc3M6IHpvZC56LmxpdGVyYWwoZmFsc2UpLFxuICAgIGVycm9yX3R5cGU6IHpvZC56LmxpdGVyYWwoXCJ2YWxpZGF0aW9uX2Vycm9yXCIpLFxuICAgIGVycm9yczogem9kLnouYXJyYXkoRmllbGRWYWxpZGF0aW9uRXJyb3IpXG4gIH0pO1xuICBjb25zdCBUb2tlbml6ZUNhcmRSZXNwb25zZSA9IHpvZC56LmRpc2NyaW1pbmF0ZWRVbmlvbihcInN1Y2Nlc3NcIiwgW1xuICAgIHpvZC56Lm9iamVjdCh7IHN1Y2Nlc3M6IHpvZC56LmxpdGVyYWwodHJ1ZSkgfSksXG4gICAgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZVxuICBdKTtcbiAgem9kLnoub2JqZWN0KHtcbiAgICBzZXNzaW9uX2lkOiB6b2Quei5zdHJpbmcoKSxcbiAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gICAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICAgIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHpvZC56LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoem9kLnouc3RyaW5nKCkpXG4gIH0pO1xuICB6b2Quei5vYmplY3Qoe1xuICAgIHNlc3Npb25faWQ6IHpvZC56LnN0cmluZygpLFxuICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHNcbiAgfSk7XG4gIHZhciBUaHJlZURTU3RhdHVzID0gLyogQF9fUFVSRV9fICovICgoVGhyZWVEU1N0YXR1czIpID0+IHtcbiAgICBUaHJlZURTU3RhdHVzMltcIlNVQ0NFU1NcIl0gPSBcInN1Y2Nlc3NcIjtcbiAgICBUaHJlZURTU3RhdHVzMltcIkZBSUxVUkVcIl0gPSBcImZhaWx1cmVcIjtcbiAgICBUaHJlZURTU3RhdHVzMltcIkNBTkNFTExFRFwiXSA9IFwiY2FuY2VsbGVkXCI7XG4gICAgcmV0dXJuIFRocmVlRFNTdGF0dXMyO1xuICB9KShUaHJlZURTU3RhdHVzIHx8IHt9KTtcbiAgY29uc3QgUGluZzNEU1N0YXR1c1Jlc3BvbnNlID0gem9kLnoub2JqZWN0KHtcbiAgICBzdGF0dXM6IHpvZC56LmVudW0oW1wic3VjY2Vzc1wiIC8qIFNVQ0NFU1MgKi8sIFwiZmFpbHVyZVwiIC8qIEZBSUxVUkUgKi8sIFwiY2FuY2VsbGVkXCIgLyogQ0FOQ0VMTEVEICovXSlcbiAgfSk7XG4gIGNvbnN0IENvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YSA9IHpvZC56Lm9iamVjdCh7XG4gICAgdHlwZTogem9kLnouc3RyaW5nKCksXG4gICAgcmVkaXJlY3RfdXJsOiB6b2Quei5zdHJpbmcoKSxcbiAgICBpbml0aWFsX2ludGVudF9pZDogem9kLnouc3RyaW5nKCksXG4gICAgY29uc2VudF9pZDogem9kLnouc3RyaW5nKClcbiAgfSk7XG5cbiAgY29uc3QgZXh0cmFjdElzc3Vlc1BlckZpZWxkID0gKGVycm9yKSA9PiB7XG4gICAgY29uc3QgaXNzdWVzUGVyRmllbGQgPSB7fTtcbiAgICBPYmplY3QuZW50cmllcyhlcnJvcikuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSBGaWVsZE5hbWVFbnVtLnBhcnNlKGtleSk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIGlzc3Vlc1BlckZpZWxkW2ZpZWxkTmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlLl9lcnJvcnMpKSB7XG4gICAgICAgICAgaXNzdWVzUGVyRmllbGRbZmllbGROYW1lXSA9IHZhbHVlLl9lcnJvcnM7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGlzc3Vlc1BlckZpZWxkO1xuICB9O1xuXG4gIGNvbnN0IFN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YSA9IHpvZC56Lm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6b2Quei5zdHJpbmcoKSxcbiAgICBjbGllbnRfc2VjcmV0OiB6b2Quei5zdHJpbmcoKSxcbiAgICBzdHJpcGVfcG1faWQ6IHpvZC56LnN0cmluZygpXG4gIH0pO1xuICBjb25zdCBQYXltZW50UmVxdWVzdE5leHRBY3Rpb25NZXRhZGF0YSA9IHpvZC56Lm9iamVjdCh7XG4gICAgdHlwZTogem9kLnouc3RyaW5nKCksXG4gICAgY2xpZW50X3NlY3JldDogem9kLnouc3RyaW5nKCksXG4gICAgc3RyaXBlX3BrOiB6b2Quei5zdHJpbmcoKVxuICB9KTtcbiAgY29uc3Qgb3VyQ3VycmVuY3lUb1RoZWlycyA9IHtcbiAgICB1c2Q6IFwidXNkXCIsXG4gICAgYnJsOiBcImJybFwiXG4gIH07XG4gIGNvbnN0IGdldExvYWRlZFN0cmlwZSA9IGFzeW5jIChwdWJsaXNoYWJsZUtleSkgPT4ge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgICAgaWYgKCFpc1N0cmlwZUpzUHJlc2VudCgpKSB7XG4gICAgICAgIGF3YWl0IHNsZWVwKDUwMCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghaXNTdHJpcGVKc1ByZXNlbnQoKSkge1xuICAgICAgY29uc29sZS5sb2coXCJTdHJpcGUgSlMgbm90IGZvdW5kLlwiKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU3RyaXBlIEpTIG5vdCBmb3VuZC5gKTtcbiAgICB9XG4gICAgY29uc3Qgc3RyaXBlID0gbmV3IFN0cmlwZShwdWJsaXNoYWJsZUtleSk7XG4gICAgcmV0dXJuIHN0cmlwZTtcbiAgfTtcbiAgY29uc3QgY3JlYXRlU3RyaXBlRWxlbWVudHMgPSBhc3luYyAoc3RyaXBlUHViS2V5LCBlbGVtZW50c09wdGlvbnMpID0+IHtcbiAgICBjb25zdCBzdHJpcGUgPSBhd2FpdCBnZXRMb2FkZWRTdHJpcGUoc3RyaXBlUHViS2V5KTtcbiAgICByZXR1cm4ge1xuICAgICAgZWxlbWVudHM6IHN0cmlwZS5lbGVtZW50cyhlbGVtZW50c09wdGlvbnMpLFxuICAgICAgc3RyaXBlXG4gICAgfTtcbiAgfTtcbiAgY29uc3QgY3JlYXRlU3RyaXBlUGF5bWVudFJlcXVlc3QgPSBhc3luYyAoc3RyaXBlUHViS2V5LCB0b3RhbEFtb3VudEF0b20sIGN1cnJlbmN5LCBpc0Ftb3VudFBlbmRpbmcsIGlzTGlua09ubHkpID0+IHtcbiAgICBjb25zb2xlLmxvZyhpc0xpbmtPbmx5KTtcbiAgICBjb25zdCBzdHJpcGUgPSBhd2FpdCBnZXRMb2FkZWRTdHJpcGUoc3RyaXBlUHViS2V5KTtcbiAgICBjb25zdCBzdHJpcGVDdXJyZW5jeSA9IG91ckN1cnJlbmN5VG9UaGVpcnNbY3VycmVuY3kudG9Mb3dlckNhc2UoKS50cmltKCldO1xuICAgIGNvbnN0IHBheW1lbnRSZXF1ZXN0ID0gc3RyaXBlLnBheW1lbnRSZXF1ZXN0KHtcbiAgICAgIC8vIFRPRE86IHJlcGxhY2UgdGhpcyB3aXRoIHN0cmlwZSBhY2NvdW50IGNvdW50cnkgYXMgc29vbiBhcyB3ZSBzdXBwb3J0IGl0XG4gICAgICBjb3VudHJ5OiBcIlVTXCIsXG4gICAgICBjdXJyZW5jeTogc3RyaXBlQ3VycmVuY3ksXG4gICAgICB0b3RhbDoge1xuICAgICAgICBsYWJlbDogXCJUb3RhbFwiLFxuICAgICAgICBhbW91bnQ6IHRvdGFsQW1vdW50QXRvbSxcbiAgICAgICAgcGVuZGluZzogaXNBbW91bnRQZW5kaW5nXG4gICAgICB9LFxuICAgICAgcmVxdWVzdFBheWVyTmFtZTogdHJ1ZSxcbiAgICAgIHJlcXVlc3RQYXllckVtYWlsOiB0cnVlLFxuICAgICAgZGlzYWJsZVdhbGxldHM6IFtdIFxuICAgIH0pO1xuICAgIHJldHVybiBwYXltZW50UmVxdWVzdDtcbiAgfTtcbiAgY29uc3Qgc2xlZXAgPSAodGltZW91dE1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXRNcyk7XG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGlzU3RyaXBlSnNQcmVzZW50ID0gKCkgPT4ge1xuICAgIHJldHVybiBcIlN0cmlwZVwiIGluIHdpbmRvdztcbiAgfTtcbiAgY29uc3Qgd2FpdEZvclVzZXJUb0FkZFBheW1lbnRNZXRob2QgPSBhc3luYyAocGF5bWVudFJlcXVlc3QpID0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcGF5bWVudFJlcXVlc3Qub24oXCJwYXltZW50bWV0aG9kXCIsIGFzeW5jIChldnQpID0+IHtcbiAgICAgICAgICByZXNvbHZlKGV2dCk7XG4gICAgICAgIH0pO1xuICAgICAgICBwYXltZW50UmVxdWVzdC5vbihcImNhbmNlbFwiLCAoKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5YCkpO1xuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBjb25zdCBjb25maXJtU3RyaXBlUHJQTSA9IGFzeW5jIChuZXh0QWN0aW9uTWV0YWRhdGEsIHN0cmlwZVBtKSA9PiB7XG4gICAgaWYgKCFuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BrIHx8ICFuZXh0QWN0aW9uTWV0YWRhdGEuY2xpZW50X3NlY3JldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG5leHQgYWN0aW9uIG1ldGFkYXRhIGZvcm1hdDogJHtKU09OLnN0cmluZ2lmeShuZXh0QWN0aW9uTWV0YWRhdGEpfWApO1xuICAgIH1cbiAgICBjb25zdCBzdHJpcGUgPSBhd2FpdCBnZXRMb2FkZWRTdHJpcGUobmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wayk7XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IHN0cmlwZS5jb25maXJtQ2FyZFNldHVwKG5leHRBY3Rpb25NZXRhZGF0YS5jbGllbnRfc2VjcmV0LCB7XG4gICAgICBwYXltZW50X21ldGhvZDogc3RyaXBlUG0ucGF5bWVudE1ldGhvZC5pZFxuICAgIH0pO1xuICAgIGlmIChjb25maXJtUmVzdWx0LmVycm9yKSB7XG4gICAgICBzdHJpcGVQbS5jb21wbGV0ZShcImZhaWxcIik7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFBheW1lbnQgZmFpbGVkOiAke2NvbmZpcm1SZXN1bHQuZXJyb3IubWVzc2FnZSA/PyBgdW5rbm93bmB9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0cmlwZVBtLmNvbXBsZXRlKFwic3VjY2Vzc1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbmZpcm1SZXN1bHQ7XG4gIH07XG4gIGNvbnN0IGxhdW5jaFN0cmlwZTNEU0RpYWxvZ0Zsb3cgPSBhc3luYyAobmV4dEFjdGlvbk1ldGFkYXRhKSA9PiB7XG4gICAgY29uc3Qgc3RyaXBlID0gYXdhaXQgZ2V0TG9hZGVkU3RyaXBlKG5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcGspO1xuICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBzdHJpcGUuY29uZmlybUNhcmRTZXR1cChuZXh0QWN0aW9uTWV0YWRhdGEuY2xpZW50X3NlY3JldCwge1xuICAgICAgcGF5bWVudF9tZXRob2Q6IG5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcG1faWRcbiAgICB9KTtcbiAgICBjb25zdCByZXN1bHRTdGF0dXMgPSBjb25maXJtUmVzdWx0LnNldHVwSW50ZW50Py5zdGF0dXM7XG4gICAgaWYgKHJlc3VsdFN0YXR1cyA9PT0gXCJzdWNjZWVkZWRcIikge1xuICAgICAgY29uc29sZS5sb2coXCJbM0RTXSBDT05GSVJNSU5HIFBNOlwiLCBuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BtX2lkKTtcbiAgICAgIGNvbnNvbGUubG9nKFwiWzNEU10gU2V0dXAgaW50ZW50IGNyZWF0ZWQ6XCIsIGNvbmZpcm1SZXN1bHQuc2V0dXBJbnRlbnQpO1xuICAgIH0gZWxzZSBpZiAocmVzdWx0U3RhdHVzID09PSBcImNhbmNlbGVkXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYCR7Y29uZmlybVJlc3VsdC5lcnJvcj8ubWVzc2FnZSA/PyBjb25maXJtUmVzdWx0LnNldHVwSW50ZW50Py5sYXN0X3NldHVwX2Vycm9yPy5tZXNzYWdlID8/IFwiUGF5bWVudCBmYWlsZWQsIHBsZWFzZSBjbGljayBzdWJtaXQgYWdhaW4gdG8gcGF5LlwifWBcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nID0gKHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRTdHlsZXMgPSBKU09OLnN0cmluZ2lmeShzdHlsZXMpO1xuICAgIHJldHVybiBzZXJpYWxpemVkU3R5bGVzO1xuICB9O1xuXG4gIGNvbnN0IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybSA9IChmb3JtRGl2LCBpbml0aWFsRGljdCkgPT4ge1xuICAgIGNvbnN0IGluY2x1ZGVkSW5wdXRzID0gQXJyYXkuZnJvbShmb3JtRGl2LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1vcGlkXVwiKSA/PyBbXSk7XG4gICAgY29uc3QgZXh0cmFEYXRhID0gaW5jbHVkZWRJbnB1dHMucmVkdWNlKChhY2MsIGlucHV0KSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBpbnB1dC5nZXRBdHRyaWJ1dGUoXCJkYXRhLW9waWRcIik7XG4gICAgICBpZiAoIWtleSkgcmV0dXJuIGFjYztcbiAgICAgIHJldHVybiB7IC4uLmFjYywgW2tleV06IGlucHV0LnZhbHVlIH07XG4gICAgfSwge30pO1xuICAgIHJldHVybiBleHRyYURhdGE7XG4gIH07XG4gIGNvbnN0IHBhcnNlRXZlbnRQYXlsb2FkID0gKGV2ZW50RGF0YSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gRWxlbWVudEV2ZW50LnBhcnNlKGV2ZW50RGF0YSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwYXJzaW5nIGV2ZW50IHBheWxvYWQ6XCIsIGV2ZW50RGF0YSwgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9O1xuICBjb25zdCBlbWl0RXZlbnQgPSAodGFyZ2V0LCBmb3JtSWQsIGVsZW1lbnRJZCwgcGF5bG9hZCwgYmFzZVVybCkgPT4ge1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgcGF5bG9hZCxcbiAgICAgIG5vbmNlOiB1dWlkLnY0KCksXG4gICAgICBmb3JtSWQsXG4gICAgICBlbGVtZW50SWRcbiAgICB9O1xuICAgIGNvbnNvbGUubG9nKGBbZm9ybSAke2Zvcm1JZH1dIFNlbmRpbmcgZXZlbnQgdG8gY2hpbGQgJHtlbGVtZW50SWR9OmAsIGV2ZW50KTtcbiAgICB0YXJnZXQucG9zdE1lc3NhZ2UoSlNPTi5zdHJpbmdpZnkoZXZlbnQpLCBiYXNlVXJsKTtcbiAgfTtcblxuICBjb25zdCBjaGVja0lmVmFsaWRDZGVDb25uZWN0aW9uT2JqZWN0ID0gYXN5bmMgKG9iaikgPT4ge1xuICAgIGlmICh0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiIHx8ICFvYmopIHJldHVybiBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGluZyA9IHsgdHlwZTogXCJwaW5nXCIgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9iai5zZW5kKHBpbmcpO1xuICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICd0cnVlJyBhZnRlciBwaW5nLCBnb3QgJHtKU09OLnN0cmluZ2lmeShyZXN1bHQpfWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBDREUgY29ubmVjdGlvbiBjaGVjazpgLCBlKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGlzUmVzdWx0VmFsaWQgPSAob2JqLCBpc1ZhbGlkKSA9PiB7XG4gICAgcmV0dXJuICEhb2JqICYmIGlzVmFsaWQ7XG4gIH07XG5cbiAgY29uc3QgbnVsbE9yVW5kZWZPciA9ICh6VHlwZSkgPT4gem9kLnoubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG4gIHpvZC56LnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbiAgY29uc3QgQ0RFUmVzcG9uc2VFcnJvciA9IHpvZC56Lm9iamVjdCh7XG4gICAgY2RlX3Jlc3BvbnNlX3R5cGU6IHpvZC56LmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgICBtZXNzYWdlOiB6b2Quei5zdHJpbmcoKSxcbiAgICBoZWFkZXJzOiB6b2Quei5yZWNvcmQoem9kLnouc3RyaW5nKCksIHpvZC56LnN0cmluZygpKS5vcHRpb25hbCgpXG4gIH0pO1xuICB6b2Quei5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG4gIGNvbnN0IENvdXBvbk1pbmltYWwgPSB6b2Quei5vYmplY3Qoe1xuICAgIG5hbWU6IHpvZC56LnN0cmluZygpLFxuICAgIGFtb3VudF9hdG9tX29mZjogbnVsbE9yVW5kZWZPcih6b2Quei5udW1iZXIoKSksXG4gICAgcGVyY2VudF9vZmY6IG51bGxPclVuZGVmT3Ioem9kLnoubnVtYmVyKCkpLFxuICAgIGN1cnJlbmN5OiBudWxsT3JVbmRlZk9yKHpvZC56LnN0cmluZygpKSxcbiAgICBkdXJhdGlvbjogem9kLnouc3RyaW5nKCksXG4gICAgZHVyYXRpb25faW5fbW9udGhzOiBudWxsT3JVbmRlZk9yKHpvZC56Lm51bWJlcigpKVxuICB9KTtcbiAgY29uc3QgTGluZUl0ZW0gPSB6b2Quei5vYmplY3Qoe1xuICAgIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6b2Quei5udW1iZXIoKS5pbnQoKSxcbiAgICBhbW91bnRfdG90YWxfYXRvbTogem9kLnoubnVtYmVyKCkuaW50KCksXG4gICAgY3VycmVuY3k6IHpvZC56LnN0cmluZygpLFxuICAgIGRlc2NyaXB0aW9uOiBudWxsT3JVbmRlZk9yKHpvZC56LnN0cmluZygpKSxcbiAgICBwcmljZV9pZDogem9kLnouc3RyaW5nKCksXG4gICAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6b2Quei5zdHJpbmcoKSksXG4gICAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6b2Quei5udW1iZXIoKS5pbnQoKSksXG4gICAgcXVhbnRpdHk6IHpvZC56Lm51bWJlcigpLmludCgpXG4gIH0pO1xuICBjb25zdCBCcmFuZFNldHRpbmdzID0gem9kLnoucmVjb3JkKHpvZC56LnN0cmluZygpLCB6b2Quei5hbnkoKSk7XG4gIGNvbnN0IEJyYW5kID0gem9kLnoub2JqZWN0KHtcbiAgICBuYW1lOiB6b2Quei5zdHJpbmcoKSxcbiAgICBzZXR0aW5nczogbnVsbE9yVW5kZWZPcihCcmFuZFNldHRpbmdzKVxuICB9KTtcbiAgY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kID0gem9kLnoub2JqZWN0KHtcbiAgICBwcm92aWRlcjogem9kLnouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX25hbWU6IG51bGxPclVuZGVmT3Ioem9kLnouc3RyaW5nKCkpLFxuICAgIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHpvZC56LnJlY29yZCh6b2Quei5zdHJpbmcoKSwgem9kLnouYW55KCkpKVxuICB9KTtcbiAgY29uc3QgU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwgPSB6b2Quei5vYmplY3Qoe1xuICAgIHF1YW50aXR5OiB6b2Quei5udW1iZXIoKVxuICB9KTtcbiAgY29uc3QgU3Vic2NyaXB0aW9uTWluaW1hbCA9IHpvZC56Lm9iamVjdCh7XG4gICAgaWQ6IG51bGxPclVuZGVmT3Ioem9kLnouc3RyaW5nKCkpLFxuICAgIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3Ioem9kLnouc3RyaW5nKCkpLFxuICAgIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3Ioem9kLnoubnVtYmVyKCkuaW50KCkpLFxuICAgIHN1YnNjcmlwdGlvbl9pdGVtczogem9kLnouYXJyYXkoU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwpLFxuICAgIHRyaWFsX3N0YXJ0OiBudWxsT3JVbmRlZk9yKHpvZC56LnN0cmluZygpKSxcbiAgICB0cmlhbF9lbmQ6IG51bGxPclVuZGVmT3Ioem9kLnouc3RyaW5nKCkpXG4gIH0pO1xuICBjb25zdCBJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwgPSB6b2Quei5vYmplY3Qoe1xuICAgIGFtb3VudF9hdG9tOiB6b2Quei5udW1iZXIoKVxuICB9KTtcbiAgY29uc3QgSW52b2ljZUxpbmVJdGVtTWluaW1hbCA9IHpvZC56Lm9iamVjdCh7XG4gICAgYW1vdW50X2F0b206IHpvZC56Lm51bWJlcigpLFxuICAgIGFtb3VudF9hdG9tX2NvbnNpZGVyaW5nX2Rpc2NvdW50X2FwcGxpZWQ6IHpvZC56Lm51bWJlcigpLFxuICAgIGN1cnJlbmN5OiB6b2Quei5zdHJpbmcoKSxcbiAgICBkaXNjb3VudF9hbW91bnRfYXRvbXM6IHpvZC56LmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCksXG4gICAgc3Vic2NyaXB0aW9uX2l0ZW1faWQ6IHpvZC56LnN0cmluZygpXG4gIH0pO1xuICBjb25zdCBEaXNjb3VudE1pbmltYWwgPSB6b2Quei5vYmplY3Qoe1xuICAgIGNvdXBvbjogQ291cG9uTWluaW1hbFxuICB9KTtcbiAgY29uc3QgSW52b2ljZU1pbmltYWwgPSB6b2Quei5vYmplY3Qoe1xuICAgIGN1cnJlbmN5OiB6b2Quei5zdHJpbmcoKSxcbiAgICBkaXNjb3VudHM6IHpvZC56LmFycmF5KERpc2NvdW50TWluaW1hbCksXG4gICAgaG9zdGVkX2ludm9pY2VfdXJsOiBudWxsT3JVbmRlZk9yKHpvZC56LnN0cmluZygpKSxcbiAgICBsaW5lczogem9kLnouYXJyYXkoSW52b2ljZUxpbmVJdGVtTWluaW1hbCksXG4gICAgcmVtYWluaW5nX2Ftb3VudF9hdG9tOiB6b2Quei5udW1iZXIoKSxcbiAgICB0YXhfYW1vdW50X2F0b206IHpvZC56Lm51bWJlcigpLFxuICAgIHRvdGFsX2Ftb3VudF9hdG9tOiB6b2Quei5udW1iZXIoKSxcbiAgICB0b3RhbF9kaXNjb3VudF9hbW91bnRfYXRvbXM6IHpvZC56LmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbClcbiAgfSk7XG4gIGNvbnN0IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCA9IHpvZC56Lm9iamVjdCh7XG4gICAgY3JlYXRlZDogem9kLnouYXJyYXkoU3Vic2NyaXB0aW9uTWluaW1hbCksXG4gICAgaW52b2ljZXM6IHpvZC56LmFycmF5KEludm9pY2VNaW5pbWFsKVxuICB9KTtcbiAgY29uc3QgUHJldmlld0NoZWNrb3V0UmVzcG9uc2UgPSB6b2Quei5vYmplY3Qoe1xuICAgIHByZXZpZXc6IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCxcbiAgICBwcmV2aWV3X3Bvc3RfdHJpYWw6IG51bGxPclVuZGVmT3IoQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsKSxcbiAgICBjb3Vwb25zOiB6b2Quei5hcnJheShDb3Vwb25NaW5pbWFsKVxuICB9KTtcbiAgY29uc3QgX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiA9IHpvZC56Lm9iamVjdCh7XG4gICAgc3RhdHVzOiB6b2Quei5saXRlcmFsKFwib3BlblwiKSxcbiAgICB0b2tlbjogem9kLnouc3RyaW5nKCksXG4gICAgZW1haWw6IG51bGxPclVuZGVmT3Ioem9kLnouc3RyaW5nKCkpLFxuICAgIGxpbmVfaXRlbXM6IHpvZC56LmFycmF5KExpbmVJdGVtKSxcbiAgICBhbW91bnRfc3VidG90YWxfYXRvbTogem9kLnoubnVtYmVyKCkuaW50KCksXG4gICAgYW1vdW50X3RvdGFsX2F0b206IHpvZC56Lm51bWJlcigpLmludCgpLFxuICAgIGJyYW5kOiBCcmFuZCxcbiAgICBzdWJzX3ByZXZpZXc6IG51bGxPclVuZGVmT3IoUHJldmlld0NoZWNrb3V0UmVzcG9uc2UpLFxuICAgIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICAgIG1ldGhvZHNfYXZhaWxhYmxlOiB6b2Quei5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QpXG4gIH0pO1xuICBjb25zdCBQYXltZW50Rm9ybVByZWZpbGwgPSB6b2Quei5kaXNjcmltaW5hdGVkVW5pb24oXCJtb2RlXCIsIFtcbiAgICB6b2Quei5vYmplY3Qoe1xuICAgICAgbW9kZTogem9kLnoubGl0ZXJhbChcInNldHVwXCIpLFxuICAgICAgY3VycmVuY3k6IHpvZC56Lm51bGxhYmxlKHpvZC56LnVuZGVmaW5lZCgpKVxuICAgIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKSxcbiAgICB6b2Quei5vYmplY3Qoe1xuICAgICAgbW9kZTogem9kLnouZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICAgIGN1cnJlbmN5OiB6b2Quei5zdHJpbmcoKVxuICAgIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKVxuICBdKTtcbiAgY29uc3QgQ29tcGxldGVkRm9ybVByZWZpbGwgPSB6b2Quei5vYmplY3Qoe1xuICAgIHN0YXR1czogem9kLnoubGl0ZXJhbChcImNvbXBsZXRlXCIpXG4gIH0pO1xuICBjb25zdCBFeHBpcmVkRm9ybVByZWZpbGwgPSB6b2Quei5vYmplY3Qoe1xuICAgIHN0YXR1czogem9kLnoubGl0ZXJhbChcImV4cGlyZWRcIilcbiAgfSk7XG4gIHpvZC56LnVuaW9uKFtQYXltZW50Rm9ybVByZWZpbGwsIENvbXBsZXRlZEZvcm1QcmVmaWxsLCBFeHBpcmVkRm9ybVByZWZpbGxdKTtcbiAgem9kLnoub2JqZWN0KHtcbiAgICBsb2dvOiB6b2Quei5zdHJpbmcoKSxcbiAgICBpY29uOiB6b2Quei5zdHJpbmcoKSxcbiAgICBwcmltYXJ5X2NvbG9yOiB6b2Quei5zdHJpbmcoKSxcbiAgICBzZWNvbmRhcnlfY29sb3I6IHpvZC56LnN0cmluZygpXG4gIH0pO1xuICBjb25zdCBDaGVja291dFN1Y2Nlc3NSZXNwb25zZSA9IHpvZC56Lm9iamVjdCh7XG4gICAgaW52b2ljZV91cmxzOiB6b2Quei5hcnJheSh6b2Quei5zdHJpbmcoKSksXG4gICAgc3Vic2NyaXB0aW9uX2lkczogem9kLnouYXJyYXkoem9kLnouc3RyaW5nKCkpLFxuICAgIGN1c3RvbWVyX2lkOiB6b2Quei5zdHJpbmcoKVxuICB9KTtcbiAgem9kLnoub2JqZWN0KHtcbiAgICBzZWN1cmVfdG9rZW46IHpvZC56LnN0cmluZygpLFxuICAgIHBheW1lbnRfaW5wdXQ6IHpvZC56LmFueSgpLFxuICAgIC8vIFNob3VsZCBmb2xsb3cgQW55UGF5bWVudElucHV0IGZyb20gQ0RFXG4gICAgY3VzdG9tZXJfZW1haWw6IHpvZC56LnN0cmluZygpLFxuICAgIGN1c3RvbWVyX3ppcF9jb2RlOiB6b2Quei5zdHJpbmcoKSxcbiAgICBjdXN0b21lcl9jb3VudHJ5OiB6b2Quei5zdHJpbmcoKSxcbiAgICBsaW5lX2l0ZW1zOiB6b2Quei5hcnJheShMaW5lSXRlbSksXG4gICAgdG90YWxfYW1vdW50X2F0b206IHpvZC56Lm51bWJlcigpLmludCgpLFxuICAgIGNhbmNlbF9hdF9lbmQ6IHpvZC56LmJvb2xlYW4oKSxcbiAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIHByb21vdGlvbl9jb2RlOiB6b2Quei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHpvZC56LmJvb2xlYW4oKS5vcHRpb25hbCgpXG4gIH0pO1xuICBjb25zdCBTZXR1cENoZWNrb3V0UmVzcG9uc2UgPSB6b2Quei5vYmplY3Qoe1xuICAgIHBheW1lbnRfbWV0aG9kX2lkOiB6b2Quei5zdHJpbmcoKVxuICB9KTtcbiAgem9kLnoub2JqZWN0KHtcbiAgICBpZDogem9kLnouc3RyaW5nKCksXG4gICAgcmV0dXJuX3VybDogem9kLnouc3RyaW5nKClcbiAgfSk7XG4gIGNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yID0gem9kLnoub2JqZWN0KHtcbiAgICB0eXBlOiB6b2Quei5zdHJpbmcoKSxcbiAgICBsb2M6IHpvZC56LmFycmF5KHpvZC56LnN0cmluZygpKSxcbiAgICBtc2c6IHpvZC56LnN0cmluZygpLFxuICAgIHVybDogem9kLnouc3RyaW5nKClcbiAgfSk7XG4gIHpvZC56LmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yKTtcbiAgem9kLnoub2JqZWN0KHtcbiAgICBuZXdfY3VzdG9tZXJfZW1haWw6IHpvZC56LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHpvZC56LnJlY29yZCh6b2Quei5zdHJpbmcoKSwgem9kLnouYW55KCkpLm9wdGlvbmFsKCksXG4gICAgcGF5bWVudF9wcm92aWRlcjogem9kLnouc3RyaW5nKCksXG4gICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBleGlzdGluZ19jY19wbV9pZDogem9kLnouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICB0aGVpcl9leGlzdGluZ19wbV9pZDogem9kLnouc3RyaW5nKCkub3B0aW9uYWwoKVxuICB9KTtcbiAgY29uc3QgU3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gem9kLnoub2JqZWN0KHtcbiAgICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHpvZC56LmFycmF5KHpvZC56LnJlY29yZCh6b2Quei5zdHJpbmcoKSwgem9kLnouYW55KCkpKVxuICB9KTtcbiAgem9kLnoub2JqZWN0KHtcbiAgICBmaWVsZHM6IFBSRm9ybUZpZWxkcyxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZFxuICB9KTtcbiAgem9kLnoub2JqZWN0KHtcbiAgICBzZXNzaW9uX2lkOiB6b2Quei5zdHJpbmcoKSxcbiAgICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZFxuICB9KTtcbiAgY29uc3QgU3RhcnRQYXltZW50Rmxvd0ZvckNDUmVzcG9uc2UgPSB6b2Quei5vYmplY3Qoe1xuICAgIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogem9kLnouYXJyYXkoem9kLnoucmVjb3JkKHpvZC56LnN0cmluZygpLCB6b2Quei5hbnkoKSkpLFxuICAgIGNjX3BtX2lkOiB6b2Quei5zdHJpbmcoKVxuICB9KTtcbiAgem9kLnoucmVjb3JkKHpvZC56LmFueSgpKTtcblxuICBjb25zdCBzdW0gPSAoYXJyKSA9PiB7XG4gICAgcmV0dXJuIGFyci5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcbiAgfTtcblxuICBmdW5jdGlvbiBmaXhQcm90byh0YXJnZXQsIHByb3RvdHlwZSkge1xuICAgIHZhciBzZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiAgICBzZXRQcm90b3R5cGVPZiA/IHNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG90eXBlKSA6IHRhcmdldC5fX3Byb3RvX18gPSBwcm90b3R5cGU7XG4gIH1cbiAgZnVuY3Rpb24gZml4U3RhY2sodGFyZ2V0LCBmbikge1xuICAgIGlmIChmbiA9PT0gdm9pZCAwKSB7XG4gICAgICBmbiA9IHRhcmdldC5jb25zdHJ1Y3RvcjtcbiAgICB9XG5cbiAgICB2YXIgY2FwdHVyZVN0YWNrVHJhY2UgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgICBjYXB0dXJlU3RhY2tUcmFjZSAmJiBjYXB0dXJlU3RhY2tUcmFjZSh0YXJnZXQsIGZuKTtcbiAgfVxuXG4gIHZhciBfX2V4dGVuZHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF9leHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gZXh0ZW5kU3RhdGljcyhkLCBiKSB7XG4gICAgICBfZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7XG4gICAgICAgIF9fcHJvdG9fXzogW11cbiAgICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBkLl9fcHJvdG9fXyA9IGI7XG4gICAgICB9IHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGZvciAodmFyIHAgaW4gYikge1xuICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gX2V4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcblxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbCkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuXG4gICAgICBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcblxuICAgICAgZnVuY3Rpb24gX18oKSB7XG4gICAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBkO1xuICAgICAgfVxuXG4gICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbiAgfSgpO1xuXG4gIHZhciBDdXN0b21FcnJvciA9IGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQ3VzdG9tRXJyb3IsIF9zdXBlcik7XG5cbiAgICBmdW5jdGlvbiBDdXN0b21FcnJvcihtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG1lc3NhZ2UsIG9wdGlvbnMpIHx8IHRoaXM7XG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfdGhpcywgJ25hbWUnLCB7XG4gICAgICAgIHZhbHVlOiBfbmV3VGFyZ2V0Lm5hbWUsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgICAgZml4UHJvdG8oX3RoaXMsIF9uZXdUYXJnZXQucHJvdG90eXBlKTtcbiAgICAgIGZpeFN0YWNrKF90aGlzKTtcbiAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG5cbiAgICByZXR1cm4gQ3VzdG9tRXJyb3I7XG4gIH0oRXJyb3IpO1xuXG4gIGNsYXNzIENkZUVycm9yIGV4dGVuZHMgQ3VzdG9tRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKHJlc3BvbnNlKSB7XG4gICAgICBjb25zdCBmcmllbmRseU1lc3NhZ2UgPSBgW2NkZS1jbGllbnRdIEVycm9yIHF1ZXJ5aW5nIENERTogJHtyZXNwb25zZS5tZXNzYWdlfWA7XG4gICAgICBzdXBlcihmcmllbmRseU1lc3NhZ2UpO1xuICAgICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgIH1cbiAgICBnZXQgb3JpZ2luYWxFcnJvck1lc3NhZ2UoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNwb25zZS5tZXNzYWdlO1xuICAgIH1cbiAgfVxuICBjb25zdCBxdWVyeUNERSA9IGFzeW5jIChjZGVDb25uLCBkYXRhLCByZXNwb25zZVNjaGVtYSkgPT4ge1xuICAgIGNvbnNvbGUubG9nKFwiW2NkZS1jbGllbnRdIFF1ZXJ5aW5nIENERSB3aXRoIHBhdGggYW5kIGNvbm5lY3Rpb246XCIsIGRhdGEudHlwZSwgY2RlQ29ubik7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjZGVDb25uLnNlbmQoZGF0YSk7XG4gICAgY29uc29sZS5sb2coXCJbY2RlLWNsaWVudF0gR290IHJlc3BvbnNlIGZyb20gQ0RFOlwiLCByZXNwb25zZSk7XG4gICAgaWYgKGlzQ0RFUmVzcG9uc2VFcnJvcihyZXNwb25zZSkpIHtcbiAgICAgIHRocm93IG5ldyBDZGVFcnJvcihyZXNwb25zZSk7XG4gICAgfVxuICAgIGlmICghY2hlY2tJZkNvbmZvcm1zVG9TY2hlbWEocmVzcG9uc2UsIHJlc3BvbnNlU2NoZW1hKSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVzcG9uc2VTY2hlbWEuc2FmZVBhcnNlKHJlc3BvbnNlKTtcbiAgICAgIGlmIChyZXN1bHQuc3VjY2VzcykgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZVwiKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJPSlMgcXVlcnlBcGkgZ290IGEgc2NoZW1hIGVycm9yLiBFeHBlY3RlZCBzY2hlbWE6XCIsIHJlc3BvbnNlU2NoZW1hLCBcIkFjdHVhbDpcIiwgcmVzcG9uc2UpO1xuICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgIH1cbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH07XG4gIGNvbnN0IGNoZWNrSWZDb25mb3Jtc1RvU2NoZW1hID0gKHZhbHVlLCBzY2hlbWEpID0+IHtcbiAgICByZXR1cm4gc2NoZW1hLnNhZmVQYXJzZSh2YWx1ZSkuc3VjY2VzcztcbiAgfTtcbiAgY29uc3QgaXNDREVSZXNwb25zZUVycm9yID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgcmV0dXJuIENERVJlc3BvbnNlRXJyb3Iuc2FmZVBhcnNlKHJlc3BvbnNlKS5zdWNjZXNzO1xuICB9O1xuICBjb25zdCBnZXRDaGVja291dFByZXZpZXcgPSBhc3luYyAoY2RlQ29ubiwgcmVxdWVzdCkgPT4ge1xuICAgIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwiZ2V0X2NoZWNrb3V0X3ByZXZpZXdcIiwgcGF5bG9hZDogcmVxdWVzdCB9LCBQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSk7XG4gIH07XG4gIGNvbnN0IGdldFByZWZpbGwgPSBhc3luYyAoY2RlQ29ubikgPT4ge1xuICAgIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwiZ2V0X3ByZWZpbGxcIiwgcGF5bG9hZDoge30gfSwgUGF5bWVudEZvcm1QcmVmaWxsKTtcbiAgfTtcbiAgY29uc3Qgc3RhcnRQYXltZW50RmxvdyA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gICAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJ2Ml9zdGFydF9wYXltZW50X2Zsb3dcIiwgcGF5bG9hZCB9LCBTdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICB9O1xuICBjb25zdCBzdGFydFBheW1lbnRGbG93Rm9yQ0MgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICAgIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9jY1wiLCBwYXlsb2FkIH0sIFN0YXJ0UGF5bWVudEZsb3dGb3JDQ1Jlc3BvbnNlKTtcbiAgfTtcbiAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd0ZvclBSID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJcIiwgcGF5bG9hZCB9LCBTdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICB9O1xuICBjb25zdCBjb25maXJtUGF5bWVudEZsb3cgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICAgIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwiY29uZmlybV9wYXltZW50X2Zsb3dcIiwgcGF5bG9hZCB9LCBDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSk7XG4gIH07XG4gIGNvbnN0IGdldENoZWNrb3V0VmFsdWUgPSBhc3luYyAoY2RlQ29ubiwgc2VjdXJlVG9rZW4sIHByb21vQ29kZSkgPT4ge1xuICAgIGNvbnN0IGNoZWNrb3V0UHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlldyhjZGVDb25uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHNlY3VyZVRva2VuLFxuICAgICAgcHJvbW90aW9uX2NvZGU6IHByb21vQ29kZVxuICAgIH0pO1xuICAgIGNvbnN0IGN1cnJlbmNpZXMgPSBuZXcgU2V0KGNoZWNrb3V0UHJldmlldy5wcmV2aWV3Lmludm9pY2VzLm1hcCgoaW52KSA9PiBpbnYuY3VycmVuY3kpKTtcbiAgICBpZiAoY3VycmVuY2llcy5zaXplICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIGN1cnJlbmN5LCBnb3QgJHtjdXJyZW5jaWVzLnNpemV9YCk7XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbmN5ID0gY3VycmVuY2llcy52YWx1ZXMoKS5uZXh0KCkudmFsdWUgPz8gXCJ1c2RcIjtcbiAgICBjb25zdCBhbW91bnRBdG9tID0gc3VtKGNoZWNrb3V0UHJldmlldy5wcmV2aWV3Lmludm9pY2VzLm1hcCgoaW52KSA9PiBpbnYucmVtYWluaW5nX2Ftb3VudF9hdG9tKSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbmN5LFxuICAgICAgYW1vdW50QXRvbVxuICAgIH07XG4gIH07XG4gIGNvbnN0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudCA9IGFzeW5jIChjZGVDb25uLCBzZWN1cmVUb2tlbiwgaXNTZXR1cE1vZGUsIHByb21vQ29kZSkgPT4ge1xuICAgIGlmIChpc1NldHVwTW9kZSkge1xuICAgICAgcmV0dXJuIHsgYW1vdW50QXRvbTogMCwgY3VycmVuY3k6IFwidXNkXCIgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvbW9Db2RlID0gIXByb21vQ29kZSA/IHZvaWQgMCA6IHByb21vQ29kZTtcbiAgICAgIGNvbnN0IGNoZWNrb3V0UHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0VmFsdWUoY2RlQ29ubiwgc2VjdXJlVG9rZW4sIHByb21vQ29kZSk7XG4gICAgICByZXR1cm4geyBhbW91bnRBdG9tOiBjaGVja291dFByZXZpZXcuYW1vdW50QXRvbSwgY3VycmVuY3k6IGNoZWNrb3V0UHJldmlldy5jdXJyZW5jeSB9O1xuICAgIH1cbiAgfTtcbiAgY29uc3QgdG9rZW5pemVDYXJkT25BbGxDb25uZWN0aW9ucyA9IGFzeW5jIChhbGxDZGVDb25uZWN0aW9ucywgcGF5bG9hZCkgPT4ge1xuICAgIGlmIChhbGxDZGVDb25uZWN0aW9ucy5zaXplID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBDREUgY29ubmVjdGlvbnMgZm91bmRcIik7XG4gICAgfVxuICAgIGNvbnN0IHJlc3BvbnNlcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgQXJyYXkuZnJvbShhbGxDZGVDb25uZWN0aW9ucy52YWx1ZXMoKSkubWFwKFxuICAgICAgICAoY2RlQ29ubikgPT4gcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcInRva2VuaXplX2NhcmRcIiwgcGF5bG9hZCB9LCBUb2tlbml6ZUNhcmRSZXNwb25zZSlcbiAgICAgIClcbiAgICApO1xuICAgIHJldHVybiByZXNwb25zZXM7XG4gIH07XG4gIGNvbnN0IGNoZWNrb3V0Q2FyZEVsZW1lbnRzID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJjaGVja291dF9jYXJkX2VsZW1lbnRzXCIsIHBheWxvYWQgfSwgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiW2NkZS1jbGllbnRdIEVycm9yIGR1cmluZyBjaGVja291dENhcmRFbGVtZW50czpcIiwgZXJyb3IsIEpTT04uc3RyaW5naWZ5KGVycm9yKSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHNldHVwQ2hlY2tvdXQgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICAgIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwic2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZCB9LCBTZXR1cENoZWNrb3V0UmVzcG9uc2UpO1xuICB9O1xuICBjb25zdCBwZXJmb3JtQ2hlY2tvdXQgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICAgIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwiY2hlY2tvdXRcIiwgcGF5bG9hZCB9LCBDaGVja291dFN1Y2Nlc3NSZXNwb25zZSk7XG4gIH07XG4gIGNvbnN0IENERV9QT0xMSU5HX0lOVEVSVkFMID0gMWUzO1xuICBjb25zdCBwaW5nQ2RlRm9yM2RzU3RhdHVzID0gYXN5bmMgKGlmcmFtZSwgY2hpbGRPcmlnaW4pID0+IHtcbiAgICBjb25zb2xlLmxvZyhjaGlsZE9yaWdpbik7XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IHBlbnBhbC5jb25uZWN0VG9DaGlsZCh7XG4gICAgICBpZnJhbWUsXG4gICAgICBkZWJ1ZzogdHJ1ZSxcbiAgICAgIHRpbWVvdXQ6IENERV9QT0xMSU5HX0lOVEVSVkFMLFxuICAgICAgY2hpbGRPcmlnaW46IFwiKlwiXG4gICAgICAvLyBUT0RPOiB1c2Ugd2l0aCBwcm9wZXIgY2hpbGRPcmlnaW5cbiAgICB9KTtcbiAgICBjb25zdCBjb25uZWN0aW9uT2JqID0gYXdhaXQgY29ubmVjdGlvbi5wcm9taXNlO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHF1ZXJ5Q0RFKGNvbm5lY3Rpb25PYmosIHsgdHlwZTogXCJwaW5nLTNkcy1zdGF0dXNcIiB9LCBQaW5nM0RTU3RhdHVzUmVzcG9uc2UpO1xuICAgIHJldHVybiByZXN1bHQuc3RhdHVzO1xuICB9O1xuXG4gIGNvbnN0IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzID0gKHNpbXBsZU9qc0Zsb3cpID0+IHtcbiAgICByZXR1cm4gYXN5bmMgKHBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcGFyYW1zLmZsb3dDYWxsYmFja3Mub25DaGVja291dFN0YXJ0ZWQoKTtcbiAgICAgICAgY29uc3QgZmxvd1Jlc3VsdCA9IGF3YWl0IHNpbXBsZU9qc0Zsb3cocGFyYW1zKTtcbiAgICAgICAgaWYgKGZsb3dSZXN1bHQubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgICAgcGFyYW1zLmZsb3dDYWxsYmFja3Mub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzKGZsb3dSZXN1bHQucmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkKTtcbiAgICAgICAgfSBlbHNlIGlmIChmbG93UmVzdWx0Lm1vZGUgPT09IFwiY2hlY2tvdXRcIikge1xuICAgICAgICAgIHBhcmFtcy5mbG93Q2FsbGJhY2tzLm9uQ2hlY2tvdXRTdWNjZXNzKFxuICAgICAgICAgICAgZmxvd1Jlc3VsdC5yZXN1bHQuaW52b2ljZV91cmxzLFxuICAgICAgICAgICAgZmxvd1Jlc3VsdC5yZXN1bHQuc3Vic2NyaXB0aW9uX2lkcyxcbiAgICAgICAgICAgIGZsb3dSZXN1bHQucmVzdWx0LmN1c3RvbWVyX2lkXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBtb2RlOiAke2Zsb3dSZXN1bHR9YCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHBhcmFtcy5mbG93Q2FsbGJhY2tzLm9uQ2hlY2tvdXRFcnJvcihnZXRFcnJvck1lc3NhZ2UoZXJyb3IpKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcbiAgY29uc3QgYWRkRXJyb3JDYXRjaGVyRm9ySW5pdCA9IChpbml0KSA9PiB7XG4gICAgcmV0dXJuIGFzeW5jIChwYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBpbml0KHBhcmFtcyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCB7IGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImluaXQtZXJyb3ItY2F0Y2hlclwiKTtcbiAgICAgICAgZXJyX18oZXJyb3IpO1xuICAgICAgICByZXR1cm4geyBpc0F2YWlsYWJsZTogZmFsc2UsIHJlYXNvbjogZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSB9O1xuICAgICAgfVxuICAgIH07XG4gIH07XG4gIGNvbnN0IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzID0gKHByZWZpeCkgPT4ge1xuICAgIGNvbnN0IGxvZyA9ICguLi5hcmdzKSA9PiB7XG4gICAgICB3aW5kb3dbXCJjb25zb2xlXCJdLmxvZyhgJHtjaGFsay5ncmVlbi5ib2xkKFwib2pzL1wiKX0ke2NoYWxrLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgICB9O1xuICAgIGNvbnN0IGVyciA9ICguLi5hcmdzKSA9PiB7XG4gICAgICB3aW5kb3dbXCJjb25zb2xlXCJdLmVycm9yKGAke2NoYWxrLnJlZC5ib2xkKFwib2pzL1wiKX0ke2NoYWxrLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBsb2csXG4gICAgICBlcnIsXG4gICAgICBsb2dfXzogbG9nLFxuICAgICAgZXJyX186IGVyclxuICAgIH07XG4gIH07XG5cbiAgY29uc3QgeyBsb2dfXzogbG9nX18kNSwgZXJyX186IGVycl9fJDUgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiY29tbW9uXCIpO1xuICBjb25zdCBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKHJlc3BvbnNlLnBheW1lbnRfbWV0aG9kcy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSBvbmUgcGF5bWVudCBtZXRob2QsIGdvdCAke3Jlc3BvbnNlLnBheW1lbnRfbWV0aG9kcy5sZW5ndGh9YCk7XG4gICAgfVxuICAgIHJldHVybiB7IHBheW1lbnRfbWV0aG9kX2lkOiByZXNwb25zZS5wYXltZW50X21ldGhvZHNbMF0uaWQgfTtcbiAgfTtcbiAgY29uc3QgZmluZENwbU1hdGNoaW5nVHlwZSA9IChhbGxDUE1zLCB6b2RNb2RlbCkgPT4ge1xuICAgIGNvbnN0IGNwbSA9IGFsbENQTXMuZmluZCgoY3BtMikgPT4gem9kTW9kZWwuc2FmZVBhcnNlKGNwbTIpLnN1Y2Nlc3MpO1xuICAgIGlmICghY3BtKSB7XG4gICAgICBlcnJfXyQ1KGBObyBDUE1zIGZvdW5kIGZvciBtb2RlbC4gQWxsIG1vZGVsczpgLCBhbGxDUE1zKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWxgKTtcbiAgICB9XG4gICAgcmV0dXJuIHpvZE1vZGVsLnBhcnNlKGNwbSk7XG4gIH07XG5cbiAgY29uc3QgeyBsb2dfXzogbG9nX18kNCwgZXJyX186IGVycl9fJDQgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiY29tbW9uLWNjXCIpO1xuICBjb25zdCB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyA9IChub25DZGVGb3JtSW5wdXRzLCBvblZhbGlkYXRpb25FcnJvcikgPT4ge1xuICAgIGNvbnN0IHBheWxvYWQgPSBSZXF1aXJlZEZvcm1GaWVsZHMuc2FmZVBhcnNlKG5vbkNkZUZvcm1JbnB1dHMpO1xuICAgIGlmICghcGF5bG9hZC5zdWNjZXNzKSB7XG4gICAgICBjb25zdCBmb3JtYXR0ZWQgPSBwYXlsb2FkLmVycm9yLmZvcm1hdCgpO1xuICAgICAgY29uc3QgaXNzdWVzID0gZXh0cmFjdElzc3Vlc1BlckZpZWxkKGZvcm1hdHRlZCk7XG4gICAgICBmb3IgKGNvbnN0IFtmaWVsZE5hbWUsIGVycm9yc10gb2YgT2JqZWN0LmVudHJpZXMoaXNzdWVzKSkge1xuICAgICAgICBvblZhbGlkYXRpb25FcnJvcihmaWVsZE5hbWUsIGVycm9ycywgZmllbGROYW1lKTtcbiAgICAgIH1cbiAgICAgIGVycl9fJDQoYEdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzYCwgaXNzdWVzKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcGF5bG9hZC5kYXRhO1xuICB9O1xuICBjb25zdCB2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHMgPSAodG9rZW5pemVSZXN1bHRzLCBvblZhbGlkYXRpb25FcnJvcikgPT4ge1xuICAgIGZvciAoY29uc3QgdG9rZW5pemVSZXN1bHQgb2YgdG9rZW5pemVSZXN1bHRzKSB7XG4gICAgICBpZiAodG9rZW5pemVSZXN1bHQuc3VjY2VzcyA9PT0gZmFsc2UpIHtcbiAgICAgICAgdG9rZW5pemVSZXN1bHQuZXJyb3JzLmZvckVhY2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkID0gQWxsRmllbGROYW1lcy5zYWZlUGFyc2UoZXJyb3IuZWxlbWVudFR5cGUpO1xuICAgICAgICAgIGlmICghcGFyc2VkLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIGVycl9fJDQoYFVua25vd24gZmllbGQgbmFtZSBpbiBvblZhbGlkYXRpb25FcnJvcjogJHtlcnJvci5lbGVtZW50VHlwZX1gKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZmllbGROYW1lID0gcGFyc2VkLmRhdGE7XG4gICAgICAgICAgICBvblZhbGlkYXRpb25FcnJvcihmaWVsZE5hbWUsIGVycm9yLmVycm9ycyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kNChgRXJyb3IgdG9rZW5pemluZyBjYXJkOiBnb3QgdmFsaWRhdGlvbiBlcnJvcnM6ICR7SlNPTi5zdHJpbmdpZnkodG9rZW5pemVSZXN1bHQuZXJyb3JzKX1gKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIHdoaWxlIHRva2VuaXppbmcgY2FyZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgT0pTX1NUUklQRV9MSU5LX0JUTl9JRCA9IFwib2pzLXN0cmlwZS1saW5rLWJ0blwiO1xuICBjb25zdCB7IGxvZ19fOiBsb2dfXyQzLCBlcnJfXzogZXJyX18kMyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJzdHJpcGUtbGlua1wiKTtcbiAgY29uc3QgU3RyaXBlTGlua0NwbSA9IHpvZC56Lm9iamVjdCh7XG4gICAgcHJvdmlkZXI6IHpvZC56LmxpdGVyYWwoXCJzdHJpcGVfbGlua1wiKSxcbiAgICBwcm9jZXNzb3JfbmFtZTogem9kLnoubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgICBtZXRhZGF0YTogem9kLnoub2JqZWN0KHtcbiAgICAgIHN0cmlwZV9wazogem9kLnouc3RyaW5nKClcbiAgICB9KVxuICB9KTtcbiAgY29uc3QgU3RyaXBlTGlua1JlcXVpcmVkVXNlckFjdGlvbnMgPSB6b2Quei5hcnJheShcbiAgICB6b2Quei5vYmplY3Qoe1xuICAgICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6b2Quei5zdHJpbmcoKVxuICAgIH0pXG4gICkubGVuZ3RoKDEpO1xuICBjb25zdCBpbml0U3RyaXBlTGlua0Zsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICAgIGFzeW5jICh7IGNvbnRleHQsIGZsb3dDYWxsYmFja3MgfSkgPT4ge1xuICAgICAgbG9nX18kMyhgQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgUFIuLi5gKTtcbiAgICAgIGNvbnN0IHN0cmlwZUxpbmtDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgU3RyaXBlTGlua0NwbSk7XG4gICAgICBsb2dfXyQzKGBTdGFydGluZyBzdHJpcGUgbGluayBmbG93Li4uYCk7XG4gICAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gQXJyYXkuZnJvbShjb250ZXh0LmNkZUNvbm5lY3Rpb25zLnZhbHVlcygpKVswXTtcbiAgICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICAgIGxvZ19fJDMoYENyZWF0aW5nIHN0cmlwZSBlbGVtZW50cy4uLmApO1xuICAgICAgY29uc3QgaW5pdGlhbFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCk7XG4gICAgICBjb25zdCB7IGVsZW1lbnRzLCBzdHJpcGUgfSA9IGF3YWl0IGNyZWF0ZVN0cmlwZUVsZW1lbnRzKHN0cmlwZUxpbmtDcG0ubWV0YWRhdGEuc3RyaXBlX3BrLCB7XG4gICAgICAgIG1vZGU6IFwic2V0dXBcIixcbiAgICAgICAgY3VycmVuY3k6IGluaXRpYWxQcmV2aWV3LmN1cnJlbmN5LFxuICAgICAgICBzZXR1cF9mdXR1cmVfdXNhZ2U6IFwib2ZmX3Nlc3Npb25cIixcbiAgICAgICAgcGF5bWVudE1ldGhvZENyZWF0aW9uOiBcIm1hbnVhbFwiXG4gICAgICB9KTtcbiAgICAgIGxvZ19fJDMoYE1vdW50aW5nIHBheW1lbnQgZWxlbWVudC4uLmApO1xuICAgICAgY29uc3QgZXhwcmVzc0NoZWNrb3V0RWxlbWVudCA9IGVsZW1lbnRzLmNyZWF0ZShcImV4cHJlc3NDaGVja291dFwiLCB7XG4gICAgICAgIGJ1dHRvbkhlaWdodDogY29udGV4dC5jdXN0b21Jbml0UGFyYW1zLnN0cmlwZUxpbms/LmJ1dHRvbkhlaWdodCxcbiAgICAgICAgcGF5bWVudE1ldGhvZHM6IHtcbiAgICAgICAgICBhbWF6b25QYXk6IFwibmV2ZXJcIixcbiAgICAgICAgICBhcHBsZVBheTogXCJuZXZlclwiLFxuICAgICAgICAgIGdvb2dsZVBheTogXCJuZXZlclwiLFxuICAgICAgICAgIHBheXBhbDogXCJuZXZlclwiXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZXhwcmVzc0NoZWNrb3V0RWxlbWVudC5tb3VudChgIyR7T0pTX1NUUklQRV9MSU5LX0JUTl9JRH1gKTtcbiAgICAgIGV4cHJlc3NDaGVja291dEVsZW1lbnQub24oXCJjbGlja1wiLCBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgbG9nX18kMyhcIlN0cmlwZSBMaW5rIGJ1dHRvbiBjbGlja2VkXCIpO1xuICAgICAgICBpZiAoY29udGV4dC5jdXN0b21Jbml0UGFyYW1zLnN0cmlwZUxpbms/Lm92ZXJyaWRlTGlua1N1Ym1pdCkge1xuICAgICAgICAgIGNvbnN0IHNob3VsZFN1Ym1pdCA9IGF3YWl0IGNvbnRleHQuY3VzdG9tSW5pdFBhcmFtcy5zdHJpcGVMaW5rLm92ZXJyaWRlTGlua1N1Ym1pdCgpO1xuICAgICAgICAgIGlmICghc2hvdWxkU3VibWl0KSB7XG4gICAgICAgICAgICBsb2dfXyQzKFwiU3RyaXBlIExpbmsgc3VibWl0IGFib3J0ZWQgYnkgb3ZlcnJpZGVMaW5rU3VibWl0XCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBldmVudC5yZXNvbHZlKCk7XG4gICAgICB9KTtcbiAgICAgIGV4cHJlc3NDaGVja291dEVsZW1lbnQub24oXCJjb25maXJtXCIsIGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICBsb2dfXyQzKFwiU3RyaXBlIExpbmsgd2luZG93IGNvbmZpcm1lZFwiLCBldmVudCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN0cmlwZS5jcmVhdGVQYXltZW50TWV0aG9kKHtcbiAgICAgICAgICBlbGVtZW50cyxcbiAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgIGJpbGxpbmdfZGV0YWlsczogZXZlbnQuYmlsbGluZ0RldGFpbHNcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAocmVzdWx0LmVycm9yKSB7XG4gICAgICAgICAgZXJyX18kMyhcImVycm9yXCIsIHJlc3VsdC5lcnJvcik7XG4gICAgICAgICAgZmxvd0NhbGxiYWNrcy5vbkNoZWNrb3V0RXJyb3IocmVzdWx0LmVycm9yLm1lc3NhZ2UgPz8gXCJTdHJpcGUgTGluayB1bmtub3duIGVycm9yXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZ19fJDMoXCJwYXltZW50TWV0aG9kXCIsIHJlc3VsdC5wYXltZW50TWV0aG9kKTtcbiAgICAgICAgICBPanNGbG93cy5zdHJpcGVMaW5rLnJ1bih7XG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBzdHJpcGVMaW5rQ3BtLFxuICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgICBmbG93Q2FsbGJhY2tzLFxuICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHN0cmlwZVBNOiByZXN1bHQucGF5bWVudE1ldGhvZCB9LFxuICAgICAgICAgICAgaW5pdFJlc3VsdDogeyBpc0F2YWlsYWJsZTogdHJ1ZSB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgaXNBdmFpbGFibGU6IHRydWUgfTtcbiAgICB9XG4gICk7XG4gIGNvbnN0IHJ1blN0cmlwZUxpbmtGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gICAgYXN5bmMgKHtcbiAgICAgIGNvbnRleHQsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgICAgZmxvd0NhbGxiYWNrcyxcbiAgICAgIGN1c3RvbVBhcmFtc1xuICAgIH0pID0+IHtcbiAgICAgIGxvZ19fJDMoYFJ1bm5pbmcgU3RyaXBlIFBSIGZsb3cuLi5gKTtcbiAgICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBBcnJheS5mcm9tKGNvbnRleHQuY2RlQ29ubmVjdGlvbnMudmFsdWVzKCkpWzBdO1xuICAgICAgbG9nX18kMyhgTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLmApO1xuICAgICAgY29uc3QgbWVyZ2VkSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQTShub25DZGVGb3JtSW5wdXRzLCBjdXN0b21QYXJhbXMuc3RyaXBlUE0pO1xuICAgICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG1lcmdlZElucHV0cywgZmxvd0NhbGxiYWNrcy5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgICBsb2dfXyQzKGBTdGFydGluZyBwYXltZW50IGZsb3cuLi5gKTtcbiAgICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIHRoZWlyX2V4aXN0aW5nX3BtX2lkOiBjdXN0b21QYXJhbXMuc3RyaXBlUE0uaWRcbiAgICAgIH0pO1xuICAgICAgbG9nX18kMyhcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gU3RyaXBlTGlua1JlcXVpcmVkVXNlckFjdGlvbnMucGFyc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucyk7XG4gICAgICBjb25zdCBvdXJFeGlzdGluZ1BtSWQgPSBuZXh0QWN0aW9uTWV0YWRhdGFbMF0ub3VyX2V4aXN0aW5nX3BtX2lkO1xuICAgICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgbG9nX18kMyhgRG9pbmcgcGF5bWVudCBzZXR1cC4uLmApO1xuICAgICAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IG91ckV4aXN0aW5nUG1JZFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY3JlYXRlZFBheW1lbnRNZXRob2QgPSBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKGNvbmZpcm1SZXN1bHQpO1xuICAgICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogY3JlYXRlZFBheW1lbnRNZXRob2QgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ19fJDMoYERvaW5nIGNoZWNrb3V0Li4uYCk7XG4gICAgICAgIGNvbnN0IGNoZWNrb3V0UmVxdWVzdCA9IHtcbiAgICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgICAgcHJvdmlkZXJfdHlwZTogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0sXG4gICAgICAgICAgY3VzdG9tZXJfY291bnRyeTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgICAgICAgcHJvbW90aW9uX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICAgICAgdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgICAgY2FuY2VsX2F0X2VuZDogZmFsc2UsXG4gICAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwZXJmb3JtQ2hlY2tvdXQoYW55Q2RlQ29ubmVjdGlvbiwgY2hlY2tvdXRSZXF1ZXN0KTtcbiAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQgfTtcbiAgICAgIH1cbiAgICB9XG4gICk7XG4gIGNvbnN0IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUE0gPSAoZm9ybUlucHV0cywgc3RyaXBlUG0pID0+IHtcbiAgICBjb25zdCBpbnB1dHMgPSB7IC4uLmZvcm1JbnB1dHMgfTtcbiAgICBjb25zdCBbcGF5ZXJGaXJzdE5hbWUsIC4uLnBheWVyTGFzdE5hbWVQYXJ0c10gPSBzdHJpcGVQbS5iaWxsaW5nX2RldGFpbHMubmFtZT8udHJpbSgpPy5zcGxpdCgvXFxzKy8pID8/IFtdO1xuICAgIGNvbnN0IHBheWVyTGFzdE5hbWUgPSBwYXllckxhc3ROYW1lUGFydHMuam9pbihcIiBcIikgfHwgdm9pZCAwO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdIHx8IHBheWVyRmlyc3ROYW1lIHx8IFwiX09QX1VOS05PV05cIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gfHwgcGF5ZXJMYXN0TmFtZSB8fCBcIl9PUF9VTktOT1dOXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gPSBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSB8fCAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHN0cmlwZVBtW1wibGlua1wiXT8uZW1haWwgfHwgc3RyaXBlUG0uYmlsbGluZ19kZXRhaWxzLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdIHx8IHN0cmlwZVBtLmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzPy5wb3N0YWxfY29kZSB8fCBcIjAwMDAwXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSA9IGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gfHwgc3RyaXBlUG0uYmlsbGluZ19kZXRhaWxzLmFkZHJlc3M/LmNvdW50cnkgfHwgXCJVU1wiO1xuICAgIGxvZ19fJDMoYEZpbmFsIGZvcm0gaW5wdXRzOmAsIGlucHV0cyk7XG4gICAgcmV0dXJuIGlucHV0cztcbiAgfTtcblxuICBjb25zdCBzdHlsZXMgPSBcIkBrZXlmcmFtZXMgZmFkZUluezAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjkpfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGUoMSl9fS5vdmVybGF5e3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3otaW5kZXg6MjE0NzQ4MzY0OCFpbXBvcnRhbnQ7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6IzAwMDAwMDgwfS5jb250YWluZXJ7bWF4LXdpZHRoOjUwMHB4O21heC1oZWlnaHQ6NjAwcHg7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7cG9zaXRpb246cmVsYXRpdmU7YW5pbWF0aW9uOmZhZGVJbiAuM3MgZWFzZS1vdXR9LmZyYW1le21heC13aWR0aDo1MDBweDttYXgtaGVpZ2h0OjYwMHB4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7Ym9yZGVyOm5vbmV9LmNhbmNlbC1idXR0b257cG9zaXRpb246YWJzb2x1dGU7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXI6bm9uZTtmb250LXNpemU6MXJlbTtjb2xvcjojZmZmO2N1cnNvcjpwb2ludGVyO3RvcDotMS41cmVtO3BhZGRpbmc6MDtyaWdodDowfVwiO1xuXG4gIGNvbnN0IGNyZWF0ZUFuZE9wZW5GcmFtZSA9ICh1cmwpID0+IHtcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBgXG4gICAgPHN0eWxlPlxuICAgICAgJHtzdHlsZXN9XG4gICAgPC9zdHlsZT5cbiAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FuY2VsLWJ1dHRvblwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICA8aWZyYW1lIHNyYz1cIiR7dXJsfVwiIGNsYXNzPVwiZnJhbWVcIiBpZD1cInRocmVlLWRzLWlmcmFtZVwiIHRpdGxlPVwiM0QgU2VjdXJlIHZlcmlmaWNhdGlvblwiIGFsbG93PVwicGF5bWVudFwiPjwvaWZyYW1lPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGA7XG4gICAgY29uc3QgaG9zdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgY29uc3Qgc2hhZG93Um9vdCA9IGhvc3QuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSk7XG4gICAgc2hhZG93Um9vdC5hcHBlbmRDaGlsZCh0ZW1wbGF0ZS5jb250ZW50LmNsb25lTm9kZSh0cnVlKSk7XG4gICAgY29uc3QgaWZyYW1lID0gc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFwiI3RocmVlLWRzLWlmcmFtZVwiKTtcbiAgICBjb25zdCBjYW5jZWxCdXR0b24gPSBzaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGhvc3QpO1xuICAgIHJldHVybiB7IGhvc3QsIGlmcmFtZSwgY2FuY2VsQnV0dG9uIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gc3RhcnRQb2xsaW5nKGlmcmFtZSwgb25TdWNjZXNzLCBjaGlsZE9yaWdpbikge1xuICAgIGNvbnN0IGhhbmRsZVBvbGxpbmcgPSBhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIvCflIQgUG9sbGluZyBDREUgY29ubmVjdGlvbi4uLlwiKTtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgcGluZ0NkZUZvcjNkc1N0YXR1cyhpZnJhbWUsIGNoaWxkT3JpZ2luKTtcbiAgICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwi8J+foiBDREUgY29ubmVjdGlvbiBzdWNjZXNzZnVsISBTdG9wcGluZyBwb2xsaW5nLi4uXCIpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwi4p6h77iPIEdvdCBzdGF0dXM6XCIsIHN0YXR1cyk7XG4gICAgICAgICAgY2xlYXJJbnRlcnZhbChwb2xsaW5nSW50ZXJ2YWwpO1xuICAgICAgICAgIG9uU3VjY2VzcyhzdGF0dXMpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgfVxuICAgIH07XG4gICAgaGFuZGxlUG9sbGluZygpO1xuICAgIGNvbnN0IHBvbGxpbmdJbnRlcnZhbCA9IHNldEludGVydmFsKGhhbmRsZVBvbGxpbmcsIENERV9QT0xMSU5HX0lOVEVSVkFMKTtcbiAgICByZXR1cm4gcG9sbGluZ0ludGVydmFsO1xuICB9XG4gIGZ1bmN0aW9uIGhhbmRsZUV2ZW50cyh7XG4gICAgZWxlbWVudHMsXG4gICAgcG9sbGluZ0ludGVydmFsLFxuICAgIHJlc29sdmVcbiAgfSkge1xuICAgIGNvbnN0IGhhbmRsZUNhbmNlbCA9ICgpID0+IHtcbiAgICAgIGNsZWFySW50ZXJ2YWwocG9sbGluZ0ludGVydmFsKTtcbiAgICAgIGVsZW1lbnRzLmhvc3QucmVtb3ZlKCk7XG4gICAgICByZXNvbHZlKFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKTtcbiAgICB9O1xuICAgIGVsZW1lbnRzLmNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaGFuZGxlQ2FuY2VsKTtcbiAgICBjb25zdCBjbGVhbnVwRXZlbnRMaXN0ZW5lcnMgPSAoKSA9PiB7XG4gICAgICBlbGVtZW50cy5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNhbmNlbCk7XG4gICAgfTtcbiAgICByZXR1cm4gY2xlYW51cEV2ZW50TGlzdGVuZXJzO1xuICB9XG4gIGFzeW5jIGZ1bmN0aW9uIHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICB1cmwsXG4gICAgYmFzZVVybFxuICB9KSB7XG4gICAgY29uc3QgZWxlbWVudHMgPSBjcmVhdGVBbmRPcGVuRnJhbWUodXJsKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IG9uU3VjY2VzcyA9IChzdGF0dXMpID0+IHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgZWxlbWVudHMuaG9zdC5yZW1vdmUoKTtcbiAgICAgICAgfSwgMWUzKTtcbiAgICAgICAgcmVzb2x2ZShzdGF0dXMpO1xuICAgICAgICBjbGVhbnVwRXZlbnRMaXN0ZW5lcnM/LigpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHBvbGxpbmdJbnRlcnZhbCA9IHN0YXJ0UG9sbGluZyhlbGVtZW50cy5pZnJhbWUsIG9uU3VjY2VzcywgbmV3IFVSTChiYXNlVXJsKS5vcmlnaW4pO1xuICAgICAgY29uc3QgY2xlYW51cEV2ZW50TGlzdGVuZXJzID0gaGFuZGxlRXZlbnRzKHtcbiAgICAgICAgZWxlbWVudHMsXG4gICAgICAgIHBvbGxpbmdJbnRlcnZhbCxcbiAgICAgICAgcmVzb2x2ZVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCB7IGxvZ19fOiBsb2dfXyQyLCBlcnJfXzogZXJyX18kMiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjb21tb24tY2NcIik7XG4gIGNvbnN0IHsgbG9nX186IHN0cmlwZUxvZ19fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInN0cmlwZS1jY1wiKTtcbiAgY29uc3QgcnVuQ29tbW9uQ2NGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gICAgYXN5bmMgKHsgY29udGV4dCwgY2hlY2tvdXRQYXltZW50TWV0aG9kLCBub25DZGVGb3JtSW5wdXRzLCBmbG93Q2FsbGJhY2tzIH0pID0+IHtcbiAgICAgIGxvZ19fJDIoYOKUnCBSdW5uaW5nIGNvbW1vbiBDQyBmbG93Li4uYCwgeyBjaGVja291dFBheW1lbnRNZXRob2QgfSk7XG4gICAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gQXJyYXkuZnJvbShjb250ZXh0LmNkZUNvbm5lY3Rpb25zLnZhbHVlcygpKVswXTtcbiAgICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgICAgbG9nX18kMihg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkcyBbTW9kZTogJHtwcmVmaWxsLm1vZGV9XWApO1xuICAgICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG5vbkNkZUZvcm1JbnB1dHMsIGZsb3dDYWxsYmFja3Mub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgICAgbG9nX18kMihg4pScIFRva2VuaXppbmcgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHtjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgIGNvbnN0IHRva2VuaXplQ2FyZFJlc3VsdHMgPSBhd2FpdCB0b2tlbml6ZUNhcmRPbkFsbENvbm5lY3Rpb25zKGNvbnRleHQuY2RlQ29ubmVjdGlvbnMsIHtcbiAgICAgICAgc2Vzc2lvbl9pZDogY29udGV4dC5lbGVtZW50c1Nlc3Npb25JZFxuICAgICAgfSk7XG4gICAgICB2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHModG9rZW5pemVDYXJkUmVzdWx0cywgZmxvd0NhbGxiYWNrcy5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgICBjb25zdCBjb21tb25DaGVja291dFBhcmFtcyA9IHtcbiAgICAgICAgc2Vzc2lvbl9pZDogY29udGV4dC5lbGVtZW50c1Nlc3Npb25JZCxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgbm9uX2NkZV9mb3JtX2ZpZWxkczogbm9uQ2RlRm9ybUZpZWxkc1xuICAgICAgfTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICAgIGxvZ19fJDIoYOKUnCBTZXR0aW5nIHVwIHBheW1lbnQgbWV0aG9kIGluIENERSBbVG9rZW46ICR7cHJlZmlsbC50b2tlbn1dYCk7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2V0dXBDaGVja291dChhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgICAgbG9nX18kMihg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke3Jlc3VsdC5wYXltZW50X21ldGhvZF9pZH1dYCk7XG4gICAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2dfXyQyKGDilJwgSW5pdGlhbCBjaGVja291dCBmbG93LiBDaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHtjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja291dENhcmRFbGVtZW50cyhhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgICAgbG9nX18kMihg4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuYCk7XG4gICAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQgfTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQ2RlRXJyb3IpIHtcbiAgICAgICAgICBpZiAoZXJyb3Iub3JpZ2luYWxFcnJvck1lc3NhZ2UgPT09IFwiM0RTX1JFUVVJUkVEXCIpIHtcbiAgICAgICAgICAgIGxvZ19fJDIoYOKUnCBDYXJkIHJlcXVpcmVzIDNEUywgc3RhcnRpbmcgbm9uLWxlZ2FjeSBwYXltZW50IGZsb3dgKTtcbiAgICAgICAgICAgIGxvZ19fJDIoXCJlcnJvci5yZXNwb25zZS5oZWFkZXJzXCIsIGVycm9yLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgICAgY29uc3Qgc2hvdWxkVXNlTmV3RmxvdyA9IGVycm9yLnJlc3BvbnNlLmhlYWRlcnM/LltcIm9wLXNob3VsZC11c2UtbmV3LWZsb3dcIl0gPT09IFwidHJ1ZVwiO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRQZlJlc3VsdCA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3dGb3JDQyhhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgICAgICBsb2dfXyQyKGDilJwgb3Atc2hvdWxkLXVzZS1uZXctZmxvdzogJHtzaG91bGRVc2VOZXdGbG93fWApO1xuICAgICAgICAgICAgbG9nX18kMihg4pScIFBheW1lbnQgZmxvdyByZXN1bHQ6YCwgc3RhcnRQZlJlc3VsdCk7XG4gICAgICAgICAgICBpZiAoc2hvdWxkVXNlTmV3Rmxvdykge1xuICAgICAgICAgICAgICBhd2FpdCBjb21tb25DQzNEU0Zsb3coc3RhcnRQZlJlc3VsdCwgY29udGV4dC5iYXNlVXJsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGF3YWl0IHN0cmlwZUNDM0RTRmxvdyhzdGFydFBmUmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICAgICAgICBsb2dfXyQyKGDilJwgQ29uZmlybWluZyBwYXltZW50IGZsb3cgW2NjX3BtX2lkOiAke3N0YXJ0UGZSZXN1bHQuY2NfcG1faWR9XWApO1xuICAgICAgICAgICAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IHN0YXJ0UGZSZXN1bHQuY2NfcG1faWRcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGxvZ19fJDIoYOKUnCBDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHQgcmVjZWl2ZWQgUmVzdWx0OmAsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgICAgICAgICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoY29uZmlybVJlc3VsdCk7XG4gICAgICAgICAgICAgIGxvZ19fJDIoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtjcmVhdGVkUGF5bWVudE1ldGhvZC5wYXltZW50X21ldGhvZF9pZH1dYCk7XG4gICAgICAgICAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBjcmVhdGVkUGF5bWVudE1ldGhvZCB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbG9nX18kMihg4pScIENoZWNraW5nIG91dCBhZnRlciAzRFMgZmxvdyBbRmxvdzogJHtzaG91bGRVc2VOZXdGbG93ID8gXCJuZXdcIiA6IFwibGVnYWN5XCJ9XWApO1xuICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja291dENhcmRFbGVtZW50cyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgICAgICAgICAgLi4uY29tbW9uQ2hlY2tvdXRQYXJhbXMsXG4gICAgICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IHN0YXJ0UGZSZXN1bHQuY2NfcG1faWQsXG4gICAgICAgICAgICAgICAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogIXNob3VsZFVzZU5ld0Zsb3dcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGxvZ19fJDIoYOKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LmApO1xuICAgICAgICAgICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlcnJfXyQyKGDilbAgRXJyb3IgY2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREVgKTtcbiAgICAgICAgZXJyX18kMihlcnJvcik7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgKTtcbiAgY29uc3QgcGFyc2VTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEgPSAocmVzcG9uc2UpID0+IHtcbiAgICBjb25zdCBzdHJpcGVBY3Rpb24gPSByZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJzdHJpcGVfM2RzXCIpO1xuICAgIGlmICghc3RyaXBlQWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzdHJpcGUgM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIFN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YS5wYXJzZShzdHJpcGVBY3Rpb24pO1xuICB9O1xuICBjb25zdCBwYXJzZUNvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YSA9IChyZXNwb25zZSkgPT4ge1xuICAgIGNvbnN0IGNvbW1vbkFjdGlvbiA9IHJlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIik7XG4gICAgaWYgKCFjb21tb25BY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbW1vbiAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICAgIH1cbiAgICByZXR1cm4gQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhLnBhcnNlKGNvbW1vbkFjdGlvbik7XG4gIH07XG4gIGNvbnN0IGNvbW1vbkNDM0RTRmxvdyA9IGFzeW5jIChzdGFydFBmUmVzdWx0LCBiYXNlVXJsKSA9PiB7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEoc3RhcnRQZlJlc3VsdCk7XG4gICAgbG9nX18kMihg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvdyBbVVJMOiAke25leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmx9XWApO1xuICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHsgdXJsOiBuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsLCBiYXNlVXJsIH0pO1xuICAgIGxvZ19fJDIoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgIH1cbiAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgIH1cbiAgfTtcbiAgY29uc3Qgc3RyaXBlQ0MzRFNGbG93ID0gYXN5bmMgKHN0YXJ0UGZSZXN1bHQpID0+IHtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBwYXJzZVN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YShzdGFydFBmUmVzdWx0KTtcbiAgICBzdHJpcGVMb2dfXyhg4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvdyBbQ2xpZW50IFNlY3JldDogJHtuZXh0QWN0aW9uTWV0YWRhdGEuY2xpZW50X3NlY3JldC5zdWJzdHJpbmcoMCwgOCl9Li4uXWApO1xuICAgIGF3YWl0IGxhdW5jaFN0cmlwZTNEU0RpYWxvZ0Zsb3cobmV4dEFjdGlvbk1ldGFkYXRhKTtcbiAgICBzdHJpcGVMb2dfXyhcIuKVsCBTdHJpcGUgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKTtcbiAgfTtcblxuICBjb25zdCB7IGxvZ19fOiBsb2dfXyQxLCBlcnJfXzogZXJyX18kMSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJzdHJpcGUtcHJcIik7XG4gIGNvbnN0IFN0cmlwZVByQ3BtID0gem9kLnoub2JqZWN0KHtcbiAgICBwcm92aWRlcjogem9kLnoudW5pb24oW3pvZC56LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksIHpvZC56LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpXSksXG4gICAgcHJvY2Vzc29yX25hbWU6IHpvZC56LmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gICAgbWV0YWRhdGE6IHpvZC56Lm9iamVjdCh7XG4gICAgICBzdHJpcGVfcGs6IHpvZC56LnN0cmluZygpXG4gICAgfSlcbiAgfSk7XG4gIGNvbnN0IGluaXRTdHJpcGVQckZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICAgIGFzeW5jICh7IGNvbnRleHQgfSkgPT4ge1xuICAgICAgbG9nX18kMShgQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgUFIuLi5gKTtcbiAgICAgIGNvbnN0IGNoZWNrb3V0UGF5bWVudE1ldGhvZCA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBTdHJpcGVQckNwbSk7XG4gICAgICBsb2dfXyQxKGBJbml0aWFsaXppbmcgU3RyaXBlIFBSIGZsb3cuLi5gKTtcbiAgICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBBcnJheS5mcm9tKGNvbnRleHQuY2RlQ29ubmVjdGlvbnMudmFsdWVzKCkpWzBdO1xuICAgICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgICAgbG9nX18kMShgR2V0dGluZyBpbml0aWFsIHByZXZpZXcgYW1vdW50YCk7XG4gICAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICAgIGNvbnN0IHByID0gYXdhaXQgY3JlYXRlU3RyaXBlUGF5bWVudFJlcXVlc3QoXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YS5zdHJpcGVfcGssXG4gICAgICAgIGluaXRpYWxQcmV2aWV3LmFtb3VudEF0b20sXG4gICAgICAgIGluaXRpYWxQcmV2aWV3LmN1cnJlbmN5LFxuICAgICAgICBpc1NldHVwTW9kZVxuICAgICAgKTtcbiAgICAgIGxvZ19fJDEoYENoZWNraW5nIGlmIGNhbiBtYWtlIHBheW1lbnRgKTtcbiAgICAgIGNvbnN0IGNhbk1ha2VQYXltZW50ID0gYXdhaXQgcHIuY2FuTWFrZVBheW1lbnQoKTtcbiAgICAgIGlmIChjYW5NYWtlUGF5bWVudCA9PT0gbnVsbCkge1xuICAgICAgICBlcnJfXyQxKGBjYW5NYWtlUGF5bWVudCByZXR1cm5lZCBudWxsYCk7XG4gICAgICAgIHJldHVybiB7IGlzQXZhaWxhYmxlOiBmYWxzZSwgcmVhc29uOiBcImNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxcIiB9O1xuICAgICAgfVxuICAgICAgbG9nX18kMShgU3RyaXBlIFBSIGZsb3cgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBDYW4gbWFrZSBwYXltZW50YCwgY2FuTWFrZVBheW1lbnQpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICAgIHByLFxuICAgICAgICBhdmFpbGFibGVQcm92aWRlcnM6IHtcbiAgICAgICAgICBhcHBsZVBheTogY2FuTWFrZVBheW1lbnQuYXBwbGVQYXksXG4gICAgICAgICAgZ29vZ2xlUGF5OiBjYW5NYWtlUGF5bWVudC5nb29nbGVQYXlcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICk7XG4gIGNvbnN0IHJ1blN0cmlwZVByRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICAgIGFzeW5jICh7XG4gICAgICBjb250ZXh0LFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICAgIGZsb3dDYWxsYmFja3MsXG4gICAgICBjdXN0b21QYXJhbXMsXG4gICAgICBpbml0UmVzdWx0XG4gICAgfSkgPT4ge1xuICAgICAgbG9nX18kMShgUnVubmluZyBTdHJpcGUgUFIgZmxvdy4uLmApO1xuICAgICAgaWYgKGN1c3RvbVBhcmFtcy5wcm92aWRlciAhPT0gY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvdmlkZXIgbWlzbWF0Y2guIEV4cGVjdGVkICR7Y3VzdG9tUGFyYW1zLnByb3ZpZGVyfSwgZ290ICR7Y2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyfWApO1xuICAgICAgfVxuICAgICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IEFycmF5LmZyb20oY29udGV4dC5jZGVDb25uZWN0aW9ucy52YWx1ZXMoKSlbMF07XG4gICAgICBjb25zdCBwciA9IGluaXRSZXN1bHQucHI7XG4gICAgICBpZiAoY3VzdG9tUGFyYW1zPy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0KSB7XG4gICAgICAgIGNvbnN0IG92ZXJyaWRlID0gY3VzdG9tUGFyYW1zLm92ZXJyaWRlUGF5bWVudFJlcXVlc3Q7XG4gICAgICAgIGxvZ19fJDEoYE92ZXJyaWRpbmcgUFIgYW1vdW50IHdpdGhgLCBvdmVycmlkZSk7XG4gICAgICAgIHVwZGF0ZVByV2l0aEFtb3VudChwciwgb3ZlcnJpZGUuYW1vdW50LCBvdmVycmlkZS5wZW5kaW5nKTtcbiAgICAgIH1cbiAgICAgIGxvZ19fJDEoYFNob3dpbmcgUFIgZGlhbG9nLi4uYCk7XG4gICAgICBwci5zaG93KCk7XG4gICAgICBjb25zdCBzdHJpcGVQbUFkZGVkRXZlbnQgPSBhd2FpdCB3YWl0Rm9yVXNlclRvQWRkUGF5bWVudE1ldGhvZChwcik7XG4gICAgICBsb2dfXyQxKGBTdHJpcGUgUE0gYWRkZWQgZXZlbnQ6YCwgc3RyaXBlUG1BZGRlZEV2ZW50KTtcbiAgICAgIGxvZ19fJDEoYE1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5gKTtcbiAgICAgIGNvbnN0IG1lcmdlZElucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUG0obm9uQ2RlRm9ybUlucHV0cywgc3RyaXBlUG1BZGRlZEV2ZW50KTtcbiAgICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhtZXJnZWRJbnB1dHMsIGZsb3dDYWxsYmFja3Mub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgICAgbG9nX18kMShgUFIgZGlhbG9nIGZpbmlzaGVkLiBTdGFydGluZyBwYXltZW50IGZsb3cuLi5gKTtcbiAgICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3dGb3JQUihhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIGZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IHBhcnNlUFJOZXh0QWN0aW9uTWV0YWRhdGEoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICAgIGxvZ19fJDEoYENvbmZpcm1pbmcgUFIgd2l0aCBTdHJpcGUuLi5gKTtcbiAgICAgIGF3YWl0IGNvbmZpcm1TdHJpcGVQclBNKG5leHRBY3Rpb25NZXRhZGF0YSwgc3RyaXBlUG1BZGRlZEV2ZW50KTtcbiAgICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgIGxvZ19fJDEoYENvbmZpcm1pbmcgcGF5bWVudCBmbG93IGZvciBzZXR1cC4uLmApO1xuICAgICAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW5cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGNyZWF0ZWRQYXltZW50TWV0aG9kID0gcGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZShjb25maXJtUmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dfXyQxKGBQZXJmb3JtaW5nIGNoZWNrb3V0Li4uYCk7XG4gICAgICAgIGNvbnN0IGNoZWNrb3V0UmVxdWVzdCA9IHtcbiAgICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgICAgcHJvdmlkZXJfdHlwZTogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0sXG4gICAgICAgICAgY3VzdG9tZXJfY291bnRyeTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgICAgICAgcHJvbW90aW9uX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICAgICAgdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgICAgY2FuY2VsX2F0X2VuZDogZmFsc2UsXG4gICAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwZXJmb3JtQ2hlY2tvdXQoYW55Q2RlQ29ubmVjdGlvbiwgY2hlY2tvdXRSZXF1ZXN0KTtcbiAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQgfTtcbiAgICAgIH1cbiAgICB9XG4gICk7XG4gIGNvbnN0IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUG0gPSAoZm9ybUlucHV0cywgc3RyaXBlUG1FdnQpID0+IHtcbiAgICBjb25zdCBpbnB1dHMgPSB7IC4uLmZvcm1JbnB1dHMgfTtcbiAgICBjb25zdCBbcGF5ZXJGaXJzdE5hbWUsIC4uLnBheWVyTGFzdE5hbWVQYXJ0c10gPSBzdHJpcGVQbUV2dC5wYXllck5hbWU/LnRyaW0oKT8uc3BsaXQoL1xccysvKSA/PyBbXTtcbiAgICBjb25zdCBwYXllckxhc3ROYW1lID0gcGF5ZXJMYXN0TmFtZVBhcnRzLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSB8fCBwYXllckZpcnN0TmFtZSB8fCBcIl9PUF9VTktOT1dOXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdIHx8IHBheWVyTGFzdE5hbWUgfHwgXCJfT1BfVU5LTk9XTlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdID0gaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gfHwgc3RyaXBlUG1FdnQucGF5ZXJFbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSB8fCBzdHJpcGVQbUV2dC5zaGlwcGluZ0FkZHJlc3M/LnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gPSBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldIHx8IHN0cmlwZVBtRXZ0LnNoaXBwaW5nQWRkcmVzcz8uY291bnRyeSB8fCBcIlVTXCI7XG4gICAgbG9nX18kMShgRmluYWwgZm9ybSBpbnB1dHM6YCwgaW5wdXRzKTtcbiAgICByZXR1cm4gaW5wdXRzO1xuICB9O1xuICBjb25zdCB1cGRhdGVQcldpdGhBbW91bnQgPSAocHIsIGFtb3VudCwgaXNQZW5kaW5nKSA9PiB7XG4gICAgcHIudXBkYXRlKHtcbiAgICAgIHRvdGFsOiB7XG4gICAgICAgIGFtb3VudDogYW1vdW50LmFtb3VudEF0b20sXG4gICAgICAgIGxhYmVsOiBcIlRvdGFsXCIsXG4gICAgICAgIHBlbmRpbmc6IGlzUGVuZGluZ1xuICAgICAgfSxcbiAgICAgIGN1cnJlbmN5OiBhbW91bnQuY3VycmVuY3lcbiAgICB9KTtcbiAgfTtcbiAgY29uc3QgcGFyc2VQUk5leHRBY3Rpb25NZXRhZGF0YSA9IChyZXNwb25zZSkgPT4ge1xuICAgIGlmIChyZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIG9jY3VycmVkLlxuRGV0YWlsczogZ290ICR7cmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aH0gcmVxdWlyZWQgdXNlciBhY3Rpb25zYCk7XG4gICAgfVxuICAgIHJldHVybiBQYXltZW50UmVxdWVzdE5leHRBY3Rpb25NZXRhZGF0YS5wYXJzZShyZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xuICB9O1xuXG4gIGNvbnN0IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QgPSAoY3Btcywgd2l0aFByb3ZpZGVyLCB3aXRoUHJvY2Vzc29yKSA9PiB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IGNwbXMuZmlsdGVyKChjcG0pID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoZXNQcm9jZXNzb3IgPSB0cnVlIDtcbiAgICAgIGNvbnN0IG1hdGNoZXNQcm92aWRlciA9IGNwbS5wcm92aWRlciA9PT0gd2l0aFByb3ZpZGVyO1xuICAgICAgcmV0dXJuIG1hdGNoZXNQcm9jZXNzb3IgJiYgbWF0Y2hlc1Byb3ZpZGVyO1xuICAgIH0pO1xuICAgIGlmIChtYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc29sZS5lcnJvcihcIkNQTXMgbGlzdFwiLCBjcG1zKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQ1BNcyBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3dpdGhQcm92aWRlcn0nIGFuZCBwcm9jZXNzb3IgJyR7d2l0aFByb2Nlc3Nvcn0nYCk7XG4gICAgfVxuICAgIGlmIChtYXRjaGVzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgY29uc29sZS5lcnJvcihcIkNQTXMgbGlzdFwiLCBjcG1zKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTW9yZSB0aGFuIG9uZSBDUE0gZm91bmQgd2l0aCBwcm92aWRlciAnJHt3aXRoUHJvdmlkZXJ9JyBhbmQgcHJvY2Vzc29yICcke3dpdGhQcm9jZXNzb3J9J2ApO1xuICAgIH1cbiAgICByZXR1cm4gbWF0Y2hlc1swXTtcbiAgfTtcbiAgY29uc3QgT2pzRmxvd3MgPSB7XG4gICAgLy8g4pyLIE5vdGU6IEZvciBmbG93cyB0aGF0IHJlcXVpcmUgaW5pdGlhbGl6YXRpb24sIHBsZWFzZSBhZGQgdGhlbSB0byBgaW5pdC1mbG93cy50c2BcbiAgICAvLyBDb21tb25cbiAgICBjb21tb25DQzoge1xuICAgICAgcnVuOiBydW5Db21tb25DY0Zsb3dcbiAgICB9LFxuICAgIC8vIFN0cmlwZVxuICAgIHN0cmlwZVBSOiB7XG4gICAgICBpbml0OiBpbml0U3RyaXBlUHJGbG93LFxuICAgICAgcnVuOiBydW5TdHJpcGVQckZsb3dcbiAgICB9LFxuICAgIHN0cmlwZUxpbms6IHtcbiAgICAgIGluaXQ6IGluaXRTdHJpcGVMaW5rRmxvdyxcbiAgICAgIHJ1bjogcnVuU3RyaXBlTGlua0Zsb3dcbiAgICB9XG4gICAgLy8g8J+RiSBBZGQgbW9yZSBmbG93cyBoZXJlXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgfTtcblxuICBmdW5jdGlvbiBnZXREZWZhdWx0RXhwb3J0RnJvbUNqcyAoeCkge1xuICBcdHJldHVybiB4ICYmIHguX19lc01vZHVsZSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeCwgJ2RlZmF1bHQnKSA/IHhbJ2RlZmF1bHQnXSA6IHg7XG4gIH1cblxuICB2YXIgT2JzZXJ2YWJsZSQyID0ge307XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE9ic2VydmFibGUkMiwgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxuICB9KTtcbiAgT2JzZXJ2YWJsZSQyLk9ic2VydmFibGUgPSB2b2lkIDA7XG5cbiAgLy8gPT09IFN5bWJvbCBTdXBwb3J0ID09PVxuICBjb25zdCBoYXNTeW1ib2wgPSBuYW1lID0+IEJvb2xlYW4oU3ltYm9sW25hbWVdKTtcblxuICBjb25zdCBnZXRTeW1ib2wgPSBuYW1lID0+IGhhc1N5bWJvbChuYW1lKSA/IFN5bWJvbFtuYW1lXSA6ICdAQCcgKyBuYW1lO1xuXG4gIGNvbnN0IFN5bWJvbEl0ZXJhdG9yID0gZ2V0U3ltYm9sKCdpdGVyYXRvcicpO1xuICBjb25zdCBTeW1ib2xPYnNlcnZhYmxlID0gZ2V0U3ltYm9sKCdvYnNlcnZhYmxlJyk7XG4gIGNvbnN0IFN5bWJvbFNwZWNpZXMgPSBnZXRTeW1ib2woJ3NwZWNpZXMnKTsgLy8gPT09IEFic3RyYWN0IE9wZXJhdGlvbnMgPT09XG5cbiAgZnVuY3Rpb24gZ2V0TWV0aG9kKG9iaiwga2V5KSB7XG4gICAgbGV0IHZhbHVlID0gb2JqW2tleV07XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IFR5cGVFcnJvcih2YWx1ZSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRTcGVjaWVzKG9iaikge1xuICAgIGxldCBjdG9yID0gb2JqLmNvbnN0cnVjdG9yO1xuXG4gICAgaWYgKGN0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY3RvciA9IGN0b3JbU3ltYm9sU3BlY2llc107XG5cbiAgICAgIGlmIChjdG9yID09PSBudWxsKSB7XG4gICAgICAgIGN0b3IgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGN0b3IgIT09IHVuZGVmaW5lZCA/IGN0b3IgOiBPYnNlcnZhYmxlJDE7XG4gIH1cblxuICBmdW5jdGlvbiBpc09ic2VydmFibGUoeCkge1xuICAgIHJldHVybiB4IGluc3RhbmNlb2YgT2JzZXJ2YWJsZSQxOyAvLyBTUEVDOiBCcmFuZCBjaGVja1xuICB9XG5cbiAgZnVuY3Rpb24gaG9zdFJlcG9ydEVycm9yKGUpIHtcbiAgICBpZiAoaG9zdFJlcG9ydEVycm9yLmxvZykge1xuICAgICAgaG9zdFJlcG9ydEVycm9yLmxvZyhlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBlbnF1ZXVlKGZuKSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBmbigpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBob3N0UmVwb3J0RXJyb3IoZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbikge1xuICAgIGxldCBjbGVhbnVwID0gc3Vic2NyaXB0aW9uLl9jbGVhbnVwO1xuICAgIGlmIChjbGVhbnVwID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICBzdWJzY3JpcHRpb24uX2NsZWFudXAgPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoIWNsZWFudXApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiBjbGVhbnVwID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNsZWFudXAoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCB1bnN1YnNjcmliZSA9IGdldE1ldGhvZChjbGVhbnVwLCAndW5zdWJzY3JpYmUnKTtcblxuICAgICAgICBpZiAodW5zdWJzY3JpYmUpIHtcbiAgICAgICAgICB1bnN1YnNjcmliZS5jYWxsKGNsZWFudXApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaG9zdFJlcG9ydEVycm9yKGUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb3NlU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbikge1xuICAgIHN1YnNjcmlwdGlvbi5fb2JzZXJ2ZXIgPSB1bmRlZmluZWQ7XG4gICAgc3Vic2NyaXB0aW9uLl9xdWV1ZSA9IHVuZGVmaW5lZDtcbiAgICBzdWJzY3JpcHRpb24uX3N0YXRlID0gJ2Nsb3NlZCc7XG4gIH1cblxuICBmdW5jdGlvbiBmbHVzaFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pIHtcbiAgICBsZXQgcXVldWUgPSBzdWJzY3JpcHRpb24uX3F1ZXVlO1xuXG4gICAgaWYgKCFxdWV1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN1YnNjcmlwdGlvbi5fcXVldWUgPSB1bmRlZmluZWQ7XG4gICAgc3Vic2NyaXB0aW9uLl9zdGF0ZSA9ICdyZWFkeSc7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgKytpKSB7XG4gICAgICBub3RpZnlTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uLCBxdWV1ZVtpXS50eXBlLCBxdWV1ZVtpXS52YWx1ZSk7XG4gICAgICBpZiAoc3Vic2NyaXB0aW9uLl9zdGF0ZSA9PT0gJ2Nsb3NlZCcpIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG5vdGlmeVN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24sIHR5cGUsIHZhbHVlKSB7XG4gICAgc3Vic2NyaXB0aW9uLl9zdGF0ZSA9ICdydW5uaW5nJztcbiAgICBsZXQgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb24uX29ic2VydmVyO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCBtID0gZ2V0TWV0aG9kKG9ic2VydmVyLCB0eXBlKTtcblxuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgJ25leHQnOlxuICAgICAgICAgIGlmIChtKSBtLmNhbGwob2JzZXJ2ZXIsIHZhbHVlKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgICAgY2xvc2VTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgICBpZiAobSkgbS5jYWxsKG9ic2VydmVyLCB2YWx1ZSk7ZWxzZSB0aHJvdyB2YWx1ZTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdjb21wbGV0ZSc6XG4gICAgICAgICAgY2xvc2VTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgICBpZiAobSkgbS5jYWxsKG9ic2VydmVyKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBob3N0UmVwb3J0RXJyb3IoZSk7XG4gICAgfVxuXG4gICAgaWYgKHN1YnNjcmlwdGlvbi5fc3RhdGUgPT09ICdjbG9zZWQnKSBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7ZWxzZSBpZiAoc3Vic2NyaXB0aW9uLl9zdGF0ZSA9PT0gJ3J1bm5pbmcnKSBzdWJzY3JpcHRpb24uX3N0YXRlID0gJ3JlYWR5JztcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uTm90aWZ5KHN1YnNjcmlwdGlvbiwgdHlwZSwgdmFsdWUpIHtcbiAgICBpZiAoc3Vic2NyaXB0aW9uLl9zdGF0ZSA9PT0gJ2Nsb3NlZCcpIHJldHVybjtcblxuICAgIGlmIChzdWJzY3JpcHRpb24uX3N0YXRlID09PSAnYnVmZmVyaW5nJykge1xuICAgICAgc3Vic2NyaXB0aW9uLl9xdWV1ZS5wdXNoKHtcbiAgICAgICAgdHlwZSxcbiAgICAgICAgdmFsdWVcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHN1YnNjcmlwdGlvbi5fc3RhdGUgIT09ICdyZWFkeScpIHtcbiAgICAgIHN1YnNjcmlwdGlvbi5fc3RhdGUgPSAnYnVmZmVyaW5nJztcbiAgICAgIHN1YnNjcmlwdGlvbi5fcXVldWUgPSBbe1xuICAgICAgICB0eXBlLFxuICAgICAgICB2YWx1ZVxuICAgICAgfV07XG4gICAgICBlbnF1ZXVlKCgpID0+IGZsdXNoU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbikpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG5vdGlmeVN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24sIHR5cGUsIHZhbHVlKTtcbiAgfVxuXG4gIGNsYXNzIFN1YnNjcmlwdGlvbiB7XG4gICAgY29uc3RydWN0b3Iob2JzZXJ2ZXIsIHN1YnNjcmliZXIpIHtcbiAgICAgIC8vIEFTU0VSVDogb2JzZXJ2ZXIgaXMgYW4gb2JqZWN0XG4gICAgICAvLyBBU1NFUlQ6IHN1YnNjcmliZXIgaXMgY2FsbGFibGVcbiAgICAgIHRoaXMuX2NsZWFudXAgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9vYnNlcnZlciA9IG9ic2VydmVyO1xuICAgICAgdGhpcy5fcXVldWUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9zdGF0ZSA9ICdpbml0aWFsaXppbmcnO1xuICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgICAgbGV0IHN1YnNjcmlwdGlvbk9ic2VydmVyID0ge1xuICAgICAgICBnZXQgY2xvc2VkKCkge1xuICAgICAgICAgIHJldHVybiBzZWxmLl9zdGF0ZSA9PT0gJ2Nsb3NlZCc7XG4gICAgICAgIH0sXG5cbiAgICAgICAgbmV4dCh2YWx1ZSkge1xuICAgICAgICAgIG9uTm90aWZ5KHNlbGYsICduZXh0JywgdmFsdWUpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGVycm9yKHZhbHVlKSB7XG4gICAgICAgICAgb25Ob3RpZnkoc2VsZiwgJ2Vycm9yJywgdmFsdWUpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGNvbXBsZXRlKCkge1xuICAgICAgICAgIG9uTm90aWZ5KHNlbGYsICdjb21wbGV0ZScpO1xuICAgICAgICB9XG5cbiAgICAgIH07XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuX2NsZWFudXAgPSBzdWJzY3JpYmVyLmNhbGwodW5kZWZpbmVkLCBzdWJzY3JpcHRpb25PYnNlcnZlcik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHN1YnNjcmlwdGlvbk9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fc3RhdGUgPT09ICdpbml0aWFsaXppbmcnKSB0aGlzLl9zdGF0ZSA9ICdyZWFkeSc7XG4gICAgfVxuXG4gICAgZ2V0IGNsb3NlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zdGF0ZSA9PT0gJ2Nsb3NlZCc7XG4gICAgfVxuXG4gICAgdW5zdWJzY3JpYmUoKSB7XG4gICAgICBpZiAodGhpcy5fc3RhdGUgIT09ICdjbG9zZWQnKSB7XG4gICAgICAgIGNsb3NlU3Vic2NyaXB0aW9uKHRoaXMpO1xuICAgICAgICBjbGVhbnVwU3Vic2NyaXB0aW9uKHRoaXMpO1xuICAgICAgfVxuICAgIH1cblxuICB9XG5cbiAgbGV0IE9ic2VydmFibGUkMSA9IGNsYXNzIE9ic2VydmFibGUge1xuICAgIGNvbnN0cnVjdG9yKHN1YnNjcmliZXIpIHtcbiAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignT2JzZXJ2YWJsZSBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24nKTtcbiAgICAgIGlmICh0eXBlb2Ygc3Vic2NyaWJlciAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IFR5cGVFcnJvcignT2JzZXJ2YWJsZSBpbml0aWFsaXplciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICAgIHRoaXMuX3N1YnNjcmliZXIgPSBzdWJzY3JpYmVyO1xuICAgIH1cblxuICAgIHN1YnNjcmliZShvYnNlcnZlcikge1xuICAgICAgaWYgKHR5cGVvZiBvYnNlcnZlciAhPT0gJ29iamVjdCcgfHwgb2JzZXJ2ZXIgPT09IG51bGwpIHtcbiAgICAgICAgb2JzZXJ2ZXIgPSB7XG4gICAgICAgICAgbmV4dDogb2JzZXJ2ZXIsXG4gICAgICAgICAgZXJyb3I6IGFyZ3VtZW50c1sxXSxcbiAgICAgICAgICBjb21wbGV0ZTogYXJndW1lbnRzWzJdXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKG9ic2VydmVyLCB0aGlzLl9zdWJzY3JpYmVyKTtcbiAgICB9XG5cbiAgICBmb3JFYWNoKGZuKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoZm4gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJykpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHN1YnNjcmlwdGlvbiA9IHRoaXMuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0KHZhbHVlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBmbih2YWx1ZSwgZG9uZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgICAgY29tcGxldGU6IHJlc29sdmVcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBtYXAoZm4pIHtcbiAgICAgIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBUeXBlRXJyb3IoZm4gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICBsZXQgQyA9IGdldFNwZWNpZXModGhpcyk7XG4gICAgICByZXR1cm4gbmV3IEMob2JzZXJ2ZXIgPT4gdGhpcy5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0KHZhbHVlKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhbHVlID0gZm4odmFsdWUpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgfSxcblxuICAgICAgICBlcnJvcihlKSB7XG4gICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgY29tcGxldGUoKSB7XG4gICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgZmlsdGVyKGZuKSB7XG4gICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgVHlwZUVycm9yKGZuICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgICAgbGV0IEMgPSBnZXRTcGVjaWVzKHRoaXMpO1xuICAgICAgcmV0dXJuIG5ldyBDKG9ic2VydmVyID0+IHRoaXMuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dCh2YWx1ZSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoIWZuKHZhbHVlKSkgcmV0dXJuO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgfSxcblxuICAgICAgICBlcnJvcihlKSB7XG4gICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgY29tcGxldGUoKSB7XG4gICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgcmVkdWNlKGZuKSB7XG4gICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgVHlwZUVycm9yKGZuICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgICAgbGV0IEMgPSBnZXRTcGVjaWVzKHRoaXMpO1xuICAgICAgbGV0IGhhc1NlZWQgPSBhcmd1bWVudHMubGVuZ3RoID4gMTtcbiAgICAgIGxldCBoYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgbGV0IHNlZWQgPSBhcmd1bWVudHNbMV07XG4gICAgICBsZXQgYWNjID0gc2VlZDtcbiAgICAgIHJldHVybiBuZXcgQyhvYnNlcnZlciA9PiB0aGlzLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQodmFsdWUpIHtcbiAgICAgICAgICBsZXQgZmlyc3QgPSAhaGFzVmFsdWU7XG4gICAgICAgICAgaGFzVmFsdWUgPSB0cnVlO1xuXG4gICAgICAgICAgaWYgKCFmaXJzdCB8fCBoYXNTZWVkKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBhY2MgPSBmbihhY2MsIHZhbHVlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhY2MgPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgZXJyb3IoZSkge1xuICAgICAgICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGNvbXBsZXRlKCkge1xuICAgICAgICAgIGlmICghaGFzVmFsdWUgJiYgIWhhc1NlZWQpIHJldHVybiBvYnNlcnZlci5lcnJvcihuZXcgVHlwZUVycm9yKCdDYW5ub3QgcmVkdWNlIGFuIGVtcHR5IHNlcXVlbmNlJykpO1xuICAgICAgICAgIG9ic2VydmVyLm5leHQoYWNjKTtcbiAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBhc3luYyBhbGwoKSB7XG4gICAgICBsZXQgdmFsdWVzID0gW107XG4gICAgICBhd2FpdCB0aGlzLmZvckVhY2godmFsdWUgPT4gdmFsdWVzLnB1c2godmFsdWUpKTtcbiAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgfVxuXG4gICAgY29uY2F0KC4uLnNvdXJjZXMpIHtcbiAgICAgIGxldCBDID0gZ2V0U3BlY2llcyh0aGlzKTtcbiAgICAgIHJldHVybiBuZXcgQyhvYnNlcnZlciA9PiB7XG4gICAgICAgIGxldCBzdWJzY3JpcHRpb247XG4gICAgICAgIGxldCBpbmRleCA9IDA7XG5cbiAgICAgICAgZnVuY3Rpb24gc3RhcnROZXh0KG5leHQpIHtcbiAgICAgICAgICBzdWJzY3JpcHRpb24gPSBuZXh0LnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0KHYpIHtcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh2KTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGVycm9yKGUpIHtcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZSk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBjb21wbGV0ZSgpIHtcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSBzb3VyY2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0YXJ0TmV4dChDLmZyb20oc291cmNlc1tpbmRleCsrXSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXJ0TmV4dCh0aGlzKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICBpZiAoc3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmbGF0TWFwKGZuKSB7XG4gICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgVHlwZUVycm9yKGZuICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgICAgbGV0IEMgPSBnZXRTcGVjaWVzKHRoaXMpO1xuICAgICAgcmV0dXJuIG5ldyBDKG9ic2VydmVyID0+IHtcbiAgICAgICAgbGV0IHN1YnNjcmlwdGlvbnMgPSBbXTtcbiAgICAgICAgbGV0IG91dGVyID0gdGhpcy5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQodmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gZm4odmFsdWUpO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBpbm5lciA9IEMuZnJvbSh2YWx1ZSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgbmV4dCh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgIGVycm9yKGUpIHtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICBjb21wbGV0ZSgpIHtcbiAgICAgICAgICAgICAgICBsZXQgaSA9IHN1YnNjcmlwdGlvbnMuaW5kZXhPZihpbm5lcik7XG4gICAgICAgICAgICAgICAgaWYgKGkgPj0gMCkgc3Vic2NyaXB0aW9ucy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgY29tcGxldGVJZkRvbmUoKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbnMucHVzaChpbm5lcik7XG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGVycm9yKGUpIHtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBjb21wbGV0ZSgpIHtcbiAgICAgICAgICAgIGNvbXBsZXRlSWZEb25lKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZ1bmN0aW9uIGNvbXBsZXRlSWZEb25lKCkge1xuICAgICAgICAgIGlmIChvdXRlci5jbG9zZWQgJiYgc3Vic2NyaXB0aW9ucy5sZW5ndGggPT09IDApIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgIHN1YnNjcmlwdGlvbnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gICAgICAgICAgb3V0ZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIFtTeW1ib2xPYnNlcnZhYmxlXSgpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tKHgpIHtcbiAgICAgIGxldCBDID0gdHlwZW9mIHRoaXMgPT09ICdmdW5jdGlvbicgPyB0aGlzIDogT2JzZXJ2YWJsZTtcbiAgICAgIGlmICh4ID09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoeCArICcgaXMgbm90IGFuIG9iamVjdCcpO1xuICAgICAgbGV0IG1ldGhvZCA9IGdldE1ldGhvZCh4LCBTeW1ib2xPYnNlcnZhYmxlKTtcblxuICAgICAgaWYgKG1ldGhvZCkge1xuICAgICAgICBsZXQgb2JzZXJ2YWJsZSA9IG1ldGhvZC5jYWxsKHgpO1xuICAgICAgICBpZiAoT2JqZWN0KG9ic2VydmFibGUpICE9PSBvYnNlcnZhYmxlKSB0aHJvdyBuZXcgVHlwZUVycm9yKG9ic2VydmFibGUgKyAnIGlzIG5vdCBhbiBvYmplY3QnKTtcbiAgICAgICAgaWYgKGlzT2JzZXJ2YWJsZShvYnNlcnZhYmxlKSAmJiBvYnNlcnZhYmxlLmNvbnN0cnVjdG9yID09PSBDKSByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgICAgICAgcmV0dXJuIG5ldyBDKG9ic2VydmVyID0+IG9ic2VydmFibGUuc3Vic2NyaWJlKG9ic2VydmVyKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChoYXNTeW1ib2woJ2l0ZXJhdG9yJykpIHtcbiAgICAgICAgbWV0aG9kID0gZ2V0TWV0aG9kKHgsIFN5bWJvbEl0ZXJhdG9yKTtcblxuICAgICAgICBpZiAobWV0aG9kKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBDKG9ic2VydmVyID0+IHtcbiAgICAgICAgICAgIGVucXVldWUoKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAob2JzZXJ2ZXIuY2xvc2VkKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBtZXRob2QuY2FsbCh4KSkge1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoaXRlbSk7XG4gICAgICAgICAgICAgICAgaWYgKG9ic2VydmVyLmNsb3NlZCkgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHgpKSB7XG4gICAgICAgIHJldHVybiBuZXcgQyhvYnNlcnZlciA9PiB7XG4gICAgICAgICAgZW5xdWV1ZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAob2JzZXJ2ZXIuY2xvc2VkKSByZXR1cm47XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeC5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHhbaV0pO1xuICAgICAgICAgICAgICBpZiAob2JzZXJ2ZXIuY2xvc2VkKSByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHggKyAnIGlzIG5vdCBvYnNlcnZhYmxlJyk7XG4gICAgfVxuXG4gICAgc3RhdGljIG9mKC4uLml0ZW1zKSB7XG4gICAgICBsZXQgQyA9IHR5cGVvZiB0aGlzID09PSAnZnVuY3Rpb24nID8gdGhpcyA6IE9ic2VydmFibGU7XG4gICAgICByZXR1cm4gbmV3IEMob2JzZXJ2ZXIgPT4ge1xuICAgICAgICBlbnF1ZXVlKCgpID0+IHtcbiAgICAgICAgICBpZiAob2JzZXJ2ZXIuY2xvc2VkKSByZXR1cm47XG5cbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KGl0ZW1zW2ldKTtcbiAgICAgICAgICAgIGlmIChvYnNlcnZlci5jbG9zZWQpIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXQgW1N5bWJvbFNwZWNpZXNdKCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gIH07XG5cbiAgT2JzZXJ2YWJsZSQyLk9ic2VydmFibGUgPSBPYnNlcnZhYmxlJDE7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYnNlcnZhYmxlJDEsIFN5bWJvbCgnZXh0ZW5zaW9ucycpLCB7XG4gICAgdmFsdWU6IHtcbiAgICAgIHN5bWJvbDogU3ltYm9sT2JzZXJ2YWJsZSxcbiAgICAgIGhvc3RSZXBvcnRFcnJvclxuICAgIH0sXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xuXG4gIHZhciB6ZW5PYnNlcnZhYmxlID0gT2JzZXJ2YWJsZSQyLk9ic2VydmFibGU7XG5cbiAgY29uc3QgT2JzZXJ2YWJsZSA9IC8qQF9fUFVSRV9fKi9nZXREZWZhdWx0RXhwb3J0RnJvbUNqcyh6ZW5PYnNlcnZhYmxlKTtcblxuICBjb25zdCB7IGxvZ19fLCBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJpbml0LWZsb3dzXCIpO1xuICBjb25zdCBnZXRPanNJbml0UmVzdWx0c0RlYnVnT2JqZWN0ID0gKCkgPT4ge1xuICAgIGlmICghKFwib2pzX2luaXRfcmVzdWx0c1wiIGluIHdpbmRvdykpIHtcbiAgICAgIHdpbmRvd1tcIm9qc19pbml0X3Jlc3VsdHNcIl0gPSB7fTtcbiAgICB9XG4gICAgcmV0dXJuIHdpbmRvd1tcIm9qc19pbml0X3Jlc3VsdHNcIl07XG4gIH07XG4gIGNvbnN0IGluaXRpYWxpemVPanNGbG93cyA9IChjb250ZXh0LCBmbG93Q2FsbGJhY2tzKSA9PiB7XG4gICAgY29uc3QgaW5pdFBhcmFtcyA9IHsgY29udGV4dCwgZmxvd0NhbGxiYWNrcyB9O1xuICAgIGNvbnNvbGUubG9nKFwiW09KU10gaW5pdGlhbGl6aW5nIE9KUyBmbG93cy4uLlwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gU3RyaXBlIFBSXG4gICAgICBzdHJpcGVQUjogcnVuSW5pdEZsb3dBc09ic2VydmFibGUoXCJzdHJpcGVQUlwiLCBPanNGbG93cy5zdHJpcGVQUi5pbml0KGluaXRQYXJhbXMpKSxcbiAgICAgIC8vIFN0cmlwZSBMaW5rXG4gICAgICBzdHJpcGVMaW5rOiBydW5Jbml0Rmxvd0FzT2JzZXJ2YWJsZShcInN0cmlwZUxpbmtcIiwgT2pzRmxvd3Muc3RyaXBlTGluay5pbml0KGluaXRQYXJhbXMpKVxuICAgICAgLy8g8J+RiSBBZGQgaW5pdGlhbGl6YXRpb24gZmxvd3MgaGVyZVxuICAgIH07XG4gIH07XG4gIGNvbnN0IHJ1bkluaXRGbG93QXNPYnNlcnZhYmxlID0gKGZsb3dOYW1lLCBpbml0RmxvdykgPT4ge1xuICAgIGNvbnN0IG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXIpID0+IHtcbiAgICAgIG9ic2VydmVyLm5leHQoeyBzdGF0dXM6IFwibG9hZGluZ1wiIH0pO1xuICAgICAgaW5pdEZsb3cudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgIG9ic2VydmVyLm5leHQoeyBzdGF0dXM6IFwibG9hZGVkXCIsIHJlc3VsdCB9KTtcbiAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICBvYnNlcnZlci5uZXh0KHsgc3RhdHVzOiBcImVycm9yXCIsIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBvYnNlcnZhYmxlLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzdWx0KSA9PiB7XG4gICAgICAgIGxvZ19fKGAke2Zsb3dOYW1lfSBmbG93IHJlc3VsdGAsIHJlc3VsdCk7XG4gICAgICAgIGdldE9qc0luaXRSZXN1bHRzRGVidWdPYmplY3QoKVtmbG93TmFtZV0gPSByZXN1bHQ7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICBlcnJfXyhgJHtmbG93TmFtZX0gZmxvdyBpbml0aWFsaXphdGlvbiBlcnJvcjpcbiR7SlNPTi5zdHJpbmdpZnkoZXJyb3IpfWApO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgfTtcblxuICBjb25zdCBQUl9MT0FESU5HID0ge1xuICAgIGlzTG9hZGluZzogdHJ1ZSxcbiAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBzdGFydEZsb3cgdHJpZ2dlcmVkIHdoaWxlIHBheW1lbnQgcmVxdWVzdCBpcyBzdGlsbCBub3QgcmVhZHkuIFxuICAgICAgWW91IGNhbiBjaGVjayB0aGUgXCIuaXNMb2FkaW5nXCIgcGFyYW0gdG8ga25vdyB3aGVuIGEgcGF5bWVudCByZXF1ZXN0IGlzIHN0aWxsIGxvYWRpbmcsIFxuICAgICAgYW5kIFwiLmlzQXZhaWxhYmxlXCIgdG8ga25vdyBpZiBhIHBheW1lbnQgcmVxdWVzdCBpcyBhdmFpbGFibGUuYFxuICAgICAgKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IFBSX0VSUk9SID0ge1xuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcihgc3RhcnRGbG93IHRyaWdnZXJlZCB3aGVuIHBheW1lbnQgcmVxdWVzdCBpcyBub3QgYXZhaWxhYmxlLmApO1xuICAgIH1cbiAgfTtcblxuICBjbGFzcyBPcGVuUGF5Rm9ybUV2ZW50SGFuZGxlciB7XG4gICAgY29uc3RydWN0b3IoZm9ybUluc3RhbmNlKSB7XG4gICAgICB0aGlzLmZvcm1JbnN0YW5jZSA9IGZvcm1JbnN0YW5jZTtcbiAgICAgIHRoaXMuY29uZmlnID0gZm9ybUluc3RhbmNlLmNvbmZpZztcbiAgICAgIHRoaXMuZm9ybUlkID0gZm9ybUluc3RhbmNlLmZvcm1JZDtcbiAgICAgIHRoaXMuZXZlbnRUYXJnZXRzID0ge307XG4gICAgICB0aGlzLm5vbmNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG4gICAgfVxuICAgIGhhbmRsZU1lc3NhZ2UoZXZlbnQpIHtcbiAgICAgIGlmICghZXZlbnQuc291cmNlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gc291cmNlIGZvdW5kYCk7XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQub3JpZ2luICE9PSB0aGlzLmZvcm1JbnN0YW5jZS5jb25maWcuX2ZyYW1lVXJsPy5vcmlnaW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBldmVudC5kYXRhID09PSBcIm9iamVjdFwiICYmIGV2ZW50LmRhdGFbXCJwZW5wYWxcIl0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZXZlbnREYXRhID0gcGFyc2VFdmVudFBheWxvYWQoSlNPTi5wYXJzZShldmVudC5kYXRhKSk7XG4gICAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy52YWxpZGF0ZUV2ZW50KGV2ZW50RGF0YSk7XG4gICAgICBpZiAoIWlzVmFsaWQpIHJldHVybjtcbiAgICAgIGNvbnN0IHsgZWxlbWVudElkLCBwYXlsb2FkIH0gPSBldmVudERhdGE7XG4gICAgICBjb25zdCBldmVudFR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gICAgICBzd2l0Y2ggKGV2ZW50VHlwZSkge1xuICAgICAgICBjYXNlIFwiTEFZT1VUXCI6XG4gICAgICAgICAgdGhpcy5oYW5kbGVMYXlvdXRFdmVudChwYXlsb2FkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkZPQ1VTXCI6XG4gICAgICAgICAgdGhpcy5oYW5kbGVGb2N1c0V2ZW50KGVsZW1lbnRJZCwgcGF5bG9hZC5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJCTFVSXCI6XG4gICAgICAgICAgdGhpcy5oYW5kbGVCbHVyRXZlbnQoZWxlbWVudElkLCBwYXlsb2FkLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkNIQU5HRVwiOlxuICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlRXZlbnQoZWxlbWVudElkLCBwYXlsb2FkLmVsZW1lbnRUeXBlLCBwYXlsb2FkLmVycm9ycyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FERURcIjpcbiAgICAgICAgICB0aGlzLmhhbmRsZUxvYWRlZEV2ZW50KGV2ZW50LnNvdXJjZSwgZWxlbWVudElkLCBwYXlsb2FkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURfRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmhhbmRsZUxvYWRFcnJvckV2ZW50KHBheWxvYWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiVkFMSURBVElPTl9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuaGFuZGxlVmFsaWRhdGlvbkVycm9yRXZlbnQocGF5bG9hZCwgZWxlbWVudElkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25zb2xlLndhcm4oXCJbZm9ybV0gVW5oYW5kbGVkIGV2ZW50IHR5cGU6XCIsIGV2ZW50VHlwZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHZhbGlkYXRlRXZlbnQoZXZlbnREYXRhKSB7XG4gICAgICBpZiAoZXZlbnREYXRhLmZvcm1JZCAhPT0gdGhpcy5mb3JtSW5zdGFuY2UuZm9ybUlkIHx8ICFldmVudERhdGEuZWxlbWVudElkKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyB1bmtub3duIGV2ZW50OlwiLCBldmVudERhdGEpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5ub25jZXMuaGFzKGV2ZW50RGF0YS5ub25jZSkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIGR1cGxpY2F0ZSBldmVudDpcIiwgZXZlbnREYXRhKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5ub25jZXMuYWRkKGV2ZW50RGF0YS5ub25jZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaGFuZGxlTGF5b3V0RXZlbnQocGF5bG9hZCkge1xuICAgICAgY29uc3QgaGVpZ2h0ID0gcGF5bG9hZC5oZWlnaHQgPyBgJHtwYXlsb2FkLmhlaWdodH1weGAgOiBcIjEwMCVcIjtcbiAgICAgIHRoaXMuZm9ybUluc3RhbmNlLnNldEZvcm1IZWlnaHQoaGVpZ2h0KTtcbiAgICB9XG4gICAgaGFuZGxlRm9jdXNFdmVudChlbGVtZW50SWQsIGZpZWxkKSB7XG4gICAgICBpZiAodGhpcy5jb25maWcub25Gb2N1cykgdGhpcy5jb25maWcub25Gb2N1cyhlbGVtZW50SWQsIGZpZWxkKTtcbiAgICB9XG4gICAgaGFuZGxlQmx1ckV2ZW50KGVsZW1lbnRJZCwgZmllbGQpIHtcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5vbkJsdXIpIHRoaXMuY29uZmlnLm9uQmx1cihlbGVtZW50SWQsIGZpZWxkKTtcbiAgICB9XG4gICAgaGFuZGxlQ2hhbmdlRXZlbnQoZWxlbWVudElkLCBmaWVsZCwgZXJyb3JzKSB7XG4gICAgICBpZiAodGhpcy5jb25maWcub25DaGFuZ2UpIHRoaXMuY29uZmlnLm9uQ2hhbmdlKGVsZW1lbnRJZCwgZmllbGQsIGVycm9ycyk7XG4gICAgfVxuICAgIGFzeW5jIGhhbmRsZUxvYWRlZEV2ZW50KHNvdXJjZSwgZWxlbWVudElkLCBwYXlsb2FkKSB7XG4gICAgICBjb25zb2xlLmxvZyhcImhhbmRsZUxvYWRlZEV2ZW50IGlzIGRlcHJlY2F0ZWQ6XCIsIHNvdXJjZSwgZWxlbWVudElkLCBwYXlsb2FkKTtcbiAgICAgIHRoaXMuZXZlbnRUYXJnZXRzW2VsZW1lbnRJZF0gPSBzb3VyY2U7XG4gICAgICB0aGlzLmZvcm1JbnN0YW5jZS5vbkNkZUxvYWRlZChwYXlsb2FkKTtcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5vbkxvYWQpIHtcbiAgICAgICAgdGhpcy5jb25maWcub25Mb2FkKHBheWxvYWQudG90YWxBbW91bnRBdG9tcywgcGF5bG9hZC5jdXJyZW5jeSk7XG4gICAgICB9XG4gICAgfVxuICAgIGhhbmRsZUxvYWRFcnJvckV2ZW50KHBheWxvYWQpIHtcbiAgICAgIGlmICh0aGlzLmZvcm1JbnN0YW5jZS5jb25maWcub25Mb2FkRXJyb3IpIHRoaXMuZm9ybUluc3RhbmNlLmNvbmZpZy5vbkxvYWRFcnJvcihwYXlsb2FkLm1lc3NhZ2UpO1xuICAgIH1cbiAgICBoYW5kbGVWYWxpZGF0aW9uRXJyb3JFdmVudChwYXlsb2FkLCBlbGVtZW50SWQpIHtcbiAgICAgIGlmICh0aGlzLmZvcm1JbnN0YW5jZS5jb25maWcub25WYWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgICAgdGhpcy5mb3JtSW5zdGFuY2UuY29uZmlnLm9uVmFsaWRhdGlvbkVycm9yKHBheWxvYWQuZWxlbWVudFR5cGUsIHBheWxvYWQuZXJyb3JzLCBlbGVtZW50SWQpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBhc3luYyBoYW5kbGVFcnJvckV2ZW50KHBheWxvYWQ6IEVycm9yRXZlbnRQYXlsb2FkKSB7XG4gICAgLy8gICBpZiAocGF5bG9hZC5tZXNzYWdlID09PSAnM0RTX1JFUVVJUkVEJykge1xuICAgIC8vICAgICBjb25zdCB0aHJlZURTVXJsID0gcGF5bG9hZC5oZWFkZXJzPy5bJ3gtM2RzLWF1dGgtdXJsJ10gPz8gU0lNVUxBVEVfM0RTX1VSTDtcbiAgICAvLyAgICAgLy8gVGhpcyB3aWxsIG9wZW4gYSBwb3B1cCBhbmQgcHJvY2VzcyB0aGUgM0RTIGZsb3dcbiAgICAvLyAgICAgLy8gd2lsbCByZXR1cm4gYSBzdGF0dXMgYHN1Y2Nlc3NgIHwgYGZhaWx1cmVgIHwgYGNhbmNlbGxlZGAgd2hpY2ggd2UgY2FuIGNvbnRpbnVlIHdpdGhcbiAgICAvLyAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oeyB1cmw6IHRocmVlRFNVcmwsIGJhc2VVcmw6IHRoaXMuY29uZmlnLmJhc2VVcmwhIH0pO1xuICAgIC8vICAgICBjb25zb2xlLmxvZygn8J+UkCAzRFMgc3RhdHVzOicsIHN0YXR1cyk7XG4gICAgLy8gICAgIC8vIFRPRE86IGNvbnRpbnVlIHdpdGggc3RhdHVzXG4gICAgLy8gICAgIGNvbnN0IGNhcmRDcG0gPSB0aGlzLmZvcm1JbnN0YW5jZS5jaGVja291dFBheW1lbnRNZXRob2RzPy5maW5kKChjcG0pID0+IGNwbS5wcm92aWRlciA9PT0gJ2NyZWRpdF9jYXJkJyk7XG4gICAgLy8gICAgIGlmICghdGhpcy5mb3JtSW5zdGFuY2Uuc2Vzc2lvbklkIHx8ICF0aGlzLmZvcm1JbnN0YW5jZS5mb3JtVGFyZ2V0IHx8ICF0aGlzLmNvbmZpZy5vblZhbGlkYXRpb25FcnJvciB8fCAhY2FyZENwbSlcbiAgICAvLyAgICAgICByZXR1cm47XG4gICAgLy8gICAgIGZvciAoY29uc3QgW2VsZW1lbnRJZCwgdGFyZ2V0XSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmV2ZW50VGFyZ2V0cykpIHtcbiAgICAvLyAgICAgICBpZiAoIXRhcmdldCkgY29udGludWU7XG4gICAgLy8gICAgICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd0V2ZW50ID0gY29uc3RydWN0U3VibWl0RXZlbnRQYXlsb2FkKFxuICAgIC8vICAgICAgICAgRXZlbnRUeXBlLmVudW0uU1RBUlRfUEFZTUVOVF9GTE9XLFxuICAgIC8vICAgICAgICAgdGhpcy5mb3JtSW5zdGFuY2Uuc2Vzc2lvbklkLFxuICAgIC8vICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmZvcm1JbnN0YW5jZS5mb3JtVGFyZ2V0KSA/PyBkb2N1bWVudC5ib2R5LFxuICAgIC8vICAgICAgICAgdGhpcy5jb25maWcub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgLy8gICAgICAgICB7IC4uLmNhcmRDcG0sIHByb2Nlc3Nvcl9uYW1lOiAnc3RyaXBlJyB9LFxuICAgIC8vICAgICAgICAgZmFsc2VcbiAgICAvLyAgICAgICApO1xuICAgIC8vICAgICAgIGlmICghc3RhcnRQYXltZW50Rmxvd0V2ZW50KSBjb250aW51ZTtcbiAgICAvLyAgICAgICB0aGlzLmZvcm1JbnN0YW5jZS5jaGVja291dEZpcmVkID0gdHJ1ZTtcbiAgICAvLyAgICAgICB0aGlzLnRva2VuaXplZERhdGEgPSBzdGFydFBheW1lbnRGbG93RXZlbnQ7XG4gICAgLy8gICAgICAgdGhpcy5wb3N0RXZlbnRUb0ZyYW1lKHRhcmdldCwgZWxlbWVudElkLCBzdGFydFBheW1lbnRGbG93RXZlbnQpO1xuICAgIC8vICAgICAgIGJyZWFrO1xuICAgIC8vICAgICB9XG4gICAgLy8gICB9IGVsc2Uge1xuICAgIC8vICAgICB0aGlzLmZvcm1JbnN0YW5jZS5jaGVja291dEZpcmVkID0gZmFsc2U7XG4gICAgLy8gICAgIGlmICh0aGlzLmZvcm1JbnN0YW5jZS5jb25maWcub25DaGVja291dEVycm9yKSB0aGlzLmZvcm1JbnN0YW5jZS5jb25maWcub25DaGVja291dEVycm9yKHBheWxvYWQubWVzc2FnZSk7XG4gICAgLy8gICB9XG4gICAgLy8gfVxuICAgIC8vIGhhbmRsZUZvcm1TdWJtaXQoKSB7XG4gICAgLy8gICBpZiAoXG4gICAgLy8gICAgICF0aGlzLmZvcm1JbnN0YW5jZS5zZXNzaW9uSWQgfHxcbiAgICAvLyAgICAgIXRoaXMuZm9ybUluc3RhbmNlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHM/Lmxlbmd0aCB8fFxuICAgIC8vICAgICAhdGhpcy5jb25maWcub25WYWxpZGF0aW9uRXJyb3JcbiAgICAvLyAgICkge1xuICAgIC8vICAgICByZXR1cm47XG4gICAgLy8gICB9XG4gICAgLy8gICBjb25zdCBjYXJkQ3BtID0gdGhpcy5mb3JtSW5zdGFuY2UuY2hlY2tvdXRQYXltZW50TWV0aG9kcy5maW5kKChjcG0pID0+IGNwbS5wcm92aWRlciA9PT0gJ2NyZWRpdF9jYXJkJyk7XG4gICAgLy8gICBpZiAoIWNhcmRDcG0pIHtcbiAgICAvLyAgICAgdGhyb3cgbmV3IEVycm9yKCdDYXJkIG5vdCBhdmFpbGFibGUgYXMgYSBwYXltZW50IG1ldGhvZCBpbiBjaGVja291dCcpO1xuICAgIC8vICAgfVxuICAgIC8vICAgY29uc3QgdG9rZW5pemVEYXRhID0gY29uc3RydWN0U3VibWl0RXZlbnRQYXlsb2FkKFxuICAgIC8vICAgICBFdmVudFR5cGUuZW51bS5UT0tFTklaRSxcbiAgICAvLyAgICAgdGhpcy5mb3JtSW5zdGFuY2Uuc2Vzc2lvbklkISxcbiAgICAvLyAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmZvcm1JbnN0YW5jZS5mb3JtVGFyZ2V0KSA/PyBkb2N1bWVudC5ib2R5LFxuICAgIC8vICAgICB0aGlzLmNvbmZpZy5vblZhbGlkYXRpb25FcnJvcixcbiAgICAvLyAgICAgY2FyZENwbSxcbiAgICAvLyAgICAgZmFsc2VcbiAgICAvLyAgICk7XG4gICAgLy8gICBpZiAoIXRva2VuaXplRGF0YSkge1xuICAgIC8vICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yIGNvbnN0cnVjdGluZyB0b2tlbml6ZSBkYXRhJyk7XG4gICAgLy8gICB9XG4gICAgLy8gICBmb3IgKGNvbnN0IFtlbGVtZW50SWQsIHRhcmdldF0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5ldmVudFRhcmdldHMpKSB7XG4gICAgLy8gICAgIGlmICghdGFyZ2V0KSBjb250aW51ZTtcbiAgICAvLyAgICAgdGhpcy5wb3N0RXZlbnRUb0ZyYW1lKHRhcmdldCwgZWxlbWVudElkLCB0b2tlbml6ZURhdGEpO1xuICAgIC8vICAgfVxuICAgIC8vICAgdGhpcy50b2tlbml6ZWREYXRhID0gdG9rZW5pemVEYXRhO1xuICAgIC8vIH1cbiAgICAvLyBhc3luYyBvblVzZXJDb21wbGV0ZVBheW1lbnRSZXF1ZXN0VUkoXG4gICAgLy8gICBzdHJpcGVQbTogUGF5bWVudFJlcXVlc3RQYXltZW50TWV0aG9kRXZlbnQsXG4gICAgLy8gICBjaGVja291dFBheW1lbnRNZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgIC8vICk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vICAgaWYgKCF0aGlzLmNvbmZpZy5vblZhbGlkYXRpb25FcnJvciB8fCAhdGhpcy5mb3JtSW5zdGFuY2Uuc2Vzc2lvbklkIHx8ICF0aGlzLmZvcm1JbnN0YW5jZS5jaGVja291dFBheW1lbnRNZXRob2RzKVxuICAgIC8vICAgICByZXR1cm47XG4gICAgLy8gICBmb3IgKGNvbnN0IFtlbGVtZW50SWQsIGVsZW1lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuZXZlbnRUYXJnZXRzID8/IHt9KSkge1xuICAgIC8vICAgICBjb25zdCBwYXltZW50Rmxvd01ldGFkYXRhID0geyBzdHJpcGVQbUlkOiBzdHJpcGVQbS5wYXltZW50TWV0aG9kLmlkIH07XG4gICAgLy8gICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dFdmVudCA9IGNvbnN0cnVjdFN1Ym1pdEV2ZW50UGF5bG9hZChcbiAgICAvLyAgICAgICBFdmVudFR5cGUuZW51bS5TVEFSVF9QQVlNRU5UX0ZMT1csXG4gICAgLy8gICAgICAgdGhpcy5mb3JtSW5zdGFuY2Uuc2Vzc2lvbklkLFxuICAgIC8vICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5mb3JtSW5zdGFuY2UuZm9ybVRhcmdldCkgPz8gZG9jdW1lbnQuYm9keSxcbiAgICAvLyAgICAgICB0aGlzLmNvbmZpZy5vblZhbGlkYXRpb25FcnJvcixcbiAgICAvLyAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgLy8gICAgICAgZmFsc2UsXG4gICAgLy8gICAgICAgcGF5bWVudEZsb3dNZXRhZGF0YVxuICAgIC8vICAgICApO1xuICAgIC8vICAgICBpZiAoIXN0YXJ0UGF5bWVudEZsb3dFdmVudCkgY29udGludWU7XG4gICAgLy8gICAgIHRoaXMuc3RyaXBlUG0gPSBzdHJpcGVQbTtcbiAgICAvLyAgICAgdGhpcy5mb3JtSW5zdGFuY2UuY2hlY2tvdXRGaXJlZCA9IHRydWU7XG4gICAgLy8gICAgIHRoaXMuc2V0VG9rZW5pemVkRGF0YShzdGFydFBheW1lbnRGbG93RXZlbnQpO1xuICAgIC8vICAgICB0aGlzLnBvc3RFdmVudFRvRnJhbWUoZWxlbWVudCwgZWxlbWVudElkLCBzdGFydFBheW1lbnRGbG93RXZlbnQpO1xuICAgIC8vICAgICAvLyBlbWl0RXZlbnQoZWxlbWVudC5ub2RlLmNvbnRlbnRXaW5kb3chLCB0aGlzLmZvcm1JZCwgZWxlbWVudElkLCBzdGFydFBheW1lbnRGbG93RXZlbnQsIHRoaXMuY29uZmlnLmJhc2VVcmwhKTtcbiAgICAvLyAgICAgYnJlYWs7XG4gICAgLy8gICB9XG4gICAgLy8gfVxuICAgIHBvc3RFdmVudFRvRnJhbWUoc291cmNlLCBlbGVtZW50SWQsIGRhdGEpIHtcbiAgICAgIGVtaXRFdmVudChzb3VyY2UsIHRoaXMuZm9ybUlkLCBlbGVtZW50SWQsIGRhdGEsIHRoaXMuY29uZmlnLmJhc2VVcmwpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUNvbm5lY3Rpb24oaWZyYW1lLCBjaGlsZE9yaWdpbikge1xuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBwZW5wYWwuY29ubmVjdFRvQ2hpbGQoe1xuICAgICAgaWZyYW1lLFxuICAgICAgZGVidWc6IGZhbHNlLFxuICAgICAgY2hpbGRPcmlnaW5cbiAgICB9KTtcbiAgICBjb25zdCBjb25uZWN0aW9uT2JqID0gYXdhaXQgY29ubmVjdGlvbi5wcm9taXNlO1xuICAgIGNvbnN0IGlzVmFsaWRPYmplY3QgPSBhd2FpdCBjaGVja0lmVmFsaWRDZGVDb25uZWN0aW9uT2JqZWN0KGNvbm5lY3Rpb25PYmopO1xuICAgIGlmICghaXNSZXN1bHRWYWxpZChjb25uZWN0aW9uT2JqLCBpc1ZhbGlkT2JqZWN0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBHb3QgaW52YWxpZCBDREUgY29ubmVjdGlvbiBvYmplY3RgKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbm5lY3Rpb25PYmo7XG4gIH1cbiAgY2xhc3MgQ29ubmVjdGlvbk1hbmFnZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgdGhpcy5jb25uZWN0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gICAgfVxuICAgIGFkZENvbm5lY3Rpb24oaWQsIGNvbm5lY3Rpb24pIHtcbiAgICAgIHRoaXMuY29ubmVjdGlvbnMuc2V0KGlkLCBjb25uZWN0aW9uKTtcbiAgICB9XG4gICAgZ2V0Q29ubmVjdGlvbigpIHtcbiAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSB0aGlzLmNvbm5lY3Rpb25zLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgICAgIGlmICghY29ubmVjdGlvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25uZWN0aW9uIG5vdCBmb3VuZFwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb25uZWN0aW9uO1xuICAgIH1cbiAgICBnZXRBbGxDb25uZWN0aW9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25zO1xuICAgIH1cbiAgfVxuXG4gIGNsYXNzIE9wZW5QYXlGb3JtIHtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICAgIHRoaXMudHJ5SW5pdE9qc0Zsb3dzID0gKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5vanNGbG93c0luaXRpYWxpemF0aW9uICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5jZGVMb2FkZWRQYXlsb2FkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmdldEFsbENvbm5lY3Rpb25zKCkuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9qc0Zsb3dzSW5pdGlhbGl6YXRpb24gPSBpbml0aWFsaXplT2pzRmxvd3ModGhpcy5jcmVhdGVPanNGbG93Q29udGV4dCgpLCB0aGlzLmNyZWF0ZU9qc0Zsb3dDYWxsYmFja3MoKSk7XG4gICAgICAgIHRoaXMub2pzRmxvd3NJbml0aWFsaXphdGlvbi5zdHJpcGVQUi5zdWJzY3JpYmUoKHN0YXR1cykgPT4gdGhpcy5vblN0cmlwZVBSU3RhdHVzQ2hhbmdlKHN0YXR1cykpO1xuICAgICAgfTtcbiAgICAgIHRoaXMub25DZGVMb2FkZWQgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jZGVMb2FkZWRQYXlsb2FkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RlTG9hZGVkUGF5bG9hZCA9IHBheWxvYWQ7XG4gICAgICAgIHRoaXMudHJ5SW5pdE9qc0Zsb3dzKCk7XG4gICAgICB9O1xuICAgICAgdGhpcy5vblN0cmlwZVBSU3RhdHVzQ2hhbmdlID0gKGluaXRTdGF0dXMpID0+IHtcbiAgICAgICAgaWYgKGluaXRTdGF0dXMuc3RhdHVzID09PSBcImxvYWRpbmdcIikge1xuICAgICAgICAgIHRoaXMuY29uZmlnLm9uUGF5bWVudFJlcXVlc3RMb2FkPy4oeyBhcHBsZV9wYXk6IFBSX0xPQURJTkcsIGdvb2dsZV9wYXk6IFBSX0xPQURJTkcgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5pdFN0YXR1cy5zdGF0dXMgPT09IFwiZXJyb3JcIikge1xuICAgICAgICAgIHRoaXMuY29uZmlnLm9uUGF5bWVudFJlcXVlc3RMb2FkPy4oeyBhcHBsZV9wYXk6IFBSX0VSUk9SLCBnb29nbGVfcGF5OiBQUl9FUlJPUiB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChpbml0U3RhdHVzLnN0YXR1cyA9PT0gXCJsb2FkZWRcIikge1xuICAgICAgICAgIGNvbnN0IGluaXRSZXN1bHQgPSBpbml0U3RhdHVzLnJlc3VsdDtcbiAgICAgICAgICBjb25zdCBjYW5BcHBsZVBheSA9IGluaXRSZXN1bHQuaXNBdmFpbGFibGUgJiYgaW5pdFJlc3VsdC5hdmFpbGFibGVQcm92aWRlcnMuYXBwbGVQYXk7XG4gICAgICAgICAgY29uc3QgY2FuR29vZ2xlUGF5ID0gaW5pdFJlc3VsdC5pc0F2YWlsYWJsZSAmJiBpbml0UmVzdWx0LmF2YWlsYWJsZVByb3ZpZGVycy5nb29nbGVQYXk7XG4gICAgICAgICAgdGhpcy5jb25maWcub25QYXltZW50UmVxdWVzdExvYWQ/Lih7XG4gICAgICAgICAgICBhcHBsZV9wYXk6IHtcbiAgICAgICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgaXNBdmFpbGFibGU6IGNhbkFwcGxlUGF5LFxuICAgICAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1c2VyUGFyYW1zKSA9PiBjYW5BcHBsZVBheSA/IHRoaXMuc3VibWl0UGF5bWVudFJlcXVlc3QoXCJhcHBsZV9wYXlcIiwgaW5pdFJlc3VsdCwgdXNlclBhcmFtcykgOiB2b2lkIDBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnb29nbGVfcGF5OiB7XG4gICAgICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBjYW5Hb29nbGVQYXksXG4gICAgICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHVzZXJQYXJhbXMpID0+IGNhbkdvb2dsZVBheSA/IHRoaXMuc3VibWl0UGF5bWVudFJlcXVlc3QoXCJnb29nbGVfcGF5XCIsIGluaXRSZXN1bHQsIHVzZXJQYXJhbXMpIDogdm9pZCAwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB0aGlzLnN1Ym1pdFBheW1lbnRSZXF1ZXN0ID0gKHByb3ZpZGVyLCBpbml0UmVzdWx0LCBwYXJhbXMpID0+IHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuY3JlYXRlT2pzRmxvd0NvbnRleHQoKTtcbiAgICAgICAgcmV0dXJuIE9qc0Zsb3dzLnN0cmlwZVBSLnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBwcm92aWRlciksXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgZmxvd0NhbGxiYWNrczogdGhpcy5jcmVhdGVPanNGbG93Q2FsbGJhY2tzKCksXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBwYXJhbXM/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgICAgICAgICBpbml0UmVzdWx0XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIE9wZW5QYXlGb3JtLmFzc2lnbkFzU2luZ2xldG9uKHRoaXMpO1xuICAgICAgdGhpcy5jb25maWcgPSB7IC4uLmNvbmZpZywgYmFzZVVybDogY29uZmlnLmJhc2VVcmwgPz8gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiIH07XG4gICAgICB0aGlzLmVsZW1lbnRzID0gbnVsbDtcbiAgICAgIHRoaXMuZm9ybUlkID0gYG9wanMtZm9ybS0ke3dpbmRvdy5jcnlwdG8ucmFuZG9tVVVJRCgpfWA7XG4gICAgICB0aGlzLnJlZmVyZXIgPSB3aW5kb3cubG9jYXRpb24ub3JpZ2luO1xuICAgICAgdGhpcy5mb3JtVGFyZ2V0ID0gY29uZmlnLmZvcm1UYXJnZXQgPz8gXCJib2R5XCI7XG4gICAgICB0aGlzLmZvcm1Qcm9wZXJ0aWVzID0geyBoZWlnaHQ6IFwiMXB4XCIgfTtcbiAgICAgIHRoaXMuY2RlTG9hZGVkUGF5bG9hZCA9IG51bGw7XG4gICAgICB0aGlzLm9qc0Zsb3dzSW5pdGlhbGl6YXRpb24gPSBudWxsO1xuICAgICAgdGhpcy5jaGVja291dEZpcmVkID0gZmFsc2U7XG4gICAgICB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyID0gbmV3IENvbm5lY3Rpb25NYW5hZ2VyKCk7XG4gICAgICB0aGlzLmV2ZW50SGFuZGxlciA9IG5ldyBPcGVuUGF5Rm9ybUV2ZW50SGFuZGxlcih0aGlzKTtcbiAgICAgIHRoaXMub2pzVmVyc2lvbiA9IFwiMC4xLjEwXCI7XG4gICAgICB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uID0gXCIwLjEuMTAtYWxwaGEuODNkZGRmMFwiO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpO1xuICAgIH1cbiAgICBzdGF0aWMge1xuICAgICAgdGhpcy5vanNGbG93cyA9IE9qc0Zsb3dzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBc3NpZ24gdGhlIGluc3RhbmNlIHRvIHRoZSB3aW5kb3cgYXMgYSBzaW5nbGV0b25cbiAgICAgKiBAcGFyYW0gZm9ybSAtIFRoZSBPcGVuUGF5Rm9ybSBpbnN0YW5jZVxuICAgICAqL1xuICAgIHN0YXRpYyBhc3NpZ25Bc1NpbmdsZXRvbihmb3JtKSB7XG4gICAgICBpZiAoT3BlblBheUZvcm0uZ2V0SW5zdGFuY2UoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuUGF5IGluc3RhbmNlIGFscmVhZHkgZXhpc3RzLiBPbmx5IG9uZSBpbnN0YW5jZSBpcyBhbGxvd2VkLlwiKTtcbiAgICAgIH1cbiAgICAgIHdpbmRvd1tcIm9qc1wiXSA9IGZvcm07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIE9wZW5QYXlGb3JtXG4gICAgICogQHJldHVybnMgVGhlIE9wZW5QYXlGb3JtIGluc3RhbmNlXG4gICAgICovXG4gICAgc3RhdGljIGdldEluc3RhbmNlKCkge1xuICAgICAgcmV0dXJuIHdpbmRvd1tcIm9qc1wiXSA/PyBudWxsO1xuICAgIH1cbiAgICBnZXRDb25uZWN0aW9uTWFuYWdlcigpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyO1xuICAgIH1cbiAgICBzZXRGb3JtSGVpZ2h0KGhlaWdodCkge1xuICAgICAgdGhpcy5mb3JtUHJvcGVydGllcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICBpZiAodGhpcy5lbGVtZW50cykge1xuICAgICAgICBPYmplY3QudmFsdWVzKHRoaXMuZWxlbWVudHMpLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICBlbGVtZW50Lm5vZGUuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgY3JlYXRlRWxlbWVudChlbGVtZW50VmFsdWUsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgaWYgKCF0aGlzLmNvbmZpZykgdGhyb3cgbmV3IEVycm9yKFwiT3BlblBheSBmb3JtIG5vdCBpbml0aWFsaXplZFwiKTtcbiAgICAgIGNvbnN0IHR5cGUgPSBFbGVtZW50VHlwZS5wYXJzZShlbGVtZW50VmFsdWUpO1xuICAgICAgY29uc3QgZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpO1xuICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSB0aGlzLmJ1aWxkUXVlcnlTdHJpbmcob3B0aW9ucyk7XG4gICAgICBmcmFtZS5uYW1lID0gYCR7dHlwZX0tZWxlbWVudGA7XG4gICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGAvYXBwL3YxLyR7ZnJhbWUubmFtZX1gLCB0aGlzLmNvbmZpZy5iYXNlVXJsKTtcbiAgICAgIHVybC5zZWFyY2ggPSBxdWVyeVN0cmluZy50b1N0cmluZygpO1xuICAgICAgZnJhbWUuc3JjID0gdXJsLmhyZWY7XG4gICAgICB0aGlzLmNvbmZpZy5fZnJhbWVVcmwgPSB1cmw7XG4gICAgICBmcmFtZS5zdHlsZS5ib3JkZXIgPSBcIm5vbmVcIjtcbiAgICAgIGZyYW1lLnN0eWxlLndpZHRoID0gXCIxMDAlXCI7XG4gICAgICBjb25zdCBlbGVtZW50ID0ge1xuICAgICAgICB0eXBlLFxuICAgICAgICBub2RlOiBmcmFtZSxcbiAgICAgICAgbW91bnQ6IChzZWxlY3RvcikgPT4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik/LmFwcGVuZENoaWxkKGZyYW1lKVxuICAgICAgfTtcbiAgICAgIHRoaXMuY29ubmVjdFRvRWxlbWVudChlbGVtZW50KTtcbiAgICAgIGlmICh0aGlzLmVsZW1lbnRzKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudHNbdHlwZV0gPSBlbGVtZW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lbGVtZW50cyA9IHsgW3R5cGVdOiBlbGVtZW50IH07XG4gICAgICB9XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG4gICAgYnVpbGRRdWVyeVN0cmluZyhvcHRpb25zKSB7XG4gICAgICBjb25zdCBxdWVyeVN0cmluZyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgIHF1ZXJ5U3RyaW5nLmFwcGVuZChcInJlZmVyZXJcIiwgdGhpcy5yZWZlcmVyKTtcbiAgICAgIHF1ZXJ5U3RyaW5nLmFwcGVuZChcImZvcm1JZFwiLCB0aGlzLmZvcm1JZCk7XG4gICAgICBpZiAob3B0aW9ucy5zdHlsZXMpIHtcbiAgICAgICAgcXVlcnlTdHJpbmcuYXBwZW5kKFwic3R5bGVzXCIsIGNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nKG9wdGlvbnMuc3R5bGVzKSk7XG4gICAgICB9XG4gICAgICBxdWVyeVN0cmluZy5hcHBlbmQoXCJzZWN1cmVUb2tlblwiLCB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuKTtcbiAgICAgIHJldHVybiBxdWVyeVN0cmluZztcbiAgICB9XG4gICAgY29ubmVjdFRvRWxlbWVudChlbGVtZW50KSB7XG4gICAgICBjcmVhdGVDb25uZWN0aW9uKGVsZW1lbnQubm9kZSkudGhlbigoY29ubikgPT4ge1xuICAgICAgICB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmFkZENvbm5lY3Rpb24oZWxlbWVudC50eXBlLCBjb25uKTtcbiAgICAgICAgdGhpcy50cnlJbml0T2pzRmxvd3MoKTtcbiAgICAgIH0pLmNhdGNoKChlcnIpID0+IGNvbnNvbGUuZXJyb3IoXCJbRk9STV0gRXJyb3IgY29ubmVjdGluZyB0byBDREUgaWZyYW1lXCIsIGVycikpO1xuICAgIH1cbiAgICBnZXRGb3JtRGl2KCkge1xuICAgICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5mb3JtVGFyZ2V0KSA/PyBkb2N1bWVudC5ib2R5O1xuICAgIH1cbiAgICBjcmVhdGVPanNGbG93Q29udGV4dCgpIHtcbiAgICAgIGNvbnN0IGNkZUNvbm5lY3Rpb25zID0gdGhpcy5jb25uZWN0aW9uTWFuYWdlci5nZXRBbGxDb25uZWN0aW9ucygpO1xuICAgICAgaWYgKCF0aGlzLmNkZUxvYWRlZFBheWxvYWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmVxdWVzdGVkIGNvbnRleHQgd2hpbGUgQ0RFIG5vdCB5ZXQgbG9hZGVkXCIpO1xuICAgICAgfVxuICAgICAgaWYgKGNkZUNvbm5lY3Rpb25zLnNpemUgPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gQ0RFIGNvbm5lY3Rpb25zIGZvdW5kXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYmFzZVVybDogbmV3IFVSTCh0aGlzLmNvbmZpZy5iYXNlVXJsID8/IEZSQU1FX0JBU0VfVVJMKS5vcmlnaW4sXG4gICAgICAgIGZvcm1EaXY6IHRoaXMuZ2V0Rm9ybURpdigpLFxuICAgICAgICBlbGVtZW50c1Nlc3Npb25JZDogdGhpcy5jZGVMb2FkZWRQYXlsb2FkLnNlc3Npb25JZCxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogdGhpcy5jZGVMb2FkZWRQYXlsb2FkLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgIGNkZUNvbm5lY3Rpb25zLFxuICAgICAgICBjdXN0b21Jbml0UGFyYW1zOiB0aGlzLmNvbmZpZy5jdXN0b21Jbml0UGFyYW1zID8/IHt9XG4gICAgICB9O1xuICAgIH1cbiAgICBjcmVhdGVPanNGbG93Q2FsbGJhY2tzKCkge1xuICAgICAgY29uc3Qgbm9PcCA9ICgpID0+IHtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvbkNoZWNrb3V0RXJyb3I6IG1ha2VDYWxsYmFja1NhZmUoXCJvbkNoZWNrb3V0RXJyb3JcIiwgdGhpcy5jb25maWcub25DaGVja291dEVycm9yID8/IG5vT3ApLFxuICAgICAgICBvbkNoZWNrb3V0U3RhcnRlZDogbWFrZUNhbGxiYWNrU2FmZShcIm9uQ2hlY2tvdXRTdGFydGVkXCIsIHRoaXMuY29uZmlnLm9uQ2hlY2tvdXRTdGFydGVkID8/IG5vT3ApLFxuICAgICAgICBvbkNoZWNrb3V0U3VjY2VzczogbWFrZUNhbGxiYWNrU2FmZShcIm9uQ2hlY2tvdXRTdWNjZXNzXCIsIHRoaXMuY29uZmlnLm9uQ2hlY2tvdXRTdWNjZXNzID8/IG5vT3ApLFxuICAgICAgICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IG1ha2VDYWxsYmFja1NhZmUoXG4gICAgICAgICAgXCJvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3NcIixcbiAgICAgICAgICB0aGlzLmNvbmZpZy5vblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3MgPz8gbm9PcFxuICAgICAgICApLFxuICAgICAgICBvblZhbGlkYXRpb25FcnJvcjogbWFrZUNhbGxiYWNrU2FmZShcIm9uVmFsaWRhdGlvbkVycm9yXCIsIHRoaXMuY29uZmlnLm9uVmFsaWRhdGlvbkVycm9yID8/IG5vT3ApXG4gICAgICB9O1xuICAgIH1cbiAgICBzdWJtaXQoKSB7XG4gICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jcmVhdGVPanNGbG93Q29udGV4dCgpO1xuICAgICAgT2pzRmxvd3MuY29tbW9uQ0MucnVuKHtcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgXCJjcmVkaXRfY2FyZFwiKSxcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgIGZsb3dDYWxsYmFja3M6IHRoaXMuY3JlYXRlT2pzRmxvd0NhbGxiYWNrcygpLFxuICAgICAgICBjdXN0b21QYXJhbXM6IHZvaWQgMCxcbiAgICAgICAgLy8gVGhpcyBmbG93IHJlcXVpcmVzIG5vIGN1c3RvbSBwYXJhbXNcbiAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIC8vIFRoaXMgZmxvdyByZXF1aXJlcyBubyBpbml0aWFsaXphdGlvblxuICAgICAgfSk7XG4gICAgfVxuICAgIG9uUGF5bWVudFJlcXVlc3RFcnJvcihlcnJNc2cpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJbZm9ybV0gRXJyb3IgZnJvbSBwYXltZW50IHJlcXVlc3Q6XCIsIGVyck1zZyk7XG4gICAgICB0aGlzLmNoZWNrb3V0RmlyZWQgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5vbkNoZWNrb3V0RXJyb3IpIHRoaXMuY29uZmlnLm9uQ2hlY2tvdXRFcnJvcihlcnJNc2cpO1xuICAgIH1cbiAgICBkZXN0cm95KCkge1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIE9iamVjdC52YWx1ZXModGhpcy5lbGVtZW50cyA/PyB7fSkpIHtcbiAgICAgICAgZWxlbWVudC5ub2RlLnJlbW92ZSgpO1xuICAgICAgfVxuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpO1xuICAgIH1cbiAgfVxuXG4gIGV4cG9ydHMuRmllbGROYW1lID0gRmllbGROYW1lO1xuICBleHBvcnRzLk9wZW5QYXlGb3JtID0gT3BlblBheUZvcm07XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cbn0pKTsiXSwKICAibWFwcGluZ3MiOiAiQ0FBQyxTQUFVQSxFQUFRQyxFQUFTLENBQzFCLE9BQU8sU0FBWSxVQUFZLE9BQU8sT0FBVyxJQUFjQSxFQUFRLFFBQVMsUUFBUSxLQUFLLEVBQUcsUUFBUSxNQUFNLEVBQUcsUUFBUSxRQUFRLEVBQUcsUUFBUSxPQUFPLENBQUMsRUFDcEosT0FBTyxRQUFXLFlBQWMsT0FBTyxJQUFNLE9BQU8sQ0FBQyxVQUFXLE1BQU8sT0FBUSxTQUFVLE9BQU8sRUFBR0EsQ0FBTyxHQUN6R0QsRUFBUyxPQUFPLFdBQWUsSUFBYyxXQUFhQSxHQUFVLEtBQU1DLEVBQVFELEVBQU8sUUFBVSxDQUFDLEVBQUdBLEVBQU8sSUFBS0EsRUFBTyxLQUFNQSxFQUFPLE9BQVFBLEVB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LGlCQUFpQixLQUFLLE9BQU8sZ0JBQWdCQSxDQUFNLENBQ3JFLENBQ0EsU0FBVSxDQUNSLFVBQVdSLEtBQVcsT0FBTyxPQUFPLEtBQUssVUFBWSxDQUFDLENBQUMsRUFDckRBLEVBQVEsS0FBSyxPQUFPLEVBRXRCLE9BQU8sb0JBQW9CLFVBQVcsS0FBSyxhQUFhLGNBQWMsS0FBSyxLQUFLLFlBQVksQ0FBQyxDQUMvRixDQUNGLEVBaklJVCxFQUFLLFNBQVc5SSxFQXpFcEIsSUFBTWdLLEdBQU5sQixFQTRNQTlZLEVBQVEsVUFBWWtDLEVBQ3BCbEMsRUFBUSxZQUFjZ2EsR0FFdEIsT0FBTyxlQUFlaGEsRUFBUyxPQUFPLFlBQWEsQ0FBRSxNQUFPLFFBQVMsQ0FBQyxDQUV4RSxDQUFFIiwKICAibmFtZXMiOiBbImdsb2JhbCIsICJmYWN0b3J5IiwgImV4cG9ydHMiLCAiem9kIiwgInV1aWQiLCAicGVucGFsIiwgImNoYWxrIiwgIkZSQU1FX0JBU0VfVVJMIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEiLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3JSZXNwb25zZSIsICJab2RGaWVsZEVycm9yIiwgIlpvZEZpZWxkRXJyb3JzIiwgIk1BUF9UT19IVU1BTl9GUklFTkRMWV9MT1dFUkNBU0UiLCAiZ2V0SHVtYW5GcmllbmRseU1lc3NhZ2UiLCAib2dFcnJvck1lc3NhZ2UiLCAia2V5IiwgImlzU3RyaW5naWZpZWRKc29uT2JqZWN0IiwgInN0ciIsICJjcmVhdGVNZXNzYWdlRnJvbVB5ZGFudGljVmFsaWRhdGlvbkVycm9yIiwgInJlc3BvbnNlIiwgImVyciIsICJjcmVhdGVNZXNzYWdlRnJvbVpvZEZpZWxkRXJyb3JzIiwgImVycm9ycyIsICJnZXRFcnJvck1lc3NhZ2UiLCAiZSIsICJvYmoiLCAiZTIiLCAibWFrZUNhbGxiYWNrU2FmZSIsICJjYWxsYmFja05hbWUiLCAiZm4iLCAiYXJncyIsICJlcnJvciIsICJSZXF1aXJlZFN0cmluZyIsICJPcHRpb25hbFN0cmluZyIsICJudWxsT3JVbmRlZk9yJDEiLCAielR5cGUiLCAiRmllbGROYW1lIiwgIkZpZWxkTmFtZTIiLCAiRmllbGROYW1lRW51bSIsICJQcml2YXRlRmllbGROYW1lIiwgIlByaXZhdGVGaWVsZE5hbWUyIiwgIlByaXZhdGVGaWVsZE5hbWVFbnVtIiwgIkFsbEZpZWxkTmFtZXMiLCAiRWxlbWVudFR5cGVFbnVtIiwgIkVsZW1lbnRUeXBlRW51bTIiLCAiRWxlbWVudFR5cGUiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEiLCAiUGF5bWVudE1ldGhvZE1pbmltYWwiLCAiRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50UGF5bG9hZCIsICJJbnB1dEV2ZW50VHlwZSIsICJJbnB1dEV2ZW50UGF5bG9hZCIsICJFcnJvckV2ZW50VHlwZSIsICJFcnJvckV2ZW50UGF5bG9hZCIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkIiwgIkxheW91dEV2ZW50UGF5bG9hZCIsICJMb2FkZWRFdmVudFBheWxvYWQiLCAiUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkIiwgIlNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIlJlcXVpcmVkRm9ybUZpZWxkcyIsICJQUkZvcm1GaWVsZHMiLCAiU3VibWl0RXZlbnRUeXBlIiwgIlN1Ym1pdEV2ZW50UGF5bG9hZCIsICJUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkV2ZW50UGF5bG9hZCIsICJFbGVtZW50RXZlbnQiLCAiQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UiLCAiRmllbGRWYWxpZGF0aW9uRXJyb3IiLCAiVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSIsICJUb2tlbml6ZUNhcmRSZXNwb25zZSIsICJUaHJlZURTU3RhdHVzIiwgIlRocmVlRFNTdGF0dXMyIiwgIlBpbmczRFNTdGF0dXNSZXNwb25zZSIsICJDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAiZXh0cmFjdElzc3Vlc1BlckZpZWxkIiwgImlzc3Vlc1BlckZpZWxkIiwgInZhbHVlIiwgImZpZWxkTmFtZSIsICJTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAiUGF5bWVudFJlcXVlc3ROZXh0QWN0aW9uTWV0YWRhdGEiLCAib3VyQ3VycmVuY3lUb1RoZWlycyIsICJnZXRMb2FkZWRTdHJpcGUiLCAicHVibGlzaGFibGVLZXkiLCAiaSIsICJpc1N0cmlwZUpzUHJlc2VudCIsICJzbGVlcCIsICJjcmVhdGVTdHJpcGVFbGVtZW50cyIsICJzdHJpcGVQdWJLZXkiLCAiZWxlbWVudHNPcHRpb25zIiwgInN0cmlwZSIsICJjcmVhdGVTdHJpcGVQYXltZW50UmVxdWVzdCIsICJ0b3RhbEFtb3VudEF0b20iLCAiY3VycmVuY3kiLCAiaXNBbW91bnRQZW5kaW5nIiwgImlzTGlua09ubHkiLCAic3RyaXBlQ3VycmVuY3kiLCAidGltZW91dE1zIiwgInJlc29sdmUiLCAid2FpdEZvclVzZXJUb0FkZFBheW1lbnRNZXRob2QiLCAicGF5bWVudFJlcXVlc3QiLCAicmVqZWN0IiwgImV2dCIsICJjb25maXJtU3RyaXBlUHJQTSIsICJuZXh0QWN0aW9uTWV0YWRhdGEiLCAic3RyaXBlUG0iLCAiY29uZmlybVJlc3VsdCIsICJsYXVuY2hTdHJpcGUzRFNEaWFsb2dGbG93IiwgIl9hIiwgIl9iIiwgIl9jIiwgIl9kIiwgInJlc3VsdFN0YXR1cyIsICJjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyIsICJzdHlsZXMiLCAiY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtIiwgImZvcm1EaXYiLCAiaW5pdGlhbERpY3QiLCAiYWNjIiwgImlucHV0IiwgInBhcnNlRXZlbnRQYXlsb2FkIiwgImV2ZW50RGF0YSIsICJlbWl0RXZlbnQiLCAidGFyZ2V0IiwgImZvcm1JZCIsICJlbGVtZW50SWQiLCAicGF5bG9hZCIsICJiYXNlVXJsIiwgImV2ZW50IiwgImNoZWNrSWZWYWxpZENkZUNvbm5lY3Rpb25PYmplY3QiLCAicGluZyIsICJyZXN1bHQiLCAiaXNSZXN1bHRWYWxpZCIsICJpc1ZhbGlkIiwgIm51bGxPclVuZGVmT3IiLCAiQ0RFUmVzcG9uc2VFcnJvciIsICJDb3Vwb25NaW5pbWFsIiwgIkxpbmVJdGVtIiwgIkJyYW5kU2V0dGluZ3MiLCAiQnJhbmQiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kIiwgIlN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsIiwgIlN1YnNjcmlwdGlvbk1pbmltYWwiLCAiSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsIiwgIkludm9pY2VMaW5lSXRlbU1pbmltYWwiLCAiRGlzY291bnRNaW5pbWFsIiwgIkludm9pY2VNaW5pbWFsIiwgIkNyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCIsICJQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSIsICJfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uIiwgIlBheW1lbnRGb3JtUHJlZmlsbCIsICJDb21wbGV0ZWRGb3JtUHJlZmlsbCIsICJFeHBpcmVkRm9ybVByZWZpbGwiLCAiQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UiLCAiU2V0dXBDaGVja291dFJlc3BvbnNlIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yIiwgIlN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSIsICJTdGFydFBheW1lbnRGbG93Rm9yQ0NSZXNwb25zZSIsICJzdW0iLCAiYXJyIiwgImEiLCAiYiIsICJmaXhQcm90byIsICJwcm90b3R5cGUiLCAic2V0UHJvdG90eXBlT2YiLCAiZml4U3RhY2siLCAiY2FwdHVyZVN0YWNrVHJhY2UiLCAiX19leHRlbmRzIiwgIl9leHRlbmRTdGF0aWNzIiwgImQiLCAicCIsICJfXyIsICJDdXN0b21FcnJvciIsICJfc3VwZXIiLCAibWVzc2FnZSIsICJvcHRpb25zIiwgIl9uZXdUYXJnZXQiLCAiX3RoaXMiLCAiQ2RlRXJyb3IiLCAiZnJpZW5kbHlNZXNzYWdlIiwgInF1ZXJ5Q0RFIiwgImNkZUNvbm4iLCAiZGF0YSIsICJyZXNwb25zZVNjaGVtYSIsICJpc0NERVJlc3BvbnNlRXJyb3IiLCAiY2hlY2tJZkNvbmZvcm1zVG9TY2hlbWEiLCAic2NoZW1hIiwgImdldENoZWNrb3V0UHJldmlldyIsICJyZXF1ZXN0IiwgImdldFByZWZpbGwiLCAic3RhcnRQYXltZW50RmxvdyIsICJzdGFydFBheW1lbnRGbG93Rm9yQ0MiLCAic3RhcnRQYXltZW50Rmxvd0ZvclBSIiwgImNvbmZpcm1QYXltZW50RmxvdyIsICJnZXRDaGVja291dFZhbHVlIiwgInNlY3VyZVRva2VuIiwgInByb21vQ29kZSIsICJjaGVja291dFByZXZpZXciLCAiY3VycmVuY2llcyIsICJpbnYiLCAiYW1vdW50QXRvbSIsICJnZXRDaGVja291dFByZXZpZXdBbW91bnQiLCAiaXNTZXR1cE1vZGUiLCAidG9rZW5pemVDYXJkT25BbGxDb25uZWN0aW9ucyIsICJhbGxDZGVDb25uZWN0aW9ucyIsICJjaGVja291dENhcmRFbGVtZW50cyIsICJzZXR1cENoZWNrb3V0IiwgInBlcmZvcm1DaGVja291dCIsICJDREVfUE9MTElOR19JTlRFUlZBTCIsICJwaW5nQ2RlRm9yM2RzU3RhdHVzIiwgImlmcmFtZSIsICJjaGlsZE9yaWdpbiIsICJjb25uZWN0aW9uT2JqIiwgImFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzIiwgInNpbXBsZU9qc0Zsb3ciLCAicGFyYW1zIiwgImZsb3dSZXN1bHQiLCAiYWRkRXJyb3JDYXRjaGVyRm9ySW5pdCIsICJpbml0IiwgImVycl9fIiwgImNyZWF0ZU9qc0Zsb3dMb2dnZXJzIiwgInByZWZpeCIsICJsb2ciLCAibG9nX18kNSIsICJlcnJfXyQ1IiwgInBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UiLCAiZmluZENwbU1hdGNoaW5nVHlwZSIsICJhbGxDUE1zIiwgInpvZE1vZGVsIiwgImNwbSIsICJjcG0yIiwgImxvZ19fJDQiLCAiZXJyX18kNCIsICJ2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyIsICJub25DZGVGb3JtSW5wdXRzIiwgIm9uVmFsaWRhdGlvbkVycm9yIiwgImZvcm1hdHRlZCIsICJpc3N1ZXMiLCAidmFsaWRhdGVUb2tlbml6ZUNhcmRSZXN1bHRzIiwgInRva2VuaXplUmVzdWx0cyIsICJ0b2tlbml6ZVJlc3VsdCIsICJwYXJzZWQiLCAiT0pTX1NUUklQRV9MSU5LX0JUTl9JRCIsICJsb2dfXyQzIiwgImVycl9fJDMiLCAiU3RyaXBlTGlua0NwbSIsICJTdHJpcGVMaW5rUmVxdWlyZWRVc2VyQWN0aW9ucyIsICJpbml0U3RyaXBlTGlua0Zsb3ciLCAiY29udGV4dCIsICJmbG93Q2FsbGJhY2tzIiwgInN0cmlwZUxpbmtDcG0iLCAiYW55Q2RlQ29ubmVjdGlvbiIsICJwcmVmaWxsIiwgImluaXRpYWxQcmV2aWV3IiwgImVsZW1lbnRzIiwgImV4cHJlc3NDaGVja291dEVsZW1lbnQiLCAiT2pzRmxvd3MiLCAicnVuU3RyaXBlTGlua0Zsb3ciLCAiY2hlY2tvdXRQYXltZW50TWV0aG9kIiwgImN1c3RvbVBhcmFtcyIsICJtZXJnZWRJbnB1dHMiLCAiZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQTSIsICJub25DZGVGb3JtRmllbGRzIiwgInN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSIsICJvdXJFeGlzdGluZ1BtSWQiLCAiY2hlY2tvdXRSZXF1ZXN0IiwgImZvcm1JbnB1dHMiLCAiX2UiLCAiaW5wdXRzIiwgInBheWVyRmlyc3ROYW1lIiwgInBheWVyTGFzdE5hbWVQYXJ0cyIsICJwYXllckxhc3ROYW1lIiwgImNyZWF0ZUFuZE9wZW5GcmFtZSIsICJ1cmwiLCAidGVtcGxhdGUiLCAiaG9zdCIsICJzaGFkb3dSb290IiwgImNhbmNlbEJ1dHRvbiIsICJzdGFydFBvbGxpbmciLCAib25TdWNjZXNzIiwgImhhbmRsZVBvbGxpbmciLCAic3RhdHVzIiwgInBvbGxpbmdJbnRlcnZhbCIsICJoYW5kbGVFdmVudHMiLCAiaGFuZGxlQ2FuY2VsIiwgInN0YXJ0M2RzVmVyaWZpY2F0aW9uIiwgImNsZWFudXBFdmVudExpc3RlbmVycyIsICJsb2dfXyQyIiwgImVycl9fJDIiLCAic3RyaXBlTG9nX18iLCAicnVuQ29tbW9uQ2NGbG93IiwgInRva2VuaXplQ2FyZFJlc3VsdHMiLCAiY29tbW9uQ2hlY2tvdXRQYXJhbXMiLCAic2hvdWxkVXNlTmV3RmxvdyIsICJzdGFydFBmUmVzdWx0IiwgImNvbW1vbkNDM0RTRmxvdyIsICJzdHJpcGVDQzNEU0Zsb3ciLCAiY3JlYXRlZFBheW1lbnRNZXRob2QiLCAicGFyc2VTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAic3RyaXBlQWN0aW9uIiwgImFjdGlvbiIsICJwYXJzZUNvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YSIsICJjb21tb25BY3Rpb24iLCAibG9nX18kMSIsICJlcnJfXyQxIiwgIlN0cmlwZVByQ3BtIiwgImluaXRTdHJpcGVQckZsb3ciLCAicHIiLCAiY2FuTWFrZVBheW1lbnQiLCAicnVuU3RyaXBlUHJGbG93IiwgImluaXRSZXN1bHQiLCAib3ZlcnJpZGUiLCAidXBkYXRlUHJXaXRoQW1vdW50IiwgInN0cmlwZVBtQWRkZWRFdmVudCIsICJmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBtIiwgInBhcnNlUFJOZXh0QWN0aW9uTWV0YWRhdGEiLCAic3RyaXBlUG1FdnQiLCAiYW1vdW50IiwgImlzUGVuZGluZyIsICJmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0IiwgImNwbXMiLCAid2l0aFByb3ZpZGVyIiwgIndpdGhQcm9jZXNzb3IiLCAibWF0Y2hlcyIsICJnZXREZWZhdWx0RXhwb3J0RnJvbUNqcyIsICJ4IiwgIk9ic2VydmFibGUkMiIsICJoYXNTeW1ib2wiLCAibmFtZSIsICJnZXRTeW1ib2wiLCAiU3ltYm9sSXRlcmF0b3IiLCAiU3ltYm9sT2JzZXJ2YWJsZSIsICJTeW1ib2xTcGVjaWVzIiwgImdldE1ldGhvZCIsICJnZXRTcGVjaWVzIiwgImN0b3IiLCAiT2JzZXJ2YWJsZSQxIiwgImlzT2JzZXJ2YWJsZSIsICJob3N0UmVwb3J0RXJyb3IiLCAiZW5xdWV1ZSIsICJjbGVhbnVwU3Vic2NyaXB0aW9uIiwgInN1YnNjcmlwdGlvbiIsICJjbGVhbnVwIiwgInVuc3Vic2NyaWJlIiwgImNsb3NlU3Vic2NyaXB0aW9uIiwgImZsdXNoU3Vic2NyaXB0aW9uIiwgInF1ZXVlIiwgIm5vdGlmeVN1YnNjcmlwdGlvbiIsICJ0eXBlIiwgIm9ic2VydmVyIiwgIm0iLCAib25Ob3RpZnkiLCAiU3Vic2NyaXB0aW9uIiwgInN1YnNjcmliZXIiLCAic2VsZiIsICJzdWJzY3JpcHRpb25PYnNlcnZlciIsICJPYnNlcnZhYmxlIiwgImRvbmUiLCAiQyIsICJoYXNTZWVkIiwgImhhc1ZhbHVlIiwgImZpcnN0IiwgInZhbHVlcyIsICJzb3VyY2VzIiwgImluZGV4IiwgInN0YXJ0TmV4dCIsICJuZXh0IiwgInYiLCAic3Vic2NyaXB0aW9ucyIsICJvdXRlciIsICJpbm5lciIsICJjb21wbGV0ZUlmRG9uZSIsICJzIiwgIm1ldGhvZCIsICJvYnNlcnZhYmxlIiwgIml0ZW0iLCAiaXRlbXMiLCAiemVuT2JzZXJ2YWJsZSIsICJsb2dfXyIsICJnZXRPanNJbml0UmVzdWx0c0RlYnVnT2JqZWN0IiwgImluaXRpYWxpemVPanNGbG93cyIsICJpbml0UGFyYW1zIiwgInJ1bkluaXRGbG93QXNPYnNlcnZhYmxlIiwgImZsb3dOYW1lIiwgImluaXRGbG93IiwgIlBSX0xPQURJTkciLCAiUFJfRVJST1IiLCAiT3BlblBheUZvcm1FdmVudEhhbmRsZXIiLCAiZm9ybUluc3RhbmNlIiwgImV2ZW50VHlwZSIsICJoZWlnaHQiLCAiZmllbGQiLCAic291cmNlIiwgImNyZWF0ZUNvbm5lY3Rpb24iLCAiaXNWYWxpZE9iamVjdCIsICJDb25uZWN0aW9uTWFuYWdlciIsICJpZCIsICJjb25uZWN0aW9uIiwgIl9PcGVuUGF5Rm9ybSIsICJjb25maWciLCAiaW5pdFN0YXR1cyIsICJfZiIsICJjYW5BcHBsZVBheSIsICJjYW5Hb29nbGVQYXkiLCAidXNlclBhcmFtcyIsICJwcm92aWRlciIsICJmb3JtIiwgImVsZW1lbnQiLCAiZWxlbWVudFZhbHVlIiwgImZyYW1lIiwgInF1ZXJ5U3RyaW5nIiwgInNlbGVjdG9yIiwgImNvbm4iLCAiY2RlQ29ubmVjdGlvbnMiLCAibm9PcCIsICJlcnJNc2ciLCAiT3BlblBheUZvcm0iXQp9Cg==
|
|
20
|
+
and ".isAvailable" to know if a payment request is available.`)}},Ne={isLoading:!1,isAvailable:!1,startFlow:async()=>{console.error("startFlow triggered when payment request is not available.")}};class Bn{constructor(e){this.formInstance=e,this.config=e.config,this.formId=e.formId,this.eventTargets={},this.nonces=new Set}handleMessage(e){var c;if(!e.source)throw new Error("No source found");if(e.origin!==((c=this.formInstance.config._frameUrl)==null?void 0:c.origin)||typeof e.data=="object"&&e.data.penpal)return;const r=Tt(JSON.parse(e.data));if(!this.validateEvent(r))return;const{elementId:s,payload:i}=r,a=i.type;switch(a){case"LAYOUT":this.handleLayoutEvent(i);break;case"FOCUS":this.handleFocusEvent(s,i.elementType);break;case"BLUR":this.handleBlurEvent(s,i.elementType);break;case"CHANGE":this.handleChangeEvent(s,i.elementType,i.errors);break;case"LOADED":this.handleLoadedEvent(e.source,s,i);break;case"LOAD_ERROR":this.handleLoadErrorEvent(i);break;case"VALIDATION_ERROR":this.handleValidationErrorEvent(i,s);break;default:console.warn("[form] Unhandled event type:",a)}}validateEvent(e){return e.formId!==this.formInstance.formId||!e.elementId?(console.warn("[form] Ignoring unknown event:",e),!1):this.nonces.has(e.nonce)?(console.warn("[form] Ignoring duplicate event:",e),!1):(this.nonces.add(e.nonce),!0)}handleLayoutEvent(e){const r=e.height?`${e.height}px`:"100%";this.formInstance.setFormHeight(r)}handleFocusEvent(e,r){this.config.onFocus&&this.config.onFocus(e,r)}handleBlurEvent(e,r){this.config.onBlur&&this.config.onBlur(e,r)}handleChangeEvent(e,r,o){this.config.onChange&&this.config.onChange(e,r,o)}async handleLoadedEvent(e,r,o){console.log("handleLoadedEvent is deprecated:",e,r,o),this.eventTargets[r]=e,this.formInstance.onCdeLoaded(o),this.config.onLoad&&this.config.onLoad(o.totalAmountAtoms,o.currency)}handleLoadErrorEvent(e){this.formInstance.config.onLoadError&&this.formInstance.config.onLoadError(e.message)}handleValidationErrorEvent(e,r){this.formInstance.config.onValidationError&&this.formInstance.config.onValidationError(e.elementType,e.errors,r)}postEventToFrame(e,r,o){jt(e,this.formId,r,o,this.config.baseUrl)}}async function Zn(n,e){const o=await ne.connectToChild({iframe:n,debug:!1,childOrigin:e}).promise,s=await Mt(o);if(!Ft(o,s))throw new Error("Got invalid CDE connection object");return o}class Gn{constructor(){this.connections=new Map}addConnection(e,r){this.connections.set(e,r)}getConnection(){const e=this.connections.values().next().value;if(!e)throw new Error("Connection not found");return e}getAllConnections(){return this.connections}}const F=class F{constructor(e){this.tryInitOjsFlows=()=>{this.ojsFlowsInitialization===null&&this.cdeLoadedPayload&&this.connectionManager.getAllConnections().size!==0&&(this.ojsFlowsInitialization=Jn(this.createOjsFlowContext(),this.createOjsFlowCallbacks()),this.ojsFlowsInitialization.stripePR.subscribe(r=>this.onStripePRStatusChange(r)))},this.onCdeLoaded=r=>{this.cdeLoadedPayload||(this.cdeLoadedPayload=r,this.tryInitOjsFlows())},this.onStripePRStatusChange=r=>{var o,s,i,a,c,l;if(r.status==="loading")(s=(o=this.config).onPaymentRequestLoad)==null||s.call(o,{apple_pay:Le,google_pay:Le});else if(r.status==="error")(a=(i=this.config).onPaymentRequestLoad)==null||a.call(i,{apple_pay:Ne,google_pay:Ne});else if(r.status==="loaded"){const u=r.result,p=u.isAvailable&&u.availableProviders.applePay,f=u.isAvailable&&u.availableProviders.googlePay;(l=(c=this.config).onPaymentRequestLoad)==null||l.call(c,{apple_pay:{isLoading:!1,isAvailable:p,startFlow:async d=>p?this.submitPaymentRequest("apple_pay",u,d):void 0},google_pay:{isLoading:!1,isAvailable:f,startFlow:async d=>f?this.submitPaymentRequest("google_pay",u,d):void 0}})}},this.submitPaymentRequest=(r,o,s)=>{const i=this.createOjsFlowContext();return O.stripePR.run({context:i,checkoutPaymentMethod:Ae(i.checkoutPaymentMethods,r),nonCdeFormInputs:Y(i.formDiv),flowCallbacks:this.createOjsFlowCallbacks(),customParams:{provider:r,overridePaymentRequest:s==null?void 0:s.overridePaymentRequest},initResult:o})},F.assignAsSingleton(this),this.config={...e,baseUrl:e.baseUrl??"https://cde.getopenpay.com"},this.elements=null,this.formId=`opjs-form-${window.crypto.randomUUID()}`,this.referer=window.location.origin,this.formTarget=e.formTarget??"body",this.formProperties={height:"1px"},this.cdeLoadedPayload=null,this.ojsFlowsInitialization=null,this.checkoutFired=!1,this.connectionManager=new Gn,this.eventHandler=new Bn(this),this.ojsVersion="0.1.10",this.ojsReleaseVersion="0.1.10",window.addEventListener("message",this.eventHandler.handleMessage.bind(this.eventHandler))}static assignAsSingleton(e){if(F.getInstance())throw new Error("OpenPay instance already exists. Only one instance is allowed.");window.ojs=e}static getInstance(){return window.ojs??null}getConnectionManager(){return this.connectionManager}setFormHeight(e){this.formProperties.height=e,this.elements&&Object.values(this.elements).forEach(r=>{r.node.style.height=e})}createElement(e,r={}){if(!this.config)throw new Error("OpenPay form not initialized");const o=Je.parse(e),s=document.createElement("iframe"),i=this.buildQueryString(r);s.name=`${o}-element`;const a=new URL(`/app/v1/${s.name}`,this.config.baseUrl);a.search=i.toString(),s.src=a.href,this.config._frameUrl=a,s.style.border="none",s.style.width="100%";const c={type:o,node:s,mount:l=>{var u;return(u=document.querySelector(l))==null?void 0:u.appendChild(s)}};return this.connectToElement(c),this.elements?this.elements[o]=c:this.elements={[o]:c},c}buildQueryString(e){const r=new URLSearchParams;return r.append("referer",this.referer),r.append("formId",this.formId),e.styles&&r.append("styles",It(e.styles)),r.append("secureToken",this.config.checkoutSecureToken),r}connectToElement(e){Zn(e.node).then(r=>{this.connectionManager.addConnection(e.type,r),this.tryInitOjsFlows()}).catch(r=>console.error("[FORM] Error connecting to CDE iframe",r))}getFormDiv(){return document.querySelector(this.formTarget)??document.body}createOjsFlowContext(){const e=this.connectionManager.getAllConnections();if(!this.cdeLoadedPayload)throw new Error("Requested context while CDE not yet loaded");if(e.size===0)throw new Error("No CDE connections found");return{baseUrl:new URL(this.config.baseUrl??xe).origin,formDiv:this.getFormDiv(),elementsSessionId:this.cdeLoadedPayload.sessionId,checkoutPaymentMethods:this.cdeLoadedPayload.checkoutPaymentMethods,cdeConnections:e,customInitParams:this.config.customInitParams??{}}}createOjsFlowCallbacks(){const e=()=>{};return{onCheckoutError:A("onCheckoutError",this.config.onCheckoutError??e),onCheckoutStarted:A("onCheckoutStarted",this.config.onCheckoutStarted??e),onCheckoutSuccess:A("onCheckoutSuccess",this.config.onCheckoutSuccess??e),onSetupPaymentMethodSuccess:A("onSetupPaymentMethodSuccess",this.config.onSetupPaymentMethodSuccess??e),onValidationError:A("onValidationError",this.config.onValidationError??e)}}submit(){const e=this.createOjsFlowContext();O.commonCC.run({context:e,checkoutPaymentMethod:Ae(e.checkoutPaymentMethods,"credit_card"),nonCdeFormInputs:Y(e.formDiv),flowCallbacks:this.createOjsFlowCallbacks(),customParams:void 0,initResult:void 0})}onPaymentRequestError(e){console.error("[form] Error from payment request:",e),this.checkoutFired=!1,this.config.onCheckoutError&&this.config.onCheckoutError(e)}destroy(){for(const e of Object.values(this.elements??{}))e.node.remove();window.removeEventListener("message",this.eventHandler.handleMessage.bind(this.eventHandler))}};F.ojsFlows=O;let te=F;C.FieldName=m,C.OpenPayForm=te,Object.defineProperty(C,Symbol.toStringTag,{value:"Module"})});
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgudW1kLmpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBmYWN0b3J5KGV4cG9ydHMsIHJlcXVpcmUoJ3pvZCcpLCByZXF1aXJlKCd1dWlkJyksIHJlcXVpcmUoJ3BlbnBhbCcpLCByZXF1aXJlKCdjaGFsaycpKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnLCAnem9kJywgJ3V1aWQnLCAncGVucGFsJywgJ2NoYWxrJ10sIGZhY3RvcnkpIDpcbiAgKGdsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiBnbG9iYWwgfHwgc2VsZiwgZmFjdG9yeShnbG9iYWwuT3BlblBheSA9IHt9LCBnbG9iYWwuem9kLCBnbG9iYWwudXVpZCwgZ2xvYmFsLnBlbnBhbCwgZ2xvYmFsLmNoYWxrKSk7XG59KSh0aGlzLCAoZnVuY3Rpb24gKGV4cG9ydHMsIHpvZCwgdXVpZCwgcGVucGFsLCBjaGFsaykgeyAndXNlIHN0cmljdCc7XG5cbiAgY29uc3QgRlJBTUVfQkFTRV9VUkwgPSBcImh0dHBzOi8vY2RlLmdldG9wZW5wYXkuY29tXCI7XG5cbiAgY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSA9IHpvZC56Lm9iamVjdCh7XG4gICAgdHlwZTogem9kLnouc3RyaW5nKCksXG4gICAgbG9jOiB6b2Quei5hcnJheSh6b2Quei5zdHJpbmcoKSksXG4gICAgbXNnOiB6b2Quei5zdHJpbmcoKSxcbiAgICB1cmw6IHpvZC56LnN0cmluZygpXG4gIH0pO1xuICBjb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvclJlc3BvbnNlID0gem9kLnouYXJyYXkoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSk7XG4gIGNvbnN0IFpvZEZpZWxkRXJyb3IgPSB6b2Quei5vYmplY3Qoe1xuICAgIGNvZGU6IHpvZC56LnN0cmluZygpLFxuICAgIG1lc3NhZ2U6IHpvZC56LnN0cmluZygpLFxuICAgIHBhdGg6IHpvZC56LmFycmF5KHpvZC56LnN0cmluZygpKVxuICB9KTtcbiAgY29uc3QgWm9kRmllbGRFcnJvcnMgPSB6b2Quei5hcnJheShab2RGaWVsZEVycm9yKTtcbiAgY29uc3QgTUFQX1RPX0hVTUFOX0ZSSUVORExZX0xPV0VSQ0FTRSA9IHtcbiAgICBcImZhaWxlZCB0byBmZXRjaFwiOiBgQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluYFxuICB9O1xuICBjb25zdCBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZSA9IChvZ0Vycm9yTWVzc2FnZSkgPT4ge1xuICAgIGNvbnN0IGtleSA9IG9nRXJyb3JNZXNzYWdlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIHJldHVybiBNQVBfVE9fSFVNQU5fRlJJRU5ETFlfTE9XRVJDQVNFW2tleV0gPz8gb2dFcnJvck1lc3NhZ2U7XG4gIH07XG4gIGNvbnN0IGlzU3RyaW5naWZpZWRKc29uT2JqZWN0ID0gKHN0cikgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHN0cik7XG4gICAgICByZXR1cm4gdHlwZW9mIHBhcnNlZCA9PT0gXCJvYmplY3RcIjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9O1xuICBjb25zdCBjcmVhdGVNZXNzYWdlRnJvbVB5ZGFudGljVmFsaWRhdGlvbkVycm9yID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKHJlc3BvbnNlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIGdldEh1bWFuRnJpZW5kbHlNZXNzYWdlKHJlc3BvbnNlWzBdLm1zZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGJ1bGxldGVkID0gcmVzcG9uc2UubWFwKChlcnIpID0+IGDigKIgJHtnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlcnIubXNnKX1gKS5qb2luKFwiXFxuXCIpO1xuICAgICAgcmV0dXJuIGAke2BQbGVhc2UgZml4IHRoZSBmb2xsb3dpbmcgZXJyb3JzOmB9XG4ke2J1bGxldGVkfWA7XG4gICAgfVxuICB9O1xuICBjb25zdCBjcmVhdGVNZXNzYWdlRnJvbVpvZEZpZWxkRXJyb3JzID0gKGVycm9ycykgPT4ge1xuICAgIGNvbnN0IGxpc3RPZkVycm9ycyA9IGVycm9ycy5tYXAoKGVycikgPT4gYC0gJHtlcnIucGF0aC5qb2luKFwiL1wiKX06ICR7ZXJyLm1lc3NhZ2V9YCkuam9pbihcIlxcblwiKTtcbiAgICByZXR1cm4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHtsaXN0T2ZFcnJvcnN9YDtcbiAgfTtcbiAgY29uc3QgZ2V0RXJyb3JNZXNzYWdlID0gKGUpID0+IHtcbiAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBpZiAoaXNTdHJpbmdpZmllZEpzb25PYmplY3QoZS5tZXNzYWdlKSkge1xuICAgICAgICBjb25zdCBvYmogPSBKU09OLnBhcnNlKGUubWVzc2FnZSk7XG4gICAgICAgIGlmIChQeWRhbnRpY1ZhbGlkYXRpb25FcnJvclJlc3BvbnNlLnNhZmVQYXJzZShvYmopLnN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlTWVzc2FnZUZyb21QeWRhbnRpY1ZhbGlkYXRpb25FcnJvcihvYmopO1xuICAgICAgICB9IGVsc2UgaWYgKFpvZEZpZWxkRXJyb3JzLnNhZmVQYXJzZShvYmopLnN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyhvYmopO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUud2FybihgRW5jb3VudGVyZWQgdW5rbm93biBzdHJpbmdpZmllZCBKU09OIG9iamVjdDpcbiR7ZS5tZXNzYWdlfWApO1xuICAgICAgICAgIHJldHVybiBlLm1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlLm1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodHlwZW9mIGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShlKTtcbiAgICAgIH0gY2F0Y2ggKGUyKSB7XG4gICAgICAgIHJldHVybiBlMiArIFwiXCI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBlICsgXCJcIjtcbiAgICB9XG4gIH07XG4gIGNvbnN0IG1ha2VDYWxsYmFja1NhZmUgPSAoY2FsbGJhY2tOYW1lLCBmbikgPT4ge1xuICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGZuKC4uLmFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgW2Zvcm1dIEVycm9yIHJ1bm5pbmcgY2FsbGJhY2sgKCR7Y2FsbGJhY2tOYW1lfSk6YCwgZXJyb3IpO1xuICAgICAgICByZXR1cm4gdm9pZCAwO1xuICAgICAgfVxuICAgIH07XG4gIH07XG5cbiAgY29uc3QgUmVxdWlyZWRTdHJpbmcgPSB6b2Quei5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG4gIGNvbnN0IE9wdGlvbmFsU3RyaW5nID0gem9kLnouc3RyaW5nKCkudHJpbSgpLm9wdGlvbmFsKCk7XG4gIGNvbnN0IG51bGxPclVuZGVmT3IkMSA9ICh6VHlwZSkgPT4gem9kLnoubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG4gIHZhciBGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChGaWVsZE5hbWUyKSA9PiB7XG4gICAgRmllbGROYW1lMltcIkZJUlNUX05BTUVcIl0gPSBcImZpcnN0TmFtZVwiO1xuICAgIEZpZWxkTmFtZTJbXCJMQVNUX05BTUVcIl0gPSBcImxhc3ROYW1lXCI7XG4gICAgRmllbGROYW1lMltcIkVNQUlMXCJdID0gXCJlbWFpbFwiO1xuICAgIEZpZWxkTmFtZTJbXCJaSVBfQ09ERVwiXSA9IFwiemlwQ29kZVwiO1xuICAgIEZpZWxkTmFtZTJbXCJDSVRZXCJdID0gXCJjaXR5XCI7XG4gICAgRmllbGROYW1lMltcIlNUQVRFXCJdID0gXCJzdGF0ZVwiO1xuICAgIEZpZWxkTmFtZTJbXCJDT1VOVFJZXCJdID0gXCJjb3VudHJ5XCI7XG4gICAgRmllbGROYW1lMltcIkFERFJFU1NcIl0gPSBcImFkZHJlc3NcIjtcbiAgICBGaWVsZE5hbWUyW1wiUEhPTkVcIl0gPSBcInBob25lXCI7XG4gICAgRmllbGROYW1lMltcIlBST01PVElPTl9DT0RFXCJdID0gXCJwcm9tb3Rpb25Db2RlXCI7XG4gICAgcmV0dXJuIEZpZWxkTmFtZTI7XG4gIH0pKEZpZWxkTmFtZSB8fCB7fSk7XG4gIGNvbnN0IEZpZWxkTmFtZUVudW0gPSB6b2Quei5uYXRpdmVFbnVtKEZpZWxkTmFtZSk7XG4gIHZhciBQcml2YXRlRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoUHJpdmF0ZUZpZWxkTmFtZTIpID0+IHtcbiAgICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfTlVNQkVSXCJdID0gXCJjYXJkTnVtYmVyXCI7XG4gICAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZEV4cGlyeVwiO1xuICAgIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmRDdmNcIjtcbiAgICByZXR1cm4gUHJpdmF0ZUZpZWxkTmFtZTI7XG4gIH0pKFByaXZhdGVGaWVsZE5hbWUgfHwge30pO1xuICBjb25zdCBQcml2YXRlRmllbGROYW1lRW51bSA9IHpvZC56Lm5hdGl2ZUVudW0oUHJpdmF0ZUZpZWxkTmFtZSk7XG4gIGNvbnN0IEFsbEZpZWxkTmFtZXMgPSB6b2Quei51bmlvbihbRmllbGROYW1lRW51bSwgUHJpdmF0ZUZpZWxkTmFtZUVudW1dKTtcbiAgdmFyIEVsZW1lbnRUeXBlRW51bSA9IC8qIEBfX1BVUkVfXyAqLyAoKEVsZW1lbnRUeXBlRW51bTIpID0+IHtcbiAgICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRFwiXSA9IFwiY2FyZFwiO1xuICAgIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZC1udW1iZXJcIjtcbiAgICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9FWFBJUllcIl0gPSBcImNhcmQtZXhwaXJ5XCI7XG4gICAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkLWN2Y1wiO1xuICAgIHJldHVybiBFbGVtZW50VHlwZUVudW0yO1xuICB9KShFbGVtZW50VHlwZUVudW0gfHwge30pO1xuICBjb25zdCBFbGVtZW50VHlwZSA9IHpvZC56Lm5hdGl2ZUVudW0oRWxlbWVudFR5cGVFbnVtKTtcbiAgY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEgPSB6b2Quei5vYmplY3Qoe1xuICAgIHByb3ZpZGVyOiB6b2Quei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPciQxKHpvZC56LnN0cmluZygpKSxcbiAgICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHpvZC56LnJlY29yZCh6b2Quei5zdHJpbmcoKSwgem9kLnouYW55KCkpKVxuICB9KTtcbiAgY29uc3QgUGF5bWVudE1ldGhvZE1pbmltYWwgPSB6b2Quei5vYmplY3Qoe1xuICAgIGlkOiB6b2Quei5zdHJpbmcoKVxuICB9KTtcbiAgem9kLnoub2JqZWN0KHtcbiAgICBjYXJkTnVtYmVyOiBPcHRpb25hbFN0cmluZyxcbiAgICBleHBpcnk6IE9wdGlvbmFsU3RyaW5nLFxuICAgIGN2YzogT3B0aW9uYWxTdHJpbmdcbiAgfSk7XG4gIHpvZC56Lm9iamVjdCh7XG4gICAgYmFja2dyb3VuZENvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgICBjb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gICAgZm9udEZhbWlseTogT3B0aW9uYWxTdHJpbmcsXG4gICAgZm9udFNpemU6IE9wdGlvbmFsU3RyaW5nLFxuICAgIGZvbnRXZWlnaHQ6IE9wdGlvbmFsU3RyaW5nLFxuICAgIG1hcmdpbjogT3B0aW9uYWxTdHJpbmcsXG4gICAgcGFkZGluZzogT3B0aW9uYWxTdHJpbmcsXG4gICAgbGV0dGVyU3BhY2luZzogT3B0aW9uYWxTdHJpbmcsXG4gICAgbGluZUhlaWdodDogT3B0aW9uYWxTdHJpbmdcbiAgfSk7XG4gIGNvbnN0IEV2ZW50VHlwZSA9IHpvZC56LmVudW0oW1xuICAgIC8vIEVsZW1lbnQgLT4gRm9ybVxuICAgIFwiTEFZT1VUXCIsXG4gICAgXCJMT0FERURcIixcbiAgICBcIkJMVVJcIixcbiAgICBcIkZPQ1VTXCIsXG4gICAgXCJDSEFOR0VcIixcbiAgICBcIlRPS0VOSVpFX1NUQVJURURcIixcbiAgICBcIkNIRUNLT1VUX1NUQVJURURcIixcbiAgICBcIlBBWU1FTlRfRkxPV19TVEFSVEVEXCIsXG4gICAgXCJUT0tFTklaRV9TVUNDRVNTXCIsXG4gICAgXCJDSEVDS09VVF9TVUNDRVNTXCIsXG4gICAgXCJMT0FEX0VSUk9SXCIsXG4gICAgXCJWQUxJREFUSU9OX0VSUk9SXCIsXG4gICAgXCJUT0tFTklaRV9FUlJPUlwiLFxuICAgIFwiQ0hFQ0tPVVRfRVJST1JcIixcbiAgICBcIlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1NcIixcbiAgICAvLyBGb3JtIC0+IEVsZW1lbnRcbiAgICBcIlRPS0VOSVpFXCIsXG4gICAgXCJDSEVDS09VVFwiLFxuICAgIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJcbiAgXSk7XG4gIGNvbnN0IEdlbmVyaWNFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRV9TVEFSVEVEXCIsIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiXSk7XG4gIGNvbnN0IEdlbmVyaWNFdmVudFBheWxvYWQgPSB6b2Quei5vYmplY3QoeyB0eXBlOiBHZW5lcmljRXZlbnRUeXBlIH0pO1xuICBjb25zdCBJbnB1dEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkJMVVJcIiwgXCJGT0NVU1wiLCBcIkNIQU5HRVwiXSk7XG4gIGNvbnN0IElucHV0RXZlbnRQYXlsb2FkID0gem9kLnoub2JqZWN0KHtcbiAgICB0eXBlOiBJbnB1dEV2ZW50VHlwZSxcbiAgICBlbGVtZW50VHlwZTogUHJpdmF0ZUZpZWxkTmFtZUVudW0sXG4gICAgZXJyb3JzOiB6b2Quei5hcnJheSh6b2Quei5zdHJpbmcoKSkub3B0aW9uYWwoKVxuICB9KTtcbiAgY29uc3QgRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJMT0FEX0VSUk9SXCIsIFwiVE9LRU5JWkVfRVJST1JcIiwgXCJDSEVDS09VVF9FUlJPUlwiXSk7XG4gIGNvbnN0IEVycm9yRXZlbnRQYXlsb2FkID0gem9kLnoub2JqZWN0KHtcbiAgICB0eXBlOiBFcnJvckV2ZW50VHlwZSxcbiAgICBtZXNzYWdlOiBSZXF1aXJlZFN0cmluZyxcbiAgICBoZWFkZXJzOiB6b2Quei5yZWNvcmQoem9kLnouc3RyaW5nKCksIHpvZC56LnN0cmluZygpKS5vcHRpb25hbCgpXG4gIH0pO1xuICBjb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJWQUxJREFUSU9OX0VSUk9SXCJdKTtcbiAgY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkID0gem9kLnoub2JqZWN0KHtcbiAgICB0eXBlOiBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUsXG4gICAgZWxlbWVudFR5cGU6IEFsbEZpZWxkTmFtZXMsXG4gICAgZXJyb3JzOiB6b2Quei5hcnJheSh6b2Quei5zdHJpbmcoKSlcbiAgfSk7XG4gIGNvbnN0IExheW91dEV2ZW50UGF5bG9hZCA9IHpvZC56Lm9iamVjdCh7XG4gICAgdHlwZTogem9kLnoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MQVlPVVQpLFxuICAgIGhlaWdodDogUmVxdWlyZWRTdHJpbmdcbiAgfSk7XG4gIGNvbnN0IExvYWRlZEV2ZW50UGF5bG9hZCA9IHpvZC56Lm9iamVjdCh7XG4gICAgdHlwZTogem9kLnoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MT0FERUQpLFxuICAgIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gICAgdG90YWxBbW91bnRBdG9tczogem9kLnoubnVtYmVyKCksXG4gICAgY3VycmVuY3k6IE9wdGlvbmFsU3RyaW5nLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHpvZC56LmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZCQxKVxuICB9KTtcbiAgY29uc3QgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkID0gem9kLnoub2JqZWN0KHtcbiAgICB0eXBlOiB6b2Quei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlBBWU1FTlRfRkxPV19TVEFSVEVEKSxcbiAgICBuZXh0QWN0aW9uTWV0YWRhdGE6IHpvZC56LnJlY29yZCh6b2Quei5zdHJpbmcoKSwgem9kLnouYW55KCkpLFxuICAgIHBheW1lbnRGbG93TWV0YWRhdGE6IHpvZC56LmFueSgpLm9wdGlvbmFsKCksXG4gICAgc3RhcnRQRk1ldGFkYXRhOiB6b2Quei5vcHRpb25hbCh6b2Quei5yZWNvcmQoem9kLnouc3RyaW5nKCksIHpvZC56LmFueSgpKSlcbiAgfSk7XG4gIGNvbnN0IFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0gem9kLnoub2JqZWN0KHtcbiAgICB0eXBlOiB6b2Quei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1MpLFxuICAgIHBheW1lbnRNZXRob2RJZDogem9kLnouc3RyaW5nKClcbiAgfSk7XG4gIGNvbnN0IFJlcXVpcmVkRm9ybUZpZWxkcyA9IHpvZC56Lm9iamVjdCh7XG4gICAgW1wiZmlyc3ROYW1lXCIgLyogRklSU1RfTkFNRSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICAgIFtcImxhc3ROYW1lXCIgLyogTEFTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gICAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLFxuICAgIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICAgIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gICAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmdcbiAgfSk7XG4gIGNvbnN0IFBSRm9ybUZpZWxkcyA9IHpvZC56Lm9iamVjdCh7XG4gICAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLFxuICAgIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICAgIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gICAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmdcbiAgfSk7XG4gIGNvbnN0IFN1Ym1pdEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFXCIsIFwiQ0hFQ0tPVVRcIiwgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIl0pO1xuICBjb25zdCBTdWJtaXRFdmVudFBheWxvYWQgPSB6b2Quei5vYmplY3Qoe1xuICAgIHR5cGU6IFN1Ym1pdEV2ZW50VHlwZSxcbiAgICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gICAgcGF5bWVudEZsb3dNZXRhZGF0YTogem9kLnouYW55KCkub3B0aW9uYWwoKSxcbiAgICBkb05vdFVzZUxlZ2FjeUNDRmxvdzogem9kLnouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gICAgZXhpc3RpbmdDQ1BNSWQ6IE9wdGlvbmFsU3RyaW5nXG4gIH0pLmV4dGVuZChSZXF1aXJlZEZvcm1GaWVsZHMuc2hhcGUpO1xuICBjb25zdCBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6b2Quei5vYmplY3Qoe1xuICAgIHR5cGU6IHpvZC56LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uVE9LRU5JWkVfU1VDQ0VTUyksXG4gICAgaXNSZWFkeUZvckNoZWNrb3V0OiB6b2Quei5ib29sZWFuKClcbiAgfSk7XG4gIGNvbnN0IENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHpvZC56Lm9iamVjdCh7XG4gICAgdHlwZTogem9kLnoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5DSEVDS09VVF9TVUNDRVNTKSxcbiAgICBpbnZvaWNlVXJsczogem9kLnouYXJyYXkoem9kLnouc3RyaW5nKCkpLFxuICAgIHN1YnNjcmlwdGlvbklkczogem9kLnouYXJyYXkoem9kLnouc3RyaW5nKCkpLFxuICAgIGN1c3RvbWVySWQ6IHpvZC56LnN0cmluZygpXG4gIH0pO1xuICBjb25zdCBFdmVudFBheWxvYWQgPSB6b2Quei5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgICBHZW5lcmljRXZlbnRQYXlsb2FkLFxuICAgIElucHV0RXZlbnRQYXlsb2FkLFxuICAgIEVycm9yRXZlbnRQYXlsb2FkLFxuICAgIFZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCxcbiAgICBMYXlvdXRFdmVudFBheWxvYWQsXG4gICAgTG9hZGVkRXZlbnRQYXlsb2FkLFxuICAgIFN1Ym1pdEV2ZW50UGF5bG9hZCxcbiAgICBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gICAgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICAgIFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCxcbiAgICBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZFxuICBdKTtcbiAgY29uc3QgRWxlbWVudEV2ZW50ID0gem9kLnoub2JqZWN0KHtcbiAgICBwYXlsb2FkOiBFdmVudFBheWxvYWQsXG4gICAgbm9uY2U6IFJlcXVpcmVkU3RyaW5nLFxuICAgIGZvcm1JZDogUmVxdWlyZWRTdHJpbmcsXG4gICAgZWxlbWVudElkOiBSZXF1aXJlZFN0cmluZ1xuICB9KTtcbiAgem9kLnoub2JqZWN0KHtcbiAgICBhbW91bnRBdG9tOiB6b2Quei5udW1iZXIoKSxcbiAgICBjdXJyZW5jeTogUmVxdWlyZWRTdHJpbmdcbiAgfSk7XG4gIHpvZC56Lm9iamVjdCh7XG4gICAgc2VjdXJlX3Rva2VuOiB6b2Quei5zdHJpbmcoKSxcbiAgICBwcm9tb3Rpb25fY29kZTogem9kLnouc3RyaW5nKCkub3B0aW9uYWwoKVxuICB9KTtcbiAgem9kLnoub2JqZWN0KHtcbiAgICBzZWN1cmVfdG9rZW46IHpvZC56LnN0cmluZygpLFxuICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoem9kLnouc3RyaW5nKCkpXG4gIH0pO1xuICBjb25zdCBDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSA9IHpvZC56Lm9iamVjdCh7XG4gICAgcGF5bWVudF9tZXRob2RzOiB6b2Quei5hcnJheShQYXltZW50TWV0aG9kTWluaW1hbClcbiAgfSk7XG4gIGNvbnN0IEZpZWxkVmFsaWRhdGlvbkVycm9yID0gem9kLnoub2JqZWN0KHtcbiAgICBlbGVtZW50VHlwZTogem9kLnouc3RyaW5nKCksXG4gICAgZXJyb3JzOiB6b2Quei5hcnJheSh6b2Quei5zdHJpbmcoKSlcbiAgfSk7XG4gIHpvZC56Lm9iamVjdCh7XG4gICAgc2Vzc2lvbl9pZDogem9kLnouc3RyaW5nKClcbiAgfSk7XG4gIGNvbnN0IFRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UgPSB6b2Quei5vYmplY3Qoe1xuICAgIHN1Y2Nlc3M6IHpvZC56LmxpdGVyYWwoZmFsc2UpLFxuICAgIGVycm9yX3R5cGU6IHpvZC56LmxpdGVyYWwoXCJ2YWxpZGF0aW9uX2Vycm9yXCIpLFxuICAgIGVycm9yczogem9kLnouYXJyYXkoRmllbGRWYWxpZGF0aW9uRXJyb3IpXG4gIH0pO1xuICBjb25zdCBUb2tlbml6ZUNhcmRSZXNwb25zZSA9IHpvZC56LmRpc2NyaW1pbmF0ZWRVbmlvbihcInN1Y2Nlc3NcIiwgW1xuICAgIHpvZC56Lm9iamVjdCh7IHN1Y2Nlc3M6IHpvZC56LmxpdGVyYWwodHJ1ZSkgfSksXG4gICAgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZVxuICBdKTtcbiAgem9kLnoub2JqZWN0KHtcbiAgICBzZXNzaW9uX2lkOiB6b2Quei5zdHJpbmcoKSxcbiAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gICAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICAgIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHpvZC56LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoem9kLnouc3RyaW5nKCkpXG4gIH0pO1xuICB6b2Quei5vYmplY3Qoe1xuICAgIHNlc3Npb25faWQ6IHpvZC56LnN0cmluZygpLFxuICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHNcbiAgfSk7XG4gIHZhciBUaHJlZURTU3RhdHVzID0gLyogQF9fUFVSRV9fICovICgoVGhyZWVEU1N0YXR1czIpID0+IHtcbiAgICBUaHJlZURTU3RhdHVzMltcIlNVQ0NFU1NcIl0gPSBcInN1Y2Nlc3NcIjtcbiAgICBUaHJlZURTU3RhdHVzMltcIkZBSUxVUkVcIl0gPSBcImZhaWx1cmVcIjtcbiAgICBUaHJlZURTU3RhdHVzMltcIkNBTkNFTExFRFwiXSA9IFwiY2FuY2VsbGVkXCI7XG4gICAgcmV0dXJuIFRocmVlRFNTdGF0dXMyO1xuICB9KShUaHJlZURTU3RhdHVzIHx8IHt9KTtcbiAgY29uc3QgUGluZzNEU1N0YXR1c1Jlc3BvbnNlID0gem9kLnoub2JqZWN0KHtcbiAgICBzdGF0dXM6IHpvZC56LmVudW0oW1wic3VjY2Vzc1wiIC8qIFNVQ0NFU1MgKi8sIFwiZmFpbHVyZVwiIC8qIEZBSUxVUkUgKi8sIFwiY2FuY2VsbGVkXCIgLyogQ0FOQ0VMTEVEICovXSlcbiAgfSk7XG4gIGNvbnN0IENvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YSA9IHpvZC56Lm9iamVjdCh7XG4gICAgdHlwZTogem9kLnouc3RyaW5nKCksXG4gICAgcmVkaXJlY3RfdXJsOiB6b2Quei5zdHJpbmcoKSxcbiAgICBpbml0aWFsX2ludGVudF9pZDogem9kLnouc3RyaW5nKCksXG4gICAgY29uc2VudF9pZDogem9kLnouc3RyaW5nKClcbiAgfSk7XG5cbiAgY29uc3QgZXh0cmFjdElzc3Vlc1BlckZpZWxkID0gKGVycm9yKSA9PiB7XG4gICAgY29uc3QgaXNzdWVzUGVyRmllbGQgPSB7fTtcbiAgICBPYmplY3QuZW50cmllcyhlcnJvcikuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSBGaWVsZE5hbWVFbnVtLnBhcnNlKGtleSk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIGlzc3Vlc1BlckZpZWxkW2ZpZWxkTmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlLl9lcnJvcnMpKSB7XG4gICAgICAgICAgaXNzdWVzUGVyRmllbGRbZmllbGROYW1lXSA9IHZhbHVlLl9lcnJvcnM7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGlzc3Vlc1BlckZpZWxkO1xuICB9O1xuXG4gIGNvbnN0IFN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YSA9IHpvZC56Lm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6b2Quei5zdHJpbmcoKSxcbiAgICBjbGllbnRfc2VjcmV0OiB6b2Quei5zdHJpbmcoKSxcbiAgICBzdHJpcGVfcG1faWQ6IHpvZC56LnN0cmluZygpXG4gIH0pO1xuICBjb25zdCBQYXltZW50UmVxdWVzdE5leHRBY3Rpb25NZXRhZGF0YSA9IHpvZC56Lm9iamVjdCh7XG4gICAgdHlwZTogem9kLnouc3RyaW5nKCksXG4gICAgY2xpZW50X3NlY3JldDogem9kLnouc3RyaW5nKCksXG4gICAgc3RyaXBlX3BrOiB6b2Quei5zdHJpbmcoKVxuICB9KTtcbiAgY29uc3Qgb3VyQ3VycmVuY3lUb1RoZWlycyA9IHtcbiAgICB1c2Q6IFwidXNkXCIsXG4gICAgYnJsOiBcImJybFwiXG4gIH07XG4gIGNvbnN0IGdldExvYWRlZFN0cmlwZSA9IGFzeW5jIChwdWJsaXNoYWJsZUtleSkgPT4ge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgICAgaWYgKCFpc1N0cmlwZUpzUHJlc2VudCgpKSB7XG4gICAgICAgIGF3YWl0IHNsZWVwKDUwMCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghaXNTdHJpcGVKc1ByZXNlbnQoKSkge1xuICAgICAgY29uc29sZS5sb2coXCJTdHJpcGUgSlMgbm90IGZvdW5kLlwiKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU3RyaXBlIEpTIG5vdCBmb3VuZC5gKTtcbiAgICB9XG4gICAgY29uc3Qgc3RyaXBlID0gbmV3IFN0cmlwZShwdWJsaXNoYWJsZUtleSk7XG4gICAgcmV0dXJuIHN0cmlwZTtcbiAgfTtcbiAgY29uc3QgY3JlYXRlU3RyaXBlRWxlbWVudHMgPSBhc3luYyAoc3RyaXBlUHViS2V5LCBlbGVtZW50c09wdGlvbnMpID0+IHtcbiAgICBjb25zdCBzdHJpcGUgPSBhd2FpdCBnZXRMb2FkZWRTdHJpcGUoc3RyaXBlUHViS2V5KTtcbiAgICByZXR1cm4ge1xuICAgICAgZWxlbWVudHM6IHN0cmlwZS5lbGVtZW50cyhlbGVtZW50c09wdGlvbnMpLFxuICAgICAgc3RyaXBlXG4gICAgfTtcbiAgfTtcbiAgY29uc3QgY3JlYXRlU3RyaXBlUGF5bWVudFJlcXVlc3QgPSBhc3luYyAoc3RyaXBlUHViS2V5LCB0b3RhbEFtb3VudEF0b20sIGN1cnJlbmN5LCBpc0Ftb3VudFBlbmRpbmcsIGlzTGlua09ubHkpID0+IHtcbiAgICBjb25zb2xlLmxvZyhpc0xpbmtPbmx5KTtcbiAgICBjb25zdCBzdHJpcGUgPSBhd2FpdCBnZXRMb2FkZWRTdHJpcGUoc3RyaXBlUHViS2V5KTtcbiAgICBjb25zdCBzdHJpcGVDdXJyZW5jeSA9IG91ckN1cnJlbmN5VG9UaGVpcnNbY3VycmVuY3kudG9Mb3dlckNhc2UoKS50cmltKCldO1xuICAgIGNvbnN0IHBheW1lbnRSZXF1ZXN0ID0gc3RyaXBlLnBheW1lbnRSZXF1ZXN0KHtcbiAgICAgIC8vIFRPRE86IHJlcGxhY2UgdGhpcyB3aXRoIHN0cmlwZSBhY2NvdW50IGNvdW50cnkgYXMgc29vbiBhcyB3ZSBzdXBwb3J0IGl0XG4gICAgICBjb3VudHJ5OiBcIlVTXCIsXG4gICAgICBjdXJyZW5jeTogc3RyaXBlQ3VycmVuY3ksXG4gICAgICB0b3RhbDoge1xuICAgICAgICBsYWJlbDogXCJUb3RhbFwiLFxuICAgICAgICBhbW91bnQ6IHRvdGFsQW1vdW50QXRvbSxcbiAgICAgICAgcGVuZGluZzogaXNBbW91bnRQZW5kaW5nXG4gICAgICB9LFxuICAgICAgcmVxdWVzdFBheWVyTmFtZTogdHJ1ZSxcbiAgICAgIHJlcXVlc3RQYXllckVtYWlsOiB0cnVlLFxuICAgICAgZGlzYWJsZVdhbGxldHM6IFtdIFxuICAgIH0pO1xuICAgIHJldHVybiBwYXltZW50UmVxdWVzdDtcbiAgfTtcbiAgY29uc3Qgc2xlZXAgPSAodGltZW91dE1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXRNcyk7XG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGlzU3RyaXBlSnNQcmVzZW50ID0gKCkgPT4ge1xuICAgIHJldHVybiBcIlN0cmlwZVwiIGluIHdpbmRvdztcbiAgfTtcbiAgY29uc3Qgd2FpdEZvclVzZXJUb0FkZFBheW1lbnRNZXRob2QgPSBhc3luYyAocGF5bWVudFJlcXVlc3QpID0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcGF5bWVudFJlcXVlc3Qub24oXCJwYXltZW50bWV0aG9kXCIsIGFzeW5jIChldnQpID0+IHtcbiAgICAgICAgICByZXNvbHZlKGV2dCk7XG4gICAgICAgIH0pO1xuICAgICAgICBwYXltZW50UmVxdWVzdC5vbihcImNhbmNlbFwiLCAoKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5YCkpO1xuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBjb25zdCBjb25maXJtU3RyaXBlUHJQTSA9IGFzeW5jIChuZXh0QWN0aW9uTWV0YWRhdGEsIHN0cmlwZVBtKSA9PiB7XG4gICAgaWYgKCFuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BrIHx8ICFuZXh0QWN0aW9uTWV0YWRhdGEuY2xpZW50X3NlY3JldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG5leHQgYWN0aW9uIG1ldGFkYXRhIGZvcm1hdDogJHtKU09OLnN0cmluZ2lmeShuZXh0QWN0aW9uTWV0YWRhdGEpfWApO1xuICAgIH1cbiAgICBjb25zdCBzdHJpcGUgPSBhd2FpdCBnZXRMb2FkZWRTdHJpcGUobmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wayk7XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IHN0cmlwZS5jb25maXJtQ2FyZFNldHVwKG5leHRBY3Rpb25NZXRhZGF0YS5jbGllbnRfc2VjcmV0LCB7XG4gICAgICBwYXltZW50X21ldGhvZDogc3RyaXBlUG0ucGF5bWVudE1ldGhvZC5pZFxuICAgIH0pO1xuICAgIGlmIChjb25maXJtUmVzdWx0LmVycm9yKSB7XG4gICAgICBzdHJpcGVQbS5jb21wbGV0ZShcImZhaWxcIik7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFBheW1lbnQgZmFpbGVkOiAke2NvbmZpcm1SZXN1bHQuZXJyb3IubWVzc2FnZSA/PyBgdW5rbm93bmB9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0cmlwZVBtLmNvbXBsZXRlKFwic3VjY2Vzc1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbmZpcm1SZXN1bHQ7XG4gIH07XG4gIGNvbnN0IGxhdW5jaFN0cmlwZTNEU0RpYWxvZ0Zsb3cgPSBhc3luYyAobmV4dEFjdGlvbk1ldGFkYXRhKSA9PiB7XG4gICAgY29uc3Qgc3RyaXBlID0gYXdhaXQgZ2V0TG9hZGVkU3RyaXBlKG5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcGspO1xuICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBzdHJpcGUuY29uZmlybUNhcmRTZXR1cChuZXh0QWN0aW9uTWV0YWRhdGEuY2xpZW50X3NlY3JldCwge1xuICAgICAgcGF5bWVudF9tZXRob2Q6IG5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcG1faWRcbiAgICB9KTtcbiAgICBjb25zdCByZXN1bHRTdGF0dXMgPSBjb25maXJtUmVzdWx0LnNldHVwSW50ZW50Py5zdGF0dXM7XG4gICAgaWYgKHJlc3VsdFN0YXR1cyA9PT0gXCJzdWNjZWVkZWRcIikge1xuICAgICAgY29uc29sZS5sb2coXCJbM0RTXSBDT05GSVJNSU5HIFBNOlwiLCBuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BtX2lkKTtcbiAgICAgIGNvbnNvbGUubG9nKFwiWzNEU10gU2V0dXAgaW50ZW50IGNyZWF0ZWQ6XCIsIGNvbmZpcm1SZXN1bHQuc2V0dXBJbnRlbnQpO1xuICAgIH0gZWxzZSBpZiAocmVzdWx0U3RhdHVzID09PSBcImNhbmNlbGVkXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYCR7Y29uZmlybVJlc3VsdC5lcnJvcj8ubWVzc2FnZSA/PyBjb25maXJtUmVzdWx0LnNldHVwSW50ZW50Py5sYXN0X3NldHVwX2Vycm9yPy5tZXNzYWdlID8/IFwiUGF5bWVudCBmYWlsZWQsIHBsZWFzZSBjbGljayBzdWJtaXQgYWdhaW4gdG8gcGF5LlwifWBcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nID0gKHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRTdHlsZXMgPSBKU09OLnN0cmluZ2lmeShzdHlsZXMpO1xuICAgIHJldHVybiBzZXJpYWxpemVkU3R5bGVzO1xuICB9O1xuXG4gIGNvbnN0IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybSA9IChmb3JtRGl2LCBpbml0aWFsRGljdCkgPT4ge1xuICAgIGNvbnN0IGluY2x1ZGVkSW5wdXRzID0gQXJyYXkuZnJvbShmb3JtRGl2LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1vcGlkXVwiKSA/PyBbXSk7XG4gICAgY29uc3QgZXh0cmFEYXRhID0gaW5jbHVkZWRJbnB1dHMucmVkdWNlKChhY2MsIGlucHV0KSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBpbnB1dC5nZXRBdHRyaWJ1dGUoXCJkYXRhLW9waWRcIik7XG4gICAgICBpZiAoIWtleSkgcmV0dXJuIGFjYztcbiAgICAgIHJldHVybiB7IC4uLmFjYywgW2tleV06IGlucHV0LnZhbHVlIH07XG4gICAgfSwge30pO1xuICAgIHJldHVybiBleHRyYURhdGE7XG4gIH07XG4gIGNvbnN0IHBhcnNlRXZlbnRQYXlsb2FkID0gKGV2ZW50RGF0YSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gRWxlbWVudEV2ZW50LnBhcnNlKGV2ZW50RGF0YSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwYXJzaW5nIGV2ZW50IHBheWxvYWQ6XCIsIGV2ZW50RGF0YSwgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9O1xuICBjb25zdCBlbWl0RXZlbnQgPSAodGFyZ2V0LCBmb3JtSWQsIGVsZW1lbnRJZCwgcGF5bG9hZCwgYmFzZVVybCkgPT4ge1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgcGF5bG9hZCxcbiAgICAgIG5vbmNlOiB1dWlkLnY0KCksXG4gICAgICBmb3JtSWQsXG4gICAgICBlbGVtZW50SWRcbiAgICB9O1xuICAgIGNvbnNvbGUubG9nKGBbZm9ybSAke2Zvcm1JZH1dIFNlbmRpbmcgZXZlbnQgdG8gY2hpbGQgJHtlbGVtZW50SWR9OmAsIGV2ZW50KTtcbiAgICB0YXJnZXQucG9zdE1lc3NhZ2UoSlNPTi5zdHJpbmdpZnkoZXZlbnQpLCBiYXNlVXJsKTtcbiAgfTtcblxuICBjb25zdCBjaGVja0lmVmFsaWRDZGVDb25uZWN0aW9uT2JqZWN0ID0gYXN5bmMgKG9iaikgPT4ge1xuICAgIGlmICh0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiIHx8ICFvYmopIHJldHVybiBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGluZyA9IHsgdHlwZTogXCJwaW5nXCIgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9iai5zZW5kKHBpbmcpO1xuICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICd0cnVlJyBhZnRlciBwaW5nLCBnb3QgJHtKU09OLnN0cmluZ2lmeShyZXN1bHQpfWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBDREUgY29ubmVjdGlvbiBjaGVjazpgLCBlKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGlzUmVzdWx0VmFsaWQgPSAob2JqLCBpc1ZhbGlkKSA9PiB7XG4gICAgcmV0dXJuICEhb2JqICYmIGlzVmFsaWQ7XG4gIH07XG5cbiAgY29uc3QgbnVsbE9yVW5kZWZPciA9ICh6VHlwZSkgPT4gem9kLnoubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG4gIHpvZC56LnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbiAgY29uc3QgQ0RFUmVzcG9uc2VFcnJvciA9IHpvZC56Lm9iamVjdCh7XG4gICAgY2RlX3Jlc3BvbnNlX3R5cGU6IHpvZC56LmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgICBtZXNzYWdlOiB6b2Quei5zdHJpbmcoKSxcbiAgICBoZWFkZXJzOiB6b2Quei5yZWNvcmQoem9kLnouc3RyaW5nKCksIHpvZC56LnN0cmluZygpKS5vcHRpb25hbCgpXG4gIH0pO1xuICB6b2Quei5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG4gIGNvbnN0IENvdXBvbk1pbmltYWwgPSB6b2Quei5vYmplY3Qoe1xuICAgIG5hbWU6IHpvZC56LnN0cmluZygpLFxuICAgIGFtb3VudF9hdG9tX29mZjogbnVsbE9yVW5kZWZPcih6b2Quei5udW1iZXIoKSksXG4gICAgcGVyY2VudF9vZmY6IG51bGxPclVuZGVmT3Ioem9kLnoubnVtYmVyKCkpLFxuICAgIGN1cnJlbmN5OiBudWxsT3JVbmRlZk9yKHpvZC56LnN0cmluZygpKSxcbiAgICBkdXJhdGlvbjogem9kLnouc3RyaW5nKCksXG4gICAgZHVyYXRpb25faW5fbW9udGhzOiBudWxsT3JVbmRlZk9yKHpvZC56Lm51bWJlcigpKVxuICB9KTtcbiAgY29uc3QgTGluZUl0ZW0gPSB6b2Quei5vYmplY3Qoe1xuICAgIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6b2Quei5udW1iZXIoKS5pbnQoKSxcbiAgICBhbW91bnRfdG90YWxfYXRvbTogem9kLnoubnVtYmVyKCkuaW50KCksXG4gICAgY3VycmVuY3k6IHpvZC56LnN0cmluZygpLFxuICAgIGRlc2NyaXB0aW9uOiBudWxsT3JVbmRlZk9yKHpvZC56LnN0cmluZygpKSxcbiAgICBwcmljZV9pZDogem9kLnouc3RyaW5nKCksXG4gICAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6b2Quei5zdHJpbmcoKSksXG4gICAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6b2Quei5udW1iZXIoKS5pbnQoKSksXG4gICAgcXVhbnRpdHk6IHpvZC56Lm51bWJlcigpLmludCgpXG4gIH0pO1xuICBjb25zdCBCcmFuZFNldHRpbmdzID0gem9kLnoucmVjb3JkKHpvZC56LnN0cmluZygpLCB6b2Quei5hbnkoKSk7XG4gIGNvbnN0IEJyYW5kID0gem9kLnoub2JqZWN0KHtcbiAgICBuYW1lOiB6b2Quei5zdHJpbmcoKSxcbiAgICBzZXR0aW5nczogbnVsbE9yVW5kZWZPcihCcmFuZFNldHRpbmdzKVxuICB9KTtcbiAgY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kID0gem9kLnoub2JqZWN0KHtcbiAgICBwcm92aWRlcjogem9kLnouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX25hbWU6IG51bGxPclVuZGVmT3Ioem9kLnouc3RyaW5nKCkpLFxuICAgIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHpvZC56LnJlY29yZCh6b2Quei5zdHJpbmcoKSwgem9kLnouYW55KCkpKVxuICB9KTtcbiAgY29uc3QgU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwgPSB6b2Quei5vYmplY3Qoe1xuICAgIHF1YW50aXR5OiB6b2Quei5udW1iZXIoKVxuICB9KTtcbiAgY29uc3QgU3Vic2NyaXB0aW9uTWluaW1hbCA9IHpvZC56Lm9iamVjdCh7XG4gICAgaWQ6IG51bGxPclVuZGVmT3Ioem9kLnouc3RyaW5nKCkpLFxuICAgIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3Ioem9kLnouc3RyaW5nKCkpLFxuICAgIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3Ioem9kLnoubnVtYmVyKCkuaW50KCkpLFxuICAgIHN1YnNjcmlwdGlvbl9pdGVtczogem9kLnouYXJyYXkoU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwpLFxuICAgIHRyaWFsX3N0YXJ0OiBudWxsT3JVbmRlZk9yKHpvZC56LnN0cmluZygpKSxcbiAgICB0cmlhbF9lbmQ6IG51bGxPclVuZGVmT3Ioem9kLnouc3RyaW5nKCkpXG4gIH0pO1xuICBjb25zdCBJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwgPSB6b2Quei5vYmplY3Qoe1xuICAgIGFtb3VudF9hdG9tOiB6b2Quei5udW1iZXIoKVxuICB9KTtcbiAgY29uc3QgSW52b2ljZUxpbmVJdGVtTWluaW1hbCA9IHpvZC56Lm9iamVjdCh7XG4gICAgYW1vdW50X2F0b206IHpvZC56Lm51bWJlcigpLFxuICAgIGFtb3VudF9hdG9tX2NvbnNpZGVyaW5nX2Rpc2NvdW50X2FwcGxpZWQ6IHpvZC56Lm51bWJlcigpLFxuICAgIGN1cnJlbmN5OiB6b2Quei5zdHJpbmcoKSxcbiAgICBkaXNjb3VudF9hbW91bnRfYXRvbXM6IHpvZC56LmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCksXG4gICAgc3Vic2NyaXB0aW9uX2l0ZW1faWQ6IHpvZC56LnN0cmluZygpXG4gIH0pO1xuICBjb25zdCBEaXNjb3VudE1pbmltYWwgPSB6b2Quei5vYmplY3Qoe1xuICAgIGNvdXBvbjogQ291cG9uTWluaW1hbFxuICB9KTtcbiAgY29uc3QgSW52b2ljZU1pbmltYWwgPSB6b2Quei5vYmplY3Qoe1xuICAgIGN1cnJlbmN5OiB6b2Quei5zdHJpbmcoKSxcbiAgICBkaXNjb3VudHM6IHpvZC56LmFycmF5KERpc2NvdW50TWluaW1hbCksXG4gICAgaG9zdGVkX2ludm9pY2VfdXJsOiBudWxsT3JVbmRlZk9yKHpvZC56LnN0cmluZygpKSxcbiAgICBsaW5lczogem9kLnouYXJyYXkoSW52b2ljZUxpbmVJdGVtTWluaW1hbCksXG4gICAgcmVtYWluaW5nX2Ftb3VudF9hdG9tOiB6b2Quei5udW1iZXIoKSxcbiAgICB0YXhfYW1vdW50X2F0b206IHpvZC56Lm51bWJlcigpLFxuICAgIHRvdGFsX2Ftb3VudF9hdG9tOiB6b2Quei5udW1iZXIoKSxcbiAgICB0b3RhbF9kaXNjb3VudF9hbW91bnRfYXRvbXM6IHpvZC56LmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbClcbiAgfSk7XG4gIGNvbnN0IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCA9IHpvZC56Lm9iamVjdCh7XG4gICAgY3JlYXRlZDogem9kLnouYXJyYXkoU3Vic2NyaXB0aW9uTWluaW1hbCksXG4gICAgaW52b2ljZXM6IHpvZC56LmFycmF5KEludm9pY2VNaW5pbWFsKVxuICB9KTtcbiAgY29uc3QgUHJldmlld0NoZWNrb3V0UmVzcG9uc2UgPSB6b2Quei5vYmplY3Qoe1xuICAgIHByZXZpZXc6IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCxcbiAgICBwcmV2aWV3X3Bvc3RfdHJpYWw6IG51bGxPclVuZGVmT3IoQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsKSxcbiAgICBjb3Vwb25zOiB6b2Quei5hcnJheShDb3Vwb25NaW5pbWFsKVxuICB9KTtcbiAgY29uc3QgX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiA9IHpvZC56Lm9iamVjdCh7XG4gICAgc3RhdHVzOiB6b2Quei5saXRlcmFsKFwib3BlblwiKSxcbiAgICB0b2tlbjogem9kLnouc3RyaW5nKCksXG4gICAgZW1haWw6IG51bGxPclVuZGVmT3Ioem9kLnouc3RyaW5nKCkpLFxuICAgIGxpbmVfaXRlbXM6IHpvZC56LmFycmF5KExpbmVJdGVtKSxcbiAgICBhbW91bnRfc3VidG90YWxfYXRvbTogem9kLnoubnVtYmVyKCkuaW50KCksXG4gICAgYW1vdW50X3RvdGFsX2F0b206IHpvZC56Lm51bWJlcigpLmludCgpLFxuICAgIGJyYW5kOiBCcmFuZCxcbiAgICBzdWJzX3ByZXZpZXc6IG51bGxPclVuZGVmT3IoUHJldmlld0NoZWNrb3V0UmVzcG9uc2UpLFxuICAgIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICAgIG1ldGhvZHNfYXZhaWxhYmxlOiB6b2Quei5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QpXG4gIH0pO1xuICBjb25zdCBQYXltZW50Rm9ybVByZWZpbGwgPSB6b2Quei5kaXNjcmltaW5hdGVkVW5pb24oXCJtb2RlXCIsIFtcbiAgICB6b2Quei5vYmplY3Qoe1xuICAgICAgbW9kZTogem9kLnoubGl0ZXJhbChcInNldHVwXCIpLFxuICAgICAgY3VycmVuY3k6IHpvZC56Lm51bGxhYmxlKHpvZC56LnVuZGVmaW5lZCgpKVxuICAgIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKSxcbiAgICB6b2Quei5vYmplY3Qoe1xuICAgICAgbW9kZTogem9kLnouZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICAgIGN1cnJlbmN5OiB6b2Quei5zdHJpbmcoKVxuICAgIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKVxuICBdKTtcbiAgY29uc3QgQ29tcGxldGVkRm9ybVByZWZpbGwgPSB6b2Quei5vYmplY3Qoe1xuICAgIHN0YXR1czogem9kLnoubGl0ZXJhbChcImNvbXBsZXRlXCIpXG4gIH0pO1xuICBjb25zdCBFeHBpcmVkRm9ybVByZWZpbGwgPSB6b2Quei5vYmplY3Qoe1xuICAgIHN0YXR1czogem9kLnoubGl0ZXJhbChcImV4cGlyZWRcIilcbiAgfSk7XG4gIHpvZC56LnVuaW9uKFtQYXltZW50Rm9ybVByZWZpbGwsIENvbXBsZXRlZEZvcm1QcmVmaWxsLCBFeHBpcmVkRm9ybVByZWZpbGxdKTtcbiAgem9kLnoub2JqZWN0KHtcbiAgICBsb2dvOiB6b2Quei5zdHJpbmcoKSxcbiAgICBpY29uOiB6b2Quei5zdHJpbmcoKSxcbiAgICBwcmltYXJ5X2NvbG9yOiB6b2Quei5zdHJpbmcoKSxcbiAgICBzZWNvbmRhcnlfY29sb3I6IHpvZC56LnN0cmluZygpXG4gIH0pO1xuICBjb25zdCBDaGVja291dFN1Y2Nlc3NSZXNwb25zZSA9IHpvZC56Lm9iamVjdCh7XG4gICAgaW52b2ljZV91cmxzOiB6b2Quei5hcnJheSh6b2Quei5zdHJpbmcoKSksXG4gICAgc3Vic2NyaXB0aW9uX2lkczogem9kLnouYXJyYXkoem9kLnouc3RyaW5nKCkpLFxuICAgIGN1c3RvbWVyX2lkOiB6b2Quei5zdHJpbmcoKVxuICB9KTtcbiAgem9kLnoub2JqZWN0KHtcbiAgICBzZWN1cmVfdG9rZW46IHpvZC56LnN0cmluZygpLFxuICAgIHBheW1lbnRfaW5wdXQ6IHpvZC56LmFueSgpLFxuICAgIC8vIFNob3VsZCBmb2xsb3cgQW55UGF5bWVudElucHV0IGZyb20gQ0RFXG4gICAgY3VzdG9tZXJfZW1haWw6IHpvZC56LnN0cmluZygpLFxuICAgIGN1c3RvbWVyX3ppcF9jb2RlOiB6b2Quei5zdHJpbmcoKSxcbiAgICBjdXN0b21lcl9jb3VudHJ5OiB6b2Quei5zdHJpbmcoKSxcbiAgICBsaW5lX2l0ZW1zOiB6b2Quei5hcnJheShMaW5lSXRlbSksXG4gICAgdG90YWxfYW1vdW50X2F0b206IHpvZC56Lm51bWJlcigpLmludCgpLFxuICAgIGNhbmNlbF9hdF9lbmQ6IHpvZC56LmJvb2xlYW4oKSxcbiAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIHByb21vdGlvbl9jb2RlOiB6b2Quei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHpvZC56LmJvb2xlYW4oKS5vcHRpb25hbCgpXG4gIH0pO1xuICBjb25zdCBTZXR1cENoZWNrb3V0UmVzcG9uc2UgPSB6b2Quei5vYmplY3Qoe1xuICAgIHBheW1lbnRfbWV0aG9kX2lkOiB6b2Quei5zdHJpbmcoKVxuICB9KTtcbiAgem9kLnoub2JqZWN0KHtcbiAgICBpZDogem9kLnouc3RyaW5nKCksXG4gICAgcmV0dXJuX3VybDogem9kLnouc3RyaW5nKClcbiAgfSk7XG4gIGNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yID0gem9kLnoub2JqZWN0KHtcbiAgICB0eXBlOiB6b2Quei5zdHJpbmcoKSxcbiAgICBsb2M6IHpvZC56LmFycmF5KHpvZC56LnN0cmluZygpKSxcbiAgICBtc2c6IHpvZC56LnN0cmluZygpLFxuICAgIHVybDogem9kLnouc3RyaW5nKClcbiAgfSk7XG4gIHpvZC56LmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yKTtcbiAgem9kLnoub2JqZWN0KHtcbiAgICBuZXdfY3VzdG9tZXJfZW1haWw6IHpvZC56LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHpvZC56LnJlY29yZCh6b2Quei5zdHJpbmcoKSwgem9kLnouYW55KCkpLm9wdGlvbmFsKCksXG4gICAgcGF5bWVudF9wcm92aWRlcjogem9kLnouc3RyaW5nKCksXG4gICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBleGlzdGluZ19jY19wbV9pZDogem9kLnouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICB0aGVpcl9leGlzdGluZ19wbV9pZDogem9kLnouc3RyaW5nKCkub3B0aW9uYWwoKVxuICB9KTtcbiAgY29uc3QgU3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gem9kLnoub2JqZWN0KHtcbiAgICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHpvZC56LmFycmF5KHpvZC56LnJlY29yZCh6b2Quei5zdHJpbmcoKSwgem9kLnouYW55KCkpKVxuICB9KTtcbiAgem9kLnoub2JqZWN0KHtcbiAgICBmaWVsZHM6IFBSRm9ybUZpZWxkcyxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZFxuICB9KTtcbiAgem9kLnoub2JqZWN0KHtcbiAgICBzZXNzaW9uX2lkOiB6b2Quei5zdHJpbmcoKSxcbiAgICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZFxuICB9KTtcbiAgY29uc3QgU3RhcnRQYXltZW50Rmxvd0ZvckNDUmVzcG9uc2UgPSB6b2Quei5vYmplY3Qoe1xuICAgIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogem9kLnouYXJyYXkoem9kLnoucmVjb3JkKHpvZC56LnN0cmluZygpLCB6b2Quei5hbnkoKSkpLFxuICAgIGNjX3BtX2lkOiB6b2Quei5zdHJpbmcoKVxuICB9KTtcbiAgem9kLnoucmVjb3JkKHpvZC56LmFueSgpKTtcblxuICBjb25zdCBzdW0gPSAoYXJyKSA9PiB7XG4gICAgcmV0dXJuIGFyci5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcbiAgfTtcblxuICBmdW5jdGlvbiBmaXhQcm90byh0YXJnZXQsIHByb3RvdHlwZSkge1xuICAgIHZhciBzZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiAgICBzZXRQcm90b3R5cGVPZiA/IHNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG90eXBlKSA6IHRhcmdldC5fX3Byb3RvX18gPSBwcm90b3R5cGU7XG4gIH1cbiAgZnVuY3Rpb24gZml4U3RhY2sodGFyZ2V0LCBmbikge1xuICAgIGlmIChmbiA9PT0gdm9pZCAwKSB7XG4gICAgICBmbiA9IHRhcmdldC5jb25zdHJ1Y3RvcjtcbiAgICB9XG5cbiAgICB2YXIgY2FwdHVyZVN0YWNrVHJhY2UgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgICBjYXB0dXJlU3RhY2tUcmFjZSAmJiBjYXB0dXJlU3RhY2tUcmFjZSh0YXJnZXQsIGZuKTtcbiAgfVxuXG4gIHZhciBfX2V4dGVuZHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF9leHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gZXh0ZW5kU3RhdGljcyhkLCBiKSB7XG4gICAgICBfZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7XG4gICAgICAgIF9fcHJvdG9fXzogW11cbiAgICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBkLl9fcHJvdG9fXyA9IGI7XG4gICAgICB9IHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGZvciAodmFyIHAgaW4gYikge1xuICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gX2V4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcblxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbCkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuXG4gICAgICBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcblxuICAgICAgZnVuY3Rpb24gX18oKSB7XG4gICAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBkO1xuICAgICAgfVxuXG4gICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbiAgfSgpO1xuXG4gIHZhciBDdXN0b21FcnJvciA9IGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQ3VzdG9tRXJyb3IsIF9zdXBlcik7XG5cbiAgICBmdW5jdGlvbiBDdXN0b21FcnJvcihtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG1lc3NhZ2UsIG9wdGlvbnMpIHx8IHRoaXM7XG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfdGhpcywgJ25hbWUnLCB7XG4gICAgICAgIHZhbHVlOiBfbmV3VGFyZ2V0Lm5hbWUsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgICAgZml4UHJvdG8oX3RoaXMsIF9uZXdUYXJnZXQucHJvdG90eXBlKTtcbiAgICAgIGZpeFN0YWNrKF90aGlzKTtcbiAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG5cbiAgICByZXR1cm4gQ3VzdG9tRXJyb3I7XG4gIH0oRXJyb3IpO1xuXG4gIGNsYXNzIENkZUVycm9yIGV4dGVuZHMgQ3VzdG9tRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKHJlc3BvbnNlKSB7XG4gICAgICBjb25zdCBmcmllbmRseU1lc3NhZ2UgPSBgW2NkZS1jbGllbnRdIEVycm9yIHF1ZXJ5aW5nIENERTogJHtyZXNwb25zZS5tZXNzYWdlfWA7XG4gICAgICBzdXBlcihmcmllbmRseU1lc3NhZ2UpO1xuICAgICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgIH1cbiAgICBnZXQgb3JpZ2luYWxFcnJvck1lc3NhZ2UoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNwb25zZS5tZXNzYWdlO1xuICAgIH1cbiAgfVxuICBjb25zdCBxdWVyeUNERSA9IGFzeW5jIChjZGVDb25uLCBkYXRhLCByZXNwb25zZVNjaGVtYSkgPT4ge1xuICAgIGNvbnNvbGUubG9nKFwiW2NkZS1jbGllbnRdIFF1ZXJ5aW5nIENERSB3aXRoIHBhdGggYW5kIGNvbm5lY3Rpb246XCIsIGRhdGEudHlwZSwgY2RlQ29ubik7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjZGVDb25uLnNlbmQoZGF0YSk7XG4gICAgY29uc29sZS5sb2coXCJbY2RlLWNsaWVudF0gR290IHJlc3BvbnNlIGZyb20gQ0RFOlwiLCByZXNwb25zZSk7XG4gICAgaWYgKGlzQ0RFUmVzcG9uc2VFcnJvcihyZXNwb25zZSkpIHtcbiAgICAgIHRocm93IG5ldyBDZGVFcnJvcihyZXNwb25zZSk7XG4gICAgfVxuICAgIGlmICghY2hlY2tJZkNvbmZvcm1zVG9TY2hlbWEocmVzcG9uc2UsIHJlc3BvbnNlU2NoZW1hKSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVzcG9uc2VTY2hlbWEuc2FmZVBhcnNlKHJlc3BvbnNlKTtcbiAgICAgIGlmIChyZXN1bHQuc3VjY2VzcykgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZVwiKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJPSlMgcXVlcnlBcGkgZ290IGEgc2NoZW1hIGVycm9yLiBFeHBlY3RlZCBzY2hlbWE6XCIsIHJlc3BvbnNlU2NoZW1hLCBcIkFjdHVhbDpcIiwgcmVzcG9uc2UpO1xuICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgIH1cbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH07XG4gIGNvbnN0IGNoZWNrSWZDb25mb3Jtc1RvU2NoZW1hID0gKHZhbHVlLCBzY2hlbWEpID0+IHtcbiAgICByZXR1cm4gc2NoZW1hLnNhZmVQYXJzZSh2YWx1ZSkuc3VjY2VzcztcbiAgfTtcbiAgY29uc3QgaXNDREVSZXNwb25zZUVycm9yID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgcmV0dXJuIENERVJlc3BvbnNlRXJyb3Iuc2FmZVBhcnNlKHJlc3BvbnNlKS5zdWNjZXNzO1xuICB9O1xuICBjb25zdCBnZXRDaGVja291dFByZXZpZXcgPSBhc3luYyAoY2RlQ29ubiwgcmVxdWVzdCkgPT4ge1xuICAgIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwiZ2V0X2NoZWNrb3V0X3ByZXZpZXdcIiwgcGF5bG9hZDogcmVxdWVzdCB9LCBQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSk7XG4gIH07XG4gIGNvbnN0IGdldFByZWZpbGwgPSBhc3luYyAoY2RlQ29ubikgPT4ge1xuICAgIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwiZ2V0X3ByZWZpbGxcIiwgcGF5bG9hZDoge30gfSwgUGF5bWVudEZvcm1QcmVmaWxsKTtcbiAgfTtcbiAgY29uc3Qgc3RhcnRQYXltZW50RmxvdyA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gICAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJ2Ml9zdGFydF9wYXltZW50X2Zsb3dcIiwgcGF5bG9hZCB9LCBTdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICB9O1xuICBjb25zdCBzdGFydFBheW1lbnRGbG93Rm9yQ0MgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICAgIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9jY1wiLCBwYXlsb2FkIH0sIFN0YXJ0UGF5bWVudEZsb3dGb3JDQ1Jlc3BvbnNlKTtcbiAgfTtcbiAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd0ZvclBSID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJcIiwgcGF5bG9hZCB9LCBTdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICB9O1xuICBjb25zdCBjb25maXJtUGF5bWVudEZsb3cgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICAgIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwiY29uZmlybV9wYXltZW50X2Zsb3dcIiwgcGF5bG9hZCB9LCBDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSk7XG4gIH07XG4gIGNvbnN0IGdldENoZWNrb3V0VmFsdWUgPSBhc3luYyAoY2RlQ29ubiwgc2VjdXJlVG9rZW4sIHByb21vQ29kZSkgPT4ge1xuICAgIGNvbnN0IGNoZWNrb3V0UHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlldyhjZGVDb25uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHNlY3VyZVRva2VuLFxuICAgICAgcHJvbW90aW9uX2NvZGU6IHByb21vQ29kZVxuICAgIH0pO1xuICAgIGNvbnN0IGN1cnJlbmNpZXMgPSBuZXcgU2V0KGNoZWNrb3V0UHJldmlldy5wcmV2aWV3Lmludm9pY2VzLm1hcCgoaW52KSA9PiBpbnYuY3VycmVuY3kpKTtcbiAgICBpZiAoY3VycmVuY2llcy5zaXplICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIGN1cnJlbmN5LCBnb3QgJHtjdXJyZW5jaWVzLnNpemV9YCk7XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbmN5ID0gY3VycmVuY2llcy52YWx1ZXMoKS5uZXh0KCkudmFsdWUgPz8gXCJ1c2RcIjtcbiAgICBjb25zdCBhbW91bnRBdG9tID0gc3VtKGNoZWNrb3V0UHJldmlldy5wcmV2aWV3Lmludm9pY2VzLm1hcCgoaW52KSA9PiBpbnYucmVtYWluaW5nX2Ftb3VudF9hdG9tKSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbmN5LFxuICAgICAgYW1vdW50QXRvbVxuICAgIH07XG4gIH07XG4gIGNvbnN0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudCA9IGFzeW5jIChjZGVDb25uLCBzZWN1cmVUb2tlbiwgaXNTZXR1cE1vZGUsIHByb21vQ29kZSkgPT4ge1xuICAgIGlmIChpc1NldHVwTW9kZSkge1xuICAgICAgcmV0dXJuIHsgYW1vdW50QXRvbTogMCwgY3VycmVuY3k6IFwidXNkXCIgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvbW9Db2RlID0gIXByb21vQ29kZSA/IHZvaWQgMCA6IHByb21vQ29kZTtcbiAgICAgIGNvbnN0IGNoZWNrb3V0UHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0VmFsdWUoY2RlQ29ubiwgc2VjdXJlVG9rZW4sIHByb21vQ29kZSk7XG4gICAgICByZXR1cm4geyBhbW91bnRBdG9tOiBjaGVja291dFByZXZpZXcuYW1vdW50QXRvbSwgY3VycmVuY3k6IGNoZWNrb3V0UHJldmlldy5jdXJyZW5jeSB9O1xuICAgIH1cbiAgfTtcbiAgY29uc3QgdG9rZW5pemVDYXJkT25BbGxDb25uZWN0aW9ucyA9IGFzeW5jIChhbGxDZGVDb25uZWN0aW9ucywgcGF5bG9hZCkgPT4ge1xuICAgIGlmIChhbGxDZGVDb25uZWN0aW9ucy5zaXplID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBDREUgY29ubmVjdGlvbnMgZm91bmRcIik7XG4gICAgfVxuICAgIGNvbnN0IHJlc3BvbnNlcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgQXJyYXkuZnJvbShhbGxDZGVDb25uZWN0aW9ucy52YWx1ZXMoKSkubWFwKFxuICAgICAgICAoY2RlQ29ubikgPT4gcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcInRva2VuaXplX2NhcmRcIiwgcGF5bG9hZCB9LCBUb2tlbml6ZUNhcmRSZXNwb25zZSlcbiAgICAgIClcbiAgICApO1xuICAgIHJldHVybiByZXNwb25zZXM7XG4gIH07XG4gIGNvbnN0IGNoZWNrb3V0Q2FyZEVsZW1lbnRzID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJjaGVja291dF9jYXJkX2VsZW1lbnRzXCIsIHBheWxvYWQgfSwgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiW2NkZS1jbGllbnRdIEVycm9yIGR1cmluZyBjaGVja291dENhcmRFbGVtZW50czpcIiwgZXJyb3IsIEpTT04uc3RyaW5naWZ5KGVycm9yKSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHNldHVwQ2hlY2tvdXQgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICAgIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwic2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZCB9LCBTZXR1cENoZWNrb3V0UmVzcG9uc2UpO1xuICB9O1xuICBjb25zdCBwZXJmb3JtQ2hlY2tvdXQgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICAgIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwiY2hlY2tvdXRcIiwgcGF5bG9hZCB9LCBDaGVja291dFN1Y2Nlc3NSZXNwb25zZSk7XG4gIH07XG4gIGNvbnN0IENERV9QT0xMSU5HX0lOVEVSVkFMID0gMWUzO1xuICBjb25zdCBwaW5nQ2RlRm9yM2RzU3RhdHVzID0gYXN5bmMgKGlmcmFtZSwgY2hpbGRPcmlnaW4pID0+IHtcbiAgICBjb25zb2xlLmxvZyhjaGlsZE9yaWdpbik7XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IHBlbnBhbC5jb25uZWN0VG9DaGlsZCh7XG4gICAgICBpZnJhbWUsXG4gICAgICBkZWJ1ZzogdHJ1ZSxcbiAgICAgIHRpbWVvdXQ6IENERV9QT0xMSU5HX0lOVEVSVkFMLFxuICAgICAgY2hpbGRPcmlnaW46IFwiKlwiXG4gICAgICAvLyBUT0RPOiB1c2Ugd2l0aCBwcm9wZXIgY2hpbGRPcmlnaW5cbiAgICB9KTtcbiAgICBjb25zdCBjb25uZWN0aW9uT2JqID0gYXdhaXQgY29ubmVjdGlvbi5wcm9taXNlO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHF1ZXJ5Q0RFKGNvbm5lY3Rpb25PYmosIHsgdHlwZTogXCJwaW5nLTNkcy1zdGF0dXNcIiB9LCBQaW5nM0RTU3RhdHVzUmVzcG9uc2UpO1xuICAgIHJldHVybiByZXN1bHQuc3RhdHVzO1xuICB9O1xuXG4gIGNvbnN0IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzID0gKHNpbXBsZU9qc0Zsb3cpID0+IHtcbiAgICByZXR1cm4gYXN5bmMgKHBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcGFyYW1zLmZsb3dDYWxsYmFja3Mub25DaGVja291dFN0YXJ0ZWQoKTtcbiAgICAgICAgY29uc3QgZmxvd1Jlc3VsdCA9IGF3YWl0IHNpbXBsZU9qc0Zsb3cocGFyYW1zKTtcbiAgICAgICAgaWYgKGZsb3dSZXN1bHQubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgICAgcGFyYW1zLmZsb3dDYWxsYmFja3Mub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzKGZsb3dSZXN1bHQucmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkKTtcbiAgICAgICAgfSBlbHNlIGlmIChmbG93UmVzdWx0Lm1vZGUgPT09IFwiY2hlY2tvdXRcIikge1xuICAgICAgICAgIHBhcmFtcy5mbG93Q2FsbGJhY2tzLm9uQ2hlY2tvdXRTdWNjZXNzKFxuICAgICAgICAgICAgZmxvd1Jlc3VsdC5yZXN1bHQuaW52b2ljZV91cmxzLFxuICAgICAgICAgICAgZmxvd1Jlc3VsdC5yZXN1bHQuc3Vic2NyaXB0aW9uX2lkcyxcbiAgICAgICAgICAgIGZsb3dSZXN1bHQucmVzdWx0LmN1c3RvbWVyX2lkXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBtb2RlOiAke2Zsb3dSZXN1bHR9YCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHBhcmFtcy5mbG93Q2FsbGJhY2tzLm9uQ2hlY2tvdXRFcnJvcihnZXRFcnJvck1lc3NhZ2UoZXJyb3IpKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcbiAgY29uc3QgYWRkRXJyb3JDYXRjaGVyRm9ySW5pdCA9IChpbml0KSA9PiB7XG4gICAgcmV0dXJuIGFzeW5jIChwYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBpbml0KHBhcmFtcyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCB7IGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImluaXQtZXJyb3ItY2F0Y2hlclwiKTtcbiAgICAgICAgZXJyX18oZXJyb3IpO1xuICAgICAgICByZXR1cm4geyBpc0F2YWlsYWJsZTogZmFsc2UsIHJlYXNvbjogZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSB9O1xuICAgICAgfVxuICAgIH07XG4gIH07XG4gIGNvbnN0IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzID0gKHByZWZpeCkgPT4ge1xuICAgIGNvbnN0IGxvZyA9ICguLi5hcmdzKSA9PiB7XG4gICAgICB3aW5kb3dbXCJjb25zb2xlXCJdLmxvZyhgJHtjaGFsay5ncmVlbi5ib2xkKFwib2pzL1wiKX0ke2NoYWxrLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgICB9O1xuICAgIGNvbnN0IGVyciA9ICguLi5hcmdzKSA9PiB7XG4gICAgICB3aW5kb3dbXCJjb25zb2xlXCJdLmVycm9yKGAke2NoYWxrLnJlZC5ib2xkKFwib2pzL1wiKX0ke2NoYWxrLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBsb2csXG4gICAgICBlcnIsXG4gICAgICBsb2dfXzogbG9nLFxuICAgICAgZXJyX186IGVyclxuICAgIH07XG4gIH07XG5cbiAgY29uc3QgeyBsb2dfXzogbG9nX18kNSwgZXJyX186IGVycl9fJDUgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiY29tbW9uXCIpO1xuICBjb25zdCBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKHJlc3BvbnNlLnBheW1lbnRfbWV0aG9kcy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSBvbmUgcGF5bWVudCBtZXRob2QsIGdvdCAke3Jlc3BvbnNlLnBheW1lbnRfbWV0aG9kcy5sZW5ndGh9YCk7XG4gICAgfVxuICAgIHJldHVybiB7IHBheW1lbnRfbWV0aG9kX2lkOiByZXNwb25zZS5wYXltZW50X21ldGhvZHNbMF0uaWQgfTtcbiAgfTtcbiAgY29uc3QgZmluZENwbU1hdGNoaW5nVHlwZSA9IChhbGxDUE1zLCB6b2RNb2RlbCkgPT4ge1xuICAgIGNvbnN0IGNwbSA9IGFsbENQTXMuZmluZCgoY3BtMikgPT4gem9kTW9kZWwuc2FmZVBhcnNlKGNwbTIpLnN1Y2Nlc3MpO1xuICAgIGlmICghY3BtKSB7XG4gICAgICBlcnJfXyQ1KGBObyBDUE1zIGZvdW5kIGZvciBtb2RlbC4gQWxsIG1vZGVsczpgLCBhbGxDUE1zKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWxgKTtcbiAgICB9XG4gICAgcmV0dXJuIHpvZE1vZGVsLnBhcnNlKGNwbSk7XG4gIH07XG5cbiAgY29uc3QgeyBsb2dfXzogbG9nX18kNCwgZXJyX186IGVycl9fJDQgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiY29tbW9uLWNjXCIpO1xuICBjb25zdCB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyA9IChub25DZGVGb3JtSW5wdXRzLCBvblZhbGlkYXRpb25FcnJvcikgPT4ge1xuICAgIGNvbnN0IHBheWxvYWQgPSBSZXF1aXJlZEZvcm1GaWVsZHMuc2FmZVBhcnNlKG5vbkNkZUZvcm1JbnB1dHMpO1xuICAgIGlmICghcGF5bG9hZC5zdWNjZXNzKSB7XG4gICAgICBjb25zdCBmb3JtYXR0ZWQgPSBwYXlsb2FkLmVycm9yLmZvcm1hdCgpO1xuICAgICAgY29uc3QgaXNzdWVzID0gZXh0cmFjdElzc3Vlc1BlckZpZWxkKGZvcm1hdHRlZCk7XG4gICAgICBmb3IgKGNvbnN0IFtmaWVsZE5hbWUsIGVycm9yc10gb2YgT2JqZWN0LmVudHJpZXMoaXNzdWVzKSkge1xuICAgICAgICBvblZhbGlkYXRpb25FcnJvcihmaWVsZE5hbWUsIGVycm9ycywgZmllbGROYW1lKTtcbiAgICAgIH1cbiAgICAgIGVycl9fJDQoYEdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzYCwgaXNzdWVzKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcGF5bG9hZC5kYXRhO1xuICB9O1xuICBjb25zdCB2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHMgPSAodG9rZW5pemVSZXN1bHRzLCBvblZhbGlkYXRpb25FcnJvcikgPT4ge1xuICAgIGZvciAoY29uc3QgdG9rZW5pemVSZXN1bHQgb2YgdG9rZW5pemVSZXN1bHRzKSB7XG4gICAgICBpZiAodG9rZW5pemVSZXN1bHQuc3VjY2VzcyA9PT0gZmFsc2UpIHtcbiAgICAgICAgdG9rZW5pemVSZXN1bHQuZXJyb3JzLmZvckVhY2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkID0gQWxsRmllbGROYW1lcy5zYWZlUGFyc2UoZXJyb3IuZWxlbWVudFR5cGUpO1xuICAgICAgICAgIGlmICghcGFyc2VkLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIGVycl9fJDQoYFVua25vd24gZmllbGQgbmFtZSBpbiBvblZhbGlkYXRpb25FcnJvcjogJHtlcnJvci5lbGVtZW50VHlwZX1gKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZmllbGROYW1lID0gcGFyc2VkLmRhdGE7XG4gICAgICAgICAgICBvblZhbGlkYXRpb25FcnJvcihmaWVsZE5hbWUsIGVycm9yLmVycm9ycyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kNChgRXJyb3IgdG9rZW5pemluZyBjYXJkOiBnb3QgdmFsaWRhdGlvbiBlcnJvcnM6ICR7SlNPTi5zdHJpbmdpZnkodG9rZW5pemVSZXN1bHQuZXJyb3JzKX1gKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIHdoaWxlIHRva2VuaXppbmcgY2FyZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgT0pTX1NUUklQRV9MSU5LX0JUTl9JRCA9IFwib2pzLXN0cmlwZS1saW5rLWJ0blwiO1xuICBjb25zdCB7IGxvZ19fOiBsb2dfXyQzLCBlcnJfXzogZXJyX18kMyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJzdHJpcGUtbGlua1wiKTtcbiAgY29uc3QgU3RyaXBlTGlua0NwbSA9IHpvZC56Lm9iamVjdCh7XG4gICAgcHJvdmlkZXI6IHpvZC56LmxpdGVyYWwoXCJzdHJpcGVfbGlua1wiKSxcbiAgICBwcm9jZXNzb3JfbmFtZTogem9kLnoubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgICBtZXRhZGF0YTogem9kLnoub2JqZWN0KHtcbiAgICAgIHN0cmlwZV9wazogem9kLnouc3RyaW5nKClcbiAgICB9KVxuICB9KTtcbiAgY29uc3QgU3RyaXBlTGlua1JlcXVpcmVkVXNlckFjdGlvbnMgPSB6b2Quei5hcnJheShcbiAgICB6b2Quei5vYmplY3Qoe1xuICAgICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6b2Quei5zdHJpbmcoKVxuICAgIH0pXG4gICkubGVuZ3RoKDEpO1xuICBjb25zdCBpbml0U3RyaXBlTGlua0Zsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICAgIGFzeW5jICh7IGNvbnRleHQsIGZsb3dDYWxsYmFja3MgfSkgPT4ge1xuICAgICAgbG9nX18kMyhgQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgUFIuLi5gKTtcbiAgICAgIGNvbnN0IHN0cmlwZUxpbmtDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgU3RyaXBlTGlua0NwbSk7XG4gICAgICBsb2dfXyQzKGBTdGFydGluZyBzdHJpcGUgbGluayBmbG93Li4uYCk7XG4gICAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gQXJyYXkuZnJvbShjb250ZXh0LmNkZUNvbm5lY3Rpb25zLnZhbHVlcygpKVswXTtcbiAgICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICAgIGxvZ19fJDMoYENyZWF0aW5nIHN0cmlwZSBlbGVtZW50cy4uLmApO1xuICAgICAgY29uc3QgaW5pdGlhbFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCk7XG4gICAgICBjb25zdCB7IGVsZW1lbnRzLCBzdHJpcGUgfSA9IGF3YWl0IGNyZWF0ZVN0cmlwZUVsZW1lbnRzKHN0cmlwZUxpbmtDcG0ubWV0YWRhdGEuc3RyaXBlX3BrLCB7XG4gICAgICAgIG1vZGU6IFwic2V0dXBcIixcbiAgICAgICAgY3VycmVuY3k6IGluaXRpYWxQcmV2aWV3LmN1cnJlbmN5LFxuICAgICAgICBzZXR1cF9mdXR1cmVfdXNhZ2U6IFwib2ZmX3Nlc3Npb25cIixcbiAgICAgICAgcGF5bWVudE1ldGhvZENyZWF0aW9uOiBcIm1hbnVhbFwiXG4gICAgICB9KTtcbiAgICAgIGxvZ19fJDMoYE1vdW50aW5nIHBheW1lbnQgZWxlbWVudC4uLmApO1xuICAgICAgY29uc3QgZXhwcmVzc0NoZWNrb3V0RWxlbWVudCA9IGVsZW1lbnRzLmNyZWF0ZShcImV4cHJlc3NDaGVja291dFwiLCB7XG4gICAgICAgIGJ1dHRvbkhlaWdodDogY29udGV4dC5jdXN0b21Jbml0UGFyYW1zLnN0cmlwZUxpbms/LmJ1dHRvbkhlaWdodCxcbiAgICAgICAgcGF5bWVudE1ldGhvZHM6IHtcbiAgICAgICAgICBhbWF6b25QYXk6IFwibmV2ZXJcIixcbiAgICAgICAgICBhcHBsZVBheTogXCJuZXZlclwiLFxuICAgICAgICAgIGdvb2dsZVBheTogXCJuZXZlclwiLFxuICAgICAgICAgIHBheXBhbDogXCJuZXZlclwiXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZXhwcmVzc0NoZWNrb3V0RWxlbWVudC5tb3VudChgIyR7T0pTX1NUUklQRV9MSU5LX0JUTl9JRH1gKTtcbiAgICAgIGV4cHJlc3NDaGVja291dEVsZW1lbnQub24oXCJjbGlja1wiLCBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgbG9nX18kMyhcIlN0cmlwZSBMaW5rIGJ1dHRvbiBjbGlja2VkXCIpO1xuICAgICAgICBpZiAoY29udGV4dC5jdXN0b21Jbml0UGFyYW1zLnN0cmlwZUxpbms/Lm92ZXJyaWRlTGlua1N1Ym1pdCkge1xuICAgICAgICAgIGNvbnN0IHNob3VsZFN1Ym1pdCA9IGF3YWl0IGNvbnRleHQuY3VzdG9tSW5pdFBhcmFtcy5zdHJpcGVMaW5rLm92ZXJyaWRlTGlua1N1Ym1pdCgpO1xuICAgICAgICAgIGlmICghc2hvdWxkU3VibWl0KSB7XG4gICAgICAgICAgICBsb2dfXyQzKFwiU3RyaXBlIExpbmsgc3VibWl0IGFib3J0ZWQgYnkgb3ZlcnJpZGVMaW5rU3VibWl0XCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBldmVudC5yZXNvbHZlKCk7XG4gICAgICB9KTtcbiAgICAgIGV4cHJlc3NDaGVja291dEVsZW1lbnQub24oXCJjb25maXJtXCIsIGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICBsb2dfXyQzKFwiU3RyaXBlIExpbmsgd2luZG93IGNvbmZpcm1lZFwiLCBldmVudCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN0cmlwZS5jcmVhdGVQYXltZW50TWV0aG9kKHtcbiAgICAgICAgICBlbGVtZW50cyxcbiAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgIGJpbGxpbmdfZGV0YWlsczogZXZlbnQuYmlsbGluZ0RldGFpbHNcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAocmVzdWx0LmVycm9yKSB7XG4gICAgICAgICAgZXJyX18kMyhcImVycm9yXCIsIHJlc3VsdC5lcnJvcik7XG4gICAgICAgICAgZmxvd0NhbGxiYWNrcy5vbkNoZWNrb3V0RXJyb3IocmVzdWx0LmVycm9yLm1lc3NhZ2UgPz8gXCJTdHJpcGUgTGluayB1bmtub3duIGVycm9yXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZ19fJDMoXCJwYXltZW50TWV0aG9kXCIsIHJlc3VsdC5wYXltZW50TWV0aG9kKTtcbiAgICAgICAgICBPanNGbG93cy5zdHJpcGVMaW5rLnJ1bih7XG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBzdHJpcGVMaW5rQ3BtLFxuICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgICBmbG93Q2FsbGJhY2tzLFxuICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHN0cmlwZVBNOiByZXN1bHQucGF5bWVudE1ldGhvZCB9LFxuICAgICAgICAgICAgaW5pdFJlc3VsdDogeyBpc0F2YWlsYWJsZTogdHJ1ZSB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgaXNBdmFpbGFibGU6IHRydWUgfTtcbiAgICB9XG4gICk7XG4gIGNvbnN0IHJ1blN0cmlwZUxpbmtGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gICAgYXN5bmMgKHtcbiAgICAgIGNvbnRleHQsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgICAgZmxvd0NhbGxiYWNrcyxcbiAgICAgIGN1c3RvbVBhcmFtc1xuICAgIH0pID0+IHtcbiAgICAgIGxvZ19fJDMoYFJ1bm5pbmcgU3RyaXBlIFBSIGZsb3cuLi5gKTtcbiAgICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBBcnJheS5mcm9tKGNvbnRleHQuY2RlQ29ubmVjdGlvbnMudmFsdWVzKCkpWzBdO1xuICAgICAgbG9nX18kMyhgTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLmApO1xuICAgICAgY29uc3QgbWVyZ2VkSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQTShub25DZGVGb3JtSW5wdXRzLCBjdXN0b21QYXJhbXMuc3RyaXBlUE0pO1xuICAgICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG1lcmdlZElucHV0cywgZmxvd0NhbGxiYWNrcy5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgICBsb2dfXyQzKGBTdGFydGluZyBwYXltZW50IGZsb3cuLi5gKTtcbiAgICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIHRoZWlyX2V4aXN0aW5nX3BtX2lkOiBjdXN0b21QYXJhbXMuc3RyaXBlUE0uaWRcbiAgICAgIH0pO1xuICAgICAgbG9nX18kMyhcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gU3RyaXBlTGlua1JlcXVpcmVkVXNlckFjdGlvbnMucGFyc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucyk7XG4gICAgICBjb25zdCBvdXJFeGlzdGluZ1BtSWQgPSBuZXh0QWN0aW9uTWV0YWRhdGFbMF0ub3VyX2V4aXN0aW5nX3BtX2lkO1xuICAgICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgbG9nX18kMyhgRG9pbmcgcGF5bWVudCBzZXR1cC4uLmApO1xuICAgICAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IG91ckV4aXN0aW5nUG1JZFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY3JlYXRlZFBheW1lbnRNZXRob2QgPSBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKGNvbmZpcm1SZXN1bHQpO1xuICAgICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogY3JlYXRlZFBheW1lbnRNZXRob2QgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ19fJDMoYERvaW5nIGNoZWNrb3V0Li4uYCk7XG4gICAgICAgIGNvbnN0IGNoZWNrb3V0UmVxdWVzdCA9IHtcbiAgICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgICAgcHJvdmlkZXJfdHlwZTogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0sXG4gICAgICAgICAgY3VzdG9tZXJfY291bnRyeTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgICAgICAgcHJvbW90aW9uX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICAgICAgdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgICAgY2FuY2VsX2F0X2VuZDogZmFsc2UsXG4gICAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwZXJmb3JtQ2hlY2tvdXQoYW55Q2RlQ29ubmVjdGlvbiwgY2hlY2tvdXRSZXF1ZXN0KTtcbiAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQgfTtcbiAgICAgIH1cbiAgICB9XG4gICk7XG4gIGNvbnN0IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUE0gPSAoZm9ybUlucHV0cywgc3RyaXBlUG0pID0+IHtcbiAgICBjb25zdCBpbnB1dHMgPSB7IC4uLmZvcm1JbnB1dHMgfTtcbiAgICBjb25zdCBbcGF5ZXJGaXJzdE5hbWUsIC4uLnBheWVyTGFzdE5hbWVQYXJ0c10gPSBzdHJpcGVQbS5iaWxsaW5nX2RldGFpbHMubmFtZT8udHJpbSgpPy5zcGxpdCgvXFxzKy8pID8/IFtdO1xuICAgIGNvbnN0IHBheWVyTGFzdE5hbWUgPSBwYXllckxhc3ROYW1lUGFydHMuam9pbihcIiBcIikgfHwgdm9pZCAwO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdIHx8IHBheWVyRmlyc3ROYW1lIHx8IFwiX09QX1VOS05PV05cIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gfHwgcGF5ZXJMYXN0TmFtZSB8fCBcIl9PUF9VTktOT1dOXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gPSBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSB8fCAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHN0cmlwZVBtW1wibGlua1wiXT8uZW1haWwgfHwgc3RyaXBlUG0uYmlsbGluZ19kZXRhaWxzLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdIHx8IHN0cmlwZVBtLmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzPy5wb3N0YWxfY29kZSB8fCBcIjAwMDAwXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSA9IGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gfHwgc3RyaXBlUG0uYmlsbGluZ19kZXRhaWxzLmFkZHJlc3M/LmNvdW50cnkgfHwgXCJVU1wiO1xuICAgIGxvZ19fJDMoYEZpbmFsIGZvcm0gaW5wdXRzOmAsIGlucHV0cyk7XG4gICAgcmV0dXJuIGlucHV0cztcbiAgfTtcblxuICBjb25zdCBzdHlsZXMgPSBcIkBrZXlmcmFtZXMgZmFkZUluezAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjkpfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGUoMSl9fS5vdmVybGF5e3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3otaW5kZXg6MjE0NzQ4MzY0OCFpbXBvcnRhbnQ7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6IzAwMDAwMDgwfS5jb250YWluZXJ7bWF4LXdpZHRoOjUwMHB4O21heC1oZWlnaHQ6NjAwcHg7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7cG9zaXRpb246cmVsYXRpdmU7YW5pbWF0aW9uOmZhZGVJbiAuM3MgZWFzZS1vdXR9LmZyYW1le21heC13aWR0aDo1MDBweDttYXgtaGVpZ2h0OjYwMHB4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7Ym9yZGVyOm5vbmV9LmNhbmNlbC1idXR0b257cG9zaXRpb246YWJzb2x1dGU7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXI6bm9uZTtmb250LXNpemU6MXJlbTtjb2xvcjojZmZmO2N1cnNvcjpwb2ludGVyO3RvcDotMS41cmVtO3BhZGRpbmc6MDtyaWdodDowfVwiO1xuXG4gIGNvbnN0IGNyZWF0ZUFuZE9wZW5GcmFtZSA9ICh1cmwpID0+IHtcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBgXG4gICAgPHN0eWxlPlxuICAgICAgJHtzdHlsZXN9XG4gICAgPC9zdHlsZT5cbiAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FuY2VsLWJ1dHRvblwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICA8aWZyYW1lIHNyYz1cIiR7dXJsfVwiIGNsYXNzPVwiZnJhbWVcIiBpZD1cInRocmVlLWRzLWlmcmFtZVwiIHRpdGxlPVwiM0QgU2VjdXJlIHZlcmlmaWNhdGlvblwiIGFsbG93PVwicGF5bWVudFwiPjwvaWZyYW1lPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGA7XG4gICAgY29uc3QgaG9zdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgY29uc3Qgc2hhZG93Um9vdCA9IGhvc3QuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSk7XG4gICAgc2hhZG93Um9vdC5hcHBlbmRDaGlsZCh0ZW1wbGF0ZS5jb250ZW50LmNsb25lTm9kZSh0cnVlKSk7XG4gICAgY29uc3QgaWZyYW1lID0gc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFwiI3RocmVlLWRzLWlmcmFtZVwiKTtcbiAgICBjb25zdCBjYW5jZWxCdXR0b24gPSBzaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGhvc3QpO1xuICAgIHJldHVybiB7IGhvc3QsIGlmcmFtZSwgY2FuY2VsQnV0dG9uIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gc3RhcnRQb2xsaW5nKGlmcmFtZSwgb25TdWNjZXNzLCBjaGlsZE9yaWdpbikge1xuICAgIGNvbnN0IGhhbmRsZVBvbGxpbmcgPSBhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIvCflIQgUG9sbGluZyBDREUgY29ubmVjdGlvbi4uLlwiKTtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgcGluZ0NkZUZvcjNkc1N0YXR1cyhpZnJhbWUsIGNoaWxkT3JpZ2luKTtcbiAgICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwi8J+foiBDREUgY29ubmVjdGlvbiBzdWNjZXNzZnVsISBTdG9wcGluZyBwb2xsaW5nLi4uXCIpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwi4p6h77iPIEdvdCBzdGF0dXM6XCIsIHN0YXR1cyk7XG4gICAgICAgICAgY2xlYXJJbnRlcnZhbChwb2xsaW5nSW50ZXJ2YWwpO1xuICAgICAgICAgIG9uU3VjY2VzcyhzdGF0dXMpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgfVxuICAgIH07XG4gICAgaGFuZGxlUG9sbGluZygpO1xuICAgIGNvbnN0IHBvbGxpbmdJbnRlcnZhbCA9IHNldEludGVydmFsKGhhbmRsZVBvbGxpbmcsIENERV9QT0xMSU5HX0lOVEVSVkFMKTtcbiAgICByZXR1cm4gcG9sbGluZ0ludGVydmFsO1xuICB9XG4gIGZ1bmN0aW9uIGhhbmRsZUV2ZW50cyh7XG4gICAgZWxlbWVudHMsXG4gICAgcG9sbGluZ0ludGVydmFsLFxuICAgIHJlc29sdmVcbiAgfSkge1xuICAgIGNvbnN0IGhhbmRsZUNhbmNlbCA9ICgpID0+IHtcbiAgICAgIGNsZWFySW50ZXJ2YWwocG9sbGluZ0ludGVydmFsKTtcbiAgICAgIGVsZW1lbnRzLmhvc3QucmVtb3ZlKCk7XG4gICAgICByZXNvbHZlKFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKTtcbiAgICB9O1xuICAgIGVsZW1lbnRzLmNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaGFuZGxlQ2FuY2VsKTtcbiAgICBjb25zdCBjbGVhbnVwRXZlbnRMaXN0ZW5lcnMgPSAoKSA9PiB7XG4gICAgICBlbGVtZW50cy5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNhbmNlbCk7XG4gICAgfTtcbiAgICByZXR1cm4gY2xlYW51cEV2ZW50TGlzdGVuZXJzO1xuICB9XG4gIGFzeW5jIGZ1bmN0aW9uIHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICB1cmwsXG4gICAgYmFzZVVybFxuICB9KSB7XG4gICAgY29uc3QgZWxlbWVudHMgPSBjcmVhdGVBbmRPcGVuRnJhbWUodXJsKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IG9uU3VjY2VzcyA9IChzdGF0dXMpID0+IHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgZWxlbWVudHMuaG9zdC5yZW1vdmUoKTtcbiAgICAgICAgfSwgMWUzKTtcbiAgICAgICAgcmVzb2x2ZShzdGF0dXMpO1xuICAgICAgICBjbGVhbnVwRXZlbnRMaXN0ZW5lcnM/LigpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHBvbGxpbmdJbnRlcnZhbCA9IHN0YXJ0UG9sbGluZyhlbGVtZW50cy5pZnJhbWUsIG9uU3VjY2VzcywgbmV3IFVSTChiYXNlVXJsKS5vcmlnaW4pO1xuICAgICAgY29uc3QgY2xlYW51cEV2ZW50TGlzdGVuZXJzID0gaGFuZGxlRXZlbnRzKHtcbiAgICAgICAgZWxlbWVudHMsXG4gICAgICAgIHBvbGxpbmdJbnRlcnZhbCxcbiAgICAgICAgcmVzb2x2ZVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCB7IGxvZ19fOiBsb2dfXyQyLCBlcnJfXzogZXJyX18kMiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjb21tb24tY2NcIik7XG4gIGNvbnN0IHsgbG9nX186IHN0cmlwZUxvZ19fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInN0cmlwZS1jY1wiKTtcbiAgY29uc3QgcnVuQ29tbW9uQ2NGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gICAgYXN5bmMgKHsgY29udGV4dCwgY2hlY2tvdXRQYXltZW50TWV0aG9kLCBub25DZGVGb3JtSW5wdXRzLCBmbG93Q2FsbGJhY2tzIH0pID0+IHtcbiAgICAgIGxvZ19fJDIoYOKUnCBSdW5uaW5nIGNvbW1vbiBDQyBmbG93Li4uYCwgeyBjaGVja291dFBheW1lbnRNZXRob2QgfSk7XG4gICAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gQXJyYXkuZnJvbShjb250ZXh0LmNkZUNvbm5lY3Rpb25zLnZhbHVlcygpKVswXTtcbiAgICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgICAgbG9nX18kMihg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkcyBbTW9kZTogJHtwcmVmaWxsLm1vZGV9XWApO1xuICAgICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG5vbkNkZUZvcm1JbnB1dHMsIGZsb3dDYWxsYmFja3Mub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgICAgbG9nX18kMihg4pScIFRva2VuaXppbmcgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHtjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgIGNvbnN0IHRva2VuaXplQ2FyZFJlc3VsdHMgPSBhd2FpdCB0b2tlbml6ZUNhcmRPbkFsbENvbm5lY3Rpb25zKGNvbnRleHQuY2RlQ29ubmVjdGlvbnMsIHtcbiAgICAgICAgc2Vzc2lvbl9pZDogY29udGV4dC5lbGVtZW50c1Nlc3Npb25JZFxuICAgICAgfSk7XG4gICAgICB2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHModG9rZW5pemVDYXJkUmVzdWx0cywgZmxvd0NhbGxiYWNrcy5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgICBjb25zdCBjb21tb25DaGVja291dFBhcmFtcyA9IHtcbiAgICAgICAgc2Vzc2lvbl9pZDogY29udGV4dC5lbGVtZW50c1Nlc3Npb25JZCxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgbm9uX2NkZV9mb3JtX2ZpZWxkczogbm9uQ2RlRm9ybUZpZWxkc1xuICAgICAgfTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICAgIGxvZ19fJDIoYOKUnCBTZXR0aW5nIHVwIHBheW1lbnQgbWV0aG9kIGluIENERSBbVG9rZW46ICR7cHJlZmlsbC50b2tlbn1dYCk7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2V0dXBDaGVja291dChhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgICAgbG9nX18kMihg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke3Jlc3VsdC5wYXltZW50X21ldGhvZF9pZH1dYCk7XG4gICAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2dfXyQyKGDilJwgSW5pdGlhbCBjaGVja291dCBmbG93LiBDaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHtjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja291dENhcmRFbGVtZW50cyhhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgICAgbG9nX18kMihg4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuYCk7XG4gICAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQgfTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQ2RlRXJyb3IpIHtcbiAgICAgICAgICBpZiAoZXJyb3Iub3JpZ2luYWxFcnJvck1lc3NhZ2UgPT09IFwiM0RTX1JFUVVJUkVEXCIpIHtcbiAgICAgICAgICAgIGxvZ19fJDIoYOKUnCBDYXJkIHJlcXVpcmVzIDNEUywgc3RhcnRpbmcgbm9uLWxlZ2FjeSBwYXltZW50IGZsb3dgKTtcbiAgICAgICAgICAgIGxvZ19fJDIoXCJlcnJvci5yZXNwb25zZS5oZWFkZXJzXCIsIGVycm9yLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgICAgY29uc3Qgc2hvdWxkVXNlTmV3RmxvdyA9IGVycm9yLnJlc3BvbnNlLmhlYWRlcnM/LltcIm9wLXNob3VsZC11c2UtbmV3LWZsb3dcIl0gPT09IFwidHJ1ZVwiO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRQZlJlc3VsdCA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3dGb3JDQyhhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgICAgICBsb2dfXyQyKGDilJwgb3Atc2hvdWxkLXVzZS1uZXctZmxvdzogJHtzaG91bGRVc2VOZXdGbG93fWApO1xuICAgICAgICAgICAgbG9nX18kMihg4pScIFBheW1lbnQgZmxvdyByZXN1bHQ6YCwgc3RhcnRQZlJlc3VsdCk7XG4gICAgICAgICAgICBpZiAoc2hvdWxkVXNlTmV3Rmxvdykge1xuICAgICAgICAgICAgICBhd2FpdCBjb21tb25DQzNEU0Zsb3coc3RhcnRQZlJlc3VsdCwgY29udGV4dC5iYXNlVXJsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGF3YWl0IHN0cmlwZUNDM0RTRmxvdyhzdGFydFBmUmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICAgICAgICBsb2dfXyQyKGDilJwgQ29uZmlybWluZyBwYXltZW50IGZsb3cgW2NjX3BtX2lkOiAke3N0YXJ0UGZSZXN1bHQuY2NfcG1faWR9XWApO1xuICAgICAgICAgICAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IHN0YXJ0UGZSZXN1bHQuY2NfcG1faWRcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGxvZ19fJDIoYOKUnCBDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHQgcmVjZWl2ZWQgUmVzdWx0OmAsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgICAgICAgICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoY29uZmlybVJlc3VsdCk7XG4gICAgICAgICAgICAgIGxvZ19fJDIoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtjcmVhdGVkUGF5bWVudE1ldGhvZC5wYXltZW50X21ldGhvZF9pZH1dYCk7XG4gICAgICAgICAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBjcmVhdGVkUGF5bWVudE1ldGhvZCB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbG9nX18kMihg4pScIENoZWNraW5nIG91dCBhZnRlciAzRFMgZmxvdyBbRmxvdzogJHtzaG91bGRVc2VOZXdGbG93ID8gXCJuZXdcIiA6IFwibGVnYWN5XCJ9XWApO1xuICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja291dENhcmRFbGVtZW50cyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgICAgICAgICAgLi4uY29tbW9uQ2hlY2tvdXRQYXJhbXMsXG4gICAgICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IHN0YXJ0UGZSZXN1bHQuY2NfcG1faWQsXG4gICAgICAgICAgICAgICAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogIXNob3VsZFVzZU5ld0Zsb3dcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGxvZ19fJDIoYOKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LmApO1xuICAgICAgICAgICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlcnJfXyQyKGDilbAgRXJyb3IgY2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREVgKTtcbiAgICAgICAgZXJyX18kMihlcnJvcik7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgKTtcbiAgY29uc3QgcGFyc2VTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEgPSAocmVzcG9uc2UpID0+IHtcbiAgICBjb25zdCBzdHJpcGVBY3Rpb24gPSByZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJzdHJpcGVfM2RzXCIpO1xuICAgIGlmICghc3RyaXBlQWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzdHJpcGUgM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIFN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YS5wYXJzZShzdHJpcGVBY3Rpb24pO1xuICB9O1xuICBjb25zdCBwYXJzZUNvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YSA9IChyZXNwb25zZSkgPT4ge1xuICAgIGNvbnN0IGNvbW1vbkFjdGlvbiA9IHJlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIik7XG4gICAgaWYgKCFjb21tb25BY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbW1vbiAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICAgIH1cbiAgICByZXR1cm4gQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhLnBhcnNlKGNvbW1vbkFjdGlvbik7XG4gIH07XG4gIGNvbnN0IGNvbW1vbkNDM0RTRmxvdyA9IGFzeW5jIChzdGFydFBmUmVzdWx0LCBiYXNlVXJsKSA9PiB7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEoc3RhcnRQZlJlc3VsdCk7XG4gICAgbG9nX18kMihg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvdyBbVVJMOiAke25leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmx9XWApO1xuICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHsgdXJsOiBuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsLCBiYXNlVXJsIH0pO1xuICAgIGxvZ19fJDIoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgIH1cbiAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgIH1cbiAgfTtcbiAgY29uc3Qgc3RyaXBlQ0MzRFNGbG93ID0gYXN5bmMgKHN0YXJ0UGZSZXN1bHQpID0+IHtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBwYXJzZVN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YShzdGFydFBmUmVzdWx0KTtcbiAgICBzdHJpcGVMb2dfXyhg4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvdyBbQ2xpZW50IFNlY3JldDogJHtuZXh0QWN0aW9uTWV0YWRhdGEuY2xpZW50X3NlY3JldC5zdWJzdHJpbmcoMCwgOCl9Li4uXWApO1xuICAgIGF3YWl0IGxhdW5jaFN0cmlwZTNEU0RpYWxvZ0Zsb3cobmV4dEFjdGlvbk1ldGFkYXRhKTtcbiAgICBzdHJpcGVMb2dfXyhcIuKVsCBTdHJpcGUgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKTtcbiAgfTtcblxuICBjb25zdCB7IGxvZ19fOiBsb2dfXyQxLCBlcnJfXzogZXJyX18kMSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJzdHJpcGUtcHJcIik7XG4gIGNvbnN0IFN0cmlwZVByQ3BtID0gem9kLnoub2JqZWN0KHtcbiAgICBwcm92aWRlcjogem9kLnoudW5pb24oW3pvZC56LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksIHpvZC56LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpXSksXG4gICAgcHJvY2Vzc29yX25hbWU6IHpvZC56LmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gICAgbWV0YWRhdGE6IHpvZC56Lm9iamVjdCh7XG4gICAgICBzdHJpcGVfcGs6IHpvZC56LnN0cmluZygpXG4gICAgfSlcbiAgfSk7XG4gIGNvbnN0IGluaXRTdHJpcGVQckZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICAgIGFzeW5jICh7IGNvbnRleHQgfSkgPT4ge1xuICAgICAgbG9nX18kMShgQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgUFIuLi5gKTtcbiAgICAgIGNvbnN0IGNoZWNrb3V0UGF5bWVudE1ldGhvZCA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBTdHJpcGVQckNwbSk7XG4gICAgICBsb2dfXyQxKGBJbml0aWFsaXppbmcgU3RyaXBlIFBSIGZsb3cuLi5gKTtcbiAgICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBBcnJheS5mcm9tKGNvbnRleHQuY2RlQ29ubmVjdGlvbnMudmFsdWVzKCkpWzBdO1xuICAgICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgICAgbG9nX18kMShgR2V0dGluZyBpbml0aWFsIHByZXZpZXcgYW1vdW50YCk7XG4gICAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICAgIGNvbnN0IHByID0gYXdhaXQgY3JlYXRlU3RyaXBlUGF5bWVudFJlcXVlc3QoXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YS5zdHJpcGVfcGssXG4gICAgICAgIGluaXRpYWxQcmV2aWV3LmFtb3VudEF0b20sXG4gICAgICAgIGluaXRpYWxQcmV2aWV3LmN1cnJlbmN5LFxuICAgICAgICBpc1NldHVwTW9kZVxuICAgICAgKTtcbiAgICAgIGxvZ19fJDEoYENoZWNraW5nIGlmIGNhbiBtYWtlIHBheW1lbnRgKTtcbiAgICAgIGNvbnN0IGNhbk1ha2VQYXltZW50ID0gYXdhaXQgcHIuY2FuTWFrZVBheW1lbnQoKTtcbiAgICAgIGlmIChjYW5NYWtlUGF5bWVudCA9PT0gbnVsbCkge1xuICAgICAgICBlcnJfXyQxKGBjYW5NYWtlUGF5bWVudCByZXR1cm5lZCBudWxsYCk7XG4gICAgICAgIHJldHVybiB7IGlzQXZhaWxhYmxlOiBmYWxzZSwgcmVhc29uOiBcImNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxcIiB9O1xuICAgICAgfVxuICAgICAgbG9nX18kMShgU3RyaXBlIFBSIGZsb3cgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBDYW4gbWFrZSBwYXltZW50YCwgY2FuTWFrZVBheW1lbnQpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICAgIHByLFxuICAgICAgICBhdmFpbGFibGVQcm92aWRlcnM6IHtcbiAgICAgICAgICBhcHBsZVBheTogY2FuTWFrZVBheW1lbnQuYXBwbGVQYXksXG4gICAgICAgICAgZ29vZ2xlUGF5OiBjYW5NYWtlUGF5bWVudC5nb29nbGVQYXlcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICk7XG4gIGNvbnN0IHJ1blN0cmlwZVByRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICAgIGFzeW5jICh7XG4gICAgICBjb250ZXh0LFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICAgIGZsb3dDYWxsYmFja3MsXG4gICAgICBjdXN0b21QYXJhbXMsXG4gICAgICBpbml0UmVzdWx0XG4gICAgfSkgPT4ge1xuICAgICAgbG9nX18kMShgUnVubmluZyBTdHJpcGUgUFIgZmxvdy4uLmApO1xuICAgICAgaWYgKGN1c3RvbVBhcmFtcy5wcm92aWRlciAhPT0gY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvdmlkZXIgbWlzbWF0Y2guIEV4cGVjdGVkICR7Y3VzdG9tUGFyYW1zLnByb3ZpZGVyfSwgZ290ICR7Y2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyfWApO1xuICAgICAgfVxuICAgICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IEFycmF5LmZyb20oY29udGV4dC5jZGVDb25uZWN0aW9ucy52YWx1ZXMoKSlbMF07XG4gICAgICBjb25zdCBwciA9IGluaXRSZXN1bHQucHI7XG4gICAgICBpZiAoY3VzdG9tUGFyYW1zPy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0KSB7XG4gICAgICAgIGNvbnN0IG92ZXJyaWRlID0gY3VzdG9tUGFyYW1zLm92ZXJyaWRlUGF5bWVudFJlcXVlc3Q7XG4gICAgICAgIGxvZ19fJDEoYE92ZXJyaWRpbmcgUFIgYW1vdW50IHdpdGhgLCBvdmVycmlkZSk7XG4gICAgICAgIHVwZGF0ZVByV2l0aEFtb3VudChwciwgb3ZlcnJpZGUuYW1vdW50LCBvdmVycmlkZS5wZW5kaW5nKTtcbiAgICAgIH1cbiAgICAgIGxvZ19fJDEoYFNob3dpbmcgUFIgZGlhbG9nLi4uYCk7XG4gICAgICBwci5zaG93KCk7XG4gICAgICBjb25zdCBzdHJpcGVQbUFkZGVkRXZlbnQgPSBhd2FpdCB3YWl0Rm9yVXNlclRvQWRkUGF5bWVudE1ldGhvZChwcik7XG4gICAgICBsb2dfXyQxKGBTdHJpcGUgUE0gYWRkZWQgZXZlbnQ6YCwgc3RyaXBlUG1BZGRlZEV2ZW50KTtcbiAgICAgIGxvZ19fJDEoYE1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5gKTtcbiAgICAgIGNvbnN0IG1lcmdlZElucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUG0obm9uQ2RlRm9ybUlucHV0cywgc3RyaXBlUG1BZGRlZEV2ZW50KTtcbiAgICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhtZXJnZWRJbnB1dHMsIGZsb3dDYWxsYmFja3Mub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgICAgbG9nX18kMShgUFIgZGlhbG9nIGZpbmlzaGVkLiBTdGFydGluZyBwYXltZW50IGZsb3cuLi5gKTtcbiAgICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3dGb3JQUihhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIGZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IHBhcnNlUFJOZXh0QWN0aW9uTWV0YWRhdGEoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICAgIGxvZ19fJDEoYENvbmZpcm1pbmcgUFIgd2l0aCBTdHJpcGUuLi5gKTtcbiAgICAgIGF3YWl0IGNvbmZpcm1TdHJpcGVQclBNKG5leHRBY3Rpb25NZXRhZGF0YSwgc3RyaXBlUG1BZGRlZEV2ZW50KTtcbiAgICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgIGxvZ19fJDEoYENvbmZpcm1pbmcgcGF5bWVudCBmbG93IGZvciBzZXR1cC4uLmApO1xuICAgICAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW5cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGNyZWF0ZWRQYXltZW50TWV0aG9kID0gcGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZShjb25maXJtUmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dfXyQxKGBQZXJmb3JtaW5nIGNoZWNrb3V0Li4uYCk7XG4gICAgICAgIGNvbnN0IGNoZWNrb3V0UmVxdWVzdCA9IHtcbiAgICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgICAgcHJvdmlkZXJfdHlwZTogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0sXG4gICAgICAgICAgY3VzdG9tZXJfY291bnRyeTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgICAgICAgcHJvbW90aW9uX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICAgICAgdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgICAgY2FuY2VsX2F0X2VuZDogZmFsc2UsXG4gICAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwZXJmb3JtQ2hlY2tvdXQoYW55Q2RlQ29ubmVjdGlvbiwgY2hlY2tvdXRSZXF1ZXN0KTtcbiAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQgfTtcbiAgICAgIH1cbiAgICB9XG4gICk7XG4gIGNvbnN0IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUG0gPSAoZm9ybUlucHV0cywgc3RyaXBlUG1FdnQpID0+IHtcbiAgICBjb25zdCBpbnB1dHMgPSB7IC4uLmZvcm1JbnB1dHMgfTtcbiAgICBjb25zdCBbcGF5ZXJGaXJzdE5hbWUsIC4uLnBheWVyTGFzdE5hbWVQYXJ0c10gPSBzdHJpcGVQbUV2dC5wYXllck5hbWU/LnRyaW0oKT8uc3BsaXQoL1xccysvKSA/PyBbXTtcbiAgICBjb25zdCBwYXllckxhc3ROYW1lID0gcGF5ZXJMYXN0TmFtZVBhcnRzLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSB8fCBwYXllckZpcnN0TmFtZSB8fCBcIl9PUF9VTktOT1dOXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdIHx8IHBheWVyTGFzdE5hbWUgfHwgXCJfT1BfVU5LTk9XTlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdID0gaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gfHwgc3RyaXBlUG1FdnQucGF5ZXJFbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSB8fCBzdHJpcGVQbUV2dC5zaGlwcGluZ0FkZHJlc3M/LnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gPSBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldIHx8IHN0cmlwZVBtRXZ0LnNoaXBwaW5nQWRkcmVzcz8uY291bnRyeSB8fCBcIlVTXCI7XG4gICAgbG9nX18kMShgRmluYWwgZm9ybSBpbnB1dHM6YCwgaW5wdXRzKTtcbiAgICByZXR1cm4gaW5wdXRzO1xuICB9O1xuICBjb25zdCB1cGRhdGVQcldpdGhBbW91bnQgPSAocHIsIGFtb3VudCwgaXNQZW5kaW5nKSA9PiB7XG4gICAgcHIudXBkYXRlKHtcbiAgICAgIHRvdGFsOiB7XG4gICAgICAgIGFtb3VudDogYW1vdW50LmFtb3VudEF0b20sXG4gICAgICAgIGxhYmVsOiBcIlRvdGFsXCIsXG4gICAgICAgIHBlbmRpbmc6IGlzUGVuZGluZ1xuICAgICAgfSxcbiAgICAgIGN1cnJlbmN5OiBhbW91bnQuY3VycmVuY3lcbiAgICB9KTtcbiAgfTtcbiAgY29uc3QgcGFyc2VQUk5leHRBY3Rpb25NZXRhZGF0YSA9IChyZXNwb25zZSkgPT4ge1xuICAgIGlmIChyZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIG9jY3VycmVkLlxuRGV0YWlsczogZ290ICR7cmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aH0gcmVxdWlyZWQgdXNlciBhY3Rpb25zYCk7XG4gICAgfVxuICAgIHJldHVybiBQYXltZW50UmVxdWVzdE5leHRBY3Rpb25NZXRhZGF0YS5wYXJzZShyZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xuICB9O1xuXG4gIGNvbnN0IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QgPSAoY3Btcywgd2l0aFByb3ZpZGVyLCB3aXRoUHJvY2Vzc29yKSA9PiB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IGNwbXMuZmlsdGVyKChjcG0pID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoZXNQcm9jZXNzb3IgPSB0cnVlIDtcbiAgICAgIGNvbnN0IG1hdGNoZXNQcm92aWRlciA9IGNwbS5wcm92aWRlciA9PT0gd2l0aFByb3ZpZGVyO1xuICAgICAgcmV0dXJuIG1hdGNoZXNQcm9jZXNzb3IgJiYgbWF0Y2hlc1Byb3ZpZGVyO1xuICAgIH0pO1xuICAgIGlmIChtYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc29sZS5lcnJvcihcIkNQTXMgbGlzdFwiLCBjcG1zKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQ1BNcyBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3dpdGhQcm92aWRlcn0nIGFuZCBwcm9jZXNzb3IgJyR7d2l0aFByb2Nlc3Nvcn0nYCk7XG4gICAgfVxuICAgIGlmIChtYXRjaGVzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgY29uc29sZS5lcnJvcihcIkNQTXMgbGlzdFwiLCBjcG1zKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTW9yZSB0aGFuIG9uZSBDUE0gZm91bmQgd2l0aCBwcm92aWRlciAnJHt3aXRoUHJvdmlkZXJ9JyBhbmQgcHJvY2Vzc29yICcke3dpdGhQcm9jZXNzb3J9J2ApO1xuICAgIH1cbiAgICByZXR1cm4gbWF0Y2hlc1swXTtcbiAgfTtcbiAgY29uc3QgT2pzRmxvd3MgPSB7XG4gICAgLy8g4pyLIE5vdGU6IEZvciBmbG93cyB0aGF0IHJlcXVpcmUgaW5pdGlhbGl6YXRpb24sIHBsZWFzZSBhZGQgdGhlbSB0byBgaW5pdC1mbG93cy50c2BcbiAgICAvLyBDb21tb25cbiAgICBjb21tb25DQzoge1xuICAgICAgcnVuOiBydW5Db21tb25DY0Zsb3dcbiAgICB9LFxuICAgIC8vIFN0cmlwZVxuICAgIHN0cmlwZVBSOiB7XG4gICAgICBpbml0OiBpbml0U3RyaXBlUHJGbG93LFxuICAgICAgcnVuOiBydW5TdHJpcGVQckZsb3dcbiAgICB9LFxuICAgIHN0cmlwZUxpbms6IHtcbiAgICAgIGluaXQ6IGluaXRTdHJpcGVMaW5rRmxvdyxcbiAgICAgIHJ1bjogcnVuU3RyaXBlTGlua0Zsb3dcbiAgICB9XG4gICAgLy8g8J+RiSBBZGQgbW9yZSBmbG93cyBoZXJlXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgfTtcblxuICBmdW5jdGlvbiBnZXREZWZhdWx0RXhwb3J0RnJvbUNqcyAoeCkge1xuICBcdHJldHVybiB4ICYmIHguX19lc01vZHVsZSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeCwgJ2RlZmF1bHQnKSA/IHhbJ2RlZmF1bHQnXSA6IHg7XG4gIH1cblxuICB2YXIgT2JzZXJ2YWJsZSQyID0ge307XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE9ic2VydmFibGUkMiwgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxuICB9KTtcbiAgT2JzZXJ2YWJsZSQyLk9ic2VydmFibGUgPSB2b2lkIDA7XG5cbiAgLy8gPT09IFN5bWJvbCBTdXBwb3J0ID09PVxuICBjb25zdCBoYXNTeW1ib2wgPSBuYW1lID0+IEJvb2xlYW4oU3ltYm9sW25hbWVdKTtcblxuICBjb25zdCBnZXRTeW1ib2wgPSBuYW1lID0+IGhhc1N5bWJvbChuYW1lKSA/IFN5bWJvbFtuYW1lXSA6ICdAQCcgKyBuYW1lO1xuXG4gIGNvbnN0IFN5bWJvbEl0ZXJhdG9yID0gZ2V0U3ltYm9sKCdpdGVyYXRvcicpO1xuICBjb25zdCBTeW1ib2xPYnNlcnZhYmxlID0gZ2V0U3ltYm9sKCdvYnNlcnZhYmxlJyk7XG4gIGNvbnN0IFN5bWJvbFNwZWNpZXMgPSBnZXRTeW1ib2woJ3NwZWNpZXMnKTsgLy8gPT09IEFic3RyYWN0IE9wZXJhdGlvbnMgPT09XG5cbiAgZnVuY3Rpb24gZ2V0TWV0aG9kKG9iaiwga2V5KSB7XG4gICAgbGV0IHZhbHVlID0gb2JqW2tleV07XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IFR5cGVFcnJvcih2YWx1ZSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRTcGVjaWVzKG9iaikge1xuICAgIGxldCBjdG9yID0gb2JqLmNvbnN0cnVjdG9yO1xuXG4gICAgaWYgKGN0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY3RvciA9IGN0b3JbU3ltYm9sU3BlY2llc107XG5cbiAgICAgIGlmIChjdG9yID09PSBudWxsKSB7XG4gICAgICAgIGN0b3IgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGN0b3IgIT09IHVuZGVmaW5lZCA/IGN0b3IgOiBPYnNlcnZhYmxlJDE7XG4gIH1cblxuICBmdW5jdGlvbiBpc09ic2VydmFibGUoeCkge1xuICAgIHJldHVybiB4IGluc3RhbmNlb2YgT2JzZXJ2YWJsZSQxOyAvLyBTUEVDOiBCcmFuZCBjaGVja1xuICB9XG5cbiAgZnVuY3Rpb24gaG9zdFJlcG9ydEVycm9yKGUpIHtcbiAgICBpZiAoaG9zdFJlcG9ydEVycm9yLmxvZykge1xuICAgICAgaG9zdFJlcG9ydEVycm9yLmxvZyhlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBlbnF1ZXVlKGZuKSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBmbigpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBob3N0UmVwb3J0RXJyb3IoZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbikge1xuICAgIGxldCBjbGVhbnVwID0gc3Vic2NyaXB0aW9uLl9jbGVhbnVwO1xuICAgIGlmIChjbGVhbnVwID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICBzdWJzY3JpcHRpb24uX2NsZWFudXAgPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoIWNsZWFudXApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiBjbGVhbnVwID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNsZWFudXAoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCB1bnN1YnNjcmliZSA9IGdldE1ldGhvZChjbGVhbnVwLCAndW5zdWJzY3JpYmUnKTtcblxuICAgICAgICBpZiAodW5zdWJzY3JpYmUpIHtcbiAgICAgICAgICB1bnN1YnNjcmliZS5jYWxsKGNsZWFudXApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaG9zdFJlcG9ydEVycm9yKGUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb3NlU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbikge1xuICAgIHN1YnNjcmlwdGlvbi5fb2JzZXJ2ZXIgPSB1bmRlZmluZWQ7XG4gICAgc3Vic2NyaXB0aW9uLl9xdWV1ZSA9IHVuZGVmaW5lZDtcbiAgICBzdWJzY3JpcHRpb24uX3N0YXRlID0gJ2Nsb3NlZCc7XG4gIH1cblxuICBmdW5jdGlvbiBmbHVzaFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pIHtcbiAgICBsZXQgcXVldWUgPSBzdWJzY3JpcHRpb24uX3F1ZXVlO1xuXG4gICAgaWYgKCFxdWV1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN1YnNjcmlwdGlvbi5fcXVldWUgPSB1bmRlZmluZWQ7XG4gICAgc3Vic2NyaXB0aW9uLl9zdGF0ZSA9ICdyZWFkeSc7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgKytpKSB7XG4gICAgICBub3RpZnlTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uLCBxdWV1ZVtpXS50eXBlLCBxdWV1ZVtpXS52YWx1ZSk7XG4gICAgICBpZiAoc3Vic2NyaXB0aW9uLl9zdGF0ZSA9PT0gJ2Nsb3NlZCcpIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG5vdGlmeVN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24sIHR5cGUsIHZhbHVlKSB7XG4gICAgc3Vic2NyaXB0aW9uLl9zdGF0ZSA9ICdydW5uaW5nJztcbiAgICBsZXQgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb24uX29ic2VydmVyO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCBtID0gZ2V0TWV0aG9kKG9ic2VydmVyLCB0eXBlKTtcblxuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgJ25leHQnOlxuICAgICAgICAgIGlmIChtKSBtLmNhbGwob2JzZXJ2ZXIsIHZhbHVlKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgICAgY2xvc2VTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgICBpZiAobSkgbS5jYWxsKG9ic2VydmVyLCB2YWx1ZSk7ZWxzZSB0aHJvdyB2YWx1ZTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdjb21wbGV0ZSc6XG4gICAgICAgICAgY2xvc2VTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgICBpZiAobSkgbS5jYWxsKG9ic2VydmVyKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBob3N0UmVwb3J0RXJyb3IoZSk7XG4gICAgfVxuXG4gICAgaWYgKHN1YnNjcmlwdGlvbi5fc3RhdGUgPT09ICdjbG9zZWQnKSBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7ZWxzZSBpZiAoc3Vic2NyaXB0aW9uLl9zdGF0ZSA9PT0gJ3J1bm5pbmcnKSBzdWJzY3JpcHRpb24uX3N0YXRlID0gJ3JlYWR5JztcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uTm90aWZ5KHN1YnNjcmlwdGlvbiwgdHlwZSwgdmFsdWUpIHtcbiAgICBpZiAoc3Vic2NyaXB0aW9uLl9zdGF0ZSA9PT0gJ2Nsb3NlZCcpIHJldHVybjtcblxuICAgIGlmIChzdWJzY3JpcHRpb24uX3N0YXRlID09PSAnYnVmZmVyaW5nJykge1xuICAgICAgc3Vic2NyaXB0aW9uLl9xdWV1ZS5wdXNoKHtcbiAgICAgICAgdHlwZSxcbiAgICAgICAgdmFsdWVcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHN1YnNjcmlwdGlvbi5fc3RhdGUgIT09ICdyZWFkeScpIHtcbiAgICAgIHN1YnNjcmlwdGlvbi5fc3RhdGUgPSAnYnVmZmVyaW5nJztcbiAgICAgIHN1YnNjcmlwdGlvbi5fcXVldWUgPSBbe1xuICAgICAgICB0eXBlLFxuICAgICAgICB2YWx1ZVxuICAgICAgfV07XG4gICAgICBlbnF1ZXVlKCgpID0+IGZsdXNoU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbikpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG5vdGlmeVN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24sIHR5cGUsIHZhbHVlKTtcbiAgfVxuXG4gIGNsYXNzIFN1YnNjcmlwdGlvbiB7XG4gICAgY29uc3RydWN0b3Iob2JzZXJ2ZXIsIHN1YnNjcmliZXIpIHtcbiAgICAgIC8vIEFTU0VSVDogb2JzZXJ2ZXIgaXMgYW4gb2JqZWN0XG4gICAgICAvLyBBU1NFUlQ6IHN1YnNjcmliZXIgaXMgY2FsbGFibGVcbiAgICAgIHRoaXMuX2NsZWFudXAgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9vYnNlcnZlciA9IG9ic2VydmVyO1xuICAgICAgdGhpcy5fcXVldWUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9zdGF0ZSA9ICdpbml0aWFsaXppbmcnO1xuICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgICAgbGV0IHN1YnNjcmlwdGlvbk9ic2VydmVyID0ge1xuICAgICAgICBnZXQgY2xvc2VkKCkge1xuICAgICAgICAgIHJldHVybiBzZWxmLl9zdGF0ZSA9PT0gJ2Nsb3NlZCc7XG4gICAgICAgIH0sXG5cbiAgICAgICAgbmV4dCh2YWx1ZSkge1xuICAgICAgICAgIG9uTm90aWZ5KHNlbGYsICduZXh0JywgdmFsdWUpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGVycm9yKHZhbHVlKSB7XG4gICAgICAgICAgb25Ob3RpZnkoc2VsZiwgJ2Vycm9yJywgdmFsdWUpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGNvbXBsZXRlKCkge1xuICAgICAgICAgIG9uTm90aWZ5KHNlbGYsICdjb21wbGV0ZScpO1xuICAgICAgICB9XG5cbiAgICAgIH07XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuX2NsZWFudXAgPSBzdWJzY3JpYmVyLmNhbGwodW5kZWZpbmVkLCBzdWJzY3JpcHRpb25PYnNlcnZlcik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHN1YnNjcmlwdGlvbk9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fc3RhdGUgPT09ICdpbml0aWFsaXppbmcnKSB0aGlzLl9zdGF0ZSA9ICdyZWFkeSc7XG4gICAgfVxuXG4gICAgZ2V0IGNsb3NlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zdGF0ZSA9PT0gJ2Nsb3NlZCc7XG4gICAgfVxuXG4gICAgdW5zdWJzY3JpYmUoKSB7XG4gICAgICBpZiAodGhpcy5fc3RhdGUgIT09ICdjbG9zZWQnKSB7XG4gICAgICAgIGNsb3NlU3Vic2NyaXB0aW9uKHRoaXMpO1xuICAgICAgICBjbGVhbnVwU3Vic2NyaXB0aW9uKHRoaXMpO1xuICAgICAgfVxuICAgIH1cblxuICB9XG5cbiAgbGV0IE9ic2VydmFibGUkMSA9IGNsYXNzIE9ic2VydmFibGUge1xuICAgIGNvbnN0cnVjdG9yKHN1YnNjcmliZXIpIHtcbiAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignT2JzZXJ2YWJsZSBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24nKTtcbiAgICAgIGlmICh0eXBlb2Ygc3Vic2NyaWJlciAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IFR5cGVFcnJvcignT2JzZXJ2YWJsZSBpbml0aWFsaXplciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICAgIHRoaXMuX3N1YnNjcmliZXIgPSBzdWJzY3JpYmVyO1xuICAgIH1cblxuICAgIHN1YnNjcmliZShvYnNlcnZlcikge1xuICAgICAgaWYgKHR5cGVvZiBvYnNlcnZlciAhPT0gJ29iamVjdCcgfHwgb2JzZXJ2ZXIgPT09IG51bGwpIHtcbiAgICAgICAgb2JzZXJ2ZXIgPSB7XG4gICAgICAgICAgbmV4dDogb2JzZXJ2ZXIsXG4gICAgICAgICAgZXJyb3I6IGFyZ3VtZW50c1sxXSxcbiAgICAgICAgICBjb21wbGV0ZTogYXJndW1lbnRzWzJdXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKG9ic2VydmVyLCB0aGlzLl9zdWJzY3JpYmVyKTtcbiAgICB9XG5cbiAgICBmb3JFYWNoKGZuKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoZm4gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJykpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHN1YnNjcmlwdGlvbiA9IHRoaXMuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0KHZhbHVlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBmbih2YWx1ZSwgZG9uZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgICAgY29tcGxldGU6IHJlc29sdmVcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBtYXAoZm4pIHtcbiAgICAgIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBUeXBlRXJyb3IoZm4gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICBsZXQgQyA9IGdldFNwZWNpZXModGhpcyk7XG4gICAgICByZXR1cm4gbmV3IEMob2JzZXJ2ZXIgPT4gdGhpcy5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0KHZhbHVlKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhbHVlID0gZm4odmFsdWUpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgfSxcblxuICAgICAgICBlcnJvcihlKSB7XG4gICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgY29tcGxldGUoKSB7XG4gICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgZmlsdGVyKGZuKSB7XG4gICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgVHlwZUVycm9yKGZuICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgICAgbGV0IEMgPSBnZXRTcGVjaWVzKHRoaXMpO1xuICAgICAgcmV0dXJuIG5ldyBDKG9ic2VydmVyID0+IHRoaXMuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dCh2YWx1ZSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoIWZuKHZhbHVlKSkgcmV0dXJuO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgfSxcblxuICAgICAgICBlcnJvcihlKSB7XG4gICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgY29tcGxldGUoKSB7XG4gICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgcmVkdWNlKGZuKSB7XG4gICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgVHlwZUVycm9yKGZuICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgICAgbGV0IEMgPSBnZXRTcGVjaWVzKHRoaXMpO1xuICAgICAgbGV0IGhhc1NlZWQgPSBhcmd1bWVudHMubGVuZ3RoID4gMTtcbiAgICAgIGxldCBoYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgbGV0IHNlZWQgPSBhcmd1bWVudHNbMV07XG4gICAgICBsZXQgYWNjID0gc2VlZDtcbiAgICAgIHJldHVybiBuZXcgQyhvYnNlcnZlciA9PiB0aGlzLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQodmFsdWUpIHtcbiAgICAgICAgICBsZXQgZmlyc3QgPSAhaGFzVmFsdWU7XG4gICAgICAgICAgaGFzVmFsdWUgPSB0cnVlO1xuXG4gICAgICAgICAgaWYgKCFmaXJzdCB8fCBoYXNTZWVkKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBhY2MgPSBmbihhY2MsIHZhbHVlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhY2MgPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgZXJyb3IoZSkge1xuICAgICAgICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGNvbXBsZXRlKCkge1xuICAgICAgICAgIGlmICghaGFzVmFsdWUgJiYgIWhhc1NlZWQpIHJldHVybiBvYnNlcnZlci5lcnJvcihuZXcgVHlwZUVycm9yKCdDYW5ub3QgcmVkdWNlIGFuIGVtcHR5IHNlcXVlbmNlJykpO1xuICAgICAgICAgIG9ic2VydmVyLm5leHQoYWNjKTtcbiAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBhc3luYyBhbGwoKSB7XG4gICAgICBsZXQgdmFsdWVzID0gW107XG4gICAgICBhd2FpdCB0aGlzLmZvckVhY2godmFsdWUgPT4gdmFsdWVzLnB1c2godmFsdWUpKTtcbiAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgfVxuXG4gICAgY29uY2F0KC4uLnNvdXJjZXMpIHtcbiAgICAgIGxldCBDID0gZ2V0U3BlY2llcyh0aGlzKTtcbiAgICAgIHJldHVybiBuZXcgQyhvYnNlcnZlciA9PiB7XG4gICAgICAgIGxldCBzdWJzY3JpcHRpb247XG4gICAgICAgIGxldCBpbmRleCA9IDA7XG5cbiAgICAgICAgZnVuY3Rpb24gc3RhcnROZXh0KG5leHQpIHtcbiAgICAgICAgICBzdWJzY3JpcHRpb24gPSBuZXh0LnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0KHYpIHtcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh2KTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGVycm9yKGUpIHtcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZSk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBjb21wbGV0ZSgpIHtcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSBzb3VyY2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0YXJ0TmV4dChDLmZyb20oc291cmNlc1tpbmRleCsrXSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXJ0TmV4dCh0aGlzKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICBpZiAoc3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmbGF0TWFwKGZuKSB7XG4gICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgVHlwZUVycm9yKGZuICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgICAgbGV0IEMgPSBnZXRTcGVjaWVzKHRoaXMpO1xuICAgICAgcmV0dXJuIG5ldyBDKG9ic2VydmVyID0+IHtcbiAgICAgICAgbGV0IHN1YnNjcmlwdGlvbnMgPSBbXTtcbiAgICAgICAgbGV0IG91dGVyID0gdGhpcy5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQodmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gZm4odmFsdWUpO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBpbm5lciA9IEMuZnJvbSh2YWx1ZSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgbmV4dCh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgIGVycm9yKGUpIHtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICBjb21wbGV0ZSgpIHtcbiAgICAgICAgICAgICAgICBsZXQgaSA9IHN1YnNjcmlwdGlvbnMuaW5kZXhPZihpbm5lcik7XG4gICAgICAgICAgICAgICAgaWYgKGkgPj0gMCkgc3Vic2NyaXB0aW9ucy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgY29tcGxldGVJZkRvbmUoKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbnMucHVzaChpbm5lcik7XG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGVycm9yKGUpIHtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBjb21wbGV0ZSgpIHtcbiAgICAgICAgICAgIGNvbXBsZXRlSWZEb25lKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZ1bmN0aW9uIGNvbXBsZXRlSWZEb25lKCkge1xuICAgICAgICAgIGlmIChvdXRlci5jbG9zZWQgJiYgc3Vic2NyaXB0aW9ucy5sZW5ndGggPT09IDApIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgIHN1YnNjcmlwdGlvbnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gICAgICAgICAgb3V0ZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIFtTeW1ib2xPYnNlcnZhYmxlXSgpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tKHgpIHtcbiAgICAgIGxldCBDID0gdHlwZW9mIHRoaXMgPT09ICdmdW5jdGlvbicgPyB0aGlzIDogT2JzZXJ2YWJsZTtcbiAgICAgIGlmICh4ID09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoeCArICcgaXMgbm90IGFuIG9iamVjdCcpO1xuICAgICAgbGV0IG1ldGhvZCA9IGdldE1ldGhvZCh4LCBTeW1ib2xPYnNlcnZhYmxlKTtcblxuICAgICAgaWYgKG1ldGhvZCkge1xuICAgICAgICBsZXQgb2JzZXJ2YWJsZSA9IG1ldGhvZC5jYWxsKHgpO1xuICAgICAgICBpZiAoT2JqZWN0KG9ic2VydmFibGUpICE9PSBvYnNlcnZhYmxlKSB0aHJvdyBuZXcgVHlwZUVycm9yKG9ic2VydmFibGUgKyAnIGlzIG5vdCBhbiBvYmplY3QnKTtcbiAgICAgICAgaWYgKGlzT2JzZXJ2YWJsZShvYnNlcnZhYmxlKSAmJiBvYnNlcnZhYmxlLmNvbnN0cnVjdG9yID09PSBDKSByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgICAgICAgcmV0dXJuIG5ldyBDKG9ic2VydmVyID0+IG9ic2VydmFibGUuc3Vic2NyaWJlKG9ic2VydmVyKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChoYXNTeW1ib2woJ2l0ZXJhdG9yJykpIHtcbiAgICAgICAgbWV0aG9kID0gZ2V0TWV0aG9kKHgsIFN5bWJvbEl0ZXJhdG9yKTtcblxuICAgICAgICBpZiAobWV0aG9kKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBDKG9ic2VydmVyID0+IHtcbiAgICAgICAgICAgIGVucXVldWUoKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAob2JzZXJ2ZXIuY2xvc2VkKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBtZXRob2QuY2FsbCh4KSkge1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoaXRlbSk7XG4gICAgICAgICAgICAgICAgaWYgKG9ic2VydmVyLmNsb3NlZCkgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHgpKSB7XG4gICAgICAgIHJldHVybiBuZXcgQyhvYnNlcnZlciA9PiB7XG4gICAgICAgICAgZW5xdWV1ZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAob2JzZXJ2ZXIuY2xvc2VkKSByZXR1cm47XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeC5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHhbaV0pO1xuICAgICAgICAgICAgICBpZiAob2JzZXJ2ZXIuY2xvc2VkKSByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHggKyAnIGlzIG5vdCBvYnNlcnZhYmxlJyk7XG4gICAgfVxuXG4gICAgc3RhdGljIG9mKC4uLml0ZW1zKSB7XG4gICAgICBsZXQgQyA9IHR5cGVvZiB0aGlzID09PSAnZnVuY3Rpb24nID8gdGhpcyA6IE9ic2VydmFibGU7XG4gICAgICByZXR1cm4gbmV3IEMob2JzZXJ2ZXIgPT4ge1xuICAgICAgICBlbnF1ZXVlKCgpID0+IHtcbiAgICAgICAgICBpZiAob2JzZXJ2ZXIuY2xvc2VkKSByZXR1cm47XG5cbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KGl0ZW1zW2ldKTtcbiAgICAgICAgICAgIGlmIChvYnNlcnZlci5jbG9zZWQpIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXQgW1N5bWJvbFNwZWNpZXNdKCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gIH07XG5cbiAgT2JzZXJ2YWJsZSQyLk9ic2VydmFibGUgPSBPYnNlcnZhYmxlJDE7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYnNlcnZhYmxlJDEsIFN5bWJvbCgnZXh0ZW5zaW9ucycpLCB7XG4gICAgdmFsdWU6IHtcbiAgICAgIHN5bWJvbDogU3ltYm9sT2JzZXJ2YWJsZSxcbiAgICAgIGhvc3RSZXBvcnRFcnJvclxuICAgIH0sXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xuXG4gIHZhciB6ZW5PYnNlcnZhYmxlID0gT2JzZXJ2YWJsZSQyLk9ic2VydmFibGU7XG5cbiAgY29uc3QgT2JzZXJ2YWJsZSA9IC8qQF9fUFVSRV9fKi9nZXREZWZhdWx0RXhwb3J0RnJvbUNqcyh6ZW5PYnNlcnZhYmxlKTtcblxuICBjb25zdCB7IGxvZ19fLCBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJpbml0LWZsb3dzXCIpO1xuICBjb25zdCBnZXRPanNJbml0UmVzdWx0c0RlYnVnT2JqZWN0ID0gKCkgPT4ge1xuICAgIGlmICghKFwib2pzX2luaXRfcmVzdWx0c1wiIGluIHdpbmRvdykpIHtcbiAgICAgIHdpbmRvd1tcIm9qc19pbml0X3Jlc3VsdHNcIl0gPSB7fTtcbiAgICB9XG4gICAgcmV0dXJuIHdpbmRvd1tcIm9qc19pbml0X3Jlc3VsdHNcIl07XG4gIH07XG4gIGNvbnN0IGluaXRpYWxpemVPanNGbG93cyA9IChjb250ZXh0LCBmbG93Q2FsbGJhY2tzKSA9PiB7XG4gICAgY29uc3QgaW5pdFBhcmFtcyA9IHsgY29udGV4dCwgZmxvd0NhbGxiYWNrcyB9O1xuICAgIGNvbnNvbGUubG9nKFwiW09KU10gaW5pdGlhbGl6aW5nIE9KUyBmbG93cy4uLlwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gU3RyaXBlIFBSXG4gICAgICBzdHJpcGVQUjogcnVuSW5pdEZsb3dBc09ic2VydmFibGUoXCJzdHJpcGVQUlwiLCBPanNGbG93cy5zdHJpcGVQUi5pbml0KGluaXRQYXJhbXMpKSxcbiAgICAgIC8vIFN0cmlwZSBMaW5rXG4gICAgICBzdHJpcGVMaW5rOiBydW5Jbml0Rmxvd0FzT2JzZXJ2YWJsZShcInN0cmlwZUxpbmtcIiwgT2pzRmxvd3Muc3RyaXBlTGluay5pbml0KGluaXRQYXJhbXMpKVxuICAgICAgLy8g8J+RiSBBZGQgaW5pdGlhbGl6YXRpb24gZmxvd3MgaGVyZVxuICAgIH07XG4gIH07XG4gIGNvbnN0IHJ1bkluaXRGbG93QXNPYnNlcnZhYmxlID0gKGZsb3dOYW1lLCBpbml0RmxvdykgPT4ge1xuICAgIGNvbnN0IG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXIpID0+IHtcbiAgICAgIG9ic2VydmVyLm5leHQoeyBzdGF0dXM6IFwibG9hZGluZ1wiIH0pO1xuICAgICAgaW5pdEZsb3cudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgIG9ic2VydmVyLm5leHQoeyBzdGF0dXM6IFwibG9hZGVkXCIsIHJlc3VsdCB9KTtcbiAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICBvYnNlcnZlci5uZXh0KHsgc3RhdHVzOiBcImVycm9yXCIsIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBvYnNlcnZhYmxlLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzdWx0KSA9PiB7XG4gICAgICAgIGxvZ19fKGAke2Zsb3dOYW1lfSBmbG93IHJlc3VsdGAsIHJlc3VsdCk7XG4gICAgICAgIGdldE9qc0luaXRSZXN1bHRzRGVidWdPYmplY3QoKVtmbG93TmFtZV0gPSByZXN1bHQ7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICBlcnJfXyhgJHtmbG93TmFtZX0gZmxvdyBpbml0aWFsaXphdGlvbiBlcnJvcjpcbiR7SlNPTi5zdHJpbmdpZnkoZXJyb3IpfWApO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgfTtcblxuICBjb25zdCBQUl9MT0FESU5HID0ge1xuICAgIGlzTG9hZGluZzogdHJ1ZSxcbiAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBzdGFydEZsb3cgdHJpZ2dlcmVkIHdoaWxlIHBheW1lbnQgcmVxdWVzdCBpcyBzdGlsbCBub3QgcmVhZHkuIFxuICAgICAgWW91IGNhbiBjaGVjayB0aGUgXCIuaXNMb2FkaW5nXCIgcGFyYW0gdG8ga25vdyB3aGVuIGEgcGF5bWVudCByZXF1ZXN0IGlzIHN0aWxsIGxvYWRpbmcsIFxuICAgICAgYW5kIFwiLmlzQXZhaWxhYmxlXCIgdG8ga25vdyBpZiBhIHBheW1lbnQgcmVxdWVzdCBpcyBhdmFpbGFibGUuYFxuICAgICAgKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IFBSX0VSUk9SID0ge1xuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcihgc3RhcnRGbG93IHRyaWdnZXJlZCB3aGVuIHBheW1lbnQgcmVxdWVzdCBpcyBub3QgYXZhaWxhYmxlLmApO1xuICAgIH1cbiAgfTtcblxuICBjbGFzcyBPcGVuUGF5Rm9ybUV2ZW50SGFuZGxlciB7XG4gICAgY29uc3RydWN0b3IoZm9ybUluc3RhbmNlKSB7XG4gICAgICB0aGlzLmZvcm1JbnN0YW5jZSA9IGZvcm1JbnN0YW5jZTtcbiAgICAgIHRoaXMuY29uZmlnID0gZm9ybUluc3RhbmNlLmNvbmZpZztcbiAgICAgIHRoaXMuZm9ybUlkID0gZm9ybUluc3RhbmNlLmZvcm1JZDtcbiAgICAgIHRoaXMuZXZlbnRUYXJnZXRzID0ge307XG4gICAgICB0aGlzLm5vbmNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG4gICAgfVxuICAgIGhhbmRsZU1lc3NhZ2UoZXZlbnQpIHtcbiAgICAgIGlmICghZXZlbnQuc291cmNlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gc291cmNlIGZvdW5kYCk7XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQub3JpZ2luICE9PSB0aGlzLmZvcm1JbnN0YW5jZS5jb25maWcuX2ZyYW1lVXJsPy5vcmlnaW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBldmVudC5kYXRhID09PSBcIm9iamVjdFwiICYmIGV2ZW50LmRhdGFbXCJwZW5wYWxcIl0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZXZlbnREYXRhID0gcGFyc2VFdmVudFBheWxvYWQoSlNPTi5wYXJzZShldmVudC5kYXRhKSk7XG4gICAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy52YWxpZGF0ZUV2ZW50KGV2ZW50RGF0YSk7XG4gICAgICBpZiAoIWlzVmFsaWQpIHJldHVybjtcbiAgICAgIGNvbnN0IHsgZWxlbWVudElkLCBwYXlsb2FkIH0gPSBldmVudERhdGE7XG4gICAgICBjb25zdCBldmVudFR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gICAgICBzd2l0Y2ggKGV2ZW50VHlwZSkge1xuICAgICAgICBjYXNlIFwiTEFZT1VUXCI6XG4gICAgICAgICAgdGhpcy5oYW5kbGVMYXlvdXRFdmVudChwYXlsb2FkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkZPQ1VTXCI6XG4gICAgICAgICAgdGhpcy5oYW5kbGVGb2N1c0V2ZW50KGVsZW1lbnRJZCwgcGF5bG9hZC5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJCTFVSXCI6XG4gICAgICAgICAgdGhpcy5oYW5kbGVCbHVyRXZlbnQoZWxlbWVudElkLCBwYXlsb2FkLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkNIQU5HRVwiOlxuICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlRXZlbnQoZWxlbWVudElkLCBwYXlsb2FkLmVsZW1lbnRUeXBlLCBwYXlsb2FkLmVycm9ycyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FERURcIjpcbiAgICAgICAgICB0aGlzLmhhbmRsZUxvYWRlZEV2ZW50KGV2ZW50LnNvdXJjZSwgZWxlbWVudElkLCBwYXlsb2FkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURfRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmhhbmRsZUxvYWRFcnJvckV2ZW50KHBheWxvYWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiVkFMSURBVElPTl9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuaGFuZGxlVmFsaWRhdGlvbkVycm9yRXZlbnQocGF5bG9hZCwgZWxlbWVudElkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25zb2xlLndhcm4oXCJbZm9ybV0gVW5oYW5kbGVkIGV2ZW50IHR5cGU6XCIsIGV2ZW50VHlwZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHZhbGlkYXRlRXZlbnQoZXZlbnREYXRhKSB7XG4gICAgICBpZiAoZXZlbnREYXRhLmZvcm1JZCAhPT0gdGhpcy5mb3JtSW5zdGFuY2UuZm9ybUlkIHx8ICFldmVudERhdGEuZWxlbWVudElkKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyB1bmtub3duIGV2ZW50OlwiLCBldmVudERhdGEpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5ub25jZXMuaGFzKGV2ZW50RGF0YS5ub25jZSkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIGR1cGxpY2F0ZSBldmVudDpcIiwgZXZlbnREYXRhKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5ub25jZXMuYWRkKGV2ZW50RGF0YS5ub25jZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaGFuZGxlTGF5b3V0RXZlbnQocGF5bG9hZCkge1xuICAgICAgY29uc3QgaGVpZ2h0ID0gcGF5bG9hZC5oZWlnaHQgPyBgJHtwYXlsb2FkLmhlaWdodH1weGAgOiBcIjEwMCVcIjtcbiAgICAgIHRoaXMuZm9ybUluc3RhbmNlLnNldEZvcm1IZWlnaHQoaGVpZ2h0KTtcbiAgICB9XG4gICAgaGFuZGxlRm9jdXNFdmVudChlbGVtZW50SWQsIGZpZWxkKSB7XG4gICAgICBpZiAodGhpcy5jb25maWcub25Gb2N1cykgdGhpcy5jb25maWcub25Gb2N1cyhlbGVtZW50SWQsIGZpZWxkKTtcbiAgICB9XG4gICAgaGFuZGxlQmx1ckV2ZW50KGVsZW1lbnRJZCwgZmllbGQpIHtcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5vbkJsdXIpIHRoaXMuY29uZmlnLm9uQmx1cihlbGVtZW50SWQsIGZpZWxkKTtcbiAgICB9XG4gICAgaGFuZGxlQ2hhbmdlRXZlbnQoZWxlbWVudElkLCBmaWVsZCwgZXJyb3JzKSB7XG4gICAgICBpZiAodGhpcy5jb25maWcub25DaGFuZ2UpIHRoaXMuY29uZmlnLm9uQ2hhbmdlKGVsZW1lbnRJZCwgZmllbGQsIGVycm9ycyk7XG4gICAgfVxuICAgIGFzeW5jIGhhbmRsZUxvYWRlZEV2ZW50KHNvdXJjZSwgZWxlbWVudElkLCBwYXlsb2FkKSB7XG4gICAgICBjb25zb2xlLmxvZyhcImhhbmRsZUxvYWRlZEV2ZW50IGlzIGRlcHJlY2F0ZWQ6XCIsIHNvdXJjZSwgZWxlbWVudElkLCBwYXlsb2FkKTtcbiAgICAgIHRoaXMuZXZlbnRUYXJnZXRzW2VsZW1lbnRJZF0gPSBzb3VyY2U7XG4gICAgICB0aGlzLmZvcm1JbnN0YW5jZS5vbkNkZUxvYWRlZChwYXlsb2FkKTtcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5vbkxvYWQpIHtcbiAgICAgICAgdGhpcy5jb25maWcub25Mb2FkKHBheWxvYWQudG90YWxBbW91bnRBdG9tcywgcGF5bG9hZC5jdXJyZW5jeSk7XG4gICAgICB9XG4gICAgfVxuICAgIGhhbmRsZUxvYWRFcnJvckV2ZW50KHBheWxvYWQpIHtcbiAgICAgIGlmICh0aGlzLmZvcm1JbnN0YW5jZS5jb25maWcub25Mb2FkRXJyb3IpIHRoaXMuZm9ybUluc3RhbmNlLmNvbmZpZy5vbkxvYWRFcnJvcihwYXlsb2FkLm1lc3NhZ2UpO1xuICAgIH1cbiAgICBoYW5kbGVWYWxpZGF0aW9uRXJyb3JFdmVudChwYXlsb2FkLCBlbGVtZW50SWQpIHtcbiAgICAgIGlmICh0aGlzLmZvcm1JbnN0YW5jZS5jb25maWcub25WYWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgICAgdGhpcy5mb3JtSW5zdGFuY2UuY29uZmlnLm9uVmFsaWRhdGlvbkVycm9yKHBheWxvYWQuZWxlbWVudFR5cGUsIHBheWxvYWQuZXJyb3JzLCBlbGVtZW50SWQpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBhc3luYyBoYW5kbGVFcnJvckV2ZW50KHBheWxvYWQ6IEVycm9yRXZlbnRQYXlsb2FkKSB7XG4gICAgLy8gICBpZiAocGF5bG9hZC5tZXNzYWdlID09PSAnM0RTX1JFUVVJUkVEJykge1xuICAgIC8vICAgICBjb25zdCB0aHJlZURTVXJsID0gcGF5bG9hZC5oZWFkZXJzPy5bJ3gtM2RzLWF1dGgtdXJsJ10gPz8gU0lNVUxBVEVfM0RTX1VSTDtcbiAgICAvLyAgICAgLy8gVGhpcyB3aWxsIG9wZW4gYSBwb3B1cCBhbmQgcHJvY2VzcyB0aGUgM0RTIGZsb3dcbiAgICAvLyAgICAgLy8gd2lsbCByZXR1cm4gYSBzdGF0dXMgYHN1Y2Nlc3NgIHwgYGZhaWx1cmVgIHwgYGNhbmNlbGxlZGAgd2hpY2ggd2UgY2FuIGNvbnRpbnVlIHdpdGhcbiAgICAvLyAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oeyB1cmw6IHRocmVlRFNVcmwsIGJhc2VVcmw6IHRoaXMuY29uZmlnLmJhc2VVcmwhIH0pO1xuICAgIC8vICAgICBjb25zb2xlLmxvZygn8J+UkCAzRFMgc3RhdHVzOicsIHN0YXR1cyk7XG4gICAgLy8gICAgIC8vIFRPRE86IGNvbnRpbnVlIHdpdGggc3RhdHVzXG4gICAgLy8gICAgIGNvbnN0IGNhcmRDcG0gPSB0aGlzLmZvcm1JbnN0YW5jZS5jaGVja291dFBheW1lbnRNZXRob2RzPy5maW5kKChjcG0pID0+IGNwbS5wcm92aWRlciA9PT0gJ2NyZWRpdF9jYXJkJyk7XG4gICAgLy8gICAgIGlmICghdGhpcy5mb3JtSW5zdGFuY2Uuc2Vzc2lvbklkIHx8ICF0aGlzLmZvcm1JbnN0YW5jZS5mb3JtVGFyZ2V0IHx8ICF0aGlzLmNvbmZpZy5vblZhbGlkYXRpb25FcnJvciB8fCAhY2FyZENwbSlcbiAgICAvLyAgICAgICByZXR1cm47XG4gICAgLy8gICAgIGZvciAoY29uc3QgW2VsZW1lbnRJZCwgdGFyZ2V0XSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmV2ZW50VGFyZ2V0cykpIHtcbiAgICAvLyAgICAgICBpZiAoIXRhcmdldCkgY29udGludWU7XG4gICAgLy8gICAgICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd0V2ZW50ID0gY29uc3RydWN0U3VibWl0RXZlbnRQYXlsb2FkKFxuICAgIC8vICAgICAgICAgRXZlbnRUeXBlLmVudW0uU1RBUlRfUEFZTUVOVF9GTE9XLFxuICAgIC8vICAgICAgICAgdGhpcy5mb3JtSW5zdGFuY2Uuc2Vzc2lvbklkLFxuICAgIC8vICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmZvcm1JbnN0YW5jZS5mb3JtVGFyZ2V0KSA/PyBkb2N1bWVudC5ib2R5LFxuICAgIC8vICAgICAgICAgdGhpcy5jb25maWcub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgLy8gICAgICAgICB7IC4uLmNhcmRDcG0sIHByb2Nlc3Nvcl9uYW1lOiAnc3RyaXBlJyB9LFxuICAgIC8vICAgICAgICAgZmFsc2VcbiAgICAvLyAgICAgICApO1xuICAgIC8vICAgICAgIGlmICghc3RhcnRQYXltZW50Rmxvd0V2ZW50KSBjb250aW51ZTtcbiAgICAvLyAgICAgICB0aGlzLmZvcm1JbnN0YW5jZS5jaGVja291dEZpcmVkID0gdHJ1ZTtcbiAgICAvLyAgICAgICB0aGlzLnRva2VuaXplZERhdGEgPSBzdGFydFBheW1lbnRGbG93RXZlbnQ7XG4gICAgLy8gICAgICAgdGhpcy5wb3N0RXZlbnRUb0ZyYW1lKHRhcmdldCwgZWxlbWVudElkLCBzdGFydFBheW1lbnRGbG93RXZlbnQpO1xuICAgIC8vICAgICAgIGJyZWFrO1xuICAgIC8vICAgICB9XG4gICAgLy8gICB9IGVsc2Uge1xuICAgIC8vICAgICB0aGlzLmZvcm1JbnN0YW5jZS5jaGVja291dEZpcmVkID0gZmFsc2U7XG4gICAgLy8gICAgIGlmICh0aGlzLmZvcm1JbnN0YW5jZS5jb25maWcub25DaGVja291dEVycm9yKSB0aGlzLmZvcm1JbnN0YW5jZS5jb25maWcub25DaGVja291dEVycm9yKHBheWxvYWQubWVzc2FnZSk7XG4gICAgLy8gICB9XG4gICAgLy8gfVxuICAgIC8vIGhhbmRsZUZvcm1TdWJtaXQoKSB7XG4gICAgLy8gICBpZiAoXG4gICAgLy8gICAgICF0aGlzLmZvcm1JbnN0YW5jZS5zZXNzaW9uSWQgfHxcbiAgICAvLyAgICAgIXRoaXMuZm9ybUluc3RhbmNlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHM/Lmxlbmd0aCB8fFxuICAgIC8vICAgICAhdGhpcy5jb25maWcub25WYWxpZGF0aW9uRXJyb3JcbiAgICAvLyAgICkge1xuICAgIC8vICAgICByZXR1cm47XG4gICAgLy8gICB9XG4gICAgLy8gICBjb25zdCBjYXJkQ3BtID0gdGhpcy5mb3JtSW5zdGFuY2UuY2hlY2tvdXRQYXltZW50TWV0aG9kcy5maW5kKChjcG0pID0+IGNwbS5wcm92aWRlciA9PT0gJ2NyZWRpdF9jYXJkJyk7XG4gICAgLy8gICBpZiAoIWNhcmRDcG0pIHtcbiAgICAvLyAgICAgdGhyb3cgbmV3IEVycm9yKCdDYXJkIG5vdCBhdmFpbGFibGUgYXMgYSBwYXltZW50IG1ldGhvZCBpbiBjaGVja291dCcpO1xuICAgIC8vICAgfVxuICAgIC8vICAgY29uc3QgdG9rZW5pemVEYXRhID0gY29uc3RydWN0U3VibWl0RXZlbnRQYXlsb2FkKFxuICAgIC8vICAgICBFdmVudFR5cGUuZW51bS5UT0tFTklaRSxcbiAgICAvLyAgICAgdGhpcy5mb3JtSW5zdGFuY2Uuc2Vzc2lvbklkISxcbiAgICAvLyAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmZvcm1JbnN0YW5jZS5mb3JtVGFyZ2V0KSA/PyBkb2N1bWVudC5ib2R5LFxuICAgIC8vICAgICB0aGlzLmNvbmZpZy5vblZhbGlkYXRpb25FcnJvcixcbiAgICAvLyAgICAgY2FyZENwbSxcbiAgICAvLyAgICAgZmFsc2VcbiAgICAvLyAgICk7XG4gICAgLy8gICBpZiAoIXRva2VuaXplRGF0YSkge1xuICAgIC8vICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yIGNvbnN0cnVjdGluZyB0b2tlbml6ZSBkYXRhJyk7XG4gICAgLy8gICB9XG4gICAgLy8gICBmb3IgKGNvbnN0IFtlbGVtZW50SWQsIHRhcmdldF0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5ldmVudFRhcmdldHMpKSB7XG4gICAgLy8gICAgIGlmICghdGFyZ2V0KSBjb250aW51ZTtcbiAgICAvLyAgICAgdGhpcy5wb3N0RXZlbnRUb0ZyYW1lKHRhcmdldCwgZWxlbWVudElkLCB0b2tlbml6ZURhdGEpO1xuICAgIC8vICAgfVxuICAgIC8vICAgdGhpcy50b2tlbml6ZWREYXRhID0gdG9rZW5pemVEYXRhO1xuICAgIC8vIH1cbiAgICAvLyBhc3luYyBvblVzZXJDb21wbGV0ZVBheW1lbnRSZXF1ZXN0VUkoXG4gICAgLy8gICBzdHJpcGVQbTogUGF5bWVudFJlcXVlc3RQYXltZW50TWV0aG9kRXZlbnQsXG4gICAgLy8gICBjaGVja291dFBheW1lbnRNZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgIC8vICk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vICAgaWYgKCF0aGlzLmNvbmZpZy5vblZhbGlkYXRpb25FcnJvciB8fCAhdGhpcy5mb3JtSW5zdGFuY2Uuc2Vzc2lvbklkIHx8ICF0aGlzLmZvcm1JbnN0YW5jZS5jaGVja291dFBheW1lbnRNZXRob2RzKVxuICAgIC8vICAgICByZXR1cm47XG4gICAgLy8gICBmb3IgKGNvbnN0IFtlbGVtZW50SWQsIGVsZW1lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuZXZlbnRUYXJnZXRzID8/IHt9KSkge1xuICAgIC8vICAgICBjb25zdCBwYXltZW50Rmxvd01ldGFkYXRhID0geyBzdHJpcGVQbUlkOiBzdHJpcGVQbS5wYXltZW50TWV0aG9kLmlkIH07XG4gICAgLy8gICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dFdmVudCA9IGNvbnN0cnVjdFN1Ym1pdEV2ZW50UGF5bG9hZChcbiAgICAvLyAgICAgICBFdmVudFR5cGUuZW51bS5TVEFSVF9QQVlNRU5UX0ZMT1csXG4gICAgLy8gICAgICAgdGhpcy5mb3JtSW5zdGFuY2Uuc2Vzc2lvbklkLFxuICAgIC8vICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5mb3JtSW5zdGFuY2UuZm9ybVRhcmdldCkgPz8gZG9jdW1lbnQuYm9keSxcbiAgICAvLyAgICAgICB0aGlzLmNvbmZpZy5vblZhbGlkYXRpb25FcnJvcixcbiAgICAvLyAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgLy8gICAgICAgZmFsc2UsXG4gICAgLy8gICAgICAgcGF5bWVudEZsb3dNZXRhZGF0YVxuICAgIC8vICAgICApO1xuICAgIC8vICAgICBpZiAoIXN0YXJ0UGF5bWVudEZsb3dFdmVudCkgY29udGludWU7XG4gICAgLy8gICAgIHRoaXMuc3RyaXBlUG0gPSBzdHJpcGVQbTtcbiAgICAvLyAgICAgdGhpcy5mb3JtSW5zdGFuY2UuY2hlY2tvdXRGaXJlZCA9IHRydWU7XG4gICAgLy8gICAgIHRoaXMuc2V0VG9rZW5pemVkRGF0YShzdGFydFBheW1lbnRGbG93RXZlbnQpO1xuICAgIC8vICAgICB0aGlzLnBvc3RFdmVudFRvRnJhbWUoZWxlbWVudCwgZWxlbWVudElkLCBzdGFydFBheW1lbnRGbG93RXZlbnQpO1xuICAgIC8vICAgICAvLyBlbWl0RXZlbnQoZWxlbWVudC5ub2RlLmNvbnRlbnRXaW5kb3chLCB0aGlzLmZvcm1JZCwgZWxlbWVudElkLCBzdGFydFBheW1lbnRGbG93RXZlbnQsIHRoaXMuY29uZmlnLmJhc2VVcmwhKTtcbiAgICAvLyAgICAgYnJlYWs7XG4gICAgLy8gICB9XG4gICAgLy8gfVxuICAgIHBvc3RFdmVudFRvRnJhbWUoc291cmNlLCBlbGVtZW50SWQsIGRhdGEpIHtcbiAgICAgIGVtaXRFdmVudChzb3VyY2UsIHRoaXMuZm9ybUlkLCBlbGVtZW50SWQsIGRhdGEsIHRoaXMuY29uZmlnLmJhc2VVcmwpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUNvbm5lY3Rpb24oaWZyYW1lLCBjaGlsZE9yaWdpbikge1xuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBwZW5wYWwuY29ubmVjdFRvQ2hpbGQoe1xuICAgICAgaWZyYW1lLFxuICAgICAgZGVidWc6IGZhbHNlLFxuICAgICAgY2hpbGRPcmlnaW5cbiAgICB9KTtcbiAgICBjb25zdCBjb25uZWN0aW9uT2JqID0gYXdhaXQgY29ubmVjdGlvbi5wcm9taXNlO1xuICAgIGNvbnN0IGlzVmFsaWRPYmplY3QgPSBhd2FpdCBjaGVja0lmVmFsaWRDZGVDb25uZWN0aW9uT2JqZWN0KGNvbm5lY3Rpb25PYmopO1xuICAgIGlmICghaXNSZXN1bHRWYWxpZChjb25uZWN0aW9uT2JqLCBpc1ZhbGlkT2JqZWN0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBHb3QgaW52YWxpZCBDREUgY29ubmVjdGlvbiBvYmplY3RgKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbm5lY3Rpb25PYmo7XG4gIH1cbiAgY2xhc3MgQ29ubmVjdGlvbk1hbmFnZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgdGhpcy5jb25uZWN0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gICAgfVxuICAgIGFkZENvbm5lY3Rpb24oaWQsIGNvbm5lY3Rpb24pIHtcbiAgICAgIHRoaXMuY29ubmVjdGlvbnMuc2V0KGlkLCBjb25uZWN0aW9uKTtcbiAgICB9XG4gICAgZ2V0Q29ubmVjdGlvbigpIHtcbiAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSB0aGlzLmNvbm5lY3Rpb25zLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgICAgIGlmICghY29ubmVjdGlvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25uZWN0aW9uIG5vdCBmb3VuZFwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb25uZWN0aW9uO1xuICAgIH1cbiAgICBnZXRBbGxDb25uZWN0aW9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25zO1xuICAgIH1cbiAgfVxuXG4gIGNsYXNzIE9wZW5QYXlGb3JtIHtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICAgIHRoaXMudHJ5SW5pdE9qc0Zsb3dzID0gKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5vanNGbG93c0luaXRpYWxpemF0aW9uICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5jZGVMb2FkZWRQYXlsb2FkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmdldEFsbENvbm5lY3Rpb25zKCkuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9qc0Zsb3dzSW5pdGlhbGl6YXRpb24gPSBpbml0aWFsaXplT2pzRmxvd3ModGhpcy5jcmVhdGVPanNGbG93Q29udGV4dCgpLCB0aGlzLmNyZWF0ZU9qc0Zsb3dDYWxsYmFja3MoKSk7XG4gICAgICAgIHRoaXMub2pzRmxvd3NJbml0aWFsaXphdGlvbi5zdHJpcGVQUi5zdWJzY3JpYmUoKHN0YXR1cykgPT4gdGhpcy5vblN0cmlwZVBSU3RhdHVzQ2hhbmdlKHN0YXR1cykpO1xuICAgICAgfTtcbiAgICAgIHRoaXMub25DZGVMb2FkZWQgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jZGVMb2FkZWRQYXlsb2FkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RlTG9hZGVkUGF5bG9hZCA9IHBheWxvYWQ7XG4gICAgICAgIHRoaXMudHJ5SW5pdE9qc0Zsb3dzKCk7XG4gICAgICB9O1xuICAgICAgdGhpcy5vblN0cmlwZVBSU3RhdHVzQ2hhbmdlID0gKGluaXRTdGF0dXMpID0+IHtcbiAgICAgICAgaWYgKGluaXRTdGF0dXMuc3RhdHVzID09PSBcImxvYWRpbmdcIikge1xuICAgICAgICAgIHRoaXMuY29uZmlnLm9uUGF5bWVudFJlcXVlc3RMb2FkPy4oeyBhcHBsZV9wYXk6IFBSX0xPQURJTkcsIGdvb2dsZV9wYXk6IFBSX0xPQURJTkcgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5pdFN0YXR1cy5zdGF0dXMgPT09IFwiZXJyb3JcIikge1xuICAgICAgICAgIHRoaXMuY29uZmlnLm9uUGF5bWVudFJlcXVlc3RMb2FkPy4oeyBhcHBsZV9wYXk6IFBSX0VSUk9SLCBnb29nbGVfcGF5OiBQUl9FUlJPUiB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChpbml0U3RhdHVzLnN0YXR1cyA9PT0gXCJsb2FkZWRcIikge1xuICAgICAgICAgIGNvbnN0IGluaXRSZXN1bHQgPSBpbml0U3RhdHVzLnJlc3VsdDtcbiAgICAgICAgICBjb25zdCBjYW5BcHBsZVBheSA9IGluaXRSZXN1bHQuaXNBdmFpbGFibGUgJiYgaW5pdFJlc3VsdC5hdmFpbGFibGVQcm92aWRlcnMuYXBwbGVQYXk7XG4gICAgICAgICAgY29uc3QgY2FuR29vZ2xlUGF5ID0gaW5pdFJlc3VsdC5pc0F2YWlsYWJsZSAmJiBpbml0UmVzdWx0LmF2YWlsYWJsZVByb3ZpZGVycy5nb29nbGVQYXk7XG4gICAgICAgICAgdGhpcy5jb25maWcub25QYXltZW50UmVxdWVzdExvYWQ/Lih7XG4gICAgICAgICAgICBhcHBsZV9wYXk6IHtcbiAgICAgICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgaXNBdmFpbGFibGU6IGNhbkFwcGxlUGF5LFxuICAgICAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1c2VyUGFyYW1zKSA9PiBjYW5BcHBsZVBheSA/IHRoaXMuc3VibWl0UGF5bWVudFJlcXVlc3QoXCJhcHBsZV9wYXlcIiwgaW5pdFJlc3VsdCwgdXNlclBhcmFtcykgOiB2b2lkIDBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnb29nbGVfcGF5OiB7XG4gICAgICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBjYW5Hb29nbGVQYXksXG4gICAgICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHVzZXJQYXJhbXMpID0+IGNhbkdvb2dsZVBheSA/IHRoaXMuc3VibWl0UGF5bWVudFJlcXVlc3QoXCJnb29nbGVfcGF5XCIsIGluaXRSZXN1bHQsIHVzZXJQYXJhbXMpIDogdm9pZCAwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB0aGlzLnN1Ym1pdFBheW1lbnRSZXF1ZXN0ID0gKHByb3ZpZGVyLCBpbml0UmVzdWx0LCBwYXJhbXMpID0+IHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuY3JlYXRlT2pzRmxvd0NvbnRleHQoKTtcbiAgICAgICAgcmV0dXJuIE9qc0Zsb3dzLnN0cmlwZVBSLnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBwcm92aWRlciksXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgZmxvd0NhbGxiYWNrczogdGhpcy5jcmVhdGVPanNGbG93Q2FsbGJhY2tzKCksXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBwYXJhbXM/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgICAgICAgICBpbml0UmVzdWx0XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIE9wZW5QYXlGb3JtLmFzc2lnbkFzU2luZ2xldG9uKHRoaXMpO1xuICAgICAgdGhpcy5jb25maWcgPSB7IC4uLmNvbmZpZywgYmFzZVVybDogY29uZmlnLmJhc2VVcmwgPz8gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiIH07XG4gICAgICB0aGlzLmVsZW1lbnRzID0gbnVsbDtcbiAgICAgIHRoaXMuZm9ybUlkID0gYG9wanMtZm9ybS0ke3dpbmRvdy5jcnlwdG8ucmFuZG9tVVVJRCgpfWA7XG4gICAgICB0aGlzLnJlZmVyZXIgPSB3aW5kb3cubG9jYXRpb24ub3JpZ2luO1xuICAgICAgdGhpcy5mb3JtVGFyZ2V0ID0gY29uZmlnLmZvcm1UYXJnZXQgPz8gXCJib2R5XCI7XG4gICAgICB0aGlzLmZvcm1Qcm9wZXJ0aWVzID0geyBoZWlnaHQ6IFwiMXB4XCIgfTtcbiAgICAgIHRoaXMuY2RlTG9hZGVkUGF5bG9hZCA9IG51bGw7XG4gICAgICB0aGlzLm9qc0Zsb3dzSW5pdGlhbGl6YXRpb24gPSBudWxsO1xuICAgICAgdGhpcy5jaGVja291dEZpcmVkID0gZmFsc2U7XG4gICAgICB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyID0gbmV3IENvbm5lY3Rpb25NYW5hZ2VyKCk7XG4gICAgICB0aGlzLmV2ZW50SGFuZGxlciA9IG5ldyBPcGVuUGF5Rm9ybUV2ZW50SGFuZGxlcih0aGlzKTtcbiAgICAgIHRoaXMub2pzVmVyc2lvbiA9IFwiMC4xLjEwXCI7XG4gICAgICB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uID0gXCIwLjEuMTBcIjtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcy5ldmVudEhhbmRsZXIpKTtcbiAgICB9XG4gICAgc3RhdGljIHtcbiAgICAgIHRoaXMub2pzRmxvd3MgPSBPanNGbG93cztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQXNzaWduIHRoZSBpbnN0YW5jZSB0byB0aGUgd2luZG93IGFzIGEgc2luZ2xldG9uXG4gICAgICogQHBhcmFtIGZvcm0gLSBUaGUgT3BlblBheUZvcm0gaW5zdGFuY2VcbiAgICAgKi9cbiAgICBzdGF0aWMgYXNzaWduQXNTaW5nbGV0b24oZm9ybSkge1xuICAgICAgaWYgKE9wZW5QYXlGb3JtLmdldEluc3RhbmNlKCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiT3BlblBheSBpbnN0YW5jZSBhbHJlYWR5IGV4aXN0cy4gT25seSBvbmUgaW5zdGFuY2UgaXMgYWxsb3dlZC5cIik7XG4gICAgICB9XG4gICAgICB3aW5kb3dbXCJvanNcIl0gPSBmb3JtO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiBPcGVuUGF5Rm9ybVxuICAgICAqIEByZXR1cm5zIFRoZSBPcGVuUGF5Rm9ybSBpbnN0YW5jZVxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRJbnN0YW5jZSgpIHtcbiAgICAgIHJldHVybiB3aW5kb3dbXCJvanNcIl0gPz8gbnVsbDtcbiAgICB9XG4gICAgZ2V0Q29ubmVjdGlvbk1hbmFnZXIoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uTWFuYWdlcjtcbiAgICB9XG4gICAgc2V0Rm9ybUhlaWdodChoZWlnaHQpIHtcbiAgICAgIHRoaXMuZm9ybVByb3BlcnRpZXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgaWYgKHRoaXMuZWxlbWVudHMpIHtcbiAgICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLmVsZW1lbnRzKS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgZWxlbWVudC5ub2RlLnN0eWxlLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGNyZWF0ZUVsZW1lbnQoZWxlbWVudFZhbHVlLCBvcHRpb25zID0ge30pIHtcbiAgICAgIGlmICghdGhpcy5jb25maWcpIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgZm9ybSBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgICBjb25zdCB0eXBlID0gRWxlbWVudFR5cGUucGFyc2UoZWxlbWVudFZhbHVlKTtcbiAgICAgIGNvbnN0IGZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKTtcbiAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gdGhpcy5idWlsZFF1ZXJ5U3RyaW5nKG9wdGlvbnMpO1xuICAgICAgZnJhbWUubmFtZSA9IGAke3R5cGV9LWVsZW1lbnRgO1xuICAgICAgY29uc3QgdXJsID0gbmV3IFVSTChgL2FwcC92MS8ke2ZyYW1lLm5hbWV9YCwgdGhpcy5jb25maWcuYmFzZVVybCk7XG4gICAgICB1cmwuc2VhcmNoID0gcXVlcnlTdHJpbmcudG9TdHJpbmcoKTtcbiAgICAgIGZyYW1lLnNyYyA9IHVybC5ocmVmO1xuICAgICAgdGhpcy5jb25maWcuX2ZyYW1lVXJsID0gdXJsO1xuICAgICAgZnJhbWUuc3R5bGUuYm9yZGVyID0gXCJub25lXCI7XG4gICAgICBmcmFtZS5zdHlsZS53aWR0aCA9IFwiMTAwJVwiO1xuICAgICAgY29uc3QgZWxlbWVudCA9IHtcbiAgICAgICAgdHlwZSxcbiAgICAgICAgbm9kZTogZnJhbWUsXG4gICAgICAgIG1vdW50OiAoc2VsZWN0b3IpID0+IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpPy5hcHBlbmRDaGlsZChmcmFtZSlcbiAgICAgIH07XG4gICAgICB0aGlzLmNvbm5lY3RUb0VsZW1lbnQoZWxlbWVudCk7XG4gICAgICBpZiAodGhpcy5lbGVtZW50cykge1xuICAgICAgICB0aGlzLmVsZW1lbnRzW3R5cGVdID0gZWxlbWVudDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZWxlbWVudHMgPSB7IFt0eXBlXTogZWxlbWVudCB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuICAgIGJ1aWxkUXVlcnlTdHJpbmcob3B0aW9ucykge1xuICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICBxdWVyeVN0cmluZy5hcHBlbmQoXCJyZWZlcmVyXCIsIHRoaXMucmVmZXJlcik7XG4gICAgICBxdWVyeVN0cmluZy5hcHBlbmQoXCJmb3JtSWRcIiwgdGhpcy5mb3JtSWQpO1xuICAgICAgaWYgKG9wdGlvbnMuc3R5bGVzKSB7XG4gICAgICAgIHF1ZXJ5U3RyaW5nLmFwcGVuZChcInN0eWxlc1wiLCBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyhvcHRpb25zLnN0eWxlcykpO1xuICAgICAgfVxuICAgICAgcXVlcnlTdHJpbmcuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbik7XG4gICAgICByZXR1cm4gcXVlcnlTdHJpbmc7XG4gICAgfVxuICAgIGNvbm5lY3RUb0VsZW1lbnQoZWxlbWVudCkge1xuICAgICAgY3JlYXRlQ29ubmVjdGlvbihlbGVtZW50Lm5vZGUpLnRoZW4oKGNvbm4pID0+IHtcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uTWFuYWdlci5hZGRDb25uZWN0aW9uKGVsZW1lbnQudHlwZSwgY29ubik7XG4gICAgICAgIHRoaXMudHJ5SW5pdE9qc0Zsb3dzKCk7XG4gICAgICB9KS5jYXRjaCgoZXJyKSA9PiBjb25zb2xlLmVycm9yKFwiW0ZPUk1dIEVycm9yIGNvbm5lY3RpbmcgdG8gQ0RFIGlmcmFtZVwiLCBlcnIpKTtcbiAgICB9XG4gICAgZ2V0Rm9ybURpdigpIHtcbiAgICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuZm9ybVRhcmdldCkgPz8gZG9jdW1lbnQuYm9keTtcbiAgICB9XG4gICAgY3JlYXRlT2pzRmxvd0NvbnRleHQoKSB7XG4gICAgICBjb25zdCBjZGVDb25uZWN0aW9ucyA9IHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuZ2V0QWxsQ29ubmVjdGlvbnMoKTtcbiAgICAgIGlmICghdGhpcy5jZGVMb2FkZWRQYXlsb2FkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlJlcXVlc3RlZCBjb250ZXh0IHdoaWxlIENERSBub3QgeWV0IGxvYWRlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChjZGVDb25uZWN0aW9ucy5zaXplID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIENERSBjb25uZWN0aW9ucyBmb3VuZFwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJhc2VVcmw6IG5ldyBVUkwodGhpcy5jb25maWcuYmFzZVVybCA/PyBGUkFNRV9CQVNFX1VSTCkub3JpZ2luLFxuICAgICAgICBmb3JtRGl2OiB0aGlzLmdldEZvcm1EaXYoKSxcbiAgICAgICAgZWxlbWVudHNTZXNzaW9uSWQ6IHRoaXMuY2RlTG9hZGVkUGF5bG9hZC5zZXNzaW9uSWQsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHRoaXMuY2RlTG9hZGVkUGF5bG9hZC5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICBjZGVDb25uZWN0aW9ucyxcbiAgICAgICAgY3VzdG9tSW5pdFBhcmFtczogdGhpcy5jb25maWcuY3VzdG9tSW5pdFBhcmFtcyA/PyB7fVxuICAgICAgfTtcbiAgICB9XG4gICAgY3JlYXRlT2pzRmxvd0NhbGxiYWNrcygpIHtcbiAgICAgIGNvbnN0IG5vT3AgPSAoKSA9PiB7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb25DaGVja291dEVycm9yOiBtYWtlQ2FsbGJhY2tTYWZlKFwib25DaGVja291dEVycm9yXCIsIHRoaXMuY29uZmlnLm9uQ2hlY2tvdXRFcnJvciA/PyBub09wKSxcbiAgICAgICAgb25DaGVja291dFN0YXJ0ZWQ6IG1ha2VDYWxsYmFja1NhZmUoXCJvbkNoZWNrb3V0U3RhcnRlZFwiLCB0aGlzLmNvbmZpZy5vbkNoZWNrb3V0U3RhcnRlZCA/PyBub09wKSxcbiAgICAgICAgb25DaGVja291dFN1Y2Nlc3M6IG1ha2VDYWxsYmFja1NhZmUoXCJvbkNoZWNrb3V0U3VjY2Vzc1wiLCB0aGlzLmNvbmZpZy5vbkNoZWNrb3V0U3VjY2VzcyA/PyBub09wKSxcbiAgICAgICAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiBtYWtlQ2FsbGJhY2tTYWZlKFxuICAgICAgICAgIFwib25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzXCIsXG4gICAgICAgICAgdGhpcy5jb25maWcub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzID8/IG5vT3BcbiAgICAgICAgKSxcbiAgICAgICAgb25WYWxpZGF0aW9uRXJyb3I6IG1ha2VDYWxsYmFja1NhZmUoXCJvblZhbGlkYXRpb25FcnJvclwiLCB0aGlzLmNvbmZpZy5vblZhbGlkYXRpb25FcnJvciA/PyBub09wKVxuICAgICAgfTtcbiAgICB9XG4gICAgc3VibWl0KCkge1xuICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuY3JlYXRlT2pzRmxvd0NvbnRleHQoKTtcbiAgICAgIE9qc0Zsb3dzLmNvbW1vbkNDLnJ1bih7XG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwiY3JlZGl0X2NhcmRcIiksXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICBmbG93Q2FsbGJhY2tzOiB0aGlzLmNyZWF0ZU9qc0Zsb3dDYWxsYmFja3MoKSxcbiAgICAgICAgY3VzdG9tUGFyYW1zOiB2b2lkIDAsXG4gICAgICAgIC8vIFRoaXMgZmxvdyByZXF1aXJlcyBubyBjdXN0b20gcGFyYW1zXG4gICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAvLyBUaGlzIGZsb3cgcmVxdWlyZXMgbm8gaW5pdGlhbGl6YXRpb25cbiAgICAgIH0pO1xuICAgIH1cbiAgICBvblBheW1lbnRSZXF1ZXN0RXJyb3IoZXJyTXNnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiW2Zvcm1dIEVycm9yIGZyb20gcGF5bWVudCByZXF1ZXN0OlwiLCBlcnJNc2cpO1xuICAgICAgdGhpcy5jaGVja291dEZpcmVkID0gZmFsc2U7XG4gICAgICBpZiAodGhpcy5jb25maWcub25DaGVja291dEVycm9yKSB0aGlzLmNvbmZpZy5vbkNoZWNrb3V0RXJyb3IoZXJyTXNnKTtcbiAgICB9XG4gICAgZGVzdHJveSgpIHtcbiAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBPYmplY3QudmFsdWVzKHRoaXMuZWxlbWVudHMgPz8ge30pKSB7XG4gICAgICAgIGVsZW1lbnQubm9kZS5yZW1vdmUoKTtcbiAgICAgIH1cbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcy5ldmVudEhhbmRsZXIpKTtcbiAgICB9XG4gIH1cblxuICBleHBvcnRzLkZpZWxkTmFtZSA9IEZpZWxkTmFtZTtcbiAgZXhwb3J0cy5PcGVuUGF5Rm9ybSA9IE9wZW5QYXlGb3JtO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXG59KSk7Il0sCiAgIm1hcHBpbmdzIjogIkNBQUMsU0FBVUEsRUFBUUMsRUFBUyxDQUMxQixPQUFPLFNBQVksVUFBWSxPQUFPLE9BQVcsSUFBY0EsRUFBUSxRQUFTLFFBQVEsS0FBSyxFQUFHLFFBQVEsTUFBTSxFQUFHLFFBQVEsUUFBUSxFQUFHLFFBQVEsT0FBTyxDQUFDLEVBQ3BKLE9BQU8sUUFBVyxZQUFjLE9BQU8sSUFBTSxPQUFPLENBQUMsVUFBVyxNQUFPLE9BQVEsU0FBVSxPQUFPLEVBQUdBLENBQU8sR0FDekdELEVBQVMsT0FBTyxXQUFlLElBQWMsV0FBYUEsR0FBVSxLQUFNQyxFQUFRRCxFQUFPLFFBQVUsQ0FBQyxFQUFHQSxFQUFPLElBQUtBLEVBQU8sS0FBTUEsRUFBTyxPQUFRQSxFQUFPLEtBQUssRUFDOUos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QU8sZ0JBQWdCQSxDQUFNLENBQ3JFLENBQ0EsU0FBVSxDQUNSLFVBQVdSLEtBQVcsT0FBTyxPQUFPLEtBQUssVUFBWSxDQUFDLENBQUMsRUFDckRBLEVBQVEsS0FBSyxPQUFPLEVBRXRCLE9BQU8sb0JBQW9CLFVBQVcsS0FBSyxhQUFhLGNBQWMsS0FBSyxLQUFLLFlBQVksQ0FBQyxDQUMvRixDQUNGLEVBaklJVCxFQUFLLFNBQVc5SSxFQXpFcEIsSUFBTWdLLEdBQU5sQixFQTRNQTlZLEVBQVEsVUFBWWtDLEVBQ3BCbEMsRUFBUSxZQUFjZ2EsR0FFdEIsT0FBTyxlQUFlaGEsRUFBUyxPQUFPLFlBQWEsQ0FBRSxNQUFPLFFBQVMsQ0FBQyxDQUV4RSxDQUFFIiwKICAibmFtZXMiOiBbImdsb2JhbCIsICJmYWN0b3J5IiwgImV4cG9ydHMiLCAiem9kIiwgInV1aWQiLCAicGVucGFsIiwgImNoYWxrIiwgIkZSQU1FX0JBU0VfVVJMIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEiLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3JSZXNwb25zZSIsICJab2RGaWVsZEVycm9yIiwgIlpvZEZpZWxkRXJyb3JzIiwgIk1BUF9UT19IVU1BTl9GUklFTkRMWV9MT1dFUkNBU0UiLCAiZ2V0SHVtYW5GcmllbmRseU1lc3NhZ2UiLCAib2dFcnJvck1lc3NhZ2UiLCAia2V5IiwgImlzU3RyaW5naWZpZWRKc29uT2JqZWN0IiwgInN0ciIsICJjcmVhdGVNZXNzYWdlRnJvbVB5ZGFudGljVmFsaWRhdGlvbkVycm9yIiwgInJlc3BvbnNlIiwgImVyciIsICJjcmVhdGVNZXNzYWdlRnJvbVpvZEZpZWxkRXJyb3JzIiwgImVycm9ycyIsICJnZXRFcnJvck1lc3NhZ2UiLCAiZSIsICJvYmoiLCAiZTIiLCAibWFrZUNhbGxiYWNrU2FmZSIsICJjYWxsYmFja05hbWUiLCAiZm4iLCAiYXJncyIsICJlcnJvciIsICJSZXF1aXJlZFN0cmluZyIsICJPcHRpb25hbFN0cmluZyIsICJudWxsT3JVbmRlZk9yJDEiLCAielR5cGUiLCAiRmllbGROYW1lIiwgIkZpZWxkTmFtZTIiLCAiRmllbGROYW1lRW51bSIsICJQcml2YXRlRmllbGROYW1lIiwgIlByaXZhdGVGaWVsZE5hbWUyIiwgIlByaXZhdGVGaWVsZE5hbWVFbnVtIiwgIkFsbEZpZWxkTmFtZXMiLCAiRWxlbWVudFR5cGVFbnVtIiwgIkVsZW1lbnRUeXBlRW51bTIiLCAiRWxlbWVudFR5cGUiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEiLCAiUGF5bWVudE1ldGhvZE1pbmltYWwiLCAiRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50UGF5bG9hZCIsICJJbnB1dEV2ZW50VHlwZSIsICJJbnB1dEV2ZW50UGF5bG9hZCIsICJFcnJvckV2ZW50VHlwZSIsICJFcnJvckV2ZW50UGF5bG9hZCIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkIiwgIkxheW91dEV2ZW50UGF5bG9hZCIsICJMb2FkZWRFdmVudFBheWxvYWQiLCAiUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkIiwgIlNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIlJlcXVpcmVkRm9ybUZpZWxkcyIsICJQUkZvcm1GaWVsZHMiLCAiU3VibWl0RXZlbnRUeXBlIiwgIlN1Ym1pdEV2ZW50UGF5bG9hZCIsICJUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkV2ZW50UGF5bG9hZCIsICJFbGVtZW50RXZlbnQiLCAiQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UiLCAiRmllbGRWYWxpZGF0aW9uRXJyb3IiLCAiVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSIsICJUb2tlbml6ZUNhcmRSZXNwb25zZSIsICJUaHJlZURTU3RhdHVzIiwgIlRocmVlRFNTdGF0dXMyIiwgIlBpbmczRFNTdGF0dXNSZXNwb25zZSIsICJDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAiZXh0cmFjdElzc3Vlc1BlckZpZWxkIiwgImlzc3Vlc1BlckZpZWxkIiwgInZhbHVlIiwgImZpZWxkTmFtZSIsICJTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAiUGF5bWVudFJlcXVlc3ROZXh0QWN0aW9uTWV0YWRhdGEiLCAib3VyQ3VycmVuY3lUb1RoZWlycyIsICJnZXRMb2FkZWRTdHJpcGUiLCAicHVibGlzaGFibGVLZXkiLCAiaSIsICJpc1N0cmlwZUpzUHJlc2VudCIsICJzbGVlcCIsICJjcmVhdGVTdHJpcGVFbGVtZW50cyIsICJzdHJpcGVQdWJLZXkiLCAiZWxlbWVudHNPcHRpb25zIiwgInN0cmlwZSIsICJjcmVhdGVTdHJpcGVQYXltZW50UmVxdWVzdCIsICJ0b3RhbEFtb3VudEF0b20iLCAiY3VycmVuY3kiLCAiaXNBbW91bnRQZW5kaW5nIiwgImlzTGlua09ubHkiLCAic3RyaXBlQ3VycmVuY3kiLCAidGltZW91dE1zIiwgInJlc29sdmUiLCAid2FpdEZvclVzZXJUb0FkZFBheW1lbnRNZXRob2QiLCAicGF5bWVudFJlcXVlc3QiLCAicmVqZWN0IiwgImV2dCIsICJjb25maXJtU3RyaXBlUHJQTSIsICJuZXh0QWN0aW9uTWV0YWRhdGEiLCAic3RyaXBlUG0iLCAiY29uZmlybVJlc3VsdCIsICJsYXVuY2hTdHJpcGUzRFNEaWFsb2dGbG93IiwgIl9hIiwgIl9iIiwgIl9jIiwgIl9kIiwgInJlc3VsdFN0YXR1cyIsICJjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyIsICJzdHlsZXMiLCAiY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtIiwgImZvcm1EaXYiLCAiaW5pdGlhbERpY3QiLCAiYWNjIiwgImlucHV0IiwgInBhcnNlRXZlbnRQYXlsb2FkIiwgImV2ZW50RGF0YSIsICJlbWl0RXZlbnQiLCAidGFyZ2V0IiwgImZvcm1JZCIsICJlbGVtZW50SWQiLCAicGF5bG9hZCIsICJiYXNlVXJsIiwgImV2ZW50IiwgImNoZWNrSWZWYWxpZENkZUNvbm5lY3Rpb25PYmplY3QiLCAicGluZyIsICJyZXN1bHQiLCAiaXNSZXN1bHRWYWxpZCIsICJpc1ZhbGlkIiwgIm51bGxPclVuZGVmT3IiLCAiQ0RFUmVzcG9uc2VFcnJvciIsICJDb3Vwb25NaW5pbWFsIiwgIkxpbmVJdGVtIiwgIkJyYW5kU2V0dGluZ3MiLCAiQnJhbmQiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kIiwgIlN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsIiwgIlN1YnNjcmlwdGlvbk1pbmltYWwiLCAiSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsIiwgIkludm9pY2VMaW5lSXRlbU1pbmltYWwiLCAiRGlzY291bnRNaW5pbWFsIiwgIkludm9pY2VNaW5pbWFsIiwgIkNyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCIsICJQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSIsICJfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uIiwgIlBheW1lbnRGb3JtUHJlZmlsbCIsICJDb21wbGV0ZWRGb3JtUHJlZmlsbCIsICJFeHBpcmVkRm9ybVByZWZpbGwiLCAiQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UiLCAiU2V0dXBDaGVja291dFJlc3BvbnNlIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yIiwgIlN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSIsICJTdGFydFBheW1lbnRGbG93Rm9yQ0NSZXNwb25zZSIsICJzdW0iLCAiYXJyIiwgImEiLCAiYiIsICJmaXhQcm90byIsICJwcm90b3R5cGUiLCAic2V0UHJvdG90eXBlT2YiLCAiZml4U3RhY2siLCAiY2FwdHVyZVN0YWNrVHJhY2UiLCAiX19leHRlbmRzIiwgIl9leHRlbmRTdGF0aWNzIiwgImQiLCAicCIsICJfXyIsICJDdXN0b21FcnJvciIsICJfc3VwZXIiLCAibWVzc2FnZSIsICJvcHRpb25zIiwgIl9uZXdUYXJnZXQiLCAiX3RoaXMiLCAiQ2RlRXJyb3IiLCAiZnJpZW5kbHlNZXNzYWdlIiwgInF1ZXJ5Q0RFIiwgImNkZUNvbm4iLCAiZGF0YSIsICJyZXNwb25zZVNjaGVtYSIsICJpc0NERVJlc3BvbnNlRXJyb3IiLCAiY2hlY2tJZkNvbmZvcm1zVG9TY2hlbWEiLCAic2NoZW1hIiwgImdldENoZWNrb3V0UHJldmlldyIsICJyZXF1ZXN0IiwgImdldFByZWZpbGwiLCAic3RhcnRQYXltZW50RmxvdyIsICJzdGFydFBheW1lbnRGbG93Rm9yQ0MiLCAic3RhcnRQYXltZW50Rmxvd0ZvclBSIiwgImNvbmZpcm1QYXltZW50RmxvdyIsICJnZXRDaGVja291dFZhbHVlIiwgInNlY3VyZVRva2VuIiwgInByb21vQ29kZSIsICJjaGVja291dFByZXZpZXciLCAiY3VycmVuY2llcyIsICJpbnYiLCAiYW1vdW50QXRvbSIsICJnZXRDaGVja291dFByZXZpZXdBbW91bnQiLCAiaXNTZXR1cE1vZGUiLCAidG9rZW5pemVDYXJkT25BbGxDb25uZWN0aW9ucyIsICJhbGxDZGVDb25uZWN0aW9ucyIsICJjaGVja291dENhcmRFbGVtZW50cyIsICJzZXR1cENoZWNrb3V0IiwgInBlcmZvcm1DaGVja291dCIsICJDREVfUE9MTElOR19JTlRFUlZBTCIsICJwaW5nQ2RlRm9yM2RzU3RhdHVzIiwgImlmcmFtZSIsICJjaGlsZE9yaWdpbiIsICJjb25uZWN0aW9uT2JqIiwgImFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzIiwgInNpbXBsZU9qc0Zsb3ciLCAicGFyYW1zIiwgImZsb3dSZXN1bHQiLCAiYWRkRXJyb3JDYXRjaGVyRm9ySW5pdCIsICJpbml0IiwgImVycl9fIiwgImNyZWF0ZU9qc0Zsb3dMb2dnZXJzIiwgInByZWZpeCIsICJsb2ciLCAibG9nX18kNSIsICJlcnJfXyQ1IiwgInBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UiLCAiZmluZENwbU1hdGNoaW5nVHlwZSIsICJhbGxDUE1zIiwgInpvZE1vZGVsIiwgImNwbSIsICJjcG0yIiwgImxvZ19fJDQiLCAiZXJyX18kNCIsICJ2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyIsICJub25DZGVGb3JtSW5wdXRzIiwgIm9uVmFsaWRhdGlvbkVycm9yIiwgImZvcm1hdHRlZCIsICJpc3N1ZXMiLCAidmFsaWRhdGVUb2tlbml6ZUNhcmRSZXN1bHRzIiwgInRva2VuaXplUmVzdWx0cyIsICJ0b2tlbml6ZVJlc3VsdCIsICJwYXJzZWQiLCAiT0pTX1NUUklQRV9MSU5LX0JUTl9JRCIsICJsb2dfXyQzIiwgImVycl9fJDMiLCAiU3RyaXBlTGlua0NwbSIsICJTdHJpcGVMaW5rUmVxdWlyZWRVc2VyQWN0aW9ucyIsICJpbml0U3RyaXBlTGlua0Zsb3ciLCAiY29udGV4dCIsICJmbG93Q2FsbGJhY2tzIiwgInN0cmlwZUxpbmtDcG0iLCAiYW55Q2RlQ29ubmVjdGlvbiIsICJwcmVmaWxsIiwgImluaXRpYWxQcmV2aWV3IiwgImVsZW1lbnRzIiwgImV4cHJlc3NDaGVja291dEVsZW1lbnQiLCAiT2pzRmxvd3MiLCAicnVuU3RyaXBlTGlua0Zsb3ciLCAiY2hlY2tvdXRQYXltZW50TWV0aG9kIiwgImN1c3RvbVBhcmFtcyIsICJtZXJnZWRJbnB1dHMiLCAiZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQTSIsICJub25DZGVGb3JtRmllbGRzIiwgInN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSIsICJvdXJFeGlzdGluZ1BtSWQiLCAiY2hlY2tvdXRSZXF1ZXN0IiwgImZvcm1JbnB1dHMiLCAiX2UiLCAiaW5wdXRzIiwgInBheWVyRmlyc3ROYW1lIiwgInBheWVyTGFzdE5hbWVQYXJ0cyIsICJwYXllckxhc3ROYW1lIiwgImNyZWF0ZUFuZE9wZW5GcmFtZSIsICJ1cmwiLCAidGVtcGxhdGUiLCAiaG9zdCIsICJzaGFkb3dSb290IiwgImNhbmNlbEJ1dHRvbiIsICJzdGFydFBvbGxpbmciLCAib25TdWNjZXNzIiwgImhhbmRsZVBvbGxpbmciLCAic3RhdHVzIiwgInBvbGxpbmdJbnRlcnZhbCIsICJoYW5kbGVFdmVudHMiLCAiaGFuZGxlQ2FuY2VsIiwgInN0YXJ0M2RzVmVyaWZpY2F0aW9uIiwgImNsZWFudXBFdmVudExpc3RlbmVycyIsICJsb2dfXyQyIiwgImVycl9fJDIiLCAic3RyaXBlTG9nX18iLCAicnVuQ29tbW9uQ2NGbG93IiwgInRva2VuaXplQ2FyZFJlc3VsdHMiLCAiY29tbW9uQ2hlY2tvdXRQYXJhbXMiLCAic2hvdWxkVXNlTmV3RmxvdyIsICJzdGFydFBmUmVzdWx0IiwgImNvbW1vbkNDM0RTRmxvdyIsICJzdHJpcGVDQzNEU0Zsb3ciLCAiY3JlYXRlZFBheW1lbnRNZXRob2QiLCAicGFyc2VTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAic3RyaXBlQWN0aW9uIiwgImFjdGlvbiIsICJwYXJzZUNvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YSIsICJjb21tb25BY3Rpb24iLCAibG9nX18kMSIsICJlcnJfXyQxIiwgIlN0cmlwZVByQ3BtIiwgImluaXRTdHJpcGVQckZsb3ciLCAicHIiLCAiY2FuTWFrZVBheW1lbnQiLCAicnVuU3RyaXBlUHJGbG93IiwgImluaXRSZXN1bHQiLCAib3ZlcnJpZGUiLCAidXBkYXRlUHJXaXRoQW1vdW50IiwgInN0cmlwZVBtQWRkZWRFdmVudCIsICJmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBtIiwgInBhcnNlUFJOZXh0QWN0aW9uTWV0YWRhdGEiLCAic3RyaXBlUG1FdnQiLCAiYW1vdW50IiwgImlzUGVuZGluZyIsICJmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0IiwgImNwbXMiLCAid2l0aFByb3ZpZGVyIiwgIndpdGhQcm9jZXNzb3IiLCAibWF0Y2hlcyIsICJnZXREZWZhdWx0RXhwb3J0RnJvbUNqcyIsICJ4IiwgIk9ic2VydmFibGUkMiIsICJoYXNTeW1ib2wiLCAibmFtZSIsICJnZXRTeW1ib2wiLCAiU3ltYm9sSXRlcmF0b3IiLCAiU3ltYm9sT2JzZXJ2YWJsZSIsICJTeW1ib2xTcGVjaWVzIiwgImdldE1ldGhvZCIsICJnZXRTcGVjaWVzIiwgImN0b3IiLCAiT2JzZXJ2YWJsZSQxIiwgImlzT2JzZXJ2YWJsZSIsICJob3N0UmVwb3J0RXJyb3IiLCAiZW5xdWV1ZSIsICJjbGVhbnVwU3Vic2NyaXB0aW9uIiwgInN1YnNjcmlwdGlvbiIsICJjbGVhbnVwIiwgInVuc3Vic2NyaWJlIiwgImNsb3NlU3Vic2NyaXB0aW9uIiwgImZsdXNoU3Vic2NyaXB0aW9uIiwgInF1ZXVlIiwgIm5vdGlmeVN1YnNjcmlwdGlvbiIsICJ0eXBlIiwgIm9ic2VydmVyIiwgIm0iLCAib25Ob3RpZnkiLCAiU3Vic2NyaXB0aW9uIiwgInN1YnNjcmliZXIiLCAic2VsZiIsICJzdWJzY3JpcHRpb25PYnNlcnZlciIsICJPYnNlcnZhYmxlIiwgImRvbmUiLCAiQyIsICJoYXNTZWVkIiwgImhhc1ZhbHVlIiwgImZpcnN0IiwgInZhbHVlcyIsICJzb3VyY2VzIiwgImluZGV4IiwgInN0YXJ0TmV4dCIsICJuZXh0IiwgInYiLCAic3Vic2NyaXB0aW9ucyIsICJvdXRlciIsICJpbm5lciIsICJjb21wbGV0ZUlmRG9uZSIsICJzIiwgIm1ldGhvZCIsICJvYnNlcnZhYmxlIiwgIml0ZW0iLCAiaXRlbXMiLCAiemVuT2JzZXJ2YWJsZSIsICJsb2dfXyIsICJnZXRPanNJbml0UmVzdWx0c0RlYnVnT2JqZWN0IiwgImluaXRpYWxpemVPanNGbG93cyIsICJpbml0UGFyYW1zIiwgInJ1bkluaXRGbG93QXNPYnNlcnZhYmxlIiwgImZsb3dOYW1lIiwgImluaXRGbG93IiwgIlBSX0xPQURJTkciLCAiUFJfRVJST1IiLCAiT3BlblBheUZvcm1FdmVudEhhbmRsZXIiLCAiZm9ybUluc3RhbmNlIiwgImV2ZW50VHlwZSIsICJoZWlnaHQiLCAiZmllbGQiLCAic291cmNlIiwgImNyZWF0ZUNvbm5lY3Rpb24iLCAiaXNWYWxpZE9iamVjdCIsICJDb25uZWN0aW9uTWFuYWdlciIsICJpZCIsICJjb25uZWN0aW9uIiwgIl9PcGVuUGF5Rm9ybSIsICJjb25maWciLCAiaW5pdFN0YXR1cyIsICJfZiIsICJjYW5BcHBsZVBheSIsICJjYW5Hb29nbGVQYXkiLCAidXNlclBhcmFtcyIsICJwcm92aWRlciIsICJmb3JtIiwgImVsZW1lbnQiLCAiZWxlbWVudFZhbHVlIiwgImZyYW1lIiwgInF1ZXJ5U3RyaW5nIiwgInNlbGVjdG9yIiwgImNvbm4iLCAiY2RlQ29ubmVjdGlvbnMiLCAibm9PcCIsICJlcnJNc2ciLCAiT3BlblBheUZvcm0iXQp9Cg==
|